diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f42af3c40..6dbde89cd6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,7 +27,7 @@ ], "tgstationTestExplorer.project.resultsType": "json", "[dm]": { - "files.eol": "\r\n", + "files.eol": "\n", "editor.detectIndentation": false, "editor.insertSpaces": false }, diff --git a/1Item_list.dmm b/1Item_list.dmm index abc306e296..5ac914f232 100644 --- a/1Item_list.dmm +++ b/1Item_list.dmm @@ -1,123356 +1,123356 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aai" = ( -/obj/structure/prop/machine/stamper/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaj" = ( -/obj/item/seeds/peanutseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aak" = ( -/obj/item/clothing/gloves/sterile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aal" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/ion{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aar" = ( -/obj/item/clothing/under/rank/orderly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aat" = ( -/obj/item/clothing/under/rank/nullsuit/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aax" = ( -/obj/trader/general, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aay" = ( -/obj/item/clothing/under/qipao/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaE" = ( -/obj/item/weapon/aiModule/scientific_pursuer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaH" = ( -/mob/living/simple_mob/mobs_monsters/clowns/normal{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aaK" = ( -/obj/item/clothing/suit/tajaran/furs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaR" = ( -/obj/item/weapon/circuitboard/shutoff_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaT" = ( -/obj/structure/closet/crate/secure/large/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aaV" = ( -/obj/item/weapon/storage/pill_bottle/adminordrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abg" = ( -/obj/structure/bed/chair/sofa/right/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abt" = ( -/mob/living/simple_mob/animal/passive/cow{ - dir = 4 - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"abx" = ( -/obj/item/clothing/suit/storage/tailcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abA" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abD" = ( -/obj/structure/prop/prismcontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abO" = ( -/obj/machinery/clamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"abV" = ( -/obj/item/weapon/rig/ch/behemoth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acc" = ( -/obj/item/weapon/aiModule/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ace" = ( -/obj/structure/symbol/da, -/turf/simulated/fitness, -/area/survivalpod) -"ach" = ( -/obj/item/weapon/paper/hydroponics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acn" = ( -/obj/structure/door_assembly/door_assembly_med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acr" = ( -/obj/item/weapon/computer_hardware/nano_printer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acv" = ( -/obj/item/ammo_casing/a10mm/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acG" = ( -/obj/item/device/encryptionkey/heads/ai_integrated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"acK" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ade" = ( -/obj/item/weapon/disk/limb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adg" = ( -/obj/item/weapon/gun/projectile/sec/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adj" = ( -/obj/structure/bed/chair/sofa/left/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adt" = ( -/obj/item/weapon/gun/energy/retro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adB" = ( -/obj/item/clothing/suit/storage/hooded/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adD" = ( -/obj/structure/closet/crate/nanomed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adL" = ( -/obj/item/ammo_magazine/ammo_box/b762, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"adX" = ( -/obj/machinery/computer/id_restorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aea" = ( -/mob/living/simple_mob/vore/woof/hostile{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aeh" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/fluff/molenar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aej" = ( -/obj/item/seeds/appleseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aer" = ( -/obj/item/weapon/refill_cartridge/multitype/drink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aes" = ( -/obj/item/flag/pirate/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aeI" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aeJ" = ( -/obj/item/clothing/head/beret/solgov/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aeO" = ( -/obj/item/weapon/storage/belt/medical/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aeQ" = ( -/obj/item/weapon/stock_parts/scanning_module/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afl" = ( -/obj/machinery/door/blast/radproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afm" = ( -/obj/item/organ/internal/stomach/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afr" = ( -/obj/item/clothing/ears/earring/dangle/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afs" = ( -/obj/item/clothing/glasses/graviton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afD" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/spinach, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/spreads, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"afM" = ( -/obj/machinery/hyperpad{ - dir = 8 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"age" = ( -/obj/structure/closet/crate/secure/loot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agk" = ( -/obj/item/clothing/under/solgov/utility/fleet/combat/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agl" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agt" = ( -/obj/item/clothing/head/ushanka/solgov/marine/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agv" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/buttspie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agx" = ( -/obj/item/mecha_parts/component/armor/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agz" = ( -/obj/structure/sign/painting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agB" = ( -/obj/item/clothing/head/caphat/beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agJ" = ( -/obj/item/weapon/pen/crayon/marker/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agN" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agP" = ( -/obj/machinery/chemical_dispenser/biochemistry/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agQ" = ( -/obj/item/clothing/accessory/collar/spike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agT" = ( -/obj/item/weapon/material/star, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"agZ" = ( -/obj/item/clothing/gloves/fyellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahh" = ( -/obj/structure/prop/prism/incremental, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahj" = ( -/obj/machinery/vending/hydroseeds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aho" = ( -/obj/item/trash/lollibutt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahw" = ( -/obj/item/clothing/under/terran/navy/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahz" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahB" = ( -/obj/item/robot_parts/r_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahM" = ( -/obj/structure/bed/chair/sofa/right/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahT" = ( -/obj/structure/closet/secure_closet/egg/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahV" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ahZ" = ( -/obj/item/clothing/head/bio_hood/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aia" = ( -/obj/item/clothing/head/soft/solgov/sifguard/co, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aii" = ( -/obj/item/weapon/reagent_containers/glass/paint/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ail" = ( -/obj/item/weapon/reagent_containers/food/snacks/crabmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aix" = ( -/obj/item/weapon/melee/baton/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiy" = ( -/obj/item/weapon/bedsheet/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiz" = ( -/obj/item/clothing/under/color/ranger/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiD" = ( -/mob/living/simple_mob/vore/hostile/morph/dominated_prey, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aiF" = ( -/obj/item/weapon/cane/crutch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiI" = ( -/obj/item/device/depth_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiJ" = ( -/obj/item/clothing/head/pin/flower/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiO" = ( -/obj/machinery/door/airlock/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiR" = ( -/obj/item/weapon/spell/modifier/mend_synthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aiW" = ( -/obj/item/weapon/card/id/casino/both, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajc" = ( -/obj/item/clothing/suit/suspenders/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aje" = ( -/obj/machinery/door/firedoor/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajf" = ( -/obj/item/clothing/under/rank/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajp" = ( -/obj/item/weapon/spell/projectile/lightning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajr" = ( -/obj/item/device/aicard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajt" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aju" = ( -/obj/item/weapon/firework_star/weather/snow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajA" = ( -/obj/item/clothing/head/hood/winter/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajL" = ( -/obj/item/ammo_casing/microbattery/combat/net, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajQ" = ( -/obj/item/rig_module/device/paperdispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajR" = ( -/obj/structure/prop/machine/green_egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajV" = ( -/obj/effect/projectile_lighting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ajY" = ( -/obj/item/clothing/under/suit_jacket/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akd" = ( -/obj/item/rig_module/rad_shield/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ake" = ( -/obj/machinery/gear_dispenser/suit_fancy/commonwealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akg" = ( -/obj/item/clothing/accessory/solgov/rank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akk" = ( -/obj/item/clothing/shoes/boots/winter/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akA" = ( -/obj/item/weapon/reagent_containers/food/snacks/roastedsunflower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akL" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akM" = ( -/obj/item/clothing/suit/barding/alt_agatha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akP" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"akS" = ( -/obj/item/clothing/mask/goblin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alc" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alg" = ( -/obj/item/clothing/gloves/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alr" = ( -/mob/living/simple_mob/mechanical/hivebot/swarm{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"alG" = ( -/obj/item/clothing/head/flatcap/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alL" = ( -/obj/item/weapon/reagent_containers/food/drinks/ice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alP" = ( -/obj/item/clothing/accessory/storage/pouches/large/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alQ" = ( -/obj/item/clothing/head/cueball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alS" = ( -/obj/item/clothing/head/tesh_hood/standard/black_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alT" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"alX" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amd" = ( -/obj/item/weapon/storage/bag/circuits/mini/trig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ame" = ( -/obj/item/ammo_magazine/mtg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amf" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ami" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/puppy, -/turf/simulated/floor/atoll, -/area/survivalpod) -"amj" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/roy_rogers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amA" = ( -/obj/item/weapon/paper/rogueminer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amK" = ( -/obj/item/weapon/gun/projectile/pistol/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amU" = ( -/obj/item/organ/internal/liver/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amV" = ( -/obj/item/stack/material/wood/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"amW" = ( -/obj/item/clothing/head/cowboy/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ang" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anl" = ( -/obj/item/weapon/melee/changeling/claw/greater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ano" = ( -/obj/item/clothing/shoes/boots/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anu" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anE" = ( -/obj/item/ammo_casing/macrobattery/stabilize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anM" = ( -/obj/item/weapon/storage/pill_bottle/bicaridine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anO" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anR" = ( -/obj/item/clothing/under/cohesion/striped/testpartial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anS" = ( -/mob/living/simple_mob/vore/aggressive/rat/phoron{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"anU" = ( -/obj/item/weapon/cell/spike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anV" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/pocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"anW" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/sushi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aou" = ( -/obj/item/ammo_magazine/ammo_box/b12g/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aoy" = ( -/obj/item/weapon/storage/box/glasses/shot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aoI" = ( -/mob/living/simple_mob/vore/fennec{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aoU" = ( -/obj/item/weapon/reagent_containers/food/snacks/bun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aoZ" = ( -/obj/item/weapon/tank/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apb" = ( -/obj/item/mecha_parts/part/odysseus_right_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apd" = ( -/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aph" = ( -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"api" = ( -/obj/item/ammo_casing/microbattery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apl" = ( -/obj/structure/sign/warning/lava, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apo" = ( -/obj/machinery/button/doorbell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apr" = ( -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apE" = ( -/obj/item/weapon/aiModule/teleporterOffline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apF" = ( -/obj/item/weapon/storage/fancy/cigar/havana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apG" = ( -/obj/item/clothing/gloves/waterwings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apQ" = ( -/obj/item/device/encryptionkey/headset_eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"apZ" = ( -/obj/item/weapon/disk/limb/dsi_nevrean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqe" = ( -/obj/item/weapon/packageWrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqk" = ( -/obj/structure/sign/deck2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqm" = ( -/obj/item/weapon/reagent_containers/food/snacks/proteinslab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqt" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqA" = ( -/obj/item/clothing/accessory/armband/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqC" = ( -/obj/item/ammo_casing/a762x54, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqI" = ( -/obj/item/clothing/under/pants/greyjeans/ripped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqJ" = ( -/obj/item/weapon/storage/box/lights/bulbs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqR" = ( -/obj/item/organ/internal/appendix/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aqU" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/queen/eggless{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aqZ" = ( -/obj/structure/closet/secure_closet/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ard" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/exploration/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arl" = ( -/obj/item/weapon/reagent_containers/food/snacks/candy_corn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arw" = ( -/obj/item/weapon/book/manual/engineering_construction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arz" = ( -/obj/item/clothing/glasses/eyepatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arD" = ( -/obj/structure/sign/flag/nt/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arF" = ( -/obj/machinery/porta_turret/industrial/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arH" = ( -/obj/item/clothing/glasses/hud/security/jensenshades, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arI" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arO" = ( -/obj/item/weapon/storage/pill_bottle/hyronalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arV" = ( -/obj/structure/shuttle/window, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"arW" = ( -/obj/structure/sign/levels/security/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asn" = ( -/obj/item/weapon/storage/box/fluff/John, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ast" = ( -/obj/item/weapon/gun/projectile/automatic/l6_saw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asu" = ( -/mob/living/simple_mob/vore/horse/big{ - dir = 4 - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"asF" = ( -/obj/item/weapon/circuitboard/resleeving_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asJ" = ( -/obj/structure/sign/directions/engineering/atmospherics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asM" = ( -/obj/item/weapon/disk/transcore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asP" = ( -/obj/item/clothing/head/welding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asS" = ( -/obj/item/clothing/under/fluff/ally_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"asV" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atc" = ( -/obj/item/device/electronic_assembly/pda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atf" = ( -/obj/item/clothing/head/helmet/space, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atj" = ( -/obj/item/clothing/under/rank/trek/medsci/ds9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atl" = ( -/obj/item/toy/bouquet/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atn" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/androgynorovir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atp" = ( -/obj/item/toy/mecha/deathripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atu" = ( -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atx" = ( -/obj/item/weapon/magnetic_ammo/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atC" = ( -/obj/item/weapon/reagent_containers/food/snacks/gigapuddi/anger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atD" = ( -/obj/item/device/encryptionkey/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atF" = ( -/obj/item/organ/internal/intestine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atL" = ( -/obj/item/clothing/suit/captunic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atP" = ( -/obj/item/weapon/melee/rapier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atQ" = ( -/obj/item/slimepotion/steroid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"atW" = ( -/mob/living/simple_mob/vore/aggressive/rat/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"auB" = ( -/obj/item/clothing/under/wedding/bride_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"auF" = ( -/obj/item/weapon/storage/secure/briefcase/nerd_pack_cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"auG" = ( -/obj/item/weapon/surgical/circular_saw/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"auO" = ( -/obj/machinery/fusion_fuel_compressor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"auP" = ( -/obj/item/weapon/beach_ball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"auZ" = ( -/obj/structure/sign/signnew/laserhazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ava" = ( -/obj/item/weapon/circuitboard/mecha/ripley/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avi" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avp" = ( -/obj/item/weapon/storage/bag/circuits/mini/arithmetic/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avr" = ( -/obj/machinery/light/bigfloorlamp/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avG" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avI" = ( -/obj/item/stack/tile/floor/eris/cafe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avK" = ( -/obj/item/clothing/head/soft/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avM" = ( -/obj/item/ammo_magazine/m5mmcaseless/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avN" = ( -/obj/item/weapon/book/manual/materials_chemistry_analysis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avO" = ( -/obj/item/clothing/accessory/pride/enby, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avV" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatballsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"avW" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/patriot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awe" = ( -/obj/item/clothing/under/rank/trek/medsci/voy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awh" = ( -/obj/item/clothing/head/helmet/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awk" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awo" = ( -/obj/item/clothing/glasses/hud/health/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awp" = ( -/obj/item/clothing/shoes/boots/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aww" = ( -/obj/item/ammo_casing/a12g/scatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awz" = ( -/obj/item/integrated_circuit/logic/binary/and, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awH" = ( -/obj/machinery/compressor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awJ" = ( -/obj/item/weapon/gun/energy/gun/nuclear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awK" = ( -/obj/item/clothing/under/suit_jacket/really_black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awM" = ( -/obj/item/weapon/rcd/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awN" = ( -/obj/item/weapon/rig/pmc/commander/green/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"awO" = ( -/mob/living/simple_mob/humanoid/pirate/ranged/handcannon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"awW" = ( -/obj/item/trash/ratpackburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axe" = ( -/obj/structure/sign/warning/moving_parts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axi" = ( -/obj/structure/closet/secure_closet/security/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axj" = ( -/obj/item/clothing/under/boater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axl" = ( -/obj/structure/closet/gimmick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axn" = ( -/obj/item/clothing/under/solgov/mildress/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axy" = ( -/obj/item/weapon/flame/lighter/zippo/c4detonator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axC" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/vityazb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axF" = ( -/obj/item/clothing/gloves/gauntlets/rig/ch/precursor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axS" = ( -/obj/item/ammo_casing/microbattery/medical/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axV" = ( -/obj/item/weapon/dice/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axX" = ( -/obj/item/weapon/reagent_containers/food/snacks/sugarcookie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"axY" = ( -/obj/item/clothing/accessory/bracelet/material/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayc" = ( -/obj/structure/sign/atmos_waste, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aye" = ( -/obj/item/device/modkit_conversion/fluff/harmonyspace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayi" = ( -/obj/item/weapon/reagent_containers/food/snacks/cherrypie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayj" = ( -/obj/item/weapon/storage/lockbox/clusterbang, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayE" = ( -/obj/item/weapon/rig/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayN" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyperzine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayS" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/salsa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ayT" = ( -/obj/item/ammo_magazine/s357/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azl" = ( -/obj/machinery/power/rtg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azt" = ( -/obj/item/weapon/reagent_containers/food/snacks/cracker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azA" = ( -/obj/item/stack/tile/floor/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azD" = ( -/obj/item/weapon/gun/energy/bfgtaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azE" = ( -/obj/item/seeds/peppercornseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azF" = ( -/obj/item/weapon/storage/box/casino/costume_blackbunny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azS" = ( -/obj/item/weapon/firework_star/weather/rain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"azT" = ( -/obj/item/clothing/head/helmet/space/void/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAf" = ( -/obj/item/weapon/storage/box/syringes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAi" = ( -/obj/item/device/modkit_conversion/fluff/mocha_suit_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAk" = ( -/obj/item/toy/syndicateballoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAl" = ( -/obj/structure/closet/firecloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAq" = ( -/obj/item/weapon/rig/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAu" = ( -/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aAF" = ( -/obj/item/clothing/head/helmet/detective_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAG" = ( -/obj/item/device/encryptionkey/raider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAM" = ( -/mob/living/simple_mob/glitch_boss{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aAS" = ( -/obj/machinery/power/generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aAU" = ( -/obj/item/clothing/under/pants/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBa" = ( -/obj/item/clothing/head/helmet/space/void/chrono, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBm" = ( -/obj/item/clothing/suit/armor/vox_scrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBF" = ( -/obj/item/weapon/storage/secure/briefcase/dealer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBK" = ( -/obj/item/weapon/implantcase/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBL" = ( -/obj/item/trash/wasabi_peas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBP" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/rad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aBZ" = ( -/obj/structure/largecrate/animal/cow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCc" = ( -/obj/item/weapon/circuitboard/recycler_crusher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCd" = ( -/obj/structure/barricade/cutout/fukken_xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCl" = ( -/obj/item/weapon/storage/bag/circuits/mini/trig/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCn" = ( -/obj/item/clothing/suit/space/void/pilot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCs" = ( -/obj/item/weapon/implantcase/surge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCy" = ( -/obj/structure/closet/l3closet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCA" = ( -/obj/structure/bed/chair/bay/comfy/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCP" = ( -/obj/item/rig_module/vision/medhud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aCS" = ( -/obj/item/projectile/meteor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDd" = ( -/obj/item/clothing/glasses/hud/health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDh" = ( -/obj/item/rig_module/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDk" = ( -/obj/item/weapon/circuitboard/vr_sleeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDo" = ( -/obj/structure/sign/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDr" = ( -/obj/item/clothing/mask/demon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDt" = ( -/obj/structure/table/borosilicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDu" = ( -/obj/item/weapon/storage/belt/medical/technomancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDv" = ( -/obj/item/weapon/disk/species/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDC" = ( -/obj/structure/prop/machine/tradebeacon2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDD" = ( -/obj/item/weapon/gun/energy/zip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDE" = ( -/obj/item/organ/internal/augment/armmounted/dartbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDL" = ( -/obj/item/stack/tile/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDO" = ( -/obj/item/ammo_magazine/m545/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDR" = ( -/obj/item/weapon/grenade/chem_grenade/incendiary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDV" = ( -/obj/item/device/uv_light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aDZ" = ( -/obj/item/weapon/grenade/chem_grenade/cleaner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEi" = ( -/obj/item/clothing/head/hood/winter/snowsuit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEp" = ( -/obj/item/weapon/storage/bag/circuits/mini/reagents, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEr" = ( -/obj/item/clothing/head/beret/solgov/fleet/branch/third, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEu" = ( -/obj/item/weapon/gun/energy/laser/vepr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEE" = ( -/obj/item/clothing/glasses/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEF" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEM" = ( -/obj/item/weapon/bedsheet/piratedouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEW" = ( -/obj/item/clothing/gloves/gauntlets/rig/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aEY" = ( -/obj/structure/closet/crate/secure/large/einstein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFh" = ( -/obj/item/weapon/gun/energy/lasertag/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFk" = ( -/obj/structure/closet/walllocker_double/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFq" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/technician{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aFy" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFC" = ( -/obj/item/clothing/head/welding/fluff/vinjj, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFR" = ( -/obj/item/clothing/shoes/magboots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aFU" = ( -/obj/item/weapon/storage/box/fluff/ally, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGa" = ( -/obj/item/clothing/head/service/army/campaign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGc" = ( -/obj/item/weapon/storage/vore_egg/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGd" = ( -/obj/item/device/electronic_assembly/calc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGg" = ( -/obj/item/clothing/suit/armor/combat/crusader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGm" = ( -/obj/item/integrated_circuit/trig/cosine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGs" = ( -/obj/item/vox/armalis_armour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGt" = ( -/obj/item/weapon/cell/mech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGV" = ( -/obj/item/ammo_magazine/smart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGX" = ( -/obj/machinery/door/airlock/glass_command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aGY" = ( -/obj/structure/sign/directions/ladderwell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHd" = ( -/obj/structure/prop/lock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHf" = ( -/obj/item/weapon/reagent_containers/pill/nutriment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHi" = ( -/obj/machinery/vending/loadout/overwear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHo" = ( -/obj/machinery/camera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHs" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/pawn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHA" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHB" = ( -/obj/item/device/protean_reboot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHG" = ( -/obj/item/weapon/gun/projectile/p92x/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHI" = ( -/obj/structure/sink/puddle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHM" = ( -/obj/item/device/bodysnatcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aHY" = ( -/mob/living/simple_mob/shadekin/purple{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aIa" = ( -/obj/structure/prop/machine/tgmc_console1/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIc" = ( -/obj/mecha/combat/fighter/pinnace/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIi" = ( -/obj/item/seeds/wheatseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIp" = ( -/obj/item/weapon/storage/backpack/satchel/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIr" = ( -/obj/item/weapon/storage/bag/circuits, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIv" = ( -/obj/machinery/dnaforensics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIz" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIB" = ( -/obj/item/clothing/under/undersuit/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIE" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/puni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIG" = ( -/obj/item/clothing/head/pin/flower/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aII" = ( -/obj/structure/sign/warning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIJ" = ( -/obj/item/clothing/under/rank/security/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIM" = ( -/obj/item/weapon/storage/box/trackimp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIN" = ( -/obj/item/seeds/cocoapodseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIP" = ( -/obj/item/clothing/head/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIW" = ( -/obj/machinery/computer/centrifuge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aIZ" = ( -/obj/item/mecha_parts/mecha_equipment/tool/sleeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJd" = ( -/obj/item/clothing/head/hood/winter/snowsuit/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJe" = ( -/obj/structure/largecrate/animal/catgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJo" = ( -/obj/item/weapon/weldingtool/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJp" = ( -/obj/item/clothing/head/pelt/wolfpelt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJA" = ( -/obj/item/integrated_circuit/time/clock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJC" = ( -/obj/structure/sign/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJD" = ( -/obj/item/weapon/rig/pmc/engineer/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJR" = ( -/obj/item/seeds/jurlmah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJS" = ( -/obj/item/clothing/accessory/medal/silver/fluff/abc314, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJW" = ( -/obj/item/seeds/siflettuce, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aJZ" = ( -/obj/structure/bed/chair/wheelchair/smallmotor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKa" = ( -/mob/living/simple_mob/vore/oregrub{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aKb" = ( -/obj/item/mecha_parts/part/janus_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKd" = ( -/obj/item/device/electronic_assembly/large/tall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKf" = ( -/obj/item/clothing/under/technomancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKh" = ( -/obj/item/weapon/cartridge/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKj" = ( -/obj/item/clothing/suit/storage/duster/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKn" = ( -/obj/item/weapon/storage/box/syndie_kit/concussion_grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKr" = ( -/obj/item/clothing/mask/bandana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKD" = ( -/obj/item/weapon/storage/vore_egg/scree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKG" = ( -/obj/item/ammo_casing/a762/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKO" = ( -/obj/item/integrated_circuit/output/led/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKV" = ( -/mob/living/simple_mob/humanoid/merc/ranged/grenadier{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aKX" = ( -/obj/item/clothing/head/dress/fleet/garrison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKY" = ( -/obj/item/clothing/accessory/fluff/maxie_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aKZ" = ( -/obj/item/weapon/oldtwohanded/spear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLf" = ( -/obj/item/weapon/kitchenknife/tacknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLi" = ( -/obj/machinery/atmospherics/valve/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLn" = ( -/obj/structure/portal_event/resize/preset_grow_hundred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLr" = ( -/obj/item/clothing/shoes/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLs" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLt" = ( -/obj/structure/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLA" = ( -/obj/vehicle/train/engine/quadbike/snowmobile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLB" = ( -/obj/structure/sign/directions/ai_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aLK" = ( -/obj/item/clothing/head/helmet/space/skrell/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMc" = ( -/obj/item/toy/mecha/ripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMj" = ( -/obj/item/rig_module/vision/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMx" = ( -/obj/item/weapon/telecube/precursor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMy" = ( -/obj/item/weapon/rig/ert/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMz" = ( -/obj/item/toy/character/warrior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMB" = ( -/obj/item/mecha_parts/component/armor/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMG" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMH" = ( -/obj/structure/foodcart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aMZ" = ( -/obj/item/weapon/tool/wrench/pipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNa" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/dr_gibb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNb" = ( -/obj/machinery/atmospherics/tvalve, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNe" = ( -/obj/item/weapon/disk/limb/dsi_lizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNo" = ( -/obj/structure/sign/levels/tram, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNs" = ( -/obj/item/weapon/camera_bug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNt" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/raja_coat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNw" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNx" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNz" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/sake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNB" = ( -/obj/machinery/vending/radren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aND" = ( -/obj/item/clothing/accessory/tie/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNF" = ( -/obj/item/weapon/storage/lockbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNO" = ( -/obj/item/clothing/shoes/black/cuffs/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNR" = ( -/obj/structure/prop/machine/random_radio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNS" = ( -/obj/item/projectile/bullet/rifle/a762, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNU" = ( -/obj/item/clothing/head/helmet/space/void/refurb/pilot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNW" = ( -/obj/item/weapon/reagent_containers/food/snacks/badrecipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aNX" = ( -/obj/item/weapon/kinetic_crusher/machete/gauntlets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOb" = ( -/obj/item/toy/plushie/carp/ice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOc" = ( -/obj/item/integrated_circuit/trig/cosecant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOn" = ( -/obj/item/weapon/circuitboard/gyrotron_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOu" = ( -/obj/item/weapon/card/id/security/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOB" = ( -/obj/item/clothing/under/rank/trek/sec/ds9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOE" = ( -/obj/item/weapon/reagent_containers/food/snacks/kudzudonburi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOJ" = ( -/obj/item/ammo_casing/a38/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOK" = ( -/obj/item/weapon/circuitboard/broken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOV" = ( -/obj/item/weapon/storage/mrebag/side, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOW" = ( -/mob/living/simple_mob/animal/giant_spider/frost/broodling, -/mob/living/simple_mob/animal/giant_spider/frost/broodling, -/mob/living/simple_mob/animal/giant_spider/frost/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aOX" = ( -/obj/item/toy/plushie/carp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aOY" = ( -/obj/machinery/light/floortube/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPb" = ( -/obj/item/weapon/storage/pill_bottle/carthatoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPg" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/ntbeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPh" = ( -/obj/item/weapon/gun/energy/mouseray/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPj" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPm" = ( -/obj/structure/bed/chair/comfy/rounded/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPw" = ( -/obj/item/paiparts/processor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPz" = ( -/obj/structure/prop/alien/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPH" = ( -/obj/item/clothing/head/helmet/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPJ" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPP" = ( -/obj/structure/closet/secure_closet/security/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aPS" = ( -/obj/item/clothing/suit/storage/vest/wardencoat/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQb" = ( -/obj/item/weapon/storage/box/masks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQg" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQj" = ( -/obj/item/ammo_magazine/s45lc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQl" = ( -/obj/item/canvas/nineteen_nineteen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQn" = ( -/obj/structure/door_assembly/door_assembly_ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQt" = ( -/obj/item/clothing/under/skirt/outfit/fluff/nikki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQu" = ( -/obj/item/ammo_magazine/awp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQw" = ( -/obj/item/clothing/head/turban/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQy" = ( -/obj/item/ammo_magazine/m45tommydrum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQA" = ( -/obj/structure/ship_munition/disperser_charge/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQC" = ( -/obj/item/clothing/head/helmet/space/anomaly/heat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQE" = ( -/obj/item/clothing/head/helmet/space/void/engineering/hazmat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQT" = ( -/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aQW" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRa" = ( -/obj/item/stack/tile/floor/eris/white/techfloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRf" = ( -/obj/item/weapon/reagent_containers/blood/OMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRl" = ( -/obj/item/weapon/storage/backpack/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRr" = ( -/obj/structure/sign/levels/medical/resleeving, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRs" = ( -/obj/item/weapon/card/id/civilian/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRw" = ( -/obj/machinery/artifact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRB" = ( -/obj/item/weapon/reagent_containers/food/snacks/curryrice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRD" = ( -/obj/item/stack/animalhide/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRG" = ( -/obj/item/clothing/head/hardhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRK" = ( -/obj/item/clothing/gloves/fluff/kilano/netra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRN" = ( -/obj/item/weapon/storage/laundry_basket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRS" = ( -/obj/item/clothing/head/helmet/space/void/refurb/medical/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRU" = ( -/obj/machinery/computer/crew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aRW" = ( -/obj/item/weapon/whetstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSe" = ( -/obj/structure/sign/directions/engineering/engeqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSf" = ( -/obj/item/weapon/card/id/civilian/service/botanist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSi" = ( -/obj/item/accessory/fluff/kettek_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSl" = ( -/obj/item/clothing/accessory/permit/gun/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSn" = ( -/obj/structure/closet/emcloset/legacy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSp" = ( -/obj/structure/simple_door/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSy" = ( -/obj/item/clothing/ears/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSB" = ( -/obj/item/weapon/gun/energy/mouseray/teppi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSH" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ppsh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSI" = ( -/obj/item/clothing/shoes/leg_guard/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSK" = ( -/obj/item/ammo_magazine/ammo_box/b45/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSQ" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSS" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aSX" = ( -/obj/item/clothing/head/crown/goose_king, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTr" = ( -/obj/item/weapon/storage/box/disks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTv" = ( -/obj/item/clothing/under/skirt/colorable/long, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTy" = ( -/obj/machinery/door/airlock/maintenance/rnd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTA" = ( -/obj/item/clothing/head/tesh_hood/standard/black_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTN" = ( -/obj/item/weapon/reagent_containers/food/snacks/tofu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTP" = ( -/obj/structure/closet/secure_closet/egg/sergal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTT" = ( -/obj/item/clothing/suit/storage/fluff/david_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aTZ" = ( -/obj/item/weapon/folder/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUk" = ( -/obj/item/weapon/kinetic_crusher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUn" = ( -/obj/item/weapon/storage/pouch/flares, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUp" = ( -/obj/machinery/door/airlock/maintenance/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUq" = ( -/obj/item/clothing/accessory/holster/waist/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUw" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/heavy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aUB" = ( -/obj/item/integrated_circuit/transfer/pulsedemultiplexer/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUF" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/scoped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUN" = ( -/mob/living/simple_mob/humanoid/possessed{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aUS" = ( -/obj/item/clothing/suit/armor/pcarrier/medium/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aUV" = ( -/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVb" = ( -/obj/item/clothing/head/hood/winter/snowsuit/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVe" = ( -/obj/item/weapon/spell/audible_deception, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVh" = ( -/obj/item/seeds/wildwabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVj" = ( -/obj/structure/closet/crate/internals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVv" = ( -/obj/item/clothing/suit/storage/solgov/service/army/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVw" = ( -/obj/machinery/button/windowtint/doortint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVx" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/tommylas{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aVy" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/queen{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aVL" = ( -/obj/item/clothing/head/serdyhelmet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aVZ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethylredox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWf" = ( -/obj/machinery/holoposter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWg" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWo" = ( -/obj/item/weapon/tool/screwdriver/sdriver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWs" = ( -/obj/item/weapon/reagent_containers/food/snacks/custardbun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWA" = ( -/obj/item/seeds/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWC" = ( -/obj/item/clothing/accessory/bracelet/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWE" = ( -/obj/structure/sign/atmos_n2o, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWF" = ( -/obj/item/weapon/implant/reagent_generator/egg/veryslow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWP" = ( -/obj/item/clothing/accessory/badge/holo/sheriff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWQ" = ( -/obj/item/ammo_casing/a45lc/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aWR" = ( -/obj/machinery/power/generator/oldteg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXa" = ( -/obj/item/weapon/implant/adrenalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXc" = ( -/mob/living/simple_mob/vore/bigdragon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aXm" = ( -/obj/item/weapon/reagent_containers/food/snacks/father_breakfast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXo" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXu" = ( -/obj/item/weapon/reagent_containers/glass/paint/violet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXv" = ( -/obj/item/seeds/brownmold, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXz" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXB" = ( -/obj/item/clothing/under/rank/internalaffairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXJ" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang/limited, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXV" = ( -/obj/item/clothing/accessory/armor/tag/bneg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aXW" = ( -/obj/item/capture_crystal/bigdragon/friendly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYh" = ( -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYi" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/spicy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYk" = ( -/obj/structure/closet/secure_closet/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYl" = ( -/obj/item/weapon/reagent_containers/food/snacks/human/burger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYn" = ( -/obj/item/weapon/gun/projectile/automatic/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYs" = ( -/obj/item/clothing/head/beret/solgov/borderguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYv" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYG" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYJ" = ( -/obj/item/weapon/stamp/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYL" = ( -/mob/living/simple_mob/vore/leopardmander/blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aYP" = ( -/obj/item/weapon/virusdish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYS" = ( -/obj/item/clothing/shoes/boots/jackboots/toeless/thigh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYV" = ( -/obj/item/clothing/under/away/patrol/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYW" = ( -/obj/item/seeds/plastiseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aYZ" = ( -/obj/machinery/status_display/shuttle_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZa" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/horse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZb" = ( -/obj/item/weapon/beach_ball/holoball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZd" = ( -/obj/structure/closet/crate/radiation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZr" = ( -/mob/living/simple_mob/animal/giant_spider/frost{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"aZu" = ( -/obj/item/weapon/spacecasinocash/c200, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZB" = ( -/obj/item/weapon/storage/box/autoinjectors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZE" = ( -/obj/item/toy/plushie/therapy/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"aZO" = ( -/obj/item/clothing/under/solgov/utility/fleet/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bab" = ( -/obj/item/clothing/suit/storage/hazardvest/yw/Paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bac" = ( -/obj/machinery/computer/atmoscontrol/laptop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bag" = ( -/obj/item/weapon/disk/limb/cybersolutions, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bam" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, -/turf/simulated/floor/atoll, -/area/survivalpod) -"baC" = ( -/obj/machinery/cash_register, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baG" = ( -/obj/structure/sign/levels/cargo/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baJ" = ( -/obj/item/clothing/head/ushanka/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baK" = ( -/obj/item/clothing/accessory/armband/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baL" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer/o3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baN" = ( -/obj/item/ammo_casing/a12g/flechette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baQ" = ( -/obj/item/clothing/accessory/collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"baU" = ( -/obj/item/weapon/toy/snowglobe/rascalspass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbc" = ( -/obj/item/weapon/cell/giga/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbg" = ( -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbn" = ( -/obj/item/toy/figure/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbp" = ( -/obj/structure/symbol/maint, -/turf/simulated/fitness, -/area/survivalpod) -"bbu" = ( -/obj/item/stack/material/glass/titanium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbB" = ( -/obj/item/clothing/accessory/collar/holo/casinoslave_fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbE" = ( -/obj/item/ammo_magazine/s44, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbG" = ( -/obj/item/weapon/farmbot_arm_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbJ" = ( -/obj/item/organ/internal/voicebox/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbO" = ( -/obj/item/mecha_parts/mecha_equipment/cloak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbP" = ( -/obj/item/weapon/circuitboard/rcon_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbQ" = ( -/obj/machinery/gateway/centerstation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbW" = ( -/obj/item/stack/tile/floor/eris/bcircuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbX" = ( -/obj/machinery/shieldgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bbZ" = ( -/obj/item/stack/tile/floor/eris/steel/orangecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcf" = ( -/obj/item/toy/figure/secofficer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bci" = ( -/obj/item/weapon/storage/backpack/messenger/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcj" = ( -/obj/item/weapon/reagent_containers/food/snacks/wingfangchu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcr" = ( -/obj/item/weapon/storage/box/wormcan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcz" = ( -/obj/machinery/vr_sleeper/alien/random_replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcD" = ( -/obj/item/godfig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcI" = ( -/obj/structure/casino_table/roulette_chart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcL" = ( -/obj/item/inflatable/torn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcT" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcX" = ( -/obj/machinery/door/airlock/angled_tgmc/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bcZ" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/medislug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bdd" = ( -/obj/item/weapon/storage/box/brainzsnax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdh" = ( -/obj/machinery/recharger/wallcharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdk" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/m4a1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdp" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bds" = ( -/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdu" = ( -/obj/structure/barricade/cutout/lusty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdv" = ( -/obj/machinery/door/blast/gate/bars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdx" = ( -/obj/item/weapon/reagent_containers/pill/dylovene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdz" = ( -/obj/item/weapon/paperplane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdS" = ( -/obj/item/weapon/reagent_containers/food/snacks/bunbun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdX" = ( -/mob/living/simple_mob/hostile/carp, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bdY" = ( -/obj/item/toy/tennis/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bdZ" = ( -/obj/item/toy/plushie/mouse/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"beb" = ( -/obj/item/weapon/implant/organ/limbaugment/upperarm/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bef" = ( -/obj/item/clothing/accessory/chaps/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bem" = ( -/obj/item/clothing/under/sexybunny_white/sexybunny_black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ber" = ( -/obj/item/weapon/gun/energy/taser/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bey" = ( -/obj/item/seeds/nettleseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"beR" = ( -/mob/living/simple_mob/metroid/juvenile/baby{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"beS" = ( -/obj/item/stack/tile/wood/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"beU" = ( -/obj/item/weapon/aiModule/live_and_let_live, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfl" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/trailgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfm" = ( -/obj/item/weapon/storage/vore_egg/chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfo" = ( -/obj/item/clothing/under/color/fjumpsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfs" = ( -/obj/structure/cable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfG" = ( -/obj/item/clothing/head/helmet/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfR" = ( -/obj/item/ammo_casing/a762/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfW" = ( -/obj/item/weapon/circuitboard/comm_traffic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bfZ" = ( -/obj/item/clothing/gloves/ring/fluff/basir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bga" = ( -/mob/living/simple_mob/vore/oregrub/lava{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bgf" = ( -/obj/item/weapon/reagent_containers/food/snacks/validsalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bgr" = ( -/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bgB" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/russofurcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bgK" = ( -/obj/item/clothing/accessory/locket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bgZ" = ( -/obj/item/clothing/accessory/armor/armguards/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhd" = ( -/obj/item/weapon/anobattery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhe" = ( -/obj/item/integrated_circuit/logic/unary/not, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhg" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhi" = ( -/obj/item/weapon/soap/silver_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhk" = ( -/obj/structure/simple_door/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhu" = ( -/obj/structure/prop/dominator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhH" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/atomicbomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhL" = ( -/obj/item/device/flashlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhM" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhN" = ( -/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bhQ" = ( -/obj/structure/loot_pile/mecha/ripley/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bib" = ( -/obj/item/clothing/ears/skrell/chain/ebony, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bid" = ( -/obj/item/clothing/head/helmet/warden/hat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bii" = ( -/mob/living/simple_mob/animal/sif/fluffy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"biE" = ( -/obj/structure/sign/levels/medical/chemlab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"biJ" = ( -/obj/item/weapon/storage/bible/booze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"biO" = ( -/obj/item/weapon/storage/backpack/dufflebag/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"biR" = ( -/obj/item/weapon/paper/crumpled/whiskeymine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"biW" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/genration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjc" = ( -/obj/structure/bed/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjg" = ( -/obj/item/clothing/under/dress/sari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjo" = ( -/obj/structure/closet/cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjq" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_midgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjr" = ( -/obj/item/clothing/under/solgov/utility/sifguard/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjt" = ( -/obj/structure/bigDelivery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjy" = ( -/obj/item/weapon/rcd/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjD" = ( -/obj/item/weapon/surgical/bonesetter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjQ" = ( -/obj/item/weapon/reagent_containers/rollingpaper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjU" = ( -/obj/structure/shuttle/engine/router, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bjX" = ( -/obj/item/clothing/under/pants/altevian/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bke" = ( -/obj/machinery/atmospherics/binary/dp_vent_pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkf" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkg" = ( -/mob/living/simple_mob/animal/passive/opossum/poppy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bki" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkl" = ( -/obj/item/clothing/shoes/boots/jackboots/thigh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkn" = ( -/obj/item/clothing/accessory/asymmetric/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bko" = ( -/obj/item/clothing/mask/surgical/cloth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkt" = ( -/obj/item/device/encryptionkey/headset_service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkv" = ( -/obj/item/weapon/dnainjector/antistutt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkB" = ( -/obj/machinery/telecomms/bus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkF" = ( -/obj/item/ammo_magazine/m2024/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkG" = ( -/obj/structure/constructshell, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bkJ" = ( -/obj/item/weapon/storage/belt/bandolier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkS" = ( -/obj/item/weapon/bedsheet/cedouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bkY" = ( -/obj/item/weapon/banner/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blb" = ( -/obj/item/weapon/bedsheet/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ble" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blf" = ( -/obj/item/clothing/accessory/storage/white_drop_pouches, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bli" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/captain{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"blk" = ( -/obj/item/seeds/sifbulb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blo" = ( -/obj/item/clothing/mask/gas/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blq" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blr" = ( -/obj/item/device/detective_scanner/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bls" = ( -/obj/item/weapon/rocksliver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blu" = ( -/obj/machinery/suit_cycler/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blw" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blG" = ( -/obj/item/clothing/head/helmet/space/anomaly/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"blQ" = ( -/obj/item/clothing/accessory/gaiter/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmj" = ( -/obj/structure/sign/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmq" = ( -/obj/item/mecha_parts/chassis/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmu" = ( -/obj/item/clothing/under/flower_skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmz" = ( -/obj/item/clothing/accessory/solgov/department/command/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmD" = ( -/obj/item/integrated_circuit/output/video_camera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmG" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/scrapak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmI" = ( -/obj/item/weapon/rig/pmc/medical/green/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmW" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/inaprov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bmZ" = ( -/obj/item/stack/material/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bna" = ( -/obj/item/clothing/head/helmet/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bne" = ( -/obj/item/weapon/storage/pill_bottle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnh" = ( -/obj/item/weapon/surgical/bioregen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnk" = ( -/mob/living/simple_mob/blob/spore/weak{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bnp" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnr" = ( -/obj/item/weapon/computer_hardware/network_card/wired, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bns" = ( -/obj/item/clothing/under/dress/revealingdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnw" = ( -/obj/item/weapon/gun/energy/stunrevolver/snubnose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnz" = ( -/obj/structure/sign/levels/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnT" = ( -/obj/structure/timer_door/ten, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bnV" = ( -/obj/item/stack/tile/grass/sif/forest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"boa" = ( -/obj/item/weapon/pickaxe/plasmacutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bof" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"boo" = ( -/obj/item/weapon/reagent_containers/pill/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bop" = ( -/obj/item/clothing/mask/fakemoustache, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bot" = ( -/obj/item/clothing/suit/redtag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"boy" = ( -/mob/living/simple_mob/mobs_monsters/clowns/tunnelclown{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"boK" = ( -/obj/item/ammo_magazine/m762svd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"boS" = ( -/obj/item/clothing/accessory/collar/bell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"boV" = ( -/obj/item/ammo_magazine/s45lc/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpc" = ( -/obj/machinery/porta_turret/stationary/syndie/CIWS, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpd" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dr_gibb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpf" = ( -/obj/item/clothing/mask/gas/owl_mask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpg" = ( -/obj/item/clothing/ears/skrell/cloth_female/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpi" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/engineering/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpo" = ( -/obj/structure/prop/war/tgmc_30mm/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpr" = ( -/obj/item/device/glasses_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpy" = ( -/obj/item/rig_module/protean/syphon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpC" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpE" = ( -/obj/item/integrated_circuit/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpK" = ( -/obj/item/clothing/under/dress/flower_dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpL" = ( -/obj/item/device/reagent_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bpS" = ( -/obj/item/stack/tile/floor/eris/steel/techfloor_grid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqf" = ( -/obj/item/weapon/cane/concealed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bql" = ( -/obj/item/weapon/reagent_containers/food/snacks/tuna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqq" = ( -/obj/structure/bed/chair/sofa/pew/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqr" = ( -/obj/structure/sign/signnew/opticals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqs" = ( -/obj/item/clothing/head/headband/maid/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqy" = ( -/obj/item/clothing/under/teshari/smock/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqF" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqO" = ( -/obj/structure/sign/signnew/oxidants, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bqP" = ( -/obj/item/weapon/reagent_containers/food/snacks/tofupie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brk" = ( -/obj/item/ammo_magazine/strela, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brl" = ( -/obj/item/clothing/suit/storage/teshari/cloak/fluff/Saroth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brz" = ( -/turf/simulated/shuttle/wall/voidcraft, -/area/survivalpod) -"brB" = ( -/obj/structure/loot_pile/mecha/ripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brD" = ( -/obj/item/integrated_circuit/cryptography, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brJ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/plantbgone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brO" = ( -/obj/item/clothing/suit/space/void/responseteam/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brT" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"brZ" = ( -/obj/machinery/gibber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsa" = ( -/obj/item/weapon/melee/chainofcommand/curator_whip/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsg" = ( -/obj/item/device/mmi/digital/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bso" = ( -/obj/item/ammo_magazine/ak74/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsp" = ( -/obj/item/clothing/suit/taur/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsu" = ( -/obj/item/clothing/under/solgov/utility/sifguard/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsz" = ( -/obj/item/clothing/head/wizard/fake/realistic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsA" = ( -/obj/item/weapon/tool/wrench/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsK" = ( -/obj/item/clothing/accessory/pride/pan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsO" = ( -/obj/item/stack/animalhide/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsR" = ( -/obj/item/clothing/head/bearpelt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bsX" = ( -/obj/item/stack/material/mhydrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btf" = ( -/obj/item/weapon/reagent_containers/food/snacks/tofuburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bth" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btj" = ( -/obj/machinery/vending/food, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btn" = ( -/obj/item/weapon/spell/construct, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btq" = ( -/obj/item/clothing/under/tribalwear/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btr" = ( -/obj/item/clothing/accessory/solgov/department, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bts" = ( -/obj/item/trash/bowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btG" = ( -/obj/item/stack/tile/floor/eris/dark/orangecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btL" = ( -/obj/item/taperoll/police, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btQ" = ( -/obj/fiftyspawner/blucarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btR" = ( -/obj/item/weapon/storage/mrebag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btW" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"btY" = ( -/obj/item/weapon/material/twohanded/baseballbat/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"buo" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bup" = ( -/obj/item/clothing/under/fluff/morunder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"but" = ( -/obj/item/weapon/reagent_containers/food/snacks/daifuku, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"buz" = ( -/obj/item/mecha_parts/component/armor/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"buB" = ( -/obj/machinery/gear_dispenser/suit/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"buH" = ( -/obj/structure/loot_pile/mecha/gygax/medgax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"buN" = ( -/mob/living/simple_mob/slime/xenobio/light_pink{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"buX" = ( -/obj/item/toy/plushie/squid/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvf" = ( -/obj/item/weapon/technomancer_core/golem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvh" = ( -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvo" = ( -/obj/item/weapon/book/bundle/custom_library/nonfiction/viabilityofcorporategov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvr" = ( -/obj/item/seeds/rose/blood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvx" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratliquid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvy" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/brushgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvW" = ( -/obj/item/clothing/accessory/solgov/rank/ec/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bvY" = ( -/obj/item/weapon/shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwd" = ( -/obj/machinery/vending/wardrobe/lawdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwh" = ( -/obj/item/weapon/reagent_containers/food/snacks/veggiemomo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwm" = ( -/obj/item/toy/plushie/deer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwr" = ( -/obj/structure/closet/walllocker_double/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwx" = ( -/obj/structure/closet/chefcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwD" = ( -/obj/item/robot_parts/r_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwE" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwH" = ( -/obj/item/device/slime_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwL" = ( -/obj/structure/salvageable/computer_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwM" = ( -/obj/item/weapon/firework_star/weather/clear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwO" = ( -/obj/item/weapon/paper_bin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwU" = ( -/obj/item/weapon/circuitboard/disperserback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bwX" = ( -/obj/item/ammo_magazine/pkm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxc" = ( -/obj/machinery/computer/pod/old/swf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxg" = ( -/mob/living/simple_mob/vore/greatwolf{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bxp" = ( -/obj/machinery/medical_kiosk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxr" = ( -/obj/machinery/atmospherics/pipe/tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxs" = ( -/obj/item/weapon/reagent_containers/food/snacks/pisanggoreng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxv" = ( -/obj/item/clothing/suit/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxz" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/puppy/wiggle, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bxB" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxO" = ( -/obj/item/weapon/storage/mrebag/menu8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bxP" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/tp23, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byc" = ( -/obj/item/clothing/suit/storage/snowsuit/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byi" = ( -/obj/item/weapon/spell/summon/summon_creature, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byu" = ( -/obj/item/clothing/gloves/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byv" = ( -/obj/item/clothing/head/pin/magnetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byz" = ( -/obj/item/weapon/reagent_containers/food/snacks/pillbug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byC" = ( -/obj/item/weapon/storage/briefcase/clutch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byE" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"byF" = ( -/obj/vehicle, -/turf/simulated/floor/atoll, -/area/survivalpod) -"byR" = ( -/obj/item/weapon/storage/backpack/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzk" = ( -/obj/item/clothing/suit/armor/bulletproof/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzq" = ( -/obj/item/clothing/head/helmet/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzu" = ( -/obj/item/clothing/accessory/cowledvest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzz" = ( -/obj/item/stack/tile/floor/eris/white/danger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzB" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzC" = ( -/obj/item/weapon/extinguisher/mini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzE" = ( -/obj/item/seeds/harebell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzH" = ( -/obj/item/toy/plushie/carp/nebula, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzO" = ( -/obj/item/weapon/reagent_containers/food/snacks/omurice/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzQ" = ( -/obj/item/weapon/reagent_containers/glass/beaker/neurotoxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzS" = ( -/obj/machinery/atmospherics/unary/heat_exchanger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzU" = ( -/obj/item/stack/material/glass/plastitanium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bzY" = ( -/obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAd" = ( -/obj/machinery/power/hydromagnetic_trap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAe" = ( -/obj/item/clothing/under/yw/victsuit/victdress/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAh" = ( -/obj/item/weapon/storage/backpack/saddlebag_common/vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAk" = ( -/obj/item/clothing/under/mbill_flight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAo" = ( -/obj/item/toy/plushie/therapy/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAx" = ( -/obj/item/weapon/gun/energy/crossbow/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAE" = ( -/obj/structure/bed/chair/sofa/corner/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAF" = ( -/obj/item/clothing/mask/horsehead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAN" = ( -/obj/item/weapon/reagent_containers/food/snacks/mysterysoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bAX" = ( -/obj/item/clothing/head/chaplain_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBc" = ( -/obj/item/clothing/accessory/permit/gun/planetside, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBi" = ( -/obj/machinery/vending/virtual_autodrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBt" = ( -/obj/item/mecha_parts/component/gas/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBy" = ( -/obj/machinery/vending/event/gadget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBB" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBD" = ( -/obj/item/clothing/mask/smokable/pipe/bonepipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBG" = ( -/obj/item/clothing/head/utility/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBM" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBO" = ( -/obj/structure/closet/lasertag/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBQ" = ( -/obj/item/clothing/under/dress/gothic2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBS" = ( -/obj/item/weapon/sword/fluff/joanaria/scisword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBW" = ( -/obj/item/clothing/accessory/scarf/lightblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bBZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/gin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCa" = ( -/obj/item/clothing/under/pants/mustangjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCd" = ( -/obj/item/clothing/under/rank/medical/scrubs/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCj" = ( -/obj/item/clothing/under/rank/trek/sec/next, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCl" = ( -/obj/item/integrated_circuit/transfer/multiplexer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCm" = ( -/obj/item/clothing/under/suit_jacket/female/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCp" = ( -/obj/item/weapon/rig/vox/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCs" = ( -/obj/item/trash/squid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCt" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "14" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCw" = ( -/obj/item/ammo_magazine/smartgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCx" = ( -/obj/item/seeds/tomatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCy" = ( -/obj/item/clothing/head/culthood/magus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bCL" = ( -/mob/living/simple_mob/humanoid/pirate/ranged/handcannon/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bDd" = ( -/obj/item/clothing/under/pants/utility/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDj" = ( -/obj/item/weapon/silencer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDk" = ( -/obj/item/clothing/gloves/arm_guard/flexitac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDt" = ( -/obj/item/clothing/suit/armor/reactive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDF" = ( -/obj/machinery/meter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDK" = ( -/obj/item/weapon/soap/space_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDU" = ( -/obj/item/clothing/under/teshari/smock/blackutility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bDV" = ( -/obj/item/clothing/accessory/collar/casinoslave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEd" = ( -/obj/item/weapon/reagent_containers/food/snacks/bloodsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEk" = ( -/obj/item/clothing/suit/space/void/security/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEq" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEr" = ( -/obj/item/trash/meatration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEs" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEx" = ( -/obj/item/clothing/head/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEE" = ( -/obj/item/weapon/circuitboard/mecha/imperion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEF" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/vityaz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bEL" = ( -/mob/living/simple_mob/vore/aggressive/chungus{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bEM" = ( -/obj/structure/bed/chair/shuttle_padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFe" = ( -/obj/item/capture_crystal/teppi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFn" = ( -/obj/item/weapon/digestion_remains/skull/unknown/anthro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFr" = ( -/obj/item/weapon/bedsheet/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFt" = ( -/obj/item/weapon/storage/firstaid/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFy" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bFO" = ( -/obj/item/clothing/under/rank/khi/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGh" = ( -/obj/item/weapon/anodevice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGl" = ( -/obj/item/clothing/accessory/armband/med/color/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGu" = ( -/obj/item/clothing/head/helmet/fluff/techpriesthead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGz" = ( -/obj/machinery/door/airlock/angled_tgmc/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGC" = ( -/obj/item/mecha_parts/component/armor/military/marauder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGJ" = ( -/obj/item/stack/tile/floor/eris/white/bluecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGP" = ( -/obj/item/weapon/reagent_containers/pill/diet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGT" = ( -/mob/living/simple_mob/humanoid/cultist/caster{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bGW" = ( -/obj/item/clothing/suit/armor/pcarrier/laserproof/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGX" = ( -/obj/item/weapon/material/knife/butch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGY" = ( -/obj/item/clothing/head/wizard/marisa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bGZ" = ( -/obj/item/clothing/head/helmet/space/void/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHd" = ( -/obj/item/clothing/accessory/armband/solgov/ma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHh" = ( -/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHj" = ( -/obj/machinery/gateway{ - dir = 8 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHo" = ( -/obj/structure/barricade/cutout/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHw" = ( -/obj/item/weapon/tank/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHy" = ( -/obj/item/ammo_magazine/mfoam_dart/smg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHE" = ( -/obj/item/weapon/reagent_containers/glass/bottle/robustharvest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHF" = ( -/obj/item/trash/ramen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHL" = ( -/obj/structure/largecrate/animal/otie/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHN" = ( -/obj/item/trash/appleberry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHO" = ( -/obj/item/clothing/under/swimsuit/stripper/stripper_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bHR" = ( -/obj/item/weapon/cell/device/weapon/recharge/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIa" = ( -/obj/item/weapon/storage/toolbox/lunchbox/nymph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIl" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIm" = ( -/obj/item/inflatable/door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIr" = ( -/obj/item/clothing/glasses/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIv" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIz" = ( -/obj/item/device/defib_kit/compact/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIC" = ( -/obj/item/clothing/under/rank/nullsuit/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIF" = ( -/mob/living/simple_mob/horror/TinyTim{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bIJ" = ( -/obj/item/weapon/storage/box/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIO" = ( -/obj/item/weapon/circuitboard/mecha/honker/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIQ" = ( -/obj/item/weapon/rig/ch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIS" = ( -/obj/item/clothing/accessory/armor/tag/solgov/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIT" = ( -/obj/item/weapon/storage/box/dosimeter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bIV" = ( -/obj/item/clothing/under/disheveled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJe" = ( -/obj/machinery/vending/deathmatch/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJg" = ( -/obj/item/clothing/head/hasturhood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJi" = ( -/obj/item/shield_projector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJl" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJp" = ( -/obj/item/clothing/suit/bio_suit/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJx" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJz" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/red_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJD" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJF" = ( -/obj/structure/closet/debug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJM" = ( -/obj/item/weapon/circuitboard/security/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJN" = ( -/obj/item/seeds/pitcherseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJS" = ( -/obj/item/weapon/commcard/mercenary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJT" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fivearrows, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bJV" = ( -/obj/item/ammo_magazine/m762/ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKa" = ( -/obj/item/clothing/under/suit_jacket/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKe" = ( -/obj/item/clothing/suit/armor/combat/imperial/centurion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKf" = ( -/obj/machinery/door/blast/gate/thin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKj" = ( -/obj/item/clothing/shoes/boots/cowboy/snakeskin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKw" = ( -/obj/item/slime_extract/emerald, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKx" = ( -/obj/item/weapon/commcard/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKI" = ( -/obj/item/device/encryptionkey/heads/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKJ" = ( -/obj/item/trash/beans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKS" = ( -/obj/item/weapon/reagent_containers/food/snacks/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKT" = ( -/obj/item/stack/tile/carpet/greencarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKX" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/cowbikini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bKY" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLa" = ( -/obj/structure/sign/directions/security/armory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLb" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/britcup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLv" = ( -/obj/item/stack/animalhide/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLB" = ( -/obj/item/clothing/suit/space/void/security/fluff/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLJ" = ( -/obj/item/ammo_magazine/ammo_box/b762/surplus/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLM" = ( -/obj/item/weapon/grown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLP" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/waffles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bLX" = ( -/obj/item/clothing/under/gov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMc" = ( -/obj/item/clothing/suit/storage/hooded/knight/lancelot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMf" = ( -/obj/item/ammo_casing/a12g/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMg" = ( -/obj/item/device/encryptionkey/binary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMh" = ( -/obj/item/toy/plushie/squid/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMm" = ( -/obj/item/clothing/suit/surgicalapron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMs" = ( -/obj/item/weapon/implant/reagent_generator/tempest/mira, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMu" = ( -/obj/structure/closet/secure_closet/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMv" = ( -/obj/item/trash/semki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bML" = ( -/mob/living/simple_mob/animal/passive/cat/bones, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bMQ" = ( -/obj/structure/bed/chair/sofa/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bMU" = ( -/obj/item/clothing/head/helmet/dermal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNl" = ( -/obj/structure/simple_door/hardwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNq" = ( -/obj/item/clothing/under/corp/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNx" = ( -/obj/item/weapon/grenade/spawnergrenade/spesscarp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNy" = ( -/obj/item/ammo_magazine/ammo_box/b762/surplus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNz" = ( -/obj/item/ammo_magazine/m45/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bND" = ( -/obj/item/clothing/accessory/storage/ritualharness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNH" = ( -/obj/item/weapon/casino_platinum_chip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNT" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bNV" = ( -/obj/item/weapon/spellbook/oneuse/knock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOa" = ( -/obj/machinery/power/turbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOd" = ( -/obj/item/weapon/rig/internalaffairs/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOl" = ( -/obj/structure/prop/statue/statue3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOm" = ( -/obj/item/stack/material/leather, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOt" = ( -/obj/item/ammo_magazine/plamya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOv" = ( -/obj/item/clothing/under/dress/fluff/lucinadress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOz" = ( -/obj/item/stack/tile/floor/eris/white/orangecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOB" = ( -/obj/item/ammo_magazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOF" = ( -/obj/item/stack/material/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOG" = ( -/obj/vehicle/train/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOL" = ( -/obj/machinery/gear_dispenser/suit_old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bON" = ( -/obj/machinery/syndicate_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOS" = ( -/obj/item/weapon/book/manual/cook_guide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bOU" = ( -/obj/item/clothing/head/lightrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPf" = ( -/obj/item/clothing/ears/skrell/chain/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPn" = ( -/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPr" = ( -/obj/item/weapon/card/id/event/altcard/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPw" = ( -/obj/item/weapon/weldingtool/experimental/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPx" = ( -/obj/item/trash/ratpackramen/lacquer1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPA" = ( -/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPE" = ( -/obj/mecha/working/hoverpod/shuttlepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPF" = ( -/obj/item/weapon/reagent_containers/food/snacks/pie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPJ" = ( -/obj/item/clothing/under/dress/blacktango, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPN" = ( -/obj/item/weapon/material/sword/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPR" = ( -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPS" = ( -/obj/item/clothing/gloves/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPT" = ( -/obj/item/clothing/under/dress/cropdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPV" = ( -/obj/item/clothing/suit/storage/toggle/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bPY" = ( -/obj/item/weapon/toy/partypopper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQd" = ( -/obj/structure/bed/chair/sofa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQv" = ( -/obj/item/clothing/under/color/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQy" = ( -/obj/item/ammo_magazine/a57/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQK" = ( -/obj/item/weapon/dnainjector/hallucination, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQL" = ( -/obj/structure/bed/chair/bay/comfy/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQM" = ( -/obj/machinery/suit_cycler/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQW" = ( -/obj/item/clothing/accessory/collar/casinosentientprize_fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bQY" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bRc" = ( -/obj/item/clothing/under/soviet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bRw" = ( -/obj/structure/bed/chair/bar_stool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bRK" = ( -/obj/item/weapon/flag/xcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bRR" = ( -/obj/item/clothing/accessory/armor/legguards/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bRZ" = ( -/obj/item/clothing/suit/space/void/excelsior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSb" = ( -/obj/machinery/power/smes/batteryrack/mapped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSn" = ( -/obj/structure/closet/secure_closet/hydroponics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSp" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon/oven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSq" = ( -/obj/item/weapon/key/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSt" = ( -/obj/item/weapon/computer_hardware/hard_drive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSx" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/amasec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSD" = ( -/obj/machinery/vending/wardrobe/medidrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSG" = ( -/obj/structure/bed/chair/sofa/right/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSI" = ( -/obj/item/clothing/head/utility/army/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSM" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/nrti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bST" = ( -/obj/structure/prop/blackbox/quarantined_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSW" = ( -/obj/item/clothing/head/justice/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bSY" = ( -/obj/item/weapon/circuitboard/operating, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTk" = ( -/obj/item/weapon/storage/box/samplebags, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTv" = ( -/obj/item/clothing/under/rank/virologist/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTA" = ( -/obj/item/weapon/clipboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTD" = ( -/obj/item/clothing/head/helmet/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTG" = ( -/obj/structure/bed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTH" = ( -/obj/item/clothing/accessory/hawaiian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTL" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTM" = ( -/obj/item/clothing/suit/wizrobe/marisa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTN" = ( -/obj/item/weapon/sample/fibers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTO" = ( -/obj/structure/sign/directions/security/seceqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bTR" = ( -/obj/machinery/door/airlock/multi_tile/glass/polarized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUd" = ( -/obj/item/seeds/peppercornseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUl" = ( -/obj/item/clothing/gloves/arm_guard/combat/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUm" = ( -/obj/item/clothing/under/space, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUz" = ( -/obj/machinery/cryopod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUA" = ( -/obj/item/weapon/reagent_containers/food/snacks/tofurkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUD" = ( -/obj/item/stack/tile/carpet/blucarpet2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUM" = ( -/obj/item/ammo_magazine/ammo_box/b10mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUT" = ( -/obj/item/weapon/rig/focalpoint/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUX" = ( -/obj/machinery/power/grounding_rod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUY" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/rosewood_weathered, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bUZ" = ( -/obj/item/clothing/accessory/badge/sheriff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVa" = ( -/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVe" = ( -/obj/machinery/vending/loadout/accessory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVi" = ( -/obj/structure/barricade/cutout/new_servant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVk" = ( -/obj/item/clothing/accessory/badge/corporate_tag/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVm" = ( -/obj/item/weapon/gun/projectile/fluff/m1911, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVw" = ( -/obj/structure/closet/firecloset/full/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVB" = ( -/obj/item/ammo_magazine/s357/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVF" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVJ" = ( -/obj/machinery/floodlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVL" = ( -/obj/item/clothing/shoes/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVM" = ( -/obj/item/clothing/suit/space/vox/civ/trader/carapace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVN" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVO" = ( -/obj/item/device/encryptionkey/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVS" = ( -/obj/item/weapon/soap/white_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bVZ" = ( -/obj/item/weapon/material/fishing_rod/modern/strong, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWn" = ( -/obj/item/clothing/head/syndicatefake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWx" = ( -/obj/item/weapon/shovel/spade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWz" = ( -/obj/machinery/door/airlock/angled_tgmc/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWF" = ( -/obj/item/seeds/durian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWH" = ( -/obj/item/weapon/gun/projectile/cell_loaded/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWM" = ( -/obj/machinery/chemical_dispenser/ert/specialops, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/candy/donor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWW" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWX" = ( -/obj/item/stack/tile/floor/eris/steel/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bWZ" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXf" = ( -/obj/item/weapon/gun/projectile/revolver/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXj" = ( -/obj/item/ammo_casing/a762x39, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXx" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXC" = ( -/obj/structure/bed/chair/oldsofa/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXG" = ( -/obj/item/clothing/head/helmet/space/vox/civ/science/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXH" = ( -/obj/item/weapon/circuitboard/prisoner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXL" = ( -/obj/item/weapon/circuitboard/teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bXP" = ( -/obj/item/weapon/storage/backpack/hydroponics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYc" = ( -/obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYi" = ( -/obj/item/clothing/head/hood/winter/cargo/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYj" = ( -/obj/item/weapon/implantcase/sprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYm" = ( -/mob/living/simple_mob/animal/passive/armadillo{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"bYo" = ( -/obj/item/weapon/commcard/medical/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYq" = ( -/obj/structure/closet/bombcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYs" = ( -/obj/item/clothing/under/dress/maid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYG" = ( -/obj/item/device/electronic_assembly/hook, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYI" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYN" = ( -/obj/item/clothing/head/hardhat/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYP" = ( -/obj/item/weapon/reagent_containers/food/snacks/redcurry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYR" = ( -/obj/item/weapon/commcard/head/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYU" = ( -/obj/structure/prop/machine/solifier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYV" = ( -/obj/item/trash/weebonuts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYX" = ( -/obj/machinery/shield_gen/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bYY" = ( -/obj/item/ammo_magazine/akm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZg" = ( -/obj/item/weapon/fuel_assembly/tritium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZh" = ( -/obj/item/weapon/reagent_containers/food/snacks/plumpburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZk" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZn" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZx" = ( -/obj/structure/sign/levels/medical/medeqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZz" = ( -/obj/machinery/door/airlock/angled_bay/standard/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZJ" = ( -/obj/item/clothing/mask/nock_scarab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZL" = ( -/obj/item/clothing/shoes/tribalwear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZR" = ( -/obj/structure/bed/chair/sofa/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZT" = ( -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"bZX" = ( -/obj/item/clothing/head/helmet/combat/crusader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caa" = ( -/obj/item/rig_module/mounted/egun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cab" = ( -/obj/item/weapon/key/cargo_train, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caf" = ( -/obj/item/trash/cigbutt/cigarbutt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caj" = ( -/obj/item/weapon/rig/merc/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cal" = ( -/obj/item/clothing/ears/earring/dangle/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cam" = ( -/obj/item/weapon/cell/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cao" = ( -/obj/item/integrated_circuit/transfer/pulsedemultiplexer/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cat" = ( -/obj/machinery/button/remote/airlock/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caC" = ( -/obj/item/weapon/ore/rutile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caD" = ( -/obj/item/weapon/book/manual/mass_spectrometry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caE" = ( -/obj/item/weapon/cartridge/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caH" = ( -/obj/machinery/door/airlock/angled_tgmc/prep/prep_bravo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caR" = ( -/obj/item/mecha_parts/chassis/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caT" = ( -/obj/item/clothing/suit/storage/det_trench/alt/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caW" = ( -/obj/item/weapon/handcuffs/cable/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"caX" = ( -/obj/item/weapon/gun/energy/taser/xeno/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbc" = ( -/obj/item/clothing/under/fluff/techpriestunder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbg" = ( -/obj/item/clothing/under/teshari/smock/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbi" = ( -/obj/structure/sign/scenery/engineright, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbo" = ( -/obj/item/stack/medical/advanced/bruise_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbq" = ( -/obj/item/weapon/storage/bag/ore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbw" = ( -/obj/machinery/button/remote/shields, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbJ" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbR" = ( -/obj/item/clothing/head/ushanka/alt/fluff/Jaree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbT" = ( -/obj/structure/largecrate/vehicle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbU" = ( -/obj/item/weapon/soap/red_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cbW" = ( -/obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccf" = ( -/obj/item/integrated_circuit/power/transmitter/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccg" = ( -/obj/item/device/encryptionkey/heads, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccx" = ( -/obj/item/flag/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccy" = ( -/obj/structure/prop/war/tgmc_missile_rack/fatty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccD" = ( -/mob/living/simple_mob/animal/passive/bird/azure_tit, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ccE" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccJ" = ( -/obj/item/clothing/head/beret/medical/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccQ" = ( -/obj/item/clothing/under/rank/cargotech/jeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ccS" = ( -/obj/item/clothing/under/altevian/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdh" = ( -/obj/item/clothing/head/helmet/combat/imperial/centurion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdo" = ( -/obj/machinery/door/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdw" = ( -/obj/item/seeds/pineapple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdy" = ( -/obj/item/clothing/suit/space/void/engineering/salvage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdB" = ( -/obj/machinery/suit_cycler/vintage/rugged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdD" = ( -/obj/item/ammo_magazine/m9mm/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cdN" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/pirate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cdP" = ( -/obj/item/seeds/libertymycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ceb" = ( -/obj/item/seeds/reishimycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cec" = ( -/obj/item/weapon/melee/changeling/arm_blade/greater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cef" = ( -/obj/item/clothing/suit/armor/vest/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cen" = ( -/obj/item/clothing/head/beret/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cet" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tramadol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cew" = ( -/obj/item/weapon/implanter/reagent_generator/rischi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ceA" = ( -/obj/item/clothing/under/rank/security/fluff/skinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ceC" = ( -/obj/item/weedkiller/D24, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ceD" = ( -/obj/item/weapon/reagent_containers/dropper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ceP" = ( -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cff" = ( -/obj/item/ammo_magazine/ammo_box/b545/large/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfh" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cfo" = ( -/obj/item/weapon/rig/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfq" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/nacho, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfs" = ( -/obj/machinery/gateway{ - dir = 5 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfw" = ( -/obj/item/weapon/photo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfC" = ( -/obj/machinery/recycling/sorter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfE" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfJ" = ( -/obj/item/clothing/head/shiny_hood/closed/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfQ" = ( -/obj/item/toy/xmastree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cfR" = ( -/obj/item/stack/material/log, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cge" = ( -/obj/machinery/door/firedoor/glass/hidden/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgi" = ( -/obj/item/seeds/jurlmah, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgm" = ( -/obj/item/clothing/under/excelsior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgo" = ( -/obj/item/mecha_parts/component/gas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgu" = ( -/obj/item/weapon/dnainjector/noprints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgw" = ( -/obj/item/clothing/accessory/asymovercoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgH" = ( -/obj/item/weapon/material/twohanded/saber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgL" = ( -/obj/item/clothing/head/taqiyah/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgR" = ( -/obj/item/weapon/storage/box/wings/tray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgV" = ( -/obj/item/clothing/suit/dress/solgov/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgX" = ( -/obj/item/weapon/shield/energy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cgY" = ( -/obj/item/clothing/suit/wizrobe/magusred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chd" = ( -/obj/item/clothing/suit/space/void/refurb/mining/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"che" = ( -/obj/item/weapon/storage/box/fluff/kelplague, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chk" = ( -/obj/item/clothing/under/fluff/latexmaid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chs" = ( -/obj/item/clothing/head/beanie_loose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chv" = ( -/obj/item/mecha_parts/mecha_equipment/gravcatapult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chw" = ( -/obj/item/clothing/suit/storage/hooded/costume/carp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chA" = ( -/obj/item/weapon/ore/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chJ" = ( -/obj/item/toy/plushie/borgplushie/drake/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chM" = ( -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chO" = ( -/obj/item/weapon/storage/belt/utility/chief/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chQ" = ( -/obj/item/weapon/gun/energy/mouseray/rabbit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chU" = ( -/obj/item/weapon/rig/zero, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"chZ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/decafchai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cic" = ( -/obj/item/clothing/accessory/jacket/altevian/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cid" = ( -/obj/item/weapon/grenade/spawnergrenade/manhacks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cio" = ( -/obj/item/weapon/circuitboard/machine/reg_c, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cip" = ( -/obj/item/weapon/book/manual/anomaly_spectroscopy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cis" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciw" = ( -/obj/item/clothing/head/helmet/fluff/freddy/foxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciA" = ( -/obj/item/weapon/reagent_containers/spray/pepper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciG" = ( -/obj/item/clothing/accessory/poncho/roles/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciK" = ( -/mob/living/simple_mob/vore/woof/hostile/aweful/melee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ciN" = ( -/obj/item/clothing/glasses/graviton/medgravpatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciQ" = ( -/obj/structure/sign/department/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciR" = ( -/obj/item/modular_computer/telescreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciU" = ( -/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ciY" = ( -/obj/item/slime_extract/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cja" = ( -/obj/item/weapon/grenade/empgrenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjc" = ( -/obj/item/weapon/stamp/denied, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjh" = ( -/obj/item/clothing/suit/storage/explorer/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cji" = ( -/mob/living/simple_mob/animal/sif/leech{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cjk" = ( -/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjq" = ( -/obj/item/clothing/under/solgov/utility/army/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjs" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjC" = ( -/obj/item/weapon/coin/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjN" = ( -/obj/item/ammo_magazine/clip/c545, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjO" = ( -/obj/item/weapon/storage/backpack/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjS" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjW" = ( -/obj/item/weapon/card/id/civilian/service/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjX" = ( -/obj/machinery/atmospherics/tvalve/digital/bypass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cjZ" = ( -/obj/item/weapon/material/snow/snowball/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cke" = ( -/obj/item/rig_module/grenade_launcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckf" = ( -/obj/item/weapon/broken_gun/ionrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckr" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckA" = ( -/obj/machinery/casino_chip_exchanger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckE" = ( -/obj/item/weapon/circuitboard/machine/abductor/core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckG" = ( -/obj/item/trash/candychunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ckS" = ( -/obj/item/weapon/storage/bag/plants, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clf" = ( -/obj/structure/sign/directions/tram, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clo" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clp" = ( -/obj/item/clothing/shoes/tourist_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cls" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clv" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clx" = ( -/obj/item/weapon/dnainjector/tourmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clB" = ( -/obj/item/weapon/storage/belt/fannypack/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clD" = ( -/obj/item/weapon/surgical/circular_saw/manager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clE" = ( -/mob/living/simple_mob/mechanical/viscerator/mercenary{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"clJ" = ( -/obj/item/weapon/bedsheet/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clO" = ( -/obj/item/ammo_magazine/ammo_box/b762/surplus/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"clX" = ( -/obj/item/clothing/under/teshari/smock/formal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cme" = ( -/obj/item/weapon/reagent_containers/food/snacks/quicheslice/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cml" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dermaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmm" = ( -/obj/item/trash/raisins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmw" = ( -/obj/item/clothing/under/tropical/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmA" = ( -/obj/item/clothing/suit/storage/toggle/light_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmC" = ( -/obj/item/clothing/head/beret/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmG" = ( -/obj/item/clothing/head/hood/winter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmN" = ( -/obj/item/weapon/storage/toolbox/lunchbox/survival/zaddat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmO" = ( -/obj/structure/sign/levels/shuttle_bay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmP" = ( -/obj/item/clothing/under/undersuit/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmQ" = ( -/obj/machinery/mineral/unloading_machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cmW" = ( -/obj/item/organ/internal/brain/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnb" = ( -/obj/item/clothing/head/helmet/space/void/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnl" = ( -/obj/item/clothing/suit/poncho, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cno" = ( -/obj/item/weapon/implanter/reagent_generator/tempest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnt" = ( -/obj/mecha/combat/marauder/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnw" = ( -/obj/structure/table/rack/holorack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnz" = ( -/obj/item/clothing/suit/kimono/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnA" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnC" = ( -/obj/item/integrated_circuit/output/led/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnE" = ( -/obj/item/weapon/melee/fluff/holochain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnH" = ( -/obj/item/clothing/head/bio_hood/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnN" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratpackcheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnO" = ( -/obj/item/modular_computer/console/preset/mercenary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnR" = ( -/obj/item/weapon/tank/jetpack/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnV" = ( -/obj/item/device/flashlight/glowstick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cnX" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cob" = ( -/obj/item/clothing/under/lawyer/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cof" = ( -/obj/item/clothing/under/rank/atmospheric_technician/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"coh" = ( -/obj/item/weapon/storage/pouch/eng_supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cop" = ( -/mob/living/simple_mob/humanoid/pirate/mate/ranged/bosun{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cou" = ( -/obj/item/clothing/head/pin/clover, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cov" = ( -/obj/machinery/shipsensors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"coG" = ( -/obj/item/weapon/reagent_containers/pill/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"coQ" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cpi" = ( -/obj/structure/sign/signnew/corrosives, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cpw" = ( -/obj/item/mecha_parts/part/scarab_right_legs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cpF" = ( -/obj/structure/timer_door/fifteen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cpL" = ( -/obj/item/clothing/suit/storage/hooded/techpriest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cpQ" = ( -/obj/item/clothing/under/undersuit/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cpY" = ( -/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cqb" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqm" = ( -/obj/item/clothing/under/yw/rank/security/brigphys/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqq" = ( -/obj/machinery/power/rtg/fake_gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqs" = ( -/obj/item/toy/plushie/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqu" = ( -/obj/item/seeds/lavenderseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqz" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqA" = ( -/obj/item/clothing/gloves/arm_guard/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqI" = ( -/obj/item/weapon/card/id/event/altcard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqK" = ( -/obj/item/clothing/head/helmet/space/void/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqM" = ( -/obj/item/clothing/under/teshari/undercoat/standard/purple_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqO" = ( -/obj/item/integrated_circuit/output/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqR" = ( -/obj/item/weapon/storage/box/lights/mixed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cqV" = ( -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crb" = ( -/obj/item/stack/tile/wood/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crc" = ( -/obj/item/ammo_magazine/m762enbloc/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cri" = ( -/obj/structure/sign/goldenplaque, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crl" = ( -/mob/living/simple_mob/horror/Willy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"crs" = ( -/mob/living/simple_mob/humanoid/pirate/captain{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"crE" = ( -/obj/structure/prop/machine/conduit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crG" = ( -/obj/machinery/light/small/poi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crM" = ( -/obj/structure/particle_accelerator/particle_emitter/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crT" = ( -/obj/structure/closet/secure_closet/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"crW" = ( -/obj/item/clothing/suit/space/vox/civ/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csd" = ( -/obj/item/ammo_magazine/m9mml, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csh" = ( -/obj/structure/ghost_pod/ghost_activated/maintpred/no_announce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csn" = ( -/obj/item/weapon/bone/skull/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cso" = ( -/obj/machinery/chemical_dispenser/bar_alc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csC" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"csE" = ( -/obj/structure/reagent_dispensers/virusfood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csK" = ( -/obj/item/clothing/accessory/armor/tag/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csL" = ( -/obj/item/clothing/under/sexyclown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"csY" = ( -/obj/item/ammo_magazine/ammo_box/foam/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cta" = ( -/obj/item/clothing/suit/storage/hooded/hoodie/redtrim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctb" = ( -/obj/machinery/readybutton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctd" = ( -/obj/item/device/flashlight/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctp" = ( -/obj/item/weapon/gun/energy/lasertag/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cts" = ( -/obj/item/clothing/shoes/boots/duty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctD" = ( -/obj/item/clothing/suit/storage/hooded/chaplain_hoodie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctI" = ( -/obj/item/organ/internal/augment/armmounted/shoulder/surge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctT" = ( -/obj/item/clothing/under/croptop/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctV" = ( -/obj/item/instrument/violin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ctX" = ( -/obj/item/device/juke_remote, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuf" = ( -/obj/item/weapon/circuitboard/prosthetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cug" = ( -/obj/structure/sign/warning/emergence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cup" = ( -/obj/item/weapon/mine/training, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuq" = ( -/obj/item/weapon/circuitboard/shield_gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuz" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuE" = ( -/obj/item/weapon/melee/energy/sword/charge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuF" = ( -/obj/item/clothing/ears/skrell/band/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuL" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuU" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuW" = ( -/obj/structure/sign/bigname, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cuY" = ( -/obj/item/clothing/accessory/armor/tag/solgov/com/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cve" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cvm" = ( -/obj/item/weapon/storage/bag/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvp" = ( -/obj/item/clothing/head/beret/engineering/ce/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvq" = ( -/obj/item/toy/figure/roach, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvA" = ( -/obj/item/clothing/under/shiny/catsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvF" = ( -/obj/item/weapon/surgical/FixOVein/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvJ" = ( -/obj/item/toy/figure/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvV" = ( -/obj/item/clothing/shoes/boots/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvW" = ( -/obj/item/device/mmi/digital/posibrain/nano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cvY" = ( -/obj/item/weapon/implanter/reagent_generator/jasmine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwc" = ( -/obj/item/weapon/dice/d20, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwd" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/icetea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwe" = ( -/obj/item/stack/tile/linoleum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwi" = ( -/obj/machinery/microwave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwl" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cwr" = ( -/obj/item/clothing/under/color/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwt" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "15" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cww" = ( -/obj/item/pipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwz" = ( -/obj/item/clothing/accessory/badge/corporate_tag/morpheus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwA" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwC" = ( -/obj/item/clothing/accessory/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwI" = ( -/obj/item/mecha_parts/mecha_equipment/tool/orescanner/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwK" = ( -/obj/machinery/atmospherics/pipe/tank/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cwR" = ( -/obj/structure/closet/crate/gilthari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxb" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxg" = ( -/obj/item/weapon/rig/pmc/security/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxx" = ( -/obj/item/clothing/under/dress/sundress_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxy" = ( -/obj/machinery/suit_cycler/vintage/tcrew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxz" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxE" = ( -/obj/machinery/smartfridge/tcrystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxF" = ( -/obj/machinery/computer/mecha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxG" = ( -/mob/living/simple_mob/humanoid/merc/ranged/poi{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cxJ" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxK" = ( -/obj/item/clothing/under/rank/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxN" = ( -/obj/item/clothing/shoes/black/cuffs/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxR" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxS" = ( -/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cxU" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyi" = ( -/obj/structure/reflector/single, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyu" = ( -/obj/item/clothing/head/cowboy/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyx" = ( -/obj/item/stack/medical/crude_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyy" = ( -/obj/item/clothing/shoes/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyB" = ( -/obj/structure/bed/chair/oldsofa/corner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyG" = ( -/obj/machinery/station_map, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyH" = ( -/obj/item/trash/spacer_cake_wrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyI" = ( -/obj/item/toy/plushie/squid/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyQ" = ( -/obj/item/clothing/suit/wizrobe/gentlecoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cyV" = ( -/obj/item/clothing/under/solgov/mildress/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czb" = ( -/obj/item/weapon/stock_parts/scanning_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czj" = ( -/obj/item/stack/material/log/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czm" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czn" = ( -/obj/item/seeds/blackwabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czw" = ( -/obj/item/slimepotion/feeding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czA" = ( -/obj/structure/grille/rustic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czJ" = ( -/obj/item/clothing/shoes/magboots/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"czR" = ( -/obj/item/device/bluespaceradio/tether_prelinked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAc" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAj" = ( -/obj/item/clothing/suit/storage/apron/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAm" = ( -/obj/mecha/working/ripley/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAn" = ( -/obj/machinery/smartfridge/secure/medbay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAt" = ( -/obj/item/clothing/accessory/solgov/fleet_patch/fifth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAu" = ( -/obj/structure/sign/directions/security/forensics/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAv" = ( -/obj/item/weapon/kinetic_crusher/machete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAB" = ( -/obj/item/trash/spinach, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAF" = ( -/obj/item/weapon/mine/dnascramble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAH" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAN" = ( -/obj/item/mecha_parts/mecha_equipment/omni_shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAP" = ( -/obj/machinery/smartfridge/drinks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cAQ" = ( -/obj/machinery/chemical_dispenser/bar_soft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBb" = ( -/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBi" = ( -/obj/item/toy/plushie/therapy/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBq" = ( -/obj/item/stack/rods{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBt" = ( -/mob/living/simple_mob/animal/giant_spider/thermic{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cBu" = ( -/obj/item/weapon/gun/projectile/pistol/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBx" = ( -/obj/item/weapon/handcuffs/cable/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBC" = ( -/obj/machinery/atmospherics/pipe/tank/air/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBF" = ( -/obj/item/weapon/circuitboard/id_restorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBL" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/honk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBR" = ( -/obj/item/clothing/under/solgov/utility/fleet/combat/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cBV" = ( -/obj/structure/table/sifwooden_reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCa" = ( -/obj/item/clothing/accessory/armor/tag/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCo" = ( -/obj/item/weapon/storage/backpack/messenger/black/fluff/briana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCr" = ( -/obj/item/device/floor_painter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCu" = ( -/obj/item/clothing/head/helmet/space/vox/civ/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCC" = ( -/obj/item/clothing/gloves/combat/knight_costume/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCL" = ( -/obj/machinery/newscaster/security_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCM" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCN" = ( -/obj/item/weapon/implant/fluff/coda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCQ" = ( -/obj/item/ammo_casing/a127x108, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCR" = ( -/obj/machinery/atm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCU" = ( -/obj/item/clothing/suit/nun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cCY" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/arithrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDe" = ( -/obj/structure/bookcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDi" = ( -/obj/item/ammo_magazine/ak74, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDj" = ( -/obj/structure/prop/machine/tradebeacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDo" = ( -/obj/item/weapon/material/knife/tacknife/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDu" = ( -/obj/item/toy/character/cleric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDw" = ( -/obj/item/seeds/rhubarb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDx" = ( -/obj/item/weapon/gun/launcher/scopedrocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDy" = ( -/obj/item/clothing/suit/storage/fluff/jacket/field, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDD" = ( -/obj/structure/sign/scenery/overlay/vine/mid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDP" = ( -/obj/structure/fans/tiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDT" = ( -/obj/item/clothing/shoes/leg_guard/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDY" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cDZ" = ( -/obj/item/trash/mooncakewrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEd" = ( -/obj/item/weapon/card/id/science/roboticist/dummy_cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEm" = ( -/obj/item/stack/material/lead{ - amount = 30 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEo" = ( -/obj/item/weapon/arrow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEy" = ( -/obj/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEC" = ( -/obj/machinery/door/airlock/glass_mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cED" = ( -/obj/item/clothing/accessory/armor/tag/solgov/ec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEO" = ( -/obj/item/clothing/under/dress/red_swept_dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cES" = ( -/obj/item/clothing/under/skirt/colorable/pleated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEU" = ( -/obj/item/weapon/fluff/injector/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cEV" = ( -/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFc" = ( -/obj/structure/table/hardwoodtable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFf" = ( -/obj/structure/sign/flag/fivearrows/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFn" = ( -/obj/item/clothing/head/helmet/space/void/exploration/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFD" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFS" = ( -/obj/item/organ/internal/liver/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFU" = ( -/obj/item/clothing/under/pants/classicjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cFX" = ( -/obj/item/weapon/storage/box/casino/costume_chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGa" = ( -/obj/structure/bed/chair/janicart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGb" = ( -/obj/vehicle/train/rover/trolley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGc" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGd" = ( -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGe" = ( -/obj/item/clothing/under/solgov/utility/fleet/combat/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGh" = ( -/obj/item/weapon/ore/bluespace_crystal/artificial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGk" = ( -/obj/item/clothing/suit/space/vox/civ/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGp" = ( -/obj/item/clothing/accessory/collar/fluff/aroozee_valhollide_ring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGu" = ( -/obj/item/ammo_magazine/m95, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGD" = ( -/obj/item/weapon/thecake_layer/five, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGI" = ( -/obj/item/ammo_magazine/tp23s/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGK" = ( -/obj/item/weapon/light/tube/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cGX" = ( -/obj/machinery/door/airlock/glass_engineeringatmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cHm" = ( -/obj/item/clothing/suit/storage/apron/overalls, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cHz" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cHI" = ( -/obj/machinery/appliance/mixer/cereal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cHK" = ( -/obj/machinery/chemical_synthesizer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cHO" = ( -/obj/item/clothing/shoes/fluff/nikki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIa" = ( -/obj/item/weapon/tank/oxygen/onetankbomb/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIc" = ( -/obj/item/integrated_circuit/reagent/storage/scan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIh" = ( -/obj/machinery/vending/event/food, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIz" = ( -/obj/item/weapon/soap/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIA" = ( -/obj/item/clothing/head/woodcirclet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIB" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cID" = ( -/obj/item/weapon/gun/energy/modular/carbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIH" = ( -/obj/item/weapon/melee/chainofcommand/curator_whip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIT" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIU" = ( -/obj/item/ammo_magazine/clip/c45/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cIV" = ( -/mob/living/simple_mob/mobs_monsters/clowns/mutant{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cIX" = ( -/obj/item/weapon/reagent_containers/food/snacks/aesirsalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJa" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJc" = ( -/obj/machinery/atmospherics/binary/passive_gate/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJh" = ( -/obj/item/stack/material/marble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJn" = ( -/obj/item/clothing/glasses/sunglasses/sechud/tajblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJt" = ( -/obj/item/weapon/broken_gun/flechette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJA" = ( -/obj/item/weapon/storage/box/donkpockets/pizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJD" = ( -/obj/item/toy/mecha/reticence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJJ" = ( -/obj/item/clothing/accessory/solgov/department/research/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJQ" = ( -/obj/structure/bed/chair/sofa/corp/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cJY" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKa" = ( -/obj/item/clothing/glasses/omnihud/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKd" = ( -/obj/item/clothing/head/bio_hood/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKe" = ( -/obj/item/clothing/suit/storage/vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKf" = ( -/obj/item/device/healthanalyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKn" = ( -/obj/item/rig_module/grenade_launcher/metalfoam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKq" = ( -/obj/item/weapon/spell/targeting_matrix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKr" = ( -/obj/item/clothing/suit/storage/flannel/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKu" = ( -/obj/item/clothing/accessory/solgov/department/security/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cKA" = ( -/mob/living/simple_mob/vore/sect_queen{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cKH" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/acid{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cKR" = ( -/obj/item/weapon/gun/projectile/automatic/pdw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLb" = ( -/obj/item/projectile/pummel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLe" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocobanana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLh" = ( -/obj/item/weapon/melee/chainofcommand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLk" = ( -/obj/item/stack/tile/floor/techgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLl" = ( -/obj/structure/largecrate/animal/otie/guardbeast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLy" = ( -/obj/item/weapon/reagent_containers/food/drinks/cup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLB" = ( -/obj/item/weapon/miscdisc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLD" = ( -/obj/item/weapon/broken_gun/silenced45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLH" = ( -/obj/item/weapon/card/id/gold/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLM" = ( -/obj/machinery/door/airlock/glass_command/polarized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLR" = ( -/obj/item/clothing/head/plaguedoctorhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cLW" = ( -/mob/living/simple_mob/animal/passive/snake{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cMe" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/cti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMf" = ( -/obj/structure/fireaxecabinet/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMg" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMi" = ( -/obj/item/weapon/computer_hardware/hard_drive/portable/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMm" = ( -/obj/machinery/robotic_fabricator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cME" = ( -/obj/item/weapon/storage/box/fluff/zara, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMJ" = ( -/obj/structure/sign/hostilefauna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMW" = ( -/obj/item/clothing/mask/nock_ornate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMX" = ( -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cMY" = ( -/obj/structure/closet/bombclosetsecurity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNg" = ( -/obj/item/ammo_magazine/ammo_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNh" = ( -/obj/item/clothing/under/dress/sundress_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNj" = ( -/obj/item/weapon/gun/projectile/revolver/lemat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNl" = ( -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNp" = ( -/obj/item/shield_projector/rectangle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNr" = ( -/obj/structure/reagent_dispensers/beerkeg/fakenuke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNs" = ( -/obj/item/clothing/mask/gas/plaguedoctor/fluff/octaviousmask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNC" = ( -/obj/item/clothing/accessory/armor/helmcover/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNG" = ( -/obj/item/weapon/implant/reagent_generator/vorrarkul, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNM" = ( -/mob/living/simple_mob/slime/xenobio/silver{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cNS" = ( -/obj/machinery/vending/cola/soft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cNT" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOg" = ( -/obj/item/clothing/head/bandana/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOl" = ( -/obj/machinery/oxygen_pump/mobile/anesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOq" = ( -/obj/item/seeds/amauri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOr" = ( -/obj/item/smallDelivery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOz" = ( -/obj/item/stack/tile/floor/concrete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOD" = ( -/obj/item/clothing/accessory/storage/pouches/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOF" = ( -/obj/item/weapon/implantcase/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOP" = ( -/obj/structure/prop/war/minirocket_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOS" = ( -/obj/item/device/suit_cooling_unit/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOT" = ( -/obj/item/clothing/under/rank/talon/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cOX" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPb" = ( -/obj/item/clothing/under/color/fjumpsuit/lightbluef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPe" = ( -/obj/item/weapon/gun/projectile/automatic/tommygun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPf" = ( -/obj/item/clothing/head/soft/sec/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPg" = ( -/obj/item/clothing/accessory/tie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPl" = ( -/obj/item/clothing/head/beret/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPq" = ( -/obj/item/integrated_circuit/passive/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPs" = ( -/obj/item/ammo_casing/a12g, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPu" = ( -/obj/item/weapon/fuel_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPB" = ( -/obj/item/weapon/storage/pill_bottle/tramadol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPF" = ( -/obj/machinery/hyperpad{ - dir = 10 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPG" = ( -/obj/item/toy/figure/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPH" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatbun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPI" = ( -/obj/machinery/door/airlock/glass_science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPN" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPS" = ( -/obj/item/clothing/suit/storage/vest/press, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPT" = ( -/obj/item/clothing/gloves/gauntlets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPW" = ( -/obj/item/seeds/shandseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cPX" = ( -/obj/item/weapon/circuitboard/intercom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQe" = ( -/obj/item/weapon/gun/energy/sizegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQg" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/terra_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQn" = ( -/obj/item/clothing/shoes/clown_shoes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQq" = ( -/obj/structure/bed/chair/sofa/right/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQr" = ( -/obj/structure/sign/department/mail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQs" = ( -/obj/item/weapon/implantcase/shades, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQE" = ( -/obj/item/weapon/flame/lighter/zippo/engraved, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQG" = ( -/obj/machinery/suit_cycler/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQK" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cQS" = ( -/obj/item/clothing/accessory/jacket/modwrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cQY" = ( -/obj/structure/prop/statue/statue4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRb" = ( -/obj/item/clothing/under/dress/dress_cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRc" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRh" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "35" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRk" = ( -/obj/item/clothing/head/bio_hood/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRv" = ( -/obj/item/clothing/suit/armor/yw/blueshieldcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRy" = ( -/obj/item/clothing/shoes/boots/speed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRJ" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRT" = ( -/obj/item/weapon/refill_cartridge/autoname/food/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRV" = ( -/obj/item/weapon/gun/launcher/confetti_cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRW" = ( -/obj/item/weapon/book/manual/nuclear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cRX" = ( -/obj/item/clothing/head/caphat/formal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSj" = ( -/obj/item/seeds/durian, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSt" = ( -/obj/machinery/floorlayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSA" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSC" = ( -/obj/item/pipe/trinary/flippable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSJ" = ( -/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSK" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSL" = ( -/obj/item/clothing/suit/space/vox/civ/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSN" = ( -/obj/item/clothing/under/yw/victsuit/victdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSO" = ( -/obj/item/weapon/storage/backpack/russian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSP" = ( -/mob/living/simple_mob/vore/hostile/morph, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cSR" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cSX" = ( -/obj/item/clothing/shoes/skater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTb" = ( -/obj/item/weapon/storage/box/fluff/mauser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTl" = ( -/obj/item/clothing/under/cohesion/decal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTt" = ( -/obj/item/clothing/head/powdered_wig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTw" = ( -/obj/structure/largecrate/animal/sheep, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTx" = ( -/obj/item/slimepotion/enhancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTF" = ( -/obj/structure/loot_pile/mecha/durand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTQ" = ( -/obj/item/weapon/storage/backpack/saddlebag_common/robust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cTR" = ( -/obj/structure/table/marble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUl" = ( -/obj/machinery/iv_drip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUm" = ( -/obj/item/clothing/suit/storage/terran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUw" = ( -/obj/item/weapon/commcard/medical/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUx" = ( -/obj/item/clothing/head/beret/solgov/fleet/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUA" = ( -/obj/item/stack/material/stick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUB" = ( -/obj/item/clothing/glasses/omnihud/prescription/aurora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUG" = ( -/obj/item/weapon/storage/backpack/messenger/engi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUI" = ( -/obj/item/ammo_magazine/m45tommy/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUS" = ( -/mob/living/simple_mob/animal/space/mouse_army/pyro{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cUU" = ( -/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedeng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cUZ" = ( -/obj/item/clothing/suit/armor/tdome/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVo" = ( -/obj/item/weapon/computer_hardware/battery_module/lambda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVr" = ( -/obj/item/clothing/under/croptop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVu" = ( -/obj/item/weapon/fluff/zekewatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVI" = ( -/obj/structure/prop/nest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVM" = ( -/obj/item/organ/internal/brain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVX" = ( -/obj/item/clothing/under/teshari/undercoat/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cVZ" = ( -/obj/item/clothing/suit/hastur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWa" = ( -/obj/item/weapon/material/fishing_rod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWe" = ( -/obj/item/clothing/under/explorer/utility/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWj" = ( -/obj/item/clothing/glasses/night, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWo" = ( -/obj/item/integrated_circuit/transfer/demultiplexer/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWq" = ( -/obj/item/weapon/chainsaw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWw" = ( -/obj/item/weapon/storage/pill_bottle/dice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWz" = ( -/obj/item/weapon/module/power_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWC" = ( -/obj/item/clothing/suit/storage/vest/heavy/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cWL" = ( -/obj/item/clothing/accessory/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXc" = ( -/obj/machinery/photocopier/faxmachine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXf" = ( -/obj/item/clothing/accessory/pride, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXi" = ( -/obj/item/clothing/under/harness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXk" = ( -/obj/item/weapon/handcuffs/cable/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXm" = ( -/obj/item/weapon/card, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXn" = ( -/mob/living/simple_mob/humanoid/pirate/mate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cXo" = ( -/obj/structure/sign/warning/evac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXs" = ( -/obj/machinery/seed_storage/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXu" = ( -/obj/item/weapon/stool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXv" = ( -/obj/item/weapon/aliencoin/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXx" = ( -/obj/item/clothing/under/away/daedalus/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXI" = ( -/obj/item/clothing/suit/space/void/responseteam/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXK" = ( -/obj/item/clothing/gloves/ring/material/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXO" = ( -/obj/item/weapon/storage/backpack/saddlebag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXP" = ( -/obj/item/weapon/gun/energy/taser/mounted/cyborg/swarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXS" = ( -/obj/item/weapon/circuitboard/rdserver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cXX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYa" = ( -/obj/machinery/wish_granter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYb" = ( -/obj/item/weapon/spell/modifier/corona, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYh" = ( -/obj/item/clothing/under/redpyjamas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYo" = ( -/obj/item/clothing/accessory/solgov/department/medical/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYq" = ( -/obj/structure/sign/itg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYC" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ar10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYJ" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"cYM" = ( -/obj/item/weapon/aiModule/freeformcore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cYN" = ( -/obj/item/toy/figure/librarian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZa" = ( -/obj/structure/barricade/cutout/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZg" = ( -/obj/item/clothing/suit/space/void/refurb/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZq" = ( -/obj/item/clothing/head/cakehat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZz" = ( -/obj/machinery/shieldwall{ - dir = 5 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZA" = ( -/obj/machinery/door/airlock/lift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZB" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZC" = ( -/obj/item/weapon/storage/belt/fannypack/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZH" = ( -/obj/structure/sign/directions/science/xenobiology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZO" = ( -/obj/item/weapon/cell/crap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"cZU" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"daa" = ( -/obj/machinery/slot_machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dab" = ( -/obj/item/weapon/toy/snowglobe/snowvillage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dag" = ( -/obj/item/integrated_circuit/illegal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dar" = ( -/obj/item/weapon/disk/body_record, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"daw" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/mad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"daM" = ( -/obj/item/weapon/reagent_containers/food/snacks/sandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"daT" = ( -/obj/item/ammo_casing/a145/spent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"daX" = ( -/obj/item/clothing/under/fluff/mauserunder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbh" = ( -/obj/structure/sign/flag/fivearrows/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbi" = ( -/obj/item/clothing/accessory/badge/holo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbq" = ( -/obj/item/weapon/storage/box/fluff/kettek, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbv" = ( -/obj/item/stack/tile/floor/eris/dark/gray_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbx" = ( -/obj/structure/prop/war/tgmc_30mm/loadedempty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbE" = ( -/obj/item/weapon/rcd_ammo/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbF" = ( -/obj/item/clothing/under/explorer/utility/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbG" = ( -/obj/item/mecha_parts/part/durand_right_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dbI" = ( -/mob/living/simple_mob/mechanical/mecha/odysseus{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dca" = ( -/obj/item/weapon/storage/belt/utility/full/multitool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcf" = ( -/obj/machinery/door/airlock/angled_tgmc/wide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dck" = ( -/obj/item/organ/internal/intestine/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcr" = ( -/obj/item/weapon/pen/crayon/marker/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dct" = ( -/obj/item/weapon/storage/box/frags_half_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcv" = ( -/obj/item/weapon/rig/pmc/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcw" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcA" = ( -/obj/item/weapon/flame/lighter/zippo/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcF" = ( -/obj/item/integrated_circuit/reagent/smoke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcI" = ( -/obj/item/clothing/accessory/hawaiian/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcL" = ( -/obj/item/clothing/shoes/flats/white/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcT" = ( -/obj/item/weapon/paper/awaygate/snowfield/evacuation_order3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcW" = ( -/obj/item/flag/shadowcoalition, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dcZ" = ( -/obj/structure/morgue/crematorium/vr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddc" = ( -/obj/structure/bed/chair/sofa/right/sif_ora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddd" = ( -/obj/item/clothing/under/modjump3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddf" = ( -/obj/item/clothing/accessory/solgov/specialty/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddh" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesyfries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddi" = ( -/obj/item/weapon/gun/energy/xray/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddn" = ( -/obj/structure/sign/directions/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddr" = ( -/obj/item/seeds/pitcherseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddu" = ( -/obj/item/weapon/implant/restrainingbolt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddv" = ( -/obj/item/clothing/under/whiterobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddy" = ( -/obj/item/device/holowarrant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddB" = ( -/obj/item/weapon/reagent_containers/food/snacks/xemeatpie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddH" = ( -/mob/living/simple_mob/slime/xenobio/blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ddL" = ( -/obj/item/robot_parts/robot_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddM" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/burger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddR" = ( -/obj/item/weapon/spell/condensation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ddT" = ( -/obj/item/weapon/reagent_containers/pill/vermicetol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"den" = ( -/obj/item/weapon/implanter/compliance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"der" = ( -/obj/item/weapon/rig/industrial/vendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"des" = ( -/obj/item/weapon/material/knife/ritual/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dev" = ( -/obj/structure/closet/secure_closet/security/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dew" = ( -/obj/item/weapon/circuitboard/transhuman_synthprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dex" = ( -/obj/item/weapon/tank/oxygen/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"deE" = ( -/obj/machinery/atmospherics/portables_connector/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"deQ" = ( -/obj/structure/prop/war/warhead4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"deU" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/margherita/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"deX" = ( -/obj/item/seeds/cinnamon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfc" = ( -/obj/item/ammo_magazine/cell_mag/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dff" = ( -/obj/item/clothing/under/sundress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfl" = ( -/obj/item/weapon/spell/instability_tap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfq" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfr" = ( -/obj/item/clothing/under/swimsuit/fluff/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfu" = ( -/obj/item/clothing/mask/gas/fluff/takiramask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfA" = ( -/obj/structure/prop/machine/nt_optable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfC" = ( -/obj/item/weapon/circuitboard/arcade/battle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfE" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfG" = ( -/obj/item/clothing/head/fluff/headbando, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfJ" = ( -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfM" = ( -/obj/item/weapon/gun/energy/mouseray/direwolf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfO" = ( -/obj/item/weapon/reagent_containers/hypospray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dfS" = ( -/obj/item/seeds/carpetseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgd" = ( -/obj/item/weapon/reagent_containers/food/snacks/csandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgf" = ( -/obj/item/weapon/pen/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgg" = ( -/obj/item/resonator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgj" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/old/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgz" = ( -/obj/item/clothing/under/sterile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgB" = ( -/obj/item/clothing/suit/fluff/freddy/bonnie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgD" = ( -/obj/item/clothing/head/helmet/augment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgG" = ( -/obj/item/clothing/head/witchwig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgJ" = ( -/obj/item/weapon/ratvarian_spear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgS" = ( -/obj/item/clothing/head/pin/flower/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgT" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dgW" = ( -/obj/item/ammo_magazine/m545/small/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhf" = ( -/obj/item/weapon/circuitboard/sleeper_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhi" = ( -/obj/item/integrated_circuit/input/EPv2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhn" = ( -/obj/item/projectile/energy/fireball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhr" = ( -/obj/item/slime_extract/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhI" = ( -/mob/living/simple_mob/vore/lamia{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dhL" = ( -/obj/item/pizzabox/pineapple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhN" = ( -/obj/item/weapon/reagent_containers/hypospray/vial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhQ" = ( -/obj/item/weapon/paper/sec_ticket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dhS" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratsteak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"die" = ( -/obj/item/weapon/storage/box/fluff/penelope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dii" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dik" = ( -/obj/item/weapon/circuitboard/microwave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dim" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/blue_edge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"din" = ( -/obj/machinery/light_construct/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dio" = ( -/obj/item/clothing/under/tribalwear/shaman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diy" = ( -/obj/item/ammo_casing/microbattery/medical/brute3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diE" = ( -/obj/item/clothing/under/dress/white4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diG" = ( -/obj/item/clothing/head/cardborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diH" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/guac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diJ" = ( -/obj/item/clothing/suit/storage/duster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diK" = ( -/obj/item/clothing/head/soft/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diO" = ( -/obj/machinery/atmospherics/unary/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diU" = ( -/obj/item/weapon/gun/projectile/revolver/capgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"diY" = ( -/obj/item/clothing/shoes/boots/winter/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djb" = ( -/obj/machinery/door/airlock/alarmlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djf" = ( -/obj/item/clothing/head/hijab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djt" = ( -/obj/item/weapon/disk/limb/dsi_fennec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djw" = ( -/obj/machinery/clonepod/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djz" = ( -/obj/item/ammo_magazine/m10mm/pistol/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djE" = ( -/obj/item/ammo_magazine/m12gdrumjack/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djF" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djG" = ( -/obj/item/device/electronic_assembly/clam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djN" = ( -/obj/item/slime_extract/amber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djO" = ( -/obj/item/clothing/under/solgov/utility/fleet/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djQ" = ( -/obj/item/ammo_casing/a762x54/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djR" = ( -/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"djU" = ( -/mob/living/simple_mob/vore/pakkun/snapdragon/snappy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dkc" = ( -/obj/item/weapon/gun/launcher/syringe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkf" = ( -/obj/item/weapon/circuitboard/mecha/ripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkg" = ( -/obj/item/ammo_magazine/a57/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dki" = ( -/obj/item/clothing/under/skirt/colorable/puffy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkj" = ( -/obj/item/clothing/suit/shrine_maiden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkl" = ( -/obj/item/clothing/under/shorts/white/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkm" = ( -/obj/item/clothing/under/lawyer/black/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkp" = ( -/obj/item/mecha_parts/part/ripley_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkq" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/chapel/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dku" = ( -/obj/item/weapon/gun/projectile/giskard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkI" = ( -/obj/item/clothing/under/rank/scientist_new, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkJ" = ( -/obj/item/clothing/head/helmet/material/makeshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkL" = ( -/obj/item/weapon/gun/energy/gun/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkQ" = ( -/obj/item/weapon/circuitboard/mecha/imperion/phasing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dkY" = ( -/obj/item/rig_module/chem_dispenser/injector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dla" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlu" = ( -/obj/machinery/door/airlock/angled_bay/hatch/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlw" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlx" = ( -/obj/machinery/power/singularity_beacon/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlL" = ( -/obj/item/clothing/head/bio_hood/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlM" = ( -/obj/item/weapon/melee/energy/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dlS" = ( -/obj/item/weapon/tank/emergency/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmb" = ( -/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dme" = ( -/obj/machinery/door/airlock/angled_bay/external/glass/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmg" = ( -/obj/item/clothing/suit/space/vox/civ/medical/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmn" = ( -/obj/item/clothing/head/redtag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmo" = ( -/obj/item/integrated_circuit/passive/power/starter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmp" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmr" = ( -/obj/machinery/smartfridge/produce/persistent_lossy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmx" = ( -/obj/item/weapon/firework_star, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmB" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/pie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmJ" = ( -/obj/item/rig_module/power_sink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmN" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/BMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmO" = ( -/obj/item/weapon/card/id/medical/geneticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dmQ" = ( -/mob/living/simple_mob/animal/hyena{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dmR" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/pirate/last_stand_merc{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dmX" = ( -/obj/item/clothing/gloves/ring/seal/mason, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dna" = ( -/obj/item/clothing/head/tesh_hood/standard/white_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dni" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnj" = ( -/obj/item/clothing/suit/space/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnm" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnr" = ( -/obj/item/weapon/broken_gun/z8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnE" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/mochicake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnF" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/cheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnG" = ( -/obj/item/clothing/suit/armor/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dnI" = ( -/obj/item/clothing/suit/space/void/engineering/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dod" = ( -/obj/mecha/combat/gygax/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doe" = ( -/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dof" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dol" = ( -/mob/living/simple_mob/animal/solargrub_larva{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"don" = ( -/obj/machinery/bookbinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dop" = ( -/obj/item/weapon/reagent_containers/food/snacks/goulash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doy" = ( -/obj/item/clothing/suit/space/vox/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doH" = ( -/obj/structure/loot_pile/surface/medicine_cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doL" = ( -/obj/structure/sign/flag/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doN" = ( -/obj/item/stack/hose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"doW" = ( -/obj/item/clothing/gloves/ring/material/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpa" = ( -/obj/item/stack/material/durasteel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpb" = ( -/obj/item/weapon/material/kitchen/utensil/foon/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpo" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpu" = ( -/obj/item/stack/material/marble{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpv" = ( -/obj/item/weapon/rig/pmc/commander/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpA" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/flame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpU" = ( -/obj/item/ammo_casing/a556, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpW" = ( -/obj/item/rig_module/mounted/sizegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dpX" = ( -/obj/item/weapon/gun/launcher/crossbow/bow/hardlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqg" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqi" = ( -/obj/item/ammo_magazine/ammo_box/b762/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dql" = ( -/obj/item/integrated_circuit/converter/radians2degrees, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqs" = ( -/obj/item/weapon/circuitboard/mecha/odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqu" = ( -/obj/item/weapon/storage/box/chemimp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqw" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dqN" = ( -/obj/structure/closet/crate/freezer/centauri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dra" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/gelatin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drf" = ( -/obj/item/seeds/poisonedappleseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drl" = ( -/obj/structure/sign/warning/acid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drv" = ( -/obj/item/key, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drB" = ( -/obj/item/clothing/accessory/armor/legguards/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drQ" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drS" = ( -/mob/living/simple_mob/horror/BigTim{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"drT" = ( -/obj/item/clothing/suit/space/changeling/armored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"drZ" = ( -/obj/item/clothing/accessory/badge/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsl" = ( -/obj/item/device/binoculars/scope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsn" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dso" = ( -/obj/structure/door_assembly/door_assembly_eat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsq" = ( -/obj/item/weapon/storage/box/syndie_kit/voidsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsw" = ( -/obj/machinery/atmospherics/tvalve/digital, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsy" = ( -/obj/structure/sign/flag/catpirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsz" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "12" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsC" = ( -/obj/item/weapon/reagent_containers/food/snacks/rosesalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsE" = ( -/obj/item/weapon/spacecash/c10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsI" = ( -/obj/item/stack/tile/grass/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsN" = ( -/obj/item/clothing/accessory/medal/solgov/bronze/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsO" = ( -/obj/item/clothing/under/color/blackf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/semki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dsU" = ( -/obj/item/ammo_magazine/pitchmag/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dtd" = ( -/obj/item/weapon/gun/energy/mouseray/lizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dtl" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/red_flames{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dto" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/rugged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dtI" = ( -/obj/structure/timer_door/twenty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dua" = ( -/mob/living/simple_mob/vore/wolfgirl{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"duk" = ( -/mob/living/simple_mob/animal/space/bats/roguemines{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"duG" = ( -/obj/item/clothing/under/skirt/colorable/skater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duH" = ( -/obj/machinery/shieldwall{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duI" = ( -/obj/item/clothing/accessory/solgov/specialty/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duK" = ( -/obj/item/clothing/shoes/footwraps/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duL" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/shake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duN" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"duW" = ( -/obj/item/clothing/under/terran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dvb" = ( -/obj/item/weapon/rig/pmc/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dvs" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dvB" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dvK" = ( -/obj/item/device/healthanalyzer/advanced/fluff/jiao_health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dvX" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwb" = ( -/obj/machinery/vending/boozeomat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwe" = ( -/obj/item/clothing/accessory/asymmetric/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwo" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwp" = ( -/obj/item/ammo_casing/a9x39/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwr" = ( -/obj/machinery/computer/arcade/orion_trail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwA" = ( -/obj/item/weapon/smes_coil/super_io, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwK" = ( -/obj/item/stack/tile/floor/eris/steel/violetcorener, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwO" = ( -/obj/item/clothing/head/axiscap/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwV" = ( -/obj/item/clothing/head/soft/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dwY" = ( -/obj/item/weapon/material/kitchen/utensil/spork/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxq" = ( -/obj/item/weapon/paper/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxt" = ( -/obj/item/clothing/head/fez, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxu" = ( -/obj/item/weapon/reagent_containers/glass/bottle/keloderm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxA" = ( -/obj/item/clothing/suit/wizrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxE" = ( -/obj/machinery/shield_capacitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxG" = ( -/obj/item/clothing/under/rank/security/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxP" = ( -/obj/machinery/igniter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dxU" = ( -/obj/item/clothing/accessory/armor/armguards, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyg" = ( -/obj/machinery/door/airlock/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyj" = ( -/obj/item/clothing/shoes/griffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyq" = ( -/obj/item/device/walkpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyr" = ( -/obj/item/weapon/disk/integrated_circuit/upgrade/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyu" = ( -/obj/item/clothing/accessory/solgov/rank/ec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyA" = ( -/obj/item/weapon/disk/limb/cenilimicybernetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyC" = ( -/obj/item/clothing/suit/storage/victcoat/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyO" = ( -/obj/item/weapon/disk/limb/kitsuhana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyR" = ( -/obj/item/weapon/implant/dud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyT" = ( -/obj/item/weapon/paper/courtroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyV" = ( -/obj/item/integrated_circuit/output/sound/beeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dyZ" = ( -/obj/item/rig_module/grenade_launcher/nerfed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dze" = ( -/obj/item/clothing/suit/storage/toggle/track/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dzs" = ( -/obj/structure/door_assembly/multi_tile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dzt" = ( -/obj/item/clothing/under/nanotrasen/security/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dzA" = ( -/obj/item/clothing/accessory/solgov/rank/ec/officer/o5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dzF" = ( -/obj/item/ammo_magazine/m9mmt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAa" = ( -/mob/living/simple_mob/construct/shade{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dAh" = ( -/obj/item/ammo_casing/microbattery/medical/antirad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAn" = ( -/obj/item/seeds/orangeseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAo" = ( -/obj/structure/sign/level/basement/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAp" = ( -/obj/item/device/kit/paint/gygax/recitence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAr" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/sucker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAA" = ( -/obj/mecha/medical/odysseus/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAD" = ( -/obj/item/clothing/under/away/patrol/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAE" = ( -/obj/item/weapon/reagent_containers/food/snacks/fishfingers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAG" = ( -/obj/item/weapon/circuitboard/mecha/durand/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAO" = ( -/obj/item/weapon/gun/projectile/revolver/stainless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAU" = ( -/obj/item/weapon/flag/federation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAV" = ( -/obj/item/clothing/head/trilby, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dAZ" = ( -/obj/item/weapon/gun/projectile/automatic/mg42, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBc" = ( -/obj/structure/closet/masks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBf" = ( -/obj/item/clothing/suit/sexyminer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBh" = ( -/obj/item/clothing/shoes/boots/winter/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBj" = ( -/obj/item/stack/tile/wood/parquet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBk" = ( -/obj/item/toy/figure/abe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBt" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/worm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBx" = ( -/obj/item/weapon/material/knife/stone/bone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBy" = ( -/obj/item/integrated_circuit/converter/uppercase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBz" = ( -/obj/item/rig_module/chem_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBD" = ( -/obj/item/weapon/storage/box/glass_extras/straws, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBG" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/narsie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBI" = ( -/obj/item/rig_module/grenade_launcher/smoke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBN" = ( -/obj/mecha/combat/fighter/scoralis/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBU" = ( -/obj/item/weapon/stock_parts/manipulator/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBW" = ( -/obj/structure/bed/chair/backed_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dBY" = ( -/obj/item/clothing/accessory/poncho/thermal/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCa" = ( -/obj/item/clothing/under/tourist_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCf" = ( -/obj/item/weapon/rig/pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCg" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCh" = ( -/mob/living/simple_mob/mobs_monsters/clowns/destroyer{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dCi" = ( -/obj/item/clothing/suit/wizrobe/marisa/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCo" = ( -/obj/item/clothing/under/rank/trek/medsci/ent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCq" = ( -/obj/item/clothing/accessory/sweater/blackneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCr" = ( -/obj/item/clothing/shoes/fluff/morthighs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCs" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCy" = ( -/obj/item/weapon/stock_parts/scanning_module/phasic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCz" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCB" = ( -/obj/item/weapon/storage/box/fluff/vanesaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCD" = ( -/obj/item/weapon/spellbook/oneuse/fireball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCI" = ( -/obj/structure/closet/secure_closet/egg/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCJ" = ( -/obj/item/ammo_magazine/m762/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dCM" = ( -/mob/living/simple_mob/humanoid/pirate/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dCR" = ( -/obj/item/weapon/melee/cursedblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDf" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDk" = ( -/obj/structure/table/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDm" = ( -/obj/item/stack/tile/floor/eris/techmaint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDo" = ( -/obj/item/clothing/accessory/wcoat/gentleman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDs" = ( -/obj/item/clothing/suit/space/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDz" = ( -/obj/item/weapon/refill_cartridge/autoname/giftvendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDB" = ( -/obj/item/weapon/spacecasinocash/c20, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDC" = ( -/obj/structure/outcrop/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDE" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDH" = ( -/obj/item/weapon/gun/energy/pulse_rifle/compact/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDJ" = ( -/obj/item/trash/ratjuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDO" = ( -/obj/item/weapon/cartridge/quartermaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDP" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDR" = ( -/obj/item/clothing/head/hood/winter/medical/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDX" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/choc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDY" = ( -/obj/item/clothing/head/helmet/eraticator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dDZ" = ( -/obj/machinery/transhuman/resleever/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEa" = ( -/obj/machinery/pointdefense, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEr" = ( -/obj/item/weapon/storage/box/flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEy" = ( -/obj/item/clothing/suit/space/vox/civ/medical/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEz" = ( -/obj/item/clothing/mask/ninjascarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dED" = ( -/obj/item/seeds/cherryseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEF" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEI" = ( -/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEJ" = ( -/obj/item/clothing/head/helmet/space/syndicate/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dER" = ( -/obj/item/integrated_circuit/built_in/device_output, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEY" = ( -/obj/item/clothing/accessory/solgov/department/supply/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dEZ" = ( -/obj/item/weapon/cartridge/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFe" = ( -/obj/item/clothing/suit/space/void/refurb/officer/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFf" = ( -/obj/item/clothing/head/service/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFg" = ( -/obj/item/clothing/under/pants/utility/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFB" = ( -/obj/item/clothing/accessory/armor/tag/solgov/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFC" = ( -/obj/item/ammo_magazine/m9mmp90/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFD" = ( -/obj/item/clothing/suit/storage/vest/wardencoat/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFP" = ( -/obj/structure/sign/levels/chapel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dFS" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGb" = ( -/obj/item/weapon/gun/energy/temperature, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGh" = ( -/obj/item/weapon/card/id/science/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGl" = ( -/obj/item/integrated_circuit/input/textpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGn" = ( -/obj/item/integrated_circuit/input/pressure_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGo" = ( -/obj/machinery/computer/guestpass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGx" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGE" = ( -/obj/item/weapon/disk/limb/dsi_tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGI" = ( -/obj/item/weapon/gun/energy/vepr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGJ" = ( -/obj/item/weapon/reagent_containers/blood/AMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGK" = ( -/obj/item/weapon/storage/bag/circuits/mini/manipulation/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGO" = ( -/obj/item/clothing/suit/xenos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGR" = ( -/obj/item/weapon/circuitboard/breakerbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGU" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dGY" = ( -/obj/item/clothing/shoes/boots/workboots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHe" = ( -/obj/structure/curtain/open/shower/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHf" = ( -/obj/item/clothing/head/ushanka/solgov/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHp" = ( -/obj/structure/fence/cut/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHr" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/bodaplus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHt" = ( -/obj/item/ammo_casing/a45/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHy" = ( -/obj/item/clothing/under/fluff/amara_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHz" = ( -/obj/item/weapon/computer_hardware/hard_drive/micro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dHA" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dHC" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIg" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIq" = ( -/obj/structure/prop/machine/tgmc_console5/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIu" = ( -/mob/living/simple_mob/slime/xenobio/green{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dIv" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIB" = ( -/obj/item/slimepotion/death, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIF" = ( -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIN" = ( -/obj/item/weapon/circuitboard/partslathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dIQ" = ( -/obj/item/clothing/shoes/boots/cowboy/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJi" = ( -/obj/structure/closet/l3closet/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJl" = ( -/obj/item/weapon/storage/toolbox/lunchbox/heart/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJq" = ( -/obj/item/device/flashlight/flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJu" = ( -/obj/item/rig_module/vision/thermal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJv" = ( -/obj/item/device/flashlight/pen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJx" = ( -/obj/item/trash/chips/snv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJV" = ( -/obj/item/weapon/gun/launcher/grenade/underslung, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dJY" = ( -/obj/item/clothing/under/solgov/utility/army/medical/banded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKa" = ( -/obj/item/weapon/reagent_containers/food/snacks/concha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKg" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKt" = ( -/obj/structure/closet/secure_closet/RD_wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKD" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKF" = ( -/obj/item/ammo_magazine/m545saw/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKG" = ( -/obj/item/integrated_circuit/arithmetic/absolute, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKM" = ( -/obj/mecha/working/ripley/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKO" = ( -/obj/item/weapon/stock_parts/subspace/analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKP" = ( -/obj/structure/largecrate/animal/chick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKQ" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/m41a, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKS" = ( -/obj/item/clothing/under/suit_jacket/checkered, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dKY" = ( -/obj/item/weapon/storage/backpack/toxins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLb" = ( -/obj/item/clothing/suit/stripper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLf" = ( -/obj/item/weapon/reagent_containers/food/snacks/beetsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLi" = ( -/obj/item/weapon/circuitboard/geiger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLn" = ( -/obj/item/clothing/head/tesh_hood/standard/blue_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLv" = ( -/obj/item/clothing/suit/storage/miljacket/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLL" = ( -/obj/machinery/vending/event/costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLV" = ( -/obj/item/clothing/under/fluff/redax_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dLX" = ( -/obj/machinery/vending/sovietvend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dMu" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dMK" = ( -/obj/item/weapon/reagent_containers/powder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dMO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dMQ" = ( -/obj/item/weapon/material/hatchet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dMX" = ( -/mob/living/simple_mob/slime/xenobio/dark_purple{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dNa" = ( -/obj/item/champagne, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNf" = ( -/obj/item/seeds/lemonseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNn" = ( -/obj/item/clothing/head/helmet/space/void/refurb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNu" = ( -/obj/item/clothing/under/solgov/utility/sifguard/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNy" = ( -/obj/item/clothing/head/beret/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNC" = ( -/obj/item/clothing/mask/surgical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNE" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNI" = ( -/obj/machinery/transhuman/resleever, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNR" = ( -/obj/item/clothing/suit/space/vox/civ/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dNZ" = ( -/obj/item/clothing/suit/storage/solgov/service/army/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOd" = ( -/obj/item/weapon/storage/box/casino/costume_nyangirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOj" = ( -/obj/item/weapon/card/id/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOk" = ( -/obj/item/weapon/weldingtool/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOp" = ( -/obj/item/weapon/storage/backpack/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOq" = ( -/obj/item/weapon/reagent_containers/glass/bottle/dexalinp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOA" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOH" = ( -/obj/item/clothing/head/beret/talon/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOM" = ( -/obj/item/weapon/coin/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOT" = ( -/obj/structure/AIcore/deactivated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dOY" = ( -/obj/item/clothing/under/skirt/colorable/plaid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPc" = ( -/obj/item/clothing/accessory/wcoat/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPe" = ( -/mob/living/simple_mob/animal/passive/dog/corgi, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dPm" = ( -/obj/structure/closet/crate/secure/veymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPt" = ( -/obj/item/clothing/suit/space/void/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPD" = ( -/obj/structure/closet/malf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPE" = ( -/obj/item/weapon/computer_hardware/battery_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPG" = ( -/obj/item/clothing/suit/space/void/responseteam/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPN" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPO" = ( -/obj/structure/loot_pile/mecha/gygax/dark/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPP" = ( -/mob/living/simple_mob/vore/solarmoth{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dPR" = ( -/obj/item/paiparts/emitter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPX" = ( -/obj/item/clothing/head/beret/solgov/customs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dPY" = ( -/obj/item/ammo_magazine/type901, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQe" = ( -/obj/structure/salvageable/computer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQh" = ( -/obj/structure/plushie/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQj" = ( -/obj/item/weapon/melee/baton/cattleprod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQr" = ( -/obj/item/clothing/head/buckethat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQu" = ( -/obj/machinery/feeder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQw" = ( -/obj/item/clothing/glasses/hud/health/eyepatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQB" = ( -/obj/item/weapon/rig/nikki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQG" = ( -/obj/item/clothing/head/centhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQL" = ( -/obj/item/weapon/storage/mre/menu12, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQP" = ( -/obj/item/modular_computer/console/preset/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQQ" = ( -/obj/machinery/door/airlock/angled_bay/hatch/common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQW" = ( -/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dQZ" = ( -/obj/item/ammo_magazine/m10mm/pistol/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRi" = ( -/obj/item/clothing/suit/storage/forensics/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRk" = ( -/obj/structure/sign/scenery/overlay/vine/bottom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRl" = ( -/obj/item/toy/plushie/tabby_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRm" = ( -/obj/item/weapon/cell/void/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRu" = ( -/obj/item/weapon/mine/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRy" = ( -/obj/structure/sign/levels/dorms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRG" = ( -/obj/item/weapon/implant/reagent_generator/roiz/yuki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRI" = ( -/obj/item/weapon/circuitboard/fusion_injector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRJ" = ( -/obj/item/clothing/suit/armor/material/makeshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRM" = ( -/obj/item/weapon/surgical/retractor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRQ" = ( -/obj/item/stack/material/plastitanium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRV" = ( -/obj/item/weapon/gun/projectile/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dRW" = ( -/obj/item/clothing/suit/justice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSr" = ( -/obj/machinery/media/jukebox/hacked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSt" = ( -/obj/item/weapon/material/twohanded/baseballbat/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSu" = ( -/obj/structure/closet/crate/secure/morpheus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSy" = ( -/obj/item/clothing/head/collectable/thunderdome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSB" = ( -/obj/structure/loot_pile/christmas_tree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSE" = ( -/obj/item/weapon/storage/backpack/messenger/sec/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dSM" = ( -/obj/item/robot_parts/robot_component/armour_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTn" = ( -/obj/item/weapon/gun/projectile/automatic/c20r, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTy" = ( -/obj/item/organ/internal/brain/alraune, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTA" = ( -/obj/item/weapon/aiModule/antimov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTC" = ( -/obj/item/clothing/head/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTF" = ( -/obj/machinery/door/airlock/maintenance/engi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dTM" = ( -/obj/item/clothing/ears/skrell/cloth_male/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUd" = ( -/obj/item/clothing/under/blazer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUg" = ( -/obj/item/clothing/under/pants/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUn" = ( -/mob/living/simple_mob/animal/synx/ai{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dUw" = ( -/mob/living/simple_mob/mechanical/combat_drone/melee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dUA" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUB" = ( -/mob/living/simple_mob/vore/aggressive/frog{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dUN" = ( -/obj/item/weapon/gun/energy/gun/martin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUT" = ( -/obj/item/organ/internal/augment/bioaugment/thermalshades, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUV" = ( -/obj/item/trash/croutons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dUX" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVb" = ( -/obj/item/clothing/suit/space/syndicate/black/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVf" = ( -/obj/item/ammo_magazine/m38/makarov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVj" = ( -/obj/item/weapon/chaoscake_layer/six, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVn" = ( -/mob/living/silicon/robot/drone/swarm, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dVo" = ( -/obj/item/weapon/gun/energy/locked/phasegun/rifle/unlocked/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVp" = ( -/obj/item/weapon/cartridge/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVu" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVy" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/engislug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dVz" = ( -/obj/item/prop/alien/junk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVF" = ( -/obj/item/weapon/computer_hardware/network_card/quantum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVH" = ( -/obj/item/organ/internal/liver/alraune, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dVZ" = ( -/obj/item/weapon/storage/vore_egg/honeycomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWe" = ( -/obj/item/clothing/accessory/pride/vore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWo" = ( -/obj/item/trash/candybowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWy" = ( -/obj/item/clothing/gloves/ring/buzzer/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWF" = ( -/obj/item/device/multitool/uplink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWJ" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/mosin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWK" = ( -/obj/item/weapon/storage/backpack/sport/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWO" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/t12, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dWS" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXc" = ( -/obj/item/ammo_magazine/m45/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXd" = ( -/obj/item/clothing/gloves/fluff/shel_gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXi" = ( -/obj/item/clothing/gloves/fingerless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXm" = ( -/obj/item/clothing/mask/chewable/candy/gum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXr" = ( -/mob/living/simple_mob/vore/alienanimals/succlet/big, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dXu" = ( -/obj/item/weapon/storage/belt/fannypack/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXw" = ( -/obj/item/weapon/storage/belt/utility/chief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXy" = ( -/obj/machinery/porta_turret/crescent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXA" = ( -/mob/living/simple_mob/slime/xenobio/oil{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dXB" = ( -/obj/item/clothing/glasses/hud/health/mech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXD" = ( -/obj/structure/sign/department/operational, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXE" = ( -/obj/item/trash/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXM" = ( -/obj/item/seeds/poisonedappleseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXQ" = ( -/obj/structure/prop/machine/nt_obelisk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXR" = ( -/obj/item/mecha_parts/part/phazon_right_leg, -/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXS" = ( -/obj/item/clothing/head/helmet/space/void/mining/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXX" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dXZ" = ( -/obj/item/integrated_circuit/transfer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYc" = ( -/mob/living/simple_mob/humanoid/merc/ranged/sniper{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dYm" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYp" = ( -/obj/item/integrated_circuit/arithmetic/modulo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYx" = ( -/obj/item/ammo_magazine/akm/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYI" = ( -/obj/item/weapon/pen/blade/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYR" = ( -/obj/item/clothing/under/gsa_work, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYT" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cherryjelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYU" = ( -/obj/item/ammo_magazine/s38/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dYV" = ( -/obj/item/weapon/inflatable_dispenser/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZl" = ( -/obj/item/clothing/accessory/armor/legguards/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZm" = ( -/obj/item/weapon/telecube/precursor/mated/zone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZr" = ( -/obj/item/organ/internal/eyes/alraune, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZt" = ( -/obj/item/weapon/sample/print, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZE" = ( -/obj/item/clothing/accessory/tronket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZI" = ( -/obj/structure/loot_pile/mecha/mouse_tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZS" = ( -/mob/living/simple_mob/animal/passive/hare{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"dZT" = ( -/obj/item/weapon/gun/energy/particle/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"dZZ" = ( -/obj/item/clothing/suit/armor/vest/fluff/skinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eac" = ( -/obj/structure/closet/l3closet/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eae" = ( -/obj/item/clothing/accessory/sweater/uglyxmas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaf" = ( -/obj/machinery/gateway/brass{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eai" = ( -/obj/machinery/door/firedoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eal" = ( -/obj/structure/prop/dominator/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eam" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/m41ab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eap" = ( -/obj/item/clothing/under/solgov/utility/sifguard/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eas" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/synaptizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eat" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eau" = ( -/obj/item/slime_extract/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eax" = ( -/obj/structure/sign/scenery/overlay/vine/top, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaB" = ( -/obj/item/clothing/accessory/storage/white_vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaD" = ( -/obj/item/clothing/under/rank/cargotech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaG" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackpurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaT" = ( -/obj/item/clothing/under/solgov/utility/sifguard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaV" = ( -/obj/item/weapon/storage/box/pocky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eaW" = ( -/mob/living/silicon/robot/platform/cargo, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eaX" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebh" = ( -/obj/item/weapon/storage/box/syndie_kit/viral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebl" = ( -/obj/structure/table/rack/shelf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebs" = ( -/mob/living/simple_mob/horror/Smiley{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ebu" = ( -/turf/simulated/floor/atoll, -/area/survivalpod) -"ebx" = ( -/obj/item/weapon/circuitboard/photocopier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebF" = ( -/obj/structure/lightpost/atoll, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebL" = ( -/obj/item/weapon/aiModule/robocop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebO" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebQ" = ( -/obj/item/weapon/pickaxe/four_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebU" = ( -/obj/structure/sign/directions/exit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ebV" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ech" = ( -/obj/item/flag/vir/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecm" = ( -/obj/structure/loot_pile/mecha/odysseus/murdysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eco" = ( -/obj/item/weapon/gift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecq" = ( -/obj/item/weapon/reagent_containers/food/snacks/spagetti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ect" = ( -/obj/item/clothing/head/beret/medical/cmo/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecy" = ( -/obj/item/clothing/gloves/sterile/thieves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecC" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecM" = ( -/obj/item/weapon/key/quadbike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecP" = ( -/obj/item/ammo_magazine/m762svd/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecQ" = ( -/obj/item/weapon/storage/box/casino/costume_cutewitch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecY" = ( -/obj/structure/prop/alien/dispenser/twoway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ecZ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edb" = ( -/obj/structure/bed/chair/sofa/corner/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edd" = ( -/obj/item/seeds/ambrosiainfernusseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edf" = ( -/obj/item/clothing/suit/space/void/expedition_medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edg" = ( -/obj/structure/sign/department/armory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edu" = ( -/obj/item/weapon/implantcase/freedom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edw" = ( -/obj/item/ammo_magazine/ammo_box/b545/large/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edy" = ( -/obj/item/clothing/gloves/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edD" = ( -/obj/item/clothing/under/dress/yellowswoop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edE" = ( -/obj/item/clothing/head/soft/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edI" = ( -/obj/item/ammo_magazine/m38/giskard/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edO" = ( -/obj/item/trash/jupiter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"edT" = ( -/obj/item/clothing/head/helmet/space/void/responseteam/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeb" = ( -/obj/item/clothing/head/beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eed" = ( -/obj/item/weapon/spell/phase_shift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eek" = ( -/obj/structure/prop/dominator/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"een" = ( -/obj/item/integrated_circuit/converter/ref2text, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eep" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eev" = ( -/obj/item/device/electronic_assembly/tiny/default, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeA" = ( -/obj/item/clothing/shoes/knight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeF" = ( -/obj/item/clothing/suit/storage/fluff/eravik_vessi_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeG" = ( -/obj/item/clothing/under/color/fjumpsuit/lightbrownf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeI" = ( -/obj/item/weapon/bedsheet/bluedouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeW" = ( -/obj/item/weapon/dnainjector/anticough, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeX" = ( -/obj/item/clothing/under/solgov/utility/army/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eeZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/lobster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efe" = ( -/obj/item/clothing/under/pants/baggy/track, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eff" = ( -/obj/structure/prop/rock/small/wateralt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efi" = ( -/obj/item/seeds/hardlightseed/typesx, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efH" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efI" = ( -/obj/item/weapon/storage/bag/circuits/mini/time/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efP" = ( -/obj/item/integrated_circuit/converter/exploders, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"efR" = ( -/obj/item/weapon/storage/backpack/satchel/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egg" = ( -/obj/item/weapon/aiModule/oneHuman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egn" = ( -/obj/item/weapon/dnainjector/glassesmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egq" = ( -/mob/living/simple_mob/animal/passive/cat/space, -/turf/simulated/floor/atoll, -/area/survivalpod) -"egu" = ( -/obj/item/clothing/head/helmet/tac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egG" = ( -/obj/item/trash/material/circuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egV" = ( -/obj/item/clothing/head/surgery/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"egY" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/redarmy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehf" = ( -/obj/item/clothing/shoes/boots/winter/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehh" = ( -/obj/item/weapon/storage/bag/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehi" = ( -/obj/item/weapon/material/kitchen/utensil/spork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eho" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eht" = ( -/obj/item/weapon/reagent_containers/syringe/drugs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehx" = ( -/obj/item/clothing/suit/varsity/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehz" = ( -/obj/item/weapon/deck/cah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehE" = ( -/obj/item/clothing/head/centhat/customs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehG" = ( -/obj/machinery/disperser/back{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehP" = ( -/obj/item/weapon/cell/standin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ehR" = ( -/obj/item/weapon/reagent_containers/food/snacks/mint/admints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eii" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/limecake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eik" = ( -/obj/item/clothing/head/helmet/space/void/hev/violet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eil" = ( -/obj/item/weapon/book/custom_library/nonfiction/freesirisailightbulbs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ein" = ( -/obj/item/clothing/under/dress/westernbustle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eip" = ( -/obj/structure/sign/levels/science/xenoflora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eiF" = ( -/obj/item/weapon/storage/box/glasses/meta, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eiL" = ( -/obj/item/toy/tennis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eja" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejf" = ( -/obj/item/weapon/reagent_containers/food/snacks/gigapuddi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejg" = ( -/obj/item/clothing/head/hood/winter/cosmic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejp" = ( -/obj/structure/plushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eju" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/hot_coco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejA" = ( -/obj/item/weapon/book/manual/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejF" = ( -/obj/item/weapon/cat_box/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejI" = ( -/obj/item/weapon/gun/launcher/syringe/rapid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejJ" = ( -/obj/item/weapon/material/butterfly/switchblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejK" = ( -/obj/item/organ/internal/voicebox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejO" = ( -/obj/item/clothing/under/det/grey/waistcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejP" = ( -/obj/machinery/firealarm/alarms_hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ejY" = ( -/obj/item/weapon/storage/box/fluff/octavious, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eka" = ( -/obj/item/clothing/under/away/daedalus/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ekf" = ( -/obj/item/weapon/storage/firstaid/bonemed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eki" = ( -/obj/item/clothing/under/shorts/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ekj" = ( -/obj/item/clothing/suit/storage/toggle/light_jacket/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ekm" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ekr" = ( -/obj/item/device/electronic_assembly/drone/medbot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ekO" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/capslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ekV" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elf" = ( -/obj/item/device/assembly/infra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elp" = ( -/obj/item/clothing/under/waiter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elv" = ( -/obj/machinery/power/rtg/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elJ" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elU" = ( -/obj/item/toy/figure/assistant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elV" = ( -/obj/item/clothing/under/rank/nurse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"elX" = ( -/obj/item/clothing/accessory/material/makeshift/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emc" = ( -/obj/item/weapon/reagent_containers/food/snacks/scorpion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emi" = ( -/obj/item/clothing/under/tropical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emk" = ( -/obj/item/ammo_magazine/m9mmp90/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emo" = ( -/obj/item/weapon/reagent_containers/hypospray/vial/kenzie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emr" = ( -/obj/item/weapon/bedsheet/captaindouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emu" = ( -/obj/item/clothing/shoes/boots/combat/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emw" = ( -/obj/item/clothing/head/dress/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emG" = ( -/obj/item/weapon/bedsheet/reddouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emH" = ( -/obj/item/stack/xenochitin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emL" = ( -/obj/item/integrated_circuit/built_in/action_button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emO" = ( -/obj/item/weapon/rig/merc/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emS" = ( -/obj/item/ammo_magazine/ammo_box/b44/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"emZ" = ( -/obj/structure/prop/machine/von_krabin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ena" = ( -/obj/item/ammo_magazine/mfoam_dart/smg/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"end" = ( -/mob/living/simple_mob/mobs_monsters/clowns/sentinel{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"enp" = ( -/obj/item/weapon/storage/box/fluff/tasald, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"env" = ( -/obj/item/clothing/head/pin/bow/big/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eny" = ( -/obj/item/weapon/circuitboard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enC" = ( -/obj/item/weapon/stock_parts/manipulator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enD" = ( -/obj/item/weapon/storage/excavation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enM" = ( -/obj/item/trash/plate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enT" = ( -/obj/structure/closet/walllocker_double/kitchen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enX" = ( -/obj/item/clothing/under/shorts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"enY" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eob" = ( -/obj/item/clothing/under/rank/research_director, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoh" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ammonia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoi" = ( -/obj/item/weapon/airlock_electronics/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoj" = ( -/obj/item/weapon/storage/vore_egg/sergal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eot" = ( -/obj/item/weapon/storage/belt/utility/atmostech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eow" = ( -/obj/item/clothing/accessory/badge/press, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoz" = ( -/obj/item/clothing/accessory/armband, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoC" = ( -/mob/living/simple_mob/vore/fennec/huge{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eoR" = ( -/obj/structure/sign/directions/cryo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoW" = ( -/obj/item/weapon/storage/bag/circuits/basic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eoX" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/vp70m, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epf" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "31" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epo" = ( -/obj/structure/sign/department/commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epx" = ( -/obj/structure/closet/secure_closet/medical_wall/anesthetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epN" = ( -/obj/item/toy/mecha/marauder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epU" = ( -/obj/item/clothing/mask/gas/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"epV" = ( -/obj/item/weapon/storage/bag/circuits/mini/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqe" = ( -/obj/item/clothing/mask/emotions, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqi" = ( -/obj/item/weapon/rig/industrial/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqk" = ( -/obj/item/clothing/under/shorts/jeans/mustang/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqn" = ( -/obj/item/device/radio_jammer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqo" = ( -/obj/item/device/encryptionkey/pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"equ" = ( -/obj/item/clothing/gloves/fluff/kilano/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqx" = ( -/obj/item/clothing/suit/bio_suit/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqz" = ( -/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqC" = ( -/obj/machinery/door/firedoor/multi_tile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqD" = ( -/obj/item/weapon/melee/classic_baton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqH" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "1" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqI" = ( -/obj/item/weapon/deck/tarot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqQ" = ( -/obj/item/clothing/under/suit_jacket/extravagant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqR" = ( -/obj/item/weapon/storage/belt/fannypack/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eqT" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"era" = ( -/obj/item/weapon/computer_hardware/hard_drive/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ere" = ( -/obj/structure/largecrate/animal/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erg" = ( -/obj/item/weapon/gun/energy/sickshot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eri" = ( -/obj/item/clothing/head/helmet/space/void/refurb/research/alt/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erk" = ( -/obj/item/clothing/under/skirt/fluff/serkii, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ern" = ( -/obj/structure/particle_accelerator/particle_emitter/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"err" = ( -/obj/item/clothing/suit/fluff/freddy/chica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ers" = ( -/obj/item/weapon/storage/belt/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erz" = ( -/obj/machinery/atmospherics/pipe/zpipe/up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erD" = ( -/obj/item/clothing/suit/taur/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erE" = ( -/obj/structure/sign/department/dock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erF" = ( -/obj/machinery/door/airlock/angled_bay/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"erL" = ( -/obj/structure/closet/secure_closet/quartermaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esd" = ( -/obj/structure/sign/warning/mail_delivery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ese" = ( -/obj/item/usedcryobag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esf" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/thirteenloko, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esl" = ( -/obj/structure/salvageable/data_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esn" = ( -/obj/item/clothing/accessory/armor/armorplate/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eso" = ( -/obj/item/weapon/reagent_containers/blood/OPlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esp" = ( -/obj/item/seeds/cornseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esr" = ( -/obj/structure/particle_accelerator/fuel_chamber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esz" = ( -/obj/item/seeds/surik, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esE" = ( -/obj/item/clothing/under/teshari/undercoat/fluff/strix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esI" = ( -/obj/item/weapon/storage/box/fancy/chewables, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esM" = ( -/obj/item/clothing/head/helmet/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esQ" = ( -/obj/machinery/holosign/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"esS" = ( -/obj/item/clothing/suit/bluetag/sub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etd" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etl" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etm" = ( -/obj/item/ammo_magazine/m10mm/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etn" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etr" = ( -/obj/item/stack/material/tritium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ets" = ( -/obj/item/integrated_circuit/transfer/demultiplexer/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ett" = ( -/obj/machinery/telecomms/allinone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etv" = ( -/obj/item/clothing/head/helmet/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ety" = ( -/obj/item/toy/plushie/basset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etA" = ( -/obj/structure/barricade/cutout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etJ" = ( -/obj/item/clothing/suit/storage/toggle/hoodiebuttoned/example, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etO" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"etS" = ( -/obj/item/weapon/storage/box/donut/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euc" = ( -/obj/item/weapon/gun/projectile/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eud" = ( -/obj/item/clothing/head/ushanka/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eug" = ( -/obj/item/toy/plushie/therapy/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euh" = ( -/obj/item/device/modkit_conversion/fluff/nika_sec_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euj" = ( -/obj/item/weapon/flame/lighter/zippo/capitalist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euo" = ( -/obj/item/weapon/cartridge/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euq" = ( -/obj/item/clothing/accessory/poncho/cloak/fluff/aroozee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eus" = ( -/obj/item/ammo_magazine/m9mmt/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euz" = ( -/obj/item/clothing/suit/space/void/refurb/pilot/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euI" = ( -/obj/structure/sign/directions/science/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euS" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euU" = ( -/obj/item/weapon/reagent_containers/food/snacks/cookie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"euW" = ( -/obj/item/clothing/under/dress/black_corset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eve" = ( -/obj/item/weapon/cane/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evf" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/leporazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evg" = ( -/obj/item/device/camerabug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evm" = ( -/obj/item/clothing/accessory/storage/black_drop_pouches, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evp" = ( -/obj/item/clothing/suit/storage/toggle/bomber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evu" = ( -/obj/item/clothing/under/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evA" = ( -/obj/machinery/power/rtg/abductor/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evI" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/orange_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evJ" = ( -/obj/item/weapon/material/kitchen/utensil/foon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evY" = ( -/obj/item/projectile/beam/weaklaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"evZ" = ( -/obj/item/weapon/spacecasinocash/c100, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewc" = ( -/obj/item/integrated_circuit/trig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewf" = ( -/obj/structure/bed/chair/sofa/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewh" = ( -/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ewm" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_midgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewo" = ( -/obj/item/weapon/commcard/signal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewq" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewB" = ( -/obj/item/weapon/storage/backpack/satchel/fluff/swat43bag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewC" = ( -/obj/item/weapon/glass_extra/stick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewD" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewH" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewI" = ( -/obj/item/ammo_magazine/m9mm/vp70/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewJ" = ( -/obj/item/weapon/vampiric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewN" = ( -/obj/machinery/particle_accelerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewQ" = ( -/obj/machinery/smartfridge/sheets/persistent_lossy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewS" = ( -/obj/structure/loot_pile/mecha/odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ewW" = ( -/obj/item/clothing/suit/storage/explorer/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exf" = ( -/obj/item/clothing/head/helmet/space/void/zaddat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exm" = ( -/obj/item/clothing/glasses/regular/scanners, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exv" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exy" = ( -/obj/item/weapon/circuitboard/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exA" = ( -/obj/item/weapon/material/barbedwire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exC" = ( -/obj/machinery/injector_maker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exJ" = ( -/obj/item/weapon/storage/backpack/ert/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exS" = ( -/obj/item/weapon/circuitboard/area_atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"exU" = ( -/obj/item/clothing/suit/space/syndicate/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyk" = ( -/obj/item/shield_projector/rectangle/mecha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyo" = ( -/obj/item/organ/internal/lungs/replicant/mending, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyB" = ( -/obj/item/clothing/suit/stripper/stripper_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyH" = ( -/obj/item/mecha_parts/part/durand_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyV" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eyY" = ( -/obj/item/ammo_magazine/clip/mosin/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezn" = ( -/obj/item/weapon/material/twohanded/sledgehammer/mjollnir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezr" = ( -/obj/structure/prop/rock/small/water, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezs" = ( -/obj/item/weapon/mop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezw" = ( -/obj/item/instrument/piano_synth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezE" = ( -/obj/machinery/door/airlock/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezG" = ( -/obj/item/stack/tile/floor/eris/derelict4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezS" = ( -/obj/item/ammo_magazine/s45/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezU" = ( -/obj/item/weapon/reagent_containers/food/snacks/fish_taco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ezW" = ( -/obj/item/mecha_parts/part/gygax_armour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAa" = ( -/obj/item/clothing/mask/gas/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAo" = ( -/mob/living/simple_mob/faithless/strong{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eAp" = ( -/obj/structure/closet/thunderdome/tdgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAu" = ( -/obj/machinery/cryopod/robot/door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAx" = ( -/obj/item/clothing/head/helmet/space/vox/civ/engineer/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAy" = ( -/obj/item/clothing/under/rank/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAA" = ( -/obj/item/weapon/card/mining_point_card, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAG" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAL" = ( -/obj/item/slime_crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAN" = ( -/obj/structure/sign/kiddieplaque/poi1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAP" = ( -/obj/item/weapon/storage/mre/menu13, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAQ" = ( -/obj/item/clothing/head/helmet/space/void/expedition_medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAV" = ( -/obj/item/clothing/ears/skrell/band/redjewels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAY" = ( -/obj/item/device/radio/electropack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eAZ" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBc" = ( -/obj/item/weapon/gun/energy/mouseray/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBd" = ( -/obj/item/seeds/plumpmycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBg" = ( -/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBj" = ( -/obj/item/weapon/storage/box/syndie_kit/demolitions, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBn" = ( -/obj/item/weapon/reagent_containers/food/snacks/slicable/buttspie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBq" = ( -/obj/machinery/account_database, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBs" = ( -/obj/item/weapon/circuitboard/grill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBu" = ( -/obj/item/weapon/rig/pmc/engineer/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBw" = ( -/obj/item/weapon/fuel_assembly/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBC" = ( -/obj/item/clothing/suit/space/void/merc/axis/axisrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBE" = ( -/obj/machinery/magnetic_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBJ" = ( -/obj/structure/cable/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBL" = ( -/obj/item/seeds/lettuce, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eBY" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCb" = ( -/obj/machinery/papershredder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCd" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/APlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCg" = ( -/obj/item/stack/hairlesshide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCk" = ( -/obj/item/projectile/beam/stun/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCm" = ( -/obj/item/weapon/card/id/centcom/station/fluff/aronai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCz" = ( -/obj/item/device/defib_kit/compact/combat/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCF" = ( -/mob/living/simple_mob/animal/giant_spider/electric/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eCI" = ( -/obj/item/weapon/card/id/gateway/snowfield/class4D, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCJ" = ( -/obj/structure/sign/painting/library_private, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCL" = ( -/obj/item/stack/medical/ointment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCM" = ( -/obj/item/clothing/under/teshari/smock/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCN" = ( -/obj/item/clothing/head/richard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCP" = ( -/obj/item/weapon/grenade/chem_grenade/antiweed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eCT" = ( -/mob/living/simple_mob/construct/harvester{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eDa" = ( -/obj/item/weapon/material/shard/plastitaniumglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDc" = ( -/obj/machinery/power/shield_generator/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDq" = ( -/mob/living/simple_mob/animal/giant_spider/thermic/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eDv" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/strela, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDy" = ( -/obj/item/ammo_casing/chemdart/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDA" = ( -/obj/item/weapon/fuel_assembly/blitz/unshielded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDH" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eDK" = ( -/obj/structure/closet/crate/secure/saare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDO" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDP" = ( -/obj/item/clothing/gloves/evening, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDR" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDW" = ( -/obj/item/weapon/fossil/skull/horned, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eDX" = ( -/obj/structure/prop/memorial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEb" = ( -/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEy" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEI" = ( -/obj/item/clothing/head/beret/solgov/homeguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEN" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEO" = ( -/mob/living/simple_mob/animal/giant_spider/nurse{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eEW" = ( -/obj/item/weapon/stock_parts/spring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eEZ" = ( -/obj/item/clothing/under/skirt/colorable/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFd" = ( -/obj/item/clothing/mask/breath/anesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFg" = ( -/obj/item/clothing/head/hood/winter/narsie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFi" = ( -/obj/item/frame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFn" = ( -/obj/item/device/fbp_backup_cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFu" = ( -/obj/item/clothing/accessory/storage/pouches/large/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFC" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/goat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFH" = ( -/obj/item/mecha_parts/part/durand_armour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFK" = ( -/obj/item/toy/nanotrasenballoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFP" = ( -/obj/item/clothing/shoes/flats/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFW" = ( -/obj/item/clothing/under/shorts/jeans/black/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFX" = ( -/obj/item/trash/chipbasket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eFY" = ( -/obj/item/clothing/under/undersuit/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGa" = ( -/obj/structure/prop/blackbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGg" = ( -/obj/item/weapon/storage/backpack/satchel/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGh" = ( -/obj/structure/largecrate/mule, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGw" = ( -/obj/item/device/encryptionkey/headset_cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGA" = ( -/obj/item/clothing/under/rank/captain/fluff/harmuniform/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGO" = ( -/obj/item/weapon/gun/projectile/revolvingrifle/vintage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGR" = ( -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eGX" = ( -/obj/item/weapon/bedsheet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHa" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHb" = ( -/obj/item/weapon/storage/backpack/dufflebag/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHe" = ( -/obj/item/clothing/head/fluff/zara_bandana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHg" = ( -/obj/item/seeds/ambrosiagaiaseed, -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHh" = ( -/obj/item/weapon/gun/energy/gun/fluff/dominator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHl" = ( -/obj/item/seeds/sugarcaneseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHo" = ( -/obj/structure/event/santa_sack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHt" = ( -/obj/item/weapon/storage/box/fluff/swimsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHu" = ( -/obj/item/seeds/eggplantseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHv" = ( -/mob/living/simple_mob/animal/giant_spider{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eHw" = ( -/obj/item/clothing/accessory/scarf/altevian/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHN" = ( -/obj/item/clothing/suit/armor/shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHU" = ( -/obj/item/clothing/head/surgery/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eHV" = ( -/obj/item/clothing/under/swimsuit/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIb" = ( -/obj/machinery/replicator/clothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIc" = ( -/obj/item/clothing/under/shorts/jeans/grey/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIl" = ( -/obj/item/weapon/spacecasinocash/c1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIm" = ( -/obj/structure/sign/directions/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIo" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIp" = ( -/obj/item/device/nif/glitch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIq" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/Ian, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eIr" = ( -/obj/structure/closet/secure_closet/guncabinet/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIz" = ( -/obj/item/rig_module/mounted/phase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIB" = ( -/obj/item/clothing/accessory/flops, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIR" = ( -/obj/item/weapon/circuitboard/telecomms/server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIX" = ( -/obj/item/seeds/plumpmycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eIY" = ( -/obj/item/rig_module/sprinter/pursuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJb" = ( -/obj/item/clothing/under/explorer/utility/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJc" = ( -/obj/structure/door_assembly/door_assembly_mhatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJd" = ( -/obj/item/clothing/suit/space/void/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJq" = ( -/obj/item/clothing/head/helmet/space/vox/civ/botanist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJD" = ( -/mob/living/simple_mob/shadekin/green{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eJM" = ( -/obj/structure/closet/hydrant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJR" = ( -/obj/item/trash/pluto, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eJT" = ( -/obj/item/clothing/mask/smokable/ecig/util, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKe" = ( -/mob/living/simple_mob/vore/pitcher_plant{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eKg" = ( -/obj/machinery/r_n_d/server/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKh" = ( -/obj/item/integrated_circuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKl" = ( -/obj/mecha/working/hoverpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKm" = ( -/obj/structure/sign/flag/icarus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKs" = ( -/obj/structure/sign/directions/gym, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKI" = ( -/obj/structure/closet/crate/engineering/electrical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eKR" = ( -/obj/item/weapon/oar/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLa" = ( -/obj/item/stack/tile/floor/milspec/sterile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLb" = ( -/obj/item/clothing/glasses/hud/health/aviator/prescription/fluff/noel_glasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLc" = ( -/obj/item/clothing/under/color/fjumpsuit/greenf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLh" = ( -/obj/item/clothing/accessory/armor/armorplate/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLu" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/bread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLz" = ( -/mob/living/simple_mob/humanoid/cultist/lizard{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eLB" = ( -/mob/living/simple_mob/vore/woof/hostile/melee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eLF" = ( -/obj/structure/closet/wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLG" = ( -/obj/item/device/modkit_conversion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLN" = ( -/obj/structure/closet/crate/thinktronic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLO" = ( -/obj/item/device/bluespaceradio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eLR" = ( -/obj/item/modular_computer/console/preset/civilian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMd" = ( -/obj/item/toy/figure/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMn" = ( -/obj/item/weapon/spellbook/oneuse/forcewall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMq" = ( -/obj/item/weapon/storage/box/camerabug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMs" = ( -/obj/item/rig_module/vision/multi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMv" = ( -/obj/item/clothing/accessory/solgov/department/security/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMw" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eME" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "11" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eMI" = ( -/obj/item/stack/tile/floor/eris/steel/bar_flat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNl" = ( -/obj/item/weapon/blobcore_chunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNu" = ( -/obj/item/clothing/under/away/patrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNv" = ( -/obj/item/clothing/suit/space/syndicate/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNz" = ( -/obj/item/clothing/under/swimsuit/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNI" = ( -/obj/item/weapon/soap/diamond_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNS" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/bepis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eNW" = ( -/obj/structure/sign/warning/internals_required, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOa" = ( -/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked/mounted/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOc" = ( -/obj/item/weapon/reagent_containers/food/snacks/bagelcheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOf" = ( -/obj/item/rig_module/fabricator/energy_net, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOl" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/limecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOr" = ( -/obj/item/clothing/under/rank/dispatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOt" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eOu" = ( -/obj/item/clothing/under/color/blackjumpskirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOx" = ( -/obj/item/stack/material/cloth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOC" = ( -/obj/item/weapon/circuitboard/borgupload, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOD" = ( -/obj/item/clothing/under/solgov/service/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOJ" = ( -/obj/item/clothing/under/solgov/utility/army/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOO" = ( -/obj/item/weapon/gun/energy/mouseray/otie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOR" = ( -/obj/item/weapon/reagent_containers/food/snacks/spreads/butter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eOW" = ( -/mob/living/simple_mob/humanoid/merc/melee/sword{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eOX" = ( -/obj/item/ammo_magazine/a57/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ePc" = ( -/obj/item/weapon/storage/box/fluff/saur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ePd" = ( -/obj/structure/closet/crate/mimic/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ePk" = ( -/obj/item/weapon/rcd/electric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ePF" = ( -/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ePJ" = ( -/obj/item/clothing/under/teshari/undercoat/standard/white_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQd" = ( -/obj/item/weapon/cartridge/frame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQm" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/keltec/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQq" = ( -/obj/structure/closet/crate/mimic/airlock/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQB" = ( -/obj/item/weapon/gun/projectile/automatic/mini_uzi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQD" = ( -/obj/item/clothing/head/helmet/space/fluff/kate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQO" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/fluff/jiao_labcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQQ" = ( -/obj/item/clothing/suit/storage/snowsuit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQR" = ( -/obj/item/clothing/accessory/scarf/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eQW" = ( -/obj/item/weapon/implant/reagent_generator/egg/slowlowcap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRc" = ( -/obj/item/stack/tile/floor/milspec/raised, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRj" = ( -/obj/machinery/vending/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRn" = ( -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRu" = ( -/obj/structure/snowman/borg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRz" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRD" = ( -/obj/item/weapon/gun/projectile/automatic/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/moonshine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRH" = ( -/mob/living/simple_mob/shadekin/yellow{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eRJ" = ( -/obj/machinery/autolathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRX" = ( -/obj/item/seeds/lustflower, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eRY" = ( -/obj/structure/prop/prism/externalcont, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSj" = ( -/obj/item/toy/figure/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSp" = ( -/obj/item/weapon/reagent_containers/food/snacks/soylentgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSt" = ( -/obj/machinery/mineral/equipment_vendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSv" = ( -/mob/living/simple_mob/animal/passive/fish/salmon, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"eSx" = ( -/obj/item/weapon/storage/box/teargas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSE" = ( -/obj/item/weapon/circuitboard/security/telescreen/entertainment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSH" = ( -/obj/item/clothing/under/solgov/service/fleet/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSI" = ( -/obj/item/clothing/head/helmet/space/vox/civ/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSO" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eSP" = ( -/obj/item/integrated_circuit/input/adv_med_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTd" = ( -/obj/item/trash/candy/proteinbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTm" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTu" = ( -/obj/item/clothing/suit/space/void/security/riot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTv" = ( -/obj/item/ammo_magazine/mfoam_dart/pistol/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTz" = ( -/obj/structure/closet/gmcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTB" = ( -/mob/living/simple_mob/otie/cotie/chubby{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eTE" = ( -/mob/living/simple_mob/metroid/juvenile/queen{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eTF" = ( -/obj/item/weapon/module/card_reader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTG" = ( -/obj/structure/sign/scenery/overlay/rust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTI" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/taleoftherainbowcat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTK" = ( -/obj/item/clothing/head/det, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTL" = ( -/obj/item/seeds/killertomatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTV" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eTX" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/ray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eTZ" = ( -/obj/item/flag/almach_p/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUd" = ( -/obj/structure/sign/department/biblio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUr" = ( -/obj/item/weapon/melee/energy/sword/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUu" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUx" = ( -/obj/item/clothing/accessory/vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUy" = ( -/obj/item/ammo_magazine/tp23/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUH" = ( -/obj/item/weapon/gun/energy/ionrifle/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eUU" = ( -/obj/item/weapon/fuel_assembly/blitz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVc" = ( -/obj/machinery/appliance/mixer/candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVe" = ( -/obj/item/toy/bosunwhistle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVf" = ( -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVk" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVr" = ( -/obj/item/weapon/melee/umbrella, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVx" = ( -/obj/item/clothing/suit/security/navyofficer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVQ" = ( -/obj/item/weapon/rig/hazmat/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVS" = ( -/obj/item/weapon/reagent_containers/food/snacks/worm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eVX" = ( -/obj/item/weapon/reagent_containers/food/snacks/truffle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWa" = ( -/obj/item/clothing/accessory/armor/armguards/navy/fluff/saur_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWc" = ( -/obj/item/weapon/gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWd" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWe" = ( -/obj/structure/sign/level/one/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWf" = ( -/obj/item/weapon/storage/backpack/korean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWi" = ( -/obj/structure/bed/chair/bay/chair/padded/red/bignest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWJ" = ( -/obj/item/clothing/head/helmet/space/vox/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWK" = ( -/obj/structure/sign/levels/gym, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eWN" = ( -/obj/structure/largecrate/vehicle/quadbike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXg" = ( -/obj/machinery/cryopod/robot/door/gateway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXi" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/capt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXl" = ( -/obj/machinery/magnetic_controller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXn" = ( -/mob/living/simple_mob/mobs_monsters/clowns/clowns{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eXp" = ( -/obj/item/clothing/head/soft/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXu" = ( -/obj/structure/bed/chair/comfy/rounded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXK" = ( -/obj/item/clothing/head/caphat/formal/fedcover/police, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXS" = ( -/obj/item/clothing/head/service/sifguard/senior_command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eXU" = ( -/obj/item/clothing/under/skirt/colorable/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYa" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYd" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/burger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYe" = ( -/obj/structure/closet/syndicate/resources, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYk" = ( -/obj/structure/coatrack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYm" = ( -/obj/item/toy/katana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYn" = ( -/obj/item/device/personal_shield_generator/belt/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYs" = ( -/obj/machinery/appliance/cooker/grill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYt" = ( -/mob/living/simple_mob/animal/passive/fish/perch, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"eYy" = ( -/obj/structure/ship_munition/disperser_charge/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYD" = ( -/obj/item/device/electronic_assembly/large/default, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYH" = ( -/obj/item/clothing/suit/storage/solgov/service/army/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYN" = ( -/obj/item/clothing/ears/skrell/chain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eYR" = ( -/mob/living/simple_mob/mobs_monsters/clowns/wide{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eZe" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"eZi" = ( -/obj/item/clothing/under/rank/head_of_security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZk" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZl" = ( -/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZv" = ( -/obj/structure/bed/holobed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZx" = ( -/obj/item/weapon/gun/projectile/shotgun/pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZI" = ( -/obj/machinery/vending/wardrobe/robodrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZM" = ( -/obj/item/clothing/under/rank/talon/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZO" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZR" = ( -/obj/item/weapon/gun/projectile/SVD, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZT" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/peanutbutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZU" = ( -/obj/item/weapon/reagent_containers/glass/bottle/corophizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"eZW" = ( -/obj/item/clothing/gloves/ring/wedding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fae" = ( -/obj/item/weapon/weldingtool/mini/two, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"faf" = ( -/obj/item/weapon/gun/energy/gun/protector/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fai" = ( -/obj/machinery/atmospherics/pipe/cap/visible/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fam" = ( -/obj/machinery/cryopod/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"faq" = ( -/obj/item/weapon/storage/backpack/genetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"far" = ( -/obj/item/weapon/spacecash/c200, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"faw" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"faQ" = ( -/obj/item/device/ticket_printer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fbm" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fbn" = ( -/obj/item/robot_parts/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fbt" = ( -/obj/item/weapon/banner/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fbC" = ( -/mob/living/simple_mob/animal/passive/fennec{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fbF" = ( -/obj/machinery/computer/roguezones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fbT" = ( -/obj/structure/showcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcb" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fch" = ( -/obj/item/clothing/suit/space/void/hev/violet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcw" = ( -/obj/item/weapon/hand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcJ" = ( -/obj/item/weapon/toy/snowglobe/stellardelight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcS" = ( -/obj/item/surplus_voucher/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcT" = ( -/obj/structure/sign/nosmoking_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcU" = ( -/obj/item/weapon/gun/energy/vepr/plasma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcY" = ( -/obj/item/clothing/accessory/solgov/department/service/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fcZ" = ( -/obj/item/weapon/storage/backpack/dufflebag/fluff/saur_dufflebag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fde" = ( -/obj/item/trash/hakarl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdj" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdl" = ( -/obj/item/weapon/gun/projectile/automatic/z8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdu" = ( -/obj/item/clothing/under/bluepyjamas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdC" = ( -/obj/item/weapon/storage/pill_bottle/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdF" = ( -/obj/item/weapon/circuitboard/supplycomp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdW" = ( -/obj/item/weapon/storage/vore_egg/pinkspots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fdZ" = ( -/mob/living/simple_mob/xeno_ch/queen/maid, -/turf/simulated/floor/atoll, -/area/survivalpod) -"feg" = ( -/obj/item/mecha_parts/mecha_equipment/storage/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fej" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fek" = ( -/mob/living/simple_mob/animal/sif/sakimm/intelligent, -/turf/simulated/floor/atoll, -/area/survivalpod) -"feq" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fes" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fet" = ( -/obj/item/ammo_magazine/strela/slug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"feu" = ( -/obj/machinery/suit_cycler/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fev" = ( -/obj/item/weapon/gun/energy/locked/frontier/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fex" = ( -/obj/item/clothing/under/permit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fey" = ( -/obj/item/weapon/gun/energy/gun/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"feE" = ( -/obj/structure/sign/levels/science/toxins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"feJ" = ( -/obj/item/weapon/storage/box/syndie_kit/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"feM" = ( -/obj/item/weapon/smes_coil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"feW" = ( -/obj/item/clothing/head/helmet/space/void/medical/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffa" = ( -/obj/item/weapon/gun/energy/xray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffj" = ( -/obj/item/weapon/book/manual/resleeving, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffm" = ( -/mob/living/simple_mob/mechanical/cyber_horror/tajaran{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ffo" = ( -/obj/item/clothing/head/fluff/ketrai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffy" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffE" = ( -/obj/item/weapon/melee/augment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffK" = ( -/obj/structure/grille/broken/rustic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffM" = ( -/obj/item/toy/figure/md, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ffR" = ( -/obj/item/clothing/under/fluff/nightgown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgd" = ( -/obj/item/stack/material/titanium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgi" = ( -/obj/item/organ/internal/kidneys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgk" = ( -/obj/item/weapon/twohanded/fireaxe/fluff/mjollnir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgs" = ( -/obj/structure/sign/department/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgv" = ( -/obj/item/clothing/suit/storage/explorer/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgx" = ( -/obj/item/weapon/spell/construct/slam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgz" = ( -/obj/structure/sign/levels/security/interrogation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgF" = ( -/obj/item/clothing/head/collectable/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgG" = ( -/mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fgJ" = ( -/obj/item/clothing/suit/storage/toggle/cmddressjacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgK" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgN" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fgP" = ( -/obj/item/seeds/amanitamycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhf" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratpackburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhh" = ( -/obj/item/mecha_parts/mecha_equipment/speedboost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhl" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fho" = ( -/mob/living/simple_mob/mechanical/technomancer_golem{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fhq" = ( -/obj/structure/bed/chair/bay/chair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhr" = ( -/obj/item/weapon/card/id/civilian/entertainer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fht" = ( -/obj/item/clothing/ears/earring/dangle/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhB" = ( -/obj/item/weapon/pen/crayon/marker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhI" = ( -/obj/item/weapon/rig/hazmat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhK" = ( -/obj/structure/cult/pylon/swarm/defender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhN" = ( -/obj/item/toy/mecha/gygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhW" = ( -/obj/item/weapon/book/bundle/custom_library/reference/fbpandprostheticmaintenance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fhZ" = ( -/obj/item/clothing/head/beret/sec/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fid" = ( -/obj/item/toy/chewtoy/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fii" = ( -/obj/machinery/button/remote, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fil" = ( -/obj/item/ammo_magazine/m5mmcaseless/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiu" = ( -/obj/structure/simple_door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiA" = ( -/obj/item/stack/material/log/hard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiB" = ( -/obj/item/clothing/head/nun_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiC" = ( -/obj/structure/cable/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiH" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiI" = ( -/obj/item/weapon/card/id/event/altcard/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiJ" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiK" = ( -/obj/item/toy/figure/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiM" = ( -/obj/item/rig_module/device/orescanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiO" = ( -/obj/item/weapon/reagent_containers/food/snacks/cinnamonroll, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiS" = ( -/obj/item/toy/figure/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiX" = ( -/obj/item/integrated_circuit/logic/binary/less_than_or_equal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fiY" = ( -/obj/item/weapon/gun/projectile/smartgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjk" = ( -/obj/item/rig_module/stealth_field, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjm" = ( -/obj/item/weapon/plantspray/pests/old/lindane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjq" = ( -/obj/item/ammo_magazine/tp23, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjv" = ( -/obj/item/clothing/under/nanotrasen/security/commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjF" = ( -/obj/item/clothing/gloves/tactical/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjG" = ( -/obj/item/integrated_circuit/transfer/multiplexer/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjJ" = ( -/obj/item/seeds/vanilla, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjW" = ( -/obj/structure/sign/directions/engineering/gravgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjY" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/mob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fjZ" = ( -/obj/item/clothing/head/cowboy/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkb" = ( -/obj/item/weapon/implantcase/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkh" = ( -/obj/structure/sign/deck1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkk" = ( -/obj/item/ammo_magazine/mg42, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkl" = ( -/obj/item/clothing/accessory/jacket/altevian/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fko" = ( -/obj/item/weapon/dnainjector/antifire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkp" = ( -/obj/item/weapon/moneybag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkv" = ( -/obj/item/weapon/card/id/security/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkO" = ( -/obj/item/clothing/suit/armor/vest/wolftaur/serdy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkR" = ( -/obj/item/seeds/pumpkinseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkV" = ( -/obj/item/device/encryptionkey/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fkW" = ( -/obj/item/weapon/circuitboard/oven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flg" = ( -/obj/item/ammo_casing/microbattery/medical/stabilize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flj" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flp" = ( -/obj/machinery/atmospherics/tvalve/bypass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flw" = ( -/obj/machinery/power/solar/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flz" = ( -/obj/item/stack/tile/floor/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flH" = ( -/obj/item/clothing/suit/storage/fluff/ivy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flI" = ( -/obj/item/clothing/head/hood/winter/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flP" = ( -/obj/structure/sign/atmos/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flS" = ( -/obj/item/weapon/phone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"flY" = ( -/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmo" = ( -/obj/item/clothing/under/solgov/service/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fms" = ( -/obj/structure/closet/secure_closet/chemical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmy" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmA" = ( -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmC" = ( -/obj/item/ammo_casing/microbattery/medical/burn2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmD" = ( -/obj/item/clothing/under/suit_jacket/tan/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmS" = ( -/obj/machinery/light/small/readylight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmT" = ( -/obj/item/weapon/circuitboard/algae_farm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fmY" = ( -/obj/structure/sign/warning/nosmoking_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fng" = ( -/obj/item/weapon/storage/mre/menu10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnh" = ( -/obj/item/weapon/reagent_containers/food/snacks/reishicup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnm" = ( -/obj/structure/sign/botany, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fns" = ( -/obj/item/clothing/mask/breath/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnt" = ( -/obj/item/organ/internal/heart/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnv" = ( -/obj/item/seeds/hardlightseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnz" = ( -/obj/item/clothing/accessory/ribbon/solgov/marksman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnB" = ( -/obj/item/clothing/under/rank/security/corp/fluff/melissa_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnL" = ( -/obj/item/clothing/head/helmet/space/void/altevian_heartbreaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnN" = ( -/obj/structure/fans/hardlight/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnO" = ( -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fnY" = ( -/mob/living/simple_mob/animal/sif/siffet{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fod" = ( -/obj/item/weapon/circuitboard/arcade/clawmachine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"foe" = ( -/obj/machinery/door/airlock/angled_bay/external, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"foj" = ( -/obj/item/weapon/storage/pill_bottle/vermicetol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fov" = ( -/obj/structure/sign/flag/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"foC" = ( -/mob/living/simple_mob/slime{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fpc" = ( -/obj/machinery/atmospherics/unary/vent_pump/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpn" = ( -/obj/item/clothing/under/altevian/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpq" = ( -/obj/item/weapon/rig/ch/pursuit/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpv" = ( -/obj/item/clothing/accessory/armor/tag/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpL" = ( -/obj/item/weapon/tool/screwdriver/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpN" = ( -/obj/item/weapon/implantcase/vrlanguage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpW" = ( -/obj/vehicle/train/security/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fpZ" = ( -/obj/item/rig_module/device/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqu" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqv" = ( -/obj/item/clothing/suit/storage/toggle/dress/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqw" = ( -/obj/item/clothing/under/corp/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqy" = ( -/mob/living/simple_mob/animal/passive/bird, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fqz" = ( -/obj/structure/sign/directions/bridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqE" = ( -/obj/item/weapon/soap/water_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqK" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqL" = ( -/obj/item/clothing/head/fluff/pompom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqP" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/cargo/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqW" = ( -/obj/machinery/floor_light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fqY" = ( -/obj/item/clothing/head/soft/mbill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frg" = ( -/obj/item/weapon/storage/toolbox/lunchbox/mars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frk" = ( -/obj/item/clothing/suit/varsity/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frq" = ( -/obj/item/weapon/storage/backpack/sport/hyd/catchemall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frt" = ( -/obj/item/clothing/glasses/hud/health/aviator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frv" = ( -/obj/item/weapon/storage/mre/menu8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frC" = ( -/obj/item/clothing/shoes/mech_shoes/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frH" = ( -/obj/item/weapon/storage/mrebag/menu5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frJ" = ( -/obj/item/clothing/under/fluff/kilanosuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frM" = ( -/mob/living/simple_mob/mobs_monsters/clowns/thin{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"frW" = ( -/obj/item/clothing/accessory/scarf/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frX" = ( -/obj/item/ammo_magazine/m9mm/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"frY" = ( -/mob/living/simple_mob/vore/alienanimals/teppi/baby{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fsc" = ( -/obj/item/weapon/reagent_containers/food/snacks/garlicbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsd" = ( -/obj/structure/simple_door/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fse" = ( -/obj/item/clothing/under/solgov/utility/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsk" = ( -/obj/item/clothing/shoes/boots/winter/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsl" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal/wulf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fst" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsz" = ( -/obj/item/weapon/flame/match, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsA" = ( -/obj/item/clothing/accessory/solgov/department/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsQ" = ( -/obj/item/clothing/accessory/fluff/zeta_blackwell_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsT" = ( -/obj/item/stack/material/glass/phoronglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fsX" = ( -/obj/structure/bed/chair/sofa/right/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fte" = ( -/obj/item/integrated_circuit/arithmetic/division, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftl" = ( -/obj/item/ammo_magazine/m545/hunter/ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftm" = ( -/obj/item/ammo_magazine/m9mm/luger/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftt" = ( -/obj/item/weapon/dnainjector/antiepi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fty" = ( -/obj/item/clothing/head/soft/solgov/veteranhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftE" = ( -/obj/item/weapon/storage/toolbox/lunchbox/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftI" = ( -/obj/item/clothing/under/det/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftV" = ( -/obj/structure/AIcore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ftY" = ( -/obj/item/integrated_circuit/converter/concatenator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuh" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/alecan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fum" = ( -/obj/item/ammo_casing/a556/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuo" = ( -/obj/structure/closet/crate/bin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fut" = ( -/obj/item/surplus_voucher/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuw" = ( -/obj/item/weapon/storage/pill_bottle/kelotane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuF" = ( -/obj/structure/bed/chair/comfy/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuM" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuN" = ( -/obj/item/clothing/under/qipao2_colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fuZ" = ( -/obj/machinery/door_timer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvk" = ( -/obj/item/clothing/under/tropical/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvn" = ( -/obj/item/clothing/head/collectable/paper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvq" = ( -/obj/item/weapon/ore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvs" = ( -/obj/item/clothing/suit/space/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvw" = ( -/obj/item/weapon/reagent_containers/food/snacks/organ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvz" = ( -/obj/structure/bed/chair/sofa/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvB" = ( -/obj/item/weapon/gun/projectile/cyborgtoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvC" = ( -/obj/item/weapon/ore/slag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvE" = ( -/mob/living/simple_mob/animal/wolf/space{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fvL" = ( -/obj/item/weapon/storage/wallet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fvY" = ( -/obj/item/clothing/suit/space/vox/civ/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwb" = ( -/obj/item/weapon/reagent_containers/food/snacks/mushroomslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwj" = ( -/obj/item/weapon/gun/energy/hooklauncher/ring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwm" = ( -/obj/structure/closet/secure_closet/nanotrasen_security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwx" = ( -/obj/item/weapon/melee/energy/sword/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwE" = ( -/obj/item/ammo_magazine/ammo_box/b545/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwH" = ( -/obj/item/clothing/accessory/medal/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwJ" = ( -/obj/item/clothing/under/frontier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwK" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fwM" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwQ" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwV" = ( -/obj/item/weapon/circuitboard/fax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fwW" = ( -/obj/item/clothing/under/solgov/utility/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxi" = ( -/obj/item/weapon/gun/projectile/makarov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxk" = ( -/obj/item/clothing/under/wedding/bride_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxm" = ( -/obj/item/weapon/dice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxx" = ( -/obj/item/weapon/storage/vore_egg/nevrean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxB" = ( -/obj/item/weapon/fuel_assembly/blitz/shielded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxD" = ( -/obj/machinery/atmospheric_field_generator/impassable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxI" = ( -/obj/item/weapon/bedsheet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxL" = ( -/obj/item/weapon/tool/crowbar/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxM" = ( -/obj/item/clothing/head/helmet/combat/bedevere_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxQ" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fxT" = ( -/obj/item/clothing/suit/storage/vest/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyb" = ( -/obj/item/device/taperecorder/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyg" = ( -/obj/structure/reagent_dispensers/fueltank/barrel/two, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyp" = ( -/obj/machinery/smartfridge/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyv" = ( -/obj/structure/closet/radiation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyw" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyE" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyL" = ( -/obj/item/integrated_circuit/memory/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyQ" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyR" = ( -/mob/living/simple_mob/animal/passive/cat/bread, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fyU" = ( -/obj/item/clothing/head/culthood/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyV" = ( -/obj/item/weapon/storage/backpack/messenger/hyd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fyY" = ( -/obj/item/weapon/circuitboard/distiller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzb" = ( -/obj/item/device/paicard/flipper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fze" = ( -/obj/structure/sign/atmos/co2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzh" = ( -/obj/item/clothing/mask/bandana/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzm" = ( -/obj/structure/door_assembly/door_assembly_atmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzw" = ( -/obj/item/weapon/surgical/scalpel/laser3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzA" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzD" = ( -/obj/item/clothing/suit/varsity/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fzV" = ( -/mob/living/simple_mob/animal/space/alien/queen{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fAd" = ( -/obj/item/hoist_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAp" = ( -/obj/structure/prop/machine/alien_tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAs" = ( -/obj/item/clothing/shoes/hitops/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAu" = ( -/obj/item/weapon/gun/projectile/deagle/camo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAM" = ( -/obj/item/organ/internal/stomach, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAR" = ( -/obj/structure/bed/chair/sofa/corner/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fAS" = ( -/mob/living/simple_mob/mechanical/viscerator/station{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fBb" = ( -/obj/item/integrated_circuit/manipulation/Size, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBe" = ( -/obj/item/stack/material/plasteel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBk" = ( -/obj/item/weapon/reagent_containers/pill/carbon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBy" = ( -/obj/structure/bed/chair/e_chair{ - icon_state = "bar_stool_base" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBz" = ( -/obj/item/weapon/circuitboard/cryopodcontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBA" = ( -/obj/item/clothing/under/solgov/service/army/command/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBF" = ( -/obj/structure/bed/chair/sofa/right/purp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBK" = ( -/obj/item/weapon/gun/projectile/automatic/combatsmg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBL" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBP" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBS" = ( -/obj/item/clothing/under/sheerblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fBV" = ( -/obj/item/weapon/storage/vore_egg/slimeglob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCc" = ( -/obj/item/weapon/spell/aura/shock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCg" = ( -/obj/machinery/computer/stockexchange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCl" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/orange_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCx" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCz" = ( -/obj/item/clothing/accessory/bracelet/friendship, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCJ" = ( -/obj/item/clothing/under/summerdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCL" = ( -/obj/item/seeds/bananaseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCO" = ( -/obj/item/weapon/tank/air, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCP" = ( -/obj/item/stack/tile/floor/eris/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fCZ" = ( -/obj/item/clothing/gloves/combat/knight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDa" = ( -/obj/item/clothing/accessory/storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDh" = ( -/obj/machinery/power/solar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDv" = ( -/obj/item/weapon/gun/energy/particle/cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDw" = ( -/obj/item/weapon/spell/shared_burden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDy" = ( -/obj/item/weapon/chaoscake_layer/three, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDC" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sobakacube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDK" = ( -/obj/item/clothing/under/rank/khi/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fDT" = ( -/obj/item/stack/tile/floor/eris/white/techfloor_grid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEb" = ( -/obj/item/weapon/gun/energy/laser/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEm" = ( -/obj/item/weapon/storage/box/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEA" = ( -/obj/item/weapon/circuitboard/airalarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fED" = ( -/obj/item/weapon/tool/crowbar/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEG" = ( -/obj/item/weapon/implantcase/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEI" = ( -/obj/item/weapon/reagent_containers/food/snacks/chips, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEK" = ( -/obj/item/toy/mecha/honk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fET" = ( -/obj/item/weapon/vehicle_assembly/spacebike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEU" = ( -/obj/structure/sign/directions/ladder_up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEV" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEW" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/jessie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fEX" = ( -/obj/structure/closet/crate/oculum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFf" = ( -/obj/item/weapon/storage/box/donut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFA" = ( -/obj/item/ammo_magazine/clip/c762, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFF" = ( -/obj/item/clothing/head/welding/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFK" = ( -/obj/structure/sign/department/ai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFL" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFM" = ( -/obj/machinery/r_n_d/protolathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFO" = ( -/obj/item/weapon/gun/energy/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFS" = ( -/obj/item/clothing/accessory/tie/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fFW" = ( -/mob/living/simple_mob/vore/aggressive/mimic/floor/plating{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fGg" = ( -/obj/item/clothing/head/pilot_vr/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGh" = ( -/obj/item/weapon/cat_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGi" = ( -/obj/item/weapon/folder/blue_captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGl" = ( -/obj/item/clothing/head/helmet/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGu" = ( -/obj/item/clothing/suit/cultrobes/magusred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGE" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/suppressor{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fGK" = ( -/obj/structure/reagent_dispensers/water_cooler/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGP" = ( -/obj/machinery/telecomms/receiver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGQ" = ( -/obj/structure/door_assembly/door_assembly_com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fGW" = ( -/obj/machinery/atmospherics/pipe/zpipe/down, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHc" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHk" = ( -/obj/item/weapon/bedsheet/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHv" = ( -/obj/item/clothing/under/rank/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHG" = ( -/obj/item/integrated_circuit/output/sound, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHM" = ( -/obj/structure/sign/levels/engineering/reactor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHP" = ( -/obj/item/clothing/suit/space/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/plain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHR" = ( -/obj/item/weapon/reagent_containers/food/snacks/stew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHS" = ( -/mob/living/simple_mob/vore/slug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fHU" = ( -/obj/item/weapon/circuitboard/quantumpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fHW" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/snake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIf" = ( -/obj/item/weapon/c_tube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIg" = ( -/obj/machinery/vending/event/uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIi" = ( -/obj/structure/closet/crate/hydroponics/exotic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIl" = ( -/obj/item/clothing/head/chaplain_hood/whiteout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIn" = ( -/obj/item/weapon/implant/language/skrellian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIt" = ( -/obj/item/clothing/head/hood/galahad_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIz" = ( -/obj/item/clothing/accessory/collar/collarplanet_earth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIE" = ( -/obj/item/ammo_magazine/type901/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fII" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIK" = ( -/obj/item/stack/material/flint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIL" = ( -/obj/structure/sign/directions/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIR" = ( -/obj/item/weapon/rsf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fIY" = ( -/obj/item/weapon/material/knife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJa" = ( -/obj/item/weapon/storage/bag/circuits/mini/reagents/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJj" = ( -/obj/item/weapon/circuitboard/telesci_pad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJs" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJC" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJD" = ( -/obj/item/clothing/head/fluff/nikki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJG" = ( -/obj/item/stack/cable_coil/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJJ" = ( -/obj/item/weapon/inducer/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJN" = ( -/obj/item/stack/cable_coil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJR" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/bishop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJV" = ( -/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fJZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb04, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKb" = ( -/obj/item/clothing/suit/storage/flannel/aqua, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKc" = ( -/obj/machinery/computer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKg" = ( -/obj/item/stack/tile/floor/eris/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKi" = ( -/obj/item/clothing/shoes/laceup/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKk" = ( -/obj/item/weapon/rig/vox/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKt" = ( -/obj/item/weapon/reagent_containers/food/snacks/roastbeef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKv" = ( -/obj/machinery/power/rtg/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKB" = ( -/obj/fiftyspawner/tealcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fKF" = ( -/obj/item/device/camera_film, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLb" = ( -/obj/item/toy/plushie/crimson_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLc" = ( -/obj/item/clothing/mask/gas/swat/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLd" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLf" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLh" = ( -/obj/structure/sign/sec3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLi" = ( -/obj/item/clothing/suit/armor/vest/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLl" = ( -/obj/item/weapon/storage/box/mixedglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLn" = ( -/obj/item/clothing/accessory/armor/tag/abpos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLt" = ( -/obj/structure/bonfire/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLA" = ( -/obj/item/clothing/mask/nock_demon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLB" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLI" = ( -/obj/item/integrated_circuit/converter/refcode, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLL" = ( -/obj/structure/table/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fLV" = ( -/obj/item/device/radio/headset/explorer/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMe" = ( -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMg" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMk" = ( -/obj/structure/sign/directions/security/interrogation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMl" = ( -/obj/structure/cult/tome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMp" = ( -/obj/item/clothing/accessory/poncho/roles/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMq" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMr" = ( -/obj/item/mecha_parts/part/odysseus_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMw" = ( -/obj/item/device/encryptionkey/heads/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMz" = ( -/obj/item/ammo_casing/a9mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMB" = ( -/obj/item/weapon/storage/backpack/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMC" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMG" = ( -/obj/item/weapon/digestion_remains/skull/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMM" = ( -/obj/item/clothing/under/rank/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/dip/guac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMT" = ( -/obj/item/weapon/storage/box/bloodpacks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fMV" = ( -/obj/item/clothing/head/beret/solgov/sifguard/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNc" = ( -/obj/item/clothing/head/helmet/space/void/responseteam/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNe" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNi" = ( -/obj/item/seeds/wildwabback, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNy" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNA" = ( -/mob/living/simple_mob/animal/giant_spider/hunter/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fND" = ( -/obj/item/clothing/head/helmet/space/void/engineering/salvage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNF" = ( -/mob/living/simple_mob/animal/borer, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fNH" = ( -/obj/item/weapon/tool/screwdriver/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNM" = ( -/obj/item/clothing/head/helmet/space/vox/civ/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNN" = ( -/obj/item/weapon/gun/energy/altevian/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNO" = ( -/obj/structure/closet/crate/carp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNS" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/dart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNV" = ( -/obj/item/clothing/under/medigown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fNY" = ( -/obj/item/ammo_magazine/box/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOf" = ( -/obj/item/clothing/suit/armor/vest/harpsong, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOm" = ( -/obj/item/clothing/accessory/poncho/roles/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOn" = ( -/obj/structure/barricade/cutout/deathsquad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOs" = ( -/obj/item/seeds/chantermycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOt" = ( -/obj/item/weapon/reagent_containers/glass/bottle/pacid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOx" = ( -/obj/item/clothing/shoes/none, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOQ" = ( -/obj/item/clothing/suit/space/void/refurb/research/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fOU" = ( -/obj/item/modular_computer/telescreen/preset/generic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPf" = ( -/obj/item/clothing/accessory/armor/helmcover/blue/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPi" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sharkmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPl" = ( -/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fPo" = ( -/obj/item/weapon/storage/fancy/cigarettes/professionals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPr" = ( -/obj/item/organ/internal/kidneys/alraune, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPt" = ( -/obj/item/seeds/rose, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPu" = ( -/obj/item/ammo_casing/a762x39/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPv" = ( -/obj/item/clothing/shoes/leg_guard/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPw" = ( -/obj/fiftyspawner/sblucarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPy" = ( -/obj/item/weapon/staff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPz" = ( -/obj/item/weapon/dnainjector/antimorph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPB" = ( -/obj/item/weapon/paper/crumpled/bloody/CrashedMedShuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPF" = ( -/obj/item/device/personal_shield_generator/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPJ" = ( -/obj/machinery/computer/message_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fPU" = ( -/obj/item/clothing/gloves/gauntlets/rig/ch/aegis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQc" = ( -/obj/item/device/radio/bluespacehandset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQg" = ( -/obj/item/clothing/shoes/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQj" = ( -/obj/item/weapon/melee/energy/sword/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQl" = ( -/obj/item/weapon/aiModule/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQs" = ( -/obj/structure/sink/kitchen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQu" = ( -/obj/item/weapon/implantcase/toolkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQB" = ( -/obj/item/stack/tile/floor/eris/derelict2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQD" = ( -/obj/item/weapon/spell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQE" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQR" = ( -/obj/item/clothing/shoes/boots/winter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fQT" = ( -/obj/item/stack/medical/splint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRa" = ( -/obj/item/taperoll/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRb" = ( -/obj/item/clothing/suit/space/void/refurb/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRj" = ( -/obj/structure/closet/secure_closet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRn" = ( -/obj/item/ammo_casing/a9mm/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRw" = ( -/obj/item/mecha_parts/component/armor/marshal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRx" = ( -/obj/item/toy/plushie/otter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRy" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/cake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRC" = ( -/obj/item/clothing/head/fedora/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRM" = ( -/obj/machinery/atmospherics/tvalve/digital/mirrored/bypass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRQ" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/splat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fRR" = ( -/obj/item/clothing/under/owl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRT" = ( -/obj/item/clothing/mask/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRV" = ( -/obj/machinery/smartfridge/chemistry/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fRX" = ( -/obj/item/weapon/telecube/mated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSd" = ( -/obj/item/weapon/coin/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSk" = ( -/obj/machinery/light/flamp/noshade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSo" = ( -/obj/item/device/radio/uplink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSu" = ( -/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSv" = ( -/obj/structure/sign/levels/telecomms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSy" = ( -/obj/item/clothing/head/soft/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSA" = ( -/obj/item/clothing/head/culthood/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSE" = ( -/obj/structure/curtain/open/shower/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSG" = ( -/obj/item/weapon/storage/bag/cash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSL" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fSY" = ( -/mob/living/silicon/pai/infomorph, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fSZ" = ( -/obj/structure/sign/directions/science/toxins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTq" = ( -/obj/item/trash/tray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTw" = ( -/obj/item/stack/medical/advanced/clotting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTD" = ( -/obj/item/ammo_casing/macrobattery/ouchie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTE" = ( -/obj/item/clothing/head/beret/solgov/sifguard/branch/observatory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTH" = ( -/obj/item/clothing/glasses/thermal/plain/monocle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTI" = ( -/obj/item/projectile/bullet/rifle/a556/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTJ" = ( -/obj/item/clothing/under/rank/chief_engineer/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTL" = ( -/obj/item/weapon/gun/energy/mouseray/woof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTM" = ( -/obj/machinery/button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTN" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fTP" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/meatration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fTQ" = ( -/mob/living/simple_mob/humanoid/pirate/mate/ranged/rifle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fUj" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/research/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUk" = ( -/obj/item/toy/figure/serbian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUn" = ( -/obj/machinery/vending/nifsoft_shop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUr" = ( -/obj/structure/closet/secure_closet/hydroponics/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUy" = ( -/obj/item/prop/alien/phasecoil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUB" = ( -/obj/item/weapon/disk/limb/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUG" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUJ" = ( -/obj/item/weapon/circuitboard/bomb_tester, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUP" = ( -/obj/structure/closet/secure_closet/nanotrasen_warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fUT" = ( -/obj/structure/prop/nt_optable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVb" = ( -/obj/structure/sign/levels/engineering/atmospherics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVf" = ( -/obj/machinery/shieldwall{ - dir = 6 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVg" = ( -/obj/machinery/power/smes/buildable/point_of_interest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVh" = ( -/obj/item/weapon/kitchenknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVi" = ( -/obj/item/device/radio/subspace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVm" = ( -/obj/item/clothing/mask/gas/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVo" = ( -/obj/item/clothing/gloves/fluff/morsleeves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVs" = ( -/obj/item/weapon/aiModule/freeform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVu" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVB" = ( -/obj/item/clothing/accessory/poncho/cloak/fluff/Jaree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVL" = ( -/obj/item/integrated_circuit/converter/separator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVM" = ( -/obj/item/toy/plushie/borgplushie/drake/mine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVT" = ( -/obj/item/weapon/dnainjector/antiregenerate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fVZ" = ( -/obj/structure/closet/secure_closet/xenoarchaeologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWa" = ( -/obj/item/clothing/under/shorts/jeans/classic/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWb" = ( -/obj/item/organ/internal/eyes/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWe" = ( -/obj/item/clothing/accessory/poncho/thermal/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWm" = ( -/obj/structure/bedsheetbin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWq" = ( -/obj/structure/ship_munition/disperser_charge/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWs" = ( -/obj/item/weapon/gun/energy/locked/frontier/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWw" = ( -/obj/item/clothing/head/hood/winter/ratvar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fWJ" = ( -/obj/item/clothing/under/rank/head_of_personnel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXf" = ( -/obj/item/weapon/banner/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXn" = ( -/obj/machinery/shield/malfai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXr" = ( -/obj/item/weapon/storage/bag/circuits/mini/smart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXy" = ( -/obj/item/weapon/mop/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXA" = ( -/obj/item/weapon/fossil/plant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXR" = ( -/obj/item/clothing/suit/space/void/exploration/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fXS" = ( -/obj/item/weapon/storage/box/smokes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYb" = ( -/obj/item/clothing/under/fashionminiskirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYf" = ( -/obj/item/clothing/under/dress/singer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYg" = ( -/obj/structure/ghost_pod/manual/lost_drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYh" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYs" = ( -/mob/living/simple_mob/mechanical/combat_drone{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"fYz" = ( -/obj/item/weapon/reagent_containers/food/snacks/pancakes/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYA" = ( -/obj/item/clothing/under/punpun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYC" = ( -/obj/item/trash/kokobar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYI" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fYQ" = ( -/obj/machinery/button/remote/blast_door/radproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZe" = ( -/obj/item/clothing/under/pants/baggy/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZp" = ( -/obj/structure/sign/scenery/engineleft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZu" = ( -/obj/item/pizzabox/vegetable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZx" = ( -/obj/item/toy/figure/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZF" = ( -/obj/item/organ/internal/lungs/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZR" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"fZW" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9_alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaa" = ( -/obj/item/weapon/reagent_containers/food/snacks/salo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gah" = ( -/obj/item/organ/internal/heart/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gak" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/keltec/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaq" = ( -/obj/item/clothing/head/helmet/space/void/makeshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaz" = ( -/obj/structure/closet/crate/freezer/veymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaQ" = ( -/obj/item/weapon/computer_hardware/card_slot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaR" = ( -/obj/item/weapon/storage/toolbox/lunchbox/cat/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaS" = ( -/obj/structure/sign/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gaT" = ( -/obj/item/weapon/reagent_containers/food/snacks/poppypretzel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbd" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/brown_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbe" = ( -/obj/item/integrated_circuit/logic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbh" = ( -/obj/item/instrument/piano_synth/headphones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbk" = ( -/obj/item/clothing/gloves/combat/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbp" = ( -/obj/item/weapon/material/twohanded/baseballbat/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbr" = ( -/obj/item/weapon/material/knife/stone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbs" = ( -/obj/machinery/media/jukebox/ghost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbu" = ( -/obj/structure/bed/chair/bay/comfy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbv" = ( -/obj/item/clothing/under/rank/head_of_security/navyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbC" = ( -/obj/structure/ghost_pod/ghost_activated/swarm_drone/event/melee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbE" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/iaa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbJ" = ( -/obj/machinery/pipedispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gbK" = ( -/mob/living/simple_mob/animal/passive/cat/cak, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gbQ" = ( -/obj/item/integrated_circuit/input/gps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gce" = ( -/obj/item/weapon/disk/limb/dsi_vulpkanin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gco" = ( -/obj/item/weapon/material/ashtray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcq" = ( -/obj/item/clothing/suit/space/void/security/hasd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcB" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/gingerale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcD" = ( -/obj/item/clothing/shoes/boots/hoof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcG" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/mankini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcH" = ( -/obj/item/weapon/secbot_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcI" = ( -/obj/structure/sign/painting/public, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcJ" = ( -/obj/item/clothing/head/helmet/space/deathsquad/beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcM" = ( -/obj/structure/bed/chair/sofa/left/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcR" = ( -/obj/item/weapon/grenade/chem_grenade/metalfoam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gcY" = ( -/obj/item/weapon/card/id/casino/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdi" = ( -/obj/structure/closet/crate/mimic/airlock/cointoss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdk" = ( -/obj/item/seeds/cornseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdn" = ( -/obj/item/clothing/accessory/choker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdt" = ( -/obj/item/weapon/storage/bag/circuits/mini/converter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdv" = ( -/obj/item/clamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdy" = ( -/obj/item/clothing/accessory/fluff/alex_wolf_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdE" = ( -/obj/item/clothing/head/helmet/space/void/refurb/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdL" = ( -/obj/item/seeds/wheatseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdQ" = ( -/obj/machinery/atmospherics/pipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdR" = ( -/obj/machinery/power/turbinemotor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gdZ" = ( -/obj/structure/prop/machine/tgmc_console3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gei" = ( -/obj/item/weapon/implant/dud/torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geo" = ( -/obj/item/weapon/stock_parts/manipulator/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gev" = ( -/obj/item/clothing/head/beanie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gey" = ( -/obj/item/clothing/suit/storage/bomber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geD" = ( -/obj/item/weapon/cane/white/collapsible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geF" = ( -/obj/item/organ/internal/nano/orchestrator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geG" = ( -/obj/item/stack/arcadeticket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geN" = ( -/obj/item/clothing/suit/space/void/medical/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geP" = ( -/obj/item/stack/tile/roofing/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geU" = ( -/obj/item/clothing/shoes/boots/fluff/kilano/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"geW" = ( -/obj/item/mecha_parts/part/scarab_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfa" = ( -/mob/living/simple_mob/animal/giant_spider/ion{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gfp" = ( -/obj/item/ammo_casing/a45/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfx" = ( -/obj/machinery/light/flamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfB" = ( -/obj/item/clothing/gloves/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfF" = ( -/obj/item/weapon/circuitboard/injector_maker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfI" = ( -/obj/item/clothing/head/helmet/space/skrell/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfJ" = ( -/obj/item/weapon/gun/energy/mouseray/catslug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfS" = ( -/obj/structure/biowaste_tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfU" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gfZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gge" = ( -/obj/item/weapon/flame/lighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggh" = ( -/obj/machinery/button/windowtint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggv" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggw" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggA" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggB" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/greentea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggL" = ( -/obj/structure/balloon/bat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggN" = ( -/obj/item/clothing/under/rank/security/corp/fluff/jessica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggO" = ( -/obj/item/weapon/bedsheet/clowndouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggU" = ( -/obj/item/weapon/reagent_containers/glass/beaker/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggX" = ( -/obj/mecha/combat/gygax/serenity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ggY" = ( -/obj/item/clothing/head/helmet/space/void/medical/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghb" = ( -/obj/item/weapon/gun/energy/locked/phasegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghi" = ( -/obj/machinery/atmospherics/valve/digital/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghj" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gho" = ( -/obj/item/clothing/suit/bio_suit/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghp" = ( -/obj/item/weapon/reagent_containers/food/snacks/plump_pie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghq" = ( -/obj/item/ammo_magazine/m545/ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghs" = ( -/obj/item/clothing/head/beret/science/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghu" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghB" = ( -/obj/item/weapon/reagent_containers/pill/citalopram, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghD" = ( -/obj/item/weapon/coin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghM" = ( -/obj/item/weapon/card/id/event/altcard/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghP" = ( -/obj/structure/closet/malf/suits, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghR" = ( -/obj/structure/sign/levels/science/rnd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghU" = ( -/obj/item/weapon/storage/box/empslite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ghW" = ( -/obj/machinery/vending/wardrobe/chefdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gik" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gim" = ( -/obj/item/clothing/under/fluff/gnshorts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gio" = ( -/obj/item/device/electronic_assembly/clothing/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giw" = ( -/obj/item/weapon/bedsheet/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giA" = ( -/obj/item/weapon/oar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giE" = ( -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giN" = ( -/obj/item/device/modkit_conversion/fluff/kaith_knife_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giP" = ( -/obj/item/weapon/storage/backpack/satchel/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giT" = ( -/obj/structure/closet/secure_closet/egg/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"giU" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/sprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjb" = ( -/obj/structure/smolebuilding/houses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gje" = ( -/obj/item/weapon/cartridge/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjk" = ( -/obj/structure/showcase/sign/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjt" = ( -/obj/item/weapon/circuitboard/unary_atmos/heater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gju" = ( -/obj/machinery/nuclearbomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjw" = ( -/obj/item/clothing/suit/storage/hooded/hoodie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjD" = ( -/obj/structure/sign/deathsposal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjF" = ( -/obj/item/ammo_magazine/clip/c545/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjH" = ( -/obj/item/weapon/rcd/shipwright/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjI" = ( -/obj/structure/fireplace/barrel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjL" = ( -/obj/item/clothing/head/helmet/space/void/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjO" = ( -/obj/trader/capture_crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjQ" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/adm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjS" = ( -/obj/item/clothing/head/beret/solgov/orbital, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjT" = ( -/obj/item/clothing/accessory/armor/armguards/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjY" = ( -/obj/item/weapon/storage/box/capguntoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gjZ" = ( -/obj/item/weapon/implantcase/dexplosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkb" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkc" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkj" = ( -/obj/item/ammo_magazine/s45/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkl" = ( -/obj/item/clothing/suit/barding/agatha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkr" = ( -/obj/machinery/vending/wardrobe/secdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkv" = ( -/obj/item/clothing/accessory/bracelet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkJ" = ( -/obj/machinery/power/rtg/abductor/hybrid/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkN" = ( -/mob/living/simple_mob/humanoid/possessed/merc/feral{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gkQ" = ( -/obj/item/clothing/glasses/sunglasses/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gkW" = ( -/obj/item/seeds/cinnamon, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gle" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/smw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glm" = ( -/obj/structure/prop/statue/lion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glr" = ( -/mob/living/simple_mob/vore/aggressive/panther{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gls" = ( -/obj/item/capture_crystal/demon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glt" = ( -/obj/item/clothing/under/solgov/service/sifguard/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glu" = ( -/obj/machinery/oxygen_pump/mobile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glx" = ( -/obj/item/device/nif/bad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"glI" = ( -/obj/item/seeds/peanutseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gmd" = ( -/obj/structure/closet/secure_closet/medical3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gme" = ( -/obj/item/device/nif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gmf" = ( -/obj/item/toy/plushie/slimeplushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gmk" = ( -/obj/item/ammo_casing/a762x39/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gmp" = ( -/obj/item/clothing/suit/space/void/altevian_heartbreaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gmY" = ( -/obj/item/clothing/accessory/collar/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gna" = ( -/obj/item/weapon/disk/limb/dsi_zorren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gng" = ( -/obj/item/clothing/under/dress/wench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnw" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "18" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gny" = ( -/obj/item/clothing/gloves/botanic_leather, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnA" = ( -/obj/item/rig_module/device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnD" = ( -/obj/item/weapon/circuitboard/fusion_fuel_compressor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnH" = ( -/obj/item/weapon/card/data, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnL" = ( -/obj/item/slimepotion/obedience, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnQ" = ( -/obj/item/clothing/accessory/halfcape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnV" = ( -/obj/item/weapon/card/id/syndicate_command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gnY" = ( -/obj/item/integrated_circuit/cryptography/hash_sha1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goj" = ( -/obj/item/device/modkit_conversion/fluff/melissa_gun_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gol" = ( -/obj/item/weapon/chaoscake_layer/four, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goE" = ( -/obj/item/mecha_parts/component/armor/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goF" = ( -/obj/item/clothing/gloves/gauntlets/lightrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goG" = ( -/obj/structure/bed/chair/sofa/left/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goJ" = ( -/mob/living/simple_mob/construct/juggernaut{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"goL" = ( -/obj/item/flag/gap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goO" = ( -/obj/item/integrated_circuit/output/holographic_projector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goR" = ( -/obj/item/clothing/suit/storage/toggle/internalaffairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goS" = ( -/obj/item/clothing/mask/chewable/tobacco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"goV" = ( -/obj/item/seeds/sifbulb, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpf" = ( -/obj/item/weapon/spell/construct/spawner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpm" = ( -/obj/item/projectile/beam/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpp" = ( -/obj/item/weapon/spacecash/c500, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpq" = ( -/obj/item/clothing/head/helmet/HoS/hat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpu" = ( -/obj/item/device/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpy" = ( -/obj/item/weapon/reagent_containers/food/drinks/golden_cup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpB" = ( -/obj/structure/shuttle/engine/platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpE" = ( -/obj/item/weapon/material/minihoe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpM" = ( -/obj/item/weapon/haircomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpQ" = ( -/obj/structure/barricade/cutout/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gpV" = ( -/obj/machinery/suit_cycler/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqb" = ( -/obj/structure/closet/secure_closet/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqc" = ( -/obj/structure/sign/flag/almach_a, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gql" = ( -/obj/item/device/text_to_speech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqo" = ( -/obj/machinery/vending/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqu" = ( -/obj/item/weapon/circuitboard/splicer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqy" = ( -/obj/item/clothing/suit/storage/teshari/cloak/fluff/strix_cco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqB" = ( -/obj/item/weapon/bone/skull/unknown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqD" = ( -/obj/machinery/vending/event/accessory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqF" = ( -/obj/item/ammo_casing/microbattery/medical/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqJ" = ( -/obj/structure/sign/department/ass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqS" = ( -/obj/item/weapon/circuitboard/travelcontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gqX" = ( -/obj/item/clothing/suit/storage/toggle/dress/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grc" = ( -/obj/machinery/power/grounding_rod/pre_mapped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grr" = ( -/obj/item/weapon/card/id/centcom/ERT/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gru" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb01, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grz" = ( -/obj/item/ammo_magazine/hectate/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grA" = ( -/obj/item/clothing/suit/armor/pcarrier/light/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grE" = ( -/mob/living/simple_mob/animal/giant_spider/phorogenic{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"grL" = ( -/obj/item/toy/plushie/black_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"grO" = ( -/obj/item/wire_reader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsa" = ( -/obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsb" = ( -/obj/item/clothing/under/shiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsf" = ( -/obj/item/clothing/accessory/medal/solgov/gold/sun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsi" = ( -/obj/item/clothing/suit/sumo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsm" = ( -/obj/item/clothing/suit/storage/toggle/denim_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsu" = ( -/obj/item/weapon/rig/internalaffairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsw" = ( -/obj/machinery/suit_cycler/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsF" = ( -/obj/item/seeds/pumpkinseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsG" = ( -/obj/item/clothing/suit/armor/vest/wolftaur/kate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gsV" = ( -/obj/item/weapon/storage/vore_egg/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtc" = ( -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gth" = ( -/obj/item/weapon/reagent_containers/glass/bottle/arithrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gti" = ( -/mob/living/bot/cleanbot/edCLN, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gtm" = ( -/obj/item/ammo_casing/microbattery/medical/omni3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gts" = ( -/obj/item/clothing/accessory/sweater/flowersweater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtt" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/scienceslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gtx" = ( -/obj/item/clothing/head/wizard/marisa/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtA" = ( -/obj/fiftyspawner/turcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtC" = ( -/obj/item/clothing/suit/storage/solgov/dress/fleet/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtI" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/redpanda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtR" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gtT" = ( -/obj/machinery/portable_atmospherics/powered/pump/huge/stationary/purge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gud" = ( -/obj/item/weapon/fluff/squeezetoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gug" = ( -/obj/structure/bed/chair/comfy/rounded/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gui" = ( -/obj/structure/prop/war/tgmc_minirockets/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gun" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"guo" = ( -/obj/item/weapon/circuitboard/bioprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gup" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"guw" = ( -/obj/item/ammo_magazine/m545saw/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"guy" = ( -/obj/item/ammo_magazine/ammo_box/b545, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"guH" = ( -/obj/item/clothing/suit/storage/victcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"guX" = ( -/mob/living/simple_mob/animal/sif/kururak{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gvc" = ( -/obj/structure/cryofeed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvd" = ( -/obj/item/ammo_magazine/s45lc/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvu" = ( -/obj/item/clothing/under/pants/baggy/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvv" = ( -/obj/item/clothing/suit/armor/vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvx" = ( -/obj/item/clothing/head/pizzaguy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvy" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvC" = ( -/obj/item/clothing/suit/space/anomaly/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvF" = ( -/obj/item/weapon/dnainjector/clumsymut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvG" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvN" = ( -/obj/structure/closet/crate/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvP" = ( -/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvV" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/lightgrey_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gvZ" = ( -/obj/structure/sign/coffee_shop_library, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwb" = ( -/obj/item/clothing/under/solgov/pt/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwd" = ( -/obj/item/weapon/storage/box/brainzsnax/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwq" = ( -/obj/item/clothing/under/solgov/utility/sifguard_skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gww" = ( -/obj/item/mecha_parts/chassis/scarab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwA" = ( -/obj/structure/sign/directions/elevator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwE" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwG" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwJ" = ( -/obj/structure/closet/crate/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwP" = ( -/obj/item/weapon/disk/species/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwW" = ( -/obj/item/mecha_parts/part/phazon_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gwY" = ( -/obj/item/weapon/gun/energy/sonic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxa" = ( -/obj/item/device/modkit_conversion/fluff/skinner/c, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxk" = ( -/mob/living/simple_mob/animal/passive/cat/fluff, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gxm" = ( -/obj/item/clothing/head/beret/solgov/fleet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxv" = ( -/obj/item/clothing/suit/armor/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxD" = ( -/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxO" = ( -/obj/structure/symbol/em, -/turf/simulated/fitness, -/area/survivalpod) -"gxP" = ( -/obj/item/weapon/reagent_containers/food/snacks/bagelplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxQ" = ( -/obj/structure/prop/blackbox/xenofrigate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gxS" = ( -/obj/item/weapon/flame/lighter/zippo/fluff/joan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gym" = ( -/obj/structure/prop/dominator/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyn" = ( -/obj/item/weapon/storage/backpack/satchel/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyp" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyw" = ( -/obj/item/clothing/head/collectable/petehat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyA" = ( -/obj/item/clothing/head/fishing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyC" = ( -/obj/machinery/power/quantumpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyH" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyK" = ( -/obj/item/integrated_circuit/converter/rgb2hex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyM" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyO" = ( -/obj/item/organ/internal/augment/armmounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyU" = ( -/obj/structure/symbol/sa, -/turf/simulated/fitness, -/area/survivalpod) -"gyX" = ( -/obj/item/projectile/beam/midlaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gyY" = ( -/obj/item/trash/spitwad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzb" = ( -/obj/item/device/mass_spectrometer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzj" = ( -/obj/item/integrated_circuit/output/led/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzl" = ( -/obj/item/weapon/aiModule/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzp" = ( -/obj/item/weapon/material/twohanded/riding_crop/malady, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzz" = ( -/obj/item/ammo_magazine/m9mmt/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzD" = ( -/obj/item/device/healthanalyzer/phasic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzI" = ( -/obj/item/clothing/under/undersuit/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzT" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzX" = ( -/obj/item/weapon/circuitboard/candymachine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gzZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAa" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAj" = ( -/obj/machinery/computer/cryopod/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAm" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/echo{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gAn" = ( -/obj/item/clothing/head/pin/flower/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAs" = ( -/obj/item/weapon/circuitboard/pacman/mrs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAB" = ( -/obj/item/weapon/rig/baymed/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAE" = ( -/obj/item/clothing/suit/space/void/refurb/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAF" = ( -/obj/item/device/assembly_holder/timer_igniter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAI" = ( -/obj/item/weapon/gun/projectile/giskard/olivaw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAP" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "13" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gAR" = ( -/obj/machinery/computer/prison_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBa" = ( -/obj/item/mecha_parts/chassis/durand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBd" = ( -/obj/structure/closet/secure_closet/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBg" = ( -/obj/item/clothing/mask/chewable/candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBt" = ( -/obj/item/weapon/reagent_containers/food/snacks/pluto, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBw" = ( -/obj/structure/prop/machine/nt_biocan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBz" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/shark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBE" = ( -/obj/item/weapon/bluespace_harpoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBF" = ( -/obj/item/seeds/deathberryseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBN" = ( -/obj/item/weapon/cartridge/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBO" = ( -/obj/item/clothing/head/helmet/space/void/refurb/officer/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBQ" = ( -/obj/item/weapon/card/id/gateway/snowfield/class5E, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gBZ" = ( -/obj/item/clothing/shoes/black/cuffs/octavious, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCc" = ( -/obj/item/weapon/reagent_containers/food/snacks/stuffed_meatball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCd" = ( -/obj/item/weapon/gun/projectile/automatic/c20r/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCj" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCn" = ( -/obj/item/weapon/computer_hardware/network_card/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCq" = ( -/obj/structure/bed/chair/bay/chair/padded/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCt" = ( -/obj/item/clothing/suit/space/void/refurb/marine/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCw" = ( -/obj/item/weapon/tool/crowbar/heavysniper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCE" = ( -/obj/item/ammo_magazine/m9mm/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCH" = ( -/obj/item/clothing/suit/storage/hooded/knight_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCM" = ( -/obj/item/ammo_casing/a50bmg/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCU" = ( -/obj/structure/prop/rock/crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCX" = ( -/obj/item/weapon/reagent_containers/food/snacks/bearstew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCY" = ( -/obj/item/device/modkit_conversion/fluff/skinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gCZ" = ( -/obj/machinery/vending/cart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDb" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDh" = ( -/obj/structure/door_assembly/door_assembly_science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDk" = ( -/mob/living/simple_mob/humanoid/merc/melee/sword/space{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gDl" = ( -/obj/item/weapon/paper/crumpled/bloody/whiskeystation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDn" = ( -/obj/item/weapon/storage/backpack/dufflebag/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDs" = ( -/obj/machinery/smartfridge/seeds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDE" = ( -/obj/item/clothing/mask/smokable/cigarette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDN" = ( -/obj/item/weapon/reagent_containers/food/snacks/namagashi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDO" = ( -/obj/machinery/vending/assist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gDV" = ( -/obj/item/clothing/under/suit_jacket/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEa" = ( -/mob/living/simple_mob/mechanical/hivebot/tank{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gEd" = ( -/obj/item/weapon/lipstick/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEe" = ( -/obj/item/clothing/suit/storage/bladerunner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEj" = ( -/obj/item/seeds/libertymycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEp" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEr" = ( -/obj/item/weapon/tool/crowbar/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEx" = ( -/obj/item/clothing/head/service/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEy" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEF" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat/fedeng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEL" = ( -/obj/structure/sign/level/ground/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEN" = ( -/obj/item/integrated_circuit/logic/binary/greater_than, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEO" = ( -/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEV" = ( -/obj/item/clothing/accessory/qipaogold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gEY" = ( -/obj/item/clothing/head/tesh_hood/standard/black_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFa" = ( -/obj/item/seeds/shandseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFb" = ( -/obj/structure/stasis_cage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFg" = ( -/mob/living/simple_mob/horror/Helix, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gFi" = ( -/mob/living/simple_mob/animal/passive/yithian{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gFj" = ( -/obj/machinery/r_n_d/server/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFl" = ( -/obj/item/ammo_magazine/akm/drum/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFn" = ( -/obj/item/weapon/book/manual/engineering_hacking, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFp" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFs" = ( -/obj/item/integrated_circuit/output/screen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFy" = ( -/obj/machinery/smartfridge/sheets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFW" = ( -/obj/item/stack/material/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gFY" = ( -/obj/item/clothing/suit/space/vox/civ/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGe" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGf" = ( -/obj/item/clothing/accessory/armor/armorplate/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGi" = ( -/obj/item/weapon/reagent_containers/food/snacks/popcorn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGj" = ( -/obj/item/clothing/shoes/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGt" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGu" = ( -/obj/item/clothing/under/rank/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGC" = ( -/obj/structure/closet/autolok_wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGD" = ( -/obj/item/clothing/accessory/solgov/department/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGJ" = ( -/obj/item/weapon/digestion_remains, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGM" = ( -/obj/item/clothing/suit/cultrobes/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGP" = ( -/obj/item/weapon/wrapping_paper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGT" = ( -/obj/item/weapon/refill_cartridge/multitype/food, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gGV" = ( -/obj/item/integrated_circuit/transfer/multiplexer/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHa" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHh" = ( -/obj/item/stack/tile/floor/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHj" = ( -/obj/item/stack/material/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHl" = ( -/obj/item/ammo_magazine/m762/ext/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHo" = ( -/obj/item/clothing/under/color/lightbrown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHu" = ( -/obj/machinery/power/tesla_coil/pre_mapped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHz" = ( -/obj/item/device/multitool/hacktool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHH" = ( -/obj/item/weapon/material/ashtray/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHI" = ( -/obj/item/weapon/gun/launcher/confetti_cannon/overdrive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHP" = ( -/obj/item/weapon/gun/energy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHR" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/poemsforarainyday, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHU" = ( -/obj/machinery/replicator/vore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gHY" = ( -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIc" = ( -/obj/item/weapon/implantcase/restrainingbolt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIg" = ( -/obj/item/weapon/grenade/flashbang/clusterbang/segment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIh" = ( -/obj/item/clothing/under/rank/trek/sec/voy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIo" = ( -/obj/item/device/mmi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIu" = ( -/obj/item/weapon/circuitboard/olddoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gID" = ( -/obj/item/weapon/book/manual/medical_cloning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIE" = ( -/obj/item/trash/ratfruitcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIG" = ( -/obj/item/weapon/pen/reagent/sleepy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIO" = ( -/obj/item/weapon/kinetic_crusher/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gIT" = ( -/obj/structure/closet/secure_closet/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJb" = ( -/obj/structure/prop/machine/comm_tower/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJd" = ( -/obj/item/clothing/head/helmet/hos/fluff/lethe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJg" = ( -/obj/machinery/shield_capacitor/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJl" = ( -/obj/item/organ/internal/xenos/plasmavessel/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJn" = ( -/obj/machinery/suit_cycler/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJq" = ( -/obj/item/clothing/suit/johnny_coat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJt" = ( -/obj/structure/table/woodentable/holotable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJx" = ( -/obj/item/clothing/accessory/armor/legguards/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJD" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJJ" = ( -/obj/item/weapon/card/id/centcom/vip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gJN" = ( -/obj/structure/simple_door/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKa" = ( -/obj/item/rig_module/electrowarfare_suite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKc" = ( -/obj/structure/ghost_pod/manual/survivor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKe" = ( -/obj/item/clothing/suit/storage/vest/officer/fluff/nika, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKj" = ( -/obj/item/seeds/megashroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKr" = ( -/obj/item/clothing/head/helmet/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKy" = ( -/obj/item/weapon/implant/organ/limbaugment/wrist/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKI" = ( -/obj/item/seeds/grassseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKJ" = ( -/obj/item/clothing/accessory/ribbon/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKW" = ( -/obj/item/weapon/book/bundle/custom_library/reference/ThermodynamicReactionsandResearch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKY" = ( -/obj/item/weapon/circuitboard/mecha/durand/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gKZ" = ( -/obj/item/weapon/gun/energy/lasercannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLb" = ( -/obj/structure/noticeboard/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLl" = ( -/obj/item/weapon/fossil/base, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLx" = ( -/obj/item/clothing/glasses/fluff/scylla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLA" = ( -/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLB" = ( -/obj/structure/bed/chair/sofa/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLF" = ( -/obj/item/weapon/circuitboard/fusion_core_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLI" = ( -/obj/item/weapon/disk/species/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gLM" = ( -/obj/item/clothing/under/suit_jacket/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMe" = ( -/obj/item/weapon/storage/box/handcuffs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMg" = ( -/obj/item/weapon/reagent_containers/food/snacks/soup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMp" = ( -/obj/item/clothing/under/color/fjumpsuit/aquaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMs" = ( -/obj/item/weapon/card/id/gateway/snowfield/class6R, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMu" = ( -/obj/item/clothing/accessory/storage/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMJ" = ( -/obj/item/clothing/suit/armor/vest/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMK" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMQ" = ( -/obj/item/weapon/card/id/gateway/snowfield/class2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMT" = ( -/obj/item/clothing/shoes/flats/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gMY" = ( -/obj/item/weapon/gun/magnetic/matfed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNc" = ( -/obj/structure/prop/machine/last_shelter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNm" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNn" = ( -/obj/item/ammo_casing/a10mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNo" = ( -/obj/item/weapon/storage/wallet/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNq" = ( -/obj/machinery/deployable/barrier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNv" = ( -/obj/item/rig_module/teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNw" = ( -/obj/item/weapon/pickaxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNy" = ( -/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gNJ" = ( -/obj/item/clothing/accessory/bracelet/material/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNL" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/earth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNO" = ( -/obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNP" = ( -/obj/item/weapon/storage/mrebag/dessert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNQ" = ( -/obj/item/device/encryptionkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gNT" = ( -/mob/living/simple_mob/animal/passive/pillbug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gNY" = ( -/obj/item/seeds/glowberryseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOh" = ( -/obj/item/rig_module/chem_dispenser/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOj" = ( -/obj/item/weapon/reagent_containers/food/condiment/vinegar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOn" = ( -/obj/item/clothing/gloves/arm_guard/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOp" = ( -/obj/item/clothing/under/pants/baggy/camo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOs" = ( -/obj/machinery/hyperpad{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOw" = ( -/obj/item/clothing/accessory/solgov/specialty/forensic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOy" = ( -/obj/item/mecha_parts/part/scarab_right_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOA" = ( -/obj/structure/sign/deck/first, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOH" = ( -/obj/item/organ/internal/regennetwork/burn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOI" = ( -/obj/item/weapon/surgical/cautery/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOJ" = ( -/obj/item/toy/redbutton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gOT" = ( -/obj/item/weapon/reagent_containers/food/snacks/donerkebab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPr" = ( -/obj/item/clothing/head/helmet/space/void/security/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPs" = ( -/obj/item/weapon/soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPu" = ( -/obj/structure/cult/pylon/swarm/zp_well, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPz" = ( -/obj/item/organ/internal/brain/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPB" = ( -/obj/structure/bed/chair/sofa/left/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPC" = ( -/obj/item/weapon/circuitboard/grinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPH" = ( -/obj/structure/sign/flag/almach_a/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPN" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPR" = ( -/obj/machinery/porta_turret/lasertag/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPU" = ( -/obj/structure/sign/biohazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPV" = ( -/obj/item/weapon/technomancer_core/unstable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gPZ" = ( -/obj/item/weapon/gun/energy/laser/sleek, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQf" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQg" = ( -/obj/item/weapon/kitchenknife/tacknife/unathiknife/fluff/eravik_vessi_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQi" = ( -/obj/item/weapon/handcuffs/cable/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQn" = ( -/obj/item/weapon/reagent_containers/food/snacks/ovenfries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQs" = ( -/obj/item/weapon/storage/box/fluff/natalya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQt" = ( -/obj/machinery/recharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQB" = ( -/mob/living/simple_mob/creature{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gQD" = ( -/obj/item/clothing/under/dress/hightrousers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQE" = ( -/obj/structure/bed/chair/sofa/right/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gQU" = ( -/obj/structure/janitorialcart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRc" = ( -/obj/item/integrated_circuit/converter/findstring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRd" = ( -/obj/mecha/working/hoverpod/shuttlecraft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRj" = ( -/obj/item/weapon/storage/box/glasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRm" = ( -/obj/item/clothing/glasses/sunglasses/blindfold/tape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRJ" = ( -/obj/item/weapon/tank/stasis/nitro_cryo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRL" = ( -/obj/item/clothing/head/beret/solgov/fleet/dress/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRN" = ( -/obj/item/clothing/suit/space/void/refurb/medical/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRT" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gRU" = ( -/obj/machinery/drone_fabricator/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSe" = ( -/obj/item/weapon/storage/box/lights, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSl" = ( -/obj/item/clothing/head/hood/winter/engineering/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSo" = ( -/obj/item/ammo_magazine/clip/c762/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSx" = ( -/obj/item/weapon/melee/energy/sword/ionic_rapier/lance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSz" = ( -/mob/living/simple_mob/otie/security{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gSA" = ( -/obj/item/clothing/gloves/weddingring/fluff/vanesa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSB" = ( -/obj/machinery/door/airlock/maintenance/common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSE" = ( -/obj/item/bodybag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSG" = ( -/obj/item/weapon/commcard/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSM" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/salsa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gSW" = ( -/obj/item/toy/figure/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTb" = ( -/obj/item/weapon/gun/projectile/heavysniper/collapsible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTj" = ( -/obj/item/clothing/accessory/armor/tag/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTl" = ( -/obj/item/weapon/implant/language, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTt" = ( -/obj/structure/bed/chair/bay/comfy/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTu" = ( -/obj/item/weapon/stock_parts/capacitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTx" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTD" = ( -/obj/item/weapon/disk/nifsoft/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTG" = ( -/obj/item/weapon/gun/projectile/derringer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTI" = ( -/obj/item/weapon/fossil/skull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTN" = ( -/obj/item/weapon/implant/reagent_generator/yonra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTR" = ( -/obj/item/toy/figure/bartender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gTY" = ( -/obj/machinery/power/smes/batteryrack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gUj" = ( -/obj/item/clothing/head/det/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gUr" = ( -/obj/trader/capture_crystal/cash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gUz" = ( -/obj/item/ammo_magazine/s45/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gUI" = ( -/obj/item/ammo_casing/microbattery/combat/lethal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gUO" = ( -/obj/item/clothing/accessory/armor/armorplate/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVg" = ( -/obj/item/weapon/storage/backpack/satchel/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVk" = ( -/obj/item/weapon/gun/energy/mouseray/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVp" = ( -/obj/item/organ/internal/immunehub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVs" = ( -/mob/living/simple_mob/vore/aggressive/corrupthound{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gVC" = ( -/obj/item/clothing/accessory/tie/darkgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVH" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/boarder{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gVL" = ( -/obj/item/ammo_magazine/m5mmcaseless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gVW" = ( -/obj/structure/sign/levels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWa" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWc" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWg" = ( -/obj/item/stack/material/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWi" = ( -/obj/item/ammo_magazine/m45tommydrum/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWw" = ( -/obj/item/slimepotion/docility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWA" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/hectate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWB" = ( -/obj/structure/sign/flag/shadowcoalition, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWC" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWM" = ( -/obj/structure/closet/crate/mimic/guaranteed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWP" = ( -/obj/item/weapon/pen/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWQ" = ( -/obj/item/trash/gumpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWX" = ( -/obj/item/weapon/storage/box/casino/costume_plaguedoctor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gWY" = ( -/obj/item/clothing/under/lawyer/bluesuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXb" = ( -/obj/item/weapon/implanter/compressed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXf" = ( -/obj/machinery/light_construct/floortube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXh" = ( -/obj/item/clothing/head/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXq" = ( -/obj/item/weapon/dice/d8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXs" = ( -/mob/living/simple_mob/mobs_monsters/clowns/honkmunculus{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gXu" = ( -/obj/item/device/holomap_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXv" = ( -/obj/item/clothing/head/helmet/fluff/freddy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXx" = ( -/obj/item/clothing/accessory/poncho/cloak/fluff/mocha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXC" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXF" = ( -/obj/item/clothing/suit/space/void/heck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXH" = ( -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXJ" = ( -/obj/item/mecha_parts/component/actuator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gXO" = ( -/mob/living/silicon/robot/syndicate/protector, -/turf/simulated/floor/atoll, -/area/survivalpod) -"gYc" = ( -/obj/item/weapon/disk/limb/white_kryten, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYj" = ( -/obj/item/clothing/ears/skrell/band/bluejewels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYo" = ( -/obj/machinery/ion_engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYq" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/surplus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYy" = ( -/obj/item/clothing/gloves/weddingring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYD" = ( -/obj/item/ammo_casing/a12g/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYJ" = ( -/obj/item/clothing/under/pants/baggy/greyjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYP" = ( -/obj/item/weapon/reagent_containers/food/snacks/croutons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYQ" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYR" = ( -/obj/item/clothing/head/helmet/space/void/refurb/pilot/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gYU" = ( -/obj/item/clothing/shoes/flats, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZf" = ( -/obj/item/weapon/spacecash/c1000, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZi" = ( -/obj/item/weapon/reagent_containers/food/snacks/ghostburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZn" = ( -/obj/item/clothing/head/helmet/material/makeshift/durasteel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZw" = ( -/obj/item/clothing/under/rank/khi/cmd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZz" = ( -/obj/structure/sign/kiddieplaque/poi3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZD" = ( -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZH" = ( -/obj/item/weapon/material/knife/ritual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZK" = ( -/obj/item/weapon/storage/part_replacer/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZO" = ( -/obj/item/weapon/storage/pill_bottle/imidazoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZX" = ( -/obj/item/weapon/bedsheet/rainbowdouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"gZY" = ( -/obj/item/weapon/storage/pill_bottle/osteodaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hab" = ( -/obj/structure/curtain/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"har" = ( -/obj/item/device/flash/synthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hat" = ( -/obj/item/clothing/head/pelt/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hav" = ( -/obj/structure/sign/department/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hax" = ( -/obj/item/clothing/suit/storage/greyjacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haE" = ( -/obj/item/weapon/melee/shock_maul/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haL" = ( -/obj/item/clothing/accessory/poncho/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haM" = ( -/obj/item/clothing/suit/storage/saare/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haN" = ( -/obj/machinery/vending/fooditalian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haQ" = ( -/obj/item/clothing/suit/space/void/responseteam/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"haZ" = ( -/obj/item/clothing/head/helmet/space/capspace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbd" = ( -/obj/item/device/assembly/voice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbf" = ( -/obj/structure/sign/directions/dock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbh" = ( -/obj/machinery/atmospherics/binary/circulator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbm" = ( -/obj/item/clothing/suit/storage/solgov/service/army/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbE" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/deadrum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbI" = ( -/obj/structure/closet/crate/ummarcar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbK" = ( -/obj/item/weapon/reagent_containers/food/snacks/rawmeatball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbM" = ( -/obj/item/weapon/reagent_containers/food/snacks/pineappleslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbN" = ( -/obj/item/weapon/storage/box/tgmc_mre, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbS" = ( -/obj/structure/sign/directions/medical/resleeving, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbU" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hbX" = ( -/obj/machinery/computer/timeclock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hch" = ( -/obj/item/clothing/accessory/jacket/altevian/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hci" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcj" = ( -/obj/item/weapon/reagent_containers/food/snacks/chilicheesefries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcn" = ( -/obj/item/seeds/towermycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcq" = ( -/obj/machinery/suit_cycler/vintage/medsci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcr" = ( -/obj/structure/sign/levels/engineering/engeqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcz" = ( -/obj/item/weapon/storage/mrebag/dessert/menu11, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcE" = ( -/obj/item/clothing/suit/storage/vest/solgov/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcG" = ( -/obj/item/clothing/shoes/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcI" = ( -/obj/machinery/vending/engivend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcJ" = ( -/obj/structure/sign/level/two, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcR" = ( -/obj/item/rig_module/cleaner_launcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcT" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_lightgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcU" = ( -/obj/item/weapon/tank/emergency/oxygen/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hcY" = ( -/obj/item/clothing/under/cheongsam/darkred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdd" = ( -/obj/item/weapon/reagent_containers/food/snacks/snakesnack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdr" = ( -/obj/item/weapon/soap/green_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdC" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/applecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdE" = ( -/obj/machinery/door/airlock/maintenance/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdH" = ( -/obj/item/weapon/storage/bag/ore/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdP" = ( -/obj/structure/closet/crate/secure/einstein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdY" = ( -/obj/item/clothing/accessory/armband/medblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hdZ" = ( -/obj/item/device/electronic_assembly/tiny/scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hea" = ( -/obj/item/clothing/suit/fluff/nikki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hed" = ( -/obj/item/trash/pocky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hee" = ( -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hel" = ( -/obj/item/weapon/rig/pmc/commander/grey/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hem" = ( -/obj/item/clothing/head/philosopher_wig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hen" = ( -/obj/structure/bed/chair/bay/chair/padded/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"het" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin_p, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hex" = ( -/obj/item/weapon/telecube/precursor/mated/mirrorcolor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heA" = ( -/obj/item/weapon/reagent_containers/syringe/ld50_syringe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heB" = ( -/obj/item/weapon/cell/device/empproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heC" = ( -/obj/item/weapon/storage/box/wormcan/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heH" = ( -/obj/item/weapon/implantcase/exile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heV" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"heZ" = ( -/obj/item/weapon/bedsheet/hopdouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfx" = ( -/obj/item/weapon/bedsheet/yellowdouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfA" = ( -/obj/item/integrated_circuit/arithmetic/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfC" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/peppergrinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfE" = ( -/obj/structure/fence/door/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfI" = ( -/obj/item/organ/internal/appendix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfK" = ( -/obj/item/clothing/accessory/tie/red_clip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfP" = ( -/obj/item/clothing/suit/chef/classic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfS" = ( -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hfZ" = ( -/obj/item/clothing/gloves/ring/engagement, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgr" = ( -/obj/item/seeds/deathnettleseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgs" = ( -/obj/structure/prop/machine/tgmc_console2/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgt" = ( -/obj/item/weapon/storage/secure/briefcase/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgA" = ( -/mob/living/simple_mob/vore/redpanda{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hgB" = ( -/obj/item/weapon/dnainjector/m2h, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgC" = ( -/obj/item/taperoll/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgI" = ( -/obj/item/clothing/accessory/badge/solgov/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgJ" = ( -/obj/item/clothing/gloves/sterile/latex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hgX" = ( -/obj/item/clothing/under/rank/centcom_captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhk" = ( -/obj/machinery/power/fusion_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhp" = ( -/obj/item/weapon/storage/pill_bottle/alkysine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhq" = ( -/obj/item/toy/plushie/lizardplushie/kobold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhH" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhM" = ( -/obj/item/clothing/suit/storage/hooded/knight_costume/robin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhR" = ( -/obj/item/clothing/gloves/ring/seal/secgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhT" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhU" = ( -/obj/item/weapon/book/manual/bar_guide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhW" = ( -/mob/living/simple_mob/vore/alienanimals/catslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hhY" = ( -/obj/structure/sign/xenobio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hhZ" = ( -/obj/machinery/disposal/deliveryChute, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hid" = ( -/obj/item/integrated_circuit/input/toggle_button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hie" = ( -/obj/structure/sign/deck/third, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hig" = ( -/obj/item/stack/tile/carpet/oracarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hih" = ( -/obj/machinery/exonet_node, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiy" = ( -/obj/item/device/electronic_assembly/drone/android, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiA" = ( -/obj/machinery/vending/security/yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiG" = ( -/obj/item/clothing/accessory/material/makeshift/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiL" = ( -/obj/item/clothing/under/cohesion/pattern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiU" = ( -/obj/item/weapon/storage/bag/circuits/mini/memory/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hiW" = ( -/obj/item/weapon/storage/backpack/dufflebag/cratedrills, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjh" = ( -/obj/machinery/computer/pod/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjm" = ( -/obj/item/stack/tile/floor/eris/steel/gray_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjs" = ( -/obj/item/mecha_parts/part/scarab_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hju" = ( -/obj/item/integrated_circuit/input/sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjA" = ( -/obj/item/clothing/under/dress/sari/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjW" = ( -/obj/item/weapon/refill_cartridge/autoname/food/snlvend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hjZ" = ( -/obj/item/weapon/gun/projectile/p92x/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkc" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hks" = ( -/obj/item/clothing/head/jingasa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkt" = ( -/obj/item/weapon/gun/energy/decloner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkv" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkw" = ( -/obj/mecha/combat/durand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkz" = ( -/obj/machinery/light/floortube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkA" = ( -/obj/structure/closet/crate/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkE" = ( -/obj/structure/prop/statue/statue1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkI" = ( -/obj/item/weapon/reagent_containers/glass/bottle/oxycodone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkL" = ( -/mob/living/simple_mob/humanoid/cultist/hunter/surt{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hkM" = ( -/obj/item/weapon/storage/pouch/baton/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkO" = ( -/obj/item/weapon/cell/giga, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hkT" = ( -/mob/living/simple_mob/animal/passive/snake/red{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hkW" = ( -/obj/item/device/integrated_electronics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hla" = ( -/obj/item/stack/tile/floor/eris/white/monofloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlc" = ( -/mob/living/silicon/robot/platform/explorer, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hlg" = ( -/obj/item/toy/figure/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlk" = ( -/obj/structure/sign/levels/science/xenobiology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hll" = ( -/obj/item/clothing/under/rank/geneticist/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlr" = ( -/obj/item/clothing/suit/storage/solgov/dress/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hls" = ( -/obj/item/device/gps/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlB" = ( -/obj/item/stack/material/glass/phoronrglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlD" = ( -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlK" = ( -/obj/item/weapon/aiModule/consuming_eradicator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlN" = ( -/obj/structure/noticeboard/library, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlO" = ( -/obj/item/weapon/gun/energy/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlP" = ( -/obj/item/clothing/under/rank/trek/eng/voy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hlY" = ( -/obj/item/integrated_circuit/arithmetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hma" = ( -/obj/item/weapon/storage/belt/utility/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmc" = ( -/obj/item/weapon/storage/box/holobadge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmh" = ( -/obj/item/clothing/under/color/fjumpsuit/maroonf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmm" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmn" = ( -/obj/structure/sign/department/gene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmr" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmu" = ( -/obj/machinery/shipsensors/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmv" = ( -/obj/item/ammo_magazine/m45uzi/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmw" = ( -/obj/item/weapon/storage/box/fluff/saroth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmB" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmI" = ( -/obj/item/clothing/under/away/daedalus/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmK" = ( -/obj/item/clothing/accessory/collar/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmL" = ( -/obj/machinery/power/rtg/reg/c, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmP" = ( -/obj/item/clothing/accessory/badge/holo/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmS" = ( -/obj/machinery/vending/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmW" = ( -/obj/item/ammo_magazine/m12gdrum/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hmX" = ( -/obj/item/weapon/card/id/event/altcard/pinkgold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnc" = ( -/obj/structure/bed/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hny" = ( -/obj/item/clothing/head/helmet/space/vox/civ/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnz" = ( -/obj/item/weapon/reagent_containers/pill/carthatoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnD" = ( -/obj/item/mecha_parts/part/janus_right_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnG" = ( -/obj/item/ammo_casing/microbattery/medical/shrink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnH" = ( -/obj/structure/largecrate/animal/weretiger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnP" = ( -/obj/item/weapon/implant/language/eal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnS" = ( -/obj/item/clothing/head/hood/winter/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnV" = ( -/obj/item/clothing/head/helmet/space/vox/civ/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hnW" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoj" = ( -/obj/item/clothing/accessory/wcoat/swvest/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoq" = ( -/obj/item/weapon/circuitboard/firework_launcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hos" = ( -/obj/item/weapon/storage/backpack/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoA" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoH" = ( -/obj/item/weapon/circuitboard/telecomms/pda_multicaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoM" = ( -/mob/living/bot/farmbot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hoT" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hoU" = ( -/obj/item/clothing/suit/armor/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hoW" = ( -/mob/living/simple_mob/humanoid/cultist/magus{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hoX" = ( -/obj/structure/closet/crate/large/secure/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpd" = ( -/obj/item/weapon/storage/box/fluff/amara, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpm" = ( -/obj/item/honey_frame/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpz" = ( -/obj/machinery/door/airlock/angled_bay/elevator/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpC" = ( -/obj/item/clothing/suit/storage/vest/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpK" = ( -/obj/item/weapon/tank/emergency/nitrogen/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpP" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/vintage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hpQ" = ( -/obj/item/clothing/gloves/fluff/siren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqc" = ( -/obj/item/weedkiller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqd" = ( -/obj/item/weapon/storage/box/fluff/drake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqf" = ( -/obj/item/weapon/rig/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqg" = ( -/obj/structure/sign/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqs" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqx" = ( -/obj/item/weapon/storage/pill_bottle/peridaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqE" = ( -/obj/item/weapon/storage/box/monkeycubes/neaeracubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqI" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqK" = ( -/obj/item/clothing/mask/breath/transparent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqU" = ( -/obj/machinery/pipelayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hqX" = ( -/obj/item/clothing/shoes/dress/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hra" = ( -/obj/item/weapon/reagent_containers/glass/bottle/poppy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrc" = ( -/obj/item/clothing/suit/armor/pcarrier/tan/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrd" = ( -/obj/machinery/holoplant/shipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrf" = ( -/obj/item/weapon/circuitboard/chem_master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrj" = ( -/obj/item/clothing/accessory/medal/solgov/gold/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hro" = ( -/obj/item/weapon/bikehorn/fluff/chew_ire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrp" = ( -/obj/item/weapon/storage/pill_bottle/myelamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrw" = ( -/obj/item/weapon/storage/wallet/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrE" = ( -/obj/item/weapon/book/custom_library/fiction/woodysgotwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrK" = ( -/obj/machinery/gear_dispenser/suit/autolok, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrO" = ( -/obj/item/device/eftpos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrR" = ( -/obj/item/clothing/under/rank/trek/command/ds9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrS" = ( -/obj/machinery/light/small/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hrZ" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsf" = ( -/obj/item/trash/tomato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsh" = ( -/obj/structure/closet/secure_closet/posters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hso" = ( -/obj/structure/drop_pod/polite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsr" = ( -/obj/structure/plushie/ian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hst" = ( -/obj/item/device/survivalcapsule/luxurybar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsw" = ( -/obj/item/weapon/spell/control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsA" = ( -/obj/item/seeds/whitebeetseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsK" = ( -/obj/machinery/sparker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsO" = ( -/obj/machinery/button/remote/blast_door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsS" = ( -/obj/item/weapon/storage/box/holowarrants, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hsX" = ( -/obj/item/weapon/circuitboard/roguezones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htd" = ( -/obj/item/weapon/reagent_containers/food/snacks/microfries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hti" = ( -/obj/item/ammo_magazine/tp23/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htr" = ( -/obj/item/weapon/staff/gentcane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htt" = ( -/obj/item/weapon/reagent_containers/glass/bottle/dermaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htE" = ( -/obj/machinery/holosign/surgery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htF" = ( -/obj/machinery/telepad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htG" = ( -/obj/item/weapon/storage/lockbox/medal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htH" = ( -/obj/item/weapon/implanter/reagent_generator/vorrarkul, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htJ" = ( -/obj/item/device/electronic_assembly/drone/genbot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htQ" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htR" = ( -/obj/item/weapon/storage/backpack/sport/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htT" = ( -/obj/item/clothing/suit/armor/pcarrier/press, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htX" = ( -/obj/item/weapon/reagent_containers/rollingpaper/blunt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"htY" = ( -/obj/item/weapon/disk/limb/grayson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hue" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huf" = ( -/obj/mecha/combat/gygax/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huh" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/banana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hul" = ( -/obj/item/gunbox/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hun" = ( -/obj/item/clothing/under/away/patrol/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hus" = ( -/obj/structure/sign/flag/nt/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huz" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/applejuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huJ" = ( -/obj/item/clothing/accessory/solgov/department/exploration/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huK" = ( -/obj/machinery/door/blast/multi_tile/four_tile_hor_sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huN" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/grapesoda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"huP" = ( -/obj/machinery/doppler_array, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hve" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvg" = ( -/obj/item/clothing/accessory/solgov/department/service/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvn" = ( -/obj/item/weapon/inducer/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvx" = ( -/mob/living/simple_mob/xeno_ch/hunter, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hvy" = ( -/obj/item/ammo_magazine/chemdart/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvD" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/braincake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvG" = ( -/obj/item/clothing/under/corp/hedbergtech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvM" = ( -/obj/item/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hvV" = ( -/obj/item/clothing/mask/chewable/tobacco/fine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwb" = ( -/obj/item/weapon/storage/box/ambrosia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwd" = ( -/obj/item/device/assembly/mousetrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwn" = ( -/obj/machinery/door/blast/angled_shutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwr" = ( -/obj/item/clothing/under/utility/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwt" = ( -/obj/item/clothing/accessory/storage/pouches, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hww" = ( -/obj/item/weapon/circuitboard/miningdrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwy" = ( -/obj/item/organ/internal/lungs/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwY" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat/sam_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hwZ" = ( -/obj/item/weapon/thecake_layer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxc" = ( -/obj/item/clothing/suit/storage/miljacket/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxh" = ( -/obj/item/clothing/head/helmet/space/void/mining/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxz" = ( -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxK" = ( -/obj/machinery/chemical_dispenser/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxM" = ( -/obj/structure/prop/rock/waterflat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxT" = ( -/obj/item/weapon/gun/projectile/revolver/toy/crossbow/halloween, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxX" = ( -/obj/item/clothing/under/tribalwear/common2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hxY" = ( -/obj/item/ammo_magazine/ammo_box/b38, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hya" = ( -/obj/item/stack/tile/floor/eris, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyd" = ( -/obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyx" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyF" = ( -/obj/item/ammo_casing/a357/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyJ" = ( -/obj/item/weapon/circuitboard/card/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyK" = ( -/obj/item/clothing/shoes/boots/workboots/toeless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyM" = ( -/obj/machinery/artifact/predefined, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyO" = ( -/obj/item/toy/plushie/teshari/w_yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hyP" = ( -/obj/item/ammo_magazine/m762, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzb" = ( -/obj/item/clothing/under/color/ranger/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzi" = ( -/obj/item/clothing/mask/gas/plaguedoctor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzs" = ( -/obj/item/weapon/pickaxe/brush, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzF" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzH" = ( -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzM" = ( -/obj/item/ammo_magazine/mglock9mm/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzN" = ( -/obj/item/clothing/under/corp/focal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hzV" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAc" = ( -/obj/item/clothing/under/color/fjumpsuit/darkbluef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAv" = ( -/obj/structure/bed/chair/sofa/left/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAx" = ( -/obj/item/weapon/storage/secure/briefcase/fuelrod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAy" = ( -/obj/structure/sign/scenery/map/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAB" = ( -/obj/item/clothing/head/welding/engie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAK" = ( -/obj/item/rig_module/protean/healing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAN" = ( -/obj/item/clothing/gloves/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAP" = ( -/obj/item/weapon/tank/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hAU" = ( -/obj/structure/barricade/cutout/ian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBa" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBc" = ( -/obj/item/organ/internal/robotic/heatsink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBh" = ( -/obj/item/weapon/implant/compliance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBs" = ( -/obj/item/weapon/storage/box/monkeycubes/stokcubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBu" = ( -/obj/item/weapon/gun/energy/ionrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBw" = ( -/obj/item/weapon/material/knife/machete/hatchet/unathiknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBz" = ( -/obj/machinery/door/airlock/angled_tgmc/prep/prep_charlie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBJ" = ( -/obj/item/clothing/head/service/sifguard/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBK" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBU" = ( -/obj/item/integrated_circuit/input/co2_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBV" = ( -/obj/item/clothing/head/beret/solgov/sifguard/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hBW" = ( -/obj/item/weapon/reagent_containers/glass/cooler_bottle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCc" = ( -/obj/structure/reflector/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCh" = ( -/obj/structure/old_roboprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCm" = ( -/obj/structure/closet/excavation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCo" = ( -/obj/machinery/computer/security/wooden_tv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCp" = ( -/obj/item/weapon/storage/secure/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCu" = ( -/obj/item/clothing/head/collectable/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCG" = ( -/obj/item/stack/tile/floor/steel_dirty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCR" = ( -/obj/structure/salvageable/shuttle_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hCT" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/cdr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDa" = ( -/obj/item/clothing/under/dress/verglasdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDb" = ( -/obj/item/toy/plushie/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDg" = ( -/obj/item/weapon/reagent_containers/glass/paint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDh" = ( -/obj/machinery/organ_printer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDl" = ( -/obj/item/weapon/reagent_containers/food/snacks/mimeburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDo" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDp" = ( -/obj/item/weapon/spell/apportation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDs" = ( -/obj/item/clothing/under/rank/head_of_personnel_whimsy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDv" = ( -/mob/living/simple_mob/mechanical/corrupt_maint_drone{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hDx" = ( -/obj/item/stack/material/cloth{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDC" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDT" = ( -/obj/item/clothing/suit/varsity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDW" = ( -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hDX" = ( -/obj/item/clothing/accessory/fluff/lena_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEe" = ( -/obj/item/weapon/reagent_containers/glass/bottle/osteodaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEh" = ( -/obj/item/weapon/reagent_containers/food/snacks/amanitajelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEk" = ( -/obj/item/clothing/head/beret/solgov/marcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEn" = ( -/obj/item/flag/fivearrows, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEo" = ( -/obj/item/clothing/accessory/altevian_badge/aquila, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEq" = ( -/obj/item/weapon/circuitboard/disperser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEs" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEu" = ( -/obj/item/seeds/kudzuseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEw" = ( -/mob/living/simple_mob/glitch_boss_fake/strong{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hEC" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb05, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEF" = ( -/obj/item/weapon/gun/energy/locked/frontier/carbine/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEH" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEP" = ( -/obj/item/clothing/accessory/holster/hip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hEZ" = ( -/obj/item/weapon/paper/Cloning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFa" = ( -/obj/item/clothing/under/dress/dress_hr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFb" = ( -/obj/machinery/conveyor_switch/oneway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFd" = ( -/obj/item/weapon/inducer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFh" = ( -/obj/machinery/pipedispenser/disposal/orderable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFi" = ( -/obj/item/clothing/glasses/regular, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFl" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFp" = ( -/obj/item/organ/internal/xenos/hivenode, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFq" = ( -/obj/item/seeds/chantermycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFs" = ( -/obj/structure/bed/chair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFv" = ( -/obj/item/weapon/tool/crowbar/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFC" = ( -/obj/item/clothing/under/solgov/mildress/army/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFJ" = ( -/obj/machinery/computer/transhuman/designer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFS" = ( -/obj/item/weapon/smes_coil/super_capacity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFT" = ( -/obj/item/clothing/ears/earings/fluff/noel_earings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFV" = ( -/obj/item/clothing/accessory/poncho, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hFY" = ( -/obj/item/weapon/melee/baton/fluff/stunstaff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGa" = ( -/obj/structure/closet/secure_closet/egg/scree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGx" = ( -/obj/item/seeds/bluetomatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGy" = ( -/obj/item/weapon/reagent_containers/food/snacks/beans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGF" = ( -/obj/item/device/encryptionkey/headset_rob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGH" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGJ" = ( -/obj/item/clothing/suit/space/vox/civ/science/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGP" = ( -/obj/item/organ/internal/lungs/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGQ" = ( -/obj/item/clothing/under/rank/security/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGR" = ( -/obj/item/clothing/under/teshari/undercoat/standard/orange_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGV" = ( -/obj/item/ammo_casing/a44/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hGW" = ( -/obj/item/weapon/circuitboard/newscaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHp" = ( -/obj/item/weapon/cell/device/super/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHu" = ( -/obj/item/weapon/storage/backpack/satchel/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHA" = ( -/obj/item/clothing/under/color/fjumpsuit/brownf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHD" = ( -/obj/item/bodybag/cryobag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHJ" = ( -/obj/item/device/modkit_conversion/fluff/screekit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHK" = ( -/obj/item/weapon/reagent_containers/food/snacks/fortunecookie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHN" = ( -/obj/machinery/transportpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHS" = ( -/obj/item/stack/material/cardboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hHV" = ( -/obj/structure/sign/flag/almach_p/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIc" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIf" = ( -/obj/structure/closet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIw" = ( -/obj/item/clothing/under/color/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIy" = ( -/obj/machinery/atmospherics/pipe/zpipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIA" = ( -/obj/item/weapon/reagent_containers/food/drinks/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIE" = ( -/obj/structure/closet/crate/grayson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIN" = ( -/obj/item/clothing/head/soft/solgov/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIO" = ( -/obj/item/clothing/accessory/solgov/specialty/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIP" = ( -/obj/machinery/reagentgrinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIV" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/spas35, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hIZ" = ( -/obj/item/clothing/head/cowboy/wide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJc" = ( -/obj/item/weapon/stamp/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJi" = ( -/obj/item/clothing/suit/armor/centcomm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJm" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/drab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJp" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/pink_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJq" = ( -/obj/item/clothing/glasses/monocle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJr" = ( -/obj/item/weapon/circuitboard/smes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJs" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJv" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/green_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJB" = ( -/obj/item/clothing/under/tribalwear/chief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJI" = ( -/obj/item/slimepotion/reinvigoration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJL" = ( -/obj/item/ammo_magazine/m2024, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJU" = ( -/obj/structure/closet/secure_closet/hop2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJW" = ( -/obj/item/clothing/accessory/sweater/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJX" = ( -/obj/structure/sign/poster/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hJY" = ( -/obj/item/clothing/under/terran/navy/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKa" = ( -/obj/item/weapon/tool/wirecutters/chainsaw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKc" = ( -/obj/item/seeds/deathberryseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKe" = ( -/mob/living/simple_mob/vore/leopardmander/exotic{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hKj" = ( -/obj/item/clothing/gloves/ring/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKk" = ( -/obj/machinery/door/airlock/angled_bay/hatch/explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKs" = ( -/obj/item/clothing/under/pants/blackjeans/ripped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKA" = ( -/obj/item/clothing/suit/space/vox/civ/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKB" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hKF" = ( -/obj/item/stack/marker_beacon/thirty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hKU" = ( -/obj/item/weapon/gun/energy/gun/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLc" = ( -/obj/item/toy/plushie/lizardplushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLs" = ( -/obj/machinery/suit_cycler/vintage/tguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLw" = ( -/mob/living/simple_mob/animal/passive/fish/javelin, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"hLx" = ( -/obj/item/weapon/reagent_containers/glass/paint/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLC" = ( -/obj/structure/sign/department/gravi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLE" = ( -/obj/item/trash/ntbeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLG" = ( -/obj/item/organ/internal/heart/replicant/rage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLJ" = ( -/obj/item/weapon/gun/projectile/m2024, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLR" = ( -/obj/item/clothing/under/hosformalfem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLU" = ( -/obj/item/toy/tennis/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLX" = ( -/obj/item/weapon/computer_hardware/battery_module/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hLY" = ( -/obj/machinery/vr_sleeper/alien/alpha_replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMa" = ( -/obj/item/seeds/berryseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMc" = ( -/obj/item/device/kit/paint/ripley/flames_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMd" = ( -/obj/item/clothing/under/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMe" = ( -/obj/item/trash/oort, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMf" = ( -/obj/item/clothing/head/crown/goose_king/christmas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMg" = ( -/obj/item/device/electronic_assembly/tiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMj" = ( -/obj/item/weapon/implantcase/analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMk" = ( -/obj/item/weapon/storage/pouch/flares/full_glow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMt" = ( -/obj/item/stack/material/verdantium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMu" = ( -/obj/item/clothing/head/cowboy/rattan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMx" = ( -/obj/item/weapon/storage/box/snakesnackbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMA" = ( -/obj/item/clothing/accessory/badge/solgov/representative, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMH" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMI" = ( -/obj/item/weapon/gun/projectile/automatic/fal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMK" = ( -/obj/structure/sign/directions/library, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hML" = ( -/obj/item/clothing/suit/maxman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMM" = ( -/obj/item/weapon/card/id/event/polymorphic/altcard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hMO" = ( -/obj/item/clothing/accessory/sweater/redneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNa" = ( -/obj/item/weapon/reagent_containers/pill/hyronalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNb" = ( -/obj/machinery/light/no_nightshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNv" = ( -/obj/item/rig_module/chem_dispenser/injector/advanced/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNB" = ( -/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hNE" = ( -/mob/living/simple_mob/animal/borer/non_antag, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hNG" = ( -/obj/item/clothing/head/helmet/space/void/merc/odst, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNK" = ( -/obj/structure/closet/crate/large/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNL" = ( -/obj/item/toy/plushie/nukeplushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNO" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNR" = ( -/obj/machinery/vending/foodstuffing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hNV" = ( -/obj/item/device/encryptionkey/headset_sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOi" = ( -/obj/item/weapon/storage/pill_bottle/healing_nanites, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOm" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOn" = ( -/obj/item/seeds/grassseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOp" = ( -/obj/item/clothing/glasses/fluff/avigoggles_yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOt" = ( -/obj/item/clothing/accessory/pride/lesbian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOA" = ( -/mob/living/simple_mob/construct/artificer{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hOB" = ( -/obj/item/clothing/under/suit_jacket/navy/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOC" = ( -/obj/item/toy/figure/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOK" = ( -/obj/item/ammo_magazine/m75, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hOT" = ( -/obj/item/weapon/slime_grinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPn" = ( -/obj/machinery/vr_sleeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPo" = ( -/obj/item/device/multitool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPs" = ( -/obj/item/weapon/soap/cyan_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPy" = ( -/obj/item/weapon/reagent_containers/glass/paint/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPE" = ( -/obj/structure/sign/directions/medical/cloning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPO" = ( -/obj/item/weapon/reagent_containers/food/snacks/crab_legs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPP" = ( -/obj/item/seeds/berryseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hPZ" = ( -/mob/living/simple_mob/animal/space/bats{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hQe" = ( -/obj/item/seeds/onionseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQk" = ( -/obj/item/weapon/pickaxe/advdrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQt" = ( -/obj/item/weapon/rig/ch/aegis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQv" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQw" = ( -/obj/item/seeds/plastellmycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQB" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQC" = ( -/obj/item/ammo_casing/a12g/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQH" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQK" = ( -/obj/item/weapon/circuitboard/mecha/gygax/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQM" = ( -/obj/item/weapon/plantspray/pests/old/carbaryl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQO" = ( -/obj/item/clothing/head/hood/kbraid_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hQR" = ( -/obj/item/weapon/storage/firstaid/clotting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRf" = ( -/obj/structure/closet/boxinggloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRi" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/alkysine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRj" = ( -/obj/item/weapon/circuitboard/fusion_fuel_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRl" = ( -/obj/item/weapon/circuitboard/shuttle_console/explore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRo" = ( -/obj/item/integrated_circuit/output/led/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRq" = ( -/obj/structure/reagent_dispensers/acid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRr" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratpacktaco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRC" = ( -/obj/item/ammo_magazine/ammo_box/b545/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hRL" = ( -/mob/living/simple_mob/humanoid/cultist/tesh{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hRX" = ( -/obj/item/clothing/under/corp/veymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSa" = ( -/obj/item/clothing/under/skirt/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSn" = ( -/obj/item/weapon/computer_hardware/battery_module/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSt" = ( -/obj/item/weapon/disposable_teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSw" = ( -/obj/item/trash/snack_bowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSy" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/grape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSH" = ( -/obj/item/xenos_claw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSY" = ( -/obj/item/clothing/under/gov/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hSZ" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTc" = ( -/obj/item/clothing/under/wedding/bride_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTh" = ( -/obj/item/clothing/accessory/storage/brown_vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTi" = ( -/obj/item/organ/internal/kidneys/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTn" = ( -/obj/item/device/electronic_assembly/medium/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTp" = ( -/obj/item/clothing/head/helmet/space/vox/civ/trader/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTs" = ( -/obj/item/weapon/spacecasinocash/c1000, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hTZ" = ( -/obj/item/clothing/head/beretg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUd" = ( -/obj/item/clothing/accessory/poncho/roles/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUf" = ( -/obj/item/toy/plushie/teshari/_yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUk" = ( -/obj/item/weapon/melee/energy/sword/charge/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUn" = ( -/obj/item/clothing/under/rank/captain/fluff/harmuniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUp" = ( -/obj/item/organ/internal/stomach/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUv" = ( -/obj/machinery/light/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUB" = ( -/obj/item/clothing/head/surgery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUF" = ( -/obj/machinery/door/airlock/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUI" = ( -/obj/item/weapon/storage/backpack/clown/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUP" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/corophizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUV" = ( -/obj/structure/sign/scenery/overlay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUX" = ( -/obj/structure/closet/crate/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hUZ" = ( -/obj/item/weapon/syndie/c4explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVd" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVe" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVg" = ( -/obj/item/device/threadneedle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVo" = ( -/obj/item/clothing/accessory/poncho/thermal/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVu" = ( -/obj/structure/ghost_pod/manual/cursedblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVy" = ( -/obj/item/ammo_magazine/m9mm/large/preban, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVI" = ( -/obj/item/clothing/accessory/solgov/department/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVP" = ( -/obj/item/weapon/stock_parts/scanning_module/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVR" = ( -/obj/item/stack/tile/floor/eris/dark/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hVU" = ( -/obj/item/weapon/implant/tracking, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWd" = ( -/obj/item/toy/plushie/carp/candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWf" = ( -/mob/living/simple_mob/metroid/juvenile{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hWj" = ( -/obj/item/weapon/gun/energy/mouseray/chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWo" = ( -/obj/item/weapon/storage/toolbox/lunchbox/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWp" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/old/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWt" = ( -/obj/item/weapon/dnainjector/antitour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWB" = ( -/obj/structure/closet/crate/critter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWD" = ( -/obj/structure/sign/department/robo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWO" = ( -/obj/item/clothing/shoes/sandal/marisa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWT" = ( -/obj/item/clothing/head/helmet/space/void/refurb/mining/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWY" = ( -/obj/item/clothing/glasses/fakesunglasses/aviator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hWZ" = ( -/obj/item/clothing/head/hardhat/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXa" = ( -/mob/living/simple_mob/humanoid/pirate/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hXb" = ( -/obj/item/clothing/under/swimsuit/fluff/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXd" = ( -/obj/machinery/gear_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXi" = ( -/obj/structure/closet/crate/secure/ward, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXk" = ( -/obj/item/weapon/tank/oxygen/welded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXm" = ( -/obj/item/clothing/head/helmet/space/vox/civ/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXt" = ( -/obj/item/clothing/gloves/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXu" = ( -/obj/item/weapon/reagent_containers/pill/inaprovaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXy" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon_stick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXz" = ( -/obj/item/weapon/reagent_containers/food/snacks/flowerchildsalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXA" = ( -/obj/item/stack/tile/floor/eris/dark/panels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXB" = ( -/obj/item/clothing/suit/space/vox/civ/medical/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXD" = ( -/obj/item/weapon/mine/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXG" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/cheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXH" = ( -/obj/item/weapon/spell/aura/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXK" = ( -/obj/item/clothing/under/redcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXO" = ( -/obj/structure/closet/crate/secure/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXU" = ( -/obj/item/weapon/toy/desk/fan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hXZ" = ( -/obj/machinery/computer/security/telescreen/entertainment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYa" = ( -/obj/item/clothing/under/suit_jacket/checkered/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYk" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYl" = ( -/obj/item/weapon/handcuffs/fuzzy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYm" = ( -/obj/item/instrument/xylophone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYB" = ( -/obj/item/toy/snake_popper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYG" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYS" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/keltec/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYW" = ( -/obj/item/clothing/under/yw/victsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hYX" = ( -/obj/item/weapon/reagent_containers/food/snacks/hotdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZi" = ( -/obj/item/weapon/reagent_containers/food/snacks/omelette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZj" = ( -/obj/item/weapon/flame/candle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZp" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZx" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZz" = ( -/obj/item/weapon/pickaxe/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZC" = ( -/obj/item/clothing/accessory/bracelet/material/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZI" = ( -/obj/item/clothing/under/corp/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZJ" = ( -/obj/item/wheelchair/motor/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZL" = ( -/mob/living/simple_mob/animal/space/alien/drone{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"hZN" = ( -/obj/item/toy/mistletoe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZS" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/plamya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"hZU" = ( -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iag" = ( -/obj/machinery/portable_atmospherics/canister/empty/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaj" = ( -/obj/item/projectile/bullet/pistol/strong, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iax" = ( -/obj/item/clothing/shoes/boots/cowboy/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaz" = ( -/obj/item/weapon/commcard/head/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaG" = ( -/obj/item/clothing/mask/smokable/cigarette/joint/blunt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaQ" = ( -/mob/living/simple_mob/animal/passive/mouse/operative{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iaR" = ( -/obj/item/weapon/grenade/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaT" = ( -/obj/item/weapon/storage/box/fluff/tikorak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaU" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/exotic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iaV" = ( -/obj/item/weapon/reagent_containers/pill/paracetamol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibi" = ( -/obj/item/weapon/storage/box/donkpockets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibj" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibq" = ( -/obj/item/clothing/accessory/storage/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibB" = ( -/obj/item/clothing/under/color/fjumpsuit/lightpurplef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibC" = ( -/obj/structure/closet/secure_closet/egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibG" = ( -/obj/item/weapon/surgical/bone_clamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibM" = ( -/obj/item/weapon/grenade/explosive/mini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibO" = ( -/obj/structure/bed/chair/sofa/bench/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibP" = ( -/obj/item/clothing/suit/storage/explorer/security/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibV" = ( -/obj/item/weapon/storage/mrebag/menu7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ibZ" = ( -/obj/item/weapon/storage/mre/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ich" = ( -/obj/machinery/gear_dispenser/randomvoidsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icw" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icz" = ( -/obj/item/weapon/gun/projectile/automatic/battlerifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icH" = ( -/obj/item/clothing/suit/storage/terran/service/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icW" = ( -/obj/structure/bed/chair/sofa/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icY" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"icZ" = ( -/mob/living/simple_mob/shadekin/blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"idf" = ( -/obj/item/weapon/gun/launcher/rocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idl" = ( -/obj/item/clothing/shoes/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idx" = ( -/obj/item/clothing/under/pants/yogapants, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idy" = ( -/obj/item/device/encryptionkey/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idz" = ( -/obj/item/weapon/cell/device/hyper/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idD" = ( -/obj/item/device/modkit_conversion/fluff/skinner/a, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idI" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/taco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idN" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idO" = ( -/obj/item/clothing/under/syndicate/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idP" = ( -/obj/item/modular_computer/console/preset/sysadmin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idV" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"idY" = ( -/obj/item/weapon/storage/backpack/sport/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"idZ" = ( -/obj/mecha/combat/fighter/pinnace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iea" = ( -/obj/item/clothing/suit/leathercoat/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieo" = ( -/obj/item/slime_extract/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iev" = ( -/obj/structure/sign/department/chapel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iew" = ( -/obj/item/weapon/storage/box/glasses/square, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieA" = ( -/obj/item/clothing/head/welding/knight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieB" = ( -/obj/item/weapon/gun/launcher/crossbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieG" = ( -/obj/item/clothing/under/skirt/swept, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieH" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/ghostship, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieR" = ( -/obj/item/trash/maps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ieS" = ( -/obj/item/weapon/grenade/spawnergrenade/manhacks/raider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifc" = ( -/obj/structure/bed/chair/wheelchair/motor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifd" = ( -/obj/item/clothing/accessory/armor/helmcover/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifu" = ( -/obj/item/weapon/storage/box/monkeycubes/wolpincubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifz" = ( -/obj/item/weapon/storage/toolbox/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifA" = ( -/obj/structure/sign/directions/security/forensics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifB" = ( -/obj/item/clothing/under/solgov/mildress/army/command/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifD" = ( -/obj/structure/sign/department/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifE" = ( -/obj/item/weapon/gun/projectile/colt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifH" = ( -/obj/item/clothing/head/surgery/navyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifO" = ( -/obj/item/seeds/wabback, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifQ" = ( -/obj/item/clothing/accessory/medal/solgov/gold/star, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ifU" = ( -/obj/item/clothing/head/helmet/space/void/refurb/pilot/alt/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igc" = ( -/obj/item/seeds/orangeseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igd" = ( -/obj/item/clothing/suit/storage/vest/wardencoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igk" = ( -/obj/item/organ/internal/brain/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igp" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igt" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igy" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igG" = ( -/obj/item/weapon/module/cell_power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igL" = ( -/obj/item/weapon/reagent_containers/pill/peridaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igN" = ( -/obj/item/weapon/reagent_containers/glass/bottle/cyanide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igO" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igT" = ( -/obj/item/clothing/accessory/scarf/stripedred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"igW" = ( -/obj/item/weapon/computer_hardware/battery_module/ultra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihb" = ( -/obj/item/weapon/gun/energy/laser/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihr" = ( -/obj/item/clothing/gloves/gauntlets/rig/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihs" = ( -/obj/item/device/beacon_locator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihz" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihB" = ( -/obj/machinery/atmospherics/valve/digital, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihF" = ( -/obj/item/organ/internal/regennetwork/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihG" = ( -/obj/item/trash/namagashi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihI" = ( -/mob/living/simple_mob/vore/alienanimals/succlet/dark, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ihK" = ( -/obj/item/organ/internal/voicebox/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihM" = ( -/obj/item/weapon/gun/projectile/revolver/consul, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihP" = ( -/obj/item/clothing/head/ushanka/solgov/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ihR" = ( -/mob/living/simple_mob/animal/passive/dog/bullterrier, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ihU" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ihW" = ( -/obj/structure/bed/chair/bay/chair/padded/red/smallnest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iid" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb08, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iif" = ( -/obj/item/ammo_magazine/clip/c44, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iil" = ( -/obj/item/clothing/under/acj/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iim" = ( -/obj/item/clothing/under/suit_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iin" = ( -/obj/item/toy/plushie/carp/silent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiy" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiz" = ( -/obj/item/clothing/head/service/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiC" = ( -/obj/item/seeds/lustflower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiE" = ( -/obj/item/stack/tile/floor/eris/dark/brown_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiH" = ( -/obj/item/weapon/mine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiL" = ( -/obj/item/toy/plushie/borgplushie/scrubpuppy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiQ" = ( -/obj/item/clothing/under/fluff/missy_skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiX" = ( -/obj/item/weapon/oldtwohanded/spear/fluff/madoka_koto_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiY" = ( -/obj/item/clothing/head/ushanka/soviet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iiZ" = ( -/obj/item/weapon/storage/toolbox/lunchbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijf" = ( -/obj/item/seeds/ambrosiadeusseed, -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijk" = ( -/obj/structure/outcrop/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijp" = ( -/obj/item/toy/figure/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijr" = ( -/obj/item/clothing/shoes/boots/winter/climbing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijs" = ( -/obj/item/weapon/pickaxe/hand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iju" = ( -/obj/item/weapon/reagent_containers/food/snacks/tamales, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijw" = ( -/obj/item/clothing/suit/storage/vest/solgov/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijz" = ( -/obj/machinery/atmospherics/binary/pump/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijJ" = ( -/obj/structure/closet/secure_closet/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijN" = ( -/obj/structure/closet/gimmick/russian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ijQ" = ( -/mob/living/simple_mob/animal/passive/bird/ringneck_dove, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ikb" = ( -/obj/machinery/vr_sleeper/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikh" = ( -/obj/item/clothing/suit/space/void/merc/odst, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikp" = ( -/obj/item/weapon/flame/candle/candelabra/everburn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikv" = ( -/obj/item/clothing/accessory/solgov/ec_patch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikA" = ( -/obj/item/weapon/paper/khcrystal_manual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikE" = ( -/obj/item/clothing/accessory/solgov/rank/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikF" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikP" = ( -/obj/structure/closet/crate/allico, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikQ" = ( -/obj/item/weapon/refill_cartridge/autoname/drink/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ikW" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilh" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilq" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilu" = ( -/obj/item/weapon/book/manual/engineering_particle_accelerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilv" = ( -/obj/item/device/universal_translator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilw" = ( -/obj/item/weapon/tank/phoron/onetankbomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ily" = ( -/obj/item/weapon/reagent_containers/food/snacks/bageltwo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilE" = ( -/obj/item/weapon/card/id/civilian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilI" = ( -/obj/vehicle/train/security/trolley/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilO" = ( -/obj/item/weapon/reagent_containers/cooking_container/grill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilT" = ( -/obj/item/clothing/under/solgov/utility/fleet/command/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ilY" = ( -/obj/item/weapon/tool/prybar/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imb" = ( -/obj/item/integrated_circuit/input/oxygen_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iml" = ( -/obj/item/weapon/commcard/head/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imq" = ( -/obj/item/stack/material/copper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imt" = ( -/obj/item/clothing/mask/gas/guy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imx" = ( -/obj/machinery/crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imz" = ( -/obj/item/ammo_casing/microbattery/medical/grow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imA" = ( -/obj/item/clothing/head/tesh_hood/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imB" = ( -/mob/living/simple_mob/mobs_monsters/clowns/honkling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"imF" = ( -/obj/item/weapon/computer_hardware/network_card, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imL" = ( -/obj/item/weapon/melee/shock_maul, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imO" = ( -/obj/item/organ/internal/eyes/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imR" = ( -/obj/item/clothing/shoes/lightrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"imS" = ( -/mob/living/simple_mob/animal/passive/cow, -/turf/simulated/floor/atoll, -/area/survivalpod) -"imT" = ( -/obj/structure/sign/signnew/radiation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inb" = ( -/obj/item/clothing/head/tesh_hood/standard/orange_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ind" = ( -/obj/item/weapon/gun/energy/locked/phasegun/cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inl" = ( -/obj/structure/sign/warning/radioactive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inm" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inn" = ( -/obj/item/weapon/tool/screwdriver/diamonddrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ino" = ( -/obj/item/clothing/shoes/boots/cult/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inu" = ( -/obj/item/clothing/accessory/poncho/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inv" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inC" = ( -/obj/item/clothing/under/rank/research_director/dress_rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inD" = ( -/obj/item/stack/tile/floor/eris/derelict3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inE" = ( -/obj/item/paint_brush, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"inK" = ( -/obj/structure/closet/secure_closet/egg/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iol" = ( -/obj/item/clothing/glasses/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioq" = ( -/obj/structure/closet/walllocker_double/generic_civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iot" = ( -/obj/item/clothing/under/suit_jacket/burgundy/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iox" = ( -/obj/item/weapon/storage/bag/dogborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioC" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioJ" = ( -/obj/item/clothing/suit/storage/solgov/service/army/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioK" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioO" = ( -/obj/item/weapon/storage/vore_egg/rock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioP" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/toolkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioU" = ( -/obj/structure/outcrop/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioV" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/type901/carbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioW" = ( -/obj/item/toy/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioY" = ( -/obj/item/toy/figure/error, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ioZ" = ( -/obj/structure/sign/levels/kitchen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipa" = ( -/obj/machinery/transhuman/autoresleever, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipe" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/gray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipv" = ( -/obj/item/weapon/pen/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipA" = ( -/obj/item/organ/internal/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipH" = ( -/obj/structure/largecrate/animal/jerboa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipJ" = ( -/obj/structure/closet/body_bag/cryobag/robobag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipW" = ( -/obj/item/clothing/accessory/jacket/extravagant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ipZ" = ( -/obj/item/weapon/storage/pouch/eng_tool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqb" = ( -/obj/item/weapon/spell/abjuration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqd" = ( -/obj/item/weapon/storage/box/fluff/ivy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqj" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqp" = ( -/obj/item/clothing/under/goldrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqu" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqz" = ( -/obj/item/weapon/book/custom_library/religious/wayofbleedingswan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqE" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sparracube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqJ" = ( -/mob/living/simple_mob/animal/passive/snake/python/noodle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iqM" = ( -/obj/item/clothing/under/solgov/utility/fleet/officer/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iqN" = ( -/obj/item/seeds/carrotseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irc" = ( -/obj/item/seeds/gnomes, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irh" = ( -/obj/structure/loot_pile/mecha/hoverpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iri" = ( -/obj/structure/bed/chair/bay/chair/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irv" = ( -/obj/machinery/processor/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irw" = ( -/obj/item/clothing/accessory/solgov/rank/ec/officer/o3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irA" = ( -/obj/item/ammo_magazine/ammo_box/b45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irB" = ( -/obj/structure/largecrate/vehicle/quadtrailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irH" = ( -/obj/item/weapon/reagent_containers/blood/BPlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irN" = ( -/obj/item/weapon/surgical/surgicaldrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irO" = ( -/obj/machinery/door/blast/angled_shutter/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"irT" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ise" = ( -/obj/item/clothing/under/shorts/jeans/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iso" = ( -/obj/item/ammo_magazine/m545/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isp" = ( -/obj/item/clothing/shoes/boots/cowboy/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ist" = ( -/obj/item/clothing/under/shorts/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isv" = ( -/obj/item/weapon/storage/box/cdeathalarm_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isy" = ( -/obj/item/clothing/head/beret/solgov/fleet/branch/fourth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isC" = ( -/obj/item/device/retail_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isD" = ( -/obj/item/clothing/glasses/hud/health/aviator/fluff/jiao_glasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isE" = ( -/obj/item/weapon/reagent_containers/food/snacks/driedfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isF" = ( -/obj/item/weapon/technomancer_catalog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"isR" = ( -/obj/structure/smoletrack/roadT, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itg" = ( -/obj/item/clothing/under/rank/trek/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itl" = ( -/obj/item/projectile/bullet/rifle/a556, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itn" = ( -/obj/item/integrated_circuit/passive/power/relay/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itr" = ( -/obj/item/clothing/head/caphat/formal/fedcover/fedcoversec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itt" = ( -/obj/item/weapon/reagent_containers/food/snacks/honeytoast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itu" = ( -/obj/item/weapon/circuitboard/comm_server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itE" = ( -/obj/structure/sign/flag/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itM" = ( -/obj/item/clothing/shoes/hitops/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"itT" = ( -/obj/structure/salvageable/personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iub" = ( -/obj/item/weapon/reagent_containers/food/snacks/fruitsalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuj" = ( -/obj/item/clothing/head/helmet/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iul" = ( -/obj/item/clothing/accessory/storage/pouches/large/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuv" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuw" = ( -/obj/item/toy/figure/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuy" = ( -/obj/item/weapon/stamp/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuz" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/custom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuN" = ( -/obj/machinery/oxygen_pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iuX" = ( -/obj/item/clothing/shoes/boots/ranger/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivh" = ( -/obj/item/clothing/suit/space/void/merc/axis/sovrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivm" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivp" = ( -/obj/item/clothing/suit/storage/hazardvest/yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivt" = ( -/obj/item/weapon/spacecasinocash/c50, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivE" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivH" = ( -/obj/item/weapon/storage/backpack/holding/duffle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivQ" = ( -/obj/structure/lightpost/unlit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ivV" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwh" = ( -/obj/item/clothing/under/color/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwm" = ( -/obj/item/weapon/reagent_containers/food/snacks/chilied_eggs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwn" = ( -/obj/item/weapon/book/manual/atmospipes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwt" = ( -/obj/item/weapon/refill_cartridge/autoname/technical/assist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwx" = ( -/obj/item/clothing/accessory/holster/machete/rapier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwA" = ( -/obj/item/weapon/cell/device/shield_generator/parry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwC" = ( -/obj/machinery/atmospherics/binary/pump/high_power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwK" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwL" = ( -/obj/item/weapon/melee/energy/sword/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iwX" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixb" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/fluff/brittrenchcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixe" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/wrdn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixi" = ( -/obj/item/weapon/reagent_containers/food/snacks/rawsunflower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixo" = ( -/obj/item/clothing/suit/space/skrell/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixv" = ( -/obj/item/clothing/suit/armor/vest/ert/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixy" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/purple_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixz" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/medanalyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixA" = ( -/obj/item/weapon/card/id, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixF" = ( -/obj/item/weapon/rig/pmc/security/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixG" = ( -/obj/item/clothing/suit/armor/combat/crusader_explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixO" = ( -/obj/item/weapon/storage/photo_album, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixP" = ( -/obj/item/weapon/mine/n2o, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixU" = ( -/obj/structure/prop/war/tgmc_missile_rack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixY" = ( -/obj/item/toy/figure/bounty_hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ixZ" = ( -/obj/item/clothing/glasses/welding/superior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iya" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyg" = ( -/obj/item/weapon/dnainjector/antiglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyk" = ( -/obj/item/weapon/storage/box/fluff/lena, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iym" = ( -/obj/item/weapon/reagent_containers/food/snacks/pancakes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyp" = ( -/obj/item/ammo_magazine/clip/c545/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyC" = ( -/mob/living/simple_mob/animal/giant_spider/webslinger{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iyG" = ( -/obj/item/integrated_circuit/output, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iyH" = ( -/mob/living/simple_mob/animal/passive/cat/bluespace, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iyL" = ( -/obj/item/clothing/accessory/solgov/fleet_patch/fourth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izb" = ( -/obj/item/weapon/storage/box/fluff/Kassc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ize" = ( -/obj/item/clothing/head/collectable/police, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izj" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izk" = ( -/obj/item/clothing/under/color/fjumpsuit/yellowgreenf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izl" = ( -/obj/machinery/vending/wardrobe/virodrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izr" = ( -/obj/item/clothing/accessory/tropical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izF" = ( -/obj/structure/kitchenspike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izG" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/concussion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izJ" = ( -/obj/item/weapon/weldingtool/electric/unloaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izK" = ( -/obj/item/clothing/under/summerdress/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izM" = ( -/obj/item/weapon/pinpointer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izR" = ( -/obj/item/weapon/material/twohanded/baseballbat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izW" = ( -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"izX" = ( -/obj/item/weapon/storage/bag/circuits/mini/output/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAc" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAj" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAD" = ( -/obj/item/weapon/aiModule/gravekeeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAE" = ( -/obj/item/weapon/reagent_containers/food/condiment/carton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAK" = ( -/obj/item/integrated_circuit/arithmetic/exponent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAN" = ( -/obj/item/weapon/computer_hardware/hard_drive/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAQ" = ( -/obj/item/clothing/mask/muzzle/ballgag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iAV" = ( -/obj/item/clothing/suit/storage/puffyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBb" = ( -/obj/item/clothing/head/technomancer/apprentice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBc" = ( -/obj/item/clothing/under/explorer/utility/command/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBi" = ( -/obj/structure/closet/syndicate/suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBj" = ( -/obj/item/weapon/rig/pmc/security/grey/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBp" = ( -/obj/item/organ/internal/brain/golem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBs" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/evian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBu" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iBA" = ( -/obj/machinery/item_bank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBH" = ( -/obj/item/clothing/under/color/darkred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBI" = ( -/obj/item/weapon/forensics/swab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBK" = ( -/obj/item/clothing/head/hood/winter/cargo/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBT" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBX" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iBZ" = ( -/obj/item/weapon/reagent_containers/syringe/steroid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCb" = ( -/obj/item/clothing/under/fluff/rosetta, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCc" = ( -/obj/item/weapon/melee/energy/axe/charge/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCg" = ( -/obj/item/weapon/storage/quickdraw/syringe_case/clotting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCh" = ( -/obj/item/weapon/bedsheet/orangedouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCj" = ( -/obj/item/weapon/circuitboard/tesla_coil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCm" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/blue_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCG" = ( -/obj/machinery/vending/food/prison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCK" = ( -/obj/item/weapon/reagent_containers/food/snacks/nettlesoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iCR" = ( -/mob/living/simple_mob/animal/passive/armadillo/torta{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iDj" = ( -/obj/item/weapon/storage/pouch/eng_parts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDo" = ( -/obj/item/weapon/circuitboard/atm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDr" = ( -/obj/item/device/nif/bioadap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDy" = ( -/obj/item/clothing/under/corp/morpheus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDz" = ( -/obj/machinery/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDB" = ( -/obj/item/clothing/suit/storage/vest/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDE" = ( -/obj/item/weapon/rig/vox/carapace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDG" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/carthatoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDQ" = ( -/obj/item/clothing/accessory/tie/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDS" = ( -/obj/item/weapon/dnainjector/antinoprints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iDV" = ( -/obj/item/clothing/accessory/collar/fluff/amara_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEf" = ( -/obj/item/clothing/suit/storage/hazardvest/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEh" = ( -/obj/item/seeds/ambrosiainfernusseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEk" = ( -/obj/item/ammo_magazine/m545/small/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEt" = ( -/obj/item/clothing/accessory/badge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEC" = ( -/obj/item/clothing/accessory/armor/tag/opos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEE" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkfishfillet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEL" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/asval, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEM" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iEO" = ( -/obj/item/toy/plushie/carp/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iEP" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFe" = ( -/obj/item/weapon/storage/pill_bottle/inaprovaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFk" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFm" = ( -/obj/item/weapon/gun/projectile/automatic/fluff/crestrose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFq" = ( -/mob/living/simple_mob/horror/Sally{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iFE" = ( -/obj/structure/prop/machine/tgmc_console3/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFK" = ( -/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iFU" = ( -/obj/machinery/light/spot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGa" = ( -/obj/structure/bed/chair/oldsofa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGi" = ( -/obj/item/clothing/head/soft/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGl" = ( -/obj/item/weapon/aiModule/pleasurebot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGn" = ( -/obj/machinery/atmospherics/trinary/atmos_filter/m_filter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGo" = ( -/obj/item/clothing/suit/kimono/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGu" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGv" = ( -/obj/item/clothing/suit/armor/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGA" = ( -/obj/item/weapon/stock_parts/micro_laser/ultra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGD" = ( -/mob/living/simple_mob/vore/alienanimals/teppi{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iGG" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iGS" = ( -/obj/structure/largecrate/animal/fennec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iGU" = ( -/obj/item/clothing/glasses/hud/health/octaviousmonicle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHk" = ( -/obj/item/clothing/accessory/badge/idbadge/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHx" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHA" = ( -/obj/structure/sign/signnew/biohazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHB" = ( -/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHC" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHN" = ( -/obj/item/stack/tile/carpet/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHV" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iHW" = ( -/obj/item/weapon/gun/energy/mouseray/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIa" = ( -/obj/structure/sign/double/maltesefalcon/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iId" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIe" = ( -/mob/living/simple_mob/humanoid/pirate/mate/ranged/shotgun{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iIl" = ( -/obj/item/stack/tile/floor/eris/white/violetcorener, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIm" = ( -/obj/item/clothing/accessory/sweater/winterneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIq" = ( -/obj/structure/prop/machine/tradebeacon/starts_active, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIA" = ( -/obj/structure/closet/crate/morpheus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIC" = ( -/obj/machinery/door/firedoor/multi_tile/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIJ" = ( -/obj/item/weapon/storage/box/seccarts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iIP" = ( -/obj/item/weapon/cell/device/giga, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJg" = ( -/obj/item/clothing/under/hyperfiber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJh" = ( -/obj/item/flag/sol/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJj" = ( -/obj/item/clothing/accessory/storage/black_vest/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJq" = ( -/obj/item/clothing/head/justice/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJL" = ( -/obj/machinery/disease2/incubator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJO" = ( -/mob/living/simple_mob/animal/space/goose/domesticated/casino{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iJT" = ( -/obj/item/device/mapping_unit/deathsquad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJV" = ( -/obj/item/clothing/head/hood/winter/medical/para, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJW" = ( -/obj/item/weapon/cartridge/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iJZ" = ( -/obj/item/weapon/book/manual/medical_diagnostics_manual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iKh" = ( -/obj/item/clothing/under/assistantformal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iKl" = ( -/obj/item/toy/figure/agent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iKu" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iKG" = ( -/obj/item/weapon/card/id/explorer/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iKK" = ( -/obj/item/ammo_casing/microbattery/medical/toxin2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iKM" = ( -/obj/item/clothing/glasses/fluff/science_proper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLi" = ( -/obj/item/ammo_magazine/m45tommydrum/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLk" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/orange_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLl" = ( -/obj/item/clothing/under/solgov/utility/fleet/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLy" = ( -/obj/item/clothing/accessory/holster/hip/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLF" = ( -/obj/item/seeds/ambrosiagaiaseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLG" = ( -/obj/structure/closet/crate/mimic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLI" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLR" = ( -/obj/item/weapon/spell/warp_strike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLU" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "32" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLV" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLW" = ( -/obj/item/weapon/storage/firstaid/surgery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iLZ" = ( -/obj/item/weapon/gun/projectile/revolver/judge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMa" = ( -/obj/item/seeds/bloodtomatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMb" = ( -/obj/item/clothing/mask/fluff/lucerna_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMf" = ( -/obj/item/weapon/gun/projectile/p92x/large/preban, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMh" = ( -/obj/item/clothing/accessory/medal/fluff/rindeimos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMp" = ( -/obj/item/device/flashlight/glowstick/radioisotope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMx" = ( -/obj/item/clothing/under/captainformal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMN" = ( -/obj/machinery/power/smes/buildable/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMO" = ( -/obj/item/device/kit/paint/ripley/death, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMP" = ( -/obj/structure/largecrate/animal/dangerous, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMQ" = ( -/obj/item/weapon/deck/schnapsen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iMZ" = ( -/obj/item/device/survivalcapsule/escapepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNe" = ( -/obj/machinery/door/airlock/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNh" = ( -/obj/item/mecha_parts/mecha_equipment/generator/nuclear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNj" = ( -/obj/machinery/gear_dispenser/suit/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNl" = ( -/obj/item/clothing/under/pants/track/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNq" = ( -/obj/item/weapon/storage/backpack/dufflebag/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNv" = ( -/obj/machinery/bomb_tester, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNx" = ( -/obj/structure/bed/pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNE" = ( -/obj/item/clothing/accessory/hawaiian/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNK" = ( -/obj/item/clothing/accessory/holster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNP" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/deathslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iNU" = ( -/obj/item/weapon/ore/verdantium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNY" = ( -/obj/item/stolenpackage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iNZ" = ( -/obj/item/ammo_magazine/m44, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOg" = ( -/obj/item/clothing/under/solgov/utility/fleet/officer/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOB" = ( -/obj/machinery/door/airlock/angled_bay/external/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOC" = ( -/obj/item/device/flashlight/color/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOG" = ( -/obj/item/weapon/crossbowframe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOL" = ( -/obj/item/clothing/accessory/armor/helmcover/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOV" = ( -/obj/item/seeds/angelmycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iOY" = ( -/obj/item/weapon/shield/energy/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPa" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/lightgrey_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPb" = ( -/obj/item/clothing/suit/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPc" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/cyro{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iPl" = ( -/obj/item/weapon/reagent_containers/food/snacks/benedict, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPo" = ( -/obj/item/clothing/head/beret/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPv" = ( -/obj/item/mecha_parts/part/janus_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPA" = ( -/obj/item/weapon/circuitboard/destructive_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPD" = ( -/obj/machinery/vending/wardrobe/clowndrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPI" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPK" = ( -/obj/structure/sink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPM" = ( -/obj/item/weapon/circuitboard/conveyor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPU" = ( -/obj/item/clothing/under/pizzaguy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPV" = ( -/obj/item/clothing/suit/storage/hooded/foodcostume/hotdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iPW" = ( -/obj/item/weapon/folder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQm" = ( -/obj/item/weapon/aiModule/predator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQn" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQq" = ( -/obj/vehicle/train/trolley/trailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQN" = ( -/obj/item/weapon/refill_cartridge/autoname/technical/tool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQR" = ( -/obj/item/clothing/under/clown/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iQX" = ( -/obj/item/clothing/suit/jacket/puffer/vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRb" = ( -/obj/item/clothing/under/retrosweater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRi" = ( -/obj/item/weapon/storage/box/nifsofts_engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRl" = ( -/obj/item/toy/figure/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRm" = ( -/obj/item/weapon/storage/backpack/satchel/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRo" = ( -/obj/structure/bed/chair/sofa/right/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRs" = ( -/obj/structure/table, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRz" = ( -/obj/item/ammo_magazine/m10mm/pistol/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRG" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/green_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRJ" = ( -/obj/item/brokenbug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iRW" = ( -/obj/structure/prop/machine/biosyphon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSf" = ( -/obj/item/clothing/suit/storage/toggle/bomber/retro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSj" = ( -/obj/structure/closet/crate/secure/weapon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSk" = ( -/obj/item/clothing/under/skirt/outfit/plaid_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSx" = ( -/obj/item/clothing/head/helmet/ert/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSG" = ( -/obj/machinery/oxygen_pump/mobile/stabilizer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSP" = ( -/obj/item/clothing/under/rank/scientist/turtleneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iSW" = ( -/obj/item/integrated_circuit/logic/binary/or, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTc" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTd" = ( -/obj/item/taperoll/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTf" = ( -/obj/item/clothing/under/rank/trek/eng/next, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTi" = ( -/obj/item/toy/toy_xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTl" = ( -/obj/item/clothing/head/beret/solgov/fleet/branch/fifth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTm" = ( -/obj/item/clothing/head/hood/winter/snowsuit/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTn" = ( -/obj/item/weapon/circuitboard/mecha/phazon/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTp" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTw" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTx" = ( -/obj/item/clothing/head/helmet/fluff/skinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTz" = ( -/obj/item/weapon/storage/pouch/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTF" = ( -/obj/structure/fence/cut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTH" = ( -/obj/item/weapon/storage/box/fluff/vasharr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTJ" = ( -/obj/item/toy/tennis/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iTQ" = ( -/obj/structure/dirtybed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUa" = ( -/obj/item/weapon/banner/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUh" = ( -/obj/item/seeds/hardlightseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUi" = ( -/obj/structure/prop/statue/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUj" = ( -/obj/item/clothing/under/solgov/utility/army/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUl" = ( -/obj/item/clothing/suit/armor/pcarrier/medium/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUm" = ( -/obj/structure/prop/machine/core/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUr" = ( -/obj/item/weapon/melee/changeling/arm_blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUt" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iUA" = ( -/obj/item/clothing/gloves/combat/knight_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUM" = ( -/obj/item/integrated_circuit/manipulation/locomotion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUQ" = ( -/obj/structure/extinguisher_cabinet/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iUV" = ( -/obj/item/clothing/suit/judgerobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVa" = ( -/obj/item/weapon/circuitboard/grid_checker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVd" = ( -/obj/item/capture_crystal/great, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVe" = ( -/obj/machinery/vending/emergencyfood/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVk" = ( -/obj/item/broken_sm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVl" = ( -/obj/item/weapon/tool/screwdriver/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVm" = ( -/obj/item/clothing/accessory/cowboy_vest/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVA" = ( -/obj/item/device/bug_monitor/spy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVH" = ( -/obj/item/clothing/under/shorts/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVI" = ( -/obj/item/weapon/aiModule/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVU" = ( -/obj/item/weapon/storage/backpack/sport/gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iVV" = ( -/mob/living/simple_mob/horror/Steve{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iVY" = ( -/obj/item/clothing/suit/armor/pcarrier/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWf" = ( -/obj/item/weapon/book/manual/security_space_law, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWg" = ( -/obj/item/weapon/circuitboard/air_management/injector_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWj" = ( -/obj/machinery/power/solar_control/autostart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWo" = ( -/obj/item/clothing/suit/space/void/security/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWp" = ( -/obj/item/clothing/accessory/medal/conduct, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWu" = ( -/obj/item/ammo_magazine/mglock9mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWv" = ( -/obj/item/pizzavoucher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWB" = ( -/obj/structure/prop/machine/tgmc_console2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWD" = ( -/obj/structure/bed/chair/wheelchair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWJ" = ( -/obj/item/weapon/circuitboard/cerealmaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWQ" = ( -/obj/item/clothing/under/solgov/utility/army/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWV" = ( -/obj/machinery/gateway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iWY" = ( -/obj/item/weapon/storage/box/casino/costume_pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXa" = ( -/obj/item/weapon/material/fishing_rod/modern/cheap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXc" = ( -/obj/item/clothing/accessory/medal/nobel_science/fluff/ashley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXg" = ( -/obj/item/mecha_parts/part/durand_right_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXu" = ( -/obj/machinery/door/airlock/angled_bay/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXG" = ( -/obj/item/weapon/card/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iXQ" = ( -/obj/item/weapon/circuitboard/telecomms/receiver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYa" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/gilthari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYe" = ( -/mob/living/simple_mob/animal/giant_spider/hunter{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"iYs" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYu" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/nettie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYA" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYC" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYE" = ( -/obj/item/clothing/head/that/fluff/gettler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYH" = ( -/obj/item/weapon/reagent_containers/food/snacks/piginblanket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYI" = ( -/obj/item/stack/tile/carpet/retro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYK" = ( -/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYT" = ( -/obj/item/clothing/gloves/ring/reagent/sleepy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYU" = ( -/obj/item/clothing/under/solgov/utility/fleet/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iYW" = ( -/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/katarina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZb" = ( -/obj/structure/prop/machine/bsb_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZd" = ( -/obj/item/clothing/under/corp/wulf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZg" = ( -/obj/item/weapon/paper/card/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZn" = ( -/obj/item/ammo_magazine/awp/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZq" = ( -/obj/item/weapon/commcard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZt" = ( -/obj/item/device/hailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZu" = ( -/obj/item/device/transfer_valve, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZG" = ( -/obj/item/toy/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZH" = ( -/obj/machinery/recycling/crusher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZI" = ( -/obj/structure/cult/pylon/swarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZK" = ( -/obj/item/weapon/storage/box/scattershot/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZO" = ( -/obj/item/weapon/book/manual/ripley_build_and_repair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZR" = ( -/obj/item/weapon/gun/energy/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZT" = ( -/obj/item/weapon/card/id/talon/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZX" = ( -/obj/item/weapon/ore/bluespace_crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"iZZ" = ( -/obj/item/ammo_casing/a95, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jah" = ( -/obj/item/stack/animalhide/lizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jan" = ( -/obj/structure/door_assembly/door_assembly_alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jao" = ( -/obj/item/weapon/storage/belt/soulstone/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jap" = ( -/obj/item/weapon/aiModule/safeguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jaq" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/tomato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jas" = ( -/obj/structure/closet/crate/secure/focalpoint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jau" = ( -/obj/item/clothing/under/rank/mailman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jav" = ( -/obj/item/weapon/melee/voidblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jaz" = ( -/obj/item/clothing/head/welding/demon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jaB" = ( -/obj/item/weapon/storage/backpack/ert/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jaD" = ( -/obj/item/clothing/under/dress/white2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jaE" = ( -/obj/structure/prop/nt_optable/starts_active, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jba" = ( -/obj/item/pipe/quaternary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbb" = ( -/obj/machinery/shieldwallgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbi" = ( -/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbp" = ( -/obj/item/clothing/accessory/solgov/ec_patch/fieldops, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jby" = ( -/obj/item/toy/character/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbA" = ( -/obj/item/toy/plushie/carp/electric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbE" = ( -/obj/structure/portal_event/resize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbF" = ( -/obj/item/ammo_magazine/clip/c12g/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbG" = ( -/obj/structure/loot_pile/maint/technical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbJ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sleeptox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbM" = ( -/obj/structure/closet/crate/weapon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jbR" = ( -/obj/structure/bed/chair/bay/shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcd" = ( -/obj/item/clothing/under/rank/trek/eng/ent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jck" = ( -/obj/item/clothing/suit/space/void/hev, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jct" = ( -/obj/item/clothing/suit/chickensuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcu" = ( -/obj/item/weapon/bedsheet/purpledouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcB" = ( -/obj/machinery/door/airlock/external/bolted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcQ" = ( -/obj/item/device/nifrepairer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcU" = ( -/obj/item/weapon/reagent_containers/blood/BMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jcZ" = ( -/obj/item/weapon/telecube/precursor/mated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdl" = ( -/obj/item/integrated_circuit/transfer/demultiplexer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdq" = ( -/mob/living/simple_mob/animal/space/mouse_army/operative{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jdr" = ( -/obj/item/clothing/head/tesh_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdt" = ( -/obj/item/clothing/head/wizard/magus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdz" = ( -/obj/structure/bed/chair/bay/comfy/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdD" = ( -/obj/item/clothing/under/clown/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdF" = ( -/obj/item/clothing/suit/armor/pcarrier/explorer/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdO" = ( -/obj/item/clothing/head/bomb_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdQ" = ( -/obj/item/weapon/storage/belt/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jdV" = ( -/obj/item/clothing/under/pants/track/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jea" = ( -/obj/item/robot_parts/l_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jee" = ( -/obj/item/clothing/accessory/badge/press/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jen" = ( -/obj/item/clothing/suit/space/void/refurb/mercenary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jeu" = ( -/obj/item/toy/colorballoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jex" = ( -/obj/item/clothing/under/dress/maid/sexy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jey" = ( -/obj/item/weapon/storage/pill_bottle/happy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jeT" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jeW" = ( -/obj/item/rig_module/device/rcd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfc" = ( -/obj/item/weapon/cartridge/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfd" = ( -/obj/item/clothing/suit/storage/fluff/jacket/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfi" = ( -/obj/item/clothing/accessory/armor/armorplate/stab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfj" = ( -/obj/item/device/flashlight/lamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfq" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jfs" = ( -/obj/item/stack/medical/advanced/ointment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfG" = ( -/obj/item/device/healthanalyzer/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfH" = ( -/obj/machinery/portable_atmospherics/canister/phoron/engine_setup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfR" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfS" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfT" = ( -/obj/item/clothing/accessory/solgov/department/research/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jfU" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgm" = ( -/obj/item/weapon/book/manual/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgu" = ( -/obj/item/toy/mecha/fivestars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgC" = ( -/obj/item/clothing/accessory/antediluvian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgI" = ( -/obj/item/clothing/head/hood/hoodie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgM" = ( -/obj/machinery/smartfridge/sheets/persistent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgN" = ( -/obj/item/weapon/disk/species/diona, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgU" = ( -/obj/item/mecha_parts/mecha_equipment/wormhole_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgV" = ( -/obj/item/ammo_magazine/m41, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgX" = ( -/obj/item/weapon/commcard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jgY" = ( -/mob/living/simple_mob/slime/xenobio/bluespace{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jhg" = ( -/obj/item/ammo_magazine/m9mmt/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhh" = ( -/obj/item/weapon/reagent_containers/food/snacks/chips/bbq, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhn" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhD" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ak74, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhG" = ( -/obj/structure/loot_pile/mecha/ripley/random_sprite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhI" = ( -/obj/item/seeds/celery, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhP" = ( -/obj/item/weapon/grenade/chem_grenade/miasma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhQ" = ( -/obj/item/clothing/suit/armor/pcarrier/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jhS" = ( -/obj/item/weapon/card/id/event/accessset/itg/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jia" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jib" = ( -/obj/item/weapon/gun/projectile/dartgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jil" = ( -/obj/item/clothing/suit/storage/teshari/cloak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jim" = ( -/obj/item/weapon/storage/box/casino/costume_whitebunny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiv" = ( -/obj/structure/barricade/cutout/ntsec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiw" = ( -/obj/item/clothing/suit/armor/material/makeshift/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiE" = ( -/obj/item/weapon/reagent_containers/food/snacks/bagelsunflower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiF" = ( -/obj/item/weapon/pen/crayon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiO" = ( -/obj/item/weapon/paper/sticky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiV" = ( -/obj/structure/closet/crate/medical/blood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jiW" = ( -/obj/structure/prop/war/tgmc_missile_rack/banshee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjf" = ( -/obj/item/device/t_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjg" = ( -/obj/item/clothing/head/helmet/space/vox/civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjj" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjr" = ( -/obj/item/weapon/reagent_containers/food/snacks/twobread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jju" = ( -/obj/item/clothing/mask/smokable/cigarette/cigar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjH" = ( -/obj/item/clothing/under/solgov/service/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjI" = ( -/obj/item/weapon/reagent_containers/food/snacks/clownburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjK" = ( -/obj/item/weapon/storage/box/fluff/missy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjN" = ( -/obj/item/clothing/suit/chiton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjO" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb03, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jjW" = ( -/obj/structure/symbol/es, -/turf/simulated/fitness, -/area/survivalpod) -"jkh" = ( -/obj/item/weapon/storage/box/ambrosiadeus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jki" = ( -/obj/item/device/flashlight/color/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkk" = ( -/obj/item/projectile/beam/xray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jks" = ( -/obj/item/integrated_circuit/output/led/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkt" = ( -/obj/machinery/button/flasher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkv" = ( -/obj/item/brokenbug/spy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkw" = ( -/obj/structure/closet/secure_closet/engineering_chief_wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jky" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkJ" = ( -/obj/item/device/healthanalyzer/fluff/jiao_health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkN" = ( -/obj/item/weapon/circuitboard/drone_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jkQ" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jlp" = ( -/obj/item/integrated_circuit/logic/binary/gdlatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jls" = ( -/obj/item/weapon/gun/energy/taser/mounted/cyborg/flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jly" = ( -/obj/item/seeds/tomatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlz" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "23" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlB" = ( -/obj/item/ammo_magazine/clip/sks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlE" = ( -/obj/item/ammo_casing/a12g/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlG" = ( -/obj/item/weapon/card/id/event/polymorphic/itg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlI" = ( -/mob/living/simple_mob/slime/promethean{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jlN" = ( -/obj/item/clothing/under/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlO" = ( -/obj/item/weapon/rig/hazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlV" = ( -/obj/item/device/integrated_circuit_printer/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlY" = ( -/obj/item/capture_crystal/wendigo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jlZ" = ( -/obj/item/clothing/under/rank/psych/turtleneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmn" = ( -/obj/machinery/door/airlock/angled_bay/hatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmt" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmy" = ( -/obj/item/organ/internal/spleen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmC" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmE" = ( -/obj/item/weapon/storage/box/syndie_kit/space, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmF" = ( -/obj/item/clothing/under/rank/engineer/turtleneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmH" = ( -/obj/item/clothing/head/technomancer/master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmO" = ( -/obj/item/clothing/shoes/knight_costume/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jmW" = ( -/mob/living/simple_mob/vore/sect_drone{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jmX" = ( -/obj/item/weapon/gun/energy/taser/xeno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnb" = ( -/obj/item/weapon/reagent_containers/glass/bottle/peridaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jni" = ( -/obj/item/toy/plushie/borgplushie/medihound, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnj" = ( -/obj/item/weapon/reagent_containers/glass/paint/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jno" = ( -/obj/structure/sign/directions/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnw" = ( -/obj/item/weapon/disk/limb/zenghu_frost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnA" = ( -/obj/item/weapon/circuitboard/dormscontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnC" = ( -/obj/item/weapon/storage/box/explorerkeys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnD" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/shorty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnG" = ( -/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/joanrisu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnP" = ( -/obj/item/weapon/weldpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnR" = ( -/obj/item/weapon/plastique/seismic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnV" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/fries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnW" = ( -/obj/item/integrated_circuit/output/text_to_speech/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jnZ" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joa" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"joc" = ( -/obj/structure/handrail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jod" = ( -/obj/item/ammo_magazine/m16, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jof" = ( -/obj/item/clothing/suit/armor/pcarrier/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joi" = ( -/obj/item/weapon/reagent_containers/food/condiment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jom" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jon" = ( -/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joo" = ( -/obj/item/weapon/gun/projectile/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jop" = ( -/obj/item/clothing/head/almach, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jor" = ( -/obj/structure/sign/flag/almach_p, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jox" = ( -/obj/item/clothing/suit/storage/vest/solgov/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joD" = ( -/obj/item/weapon/gun/energy/tommylaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joG" = ( -/obj/item/weapon/portable_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"joW" = ( -/obj/item/integrated_circuit/input/signaler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpb" = ( -/obj/item/clothing/under/away/patrol/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpc" = ( -/obj/item/integrated_circuit/input/microphone/sign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpj" = ( -/obj/item/clothing/accessory/ribbon/solgov/frontier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpn" = ( -/obj/item/clothing/head/beret/sec/navy/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpr" = ( -/obj/item/seeds/towermycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpw" = ( -/obj/item/weapon/reagent_containers/food/snacks/roburgerbig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpJ" = ( -/obj/structure/ghost_pod/manual/clegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpQ" = ( -/obj/structure/sign/department/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpT" = ( -/obj/item/device/suit_cooling_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jpU" = ( -/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedsec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqf" = ( -/obj/item/clothing/ears/skrell/cloth_female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqj" = ( -/obj/item/clothing/gloves/ring/material/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqo" = ( -/obj/item/weapon/tank/jetpack/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqs" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqu" = ( -/obj/item/weapon/storage/firstaid/regular, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqI" = ( -/obj/item/weapon/gun/energy/soapenergy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqJ" = ( -/obj/item/weapon/material/kitchen/utensil/spoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqR" = ( -/obj/item/clothing/head/hardhat/firefighter/chief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqV" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqW" = ( -/obj/structure/largecrate/donksoftvendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jqZ" = ( -/obj/item/integrated_circuit/trig/sine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jro" = ( -/obj/structure/closet/crate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jrw" = ( -/obj/item/seeds/sunflowerseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jrA" = ( -/obj/item/clothing/head/tesh_hood/standard/black_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jrD" = ( -/mob/living/simple_mob/animal/space/alien{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jrG" = ( -/obj/item/weapon/gun/energy/gun/protector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jrK" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/queen/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jrM" = ( -/obj/item/weapon/circuitboard/pacman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jse" = ( -/obj/item/mecha_parts/chassis/janus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsj" = ( -/obj/machinery/door/airlock/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsn" = ( -/obj/item/latexballon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsx" = ( -/obj/item/clothing/shoes/mech_shoes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsy" = ( -/obj/item/clothing/head/tesh_hood/standard/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsz" = ( -/obj/item/clothing/suit/storage/hooded/hoodie/bluetrim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsB" = ( -/obj/item/weapon/reagent_containers/food/snacks/goma_dango, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsD" = ( -/obj/machinery/chem_master/condimaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jsZ" = ( -/obj/structure/sign/directions/telecomms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jti" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jto" = ( -/obj/item/clothing/accessory/storage/pouches/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtq" = ( -/obj/item/device/uav, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jts" = ( -/obj/item/seeds/nettleseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtu" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shoulder/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtz" = ( -/obj/machinery/atmospherics/pipe/tank/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtC" = ( -/obj/item/weapon/grenade/shooter/energy/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtL" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtM" = ( -/obj/item/weapon/melee/energy/axe/charge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtN" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/paracetamol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtO" = ( -/obj/item/weapon/reagent_containers/pill/imidazoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtP" = ( -/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jtW" = ( -/obj/structure/smolebuilding/warehouses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jui" = ( -/obj/item/weapon/material/fishing_net, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juj" = ( -/obj/item/weapon/card/id/cargo/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jun" = ( -/obj/structure/fence/post, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jur" = ( -/obj/machinery/suit_cycler/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juv" = ( -/obj/item/integrated_circuit/input/med_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juD" = ( -/obj/item/weapon/storage/box/syndie_kit/voidsuit/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juK" = ( -/obj/structure/closet/crate/secure/lawson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juT" = ( -/obj/mecha/working/ripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"juY" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvb" = ( -/obj/item/seeds, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvd" = ( -/obj/structure/smoleruins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvf" = ( -/obj/item/clothing/suit/bomb_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvt" = ( -/mob/living/simple_mob/vore/alienanimals/startreader{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jvC" = ( -/obj/item/clothing/accessory/wcoat/swvest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvD" = ( -/obj/item/weapon/pinpointer/shuttle/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvE" = ( -/obj/item/weapon/storage/rollingpapers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvL" = ( -/obj/item/weapon/card/id/syndicate/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvW" = ( -/obj/item/rig_module/chem_dispenser/injector/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jvY" = ( -/obj/item/clothing/under/dress/golddress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwb" = ( -/obj/item/ammo_magazine/m762/ext/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwc" = ( -/obj/machinery/hyperpad{ - dir = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwm" = ( -/obj/item/weapon/rig/military/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwq" = ( -/obj/structure/lightpost/festive/unlit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwu" = ( -/obj/item/clothing/under/rank/scientist/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwv" = ( -/mob/living/simple_mob/animal/sif/kururak/leader{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jwx" = ( -/obj/item/stack/material/algae, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwE" = ( -/obj/item/clothing/head/maangtikka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwM" = ( -/obj/item/clothing/mask/shark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwT" = ( -/obj/item/weapon/rcd_ammo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jwV" = ( -/obj/machinery/mineral/processing_unit_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxt" = ( -/obj/machinery/gateway/brass{ - dir = 9 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxG" = ( -/obj/item/clothing/mask/chewable/tobacco/cheap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxN" = ( -/obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxO" = ( -/obj/machinery/vending/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxQ" = ( -/obj/item/clothing/under/yw/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxS" = ( -/obj/item/weapon/disk/limb/morpheus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxV" = ( -/obj/item/clothing/suit/storage/explorer/crew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxX" = ( -/obj/item/toy/mecha/clarke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jxY" = ( -/obj/item/clothing/suit/storage/teshari/cloak/fluff/strix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jya" = ( -/obj/item/clothing/accessory/armband/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyu" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyy" = ( -/obj/item/weapon/storage/backpack/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyJ" = ( -/obj/item/weapon/book/manual/standard_operating_procedure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyM" = ( -/obj/item/weapon/pen/crayon/marker/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyN" = ( -/obj/item/clothing/suit/storage/marshal_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyP" = ( -/mob/living/simple_mob/animal/passive/honkpet{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jyQ" = ( -/obj/item/clothing/accessory/solgov/rank/ec/officer/o6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyT" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyW" = ( -/obj/item/weapon/book/manual/barman_recipes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jyZ" = ( -/obj/item/clothing/shoes/magboots/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzb" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzc" = ( -/obj/item/weapon/deck/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzd" = ( -/obj/item/weapon/ore/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzg" = ( -/obj/item/device/personal_shield_generator/belt/bruteburn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzh" = ( -/obj/structure/plushie/carp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzm" = ( -/obj/structure/flight_right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzv" = ( -/obj/item/weapon/gun/projectile/automatic/glock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzz" = ( -/obj/item/weapon/implanter/reagent_generator/roiz/yuki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzE" = ( -/obj/item/weapon/rig/ce/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzG" = ( -/obj/item/weapon/spellbook/oneuse/mindswap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jzH" = ( -/mob/living/simple_mob/mechanical/viscerator{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jzS" = ( -/obj/item/weapon/technomancer_core/recycling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAe" = ( -/mob/living/simple_mob/slime/xenobio/metal{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jAg" = ( -/obj/item/clothing/head/hood/toggleable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAm" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAu" = ( -/obj/item/clothing/head/beret/solgov/sifguard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAv" = ( -/obj/item/weapon/gun/energy/taser/mounted/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAx" = ( -/obj/item/clothing/head/dress/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAC" = ( -/obj/item/clothing/glasses/omnihud/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAD" = ( -/obj/item/ammo_magazine/m16/patriot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAF" = ( -/obj/item/clothing/under/dress/maid/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAI" = ( -/obj/item/device/fluff/id_kit_ivy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAO" = ( -/obj/item/weapon/hand_tele, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAU" = ( -/obj/item/weapon/material/knife/tacknife/combatknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jAY" = ( -/obj/item/flag/almach_a/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBd" = ( -/obj/item/weapon/reagent_containers/food/snacks/yellowcurry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBe" = ( -/obj/structure/closet/secure_closet/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBm" = ( -/obj/machinery/syndicate_beacon/virgo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBs" = ( -/obj/item/clothing/suit/space/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBB" = ( -/obj/item/device/megaphone/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBE" = ( -/obj/machinery/door/airlock/angled_bay/hatch/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBF" = ( -/obj/item/toy/plushie/kitten, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBQ" = ( -/obj/structure/cult/pylon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBU" = ( -/obj/item/clothing/gloves/gauntlets/rig/bayeng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBW" = ( -/obj/item/clothing/suit/suspenders, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jBY" = ( -/obj/item/stack/tile/floor/eris/white/gray_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCf" = ( -/obj/structure/bed/double/weaversilk_nest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCj" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCo" = ( -/obj/structure/loot_pile/maint/trash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCp" = ( -/obj/machinery/hyperpad{ - dir = 5 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCq" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCS" = ( -/obj/item/weapon/storage/fancy/cigarettes/killthroat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jCV" = ( -/obj/item/integrated_circuit/arithmetic/round, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDa" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/lunacake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDj" = ( -/obj/structure/salvageable/data, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDo" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDp" = ( -/obj/machinery/door/airlock/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDz" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/zeng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDA" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDC" = ( -/obj/item/ammo_magazine/ak74/plum/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDH" = ( -/obj/item/weapon/dnainjector/insulation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDM" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeyburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDO" = ( -/obj/item/weapon/rig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDP" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/cargoslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jDU" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/tonic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDY" = ( -/obj/item/weapon/telecube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jDZ" = ( -/obj/item/clothing/under/pants/altevian/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEe" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEf" = ( -/obj/structure/sign/warning/server_room, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEy" = ( -/obj/item/weapon/reagent_containers/pill/cyanide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEz" = ( -/obj/item/clothing/accessory/medal/gold/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEK" = ( -/obj/structure/closet/acloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEQ" = ( -/obj/item/toy/russian_revolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jES" = ( -/obj/item/stack/tile/floor/eris/dark/techfloor_grid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jET" = ( -/obj/item/clothing/head/beret/corp/saare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jEY" = ( -/obj/structure/closet/secure_closet/medical_wall/pills, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFd" = ( -/obj/item/weapon/reagent_containers/food/snacks/fishburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFe" = ( -/obj/item/weapon/card/id/platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFj" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFn" = ( -/obj/item/stack/tile/wmarble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFu" = ( -/obj/item/clothing/accessory/medal/gold/fluff/lucina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFz" = ( -/obj/item/weapon/reagent_containers/food/snacks/pillbugempty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFB" = ( -/obj/item/clothing/head/caphat/hop/beret/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFE" = ( -/obj/item/device/laser_pointer/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFF" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFH" = ( -/obj/item/weapon/reagent_containers/food/condiment/carton/flour/rustic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFP" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jFS" = ( -/obj/item/clothing/accessory/solgov/specialty/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGa" = ( -/obj/item/weapon/pen/crayon/marker/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGc" = ( -/obj/item/weapon/card/id/engineering/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGd" = ( -/obj/item/integrated_circuit/input/colorpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGh" = ( -/mob/living/simple_mob/mobs_monsters/clowns/blob{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jGi" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/robo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGy" = ( -/obj/item/weapon/gun/projectile/revolver/lombardi/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGA" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesymash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGB" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGD" = ( -/obj/item/trash/driedfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGE" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/square, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGI" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGJ" = ( -/obj/item/weapon/card/id/fluff/xennith, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGK" = ( -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGQ" = ( -/obj/item/clothing/under/solgov/utility/fleet/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGS" = ( -/obj/item/ammo_magazine/mp5mag/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGU" = ( -/obj/structure/sign/signnew/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGW" = ( -/obj/item/clothing/head/helmet/space/void/hev, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jGZ" = ( -/obj/structure/largecrate/animal/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHb" = ( -/obj/item/clothing/suit/storage/trench/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHt" = ( -/obj/item/weapon/grenade/flashbang/cluster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHv" = ( -/obj/item/ammo_magazine/m9mm/vp70/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHz" = ( -/obj/item/weapon/refill_cartridge/multitype/specialty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHD" = ( -/obj/structure/loot_pile/mecha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHE" = ( -/obj/item/clothing/accessory/permit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHG" = ( -/obj/item/weapon/reagent_containers/glass/paint/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHU" = ( -/obj/item/clothing/under/color/ranger/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHV" = ( -/obj/item/clothing/shoes/magboots/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jHX" = ( -/obj/structure/bed/chair/bay/comfy/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jId" = ( -/obj/item/sniper_rifle_part/stock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIe" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIq" = ( -/obj/item/weapon/gun/energy/darkmatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIr" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIu" = ( -/obj/structure/largecrate/animal/otie/guardmutant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIv" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/alkysine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIw" = ( -/obj/item/weapon/soap/grey_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIz" = ( -/obj/item/weapon/aiModule/prototypeEngineOffline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIA" = ( -/obj/item/clothing/suit/security/navyhos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIM" = ( -/obj/item/clothing/under/rank/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIV" = ( -/obj/structure/sign/deck/fourth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jIZ" = ( -/obj/structure/table/bench/sifwooden/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJa" = ( -/obj/item/clothing/shoes/hitops, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJi" = ( -/obj/item/clothing/accessory/solgov/department/supply/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJj" = ( -/obj/item/clothing/accessory/sweater/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJk" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/lucyprice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJo" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJq" = ( -/obj/item/weapon/reagent_containers/food/snacks/grub_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJt" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJD" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJE" = ( -/mob/living/simple_mob/mechanical/cyber_horror/corgi{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jJF" = ( -/obj/item/clothing/under/teshari/undercoat/standard/red_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJO" = ( -/obj/item/clothing/under/rippedpunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJT" = ( -/obj/item/weapon/storage/box/fluff/samantha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJX" = ( -/obj/item/weapon/card/id/centcom/ERT, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jJY" = ( -/obj/item/clothing/head/tesh_hood/standard/black_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKa" = ( -/obj/item/weapon/rig/ert/assetprotection/antiareli, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKg" = ( -/obj/item/clothing/gloves/arm_guard/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKh" = ( -/obj/item/weapon/circuitboard/mecha/honker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKi" = ( -/obj/item/weapon/reagent_containers/food/snacks/blackpudding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKk" = ( -/obj/item/resonator/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKl" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/handblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKt" = ( -/obj/item/weapon/bedsheet/iandouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKu" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/sks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKv" = ( -/obj/item/clothing/suit/storage/explorer/medical/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKM" = ( -/obj/item/clothing/head/wiggler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKN" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKO" = ( -/obj/item/weapon/circuitboard/nav, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKU" = ( -/obj/item/weapon/dnainjector/xraymut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jKW" = ( -/obj/item/weapon/paper_bundle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLa" = ( -/obj/item/clothing/shoes/sneakersblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLb" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLj" = ( -/obj/machinery/teleport/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLp" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/patron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLB" = ( -/obj/item/ammo_casing/microbattery/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLH" = ( -/obj/machinery/vending/wardrobe/chemdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLO" = ( -/obj/item/clothing/mask/paper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLP" = ( -/obj/item/weapon/pen/robopen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLR" = ( -/obj/item/toy/plushie/marble_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jLS" = ( -/obj/item/ammo_magazine/ammo_box/b12g/flechette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMf" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/yellow_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMh" = ( -/obj/item/ammo_magazine/box/emp/b45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMk" = ( -/obj/item/clothing/accessory/jacket/altevian/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMm" = ( -/obj/item/clothing/shoes/athletic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMx" = ( -/obj/item/weapon/reagent_containers/food/snacks/soup/onion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMB" = ( -/obj/structure/fence/cut/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMD" = ( -/obj/item/clothing/head/pin/bow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMK" = ( -/obj/item/weapon/cmo_disk_holder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMO" = ( -/obj/structure/sign/level/three, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMP" = ( -/obj/item/weapon/reagent_containers/pill/arithrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMQ" = ( -/obj/item/clothing/suit/space/vox/civ/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jMT" = ( -/obj/item/weapon/cartridge/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNb" = ( -/obj/item/clothing/under/suit_jacket/charcoal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNh" = ( -/obj/item/stack/material/fiber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNn" = ( -/obj/item/rig_module/device/healthscanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNo" = ( -/obj/item/weapon/storage/bag/circuits/mini/memory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNr" = ( -/obj/item/weapon/rcd/debug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNA" = ( -/obj/item/clothing/under/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNB" = ( -/obj/item/weapon/storage/belt/utility/fluff/vulpine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNQ" = ( -/obj/structure/door_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNU" = ( -/obj/item/clothing/accessory/medal/silver/fluff/kaeninmedal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNV" = ( -/obj/item/clothing/suit/storage/toggle/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jNX" = ( -/mob/living/simple_mob/animal/space/bats/cult/strong{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jNZ" = ( -/obj/item/clothing/accessory/badge/corporate_tag/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOd" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/iaa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOv" = ( -/obj/machinery/power/thermoregulator/cryogaia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOH" = ( -/obj/structure/closet/secure_closet/engineering_electrical/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOO" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOP" = ( -/obj/item/clothing/under/rank/trek/command/next, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOV" = ( -/obj/item/clothing/suit/armor/pcarrier/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jOW" = ( -/obj/item/weapon/reagent_containers/food/snacks/human/kabob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPf" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/hat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jPj" = ( -/obj/item/clothing/suit/space/void/engineering/kate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPl" = ( -/obj/item/clothing/under/undersuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPt" = ( -/obj/item/clothing/accessory/medal/silver/fluff/dominemedal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPx" = ( -/obj/item/weapon/gun/energy/crossbow/largecrossbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPD" = ( -/obj/item/clothing/under/cheongsam/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPM" = ( -/obj/item/modular_computer/laptop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPN" = ( -/obj/machinery/mineral/stacking_machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPR" = ( -/obj/item/mecha_parts/part/ripley_right_arm, -/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPS" = ( -/obj/item/clothing/shoes/hitops/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPU" = ( -/obj/item/weapon/flame/candle/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jPZ" = ( -/obj/item/clothing/accessory/badge/idbadge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jQb" = ( -/obj/item/ammo_magazine/mglock9mm/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jQc" = ( -/obj/item/clothing/suit/storage/trench/fluff/kelplaguecoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jQf" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jQH" = ( -/obj/item/clothing/under/rank/warden/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRf" = ( -/mob/living/simple_mob/animal/passive/fish/murkin, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"jRg" = ( -/obj/item/weapon/chaoscake_layer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRj" = ( -/obj/machinery/gateway/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRk" = ( -/obj/item/clothing/shoes/slippers/worn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRr" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRt" = ( -/obj/structure/closet/crate/large/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRx" = ( -/obj/item/clothing/suit/lightrig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRA" = ( -/obj/structure/bed/chair/sofa/corner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/decaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRI" = ( -/obj/item/weapon/reagent_containers/food/snacks/honeybun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRK" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRN" = ( -/obj/item/weapon/reagent_containers/food/snacks/cubancarp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jRT" = ( -/obj/item/weapon/gun/projectile/p92x/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSi" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSm" = ( -/obj/structure/table/fancyblack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSn" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSt" = ( -/obj/item/mecha_parts/component/electrical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSw" = ( -/mob/living/simple_mob/humanoid/possessed/merc{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jSx" = ( -/obj/structure/bed/chair/sofa/purp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSz" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSA" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSE" = ( -/obj/structure/closet/secure_closet/guncabinet/excursion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSH" = ( -/obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSL" = ( -/obj/item/weapon/gun/energy/floragun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jST" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jSU" = ( -/obj/item/clothing/head/pilot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSV" = ( -/obj/item/weapon/flame/candle/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSX" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jSZ" = ( -/obj/item/clothing/accessory/tie/horrible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTb" = ( -/obj/item/device/mmi/inert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTg" = ( -/obj/item/clothing/suit/armor/pcarrier/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTm" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTr" = ( -/obj/item/weapon/spell/construct/spawner/agonizing_sphere, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTu" = ( -/mob/living/simple_mob/slime/xenobio/cerulean{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jTv" = ( -/obj/item/weapon/reagent_containers/food/drinks/bluespace_coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTw" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/otie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTz" = ( -/obj/item/weapon/plantspray/pests/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jTO" = ( -/obj/item/clothing/glasses/tajblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUd" = ( -/obj/item/ammo_magazine/ar10/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUh" = ( -/obj/machinery/mineral/stacking_unit_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUl" = ( -/obj/item/clothing/under/modjump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUs" = ( -/obj/item/weapon/tool/screwdriver/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUC" = ( -/obj/item/clothing/under/wedding/floofdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jUM" = ( -/obj/machinery/vending/tool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVc" = ( -/obj/structure/prop/war/tgmc_30mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVd" = ( -/obj/item/organ/internal/brain/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVf" = ( -/obj/item/clothing/head/hood/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVh" = ( -/obj/structure/closet/syndicate/personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVj" = ( -/obj/structure/closet/crate/centauri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVm" = ( -/obj/item/stack/tile/floor/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVn" = ( -/obj/item/clothing/under/haltertop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVq" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVv" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVG" = ( -/obj/structure/sign/warning/falling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVJ" = ( -/obj/item/weapon/computer_hardware/hard_drive/portable/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVM" = ( -/obj/item/weapon/storage/backpack/satchel/gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVN" = ( -/obj/item/clothing/head/helmet/space/void/pilot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVP" = ( -/obj/item/weapon/lampshade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jVT" = ( -/obj/item/weapon/gun/energy/gun/generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWc" = ( -/obj/item/clothing/suit/armor/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWo" = ( -/obj/item/device/assembly/signaler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWr" = ( -/obj/item/clothing/head/helmet/space/void/security/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWu" = ( -/obj/structure/sign/levels/pool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWB" = ( -/obj/item/clothing/under/rank/nullsuit/civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWE" = ( -/obj/structure/outcrop/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWJ" = ( -/obj/item/weapon/gun/magnetic/railgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWO" = ( -/obj/item/clothing/suit/fluff/blue_trimmed_coat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWQ" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/pkm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWY" = ( -/obj/item/weapon/makeover, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jWZ" = ( -/obj/machinery/meter/turf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXd" = ( -/obj/item/projectile/beam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXg" = ( -/obj/item/weapon/implanter/reagent_generator/savannah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXq" = ( -/obj/structure/micro_tunnel/magic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXu" = ( -/obj/machinery/vending/snix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXy" = ( -/obj/item/instrument/keytar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXz" = ( -/mob/living/simple_mob/mobs_monsters/clowns/perm{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jXC" = ( -/obj/item/weapon/disk/species/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXE" = ( -/obj/machinery/computer/drone_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXJ" = ( -/obj/item/weapon/rig/combat/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXL" = ( -/obj/item/weapon/gun/energy/gun/eluger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXN" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/half, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXP" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/jager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXS" = ( -/obj/item/weapon/gun/projectile/deagle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXW" = ( -/obj/item/weapon/cartridge/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jXZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/decaf_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYb" = ( -/obj/machinery/door/airlock/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYg" = ( -/obj/item/device/bluespaceradio/talon_prelinked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYh" = ( -/obj/item/trash/tastybread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYi" = ( -/obj/structure/prop/fake_ai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYk" = ( -/obj/item/clothing/under/corp/centauri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYn" = ( -/mob/living/simple_mob/mechanical/viscerator/raider{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jYq" = ( -/obj/item/ammo_casing/a57, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYF" = ( -/mob/living/simple_mob/mechanical/mecha/combat/marauder{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jYM" = ( -/obj/item/weapon/storage/vore_egg/owlpellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYN" = ( -/obj/structure/closet/secure_closet/engineering_welding/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYT" = ( -/obj/item/clothing/accessory/bracelet/material/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jYU" = ( -/obj/effect/map_effect/perma_light/brighter{ - light_range = 9999 - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"jZk" = ( -/obj/item/integrated_circuit/arithmetic/pi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZl" = ( -/obj/item/seeds/brownmold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZn" = ( -/obj/item/clothing/under/rank/security2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZr" = ( -/obj/machinery/firealarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZz" = ( -/obj/item/weapon/firework_star/weather/blizzard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZC" = ( -/obj/item/weapon/pen/crayon/marker/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"jZN" = ( -/obj/mecha/combat/fighter/gunpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kaj" = ( -/obj/machinery/honey_extractor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kak" = ( -/obj/item/rig_module/fabricator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kal" = ( -/obj/item/weapon/card/id/assistant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kam" = ( -/obj/item/weapon/stock_parts/console_screen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kas" = ( -/obj/item/weapon/implant/reagent_generator/egg/veryslowlowcap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kay" = ( -/obj/machinery/shuttle_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kaI" = ( -/obj/item/clothing/suit/storage/puffyred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kaJ" = ( -/obj/item/clothing/head/soft/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kaP" = ( -/obj/item/clothing/under/rank/talon/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kaY" = ( -/obj/item/weapon/gun/projectile/automatic/toy/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbe" = ( -/obj/structure/sign/poster/custom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbu" = ( -/obj/item/clothing/accessory/storage/webbing/pilot2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbz" = ( -/obj/item/weapon/rig/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbA" = ( -/mob/living/simple_mob/slime/feral{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kbB" = ( -/obj/item/clothing/accessory/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbC" = ( -/obj/item/weapon/reagent_containers/food/snacks/candy/gummy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbH" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbI" = ( -/obj/item/weapon/technomancer_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbO" = ( -/obj/item/weapon/cartridge/signal/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kbY" = ( -/obj/item/clothing/head/helmet/space/vox/civ/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcb" = ( -/obj/structure/sign/levels/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcd" = ( -/obj/item/clothing/suit/bio_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcg" = ( -/obj/item/clothing/shoes/swimmingfins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcl" = ( -/obj/structure/closet/crate/mimic/closet/dangerous, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kco" = ( -/obj/item/pipe/binary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcB" = ( -/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcD" = ( -/obj/item/clothing/head/greenbandana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcE" = ( -/obj/item/clothing/gloves/ranger/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcM" = ( -/obj/structure/safe/floor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcT" = ( -/obj/item/weapon/storage/box/fancy/chewables/tobacco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcU" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg_pancake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kcW" = ( -/obj/item/weapon/storage/vore_egg/escapepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdf" = ( -/obj/item/weapon/implantpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdq" = ( -/obj/item/clothing/head/technomancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kds" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdy" = ( -/obj/item/weapon/storage/box/fluff/emoticon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdz" = ( -/obj/item/weapon/storage/fancy/whitecandle_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdF" = ( -/obj/item/weapon/banner/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdK" = ( -/obj/item/weapon/storage/box/mousetraps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kdS" = ( -/obj/item/clothing/under/rank/nullsuit/cmd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keb" = ( -/obj/item/clothing/suit/storage/vest/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ked" = ( -/obj/item/clothing/suit/storage/miljacket/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kef" = ( -/obj/item/clothing/under/fluff/eioni_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kek" = ( -/obj/item/clothing/head/helmet/space/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keq" = ( -/obj/item/weapon/circuitboard/firealarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keu" = ( -/obj/item/weapon/storage/box/casino/foamcrossbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kez" = ( -/obj/item/clothing/head/beret/corp/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keA" = ( -/obj/item/stack/tile/floor/eris/dark/bluecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keC" = ( -/obj/structure/bed/chair/bay/chair/padded/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keD" = ( -/obj/item/weapon/computer_hardware/hard_drive/cluster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keE" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keH" = ( -/obj/machinery/button/neonsign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keI" = ( -/obj/structure/filingcabinet/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keJ" = ( -/obj/item/weapon/storage/mrebag/side/menu10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keL" = ( -/obj/item/weapon/spell/spawner/fire_blast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keR" = ( -/obj/item/clothing/under/dress/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keT" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/almp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keU" = ( -/obj/item/clothing/accessory/medal/nobel_science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keW" = ( -/obj/item/weapon/paper/awaygate/snowfield/evacuation_order, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"keX" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfa" = ( -/obj/machinery/vitals_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfr" = ( -/obj/machinery/vending/loadout/clothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfz" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfB" = ( -/obj/item/weapon/tank/phoron/pressurized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfD" = ( -/obj/item/weapon/circuitboard/mass_driver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfL" = ( -/obj/item/toy/bouquet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfN" = ( -/obj/item/weapon/grenade/confetti/party_ball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfP" = ( -/obj/item/clothing/head/fedora/fluff/jemli, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfQ" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kfS" = ( -/obj/item/clothing/suit/storage/teshari/cloak/fluff/kita, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kga" = ( -/obj/item/clothing/head/helmet/space/void/atmos/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgc" = ( -/obj/item/integrated_circuit/output/screen/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgd" = ( -/obj/item/weapon/implanter/adrenalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgk" = ( -/obj/item/stack/tile/floor/eris/steel/gray_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgm" = ( -/obj/item/weapon/firework_star/weather/fog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgr" = ( -/obj/item/weapon/pen/fountain9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgu" = ( -/obj/item/weapon/reagent_containers/food/snacks/soydope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgC" = ( -/obj/item/weapon/handcuffs/cable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgD" = ( -/obj/item/weapon/pen/blade/fountain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kgE" = ( -/mob/living/simple_mob/slime/xenobio/emerald{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"khb" = ( -/obj/machinery/door/airlock/vault/bolted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khk" = ( -/obj/item/clothing/gloves/combat/knight/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khl" = ( -/obj/item/weapon/cell/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khm" = ( -/obj/item/clothing/accessory/badge/holo/cord, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khp" = ( -/obj/item/mecha_parts/part/gygax_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khs" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khA" = ( -/obj/item/clothing/head/pilot_vr/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khF" = ( -/obj/item/weapon/gun/energy/stunrevolver/vintage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"khV" = ( -/obj/item/clothing/under/suit_jacket/burgundy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kif" = ( -/obj/item/clothing/under/ascetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kim" = ( -/mob/living/simple_mob/vore/pakkun/snapdragon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kiq" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kir" = ( -/obj/structure/prop/blackbox/gecko_wreck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kis" = ( -/obj/item/weapon/paper/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kit" = ( -/obj/item/clothing/gloves/fluff/amara_gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kiz" = ( -/obj/structure/sign/flag/gap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kiC" = ( -/obj/item/device/modkit_conversion/fluff/sheri_rig_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kiL" = ( -/obj/item/clothing/under/dress/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kiX" = ( -/obj/structure/noticeboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjd" = ( -/obj/item/integrated_circuit/passive/power/metabolic_siphon/synthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kje" = ( -/obj/machinery/librarycomp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjf" = ( -/obj/item/clothing/under/rank/bartender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjg" = ( -/obj/item/trash/fishegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kji" = ( -/obj/item/clothing/head/beret/solgov/sifguard/patrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjt" = ( -/obj/item/clothing/under/johnny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjA" = ( -/obj/machinery/gear_dispenser/randomweapons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjK" = ( -/obj/item/weapon/storage/box/lights/tubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjO" = ( -/obj/item/clothing/glasses/omnihud/visor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjQ" = ( -/obj/item/clothing/suit/storage/star, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kjZ" = ( -/obj/item/seeds/eggyplant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkb" = ( -/obj/item/stack/emptysandbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkc" = ( -/obj/machinery/power/tesla_coil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkh" = ( -/obj/item/weapon/deck/cards, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkv" = ( -/obj/item/clothing/accessory/solgov/department/security/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkz" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkK" = ( -/obj/item/stack/tile/floor/eris/dark/violetcorener, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkU" = ( -/obj/item/weapon/storage/backpack/dufflebag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kkV" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shoulder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kle" = ( -/obj/item/device/encryptionkey/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klf" = ( -/obj/item/clothing/suit/kimono/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klm" = ( -/obj/item/clothing/under/pants/youngfolksjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kls" = ( -/obj/item/weapon/implanter/reagent_generator/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klv" = ( -/obj/item/weapon/refill_cartridge/autoname/food/fitness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klz" = ( -/obj/item/weapon/material/ashtray/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klD" = ( -/obj/structure/sign/scenery/fakefireaxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klI" = ( -/obj/item/weapon/reagent_containers/food/snacks/ant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klJ" = ( -/obj/item/clothing/under/skirt/colorable/jumperdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"klX" = ( -/obj/item/weapon/implant/freedom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmo" = ( -/obj/item/clothing/head/fancy_crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmu" = ( -/mob/living/silicon/robot/syndicate/mechanist, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kmC" = ( -/obj/item/weapon/grenade/shooter/energy/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmF" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmH" = ( -/obj/item/device/kit/paint/ripley/flames_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmM" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ryetalyn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmR" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmV" = ( -/obj/structure/closet/crate/secure/grayson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kmX" = ( -/obj/structure/closet/crate/secure/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knc" = ( -/obj/item/clothing/under/wetsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kne" = ( -/obj/item/weapon/reagent_containers/food/snacks/jupiter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knh" = ( -/obj/machinery/seed_extractor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kni" = ( -/obj/item/clothing/suit/storage/miljacket/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kno" = ( -/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knt" = ( -/obj/item/clothing/head/helmet/space/void/autolok, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knx" = ( -/obj/item/clothing/under/rank/security/corp/fluff/nika, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kny" = ( -/obj/item/weapon/gun/energy/gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knD" = ( -/obj/item/weapon/rig/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knE" = ( -/obj/item/clothing/suit/storage/snowsuit/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knG" = ( -/obj/item/weapon/melee/umbrella/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knI" = ( -/obj/item/weapon/reagent_containers/glass/bottle/hyronalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knM" = ( -/obj/item/seeds/eggplantseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knN" = ( -/obj/item/sniper_rifle_part/trigger_group, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knO" = ( -/obj/item/weapon/storage/pill_bottle/paracetamol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knQ" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"knV" = ( -/obj/item/clothing/under/rank/security/navyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kob" = ( -/obj/item/weapon/handcuffs/cable/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koc" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e8_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koe" = ( -/obj/item/seeds/ghostchiliseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kol" = ( -/obj/item/clothing/head/ushanka/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koq" = ( -/obj/item/toy/mecha/durand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kou" = ( -/obj/item/clothing/suit/armor/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kox" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/engie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koy" = ( -/obj/item/weapon/storage/quickdraw/syringe_case/clonemed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koF" = ( -/obj/item/weapon/reagent_containers/pill/alkysine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koG" = ( -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koI" = ( -/obj/item/clothing/accessory/solgov/department/command/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koK" = ( -/obj/item/clothing/mask/muzzle/tape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koP" = ( -/obj/item/ammo_magazine/ak74/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koQ" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koT" = ( -/obj/structure/prop/machine/nt_obelisk/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"koV" = ( -/obj/item/weapon/circuitboard/mecha/honker/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpc" = ( -/obj/item/clothing/glasses/sunglasses/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpf" = ( -/obj/item/mecha_parts/mecha_equipment/generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpw" = ( -/obj/item/integrated_circuit/memory/tiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpy" = ( -/obj/item/clothing/head/boaterhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpG" = ( -/obj/item/clothing/shoes/galoshes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpK" = ( -/obj/item/weapon/technomancer_catalog/apprentice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpM" = ( -/obj/machinery/computer/specops_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpW" = ( -/obj/item/weapon/book/custom_library/reference/securityguidelines, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kpY" = ( -/obj/item/poster/custom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kql" = ( -/obj/item/clothing/suit/unathi/robe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqm" = ( -/obj/item/weapon/stock_parts/matter_bin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqo" = ( -/obj/item/robot_parts/robot_component/actuator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqr" = ( -/obj/item/clothing/under/pj/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqz" = ( -/obj/item/toy/figure/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqF" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqG" = ( -/obj/machinery/button/remote/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqL" = ( -/obj/item/organ/internal/heart/machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kqO" = ( -/obj/item/device/paicard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kri" = ( -/obj/item/weapon/stock_parts/subspace/sub_filter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krm" = ( -/obj/structure/sign/warning/deathsposal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krn" = ( -/obj/structure/closet/walllocker_double/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krp" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kru" = ( -/obj/item/clothing/under/teshari/smock/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krx" = ( -/obj/item/weapon/card/id/civilian/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kry" = ( -/obj/item/clothing/under/swimsuit/stripper/mankini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krD" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krG" = ( -/obj/item/weapon/storage/belt/fannypack/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krH" = ( -/obj/item/clothing/accessory/maid_neck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krJ" = ( -/obj/structure/sign/department/miner_dock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krN" = ( -/obj/item/weapon/rig/pmc/medical/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krP" = ( -/obj/item/seeds/limeseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"krY" = ( -/obj/item/weapon/rig/ch/precursor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ksj" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ksO" = ( -/obj/machinery/porta_turret/stationary/CIWS, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ksP" = ( -/obj/item/device/mmi/inert/ai_remote, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ksX" = ( -/obj/item/mecha_parts/component/armor/lightweight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktb" = ( -/obj/item/device/assembly/timer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktd" = ( -/obj/structure/barricade/cutout/monky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kth" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/white_caique, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ktu" = ( -/obj/item/slime_cube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktv" = ( -/obj/item/clothing/mask/dolphin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktA" = ( -/obj/item/ammo_casing/a545/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktC" = ( -/obj/item/weapon/aiModule/syndicate_override, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktF" = ( -/obj/item/stack/tile/wood/tile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktM" = ( -/obj/item/device/nif/authentic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ktN" = ( -/obj/item/weapon/disk/limb/dsi_akula, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kup" = ( -/obj/item/weapon/fuel_assembly/supermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kur" = ( -/obj/item/clothing/under/hazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuw" = ( -/obj/item/mecha_parts/component/actuator/hispeed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuA" = ( -/obj/item/rig_module/rescue_pharm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuB" = ( -/obj/item/clothing/suit/storage/toggle/tesharicoatwhite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuH" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuJ" = ( -/obj/item/weapon/bedsheet/mimedouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuO" = ( -/obj/item/weapon/forensics/sample_kit/powder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuT" = ( -/obj/item/ammo_magazine/m9mmp90/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuX" = ( -/obj/item/weapon/digestion_remains/ribcage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kuY" = ( -/obj/item/seeds/soyaseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kva" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/maps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvf" = ( -/obj/item/weapon/flame/lighter/zippo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvm" = ( -/obj/item/weapon/rig/pmc/engineer/grey/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvz" = ( -/obj/item/weapon/storage/box/emps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvB" = ( -/obj/structure/closet/secure_closet/CMO_wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvC" = ( -/obj/item/ammo_magazine/clip/c12g, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvS" = ( -/obj/structure/closet/crate/veymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvW" = ( -/obj/item/clothing/suit/armor/combat/crusader_explo/FM, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvY" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kvZ" = ( -/obj/machinery/door/firedoor/glass/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwg" = ( -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwh" = ( -/obj/item/clothing/under/wedding/bride_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwj" = ( -/obj/item/toy/figure/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwm" = ( -/obj/item/weapon/digestion_remains/skull/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwr" = ( -/mob/living/simple_mob/animal/space/tree{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kwv" = ( -/obj/item/weapon/card/id/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwx" = ( -/obj/item/glass_jar/fish/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwH" = ( -/mob/living/simple_mob/animal/giant_spider/tunneler/fast{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kwJ" = ( -/obj/item/clothing/under/rank/nullsuit/sci/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwM" = ( -/obj/structure/closet/secure_closet/egg/special, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwN" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "8" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwP" = ( -/obj/item/stack/tile/floor/eris/steel/brown_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kwU" = ( -/obj/item/weapon/firstaid_arm_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxd" = ( -/obj/item/weapon/storage/briefcase/bookbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxj" = ( -/obj/item/weapon/gun/energy/soapenergy/gaussrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxq" = ( -/obj/item/ammo_magazine/ak74/plum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxs" = ( -/obj/item/clothing/under/corp/kaleidoscope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxx" = ( -/obj/item/clothing/accessory/solgov/department/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxz" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxC" = ( -/obj/item/clothing/under/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxE" = ( -/obj/item/clothing/gloves/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxM" = ( -/obj/item/clothing/accessory/armor/tag/pcrc/fluff/saur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxN" = ( -/obj/item/stack/tile/floor/techmaint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxT" = ( -/obj/machinery/cryopod/robot/door/dorms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxV" = ( -/obj/item/clothing/under/color/darkblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kxX" = ( -/obj/machinery/power/smes/buildable/power_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kya" = ( -/obj/item/ammo_casing/a57/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyo" = ( -/obj/item/weapon/stock_parts/subspace/amplifier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyw" = ( -/obj/item/clothing/accessory/material/makeshift/legguards, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyC" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyF" = ( -/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3/axis/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyR" = ( -/obj/vehicle/train/rover/engine/dunebuggy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyS" = ( -/obj/item/weapon/tool/wirecutters/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kyX" = ( -/obj/item/clothing/under/sexybunny_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kze" = ( -/obj/item/clothing/head/fedora/panama, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzi" = ( -/obj/machinery/icecream_vat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzr" = ( -/mob/living/simple_mob/vore/woof/hostile/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kzs" = ( -/obj/item/weapon/storage/vore_egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzx" = ( -/obj/item/integrated_circuit/input/atmo_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzA" = ( -/obj/machinery/the_singularitygen/tesla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzE" = ( -/obj/item/clothing/head/hood/winter/snowsuit/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzH" = ( -/obj/item/weapon/storage/box/pillbottles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzL" = ( -/obj/item/weapon/fluff/injector/numb_bite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzQ" = ( -/obj/item/weapon/disk/limb/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzS" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/dankpocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kzY" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAa" = ( -/obj/item/weapon/aiModule/guard_dog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAe" = ( -/obj/item/weapon/holo/esword/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAj" = ( -/obj/item/toy/plushie/squid/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAk" = ( -/obj/item/weapon/reagent_containers/glass/bottle/vermicetol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAo" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAE" = ( -/obj/item/clothing/shoes/boots/winter/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAF" = ( -/obj/machinery/door/airlock/angled_tgmc/cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAG" = ( -/obj/item/clothing/ears/earmuffs/headphones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAL" = ( -/mob/living/simple_mob/slime/xenobio/amber{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kAM" = ( -/obj/item/clothing/shoes/flats/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAP" = ( -/obj/item/toy/plushie/goose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kAV" = ( -/obj/item/weapon/disk/tech_disk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBe" = ( -/obj/item/weapon/implanter/fluff/coda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBy" = ( -/obj/item/weapon/rig/breacher/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBB" = ( -/obj/item/weapon/storage/backpack/messenger/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBF" = ( -/obj/structure/fans/hardlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBG" = ( -/obj/item/clothing/gloves/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBJ" = ( -/obj/item/clothing/shoes/boots/jackboots/toeless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBK" = ( -/obj/item/weapon/storage/belt/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBL" = ( -/obj/item/weapon/implant/organ/limbaugment/wrist/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBN" = ( -/obj/item/weapon/storage/fancy/markers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBQ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBR" = ( -/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBT" = ( -/obj/item/weapon/book/manual/robotics_manual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kBV" = ( -/obj/item/clothing/accessory/armor/legguards, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCl" = ( -/obj/item/clothing/under/rank/nullsuit/med/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCp" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/sweetration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCr" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCy" = ( -/obj/item/clothing/head/bio_hood/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCD" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCF" = ( -/obj/machinery/gear_dispenser/adventure_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCG" = ( -/obj/machinery/suit_cycler/vintage/tpilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCM" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCQ" = ( -/obj/item/weapon/weldingtool/experimental, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kCU" = ( -/mob/living/simple_mob/animal/giant_spider/webslinger/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kCX" = ( -/obj/item/ammo_casing/rocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDe" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDf" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDg" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDt" = ( -/obj/item/weapon/dnainjector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDA" = ( -/obj/item/weapon/storage/box/syndie_kit/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDC" = ( -/obj/item/weapon/disk/limb/eggnerdltdred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDD" = ( -/obj/item/weapon/spell/modifier/purify, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDK" = ( -/obj/item/weapon/storage/box/survival/space, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDL" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/bicaridine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDP" = ( -/obj/item/weapon/paper/awaygate/snowfield/evacuation_order2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDU" = ( -/obj/item/ammo_magazine/m12gdrumjack/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDX" = ( -/obj/item/weapon/dnainjector/coughmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kDY" = ( -/mob/living/simple_mob/mechanical/wahlem{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kEl" = ( -/obj/item/clothing/accessory/sweater/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEr" = ( -/obj/item/clothing/under/hyperfiber/bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEt" = ( -/obj/item/seeds/shrinkshroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEw" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEC" = ( -/obj/item/weapon/circuitboard/supplycomp/control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEI" = ( -/obj/item/weapon/storage/box/fluff/noel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kEM" = ( -/obj/item/trash/syndi_cakes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kER" = ( -/obj/item/clothing/shoes/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kES" = ( -/obj/item/weapon/gun/energy/sizegun/admin/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kET" = ( -/obj/item/weapon/circuitboard/aicore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFi" = ( -/obj/structure/sign/department/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFn" = ( -/obj/item/weapon/storage/secure/briefcase/trashmoney, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFr" = ( -/obj/machinery/portable_atmospherics/powered/pump/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFx" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFy" = ( -/obj/item/weapon/implant/vrlanguage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFF" = ( -/obj/item/weapon/circuitboard/thermoregulator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFG" = ( -/obj/item/frame/mirror, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFN" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFT" = ( -/obj/machinery/giga_drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFU" = ( -/mob/living/simple_mob/hostile/carp/pike, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kFV" = ( -/obj/item/weapon/cell/emergency_light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFX" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sarucube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kFY" = ( -/obj/item/clothing/accessory/storage/pouches/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGc" = ( -/mob/living/simple_mob/animal/passive/dog/void_puppy/nulle, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kGn" = ( -/obj/item/toy/AI, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGB" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/margherita, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGC" = ( -/obj/item/clothing/suit/space/syndicate/black/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGN" = ( -/obj/structure/sign/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGR" = ( -/obj/machinery/media/jukebox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGT" = ( -/obj/item/weapon/aiModule/peacekeeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGY" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kGZ" = ( -/obj/item/weapon/rig/medical/equipped/fluff/saur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHb" = ( -/obj/structure/salvageable/autolathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHh" = ( -/obj/item/weapon/reagent_containers/spray/sterilizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHl" = ( -/obj/structure/closet/secure_closet/freezer/money, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHp" = ( -/obj/item/weapon/shield/primitive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHr" = ( -/obj/item/weapon/gun/energy/stunrevolver/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHA" = ( -/obj/item/clothing/head/helmet/fluff/freddy/bonnie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHJ" = ( -/obj/item/weapon/spell/summon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kHM" = ( -/obj/item/clothing/accessory/armor/armguards/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIg" = ( -/obj/item/weapon/evidencebag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIl" = ( -/mob/living/simple_mob/animal/passive/bird/goldcrest, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kIm" = ( -/obj/item/device/communicator/integrated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIo" = ( -/obj/item/weapon/book/custom_library/religious/feastofkubera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIs" = ( -/obj/machinery/ai_status_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIu" = ( -/obj/item/clothing/suit/space/void/custodian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIw" = ( -/obj/item/weapon/card/id/talon/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIy" = ( -/obj/item/weapon/circuitboard/shield_gen_ex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIA" = ( -/obj/item/weapon/cartridge/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIB" = ( -/obj/item/weapon/storage/box/syndie_kit/g9mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIE" = ( -/obj/item/clothing/mask/smokable/cigarette/joint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIK" = ( -/obj/item/device/pipe_painter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIN" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIT" = ( -/obj/item/weapon/circuitboard/air_management/supermatter_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIU" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/tape_roll, -/obj/item/sticky_pad/random, -/obj/item/weapon/pen/blue, -/obj/item/weapon/pen/blue, -/obj/item/fulton_core, -/obj/item/fulton_core, -/obj/item/extraction_pack, -/obj/item/extraction_pack, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/item/weapon/pickaxe/hand, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/flashlight/color/orange, -/obj/item/device/threadneedle, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/device/flashlight/lantern, -/obj/random/soap, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/stack/nanopaste, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/stack/marker_beacon/ten, -/obj/item/device/starcaster_news, -/obj/item/device/mapping_unit, -/obj/item/weapon/storage/box/dosimeter, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/device/pda, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/accessory/permit/gun, -/obj/item/clothing/accessory/permit/gun, -/obj/item/weapon/material/knife/machete, -/obj/item/weapon/material/fishing_net, -/obj/item/weapon/storage/backpack/sport, -/obj/item/weapon/storage/backpack/sport, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/storage/belt, -/obj/item/clothing/accessory/poncho/thermal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kIY" = ( -/obj/item/clothing/glasses/meson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJc" = ( -/obj/item/clothing/head/cowboy/bandit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJd" = ( -/obj/item/weapon/circuitboard/fusion_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJe" = ( -/obj/item/clothing/head/tesh_hood/standard/red_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJg" = ( -/obj/machinery/organ_printer/flesh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJj" = ( -/obj/item/weapon/gun/energy/gun/protector/pilotgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJs" = ( -/mob/living/simple_mob/humanoid/pirate/ranged/shotgun{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kJu" = ( -/obj/item/ammo_casing/a50bmg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJC" = ( -/obj/item/clothing/shoes/boots/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJG" = ( -/obj/item/device/integrated_circuit_printer/illegal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJH" = ( -/obj/machinery/biogenerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJL" = ( -/obj/item/organ/internal/fruitgland, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJP" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kJS" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/deathripley{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kJX" = ( -/obj/item/clothing/accessory/material/makeshift/armguards, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKc" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKd" = ( -/obj/item/clothing/under/rustler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKk" = ( -/obj/machinery/power/smes/buildable/outpost_substation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKr" = ( -/obj/item/weapon/disk/integrated_circuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKt" = ( -/obj/item/clothing/under/rank/centcom_officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKv" = ( -/obj/item/ammo_magazine/ammo_box/b762/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKN" = ( -/obj/item/mecha_parts/mecha_tracking, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kKW" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLc" = ( -/obj/item/weapon/storage/toolbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLd" = ( -/obj/item/clothing/accessory/storage/webbing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLg" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/yellow_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLk" = ( -/obj/structure/sign/double/maltesefalcon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLv" = ( -/obj/item/clothing/under/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLx" = ( -/obj/item/weapon/material/knife/machete/hatchet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLA" = ( -/mob/living/simple_mob/mobs_monsters/clowns/scary{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kLC" = ( -/mob/living/simple_mob/construct/juggernaut/behemoth{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kLL" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLQ" = ( -/obj/item/weapon/book/manual/rust_engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kLR" = ( -/obj/item/clothing/ears/earmuffs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMi" = ( -/obj/item/weapon/reagent_containers/pill/benzilate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMj" = ( -/obj/item/clothing/ears/skrell/cloth_female/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMk" = ( -/obj/item/ammo_casing/microbattery/medical/stabilize2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMl" = ( -/obj/item/clothing/ears/earring/stud/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMs" = ( -/obj/item/mecha_parts/mecha_equipment/teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMt" = ( -/obj/item/weapon/storage/dicecup/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMu" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMw" = ( -/obj/item/clothing/suit/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMD" = ( -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMF" = ( -/mob/living/simple_mob/xeno_ch/queen, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kMM" = ( -/obj/structure/mirror/raider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMU" = ( -/obj/item/clothing/under/corp/wardt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kMV" = ( -/obj/item/weapon/reagent_containers/pill/rezadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNi" = ( -/obj/item/weapon/gun/projectile/shotgun/semi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNj" = ( -/obj/item/slimepotion/infertility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNl" = ( -/obj/structure/simple_door/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNn" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/specialwhiskey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNp" = ( -/obj/item/seeds/amauri, -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNt" = ( -/obj/item/clothing/accessory/permit/nanotech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNx" = ( -/obj/item/clothing/gloves/heavy_engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNA" = ( -/obj/structure/table/bench/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNC" = ( -/obj/item/device/communicator/watch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNE" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNO" = ( -/obj/item/weapon/circuitboard/body_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kNT" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOf" = ( -/obj/item/clothing/under/dress/singer/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOh" = ( -/obj/item/weapon/reagent_containers/food/snacks/fishandchips, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOi" = ( -/obj/item/weapon/circuitboard/teleporter_station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOk" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOq" = ( -/obj/structure/sign/directions/evac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOt" = ( -/obj/item/trash/stick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOz" = ( -/obj/item/clothing/suit/storage/fluff/jacket/air_cavalry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOC" = ( -/obj/item/sticky_pad/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kON" = ( -/obj/item/weapon/reagent_containers/food/snacks/watermelonslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOQ" = ( -/obj/machinery/button/remote/driver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kOU" = ( -/mob/living/simple_mob/humanoid/pirate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kOV" = ( -/obj/item/integrated_circuit/output/light/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPa" = ( -/obj/structure/sign/levels/cargo/refinery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPb" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPg" = ( -/obj/item/rig_module/device/arch_drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPh" = ( -/obj/item/weapon/storage/belt/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPo" = ( -/obj/machinery/doorbell_chime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPt" = ( -/mob/living/simple_mob/vore/greatwolf/grey{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kPK" = ( -/obj/item/weapon/staff/broom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPM" = ( -/obj/item/clothing/under/color/yellowgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPU" = ( -/obj/item/weapon/reagent_containers/food/drinks/greentea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPW" = ( -/obj/item/clothing/head/collectable/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kPZ" = ( -/obj/machinery/door/blast/puzzle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQk" = ( -/obj/item/clothing/accessory/pride/intersex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQl" = ( -/obj/item/clothing/gloves/ring/seal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQw" = ( -/obj/item/weapon/gun/energy/sniperrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQz" = ( -/obj/item/weapon/reagent_containers/food/snacks/coldchili, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQA" = ( -/obj/machinery/vending/food/arojoan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQC" = ( -/obj/machinery/door/airlock/angled_bay/hazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQE" = ( -/obj/item/seeds/plastellmycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQP" = ( -/obj/item/clothing/glasses/thermal/plain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQT" = ( -/obj/item/clothing/mask/bandana/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQV" = ( -/obj/item/weapon/paper/card/flower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kQW" = ( -/obj/structure/ghost_pod/ghost_activated/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRc" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/kord, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRd" = ( -/obj/structure/portal_event/resize/preset_grow_twohundred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRi" = ( -/obj/item/clothing/gloves/black/bloodletter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRk" = ( -/obj/item/clothing/head/hood/winter/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRl" = ( -/obj/item/clothing/suit/space/vox/civ/engineer/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRo" = ( -/obj/item/toy/figure/dsquad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRp" = ( -/obj/item/weapon/cell/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRs" = ( -/obj/item/ammo_casing/a10mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRv" = ( -/mob/living/simple_mob/humanoid/russian/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kRA" = ( -/obj/item/weapon/reagent_containers/food/drinks/decaf_tea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRD" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRE" = ( -/obj/item/clothing/head/beret/solgov/sifguard/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRF" = ( -/obj/item/roller/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kRL" = ( -/mob/living/simple_mob/vore/horse, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kRW" = ( -/obj/item/clothing/head/hood/winter/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSl" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackorange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSo" = ( -/obj/item/weapon/paper/carbon/cursedform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSr" = ( -/obj/item/clothing/suit/storage/fluff/modernfedcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSt" = ( -/obj/machinery/door/airlock/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSu" = ( -/obj/item/weapon/gun/energy/lasertag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSD" = ( -/obj/item/clothing/under/swimsuit/fluff/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSE" = ( -/obj/structure/closet/crate/secure/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSG" = ( -/obj/item/stack/tile/floor/eris/derelict1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSK" = ( -/obj/item/clothing/head/hgpiratecap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSS" = ( -/obj/item/weapon/reagent_containers/food/snacks/grilled_carp_slice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSV" = ( -/obj/item/clothing/accessory/badge/solgov/tags, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kSY" = ( -/obj/item/weapon/reagent_containers/food/snacks/fries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTr" = ( -/obj/item/weapon/pickaxe/excavationdrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTC" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTJ" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTO" = ( -/obj/item/stack/tile/roofing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTQ" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kTX" = ( -/obj/item/organ/internal/cell/machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUc" = ( -/obj/item/weapon/storage/box/timecap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUe" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress/mother{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kUf" = ( -/obj/item/clothing/under/undersuit/hazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUr" = ( -/obj/item/weapon/circuitboard/syndicatedoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUw" = ( -/obj/item/clothing/suit/storage/det_trench/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUD" = ( -/obj/item/solar_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUE" = ( -/obj/structure/sign/atmos/n2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUI" = ( -/obj/item/toy/figure/carrion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUK" = ( -/obj/item/weapon/disk/integrated_circuit/upgrade/clone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUL" = ( -/obj/item/weapon/tank/oxygen/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUM" = ( -/obj/structure/balloon/ghost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kUY" = ( -/obj/item/clothing/under/explorer/utility/command/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVj" = ( -/obj/item/clothing/accessory/tropical/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVm" = ( -/obj/item/clothing/gloves/gauntlets/rig/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVo" = ( -/obj/item/clothing/head/collectable/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVp" = ( -/obj/item/weapon/material/snow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVs" = ( -/obj/item/weapon/material/knife/hook, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVz" = ( -/obj/item/clothing/gloves/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVJ" = ( -/obj/item/clothing/under/acj, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVW" = ( -/obj/machinery/pipedispenser/disposal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kVZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWa" = ( -/obj/structure/table/holotable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWh" = ( -/obj/item/clothing/head/collectable/beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWo" = ( -/mob/living/simple_mob/animal/giant_spider/lurker/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kWv" = ( -/obj/item/weapon/bucket_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWy" = ( -/obj/item/weapon/card/id/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWG" = ( -/obj/item/clothing/head/cowboy/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWK" = ( -/obj/item/integrated_circuit/list, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWP" = ( -/obj/item/weapon/material/hatchet/unathiknife/fluff/payton_joghs_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWS" = ( -/obj/item/weapon/storage/firstaid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWT" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat_pocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWU" = ( -/obj/machinery/hyperpad{ - dir = 6 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kWW" = ( -/mob/living/simple_mob/metroid/mine{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kXn" = ( -/obj/item/ammo_casing/a556/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kXB" = ( -/obj/item/clothing/mask/bandana/skull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kXF" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/teshari/tesh2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kXR" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kXY" = ( -/obj/item/device/mmi/digital/posibrain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYh" = ( -/obj/machinery/atmospherics/pipe/vent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYn" = ( -/obj/machinery/conveyor_switch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYo" = ( -/obj/item/robot_parts/robot_component/diagnosis_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYp" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYq" = ( -/obj/item/weapon/implant/tracking/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYv" = ( -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYz" = ( -/obj/item/ammo_magazine/m380, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYC" = ( -/obj/structure/sign/painting/chapel_secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYD" = ( -/obj/machinery/shipsensors/fancy_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYF" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress/tank{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kYG" = ( -/mob/living/simple_mob/vore/woof{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"kYJ" = ( -/obj/item/ammo_magazine/m9mm/compact/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYL" = ( -/obj/item/trash/candy/gums, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYN" = ( -/obj/item/clothing/head/radiation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYQ" = ( -/obj/item/weapon/circuitboard/fluidpump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYT" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kYU" = ( -/obj/machinery/vending/wallmed_airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZl" = ( -/obj/item/weapon/fuel_assembly/deuterium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZq" = ( -/obj/item/weapon/reagent_containers/food/snacks/tortilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZs" = ( -/obj/item/integrated_circuit/input/examiner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZt" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZu" = ( -/obj/machinery/processor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZz" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZA" = ( -/obj/item/weapon/reagent_containers/food/snacks/chips/snv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZL" = ( -/obj/item/weapon/spell/chroma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"kZR" = ( -/obj/item/clothing/head/caphat/formal/fedcover/fedcovereng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lad" = ( -/obj/item/clothing/head/collectable/xenom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laj" = ( -/mob/living/simple_mob/vore/weretiger{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lao" = ( -/obj/item/clothing/under/rank/nullsuit/sec/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laq" = ( -/obj/item/mecha_parts/part/gygax_right_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"las" = ( -/obj/item/clothing/under/shorts/jeans/classic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lat" = ( -/obj/item/seeds/poppyseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lax" = ( -/obj/item/weapon/material/kitchen/utensil/fork/fluff/ragna_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laD" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laE" = ( -/obj/item/clothing/accessory/permit/gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laI" = ( -/obj/item/weapon/ducttape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laJ" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/keltec/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laK" = ( -/obj/structure/table/sifwoodentable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"laV" = ( -/obj/item/weapon/gun/energy/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbb" = ( -/obj/item/clothing/mask/smokable/pipe/cobpipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbg" = ( -/obj/machinery/status_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbj" = ( -/obj/item/weapon/reagent_containers/food/snacks/risotto, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbr" = ( -/obj/item/clothing/accessory/solgov/department/security/aurora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbz" = ( -/obj/item/weapon/gun/energy/clockwork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbE" = ( -/obj/item/weapon/material/knife/tacknife/survival/fluff/kaith, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbL" = ( -/obj/item/weapon/storage/mre, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lbS" = ( -/obj/item/weapon/gun/energy/mouseray/fennec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcl" = ( -/obj/item/clothing/head/plaguedoctorhat/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcm" = ( -/obj/item/device/assembly/prox_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcp" = ( -/obj/item/weapon/circuitboard/scanner_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcq" = ( -/obj/item/weapon/reagent_containers/food/snacks/chickenwing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcr" = ( -/obj/item/weapon/grenade/smokebomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcs" = ( -/obj/item/clothing/accessory/sweater/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcz" = ( -/obj/item/clothing/under/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcC" = ( -/obj/item/device/uav/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcD" = ( -/obj/item/clothing/under/fluff/siren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lcI" = ( -/mob/living/simple_mob/humanoid/cultist/hunter{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lcM" = ( -/mob/living/simple_mob/animal/giant_spider/tunneler/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lcQ" = ( -/obj/item/toy/plushie/nymph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldj" = ( -/obj/item/device/universal_translator/ear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldl" = ( -/obj/structure/reagent_dispensers/coolanttank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldm" = ( -/obj/item/clothing/accessory/badge/corporate_tag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldt" = ( -/obj/item/ammo_casing/a9x18/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldB" = ( -/mob/living/simple_mob/horror/Master, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ldJ" = ( -/obj/item/clothing/head/axiscap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldO" = ( -/obj/item/clothing/accessory/solgov/department/exploration/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldQ" = ( -/obj/item/weapon/circuitboard/helm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldR" = ( -/obj/machinery/power/shield_generator/charged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldS" = ( -/obj/item/weapon/cell/device/weapon/gunsword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldX" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ldZ" = ( -/obj/structure/ghost_pod/ghost_activated/morphspawn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leg" = ( -/obj/item/weapon/tool/wirecutters/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ler" = ( -/obj/machinery/computer/skills, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leu" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/horrible{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lev" = ( -/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ley" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leD" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leH" = ( -/obj/item/weapon/circuitboard/batteryrack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leM" = ( -/obj/structure/sign/flag/pirate/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leT" = ( -/obj/item/weapon/material/armor_plating, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leY" = ( -/obj/item/clothing/under/rank/internalaffairs/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"leZ" = ( -/obj/item/weapon/storage/belt/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lfb" = ( -/obj/item/clothing/accessory/solgov/fleet_patch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lfn" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lfs" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lft" = ( -/mob/living/simple_mob/animal/goat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lfv" = ( -/obj/item/weapon/gun/projectile/ecureuil/tac2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lfE" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgh" = ( -/obj/item/trash/spitgum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgj" = ( -/obj/item/clothing/head/helmet/fluff/madoka_helm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgq" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9_alt1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgz" = ( -/obj/structure/closet/crate/large/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgD" = ( -/obj/item/clothing/accessory/solgov/department/supply/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgG" = ( -/obj/item/rig_module/device/stamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgH" = ( -/obj/machinery/airlock_sensor/airlock_exterior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lgY" = ( -/obj/item/mecha_parts/mecha_equipment/tool/drill/bore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhe" = ( -/obj/item/toy/plushie/squid/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhi" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhj" = ( -/mob/living/simple_mob/vore/woof/cass{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lhl" = ( -/obj/item/weapon/ore/marble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhm" = ( -/obj/item/weapon/stock_parts/matter_bin/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhn" = ( -/obj/machinery/atmospherics/unary/engine/bigger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhp" = ( -/obj/structure/sign/directions/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhr" = ( -/mob/living/simple_mob/vore/xeno_defanged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lhu" = ( -/obj/item/clothing/under/fluff/zeke_vincir_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhH" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhU" = ( -/obj/item/mecha_parts/part/scarab_left_legs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lhX" = ( -/obj/item/weapon/implant/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lic" = ( -/obj/item/weapon/gun/magic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lie" = ( -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lij" = ( -/obj/item/rig_module/chem_dispenser/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lil" = ( -/obj/item/clothing/under/solgov/utility/fleet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lin" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/arstbru, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lio" = ( -/obj/item/weapon/implant/reagent_generator/rischi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"liu" = ( -/obj/machinery/atmospherics/binary/pump/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"liD" = ( -/obj/item/weapon/paper/monitorkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"liM" = ( -/obj/structure/loot_pile/mecha/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"liT" = ( -/obj/item/clothing/shoes/footwraps/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljb" = ( -/obj/item/clothing/head/beret/sec/corporate/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljd" = ( -/obj/item/seeds/telriis, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljf" = ( -/obj/item/device/modkit/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljo" = ( -/obj/item/toy/eight_ball/conch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljx" = ( -/obj/item/organ/internal/voicebox/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljB" = ( -/obj/item/clothing/suit/space/syndicate/green/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljD" = ( -/obj/item/weapon/circuitboard/miningdrillbrace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljL" = ( -/obj/item/weapon/material/gravemarker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljS" = ( -/obj/structure/closet/emcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ljW" = ( -/obj/structure/door_assembly/door_assembly_sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkd" = ( -/obj/item/weapon/storage/pill_bottle/nutriment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lki" = ( -/obj/item/stack/material/glass/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkj" = ( -/obj/item/weapon/reagent_containers/glass/bottle/frostoil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkn" = ( -/obj/item/weapon/storage/box/characters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkI" = ( -/obj/item/clothing/accessory/jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkM" = ( -/mob/living/simple_mob/slime/feral/dark_blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lkW" = ( -/obj/item/clothing/suit/varsity/green/sweater_vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkX" = ( -/obj/item/weapon/spell/radiance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lkZ" = ( -/obj/item/ammo_magazine/mglock9mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llo" = ( -/obj/item/clothing/accessory/badge/corporate_tag/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llr" = ( -/obj/item/weapon/implant/reagent_generator/egg/doublehicap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llu" = ( -/obj/item/ammo_magazine/mfoam_dart/smg/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llx" = ( -/obj/item/clothing/shoes/sneakerspurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llM" = ( -/obj/item/clothing/under/rank/paramedunilight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llN" = ( -/obj/machinery/computer/cryopod/dorms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llP" = ( -/obj/machinery/vending/event/overwear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llR" = ( -/obj/structure/salvageable/console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llW" = ( -/obj/machinery/door/airlock/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"llX" = ( -/obj/item/weapon/telecube/randomized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmb" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/command{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmc" = ( -/obj/item/clothing/under/cowboy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmd" = ( -/obj/item/clothing/under/dress/gothic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmf" = ( -/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/poison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmh" = ( -/obj/structure/bed/chair/comfy/rounded/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmi" = ( -/obj/item/weapon/disk/botany, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmo" = ( -/obj/item/weapon/circuitboard/mecha/imperion/damaged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmq" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmu" = ( -/obj/item/clothing/head/beret/solgov/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmy" = ( -/obj/item/clothing/gloves/ranger/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmL" = ( -/obj/item/clothing/accessory/solgov/specialty/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lmW" = ( -/obj/item/weapon/weldingtool/tubefed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnd" = ( -/obj/item/clothing/ears/skrell/cloth_female/lightblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnf" = ( -/obj/structure/sign/painting/away_areas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lng" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag/o9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnh" = ( -/obj/machinery/computer/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnl" = ( -/obj/item/weapon/card/id/event/altcard/syndiegold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnv" = ( -/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnF" = ( -/obj/item/ammo_casing/a9x18, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnH" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnL" = ( -/obj/item/mecha_parts/chassis/serenity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnN" = ( -/obj/item/weapon/commcard/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lnT" = ( -/obj/item/clothing/under/clown/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lol" = ( -/obj/structure/ghost_pod/manual/lost_drone/dogborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lom" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/christmasred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"los" = ( -/obj/item/projectile/bullet/pistol/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loz" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loI" = ( -/obj/item/clothing/under/pants/baggy/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loK" = ( -/obj/machinery/vending/wardrobe/genedrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loL" = ( -/obj/item/frame/light/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loR" = ( -/obj/item/weapon/circuitboard/medical_kiosk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"loZ" = ( -/obj/item/weapon/storage/backpack/satchel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpj" = ( -/obj/item/stack/material/tin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpl" = ( -/obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpu" = ( -/obj/item/organ/internal/intestine/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpv" = ( -/obj/item/seeds/gelthi, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpI" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolateegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpM" = ( -/obj/item/ammo_magazine/s45/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpT" = ( -/obj/item/clothing/suit/storage/hoodie/fluff/eviriik_4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpX" = ( -/obj/item/weapon/storage/wallet/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpY" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lpZ" = ( -/obj/machinery/gear_dispenser/suit/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqb" = ( -/obj/item/weapon/tool/wrench/fuelrod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqk" = ( -/obj/item/weapon/card/id/talon/doctor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lql" = ( -/obj/machinery/pointdefense_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqo" = ( -/obj/item/clothing/accessory/fluff/vasharr_armlets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqx" = ( -/obj/item/weapon/storage/belt/security/tactical/bandolier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqD" = ( -/obj/structure/constructshell/cult, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lqH" = ( -/obj/item/clothing/suit/storage/solgov/service/fleet/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqN" = ( -/obj/machinery/clonepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqP" = ( -/obj/item/clothing/head/mailman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqR" = ( -/obj/item/rig_module/mounted/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqV" = ( -/obj/item/clothing/suit/lumber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lqX" = ( -/obj/item/weapon/plastique, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrd" = ( -/obj/item/clothing/suit/space/void/medical/bio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrg" = ( -/obj/item/weapon/spell/mark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrm" = ( -/obj/item/mecha_parts/chassis/gygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lro" = ( -/obj/structure/sign/warning/cold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrp" = ( -/obj/item/toy/plushie/borgplushie/drake/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrt" = ( -/obj/item/clothing/accessory/permit/gun/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrA" = ( -/obj/item/clothing/under/pants/baggy/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrI" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/tindalos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lrN" = ( -/obj/item/weapon/technomancer_core/summoner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lso" = ( -/obj/structure/prop/alien/pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lsr" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lsC" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/peanutbutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lsL" = ( -/obj/item/clothing/accessory/solgov/department/medical/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lsO" = ( -/obj/mecha/combat/phazon/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lsS" = ( -/obj/item/clothing/head/helmet/space/void/engineering/hazmat/fluff/screehelm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltd" = ( -/obj/item/ammo_magazine/m9mml/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltk" = ( -/obj/vehicle/boat/dragon/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltr" = ( -/obj/item/clothing/suit/storage/vest/heavy/pcrc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lty" = ( -/obj/item/stack/tile/floor/eris/dark/brown_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltJ" = ( -/obj/machinery/mecha_part_fabricator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltL" = ( -/obj/item/weapon/surgical/hemostat/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltO" = ( -/obj/item/weapon/pickaxe/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltP" = ( -/obj/item/weapon/shield/riot/explorer/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltR" = ( -/obj/item/weapon/gun/energy/monorifle/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ltS" = ( -/obj/item/device/am_shielding_container, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luc" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/ice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lue" = ( -/obj/item/clothing/head/nursehat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luo" = ( -/obj/item/weapon/rig/pmc/medical/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luq" = ( -/obj/item/ammo_casing/a44, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lus" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/biomass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luu" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luB" = ( -/obj/item/clothing/under/dress/countess, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luE" = ( -/obj/item/clothing/accessory/badge/holo/detective/ruda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luH" = ( -/obj/item/modular_computer/laptop/preset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"luS" = ( -/obj/item/voice_changer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvb" = ( -/obj/item/clothing/under/color/ranger/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvc" = ( -/obj/item/weapon/tool/crowbar/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvj" = ( -/obj/item/clothing/head/hood/winter/snowsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvl" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvu" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/shambler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvv" = ( -/obj/machinery/chemical_dispenser/ert/specialops/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvC" = ( -/obj/structure/sign/hydrostorage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvD" = ( -/obj/item/clothing/head/helmet/crusader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvK" = ( -/obj/item/pipe_meter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvL" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvS" = ( -/obj/structure/closet/secure_closet/medical1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lvX" = ( -/obj/item/mecha_parts/component/armor/marshal/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwb" = ( -/obj/item/clothing/suit/storage/flannel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwc" = ( -/obj/structure/sign/signnew/flammables, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwf" = ( -/obj/item/weapon/implant/dexplosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwg" = ( -/obj/structure/sign/hangar/two, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwq" = ( -/obj/item/device/mapping_unit/operative, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lww" = ( -/obj/item/weapon/light/bulb/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwz" = ( -/obj/structure/sign/kiddieplaque, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwJ" = ( -/obj/item/ammo_magazine/m9mm/luger/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwQ" = ( -/obj/item/weapon/chaoscake_layer/five, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lwY" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/detflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxe" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxn" = ( -/obj/item/clothing/glasses/sunglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxp" = ( -/obj/item/weapon/implantcase/medkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxu" = ( -/obj/item/weapon/storage/pill_bottle/dexalin_plus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxA" = ( -/obj/item/weapon/holo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxD" = ( -/obj/machinery/holosign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxM" = ( -/obj/item/clothing/accessory/badge/corporate_tag/grayson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxU" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/security/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lxZ" = ( -/obj/item/clothing/head/helmet/space/void/axis/merc/sovrigh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lya" = ( -/obj/item/clothing/under/color/fjumpsuit/bluef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyb" = ( -/obj/item/mecha_parts/part/ripley_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyk" = ( -/obj/item/weapon/toy/desk/dippingbird, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyn" = ( -/obj/item/weapon/card/id/exploration/fm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyq" = ( -/obj/item/weapon/card/id/syndicate/station_access, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyr" = ( -/mob/living/simple_mob/animal/passive/dog/tamaskan, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lyA" = ( -/obj/item/weapon/broken_gun/laserrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyG" = ( -/obj/item/weapon/implanter/vrlanguage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyI" = ( -/obj/machinery/porta_turret/industrial/teleport_defense, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyV" = ( -/obj/item/weapon/rig/ert/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyX" = ( -/obj/structure/prop/machine/bsb_off, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lyY" = ( -/obj/item/clothing/glasses/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzc" = ( -/mob/living/simple_mob/animal/space/carp{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lzl" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzv" = ( -/obj/item/device/encryptionkey/heads/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzF" = ( -/obj/item/clothing/head/tesh_hood/standard/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzR" = ( -/obj/item/seeds/bananaseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzU" = ( -/obj/item/weapon/gun/energy/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lzW" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/axis_greatcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAc" = ( -/obj/item/weapon/gun/energy/retro/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAd" = ( -/obj/item/clothing/accessory/solgov/department/supply/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAi" = ( -/obj/item/weapon/digestion_remains/skull/rapala, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAo" = ( -/obj/item/device/toner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAp" = ( -/obj/item/clothing/accessory/badge/press/independent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAq" = ( -/obj/item/organ/internal/robotic/diagnostic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAt" = ( -/obj/mecha/combat/marauder/mauler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAu" = ( -/obj/item/weapon/pen/crayon/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAz" = ( -/obj/machinery/suit_cycler/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAA" = ( -/obj/item/weapon/material/butterfly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAI" = ( -/obj/item/clothing/head/kippa/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lAO" = ( -/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBg" = ( -/obj/item/weapon/reagent_containers/food/snacks/locust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBm" = ( -/obj/item/clothing/head/helmet/space/void/refurb/mercenary/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBq" = ( -/obj/item/bodybag/cryobag/robobag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBv" = ( -/obj/item/clothing/under/swimsuit/fluff/penelope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBF" = ( -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lBN" = ( -/obj/structure/sign/bigname/seg_7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBO" = ( -/obj/item/mecha_parts/part/odysseus_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBS" = ( -/obj/item/weapon/storage/secure/briefcase/fluff/jeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBT" = ( -/obj/item/ammo_casing/microbattery/medical/burn3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBW" = ( -/obj/item/weapon/implant/reagent_generator/egg/hicap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lBY" = ( -/obj/structure/curtain/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCd" = ( -/obj/item/slime_extract/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCf" = ( -/obj/item/toy/figure/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCr" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCB" = ( -/obj/item/clothing/suit/space/vox/civ/mechanic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCN" = ( -/obj/item/weapon/pen/crayon/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCW" = ( -/obj/item/clothing/head/utility/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lCY" = ( -/mob/living/simple_mob/vore/solarmoth/lunarmoth{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lDc" = ( -/obj/item/clothing/under/suit_jacket/teal/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDe" = ( -/obj/structure/sign/calendar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDf" = ( -/obj/item/weapon/ore/coal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDm" = ( -/obj/structure/door_assembly/door_assembly_hatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDn" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDq" = ( -/obj/item/clothing/head/rabbitears, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDt" = ( -/obj/machinery/porta_turret/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDD" = ( -/obj/structure/closet/crate/heph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDM" = ( -/obj/item/clothing/ears/earring/stud/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lDN" = ( -/mob/living/simple_mob/animal/giant_spider/electric/broodling, -/mob/living/simple_mob/animal/giant_spider/electric/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lEc" = ( -/obj/item/weapon/card/id/event/altcard/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEf" = ( -/obj/item/weapon/storage/box/gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEp" = ( -/obj/item/weapon/handcuffs/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEr" = ( -/obj/machinery/computer/turbine_computer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEF" = ( -/obj/item/weapon/material/knife/table, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEL" = ( -/obj/machinery/telecomms/server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEO" = ( -/obj/item/clothing/accessory/solgov/department/engineering/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lET" = ( -/obj/structure/sign/flag/vir/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEV" = ( -/obj/structure/sign/directions/medical/operating_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lEX" = ( -/obj/item/clothing/under/dress/redeveninggown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFb" = ( -/mob/living/simple_mob/faithless{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lFg" = ( -/obj/item/weapon/gun/energy/temperature/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFi" = ( -/obj/item/device/paicard/typeb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFr" = ( -/obj/item/weapon/card/id/medical/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFt" = ( -/obj/item/sniper_rifle_part/barrel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFB" = ( -/obj/item/clothing/under/kilt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFD" = ( -/obj/item/clothing/accessory/shiny/gloves/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFM" = ( -/obj/item/weapon/storage/backpack/purse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFO" = ( -/obj/item/clothing/mask/bluescarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFQ" = ( -/obj/machinery/computer/scan_consolenew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFX" = ( -/obj/item/weapon/storage/box/monkeycubes/sparracubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lFY" = ( -/obj/item/clothing/suit/space/vox/civ/trader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGa" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGd" = ( -/obj/item/weapon/pickaxe/six_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGg" = ( -/obj/item/clothing/accessory/medal/silver/valor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGo" = ( -/obj/item/weapon/dnainjector/deafmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGp" = ( -/obj/item/weapon/pen/fountain4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGq" = ( -/obj/item/weapon/reagent_containers/glass/beaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGG" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGK" = ( -/obj/machinery/shieldwall{ - dir = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGP" = ( -/obj/item/clothing/head/hood/winter/medical/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGW" = ( -/obj/structure/closet/crate/nanothreads, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGX" = ( -/obj/item/clothing/suit/cyberpunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lGZ" = ( -/obj/structure/closet/secure_closet/nanotrasen_commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHf" = ( -/obj/structure/closet/crate/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHj" = ( -/obj/item/weapon/circuitboard/mecha/ripley/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHl" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer/o5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHp" = ( -/obj/item/weapon/material/butterfly/boxcutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHy" = ( -/obj/item/ammo_magazine/m545/ap/ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHz" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/coldmountain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHA" = ( -/obj/machinery/door/airlock/glass_medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHC" = ( -/obj/item/modular_computer/tablet/preset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHD" = ( -/obj/item/weapon/mine/incendiary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHG" = ( -/obj/machinery/field_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHL" = ( -/obj/item/clothing/head/beret/sec/corporate/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHS" = ( -/obj/item/weapon/reagent_containers/food/snacks/venus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHT" = ( -/obj/item/toy/figure/excelsior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lHW" = ( -/obj/machinery/flasher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lIa" = ( -/obj/structure/sign/directions/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lIb" = ( -/mob/living/simple_mob/mechanical/hivebot/support{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lIf" = ( -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lIw" = ( -/obj/mecha/combat/fighter/gunpod/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lIz" = ( -/obj/machinery/vending/bepis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lIP" = ( -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJd" = ( -/obj/item/weapon/gun/projectile/automatic/wt550, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJu" = ( -/obj/item/clothing/accessory/scarf/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJv" = ( -/obj/item/weapon/commcard/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJC" = ( -/obj/structure/sign/graffiti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJD" = ( -/obj/item/clothing/under/suit_jacket/gambler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJF" = ( -/obj/item/clothing/gloves/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJI" = ( -/obj/item/device/sleevemate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJK" = ( -/obj/item/weapon/circuitboard/shield_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJN" = ( -/obj/item/device/communicator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lJZ" = ( -/obj/item/ammo_magazine/m10mm/pistol/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKb" = ( -/obj/item/clothing/suit/storage/toggle/engi_dep_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKh" = ( -/obj/item/weapon/stock_parts/gear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKu" = ( -/obj/item/clothing/suit/storage/snowsuit/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKB" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/one, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKD" = ( -/obj/item/organ/internal/brain/pariah_brain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKG" = ( -/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lKT" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lKU" = ( -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lKX" = ( -/obj/item/trash/popcorn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLb" = ( -/obj/structure/bed/chair/sofa/left/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLf" = ( -/obj/structure/prop/statue/stump_plaque, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLh" = ( -/obj/item/weapon/storage/box/fluff/shel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLv" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLw" = ( -/obj/item/weapon/rig/bayeng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLz" = ( -/obj/machinery/atmospherics/unary/engine/biggest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLB" = ( -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLD" = ( -/obj/item/weapon/gun/energy/pulse_rifle/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLN" = ( -/obj/item/weapon/circuitboard/aifixer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLO" = ( -/obj/item/weapon/circuitboard/mecha/gygax/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLW" = ( -/obj/structure/bed/chair/sofa/bench/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLX" = ( -/mob/living/simple_mob/animal/giant_spider/broodmother{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lLY" = ( -/obj/item/weapon/storage/fancy/cigarettes/carcinomas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lLZ" = ( -/obj/item/clothing/head/helmet/space/vox/civ/trader/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMa" = ( -/obj/structure/sign/level/three/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMf" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMi" = ( -/obj/structure/sign/redcross, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMr" = ( -/obj/item/toy/chainsaw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMu" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/goldschlager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMw" = ( -/obj/item/rig_module/pat_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMF" = ( -/obj/item/weapon/material/sharpeningkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMI" = ( -/obj/item/clothing/head/wheat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMK" = ( -/obj/item/clothing/under/swimsuit/stripper/stripper_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMO" = ( -/obj/machinery/chemical_dispenser/xenoflora/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMU" = ( -/obj/item/weapon/stock_parts/subspace/crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMW" = ( -/obj/structure/sign/flag/seo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lMX" = ( -/obj/item/weapon/card/id/syndicate/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNh" = ( -/obj/item/clothing/under/vrsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNi" = ( -/obj/item/canvas/twentyfour_twentyfour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNm" = ( -/obj/item/weapon/technomancer_catalog/master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNn" = ( -/obj/structure/bed/chair/comfy/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNs" = ( -/obj/structure/bed/chair/comfy/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNw" = ( -/obj/item/integrated_circuit/list/jointext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNI" = ( -/mob/living/simple_mob/animal/space/carp/large{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lNN" = ( -/obj/item/stack/tile/floor/eris/dark/golden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNR" = ( -/obj/item/weapon/material/twohanded/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNW" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lNX" = ( -/obj/structure/sign/directions/medical/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOa" = ( -/obj/machinery/floor_light/prebuilt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOc" = ( -/obj/item/toy/chewtoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOe" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOh" = ( -/obj/structure/barricade/cutout/shadowling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOu" = ( -/obj/item/trash/ratpackcheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOw" = ( -/obj/item/seeds/appleseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOx" = ( -/obj/item/seeds/lemonseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOC" = ( -/obj/item/weapon/gun/energy/hooklauncher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOM" = ( -/obj/item/clothing/suit/space/vox/civ/science/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lOZ" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/OMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPa" = ( -/obj/item/clothing/under/dress/pentagram, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPi" = ( -/obj/item/weapon/spell/resurrect, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPn" = ( -/obj/machinery/door/airlock/scp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPo" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPq" = ( -/obj/item/weapon/stamp/fluff/jade_horror, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPz" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPA" = ( -/obj/item/weapon/reagent_containers/food/snacks/xenomeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPB" = ( -/obj/item/weapon/reagent_containers/food/snacks/grilledcheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPM" = ( -/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPO" = ( -/obj/item/weapon/storage/pill_bottle/assorted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lPT" = ( -/mob/living/simple_mob/animal/space/jelly{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lQa" = ( -/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQb" = ( -/obj/item/weapon/storage/box/fluff/jiao, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQh" = ( -/obj/item/clothing/under/utility/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQi" = ( -/obj/item/integrated_circuit/passive/power/solar_cell/hex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQl" = ( -/obj/item/device/healthanalyzer/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQp" = ( -/obj/machinery/door/airlock/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQt" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQu" = ( -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQD" = ( -/obj/item/clothing/head/wizard/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQF" = ( -/obj/structure/closet/statue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQJ" = ( -/obj/item/device/vac_attachment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQS" = ( -/obj/machinery/door/airlock/glass_centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lQU" = ( -/obj/item/ammo_magazine/m9mm/large/preban/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRc" = ( -/obj/item/weapon/reagent_containers/food/snacks/rawsticks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRh" = ( -/obj/item/stack/sandbags/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRi" = ( -/obj/item/weapon/gun/energy/maghowitzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRk" = ( -/obj/item/ammo_magazine/m9mm/luger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRm" = ( -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRr" = ( -/obj/item/weapon/folder/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRs" = ( -/obj/item/clothing/head/hood/winter/medical/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRt" = ( -/obj/item/organ/internal/brainmirror, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRz" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRF" = ( -/obj/item/weapon/storage/backpack/messenger/com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRG" = ( -/obj/item/ammo_magazine/m9mm/large/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRI" = ( -/obj/item/rig_module/grenade_launcher/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRL" = ( -/obj/item/weapon/spellbook/oneuse/horsemask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRO" = ( -/obj/structure/prop/machine/smelter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRP" = ( -/obj/item/weapon/gun/projectile/revolver/nagant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lRV" = ( -/mob/living/simple_mob/mechanical/mecha/hoverpod{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lRX" = ( -/obj/item/weapon/kinetic_crusher/machete/dagger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSj" = ( -/obj/item/weapon/paper/talisman/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSl" = ( -/obj/item/device/modkit_conversion/hasd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSn" = ( -/obj/item/integrated_circuit/converter/stringlength, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSt" = ( -/obj/item/clothing/suit/storage/toggle/cardigan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSy" = ( -/obj/item/trash/salo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSC" = ( -/obj/item/weapon/storage/box/fluff/nika, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSK" = ( -/obj/item/weapon/storage/box/fluff/philipsmirnov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSL" = ( -/obj/item/clothing/under/color/lightgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lSQ" = ( -/obj/machinery/optable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTd" = ( -/obj/item/trash/vegration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTe" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_lightgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTi" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTm" = ( -/obj/item/toy/character/thief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTt" = ( -/obj/item/device/camera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTx" = ( -/obj/structure/closet/crate/secure/bishop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTH" = ( -/obj/item/integrated_circuit/converter/degrees2radians, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTI" = ( -/obj/item/weapon/gun/energy/lasercannon/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lTZ" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUa" = ( -/obj/item/weapon/book/manual/synthetic_life, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUb" = ( -/obj/item/clothing/under/pants/track/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUe" = ( -/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUl" = ( -/obj/item/clothing/under/shorts/khaki/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUG" = ( -/obj/item/weapon/reagent_containers/food/snacks/dough, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUN" = ( -/obj/item/pipe/binary/bendable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUO" = ( -/mob/living/simple_mob/animal/wolf/direwolf{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lUQ" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUS" = ( -/obj/item/weapon/bone/arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lUV" = ( -/obj/item/projectile/bullet/rifle/a556/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVd" = ( -/obj/item/weapon/rig/eva/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVl" = ( -/obj/machinery/disposal/wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVo" = ( -/obj/machinery/gear_dispenser/suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVs" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVt" = ( -/obj/item/clothing/mask/greenscarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVu" = ( -/obj/item/clothing/accessory/armor/legguards/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVv" = ( -/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVy" = ( -/obj/item/weapon/gun/energy/lasertag/blue/sub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVz" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVC" = ( -/obj/item/clothing/suit/storage/terran/service/navy/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVE" = ( -/obj/item/clothing/gloves/ranger/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVF" = ( -/obj/item/clothing/accessory/armor/tag/oneg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVM" = ( -/obj/item/clothing/suit/unathi/mantle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVN" = ( -/obj/machinery/atmospherics/pipe/cap/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVP" = ( -/obj/item/clothing/mask/balaclava, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVS" = ( -/obj/machinery/vending/weeb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lVY" = ( -/obj/item/clothing/shoes/boots/jackboots/fluff/techpriestboots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWe" = ( -/obj/item/clothing/accessory/poncho/roles/cloak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWf" = ( -/obj/machinery/door/blast/multi_tile/four_tile_hor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWk" = ( -/obj/structure/cable/ender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWn" = ( -/obj/item/integrated_circuit/passive/power/powernet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWo" = ( -/obj/item/weapon/melee/energy/sword/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWp" = ( -/obj/structure/prop/statue/pillar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWu" = ( -/obj/item/ammo_magazine/m10mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWE" = ( -/obj/machinery/vending/sovietsoda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWM" = ( -/obj/item/slimepotion/loyalty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lWT" = ( -/mob/living/simple_mob/animal/giant_spider/frost/sif{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lWZ" = ( -/obj/item/bee_smoker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXb" = ( -/obj/item/weapon/arrow/quill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXc" = ( -/mob/living/simple_mob/slime/xenobio/ruby{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lXf" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXg" = ( -/obj/item/device/electronic_assembly/large/terminal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXh" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXo" = ( -/obj/machinery/vending/event/food/ingredients, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXp" = ( -/obj/item/weapon/thecake_layer/three, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXr" = ( -/obj/item/weapon/card/id/event/altcard/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXC" = ( -/obj/item/weapon/circuitboard/shield_diffuser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXF" = ( -/obj/item/clothing/under/skirt/outfit/plaid_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lXT" = ( -/obj/item/weapon/reagent_containers/pill/myelamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYa" = ( -/mob/living/simple_mob/animal/sif/shantak/leader{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lYh" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "28" - }, -/obj/machinery/artillerycontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYq" = ( -/obj/item/weapon/cell/secborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYD" = ( -/obj/item/ammo_magazine/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYG" = ( -/obj/item/ammo_casing/a762/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYW" = ( -/obj/structure/bed/chair/comfy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lYX" = ( -/obj/machinery/gateway/centeraway/mcguffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZc" = ( -/obj/item/ammo_magazine/m10mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZk" = ( -/obj/mecha/combat/fighter/allure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZp" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/krinkov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZr" = ( -/obj/item/device/defib_kit/jumper_kit/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZs" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZC" = ( -/obj/machinery/photocopier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZG" = ( -/obj/item/weapon/tool/wirecutters/clippers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZH" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/acid{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"lZK" = ( -/obj/item/weapon/diseasedisk/premade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZN" = ( -/obj/item/device/electronic_assembly/wallmount/tiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZT" = ( -/obj/item/weapon/card/id/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"lZW" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/BPlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mac" = ( -/obj/item/weapon/digestion_remains/skull/zorren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mae" = ( -/obj/structure/prop/war/tgmc_minirockets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"maf" = ( -/obj/item/clothing/under/rank/chef/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mah" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mak" = ( -/obj/structure/closet/secure_closet/exile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mau" = ( -/obj/item/clothing/under/explorer/utility/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"maH" = ( -/obj/structure/bed/chair/sofa/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"maU" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "5" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbc" = ( -/obj/item/clothing/head/collectable/tophat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbk" = ( -/obj/structure/prop/machine/conduit/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbn" = ( -/obj/item/weapon/storage/chewables, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbv" = ( -/obj/item/clothing/suit/bio_suit/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbB" = ( -/obj/item/clothing/under/qipao/white/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbH" = ( -/obj/item/clothing/suit/space/syndicate/black/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbM" = ( -/obj/item/weapon/paper/djstation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbP" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbQ" = ( -/obj/item/clothing/head/fluff/avida, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbU" = ( -/obj/item/weapon/reagent_containers/food/snacks/sashimi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mbZ" = ( -/obj/item/mecha_parts/mecha_equipment/tool/rcd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcb" = ( -/obj/item/weapon/storage/backpack/satchel/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcf" = ( -/obj/item/shield_projector/line, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mch" = ( -/obj/item/weapon/portable_destructive_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcm" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/gatslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mcu" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcB" = ( -/obj/item/toy/plushie/green_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcC" = ( -/obj/item/clothing/head/beret/centcom/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcJ" = ( -/obj/item/clothing/head/helmet/space/vox/civ/trader/carapace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mcO" = ( -/obj/structure/sign/pods, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdd" = ( -/obj/item/clothing/suit/storage/solgov/service/fleet/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdk" = ( -/mob/living/simple_mob/animal/passive/fish/pike, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"mdl" = ( -/obj/item/weapon/storage/pouch/baton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdp" = ( -/obj/item/weapon/reagent_containers/food/snacks/cuttlefish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdu" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/medkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdz" = ( -/obj/machinery/light_construct, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdB" = ( -/obj/item/weapon/gun/projectile/luger/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdF" = ( -/obj/item/selectable_item/chemistrykit/size, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdG" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdJ" = ( -/obj/structure/sign/levels/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdN" = ( -/obj/item/weapon/reagent_containers/food/snacks/grub_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mdO" = ( -/obj/item/clothing/suit/armor/vest/ert/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meg" = ( -/obj/item/clothing/suit/armor/vest/ert/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mej" = ( -/obj/item/slime_extract/dark_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"men" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mer" = ( -/obj/item/seeds/watermelonseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meA" = ( -/obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meB" = ( -/obj/item/stack/tile/floor/eris/steel/bar_dance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meK" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyronalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meW" = ( -/obj/item/weapon/broken_gun/dartgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"meX" = ( -/obj/structure/bed/double/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mff" = ( -/obj/item/clothing/under/solgov/service/army/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfi" = ( -/obj/structure/prop/machine/complicator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfr" = ( -/obj/structure/morgue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfs" = ( -/obj/item/seeds/bluetomatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfw" = ( -/obj/machinery/computer/med_data/laptop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfy" = ( -/obj/item/weapon/circuitboard/crew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfE" = ( -/obj/item/weapon/spacecash/c1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfH" = ( -/obj/item/slime_extract/ruby, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfI" = ( -/obj/item/weapon/paper/solar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mfV" = ( -/obj/item/weapon/storage/box/fluff/madoka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mge" = ( -/obj/item/clothing/suit/stripper/stripper_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgk" = ( -/obj/item/clothing/accessory/solgov/fleet_patch/third, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgn" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/coco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgp" = ( -/obj/item/weapon/storage/pouch/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgq" = ( -/obj/item/clothing/suit/space/void/engineering/hazmat/fluff/screespess, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgv" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/bluecuracao, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgx" = ( -/obj/structure/showcase/yw/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgy" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mgE" = ( -/obj/item/seeds/teaseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhg" = ( -/obj/item/clothing/head/bio_hood/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhi" = ( -/obj/item/clothing/accessory/medal/solgov/silver/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhk" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkfishcooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhq" = ( -/obj/item/weapon/soap/purple_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhu" = ( -/obj/item/clothing/head/hood/siffet_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhz" = ( -/obj/item/weapon/storage/backpack/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhA" = ( -/obj/item/weapon/circuitboard/powermonitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhM" = ( -/obj/item/weapon/reagent_containers/food/snacks/bagelraisin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mhQ" = ( -/obj/item/clothing/gloves/regen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mie" = ( -/obj/structure/prop/rock/flat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mik" = ( -/obj/item/weapon/tray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mil" = ( -/obj/item/clothing/accessory/poncho/cloak/fluff/aroozeehos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"min" = ( -/obj/item/weapon/storage/toolbox/lunchbox/nt/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miv" = ( -/obj/item/weapon/rig/light/hacker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mix" = ( -/obj/item/clothing/mask/gas/plaguedoctor/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miC" = ( -/obj/structure/bed/chair/bay/chair/padded/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miE" = ( -/obj/item/weapon/material/knife/tacknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miG" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatpie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miJ" = ( -/obj/item/clothing/suit/storage/snowsuit/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miP" = ( -/obj/structure/outcrop/coal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miR" = ( -/obj/item/clothing/under/customs/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miS" = ( -/obj/item/clothing/accessory/bracelet/material/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miX" = ( -/obj/machinery/microscope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miY" = ( -/obj/item/seeds/ambrosiavulgarisseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"miZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mjk" = ( -/obj/item/device/lightreplacer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mjD" = ( -/obj/machinery/button/ignition, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mjH" = ( -/mob/living/simple_mob/animal/synx/ai/pet/greed{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mjR" = ( -/obj/machinery/seed_storage/xenobotany, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mjT" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mjY" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkb" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkc" = ( -/obj/item/weapon/reagent_containers/pill/protein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkf" = ( -/obj/item/weapon/storage/box/casino/costume_commie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkh" = ( -/obj/item/weapon/reagent_containers/food/snacks/cinnamonbun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkl" = ( -/obj/item/weapon/refill_cartridge/autoname/cigarette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkv" = ( -/obj/item/toy/plushie/carp/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkx" = ( -/obj/item/clothing/head/fluff/pink_tiara, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mky" = ( -/obj/item/stack/tile/grass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkB" = ( -/obj/item/clothing/suit/dress/solgov/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkH" = ( -/obj/item/clothing/suit/holidaypriest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mkX" = ( -/obj/item/clothing/head/crown/goose_queen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlc" = ( -/obj/item/weapon/commcard/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlj" = ( -/obj/item/weapon/reagent_containers/food/snacks/lasagna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlm" = ( -/obj/structure/bed/chair/sofa/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlK" = ( -/obj/item/clothing/under/color/fjumpsuit/pinkf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlO" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlU" = ( -/obj/machinery/door/airlock/angled_bay/double/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mlX" = ( -/obj/item/seeds/icepepperseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmg" = ( -/obj/machinery/gear_dispenser/adventure_box/weapon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmj" = ( -/obj/item/clothing/head/helmet/space/void/security/hasd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmn" = ( -/obj/item/clothing/under/pants/altevian/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmq" = ( -/obj/item/clothing/suit/storage/vest/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmu" = ( -/obj/item/integrated_circuit/output/led/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmv" = ( -/obj/item/weapon/grenade/supermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmy" = ( -/obj/item/clothing/accessory/jacket/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmF" = ( -/obj/item/integrated_circuit/list/search, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmI" = ( -/obj/machinery/light/flamp/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmJ" = ( -/obj/item/weapon/gun/projectile/caseless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmN" = ( -/obj/item/clothing/shoes/flats/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmT" = ( -/obj/item/clothing/under/cheongsam/darkblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mmY" = ( -/obj/item/clothing/suit/storage/solgov/dress/fleet/snco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mne" = ( -/obj/item/clothing/ears/skrell/chain/redjewels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnh" = ( -/obj/item/clothing/head/helmet/space/void/refurb/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnp" = ( -/obj/item/device/mapping_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnv" = ( -/mob/living/simple_mob/slime/xenobio/sapphire{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mny" = ( -/obj/structure/flight_left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnD" = ( -/obj/item/clothing/gloves/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnM" = ( -/obj/item/clothing/under/pants/baggy/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnQ" = ( -/obj/structure/prop/statue/statue5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnY" = ( -/obj/item/clothing/under/corp/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mnZ" = ( -/obj/item/clothing/gloves/ring/material/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moa" = ( -/obj/item/clothing/head/helmet/space/syndicate/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moh" = ( -/obj/item/ammo_magazine/clip/c9mm/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mol" = ( -/obj/item/weapon/storage/backpack/satchel/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moy" = ( -/obj/item/weapon/circuitboard/mecha/odysseus/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moC" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag/o8, -/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moF" = ( -/obj/item/weapon/pen/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moI" = ( -/obj/machinery/shieldwall{ - dir = 10 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moJ" = ( -/obj/machinery/door/airlock/maintenance/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moK" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"moX" = ( -/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpb" = ( -/obj/item/device/batterer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpd" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpl" = ( -/obj/item/weapon/computer_hardware/processor_unit/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpw" = ( -/obj/item/weapon/spell/construct/mend_occult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpy" = ( -/obj/item/weapon/magnetic_ammo/pistol/khi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpz" = ( -/obj/item/clothing/accessory/collar/azura, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpA" = ( -/obj/item/weapon/storage/box/body_record_disk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpC" = ( -/obj/item/weapon/inducer/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpE" = ( -/obj/item/seeds/telriis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpH" = ( -/mob/living/simple_mob/humanoid/cultist/castertesh{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mpI" = ( -/obj/item/seeds/onionseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpR" = ( -/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpW" = ( -/obj/machinery/door/airlock/angled_bay/external/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mpY" = ( -/obj/structure/sign/levels/evac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqa" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/doctorsdelight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqb" = ( -/mob/living/simple_mob/animal/passive/cat/runtime, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mqe" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/lizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqh" = ( -/obj/item/weapon/aiModule/protective_shell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqk" = ( -/obj/item/stack/telecrystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mql" = ( -/obj/structure/prop/war/tgmc_missile/keeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqm" = ( -/obj/structure/sign/directions/recreation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqq" = ( -/obj/structure/cable/heavyduty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqs" = ( -/obj/item/weapon/aiModule/balance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqt" = ( -/obj/item/ammo_magazine/a57, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqu" = ( -/obj/machinery/gear_dispenser/suit_fancy/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqx" = ( -/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqA" = ( -/obj/item/weapon/holo/esword/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqE" = ( -/obj/item/clothing/under/rank/chemist/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqL" = ( -/mob/living/simple_mob/slime/xenobio/red{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mqQ" = ( -/obj/item/integrated_circuit/cryptography/hash_md5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqV" = ( -/obj/item/device/analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqW" = ( -/obj/item/clothing/under/saare/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mqZ" = ( -/obj/item/clothing/head/beret/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mra" = ( -/obj/item/clothing/accessory/jacket/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrc" = ( -/obj/structure/bed/chair/modern_chair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrd" = ( -/obj/item/clothing/glasses/sunglasses/fluff/alfonso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrj" = ( -/obj/structure/sign/directions/medical/medeqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrl" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrn" = ( -/obj/item/robot_parts/robot_component/binary_communication_device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrp" = ( -/obj/item/ammo_magazine/m9mmp90/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrx" = ( -/obj/item/weapon/vehicle_assembly/snowmobile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrD" = ( -/obj/item/clothing/suit/space/void/refurb/engineering/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrI" = ( -/obj/item/weapon/reagent_containers/food/snacks/bearburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrK" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/blaze{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mrR" = ( -/obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mrV" = ( -/obj/item/clothing/suit/space/void/refurb/mercenary/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msf" = ( -/obj/item/weapon/paper/sop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msg" = ( -/obj/item/clothing/head/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msl" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/bronze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msm" = ( -/obj/item/clothing/glasses/regular/hipster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msp" = ( -/obj/item/clothing/head/helmet/space/void/medical/bio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msF" = ( -/obj/item/clothing/under/dress/maid/under_maid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msH" = ( -/obj/item/clothing/mask/gas/voice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msQ" = ( -/obj/item/weapon/circuitboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msR" = ( -/obj/item/weapon/commcard/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"msU" = ( -/obj/machinery/power/smes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mth" = ( -/obj/item/weapon/disk/limb/dsi_sergal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mti" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mtk" = ( -/obj/item/weapon/reagent_containers/food/snacks/sausage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mtw" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mtE" = ( -/obj/item/weapon/circuitboard/mech_recharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mtG" = ( -/obj/item/weapon/storage/box/fluff/phi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mtS" = ( -/obj/machinery/access_button/airlock_exterior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muf" = ( -/obj/item/weapon/rig/breacher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muk" = ( -/obj/item/ammo_casing/a545/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mup" = ( -/obj/structure/closet/walllocker_double/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muz" = ( -/obj/machinery/vending/foodfast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muH" = ( -/obj/item/weapon/circuitboard/aiupload, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muL" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon/microwave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muM" = ( -/obj/item/clothing/glasses/omnihud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muO" = ( -/obj/item/weapon/book/tome/imbued, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"muU" = ( -/obj/item/weapon/storage/box/matches, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvb" = ( -/obj/item/clothing/head/pelt/tigerpelt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvc" = ( -/obj/structure/sign/directions/teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvd" = ( -/obj/item/weapon/cell/mech/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mve" = ( -/obj/item/weapon/disk/limb/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvr" = ( -/obj/structure/sign/directions/engineering/reactor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvt" = ( -/obj/item/clothing/suit/space/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvu" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/green_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvv" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvw" = ( -/obj/item/integrated_circuit/memory/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvL" = ( -/obj/item/toy/figure/geneticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvR" = ( -/obj/structure/sign/flag/vystholm/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mvT" = ( -/mob/living/simple_mob/animal/space/mouse_army/ammo{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mwa" = ( -/obj/machinery/door/airlock/angled_tgmc/dropship1_pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwd" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/rpk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwf" = ( -/obj/item/weapon/handcuffs/legcuffs/bola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwg" = ( -/obj/structure/closet/secure_closet/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwi" = ( -/obj/item/clothing/under/teshari/undercoat/standard/blue_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwk" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwl" = ( -/obj/item/weapon/storage/bag/circuits/mini/smart/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwm" = ( -/obj/item/device/radio/beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwn" = ( -/obj/item/clothing/accessory/solgov/department/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwq" = ( -/obj/item/weapon/circuitboard/machine/reg_d, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwr" = ( -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mws" = ( -/obj/item/ammo_magazine/clip/mosin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwB" = ( -/obj/item/clothing/mask/altevian_breath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwC" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwD" = ( -/obj/item/vox/armalis_amp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwM" = ( -/obj/item/toy/plushie/coffee_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwQ" = ( -/obj/item/toy/owl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwS" = ( -/obj/item/clothing/head/bowler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mwV" = ( -/obj/item/weapon/tank/anesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxf" = ( -/obj/item/weapon/gun/energy/locked/phasegun/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxv" = ( -/obj/item/clothing/head/helmet/space/void/refurb/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxD" = ( -/obj/item/stack/material/fur/wool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxN" = ( -/obj/item/clothing/glasses/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxQ" = ( -/obj/item/weapon/cell/device/shield_generator/backpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxU" = ( -/obj/item/clothing/glasses/threedglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxV" = ( -/obj/item/clothing/under/rank/trek/sec/ent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mxZ" = ( -/obj/item/toy/character/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mya" = ( -/obj/item/clothing/under/skirt/outfit/fluff/avida, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myh" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/purple_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myl" = ( -/mob/living/simple_mob/animal/giant_spider/electric{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"myw" = ( -/obj/structure/bed/chair/sofa/bench/corner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myx" = ( -/obj/item/weapon/ore/osmium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myH" = ( -/obj/item/clothing/under/teshari/smock/dress/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myJ" = ( -/obj/item/clothing/head/helmet/alien/tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myN" = ( -/obj/machinery/smartfridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"myW" = ( -/obj/item/weapon/storage/vore_egg/file, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mze" = ( -/obj/item/weapon/grenade/shooter/energy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzk" = ( -/obj/item/weapon/pen/fountain6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzl" = ( -/obj/item/toy/balloon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzp" = ( -/obj/item/weapon/bedsheet/cosmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzs" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzt" = ( -/obj/item/slimepotion/friendship, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzx" = ( -/obj/mecha/working/hoverpod/combatpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzG" = ( -/obj/item/trash/smolburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzM" = ( -/obj/item/weapon/coin/aluminium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzV" = ( -/obj/item/device/starcaster_news, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mzX" = ( -/obj/item/clothing/accessory/collar/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAe" = ( -/obj/item/weapon/card/id/medical/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAk" = ( -/obj/item/clothing/under/sl_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAl" = ( -/obj/item/clothing/under/oldwoman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAx" = ( -/obj/item/clothing/under/solgov/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAB" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/cow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAF" = ( -/obj/item/clothing/suit/space/void/mining/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAH" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/tkb408, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAL" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mAM" = ( -/mob/living/simple_mob/animal/sif/glitterfly/rare, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mBq" = ( -/obj/machinery/v_garbosystem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mBv" = ( -/obj/item/clothing/head/helmet/space/void/merc/axis/axisrigh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mBw" = ( -/obj/item/weapon/storage/belt/explorer/pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mBC" = ( -/obj/item/weapon/storage/firstaid/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mBL" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCd" = ( -/obj/item/weapon/circuitboard/transhuman_clonepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCe" = ( -/obj/item/clothing/head/helmet/combat/bedevere, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCi" = ( -/obj/item/clothing/under/fluff/earthenbreath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCo" = ( -/obj/item/weapon/reagent_containers/food/drinks/decaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCp" = ( -/obj/item/organ/internal/brain/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCr" = ( -/obj/item/clothing/under/cowboy/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCz" = ( -/obj/item/weapon/card/id/civilian/service/bartender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCD" = ( -/obj/item/weapon/storage/box/wings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCG" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCH" = ( -/obj/item/weapon/implanter/loyalty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCM" = ( -/obj/item/weapon/gun/projectile/silenced/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCQ" = ( -/obj/item/trash/ratpackramen/lacquer3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCU" = ( -/obj/item/clothing/under/color/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mCY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDq" = ( -/obj/structure/sign/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDr" = ( -/obj/machinery/gateway{ - dir = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDs" = ( -/obj/item/weapon/reagent_containers/food/condiment/coldsauce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDv" = ( -/obj/item/clothing/suit/storage/solgov/service/army/security/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDK" = ( -/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mDW" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/purple_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEc" = ( -/obj/item/weapon/storage/lockbox/vials, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEd" = ( -/obj/item/clothing/under/captain_fly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEg" = ( -/obj/item/weapon/gun/energy/mouseray/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEy" = ( -/obj/item/clothing/under/rank/medical/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEA" = ( -/obj/structure/closet/crate/secure/scg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEB" = ( -/obj/item/clothing/suit/storage/toggle/sec_dep_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mED" = ( -/obj/item/weapon/reagent_containers/blood/synthblood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEF" = ( -/obj/item/clothing/suit/space/void/merc/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEH" = ( -/obj/machinery/vending/fishing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEL" = ( -/obj/item/clothing/under/dress/darkred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEM" = ( -/obj/machinery/drone_fabricator/derelict, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEO" = ( -/obj/item/clothing/gloves/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mEW" = ( -/obj/structure/sign/directions/roomnum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFb" = ( -/obj/item/clothing/head/hood/winter/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFe" = ( -/obj/item/clothing/under/shorts/jeans/mustang, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFj" = ( -/obj/item/toy/figure/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFl" = ( -/obj/item/clothing/suit/storage/fluff/zara_coat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFq" = ( -/obj/item/weapon/digestion_remains/skull/nevrean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFs" = ( -/obj/item/weapon/storage/pill_bottle/rezadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFt" = ( -/obj/structure/prop/alien/computer/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFG" = ( -/obj/structure/outcrop/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFI" = ( -/obj/structure/grille, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFL" = ( -/obj/structure/reflector/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFM" = ( -/obj/item/ammo_casing/a45/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mFZ" = ( -/obj/item/weapon/storage/bag/circuits/mini/converter/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGg" = ( -/obj/item/weapon/stool/baystool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGj" = ( -/obj/item/weapon/dnainjector/morph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGt" = ( -/obj/item/weapon/reagent_containers/pill/antitox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGx" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/pyro{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mGC" = ( -/mob/living/simple_mob/humanoid/merc/ranged/rifle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mGD" = ( -/obj/structure/sign/atmos_o2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGF" = ( -/obj/machinery/computer/transhuman/resleeving/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGH" = ( -/obj/item/weapon/reagent_containers/food/snacks/blt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGI" = ( -/obj/item/clothing/under/rank/head_of_security/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGM" = ( -/obj/item/weapon/computer_hardware/hard_drive/portable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mGP" = ( -/obj/item/weapon/storage/secure/briefcase/money, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHg" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHq" = ( -/obj/item/clothing/head/hood/robin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHr" = ( -/obj/item/glass_jar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHt" = ( -/obj/machinery/computer/security/xenobio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHz" = ( -/obj/item/weapon/stock_parts/matter_bin/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHA" = ( -/obj/structure/balloon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHB" = ( -/obj/item/weapon/circuitboard/telesci_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHC" = ( -/obj/item/weapon/gun/projectile/silenced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHP" = ( -/obj/structure/sign/levels/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHQ" = ( -/obj/item/stack/tile/floor/sidewalk/side, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mHS" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/champagne, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIp" = ( -/obj/structure/sign/department/rnd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIr" = ( -/obj/item/integrated_circuit/transfer/demultiplexer/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIt" = ( -/obj/item/clothing/suit/hgpirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIx" = ( -/obj/item/mecha_parts/part/ripley_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIA" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIH" = ( -/obj/item/clothing/suit/storage/toggle/fr_jacket/ems, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/lobstercooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIM" = ( -/obj/item/toy/plushie/fumo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIN" = ( -/obj/item/weapon/folder/white_cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIP" = ( -/obj/item/integrated_circuit/list/pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mIU" = ( -/obj/item/weapon/card/id/syndicate/dummy_cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJb" = ( -/obj/item/clothing/accessory/solgov/department/engineering/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJe" = ( -/obj/machinery/access_button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJf" = ( -/obj/item/weapon/paper/awaygate/snowfield/interrogation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJv" = ( -/obj/item/clothing/head/wedding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJE" = ( -/obj/item/weapon/bedsheet/greendouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJF" = ( -/obj/item/clothing/gloves/gauntlets/rig/light/hacker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJG" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJK" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJN" = ( -/obj/machinery/casino_prize_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mJP" = ( -/obj/item/weapon/reagent_containers/glass/beaker/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKf" = ( -/obj/item/clothing/mask/gas/fluff/skinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKi" = ( -/obj/item/clothing/under/color/ranger/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKn" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKt" = ( -/obj/item/clothing/accessory/medal/bronze_heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKv" = ( -/obj/item/weapon/card/id/talon/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKB" = ( -/obj/item/weapon/gun/projectile/automatic/wt550/lethal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKG" = ( -/obj/item/ammo_magazine/m2024/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKK" = ( -/obj/item/weapon/deadringer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKU" = ( -/obj/structure/smolebuilding/museum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mKW" = ( -/obj/structure/sign/atmos_plasma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mLa" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/moistnugget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mLq" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mLB" = ( -/obj/item/integrated_circuit/logic/binary/greater_than_or_equal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mLI" = ( -/obj/item/mecha_parts/component/armor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mLR" = ( -/obj/item/weapon/cell/device/weapon/recharge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMi" = ( -/obj/item/ammo_magazine/m545, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMl" = ( -/obj/structure/sign/levels/medical/operating_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMs" = ( -/obj/item/weapon/circuitboard/solar_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMv" = ( -/obj/item/weapon/spell/projectile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMI" = ( -/obj/item/clothing/head/festive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mML" = ( -/obj/item/clothing/suit/redtag/dom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mMM" = ( -/obj/item/weapon/paper/awaygate/snowfield/diary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNb" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "20" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNk" = ( -/obj/item/weapon/spell/track, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNs" = ( -/obj/item/weapon/implantcase/language/eal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNy" = ( -/obj/item/clothing/head/helmet/space/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNz" = ( -/obj/item/weapon/cell/protean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNG" = ( -/obj/item/ammo_magazine/asval/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNH" = ( -/obj/structure/closet/crate/secure/nanomed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNL" = ( -/obj/structure/frame/computer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNV" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNX" = ( -/obj/structure/bed/roller/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mNZ" = ( -/obj/structure/outcrop/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOa" = ( -/obj/item/clothing/head/collectable/HoS, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOh" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/meat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOk" = ( -/obj/item/clothing/accessory/scarf/teshari/neckscarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOn" = ( -/obj/item/weapon/cell/device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOs" = ( -/obj/item/weapon/gun/projectile/revolver/toy/crossbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOt" = ( -/obj/item/ammo_casing/a45/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOz" = ( -/obj/item/clothing/mask/surgical/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOA" = ( -/obj/structure/cult/talisman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOB" = ( -/obj/item/clothing/head/helmet/space/void/responseteam/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOE" = ( -/obj/item/inflatable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/unathiliquor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOI" = ( -/obj/structure/plushie/beepsky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOJ" = ( -/obj/item/weapon/spell/gambit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOK" = ( -/obj/item/clothing/head/tesh_hood/standard/pink_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOO" = ( -/obj/machinery/chemical_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOS" = ( -/obj/item/clothing/head/bio_hood/general, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOT" = ( -/obj/item/clothing/ears/skrell/cloth_male, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mOU" = ( -/obj/item/weapon/circuitboard/robotstoragecontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPb" = ( -/obj/item/clothing/ears/skrell/chain/bluejewels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPh" = ( -/obj/machinery/porta_turret/ai_defense, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPi" = ( -/obj/item/weapon/dnainjector/telemut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPp" = ( -/obj/structure/table/rack/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPw" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPF" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/generic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPI" = ( -/obj/item/clothing/shoes/fluff/wolfgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPP" = ( -/obj/item/toy/figure/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPS" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/ratvar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPT" = ( -/obj/structure/table/rack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mPU" = ( -/obj/structure/prop/war/tgmc_missile/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQc" = ( -/obj/item/weapon/rig/vox/civilian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQl" = ( -/obj/item/canvas/twentythree_nineteen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQm" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQq" = ( -/obj/item/ammo_magazine/ammo_box/b357/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQw" = ( -/obj/item/weapon/dnainjector/antirunfast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQy" = ( -/obj/item/weapon/stamp/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQB" = ( -/obj/item/clothing/suit/storage/labcoat/fluff/eioni_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQD" = ( -/obj/item/weapon/material/knife/machete/hatchet/stone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQI" = ( -/obj/structure/barricade/cutout/gondola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQL" = ( -/obj/item/weapon/reagent_containers/food/snacks/sausage/battered, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQP" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQR" = ( -/obj/item/clothing/mask/snorkel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQT" = ( -/obj/item/clothing/head/psy_crown/wrath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mQZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/doughslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRa" = ( -/obj/item/weapon/material/twohanded/spear/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRb" = ( -/obj/item/clothing/head/bomb_hood/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRe" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_compress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRk" = ( -/obj/mecha/medical/odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRx" = ( -/obj/item/weapon/circuitboard/recharger/wrecharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRz" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/hop/fluff/pip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRB" = ( -/obj/item/clothing/under/color/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRD" = ( -/obj/item/integrated_circuit/input/microphone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRF" = ( -/obj/item/royal_spider_egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRM" = ( -/obj/item/weapon/circuitboard/mecha/scarab/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRQ" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mRW" = ( -/obj/item/weapon/technomancer_core/overcharged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSa" = ( -/obj/item/weapon/gun/projectile/ecureuil/tac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSb" = ( -/obj/item/clothing/under/rank/geneticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSg" = ( -/obj/item/device/electronic_assembly/medium/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSx" = ( -/obj/structure/cable/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSD" = ( -/obj/structure/sign/signnew/canisters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSJ" = ( -/obj/machinery/door/airlock/angled_bay/elevator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSK" = ( -/obj/item/weapon/rig/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSP" = ( -/obj/item/weapon/spike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSQ" = ( -/obj/item/ammo_magazine/ammo_box/b545/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mSU" = ( -/obj/item/integrated_circuit/passive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTa" = ( -/obj/item/clothing/suit/storage/eio_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTh" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTn" = ( -/obj/item/weapon/soap/golden_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTo" = ( -/obj/item/weapon/reagent_containers/food/snacks/ricepudding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTv" = ( -/mob/living/simple_mob/construct/proteon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mTw" = ( -/obj/item/weapon/storage/belt/archaeology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTB" = ( -/mob/living/simple_mob/slime/xenobio/orange{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mTD" = ( -/obj/item/clothing/under/teshari/undercoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTF" = ( -/obj/item/weapon/gun/projectile/revolver/toy/big_iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTK" = ( -/obj/item/clothing/suit/leathercoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTM" = ( -/obj/item/weapon/spell/modifier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mTZ" = ( -/obj/item/clothing/accessory/pride/bi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUd" = ( -/obj/machinery/pipedispenser/orderable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUj" = ( -/obj/item/ammo_magazine/ammo_box/b545/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUn" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/eggless{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mUo" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUD" = ( -/obj/structure/prop/war/warhead2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUG" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUI" = ( -/obj/item/clothing/accessory/sweater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUJ" = ( -/obj/structure/prop/blackbox/snowfield_base, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUP" = ( -/obj/machinery/r_n_d/server/core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUQ" = ( -/obj/item/weapon/storage/secure/briefcase/nsfw_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mUX" = ( -/obj/item/clothing/under/mbill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVd" = ( -/obj/item/clothing/head/helmet/space/void/refurb/medical/alt/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVm" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVD" = ( -/obj/item/clothing/shoes/boots/ranger/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVE" = ( -/obj/item/clothing/shoes/knight_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVK" = ( -/obj/item/clothing/gloves/ring/material/copper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVM" = ( -/obj/structure/bed/chair/bay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVO" = ( -/obj/item/clothing/gloves/arm_guard/combat/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVR" = ( -/obj/item/clothing/under/yw/rank/head_of_security/formal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVU" = ( -/obj/item/clothing/accessory/fullcape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVW" = ( -/obj/item/device/modkit_conversion/fluff/debug_gunkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mVY" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/pitchgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWa" = ( -/obj/item/clothing/accessory/material/custom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWi" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWj" = ( -/obj/mecha/combat/durand/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWm" = ( -/obj/machinery/artifact_harvester, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWo" = ( -/obj/item/weapon/grenade/empgrenade/low_yield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWq" = ( -/obj/item/weapon/stamp/ward, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWw" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/dermaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWC" = ( -/obj/item/weapon/reagent_containers/food/snacks/turkeyslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWF" = ( -/obj/item/clothing/under/rank/hydroponics/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWH" = ( -/mob/living/simple_mob/construct/artificer/caster{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mWN" = ( -/obj/item/clothing/accessory/collar/khcrystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWR" = ( -/obj/item/weapon/storage/box/rxglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWS" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWU" = ( -/obj/item/stack/tile/floor/eris/dark/gray_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mWY" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/robo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXb" = ( -/obj/item/weapon/storage/toolbox/lunchbox/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXf" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sparracube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXi" = ( -/obj/machinery/smartfridge/drinks/showcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXr" = ( -/obj/item/mecha_parts/part/gygax_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXv" = ( -/obj/item/ammo_magazine/m545/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXB" = ( -/obj/item/clothing/accessory/poncho/thermal/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXF" = ( -/obj/item/clothing/gloves/ring/material/bronze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXL" = ( -/obj/item/stack/tile/floor/eris/techmaint/panels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mXP" = ( -/obj/machinery/door/airlock/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYa" = ( -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYh" = ( -/obj/item/weapon/pen/fountain2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYm" = ( -/obj/machinery/porta_turret/stationary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYn" = ( -/obj/item/weapon/implant/neural, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYx" = ( -/obj/item/clothing/mask/bandana/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYA" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/mutagen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYB" = ( -/obj/item/stack/material/concrete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYC" = ( -/obj/structure/salvageable/machine_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYD" = ( -/obj/item/ammo_magazine/mp5mag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYE" = ( -/obj/item/clothing/accessory/tie/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYN" = ( -/obj/item/weapon/gun/energy/captain/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYS" = ( -/obj/item/weapon/gun/projectile/revolver/webley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYT" = ( -/obj/item/weapon/spell/projectile/ionic_bolt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mYZ" = ( -/obj/item/seeds/soyaseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZe" = ( -/obj/item/clothing/shoes/laceup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZi" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"mZl" = ( -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZm" = ( -/obj/item/clothing/accessory/storage/black_vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZn" = ( -/obj/item/clothing/under/dress/littleblackdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZq" = ( -/obj/item/weapon/reagent_containers/food/snacks/milosoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZw" = ( -/obj/item/clothing/ears/earring/dangle/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZx" = ( -/obj/item/integrated_circuit/input/button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZA" = ( -/obj/machinery/gateway/brass{ - dir = 10 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZB" = ( -/obj/structure/fireplace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"mZK" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/pink_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nam" = ( -/obj/item/weapon/storage/backpack/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nan" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nat" = ( -/obj/item/clothing/suit/space/void/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nau" = ( -/obj/item/stack/material/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naC" = ( -/obj/item/poi/pascalb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naL" = ( -/obj/item/clothing/accessory/maid_arms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naM" = ( -/obj/item/weapon/reagent_containers/food/snacks/grub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naP" = ( -/obj/item/clothing/accessory/solgov/department/exploration/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naS" = ( -/obj/item/clothing/under/technomancer/master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naT" = ( -/obj/item/device/multitool/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"naY" = ( -/obj/item/weapon/circuitboard/protolathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nba" = ( -/obj/item/weapon/storage/backpack/satchel/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbf" = ( -/obj/item/weapon/circuitboard/card, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbi" = ( -/obj/item/stack/lightpole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbk" = ( -/obj/item/clothing/under/teshari/undercoat/jobs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbl" = ( -/obj/structure/sign/flag/vir/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbr" = ( -/obj/item/clothing/suit/armor/combat/crusader_costume/lucky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbv" = ( -/obj/item/weapon/storage/bag/fossils, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nby" = ( -/obj/item/weapon/bedsheet/cosmosdouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbG" = ( -/obj/machinery/atmospherics/pipe/cap/visible/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbH" = ( -/obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbI" = ( -/obj/item/clothing/suit/storage/toggle/tesharicoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbK" = ( -/obj/item/weapon/storage/backpack/satchel/withwallet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbP" = ( -/obj/item/weapon/circuitboard/grounding_rod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbV" = ( -/obj/machinery/computer/prisoner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbW" = ( -/obj/item/clothing/head/wizard/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbX" = ( -/obj/item/weapon/storage/backpack/dufflebag/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nbY" = ( -/obj/item/clothing/suit/space/vox/civ/bartender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nca" = ( -/obj/item/weapon/circuitboard/gatewaycontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncb" = ( -/obj/machinery/gateway/brass{ - dir = 5 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncc" = ( -/obj/structure/simple_door/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncd" = ( -/obj/item/clothing/accessory/holster/leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncw" = ( -/obj/item/weapon/paper/jobs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncN" = ( -/obj/item/clothing/under/pants/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncU" = ( -/obj/item/clothing/shoes/black/cuffs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncV" = ( -/obj/item/clothing/shoes/boots/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncW" = ( -/obj/item/clothing/under/teshari/smock/dress/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ncX" = ( -/obj/item/mecha_parts/chassis/odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndb" = ( -/obj/item/toy/cat_toy/rod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndj" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/vegration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndk" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndq" = ( -/obj/structure/extraction_point, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndr" = ( -/obj/structure/barricade/cutout/law, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndA" = ( -/obj/mecha/combat/fighter/scoralis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndL" = ( -/obj/item/weapon/storage/box/glass_extras/sticks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndM" = ( -/obj/item/weapon/storage/pill_bottle/dexalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndN" = ( -/obj/item/weapon/rig/hazard/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndP" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndQ" = ( -/mob/living/simple_mob/animal/passive/fish/solarfish, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"ndT" = ( -/obj/structure/largecrate/piano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndU" = ( -/obj/item/weapon/spell/summon/summon_ward, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ndW" = ( -/mob/living/simple_mob/vore/solargrub{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ned" = ( -/obj/item/clothing/accessory/armband/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neh" = ( -/obj/structure/sign/kiddieplaque/poi2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nem" = ( -/obj/item/clothing/accessory/solgov/rank/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neB" = ( -/obj/structure/largecrate/tits, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neI" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer/o4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neL" = ( -/obj/item/weapon/gun/launcher/confetti_cannon/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neM" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/cosmic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"neX" = ( -/obj/item/clothing/shoes/boots/ranger/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfb" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfh" = ( -/obj/item/weapon/storage/box/mechabeacons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfl" = ( -/obj/structure/sign/greencross, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfm" = ( -/obj/item/weapon/implantcase/health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfn" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/raissue142, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfq" = ( -/obj/item/seeds/vale, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfu" = ( -/mob/living/simple_mob/blob/spore/infesting{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nfv" = ( -/obj/item/device/core_sampler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfw" = ( -/obj/item/weapon/card/id/engineering/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfF" = ( -/obj/structure/largecrate/animal/cat/bones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfG" = ( -/obj/item/weapon/bedsheet/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfH" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/oak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfI" = ( -/obj/structure/ghost_pod/manual/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfT" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nfW" = ( -/obj/item/weapon/implantcase/tracking, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngb" = ( -/obj/item/weapon/card/id/external, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngc" = ( -/obj/machinery/gateway/brass{ - dir = 8 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngf" = ( -/obj/item/clothing/under/clown/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngj" = ( -/obj/structure/sign/warning/engineering_access, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngm" = ( -/obj/item/clothing/under/dress/antediluvian/sheerless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngp" = ( -/obj/item/trash/brainzsnax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngr" = ( -/obj/structure/sign/levels/security/forensics/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngu" = ( -/obj/item/organ/internal/kidneys/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngy" = ( -/obj/structure/closet/l3closet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngz" = ( -/obj/item/clothing/accessory/scarf/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngA" = ( -/obj/machinery/firealarm/angled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngF" = ( -/obj/item/clothing/glasses/meson/aviator/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngL" = ( -/obj/item/seeds/rhubarb, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngO" = ( -/obj/item/stack/material/wax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngU" = ( -/obj/item/clothing/head/helmet/space/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ngZ" = ( -/obj/structure/sign/christmas/lights, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhc" = ( -/obj/item/weapon/storage/fancy/blackcandle_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhj" = ( -/obj/item/clothing/suit/storage/vest/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhr" = ( -/obj/item/weapon/cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhu" = ( -/obj/item/clothing/head/tesh_hood/standard/black_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhA" = ( -/obj/structure/closet/secure_closet/egg/nevrean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhJ" = ( -/obj/item/device/integrated_electronics/detailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhT" = ( -/obj/item/clothing/under/corp/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nhZ" = ( -/obj/item/ammo_magazine/tp23s/highpower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nie" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nig" = ( -/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nij" = ( -/obj/item/weapon/stamp/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nis" = ( -/obj/item/clothing/glasses/hud/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"niz" = ( -/mob/living/simple_mob/mobs_monsters/clowns/mayor{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"niA" = ( -/obj/item/weapon/gun/energy/lasershotgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"niL" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"niT" = ( -/obj/machinery/mech_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"niW" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/raissue147, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"niZ" = ( -/obj/item/weapon/circuitboard/machine/power_turbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njg" = ( -/obj/item/surplus_voucher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njr" = ( -/obj/item/clothing/head/shiny_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njv" = ( -/obj/item/ammo_casing/microbattery/combat/ion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njw" = ( -/obj/item/clothing/head/hood/toggleable/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njE" = ( -/obj/item/clothing/glasses/sunglasses/blindfold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njF" = ( -/obj/item/clothing/suit/storage/det_trench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njG" = ( -/obj/machinery/chemical_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njR" = ( -/obj/item/weapon/airlock_electronics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"njT" = ( -/obj/item/clothing/ears/earring/stud/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkf" = ( -/obj/item/seeds/amauri, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkh" = ( -/obj/structure/prop/machine/sorter/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkr" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nku" = ( -/obj/item/ammo_magazine/asval/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nky" = ( -/mob/living/simple_mob/animal/sif/tymisian{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nkD" = ( -/obj/structure/noticeboard/anomaly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkE" = ( -/obj/item/weapon/storage/bible/fluff/amina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkI" = ( -/obj/item/clothing/head/helmet/bucket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nkS" = ( -/obj/item/toy/mecha/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlc" = ( -/obj/machinery/door/airlock/angled_bay/double/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlf" = ( -/obj/item/capture_crystal/ultra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlk" = ( -/obj/item/clothing/head/helmet/space/void/refurb/mercenary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlm" = ( -/obj/item/weapon/disk/limb/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlp" = ( -/obj/item/weapon/paper/awaygate/snowfield/activation_order, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nls" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlv" = ( -/obj/item/clothing/accessory/fluff/vasharr_pendant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlB" = ( -/obj/structure/sign/directions/dorms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlK" = ( -/obj/item/clothing/under/skirt/colorable/swept, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlN" = ( -/obj/structure/prop/war/tgmc_missile/napalm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlP" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlV" = ( -/obj/item/clothing/head/hood/winter/christmasgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nlW" = ( -/obj/item/stack/cable_coil/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmd" = ( -/obj/item/weapon/gun/energy/stunrevolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmi" = ( -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmj" = ( -/obj/item/clothing/accessory/solgov/specialty/counselor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmv" = ( -/obj/structure/sign/level/ground, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmD" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/yellow_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmM" = ( -/obj/item/seeds/sunflowerseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmQ" = ( -/obj/item/weapon/storage/bag/circuits/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nmX" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/psilocybin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnn" = ( -/obj/item/weapon/circuitboard/status_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nno" = ( -/obj/item/weapon/disk/integrated_circuit/upgrade/illegal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnp" = ( -/obj/item/stack/flag/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nns" = ( -/obj/item/clothing/suit/storage/vest/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnt" = ( -/obj/item/weapon/storage/vore_egg/bugcocoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnu" = ( -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnz" = ( -/mob/living/simple_mob/humanoid/cultist/elite{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nnE" = ( -/obj/item/weapon/storage/quickdraw/syringe_case/bonemed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnL" = ( -/obj/machinery/vending/wallmed1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnM" = ( -/obj/item/seeds, -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnX" = ( -/obj/item/clothing/suit/engicost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nnZ" = ( -/obj/structure/table/darkglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noi" = ( -/obj/machinery/light/spot/no_nightshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nol" = ( -/obj/item/weapon/disk/species, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noo" = ( -/obj/item/weapon/storage/box/evidence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nop" = ( -/obj/structure/sign/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nor" = ( -/obj/item/clothing/under/rank/head_of_security/jensen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noB" = ( -/obj/item/weapon/archaeological_find, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noG" = ( -/obj/item/device/healthanalyzer/improved, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noM" = ( -/obj/item/weapon/card/id/event/accessset/itg/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noU" = ( -/obj/machinery/vending/donksoft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"noV" = ( -/obj/item/clothing/under/shorts/jeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npa" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npb" = ( -/obj/item/weapon/storage/box/glasses/rocks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npf" = ( -/obj/item/ammo_magazine/m16/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nph" = ( -/obj/structure/sign/bigname/seg_6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npq" = ( -/obj/item/device/quantum_pad_booster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nps" = ( -/obj/item/clothing/suit/armor/pcarrier/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npt" = ( -/obj/item/ammo_magazine/m45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npy" = ( -/obj/structure/closet/walllocker_double/hydrant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npG" = ( -/obj/item/clothing/mask/lacemask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npJ" = ( -/obj/item/weapon/material/butterflyblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npL" = ( -/obj/item/clothing/suit/storage/solgov/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npO" = ( -/obj/item/weapon/gun/energy/kinetic_accelerator/minebot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npV" = ( -/obj/item/stack/material/quartz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"npX" = ( -/obj/item/organ/internal/kidneys/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqj" = ( -/obj/item/weapon/gun/energy/staff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nql" = ( -/obj/item/weapon/implantcase/adrenalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqv" = ( -/obj/item/weapon/reagent_containers/glass/bottle/tramadol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqG" = ( -/obj/item/weapon/card/id/civilian/service/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqL" = ( -/obj/item/ammo_casing/a9mm/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqN" = ( -/obj/item/clothing/accessory/collar/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqO" = ( -/obj/structure/event/present, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqP" = ( -/obj/item/clothing/mask/gas/zaddat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqY" = ( -/obj/item/slime_irradiator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nqZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/makaroni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nro" = ( -/obj/item/weapon/rig/protean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nru" = ( -/obj/item/weapon/dice/d4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nry" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/matcha_latte, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nrA" = ( -/obj/item/weapon/spell/aura/biomed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nrF" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/smw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nrJ" = ( -/obj/item/clothing/under/moderncoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nrL" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nrV" = ( -/obj/item/weapon/cartridge/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsd" = ( -/obj/item/weapon/circuitboard/security/tv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsi" = ( -/obj/item/ammo_casing/a127x108/hv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsj" = ( -/obj/item/clothing/under/solgov/utility/sifguard/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsv" = ( -/obj/item/clothing/head/helmet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsA" = ( -/obj/item/clothing/suit/armor/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsC" = ( -/obj/item/ammo_magazine/m75/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsF" = ( -/obj/item/modular_computer/console/preset/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsJ" = ( -/obj/item/integrated_circuit/converter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsM" = ( -/obj/machinery/light/spot/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsO" = ( -/obj/item/clothing/under/wetsuit_skimpy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsP" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsQ" = ( -/obj/item/clothing/glasses/sunglasses/sechud/aviator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsS" = ( -/obj/item/clothing/suit/skeleton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nsY" = ( -/obj/item/clothing/suit/storage/fluff/takirasuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nta" = ( -/obj/item/clothing/gloves/fluff/techpriestgloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nti" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/braincake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntu" = ( -/obj/item/stack/tile/floor/eris/white/gray_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntx" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntA" = ( -/obj/item/clothing/suit/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntB" = ( -/obj/item/weapon/material/knife/machete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/threemileisland, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ntI" = ( -/obj/item/weapon/dnainjector/antiinsulation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nui" = ( -/obj/machinery/power/rtg/kugelblitz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"num" = ( -/obj/machinery/suit_cycler/vintage/tmedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuo" = ( -/obj/item/device/electronic_assembly/wallmount, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nus" = ( -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuu" = ( -/obj/item/clothing/under/fluff/aluranevines, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuz" = ( -/obj/item/canvas/twentythree_twentythree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuD" = ( -/obj/item/clothing/suit/armor/captain/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuF" = ( -/obj/structure/bed/chair/comfy/rounded/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuM" = ( -/obj/item/weapon/reagent_containers/food/condiment/mustard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nuY" = ( -/obj/item/weapon/dnainjector/antihallucination, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nve" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/vendhotdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvf" = ( -/obj/item/weapon/gun/energy/sizegun/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvk" = ( -/obj/machinery/smartfridge/chemistry/chemvator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvt" = ( -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvy" = ( -/obj/machinery/mining/brace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvC" = ( -/obj/item/toy/griffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvD" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/para, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvJ" = ( -/obj/item/weapon/commcard/int_aff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvL" = ( -/obj/structure/reflector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nvT" = ( -/obj/item/weapon/disk/design_disk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwa" = ( -/obj/item/device/radio/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwc" = ( -/obj/item/weapon/circuitboard/biogenerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwi" = ( -/obj/item/weapon/storage/vore_egg/chocolate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwn" = ( -/obj/item/weapon/broken_bottle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwp" = ( -/obj/item/flag/fivearrows/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwq" = ( -/obj/structure/closet/secure_closet/CMO, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwu" = ( -/obj/item/seeds/grapeseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwy" = ( -/obj/item/weapon/weldpack/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwB" = ( -/obj/item/weapon/circuitboard/unary_atmos/cooler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwD" = ( -/obj/item/trash/unajerky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwI" = ( -/obj/item/clothing/under/cheongsam/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwM" = ( -/obj/item/weapon/broken_gun/laser_retro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwN" = ( -/obj/item/weapon/shield/riot/tele, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwP" = ( -/obj/structure/particle_accelerator/power_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwS" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nwZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/honey_candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxa" = ( -/obj/item/weapon/reagent_containers/food/snacks/amanita_pie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxb" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxf" = ( -/obj/item/clothing/under/pants/chaps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxg" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxj" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxm" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxo" = ( -/obj/machinery/door/blast/gate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxp" = ( -/mob/living/simple_mob/animal/passive/cat/kitten, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nxr" = ( -/obj/item/clothing/head/hood/galahad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxx" = ( -/obj/item/device/personal_shield_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxy" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxz" = ( -/obj/item/weapon/reagent_containers/food/snacks/bangersandmash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxF" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxH" = ( -/obj/item/clothing/under/rank/khi/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxM" = ( -/obj/item/weapon/storage/backpack/sport/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxQ" = ( -/obj/structure/barricade/cutout/cultist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nxT" = ( -/obj/item/stack/material/graphite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nye" = ( -/obj/item/seeds/cocoapodseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyg" = ( -/obj/item/clothing/suit/space/void/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyi" = ( -/obj/item/weapon/circuitboard/machine/vitals_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyj" = ( -/obj/machinery/door/airlock/angled_bay/vault, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyp" = ( -/mob/living/simple_mob/animal/passive/fish/trout, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"nyr" = ( -/obj/item/clothing/head/hood/winter/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyu" = ( -/obj/structure/closet/body_bag/cryobag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyE" = ( -/obj/item/clothing/under/rank/khi/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyG" = ( -/obj/structure/closet/crate/rcd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyI" = ( -/obj/item/weapon/spacecasinocash/c10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyN" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyQ" = ( -/obj/item/clothing/head/helmet/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyR" = ( -/obj/machinery/transhuman/synthprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyW" = ( -/obj/item/integrated_circuit/logic/binary/jklatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyX" = ( -/obj/item/weapon/reagent_containers/pill/corophizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyY" = ( -/obj/item/inflatable/door/torn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nyZ" = ( -/obj/item/weapon/circuitboard/mining_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzc" = ( -/obj/item/weapon/digestion_remains/skull/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzf" = ( -/obj/item/integrated_circuit/input/adjacent_locator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzj" = ( -/obj/item/integrated_circuit/output/led/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzl" = ( -/obj/item/instrument/banjo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzu" = ( -/obj/item/clothing/head/hood_vr/hotdog_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzF" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzG" = ( -/obj/structure/prop/nt_biocan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzH" = ( -/obj/item/weapon/strangerock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzM" = ( -/obj/item/clothing/head/kippa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzX" = ( -/obj/item/integrated_circuit/reagent/injector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nzZ" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAa" = ( -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAb" = ( -/obj/structure/noticeboard/nanite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAf" = ( -/obj/item/clothing/under/solgov/utility/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAh" = ( -/obj/item/clothing/head/crown/goose_queen/christmas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAn" = ( -/obj/item/weapon/storage/bag/circuits/mini/transfer/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAp" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat/fedcapt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAB" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/science/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAC" = ( -/obj/item/clothing/head/taqiyah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAD" = ( -/obj/item/clothing/under/yw/rank/security/formal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nAL" = ( -/obj/item/stack/material/fur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBb" = ( -/obj/item/weapon/circuitboard/mecha/durand/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBl" = ( -/obj/structure/sign/department/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBm" = ( -/obj/mecha/combat/marauder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBo" = ( -/obj/item/clothing/accessory/badge/holo/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBr" = ( -/obj/item/clothing/accessory/storage/pouches/large/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBv" = ( -/obj/structure/sign/department/toxins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBw" = ( -/obj/item/weapon/storage/toolbox/lunchbox/cti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBx" = ( -/obj/item/weapon/gun/energy/modular/cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBy" = ( -/obj/item/weapon/spell/projectile/beam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBD" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBE" = ( -/obj/item/toy/plushie/spider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBN" = ( -/obj/item/clothing/accessory/solgov/department/command/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBO" = ( -/obj/item/clothing/head/beret/corp/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBP" = ( -/obj/item/clothing/under/rank/paramedunidark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nBW" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb02, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCf" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCg" = ( -/obj/item/ammo_magazine/pitchmag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCi" = ( -/obj/item/weapon/storage/box/traumainjectors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCj" = ( -/obj/item/clothing/gloves/light_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCs" = ( -/obj/item/toy/plushie/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCH" = ( -/obj/item/clothing/head/helmet/space/void/medical/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCO" = ( -/obj/item/clothing/head/tesh_hood/standard/yellow_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCS" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nCU" = ( -/obj/structure/prop/war/warhead3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nDi" = ( -/obj/item/ammo_magazine/ammo_box/b12g, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nDQ" = ( -/obj/item/clothing/mask/gas/sechailer/swat/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nDR" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEd" = ( -/obj/item/rig_module/gauntlets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEe" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEg" = ( -/obj/item/pizzabox/mushroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEh" = ( -/obj/item/clothing/head/helmet/space/vox/civ/engineer/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEj" = ( -/obj/machinery/atmospherics/trinary/mixer/t_mixer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEw" = ( -/obj/item/clothing/under/pants/altevian/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEG" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress/star{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nER" = ( -/obj/item/toy/figure/metro_patrolman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nES" = ( -/obj/item/weapon/storage/rollingpapers/blunt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nEU" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/jani, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFc" = ( -/obj/item/stack/animalhide/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFi" = ( -/obj/item/clothing/under/dress/goddess, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFl" = ( -/obj/item/clothing/under/yw/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFm" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFs" = ( -/obj/item/ammo_magazine/ammo_box/b12g/stunshell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFu" = ( -/obj/machinery/porta_turret/lasertag/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFv" = ( -/obj/machinery/am_shielding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFF" = ( -/obj/structure/salvageable/console_broken_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFK" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/alma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFM" = ( -/obj/structure/sign/department/shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFN" = ( -/obj/item/clothing/head/fluff/zao, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFS" = ( -/obj/item/clothing/shoes/flats/white/color/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nFV" = ( -/obj/item/seeds/eggyplant, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGp" = ( -/obj/item/weapon/storage/pouch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGq" = ( -/mob/living/simple_mob/creature/cult/strong{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nGr" = ( -/obj/item/weapon/grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGy" = ( -/obj/item/weapon/vehicle_assembly/quadtrailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGE" = ( -/obj/structure/bed/chair/bay/comfy/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGL" = ( -/obj/item/toy/plushie/octopus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGN" = ( -/obj/structure/sign/hangar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGT" = ( -/obj/item/weapon/sword/fluff/joanaria, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nGY" = ( -/obj/item/ammo_magazine/m38/giskard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHa" = ( -/obj/item/weapon/reagent_containers/food/snacks/ricecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHk" = ( -/mob/living/simple_mob/mechanical/mecha/hoverpod/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nHl" = ( -/obj/structure/sign/warning/siphon_valve, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHm" = ( -/obj/machinery/disease2/diseaseanalyser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHp" = ( -/obj/structure/sign/directions/cargo/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHr" = ( -/obj/item/seeds/poppyseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHu" = ( -/obj/item/clothing/suit/storage/hazardvest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHK" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHO" = ( -/obj/item/clothing/head/hood/mocha_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHU" = ( -/obj/machinery/vending/foodfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nHW" = ( -/obj/machinery/flasher/portable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIe" = ( -/obj/machinery/suit_cycler/vintage/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIg" = ( -/obj/item/clothing/under/gimmick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIk" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIm" = ( -/obj/item/seeds/weeds, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIn" = ( -/obj/structure/sign/levels/engineering/gravgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIo" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIq" = ( -/obj/structure/closet/toolcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIu" = ( -/obj/vehicle/boat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIA" = ( -/obj/item/integrated_circuit/input/local_locator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIE" = ( -/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIF" = ( -/mob/living/simple_mob/vore/woof/hostile/horrible{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nIH" = ( -/obj/item/weapon/card/id/event/accessset/itg/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIJ" = ( -/obj/item/projectile/bullet/rifle/a545, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIL" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIO" = ( -/obj/structure/dispenser/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIR" = ( -/obj/mecha/combat/fighter/allure/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIT" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nIX" = ( -/obj/item/gunbox/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJa" = ( -/obj/item/ammo_casing/a12g/beanbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJg" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJn" = ( -/obj/structure/cable/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJp" = ( -/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJq" = ( -/obj/machinery/atmospherics/unary/heater/sauna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJr" = ( -/obj/structure/table/rack/gun_rack/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJt" = ( -/obj/item/seeds/poisonberryseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJv" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJw" = ( -/obj/item/clothing/head/beret/centcom/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJz" = ( -/obj/item/clothing/suit/space/void/autolok, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJE" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJH" = ( -/obj/item/clothing/suit/storage/solgov/service/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJJ" = ( -/obj/item/stack/tile/wood/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJU" = ( -/obj/item/weapon/book/codex/lore/news, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJW" = ( -/obj/structure/musician/piano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nJY" = ( -/obj/item/weapon/stool/baystool/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKa" = ( -/obj/item/clothing/glasses/hud/health/aviator/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKb" = ( -/obj/item/weapon/card/id/talon/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKd" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/molniya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKj" = ( -/obj/item/weapon/circuitboard/med_data/pcu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKp" = ( -/obj/item/ammo_magazine/ammo_box/b44, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKw" = ( -/obj/structure/cult/forge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKD" = ( -/obj/structure/closet/crate/mimic/dangerous, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKK" = ( -/obj/item/clothing/suit/storage/vest/heavy/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKN" = ( -/obj/item/weapon/melee/telebaton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKO" = ( -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKS" = ( -/obj/item/weapon/surgical/bonegel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKT" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "7" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nKY" = ( -/obj/structure/closet/crate/cooper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLb" = ( -/obj/item/weapon/storage/mrebag/menu3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLd" = ( -/obj/item/weapon/reagent_containers/food/drinks/jar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLk" = ( -/obj/structure/signpost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLr" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/fal{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nLx" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLy" = ( -/obj/item/weapon/plantspray/pests/old/phosmet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLz" = ( -/obj/item/organ/internal/stomach/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLA" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLD" = ( -/obj/item/ammo_casing/smartgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLE" = ( -/obj/item/ammo_casing/a45lc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLF" = ( -/obj/item/stack/cable_coil/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLM" = ( -/obj/random/outcrop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nLO" = ( -/obj/item/seeds/tobaccoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMa" = ( -/obj/item/weapon/reagent_containers/food/snacks/hakarl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMc" = ( -/obj/item/pipe/directional, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMk" = ( -/obj/item/clothing/suit/space/void/engineering/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMl" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/kelotane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMo" = ( -/obj/machinery/door/blast/radproof/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMs" = ( -/obj/item/weapon/card/id/civilian/internal_affairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMv" = ( -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMC" = ( -/obj/item/device/pda/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nME" = ( -/obj/structure/closet/secure_closet/freezer/kitchen/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMO" = ( -/obj/item/ammo_magazine/cell_mag/combat/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nMU" = ( -/obj/item/weapon/dnainjector/antitele, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNa" = ( -/obj/item/clothing/head/soft/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNb" = ( -/obj/item/clothing/head/hood/ian_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNf" = ( -/obj/item/weapon/gun/projectile/cell_loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNh" = ( -/obj/item/ammo_casing/a45/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNj" = ( -/mob/living/simple_mob/vore/aggressive/dragon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nNs" = ( -/obj/machinery/sleep_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNx" = ( -/obj/item/clothing/under/solgov/utility/army/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNy" = ( -/obj/item/clothing/under/swimsuit/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNC" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNT" = ( -/obj/item/seeds/vanilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nNV" = ( -/mob/living/simple_mob/vore/aggressive/mimic/closet{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nOb" = ( -/obj/structure/closet/walllocker_double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOh" = ( -/obj/item/poster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOm" = ( -/obj/item/weapon/implant/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOn" = ( -/obj/item/clothing/under/dress/sundress_pinkshort, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOy" = ( -/obj/item/clothing/suit/storage/toggle/peacoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOF" = ( -/obj/item/weapon/book/manual/anomaly_testing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOJ" = ( -/obj/structure/closet/crate/secure/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOK" = ( -/obj/item/clothing/under/cohesion/striped/testfull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOM" = ( -/obj/item/clothing/under/away/daedalus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nON" = ( -/obj/item/clothing/under/axis/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOP" = ( -/obj/machinery/power/port_gen/pacman/super/potato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOS" = ( -/obj/item/weapon/reagent_containers/food/snacks/bugball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nOX" = ( -/mob/living/simple_mob/slime/xenobio/yellow{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nPc" = ( -/obj/item/weapon/paper/awaygate/snowfield/note, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPi" = ( -/obj/item/clothing/mask/gas/sechailer/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPk" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPm" = ( -/obj/item/weapon/circuitboard/shuttle_console/ferry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPw" = ( -/obj/item/weapon/reagent_containers/food/drinks/tea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPx" = ( -/obj/item/ammo_casing/microbattery/medical/normalsize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPy" = ( -/obj/item/weapon/storage/backpack/saddlebag/tempest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPE" = ( -/obj/item/clothing/mask/pig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPG" = ( -/obj/item/clothing/under/solgov/pt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPH" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "17" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPM" = ( -/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPN" = ( -/obj/item/modular_computer/console/preset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPT" = ( -/obj/structure/sign/level/one, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nPW" = ( -/obj/item/weapon/grenade/chem_grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQd" = ( -/obj/item/weapon/surgical/scalpel/laser1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQe" = ( -/obj/item/weapon/storage/belt/medical/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQq" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nQt" = ( -/obj/item/clothing/under/fluff/noel_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQw" = ( -/obj/structure/bed/chair/sofa/corner/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQy" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQC" = ( -/obj/structure/closet/walllocker/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQG" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQI" = ( -/obj/item/clothing/accessory/solgov/department/medical/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQQ" = ( -/mob/living/simple_mob/otie{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nQT" = ( -/obj/item/weapon/gun/energy/modular/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQY" = ( -/obj/item/clothing/suit/space/void/mining/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nQZ" = ( -/obj/item/clothing/mask/gas/sexyclown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRa" = ( -/obj/item/clothing/under/rank/khi/civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRb" = ( -/obj/item/clothing/suit/storage/miljacket/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRk" = ( -/obj/item/ammo_magazine/ammo_box/b45/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRp" = ( -/obj/item/clothing/accessory/bracelet/material/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRr" = ( -/obj/item/clothing/suit/storage/bomber/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRt" = ( -/obj/machinery/smartfridge/produce/persistent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRu" = ( -/obj/item/instrument/trombone/spectral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRw" = ( -/obj/item/stack/tile/floor/eris/dark/monofloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRC" = ( -/obj/item/weapon/grenade/spawnergrenade/spirit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRP" = ( -/obj/structure/shuttle/engine/heater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRW" = ( -/obj/item/weapon/storage/backpack/satchel/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nRX" = ( -/obj/item/ammo_magazine/clip/c9mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSd" = ( -/obj/item/clothing/suit/storage/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSe" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSi" = ( -/obj/item/clothing/head/tesh_hood/standard/black_midgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSj" = ( -/obj/item/clothing/under/cowboy/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSA" = ( -/obj/item/clothing/suit/space/void/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSC" = ( -/obj/item/clothing/head/service/army/garrison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSK" = ( -/obj/item/ammo_magazine/m9mm/vp70, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSL" = ( -/obj/item/clothing/head/helmet/space/void/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nST" = ( -/obj/item/clothing/under/rank/vice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nSY" = ( -/obj/machinery/atmospherics/unary/outlet_injector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTa" = ( -/obj/item/clothing/suit/storage/solgov/dress/fleet/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTh" = ( -/obj/item/honey_frame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTl" = ( -/obj/item/clothing/suit/storage/terran/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTm" = ( -/obj/item/clothing/accessory/armor/armguards/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTp" = ( -/obj/structure/loot_pile/surface/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTD" = ( -/obj/item/weapon/circuitboard/mecha/scarab/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTF" = ( -/obj/structure/prop/machine/core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTH" = ( -/obj/item/clothing/suit/space/syndicate/black/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTS" = ( -/obj/item/clothing/head/helmet/space/syndicate/green/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nTU" = ( -/obj/item/integrated_circuit/arithmetic/multiplication, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUa" = ( -/obj/item/ore_chunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUb" = ( -/obj/structure/closet/lumber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUd" = ( -/obj/item/trash/snacktray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUe" = ( -/obj/item/weapon/storage/belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUu" = ( -/obj/item/ammo_magazine/m12gdrumjack/beanbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUy" = ( -/obj/item/trash/material/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUD" = ( -/obj/item/clothing/under/corp/confederacy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUN" = ( -/obj/item/weapon/rig/ch/clockwork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nUQ" = ( -/obj/item/clothing/accessory/armor/armorplate/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVb" = ( -/obj/item/weapon/melee/energy/sword/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVc" = ( -/obj/item/weapon/material/twohanded/fireaxe/scythe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVr" = ( -/obj/item/weapon/dnainjector/blindmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVz" = ( -/obj/item/trash/admints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVF" = ( -/obj/item/clothing/accessory/poncho/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVO" = ( -/obj/machinery/vending/event, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVP" = ( -/obj/item/stack/flag/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nVY" = ( -/obj/item/clothing/suit/storage/trench/fluff/octaviouscoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWh" = ( -/obj/item/stack/tile/carpet/geo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWi" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWk" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWn" = ( -/obj/item/clothing/under/rank/nullsuit/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWE" = ( -/obj/item/device/mmi/digital, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWN" = ( -/obj/machinery/atmospherics/valve/shutoff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWP" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/firefighter{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nWT" = ( -/obj/item/instrument/guitar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWU" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/USDF, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWX" = ( -/obj/item/clothing/head/helmet/space/void/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nWY" = ( -/obj/item/weapon/stock_parts/manipulator/pico, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXh" = ( -/obj/item/weapon/moneybag/vault, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXi" = ( -/obj/item/trash/koisbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXr" = ( -/obj/item/stack/material/lead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXt" = ( -/obj/item/weapon/gun/projectile/revolver/toy/sawnoff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXx" = ( -/obj/item/clothing/accessory/bracelet/material/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXH" = ( -/obj/item/device/holomap_beacon/deathsquad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXK" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXM" = ( -/obj/item/weapon/folder/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXN" = ( -/obj/machinery/vending/giftvendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXO" = ( -/obj/item/clothing/under/universalid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXW" = ( -/obj/item/clothing/head/terran/navy/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXX" = ( -/obj/item/clothing/head/helmet/solgov/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nXZ" = ( -/obj/item/weapon/card/id/event/altcard/greengold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYf" = ( -/obj/item/weapon/material/twohanded/spear/flint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYg" = ( -/obj/item/seeds/bloodtomatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYi" = ( -/obj/structure/table/bench/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYs" = ( -/obj/item/gunbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYx" = ( -/obj/item/weapon/reagent_containers/glass/bottle/mutagen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYA" = ( -/obj/structure/sign/flag/sol/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYC" = ( -/obj/item/weapon/circuitboard/ai_status_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYF" = ( -/obj/item/weapon/storage/box/injectors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYG" = ( -/obj/item/integrated_circuit/reagent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYK" = ( -/obj/structure/ship_munition/disperser_charge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYP" = ( -/obj/item/weapon/flame/lighter/zippo/fluff/melissa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nYQ" = ( -/obj/structure/window/phoronreinforced/full, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nYR" = ( -/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nYZ" = ( -/obj/machinery/petrification, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZc" = ( -/obj/item/flag/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZj" = ( -/mob/living/simple_mob/animal/wolf/direwolf/dog{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"nZm" = ( -/obj/structure/loot_pile/mecha/marauder/mauler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZw" = ( -/obj/item/weapon/inducer/unloaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZz" = ( -/obj/item/clothing/shoes/boots/winter/christmasgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZB" = ( -/obj/item/clothing/under/rank/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZI" = ( -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZK" = ( -/obj/item/seeds/glowberryseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZM" = ( -/obj/item/ammo_magazine/m9mm/compact/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZP" = ( -/obj/machinery/power/solar_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"nZZ" = ( -/obj/item/weapon/computer_hardware/processor_unit/photonic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oag" = ( -/obj/item/clothing/suit/captunic/capjacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oap" = ( -/obj/item/weapon/melee/augment/blade/arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oas" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/amara_hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oau" = ( -/obj/item/clothing/suit/storage/leather_jacket_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaD" = ( -/obj/item/clothing/mask/chewable/candy/pocky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaH" = ( -/obj/item/trash/candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaI" = ( -/obj/item/organ/internal/eyes/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaL" = ( -/obj/machinery/computer/cryopod/gateway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaN" = ( -/obj/item/device/electronic_assembly/large/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaS" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/narsian, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oaT" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oaY" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oaZ" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/manfromsnowyriver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obe" = ( -/obj/item/clothing/under/teshari/undercoat/standard/pink_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obm" = ( -/obj/item/ammo_casing/a45/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obq" = ( -/obj/item/seeds/shrinkshroom, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obu" = ( -/obj/structure/sign/atmos/n2o, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obz" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obD" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "34" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obF" = ( -/obj/item/weapon/grenade/chem_grenade/teargas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obI" = ( -/obj/item/clothing/head/cowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obP" = ( -/obj/structure/largecrate/animal/woofdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obQ" = ( -/obj/item/weapon/stock_parts/capacitor/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"obW" = ( -/obj/item/clothing/head/caphat/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"occ" = ( -/obj/item/weapon/forensics/sample_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocn" = ( -/obj/item/device/electronic_assembly/wallmount/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocp" = ( -/obj/item/clothing/suit/storage/solgov/service/fleet/snco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocB" = ( -/obj/item/weapon/backup_implanter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocD" = ( -/obj/item/weapon/reagent_containers/food/snacks/mashedpotato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocG" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/repeater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocI" = ( -/obj/item/clothing/shoes/hitops/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocJ" = ( -/obj/item/clothing/head/soft/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocP" = ( -/obj/item/weapon/disk/nifsoft/compliance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocQ" = ( -/obj/item/device/integrated_circuit_printer/all_upgrades, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ocS" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer/o6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odb" = ( -/obj/item/weapon/ruinedvirusdish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odd" = ( -/obj/item/clothing/head/halo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odg" = ( -/obj/item/weapon/gun/projectile/revolver/nagant/skinned, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odh" = ( -/obj/item/device/electronic_assembly/medium/default, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odo" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odr" = ( -/obj/item/clothing/shoes/boots/winter/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odz" = ( -/obj/item/ammo_casing/spent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odE" = ( -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odP" = ( -/obj/item/clothing/head/hood/lancelot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"odX" = ( -/obj/item/stack/material/aluminium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oed" = ( -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oee" = ( -/obj/item/clothing/gloves/gauntlets/rig/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oen" = ( -/obj/item/weapon/circuitboard/mecha/gygax/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeq" = ( -/obj/machinery/atmospherics/tvalve/mirrored/bypass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oex" = ( -/obj/item/ammo_magazine/rpd/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeE" = ( -/obj/machinery/cryopod/robot/door/travel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeJ" = ( -/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeK" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeN" = ( -/obj/item/weapon/storage/fancy/crayons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeO" = ( -/obj/item/weapon/storage/box/commandkeys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oeP" = ( -/obj/item/weapon/implantcase/language, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofe" = ( -/obj/item/weapon/storage/vore_egg/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"off" = ( -/obj/item/clothing/head/helmet/thunderdome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofg" = ( -/obj/item/weapon/paper/Toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofh" = ( -/obj/item/weapon/circuitboard/body_designer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofm" = ( -/obj/item/clothing/under/lawyer/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofn" = ( -/obj/item/shield_projector/line/exosuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofp" = ( -/obj/item/weapon/reagent_containers/spray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofy" = ( -/obj/item/integrated_circuit/input/temperature_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofJ" = ( -/obj/structure/prop/fake_ai/dead/crashed_med_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofN" = ( -/obj/item/mecha_parts/mecha_equipment/runningboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofQ" = ( -/obj/item/weapon/spacecasinocash/c500, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofR" = ( -/obj/item/weapon/book/manual/engineering_singularity_safety, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ofV" = ( -/obj/item/ammo_magazine/molniya/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogb" = ( -/obj/item/weapon/reagent_containers/food/drinks/textmug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogd" = ( -/obj/item/clothing/mask/smokable/ecig/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogh" = ( -/obj/item/ammo_casing/a38/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogp" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag/o10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogq" = ( -/mob/living/simple_mob/humanoid/cultist/noodle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ogJ" = ( -/obj/item/weapon/bone/horn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogK" = ( -/obj/item/device/electronic_assembly/medium/radio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogM" = ( -/obj/item/clothing/accessory/solgov/specialty/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ogY" = ( -/obj/item/weapon/pen/crayon/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohf" = ( -/obj/item/weapon/cell/device/weapon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohj" = ( -/obj/item/weapon/circuitboard/recycler_stamper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohm" = ( -/obj/item/clothing/head/beret/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohn" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohs" = ( -/obj/item/pressurelock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohw" = ( -/obj/item/clothing/accessory/jacket/burgundy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohB" = ( -/obj/item/weapon/reagent_containers/food/snacks/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohD" = ( -/obj/item/rig_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohG" = ( -/obj/item/weapon/storage/box/fluff/koyoakimomi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohH" = ( -/obj/item/weapon/disk/limb/bishop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohI" = ( -/obj/item/integrated_circuit/input/advanced_locator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohS" = ( -/obj/structure/smoletrack/roadF, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohW" = ( -/obj/item/clothing/shoes/boots/ranger/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ohY" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oic" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oim" = ( -/obj/item/clothing/gloves/bluespace/emagged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oir" = ( -/obj/machinery/exonet_node/map, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oiD" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oiF" = ( -/obj/structure/prop/war/tgmc_missile_rack/keeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oiK" = ( -/obj/item/clothing/head/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oiT" = ( -/obj/item/clothing/suit/space/void/responseteam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojd" = ( -/obj/item/toy/plushie/borgplushie/drake/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojh" = ( -/obj/item/clothing/accessory/hawaiian_random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojn" = ( -/obj/item/weapon/lipstick/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojx" = ( -/obj/item/clothing/glasses/thermal/plain/jensen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojK" = ( -/mob/living/simple_mob/vore/alienanimals/succlet, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ojP" = ( -/obj/item/ammo_magazine/m45tommy/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojR" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/pint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ojS" = ( -/obj/item/weapon/broken_gun/c20r, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okb" = ( -/obj/item/ammo_magazine/chemdart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okd" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/peridaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okh" = ( -/obj/item/clothing/under/rank/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okm" = ( -/obj/item/weapon/handcuffs/cable/tape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okv" = ( -/obj/item/weapon/storage/box/syndie_kit/clerical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okz" = ( -/obj/item/weapon/storage/box/servicekeys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okE" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"okK" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/iaa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okM" = ( -/obj/item/modular_computer/tablet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"okR" = ( -/obj/item/weapon/inflatable_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olb" = ( -/obj/item/weapon/light/bulb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"old" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/bicaridine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oli" = ( -/obj/item/clothing/under/rank/security/corp/fluff/alva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olj" = ( -/obj/structure/anomaly_container, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oll" = ( -/obj/item/ammo_magazine/clip/c762/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oln" = ( -/obj/item/weapon/rig/eva/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olo" = ( -/obj/machinery/botany/extractor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olq" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olr" = ( -/obj/item/clothing/under/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ols" = ( -/obj/item/clothing/glasses/thermal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oly" = ( -/obj/item/rig_module/rad_shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olD" = ( -/obj/item/clothing/head/hood/winter/science/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olG" = ( -/obj/item/clothing/under/batter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olJ" = ( -/obj/item/clothing/accessory/solgov/torch_patch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatsteak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olS" = ( -/obj/machinery/conveyor/centcom_auto, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"olX" = ( -/obj/structure/largecrate/animal/guardmutant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omc" = ( -/obj/item/weapon/card/id/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omi" = ( -/obj/item/integrated_circuit/cryptography/rot13, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omo" = ( -/obj/item/integrated_circuit/logic/binary/rslatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omp" = ( -/obj/item/clothing/head/hood/winter/christmasred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omx" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/tp23s, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omA" = ( -/obj/item/weapon/pen/crayon/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omH" = ( -/obj/item/clothing/head/caphat/formal/fedcover, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omL" = ( -/obj/item/clothing/under/robe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"omX" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ona" = ( -/obj/item/slimepotion/mutator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onb" = ( -/obj/item/integrated_circuit/list/at, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onc" = ( -/obj/machinery/airlock_sensor/airlock_interior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onh" = ( -/obj/item/weapon/reagent_containers/pill/tramadol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oni" = ( -/mob/living/simple_mob/animal/passive/mouse/rat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"onu" = ( -/obj/item/clothing/accessory/medal/gold/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onL" = ( -/obj/item/weapon/bone/leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onR" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onT" = ( -/obj/item/clothing/head/pelt/tigerpeltpink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onW" = ( -/obj/item/clothing/head/kitty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"onY" = ( -/obj/item/clothing/accessory/storage/knifeharness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooa" = ( -/obj/structure/table/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooi" = ( -/obj/machinery/door/airlock/glass_security/polarized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ook" = ( -/obj/item/weapon/storage/box/sinpockets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooJ" = ( -/obj/item/instrument/recorder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooL" = ( -/obj/item/clothing/head/fedora/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooN" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/excitingsuppermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooT" = ( -/obj/item/paiparts/capacitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooU" = ( -/obj/structure/closet/crate/wooden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooV" = ( -/obj/item/clothing/under/dress/goldwrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooW" = ( -/obj/structure/sign/atmos/o2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ooX" = ( -/obj/structure/bed/chair/sofa/bench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opg" = ( -/obj/item/device/integrated_circuit_printer/debug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opj" = ( -/obj/item/clothing/accessory/armor/legguards/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opo" = ( -/obj/item/projectile/bullet/rifle/a556/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opt" = ( -/obj/item/clothing/under/fluff/v_nanovest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opv" = ( -/obj/item/stack/tile/floor/eris/techmaint/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opD" = ( -/obj/item/clothing/accessory/badge/corporate_tag/veymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opE" = ( -/obj/item/weapon/circuitboard/mecha/scarab/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opF" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opI" = ( -/mob/living/simple_mob/animal/giant_spider/tunneler{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"opQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opR" = ( -/obj/structure/dark_portal/minion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opS" = ( -/obj/item/clothing/head/beaverhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opV" = ( -/obj/item/weapon/storage/backpack/saddlebag_common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opX" = ( -/obj/item/clothing/under/fluff/tikorak_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"opZ" = ( -/obj/item/weapon/refill_cartridge/universal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqc" = ( -/obj/item/weapon/gun/projectile/revolver/mateba, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqd" = ( -/obj/item/ammo_magazine/m9mm/vp70/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqi" = ( -/obj/machinery/atmospheric_field_generator/perma/underdoors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqo" = ( -/obj/structure/frame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqp" = ( -/obj/item/ammo_magazine/m9mm/compact/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqr" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqw" = ( -/obj/item/clothing/head/beret/solgov/survey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqy" = ( -/obj/machinery/atmospheric_field_generator/perma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqB" = ( -/obj/item/device/radio/headset/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqD" = ( -/obj/item/weapon/digestion_remains/skull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqM" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vox_hunting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqO" = ( -/obj/item/clothing/suit/kimono/earth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oqX" = ( -/mob/living/simple_mob/vore/alienanimals/succlet/king, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ora" = ( -/obj/item/clothing/head/tinytophat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orb" = ( -/obj/item/weapon/gun/projectile/automatic/serdy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orf" = ( -/obj/item/clothing/head/helmet/space/void/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orj" = ( -/obj/item/clothing/under/skirt/loincloth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ork" = ( -/obj/item/trash/saturno, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orq" = ( -/obj/structure/curtain/bed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orr" = ( -/obj/item/clothing/head/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orv" = ( -/obj/item/weapon/rsp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orH" = ( -/obj/structure/snowman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orJ" = ( -/obj/item/weapon/storage/pill_bottle/carbon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orK" = ( -/obj/item/ammo_magazine/m9mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orO" = ( -/obj/machinery/clonepod/transhuman/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"orW" = ( -/obj/item/device/kit/paint/gygax/darkgygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osa" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osn" = ( -/obj/item/clothing/suit/armor/vest/ert/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oso" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osq" = ( -/obj/item/ammo_casing/a45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osv" = ( -/obj/item/weapon/storage/box/glasses/pint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osA" = ( -/obj/item/organ/internal/brain/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osG" = ( -/obj/structure/sign/deck/second, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osM" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"osN" = ( -/mob/living/simple_mob/shadekin/red{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"osQ" = ( -/obj/item/clothing/suit/storage/toggle/brown_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otk" = ( -/obj/item/ammo_magazine/ammo_box/b762/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otq" = ( -/obj/structure/closet/secure_closet/hos2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otr" = ( -/mob/living/simple_mob/slime/xenobio/purple{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"otz" = ( -/obj/structure/closet/crate/mimic/cointoss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otB" = ( -/obj/item/frame/extinguisher_cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otF" = ( -/obj/item/wheelchair/motor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otG" = ( -/obj/structure/sink/countertop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otK" = ( -/obj/item/weapon/deck/holder/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"otW" = ( -/obj/item/weapon/reagent_containers/hypospray/vial/tempest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oue" = ( -/obj/item/organ/internal/brain/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ouw" = ( -/obj/item/weapon/storage/pill_bottle/antitox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ouV" = ( -/obj/structure/bed/chair/bay/comfy/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ouY" = ( -/mob/living/simple_mob/vore/aggressive/mimic/airlock{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ovb" = ( -/obj/structure/sign/bigname/seg_3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovd" = ( -/obj/item/ammo_magazine/m545saw/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovi" = ( -/obj/item/weapon/circuitboard/arcade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovn" = ( -/obj/structure/bed/chair/comfy/rounded/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovw" = ( -/obj/item/integrated_circuit/output/sound/beepsky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovB" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/dylovene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovF" = ( -/obj/item/integrated_circuit/logic/conditional, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovG" = ( -/mob/living/simple_mob/animal/sif/glitterfly, -/mob/living/simple_mob/animal/sif/glitterfly/rare, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ovI" = ( -/obj/item/weapon/implant/death_alarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovL" = ( -/obj/item/integrated_circuit/input/externalbm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovM" = ( -/obj/structure/prop/alien/computer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovP" = ( -/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovU" = ( -/obj/item/weapon/implant/reagent_generator/savannah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovV" = ( -/obj/item/ammo_magazine/s38, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovW" = ( -/obj/item/ammo_casing/a45lc/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovX" = ( -/obj/item/weapon/storage/backpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovY" = ( -/obj/item/clothing/accessory/solgov/specialty/enlisted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ovZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owa" = ( -/obj/item/weapon/pickaxe/three_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owo" = ( -/obj/item/clothing/suit/space/void/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owv" = ( -/obj/item/weapon/reagent_containers/food/snacks/soylenviridians, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oww" = ( -/obj/item/weapon/digestion_remains/skull/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owz" = ( -/obj/item/clothing/under/librarian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owD" = ( -/obj/item/weapon/weldingtool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owH" = ( -/obj/item/clothing/accessory/armband/solgov/mp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owJ" = ( -/obj/item/ammo_magazine/asval, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owM" = ( -/obj/item/clothing/head/helmet/space/void/atmos/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owN" = ( -/obj/item/mecha_parts/part/odysseus_right_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"owP" = ( -/obj/item/ammo_magazine/ammo_box/b45/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxa" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/elite{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oxi" = ( -/obj/item/seeds/wabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxz" = ( -/obj/item/clothing/head/service/army/garrison/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxC" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tomatojuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxK" = ( -/obj/item/ammo_casing/a9mm/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxT" = ( -/obj/item/weapon/disk/integrated_circuit/upgrade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oxU" = ( -/obj/item/clothing/head/hardhat/dblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyg" = ( -/obj/item/clothing/mask/luchador/rudos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyp" = ( -/obj/item/clothing/head/pin/flower/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oys" = ( -/obj/item/weapon/storage/chewables/tobacco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyw" = ( -/obj/item/clothing/under/det/corporate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyx" = ( -/obj/item/weapon/reagent_containers/food/snacks/steamrolltealeaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyy" = ( -/obj/item/clothing/accessory/collar/casinosentientprize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyI" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyM" = ( -/obj/item/ammo_casing/a357/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oyX" = ( -/obj/item/weapon/reagent_containers/pill/dexalin_plus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oza" = ( -/obj/item/integrated_circuit/manipulation/grenade/frag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozb" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/wo1_monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozc" = ( -/obj/item/weapon/rcd/advanced/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozg" = ( -/obj/structure/closet/jequipcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozk" = ( -/obj/item/flag/icarus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozn" = ( -/obj/item/weapon/melee/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozr" = ( -/obj/item/clothing/head/pelt/wolfpeltblack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozz" = ( -/obj/item/weapon/reagent_containers/food/snacks/greentealeaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozC" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozG" = ( -/obj/item/mecha_parts/component/hull/lightweight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ozI" = ( -/obj/item/clothing/suit/space/void/exploration/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAc" = ( -/obj/item/mecha_parts/part/gygax_right_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAe" = ( -/obj/item/clothing/accessory/sash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAk" = ( -/obj/structure/casino_table/blackjack_r, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAD" = ( -/obj/structure/prop/dna_vault, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAP" = ( -/obj/item/seeds/vale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oAQ" = ( -/obj/item/clothing/under/solgov/utility/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBa" = ( -/obj/item/weapon/folder/red_hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBc" = ( -/obj/item/weapon/reagent_containers/glass/bottle/imidazoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBe" = ( -/obj/item/weapon/reagent_containers/food/snacks/cube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBh" = ( -/obj/item/weapon/reagent_containers/food/snacks/mars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBj" = ( -/obj/item/weapon/implant/backup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBl" = ( -/obj/item/clothing/mask/redscarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBs" = ( -/obj/item/weapon/bedsheet/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBx" = ( -/obj/item/weapon/cartridge/signal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBy" = ( -/obj/item/weapon/storage/bag/sheetsnatcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBA" = ( -/obj/item/weapon/material/knife/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBD" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBI" = ( -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBO" = ( -/obj/item/ammo_magazine/sam48, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBP" = ( -/obj/machinery/atmospherics/trinary/mixer/m_mixer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oBX" = ( -/mob/living/simple_mob/humanoid/pirate/las/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oCo" = ( -/obj/item/weapon/gun/projectile/revolver/cappeacekeeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCp" = ( -/obj/item/mecha_parts/part/durand_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCr" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/pizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCu" = ( -/obj/item/glass_jar/fish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCy" = ( -/obj/item/capture_crystal/cass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCC" = ( -/obj/item/toy/figure/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oCF" = ( -/obj/item/weapon/chaoscake_layer/nine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDm" = ( -/obj/item/weapon/storage/backpack/messenger/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDs" = ( -/obj/structure/closet/secure_closet/pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDL" = ( -/obj/machinery/door/airlock/angled_tgmc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDO" = ( -/obj/item/weapon/bedsheet/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDQ" = ( -/obj/item/clothing/head/tesh_hood/standard/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oDX" = ( -/obj/item/weapon/circuitboard/atmoscontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEa" = ( -/obj/structure/closet/body_bag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEb" = ( -/obj/item/weapon/reagent_containers/spray/windowsealant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEk" = ( -/obj/item/clothing/head/helmet/space/vox/civ/mechanic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEm" = ( -/obj/structure/loot_pile/maint/junk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEt" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEv" = ( -/mob/living/simple_mob/animal/space/goose/domesticated{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oEF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEK" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEQ" = ( -/obj/item/integrated_circuit/logic/binary/equals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oET" = ( -/obj/machinery/vending/snlvend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oEU" = ( -/obj/item/slimepotion/mimic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFa" = ( -/obj/item/clothing/glasses/fluff/spiffygogs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFe" = ( -/obj/item/weapon/xenobio/monkey_gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFq" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/shiny, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFt" = ( -/obj/item/clothing/head/helmet/space/void/refurb/research/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFC" = ( -/obj/item/clothing/glasses/sunglasses/sechud/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFG" = ( -/obj/item/weapon/gun/projectile/gyropistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFL" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFO" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFR" = ( -/obj/structure/sign/ironhammer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFW" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oFZ" = ( -/obj/item/weapon/disposable_teleporter/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGb" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGd" = ( -/obj/item/weapon/card/id/civilian/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGi" = ( -/obj/item/clothing/head/beret/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGm" = ( -/obj/item/weapon/reagent_containers/pill/dermaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGo" = ( -/obj/item/weapon/reagent_containers/glass/bottle/eznutrient, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGq" = ( -/obj/item/trash/ratpackramen/lacquer2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGG" = ( -/obj/item/weapon/banner/virgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGI" = ( -/obj/item/clothing/under/saare/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oGZ" = ( -/obj/item/clothing/under/color/lightred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHb" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHd" = ( -/obj/machinery/shield_gen/external, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHh" = ( -/obj/structure/closet/secure_closet/guncabinet/phase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHj" = ( -/obj/item/seeds/poisonberryseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHk" = ( -/obj/item/clothing/glasses/thermal/plain/eyepatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHs" = ( -/obj/machinery/ion_engine/fancy_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHy" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/memegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHz" = ( -/obj/item/clothing/accessory/scarf/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHC" = ( -/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHG" = ( -/obj/item/clothing/accessory/altevian_badge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHJ" = ( -/obj/item/clothing/accessory/holster/waist/lanyard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHM" = ( -/obj/item/clothing/under/terran/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHO" = ( -/obj/item/weapon/paper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHT" = ( -/obj/item/weapon/dnainjector/nobreath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oHV" = ( -/obj/item/clothing/head/that, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIm" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/winebrandy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIn" = ( -/obj/item/weapon/storage/dicecup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIq" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheeseburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIu" = ( -/obj/item/clothing/under/overalls, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIJ" = ( -/obj/item/weapon/reagent_containers/food/condiment/hotsauce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oIR" = ( -/obj/item/seeds/goldappleseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJk" = ( -/obj/item/device/encryptionkey/heads/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJl" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/fal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJm" = ( -/obj/structure/loot_pile/surface/alien/end, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJn" = ( -/obj/item/weapon/implantcase/loyalty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJy" = ( -/obj/item/clothing/under/dress/lilacdress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJA" = ( -/obj/item/weapon/storage/backpack/satchel/hyd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJG" = ( -/obj/structure/simple_door/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJJ" = ( -/obj/fiftyspawner/purcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJR" = ( -/obj/item/clothing/head/hood/techpriest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oJS" = ( -/obj/structure/shuttle/engine/propulsion/burst/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKa" = ( -/obj/item/weapon/implant/organ/limbaugment/upperarm/medkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKh" = ( -/obj/item/organ/internal/liver/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKj" = ( -/obj/item/weapon/melee/goz_whitecane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKp" = ( -/obj/item/seeds/greengrapeseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKt" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKw" = ( -/obj/item/weapon/reagent_containers/food/snacks/cube/protein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKx" = ( -/obj/item/clothing/suit/space/void/atmos/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKy" = ( -/obj/structure/bed/chair/bay/chair/padded/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKD" = ( -/obj/item/weapon/storage/vore_egg/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKE" = ( -/obj/item/mecha_parts/mecha_equipment/storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oKW" = ( -/obj/item/clothing/under/teshari/undercoat/standard/brown_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLf" = ( -/mob/living/simple_mob/animal/passive/fish/rockfish, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"oLl" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLm" = ( -/obj/mecha/working/ripley/antique, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLp" = ( -/obj/structure/sign/department/telecoms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLu" = ( -/obj/structure/salvageable/implant_container_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLz" = ( -/obj/item/ammo_magazine/kord, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLA" = ( -/obj/item/ammo_magazine/ammo_box/b545/large/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLB" = ( -/obj/item/projectile/bullet/shotgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLD" = ( -/obj/item/clothing/suit/space/vox/civ/medical/geneticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLF" = ( -/obj/item/weapon/circuitboard/rdconsole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLH" = ( -/obj/item/weapon/stamp/solgovlogo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLL" = ( -/obj/structure/sign/department/interrogation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLN" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratveggies, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLP" = ( -/obj/item/weapon/gun/magnetic/railgun/flechette/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oLU" = ( -/mob/living/bot/medbot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oLV" = ( -/obj/item/clothing/ears/earring/dangle/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMh" = ( -/obj/item/weapon/cell/high/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMj" = ( -/obj/item/clothing/suit/space/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMm" = ( -/obj/item/organ/internal/xenos/plasmavessel/sentinel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMq" = ( -/obj/item/weapon/cell/device/weapon/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMr" = ( -/obj/item/clothing/under/fluff/eravik_vessi_3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMx" = ( -/obj/structure/prop/fake_ai/dead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oMU" = ( -/obj/structure/micro_tunnel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNi" = ( -/obj/structure/bed/chair/sofa/corner/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNl" = ( -/obj/item/device/electronic_assembly/implant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNt" = ( -/mob/living/simple_mob/animal/passive/dog/stray, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oNv" = ( -/obj/structure/simple_door/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNw" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNy" = ( -/obj/item/weapon/storage/mre/menu2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNB" = ( -/obj/item/weapon/storage/bagoplanets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNJ" = ( -/obj/item/ammo_magazine/fal/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNK" = ( -/obj/item/weapon/technomancer_core/bulky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNT" = ( -/obj/item/clothing/suit/space/void/syndicate_contract, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNW" = ( -/obj/item/weapon/spell/modifier/mend_all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oNZ" = ( -/obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOi" = ( -/obj/item/clothing/under/dress/formalred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOk" = ( -/obj/structure/casino_table/blackjack_m, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOv" = ( -/obj/item/mecha_parts/part/gygax_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOy" = ( -/obj/structure/sign/department/morgue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOC" = ( -/obj/item/clothing/suit/caution, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOE" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOL" = ( -/obj/item/weapon/digestion_remains/skull/vulpkanin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oON" = ( -/obj/item/clothing/accessory/wcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOQ" = ( -/obj/item/weapon/toy/desk/stellardelight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oOV" = ( -/obj/item/clothing/mask/gas/monkeymask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPh" = ( -/obj/item/clothing/under/cheongsam/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPj" = ( -/obj/structure/sign/warning/nosmoking_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPk" = ( -/obj/item/weapon/gun/launcher/grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPn" = ( -/obj/item/weapon/storage/bag/circuits/mini/output, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPp" = ( -/obj/item/device/nif/authenticbio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPH" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPI" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPM" = ( -/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPR" = ( -/obj/item/weapon/storage/backpack/dufflebag/cursed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oPU" = ( -/obj/item/clothing/under/dress/dress_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQa" = ( -/obj/item/clothing/suit/storage/toggle/yw/secjacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQc" = ( -/obj/machinery/fusion_fuel_injector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQd" = ( -/obj/item/weapon/card/id/security/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQm" = ( -/obj/item/weapon/implant/organ/limbaugment/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQs" = ( -/obj/item/clothing/under/rank/hydroponics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQt" = ( -/obj/structure/portal_event, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQx" = ( -/obj/item/clothing/head/bluetag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQy" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/nuka_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQB" = ( -/obj/structure/prop/lock/projectile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQC" = ( -/obj/item/clothing/shoes/boots/jungle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQD" = ( -/obj/item/weapon/storage/pill_bottle/dermaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQI" = ( -/obj/machinery/requests_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQN" = ( -/obj/machinery/button/remote/blast_door/bear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQS" = ( -/obj/item/weapon/storage/bag/circuits/mini/logic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oQZ" = ( -/obj/item/weapon/storage/backpack/chameleon/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRc" = ( -/obj/item/clothing/suit/bluetag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRg" = ( -/obj/item/weapon/coin/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRm" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRp" = ( -/obj/item/clothing/suit/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRt" = ( -/obj/item/weapon/storage/bag/circuits/mini/transfer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRx" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRK" = ( -/obj/structure/prop/machine/comm_tower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRU" = ( -/obj/item/clothing/accessory/medal/solgov/iron/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRW" = ( -/obj/item/clothing/under/teshari/smock/bluegreydress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oRX" = ( -/obj/item/clothing/accessory/shiny/gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSk" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oSr" = ( -/obj/item/weapon/book/custom_library/reference/spacesurvivalguidedespressurization, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSs" = ( -/obj/item/mecha_parts/part/gygax_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSu" = ( -/obj/vehicle/train/trolley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSC" = ( -/obj/item/clothing/under/qipao_colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSI" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSK" = ( -/obj/machinery/smartfridge/drying_rack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSO" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/chloral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSQ" = ( -/obj/item/weapon/storage/fancy/cigarettes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oST" = ( -/obj/structure/prop/machine/smelter/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oSZ" = ( -/obj/item/clothing/mask/mouthwheat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oTh" = ( -/obj/item/weapon/reagent_containers/food/snacks/red_sun_special, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oTr" = ( -/obj/item/clothing/accessory/medal/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oTz" = ( -/obj/item/weapon/storage/box/fluff/yonra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oTB" = ( -/obj/item/weapon/storage/pouch/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oTZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUf" = ( -/obj/item/clothing/suit/space/void/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUi" = ( -/obj/item/weapon/card/id/gateway/snowfield/class4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUl" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUm" = ( -/obj/item/stack/animalhide/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUq" = ( -/obj/item/clothing/head/helmet/space/void/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUw" = ( -/obj/item/weapon/tank/emergency/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUJ" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUM" = ( -/obj/item/weapon/storage/belt/dbandolier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUO" = ( -/obj/item/clothing/head/hood/winter/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUP" = ( -/obj/item/weapon/spellbook/oneuse/blind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUQ" = ( -/obj/machinery/holoplant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUU" = ( -/obj/item/weapon/card/id/science/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oUX" = ( -/mob/living/simple_mob/vore/woof/hostile/aweful/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oUZ" = ( -/obj/machinery/door/airlock/angled_tgmc/secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVc" = ( -/obj/item/clothing/suit/kimono/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVh" = ( -/obj/item/weapon/pen/fountain8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVl" = ( -/obj/item/weapon/commcard/signal/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVr" = ( -/obj/item/weapon/tank/emergency/phoron/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVt" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "9" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVA" = ( -/obj/item/clothing/under/dress/pinktutu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVI" = ( -/obj/item/weapon/reagent_containers/food/snacks/meat/chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oVW" = ( -/obj/machinery/vending/phoronresearch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWe" = ( -/obj/item/weapon/gun/magnetic/railgun/flechette/pistol/khi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWg" = ( -/obj/item/weapon/stock_parts/matter_bin/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWn" = ( -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWC" = ( -/obj/structure/prop/machine/alien_tank/starts_broken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWG" = ( -/obj/item/trash/ratpackramen/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWK" = ( -/obj/item/weapon/tool/prybar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWO" = ( -/obj/item/petrifier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWP" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWU" = ( -/obj/item/organ/internal/augment/armmounted/hand/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oWX" = ( -/obj/item/organ/internal/xenos/plasmavessel/queen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXo" = ( -/obj/machinery/mineral/processing_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXv" = ( -/obj/item/ammo_casing/a380, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXx" = ( -/obj/item/clothing/under/explorer/armored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXA" = ( -/obj/item/clothing/gloves/ring/material/lead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXL" = ( -/obj/item/ammo_magazine/ar10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXR" = ( -/obj/item/clothing/under/dress/bluedress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXS" = ( -/obj/item/ammo_casing/microbattery/medical/haste, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXT" = ( -/obj/item/weapon/cartridge/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oXU" = ( -/obj/item/weapon/storage/mrebag/menu6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYg" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYk" = ( -/obj/item/clothing/under/corp/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYr" = ( -/obj/item/weapon/reagent_containers/food/snacks/icecream, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYv" = ( -/obj/item/clothing/under/pants/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYA" = ( -/obj/item/weapon/storage/box/glasses/shake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYC" = ( -/obj/item/weapon/card/emag_broken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYR" = ( -/obj/structure/prop/esoteric/nt_pedestal0_old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYS" = ( -/obj/item/weapon/commcard/head/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYT" = ( -/obj/item/device/powersink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oYV" = ( -/mob/living/simple_mob/mechanical/cyber_horror/grey{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"oYX" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/chaplain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZa" = ( -/obj/machinery/bodyscanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZc" = ( -/obj/item/weapon/storage/box/syndie_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZe" = ( -/obj/item/clothing/head/hijab/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZh" = ( -/obj/item/weapon/cell/potato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZk" = ( -/obj/item/weapon/refill_cartridge/multitype/technical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZr" = ( -/obj/structure/cable/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZw" = ( -/obj/item/weapon/melee/altevian_wrench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZy" = ( -/obj/item/ammo_magazine/ammo_box/b12g/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZM" = ( -/obj/item/mecha_parts/part/ripley_right_leg, -/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZP" = ( -/obj/item/weapon/storage/bag/circuits/mini/power/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"oZZ" = ( -/obj/item/clothing/head/helmet/space/void/engineering/zena, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pag" = ( -/obj/item/clothing/under/solgov/service/sifguard/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paj" = ( -/obj/structure/fence/door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pan" = ( -/obj/item/ammo_casing/a9mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pap" = ( -/obj/item/mecha_parts/component/hull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pat" = ( -/obj/item/weapon/pen/crayon/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pau" = ( -/obj/item/clothing/accessory/medal/silver/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paC" = ( -/obj/item/integrated_circuit/memory/huge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paD" = ( -/obj/item/integrated_circuit/manipulation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paF" = ( -/obj/item/clothing/suit/storage/apron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paG" = ( -/obj/item/stack/tile/floor/eris/techmaint/perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paR" = ( -/obj/item/ammo_casing/a12g/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paS" = ( -/obj/item/weapon/material/twohanded/baseballbat/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"paW" = ( -/obj/machinery/ai_powersupply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pba" = ( -/obj/item/weapon/grenade/concussion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbp" = ( -/obj/item/weapon/card/id/event/accessset/itg/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbv" = ( -/obj/item/clothing/head/beret/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pby" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbB" = ( -/obj/item/weapon/gun/launcher/crossbow/bow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbF" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbH" = ( -/obj/item/rig_module/protean/armor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbI" = ( -/obj/item/clothing/suit/storage/solgov/service/army/exploration/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbJ" = ( -/obj/item/ammo_casing/microbattery/medical/omni2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pbP" = ( -/obj/item/ammo_magazine/m9mml/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcl" = ( -/obj/structure/bed/chair/sofa/left/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcs" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/wt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcw" = ( -/obj/item/weapon/circuitboard/mecha/imperion/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcB" = ( -/obj/item/weapon/reagent_containers/glass/paint/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcF" = ( -/obj/item/clothing/head/helmet/space/void/axis/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcH" = ( -/obj/item/toy/eight_ball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcK" = ( -/obj/item/weapon/reagent_containers/food/snacks/kitsuneudon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcL" = ( -/obj/item/clothing/head/helmet/bucket/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pcV" = ( -/obj/item/weapon/circuitboard/telecomms/exonet_node, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdd" = ( -/obj/structure/morgue/crematorium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdf" = ( -/obj/structure/bookcase/bookcart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdg" = ( -/obj/machinery/vending/wardrobe/cargodrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdk" = ( -/obj/item/weapon/storage/box/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdp" = ( -/obj/structure/closet/secure_closet/security/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdu" = ( -/obj/item/weapon/reagent_containers/pill/dexalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdx" = ( -/obj/item/clothing/gloves/ring/seal/signet/fluff/phi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdF" = ( -/obj/item/frame/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdG" = ( -/obj/item/device/lightpainter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdO" = ( -/obj/machinery/gateway/centeraway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdR" = ( -/obj/item/integrated_circuit/output/text_to_speech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdT" = ( -/obj/item/clothing/under/pants/baggy/blackjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdV" = ( -/obj/item/weapon/tool/wrench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pdX" = ( -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pej" = ( -/obj/item/weapon/melee/cultblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pek" = ( -/obj/item/clothing/under/gentlesuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pem" = ( -/obj/item/clothing/under/rank/janitor/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pep" = ( -/obj/item/mecha_parts/part/durand_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"peA" = ( -/obj/structure/fans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfa" = ( -/obj/item/device/cataloguer/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfb" = ( -/obj/item/organ/internal/xenos/acidgland, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfc" = ( -/obj/item/weapon/storage/box/glasses/mug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfi" = ( -/obj/item/trash/skrellsnax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pft" = ( -/obj/item/clothing/under/suit_jacket/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfw" = ( -/obj/item/clothing/glasses/thin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfz" = ( -/obj/item/weapon/card/id/civilian/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfK" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/makarov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfL" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratfruitcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfP" = ( -/obj/item/clothing/gloves/ring/cti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pfQ" = ( -/obj/structure/fireaxecabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgf" = ( -/obj/item/weapon/cell/super/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgq" = ( -/obj/item/device/encryptionkey/heads/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgu" = ( -/obj/machinery/computer/cryopod/travel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgD" = ( -/obj/item/clothing/head/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgG" = ( -/obj/item/clothing/accessory/hawaiian/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgK" = ( -/obj/item/seeds/blackwabback, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgP" = ( -/obj/item/stack/tile/carpet/bcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pgR" = ( -/obj/item/clothing/accessory/maidcorset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pha" = ( -/obj/item/weapon/reagent_containers/glass/beaker/noreact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pho" = ( -/obj/item/clothing/head/tesh_hood/standard/green_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phF" = ( -/obj/item/ammo_casing/a762/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phJ" = ( -/obj/item/robot_parts/robot_component/camera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phK" = ( -/obj/structure/sign/signnew/electrical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phR" = ( -/obj/machinery/gateway/brass{ - dir = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phS" = ( -/obj/item/weapon/gun/projectile/automatic/p90, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"phT" = ( -/obj/item/weapon/circuitboard/secure_data, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pic" = ( -/obj/structure/prop/rock/small/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pij" = ( -/obj/item/clothing/head/hardhat/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pio" = ( -/obj/item/weapon/card/id/event/accessset/itg/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piq" = ( -/obj/item/weapon/circuitboard/security/xenobio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piv" = ( -/obj/machinery/atmospherics/pipe/cap/visible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piF" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piI" = ( -/obj/item/weapon/deck/egy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piM" = ( -/obj/item/organ/internal/brain/cephalon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piU" = ( -/obj/item/trash/venus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piV" = ( -/obj/item/weapon/reagent_containers/food/snacks/squid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piX" = ( -/obj/item/weapon/storage/backpack/ert/commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"piY" = ( -/mob/living/simple_mob/mechanical/viscerator/piercing{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pjc" = ( -/obj/item/seeds/ambrosiadeusseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pje" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tricord, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjf" = ( -/obj/machinery/the_singularitygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjj" = ( -/obj/item/weapon/magnetic_ammo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjp" = ( -/obj/structure/loot_pile/mecha/mouse_tank/livewire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjw" = ( -/obj/item/device/headpods, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjF" = ( -/obj/item/weapon/storage/mre/menu5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjI" = ( -/obj/item/weapon/spell/spawner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjK" = ( -/mob/living/simple_mob/construct/harvester/greater{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pjL" = ( -/obj/vehicle/boat/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjR" = ( -/obj/machinery/power/rtg/fake_reactor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjS" = ( -/obj/machinery/door/blast/angled/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjU" = ( -/obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pjX" = ( -/obj/item/seeds/siflettuce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pka" = ( -/obj/item/weapon/material/twohanded/sledgehammer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkc" = ( -/obj/item/trash/ratpackramen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkf" = ( -/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkg" = ( -/mob/living/simple_mob/vore/bee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pkk" = ( -/obj/item/weapon/reagent_containers/food/snacks/chickenmomo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pky" = ( -/mob/living/simple_mob/animal/giant_spider/pepper{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pkz" = ( -/obj/item/weapon/extinguisher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkC" = ( -/obj/item/clothing/under/solgov/service/sifguard/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkM" = ( -/obj/item/ammo_casing/a762/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkR" = ( -/obj/item/clothing/suit/storage/solgov/service/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pkZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pla" = ( -/obj/machinery/computer/cryopod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plg" = ( -/obj/item/device/binoculars/spyglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plv" = ( -/obj/item/clothing/under/pants/greyjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plw" = ( -/obj/item/ammo_casing/microbattery/combat/xray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ply" = ( -/obj/item/clothing/under/pants/classicjeans/ripped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plC" = ( -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar/rustic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plK" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plT" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plV" = ( -/obj/item/clothing/gloves/boxing/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plW" = ( -/obj/item/clothing/suit/radiation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"plZ" = ( -/obj/item/weapon/card/id/gateway/snowfield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmb" = ( -/obj/item/weapon/tape_roll, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmc" = ( -/obj/item/weapon/gun/energy/locked/frontier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmd" = ( -/obj/item/clothing/head/redcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmf" = ( -/obj/item/rig_module/vision/meson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pml" = ( -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmp" = ( -/obj/structure/bed/chair/sofa/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmz" = ( -/obj/item/device/analyzer/plant_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmA" = ( -/obj/item/weapon/bone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmL" = ( -/obj/item/clothing/under/lawyer/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmP" = ( -/obj/item/clothing/head/soft/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmS" = ( -/obj/item/weapon/circuitboard/machine/rtg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmX" = ( -/mob/living/simple_mob/mobs_monsters/clowns/giggles{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pmY" = ( -/obj/item/clothing/accessory/medal/solgov/bronze/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pmZ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnh" = ( -/obj/machinery/casinoslave_handler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnm" = ( -/obj/item/clothing/under/rank/trek/eng/ds9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pno" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/pizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnu" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnv" = ( -/obj/item/clothing/under/altevian/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnx" = ( -/obj/structure/sign/levels/medical/morgue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnC" = ( -/obj/item/clothing/under/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnD" = ( -/obj/item/clothing/under/altevian/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnG" = ( -/obj/item/modular_computer/console/preset/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnN" = ( -/obj/item/device/healthanalyzer/improved/fluff/jiao_health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pnZ" = ( -/obj/item/weapon/pen/fountain5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poe" = ( -/obj/item/clothing/suit/space/void/refurb/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poj" = ( -/obj/item/integrated_circuit/arithmetic/subtraction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pol" = ( -/obj/item/weapon/coin/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pon" = ( -/obj/item/clothing/suit/space/void/zaddat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pov" = ( -/obj/mecha/working/ripley/mining/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pow" = ( -/obj/item/clothing/head/soft/purple/wah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poC" = ( -/obj/item/weapon/diseasedisk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poD" = ( -/obj/item/robot_parts/robot_component/armour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poF" = ( -/obj/item/weapon/stock_parts/capacitor/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poH" = ( -/obj/item/weapon/storage/vore_egg/synthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poR" = ( -/obj/item/ammo_magazine/m10mm/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"poY" = ( -/obj/item/weapon/spell/aura/frost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppb" = ( -/obj/structure/sign/signnew/magnetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppe" = ( -/obj/machinery/atmospherics/pipe/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pph" = ( -/obj/item/weapon/stock_parts/subspace/ansible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppi" = ( -/obj/machinery/power/grid_checker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppl" = ( -/obj/item/stack/material/painite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppp" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/apurrrrfectman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppI" = ( -/obj/item/organ/internal/metamorphgland, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppK" = ( -/obj/item/weapon/form_printer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppQ" = ( -/obj/item/weapon/gun/energy/toxgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppV" = ( -/obj/structure/medical_stand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ppX" = ( -/obj/item/weapon/paper/pamphlet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqc" = ( -/obj/item/clothing/suit/space/vox/carapace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqo" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/lithium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqw" = ( -/obj/item/clothing/under/terran/navy/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqz" = ( -/obj/item/clothing/under/rank/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqC" = ( -/obj/item/clothing/glasses/welding/tiemgogs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqE" = ( -/obj/item/toy/plushie/teshari/eili, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqN" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqP" = ( -/obj/item/stack/tile/floor/eris/steel/bluecorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqQ" = ( -/obj/item/weapon/stock_parts/subspace/transmitter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pqT" = ( -/obj/item/weapon/reagent_containers/food/snacks/dionaroast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"prf" = ( -/obj/item/ammo_magazine/ssp4/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pri" = ( -/obj/item/weapon/aiModule/protectStation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"prk" = ( -/obj/machinery/door/airlock/angled_bay/standard/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"prn" = ( -/obj/item/clothing/under/pants/baggy/youngfolksjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"prp" = ( -/obj/item/ammo_casing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"prq" = ( -/obj/structure/closet/crate/secure/gilthari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psc" = ( -/obj/item/weapon/book/manual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psi" = ( -/obj/item/clothing/accessory/armor/tag/solgov/com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pso" = ( -/mob/living/simple_mob/slime/xenobio/pink{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"psv" = ( -/obj/item/integrated_circuit/time/delay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psB" = ( -/obj/item/clothing/suit/storage/fluff/techpriestrobes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psM" = ( -/obj/item/weapon/circuitboard/shuttle_console/multi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psO" = ( -/obj/structure/bed/chair/sofa/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psR" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psS" = ( -/obj/item/instrument/glockenspiel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"psW" = ( -/obj/item/clothing/head/helmet/space/capspace/fluff/harmhelm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptb" = ( -/obj/item/clothing/head/crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptf" = ( -/obj/item/weapon/coin/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pth" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptr" = ( -/obj/item/clothing/ears/earring/stud/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptw" = ( -/obj/item/weapon/reagent_containers/food/snacks/berrymuffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptz" = ( -/obj/item/weapon/circuitboard/research_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptI" = ( -/obj/item/weapon/material/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptJ" = ( -/obj/machinery/portable_atmospherics/canister/phoron/cold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptK" = ( -/obj/item/clothing/accessory/sweater/virgin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptL" = ( -/obj/item/weapon/storage/pill_bottle/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptR" = ( -/obj/item/weapon/grenade/shooter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ptZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/rawbacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pul" = ( -/obj/item/poster/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pus" = ( -/obj/item/weapon/implant/compressed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puy" = ( -/obj/structure/closet/crate/secure/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puM" = ( -/obj/item/device/soulstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puP" = ( -/obj/item/weapon/gun/energy/netgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puT" = ( -/obj/item/clothing/accessory/gaiter/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puX" = ( -/obj/structure/bed/chair/sofa/corner/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"puY" = ( -/obj/machinery/partyalarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvc" = ( -/obj/item/clothing/under/solgov/utility/sifguard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvj" = ( -/obj/item/clothing/head/beret/science/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvm" = ( -/obj/item/stack/nanopaste, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvp" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvq" = ( -/obj/item/ammo_magazine/m545/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvr" = ( -/obj/machinery/smartfridge/secure/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvv" = ( -/obj/item/clothing/under/away/patrol/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvG" = ( -/obj/item/weapon/circuitboard/fryer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvJ" = ( -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvU" = ( -/obj/machinery/librarypubliccomp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pvY" = ( -/obj/item/clothing/suit/armor/combat/crusader/bedevere, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwd" = ( -/obj/structure/closet/l3closet/scientist/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwe" = ( -/obj/item/clothing/accessory/medal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwk" = ( -/obj/item/clothing/under/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwq" = ( -/obj/item/clothing/accessory/tie/blue_clip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pws" = ( -/obj/machinery/bluespace_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwt" = ( -/obj/structure/sign/flag/fivearrows, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwu" = ( -/obj/item/weapon/storage/toolbox/lunchbox/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwH" = ( -/obj/structure/closet/crate/secure/cybersolutions, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwJ" = ( -/obj/machinery/status_display/supply_display, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwL" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pwN" = ( -/obj/item/clothing/gloves/ring/buzzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwS" = ( -/obj/item/weapon/card/id/event/accessset/itg/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pwT" = ( -/obj/item/weapon/material/twohanded/spear/lance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pxl" = ( -/obj/item/weapon/lipstick/jade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pxr" = ( -/obj/item/weapon/circuitboard/mechfab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pxw" = ( -/obj/item/seeds/harebell, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pxA" = ( -/obj/item/ammo_magazine/makarov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pxS" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyb" = ( -/obj/item/toy/figure/profwho, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyk" = ( -/obj/item/clothing/under/dress/blacktango/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyA" = ( -/obj/item/clothing/glasses/sunglasses/sechud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyB" = ( -/obj/item/weapon/storage/belt/utility/fluff/sam_belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyE" = ( -/mob/living/simple_mob/vore/demonAI{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pyK" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyL" = ( -/obj/item/seeds/whitebeetseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyQ" = ( -/obj/machinery/disposal/wall/cleaner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyS" = ( -/obj/item/device/electronic_assembly/tiny/cylinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pyV" = ( -/mob/living/simple_mob/animal/passive/bird/azure_tit/great, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pzb" = ( -/obj/machinery/shower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pze" = ( -/obj/item/weapon/rig/medical/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzp" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/genetics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzq" = ( -/obj/structure/closet/gimmick/tacticool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzs" = ( -/mob/living/simple_mob/vore/woof/hostile/terrible{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pzx" = ( -/obj/item/weapon/disk/species/zaddat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzA" = ( -/obj/item/integrated_circuit/passive/power/solar_cell/dual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzB" = ( -/obj/item/mecha_parts/part/odysseus_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzK" = ( -/obj/item/weapon/melee/energy/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzL" = ( -/obj/item/clothing/mask/smokable/pipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzM" = ( -/obj/item/device/gps/explorer/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pzO" = ( -/obj/item/seeds/replicapod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAa" = ( -/obj/item/weapon/storage/backpack/satchel/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAj" = ( -/obj/item/weapon/storage/box/survival/comp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAr" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAu" = ( -/mob/living/simple_mob/mechanical/mecha/odysseus/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pAB" = ( -/obj/machinery/implantchair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAK" = ( -/obj/item/mecha_parts/mecha_equipment/runningboard/limited, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAL" = ( -/obj/item/weapon/gun/energy/ionrifle/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAN" = ( -/obj/item/device/electronic_assembly/large/scope, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAR" = ( -/obj/structure/dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pAU" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pBc" = ( -/obj/item/weapon/cell/device/weapon/recharge/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBh" = ( -/obj/item/clothing/head/beret/solgov/inspector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBj" = ( -/obj/machinery/atmospherics/binary/passive_gate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBl" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBt" = ( -/obj/item/weapon/gun/projectile/revolver/detective45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBC" = ( -/obj/item/weapon/tool/wirecutters/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBG" = ( -/obj/machinery/scale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBK" = ( -/obj/item/integrated_circuit/input/internalbm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBR" = ( -/obj/item/clothing/accessory/armor/armguards/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pBV" = ( -/obj/item/clothing/suit/space/void/refurb/marine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCj" = ( -/obj/machinery/seed_storage/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCk" = ( -/obj/item/weapon/storage/toolbox/lunchbox/mars/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCm" = ( -/obj/item/clothing/under/teshari/undercoat/standard/green_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCn" = ( -/obj/machinery/atmospherics/pipe/tank/air, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCp" = ( -/obj/item/weapon/refill_cartridge/multitype/smokes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCq" = ( -/obj/item/weapon/tank/emergency/oxygen/engi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCJ" = ( -/obj/item/clothing/head/helmet/fluff/korei_laskor_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pCP" = ( -/mob/living/simple_mob/animal/passive/lizard/large{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pCT" = ( -/obj/item/weapon/storage/bag/trash/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDe" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDf" = ( -/obj/item/weapon/gun/projectile/automatic/sts35, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDi" = ( -/obj/machinery/clonepod/transhuman/full/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDk" = ( -/obj/structure/backup_implanter_ch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDo" = ( -/obj/item/weapon/storage/belt/utility/fluff/raja_belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDr" = ( -/obj/item/weapon/reagent_containers/pill/patch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDs" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDu" = ( -/obj/structure/ghost_pod/ghost_activated/maintpred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDw" = ( -/obj/machinery/button/holosign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDA" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDF" = ( -/obj/item/clothing/accessory/bowtie/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDG" = ( -/obj/item/weapon/cell/device/shield_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDO" = ( -/obj/item/device/denecrotizer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDS" = ( -/obj/item/slime_extract/light_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pDX" = ( -/obj/item/weapon/implant/reagent_generator/egg/slow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEe" = ( -/obj/item/weapon/material/fishing_rod/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEl" = ( -/obj/structure/reagent_dispensers/fueltank/barrel/three, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEo" = ( -/obj/machinery/atmospherics/pipe/tank/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEu" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/stripperpink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEx" = ( -/obj/item/rig_module/vision/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEJ" = ( -/obj/item/weapon/card/id/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEM" = ( -/obj/structure/closet/secure_closet/medical2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEN" = ( -/obj/item/weapon/implant/loyalty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pEY" = ( -/obj/structure/sign/deck4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFd" = ( -/obj/item/device/communicator/commlink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFm" = ( -/obj/item/clothing/head/hardhat/firefighter/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFp" = ( -/obj/item/clothing/shoes/leg_guard/fluff/madoka_legs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFw" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whiteorange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFC" = ( -/obj/item/clothing/under/rank/trek/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pFK" = ( -/obj/item/clothing/head/caphat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGf" = ( -/obj/item/clothing/under/skirt/denim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGg" = ( -/mob/living/simple_mob/metroid/juvenile/gamma{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pGk" = ( -/obj/item/seeds/riceseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGl" = ( -/obj/machinery/porta_turret/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGy" = ( -/mob/living/simple_mob/humanoid/merc/ranged/deagle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pGB" = ( -/obj/item/trash/smolhotdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGH" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/OPlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGN" = ( -/obj/item/device/denecrotizer/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGT" = ( -/obj/item/clothing/accessory/medal/solgov/silver/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pGX" = ( -/obj/item/clothing/suit/armor/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHf" = ( -/obj/item/clothing/accessory/tropical_random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHj" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/passengerliason, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHo" = ( -/obj/item/clothing/accessory/medal/solgov/bronze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHp" = ( -/obj/item/clothing/accessory/badge/corporate_tag/gilthari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHq" = ( -/obj/item/weapon/banner/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHu" = ( -/mob/living/simple_mob/vore/alienanimals/dustjumper{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pHv" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHC" = ( -/obj/item/clothing/suit/space/void/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHJ" = ( -/obj/item/weapon/newspaper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pHK" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIa" = ( -/obj/structure/sign/electricshock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIb" = ( -/obj/item/stack/tile/wood/panel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIi" = ( -/obj/item/weapon/folder/yellow_ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIo" = ( -/obj/item/weapon/reagent_containers/food/snacks/squid/true, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIH" = ( -/obj/item/weapon/dnainjector/regenerate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIJ" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitegreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIL" = ( -/obj/item/clothing/under/fluff/kilanosuit/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIN" = ( -/obj/item/device/geiger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pIY" = ( -/mob/living/simple_mob/vore/aggressive/giant_snake{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pJi" = ( -/obj/item/weapon/flame/lighter/zippo/royal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJm" = ( -/obj/item/weapon/shovel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJp" = ( -/obj/item/weapon/reagent_containers/food/snacks/poachedegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJt" = ( -/obj/item/weapon/circuitboard/atmos_alert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJu" = ( -/obj/item/toy/figure/psychologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJv" = ( -/obj/item/stack/tile/floor/eris/white/golden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJH" = ( -/obj/item/weapon/storage/vore_egg/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJJ" = ( -/obj/item/clothing/suit/armor/pcarrier/light/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJN" = ( -/obj/item/weapon/circuitboard/message_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJS" = ( -/obj/machinery/door/airlock/angled_bay/external/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJT" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pJW" = ( -/obj/item/weapon/storage/box/snappops, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJY" = ( -/obj/item/ammo_magazine/m9mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pJZ" = ( -/obj/structure/sign/levels/elevator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKd" = ( -/obj/item/weapon/gun/magic/firestaff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKf" = ( -/obj/item/weapon/storage/box/glasses/coffeecup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKg" = ( -/obj/item/weapon/storage/backpack/vietnam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKh" = ( -/obj/item/weapon/card/id/science/xenobiologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKj" = ( -/obj/item/clothing/under/tropical/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKs" = ( -/obj/item/clothing/gloves/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKu" = ( -/obj/item/clothing/accessory/gaiter/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKw" = ( -/obj/structure/closet/secure_closet/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKx" = ( -/obj/item/clothing/mask/gas/plaguedoctor/fluff/kelplaguemask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKy" = ( -/obj/item/weapon/coin/morphium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKz" = ( -/obj/structure/musician/piano/unanchored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKB" = ( -/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKD" = ( -/obj/item/weapon/deskbell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKL" = ( -/obj/item/weapon/storage/belt/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pKQ" = ( -/obj/item/integrated_circuit/output/sound/medbot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pLi" = ( -/obj/item/clothing/suit/armor/pcarrier/navy/fluff/saur_pccarrier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pLx" = ( -/obj/item/weapon/reagent_containers/pill/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pLy" = ( -/obj/item/weapon/pickaxe/jackhammer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pLI" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pMg" = ( -/obj/item/weapon/digestion_remains/skull/vasilissan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMq" = ( -/mob/living/simple_mob/animal/passive/bird/azure_tit/iceman, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pMs" = ( -/obj/item/clothing/gloves/arm_guard/fluff/madoka_arms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMv" = ( -/obj/item/rig_module/device/anomaly_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pME" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMG" = ( -/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMH" = ( -/obj/item/trash/ratpackramen/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMI" = ( -/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMS" = ( -/obj/item/mecha_parts/chassis/ripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMT" = ( -/obj/item/weapon/storage/box/ids, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMV" = ( -/obj/item/capture_crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pMY" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNd" = ( -/obj/item/clothing/accessory/watch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNj" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pNr" = ( -/obj/item/weapon/gun/energy/gun/protector/pilotgun/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNs" = ( -/obj/item/weapon/reagent_containers/spray/plantbgone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNu" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNA" = ( -/obj/item/organ/internal/xenos/resinspinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNB" = ( -/obj/item/weapon/circuitboard/engine/ion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNE" = ( -/obj/item/clothing/under/yw/blueshield2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pNN" = ( -/obj/item/clothing/under/corp/saare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOg" = ( -/obj/structure/closet/secure_closet/atmos_personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOm" = ( -/obj/item/seeds/gnomes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOr" = ( -/obj/item/weapon/material/twohanded/baseballbat/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOs" = ( -/obj/item/weapon/storage/belt/utility/spicyfull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOv" = ( -/obj/item/clothing/shoes/leg_guard/combat/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOz" = ( -/mob/living/simple_mob/animal/passive/cat, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pOA" = ( -/obj/structure/bed/chair/shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOB" = ( -/obj/item/device/defib_kit/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOM" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOO" = ( -/obj/machinery/door/airlock/vault, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOV" = ( -/obj/item/ammo_magazine/ammo_box/b145, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pOZ" = ( -/obj/item/weapon/gun/energy/locked/frontier/rifle/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pPh" = ( -/obj/structure/sign/directions/chapel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pPk" = ( -/obj/item/weapon/implanter/sizecontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pPs" = ( -/mob/living/simple_mob/vore/redpanda/blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pPt" = ( -/obj/structure/bed/nest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pPC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pPR" = ( -/obj/item/ammo_magazine/m762enbloc/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQb" = ( -/obj/item/clothing/shoes/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQg" = ( -/obj/machinery/particle_accelerator/control_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQh" = ( -/obj/item/clothing/suit/storage/toggle/med_dep_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQj" = ( -/obj/item/integrated_circuit/logic/binary/not_equals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQt" = ( -/obj/item/weapon/gun/projectile/revolver/toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQy" = ( -/obj/item/clothing/suit/storage/solgov/service/army/medical/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQL" = ( -/obj/item/ammo_casing/microbattery/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pQY" = ( -/obj/item/clothing/under/modjump2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRo" = ( -/obj/item/weapon/tool/wirecutters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRp" = ( -/obj/item/weapon/storage/belt/fannypack/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRs" = ( -/obj/item/clothing/glasses/omnihud/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRt" = ( -/obj/item/weapon/rig/pmc/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRB" = ( -/obj/item/weapon/storage/box/flashbangs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRD" = ( -/obj/item/weapon/gun/energy/locked/phasegun/cannon/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRE" = ( -/obj/structure/sign/nosmoking_2/burnt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRF" = ( -/obj/machinery/door/blast/gate/thin/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRL" = ( -/obj/item/clothing/suit/storage/forensics/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRX" = ( -/obj/machinery/firework_launcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pRY" = ( -/obj/structure/reagent_dispensers/he3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSl" = ( -/obj/item/clothing/accessory/cowboy_vest/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSm" = ( -/obj/item/pizzabox/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSI" = ( -/obj/item/clothing/head/collectable/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSL" = ( -/obj/item/weapon/storage/bag/trash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSV" = ( -/obj/structure/prop/rock/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSW" = ( -/obj/item/weapon/circuitboard/shuttle_console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSX" = ( -/obj/item/clothing/suit/weaversilk_bindings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pSY" = ( -/obj/item/organ/internal/augment/armmounted/shoulder/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTb" = ( -/obj/structure/sign/sec2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTd" = ( -/obj/item/clothing/accessory/collar/shock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTe" = ( -/obj/item/weapon/pen/crayon/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTg" = ( -/obj/item/clothing/accessory/medal/silver/security/fluff/dhael, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTm" = ( -/obj/machinery/beehive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTn" = ( -/obj/item/device/daredevice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTq" = ( -/obj/item/weapon/broken_gun/pumpshotgun_combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTx" = ( -/obj/item/weapon/paper/talisman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTz" = ( -/obj/item/integrated_circuit/input/nitrogen_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTG" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTJ" = ( -/obj/item/weapon/storage/box/casino/costume_gladiator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTP" = ( -/obj/item/clothing/under/fluff/eviriik_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTS" = ( -/obj/random/soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTU" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTV" = ( -/obj/item/instrument/piano_synth/fluff/kyutar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pTY" = ( -/obj/item/weapon/storage/backpack/dufflebag/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUc" = ( -/mob/living/simple_mob/horror/bradley{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pUd" = ( -/obj/item/weapon/reagent_containers/dropper/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUe" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUj" = ( -/obj/structure/loot_pile/maint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUm" = ( -/obj/item/clothing/shoes/bhop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUn" = ( -/obj/item/weapon/aiModule/asimov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUq" = ( -/obj/item/weapon/storage/box/fluff/cirra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUw" = ( -/obj/item/clothing/under/color/ranger/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUB" = ( -/obj/item/weapon/material/shard/shrapnel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pUR" = ( -/obj/item/weapon/spellbook/oneuse/smoke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVc" = ( -/obj/item/weapon/stamp/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVj" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVk" = ( -/obj/item/frame/fireaxe_cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVn" = ( -/obj/item/weapon/storage/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVx" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVy" = ( -/mob/living/simple_mob/mechanical/cyber_horror/vox{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pVD" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/groza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVN" = ( -/obj/machinery/vending/foodasian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pVQ" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pWb" = ( -/obj/structure/sign/directions/science/xenoflora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pWo" = ( -/obj/item/paiparts/speech_synthesizer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pWw" = ( -/obj/item/weapon/reagent_containers/glass/bottle/spaceacillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pWB" = ( -/obj/item/clothing/under/excelsior/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pWR" = ( -/obj/item/weapon/fluff/fidgetspinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXb" = ( -/obj/item/toy/plushie/purple_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXd" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXg" = ( -/obj/item/weapon/spell/projectile/overload, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXn" = ( -/obj/item/ammo_casing/afoam_dart/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXq" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXs" = ( -/obj/structure/closet/crate/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXA" = ( -/mob/living/simple_mob/mobs_monsters/clowns/chlown{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pXQ" = ( -/obj/structure/curtain/open/shower/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXX" = ( -/obj/item/seeds/pineapple, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pXY" = ( -/obj/item/integrated_circuit/logic/binary/less_than, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYb" = ( -/obj/machinery/smartfridge/survival_pod/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYg" = ( -/obj/item/weapon/melee/fluffstuff/wolfgirlsword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYj" = ( -/obj/item/clothing/suit/straight_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYl" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "19" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYz" = ( -/obj/item/seeds/surik, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYA" = ( -/obj/item/weapon/storage/fancy/cigarettes/menthols, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYB" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYH" = ( -/obj/structure/barricade/cutout/swarmer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYI" = ( -/obj/item/weapon/rig/military/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYM" = ( -/obj/item/toy/figure/chemist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYR" = ( -/obj/item/weapon/reagent_containers/food/snacks/rawcutlet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYS" = ( -/obj/item/weapon/gun/energy/laser/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYT" = ( -/mob/living/bot/cleanbot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"pYV" = ( -/obj/machinery/vending/wardrobe/atmosdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pYY" = ( -/obj/structure/closet/jcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZb" = ( -/obj/item/clothing/shoes/footwraps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZf" = ( -/obj/item/weapon/paper/shieldgen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZo" = ( -/obj/item/ammo_magazine/ak74/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZH" = ( -/obj/item/weapon/teleportation_scroll, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZL" = ( -/obj/item/trash/candle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZN" = ( -/obj/item/modular_computer/console/preset/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZR" = ( -/obj/structure/closet/firecloset/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"pZW" = ( -/obj/item/clothing/under/solgov/utility/sifguard_skirt/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qab" = ( -/obj/item/device/flash/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qad" = ( -/obj/item/toy/plushie/possum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qag" = ( -/obj/machinery/door/airlock/multi_tile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaq" = ( -/mob/living/simple_mob/animal/passive/chick{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qav" = ( -/obj/item/weapon/storage/backpack/dufflebag/syndie/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qay" = ( -/obj/item/clothing/head/helmet/space/syndicate/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaG" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaL" = ( -/obj/structure/panic_button, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaP" = ( -/obj/vehicle/train/rover/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaR" = ( -/obj/item/clothing/head/hood/carp_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaW" = ( -/obj/item/clothing/under/det/fluff/tasald, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qaY" = ( -/obj/item/clothing/accessory/bracelet/material/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbg" = ( -/obj/structure/sign/directions/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbn" = ( -/obj/item/weapon/card/robot/syndi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbo" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbs" = ( -/obj/item/weapon/gun/magnetic/railgun/flechette/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbx" = ( -/obj/item/weapon/implanter/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbC" = ( -/obj/item/clothing/mask/nock_life, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbH" = ( -/obj/structure/reagent_dispensers/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbJ" = ( -/obj/item/weapon/weldingtool/largetank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbM" = ( -/obj/machinery/door/airlock/angled_bay/centcomm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbN" = ( -/obj/item/seeds/bluespacetomatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbT" = ( -/obj/item/weapon/melee/energy/sword/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbU" = ( -/obj/item/capture_crystal/master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbW" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qbZ" = ( -/obj/item/clothing/accessory/shiny/socks/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qce" = ( -/obj/item/toy/rock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qci" = ( -/obj/item/clothing/suit/storage/toggle/fr_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcj" = ( -/obj/item/clothing/head/hood/winter/science/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcm" = ( -/obj/item/weapon/storage/box/fluff/morxaina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcs" = ( -/obj/item/weapon/storage/box/admints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcu" = ( -/obj/structure/bed/chair/sofa/corner/sif_ora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcw" = ( -/obj/item/weapon/melee/baton/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcx" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcC" = ( -/obj/item/clothing/suit/storage/fluff/jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcE" = ( -/obj/item/clothing/suit/fluff/freddy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcF" = ( -/obj/item/clothing/gloves/duty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcN" = ( -/obj/item/clothing/glasses/regular/rimless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcQ" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcT" = ( -/obj/item/weapon/storage/backpack/messenger/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcU" = ( -/obj/item/weapon/refill_cartridge/multitype/wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcX" = ( -/obj/structure/bed/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qcY" = ( -/obj/machinery/vending/wardrobe/engidrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdb" = ( -/obj/machinery/keycard_auth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qde" = ( -/obj/item/clothing/suit/space/vox/civ/librarian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdg" = ( -/obj/item/ammo_magazine/m45tommy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdt" = ( -/obj/item/device/encryptionkey/headset_sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdu" = ( -/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdx" = ( -/obj/item/clothing/shoes/boots/ranger/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdJ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/calcium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdM" = ( -/obj/item/weapon/rig/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdT" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdU" = ( -/obj/item/weapon/cannonframe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdW" = ( -/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qdZ" = ( -/obj/item/clothing/under/rank/nullsuit/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qef" = ( -/obj/item/weapon/reagent_containers/glass/beaker/stopperedbottle{ - desc = s - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeg" = ( -/obj/item/ammo_casing/chemdart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qei" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qel" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeq" = ( -/obj/item/clothing/under/rank/nullsuit/eng/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qex" = ( -/obj/item/weapon/storage/briefcase/crimekit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeB" = ( -/obj/item/toy/mecha/fireripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeD" = ( -/obj/item/weapon/reagent_containers/food/condiment/soysauce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeE" = ( -/obj/item/clothing/accessory/wcoat/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeH" = ( -/obj/item/clothing/head/helmet/space/void/custodian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeI" = ( -/obj/item/weapon/reagent_containers/pill/osteodaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeR" = ( -/obj/item/weapon/shreddedp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeT" = ( -/obj/item/clothing/head/helmet/space/void/zaddat/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qeV" = ( -/obj/item/clothing/suit/space/void/zaddat/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qff" = ( -/obj/item/clothing/ears/skrell/cloth_female/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfg" = ( -/obj/item/ammo_magazine/ammo_box/b38/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfq" = ( -/obj/move_trader_landmark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfE" = ( -/obj/item/integrated_circuit/list/len, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfH" = ( -/obj/item/weapon/cell/mech/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfI" = ( -/obj/machinery/mining/drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfK" = ( -/obj/item/integrated_circuit/trig/tangent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfQ" = ( -/obj/item/clothing/gloves/gauntlets/rig/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qfW" = ( -/mob/living/simple_mob/mechanical/combat_drone/lesser/aerostat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qfY" = ( -/obj/structure/closet/crate/secure/heph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgb" = ( -/obj/structure/sign/levels/medical/surgery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgc" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgf" = ( -/obj/item/stack/material/resin{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgg" = ( -/obj/item/weapon/soap/uranium_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgl" = ( -/mob/living/simple_mob/animal/sif/hooligan_crab{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qgo" = ( -/obj/item/projectile/sickshot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgE" = ( -/obj/item/ammo_magazine/clip/c9mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgI" = ( -/obj/item/clothing/under/solgov/service/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgL" = ( -/obj/item/clothing/suit/storage/fluff/loincloth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgO" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgP" = ( -/obj/item/clothing/under/tourist_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qgX" = ( -/obj/item/clothing/head/soft/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhf" = ( -/obj/item/clothing/gloves/sterile/fluff/jiao_gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhi" = ( -/obj/item/clothing/shoes/magboots/fluff/tikorak_magboots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhr" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhs" = ( -/obj/machinery/door/airlock/glass_engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qht" = ( -/obj/item/clothing/accessory/solgov/department/command/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhu" = ( -/obj/item/weapon/tool/crowbar/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhC" = ( -/obj/item/clothing/suit/armor/captain/fluff/harmsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhF" = ( -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhH" = ( -/obj/item/weapon/pinpointer/advpinpointer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhK" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/wine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhO" = ( -/obj/item/weapon/storage/firstaid/o2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhS" = ( -/obj/item/clothing/gloves/sterile/latex/fluff/sam_gloves, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhT" = ( -/obj/item/clothing/suit/armor/pcarrier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhV" = ( -/obj/machinery/gear_dispenser/suit_fancy/autolok, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qhX" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qiq" = ( -/obj/item/clothing/under/fluff/david_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qiB" = ( -/obj/item/clothing/head/soft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qiH" = ( -/obj/item/clothing/ears/skrell/cloth_male/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qiJ" = ( -/obj/item/weapon/gun/projectile/automatic/stg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qiL" = ( -/obj/item/weapon/disk/nifsoft/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjb" = ( -/obj/item/weapon/reagent_containers/food/snacks/cutlet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjg" = ( -/obj/item/device/fluff/id_kit_mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjh" = ( -/obj/item/clothing/suit/cyberpunk/recolorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjo" = ( -/obj/item/weapon/a_gift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjp" = ( -/obj/item/weapon/spell/construct/projectile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjr" = ( -/obj/item/clothing/head/helmet/space/void/security/fluff/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjy" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/brown_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjE" = ( -/obj/item/clothing/under/det/black/waistcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjM" = ( -/obj/item/clothing/suit/storage/snowsuit/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjO" = ( -/obj/item/ammo_casing/macrobattery/healie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qjS" = ( -/obj/item/clothing/under/suit_jacket/red/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkc" = ( -/obj/item/weapon/soap/pink_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qke" = ( -/mob/living/simple_mob/metroid/juvenile/omega{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qki" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat/fedblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkB" = ( -/obj/item/clothing/under/rank/medical/scrubs/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkF" = ( -/obj/item/clothing/glasses/material, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkI" = ( -/obj/structure/bed/chair/sofa/corp/corner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkL" = ( -/obj/item/weapon/aiModule/quarantine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkT" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qkW" = ( -/mob/living/simple_mob/mobs_monsters/clowns/hulk{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qlb" = ( -/obj/item/weapon/reagent_containers/food/drinks/milk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlf" = ( -/obj/machinery/drone_fabricator/unify, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlk" = ( -/obj/item/integrated_circuit/reagent/storage/big, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlo" = ( -/obj/item/clothing/head/beret/sec/gov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlp" = ( -/obj/structure/door_assembly/door_assembly_min, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlq" = ( -/obj/item/weapon/reagent_containers/food/snacks/boiledegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlz" = ( -/obj/item/weapon/refill_cartridge/autoname/food/weeb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlB" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sobakacube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlC" = ( -/obj/item/clothing/under/color/fjumpsuit/lightgreenf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlO" = ( -/obj/structure/ghost_pod/ghost_activated/swarm_drone/event, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlT" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qlW" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qme" = ( -/obj/structure/prop/machine/gravygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmh" = ( -/obj/item/clothing/gloves/boxing/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmA" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmJ" = ( -/obj/item/weapon/gun/energy/locked/frontier/handbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmL" = ( -/obj/structure/closet/crate/secure/hydrosec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmP" = ( -/obj/structure/bed/chair/sofa/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmU" = ( -/obj/item/weapon/gun/projectile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmW" = ( -/obj/item/weapon/nailpolish_remover, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qmX" = ( -/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qnq" = ( -/obj/item/device/pda/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnr" = ( -/obj/item/ammo_magazine/mglock9mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnt" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/tulidaan{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qnw" = ( -/obj/item/mecha_parts/mecha_equipment/crisis_drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qny" = ( -/obj/item/device/flashlight/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnD" = ( -/obj/item/device/defib_kit/compact/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnG" = ( -/obj/item/toy/plushie/ipc/toaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnI" = ( -/obj/item/weapon/soap/blue_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnR" = ( -/obj/structure/sign/levels/science/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnS" = ( -/obj/item/clothing/glasses/omnihud/kamina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qnV" = ( -/obj/item/weapon/rig/vox/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qom" = ( -/obj/item/clothing/under/fluff/ivy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoz" = ( -/obj/item/clothing/accessory/tie/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoF" = ( -/obj/item/clothing/head/centhat/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoG" = ( -/obj/item/weapon/surgical/surgicaldrill/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoI" = ( -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoO" = ( -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qoQ" = ( -/obj/item/clothing/suit/storage/hazardvest/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpe" = ( -/obj/item/weapon/reagent_containers/food/drinks/dry_ramen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpg" = ( -/obj/item/clothing/under/scratch/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpn" = ( -/obj/item/clothing/under/solgov/utility/sifguard/medical/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpo" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/honey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpK" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/oculum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpQ" = ( -/obj/item/stack/material/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpX" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpY" = ( -/obj/item/robot_parts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qpZ" = ( -/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qqe" = ( -/obj/item/clothing/head/helmet/space/void/pilot/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qqv" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qqB" = ( -/obj/mecha/combat/phazon/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qqP" = ( -/obj/machinery/vending/deathmatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qqV" = ( -/obj/item/clothing/under/rank/chief_medical_officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrg" = ( -/obj/item/organ/internal/nano/refactory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qro" = ( -/obj/structure/closet/crate/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrs" = ( -/obj/item/rig_module/device/pen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrB" = ( -/obj/item/weapon/stamp/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrC" = ( -/obj/item/ammo_magazine/m10mm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrD" = ( -/obj/item/clothing/accessory/holster/waist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qrO" = ( -/obj/item/clothing/head/tajaran/scarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qse" = ( -/obj/item/weapon/melee/energy/sword/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsg" = ( -/obj/item/stamp/einstein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsi" = ( -/obj/structure/ghost_pod/ghost_activated/morphspawn/no_announce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsm" = ( -/obj/machinery/abstract_grub_machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsn" = ( -/obj/item/weapon/circuitboard/machine/rtg/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qso" = ( -/obj/item/weapon/light/tube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsq" = ( -/obj/item/projectile/bullet/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qss" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/acidspit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsv" = ( -/obj/item/clothing/head/helmet/space/fluff/joan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsx" = ( -/obj/item/clothing/under/sec_flight_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsB" = ( -/obj/item/weapon/aliencoin/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsK" = ( -/mob/living/simple_mob/animal/passive/dog/corgi/Lisa, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qsN" = ( -/obj/item/ammo_magazine/ammo_box/b762/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsO" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsP" = ( -/obj/item/weapon/staff/stick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qsT" = ( -/obj/item/toy/plushie/generic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qta" = ( -/obj/machinery/suit_cycler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qth" = ( -/obj/item/weapon/storage/belt/fannypack/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtn" = ( -/obj/item/clothing/under/skirt/pleated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtp" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qts" = ( -/obj/item/weapon/fluff/chemset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtw" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtA" = ( -/obj/item/clothing/ears/skrell/colored/chain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtH" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/white_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qtS" = ( -/mob/living/simple_mob/vore/cookiegirl{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"quc" = ( -/obj/item/clothing/accessory/holster/waist/kinetic_accelerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"quk" = ( -/obj/item/clothing/suit/armor/tdome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qup" = ( -/obj/machinery/vending/foodveggie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"quG" = ( -/obj/item/clothing/head/pelt/tigerpeltsnow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"quN" = ( -/obj/item/clothing/accessory/solgov/department/medical/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"quR" = ( -/obj/item/clothing/shoes/syndigaloshes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"quS" = ( -/obj/item/device/personal_shield_generator/belt/parry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvb" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvs" = ( -/obj/structure/sign/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvt" = ( -/obj/item/clothing/accessory/holster/machete/rapier/swords, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvw" = ( -/obj/item/seeds/cherryseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvF" = ( -/obj/item/weapon/card/id/medical/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvK" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/kea, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qvL" = ( -/obj/item/weapon/storage/mre/menu11, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvX" = ( -/obj/item/weapon/arrow/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qvY" = ( -/obj/item/organ/internal/augment/armmounted/shoulder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwe" = ( -/obj/item/clothing/suit/ianshirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwi" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/wataur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qws" = ( -/obj/structure/bed/chair/bay/chair/padded/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwA" = ( -/obj/item/weapon/circuitboard/autolathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwD" = ( -/obj/item/clothing/accessory/ribbon/solgov/instructor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwI" = ( -/obj/item/projectile/temp/hot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwK" = ( -/obj/structure/bed/chair/sofa/right/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwT" = ( -/obj/item/clothing/suit/storage/hazardvest/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwX" = ( -/obj/item/integrated_circuit/manipulation/weapon_firing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qwZ" = ( -/obj/item/clothing/under/blazer/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxc" = ( -/obj/item/clothing/under/christmas/croptop/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxd" = ( -/obj/structure/largecrate/animal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxq" = ( -/obj/item/clothing/suit/wizrobe/magusblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxs" = ( -/obj/item/weapon/reagent_containers/food/snacks/tomatomeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxv" = ( -/obj/item/ammo_magazine/ammo_box/b545/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxw" = ( -/obj/item/weapon/spacecash/c50, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxx" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratpackramen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxA" = ( -/obj/item/clothing/under/solgov/service/sifguard/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxJ" = ( -/obj/item/device/t_scanner/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxK" = ( -/obj/item/weapon/aliencoin/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxN" = ( -/obj/structure/sign/department/toxin_res, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qxO" = ( -/mob/living/simple_mob/animal/passive/gaslamp/snow{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qxS" = ( -/mob/living/simple_mob/animal/passive/crab/Coffee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qxT" = ( -/obj/structure/closet/crate/mimic/airlock/dangerous, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyc" = ( -/obj/item/device/modkit_conversion/fluff/amara_hos_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyj" = ( -/obj/item/device/halogen_counter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyv" = ( -/obj/item/clothing/under/teshari/smock/uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyy" = ( -/obj/item/integrated_circuit/arithmetic/sign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyE" = ( -/obj/structure/sign/levels/medical/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyS" = ( -/obj/item/weapon/reagent_containers/food/snacks/caramelapple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyU" = ( -/obj/item/clothing/suit/space/void/chrono, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyX" = ( -/obj/item/toy/minigibber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qyZ" = ( -/obj/structure/sign/warning/secure_area/armory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qzp" = ( -/obj/item/organ/internal/augment/armmounted/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qzs" = ( -/obj/structure/sign/levels/engineering/solars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qzu" = ( -/obj/item/clothing/under/fluff/srususoviet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qzw" = ( -/obj/item/clothing/under/rank/cargotech/jeans/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAa" = ( -/obj/item/surplus_voucher/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAb" = ( -/obj/machinery/particle_smasher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAj" = ( -/obj/item/weapon/toy/xmas_cracker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAr" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/antediluvian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAu" = ( -/obj/item/weapon/syringe_cartridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAE" = ( -/obj/item/weapon/card/id/gateway/snowfield/class6S, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAP" = ( -/obj/item/device/assembly/igniter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qAR" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBa" = ( -/obj/item/weapon/reagent_containers/food/snacks/tastybread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBj" = ( -/obj/structure/table/wooden_reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBk" = ( -/obj/item/toy/plushie/grey_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBn" = ( -/obj/item/clothing/gloves/gauntlets/rig/fluff/sheri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBq" = ( -/obj/item/clothing/head/helmet/combat/USDF, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBw" = ( -/obj/structure/sign/signnew/danger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBx" = ( -/obj/item/clothing/head/helmet/space/vox/pressure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBy" = ( -/obj/item/weapon/pen/multi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBD" = ( -/obj/item/ammo_magazine/m9mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBI" = ( -/obj/item/weapon/storage/mrebag/menu9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qBP" = ( -/obj/item/weapon/gun/energy/locked/phasegun/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCb" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/brown_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCi" = ( -/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCk" = ( -/obj/structure/closet/crate/einstein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCp" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/chapel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCC" = ( -/obj/item/device/debugger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qCQ" = ( -/mob/living/simple_mob/shadekin/orange{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qCU" = ( -/obj/item/ammo_casing/a10x24, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDg" = ( -/obj/machinery/vending/event/loadout_misc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDh" = ( -/obj/item/weapon/storage/fancy/fluff/charlotte, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDq" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDr" = ( -/obj/item/stack/material/smolebricks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDs" = ( -/obj/structure/closet/crate/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDt" = ( -/obj/item/weapon/glass_extra/straw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDu" = ( -/obj/item/clothing/head/beret/sec/navy/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDA" = ( -/obj/item/rig_module/ai_container, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDG" = ( -/obj/item/weapon/gun/projectile/caseless/prototype/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDJ" = ( -/obj/item/instrument/accordion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDM" = ( -/obj/item/weapon/reagent_containers/food/snacks/chawanmushi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDQ" = ( -/obj/item/ammo_magazine/m95/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qDV" = ( -/obj/item/device/personal_shield_generator/belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEf" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEg" = ( -/obj/item/weapon/book/bundle/custom_library/reference/recyclingprocedures, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEh" = ( -/mob/living/simple_mob/humanoid/clown/clown, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qEm" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEo" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/vendburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEu" = ( -/obj/item/clothing/under/rank/atmospheric_technician, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEC" = ( -/obj/structure/prop/machine/tgmc_console4/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qED" = ( -/obj/item/clothing/under/det/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEM" = ( -/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qEN" = ( -/obj/machinery/atmospherics/pipe/cap/visible/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEW" = ( -/obj/item/clothing/under/dress/alpine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qEZ" = ( -/obj/structure/sign/directions/ladder_down, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qFo" = ( -/mob/living/simple_mob/animal/giant_spider/hunter/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qFq" = ( -/obj/item/clothing/shoes/boots/jackboots/toeless/knee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qFJ" = ( -/obj/item/device/nif/protean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qFK" = ( -/obj/item/clothing/shoes/boots/singer/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qFT" = ( -/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun/auto{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qGe" = ( -/obj/item/ammo_magazine/mg42/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGf" = ( -/obj/machinery/artifact/predefined/hungry_statue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGl" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGn" = ( -/obj/item/clothing/under/christmas/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGy" = ( -/obj/item/toy/figure/borg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGB" = ( -/obj/item/clothing/suit/armor/vest/wolftaur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGF" = ( -/obj/item/weapon/grenade/spawnergrenade/spider/briefcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGG" = ( -/obj/item/weapon/cartridge/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qGR" = ( -/obj/item/toy/plushie/blue_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHm" = ( -/obj/item/clothing/accessory/dosimeter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHo" = ( -/obj/structure/sign/directions/security/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHM" = ( -/obj/item/clothing/under/rank/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHQ" = ( -/obj/item/weapon/cell/hyper/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHS" = ( -/obj/item/weapon/surgical/scalpel/ripper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHT" = ( -/obj/machinery/crystal/ice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHX" = ( -/obj/machinery/computer/arcade/clawmachine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qHY" = ( -/obj/item/weapon/spell/projectile/chain_lightning/lesser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIa" = ( -/obj/item/weapon/storage/backpack/parachute, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIb" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/red_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIc" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIy" = ( -/obj/item/weapon/paper/Court, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIE" = ( -/obj/item/clothing/head/beret/solgov/survey/extraplanar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIJ" = ( -/obj/item/integrated_circuit/built_in, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIP" = ( -/obj/structure/prop/machine/tube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIS" = ( -/obj/item/weapon/circuitboard/skills, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIU" = ( -/obj/item/weapon/flag/advent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIW" = ( -/obj/item/weapon/gun/magnetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qIY" = ( -/obj/item/clothing/head/hood/winter/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJa" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJe" = ( -/obj/machinery/vending/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJh" = ( -/obj/item/clothing/under/shorts/jeans/youngfolks/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJj" = ( -/obj/item/clothing/accessory/medal/solgov/gold/crest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJl" = ( -/obj/item/clothing/gloves/sterile/nitrile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJm" = ( -/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJo" = ( -/obj/item/clothing/head/fish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJp" = ( -/obj/machinery/vending/wardrobe/mimedrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJt" = ( -/obj/item/clothing/suit/space/syndicate/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJu" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJy" = ( -/obj/machinery/airlock_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJM" = ( -/obj/machinery/door/airlock/angled_bay/hatch/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJN" = ( -/obj/item/clothing/suit/dress/solgov/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qJQ" = ( -/obj/item/ammo_magazine/rpd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKd" = ( -/obj/item/ammo_magazine/m762/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKe" = ( -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKj" = ( -/obj/item/clothing/suit/wizrobe/psypurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKn" = ( -/obj/machinery/recharge_station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKq" = ( -/obj/item/weapon/reagent_containers/food/drinks/chaitea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKs" = ( -/obj/item/integrated_circuit/manipulation/grenade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKt" = ( -/obj/item/clothing/under/color/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKv" = ( -/obj/item/weapon/storage/pill_bottle/citalopram, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKx" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qKC" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKF" = ( -/obj/item/weapon/reagent_containers/food/snacks/stuffing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKG" = ( -/obj/item/weapon/weldingtool/mini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKL" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKM" = ( -/obj/structure/sign/scenery/map/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qKV" = ( -/obj/item/clothing/head/helmet/space/changeling/armored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLa" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLd" = ( -/obj/item/weapon/reagent_containers/food/snacks/nugget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLi" = ( -/obj/item/clothing/head/caphat/formal/fedcover/fedcoverblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLj" = ( -/obj/item/weapon/storage/box/fluff/cassandra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLm" = ( -/obj/item/clothing/suit/space/vox/civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLo" = ( -/obj/item/weapon/card/id/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLD" = ( -/obj/item/device/radio/headset/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLH" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLR" = ( -/obj/structure/closet/crate/miningcar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qLY" = ( -/obj/machinery/door/morgue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMb" = ( -/obj/item/trash/mochicakewrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMe" = ( -/obj/structure/largecrate/animal/swoopie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMi" = ( -/obj/machinery/computer/diseasesplicer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMm" = ( -/obj/item/ammo_magazine/tp23/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMn" = ( -/obj/item/weapon/flame/lighter/zippo/fluff/amara, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMp" = ( -/obj/machinery/chem_master, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMt" = ( -/obj/item/clothing/suit/space/void/refurb/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMz" = ( -/obj/item/weapon/reagent_containers/pill/methylphenidate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMA" = ( -/obj/structure/sign/flag/catpirate/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMD" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qME" = ( -/obj/item/clothing/under/curator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMJ" = ( -/mob/living/simple_mob/vore/horse/big, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qMO" = ( -/obj/item/toy/figure/red_soldier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMP" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qMV" = ( -/obj/item/ammo_casing/a357/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNb" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/mp5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNe" = ( -/obj/structure/table/alien/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNg" = ( -/obj/structure/table/woodentable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNq" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNs" = ( -/obj/item/robot_parts/l_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNG" = ( -/obj/item/weapon/storage/belt/security/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNM" = ( -/obj/machinery/gibber/autogibber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNO" = ( -/obj/item/clothing/head/hood_vr/turnip_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qNP" = ( -/obj/item/trash/cheesie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOk" = ( -/obj/item/clothing/suit/storage/miljacket/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOl" = ( -/obj/machinery/partslathe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOs" = ( -/obj/machinery/gateway{ - dir = 10 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOu" = ( -/obj/structure/symbol/pr, -/turf/simulated/fitness, -/area/survivalpod) -"qOD" = ( -/obj/item/clothing/head/helmet/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOQ" = ( -/obj/item/device/electronic_assembly/clothing/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOR" = ( -/obj/item/trash/rkibble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOY" = ( -/obj/item/weapon/storage/fancy/cigarettes/luckystars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qOZ" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPa" = ( -/obj/item/clothing/under/shorts/jeans/youngfolks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPd" = ( -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPf" = ( -/obj/item/weapon/storage/backpack/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPg" = ( -/obj/item/device/flashlight/lamp/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPn" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/laugh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPr" = ( -/obj/machinery/light/small/emergency/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPv" = ( -/obj/item/clothing/suit/jacket/puffer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPA" = ( -/obj/item/ammo_casing/macrobattery/detox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPB" = ( -/obj/item/clothing/head/collectable/hardhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPF" = ( -/obj/item/clothing/glasses/aerogelgoggles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPH" = ( -/obj/item/clothing/under/undersuit/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPL" = ( -/obj/item/ammo_casing/microbattery/medical/brute2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPS" = ( -/obj/item/weapon/bedsheet/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPU" = ( -/obj/item/clothing/under/rank/medical/paramedic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPV" = ( -/obj/mecha/medical/odysseus/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qPW" = ( -/obj/item/clothing/suit/armor/swat/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQa" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQg" = ( -/obj/item/weapon/reagent_containers/food/snacks/excitingsuppermattershard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQs" = ( -/obj/item/clothing/head/helmet/space/vox/civ/trader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQu" = ( -/obj/item/seeds/random, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQy" = ( -/obj/item/clothing/head/helmet/space/void/responseteam/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQI" = ( -/obj/item/clothing/suit/whitedress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQP" = ( -/obj/item/device/bodysnatcher, -/obj/item/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qQY" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/mug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRa" = ( -/obj/item/stack/marker_beacon/ten, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRb" = ( -/obj/item/clothing/suit/space/vox/civ/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRd" = ( -/obj/structure/prop/machine/nt_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRe" = ( -/obj/item/weapon/gun/energy/lasertag/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRf" = ( -/obj/item/clothing/head/headband/maid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRg" = ( -/obj/item/device/kit/paint/durand/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRt" = ( -/obj/item/weapon/implant/reagent_generator/tempest/natalya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRv" = ( -/obj/item/capture_crystal/basic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRJ" = ( -/obj/item/clothing/accessory/storage/webbing/pilot1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRP" = ( -/mob/living/simple_mob/animal/giant_spider/nurse/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qRT" = ( -/obj/item/clothing/under/teshari/smock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qRY" = ( -/obj/item/weapon/card/id/cargo/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSd" = ( -/obj/item/capture_crystal/broodmother, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSe" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSj" = ( -/obj/structure/prop/rock/watersharp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSp" = ( -/obj/item/integrated_circuit/passive/power/solar_cell/quad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSt" = ( -/obj/item/weapon/telecube/randomized/mated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSx" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/cheap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSz" = ( -/obj/structure/closet/crate/secure/large/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSC" = ( -/obj/item/weapon/shield_diffuser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSE" = ( -/obj/item/weapon/disk/data/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSK" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSL" = ( -/mob/living/simple_mob/animal/passive/cat/original, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qSM" = ( -/obj/item/weapon/circuitboard/curefab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSR" = ( -/obj/item/stack/material/algae{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qST" = ( -/obj/structure/bookcase/manuals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSV" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qSX" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/security/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTh" = ( -/obj/item/weapon/SWF_uplink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTj" = ( -/obj/item/weapon/book/custom_library/fiction/irishairmanforseesdeath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTn" = ( -/obj/item/seeds/kudzuseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTq" = ( -/obj/item/clothing/accessory/solgov/rank/ec/officer/o8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTI" = ( -/obj/item/ammo_magazine/clip/c12g/beanbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTJ" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTW" = ( -/obj/item/weapon/shovel/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTX" = ( -/obj/item/weapon/storage/fancy/cigarettes/jerichos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qTZ" = ( -/obj/item/clothing/shoes/flats/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUf" = ( -/obj/item/weapon/anobattery/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUy" = ( -/obj/item/weapon/spacecash/c20, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUL" = ( -/obj/item/clothing/under/rank/medical/scrubs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUO" = ( -/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUP" = ( -/obj/item/clothing/suit/armor/det_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUU" = ( -/obj/item/toy/russian_revolver/trick_revolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qUW" = ( -/obj/item/rig_module/mounted/mop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVd" = ( -/obj/item/weapon/circuitboard/arf_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVf" = ( -/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"qVx" = ( -/obj/item/clothing/head/helmet/space/void/refurb/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVA" = ( -/obj/item/clothing/gloves/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVD" = ( -/obj/item/device/flashlight/lamp/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVF" = ( -/obj/item/bee_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVG" = ( -/obj/item/weapon/circuitboard/mecha/imperion/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVI" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qVM" = ( -/obj/item/weapon/storage/backpack/dufflebag/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWf" = ( -/obj/item/weapon/card/id/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWi" = ( -/obj/item/toy/plushie/borgplushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWr" = ( -/obj/item/clothing/suit/storage/puffypurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWt" = ( -/obj/structure/closet/crate/large/einstein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWu" = ( -/obj/item/weapon/storage/vore_egg/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWv" = ( -/obj/structure/sign/directions/medical/operating_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWx" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWy" = ( -/obj/structure/sign/levels/teleporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWD" = ( -/obj/item/weapon/paper/photograph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWH" = ( -/obj/item/clothing/head/culthood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWI" = ( -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWM" = ( -/obj/item/weapon/storage/backpack/fluff/stunstaff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWN" = ( -/obj/item/device/tape/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWW" = ( -/obj/item/weapon/material/shard/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qWX" = ( -/obj/item/flag/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXe" = ( -/obj/machinery/vending/hydronutrients/brig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXp" = ( -/obj/item/clothing/suit/space/void/merc/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXq" = ( -/obj/item/weapon/storage/box/botanydisk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXu" = ( -/obj/item/clothing/head/hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXv" = ( -/obj/item/rig_module/vision/nvg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXA" = ( -/obj/item/weapon/storage/bag/plants/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXD" = ( -/obj/structure/sign/painting/library_secure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXG" = ( -/obj/item/clothing/head/dress/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXI" = ( -/obj/item/clothing/suit/radiation/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qXM" = ( -/obj/structure/sign/atmosplaque, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYa" = ( -/obj/item/weapon/rig/pmc/security/green/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYb" = ( -/obj/item/ammo_magazine/clip/c12g/scatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYe" = ( -/obj/item/weapon/reagent_containers/food/snacks/bageleverything, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYh" = ( -/obj/item/flag/vystholm/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYl" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYn" = ( -/obj/structure/particle_accelerator/particle_emitter/center, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYs" = ( -/obj/item/stack/tile/carpet/gaycarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYx" = ( -/obj/item/trash/brownies, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYC" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYD" = ( -/obj/item/weapon/storage/backpack/messenger/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYN" = ( -/obj/item/weapon/circuitboard/disperserfront, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYX" = ( -/obj/item/clothing/under/christmas/croptop/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qYY" = ( -/obj/item/integrated_circuit/input, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZa" = ( -/obj/item/weapon/material/knife/machete/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZj" = ( -/obj/structure/outcrop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZk" = ( -/obj/structure/sign/directions/engineering/solars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZl" = ( -/obj/item/clothing/under/shorts/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZJ" = ( -/obj/item/weapon/aiModule, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZL" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZU" = ( -/obj/item/weapon/beartrap/hunting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"qZX" = ( -/obj/item/clothing/glasses/meson/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raa" = ( -/obj/item/weapon/gun/projectile/dartgun/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raf" = ( -/obj/item/clothing/head/hood/winter/aformal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raj" = ( -/obj/item/weapon/card/id/event, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ran" = ( -/obj/item/toy/character/lich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rav" = ( -/obj/item/clothing/under/psyche, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raC" = ( -/obj/item/weapon/circuitboard/communications, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raD" = ( -/obj/item/weapon/fluff/dragor_dot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raK" = ( -/obj/item/weapon/storage/backpack/messenger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raO" = ( -/obj/structure/sign/vacuum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"raP" = ( -/obj/item/weapon/rig/ert/assetprotection, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbe" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/christmasgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbj" = ( -/mob/living/simple_mob/humanoid/merc/ranged/technician{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rbo" = ( -/obj/item/clothing/suit/greatcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbx" = ( -/obj/item/clothing/under/rank/psych/turtleneck/sweater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rby" = ( -/obj/item/clothing/accessory/holster/armpit/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbA" = ( -/obj/item/clothing/suit/wizrobe/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbD" = ( -/obj/item/weapon/reagent_containers/food/drinks/smallmilk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbG" = ( -/obj/item/mecha_parts/part/odysseus_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbJ" = ( -/obj/item/weapon/refill_cartridge/multitype/clothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbT" = ( -/obj/item/clothing/suit/storage/solgov/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbV" = ( -/obj/item/weapon/storage/backpack/fluff/kaith, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rbW" = ( -/obj/item/clothing/under/rank/medical/paramedic_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcb" = ( -/obj/item/clothing/under/lawyer/red/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcc" = ( -/obj/item/rig_module/device/defib, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcd" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcj" = ( -/obj/item/rig_module/device/drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rck" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcq" = ( -/obj/item/weapon/handcuffs/cable/tape/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcs" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcB" = ( -/obj/item/weapon/gun/energy/laser/mounted/augment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcG" = ( -/obj/item/clothing/suit/space/void/engineering/hazmat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcO" = ( -/obj/item/weapon/implant/integrated_circuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcP" = ( -/obj/item/weapon/mining_scanner/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcS" = ( -/obj/machinery/power/solar_control/config_start, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcU" = ( -/obj/item/weapon/reagent_containers/food/drinks/h_chocolate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rcX" = ( -/obj/item/weapon/book/manual/hydroponics_pod_people, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdb" = ( -/obj/item/weapon/reagent_containers/food/snacks/truffle/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rde" = ( -/obj/item/clothing/head/beret/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rds" = ( -/obj/item/weapon/book/custom_library/fiction/blacksmithandkinglybloke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdx" = ( -/obj/item/weapon/spell/oxygenate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdH" = ( -/obj/item/weapon/card/id/centcom/ERT/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdI" = ( -/obj/item/device/personal_shield_generator/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdL" = ( -/obj/item/clothing/suit/armor/combat/USDF, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdO" = ( -/obj/item/weapon/storage/smolebrickcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdP" = ( -/obj/item/weapon/stamp/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rdW" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/vendburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rea" = ( -/obj/item/weapon/book/custom_library/fiction/myrock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ren" = ( -/obj/item/weapon/reagent_containers/food/snacks/dip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"req" = ( -/obj/item/clothing/accessory/armor/armorplate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"res" = ( -/obj/item/clothing/accessory/solgov/department/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ret" = ( -/obj/item/clothing/shoes/tourist_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reI" = ( -/obj/item/toy/figure/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reK" = ( -/obj/item/weapon/rig/ert/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reM" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reS" = ( -/obj/item/weapon/bikehorn/tinytether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reU" = ( -/obj/item/weapon/tank/stasis/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reX" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/soy_latte, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"reZ" = ( -/obj/item/device/perfect_tele, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfd" = ( -/obj/item/device/electronic_assembly/tiny/box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfg" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/hydrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfz" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfC" = ( -/obj/item/weapon/gun/projectile/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfO" = ( -/obj/machinery/door/airlock/engineeringatmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfP" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rfU" = ( -/obj/item/weapon/storage/fancy/cigarettes/yw/mauser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rge" = ( -/obj/item/clothing/shoes/heels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgl" = ( -/obj/structure/sign/sec4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgq" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgv" = ( -/obj/machinery/smartfridge/chemistry/chemvator/down, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgx" = ( -/obj/item/weapon/circuitboard/mecha/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgA" = ( -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgE" = ( -/obj/item/clothing/ears/skrell/cloth_female/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgQ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgR" = ( -/obj/machinery/suit_cycler/vintage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgT" = ( -/obj/item/weapon/reagent_containers/food/snacks/generalschicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgX" = ( -/obj/item/weapon/bananapeel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rgY" = ( -/obj/item/device/slow_sizegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rha" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/olive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhg" = ( -/obj/item/weapon/storage/backpack/dufflebag/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhj" = ( -/obj/item/seeds/thaadra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhk" = ( -/obj/item/clothing/accessory/armor/legguards/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhA" = ( -/obj/item/trash/sweetration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhD" = ( -/obj/item/weapon/circuitboard/doorbell_chime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rhL" = ( -/obj/item/clothing/accessory/collar/fluff/stellar_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rih" = ( -/obj/item/weapon/storage/backpack/satchel/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rij" = ( -/obj/item/weapon/circuitboard/machine/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rit" = ( -/obj/item/weapon/gun/projectile/automatic/bullpup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"riE" = ( -/obj/item/clothing/accessory/badge/holo/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"riT" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjb" = ( -/obj/item/clothing/ears/skrell/band/ebony, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjd" = ( -/obj/item/clothing/accessory/poncho/thermal/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjm" = ( -/obj/item/wheelchair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjo" = ( -/obj/item/clothing/head/hood/winter/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjw" = ( -/obj/machinery/space_heater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjM" = ( -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjN" = ( -/obj/item/clothing/head/hood/winter/security/santa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjT" = ( -/obj/item/weapon/tank/oxygen/onetankbomb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjU" = ( -/obj/item/clothing/under/dress/dress_hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjV" = ( -/obj/item/clothing/head/service/sifguard/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rjX" = ( -/obj/item/clothing/accessory/medal/solgov/iron/star, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rka" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/applecake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkh" = ( -/obj/item/weapon/card/id/event/altcard/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkk" = ( -/obj/item/weapon/stock_parts/manipulator/nano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkl" = ( -/obj/machinery/chemical_dispenser/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rko" = ( -/obj/item/weapon/circuitboard/transhuman_resleever, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkx" = ( -/obj/item/clothing/accessory/scarf/altevian/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rky" = ( -/obj/item/clothing/suit/storage/hooded/costume/ian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkA" = ( -/obj/item/weapon/pickaxe/diamonddrill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkE" = ( -/obj/item/clothing/ears/skrell/colored/band, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkO" = ( -/obj/item/seeds/cutting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkQ" = ( -/obj/item/clothing/suit/monkeysuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rkT" = ( -/obj/item/weapon/arrow/rod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rln" = ( -/obj/item/weapon/spell/energy_siphon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlr" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/surge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlt" = ( -/obj/item/toy/bosunwhistle/fluff/strix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlu" = ( -/obj/machinery/atmospherics/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlw" = ( -/mob/living/simple_mob/animal/giant_spider/lurker{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rly" = ( -/obj/vehicle/bike/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlD" = ( -/obj/item/clothing/mask/gas/wwii, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlH" = ( -/obj/item/weapon/gun/projectile/cell_loaded/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlK" = ( -/obj/item/weapon/reagent_containers/food/snacks/onionsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlO" = ( -/obj/item/clothing/under/pants/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlP" = ( -/mob/living/simple_mob/vore/aggressive/lizardman{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rlS" = ( -/obj/item/trash/cookiesnack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlV" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlX" = ( -/obj/structure/sign/levels/medical/operating_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rlZ" = ( -/obj/item/clothing/head/helmet/space/void, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rme" = ( -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmg" = ( -/obj/item/clothing/under/fluff/slime_skeleton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmi" = ( -/obj/item/clothing/head/helmet/space/void/engineering/construction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmo" = ( -/obj/item/clothing/under/det/waistcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmx" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmz" = ( -/obj/item/clothing/under/dress/dress_fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmI" = ( -/obj/item/clothing/suit/armor/pcarrier/riot/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rmL" = ( -/obj/item/clothing/under/fluff/kelplagueuniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnb" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnx" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnA" = ( -/obj/item/toy/plushie/robo_corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnC" = ( -/obj/item/stack/medical/bruise_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnG" = ( -/obj/item/stack/cable_coil/heavyduty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnH" = ( -/obj/item/ammo_casing/afoam_dart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnP" = ( -/obj/structure/dark_portal/hub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnQ" = ( -/obj/item/organ/internal/xenos/plasmavessel/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnS" = ( -/obj/item/weapon/bedsheet/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnT" = ( -/mob/living/simple_mob/animal/sif/savik{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rnU" = ( -/obj/structure/sign/flag/almach_a/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnX" = ( -/obj/item/integrated_circuit/list/write, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnY" = ( -/obj/machinery/light/small/fairylights, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rnZ" = ( -/obj/structure/filingcabinet/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rof" = ( -/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"roi" = ( -/obj/machinery/cablelayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"roj" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/dylovene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rol" = ( -/obj/structure/sign/flag/sol/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"roq" = ( -/obj/mecha/combat/fighter/baron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rot" = ( -/obj/item/weapon/reagent_containers/blood/APlus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"roK" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, -/turf/simulated/floor/atoll, -/area/survivalpod) -"roN" = ( -/obj/item/seeds/redtowermycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"roS" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/glock71, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpb" = ( -/obj/item/weapon/cell/device/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpe" = ( -/obj/item/weapon/storage/box/condimentbottles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpk" = ( -/obj/item/clothing/shoes/boots/jackboots/fluff/sam_boots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpn" = ( -/obj/item/clothing/accessory/bracer/fluff/xander_sthasha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpB" = ( -/obj/item/clothing/head/soft/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpI" = ( -/obj/structure/bed/chair/sofa/left/sif_ora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpJ" = ( -/obj/item/weapon/storage/wallet/womens, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpT" = ( -/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rpV" = ( -/mob/living/simple_mob/metroid/juvenile/zeta{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rqa" = ( -/mob/living/simple_mob/humanoid/pirate/shield{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rqe" = ( -/obj/item/device/mass_spectrometer/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqf" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqq" = ( -/obj/item/device/electronic_assembly/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqr" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqA" = ( -/obj/item/weapon/vehicle_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqD" = ( -/obj/item/clothing/under/teshari/undercoat/standard/lightgrey_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqF" = ( -/obj/structure/closet/body_bag/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqL" = ( -/obj/machinery/gravity_generator/main/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqM" = ( -/mob/living/simple_mob/animal/passive/fox{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rqP" = ( -/obj/item/clothing/accessory/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqR" = ( -/obj/item/ammo_magazine/mp5mag/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rqW" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrd" = ( -/obj/item/weapon/shield/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rri" = ( -/obj/item/trash/tidegobs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrn" = ( -/obj/item/clothing/under/sifcop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrq" = ( -/obj/structure/barricade/cutout/traitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrt" = ( -/obj/machinery/vending/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rru" = ( -/obj/item/stack/tile/floor/sidewalk/slab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrF" = ( -/obj/item/clothing/under/dress/white3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrR" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/nutriment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrY" = ( -/obj/item/ammo_magazine/m12gdrumjack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rrZ" = ( -/obj/item/clothing/under/rank/parameduniskirtlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsj" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rso" = ( -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"rsp" = ( -/obj/item/weapon/gun/magnetic/matfed/phoronbore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsF" = ( -/obj/structure/sign/warning/pods, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsN" = ( -/obj/item/device/measuring_tape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsP" = ( -/obj/item/clothing/glasses/night/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsQ" = ( -/obj/item/clothing/suit/space/void/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsS" = ( -/obj/item/clothing/suit/storage/snowsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rsY" = ( -/mob/living/simple_mob/horror/Eddy{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rta" = ( -/obj/structure/bed/chair/sofa/bench/marble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtb" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/soup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rth" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/old/tox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rti" = ( -/obj/item/clothing/suit/storage/vest/solgov/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtk" = ( -/obj/item/pipe/trinary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtw" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtG" = ( -/obj/machinery/suit_cycler/vintage/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtK" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtO" = ( -/obj/item/weapon/gun/launcher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/risottoballs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtS" = ( -/obj/item/weapon/circuitboard/mecha/gygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtX" = ( -/obj/item/clothing/shoes/hitops/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rtY" = ( -/obj/item/clothing/shoes/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rur" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rus" = ( -/obj/item/clothing/accessory/scarf/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rux" = ( -/obj/machinery/vending/deluxe_dinner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruy" = ( -/obj/item/weapon/tool/wrench/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruz" = ( -/obj/item/weapon/stamp/internalaffairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruB" = ( -/obj/item/weapon/reagent_containers/food/snacks/pretzels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruD" = ( -/obj/structure/closet/crate/mimic/closet/guaranteed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruE" = ( -/obj/item/organ/internal/eyes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruJ" = ( -/obj/item/weapon/storage/box/fluff/maxie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruT" = ( -/obj/item/clothing/accessory/collar/holo/indigestible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruY" = ( -/obj/item/weapon/storage/belt/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ruZ" = ( -/obj/item/toy/plushie/moth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvn" = ( -/obj/item/weapon/reagent_containers/food/snacks/greencurry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvo" = ( -/obj/item/device/radio/headset/raider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvp" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvH" = ( -/obj/item/ammo_casing/a792, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvN" = ( -/obj/structure/prop/machine/sorter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvP" = ( -/obj/structure/prop/esoteric/reader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvQ" = ( -/obj/item/weapon/gun/magnetic/gasthrower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvR" = ( -/obj/item/toy/figure/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvS" = ( -/obj/item/weapon/material/kitchen/utensil/spoon/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rvX" = ( -/obj/item/toy/figure/cargotech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwh" = ( -/obj/item/weapon/syndie/c4explosive/heavy/super_heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwj" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwk" = ( -/obj/structure/closet/secure_closet/guncabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwq" = ( -/obj/item/clothing/under/rank/geneticist_new, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwC" = ( -/obj/item/clothing/glasses/sunglasses/medhud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwE" = ( -/obj/structure/sign/directions/science/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rwZ" = ( -/obj/structure/loot_pile/surface, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxb" = ( -/obj/item/weapon/spell/construct/projectile/inverted_beam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxg" = ( -/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxj" = ( -/obj/item/weapon/reagent_containers/glass/bottle/myelamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxk" = ( -/obj/item/clothing/under/solgov/service/sifguard/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxm" = ( -/mob/living/simple_mob/metroid/juvenile/alpha{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rxJ" = ( -/obj/item/clothing/suit/space/vox/civ/botanist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxK" = ( -/obj/item/trash/waffles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxL" = ( -/obj/structure/sign/department/prison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/dorayaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxW" = ( -/obj/item/clothing/under/swimsuit/fluff/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rxZ" = ( -/obj/item/clothing/under/cowboy/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryb" = ( -/obj/item/clothing/under/clown/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryq" = ( -/obj/item/mecha_parts/part/durand_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rys" = ( -/obj/item/weapon/gun/energy/bfgtaser/tongue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryu" = ( -/obj/item/weapon/surgical/bioregen/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryz" = ( -/obj/item/organ/internal/liver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryA" = ( -/obj/item/seeds/lettuce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryH" = ( -/obj/item/weapon/book/manual/rotary_electric_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryV" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/hyronalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ryY" = ( -/obj/item/weapon/reagent_containers/food/snacks/lomein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzf" = ( -/obj/item/ammo_casing/a9mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzl" = ( -/obj/item/weapon/gun/projectile/lamia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzp" = ( -/obj/structure/event/stage{ - icon_state = "grass" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzs" = ( -/obj/machinery/shieldwall{ - dir = 9 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzu" = ( -/obj/item/weapon/storage/box/wormcan/sickly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzv" = ( -/obj/item/clothing/accessory/poncho/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzx" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzy" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzB" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzC" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/electro{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rzF" = ( -/obj/item/ammo_casing/a57/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzH" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rzT" = ( -/obj/item/weapon/mine/frag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rzY" = ( -/obj/item/weapon/circuitboard/mecha/gygax/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAt" = ( -/obj/item/device/electronic_assembly/wallmount/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAv" = ( -/obj/item/weapon/book/custom_library/religious/storyoflordganesha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAw" = ( -/obj/item/weapon/storage/belt/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAy" = ( -/obj/item/weapon/gun/energy/laser/practice/xenoarch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAE" = ( -/obj/structure/reagent_dispensers/space_cleaner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAK" = ( -/obj/item/clothing/under/shorts/cshorts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAM" = ( -/obj/item/weapon/card/mining_point_card/survey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAP" = ( -/obj/structure/largecrate/vehicle/bike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAQ" = ( -/obj/item/clothing/accessory/armor/tag/aneg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAX" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAY" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rAZ" = ( -/obj/item/weapon/material/knife/machete/hatchet/stone/bone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBd" = ( -/obj/item/weapon/circuitboard/machine/abductor/core/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBe" = ( -/obj/item/weapon/card/id/generic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBo" = ( -/obj/item/weapon/gun/magnetic/railgun/heater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBq" = ( -/obj/item/weapon/gun/launcher/spikethrower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBy" = ( -/obj/item/ammo_casing/a545/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBA" = ( -/obj/item/ammo_casing/a762/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBB" = ( -/mob/living/simple_mob/mechanical/mecha/ripley/pirate/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rBL" = ( -/obj/item/clothing/suit/armor/pcarrier/medium/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBM" = ( -/obj/item/stack/tile/floor/eris/dark/cyancorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBP" = ( -/obj/item/flag/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBV" = ( -/obj/item/clothing/under/rank/chief_engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rBZ" = ( -/obj/mecha/combat/fighter/baron/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCc" = ( -/obj/item/debris_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCe" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/fennec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCh" = ( -/obj/item/clothing/accessory/fluff/heartpin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCo" = ( -/obj/item/clothing/under/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCs" = ( -/obj/item/integrated_circuit/converter/refdecode, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCt" = ( -/obj/structure/sign/levels/security/seceqp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCA" = ( -/obj/item/weapon/gun/energy/mouseray/redpanda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCK" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCP" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/sterilizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCV" = ( -/obj/item/clothing/gloves/ring/material/osmium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCX" = ( -/obj/item/weapon/handcuffs/cable/plantfiber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rCZ" = ( -/obj/item/clothing/accessory/armor/legguards/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDg" = ( -/obj/item/clothing/glasses/sunglasses/bigshot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDk" = ( -/obj/structure/sign/kiddieplaque/poi4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDl" = ( -/obj/item/clothing/under/dress/antediluvian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDm" = ( -/obj/item/ammo_magazine/clip/c45/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDt" = ( -/obj/item/clothing/gloves/arm_guard/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDv" = ( -/obj/structure/closet/secure_closet/egg/shark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDx" = ( -/obj/item/clothing/accessory/gaiter/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDz" = ( -/mob/living/simple_mob/animal/giant_spider/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rDK" = ( -/obj/item/trash/pistachios, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rDU" = ( -/obj/item/weedkiller/lindane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEc" = ( -/obj/item/weapon/disposable_teleporter/free, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEd" = ( -/obj/item/weapon/reagent_containers/food/snacks/devilledegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEi" = ( -/obj/item/clothing/shoes/flats/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEj" = ( -/obj/item/weapon/reagent_containers/pill/kelotane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEr" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/mu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEx" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEz" = ( -/obj/item/ammo_magazine/m45/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rED" = ( -/obj/item/stack/tile/floor/eris/steel/danger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEI" = ( -/obj/item/weapon/reagent_containers/food/snacks/hanami_dango, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEO" = ( -/obj/item/clothing/under/teshari/smock/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rER" = ( -/obj/structure/closet/crate/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEW" = ( -/obj/item/clothing/shoes/hitops/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rEZ" = ( -/obj/item/clothing/ears/earring/dangle/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFa" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/beepskysmash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFo" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFq" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rFu" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "33" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFv" = ( -/obj/item/weapon/storage/chewables/tobacco/fine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFA" = ( -/obj/item/device/encryptionkey/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFL" = ( -/obj/item/clothing/suit/space/vox/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFS" = ( -/obj/item/organ/internal/spleen/minor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFX" = ( -/mob/living/simple_mob/animal/passive/cat/jones, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rFY" = ( -/obj/item/weapon/spacecash/c100, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rFZ" = ( -/obj/item/clothing/mask/ai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGa" = ( -/obj/item/clothing/accessory/armor/tag/bpos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGb" = ( -/obj/item/mecha_parts/mecha_equipment/combat_shield, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGn" = ( -/obj/item/weapon/spell/illusion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGx" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGy" = ( -/obj/item/clothing/shoes/sandal/clogs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGA" = ( -/obj/structure/closet/secure_closet/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGC" = ( -/obj/structure/mirror, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGL" = ( -/obj/structure/sign/level/fourth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGS" = ( -/obj/structure/table/bench/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGT" = ( -/obj/structure/bed/chair/sofa/pew/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rGU" = ( -/obj/item/clothing/suit/dress/saare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHf" = ( -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHg" = ( -/obj/item/device/t_scanner/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHm" = ( -/obj/item/clothing/accessory/shiny/socks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHw" = ( -/obj/item/clothing/shoes/magboots/changeling/armored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHy" = ( -/obj/item/trash/carpegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHG" = ( -/obj/item/weapon/reagent_containers/glass/paint/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHN" = ( -/obj/item/mecha_parts/part/janus_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHQ" = ( -/obj/item/toy/plushie/mouse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHR" = ( -/obj/structure/sign/directions/kitchen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rHZ" = ( -/obj/item/clothing/shoes/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIm" = ( -/obj/item/stack/material/wood/hard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIo" = ( -/obj/machinery/suit_cycler/vintage/tcaptain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIG" = ( -/obj/item/slimepotion/stabilizer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIJ" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIM" = ( -/obj/structure/noticeboard/toxins, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIQ" = ( -/obj/item/weapon/mine/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIS" = ( -/obj/item/clothing/under/customs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rIU" = ( -/mob/living/simple_mob/humanoid/pirate/ranged/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rIV" = ( -/obj/item/clothing/head/sombrero, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJc" = ( -/obj/item/weapon/reagent_containers/food/snacks/spicy_boys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJl" = ( -/obj/item/weapon/dnainjector/anticlumsy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJu" = ( -/obj/item/weapon/pickaxe/drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJC" = ( -/obj/item/clothing/under/tribalwear/common1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJU" = ( -/obj/item/weapon/reagent_containers/glass/bottle/alkysine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJX" = ( -/obj/machinery/portable_atmospherics/powered/pump/huge/stationary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rJZ" = ( -/obj/item/clothing/under/pants/utility/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKf" = ( -/obj/structure/timer_door, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKr" = ( -/obj/item/clothing/head/collectable/welding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKw" = ( -/obj/item/weapon/storage/mre/menu3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKA" = ( -/obj/item/ammo_casing/a545, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKF" = ( -/obj/structure/sign/levels/science/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKG" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/honker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKJ" = ( -/obj/item/device/cataloguer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKK" = ( -/obj/item/clothing/accessory/medal/gold/heroism, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rKM" = ( -/obj/item/weapon/gun/projectile/caseless/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLa" = ( -/obj/item/weapon/disk/limb/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLc" = ( -/obj/item/integrated_circuit/passive/power/solar_cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLk" = ( -/obj/item/ammo_casing/a38/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLl" = ( -/obj/item/weapon/gun/energy/taser/disabler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLo" = ( -/obj/item/weapon/implanter/reagent_generator/mira, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLu" = ( -/mob/living/simple_mob/vore/hippo{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rLw" = ( -/obj/machinery/atmospherics/pipe/tank/carbon_dioxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLz" = ( -/obj/item/weapon/book/codex/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLB" = ( -/obj/item/clothing/suit/armor/pcarrier/bulletproof/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLN" = ( -/obj/item/clothing/head/surgery/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rLU" = ( -/obj/item/clothing/head/helmet/space/void/refurb/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMc" = ( -/obj/item/ammo_casing/microbattery/medical/resist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMh" = ( -/obj/item/weapon/gun/projectile/luger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMi" = ( -/obj/item/clothing/head/beret/solgov/gateway, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMj" = ( -/obj/structure/reagent_dispensers/peppertank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMo" = ( -/obj/item/clothing/head/hood/winter/security/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMp" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMH" = ( -/obj/item/clothing/head/collectable/kitty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMM" = ( -/obj/item/weapon/book/bundle/custom_library/nonfiction/riseandfallofpersianempire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMS" = ( -/obj/item/weapon/reagent_containers/glass/bottle/capsaicin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rMV" = ( -/obj/structure/symbol/lo, -/turf/simulated/fitness, -/area/survivalpod) -"rMZ" = ( -/obj/item/clothing/head/soft/solgov/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNf" = ( -/obj/item/clothing/head/beret/solgov/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNm" = ( -/obj/item/weapon/reagent_containers/food/snacks/cuttlefishcooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNu" = ( -/obj/item/clothing/under/teshari/undercoat/fluff/strix_cco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNA" = ( -/obj/item/clothing/mask/chewable/tobacco/nico, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNB" = ( -/obj/item/weapon/aiModule/maintenance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNM" = ( -/obj/item/weapon/storage/box/donkpockets/spicy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNR" = ( -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNV" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "21" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rNZ" = ( -/obj/item/clothing/under/vox/vox_robes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOa" = ( -/obj/structure/sign/levels/medical/cloning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOh" = ( -/obj/item/weapon/gun/energy/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOv" = ( -/obj/machinery/vending/wardrobe/bardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOx" = ( -/obj/item/integrated_circuit/reagent/storage/cryo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOy" = ( -/obj/item/clothing/suit/storage/toggle/track/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOz" = ( -/obj/item/clothing/under/teshari/smock/greydress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOD" = ( -/obj/item/weapon/shield/fluff/wolfgirlshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOJ" = ( -/obj/structure/closet/lawcloset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOK" = ( -/obj/item/clothing/head/helmet/space/vox/civ/librarian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rOX" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPk" = ( -/obj/structure/prop/statue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPn" = ( -/obj/item/weapon/firework_star/aesthetic/configurable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPp" = ( -/obj/item/weapon/computer_hardware/battery_module/nano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPy" = ( -/mob/living/simple_mob/animal/passive/crab/sif{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rPD" = ( -/obj/machinery/door/blast/gate/bars/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPI" = ( -/obj/machinery/door/airlock/sandstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPJ" = ( -/obj/item/toy/cultsword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rPK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQa" = ( -/obj/item/weapon/handcuffs/cable/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQb" = ( -/obj/item/trash/ratpackramen/trans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQc" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQe" = ( -/obj/item/ammo_magazine/t12, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQi" = ( -/obj/machinery/alarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQl" = ( -/mob/living/simple_mob/vore/sheep{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rQo" = ( -/obj/structure/particle_accelerator/end_cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQp" = ( -/obj/structure/door_assembly/door_assembly_research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQJ" = ( -/obj/item/weapon/gun/energy/meteorgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQK" = ( -/obj/item/clothing/suit/space/syndicate/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQS" = ( -/obj/item/weapon/book/codex/lore/robutt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rQU" = ( -/obj/item/stack/arcadeticket/thirty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRb" = ( -/obj/item/clothing/suit/space/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRf" = ( -/obj/item/weapon/circuitboard/request, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRi" = ( -/obj/item/clothing/under/rank/trek/medsci/next, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRl" = ( -/obj/structure/sign/warning/caution, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRq" = ( -/obj/item/seeds/cabbageseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRu" = ( -/obj/item/weapon/scepter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRv" = ( -/obj/item/clothing/accessory/armor/helmcover/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRB" = ( -/obj/item/stack/material/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRG" = ( -/obj/item/weapon/reagent_containers/food/snacks/friedegg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRL" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/singulo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRN" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRW" = ( -/obj/structure/bed/chair/sofa/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rRX" = ( -/obj/item/clothing/accessory/scarf/stripedgreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSc" = ( -/obj/item/weapon/commcard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSf" = ( -/obj/item/weapon/reagent_containers/food/snacks/onionrings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSg" = ( -/obj/item/weapon/tank/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSo" = ( -/obj/item/toy/figure/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSu" = ( -/obj/item/weapon/storage/box/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSv" = ( -/obj/item/weapon/circuitboard/timeclock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSw" = ( -/obj/item/weapon/reagent_containers/spray/luminol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSB" = ( -/obj/item/capture_crystal/cheap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSG" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSH" = ( -/obj/structure/bed/chair/sofa/pew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSL" = ( -/obj/structure/stripper_pole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSS" = ( -/obj/item/weapon/circuitboard/pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rSV" = ( -/obj/item/clothing/head/helmet/space/void/security/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTe" = ( -/obj/item/trash/smolburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTi" = ( -/obj/item/clothing/suit/storage/vest/heavy/flexitac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTj" = ( -/obj/item/weapon/rig/pmc/commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTs" = ( -/obj/item/clothing/suit/storage/explorer/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTt" = ( -/obj/item/weapon/storage/bag/plasticbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTw" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTA" = ( -/obj/item/device/laser_pointer/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTC" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxycodone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTD" = ( -/obj/item/weapon/reagent_containers/glass/bottle/ammonia, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTE" = ( -/mob/living/simple_mob/animal/passive/gaslamp{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rTI" = ( -/obj/item/weapon/reagent_containers/food/snacks/oort, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTK" = ( -/obj/item/clothing/under/solgov/service/sifguard/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTQ" = ( -/obj/structure/prop/statue/pillar/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rTT" = ( -/obj/item/weapon/flamethrower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUc" = ( -/obj/structure/barricade/cutout/greytide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUe" = ( -/obj/item/weapon/TVAssembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUg" = ( -/obj/item/weapon/material/knife/stone/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUi" = ( -/obj/item/clothing/suit/cardborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUt" = ( -/obj/machinery/message_server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUz" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUB" = ( -/obj/item/weapon/folder/blue_hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUM" = ( -/obj/machinery/vending/event/food/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUQ" = ( -/obj/item/weapon/handcuffs/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rUT" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rVa" = ( -/obj/structure/sign/directions/stairs_up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVh" = ( -/obj/item/clothing/head/tesh_hood/standard/purple_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVm" = ( -/obj/structure/bed/chair/sofa/left/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVq" = ( -/obj/item/weapon/circuitboard/mecha/phazon/main, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVB" = ( -/obj/item/weapon/refill_cartridge/autoname/food/sovietvend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVE" = ( -/obj/item/weapon/flame/lighter/zippo/gonzo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVJ" = ( -/obj/item/weapon/material/knife/table/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVK" = ( -/obj/item/clothing/accessory/sweater/keyhole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVM" = ( -/obj/item/clothing/head/beret/solgov/stratcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVQ" = ( -/obj/item/weapon/storage/box/fluff/alva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVR" = ( -/obj/item/clothing/head/beret/solgov/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVU" = ( -/obj/machinery/door/airlock/angled_bay/hatch/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rVX" = ( -/obj/structure/sign/directions/medical/surgery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWf" = ( -/obj/machinery/computer/arcade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWi" = ( -/obj/item/clothing/under/color/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWp" = ( -/obj/machinery/door/airlock/alien/public, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWE" = ( -/obj/item/ammo_magazine/m12gdrum/beanbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWK" = ( -/obj/machinery/gateway{ - dir = 6 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWL" = ( -/obj/item/weapon/grenade/confetti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rWR" = ( -/obj/item/weapon/storage/toolbox/lunchbox/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXe" = ( -/obj/item/integrated_circuit/memory/constant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXf" = ( -/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXg" = ( -/obj/item/weapon/cane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXr" = ( -/obj/item/clothing/under/dress/vneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXy" = ( -/obj/item/weapon/spell/spawner/pulsar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXA" = ( -/obj/item/clothing/head/fedora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXB" = ( -/obj/item/toy/plushie/carp/dragon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXG" = ( -/obj/item/weapon/ore/hydrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXL" = ( -/obj/item/weapon/reagent_containers/food/snacks/clubsandwich, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXN" = ( -/obj/item/clothing/under/shorts/jeans/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rXV" = ( -/mob/living/simple_mob/mechanical/hivebot/support/commander{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rXZ" = ( -/obj/machinery/power/smes/buildable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYb" = ( -/obj/item/clothing/gloves/weddingring/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYh" = ( -/mob/living/simple_mob/animal/synx/scp{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"rYk" = ( -/obj/machinery/button/crematorium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYv" = ( -/obj/item/gunbox/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYy" = ( -/obj/item/weapon/gun/projectile/smartgun/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYI" = ( -/obj/structure/closet/walllocker/emerglocker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYJ" = ( -/obj/item/weapon/gun/projectile/revolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYL" = ( -/obj/item/weapon/dnainjector/h2m, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rYZ" = ( -/obj/item/clothing/suit/hackercost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZf" = ( -/obj/item/weapon/storage/box/glasses/wine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZh" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZm" = ( -/obj/item/clothing/accessory/ribbon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZp" = ( -/obj/item/weapon/circuitboard/mecha/scarab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZu" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZy" = ( -/obj/item/stack/tile/floor/eris/white/brown_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZB" = ( -/obj/item/toy/plushie/borgplushie/drake/jani, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZE" = ( -/obj/item/toy/plushie/snakeplushie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZQ" = ( -/obj/item/device/robotanalyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"rZS" = ( -/obj/item/clothing/head/helmet/space/void/responseteam/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"saa" = ( -/obj/item/clothing/shoes/sandal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"saf" = ( -/obj/item/clothing/suit/storage/toggle/hoodie/fluff/noel_hoodie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sag" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/type901, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sak" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"saY" = ( -/obj/machinery/light/poi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbb" = ( -/obj/structure/table/bench/sifwooden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbd" = ( -/obj/item/rig_module/self_destruct, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbe" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/kvass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbg" = ( -/obj/item/weapon/storage/vore_egg/badrecipe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbk" = ( -/obj/item/seeds/goldappleseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbl" = ( -/mob/living/simple_mob/vore/leopardmander{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sbo" = ( -/obj/machinery/door/blast/multi_tile/three_tile_hor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbv" = ( -/obj/machinery/door/airlock/angled_tgmc/security_glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbD" = ( -/obj/item/clothing/head/hood/winter/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbE" = ( -/obj/structure/sign/graffiti/pisoff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbI" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/clonexadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbN" = ( -/obj/item/weapon/circuitboard/stationalert_engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbP" = ( -/obj/item/stack/tile/floor/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbQ" = ( -/obj/item/clothing/accessory/bowtie/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbS" = ( -/obj/item/weapon/gun/projectile/pistol/toy/n99, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sbY" = ( -/obj/item/seeds/grapeseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sca" = ( -/obj/item/trash/cigbutt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scj" = ( -/obj/item/clothing/suit/armor/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scn" = ( -/obj/mecha/combat/scarab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scq" = ( -/obj/machinery/blackbox_recorder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scr" = ( -/obj/item/weapon/digestion_remains/skull/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scz" = ( -/obj/item/clothing/head/rose_crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scB" = ( -/obj/item/weapon/circuitboard/ntnet_relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scH" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/ssp4_silenced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scN" = ( -/obj/item/integrated_circuit/time/ticker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"scX" = ( -/obj/item/clothing/under/rank/trek/medsci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdj" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdl" = ( -/obj/structure/largecrate/animal/goat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdo" = ( -/obj/machinery/atmospherics/tvalve/mirrored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdq" = ( -/obj/machinery/newscaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdr" = ( -/obj/item/clothing/accessory/permit/drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdu" = ( -/obj/item/weapon/reagent_containers/food/snacks/fruit_slice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdF" = ( -/obj/item/clothing/under/skirt/outfit/plaid_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdG" = ( -/obj/item/weapon/stock_parts/capacitor/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdQ" = ( -/obj/item/rig_module/datajack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdT" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sdW" = ( -/obj/item/ammo_magazine/ammo_box/b10mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seb" = ( -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sec" = ( -/obj/item/weapon/card/id/silver/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seh" = ( -/obj/item/stack/tile/floor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sen" = ( -/obj/item/device/destTagger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seo" = ( -/obj/item/integrated_circuit/arithmetic/addition, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ses" = ( -/obj/item/weapon/refill_cartridge/autoname/drink/bepis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seu" = ( -/obj/item/ammo_casing/a57/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seD" = ( -/obj/item/clothing/under/cohesion/striped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seF" = ( -/obj/item/toy/tennis/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seH" = ( -/obj/item/capture_crystal/skeleton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seI" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/carrotjuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seJ" = ( -/obj/item/clothing/suit/storage/solgov/service/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seQ" = ( -/obj/item/clothing/under/rank/khi/sec/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"seU" = ( -/obj/item/weapon/storage/pouch/holster/full_taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfb" = ( -/obj/item/integrated_circuit/converter/num2text, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfc" = ( -/obj/item/weapon/plastique/seismic/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfd" = ( -/obj/item/ammo_casing/a338/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sff" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfl" = ( -/obj/item/weapon/gun/projectile/heavysniper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfm" = ( -/obj/item/clothing/mask/breath/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfu" = ( -/obj/item/weapon/tool/crowbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfv" = ( -/obj/item/trash/asian_bowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfB" = ( -/obj/structure/barricade/planks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfM" = ( -/obj/item/weapon/grenade/spawnergrenade/spider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfQ" = ( -/obj/item/weapon/flame/lighter/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sfV" = ( -/obj/item/weapon/reagent_containers/food/snacks/syndicake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgm" = ( -/obj/item/clothing/suit/space, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgr" = ( -/obj/item/weapon/storage/belt/fannypack/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgu" = ( -/obj/item/weapon/storage/mre/menu4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgv" = ( -/obj/item/clothing/glasses/monocoole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgx" = ( -/obj/structure/sign/deck3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgB" = ( -/obj/item/tabloid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgG" = ( -/obj/item/clothing/accessory/scarf/christmas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgI" = ( -/obj/item/clothing/under/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgJ" = ( -/mob/living/simple_mob/humanoid/merc/melee{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sgK" = ( -/obj/item/device/perfect_tele/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgL" = ( -/obj/item/weapon/towel/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgV" = ( -/obj/item/flag/catpirate/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sgW" = ( -/obj/item/clothing/under/corp/grayson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shr" = ( -/obj/item/ammo_casing/microbattery/medical/brute, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shu" = ( -/obj/item/weapon/fluff/fidgetspinner/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shw" = ( -/mob/living/simple_mob/mechanical/mining_drone{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"shy" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shz" = ( -/obj/item/weapon/reagent_containers/food/snacks/nt_muffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shC" = ( -/obj/item/integrated_circuit/transfer/pulsedemultiplexer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shG" = ( -/obj/item/clothing/under/saare/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"shQ" = ( -/obj/machinery/door/airlock/maintenance/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sia" = ( -/obj/item/weapon/coilgun_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sii" = ( -/obj/item/clothing/suit/armor/pcarrier/medium/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sij" = ( -/obj/structure/closet/secure_closet/wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"siw" = ( -/obj/item/ammo_magazine/m10mm/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"siy" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"siJ" = ( -/obj/item/mecha_parts/mecha_equipment/tool/jetpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"siL" = ( -/obj/item/device/pda/lawyer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjc" = ( -/obj/item/slime_extract/oil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjg" = ( -/obj/item/ammo_magazine/m9mmt/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjk" = ( -/obj/structure/prop/alien/computer/camera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjp" = ( -/obj/item/weapon/gun/projectile/dartgun/tranq, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjq" = ( -/obj/item/clothing/suit/kimono/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjs" = ( -/obj/item/ammo_casing/a357/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjt" = ( -/obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjw" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/psc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjy" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjB" = ( -/mob/living/simple_mob/animal/giant_spider/carrier/recursive{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sjC" = ( -/obj/item/clothing/glasses/material/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjH" = ( -/obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjI" = ( -/obj/item/weapon/reagent_containers/food/snacks/butterscotch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sjR" = ( -/obj/item/clothing/ears/skrell/cloth_male/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skh" = ( -/obj/item/clothing/suit/barding/mason, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skl" = ( -/obj/machinery/power/shield_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skm" = ( -/obj/item/clothing/under/det/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sko" = ( -/obj/item/weapon/pen/crayon/marker/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skt" = ( -/obj/machinery/door/blast/gate/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skA" = ( -/obj/item/weapon/book/manual/tesla_engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skF" = ( -/mob/living/simple_mob/animal/giant_spider/frost/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"skL" = ( -/obj/item/weapon/virusdish/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skM" = ( -/obj/item/weapon/stock_parts/micro_laser/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skR" = ( -/obj/item/clothing/suit/space/void/atmos/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"skS" = ( -/mob/living/simple_mob/animal/sif/sakimm, -/turf/simulated/floor/atoll, -/area/survivalpod) -"skY" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/boda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slc" = ( -/obj/item/clothing/under/fluff/romanarmor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slf" = ( -/obj/item/weapon/pipe_dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slm" = ( -/obj/machinery/door/firedoor/border_only, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sln" = ( -/obj/item/seeds/amanitamycelium, -/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slo" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slw" = ( -/obj/item/integrated_circuit/list/append, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sly" = ( -/obj/item/clothing/under/color/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slC" = ( -/obj/item/integrated_circuit/transfer/pulsedemultiplexer/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slM" = ( -/obj/item/clothing/head/pin/bow/big, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"slV" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "3" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sma" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/chaos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smh" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, -/turf/simulated/floor/atoll, -/area/survivalpod) -"smk" = ( -/obj/item/clothing/suit/space/anomaly/heat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smB" = ( -/obj/item/weapon/soap/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smH" = ( -/obj/item/weapon/card/id/civilian/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smI" = ( -/obj/item/weapon/storage/pill_bottle/zoom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smN" = ( -/obj/item/clothing/under/dress/sundress_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smX" = ( -/obj/item/weapon/gun/magnetic/railgun/heater/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smY" = ( -/obj/item/ammo_casing/a9mm/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"smZ" = ( -/obj/item/weapon/dice/d100, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snc" = ( -/obj/machinery/power/port_gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snd" = ( -/obj/item/weapon/bikehorn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sno" = ( -/obj/item/weapon/book/manual/robotics_cyborgs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snw" = ( -/obj/item/device/encryptionkey/headset_medsci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snx" = ( -/obj/item/stack/tile/floor/eris/steel/bar_light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snD" = ( -/obj/machinery/recycling/stamper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snH" = ( -/obj/structure/closet/crate/laundry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snL" = ( -/obj/item/integrated_circuit/converter/hsv2hex, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snM" = ( -/obj/machinery/atmospherics/binary/pump/aux/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snO" = ( -/obj/item/weapon/dice/d12, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snT" = ( -/obj/item/mecha_parts/mecha_equipment/repair_droid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"snU" = ( -/obj/item/ammo_casing/a145/highvel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soc" = ( -/obj/item/stack/nanopaste/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sog" = ( -/obj/item/toy/stickhorse, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sok" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"som" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soq" = ( -/obj/item/weapon/reagent_containers/food/snacks/breakfast_wrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sot" = ( -/mob/living/simple_mob/animal/space/alien/hunterlisk{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"soN" = ( -/obj/item/toy/chewtoy/tall/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soP" = ( -/obj/structure/bed/chair/bay/chair/padded/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soQ" = ( -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soS" = ( -/obj/item/clothing/suit/storage/vest/officer/fluff/jessica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soU" = ( -/obj/item/clothing/mask/luchador/tecnicos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soV" = ( -/obj/item/weapon/circuitboard/stationalert_all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soY" = ( -/obj/structure/bed/chair/comfy/rounded/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"soZ" = ( -/obj/item/weapon/gun/projectile/ppk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sph" = ( -/obj/item/weapon/material/twohanded/fireaxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spj" = ( -/obj/item/clothing/under/rank/warden/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spm" = ( -/obj/item/weapon/gun/projectile/garand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spD" = ( -/obj/item/clothing/head/beret/solgov/fleet/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spO" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spS" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spT" = ( -/obj/machinery/atmospherics/omni/mixer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spX" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"spY" = ( -/obj/item/weapon/gun/energy/laser/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sql" = ( -/obj/structure/sign/levels/eva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqn" = ( -/obj/item/weapon/card/id/guest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqt" = ( -/obj/item/integrated_circuit/transfer/multiplexer/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqB" = ( -/mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sqD" = ( -/obj/structure/ghost_pod/ghost_activated/swarm_drone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqI" = ( -/obj/item/clothing/mask/muzzle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqJ" = ( -/obj/item/weapon/implanter/reagent_generator/evian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqP" = ( -/obj/item/clothing/accessory/armor/armguards/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqQ" = ( -/obj/skeleton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sqS" = ( -/obj/item/slime_extract/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srb" = ( -/obj/item/clothing/suit/space/void/makeshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"src" = ( -/obj/item/ammo_magazine/ammo_box/b45/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srg" = ( -/obj/item/seeds/hardlightseed/typesx, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srh" = ( -/obj/item/weapon/reagent_containers/food/snacks/riztizkzi_sea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srC" = ( -/obj/item/clothing/head/shiny_hood/closed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srG" = ( -/obj/item/mecha_parts/part/phazon_right_arm, -/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srI" = ( -/obj/item/weapon/corncob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srK" = ( -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srM" = ( -/obj/item/weapon/reagent_containers/food/snacks/tgmc_mre_component, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"srX" = ( -/obj/item/clothing/under/pants/ripped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssb" = ( -/obj/item/clothing/suit/storage/vest/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sse" = ( -/obj/item/weapon/circuitboard/circuit_imprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssi" = ( -/mob/living/simple_mob/animal/passive/bird/black_bird, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ssj" = ( -/obj/item/weapon/storage/belt/utility/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sso" = ( -/obj/item/clothing/head/tesh_hood/standard/brown_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssq" = ( -/obj/item/weapon/reagent_containers/glass/bottle/sorbitol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssu" = ( -/obj/item/weapon/reagent_containers/syringe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssz" = ( -/obj/machinery/gateway{ - dir = 9 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssE" = ( -/obj/machinery/door/airlock/glass_external/public, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssR" = ( -/obj/item/weapon/grenade/shooter/energy/tesla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ssW" = ( -/obj/item/clothing/under/wednesday, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"std" = ( -/obj/item/weapon/implanter/reagent_generator/eldi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sth" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/gondola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"stm" = ( -/obj/item/weapon/aiModule/purge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"stq" = ( -/obj/item/broken_device/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"str" = ( -/obj/item/ammo_magazine/s357/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"stD" = ( -/obj/item/modular_computer/console/preset/merchant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"stL" = ( -/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"stS" = ( -/obj/item/clothing/suit/armor/tdome/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sue" = ( -/obj/machinery/door/blast/shutters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suj" = ( -/obj/item/slime_extract/cerulean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suk" = ( -/obj/item/rig_module/vision/sechud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sul" = ( -/obj/item/weapon/pack/spaceball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suw" = ( -/obj/item/weapon/folder/white_rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suy" = ( -/obj/item/seeds/glowshroom, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suB" = ( -/obj/machinery/shield_gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suK" = ( -/obj/item/clothing/mask/chewable/candy/lolli, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suQ" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suT" = ( -/obj/machinery/vending, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"suU" = ( -/obj/item/ammo_magazine/fal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sve" = ( -/obj/item/weapon/bone/skull, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svm" = ( -/obj/item/clothing/accessory/solgov/department/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svp" = ( -/obj/item/clothing/under/swimsuit/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svq" = ( -/obj/item/slimepotion/sapience, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svr" = ( -/obj/item/weapon/storage/backpack/ert/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svA" = ( -/obj/item/clothing/accessory/fluff/wolf_erikson_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svI" = ( -/obj/item/weapon/bedsheet/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svU" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/beercan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svV" = ( -/obj/item/fulton_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svX" = ( -/obj/item/clothing/under/rank/roboticist/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"svZ" = ( -/obj/item/weapon/gun/energy/taser/mounted/augment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swe" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/donut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swz" = ( -/obj/item/weapon/card/id/event/fluff/amaya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swC" = ( -/obj/item/clothing/head/beret/solgov/sifguard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swD" = ( -/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swJ" = ( -/obj/machinery/atmospherics/portables_connector/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swN" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swP" = ( -/obj/item/weapon/circuitboard/telecomms/relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swS" = ( -/obj/structure/sign/department/medbay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"swV" = ( -/obj/item/device/tvcamera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxc" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cream, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxm" = ( -/obj/item/weapon/cell/secborg/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxo" = ( -/obj/machinery/door/airlock/alien/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxq" = ( -/obj/item/ammo_magazine/clip/c9mm/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxr" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxC" = ( -/obj/item/clothing/accessory/storage/webbing/combatpilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxF" = ( -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxS" = ( -/obj/item/clothing/gloves/gauntlets/rig/ch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sxY" = ( -/obj/item/ammo_magazine/mp5mag/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syd" = ( -/obj/item/clothing/under/pants/baggy/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syl" = ( -/obj/item/toy/mecha/mauler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syn" = ( -/obj/item/weapon/storage/belt/fannypack/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syo" = ( -/obj/item/ammo_magazine/akm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syp" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syA" = ( -/obj/item/weapon/reagent_containers/food/snacks/fruitbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syB" = ( -/mob/living/simple_mob/humanoid/pirate/machete/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"syE" = ( -/obj/item/weapon/digestion_remains/skull/unknown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syH" = ( -/mob/living/simple_mob/horror/Rickey{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"syI" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syK" = ( -/obj/item/weapon/secbot_assembly/edCLN_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syQ" = ( -/obj/item/organ/internal/heart/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"syV" = ( -/obj/item/instrument/trombone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szd" = ( -/obj/item/ammo_casing/a12g/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szf" = ( -/obj/item/clothing/head/helmet/space/vox/civ/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szw" = ( -/obj/item/clothing/head/chicken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szH" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szJ" = ( -/obj/machinery/atmospherics/unary/heater, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szP" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szS" = ( -/obj/item/clothing/accessory/jacket/charcoal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"szT" = ( -/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sAi" = ( -/mob/living/simple_mob/vore/alienanimals/skeleton{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sAj" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sAs" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/charcoal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sAv" = ( -/obj/item/clothing/accessory/holster/armpit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sAC" = ( -/obj/machinery/vending/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sAF" = ( -/obj/item/weapon/refill_cartridge/autoname/food/snack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sAK" = ( -/obj/structure/sign/levels/library, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBd" = ( -/obj/item/weapon/melee/baton/shocker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBf" = ( -/obj/item/clothing/under/wedding/whitegown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBh" = ( -/obj/item/clothing/gloves/combat/fluff/zara_arm_enhancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBo" = ( -/obj/item/weapon/ore/uranium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBr" = ( -/obj/item/clothing/head/beret/engineering/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBs" = ( -/obj/item/toy/figure/leadbandit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBu" = ( -/obj/item/weapon/grenade/shooter/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBw" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whiteblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBA" = ( -/obj/item/clothing/under/overalls/sleek, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBB" = ( -/obj/structure/prop/dominator/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBG" = ( -/obj/item/clothing/ears/skrell/cloth_male/lightblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBP" = ( -/obj/item/clothing/shoes/circuitry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBR" = ( -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sBT" = ( -/obj/item/clothing/suit/storage/vest/hoscoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBV" = ( -/obj/item/weapon/reagent_containers/food/snacks/roburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sBY" = ( -/obj/item/device/encryptionkey/headset_com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCa" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCf" = ( -/obj/item/weapon/ore/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCi" = ( -/obj/item/ammo_magazine/clip/c545/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCj" = ( -/obj/structure/table/bench/marble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCk" = ( -/obj/structure/closet/grave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCq" = ( -/obj/item/slime_extract/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCu" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/sharkchunk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCw" = ( -/obj/item/clothing/accessory/collar/holo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCy" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/chroniclesofmargatavol1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCz" = ( -/obj/item/weapon/stamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCH" = ( -/obj/item/weapon/material/sword/katana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCI" = ( -/obj/item/integrated_circuit/converter/abs_to_rel_coords, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sCN" = ( -/mob/living/bot/floorbot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sCX" = ( -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDc" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDf" = ( -/obj/item/weapon/gun/launcher/pneumatic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDi" = ( -/obj/item/weapon/melee/changeling/claw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDp" = ( -/obj/item/clothing/under/rank/nursesuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDv" = ( -/obj/structure/prop/war/tgmc_missile_rack/napalm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDw" = ( -/obj/item/stack/tile/floor/eris/steel/cyancorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDB" = ( -/obj/structure/filingcabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDE" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/fluff/alva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDH" = ( -/obj/item/clothing/gloves/ring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDV" = ( -/obj/item/clothing/accessory/solgov/rank/marine/officer/o2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sDW" = ( -/obj/machinery/door_timer/tactical_pet_storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEh" = ( -/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEw" = ( -/obj/item/stack/material/bronze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sED" = ( -/obj/item/clothing/glasses/sunglasses/aviator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEF" = ( -/obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEI" = ( -/obj/machinery/gear_dispenser/custom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEL" = ( -/obj/item/weapon/storage/backpack/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sEW" = ( -/obj/machinery/vending/wardrobe/janidrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFm" = ( -/obj/item/weapon/reagent_containers/food/snacks/omurice/face, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFn" = ( -/obj/structure/loot_pile/surface/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFo" = ( -/obj/item/toy/tennis/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFs" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/armblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFt" = ( -/obj/item/weapon/gun/energy/mouseray/giantrat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFv" = ( -/obj/machinery/power/singularity_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFC" = ( -/obj/item/seeds/celery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFD" = ( -/obj/machinery/door/airlock/voidcraft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFJ" = ( -/obj/item/weapon/kitchenknife/tacknife/unathiknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFR" = ( -/obj/item/clothing/suit/armor/pcarrier/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFS" = ( -/obj/item/weapon/storage/toolbox/lunchbox/cti/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sFZ" = ( -/obj/item/weapon/spell/flame_tongue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGe" = ( -/mob/living/simple_mob/mechanical/combat_drone/lesser{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sGg" = ( -/obj/item/weapon/storage/vore_egg/human{ - desc = s - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGl" = ( -/obj/item/clothing/head/fluff/headbando/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGm" = ( -/obj/item/weapon/card/id/gateway/snowfield/class3M, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGq" = ( -/obj/item/organ/internal/xenos/eggsac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGs" = ( -/obj/item/organ/internal/brain/shadekin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGy" = ( -/obj/item/weapon/storage/backpack/dufflebag/cratebooze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGB" = ( -/obj/item/clothing/accessory/badge/corporate_tag/wardtaka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGC" = ( -/obj/item/clothing/under/rank/medical/scrubs/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGF" = ( -/obj/structure/loot_pile/mecha/deathripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGH" = ( -/obj/item/weapon/disk/limb/cyber_beast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sGO" = ( -/obj/item/stack/material/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHd" = ( -/obj/item/weapon/computer_hardware/processor_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHi" = ( -/obj/item/weapon/reagent_containers/pill/happy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHk" = ( -/obj/item/weapon/storage/backpack/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHl" = ( -/obj/item/clothing/suit/storage/explorer/engineering/command/fluff/vasharr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHt" = ( -/obj/item/clothing/under/yw/victsuit/redblk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHy" = ( -/obj/item/clothing/head/helmet/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHz" = ( -/obj/item/clothing/head/hood/winter/engineering/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHB" = ( -/obj/item/device/integrated_circuit_printer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHC" = ( -/obj/item/clothing/ears/earring/stud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHE" = ( -/obj/item/bodybag/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHO" = ( -/obj/item/pizzabox/margherita, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHQ" = ( -/obj/item/organ/internal/heart/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHU" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sHW" = ( -/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sId" = ( -/obj/item/clothing/accessory/poncho/thermal/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIe" = ( -/obj/item/weapon/fluff/fidgetspinner/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIh" = ( -/obj/item/instrument/trumpet/spectral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIi" = ( -/obj/item/clothing/suit/kimono, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIm" = ( -/obj/item/weapon/circuitboard/papershredder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIq" = ( -/obj/item/weapon/storage/box/fluff/eryn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIt" = ( -/obj/structure/sign/signnew/explosives, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIx" = ( -/obj/item/weapon/reagent_containers/blood/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIF" = ( -/obj/structure/bed/chair/sofa/left/purp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIM" = ( -/obj/item/seeds/tobaccoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIQ" = ( -/obj/item/organ/internal/lungs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIX" = ( -/obj/item/weapon/disk/limb/veymed/diona, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sIZ" = ( -/obj/item/weapon/storage/box/masks/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJe" = ( -/obj/item/seeds/reishimycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJh" = ( -/obj/item/clothing/shoes/knight/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJi" = ( -/obj/item/weapon/storage/box/fluff/archermaximus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJp" = ( -/obj/item/weapon/paper/awaygate/carpfarm/suicide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJy" = ( -/obj/item/weapon/pickaxe/one_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJz" = ( -/obj/item/ammo_magazine/m45/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJA" = ( -/obj/machinery/shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJO" = ( -/obj/item/ammo_casing/a9x39/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sJU" = ( -/obj/item/weapon/a_gift/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKc" = ( -/obj/machinery/vending/loadout/loadout_misc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKe" = ( -/obj/item/weapon/storage/secure/briefcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKx" = ( -/obj/item/weapon/storage/box/bodybags, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKC" = ( -/obj/item/clothing/under/pants, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKI" = ( -/obj/item/weapon/storage/box/fluff/Keith_Winters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sKT" = ( -/obj/item/ammo_magazine/s38/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLa" = ( -/obj/item/device/laser_pointer/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLe" = ( -/obj/item/weapon/light/bulb/smol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLp" = ( -/obj/item/clothing/gloves/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLq" = ( -/obj/item/clothing/under/color/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLs" = ( -/obj/item/clothing/suit/storage/hooded/toggle/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLD" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLE" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/akm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sLO" = ( -/mob/living/simple_mob/animal/wolf{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sMa" = ( -/obj/item/sniper_rifle_part, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMb" = ( -/obj/item/clothing/gloves/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMc" = ( -/obj/item/clothing/suit/bio_suit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMe" = ( -/obj/item/stack/tile/floor/eris/steel/techfloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMr" = ( -/mob/living/simple_mob/mechanical/infectionbot{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sMv" = ( -/obj/item/weapon/gun/energy/sizegun/not_advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMx" = ( -/obj/item/clothing/shoes/magboots/fluff/zara_leg_enhancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMD" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMJ" = ( -/obj/structure/fans/hardlight/colorable/abductor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMP" = ( -/obj/item/clothing/under/teshari/smock/blackutilitysmock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sMY" = ( -/obj/machinery/computer/transhuman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNj" = ( -/obj/structure/largecrate/animal/mulebot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNm" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNn" = ( -/obj/item/clothing/shoes/boots/winter/christmasred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNx" = ( -/obj/structure/marker_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNA" = ( -/obj/item/clothing/under/rank/head_of_security/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNC" = ( -/obj/item/weapon/reagent_containers/food/snacks/antball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNG" = ( -/obj/item/weapon/bedsheet/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNI" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/david_3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNK" = ( -/obj/item/weapon/circuitboard/pipelayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNM" = ( -/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNP" = ( -/obj/item/mecha_parts/component/hull/durable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNY" = ( -/obj/machinery/telecomms/hub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sNZ" = ( -/obj/item/device/radio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOc" = ( -/obj/item/organ/internal/augment/bioaugment/sprint_enhance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOg" = ( -/obj/item/clothing/suit/storage/explorer/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOj" = ( -/obj/structure/bonfire/permanent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOo" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/gynorovir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOI" = ( -/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sOY" = ( -/obj/item/clothing/suit/armor/pcarrier/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPa" = ( -/obj/item/clothing/head/helmet/space/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPe" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/osteodaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPg" = ( -/obj/item/clothing/under/stripeddungarees, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPr" = ( -/obj/item/clothing/under/fluff/excess, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPt" = ( -/mob/living/simple_mob/humanoid/pirate/shield/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sPu" = ( -/obj/item/clothing/shoes/laceup/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPx" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/candybar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPJ" = ( -/obj/item/weapon/storage/box/handcuffs/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPN" = ( -/obj/structure/prop/war/sentry_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sPS" = ( -/obj/item/weapon/weldingtool/electric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQb" = ( -/obj/structure/closet/secure_closet/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQj" = ( -/obj/item/clothing/under/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQl" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQn" = ( -/obj/item/weapon/pinpointer/nukeop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQs" = ( -/obj/item/clothing/suit/armor/combat/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQB" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQO" = ( -/obj/item/clothing/accessory/jacket/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQU" = ( -/obj/structure/portal_event/resize/preset_shrink_fifty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQW" = ( -/obj/item/clothing/under/color/prison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sQX" = ( -/obj/item/weapon/material/butterflyconstruction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRb" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRe" = ( -/obj/item/weapon/storage/fancy/vials, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRn" = ( -/obj/machinery/gateway{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRo" = ( -/obj/structure/prop/war/tgmc_missile/banshee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRq" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfishremains, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRv" = ( -/obj/machinery/vending/wardrobe/hydrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRz" = ( -/obj/item/clothing/accessory/collar/pink/fluff/warning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRC" = ( -/obj/item/weapon/storage/backpack/sport/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRH" = ( -/obj/structure/largecrate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRM" = ( -/obj/structure/cable/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRS" = ( -/obj/item/weapon/storage/bag/circuits/mini/arithmetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRT" = ( -/obj/item/instrument/harmonica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRX" = ( -/obj/item/weapon/reagent_containers/glass/bottle/bicaridine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sRY" = ( -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSd" = ( -/obj/item/clothing/suit/space/vox/civ/engineer/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSg" = ( -/obj/structure/closet/secure_closet/medical_wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSC" = ( -/obj/item/weapon/circuitboard/mecha/imperion/targeting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSE" = ( -/obj/mecha/combat/fighter/gunpod/recon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSH" = ( -/obj/item/weapon/storage/fancy/cigar/cohiba, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSI" = ( -/obj/item/weapon/arrow/energy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sST" = ( -/obj/item/clothing/suit/storage/toggle/labcoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSV" = ( -/obj/structure/barricade/cutout/free_antag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sSW" = ( -/obj/structure/bed/chair/sofa/corner/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTm" = ( -/obj/item/clothing/under/solgov/pt/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTn" = ( -/obj/item/clothing/head/helmet/space/void/refurb/marine/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTu" = ( -/obj/item/toy/plushie/lizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTy" = ( -/obj/structure/sign/department/cargo_dock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTJ" = ( -/obj/item/clothing/head/justice/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTU" = ( -/obj/item/clothing/under/suit_jacket/green/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTX" = ( -/obj/machinery/door/airlock/glass_external, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sTY" = ( -/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/blob{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sTZ" = ( -/obj/item/clothing/mask/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUf" = ( -/obj/item/weapon/reagent_containers/food/snacks/slimesoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUn" = ( -/obj/item/toy/nuke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUp" = ( -/obj/item/weapon/spell/spawner/destablize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUq" = ( -/obj/item/weapon/material/twohanded/riding_crop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUr" = ( -/obj/structure/closet/l3closet/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUt" = ( -/obj/structure/simple_door/resin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUv" = ( -/mob/living/simple_mob/humanoid/pirate/mate/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sUz" = ( -/obj/item/clothing/gloves/ring/material/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sUP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVb" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVd" = ( -/obj/item/weapon/dnainjector/antideaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVn" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot/rigged, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVq" = ( -/obj/item/clothing/glasses/meson/prescription/tajblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVs" = ( -/obj/item/clothing/head/helmet/ert/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVw" = ( -/mob/living/simple_mob/animal/passive/fish/icebass, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"sVA" = ( -/obj/item/ammo_casing/a12g/stunshell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVI" = ( -/obj/item/clothing/under/suit_jacket/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVJ" = ( -/obj/item/clothing/under/rank/cargo/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVL" = ( -/obj/item/weapon/mine/kick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sVY" = ( -/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWb" = ( -/obj/item/rig_module/protean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWk" = ( -/obj/item/weapon/implanter/exile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWl" = ( -/obj/item/weapon/firework_star/weather/light_snow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWo" = ( -/obj/item/weapon/stock_parts/subspace/treatment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWr" = ( -/obj/item/clothing/suit/bio_suit/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWs" = ( -/obj/item/weapon/gun/energy/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWB" = ( -/obj/item/weapon/extinguisher/atmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWE" = ( -/obj/item/clothing/under/permit/natureist_talisman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWF" = ( -/obj/item/weapon/material/fishing_rod/modern/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWJ" = ( -/obj/structure/bed/chair/bay/chair/padded/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWK" = ( -/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWR" = ( -/obj/item/weapon/reagent_containers/blood/synthplas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWT" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/elite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWU" = ( -/obj/item/ammo_casing/a12g/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWV" = ( -/obj/machinery/chemical_dispenser/biochemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sWZ" = ( -/obj/item/weapon/gun/energy/pummeler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXf" = ( -/mob/living/simple_mob/vore/aggressive/mimic/floor{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"sXj" = ( -/obj/structure/bed/chair/office, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXu" = ( -/obj/item/toy/plushie/teshari/strix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXE" = ( -/obj/item/weapon/storage/backpack/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXF" = ( -/obj/item/stack/tile/floor/eris/dark/techfloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXG" = ( -/obj/item/weapon/reagent_containers/food/snacks/bibimbap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXM" = ( -/obj/item/weapon/firework_star/weather/hail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXQ" = ( -/obj/item/weapon/reagent_containers/syringe/inaprovaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sXV" = ( -/obj/item/weapon/storage/pouch/holster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYa" = ( -/obj/item/clothing/under/gladiator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYj" = ( -/obj/item/toy/mecha/odysseus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYl" = ( -/obj/item/clothing/head/beret/amara_beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYp" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYs" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYu" = ( -/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/c, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYw" = ( -/obj/item/weapon/gun/energy/locked/phasegun/rifle/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYz" = ( -/obj/item/weapon/reagent_containers/syringe/antitoxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYG" = ( -/obj/item/weapon/implanter/reagent_generator/natalya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYI" = ( -/obj/item/clothing/suit/storage/toggle/leather_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYJ" = ( -/obj/item/weapon/reagent_containers/food/condiment/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYS" = ( -/obj/machinery/atmospherics/binary/algae_farm/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sYU" = ( -/obj/item/weapon/storage/mrebag/menu10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZf" = ( -/obj/item/clothing/head/helmet/space/void/medical/alt/tesh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZg" = ( -/obj/item/clothing/under/dress/dress_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZi" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZn" = ( -/obj/item/weapon/rig/industrial/old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZs" = ( -/obj/item/toy/plushie/foxbear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZt" = ( -/obj/item/weapon/book/manual/engineering_guide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZw" = ( -/obj/item/clothing/under/skirt/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZz" = ( -/obj/machinery/door/airlock/glass_medical/polarized, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZC" = ( -/obj/item/clothing/ears/earring/dangle/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZE" = ( -/obj/item/stamp/hephaestus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZM" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"sZQ" = ( -/obj/machinery/hyperpad/centre, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"taf" = ( -/obj/item/weapon/circuitboard/turbine_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tai" = ( -/mob/living/simple_mob/vore/catgirl{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"taj" = ( -/obj/item/trash/chips, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tap" = ( -/obj/machinery/smartfridge/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tas" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"taE" = ( -/obj/item/toy/plushie/squid/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"taW" = ( -/obj/item/clothing/suit/space/void/security/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"taZ" = ( -/obj/item/clothing/mask/smokable/cigarette/cigar/havana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbk" = ( -/obj/item/clothing/suit/storage/fluff/jacket/special_forces, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbo" = ( -/mob/living/simple_mob/mechanical/mecha/ripley{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tbv" = ( -/obj/item/weapon/book/manual/evaguide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tby" = ( -/obj/item/weapon/tank/phoron/welded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbA" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbC" = ( -/obj/machinery/door/airlock/glass_security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbD" = ( -/obj/item/clothing/suit/storage/vest/heavy/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbE" = ( -/obj/machinery/replicator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbH" = ( -/obj/item/clothing/accessory/armband/med/cross, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbK" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbL" = ( -/obj/item/ammo_magazine/ammo_box/b45/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbN" = ( -/obj/machinery/door/airlock/multi_tile/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbR" = ( -/obj/item/weapon/beartrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbS" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbT" = ( -/obj/item/clothing/accessory/solgov/department/engineering/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbV" = ( -/obj/item/clothing/head/beret/solgov/eio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tbY" = ( -/obj/item/stack/tile/floor/eris/steel/golden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tch" = ( -/obj/item/weapon/reagent_containers/food/snacks/omurice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcm" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/buzz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcr" = ( -/obj/structure/sign/bigname/seg_4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcu" = ( -/obj/item/weapon/rig/light/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcw" = ( -/obj/structure/closet/shuttleemerg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcB" = ( -/obj/item/device/assembly/electronic_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcG" = ( -/obj/item/clothing/under/rank/warden/navyblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcN" = ( -/obj/item/weapon/reagent_containers/blood/prelabeled/AMinus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcS" = ( -/obj/item/weapon/reagent_containers/food/snacks/tossedsalad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcY" = ( -/obj/item/weapon/storage/backpack/virology, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tcZ" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdi" = ( -/obj/item/weapon/light/bulb/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdj" = ( -/obj/item/material_dust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdm" = ( -/obj/structure/bed/chair/comfy/rounded/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdn" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdo" = ( -/obj/item/instrument/saxophone/spectral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdq" = ( -/obj/item/clothing/head/centhat/fluff/harmhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tds" = ( -/obj/item/weapon/stock_parts/capacitor/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdy" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdF" = ( -/obj/item/weapon/stamp/centcomm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdG" = ( -/obj/machinery/door/airlock/angled_tgmc/prep, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdJ" = ( -/obj/item/weapon/flame/lighter/zippo/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdR" = ( -/obj/item/trash/liquidprotein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdV" = ( -/obj/item/weapon/implant/organ/pelvic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdY" = ( -/obj/item/surplus_voucher/sci, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tdZ" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teb" = ( -/obj/structure/sign/levels/dock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ted" = ( -/obj/item/stack/material/sandstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tei" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tej" = ( -/obj/item/seeds/glowshroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tek" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tem" = ( -/obj/item/clothing/mask/gas/half, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teo" = ( -/obj/item/clothing/under/dress/sailordress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ter" = ( -/obj/structure/table/rack/gun_rack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tey" = ( -/obj/item/clothing/head/helmet/space/void/refurb/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tez" = ( -/obj/item/weapon/spell/projectile/force_missile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teD" = ( -/obj/machinery/organ_printer/flesh/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teF" = ( -/obj/item/capture_crystal/bigdragon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teH" = ( -/obj/item/clothing/head/helmet/gladiator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teM" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "29" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teT" = ( -/obj/item/clothing/shoes/boots/jackboots/fluff/jiao_boots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teU" = ( -/obj/item/seeds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"teZ" = ( -/obj/item/clothing/suit/storage/hazardvest/yw/brigphysician, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfc" = ( -/mob/living/simple_mob/construct/wraith{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tfi" = ( -/obj/item/weapon/storage/box/beakers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfl" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfo" = ( -/obj/machinery/vending/snack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tft" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfw" = ( -/obj/item/ammo_magazine/m2024/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfy" = ( -/obj/machinery/air_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfE" = ( -/obj/item/clothing/suit/storage/trek/ds9/admiral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfK" = ( -/obj/item/clothing/under/cheongsam/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfM" = ( -/obj/item/clothing/head/helmet/space/santahat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tfO" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/dark_retrowave, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgd" = ( -/obj/item/weapon/card/id/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgk" = ( -/obj/item/weapon/spell/modifier/mend_life, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgp" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgA" = ( -/obj/item/clothing/under/color/fjumpsuit/darkredf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgB" = ( -/obj/item/weapon/cell/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgG" = ( -/obj/item/clothing/under/blackngold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgJ" = ( -/obj/item/weapon/tank/jetpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgU" = ( -/obj/item/clothing/under/dress/dress_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tgW" = ( -/obj/machinery/teleport/hub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thf" = ( -/obj/item/clothing/under/teshari/undercoat/standard/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thh" = ( -/obj/item/ammo_magazine/s45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thm" = ( -/obj/item/trash/lunacakewrap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thy" = ( -/obj/item/clothing/gloves/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thE" = ( -/obj/item/clothing/accessory/armor/armorplate/blast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thN" = ( -/obj/item/toy/plushie/therapy/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thQ" = ( -/obj/item/clothing/under/color/lightpurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thR" = ( -/obj/structure/bed/chair/bay/comfy/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thT" = ( -/obj/item/ammo_casing/a5mmcaseless/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"thU" = ( -/obj/structure/sign/department/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tin" = ( -/mob/living/silicon/robot/syndicate/combat_medic, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tir" = ( -/obj/item/clothing/head/bandana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiw" = ( -/obj/structure/prop/transmitter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiy" = ( -/obj/machinery/door/airlock/angled_bay/ascent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiC" = ( -/obj/item/clothing/under/rank/pilot1/no_webbing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiP" = ( -/obj/item/weapon/melee/baton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiR" = ( -/obj/item/clothing/head/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiS" = ( -/obj/structure/bed/chair/e_chair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiU" = ( -/obj/item/weapon/dnainjector/runfast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tiV" = ( -/obj/structure/fence/corner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjb" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/caviar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjh" = ( -/obj/machinery/telecomms/broadcaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjs" = ( -/obj/item/device/mapping_unit/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjz" = ( -/obj/item/weapon/gun/projectile/revolvingrifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjP" = ( -/obj/item/ammo_magazine/mfoam_dart/pistol/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjR" = ( -/mob/living/simple_mob/animal/space/alien/hunterling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tjS" = ( -/obj/item/stack/sandbags, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjV" = ( -/obj/item/weapon/aliencoin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tjZ" = ( -/obj/item/slime_extract/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tke" = ( -/obj/item/clothing/gloves/ring/material/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkh" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tkx" = ( -/obj/item/weapon/material/shard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkB" = ( -/obj/machinery/door/unpowered/shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkF" = ( -/obj/item/weapon/gun/magnetic/fuelrod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkH" = ( -/obj/item/weapon/ore/lead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkJ" = ( -/obj/item/clothing/suit/chococoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkQ" = ( -/obj/item/trash/brainzsnaxred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tkU" = ( -/obj/item/clothing/accessory/holster/leg/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tla" = ( -/obj/item/weapon/circuitboard/processor/monkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlf" = ( -/obj/machinery/atmospherics/trinary/mixer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlg" = ( -/obj/machinery/button/remote/emitter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlj" = ( -/obj/structure/prop/rock/crystal_dust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlq" = ( -/obj/machinery/gear_dispenser/suit_fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlr" = ( -/obj/structure/sign/directions/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tly" = ( -/obj/structure/closet/secure_closet/egg/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlD" = ( -/obj/item/clothing/suit/storage/toggle/supply_dep_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlR" = ( -/obj/item/clothing/suit/space/void/engineering/construction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tlW" = ( -/obj/structure/table/bench/wooden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tma" = ( -/obj/item/clothing/accessory/medal/silver/unity/tabiranth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmb" = ( -/obj/item/weapon/computer_hardware/tesla_link, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmg" = ( -/obj/item/clothing/suit/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmm" = ( -/obj/structure/symbol/gu, -/turf/simulated/fitness, -/area/survivalpod) -"tmo" = ( -/obj/item/weapon/circuitboard/telecomms/processor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmA" = ( -/obj/item/trash/sosjerky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmD" = ( -/obj/item/weapon/reagent_containers/food/snacks/no_raisin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmP" = ( -/obj/item/weapon/storage/backpack/dufflebag/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmQ" = ( -/obj/item/clothing/shoes/boots/cowboy/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tmR" = ( -/obj/item/clothing/suit/space/void/engineering/zena, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnm" = ( -/obj/item/capture_crystal/adg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tno" = ( -/obj/item/clothing/suit/storage/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnw" = ( -/obj/item/clothing/shoes/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnA" = ( -/obj/item/mecha_parts/part/scarab_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnH" = ( -/obj/item/slime_extract/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnI" = ( -/obj/item/clothing/mask/synthfacemask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/teriyaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnK" = ( -/obj/item/weapon/circuitboard/machine/power_compressor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnN" = ( -/mob/living/simple_mob/mobs_monsters/clowns/thicc{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tnO" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnP" = ( -/obj/item/weapon/reagent_containers/food/snacks/eggplantparm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnR" = ( -/obj/item/weapon/gun/energy/xray/swarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnS" = ( -/obj/item/weapon/aiModule/paladin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnT" = ( -/obj/machinery/door/airlock/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tnW" = ( -/obj/item/weapon/storage/box/monkeycubes/farwacubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tom" = ( -/obj/item/robot_parts/chest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tos" = ( -/obj/structure/barricade/cutout/viva, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tow" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toz" = ( -/obj/structure/salvageable/server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toA" = ( -/obj/item/clothing/suit/armor/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toD" = ( -/obj/structure/medical_stand/anesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toE" = ( -/obj/machinery/light/bigfloorlamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toG" = ( -/obj/item/clothing/under/cheongsam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toJ" = ( -/obj/structure/table/gamblingtable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"toY" = ( -/obj/item/seeds/mtearseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpg" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tph" = ( -/obj/structure/sign/department/bridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpo" = ( -/obj/item/device/holomap_beacon/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpq" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpu" = ( -/obj/item/toy/chewtoy/tall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpz" = ( -/obj/structure/closet/crate/secure/bin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpA" = ( -/obj/item/clothing/mask/gas/sechailer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpD" = ( -/obj/structure/closet/button_example, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpE" = ( -/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked/mounted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpI" = ( -/obj/structure/shuttle/engine/propulsion/burst/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpK" = ( -/obj/item/weapon/storage/pill_bottle/benzilate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpQ" = ( -/obj/item/ammo_magazine/ammo_box/b12g/pellet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpU" = ( -/obj/item/clothing/under/swimsuit/earth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpV" = ( -/obj/item/clothing/head/justice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tpY" = ( -/mob/living/simple_mob/animal/passive/chicken{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tpZ" = ( -/obj/structure/bed/chair/comfy/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqa" = ( -/obj/item/device/tape, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqc" = ( -/obj/item/clothing/suit/storage/toggle/track/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqd" = ( -/obj/item/weapon/storage/backpack/sport, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tql" = ( -/obj/item/clothing/shoes/boots/cowboy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqn" = ( -/obj/item/weapon/gun/energy/modular, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqu" = ( -/obj/structure/sign/flag/blank/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqx" = ( -/obj/item/clothing/under/pants/baggy/mustangjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqy" = ( -/obj/item/weapon/storage/toolbox/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqO" = ( -/obj/item/stack/tile/carpet/turcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tqX" = ( -/obj/item/weapon/gun/energy/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trk" = ( -/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trl" = ( -/obj/item/weapon/inflatable_duck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trm" = ( -/obj/item/clothing/suit/kamishimo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trp" = ( -/obj/item/weapon/card/id/gold/captain/spare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trs" = ( -/obj/machinery/access_button/airlock_interior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"try" = ( -/obj/item/trash/candy/fruitbar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trB" = ( -/obj/item/clothing/head/beret/solgov/diplomatic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trF" = ( -/obj/item/weapon/storage/backpack/mime/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trI" = ( -/obj/item/flag/seo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trQ" = ( -/obj/item/surplus_voucher/ser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trR" = ( -/obj/item/clothing/suit/space/void/pilot/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trY" = ( -/obj/item/weapon/storage/backpack/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"trZ" = ( -/mob/living/simple_mob/slime/xenobio/rainbow{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tsa" = ( -/obj/item/frame/painting, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsq" = ( -/obj/item/weapon/stock_parts/micro_laser/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsx" = ( -/obj/item/weapon/holo/esword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsB" = ( -/obj/item/weapon/smes_coil/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsM" = ( -/obj/item/clothing/suit/space/vox/civ/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsN" = ( -/obj/item/weapon/spell/modifier/repel_missiles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsP" = ( -/obj/item/clothing/head/helmet/solgov/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsR" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/pizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsX" = ( -/obj/item/ammo_magazine/plamya/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsY" = ( -/obj/machinery/atmospherics/unary/engine/fancy_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tsZ" = ( -/obj/item/clothing/accessory/armor/armorplate/ablative, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttd" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/snaps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tth" = ( -/obj/item/weapon/material/knife/tacknife/combatknife/fluff/katarina, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tto" = ( -/mob/living/simple_mob/vore/rabbit/killer{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ttv" = ( -/obj/item/weapon/stock_parts/micro_laser/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttA" = ( -/obj/item/clothing/accessory/wcoat/swvest/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttB" = ( -/obj/item/weapon/dnainjector/stuttmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttF" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttI" = ( -/obj/item/ammo_casing/a338, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttL" = ( -/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttN" = ( -/obj/machinery/gateway/brass{ - dir = 6 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttP" = ( -/obj/item/clothing/glasses/omnihud/med/fluff/wickedtemphud, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttQ" = ( -/obj/item/clothing/suit/storage/armor/wolfbrigade2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ttR" = ( -/mob/living/simple_mob/mobs_monsters/clowns/cluwne{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tue" = ( -/mob/living/simple_mob/animal/passive/opossum{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tuk" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tul" = ( -/mob/living/simple_mob/animal/passive/dog, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tum" = ( -/obj/structure/prop/war/tgmc_missile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tup" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/elite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuu" = ( -/obj/item/weapon/circuitboard/security/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tux" = ( -/obj/item/weapon/storage/box/fluff/jessica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuy" = ( -/obj/item/weapon/rig/hephaestus/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuA" = ( -/obj/item/weapon/gun/energy/ionrifle/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuI" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuM" = ( -/obj/item/weapon/gun/energy/sf2000, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuP" = ( -/obj/item/stamp/zeng_hu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tuT" = ( -/obj/item/weapon/storage/box/syndie_kit/cigarette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvb" = ( -/obj/item/weapon/reagent_containers/food/snacks/cube/nutriment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvi" = ( -/obj/item/weapon/barcodescanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvl" = ( -/obj/structure/symbol/fe, -/turf/simulated/fitness, -/area/survivalpod) -"tvL" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_uplink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvO" = ( -/obj/item/weapon/reagent_containers/glass/paint/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvS" = ( -/obj/item/weapon/paper/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvW" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/silence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tvX" = ( -/obj/item/clothing/head/helmet/space/void/refurb/engineering/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twe" = ( -/obj/item/ammo_magazine/m545/small/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twi" = ( -/obj/item/clothing/accessory/storage/pouches/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twm" = ( -/obj/item/weapon/storage/vore_egg/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"two" = ( -/obj/item/device/binoculars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tws" = ( -/obj/structure/closet/crate/ward, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twK" = ( -/obj/item/clothing/under/dress/dress_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twL" = ( -/obj/item/weapon/circuitboard/guestpass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twR" = ( -/obj/item/clothing/suit/space/syndicate/black/engie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twU" = ( -/obj/item/clothing/head/tesh_hood/standard/lightgrey_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"twX" = ( -/obj/item/device/electronic_assembly/medium/gun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txc" = ( -/obj/item/clothing/under/greenasym, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txd" = ( -/obj/item/weapon/circuitboard/dna_analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txj" = ( -/obj/item/slime_extract/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txk" = ( -/obj/item/stack/tile/bmarble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txx" = ( -/obj/item/weapon/implant/organ/limbaugment/dart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txG" = ( -/obj/item/clothing/under/rank/chemist_new, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"txZ" = ( -/obj/item/trash/chips/bbq, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyc" = ( -/obj/machinery/porta_turret/lasertag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyd" = ( -/obj/item/ammo_magazine/m9mm/compact/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tye" = ( -/obj/item/weapon/reagent_containers/food/snacks/candy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyh" = ( -/obj/machinery/vending/emergencyfood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tym" = ( -/obj/item/weapon/weldingtool/spell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyu" = ( -/obj/item/mecha_parts/part/janus_head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyA" = ( -/obj/item/trash/pretzel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyH" = ( -/obj/item/weapon/gun/energy/gun/tongue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyI" = ( -/obj/structure/closet/crate/hydroponics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyO" = ( -/obj/item/toy/figure/acolyte, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyR" = ( -/obj/item/clothing/accessory/collar/cowbell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tyU" = ( -/obj/item/weapon/circuitboard/swfdoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzb" = ( -/obj/item/weapon/surgical/hemostat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzf" = ( -/obj/item/toy/figure/prisoner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzu" = ( -/obj/item/clothing/under/rank/trek/command/ent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzB" = ( -/obj/item/clothing/under/rank/pilot2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzI" = ( -/obj/item/weapon/reagent_containers/spray/waterflower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzO" = ( -/obj/item/clothing/head/helmet/space/void/refurb/medical/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzR" = ( -/obj/item/clothing/under/teshari/smock/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzS" = ( -/obj/machinery/vending/wardrobe/detdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzU" = ( -/obj/item/weapon/book/bundle/custom_library/nonfiction/skrelliancastesystem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tzX" = ( -/obj/item/weapon/reagent_containers/food/snacks/carrotfries, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAa" = ( -/obj/item/weapon/reagent_containers/cooking_container/fryer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAc" = ( -/obj/item/weapon/reagent_containers/glass/bucket/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAe" = ( -/obj/item/weapon/storage/belt/fannypack/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAf" = ( -/obj/item/weapon/surgical/cautery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAO" = ( -/obj/item/ammo_magazine/pkm/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAS" = ( -/obj/item/ammo_casing/microbattery/combat/stripper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tAW" = ( -/obj/item/clothing/mask/bandana/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBb" = ( -/obj/structure/prop/fence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBs" = ( -/obj/machinery/shield_gen/external/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBt" = ( -/obj/fiftyspawner/oracarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBv" = ( -/obj/item/clothing/suit/storage/forensics/red/long, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBO" = ( -/obj/structure/prop/machine/tgmc_console4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tBS" = ( -/obj/item/trash/sun_snax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCb" = ( -/obj/structure/sign/levels/cryo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCe" = ( -/obj/item/weapon/reagent_containers/food/snacks/meatcube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCm" = ( -/obj/machinery/gear_dispenser/suit/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCu" = ( -/obj/item/weapon/aiModule/oxygen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCy" = ( -/obj/item/weapon/implant/exile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCE" = ( -/obj/item/ammo_magazine/s45/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCG" = ( -/obj/item/clothing/under/technomancer/apprentice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCH" = ( -/obj/item/weapon/disk/limb/wardtakahashi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCR" = ( -/obj/item/weapon/card/emag/used, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tCX" = ( -/obj/item/weapon/circuitboard/exploration_equipment_vendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDo" = ( -/obj/structure/closet/crate/secure/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDp" = ( -/obj/item/weapon/reagent_containers/food/snacks/triton, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDr" = ( -/obj/item/seeds/limeseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDz" = ( -/obj/structure/prop/machine/tgmc_console5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDA" = ( -/obj/item/clothing/head/beret/sec/corporate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDE" = ( -/obj/item/weapon/circuitboard/mining_equipment_vendor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDG" = ( -/obj/item/weapon/light/bulb/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDR" = ( -/obj/item/clothing/under/dress/twistfront, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDS" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tDZ" = ( -/obj/item/clothing/head/helmet/space/void/security/riot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEf" = ( -/obj/item/ammo_casing/a792x57m, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEt" = ( -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEx" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb06, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEA" = ( -/obj/item/clothing/under/rank/internalaffairs/fluff/joan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEG" = ( -/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEH" = ( -/obj/structure/salvageable/console_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEK" = ( -/obj/item/toy/snappop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEQ" = ( -/obj/item/weapon/lipstick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tES" = ( -/obj/item/weapon/material/barbedwire/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tET" = ( -/obj/item/weapon/storage/vore_egg/cocoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEU" = ( -/obj/item/weapon/camera_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tEY" = ( -/obj/item/clothing/accessory/jacket/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFg" = ( -/obj/item/clothing/head/beret/solgov/fleet/branch/second, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFj" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFl" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/starkist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFo" = ( -/obj/item/ammo_casing/a545/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFu" = ( -/obj/item/clothing/suit/storage/miljacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFv" = ( -/obj/item/clothing/accessory/jacket/checkered, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFx" = ( -/obj/item/weapon/implanter/reagent_generator/belle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFE" = ( -/obj/item/clothing/suit/storage/hooded/fluff/kbraid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFO" = ( -/obj/item/clothing/under/harness_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFQ" = ( -/obj/item/weapon/handcuffs/legcuffs/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tFR" = ( -/obj/item/weapon/rig/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGa" = ( -/obj/item/clothing/head/pin/flower, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGb" = ( -/obj/structure/simple_door/sandstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGe" = ( -/obj/item/clothing/under/cheongsam/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGf" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGj" = ( -/mob/living/simple_mob/otie/red{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tGr" = ( -/obj/item/frame/doorbell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGu" = ( -/obj/item/clothing/under/rank/medical/fluff/jiao_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGy" = ( -/obj/structure/bed/chair/holochair, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGz" = ( -/obj/item/clothing/suit/storage/hazardvest/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGB" = ( -/obj/item/trash/material/device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGF" = ( -/obj/item/rig_module/device/plasmacutter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGL" = ( -/obj/item/weapon/gun/projectile/automatic/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGR" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "16" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGT" = ( -/obj/structure/sign/christmas/wreath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGU" = ( -/obj/item/weapon/spell/recall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tGX" = ( -/obj/structure/closet/secure_closet/personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHi" = ( -/obj/item/clothing/suit/imperium_monk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHj" = ( -/obj/item/integrated_circuit/memory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHm" = ( -/obj/item/weapon/reagent_containers/food/snacks/friedrice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHE" = ( -/obj/item/clothing/under/shorts/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHO" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/androrovir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHP" = ( -/obj/item/device/gps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHR" = ( -/obj/structure/sign/directions/pool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHT" = ( -/obj/item/clothing/head/helmet/space/vox/civ/science/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tHW" = ( -/obj/item/clothing/under/lawyer/oldman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tId" = ( -/obj/item/clothing/suit/space/void/refurb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIf" = ( -/obj/structure/lightpost/festive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIu" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIv" = ( -/obj/item/clothing/suit/armor/pcarrier/explorer/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIw" = ( -/obj/item/ammo_magazine/m9mmt/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIx" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIy" = ( -/obj/item/weapon/firework_star/weather/overcast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIz" = ( -/obj/item/weapon/gun/energy/mouseray/wolpin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIA" = ( -/obj/item/weapon/commcard/head/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIE" = ( -/obj/item/clothing/ears/earring/stud/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIG" = ( -/obj/item/device/electronic_assembly/medium/clam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIO" = ( -/obj/item/clothing/suit/storage/hooded/explorer/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIR" = ( -/obj/structure/closet/secure_closet/guncabinet/sidearm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIT" = ( -/obj/structure/bed/chair/comfy/purp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIU" = ( -/obj/item/trash/fancyplate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tIY" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cafe_latte, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJi" = ( -/obj/item/weapon/pen/crayon/marker/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJz" = ( -/obj/item/weapon/gun/energy/staff/focus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJB" = ( -/obj/item/weapon/storage/box/donkpockets/teriyaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJC" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/penguin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJK" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJQ" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJU" = ( -/obj/structure/showcase/sign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tJV" = ( -/obj/structure/sign/atmos/air, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKg" = ( -/obj/item/clothing/under/solgov/utility/fleet/officer/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKr" = ( -/obj/item/clothing/accessory/badge/holo/investigator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKt" = ( -/mob/living/simple_mob/slime/xenobio/dark_blue{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tKu" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKz" = ( -/obj/item/clothing/under/rank/research_director/rdalt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKC" = ( -/obj/structure/closet/crate/secure/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKE" = ( -/mob/living/simple_mob/blob/spore{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tKF" = ( -/obj/machinery/botany, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKH" = ( -/obj/item/ammo_magazine/tp23s, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKI" = ( -/obj/item/weapon/rig/ch/pursuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKK" = ( -/obj/item/weapon/cell/infinite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKP" = ( -/obj/item/weapon/gun/projectile/revolver/lombardi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tKZ" = ( -/obj/item/weapon/storage/mre/menu7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLd" = ( -/obj/machinery/power/port_gen/pacman/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLg" = ( -/obj/item/ammo_magazine/ppsh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLr" = ( -/obj/structure/bed/chair/comfy/rounded/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLz" = ( -/obj/item/weapon/refill_cartridge/autoname/food/snix, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLH" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLU" = ( -/obj/structure/prop/machine/solifier/starts_on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLY" = ( -/obj/item/clothing/under/pants/utility/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tLZ" = ( -/obj/item/selectable_item/chemistrykit/gender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMe" = ( -/obj/item/clothing/head/bio_hood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMq" = ( -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tME" = ( -/obj/item/device/megaphone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMH" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/candiedapple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMS" = ( -/obj/item/integrated_circuit/passive/power/metabolic_siphon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMV" = ( -/obj/item/stack/tile/floor/milspec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tMZ" = ( -/obj/item/clothing/head/tesh_hood/standard/black_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNb" = ( -/mob/living/simple_mob/otie/zorgoia{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tNd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNf" = ( -/obj/item/slime_extract/dark_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNh" = ( -/obj/item/weapon/paper/card/smile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNl" = ( -/obj/item/weapon/rig/pmc/engineer/green/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNx" = ( -/obj/item/toy/blink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNH" = ( -/obj/item/clothing/under/wedding/bride_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tNL" = ( -/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tNZ" = ( -/obj/item/weapon/implantcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOe" = ( -/obj/item/weapon/reagent_containers/food/snacks/pastatomato, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOn" = ( -/obj/item/weapon/paper/crumpled/whiskeyhermit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOv" = ( -/obj/item/seeds/megashroom, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOE" = ( -/obj/item/weapon/bikehorn/rubberducky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOF" = ( -/obj/item/weapon/surgical/scalpel/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tON" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tOO" = ( -/obj/item/weapon/reagent_containers/food/snacks/locust_cooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tOP" = ( -/obj/item/modular_computer/telescreen/preset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPi" = ( -/obj/item/weapon/disk/limb/eggnerdltd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPm" = ( -/obj/item/clothing/accessory/medal/dungeon/alien_ufo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPp" = ( -/obj/item/weapon/pen/fountain7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPx" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/rosewood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPB" = ( -/obj/item/ammo_magazine/cell_mag/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPJ" = ( -/obj/item/weapon/surgical/bone_clamp/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPL" = ( -/obj/item/toy/figure/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tPV" = ( -/obj/structure/bed/chair/sofa/right/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQe" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/rezadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQf" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQh" = ( -/obj/machinery/door/airlock/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQn" = ( -/obj/item/weapon/gun/projectile/shotgun/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQu" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQA" = ( -/obj/item/weapon/storage/box/glasses/coffeemug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQC" = ( -/obj/item/clothing/suit/oversize, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQU" = ( -/obj/item/weapon/weldingtool/hugetank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tQV" = ( -/obj/item/clothing/accessory/tie/blue_long, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRm" = ( -/obj/item/weapon/storage/bag/circuits/mini/time, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRr" = ( -/obj/item/weapon/rcd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRv" = ( -/obj/item/weapon/tool/wirecutters/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRB" = ( -/obj/item/ammo_magazine/m792, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRD" = ( -/obj/item/weapon/storage/belt/champion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRE" = ( -/obj/machinery/door/airlock/angled_tgmc/medical_glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRJ" = ( -/obj/item/weapon/card/id/synthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tRY" = ( -/obj/item/clothing/under/nanotrasen/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSc" = ( -/obj/item/weapon/cell/device/giga/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSh" = ( -/obj/item/device/electronic_assembly/default, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSi" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSk" = ( -/obj/item/weapon/storage/box/frags, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSr" = ( -/obj/structure/largecrate/animal/pred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSs" = ( -/obj/item/weapon/spell/mend_organs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSB" = ( -/mob/living/simple_mob/animal/space/carp/large/huge{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tSK" = ( -/obj/item/clothing/shoes/boots/ranger/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tSZ" = ( -/obj/item/weapon/storage/box/nifsofts_security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tTd" = ( -/obj/structure/loot_pile/mecha/gygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tTk" = ( -/obj/item/clothing/gloves/ring/material/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tTO" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tTS" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/appleberry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUd" = ( -/obj/machinery/button/garbosystem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUg" = ( -/obj/structure/closet/coffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUh" = ( -/obj/item/weapon/nullrod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUi" = ( -/obj/item/clothing/suit/kimono/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUr" = ( -/mob/living/simple_mob/vore/fennix{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tUt" = ( -/obj/item/clothing/head/helmet/fluff/freddy/chica, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUv" = ( -/obj/item/stack/material/chitin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUw" = ( -/obj/item/weapon/mining_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUx" = ( -/obj/item/weapon/fossil/shell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUG" = ( -/obj/structure/largecrate/animal/wolfgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUJ" = ( -/obj/item/weapon/gun/projectile/automatic/z8/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUK" = ( -/obj/item/clothing/head/helmet/space/void/refurb/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUM" = ( -/obj/item/weapon/cell/clockwork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUQ" = ( -/obj/item/weapon/surgical/retractor/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUS" = ( -/obj/item/weapon/material/knife/ritual/fluff/astra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUU" = ( -/obj/structure/sign/bigname/seg_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tUZ" = ( -/obj/item/projectile/bullet/magnetic/bore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVa" = ( -/obj/item/weapon/book/bundle/custom_library/fiction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVl" = ( -/obj/structure/reagent_dispensers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVp" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVu" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sarucube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVN" = ( -/obj/item/gunbox/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVS" = ( -/obj/item/weapon/toy/desk/officetoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVT" = ( -/obj/item/weapon/reagent_containers/food/snacks/friedmushroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tVZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWc" = ( -/obj/item/clothing/glasses/rimless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWi" = ( -/obj/item/clothing/head/helmet/space/void/captain/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWn" = ( -/obj/item/clothing/shoes/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWr" = ( -/obj/item/clothing/shoes/boots/jackboots/fluff/mauserboots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWv" = ( -/obj/item/ammo_magazine/cell_mag/medical/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWB" = ( -/obj/item/clothing/head/terran/navy/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWE" = ( -/obj/item/weapon/handcuffs/legcuffs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWG" = ( -/obj/item/ammo_casing/a9x39, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWO" = ( -/obj/item/clothing/mask/gas/clear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tWS" = ( -/obj/structure/closet/crate/large/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXb" = ( -/mob/living/simple_mob/animal/passive/lizard{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"tXc" = ( -/obj/item/toy/plushie/farwa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXh" = ( -/obj/machinery/light/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXj" = ( -/obj/item/slimepotion/fertility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXm" = ( -/obj/item/clothing/accessory/solgov/department/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXp" = ( -/obj/machinery/vending/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXq" = ( -/obj/item/weapon/reagent_containers/food/snacks/funnelcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXs" = ( -/obj/structure/prop/alien/dispenser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXt" = ( -/obj/item/seeds/icepepperseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXw" = ( -/obj/machinery/vending/wallmed1/public, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXy" = ( -/obj/item/weapon/storage/box/swabs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXB" = ( -/obj/item/weapon/storage/bag/circuits/mini/logic/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXC" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXO" = ( -/obj/item/weapon/circuitboard/rdservercontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXP" = ( -/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXR" = ( -/obj/item/clothing/under/croptop/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXU" = ( -/obj/mecha/combat/gygax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tXZ" = ( -/obj/item/seeds/sugarcaneseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYb" = ( -/obj/item/weapon/gun/projectile/p92x, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYk" = ( -/obj/item/weapon/material/shard/titaniumglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYn" = ( -/obj/item/weapon/storage/mrebag/pill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYo" = ( -/obj/item/clothing/accessory/armor/armguards/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYp" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/pink_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYv" = ( -/obj/item/clothing/accessory/solgov/rank/ec/enlisted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYz" = ( -/obj/item/clothing/head/caphat/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYJ" = ( -/obj/item/clothing/under/skirt/colorable/tube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYV" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tYX" = ( -/obj/item/broken_device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZd" = ( -/obj/item/weapon/towel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZf" = ( -/obj/item/weapon/reagent_containers/food/snacks/macncheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZm" = ( -/obj/item/clothing/suit/cyborg_suit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZr" = ( -/obj/item/ammo_magazine/m545/ext/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZw" = ( -/obj/item/clothing/under/color/fjumpsuit/lightredf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZy" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/mosin/scoped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZM" = ( -/obj/structure/bed/chair/bay/chair/padded/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"tZY" = ( -/obj/item/weapon/storage/internal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uac" = ( -/obj/item/weapon/dosimeter_film, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uad" = ( -/obj/item/clothing/suit/storage/flannel/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uau" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/module/id_auth, -/obj/item/weapon/module/card_reader, -/obj/item/weapon/module/cell_power, -/obj/item/weapon/module/power_control, -/obj/item/weapon/circuitboard/microwave, -/obj/item/weapon/circuitboard/mass_driver, -/obj/item/weapon/circuitboard/jukebox, -/obj/item/weapon/circuitboard/intercom, -/obj/item/weapon/circuitboard/firealarm, -/obj/item/weapon/circuitboard/airalarm, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/tape_roll, -/obj/item/weapon/tape_roll, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/belt/utility/full/multitool, -/obj/item/weapon/storage/bag/trash, -/obj/item/weapon/storage/bag/trash, -/obj/item/weapon/storage/backpack/dufflebag/eng, -/obj/item/device/geiger, -/obj/item/device/mapping_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uaU" = ( -/obj/item/weapon/pen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uaX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uaZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubd" = ( -/obj/mecha/combat/phazon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubo" = ( -/obj/item/weapon/circuitboard/machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubt" = ( -/obj/item/toy/plushie/girly_corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uby" = ( -/obj/item/clothing/suit/storage/det_suit/fluff/tasald, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubC" = ( -/obj/item/clothing/head/helmet/HoS, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubD" = ( -/obj/item/clothing/under/clown/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubG" = ( -/obj/item/clothing/head/trilby/feather, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubI" = ( -/obj/structure/bed/chair/sofa/corner/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubK" = ( -/obj/item/weapon/aiModule/nanotrasen_aggressive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubS" = ( -/obj/structure/closet/syndicate/resources/everything, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubU" = ( -/obj/item/clothing/under/rank/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ubX" = ( -/obj/item/clothing/mask/gas/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uce" = ( -/obj/structure/fence/door/opened, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uci" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucs" = ( -/obj/item/clothing/head/pilot_vr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucx" = ( -/obj/structure/loot_pile/maint/boxfort, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucC" = ( -/obj/item/clothing/head/collectable/wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucD" = ( -/obj/structure/symbol/clock, -/turf/simulated/fitness, -/area/survivalpod) -"ucH" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/poly, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ucN" = ( -/obj/item/weapon/flame/lighter/zippo/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucQ" = ( -/obj/item/integrated_circuit/passive/power/relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ucT" = ( -/obj/random/flashlight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uda" = ( -/obj/item/clothing/head/beret/medical/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udh" = ( -/obj/structure/sign/hangar/one, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udt" = ( -/obj/item/clothing/under/color/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udE" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udI" = ( -/obj/machinery/vending/hotfood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udJ" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udM" = ( -/obj/item/stack/medical/splint/ghetto, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udU" = ( -/obj/item/device/spaceflare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"udX" = ( -/obj/item/weapon/gun/energy/gun/compact/dazzle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ued" = ( -/obj/item/weapon/gun/projectile/revolver/deckard/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uek" = ( -/obj/item/clothing/under/pants/camo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uen" = ( -/obj/item/clothing/suit/bomb_suit/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueo" = ( -/obj/item/clothing/under/excelsior/mixed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uer" = ( -/obj/item/weapon/scrying, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uew" = ( -/obj/item/clothing/under/relaxwear_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uey" = ( -/obj/item/instrument/bikehorn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueA" = ( -/obj/item/weapon/locator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueC" = ( -/obj/item/weapon/dnainjector/antinobreath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueG" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueK" = ( -/obj/item/weapon/reagent_containers/food/snacks/saturn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueV" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ueX" = ( -/obj/item/weapon/reagent_containers/pill/stox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ufd" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ufE" = ( -/obj/item/stack/tile/carpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ufG" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ufT" = ( -/obj/item/weapon/card/id/casino/manager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugb" = ( -/mob/living/simple_mob/vore/alienanimals/succlet/moss, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ugf" = ( -/obj/item/weapon/card/id/science/xenobotanist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugo" = ( -/mob/living/simple_mob/animal/space/mouse_army/stealth{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ugq" = ( -/obj/structure/closet/crate/fennec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugr" = ( -/obj/item/clothing/accessory/armor/legguards/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugu" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugv" = ( -/obj/item/stack/tile/carpet/retro_red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugw" = ( -/obj/structure/noticeboard/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugx" = ( -/obj/item/clothing/under/rank/cargotech/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugI" = ( -/obj/item/clothing/gloves/gauntlets/rig/pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugJ" = ( -/obj/item/ammo_magazine/ssp4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugL" = ( -/obj/item/clothing/head/caphat/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugQ" = ( -/obj/item/integrated_circuit/input/phoron_sensor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ugZ" = ( -/obj/item/weapon/storage/vore_egg/cd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhb" = ( -/mob/living/simple_mob/animal/passive/dog/brittany, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uhc" = ( -/obj/item/clothing/shoes/boots/cowboy/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhg" = ( -/obj/structure/sign/warning/vacuum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhk" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced/shadowlarkens, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhm" = ( -/obj/item/pizzabox/meat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhn" = ( -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhp" = ( -/obj/item/clothing/accessory/scarf/stripedblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhw" = ( -/obj/item/clothing/suit/storage/hooded/foodcostume/turnip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhx" = ( -/obj/machinery/suit_cycler/vintage/tengi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhy" = ( -/obj/structure/prop/machine/nt_cruciforge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhL" = ( -/obj/machinery/disperser/middle{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhN" = ( -/obj/item/weapon/storage/backpack/satchel/strapless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uhZ" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "6" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uic" = ( -/obj/item/weapon/tank/jetpack/rig, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uig" = ( -/obj/item/ammo_casing/a10mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uih" = ( -/obj/item/weapon/reagent_containers/food/snacks/nutrimentslab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uio" = ( -/obj/item/weapon/grenade/explosive/frag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uis" = ( -/obj/structure/atmospheric_retention_field/impassable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uit" = ( -/obj/item/clothing/shoes/sneakersred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uiy" = ( -/obj/machinery/door/airlock/alien/blue/public, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uiH" = ( -/obj/item/clothing/head/pin/butterfly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uiR" = ( -/obj/item/stack/material/supermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujd" = ( -/obj/structure/closet/crate/solar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujg" = ( -/obj/item/weapon/reagent_containers/food/snacks/salo/true, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujj" = ( -/obj/item/device/electronic_assembly/clothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujl" = ( -/obj/item/weapon/cell/device/shield_generator/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujq" = ( -/obj/item/clothing/under/vox/vox_casual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujr" = ( -/obj/structure/barricade/sandbag{ - icon_state = "sandbag" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujs" = ( -/obj/item/clothing/suit/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujv" = ( -/obj/item/weapon/implantcase/handblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujw" = ( -/obj/item/weapon/secbot_assembly/ed209_assembly/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujx" = ( -/obj/item/clothing/accessory/armor/armorplate/tactical/fluff/saur_plate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujD" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujE" = ( -/obj/item/clothing/suit/storage/fluff/fedcoat/amara_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujN" = ( -/obj/item/weapon/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujS" = ( -/obj/item/weapon/implant/reagent_generator/eldi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujW" = ( -/obj/machinery/media/jukebox/casinojukebox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ujX" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/grapejuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukc" = ( -/obj/item/clothing/accessory/jacket/gambler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukr" = ( -/obj/item/weapon/stamp/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukx" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/beans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukM" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress/mother/big{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ukO" = ( -/obj/machinery/mech_recharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukP" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/robo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukU" = ( -/obj/item/device/encryptionkey/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ukV" = ( -/mob/living/simple_mob/mechanical/cyber_horror{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ukX" = ( -/obj/structure/sign/signnew/memetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulb" = ( -/obj/item/trash/ratpacktaco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulj" = ( -/obj/structure/closet/walllocker_double/misc_civ, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulp" = ( -/obj/machinery/fitness/heavy/lifter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulr" = ( -/obj/item/device/personal_shield_generator/belt/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulA" = ( -/obj/item/weapon/bedsheet/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulG" = ( -/obj/item/clothing/head/beret/corp/saare/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulI" = ( -/obj/structure/closet/crate/secure/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulK" = ( -/obj/item/weapon/gun/energy/locked/frontier/handbow/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ulM" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/awp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umn" = ( -/obj/item/clothing/accessory/pride/trans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umq" = ( -/obj/item/seeds/cutting, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umv" = ( -/obj/item/clothing/under/dress/twopiece, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umz" = ( -/obj/item/weapon/storage/backpack/luchador, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umF" = ( -/obj/item/ammo_casing/a556/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umK" = ( -/obj/item/device/electronic_assembly/tiny/hook, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umN" = ( -/obj/item/weapon/circuitboard/air_management/tank_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umR" = ( -/obj/item/weapon/storage/vore_egg/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umS" = ( -/obj/item/clothing/under/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umV" = ( -/obj/item/weapon/soap/rainbow_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"umX" = ( -/obj/item/clothing/mask/breath, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"und" = ( -/obj/item/weapon/book/manual/chemistry_guide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unf" = ( -/obj/machinery/atmospherics/unary/vent_pump/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ung" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unl" = ( -/obj/structure/sign/directions/stairs_down, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unw" = ( -/obj/structure/closet/walllocker_double/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unD" = ( -/obj/item/clothing/under/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unJ" = ( -/obj/structure/closet/crate/mimic/closet/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"unX" = ( -/obj/item/clothing/under/dress/flamenco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uog" = ( -/obj/item/clothing/gloves/ring/material/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoj" = ( -/obj/item/clothing/suit/space/void/medical/alt/tesh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoo" = ( -/obj/item/weapon/reagent_containers/cooking_container/oven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoz" = ( -/obj/item/clothing/gloves/gauntlets/rig/baymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoD" = ( -/obj/item/ammo_casing/a45/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoH" = ( -/obj/item/weapon/circuitboard/clonescanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoK" = ( -/obj/item/ammo_magazine/m545/small/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uoU" = ( -/obj/item/clothing/under/rank/scientist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upe" = ( -/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upf" = ( -/obj/item/weapon/spell/aura/unstable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upg" = ( -/obj/item/weapon/gun/projectile/n80, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upi" = ( -/obj/item/weapon/gun/energy/soapenergy/gauss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upj" = ( -/obj/item/weapon/soap/orange_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upo" = ( -/obj/item/weapon/melee/energy/spear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upq" = ( -/obj/structure/closet/walllocker_double/emergency_engi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upB" = ( -/obj/item/weapon/storage/box/casino/costume_imperiummonk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upD" = ( -/obj/item/stack/material/resin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upK" = ( -/obj/machinery/power/tracker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upM" = ( -/obj/item/stack/tile/carpet/happy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upN" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upO" = ( -/obj/item/clothing/suit/storage/hazardvest/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upX" = ( -/obj/item/weapon/soap/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"upZ" = ( -/obj/item/weapon/material/hatchet/unathiknife, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqe" = ( -/obj/item/ammo_magazine/m12gdrum/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqi" = ( -/obj/item/clothing/suit/storage/solgov/service/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqm" = ( -/mob/living/simple_mob/humanoid/pirate/shield/machete/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uqr" = ( -/obj/item/clothing/accessory/wcoat/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqs" = ( -/obj/machinery/door/window/brigdoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqx" = ( -/obj/item/weapon/circuitboard/teleporter_hub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqA" = ( -/obj/machinery/vending/fitness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqH" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqS" = ( -/mob/living/simple_mob/metroid/juvenile/super{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uqU" = ( -/obj/item/integrated_circuit/output/led/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uqW" = ( -/obj/structure/sign/level/four/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urp" = ( -/obj/item/toy/plushie/white_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urC" = ( -/obj/item/clothing/head/helmet/space/vox/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urR" = ( -/obj/item/weapon/rig/pmc/medical/grey/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urS" = ( -/obj/item/clothing/shoes/boots/jackboots/knee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urU" = ( -/obj/item/weapon/storage/pouch/holster/full_stunrevolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"urX" = ( -/obj/item/seeds/gelthi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usf" = ( -/obj/item/clothing/glasses/omnihud/eng/meson, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usx" = ( -/obj/item/clothing/under/rank/pilot2/no_webbing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usz" = ( -/obj/item/weapon/material/fishing_rod/modern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usN" = ( -/obj/item/clothing/gloves/ring/material/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usX" = ( -/obj/machinery/gear_painter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"usY" = ( -/obj/item/clothing/accessory/armor/tag/com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utb" = ( -/obj/item/clothing/accessory/scarf/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utc" = ( -/obj/machinery/light/small/emergency, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utd" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_aug/analyzer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uti" = ( -/obj/item/weapon/rig/ert/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utn" = ( -/obj/item/ammo_magazine/akm/drum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utq" = ( -/obj/item/weapon/rig/vox_engine_technition_control_module/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utw" = ( -/obj/item/ammo_casing/microbattery/medical/toxin3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uty" = ( -/obj/machinery/vending/loadout/costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utN" = ( -/obj/item/weapon/handcuffs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utR" = ( -/obj/item/weapon/gun/energy/monorifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"utY" = ( -/obj/item/clothing/under/yw/rank/warden/formal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uud" = ( -/obj/item/weapon/tool/wrench/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuf" = ( -/obj/machinery/gravity_generator/main/station/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uug" = ( -/obj/item/clothing/shoes/boots/combat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuq" = ( -/obj/structure/sign/directions/cargo/refinery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uus" = ( -/obj/item/weapon/card/id/talon/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuu" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uuB" = ( -/obj/item/clothing/suit/storage/trek/ds9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuG" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuO" = ( -/obj/machinery/seed_storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uuX" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uva" = ( -/obj/item/weapon/reagent_containers/hypospray/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvb" = ( -/obj/vehicle/train/engine/quadbike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvc" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvm" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvn" = ( -/obj/item/clothing/accessory/poncho/thermal/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvr" = ( -/obj/item/ammo_magazine/m12gdrum/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvx" = ( -/obj/item/clothing/under/shorts/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvz" = ( -/obj/item/stack/cable_coil/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvB" = ( -/obj/machinery/mineral/mint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvF" = ( -/obj/item/weapon/dnainjector/firemut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvL" = ( -/obj/item/clothing/under/solgov/service/sifguard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvQ" = ( -/obj/item/weapon/book/manual/excavation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvU" = ( -/obj/item/clothing/under/color/white/craftable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvX" = ( -/obj/item/weapon/reagent_containers/food/snacks/ratprotein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uvZ" = ( -/obj/machinery/neonsign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwd" = ( -/obj/item/clothing/glasses/goggles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwf" = ( -/obj/item/clothing/accessory/scarf/altevian/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwm" = ( -/obj/machinery/artifact_analyser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwr" = ( -/obj/structure/salvageable/bliss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwt" = ( -/obj/item/weapon/gun/energy/retro/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uww" = ( -/obj/item/weapon/storage/backpack/messenger/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwB" = ( -/obj/item/clothing/under/sundress_white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwC" = ( -/obj/item/weapon/gun/projectile/multi_cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwE" = ( -/obj/item/clothing/under/rank/chief_medical_officer/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwI" = ( -/obj/item/weapon/rig/vox_engine_technition_control_module, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwJ" = ( -/obj/item/clothing/head/beret/solgov/fleet/branch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwK" = ( -/obj/item/clothing/head/beret/mauserhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwL" = ( -/obj/item/clothing/under/whitegoldrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwO" = ( -/obj/item/weapon/reagent_containers/food/snacks/waffles, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwQ" = ( -/obj/structure/sign/flag/blank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uwS" = ( -/obj/machinery/door/airlock/angled_tgmc/pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxf" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/jensen/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxg" = ( -/obj/item/weapon/storage/box/nifsofts_pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxj" = ( -/obj/item/weapon/circuitboard/unary_atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxA" = ( -/obj/item/weapon/reagent_containers/food/snacks/tomatosoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxD" = ( -/obj/item/trash/genration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxF" = ( -/obj/item/device/flashlight/lantern, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxH" = ( -/obj/item/stamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxK" = ( -/obj/structure/sign/levels/science/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxM" = ( -/obj/item/weapon/reagent_containers/glass/paint/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uxP" = ( -/obj/item/weapon/card/id/gold/captain/spare/fakespare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyc" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/strippergreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyf" = ( -/obj/item/weapon/gun/projectile/deagle/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyq" = ( -/obj/item/clothing/mask/gas/poltergeist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyw" = ( -/obj/item/clothing/suit/storage/vest/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyI" = ( -/obj/item/weapon/reagent_containers/food/snacks/gigapuddi/happy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyW" = ( -/obj/item/clothing/suit/fire/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uyZ" = ( -/obj/item/clothing/head/turban, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzb" = ( -/obj/item/weapon/storage/box/syndie_kit/imp_freedom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzd" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzl" = ( -/mob/living/simple_mob/humanoid/pirate/ranged/shotgun/armored{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uzu" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzy" = ( -/obj/item/clothing/suit/armor/yw/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzz" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/beef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzI" = ( -/obj/machinery/atmospheric_field_generator/perma/impassable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzK" = ( -/obj/item/clothing/under/fluff/mocha_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uzM" = ( -/obj/item/clothing/accessory/poncho/thermal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAa" = ( -/obj/item/clothing/suit/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAj" = ( -/obj/item/weapon/tool/screwdriver/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAk" = ( -/obj/item/weapon/implant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAu" = ( -/obj/item/device/gps/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAD" = ( -/obj/item/roller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAI" = ( -/obj/item/ammo_magazine/clip/sks/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAN" = ( -/obj/item/weapon/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAP" = ( -/obj/item/clothing/suit/varsity/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uAV" = ( -/obj/item/device/electronic_assembly/drone/arms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBc" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_glow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBg" = ( -/obj/item/weapon/gun/energy/dakkalaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBn" = ( -/obj/item/ammo_casing/sam48, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBp" = ( -/obj/item/frame/apc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBs" = ( -/obj/item/clothing/under/rank/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBt" = ( -/obj/item/ammo_magazine/ammo_box/b545/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBu" = ( -/obj/item/weapon/book/tome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBy" = ( -/obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBz" = ( -/obj/vehicle/bike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBC" = ( -/obj/machinery/mineral/equipment_vendor/survey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBE" = ( -/obj/item/clothing/under/cohesion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBJ" = ( -/mob/living/simple_mob/mechanical/mecha/combat/durand{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uBV" = ( -/obj/item/weapon/card/id/event/altcard/spare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uBY" = ( -/obj/item/clothing/suit/armor/alien/tank, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCe" = ( -/obj/item/weapon/coin/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCj" = ( -/obj/item/instrument/violin/golden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCo" = ( -/obj/item/weapon/rig/light/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCs" = ( -/obj/item/clothing/under/pants/track, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCD" = ( -/obj/item/clothing/shoes/boots/singer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCL" = ( -/mob/living/simple_mob/animal/passive/fish/bass, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"uCT" = ( -/obj/item/clothing/under/color/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uCV" = ( -/obj/machinery/chemical_dispenser/bar_coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDb" = ( -/obj/item/mecha_parts/part/phazon_torso, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDg" = ( -/obj/item/clothing/under/wetsuit_rec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDk" = ( -/obj/item/weapon/tool/wirecutters/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDl" = ( -/obj/item/weapon/storage/box/donkpockets/gondola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDv" = ( -/obj/item/clothing/under/rank/khi/fluff/aronai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDy" = ( -/obj/item/device/electronic_assembly/drone/secbot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDC" = ( -/obj/item/clothing/suit/space/void/zaddat/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDL" = ( -/obj/structure/closet/athletic_swimwear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDY" = ( -/obj/item/weapon/weldingtool/lasercannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uDZ" = ( -/obj/item/ammo_magazine/s44/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEc" = ( -/obj/structure/closet/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEd" = ( -/obj/item/weapon/technomancer_catalog/universal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEe" = ( -/obj/machinery/atmospherics/pipe/tank/nitrous_oxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEj" = ( -/obj/item/clothing/head/helmet/space/void/responseteam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEk" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEl" = ( -/mob/living/simple_mob/vore/rabbit{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uEo" = ( -/obj/structure/closet/secure_closet/courtroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEt" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/pilotslug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uEw" = ( -/obj/machinery/atmospherics/pipe/cap/visible/scrubbers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEy" = ( -/obj/item/clothing/under/fluff/taiga, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEB" = ( -/obj/item/weapon/chaoscake_layer/eight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uED" = ( -/obj/item/weapon/gun/projectile/fiveseven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEF" = ( -/obj/structure/loot_pile/surface/medicine_cabinet/fresh, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEW" = ( -/obj/structure/sign/flag/vystholm/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uEY" = ( -/mob/living/simple_mob/humanoid/possessed/industrial{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uFl" = ( -/obj/machinery/porta_turret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFo" = ( -/obj/item/clothing/head/beret/solgov/ttc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFp" = ( -/obj/item/weapon/broken_gun/grenadelauncher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFs" = ( -/obj/item/weapon/storage/bag/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFx" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFB" = ( -/obj/item/clothing/under/rank/security/corp/fluff/sam_bodysuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFC" = ( -/obj/item/stack/tile/floor/freezer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFL" = ( -/obj/mecha/working/ripley/deathripley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFR" = ( -/obj/item/weapon/storage/box/monkeycubes/sobakacubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFX" = ( -/obj/item/clothing/under/solgov/utility/fleet/combat/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uFZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/canned/caviar/true, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGb" = ( -/obj/structure/sign/levels/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGf" = ( -/obj/item/clothing/suit/customs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGg" = ( -/obj/item/clothing/accessory/asymmetric, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGi" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGl" = ( -/obj/item/device/encryptionkey/heads/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGn" = ( -/obj/item/weapon/technomancer_core/safety, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGz" = ( -/obj/item/clothing/head/collectable/rabbitears, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGC" = ( -/obj/item/weapon/spellbook/oneuse/charge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGJ" = ( -/obj/item/device/camerabug/spy, -/obj/item/weapon/implant/restrainingbolt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uGP" = ( -/obj/item/weapon/ectoplasm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHf" = ( -/obj/machinery/door/airlock/glass_atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHi" = ( -/obj/item/clothing/accessory/solgov/department/engineering/army, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHj" = ( -/obj/item/integrated_circuit/manipulation/size, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHm" = ( -/obj/item/clothing/gloves/ring/seal/signet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHA" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/red_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHB" = ( -/obj/structure/sign/flag/pirate/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHI" = ( -/obj/structure/droppod_door, -/turf/simulated/shuttle/wall/voidcraft, -/area/survivalpod) -"uHK" = ( -/obj/item/clothing/suit/space/syndicate/black/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHL" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/yithian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHS" = ( -/obj/item/weapon/material/twohanded/spear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uHY" = ( -/obj/item/clothing/shoes/boots/winter/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIa" = ( -/obj/item/weapon/storage/mre/menu9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIc" = ( -/obj/item/clothing/accessory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uId" = ( -/obj/item/clothing/accessory/storage/pouches/navy/fluff/saur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIf" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/kompot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIj" = ( -/obj/structure/sign/department/conference_room, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIn" = ( -/obj/item/weapon/book/manual/research_and_development, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIs" = ( -/obj/item/stack/wetleather, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIt" = ( -/obj/item/clothing/suit/space/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIu" = ( -/obj/item/clothing/accessory/badge/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIx" = ( -/obj/item/weapon/circuitboard/engineering_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIz" = ( -/obj/item/stack/tile/carpet/purplecarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIA" = ( -/obj/item/weapon/material/knife/machete/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIJ" = ( -/obj/item/clothing/accessory/scarf/zebra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIM" = ( -/obj/item/rig_module/sprinter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIQ" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIR" = ( -/obj/structure/prop/war/warhead1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uIU" = ( -/mob/living/simple_mob/tomato{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uIV" = ( -/obj/item/clothing/accessory/bowtie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJa" = ( -/obj/item/clothing/head/helmet/space/void/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJg" = ( -/obj/machinery/ntnet_relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJi" = ( -/obj/item/device/multitool/ai_detector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJk" = ( -/obj/structure/closet/crate/large/critter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJn" = ( -/obj/item/clothing/under/det, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJu" = ( -/obj/machinery/atmospherics/binary/pump/fuel/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJC" = ( -/obj/machinery/neonsign/cafe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJD" = ( -/obj/item/clothing/head/beret/solgov/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJF" = ( -/mob/living/simple_mob/animal/passive/fish/koi/poisonous, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"uJR" = ( -/obj/item/weapon/storage/box/nifsofts_mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJS" = ( -/obj/item/weapon/card/id/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJX" = ( -/obj/item/clothing/accessory/ribbon/solgov/peace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uJY" = ( -/obj/item/weapon/reagent_containers/glass/bottle/ickypak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKc" = ( -/obj/item/weapon/gun/energy/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKg" = ( -/mob/living/simple_mob/animal/passive/cat/tabiranth, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uKh" = ( -/obj/item/clothing/head/pin/flower/violet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKi" = ( -/obj/item/device/kit/paint/durand/seraph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKl" = ( -/obj/structure/closet/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKo" = ( -/obj/item/ammo_casing/a762, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKq" = ( -/obj/item/toy/plushie/red_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKs" = ( -/obj/item/weapon/gun/magnetic/railgun/automatic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKw" = ( -/obj/item/device/gps/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKB" = ( -/obj/item/device/bug_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKE" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/old/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKG" = ( -/obj/item/clothing/accessory/storage/brown_drop_pouches, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKJ" = ( -/obj/item/weapon/reagent_containers/food/snacks/packaged/darklunacake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKR" = ( -/obj/machinery/autolathe/armory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uKS" = ( -/obj/item/ammo_magazine/m16/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLj" = ( -/obj/item/clothing/suit/kimono/violet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLk" = ( -/obj/item/weapon/card/data/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLm" = ( -/obj/item/toy/mecha/seraph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLI" = ( -/obj/item/clothing/under/skirt/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLL" = ( -/obj/item/weapon/dnainjector/remoteview, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLW" = ( -/obj/item/organ/internal/augment/armmounted/shoulder/multiple/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLX" = ( -/obj/item/weapon/storage/box/survival/synth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uLY" = ( -/obj/item/organ/internal/cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMg" = ( -/obj/item/clothing/head/beret/solgov/health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMt" = ( -/obj/item/weapon/gun/projectile/ecureuil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMw" = ( -/obj/item/weapon/dnainjector/epimut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMz" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMC" = ( -/obj/item/weapon/reagent_containers/food/snacks/nacho, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMI" = ( -/obj/item/rig_module/maneuvering_jets, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMJ" = ( -/obj/item/weapon/circuitboard/cloning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMT" = ( -/obj/item/ammo_casing/a38, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uMW" = ( -/obj/item/clothing/under/bathrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNq" = ( -/obj/structure/sign/bigname/seg_5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNs" = ( -/obj/item/seeds/thaadra, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNx" = ( -/obj/item/slime_extract/sapphire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNC" = ( -/obj/item/weapon/reagent_containers/food/snacks/wormsickly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNI" = ( -/obj/item/weapon/card/emag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNL" = ( -/obj/item/ammo_magazine/hectate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNS" = ( -/obj/item/stack/material/glass{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uNU" = ( -/obj/structure/casino_table/blackjack_l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOb" = ( -/obj/item/weapon/storage/bag/circuits/mini/input/all, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOd" = ( -/obj/item/stack/flag/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOg" = ( -/obj/item/weapon/gun/projectile/revolver/nova, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOj" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/patron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOp" = ( -/obj/item/clothing/suit/captunic/capjacket/altevian_admiral, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOr" = ( -/obj/item/integrated_circuit/time, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOt" = ( -/obj/item/clothing/under/rank/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOz" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOA" = ( -/obj/item/weapon/gun/projectile/automatic/as24, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOB" = ( -/obj/item/weapon/gun/energy/lasertag/red/dom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOC" = ( -/obj/item/weapon/rms, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOI" = ( -/obj/item/weapon/circuitboard/pacman/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOJ" = ( -/obj/item/weapon/card/id/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOL" = ( -/obj/item/ammo_magazine/s44/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uOW" = ( -/obj/item/clothing/gloves/gauntlets/rig/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPp" = ( -/obj/item/clothing/head/psy_crown/gluttony, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPt" = ( -/obj/item/ammo_casing/microbattery/medical/burn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPx" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/imidazoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPE" = ( -/obj/item/ammo_magazine/ammo_box/b145/highvel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPK" = ( -/obj/machinery/vending/deluxe_boozeomat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPM" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/dexalinplus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPS" = ( -/obj/item/clothing/under/corp/grayson_jump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uPT" = ( -/obj/item/weapon/implant/health, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQf" = ( -/obj/item/weapon/gun/energy/mindflayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQj" = ( -/obj/item/weapon/firework_star/weather/confetti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQl" = ( -/mob/living/simple_mob/vore/aggressive/mimic/floor/tile{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uQA" = ( -/obj/structure/sign/double/maltesefalcon/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQB" = ( -/obj/item/clothing/suit/fluff/freddy/foxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQF" = ( -/obj/item/clothing/under/teshari/smock/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQL" = ( -/obj/item/clothing/mask/surgical/dust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQN" = ( -/obj/item/device/pda, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQR" = ( -/obj/mecha/combat/marauder/seraph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uQV" = ( -/obj/item/weapon/storage/backpack/dufflebag/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRa" = ( -/obj/item/weapon/cartridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRi" = ( -/obj/item/weapon/storage/backpack/santabag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRk" = ( -/obj/machinery/vending/blood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRm" = ( -/obj/item/clothing/head/beret/corp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRv" = ( -/obj/item/clothing/head/helmet/space/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRD" = ( -/obj/item/weapon/circuitboard/med_data, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRE" = ( -/mob/living/simple_mob/mechanical/hivebot/support/logistics{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uRH" = ( -/obj/item/device/radio/headset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRN" = ( -/obj/item/weapon/gun/projectile/colt/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRQ" = ( -/obj/item/weapon/pickaxe/five_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRR" = ( -/obj/item/weapon/reagent_containers/food/snacks/spellburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uRT" = ( -/obj/item/weapon/implant/organ/limbaugment/upperarm/surge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSd" = ( -/obj/item/clothing/gloves/ring/mariner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSj" = ( -/obj/item/weapon/dnainjector/antixray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSl" = ( -/obj/item/weapon/reagent_containers/food/snacks/hotchili, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSy" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSE" = ( -/obj/item/clothing/gloves/knuckledusters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSF" = ( -/obj/item/clothing/gloves/forensic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSH" = ( -/obj/item/stack/material/plastic{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSL" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSO" = ( -/obj/item/projectile/energy/bolt/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uSS" = ( -/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTa" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTf" = ( -/obj/structure/bonfire/permanent/sifwood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTl" = ( -/obj/item/clothing/head/hood/winter/medical/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTn" = ( -/obj/item/clothing/under/yw/rank/security/brigphys, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTz" = ( -/obj/item/clothing/head/helmet/space/void/refurb/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTA" = ( -/obj/item/clothing/accessory/gaiter/charcoal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTD" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mantle/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTF" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt/holy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTI" = ( -/obj/item/weapon/surgical/scalpel/amaryll_claws, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTJ" = ( -/obj/structure/sign/directions/security/internal_affairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTK" = ( -/obj/item/slimepotion/ferality, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTR" = ( -/obj/item/clothing/under/pj/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTV" = ( -/obj/item/weapon/storage/belt/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uTZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUf" = ( -/obj/structure/prop/machine/tradebeacon2/starts_active, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUp" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/manhattan_proj, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUr" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUs" = ( -/obj/item/weapon/card/id/civilian/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUt" = ( -/mob/living/simple_mob/humanoid/merc/ranged/laser{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uUu" = ( -/obj/item/weapon/storage/box/buns, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUx" = ( -/obj/item/clothing/under/gentlesuit/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUz" = ( -/obj/item/weapon/reagent_containers/food/snacks/bearchili, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUB" = ( -/obj/item/weapon/tool/crowbar/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUC" = ( -/obj/item/weapon/storage/belt/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUF" = ( -/obj/item/clothing/suit/storage/vest/heavy/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUG" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/carnoth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUH" = ( -/obj/item/rig_module/mounted/energy_blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUN" = ( -/obj/item/weapon/storage/backpack/messenger/sec/fluff/ivymoomoo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uUV" = ( -/obj/item/clothing/under/color/fjumpsuit/yellowf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVa" = ( -/obj/item/instrument/trumpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVi" = ( -/obj/item/stack/material/valhollide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVq" = ( -/obj/structure/closet/crate/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVB" = ( -/mob/living/simple_mob/animal/sif/diyaab{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uVD" = ( -/obj/item/clothing/ears/earring/dangle/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVE" = ( -/mob/living/silicon/robot/drone/swarm/gunner, -/turf/simulated/floor/atoll, -/area/survivalpod) -"uVK" = ( -/obj/vehicle/train/engine/quadbike/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVT" = ( -/obj/item/clothing/head/helmet/space/syndicate/black/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uVV" = ( -/obj/machinery/vending/magivend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWa" = ( -/obj/item/ammo_magazine/makarov/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWg" = ( -/obj/item/weapon/implantcase/backup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWm" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/para, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWq" = ( -/obj/item/weapon/rig/light, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWr" = ( -/obj/structure/drop_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWx" = ( -/obj/item/clothing/suit/storage/hooded/knight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWI" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWO" = ( -/obj/item/clothing/under/rank/engineer/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWV" = ( -/obj/item/clothing/ears/earring/dangle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uWY" = ( -/obj/item/weapon/circuitboard/mecha/durand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXc" = ( -/obj/item/clothing/shoes/boots/winter/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXe" = ( -/obj/item/paiparts/cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXh" = ( -/obj/item/clothing/suit/storage/hoodie/fluff/redax_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXs" = ( -/obj/item/clothing/head/helmet/space/void/merc/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXv" = ( -/obj/item/weapon/circuitboard/air_management, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXz" = ( -/obj/item/stack/tile/carpet/sblucarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXB" = ( -/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXD" = ( -/obj/item/dnalockingchip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXJ" = ( -/obj/item/clothing/under/yw/victsuit/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXM" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uXX" = ( -/obj/item/weapon/reagent_containers/glass/paint/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYc" = ( -/obj/item/ammo_magazine/m12gdrumjack/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYd" = ( -/obj/item/weapon/storage/bag/circuits/mini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYj" = ( -/obj/item/trash/ratcheese, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYl" = ( -/obj/item/ammo_magazine/m545/practice/ext, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYu" = ( -/obj/item/clothing/suit/storage/det_trench/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYD" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYI" = ( -/obj/item/weapon/flame/lighter/zippo/moff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYM" = ( -/obj/machinery/computer/security/telescreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYN" = ( -/obj/machinery/atmospherics/omni/atmos_filter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYT" = ( -/obj/item/device/ano_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYV" = ( -/obj/item/weapon/pen/blade/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uYY" = ( -/obj/item/clothing/suit/armor/fluff/madoka_chest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZh" = ( -/obj/structure/prop/poicanister, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZn" = ( -/obj/item/weapon/disk/limb/dsi_teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZs" = ( -/obj/item/clothing/under/dress/festivedress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZt" = ( -/obj/item/clothing/suit/storage/det_trench/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZz" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"uZO" = ( -/obj/item/toy/spinningtoy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vab" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/aformal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vad" = ( -/obj/item/weapon/melee/augment/blade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vae" = ( -/obj/item/weapon/circuitboard/holopad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vag" = ( -/obj/item/clothing/head/shiny_hood/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"val" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vap" = ( -/obj/item/ammo_casing/a762x25, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vaw" = ( -/obj/item/clothing/accessory/gaiter/gray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vaB" = ( -/obj/item/weapon/aiModule/reset, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vaK" = ( -/obj/item/weapon/circuitboard/prison_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vaN" = ( -/obj/item/clothing/shoes/cookflop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vaZ" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbc" = ( -/obj/item/weapon/reagent_containers/food/snacks/tastybread/sequel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbf" = ( -/mob/living/simple_mob/vore/alienanimals/skeleton/alt{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vbi" = ( -/obj/item/weapon/card/id/gateway/snowfield/class7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbo" = ( -/obj/item/integrated_circuit/logic/binary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbq" = ( -/obj/structure/closet/firecloset/full/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbr" = ( -/obj/structure/sign/atmos_n2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbt" = ( -/obj/machinery/door/airlock/angled_tgmc/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbu" = ( -/obj/item/ammo_magazine/m2024/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbw" = ( -/obj/item/clothing/head/beret/sec/navy/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbA" = ( -/obj/item/weapon/surgical/circular_saw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbE" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire/manned{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vbI" = ( -/obj/item/paiparts/board, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbK" = ( -/turf/simulated/fitness, -/area/survivalpod) -"vbL" = ( -/mob/living/simple_mob/animal/passive/cat/black, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vbW" = ( -/obj/item/clothing/under/det/fluff/octavious, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vbX" = ( -/obj/item/weapon/storage/mre/menu6, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vch" = ( -/obj/item/weapon/gun/energy/kinetic_accelerator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcm" = ( -/obj/effect/map_effect/perma_light/brighter{ - light_range = 9999 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcv" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcw" = ( -/obj/machinery/r_n_d/server, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcz" = ( -/obj/item/clothing/glasses/meson/aviator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcA" = ( -/mob/living/simple_mob/animal/sif/shantak{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vcG" = ( -/obj/item/clothing/accessory/medal/solgov/heart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcH" = ( -/obj/machinery/radiocarbon_spectrometer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcR" = ( -/obj/item/seeds/sporemycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcU" = ( -/obj/item/clothing/head/orangebandana, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcV" = ( -/obj/structure/prop/machine/tube/starts_down, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vcW" = ( -/obj/item/weapon/surgical/scalpel/laser2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdk" = ( -/obj/structure/closet/crate/secure/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdt" = ( -/mob/living/simple_mob/animal/passive/bird/european_robin, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vdD" = ( -/obj/item/weapon/cell/apc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdG" = ( -/obj/item/clothing/under/skirt/colorable/pencil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdM" = ( -/obj/item/clothing/accessory/jacket/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdR" = ( -/obj/item/clothing/suit/storage/hooded/toggle/colorable/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vdU" = ( -/obj/item/clothing/under/rank/trek/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vec" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ved" = ( -/obj/item/clothing/ears/earring/stud/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veg" = ( -/obj/structure/prop/war/tgmc_laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veh" = ( -/obj/structure/sign/levels/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vej" = ( -/obj/item/clothing/under/rank/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vek" = ( -/obj/structure/ore_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veo" = ( -/obj/item/weapon/plantspray/pests, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ver" = ( -/obj/structure/easel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vew" = ( -/obj/item/weapon/storage/box/glasses/cocktail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veC" = ( -/obj/item/weapon/storage/mrebag/menu4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veF" = ( -/obj/machinery/door/airlock/angled_bay/double/glass/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veM" = ( -/obj/item/weapon/reagent_containers/glass/bottle/unsorbitol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veP" = ( -/obj/item/toy/figure/rooster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veU" = ( -/obj/item/seeds/redtowermycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"veW" = ( -/obj/item/clothing/suit/storage/hooded/toggle/colorable/cropped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfg" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfq" = ( -/obj/item/weapon/storage/box/freezer/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfr" = ( -/obj/item/weapon/disk/nifsoft/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfs" = ( -/obj/machinery/door/airlock/alien/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfx" = ( -/obj/item/weapon/cartridge/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfO" = ( -/obj/item/weapon/cartridge/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfV" = ( -/obj/item/toy/plushie/face_hugger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vfY" = ( -/obj/item/clothing/accessory/jacket/altevian/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgl" = ( -/obj/item/weapon/storage/box/syndie_kit/deadliest_game, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgp" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/chief, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgr" = ( -/obj/structure/sign/directions/stairwell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgt" = ( -/obj/item/weapon/material/twohanded/fireaxe/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgD" = ( -/mob/living/simple_mob/animal/synx/ai/pet/greed/synth{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vgF" = ( -/obj/machinery/vending/entertainer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgG" = ( -/obj/item/weapon/card/id/gateway/snowfield/class5R, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgK" = ( -/obj/item/toy/figure/metacat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgO" = ( -/obj/mecha/combat/gorilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vgS" = ( -/obj/item/stack/flag/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhb" = ( -/obj/item/clothing/head/helmet/space/void/merc/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhc" = ( -/obj/item/weapon/storage/box/casino/costume_sexyclown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhg" = ( -/obj/structure/prop/blackbox/salamander_wreck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhy" = ( -/obj/item/organ/internal/heart/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhC" = ( -/obj/item/ammo_magazine/m9mmp90, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhE" = ( -/obj/item/weapon/storage/backpack/sport/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhF" = ( -/obj/item/clothing/head/beret/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhN" = ( -/obj/item/weapon/tank/phoron/onetankbomb/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhO" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/m16a2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhR" = ( -/obj/item/clothing/head/helmet/space/void/exploration/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhS" = ( -/obj/item/organ/internal/mmi_holder/posibrain/nano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhV" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "4" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vhZ" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vid" = ( -/obj/item/clothing/under/pants/mustangjeans/ripped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vig" = ( -/obj/item/clothing/suit/armor/pcarrier/blue/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vik" = ( -/obj/item/weapon/surgical/FixOVein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vip" = ( -/obj/structure/largecrate/hoverpod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viq" = ( -/obj/structure/sign/sec1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viw" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeykabob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viy" = ( -/obj/item/weapon/circuitboard/comm_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viG" = ( -/obj/item/ammo_magazine/m45/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viO" = ( -/obj/item/clothing/gloves/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viP" = ( -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viT" = ( -/obj/structure/salvageable/machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"viZ" = ( -/obj/item/stack/tile/floor/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjb" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/shot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjc" = ( -/obj/item/clothing/shoes/leg_guard/bulletproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjd" = ( -/obj/item/clothing/head/pumpkinhead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjg" = ( -/obj/item/clothing/gloves/gauntlets/rig/focalpoint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vji" = ( -/obj/item/weapon/rig/hazmat/fluff/sheri, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjj" = ( -/obj/item/clothing/head/hardhat/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjt" = ( -/obj/item/weapon/tracker_electronics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjv" = ( -/obj/item/weapon/book/codex/lore/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjB" = ( -/mob/living/simple_mob/mechanical/mecha/combat/phazon{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vjE" = ( -/obj/item/modular_computer/console, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjN" = ( -/obj/item/device/defib_kit/jumper_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjO" = ( -/obj/item/weapon/flame/candle/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjP" = ( -/obj/item/seeds/chiliseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjR" = ( -/obj/item/clothing/under/solgov/utility/fleet/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjU" = ( -/obj/item/integrated_circuit/trig/cotangent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vjZ" = ( -/obj/item/clothing/gloves/ring/material/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vka" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkg" = ( -/obj/item/weapon/material/harpoon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vki" = ( -/obj/item/clothing/under/fluff/shel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkw" = ( -/obj/item/clothing/glasses/artist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkA" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkK" = ( -/obj/structure/portal_event/resize/preset_shrink_hundred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkS" = ( -/obj/item/weapon/implantcase/armblade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkV" = ( -/obj/item/weapon/fossil/bone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkW" = ( -/obj/item/integrated_circuit/output/led, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkX" = ( -/obj/machinery/computer/shutoff_monitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vkY" = ( -/obj/item/weapon/reagent_containers/food/snacks/burger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vle" = ( -/mob/living/simple_mob/humanoid/cultist/initiate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vll" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "27" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vlr" = ( -/obj/item/ammo_magazine/clip/c45, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vlu" = ( -/obj/item/weapon/storage/box/fluff/quanah, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vlz" = ( -/obj/item/clothing/under/rank/medical/turtleneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vlE" = ( -/obj/item/weapon/stock_parts/scanning_module/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vma" = ( -/obj/item/weapon/storage/vore_egg/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vml" = ( -/obj/item/surplus_voucher/com, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmo" = ( -/obj/item/clothing/suit/space/void/responseteam/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vms" = ( -/obj/item/weapon/storage/vore_egg/special, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmu" = ( -/obj/item/clothing/head/halo/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmE" = ( -/obj/item/weapon/book/custom_library/religious/sungoddessofkorea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmG" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmN" = ( -/obj/item/weapon/gun/energy/medigun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vmX" = ( -/obj/item/clothing/head/caphat/hop/beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vne" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vni" = ( -/obj/item/weapon/card/id/civilian/journalist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnl" = ( -/obj/item/clothing/head/helmet/combat/crusader_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnu" = ( -/obj/item/slimepotion/unity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnv" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/space_up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnC" = ( -/obj/item/clothing/under/undersuit/explo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnD" = ( -/obj/item/clothing/head/fluff/wolfgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnH" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/laugh/jelly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnI" = ( -/obj/item/weapon/implanter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnJ" = ( -/obj/item/clothing/under/swimsuit/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnK" = ( -/obj/item/weapon/storage/box/backup_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnL" = ( -/obj/item/clothing/shoes/boots/cowboy/classic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnM" = ( -/obj/item/ammo_magazine/clip/c45/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnN" = ( -/obj/machinery/power/thermoregulator/southerncross, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnR" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnS" = ( -/obj/item/clothing/shoes/boots/fluff/siren, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnT" = ( -/obj/item/organ/internal/regennetwork/oxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnU" = ( -/obj/item/ammo_casing/microbattery/combat/final, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vnZ" = ( -/obj/item/weapon/circuitboard/jukebox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vob" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voh" = ( -/obj/item/clothing/head/helmet/flexitac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vos" = ( -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voA" = ( -/obj/machinery/clonepod/transhuman, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voB" = ( -/obj/item/clothing/head/collectable/flatcap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voE" = ( -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voF" = ( -/mob/living/simple_mob/animal/passive/fish/koi, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"voM" = ( -/obj/item/weapon/circuitboard/processor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"voT" = ( -/obj/item/clothing/head/justice/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpd" = ( -/obj/structure/closet/secure_closet/animal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpg" = ( -/obj/item/weapon/storage/box/monkeycubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpi" = ( -/obj/structure/sign/level/basement, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpq" = ( -/obj/item/clothing/accessory/poncho/thermal/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vps" = ( -/mob/living/simple_mob/animal/giant_spider/carrier/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vpw" = ( -/obj/item/weapon/storage/vore_egg/floppy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpy" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "30" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpz" = ( -/obj/item/clothing/accessory/armband/hydro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpF" = ( -/obj/item/clothing/mask/gas/sexymime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpI" = ( -/obj/item/weapon/spell/aura, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpQ" = ( -/mob/living/simple_mob/vox/armalis, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vpW" = ( -/obj/item/weapon/cell/device/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vpY" = ( -/obj/item/weapon/circuitboard/clonepod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqn" = ( -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vqr" = ( -/mob/living/simple_mob/vore/pakkun{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vqs" = ( -/obj/item/weapon/storage/box/fluff/raja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqz" = ( -/obj/item/ammo_magazine/ammo_box/b12g/beanbag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqD" = ( -/obj/item/weapon/reagent_containers/food/snacks/bearmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqS" = ( -/obj/item/weapon/card/id/silver/secretary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqU" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vqV" = ( -/obj/item/ammo_magazine/cell_mag/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vqW" = ( -/obj/item/clothing/under/away/daedalus/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrb" = ( -/obj/item/weapon/commcard/head/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vri" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrn" = ( -/obj/item/weapon/material/butterflyhandle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrq" = ( -/obj/item/clothing/under/color/fjumpsuit/redf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrs" = ( -/obj/item/clothing/accessory/tropical/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrG" = ( -/mob/living/simple_mob/animal/passive/cockroach{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vrJ" = ( -/obj/item/clothing/accessory/armor/helmcover/saare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrM" = ( -/obj/item/weapon/grenade/anti_photon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrV" = ( -/obj/item/weapon/storage/fancy/crackers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vrW" = ( -/obj/item/weapon/pen/crayon/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsb" = ( -/obj/item/weapon/handcuffs/cable/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsh" = ( -/obj/item/flag/nt/l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vso" = ( -/obj/item/clothing/head/santa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsB" = ( -/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsC" = ( -/obj/item/weapon/tool/wrench/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsD" = ( -/obj/item/clothing/suit/storage/toggle/hoodie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsH" = ( -/obj/item/integrated_circuit/converter/text2num, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsM" = ( -/obj/structure/casino_table/roulette_table, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsN" = ( -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vsY" = ( -/obj/item/weapon/storage/box/holobadge/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vte" = ( -/obj/item/slime_extract/metal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vti" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/ranged{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vtp" = ( -/obj/item/clothing/under/color/fjumpsuit/purplef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vtw" = ( -/obj/item/weapon/tank/jetpack/carbondioxide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vtA" = ( -/obj/item/weapon/circuitboard/unary_atmos/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vtR" = ( -/obj/machinery/hyperpad{ - dir = 9 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vtS" = ( -/obj/machinery/porta_turret/poi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vtY" = ( -/obj/structure/bed/chair/bay/comfy/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuh" = ( -/obj/item/weapon/disk/nifsoft/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vup" = ( -/obj/item/weapon/reagent_containers/food/snacks/browniesslice/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vur" = ( -/obj/item/clothing/gloves/ranger/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuu" = ( -/obj/item/seeds/lavenderseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuv" = ( -/obj/item/weapon/pen/crayon/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vux" = ( -/obj/item/clothing/accessory/tie/red_long, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuC" = ( -/obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuE" = ( -/obj/structure/largecrate/animal/teppi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuI" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuJ" = ( -/obj/item/clothing/suit/storage/solgov/dress/sifguard/senior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuK" = ( -/obj/machinery/drone_fabricator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuN" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/sr25c, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuO" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellyfishcore, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuQ" = ( -/obj/item/weapon/book/manual/wizzoffguide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vuY" = ( -/obj/structure/largecrate/birds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vva" = ( -/obj/item/device/xenoarch_multi_tool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvh" = ( -/obj/item/weedkiller/triclopyr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvA" = ( -/obj/item/weapon/storage/box/donkpockets/berry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvH" = ( -/obj/item/seeds/watermelonseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvI" = ( -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvL" = ( -/obj/item/weapon/surgical/scalpel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vvS" = ( -/obj/item/ammo_magazine/mfoam_dart/pistol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwa" = ( -/obj/item/clothing/under/hosformalmale, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwb" = ( -/obj/item/device/personal_shield_generator/security/strong, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwd" = ( -/obj/item/seeds/ambrosiagaiaseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwf" = ( -/obj/item/ammo_magazine/m44/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwg" = ( -/obj/item/weapon/grenade/flashbang/clusterbang, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwj" = ( -/obj/structure/largecrate/animal/otie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwm" = ( -/obj/item/flag/almach_p, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwo" = ( -/obj/item/clothing/accessory/chaps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwq" = ( -/obj/item/weapon/melee/baton/slime/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vws" = ( -/obj/item/clothing/under/rank/medical/scrubs/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwy" = ( -/obj/item/clothing/suit/storage/fluff/eviriik_3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwC" = ( -/obj/structure/grille/bay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwL" = ( -/mob/living/simple_mob/animal/sif/frostfly{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vwN" = ( -/mob/living/simple_mob/humanoid/merc/ranged/garand{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vwR" = ( -/obj/item/clothing/head/chameleon/changeling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vwY" = ( -/obj/item/clothing/head/hood/winter/centcom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxa" = ( -/obj/item/weapon/tank/oxygen/onetankbomb/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxc" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxd" = ( -/obj/machinery/vending/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxf" = ( -/obj/item/weapon/gun/projectile/automatic/cballistic/mp5a5, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxp" = ( -/obj/structure/sign/levels/ai_core, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxt" = ( -/obj/item/weapon/reagent_containers/food/snacks/bellefritter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxw" = ( -/obj/item/flag/almach_a, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vxN" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/horseburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyd" = ( -/mob/living/simple_mob/animal/passive/cow{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vyf" = ( -/obj/item/weapon/implantcase/dart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyi" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/viro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyj" = ( -/obj/machinery/chemical_dispenser/deluxe/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyo" = ( -/obj/item/device/survivalcapsule/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyw" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyx" = ( -/obj/item/weapon/reagent_containers/food/snacks/suppermattershard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyC" = ( -/obj/item/clothing/gloves/ranger/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyF" = ( -/obj/item/clothing/suit/storage/toggle/bomber/bombersec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyI" = ( -/obj/item/device/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyM" = ( -/obj/item/device/electronic_assembly/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyN" = ( -/obj/item/clothing/accessory/scarf/altevian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyO" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vyQ" = ( -/obj/item/clothing/under/lawyer/blue/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzb" = ( -/obj/item/weapon/cartridge/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzk" = ( -/obj/machinery/hyperpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzH" = ( -/obj/item/clothing/suit/storage/apron/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzL" = ( -/obj/item/weapon/pinpointer/shuttle/heist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzM" = ( -/obj/item/weapon/storage/box/fluff/swimsuit/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzU" = ( -/obj/item/weapon/storage/backpack/satchel/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vzZ" = ( -/obj/item/instrument/saxophone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAj" = ( -/obj/item/projectile/beam/precursor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAA" = ( -/obj/item/clothing/head/tesh_hood/standard/black_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAC" = ( -/obj/item/weapon/cell/crap/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAD" = ( -/obj/item/clothing/suit/storage/hazardvest/fluff/verin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAE" = ( -/obj/item/clothing/shoes/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vAX" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBb" = ( -/obj/item/clothing/suit/neocoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBj" = ( -/obj/item/trash/mars, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBk" = ( -/obj/structure/sign/department/atmos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBm" = ( -/obj/item/clothing/shoes/hitops/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBp" = ( -/obj/item/weapon/reagent_containers/food/drinks/sillycup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBq" = ( -/obj/structure/closet/secure_closet/captains, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBt" = ( -/obj/structure/sign/double/barsign, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBz" = ( -/obj/machinery/light_switch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBF" = ( -/obj/item/clothing/under/fluff/eliana_noya_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBM" = ( -/obj/structure/curtain/open/privacy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBS" = ( -/obj/structure/noticeboard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBU" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vBZ" = ( -/mob/living/simple_mob/animal/giant_spider/pepper/broodling{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vCs" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/soymilk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCx" = ( -/obj/structure/prop/alien/computer/camera/flipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCD" = ( -/obj/structure/closet/crate/mimic/closet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCF" = ( -/obj/item/weapon/reagent_containers/food/snacks/croissant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCI" = ( -/obj/structure/prop/machine/tgmc_console1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCL" = ( -/obj/item/weapon/circuitboard/microwave/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCQ" = ( -/obj/item/clothing/mask/luchador, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vCW" = ( -/obj/item/weapon/technomancer_core/rapid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDf" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/combat/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDi" = ( -/obj/item/clothing/under/swimsuit/cowbikini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDj" = ( -/obj/item/clothing/head/utility/army/urban, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDm" = ( -/obj/item/clothing/head/helmet/space/void/engineering/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDp" = ( -/obj/item/weapon/reagent_containers/food/snacks/sauerkraut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDs" = ( -/obj/machinery/door/airlock/angled_bay/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDC" = ( -/obj/item/weapon/implantcase/explosive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDD" = ( -/obj/item/weapon/disk/data, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDI" = ( -/obj/structure/ship_munition/disperser_charge/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDT" = ( -/obj/item/clothing/ears/earring/stud/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDV" = ( -/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/b, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vDY" = ( -/obj/item/clothing/under/qipao/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEe" = ( -/obj/item/mecha_parts/mecha_equipment/tool/passenger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEh" = ( -/obj/item/toy/plushie/borgplushie/drake/trauma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEi" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEp" = ( -/obj/structure/closet/crate/xion, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEu" = ( -/obj/item/clothing/head/beret/solgov/fleet/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEv" = ( -/obj/item/weapon/reagent_containers/food/snacks/zestfish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEz" = ( -/obj/item/clothing/head/blackngoldheaddress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEG" = ( -/obj/machinery/door/airlock/angled_tgmc/prep/prep_alpha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEN" = ( -/obj/item/clothing/under/pants/chaps/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vEX" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFb" = ( -/obj/item/clothing/under/fluff/sakura_hokkaido_kimono, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFd" = ( -/obj/item/weapon/sword/fluff/revolver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFg" = ( -/obj/structure/barricade/cutout/fluke, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFh" = ( -/obj/machinery/vending/fooddessert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFp" = ( -/obj/machinery/disposal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFq" = ( -/obj/item/weapon/material/whip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFt" = ( -/obj/item/ammo_casing/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFz" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFD" = ( -/obj/machinery/crystal/lava, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFK" = ( -/obj/structure/sign/warning/bomb_range, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFO" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFU" = ( -/obj/item/clothing/under/pants/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vFY" = ( -/obj/item/trash/small_bowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGa" = ( -/obj/item/clothing/head/beret/corp/hedberg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGg" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGl" = ( -/obj/item/weapon/storage/backpack/cultpack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGs" = ( -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGA" = ( -/obj/item/weapon/gun/projectile/shotgun/compact/warden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGG" = ( -/obj/item/clothing/under/solgov/utility/fleet/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGO" = ( -/obj/item/clothing/under/sexymime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGQ" = ( -/obj/item/clothing/mask/gas/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGR" = ( -/obj/item/clothing/under/lawyer/purpsuit/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGS" = ( -/obj/item/slimepotion/shrink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGX" = ( -/obj/structure/bed/chair/oldsofa/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vGY" = ( -/obj/structure/reagent_dispensers/cookingoil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHh" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/slug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHk" = ( -/obj/item/clothing/accessory/sweater/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHn" = ( -/obj/item/seeds/ambrosiavulgarisseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHq" = ( -/obj/item/weapon/reagent_containers/pill/bicaridine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHy" = ( -/obj/item/seeds/ghostchiliseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHA" = ( -/obj/vehicle/train/engine/quadbike/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHF" = ( -/obj/item/weapon/storage/box/donkpockets/honk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHM" = ( -/obj/item/device/modkit_conversion/fluff/harmonysuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHN" = ( -/obj/structure/closet/crate/oldreactor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHP" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/kebab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHS" = ( -/obj/item/ammo_casing/microbattery/combat/stun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vHY" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIh" = ( -/obj/item/clothing/under/rank/cargo/jeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIp" = ( -/obj/item/weapon/computer_hardware/hard_drive/super, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIr" = ( -/obj/item/weapon/storage/belt/fannypack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIv" = ( -/obj/item/ammo_magazine/m45uzi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIz" = ( -/obj/item/weapon/flame/lighter/zippo/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIC" = ( -/obj/machinery/door/airlock/alien/blue/locked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIF" = ( -/obj/item/ammo_magazine/m762svd/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIH" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIN" = ( -/obj/item/ammo_magazine/m545/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIP" = ( -/obj/item/weapon/storage/belt/utility/holding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIR" = ( -/obj/machinery/auto_cloner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIS" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_mountain_wind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIX" = ( -/obj/machinery/power/am_control_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vIY" = ( -/obj/structure/sign/directions, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJa" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceacillin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJg" = ( -/obj/item/seeds/plastiseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJk" = ( -/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vJo" = ( -/obj/item/clothing/ears/skrell/band, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJA" = ( -/obj/item/clothing/ears/earring/stud/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJB" = ( -/obj/mecha/combat/phazon/scree, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJL" = ( -/obj/item/weapon/vehicle_assembly/quadbike, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJO" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb09, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vJR" = ( -/obj/structure/closet/walllocker_double/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKg" = ( -/obj/item/organ/internal/liver/replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKo" = ( -/obj/structure/showcase/yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKq" = ( -/obj/item/clothing/accessory/armor/armorplate/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKx" = ( -/obj/machinery/door/airlock/angled_tgmc/personal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKJ" = ( -/obj/item/weapon/dnainjector/antihulk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKK" = ( -/obj/item/clothing/under/rank/pilot1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKM" = ( -/obj/vehicle/train/trolley/trailer/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKN" = ( -/obj/item/clothing/head/tesh_hood/standard/black_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKS" = ( -/obj/item/clothing/under/dress/sundress_pinkbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKT" = ( -/obj/item/stack/tile/carpet/purcarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKV" = ( -/obj/item/weapon/spell/passwall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vKY" = ( -/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLb" = ( -/obj/item/weapon/storage/pouch/flares/full_flare, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLc" = ( -/obj/item/weapon/reagent_containers/food/snacks/browniesslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLg" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLl" = ( -/obj/item/organ/internal/augment/armmounted/shoulder/multiple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLt" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/protein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLx" = ( -/obj/item/clothing/gloves/gauntlets/rig/ch/clockwork, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLy" = ( -/obj/item/clothing/suit/suspenders/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLF" = ( -/obj/item/clothing/under/suit_jacket/charcoal/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLK" = ( -/obj/structure/simple_door/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLN" = ( -/obj/vehicle/boat/dragon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLP" = ( -/obj/item/weapon/material/twohanded/baseballbat/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vLV" = ( -/obj/item/toy/figure/barking_dog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMj" = ( -/obj/item/weapon/card/id/event/accessset/itg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMm" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMs" = ( -/obj/item/clothing/under/skirt/outfit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMw" = ( -/obj/machinery/botany/editor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMA" = ( -/obj/item/weapon/storage/lockbox/loyalty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMC" = ( -/obj/item/weapon/material/butterfly/saw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMI" = ( -/obj/structure/closet/thunderdome/tdred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMP" = ( -/obj/structure/closet/emergsuit_wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vMZ" = ( -/obj/item/weapon/storage/box/fluff/melissa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNl" = ( -/obj/item/weapon/reagent_containers/food/snacks/frostbelle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNm" = ( -/obj/item/weapon/pickaxe/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNs" = ( -/obj/structure/closet/crate/large/secure/heph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNz" = ( -/obj/item/weapon/storage/backpack/satchel/norm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNB" = ( -/obj/structure/bed/roller, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vND" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNG" = ( -/obj/item/weapon/reagent_containers/pill/adminordrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNP" = ( -/obj/item/clothing/under/swimsuit/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNS" = ( -/obj/item/clothing/shoes/hitops/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vNY" = ( -/obj/item/clothing/under/solgov/utility/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOc" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOd" = ( -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOe" = ( -/obj/item/weapon/pickaxe/two_pick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOh" = ( -/obj/item/clothing/under/solgov/mildress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOj" = ( -/obj/machinery/door/blast/regular/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOm" = ( -/obj/structure/prop/dominator/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOv" = ( -/obj/machinery/porta_turret/stationary/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOx" = ( -/obj/item/clothing/glasses/omnihud/rnd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOE" = ( -/obj/item/weapon/melee/energy/sword/ionic_rapier, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOG" = ( -/obj/item/weapon/storage/backpack/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOH" = ( -/obj/item/weapon/implant/reagent_generator/jasmine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOI" = ( -/obj/item/clothing/suit/security/navywarden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOQ" = ( -/obj/item/clothing/suit/storage/toggle/bomber/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vOT" = ( -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPc" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/water, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPg" = ( -/obj/item/clothing/suit/space/santa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPk" = ( -/obj/item/ammo_casing/a545/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPo" = ( -/obj/item/clothing/accessory/gaiter/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPw" = ( -/obj/machinery/disease2/isolator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPJ" = ( -/obj/structure/closet/crate/freezer/zenghu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPT" = ( -/obj/item/clothing/head/sunflower_crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPU" = ( -/obj/item/weapon/gun/energy/crossbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vPZ" = ( -/obj/item/trash/ratveg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQa" = ( -/obj/machinery/portable_atmospherics/powered/reagent_distillery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQg" = ( -/obj/item/trash/ratpackturkey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQq" = ( -/obj/item/seeds/wurmwoad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQv" = ( -/obj/item/clothing/accessory/armor/legguards/navy/fluff/saur_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQw" = ( -/obj/item/clothing/accessory/fluff/quanah_collar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQG" = ( -/obj/item/seeds/mtearseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQH" = ( -/obj/item/integrated_circuit/output/screen/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQJ" = ( -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQK" = ( -/obj/item/clothing/head/fluff/hairflowerpin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQP" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/peridaxon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vQT" = ( -/obj/item/clothing/gloves/gauntlets/rig/fluff/saur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRb" = ( -/obj/item/clothing/suit/space/void/refurb/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRv" = ( -/mob/living/simple_mob/animal/space/bear{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vRw" = ( -/obj/item/ammo_magazine/m12gdrum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRz" = ( -/obj/item/clothing/accessory/medal/gold/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRJ" = ( -/obj/item/weapon/autopsy_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRK" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/dropship1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRO" = ( -/obj/item/integrated_circuit/arithmetic/average, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRP" = ( -/obj/item/organ/internal/eyes/robot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRU" = ( -/obj/item/clothing/suit/storage/hooded/knight/galahad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRW" = ( -/obj/item/weapon/paper/dockingcodes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vRZ" = ( -/obj/item/clothing/accessory/gaiter/snow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSa" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSh" = ( -/obj/item/weapon/gun/energy/pulse_rifle/compact, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSi" = ( -/obj/structure/sign/directions/shuttle_bay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSo" = ( -/obj/structure/closet/crate/mimic/safe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSp" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSq" = ( -/obj/structure/alien/membrane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSs" = ( -/obj/item/organ/internal/liver/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSt" = ( -/obj/item/clothing/suit/syndicatefake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSD" = ( -/obj/item/clothing/suit/storage/miljacket/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSF" = ( -/obj/item/weapon/circuitboard/shield_cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSH" = ( -/obj/item/clothing/suit/storage/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSJ" = ( -/obj/item/clothing/shoes/combat/wolfbrigade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSK" = ( -/obj/item/clothing/suit/armor/pcarrier/laserproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSL" = ( -/obj/item/clothing/under/cuttop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSM" = ( -/obj/item/clothing/under/solgov/utility/army/desert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vSY" = ( -/obj/item/clothing/suit/dress/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTa" = ( -/obj/item/device/camera_bug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTc" = ( -/obj/item/weapon/rig/zero/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTe" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTu" = ( -/obj/item/ammo_magazine/m762enbloc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTy" = ( -/obj/item/clothing/accessory/scarf/altevian/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTA" = ( -/obj/item/clothing/head/helmet/space/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTH" = ( -/obj/item/weapon/storage/box/glasses/meta/metapint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTI" = ( -/obj/item/clothing/gloves/ring/material/tin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTJ" = ( -/obj/item/clothing/head/cone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vTV" = ( -/obj/machinery/telecomms/relay, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUa" = ( -/obj/item/device/cataloguer/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUd" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUm" = ( -/obj/item/weapon/flame/candle/everburn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUn" = ( -/obj/item/clothing/accessory/fluff/eviriik_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUp" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/common, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUv" = ( -/obj/item/weapon/storage/backpack/messenger/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUA" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/armadillo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUB" = ( -/obj/item/clothing/head/hood/robin_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUH" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUJ" = ( -/obj/item/trash/tuna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUK" = ( -/obj/item/weapon/circuitboard/mecha/phazon/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUM" = ( -/obj/machinery/power/rad_collector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUP" = ( -/obj/item/clothing/head/pilot_vr/mbill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vUV" = ( -/mob/living/simple_mob/otie/cotie{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vUY" = ( -/mob/living/simple_mob/vore/aggressive/dragon/virgo3b{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vVa" = ( -/obj/item/stack/tile/carpet/blucarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVf" = ( -/mob/living/simple_mob/animal/passive/penguin{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"vVm" = ( -/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVn" = ( -/obj/item/extraction_pack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVq" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVr" = ( -/obj/item/rig_module/atmos_shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVs" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVu" = ( -/obj/item/weapon/reagent_containers/food/snacks/bucheslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVv" = ( -/obj/item/clothing/glasses/hud/health/tajblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVA" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVB" = ( -/obj/item/toy/plushie/carp/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVC" = ( -/obj/item/weapon/storage/box/syndie_kit/combat_armor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVD" = ( -/obj/item/clothing/under/undersuit/sec/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVI" = ( -/obj/item/clothing/head/cowboy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVK" = ( -/obj/structure/prop/machine/nt_cruciforge/starts_working, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVT" = ( -/obj/item/clothing/head/helmet/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vVV" = ( -/obj/item/weapon/storage/belt/medical/emt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWa" = ( -/obj/item/ammo_casing/a357, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWh" = ( -/obj/item/clothing/under/cyberpunkharness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWi" = ( -/obj/item/weapon/deck/cah/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWj" = ( -/obj/structure/prop/war/tgmc_missile_rack/single, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWq" = ( -/obj/machinery/hologram/projector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWs" = ( -/obj/item/mecha_parts/mecha_equipment/tool/orescanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWt" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWv" = ( -/obj/item/clothing/suit/armor/crusader, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWy" = ( -/obj/item/ammo_magazine/clip/c762/hunter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWA" = ( -/obj/item/weapon/computer_hardware/processor_unit/photonic/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWE" = ( -/obj/item/clothing/glasses/hud/security/prescription, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWH" = ( -/obj/item/weapon/storage/box/wings/bucket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWJ" = ( -/obj/structure/door_assembly/door_assembly_fre, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWQ" = ( -/obj/structure/closet/l3closet/general, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWR" = ( -/obj/item/weapon/reagent_containers/food/snacks/eggbowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vWV" = ( -/obj/item/clothing/head/santa/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXa" = ( -/obj/item/weapon/gun/projectile/cell_loaded/combat/prototype, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXd" = ( -/obj/structure/sign/directions/bar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXg" = ( -/obj/item/clothing/under/solgov/pt/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXj" = ( -/obj/item/clothing/under/summerdress/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXm" = ( -/obj/item/stack/cable_coil/alien/blood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXo" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "22" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXt" = ( -/obj/item/ammo_magazine/tp23/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXw" = ( -/obj/item/weapon/storage/secure/briefcase/nerd_pack_med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXx" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXy" = ( -/obj/structure/atmospheric_retention_field, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXC" = ( -/obj/item/clothing/suit/wizrobe/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vXP" = ( -/obj/item/clothing/accessory/armband/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYa" = ( -/obj/item/flag/catpirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYd" = ( -/obj/item/stack/tile/floor/eris/steel/monofloor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYg" = ( -/obj/machinery/computer/curer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYx" = ( -/obj/structure/largecrate/animal/guardbeast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYB" = ( -/obj/structure/closet/crate/freezer/nanotrasen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYC" = ( -/obj/item/integrated_circuit/logic/unary, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYH" = ( -/obj/item/integrated_circuit/arithmetic/square_root, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYI" = ( -/obj/item/weapon/weldingtool/tubefed/survival, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYJ" = ( -/obj/machinery/door/window/holowindoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYK" = ( -/obj/item/clothing/under/lawyer/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYN" = ( -/obj/item/clothing/head/helmet/space/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYP" = ( -/obj/item/clothing/gloves/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYQ" = ( -/obj/item/device/electronic_assembly/simple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vYV" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZa" = ( -/obj/item/weapon/storage/mrebag/menu2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZl" = ( -/obj/item/weapon/card/id/centcom/station/fluff/joanbadge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZm" = ( -/obj/mecha/combat/phazon/janus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZD" = ( -/obj/item/mecha_parts/part/phazon_left_arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZJ" = ( -/obj/item/clothing/suit/space/void/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZL" = ( -/obj/item/ammo_casing/microbattery/combat/shotstun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZM" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZN" = ( -/obj/item/weapon/bedsheet/pirate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"vZR" = ( -/obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wac" = ( -/obj/item/ammo_magazine/m16/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wad" = ( -/obj/item/weapon/flame/lighter/zippo/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wak" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/chaitea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wan" = ( -/obj/item/clothing/under/color/aqua, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"war" = ( -/obj/item/clothing/under/swimsuit/fluff/zara_uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"was" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wav" = ( -/obj/item/clothing/glasses/hud/security/eyepatch2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wax" = ( -/obj/structure/table/reinforced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"waL" = ( -/obj/item/clothing/accessory/antediluvian/loincloth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"waQ" = ( -/obj/item/ammo_magazine/ammo_box/b12g/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"waV" = ( -/obj/machinery/vending/wallmed2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbd" = ( -/obj/item/clothing/head/helmet/combat/imperial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbh" = ( -/obj/item/weapon/toy/snowglobe/tether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbi" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/medical{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbk" = ( -/obj/machinery/atmospheric_field_generator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbx" = ( -/obj/item/weapon/tank/phoron/onetankbomb/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbE" = ( -/obj/item/weapon/handcuffs/cable/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbI" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbL" = ( -/mob/living/simple_mob/vore/alienanimals/spooky_ghost{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wbQ" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbR" = ( -/obj/item/seeds/riceseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wbU" = ( -/obj/item/integrated_circuit/power/transmitter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wch" = ( -/obj/item/weapon/gun/energy/particle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wck" = ( -/obj/machinery/vr_sleeper/alien/beta_replicant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcm" = ( -/obj/item/device/flashlight/color/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcw" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/melonliquor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcD" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcL" = ( -/obj/item/weapon/tank/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcW" = ( -/obj/structure/sign/periodic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wcZ" = ( -/obj/item/weapon/storage/pill_bottle/corophizine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wda" = ( -/obj/item/clothing/under/shiny/leotard/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdb" = ( -/obj/item/seeds/killertomatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdm" = ( -/obj/item/clothing/shoes/flipflop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdn" = ( -/mob/living/simple_mob/shadekin/red/rakshasa{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wdu" = ( -/mob/living/simple_mob/vore/aggressive/dino{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wdx" = ( -/obj/item/clothing/suit/storage/trench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdy" = ( -/obj/item/clothing/head/beret/solgov/fleet/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdA" = ( -/obj/structure/ghost_pod/ghost_activated/swarm_drone/event/gunner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdI" = ( -/obj/item/weapon/refill_cartridge/autoname/drink/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdN" = ( -/obj/item/weapon/book/manual/supermatter_engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdR" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wdY" = ( -/obj/item/weapon/storage/bag/circuits/mini/input, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wea" = ( -/obj/structure/loot_pile/mecha/ripley/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wed" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/keltec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wee" = ( -/obj/item/device/tankassemblyproxy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wef" = ( -/obj/item/clothing/under/fluff/wolfgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"weh" = ( -/obj/item/weapon/circuitboard/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wej" = ( -/obj/structure/extinguisher_cabinet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wep" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/kelotane, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wer" = ( -/obj/machinery/disperser/front{ - dir = 4 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"weF" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"weS" = ( -/obj/item/ammo_magazine/ammo_box/b10mm/emp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfa" = ( -/obj/structure/closet/secure_closet/injection, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wff" = ( -/obj/item/clothing/head/helmet/space/syndicate/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfh" = ( -/obj/item/projectile/beam/burstlaser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfp" = ( -/obj/item/clothing/under/lawyer/purpsuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfC" = ( -/obj/item/ammo_casing/a145, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfE" = ( -/obj/structure/loot_pile/mecha/marauder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wfJ" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgp" = ( -/obj/item/clothing/under/serviceoveralls, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgu" = ( -/obj/item/weapon/dnainjector/antiblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgx" = ( -/obj/item/clothing/suit/storage/toggle/sci_dep_jacket, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgz" = ( -/obj/item/weapon/pack/cardemon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgA" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgF" = ( -/obj/item/toy/figure/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgI" = ( -/obj/item/clothing/accessory/collar/fluff/goldenstring, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgO" = ( -/obj/item/clothing/shoes/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wgR" = ( -/obj/item/clothing/head/wizard/amp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whd" = ( -/mob/living/simple_mob/animal/passive/tindalos{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"whe" = ( -/obj/item/clothing/head/helmet/space/void/excelsior, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whm" = ( -/obj/machinery/vending/foodmeat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whn" = ( -/obj/item/clothing/shoes/leg_guard/flexitac, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whq" = ( -/obj/structure/closet/syndicate/nuclear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whs" = ( -/obj/item/clothing/under/away/daedalus/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whw" = ( -/obj/item/weapon/spell/reflect, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whK" = ( -/obj/item/weapon/toy/desk/newtoncradle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"whQ" = ( -/obj/machinery/fitness/punching_bag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wib" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wic" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wii" = ( -/obj/item/projectile/beam/heavylaser/cannon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiq" = ( -/obj/structure/prop/rock/water, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiF" = ( -/obj/item/device/reagent_scanner/adv, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiL" = ( -/obj/item/toy/plushie/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiM" = ( -/obj/structure/closet/crate/mimic/closet/cointoss, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiP" = ( -/obj/item/weapon/circuitboard/recharger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiT" = ( -/obj/item/weapon/tool/screwdriver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wiW" = ( -/obj/item/ammo_magazine/ammo_box/b12g/flash, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjl" = ( -/obj/item/clothing/suit/cultrobes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjp" = ( -/obj/structure/closet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjB" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjE" = ( -/mob/living/simple_mob/animal/passive/mouse{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wjH" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjM" = ( -/obj/item/clothing/accessory/poncho/thermal/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjT" = ( -/obj/structure/prop/esoteric/eotp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wjW" = ( -/obj/item/trash/dipbowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkj" = ( -/obj/structure/door_assembly/door_assembly_voidcraft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkp" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wks" = ( -/obj/item/clothing/suit/varsity/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkG" = ( -/obj/item/clothing/under/teshari/smock/dress/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkJ" = ( -/obj/item/ammo_magazine/tp23/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkN" = ( -/obj/item/weapon/storage/backpack/sport/hyd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkQ" = ( -/obj/item/organ/internal/spleen/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wkT" = ( -/mob/living/simple_mob/animal/passive/mimepet{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wkX" = ( -/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/syndislug{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wla" = ( -/obj/item/clothing/gloves/gauntlets/rig/hazmat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlc" = ( -/obj/item/weapon/card/id/exploration/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wld" = ( -/obj/item/clothing/head/helmet/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wll" = ( -/obj/item/weapon/storage/bag/circuits/mini/manipulation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wln" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/meatshield{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wlu" = ( -/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/a, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wly" = ( -/obj/item/clothing/gloves/boxing/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlz" = ( -/obj/item/frame/lightswitch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlB" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlG" = ( -/obj/item/weapon/storage/box/PDAs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlH" = ( -/obj/item/clothing/head/helmet/ert/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlK" = ( -/obj/machinery/atmospherics/binary/algae_farm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlM" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitepurple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlP" = ( -/obj/item/clothing/gloves/ring/wedding/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlS" = ( -/obj/item/organ/internal/augment/armmounted/hand/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlT" = ( -/obj/machinery/power/rtg/reg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlU" = ( -/obj/structure/sign/levels/security/forensics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wlZ" = ( -/obj/structure/bed/chair/sofa/corner/purp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmb" = ( -/obj/item/clothing/suit/storage/hooded/hoodie/purpletrim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmf" = ( -/obj/item/device/pda/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmh" = ( -/obj/item/weapon/reagent_containers/food/snacks/eggroll, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmi" = ( -/obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmm" = ( -/obj/item/integrated_circuit/passive/power/chemical_cell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmp" = ( -/obj/item/clothing/head/cowboy/rustler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wms" = ( -/obj/item/weapon/paper/card, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmu" = ( -/obj/item/ammo_casing/macrobattery/buff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmG" = ( -/obj/item/ammo_magazine/m41/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmM" = ( -/obj/item/clothing/mask/gas/sechailer/swat/hos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wmZ" = ( -/obj/item/weapon/circuitboard/arcade/orion_trail, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnb" = ( -/obj/structure/simple_door/flock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnc" = ( -/obj/item/ammo_casing/a762x39/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnk" = ( -/obj/item/weapon/lipstick/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnn" = ( -/obj/machinery/suspension_gen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnp" = ( -/obj/item/clothing/head/poppy_crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnu" = ( -/obj/item/clothing/under/pants/baggy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnx" = ( -/obj/item/clothing/under/solgov/utility/army/olive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnz" = ( -/obj/item/weapon/cartridge/lawyer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnD" = ( -/obj/item/clothing/under/shorts/cshorts/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnF" = ( -/obj/item/weapon/rig/pmc/commander/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnH" = ( -/obj/item/weapon/folder/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wnX" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wob" = ( -/obj/structure/sign/flag/almach_p/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wog" = ( -/obj/item/ammo_magazine/cell_mag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wor" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/milk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wou" = ( -/obj/item/seeds/replicapod, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wov" = ( -/obj/item/clothing/head/helmet/space/void/heck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"woD" = ( -/obj/structure/loot_pile/mecha/marauder/seraph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"woG" = ( -/obj/item/clothing/under/explorer/utility/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"woI" = ( -/obj/structure/closet/secure_closet/miner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"woU" = ( -/obj/item/weapon/reagent_containers/glass/bottle/healing_nanites, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"woY" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpd" = ( -/obj/item/device/detective_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpj" = ( -/obj/structure/barricade, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpk" = ( -/obj/item/device/integrated_electronics/wirer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpu" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpv" = ( -/obj/item/weapon/storage/trinketbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpN" = ( -/obj/item/weapon/storage/fancy/egg_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpQ" = ( -/obj/structure/sign/securearea, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpS" = ( -/obj/item/stack/tile/floor/eris/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wpW" = ( -/obj/item/weapon/storage/box/syndie_kit/ewar_voice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqe" = ( -/obj/item/weapon/dice/d10, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqg" = ( -/obj/item/clothing/head/helmet/space/vox/carapace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqh" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/inaprovaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wql" = ( -/obj/item/clothing/suit/bio_suit/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqm" = ( -/obj/item/modular_computer/console/preset/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqq" = ( -/obj/item/capture_crystal/dustjumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqt" = ( -/obj/item/weapon/reagent_containers/glass/bottle/stoxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqy" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/metalglen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqB" = ( -/obj/structure/ghost_pod/manual/human, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqF" = ( -/obj/item/weapon/pen/fountain3, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqI" = ( -/obj/item/clothing/shoes/primitive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqM" = ( -/obj/item/weapon/disk/data/demo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqR" = ( -/obj/item/clothing/suit/storage/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wqX" = ( -/obj/item/weapon/storage/fancy/heartbox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrd" = ( -/obj/machinery/door/airlock/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wre" = ( -/obj/item/weapon/storage/belt/ranger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrl" = ( -/obj/vehicle/train/engine/quadbike/snowmobile/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrp" = ( -/obj/structure/prop/prism/incremental/externalcont, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrq" = ( -/obj/item/weapon/gun/projectile/revolver/cerberus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrr" = ( -/obj/item/weapon/secbot_assembly/ed209_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrs" = ( -/mob/living/simple_mob/vore/aggressive/rat{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wrD" = ( -/obj/structure/sign/scenery/overlay/vine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrE" = ( -/obj/item/clothing/head/pelt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrY" = ( -/obj/item/clothing/under/lawyer/bluesuit/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wrZ" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/dexalin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsa" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsf" = ( -/obj/item/weapon/thecake_layer/six, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsg" = ( -/obj/structure/largecrate/animal/catslug, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsh" = ( -/obj/item/clothing/gloves/vox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsj" = ( -/obj/item/seeds/rose/blood, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsl" = ( -/obj/item/clothing/head/soft/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsx" = ( -/obj/item/device/modkit_conversion/fluff/jessica_sec_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsF" = ( -/obj/structure/prop/dominator/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsG" = ( -/obj/item/mecha_parts/part/janus_right_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsJ" = ( -/obj/structure/sign/levels/security/internal_affairs, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsL" = ( -/obj/structure/sign/directions/medical/morgue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsR" = ( -/obj/machinery/fitness/punching_bag/clown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsV" = ( -/obj/structure/closet/secure_closet/RD, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsX" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsY" = ( -/obj/item/toy/sword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wsZ" = ( -/obj/structure/bed/chair/wood/wings, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wta" = ( -/obj/item/clothing/under/rank/nullsuit/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wte" = ( -/obj/item/weapon/dice/loaded/ceph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtf" = ( -/obj/item/weapon/spell/dispel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wth" = ( -/obj/item/clothing/head/helmet/ert/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtj" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtt" = ( -/obj/item/weapon/circuitboard/mecha, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtu" = ( -/obj/item/toy/plushie/teshari/y_yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtv" = ( -/obj/item/weapon/storage/box/monkeycubes/sarucubes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtx" = ( -/obj/item/ammo_magazine/ammo_box/cap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wty" = ( -/obj/item/weapon/circuitboard/dispersermiddle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtz" = ( -/obj/item/clothing/suit/dress/solgov/fleet/sailor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtA" = ( -/obj/item/weapon/card/id/medical/head, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtD" = ( -/obj/machinery/mass_driver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtN" = ( -/obj/item/clothing/under/explorer/utility/command/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wtQ" = ( -/obj/item/clothing/under/rank/talon/proper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wue" = ( -/obj/item/weapon/storage/box/syndie_kit/spy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuk" = ( -/obj/item/clothing/glasses/omnihud/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wus" = ( -/obj/structure/bed/chair/bay/comfy/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuu" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wux" = ( -/obj/item/toy/plushie/black_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuC" = ( -/obj/item/weapon/rig/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuD" = ( -/obj/item/clothing/head/tesh_hood/standard/black_lightgrey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuH" = ( -/obj/item/weapon/storage/box/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuQ" = ( -/obj/item/ammo_magazine/s44/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wuS" = ( -/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wve" = ( -/obj/machinery/portable_atmospherics/canister/empty/phoron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvn" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvt" = ( -/obj/item/device/survivalcapsule/superpose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvu" = ( -/obj/item/weapon/rcd/shipwright, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvv" = ( -/obj/item/clothing/gloves/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvy" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvD" = ( -/obj/item/clothing/mask/gas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvQ" = ( -/obj/vehicle/train/security/trolley, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wvW" = ( -/mob/living/simple_mob/mobs_monsters/clowns/punished{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wwc" = ( -/obj/machinery/pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwd" = ( -/obj/item/clothing/accessory/solgov/cultex_patch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwe" = ( -/obj/item/weapon/cartridge/storage/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwl" = ( -/obj/item/stack/tile/floor/eris/dark/danger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwr" = ( -/obj/item/ammo_casing/macrobattery, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwt" = ( -/obj/item/clothing/suit/storage/hooded/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwu" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/suppermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwy" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwB" = ( -/obj/item/clothing/under/rank/chef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wwL" = ( -/obj/item/clothing/under/solgov/service/sifguard/command/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxa" = ( -/obj/item/weapon/reagent_containers/food/drinks/teapot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxc" = ( -/obj/item/stack/tile/floor/eris/steel/brown_perforated, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxl" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/security/santa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxp" = ( -/obj/item/clothing/suit/cultrobes/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxy" = ( -/obj/structure/outcrop/lead, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxz" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxH" = ( -/obj/item/weapon/gun/energy/gun/taser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxK" = ( -/obj/item/integrated_circuit/smart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxL" = ( -/obj/item/ammo_casing/a44/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wxW" = ( -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/ascended, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyj" = ( -/obj/item/clothing/under/christmas/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyp" = ( -/obj/item/weapon/card/id/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyt" = ( -/obj/item/weapon/reagent_containers/food/snacks/xenoburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyz" = ( -/mob/living/simple_mob/vore/alienanimals/succlet/poison, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wyA" = ( -/obj/item/weapon/book/bundle/custom_library/fiction/beyondthedoor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyH" = ( -/obj/item/clothing/shoes/boots/jackboots/fluff/amara_boots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wyQ" = ( -/mob/living/simple_mob/mobs_monsters/clowns/longface{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wyS" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzc" = ( -/obj/item/weapon/circuitboard/cell_charger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wze" = ( -/obj/item/ammo_magazine/m2024/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzh" = ( -/obj/item/clothing/head/helmet/space/void/engineering/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzn" = ( -/obj/item/weapon/reagent_containers/glass/bottle/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzq" = ( -/obj/structure/closet/medical_wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzs" = ( -/mob/living/simple_mob/animal/passive/bird/parrot, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wzu" = ( -/obj/item/stack/tile/carpet/brncarpet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzx" = ( -/obj/item/clothing/accessory/storage/pouches/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzH" = ( -/obj/item/weapon/material/twohanded/longsword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzJ" = ( -/obj/item/clothing/suit/armor/riot/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzL" = ( -/obj/item/toy/figure/shitcurity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wzO" = ( -/obj/item/weapon/reagent_containers/food/snacks/sun_snax, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAa" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAc" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/bitters, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAf" = ( -/obj/item/clothing/gloves/grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAg" = ( -/obj/machinery/atmospherics/pipeturbine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAl" = ( -/obj/item/weapon/gun/magnetic/railgun/flechette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAq" = ( -/obj/item/weapon/flame/lighter/zippo/ironic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAu" = ( -/obj/item/clothing/under/rank/security/corp/fluff/ally_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAA" = ( -/obj/item/weapon/nailpolish, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAB" = ( -/obj/item/weapon/reagent_containers/food/snacks/quicheslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAL" = ( -/obj/item/clothing/accessory/solgov/department/service/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAM" = ( -/mob/living/silicon/robot/platform, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wAW" = ( -/obj/item/weapon/stock_parts/micro_laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wAZ" = ( -/obj/item/integrated_circuit/logic/boollatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBh" = ( -/obj/item/clothing/under/pants/baggy/classicjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBi" = ( -/obj/item/device/modkit_conversion/fluff/skinner/b, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBk" = ( -/obj/item/clothing/under/rank/virologist_new, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBo" = ( -/obj/machinery/suit_storage_unit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBw" = ( -/obj/item/device/mcguffin/brass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBx" = ( -/obj/item/weapon/flamethrower/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBQ" = ( -/obj/item/weapon/bedsheet/hop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBT" = ( -/obj/item/instrument/eguitar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wBW" = ( -/obj/item/weapon/pen/crayon/marker/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCd" = ( -/obj/machinery/vending/wardrobe/chapdrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCk" = ( -/obj/item/seeds/ambrosiadeusseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCm" = ( -/obj/item/clothing/suit/storage/flintlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCy" = ( -/obj/item/clothing/mask/veil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCF" = ( -/mob/living/simple_mob/animal/giant_spider/webslinger/event{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wCH" = ( -/obj/item/weapon/material/knife/tacknife/boot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCK" = ( -/obj/item/weapon/dnainjector/hulkmut, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCL" = ( -/obj/item/weapon/bedsheet/mime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wCS" = ( -/obj/item/clothing/under/cuttop/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDf" = ( -/obj/structure/sign/directions/medical/chemlab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDj" = ( -/obj/item/weapon/reagent_containers/food/snacks/wasabi_peas, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDn" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDr" = ( -/obj/structure/table/bench/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDz" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDF" = ( -/obj/item/weapon/storage/pill_bottle/dylovene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDV" = ( -/obj/item/integrated_circuit/illegal/EPv2_Discoverer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wDX" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEa" = ( -/obj/structure/prop/war/tgmc_missile/fatty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEj" = ( -/obj/item/integrated_circuit/input/numberpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEm" = ( -/obj/item/clothing/suit/fluff/purp_robes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEp" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/homer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEt" = ( -/obj/item/clothing/head/radiation/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEB" = ( -/obj/item/weapon/gun/energy/gun/fluff/gunsword, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEC" = ( -/obj/item/device/modkit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEF" = ( -/obj/item/device/mmi/radio_enabled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEN" = ( -/obj/structure/sign/signnew/cryogenics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wEQ" = ( -/obj/structure/bed/chair/comfy/rounded/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wER" = ( -/obj/item/weapon/mine/gadget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFe" = ( -/obj/item/clothing/under/solgov/utility/army/urban, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFq" = ( -/obj/structure/sign/flag/catpirate/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFv" = ( -/obj/item/clothing/head/hood/lancelot_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFA" = ( -/obj/item/weapon/cell/device/weapon/empproof, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFJ" = ( -/obj/item/clothing/under/rank/trek/command/voy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFM" = ( -/obj/item/stack/tile/floor/eris/steel/panels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFQ" = ( -/obj/item/weapon/soap/yellow_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFR" = ( -/obj/item/trash/beef, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFS" = ( -/obj/item/weapon/plantspray/weeds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFV" = ( -/obj/machinery/lapvend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wFX" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGb" = ( -/obj/structure/cable/orange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGk" = ( -/obj/item/clothing/accessory/solgov/fleet_patch/second, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGm" = ( -/obj/item/clothing/suit/storage/hooded/hoodie/greentrim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGs" = ( -/obj/item/instrument/musicalmoth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGK" = ( -/obj/item/weapon/storage/pouch/ammo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGM" = ( -/obj/item/weapon/storage/belt/utility/alien/full, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wGR" = ( -/obj/item/weapon/deck/wizoff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHf" = ( -/obj/item/weapon/gun/energy/gun/burst, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHh" = ( -/obj/item/seeds/carrotseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHp" = ( -/obj/item/weapon/cartridge/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHt" = ( -/obj/item/clothing/accessory/pride/ace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHA" = ( -/obj/item/weapon/storage/part_replacer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHC" = ( -/obj/item/weapon/storage/backpack/industrial, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHD" = ( -/obj/item/weapon/digestion_remains/skull/sergal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHF" = ( -/obj/item/modular_computer/console/preset/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHQ" = ( -/obj/item/clothing/suit/storage/explorer/engineering/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHT" = ( -/obj/item/weapon/grenade/spawnergrenade/riftwallers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHU" = ( -/obj/item/weapon/deck/holder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wHY" = ( -/obj/item/toy/plushie/teshari/b_yw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIf" = ( -/obj/item/weapon/circuitboard/telecomms/hub, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIg" = ( -/obj/item/ammo_magazine/ammo_box/b10mm/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIi" = ( -/obj/machinery/power/thermoregulator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIo" = ( -/obj/item/stack/tile/floor/eris/white/brown_platform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIp" = ( -/obj/item/ammo_casing/a10mm/bb, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIr" = ( -/obj/item/clothing/shoes/boots/winter/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIu" = ( -/obj/item/ammo_magazine/m38, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIw" = ( -/obj/item/clothing/glasses/thermal/syndi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIB" = ( -/obj/item/weapon/circuitboard/station_map, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIN" = ( -/obj/item/weapon/reagent_containers/food/drinks/britcup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIQ" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/phase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIT" = ( -/obj/structure/prop/esoteric/nt_pedestal1_old, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wIV" = ( -/obj/item/clothing/under/dress/dress_saloon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJl" = ( -/obj/item/clothing/accessory/wcoat/swvest/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJo" = ( -/obj/item/integrated_circuit/reagent/pump, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJr" = ( -/obj/item/seeds/carpetseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJu" = ( -/obj/item/ammo_magazine/m38/makarov/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJC" = ( -/obj/item/clothing/gloves/gauntlets/rig/protean, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJF" = ( -/obj/item/weapon/implanter/reagent_generator/yonra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJJ" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/shroud/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJM" = ( -/obj/structure/symbol/ca, -/turf/simulated/fitness, -/area/survivalpod) -"wJR" = ( -/obj/item/weapon/storage/box/scattershot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJS" = ( -/obj/item/weapon/gun/projectile/revolver/lombardi/panther, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJT" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/used, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJW" = ( -/obj/item/weapon/reagent_containers/food/snacks/steamtealeaf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wJZ" = ( -/obj/machinery/button/windowtint/multitint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKb" = ( -/obj/item/toy/figure/bandit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKe" = ( -/obj/item/clothing/suit/space/void/medical/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKf" = ( -/obj/item/weapon/storage/belt/medical/fluff/jiao_belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKg" = ( -/obj/item/clothing/suit/space/vox/pressure, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKh" = ( -/obj/item/toy/plushie/orange_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKi" = ( -/obj/item/weapon/gun/energy/plasmastun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKq" = ( -/obj/item/weapon/reagent_containers/food/snacks/jellyburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKs" = ( -/obj/structure/bed/chair/comfy/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKy" = ( -/obj/item/clothing/head/helmet/space/void/security/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKC" = ( -/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKM" = ( -/obj/item/weapon/melee/energy/axe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKR" = ( -/obj/item/weapon/card/id/event/altcard/syndie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wKS" = ( -/obj/item/device/holomap_beacon/operative, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wLl" = ( -/mob/living/simple_mob/animal/passive/fish/measelshark, -/turf/simulated/floor/water/deep/ocean, -/area/survivalpod) -"wLx" = ( -/obj/machinery/door/airlock/angled_bay/standard/color/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wLy" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wLC" = ( -/obj/item/clothing/suit/space/void/refurb/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wLP" = ( -/obj/machinery/door/blast/angled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wLQ" = ( -/obj/item/weapon/reagent_containers/food/snacks/ribplate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMm" = ( -/mob/living/simple_mob/animal/passive/crab{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wMn" = ( -/obj/structure/closet/crate/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMr" = ( -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMw" = ( -/obj/item/clothing/under/shiny/catsuit/poly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMz" = ( -/obj/item/clothing/accessory/poncho/roles/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wME" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/blue_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMH" = ( -/obj/structure/sign/department/chem, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMI" = ( -/obj/machinery/door/blast/regular/bookcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wML" = ( -/obj/item/clothing/under/sexymime/dress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMR" = ( -/obj/item/stack/tile/floor/techgrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMS" = ( -/obj/item/weapon/gun/projectile/aps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wMX" = ( -/obj/item/clothing/under/schoolgirl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNa" = ( -/obj/item/toy/plushie/orange_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNb" = ( -/obj/item/clothing/accessory/armor/tag/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNd" = ( -/obj/item/clothing/head/helmet/space/void/refurb/research/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNn" = ( -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNw" = ( -/obj/item/seeds/potatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNz" = ( -/obj/item/clothing/gloves/ring/material/platinum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNT" = ( -/obj/item/weapon/flame/lighter/zippo/communist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNW" = ( -/obj/vehicle/train/engine/quadbike/snowmobile/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wNZ" = ( -/obj/item/clothing/under/ert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOd" = ( -/obj/structure/sign/chemdiamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOk" = ( -/obj/item/seeds/deathnettleseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOn" = ( -/obj/item/clothing/head/lavender_crown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOp" = ( -/obj/item/weapon/grenade/spawnergrenade/manhacks/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOB" = ( -/obj/item/device/encryptionkey/headset_med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOD" = ( -/obj/item/clothing/head/wizard/fake, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOG" = ( -/obj/item/seeds/angelmycelium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOH" = ( -/obj/item/clothing/head/fedora/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOK" = ( -/obj/item/weapon/spell/modifier/haste, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOM" = ( -/obj/item/mecha_parts/mecha_equipment/tool/drill, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wOT" = ( -/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPc" = ( -/obj/item/clothing/suit/storage/hooded/knight/robin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPh" = ( -/obj/structure/sign/levels/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPq" = ( -/obj/item/clothing/glasses/material/prescription/tajblind, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPs" = ( -/obj/item/weapon/disk/nifsoft, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPt" = ( -/obj/item/weapon/reagent_containers/food/snacks/pistachios, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPv" = ( -/obj/item/weapon/gun/energy/gun/burst/mg42, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPJ" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wPT" = ( -/obj/item/clothing/suit/bio_suit/general, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQc" = ( -/obj/item/weapon/reagent_containers/glass/beaker/measuring_cup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQf" = ( -/mob/living/simple_mob/metroid{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wQr" = ( -/obj/structure/prop/blackbox/crashed_med_shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQs" = ( -/obj/item/weapon/ore/diamond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQv" = ( -/obj/item/weapon/gun/projectile/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQB" = ( -/obj/structure/curtain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQG" = ( -/obj/item/clothing/gloves/ranger/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQN" = ( -/obj/item/weapon/storage/pill_bottle/arithrazine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQQ" = ( -/obj/item/clothing/head/hairnet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQU" = ( -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wQZ" = ( -/mob/living/simple_mob/mobs_monsters/clowns/flesh{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wRd" = ( -/obj/item/clothing/accessory/fluff/zeke_vincir_1, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRh" = ( -/obj/machinery/vending/loadout/gadget, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRm" = ( -/obj/item/weapon/implanter/restrainingbolt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRs" = ( -/obj/item/weapon/rig/military, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRt" = ( -/obj/structure/showcase/yw/chaplain2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRv" = ( -/obj/item/weapon/circuitboard/stockexchange, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRx" = ( -/obj/item/clothing/head/ushanka/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRy" = ( -/obj/item/seeds/teaseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRB" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRP" = ( -/mob/living/simple_mob/animal/giant_spider/tunneler/frequent{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wRQ" = ( -/obj/item/clothing/under/teshari/undercoat/standard/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRT" = ( -/obj/item/toy/tennis/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRU" = ( -/obj/item/weapon/implantcase/death_alarm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wRZ" = ( -/obj/item/clothing/head/dress/fleet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSf" = ( -/obj/item/weapon/reagent_containers/food/snacks/hatchling_suprise, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSg" = ( -/obj/structure/noticeboard/blueshield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSj" = ( -/obj/item/device/bluespaceradio/cryogaia_prelinked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSp" = ( -/obj/item/weapon/gun/projectile/revolvershotgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSs" = ( -/obj/item/ammo_casing/a75, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSt" = ( -/obj/machinery/door/airlock/glass_research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSx" = ( -/obj/machinery/vending/loadout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSG" = ( -/obj/item/clothing/head/nonla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSP" = ( -/obj/structure/crystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSS" = ( -/obj/item/clothing/suit/space/void/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSW" = ( -/obj/structure/loot_pile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wSZ" = ( -/obj/structure/table/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTa" = ( -/obj/item/slime_extract/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTh" = ( -/obj/item/weapon/aiModule/ninja_override, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTn" = ( -/obj/item/weapon/reagent_containers/food/snacks/cb07, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTs" = ( -/obj/item/weapon/technomancer_core/universal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTu" = ( -/obj/item/clothing/accessory/gaiter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTv" = ( -/obj/item/organ/internal/intestine/unathi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTx" = ( -/obj/item/weapon/spell/shield, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTy" = ( -/obj/item/clothing/glasses/omnihud/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTG" = ( -/obj/structure/sign/examroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTI" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/white_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wTN" = ( -/obj/item/weapon/circuitboard/recycler_sorter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUb" = ( -/obj/item/clothing/suit/technomancer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUi" = ( -/obj/item/clothing/suit/storage/saare/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUq" = ( -/obj/item/organ/internal/augment/armmounted/hand, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUr" = ( -/obj/item/toy/figure/gardener, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUs" = ( -/obj/item/clothing/accessory/altevian_badge/aquila/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUt" = ( -/obj/item/clothing/suit/space/fluff/joan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUx" = ( -/obj/structure/sign/flag/blank/right, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUy" = ( -/obj/item/clothing/shoes/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUI" = ( -/obj/structure/table/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUJ" = ( -/obj/structure/bed/padded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUL" = ( -/obj/item/clothing/head/helmet/space/void/syndicate_contract, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUN" = ( -/mob/living/simple_mob/xeno_ch/sentinel, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wUU" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wUX" = ( -/obj/item/capture_crystal/loadout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVh" = ( -/obj/item/weapon/storage/pill_bottle/phenethylamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVl" = ( -/obj/structure/door_assembly/door_assembly_voidcraft/vertical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVm" = ( -/obj/item/ammo_magazine/m45/practice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVp" = ( -/obj/item/weapon/card/id/medical/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVv" = ( -/obj/machinery/vending/loadout/uniform, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVA" = ( -/obj/item/integrated_circuit/built_in/device_input, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVP" = ( -/obj/item/weapon/lego, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVU" = ( -/obj/item/weapon/card/id/centcom/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVV" = ( -/obj/item/weapon/storage/briefcase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVW" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wVY" = ( -/obj/item/key/snowmobile, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWb" = ( -/obj/item/clothing/suit/space/void/captain/alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWq" = ( -/obj/item/weapon/storage/box/gum, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWt" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/corgi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWB" = ( -/obj/item/weapon/digestion_remains/skull/akula, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWG" = ( -/obj/structure/prop/blackbox/mackerel_wreck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWH" = ( -/obj/structure/closet/crate/secure/gear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWO" = ( -/obj/item/weapon/cane/fluff/tasald, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWV" = ( -/obj/item/clothing/suit/armor/combat/crusader_costume, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWX" = ( -/obj/item/integrated_circuit/reagent/filter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWY" = ( -/obj/item/clothing/accessory/solgov/department/service/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wWZ" = ( -/obj/structure/smoletrack/roadS, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXc" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXe" = ( -/obj/machinery/smartfridge/secure/extract, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXm" = ( -/obj/item/clothing/mask/gas/clown_hat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXn" = ( -/obj/structure/prop/war/tgmc_laser/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXs" = ( -/obj/item/weapon/circuitboard/keycard_auth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXy" = ( -/mob/living/simple_mob/humanoid/pirate/las{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wXz" = ( -/obj/item/integrated_circuit/output/led/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXA" = ( -/obj/item/weapon/circuitboard/security/telescreen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wXG" = ( -/obj/item/weapon/storage/box/glass_extras, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYg" = ( -/obj/item/weapon/reagent_containers/glass/bottle/rezadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYi" = ( -/obj/item/weapon/storage/box/fancy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYm" = ( -/obj/item/weapon/reagent_containers/food/snacks/spesslaw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYx" = ( -/obj/item/weapon/gun/energy/mouseray, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYH" = ( -/obj/item/clothing/under/qipao, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYI" = ( -/obj/structure/sign/flag/vystholm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYK" = ( -/obj/item/toy/plushie/bigcat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYX" = ( -/obj/item/weapon/card/id/medical/psych, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wYZ" = ( -/obj/item/weapon/stock_parts/matter_bin/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZo" = ( -/obj/structure/barricade/cutout/servant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZt" = ( -/obj/item/clothing/suit/drake_cloak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZu" = ( -/mob/living/simple_mob/humanoid/merc/voxpirate/pirate{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"wZw" = ( -/obj/item/clothing/head/helmet/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZE" = ( -/obj/item/weapon/reagent_containers/food/snacks/bagelpoppy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZN" = ( -/obj/machinery/door/airlock/multi_tile/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZQ" = ( -/obj/item/device/buttonofnormal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZR" = ( -/obj/item/clothing/gloves/brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZU" = ( -/obj/structure/fence, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZX" = ( -/obj/structure/showcase/yw/plaque, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"wZY" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xaa" = ( -/obj/item/ammo_casing/a545/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xad" = ( -/obj/structure/outcrop/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xah" = ( -/obj/item/weapon/pen/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xaj" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/nothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xat" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/barflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xaw" = ( -/obj/item/weapon/storage/toolbox/lunchbox/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xaR" = ( -/obj/item/weapon/cartridge/chemistry, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xaU" = ( -/obj/item/clothing/accessory/armor/helmcover/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xbc" = ( -/obj/item/weapon/storage/firstaid/fire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xby" = ( -/mob/living/simple_mob/vore/alienanimals/space_jellyfish{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xbz" = ( -/obj/structure/sign/directions/science/robotics, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xbB" = ( -/obj/item/device/encryptionkey/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xbR" = ( -/obj/item/seeds/sporemycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xbS" = ( -/obj/item/toy/plushie/carp/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xca" = ( -/obj/item/clothing/accessory/armor/armguards/merc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcc" = ( -/obj/item/weapon/hand_labeler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcd" = ( -/obj/item/organ/internal/brain/xenochimera, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcf" = ( -/obj/item/weapon/pen/fountain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcg" = ( -/obj/item/clothing/shoes/lightrig/hacker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xch" = ( -/obj/structure/bed/chair/bay/comfy/teal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcn" = ( -/mob/living/simple_mob/animal/passive/dog/void_puppy, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xco" = ( -/obj/item/weapon/card/id/exploration, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcr" = ( -/obj/item/stack/material/morphium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcu" = ( -/obj/item/clothing/accessory/solgov/department/security/jumper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcC" = ( -/obj/machinery/conveyor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcH" = ( -/obj/item/weapon/material/ashtray/bronze, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcI" = ( -/obj/item/weapon/book/manual/command_guide, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcN" = ( -/obj/item/clothing/suit/space/vox/civ/trader/stealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcQ" = ( -/obj/machinery/mecha_part_fabricator/pros, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcU" = ( -/obj/item/weapon/storage/box/cups, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcV" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xcZ" = ( -/obj/item/trash/liquidfood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdf" = ( -/obj/item/ammo_magazine/akm/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdg" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdo" = ( -/obj/item/weapon/beach_ball/dodgeball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdN" = ( -/obj/item/weapon/stamp/chameleon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdP" = ( -/obj/item/clothing/suit/storage/solgov/service/army/engineering/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdR" = ( -/mob/living/simple_mob/vore/aggressive/deathclaw{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xdV" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xdX" = ( -/obj/structure/sign/flag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeb" = ( -/obj/item/stack/marker_beacon/hundred, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xed" = ( -/obj/item/ammo_magazine/mfoam_dart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xee" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xej" = ( -/obj/item/weapon/material/kitchen/utensil/fork/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xek" = ( -/obj/item/weapon/surgical/FixOVein/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xel" = ( -/obj/item/weapon/rig/combat/equipped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeo" = ( -/obj/item/weapon/implant/uplink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xes" = ( -/obj/item/weapon/card/id/casino/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeJ" = ( -/obj/structure/table/steel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeL" = ( -/obj/item/clothing/suit/space/vox/civ/trader/medic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeR" = ( -/obj/item/weapon/storage/bag/food, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xeT" = ( -/obj/structure/sign/clock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfh" = ( -/obj/item/flag/vystholm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfk" = ( -/obj/item/weapon/reagent_containers/food/snacks/boiledrice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfn" = ( -/mob/living/simple_mob/animal/passive/bird/parrot/eclectus, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xfs" = ( -/obj/item/weapon/storage/box/anti_photons, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfz" = ( -/obj/item/clothing/accessory/badge/holo/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfF" = ( -/obj/item/clothing/under/teshari/smock/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfR" = ( -/obj/item/weapon/storage/part_replacer/adv/discount_bluespace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfS" = ( -/obj/item/weapon/gun/projectile/serdy_pistols/ssp4, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xfV" = ( -/obj/item/weapon/gun/projectile/automatic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgb" = ( -/obj/item/weapon/circuitboard/scan_consolenew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgu" = ( -/obj/machinery/chemical_dispenser/deluxe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgy" = ( -/obj/item/weapon/circuitboard/recharge_station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgA" = ( -/mob/living/simple_mob/animal/space/bats/cult{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xgC" = ( -/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgE" = ( -/obj/item/clothing/shoes/slippers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgH" = ( -/obj/item/clothing/accessory/sweater/fluff/annie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xgV" = ( -/obj/item/clothing/under/rank/talon/basic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xha" = ( -/obj/item/ammo_casing/a545/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhl" = ( -/obj/item/weapon/cell/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhr" = ( -/obj/item/mecha_parts/part/phazon_left_leg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xht" = ( -/obj/structure/closet/walllocker_double/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhu" = ( -/obj/machinery/door/airlock/angled_tgmc/prep/prep_delta, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhy" = ( -/obj/item/clothing/suit/armor/tesla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhD" = ( -/obj/item/clothing/suit/storage/solgov/dress/fleet/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhG" = ( -/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhH" = ( -/obj/item/ammo_magazine/ammo_box/b545/large/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhM" = ( -/obj/structure/closet/grave/dirthole, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhO" = ( -/obj/item/clothing/suit/armor/pcarrier/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhP" = ( -/obj/item/weapon/reagent_containers/food/snacks/scorpion_cooked, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhR" = ( -/obj/item/weapon/storage/box/fluff/mira, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xhX" = ( -/obj/item/weapon/circuitboard/nav/tele, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xia" = ( -/obj/item/toy/figure/virologist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xic" = ( -/obj/structure/sign/directions/science/rnd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xij" = ( -/obj/item/weapon/reagent_containers/food/snacks/brainburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xil" = ( -/obj/item/clothing/suit/space/skrell/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xiz" = ( -/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xiE" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xiP" = ( -/obj/item/capture_crystal/random, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xiX" = ( -/obj/structure/salvageable/implant_container, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xja" = ( -/obj/item/weapon/gun/energy/pulse_rifle/destroyer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjo" = ( -/obj/item/weapon/storage/belt/security/fluff/kilano, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xju" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjy" = ( -/obj/item/weapon/reagent_containers/food/condiment/ketchup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjH" = ( -/obj/item/weapon/storage/pouch/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjM" = ( -/obj/item/clothing/head/fedora/fluff/bowler, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjT" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjV" = ( -/obj/structure/showcase/sign/nt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xjW" = ( -/obj/item/clothing/head/xenos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xka" = ( -/obj/item/clothing/suit/storage/forensics/blue/long, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkc" = ( -/obj/structure/sign/levels/recreation, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xke" = ( -/obj/item/weapon/card/id/centcom/ERT/commander, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkf" = ( -/obj/item/device/antibody_scanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkl" = ( -/obj/item/clothing/gloves/boxing/hologlove, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkm" = ( -/obj/item/clothing/head/helmet/space/deathsquad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xku" = ( -/obj/item/clothing/under/explorer/utility/command/engineering/fluff/vasharr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkw" = ( -/obj/item/ammo_casing/a10x24/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xky" = ( -/obj/machinery/atmospherics/trinary/atmos_filter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkD" = ( -/obj/item/weapon/chaoscake_layer/seven, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkG" = ( -/obj/item/weapon/storage/fancy/cigar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkH" = ( -/obj/item/device/electronic_assembly/large/arm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkI" = ( -/obj/item/weapon/melee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkQ" = ( -/obj/item/clothing/head/helmet/space/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xkR" = ( -/obj/item/toy/plushie/borgplushie/drake/eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlc" = ( -/obj/item/weapon/storage/quickdraw/syringe_case, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xli" = ( -/obj/item/clothing/gloves/boxing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlm" = ( -/obj/item/weapon/paper/manifest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlo" = ( -/obj/item/weapon/reagent_containers/food/snacks/egg/teshari, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlu" = ( -/obj/item/clothing/suit/storage/toggle/greengov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlB" = ( -/obj/item/device/modkit_conversion/fluff/serdykit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlD" = ( -/obj/item/stack/tile/floor/sidewalk, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlF" = ( -/obj/item/weapon/reagent_containers/pill/zoom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xlR" = ( -/mob/living/simple_mob/clockwork, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xlU" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard/black_green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmf" = ( -/obj/item/weapon/broken_gun/pumpshotgun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmm" = ( -/obj/item/weapon/circuitboard/sleeper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmn" = ( -/obj/item/weapon/reagent_containers/food/snacks/pineappleslice/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmx" = ( -/obj/item/ammo_magazine/mtg/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmA" = ( -/obj/item/clothing/head/beret/medical/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmP" = ( -/obj/structure/bed/chair/sofa/corner/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmR" = ( -/obj/structure/sign/levels/bridge, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xmS" = ( -/obj/item/weapon/spell/blink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xna" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/boat/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnj" = ( -/obj/item/integrated_circuit/list/delete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnp" = ( -/obj/item/weapon/card/id/casino/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnr" = ( -/obj/item/ammo_magazine/s357, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnx" = ( -/obj/structure/prop/rock/round, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnD" = ( -/obj/item/toy/plushie/tuxedo_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnG" = ( -/obj/item/weapon/reagent_containers/food/snacks/variable/cereal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnL" = ( -/obj/item/device/flashlight/pen/fluff/lynn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnM" = ( -/obj/item/clothing/head/cowboy/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnN" = ( -/obj/item/ammo_magazine/m9mm/vp70/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnS" = ( -/obj/item/seeds/chiliseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnV" = ( -/obj/item/seeds/wurmwoad, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xnX" = ( -/obj/item/stack/material/snowbrick, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xoc" = ( -/mob/living/simple_mob/humanoid/merc/ranged/smg{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xoi" = ( -/obj/item/clothing/under/suit_jacket/female/fluff/miqote, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xol" = ( -/obj/item/weapon/circuitboard/pointdefense, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xop" = ( -/obj/item/weapon/storage/vore_egg/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xoy" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xoK" = ( -/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xoS" = ( -/obj/item/integrated_circuit/converter/lowercase, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xoY" = ( -/obj/item/ammo_casing/a5mmcaseless, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpa" = ( -/obj/item/weapon/storage/fancy/candle_box, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpd" = ( -/obj/structure/grille/broken, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpg" = ( -/obj/item/rig_module/voice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpl" = ( -/obj/item/projectile/scatter/laser, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpn" = ( -/obj/item/weapon/reagent_containers/food/snacks/cookiesnack, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpp" = ( -/obj/item/weapon/reagent_containers/spray/chemsprayer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpr" = ( -/obj/item/trash/ratpackramen/ace, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpx" = ( -/obj/item/clothing/head/helmet/space/void/mining, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpz" = ( -/obj/item/clothing/head/helmet/space/vox/civ/medical/geneticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpA" = ( -/obj/item/seeds/weeds, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpD" = ( -/obj/item/clothing/accessory/medal/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpI" = ( -/obj/item/weapon/refill_cartridge/autoname/food/sol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpR" = ( -/obj/item/beehive_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpT" = ( -/obj/machinery/firealarm/angled/hidden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xpX" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/rd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqc" = ( -/obj/item/weapon/key/rover, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqe" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqh" = ( -/obj/item/clothing/head/tesh_hood/standard/black_pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqi" = ( -/obj/item/weapon/grenade/spawnergrenade/ward, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqn" = ( -/obj/item/weapon/aliencoin/basic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqp" = ( -/obj/item/weapon/thecake_layer/four, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqq" = ( -/obj/item/weapon/spell/projectile/chain_lightning, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqy" = ( -/obj/structure/sign/levels/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqH" = ( -/obj/item/clothing/suit/storage/fluff/gntop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqI" = ( -/obj/item/device/gps/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqJ" = ( -/obj/item/clothing/under/suit_jacket/female/fluff/asuna, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqL" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitered, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xqR" = ( -/obj/item/clothing/head/helmet/space/void/zaddat/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrc" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xri" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/tank{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xrm" = ( -/obj/item/weapon/storage/vore_egg/xenomorph, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrr" = ( -/obj/item/weapon/storage/toolbox/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xry" = ( -/obj/structure/sign/hangar/three, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrz" = ( -/obj/structure/sign/level/four, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrA" = ( -/obj/item/clothing/suit/storage/toggle/track/white, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrB" = ( -/obj/item/clothing/accessory/badge/corporate_tag/bishop, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrC" = ( -/obj/item/weapon/reagent_containers/food/snacks/weebonuts, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrD" = ( -/obj/item/ammo_magazine/plamya/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrL" = ( -/obj/item/weapon/am_containment, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrO" = ( -/obj/machinery/door/blast/multi_tile/two_tile_hor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xrQ" = ( -/obj/item/weapon/storage/backpack/luchador/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsm" = ( -/obj/structure/sign/levels/security/armory, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xso" = ( -/mob/living/simple_mob/animal/space/alien/tanky{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xsv" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsA" = ( -/obj/item/weapon/dnainjector/midgit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsD" = ( -/obj/item/stack/material/gold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsM" = ( -/obj/structure/bed/chair/comfy/rounded/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsU" = ( -/obj/item/weapon/tool/wrench/power, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsV" = ( -/obj/item/weapon/disk/nifsoft/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xsY" = ( -/obj/item/weapon/bone/skull/tajaran, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtg" = ( -/obj/structure/sign/department/drones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtj" = ( -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xto" = ( -/obj/item/clothing/suit/iasexy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtq" = ( -/obj/item/weapon/storage/backpack/messenger/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xts" = ( -/obj/item/weapon/melee/fluff/holochain/mass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtt" = ( -/obj/structure/smolebuilding/business, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtu" = ( -/obj/machinery/light_construct/bigfloorlamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xty" = ( -/obj/item/clothing/accessory/armor/tag/solgov/agent, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtB" = ( -/obj/item/clothing/mask/balaclava/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtC" = ( -/obj/item/clothing/under/teshari/smock/dress/engine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtG" = ( -/obj/item/weapon/reagent_containers/food/snacks/sharkmeatdip, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtM" = ( -/obj/item/weapon/storage/bible, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtV" = ( -/obj/structure/prop/machine/stamper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtY" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/service/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xtZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/baguette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xua" = ( -/obj/structure/sign/flag/vir, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xub" = ( -/obj/item/clothing/under/cohesion/hazard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xus" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xuw" = ( -/obj/item/projectile/beam/stun/med, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xux" = ( -/obj/item/weapon/gun/projectile/automatic/advanced_smg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xuR" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xuV" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e8, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xuZ" = ( -/obj/item/weapon/bedsheet/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xva" = ( -/obj/item/clothing/head/surgery/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvd" = ( -/obj/item/weapon/reagent_containers/food/snacks/appletart, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvm" = ( -/obj/item/weapon/reagent_containers/food/snacks/porkbowl, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvp" = ( -/obj/structure/closet/thunderdome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvs" = ( -/obj/item/weapon/ore/iron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvv" = ( -/obj/item/clothing/mask/smokable/ecig/simple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvz" = ( -/obj/machinery/telecomms/processor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvC" = ( -/obj/item/weapon/gun/projectile/revolver/saa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvD" = ( -/obj/item/weapon/aiModule/reporter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvH" = ( -/obj/item/weapon/grenade/chem_grenade/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvO" = ( -/obj/item/clothing/head/pin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvR" = ( -/obj/item/clothing/suit/storage/hooded/teshari/standard/black_purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xvY" = ( -/obj/item/clothing/accessory/medal/silver/fluff/zodiacshadow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwc" = ( -/obj/item/toy/character/voidone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwd" = ( -/obj/item/weapon/reagent_containers/food/snacks/siffruit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwl" = ( -/obj/item/weapon/cell/device/hyper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwm" = ( -/obj/item/device/flashlight/maglight, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwp" = ( -/obj/item/clothing/shoes/boots/swat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwu" = ( -/obj/machinery/vending/wardrobe/scidrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwx" = ( -/obj/item/clothing/under/rank/cargo/jeans/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwL" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwN" = ( -/obj/item/clothing/under/psysuit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwP" = ( -/obj/item/weapon/soap/brown_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwQ" = ( -/obj/item/weapon/circuitboard/mecha_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwU" = ( -/obj/item/weapon/reagent_containers/food/snacks/cheesetoast, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xwX" = ( -/obj/item/weapon/cartridge/ce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxe" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xxi" = ( -/obj/item/clothing/under/skirt/khaki, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxo" = ( -/obj/item/ammo_casing/microbattery/medical/corpse_mend, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxu" = ( -/obj/item/clothing/suit/fire/firefighter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxv" = ( -/obj/item/weapon/reagent_containers/food/snacks/grub_blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxz" = ( -/obj/structure/sign/level/two/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxC" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxH" = ( -/obj/item/clothing/under/scratch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxV" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/supermatter, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xxZ" = ( -/obj/item/weapon/storage/backpack/talon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyj" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyl" = ( -/obj/item/toy/gnome, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyr" = ( -/obj/item/weapon/reagent_containers/pill/phenethylamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xys" = ( -/obj/item/weapon/reagent_containers/food/snacks/taco, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyx" = ( -/obj/item/clothing/head/beret/fluff/jiao_beret, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyB" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/para, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyK" = ( -/mob/living/simple_mob/humanoid/russian{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xyN" = ( -/obj/item/weapon/cell/vepr, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyU" = ( -/obj/item/robot_parts/robot_component/radio, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xyV" = ( -/obj/structure/table/bench, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzf" = ( -/obj/machinery/light/small/fairylights/flicker, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzg" = ( -/obj/item/weapon/paper/card/cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzi" = ( -/obj/structure/curtain/open, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzl" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/diethylamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzu" = ( -/obj/item/weapon/card/id/centcom/ERT/engineer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzA" = ( -/obj/item/weapon/spacecash/ewallet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzB" = ( -/obj/item/weapon/storage/vore_egg/purple, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzF" = ( -/obj/structure/alien/wall, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzI" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzJ" = ( -/obj/item/weapon/circuitboard/gyrotron, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzS" = ( -/obj/machinery/suit_cycler/refit_only, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xzZ" = ( -/obj/item/weapon/implant/reagent_generator/evian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAc" = ( -/obj/item/stack/material/deuterium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAe" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/captain, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAi" = ( -/obj/item/clothing/accessory/armband/med/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAk" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAl" = ( -/obj/item/weapon/tool/wirecutters/clippers/trimmers, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAA" = ( -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAB" = ( -/obj/structure/door_assembly/door_assembly_highsecurity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAH" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAL" = ( -/obj/structure/bed/chair/sofa/sif_ora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xAO" = ( -/obj/item/device/electronic_assembly/drone/default, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBb" = ( -/obj/item/clothing/head/hood/winter/snowsuit/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBc" = ( -/obj/item/clothing/under/swimsuit/striped, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBd" = ( -/obj/item/weapon/reagent_containers/food/snacks/clownstears, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBg" = ( -/obj/structure/transit_tube/station, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBh" = ( -/obj/machinery/suit_cycler/vintage/tminer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBi" = ( -/obj/item/clothing/suit/storage/fluff/jacket/air_force, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBs" = ( -/obj/item/weapon/gun/projectile/automatic/cballistic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBw" = ( -/obj/item/weapon/gun/projectile/n99, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBD" = ( -/obj/item/clothing/accessory/armor/armorplate/riot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBH" = ( -/obj/item/weapon/implant/language/fluff/m41l, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBK" = ( -/obj/item/weapon/circuitboard/mecha/honker/peripherals, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBP" = ( -/obj/item/weapon/reagent_containers/food/snacks/flatbread, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xBW" = ( -/obj/item/ammo_magazine/m9mmAdvanced/ap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCa" = ( -/obj/item/weapon/reagent_containers/food/snacks/unajerky, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCf" = ( -/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCo" = ( -/obj/machinery/holosign/exit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCq" = ( -/obj/machinery/microwave/advanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCs" = ( -/obj/structure/bed/chair/bay/chair/padded/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCz" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCA" = ( -/obj/item/clothing/glasses/gglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCE" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/gamma, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCH" = ( -/obj/item/toy/plushie/pink_fox, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xCT" = ( -/obj/item/weapon/reagent_containers/food/snacks/wishsoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDc" = ( -/obj/item/weapon/circuitboard/pointdefense_control, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDe" = ( -/obj/item/clothing/glasses/fakesunglasses, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDp" = ( -/obj/item/weapon/tank/emergency/nitrogen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDx" = ( -/obj/item/clothing/head/beret/sec/corporate/officer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDG" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDI" = ( -/obj/item/clothing/under/solgov/utility/sifguard/officer/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDJ" = ( -/obj/item/clothing/under/pants/blackjeans, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDR" = ( -/obj/structure/sign/poster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xDX" = ( -/obj/item/weapon/dnainjector/antimidgit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEa" = ( -/obj/item/clothing/under/pants/altevian/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEc" = ( -/obj/item/weapon/gun/energy/x01, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEd" = ( -/obj/item/weapon/fluff/dimensioncube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEf" = ( -/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEm" = ( -/obj/structure/closet/bombcloset/double, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEp" = ( -/obj/item/organ/internal/stomach/machine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEv" = ( -/obj/item/clothing/head/soft/rainbow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEK" = ( -/obj/item/clothing/under/dress/polka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEL" = ( -/obj/machinery/mining/drill/loaded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEM" = ( -/obj/item/clothing/under/color/lightblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEN" = ( -/obj/item/toy/figure/cmo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xER" = ( -/obj/item/mining_voucher, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xET" = ( -/obj/item/clothing/suit/storage/teshari/cloak/jobs/sec, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEV" = ( -/obj/item/weapon/gun/projectile/revolver/deckard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xEY" = ( -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag/mini, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFd" = ( -/obj/machinery/power/rtg/abductor/hybrid, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFg" = ( -/obj/item/weapon/storage/box/casino/costume_wizard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFl" = ( -/obj/item/device/modkit_conversion/fluff, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFm" = ( -/obj/item/weapon/storage/secure/briefcase/flamer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFw" = ( -/obj/machinery/power/shield_generator/upgraded/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFx" = ( -/obj/item/clothing/ears/skrell/cloth_male/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFD" = ( -/obj/item/weapon/ore/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xFN" = ( -/obj/item/weapon/reagent_containers/food/snacks/donut/olive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGb" = ( -/obj/structure/snowman/spider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGd" = ( -/obj/item/stack/material/osmium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGl" = ( -/obj/item/weapon/fossil, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGr" = ( -/obj/item/clothing/head/ushanka, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGs" = ( -/obj/item/toy/figure/detective, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGv" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGy" = ( -/obj/item/weapon/storage/backpack/holding/slime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGH" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/dropship2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGN" = ( -/obj/structure/grille/cult, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGQ" = ( -/obj/item/clothing/accessory/fluff/smilepin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGR" = ( -/obj/item/rig_module/vision, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGU" = ( -/obj/item/clothing/shoes/boots/cowboy/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xGV" = ( -/obj/item/weapon/reagent_containers/food/snacks/bigos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHb" = ( -/obj/item/weapon/circuitboard/skills/pcu, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHf" = ( -/obj/structure/loot_pile/mecha/mouse_tank/eraticator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHk" = ( -/obj/item/weapon/reagent_containers/food/snacks/mammi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHm" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHn" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/mercury, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHr" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/security{ - dir = 8 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHu" = ( -/obj/item/clothing/under/dress/dress_cap/femformal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHB" = ( -/obj/item/weapon/storage/box/masks/dust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHC" = ( -/obj/item/weapon/reagent_containers/food/snacks/dip/salsa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHM" = ( -/obj/item/weapon/firework_star/weather/storm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHP" = ( -/obj/item/weapon/gun/energy/meteorgun/pen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHS" = ( -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHX" = ( -/obj/item/weapon/reagent_containers/ecig_cartridge/coffee, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xHZ" = ( -/obj/item/weapon/reagent_containers/food/snacks/applepie, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIa" = ( -/obj/item/weapon/flame/candle/candelabra, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIb" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/whitewine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xId" = ( -/obj/item/weapon/paper/dosimeter_manual, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIz" = ( -/obj/item/weapon/rig/baymed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xID" = ( -/obj/item/clothing/shoes/antediluvian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIM" = ( -/obj/item/weapon/storage/box/casino/costume_sexymime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIO" = ( -/obj/item/weapon/storage/belt/soulstone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIP" = ( -/obj/item/weapon/rig/focalpoint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xIQ" = ( -/obj/item/clothing/under/pants/altevian/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJa" = ( -/obj/item/weapon/implant/reagent_generator/belle/ysaline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJd" = ( -/obj/item/clothing/suit/storage/vest/hoscoat/jensen, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJh" = ( -/obj/structure/closet/secure_closet/cargotech, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJm" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJn" = ( -/obj/item/clothing/glasses/sunglasses/big, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJp" = ( -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/gnat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJs" = ( -/obj/item/stack/tile/floor/eris/white/panels, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJx" = ( -/obj/item/weapon/stamp/accepted, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJy" = ( -/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xJA" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/small, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJB" = ( -/obj/item/weapon/grenade/spawnergrenade/clustaur, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJK" = ( -/obj/structure/largecrate/animal/bugsect, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJM" = ( -/obj/item/poi/brokenoldreactor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJN" = ( -/obj/item/clothing/accessory/armor/tag/apos, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJO" = ( -/obj/item/ammo_magazine/m9mmAdvanced, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xJW" = ( -/obj/structure/bonfire, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKb" = ( -/obj/structure/closet/lasertag, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKc" = ( -/obj/item/clothing/under/teshari/undercoat/jobs/para, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKd" = ( -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKf" = ( -/obj/item/mecha_parts/component/electrical/high_current, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKj" = ( -/obj/item/clothing/head/beret/solgov/sifguard/branch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKm" = ( -/obj/item/weapon/module/id_auth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKp" = ( -/mob/living/simple_mob/animal/space/alien/sentinel{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xKv" = ( -/obj/machinery/door/airlock/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKx" = ( -/obj/item/instrument/piano_synth/headphones/spacepods, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKF" = ( -/obj/machinery/door/airlock/external/bolted/cycling, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKG" = ( -/obj/item/device/defib_kit, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKL" = ( -/obj/structure/closet/crate/focalpoint, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKM" = ( -/obj/item/weapon/reagent_containers/glass/bottle/left4zed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKQ" = ( -/obj/item/weapon/dnainjector/antiremoteview, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKR" = ( -/obj/item/clothing/under/primitive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xKX" = ( -/obj/item/toy/cat_toy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLd" = ( -/mob/living/simple_mob/humanoid/pirate/machete{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xLo" = ( -/obj/machinery/door/window, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLq" = ( -/obj/item/clothing/accessory/bracelet/material/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLv" = ( -/obj/structure/bed/chair/comfy/rounded/lime, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLJ" = ( -/obj/item/weapon/computer_hardware/battery_module/micro, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLM" = ( -/obj/item/device/electronic_assembly/medium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLO" = ( -/obj/item/seeds/amanitamycelium, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLV" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xLZ" = ( -/mob/living/simple_mob/vore/alienanimals/space_ghost{ - desc = s; - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xMe" = ( -/obj/item/clothing/accessory/scarf, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMi" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMj" = ( -/obj/item/clothing/under/teshari/undercoat/standard/black_brown, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMm" = ( -/mob/living/silicon/robot/drone/swarm/melee, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xMn" = ( -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMo" = ( -/obj/item/weapon/circuitboard/stationalert_security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMs" = ( -/obj/item/device/survivalcapsule/luxury, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMz" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/myelamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xML" = ( -/obj/item/stack/material/plastic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMO" = ( -/obj/item/weapon/storage/box/fingerprints, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMU" = ( -/obj/structure/closet/crate/secure/large/aether, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xMV" = ( -/obj/item/weapon/reagent_containers/food/snacks/chipplate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNc" = ( -/obj/item/mecha_parts/mecha_equipment/crisis_drone/rad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNg" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "24" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNi" = ( -/obj/structure/closet/crate/mimic/airlock/guaranteed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNk" = ( -/obj/machinery/light_construct/flamp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNl" = ( -/obj/item/clothing/suit/storage/det_trench/alt2/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNo" = ( -/obj/item/weapon/gun/energy/mouseray/metamorphosis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNq" = ( -/obj/structure/prop/rock, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNr" = ( -/obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNy" = ( -/obj/item/clothing/suit/storage/hooded/costume/siffet, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNz" = ( -/obj/item/clothing/suit/storage/toggle/hoodiebuttoned, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNF" = ( -/obj/item/clothing/glasses/sunglasses/thinblindfold, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNI" = ( -/obj/item/clothing/accessory/holster/machete, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNN" = ( -/obj/item/weapon/lego/gib, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNU" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xNX" = ( -/obj/item/integrated_circuit/smart/basic_pathfinder, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOk" = ( -/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/diona, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOn" = ( -/obj/item/weapon/reagent_containers/food/snacks/old/hotdog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOo" = ( -/obj/item/weapon/implant/sizecontrol, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOq" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOw" = ( -/obj/structure/prop/statue/angel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOz" = ( -/obj/item/clothing/under/relaxwear_2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOD" = ( -/obj/item/clothing/accessory/material/makeshift, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOF" = ( -/obj/machinery/computer/pod/old/syndicate, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOI" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xOM" = ( -/obj/item/modular_computer/tablet/lease, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOV" = ( -/obj/item/slime_extract/silver, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xOW" = ( -/obj/item/clothing/under/rank/bartender/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPu" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/fuel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPw" = ( -/obj/machinery/door/airlock/maintenance/int, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPA" = ( -/obj/item/weapon/storage/box/nifsofts_medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPG" = ( -/obj/item/clothing/under/teshari/undercoat/standard/yellow_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPH" = ( -/obj/item/clothing/accessory/jacket/altevian/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPK" = ( -/obj/item/weapon/firework_star/aesthetic, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPO" = ( -/obj/item/clothing/suit/storage/toggle/track, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPQ" = ( -/obj/item/clothing/suit/storage/toggle/labcoat/science, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xPT" = ( -/mob/living/simple_mob/vore/woof/hostile/aweful{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xQd" = ( -/obj/item/device/integrated_electronics/debugger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQi" = ( -/obj/item/weapon/reagent_containers/pill/healing_nanites, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQr" = ( -/obj/item/clothing/under/solgov/utility/army/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQC" = ( -/obj/item/weapon/storage/vore_egg/shark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQE" = ( -/obj/item/ammo_magazine/m9mm/large, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQH" = ( -/obj/item/clothing/accessory/poncho/roles/cloak/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQP" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQU" = ( -/obj/item/clothing/accessory/scarf/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQV" = ( -/obj/item/clothing/gloves/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQX" = ( -/obj/structure/closet/crate/galaksi, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xQZ" = ( -/obj/item/clothing/under/rank/khi/crg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRn" = ( -/obj/structure/sign/atmos_co2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRr" = ( -/obj/item/integrated_circuit/reagent/storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRC" = ( -/obj/structure/loot_pile/mecha/gygax/dark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRG" = ( -/obj/item/weapon/soap/fire_soap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRJ" = ( -/obj/item/clothing/under/shorts/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRK" = ( -/obj/item/clothing/head/chefhat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xRQ" = ( -/mob/living/simple_mob/vore/aggressive/deathclaw/den{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xRX" = ( -/obj/item/device/laser_pointer/upgraded, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSf" = ( -/obj/item/organ/internal/lungs/skrell, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSu" = ( -/obj/machinery/gear_dispenser/suit/commonwealth, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSv" = ( -/obj/structure/bed/chair/backed_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSw" = ( -/obj/item/clothing/suit/browncoat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSD" = ( -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSH" = ( -/obj/item/paiparts/projector, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSL" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSN" = ( -/obj/item/clothing/under/solgov/service/sifguard/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSP" = ( -/mob/living/simple_mob/glitch_boss_fake{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xSS" = ( -/obj/item/weapon/gun/projectile/p92x/large/preban/hp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xSW" = ( -/obj/item/device/electronic_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTa" = ( -/obj/item/trash/liquidvitamin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTe" = ( -/obj/item/clothing/under/fluff/John, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTk" = ( -/obj/item/weapon/reagent_containers/food/snacks/thecakeslice, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTu" = ( -/obj/item/weapon/surgical/scalpel/manager, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTx" = ( -/obj/item/clothing/under/shiny/leotard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTz" = ( -/obj/item/weapon/gun/energy/sizegun/admin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTE" = ( -/obj/item/weapon/card/id/gateway/snowfield/class3E, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTO" = ( -/obj/item/weapon/reagent_containers/food/snacks/tofukabob, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTR" = ( -/obj/item/clothing/accessory/hawaiian/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTT" = ( -/obj/structure/prop/statue/statue2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xTU" = ( -/obj/machinery/ai_slipper, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xUf" = ( -/obj/item/clothing/head/beret/solgov/fleet/supply, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xUJ" = ( -/obj/item/clothing/suit/storage/solgov/service/army/service, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xUW" = ( -/obj/item/clothing/under/rank/parameduniskirtdark, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xUZ" = ( -/obj/item/ammo_magazine/molniya, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVd" = ( -/obj/item/device/radio/headset/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVg" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/aux, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVh" = ( -/obj/item/toy/plushie/crab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVk" = ( -/obj/structure/lightpost, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVm" = ( -/obj/item/clothing/head/beret/solgov/fleet/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVo" = ( -/obj/item/weapon/cartridge/storage, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVq" = ( -/obj/item/clothing/accessory/tropical/blue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVs" = ( -/obj/item/toy/plushie/siamese_cat, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVu" = ( -/obj/item/weapon/syndie/c4explosive/heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVw" = ( -/obj/item/integrated_circuit/arithmetic/iterator, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVB" = ( -/obj/item/clothing/head/helmet/space/vox/civ/bartender, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVD" = ( -/obj/item/weapon/shield/riot/explorer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVF" = ( -/obj/item/clothing/suit/storage/solgov/service/sifguard/medical/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVN" = ( -/obj/item/weapon/gun/energy/gun/rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVR" = ( -/obj/item/clothing/glasses/eyepatchwhite, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xVT" = ( -/obj/item/clothing/shoes/boots, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xWi" = ( -/obj/item/frame/noticeboard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xWj" = ( -/obj/item/device/electronic_assembly/device, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xWq" = ( -/obj/item/weapon/melee/energy/sword/color, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xWL" = ( -/obj/structure/bed/chair/comfy/beige, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xWR" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXa" = ( -/obj/item/clothing/glasses/welding, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXe" = ( -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXg" = ( -/obj/item/clothing/under/suit_jacket/really_black/skirt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXi" = ( -/obj/item/weapon/reagent_containers/food/snacks/corn_dog, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXj" = ( -/obj/item/weapon/circuitboard/washing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXn" = ( -/obj/item/clothing/head/pin/pink, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXx" = ( -/obj/item/clothing/head/helmet/space/void/axis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXy" = ( -/obj/item/weapon/material/armor_plating/insert, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXB" = ( -/obj/item/clothing/under/explorer/utility, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXC" = ( -/obj/item/weapon/grenade/flashbang, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXD" = ( -/obj/item/clothing/under/dress/stripeddress, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXO" = ( -/obj/item/ammo_magazine/m9mmAdvanced/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXS" = ( -/obj/item/clothing/glasses/regular/thin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXV" = ( -/obj/item/device/perfect_tele/one_beacon, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXX" = ( -/obj/item/clothing/head/pilot, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xXZ" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYa" = ( -/obj/structure/prop/prism, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYe" = ( -/obj/item/shield_projector/rectangle/weak, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYf" = ( -/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYv" = ( -/obj/item/seeds/greengrapeseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYw" = ( -/obj/item/clothing/under/syndicate/tacticool, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYB" = ( -/obj/item/weapon/card/id/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYD" = ( -/obj/item/weapon/gun/projectile/sec/wood, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYF" = ( -/obj/item/seeds/bluespacetomatoseed, -/obj/machinery/portable_atmospherics/hydroponics{ - frozen = 1; - closed_system = 1 - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYI" = ( -/obj/item/ammo_casing/a44/rubber, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYJ" = ( -/obj/structure/salvageable/server_os, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYN" = ( -/obj/item/weapon/coin/verdantium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYO" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYQ" = ( -/obj/item/seeds/rose, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xYX" = ( -/obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xZi" = ( -/mob/living/simple_mob/slime/xenobio/gold{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"xZu" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xZE" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/cryoxadone, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xZK" = ( -/obj/item/weapon/disk/nuclear, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xZS" = ( -/obj/item/stack/tile/floor/eris/white/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"xZW" = ( -/obj/item/weapon/stock_parts/motor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaf" = ( -/obj/machinery/artifact_scanpad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yan" = ( -/obj/item/clothing/gloves/ring/material/titanium, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yas" = ( -/obj/item/weapon/book/custom_library/fiction/starsandsometimesfallingones, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaB" = ( -/obj/item/clothing/mask/gas/commando, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaE" = ( -/obj/item/weapon/reagent_containers/food/snacks/muffin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaG" = ( -/obj/item/weapon/firework_star/weather/fallout, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaO" = ( -/obj/item/ammo_magazine/ammo_box/foam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaQ" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "2" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yaR" = ( -/obj/item/weapon/disk/limb/dsi_spider, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ybn" = ( -/obj/item/paint_palette, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ybq" = ( -/obj/item/clothing/suit/storage/solgov/service/army/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ybx" = ( -/obj/item/weapon/storage/box/metalfoam, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yby" = ( -/obj/item/clothing/under/solgov/service/army/command, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ybA" = ( -/obj/machinery/libraryscanner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ybV" = ( -/mob/living/simple_mob/mobs_monsters/clowns/big/blob{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ybZ" = ( -/obj/item/weapon/pen/crayon/marker/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yca" = ( -/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/viktor, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycd" = ( -/obj/machinery/dna_scannernew, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycg" = ( -/obj/item/weapon/aiModule/tyrant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycn" = ( -/obj/structure/sign/department/xenolab, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycv" = ( -/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycx" = ( -/obj/structure/closet/lasertag/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycK" = ( -/obj/item/clothing/under/pants/black, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycN" = ( -/obj/item/clothing/under/tactical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycQ" = ( -/obj/machinery/atmospherics/tvalve/digital/mirrored, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycT" = ( -/obj/item/clothing/accessory/medal/silver/unity, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ycX" = ( -/obj/item/clothing/suit/storage/teshari/beltcloak/standard/blue_grey, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydf" = ( -/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydg" = ( -/obj/item/clothing/accessory/armor/armguards/tan, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydl" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydn" = ( -/obj/structure/fence/end, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydq" = ( -/obj/item/weapon/material/snow/snowball, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydr" = ( -/mob/living/simple_mob/animal/giant_spider/carrier{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ydt" = ( -/obj/item/weapon/material/star/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydv" = ( -/obj/item/ammo_magazine/s45lc/empty, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydI" = ( -/obj/item/weapon/rig/pmc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydM" = ( -/obj/item/weapon/reagent_containers/glass/bottle/diethylamine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ydX" = ( -/obj/item/clothing/suit/armor/pcarrier/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeg" = ( -/obj/item/weapon/storage/backpack/roboticist, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yer" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yey" = ( -/obj/item/clothing/accessory/armor/tag/abneg, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yez" = ( -/obj/machinery/smartfridge/produce, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeF" = ( -/obj/item/clothing/under/pants/track/red, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeG" = ( -/obj/item/clothing/accessory/scarf/darkblue, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeJ" = ( -/obj/structure/portal_event/resize/preset_shrink_twentyfive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeO" = ( -/obj/item/clothing/head/wizard/fake/realistic/colorable, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yeP" = ( -/obj/item/clothing/under/shorts/jeans/female, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfd" = ( -/obj/item/clothing/suit/space/void/medical/alt2, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfi" = ( -/obj/item/weapon/stamp/qm, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfC" = ( -/obj/item/weapon/card/id/event/accessset/itg/crew/research, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfG" = ( -/obj/item/stack/tile/floor/eris/white/cyancorner, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfJ" = ( -/obj/machinery/computer/transhuman/resleeving, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfT" = ( -/obj/item/clothing/suit/kimono/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yfY" = ( -/obj/structure/sign/atmos_air, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygb" = ( -/obj/machinery/cell_charger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygi" = ( -/obj/item/weapon/deck/cards/casino, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygk" = ( -/obj/item/clothing/suit/storage/teshari/cloak/standard, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygm" = ( -/obj/item/weapon/bedsheet/ian, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygn" = ( -/obj/structure/closet/secure_closet/hos_wardrobe, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygv" = ( -/obj/structure/bed/chair/sofa/left/yellow, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygy" = ( -/obj/item/toy/figure/vagabond, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ygN" = ( -/obj/item/ammo_magazine/m545saw, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yha" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhd" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag/o10_alt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhi" = ( -/obj/item/weapon/circuitboard/sensors, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhm" = ( -/obj/item/toy/plushie/ipc, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhn" = ( -/obj/item/weapon/storage/belt/security/tactical/amara_belt, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yht" = ( -/obj/structure/door_assembly/door_assembly_eng, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhA" = ( -/obj/item/seeds/potatoseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhD" = ( -/obj/item/toy/plushie/therapy/green, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhU" = ( -/obj/machinery/appliance/cooker/fryer, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhW" = ( -/obj/item/clothing/suit/armor/material/makeshift/durasteel, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yhX" = ( -/obj/item/seeds/cabbageseed, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yie" = ( -/obj/item/weapon/circuitboard/telecomms/bus, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yik" = ( -/obj/item/clothing/under/gsa, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yim" = ( -/obj/item/clothing/suit/storage/hooded/hoodie/yellowtrim, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiv" = ( -/obj/item/weapon/gun/projectile/automatic/serdy/rpd, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiz" = ( -/obj/item/clothing/under/solgov/utility/fleet/officer/engineering, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiA" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "10" - }, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiC" = ( -/obj/item/clothing/head/flatcap, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiE" = ( -/obj/item/clothing/head/helmet/solgov, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiJ" = ( -/obj/machinery/vending/event/clothing, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiK" = ( -/obj/machinery/pda_multicaster, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiO" = ( -/obj/machinery/door/airlock/angled_bay/hatch/security, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiV" = ( -/obj/item/weapon/book/manual/stasis, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yiZ" = ( -/obj/machinery/chemical_dispenser/xenoflora, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjg" = ( -/obj/item/clothing/under/shorts/cshorts/olive, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjh" = ( -/obj/structure/bed/chair/sofa/corp/left, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjq" = ( -/obj/item/clothing/head/hood/winter/cargo, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjw" = ( -/obj/machinery/airlock_sensor/airlock_exterior/shuttle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjB" = ( -/obj/item/clothing/under/rank/security/turtleneck, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjH" = ( -/obj/item/weapon/reagent_containers/food/snacks/mouseburger, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjI" = ( -/obj/item/weapon/reagent_containers/glass/bottle/carthatoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjO" = ( -/obj/item/clothing/glasses/hud/security/eyepatch, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjP" = ( -/obj/item/trash/tgmc_mre, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjQ" = ( -/obj/item/weapon/storage/mrebag/dessert/menu9, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yjV" = ( -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykc" = ( -/obj/item/weapon/gun/energy/pulse_rifle, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykd" = ( -/obj/item/weapon/orion_ship, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykh" = ( -/obj/item/clothing/gloves/gauntlets/rig/light/ninja, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yki" = ( -/obj/item/device/multitool/alien, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yko" = ( -/mob/living/simple_mob/metroid/jellybrig{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ykq" = ( -/obj/vehicle/bike/built, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykA" = ( -/mob/living/simple_mob/animal/sif/duck{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) -"ykB" = ( -/obj/machinery/door/airlock/angled_bay/hatch/medical, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykE" = ( -/obj/item/ammo_magazine/ammo_box/b357, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykP" = ( -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/quad, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ykX" = ( -/obj/item/clothing/accessory/armor/helmcover/navy, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yln" = ( -/obj/item/clothing/accessory/cowboy_vest, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylp" = ( -/obj/structure/firedoor_assembly, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylr" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/imidazoline, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yls" = ( -/obj/item/weapon/spell/spawner/darkness, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"yly" = ( -/obj/item/integrated_circuit/trig/secant, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylC" = ( -/obj/structure/door_assembly/door_assembly_mai, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylD" = ( -/obj/item/weapon/reagent_containers/chem_disp_cartridge/grenadine, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylH" = ( -/obj/item/stack/material/void_opal, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylK" = ( -/obj/item/weapon/storage/box/syringegun, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylU" = ( -/obj/item/projectile/temp, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylW" = ( -/obj/item/weapon/cell/device/weapon/recharge/alien/omni, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ylZ" = ( -/obj/item/weapon/paper/petrification_notes, -/turf/simulated/fitness{ - icon_state = "vault" - }, -/area/survivalpod) -"ymd" = ( -/mob/living/simple_mob/humanoid/pirate/shield/machete{ - ai_holder_type = null - }, -/turf/simulated/floor/atoll, -/area/survivalpod) - -(1,1,1) = {" -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -"} -(2,1,1) = {" -brz -qaL -vOT -eWc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ssz -bHj -qOs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -kwr -ebu -ebu -ebu -ebu -ebu -bkG -lqD -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -tek -tek -tek -tek -tek -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(3,1,1) = {" -brz -cEy -vOT -gHP -uKc -laV -vPU -uBg -jSL -kny -jXL -jVT -awJ -xVN -lOC -hBu -vch -rOh -pYS -fEb -kSu -hlO -fWs -ghb -qBP -uQf -vOT -ykc -adt -kQw -nmd -lzU -jmX -dGI -vOT -vOT -vOT -vOT -vOT -mDr -bbQ -iWV -vOT -vOT -wlT -vOT -azl -vOT -skl -vOT -msU -vOT -nZP -vOT -upK -vOT -hYk -vOT -ctb -vOT -tbE -vOT -dxE -vOT -jbb -vOT -daa -vOT -qta -vOT -rgR -vOT -wBo -vOT -vOT -vOT -prp -qCU -cCQ -cPs -wfC -ttI -vWa -uMT -oXv -luq -osq -nLE -kJu -rKA -dpU -jYq -xoY -wSs -uKo -vap -bXj -aqC -rvH -pan -lnF -tWG -rnH -vFt -qeg -wwr -api -pQL -oXS -kCX -uBn -nLD -odz -vOT -vOT -nKw -mOA -vOT -vOT -vOT -ebu -ebu -ebu -lLX -ebu -aVy -ebu -aqU -ebu -jrK -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -leu -ebu -ebu -ebu -ebu -tek -fqy -wzs -pAU -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(4,1,1) = {" -brz -vOT -vOT -vOT -vOT -mYN -jPx -vOT -vOT -wHf -vOT -vOT -vOT -vOT -fwj -vOT -xiz -vOT -vOT -vOT -aFh -pmc -pOZ -ind -sYw -tqn -vOT -vSh -uwt -vOT -kHr -rLl -caX -fcU -vOT -vOT -vOT -vOT -vOT -cfs -sRn -rWK -vOT -vOT -vOT -vOT -fKv -vOT -ldR -vOT -gTY -vOT -iWj -vOT -bOa -vOT -ecC -vOT -hIP -vOT -eIb -vOT -gJg -vOT -cov -vOT -rjw -vOT -blu -vOT -hcq -vOT -mvv -vOT -vOT -vOT -gNn -xkw -nsi -bMf -snU -sfd -sjs -rLk -vOT -hGV -dHt -aWQ -gCM -xaa -fum -rzF -thT -vOT -phF -vOT -gmk -djQ -tEf -smY -ldt -dwp -pXn -vOT -eDy -wmu -jLB -dAh -nPx -vOT -vOT -vOT -vOT -vOT -vOT -jBQ -fMl -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -hPZ -duk -ebu -tKE -ebu -xlR -ebu -hOA -mWH -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -wdu -ebu -ebu -ebu -qnt -hhW -ebu -ebu -ebu -ebu -tek -ebu -pwL -qvK -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(5,1,1) = {" -brz -vOT -vOT -iZR -azD -vOT -bAx -jIq -vOT -wPv -fey -dUN -jrG -wxH -vOT -pAL -npO -ihb -rAy -gKZ -lVy -nnu -fev -pRD -dVo -nBx -wch -dDH -lAc -jqI -bnw -ber -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ssz -bHj -qOs -vOT -vOT -vOT -vOT -evA -vOT -eDc -vOT -bSb -vOT -rcS -vOT -gdR -vOT -fFM -vOT -qKn -vOT -gHU -vOT -vOT -vOT -kYD -vOT -hsK -vOT -cQG -vOT -nIe -vOT -vOT -vOT -vOT -vOT -wIp -vOT -vOT -nJa -daT -vOT -qMV -ogh -vOT -wxL -mFM -ovW -vOT -muk -kXn -kya -vOT -vOT -bfR -vOT -fPu -vOT -iZZ -oxK -vOT -sJO -vOT -vOT -vOT -qPA -vnU -shr -gqF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fSY -hlc -ebu -eHv -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -bii -ebu -xgA -jNX -ebu -nfu -ebu -ebu -ebu -eCT -pjK -ebu -ebu -ebu -oSk -ebu -ebu -ebu -ebu -xxe -rzH -uBJ -lKG -ebu -ebu -ebu -ebu -icZ -nQQ -ebu -ebu -foC -kAL -ebu -ebu -bEL -ebu -ebu -ebu -ebu -ebu -ekO -ebu -ebu -ebu -ebu -tek -ccD -tkh -hKB -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(6,1,1) = {" -brz -vOT -vOT -vOT -vOT -fFO -vOT -vOT -vOT -vOT -eHh -vOT -kJj -vOT -tqX -vOT -sVY -vOT -vOT -lTI -qRe -hEF -vOT -qoI -mxf -cID -dZT -xja -vOT -upi -khF -svZ -dGb -xEc -vOT -vOT -vOT -vOT -vOT -mDr -pdO -iWV -vOT -vOT -vOT -vOT -xFd -vOT -xFw -vOT -rXZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wpu -vOT -hmu -vOT -cyG -vOT -feu -vOT -rtG -vOT -wnn -vOT -vOT -vOT -acv -vOT -vOT -jlE -vOT -vOT -hyF -aOJ -vOT -xYI -mOt -vOT -vOT -ktA -umF -seu -vOT -vOT -aKG -vOT -wnc -vOT -vOT -nqL -vOT -vOT -vOT -vOT -vOT -qjO -njv -qPL -pbJ -vOT -vOT -vOT -vOT -vOT -vOT -fhK -iZI -vOT -vOT -vOT -ebu -eaW -ebu -rDz -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -uVB -ebu -vRv -ebu -ebu -bnk -ebu -ebu -ebu -goJ -kLC -gNy -ebu -ebu -qKx -ebu -ebu -ebu -ebu -xJy -vbE -oaY -jST -ebu -ebu -ebu -ebu -eJD -tGj -ebu -ebu -kbA -ddH -ebu -ebu -gVs -fgG -aAu -ebu -qpZ -ebu -jDP -ebu -ebu -ebu -ebu -tek -pyV -rUT -ucH -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(7,1,1) = {" -brz -vOT -vOT -fNN -rys -vOT -vOT -hkt -vOT -dkL -wEB -hKU -pNr -tyH -sWs -tuA -ovP -spY -gPZ -vOT -ctp -qmJ -vOT -upe -jSH -nQT -fDv -lLD -tuM -kxj -vOT -jAv -lFg -ffa -vOT -vOT -vOT -vOT -vOT -cfs -sRn -rWK -vOT -vOT -hmL -vOT -gkJ -vOT -vOT -vOT -iMN -vOT -kkc -vOT -kZu -vOT -vcw -vOT -gQt -vOT -oQI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gsw -vOT -cdB -vOT -vOT -vOT -vOT -vOT -kRs -vOT -vOT -hQC -vOT -vOT -oyM -vOT -vOT -vOT -obm -vOT -vOT -vPk -vOT -vOT -vOT -vOT -pkM -vOT -vOT -vOT -vOT -fRn -vOT -vOT -vOT -vOT -vOT -fTD -gUI -diy -gtm -vOT -vOT -vOT -vOT -vOT -vOT -gPu -vOT -vOT -vOT -vOT -ebu -wAM -ebu -ydr -vps -sjB -ebu -ebu -ebu -mvT -ebu -ebu -ykA -ebu -lzc -ebu -ebu -ebu -ebu -ebu -ebu -mTv -ebu -ebu -ebu -ebu -vqU -ebu -ebu -ebu -ebu -uuu -ihU -cQK -sBR -mZi -ebu -ebu -ebu -qCQ -gSz -ebu -ebu -lkM -jgY -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dVy -ebu -ebu -ebu -ebu -tek -pMq -pNj -jfq -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(8,1,1) = {" -brz -vOT -vOT -vOT -vOT -lbz -vOT -vOT -vOT -udX -vOT -vOT -faf -vOT -vOT -eUH -vOT -vOT -vOT -niA -uOB -ulK -vOT -tpE -mrR -vOT -vOT -vOT -vOT -vOT -vOT -jxN -vOT -tnR -vOT -vOT -vOT -vOT -vOT -jxt -ngc -mZA -vOT -vOT -vOT -vOT -elv -vOT -sFv -vOT -kKk -vOT -gHu -vOT -irv -vOT -eKg -vOT -bdh -vOT -vOT -vOT -suB -vOT -pzb -vOT -lbg -vOT -gJn -vOT -rIo -vOT -vOT -vOT -vOT -vOT -uig -vOT -vOT -gYD -vOT -vOT -vOT -vOT -vOT -vOT -gfp -vOT -vOT -tFo -vOT -vOT -vOT -vOT -lYG -vOT -vOT -vOT -vOT -rzf -vOT -vOT -vOT -vOT -vOT -anE -ajL -uPt -rMc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -tin -ebu -myl -lDN -eCF -ebu -ebu -ebu -jdq -ebu -ebu -vwL -ebu -lNI -ebu -bdX -ebu -ebu -ebu -ebu -dAa -ebu -ebu -ebu -ebu -joa -ebu -ebu -ebu -ebu -ebu -ebu -fwK -ebu -ebu -ebu -ebu -ebu -aHY -tNb -ebu -ebu -jlI -jTu -ebu -ebu -ebu -xdR -ebu -xRQ -ebu -ebu -mcm -ebu -ebu -ebu -ebu -tek -sqB -cwl -tON -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(9,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rcB -aEu -vOT -vOT -rHf -vOT -eOa -lRi -utR -wKi -sWZ -erg -gwY -vOT -jls -joD -ddi -vOT -vOT -vOT -vOT -vOT -phR -lYX -jRj -vOT -vOT -vOT -vOT -cqq -vOT -dlx -vOT -fVg -vOT -vOT -vOT -vOT -vOT -mUP -vOT -vOT -vOT -cMm -vOT -bYX -vOT -kay -vOT -aYZ -vOT -gpV -vOT -cxy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -baN -vOT -vOT -vOT -vOT -vOT -vOT -nNh -vOT -vOT -rBy -vOT -vOT -vOT -vOT -rBA -vOT -vOT -vOT -vOT -fMz -vOT -vOT -vOT -vOT -vOT -vOT -vZL -fmC -hnG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -kmu -ebu -aZr -aOW -skF -lWT -ebu -ebu -cUS -ebu -mAM -ovG -ebu -tSB -ebu -kFU -ebu -ebu -ebu -ebu -tfc -ebu -ebu -ebu -ebu -eZe -ebu -ebu -ebu -ebu -ebu -ebu -jYF -vJk -fPl -ebu -ebu -ebu -osN -ebu -ebu -ebu -ebu -tKt -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -bcZ -ebu -ebu -ebu -ebu -tek -ebu -smh -kth -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(10,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dfJ -vOT -vOT -vOT -ltR -vOT -vOT -vOT -vOT -vOT -cXP -ppQ -aDD -vOT -vOT -vOT -vOT -vOT -ncb -eaf -ttN -vtR -afM -jwc -vOT -pjR -vOT -vOT -vOT -kxX -vOT -wIi -vOT -wwc -vOT -gFj -vOT -iZH -vOT -pBG -vOT -oHd -vOT -pbF -vOT -pwJ -vOT -lAz -vOT -uhx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sWU -vOT -vOT -vOT -vOT -vOT -vOT -uoD -vOT -vOT -xha -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tAS -lBT -flg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -gXO -ebu -iYe -qFo -fNA -ebu -ebu -ebu -ugo -ebu -ebu -qgl -ebu -lPT -ebu -ebu -ebu -ebu -ebu -ebu -gQB -nGq -ebu -ebu -ebu -iBu -ebu -ebu -ebu -ebu -ebu -ebu -vjB -ebu -ebu -ebu -ebu -ebu -eRH -ebu -ebu -ebu -ebu -dMX -ebu -ebu -nNj -ebu -vUY -ebu -ebu -ebu -uEt -ebu -ebu -ebu -ebu -tek -ssi -roK -iKu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(11,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xBs -vOT -vxf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kWU -sZQ -vzk -vOT -nui -vOT -fDh -vOT -vOT -vOT -jOv -vOT -vOT -vOT -vOT -vOT -cfC -vOT -knh -vOT -tBs -vOT -nNs -vOT -vOT -vOT -xzS -vOT -hLs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -szd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vHS -xxo -kMk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -gfa -ebu -ebu -ebu -ebu -ebu -bIF -ebu -ebu -guX -ebu -dUn -mjH -vgD -ebu -ebu -ebu -ebu -lFb -eAo -ebu -ebu -ebu -xOI -ebu -ebu -ebu -ebu -ebu -ebu -lRV -nHk -ebu -ebu -ebu -ebu -wdn -ebu -ebu -tai -ebu -kgE -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -gtt -ebu -ebu -ebu -ebu -tek -vdt -bam -ijQ -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(12,1,1) = {" -brz -rCc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cPF -jCp -gOs -vOT -vOT -vOT -flw -vOT -vOT -vOT -vnN -vOT -vOT -vOT -vcH -vOT -snD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bQM -vOT -num -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aww -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -plw -imz -axS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -rlw -kWo -ebu -ebu -ebu -ebu -drS -ebu -ebu -jwv -ebu -rYh -ebu -ebu -ebu -ebu -ebu -ebu -aAM -xSP -hEw -ebu -ebu -hoT -eTV -iGG -nQq -ebu -ebu -ebu -dbI -pAu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -qtS -ebu -xZi -ebu -ebu -dUB -pIY -ebu -ebu -ebu -ebu -eDH -iNP -cve -wkX -ebu -tek -kIl -xfn -ebu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(13,1,1) = {" -brz -vOT -vOT -rtO -oPk -dkc -jWJ -oLP -vOT -qmU -xfV -fBK -phS -orb -sLE -pVD -eQm -vhO -nKd -mVY -aSH -hIV -mAH -fdl -jXS -bVm -hLJ -tYb -dRV -rYJ -tKP -wSp -roS -ajt -ykP -eZx -tSi -mLa -gYq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bbX -vOT -jqV -vOT -vOT -vOT -jur -vOT -xBh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -paR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iKK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -fNF -ebu -eEO -qRP -mUn -jPf -ebu -ebu -rsY -ebu -ebu -cji -ebu -sLO -fvE -ebu -ebu -dol -ebu -ebu -uIU -ebu -ebu -ebu -ebu -dHA -pLI -ebu -ebu -ebu -ebu -ebu -qVf -nYR -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dhI -ebu -dIu -ebu -ebu -rlP -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -tek -tek -tek -tek -tek -tek -tek -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(14,1,1) = {" -brz -vOT -vOT -vOT -dJV -ejI -vOT -vOT -vOT -eZR -xux -hMI -cKR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fAu -spm -fxi -aHG -amK -oCo -jGy -tjz -pfK -vOT -vOT -vOT -vOT -igp -kNi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kCG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sVA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -utw -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -hNE -ebu -pky -vBZ -ebu -ebu -ebu -ebu -gFg -ebu -fek -skS -ebu -lUO -ebu -ebu -ebu -ndW -ebu -ebu -ebu -ebu -ebu -ebu -ebu -lIb -rXV -uRE -ebu -ebu -ebu -ebu -tbo -fTN -ebu -ebu -ebu -sbl -ebu -bxg -ebu -dua -ebu -buN -ebu -ebu -ouY -nNV -sXf -fFW -uQl -ebu -pHu -ebu -ebu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(15,1,1) = {" -brz -vOT -vOT -cRV -vOT -vOT -uKs -rBo -vOT -vOT -gsa -tGL -aYn -jhD -cYC -gWA -gak -dKQ -dWJ -jWQ -yiv -vuN -sag -tUJ -uyf -dku -uwC -hjZ -soZ -wrq -wJS -eGO -xfS -gGe -tPx -nWU -aPJ -aUF -mHC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -grE -ebu -ebu -ebu -ebu -ebu -ldB -ebu -ebu -rnT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -fYs -sGe -qfW -dUw -ebu -alr -ebu -ebu -ebu -ebu -ebu -ebu -kJS -csC -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -jAe -ebu -ebu -glr -ebu -ebu -ebu -ebu -ebu -sAi -vbf -ebu -ebu -ebu -tek -pOz -rFX -ebu -tul -ami -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(16,1,1) = {" -brz -fUy -vOT -neL -sDf -qIW -vOT -vOT -vOT -euc -uOA -iFm -qiJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gTG -gAI -vOT -iMf -vOT -ihM -oqc -rfC -bxP -vOT -vOT -ujD -qVI -oqM -mCM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ett -vOT -pjf -vOT -snc -vOT -aAS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nNf -bWH -wog -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -cBt -eDq -ebu -ebu -ebu -ebu -ebu -ebu -ebu -vcA -ebu -ebu -nYQ -nYQ -nYQ -ebu -ebu -ebu -hDv -ebu -ebu -ebu -ebu -gEa -lKT -cfh -eOt -iEM -ebu -ebu -nWP -cYJ -ebu -ebu -ebu -aYL -ebu -kPt -ebu -ebu -ebu -dXA -ebu -ebu -wrs -atW -anS -ebu -ebu -ebu -xLZ -wbL -ebu -ebu -ebu -tek -vbL -nxp -ebu -uhb -pJT -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(17,1,1) = {" -brz -wAA -vOT -gHI -vOT -tkF -wAl -smX -vOT -vOT -icz -jzv -pDf -fBL -iEL -kzY -laJ -eam -tZy -hZS -mwd -scH -ioV -mmJ -uMt -oFG -upg -xSS -vOT -xEV -lRP -adg -omx -dla -bUY -vOT -oSI -jnD -fiY -vOT -vOT -vOT -vOT -sJA -vOT -vOT -eqH -gAP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tjh -vOT -kzA -vOT -hZx -vOT -aWR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rlH -bHh -tPB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -opI -lcM -kwH -wRP -ebu -ebu -syH -ebu -ebu -lYa -ebu -ebu -nYQ -dPP -nYQ -ebu -ebu -ebu -ukV -ebu -ebu -ebu -ebu -wln -ebu -ebu -ebu -ebu -ebu -ebu -cdN -dmR -rBB -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -mTB -ebu -ebu -ebu -ebu -ebu -ebu -fHS -ebu -xby -ebu -ebu -jmW -ebu -tek -iyH -qSL -ebu -ihR -bxz -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(18,1,1) = {" -brz -qmW -vOT -vOT -idf -rvQ -vOT -vOT -vOT -wMS -rit -ast -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rKM -mSa -sfl -vOT -jRT -vOT -ued -odg -xYD -eoX -vOT -vOT -qgc -bvy -vOT -vOT -vOT -vOT -vOT -vOT -fXn -vOT -vOT -yaQ -bCt -vOT -vOT -eqH -gAP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bkB -vOT -vOT -vOT -qZL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rqL -vOT -vOT -vOT -vOT -uuf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vXa -vqV -dfc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -iyC -kCU -wCF -ebu -ebu -ebu -iFq -ebu -ebu -fnY -ebu -ebu -nYQ -nYQ -nYQ -ebu -ebu -ebu -qmX -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dtl -ebu -ebu -ebu -ebu -hKe -ebu -rLu -ebu -ebu -ebu -pso -ebu -ebu -iGD -ebu -pkg -ebu -aKa -ebu -jvt -ebu -ebu -ebu -ebu -tek -bML -mqb -ebu -dPe -oNt -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(19,1,1) = {" -brz -ueA -vOT -ieB -cDx -gMY -qbs -nbH -vOT -vOT -dTn -vOT -cPe -eqT -ulM -wed -kRc -bdk -qNb -eBY -bmG -eDv -bEF -qDG -lfv -gTb -xBw -vOT -vOT -bXf -uOg -vOT -vOT -nfH -fej -vOT -ocG -vHh -rYy -vOT -vOT -vOT -tsY -vOT -vOT -vOT -yaQ -bCt -vOT -vOT -yaQ -bCt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sNY -vOT -ipa -vOT -tLd -vOT -ppi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tWv -nMO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -nky -ebu -ebu -nYQ -lCY -nYQ -ebu -ebu -ebu -jJE -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -shw -ebu -ebu -ebu -ebu -ebu -ebu -kRL -ebu -imS -ebu -otr -ebu -ebu -frY -ebu -pyE -ebu -bga -ebu -ebu -ebu -ebu -cKA -ebu -tek -fyR -egq -ebu -eIq -lyr -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(20,1,1) = {" -brz -jWY -vOT -pbB -rBq -rsp -vOT -vOT -vOT -vOT -vOT -dAZ -lJd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ifE -uED -rzl -vOT -joo -vOT -pBt -xvC -vOT -tQn -vOT -cOX -vDf -bfl -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -slV -cwt -vOT -vOT -slV -cwt -vOT -vOT -cYa -vOT -nui -vOT -fKv -vOT -xvz -vOT -dNI -vOT -nOP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -wMm -lft -ebu -wkT -cLW -ebu -ebu -ebs -ebu -ebu -ebu -ebu -ebu -nYQ -nYQ -nYQ -ebu -ebu -ebu -oYV -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -fho -ebu -ebu -ebu -ebu -ebu -ebu -qMJ -ebu -abt -ebu -trZ -ebu -ebu -aoI -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -gbK -uKg -ebu -qsK -szT -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(21,1,1) = {" -brz -vOT -vOT -dpX -vOT -bYc -oWe -vOT -vOT -vOT -gCd -eQB -vOT -qGl -oJl -hYS -lZp -oHy -avW -tdy -jKu -dWO -axC -uRN -wQv -rMh -vOT -vOT -vOT -iLZ -dAO -vOT -vGA -cCM -uTF -vOT -hpP -vOT -vOT -vOT -vOT -vOT -omX -vOT -vOT -vOT -vhV -tGR -vll -vOT -vhV -tGR -vll -vOT -bON -vOT -vOT -vOT -evA -vOT -fGP -vOT -dDZ -vOT -vOT -vOT -bUX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -qxS -dmQ -ebu -wjE -iqJ -tue -ebu -iVV -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ewh -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -jzH -clE -piY -jYn -fAS -ebu -ebu -ebu -ebu -ebu -ebu -mqL -ebu -ebu -tUr -ebu -cSP -aiD -uEl -ebu -ebu -ebu -ebu -ebu -ebu -tek -gxk -ebu -ebu -oaS -xcn -kGc -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(22,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mKB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mdB -vOT -vOT -vOT -cNj -mYS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -maU -nPH -lYh -vOT -maU -nPH -lYh -vOT -jBm -vOT -cqq -vOT -xFd -vOT -vTV -vOT -nyR -vOT -gyC -vOT -grc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -rPy -bYm -fbC -ebu -hkT -bkg -ebu -crl -ebu -ebu -ebu -ebu -ebu -ebu -vUV -ebu -ebu -ebu -ebu -qEM -ebu -ebu -ebu -ebu -jYU -ebu -ebu -ebu -ebu -ebu -ebu -kDY -ebu -ebu -ebu -ebu -ebu -ebu -asu -ebu -ebu -ebu -lXc -ebu -ebu -hgA -ebu -ebu -ebu -tto -ebu -ebu -ebu -ebu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(23,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lhn -vOT -vOT -vOT -uhZ -gnw -teM -vOT -uhZ -gnw -teM -vOT -hHN -vOT -elv -vOT -gkJ -vOT -lEL -vOT -vOT -vOT -vUM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -iCR -ebu -oni -whd -uEl -ebu -pUc -ebu -ebu -ebu -ebu -ebu -ebu -eTB -ebu -ebu -ebu -ebu -ffm -ebu -ebu -ebu -ebu -kWW -beR -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -mnv -ebu -ebu -pPs -ebu -eKe -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tek -tek -tek -tek -tek -tek -tek -tek -tek -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(24,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nKT -pYl -vpy -vOT -nKT -pYl -vpy -vOT -vOT -vOT -dlx -vOT -azl -vOT -htF -vOT -hHN -vOT -vOT -vOT -bAd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -qaq -rqM -ebu -gFi -jyP -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -pVy -ebu -ebu -ebu -ebu -wQf -hWf -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -cNM -ebu -ebu -rQl -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -jYU -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(25,1,1) = {" -brz -vOT -vOT -nYs -sMa -ojS -nwM -dnr -vOT -vOT -vOT -xkI -tiP -cLh -eqD -wKM -hUk -cnE -eVr -izR -sph -pka -ptI -bGX -hBw -gbr -miE -lAA -vkg -lxA -agT -vOT -fYh -bYI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kwN -mNb -epf -vOT -kwN -mNb -epf -vOT -vOT -vOT -tbE -vOT -cMm -vOT -jLj -vOT -vOT -vOT -hhk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -tpY -dZS -vVf -oEv -iJO -ebu -iaQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -sMr -ebu -ebu -ebu -ebu -ebu -uqS -ebu -ebu -ebu -ebu -ebu -jGh -ebu -ybV -ebu -sTY -ebu -ebu -ebu -ebu -ebu -ebu -nOX -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(26,1,1) = {" -brz -vOT -vOT -hul -lFt -meW -lyA -bLM -vOT -vOT -vOT -oZw -dQj -cIH -vOT -jtM -xWq -xts -knG -vLP -nVc -ezn -sCH -kVs -sWK -dBx -wCH -lHp -vOT -tsx -ydt -vOT -sff -vob -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lLz -vOT -vOT -vOT -oVt -rNV -iLU -vOT -oVt -rNV -iLU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tgW -vOT -mBq -vOT -vOT -vOT -vIX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -vrG -tXb -gNT -yko -ebu -ebu -cpY -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rxm -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(27,1,1) = {" -brz -vOT -vOT -tVN -jId -cJt -xmf -vOT -vOT -vOT -vOT -ffE -hFY -bsa -pej -iCc -nVb -pYg -vOT -pOr -lNR -vOT -vOT -vOT -qJm -rUg -jAU -vMC -vOT -kAe -vOT -vOT -weF -izj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -yiA -vXo -rFu -vOT -yiA -vXo -rFu -vOT -vOT -vOT -vOT -vOT -yiK -vOT -rUt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -vyd -pCP -jkQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -nZj -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -pGg -ebu -ebu -ebu -ebu -ebu -pXA -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -vqr -ebu -ebu -ebu -kYG -lhj -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(28,1,1) = {" -brz -vOT -vOT -nIX -knN -uFp -pTq -vOT -vOT -vOT -vOT -vad -aix -vOT -dCR -pzK -fQj -oKj -jav -paS -wzH -uHS -vOT -ntB -vOT -vOT -vOT -ejJ -vOT -mqA -kVp -vOT -xHX -kNT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eME -jlz -obD -vOT -eME -jlz -obD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uJg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -lUO -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rpV -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -laj -ebu -ebu -ebu -ebu -ebu -ebu -kim -ebu -ebu -aea -xPT -ciK -oUX -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(29,1,1) = {" -brz -vOT -vOT -rYv -vOT -ckf -cLD -vOT -vOT -vOT -vOT -oap -sBd -ozn -vOT -upo -vOE -atP -vOT -dSt -sUq -nYf -vOT -uIA -oBA -lEF -cDo -vOT -vOT -vOT -ydq -vOT -hSy -kAo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dsz -xNg -cRh -vOT -dsz -xNg -cRh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bOB -cDi -syo -cNg -pOV -guy -kKv -oXL -lYD -kvC -oll -suU -qrC -vRw -rrY -jod -hJL -wIu -npt -aQy -mMi -ygN -hyP -tRB -orK -pJY -csd -dzF -xed -fkk -mYD -bOt -xnr -ezS -oBO -fjq -cPu -vOT -kQW -vOT -jpJ -vOT -vOT -vOT -ebu -ebu -ebu -rTE -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -eXn -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -djU -ebu -ebu -ebu -nIF -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(30,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qcw -iUr -vOT -dlM -gSx -imL -vOT -gbp -gzp -pwT -vOT -qZa -vOT -rVJ -vOT -npJ -vOT -vOT -cjZ -vOT -hmB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mqt -koP -xdf -bUM -uPE -uBt -qsN -jUd -fNY -qTI -vWy -oNJ -poR -rWE -nUu -uKS -bkF -nGY -sJz -gWi -pvq -ovd -qKd -vOT -frX -qBD -ltd -sjg -vvS -qGe -jGS -xrD -bVB -lpM -aGV -hti -eUU -vOT -pDu -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -qxO -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -qke -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -eoC -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -eLB -ebu -ebu -fdZ -hvx -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(31,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vwq -cec -vOT -iwL -eUr -haE -vOT -vOT -cgH -vFq -vOT -kLx -gZH -vOT -vOT -sQX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ich -vOT -hXd -vOT -hPn -vOT -pYV -vOT -qJp -vOT -suT -vOT -yiJ -vOT -dLL -vOT -ahj -vOT -wSx -vOT -tXp -vOT -loK -vOT -sRv -vOT -uuO -vOT -oSK -vOT -gFy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dkg -bso -utn -weS -ykE -mSQ -bNy -vOT -jMh -jbF -gSo -vOT -siw -uvr -djE -npf -vbu -edI -bNz -iLi -lHy -dKF -dCJ -cGu -tyd -nSK -pbP -jhg -tjP -vOT -rqR -tsX -ayT -aQj -bCw -eUy -fxB -vOT -csh -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ttR -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -kzr -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(32,1,1) = {" -brz -vOT -vOT -wYx -xNo -vOT -puP -vOT -eRD -vOT -vOT -vOT -vOT -sDi -vOT -lWo -qbT -nKN -vOT -vOT -vOT -vOT -vOT -mQD -des -vOT -vOT -vrn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lVo -vOT -kCF -vOT -ikb -vOT -rOv -vOT -eZI -vOT -gqo -vOT -gqD -vOT -cIh -vOT -qXe -vOT -bVe -vOT -sAC -vOT -qcY -vOT -sEW -vOT -cXs -vOT -vOT -vOT -jgM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eOX -kxq -gFl -sdW -mQq -fwE -clO -owJ -vOT -qYb -nRX -uNL -etm -uqe -uYc -jAD -tfw -dVf -dXc -vOT -aDO -guw -bJV -qDQ -nZM -xnN -vOT -tIw -eTv -lkZ -sxY -vOT -str -ydv -vOT -vXt -eDA -vOT -ldZ -vOT -nfI -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -eTE -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -pzs -ebu -ebu -kMF -wUN -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(33,1,1) = {" -brz -vOT -vOT -iHW -eqz -vOT -vmN -vOT -kaY -vOT -vOT -vOT -vOT -anl -vOT -cuE -qse -vOT -vOT -vOT -vOT -cWq -vOT -rAZ -tUS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lpZ -vOT -mmg -vOT -hLY -vOT -pdg -vOT -xwu -vOT -hmS -vOT -nVO -vOT -lXo -vOT -awk -vOT -kfr -vOT -hiA -vOT -tzS -vOT -bwd -vOT -xDG -vOT -yez -vOT -ewQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bQy -jDC -dYx -wIg -hxY -hRC -bLJ -nku -okb -iif -moh -grz -dQZ -hmW -kDU -wac -wze -wJu -viG -vIv -ghq -vOT -gHl -vOT -kYJ -oqd -vhC -eus -bHy -hzM -vOT -tLg -ovV -gvd -ugJ -qMm -kZl -vOT -qsi -vOT -hVu -vOT -vOT -vOT -ebu -aUN -ebu -qEh -bGT -ebu -ebu -sgJ -eOW -gDk -ebu -ebu -ebu -ebu -ebu -ebu -kOU -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dCh -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -lhr -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(34,1,1) = {" -brz -vOT -vOT -eBc -wuS -vOT -vOT -vOT -fvB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fwx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hrK -vOT -sEI -vOT -wck -vOT -wCd -vOT -gkr -vOT -gDO -vOT -vgF -vOT -rUM -vOT -udI -vOT -uty -vOT -tfo -vOT -iPD -vOT -bSD -vOT -pCj -vOT -nRt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pZo -bYY -nDi -qfg -mUj -wtx -mNG -hvy -vlr -sxq -vOT -djz -vOT -vOT -vOT -mKG -kYz -wVm -hmv -tZr -gVL -jwb -vOT -oqp -ewI -emk -gzz -llu -jQb -ame -vOT -dYU -boV -prf -wkJ -eBw -vOT -sqD -vOT -wqB -vOT -vOT -vOT -ebu -uEY -ebu -ebu -mpH -ebu -ebu -pGy -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -hXa -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -aXc -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(35,1,1) = {" -brz -vOT -vOT -gfJ -mEg -vOT -cQe -vOT -jib -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nGr -xvH -kfN -vwg -kmC -cid -bNx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xSu -vOT -kjA -vOT -bcz -vOT -ghW -vOT -izl -vOT -lIz -vOT -hcI -vOT -bBy -vOT -nXN -vOT -wRh -vOT -jXu -vOT -iPD -vOT -qJp -vOT -mjR -vOT -dmr -vOT -tap -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vqz -nKp -xhH -yaO -vOT -vOT -cIU -qgE -oLz -lJZ -vOT -vOT -vOT -vOT -vOT -rEz -vOT -vIN -avM -vOT -vOT -gCE -jHv -dFC -vOT -ena -qnr -xmx -qJQ -sKT -vOT -vOT -vOT -kup -vOT -qlO -vOT -fYg -vOT -vOT -vOT -ebu -jSw -ebu -ebu -nnz -ebu -ebu -vwN -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -crs -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -wQZ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ojK -ebu -ebu -ebu -fzV -ebu -ebu -ebu -jrD -hZL -tjR -sot -xKp -ebu -coQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(36,1,1) = {" -brz -vOT -vOT -hWj -eOO -vOT -xTz -vOT -raa -vOT -vOT -bvY -kHp -vOT -cWa -eVS -bcr -vOT -rTT -vOT -vrM -gcR -cja -jHt -jtC -pjU -sfM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -buB -vOT -vOT -vOT -vOT -vOT -jLH -vOT -vOT -vOT -uRk -vOT -qJe -vOT -qDg -vOT -qup -vOT -sKc -vOT -oET -vOT -jLH -vOT -eZI -vOT -vOT -vOT -vOT -vOT -pYb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oZy -emS -edw -csY -aQu -vOT -rDm -mws -vOT -iRz -vOT -vOT -vOT -vcm -jgV -vOT -vOT -ftl -fil -vTu -vOT -cdD -xJO -kuT -pxA -vOT -iWu -vOT -oex -bbE -vOT -brk -tKH -bZg -vOT -wdA -vOT -lol -vOT -vOT -vOT -ebu -gkN -ebu -ebu -vqn -lBF -ebu -aKV -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -wXy -oBX -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -pmX -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dXr -ebu -ebu -ebu -iUt -ebu -nEG -ebu -ebu -ebu -ebu -ebu -lZH -ebu -cKH -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(37,1,1) = {" -brz -vOT -vOT -aPh -chQ -vOT -kES -vOT -sjp -vOT -vOT -cgX -rrd -vOT -pEe -pMI -heC -vOT -wBx -vOT -nPW -jhP -mWo -xXC -ssR -ieS -qGF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tCm -vOT -tlq -vOT -usX -vOT -tzS -vOT -vOT -vOT -dwb -vOT -iVe -vOT -llP -vOT -hNR -vOT -aHi -vOT -eRj -vOT -ghW -vOT -xwu -vOT -myN -vOT -fyp -vOT -cxE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aou -irA -cff -vOT -iZn -vOT -vnM -eyY -vOT -lZc -vOT -vOT -vOT -vOT -wmG -qdg -vOT -iso -vOT -pPR -vOT -xQE -xBW -mrp -uWa -vOT -vOT -nCg -vOT -uDZ -vOT -fet -nhZ -vOT -vOT -gbC -vOT -gKc -vOT -vOT -vOT -ebu -ebu -ebu -ebu -lcI -hkL -ebu -tNL -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -xLd -syB -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dVn -ebu -ebu -ebu -ebu -ebu -imB -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ihI -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -iPc -ebu -mrK -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(38,1,1) = {" -brz -vOT -vOT -dfM -rCA -vOT -nvf -vOT -diU -vOT -vOT -iOY -xVD -vOT -usz -uNC -rzu -vOT -vOT -vOT -eCP -obF -iaR -ibM -sBu -wOp -nRC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iNj -vOT -mqu -vOT -vOT -vOT -qcY -vOT -vOT -vOT -gCZ -vOT -tyh -vOT -fIg -vOT -whm -vOT -wVv -vOT -lWE -vOT -wCd -vOT -gkr -vOT -loz -vOT -wXe -vOT -aMH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wiW -src -oLA -vOT -vOT -vOT -cjN -jlB -vOT -lWu -vOT -vOT -vOT -vOT -vOT -ojP -vOT -uYl -hOK -crc -vOT -lRG -xXO -vOT -vOT -vOT -xUZ -dsU -vOT -wuQ -vOT -vOT -cGI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -xyK -ebu -ebu -vle -ebu -ebu -uUt -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -cXn -sUv -cop -fTQ -iIe -ebu -ebu -ebu -ebu -ebu -ebu -uVE -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -oqX -ebu -ebu -ebu -kUe -ebu -kYF -ebu -ebu -ebu -ebu -ebu -rzC -ebu -gAm -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(39,1,1) = {" -brz -vOT -vOT -lbS -aSB -vOT -sMv -vOT -vOT -vOT -vOT -qSC -ltP -vOT -sWF -vOT -vOT -vOT -vOT -vOT -aDZ -pba -uio -ptR -lcr -lpl -xqi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qhV -vOT -vOT -vOT -loK -vOT -vOT -vOT -jfS -vOT -noU -vOT -mEH -vOT -haN -vOT -uVV -vOT -dLX -vOT -pdg -vOT -izl -vOT -nvk -vOT -cAn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jLS -aSK -qxv -vOT -vOT -vOT -sCi -uAI -vOT -vOT -vOT -vOT -vOT -vOT -iNZ -cUI -vOT -mXv -nsC -vOT -vOT -hVy -vOT -vOT -vOT -vOT -ofV -vOT -vOT -uOL -vOT -rQe -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -kRv -ebu -ebu -eLz -ebu -ebu -cxG -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -dCM -rIU -awO -bCL -kJs -uzl -ebu -ebu -ebu -ebu -ebu -xMm -ebu -ebu -ebu -ebu -ebu -gXs -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ugb -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -mGx -ebu -aal -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(40,1,1) = {" -brz -vOT -vOT -sFt -tIz -vOT -vOT -vOT -vOT -vOT -vOT -lMF -nwN -vOT -iXa -vOT -vOT -vOT -vOT -vOT -aDR -rWL -gIg -mze -mmv -wHT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bOL -vOT -ake -vOT -vOT -vOT -sRv -vOT -vOT -vOT -vxd -vOT -rGx -vOT -uqA -vOT -nHU -vOT -jxO -vOT -jUM -vOT -rOv -vOT -lVS -vOT -rgv -vOT -pvr -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tpQ -nRk -adL -vOT -vOT -vOT -gjF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vwf -vOT -vOT -twe -vOT -boK -vOT -lQU -vOT -vOT -vOT -vOT -vOT -bwX -vOT -thh -vOT -vOT -dPY -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -hoW -ebu -ebu -mGC -hNB -ebu -byF -ebu -ebu -ebu -ebu -ebu -rqa -sPt -ymd -uqm -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -wyz -ebu -ebu -ebu -ukM -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -fRQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(41,1,1) = {" -brz -vOT -vOT -dtd -fTL -vOT -nqj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bVZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sEW -vOT -vOT -vOT -rrt -vOT -rux -vOT -btj -vOT -muz -vOT -fUn -vOT -bBi -vOT -pYV -vOT -kfa -vOT -fRV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -waQ -owP -dqi -vOT -vOT -vOT -iyp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dgW -vOT -ecP -vOT -lRk -vOT -vOT -vOT -vOT -vOT -tAO -vOT -gkj -vOT -vOT -fIE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ogq -ebu -ebu -xoc -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -qkW -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -xri -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(42,1,1) = {" -brz -vOT -vOT -gVk -vOT -vOT -tJz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jui -vOT -vOT -ehG -nYK -vOT -vOT -vjE -vOT -jPM -vOT -syp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bwd -vOT -vOT -vOT -cNS -vOT -uPK -vOT -kQA -vOT -vFh -vOT -oVW -vOT -nnL -vOT -kYU -vOT -bxp -vOT -cAP -vOT -gDs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nFs -tbL -otk -vOT -vOT -vOT -fFA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iEk -vOT -vIF -vOT -lwJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tCE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -hRL -ebu -ebu -dYc -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -xso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(43,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -lic -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uhL -aQA -vOT -vOT -nPN -vOT -luH -vOT -mJG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bSD -vOT -vOT -vOT -qqP -vOT -bJe -vOT -iCG -vOT -pVN -vOT -aNB -vOT -tXw -vOT -waV -vOT -vOT -vOT -mXi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uoK -vOT -vOT -vOT -ftm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gUz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -okE -nLr -aUw -bdp -qFT -idV -oxa -aVx -ebu -uCL -sVw -hLw -voF -uJF -jRf -eYt -mdk -oLf -eSv -ebu -ebu -ebu -ebu -ebu -ebu -ebu -wyQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(44,1,1) = {" -brz -wSP -vOT -xHP -rQJ -vOT -pKd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wer -fWq -vOT -vOT -eLR -vOT -oKt -vOT -qSx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rbj -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -rso -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(45,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eYy -vOT -vOT -pZN -vOT -uhk -vOT -tup -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rFq -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -ndQ -nyp -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -niz -ebu -ebu -wvW -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(46,1,1) = {" -brz -ueA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vDI -vOT -vOT -wqm -vOT -xWR -vOT -fiH -vOT -qsm -vOT -qJy -vOT -yhU -vOT -wbk -vOT -dvB -vOT -pTm -vOT -tKF -vOT -fTM -fii -cbw -vOT -ckA -vOT -njG -vOT -xgu -vOT -abO -vOT -fKc -vOT -llN -vOT -cxF -vOT -fbF -vOT -fCg -vOT -xcC -vOT -bUz -vOT -nHm -vOT -vFp -vOT -kPo -vOT -hih -vOT -lHW -vOT -brZ -vOT -aWf -vOT -gYo -vOT -eXl -vOT -kGR -vOT -eSt -vOT -nvy -vOT -gju -vOT -eCb -vOT -gbJ -vOT -vSq -vOT -wpj -vOT -hAU -vOT -rrq -vOT -xJW -vOT -cDe -vOT -gvc -vOT -ver -vOT -rQo -vOT -iPK -vOT -gFb -vOT -vOT -ebu -ebu -pYT -gti -ebu -ebu -ebu -gVH -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -rso -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(47,1,1) = {" -brz -reS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nsF -vOT -sWT -vOT -iYu -vOT -mJe -vOT -lgH -vOT -eYs -vOT -fxD -vOT -diO -vOT -kJH -vOT -vMw -vOT -rYk -kqG -ggh -vOT -mJN -vOT -cso -vOT -vyj -vOT -lqN -vOT -rWf -vOT -oaL -vOT -mfw -vOT -lFQ -vOT -hbX -vOT -olS -vOT -vOT -vOT -iJL -vOT -hhZ -vOT -huP -vOT -oir -vOT -nHW -vOT -qNM -vOT -lxD -vOT -oHs -vOT -eBE -vOT -ujW -vOT -uBC -vOT -qfI -vOT -lSQ -vOT -ewN -vOT -kVW -vOT -xzF -vOT -etA -vOT -ndr -vOT -tos -vOT -sOj -vOT -pdf -vOT -vOT -vOT -nqO -vOT -esr -vOT -otG -vOT -rSL -vOT -vOT -ebu -ebu -hoM -ebu -ebu -ebu -ebu -wZu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -rso -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -boy -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(48,1,1) = {" -brz -gBE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pba -lcr -sBu -kmC -vOT -vOT -pnG -vOT -rcd -vOT -dto -vOT -mtS -vOT -yjw -vOT -niL -vOT -oqy -vOT -bzS -vOT -scq -vOT -olo -vOT -apo -cat -aVw -vOT -pnh -vOT -pml -vOT -rkl -vOT -djw -vOT -dWS -vOT -gAj -vOT -fPJ -vOT -hCo -vOT -sMY -vOT -kYn -vOT -fam -vOT -vPw -vOT -lVl -vOT -vuK -vOT -vOT -vOT -bVJ -vOT -vOT -vOT -esQ -vOT -iBA -vOT -wtD -vOT -gbs -vOT -vOT -vOT -xEL -vOT -hDh -vOT -pQg -vOT -hFh -vOT -olj -vOT -gpQ -vOT -bdu -vOT -bHo -vOT -uTf -vOT -qST -vOT -uNU -vOT -eHo -vOT -qYn -vOT -fQs -vOT -mfr -vOT -vOT -ebu -ebu -sCN -ebu -ebu -ebu -ebu -vti -bli -fGE -ebu -ebu -ebu -ebu -ebu -ebu -rso -rso -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -cIV -ebu -frM -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(49,1,1) = {" -brz -muO -vOT -cAF -hXD -rzT -wER -lHD -sVL -ixP -rIQ -dRu -cup -iiH -vOT -gIg -vwg -jHt -xXC -vOT -vOT -cnO -vOT -oaT -vOT -mzs -vOT -trs -vOT -onc -vOT -eVc -vOT -uzI -vOT -szJ -vOT -pws -vOT -roi -vOT -jkt -hsO -wJZ -vOT -ygb -vOT -uCV -vOT -bWM -vOT -voA -vOT -qHX -vOT -pgu -vOT -hjh -vOT -mHt -vOT -hFJ -vOT -hFb -vOT -eAu -vOT -vOT -vOT -pyQ -vOT -vOT -vOT -dQu -vOT -vOT -vOT -kFT -vOT -xCo -vOT -cUl -vOT -ukO -vOT -dSr -vOT -uvB -vOT -vOT -vOT -kJg -vOT -qAb -vOT -mUd -vOT -vXy -vOT -nxQ -vOT -cZa -vOT -sfB -vOT -fLt -vOT -ahV -vOT -oOk -vOT -ndq -vOT -ern -vOT -aHI -vOT -vOT -vOT -vOT -ebu -ebu -oLU -ebu -ebu -ebu -ebu -aFq -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -wLl -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -aaH -ebu -kLA -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(50,1,1) = {" -brz -tOE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ybx -gcR -ybx -keu -vOT -vOT -stD -vOT -jVv -vOT -ciR -vOT -eBq -vOT -vOT -vOT -cHI -vOT -oqi -vOT -nJq -vOT -oZa -vOT -aHo -vOT -tUd -oQN -vOT -vOT -qMp -vOT -odo -vOT -lvv -vOT -orO -vOT -dwr -vOT -vYg -vOT -bxc -vOT -uYM -vOT -yfJ -vOT -vOT -vOT -kxT -vOT -ycd -vOT -vOT -vOT -mEM -vOT -lHG -vOT -fqW -vOT -vOT -vOT -htE -vOT -qdb -vOT -niT -vOT -vOT -vOT -oXo -vOT -uvZ -vOT -teD -vOT -qOl -vOT -hqU -vOT -uis -vOT -fOn -vOT -ktd -vOT -ujr -vOT -vOT -vOT -gyH -vOT -oAk -vOT -vOT -vOT -crM -vOT -vOT -vOT -pdd -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -vpQ -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -rso -rso -rso -rso -rso -rso -rso -rso -rso -rso -ebu -ebu -ebu -ebu -ebu -ebu -ebu -jXz -ebu -end -ebu -eYR -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(51,1,1) = {" -brz -hro -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eRD -cBu -mTF -wmi -vgt -bHy -llu -ena -vOT -vOT -dQP -vOT -okM -vOT -tOP -vOT -paW -vOT -rQi -vOT -yaf -vOT -vOT -vOT -vIR -vOT -gAa -vOT -baC -vOT -pDw -fYQ -vOT -vOT -jsD -vOT -cAQ -vOT -hxK -vOT -pDi -vOT -bac -vOT -qMi -vOT -xOF -vOT -hXZ -vOT -mGF -vOT -imx -vOT -eXg -vOT -aIv -vOT -vOT -vOT -vOT -vOT -pRX -vOT -lOa -vOT -ozC -vOT -kaj -vOT -wFV -vOT -vOT -vOT -bDF -vOT -jwV -vOT -uJC -vOT -iuN -vOT -puY -vOT -dEa -vOT -hFl -vOT -vFg -vOT -bVi -vOT -fWm -vOT -jZr -vOT -aQg -vOT -vOT -vOT -mny -vOT -nwP -vOT -orH -vOT -vOT -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -tnN -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(52,1,1) = {" -brz -snd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kaY -sbS -mOs -sYs -btY -vvS -tjP -eTv -vOT -vOT -wHF -vOT -xOM -vOT -fOU -vOT -xTU -vOT -vOT -vOT -uwm -vOT -wlK -vOT -eRJ -vOT -iNv -vOT -vOT -vOT -mjD -kOQ -vOT -vOT -mOO -vOT -nus -vOT -yiZ -vOT -awH -vOT -aIW -vOT -jXE -vOT -gAR -vOT -vkX -vOT -lEr -vOT -qHT -vOT -oeE -vOT -vOT -vOT -vOT -vOT -gRU -vOT -vOT -vOT -vOT -vOT -vWq -vOT -kzi -vOT -kje -vOT -ltJ -vOT -jWZ -vOT -jPN -vOT -vOT -vOT -ivE -vOT -nYZ -vOT -lql -vOT -pDk -vOT -sSV -vOT -jiv -vOT -bjt -vOT -ejP -vOT -lvl -vOT -bcI -vOT -vOT -vOT -vOT -vOT -eRu -vOT -dcZ -vOT -vOT -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -ebu -brz -"} -(53,1,1) = {" -brz -tbR -vOT -uer -rRu -fIR -bls -uOC -tRr -vOT -vOT -fvB -pQt -hxT -nXt -mRa -pXn -csY -vOT -vOT -vOT -idP -vOT -lHC -vOT -vOT -vOT -kIs -vOT -nFv -vOT -mWm -vOT -sYS -vOT -uKR -vOT -don -vOT -vOT -vOT -keH -tlg -vOT -vOT -vOT -vOT -sWV -vOT -lMO -vOT -vOT -vOT -aRU -vOT -dGo -vOT -nbV -vOT -ler -vOT -vOT -vOT -vFD -vOT -vOT -vOT -fuZ -vOT -vOT -vOT -vOT -vOT -ulp -vOT -cSt -vOT -vOT -vOT -dxP -vOT -pvU -vOT -xcQ -vOT -miX -vOT -jUh -vOT -sdq -vOT -glu -vOT -lZC -vOT -vOT -vOT -mHA -vOT -aCd -vOT -wZo -vOT -gfS -vOT -ngA -vOT -oqo -vOT -vsM -vOT -jzm -vOT -rGC -vOT -xGb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(54,1,1) = {" -brz -qZU -vOT -vOT -vOT -vOT -vOT -vOT -jwT -vOT -vOT -nXt -vOT -diU -eyV -bPN -rnH -yaO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tfy -vOT -vOT -vOT -cCR -vOT -hbh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -agP -vOT -cHK -vOT -vOT -vOT -pla -vOT -adX -vOT -lnh -vOT -kpM -vOT -vOT -vOT -vOT -vOT -gNq -vOT -sDW -vOT -hCh -vOT -qlf -vOT -whQ -vOT -auO -vOT -oUQ -vOT -pAB -vOT -ybA -vOT -vOT -vOT -cwi -vOT -cmQ -vOT -cCL -vOT -cOl -vOT -cXc -vOT -ftV -vOT -ggL -vOT -mQI -vOT -lOh -vOT -izF -vOT -xpT -vOT -mNL -vOT -vOT -vOT -vOT -vOT -kMM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fQD -mOJ -lkX -vOT -oUP -brz -"} -(55,1,1) = {" -brz -noB -vOT -vOT -vOT -vOT -vOT -vOT -dbE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wsR -vOT -oQc -vOT -hrd -vOT -exC -vOT -vBz -vOT -vOT -vOT -xCq -vOT -vOT -vOT -vOT -vOT -iSG -vOT -vOT -vOT -dOT -vOT -kUM -vOT -rUc -vOT -pYH -vOT -ppV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ngZ -vOT -iDz -vOT -fSk -saY -xzf -nsM -vOT -mdz -iTQ -bTG -bRw -hen -gCq -miC -gTt -ouV -xWL -wKs -lNn -eXu -lmh -gug -tGy -tJK -pOA -uci -eZv -vNB -bQd -bMQ -bZR -ooX -fvz -rSH -mlm -goG -gPB -jRA -bAE -nQw -gLB -iRo -ahM -vOT -xVk -vOT -peA -vOT -wZU -vOT -paj -vOT -mZB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iqb -rGn -tGU -vOT -uGC -brz -"} -(56,1,1) = {" -brz -bGh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -toD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tGT -vOT -toE -vOT -hUv -tXh -hrS -noi -vOT -xtu -vOT -qcX -mVM -tZM -soP -gbu -vtY -xch -fZR -fuF -tiS -aPm -xLv -xsM -cGa -iGa -bEM -wsZ -pPt -mNX -psO -icW -pmp -myw -qkI -rGT -adj -lLb -ygv -fAR -oNi -ubI -qwK -tPV -fsX -vOT -ebF -vOT -kBF -vOT -tiV -vOT -hfE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hDp -dfl -whw -vOT -dCD -brz -"} -(57,1,1) = {" -brz -qTh -vOT -xIz -lLw -muf -knD -bIQ -qdM -hqf -cfo -xIP -jlO -fhI -aAq -wuC -gsu -uWq -kbz -ayE -wRs -dQB -dCf -ydI -nro -vOT -tFR -mSK -chU -jWc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -avr -vOT -hkz -utc -crG -vOT -vOT -xNk -vOT -hFs -fhq -keC -eWi -jHX -nGE -wus -hGH -tIT -fBy -nuF -wEQ -vOT -mrc -cyB -iWD -bjc -wUJ -vOT -ewf -maH -vOT -ibO -yjh -bqq -hAv -gcM -vOT -xmP -puX -vOT -cQq -abg -vOT -vOT -tIf -vOT -fnN -vOT -iTF -vOT -uce -vOT -gjI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aVe -lrg -lPi -vOT -eMn -brz -"} -(58,1,1) = {" -brz -vOT -vOT -gAB -vOT -kBy -jzE -tKI -jXJ -raP -oln -bUT -ndN -eVQ -tuy -eqi -bOd -miv -pze -caj -pYI -vOT -vOT -rTj -vOT -vOT -vOT -iDE -vTc -uBY -vOT -vOT -vOT -vOT -two -mpb -uYT -pmz -ltS -eLO -aHM -uKB -wZQ -lTt -lJN -nfv -pTn -eCz -pDO -aiI -wpd -hrO -rFA -gpu -bhL -jfj -cCr -jAI -qyj -pjw -cKf -gXu -ddy -ctX -qRg -xRX -iJT -gzb -wBw -tME -uJi -jcQ -reZ -oYT -lJI -puM -udU -mzV -iMZ -wee -hVg -lcC -ilv -aDV -dyq -vva -dfO -uva -dhN -xfR -nnE -uUB -rXf -aJo -leg -uEd -rwh -vOT -cvF -fzw -ivH -oNB -wGM -tUh -nXh -sHE -njg -vml -fut -qAa -tdY -fcS -trQ -iWv -xER -vOT -vOT -vOT -gfx -vOT -aOY -qPr -fmS -vOT -vOT -gXf -vOT -xSv -iri -sWJ -ihW -thR -bQL -jbR -vvI -cJY -vOT -ovn -soY -vOT -sXj -bXC -ifc -meX -iNx -vOT -qmP -jSx -vOT -rta -cJQ -vOT -pcl -sIF -vOT -sSW -wlZ -vOT -gQE -fBF -vOT -vOT -jwq -vOT -sMJ -vOT -jMB -vOT -ydn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vpI -tSs -fDw -vOT -lRL -brz -"} -(59,1,1) = {" -brz -tjV -vOT -vOT -vOT -vOT -vOT -vOT -xel -jKa -vOT -vOT -vOT -vji -vOT -vOT -vOT -uCo -kGZ -vOT -jwm -vOT -vOT -pRt -vOT -vOT -vOT -mQc -vOT -vOT -vOT -vOT -vOT -vOT -plg -vOT -vOT -vOT -vOT -wSj -vOT -evg -vOT -fKF -pFd -vOT -qCC -qnD -pGN -vOT -blr -vOT -vOT -vOT -qny -qVD -vOT -qjg -vOT -vOT -lQl -nXH -vOT -vOT -uKi -vOT -tjs -rqe -vOT -jBB -yki -vOT -xXV -eqn -vOT -vOT -vOT -vOT -xMs -vOT -vOT -vOT -ldj -vOT -vOT -vOT -vOT -vOT -vOT -gZK -iCg -fNH -dQW -qhu -uAj -vOT -xVu -vOT -tPJ -xTu -aRl -jao -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mmI -vOT -hNb -rnY -iFU -vOT -vOT -din -vOT -dBW -qws -xCs -oKy -jdz -aCA -lYW -lNs -tpZ -vOT -tLr -tdm -vOT -gNm -vGX -aJZ -jCf -hnc -vOT -rRW -xAL -vOT -lLW -vOT -vOT -rVm -rpI -vOT -edb -qcu -vOT -bSG -ddc -vOT -vOT -ivQ -vOT -cDP -vOT -dHp -vOT -jun -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nrA -mTM -wTx -vOT -bNV -brz -"} -(60,1,1) = {" -brz -cXv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -reK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tcu -vOT -vOT -vOT -vOT -vOT -dvb -vOT -vOT -vOT -bCp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jYg -vOT -vOT -vOT -vOT -kIm -vOT -vOT -lZr -vOT -vOT -vOT -vOT -vOT -vOT -dJq -uxF -vOT -vOT -vOT -vOT -jfG -tpo -vOT -vOT -orW -vOT -lwq -vOT -vOT -vOT -vOT -vOT -gHz -uJi -vOT -vOT -vOT -vOT -hst -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -koy -kyS -vOT -fpL -vOT -vOT -hUZ -vOT -gOI -qHS -pCT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hXH -cYb -pjI -vOT -jzG -brz -"} -(61,1,1) = {" -brz -qsB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aMy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dcv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -czR -vOT -vOT -vOT -vOT -kNC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iMp -xwm -vOT -vOT -vOT -vOT -noG -wKS -vOT -vOT -dAp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dWF -fJJ -vOT -vOT -vOT -vOT -vyo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vsC -vOT -tRv -vOT -vOT -vOT -vOT -auG -clD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ovX -vGl -kkU -pTY -biO -jaB -exJ -eWf -umz -qYD -bci -byR -cTQ -bAh -ewB -jVM -giP -iRm -wkN -frq -jyy -fSG -qXA -rTt -kPh -leZ -cZC -sgr -uUC -aeO -lqx -wGM -eot -nkE -eHt -hQB -vzM -apr -iDj -coh -oTB -iTz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -poY -wOK -yls -vOT -pUR -brz -"} -(62,1,1) = {" -brz -qxK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uti -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xBg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cnV -dJv -vOT -vOT -vOT -vOT -gzD -vOT -vOT -vOT -iMO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uNI -aKh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bPw -vOT -uud -vOT -vOT -vOT -vOT -ltL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOG -sEL -gDn -rhg -nbX -svr -hos -wHC -xrQ -lRF -kBB -fMB -opV -uRi -mol -oJA -uhN -nba -iVU -nxM -tcY -cvm -ckS -oBy -bkJ -tRD -syn -krG -uTV -vVV -yhn -hma -dXw -biJ -gGt -rmx -rnx -qex -hkM -ipZ -seU -xjH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fCc -oNW -sUp -vOT -vOT -brz -"} -(63,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lyV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dgg -jKk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ctd -xnL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hMc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uYV -wwe -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sFn -vOT -jHD -vOT -dZI -vOT -vOT -vOT -vOT -vOT -gCw -vOT -yki -vOT -vOT -vOT -vOT -tUQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sXE -hUI -sGy -uQV -eHb -piX -cjO -bXP -nam -cUG -uww -trF -cXO -loZ -rih -vzU -efR -hHu -idY -htR -pKg -uFs -hdH -pSL -mTw -oUM -tAe -eqR -rAw -nQe -qNG -pKL -chO -xtM -bKX -tcZ -uyc -byC -mdl -aUn -urU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -upf -tgk -keL -vOT -vOT -brz -"} -(64,1,1) = {" -brz -mwD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kmH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kgD -wIw -vOT -vOT -vOT -vOT -vOT -dSB -vOT -oJm -vOT -sGF -vOT -xHf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tOF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -trY -sHk -hiW -iNq -aph -qPf -faq -xGy -raK -oDm -xtq -qIa -cSO -eGg -nRW -pAa -aIp -nbK -dWK -vhE -dKY -iox -cbq -pCT -nUe -ruY -vIr -pRp -clB -aDu -kBK -jao -ssj -pOs -gNL -gcG -pEu -kxd -wGK -vLb -sXV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xmS -aiR -rXy -vOT -vOT -brz -"} -(65,1,1) = {" -brz -aGs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cXu -vOT -vOT -vOT -vOT -vOT -vOT -iWv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dYI -sgv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nxg -vOT -cTF -vOT -pjp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qoG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oQZ -dOp -oPR -qVM -qav -tmP -aRl -ivH -qcT -fyV -vUv -lFM -yeg -mcb -gyn -vNz -gVg -mhz -tqd -sRC -xxZ -xeR -nbv -ehh -oNB -jdQ -mBw -dXu -qth -ers -wre -xIO -dca -vIP -uYD -qIc -jia -wVV -nGp -hMk -mgp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kZL -kDD -kHJ -vOT -vOT -brz -"} -(66,1,1) = {" -brz -luS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mGg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bqf -lwq -wKS -vOT -vOT -wSW -vOT -pUj -vOT -vQJ -vOT -tTd -vOT -ewS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ddR -tsN -byi -vOT -vOT -brz -"} -(67,1,1) = {" -brz -vOT -vOT -nGr -vrM -aDZ -pba -cja -iaR -xXC -ptR -lcr -xJB -cid -bNx -sfM -nRC -xqi -mmv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nJY -vOT -vOT -vOT -vOT -vOT -vOT -oKt -xWR -sWT -rcd -oaT -jVv -vOT -vOT -bJi -mcf -cNp -xYe -ewJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -msH -ecy -vOT -vOT -vOT -vOT -vOT -ucx -vOT -hfS -vOT -xRC -vOT -ecm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mCD -vOT -vOT -vOT -vOT -iNK -ncd -qrD -evm -onY -iul -twi -qRJ -vOT -pVn -fMT -mpA -azF -cFX -xIM -jim -aTr -ibi -bIT -kvz -dEr -pRB -vew -pKf -iew -rZf -nYF -cNl -nfh -ybx -ifu -kdK -bTk -wJR -pAj -kDK -aKn -vgl -fNS -jKl -jSA -uzb -aAf -eSx -mCD -oIn -kMt -nJp -qTX -qDh -wqX -xbc -qhO -htG -mEc -pjF -vbX -sYU -vZa -aOV -keJ -lBS -hAx -kFn -hCp -gaR -nBw -bIa -xCf -vOT -kzs -myW -vpw -oKD -xop -poH -pJH -fvL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -btn -rdx -ndU -vOT -vOT -brz -"} -(68,1,1) = {" -brz -mRF -vOT -vOT -vOT -aDR -vOT -mWo -uio -jHt -mze -vOT -vOT -pjU -vOT -qGF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mLq -vOT -vOT -vOT -vOT -vOT -vOT -uhk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kDA -vyI -vOT -vOT -vOT -vOT -vOT -oEm -vOT -syI -vOT -dPO -vOT -liM -vOT -vOT -vOT -vOT -vOT -vOT -jJq -mdN -vWH -naM -xxv -vOT -vOT -sAv -tkU -aUq -mZm -hwt -eFu -bND -kbu -vOT -wlG -tfi -sKx -wuH -mkf -vhc -xFg -xcU -vvA -etS -ghU -xMO -tSk -gRj -tQA -aoy -lEf -pMT -gSe -muU -fLl -hBs -iRi -mWR -iZK -bIJ -uLX -vVC -eBj -sFs -cuU -mRe -tvL -ylK -hbN -vWH -rFv -enD -lLY -jCS -wpN -kBN -mBC -jqu -vMA -lbL -sgu -tKZ -yjQ -nLb -tYn -ixO -xFm -mGP -hgt -rdO -rWR -sFS -min -hWo -wpv -sbg -kcW -aGc -xzB -ioO -vms -vma -hrw -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mpw -vKV -cKq -vOT -vOT -brz -"} -(69,1,1) = {" -brz -vOT -vOT -vOT -vOT -xvH -vOT -vOT -ibM -vwg -kmC -vOT -vOT -ieS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kRF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -leZ -mKK -vOT -vOT -vOT -vOT -vOT -jbG -vOT -nTp -vOT -buH -vOT -brB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cgR -vOT -vOT -vOT -vOT -rby -xNI -quc -gMu -cOD -alP -ibq -blf -vOT -qcs -vnK -qXq -gjY -ecQ -gWX -keu -rpe -uDl -fFf -noo -pMG -dct -dBD -eiF -oYA -wWq -hsS -aqJ -sIZ -vpg -lFX -xPA -eaV -iIJ -pJW -tXy -okv -qdW -utd -mdu -ioP -jmE -juD -kUc -cgR -oys -nhc -oSQ -qOY -oeN -sRe -hQR -iLW -ayj -fng -rKw -frv -hcz -veC -qBI -cWw -aBF -auF -rXf -kLc -iiZ -mXb -pwu -cmN -hZU -qWu -tET -dVZ -fdW -aKD -fBV -xrm -lpX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qjp -eed -mNk -vOT -vOT -brz -"} -(70,1,1) = {" -brz -bcD -vOT -vOT -vOT -gcR -vOT -vOT -vOT -gIg -jtC -vOT -vOT -wOp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xOM -mJG -qSx -tup -fiH -dto -mzs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tuT -vVC -vOT -vOT -vOT -vOT -vOT -jCo -vOT -doH -vOT -irh -vOT -wea -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hEP -iwx -oHJ -uKG -jto -nBr -kLd -eaB -vOT -hwb -aZB -bdd -eMq -pTJ -iWY -isv -oeO -vHF -tJB -jnC -kcT -pdk -ndL -vTH -npb -gMe -vsY -cqR -xHB -tnW -uFR -uJR -kzH -okz -hMx -rSu -tuT -ycv -hQH -giU -qYl -wue -dsq -aIM -bcr -mbn -xpa -apF -pYA -vrV -kdz -ekf -bFt -aNF -qvL -oNy -uIa -gNP -frH -bxO -mwr -sKe -vXw -dQW -tqy -ifz -ftE -pCk -xaw -xrr -nnt -nwi -sGg -jYM -eoj -umR -gsV -gNo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rxb -mMv -iLR -vOT -vOT -brz -"} -(71,1,1) = {" -brz -vOT -vOT -vOT -vOT -obF -vOT -vOT -vOT -vOT -ssR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gMu -vOT -vOT -vOT -vOT -vOT -vOT -rwZ -vOT -uEF -vOT -wfE -vOT -bhQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iLy -qvt -fDa -hTh -wzx -kFY -sxC -vOT -vOT -jkh -xfs -gwd -uUu -upB -dOd -lkn -dqu -cJA -rNM -wYi -esI -vfq -wXG -pfc -osv -sPJ -hmc -kjK -aQb -hqE -wtv -uxg -tSZ -ook -fXS -oZc -kDA -wpW -kIB -rlr -blw -feJ -ebh -nCi -heC -rzu -xkG -sSH -fPo -rfU -kWS -eVf -tZY -aRN -dQL -eAP -ibZ -btR -oXU -ibV -jvE -nES -mUQ -gLA -oed -bvh -dJl -frg -sOI -nWk -ugZ -bfm -fxx -twm -xQC -ofe -vOT -rpJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fgx -nBy -vOT -vOT -vOT -brz -"} -(72,1,1) = {" -brz -fAd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sBu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nZm -vOT -jhG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gpf -xqq -vOT -vOT -vOT -brz -"} -(73,1,1) = {" -brz -vVn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bYj -aCs -gIc -cQs -fQu -vOT -vOT -vOT -vOT -vOT -vOT -qDJ -nzl -uey -wBT -psS -nWT -sRT -jXy -wGs -ezw -ooJ -vzZ -syV -uVa -ctV -hYm -vOT -kdf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -woD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hkw -vOT -cnt -vOT -mRk -vOT -uFL -vOT -vLN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uIc -iaU -waL -ned -vXP -fPf -vrJ -xJN -fpv -csK -bIS -cgw -lxM -llo -riE -jPZ -jee -kSV -fCz -nRp -xLq -baQ -fIz -bbB -pTd -iVm -wTu -pKu -bTH -ojh -vfY -szS -cQS -naL -xOD -iMh -jFu -ycT -dsN -vcG -jHE -bBc -haL -oRx -nxb -ble -vVq -xus -nxj -jXN -sMD -gFp -nfT -pME -bNT -sRb -uzM -rjd -cXf -hOt -rZm -uJX -eHw -yeG -uhp -eQR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jTr -qHY -vOT -vOT -vOT -brz -"} -(74,1,1) = {" -brz -svV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nql -gjZ -nfm -lxp -tNZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gbh -vOT -tdo -nRu -sIh -uCj -vOT -vOT -vnI -tNZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mWj -vOT -uQR -vOT -qPV -vOT -dKM -vOT -ltk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oHG -rfg -eoz -xAi -baK -iOL -xaU -aXV -lVF -xty -dFB -iEt -bVk -jNZ -tKr -iHk -bUZ -uIV -aWC -nXx -cwC -boS -tyR -ruT -gmY -bzu -rDx -vPo -dcI -lkI -jMk -tFv -sQO -krH -pwe -fwH -rKK -lGg -qJj -oRU -sdr -kNt -rzv -dCs -gwG -fhl -qCp -sAs -kfz -rqr -bVN -oPI -xQH -qOZ -uuX -hUd -fWe -dBY -wHt -bsK -gKJ -oAe -vTy -bBW -rRX -frW -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hsw -tez -vOT -vOT -vOT -brz -"} -(75,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vnI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xKx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nql -hMj -vkS -uWg -aBK -vyf -wRU -gjZ -vDC -edu -ujv -nfm -fEG -oJn -lxp -gIc -cQs -bYj -aCs -fkb -cOF -fQu -nfW -fpN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jZN -vOT -vOT -vOT -vOT -tXU -vOT -ubd -vOT -dAA -vOT -cAm -vOT -pjL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hEo -iGu -aqA -bGl -bHd -ykX -yey -rGa -iEC -psi -uGg -ldm -cwz -dbi -nBo -drZ -uIu -sbQ -miS -jYT -vwo -oyy -hmK -mWN -agQ -qHm -uTA -vRZ -xTR -mmy -xPH -ipW -mra -pgR -mKt -jEz -keU -xpD -hrj -rjX -laE -hFV -fMp -enY -oso -rZh -dkq -hJm -lUQ -dwo -lXf -wic -tuk -mWS -qJu -ciG -wjM -vpq -mTZ -umn -jpj -xMe -uwf -utb -igT -rus -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wtf -mYT -vOT -vOT -vOT -brz -"} -(76,1,1) = {" -brz -vOT -vOT -nhr -vdD -cZO -mOn -kFV -khl -xhl -tKK -aGt -oZh -lYq -tgB -anU -cam -ehP -cam -xyN -kRp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dod -vOT -lsO -vOT -eKl -vOT -pov -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wUs -dni -jya -tbH -owH -ifd -fLn -usY -wNb -cuY -bkn -xrB -opD -khm -aWP -eow -hMA -pDF -qaY -axY -bef -bQW -nqN -mzX -yln -eIB -vaw -puT -iNE -fkl -cic -ukc -tEY -kbB -iWp -onu -oTr -pHo -ifQ -pGT -aSl -nVF -lWe -jVq -nxF -wLy -uSy -xwL -iuz -jfU -lXh -xAH -kkV -gup -dvs -wMz -hVo -sId -avO -dWe -qwD -vyN -xQU -ngz -lJu -uIJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rln -ajp -vOT -vOT -vOT -brz -"} -(77,1,1) = {" -brz -mzl -vOT -vOT -vOT -vOT -xwl -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dRm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wjp -vOT -cMY -vOT -nKY -vOT -vPJ -vOT -uJk -vOT -gdi -vOT -vSo -vOT -gvN -vOT -qfY -vOT -tKC -vOT -hbI -vOT -hCm -vOT -pYY -vOT -ycx -vOT -wsV -vOT -inK -vOT -jkw -vOT -kCr -vOT -bSn -vOT -fUP -vOT -mwg -vOT -jVh -vOT -xht -vOT -eYk -vOT -sRH -vOT -sdl -vOT -vuE -vOT -eWN -vOT -vOT -vOT -vOT -lIw -vOT -vOT -vgO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -msl -jgC -vpz -hdY -rRv -cNC -rAQ -gTj -cCa -cED -dwe -pHp -sGB -xfz -hmP -lAp -hgI -gkv -hZC -gNJ -gdn -bDV -sCw -sRz -pSl -mVU -blQ -gnQ -pgG -hch -ohw -vdM -bgK -mWa -tPm -vRz -pau -pmY -gsf -mhi -lrt -inu -qAr -ihz -xna -moK -eHa -jnZ -bwE -pUe -uTD -oEK -jtu -tpg -wJJ -fOm -uvn -mXB -kQk -gEV -fnz -rkx -sgG -oHz -mOk -oRX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sFZ -pXg -vOT -vOT -vOT -brz -"} -(78,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -rpb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ctd -pba -lcr -sBu -kmC -vOT -vOT -vOT -jEK -vOT -hRf -vOT -hWB -vOT -xQX -vOT -qWt -vOT -qxT -vOT -qLR -vOT -puy -vOT -qmL -vOT -eDK -vOT -rER -vOT -aAl -vOT -ozg -vOT -rOJ -vOT -dKt -vOT -nhA -vOT -hue -vOT -kHl -vOT -fUr -vOT -bMu -vOT -axi -vOT -eYe -vOT -upq -vOT -wej -vOT -qxd -vOT -vYx -vOT -hnH -vOT -irB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -huf -vOT -vZm -vOT -mzx -vOT -uBz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(79,1,1) = {" -brz -bLv -bDj -vOT -vOT -vOT -ohf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nHW -ucT -gIg -vwg -jHt -xXC -vOT -vOT -vOT -uKl -vOT -tpD -vOT -qCk -vOT -cwR -vOT -tWS -vOT -xNi -vOT -iIA -vOT -tpz -vOT -kmX -vOT -mEA -vOT -kvS -vOT -pZR -vOT -ngy -vOT -nUb -vOT -vpd -vOT -hGa -vOT -jOH -vOT -rwk -vOT -wfa -vOT -oDs -vOT -dev -vOT -ubS -vOT -krn -vOT -iUQ -vOT -xJK -vOT -olX -vOT -tUG -vOT -vek -vOT -vOT -vOT -vOT -sSE -vOT -vOT -gRd -vOT -ggX -vOT -qqB -vOT -bPE -vOT -ykq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ixZ -wIw -jTO -oFC -rDg -kpc -tWc -msm -cKa -rsP -sgv -vcz -kIY -vVv -nKa -xDe -arz -qPF -vOT -mOT -lnd -bPf -cuF -ved -lDM -cal -afr -aSy -vOT -dPc -oON -dZE -pHf -iDQ -jSZ -vHk -gts -dCq -ddf -duI -sDV -lng -lgq -fLB -qWx -mbP -oic -inm -xuV -bqF -dzA -irw -wGk -lfb -fcY -res -gGD -lsL -svm -mJb -koI -btr -lFD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(80,1,1) = {" -brz -oUm -aRl -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kgC -utN -mwf -ybx -gcR -ybx -keu -vOT -vOT -vOT -gRT -vOT -bjo -vOT -hUX -vOT -hIE -vOT -hNK -vOT -eQq -vOT -adD -vOT -lTx -vOT -xMU -vOT -nOJ -vOT -tws -vOT -vbq -vOT -vWQ -vOT -dPD -vOT -pOg -vOT -aTP -vOT -mKn -vOT -jSE -vOT -lvS -vOT -tGX -vOT -aPP -vOT -iBi -vOT -ioq -vOT -sDB -vOT -jGZ -vOT -ipH -vOT -obP -vOT -aLt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nBm -vOT -vJB -vOT -juT -vOT -rly -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pqC -fTH -ols -rwC -oNZ -hyd -mxN -hFi -cUB -cWj -wTy -ngF -wPq -nis -dQw -xVR -afs -vkw -vOT -kMj -sBG -jqf -mne -vJo -tIE -fht -rEZ -kLR -vOT -jvC -uqr -qeE -izr -fFS -gVC -hMO -jJj -hJW -lmL -gOw -baL -moC -fZW -fMC -fyQ -tgp -avG -vaZ -vyw -dIg -jyQ -bvW -mgk -jbp -hvg -wAL -cKu -quN -naP -kxx -hVI -tXm -rHm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(81,1,1) = {" -brz -jah -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wQB -dHe -vOT -rnP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eRD -cBu -mTF -wmi -vgt -bHy -llu -ena -vOT -vOT -vOT -uDL -vOT -bwx -vOT -eKI -vOT -gwJ -vOT -vNs -vOT -vCD -vOT -lGW -vOT -pwH -vOT -aEY -vOT -dPm -vOT -jbM -vOT -bVw -vOT -xQP -vOT -ghP -vOT -crT -vOT -rDv -vOT -pby -vOT -oHh -vOT -pEM -vOT -hNO -vOT -pdp -vOT -xvp -vOT -npy -vOT -aSQ -vOT -nfF -vOT -sNj -vOT -vuY -vOT -kcM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lAt -vOT -scn -vOT -oLm -vOT -nIu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ojx -kQP -bzY -nsQ -sjH -lxn -kjO -vOx -usf -pRs -qZX -sjC -yjO -dXB -ciN -uwd -iol -vOT -sjR -qiH -rgE -bib -gYj -njT -sHC -oLV -kAG -vOT -vOT -wJl -eUx -xVq -hfK -tQV -eae -ptK -lcs -olJ -ovY -neI -jqs -yhd -lzl -kDe -nIT -jRK -qvb -mlO -tuI -qTq -wMr -akg -ikv -lAd -wWY -xcu -mwn -ldO -huJ -uHi -bmz -qbZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(82,1,1) = {" -brz -nFc -vOT -vOT -gjO -vOT -vOT -vOT -vOT -vOT -orq -fSE -vOT -opR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kaY -sbS -mOs -sYs -btY -vvS -tjP -eTv -vOT -vOT -vOT -gGC -vOT -tUg -vOT -ugq -vOT -lDD -vOT -hoX -vOT -wiM -vOT -pXs -vOT -hdP -vOT -qSz -vOT -hXi -vOT -ooU -vOT -axl -vOT -aCy -vOT -dBc -vOT -aqZ -vOT -ahT -vOT -jYN -vOT -eIr -vOT -gmd -vOT -vkA -vOT -sij -vOT -eAp -vOT -enT -vOT -kvY -vOT -aJe -vOT -vwj -vOT -jqW -vOT -vOT -vOT -vOT -vOT -vOT -idZ -vOT -vOT -lZk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oHk -mxU -cJn -pyA -gRm -sED -wuk -exm -qnS -muM -sVq -qkF -wav -iGU -aDd -xCA -bIr -vOT -rkE -xFx -bpg -mPb -rjb -vDT -vJA -mZw -uWV -vOT -vOT -ttA -pNd -vrs -vux -pwq -mYE -iIm -rVK -fnO -nmj -lHl -ocS -ogp -koc -kbH -ozb -cSR -ntx -fII -lNW -ikE -cGd -dyu -cAt -dEY -fsA -eMv -jfT -mZl -cYo -lEO -nBN -cWL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(83,1,1) = {" -brz -bsO -vOT -vOT -gUr -vOT -vOT -vOT -vOT -vOT -hab -vBM -vOT -jXq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fvB -pQt -hxT -nXt -mRa -pXn -csY -vOT -vOT -vOT -vOT -oEa -vOT -jro -vOT -xKL -vOT -tyI -vOT -lgz -vOT -kcl -vOT -fEX -vOT -ulI -vOT -aaT -vOT -iSj -vOT -vEp -vOT -ijN -vOT -eac -vOT -hIf -vOT -vBq -vOT -tly -vOT -mak -vOT -tIR -vOT -sSg -vOT -pKw -vOT -ijJ -vOT -vMI -vOT -unw -vOT -rnZ -vOT -wsg -vOT -cLl -vOT -vip -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bOG -uvb -vHA -uVK -vOT -aLA -wrl -wNW -qaP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xXa -pfw -xNF -gkQ -njE -xJn -xXS -qcN -jAC -lyY -hJq -vWE -arH -awo -frt -hWY -aEE -vOT -qtA -dTM -qff -eYN -eAV -kMl -ptr -uVD -sZC -vOT -vOT -hoj -dDo -kVj -aND -qoz -cPg -rqP -kEl -mUI -ogM -jFS -hIO -ikW -ydf -nan -nem -tow -dDP -kxz -brT -jhn -hee -tYv -iyL -lgD -jJi -lbr -kkv -cJJ -nQI -tbT -qht -wwd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(84,1,1) = {" -brz -aRD -vOT -vOT -aax -vOT -vOT -vOT -vOT -vOT -lBY -pVQ -vOT -oMU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nXt -iZG -diU -eyV -bPN -rnH -yaO -vOT -vOT -vOT -vOT -nyu -vOT -lHf -vOT -ghu -vOT -fIi -vOT -snH -vOT -ruD -vOT -vHN -vOT -jas -vOT -juK -vOT -vdk -vOT -qro -vOT -pzq -vOT -pwd -vOT -wzq -vOT -xJh -vOT -kwM -vOT -rGA -vOT -jBe -vOT -epx -vOT -hsh -vOT -fVZ -vOT -nIq -vOT -ulj -vOT -keI -vOT -dKP -vOT -jIu -vOT -eGh -vOT -vOT -vOT -vOT -vOT -vOT -aIc -vOT -vOT -nIR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(85,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xzi -pXQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ipJ -vOT -ikP -vOT -dqN -vOT -jSz -vOT -qDs -vOT -unJ -vOT -wMn -vOT -wWH -vOT -age -vOT -kSE -vOT -bJF -vOT -eTz -vOT -sUr -vOT -fyv -vOT -fms -vOT -giT -vOT -aYk -vOT -hJU -vOT -jEY -vOT -gqb -vOT -tcw -vOT -rYI -vOT -aFk -vOT -pfQ -vOT -ere -vOT -bHL -vOT -ndT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kyR -cGb -fpW -wvQ -vOT -ilI -oSu -iQq -vKM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vYP -gny -plV -bPS -qcF -cPT -sxS -vjg -ykh -kxE -wQG -lmy -dWy -pfP -mVK -oXA -cXK -tke -uHm -qJl -wsh -sLp -vOT -jop -gev -sYl -uRm -nBO -rde -cPl -ghs -ljb -vbw -tbV -tFg -vEu -xUf -hEk -fTE -jAu -qIE -tMe -cRk -oQx -dQr -cRX -eXK -diG -orr -szw -fgF -gyw -pSI -lad -fjZ -cyu -hMf -gUj -emw -fRC -mMI -alG -ffo -nFN -vmu -jqR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(86,1,1) = {" -brz -pvm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -etl -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qSV -cHz -cwi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rqF -vOT -fuo -vOT -vYB -vOT -aVj -vOT -jiV -vOT -otz -vOT -aZd -vOT -prq -vOT -dSu -vOT -ujd -vOT -ljS -vOT -sCk -vOT -dJi -vOT -fRj -vOT -uEo -vOT -dCI -vOT -nDR -vOT -gIT -vOT -woI -vOT -erL -vOT -lQF -vOT -nQC -vOT -vJR -vOT -cMf -vOT -aBZ -vOT -tSr -vOT -neB -vOT -vOT -vOT -vOT -vOT -vOT -ndA -vOT -vOT -roq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kRi -xli -wZR -xQV -eDP -goF -fPU -wla -uOW -wAf -lJF -kcE -pwN -hfZ -sUz -rCV -vjZ -iYT -eZW -ecy -apG -viO -vOT -ldJ -chs -iPo -vGa -vhF -ccJ -mqZ -oGi -qlo -ohm -rNf -aEr -spD -rMi -gjS -lmu -kRE -uFo -kCy -cKd -kpy -cZq -omH -tYz -dQG -vwR -bEx -voB -kVo -dSy -vTJ -amW -hIZ -mkX -tiR -aKX -xjM -dxt -mbQ -fJD -eHe -aRG -vjj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(87,1,1) = {" -brz -soc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bYq -vOT -fNO -vOT -xLV -vOT -hkA -vOT -iLG -vOT -nKD -vOT -nyG -vOT -kmV -vOT -mNH -vOT -eLN -vOT -aSn -vOT -xhM -vOT -xKb -vOT -nwq -vOT -sQb -vOT -jAm -vOT -qAR -vOT -otq -vOT -lGZ -vOT -gBd -vOT -uEc -vOT -nOb -vOT -mup -vOT -vOT -vOT -iMP -vOT -cTw -vOT -cbT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hXt -wly -mEO -iUA -dXi -jBU -vLx -kVm -ugI -kNx -kBG -vur -sDH -uSd -usN -tTk -vTI -kQl -wlP -mnD -gYy -vOT -vOT -dwO -bsR -pbv -kez -sBr -xmA -cen -tDA -fhZ -aYs -uwJ -aeJ -gxm -uMg -uJD -hBV -fMV -cmC -dlL -ahZ -jdO -pFK -qLi -vmX -ehE -bAX -mOa -qPB -ize -mbc -vVI -kWG -obI -nAh -jAx -kmo -kfP -qJo -vQK -mkx -kcD -oxU -pij -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(88,1,1) = {" -brz -mqk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xEm -vOT -jVj -vOT -gaz -vOT -jRt -vOT -ePd -vOT -gWM -vOT -uVq -vOT -tDo -vOT -hXO -vOT -mPw -vOT -vMP -vOT -eJM -vOT -bBO -vOT -kvB -vOT -ibC -vOT -qLa -vOT -nME -vOT -ygn -vOT -fwm -vOT -kMD -vOT -whq -vOT -bwr -vOT -eLF -vOT -vOT -vOT -iGS -vOT -qMe -vOT -rAP -vOT -vOT -vOT -vOT -vOT -vOT -dBN -vOT -vOT -rBZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gfB -qmh -qVA -cCC -uSF -uoz -axF -aEW -wJC -uSE -hAN -lVE -mhQ -hKj -doW -mnZ -yan -dmX -aak -alg -rYb -vOT -vOT -tir -opS -nJw -jET -cvp -ect -dNy -lHL -jpn -dPX -iTl -wdy -xVm -eEI -rVR -swC -rVM -dOH -mOS -mhg -mRb -agB -kZR -jFB -qoF -fIl -kWh -rMH -uGz -rKr -kJc -hMu -ptb -alQ -qXG -rXA -kze -gyA -dfG -fqL -wQQ -hWZ -bYN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(89,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qrs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oim -xkl -byu -pKs -agZ -oee -ihr -mJF -qfQ -nCj -kVz -vyC -thy -mXF -uog -wNz -jqj -hhR -hgJ -fjF -wvv -vOT -vOT -cOg -eeb -mcC -ulG -uwK -uda -pvj -xDx -qDu -trB -isy -gRL -cUx -pBh -xKj -kji -oqw -hTZ -cnH -vEz -mwS -obW -itr -ugL -tdq -xRK -kPW -fvn -hCu -ucC -xnM -wmp -aSX -eTK -wRZ -wOH -ooL -yiC -sGl -vnD -odd -pFm -bJg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(90,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(91,1,1) = {" -brz -vOT -nLM -jwx -odX -sEw -hHS -tUv -eOx -imq -xAc -gHj -dpa -jNh -rRB -xsD -nxT -gFW -nXr -bOm -cfR -cJh -bsX -xcr -xGd -ppl -gWg -fBe -xML -vOT -iZX -lDf -wQs -jzd -sCf -rXG -xvs -tkH -lhl -myx -chA -caC -xFD -fvC -sBo -iNU -vOT -eKh -nsJ -brD -qYY -ugQ -kWK -gbe -paD -iyG -pKQ -mSU -nYG -dXZ -vOT -aIr -aEp -vOT -xSW -oaN -rAt -hGF -vOT -sHB -gnA -wEC -gCY -vOT -cww -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jdt -yeO -fFF -hAB -iiY -agt -uyZ -ubG -mOK -inb -gEY -xqh -imA -jdr -ifH -egV -aia -hIN -wsl -qgX -vag -cfJ -dFf -aGa -wEt -kYN -xXn -byv -uiH -env -xXX -hem -lue -fiB -bOU -bSW -hks -xBb -kzE -dDR -iJV -ejg -sHz -omp -jAg -oJR -jgI -nxr -jVf -chM -blG -qRf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(92,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fsT -vOT -vOT -vOT -vOT -vOT -czj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cGh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hlY -sCI -mqQ -dhi -dGn -slw -vbo -fBb -goO -pdR -cPq -wWX -jdl -vOT -nmQ -fJa -vOT -aGd -pAN -ocn -hNV -vOT -ocQ -vOT -ljf -idD -vOT -kco -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bGY -bsz -ieA -jaz -msg -ihP -aQw -dAV -rVh -lzF -jrA -aTA -oDQ -tWB -xva -eHU -fty -rMZ -ocJ -avK -qiB -srC -nSC -gEx -pmd -lDq -gXh -aiJ -cou -slM -jSU -ozr -vcU -wSG -nzM -iJq -qNO -aJd -lvj -lGP -oUO -mFb -flI -nlV -njw -mhu -nNb -fIt -qaR -xkQ -aQC -bqs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rzp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(93,1,1) = {" -brz -vOT -vOT -vOT -poF -dBU -wYZ -ttv -aeQ -vOT -vOT -vOT -vOT -vOT -hlB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dKG -ftY -gnY -nzf -hju -onb -awz -qKs -vkW -jnW -wmm -nzX -cWo -vOT -eoW -fXr -vOT -djG -aKd -lZN -qdt -vOT -opg -vOT -eLG -wBi -vOT -lUN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gtx -wOD -lMI -asP -bBG -dHf -xGr -ora -jsy -twU -alS -nSi -vKN -nXW -bWn -rLN -eXp -rpB -pow -dwV -fSy -njr -oxz -oiK -dmn -vjd -gvx -dgS -tGa -jMD -ucs -aJp -wrE -dTC -lAI -voT -nzu -aVb -rjN -eFg -lRs -gSl -qIY -vwY -cmG -vUB -hQO -oZe -qXu -tfM -haZ -nkI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(94,1,1) = {" -brz -vOT -vOT -vOT -obQ -nWY -mHz -iGA -dCy -vOT -vOT -vOT -vOT -vOT -bzU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -seo -lTH -omi -eSP -joW -xnj -oEQ -oza -cnC -bmD -tMS -wJo -mIr -vOT -uYd -mwl -vOT -ujj -lXg -gNQ -bkt -vOT -kJG -vOT -xFl -gxa -vOT -nMc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nbW -lQD -dgG -mJv -bSI -kol -wRx -oHV -kJe -pho -nhu -wuD -vAA -cgL -aIP -hUB -edE -cPf -xEv -fqY -pmP -eXS -iiz -vWV -eCN -cTt -cLR -uKh -aIG -xvO -fGg -quG -hat -lqP -onW -sTJ -aEi -iTm -rMo -fWw -uTl -ajA -bYi -iBK -raf -mHq -odP -djf -gfI -mNy -sPa -pcL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(95,1,1) = {" -brz -oQt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lki -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vRO -efP -vOT -ohI -ofy -lNw -jlp -iUM -jks -vOT -kjd -dcF -ets -vOT -sRS -tRm -vOT -gio -xLM -bMg -atD -vOT -jlV -vOT -qyc -lSl -vOT -jba -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -orK -frX -xQE -nSK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xjW -cIA -wgR -pgD -lCW -vDj -eud -baJ -nCO -dna -sso -dLn -jJY -tMZ -nAC -qrO -vPT -rIV -iGi -nNa -kaJ -diK -rjV -hBJ -vso -scz -wnp -lcl -gAn -oyp -khA -vUP -onT -mvb -jwE -wOn -tpV -hnS -qcj -kRW -rjo -olD -nyr -yjq -sbD -kRk -nHO -wFv -kSK -gaq -aLK -qKV -atf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(96,1,1) = {" -brz -jbE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bbu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qOD -jWc -fUy -bzk -rdL -sQs -vWv -hoU -kou -bDt -wzJ -dnG -vOT -cVZ -vOT -vOT -vOT -fte -gRc -dag -kzx -dGl -qfE -gEN -uHj -aKO -vOT -lWn -xRr -bCl -vOT -uOb -aCl -vOT -qOQ -mSg -kle -eqo -vOT -vOT -vOT -mVW -vOT -vOT -rtk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xJO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ngU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(97,1,1) = {" -brz -aLn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -myJ -uBY -dVz -gxv -vOT -bKe -vOT -vOT -vOT -eHN -pGX -vOT -vOT -bJg -vOT -vOT -vOT -iAK -snL -wDV -mZx -hid -mIP -mLB -qwX -gzj -vOT -ucQ -qlk -gGV -vOT -wdY -amd -vOT -tSh -tIG -xbB -ukU -vOT -hkW -vOT -aye -vOT -vOT -cSC -vOT -vOT -vOT -vOT -dGb -qwI -vOT -vOT -gsa -aDD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cqA -gOn -qWH -nsv -dgD -mCe -cdh -wld -wZw -bGu -dkJ -vVT -xkm -gkb -uVT -rlZ -kga -orf -wzh -fND -cFn -nSL -ggY -hNG -jVN -gdE -aRS -uTz -gYR -tUK -edT -qjr -wUL -uRv -hXm -eAx -hkv -szf -qQs -qBx -off -ino -uug -qFq -kJC -vSJ -jHV -jsx -hJi -ixG -kvW -hoU -bDt -cUZ -xhy -mdO -dnG -drT -kGC -dVb -jBs -skR -dPt -mgq -eJd -yfd -lrd -mAF -nQY -fRb -chd -cZg -brO -haQ -eTu -oNT -crW -adB -rIJ -rAY -iDB -sBT -oas -nns -jox -fxT -qKj -vXC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(98,1,1) = {" -brz -kRd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wbd -vOT -vOT -vOT -xhy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xVw -xoS -vOT -hBU -vOT -mmF -nyW -vOT -wXz -vOT -itn -rOx -fjG -vOT -mFZ -nAn -vOT -xWj -odh -ccg -fkV -vOT -xQd -vOT -vHM -vOT -vOT -lvK -vOT -vOT -vOT -vOT -rsp -ylU -vOT -vOT -qsq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jKg -rDt -fyU -ubC -nyQ -fxM -lvD -wth -voh -teH -gZn -yiE -gcJ -kox -moa -cnb -knt -tWi -vDm -oZZ -vhR -feW -gjL -xpx -qqe -sTn -nlk -gBO -rLU -uEj -rZS -mmj -bGZ -wqg -hny -eSI -tQf -kbY -mcJ -eWJ -fGl -cts -emu -aYS -fsk -eeA -fPv -frC -qhC -pvY -sQs -kou -pGX -stS -gvv -osn -wjl -dDs -twR -eNv -nyg -wSS -nMk -cdy -ozI -uoj -geN -nSA -vZJ -mrD -poe -dFe -dPG -cXI -bEk -oUf -rFL -tIO -lxU -mIA -ssb -mmq -lzW -cPS -hcE -igd -bTM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(99,1,1) = {" -brz -sQU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cdh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dYp -sfb -vOT -jGd -vOT -rnX -pXY -tHj -uqU -vOT -rLc -cIc -sqt -vOT -gdt -oRt -vOT -rqq -twX -acG -aAG -vOT -nhJ -vOT -wsx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bUl -edy -bCy -gpq -etv -bZX -bMU -wlH -pCJ -gKr -bzq -nXX -vYN -bJx -wff -fnL -xXx -aBa -rmi -whe -wov -sZf -vhb -hxh -dNn -tey -lBm -mxv -oFt -mOB -nWX -gPr -exf -jjg -cCu -rOK -xpz -tHT -lLZ -bfG -bid -nDQ -urS -oQC -dBh -sJh -aSI -jWc -nuD -aGg -bKe -dRJ -wzJ -quk -gMJ -meg -wxp -oMj -nTH -exU -gmp -wWb -dnI -tmR -fXR -wKe -rsQ -ikh -aCn -pBV -mrV -wLC -oiT -vmo -taW -qeV -wKg -uWx -wxl -eTm -rTi -nKK -xJd -keb -ijw -dFD -cgY -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(100,1,1) = {" -brz -vkK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aAF -bMU -lvD -sHy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nTU -dql -vOT -kZs -vOT -vOT -fiX -rXe -nzj -vOT -pzA -vOT -shC -vOT -avp -efI -vOT -hiy -hTn -bKI -bVO -vOT -wpk -vOT -jtP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mVO -gbk -fSA -qOD -sHy -vnl -aAF -iSx -lgj -iuj -awh -tsP -vTA -eSO -nTS -cqK -pcF -qeH -aQE -eAQ -jGW -nCH -mBv -dXS -mnh -tzO -qVx -aNU -eri -fNc -jWr -rSV -xqR -xVB -fNM -oEk -kFN -bXG -hTp -egu -esM -wmM -bkl -ncV -dGY -vjc -whn -uBY -gxv -rdL -vWv -yhW -eHN -toA -fLi -cef -fGu -dnj -uHK -ljB -owo -qyU -tlR -bRZ -gXF -pHC -qXp -mEF -trR -gCt -jen -euz -gAE -nat -gcq -fvs -doy -vRU -pYB -oiD -cWC -ltr -uxf -hpC -rti -aPS -qxq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(101,1,1) = {" -brz -yeJ -vOT -dRQ -sGO -npV -upD -ted -bOF -qDr -nau -uiR -lpj -fgd -etr -qpQ -uVi -hMt -ylH -ngO -bmZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aPH -vOT -vOT -qBq -kdq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jZk -een -vOT -ovL -vOT -vOT -pQj -paC -hRo -vOT -lQi -wxK -aUB -vOT -oQS -vOT -vOT -uAV -ogK -uGl -rFA -vOT -vOT -vOT -wlu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bDk -fCZ -khk -myJ -qBq -wbd -dDY -sVs -iTx -bTD -bna -kek -dEJ -cNT -qay -owM -lxZ -azT -lsS -oUq -eik -msp -uXs -uJa -tvX -mVd -hWT -ifU -wNd -qQy -wKy -tDZ -qeT -eJq -nEh -kmF -agN -hnV -urC -aPH -tpA -nPi -kBJ -xwp -hyK -cDT -pOv -nsA -bzk -scj -qUP -jiw -iGv -qPW -ixv -aBm -gGM -qJt -mbH -rQK -oKx -kIu -rcG -edf -jck -fch -eBC -ivh -tId -qMt -gRN -vRb -fOQ -iWo -bLB -pqc -ttQ -bMc -wPc -cKe -tbD -uUF -bgB -nhj -uyw -dxA -cyQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(102,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -etv -iBb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hfA -fLI -vOT -gbQ -vOT -vOT -iSW -mvw -mmu -vOT -qSp -xNX -slC -vOT -tXB -vOT -vOT -xAO -atc -oJk -idy -vOT -gIo -vOT -vDV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(103,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mQT -vOT -vOT -vOT -jmH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jCV -rCs -vOT -pBK -vOT -vOT -omo -fyL -cqO -vOT -dmo -vOT -cao -vOT -wll -vOT -vOT -htJ -vYQ -fMw -eFn -vOT -nWE -vOT -sYu -vOT -vOT -vOT -vOT -vOT -vOT -rFZ -mYx -lFO -dXm -suK -bop -wvD -ubX -bpf -vpF -epU -bAF -oSZ -dEz -jLO -iaG -ogd -uQL -mOz -vOT -xID -aNO -uhc -isp -gcD -neX -cRy -ijr -ehf -rHZ -wgO -rEi -dcL -liT -jJa -jPS -imR -xcg -vAE -tWn -cSX -uit -bZL -vOT -wWV -wPT -mbv -gho -xSw -ipe -oOC -jct -lGX -vSY -nnX -qcE -wEm -mkH -trm -sIi -klf -mTK -tQC -ntA -dBf -dkj -rRb -xil -dNR -jMQ -dmg -qRb -bVM -xeL -vSH -njF -uZt -sHl -cjh -wCm -qcC -tbk -xka -pRL -ivp -bab -gjw -jsz -gCH -dUA -rEx -eRz -wME -iLk -mRQ -vab -rbe -nNC -qcQ -xyB -bBB -nQy -lmq -kni -ked -haM -vOT -xtt -ohS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(104,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uPp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qyy -gyK -vOT -nIA -vOT -vOT -wAZ -kpw -kOV -vOT -vOT -uOr -ewc -vOT -dGK -vOT -vOT -ekr -hMg -lzv -gpu -vOT -kXY -vOT -giN -vOT -vOT -vOT -vOT -vOT -vcm -mwB -fzh -umX -gBg -oaD -eqe -tWO -imt -hzi -fVm -rlD -npG -sqI -fLA -nPE -kIE -xvv -bko -tnI -vOT -jMm -gBZ -vnL -awp -ano -iuX -fQR -akk -uHY -sBP -rtY -qTZ -nFS -kpG -vBm -itM -fKi -aFR -fOx -idl -xgE -kcg -tnw -vOT -mDK -wql -sWr -oRc -atL -rha -ujs -jjN -qjh -mkB -uAa -dgB -rbo -qwe -dRW -oVc -tUi -iea -cCU -cnl -vOI -nsS -vPg -ixo -rxJ -hKA -cSL -oLD -lFY -xcN -nRr -kUw -diJ -wHQ -jKv -cKr -kOz -qgL -dRi -tBv -qwT -teZ -uhw -wGm -lUe -cMg -tKu -uvc -qCb -tYp -vdR -flj -lom -qYC -wPJ -xYX -gCj -lsr -oau -qOk -iAV -wUi -vOT -gjb -wWZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(105,1,1) = {" -brz -vOT -vOT -gWw -cTx -czw -mzt -lWM -ona -rIG -atQ -vnu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wgR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vYH -fVL -vOT -juv -vOT -vOT -ovF -vOT -gFs -vOT -bpE -aJA -aOc -vOT -jNo -vOT -vOT -uDy -rfd -pgq -qab -vOT -cvW -vOT -goj -vOT -vOT -vOT -vOT -vOT -vOT -lVP -kQT -eFd -fRT -goS -ktv -wXm -tem -mix -fLc -nqP -vCQ -iAQ -qbC -oBl -taZ -eJT -dNC -wCy -vOT -pUm -cxN -tql -iax -qdx -tSK -odr -wIr -uXc -cQn -hqX -eFP -wdm -wUy -rtX -ocI -sPu -jyZ -cyy -saa -jRk -quR -fQg -vOT -nbr -bJp -mYa -esS -oag -hhT -iPb -tkJ -tZm -qJN -xxu -err -rYZ -xto -iUV -oqO -sjq -jRx -vBb -plW -eVx -sgm -fHP -nJz -nbY -fvY -lCB -dEy -lOM -paF -gey -caT -aKj -sOg -fgv -uad -xBi -kSr -psB -hax -iEf -ctD -iPV -wmb -rpT -uqH -lTe -kPb -mvu -ixy -veW -mti -neM -fVu -etd -cxU -nAB -vWt -jyN -dLv -qWr -rsS -vOT -mKU -isR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(106,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mhQ -pwN -vOT -vOT -afs -sgv -vOT -uzM -vOT -lFD -vOT -ncV -cRy -xcg -vOT -vOT -vOT -poj -lSn -vOT -mRD -vOT -vOT -vYC -vOT -vQH -vOT -wbU -psv -aGm -vOT -oZP -vOT -vOT -bYG -pyS -eGw -har -vOT -bsg -vOT -aAi -vOT -vOT -vOT -vOT -vOT -vOT -xtB -tAW -fns -sTZ -jxG -aDr -yaB -blo -uyq -vGQ -akS -oyg -cqV -cMW -jwM -iFK -pzL -mQR -vOT -vOT -bVL -pQb -tmQ -xGU -ohW -uCD -nZz -diY -hcG -vaN -gYU -mmN -pZb -dyj -vNS -fAs -mZe -czJ -wqI -rGy -jLa -clp -vOT -vOT -gkl -kcd -eqx -jvf -uOp -nfb -tmg -oRp -wZt -cgV -uyW -uQB -cVZ -tHi -gJq -yfT -uLj -lqV -rkQ -qXI -jIA -mvt -uIt -srb -qLm -kRl -qde -hXB -hGJ -cAj -gEe -uYu -mTa -jxV -ibP -fKb -cDy -doe -nsY -nHu -upO -aQT -xNy -cta -hhM -fzA -bjq -xvR -gvV -uHA -sLs -btW -sCa -qEm -nzZ -jSn -jky -oFO -tFu -vSD -kaI -knE -vOT -jtW -isR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(107,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vjg -dWy -vOT -vOT -ciN -cWj -vOT -fnO -vOT -qbZ -vOT -pOv -kpG -imR -vOT -vOT -vOT -qIJ -vsH -vOT -jpc -vOT -vOT -bhe -vOT -kgc -vOT -ccf -scN -vjU -vOT -epV -vOT -vOT -oNl -eev -sBY -vOT -vOT -jTb -vOT -euh -vOT -vOT -vOT -vOT -vOT -vOT -aKr -kXB -sfm -hqK -hvV -rNA -eAa -oOV -nQZ -msH -lVt -soU -koK -bZJ -gDE -jju -bBD -lbb -vOT -vOT -ncU -xVT -dIQ -bKj -mVD -qFK -sNn -kAE -kER -gGj -kAM -gMT -duK -rge -rEW -mVE -jmO -rHw -aLr -hWO -llx -ret -vOT -vOT -akM -skh -sMc -uen -cJa -rUi -hfP -uGf -rGU -wtz -jWO -hea -mIt -qPv -iQX -cnz -iGo -bxv -hML -bot -mML -gvC -smk -pon -uDC -sSd -tsM -cGk -gFY -cHm -vzH -xNl -nSd -rTs -ewW -lwb -jfd -cUU -jpU -qoQ -tGz -chw -rky -yim -cpL -wwt -gWC -amf -pNu -qtH -jMf -fqP -bIv -fUG -fEW -dBG -mPS -hci -hxc -nRb -wqR -qjM -vOT -jvd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(108,1,1) = {" -brz -vOT -vOT -djN -ieo -eau -suj -tNf -mej -bKw -sqS -tnH -sCq -pDS -vte -sjc -lCd -tjZ -ciY -dhr -wTa -mfH -uNx -xOV -txj -vOT -vOT -vOT -vOT -vOT -kVm -iYT -vOT -vOT -wPq -lyY -vOT -gMu -vOT -oyg -vOT -jyZ -jHV -vOT -vOT -vOT -vOT -emL -dBy -vOT -pTz -vOT -vOT -vOT -vOT -fHG -vOT -vOT -vOT -yly -vOT -izX -vOT -vOT -vyM -umK -apQ -vOT -vOT -ksP -vOT -hHJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(109,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iGU -qnS -vOT -evm -vOT -soU -vOT -pUm -vOT -vOT -vOT -vOT -vOT -wVA -vOT -vOT -wEj -vOT -vOT -vOT -vOT -dyV -vOT -vOT -vOT -jqZ -vOT -oPn -vOT -vOT -xkH -hdZ -wOB -vOT -vOT -wEF -vOT -xlB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -dxU -nTm -sqP -kBV -gJx -kyw -req -vKq -esn -qhT -jof -sOY -aUS -xhO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wks -lkW -erD -aaK -mge -dLb -wdx -nbI -tlD -fSu -pKB -ahz -xee -oqr -tYV -dim -iAj -jeT -lVs -mIH -qci -fgJ -lSt -iSf -xdg -myh -oLl -nIk -ygk -qtw -ldX -fgN -aXo -lpY -evI -fuM -dCz -eAZ -dIv -ixe -cjS -nEU -clv -kZz -xtY -jyT -bpi -tMH -aVv -xUJ -uqi -pkR -mmY -gtC -miJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(110,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sqQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vVv -jTO -vOT -rqP -vOT -vCQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dER -vOT -vOT -imb -vOT -vOT -vOT -vOT -ovw -vOT -vOT -vOT -qfK -vOT -hiU -vOT -vOT -eYD -nuo -snw -vOT -vOT -vOT -vOT -kiC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gjT -ydg -bgZ -bRR -dZl -vOT -tsZ -eLh -hiG -nps -tIv -pJJ -iUl -htT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uAP -fzD -bsp -kMw -eyB -pYj -tfE -kuB -mEB -vuC -sYI -kDf -cfE -uKE -khs -cRc -sST -eDO -bSM -xlu -lKb -gsm -meA -vOQ -bJz -hJp -cZB -bhg -gtR -vIH -uWm -jOd -hzF -kYp -mZK -iPa -nIL -wlB -gyp -vyi -lPo -gbE -xoy -qqv -dEF -qSX -fMq -cGc -eYH -mDv -dNZ -rbT -tXC -nTa -byc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(111,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wIw -ixZ -vOT -rFZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pBR -kJX -tYo -rhk -lVu -vOT -thE -gUO -elX -vig -jdF -grA -sii -jOV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pSX -frk -wUb -vSt -gsi -dyC -uuB -xPO -wgx -cmA -bPA -xPQ -cwA -hWp -daw -xrc -goR -nrF -rEr -vsD -gqX -gvP -iHB -vyF -eUu -fCl -iCm -hSZ -dqg -xET -vTe -qKL -eEN -jil -mDW -iRG -aEF -ewm -bhM -alT -nvD -lQt -vri -lVC -kjQ -iYA -ard -kKW -seJ -ybq -xdP -vuJ -vgp -xhD -lKu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(112,1,1) = {" -brz -vOT -vOT -pUR -jzG -bNV -eMn -dCD -uGC -oUP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kHM -vOT -vOT -rCZ -opj -vOT -gGf -xBD -vOT -jhQ -ydX -sFR -rBL -rmI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dGO -qQI -ehx -lVM -vLy -bMm -guH -xrA -rOy -nOy -ekj -lQa -qDq -sxr -rth -jRr -bIl -etJ -rwj -rSG -rzy -fqv -qdu -vKY -evp -ttF -aXz -gbd -ikF -uBc -fqu -pVj -nQG -akL -nmD -acK -qjy -drQ -hcT -sdT -wuu -nkr -mWi -udE -icH -abx -fUj -vUd -ocp -nJH -pQy -ioJ -hCT -icw -hlr -eQQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(113,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xca -vOT -vOT -ugr -drB -vOT -nUQ -jfi -vOT -rLB -vSK -bGW -iVY -jTg -hrc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dCi -rbA -hDT -kql -ajc -jBW -jHb -tqc -dze -bPV -pQh -nCS -dXX -cls -dgj -pzp -qgO -xNz -efH -cMe -aeI -jNV -lVv -osQ -kLg -fLd -hJv -tfO -oNw -xlU -jGi -eWd -vnR -gwE -wTI -qIb -ycX -qTJ -mVm -oFW -spX -ukP -lfn -vND -nTl -cUm -eho -xVF -lqH -mdd -hbm -pbI -eXi -gjQ -npL -tno -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(114,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(115,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sBf -jUC -ujq -hwr -gzI -aIB -btq -hxX -pIJ -sBw -cqM -obe -nSe -mTh -lvL -jtL -lRz -okK -nsP -nbk -xfF -rOz -bDU -qRT -ycN -xYw -eNz -nNy -svp -eHV -ajY -qjS -bCm -vLF -jNb -bRc -pZW -aIz -xDI -fwW -fse -lil -iYU -vNY -wFe -eOJ -vSM -oUJ -vVA -lTZ -qNq -tdn -oUl -mff -fBA -ifB -cyV -sdF -tYJ -nlK -eXU -hSa -qJh -qPa -ise -noV -wda -xTx -kyX -wgp -omL -jJO -uBs -wBk -awe -rRi -wFJ -jOP -jZn -yjB -uoU -svX -tzB -tiC -lao -nWn -wta -eAy -rbW -qPU -gZw -nRa -gbv -nor -uWO -fMM -nZB -maf -eaD -sVJ -oSC -fuN -kqr -uTR -tLY -bDd -srX -vFU -nxf -uek -loI -tqx -jDZ -xEa -mAl -dzt -fNV -bAk -wrY -gWY -iJg -vwa -hSY -bLX -eJb -cWe -oXx -lcz -kiL -ein -cNh -cxx -cEO -xEK -gQD -bBQ -oPU -wIV -mEL -bPT -bIV -rmo -wCS -vSL -mCr -lmc -kxs -hZI -kPM -cwr -aiz -rWi -xEM -mRB -ibB -qlC -bfo -iBH -anR -nOK -ryb -ubD -oPh -tGe -mEd -axj -hun -pvv -cXx -nOM -kVJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(116,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ssW -kwh -rNZ -lQh -vnC -qPH -dio -rJC -pFw -eaG -wRQ -hGR -sjy -opF -cVX -tft -cAH -qSe -oyI -mTD -kru -clX -sMP -hJY -aKf -idO -vNP -war -vDi -uwB -fmD -gLM -lJD -dKS -iot -bUm -gwq -lDn -cFD -eap -vjR -jGQ -vGG -djO -nNx -eeX -nAf -oHb -xSN -kJP -rur -kZt -fQE -qgI -yby -hFC -axn -iSk -pGf -duG -eEZ -sZw -qZl -eqk -eFW -uvx -enX -wMw -bem -qsx -kKd -iRb -jQH -bTv -itg -dCo -vdU -tzu -xgV -aIJ -jwu -qHM -usx -vKK -elV -kwJ -jWB -vlz -qUL -okh -xQZ -pem -sNA -mGI -jmF -eOr -mqE -wwB -ccQ -xwx -qEu -mbB -xKR -iPU -dFg -rJZ -rlO -vid -vEN -hKs -syd -fZe -mmn -nEw -oIu -fjv -pwk -mUX -cob -vyQ -kEr -hLR -txc -iqp -fYb -dbF -xXB -pWB -jaD -gng -vKS -xXD -lEX -oVA -oJy -lmd -uZs -twK -cRb -luB -qEW -ftI -vWh -miR -nSj -bNq -iDy -hvG -mnY -uvU -lvb -iwh -gHo -bQv -tZw -eeG -gMp -kxV -kxC -seD -lnT -jdD -jPD -hcY -iMx -fdu -evu -aYV -eka -iKh -iil -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(117,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -knc -hTc -lNh -kLv -kUf -cpQ -emi -hJB -wlM -kSl -jJF -thf -nLA -jti -kDg -lZs -xKc -tTO -lVz -cbg -uQF -myH -oRW -pqw -tCG -sQj -xBc -rxW -tpU -dff -bKa -xXg -sVI -hYa -khV -dgz -nsj -kds -hbU -dNu -iLl -iOg -ilT -cGe -iUj -cjq -rxk -qLH -glt -pkC -lTi -wwL -ccE -eSH -fmo -nPG -vOh -lXF -xxi -dki -klJ -olr -lUl -mFe -las -tHE -eki -cvA -csL -qpg -shG -xOz -tcG -vej -aOB -atj -pnm -hrR -cOT -knV -iSP -tKz -ajf -rrZ -sDp -qdZ -kdS -mEy -vws -jau -nyE -gGu -oQs -eZi -mSb -jIM -txG -cxK -qzw -vIh -cof -aay -rav -hMd -ncN -oYv -uCs -bCa -cFU -xDJ -efe -gYJ -wnu -bjX -sBA -tRY -nrJ -owz -tHW -ofm -umS -kur -yik -sYa -bmu -woG -mau -ueo -rrF -rXr -nOn -kOf -bns -lPa -mZn -ooV -unX -tgU -xHu -oXR -rDl -ejO -uJn -rIS -rxZ -nhT -fqw -oYk -jYk -udt -hzb -sQW -lSL -izk -hmh -cPb -lya -mCU -wan -hiL -iQR -pnC -qxc -mmT -jlN -qwZ -nON -jpb -vqW -kif -rCo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(118,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ddv -uDg -auB -elp -nXO -cmP -jPl -pKj -qgP -xqL -fqK -ePJ -rqD -mwi -kXR -tdZ -mWY -wtj -qhX -cAc -eCM -rEO -ncW -bqy -ahw -naS -vnJ -kry -hXb -kSD -vXj -lDc -awK -sTU -eqQ -iim -bUm -bsu -jDA -lfs -pvc -aZO -yiz -oAQ -agk -xQr -dJY -heV -cuL -pag -rTK -fiJ -aYG -uSL -eOD -mAx -sTm -mAk -qtn -orj -cES -aTv -rrn -ist -eIc -fWa -yjg -xRJ -gsb -vGO -xxH -oGI -uew -spj -nST -mxV -scX -jcd -pFC -kaP -hGQ -dkI -inC -jlZ -xUW -aar -kCl -aat -bCd -sGC -seQ -nxH -leY -mWF -hDs -hll -uwE -rBV -kKt -ugx -pqz -kjf -vDY -xwN -sWE -idx -iNl -jdV -aAU -ply -ycK -lrA -wBh -mnM -xIQ -fRR -unD -jUl -rcb -wfp -dkm -kjt -tFO -dYR -nIg -fwJ -kUY -wtN -cgm -diE -hDa -smN -fYf -teo -msF -bYs -jvY -bpK -hFa -rmz -pyk -ngm -skm -qED -qME -cVr -iZd -pNN -uPS -nUD -qKt -jHU -sly -thQ -uUV -mlK -eLc -hHA -hIw -uCT -xub -ngf -jNA -qYX -nwI -sgI -dUd -uMW -dAD -whs -ccS -pnv -vOT -xDR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(119,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uwL -nsO -tNH -fxk -vVD -eFY -cmw -fvk -dCa -xPG -xYf -dsn -pCm -oKW -keX -xMj -xpX -fgK -jmt -wbQ -tzR -qyv -wkG -xtC -oHM -duW -bHO -lMK -lBv -dfr -izK -fCJ -hOB -gDV -pft -sPg -dgz -eaT -bjr -wUU -qpn -tKg -iqM -uFX -cBR -iWQ -wnx -mah -fyw -qxA -uvL -cZU -hrZ -fst -jjH -gwb -vXg -ieG -uLI -vMs -dOY -vdG -dkl -iVH -rXN -yeP -wnD -rAK -fBS -wML -wMX -mqW -cYh -hXK -gIh -bCj -hlP -iTf -eZM -wtQ -dxG -ubU -eob -rbx -llM -nBP -bIC -qeq -qkB -kYv -fDK -bFO -tEA -aXB -fWJ -rwq -qqV -fTJ -hgX -uOt -fHv -xOW -wYH -fYA -fex -klm -yeF -lUb -aqI -plv -prn -gvu -gOp -pdT -dUg -sKC -ddd -pQY -vYK -vGR -pmL -lFB -cXi -jVn -uUx -pek -iBc -xku -wNZ -edD -umv -tDR -hjA -bjg -jex -jAF -nFi -oOi -rjU -sZg -bPJ -euW -oyw -qjE -tXR -ctT -kMU -hRX -sgW -hzN -mKi -pUw -sLq -oGZ -vrq -vtp -tgA -hAc -eOu -dsO -cTl -uBE -qGn -wyj -tfK -toG -tgG -olG -eNu -hmI -fpn -pnD -vOT -kbe -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(120,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hJX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(121,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(122,1,1) = {" -brz -pnN -fzb -nUa -hro -reS -cVu -ovU -bMs -tFx -sYG -cno -iiX -flS -wbh -ujx -mpz -gdy -vQw -wRd -jNU -euq -uId -iKM -ttP -sMb -hpQ -pdx -gJd -iYE -pKx -rpk -lVY -qhi -uzy -cRv -aTT -qki -flH -mQB -tEG -jxY -ixb -soS -dHy -qiq -rmL -frJ -uzK -slc -opX -opt -uDv -erk -esE -rNu -hYW -uXJ -cCo -uUN -tth -lbE -cEV -lIP -vOT -vOT -vOT -nnM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wFR -pZL -oaH -ckG -dXE -rlS -kjg -nXi -aho -tGB -ihG -eJR -bHF -lOu -oGq -vQg -bMv -pGB -cAB -tBS -rri -lTd -ese -rvS -rVJ -tkx -oHO -dxq -kDP -wms -dyT -mbM -ncw -ylZ -mfI -bwO -xah -wBW -sko -omA -mYh -tPp -cfw -sff -bYI -hDg -uxM -uXX -odb -qnI -xRG -upj -bDK -wFQ -qUy -eIl -aZu -xJx -xdN -rdP -oLH -gGP -wnu -vOT -nvL -vOT -kHb -vOT -nFF -vOT -oLu -vOT -xYJ -vOT -fbT -vOT -xjV -vOT -wRt -vOT -qvs -obu -vbr -qXM -cuW -gPU -xeT -gOA -fkh -fFK -nBl -iev -xtg -hLC -oOy -ifD -jpQ -aJC -kLk -pIa -lJC -lwg -oFR -gZz -uqW -eWe -gaS -pRE -qXD -fZp -hUV -eax -rgl -wEN -auZ -imT -xqe -lQu -cXo -eNW -oPj -qyZ -hhY -vOT -brz -"} -(123,1,1) = {" -brz -jkJ -lFi -oWO -sXu -swz -cCN -dRG -qRt -std -cew -htH -lbE -otW -ewJ -vQv -iDV -vUn -xGQ -fsQ -xvY -mil -cxS -gLx -mrd -aRK -nta -qhf -psW -cbR -cNs -tWr -dCr -sMx -fkO -wUt -eeF -nAp -mFl -uXh -cSJ -gqy -jQc -gKe -nuu -mCi -qom -pIL -bup -iCb -cbc -wef -tGu -ceA -xoi -jxQ -nFl -sHt -qWM -dSE -uTI -sNI -iiy -gXH -vOT -vOT -vOT -sln -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bKJ -qYx -try -rHy -caf -dUV -uxD -fYC -thm -nUy -hLE -hed -uYj -pkc -mCQ -vPZ -pfi -hSw -lgh -rhA -hsf -piU -rgX -jqJ -lEF -qWW -hEZ -sJp -dcT -xzg -fPB -vRW -ikA -qWD -msf -jKW -jiF -jGa -agJ -vuv -wqF -oVh -tAa -weF -vob -aii -jnj -tvO -bTN -xwP -mTn -qkc -cIz -mfE -far -nyI -ivt -qrB -pVc -ruz -mWq -skL -wnu -vOT -mFL -vOT -uwr -vOT -tEH -vOT -viT -vOT -hCR -vOT -tJU -vOT -vOT -vOT -wZX -vOT -tJV -ooW -aWE -vOT -tUU -fnm -gvZ -osG -aqk -ciQ -eUd -wMH -fgs -oLL -dXD -nFM -ycn -vOT -vOT -wTG -sbE -xry -cYq -rDk -rGL -jMO -szP -agz -gcI -cbi -eTG -mDq -wpQ -qBw -ppb -jGU -nls -krm -jVG -apl -fmY -jEf -nLk -vOT -brz -"} -(124,1,1) = {" -brz -aSi -eLG -xJM -pqE -qts -xBH -lio -cNG -sqJ -kls -wJF -tth -emo -grO -kxM -cGp -rCh -lqo -iXc -pTg -gXx -xgH -oFa -pMs -equ -qBn -qhS -qsv -aFC -cvV -teT -cHO -uYY -gsG -jPj -vwy -gEF -vAD -lpT -kyF -saf -nVY -vbW -asS -kef -gim -chk -ffR -vFb -uEy -lhu -wAu -uFB -xqJ -pNE -utY -cSN -rbV -nPy -jNB -jJk -obz -yjV -vOT -vOT -vOT -kNp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sfv -tkQ -kYL -qNP -sca -wjW -gWQ -xcZ -ieR -bEr -hMe -lKX -gIE -xpr -pMH -qOR -vFY -nUd -gyY -kEM -fTq -rxK -nwn -xej -oBA -eDa -qIy -nlp -mJf -kQV -gDl -xId -xlm -amA -jiO -bdz -lCN -jyM -jZC -ogY -lGp -kgr -ilO -xHX -izj -pcB -hLx -hzH -dZt -hPs -hdr -mhq -qgg -dsE -qxw -evZ -ofQ -ukr -aYJ -yfi -nzH -aYP -wnu -vOT -hCc -vOT -dQe -vOT -jDj -vOT -mYC -vOT -vOT -vOT -gjk -vOT -vKo -vOT -vOT -vOT -fze -flP -mGD -vOT -ovb -lDe -gjD -hie -sgx -edg -tph -epo -thU -cQr -rxL -oLp -vOT -vOT -vOT -kGN -nfl -cMJ -lwz -vpi -nmv -lMa -hqg -lnf -wcW -klD -wrD -viq -iHA -phK -ukX -raO -vFK -eaX -mgy -gun -rsF -nHl -vOT -vOT -brz -"} -(125,1,1) = {" -brz -xnL -pTV -nbi -cqs -xEd -xJa -vOH -gTN -cvY -jzz -kWP -tUS -lPq -qfq -luE -wgI -hDX -nlv -aJS -tma -mRz -hFT -isD -sBh -fVo -vQT -gSA -eQD -iMb -geU -wyH -mPI -pLi -qGB -vOT -gQf -hwY -tFE -kyC -brl -sDE -oQa -qaW -xTe -vBF -sPr -daX -nQt -vki -qzu -hUn -oli -knx -aQt -mVR -nAD -bAe -iYW -wKf -pyB -yca -iBs -lIf -vOT -vOT -vOT -ijf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bHN -ngp -eTd -eFX -dJx -jGD -fde -tdR -vBj -qMb -rDK -tyA -dDJ -oWG -rQb -lSy -mzG -tmA -bCs -jYh -vUJ -aBL -jVP -mjT -dwY -pUB -ofg -mMM -nPc -iZg -tOn -kis -liD -dhQ -pTx -uaU -pTe -tJi -ybZ -vrW -pnZ -ipv -uoo -hSy -kNT -hPy -jHG -bjQ -qeR -upX -jIw -cbU -fqE -rFY -gpp -hTs -mSP -mQy -cjc -hJc -qAu -mik -wnu -vOT -cyi -vOT -bwL -vOT -esl -vOT -itT -vOT -vOT -vOT -vOT -vOT -mgx -vOT -vOT -vOT -kUE -yfY -mKW -vOT -tcr -wOd -vOT -jIV -pEY -gqJ -hav -uIj -kFi -swS -mIp -qxN -vOT -vBt -iIa -aDo -nGN -bmj -eAN -dAo -gEL -hcJ -fcT -kYC -mcO -qKM -dRk -pTb -mSD -sIt -bqr -aII -rRl -cug -kLL -esd -inl -uhg -vOT -vOT -brz -"} -(126,1,1) = {" -brz -dvK -uhk -iNY -rlt -raD -ujS -xzZ -kBe -rLo -jXg -lax -qJm -nGT -eWa -rpn -rhL -aKY -svA -jPt -fVB -iJj -hOp -eLb -kit -dXd -bfZ -xyx -aVL -mKf -dfu -vnS -pFp -dZZ -fOf -uby -ujE -xqH -cBb -aNt -kfS -eQO -aeh -keR -bOv -oMr -pTP -iiQ -dLV -lcD -rmg -eGA -ggN -fnB -mya -uTn -cqm -fcZ -jnG -xjo -pDo -fcb -wOT -vOT -vOT -vOT -vOT -eHg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nVz -bts -dWo -taj -txZ -tIU -edO -xTa -egG -cDZ -enM -cmm -awW -bPx -ulb -ork -rTe -cyH -kOt -yjP -nwD -bYV -evJ -dpb -ehi -tYk -tvS -keW -kSo -tNh -biR -ach -ppX -pZf -lSj -gWP -fhB -dcr -pat -xcf -mzk -jLP -fYh -hmB -kAo -rHG -aXu -htX -gPs -eNI -smB -bhi -bVS -gZf -xzA -dDB -sCz -tdF -nij -iuy -tZd -sgL -vOT -vOT -vOT -vOT -llR -vOT -xiX -vOT -toz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kUE -xRn -ayc -vOT -uNq -nop -vOT -vOT -vOT -vBk -sTy -erE -hmn -krJ -hWD -nBv -vOT -vOT -uQA -cri -udh -lvC -neh -xrz -nPT -xxz -fMg -eCJ -lMi -hAy -cDD -fLh -cpi -lwc -bqO -drl -lro -ngj -xSD -axe -wXc -keE -vOT -vOT -brz -"} -(127,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nph -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(128,1,1) = {" -brz -vOT -vOT -vOT -tYX -iVk -vOT -tnm -oCy -wUX -nlf -vOT -vOT -vOT -vOT -vOT -vOT -ncX -caR -fRw -lvX -jSt -bbO -rGb -chv -kMs -gHY -vWs -cwI -aIZ -pdX -etO -cjs -wFX -pHK -bWZ -wIQ -rKG -pep -eyH -laq -rHN -pzB -gwW -uDb -dkp -cpw -gcH -vOT -vOT -vOT -sxm -lYq -oMh -khl -mLR -ldS -pDG -idz -tUM -vdD -vOT -teU -edd -hPP -jZl -hFq -gdk -knM -tej -xYv -aJR -ryA -vQG -bUd -eIX -fkR -cDw -kEt -eHl -rhj -nNT -pyL -hPo -jvb -vOT -iEh -vOT -hMa -vOT -aXv -vOT -fOs -vOT -esp -vOT -eHu -vOT -suy -vOT -oKp -vOT -cgi -vOT -eBL -vOT -toY -vOT -azE -vOT -eBd -vOT -gsF -vOT -ngL -vOT -obq -vOT -tXZ -vOT -uNs -vOT -fjJ -vOT -hsA -vOT -vOT -hQv -fYI -wve -bnp -vOT -bxr -uEe -vOT -tVl -vOT -ldl -vOT -fyg -vOT -csE -vOT -pAR -vOT -vOT -jFF -vQa -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lBN -vOT -vOT -vOT -vOT -xdX -hHV -dsy -cFf -hus -lMW -xua -uEW -vOT -vIY -nHp -hbf -aSe -kOq -qEZ -wDf -qWv -mqm -xbz -qbg -uTJ -rVa -gVW -baG -teb -hcr -mpY -xqy -mMl -jWu -uxK -uGb -wsJ -qWy -vOT -brz -"} -(129,1,1) = {" -brz -vOT -vOT -vOT -iRJ -stq -vOT -qRv -rSB -qbU -jlY -vOT -vOT -vOT -vOT -vOT -vOT -jse -pMS -ksX -goE -xKf -vGs -qnw -eEb -feg -rNR -siJ -vEe -mbZ -hJs -jmC -aXJ -sVn -som -dii -aQW -hyx -oCp -ezW -oAc -hnD -lBO -vZD -lyb -tnA -geW -wrr -vOT -vOT -dRm -tgB -mNz -xhl -bbc -pBc -oMq -mxQ -xwl -cZO -nhr -vOT -fgP -vHn -czn -yhX -dED -rkO -kjZ -pOm -iUh -wdb -cdP -bey -cdw -oHj -aWA -pGk -blk -jrw -nLO -oxi -aVh -vOT -xLO -vOT -miY -vOT -pgK -vOT -rRq -vOT -qvw -vOT -umq -vOT -nFV -vOT -irc -vOT -fnv -vOT -eTL -vOT -gEj -vOT -jts -vOT -pXX -vOT -nJt -vOT -qQu -vOT -wbR -vOT -goV -vOT -nmM -vOT -sIM -vOT -ifO -vOT -fNi -vOT -vOT -fBP -hxz -sVb -hlD -vOT -pCn -pEo -vOT -hRq -vOT -qbH -vOT -uzd -vOT -arI -vOT -dcw -vOT -vOT -fJs -gEO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gqc -wob -wFq -dbh -arD -gWB -nbl -mvR -vOT -aLB -uuq -nlB -fjW -ebU -fEU -hPE -hbS -mEW -fSZ -bLa -fMk -vgr -vxp -kPa -dRy -nIn -eWK -biE -rlX -xkc -feE -xsm -fgz -aNo -vOT -brz -"} -(130,1,1) = {" -brz -vOT -vOT -vOT -geG -vOT -vOT -teF -gls -xiP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lrm -gww -buz -bGC -cgo -hDW -xNc -cAN -oKE -wOM -rgA -iEP -qtp -xiE -ckr -izG -kOk -gvG -rfP -lMf -jgU -ryq -mXr -oOv -wsG -apb -xhr -mIx -hjs -ofn -ujw -rqA -vOT -kRp -anU -oZh -qHQ -hkO -odE -wFA -iwA -tSc -vAC -ejF -vOT -cOq -wOG -iMa -dfS -xnS -gBF -urX -oIR -srg -qTn -krP -hQe -bJN -dXM -veU -xYQ -pjX -pYz -bCx -mer -vQq -vOT -nkf -vOT -iOV -vOT -nYg -vOT -wJr -vOT -vjP -vOT -hKc -vOT -lpv -vOT -sbk -vOT -efi -vOT -hEu -vOT -tDr -vOT -mpI -vOT -ddr -vOT -drf -vOT -roN -vOT -fPt -vOT -aJW -vOT -esz -vOT -jly -vOT -vvH -vOT -xnV -vOT -vOT -uOz -iag -fbm -avi -vOT -cBC -jtz -vOT -bZn -vOT -iHV -vOT -pRY -vOT -fGK -vOT -nIO -vOT -vOT -kFr -sak -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rnU -uwQ -qMA -kiz -itE -doL -lET -vOT -vOT -vXd -pPh -gwA -mvr -eKs -aGY -mrj -rVX -tlr -rwE -qHo -bTO -jsZ -veh -dFP -pJZ -fHM -wPh -rOa -aRr -mHP -qnR -arW -rCt -vOT -vOT -brz -"} -(131,1,1) = {" -brz -vOT -vOT -vOT -rQU -vOT -vOT -aXW -wqq -seH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bmq -lnL -mLI -agx -bBt -ozG -kpf -snT -fhh -lgY -nAa -rck -ggA -fEV -pDe -gXC -kMu -aqt -jJo -iya -kKN -iXg -khp -tyu -iPv -owN -srG -jPR -lhU -eyk -syK -mrx -vOT -xyN -ehP -qfH -tKK -kFV -ylW -ohf -ujl -iIP -mOn -fGh -vOT -pjc -lOw -qbN -iqN -deX -wOk -koe -nwu -bzE -vuu -iiC -igc -kQE -lat -ceb -bvr -kuY -wRy -hcn -xpA -vOT -vOT -wCk -vOT -aej -vOT -xYF -vOT -wHh -vOT -gkW -vOT -hgr -vOT -vHy -vOT -sbY -vOT -pxw -vOT -cqu -vOT -eRX -vOT -dAn -vOT -hQw -vOT -nHr -vOT -sJe -vOT -wsj -vOT -mYZ -vOT -mgE -vOT -jpr -vOT -nIm -vOT -vOT -vOT -vOT -uUr -bhN -alc -ptJ -vOT -rLw -eIo -vOT -cNr -vOT -npa -vOT -rMj -vOT -bVF -vOT -vOT -vOT -vOT -rJX -kBQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gPH -tqu -pwt -eKm -leM -nYA -wYI -vOT -vOT -fqz -ddn -lhp -qZk -fIL -hMK -wsL -lNX -euI -cZH -ifA -vSi -mvc -xmR -kcb -mdJ -qzs -ioZ -bZx -qgb -rKF -hlk -wlU -cmO -vOT -vOT -brz -"} -(132,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -qSd -iVd -bFe -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gBa -gXJ -kuw -aMB -pap -sNP -iNh -ofN -pAK -bVa -eRn -ixz -sEF -alX -aLs -xEY -gYQ -xCE -wkp -iLV -eFH -dbG -oSs -aKb -fMr -rbG -dXR -oZM -gOy -vJL -nGy -fET -vOT -pgf -cam -mvd -aGt -bHR -kBR -hHp -rpb -vpW -heB -bNH -vOT -vwd -lzR -hGx -sFC -aIN -bWF -gNY -gKI -mlX -lOx -gKj -aaj -vJg -yhA -pzO -cPW -vcR -mpE -oAP -gdL -vOT -vOT -iLF -vOT -fCL -vOT -mfs -vOT -jhI -vOT -nye -vOT -cSj -vOT -nZK -vOT -hOn -vOT -tXt -vOT -dNf -vOT -tOv -vOT -glI -vOT -aYW -vOT -wNw -vOT -wou -vOT -gFa -vOT -xbR -vOT -ljd -vOT -nfq -vOT -aIi -vOT -vOT -vOT -vOT -qEf -nmi -gik -jfH -vOT -cwK -vOT -vOT -vGY -vOT -pEl -vOT -rAE -vOT -jGI -vOT -vOT -vOT -vOT -gtT -gyM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jor -wUx -vOT -fov -uHB -rol -vOT -vOT -vOT -jno -eoR -asJ -lIa -rHR -eIm -lEV -tHR -xic -pWb -cAu -unl -clf -bnz -tCb -fVb -sql -sAK -pnx -qyE -ghR -eip -ngr -fSv -vOT -vOT -brz -"} -(133,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(134,1,1) = {" -brz -vOT -vOT -vOT -qVF -lNi -rCc -hwd -gAF -plg -fKF -kNC -xbB -snw -atD -eFn -jki -uxF -jAI -sLa -mjk -gme -eIp -wmf -mwm -qLD -mzV -hVg -ldj -mHr -bcL -drv -oKt -jVv -iYu -gyO -qvY -qzp -dTy -gPz -mCp -fWb -imO -fnt -gah -ngu -npX -sIQ -eyo -ppI -jmy -rFS -ljx -bbJ -inE -ybn -aPw -iWv -naC -dVz -qNs -dSM -ddL -eau -sqS -sjc -wTa -nqY -uTK -oEU -vGS -aRD -bLv -kOC -qZJ -hlK -iAD -ubK -kGT -jIz -ebL -apE -xqn -bhd -qvX -bkY -kdF -bFr -eeI -sNG -nby -wBQ -oDO -iCh -blb -tOE -eNl -gqB -tVa -nfn -niW -bvo -rLz -qTj -eil -rAv -iwn -xcI -gFn -rcX -cRW -kBT -yiV -vuQ -fIf -aiF -msQ -iWg -fmT -exS -qwA -kNO -gzX -hrf -viy -mfy -bwU -rhD -uIx -kYQ -hRj -eBs -aOn -cPX -cio -mwq -gKY -dAG -koV -bEE -rgx -rVq -nTD -xwQ -nyZ -hww -scB -ebx -sNK -vaK -naY -tXO -wTN -exy -phT -eSE -nsd -cuq -hRl -xmm -wIB -wRv -wIf -tmo -uqx -kFF -gqS -gjt -sia -oRg -ptf -lJv -vrb -rSc -ewo -cVo -gaQ -mGM -acr -sHd -srI -kkh -pKD -fxm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(135,1,1) = {" -brz -vOT -vOT -vOT -lWZ -mQl -uYT -lcm -mpb -uKB -evg -nfv -eGw -hGF -aAG -bhL -iOC -xwm -qjg -jFE -rsN -ktM -qFJ -siL -fQc -rvo -tqa -faQ -ilv -oCu -nyY -wVY -xWR -mJG -dto -aDE -pSY -sOc -piM -sGs -igk -vRP -oaI -vhy -syQ -fPr -hTi -oKh -xSf -vhS -hBc -wkQ -ihK -pfb -pNA -vbI -xSH -fZu -kpY -fUy -ahB -mrn -eAL -suj -tnH -lCd -mfH -dIB -tXj -ona -rIG -bsO -eCg -sgB -dTA -fQl -kAa -wTh -iGl -stm -jap -ycg -cXv -qUf -cEo -fbt -oGG -fxI -qPS -bkS -oBs -heZ -kuJ -vZN -gZX -snd -pmA -csn -ppp -gHR -tvW -gKW -nJU -rea -ciU -vmE -hhU -bOS -ilu -caD -uIn -ryH -wdN -muO -tEU -wWO -nYC -kIT -ovi -qVd -leH -fUJ -nbf -sse -itu -fBz -qYN -jnA -tCX -pvG -dRI -gPC -ldQ -vnZ -niZ -pmS -nBb -rtS -xBK -lmo -bds -vUK -opE -pxr -tDE -ljD -gIu -dIN -rSS -bXH -fHU -xgy -ohj -mOU -eny -nsd -piq -kIy -nPm -dhf -soV -fdF -seb -iXQ -kOi -rSv -taf -aDk -ghD -pKy -xYN -mlc -oYS -cUw -oVl -xLJ -bSt -jVJ -imF -nZZ -iOG -ygi -wGR -wqe -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(136,1,1) = {" -brz -vOT -vOT -vOT -xpR -nuz -tcB -jWo -ihs -iVA -uGJ -gNQ -sBY -hNV -bVO -qny -wcm -dJv -bpr -rTA -tME -oPp -kqO -qnq -eAY -oqB -qWN -lAo -aDV -kwx -bIm -jsn -sWT -qSx -mzs -wUq -vLl -dUT -iBp -oue -xcd -dZr -kJL -hLG -gVp -fgi -ryz -vSs -hwy -geF -lAq -fAM -ejK -sGq -oMm -ooT -pWo -dhL -pul -tom -bwD -phJ -ktu -tNf -sCq -tjZ -uNx -gWw -mzt -gnL -atQ -nFc -doN -hgC -pUn -iVI -beU -egg -iQm -qkL -aaE -njR -qsB -bGh -sSI -iUa -tvi -qZU -lie -nfG -giw -fHk -wCL -aEM -aiy -hfx -lUS -xsY -wyA -wqy -eTI -fhW -rQS -yas -kpW -iqz -jyW -ejA -ofR -avN -ffj -kLQ -lUa -uBu -aNs -eve -kET -umN -dfC -iDo -nwc -eOC -hyJ -vpY -bfW -qSM -wty -jkN -fwV -kJd -nca -nbP -vae -wXs -tnK -qsn -uWY -hQK -bIO -pcw -moy -iTn -mRM -uRD -vCL -jKO -bSY -sIm -xol -voM -bbP -wiP -rRf -hsX -tuu -piq -yhi -lJK -psM -hJr -sbN -kEC -yie -swP -mHB -mCd -uxj -xXj -mzM -uCe -jgX -tIA -iaz -bYo -gSG -rPp -iAN -cMi -gCn -vWA -mKK -jzc -eqI -smZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(137,1,1) = {" -brz -vOT -vOT -vOT -jkv -pMV -qAP -ktb -two -lTt -lJN -bMg -apQ -qdt -rFA -dJq -jfj -ctd -pjw -xRX -jBB -glx -uQN -kIK -nwa -fVi -gql -iZu -uXD -bcD -mOE -tdj -rcd -tup -hfI -oWU -uLW -lRt -osA -cmW -lRt -ruE -ruE -sHQ -atF -dck -dVH -cFS -hGP -qrg -ihF -xEp -hUp -hFp -rnQ -uXe -sHO -pSm -nOh -fbn -kqo -kYo -djN -mej -pDS -ciY -xOV -cTx -kNj -hJI -vnu -jah -uIs -iTd -mqs -fVs -rNB -tCu -pri -xvD -acc -eoi -qxK -noB -lXb -fXf -auP -tbR -ulA -ggO -rnS -xHS -eGX -svI -oBI -xuZ -ogJ -sve -sCy -oaZ -rMM -qEg -vjv -wKC -oSr -cip -oWn -arw -tbv -gID -iZO -iWf -skA -psc -rXg -geD -lLN -fEA -fod -pJt -guo -dGR -wzc -uoH -raC -iPA -fyY -weh -keq -gLF -dLi -twL -cBF -ubo -rBd -nyi -wtt -rzY -jKh -qVG -dqs -dkf -rZp -nKj -dik -xhX -fkW -gAs -xDc -tla -oLF -mRx -ptz -xgb -bJM -yhi -vSF -aaR -qIS -mMs -xMo -tyU -pcV -eIR -fJj -rko -nwB -bTA -pol -fSd -bKx -iml -nvJ -bJS -dPE -hLX -keD -era -dVF -mpl -ehz -piI -iMQ -snO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(138,1,1) = {" -brz -vOT -vOT -vOT -aQl -dNa -elf -hbd -dsl -vTa -kIm -kle -wOB -bkt -idy -iMp -qPg -cCr -ctX -pdG -gIo -iDr -nMC -sNZ -uRH -fSo -fyb -swV -dyq -nTh -hpm -xER -oaT -fiH -aqR -wlS -ctI -cVM -lKD -jVd -uLY -kTX -ipA -kqL -lpu -wTv -vKg -amU -fZF -gOH -vnT -afm -nLz -gJl -oWX -dPR -uhm -nEg -ohs -jea -poD -xyU -ieo -bKw -vte -dhr -txj -czw -lWM -svq -cOr -oUm -emH -fRa -btL -cYM -gzl -tnS -mqh -vaB -ktC -tjV -xrL -vOT -rkT -pHq -xdo -aZb -emr -mzp -mJE -ygm -jKt -jcu -clJ -emG -onL -uZz -lHz -ieH -tzU -oeJ -rds -hrE -kIo -nOF -und -sZt -uvQ -iJZ -sno -jyJ -jgm -kWv -bqf -qdU -uXv -muH -wmZ -oDX -ofh -aOK -iWJ -uMJ -iPM -hEq -txd -pNB -hoq -gnD -iVa -xzJ -gfF -rij -ckE -kfD -mtE -oen -lLO -dkQ -sSC -ava -lHj -loR -pJN -hGW -jrM -uOI -mhA -cuf -cXS -aCc -asF -lcp -wXA -eSE -lXC -pSW -xHb -gqu -nnn -kUr -hoH -bXL -iCj -dew -vtA -jMK -cjC -dOM -lnN -bYR -msR -iZq -hSn -igW -dHz -vIp -bnr -tmb -vWi -wHU -otK -cwc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(139,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(140,1,1) = {" -brz -vOT -vOT -vOT -asn -hqd -kdy -iyk -mfV -kEI -ejY -lLh -oTz -cME -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hvM -vYa -aes -trI -eFi -xWi -tsa -tVS -whK -dKO -kyo -ttv -skM -dBU -rkk -poF -tsB -uAN -pHJ -qmW -cjZ -ydq -pEe -cWa -xcH -gco -qso -sLe -bSq -kup -eBw -fXA -vkV -wnH -rUB -uYI -gxS -uGP -kIg -bbG -kwU -ujN -jxS -dyO -fUB -htY -kDC -vDD -wqM -qSE -nvT -kKr -lmi -syE -wHD -gGJ -nru -vOT -wJM -tvl -gyU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(141,1,1) = {" -brz -vOT -vOT -vOT -izb -pUq -sIq -ohG -cTb -lSC -die -ePc -iTH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vxw -sgV -nZc -dcW -vOT -uBp -kFG -oOQ -hXU -pph -eEW -iGA -tsq -nWY -geo -obQ -dwA -pUd -tUh -wAA -sUq -lMF -usz -jui -gHH -xXy -cGK -lww -xqc -bZg -kZl -tUx -gLl -oBa -fGi -wAq -fsz -jSV -hZj -bRK -dAU -qIU -mve -rLa -sIX -tCH -gYc -ade -nno -kUK -dyr -oxT -dar -bFn -nzc -kuX -gXq -vOT -ucD -tmm -vbK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(142,1,1) = {" -brz -vOT -vOT -vOT -sKI -qLj -iqd -fEm -ruJ -gQs -mtG -hmw -dCB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jAY -hEn -vsh -ccx -qYh -tGr -wlz -bPY -lyk -lMU -dCy -xZW -wAW -kqm -enC -tds -hFS -ceD -giA -cWz -eVr -gpE -sWF -vrn -klz -leT -tEQ -tDG -ecM -ewC -eDA -gTI -xGl -nXM -lRr -rVE -gud -xIa -ikp -vUm -vjO -jPU -nol -xZK -jnw -kzQ -nlm -ohH -dyA -sGH -bag -ktN -lZK -pMg -oww -oqD -axV -vOT -ace -rMV -vbK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(143,1,1) = {" -brz -vOT -vOT -vOT -aFU -sJi -tux -dbq -vMZ -qcm -lSK -jJT -iaT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vwm -nwp -rBP -iJh -xfh -otB -loL -qAj -pmb -kri -aeQ -czb -mHz -oWg -lKh -sdG -feM -aqe -eKR -xKm -knG -sxF -iXa -sQX -exA -ojn -wnk -tdi -cab -qDt -fxB -eDW -pIi -mIN -iPW -vIz -nYP -tdJ -wad -kvf -sfQ -gge -jgN -jXC -aDv -gwP -gLI -yaR -mth -apZ -aNe -djt -poC -kwm -scr -wWB -wte -vOT -gxO -bbp -vbK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(144,1,1) = {" -brz -vOT -vOT -vOT -rVQ -hpd -lQb -che -xhR -jjK -vlu -vqs -enp -vOT -vOT -vOT -vOT -fTw -vOT -vOT -vOT -vOT -vOT -vOT -sNx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eTZ -goL -ozk -qWX -ech -pVk -pdF -vjt -sWo -pqQ -hVP -vlE -wYZ -lhm -kam -gTu -bls -sul -wgz -igG -eTF -ljL -bVZ -npJ -tES -gEd -pxl -olb -fcw -gpM -eUU -cPu -aTZ -suw -pJi -ucN -dcA -axy -euj -wNT -cQE -qMn -laI -uac -asM -kAV -pzx -dGE -uZn -gce -gna -tPi -mac -oOL -fMG -mFq -lAi -vOT -jjW -qOu -vbK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(145,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(146,1,1) = {" -brz -vOT -vOT -vOT -lBq -pmz -qQP -qCC -pDO -hrO -tHP -qyj -ddy -hPo -dWF -oYT -bwH -rgY -wvt -vVn -svV -uAD -xYe -rnG -xeb -cbo -eCL -vml -qAa -fcS -gBE -vfr -hSt -rJl -iyg -fPz -mQw -nVr -uvF -jDH -cgu -mPi -cEU -iBI -utN -cXk -gQi -tWE -aXa -ovI -lhX -txx -oQm -pDX -eQW -tNZ -nql -vyf -edu -fEG -bYj -nfW -gXb -hvn -mpC -ueA -fXy -rkA -vNm -hZz -qhH -veo -wFS -gjH -jwT -irH -pGH -mED -qpX -bhH -kDL -qdJ -mHS -sbI -nlP -jRF -het -nIo -euS -ylD -meK -vYV -evf -jSi -mcu -xaj -rTC -vQP -nmX -hoA -rRL -faw -kGY -eas -oxC -mOF -iYs -xgC -qef -atn -uPM -wqh -okd -rJU -voE -igN -lkj -iYK -hEe -wYg -wzn -tAc -ofp -ciA -ses -cRT -xpI -pCp -jHz -fIR -hOT -ryu -tAf -tzb -tOF -qHS -aoZ -vtw -cnR -hXk -kUL -kfB -kbI -jzS -jDY -dZm -qhu -fxL -wiT -fNH -pBC -kyS -ruy -owD -kCQ -qKG -jnP -rDU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(147,1,1) = {" -brz -vOT -vOT -vOT -gSE -ajr -rKJ -xKG -pGN -gpu -xqI -cKf -mnp -uJi -jcQ -aHB -lJI -puM -xMs -lQJ -fAd -kRF -kUD -nlW -qRa -fTw -fQT -fut -tdY -trQ -cWq -gTD -rEc -eeW -nuY -ueC -bkv -gvF -egn -hgB -pIH -clx -kzL -ppK -vsb -rCX -cBx -mwf -oBj -lwf -klX -mYn -beb -lBW -aWF -kFy -hMj -wRU -ujv -oJn -aCs -fpN -sWk -hFd -fJJ -lHp -gNw -rJu -ijs -lGd -sQn -jTz -mch -wvu -dbE -aRf -lOZ -sWR -bSx -huh -lus -pth -dYT -mgn -hUP -chZ -xzl -lfE -gcB -qpo -luc -fyE -dGU -nWi -eRF -oQy -eMw -fCx -udJ -kmM -jbJ -dMu -kNn -feq -xjT -lLv -mtw -mJP -nig -tHO -ovB -nMl -yer -rTD -rMS -htt -woU -dxu -hkI -bHE -nqv -hBW -xpp -pNs -ikQ -klv -rVB -gGT -oZk -orv -vik -ibG -gOI -ltL -nQd -irN -xDp -tgJ -uic -dex -bHw -tby -oNK -uGn -fRX -llX -hFv -gEr -fpL -uAj -hKa -leg -lqb -aJo -bPw -fae -nwy -vvh -gQU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(148,1,1) = {" -brz -vOT -vOT -vOT -hHD -ltS -vUa -pOB -sen -qab -uAu -lQl -lwq -yki -reZ -npq -rZQ -udU -hst -vva -dgg -bJi -nLF -mqk -hKF -jfs -pvm -soc -rUe -sJU -mKK -qiL -oFZ -sVd -vKJ -iDS -nMU -kDX -rYL -xsA -uLL -jKU -occ -eco -caW -rQa -rUQ -tFQ -nOm -dyR -uPT -pEN -oKa -llr -kas -xeo -vkS -gjZ -nfm -lxp -fkb -vnI -qbx -kdf -nZw -tUw -hQk -kTr -pLy -owa -vzL -hQM -joG -bjy -dGJ -eso -lZW -qss -eoh -rFa -wAc -seI -oSO -igO -sxc -cml -mqa -aVZ -lMu -eju -cwd -wep -nHK -wcw -mYA -rrR -jtN -brJ -pBl -gkc -xJA -reX -rCP -tDS -cet -eVk -oIm -wQc -tbK -old -sOo -dCg -xxV -ttL -yjI -dOq -knI -xKM -fOt -ssq -veM -dfO -bZT -kHh -wdI -sAF -qlz -aer -qcU -bWx -cvF -tPJ -vbA -dRM -vcW -qoG -hpK -oVr -jqo -vxa -ilw -gRJ -bvf -lrN -aMx -qSt -lvc -fED -jUs -aWo -lZG -pdV -vsC -dOk -tQU -tym -aRW -rjm -xfR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(149,1,1) = {" -brz -vOT -vOT -vOT -gdv -xkf -pfa -bIz -wpd -har -uKw -noG -rqe -naT -sgK -eqn -isC -jpT -iMZ -jtq -jKk -mcf -vXm -nVP -nnp -rnC -udM -qTh -qjo -vRJ -wPs -xsV -kDt -ftt -ntI -fVT -hWt -lGo -bQK -mGj -tiU -pkz -kuO -xcc -wbE -okm -lEp -qWI -hBh -gei -rcO -fIn -uRT -tdV -ddu -kYq -uWg -heH -oeP -gIc -cOF -kgd -mCH -lyG -okR -rcP -hzs -uRQ -sJy -vOe -jvD -fjm -tRr -ePk -rot -sIx -dmN -eZk -huz -piF -mgv -iDG -pmZ -clo -xZE -jyu -bpd -anu -huN -akP -uPx -gTx -uUp -xHn -xMz -hnW -uOj -jGB -tQe -cDY -gle -vCs -fdj -esf -pje -vPc -lGq -bzQ -jIv -mWw -ryV -qSK -fwM -gth -uXB -ydM -uJY -nYx -jnb -pWw -kAk -uva -cMX -oEb -nIE -tLz -dDz -rbJ -opZ -qTW -xek -nKS -auG -tUQ -fzw -fCO -dlS -oUw -wcL -cIa -wbx -reU -mRW -wTs -jcZ -pZH -gCw -oWK -iVl -pRo -xAl -uud -aMZ -sPS -qbJ -lmW -hqc -otF -gZK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(150,1,1) = {" -brz -vOT -vOT -vOT -mqV -eLO -vyI -vjN -blr -pIN -iZt -gzD -gzb -gHz -xXV -bpL -wiF -cOS -jjf -qxJ -rHg -cNp -fJN -uOd -vgS -cyx -tjS -kkb -lRh -ocB -ocP -vuh -wgu -fko -xDX -xKQ -uSj -uMw -wCK -oHT -ttB -sWB -bzC -jAO -kob -rcq -hYl -uAk -pus -tCy -gTl -hnP -kBL -gKy -xOo -hVU -aBK -vDC -mNs -cQs -fQu -den -wRm -pPk -dYV -ezs -ltO -ebQ -boa -izM -slf -nLy -awM -ozc -jcU -tcN -eCd -hRi -cCY -oEF -tIY -wak -sYp -xSL -hbE -bZk -roj -dra -ggB -ayN -bmW -mjY -nry -wor -vAX -sPe -eZT -vLt -amj -rcs -ttd -vJa -iHC -ntF -ewH -wyS -ggU -pha -uMz -wrZ -ylr -rqf -nPM -sRX -eZU -oGo -oBc -rxj -hra -wqt -nvt -dhN -rSw -mkl -sEh -hjW -iwt -iQN -uOC -pJm -bnh -bjD -clD -vvL -xTu -mwV -hcU -pCq -hAP -rjT -vhN -rSg -vCW -gPV -hex -sfu -uUB -ilY -inn -tRv -uDk -bsA -xsU -izJ -uDY -vYI -ceC -hZJ -wHA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gdQ -was -vOT -eNG -vOT -kYh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(151,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ppe -piv -vOT -vXx -vOT -pDs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(152,1,1) = {" -brz -vOT -vOT -vOT -wZQ -dAp -nzl -sRT -syV -nRu -hYm -yaG -kgm -shu -vUA -rCe -xOq -xGv -mqe -fHW -xJB -bsa -cLB -moF -isF -dab -tUt -iBb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -chA -sCf -fvq -jwx -mYB -bzU -bbu -cfR -xGd -sGO -nau -etr -bmZ -vOT -vOT -kGn -xKX -fid -tpu -dBk -vLV -kUI -xEN -oCC -cvJ -rvR -pJu -ijp -gSW -iZG -koq -syl -qyX -wYK -rZB -jni -jbA -vVB -bwm -ubt -jBF -rHQ -wNa -rnA -bMh -hUf -wiL -urp -tEK -hLU -iTi -hsr -vOT -vOT -riT -wvy -dHC -wDz -koQ -bcT -suQ -dof -aSS -hve -vSp -bKY -vNG -kMi -nyX -bGP -jtO -lXT -igL -ueX -dMK -sXQ -vOT -bne -aPb -qKv -arO -gZO -wVh -mFs -xlc -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lVN -fai -vOT -qZt -vOT -hIy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(153,1,1) = {" -brz -vOT -vOT -vOT -pTn -iMO -uey -jXy -tdo -uVa -tLZ -uQj -sXM -sIe -ung -xAk -bth -elJ -jTw -lrI -trl -gzp -nXh -qBy -kpK -fcJ -ciw -jmH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -caC -rXG -iZX -odX -imq -fsT -xsD -fiA -ppl -npV -xnX -qpQ -rIm -vOT -vOT -mzl -ndb -lOc -soN -tyO -gTR -fiS -wgF -lHT -sBs -hOC -eSj -veP -hlg -xyl -qeB -sYj -hZN -wux -chJ -iiL -iEO -mkv -vfV -kAP -sTu -bdZ -fRx -xVs -cyI -wHY -xnD -gOJ -uZO -bdY -cfQ -vOT -vOT -vOT -cxb -eDR -qei -jLb -rFo -qQa -plT -aMG -jfR -wwy -ydl -mBL -boo -vHq -jEy -bdx -hXu -aHf -xyr -coG -ssu -heA -vOT -aaV -orJ -fdC -hOi -iFe -hqx -soQ -nnE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wfJ -nbG -vOT -cXX -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(154,1,1) = {" -brz -vOT -vOT -vOT -qRg -hMc -wBT -wGs -vzZ -sIh -mdF -bwM -sWl -pWR -ekm -eFC -oBD -hDo -pDA -wvn -wVP -vgt -fkp -jNr -lNm -oFe -uPp -jKM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xFD -xvs -cGh -sEw -xAc -rRB -nxT -czj -gWg -upD -cUA -uVi -amV -vOT -vOT -tNx -lMr -jby -jeu -iKl -qGy -bbn -xGs -wUr -cYN -lCf -mPP -fiK -ygy -nvC -jgu -nkS -eFK -grL -fVM -hDb -aOb -mwM -tXc -mcB -hLc -hNL -xCH -gmf -lhe -hyO -aZE -qce -sog -iTJ -ejp -vOT -vOT -vOT -tei -iTc -bJD -wxz -pyK -tbA -bBM -woY -cIB -dnm -hDC -aBP -koF -fBk -oGm -sHi -pLx -qeI -mkc -onh -sYz -eBg -vOT -hhp -anM -wcZ -jey -ptL -knO -cPB -koy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kFx -uEw -vOT -kIN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(155,1,1) = {" -brz -vOT -vOT -vOT -uKi -kmH -psS -ezw -ooJ -ctV -dmx -jZz -tIy -xHM -wWt -sdj -bXx -aZa -tJC -uHL -xNN -btY -ykd -tzI -uEd -gXv -mQT -nJW -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fvC -tkH -lDf -hHS -gHj -mxD -gFW -cJh -fBe -ted -uiR -hMt -vOT -vOT -vOT -eVe -mxZ -aMz -rPJ -elU -ixY -kwj -kRo -mvL -ffM -iuw -iRl -bcf -xia -eYm -fhN -cJD -sUn -qGR -ojd -aOX -bzH -nCs -sZs -qBk -hhq -lcQ -qad -rZE -buX -wtu -cBi -qUU -wsY -seF -mOI -vOT -vOT -vOT -gfU -swN -leD -hOm -xCz -uEk -bof -siy -rQc -cqz -nXK -wcD -mGt -hnz -pdu -xQi -rEj -iaV -kMV -ddT -tEt -iBZ -vOT -ouw -tpK -oQD -wDF -fuw -gZY -foj -iCg -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qEN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(156,1,1) = {" -brz -vOT -vOT -vOT -orW -qDJ -nWT -xKx -gbh -uCj -xPK -rPn -azS -aju -mAB -vZM -kRD -psR -gtI -dVu -jWY -bPN -lAu -umV -baU -kHA -kdq -pKz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sBo -lhl -wQs -tUv -dpa -nAL -nXr -bsX -xML -bOF -lpj -ylH -vOT -vOT -vOT -kfL -cDu -xwc -pcH -tPL -fZx -pYM -cPG -eMd -vgK -tzf -qMO -fUk -rSo -jxX -fEK -aMc -mwQ -qWi -lrp -hWd -xbS -xVh -mIM -yhm -jLR -nGL -pXb -nBE -kAj -thN -bAo -ioW -aAk -wRT -jzh -vOT -vOT -vOT -wVW -kkz -hEH -irT -xYO -iId -nLx -icY -vBU -uIQ -oPH -wJT -jMP -ghB -oyX -hNa -qMz -pDr -eGR -xlF -eht -vOT -vOT -wQN -lPO -ndM -lxu -hrp -lkd -smI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(157,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iNU -myx -jzd -eOx -jNh -fIK -bOm -xcr -dRQ -qDr -fgd -ngO -vOT -vOT -vOT -atl -ran -lTm -ljo -wKb -rvX -mFj -ioY -reI -nER -pyb -cvq -wzL -kqz -atp -epN -uLm -ety -xkR -vEh -rXB -iin -fLb -qsT -qnG -ruZ -wKh -uKq -taE -dRl -yhD -eug -hYB -eiL -sFo -dQh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hIy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(158,1,1) = {" -brz -vOT -vOT -vOT -nxx -quS -vOT -vOT -vOT -mwD -vOT -txk -wzu -hig -uXz -jVm -fKg -rBM -nRw -kkK -fCP -wxc -tbY -wFM -opv -rZy -pJv -xJs -tMV -mHQ -wMR -dsI -jFn -dBj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xXZ -vOT -tHP -ibZ -dfJ -pTS -dJq -fwM -raK -pAj -vOT -vOT -jro -tGf -vOT -uSH -atu -uNS -cBq -nKO -apr -vOT -vOT -vOT -vOT -vOT -wbw -lkC -bEs -xcV -cNa -dqJ -fGW -erz -vOT -bfs -vOT -vOT -vOT -vOT -brz -"} -(159,1,1) = {" -brz -vOT -vOT -vOT -rdI -eYn -vOT -qpY -vOT -aGs -vOT -ufE -qYs -vKT -iHN -azA -keA -wwl -btG -kSG -meB -kwP -hjm -sMe -mXL -wIo -jBY -aRa -eRc -rru -kxN -bnV -aDL -crb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kOC -ibZ -cDo -sgL -dJq -fwM -evm -tqy -vOT -vOT -vOT -vOT -vOT -uSH -atu -uNS -cBq -nKO -apr -vOT -vOT -vOT -vOT -vOT -vVQ -cEb -osM -aBg -iyf -eCO -djF -xVg -vOT -mSx -vOT -vOT -vOT -vOT -brz -"} -(160,1,1) = {" -brz -vOT -vOT -vOT -vwb -qDV -vOT -vOT -vOT -vOT -vOT -pgP -nWh -uIz -tqO -hya -lty -lNN -hXA -fQB -eMI -bWX -kgk -bpS -paG -xZS -ntu -fDT -eLa -flz -gHh -cwe -nJJ -ktF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ngb -vOT -vOT -mzV -rCK -laE -hHD -wcm -eGR -uzM -cNl -vOT -vOT -ngb -vOT -vOT -uSH -atu -uNS -cBq -uvz -apr -vOT -vOT -vOT -vOT -vOT -rPK -ucz -lCr -ecZ -oqg -ikq -vOT -vOT -vOT -nJn -vOT -vOT -vOT -vOT -brz -"} -(161,1,1) = {" -brz -vOT -vOT -vOT -jzg -vOT -vOT -vOT -vOT -vOT -vOT -vVa -bKT -iYI -seh -bbW -iiE -mWU -sXF -inD -snx -sDw -vYd -dwK -wpS -yfG -hla -iIl -sbP -hCG -viZ -kTO -beS -uIs -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gWP -rCK -lTt -vOT -sNZ -eGR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uSH -atu -uNS -cBq -fJG -apr -vOT -vOT -vOT -vOT -vOT -qhB -gWa -sQB -ffy -uSa -uaX -vOT -vOT -vOT -lWk -vOT -vOT -vOT -vOT -brz -"} -(162,1,1) = {" -brz -vOT -vOT -vOT -ulr -vOT -vOT -vOT -vOT -vOT -vOT -bUD -upM -ugv -cOz -avI -hVR -dbv -jES -ezG -pqP -rED -bbZ -dDm -bGJ -bzz -bOz -uFC -xlD -cLk -mky -geP -pIb -emH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ohf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uQN -rjM -two -vOT -sNZ -eFn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pPC -rsj -jKN -uXM -qQO -wvz -vOT -vOT -vOT -eBJ -vOT -vOT -vOT -vOT -brz -"} -(163,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -luq -vOT -vOT -vOT -bJV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ngb -rjM -hVg -vOT -sfQ -eFn -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kTn -bEq -ucS -mUo -loJ -mwx -wbI -xPu -vOT -mqq -vOT -vOT -vOT -vOT -brz -"} -(164,1,1) = {" -brz -vOT -vOT -vOT -nYs -lFt -ojS -nwM -nGr -nPW -gcR -kfN -gIg -ptR -sBu -wOp -qGF -aUk -fVh -vkg -bGX -kVs -rUg -gbr -agT -vLP -sph -pwT -vFq -aix -sBd -eqD -iwL -lWo -qbT -qse -oKj -jav -wER -dRu -lqX -jnR -cgX -xVD -oUP -bNV -htr -xVu -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -joi -mDs -nuM -gOj -cxJ -gzT -nrL -wib -pqN -dgT -vOT -jom -bBZ -eZO -jJt -dPN -ohY -sDc -mdG -vOT -svU -kTJ -wjH -iAc -cPN -cQg -jTv -kRA -eja -dGx -aNx -keT -bJT -bWW -lKB -knQ -xHm -tnO -gpy -lev -qKe -cIX -xvd -hXy -mhM -mrI -iPl -oHC -mGH -soq -bdS -gvy -tye -ukx -kva -mkb -gEy -fJZ -nBD -xwU -cjk -iwm -oRm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iNZ -vOT -vOT -qrC -hyP -hyP -dzF -mMi -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xwl -cOS -vOT -vOT -vOT -vOT -jro -wZY -vOT -sRY -btQ -gZD -dpu -ted -cEm -vOT -vOT -vOT -vOT -vOT -xhs -mCY -nFm -ioK -akt -vMY -vOT -vOT -vOT -wGb -vOT -vOT -vOT -vOT -brz -"} -(165,1,1) = {" -brz -vOT -vOT -vOT -hul -jId -meW -lyA -vrM -eCP -jhP -cja -vwg -mze -lcr -lpl -nRC -gIO -aLf -ejJ -fIY -ntB -dBx -miE -ydt -pOr -nVc -mRa -xkI -hFY -qcw -pej -dlM -cuE -eUr -fwx -atP -iiH -lHD -cup -fmA -sfc -iOY -ltP -uGC -jzG -qsP -rwh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iAE -wQU -sYJ -lLB -rgq -kEw -ggw -tLH -fNy -qlT -vEi -kfQ -mAL -hBa -jLp -aNz -bTL -xZu -anO -fuh -eNS -vGg -pTG -qMP -pkZ -cis -wIN -byE -igt -xat -wDn -fJR -dpA -ueG -aHs -wgA -aYv -duL -kPU -qlb -nPw -nxa -jQf -aNW -jiE -uUz -bgr -sXG -qlq -vLc -vkY -uvm -bWQ -uzz -aPg -fPi -fFL -hEC -uSS -cSA -bPn -pnu -gSM -vOT -vOT -vOT -vOT -vOT -uKc -gKZ -rOh -ffa -kny -wHf -awJ -niA -jXS -ujD -ifE -dTn -rit -fdl -fBK -pDf -pKd -rsp -sWZ -jPx -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xwl -pvm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sRY -tBt -gZD -dpu -ted -jGK -vOT -vOT -vOT -vOT -vOT -mdI -fHc -men -rgQ -sUP -jIh -vOT -vOT -vOT -oZr -vOT -vOT -vOT -vOT -brz -"} -(166,1,1) = {" -brz -vOT -vOT -vOT -tVN -knN -cJt -xmf -rTT -aDZ -obF -mWo -jHt -kmC -cid -wHT -xqi -cAv -sFJ -vMC -upZ -qZa -gZH -wCH -ptI -paS -wzH -nYf -oZw -dQj -vwq -dCR -upo -hUk -gSx -cnE -imL -cAF -sVL -aKZ -gIG -dgJ -rOD -nwN -dCD -pUR -bBS -fgk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -aYh -bPR -qeD -vOT -aPj -mPF -kmR -iwK -tFj -vOT -nCf -sZi -ujX -jFj -mQP -hVe -rAX -wdR -vne -yha -skY -htQ -jIr -egY -vnv -jDU -qKq -kwg -qpe -lwY -dDE -reM -ggv -fLf -sjw -iBT -hhH -vjb -rcU -qPd -wxa -hEh -muL -eOc -ily -vqD -gxD -lnv -xfk -vup -sNM -iBX -kbC -rRN -afD -bzB -tzX -tEx -qDM -hAJ -pkk -dnF -ayS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bzC -eDR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sRY -oJJ -qhF -dpu -ted -qgf -vOT -vOT -vOT -vOT -vOT -lWa -tNd -qmA -xNU -gZx -ewM -vOT -vOT -vOT -fiC -vOT -vOT -vOT -vOT -brz -"} -(167,1,1) = {" -brz -vOT -vOT -vOT -nIX -jEQ -uFp -pTq -wBx -aDR -pba -iaR -xXC -jtC -pjU -bNx -mmv -lRX -gQg -lAA -dMQ -kLx -hBw -jAU -sCH -dSt -cgH -uHS -ffE -tiP -cLh -wKM -pzK -xWq -vOE -xts -haE -hXD -ixP -dgf -uYV -rRu -kHp -qSC -eMn -fPy -vFd -hSH -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jFH -lKU -uhn -vOT -vuI -tfl -kTQ -dYm -wjB -vOT -kNE -cqb -vhZ -vVs -dfE -aNw -aNa -xJm -cxz -lin -dHr -kqF -uIf -fmy -tFl -rCK -hIA -gWc -vOT -pqo -jCj -hVd -iYa -fsl -aIE -qJa -qQY -jGE -alL -vBp -ogb -klI -bSp -qYe -xtZ -gCX -lmf -xGV -moX -vVu -wNn -gfZ -oPM -tpq -jaq -xJp -gru -wTn -oIq -ddh -sjt -diH -xMV -vOT -vOT -vOT -vOT -vOT -vAj -wii -gyX -jkk -xuw -eCk -gpm -xpl -iaj -oLB -los -los -aNS -aNS -qsq -nIJ -dhn -tUZ -cLb -uSO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -sRY -fPw -qhF -hDx -vOT -bbg -vOT -vOT -vOT -vOT -vOT -jKD -cBE -hmm -qMD -psL -jNF -jEe -ghj -vOT -sRM -vOT -vOT -vOT -vOT -brz -"} -(168,1,1) = {" -brz -vOT -vOT -vOT -rYv -vOT -ckf -cLD -dnr -xvH -rWL -uio -ibM -ssR -ieS -sfM -bLM -aNX -pjj -atx -mpy -mQD -rAZ -cDo -izR -gbp -pka -ezn -vad -oap -cIH -jtM -iCc -nVb -fQj -pYg -nKN -rzT -rIQ -dYI -kgD -uer -rrd -bDj -lRL -kPK -hUZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nMv -oIJ -nZI -vOT -cnX -dDf -vLg -xxC -hfC -vOT -rlV -jXZ -spO -rzB -sQl -xMi -nxm -kCM -xIb -fwQ -tcm -uTa -sbe -mCG -dqw -qwi -cLy -gJD -vOT -oFq -vMm -bLb -vyO -hYG -nyN -pcs -ojR -qhK -nLd -swD -vOT -sNC -uBy -gxP -nxz -dLf -ptw -jKi -xoK -nOS -slo -sjI -arl -tjb -qyS -eTX -nBW -iid -tVZ -jGA -lcq -cfq -giE -vOT -vOT -dTn -vOT -vOT -vOT -vOT -evY -vOT -jXd -eCk -wfh -ajV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fKB -pvJ -hDx -vOT -bbg -vOT -vOT -vOT -vOT -vOT -hfX -ley -rMp -mJK -vhf -cjM -nJg -tQu -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(169,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -plC -xjy -fMe -vOT -dvX -val -cRJ -dpo -igy -vOT -uUG -jTm -jXP -lOe -vFO -vOc -vIS -kuH -eYa -olq -szH -hZp -laD -lvu -oTZ -vOT -mCo -bFy -vOT -dKD -nFK -xOk -oEt -qpK -uTZ -jDz -kKc -vOT -xKd -rbD -vOT -xHZ -kYT -wZE -hGy -vxt -rxg -bEd -xij -aoU -exv -tMJ -tTS -uFZ -nJE -gBz -jjO -vJO -dOA -ayi -hcj -hXG -fEI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wfh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gtA -pvJ -qSR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wZV -luu -dMO -vFz -fNz -ilN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(170,1,1) = {" -brz -vOT -uxH -vOT -jRg -hwZ -lXp -vOT -vOT -ohD -jvW -pMv -fiM -gKa -cKn -uUH -dmJ -akd -gNv -eMs -vOT -jDO -knD -tKI -raP -oln -fhI -sZn -uCo -emO -rTj -eBu -bmI -ixF -mQc -chU -vOT -vOT -vji -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -xVd -fLV -xbB -pzM -hls -vOT -iKG -omc -xVD -ltP -oDm -rhg -hos -jdQ -mBw -uLX -vOT -nIq -uau -vOT -jqu -xKm -khl -cqR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(171,1,1) = {" -brz -vOT -qsg -vOT -uEB -cGD -vOT -vOT -vOT -qDA -hNv -kPg -ajQ -kak -dyZ -qUW -sWb -kuA -xGR -qXv -vOT -lLw -jzE -fpq -reK -lVd -eVQ -der -tcu -wRs -wnF -tNl -luo -iBj -fKk -vTc -vOT -vOT -jKa -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jhh -trk -rXL -lPM -gYP -oKw -uuG -but -gOT -cBL -qsO -dDX -wEp -hkc -nEe -rxQ -sLD -tIu -vWR -ezU -hHK -sdu -rgT -atC -kSS -ueV -spS -nMa -xNr -jOW -lRm -fes -pcK -sHW -tZf -oVI -czm -cPH -mZq -gDb -hMH -fDC -viw -fwb -iCK -eYd -hZi -rTI -fTP -rdW -bPF -xmn -bZh -xvm -bvx -uvX -lRc -nHa -cbW -gaa -mtk -kno -rka -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pTS -dfJ -jof -hls -ibZ -fwM -rih -pAj -vOT -vOT -vOT -vOT -vOT -vOT -xbc -eTF -khl -cqR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -bke -vOT -iwC -vOT -sAj -vOT -aNb -vOT -nie -vOT -gEp -vOT -mAf -vOT -brz -"} -(172,1,1) = {" -brz -vOT -sZE -vOT -lwQ -xqp -vOT -vOT -vOT -vVr -lij -rcc -qrs -eOf -dBI -eIz -pbH -sbd -pEx -suk -vOT -xIz -hQt -qdM -aMy -xIP -aAq -gsu -kbz -pYI -awN -aJD -urR -nro -qnV -vOT -vOT -vOT -kGZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kZA -pOM -kQz -kcB -dgd -aRB -iYC -rEd -oBJ -pno -dfq -nJv -cSK -osa -ilh -lUG -eEy -ufG -tnP -kOh -rRG -syA -gZi -uyI -lPB -uzu -uMQ -rEI -uSl -oYr -wKq -lsC -aOE -eeZ -nqZ -etn -dBt -gzZ -hDl -blq -cnA -mXf -cIT -mqx -tmD -jnV -tch -fvw -dnE -nve -iYH -bxs -vVm -ruB -fhf -dhS -ixi -mTo -akA -ujg -mQL -xtG -wsa -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wZw -vOT -vOT -vOT -vOT -vOT -sgL -vhO -jdF -kOC -ibZ -fwM -evm -bIJ -vOT -vOT -vOT -vOT -vOT -vOT -bFt -igG -bhL -dca -vOT -vOT -vOT -vOT -vOT -vOT -tap -kIU -vOT -pmb -ijs -pTS -soQ -tqy -mzV -ibZ -dfJ -tqd -vOT -vOT -stL -vOT -eAG -vOT -deE -vOT -flp -vOT -ihB -vOT -exw -vOT -iJA -vOT -brz -"} -(173,1,1) = {" -brz -vOT -tuP -vOT -gol -wsf -vOT -vOT -vOT -dBz -hcR -rcj -tGF -nEd -uMI -dpW -hAK -uIM -aCP -dJu -vOT -gAB -abV -jXJ -uti -bUT -tuy -bOd -pze -jwm -dpv -kvm -dcv -tFR -bCp -vOT -vOT -vOT -dQB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -cLe -mkh -dKa -hPO -jRN -aWs -rtb -pqT -wxW -lGG -ovZ -dFS -qPn -bJl -gyJ -mQZ -hBK -xlo -wmh -jFd -tVT -iub -koG -jsB -rOX -shy -naM -wSf -hYX -jbi -qcx -mrl -mlj -mIJ -xHk -kiq -kWT -tCe -bKS -vka -qel -xMn -mhk -bAN -shz -vxN -sFm -gQn -gHa -iym -byz -wPt -gBt -aqm -cnN -oLN -oTh -lbj -sBV -daM -emc -xwd -jFP -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jVf -vOT -vOT -vOT -vOT -vOT -hHD -vOT -wZw -mzV -rCK -eGR -jdQ -cNl -vOT -vOT -vOT -vOT -vOT -vOT -qhO -cWz -bhL -pSL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kOC -wcm -pTS -ouw -kDK -mnp -ibZ -nnu -tqd -vOT -vOT -pBj -vOT -pxS -vOT -swJ -vOT -dsw -vOT -ghi -vOT -pHv -vOT -vOT -vOT -brz -"} -(174,1,1) = {" -brz -vOT -vOT -vOT -oCF -fDy -vOT -vOT -vOT -gOh -sdQ -fpZ -jeW -cke -aDh -lqR -bpy -eIY -pmf -xpg -vOT -muf -nUN -xel -lyV -jlO -wuC -uWq -ayE -dCf -hel -dvb -cxg -mSK -uwI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hIc -fiO -euU -ail -tMq -ddM -qjb -ren -hqs -aYi -vcv -lGa -vnH -fHQ -fNe -isE -pTU -kXF -rme -dAE -tHm -flY -dIF -dop -xuR -fSL -xxv -nwZ -aUV -ePF -jIe -kne -izW -lBg -oBh -iQn -ekV -miG -ehR -tVu -igQ -mQm -iEE -uMC -qLd -xOn -bzO -uKJ -kCp -fYz -jFz -pkf -pJp -wAB -qxx -ptZ -bYP -rtQ -jpw -mbU -xhP -eZl -ioC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -rKf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -knG -ntB -ubX -gWP -rCK -eGR -xVd -bvh -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dik -pmb -pSL -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gWP -jki -sgL -cKf -kDK -bIT -ibZ -vsN -evm -vOT -vOT -cJc -vOT -rlu -vOT -xky -vOT -cjX -vOT -aLi -vOT -xSJ -vOT -vOT -vOT -brz -"} -(175,1,1) = {" -brz -vOT -vOT -vOT -xkD -dVj -vOT -vOT -vOT -dkY -gnA -jNn -lgG -lRI -caa -lMw -oly -fjk -aMj -vOT -vOT -kBy -krY -hqf -cfo -ndN -eqi -miv -caj -ydI -pRt -krN -qYa -iDE -utq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lpI -jjI -xpn -azt -oBe -vsB -mdp -fMQ -kzS -tnJ -iFk -gPN -mOh -qbW -rvp -vOT -gMK -hEs -qQg -xBP -kSY -tXq -vos -rvn -iTp -rqW -jJq -jRI -miZ -ceP -vuO -djR -xtj -tOO -ocD -nPk -avV -olQ -jDM -qlB -ewq -vOT -yjH -srK -uih -tsR -rSf -biW -ndj -sCX -tXP -gNO -gGi -cme -hRr -pYR -fnh -srh -mpR -ueK -dsQ -eBn -aHA -vOT -vOT -vOT -vOT -vOT -jAD -jod -vhO -itl -vOT -vOT -vOT -vOT -vOT -rOh -vOT -vOT -wtN -cWe -vOT -vOT -vOT -fPF -cDo -fsk -hVg -rjM -eFn -fLV -vOT -vOT -vOT -vOT -fVf -lGK -cZz -vOT -kfD -pmb -uQV -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gWP -hVg -sgL -jqu -kDK -tHP -ibZ -vsN -evm -vOT -vOT -bQY -vOT -uYN -vOT -iGn -vOT -ycQ -vOT -nWN -vOT -bkf -vOT -vOT -vOT -brz -"} -(176,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qaG -xBd -xXi -vCF -tvb -agl -rNm -xHC -sth -vOT -sma -rZu -xFN -pXq -ddQ -vOT -buo -kcU -aXm -hXz -vNl -fsc -ejf -ozz -xXe -iqu -mdN -itt -aYl -vOd -dKg -apd -fJV -ryY -kVZ -jjj -aRJ -htd -vOT -iqE -kFX -vOT -yaE -gDN -ohB -idI -rlK -jDa -qEo -tOe -hbM -ghp -gaT -pfL -oGb -hbK -wLQ -fKt -dsC -vDp -dEI -hdC -nxy -vOT -vOT -vOT -vOT -vOT -wac -uKS -vOT -opo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mau -eJb -vOT -vOT -vOT -nUQ -rKJ -rCZ -mwr -rjM -eFn -vOT -vOT -vOT -vOT -vOT -duH -vOT -duH -vOT -vnZ -cMX -pIN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -svV -sNZ -hHD -qhO -mwr -tHP -ibZ -laE -nUe -vOT -vOT -liu -vOT -spT -vOT -tlf -vOT -fRM -vOT -nSY -vOT -krp -vOT -vOT -vOT -brz -"} -(177,1,1) = {" -brz -vOT -vOT -vOT -vOT -kbO -oBx -wnz -qGG -jXW -xaR -nKb -iZT -jvL -mIU -kWy -oUU -tgd -pEJ -sqn -vgG -gBQ -iKG -omc -hmX -lEc -noM -pio -yfC -raj -cjW -aSf -smH -aRs -xke -jJX -qRY -oYC -cXm -vOT -kiX -vOT -hlN -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -ltR -vOT -npf -vOT -lUV -vOT -vOT -vOT -vOT -vOT -jkk -vOT -vOT -iBc -dbF -vOT -vOT -vOT -nUQ -laE -pBR -ijs -qcs -cOS -vOT -vOT -vOT -vOT -vOT -moI -lGK -rzs -vOT -cPX -vOT -mnp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -svV -sNZ -hHD -eFn -dEr -xwl -ibZ -laE -uzM -vOT -vOT -snM -vOT -vOT -vOT -oBP -vOT -sdo -vOT -unf -vOT -qKC -vOT -vOT -vOT -brz -"} -(178,1,1) = {" -brz -vOT -vOT -vOT -vOT -xVo -vfO -jfc -vzb -oXT -xwX -eAA -kIw -lyq -lMX -aOu -dGh -jFe -lFr -uxP -gMs -eCI -ngb -xco -uBV -bPr -pwS -pbp -wAa -vMj -nqG -mCz -fhr -ilE -xzu -lZT -juj -ixA -gnH -vOT -ugw -vOT -vBS -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mwC -qbo -sok -kGB -xsv -bxB -qhr -opQ -iTw -qkT -wsX -nwS -lPz -sCu -lhH -jMx -uRR -piV -gCc -uaZ -srM -xTO -tcS -jjr -xnG -fjY -rof -xrC -ddB -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fTI -xHP -aCS -vOT -vOT -vOT -vOT -vOT -vOT -kUY -woG -vOT -vOT -vOT -nUQ -lTt -uvn -dJq -muU -pvm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -keq -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vVn -sNZ -vOT -eFn -cNl -xwl -rCK -ntB -vOT -vOT -vOT -ijz -vOT -wAg -vOT -nEj -vOT -oeq -vOT -fpc -vOT -vOT -vOT -vOT -vOT -brz -"} -(179,1,1) = {" -brz -vOT -vOT -vOT -vOT -wwe -wHp -gje -vfx -caE -iJW -rAM -mKv -gnV -uOJ -oQd -cEd -wVp -mAe -trp -qAE -oUi -jGJ -wlc -wKR -rkh -cqI -jhS -pHj -nIH -xYB -uUs -pfz -gJJ -grr -gcY -kwv -kal -uLk -vOT -nkD -vOT -nAb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hvD -iLI -tIx -deU -nzF -ksj -xju -pYQ -lnH -plK -ilq -vec -juY -wwu -qUJ -kgu -wYm -pIo -qKF -sfV -xTk -bqP -tDp -xCa -upN -dmB -bwh -bcj -wyt -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -qwI -vOT -erg -qgo -vOT -rQJ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nUQ -two -cjh -dJq -kMt -eDR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -fEA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vVn -bzC -vOT -pvm -cNl -xwl -rCK -jui -vOT -vOT -vOT -uJu -vOT -gdv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(180,1,1) = {" -brz -vOT -vOT -vOT -vOT -aKh -euo -dVp -nrV -gBN -dEZ -iXG -lqk -tRJ -vqS -fkv -pKh -qvF -dmO -cLH -vbi -sGm -plZ -lyn -lnl -nXZ -lXr -wDX -qlW -rnb -nfw -krx -nMs -vZl -rdH -xnp -aiW -wyp -uNI -vOT -wSg -vOT -rIM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nti -ohn -rUz -lhi -rTw -asV -uFx -mpd -pMY -jCq -oWP -dUX -ebV -ndk -sUf -eSp -vZR -oyx -axX -xys -lAO -bUA -eVX -bgf -swe -oCr -lHS -xCT -lPA -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mnp -nSd -pmb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -jVv -bzC -vOT -cOS -apr -uQN -rCK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(181,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -kIA -dDO -eQd -jMT -uRa -qbn -uus -uJS -sec -qWf -ugf -wYX -wtA -dOj -rBe -xTE -gMQ -jlG -hMM -ghM -fiI -eat -rtK -xAe -jGc -oGd -vni -eCm -wVU -ufT -xes -qLo -tCR -vOT -gLb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -oOE -eep -wnX -pVx -sNm -sHU -vHY -ebO -iBJ -ooN -xhG -onR -ewD -vfg -hdd -owv -rJc -wJW -wzO -iju -viP -qxs -rdb -eLu -iHx -anV -uwO -eVS -qUO -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kvf -vOT -cOS -qRa -uQN -rCK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(182,1,1) = {" -brz -vOT -qme -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vmG -iqj -eOl -iwX -kCD -oeK -pAr -inv -jJD -tbS -duN -kTC -krD -vSa -rjM -qCi -afJ -fHR -dmb -qBa -aTN -uxA -bql -fRy -tVp -dAr -wDj -pMI -jBd -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kvf -vOT -eDR -vOT -ngb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(183,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -agv -lxe -eii -xEf -uGi -anW -tas -iuv -rfz -sZM -sRq -mUG -jOO -rzx -gMg -ecq -eOR -jon -vyx -vbc -btf -kZq -mWC -sPx -vHP -bLP -kON -uNC -vEv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -uxF -vOT -eDR -vOT -ngb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(184,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(185,1,1) = {" -brz -vOT -gJb -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vcm -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(186,1,1) = {" -brz -vOT -oRK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(187,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(188,1,1) = {" -brz -vOT -ovM -vOT -ecY -vOT -eGa -vOT -vhg -vOT -vOT -vOT -oAD -vOT -bhu -vOT -gym -vOT -rvP -vOT -aHd -vOT -lyX -vOT -nTF -vOT -uhy -vOT -vOT -qRd -vOT -tLU -vOT -vCI -vOT -iFE -vOT -cDj -vOT -vOT -qIP -vOT -nzG -vOT -eRY -vOT -gCU -vOT -pSV -vOT -hxM -vOT -rPk -vOT -rTQ -vOT -mnQ -vOT -cOP -vOT -veg -vOT -sRo -vOT -ixU -vOT -vWj -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uFl -vOT -vtS -vOT -brz -"} -(189,1,1) = {" -brz -vOT -sjk -vOT -lso -vOT -wQr -vOT -mUJ -vOT -vOT -vOT -vOT -vOT -sBB -vOT -vOm -vOT -jYi -vOT -oQB -vOT -iZb -vOT -iUm -vOT -vVK -vOT -vOT -aNR -vOT -rvN -vOT -aIa -vOT -tBO -vOT -iIq -vOT -vOT -vcV -vOT -fUT -vOT -ahh -vOT -tlj -vOT -pic -vOT -qSj -vOT -xOw -vOT -hkE -vOT -lLf -vOT -sPN -vOT -wXn -vOT -mPU -vOT -jiW -vOT -uIR -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -mPh -vOT -mYm -vOT -brz -"} -(190,1,1) = {" -brz -vOT -vCx -vOT -wRB -vOT -kir -vOT -gxQ -vOT -vOT -vOT -vOT -vOT -eek -vOT -wjT -vOT -oMx -vOT -fAp -vOT -mfi -vOT -ajR -vOT -dXQ -vOT -vOT -lRO -vOT -nkh -vOT -iWB -vOT -qEC -vOT -aDC -vOT -vOT -emZ -vOT -jaE -vOT -wrp -vOT -mie -vOT -ezr -vOT -vOT -vOT -glm -vOT -xTT -vOT -tiw -vOT -jVc -vOT -mae -vOT -wEa -vOT -ccy -vOT -mUD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pGl -vOT -ksO -vOT -brz -"} -(191,1,1) = {" -brz -vOT -mFt -vOT -mwk -vOT -wWG -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wsF -vOT -oYR -vOT -ofJ -vOT -oWC -vOT -crE -vOT -gNc -vOT -koT -vOT -vOT -oST -vOT -xtV -vOT -hgs -vOT -tDz -vOT -uUf -vOT -vOT -eDX -vOT -uZh -vOT -abD -vOT -xnx -vOT -eff -vOT -vOT -vOT -iUi -vOT -bOl -vOT -vOT -vOT -bpo -vOT -gui -vOT -mql -vOT -oiF -vOT -nCU -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -uHI -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gtc -vOT -vOv -vOT -brz -"} -(192,1,1) = {" -brz -vOT -tXs -vOT -aPz -vOT -bST -vOT -vOT -vOT -vOT -vOT -vOT -vOT -eal -vOT -wIT -vOT -tBb -vOT -iRW -vOT -mbk -vOT -gBw -vOT -dfA -vOT -vOT -bYU -vOT -aai -vOT -gdZ -vOT -dIq -vOT -vOT -vOT -vOT -cVI -vOT -xYa -vOT -xNq -vOT -xnx -vOT -wiq -vOT -vOT -vOT -lWp -vOT -cQY -vOT -vOT -vOT -dbx -vOT -tum -vOT -nlN -vOT -sDv -vOT -deQ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dXy -vOT -bpc -vOT -brz -"} -(193,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lDt -vOT -vOT -vOT -brz -"} -(194,1,1) = {" -brz -vOT -cdo -vOT -uiy -vOT -vDs -vOT -mlU -vOT -oYX -vOT -jSX -vOT -aFy -vOT -dmp -vOT -mSJ -vOT -dme -vOT -dQQ -vOT -yiO -vOT -ufd -vOT -wLx -vOT -tJQ -vOT -oYg -vOT -mNV -vOT -oDL -vOT -bWz -vOT -uwS -vOT -xhu -vOT -lmb -vOT -xGH -vOT -pXd -vOT -xHr -vOT -llW -vOT -rfO -vOT -mHg -vOT -qhs -vOT -sZz -vOT -ooi -vOT -uWI -vOT -xPw -vOT -hzV -vOT -wZN -vOT -tbN -vOT -tnT -vOT -jsj -vOT -sFD -vOT -wLP -vOT -nxo -vOT -lWf -vOT -huK -vOT -sbo -vOT -kPZ -vOT -vOj -vOT -kvZ -vOT -eqC -vOT -qLY -vOT -xLo -vOT -rKf -vOT -jNQ -vOT -yht -vOT -ylC -vOT -gDh -vOT -dzs -vOT -mFI -xpd -vOT -joc -fiu -vOT -bNl -vOT -fsd -vOT -xyV -jIZ -vOT -mPT -vOT -aWg -vOT -iRs -vOT -jSm -vOT -kWa -vOT -wSZ -vOT -qNg -vOT -vOT -nRP -vOT -tpI -vOT -vOT -qZj -vOT -wxy -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -arF -vOT -aRw -vOT -brz -"} -(195,1,1) = {" -brz -vOT -djb -vOT -sxo -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -hpz -vOT -iOB -vOT -jBE -vOT -kQC -vOT -vEX -vOT -hmr -vOT -bZz -vOT -vUp -vOT -xyj -vOT -kAF -vOT -oFL -vOT -tdG -vOT -oUZ -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tQh -vOT -cxR -vOT -uHf -vOT -cGX -vOT -cEC -vOT -mXP -vOT -aUp -vOT -moJ -vOT -xKv -vOT -vOT -vOT -vOT -vOT -jDp -vOT -wrd -vOT -xdV -vOT -pjS -vOT -bdv -vOT -vOT -vOT -vOT -vOT -vOT -vOT -afl -vOT -sue -vOT -cge -vOT -vOT -vOT -tkB -vOT -uqs -vOT -cpF -vOT -jan -vOT -aQn -vOT -acn -vOT -ljW -vOT -vOT -vOT -vwC -dlw -vOT -vOT -oNv -vOT -vLK -vOT -bhk -vOT -wDr -kNA -vOT -ter -vOT -mPp -vOT -fLL -vOT -toJ -vOT -cTR -vOT -xeJ -vOT -gJt -vOT -vOT -gpB -vOT -bjU -vOT -vOT -miP -vOT -ijk -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lyI -vOT -hyM -vOT -brz -"} -(196,1,1) = {" -brz -vOT -ezE -vOT -rWp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -foe -vOT -jmn -vOT -hKk -vOT -iXu -vOT -dNE -vOT -pvp -vOT -xzI -vOT -cbJ -vOT -nyj -vOT -bGz -vOT -bcX -vOT -vEG -vOT -vbt -vOT -vRK -vOT -vOT -vOT -vOT -vOT -vOT -vOT -iNe -vOT -jcB -vOT -lQS -vOT -sTX -vOT -wSt -vOT -bki -vOT -hdE -vOT -aTy -vOT -lQp -vOT -vOT -vOT -vOT -vOT -rPI -vOT -aiO -vOT -xAA -vOT -hwn -vOT -rPD -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nMo -vOT -eai -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vYJ -vOT -bnT -vOT -fzm -vOT -vWJ -vOT -eJc -vOT -wkj -vOT -uWr -vOT -xGN -ffK -vOT -vOT -oJG -vOT -ncc -vOT -gJN -vOT -sCj -rGS -vOT -nJr -vOT -vOT -vOT -qNe -vOT -wUI -vOT -wax -vOT -fJC -vOT -vOT -vOT -vOT -jzb -vOT -arV -vOT -vOT -ioU -vOT -jWE -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -tyc -vOT -qGf -vOT -brz -"} -(197,1,1) = {" -brz -vOT -vfs -vOT -tiy -vOT -nlc -vOT -veF -vOT -bpC -vOT -iPI -vOT -abA -vOT -hqI -vOT -mpW -vOT -rVU -vOT -ykB -vOT -erF -vOT -rtw -vOT -idN -vOT -jDo -vOT -ugu -vOT -vOT -vOT -mwa -vOT -tRE -vOT -caH -vOT -sbv -vOT -vOT -vOT -ang -vOT -wbi -vOT -vOT -vOT -hUF -vOT -xKF -vOT -aGX -vOT -ssE -vOT -cPI -vOT -ibj -vOT -gSB -vOT -shQ -vOT -qag -vOT -bTR -vOT -vUH -vOT -jYb -vOT -pOO -vOT -vOT -vOT -irO -vOT -skt -vOT -vOT -vOT -vOT -vOT -xrO -vOT -vxc -vOT -slm -vOT -vOT -vOT -iIC -vOT -vOT -vOT -fxQ -vOT -dtI -vOT -fGQ -vOT -lDm -vOT -qlp -vOT -wVl -vOT -hso -vOT -czA -vOT -vOT -vOT -wnb -vOT -sUt -vOT -aSp -vOT -nYi -tlW -vOT -cnw -vOT -vOT -vOT -aDt -vOT -ooa -vOT -cBV -vOT -dDk -vOT -vOT -vOT -vOT -qdT -vOT -vOT -vOT -vOT -mNZ -vOT -xad -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -gPR -vOT -vOT -vOT -brz -"} -(198,1,1) = {" -brz -vOT -vIC -vOT -qbM -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -pJS -vOT -dlu -vOT -qJM -vOT -prk -vOT -ivV -vOT -ivm -vOT -ndP -vOT -cuz -vOT -vOT -vOT -qoO -vOT -vKx -vOT -hBz -vOT -dcf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kSt -vOT -dyg -vOT -cLM -vOT -lHA -vOT -tbC -vOT -cZA -vOT -dTF -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -lPn -vOT -khb -vOT -vOT -vOT -pRF -vOT -bKf -vOT -vOT -vOT -vOT -vOT -vOT -vOT -wMI -vOT -aje -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -dso -vOT -xAB -vOT -rQp -vOT -ylp -vOT -vOT -vOT -vOT -vOT -vOT -vOT -kNl -vOT -tGb -vOT -vOT -vOT -sbb -vOT -vOT -ebl -vOT -vOT -vOT -nnZ -vOT -cFc -vOT -laK -vOT -qBj -vOT -vOT -vOT -vOT -oJS -vOT -vOT -vOT -vOT -mFG -vOT -dDC -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -nFu -vOT -vOT -vOT -brz -"} -(199,1,1) = {" -brz -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -vOT -brz -"} -(200,1,1) = {" -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -brz -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aai" = ( +/obj/structure/prop/machine/stamper/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaj" = ( +/obj/item/seeds/peanutseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aak" = ( +/obj/item/clothing/gloves/sterile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aal" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/ion{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aar" = ( +/obj/item/clothing/under/rank/orderly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aat" = ( +/obj/item/clothing/under/rank/nullsuit/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aax" = ( +/obj/trader/general, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aay" = ( +/obj/item/clothing/under/qipao/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaE" = ( +/obj/item/weapon/aiModule/scientific_pursuer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaH" = ( +/mob/living/simple_mob/mobs_monsters/clowns/normal{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aaK" = ( +/obj/item/clothing/suit/tajaran/furs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaR" = ( +/obj/item/weapon/circuitboard/shutoff_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaT" = ( +/obj/structure/closet/crate/secure/large/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aaV" = ( +/obj/item/weapon/storage/pill_bottle/adminordrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abg" = ( +/obj/structure/bed/chair/sofa/right/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abt" = ( +/mob/living/simple_mob/animal/passive/cow{ + dir = 4 + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"abx" = ( +/obj/item/clothing/suit/storage/tailcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abA" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abD" = ( +/obj/structure/prop/prismcontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abO" = ( +/obj/machinery/clamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"abV" = ( +/obj/item/weapon/rig/ch/behemoth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acc" = ( +/obj/item/weapon/aiModule/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ace" = ( +/obj/structure/symbol/da, +/turf/simulated/fitness, +/area/survivalpod) +"ach" = ( +/obj/item/weapon/paper/hydroponics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acn" = ( +/obj/structure/door_assembly/door_assembly_med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acr" = ( +/obj/item/weapon/computer_hardware/nano_printer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acv" = ( +/obj/item/ammo_casing/a10mm/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acG" = ( +/obj/item/device/encryptionkey/heads/ai_integrated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"acK" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ade" = ( +/obj/item/weapon/disk/limb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adg" = ( +/obj/item/weapon/gun/projectile/sec/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adj" = ( +/obj/structure/bed/chair/sofa/left/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adt" = ( +/obj/item/weapon/gun/energy/retro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adB" = ( +/obj/item/clothing/suit/storage/hooded/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adD" = ( +/obj/structure/closet/crate/nanomed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adL" = ( +/obj/item/ammo_magazine/ammo_box/b762, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"adX" = ( +/obj/machinery/computer/id_restorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aea" = ( +/mob/living/simple_mob/vore/woof/hostile{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aeh" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/fluff/molenar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aej" = ( +/obj/item/seeds/appleseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aer" = ( +/obj/item/weapon/refill_cartridge/multitype/drink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aes" = ( +/obj/item/flag/pirate/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aeI" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aeJ" = ( +/obj/item/clothing/head/beret/solgov/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aeO" = ( +/obj/item/weapon/storage/belt/medical/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aeQ" = ( +/obj/item/weapon/stock_parts/scanning_module/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afl" = ( +/obj/machinery/door/blast/radproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afm" = ( +/obj/item/organ/internal/stomach/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afr" = ( +/obj/item/clothing/ears/earring/dangle/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afs" = ( +/obj/item/clothing/glasses/graviton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afD" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/spinach, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/spreads, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"afM" = ( +/obj/machinery/hyperpad{ + dir = 8 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"age" = ( +/obj/structure/closet/crate/secure/loot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agk" = ( +/obj/item/clothing/under/solgov/utility/fleet/combat/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agl" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agt" = ( +/obj/item/clothing/head/ushanka/solgov/marine/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agv" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/buttspie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agx" = ( +/obj/item/mecha_parts/component/armor/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agz" = ( +/obj/structure/sign/painting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agB" = ( +/obj/item/clothing/head/caphat/beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agJ" = ( +/obj/item/weapon/pen/crayon/marker/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agN" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agP" = ( +/obj/machinery/chemical_dispenser/biochemistry/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agQ" = ( +/obj/item/clothing/accessory/collar/spike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agT" = ( +/obj/item/weapon/material/star, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"agZ" = ( +/obj/item/clothing/gloves/fyellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahh" = ( +/obj/structure/prop/prism/incremental, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahj" = ( +/obj/machinery/vending/hydroseeds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aho" = ( +/obj/item/trash/lollibutt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahw" = ( +/obj/item/clothing/under/terran/navy/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahz" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahB" = ( +/obj/item/robot_parts/r_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahM" = ( +/obj/structure/bed/chair/sofa/right/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahT" = ( +/obj/structure/closet/secure_closet/egg/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahV" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ahZ" = ( +/obj/item/clothing/head/bio_hood/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aia" = ( +/obj/item/clothing/head/soft/solgov/sifguard/co, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aii" = ( +/obj/item/weapon/reagent_containers/glass/paint/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ail" = ( +/obj/item/weapon/reagent_containers/food/snacks/crabmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aix" = ( +/obj/item/weapon/melee/baton/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiy" = ( +/obj/item/weapon/bedsheet/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiz" = ( +/obj/item/clothing/under/color/ranger/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiD" = ( +/mob/living/simple_mob/vore/hostile/morph/dominated_prey, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aiF" = ( +/obj/item/weapon/cane/crutch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiI" = ( +/obj/item/device/depth_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiJ" = ( +/obj/item/clothing/head/pin/flower/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiO" = ( +/obj/machinery/door/airlock/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiR" = ( +/obj/item/weapon/spell/modifier/mend_synthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aiW" = ( +/obj/item/weapon/card/id/casino/both, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajc" = ( +/obj/item/clothing/suit/suspenders/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aje" = ( +/obj/machinery/door/firedoor/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajf" = ( +/obj/item/clothing/under/rank/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajp" = ( +/obj/item/weapon/spell/projectile/lightning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajr" = ( +/obj/item/device/aicard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajt" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aju" = ( +/obj/item/weapon/firework_star/weather/snow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajA" = ( +/obj/item/clothing/head/hood/winter/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajL" = ( +/obj/item/ammo_casing/microbattery/combat/net, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajQ" = ( +/obj/item/rig_module/device/paperdispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajR" = ( +/obj/structure/prop/machine/green_egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajV" = ( +/obj/effect/projectile_lighting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ajY" = ( +/obj/item/clothing/under/suit_jacket/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akd" = ( +/obj/item/rig_module/rad_shield/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ake" = ( +/obj/machinery/gear_dispenser/suit_fancy/commonwealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akg" = ( +/obj/item/clothing/accessory/solgov/rank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akk" = ( +/obj/item/clothing/shoes/boots/winter/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akA" = ( +/obj/item/weapon/reagent_containers/food/snacks/roastedsunflower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akL" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akM" = ( +/obj/item/clothing/suit/barding/alt_agatha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akP" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"akS" = ( +/obj/item/clothing/mask/goblin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alc" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alg" = ( +/obj/item/clothing/gloves/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alr" = ( +/mob/living/simple_mob/mechanical/hivebot/swarm{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"alG" = ( +/obj/item/clothing/head/flatcap/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alL" = ( +/obj/item/weapon/reagent_containers/food/drinks/ice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alP" = ( +/obj/item/clothing/accessory/storage/pouches/large/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alQ" = ( +/obj/item/clothing/head/cueball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alS" = ( +/obj/item/clothing/head/tesh_hood/standard/black_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alT" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"alX" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amd" = ( +/obj/item/weapon/storage/bag/circuits/mini/trig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ame" = ( +/obj/item/ammo_magazine/mtg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amf" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ami" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/puppy, +/turf/simulated/floor/atoll, +/area/survivalpod) +"amj" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/roy_rogers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amA" = ( +/obj/item/weapon/paper/rogueminer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amK" = ( +/obj/item/weapon/gun/projectile/pistol/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amU" = ( +/obj/item/organ/internal/liver/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amV" = ( +/obj/item/stack/material/wood/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"amW" = ( +/obj/item/clothing/head/cowboy/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ang" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anl" = ( +/obj/item/weapon/melee/changeling/claw/greater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ano" = ( +/obj/item/clothing/shoes/boots/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anu" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anE" = ( +/obj/item/ammo_casing/macrobattery/stabilize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anM" = ( +/obj/item/weapon/storage/pill_bottle/bicaridine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anO" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anR" = ( +/obj/item/clothing/under/cohesion/striped/testpartial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anS" = ( +/mob/living/simple_mob/vore/aggressive/rat/phoron{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"anU" = ( +/obj/item/weapon/cell/spike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anV" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/pocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"anW" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/sushi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aou" = ( +/obj/item/ammo_magazine/ammo_box/b12g/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aoy" = ( +/obj/item/weapon/storage/box/glasses/shot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aoI" = ( +/mob/living/simple_mob/vore/fennec{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aoU" = ( +/obj/item/weapon/reagent_containers/food/snacks/bun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aoZ" = ( +/obj/item/weapon/tank/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apb" = ( +/obj/item/mecha_parts/part/odysseus_right_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apd" = ( +/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aph" = ( +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"api" = ( +/obj/item/ammo_casing/microbattery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apl" = ( +/obj/structure/sign/warning/lava, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apo" = ( +/obj/machinery/button/doorbell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apr" = ( +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apE" = ( +/obj/item/weapon/aiModule/teleporterOffline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apF" = ( +/obj/item/weapon/storage/fancy/cigar/havana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apG" = ( +/obj/item/clothing/gloves/waterwings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apQ" = ( +/obj/item/device/encryptionkey/headset_eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"apZ" = ( +/obj/item/weapon/disk/limb/dsi_nevrean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqe" = ( +/obj/item/weapon/packageWrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqk" = ( +/obj/structure/sign/deck2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqm" = ( +/obj/item/weapon/reagent_containers/food/snacks/proteinslab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqt" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqA" = ( +/obj/item/clothing/accessory/armband/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqC" = ( +/obj/item/ammo_casing/a762x54, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqI" = ( +/obj/item/clothing/under/pants/greyjeans/ripped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqJ" = ( +/obj/item/weapon/storage/box/lights/bulbs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqR" = ( +/obj/item/organ/internal/appendix/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aqU" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/queen/eggless{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aqZ" = ( +/obj/structure/closet/secure_closet/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ard" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/exploration/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arl" = ( +/obj/item/weapon/reagent_containers/food/snacks/candy_corn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arw" = ( +/obj/item/weapon/book/manual/engineering_construction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arz" = ( +/obj/item/clothing/glasses/eyepatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arD" = ( +/obj/structure/sign/flag/nt/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arF" = ( +/obj/machinery/porta_turret/industrial/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arH" = ( +/obj/item/clothing/glasses/hud/security/jensenshades, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arI" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arO" = ( +/obj/item/weapon/storage/pill_bottle/hyronalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arV" = ( +/obj/structure/shuttle/window, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"arW" = ( +/obj/structure/sign/levels/security/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asn" = ( +/obj/item/weapon/storage/box/fluff/John, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ast" = ( +/obj/item/weapon/gun/projectile/automatic/l6_saw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asu" = ( +/mob/living/simple_mob/vore/horse/big{ + dir = 4 + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"asF" = ( +/obj/item/weapon/circuitboard/resleeving_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asJ" = ( +/obj/structure/sign/directions/engineering/atmospherics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asM" = ( +/obj/item/weapon/disk/transcore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asP" = ( +/obj/item/clothing/head/welding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asS" = ( +/obj/item/clothing/under/fluff/ally_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"asV" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atc" = ( +/obj/item/device/electronic_assembly/pda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atf" = ( +/obj/item/clothing/head/helmet/space, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atj" = ( +/obj/item/clothing/under/rank/trek/medsci/ds9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atl" = ( +/obj/item/toy/bouquet/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atn" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/androgynorovir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atp" = ( +/obj/item/toy/mecha/deathripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atu" = ( +/obj/item/stack/material/steel{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atx" = ( +/obj/item/weapon/magnetic_ammo/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atC" = ( +/obj/item/weapon/reagent_containers/food/snacks/gigapuddi/anger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atD" = ( +/obj/item/device/encryptionkey/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atF" = ( +/obj/item/organ/internal/intestine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atL" = ( +/obj/item/clothing/suit/captunic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atP" = ( +/obj/item/weapon/melee/rapier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atQ" = ( +/obj/item/slimepotion/steroid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"atW" = ( +/mob/living/simple_mob/vore/aggressive/rat/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"auB" = ( +/obj/item/clothing/under/wedding/bride_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"auF" = ( +/obj/item/weapon/storage/secure/briefcase/nerd_pack_cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"auG" = ( +/obj/item/weapon/surgical/circular_saw/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"auO" = ( +/obj/machinery/fusion_fuel_compressor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"auP" = ( +/obj/item/weapon/beach_ball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"auZ" = ( +/obj/structure/sign/signnew/laserhazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ava" = ( +/obj/item/weapon/circuitboard/mecha/ripley/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avi" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avp" = ( +/obj/item/weapon/storage/bag/circuits/mini/arithmetic/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avr" = ( +/obj/machinery/light/bigfloorlamp/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avG" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avI" = ( +/obj/item/stack/tile/floor/eris/cafe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avK" = ( +/obj/item/clothing/head/soft/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avM" = ( +/obj/item/ammo_magazine/m5mmcaseless/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avN" = ( +/obj/item/weapon/book/manual/materials_chemistry_analysis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avO" = ( +/obj/item/clothing/accessory/pride/enby, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avV" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatballsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"avW" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/patriot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awe" = ( +/obj/item/clothing/under/rank/trek/medsci/voy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awh" = ( +/obj/item/clothing/head/helmet/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awk" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awo" = ( +/obj/item/clothing/glasses/hud/health/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awp" = ( +/obj/item/clothing/shoes/boots/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aww" = ( +/obj/item/ammo_casing/a12g/scatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awz" = ( +/obj/item/integrated_circuit/logic/binary/and, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awH" = ( +/obj/machinery/compressor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awJ" = ( +/obj/item/weapon/gun/energy/gun/nuclear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awK" = ( +/obj/item/clothing/under/suit_jacket/really_black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awM" = ( +/obj/item/weapon/rcd/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awN" = ( +/obj/item/weapon/rig/pmc/commander/green/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"awO" = ( +/mob/living/simple_mob/humanoid/pirate/ranged/handcannon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"awW" = ( +/obj/item/trash/ratpackburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axe" = ( +/obj/structure/sign/warning/moving_parts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axi" = ( +/obj/structure/closet/secure_closet/security/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axj" = ( +/obj/item/clothing/under/boater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axl" = ( +/obj/structure/closet/gimmick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axn" = ( +/obj/item/clothing/under/solgov/mildress/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axy" = ( +/obj/item/weapon/flame/lighter/zippo/c4detonator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axC" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/vityazb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axF" = ( +/obj/item/clothing/gloves/gauntlets/rig/ch/precursor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axS" = ( +/obj/item/ammo_casing/microbattery/medical/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axV" = ( +/obj/item/weapon/dice/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axX" = ( +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"axY" = ( +/obj/item/clothing/accessory/bracelet/material/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayc" = ( +/obj/structure/sign/atmos_waste, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aye" = ( +/obj/item/device/modkit_conversion/fluff/harmonyspace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayi" = ( +/obj/item/weapon/reagent_containers/food/snacks/cherrypie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayj" = ( +/obj/item/weapon/storage/lockbox/clusterbang, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayE" = ( +/obj/item/weapon/rig/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayN" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyperzine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayS" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/salsa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ayT" = ( +/obj/item/ammo_magazine/s357/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azl" = ( +/obj/machinery/power/rtg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azt" = ( +/obj/item/weapon/reagent_containers/food/snacks/cracker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azA" = ( +/obj/item/stack/tile/floor/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azD" = ( +/obj/item/weapon/gun/energy/bfgtaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azE" = ( +/obj/item/seeds/peppercornseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azF" = ( +/obj/item/weapon/storage/box/casino/costume_blackbunny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azS" = ( +/obj/item/weapon/firework_star/weather/rain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"azT" = ( +/obj/item/clothing/head/helmet/space/void/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAf" = ( +/obj/item/weapon/storage/box/syringes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAi" = ( +/obj/item/device/modkit_conversion/fluff/mocha_suit_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAk" = ( +/obj/item/toy/syndicateballoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAl" = ( +/obj/structure/closet/firecloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAq" = ( +/obj/item/weapon/rig/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAu" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aAF" = ( +/obj/item/clothing/head/helmet/detective_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAG" = ( +/obj/item/device/encryptionkey/raider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAM" = ( +/mob/living/simple_mob/glitch_boss{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aAS" = ( +/obj/machinery/power/generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aAU" = ( +/obj/item/clothing/under/pants/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBa" = ( +/obj/item/clothing/head/helmet/space/void/chrono, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBg" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBm" = ( +/obj/item/clothing/suit/armor/vox_scrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBF" = ( +/obj/item/weapon/storage/secure/briefcase/dealer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBK" = ( +/obj/item/weapon/implantcase/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBL" = ( +/obj/item/trash/wasabi_peas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBP" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/rad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aBZ" = ( +/obj/structure/largecrate/animal/cow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCc" = ( +/obj/item/weapon/circuitboard/recycler_crusher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCd" = ( +/obj/structure/barricade/cutout/fukken_xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCl" = ( +/obj/item/weapon/storage/bag/circuits/mini/trig/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCn" = ( +/obj/item/clothing/suit/space/void/pilot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCs" = ( +/obj/item/weapon/implantcase/surge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCy" = ( +/obj/structure/closet/l3closet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCA" = ( +/obj/structure/bed/chair/bay/comfy/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCP" = ( +/obj/item/rig_module/vision/medhud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aCS" = ( +/obj/item/projectile/meteor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDd" = ( +/obj/item/clothing/glasses/hud/health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDh" = ( +/obj/item/rig_module/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDk" = ( +/obj/item/weapon/circuitboard/vr_sleeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDo" = ( +/obj/structure/sign/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDr" = ( +/obj/item/clothing/mask/demon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDt" = ( +/obj/structure/table/borosilicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDu" = ( +/obj/item/weapon/storage/belt/medical/technomancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDv" = ( +/obj/item/weapon/disk/species/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDC" = ( +/obj/structure/prop/machine/tradebeacon2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDD" = ( +/obj/item/weapon/gun/energy/zip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDE" = ( +/obj/item/organ/internal/augment/armmounted/dartbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDL" = ( +/obj/item/stack/tile/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDO" = ( +/obj/item/ammo_magazine/m545/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDR" = ( +/obj/item/weapon/grenade/chem_grenade/incendiary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDV" = ( +/obj/item/device/uv_light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aDZ" = ( +/obj/item/weapon/grenade/chem_grenade/cleaner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEi" = ( +/obj/item/clothing/head/hood/winter/snowsuit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEp" = ( +/obj/item/weapon/storage/bag/circuits/mini/reagents, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEr" = ( +/obj/item/clothing/head/beret/solgov/fleet/branch/third, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEu" = ( +/obj/item/weapon/gun/energy/laser/vepr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEE" = ( +/obj/item/clothing/glasses/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEF" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEM" = ( +/obj/item/weapon/bedsheet/piratedouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEW" = ( +/obj/item/clothing/gloves/gauntlets/rig/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aEY" = ( +/obj/structure/closet/crate/secure/large/einstein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFh" = ( +/obj/item/weapon/gun/energy/lasertag/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFk" = ( +/obj/structure/closet/walllocker_double/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFq" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/technician{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aFy" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFC" = ( +/obj/item/clothing/head/welding/fluff/vinjj, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFR" = ( +/obj/item/clothing/shoes/magboots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aFU" = ( +/obj/item/weapon/storage/box/fluff/ally, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGa" = ( +/obj/item/clothing/head/service/army/campaign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGc" = ( +/obj/item/weapon/storage/vore_egg/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGd" = ( +/obj/item/device/electronic_assembly/calc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGg" = ( +/obj/item/clothing/suit/armor/combat/crusader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGm" = ( +/obj/item/integrated_circuit/trig/cosine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGs" = ( +/obj/item/vox/armalis_armour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGt" = ( +/obj/item/weapon/cell/mech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGV" = ( +/obj/item/ammo_magazine/smart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGX" = ( +/obj/machinery/door/airlock/glass_command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aGY" = ( +/obj/structure/sign/directions/ladderwell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHd" = ( +/obj/structure/prop/lock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHf" = ( +/obj/item/weapon/reagent_containers/pill/nutriment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHi" = ( +/obj/machinery/vending/loadout/overwear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHo" = ( +/obj/machinery/camera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHs" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/pawn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHA" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHB" = ( +/obj/item/device/protean_reboot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHG" = ( +/obj/item/weapon/gun/projectile/p92x/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHI" = ( +/obj/structure/sink/puddle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHM" = ( +/obj/item/device/bodysnatcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aHY" = ( +/mob/living/simple_mob/shadekin/purple{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aIa" = ( +/obj/structure/prop/machine/tgmc_console1/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIc" = ( +/obj/mecha/combat/fighter/pinnace/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIi" = ( +/obj/item/seeds/wheatseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIp" = ( +/obj/item/weapon/storage/backpack/satchel/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIr" = ( +/obj/item/weapon/storage/bag/circuits, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIv" = ( +/obj/machinery/dnaforensics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIz" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIB" = ( +/obj/item/clothing/under/undersuit/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIE" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/puni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIG" = ( +/obj/item/clothing/head/pin/flower/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aII" = ( +/obj/structure/sign/warning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIJ" = ( +/obj/item/clothing/under/rank/security/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIM" = ( +/obj/item/weapon/storage/box/trackimp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIN" = ( +/obj/item/seeds/cocoapodseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIP" = ( +/obj/item/clothing/head/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIW" = ( +/obj/machinery/computer/centrifuge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aIZ" = ( +/obj/item/mecha_parts/mecha_equipment/tool/sleeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJd" = ( +/obj/item/clothing/head/hood/winter/snowsuit/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJe" = ( +/obj/structure/largecrate/animal/catgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJo" = ( +/obj/item/weapon/weldingtool/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJp" = ( +/obj/item/clothing/head/pelt/wolfpelt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJA" = ( +/obj/item/integrated_circuit/time/clock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJC" = ( +/obj/structure/sign/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJD" = ( +/obj/item/weapon/rig/pmc/engineer/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJR" = ( +/obj/item/seeds/jurlmah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJS" = ( +/obj/item/clothing/accessory/medal/silver/fluff/abc314, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJW" = ( +/obj/item/seeds/siflettuce, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aJZ" = ( +/obj/structure/bed/chair/wheelchair/smallmotor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKa" = ( +/mob/living/simple_mob/vore/oregrub{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aKb" = ( +/obj/item/mecha_parts/part/janus_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKd" = ( +/obj/item/device/electronic_assembly/large/tall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKf" = ( +/obj/item/clothing/under/technomancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKh" = ( +/obj/item/weapon/cartridge/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKj" = ( +/obj/item/clothing/suit/storage/duster/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKn" = ( +/obj/item/weapon/storage/box/syndie_kit/concussion_grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKr" = ( +/obj/item/clothing/mask/bandana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKD" = ( +/obj/item/weapon/storage/vore_egg/scree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKG" = ( +/obj/item/ammo_casing/a762/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKO" = ( +/obj/item/integrated_circuit/output/led/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKV" = ( +/mob/living/simple_mob/humanoid/merc/ranged/grenadier{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aKX" = ( +/obj/item/clothing/head/dress/fleet/garrison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKY" = ( +/obj/item/clothing/accessory/fluff/maxie_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aKZ" = ( +/obj/item/weapon/oldtwohanded/spear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLf" = ( +/obj/item/weapon/kitchenknife/tacknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLi" = ( +/obj/machinery/atmospherics/valve/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLn" = ( +/obj/structure/portal_event/resize/preset_grow_hundred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLr" = ( +/obj/item/clothing/shoes/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLs" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLt" = ( +/obj/structure/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLA" = ( +/obj/vehicle/train/engine/quadbike/snowmobile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLB" = ( +/obj/structure/sign/directions/ai_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aLK" = ( +/obj/item/clothing/head/helmet/space/skrell/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMc" = ( +/obj/item/toy/mecha/ripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMj" = ( +/obj/item/rig_module/vision/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMx" = ( +/obj/item/weapon/telecube/precursor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMy" = ( +/obj/item/weapon/rig/ert/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMz" = ( +/obj/item/toy/character/warrior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMB" = ( +/obj/item/mecha_parts/component/armor/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMG" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMH" = ( +/obj/structure/foodcart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aMZ" = ( +/obj/item/weapon/tool/wrench/pipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNa" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/dr_gibb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNb" = ( +/obj/machinery/atmospherics/tvalve, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNe" = ( +/obj/item/weapon/disk/limb/dsi_lizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNo" = ( +/obj/structure/sign/levels/tram, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNs" = ( +/obj/item/weapon/camera_bug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNt" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/raja_coat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNw" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNx" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNz" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/sake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNB" = ( +/obj/machinery/vending/radren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aND" = ( +/obj/item/clothing/accessory/tie/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNF" = ( +/obj/item/weapon/storage/lockbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNO" = ( +/obj/item/clothing/shoes/black/cuffs/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNR" = ( +/obj/structure/prop/machine/random_radio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNS" = ( +/obj/item/projectile/bullet/rifle/a762, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNU" = ( +/obj/item/clothing/head/helmet/space/void/refurb/pilot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNW" = ( +/obj/item/weapon/reagent_containers/food/snacks/badrecipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aNX" = ( +/obj/item/weapon/kinetic_crusher/machete/gauntlets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOb" = ( +/obj/item/toy/plushie/carp/ice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOc" = ( +/obj/item/integrated_circuit/trig/cosecant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOn" = ( +/obj/item/weapon/circuitboard/gyrotron_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOu" = ( +/obj/item/weapon/card/id/security/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOB" = ( +/obj/item/clothing/under/rank/trek/sec/ds9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOE" = ( +/obj/item/weapon/reagent_containers/food/snacks/kudzudonburi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOJ" = ( +/obj/item/ammo_casing/a38/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOK" = ( +/obj/item/weapon/circuitboard/broken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOV" = ( +/obj/item/weapon/storage/mrebag/side, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOW" = ( +/mob/living/simple_mob/animal/giant_spider/frost/broodling, +/mob/living/simple_mob/animal/giant_spider/frost/broodling, +/mob/living/simple_mob/animal/giant_spider/frost/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aOX" = ( +/obj/item/toy/plushie/carp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aOY" = ( +/obj/machinery/light/floortube/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPb" = ( +/obj/item/weapon/storage/pill_bottle/carthatoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPg" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/ntbeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPh" = ( +/obj/item/weapon/gun/energy/mouseray/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPj" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPm" = ( +/obj/structure/bed/chair/comfy/rounded/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPw" = ( +/obj/item/paiparts/processor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPz" = ( +/obj/structure/prop/alien/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPH" = ( +/obj/item/clothing/head/helmet/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPJ" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPP" = ( +/obj/structure/closet/secure_closet/security/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aPS" = ( +/obj/item/clothing/suit/storage/vest/wardencoat/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQb" = ( +/obj/item/weapon/storage/box/masks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQg" = ( +/obj/structure/bookcase/manuals/research_and_development, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQj" = ( +/obj/item/ammo_magazine/s45lc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQl" = ( +/obj/item/canvas/nineteen_nineteen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQn" = ( +/obj/structure/door_assembly/door_assembly_ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQt" = ( +/obj/item/clothing/under/skirt/outfit/fluff/nikki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQu" = ( +/obj/item/ammo_magazine/awp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQw" = ( +/obj/item/clothing/head/turban/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQy" = ( +/obj/item/ammo_magazine/m45tommydrum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQA" = ( +/obj/structure/ship_munition/disperser_charge/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQC" = ( +/obj/item/clothing/head/helmet/space/anomaly/heat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQE" = ( +/obj/item/clothing/head/helmet/space/void/engineering/hazmat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQT" = ( +/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aQW" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRa" = ( +/obj/item/stack/tile/floor/eris/white/techfloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRf" = ( +/obj/item/weapon/reagent_containers/blood/OMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRl" = ( +/obj/item/weapon/storage/backpack/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRr" = ( +/obj/structure/sign/levels/medical/resleeving, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRs" = ( +/obj/item/weapon/card/id/civilian/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRw" = ( +/obj/machinery/artifact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRB" = ( +/obj/item/weapon/reagent_containers/food/snacks/curryrice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRD" = ( +/obj/item/stack/animalhide/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRG" = ( +/obj/item/clothing/head/hardhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRK" = ( +/obj/item/clothing/gloves/fluff/kilano/netra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRN" = ( +/obj/item/weapon/storage/laundry_basket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRS" = ( +/obj/item/clothing/head/helmet/space/void/refurb/medical/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRU" = ( +/obj/machinery/computer/crew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aRW" = ( +/obj/item/weapon/whetstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSe" = ( +/obj/structure/sign/directions/engineering/engeqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSf" = ( +/obj/item/weapon/card/id/civilian/service/botanist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSi" = ( +/obj/item/accessory/fluff/kettek_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSl" = ( +/obj/item/clothing/accessory/permit/gun/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSn" = ( +/obj/structure/closet/emcloset/legacy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSp" = ( +/obj/structure/simple_door/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSy" = ( +/obj/item/clothing/ears/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSB" = ( +/obj/item/weapon/gun/energy/mouseray/teppi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSH" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ppsh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSI" = ( +/obj/item/clothing/shoes/leg_guard/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSK" = ( +/obj/item/ammo_magazine/ammo_box/b45/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSQ" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSS" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aSX" = ( +/obj/item/clothing/head/crown/goose_king, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTr" = ( +/obj/item/weapon/storage/box/disks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTv" = ( +/obj/item/clothing/under/skirt/colorable/long, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTy" = ( +/obj/machinery/door/airlock/maintenance/rnd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTA" = ( +/obj/item/clothing/head/tesh_hood/standard/black_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTN" = ( +/obj/item/weapon/reagent_containers/food/snacks/tofu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTP" = ( +/obj/structure/closet/secure_closet/egg/sergal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTT" = ( +/obj/item/clothing/suit/storage/fluff/david_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aTZ" = ( +/obj/item/weapon/folder/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUk" = ( +/obj/item/weapon/kinetic_crusher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUn" = ( +/obj/item/weapon/storage/pouch/flares, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUp" = ( +/obj/machinery/door/airlock/maintenance/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUq" = ( +/obj/item/clothing/accessory/holster/waist/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUw" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/heavy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aUB" = ( +/obj/item/integrated_circuit/transfer/pulsedemultiplexer/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUF" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/scoped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUN" = ( +/mob/living/simple_mob/humanoid/possessed{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aUS" = ( +/obj/item/clothing/suit/armor/pcarrier/medium/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aUV" = ( +/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVb" = ( +/obj/item/clothing/head/hood/winter/snowsuit/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVe" = ( +/obj/item/weapon/spell/audible_deception, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVh" = ( +/obj/item/seeds/wildwabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVj" = ( +/obj/structure/closet/crate/internals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVv" = ( +/obj/item/clothing/suit/storage/solgov/service/army/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVw" = ( +/obj/machinery/button/windowtint/doortint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVx" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/tommylas{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aVy" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/queen{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aVL" = ( +/obj/item/clothing/head/serdyhelmet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aVZ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethylredox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWf" = ( +/obj/machinery/holoposter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWg" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWo" = ( +/obj/item/weapon/tool/screwdriver/sdriver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWs" = ( +/obj/item/weapon/reagent_containers/food/snacks/custardbun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWA" = ( +/obj/item/seeds/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWC" = ( +/obj/item/clothing/accessory/bracelet/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWE" = ( +/obj/structure/sign/atmos_n2o, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWF" = ( +/obj/item/weapon/implant/reagent_generator/egg/veryslow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWP" = ( +/obj/item/clothing/accessory/badge/holo/sheriff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWQ" = ( +/obj/item/ammo_casing/a45lc/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aWR" = ( +/obj/machinery/power/generator/oldteg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXa" = ( +/obj/item/weapon/implant/adrenalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXc" = ( +/mob/living/simple_mob/vore/bigdragon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aXm" = ( +/obj/item/weapon/reagent_containers/food/snacks/father_breakfast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXo" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXu" = ( +/obj/item/weapon/reagent_containers/glass/paint/violet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXv" = ( +/obj/item/seeds/brownmold, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXz" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXB" = ( +/obj/item/clothing/under/rank/internalaffairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXJ" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang/limited, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXV" = ( +/obj/item/clothing/accessory/armor/tag/bneg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aXW" = ( +/obj/item/capture_crystal/bigdragon/friendly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYh" = ( +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYi" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/spicy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYk" = ( +/obj/structure/closet/secure_closet/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYl" = ( +/obj/item/weapon/reagent_containers/food/snacks/human/burger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYn" = ( +/obj/item/weapon/gun/projectile/automatic/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYs" = ( +/obj/item/clothing/head/beret/solgov/borderguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYv" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYG" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYJ" = ( +/obj/item/weapon/stamp/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYL" = ( +/mob/living/simple_mob/vore/leopardmander/blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aYP" = ( +/obj/item/weapon/virusdish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYS" = ( +/obj/item/clothing/shoes/boots/jackboots/toeless/thigh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYV" = ( +/obj/item/clothing/under/away/patrol/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYW" = ( +/obj/item/seeds/plastiseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aYZ" = ( +/obj/machinery/status_display/shuttle_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZa" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/horse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZb" = ( +/obj/item/weapon/beach_ball/holoball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZd" = ( +/obj/structure/closet/crate/radiation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZr" = ( +/mob/living/simple_mob/animal/giant_spider/frost{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"aZu" = ( +/obj/item/weapon/spacecasinocash/c200, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZB" = ( +/obj/item/weapon/storage/box/autoinjectors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZE" = ( +/obj/item/toy/plushie/therapy/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"aZO" = ( +/obj/item/clothing/under/solgov/utility/fleet/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bab" = ( +/obj/item/clothing/suit/storage/hazardvest/yw/Paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bac" = ( +/obj/machinery/computer/atmoscontrol/laptop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bag" = ( +/obj/item/weapon/disk/limb/cybersolutions, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bam" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, +/turf/simulated/floor/atoll, +/area/survivalpod) +"baC" = ( +/obj/machinery/cash_register, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baG" = ( +/obj/structure/sign/levels/cargo/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baJ" = ( +/obj/item/clothing/head/ushanka/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baK" = ( +/obj/item/clothing/accessory/armband/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baL" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer/o3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baN" = ( +/obj/item/ammo_casing/a12g/flechette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baQ" = ( +/obj/item/clothing/accessory/collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"baU" = ( +/obj/item/weapon/toy/snowglobe/rascalspass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbc" = ( +/obj/item/weapon/cell/giga/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbg" = ( +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbn" = ( +/obj/item/toy/figure/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbp" = ( +/obj/structure/symbol/maint, +/turf/simulated/fitness, +/area/survivalpod) +"bbu" = ( +/obj/item/stack/material/glass/titanium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbB" = ( +/obj/item/clothing/accessory/collar/holo/casinoslave_fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbE" = ( +/obj/item/ammo_magazine/s44, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbG" = ( +/obj/item/weapon/farmbot_arm_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbJ" = ( +/obj/item/organ/internal/voicebox/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbO" = ( +/obj/item/mecha_parts/mecha_equipment/cloak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbP" = ( +/obj/item/weapon/circuitboard/rcon_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbQ" = ( +/obj/machinery/gateway/centerstation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbW" = ( +/obj/item/stack/tile/floor/eris/bcircuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbX" = ( +/obj/machinery/shieldgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bbZ" = ( +/obj/item/stack/tile/floor/eris/steel/orangecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcf" = ( +/obj/item/toy/figure/secofficer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bci" = ( +/obj/item/weapon/storage/backpack/messenger/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcj" = ( +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcr" = ( +/obj/item/weapon/storage/box/wormcan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcz" = ( +/obj/machinery/vr_sleeper/alien/random_replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcD" = ( +/obj/item/godfig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcI" = ( +/obj/structure/casino_table/roulette_chart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcL" = ( +/obj/item/inflatable/torn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcT" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcX" = ( +/obj/machinery/door/airlock/angled_tgmc/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bcZ" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/medislug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bdd" = ( +/obj/item/weapon/storage/box/brainzsnax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdh" = ( +/obj/machinery/recharger/wallcharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdk" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/m4a1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdp" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bds" = ( +/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdu" = ( +/obj/structure/barricade/cutout/lusty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdv" = ( +/obj/machinery/door/blast/gate/bars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdx" = ( +/obj/item/weapon/reagent_containers/pill/dylovene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdz" = ( +/obj/item/weapon/paperplane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdS" = ( +/obj/item/weapon/reagent_containers/food/snacks/bunbun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdX" = ( +/mob/living/simple_mob/hostile/carp, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bdY" = ( +/obj/item/toy/tennis/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bdZ" = ( +/obj/item/toy/plushie/mouse/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"beb" = ( +/obj/item/weapon/implant/organ/limbaugment/upperarm/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bef" = ( +/obj/item/clothing/accessory/chaps/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bem" = ( +/obj/item/clothing/under/sexybunny_white/sexybunny_black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ber" = ( +/obj/item/weapon/gun/energy/taser/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bey" = ( +/obj/item/seeds/nettleseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"beR" = ( +/mob/living/simple_mob/metroid/juvenile/baby{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"beS" = ( +/obj/item/stack/tile/wood/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"beU" = ( +/obj/item/weapon/aiModule/live_and_let_live, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfl" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/trailgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfm" = ( +/obj/item/weapon/storage/vore_egg/chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfo" = ( +/obj/item/clothing/under/color/fjumpsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfs" = ( +/obj/structure/cable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfG" = ( +/obj/item/clothing/head/helmet/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfR" = ( +/obj/item/ammo_casing/a762/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfW" = ( +/obj/item/weapon/circuitboard/comm_traffic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bfZ" = ( +/obj/item/clothing/gloves/ring/fluff/basir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bga" = ( +/mob/living/simple_mob/vore/oregrub/lava{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bgf" = ( +/obj/item/weapon/reagent_containers/food/snacks/validsalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bgr" = ( +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bgB" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/russofurcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bgK" = ( +/obj/item/clothing/accessory/locket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bgZ" = ( +/obj/item/clothing/accessory/armor/armguards/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhd" = ( +/obj/item/weapon/anobattery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhe" = ( +/obj/item/integrated_circuit/logic/unary/not, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhg" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhi" = ( +/obj/item/weapon/soap/silver_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhk" = ( +/obj/structure/simple_door/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhu" = ( +/obj/structure/prop/dominator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhH" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/atomicbomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhL" = ( +/obj/item/device/flashlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhM" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhN" = ( +/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bhQ" = ( +/obj/structure/loot_pile/mecha/ripley/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bib" = ( +/obj/item/clothing/ears/skrell/chain/ebony, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bid" = ( +/obj/item/clothing/head/helmet/warden/hat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bii" = ( +/mob/living/simple_mob/animal/sif/fluffy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"biE" = ( +/obj/structure/sign/levels/medical/chemlab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"biJ" = ( +/obj/item/weapon/storage/bible/booze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"biO" = ( +/obj/item/weapon/storage/backpack/dufflebag/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"biR" = ( +/obj/item/weapon/paper/crumpled/whiskeymine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"biW" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/genration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjc" = ( +/obj/structure/bed/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjg" = ( +/obj/item/clothing/under/dress/sari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjo" = ( +/obj/structure/closet/cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjq" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_midgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjr" = ( +/obj/item/clothing/under/solgov/utility/sifguard/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjt" = ( +/obj/structure/bigDelivery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjy" = ( +/obj/item/weapon/rcd/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjD" = ( +/obj/item/weapon/surgical/bonesetter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjQ" = ( +/obj/item/weapon/reagent_containers/rollingpaper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjU" = ( +/obj/structure/shuttle/engine/router, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bjX" = ( +/obj/item/clothing/under/pants/altevian/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bke" = ( +/obj/machinery/atmospherics/binary/dp_vent_pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkf" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkg" = ( +/mob/living/simple_mob/animal/passive/opossum/poppy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bki" = ( +/obj/machinery/door/airlock/hatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkl" = ( +/obj/item/clothing/shoes/boots/jackboots/thigh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkn" = ( +/obj/item/clothing/accessory/asymmetric/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bko" = ( +/obj/item/clothing/mask/surgical/cloth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkt" = ( +/obj/item/device/encryptionkey/headset_service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkv" = ( +/obj/item/weapon/dnainjector/antistutt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkB" = ( +/obj/machinery/telecomms/bus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkF" = ( +/obj/item/ammo_magazine/m2024/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkG" = ( +/obj/structure/constructshell, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bkJ" = ( +/obj/item/weapon/storage/belt/bandolier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkS" = ( +/obj/item/weapon/bedsheet/cedouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bkY" = ( +/obj/item/weapon/banner/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blb" = ( +/obj/item/weapon/bedsheet/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ble" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blf" = ( +/obj/item/clothing/accessory/storage/white_drop_pouches, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bli" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/captain{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"blk" = ( +/obj/item/seeds/sifbulb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blo" = ( +/obj/item/clothing/mask/gas/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blq" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blr" = ( +/obj/item/device/detective_scanner/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bls" = ( +/obj/item/weapon/rocksliver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blu" = ( +/obj/machinery/suit_cycler/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blw" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blG" = ( +/obj/item/clothing/head/helmet/space/anomaly/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"blQ" = ( +/obj/item/clothing/accessory/gaiter/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmj" = ( +/obj/structure/sign/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmq" = ( +/obj/item/mecha_parts/chassis/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmu" = ( +/obj/item/clothing/under/flower_skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmz" = ( +/obj/item/clothing/accessory/solgov/department/command/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmD" = ( +/obj/item/integrated_circuit/output/video_camera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmG" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/scrapak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmI" = ( +/obj/item/weapon/rig/pmc/medical/green/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmW" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/inaprov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bmZ" = ( +/obj/item/stack/material/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bna" = ( +/obj/item/clothing/head/helmet/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bne" = ( +/obj/item/weapon/storage/pill_bottle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnh" = ( +/obj/item/weapon/surgical/bioregen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnk" = ( +/mob/living/simple_mob/blob/spore/weak{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bnp" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnr" = ( +/obj/item/weapon/computer_hardware/network_card/wired, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bns" = ( +/obj/item/clothing/under/dress/revealingdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnw" = ( +/obj/item/weapon/gun/energy/stunrevolver/snubnose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnz" = ( +/obj/structure/sign/levels/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnT" = ( +/obj/structure/timer_door/ten, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bnV" = ( +/obj/item/stack/tile/grass/sif/forest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"boa" = ( +/obj/item/weapon/pickaxe/plasmacutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bof" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"boo" = ( +/obj/item/weapon/reagent_containers/pill/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bop" = ( +/obj/item/clothing/mask/fakemoustache, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bot" = ( +/obj/item/clothing/suit/redtag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"boy" = ( +/mob/living/simple_mob/mobs_monsters/clowns/tunnelclown{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"boK" = ( +/obj/item/ammo_magazine/m762svd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"boS" = ( +/obj/item/clothing/accessory/collar/bell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"boV" = ( +/obj/item/ammo_magazine/s45lc/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpc" = ( +/obj/machinery/porta_turret/stationary/syndie/CIWS, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpd" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dr_gibb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpf" = ( +/obj/item/clothing/mask/gas/owl_mask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpg" = ( +/obj/item/clothing/ears/skrell/cloth_female/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpi" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/engineering/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpo" = ( +/obj/structure/prop/war/tgmc_30mm/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpr" = ( +/obj/item/device/glasses_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpy" = ( +/obj/item/rig_module/protean/syphon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpC" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpE" = ( +/obj/item/integrated_circuit/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpK" = ( +/obj/item/clothing/under/dress/flower_dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpL" = ( +/obj/item/device/reagent_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bpS" = ( +/obj/item/stack/tile/floor/eris/steel/techfloor_grid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqf" = ( +/obj/item/weapon/cane/concealed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bql" = ( +/obj/item/weapon/reagent_containers/food/snacks/tuna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqq" = ( +/obj/structure/bed/chair/sofa/pew/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqr" = ( +/obj/structure/sign/signnew/opticals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqs" = ( +/obj/item/clothing/head/headband/maid/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqy" = ( +/obj/item/clothing/under/teshari/smock/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqF" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqO" = ( +/obj/structure/sign/signnew/oxidants, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bqP" = ( +/obj/item/weapon/reagent_containers/food/snacks/tofupie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brk" = ( +/obj/item/ammo_magazine/strela, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brl" = ( +/obj/item/clothing/suit/storage/teshari/cloak/fluff/Saroth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brz" = ( +/turf/simulated/shuttle/wall/voidcraft, +/area/survivalpod) +"brB" = ( +/obj/structure/loot_pile/mecha/ripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brD" = ( +/obj/item/integrated_circuit/cryptography, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brJ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/plantbgone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brO" = ( +/obj/item/clothing/suit/space/void/responseteam/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brT" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"brZ" = ( +/obj/machinery/gibber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsa" = ( +/obj/item/weapon/melee/chainofcommand/curator_whip/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsg" = ( +/obj/item/device/mmi/digital/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bso" = ( +/obj/item/ammo_magazine/ak74/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsp" = ( +/obj/item/clothing/suit/taur/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsu" = ( +/obj/item/clothing/under/solgov/utility/sifguard/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsz" = ( +/obj/item/clothing/head/wizard/fake/realistic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsA" = ( +/obj/item/weapon/tool/wrench/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsK" = ( +/obj/item/clothing/accessory/pride/pan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsO" = ( +/obj/item/stack/animalhide/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsR" = ( +/obj/item/clothing/head/bearpelt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bsX" = ( +/obj/item/stack/material/mhydrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btf" = ( +/obj/item/weapon/reagent_containers/food/snacks/tofuburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bth" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btj" = ( +/obj/machinery/vending/food, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btn" = ( +/obj/item/weapon/spell/construct, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btq" = ( +/obj/item/clothing/under/tribalwear/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btr" = ( +/obj/item/clothing/accessory/solgov/department, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bts" = ( +/obj/item/trash/bowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btG" = ( +/obj/item/stack/tile/floor/eris/dark/orangecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btL" = ( +/obj/item/taperoll/police, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btQ" = ( +/obj/fiftyspawner/blucarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btR" = ( +/obj/item/weapon/storage/mrebag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btW" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"btY" = ( +/obj/item/weapon/material/twohanded/baseballbat/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"buo" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bup" = ( +/obj/item/clothing/under/fluff/morunder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"but" = ( +/obj/item/weapon/reagent_containers/food/snacks/daifuku, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"buz" = ( +/obj/item/mecha_parts/component/armor/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"buB" = ( +/obj/machinery/gear_dispenser/suit/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"buH" = ( +/obj/structure/loot_pile/mecha/gygax/medgax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"buN" = ( +/mob/living/simple_mob/slime/xenobio/light_pink{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"buX" = ( +/obj/item/toy/plushie/squid/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvf" = ( +/obj/item/weapon/technomancer_core/golem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvh" = ( +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvo" = ( +/obj/item/weapon/book/bundle/custom_library/nonfiction/viabilityofcorporategov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvr" = ( +/obj/item/seeds/rose/blood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvx" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratliquid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvy" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/brushgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvW" = ( +/obj/item/clothing/accessory/solgov/rank/ec/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bvY" = ( +/obj/item/weapon/shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwd" = ( +/obj/machinery/vending/wardrobe/lawdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwh" = ( +/obj/item/weapon/reagent_containers/food/snacks/veggiemomo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwm" = ( +/obj/item/toy/plushie/deer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwr" = ( +/obj/structure/closet/walllocker_double/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwx" = ( +/obj/structure/closet/chefcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwD" = ( +/obj/item/robot_parts/r_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwE" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwH" = ( +/obj/item/device/slime_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwL" = ( +/obj/structure/salvageable/computer_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwM" = ( +/obj/item/weapon/firework_star/weather/clear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwO" = ( +/obj/item/weapon/paper_bin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwU" = ( +/obj/item/weapon/circuitboard/disperserback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bwX" = ( +/obj/item/ammo_magazine/pkm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxc" = ( +/obj/machinery/computer/pod/old/swf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxg" = ( +/mob/living/simple_mob/vore/greatwolf{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bxp" = ( +/obj/machinery/medical_kiosk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxr" = ( +/obj/machinery/atmospherics/pipe/tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxs" = ( +/obj/item/weapon/reagent_containers/food/snacks/pisanggoreng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxv" = ( +/obj/item/clothing/suit/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxz" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/puppy/wiggle, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bxB" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxO" = ( +/obj/item/weapon/storage/mrebag/menu8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bxP" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/tp23, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byc" = ( +/obj/item/clothing/suit/storage/snowsuit/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byi" = ( +/obj/item/weapon/spell/summon/summon_creature, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byu" = ( +/obj/item/clothing/gloves/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byv" = ( +/obj/item/clothing/head/pin/magnetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byz" = ( +/obj/item/weapon/reagent_containers/food/snacks/pillbug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byC" = ( +/obj/item/weapon/storage/briefcase/clutch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byE" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"byF" = ( +/obj/vehicle, +/turf/simulated/floor/atoll, +/area/survivalpod) +"byR" = ( +/obj/item/weapon/storage/backpack/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzk" = ( +/obj/item/clothing/suit/armor/bulletproof/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzq" = ( +/obj/item/clothing/head/helmet/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzu" = ( +/obj/item/clothing/accessory/cowledvest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzz" = ( +/obj/item/stack/tile/floor/eris/white/danger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzB" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzC" = ( +/obj/item/weapon/extinguisher/mini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzE" = ( +/obj/item/seeds/harebell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzH" = ( +/obj/item/toy/plushie/carp/nebula, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzO" = ( +/obj/item/weapon/reagent_containers/food/snacks/omurice/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzQ" = ( +/obj/item/weapon/reagent_containers/glass/beaker/neurotoxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzS" = ( +/obj/machinery/atmospherics/unary/heat_exchanger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzU" = ( +/obj/item/stack/material/glass/plastitanium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bzY" = ( +/obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAd" = ( +/obj/machinery/power/hydromagnetic_trap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAe" = ( +/obj/item/clothing/under/yw/victsuit/victdress/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAh" = ( +/obj/item/weapon/storage/backpack/saddlebag_common/vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAk" = ( +/obj/item/clothing/under/mbill_flight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAo" = ( +/obj/item/toy/plushie/therapy/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAx" = ( +/obj/item/weapon/gun/energy/crossbow/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAE" = ( +/obj/structure/bed/chair/sofa/corner/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAF" = ( +/obj/item/clothing/mask/horsehead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAN" = ( +/obj/item/weapon/reagent_containers/food/snacks/mysterysoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bAX" = ( +/obj/item/clothing/head/chaplain_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBc" = ( +/obj/item/clothing/accessory/permit/gun/planetside, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBi" = ( +/obj/machinery/vending/virtual_autodrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBt" = ( +/obj/item/mecha_parts/component/gas/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBy" = ( +/obj/machinery/vending/event/gadget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBB" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBD" = ( +/obj/item/clothing/mask/smokable/pipe/bonepipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBG" = ( +/obj/item/clothing/head/utility/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBM" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBO" = ( +/obj/structure/closet/lasertag/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBQ" = ( +/obj/item/clothing/under/dress/gothic2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBS" = ( +/obj/item/weapon/sword/fluff/joanaria/scisword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBW" = ( +/obj/item/clothing/accessory/scarf/lightblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bBZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/gin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCa" = ( +/obj/item/clothing/under/pants/mustangjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCd" = ( +/obj/item/clothing/under/rank/medical/scrubs/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCj" = ( +/obj/item/clothing/under/rank/trek/sec/next, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCl" = ( +/obj/item/integrated_circuit/transfer/multiplexer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCm" = ( +/obj/item/clothing/under/suit_jacket/female/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCp" = ( +/obj/item/weapon/rig/vox/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCs" = ( +/obj/item/trash/squid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCt" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "14" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCw" = ( +/obj/item/ammo_magazine/smartgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCx" = ( +/obj/item/seeds/tomatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCy" = ( +/obj/item/clothing/head/culthood/magus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bCL" = ( +/mob/living/simple_mob/humanoid/pirate/ranged/handcannon/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bDd" = ( +/obj/item/clothing/under/pants/utility/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDj" = ( +/obj/item/weapon/silencer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDk" = ( +/obj/item/clothing/gloves/arm_guard/flexitac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDt" = ( +/obj/item/clothing/suit/armor/reactive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDF" = ( +/obj/machinery/meter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDK" = ( +/obj/item/weapon/soap/space_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDU" = ( +/obj/item/clothing/under/teshari/smock/blackutility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bDV" = ( +/obj/item/clothing/accessory/collar/casinoslave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEd" = ( +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEk" = ( +/obj/item/clothing/suit/space/void/security/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEr" = ( +/obj/item/trash/meatration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEs" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEx" = ( +/obj/item/clothing/head/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEE" = ( +/obj/item/weapon/circuitboard/mecha/imperion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEF" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/vityaz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bEL" = ( +/mob/living/simple_mob/vore/aggressive/chungus{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bEM" = ( +/obj/structure/bed/chair/shuttle_padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFe" = ( +/obj/item/capture_crystal/teppi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFn" = ( +/obj/item/weapon/digestion_remains/skull/unknown/anthro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFr" = ( +/obj/item/weapon/bedsheet/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFt" = ( +/obj/item/weapon/storage/firstaid/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFy" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bFO" = ( +/obj/item/clothing/under/rank/khi/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGh" = ( +/obj/item/weapon/anodevice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGl" = ( +/obj/item/clothing/accessory/armband/med/color/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGu" = ( +/obj/item/clothing/head/helmet/fluff/techpriesthead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGz" = ( +/obj/machinery/door/airlock/angled_tgmc/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGC" = ( +/obj/item/mecha_parts/component/armor/military/marauder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGJ" = ( +/obj/item/stack/tile/floor/eris/white/bluecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGP" = ( +/obj/item/weapon/reagent_containers/pill/diet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGT" = ( +/mob/living/simple_mob/humanoid/cultist/caster{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bGW" = ( +/obj/item/clothing/suit/armor/pcarrier/laserproof/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGX" = ( +/obj/item/weapon/material/knife/butch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGY" = ( +/obj/item/clothing/head/wizard/marisa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bGZ" = ( +/obj/item/clothing/head/helmet/space/void/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHd" = ( +/obj/item/clothing/accessory/armband/solgov/ma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHh" = ( +/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHj" = ( +/obj/machinery/gateway{ + dir = 8 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHo" = ( +/obj/structure/barricade/cutout/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHw" = ( +/obj/item/weapon/tank/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHy" = ( +/obj/item/ammo_magazine/mfoam_dart/smg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHE" = ( +/obj/item/weapon/reagent_containers/glass/bottle/robustharvest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHF" = ( +/obj/item/trash/ramen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHL" = ( +/obj/structure/largecrate/animal/otie/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHN" = ( +/obj/item/trash/appleberry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHO" = ( +/obj/item/clothing/under/swimsuit/stripper/stripper_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bHR" = ( +/obj/item/weapon/cell/device/weapon/recharge/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIa" = ( +/obj/item/weapon/storage/toolbox/lunchbox/nymph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIl" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIm" = ( +/obj/item/inflatable/door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIr" = ( +/obj/item/clothing/glasses/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIv" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIz" = ( +/obj/item/device/defib_kit/compact/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIC" = ( +/obj/item/clothing/under/rank/nullsuit/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIF" = ( +/mob/living/simple_mob/horror/TinyTim{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bIJ" = ( +/obj/item/weapon/storage/box/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIO" = ( +/obj/item/weapon/circuitboard/mecha/honker/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIQ" = ( +/obj/item/weapon/rig/ch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIS" = ( +/obj/item/clothing/accessory/armor/tag/solgov/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIT" = ( +/obj/item/weapon/storage/box/dosimeter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bIV" = ( +/obj/item/clothing/under/disheveled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJe" = ( +/obj/machinery/vending/deathmatch/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJg" = ( +/obj/item/clothing/head/hasturhood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJi" = ( +/obj/item/shield_projector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJl" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJp" = ( +/obj/item/clothing/suit/bio_suit/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJx" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJz" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/red_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJD" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJF" = ( +/obj/structure/closet/debug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJM" = ( +/obj/item/weapon/circuitboard/security/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJN" = ( +/obj/item/seeds/pitcherseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJS" = ( +/obj/item/weapon/commcard/mercenary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJT" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fivearrows, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bJV" = ( +/obj/item/ammo_magazine/m762/ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKa" = ( +/obj/item/clothing/under/suit_jacket/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKe" = ( +/obj/item/clothing/suit/armor/combat/imperial/centurion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKf" = ( +/obj/machinery/door/blast/gate/thin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKj" = ( +/obj/item/clothing/shoes/boots/cowboy/snakeskin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKw" = ( +/obj/item/slime_extract/emerald, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKx" = ( +/obj/item/weapon/commcard/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKI" = ( +/obj/item/device/encryptionkey/heads/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKJ" = ( +/obj/item/trash/beans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKS" = ( +/obj/item/weapon/reagent_containers/food/snacks/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKT" = ( +/obj/item/stack/tile/carpet/greencarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKX" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/cowbikini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bKY" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLa" = ( +/obj/structure/sign/directions/security/armory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLb" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/britcup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLv" = ( +/obj/item/stack/animalhide/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLB" = ( +/obj/item/clothing/suit/space/void/security/fluff/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLJ" = ( +/obj/item/ammo_magazine/ammo_box/b762/surplus/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLM" = ( +/obj/item/weapon/grown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLP" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/waffles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bLX" = ( +/obj/item/clothing/under/gov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMc" = ( +/obj/item/clothing/suit/storage/hooded/knight/lancelot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMf" = ( +/obj/item/ammo_casing/a12g/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMg" = ( +/obj/item/device/encryptionkey/binary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMh" = ( +/obj/item/toy/plushie/squid/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMm" = ( +/obj/item/clothing/suit/surgicalapron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMs" = ( +/obj/item/weapon/implant/reagent_generator/tempest/mira, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMu" = ( +/obj/structure/closet/secure_closet/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMv" = ( +/obj/item/trash/semki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bML" = ( +/mob/living/simple_mob/animal/passive/cat/bones, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bMQ" = ( +/obj/structure/bed/chair/sofa/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bMU" = ( +/obj/item/clothing/head/helmet/dermal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNl" = ( +/obj/structure/simple_door/hardwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNq" = ( +/obj/item/clothing/under/corp/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNx" = ( +/obj/item/weapon/grenade/spawnergrenade/spesscarp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNy" = ( +/obj/item/ammo_magazine/ammo_box/b762/surplus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNz" = ( +/obj/item/ammo_magazine/m45/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bND" = ( +/obj/item/clothing/accessory/storage/ritualharness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNH" = ( +/obj/item/weapon/casino_platinum_chip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNT" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bNV" = ( +/obj/item/weapon/spellbook/oneuse/knock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOa" = ( +/obj/machinery/power/turbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOd" = ( +/obj/item/weapon/rig/internalaffairs/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOl" = ( +/obj/structure/prop/statue/statue3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOm" = ( +/obj/item/stack/material/leather, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOt" = ( +/obj/item/ammo_magazine/plamya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOv" = ( +/obj/item/clothing/under/dress/fluff/lucinadress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOz" = ( +/obj/item/stack/tile/floor/eris/white/orangecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOB" = ( +/obj/item/ammo_magazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOF" = ( +/obj/item/stack/material/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOG" = ( +/obj/vehicle/train/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOL" = ( +/obj/machinery/gear_dispenser/suit_old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bON" = ( +/obj/machinery/syndicate_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOS" = ( +/obj/item/weapon/book/manual/cook_guide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bOU" = ( +/obj/item/clothing/head/lightrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPf" = ( +/obj/item/clothing/ears/skrell/chain/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPn" = ( +/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPr" = ( +/obj/item/weapon/card/id/event/altcard/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPw" = ( +/obj/item/weapon/weldingtool/experimental/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPx" = ( +/obj/item/trash/ratpackramen/lacquer1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPA" = ( +/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPE" = ( +/obj/mecha/working/hoverpod/shuttlepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPF" = ( +/obj/item/weapon/reagent_containers/food/snacks/pie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPJ" = ( +/obj/item/clothing/under/dress/blacktango, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPN" = ( +/obj/item/weapon/material/sword/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPR" = ( +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPS" = ( +/obj/item/clothing/gloves/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPT" = ( +/obj/item/clothing/under/dress/cropdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPV" = ( +/obj/item/clothing/suit/storage/toggle/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bPY" = ( +/obj/item/weapon/toy/partypopper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQd" = ( +/obj/structure/bed/chair/sofa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQv" = ( +/obj/item/clothing/under/color/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQy" = ( +/obj/item/ammo_magazine/a57/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQK" = ( +/obj/item/weapon/dnainjector/hallucination, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQL" = ( +/obj/structure/bed/chair/bay/comfy/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQM" = ( +/obj/machinery/suit_cycler/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQW" = ( +/obj/item/clothing/accessory/collar/casinosentientprize_fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bQY" = ( +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bRc" = ( +/obj/item/clothing/under/soviet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bRw" = ( +/obj/structure/bed/chair/bar_stool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bRK" = ( +/obj/item/weapon/flag/xcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bRR" = ( +/obj/item/clothing/accessory/armor/legguards/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bRZ" = ( +/obj/item/clothing/suit/space/void/excelsior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSb" = ( +/obj/machinery/power/smes/batteryrack/mapped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSn" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSp" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon/oven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSq" = ( +/obj/item/weapon/key/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSt" = ( +/obj/item/weapon/computer_hardware/hard_drive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSx" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/amasec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSD" = ( +/obj/machinery/vending/wardrobe/medidrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSG" = ( +/obj/structure/bed/chair/sofa/right/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSI" = ( +/obj/item/clothing/head/utility/army/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSM" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/nrti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bST" = ( +/obj/structure/prop/blackbox/quarantined_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSW" = ( +/obj/item/clothing/head/justice/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bSY" = ( +/obj/item/weapon/circuitboard/operating, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTk" = ( +/obj/item/weapon/storage/box/samplebags, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTv" = ( +/obj/item/clothing/under/rank/virologist/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTA" = ( +/obj/item/weapon/clipboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTD" = ( +/obj/item/clothing/head/helmet/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTG" = ( +/obj/structure/bed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTH" = ( +/obj/item/clothing/accessory/hawaiian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTL" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTM" = ( +/obj/item/clothing/suit/wizrobe/marisa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTN" = ( +/obj/item/weapon/sample/fibers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTO" = ( +/obj/structure/sign/directions/security/seceqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bTR" = ( +/obj/machinery/door/airlock/multi_tile/glass/polarized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUd" = ( +/obj/item/seeds/peppercornseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUl" = ( +/obj/item/clothing/gloves/arm_guard/combat/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUm" = ( +/obj/item/clothing/under/space, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUz" = ( +/obj/machinery/cryopod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUA" = ( +/obj/item/weapon/reagent_containers/food/snacks/tofurkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUD" = ( +/obj/item/stack/tile/carpet/blucarpet2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUM" = ( +/obj/item/ammo_magazine/ammo_box/b10mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUT" = ( +/obj/item/weapon/rig/focalpoint/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUX" = ( +/obj/machinery/power/grounding_rod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUY" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/rosewood_weathered, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bUZ" = ( +/obj/item/clothing/accessory/badge/sheriff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVa" = ( +/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVe" = ( +/obj/machinery/vending/loadout/accessory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVi" = ( +/obj/structure/barricade/cutout/new_servant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVk" = ( +/obj/item/clothing/accessory/badge/corporate_tag/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVm" = ( +/obj/item/weapon/gun/projectile/fluff/m1911, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVw" = ( +/obj/structure/closet/firecloset/full/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVB" = ( +/obj/item/ammo_magazine/s357/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVF" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVJ" = ( +/obj/machinery/floodlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVL" = ( +/obj/item/clothing/shoes/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVM" = ( +/obj/item/clothing/suit/space/vox/civ/trader/carapace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVN" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVO" = ( +/obj/item/device/encryptionkey/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVS" = ( +/obj/item/weapon/soap/white_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bVZ" = ( +/obj/item/weapon/material/fishing_rod/modern/strong, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWn" = ( +/obj/item/clothing/head/syndicatefake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWx" = ( +/obj/item/weapon/shovel/spade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWz" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWF" = ( +/obj/item/seeds/durian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWH" = ( +/obj/item/weapon/gun/projectile/cell_loaded/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWM" = ( +/obj/machinery/chemical_dispenser/ert/specialops, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/candy/donor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWW" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWX" = ( +/obj/item/stack/tile/floor/eris/steel/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bWZ" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXf" = ( +/obj/item/weapon/gun/projectile/revolver/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXj" = ( +/obj/item/ammo_casing/a762x39, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXx" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXC" = ( +/obj/structure/bed/chair/oldsofa/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXG" = ( +/obj/item/clothing/head/helmet/space/vox/civ/science/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXH" = ( +/obj/item/weapon/circuitboard/prisoner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXL" = ( +/obj/item/weapon/circuitboard/teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bXP" = ( +/obj/item/weapon/storage/backpack/hydroponics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYc" = ( +/obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYi" = ( +/obj/item/clothing/head/hood/winter/cargo/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYj" = ( +/obj/item/weapon/implantcase/sprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYm" = ( +/mob/living/simple_mob/animal/passive/armadillo{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"bYo" = ( +/obj/item/weapon/commcard/medical/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYq" = ( +/obj/structure/closet/bombcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYs" = ( +/obj/item/clothing/under/dress/maid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYG" = ( +/obj/item/device/electronic_assembly/hook, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYI" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYN" = ( +/obj/item/clothing/head/hardhat/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYP" = ( +/obj/item/weapon/reagent_containers/food/snacks/redcurry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYR" = ( +/obj/item/weapon/commcard/head/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYU" = ( +/obj/structure/prop/machine/solifier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYV" = ( +/obj/item/trash/weebonuts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYX" = ( +/obj/machinery/shield_gen/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bYY" = ( +/obj/item/ammo_magazine/akm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZg" = ( +/obj/item/weapon/fuel_assembly/tritium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZh" = ( +/obj/item/weapon/reagent_containers/food/snacks/plumpburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZk" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZn" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZx" = ( +/obj/structure/sign/levels/medical/medeqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZz" = ( +/obj/machinery/door/airlock/angled_bay/standard/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZJ" = ( +/obj/item/clothing/mask/nock_scarab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZL" = ( +/obj/item/clothing/shoes/tribalwear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZR" = ( +/obj/structure/bed/chair/sofa/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZT" = ( +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"bZX" = ( +/obj/item/clothing/head/helmet/combat/crusader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caa" = ( +/obj/item/rig_module/mounted/egun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cab" = ( +/obj/item/weapon/key/cargo_train, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caf" = ( +/obj/item/trash/cigbutt/cigarbutt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caj" = ( +/obj/item/weapon/rig/merc/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cal" = ( +/obj/item/clothing/ears/earring/dangle/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cam" = ( +/obj/item/weapon/cell/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cao" = ( +/obj/item/integrated_circuit/transfer/pulsedemultiplexer/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cat" = ( +/obj/machinery/button/remote/airlock/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caC" = ( +/obj/item/weapon/ore/rutile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caD" = ( +/obj/item/weapon/book/manual/mass_spectrometry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caE" = ( +/obj/item/weapon/cartridge/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caH" = ( +/obj/machinery/door/airlock/angled_tgmc/prep/prep_bravo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caR" = ( +/obj/item/mecha_parts/chassis/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caT" = ( +/obj/item/clothing/suit/storage/det_trench/alt/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caW" = ( +/obj/item/weapon/handcuffs/cable/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"caX" = ( +/obj/item/weapon/gun/energy/taser/xeno/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbc" = ( +/obj/item/clothing/under/fluff/techpriestunder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbg" = ( +/obj/item/clothing/under/teshari/smock/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbi" = ( +/obj/structure/sign/scenery/engineright, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbo" = ( +/obj/item/stack/medical/advanced/bruise_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbq" = ( +/obj/item/weapon/storage/bag/ore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbw" = ( +/obj/machinery/button/remote/shields, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbJ" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbR" = ( +/obj/item/clothing/head/ushanka/alt/fluff/Jaree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbT" = ( +/obj/structure/largecrate/vehicle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbU" = ( +/obj/item/weapon/soap/red_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cbW" = ( +/obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccf" = ( +/obj/item/integrated_circuit/power/transmitter/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccg" = ( +/obj/item/device/encryptionkey/heads, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccx" = ( +/obj/item/flag/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccy" = ( +/obj/structure/prop/war/tgmc_missile_rack/fatty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccD" = ( +/mob/living/simple_mob/animal/passive/bird/azure_tit, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ccE" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccJ" = ( +/obj/item/clothing/head/beret/medical/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccQ" = ( +/obj/item/clothing/under/rank/cargotech/jeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ccS" = ( +/obj/item/clothing/under/altevian/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdh" = ( +/obj/item/clothing/head/helmet/combat/imperial/centurion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdo" = ( +/obj/machinery/door/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdw" = ( +/obj/item/seeds/pineapple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdy" = ( +/obj/item/clothing/suit/space/void/engineering/salvage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdB" = ( +/obj/machinery/suit_cycler/vintage/rugged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdD" = ( +/obj/item/ammo_magazine/m9mm/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cdN" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/pirate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cdP" = ( +/obj/item/seeds/libertymycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ceb" = ( +/obj/item/seeds/reishimycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cec" = ( +/obj/item/weapon/melee/changeling/arm_blade/greater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cef" = ( +/obj/item/clothing/suit/armor/vest/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cen" = ( +/obj/item/clothing/head/beret/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cet" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tramadol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cew" = ( +/obj/item/weapon/implanter/reagent_generator/rischi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ceA" = ( +/obj/item/clothing/under/rank/security/fluff/skinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ceC" = ( +/obj/item/weedkiller/D24, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ceD" = ( +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ceP" = ( +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cff" = ( +/obj/item/ammo_magazine/ammo_box/b545/large/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfh" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cfo" = ( +/obj/item/weapon/rig/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfq" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfs" = ( +/obj/machinery/gateway{ + dir = 5 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfw" = ( +/obj/item/weapon/photo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfC" = ( +/obj/machinery/recycling/sorter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfE" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfJ" = ( +/obj/item/clothing/head/shiny_hood/closed/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfQ" = ( +/obj/item/toy/xmastree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cfR" = ( +/obj/item/stack/material/log, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cge" = ( +/obj/machinery/door/firedoor/glass/hidden/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgi" = ( +/obj/item/seeds/jurlmah, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgm" = ( +/obj/item/clothing/under/excelsior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgo" = ( +/obj/item/mecha_parts/component/gas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgu" = ( +/obj/item/weapon/dnainjector/noprints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgw" = ( +/obj/item/clothing/accessory/asymovercoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgH" = ( +/obj/item/weapon/material/twohanded/saber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgL" = ( +/obj/item/clothing/head/taqiyah/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgR" = ( +/obj/item/weapon/storage/box/wings/tray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgV" = ( +/obj/item/clothing/suit/dress/solgov/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgX" = ( +/obj/item/weapon/shield/energy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cgY" = ( +/obj/item/clothing/suit/wizrobe/magusred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chd" = ( +/obj/item/clothing/suit/space/void/refurb/mining/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"che" = ( +/obj/item/weapon/storage/box/fluff/kelplague, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chk" = ( +/obj/item/clothing/under/fluff/latexmaid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chs" = ( +/obj/item/clothing/head/beanie_loose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chv" = ( +/obj/item/mecha_parts/mecha_equipment/gravcatapult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chw" = ( +/obj/item/clothing/suit/storage/hooded/costume/carp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chA" = ( +/obj/item/weapon/ore/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chJ" = ( +/obj/item/toy/plushie/borgplushie/drake/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chM" = ( +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chO" = ( +/obj/item/weapon/storage/belt/utility/chief/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chQ" = ( +/obj/item/weapon/gun/energy/mouseray/rabbit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chU" = ( +/obj/item/weapon/rig/zero, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"chZ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/decafchai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cic" = ( +/obj/item/clothing/accessory/jacket/altevian/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cid" = ( +/obj/item/weapon/grenade/spawnergrenade/manhacks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cio" = ( +/obj/item/weapon/circuitboard/machine/reg_c, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cip" = ( +/obj/item/weapon/book/manual/anomaly_spectroscopy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cis" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciw" = ( +/obj/item/clothing/head/helmet/fluff/freddy/foxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciA" = ( +/obj/item/weapon/reagent_containers/spray/pepper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciG" = ( +/obj/item/clothing/accessory/poncho/roles/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciK" = ( +/mob/living/simple_mob/vore/woof/hostile/aweful/melee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ciN" = ( +/obj/item/clothing/glasses/graviton/medgravpatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciQ" = ( +/obj/structure/sign/department/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciR" = ( +/obj/item/modular_computer/telescreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciU" = ( +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ciY" = ( +/obj/item/slime_extract/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cja" = ( +/obj/item/weapon/grenade/empgrenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjc" = ( +/obj/item/weapon/stamp/denied, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjh" = ( +/obj/item/clothing/suit/storage/explorer/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cji" = ( +/mob/living/simple_mob/animal/sif/leech{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cjk" = ( +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjq" = ( +/obj/item/clothing/under/solgov/utility/army/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjs" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjC" = ( +/obj/item/weapon/coin/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjN" = ( +/obj/item/ammo_magazine/clip/c545, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjO" = ( +/obj/item/weapon/storage/backpack/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjS" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjW" = ( +/obj/item/weapon/card/id/civilian/service/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjX" = ( +/obj/machinery/atmospherics/tvalve/digital/bypass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cjZ" = ( +/obj/item/weapon/material/snow/snowball/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cke" = ( +/obj/item/rig_module/grenade_launcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckf" = ( +/obj/item/weapon/broken_gun/ionrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckr" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckA" = ( +/obj/machinery/casino_chip_exchanger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckE" = ( +/obj/item/weapon/circuitboard/machine/abductor/core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckG" = ( +/obj/item/trash/candychunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ckS" = ( +/obj/item/weapon/storage/bag/plants, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clf" = ( +/obj/structure/sign/directions/tram, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clo" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clp" = ( +/obj/item/clothing/shoes/tourist_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cls" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clv" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clx" = ( +/obj/item/weapon/dnainjector/tourmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clB" = ( +/obj/item/weapon/storage/belt/fannypack/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clD" = ( +/obj/item/weapon/surgical/circular_saw/manager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clE" = ( +/mob/living/simple_mob/mechanical/viscerator/mercenary{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"clJ" = ( +/obj/item/weapon/bedsheet/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clO" = ( +/obj/item/ammo_magazine/ammo_box/b762/surplus/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"clX" = ( +/obj/item/clothing/under/teshari/smock/formal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cme" = ( +/obj/item/weapon/reagent_containers/food/snacks/quicheslice/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cml" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dermaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmm" = ( +/obj/item/trash/raisins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmw" = ( +/obj/item/clothing/under/tropical/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmA" = ( +/obj/item/clothing/suit/storage/toggle/light_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmC" = ( +/obj/item/clothing/head/beret/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmG" = ( +/obj/item/clothing/head/hood/winter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmN" = ( +/obj/item/weapon/storage/toolbox/lunchbox/survival/zaddat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmO" = ( +/obj/structure/sign/levels/shuttle_bay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmP" = ( +/obj/item/clothing/under/undersuit/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmQ" = ( +/obj/machinery/mineral/unloading_machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cmW" = ( +/obj/item/organ/internal/brain/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnb" = ( +/obj/item/clothing/head/helmet/space/void/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnl" = ( +/obj/item/clothing/suit/poncho, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cno" = ( +/obj/item/weapon/implanter/reagent_generator/tempest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnt" = ( +/obj/mecha/combat/marauder/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnw" = ( +/obj/structure/table/rack/holorack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnz" = ( +/obj/item/clothing/suit/kimono/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnA" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnC" = ( +/obj/item/integrated_circuit/output/led/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnE" = ( +/obj/item/weapon/melee/fluff/holochain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnH" = ( +/obj/item/clothing/head/bio_hood/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnN" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratpackcheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnO" = ( +/obj/item/modular_computer/console/preset/mercenary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnR" = ( +/obj/item/weapon/tank/jetpack/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnV" = ( +/obj/item/device/flashlight/glowstick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cnX" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cob" = ( +/obj/item/clothing/under/lawyer/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cof" = ( +/obj/item/clothing/under/rank/atmospheric_technician/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"coh" = ( +/obj/item/weapon/storage/pouch/eng_supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cop" = ( +/mob/living/simple_mob/humanoid/pirate/mate/ranged/bosun{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cou" = ( +/obj/item/clothing/head/pin/clover, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cov" = ( +/obj/machinery/shipsensors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"coG" = ( +/obj/item/weapon/reagent_containers/pill/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"coQ" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cpi" = ( +/obj/structure/sign/signnew/corrosives, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cpw" = ( +/obj/item/mecha_parts/part/scarab_right_legs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cpF" = ( +/obj/structure/timer_door/fifteen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cpL" = ( +/obj/item/clothing/suit/storage/hooded/techpriest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cpQ" = ( +/obj/item/clothing/under/undersuit/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cpY" = ( +/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cqb" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqm" = ( +/obj/item/clothing/under/yw/rank/security/brigphys/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqq" = ( +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqs" = ( +/obj/item/toy/plushie/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqu" = ( +/obj/item/seeds/lavenderseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqz" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqA" = ( +/obj/item/clothing/gloves/arm_guard/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqI" = ( +/obj/item/weapon/card/id/event/altcard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqK" = ( +/obj/item/clothing/head/helmet/space/void/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqM" = ( +/obj/item/clothing/under/teshari/undercoat/standard/purple_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqO" = ( +/obj/item/integrated_circuit/output/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqR" = ( +/obj/item/weapon/storage/box/lights/mixed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cqV" = ( +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crb" = ( +/obj/item/stack/tile/wood/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crc" = ( +/obj/item/ammo_magazine/m762enbloc/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cri" = ( +/obj/structure/sign/goldenplaque, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crl" = ( +/mob/living/simple_mob/horror/Willy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"crs" = ( +/mob/living/simple_mob/humanoid/pirate/captain{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"crE" = ( +/obj/structure/prop/machine/conduit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crG" = ( +/obj/machinery/light/small/poi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crM" = ( +/obj/structure/particle_accelerator/particle_emitter/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crT" = ( +/obj/structure/closet/secure_closet/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"crW" = ( +/obj/item/clothing/suit/space/vox/civ/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csd" = ( +/obj/item/ammo_magazine/m9mml, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csh" = ( +/obj/structure/ghost_pod/ghost_activated/maintpred/no_announce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csn" = ( +/obj/item/weapon/bone/skull/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cso" = ( +/obj/machinery/chemical_dispenser/bar_alc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csC" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"csE" = ( +/obj/structure/reagent_dispensers/virusfood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csK" = ( +/obj/item/clothing/accessory/armor/tag/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csL" = ( +/obj/item/clothing/under/sexyclown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"csY" = ( +/obj/item/ammo_magazine/ammo_box/foam/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cta" = ( +/obj/item/clothing/suit/storage/hooded/hoodie/redtrim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctb" = ( +/obj/machinery/readybutton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctd" = ( +/obj/item/device/flashlight/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctp" = ( +/obj/item/weapon/gun/energy/lasertag/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cts" = ( +/obj/item/clothing/shoes/boots/duty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctD" = ( +/obj/item/clothing/suit/storage/hooded/chaplain_hoodie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctI" = ( +/obj/item/organ/internal/augment/armmounted/shoulder/surge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctT" = ( +/obj/item/clothing/under/croptop/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctV" = ( +/obj/item/instrument/violin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ctX" = ( +/obj/item/device/juke_remote, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuf" = ( +/obj/item/weapon/circuitboard/prosthetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cug" = ( +/obj/structure/sign/warning/emergence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cup" = ( +/obj/item/weapon/mine/training, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuq" = ( +/obj/item/weapon/circuitboard/shield_gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuz" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuE" = ( +/obj/item/weapon/melee/energy/sword/charge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuF" = ( +/obj/item/clothing/ears/skrell/band/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuL" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuU" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuW" = ( +/obj/structure/sign/bigname, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cuY" = ( +/obj/item/clothing/accessory/armor/tag/solgov/com/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cve" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cvm" = ( +/obj/item/weapon/storage/bag/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvp" = ( +/obj/item/clothing/head/beret/engineering/ce/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvq" = ( +/obj/item/toy/figure/roach, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvA" = ( +/obj/item/clothing/under/shiny/catsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvF" = ( +/obj/item/weapon/surgical/FixOVein/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvJ" = ( +/obj/item/toy/figure/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvV" = ( +/obj/item/clothing/shoes/boots/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvW" = ( +/obj/item/device/mmi/digital/posibrain/nano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cvY" = ( +/obj/item/weapon/implanter/reagent_generator/jasmine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwc" = ( +/obj/item/weapon/dice/d20, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwd" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/icetea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwe" = ( +/obj/item/stack/tile/linoleum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwi" = ( +/obj/machinery/microwave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwl" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cwr" = ( +/obj/item/clothing/under/color/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwt" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "15" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cww" = ( +/obj/item/pipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwz" = ( +/obj/item/clothing/accessory/badge/corporate_tag/morpheus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwA" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwC" = ( +/obj/item/clothing/accessory/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwI" = ( +/obj/item/mecha_parts/mecha_equipment/tool/orescanner/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwK" = ( +/obj/machinery/atmospherics/pipe/tank/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cwR" = ( +/obj/structure/closet/crate/gilthari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxb" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxg" = ( +/obj/item/weapon/rig/pmc/security/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxx" = ( +/obj/item/clothing/under/dress/sundress_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxy" = ( +/obj/machinery/suit_cycler/vintage/tcrew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxz" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxE" = ( +/obj/machinery/smartfridge/tcrystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxF" = ( +/obj/machinery/computer/mecha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxG" = ( +/mob/living/simple_mob/humanoid/merc/ranged/poi{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cxJ" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxK" = ( +/obj/item/clothing/under/rank/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxN" = ( +/obj/item/clothing/shoes/black/cuffs/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxR" = ( +/obj/machinery/door/airlock/external, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxS" = ( +/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cxU" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyi" = ( +/obj/structure/reflector/single, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyu" = ( +/obj/item/clothing/head/cowboy/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyx" = ( +/obj/item/stack/medical/crude_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyy" = ( +/obj/item/clothing/shoes/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyB" = ( +/obj/structure/bed/chair/oldsofa/corner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyG" = ( +/obj/machinery/station_map, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyH" = ( +/obj/item/trash/spacer_cake_wrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyI" = ( +/obj/item/toy/plushie/squid/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyQ" = ( +/obj/item/clothing/suit/wizrobe/gentlecoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cyV" = ( +/obj/item/clothing/under/solgov/mildress/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czb" = ( +/obj/item/weapon/stock_parts/scanning_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czj" = ( +/obj/item/stack/material/log/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czm" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czn" = ( +/obj/item/seeds/blackwabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czw" = ( +/obj/item/slimepotion/feeding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czA" = ( +/obj/structure/grille/rustic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czJ" = ( +/obj/item/clothing/shoes/magboots/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"czR" = ( +/obj/item/device/bluespaceradio/tether_prelinked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAc" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAj" = ( +/obj/item/clothing/suit/storage/apron/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAm" = ( +/obj/mecha/working/ripley/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAn" = ( +/obj/machinery/smartfridge/secure/medbay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAt" = ( +/obj/item/clothing/accessory/solgov/fleet_patch/fifth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAu" = ( +/obj/structure/sign/directions/security/forensics/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAv" = ( +/obj/item/weapon/kinetic_crusher/machete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAB" = ( +/obj/item/trash/spinach, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAF" = ( +/obj/item/weapon/mine/dnascramble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAH" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAN" = ( +/obj/item/mecha_parts/mecha_equipment/omni_shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAP" = ( +/obj/machinery/smartfridge/drinks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cAQ" = ( +/obj/machinery/chemical_dispenser/bar_soft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBb" = ( +/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBi" = ( +/obj/item/toy/plushie/therapy/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBq" = ( +/obj/item/stack/rods{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBt" = ( +/mob/living/simple_mob/animal/giant_spider/thermic{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cBu" = ( +/obj/item/weapon/gun/projectile/pistol/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBx" = ( +/obj/item/weapon/handcuffs/cable/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBC" = ( +/obj/machinery/atmospherics/pipe/tank/air/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBE" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBF" = ( +/obj/item/weapon/circuitboard/id_restorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBL" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/honk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBR" = ( +/obj/item/clothing/under/solgov/utility/fleet/combat/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cBV" = ( +/obj/structure/table/sifwooden_reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCa" = ( +/obj/item/clothing/accessory/armor/tag/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCo" = ( +/obj/item/weapon/storage/backpack/messenger/black/fluff/briana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCr" = ( +/obj/item/device/floor_painter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCu" = ( +/obj/item/clothing/head/helmet/space/vox/civ/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCC" = ( +/obj/item/clothing/gloves/combat/knight_costume/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCL" = ( +/obj/machinery/newscaster/security_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCM" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCN" = ( +/obj/item/weapon/implant/fluff/coda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCQ" = ( +/obj/item/ammo_casing/a127x108, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCR" = ( +/obj/machinery/atm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCU" = ( +/obj/item/clothing/suit/nun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cCY" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/arithrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDe" = ( +/obj/structure/bookcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDi" = ( +/obj/item/ammo_magazine/ak74, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDj" = ( +/obj/structure/prop/machine/tradebeacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDo" = ( +/obj/item/weapon/material/knife/tacknife/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDu" = ( +/obj/item/toy/character/cleric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDw" = ( +/obj/item/seeds/rhubarb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDx" = ( +/obj/item/weapon/gun/launcher/scopedrocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDy" = ( +/obj/item/clothing/suit/storage/fluff/jacket/field, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDD" = ( +/obj/structure/sign/scenery/overlay/vine/mid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDP" = ( +/obj/structure/fans/tiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDT" = ( +/obj/item/clothing/shoes/leg_guard/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDY" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cDZ" = ( +/obj/item/trash/mooncakewrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEb" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEd" = ( +/obj/item/weapon/card/id/science/roboticist/dummy_cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEm" = ( +/obj/item/stack/material/lead{ + amount = 30 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEo" = ( +/obj/item/weapon/arrow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEy" = ( +/obj/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEC" = ( +/obj/machinery/door/airlock/glass_mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cED" = ( +/obj/item/clothing/accessory/armor/tag/solgov/ec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEO" = ( +/obj/item/clothing/under/dress/red_swept_dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cES" = ( +/obj/item/clothing/under/skirt/colorable/pleated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEU" = ( +/obj/item/weapon/fluff/injector/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cEV" = ( +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFc" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFf" = ( +/obj/structure/sign/flag/fivearrows/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFn" = ( +/obj/item/clothing/head/helmet/space/void/exploration/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFD" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFS" = ( +/obj/item/organ/internal/liver/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFU" = ( +/obj/item/clothing/under/pants/classicjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cFX" = ( +/obj/item/weapon/storage/box/casino/costume_chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGa" = ( +/obj/structure/bed/chair/janicart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGb" = ( +/obj/vehicle/train/rover/trolley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGc" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGd" = ( +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGe" = ( +/obj/item/clothing/under/solgov/utility/fleet/combat/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGh" = ( +/obj/item/weapon/ore/bluespace_crystal/artificial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGk" = ( +/obj/item/clothing/suit/space/vox/civ/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGp" = ( +/obj/item/clothing/accessory/collar/fluff/aroozee_valhollide_ring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGu" = ( +/obj/item/ammo_magazine/m95, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGD" = ( +/obj/item/weapon/thecake_layer/five, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGI" = ( +/obj/item/ammo_magazine/tp23s/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGK" = ( +/obj/item/weapon/light/tube/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cGX" = ( +/obj/machinery/door/airlock/glass_engineeringatmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cHm" = ( +/obj/item/clothing/suit/storage/apron/overalls, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cHz" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cHI" = ( +/obj/machinery/appliance/mixer/cereal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cHK" = ( +/obj/machinery/chemical_synthesizer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cHO" = ( +/obj/item/clothing/shoes/fluff/nikki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIa" = ( +/obj/item/weapon/tank/oxygen/onetankbomb/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIc" = ( +/obj/item/integrated_circuit/reagent/storage/scan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIh" = ( +/obj/machinery/vending/event/food, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIz" = ( +/obj/item/weapon/soap/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIA" = ( +/obj/item/clothing/head/woodcirclet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIB" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cID" = ( +/obj/item/weapon/gun/energy/modular/carbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIH" = ( +/obj/item/weapon/melee/chainofcommand/curator_whip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIT" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIU" = ( +/obj/item/ammo_magazine/clip/c45/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cIV" = ( +/mob/living/simple_mob/mobs_monsters/clowns/mutant{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cIX" = ( +/obj/item/weapon/reagent_containers/food/snacks/aesirsalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJa" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJc" = ( +/obj/machinery/atmospherics/binary/passive_gate/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJh" = ( +/obj/item/stack/material/marble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJn" = ( +/obj/item/clothing/glasses/sunglasses/sechud/tajblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJt" = ( +/obj/item/weapon/broken_gun/flechette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJA" = ( +/obj/item/weapon/storage/box/donkpockets/pizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJD" = ( +/obj/item/toy/mecha/reticence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJJ" = ( +/obj/item/clothing/accessory/solgov/department/research/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJQ" = ( +/obj/structure/bed/chair/sofa/corp/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cJY" = ( +/obj/structure/bed/chair/comfy/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKa" = ( +/obj/item/clothing/glasses/omnihud/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKd" = ( +/obj/item/clothing/head/bio_hood/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKe" = ( +/obj/item/clothing/suit/storage/vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKf" = ( +/obj/item/device/healthanalyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKn" = ( +/obj/item/rig_module/grenade_launcher/metalfoam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKq" = ( +/obj/item/weapon/spell/targeting_matrix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKr" = ( +/obj/item/clothing/suit/storage/flannel/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKu" = ( +/obj/item/clothing/accessory/solgov/department/security/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cKA" = ( +/mob/living/simple_mob/vore/sect_queen{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cKH" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/acid{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cKR" = ( +/obj/item/weapon/gun/projectile/automatic/pdw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLb" = ( +/obj/item/projectile/pummel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLe" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocobanana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLh" = ( +/obj/item/weapon/melee/chainofcommand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLk" = ( +/obj/item/stack/tile/floor/techgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLl" = ( +/obj/structure/largecrate/animal/otie/guardbeast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLy" = ( +/obj/item/weapon/reagent_containers/food/drinks/cup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLB" = ( +/obj/item/weapon/miscdisc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLD" = ( +/obj/item/weapon/broken_gun/silenced45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLH" = ( +/obj/item/weapon/card/id/gold/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLM" = ( +/obj/machinery/door/airlock/glass_command/polarized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLR" = ( +/obj/item/clothing/head/plaguedoctorhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cLW" = ( +/mob/living/simple_mob/animal/passive/snake{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cMe" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/cti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMf" = ( +/obj/structure/fireaxecabinet/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMg" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMi" = ( +/obj/item/weapon/computer_hardware/hard_drive/portable/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMm" = ( +/obj/machinery/robotic_fabricator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cME" = ( +/obj/item/weapon/storage/box/fluff/zara, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMJ" = ( +/obj/structure/sign/hostilefauna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMW" = ( +/obj/item/clothing/mask/nock_ornate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMX" = ( +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cMY" = ( +/obj/structure/closet/bombclosetsecurity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNg" = ( +/obj/item/ammo_magazine/ammo_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNh" = ( +/obj/item/clothing/under/dress/sundress_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNj" = ( +/obj/item/weapon/gun/projectile/revolver/lemat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNl" = ( +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNp" = ( +/obj/item/shield_projector/rectangle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNr" = ( +/obj/structure/reagent_dispensers/beerkeg/fakenuke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNs" = ( +/obj/item/clothing/mask/gas/plaguedoctor/fluff/octaviousmask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNC" = ( +/obj/item/clothing/accessory/armor/helmcover/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNG" = ( +/obj/item/weapon/implant/reagent_generator/vorrarkul, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNM" = ( +/mob/living/simple_mob/slime/xenobio/silver{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cNS" = ( +/obj/machinery/vending/cola/soft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cNT" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOg" = ( +/obj/item/clothing/head/bandana/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOl" = ( +/obj/machinery/oxygen_pump/mobile/anesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOq" = ( +/obj/item/seeds/amauri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOr" = ( +/obj/item/smallDelivery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOz" = ( +/obj/item/stack/tile/floor/concrete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOD" = ( +/obj/item/clothing/accessory/storage/pouches/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOF" = ( +/obj/item/weapon/implantcase/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOP" = ( +/obj/structure/prop/war/minirocket_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOS" = ( +/obj/item/device/suit_cooling_unit/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOT" = ( +/obj/item/clothing/under/rank/talon/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cOX" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPb" = ( +/obj/item/clothing/under/color/fjumpsuit/lightbluef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPe" = ( +/obj/item/weapon/gun/projectile/automatic/tommygun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPf" = ( +/obj/item/clothing/head/soft/sec/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPg" = ( +/obj/item/clothing/accessory/tie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPl" = ( +/obj/item/clothing/head/beret/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPq" = ( +/obj/item/integrated_circuit/passive/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPs" = ( +/obj/item/ammo_casing/a12g, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPu" = ( +/obj/item/weapon/fuel_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPB" = ( +/obj/item/weapon/storage/pill_bottle/tramadol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPF" = ( +/obj/machinery/hyperpad{ + dir = 10 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPG" = ( +/obj/item/toy/figure/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPH" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatbun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPI" = ( +/obj/machinery/door/airlock/glass_science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPN" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPS" = ( +/obj/item/clothing/suit/storage/vest/press, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPT" = ( +/obj/item/clothing/gloves/gauntlets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPW" = ( +/obj/item/seeds/shandseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cPX" = ( +/obj/item/weapon/circuitboard/intercom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQe" = ( +/obj/item/weapon/gun/energy/sizegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQg" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/terra_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQn" = ( +/obj/item/clothing/shoes/clown_shoes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQq" = ( +/obj/structure/bed/chair/sofa/right/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQr" = ( +/obj/structure/sign/department/mail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQs" = ( +/obj/item/weapon/implantcase/shades, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQE" = ( +/obj/item/weapon/flame/lighter/zippo/engraved, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQG" = ( +/obj/machinery/suit_cycler/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQK" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cQS" = ( +/obj/item/clothing/accessory/jacket/modwrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cQY" = ( +/obj/structure/prop/statue/statue4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRb" = ( +/obj/item/clothing/under/dress/dress_cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRc" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRh" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "35" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRk" = ( +/obj/item/clothing/head/bio_hood/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRv" = ( +/obj/item/clothing/suit/armor/yw/blueshieldcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRy" = ( +/obj/item/clothing/shoes/boots/speed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRJ" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRT" = ( +/obj/item/weapon/refill_cartridge/autoname/food/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRV" = ( +/obj/item/weapon/gun/launcher/confetti_cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRW" = ( +/obj/item/weapon/book/manual/nuclear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cRX" = ( +/obj/item/clothing/head/caphat/formal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSj" = ( +/obj/item/seeds/durian, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSt" = ( +/obj/machinery/floorlayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSA" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSC" = ( +/obj/item/pipe/trinary/flippable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSJ" = ( +/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSK" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSL" = ( +/obj/item/clothing/suit/space/vox/civ/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSN" = ( +/obj/item/clothing/under/yw/victsuit/victdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSO" = ( +/obj/item/weapon/storage/backpack/russian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSP" = ( +/mob/living/simple_mob/vore/hostile/morph, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cSR" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag/o8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cSX" = ( +/obj/item/clothing/shoes/skater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTb" = ( +/obj/item/weapon/storage/box/fluff/mauser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTl" = ( +/obj/item/clothing/under/cohesion/decal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTt" = ( +/obj/item/clothing/head/powdered_wig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTw" = ( +/obj/structure/largecrate/animal/sheep, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTx" = ( +/obj/item/slimepotion/enhancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTF" = ( +/obj/structure/loot_pile/mecha/durand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTQ" = ( +/obj/item/weapon/storage/backpack/saddlebag_common/robust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cTR" = ( +/obj/structure/table/marble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUl" = ( +/obj/machinery/iv_drip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUm" = ( +/obj/item/clothing/suit/storage/terran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUw" = ( +/obj/item/weapon/commcard/medical/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUx" = ( +/obj/item/clothing/head/beret/solgov/fleet/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUA" = ( +/obj/item/stack/material/stick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUB" = ( +/obj/item/clothing/glasses/omnihud/prescription/aurora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUG" = ( +/obj/item/weapon/storage/backpack/messenger/engi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUI" = ( +/obj/item/ammo_magazine/m45tommy/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUS" = ( +/mob/living/simple_mob/animal/space/mouse_army/pyro{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cUU" = ( +/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedeng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cUZ" = ( +/obj/item/clothing/suit/armor/tdome/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVo" = ( +/obj/item/weapon/computer_hardware/battery_module/lambda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVr" = ( +/obj/item/clothing/under/croptop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVu" = ( +/obj/item/weapon/fluff/zekewatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVI" = ( +/obj/structure/prop/nest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVM" = ( +/obj/item/organ/internal/brain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVX" = ( +/obj/item/clothing/under/teshari/undercoat/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cVZ" = ( +/obj/item/clothing/suit/hastur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWa" = ( +/obj/item/weapon/material/fishing_rod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWe" = ( +/obj/item/clothing/under/explorer/utility/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWj" = ( +/obj/item/clothing/glasses/night, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWo" = ( +/obj/item/integrated_circuit/transfer/demultiplexer/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWq" = ( +/obj/item/weapon/chainsaw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWw" = ( +/obj/item/weapon/storage/pill_bottle/dice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWz" = ( +/obj/item/weapon/module/power_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWC" = ( +/obj/item/clothing/suit/storage/vest/heavy/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cWL" = ( +/obj/item/clothing/accessory/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXc" = ( +/obj/machinery/photocopier/faxmachine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXf" = ( +/obj/item/clothing/accessory/pride, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXi" = ( +/obj/item/clothing/under/harness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXk" = ( +/obj/item/weapon/handcuffs/cable/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXm" = ( +/obj/item/weapon/card, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXn" = ( +/mob/living/simple_mob/humanoid/pirate/mate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cXo" = ( +/obj/structure/sign/warning/evac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXs" = ( +/obj/machinery/seed_storage/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXu" = ( +/obj/item/weapon/stool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXv" = ( +/obj/item/weapon/aliencoin/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXx" = ( +/obj/item/clothing/under/away/daedalus/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXI" = ( +/obj/item/clothing/suit/space/void/responseteam/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXK" = ( +/obj/item/clothing/gloves/ring/material/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXO" = ( +/obj/item/weapon/storage/backpack/saddlebag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXP" = ( +/obj/item/weapon/gun/energy/taser/mounted/cyborg/swarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXS" = ( +/obj/item/weapon/circuitboard/rdserver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cXX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYa" = ( +/obj/machinery/wish_granter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYb" = ( +/obj/item/weapon/spell/modifier/corona, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYh" = ( +/obj/item/clothing/under/redpyjamas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYo" = ( +/obj/item/clothing/accessory/solgov/department/medical/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYq" = ( +/obj/structure/sign/itg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYC" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ar10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYJ" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"cYM" = ( +/obj/item/weapon/aiModule/freeformcore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cYN" = ( +/obj/item/toy/figure/librarian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZa" = ( +/obj/structure/barricade/cutout/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZg" = ( +/obj/item/clothing/suit/space/void/refurb/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZq" = ( +/obj/item/clothing/head/cakehat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZz" = ( +/obj/machinery/shieldwall{ + dir = 5 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZA" = ( +/obj/machinery/door/airlock/lift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZB" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZC" = ( +/obj/item/weapon/storage/belt/fannypack/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZH" = ( +/obj/structure/sign/directions/science/xenobiology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZO" = ( +/obj/item/weapon/cell/crap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"cZU" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"daa" = ( +/obj/machinery/slot_machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dab" = ( +/obj/item/weapon/toy/snowglobe/snowvillage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dag" = ( +/obj/item/integrated_circuit/illegal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dar" = ( +/obj/item/weapon/disk/body_record, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"daw" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/mad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"daM" = ( +/obj/item/weapon/reagent_containers/food/snacks/sandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"daT" = ( +/obj/item/ammo_casing/a145/spent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"daX" = ( +/obj/item/clothing/under/fluff/mauserunder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbh" = ( +/obj/structure/sign/flag/fivearrows/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbi" = ( +/obj/item/clothing/accessory/badge/holo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbq" = ( +/obj/item/weapon/storage/box/fluff/kettek, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbv" = ( +/obj/item/stack/tile/floor/eris/dark/gray_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbx" = ( +/obj/structure/prop/war/tgmc_30mm/loadedempty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbE" = ( +/obj/item/weapon/rcd_ammo/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbF" = ( +/obj/item/clothing/under/explorer/utility/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbG" = ( +/obj/item/mecha_parts/part/durand_right_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dbI" = ( +/mob/living/simple_mob/mechanical/mecha/odysseus{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dca" = ( +/obj/item/weapon/storage/belt/utility/full/multitool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcf" = ( +/obj/machinery/door/airlock/angled_tgmc/wide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dck" = ( +/obj/item/organ/internal/intestine/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcr" = ( +/obj/item/weapon/pen/crayon/marker/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dct" = ( +/obj/item/weapon/storage/box/frags_half_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcv" = ( +/obj/item/weapon/rig/pmc/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcw" = ( +/obj/structure/dispenser/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcA" = ( +/obj/item/weapon/flame/lighter/zippo/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcF" = ( +/obj/item/integrated_circuit/reagent/smoke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcI" = ( +/obj/item/clothing/accessory/hawaiian/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcL" = ( +/obj/item/clothing/shoes/flats/white/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcT" = ( +/obj/item/weapon/paper/awaygate/snowfield/evacuation_order3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcW" = ( +/obj/item/flag/shadowcoalition, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dcZ" = ( +/obj/structure/morgue/crematorium/vr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddc" = ( +/obj/structure/bed/chair/sofa/right/sif_ora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddd" = ( +/obj/item/clothing/under/modjump3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddf" = ( +/obj/item/clothing/accessory/solgov/specialty/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddh" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddi" = ( +/obj/item/weapon/gun/energy/xray/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddn" = ( +/obj/structure/sign/directions/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddr" = ( +/obj/item/seeds/pitcherseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddu" = ( +/obj/item/weapon/implant/restrainingbolt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddv" = ( +/obj/item/clothing/under/whiterobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddy" = ( +/obj/item/device/holowarrant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddB" = ( +/obj/item/weapon/reagent_containers/food/snacks/xemeatpie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddH" = ( +/mob/living/simple_mob/slime/xenobio/blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ddL" = ( +/obj/item/robot_parts/robot_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddM" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/burger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddR" = ( +/obj/item/weapon/spell/condensation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ddT" = ( +/obj/item/weapon/reagent_containers/pill/vermicetol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"den" = ( +/obj/item/weapon/implanter/compliance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"der" = ( +/obj/item/weapon/rig/industrial/vendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"des" = ( +/obj/item/weapon/material/knife/ritual/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dev" = ( +/obj/structure/closet/secure_closet/security/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dew" = ( +/obj/item/weapon/circuitboard/transhuman_synthprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dex" = ( +/obj/item/weapon/tank/oxygen/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"deE" = ( +/obj/machinery/atmospherics/portables_connector/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"deQ" = ( +/obj/structure/prop/war/warhead4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"deU" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/margherita/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"deX" = ( +/obj/item/seeds/cinnamon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfc" = ( +/obj/item/ammo_magazine/cell_mag/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dff" = ( +/obj/item/clothing/under/sundress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfl" = ( +/obj/item/weapon/spell/instability_tap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfq" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfr" = ( +/obj/item/clothing/under/swimsuit/fluff/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfu" = ( +/obj/item/clothing/mask/gas/fluff/takiramask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfA" = ( +/obj/structure/prop/machine/nt_optable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfC" = ( +/obj/item/weapon/circuitboard/arcade/battle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfE" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfG" = ( +/obj/item/clothing/head/fluff/headbando, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfJ" = ( +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfM" = ( +/obj/item/weapon/gun/energy/mouseray/direwolf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfO" = ( +/obj/item/weapon/reagent_containers/hypospray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dfS" = ( +/obj/item/seeds/carpetseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgd" = ( +/obj/item/weapon/reagent_containers/food/snacks/csandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgf" = ( +/obj/item/weapon/pen/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgg" = ( +/obj/item/resonator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgj" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/old/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgz" = ( +/obj/item/clothing/under/sterile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgB" = ( +/obj/item/clothing/suit/fluff/freddy/bonnie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgD" = ( +/obj/item/clothing/head/helmet/augment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgG" = ( +/obj/item/clothing/head/witchwig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgJ" = ( +/obj/item/weapon/ratvarian_spear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgS" = ( +/obj/item/clothing/head/pin/flower/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgT" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dgW" = ( +/obj/item/ammo_magazine/m545/small/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhf" = ( +/obj/item/weapon/circuitboard/sleeper_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhi" = ( +/obj/item/integrated_circuit/input/EPv2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhn" = ( +/obj/item/projectile/energy/fireball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhr" = ( +/obj/item/slime_extract/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhI" = ( +/mob/living/simple_mob/vore/lamia{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dhL" = ( +/obj/item/pizzabox/pineapple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhN" = ( +/obj/item/weapon/reagent_containers/hypospray/vial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhQ" = ( +/obj/item/weapon/paper/sec_ticket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dhS" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratsteak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"die" = ( +/obj/item/weapon/storage/box/fluff/penelope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dii" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dik" = ( +/obj/item/weapon/circuitboard/microwave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dim" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/blue_edge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"din" = ( +/obj/machinery/light_construct/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dio" = ( +/obj/item/clothing/under/tribalwear/shaman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diy" = ( +/obj/item/ammo_casing/microbattery/medical/brute3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diE" = ( +/obj/item/clothing/under/dress/white4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diG" = ( +/obj/item/clothing/head/cardborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diH" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/guac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diJ" = ( +/obj/item/clothing/suit/storage/duster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diK" = ( +/obj/item/clothing/head/soft/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diO" = ( +/obj/machinery/atmospherics/unary/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diU" = ( +/obj/item/weapon/gun/projectile/revolver/capgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"diY" = ( +/obj/item/clothing/shoes/boots/winter/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djb" = ( +/obj/machinery/door/airlock/alarmlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djf" = ( +/obj/item/clothing/head/hijab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djt" = ( +/obj/item/weapon/disk/limb/dsi_fennec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djw" = ( +/obj/machinery/clonepod/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djz" = ( +/obj/item/ammo_magazine/m10mm/pistol/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djE" = ( +/obj/item/ammo_magazine/m12gdrumjack/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djF" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djG" = ( +/obj/item/device/electronic_assembly/clam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djN" = ( +/obj/item/slime_extract/amber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djO" = ( +/obj/item/clothing/under/solgov/utility/fleet/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djQ" = ( +/obj/item/ammo_casing/a762x54/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djR" = ( +/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"djU" = ( +/mob/living/simple_mob/vore/pakkun/snapdragon/snappy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dkc" = ( +/obj/item/weapon/gun/launcher/syringe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkf" = ( +/obj/item/weapon/circuitboard/mecha/ripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkg" = ( +/obj/item/ammo_magazine/a57/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dki" = ( +/obj/item/clothing/under/skirt/colorable/puffy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkj" = ( +/obj/item/clothing/suit/shrine_maiden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkl" = ( +/obj/item/clothing/under/shorts/white/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkm" = ( +/obj/item/clothing/under/lawyer/black/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkp" = ( +/obj/item/mecha_parts/part/ripley_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkq" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/chapel/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dku" = ( +/obj/item/weapon/gun/projectile/giskard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkI" = ( +/obj/item/clothing/under/rank/scientist_new, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkJ" = ( +/obj/item/clothing/head/helmet/material/makeshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkL" = ( +/obj/item/weapon/gun/energy/gun/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkQ" = ( +/obj/item/weapon/circuitboard/mecha/imperion/phasing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dkY" = ( +/obj/item/rig_module/chem_dispenser/injector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dla" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlu" = ( +/obj/machinery/door/airlock/angled_bay/hatch/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlw" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlx" = ( +/obj/machinery/power/singularity_beacon/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlL" = ( +/obj/item/clothing/head/bio_hood/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlM" = ( +/obj/item/weapon/melee/energy/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dlS" = ( +/obj/item/weapon/tank/emergency/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmb" = ( +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dme" = ( +/obj/machinery/door/airlock/angled_bay/external/glass/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmg" = ( +/obj/item/clothing/suit/space/vox/civ/medical/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmn" = ( +/obj/item/clothing/head/redtag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmo" = ( +/obj/item/integrated_circuit/passive/power/starter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmp" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmr" = ( +/obj/machinery/smartfridge/produce/persistent_lossy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmx" = ( +/obj/item/weapon/firework_star, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmB" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/pie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmJ" = ( +/obj/item/rig_module/power_sink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmN" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/BMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmO" = ( +/obj/item/weapon/card/id/medical/geneticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dmQ" = ( +/mob/living/simple_mob/animal/hyena{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dmR" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/pirate/last_stand_merc{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dmX" = ( +/obj/item/clothing/gloves/ring/seal/mason, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dna" = ( +/obj/item/clothing/head/tesh_hood/standard/white_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dni" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnj" = ( +/obj/item/clothing/suit/space/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnm" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnr" = ( +/obj/item/weapon/broken_gun/z8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnE" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/mochicake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnF" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/cheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnG" = ( +/obj/item/clothing/suit/armor/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dnI" = ( +/obj/item/clothing/suit/space/void/engineering/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dod" = ( +/obj/mecha/combat/gygax/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doe" = ( +/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dof" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dol" = ( +/mob/living/simple_mob/animal/solargrub_larva{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"don" = ( +/obj/machinery/bookbinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dop" = ( +/obj/item/weapon/reagent_containers/food/snacks/goulash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doy" = ( +/obj/item/clothing/suit/space/vox/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doH" = ( +/obj/structure/loot_pile/surface/medicine_cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doL" = ( +/obj/structure/sign/flag/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doN" = ( +/obj/item/stack/hose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"doW" = ( +/obj/item/clothing/gloves/ring/material/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpa" = ( +/obj/item/stack/material/durasteel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpb" = ( +/obj/item/weapon/material/kitchen/utensil/foon/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpo" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpu" = ( +/obj/item/stack/material/marble{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpv" = ( +/obj/item/weapon/rig/pmc/commander/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpA" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/flame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpU" = ( +/obj/item/ammo_casing/a556, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpW" = ( +/obj/item/rig_module/mounted/sizegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dpX" = ( +/obj/item/weapon/gun/launcher/crossbow/bow/hardlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqg" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqi" = ( +/obj/item/ammo_magazine/ammo_box/b762/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dql" = ( +/obj/item/integrated_circuit/converter/radians2degrees, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqs" = ( +/obj/item/weapon/circuitboard/mecha/odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqu" = ( +/obj/item/weapon/storage/box/chemimp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqw" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dqN" = ( +/obj/structure/closet/crate/freezer/centauri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dra" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/gelatin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drf" = ( +/obj/item/seeds/poisonedappleseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drl" = ( +/obj/structure/sign/warning/acid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drv" = ( +/obj/item/key, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drB" = ( +/obj/item/clothing/accessory/armor/legguards/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drQ" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drS" = ( +/mob/living/simple_mob/horror/BigTim{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"drT" = ( +/obj/item/clothing/suit/space/changeling/armored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"drZ" = ( +/obj/item/clothing/accessory/badge/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsl" = ( +/obj/item/device/binoculars/scope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsn" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dso" = ( +/obj/structure/door_assembly/door_assembly_eat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsq" = ( +/obj/item/weapon/storage/box/syndie_kit/voidsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsw" = ( +/obj/machinery/atmospherics/tvalve/digital, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsy" = ( +/obj/structure/sign/flag/catpirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsz" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "12" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsC" = ( +/obj/item/weapon/reagent_containers/food/snacks/rosesalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsE" = ( +/obj/item/weapon/spacecash/c10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsI" = ( +/obj/item/stack/tile/grass/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsN" = ( +/obj/item/clothing/accessory/medal/solgov/bronze/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsO" = ( +/obj/item/clothing/under/color/blackf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/semki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dsU" = ( +/obj/item/ammo_magazine/pitchmag/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dtd" = ( +/obj/item/weapon/gun/energy/mouseray/lizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dtl" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/red_flames{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dto" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/rugged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dtI" = ( +/obj/structure/timer_door/twenty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dua" = ( +/mob/living/simple_mob/vore/wolfgirl{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"duk" = ( +/mob/living/simple_mob/animal/space/bats/roguemines{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"duG" = ( +/obj/item/clothing/under/skirt/colorable/skater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duH" = ( +/obj/machinery/shieldwall{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duI" = ( +/obj/item/clothing/accessory/solgov/specialty/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duK" = ( +/obj/item/clothing/shoes/footwraps/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duL" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/shake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duN" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"duW" = ( +/obj/item/clothing/under/terran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dvb" = ( +/obj/item/weapon/rig/pmc/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dvs" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dvB" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dvK" = ( +/obj/item/device/healthanalyzer/advanced/fluff/jiao_health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dvX" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwb" = ( +/obj/machinery/vending/boozeomat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwe" = ( +/obj/item/clothing/accessory/asymmetric/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwo" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwp" = ( +/obj/item/ammo_casing/a9x39/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwr" = ( +/obj/machinery/computer/arcade/orion_trail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwA" = ( +/obj/item/weapon/smes_coil/super_io, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwK" = ( +/obj/item/stack/tile/floor/eris/steel/violetcorener, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwO" = ( +/obj/item/clothing/head/axiscap/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwV" = ( +/obj/item/clothing/head/soft/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dwY" = ( +/obj/item/weapon/material/kitchen/utensil/spork/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxq" = ( +/obj/item/weapon/paper/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxt" = ( +/obj/item/clothing/head/fez, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxu" = ( +/obj/item/weapon/reagent_containers/glass/bottle/keloderm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxA" = ( +/obj/item/clothing/suit/wizrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxE" = ( +/obj/machinery/shield_capacitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxG" = ( +/obj/item/clothing/under/rank/security/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxP" = ( +/obj/machinery/igniter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dxU" = ( +/obj/item/clothing/accessory/armor/armguards, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyg" = ( +/obj/machinery/door/airlock/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyj" = ( +/obj/item/clothing/shoes/griffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyq" = ( +/obj/item/device/walkpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyr" = ( +/obj/item/weapon/disk/integrated_circuit/upgrade/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyu" = ( +/obj/item/clothing/accessory/solgov/rank/ec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyA" = ( +/obj/item/weapon/disk/limb/cenilimicybernetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyC" = ( +/obj/item/clothing/suit/storage/victcoat/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyO" = ( +/obj/item/weapon/disk/limb/kitsuhana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyR" = ( +/obj/item/weapon/implant/dud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyT" = ( +/obj/item/weapon/paper/courtroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyV" = ( +/obj/item/integrated_circuit/output/sound/beeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dyZ" = ( +/obj/item/rig_module/grenade_launcher/nerfed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dze" = ( +/obj/item/clothing/suit/storage/toggle/track/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dzs" = ( +/obj/structure/door_assembly/multi_tile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dzt" = ( +/obj/item/clothing/under/nanotrasen/security/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dzA" = ( +/obj/item/clothing/accessory/solgov/rank/ec/officer/o5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dzF" = ( +/obj/item/ammo_magazine/m9mmt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAa" = ( +/mob/living/simple_mob/construct/shade{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dAh" = ( +/obj/item/ammo_casing/microbattery/medical/antirad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAn" = ( +/obj/item/seeds/orangeseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAo" = ( +/obj/structure/sign/level/basement/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAp" = ( +/obj/item/device/kit/paint/gygax/recitence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAr" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/sucker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAA" = ( +/obj/mecha/medical/odysseus/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAD" = ( +/obj/item/clothing/under/away/patrol/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAE" = ( +/obj/item/weapon/reagent_containers/food/snacks/fishfingers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAG" = ( +/obj/item/weapon/circuitboard/mecha/durand/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAO" = ( +/obj/item/weapon/gun/projectile/revolver/stainless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAU" = ( +/obj/item/weapon/flag/federation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAV" = ( +/obj/item/clothing/head/trilby, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dAZ" = ( +/obj/item/weapon/gun/projectile/automatic/mg42, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBc" = ( +/obj/structure/closet/masks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBf" = ( +/obj/item/clothing/suit/sexyminer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBh" = ( +/obj/item/clothing/shoes/boots/winter/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBj" = ( +/obj/item/stack/tile/wood/parquet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBk" = ( +/obj/item/toy/figure/abe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBt" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/worm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBx" = ( +/obj/item/weapon/material/knife/stone/bone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBy" = ( +/obj/item/integrated_circuit/converter/uppercase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBz" = ( +/obj/item/rig_module/chem_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBD" = ( +/obj/item/weapon/storage/box/glass_extras/straws, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBG" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/narsie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBI" = ( +/obj/item/rig_module/grenade_launcher/smoke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBN" = ( +/obj/mecha/combat/fighter/scoralis/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBU" = ( +/obj/item/weapon/stock_parts/manipulator/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBW" = ( +/obj/structure/bed/chair/backed_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dBY" = ( +/obj/item/clothing/accessory/poncho/thermal/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCa" = ( +/obj/item/clothing/under/tourist_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCf" = ( +/obj/item/weapon/rig/pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCg" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCh" = ( +/mob/living/simple_mob/mobs_monsters/clowns/destroyer{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dCi" = ( +/obj/item/clothing/suit/wizrobe/marisa/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCo" = ( +/obj/item/clothing/under/rank/trek/medsci/ent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCq" = ( +/obj/item/clothing/accessory/sweater/blackneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCr" = ( +/obj/item/clothing/shoes/fluff/morthighs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCs" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCy" = ( +/obj/item/weapon/stock_parts/scanning_module/phasic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCz" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCB" = ( +/obj/item/weapon/storage/box/fluff/vanesaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCD" = ( +/obj/item/weapon/spellbook/oneuse/fireball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCI" = ( +/obj/structure/closet/secure_closet/egg/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCJ" = ( +/obj/item/ammo_magazine/m762/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dCM" = ( +/mob/living/simple_mob/humanoid/pirate/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dCR" = ( +/obj/item/weapon/melee/cursedblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDf" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDk" = ( +/obj/structure/table/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDm" = ( +/obj/item/stack/tile/floor/eris/techmaint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDo" = ( +/obj/item/clothing/accessory/wcoat/gentleman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDs" = ( +/obj/item/clothing/suit/space/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDz" = ( +/obj/item/weapon/refill_cartridge/autoname/giftvendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDB" = ( +/obj/item/weapon/spacecasinocash/c20, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDC" = ( +/obj/structure/outcrop/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDE" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDH" = ( +/obj/item/weapon/gun/energy/pulse_rifle/compact/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDJ" = ( +/obj/item/trash/ratjuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDO" = ( +/obj/item/weapon/cartridge/quartermaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDP" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDR" = ( +/obj/item/clothing/head/hood/winter/medical/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDX" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/choc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDY" = ( +/obj/item/clothing/head/helmet/eraticator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dDZ" = ( +/obj/machinery/transhuman/resleever/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEa" = ( +/obj/machinery/pointdefense, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEr" = ( +/obj/item/weapon/storage/box/flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEy" = ( +/obj/item/clothing/suit/space/vox/civ/medical/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEz" = ( +/obj/item/clothing/mask/ninjascarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dED" = ( +/obj/item/seeds/cherryseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEF" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEI" = ( +/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEJ" = ( +/obj/item/clothing/head/helmet/space/syndicate/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dER" = ( +/obj/item/integrated_circuit/built_in/device_output, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEY" = ( +/obj/item/clothing/accessory/solgov/department/supply/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dEZ" = ( +/obj/item/weapon/cartridge/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFe" = ( +/obj/item/clothing/suit/space/void/refurb/officer/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFf" = ( +/obj/item/clothing/head/service/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFg" = ( +/obj/item/clothing/under/pants/utility/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFB" = ( +/obj/item/clothing/accessory/armor/tag/solgov/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFC" = ( +/obj/item/ammo_magazine/m9mmp90/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFD" = ( +/obj/item/clothing/suit/storage/vest/wardencoat/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFP" = ( +/obj/structure/sign/levels/chapel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dFS" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGb" = ( +/obj/item/weapon/gun/energy/temperature, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGh" = ( +/obj/item/weapon/card/id/science/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGl" = ( +/obj/item/integrated_circuit/input/textpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGn" = ( +/obj/item/integrated_circuit/input/pressure_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGo" = ( +/obj/machinery/computer/guestpass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGx" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGE" = ( +/obj/item/weapon/disk/limb/dsi_tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGI" = ( +/obj/item/weapon/gun/energy/vepr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGJ" = ( +/obj/item/weapon/reagent_containers/blood/AMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGK" = ( +/obj/item/weapon/storage/bag/circuits/mini/manipulation/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGO" = ( +/obj/item/clothing/suit/xenos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGR" = ( +/obj/item/weapon/circuitboard/breakerbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGU" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dGY" = ( +/obj/item/clothing/shoes/boots/workboots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHe" = ( +/obj/structure/curtain/open/shower/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHf" = ( +/obj/item/clothing/head/ushanka/solgov/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHp" = ( +/obj/structure/fence/cut/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHr" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/bodaplus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHt" = ( +/obj/item/ammo_casing/a45/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHy" = ( +/obj/item/clothing/under/fluff/amara_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHz" = ( +/obj/item/weapon/computer_hardware/hard_drive/micro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dHA" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dHC" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIg" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIq" = ( +/obj/structure/prop/machine/tgmc_console5/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIu" = ( +/mob/living/simple_mob/slime/xenobio/green{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dIv" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIB" = ( +/obj/item/slimepotion/death, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIF" = ( +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIN" = ( +/obj/item/weapon/circuitboard/partslathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dIQ" = ( +/obj/item/clothing/shoes/boots/cowboy/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJi" = ( +/obj/structure/closet/l3closet/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJl" = ( +/obj/item/weapon/storage/toolbox/lunchbox/heart/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJq" = ( +/obj/item/device/flashlight/flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJu" = ( +/obj/item/rig_module/vision/thermal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJv" = ( +/obj/item/device/flashlight/pen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJx" = ( +/obj/item/trash/chips/snv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJV" = ( +/obj/item/weapon/gun/launcher/grenade/underslung, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dJY" = ( +/obj/item/clothing/under/solgov/utility/army/medical/banded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKa" = ( +/obj/item/weapon/reagent_containers/food/snacks/concha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKg" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKt" = ( +/obj/structure/closet/secure_closet/RD_wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKD" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKF" = ( +/obj/item/ammo_magazine/m545saw/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKG" = ( +/obj/item/integrated_circuit/arithmetic/absolute, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKM" = ( +/obj/mecha/working/ripley/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKO" = ( +/obj/item/weapon/stock_parts/subspace/analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKP" = ( +/obj/structure/largecrate/animal/chick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKQ" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/m41a, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKS" = ( +/obj/item/clothing/under/suit_jacket/checkered, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dKY" = ( +/obj/item/weapon/storage/backpack/toxins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLb" = ( +/obj/item/clothing/suit/stripper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLf" = ( +/obj/item/weapon/reagent_containers/food/snacks/beetsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLi" = ( +/obj/item/weapon/circuitboard/geiger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLn" = ( +/obj/item/clothing/head/tesh_hood/standard/blue_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLv" = ( +/obj/item/clothing/suit/storage/miljacket/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLL" = ( +/obj/machinery/vending/event/costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLV" = ( +/obj/item/clothing/under/fluff/redax_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dLX" = ( +/obj/machinery/vending/sovietvend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dMu" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dMK" = ( +/obj/item/weapon/reagent_containers/powder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dMO" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dMQ" = ( +/obj/item/weapon/material/hatchet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dMX" = ( +/mob/living/simple_mob/slime/xenobio/dark_purple{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dNa" = ( +/obj/item/champagne, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNf" = ( +/obj/item/seeds/lemonseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNn" = ( +/obj/item/clothing/head/helmet/space/void/refurb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNu" = ( +/obj/item/clothing/under/solgov/utility/sifguard/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNy" = ( +/obj/item/clothing/head/beret/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNC" = ( +/obj/item/clothing/mask/surgical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNE" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNI" = ( +/obj/machinery/transhuman/resleever, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNR" = ( +/obj/item/clothing/suit/space/vox/civ/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dNZ" = ( +/obj/item/clothing/suit/storage/solgov/service/army/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOd" = ( +/obj/item/weapon/storage/box/casino/costume_nyangirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOj" = ( +/obj/item/weapon/card/id/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOk" = ( +/obj/item/weapon/weldingtool/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOp" = ( +/obj/item/weapon/storage/backpack/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOq" = ( +/obj/item/weapon/reagent_containers/glass/bottle/dexalinp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOA" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOH" = ( +/obj/item/clothing/head/beret/talon/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOM" = ( +/obj/item/weapon/coin/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOT" = ( +/obj/structure/AIcore/deactivated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dOY" = ( +/obj/item/clothing/under/skirt/colorable/plaid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPc" = ( +/obj/item/clothing/accessory/wcoat/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPe" = ( +/mob/living/simple_mob/animal/passive/dog/corgi, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dPm" = ( +/obj/structure/closet/crate/secure/veymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPt" = ( +/obj/item/clothing/suit/space/void/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPD" = ( +/obj/structure/closet/malf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPE" = ( +/obj/item/weapon/computer_hardware/battery_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPG" = ( +/obj/item/clothing/suit/space/void/responseteam/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPN" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPO" = ( +/obj/structure/loot_pile/mecha/gygax/dark/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPP" = ( +/mob/living/simple_mob/vore/solarmoth{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dPR" = ( +/obj/item/paiparts/emitter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPX" = ( +/obj/item/clothing/head/beret/solgov/customs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dPY" = ( +/obj/item/ammo_magazine/type901, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQe" = ( +/obj/structure/salvageable/computer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQh" = ( +/obj/structure/plushie/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQj" = ( +/obj/item/weapon/melee/baton/cattleprod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQr" = ( +/obj/item/clothing/head/buckethat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQu" = ( +/obj/machinery/feeder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQw" = ( +/obj/item/clothing/glasses/hud/health/eyepatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQB" = ( +/obj/item/weapon/rig/nikki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQG" = ( +/obj/item/clothing/head/centhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQL" = ( +/obj/item/weapon/storage/mre/menu12, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQP" = ( +/obj/item/modular_computer/console/preset/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQQ" = ( +/obj/machinery/door/airlock/angled_bay/hatch/common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQW" = ( +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dQZ" = ( +/obj/item/ammo_magazine/m10mm/pistol/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRi" = ( +/obj/item/clothing/suit/storage/forensics/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRk" = ( +/obj/structure/sign/scenery/overlay/vine/bottom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRl" = ( +/obj/item/toy/plushie/tabby_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRm" = ( +/obj/item/weapon/cell/void/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRu" = ( +/obj/item/weapon/mine/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRy" = ( +/obj/structure/sign/levels/dorms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRG" = ( +/obj/item/weapon/implant/reagent_generator/roiz/yuki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRI" = ( +/obj/item/weapon/circuitboard/fusion_injector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRJ" = ( +/obj/item/clothing/suit/armor/material/makeshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRM" = ( +/obj/item/weapon/surgical/retractor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRQ" = ( +/obj/item/stack/material/plastitanium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRV" = ( +/obj/item/weapon/gun/projectile/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dRW" = ( +/obj/item/clothing/suit/justice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSr" = ( +/obj/machinery/media/jukebox/hacked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSt" = ( +/obj/item/weapon/material/twohanded/baseballbat/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSu" = ( +/obj/structure/closet/crate/secure/morpheus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSy" = ( +/obj/item/clothing/head/collectable/thunderdome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSB" = ( +/obj/structure/loot_pile/christmas_tree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSE" = ( +/obj/item/weapon/storage/backpack/messenger/sec/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dSM" = ( +/obj/item/robot_parts/robot_component/armour_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTn" = ( +/obj/item/weapon/gun/projectile/automatic/c20r, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTy" = ( +/obj/item/organ/internal/brain/alraune, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTA" = ( +/obj/item/weapon/aiModule/antimov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTC" = ( +/obj/item/clothing/head/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTF" = ( +/obj/machinery/door/airlock/maintenance/engi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dTM" = ( +/obj/item/clothing/ears/skrell/cloth_male/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUd" = ( +/obj/item/clothing/under/blazer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUg" = ( +/obj/item/clothing/under/pants/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUn" = ( +/mob/living/simple_mob/animal/synx/ai{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dUw" = ( +/mob/living/simple_mob/mechanical/combat_drone/melee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dUA" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUB" = ( +/mob/living/simple_mob/vore/aggressive/frog{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dUN" = ( +/obj/item/weapon/gun/energy/gun/martin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUT" = ( +/obj/item/organ/internal/augment/bioaugment/thermalshades, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUV" = ( +/obj/item/trash/croutons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dUX" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVb" = ( +/obj/item/clothing/suit/space/syndicate/black/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVf" = ( +/obj/item/ammo_magazine/m38/makarov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVj" = ( +/obj/item/weapon/chaoscake_layer/six, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVn" = ( +/mob/living/silicon/robot/drone/swarm, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dVo" = ( +/obj/item/weapon/gun/energy/locked/phasegun/rifle/unlocked/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVp" = ( +/obj/item/weapon/cartridge/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVu" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVy" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/engislug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dVz" = ( +/obj/item/prop/alien/junk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVF" = ( +/obj/item/weapon/computer_hardware/network_card/quantum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVH" = ( +/obj/item/organ/internal/liver/alraune, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dVZ" = ( +/obj/item/weapon/storage/vore_egg/honeycomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWe" = ( +/obj/item/clothing/accessory/pride/vore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWo" = ( +/obj/item/trash/candybowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWy" = ( +/obj/item/clothing/gloves/ring/buzzer/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWF" = ( +/obj/item/device/multitool/uplink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWJ" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/mosin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWK" = ( +/obj/item/weapon/storage/backpack/sport/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWO" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/t12, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dWS" = ( +/obj/machinery/computer/arcade/battle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXc" = ( +/obj/item/ammo_magazine/m45/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXd" = ( +/obj/item/clothing/gloves/fluff/shel_gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXi" = ( +/obj/item/clothing/gloves/fingerless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXm" = ( +/obj/item/clothing/mask/chewable/candy/gum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXr" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/big, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dXu" = ( +/obj/item/weapon/storage/belt/fannypack/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXw" = ( +/obj/item/weapon/storage/belt/utility/chief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXy" = ( +/obj/machinery/porta_turret/crescent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXA" = ( +/mob/living/simple_mob/slime/xenobio/oil{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dXB" = ( +/obj/item/clothing/glasses/hud/health/mech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXD" = ( +/obj/structure/sign/department/operational, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXE" = ( +/obj/item/trash/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXM" = ( +/obj/item/seeds/poisonedappleseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXQ" = ( +/obj/structure/prop/machine/nt_obelisk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXR" = ( +/obj/item/mecha_parts/part/phazon_right_leg, +/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXS" = ( +/obj/item/clothing/head/helmet/space/void/mining/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXX" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dXZ" = ( +/obj/item/integrated_circuit/transfer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYc" = ( +/mob/living/simple_mob/humanoid/merc/ranged/sniper{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dYm" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYp" = ( +/obj/item/integrated_circuit/arithmetic/modulo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYx" = ( +/obj/item/ammo_magazine/akm/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYI" = ( +/obj/item/weapon/pen/blade/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYR" = ( +/obj/item/clothing/under/gsa_work, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYT" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cherryjelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYU" = ( +/obj/item/ammo_magazine/s38/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dYV" = ( +/obj/item/weapon/inflatable_dispenser/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZl" = ( +/obj/item/clothing/accessory/armor/legguards/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZm" = ( +/obj/item/weapon/telecube/precursor/mated/zone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZr" = ( +/obj/item/organ/internal/eyes/alraune, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZt" = ( +/obj/item/weapon/sample/print, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZE" = ( +/obj/item/clothing/accessory/tronket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZI" = ( +/obj/structure/loot_pile/mecha/mouse_tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZS" = ( +/mob/living/simple_mob/animal/passive/hare{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"dZT" = ( +/obj/item/weapon/gun/energy/particle/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"dZZ" = ( +/obj/item/clothing/suit/armor/vest/fluff/skinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eac" = ( +/obj/structure/closet/l3closet/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eae" = ( +/obj/item/clothing/accessory/sweater/uglyxmas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaf" = ( +/obj/machinery/gateway/brass{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eai" = ( +/obj/machinery/door/firedoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eal" = ( +/obj/structure/prop/dominator/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eam" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/m41ab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eap" = ( +/obj/item/clothing/under/solgov/utility/sifguard/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eas" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/synaptizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eat" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eau" = ( +/obj/item/slime_extract/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eax" = ( +/obj/structure/sign/scenery/overlay/vine/top, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaB" = ( +/obj/item/clothing/accessory/storage/white_vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaD" = ( +/obj/item/clothing/under/rank/cargotech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaG" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackpurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaT" = ( +/obj/item/clothing/under/solgov/utility/sifguard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaV" = ( +/obj/item/weapon/storage/box/pocky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eaW" = ( +/mob/living/silicon/robot/platform/cargo, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eaX" = ( +/obj/structure/sign/warning/docking_area, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebh" = ( +/obj/item/weapon/storage/box/syndie_kit/viral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebl" = ( +/obj/structure/table/rack/shelf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebs" = ( +/mob/living/simple_mob/horror/Smiley{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ebu" = ( +/turf/simulated/floor/atoll, +/area/survivalpod) +"ebx" = ( +/obj/item/weapon/circuitboard/photocopier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebF" = ( +/obj/structure/lightpost/atoll, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebL" = ( +/obj/item/weapon/aiModule/robocop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebO" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebQ" = ( +/obj/item/weapon/pickaxe/four_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebU" = ( +/obj/structure/sign/directions/exit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ebV" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ech" = ( +/obj/item/flag/vir/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecm" = ( +/obj/structure/loot_pile/mecha/odysseus/murdysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eco" = ( +/obj/item/weapon/gift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecq" = ( +/obj/item/weapon/reagent_containers/food/snacks/spagetti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ect" = ( +/obj/item/clothing/head/beret/medical/cmo/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecy" = ( +/obj/item/clothing/gloves/sterile/thieves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecC" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecM" = ( +/obj/item/weapon/key/quadbike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecP" = ( +/obj/item/ammo_magazine/m762svd/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecQ" = ( +/obj/item/weapon/storage/box/casino/costume_cutewitch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecY" = ( +/obj/structure/prop/alien/dispenser/twoway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ecZ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edb" = ( +/obj/structure/bed/chair/sofa/corner/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edd" = ( +/obj/item/seeds/ambrosiainfernusseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edf" = ( +/obj/item/clothing/suit/space/void/expedition_medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edg" = ( +/obj/structure/sign/department/armory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edu" = ( +/obj/item/weapon/implantcase/freedom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edw" = ( +/obj/item/ammo_magazine/ammo_box/b545/large/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edy" = ( +/obj/item/clothing/gloves/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edD" = ( +/obj/item/clothing/under/dress/yellowswoop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edE" = ( +/obj/item/clothing/head/soft/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edI" = ( +/obj/item/ammo_magazine/m38/giskard/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edO" = ( +/obj/item/trash/jupiter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"edT" = ( +/obj/item/clothing/head/helmet/space/void/responseteam/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeb" = ( +/obj/item/clothing/head/beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eed" = ( +/obj/item/weapon/spell/phase_shift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eek" = ( +/obj/structure/prop/dominator/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"een" = ( +/obj/item/integrated_circuit/converter/ref2text, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eep" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eev" = ( +/obj/item/device/electronic_assembly/tiny/default, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeA" = ( +/obj/item/clothing/shoes/knight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeF" = ( +/obj/item/clothing/suit/storage/fluff/eravik_vessi_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeG" = ( +/obj/item/clothing/under/color/fjumpsuit/lightbrownf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeI" = ( +/obj/item/weapon/bedsheet/bluedouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeW" = ( +/obj/item/weapon/dnainjector/anticough, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeX" = ( +/obj/item/clothing/under/solgov/utility/army/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eeZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/lobster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efe" = ( +/obj/item/clothing/under/pants/baggy/track, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eff" = ( +/obj/structure/prop/rock/small/wateralt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efi" = ( +/obj/item/seeds/hardlightseed/typesx, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efH" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efI" = ( +/obj/item/weapon/storage/bag/circuits/mini/time/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efP" = ( +/obj/item/integrated_circuit/converter/exploders, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"efR" = ( +/obj/item/weapon/storage/backpack/satchel/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egg" = ( +/obj/item/weapon/aiModule/oneHuman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egn" = ( +/obj/item/weapon/dnainjector/glassesmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egq" = ( +/mob/living/simple_mob/animal/passive/cat/space, +/turf/simulated/floor/atoll, +/area/survivalpod) +"egu" = ( +/obj/item/clothing/head/helmet/tac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egG" = ( +/obj/item/trash/material/circuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egV" = ( +/obj/item/clothing/head/surgery/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"egY" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/redarmy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehf" = ( +/obj/item/clothing/shoes/boots/winter/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehh" = ( +/obj/item/weapon/storage/bag/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehi" = ( +/obj/item/weapon/material/kitchen/utensil/spork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eho" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eht" = ( +/obj/item/weapon/reagent_containers/syringe/drugs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehx" = ( +/obj/item/clothing/suit/varsity/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehz" = ( +/obj/item/weapon/deck/cah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehE" = ( +/obj/item/clothing/head/centhat/customs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehG" = ( +/obj/machinery/disperser/back{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehP" = ( +/obj/item/weapon/cell/standin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ehR" = ( +/obj/item/weapon/reagent_containers/food/snacks/mint/admints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eii" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/limecake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eik" = ( +/obj/item/clothing/head/helmet/space/void/hev/violet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eil" = ( +/obj/item/weapon/book/custom_library/nonfiction/freesirisailightbulbs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ein" = ( +/obj/item/clothing/under/dress/westernbustle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eip" = ( +/obj/structure/sign/levels/science/xenoflora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eiF" = ( +/obj/item/weapon/storage/box/glasses/meta, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eiL" = ( +/obj/item/toy/tennis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eja" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejf" = ( +/obj/item/weapon/reagent_containers/food/snacks/gigapuddi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejg" = ( +/obj/item/clothing/head/hood/winter/cosmic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejp" = ( +/obj/structure/plushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eju" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/hot_coco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejA" = ( +/obj/item/weapon/book/manual/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejF" = ( +/obj/item/weapon/cat_box/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejI" = ( +/obj/item/weapon/gun/launcher/syringe/rapid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejJ" = ( +/obj/item/weapon/material/butterfly/switchblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejK" = ( +/obj/item/organ/internal/voicebox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejO" = ( +/obj/item/clothing/under/det/grey/waistcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejP" = ( +/obj/machinery/firealarm/alarms_hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ejY" = ( +/obj/item/weapon/storage/box/fluff/octavious, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eka" = ( +/obj/item/clothing/under/away/daedalus/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ekf" = ( +/obj/item/weapon/storage/firstaid/bonemed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eki" = ( +/obj/item/clothing/under/shorts/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ekj" = ( +/obj/item/clothing/suit/storage/toggle/light_jacket/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ekm" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ekr" = ( +/obj/item/device/electronic_assembly/drone/medbot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ekO" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/capslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ekV" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elf" = ( +/obj/item/device/assembly/infra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elp" = ( +/obj/item/clothing/under/waiter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elv" = ( +/obj/machinery/power/rtg/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elJ" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elU" = ( +/obj/item/toy/figure/assistant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elV" = ( +/obj/item/clothing/under/rank/nurse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"elX" = ( +/obj/item/clothing/accessory/material/makeshift/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emc" = ( +/obj/item/weapon/reagent_containers/food/snacks/scorpion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emi" = ( +/obj/item/clothing/under/tropical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emk" = ( +/obj/item/ammo_magazine/m9mmp90/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emo" = ( +/obj/item/weapon/reagent_containers/hypospray/vial/kenzie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emr" = ( +/obj/item/weapon/bedsheet/captaindouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emu" = ( +/obj/item/clothing/shoes/boots/combat/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emw" = ( +/obj/item/clothing/head/dress/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emG" = ( +/obj/item/weapon/bedsheet/reddouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emH" = ( +/obj/item/stack/xenochitin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emL" = ( +/obj/item/integrated_circuit/built_in/action_button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emO" = ( +/obj/item/weapon/rig/merc/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emS" = ( +/obj/item/ammo_magazine/ammo_box/b44/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"emZ" = ( +/obj/structure/prop/machine/von_krabin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ena" = ( +/obj/item/ammo_magazine/mfoam_dart/smg/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"end" = ( +/mob/living/simple_mob/mobs_monsters/clowns/sentinel{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"enp" = ( +/obj/item/weapon/storage/box/fluff/tasald, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"env" = ( +/obj/item/clothing/head/pin/bow/big/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eny" = ( +/obj/item/weapon/circuitboard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enC" = ( +/obj/item/weapon/stock_parts/manipulator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enD" = ( +/obj/item/weapon/storage/excavation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enM" = ( +/obj/item/trash/plate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enT" = ( +/obj/structure/closet/walllocker_double/kitchen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enX" = ( +/obj/item/clothing/under/shorts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"enY" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eob" = ( +/obj/item/clothing/under/rank/research_director, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoh" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ammonia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoi" = ( +/obj/item/weapon/airlock_electronics/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoj" = ( +/obj/item/weapon/storage/vore_egg/sergal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eot" = ( +/obj/item/weapon/storage/belt/utility/atmostech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eow" = ( +/obj/item/clothing/accessory/badge/press, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoz" = ( +/obj/item/clothing/accessory/armband, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoC" = ( +/mob/living/simple_mob/vore/fennec/huge{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eoR" = ( +/obj/structure/sign/directions/cryo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoW" = ( +/obj/item/weapon/storage/bag/circuits/basic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eoX" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/vp70m, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epf" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "31" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epo" = ( +/obj/structure/sign/department/commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epx" = ( +/obj/structure/closet/secure_closet/medical_wall/anesthetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epN" = ( +/obj/item/toy/mecha/marauder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epU" = ( +/obj/item/clothing/mask/gas/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"epV" = ( +/obj/item/weapon/storage/bag/circuits/mini/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqe" = ( +/obj/item/clothing/mask/emotions, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqi" = ( +/obj/item/weapon/rig/industrial/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqk" = ( +/obj/item/clothing/under/shorts/jeans/mustang/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqn" = ( +/obj/item/device/radio_jammer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqo" = ( +/obj/item/device/encryptionkey/pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"equ" = ( +/obj/item/clothing/gloves/fluff/kilano/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqx" = ( +/obj/item/clothing/suit/bio_suit/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqz" = ( +/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqC" = ( +/obj/machinery/door/firedoor/multi_tile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqD" = ( +/obj/item/weapon/melee/classic_baton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqH" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "1" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqI" = ( +/obj/item/weapon/deck/tarot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqQ" = ( +/obj/item/clothing/under/suit_jacket/extravagant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqR" = ( +/obj/item/weapon/storage/belt/fannypack/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eqT" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"era" = ( +/obj/item/weapon/computer_hardware/hard_drive/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ere" = ( +/obj/structure/largecrate/animal/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erg" = ( +/obj/item/weapon/gun/energy/sickshot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eri" = ( +/obj/item/clothing/head/helmet/space/void/refurb/research/alt/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erk" = ( +/obj/item/clothing/under/skirt/fluff/serkii, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ern" = ( +/obj/structure/particle_accelerator/particle_emitter/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"err" = ( +/obj/item/clothing/suit/fluff/freddy/chica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ers" = ( +/obj/item/weapon/storage/belt/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erz" = ( +/obj/machinery/atmospherics/pipe/zpipe/up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erD" = ( +/obj/item/clothing/suit/taur/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erE" = ( +/obj/structure/sign/department/dock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erF" = ( +/obj/machinery/door/airlock/angled_bay/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"erL" = ( +/obj/structure/closet/secure_closet/quartermaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esd" = ( +/obj/structure/sign/warning/mail_delivery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ese" = ( +/obj/item/usedcryobag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esf" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/thirteenloko, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esl" = ( +/obj/structure/salvageable/data_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esn" = ( +/obj/item/clothing/accessory/armor/armorplate/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eso" = ( +/obj/item/weapon/reagent_containers/blood/OPlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esp" = ( +/obj/item/seeds/cornseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esr" = ( +/obj/structure/particle_accelerator/fuel_chamber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esz" = ( +/obj/item/seeds/surik, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esE" = ( +/obj/item/clothing/under/teshari/undercoat/fluff/strix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esI" = ( +/obj/item/weapon/storage/box/fancy/chewables, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esM" = ( +/obj/item/clothing/head/helmet/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esQ" = ( +/obj/machinery/holosign/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"esS" = ( +/obj/item/clothing/suit/bluetag/sub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etd" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etl" = ( +/obj/structure/curtain/open/bed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etm" = ( +/obj/item/ammo_magazine/m10mm/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etn" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etr" = ( +/obj/item/stack/material/tritium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ets" = ( +/obj/item/integrated_circuit/transfer/demultiplexer/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ett" = ( +/obj/machinery/telecomms/allinone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etv" = ( +/obj/item/clothing/head/helmet/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ety" = ( +/obj/item/toy/plushie/basset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etA" = ( +/obj/structure/barricade/cutout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etJ" = ( +/obj/item/clothing/suit/storage/toggle/hoodiebuttoned/example, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etO" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"etS" = ( +/obj/item/weapon/storage/box/donut/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euc" = ( +/obj/item/weapon/gun/projectile/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eud" = ( +/obj/item/clothing/head/ushanka/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eug" = ( +/obj/item/toy/plushie/therapy/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euh" = ( +/obj/item/device/modkit_conversion/fluff/nika_sec_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euj" = ( +/obj/item/weapon/flame/lighter/zippo/capitalist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euo" = ( +/obj/item/weapon/cartridge/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euq" = ( +/obj/item/clothing/accessory/poncho/cloak/fluff/aroozee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eus" = ( +/obj/item/ammo_magazine/m9mmt/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euz" = ( +/obj/item/clothing/suit/space/void/refurb/pilot/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euI" = ( +/obj/structure/sign/directions/science/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euS" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euU" = ( +/obj/item/weapon/reagent_containers/food/snacks/cookie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"euW" = ( +/obj/item/clothing/under/dress/black_corset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eve" = ( +/obj/item/weapon/cane/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evf" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/leporazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evg" = ( +/obj/item/device/camerabug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evm" = ( +/obj/item/clothing/accessory/storage/black_drop_pouches, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evp" = ( +/obj/item/clothing/suit/storage/toggle/bomber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evu" = ( +/obj/item/clothing/under/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evA" = ( +/obj/machinery/power/rtg/abductor/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evI" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/orange_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evJ" = ( +/obj/item/weapon/material/kitchen/utensil/foon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evY" = ( +/obj/item/projectile/beam/weaklaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"evZ" = ( +/obj/item/weapon/spacecasinocash/c100, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewc" = ( +/obj/item/integrated_circuit/trig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewf" = ( +/obj/structure/bed/chair/sofa/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewh" = ( +/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ewm" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_midgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewo" = ( +/obj/item/weapon/commcard/signal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewq" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewB" = ( +/obj/item/weapon/storage/backpack/satchel/fluff/swat43bag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewC" = ( +/obj/item/weapon/glass_extra/stick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewD" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewH" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewI" = ( +/obj/item/ammo_magazine/m9mm/vp70/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewJ" = ( +/obj/item/weapon/vampiric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewN" = ( +/obj/machinery/particle_accelerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewQ" = ( +/obj/machinery/smartfridge/sheets/persistent_lossy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewS" = ( +/obj/structure/loot_pile/mecha/odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ewW" = ( +/obj/item/clothing/suit/storage/explorer/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exf" = ( +/obj/item/clothing/head/helmet/space/void/zaddat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exm" = ( +/obj/item/clothing/glasses/regular/scanners, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exv" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exw" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exy" = ( +/obj/item/weapon/circuitboard/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exA" = ( +/obj/item/weapon/material/barbedwire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exC" = ( +/obj/machinery/injector_maker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exJ" = ( +/obj/item/weapon/storage/backpack/ert/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exS" = ( +/obj/item/weapon/circuitboard/area_atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"exU" = ( +/obj/item/clothing/suit/space/syndicate/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyk" = ( +/obj/item/shield_projector/rectangle/mecha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyo" = ( +/obj/item/organ/internal/lungs/replicant/mending, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyB" = ( +/obj/item/clothing/suit/stripper/stripper_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyH" = ( +/obj/item/mecha_parts/part/durand_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyV" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eyY" = ( +/obj/item/ammo_magazine/clip/mosin/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezn" = ( +/obj/item/weapon/material/twohanded/sledgehammer/mjollnir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezr" = ( +/obj/structure/prop/rock/small/water, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezs" = ( +/obj/item/weapon/mop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezw" = ( +/obj/item/instrument/piano_synth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezE" = ( +/obj/machinery/door/airlock/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezG" = ( +/obj/item/stack/tile/floor/eris/derelict4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezS" = ( +/obj/item/ammo_magazine/s45/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezU" = ( +/obj/item/weapon/reagent_containers/food/snacks/fish_taco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ezW" = ( +/obj/item/mecha_parts/part/gygax_armour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAa" = ( +/obj/item/clothing/mask/gas/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAo" = ( +/mob/living/simple_mob/faithless/strong{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eAp" = ( +/obj/structure/closet/thunderdome/tdgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAu" = ( +/obj/machinery/cryopod/robot/door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAx" = ( +/obj/item/clothing/head/helmet/space/vox/civ/engineer/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAy" = ( +/obj/item/clothing/under/rank/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAA" = ( +/obj/item/weapon/card/mining_point_card, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAG" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAL" = ( +/obj/item/slime_crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAN" = ( +/obj/structure/sign/kiddieplaque/poi1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAP" = ( +/obj/item/weapon/storage/mre/menu13, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAQ" = ( +/obj/item/clothing/head/helmet/space/void/expedition_medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAV" = ( +/obj/item/clothing/ears/skrell/band/redjewels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAY" = ( +/obj/item/device/radio/electropack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eAZ" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBc" = ( +/obj/item/weapon/gun/energy/mouseray/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBd" = ( +/obj/item/seeds/plumpmycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBg" = ( +/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBj" = ( +/obj/item/weapon/storage/box/syndie_kit/demolitions, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBn" = ( +/obj/item/weapon/reagent_containers/food/snacks/slicable/buttspie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBq" = ( +/obj/machinery/account_database, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBs" = ( +/obj/item/weapon/circuitboard/grill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBu" = ( +/obj/item/weapon/rig/pmc/engineer/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBw" = ( +/obj/item/weapon/fuel_assembly/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBC" = ( +/obj/item/clothing/suit/space/void/merc/axis/axisrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBE" = ( +/obj/machinery/magnetic_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBJ" = ( +/obj/structure/cable/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBL" = ( +/obj/item/seeds/lettuce, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eBY" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCb" = ( +/obj/machinery/papershredder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCd" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/APlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCg" = ( +/obj/item/stack/hairlesshide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCk" = ( +/obj/item/projectile/beam/stun/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCm" = ( +/obj/item/weapon/card/id/centcom/station/fluff/aronai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCz" = ( +/obj/item/device/defib_kit/compact/combat/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCF" = ( +/mob/living/simple_mob/animal/giant_spider/electric/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eCI" = ( +/obj/item/weapon/card/id/gateway/snowfield/class4D, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCJ" = ( +/obj/structure/sign/painting/library_private, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCL" = ( +/obj/item/stack/medical/ointment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCM" = ( +/obj/item/clothing/under/teshari/smock/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCN" = ( +/obj/item/clothing/head/richard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCP" = ( +/obj/item/weapon/grenade/chem_grenade/antiweed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eCT" = ( +/mob/living/simple_mob/construct/harvester{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eDa" = ( +/obj/item/weapon/material/shard/plastitaniumglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDc" = ( +/obj/machinery/power/shield_generator/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDq" = ( +/mob/living/simple_mob/animal/giant_spider/thermic/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eDv" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/strela, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDy" = ( +/obj/item/ammo_casing/chemdart/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDA" = ( +/obj/item/weapon/fuel_assembly/blitz/unshielded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDH" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eDK" = ( +/obj/structure/closet/crate/secure/saare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDO" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDP" = ( +/obj/item/clothing/gloves/evening, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDR" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDW" = ( +/obj/item/weapon/fossil/skull/horned, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eDX" = ( +/obj/structure/prop/memorial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEb" = ( +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEy" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEI" = ( +/obj/item/clothing/head/beret/solgov/homeguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEN" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEO" = ( +/mob/living/simple_mob/animal/giant_spider/nurse{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eEW" = ( +/obj/item/weapon/stock_parts/spring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eEZ" = ( +/obj/item/clothing/under/skirt/colorable/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFd" = ( +/obj/item/clothing/mask/breath/anesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFg" = ( +/obj/item/clothing/head/hood/winter/narsie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFi" = ( +/obj/item/frame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFn" = ( +/obj/item/device/fbp_backup_cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFu" = ( +/obj/item/clothing/accessory/storage/pouches/large/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFC" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/goat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFH" = ( +/obj/item/mecha_parts/part/durand_armour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFK" = ( +/obj/item/toy/nanotrasenballoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFP" = ( +/obj/item/clothing/shoes/flats/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFW" = ( +/obj/item/clothing/under/shorts/jeans/black/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFX" = ( +/obj/item/trash/chipbasket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eFY" = ( +/obj/item/clothing/under/undersuit/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGa" = ( +/obj/structure/prop/blackbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGg" = ( +/obj/item/weapon/storage/backpack/satchel/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGh" = ( +/obj/structure/largecrate/mule, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGw" = ( +/obj/item/device/encryptionkey/headset_cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGA" = ( +/obj/item/clothing/under/rank/captain/fluff/harmuniform/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGO" = ( +/obj/item/weapon/gun/projectile/revolvingrifle/vintage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGR" = ( +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eGX" = ( +/obj/item/weapon/bedsheet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHa" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHb" = ( +/obj/item/weapon/storage/backpack/dufflebag/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHe" = ( +/obj/item/clothing/head/fluff/zara_bandana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHg" = ( +/obj/item/seeds/ambrosiagaiaseed, +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHh" = ( +/obj/item/weapon/gun/energy/gun/fluff/dominator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHl" = ( +/obj/item/seeds/sugarcaneseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHo" = ( +/obj/structure/event/santa_sack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHt" = ( +/obj/item/weapon/storage/box/fluff/swimsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHu" = ( +/obj/item/seeds/eggplantseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHv" = ( +/mob/living/simple_mob/animal/giant_spider{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eHw" = ( +/obj/item/clothing/accessory/scarf/altevian/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHN" = ( +/obj/item/clothing/suit/armor/shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHU" = ( +/obj/item/clothing/head/surgery/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eHV" = ( +/obj/item/clothing/under/swimsuit/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIb" = ( +/obj/machinery/replicator/clothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIc" = ( +/obj/item/clothing/under/shorts/jeans/grey/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIl" = ( +/obj/item/weapon/spacecasinocash/c1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIm" = ( +/obj/structure/sign/directions/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIo" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIp" = ( +/obj/item/device/nif/glitch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIq" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/Ian, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eIr" = ( +/obj/structure/closet/secure_closet/guncabinet/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIz" = ( +/obj/item/rig_module/mounted/phase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIB" = ( +/obj/item/clothing/accessory/flops, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIR" = ( +/obj/item/weapon/circuitboard/telecomms/server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIX" = ( +/obj/item/seeds/plumpmycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eIY" = ( +/obj/item/rig_module/sprinter/pursuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJb" = ( +/obj/item/clothing/under/explorer/utility/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJc" = ( +/obj/structure/door_assembly/door_assembly_mhatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJd" = ( +/obj/item/clothing/suit/space/void/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJq" = ( +/obj/item/clothing/head/helmet/space/vox/civ/botanist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJD" = ( +/mob/living/simple_mob/shadekin/green{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eJM" = ( +/obj/structure/closet/hydrant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJR" = ( +/obj/item/trash/pluto, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eJT" = ( +/obj/item/clothing/mask/smokable/ecig/util, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKe" = ( +/mob/living/simple_mob/vore/pitcher_plant{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eKg" = ( +/obj/machinery/r_n_d/server/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKh" = ( +/obj/item/integrated_circuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKl" = ( +/obj/mecha/working/hoverpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKm" = ( +/obj/structure/sign/flag/icarus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKs" = ( +/obj/structure/sign/directions/gym, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKI" = ( +/obj/structure/closet/crate/engineering/electrical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eKR" = ( +/obj/item/weapon/oar/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLa" = ( +/obj/item/stack/tile/floor/milspec/sterile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLb" = ( +/obj/item/clothing/glasses/hud/health/aviator/prescription/fluff/noel_glasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLc" = ( +/obj/item/clothing/under/color/fjumpsuit/greenf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLh" = ( +/obj/item/clothing/accessory/armor/armorplate/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLu" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/bread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLz" = ( +/mob/living/simple_mob/humanoid/cultist/lizard{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eLB" = ( +/mob/living/simple_mob/vore/woof/hostile/melee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eLF" = ( +/obj/structure/closet/wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLG" = ( +/obj/item/device/modkit_conversion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLN" = ( +/obj/structure/closet/crate/thinktronic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLO" = ( +/obj/item/device/bluespaceradio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eLR" = ( +/obj/item/modular_computer/console/preset/civilian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMd" = ( +/obj/item/toy/figure/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMn" = ( +/obj/item/weapon/spellbook/oneuse/forcewall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMq" = ( +/obj/item/weapon/storage/box/camerabug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMs" = ( +/obj/item/rig_module/vision/multi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMv" = ( +/obj/item/clothing/accessory/solgov/department/security/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMw" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eME" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "11" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eMI" = ( +/obj/item/stack/tile/floor/eris/steel/bar_flat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNl" = ( +/obj/item/weapon/blobcore_chunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNu" = ( +/obj/item/clothing/under/away/patrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNv" = ( +/obj/item/clothing/suit/space/syndicate/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNz" = ( +/obj/item/clothing/under/swimsuit/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNG" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNI" = ( +/obj/item/weapon/soap/diamond_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNS" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/bepis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eNW" = ( +/obj/structure/sign/warning/internals_required, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOa" = ( +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked/mounted/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOc" = ( +/obj/item/weapon/reagent_containers/food/snacks/bagelcheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOf" = ( +/obj/item/rig_module/fabricator/energy_net, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOl" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/limecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOr" = ( +/obj/item/clothing/under/rank/dispatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOt" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eOu" = ( +/obj/item/clothing/under/color/blackjumpskirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOx" = ( +/obj/item/stack/material/cloth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOC" = ( +/obj/item/weapon/circuitboard/borgupload, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOD" = ( +/obj/item/clothing/under/solgov/service/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOJ" = ( +/obj/item/clothing/under/solgov/utility/army/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOO" = ( +/obj/item/weapon/gun/energy/mouseray/otie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOR" = ( +/obj/item/weapon/reagent_containers/food/snacks/spreads/butter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eOW" = ( +/mob/living/simple_mob/humanoid/merc/melee/sword{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eOX" = ( +/obj/item/ammo_magazine/a57/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ePc" = ( +/obj/item/weapon/storage/box/fluff/saur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ePd" = ( +/obj/structure/closet/crate/mimic/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ePk" = ( +/obj/item/weapon/rcd/electric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ePF" = ( +/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ePJ" = ( +/obj/item/clothing/under/teshari/undercoat/standard/white_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQd" = ( +/obj/item/weapon/cartridge/frame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQm" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/keltec/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQq" = ( +/obj/structure/closet/crate/mimic/airlock/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQB" = ( +/obj/item/weapon/gun/projectile/automatic/mini_uzi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQD" = ( +/obj/item/clothing/head/helmet/space/fluff/kate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQO" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/fluff/jiao_labcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQQ" = ( +/obj/item/clothing/suit/storage/snowsuit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQR" = ( +/obj/item/clothing/accessory/scarf/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eQW" = ( +/obj/item/weapon/implant/reagent_generator/egg/slowlowcap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRc" = ( +/obj/item/stack/tile/floor/milspec/raised, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRj" = ( +/obj/machinery/vending/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRn" = ( +/obj/item/mecha_parts/mecha_equipment/tool/extinguisher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRu" = ( +/obj/structure/snowman/borg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRz" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRD" = ( +/obj/item/weapon/gun/projectile/automatic/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/moonshine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRH" = ( +/mob/living/simple_mob/shadekin/yellow{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eRJ" = ( +/obj/machinery/autolathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRX" = ( +/obj/item/seeds/lustflower, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eRY" = ( +/obj/structure/prop/prism/externalcont, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSj" = ( +/obj/item/toy/figure/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSp" = ( +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSt" = ( +/obj/machinery/mineral/equipment_vendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSv" = ( +/mob/living/simple_mob/animal/passive/fish/salmon, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"eSx" = ( +/obj/item/weapon/storage/box/teargas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSE" = ( +/obj/item/weapon/circuitboard/security/telescreen/entertainment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSH" = ( +/obj/item/clothing/under/solgov/service/fleet/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSI" = ( +/obj/item/clothing/head/helmet/space/vox/civ/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSO" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eSP" = ( +/obj/item/integrated_circuit/input/adv_med_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTd" = ( +/obj/item/trash/candy/proteinbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTm" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTu" = ( +/obj/item/clothing/suit/space/void/security/riot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTv" = ( +/obj/item/ammo_magazine/mfoam_dart/pistol/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTz" = ( +/obj/structure/closet/gmcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTB" = ( +/mob/living/simple_mob/otie/cotie/chubby{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eTE" = ( +/mob/living/simple_mob/metroid/juvenile/queen{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eTF" = ( +/obj/item/weapon/module/card_reader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTG" = ( +/obj/structure/sign/scenery/overlay/rust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTI" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/taleoftherainbowcat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTK" = ( +/obj/item/clothing/head/det, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTL" = ( +/obj/item/seeds/killertomatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTV" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eTX" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/ray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eTZ" = ( +/obj/item/flag/almach_p/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUd" = ( +/obj/structure/sign/department/biblio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUr" = ( +/obj/item/weapon/melee/energy/sword/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUu" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUx" = ( +/obj/item/clothing/accessory/vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUy" = ( +/obj/item/ammo_magazine/tp23/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUH" = ( +/obj/item/weapon/gun/energy/ionrifle/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eUU" = ( +/obj/item/weapon/fuel_assembly/blitz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVc" = ( +/obj/machinery/appliance/mixer/candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVe" = ( +/obj/item/toy/bosunwhistle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVf" = ( +/obj/item/weapon/storage/firstaid/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVk" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVr" = ( +/obj/item/weapon/melee/umbrella, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVx" = ( +/obj/item/clothing/suit/security/navyofficer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVQ" = ( +/obj/item/weapon/rig/hazmat/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVS" = ( +/obj/item/weapon/reagent_containers/food/snacks/worm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eVX" = ( +/obj/item/weapon/reagent_containers/food/snacks/truffle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWa" = ( +/obj/item/clothing/accessory/armor/armguards/navy/fluff/saur_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWc" = ( +/obj/item/weapon/gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWd" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWe" = ( +/obj/structure/sign/level/one/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWf" = ( +/obj/item/weapon/storage/backpack/korean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWi" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWJ" = ( +/obj/item/clothing/head/helmet/space/vox/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWK" = ( +/obj/structure/sign/levels/gym, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eWN" = ( +/obj/structure/largecrate/vehicle/quadbike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXg" = ( +/obj/machinery/cryopod/robot/door/gateway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXi" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/capt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXl" = ( +/obj/machinery/magnetic_controller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXn" = ( +/mob/living/simple_mob/mobs_monsters/clowns/clowns{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eXp" = ( +/obj/item/clothing/head/soft/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXu" = ( +/obj/structure/bed/chair/comfy/rounded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXK" = ( +/obj/item/clothing/head/caphat/formal/fedcover/police, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXS" = ( +/obj/item/clothing/head/service/sifguard/senior_command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eXU" = ( +/obj/item/clothing/under/skirt/colorable/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYa" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYd" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/burger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYe" = ( +/obj/structure/closet/syndicate/resources, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYk" = ( +/obj/structure/coatrack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYm" = ( +/obj/item/toy/katana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYn" = ( +/obj/item/device/personal_shield_generator/belt/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYs" = ( +/obj/machinery/appliance/cooker/grill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYt" = ( +/mob/living/simple_mob/animal/passive/fish/perch, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"eYy" = ( +/obj/structure/ship_munition/disperser_charge/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYD" = ( +/obj/item/device/electronic_assembly/large/default, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYH" = ( +/obj/item/clothing/suit/storage/solgov/service/army/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYN" = ( +/obj/item/clothing/ears/skrell/chain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eYR" = ( +/mob/living/simple_mob/mobs_monsters/clowns/wide{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eZe" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"eZi" = ( +/obj/item/clothing/under/rank/head_of_security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZk" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZl" = ( +/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZv" = ( +/obj/structure/bed/holobed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZx" = ( +/obj/item/weapon/gun/projectile/shotgun/pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZI" = ( +/obj/machinery/vending/wardrobe/robodrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZM" = ( +/obj/item/clothing/under/rank/talon/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZO" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZR" = ( +/obj/item/weapon/gun/projectile/SVD, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZT" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/peanutbutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZU" = ( +/obj/item/weapon/reagent_containers/glass/bottle/corophizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"eZW" = ( +/obj/item/clothing/gloves/ring/wedding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fae" = ( +/obj/item/weapon/weldingtool/mini/two, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"faf" = ( +/obj/item/weapon/gun/energy/gun/protector/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fai" = ( +/obj/machinery/atmospherics/pipe/cap/visible/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fam" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"faq" = ( +/obj/item/weapon/storage/backpack/genetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"far" = ( +/obj/item/weapon/spacecash/c200, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"faw" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"faQ" = ( +/obj/item/device/ticket_printer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fbm" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fbn" = ( +/obj/item/robot_parts/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fbt" = ( +/obj/item/weapon/banner/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fbC" = ( +/mob/living/simple_mob/animal/passive/fennec{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fbF" = ( +/obj/machinery/computer/roguezones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fbT" = ( +/obj/structure/showcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcb" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fch" = ( +/obj/item/clothing/suit/space/void/hev/violet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcw" = ( +/obj/item/weapon/hand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcJ" = ( +/obj/item/weapon/toy/snowglobe/stellardelight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcS" = ( +/obj/item/surplus_voucher/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcT" = ( +/obj/structure/sign/nosmoking_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcU" = ( +/obj/item/weapon/gun/energy/vepr/plasma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcY" = ( +/obj/item/clothing/accessory/solgov/department/service/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fcZ" = ( +/obj/item/weapon/storage/backpack/dufflebag/fluff/saur_dufflebag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fde" = ( +/obj/item/trash/hakarl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdj" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdl" = ( +/obj/item/weapon/gun/projectile/automatic/z8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdu" = ( +/obj/item/clothing/under/bluepyjamas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdC" = ( +/obj/item/weapon/storage/pill_bottle/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdF" = ( +/obj/item/weapon/circuitboard/supplycomp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdW" = ( +/obj/item/weapon/storage/vore_egg/pinkspots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fdZ" = ( +/mob/living/simple_mob/xeno_ch/queen/maid, +/turf/simulated/floor/atoll, +/area/survivalpod) +"feg" = ( +/obj/item/mecha_parts/mecha_equipment/storage/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fej" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fek" = ( +/mob/living/simple_mob/animal/sif/sakimm/intelligent, +/turf/simulated/floor/atoll, +/area/survivalpod) +"feq" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fes" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fet" = ( +/obj/item/ammo_magazine/strela/slug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"feu" = ( +/obj/machinery/suit_cycler/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fev" = ( +/obj/item/weapon/gun/energy/locked/frontier/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fex" = ( +/obj/item/clothing/under/permit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fey" = ( +/obj/item/weapon/gun/energy/gun/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"feE" = ( +/obj/structure/sign/levels/science/toxins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"feJ" = ( +/obj/item/weapon/storage/box/syndie_kit/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"feM" = ( +/obj/item/weapon/smes_coil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"feW" = ( +/obj/item/clothing/head/helmet/space/void/medical/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffa" = ( +/obj/item/weapon/gun/energy/xray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffj" = ( +/obj/item/weapon/book/manual/resleeving, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffm" = ( +/mob/living/simple_mob/mechanical/cyber_horror/tajaran{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ffo" = ( +/obj/item/clothing/head/fluff/ketrai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffy" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffE" = ( +/obj/item/weapon/melee/augment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffK" = ( +/obj/structure/grille/broken/rustic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffM" = ( +/obj/item/toy/figure/md, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ffR" = ( +/obj/item/clothing/under/fluff/nightgown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgd" = ( +/obj/item/stack/material/titanium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgi" = ( +/obj/item/organ/internal/kidneys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgk" = ( +/obj/item/weapon/twohanded/fireaxe/fluff/mjollnir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgs" = ( +/obj/structure/sign/department/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgv" = ( +/obj/item/clothing/suit/storage/explorer/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgx" = ( +/obj/item/weapon/spell/construct/slam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgz" = ( +/obj/structure/sign/levels/security/interrogation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgF" = ( +/obj/item/clothing/head/collectable/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgG" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fgJ" = ( +/obj/item/clothing/suit/storage/toggle/cmddressjacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgK" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgN" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fgP" = ( +/obj/item/seeds/amanitamycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhf" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratpackburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhh" = ( +/obj/item/mecha_parts/mecha_equipment/speedboost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhl" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fho" = ( +/mob/living/simple_mob/mechanical/technomancer_golem{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fhq" = ( +/obj/structure/bed/chair/bay/chair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhr" = ( +/obj/item/weapon/card/id/civilian/entertainer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fht" = ( +/obj/item/clothing/ears/earring/dangle/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhB" = ( +/obj/item/weapon/pen/crayon/marker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhI" = ( +/obj/item/weapon/rig/hazmat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhK" = ( +/obj/structure/cult/pylon/swarm/defender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhN" = ( +/obj/item/toy/mecha/gygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhW" = ( +/obj/item/weapon/book/bundle/custom_library/reference/fbpandprostheticmaintenance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fhZ" = ( +/obj/item/clothing/head/beret/sec/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fid" = ( +/obj/item/toy/chewtoy/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fii" = ( +/obj/machinery/button/remote, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fil" = ( +/obj/item/ammo_magazine/m5mmcaseless/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiu" = ( +/obj/structure/simple_door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiA" = ( +/obj/item/stack/material/log/hard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiB" = ( +/obj/item/clothing/head/nun_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiC" = ( +/obj/structure/cable/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiH" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiI" = ( +/obj/item/weapon/card/id/event/altcard/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiJ" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiK" = ( +/obj/item/toy/figure/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiM" = ( +/obj/item/rig_module/device/orescanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiO" = ( +/obj/item/weapon/reagent_containers/food/snacks/cinnamonroll, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiS" = ( +/obj/item/toy/figure/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiX" = ( +/obj/item/integrated_circuit/logic/binary/less_than_or_equal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fiY" = ( +/obj/item/weapon/gun/projectile/smartgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjk" = ( +/obj/item/rig_module/stealth_field, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjm" = ( +/obj/item/weapon/plantspray/pests/old/lindane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjq" = ( +/obj/item/ammo_magazine/tp23, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjv" = ( +/obj/item/clothing/under/nanotrasen/security/commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjF" = ( +/obj/item/clothing/gloves/tactical/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjG" = ( +/obj/item/integrated_circuit/transfer/multiplexer/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjJ" = ( +/obj/item/seeds/vanilla, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjW" = ( +/obj/structure/sign/directions/engineering/gravgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjY" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/mob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fjZ" = ( +/obj/item/clothing/head/cowboy/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkb" = ( +/obj/item/weapon/implantcase/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkh" = ( +/obj/structure/sign/deck1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkk" = ( +/obj/item/ammo_magazine/mg42, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkl" = ( +/obj/item/clothing/accessory/jacket/altevian/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fko" = ( +/obj/item/weapon/dnainjector/antifire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkp" = ( +/obj/item/weapon/moneybag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkv" = ( +/obj/item/weapon/card/id/security/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkO" = ( +/obj/item/clothing/suit/armor/vest/wolftaur/serdy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkR" = ( +/obj/item/seeds/pumpkinseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkV" = ( +/obj/item/device/encryptionkey/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fkW" = ( +/obj/item/weapon/circuitboard/oven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flg" = ( +/obj/item/ammo_casing/microbattery/medical/stabilize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flj" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flp" = ( +/obj/machinery/atmospherics/tvalve/bypass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flw" = ( +/obj/machinery/power/solar/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flz" = ( +/obj/item/stack/tile/floor/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flH" = ( +/obj/item/clothing/suit/storage/fluff/ivy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flI" = ( +/obj/item/clothing/head/hood/winter/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flP" = ( +/obj/structure/sign/atmos/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flS" = ( +/obj/item/weapon/phone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"flY" = ( +/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmo" = ( +/obj/item/clothing/under/solgov/service/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fms" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmy" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmA" = ( +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmC" = ( +/obj/item/ammo_casing/microbattery/medical/burn2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmD" = ( +/obj/item/clothing/under/suit_jacket/tan/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmS" = ( +/obj/machinery/light/small/readylight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmT" = ( +/obj/item/weapon/circuitboard/algae_farm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fmY" = ( +/obj/structure/sign/warning/nosmoking_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fng" = ( +/obj/item/weapon/storage/mre/menu10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnh" = ( +/obj/item/weapon/reagent_containers/food/snacks/reishicup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnm" = ( +/obj/structure/sign/botany, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fns" = ( +/obj/item/clothing/mask/breath/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnt" = ( +/obj/item/organ/internal/heart/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnv" = ( +/obj/item/seeds/hardlightseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnz" = ( +/obj/item/clothing/accessory/ribbon/solgov/marksman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnB" = ( +/obj/item/clothing/under/rank/security/corp/fluff/melissa_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnL" = ( +/obj/item/clothing/head/helmet/space/void/altevian_heartbreaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnN" = ( +/obj/structure/fans/hardlight/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnO" = ( +/obj/item/clothing/accessory/stethoscope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fnY" = ( +/mob/living/simple_mob/animal/sif/siffet{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fod" = ( +/obj/item/weapon/circuitboard/arcade/clawmachine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"foe" = ( +/obj/machinery/door/airlock/angled_bay/external, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"foj" = ( +/obj/item/weapon/storage/pill_bottle/vermicetol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fov" = ( +/obj/structure/sign/flag/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"foC" = ( +/mob/living/simple_mob/slime{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fpc" = ( +/obj/machinery/atmospherics/unary/vent_pump/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpn" = ( +/obj/item/clothing/under/altevian/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpq" = ( +/obj/item/weapon/rig/ch/pursuit/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpv" = ( +/obj/item/clothing/accessory/armor/tag/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpL" = ( +/obj/item/weapon/tool/screwdriver/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpN" = ( +/obj/item/weapon/implantcase/vrlanguage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpW" = ( +/obj/vehicle/train/security/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fpZ" = ( +/obj/item/rig_module/device/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqu" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqv" = ( +/obj/item/clothing/suit/storage/toggle/dress/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqw" = ( +/obj/item/clothing/under/corp/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqy" = ( +/mob/living/simple_mob/animal/passive/bird, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fqz" = ( +/obj/structure/sign/directions/bridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqE" = ( +/obj/item/weapon/soap/water_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqK" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqL" = ( +/obj/item/clothing/head/fluff/pompom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqP" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/cargo/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqW" = ( +/obj/machinery/floor_light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fqY" = ( +/obj/item/clothing/head/soft/mbill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frg" = ( +/obj/item/weapon/storage/toolbox/lunchbox/mars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frk" = ( +/obj/item/clothing/suit/varsity/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frq" = ( +/obj/item/weapon/storage/backpack/sport/hyd/catchemall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frt" = ( +/obj/item/clothing/glasses/hud/health/aviator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frv" = ( +/obj/item/weapon/storage/mre/menu8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frC" = ( +/obj/item/clothing/shoes/mech_shoes/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frH" = ( +/obj/item/weapon/storage/mrebag/menu5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frJ" = ( +/obj/item/clothing/under/fluff/kilanosuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frM" = ( +/mob/living/simple_mob/mobs_monsters/clowns/thin{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"frW" = ( +/obj/item/clothing/accessory/scarf/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frX" = ( +/obj/item/ammo_magazine/m9mm/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"frY" = ( +/mob/living/simple_mob/vore/alienanimals/teppi/baby{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fsc" = ( +/obj/item/weapon/reagent_containers/food/snacks/garlicbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsd" = ( +/obj/structure/simple_door/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fse" = ( +/obj/item/clothing/under/solgov/utility/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsk" = ( +/obj/item/clothing/shoes/boots/winter/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsl" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal/wulf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fst" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsz" = ( +/obj/item/weapon/flame/match, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsA" = ( +/obj/item/clothing/accessory/solgov/department/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsQ" = ( +/obj/item/clothing/accessory/fluff/zeta_blackwell_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsT" = ( +/obj/item/stack/material/glass/phoronglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fsX" = ( +/obj/structure/bed/chair/sofa/right/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fte" = ( +/obj/item/integrated_circuit/arithmetic/division, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftl" = ( +/obj/item/ammo_magazine/m545/hunter/ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftm" = ( +/obj/item/ammo_magazine/m9mm/luger/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftt" = ( +/obj/item/weapon/dnainjector/antiepi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fty" = ( +/obj/item/clothing/head/soft/solgov/veteranhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftE" = ( +/obj/item/weapon/storage/toolbox/lunchbox/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftI" = ( +/obj/item/clothing/under/det/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftV" = ( +/obj/structure/AIcore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ftY" = ( +/obj/item/integrated_circuit/converter/concatenator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuh" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/alecan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fum" = ( +/obj/item/ammo_casing/a556/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuo" = ( +/obj/structure/closet/crate/bin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fut" = ( +/obj/item/surplus_voucher/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuw" = ( +/obj/item/weapon/storage/pill_bottle/kelotane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuF" = ( +/obj/structure/bed/chair/comfy/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuM" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuN" = ( +/obj/item/clothing/under/qipao2_colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fuZ" = ( +/obj/machinery/door_timer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvk" = ( +/obj/item/clothing/under/tropical/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvn" = ( +/obj/item/clothing/head/collectable/paper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvq" = ( +/obj/item/weapon/ore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvs" = ( +/obj/item/clothing/suit/space/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvw" = ( +/obj/item/weapon/reagent_containers/food/snacks/organ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvz" = ( +/obj/structure/bed/chair/sofa/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvB" = ( +/obj/item/weapon/gun/projectile/cyborgtoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvC" = ( +/obj/item/weapon/ore/slag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvE" = ( +/mob/living/simple_mob/animal/wolf/space{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fvL" = ( +/obj/item/weapon/storage/wallet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fvY" = ( +/obj/item/clothing/suit/space/vox/civ/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwb" = ( +/obj/item/weapon/reagent_containers/food/snacks/mushroomslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwj" = ( +/obj/item/weapon/gun/energy/hooklauncher/ring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwm" = ( +/obj/structure/closet/secure_closet/nanotrasen_security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwx" = ( +/obj/item/weapon/melee/energy/sword/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwE" = ( +/obj/item/ammo_magazine/ammo_box/b545/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwH" = ( +/obj/item/clothing/accessory/medal/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwJ" = ( +/obj/item/clothing/under/frontier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwK" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fwM" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwQ" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwV" = ( +/obj/item/weapon/circuitboard/fax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fwW" = ( +/obj/item/clothing/under/solgov/utility/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxi" = ( +/obj/item/weapon/gun/projectile/makarov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxk" = ( +/obj/item/clothing/under/wedding/bride_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxm" = ( +/obj/item/weapon/dice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxx" = ( +/obj/item/weapon/storage/vore_egg/nevrean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxB" = ( +/obj/item/weapon/fuel_assembly/blitz/shielded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxD" = ( +/obj/machinery/atmospheric_field_generator/impassable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxI" = ( +/obj/item/weapon/bedsheet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxL" = ( +/obj/item/weapon/tool/crowbar/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxM" = ( +/obj/item/clothing/head/helmet/combat/bedevere_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxQ" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fxT" = ( +/obj/item/clothing/suit/storage/vest/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyb" = ( +/obj/item/device/taperecorder/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyg" = ( +/obj/structure/reagent_dispensers/fueltank/barrel/two, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyp" = ( +/obj/machinery/smartfridge/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyv" = ( +/obj/structure/closet/radiation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyw" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyE" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyL" = ( +/obj/item/integrated_circuit/memory/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyQ" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyR" = ( +/mob/living/simple_mob/animal/passive/cat/bread, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fyU" = ( +/obj/item/clothing/head/culthood/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyV" = ( +/obj/item/weapon/storage/backpack/messenger/hyd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fyY" = ( +/obj/item/weapon/circuitboard/distiller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzb" = ( +/obj/item/device/paicard/flipper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fze" = ( +/obj/structure/sign/atmos/co2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzh" = ( +/obj/item/clothing/mask/bandana/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzm" = ( +/obj/structure/door_assembly/door_assembly_atmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzw" = ( +/obj/item/weapon/surgical/scalpel/laser3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzA" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzD" = ( +/obj/item/clothing/suit/varsity/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fzV" = ( +/mob/living/simple_mob/animal/space/alien/queen{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fAd" = ( +/obj/item/hoist_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAp" = ( +/obj/structure/prop/machine/alien_tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAs" = ( +/obj/item/clothing/shoes/hitops/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAu" = ( +/obj/item/weapon/gun/projectile/deagle/camo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAM" = ( +/obj/item/organ/internal/stomach, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAR" = ( +/obj/structure/bed/chair/sofa/corner/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fAS" = ( +/mob/living/simple_mob/mechanical/viscerator/station{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fBb" = ( +/obj/item/integrated_circuit/manipulation/Size, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBe" = ( +/obj/item/stack/material/plasteel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBk" = ( +/obj/item/weapon/reagent_containers/pill/carbon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBy" = ( +/obj/structure/bed/chair/e_chair{ + icon_state = "bar_stool_base" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBz" = ( +/obj/item/weapon/circuitboard/cryopodcontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBA" = ( +/obj/item/clothing/under/solgov/service/army/command/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBF" = ( +/obj/structure/bed/chair/sofa/right/purp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBK" = ( +/obj/item/weapon/gun/projectile/automatic/combatsmg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBL" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBP" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBS" = ( +/obj/item/clothing/under/sheerblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fBV" = ( +/obj/item/weapon/storage/vore_egg/slimeglob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCc" = ( +/obj/item/weapon/spell/aura/shock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCg" = ( +/obj/machinery/computer/stockexchange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCl" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/orange_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCx" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCz" = ( +/obj/item/clothing/accessory/bracelet/friendship, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCJ" = ( +/obj/item/clothing/under/summerdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCL" = ( +/obj/item/seeds/bananaseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCO" = ( +/obj/item/weapon/tank/air, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCP" = ( +/obj/item/stack/tile/floor/eris/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fCZ" = ( +/obj/item/clothing/gloves/combat/knight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDa" = ( +/obj/item/clothing/accessory/storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDh" = ( +/obj/machinery/power/solar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDv" = ( +/obj/item/weapon/gun/energy/particle/cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDw" = ( +/obj/item/weapon/spell/shared_burden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDy" = ( +/obj/item/weapon/chaoscake_layer/three, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDC" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sobakacube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDK" = ( +/obj/item/clothing/under/rank/khi/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fDT" = ( +/obj/item/stack/tile/floor/eris/white/techfloor_grid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEb" = ( +/obj/item/weapon/gun/energy/laser/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEm" = ( +/obj/item/weapon/storage/box/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEA" = ( +/obj/item/weapon/circuitboard/airalarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fED" = ( +/obj/item/weapon/tool/crowbar/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEG" = ( +/obj/item/weapon/implantcase/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEI" = ( +/obj/item/weapon/reagent_containers/food/snacks/chips, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEK" = ( +/obj/item/toy/mecha/honk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fET" = ( +/obj/item/weapon/vehicle_assembly/spacebike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEU" = ( +/obj/structure/sign/directions/ladder_up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEV" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEW" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/jessie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fEX" = ( +/obj/structure/closet/crate/oculum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFf" = ( +/obj/item/weapon/storage/box/donut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFA" = ( +/obj/item/ammo_magazine/clip/c762, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFF" = ( +/obj/item/clothing/head/welding/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFK" = ( +/obj/structure/sign/department/ai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFL" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFM" = ( +/obj/machinery/r_n_d/protolathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFO" = ( +/obj/item/weapon/gun/energy/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFS" = ( +/obj/item/clothing/accessory/tie/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fFW" = ( +/mob/living/simple_mob/vore/aggressive/mimic/floor/plating{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fGg" = ( +/obj/item/clothing/head/pilot_vr/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGh" = ( +/obj/item/weapon/cat_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGi" = ( +/obj/item/weapon/folder/blue_captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGl" = ( +/obj/item/clothing/head/helmet/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGu" = ( +/obj/item/clothing/suit/cultrobes/magusred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGE" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/suppressor{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fGK" = ( +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGP" = ( +/obj/machinery/telecomms/receiver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGQ" = ( +/obj/structure/door_assembly/door_assembly_com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fGW" = ( +/obj/machinery/atmospherics/pipe/zpipe/down, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHk" = ( +/obj/item/weapon/bedsheet/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHv" = ( +/obj/item/clothing/under/rank/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHG" = ( +/obj/item/integrated_circuit/output/sound, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHM" = ( +/obj/structure/sign/levels/engineering/reactor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHP" = ( +/obj/item/clothing/suit/space/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/plain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHR" = ( +/obj/item/weapon/reagent_containers/food/snacks/stew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHS" = ( +/mob/living/simple_mob/vore/slug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fHU" = ( +/obj/item/weapon/circuitboard/quantumpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fHW" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/snake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIf" = ( +/obj/item/weapon/c_tube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIg" = ( +/obj/machinery/vending/event/uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIi" = ( +/obj/structure/closet/crate/hydroponics/exotic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIl" = ( +/obj/item/clothing/head/chaplain_hood/whiteout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIn" = ( +/obj/item/weapon/implant/language/skrellian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIt" = ( +/obj/item/clothing/head/hood/galahad_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIz" = ( +/obj/item/clothing/accessory/collar/collarplanet_earth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIE" = ( +/obj/item/ammo_magazine/type901/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fII" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIK" = ( +/obj/item/stack/material/flint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIL" = ( +/obj/structure/sign/directions/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIR" = ( +/obj/item/weapon/rsf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fIY" = ( +/obj/item/weapon/material/knife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJa" = ( +/obj/item/weapon/storage/bag/circuits/mini/reagents/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJj" = ( +/obj/item/weapon/circuitboard/telesci_pad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJs" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJC" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJD" = ( +/obj/item/clothing/head/fluff/nikki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJG" = ( +/obj/item/stack/cable_coil/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJJ" = ( +/obj/item/weapon/inducer/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJN" = ( +/obj/item/stack/cable_coil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJR" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/bishop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJV" = ( +/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fJZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb04, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKb" = ( +/obj/item/clothing/suit/storage/flannel/aqua, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKc" = ( +/obj/machinery/computer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKg" = ( +/obj/item/stack/tile/floor/eris/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKi" = ( +/obj/item/clothing/shoes/laceup/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKk" = ( +/obj/item/weapon/rig/vox/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKt" = ( +/obj/item/weapon/reagent_containers/food/snacks/roastbeef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKv" = ( +/obj/machinery/power/rtg/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKB" = ( +/obj/fiftyspawner/tealcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fKF" = ( +/obj/item/device/camera_film, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLb" = ( +/obj/item/toy/plushie/crimson_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLc" = ( +/obj/item/clothing/mask/gas/swat/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLd" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLf" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLh" = ( +/obj/structure/sign/sec3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLi" = ( +/obj/item/clothing/suit/armor/vest/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLl" = ( +/obj/item/weapon/storage/box/mixedglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLn" = ( +/obj/item/clothing/accessory/armor/tag/abpos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLt" = ( +/obj/structure/bonfire/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLA" = ( +/obj/item/clothing/mask/nock_demon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLB" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLI" = ( +/obj/item/integrated_circuit/converter/refcode, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLL" = ( +/obj/structure/table/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fLV" = ( +/obj/item/device/radio/headset/explorer/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMe" = ( +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMg" = ( +/obj/structure/sign/nosmoking_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMk" = ( +/obj/structure/sign/directions/security/interrogation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMl" = ( +/obj/structure/cult/tome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMp" = ( +/obj/item/clothing/accessory/poncho/roles/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMq" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMr" = ( +/obj/item/mecha_parts/part/odysseus_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMw" = ( +/obj/item/device/encryptionkey/heads/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMz" = ( +/obj/item/ammo_casing/a9mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMB" = ( +/obj/item/weapon/storage/backpack/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMC" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMG" = ( +/obj/item/weapon/digestion_remains/skull/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMM" = ( +/obj/item/clothing/under/rank/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/dip/guac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMT" = ( +/obj/item/weapon/storage/box/bloodpacks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fMV" = ( +/obj/item/clothing/head/beret/solgov/sifguard/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNc" = ( +/obj/item/clothing/head/helmet/space/void/responseteam/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNe" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNi" = ( +/obj/item/seeds/wildwabback, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNy" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNA" = ( +/mob/living/simple_mob/animal/giant_spider/hunter/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fND" = ( +/obj/item/clothing/head/helmet/space/void/engineering/salvage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNF" = ( +/mob/living/simple_mob/animal/borer, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fNH" = ( +/obj/item/weapon/tool/screwdriver/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNM" = ( +/obj/item/clothing/head/helmet/space/vox/civ/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNN" = ( +/obj/item/weapon/gun/energy/altevian/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNO" = ( +/obj/structure/closet/crate/carp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNS" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/dart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNV" = ( +/obj/item/clothing/under/medigown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fNY" = ( +/obj/item/ammo_magazine/box/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOf" = ( +/obj/item/clothing/suit/armor/vest/harpsong, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOm" = ( +/obj/item/clothing/accessory/poncho/roles/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOn" = ( +/obj/structure/barricade/cutout/deathsquad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOs" = ( +/obj/item/seeds/chantermycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOt" = ( +/obj/item/weapon/reagent_containers/glass/bottle/pacid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOx" = ( +/obj/item/clothing/shoes/none, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOQ" = ( +/obj/item/clothing/suit/space/void/refurb/research/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fOU" = ( +/obj/item/modular_computer/telescreen/preset/generic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPf" = ( +/obj/item/clothing/accessory/armor/helmcover/blue/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPi" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sharkmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPl" = ( +/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fPo" = ( +/obj/item/weapon/storage/fancy/cigarettes/professionals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPr" = ( +/obj/item/organ/internal/kidneys/alraune, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPt" = ( +/obj/item/seeds/rose, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPu" = ( +/obj/item/ammo_casing/a762x39/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPv" = ( +/obj/item/clothing/shoes/leg_guard/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPw" = ( +/obj/fiftyspawner/sblucarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPy" = ( +/obj/item/weapon/staff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPz" = ( +/obj/item/weapon/dnainjector/antimorph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPB" = ( +/obj/item/weapon/paper/crumpled/bloody/CrashedMedShuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPF" = ( +/obj/item/device/personal_shield_generator/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPJ" = ( +/obj/machinery/computer/message_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fPU" = ( +/obj/item/clothing/gloves/gauntlets/rig/ch/aegis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQc" = ( +/obj/item/device/radio/bluespacehandset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQg" = ( +/obj/item/clothing/shoes/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQj" = ( +/obj/item/weapon/melee/energy/sword/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQl" = ( +/obj/item/weapon/aiModule/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQs" = ( +/obj/structure/sink/kitchen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQu" = ( +/obj/item/weapon/implantcase/toolkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQB" = ( +/obj/item/stack/tile/floor/eris/derelict2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQD" = ( +/obj/item/weapon/spell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQE" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQR" = ( +/obj/item/clothing/shoes/boots/winter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fQT" = ( +/obj/item/stack/medical/splint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRa" = ( +/obj/item/taperoll/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRb" = ( +/obj/item/clothing/suit/space/void/refurb/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRj" = ( +/obj/structure/closet/secure_closet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRn" = ( +/obj/item/ammo_casing/a9mm/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRw" = ( +/obj/item/mecha_parts/component/armor/marshal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRx" = ( +/obj/item/toy/plushie/otter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRy" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/cake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRC" = ( +/obj/item/clothing/head/fedora/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRM" = ( +/obj/machinery/atmospherics/tvalve/digital/mirrored/bypass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRQ" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/splat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fRR" = ( +/obj/item/clothing/under/owl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRT" = ( +/obj/item/clothing/mask/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRV" = ( +/obj/machinery/smartfridge/chemistry/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fRX" = ( +/obj/item/weapon/telecube/mated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSd" = ( +/obj/item/weapon/coin/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSk" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSo" = ( +/obj/item/device/radio/uplink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSu" = ( +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSv" = ( +/obj/structure/sign/levels/telecomms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSy" = ( +/obj/item/clothing/head/soft/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSA" = ( +/obj/item/clothing/head/culthood/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSE" = ( +/obj/structure/curtain/open/shower/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSG" = ( +/obj/item/weapon/storage/bag/cash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSL" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fSY" = ( +/mob/living/silicon/pai/infomorph, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fSZ" = ( +/obj/structure/sign/directions/science/toxins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTq" = ( +/obj/item/trash/tray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTw" = ( +/obj/item/stack/medical/advanced/clotting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTD" = ( +/obj/item/ammo_casing/macrobattery/ouchie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTE" = ( +/obj/item/clothing/head/beret/solgov/sifguard/branch/observatory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTH" = ( +/obj/item/clothing/glasses/thermal/plain/monocle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTI" = ( +/obj/item/projectile/bullet/rifle/a556/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTJ" = ( +/obj/item/clothing/under/rank/chief_engineer/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTL" = ( +/obj/item/weapon/gun/energy/mouseray/woof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTM" = ( +/obj/machinery/button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTN" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fTP" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/meatration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fTQ" = ( +/mob/living/simple_mob/humanoid/pirate/mate/ranged/rifle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fUj" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/research/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUk" = ( +/obj/item/toy/figure/serbian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUn" = ( +/obj/machinery/vending/nifsoft_shop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUr" = ( +/obj/structure/closet/secure_closet/hydroponics/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUy" = ( +/obj/item/prop/alien/phasecoil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUB" = ( +/obj/item/weapon/disk/limb/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUG" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUJ" = ( +/obj/item/weapon/circuitboard/bomb_tester, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUP" = ( +/obj/structure/closet/secure_closet/nanotrasen_warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fUT" = ( +/obj/structure/prop/nt_optable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVb" = ( +/obj/structure/sign/levels/engineering/atmospherics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVf" = ( +/obj/machinery/shieldwall{ + dir = 6 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVg" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVh" = ( +/obj/item/weapon/kitchenknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVi" = ( +/obj/item/device/radio/subspace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVm" = ( +/obj/item/clothing/mask/gas/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVo" = ( +/obj/item/clothing/gloves/fluff/morsleeves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVs" = ( +/obj/item/weapon/aiModule/freeform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVu" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVB" = ( +/obj/item/clothing/accessory/poncho/cloak/fluff/Jaree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVL" = ( +/obj/item/integrated_circuit/converter/separator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVM" = ( +/obj/item/toy/plushie/borgplushie/drake/mine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVT" = ( +/obj/item/weapon/dnainjector/antiregenerate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fVZ" = ( +/obj/structure/closet/secure_closet/xenoarchaeologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWa" = ( +/obj/item/clothing/under/shorts/jeans/classic/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWb" = ( +/obj/item/organ/internal/eyes/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWe" = ( +/obj/item/clothing/accessory/poncho/thermal/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWm" = ( +/obj/structure/bedsheetbin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWq" = ( +/obj/structure/ship_munition/disperser_charge/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWs" = ( +/obj/item/weapon/gun/energy/locked/frontier/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWw" = ( +/obj/item/clothing/head/hood/winter/ratvar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fWJ" = ( +/obj/item/clothing/under/rank/head_of_personnel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXf" = ( +/obj/item/weapon/banner/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXn" = ( +/obj/machinery/shield/malfai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXr" = ( +/obj/item/weapon/storage/bag/circuits/mini/smart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXy" = ( +/obj/item/weapon/mop/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXA" = ( +/obj/item/weapon/fossil/plant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXR" = ( +/obj/item/clothing/suit/space/void/exploration/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fXS" = ( +/obj/item/weapon/storage/box/smokes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYb" = ( +/obj/item/clothing/under/fashionminiskirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYf" = ( +/obj/item/clothing/under/dress/singer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYg" = ( +/obj/structure/ghost_pod/manual/lost_drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYh" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYs" = ( +/mob/living/simple_mob/mechanical/combat_drone{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"fYz" = ( +/obj/item/weapon/reagent_containers/food/snacks/pancakes/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYA" = ( +/obj/item/clothing/under/punpun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYC" = ( +/obj/item/trash/kokobar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYI" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fYQ" = ( +/obj/machinery/button/remote/blast_door/radproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZe" = ( +/obj/item/clothing/under/pants/baggy/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZp" = ( +/obj/structure/sign/scenery/engineleft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZu" = ( +/obj/item/pizzabox/vegetable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZx" = ( +/obj/item/toy/figure/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZF" = ( +/obj/item/organ/internal/lungs/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZR" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"fZW" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9_alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaa" = ( +/obj/item/weapon/reagent_containers/food/snacks/salo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gah" = ( +/obj/item/organ/internal/heart/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gak" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/keltec/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaq" = ( +/obj/item/clothing/head/helmet/space/void/makeshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaz" = ( +/obj/structure/closet/crate/freezer/veymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaQ" = ( +/obj/item/weapon/computer_hardware/card_slot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaR" = ( +/obj/item/weapon/storage/toolbox/lunchbox/cat/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaS" = ( +/obj/structure/sign/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gaT" = ( +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbd" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/brown_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbe" = ( +/obj/item/integrated_circuit/logic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbh" = ( +/obj/item/instrument/piano_synth/headphones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbk" = ( +/obj/item/clothing/gloves/combat/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbp" = ( +/obj/item/weapon/material/twohanded/baseballbat/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbr" = ( +/obj/item/weapon/material/knife/stone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbs" = ( +/obj/machinery/media/jukebox/ghost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbu" = ( +/obj/structure/bed/chair/bay/comfy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbv" = ( +/obj/item/clothing/under/rank/head_of_security/navyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbC" = ( +/obj/structure/ghost_pod/ghost_activated/swarm_drone/event/melee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbE" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/iaa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbJ" = ( +/obj/machinery/pipedispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gbK" = ( +/mob/living/simple_mob/animal/passive/cat/cak, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gbQ" = ( +/obj/item/integrated_circuit/input/gps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gce" = ( +/obj/item/weapon/disk/limb/dsi_vulpkanin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gco" = ( +/obj/item/weapon/material/ashtray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcq" = ( +/obj/item/clothing/suit/space/void/security/hasd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcB" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/gingerale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcD" = ( +/obj/item/clothing/shoes/boots/hoof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcG" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/mankini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcH" = ( +/obj/item/weapon/secbot_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcI" = ( +/obj/structure/sign/painting/public, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcJ" = ( +/obj/item/clothing/head/helmet/space/deathsquad/beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcM" = ( +/obj/structure/bed/chair/sofa/left/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcR" = ( +/obj/item/weapon/grenade/chem_grenade/metalfoam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gcY" = ( +/obj/item/weapon/card/id/casino/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdi" = ( +/obj/structure/closet/crate/mimic/airlock/cointoss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdk" = ( +/obj/item/seeds/cornseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdn" = ( +/obj/item/clothing/accessory/choker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdt" = ( +/obj/item/weapon/storage/bag/circuits/mini/converter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdv" = ( +/obj/item/clamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdy" = ( +/obj/item/clothing/accessory/fluff/alex_wolf_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdE" = ( +/obj/item/clothing/head/helmet/space/void/refurb/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdL" = ( +/obj/item/seeds/wheatseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdQ" = ( +/obj/machinery/atmospherics/pipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdR" = ( +/obj/machinery/power/turbinemotor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gdZ" = ( +/obj/structure/prop/machine/tgmc_console3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gei" = ( +/obj/item/weapon/implant/dud/torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geo" = ( +/obj/item/weapon/stock_parts/manipulator/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gev" = ( +/obj/item/clothing/head/beanie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gey" = ( +/obj/item/clothing/suit/storage/bomber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geD" = ( +/obj/item/weapon/cane/white/collapsible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geF" = ( +/obj/item/organ/internal/nano/orchestrator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geG" = ( +/obj/item/stack/arcadeticket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geN" = ( +/obj/item/clothing/suit/space/void/medical/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geP" = ( +/obj/item/stack/tile/roofing/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geU" = ( +/obj/item/clothing/shoes/boots/fluff/kilano/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"geW" = ( +/obj/item/mecha_parts/part/scarab_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfa" = ( +/mob/living/simple_mob/animal/giant_spider/ion{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gfp" = ( +/obj/item/ammo_casing/a45/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfx" = ( +/obj/machinery/light/flamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfB" = ( +/obj/item/clothing/gloves/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfF" = ( +/obj/item/weapon/circuitboard/injector_maker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfI" = ( +/obj/item/clothing/head/helmet/space/skrell/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfJ" = ( +/obj/item/weapon/gun/energy/mouseray/catslug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfS" = ( +/obj/structure/biowaste_tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfU" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gfZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gge" = ( +/obj/item/weapon/flame/lighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggh" = ( +/obj/machinery/button/windowtint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggv" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggw" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggA" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggB" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/greentea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggL" = ( +/obj/structure/balloon/bat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggN" = ( +/obj/item/clothing/under/rank/security/corp/fluff/jessica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggO" = ( +/obj/item/weapon/bedsheet/clowndouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggU" = ( +/obj/item/weapon/reagent_containers/glass/beaker/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggX" = ( +/obj/mecha/combat/gygax/serenity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ggY" = ( +/obj/item/clothing/head/helmet/space/void/medical/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghb" = ( +/obj/item/weapon/gun/energy/locked/phasegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghi" = ( +/obj/machinery/atmospherics/valve/digital/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghj" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gho" = ( +/obj/item/clothing/suit/bio_suit/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghp" = ( +/obj/item/weapon/reagent_containers/food/snacks/plump_pie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghq" = ( +/obj/item/ammo_magazine/m545/ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghs" = ( +/obj/item/clothing/head/beret/science/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghu" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghB" = ( +/obj/item/weapon/reagent_containers/pill/citalopram, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghD" = ( +/obj/item/weapon/coin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghM" = ( +/obj/item/weapon/card/id/event/altcard/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghP" = ( +/obj/structure/closet/malf/suits, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghR" = ( +/obj/structure/sign/levels/science/rnd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghU" = ( +/obj/item/weapon/storage/box/empslite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ghW" = ( +/obj/machinery/vending/wardrobe/chefdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gik" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gim" = ( +/obj/item/clothing/under/fluff/gnshorts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gio" = ( +/obj/item/device/electronic_assembly/clothing/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giw" = ( +/obj/item/weapon/bedsheet/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giA" = ( +/obj/item/weapon/oar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giE" = ( +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giN" = ( +/obj/item/device/modkit_conversion/fluff/kaith_knife_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giP" = ( +/obj/item/weapon/storage/backpack/satchel/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giT" = ( +/obj/structure/closet/secure_closet/egg/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"giU" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/sprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjb" = ( +/obj/structure/smolebuilding/houses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gje" = ( +/obj/item/weapon/cartridge/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjk" = ( +/obj/structure/showcase/sign/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjt" = ( +/obj/item/weapon/circuitboard/unary_atmos/heater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gju" = ( +/obj/machinery/nuclearbomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjw" = ( +/obj/item/clothing/suit/storage/hooded/hoodie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjD" = ( +/obj/structure/sign/deathsposal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjF" = ( +/obj/item/ammo_magazine/clip/c545/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjH" = ( +/obj/item/weapon/rcd/shipwright/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjI" = ( +/obj/structure/fireplace/barrel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjL" = ( +/obj/item/clothing/head/helmet/space/void/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjO" = ( +/obj/trader/capture_crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjQ" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/adm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjS" = ( +/obj/item/clothing/head/beret/solgov/orbital, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjT" = ( +/obj/item/clothing/accessory/armor/armguards/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjY" = ( +/obj/item/weapon/storage/box/capguntoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gjZ" = ( +/obj/item/weapon/implantcase/dexplosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkb" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkc" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkj" = ( +/obj/item/ammo_magazine/s45/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkl" = ( +/obj/item/clothing/suit/barding/agatha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkr" = ( +/obj/machinery/vending/wardrobe/secdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkv" = ( +/obj/item/clothing/accessory/bracelet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkJ" = ( +/obj/machinery/power/rtg/abductor/hybrid/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkN" = ( +/mob/living/simple_mob/humanoid/possessed/merc/feral{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gkQ" = ( +/obj/item/clothing/glasses/sunglasses/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gkW" = ( +/obj/item/seeds/cinnamon, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gle" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/smw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glm" = ( +/obj/structure/prop/statue/lion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glr" = ( +/mob/living/simple_mob/vore/aggressive/panther{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gls" = ( +/obj/item/capture_crystal/demon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glt" = ( +/obj/item/clothing/under/solgov/service/sifguard/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glu" = ( +/obj/machinery/oxygen_pump/mobile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glx" = ( +/obj/item/device/nif/bad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"glI" = ( +/obj/item/seeds/peanutseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gmd" = ( +/obj/structure/closet/secure_closet/medical3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gme" = ( +/obj/item/device/nif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gmf" = ( +/obj/item/toy/plushie/slimeplushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gmk" = ( +/obj/item/ammo_casing/a762x39/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gmp" = ( +/obj/item/clothing/suit/space/void/altevian_heartbreaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gmY" = ( +/obj/item/clothing/accessory/collar/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gna" = ( +/obj/item/weapon/disk/limb/dsi_zorren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gng" = ( +/obj/item/clothing/under/dress/wench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnw" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "18" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gny" = ( +/obj/item/clothing/gloves/botanic_leather, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnA" = ( +/obj/item/rig_module/device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnD" = ( +/obj/item/weapon/circuitboard/fusion_fuel_compressor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnH" = ( +/obj/item/weapon/card/data, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnL" = ( +/obj/item/slimepotion/obedience, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnQ" = ( +/obj/item/clothing/accessory/halfcape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnV" = ( +/obj/item/weapon/card/id/syndicate_command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gnY" = ( +/obj/item/integrated_circuit/cryptography/hash_sha1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goj" = ( +/obj/item/device/modkit_conversion/fluff/melissa_gun_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gol" = ( +/obj/item/weapon/chaoscake_layer/four, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goE" = ( +/obj/item/mecha_parts/component/armor/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goF" = ( +/obj/item/clothing/gloves/gauntlets/lightrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goG" = ( +/obj/structure/bed/chair/sofa/left/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goJ" = ( +/mob/living/simple_mob/construct/juggernaut{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"goL" = ( +/obj/item/flag/gap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goO" = ( +/obj/item/integrated_circuit/output/holographic_projector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goR" = ( +/obj/item/clothing/suit/storage/toggle/internalaffairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goS" = ( +/obj/item/clothing/mask/chewable/tobacco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"goV" = ( +/obj/item/seeds/sifbulb, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpf" = ( +/obj/item/weapon/spell/construct/spawner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpm" = ( +/obj/item/projectile/beam/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpp" = ( +/obj/item/weapon/spacecash/c500, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpq" = ( +/obj/item/clothing/head/helmet/HoS/hat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpu" = ( +/obj/item/device/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpy" = ( +/obj/item/weapon/reagent_containers/food/drinks/golden_cup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpB" = ( +/obj/structure/shuttle/engine/platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpE" = ( +/obj/item/weapon/material/minihoe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpM" = ( +/obj/item/weapon/haircomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpQ" = ( +/obj/structure/barricade/cutout/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gpV" = ( +/obj/machinery/suit_cycler/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqb" = ( +/obj/structure/closet/secure_closet/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqc" = ( +/obj/structure/sign/flag/almach_a, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gql" = ( +/obj/item/device/text_to_speech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqo" = ( +/obj/machinery/vending/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqu" = ( +/obj/item/weapon/circuitboard/splicer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqy" = ( +/obj/item/clothing/suit/storage/teshari/cloak/fluff/strix_cco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqB" = ( +/obj/item/weapon/bone/skull/unknown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqD" = ( +/obj/machinery/vending/event/accessory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqF" = ( +/obj/item/ammo_casing/microbattery/medical/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqJ" = ( +/obj/structure/sign/department/ass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqS" = ( +/obj/item/weapon/circuitboard/travelcontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gqX" = ( +/obj/item/clothing/suit/storage/toggle/dress/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grc" = ( +/obj/machinery/power/grounding_rod/pre_mapped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grr" = ( +/obj/item/weapon/card/id/centcom/ERT/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gru" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb01, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grz" = ( +/obj/item/ammo_magazine/hectate/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grA" = ( +/obj/item/clothing/suit/armor/pcarrier/light/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grE" = ( +/mob/living/simple_mob/animal/giant_spider/phorogenic{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"grL" = ( +/obj/item/toy/plushie/black_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"grO" = ( +/obj/item/wire_reader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsa" = ( +/obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsb" = ( +/obj/item/clothing/under/shiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsf" = ( +/obj/item/clothing/accessory/medal/solgov/gold/sun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsi" = ( +/obj/item/clothing/suit/sumo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsm" = ( +/obj/item/clothing/suit/storage/toggle/denim_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsu" = ( +/obj/item/weapon/rig/internalaffairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsw" = ( +/obj/machinery/suit_cycler/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsF" = ( +/obj/item/seeds/pumpkinseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsG" = ( +/obj/item/clothing/suit/armor/vest/wolftaur/kate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gsV" = ( +/obj/item/weapon/storage/vore_egg/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtc" = ( +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gth" = ( +/obj/item/weapon/reagent_containers/glass/bottle/arithrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gti" = ( +/mob/living/bot/cleanbot/edCLN, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gtm" = ( +/obj/item/ammo_casing/microbattery/medical/omni3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gts" = ( +/obj/item/clothing/accessory/sweater/flowersweater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtt" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/scienceslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gtx" = ( +/obj/item/clothing/head/wizard/marisa/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtA" = ( +/obj/fiftyspawner/turcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtC" = ( +/obj/item/clothing/suit/storage/solgov/dress/fleet/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtI" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/redpanda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtR" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gtT" = ( +/obj/machinery/portable_atmospherics/powered/pump/huge/stationary/purge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gud" = ( +/obj/item/weapon/fluff/squeezetoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gug" = ( +/obj/structure/bed/chair/comfy/rounded/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gui" = ( +/obj/structure/prop/war/tgmc_minirockets/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gun" = ( +/obj/structure/sign/warning/lethal_turrets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"guo" = ( +/obj/item/weapon/circuitboard/bioprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gup" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"guw" = ( +/obj/item/ammo_magazine/m545saw/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"guy" = ( +/obj/item/ammo_magazine/ammo_box/b545, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"guH" = ( +/obj/item/clothing/suit/storage/victcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"guX" = ( +/mob/living/simple_mob/animal/sif/kururak{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gvc" = ( +/obj/structure/cryofeed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvd" = ( +/obj/item/ammo_magazine/s45lc/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvu" = ( +/obj/item/clothing/under/pants/baggy/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvv" = ( +/obj/item/clothing/suit/armor/vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvx" = ( +/obj/item/clothing/head/pizzaguy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvy" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvC" = ( +/obj/item/clothing/suit/space/anomaly/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvF" = ( +/obj/item/weapon/dnainjector/clumsymut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvG" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvN" = ( +/obj/structure/closet/crate/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvP" = ( +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvV" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/lightgrey_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gvZ" = ( +/obj/structure/sign/coffee_shop_library, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwb" = ( +/obj/item/clothing/under/solgov/pt/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwd" = ( +/obj/item/weapon/storage/box/brainzsnax/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwq" = ( +/obj/item/clothing/under/solgov/utility/sifguard_skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gww" = ( +/obj/item/mecha_parts/chassis/scarab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwA" = ( +/obj/structure/sign/directions/elevator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwE" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwG" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwJ" = ( +/obj/structure/closet/crate/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwP" = ( +/obj/item/weapon/disk/species/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwW" = ( +/obj/item/mecha_parts/part/phazon_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gwY" = ( +/obj/item/weapon/gun/energy/sonic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxa" = ( +/obj/item/device/modkit_conversion/fluff/skinner/c, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxk" = ( +/mob/living/simple_mob/animal/passive/cat/fluff, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gxm" = ( +/obj/item/clothing/head/beret/solgov/fleet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxv" = ( +/obj/item/clothing/suit/armor/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxD" = ( +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxO" = ( +/obj/structure/symbol/em, +/turf/simulated/fitness, +/area/survivalpod) +"gxP" = ( +/obj/item/weapon/reagent_containers/food/snacks/bagelplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxQ" = ( +/obj/structure/prop/blackbox/xenofrigate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gxS" = ( +/obj/item/weapon/flame/lighter/zippo/fluff/joan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gym" = ( +/obj/structure/prop/dominator/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyn" = ( +/obj/item/weapon/storage/backpack/satchel/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyp" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyw" = ( +/obj/item/clothing/head/collectable/petehat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyA" = ( +/obj/item/clothing/head/fishing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyC" = ( +/obj/machinery/power/quantumpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyH" = ( +/obj/structure/bookcase/manuals/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyK" = ( +/obj/item/integrated_circuit/converter/rgb2hex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyM" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyO" = ( +/obj/item/organ/internal/augment/armmounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyU" = ( +/obj/structure/symbol/sa, +/turf/simulated/fitness, +/area/survivalpod) +"gyX" = ( +/obj/item/projectile/beam/midlaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gyY" = ( +/obj/item/trash/spitwad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzb" = ( +/obj/item/device/mass_spectrometer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzj" = ( +/obj/item/integrated_circuit/output/led/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzl" = ( +/obj/item/weapon/aiModule/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzp" = ( +/obj/item/weapon/material/twohanded/riding_crop/malady, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzz" = ( +/obj/item/ammo_magazine/m9mmt/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzD" = ( +/obj/item/device/healthanalyzer/phasic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzI" = ( +/obj/item/clothing/under/undersuit/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzT" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzX" = ( +/obj/item/weapon/circuitboard/candymachine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gzZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAa" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAj" = ( +/obj/machinery/computer/cryopod/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAm" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/echo{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gAn" = ( +/obj/item/clothing/head/pin/flower/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAs" = ( +/obj/item/weapon/circuitboard/pacman/mrs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAB" = ( +/obj/item/weapon/rig/baymed/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAE" = ( +/obj/item/clothing/suit/space/void/refurb/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAF" = ( +/obj/item/device/assembly_holder/timer_igniter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAI" = ( +/obj/item/weapon/gun/projectile/giskard/olivaw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAP" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "13" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gAR" = ( +/obj/machinery/computer/prison_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBa" = ( +/obj/item/mecha_parts/chassis/durand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBd" = ( +/obj/structure/closet/secure_closet/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBg" = ( +/obj/item/clothing/mask/chewable/candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBt" = ( +/obj/item/weapon/reagent_containers/food/snacks/pluto, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBw" = ( +/obj/structure/prop/machine/nt_biocan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBz" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/shark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBE" = ( +/obj/item/weapon/bluespace_harpoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBF" = ( +/obj/item/seeds/deathberryseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBN" = ( +/obj/item/weapon/cartridge/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBO" = ( +/obj/item/clothing/head/helmet/space/void/refurb/officer/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBQ" = ( +/obj/item/weapon/card/id/gateway/snowfield/class5E, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gBZ" = ( +/obj/item/clothing/shoes/black/cuffs/octavious, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCc" = ( +/obj/item/weapon/reagent_containers/food/snacks/stuffed_meatball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCd" = ( +/obj/item/weapon/gun/projectile/automatic/c20r/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCj" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCn" = ( +/obj/item/weapon/computer_hardware/network_card/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCq" = ( +/obj/structure/bed/chair/bay/chair/padded/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCt" = ( +/obj/item/clothing/suit/space/void/refurb/marine/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCw" = ( +/obj/item/weapon/tool/crowbar/heavysniper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCE" = ( +/obj/item/ammo_magazine/m9mm/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCH" = ( +/obj/item/clothing/suit/storage/hooded/knight_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCM" = ( +/obj/item/ammo_casing/a50bmg/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCU" = ( +/obj/structure/prop/rock/crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCX" = ( +/obj/item/weapon/reagent_containers/food/snacks/bearstew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCY" = ( +/obj/item/device/modkit_conversion/fluff/skinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gCZ" = ( +/obj/machinery/vending/cart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDb" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDh" = ( +/obj/structure/door_assembly/door_assembly_science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDk" = ( +/mob/living/simple_mob/humanoid/merc/melee/sword/space{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gDl" = ( +/obj/item/weapon/paper/crumpled/bloody/whiskeystation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDn" = ( +/obj/item/weapon/storage/backpack/dufflebag/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDs" = ( +/obj/machinery/smartfridge/seeds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDE" = ( +/obj/item/clothing/mask/smokable/cigarette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDN" = ( +/obj/item/weapon/reagent_containers/food/snacks/namagashi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDO" = ( +/obj/machinery/vending/assist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gDV" = ( +/obj/item/clothing/under/suit_jacket/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEa" = ( +/mob/living/simple_mob/mechanical/hivebot/tank{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gEd" = ( +/obj/item/weapon/lipstick/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEe" = ( +/obj/item/clothing/suit/storage/bladerunner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEj" = ( +/obj/item/seeds/libertymycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEp" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEr" = ( +/obj/item/weapon/tool/crowbar/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEx" = ( +/obj/item/clothing/head/service/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEy" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEF" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat/fedeng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEL" = ( +/obj/structure/sign/level/ground/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEN" = ( +/obj/item/integrated_circuit/logic/binary/greater_than, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEO" = ( +/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEV" = ( +/obj/item/clothing/accessory/qipaogold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gEY" = ( +/obj/item/clothing/head/tesh_hood/standard/black_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFa" = ( +/obj/item/seeds/shandseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFb" = ( +/obj/structure/stasis_cage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFg" = ( +/mob/living/simple_mob/horror/Helix, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gFi" = ( +/mob/living/simple_mob/animal/passive/yithian{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gFj" = ( +/obj/machinery/r_n_d/server/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFl" = ( +/obj/item/ammo_magazine/akm/drum/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFn" = ( +/obj/item/weapon/book/manual/engineering_hacking, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFp" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFs" = ( +/obj/item/integrated_circuit/output/screen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFy" = ( +/obj/machinery/smartfridge/sheets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFW" = ( +/obj/item/stack/material/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gFY" = ( +/obj/item/clothing/suit/space/vox/civ/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGe" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGf" = ( +/obj/item/clothing/accessory/armor/armorplate/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGi" = ( +/obj/item/weapon/reagent_containers/food/snacks/popcorn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGj" = ( +/obj/item/clothing/shoes/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGt" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGu" = ( +/obj/item/clothing/under/rank/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGC" = ( +/obj/structure/closet/autolok_wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGD" = ( +/obj/item/clothing/accessory/solgov/department/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGJ" = ( +/obj/item/weapon/digestion_remains, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGM" = ( +/obj/item/clothing/suit/cultrobes/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGP" = ( +/obj/item/weapon/wrapping_paper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGT" = ( +/obj/item/weapon/refill_cartridge/multitype/food, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gGV" = ( +/obj/item/integrated_circuit/transfer/multiplexer/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHa" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHh" = ( +/obj/item/stack/tile/floor/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHj" = ( +/obj/item/stack/material/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHl" = ( +/obj/item/ammo_magazine/m762/ext/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHo" = ( +/obj/item/clothing/under/color/lightbrown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHu" = ( +/obj/machinery/power/tesla_coil/pre_mapped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHz" = ( +/obj/item/device/multitool/hacktool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHH" = ( +/obj/item/weapon/material/ashtray/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHI" = ( +/obj/item/weapon/gun/launcher/confetti_cannon/overdrive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHP" = ( +/obj/item/weapon/gun/energy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHR" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/poemsforarainyday, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHU" = ( +/obj/machinery/replicator/vore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gHY" = ( +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIc" = ( +/obj/item/weapon/implantcase/restrainingbolt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIg" = ( +/obj/item/weapon/grenade/flashbang/clusterbang/segment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIh" = ( +/obj/item/clothing/under/rank/trek/sec/voy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIo" = ( +/obj/item/device/mmi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIu" = ( +/obj/item/weapon/circuitboard/olddoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gID" = ( +/obj/item/weapon/book/manual/medical_cloning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIE" = ( +/obj/item/trash/ratfruitcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIG" = ( +/obj/item/weapon/pen/reagent/sleepy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIO" = ( +/obj/item/weapon/kinetic_crusher/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gIT" = ( +/obj/structure/closet/secure_closet/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJb" = ( +/obj/structure/prop/machine/comm_tower/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJd" = ( +/obj/item/clothing/head/helmet/hos/fluff/lethe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJg" = ( +/obj/machinery/shield_capacitor/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJl" = ( +/obj/item/organ/internal/xenos/plasmavessel/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJn" = ( +/obj/machinery/suit_cycler/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJq" = ( +/obj/item/clothing/suit/johnny_coat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJt" = ( +/obj/structure/table/woodentable/holotable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJx" = ( +/obj/item/clothing/accessory/armor/legguards/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJD" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJJ" = ( +/obj/item/weapon/card/id/centcom/vip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gJN" = ( +/obj/structure/simple_door/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKa" = ( +/obj/item/rig_module/electrowarfare_suite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKc" = ( +/obj/structure/ghost_pod/manual/survivor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKe" = ( +/obj/item/clothing/suit/storage/vest/officer/fluff/nika, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKj" = ( +/obj/item/seeds/megashroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKr" = ( +/obj/item/clothing/head/helmet/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKy" = ( +/obj/item/weapon/implant/organ/limbaugment/wrist/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKI" = ( +/obj/item/seeds/grassseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKJ" = ( +/obj/item/clothing/accessory/ribbon/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKW" = ( +/obj/item/weapon/book/bundle/custom_library/reference/ThermodynamicReactionsandResearch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKY" = ( +/obj/item/weapon/circuitboard/mecha/durand/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gKZ" = ( +/obj/item/weapon/gun/energy/lasercannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLb" = ( +/obj/structure/noticeboard/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLl" = ( +/obj/item/weapon/fossil/base, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLx" = ( +/obj/item/clothing/glasses/fluff/scylla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLA" = ( +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLB" = ( +/obj/structure/bed/chair/sofa/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLF" = ( +/obj/item/weapon/circuitboard/fusion_core_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLI" = ( +/obj/item/weapon/disk/species/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gLM" = ( +/obj/item/clothing/under/suit_jacket/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMe" = ( +/obj/item/weapon/storage/box/handcuffs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMg" = ( +/obj/item/weapon/reagent_containers/food/snacks/soup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMp" = ( +/obj/item/clothing/under/color/fjumpsuit/aquaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMs" = ( +/obj/item/weapon/card/id/gateway/snowfield/class6R, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMu" = ( +/obj/item/clothing/accessory/storage/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMJ" = ( +/obj/item/clothing/suit/armor/vest/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMK" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMQ" = ( +/obj/item/weapon/card/id/gateway/snowfield/class2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMT" = ( +/obj/item/clothing/shoes/flats/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gMY" = ( +/obj/item/weapon/gun/magnetic/matfed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNc" = ( +/obj/structure/prop/machine/last_shelter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNm" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNn" = ( +/obj/item/ammo_casing/a10mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNo" = ( +/obj/item/weapon/storage/wallet/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNq" = ( +/obj/machinery/deployable/barrier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNv" = ( +/obj/item/rig_module/teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNw" = ( +/obj/item/weapon/pickaxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNy" = ( +/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gNJ" = ( +/obj/item/clothing/accessory/bracelet/material/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNL" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/earth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNO" = ( +/obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNP" = ( +/obj/item/weapon/storage/mrebag/dessert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNQ" = ( +/obj/item/device/encryptionkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gNT" = ( +/mob/living/simple_mob/animal/passive/pillbug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gNY" = ( +/obj/item/seeds/glowberryseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOh" = ( +/obj/item/rig_module/chem_dispenser/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOj" = ( +/obj/item/weapon/reagent_containers/food/condiment/vinegar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOn" = ( +/obj/item/clothing/gloves/arm_guard/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOp" = ( +/obj/item/clothing/under/pants/baggy/camo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOs" = ( +/obj/machinery/hyperpad{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOw" = ( +/obj/item/clothing/accessory/solgov/specialty/forensic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOy" = ( +/obj/item/mecha_parts/part/scarab_right_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOA" = ( +/obj/structure/sign/deck/first, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOH" = ( +/obj/item/organ/internal/regennetwork/burn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOI" = ( +/obj/item/weapon/surgical/cautery/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOJ" = ( +/obj/item/toy/redbutton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gOT" = ( +/obj/item/weapon/reagent_containers/food/snacks/donerkebab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPr" = ( +/obj/item/clothing/head/helmet/space/void/security/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPs" = ( +/obj/item/weapon/soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPu" = ( +/obj/structure/cult/pylon/swarm/zp_well, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPz" = ( +/obj/item/organ/internal/brain/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPB" = ( +/obj/structure/bed/chair/sofa/left/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPC" = ( +/obj/item/weapon/circuitboard/grinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPH" = ( +/obj/structure/sign/flag/almach_a/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPN" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPR" = ( +/obj/machinery/porta_turret/lasertag/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPU" = ( +/obj/structure/sign/biohazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPV" = ( +/obj/item/weapon/technomancer_core/unstable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gPZ" = ( +/obj/item/weapon/gun/energy/laser/sleek, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQf" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQg" = ( +/obj/item/weapon/kitchenknife/tacknife/unathiknife/fluff/eravik_vessi_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQi" = ( +/obj/item/weapon/handcuffs/cable/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQn" = ( +/obj/item/weapon/reagent_containers/food/snacks/ovenfries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQs" = ( +/obj/item/weapon/storage/box/fluff/natalya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQt" = ( +/obj/machinery/recharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQB" = ( +/mob/living/simple_mob/creature{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gQD" = ( +/obj/item/clothing/under/dress/hightrousers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQE" = ( +/obj/structure/bed/chair/sofa/right/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gQU" = ( +/obj/structure/janitorialcart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRc" = ( +/obj/item/integrated_circuit/converter/findstring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRd" = ( +/obj/mecha/working/hoverpod/shuttlecraft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRj" = ( +/obj/item/weapon/storage/box/glasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRm" = ( +/obj/item/clothing/glasses/sunglasses/blindfold/tape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRJ" = ( +/obj/item/weapon/tank/stasis/nitro_cryo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRL" = ( +/obj/item/clothing/head/beret/solgov/fleet/dress/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRN" = ( +/obj/item/clothing/suit/space/void/refurb/medical/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRT" = ( +/obj/structure/closet/athletic_mixed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gRU" = ( +/obj/machinery/drone_fabricator/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSe" = ( +/obj/item/weapon/storage/box/lights, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSl" = ( +/obj/item/clothing/head/hood/winter/engineering/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSo" = ( +/obj/item/ammo_magazine/clip/c762/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSx" = ( +/obj/item/weapon/melee/energy/sword/ionic_rapier/lance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSz" = ( +/mob/living/simple_mob/otie/security{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gSA" = ( +/obj/item/clothing/gloves/weddingring/fluff/vanesa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSB" = ( +/obj/machinery/door/airlock/maintenance/common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSE" = ( +/obj/item/bodybag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSG" = ( +/obj/item/weapon/commcard/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSM" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/salsa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gSW" = ( +/obj/item/toy/figure/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTb" = ( +/obj/item/weapon/gun/projectile/heavysniper/collapsible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTj" = ( +/obj/item/clothing/accessory/armor/tag/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTl" = ( +/obj/item/weapon/implant/language, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTt" = ( +/obj/structure/bed/chair/bay/comfy/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTu" = ( +/obj/item/weapon/stock_parts/capacitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTx" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTD" = ( +/obj/item/weapon/disk/nifsoft/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTG" = ( +/obj/item/weapon/gun/projectile/derringer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTI" = ( +/obj/item/weapon/fossil/skull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTN" = ( +/obj/item/weapon/implant/reagent_generator/yonra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTR" = ( +/obj/item/toy/figure/bartender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gTY" = ( +/obj/machinery/power/smes/batteryrack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gUj" = ( +/obj/item/clothing/head/det/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gUr" = ( +/obj/trader/capture_crystal/cash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gUz" = ( +/obj/item/ammo_magazine/s45/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gUI" = ( +/obj/item/ammo_casing/microbattery/combat/lethal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gUO" = ( +/obj/item/clothing/accessory/armor/armorplate/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVg" = ( +/obj/item/weapon/storage/backpack/satchel/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVk" = ( +/obj/item/weapon/gun/energy/mouseray/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVp" = ( +/obj/item/organ/internal/immunehub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVs" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gVC" = ( +/obj/item/clothing/accessory/tie/darkgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVH" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/boarder{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gVL" = ( +/obj/item/ammo_magazine/m5mmcaseless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gVW" = ( +/obj/structure/sign/levels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWa" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWc" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWg" = ( +/obj/item/stack/material/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWi" = ( +/obj/item/ammo_magazine/m45tommydrum/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWw" = ( +/obj/item/slimepotion/docility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWA" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/hectate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWB" = ( +/obj/structure/sign/flag/shadowcoalition, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWC" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWM" = ( +/obj/structure/closet/crate/mimic/guaranteed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWP" = ( +/obj/item/weapon/pen/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWQ" = ( +/obj/item/trash/gumpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWX" = ( +/obj/item/weapon/storage/box/casino/costume_plaguedoctor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gWY" = ( +/obj/item/clothing/under/lawyer/bluesuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXb" = ( +/obj/item/weapon/implanter/compressed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXf" = ( +/obj/machinery/light_construct/floortube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXh" = ( +/obj/item/clothing/head/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXq" = ( +/obj/item/weapon/dice/d8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXs" = ( +/mob/living/simple_mob/mobs_monsters/clowns/honkmunculus{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gXu" = ( +/obj/item/device/holomap_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXv" = ( +/obj/item/clothing/head/helmet/fluff/freddy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXx" = ( +/obj/item/clothing/accessory/poncho/cloak/fluff/mocha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXC" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXF" = ( +/obj/item/clothing/suit/space/void/heck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXH" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXJ" = ( +/obj/item/mecha_parts/component/actuator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gXO" = ( +/mob/living/silicon/robot/syndicate/protector, +/turf/simulated/floor/atoll, +/area/survivalpod) +"gYc" = ( +/obj/item/weapon/disk/limb/white_kryten, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYj" = ( +/obj/item/clothing/ears/skrell/band/bluejewels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYo" = ( +/obj/machinery/ion_engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYq" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/surplus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYy" = ( +/obj/item/clothing/gloves/weddingring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYD" = ( +/obj/item/ammo_casing/a12g/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYJ" = ( +/obj/item/clothing/under/pants/baggy/greyjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYP" = ( +/obj/item/weapon/reagent_containers/food/snacks/croutons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYQ" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYR" = ( +/obj/item/clothing/head/helmet/space/void/refurb/pilot/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gYU" = ( +/obj/item/clothing/shoes/flats, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZf" = ( +/obj/item/weapon/spacecash/c1000, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZi" = ( +/obj/item/weapon/reagent_containers/food/snacks/ghostburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZn" = ( +/obj/item/clothing/head/helmet/material/makeshift/durasteel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZw" = ( +/obj/item/clothing/under/rank/khi/cmd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZz" = ( +/obj/structure/sign/kiddieplaque/poi3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZD" = ( +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZH" = ( +/obj/item/weapon/material/knife/ritual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZK" = ( +/obj/item/weapon/storage/part_replacer/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZO" = ( +/obj/item/weapon/storage/pill_bottle/imidazoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZX" = ( +/obj/item/weapon/bedsheet/rainbowdouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"gZY" = ( +/obj/item/weapon/storage/pill_bottle/osteodaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hab" = ( +/obj/structure/curtain/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"har" = ( +/obj/item/device/flash/synthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hat" = ( +/obj/item/clothing/head/pelt/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hav" = ( +/obj/structure/sign/department/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hax" = ( +/obj/item/clothing/suit/storage/greyjacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haE" = ( +/obj/item/weapon/melee/shock_maul/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haL" = ( +/obj/item/clothing/accessory/poncho/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haM" = ( +/obj/item/clothing/suit/storage/saare/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haN" = ( +/obj/machinery/vending/fooditalian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haQ" = ( +/obj/item/clothing/suit/space/void/responseteam/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"haZ" = ( +/obj/item/clothing/head/helmet/space/capspace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbd" = ( +/obj/item/device/assembly/voice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbf" = ( +/obj/structure/sign/directions/dock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbh" = ( +/obj/machinery/atmospherics/binary/circulator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbm" = ( +/obj/item/clothing/suit/storage/solgov/service/army/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbE" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/deadrum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbI" = ( +/obj/structure/closet/crate/ummarcar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbK" = ( +/obj/item/weapon/reagent_containers/food/snacks/rawmeatball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbM" = ( +/obj/item/weapon/reagent_containers/food/snacks/pineappleslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbN" = ( +/obj/item/weapon/storage/box/tgmc_mre, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbS" = ( +/obj/structure/sign/directions/medical/resleeving, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbU" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hbX" = ( +/obj/machinery/computer/timeclock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hch" = ( +/obj/item/clothing/accessory/jacket/altevian/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hci" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcj" = ( +/obj/item/weapon/reagent_containers/food/snacks/chilicheesefries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcn" = ( +/obj/item/seeds/towermycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcq" = ( +/obj/machinery/suit_cycler/vintage/medsci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcr" = ( +/obj/structure/sign/levels/engineering/engeqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcz" = ( +/obj/item/weapon/storage/mrebag/dessert/menu11, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcE" = ( +/obj/item/clothing/suit/storage/vest/solgov/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcG" = ( +/obj/item/clothing/shoes/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcI" = ( +/obj/machinery/vending/engivend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcJ" = ( +/obj/structure/sign/level/two, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcR" = ( +/obj/item/rig_module/cleaner_launcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcT" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_lightgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcU" = ( +/obj/item/weapon/tank/emergency/oxygen/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hcY" = ( +/obj/item/clothing/under/cheongsam/darkred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdd" = ( +/obj/item/weapon/reagent_containers/food/snacks/snakesnack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdr" = ( +/obj/item/weapon/soap/green_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdC" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/applecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdE" = ( +/obj/machinery/door/airlock/maintenance/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdH" = ( +/obj/item/weapon/storage/bag/ore/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdP" = ( +/obj/structure/closet/crate/secure/einstein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdY" = ( +/obj/item/clothing/accessory/armband/medblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hdZ" = ( +/obj/item/device/electronic_assembly/tiny/scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hea" = ( +/obj/item/clothing/suit/fluff/nikki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hed" = ( +/obj/item/trash/pocky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hee" = ( +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hel" = ( +/obj/item/weapon/rig/pmc/commander/grey/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hem" = ( +/obj/item/clothing/head/philosopher_wig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hen" = ( +/obj/structure/bed/chair/bay/chair/padded/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"het" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin_p, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hex" = ( +/obj/item/weapon/telecube/precursor/mated/mirrorcolor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heA" = ( +/obj/item/weapon/reagent_containers/syringe/ld50_syringe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heB" = ( +/obj/item/weapon/cell/device/empproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heC" = ( +/obj/item/weapon/storage/box/wormcan/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heH" = ( +/obj/item/weapon/implantcase/exile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heV" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"heZ" = ( +/obj/item/weapon/bedsheet/hopdouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfx" = ( +/obj/item/weapon/bedsheet/yellowdouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfA" = ( +/obj/item/integrated_circuit/arithmetic/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfC" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/peppergrinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfE" = ( +/obj/structure/fence/door/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfI" = ( +/obj/item/organ/internal/appendix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfK" = ( +/obj/item/clothing/accessory/tie/red_clip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfP" = ( +/obj/item/clothing/suit/chef/classic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfS" = ( +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hfZ" = ( +/obj/item/clothing/gloves/ring/engagement, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgr" = ( +/obj/item/seeds/deathnettleseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgs" = ( +/obj/structure/prop/machine/tgmc_console2/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgt" = ( +/obj/item/weapon/storage/secure/briefcase/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgA" = ( +/mob/living/simple_mob/vore/redpanda{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hgB" = ( +/obj/item/weapon/dnainjector/m2h, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgC" = ( +/obj/item/taperoll/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgI" = ( +/obj/item/clothing/accessory/badge/solgov/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgJ" = ( +/obj/item/clothing/gloves/sterile/latex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hgX" = ( +/obj/item/clothing/under/rank/centcom_captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhk" = ( +/obj/machinery/power/fusion_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhp" = ( +/obj/item/weapon/storage/pill_bottle/alkysine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhq" = ( +/obj/item/toy/plushie/lizardplushie/kobold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhH" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhM" = ( +/obj/item/clothing/suit/storage/hooded/knight_costume/robin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhR" = ( +/obj/item/clothing/gloves/ring/seal/secgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhT" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhU" = ( +/obj/item/weapon/book/manual/bar_guide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhW" = ( +/mob/living/simple_mob/vore/alienanimals/catslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hhY" = ( +/obj/structure/sign/xenobio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hhZ" = ( +/obj/machinery/disposal/deliveryChute, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hid" = ( +/obj/item/integrated_circuit/input/toggle_button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hie" = ( +/obj/structure/sign/deck/third, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hig" = ( +/obj/item/stack/tile/carpet/oracarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hih" = ( +/obj/machinery/exonet_node, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiy" = ( +/obj/item/device/electronic_assembly/drone/android, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiA" = ( +/obj/machinery/vending/security/yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiG" = ( +/obj/item/clothing/accessory/material/makeshift/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiL" = ( +/obj/item/clothing/under/cohesion/pattern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiU" = ( +/obj/item/weapon/storage/bag/circuits/mini/memory/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hiW" = ( +/obj/item/weapon/storage/backpack/dufflebag/cratedrills, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjh" = ( +/obj/machinery/computer/pod/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjm" = ( +/obj/item/stack/tile/floor/eris/steel/gray_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjs" = ( +/obj/item/mecha_parts/part/scarab_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hju" = ( +/obj/item/integrated_circuit/input/sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjA" = ( +/obj/item/clothing/under/dress/sari/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjW" = ( +/obj/item/weapon/refill_cartridge/autoname/food/snlvend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hjZ" = ( +/obj/item/weapon/gun/projectile/p92x/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkc" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hks" = ( +/obj/item/clothing/head/jingasa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkt" = ( +/obj/item/weapon/gun/energy/decloner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkv" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkw" = ( +/obj/mecha/combat/durand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkz" = ( +/obj/machinery/light/floortube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkA" = ( +/obj/structure/closet/crate/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkE" = ( +/obj/structure/prop/statue/statue1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkI" = ( +/obj/item/weapon/reagent_containers/glass/bottle/oxycodone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkL" = ( +/mob/living/simple_mob/humanoid/cultist/hunter/surt{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hkM" = ( +/obj/item/weapon/storage/pouch/baton/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkO" = ( +/obj/item/weapon/cell/giga, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hkT" = ( +/mob/living/simple_mob/animal/passive/snake/red{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hkW" = ( +/obj/item/device/integrated_electronics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hla" = ( +/obj/item/stack/tile/floor/eris/white/monofloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlc" = ( +/mob/living/silicon/robot/platform/explorer, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hlg" = ( +/obj/item/toy/figure/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlk" = ( +/obj/structure/sign/levels/science/xenobiology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hll" = ( +/obj/item/clothing/under/rank/geneticist/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlr" = ( +/obj/item/clothing/suit/storage/solgov/dress/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hls" = ( +/obj/item/device/gps/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlB" = ( +/obj/item/stack/material/glass/phoronrglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlD" = ( +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlK" = ( +/obj/item/weapon/aiModule/consuming_eradicator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlN" = ( +/obj/structure/noticeboard/library, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlO" = ( +/obj/item/weapon/gun/energy/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlP" = ( +/obj/item/clothing/under/rank/trek/eng/voy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hlY" = ( +/obj/item/integrated_circuit/arithmetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hma" = ( +/obj/item/weapon/storage/belt/utility/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmc" = ( +/obj/item/weapon/storage/box/holobadge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmh" = ( +/obj/item/clothing/under/color/fjumpsuit/maroonf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmn" = ( +/obj/structure/sign/department/gene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmr" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmu" = ( +/obj/machinery/shipsensors/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmv" = ( +/obj/item/ammo_magazine/m45uzi/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmw" = ( +/obj/item/weapon/storage/box/fluff/saroth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmB" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmI" = ( +/obj/item/clothing/under/away/daedalus/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmK" = ( +/obj/item/clothing/accessory/collar/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmL" = ( +/obj/machinery/power/rtg/reg/c, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmP" = ( +/obj/item/clothing/accessory/badge/holo/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmS" = ( +/obj/machinery/vending/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmW" = ( +/obj/item/ammo_magazine/m12gdrum/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hmX" = ( +/obj/item/weapon/card/id/event/altcard/pinkgold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnc" = ( +/obj/structure/bed/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hny" = ( +/obj/item/clothing/head/helmet/space/vox/civ/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnz" = ( +/obj/item/weapon/reagent_containers/pill/carthatoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnD" = ( +/obj/item/mecha_parts/part/janus_right_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnG" = ( +/obj/item/ammo_casing/microbattery/medical/shrink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnH" = ( +/obj/structure/largecrate/animal/weretiger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnP" = ( +/obj/item/weapon/implant/language/eal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnS" = ( +/obj/item/clothing/head/hood/winter/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnV" = ( +/obj/item/clothing/head/helmet/space/vox/civ/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hnW" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoj" = ( +/obj/item/clothing/accessory/wcoat/swvest/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoq" = ( +/obj/item/weapon/circuitboard/firework_launcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hos" = ( +/obj/item/weapon/storage/backpack/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoA" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoH" = ( +/obj/item/weapon/circuitboard/telecomms/pda_multicaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoM" = ( +/mob/living/bot/farmbot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hoT" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hoU" = ( +/obj/item/clothing/suit/armor/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hoW" = ( +/mob/living/simple_mob/humanoid/cultist/magus{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hoX" = ( +/obj/structure/closet/crate/large/secure/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpd" = ( +/obj/item/weapon/storage/box/fluff/amara, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpm" = ( +/obj/item/honey_frame/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpz" = ( +/obj/machinery/door/airlock/angled_bay/elevator/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpC" = ( +/obj/item/clothing/suit/storage/vest/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpK" = ( +/obj/item/weapon/tank/emergency/nitrogen/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpP" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/vintage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hpQ" = ( +/obj/item/clothing/gloves/fluff/siren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqc" = ( +/obj/item/weedkiller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqd" = ( +/obj/item/weapon/storage/box/fluff/drake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqf" = ( +/obj/item/weapon/rig/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqg" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqs" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqx" = ( +/obj/item/weapon/storage/pill_bottle/peridaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqE" = ( +/obj/item/weapon/storage/box/monkeycubes/neaeracubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqI" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqK" = ( +/obj/item/clothing/mask/breath/transparent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqU" = ( +/obj/machinery/pipelayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hqX" = ( +/obj/item/clothing/shoes/dress/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hra" = ( +/obj/item/weapon/reagent_containers/glass/bottle/poppy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrc" = ( +/obj/item/clothing/suit/armor/pcarrier/tan/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrd" = ( +/obj/machinery/holoplant/shipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrf" = ( +/obj/item/weapon/circuitboard/chem_master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrj" = ( +/obj/item/clothing/accessory/medal/solgov/gold/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hro" = ( +/obj/item/weapon/bikehorn/fluff/chew_ire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrp" = ( +/obj/item/weapon/storage/pill_bottle/myelamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrw" = ( +/obj/item/weapon/storage/wallet/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrE" = ( +/obj/item/weapon/book/custom_library/fiction/woodysgotwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrK" = ( +/obj/machinery/gear_dispenser/suit/autolok, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrO" = ( +/obj/item/device/eftpos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrR" = ( +/obj/item/clothing/under/rank/trek/command/ds9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrS" = ( +/obj/machinery/light/small/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hrZ" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsf" = ( +/obj/item/trash/tomato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsh" = ( +/obj/structure/closet/secure_closet/posters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hso" = ( +/obj/structure/drop_pod/polite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsr" = ( +/obj/structure/plushie/ian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hst" = ( +/obj/item/device/survivalcapsule/luxurybar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsw" = ( +/obj/item/weapon/spell/control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsA" = ( +/obj/item/seeds/whitebeetseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsK" = ( +/obj/machinery/sparker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsO" = ( +/obj/machinery/button/remote/blast_door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsS" = ( +/obj/item/weapon/storage/box/holowarrants, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hsX" = ( +/obj/item/weapon/circuitboard/roguezones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htd" = ( +/obj/item/weapon/reagent_containers/food/snacks/microfries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hti" = ( +/obj/item/ammo_magazine/tp23/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htr" = ( +/obj/item/weapon/staff/gentcane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htt" = ( +/obj/item/weapon/reagent_containers/glass/bottle/dermaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htE" = ( +/obj/machinery/holosign/surgery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htF" = ( +/obj/machinery/telepad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htG" = ( +/obj/item/weapon/storage/lockbox/medal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htH" = ( +/obj/item/weapon/implanter/reagent_generator/vorrarkul, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htJ" = ( +/obj/item/device/electronic_assembly/drone/genbot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htQ" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htR" = ( +/obj/item/weapon/storage/backpack/sport/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htT" = ( +/obj/item/clothing/suit/armor/pcarrier/press, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htX" = ( +/obj/item/weapon/reagent_containers/rollingpaper/blunt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"htY" = ( +/obj/item/weapon/disk/limb/grayson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hue" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huf" = ( +/obj/mecha/combat/gygax/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huh" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/banana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hul" = ( +/obj/item/gunbox/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hun" = ( +/obj/item/clothing/under/away/patrol/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hus" = ( +/obj/structure/sign/flag/nt/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huz" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/applejuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huJ" = ( +/obj/item/clothing/accessory/solgov/department/exploration/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huK" = ( +/obj/machinery/door/blast/multi_tile/four_tile_hor_sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huN" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/grapesoda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"huP" = ( +/obj/machinery/doppler_array, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hve" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvg" = ( +/obj/item/clothing/accessory/solgov/department/service/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvn" = ( +/obj/item/weapon/inducer/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvx" = ( +/mob/living/simple_mob/xeno_ch/hunter, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hvy" = ( +/obj/item/ammo_magazine/chemdart/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvD" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/braincake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvG" = ( +/obj/item/clothing/under/corp/hedbergtech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvM" = ( +/obj/item/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hvV" = ( +/obj/item/clothing/mask/chewable/tobacco/fine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwb" = ( +/obj/item/weapon/storage/box/ambrosia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwd" = ( +/obj/item/device/assembly/mousetrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwn" = ( +/obj/machinery/door/blast/angled_shutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwr" = ( +/obj/item/clothing/under/utility/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwt" = ( +/obj/item/clothing/accessory/storage/pouches, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hww" = ( +/obj/item/weapon/circuitboard/miningdrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwy" = ( +/obj/item/organ/internal/lungs/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwY" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat/sam_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hwZ" = ( +/obj/item/weapon/thecake_layer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxc" = ( +/obj/item/clothing/suit/storage/miljacket/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxh" = ( +/obj/item/clothing/head/helmet/space/void/mining/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxz" = ( +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxK" = ( +/obj/machinery/chemical_dispenser/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxM" = ( +/obj/structure/prop/rock/waterflat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxT" = ( +/obj/item/weapon/gun/projectile/revolver/toy/crossbow/halloween, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxX" = ( +/obj/item/clothing/under/tribalwear/common2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hxY" = ( +/obj/item/ammo_magazine/ammo_box/b38, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hya" = ( +/obj/item/stack/tile/floor/eris, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyd" = ( +/obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyx" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyF" = ( +/obj/item/ammo_casing/a357/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyJ" = ( +/obj/item/weapon/circuitboard/card/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyK" = ( +/obj/item/clothing/shoes/boots/workboots/toeless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyM" = ( +/obj/machinery/artifact/predefined, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyO" = ( +/obj/item/toy/plushie/teshari/w_yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hyP" = ( +/obj/item/ammo_magazine/m762, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzb" = ( +/obj/item/clothing/under/color/ranger/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzi" = ( +/obj/item/clothing/mask/gas/plaguedoctor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzs" = ( +/obj/item/weapon/pickaxe/brush, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzF" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzH" = ( +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzM" = ( +/obj/item/ammo_magazine/mglock9mm/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzN" = ( +/obj/item/clothing/under/corp/focal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hzV" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAc" = ( +/obj/item/clothing/under/color/fjumpsuit/darkbluef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAv" = ( +/obj/structure/bed/chair/sofa/left/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAx" = ( +/obj/item/weapon/storage/secure/briefcase/fuelrod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAy" = ( +/obj/structure/sign/scenery/map/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAB" = ( +/obj/item/clothing/head/welding/engie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAK" = ( +/obj/item/rig_module/protean/healing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAN" = ( +/obj/item/clothing/gloves/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAP" = ( +/obj/item/weapon/tank/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hAU" = ( +/obj/structure/barricade/cutout/ian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBa" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBc" = ( +/obj/item/organ/internal/robotic/heatsink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBh" = ( +/obj/item/weapon/implant/compliance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBs" = ( +/obj/item/weapon/storage/box/monkeycubes/stokcubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBu" = ( +/obj/item/weapon/gun/energy/ionrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBw" = ( +/obj/item/weapon/material/knife/machete/hatchet/unathiknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBz" = ( +/obj/machinery/door/airlock/angled_tgmc/prep/prep_charlie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBJ" = ( +/obj/item/clothing/head/service/sifguard/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBK" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBU" = ( +/obj/item/integrated_circuit/input/co2_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBV" = ( +/obj/item/clothing/head/beret/solgov/sifguard/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hBW" = ( +/obj/item/weapon/reagent_containers/glass/cooler_bottle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCc" = ( +/obj/structure/reflector/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCh" = ( +/obj/structure/old_roboprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCm" = ( +/obj/structure/closet/excavation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCo" = ( +/obj/machinery/computer/security/wooden_tv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCp" = ( +/obj/item/weapon/storage/secure/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCu" = ( +/obj/item/clothing/head/collectable/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCG" = ( +/obj/item/stack/tile/floor/steel_dirty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCR" = ( +/obj/structure/salvageable/shuttle_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hCT" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/command/cdr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDa" = ( +/obj/item/clothing/under/dress/verglasdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDb" = ( +/obj/item/toy/plushie/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDg" = ( +/obj/item/weapon/reagent_containers/glass/paint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDh" = ( +/obj/machinery/organ_printer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDl" = ( +/obj/item/weapon/reagent_containers/food/snacks/mimeburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDo" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDp" = ( +/obj/item/weapon/spell/apportation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDs" = ( +/obj/item/clothing/under/rank/head_of_personnel_whimsy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDv" = ( +/mob/living/simple_mob/mechanical/corrupt_maint_drone{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hDx" = ( +/obj/item/stack/material/cloth{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDC" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDT" = ( +/obj/item/clothing/suit/varsity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDW" = ( +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hDX" = ( +/obj/item/clothing/accessory/fluff/lena_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEe" = ( +/obj/item/weapon/reagent_containers/glass/bottle/osteodaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEh" = ( +/obj/item/weapon/reagent_containers/food/snacks/amanitajelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEk" = ( +/obj/item/clothing/head/beret/solgov/marcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEn" = ( +/obj/item/flag/fivearrows, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEo" = ( +/obj/item/clothing/accessory/altevian_badge/aquila, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEq" = ( +/obj/item/weapon/circuitboard/disperser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEs" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEu" = ( +/obj/item/seeds/kudzuseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEw" = ( +/mob/living/simple_mob/glitch_boss_fake/strong{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hEC" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb05, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEF" = ( +/obj/item/weapon/gun/energy/locked/frontier/carbine/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEH" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEP" = ( +/obj/item/clothing/accessory/holster/hip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hEZ" = ( +/obj/item/weapon/paper/Cloning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFa" = ( +/obj/item/clothing/under/dress/dress_hr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFb" = ( +/obj/machinery/conveyor_switch/oneway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFd" = ( +/obj/item/weapon/inducer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFh" = ( +/obj/machinery/pipedispenser/disposal/orderable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFi" = ( +/obj/item/clothing/glasses/regular, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFl" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFp" = ( +/obj/item/organ/internal/xenos/hivenode, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFq" = ( +/obj/item/seeds/chantermycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFs" = ( +/obj/structure/bed/chair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFv" = ( +/obj/item/weapon/tool/crowbar/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFC" = ( +/obj/item/clothing/under/solgov/mildress/army/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFJ" = ( +/obj/machinery/computer/transhuman/designer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFS" = ( +/obj/item/weapon/smes_coil/super_capacity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFT" = ( +/obj/item/clothing/ears/earings/fluff/noel_earings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFV" = ( +/obj/item/clothing/accessory/poncho, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hFY" = ( +/obj/item/weapon/melee/baton/fluff/stunstaff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGa" = ( +/obj/structure/closet/secure_closet/egg/scree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGx" = ( +/obj/item/seeds/bluetomatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGy" = ( +/obj/item/weapon/reagent_containers/food/snacks/beans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGF" = ( +/obj/item/device/encryptionkey/headset_rob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGH" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGJ" = ( +/obj/item/clothing/suit/space/vox/civ/science/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGP" = ( +/obj/item/organ/internal/lungs/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGQ" = ( +/obj/item/clothing/under/rank/security/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGR" = ( +/obj/item/clothing/under/teshari/undercoat/standard/orange_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGV" = ( +/obj/item/ammo_casing/a44/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hGW" = ( +/obj/item/weapon/circuitboard/newscaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHp" = ( +/obj/item/weapon/cell/device/super/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHu" = ( +/obj/item/weapon/storage/backpack/satchel/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHA" = ( +/obj/item/clothing/under/color/fjumpsuit/brownf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHD" = ( +/obj/item/bodybag/cryobag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHJ" = ( +/obj/item/device/modkit_conversion/fluff/screekit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHK" = ( +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHN" = ( +/obj/machinery/transportpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHS" = ( +/obj/item/stack/material/cardboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hHV" = ( +/obj/structure/sign/flag/almach_p/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIc" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIf" = ( +/obj/structure/closet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIw" = ( +/obj/item/clothing/under/color/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIy" = ( +/obj/machinery/atmospherics/pipe/zpipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIA" = ( +/obj/item/weapon/reagent_containers/food/drinks/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIE" = ( +/obj/structure/closet/crate/grayson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIN" = ( +/obj/item/clothing/head/soft/solgov/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIO" = ( +/obj/item/clothing/accessory/solgov/specialty/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIP" = ( +/obj/machinery/reagentgrinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIV" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/spas35, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hIZ" = ( +/obj/item/clothing/head/cowboy/wide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJc" = ( +/obj/item/weapon/stamp/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJi" = ( +/obj/item/clothing/suit/armor/centcomm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJm" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/drab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJp" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/pink_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJq" = ( +/obj/item/clothing/glasses/monocle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJr" = ( +/obj/item/weapon/circuitboard/smes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJs" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJv" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/green_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJB" = ( +/obj/item/clothing/under/tribalwear/chief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJI" = ( +/obj/item/slimepotion/reinvigoration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJL" = ( +/obj/item/ammo_magazine/m2024, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJU" = ( +/obj/structure/closet/secure_closet/hop2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJW" = ( +/obj/item/clothing/accessory/sweater/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJX" = ( +/obj/structure/sign/poster/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hJY" = ( +/obj/item/clothing/under/terran/navy/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKa" = ( +/obj/item/weapon/tool/wirecutters/chainsaw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKc" = ( +/obj/item/seeds/deathberryseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKe" = ( +/mob/living/simple_mob/vore/leopardmander/exotic{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hKj" = ( +/obj/item/clothing/gloves/ring/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKk" = ( +/obj/machinery/door/airlock/angled_bay/hatch/explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKs" = ( +/obj/item/clothing/under/pants/blackjeans/ripped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKA" = ( +/obj/item/clothing/suit/space/vox/civ/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKB" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hKF" = ( +/obj/item/stack/marker_beacon/thirty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hKU" = ( +/obj/item/weapon/gun/energy/gun/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLc" = ( +/obj/item/toy/plushie/lizardplushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLs" = ( +/obj/machinery/suit_cycler/vintage/tguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLw" = ( +/mob/living/simple_mob/animal/passive/fish/javelin, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"hLx" = ( +/obj/item/weapon/reagent_containers/glass/paint/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLC" = ( +/obj/structure/sign/department/gravi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLE" = ( +/obj/item/trash/ntbeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLG" = ( +/obj/item/organ/internal/heart/replicant/rage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLJ" = ( +/obj/item/weapon/gun/projectile/m2024, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLR" = ( +/obj/item/clothing/under/hosformalfem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLU" = ( +/obj/item/toy/tennis/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLX" = ( +/obj/item/weapon/computer_hardware/battery_module/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hLY" = ( +/obj/machinery/vr_sleeper/alien/alpha_replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMa" = ( +/obj/item/seeds/berryseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMc" = ( +/obj/item/device/kit/paint/ripley/flames_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMd" = ( +/obj/item/clothing/under/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMe" = ( +/obj/item/trash/oort, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMf" = ( +/obj/item/clothing/head/crown/goose_king/christmas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMg" = ( +/obj/item/device/electronic_assembly/tiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMj" = ( +/obj/item/weapon/implantcase/analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMk" = ( +/obj/item/weapon/storage/pouch/flares/full_glow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMt" = ( +/obj/item/stack/material/verdantium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMu" = ( +/obj/item/clothing/head/cowboy/rattan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMx" = ( +/obj/item/weapon/storage/box/snakesnackbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMA" = ( +/obj/item/clothing/accessory/badge/solgov/representative, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMH" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMI" = ( +/obj/item/weapon/gun/projectile/automatic/fal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMK" = ( +/obj/structure/sign/directions/library, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hML" = ( +/obj/item/clothing/suit/maxman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMM" = ( +/obj/item/weapon/card/id/event/polymorphic/altcard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hMO" = ( +/obj/item/clothing/accessory/sweater/redneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNa" = ( +/obj/item/weapon/reagent_containers/pill/hyronalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNb" = ( +/obj/machinery/light/no_nightshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNv" = ( +/obj/item/rig_module/chem_dispenser/injector/advanced/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNB" = ( +/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hNE" = ( +/mob/living/simple_mob/animal/borer/non_antag, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hNG" = ( +/obj/item/clothing/head/helmet/space/void/merc/odst, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNK" = ( +/obj/structure/closet/crate/large/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNL" = ( +/obj/item/toy/plushie/nukeplushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNO" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNR" = ( +/obj/machinery/vending/foodstuffing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hNV" = ( +/obj/item/device/encryptionkey/headset_sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOi" = ( +/obj/item/weapon/storage/pill_bottle/healing_nanites, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOm" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOn" = ( +/obj/item/seeds/grassseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOp" = ( +/obj/item/clothing/glasses/fluff/avigoggles_yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOt" = ( +/obj/item/clothing/accessory/pride/lesbian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOA" = ( +/mob/living/simple_mob/construct/artificer{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hOB" = ( +/obj/item/clothing/under/suit_jacket/navy/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOC" = ( +/obj/item/toy/figure/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOK" = ( +/obj/item/ammo_magazine/m75, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hOT" = ( +/obj/item/weapon/slime_grinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPn" = ( +/obj/machinery/vr_sleeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPo" = ( +/obj/item/device/multitool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPs" = ( +/obj/item/weapon/soap/cyan_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPy" = ( +/obj/item/weapon/reagent_containers/glass/paint/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPE" = ( +/obj/structure/sign/directions/medical/cloning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPO" = ( +/obj/item/weapon/reagent_containers/food/snacks/crab_legs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPP" = ( +/obj/item/seeds/berryseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hPZ" = ( +/mob/living/simple_mob/animal/space/bats{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hQe" = ( +/obj/item/seeds/onionseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQk" = ( +/obj/item/weapon/pickaxe/advdrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQt" = ( +/obj/item/weapon/rig/ch/aegis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQv" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQw" = ( +/obj/item/seeds/plastellmycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQB" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQC" = ( +/obj/item/ammo_casing/a12g/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQH" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQK" = ( +/obj/item/weapon/circuitboard/mecha/gygax/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQM" = ( +/obj/item/weapon/plantspray/pests/old/carbaryl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQO" = ( +/obj/item/clothing/head/hood/kbraid_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hQR" = ( +/obj/item/weapon/storage/firstaid/clotting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRf" = ( +/obj/structure/closet/boxinggloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRi" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/alkysine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRj" = ( +/obj/item/weapon/circuitboard/fusion_fuel_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRl" = ( +/obj/item/weapon/circuitboard/shuttle_console/explore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRo" = ( +/obj/item/integrated_circuit/output/led/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRq" = ( +/obj/structure/reagent_dispensers/acid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRr" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratpacktaco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRC" = ( +/obj/item/ammo_magazine/ammo_box/b545/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hRL" = ( +/mob/living/simple_mob/humanoid/cultist/tesh{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hRX" = ( +/obj/item/clothing/under/corp/veymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSa" = ( +/obj/item/clothing/under/skirt/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSn" = ( +/obj/item/weapon/computer_hardware/battery_module/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSt" = ( +/obj/item/weapon/disposable_teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSw" = ( +/obj/item/trash/snack_bowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSy" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/grape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSH" = ( +/obj/item/xenos_claw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSY" = ( +/obj/item/clothing/under/gov/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hSZ" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTc" = ( +/obj/item/clothing/under/wedding/bride_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTh" = ( +/obj/item/clothing/accessory/storage/brown_vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTi" = ( +/obj/item/organ/internal/kidneys/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTn" = ( +/obj/item/device/electronic_assembly/medium/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTp" = ( +/obj/item/clothing/head/helmet/space/vox/civ/trader/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTs" = ( +/obj/item/weapon/spacecasinocash/c1000, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hTZ" = ( +/obj/item/clothing/head/beretg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUd" = ( +/obj/item/clothing/accessory/poncho/roles/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUf" = ( +/obj/item/toy/plushie/teshari/_yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUk" = ( +/obj/item/weapon/melee/energy/sword/charge/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUn" = ( +/obj/item/clothing/under/rank/captain/fluff/harmuniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUp" = ( +/obj/item/organ/internal/stomach/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUv" = ( +/obj/machinery/light/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUB" = ( +/obj/item/clothing/head/surgery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUF" = ( +/obj/machinery/door/airlock/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUI" = ( +/obj/item/weapon/storage/backpack/clown/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUP" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/corophizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUV" = ( +/obj/structure/sign/scenery/overlay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUX" = ( +/obj/structure/closet/crate/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hUZ" = ( +/obj/item/weapon/syndie/c4explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVd" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVe" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVg" = ( +/obj/item/device/threadneedle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVo" = ( +/obj/item/clothing/accessory/poncho/thermal/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVu" = ( +/obj/structure/ghost_pod/manual/cursedblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVy" = ( +/obj/item/ammo_magazine/m9mm/large/preban, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVI" = ( +/obj/item/clothing/accessory/solgov/department/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVP" = ( +/obj/item/weapon/stock_parts/scanning_module/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVR" = ( +/obj/item/stack/tile/floor/eris/dark/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hVU" = ( +/obj/item/weapon/implant/tracking, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWd" = ( +/obj/item/toy/plushie/carp/candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWf" = ( +/mob/living/simple_mob/metroid/juvenile{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hWj" = ( +/obj/item/weapon/gun/energy/mouseray/chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWo" = ( +/obj/item/weapon/storage/toolbox/lunchbox/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWp" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/old/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWt" = ( +/obj/item/weapon/dnainjector/antitour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWB" = ( +/obj/structure/closet/crate/critter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWD" = ( +/obj/structure/sign/department/robo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWO" = ( +/obj/item/clothing/shoes/sandal/marisa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWT" = ( +/obj/item/clothing/head/helmet/space/void/refurb/mining/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWY" = ( +/obj/item/clothing/glasses/fakesunglasses/aviator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hWZ" = ( +/obj/item/clothing/head/hardhat/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXa" = ( +/mob/living/simple_mob/humanoid/pirate/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hXb" = ( +/obj/item/clothing/under/swimsuit/fluff/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXd" = ( +/obj/machinery/gear_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXi" = ( +/obj/structure/closet/crate/secure/ward, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXk" = ( +/obj/item/weapon/tank/oxygen/welded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXm" = ( +/obj/item/clothing/head/helmet/space/vox/civ/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXt" = ( +/obj/item/clothing/gloves/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXu" = ( +/obj/item/weapon/reagent_containers/pill/inaprovaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXy" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon_stick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXz" = ( +/obj/item/weapon/reagent_containers/food/snacks/flowerchildsalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXA" = ( +/obj/item/stack/tile/floor/eris/dark/panels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXB" = ( +/obj/item/clothing/suit/space/vox/civ/medical/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXD" = ( +/obj/item/weapon/mine/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXG" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/cheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXH" = ( +/obj/item/weapon/spell/aura/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXK" = ( +/obj/item/clothing/under/redcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXO" = ( +/obj/structure/closet/crate/secure/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXU" = ( +/obj/item/weapon/toy/desk/fan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hXZ" = ( +/obj/machinery/computer/security/telescreen/entertainment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYa" = ( +/obj/item/clothing/under/suit_jacket/checkered/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYk" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYl" = ( +/obj/item/weapon/handcuffs/fuzzy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYm" = ( +/obj/item/instrument/xylophone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYB" = ( +/obj/item/toy/snake_popper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYG" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYS" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/keltec/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYW" = ( +/obj/item/clothing/under/yw/victsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hYX" = ( +/obj/item/weapon/reagent_containers/food/snacks/hotdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZi" = ( +/obj/item/weapon/reagent_containers/food/snacks/omelette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZj" = ( +/obj/item/weapon/flame/candle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZp" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZx" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZz" = ( +/obj/item/weapon/pickaxe/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZC" = ( +/obj/item/clothing/accessory/bracelet/material/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZI" = ( +/obj/item/clothing/under/corp/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZJ" = ( +/obj/item/wheelchair/motor/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZL" = ( +/mob/living/simple_mob/animal/space/alien/drone{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"hZN" = ( +/obj/item/toy/mistletoe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZS" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/plamya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"hZU" = ( +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iag" = ( +/obj/machinery/portable_atmospherics/canister/empty/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaj" = ( +/obj/item/projectile/bullet/pistol/strong, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iax" = ( +/obj/item/clothing/shoes/boots/cowboy/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaz" = ( +/obj/item/weapon/commcard/head/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaG" = ( +/obj/item/clothing/mask/smokable/cigarette/joint/blunt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaQ" = ( +/mob/living/simple_mob/animal/passive/mouse/operative{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iaR" = ( +/obj/item/weapon/grenade/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaT" = ( +/obj/item/weapon/storage/box/fluff/tikorak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaU" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/exotic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iaV" = ( +/obj/item/weapon/reagent_containers/pill/paracetamol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibi" = ( +/obj/item/weapon/storage/box/donkpockets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibj" = ( +/obj/machinery/door/airlock/highsecurity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibq" = ( +/obj/item/clothing/accessory/storage/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibB" = ( +/obj/item/clothing/under/color/fjumpsuit/lightpurplef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibC" = ( +/obj/structure/closet/secure_closet/egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibG" = ( +/obj/item/weapon/surgical/bone_clamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibM" = ( +/obj/item/weapon/grenade/explosive/mini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibO" = ( +/obj/structure/bed/chair/sofa/bench/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibP" = ( +/obj/item/clothing/suit/storage/explorer/security/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibV" = ( +/obj/item/weapon/storage/mrebag/menu7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ibZ" = ( +/obj/item/weapon/storage/mre/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ich" = ( +/obj/machinery/gear_dispenser/randomvoidsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icw" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icz" = ( +/obj/item/weapon/gun/projectile/automatic/battlerifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icH" = ( +/obj/item/clothing/suit/storage/terran/service/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icW" = ( +/obj/structure/bed/chair/sofa/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icY" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"icZ" = ( +/mob/living/simple_mob/shadekin/blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"idf" = ( +/obj/item/weapon/gun/launcher/rocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idl" = ( +/obj/item/clothing/shoes/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idx" = ( +/obj/item/clothing/under/pants/yogapants, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idy" = ( +/obj/item/device/encryptionkey/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idz" = ( +/obj/item/weapon/cell/device/hyper/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idD" = ( +/obj/item/device/modkit_conversion/fluff/skinner/a, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idI" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/taco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idN" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idO" = ( +/obj/item/clothing/under/syndicate/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idP" = ( +/obj/item/modular_computer/console/preset/sysadmin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idV" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"idY" = ( +/obj/item/weapon/storage/backpack/sport/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"idZ" = ( +/obj/mecha/combat/fighter/pinnace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iea" = ( +/obj/item/clothing/suit/leathercoat/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieo" = ( +/obj/item/slime_extract/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iev" = ( +/obj/structure/sign/department/chapel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iew" = ( +/obj/item/weapon/storage/box/glasses/square, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieA" = ( +/obj/item/clothing/head/welding/knight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieB" = ( +/obj/item/weapon/gun/launcher/crossbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieG" = ( +/obj/item/clothing/under/skirt/swept, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieH" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/ghostship, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieR" = ( +/obj/item/trash/maps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ieS" = ( +/obj/item/weapon/grenade/spawnergrenade/manhacks/raider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifc" = ( +/obj/structure/bed/chair/wheelchair/motor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifd" = ( +/obj/item/clothing/accessory/armor/helmcover/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifu" = ( +/obj/item/weapon/storage/box/monkeycubes/wolpincubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifz" = ( +/obj/item/weapon/storage/toolbox/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifA" = ( +/obj/structure/sign/directions/security/forensics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifB" = ( +/obj/item/clothing/under/solgov/mildress/army/command/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifD" = ( +/obj/structure/sign/department/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifE" = ( +/obj/item/weapon/gun/projectile/colt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifH" = ( +/obj/item/clothing/head/surgery/navyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifO" = ( +/obj/item/seeds/wabback, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifQ" = ( +/obj/item/clothing/accessory/medal/solgov/gold/star, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ifU" = ( +/obj/item/clothing/head/helmet/space/void/refurb/pilot/alt/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igc" = ( +/obj/item/seeds/orangeseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igd" = ( +/obj/item/clothing/suit/storage/vest/wardencoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igk" = ( +/obj/item/organ/internal/brain/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igp" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igt" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igy" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igG" = ( +/obj/item/weapon/module/cell_power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igL" = ( +/obj/item/weapon/reagent_containers/pill/peridaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igN" = ( +/obj/item/weapon/reagent_containers/glass/bottle/cyanide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igO" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igT" = ( +/obj/item/clothing/accessory/scarf/stripedred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"igW" = ( +/obj/item/weapon/computer_hardware/battery_module/ultra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihb" = ( +/obj/item/weapon/gun/energy/laser/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihr" = ( +/obj/item/clothing/gloves/gauntlets/rig/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihs" = ( +/obj/item/device/beacon_locator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihz" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihB" = ( +/obj/machinery/atmospherics/valve/digital, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihF" = ( +/obj/item/organ/internal/regennetwork/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihG" = ( +/obj/item/trash/namagashi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihI" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/dark, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ihK" = ( +/obj/item/organ/internal/voicebox/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihM" = ( +/obj/item/weapon/gun/projectile/revolver/consul, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihP" = ( +/obj/item/clothing/head/ushanka/solgov/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ihR" = ( +/mob/living/simple_mob/animal/passive/dog/bullterrier, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ihU" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ihW" = ( +/obj/structure/bed/chair/bay/chair/padded/red/smallnest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iid" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb08, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iif" = ( +/obj/item/ammo_magazine/clip/c44, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iil" = ( +/obj/item/clothing/under/acj/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iim" = ( +/obj/item/clothing/under/suit_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iin" = ( +/obj/item/toy/plushie/carp/silent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiy" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiz" = ( +/obj/item/clothing/head/service/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiC" = ( +/obj/item/seeds/lustflower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiE" = ( +/obj/item/stack/tile/floor/eris/dark/brown_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiH" = ( +/obj/item/weapon/mine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiL" = ( +/obj/item/toy/plushie/borgplushie/scrubpuppy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiQ" = ( +/obj/item/clothing/under/fluff/missy_skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiX" = ( +/obj/item/weapon/oldtwohanded/spear/fluff/madoka_koto_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiY" = ( +/obj/item/clothing/head/ushanka/soviet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iiZ" = ( +/obj/item/weapon/storage/toolbox/lunchbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijf" = ( +/obj/item/seeds/ambrosiadeusseed, +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijk" = ( +/obj/structure/outcrop/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijp" = ( +/obj/item/toy/figure/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijr" = ( +/obj/item/clothing/shoes/boots/winter/climbing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijs" = ( +/obj/item/weapon/pickaxe/hand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iju" = ( +/obj/item/weapon/reagent_containers/food/snacks/tamales, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijw" = ( +/obj/item/clothing/suit/storage/vest/solgov/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijz" = ( +/obj/machinery/atmospherics/binary/pump/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijJ" = ( +/obj/structure/closet/secure_closet/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijN" = ( +/obj/structure/closet/gimmick/russian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ijQ" = ( +/mob/living/simple_mob/animal/passive/bird/ringneck_dove, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ikb" = ( +/obj/machinery/vr_sleeper/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikh" = ( +/obj/item/clothing/suit/space/void/merc/odst, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikp" = ( +/obj/item/weapon/flame/candle/candelabra/everburn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikv" = ( +/obj/item/clothing/accessory/solgov/ec_patch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikA" = ( +/obj/item/weapon/paper/khcrystal_manual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikE" = ( +/obj/item/clothing/accessory/solgov/rank/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikF" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikP" = ( +/obj/structure/closet/crate/allico, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikQ" = ( +/obj/item/weapon/refill_cartridge/autoname/drink/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ikW" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilh" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilq" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilu" = ( +/obj/item/weapon/book/manual/engineering_particle_accelerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilv" = ( +/obj/item/device/universal_translator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilw" = ( +/obj/item/weapon/tank/phoron/onetankbomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ily" = ( +/obj/item/weapon/reagent_containers/food/snacks/bageltwo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilE" = ( +/obj/item/weapon/card/id/civilian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilI" = ( +/obj/vehicle/train/security/trolley/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilO" = ( +/obj/item/weapon/reagent_containers/cooking_container/grill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilT" = ( +/obj/item/clothing/under/solgov/utility/fleet/command/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ilY" = ( +/obj/item/weapon/tool/prybar/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imb" = ( +/obj/item/integrated_circuit/input/oxygen_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iml" = ( +/obj/item/weapon/commcard/head/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imq" = ( +/obj/item/stack/material/copper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imt" = ( +/obj/item/clothing/mask/gas/guy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imx" = ( +/obj/machinery/crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imz" = ( +/obj/item/ammo_casing/microbattery/medical/grow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imA" = ( +/obj/item/clothing/head/tesh_hood/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imB" = ( +/mob/living/simple_mob/mobs_monsters/clowns/honkling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"imF" = ( +/obj/item/weapon/computer_hardware/network_card, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imL" = ( +/obj/item/weapon/melee/shock_maul, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imO" = ( +/obj/item/organ/internal/eyes/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imR" = ( +/obj/item/clothing/shoes/lightrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"imS" = ( +/mob/living/simple_mob/animal/passive/cow, +/turf/simulated/floor/atoll, +/area/survivalpod) +"imT" = ( +/obj/structure/sign/signnew/radiation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inb" = ( +/obj/item/clothing/head/tesh_hood/standard/orange_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ind" = ( +/obj/item/weapon/gun/energy/locked/phasegun/cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inl" = ( +/obj/structure/sign/warning/radioactive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inm" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inn" = ( +/obj/item/weapon/tool/screwdriver/diamonddrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ino" = ( +/obj/item/clothing/shoes/boots/cult/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inu" = ( +/obj/item/clothing/accessory/poncho/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inv" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inC" = ( +/obj/item/clothing/under/rank/research_director/dress_rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inD" = ( +/obj/item/stack/tile/floor/eris/derelict3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inE" = ( +/obj/item/paint_brush, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"inK" = ( +/obj/structure/closet/secure_closet/egg/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iol" = ( +/obj/item/clothing/glasses/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioq" = ( +/obj/structure/closet/walllocker_double/generic_civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iot" = ( +/obj/item/clothing/under/suit_jacket/burgundy/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iox" = ( +/obj/item/weapon/storage/bag/dogborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioC" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioJ" = ( +/obj/item/clothing/suit/storage/solgov/service/army/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioK" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioO" = ( +/obj/item/weapon/storage/vore_egg/rock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioP" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/toolkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioU" = ( +/obj/structure/outcrop/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioV" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/type901/carbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioW" = ( +/obj/item/toy/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioY" = ( +/obj/item/toy/figure/error, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ioZ" = ( +/obj/structure/sign/levels/kitchen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipa" = ( +/obj/machinery/transhuman/autoresleever, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipe" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/gray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipv" = ( +/obj/item/weapon/pen/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipA" = ( +/obj/item/organ/internal/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipH" = ( +/obj/structure/largecrate/animal/jerboa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipJ" = ( +/obj/structure/closet/body_bag/cryobag/robobag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipW" = ( +/obj/item/clothing/accessory/jacket/extravagant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ipZ" = ( +/obj/item/weapon/storage/pouch/eng_tool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqb" = ( +/obj/item/weapon/spell/abjuration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqd" = ( +/obj/item/weapon/storage/box/fluff/ivy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqj" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqp" = ( +/obj/item/clothing/under/goldrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqu" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqz" = ( +/obj/item/weapon/book/custom_library/religious/wayofbleedingswan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqE" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sparracube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqJ" = ( +/mob/living/simple_mob/animal/passive/snake/python/noodle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iqM" = ( +/obj/item/clothing/under/solgov/utility/fleet/officer/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iqN" = ( +/obj/item/seeds/carrotseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irc" = ( +/obj/item/seeds/gnomes, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irh" = ( +/obj/structure/loot_pile/mecha/hoverpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iri" = ( +/obj/structure/bed/chair/bay/chair/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irv" = ( +/obj/machinery/processor/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irw" = ( +/obj/item/clothing/accessory/solgov/rank/ec/officer/o3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irA" = ( +/obj/item/ammo_magazine/ammo_box/b45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irB" = ( +/obj/structure/largecrate/vehicle/quadtrailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irH" = ( +/obj/item/weapon/reagent_containers/blood/BPlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irN" = ( +/obj/item/weapon/surgical/surgicaldrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irO" = ( +/obj/machinery/door/blast/angled_shutter/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"irT" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ise" = ( +/obj/item/clothing/under/shorts/jeans/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iso" = ( +/obj/item/ammo_magazine/m545/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isp" = ( +/obj/item/clothing/shoes/boots/cowboy/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ist" = ( +/obj/item/clothing/under/shorts/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isv" = ( +/obj/item/weapon/storage/box/cdeathalarm_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isy" = ( +/obj/item/clothing/head/beret/solgov/fleet/branch/fourth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isC" = ( +/obj/item/device/retail_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isD" = ( +/obj/item/clothing/glasses/hud/health/aviator/fluff/jiao_glasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isE" = ( +/obj/item/weapon/reagent_containers/food/snacks/driedfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isF" = ( +/obj/item/weapon/technomancer_catalog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"isR" = ( +/obj/structure/smoletrack/roadT, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itg" = ( +/obj/item/clothing/under/rank/trek/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itl" = ( +/obj/item/projectile/bullet/rifle/a556, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itn" = ( +/obj/item/integrated_circuit/passive/power/relay/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itr" = ( +/obj/item/clothing/head/caphat/formal/fedcover/fedcoversec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itt" = ( +/obj/item/weapon/reagent_containers/food/snacks/honeytoast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itu" = ( +/obj/item/weapon/circuitboard/comm_server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itE" = ( +/obj/structure/sign/flag/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itM" = ( +/obj/item/clothing/shoes/hitops/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"itT" = ( +/obj/structure/salvageable/personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iub" = ( +/obj/item/weapon/reagent_containers/food/snacks/fruitsalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuj" = ( +/obj/item/clothing/head/helmet/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iul" = ( +/obj/item/clothing/accessory/storage/pouches/large/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuv" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuw" = ( +/obj/item/toy/figure/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuy" = ( +/obj/item/weapon/stamp/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuz" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/custom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuN" = ( +/obj/machinery/oxygen_pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iuX" = ( +/obj/item/clothing/shoes/boots/ranger/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivh" = ( +/obj/item/clothing/suit/space/void/merc/axis/sovrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivm" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivp" = ( +/obj/item/clothing/suit/storage/hazardvest/yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivt" = ( +/obj/item/weapon/spacecasinocash/c50, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivE" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivH" = ( +/obj/item/weapon/storage/backpack/holding/duffle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivQ" = ( +/obj/structure/lightpost/unlit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ivV" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwh" = ( +/obj/item/clothing/under/color/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwm" = ( +/obj/item/weapon/reagent_containers/food/snacks/chilied_eggs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwn" = ( +/obj/item/weapon/book/manual/atmospipes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwt" = ( +/obj/item/weapon/refill_cartridge/autoname/technical/assist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwx" = ( +/obj/item/clothing/accessory/holster/machete/rapier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwA" = ( +/obj/item/weapon/cell/device/shield_generator/parry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwC" = ( +/obj/machinery/atmospherics/binary/pump/high_power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwK" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwL" = ( +/obj/item/weapon/melee/energy/sword/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iwX" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixb" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/fluff/brittrenchcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixe" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/wrdn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixi" = ( +/obj/item/weapon/reagent_containers/food/snacks/rawsunflower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixo" = ( +/obj/item/clothing/suit/space/skrell/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixv" = ( +/obj/item/clothing/suit/armor/vest/ert/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixy" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/purple_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixz" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/medanalyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixA" = ( +/obj/item/weapon/card/id, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixF" = ( +/obj/item/weapon/rig/pmc/security/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixG" = ( +/obj/item/clothing/suit/armor/combat/crusader_explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixO" = ( +/obj/item/weapon/storage/photo_album, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixP" = ( +/obj/item/weapon/mine/n2o, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixU" = ( +/obj/structure/prop/war/tgmc_missile_rack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixY" = ( +/obj/item/toy/figure/bounty_hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ixZ" = ( +/obj/item/clothing/glasses/welding/superior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iya" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyg" = ( +/obj/item/weapon/dnainjector/antiglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyk" = ( +/obj/item/weapon/storage/box/fluff/lena, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iym" = ( +/obj/item/weapon/reagent_containers/food/snacks/pancakes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyp" = ( +/obj/item/ammo_magazine/clip/c545/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyC" = ( +/mob/living/simple_mob/animal/giant_spider/webslinger{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iyG" = ( +/obj/item/integrated_circuit/output, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iyH" = ( +/mob/living/simple_mob/animal/passive/cat/bluespace, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iyL" = ( +/obj/item/clothing/accessory/solgov/fleet_patch/fourth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izb" = ( +/obj/item/weapon/storage/box/fluff/Kassc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ize" = ( +/obj/item/clothing/head/collectable/police, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izj" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izk" = ( +/obj/item/clothing/under/color/fjumpsuit/yellowgreenf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izl" = ( +/obj/machinery/vending/wardrobe/virodrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izr" = ( +/obj/item/clothing/accessory/tropical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izF" = ( +/obj/structure/kitchenspike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izG" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/concussion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izJ" = ( +/obj/item/weapon/weldingtool/electric/unloaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izK" = ( +/obj/item/clothing/under/summerdress/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izM" = ( +/obj/item/weapon/pinpointer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izR" = ( +/obj/item/weapon/material/twohanded/baseballbat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izW" = ( +/obj/item/weapon/reagent_containers/food/snacks/liquidfood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"izX" = ( +/obj/item/weapon/storage/bag/circuits/mini/output/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAc" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAj" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAD" = ( +/obj/item/weapon/aiModule/gravekeeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAE" = ( +/obj/item/weapon/reagent_containers/food/condiment/carton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAK" = ( +/obj/item/integrated_circuit/arithmetic/exponent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAN" = ( +/obj/item/weapon/computer_hardware/hard_drive/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAQ" = ( +/obj/item/clothing/mask/muzzle/ballgag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iAV" = ( +/obj/item/clothing/suit/storage/puffyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBb" = ( +/obj/item/clothing/head/technomancer/apprentice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBc" = ( +/obj/item/clothing/under/explorer/utility/command/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBi" = ( +/obj/structure/closet/syndicate/suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBj" = ( +/obj/item/weapon/rig/pmc/security/grey/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBp" = ( +/obj/item/organ/internal/brain/golem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBs" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/evian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBu" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iBA" = ( +/obj/machinery/item_bank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBH" = ( +/obj/item/clothing/under/color/darkred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBI" = ( +/obj/item/weapon/forensics/swab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBK" = ( +/obj/item/clothing/head/hood/winter/cargo/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBT" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBX" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iBZ" = ( +/obj/item/weapon/reagent_containers/syringe/steroid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCb" = ( +/obj/item/clothing/under/fluff/rosetta, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCc" = ( +/obj/item/weapon/melee/energy/axe/charge/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCg" = ( +/obj/item/weapon/storage/quickdraw/syringe_case/clotting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCh" = ( +/obj/item/weapon/bedsheet/orangedouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCj" = ( +/obj/item/weapon/circuitboard/tesla_coil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCm" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/blue_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCG" = ( +/obj/machinery/vending/food/prison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCK" = ( +/obj/item/weapon/reagent_containers/food/snacks/nettlesoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iCR" = ( +/mob/living/simple_mob/animal/passive/armadillo/torta{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iDj" = ( +/obj/item/weapon/storage/pouch/eng_parts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDo" = ( +/obj/item/weapon/circuitboard/atm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDr" = ( +/obj/item/device/nif/bioadap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDy" = ( +/obj/item/clothing/under/corp/morpheus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDz" = ( +/obj/machinery/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDB" = ( +/obj/item/clothing/suit/storage/vest/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDE" = ( +/obj/item/weapon/rig/vox/carapace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDG" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/carthatoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDQ" = ( +/obj/item/clothing/accessory/tie/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDS" = ( +/obj/item/weapon/dnainjector/antinoprints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iDV" = ( +/obj/item/clothing/accessory/collar/fluff/amara_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEf" = ( +/obj/item/clothing/suit/storage/hazardvest/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEh" = ( +/obj/item/seeds/ambrosiainfernusseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEk" = ( +/obj/item/ammo_magazine/m545/small/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEt" = ( +/obj/item/clothing/accessory/badge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEC" = ( +/obj/item/clothing/accessory/armor/tag/opos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEE" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkfishfillet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEL" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/asval, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEM" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iEO" = ( +/obj/item/toy/plushie/carp/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iEP" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFe" = ( +/obj/item/weapon/storage/pill_bottle/inaprovaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFk" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFm" = ( +/obj/item/weapon/gun/projectile/automatic/fluff/crestrose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFq" = ( +/mob/living/simple_mob/horror/Sally{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iFE" = ( +/obj/structure/prop/machine/tgmc_console3/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFK" = ( +/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iFU" = ( +/obj/machinery/light/spot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGa" = ( +/obj/structure/bed/chair/oldsofa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGi" = ( +/obj/item/clothing/head/soft/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGl" = ( +/obj/item/weapon/aiModule/pleasurebot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGn" = ( +/obj/machinery/atmospherics/trinary/atmos_filter/m_filter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGo" = ( +/obj/item/clothing/suit/kimono/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGu" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGv" = ( +/obj/item/clothing/suit/armor/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGA" = ( +/obj/item/weapon/stock_parts/micro_laser/ultra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGD" = ( +/mob/living/simple_mob/vore/alienanimals/teppi{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iGG" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iGS" = ( +/obj/structure/largecrate/animal/fennec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iGU" = ( +/obj/item/clothing/glasses/hud/health/octaviousmonicle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHk" = ( +/obj/item/clothing/accessory/badge/idbadge/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHx" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHA" = ( +/obj/structure/sign/signnew/biohazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHB" = ( +/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHC" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHN" = ( +/obj/item/stack/tile/carpet/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHV" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iHW" = ( +/obj/item/weapon/gun/energy/mouseray/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIa" = ( +/obj/structure/sign/double/maltesefalcon/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iId" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIe" = ( +/mob/living/simple_mob/humanoid/pirate/mate/ranged/shotgun{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iIl" = ( +/obj/item/stack/tile/floor/eris/white/violetcorener, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIm" = ( +/obj/item/clothing/accessory/sweater/winterneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIq" = ( +/obj/structure/prop/machine/tradebeacon/starts_active, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIA" = ( +/obj/structure/closet/crate/morpheus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIC" = ( +/obj/machinery/door/firedoor/multi_tile/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIJ" = ( +/obj/item/weapon/storage/box/seccarts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iIP" = ( +/obj/item/weapon/cell/device/giga, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJg" = ( +/obj/item/clothing/under/hyperfiber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJh" = ( +/obj/item/flag/sol/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJj" = ( +/obj/item/clothing/accessory/storage/black_vest/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJq" = ( +/obj/item/clothing/head/justice/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJL" = ( +/obj/machinery/disease2/incubator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJO" = ( +/mob/living/simple_mob/animal/space/goose/domesticated/casino{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iJT" = ( +/obj/item/device/mapping_unit/deathsquad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJV" = ( +/obj/item/clothing/head/hood/winter/medical/para, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJW" = ( +/obj/item/weapon/cartridge/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iJZ" = ( +/obj/item/weapon/book/manual/medical_diagnostics_manual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iKh" = ( +/obj/item/clothing/under/assistantformal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iKl" = ( +/obj/item/toy/figure/agent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iKu" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iKG" = ( +/obj/item/weapon/card/id/explorer/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iKK" = ( +/obj/item/ammo_casing/microbattery/medical/toxin2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iKM" = ( +/obj/item/clothing/glasses/fluff/science_proper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLi" = ( +/obj/item/ammo_magazine/m45tommydrum/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLk" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/orange_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLl" = ( +/obj/item/clothing/under/solgov/utility/fleet/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLy" = ( +/obj/item/clothing/accessory/holster/hip/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLF" = ( +/obj/item/seeds/ambrosiagaiaseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLG" = ( +/obj/structure/closet/crate/mimic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLI" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLR" = ( +/obj/item/weapon/spell/warp_strike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLU" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "32" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLV" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLW" = ( +/obj/item/weapon/storage/firstaid/surgery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iLZ" = ( +/obj/item/weapon/gun/projectile/revolver/judge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMa" = ( +/obj/item/seeds/bloodtomatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMb" = ( +/obj/item/clothing/mask/fluff/lucerna_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMf" = ( +/obj/item/weapon/gun/projectile/p92x/large/preban, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMh" = ( +/obj/item/clothing/accessory/medal/fluff/rindeimos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMp" = ( +/obj/item/device/flashlight/glowstick/radioisotope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMx" = ( +/obj/item/clothing/under/captainformal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMN" = ( +/obj/machinery/power/smes/buildable/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMO" = ( +/obj/item/device/kit/paint/ripley/death, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMP" = ( +/obj/structure/largecrate/animal/dangerous, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMQ" = ( +/obj/item/weapon/deck/schnapsen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iMZ" = ( +/obj/item/device/survivalcapsule/escapepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNe" = ( +/obj/machinery/door/airlock/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNh" = ( +/obj/item/mecha_parts/mecha_equipment/generator/nuclear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNj" = ( +/obj/machinery/gear_dispenser/suit/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNl" = ( +/obj/item/clothing/under/pants/track/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNq" = ( +/obj/item/weapon/storage/backpack/dufflebag/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNv" = ( +/obj/machinery/bomb_tester, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNx" = ( +/obj/structure/bed/pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNE" = ( +/obj/item/clothing/accessory/hawaiian/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNK" = ( +/obj/item/clothing/accessory/holster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNP" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/deathslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iNU" = ( +/obj/item/weapon/ore/verdantium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNY" = ( +/obj/item/stolenpackage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iNZ" = ( +/obj/item/ammo_magazine/m44, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOg" = ( +/obj/item/clothing/under/solgov/utility/fleet/officer/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOB" = ( +/obj/machinery/door/airlock/angled_bay/external/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOC" = ( +/obj/item/device/flashlight/color/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOG" = ( +/obj/item/weapon/crossbowframe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOL" = ( +/obj/item/clothing/accessory/armor/helmcover/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOV" = ( +/obj/item/seeds/angelmycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iOY" = ( +/obj/item/weapon/shield/energy/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPa" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/lightgrey_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPb" = ( +/obj/item/clothing/suit/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPc" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/cyro{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iPl" = ( +/obj/item/weapon/reagent_containers/food/snacks/benedict, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPo" = ( +/obj/item/clothing/head/beret/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPv" = ( +/obj/item/mecha_parts/part/janus_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPA" = ( +/obj/item/weapon/circuitboard/destructive_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPD" = ( +/obj/machinery/vending/wardrobe/clowndrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPI" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPK" = ( +/obj/structure/sink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPM" = ( +/obj/item/weapon/circuitboard/conveyor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPU" = ( +/obj/item/clothing/under/pizzaguy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPV" = ( +/obj/item/clothing/suit/storage/hooded/foodcostume/hotdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iPW" = ( +/obj/item/weapon/folder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQm" = ( +/obj/item/weapon/aiModule/predator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQn" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQq" = ( +/obj/vehicle/train/trolley/trailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQN" = ( +/obj/item/weapon/refill_cartridge/autoname/technical/tool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQR" = ( +/obj/item/clothing/under/clown/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iQX" = ( +/obj/item/clothing/suit/jacket/puffer/vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRb" = ( +/obj/item/clothing/under/retrosweater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRi" = ( +/obj/item/weapon/storage/box/nifsofts_engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRl" = ( +/obj/item/toy/figure/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRm" = ( +/obj/item/weapon/storage/backpack/satchel/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRo" = ( +/obj/structure/bed/chair/sofa/right/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRs" = ( +/obj/structure/table, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRz" = ( +/obj/item/ammo_magazine/m10mm/pistol/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRG" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/green_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRJ" = ( +/obj/item/brokenbug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iRW" = ( +/obj/structure/prop/machine/biosyphon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSf" = ( +/obj/item/clothing/suit/storage/toggle/bomber/retro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSj" = ( +/obj/structure/closet/crate/secure/weapon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSk" = ( +/obj/item/clothing/under/skirt/outfit/plaid_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSx" = ( +/obj/item/clothing/head/helmet/ert/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSG" = ( +/obj/machinery/oxygen_pump/mobile/stabilizer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSP" = ( +/obj/item/clothing/under/rank/scientist/turtleneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iSW" = ( +/obj/item/integrated_circuit/logic/binary/or, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTc" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTd" = ( +/obj/item/taperoll/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTf" = ( +/obj/item/clothing/under/rank/trek/eng/next, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTi" = ( +/obj/item/toy/toy_xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTl" = ( +/obj/item/clothing/head/beret/solgov/fleet/branch/fifth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTm" = ( +/obj/item/clothing/head/hood/winter/snowsuit/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTn" = ( +/obj/item/weapon/circuitboard/mecha/phazon/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTp" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTw" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTx" = ( +/obj/item/clothing/head/helmet/fluff/skinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTz" = ( +/obj/item/weapon/storage/pouch/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTF" = ( +/obj/structure/fence/cut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTH" = ( +/obj/item/weapon/storage/box/fluff/vasharr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTJ" = ( +/obj/item/toy/tennis/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iTQ" = ( +/obj/structure/dirtybed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUa" = ( +/obj/item/weapon/banner/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUh" = ( +/obj/item/seeds/hardlightseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUi" = ( +/obj/structure/prop/statue/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUj" = ( +/obj/item/clothing/under/solgov/utility/army/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUl" = ( +/obj/item/clothing/suit/armor/pcarrier/medium/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUm" = ( +/obj/structure/prop/machine/core/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUr" = ( +/obj/item/weapon/melee/changeling/arm_blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUt" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iUA" = ( +/obj/item/clothing/gloves/combat/knight_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUM" = ( +/obj/item/integrated_circuit/manipulation/locomotion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUQ" = ( +/obj/structure/extinguisher_cabinet/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iUV" = ( +/obj/item/clothing/suit/judgerobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVa" = ( +/obj/item/weapon/circuitboard/grid_checker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVd" = ( +/obj/item/capture_crystal/great, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVe" = ( +/obj/machinery/vending/emergencyfood/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVk" = ( +/obj/item/broken_sm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVl" = ( +/obj/item/weapon/tool/screwdriver/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVm" = ( +/obj/item/clothing/accessory/cowboy_vest/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVA" = ( +/obj/item/device/bug_monitor/spy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVH" = ( +/obj/item/clothing/under/shorts/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVI" = ( +/obj/item/weapon/aiModule/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVU" = ( +/obj/item/weapon/storage/backpack/sport/gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iVV" = ( +/mob/living/simple_mob/horror/Steve{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iVY" = ( +/obj/item/clothing/suit/armor/pcarrier/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWf" = ( +/obj/item/weapon/book/manual/security_space_law, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWg" = ( +/obj/item/weapon/circuitboard/air_management/injector_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWj" = ( +/obj/machinery/power/solar_control/autostart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWo" = ( +/obj/item/clothing/suit/space/void/security/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWp" = ( +/obj/item/clothing/accessory/medal/conduct, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWu" = ( +/obj/item/ammo_magazine/mglock9mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWv" = ( +/obj/item/pizzavoucher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWB" = ( +/obj/structure/prop/machine/tgmc_console2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWD" = ( +/obj/structure/bed/chair/wheelchair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWJ" = ( +/obj/item/weapon/circuitboard/cerealmaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWQ" = ( +/obj/item/clothing/under/solgov/utility/army/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWV" = ( +/obj/machinery/gateway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iWY" = ( +/obj/item/weapon/storage/box/casino/costume_pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXa" = ( +/obj/item/weapon/material/fishing_rod/modern/cheap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXc" = ( +/obj/item/clothing/accessory/medal/nobel_science/fluff/ashley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXg" = ( +/obj/item/mecha_parts/part/durand_right_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXu" = ( +/obj/machinery/door/airlock/angled_bay/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXG" = ( +/obj/item/weapon/card/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iXQ" = ( +/obj/item/weapon/circuitboard/telecomms/receiver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYa" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/gilthari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYe" = ( +/mob/living/simple_mob/animal/giant_spider/hunter{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"iYs" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYu" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/nettie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYA" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYC" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYE" = ( +/obj/item/clothing/head/that/fluff/gettler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYH" = ( +/obj/item/weapon/reagent_containers/food/snacks/piginblanket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYI" = ( +/obj/item/stack/tile/carpet/retro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYK" = ( +/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYT" = ( +/obj/item/clothing/gloves/ring/reagent/sleepy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYU" = ( +/obj/item/clothing/under/solgov/utility/fleet/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iYW" = ( +/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/katarina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZb" = ( +/obj/structure/prop/machine/bsb_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZd" = ( +/obj/item/clothing/under/corp/wulf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZg" = ( +/obj/item/weapon/paper/card/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZn" = ( +/obj/item/ammo_magazine/awp/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZq" = ( +/obj/item/weapon/commcard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZt" = ( +/obj/item/device/hailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZu" = ( +/obj/item/device/transfer_valve, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZG" = ( +/obj/item/toy/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZH" = ( +/obj/machinery/recycling/crusher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZI" = ( +/obj/structure/cult/pylon/swarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZK" = ( +/obj/item/weapon/storage/box/scattershot/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZO" = ( +/obj/item/weapon/book/manual/ripley_build_and_repair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZR" = ( +/obj/item/weapon/gun/energy/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZT" = ( +/obj/item/weapon/card/id/talon/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZX" = ( +/obj/item/weapon/ore/bluespace_crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"iZZ" = ( +/obj/item/ammo_casing/a95, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jah" = ( +/obj/item/stack/animalhide/lizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jan" = ( +/obj/structure/door_assembly/door_assembly_alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jao" = ( +/obj/item/weapon/storage/belt/soulstone/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jap" = ( +/obj/item/weapon/aiModule/safeguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jaq" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/tomato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jas" = ( +/obj/structure/closet/crate/secure/focalpoint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jau" = ( +/obj/item/clothing/under/rank/mailman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jav" = ( +/obj/item/weapon/melee/voidblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jaz" = ( +/obj/item/clothing/head/welding/demon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jaB" = ( +/obj/item/weapon/storage/backpack/ert/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jaD" = ( +/obj/item/clothing/under/dress/white2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jaE" = ( +/obj/structure/prop/nt_optable/starts_active, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jba" = ( +/obj/item/pipe/quaternary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbb" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbi" = ( +/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbp" = ( +/obj/item/clothing/accessory/solgov/ec_patch/fieldops, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jby" = ( +/obj/item/toy/character/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbA" = ( +/obj/item/toy/plushie/carp/electric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbE" = ( +/obj/structure/portal_event/resize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbF" = ( +/obj/item/ammo_magazine/clip/c12g/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbG" = ( +/obj/structure/loot_pile/maint/technical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbJ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sleeptox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbM" = ( +/obj/structure/closet/crate/weapon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jbR" = ( +/obj/structure/bed/chair/bay/shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcd" = ( +/obj/item/clothing/under/rank/trek/eng/ent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jck" = ( +/obj/item/clothing/suit/space/void/hev, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jct" = ( +/obj/item/clothing/suit/chickensuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcu" = ( +/obj/item/weapon/bedsheet/purpledouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcB" = ( +/obj/machinery/door/airlock/external/bolted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcQ" = ( +/obj/item/device/nifrepairer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcU" = ( +/obj/item/weapon/reagent_containers/blood/BMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jcZ" = ( +/obj/item/weapon/telecube/precursor/mated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdl" = ( +/obj/item/integrated_circuit/transfer/demultiplexer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdq" = ( +/mob/living/simple_mob/animal/space/mouse_army/operative{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jdr" = ( +/obj/item/clothing/head/tesh_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdt" = ( +/obj/item/clothing/head/wizard/magus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdz" = ( +/obj/structure/bed/chair/bay/comfy/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdD" = ( +/obj/item/clothing/under/clown/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdF" = ( +/obj/item/clothing/suit/armor/pcarrier/explorer/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdO" = ( +/obj/item/clothing/head/bomb_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdQ" = ( +/obj/item/weapon/storage/belt/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jdV" = ( +/obj/item/clothing/under/pants/track/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jea" = ( +/obj/item/robot_parts/l_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jee" = ( +/obj/item/clothing/accessory/badge/press/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jen" = ( +/obj/item/clothing/suit/space/void/refurb/mercenary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jeu" = ( +/obj/item/toy/colorballoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jex" = ( +/obj/item/clothing/under/dress/maid/sexy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jey" = ( +/obj/item/weapon/storage/pill_bottle/happy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jeT" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jeW" = ( +/obj/item/rig_module/device/rcd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfc" = ( +/obj/item/weapon/cartridge/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfd" = ( +/obj/item/clothing/suit/storage/fluff/jacket/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfi" = ( +/obj/item/clothing/accessory/armor/armorplate/stab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfj" = ( +/obj/item/device/flashlight/lamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfq" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jfs" = ( +/obj/item/stack/medical/advanced/ointment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfG" = ( +/obj/item/device/healthanalyzer/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfH" = ( +/obj/machinery/portable_atmospherics/canister/phoron/engine_setup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfR" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfS" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfT" = ( +/obj/item/clothing/accessory/solgov/department/research/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jfU" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgm" = ( +/obj/item/weapon/book/manual/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgu" = ( +/obj/item/toy/mecha/fivestars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgC" = ( +/obj/item/clothing/accessory/antediluvian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgI" = ( +/obj/item/clothing/head/hood/hoodie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgM" = ( +/obj/machinery/smartfridge/sheets/persistent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgN" = ( +/obj/item/weapon/disk/species/diona, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgU" = ( +/obj/item/mecha_parts/mecha_equipment/wormhole_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgV" = ( +/obj/item/ammo_magazine/m41, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgX" = ( +/obj/item/weapon/commcard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jgY" = ( +/mob/living/simple_mob/slime/xenobio/bluespace{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jhg" = ( +/obj/item/ammo_magazine/m9mmt/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhh" = ( +/obj/item/weapon/reagent_containers/food/snacks/chips/bbq, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhn" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhD" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ak74, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhG" = ( +/obj/structure/loot_pile/mecha/ripley/random_sprite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhI" = ( +/obj/item/seeds/celery, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhP" = ( +/obj/item/weapon/grenade/chem_grenade/miasma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhQ" = ( +/obj/item/clothing/suit/armor/pcarrier/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jhS" = ( +/obj/item/weapon/card/id/event/accessset/itg/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jia" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jib" = ( +/obj/item/weapon/gun/projectile/dartgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jil" = ( +/obj/item/clothing/suit/storage/teshari/cloak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jim" = ( +/obj/item/weapon/storage/box/casino/costume_whitebunny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiv" = ( +/obj/structure/barricade/cutout/ntsec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiw" = ( +/obj/item/clothing/suit/armor/material/makeshift/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiE" = ( +/obj/item/weapon/reagent_containers/food/snacks/bagelsunflower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiF" = ( +/obj/item/weapon/pen/crayon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiO" = ( +/obj/item/weapon/paper/sticky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiV" = ( +/obj/structure/closet/crate/medical/blood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jiW" = ( +/obj/structure/prop/war/tgmc_missile_rack/banshee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjf" = ( +/obj/item/device/t_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjg" = ( +/obj/item/clothing/head/helmet/space/vox/civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjj" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjr" = ( +/obj/item/weapon/reagent_containers/food/snacks/twobread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jju" = ( +/obj/item/clothing/mask/smokable/cigarette/cigar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjH" = ( +/obj/item/clothing/under/solgov/service/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjI" = ( +/obj/item/weapon/reagent_containers/food/snacks/clownburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjK" = ( +/obj/item/weapon/storage/box/fluff/missy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjN" = ( +/obj/item/clothing/suit/chiton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjO" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb03, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jjW" = ( +/obj/structure/symbol/es, +/turf/simulated/fitness, +/area/survivalpod) +"jkh" = ( +/obj/item/weapon/storage/box/ambrosiadeus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jki" = ( +/obj/item/device/flashlight/color/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkk" = ( +/obj/item/projectile/beam/xray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jks" = ( +/obj/item/integrated_circuit/output/led/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkt" = ( +/obj/machinery/button/flasher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkv" = ( +/obj/item/brokenbug/spy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkw" = ( +/obj/structure/closet/secure_closet/engineering_chief_wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jky" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkJ" = ( +/obj/item/device/healthanalyzer/fluff/jiao_health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkN" = ( +/obj/item/weapon/circuitboard/drone_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jkQ" = ( +/mob/living/simple_mob/animal/passive/raccoon_ch{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jlp" = ( +/obj/item/integrated_circuit/logic/binary/gdlatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jls" = ( +/obj/item/weapon/gun/energy/taser/mounted/cyborg/flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jly" = ( +/obj/item/seeds/tomatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlz" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "23" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlB" = ( +/obj/item/ammo_magazine/clip/sks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlE" = ( +/obj/item/ammo_casing/a12g/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlG" = ( +/obj/item/weapon/card/id/event/polymorphic/itg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlI" = ( +/mob/living/simple_mob/slime/promethean{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jlN" = ( +/obj/item/clothing/under/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlO" = ( +/obj/item/weapon/rig/hazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlV" = ( +/obj/item/device/integrated_circuit_printer/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlY" = ( +/obj/item/capture_crystal/wendigo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jlZ" = ( +/obj/item/clothing/under/rank/psych/turtleneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmn" = ( +/obj/machinery/door/airlock/angled_bay/hatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmt" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmy" = ( +/obj/item/organ/internal/spleen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmC" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmE" = ( +/obj/item/weapon/storage/box/syndie_kit/space, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmF" = ( +/obj/item/clothing/under/rank/engineer/turtleneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmH" = ( +/obj/item/clothing/head/technomancer/master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmO" = ( +/obj/item/clothing/shoes/knight_costume/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jmW" = ( +/mob/living/simple_mob/vore/sect_drone{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jmX" = ( +/obj/item/weapon/gun/energy/taser/xeno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnb" = ( +/obj/item/weapon/reagent_containers/glass/bottle/peridaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jni" = ( +/obj/item/toy/plushie/borgplushie/medihound, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnj" = ( +/obj/item/weapon/reagent_containers/glass/paint/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jno" = ( +/obj/structure/sign/directions/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnw" = ( +/obj/item/weapon/disk/limb/zenghu_frost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnA" = ( +/obj/item/weapon/circuitboard/dormscontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnC" = ( +/obj/item/weapon/storage/box/explorerkeys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnD" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/shorty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnG" = ( +/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/joanrisu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnP" = ( +/obj/item/weapon/weldpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnR" = ( +/obj/item/weapon/plastique/seismic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnV" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/fries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnW" = ( +/obj/item/integrated_circuit/output/text_to_speech/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jnZ" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joa" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"joc" = ( +/obj/structure/handrail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jod" = ( +/obj/item/ammo_magazine/m16, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jof" = ( +/obj/item/clothing/suit/armor/pcarrier/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joi" = ( +/obj/item/weapon/reagent_containers/food/condiment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jom" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jon" = ( +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joo" = ( +/obj/item/weapon/gun/projectile/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jop" = ( +/obj/item/clothing/head/almach, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jor" = ( +/obj/structure/sign/flag/almach_p, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jox" = ( +/obj/item/clothing/suit/storage/vest/solgov/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joD" = ( +/obj/item/weapon/gun/energy/tommylaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joG" = ( +/obj/item/weapon/portable_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"joW" = ( +/obj/item/integrated_circuit/input/signaler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpb" = ( +/obj/item/clothing/under/away/patrol/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpc" = ( +/obj/item/integrated_circuit/input/microphone/sign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpj" = ( +/obj/item/clothing/accessory/ribbon/solgov/frontier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpn" = ( +/obj/item/clothing/head/beret/sec/navy/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpr" = ( +/obj/item/seeds/towermycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpw" = ( +/obj/item/weapon/reagent_containers/food/snacks/roburgerbig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpJ" = ( +/obj/structure/ghost_pod/manual/clegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpQ" = ( +/obj/structure/sign/department/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpT" = ( +/obj/item/device/suit_cooling_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jpU" = ( +/obj/item/clothing/suit/storage/fluff/modernfedcoat/modernfedsec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqf" = ( +/obj/item/clothing/ears/skrell/cloth_female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqj" = ( +/obj/item/clothing/gloves/ring/material/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqo" = ( +/obj/item/weapon/tank/jetpack/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqs" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqu" = ( +/obj/item/weapon/storage/firstaid/regular, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqI" = ( +/obj/item/weapon/gun/energy/soapenergy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqJ" = ( +/obj/item/weapon/material/kitchen/utensil/spoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqR" = ( +/obj/item/clothing/head/hardhat/firefighter/chief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqV" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqW" = ( +/obj/structure/largecrate/donksoftvendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jqZ" = ( +/obj/item/integrated_circuit/trig/sine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jro" = ( +/obj/structure/closet/crate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jrw" = ( +/obj/item/seeds/sunflowerseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jrA" = ( +/obj/item/clothing/head/tesh_hood/standard/black_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jrD" = ( +/mob/living/simple_mob/animal/space/alien{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jrG" = ( +/obj/item/weapon/gun/energy/gun/protector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jrK" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/queen/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jrM" = ( +/obj/item/weapon/circuitboard/pacman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jse" = ( +/obj/item/mecha_parts/chassis/janus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsj" = ( +/obj/machinery/door/airlock/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsn" = ( +/obj/item/latexballon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsx" = ( +/obj/item/clothing/shoes/mech_shoes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsy" = ( +/obj/item/clothing/head/tesh_hood/standard/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsz" = ( +/obj/item/clothing/suit/storage/hooded/hoodie/bluetrim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsB" = ( +/obj/item/weapon/reagent_containers/food/snacks/goma_dango, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsD" = ( +/obj/machinery/chem_master/condimaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jsZ" = ( +/obj/structure/sign/directions/telecomms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jti" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jto" = ( +/obj/item/clothing/accessory/storage/pouches/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtq" = ( +/obj/item/device/uav, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jts" = ( +/obj/item/seeds/nettleseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtu" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shoulder/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtz" = ( +/obj/machinery/atmospherics/pipe/tank/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtC" = ( +/obj/item/weapon/grenade/shooter/energy/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtL" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtM" = ( +/obj/item/weapon/melee/energy/axe/charge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtN" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/paracetamol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtO" = ( +/obj/item/weapon/reagent_containers/pill/imidazoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtP" = ( +/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jtW" = ( +/obj/structure/smolebuilding/warehouses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jui" = ( +/obj/item/weapon/material/fishing_net, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juj" = ( +/obj/item/weapon/card/id/cargo/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jun" = ( +/obj/structure/fence/post, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jur" = ( +/obj/machinery/suit_cycler/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juv" = ( +/obj/item/integrated_circuit/input/med_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juD" = ( +/obj/item/weapon/storage/box/syndie_kit/voidsuit/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juK" = ( +/obj/structure/closet/crate/secure/lawson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juT" = ( +/obj/mecha/working/ripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"juY" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvb" = ( +/obj/item/seeds, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvd" = ( +/obj/structure/smoleruins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvf" = ( +/obj/item/clothing/suit/bomb_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvt" = ( +/mob/living/simple_mob/vore/alienanimals/startreader{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jvC" = ( +/obj/item/clothing/accessory/wcoat/swvest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvD" = ( +/obj/item/weapon/pinpointer/shuttle/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvE" = ( +/obj/item/weapon/storage/rollingpapers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvL" = ( +/obj/item/weapon/card/id/syndicate/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvW" = ( +/obj/item/rig_module/chem_dispenser/injector/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jvY" = ( +/obj/item/clothing/under/dress/golddress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwb" = ( +/obj/item/ammo_magazine/m762/ext/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwc" = ( +/obj/machinery/hyperpad{ + dir = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwm" = ( +/obj/item/weapon/rig/military/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwq" = ( +/obj/structure/lightpost/festive/unlit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwu" = ( +/obj/item/clothing/under/rank/scientist/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwv" = ( +/mob/living/simple_mob/animal/sif/kururak/leader{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jwx" = ( +/obj/item/stack/material/algae, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwE" = ( +/obj/item/clothing/head/maangtikka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwM" = ( +/obj/item/clothing/mask/shark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwT" = ( +/obj/item/weapon/rcd_ammo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jwV" = ( +/obj/machinery/mineral/processing_unit_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxt" = ( +/obj/machinery/gateway/brass{ + dir = 9 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxG" = ( +/obj/item/clothing/mask/chewable/tobacco/cheap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxN" = ( +/obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxO" = ( +/obj/machinery/vending/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxQ" = ( +/obj/item/clothing/under/yw/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxS" = ( +/obj/item/weapon/disk/limb/morpheus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxV" = ( +/obj/item/clothing/suit/storage/explorer/crew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxX" = ( +/obj/item/toy/mecha/clarke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jxY" = ( +/obj/item/clothing/suit/storage/teshari/cloak/fluff/strix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jya" = ( +/obj/item/clothing/accessory/armband/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyu" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyy" = ( +/obj/item/weapon/storage/backpack/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyJ" = ( +/obj/item/weapon/book/manual/standard_operating_procedure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyM" = ( +/obj/item/weapon/pen/crayon/marker/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyN" = ( +/obj/item/clothing/suit/storage/marshal_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyP" = ( +/mob/living/simple_mob/animal/passive/honkpet{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jyQ" = ( +/obj/item/clothing/accessory/solgov/rank/ec/officer/o6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyT" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyW" = ( +/obj/item/weapon/book/manual/barman_recipes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jyZ" = ( +/obj/item/clothing/shoes/magboots/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzb" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzc" = ( +/obj/item/weapon/deck/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzd" = ( +/obj/item/weapon/ore/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzg" = ( +/obj/item/device/personal_shield_generator/belt/bruteburn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzh" = ( +/obj/structure/plushie/carp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzm" = ( +/obj/structure/flight_right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzv" = ( +/obj/item/weapon/gun/projectile/automatic/glock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzz" = ( +/obj/item/weapon/implanter/reagent_generator/roiz/yuki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzE" = ( +/obj/item/weapon/rig/ce/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzG" = ( +/obj/item/weapon/spellbook/oneuse/mindswap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jzH" = ( +/mob/living/simple_mob/mechanical/viscerator{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jzS" = ( +/obj/item/weapon/technomancer_core/recycling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAe" = ( +/mob/living/simple_mob/slime/xenobio/metal{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jAg" = ( +/obj/item/clothing/head/hood/toggleable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAm" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAu" = ( +/obj/item/clothing/head/beret/solgov/sifguard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAv" = ( +/obj/item/weapon/gun/energy/taser/mounted/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAx" = ( +/obj/item/clothing/head/dress/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAC" = ( +/obj/item/clothing/glasses/omnihud/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAD" = ( +/obj/item/ammo_magazine/m16/patriot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAF" = ( +/obj/item/clothing/under/dress/maid/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAI" = ( +/obj/item/device/fluff/id_kit_ivy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAO" = ( +/obj/item/weapon/hand_tele, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAU" = ( +/obj/item/weapon/material/knife/tacknife/combatknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jAY" = ( +/obj/item/flag/almach_a/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBd" = ( +/obj/item/weapon/reagent_containers/food/snacks/yellowcurry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBe" = ( +/obj/structure/closet/secure_closet/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBm" = ( +/obj/machinery/syndicate_beacon/virgo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBs" = ( +/obj/item/clothing/suit/space/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBB" = ( +/obj/item/device/megaphone/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBE" = ( +/obj/machinery/door/airlock/angled_bay/hatch/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBF" = ( +/obj/item/toy/plushie/kitten, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBQ" = ( +/obj/structure/cult/pylon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBU" = ( +/obj/item/clothing/gloves/gauntlets/rig/bayeng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBW" = ( +/obj/item/clothing/suit/suspenders, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jBY" = ( +/obj/item/stack/tile/floor/eris/white/gray_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCf" = ( +/obj/structure/bed/double/weaversilk_nest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCj" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCo" = ( +/obj/structure/loot_pile/maint/trash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCp" = ( +/obj/machinery/hyperpad{ + dir = 5 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCq" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCS" = ( +/obj/item/weapon/storage/fancy/cigarettes/killthroat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jCV" = ( +/obj/item/integrated_circuit/arithmetic/round, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDa" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/lunacake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDj" = ( +/obj/structure/salvageable/data, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDo" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDp" = ( +/obj/machinery/door/airlock/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDz" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/zeng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDA" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDC" = ( +/obj/item/ammo_magazine/ak74/plum/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDH" = ( +/obj/item/weapon/dnainjector/insulation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDM" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeyburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDO" = ( +/obj/item/weapon/rig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDP" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/cargoslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jDU" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/tonic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDY" = ( +/obj/item/weapon/telecube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jDZ" = ( +/obj/item/clothing/under/pants/altevian/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEe" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEf" = ( +/obj/structure/sign/warning/server_room, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEy" = ( +/obj/item/weapon/reagent_containers/pill/cyanide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEz" = ( +/obj/item/clothing/accessory/medal/gold/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEK" = ( +/obj/structure/closet/acloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEQ" = ( +/obj/item/toy/russian_revolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jES" = ( +/obj/item/stack/tile/floor/eris/dark/techfloor_grid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jET" = ( +/obj/item/clothing/head/beret/corp/saare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jEY" = ( +/obj/structure/closet/secure_closet/medical_wall/pills, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFd" = ( +/obj/item/weapon/reagent_containers/food/snacks/fishburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFe" = ( +/obj/item/weapon/card/id/platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFj" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFn" = ( +/obj/item/stack/tile/wmarble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFu" = ( +/obj/item/clothing/accessory/medal/gold/fluff/lucina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFz" = ( +/obj/item/weapon/reagent_containers/food/snacks/pillbugempty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFB" = ( +/obj/item/clothing/head/caphat/hop/beret/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFE" = ( +/obj/item/device/laser_pointer/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFF" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFH" = ( +/obj/item/weapon/reagent_containers/food/condiment/carton/flour/rustic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFP" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jFS" = ( +/obj/item/clothing/accessory/solgov/specialty/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGa" = ( +/obj/item/weapon/pen/crayon/marker/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGc" = ( +/obj/item/weapon/card/id/engineering/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGd" = ( +/obj/item/integrated_circuit/input/colorpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGh" = ( +/mob/living/simple_mob/mobs_monsters/clowns/blob{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jGi" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/robo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGy" = ( +/obj/item/weapon/gun/projectile/revolver/lombardi/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGA" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesymash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGB" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGD" = ( +/obj/item/trash/driedfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGE" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/square, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGI" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGJ" = ( +/obj/item/weapon/card/id/fluff/xennith, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGK" = ( +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGQ" = ( +/obj/item/clothing/under/solgov/utility/fleet/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGS" = ( +/obj/item/ammo_magazine/mp5mag/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGU" = ( +/obj/structure/sign/signnew/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGW" = ( +/obj/item/clothing/head/helmet/space/void/hev, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jGZ" = ( +/obj/structure/largecrate/animal/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHb" = ( +/obj/item/clothing/suit/storage/trench/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHt" = ( +/obj/item/weapon/grenade/flashbang/cluster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHv" = ( +/obj/item/ammo_magazine/m9mm/vp70/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHz" = ( +/obj/item/weapon/refill_cartridge/multitype/specialty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHD" = ( +/obj/structure/loot_pile/mecha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHE" = ( +/obj/item/clothing/accessory/permit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHG" = ( +/obj/item/weapon/reagent_containers/glass/paint/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHU" = ( +/obj/item/clothing/under/color/ranger/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHV" = ( +/obj/item/clothing/shoes/magboots/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jHX" = ( +/obj/structure/bed/chair/bay/comfy/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jId" = ( +/obj/item/sniper_rifle_part/stock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIe" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIq" = ( +/obj/item/weapon/gun/energy/darkmatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIr" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIu" = ( +/obj/structure/largecrate/animal/otie/guardmutant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIv" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/alkysine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIw" = ( +/obj/item/weapon/soap/grey_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIz" = ( +/obj/item/weapon/aiModule/prototypeEngineOffline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIA" = ( +/obj/item/clothing/suit/security/navyhos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIM" = ( +/obj/item/clothing/under/rank/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIV" = ( +/obj/structure/sign/deck/fourth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jIZ" = ( +/obj/structure/table/bench/sifwooden/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJa" = ( +/obj/item/clothing/shoes/hitops, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJi" = ( +/obj/item/clothing/accessory/solgov/department/supply/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJj" = ( +/obj/item/clothing/accessory/sweater/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJk" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/lucyprice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJo" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJq" = ( +/obj/item/weapon/reagent_containers/food/snacks/grub_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJt" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJD" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJE" = ( +/mob/living/simple_mob/mechanical/cyber_horror/corgi{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jJF" = ( +/obj/item/clothing/under/teshari/undercoat/standard/red_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJO" = ( +/obj/item/clothing/under/rippedpunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJT" = ( +/obj/item/weapon/storage/box/fluff/samantha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJX" = ( +/obj/item/weapon/card/id/centcom/ERT, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jJY" = ( +/obj/item/clothing/head/tesh_hood/standard/black_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKa" = ( +/obj/item/weapon/rig/ert/assetprotection/antiareli, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKg" = ( +/obj/item/clothing/gloves/arm_guard/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKh" = ( +/obj/item/weapon/circuitboard/mecha/honker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKi" = ( +/obj/item/weapon/reagent_containers/food/snacks/blackpudding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKk" = ( +/obj/item/resonator/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKl" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/handblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKt" = ( +/obj/item/weapon/bedsheet/iandouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKu" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/sks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKv" = ( +/obj/item/clothing/suit/storage/explorer/medical/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKM" = ( +/obj/item/clothing/head/wiggler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKN" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKO" = ( +/obj/item/weapon/circuitboard/nav, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKU" = ( +/obj/item/weapon/dnainjector/xraymut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jKW" = ( +/obj/item/weapon/paper_bundle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLa" = ( +/obj/item/clothing/shoes/sneakersblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLb" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLj" = ( +/obj/machinery/teleport/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLp" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/patron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLB" = ( +/obj/item/ammo_casing/microbattery/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLH" = ( +/obj/machinery/vending/wardrobe/chemdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLO" = ( +/obj/item/clothing/mask/paper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLP" = ( +/obj/item/weapon/pen/robopen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLR" = ( +/obj/item/toy/plushie/marble_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jLS" = ( +/obj/item/ammo_magazine/ammo_box/b12g/flechette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMf" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/yellow_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMh" = ( +/obj/item/ammo_magazine/box/emp/b45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMk" = ( +/obj/item/clothing/accessory/jacket/altevian/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMm" = ( +/obj/item/clothing/shoes/athletic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMx" = ( +/obj/item/weapon/reagent_containers/food/snacks/soup/onion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMB" = ( +/obj/structure/fence/cut/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMD" = ( +/obj/item/clothing/head/pin/bow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMK" = ( +/obj/item/weapon/cmo_disk_holder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMO" = ( +/obj/structure/sign/level/three, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMP" = ( +/obj/item/weapon/reagent_containers/pill/arithrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMQ" = ( +/obj/item/clothing/suit/space/vox/civ/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jMT" = ( +/obj/item/weapon/cartridge/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNb" = ( +/obj/item/clothing/under/suit_jacket/charcoal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNh" = ( +/obj/item/stack/material/fiber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNn" = ( +/obj/item/rig_module/device/healthscanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNo" = ( +/obj/item/weapon/storage/bag/circuits/mini/memory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNr" = ( +/obj/item/weapon/rcd/debug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNA" = ( +/obj/item/clothing/under/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNB" = ( +/obj/item/weapon/storage/belt/utility/fluff/vulpine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNQ" = ( +/obj/structure/door_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNU" = ( +/obj/item/clothing/accessory/medal/silver/fluff/kaeninmedal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNV" = ( +/obj/item/clothing/suit/storage/toggle/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jNX" = ( +/mob/living/simple_mob/animal/space/bats/cult/strong{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jNZ" = ( +/obj/item/clothing/accessory/badge/corporate_tag/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOd" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/iaa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOv" = ( +/obj/machinery/power/thermoregulator/cryogaia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOH" = ( +/obj/structure/closet/secure_closet/engineering_electrical/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOO" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOP" = ( +/obj/item/clothing/under/rank/trek/command/next, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOV" = ( +/obj/item/clothing/suit/armor/pcarrier/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jOW" = ( +/obj/item/weapon/reagent_containers/food/snacks/human/kabob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPf" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/hat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jPj" = ( +/obj/item/clothing/suit/space/void/engineering/kate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPl" = ( +/obj/item/clothing/under/undersuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPt" = ( +/obj/item/clothing/accessory/medal/silver/fluff/dominemedal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPx" = ( +/obj/item/weapon/gun/energy/crossbow/largecrossbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPD" = ( +/obj/item/clothing/under/cheongsam/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPM" = ( +/obj/item/modular_computer/laptop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPN" = ( +/obj/machinery/mineral/stacking_machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPR" = ( +/obj/item/mecha_parts/part/ripley_right_arm, +/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPS" = ( +/obj/item/clothing/shoes/hitops/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPU" = ( +/obj/item/weapon/flame/candle/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jPZ" = ( +/obj/item/clothing/accessory/badge/idbadge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jQb" = ( +/obj/item/ammo_magazine/mglock9mm/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jQc" = ( +/obj/item/clothing/suit/storage/trench/fluff/kelplaguecoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jQf" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jQH" = ( +/obj/item/clothing/under/rank/warden/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRf" = ( +/mob/living/simple_mob/animal/passive/fish/murkin, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"jRg" = ( +/obj/item/weapon/chaoscake_layer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRj" = ( +/obj/machinery/gateway/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRk" = ( +/obj/item/clothing/shoes/slippers/worn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRr" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRt" = ( +/obj/structure/closet/crate/large/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRx" = ( +/obj/item/clothing/suit/lightrig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRA" = ( +/obj/structure/bed/chair/sofa/corner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/decaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRI" = ( +/obj/item/weapon/reagent_containers/food/snacks/honeybun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRK" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag/o9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRN" = ( +/obj/item/weapon/reagent_containers/food/snacks/cubancarp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jRT" = ( +/obj/item/weapon/gun/projectile/p92x/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSi" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSm" = ( +/obj/structure/table/fancyblack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSn" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSt" = ( +/obj/item/mecha_parts/component/electrical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSw" = ( +/mob/living/simple_mob/humanoid/possessed/merc{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jSx" = ( +/obj/structure/bed/chair/sofa/purp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSz" = ( +/obj/structure/closet/crate/hydroponics/prespawned, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSA" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSE" = ( +/obj/structure/closet/secure_closet/guncabinet/excursion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSH" = ( +/obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSL" = ( +/obj/item/weapon/gun/energy/floragun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jST" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jSU" = ( +/obj/item/clothing/head/pilot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSV" = ( +/obj/item/weapon/flame/candle/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSX" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jSZ" = ( +/obj/item/clothing/accessory/tie/horrible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTb" = ( +/obj/item/device/mmi/inert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTg" = ( +/obj/item/clothing/suit/armor/pcarrier/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTm" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTr" = ( +/obj/item/weapon/spell/construct/spawner/agonizing_sphere, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTu" = ( +/mob/living/simple_mob/slime/xenobio/cerulean{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jTv" = ( +/obj/item/weapon/reagent_containers/food/drinks/bluespace_coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTw" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/otie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTz" = ( +/obj/item/weapon/plantspray/pests/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jTO" = ( +/obj/item/clothing/glasses/tajblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUd" = ( +/obj/item/ammo_magazine/ar10/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUh" = ( +/obj/machinery/mineral/stacking_unit_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUl" = ( +/obj/item/clothing/under/modjump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUs" = ( +/obj/item/weapon/tool/screwdriver/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUC" = ( +/obj/item/clothing/under/wedding/floofdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jUM" = ( +/obj/machinery/vending/tool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVc" = ( +/obj/structure/prop/war/tgmc_30mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVd" = ( +/obj/item/organ/internal/brain/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVf" = ( +/obj/item/clothing/head/hood/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVh" = ( +/obj/structure/closet/syndicate/personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVj" = ( +/obj/structure/closet/crate/centauri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVm" = ( +/obj/item/stack/tile/floor/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVn" = ( +/obj/item/clothing/under/haltertop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVq" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVv" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVG" = ( +/obj/structure/sign/warning/falling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVJ" = ( +/obj/item/weapon/computer_hardware/hard_drive/portable/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVM" = ( +/obj/item/weapon/storage/backpack/satchel/gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVN" = ( +/obj/item/clothing/head/helmet/space/void/pilot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVP" = ( +/obj/item/weapon/lampshade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jVT" = ( +/obj/item/weapon/gun/energy/gun/generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWc" = ( +/obj/item/clothing/suit/armor/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWo" = ( +/obj/item/device/assembly/signaler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWr" = ( +/obj/item/clothing/head/helmet/space/void/security/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWu" = ( +/obj/structure/sign/levels/pool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWB" = ( +/obj/item/clothing/under/rank/nullsuit/civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWE" = ( +/obj/structure/outcrop/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWJ" = ( +/obj/item/weapon/gun/magnetic/railgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWO" = ( +/obj/item/clothing/suit/fluff/blue_trimmed_coat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWQ" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/pkm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWY" = ( +/obj/item/weapon/makeover, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jWZ" = ( +/obj/machinery/meter/turf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXd" = ( +/obj/item/projectile/beam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXg" = ( +/obj/item/weapon/implanter/reagent_generator/savannah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXq" = ( +/obj/structure/micro_tunnel/magic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXu" = ( +/obj/machinery/vending/snix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXy" = ( +/obj/item/instrument/keytar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXz" = ( +/mob/living/simple_mob/mobs_monsters/clowns/perm{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jXC" = ( +/obj/item/weapon/disk/species/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXE" = ( +/obj/machinery/computer/drone_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXJ" = ( +/obj/item/weapon/rig/combat/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXL" = ( +/obj/item/weapon/gun/energy/gun/eluger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXN" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/half, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXP" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/jager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXS" = ( +/obj/item/weapon/gun/projectile/deagle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXW" = ( +/obj/item/weapon/cartridge/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jXZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/decaf_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYb" = ( +/obj/machinery/door/airlock/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYg" = ( +/obj/item/device/bluespaceradio/talon_prelinked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYh" = ( +/obj/item/trash/tastybread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYi" = ( +/obj/structure/prop/fake_ai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYk" = ( +/obj/item/clothing/under/corp/centauri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYn" = ( +/mob/living/simple_mob/mechanical/viscerator/raider{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jYq" = ( +/obj/item/ammo_casing/a57, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYF" = ( +/mob/living/simple_mob/mechanical/mecha/combat/marauder{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jYM" = ( +/obj/item/weapon/storage/vore_egg/owlpellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYN" = ( +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYT" = ( +/obj/item/clothing/accessory/bracelet/material/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jYU" = ( +/obj/effect/map_effect/perma_light/brighter{ + light_range = 9999 + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"jZk" = ( +/obj/item/integrated_circuit/arithmetic/pi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZl" = ( +/obj/item/seeds/brownmold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZn" = ( +/obj/item/clothing/under/rank/security2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZr" = ( +/obj/machinery/firealarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZz" = ( +/obj/item/weapon/firework_star/weather/blizzard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZC" = ( +/obj/item/weapon/pen/crayon/marker/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"jZN" = ( +/obj/mecha/combat/fighter/gunpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kaj" = ( +/obj/machinery/honey_extractor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kak" = ( +/obj/item/rig_module/fabricator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kal" = ( +/obj/item/weapon/card/id/assistant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kam" = ( +/obj/item/weapon/stock_parts/console_screen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kas" = ( +/obj/item/weapon/implant/reagent_generator/egg/veryslowlowcap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kay" = ( +/obj/machinery/shuttle_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kaI" = ( +/obj/item/clothing/suit/storage/puffyred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kaJ" = ( +/obj/item/clothing/head/soft/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kaP" = ( +/obj/item/clothing/under/rank/talon/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kaY" = ( +/obj/item/weapon/gun/projectile/automatic/toy/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbe" = ( +/obj/structure/sign/poster/custom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbu" = ( +/obj/item/clothing/accessory/storage/webbing/pilot2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbz" = ( +/obj/item/weapon/rig/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbA" = ( +/mob/living/simple_mob/slime/feral{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kbB" = ( +/obj/item/clothing/accessory/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbC" = ( +/obj/item/weapon/reagent_containers/food/snacks/candy/gummy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbH" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbI" = ( +/obj/item/weapon/technomancer_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbO" = ( +/obj/item/weapon/cartridge/signal/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kbY" = ( +/obj/item/clothing/head/helmet/space/vox/civ/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcb" = ( +/obj/structure/sign/levels/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcd" = ( +/obj/item/clothing/suit/bio_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcg" = ( +/obj/item/clothing/shoes/swimmingfins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcl" = ( +/obj/structure/closet/crate/mimic/closet/dangerous, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kco" = ( +/obj/item/pipe/binary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcB" = ( +/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcD" = ( +/obj/item/clothing/head/greenbandana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcE" = ( +/obj/item/clothing/gloves/ranger/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcM" = ( +/obj/structure/safe/floor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcT" = ( +/obj/item/weapon/storage/box/fancy/chewables/tobacco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcU" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg_pancake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kcW" = ( +/obj/item/weapon/storage/vore_egg/escapepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdf" = ( +/obj/item/weapon/implantpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdq" = ( +/obj/item/clothing/head/technomancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kds" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdy" = ( +/obj/item/weapon/storage/box/fluff/emoticon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdz" = ( +/obj/item/weapon/storage/fancy/whitecandle_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdF" = ( +/obj/item/weapon/banner/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdK" = ( +/obj/item/weapon/storage/box/mousetraps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kdS" = ( +/obj/item/clothing/under/rank/nullsuit/cmd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keb" = ( +/obj/item/clothing/suit/storage/vest/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ked" = ( +/obj/item/clothing/suit/storage/miljacket/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kef" = ( +/obj/item/clothing/under/fluff/eioni_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kek" = ( +/obj/item/clothing/head/helmet/space/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keq" = ( +/obj/item/weapon/circuitboard/firealarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keu" = ( +/obj/item/weapon/storage/box/casino/foamcrossbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kez" = ( +/obj/item/clothing/head/beret/corp/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keA" = ( +/obj/item/stack/tile/floor/eris/dark/bluecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keC" = ( +/obj/structure/bed/chair/bay/chair/padded/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keD" = ( +/obj/item/weapon/computer_hardware/hard_drive/cluster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keE" = ( +/obj/structure/sign/warning/vent_port, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keH" = ( +/obj/machinery/button/neonsign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keI" = ( +/obj/structure/filingcabinet/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keJ" = ( +/obj/item/weapon/storage/mrebag/side/menu10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keL" = ( +/obj/item/weapon/spell/spawner/fire_blast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keR" = ( +/obj/item/clothing/under/dress/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keT" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/almp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keU" = ( +/obj/item/clothing/accessory/medal/nobel_science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keW" = ( +/obj/item/weapon/paper/awaygate/snowfield/evacuation_order, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"keX" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfa" = ( +/obj/machinery/vitals_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfr" = ( +/obj/machinery/vending/loadout/clothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfz" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfB" = ( +/obj/item/weapon/tank/phoron/pressurized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfD" = ( +/obj/item/weapon/circuitboard/mass_driver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfL" = ( +/obj/item/toy/bouquet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfN" = ( +/obj/item/weapon/grenade/confetti/party_ball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfP" = ( +/obj/item/clothing/head/fedora/fluff/jemli, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfQ" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kfS" = ( +/obj/item/clothing/suit/storage/teshari/cloak/fluff/kita, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kga" = ( +/obj/item/clothing/head/helmet/space/void/atmos/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgc" = ( +/obj/item/integrated_circuit/output/screen/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgd" = ( +/obj/item/weapon/implanter/adrenalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgk" = ( +/obj/item/stack/tile/floor/eris/steel/gray_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgm" = ( +/obj/item/weapon/firework_star/weather/fog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgr" = ( +/obj/item/weapon/pen/fountain9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgu" = ( +/obj/item/weapon/reagent_containers/food/snacks/soydope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgC" = ( +/obj/item/weapon/handcuffs/cable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgD" = ( +/obj/item/weapon/pen/blade/fountain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kgE" = ( +/mob/living/simple_mob/slime/xenobio/emerald{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"khb" = ( +/obj/machinery/door/airlock/vault/bolted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khk" = ( +/obj/item/clothing/gloves/combat/knight/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khl" = ( +/obj/item/weapon/cell/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khm" = ( +/obj/item/clothing/accessory/badge/holo/cord, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khp" = ( +/obj/item/mecha_parts/part/gygax_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khs" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khA" = ( +/obj/item/clothing/head/pilot_vr/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khF" = ( +/obj/item/weapon/gun/energy/stunrevolver/vintage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"khV" = ( +/obj/item/clothing/under/suit_jacket/burgundy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kif" = ( +/obj/item/clothing/under/ascetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kim" = ( +/mob/living/simple_mob/vore/pakkun/snapdragon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kiq" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kir" = ( +/obj/structure/prop/blackbox/gecko_wreck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kis" = ( +/obj/item/weapon/paper/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kit" = ( +/obj/item/clothing/gloves/fluff/amara_gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kiz" = ( +/obj/structure/sign/flag/gap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kiC" = ( +/obj/item/device/modkit_conversion/fluff/sheri_rig_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kiL" = ( +/obj/item/clothing/under/dress/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kiX" = ( +/obj/structure/noticeboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjd" = ( +/obj/item/integrated_circuit/passive/power/metabolic_siphon/synthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kje" = ( +/obj/machinery/librarycomp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjf" = ( +/obj/item/clothing/under/rank/bartender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjg" = ( +/obj/item/trash/fishegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kji" = ( +/obj/item/clothing/head/beret/solgov/sifguard/patrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjt" = ( +/obj/item/clothing/under/johnny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjA" = ( +/obj/machinery/gear_dispenser/randomweapons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjK" = ( +/obj/item/weapon/storage/box/lights/tubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjO" = ( +/obj/item/clothing/glasses/omnihud/visor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjQ" = ( +/obj/item/clothing/suit/storage/star, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kjZ" = ( +/obj/item/seeds/eggyplant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkb" = ( +/obj/item/stack/emptysandbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkc" = ( +/obj/machinery/power/tesla_coil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkh" = ( +/obj/item/weapon/deck/cards, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkv" = ( +/obj/item/clothing/accessory/solgov/department/security/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkz" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkK" = ( +/obj/item/stack/tile/floor/eris/dark/violetcorener, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkU" = ( +/obj/item/weapon/storage/backpack/dufflebag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kkV" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shoulder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kle" = ( +/obj/item/device/encryptionkey/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klf" = ( +/obj/item/clothing/suit/kimono/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klm" = ( +/obj/item/clothing/under/pants/youngfolksjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kls" = ( +/obj/item/weapon/implanter/reagent_generator/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klv" = ( +/obj/item/weapon/refill_cartridge/autoname/food/fitness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klz" = ( +/obj/item/weapon/material/ashtray/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klD" = ( +/obj/structure/sign/scenery/fakefireaxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klI" = ( +/obj/item/weapon/reagent_containers/food/snacks/ant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klJ" = ( +/obj/item/clothing/under/skirt/colorable/jumperdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"klX" = ( +/obj/item/weapon/implant/freedom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmo" = ( +/obj/item/clothing/head/fancy_crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmu" = ( +/mob/living/silicon/robot/syndicate/mechanist, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kmC" = ( +/obj/item/weapon/grenade/shooter/energy/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmF" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmH" = ( +/obj/item/device/kit/paint/ripley/flames_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmM" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ryetalyn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmR" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmV" = ( +/obj/structure/closet/crate/secure/grayson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kmX" = ( +/obj/structure/closet/crate/secure/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knc" = ( +/obj/item/clothing/under/wetsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kne" = ( +/obj/item/weapon/reagent_containers/food/snacks/jupiter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knh" = ( +/obj/machinery/seed_extractor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kni" = ( +/obj/item/clothing/suit/storage/miljacket/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kno" = ( +/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knt" = ( +/obj/item/clothing/head/helmet/space/void/autolok, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knx" = ( +/obj/item/clothing/under/rank/security/corp/fluff/nika, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kny" = ( +/obj/item/weapon/gun/energy/gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knD" = ( +/obj/item/weapon/rig/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knE" = ( +/obj/item/clothing/suit/storage/snowsuit/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knG" = ( +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knI" = ( +/obj/item/weapon/reagent_containers/glass/bottle/hyronalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knM" = ( +/obj/item/seeds/eggplantseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knN" = ( +/obj/item/sniper_rifle_part/trigger_group, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knO" = ( +/obj/item/weapon/storage/pill_bottle/paracetamol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knQ" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"knV" = ( +/obj/item/clothing/under/rank/security/navyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kob" = ( +/obj/item/weapon/handcuffs/cable/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koc" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e8_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koe" = ( +/obj/item/seeds/ghostchiliseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kol" = ( +/obj/item/clothing/head/ushanka/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koq" = ( +/obj/item/toy/mecha/durand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kou" = ( +/obj/item/clothing/suit/armor/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kox" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/engie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koy" = ( +/obj/item/weapon/storage/quickdraw/syringe_case/clonemed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koF" = ( +/obj/item/weapon/reagent_containers/pill/alkysine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koG" = ( +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koI" = ( +/obj/item/clothing/accessory/solgov/department/command/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koK" = ( +/obj/item/clothing/mask/muzzle/tape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koP" = ( +/obj/item/ammo_magazine/ak74/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koQ" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koT" = ( +/obj/structure/prop/machine/nt_obelisk/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"koV" = ( +/obj/item/weapon/circuitboard/mecha/honker/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpc" = ( +/obj/item/clothing/glasses/sunglasses/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpf" = ( +/obj/item/mecha_parts/mecha_equipment/generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpw" = ( +/obj/item/integrated_circuit/memory/tiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpy" = ( +/obj/item/clothing/head/boaterhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpG" = ( +/obj/item/clothing/shoes/galoshes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpK" = ( +/obj/item/weapon/technomancer_catalog/apprentice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpM" = ( +/obj/machinery/computer/specops_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpW" = ( +/obj/item/weapon/book/custom_library/reference/securityguidelines, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kpY" = ( +/obj/item/poster/custom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kql" = ( +/obj/item/clothing/suit/unathi/robe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqm" = ( +/obj/item/weapon/stock_parts/matter_bin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqo" = ( +/obj/item/robot_parts/robot_component/actuator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqr" = ( +/obj/item/clothing/under/pj/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqz" = ( +/obj/item/toy/figure/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqF" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqG" = ( +/obj/machinery/button/remote/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqL" = ( +/obj/item/organ/internal/heart/machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kqO" = ( +/obj/item/device/paicard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kri" = ( +/obj/item/weapon/stock_parts/subspace/sub_filter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krm" = ( +/obj/structure/sign/warning/deathsposal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krn" = ( +/obj/structure/closet/walllocker_double/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krp" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kru" = ( +/obj/item/clothing/under/teshari/smock/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krx" = ( +/obj/item/weapon/card/id/civilian/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kry" = ( +/obj/item/clothing/under/swimsuit/stripper/mankini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krD" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krG" = ( +/obj/item/weapon/storage/belt/fannypack/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krH" = ( +/obj/item/clothing/accessory/maid_neck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krJ" = ( +/obj/structure/sign/department/miner_dock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krN" = ( +/obj/item/weapon/rig/pmc/medical/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krP" = ( +/obj/item/seeds/limeseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"krY" = ( +/obj/item/weapon/rig/ch/precursor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ksj" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ksO" = ( +/obj/machinery/porta_turret/stationary/CIWS, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ksP" = ( +/obj/item/device/mmi/inert/ai_remote, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ksX" = ( +/obj/item/mecha_parts/component/armor/lightweight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktb" = ( +/obj/item/device/assembly/timer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktd" = ( +/obj/structure/barricade/cutout/monky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kth" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/white_caique, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ktu" = ( +/obj/item/slime_cube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktv" = ( +/obj/item/clothing/mask/dolphin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktA" = ( +/obj/item/ammo_casing/a545/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktC" = ( +/obj/item/weapon/aiModule/syndicate_override, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktF" = ( +/obj/item/stack/tile/wood/tile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktM" = ( +/obj/item/device/nif/authentic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ktN" = ( +/obj/item/weapon/disk/limb/dsi_akula, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kup" = ( +/obj/item/weapon/fuel_assembly/supermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kur" = ( +/obj/item/clothing/under/hazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuw" = ( +/obj/item/mecha_parts/component/actuator/hispeed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuA" = ( +/obj/item/rig_module/rescue_pharm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuB" = ( +/obj/item/clothing/suit/storage/toggle/tesharicoatwhite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuH" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuJ" = ( +/obj/item/weapon/bedsheet/mimedouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuO" = ( +/obj/item/weapon/forensics/sample_kit/powder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuT" = ( +/obj/item/ammo_magazine/m9mmp90/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuX" = ( +/obj/item/weapon/digestion_remains/ribcage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kuY" = ( +/obj/item/seeds/soyaseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kva" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/maps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvf" = ( +/obj/item/weapon/flame/lighter/zippo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvm" = ( +/obj/item/weapon/rig/pmc/engineer/grey/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvz" = ( +/obj/item/weapon/storage/box/emps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvB" = ( +/obj/structure/closet/secure_closet/CMO_wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvC" = ( +/obj/item/ammo_magazine/clip/c12g, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvS" = ( +/obj/structure/closet/crate/veymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvW" = ( +/obj/item/clothing/suit/armor/combat/crusader_explo/FM, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvY" = ( +/obj/structure/filingcabinet/filingcabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kvZ" = ( +/obj/machinery/door/firedoor/glass/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwg" = ( +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwh" = ( +/obj/item/clothing/under/wedding/bride_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwj" = ( +/obj/item/toy/figure/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwm" = ( +/obj/item/weapon/digestion_remains/skull/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwr" = ( +/mob/living/simple_mob/animal/space/tree{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kwv" = ( +/obj/item/weapon/card/id/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwx" = ( +/obj/item/glass_jar/fish/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwH" = ( +/mob/living/simple_mob/animal/giant_spider/tunneler/fast{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kwJ" = ( +/obj/item/clothing/under/rank/nullsuit/sci/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwM" = ( +/obj/structure/closet/secure_closet/egg/special, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwN" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "8" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwP" = ( +/obj/item/stack/tile/floor/eris/steel/brown_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kwU" = ( +/obj/item/weapon/firstaid_arm_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxd" = ( +/obj/item/weapon/storage/briefcase/bookbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxj" = ( +/obj/item/weapon/gun/energy/soapenergy/gaussrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxq" = ( +/obj/item/ammo_magazine/ak74/plum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxs" = ( +/obj/item/clothing/under/corp/kaleidoscope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxx" = ( +/obj/item/clothing/accessory/solgov/department/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxz" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxC" = ( +/obj/item/clothing/under/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxE" = ( +/obj/item/clothing/gloves/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxM" = ( +/obj/item/clothing/accessory/armor/tag/pcrc/fluff/saur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxN" = ( +/obj/item/stack/tile/floor/techmaint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxT" = ( +/obj/machinery/cryopod/robot/door/dorms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxV" = ( +/obj/item/clothing/under/color/darkblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kxX" = ( +/obj/machinery/power/smes/buildable/power_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kya" = ( +/obj/item/ammo_casing/a57/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyo" = ( +/obj/item/weapon/stock_parts/subspace/amplifier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyw" = ( +/obj/item/clothing/accessory/material/makeshift/legguards, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyC" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyF" = ( +/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3/axis/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyR" = ( +/obj/vehicle/train/rover/engine/dunebuggy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyS" = ( +/obj/item/weapon/tool/wirecutters/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kyX" = ( +/obj/item/clothing/under/sexybunny_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kze" = ( +/obj/item/clothing/head/fedora/panama, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzi" = ( +/obj/machinery/icecream_vat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzr" = ( +/mob/living/simple_mob/vore/woof/hostile/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kzs" = ( +/obj/item/weapon/storage/vore_egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzx" = ( +/obj/item/integrated_circuit/input/atmo_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzA" = ( +/obj/machinery/the_singularitygen/tesla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzE" = ( +/obj/item/clothing/head/hood/winter/snowsuit/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzH" = ( +/obj/item/weapon/storage/box/pillbottles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzL" = ( +/obj/item/weapon/fluff/injector/numb_bite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzQ" = ( +/obj/item/weapon/disk/limb/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzS" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/dankpocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kzY" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAa" = ( +/obj/item/weapon/aiModule/guard_dog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAe" = ( +/obj/item/weapon/holo/esword/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAj" = ( +/obj/item/toy/plushie/squid/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAk" = ( +/obj/item/weapon/reagent_containers/glass/bottle/vermicetol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAo" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAE" = ( +/obj/item/clothing/shoes/boots/winter/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAF" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAG" = ( +/obj/item/clothing/ears/earmuffs/headphones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAL" = ( +/mob/living/simple_mob/slime/xenobio/amber{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kAM" = ( +/obj/item/clothing/shoes/flats/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAP" = ( +/obj/item/toy/plushie/goose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kAV" = ( +/obj/item/weapon/disk/tech_disk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBe" = ( +/obj/item/weapon/implanter/fluff/coda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBy" = ( +/obj/item/weapon/rig/breacher/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBB" = ( +/obj/item/weapon/storage/backpack/messenger/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBF" = ( +/obj/structure/fans/hardlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBG" = ( +/obj/item/clothing/gloves/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBJ" = ( +/obj/item/clothing/shoes/boots/jackboots/toeless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBK" = ( +/obj/item/weapon/storage/belt/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBL" = ( +/obj/item/weapon/implant/organ/limbaugment/wrist/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBN" = ( +/obj/item/weapon/storage/fancy/markers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBQ" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBR" = ( +/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBT" = ( +/obj/item/weapon/book/manual/robotics_manual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kBV" = ( +/obj/item/clothing/accessory/armor/legguards, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCl" = ( +/obj/item/clothing/under/rank/nullsuit/med/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCp" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/sweetration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCr" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCy" = ( +/obj/item/clothing/head/bio_hood/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCD" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCF" = ( +/obj/machinery/gear_dispenser/adventure_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCG" = ( +/obj/machinery/suit_cycler/vintage/tpilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCM" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCQ" = ( +/obj/item/weapon/weldingtool/experimental, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kCU" = ( +/mob/living/simple_mob/animal/giant_spider/webslinger/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kCX" = ( +/obj/item/ammo_casing/rocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDe" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDf" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDg" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDt" = ( +/obj/item/weapon/dnainjector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDA" = ( +/obj/item/weapon/storage/box/syndie_kit/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDC" = ( +/obj/item/weapon/disk/limb/eggnerdltdred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDD" = ( +/obj/item/weapon/spell/modifier/purify, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDK" = ( +/obj/item/weapon/storage/box/survival/space, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDL" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/bicaridine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDP" = ( +/obj/item/weapon/paper/awaygate/snowfield/evacuation_order2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDU" = ( +/obj/item/ammo_magazine/m12gdrumjack/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDX" = ( +/obj/item/weapon/dnainjector/coughmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kDY" = ( +/mob/living/simple_mob/mechanical/wahlem{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kEl" = ( +/obj/item/clothing/accessory/sweater/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEr" = ( +/obj/item/clothing/under/hyperfiber/bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEt" = ( +/obj/item/seeds/shrinkshroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEw" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEC" = ( +/obj/item/weapon/circuitboard/supplycomp/control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEI" = ( +/obj/item/weapon/storage/box/fluff/noel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kEM" = ( +/obj/item/trash/syndi_cakes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kER" = ( +/obj/item/clothing/shoes/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kES" = ( +/obj/item/weapon/gun/energy/sizegun/admin/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kET" = ( +/obj/item/weapon/circuitboard/aicore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFi" = ( +/obj/structure/sign/department/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFn" = ( +/obj/item/weapon/storage/secure/briefcase/trashmoney, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFr" = ( +/obj/machinery/portable_atmospherics/powered/pump/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFx" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFy" = ( +/obj/item/weapon/implant/vrlanguage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFF" = ( +/obj/item/weapon/circuitboard/thermoregulator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFG" = ( +/obj/item/frame/mirror, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFN" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFT" = ( +/obj/machinery/giga_drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFU" = ( +/mob/living/simple_mob/hostile/carp/pike, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kFV" = ( +/obj/item/weapon/cell/emergency_light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFX" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sarucube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kFY" = ( +/obj/item/clothing/accessory/storage/pouches/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGc" = ( +/mob/living/simple_mob/animal/passive/dog/void_puppy/nulle, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kGn" = ( +/obj/item/toy/AI, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGB" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/margherita, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGC" = ( +/obj/item/clothing/suit/space/syndicate/black/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGN" = ( +/obj/structure/sign/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGR" = ( +/obj/machinery/media/jukebox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGT" = ( +/obj/item/weapon/aiModule/peacekeeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGY" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kGZ" = ( +/obj/item/weapon/rig/medical/equipped/fluff/saur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHb" = ( +/obj/structure/salvageable/autolathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHh" = ( +/obj/item/weapon/reagent_containers/spray/sterilizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHl" = ( +/obj/structure/closet/secure_closet/freezer/money, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHp" = ( +/obj/item/weapon/shield/primitive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHr" = ( +/obj/item/weapon/gun/energy/stunrevolver/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHA" = ( +/obj/item/clothing/head/helmet/fluff/freddy/bonnie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHJ" = ( +/obj/item/weapon/spell/summon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kHM" = ( +/obj/item/clothing/accessory/armor/armguards/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIg" = ( +/obj/item/weapon/evidencebag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIl" = ( +/mob/living/simple_mob/animal/passive/bird/goldcrest, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kIm" = ( +/obj/item/device/communicator/integrated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIo" = ( +/obj/item/weapon/book/custom_library/religious/feastofkubera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIs" = ( +/obj/machinery/ai_status_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIu" = ( +/obj/item/clothing/suit/space/void/custodian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIw" = ( +/obj/item/weapon/card/id/talon/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIy" = ( +/obj/item/weapon/circuitboard/shield_gen_ex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIA" = ( +/obj/item/weapon/cartridge/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIB" = ( +/obj/item/weapon/storage/box/syndie_kit/g9mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIE" = ( +/obj/item/clothing/mask/smokable/cigarette/joint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIK" = ( +/obj/item/device/pipe_painter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIN" = ( +/obj/machinery/atmospherics/pipe/simple/insulated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIT" = ( +/obj/item/weapon/circuitboard/air_management/supermatter_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIU" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/tape_roll, +/obj/item/sticky_pad/random, +/obj/item/weapon/pen/blue, +/obj/item/weapon/pen/blue, +/obj/item/fulton_core, +/obj/item/fulton_core, +/obj/item/extraction_pack, +/obj/item/extraction_pack, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/item/weapon/pickaxe/hand, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/flashlight/color/orange, +/obj/item/device/threadneedle, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/device/flashlight/lantern, +/obj/random/soap, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/stack/nanopaste, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/stack/marker_beacon/ten, +/obj/item/device/starcaster_news, +/obj/item/device/mapping_unit, +/obj/item/weapon/storage/box/dosimeter, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/device/pda, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/weapon/material/knife/machete, +/obj/item/weapon/material/fishing_net, +/obj/item/weapon/storage/backpack/sport, +/obj/item/weapon/storage/backpack/sport, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/storage/belt, +/obj/item/clothing/accessory/poncho/thermal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kIY" = ( +/obj/item/clothing/glasses/meson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJc" = ( +/obj/item/clothing/head/cowboy/bandit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJd" = ( +/obj/item/weapon/circuitboard/fusion_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJe" = ( +/obj/item/clothing/head/tesh_hood/standard/red_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJg" = ( +/obj/machinery/organ_printer/flesh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJj" = ( +/obj/item/weapon/gun/energy/gun/protector/pilotgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJs" = ( +/mob/living/simple_mob/humanoid/pirate/ranged/shotgun{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kJu" = ( +/obj/item/ammo_casing/a50bmg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJC" = ( +/obj/item/clothing/shoes/boots/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJG" = ( +/obj/item/device/integrated_circuit_printer/illegal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJH" = ( +/obj/machinery/biogenerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJL" = ( +/obj/item/organ/internal/fruitgland, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJP" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kJS" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/deathripley{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kJX" = ( +/obj/item/clothing/accessory/material/makeshift/armguards, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKc" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKd" = ( +/obj/item/clothing/under/rustler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKk" = ( +/obj/machinery/power/smes/buildable/outpost_substation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKr" = ( +/obj/item/weapon/disk/integrated_circuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKt" = ( +/obj/item/clothing/under/rank/centcom_officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKv" = ( +/obj/item/ammo_magazine/ammo_box/b762/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKN" = ( +/obj/item/mecha_parts/mecha_tracking, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kKW" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLc" = ( +/obj/item/weapon/storage/toolbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLd" = ( +/obj/item/clothing/accessory/storage/webbing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLg" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/yellow_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLk" = ( +/obj/structure/sign/double/maltesefalcon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLv" = ( +/obj/item/clothing/under/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLx" = ( +/obj/item/weapon/material/knife/machete/hatchet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLA" = ( +/mob/living/simple_mob/mobs_monsters/clowns/scary{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kLC" = ( +/mob/living/simple_mob/construct/juggernaut/behemoth{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kLL" = ( +/obj/structure/sign/warning/high_voltage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLQ" = ( +/obj/item/weapon/book/manual/rust_engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kLR" = ( +/obj/item/clothing/ears/earmuffs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMi" = ( +/obj/item/weapon/reagent_containers/pill/benzilate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMj" = ( +/obj/item/clothing/ears/skrell/cloth_female/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMk" = ( +/obj/item/ammo_casing/microbattery/medical/stabilize2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMl" = ( +/obj/item/clothing/ears/earring/stud/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMs" = ( +/obj/item/mecha_parts/mecha_equipment/teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMt" = ( +/obj/item/weapon/storage/dicecup/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMu" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMw" = ( +/obj/item/clothing/suit/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMD" = ( +/obj/structure/closet/secure_closet/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMF" = ( +/mob/living/simple_mob/xeno_ch/queen, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kMM" = ( +/obj/structure/mirror/raider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMU" = ( +/obj/item/clothing/under/corp/wardt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kMV" = ( +/obj/item/weapon/reagent_containers/pill/rezadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNi" = ( +/obj/item/weapon/gun/projectile/shotgun/semi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNj" = ( +/obj/item/slimepotion/infertility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNl" = ( +/obj/structure/simple_door/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNn" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/specialwhiskey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNp" = ( +/obj/item/seeds/amauri, +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNt" = ( +/obj/item/clothing/accessory/permit/nanotech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNx" = ( +/obj/item/clothing/gloves/heavy_engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNA" = ( +/obj/structure/table/bench/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNC" = ( +/obj/item/device/communicator/watch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNE" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNO" = ( +/obj/item/weapon/circuitboard/body_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kNT" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOf" = ( +/obj/item/clothing/under/dress/singer/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOh" = ( +/obj/item/weapon/reagent_containers/food/snacks/fishandchips, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOi" = ( +/obj/item/weapon/circuitboard/teleporter_station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOk" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOq" = ( +/obj/structure/sign/directions/evac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOt" = ( +/obj/item/trash/stick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOz" = ( +/obj/item/clothing/suit/storage/fluff/jacket/air_cavalry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOC" = ( +/obj/item/sticky_pad/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kON" = ( +/obj/item/weapon/reagent_containers/food/snacks/watermelonslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOQ" = ( +/obj/machinery/button/remote/driver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kOU" = ( +/mob/living/simple_mob/humanoid/pirate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kOV" = ( +/obj/item/integrated_circuit/output/light/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPa" = ( +/obj/structure/sign/levels/cargo/refinery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPb" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPg" = ( +/obj/item/rig_module/device/arch_drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPh" = ( +/obj/item/weapon/storage/belt/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPo" = ( +/obj/machinery/doorbell_chime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPt" = ( +/mob/living/simple_mob/vore/greatwolf/grey{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kPK" = ( +/obj/item/weapon/staff/broom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPM" = ( +/obj/item/clothing/under/color/yellowgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPU" = ( +/obj/item/weapon/reagent_containers/food/drinks/greentea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPW" = ( +/obj/item/clothing/head/collectable/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kPZ" = ( +/obj/machinery/door/blast/puzzle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQk" = ( +/obj/item/clothing/accessory/pride/intersex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQl" = ( +/obj/item/clothing/gloves/ring/seal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQw" = ( +/obj/item/weapon/gun/energy/sniperrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQz" = ( +/obj/item/weapon/reagent_containers/food/snacks/coldchili, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQA" = ( +/obj/machinery/vending/food/arojoan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQC" = ( +/obj/machinery/door/airlock/angled_bay/hazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQE" = ( +/obj/item/seeds/plastellmycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQP" = ( +/obj/item/clothing/glasses/thermal/plain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQT" = ( +/obj/item/clothing/mask/bandana/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQV" = ( +/obj/item/weapon/paper/card/flower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kQW" = ( +/obj/structure/ghost_pod/ghost_activated/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRc" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/kord, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRd" = ( +/obj/structure/portal_event/resize/preset_grow_twohundred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRi" = ( +/obj/item/clothing/gloves/black/bloodletter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRk" = ( +/obj/item/clothing/head/hood/winter/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRl" = ( +/obj/item/clothing/suit/space/vox/civ/engineer/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRo" = ( +/obj/item/toy/figure/dsquad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRp" = ( +/obj/item/weapon/cell/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRs" = ( +/obj/item/ammo_casing/a10mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRv" = ( +/mob/living/simple_mob/humanoid/russian/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kRA" = ( +/obj/item/weapon/reagent_containers/food/drinks/decaf_tea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRD" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRE" = ( +/obj/item/clothing/head/beret/solgov/sifguard/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRF" = ( +/obj/item/roller/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kRL" = ( +/mob/living/simple_mob/vore/horse, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kRW" = ( +/obj/item/clothing/head/hood/winter/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSl" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackorange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSo" = ( +/obj/item/weapon/paper/carbon/cursedform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSr" = ( +/obj/item/clothing/suit/storage/fluff/modernfedcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSt" = ( +/obj/machinery/door/airlock/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSu" = ( +/obj/item/weapon/gun/energy/lasertag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSD" = ( +/obj/item/clothing/under/swimsuit/fluff/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSE" = ( +/obj/structure/closet/crate/secure/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSG" = ( +/obj/item/stack/tile/floor/eris/derelict1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSK" = ( +/obj/item/clothing/head/hgpiratecap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSS" = ( +/obj/item/weapon/reagent_containers/food/snacks/grilled_carp_slice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSV" = ( +/obj/item/clothing/accessory/badge/solgov/tags, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kSY" = ( +/obj/item/weapon/reagent_containers/food/snacks/fries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTn" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTr" = ( +/obj/item/weapon/pickaxe/excavationdrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTC" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTJ" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTO" = ( +/obj/item/stack/tile/roofing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTQ" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kTX" = ( +/obj/item/organ/internal/cell/machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUc" = ( +/obj/item/weapon/storage/box/timecap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUe" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress/mother{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kUf" = ( +/obj/item/clothing/under/undersuit/hazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUr" = ( +/obj/item/weapon/circuitboard/syndicatedoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUw" = ( +/obj/item/clothing/suit/storage/det_trench/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUD" = ( +/obj/item/solar_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUE" = ( +/obj/structure/sign/atmos/n2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUI" = ( +/obj/item/toy/figure/carrion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUK" = ( +/obj/item/weapon/disk/integrated_circuit/upgrade/clone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUL" = ( +/obj/item/weapon/tank/oxygen/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUM" = ( +/obj/structure/balloon/ghost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kUY" = ( +/obj/item/clothing/under/explorer/utility/command/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVj" = ( +/obj/item/clothing/accessory/tropical/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVm" = ( +/obj/item/clothing/gloves/gauntlets/rig/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVo" = ( +/obj/item/clothing/head/collectable/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVp" = ( +/obj/item/weapon/material/snow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVs" = ( +/obj/item/weapon/material/knife/hook, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVz" = ( +/obj/item/clothing/gloves/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVJ" = ( +/obj/item/clothing/under/acj, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVW" = ( +/obj/machinery/pipedispenser/disposal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kVZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWa" = ( +/obj/structure/table/holotable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWh" = ( +/obj/item/clothing/head/collectable/beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWo" = ( +/mob/living/simple_mob/animal/giant_spider/lurker/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kWv" = ( +/obj/item/weapon/bucket_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWy" = ( +/obj/item/weapon/card/id/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWG" = ( +/obj/item/clothing/head/cowboy/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWK" = ( +/obj/item/integrated_circuit/list, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWP" = ( +/obj/item/weapon/material/hatchet/unathiknife/fluff/payton_joghs_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWS" = ( +/obj/item/weapon/storage/firstaid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWT" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat_pocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWU" = ( +/obj/machinery/hyperpad{ + dir = 6 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kWW" = ( +/mob/living/simple_mob/metroid/mine{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kXn" = ( +/obj/item/ammo_casing/a556/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kXB" = ( +/obj/item/clothing/mask/bandana/skull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kXF" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/teshari/tesh2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kXR" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kXY" = ( +/obj/item/device/mmi/digital/posibrain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYh" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYn" = ( +/obj/machinery/conveyor_switch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYo" = ( +/obj/item/robot_parts/robot_component/diagnosis_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYp" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYq" = ( +/obj/item/weapon/implant/tracking/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYv" = ( +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYz" = ( +/obj/item/ammo_magazine/m380, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYC" = ( +/obj/structure/sign/painting/chapel_secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYD" = ( +/obj/machinery/shipsensors/fancy_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYF" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress/tank{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kYG" = ( +/mob/living/simple_mob/vore/woof{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"kYJ" = ( +/obj/item/ammo_magazine/m9mm/compact/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYL" = ( +/obj/item/trash/candy/gums, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYN" = ( +/obj/item/clothing/head/radiation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYQ" = ( +/obj/item/weapon/circuitboard/fluidpump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYT" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kYU" = ( +/obj/machinery/vending/wallmed_airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZl" = ( +/obj/item/weapon/fuel_assembly/deuterium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZq" = ( +/obj/item/weapon/reagent_containers/food/snacks/tortilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZs" = ( +/obj/item/integrated_circuit/input/examiner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZt" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZu" = ( +/obj/machinery/processor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZz" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZA" = ( +/obj/item/weapon/reagent_containers/food/snacks/chips/snv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZL" = ( +/obj/item/weapon/spell/chroma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"kZR" = ( +/obj/item/clothing/head/caphat/formal/fedcover/fedcovereng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lad" = ( +/obj/item/clothing/head/collectable/xenom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laj" = ( +/mob/living/simple_mob/vore/weretiger{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lao" = ( +/obj/item/clothing/under/rank/nullsuit/sec/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laq" = ( +/obj/item/mecha_parts/part/gygax_right_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"las" = ( +/obj/item/clothing/under/shorts/jeans/classic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lat" = ( +/obj/item/seeds/poppyseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lax" = ( +/obj/item/weapon/material/kitchen/utensil/fork/fluff/ragna_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laD" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laE" = ( +/obj/item/clothing/accessory/permit/gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laI" = ( +/obj/item/weapon/ducttape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laJ" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/keltec/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laK" = ( +/obj/structure/table/sifwoodentable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"laV" = ( +/obj/item/weapon/gun/energy/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbb" = ( +/obj/item/clothing/mask/smokable/pipe/cobpipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbg" = ( +/obj/machinery/status_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbj" = ( +/obj/item/weapon/reagent_containers/food/snacks/risotto, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbr" = ( +/obj/item/clothing/accessory/solgov/department/security/aurora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbz" = ( +/obj/item/weapon/gun/energy/clockwork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbE" = ( +/obj/item/weapon/material/knife/tacknife/survival/fluff/kaith, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbL" = ( +/obj/item/weapon/storage/mre, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lbS" = ( +/obj/item/weapon/gun/energy/mouseray/fennec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcl" = ( +/obj/item/clothing/head/plaguedoctorhat/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcm" = ( +/obj/item/device/assembly/prox_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcp" = ( +/obj/item/weapon/circuitboard/scanner_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcq" = ( +/obj/item/weapon/reagent_containers/food/snacks/chickenwing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcr" = ( +/obj/item/weapon/grenade/smokebomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcs" = ( +/obj/item/clothing/accessory/sweater/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcz" = ( +/obj/item/clothing/under/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcC" = ( +/obj/item/device/uav/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcD" = ( +/obj/item/clothing/under/fluff/siren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lcI" = ( +/mob/living/simple_mob/humanoid/cultist/hunter{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lcM" = ( +/mob/living/simple_mob/animal/giant_spider/tunneler/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lcQ" = ( +/obj/item/toy/plushie/nymph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldj" = ( +/obj/item/device/universal_translator/ear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldl" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldm" = ( +/obj/item/clothing/accessory/badge/corporate_tag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldt" = ( +/obj/item/ammo_casing/a9x18/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldB" = ( +/mob/living/simple_mob/horror/Master, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ldJ" = ( +/obj/item/clothing/head/axiscap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldO" = ( +/obj/item/clothing/accessory/solgov/department/exploration/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldQ" = ( +/obj/item/weapon/circuitboard/helm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldR" = ( +/obj/machinery/power/shield_generator/charged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldS" = ( +/obj/item/weapon/cell/device/weapon/gunsword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldX" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ldZ" = ( +/obj/structure/ghost_pod/ghost_activated/morphspawn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leg" = ( +/obj/item/weapon/tool/wirecutters/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ler" = ( +/obj/machinery/computer/skills, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leu" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/horrible{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lev" = ( +/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ley" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leD" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leH" = ( +/obj/item/weapon/circuitboard/batteryrack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leM" = ( +/obj/structure/sign/flag/pirate/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leT" = ( +/obj/item/weapon/material/armor_plating, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leY" = ( +/obj/item/clothing/under/rank/internalaffairs/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"leZ" = ( +/obj/item/weapon/storage/belt/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lfb" = ( +/obj/item/clothing/accessory/solgov/fleet_patch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lfn" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lfs" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lft" = ( +/mob/living/simple_mob/animal/goat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lfv" = ( +/obj/item/weapon/gun/projectile/ecureuil/tac2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lfE" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgh" = ( +/obj/item/trash/spitgum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgj" = ( +/obj/item/clothing/head/helmet/fluff/madoka_helm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgq" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9_alt1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgz" = ( +/obj/structure/closet/crate/large/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgD" = ( +/obj/item/clothing/accessory/solgov/department/supply/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgG" = ( +/obj/item/rig_module/device/stamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgH" = ( +/obj/machinery/airlock_sensor/airlock_exterior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lgY" = ( +/obj/item/mecha_parts/mecha_equipment/tool/drill/bore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhe" = ( +/obj/item/toy/plushie/squid/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhi" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhj" = ( +/mob/living/simple_mob/vore/woof/cass{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lhl" = ( +/obj/item/weapon/ore/marble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhm" = ( +/obj/item/weapon/stock_parts/matter_bin/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhn" = ( +/obj/machinery/atmospherics/unary/engine/bigger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhp" = ( +/obj/structure/sign/directions/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhr" = ( +/mob/living/simple_mob/vore/xeno_defanged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lhu" = ( +/obj/item/clothing/under/fluff/zeke_vincir_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhH" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhU" = ( +/obj/item/mecha_parts/part/scarab_left_legs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lhX" = ( +/obj/item/weapon/implant/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lic" = ( +/obj/item/weapon/gun/magic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lie" = ( +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lij" = ( +/obj/item/rig_module/chem_dispenser/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lil" = ( +/obj/item/clothing/under/solgov/utility/fleet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lin" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/arstbru, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lio" = ( +/obj/item/weapon/implant/reagent_generator/rischi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"liu" = ( +/obj/machinery/atmospherics/binary/pump/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"liD" = ( +/obj/item/weapon/paper/monitorkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"liM" = ( +/obj/structure/loot_pile/mecha/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"liT" = ( +/obj/item/clothing/shoes/footwraps/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljb" = ( +/obj/item/clothing/head/beret/sec/corporate/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljd" = ( +/obj/item/seeds/telriis, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljf" = ( +/obj/item/device/modkit/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljo" = ( +/obj/item/toy/eight_ball/conch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljx" = ( +/obj/item/organ/internal/voicebox/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljB" = ( +/obj/item/clothing/suit/space/syndicate/green/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljD" = ( +/obj/item/weapon/circuitboard/miningdrillbrace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljL" = ( +/obj/item/weapon/material/gravemarker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljS" = ( +/obj/structure/closet/emcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ljW" = ( +/obj/structure/door_assembly/door_assembly_sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkd" = ( +/obj/item/weapon/storage/pill_bottle/nutriment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lki" = ( +/obj/item/stack/material/glass/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkj" = ( +/obj/item/weapon/reagent_containers/glass/bottle/frostoil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkn" = ( +/obj/item/weapon/storage/box/characters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkC" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkI" = ( +/obj/item/clothing/accessory/jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkM" = ( +/mob/living/simple_mob/slime/feral/dark_blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lkW" = ( +/obj/item/clothing/suit/varsity/green/sweater_vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkX" = ( +/obj/item/weapon/spell/radiance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lkZ" = ( +/obj/item/ammo_magazine/mglock9mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llo" = ( +/obj/item/clothing/accessory/badge/corporate_tag/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llr" = ( +/obj/item/weapon/implant/reagent_generator/egg/doublehicap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llu" = ( +/obj/item/ammo_magazine/mfoam_dart/smg/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llx" = ( +/obj/item/clothing/shoes/sneakerspurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llM" = ( +/obj/item/clothing/under/rank/paramedunilight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llN" = ( +/obj/machinery/computer/cryopod/dorms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llP" = ( +/obj/machinery/vending/event/overwear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llR" = ( +/obj/structure/salvageable/console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llW" = ( +/obj/machinery/door/airlock/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"llX" = ( +/obj/item/weapon/telecube/randomized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmb" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/command{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmc" = ( +/obj/item/clothing/under/cowboy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmd" = ( +/obj/item/clothing/under/dress/gothic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmf" = ( +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/poison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmh" = ( +/obj/structure/bed/chair/comfy/rounded/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmi" = ( +/obj/item/weapon/disk/botany, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmo" = ( +/obj/item/weapon/circuitboard/mecha/imperion/damaged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmq" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmu" = ( +/obj/item/clothing/head/beret/solgov/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmy" = ( +/obj/item/clothing/gloves/ranger/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmL" = ( +/obj/item/clothing/accessory/solgov/specialty/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lmW" = ( +/obj/item/weapon/weldingtool/tubefed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnd" = ( +/obj/item/clothing/ears/skrell/cloth_female/lightblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnf" = ( +/obj/structure/sign/painting/away_areas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lng" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag/o9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnh" = ( +/obj/machinery/computer/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnl" = ( +/obj/item/weapon/card/id/event/altcard/syndiegold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnv" = ( +/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnF" = ( +/obj/item/ammo_casing/a9x18, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnH" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnL" = ( +/obj/item/mecha_parts/chassis/serenity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnN" = ( +/obj/item/weapon/commcard/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lnT" = ( +/obj/item/clothing/under/clown/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lol" = ( +/obj/structure/ghost_pod/manual/lost_drone/dogborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lom" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/christmasred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"los" = ( +/obj/item/projectile/bullet/pistol/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loz" = ( +/obj/machinery/smartfridge/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loI" = ( +/obj/item/clothing/under/pants/baggy/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loK" = ( +/obj/machinery/vending/wardrobe/genedrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loL" = ( +/obj/item/frame/light/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loR" = ( +/obj/item/weapon/circuitboard/medical_kiosk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"loZ" = ( +/obj/item/weapon/storage/backpack/satchel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpj" = ( +/obj/item/stack/material/tin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpl" = ( +/obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpu" = ( +/obj/item/organ/internal/intestine/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpv" = ( +/obj/item/seeds/gelthi, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpI" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpM" = ( +/obj/item/ammo_magazine/s45/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpT" = ( +/obj/item/clothing/suit/storage/hoodie/fluff/eviriik_4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpX" = ( +/obj/item/weapon/storage/wallet/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpY" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lpZ" = ( +/obj/machinery/gear_dispenser/suit/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqb" = ( +/obj/item/weapon/tool/wrench/fuelrod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqk" = ( +/obj/item/weapon/card/id/talon/doctor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lql" = ( +/obj/machinery/pointdefense_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqo" = ( +/obj/item/clothing/accessory/fluff/vasharr_armlets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqx" = ( +/obj/item/weapon/storage/belt/security/tactical/bandolier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqD" = ( +/obj/structure/constructshell/cult, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lqH" = ( +/obj/item/clothing/suit/storage/solgov/service/fleet/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqN" = ( +/obj/machinery/clonepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqP" = ( +/obj/item/clothing/head/mailman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqR" = ( +/obj/item/rig_module/mounted/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqV" = ( +/obj/item/clothing/suit/lumber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lqX" = ( +/obj/item/weapon/plastique, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrd" = ( +/obj/item/clothing/suit/space/void/medical/bio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrg" = ( +/obj/item/weapon/spell/mark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrm" = ( +/obj/item/mecha_parts/chassis/gygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lro" = ( +/obj/structure/sign/warning/cold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrp" = ( +/obj/item/toy/plushie/borgplushie/drake/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrt" = ( +/obj/item/clothing/accessory/permit/gun/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrA" = ( +/obj/item/clothing/under/pants/baggy/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrI" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/tindalos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lrN" = ( +/obj/item/weapon/technomancer_core/summoner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lso" = ( +/obj/structure/prop/alien/pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lsr" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lsC" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/peanutbutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lsL" = ( +/obj/item/clothing/accessory/solgov/department/medical/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lsO" = ( +/obj/mecha/combat/phazon/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lsS" = ( +/obj/item/clothing/head/helmet/space/void/engineering/hazmat/fluff/screehelm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltd" = ( +/obj/item/ammo_magazine/m9mml/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltk" = ( +/obj/vehicle/boat/dragon/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltr" = ( +/obj/item/clothing/suit/storage/vest/heavy/pcrc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lty" = ( +/obj/item/stack/tile/floor/eris/dark/brown_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltJ" = ( +/obj/machinery/mecha_part_fabricator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltL" = ( +/obj/item/weapon/surgical/hemostat/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltO" = ( +/obj/item/weapon/pickaxe/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltP" = ( +/obj/item/weapon/shield/riot/explorer/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltR" = ( +/obj/item/weapon/gun/energy/monorifle/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ltS" = ( +/obj/item/device/am_shielding_container, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luc" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/ice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lue" = ( +/obj/item/clothing/head/nursehat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luo" = ( +/obj/item/weapon/rig/pmc/medical/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luq" = ( +/obj/item/ammo_casing/a44, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lus" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/biomass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luu" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luB" = ( +/obj/item/clothing/under/dress/countess, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luE" = ( +/obj/item/clothing/accessory/badge/holo/detective/ruda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luH" = ( +/obj/item/modular_computer/laptop/preset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"luS" = ( +/obj/item/voice_changer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvb" = ( +/obj/item/clothing/under/color/ranger/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvc" = ( +/obj/item/weapon/tool/crowbar/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvj" = ( +/obj/item/clothing/head/hood/winter/snowsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvl" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvu" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/shambler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvv" = ( +/obj/machinery/chemical_dispenser/ert/specialops/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvC" = ( +/obj/structure/sign/hydrostorage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvD" = ( +/obj/item/clothing/head/helmet/crusader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvK" = ( +/obj/item/pipe_meter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvL" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvS" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lvX" = ( +/obj/item/mecha_parts/component/armor/marshal/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwb" = ( +/obj/item/clothing/suit/storage/flannel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwc" = ( +/obj/structure/sign/signnew/flammables, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwf" = ( +/obj/item/weapon/implant/dexplosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwg" = ( +/obj/structure/sign/hangar/two, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwq" = ( +/obj/item/device/mapping_unit/operative, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lww" = ( +/obj/item/weapon/light/bulb/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwz" = ( +/obj/structure/sign/kiddieplaque, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwJ" = ( +/obj/item/ammo_magazine/m9mm/luger/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwQ" = ( +/obj/item/weapon/chaoscake_layer/five, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lwY" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/detflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxe" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxn" = ( +/obj/item/clothing/glasses/sunglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxp" = ( +/obj/item/weapon/implantcase/medkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxu" = ( +/obj/item/weapon/storage/pill_bottle/dexalin_plus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxA" = ( +/obj/item/weapon/holo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxD" = ( +/obj/machinery/holosign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxM" = ( +/obj/item/clothing/accessory/badge/corporate_tag/grayson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxU" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/security/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lxZ" = ( +/obj/item/clothing/head/helmet/space/void/axis/merc/sovrigh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lya" = ( +/obj/item/clothing/under/color/fjumpsuit/bluef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyb" = ( +/obj/item/mecha_parts/part/ripley_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyk" = ( +/obj/item/weapon/toy/desk/dippingbird, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyn" = ( +/obj/item/weapon/card/id/exploration/fm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyq" = ( +/obj/item/weapon/card/id/syndicate/station_access, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyr" = ( +/mob/living/simple_mob/animal/passive/dog/tamaskan, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lyA" = ( +/obj/item/weapon/broken_gun/laserrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyG" = ( +/obj/item/weapon/implanter/vrlanguage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyI" = ( +/obj/machinery/porta_turret/industrial/teleport_defense, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyV" = ( +/obj/item/weapon/rig/ert/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyX" = ( +/obj/structure/prop/machine/bsb_off, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lyY" = ( +/obj/item/clothing/glasses/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzc" = ( +/mob/living/simple_mob/animal/space/carp{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lzl" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzv" = ( +/obj/item/device/encryptionkey/heads/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzF" = ( +/obj/item/clothing/head/tesh_hood/standard/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzR" = ( +/obj/item/seeds/bananaseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzU" = ( +/obj/item/weapon/gun/energy/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lzW" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/axis_greatcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAc" = ( +/obj/item/weapon/gun/energy/retro/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAd" = ( +/obj/item/clothing/accessory/solgov/department/supply/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAi" = ( +/obj/item/weapon/digestion_remains/skull/rapala, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAo" = ( +/obj/item/device/toner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAp" = ( +/obj/item/clothing/accessory/badge/press/independent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAq" = ( +/obj/item/organ/internal/robotic/diagnostic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAt" = ( +/obj/mecha/combat/marauder/mauler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAu" = ( +/obj/item/weapon/pen/crayon/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAz" = ( +/obj/machinery/suit_cycler/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAA" = ( +/obj/item/weapon/material/butterfly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAI" = ( +/obj/item/clothing/head/kippa/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lAO" = ( +/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBg" = ( +/obj/item/weapon/reagent_containers/food/snacks/locust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBm" = ( +/obj/item/clothing/head/helmet/space/void/refurb/mercenary/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBq" = ( +/obj/item/bodybag/cryobag/robobag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBv" = ( +/obj/item/clothing/under/swimsuit/fluff/penelope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBF" = ( +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lBN" = ( +/obj/structure/sign/bigname/seg_7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBO" = ( +/obj/item/mecha_parts/part/odysseus_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBS" = ( +/obj/item/weapon/storage/secure/briefcase/fluff/jeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBT" = ( +/obj/item/ammo_casing/microbattery/medical/burn3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBW" = ( +/obj/item/weapon/implant/reagent_generator/egg/hicap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lBY" = ( +/obj/structure/curtain/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCd" = ( +/obj/item/slime_extract/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCf" = ( +/obj/item/toy/figure/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCr" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCB" = ( +/obj/item/clothing/suit/space/vox/civ/mechanic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCN" = ( +/obj/item/weapon/pen/crayon/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCW" = ( +/obj/item/clothing/head/utility/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lCY" = ( +/mob/living/simple_mob/vore/solarmoth/lunarmoth{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lDc" = ( +/obj/item/clothing/under/suit_jacket/teal/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDe" = ( +/obj/structure/sign/calendar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDf" = ( +/obj/item/weapon/ore/coal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDm" = ( +/obj/structure/door_assembly/door_assembly_hatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDn" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDq" = ( +/obj/item/clothing/head/rabbitears, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDt" = ( +/obj/machinery/porta_turret/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDD" = ( +/obj/structure/closet/crate/heph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDM" = ( +/obj/item/clothing/ears/earring/stud/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lDN" = ( +/mob/living/simple_mob/animal/giant_spider/electric/broodling, +/mob/living/simple_mob/animal/giant_spider/electric/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lEc" = ( +/obj/item/weapon/card/id/event/altcard/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEf" = ( +/obj/item/weapon/storage/box/gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEp" = ( +/obj/item/weapon/handcuffs/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEr" = ( +/obj/machinery/computer/turbine_computer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEF" = ( +/obj/item/weapon/material/knife/table, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEL" = ( +/obj/machinery/telecomms/server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEO" = ( +/obj/item/clothing/accessory/solgov/department/engineering/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lET" = ( +/obj/structure/sign/flag/vir/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEV" = ( +/obj/structure/sign/directions/medical/operating_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lEX" = ( +/obj/item/clothing/under/dress/redeveninggown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFb" = ( +/mob/living/simple_mob/faithless{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lFg" = ( +/obj/item/weapon/gun/energy/temperature/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFi" = ( +/obj/item/device/paicard/typeb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFr" = ( +/obj/item/weapon/card/id/medical/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFt" = ( +/obj/item/sniper_rifle_part/barrel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFB" = ( +/obj/item/clothing/under/kilt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFD" = ( +/obj/item/clothing/accessory/shiny/gloves/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFM" = ( +/obj/item/weapon/storage/backpack/purse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFO" = ( +/obj/item/clothing/mask/bluescarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFQ" = ( +/obj/machinery/computer/scan_consolenew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFX" = ( +/obj/item/weapon/storage/box/monkeycubes/sparracubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lFY" = ( +/obj/item/clothing/suit/space/vox/civ/trader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGa" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGd" = ( +/obj/item/weapon/pickaxe/six_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGg" = ( +/obj/item/clothing/accessory/medal/silver/valor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGo" = ( +/obj/item/weapon/dnainjector/deafmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGp" = ( +/obj/item/weapon/pen/fountain4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGq" = ( +/obj/item/weapon/reagent_containers/glass/beaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGG" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGK" = ( +/obj/machinery/shieldwall{ + dir = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGP" = ( +/obj/item/clothing/head/hood/winter/medical/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGW" = ( +/obj/structure/closet/crate/nanothreads, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGX" = ( +/obj/item/clothing/suit/cyberpunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lGZ" = ( +/obj/structure/closet/secure_closet/nanotrasen_commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHf" = ( +/obj/structure/closet/crate/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHj" = ( +/obj/item/weapon/circuitboard/mecha/ripley/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHl" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer/o5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHp" = ( +/obj/item/weapon/material/butterfly/boxcutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHy" = ( +/obj/item/ammo_magazine/m545/ap/ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHz" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/coldmountain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHA" = ( +/obj/machinery/door/airlock/glass_medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHC" = ( +/obj/item/modular_computer/tablet/preset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHD" = ( +/obj/item/weapon/mine/incendiary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHG" = ( +/obj/machinery/field_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHL" = ( +/obj/item/clothing/head/beret/sec/corporate/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHS" = ( +/obj/item/weapon/reagent_containers/food/snacks/venus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHT" = ( +/obj/item/toy/figure/excelsior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lHW" = ( +/obj/machinery/flasher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lIa" = ( +/obj/structure/sign/directions/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lIb" = ( +/mob/living/simple_mob/mechanical/hivebot/support{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lIf" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lIw" = ( +/obj/mecha/combat/fighter/gunpod/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lIz" = ( +/obj/machinery/vending/bepis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lIP" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJd" = ( +/obj/item/weapon/gun/projectile/automatic/wt550, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJu" = ( +/obj/item/clothing/accessory/scarf/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJv" = ( +/obj/item/weapon/commcard/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJC" = ( +/obj/structure/sign/graffiti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJD" = ( +/obj/item/clothing/under/suit_jacket/gambler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJF" = ( +/obj/item/clothing/gloves/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJI" = ( +/obj/item/device/sleevemate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJK" = ( +/obj/item/weapon/circuitboard/shield_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJN" = ( +/obj/item/device/communicator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lJZ" = ( +/obj/item/ammo_magazine/m10mm/pistol/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKb" = ( +/obj/item/clothing/suit/storage/toggle/engi_dep_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKh" = ( +/obj/item/weapon/stock_parts/gear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKu" = ( +/obj/item/clothing/suit/storage/snowsuit/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKB" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/one, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKD" = ( +/obj/item/organ/internal/brain/pariah_brain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKG" = ( +/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lKT" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lKU" = ( +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lKX" = ( +/obj/item/trash/popcorn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLb" = ( +/obj/structure/bed/chair/sofa/left/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLf" = ( +/obj/structure/prop/statue/stump_plaque, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLh" = ( +/obj/item/weapon/storage/box/fluff/shel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLv" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLw" = ( +/obj/item/weapon/rig/bayeng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLz" = ( +/obj/machinery/atmospherics/unary/engine/biggest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLB" = ( +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLD" = ( +/obj/item/weapon/gun/energy/pulse_rifle/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLN" = ( +/obj/item/weapon/circuitboard/aifixer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLO" = ( +/obj/item/weapon/circuitboard/mecha/gygax/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLW" = ( +/obj/structure/bed/chair/sofa/bench/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLX" = ( +/mob/living/simple_mob/animal/giant_spider/broodmother{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lLY" = ( +/obj/item/weapon/storage/fancy/cigarettes/carcinomas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lLZ" = ( +/obj/item/clothing/head/helmet/space/vox/civ/trader/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMa" = ( +/obj/structure/sign/level/three/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMf" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMi" = ( +/obj/structure/sign/redcross, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMr" = ( +/obj/item/toy/chainsaw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMu" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/goldschlager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMw" = ( +/obj/item/rig_module/pat_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMF" = ( +/obj/item/weapon/material/sharpeningkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMI" = ( +/obj/item/clothing/head/wheat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMK" = ( +/obj/item/clothing/under/swimsuit/stripper/stripper_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMO" = ( +/obj/machinery/chemical_dispenser/xenoflora/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMU" = ( +/obj/item/weapon/stock_parts/subspace/crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMW" = ( +/obj/structure/sign/flag/seo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lMX" = ( +/obj/item/weapon/card/id/syndicate/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNh" = ( +/obj/item/clothing/under/vrsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNi" = ( +/obj/item/canvas/twentyfour_twentyfour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNm" = ( +/obj/item/weapon/technomancer_catalog/master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNn" = ( +/obj/structure/bed/chair/comfy/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNs" = ( +/obj/structure/bed/chair/comfy/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNw" = ( +/obj/item/integrated_circuit/list/jointext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNI" = ( +/mob/living/simple_mob/animal/space/carp/large{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lNN" = ( +/obj/item/stack/tile/floor/eris/dark/golden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNR" = ( +/obj/item/weapon/material/twohanded/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNW" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lNX" = ( +/obj/structure/sign/directions/medical/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOa" = ( +/obj/machinery/floor_light/prebuilt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOc" = ( +/obj/item/toy/chewtoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOe" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOh" = ( +/obj/structure/barricade/cutout/shadowling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOu" = ( +/obj/item/trash/ratpackcheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOw" = ( +/obj/item/seeds/appleseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOx" = ( +/obj/item/seeds/lemonseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOC" = ( +/obj/item/weapon/gun/energy/hooklauncher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOM" = ( +/obj/item/clothing/suit/space/vox/civ/science/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lOZ" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/OMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPa" = ( +/obj/item/clothing/under/dress/pentagram, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPi" = ( +/obj/item/weapon/spell/resurrect, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPn" = ( +/obj/machinery/door/airlock/scp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPo" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPq" = ( +/obj/item/weapon/stamp/fluff/jade_horror, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPz" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPA" = ( +/obj/item/weapon/reagent_containers/food/snacks/xenomeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPB" = ( +/obj/item/weapon/reagent_containers/food/snacks/grilledcheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPM" = ( +/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPO" = ( +/obj/item/weapon/storage/pill_bottle/assorted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lPT" = ( +/mob/living/simple_mob/animal/space/jelly{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lQa" = ( +/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQb" = ( +/obj/item/weapon/storage/box/fluff/jiao, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQh" = ( +/obj/item/clothing/under/utility/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQi" = ( +/obj/item/integrated_circuit/passive/power/solar_cell/hex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQl" = ( +/obj/item/device/healthanalyzer/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQp" = ( +/obj/machinery/door/airlock/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQt" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQu" = ( +/obj/structure/sign/warning/compressed_gas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQD" = ( +/obj/item/clothing/head/wizard/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQF" = ( +/obj/structure/closet/statue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQJ" = ( +/obj/item/device/vac_attachment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQS" = ( +/obj/machinery/door/airlock/glass_centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lQU" = ( +/obj/item/ammo_magazine/m9mm/large/preban/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRc" = ( +/obj/item/weapon/reagent_containers/food/snacks/rawsticks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRh" = ( +/obj/item/stack/sandbags/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRi" = ( +/obj/item/weapon/gun/energy/maghowitzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRk" = ( +/obj/item/ammo_magazine/m9mm/luger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRm" = ( +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRr" = ( +/obj/item/weapon/folder/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRs" = ( +/obj/item/clothing/head/hood/winter/medical/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRt" = ( +/obj/item/organ/internal/brainmirror, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRz" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRF" = ( +/obj/item/weapon/storage/backpack/messenger/com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRG" = ( +/obj/item/ammo_magazine/m9mm/large/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRI" = ( +/obj/item/rig_module/grenade_launcher/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRL" = ( +/obj/item/weapon/spellbook/oneuse/horsemask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRO" = ( +/obj/structure/prop/machine/smelter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRP" = ( +/obj/item/weapon/gun/projectile/revolver/nagant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lRV" = ( +/mob/living/simple_mob/mechanical/mecha/hoverpod{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lRX" = ( +/obj/item/weapon/kinetic_crusher/machete/dagger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSj" = ( +/obj/item/weapon/paper/talisman/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSl" = ( +/obj/item/device/modkit_conversion/hasd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSn" = ( +/obj/item/integrated_circuit/converter/stringlength, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSt" = ( +/obj/item/clothing/suit/storage/toggle/cardigan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSy" = ( +/obj/item/trash/salo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSC" = ( +/obj/item/weapon/storage/box/fluff/nika, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSK" = ( +/obj/item/weapon/storage/box/fluff/philipsmirnov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSL" = ( +/obj/item/clothing/under/color/lightgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lSQ" = ( +/obj/machinery/optable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTd" = ( +/obj/item/trash/vegration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTe" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_lightgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTi" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTm" = ( +/obj/item/toy/character/thief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTt" = ( +/obj/item/device/camera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTx" = ( +/obj/structure/closet/crate/secure/bishop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTH" = ( +/obj/item/integrated_circuit/converter/degrees2radians, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTI" = ( +/obj/item/weapon/gun/energy/lasercannon/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lTZ" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUa" = ( +/obj/item/weapon/book/manual/synthetic_life, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUb" = ( +/obj/item/clothing/under/pants/track/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUe" = ( +/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUl" = ( +/obj/item/clothing/under/shorts/khaki/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUG" = ( +/obj/item/weapon/reagent_containers/food/snacks/dough, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUN" = ( +/obj/item/pipe/binary/bendable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUO" = ( +/mob/living/simple_mob/animal/wolf/direwolf{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lUQ" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUS" = ( +/obj/item/weapon/bone/arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lUV" = ( +/obj/item/projectile/bullet/rifle/a556/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVd" = ( +/obj/item/weapon/rig/eva/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVl" = ( +/obj/machinery/disposal/wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVo" = ( +/obj/machinery/gear_dispenser/suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVs" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVt" = ( +/obj/item/clothing/mask/greenscarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVu" = ( +/obj/item/clothing/accessory/armor/legguards/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVv" = ( +/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVy" = ( +/obj/item/weapon/gun/energy/lasertag/blue/sub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVz" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVC" = ( +/obj/item/clothing/suit/storage/terran/service/navy/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVE" = ( +/obj/item/clothing/gloves/ranger/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVF" = ( +/obj/item/clothing/accessory/armor/tag/oneg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVM" = ( +/obj/item/clothing/suit/unathi/mantle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVN" = ( +/obj/machinery/atmospherics/pipe/cap/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVP" = ( +/obj/item/clothing/mask/balaclava, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVS" = ( +/obj/machinery/vending/weeb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lVY" = ( +/obj/item/clothing/shoes/boots/jackboots/fluff/techpriestboots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWe" = ( +/obj/item/clothing/accessory/poncho/roles/cloak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWf" = ( +/obj/machinery/door/blast/multi_tile/four_tile_hor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWk" = ( +/obj/structure/cable/ender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWn" = ( +/obj/item/integrated_circuit/passive/power/powernet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWo" = ( +/obj/item/weapon/melee/energy/sword/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWp" = ( +/obj/structure/prop/statue/pillar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWu" = ( +/obj/item/ammo_magazine/m10mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWE" = ( +/obj/machinery/vending/sovietsoda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWM" = ( +/obj/item/slimepotion/loyalty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lWT" = ( +/mob/living/simple_mob/animal/giant_spider/frost/sif{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lWZ" = ( +/obj/item/bee_smoker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXb" = ( +/obj/item/weapon/arrow/quill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXc" = ( +/mob/living/simple_mob/slime/xenobio/ruby{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lXf" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXg" = ( +/obj/item/device/electronic_assembly/large/terminal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXh" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXo" = ( +/obj/machinery/vending/event/food/ingredients, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXp" = ( +/obj/item/weapon/thecake_layer/three, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXr" = ( +/obj/item/weapon/card/id/event/altcard/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXC" = ( +/obj/item/weapon/circuitboard/shield_diffuser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXF" = ( +/obj/item/clothing/under/skirt/outfit/plaid_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lXT" = ( +/obj/item/weapon/reagent_containers/pill/myelamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYa" = ( +/mob/living/simple_mob/animal/sif/shantak/leader{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lYh" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "28" + }, +/obj/machinery/artillerycontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYq" = ( +/obj/item/weapon/cell/secborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYD" = ( +/obj/item/ammo_magazine/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYG" = ( +/obj/item/ammo_casing/a762/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYW" = ( +/obj/structure/bed/chair/comfy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lYX" = ( +/obj/machinery/gateway/centeraway/mcguffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZc" = ( +/obj/item/ammo_magazine/m10mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZk" = ( +/obj/mecha/combat/fighter/allure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZp" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/krinkov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZr" = ( +/obj/item/device/defib_kit/jumper_kit/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZs" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZC" = ( +/obj/machinery/photocopier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZG" = ( +/obj/item/weapon/tool/wirecutters/clippers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZH" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/acid{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"lZK" = ( +/obj/item/weapon/diseasedisk/premade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZN" = ( +/obj/item/device/electronic_assembly/wallmount/tiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZT" = ( +/obj/item/weapon/card/id/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"lZW" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/BPlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mac" = ( +/obj/item/weapon/digestion_remains/skull/zorren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mae" = ( +/obj/structure/prop/war/tgmc_minirockets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"maf" = ( +/obj/item/clothing/under/rank/chef/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mah" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mak" = ( +/obj/structure/closet/secure_closet/exile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mau" = ( +/obj/item/clothing/under/explorer/utility/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"maH" = ( +/obj/structure/bed/chair/sofa/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"maU" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "5" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbc" = ( +/obj/item/clothing/head/collectable/tophat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbk" = ( +/obj/structure/prop/machine/conduit/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbn" = ( +/obj/item/weapon/storage/chewables, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbv" = ( +/obj/item/clothing/suit/bio_suit/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbB" = ( +/obj/item/clothing/under/qipao/white/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbH" = ( +/obj/item/clothing/suit/space/syndicate/black/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbM" = ( +/obj/item/weapon/paper/djstation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbP" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/o4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbQ" = ( +/obj/item/clothing/head/fluff/avida, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbU" = ( +/obj/item/weapon/reagent_containers/food/snacks/sashimi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mbZ" = ( +/obj/item/mecha_parts/mecha_equipment/tool/rcd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcb" = ( +/obj/item/weapon/storage/backpack/satchel/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcf" = ( +/obj/item/shield_projector/line, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mch" = ( +/obj/item/weapon/portable_destructive_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcm" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/gatslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mcu" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcB" = ( +/obj/item/toy/plushie/green_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcC" = ( +/obj/item/clothing/head/beret/centcom/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcJ" = ( +/obj/item/clothing/head/helmet/space/vox/civ/trader/carapace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mcO" = ( +/obj/structure/sign/pods, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdd" = ( +/obj/item/clothing/suit/storage/solgov/service/fleet/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdk" = ( +/mob/living/simple_mob/animal/passive/fish/pike, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"mdl" = ( +/obj/item/weapon/storage/pouch/baton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdp" = ( +/obj/item/weapon/reagent_containers/food/snacks/cuttlefish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdu" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/medkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdz" = ( +/obj/machinery/light_construct, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdB" = ( +/obj/item/weapon/gun/projectile/luger/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdF" = ( +/obj/item/selectable_item/chemistrykit/size, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdG" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdJ" = ( +/obj/structure/sign/levels/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdN" = ( +/obj/item/weapon/reagent_containers/food/snacks/grub_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mdO" = ( +/obj/item/clothing/suit/armor/vest/ert/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meg" = ( +/obj/item/clothing/suit/armor/vest/ert/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mej" = ( +/obj/item/slime_extract/dark_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"men" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mer" = ( +/obj/item/seeds/watermelonseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meA" = ( +/obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meB" = ( +/obj/item/stack/tile/floor/eris/steel/bar_dance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meK" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyronalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meW" = ( +/obj/item/weapon/broken_gun/dartgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"meX" = ( +/obj/structure/bed/double/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mff" = ( +/obj/item/clothing/under/solgov/service/army/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfi" = ( +/obj/structure/prop/machine/complicator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfr" = ( +/obj/structure/morgue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfs" = ( +/obj/item/seeds/bluetomatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfw" = ( +/obj/machinery/computer/med_data/laptop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfy" = ( +/obj/item/weapon/circuitboard/crew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfE" = ( +/obj/item/weapon/spacecash/c1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfH" = ( +/obj/item/slime_extract/ruby, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfI" = ( +/obj/item/weapon/paper/solar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mfV" = ( +/obj/item/weapon/storage/box/fluff/madoka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mge" = ( +/obj/item/clothing/suit/stripper/stripper_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgk" = ( +/obj/item/clothing/accessory/solgov/fleet_patch/third, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgn" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/coco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgp" = ( +/obj/item/weapon/storage/pouch/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgq" = ( +/obj/item/clothing/suit/space/void/engineering/hazmat/fluff/screespess, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgv" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/bluecuracao, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgx" = ( +/obj/structure/showcase/yw/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgy" = ( +/obj/structure/sign/warning/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mgE" = ( +/obj/item/seeds/teaseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhg" = ( +/obj/item/clothing/head/bio_hood/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhi" = ( +/obj/item/clothing/accessory/medal/solgov/silver/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhk" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkfishcooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhq" = ( +/obj/item/weapon/soap/purple_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhu" = ( +/obj/item/clothing/head/hood/siffet_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhz" = ( +/obj/item/weapon/storage/backpack/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhA" = ( +/obj/item/weapon/circuitboard/powermonitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhM" = ( +/obj/item/weapon/reagent_containers/food/snacks/bagelraisin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mhQ" = ( +/obj/item/clothing/gloves/regen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mie" = ( +/obj/structure/prop/rock/flat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mik" = ( +/obj/item/weapon/tray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mil" = ( +/obj/item/clothing/accessory/poncho/cloak/fluff/aroozeehos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"min" = ( +/obj/item/weapon/storage/toolbox/lunchbox/nt/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miv" = ( +/obj/item/weapon/rig/light/hacker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mix" = ( +/obj/item/clothing/mask/gas/plaguedoctor/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miC" = ( +/obj/structure/bed/chair/bay/chair/padded/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miE" = ( +/obj/item/weapon/material/knife/tacknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miG" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatpie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miJ" = ( +/obj/item/clothing/suit/storage/snowsuit/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miP" = ( +/obj/structure/outcrop/coal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miR" = ( +/obj/item/clothing/under/customs/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miS" = ( +/obj/item/clothing/accessory/bracelet/material/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miX" = ( +/obj/machinery/microscope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miY" = ( +/obj/item/seeds/ambrosiavulgarisseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"miZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mjk" = ( +/obj/item/device/lightreplacer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mjD" = ( +/obj/machinery/button/ignition, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mjH" = ( +/mob/living/simple_mob/animal/synx/ai/pet/greed{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mjR" = ( +/obj/machinery/seed_storage/xenobotany, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mjT" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mjY" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkb" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkc" = ( +/obj/item/weapon/reagent_containers/pill/protein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkf" = ( +/obj/item/weapon/storage/box/casino/costume_commie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkh" = ( +/obj/item/weapon/reagent_containers/food/snacks/cinnamonbun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkl" = ( +/obj/item/weapon/refill_cartridge/autoname/cigarette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkv" = ( +/obj/item/toy/plushie/carp/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkx" = ( +/obj/item/clothing/head/fluff/pink_tiara, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mky" = ( +/obj/item/stack/tile/grass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkB" = ( +/obj/item/clothing/suit/dress/solgov/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkH" = ( +/obj/item/clothing/suit/holidaypriest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mkX" = ( +/obj/item/clothing/head/crown/goose_queen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlc" = ( +/obj/item/weapon/commcard/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlj" = ( +/obj/item/weapon/reagent_containers/food/snacks/lasagna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlm" = ( +/obj/structure/bed/chair/sofa/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlK" = ( +/obj/item/clothing/under/color/fjumpsuit/pinkf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlO" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlU" = ( +/obj/machinery/door/airlock/angled_bay/double/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mlX" = ( +/obj/item/seeds/icepepperseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmg" = ( +/obj/machinery/gear_dispenser/adventure_box/weapon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmj" = ( +/obj/item/clothing/head/helmet/space/void/security/hasd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmn" = ( +/obj/item/clothing/under/pants/altevian/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmq" = ( +/obj/item/clothing/suit/storage/vest/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmu" = ( +/obj/item/integrated_circuit/output/led/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmv" = ( +/obj/item/weapon/grenade/supermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmy" = ( +/obj/item/clothing/accessory/jacket/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmF" = ( +/obj/item/integrated_circuit/list/search, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmI" = ( +/obj/machinery/light/flamp/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmJ" = ( +/obj/item/weapon/gun/projectile/caseless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmN" = ( +/obj/item/clothing/shoes/flats/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmT" = ( +/obj/item/clothing/under/cheongsam/darkblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mmY" = ( +/obj/item/clothing/suit/storage/solgov/dress/fleet/snco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mne" = ( +/obj/item/clothing/ears/skrell/chain/redjewels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnh" = ( +/obj/item/clothing/head/helmet/space/void/refurb/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnp" = ( +/obj/item/device/mapping_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnv" = ( +/mob/living/simple_mob/slime/xenobio/sapphire{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mny" = ( +/obj/structure/flight_left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnD" = ( +/obj/item/clothing/gloves/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnM" = ( +/obj/item/clothing/under/pants/baggy/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnQ" = ( +/obj/structure/prop/statue/statue5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnY" = ( +/obj/item/clothing/under/corp/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mnZ" = ( +/obj/item/clothing/gloves/ring/material/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moa" = ( +/obj/item/clothing/head/helmet/space/syndicate/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moh" = ( +/obj/item/ammo_magazine/clip/c9mm/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mol" = ( +/obj/item/weapon/storage/backpack/satchel/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moy" = ( +/obj/item/weapon/circuitboard/mecha/odysseus/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moC" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag/o8, +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moF" = ( +/obj/item/weapon/pen/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moI" = ( +/obj/machinery/shieldwall{ + dir = 10 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moJ" = ( +/obj/machinery/door/airlock/maintenance/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moK" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"moX" = ( +/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpb" = ( +/obj/item/device/batterer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpd" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpl" = ( +/obj/item/weapon/computer_hardware/processor_unit/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpw" = ( +/obj/item/weapon/spell/construct/mend_occult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpy" = ( +/obj/item/weapon/magnetic_ammo/pistol/khi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpz" = ( +/obj/item/clothing/accessory/collar/azura, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpA" = ( +/obj/item/weapon/storage/box/body_record_disk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpC" = ( +/obj/item/weapon/inducer/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpE" = ( +/obj/item/seeds/telriis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpH" = ( +/mob/living/simple_mob/humanoid/cultist/castertesh{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mpI" = ( +/obj/item/seeds/onionseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpR" = ( +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpW" = ( +/obj/machinery/door/airlock/angled_bay/external/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mpY" = ( +/obj/structure/sign/levels/evac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqa" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/doctorsdelight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqb" = ( +/mob/living/simple_mob/animal/passive/cat/runtime, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mqe" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/lizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqh" = ( +/obj/item/weapon/aiModule/protective_shell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqk" = ( +/obj/item/stack/telecrystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mql" = ( +/obj/structure/prop/war/tgmc_missile/keeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqm" = ( +/obj/structure/sign/directions/recreation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqq" = ( +/obj/structure/cable/heavyduty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqs" = ( +/obj/item/weapon/aiModule/balance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqt" = ( +/obj/item/ammo_magazine/a57, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqu" = ( +/obj/machinery/gear_dispenser/suit_fancy/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqx" = ( +/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqA" = ( +/obj/item/weapon/holo/esword/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqE" = ( +/obj/item/clothing/under/rank/chemist/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqL" = ( +/mob/living/simple_mob/slime/xenobio/red{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mqQ" = ( +/obj/item/integrated_circuit/cryptography/hash_md5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqV" = ( +/obj/item/device/analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqW" = ( +/obj/item/clothing/under/saare/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mqZ" = ( +/obj/item/clothing/head/beret/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mra" = ( +/obj/item/clothing/accessory/jacket/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrc" = ( +/obj/structure/bed/chair/modern_chair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrd" = ( +/obj/item/clothing/glasses/sunglasses/fluff/alfonso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrj" = ( +/obj/structure/sign/directions/medical/medeqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrl" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrn" = ( +/obj/item/robot_parts/robot_component/binary_communication_device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrp" = ( +/obj/item/ammo_magazine/m9mmp90/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrx" = ( +/obj/item/weapon/vehicle_assembly/snowmobile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrD" = ( +/obj/item/clothing/suit/space/void/refurb/engineering/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrI" = ( +/obj/item/weapon/reagent_containers/food/snacks/bearburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrK" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/blaze{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mrR" = ( +/obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mrV" = ( +/obj/item/clothing/suit/space/void/refurb/mercenary/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msf" = ( +/obj/item/weapon/paper/sop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msg" = ( +/obj/item/clothing/head/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msl" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/bronze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msm" = ( +/obj/item/clothing/glasses/regular/hipster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msp" = ( +/obj/item/clothing/head/helmet/space/void/medical/bio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msF" = ( +/obj/item/clothing/under/dress/maid/under_maid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msH" = ( +/obj/item/clothing/mask/gas/voice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msQ" = ( +/obj/item/weapon/circuitboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msR" = ( +/obj/item/weapon/commcard/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"msU" = ( +/obj/machinery/power/smes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mth" = ( +/obj/item/weapon/disk/limb/dsi_sergal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mti" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mtk" = ( +/obj/item/weapon/reagent_containers/food/snacks/sausage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mtw" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mtE" = ( +/obj/item/weapon/circuitboard/mech_recharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mtG" = ( +/obj/item/weapon/storage/box/fluff/phi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mtS" = ( +/obj/machinery/access_button/airlock_exterior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muf" = ( +/obj/item/weapon/rig/breacher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muk" = ( +/obj/item/ammo_casing/a545/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mup" = ( +/obj/structure/closet/walllocker_double/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muz" = ( +/obj/machinery/vending/foodfast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muH" = ( +/obj/item/weapon/circuitboard/aiupload, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muL" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon/microwave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muM" = ( +/obj/item/clothing/glasses/omnihud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muO" = ( +/obj/item/weapon/book/tome/imbued, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"muU" = ( +/obj/item/weapon/storage/box/matches, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvb" = ( +/obj/item/clothing/head/pelt/tigerpelt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvc" = ( +/obj/structure/sign/directions/teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvd" = ( +/obj/item/weapon/cell/mech/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mve" = ( +/obj/item/weapon/disk/limb/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvr" = ( +/obj/structure/sign/directions/engineering/reactor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvt" = ( +/obj/item/clothing/suit/space/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvu" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/green_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvv" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvw" = ( +/obj/item/integrated_circuit/memory/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvL" = ( +/obj/item/toy/figure/geneticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvR" = ( +/obj/structure/sign/flag/vystholm/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mvT" = ( +/mob/living/simple_mob/animal/space/mouse_army/ammo{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mwa" = ( +/obj/machinery/door/airlock/angled_tgmc/dropship1_pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwd" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/rpk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwf" = ( +/obj/item/weapon/handcuffs/legcuffs/bola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwg" = ( +/obj/structure/closet/secure_closet/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwi" = ( +/obj/item/clothing/under/teshari/undercoat/standard/blue_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwk" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwl" = ( +/obj/item/weapon/storage/bag/circuits/mini/smart/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwm" = ( +/obj/item/device/radio/beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwn" = ( +/obj/item/clothing/accessory/solgov/department/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwq" = ( +/obj/item/weapon/circuitboard/machine/reg_d, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwr" = ( +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mws" = ( +/obj/item/ammo_magazine/clip/mosin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwB" = ( +/obj/item/clothing/mask/altevian_breath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwC" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwD" = ( +/obj/item/vox/armalis_amp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwM" = ( +/obj/item/toy/plushie/coffee_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwQ" = ( +/obj/item/toy/owl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwS" = ( +/obj/item/clothing/head/bowler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mwV" = ( +/obj/item/weapon/tank/anesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxf" = ( +/obj/item/weapon/gun/energy/locked/phasegun/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxv" = ( +/obj/item/clothing/head/helmet/space/void/refurb/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxD" = ( +/obj/item/stack/material/fur/wool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxN" = ( +/obj/item/clothing/glasses/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxQ" = ( +/obj/item/weapon/cell/device/shield_generator/backpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxU" = ( +/obj/item/clothing/glasses/threedglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxV" = ( +/obj/item/clothing/under/rank/trek/sec/ent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mxZ" = ( +/obj/item/toy/character/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mya" = ( +/obj/item/clothing/under/skirt/outfit/fluff/avida, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myh" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/purple_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myl" = ( +/mob/living/simple_mob/animal/giant_spider/electric{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"myw" = ( +/obj/structure/bed/chair/sofa/bench/corner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myx" = ( +/obj/item/weapon/ore/osmium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myH" = ( +/obj/item/clothing/under/teshari/smock/dress/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myJ" = ( +/obj/item/clothing/head/helmet/alien/tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myN" = ( +/obj/machinery/smartfridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"myW" = ( +/obj/item/weapon/storage/vore_egg/file, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mze" = ( +/obj/item/weapon/grenade/shooter/energy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzk" = ( +/obj/item/weapon/pen/fountain6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzl" = ( +/obj/item/toy/balloon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzp" = ( +/obj/item/weapon/bedsheet/cosmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzs" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzt" = ( +/obj/item/slimepotion/friendship, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzx" = ( +/obj/mecha/working/hoverpod/combatpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzG" = ( +/obj/item/trash/smolburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzM" = ( +/obj/item/weapon/coin/aluminium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzV" = ( +/obj/item/device/starcaster_news, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mzX" = ( +/obj/item/clothing/accessory/collar/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAe" = ( +/obj/item/weapon/card/id/medical/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAk" = ( +/obj/item/clothing/under/sl_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAl" = ( +/obj/item/clothing/under/oldwoman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAx" = ( +/obj/item/clothing/under/solgov/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAB" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/cow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAF" = ( +/obj/item/clothing/suit/space/void/mining/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAH" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/tkb408, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAL" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mAM" = ( +/mob/living/simple_mob/animal/sif/glitterfly/rare, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mBq" = ( +/obj/machinery/v_garbosystem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mBv" = ( +/obj/item/clothing/head/helmet/space/void/merc/axis/axisrigh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mBw" = ( +/obj/item/weapon/storage/belt/explorer/pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mBC" = ( +/obj/item/weapon/storage/firstaid/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mBL" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCd" = ( +/obj/item/weapon/circuitboard/transhuman_clonepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCe" = ( +/obj/item/clothing/head/helmet/combat/bedevere, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCi" = ( +/obj/item/clothing/under/fluff/earthenbreath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCo" = ( +/obj/item/weapon/reagent_containers/food/drinks/decaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCp" = ( +/obj/item/organ/internal/brain/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCr" = ( +/obj/item/clothing/under/cowboy/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCz" = ( +/obj/item/weapon/card/id/civilian/service/bartender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCD" = ( +/obj/item/weapon/storage/box/wings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCG" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCH" = ( +/obj/item/weapon/implanter/loyalty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCM" = ( +/obj/item/weapon/gun/projectile/silenced/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCQ" = ( +/obj/item/trash/ratpackramen/lacquer3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCU" = ( +/obj/item/clothing/under/color/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mCY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDq" = ( +/obj/structure/sign/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDr" = ( +/obj/machinery/gateway{ + dir = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDs" = ( +/obj/item/weapon/reagent_containers/food/condiment/coldsauce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDv" = ( +/obj/item/clothing/suit/storage/solgov/service/army/security/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDK" = ( +/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mDW" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/purple_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEc" = ( +/obj/item/weapon/storage/lockbox/vials, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEd" = ( +/obj/item/clothing/under/captain_fly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEg" = ( +/obj/item/weapon/gun/energy/mouseray/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEy" = ( +/obj/item/clothing/under/rank/medical/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEA" = ( +/obj/structure/closet/crate/secure/scg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEB" = ( +/obj/item/clothing/suit/storage/toggle/sec_dep_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mED" = ( +/obj/item/weapon/reagent_containers/blood/synthblood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEF" = ( +/obj/item/clothing/suit/space/void/merc/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEH" = ( +/obj/machinery/vending/fishing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEL" = ( +/obj/item/clothing/under/dress/darkred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEM" = ( +/obj/machinery/drone_fabricator/derelict, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEO" = ( +/obj/item/clothing/gloves/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mEW" = ( +/obj/structure/sign/directions/roomnum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFb" = ( +/obj/item/clothing/head/hood/winter/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFe" = ( +/obj/item/clothing/under/shorts/jeans/mustang, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFj" = ( +/obj/item/toy/figure/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFl" = ( +/obj/item/clothing/suit/storage/fluff/zara_coat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFq" = ( +/obj/item/weapon/digestion_remains/skull/nevrean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFs" = ( +/obj/item/weapon/storage/pill_bottle/rezadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFt" = ( +/obj/structure/prop/alien/computer/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFG" = ( +/obj/structure/outcrop/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFI" = ( +/obj/structure/grille, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFL" = ( +/obj/structure/reflector/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFM" = ( +/obj/item/ammo_casing/a45/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mFZ" = ( +/obj/item/weapon/storage/bag/circuits/mini/converter/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGg" = ( +/obj/item/weapon/stool/baystool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGj" = ( +/obj/item/weapon/dnainjector/morph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGt" = ( +/obj/item/weapon/reagent_containers/pill/antitox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGx" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/pyro{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mGC" = ( +/mob/living/simple_mob/humanoid/merc/ranged/rifle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mGD" = ( +/obj/structure/sign/atmos_o2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGF" = ( +/obj/machinery/computer/transhuman/resleeving/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGH" = ( +/obj/item/weapon/reagent_containers/food/snacks/blt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGI" = ( +/obj/item/clothing/under/rank/head_of_security/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGM" = ( +/obj/item/weapon/computer_hardware/hard_drive/portable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mGP" = ( +/obj/item/weapon/storage/secure/briefcase/money, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHg" = ( +/obj/machinery/door/airlock/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHq" = ( +/obj/item/clothing/head/hood/robin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHr" = ( +/obj/item/glass_jar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHt" = ( +/obj/machinery/computer/security/xenobio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHz" = ( +/obj/item/weapon/stock_parts/matter_bin/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHA" = ( +/obj/structure/balloon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHB" = ( +/obj/item/weapon/circuitboard/telesci_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHC" = ( +/obj/item/weapon/gun/projectile/silenced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHP" = ( +/obj/structure/sign/levels/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHQ" = ( +/obj/item/stack/tile/floor/sidewalk/side, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mHS" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/champagne, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIp" = ( +/obj/structure/sign/department/rnd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIr" = ( +/obj/item/integrated_circuit/transfer/demultiplexer/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIt" = ( +/obj/item/clothing/suit/hgpirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIx" = ( +/obj/item/mecha_parts/part/ripley_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIA" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIH" = ( +/obj/item/clothing/suit/storage/toggle/fr_jacket/ems, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/lobstercooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIM" = ( +/obj/item/toy/plushie/fumo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIN" = ( +/obj/item/weapon/folder/white_cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIP" = ( +/obj/item/integrated_circuit/list/pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mIU" = ( +/obj/item/weapon/card/id/syndicate/dummy_cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJb" = ( +/obj/item/clothing/accessory/solgov/department/engineering/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJe" = ( +/obj/machinery/access_button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJf" = ( +/obj/item/weapon/paper/awaygate/snowfield/interrogation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJv" = ( +/obj/item/clothing/head/wedding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJE" = ( +/obj/item/weapon/bedsheet/greendouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJF" = ( +/obj/item/clothing/gloves/gauntlets/rig/light/hacker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJG" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJK" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJN" = ( +/obj/machinery/casino_prize_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mJP" = ( +/obj/item/weapon/reagent_containers/glass/beaker/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKf" = ( +/obj/item/clothing/mask/gas/fluff/skinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKi" = ( +/obj/item/clothing/under/color/ranger/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKn" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKt" = ( +/obj/item/clothing/accessory/medal/bronze_heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKv" = ( +/obj/item/weapon/card/id/talon/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKB" = ( +/obj/item/weapon/gun/projectile/automatic/wt550/lethal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKG" = ( +/obj/item/ammo_magazine/m2024/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKK" = ( +/obj/item/weapon/deadringer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKU" = ( +/obj/structure/smolebuilding/museum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mKW" = ( +/obj/structure/sign/atmos_plasma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mLa" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/moistnugget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mLq" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mLB" = ( +/obj/item/integrated_circuit/logic/binary/greater_than_or_equal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mLI" = ( +/obj/item/mecha_parts/component/armor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mLR" = ( +/obj/item/weapon/cell/device/weapon/recharge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMi" = ( +/obj/item/ammo_magazine/m545, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMl" = ( +/obj/structure/sign/levels/medical/operating_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMs" = ( +/obj/item/weapon/circuitboard/solar_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMv" = ( +/obj/item/weapon/spell/projectile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMI" = ( +/obj/item/clothing/head/festive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mML" = ( +/obj/item/clothing/suit/redtag/dom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mMM" = ( +/obj/item/weapon/paper/awaygate/snowfield/diary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNb" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "20" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNk" = ( +/obj/item/weapon/spell/track, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNs" = ( +/obj/item/weapon/implantcase/language/eal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNy" = ( +/obj/item/clothing/head/helmet/space/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNz" = ( +/obj/item/weapon/cell/protean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNG" = ( +/obj/item/ammo_magazine/asval/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNH" = ( +/obj/structure/closet/crate/secure/nanomed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNL" = ( +/obj/structure/frame/computer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNV" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNX" = ( +/obj/structure/bed/roller/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mNZ" = ( +/obj/structure/outcrop/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOa" = ( +/obj/item/clothing/head/collectable/HoS, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOh" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/meat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOk" = ( +/obj/item/clothing/accessory/scarf/teshari/neckscarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOn" = ( +/obj/item/weapon/cell/device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOs" = ( +/obj/item/weapon/gun/projectile/revolver/toy/crossbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOt" = ( +/obj/item/ammo_casing/a45/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOz" = ( +/obj/item/clothing/mask/surgical/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOA" = ( +/obj/structure/cult/talisman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOB" = ( +/obj/item/clothing/head/helmet/space/void/responseteam/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOE" = ( +/obj/item/inflatable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/unathiliquor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOI" = ( +/obj/structure/plushie/beepsky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOJ" = ( +/obj/item/weapon/spell/gambit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOK" = ( +/obj/item/clothing/head/tesh_hood/standard/pink_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOO" = ( +/obj/machinery/chemical_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOS" = ( +/obj/item/clothing/head/bio_hood/general, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOT" = ( +/obj/item/clothing/ears/skrell/cloth_male, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mOU" = ( +/obj/item/weapon/circuitboard/robotstoragecontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPb" = ( +/obj/item/clothing/ears/skrell/chain/bluejewels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPh" = ( +/obj/machinery/porta_turret/ai_defense, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPi" = ( +/obj/item/weapon/dnainjector/telemut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPp" = ( +/obj/structure/table/rack/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPw" = ( +/obj/structure/closet/crate/trashcart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPF" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/generic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPI" = ( +/obj/item/clothing/shoes/fluff/wolfgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPP" = ( +/obj/item/toy/figure/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPS" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/ratvar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPT" = ( +/obj/structure/table/rack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mPU" = ( +/obj/structure/prop/war/tgmc_missile/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQc" = ( +/obj/item/weapon/rig/vox/civilian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQl" = ( +/obj/item/canvas/twentythree_nineteen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQm" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQq" = ( +/obj/item/ammo_magazine/ammo_box/b357/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQw" = ( +/obj/item/weapon/dnainjector/antirunfast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQy" = ( +/obj/item/weapon/stamp/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQB" = ( +/obj/item/clothing/suit/storage/labcoat/fluff/eioni_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQD" = ( +/obj/item/weapon/material/knife/machete/hatchet/stone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQI" = ( +/obj/structure/barricade/cutout/gondola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQL" = ( +/obj/item/weapon/reagent_containers/food/snacks/sausage/battered, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQP" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQR" = ( +/obj/item/clothing/mask/snorkel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQT" = ( +/obj/item/clothing/head/psy_crown/wrath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mQZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/doughslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRa" = ( +/obj/item/weapon/material/twohanded/spear/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRb" = ( +/obj/item/clothing/head/bomb_hood/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRe" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_compress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRk" = ( +/obj/mecha/medical/odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRx" = ( +/obj/item/weapon/circuitboard/recharger/wrecharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRz" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/hop/fluff/pip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRB" = ( +/obj/item/clothing/under/color/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRD" = ( +/obj/item/integrated_circuit/input/microphone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRF" = ( +/obj/item/royal_spider_egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRM" = ( +/obj/item/weapon/circuitboard/mecha/scarab/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRQ" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mRW" = ( +/obj/item/weapon/technomancer_core/overcharged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSa" = ( +/obj/item/weapon/gun/projectile/ecureuil/tac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSb" = ( +/obj/item/clothing/under/rank/geneticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSg" = ( +/obj/item/device/electronic_assembly/medium/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSx" = ( +/obj/structure/cable/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSD" = ( +/obj/structure/sign/signnew/canisters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSJ" = ( +/obj/machinery/door/airlock/angled_bay/elevator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSK" = ( +/obj/item/weapon/rig/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSP" = ( +/obj/item/weapon/spike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSQ" = ( +/obj/item/ammo_magazine/ammo_box/b545/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mSU" = ( +/obj/item/integrated_circuit/passive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTa" = ( +/obj/item/clothing/suit/storage/eio_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTh" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTn" = ( +/obj/item/weapon/soap/golden_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTo" = ( +/obj/item/weapon/reagent_containers/food/snacks/ricepudding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTv" = ( +/mob/living/simple_mob/construct/proteon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mTw" = ( +/obj/item/weapon/storage/belt/archaeology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTB" = ( +/mob/living/simple_mob/slime/xenobio/orange{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mTD" = ( +/obj/item/clothing/under/teshari/undercoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTF" = ( +/obj/item/weapon/gun/projectile/revolver/toy/big_iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTK" = ( +/obj/item/clothing/suit/leathercoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTM" = ( +/obj/item/weapon/spell/modifier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mTZ" = ( +/obj/item/clothing/accessory/pride/bi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUd" = ( +/obj/machinery/pipedispenser/orderable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUj" = ( +/obj/item/ammo_magazine/ammo_box/b545/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUn" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/eggless{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mUo" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUD" = ( +/obj/structure/prop/war/warhead2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUG" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUI" = ( +/obj/item/clothing/accessory/sweater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUJ" = ( +/obj/structure/prop/blackbox/snowfield_base, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUP" = ( +/obj/machinery/r_n_d/server/core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUQ" = ( +/obj/item/weapon/storage/secure/briefcase/nsfw_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mUX" = ( +/obj/item/clothing/under/mbill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVd" = ( +/obj/item/clothing/head/helmet/space/void/refurb/medical/alt/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVm" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVD" = ( +/obj/item/clothing/shoes/boots/ranger/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVE" = ( +/obj/item/clothing/shoes/knight_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVK" = ( +/obj/item/clothing/gloves/ring/material/copper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVM" = ( +/obj/structure/bed/chair/bay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVO" = ( +/obj/item/clothing/gloves/arm_guard/combat/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVR" = ( +/obj/item/clothing/under/yw/rank/head_of_security/formal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVU" = ( +/obj/item/clothing/accessory/fullcape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVW" = ( +/obj/item/device/modkit_conversion/fluff/debug_gunkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mVY" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/pitchgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWa" = ( +/obj/item/clothing/accessory/material/custom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWi" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWj" = ( +/obj/mecha/combat/durand/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWm" = ( +/obj/machinery/artifact_harvester, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWo" = ( +/obj/item/weapon/grenade/empgrenade/low_yield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWq" = ( +/obj/item/weapon/stamp/ward, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWw" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/dermaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWC" = ( +/obj/item/weapon/reagent_containers/food/snacks/turkeyslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWF" = ( +/obj/item/clothing/under/rank/hydroponics/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWH" = ( +/mob/living/simple_mob/construct/artificer/caster{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mWN" = ( +/obj/item/clothing/accessory/collar/khcrystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWR" = ( +/obj/item/weapon/storage/box/rxglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWS" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWU" = ( +/obj/item/stack/tile/floor/eris/dark/gray_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mWY" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/robo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXb" = ( +/obj/item/weapon/storage/toolbox/lunchbox/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXf" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sparracube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXi" = ( +/obj/machinery/smartfridge/drinks/showcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXr" = ( +/obj/item/mecha_parts/part/gygax_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXv" = ( +/obj/item/ammo_magazine/m545/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXB" = ( +/obj/item/clothing/accessory/poncho/thermal/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXF" = ( +/obj/item/clothing/gloves/ring/material/bronze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXL" = ( +/obj/item/stack/tile/floor/eris/techmaint/panels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mXP" = ( +/obj/machinery/door/airlock/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYa" = ( +/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYh" = ( +/obj/item/weapon/pen/fountain2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYm" = ( +/obj/machinery/porta_turret/stationary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYn" = ( +/obj/item/weapon/implant/neural, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYx" = ( +/obj/item/clothing/mask/bandana/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYA" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/mutagen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYB" = ( +/obj/item/stack/material/concrete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYC" = ( +/obj/structure/salvageable/machine_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYD" = ( +/obj/item/ammo_magazine/mp5mag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYE" = ( +/obj/item/clothing/accessory/tie/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYN" = ( +/obj/item/weapon/gun/energy/captain/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYS" = ( +/obj/item/weapon/gun/projectile/revolver/webley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYT" = ( +/obj/item/weapon/spell/projectile/ionic_bolt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mYZ" = ( +/obj/item/seeds/soyaseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZe" = ( +/obj/item/clothing/shoes/laceup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZi" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"mZl" = ( +/obj/item/clothing/accessory/solgov/department/exploration/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZm" = ( +/obj/item/clothing/accessory/storage/black_vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZn" = ( +/obj/item/clothing/under/dress/littleblackdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZq" = ( +/obj/item/weapon/reagent_containers/food/snacks/milosoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZw" = ( +/obj/item/clothing/ears/earring/dangle/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZx" = ( +/obj/item/integrated_circuit/input/button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZA" = ( +/obj/machinery/gateway/brass{ + dir = 10 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZB" = ( +/obj/structure/fireplace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"mZK" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/pink_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nam" = ( +/obj/item/weapon/storage/backpack/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nan" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nat" = ( +/obj/item/clothing/suit/space/void/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nau" = ( +/obj/item/stack/material/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naC" = ( +/obj/item/poi/pascalb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naL" = ( +/obj/item/clothing/accessory/maid_arms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naM" = ( +/obj/item/weapon/reagent_containers/food/snacks/grub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naP" = ( +/obj/item/clothing/accessory/solgov/department/exploration/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naS" = ( +/obj/item/clothing/under/technomancer/master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naT" = ( +/obj/item/device/multitool/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"naY" = ( +/obj/item/weapon/circuitboard/protolathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nba" = ( +/obj/item/weapon/storage/backpack/satchel/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbf" = ( +/obj/item/weapon/circuitboard/card, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbi" = ( +/obj/item/stack/lightpole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbk" = ( +/obj/item/clothing/under/teshari/undercoat/jobs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbl" = ( +/obj/structure/sign/flag/vir/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbr" = ( +/obj/item/clothing/suit/armor/combat/crusader_costume/lucky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbv" = ( +/obj/item/weapon/storage/bag/fossils, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nby" = ( +/obj/item/weapon/bedsheet/cosmosdouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbG" = ( +/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbH" = ( +/obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbI" = ( +/obj/item/clothing/suit/storage/toggle/tesharicoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbK" = ( +/obj/item/weapon/storage/backpack/satchel/withwallet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbP" = ( +/obj/item/weapon/circuitboard/grounding_rod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbV" = ( +/obj/machinery/computer/prisoner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbW" = ( +/obj/item/clothing/head/wizard/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbX" = ( +/obj/item/weapon/storage/backpack/dufflebag/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nbY" = ( +/obj/item/clothing/suit/space/vox/civ/bartender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nca" = ( +/obj/item/weapon/circuitboard/gatewaycontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncb" = ( +/obj/machinery/gateway/brass{ + dir = 5 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncc" = ( +/obj/structure/simple_door/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncd" = ( +/obj/item/clothing/accessory/holster/leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncw" = ( +/obj/item/weapon/paper/jobs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncN" = ( +/obj/item/clothing/under/pants/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncU" = ( +/obj/item/clothing/shoes/black/cuffs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncV" = ( +/obj/item/clothing/shoes/boots/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncW" = ( +/obj/item/clothing/under/teshari/smock/dress/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ncX" = ( +/obj/item/mecha_parts/chassis/odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndb" = ( +/obj/item/toy/cat_toy/rod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndj" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/vegration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndk" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndq" = ( +/obj/structure/extraction_point, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndr" = ( +/obj/structure/barricade/cutout/law, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndA" = ( +/obj/mecha/combat/fighter/scoralis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndL" = ( +/obj/item/weapon/storage/box/glass_extras/sticks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndM" = ( +/obj/item/weapon/storage/pill_bottle/dexalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndN" = ( +/obj/item/weapon/rig/hazard/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndP" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndQ" = ( +/mob/living/simple_mob/animal/passive/fish/solarfish, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"ndT" = ( +/obj/structure/largecrate/piano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndU" = ( +/obj/item/weapon/spell/summon/summon_ward, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ndW" = ( +/mob/living/simple_mob/vore/solargrub{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ned" = ( +/obj/item/clothing/accessory/armband/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neh" = ( +/obj/structure/sign/kiddieplaque/poi2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nem" = ( +/obj/item/clothing/accessory/solgov/rank/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neB" = ( +/obj/structure/largecrate/tits, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neI" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer/o4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neL" = ( +/obj/item/weapon/gun/launcher/confetti_cannon/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neM" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/cosmic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"neX" = ( +/obj/item/clothing/shoes/boots/ranger/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfb" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfh" = ( +/obj/item/weapon/storage/box/mechabeacons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfl" = ( +/obj/structure/sign/greencross, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfm" = ( +/obj/item/weapon/implantcase/health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfn" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/raissue142, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfq" = ( +/obj/item/seeds/vale, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfu" = ( +/mob/living/simple_mob/blob/spore/infesting{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nfv" = ( +/obj/item/device/core_sampler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfw" = ( +/obj/item/weapon/card/id/engineering/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfF" = ( +/obj/structure/largecrate/animal/cat/bones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfG" = ( +/obj/item/weapon/bedsheet/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfH" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/oak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfI" = ( +/obj/structure/ghost_pod/manual/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfT" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nfW" = ( +/obj/item/weapon/implantcase/tracking, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngb" = ( +/obj/item/weapon/card/id/external, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngc" = ( +/obj/machinery/gateway/brass{ + dir = 8 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngf" = ( +/obj/item/clothing/under/clown/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngj" = ( +/obj/structure/sign/warning/engineering_access, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngm" = ( +/obj/item/clothing/under/dress/antediluvian/sheerless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngp" = ( +/obj/item/trash/brainzsnax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngr" = ( +/obj/structure/sign/levels/security/forensics/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngu" = ( +/obj/item/organ/internal/kidneys/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngy" = ( +/obj/structure/closet/l3closet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngz" = ( +/obj/item/clothing/accessory/scarf/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngA" = ( +/obj/machinery/firealarm/angled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngF" = ( +/obj/item/clothing/glasses/meson/aviator/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngL" = ( +/obj/item/seeds/rhubarb, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngO" = ( +/obj/item/stack/material/wax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngU" = ( +/obj/item/clothing/head/helmet/space/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ngZ" = ( +/obj/structure/sign/christmas/lights, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhc" = ( +/obj/item/weapon/storage/fancy/blackcandle_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhj" = ( +/obj/item/clothing/suit/storage/vest/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhr" = ( +/obj/item/weapon/cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhu" = ( +/obj/item/clothing/head/tesh_hood/standard/black_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhA" = ( +/obj/structure/closet/secure_closet/egg/nevrean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhJ" = ( +/obj/item/device/integrated_electronics/detailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhT" = ( +/obj/item/clothing/under/corp/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nhZ" = ( +/obj/item/ammo_magazine/tp23s/highpower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nie" = ( +/obj/machinery/atmospherics/valve, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nig" = ( +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nij" = ( +/obj/item/weapon/stamp/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nis" = ( +/obj/item/clothing/glasses/hud/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"niz" = ( +/mob/living/simple_mob/mobs_monsters/clowns/mayor{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"niA" = ( +/obj/item/weapon/gun/energy/lasershotgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"niL" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"niT" = ( +/obj/machinery/mech_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"niW" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/raissue147, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"niZ" = ( +/obj/item/weapon/circuitboard/machine/power_turbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njg" = ( +/obj/item/surplus_voucher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njr" = ( +/obj/item/clothing/head/shiny_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njv" = ( +/obj/item/ammo_casing/microbattery/combat/ion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njw" = ( +/obj/item/clothing/head/hood/toggleable/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njE" = ( +/obj/item/clothing/glasses/sunglasses/blindfold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njF" = ( +/obj/item/clothing/suit/storage/det_trench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njG" = ( +/obj/machinery/chemical_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njR" = ( +/obj/item/weapon/airlock_electronics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"njT" = ( +/obj/item/clothing/ears/earring/stud/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkf" = ( +/obj/item/seeds/amauri, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkh" = ( +/obj/structure/prop/machine/sorter/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkr" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nku" = ( +/obj/item/ammo_magazine/asval/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nky" = ( +/mob/living/simple_mob/animal/sif/tymisian{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nkD" = ( +/obj/structure/noticeboard/anomaly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkE" = ( +/obj/item/weapon/storage/bible/fluff/amina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkI" = ( +/obj/item/clothing/head/helmet/bucket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nkS" = ( +/obj/item/toy/mecha/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlc" = ( +/obj/machinery/door/airlock/angled_bay/double/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlf" = ( +/obj/item/capture_crystal/ultra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlk" = ( +/obj/item/clothing/head/helmet/space/void/refurb/mercenary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlm" = ( +/obj/item/weapon/disk/limb/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlp" = ( +/obj/item/weapon/paper/awaygate/snowfield/activation_order, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nls" = ( +/obj/structure/sign/warning/biohazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlv" = ( +/obj/item/clothing/accessory/fluff/vasharr_pendant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlB" = ( +/obj/structure/sign/directions/dorms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlK" = ( +/obj/item/clothing/under/skirt/colorable/swept, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlN" = ( +/obj/structure/prop/war/tgmc_missile/napalm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlP" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlV" = ( +/obj/item/clothing/head/hood/winter/christmasgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nlW" = ( +/obj/item/stack/cable_coil/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmd" = ( +/obj/item/weapon/gun/energy/stunrevolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmi" = ( +/obj/machinery/portable_atmospherics/canister/empty/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmj" = ( +/obj/item/clothing/accessory/solgov/specialty/counselor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmv" = ( +/obj/structure/sign/level/ground, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmD" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/yellow_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmM" = ( +/obj/item/seeds/sunflowerseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmQ" = ( +/obj/item/weapon/storage/bag/circuits/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nmX" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/psilocybin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnn" = ( +/obj/item/weapon/circuitboard/status_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nno" = ( +/obj/item/weapon/disk/integrated_circuit/upgrade/illegal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnp" = ( +/obj/item/stack/flag/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nns" = ( +/obj/item/clothing/suit/storage/vest/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnt" = ( +/obj/item/weapon/storage/vore_egg/bugcocoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnu" = ( +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnz" = ( +/mob/living/simple_mob/humanoid/cultist/elite{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nnE" = ( +/obj/item/weapon/storage/quickdraw/syringe_case/bonemed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnL" = ( +/obj/machinery/vending/wallmed1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnM" = ( +/obj/item/seeds, +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnX" = ( +/obj/item/clothing/suit/engicost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nnZ" = ( +/obj/structure/table/darkglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noi" = ( +/obj/machinery/light/spot/no_nightshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nol" = ( +/obj/item/weapon/disk/species, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noo" = ( +/obj/item/weapon/storage/box/evidence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nop" = ( +/obj/structure/sign/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nor" = ( +/obj/item/clothing/under/rank/head_of_security/jensen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noB" = ( +/obj/item/weapon/archaeological_find, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noG" = ( +/obj/item/device/healthanalyzer/improved, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noM" = ( +/obj/item/weapon/card/id/event/accessset/itg/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noU" = ( +/obj/machinery/vending/donksoft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"noV" = ( +/obj/item/clothing/under/shorts/jeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npa" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npb" = ( +/obj/item/weapon/storage/box/glasses/rocks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npf" = ( +/obj/item/ammo_magazine/m16/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nph" = ( +/obj/structure/sign/bigname/seg_6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npq" = ( +/obj/item/device/quantum_pad_booster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nps" = ( +/obj/item/clothing/suit/armor/pcarrier/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npt" = ( +/obj/item/ammo_magazine/m45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npy" = ( +/obj/structure/closet/walllocker_double/hydrant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npG" = ( +/obj/item/clothing/mask/lacemask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npJ" = ( +/obj/item/weapon/material/butterflyblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npL" = ( +/obj/item/clothing/suit/storage/solgov/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npO" = ( +/obj/item/weapon/gun/energy/kinetic_accelerator/minebot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npV" = ( +/obj/item/stack/material/quartz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"npX" = ( +/obj/item/organ/internal/kidneys/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqj" = ( +/obj/item/weapon/gun/energy/staff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nql" = ( +/obj/item/weapon/implantcase/adrenalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqv" = ( +/obj/item/weapon/reagent_containers/glass/bottle/tramadol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqG" = ( +/obj/item/weapon/card/id/civilian/service/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqL" = ( +/obj/item/ammo_casing/a9mm/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqN" = ( +/obj/item/clothing/accessory/collar/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqO" = ( +/obj/structure/event/present, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqP" = ( +/obj/item/clothing/mask/gas/zaddat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqY" = ( +/obj/item/slime_irradiator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nqZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/makaroni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nro" = ( +/obj/item/weapon/rig/protean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nru" = ( +/obj/item/weapon/dice/d4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nry" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/matcha_latte, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nrA" = ( +/obj/item/weapon/spell/aura/biomed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nrF" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/smw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nrJ" = ( +/obj/item/clothing/under/moderncoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nrL" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nrV" = ( +/obj/item/weapon/cartridge/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsd" = ( +/obj/item/weapon/circuitboard/security/tv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsi" = ( +/obj/item/ammo_casing/a127x108/hv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsj" = ( +/obj/item/clothing/under/solgov/utility/sifguard/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsv" = ( +/obj/item/clothing/head/helmet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsA" = ( +/obj/item/clothing/suit/armor/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsC" = ( +/obj/item/ammo_magazine/m75/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsF" = ( +/obj/item/modular_computer/console/preset/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsJ" = ( +/obj/item/integrated_circuit/converter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsM" = ( +/obj/machinery/light/spot/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsO" = ( +/obj/item/clothing/under/wetsuit_skimpy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsP" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsQ" = ( +/obj/item/clothing/glasses/sunglasses/sechud/aviator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsS" = ( +/obj/item/clothing/suit/skeleton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nsY" = ( +/obj/item/clothing/suit/storage/fluff/takirasuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nta" = ( +/obj/item/clothing/gloves/fluff/techpriestgloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nti" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/braincake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntu" = ( +/obj/item/stack/tile/floor/eris/white/gray_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntx" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntA" = ( +/obj/item/clothing/suit/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntB" = ( +/obj/item/weapon/material/knife/machete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/threemileisland, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ntI" = ( +/obj/item/weapon/dnainjector/antiinsulation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nui" = ( +/obj/machinery/power/rtg/kugelblitz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"num" = ( +/obj/machinery/suit_cycler/vintage/tmedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuo" = ( +/obj/item/device/electronic_assembly/wallmount, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nus" = ( +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuu" = ( +/obj/item/clothing/under/fluff/aluranevines, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuz" = ( +/obj/item/canvas/twentythree_twentythree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuD" = ( +/obj/item/clothing/suit/armor/captain/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuF" = ( +/obj/structure/bed/chair/comfy/rounded/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuM" = ( +/obj/item/weapon/reagent_containers/food/condiment/mustard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nuY" = ( +/obj/item/weapon/dnainjector/antihallucination, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nve" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/vendhotdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvf" = ( +/obj/item/weapon/gun/energy/sizegun/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvk" = ( +/obj/machinery/smartfridge/chemistry/chemvator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvt" = ( +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvy" = ( +/obj/machinery/mining/brace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvC" = ( +/obj/item/toy/griffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvD" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/para, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvJ" = ( +/obj/item/weapon/commcard/int_aff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvL" = ( +/obj/structure/reflector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nvT" = ( +/obj/item/weapon/disk/design_disk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwa" = ( +/obj/item/device/radio/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwc" = ( +/obj/item/weapon/circuitboard/biogenerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwi" = ( +/obj/item/weapon/storage/vore_egg/chocolate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwn" = ( +/obj/item/weapon/broken_bottle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwp" = ( +/obj/item/flag/fivearrows/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwq" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwu" = ( +/obj/item/seeds/grapeseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwy" = ( +/obj/item/weapon/weldpack/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwB" = ( +/obj/item/weapon/circuitboard/unary_atmos/cooler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwD" = ( +/obj/item/trash/unajerky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwI" = ( +/obj/item/clothing/under/cheongsam/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwM" = ( +/obj/item/weapon/broken_gun/laser_retro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwN" = ( +/obj/item/weapon/shield/riot/tele, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwP" = ( +/obj/structure/particle_accelerator/power_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwS" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nwZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/honey_candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxa" = ( +/obj/item/weapon/reagent_containers/food/snacks/amanita_pie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxb" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxf" = ( +/obj/item/clothing/under/pants/chaps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxg" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxj" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxm" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxo" = ( +/obj/machinery/door/blast/gate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxp" = ( +/mob/living/simple_mob/animal/passive/cat/kitten, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nxr" = ( +/obj/item/clothing/head/hood/galahad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxx" = ( +/obj/item/device/personal_shield_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxy" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxz" = ( +/obj/item/weapon/reagent_containers/food/snacks/bangersandmash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxF" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxH" = ( +/obj/item/clothing/under/rank/khi/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxM" = ( +/obj/item/weapon/storage/backpack/sport/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxQ" = ( +/obj/structure/barricade/cutout/cultist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nxT" = ( +/obj/item/stack/material/graphite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nye" = ( +/obj/item/seeds/cocoapodseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyg" = ( +/obj/item/clothing/suit/space/void/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyi" = ( +/obj/item/weapon/circuitboard/machine/vitals_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyj" = ( +/obj/machinery/door/airlock/angled_bay/vault, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyp" = ( +/mob/living/simple_mob/animal/passive/fish/trout, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"nyr" = ( +/obj/item/clothing/head/hood/winter/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyu" = ( +/obj/structure/closet/body_bag/cryobag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyE" = ( +/obj/item/clothing/under/rank/khi/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyG" = ( +/obj/structure/closet/crate/rcd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyI" = ( +/obj/item/weapon/spacecasinocash/c10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyN" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyQ" = ( +/obj/item/clothing/head/helmet/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyR" = ( +/obj/machinery/transhuman/synthprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyW" = ( +/obj/item/integrated_circuit/logic/binary/jklatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyX" = ( +/obj/item/weapon/reagent_containers/pill/corophizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyY" = ( +/obj/item/inflatable/door/torn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nyZ" = ( +/obj/item/weapon/circuitboard/mining_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzc" = ( +/obj/item/weapon/digestion_remains/skull/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzf" = ( +/obj/item/integrated_circuit/input/adjacent_locator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzj" = ( +/obj/item/integrated_circuit/output/led/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzl" = ( +/obj/item/instrument/banjo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzu" = ( +/obj/item/clothing/head/hood_vr/hotdog_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzF" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzG" = ( +/obj/structure/prop/nt_biocan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzH" = ( +/obj/item/weapon/strangerock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzM" = ( +/obj/item/clothing/head/kippa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzX" = ( +/obj/item/integrated_circuit/reagent/injector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nzZ" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAa" = ( +/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAb" = ( +/obj/structure/noticeboard/nanite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAf" = ( +/obj/item/clothing/under/solgov/utility/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAh" = ( +/obj/item/clothing/head/crown/goose_queen/christmas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAn" = ( +/obj/item/weapon/storage/bag/circuits/mini/transfer/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAp" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat/fedcapt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAB" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/science/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAC" = ( +/obj/item/clothing/head/taqiyah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAD" = ( +/obj/item/clothing/under/yw/rank/security/formal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nAL" = ( +/obj/item/stack/material/fur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBb" = ( +/obj/item/weapon/circuitboard/mecha/durand/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBl" = ( +/obj/structure/sign/department/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBm" = ( +/obj/mecha/combat/marauder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBo" = ( +/obj/item/clothing/accessory/badge/holo/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBr" = ( +/obj/item/clothing/accessory/storage/pouches/large/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBv" = ( +/obj/structure/sign/department/toxins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBw" = ( +/obj/item/weapon/storage/toolbox/lunchbox/cti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBx" = ( +/obj/item/weapon/gun/energy/modular/cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBy" = ( +/obj/item/weapon/spell/projectile/beam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBD" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBE" = ( +/obj/item/toy/plushie/spider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBN" = ( +/obj/item/clothing/accessory/solgov/department/command/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBO" = ( +/obj/item/clothing/head/beret/corp/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBP" = ( +/obj/item/clothing/under/rank/paramedunidark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nBW" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb02, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCf" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCg" = ( +/obj/item/ammo_magazine/pitchmag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCi" = ( +/obj/item/weapon/storage/box/traumainjectors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCj" = ( +/obj/item/clothing/gloves/light_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCs" = ( +/obj/item/toy/plushie/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCH" = ( +/obj/item/clothing/head/helmet/space/void/medical/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCO" = ( +/obj/item/clothing/head/tesh_hood/standard/yellow_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCS" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nCU" = ( +/obj/structure/prop/war/warhead3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nDi" = ( +/obj/item/ammo_magazine/ammo_box/b12g, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nDQ" = ( +/obj/item/clothing/mask/gas/sechailer/swat/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nDR" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEd" = ( +/obj/item/rig_module/gauntlets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEe" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEg" = ( +/obj/item/pizzabox/mushroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEh" = ( +/obj/item/clothing/head/helmet/space/vox/civ/engineer/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEj" = ( +/obj/machinery/atmospherics/trinary/mixer/t_mixer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEw" = ( +/obj/item/clothing/under/pants/altevian/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEG" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress/star{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nER" = ( +/obj/item/toy/figure/metro_patrolman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nES" = ( +/obj/item/weapon/storage/rollingpapers/blunt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nEU" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/jani, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFc" = ( +/obj/item/stack/animalhide/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFi" = ( +/obj/item/clothing/under/dress/goddess, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFl" = ( +/obj/item/clothing/under/yw/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFs" = ( +/obj/item/ammo_magazine/ammo_box/b12g/stunshell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFu" = ( +/obj/machinery/porta_turret/lasertag/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFv" = ( +/obj/machinery/am_shielding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFF" = ( +/obj/structure/salvageable/console_broken_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFK" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/alma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFM" = ( +/obj/structure/sign/department/shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFN" = ( +/obj/item/clothing/head/fluff/zao, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFS" = ( +/obj/item/clothing/shoes/flats/white/color/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nFV" = ( +/obj/item/seeds/eggyplant, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGp" = ( +/obj/item/weapon/storage/pouch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGq" = ( +/mob/living/simple_mob/creature/cult/strong{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nGr" = ( +/obj/item/weapon/grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGy" = ( +/obj/item/weapon/vehicle_assembly/quadtrailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGE" = ( +/obj/structure/bed/chair/bay/comfy/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGL" = ( +/obj/item/toy/plushie/octopus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGN" = ( +/obj/structure/sign/hangar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGT" = ( +/obj/item/weapon/sword/fluff/joanaria, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nGY" = ( +/obj/item/ammo_magazine/m38/giskard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHa" = ( +/obj/item/weapon/reagent_containers/food/snacks/ricecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHk" = ( +/mob/living/simple_mob/mechanical/mecha/hoverpod/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nHl" = ( +/obj/structure/sign/warning/siphon_valve, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHm" = ( +/obj/machinery/disease2/diseaseanalyser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHp" = ( +/obj/structure/sign/directions/cargo/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHr" = ( +/obj/item/seeds/poppyseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHu" = ( +/obj/item/clothing/suit/storage/hazardvest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHK" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHO" = ( +/obj/item/clothing/head/hood/mocha_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHU" = ( +/obj/machinery/vending/foodfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nHW" = ( +/obj/machinery/flasher/portable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIe" = ( +/obj/machinery/suit_cycler/vintage/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIg" = ( +/obj/item/clothing/under/gimmick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIk" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIm" = ( +/obj/item/seeds/weeds, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIn" = ( +/obj/structure/sign/levels/engineering/gravgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIo" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIq" = ( +/obj/structure/closet/toolcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIu" = ( +/obj/vehicle/boat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIA" = ( +/obj/item/integrated_circuit/input/local_locator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIE" = ( +/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIF" = ( +/mob/living/simple_mob/vore/woof/hostile/horrible{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nIH" = ( +/obj/item/weapon/card/id/event/accessset/itg/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIJ" = ( +/obj/item/projectile/bullet/rifle/a545, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIL" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIO" = ( +/obj/structure/dispenser/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIR" = ( +/obj/mecha/combat/fighter/allure/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIT" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/o6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nIX" = ( +/obj/item/gunbox/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJa" = ( +/obj/item/ammo_casing/a12g/beanbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJg" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJn" = ( +/obj/structure/cable/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJp" = ( +/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJq" = ( +/obj/machinery/atmospherics/unary/heater/sauna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJr" = ( +/obj/structure/table/rack/gun_rack/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJt" = ( +/obj/item/seeds/poisonberryseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJv" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJw" = ( +/obj/item/clothing/head/beret/centcom/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJz" = ( +/obj/item/clothing/suit/space/void/autolok, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJE" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJH" = ( +/obj/item/clothing/suit/storage/solgov/service/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJJ" = ( +/obj/item/stack/tile/wood/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJU" = ( +/obj/item/weapon/book/codex/lore/news, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJW" = ( +/obj/structure/musician/piano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nJY" = ( +/obj/item/weapon/stool/baystool/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKa" = ( +/obj/item/clothing/glasses/hud/health/aviator/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKb" = ( +/obj/item/weapon/card/id/talon/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKd" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/molniya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKj" = ( +/obj/item/weapon/circuitboard/med_data/pcu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKp" = ( +/obj/item/ammo_magazine/ammo_box/b44, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKw" = ( +/obj/structure/cult/forge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKD" = ( +/obj/structure/closet/crate/mimic/dangerous, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKK" = ( +/obj/item/clothing/suit/storage/vest/heavy/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKN" = ( +/obj/item/weapon/melee/telebaton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKO" = ( +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKS" = ( +/obj/item/weapon/surgical/bonegel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKT" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "7" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nKY" = ( +/obj/structure/closet/crate/cooper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLb" = ( +/obj/item/weapon/storage/mrebag/menu3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLd" = ( +/obj/item/weapon/reagent_containers/food/drinks/jar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLk" = ( +/obj/structure/signpost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLr" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/fal{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nLx" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLy" = ( +/obj/item/weapon/plantspray/pests/old/phosmet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLz" = ( +/obj/item/organ/internal/stomach/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLA" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLD" = ( +/obj/item/ammo_casing/smartgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLE" = ( +/obj/item/ammo_casing/a45lc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLF" = ( +/obj/item/stack/cable_coil/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLM" = ( +/obj/random/outcrop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nLO" = ( +/obj/item/seeds/tobaccoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMa" = ( +/obj/item/weapon/reagent_containers/food/snacks/hakarl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMc" = ( +/obj/item/pipe/directional, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMk" = ( +/obj/item/clothing/suit/space/void/engineering/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMl" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/kelotane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMo" = ( +/obj/machinery/door/blast/radproof/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMs" = ( +/obj/item/weapon/card/id/civilian/internal_affairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMv" = ( +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMC" = ( +/obj/item/device/pda/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nME" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMO" = ( +/obj/item/ammo_magazine/cell_mag/combat/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nMU" = ( +/obj/item/weapon/dnainjector/antitele, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNa" = ( +/obj/item/clothing/head/soft/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNb" = ( +/obj/item/clothing/head/hood/ian_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNf" = ( +/obj/item/weapon/gun/projectile/cell_loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNh" = ( +/obj/item/ammo_casing/a45/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNj" = ( +/mob/living/simple_mob/vore/aggressive/dragon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nNs" = ( +/obj/machinery/sleep_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNx" = ( +/obj/item/clothing/under/solgov/utility/army/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNy" = ( +/obj/item/clothing/under/swimsuit/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNC" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNT" = ( +/obj/item/seeds/vanilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nNV" = ( +/mob/living/simple_mob/vore/aggressive/mimic/closet{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nOb" = ( +/obj/structure/closet/walllocker_double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOh" = ( +/obj/item/poster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOm" = ( +/obj/item/weapon/implant/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOn" = ( +/obj/item/clothing/under/dress/sundress_pinkshort, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOy" = ( +/obj/item/clothing/suit/storage/toggle/peacoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOF" = ( +/obj/item/weapon/book/manual/anomaly_testing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOJ" = ( +/obj/structure/closet/crate/secure/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOK" = ( +/obj/item/clothing/under/cohesion/striped/testfull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOM" = ( +/obj/item/clothing/under/away/daedalus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nON" = ( +/obj/item/clothing/under/axis/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOP" = ( +/obj/machinery/power/port_gen/pacman/super/potato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOS" = ( +/obj/item/weapon/reagent_containers/food/snacks/bugball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nOX" = ( +/mob/living/simple_mob/slime/xenobio/yellow{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nPc" = ( +/obj/item/weapon/paper/awaygate/snowfield/note, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPi" = ( +/obj/item/clothing/mask/gas/sechailer/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPk" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPm" = ( +/obj/item/weapon/circuitboard/shuttle_console/ferry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPw" = ( +/obj/item/weapon/reagent_containers/food/drinks/tea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPx" = ( +/obj/item/ammo_casing/microbattery/medical/normalsize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPy" = ( +/obj/item/weapon/storage/backpack/saddlebag/tempest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPE" = ( +/obj/item/clothing/mask/pig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPG" = ( +/obj/item/clothing/under/solgov/pt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPH" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "17" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPM" = ( +/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPN" = ( +/obj/item/modular_computer/console/preset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPT" = ( +/obj/structure/sign/level/one, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nPW" = ( +/obj/item/weapon/grenade/chem_grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQd" = ( +/obj/item/weapon/surgical/scalpel/laser1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQe" = ( +/obj/item/weapon/storage/belt/medical/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQq" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nQt" = ( +/obj/item/clothing/under/fluff/noel_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQw" = ( +/obj/structure/bed/chair/sofa/corner/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQy" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQC" = ( +/obj/structure/closet/walllocker/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQG" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQI" = ( +/obj/item/clothing/accessory/solgov/department/medical/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQQ" = ( +/mob/living/simple_mob/otie{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nQT" = ( +/obj/item/weapon/gun/energy/modular/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQY" = ( +/obj/item/clothing/suit/space/void/mining/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nQZ" = ( +/obj/item/clothing/mask/gas/sexyclown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRa" = ( +/obj/item/clothing/under/rank/khi/civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRb" = ( +/obj/item/clothing/suit/storage/miljacket/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRk" = ( +/obj/item/ammo_magazine/ammo_box/b45/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRp" = ( +/obj/item/clothing/accessory/bracelet/material/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRr" = ( +/obj/item/clothing/suit/storage/bomber/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRt" = ( +/obj/machinery/smartfridge/produce/persistent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRu" = ( +/obj/item/instrument/trombone/spectral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRw" = ( +/obj/item/stack/tile/floor/eris/dark/monofloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRC" = ( +/obj/item/weapon/grenade/spawnergrenade/spirit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRP" = ( +/obj/structure/shuttle/engine/heater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRW" = ( +/obj/item/weapon/storage/backpack/satchel/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nRX" = ( +/obj/item/ammo_magazine/clip/c9mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSd" = ( +/obj/item/clothing/suit/storage/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSe" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSi" = ( +/obj/item/clothing/head/tesh_hood/standard/black_midgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSj" = ( +/obj/item/clothing/under/cowboy/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSA" = ( +/obj/item/clothing/suit/space/void/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSC" = ( +/obj/item/clothing/head/service/army/garrison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSK" = ( +/obj/item/ammo_magazine/m9mm/vp70, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSL" = ( +/obj/item/clothing/head/helmet/space/void/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nST" = ( +/obj/item/clothing/under/rank/vice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nSY" = ( +/obj/machinery/atmospherics/unary/outlet_injector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTa" = ( +/obj/item/clothing/suit/storage/solgov/dress/fleet/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTh" = ( +/obj/item/honey_frame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTl" = ( +/obj/item/clothing/suit/storage/terran/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTm" = ( +/obj/item/clothing/accessory/armor/armguards/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTp" = ( +/obj/structure/loot_pile/surface/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTD" = ( +/obj/item/weapon/circuitboard/mecha/scarab/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTF" = ( +/obj/structure/prop/machine/core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTH" = ( +/obj/item/clothing/suit/space/syndicate/black/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTS" = ( +/obj/item/clothing/head/helmet/space/syndicate/green/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nTU" = ( +/obj/item/integrated_circuit/arithmetic/multiplication, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUa" = ( +/obj/item/ore_chunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUb" = ( +/obj/structure/closet/lumber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUd" = ( +/obj/item/trash/snacktray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUe" = ( +/obj/item/weapon/storage/belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUu" = ( +/obj/item/ammo_magazine/m12gdrumjack/beanbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUy" = ( +/obj/item/trash/material/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUD" = ( +/obj/item/clothing/under/corp/confederacy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUN" = ( +/obj/item/weapon/rig/ch/clockwork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nUQ" = ( +/obj/item/clothing/accessory/armor/armorplate/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVb" = ( +/obj/item/weapon/melee/energy/sword/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVc" = ( +/obj/item/weapon/material/twohanded/fireaxe/scythe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVr" = ( +/obj/item/weapon/dnainjector/blindmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVz" = ( +/obj/item/trash/admints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVF" = ( +/obj/item/clothing/accessory/poncho/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVO" = ( +/obj/machinery/vending/event, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVP" = ( +/obj/item/stack/flag/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nVY" = ( +/obj/item/clothing/suit/storage/trench/fluff/octaviouscoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWh" = ( +/obj/item/stack/tile/carpet/geo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWi" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWk" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWn" = ( +/obj/item/clothing/under/rank/nullsuit/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWE" = ( +/obj/item/device/mmi/digital, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWN" = ( +/obj/machinery/atmospherics/valve/shutoff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWP" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/firefighter{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nWT" = ( +/obj/item/instrument/guitar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWU" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/USDF, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWX" = ( +/obj/item/clothing/head/helmet/space/void/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nWY" = ( +/obj/item/weapon/stock_parts/manipulator/pico, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXh" = ( +/obj/item/weapon/moneybag/vault, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXi" = ( +/obj/item/trash/koisbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXr" = ( +/obj/item/stack/material/lead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXt" = ( +/obj/item/weapon/gun/projectile/revolver/toy/sawnoff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXx" = ( +/obj/item/clothing/accessory/bracelet/material/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXH" = ( +/obj/item/device/holomap_beacon/deathsquad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXK" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXM" = ( +/obj/item/weapon/folder/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXN" = ( +/obj/machinery/vending/giftvendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXO" = ( +/obj/item/clothing/under/universalid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXW" = ( +/obj/item/clothing/head/terran/navy/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXX" = ( +/obj/item/clothing/head/helmet/solgov/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nXZ" = ( +/obj/item/weapon/card/id/event/altcard/greengold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYf" = ( +/obj/item/weapon/material/twohanded/spear/flint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYg" = ( +/obj/item/seeds/bloodtomatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYi" = ( +/obj/structure/table/bench/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYs" = ( +/obj/item/gunbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYx" = ( +/obj/item/weapon/reagent_containers/glass/bottle/mutagen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYA" = ( +/obj/structure/sign/flag/sol/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYC" = ( +/obj/item/weapon/circuitboard/ai_status_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYF" = ( +/obj/item/weapon/storage/box/injectors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYG" = ( +/obj/item/integrated_circuit/reagent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYK" = ( +/obj/structure/ship_munition/disperser_charge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYP" = ( +/obj/item/weapon/flame/lighter/zippo/fluff/melissa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nYQ" = ( +/obj/structure/window/phoronreinforced/full, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nYR" = ( +/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nYZ" = ( +/obj/machinery/petrification, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZc" = ( +/obj/item/flag/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZj" = ( +/mob/living/simple_mob/animal/wolf/direwolf/dog{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"nZm" = ( +/obj/structure/loot_pile/mecha/marauder/mauler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZw" = ( +/obj/item/weapon/inducer/unloaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZz" = ( +/obj/item/clothing/shoes/boots/winter/christmasgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZB" = ( +/obj/item/clothing/under/rank/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZI" = ( +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZK" = ( +/obj/item/seeds/glowberryseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZM" = ( +/obj/item/ammo_magazine/m9mm/compact/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZP" = ( +/obj/machinery/power/solar_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"nZZ" = ( +/obj/item/weapon/computer_hardware/processor_unit/photonic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oag" = ( +/obj/item/clothing/suit/captunic/capjacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oap" = ( +/obj/item/weapon/melee/augment/blade/arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oas" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/amara_hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oau" = ( +/obj/item/clothing/suit/storage/leather_jacket_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaD" = ( +/obj/item/clothing/mask/chewable/candy/pocky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaH" = ( +/obj/item/trash/candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaI" = ( +/obj/item/organ/internal/eyes/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaL" = ( +/obj/machinery/computer/cryopod/gateway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaN" = ( +/obj/item/device/electronic_assembly/large/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaS" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/narsian, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oaT" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oaY" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oaZ" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/manfromsnowyriver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obe" = ( +/obj/item/clothing/under/teshari/undercoat/standard/pink_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obm" = ( +/obj/item/ammo_casing/a45/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obq" = ( +/obj/item/seeds/shrinkshroom, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obu" = ( +/obj/structure/sign/atmos/n2o, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obz" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obD" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "34" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obF" = ( +/obj/item/weapon/grenade/chem_grenade/teargas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obI" = ( +/obj/item/clothing/head/cowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obP" = ( +/obj/structure/largecrate/animal/woofdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obQ" = ( +/obj/item/weapon/stock_parts/capacitor/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"obW" = ( +/obj/item/clothing/head/caphat/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"occ" = ( +/obj/item/weapon/forensics/sample_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocn" = ( +/obj/item/device/electronic_assembly/wallmount/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocp" = ( +/obj/item/clothing/suit/storage/solgov/service/fleet/snco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocB" = ( +/obj/item/weapon/backup_implanter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocD" = ( +/obj/item/weapon/reagent_containers/food/snacks/mashedpotato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocG" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/repeater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocI" = ( +/obj/item/clothing/shoes/hitops/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocJ" = ( +/obj/item/clothing/head/soft/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocP" = ( +/obj/item/weapon/disk/nifsoft/compliance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocQ" = ( +/obj/item/device/integrated_circuit_printer/all_upgrades, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ocS" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer/o6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odb" = ( +/obj/item/weapon/ruinedvirusdish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odd" = ( +/obj/item/clothing/head/halo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odg" = ( +/obj/item/weapon/gun/projectile/revolver/nagant/skinned, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odh" = ( +/obj/item/device/electronic_assembly/medium/default, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odo" = ( +/obj/machinery/chemical_dispenser/bar_coffee/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odr" = ( +/obj/item/clothing/shoes/boots/winter/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odz" = ( +/obj/item/ammo_casing/spent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odE" = ( +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odP" = ( +/obj/item/clothing/head/hood/lancelot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"odX" = ( +/obj/item/stack/material/aluminium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oed" = ( +/obj/item/weapon/storage/toolbox/electrical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oee" = ( +/obj/item/clothing/gloves/gauntlets/rig/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oen" = ( +/obj/item/weapon/circuitboard/mecha/gygax/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeq" = ( +/obj/machinery/atmospherics/tvalve/mirrored/bypass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oex" = ( +/obj/item/ammo_magazine/rpd/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeE" = ( +/obj/machinery/cryopod/robot/door/travel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeJ" = ( +/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeK" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeN" = ( +/obj/item/weapon/storage/fancy/crayons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeO" = ( +/obj/item/weapon/storage/box/commandkeys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oeP" = ( +/obj/item/weapon/implantcase/language, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofe" = ( +/obj/item/weapon/storage/vore_egg/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"off" = ( +/obj/item/clothing/head/helmet/thunderdome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofg" = ( +/obj/item/weapon/paper/Toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofh" = ( +/obj/item/weapon/circuitboard/body_designer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofm" = ( +/obj/item/clothing/under/lawyer/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofn" = ( +/obj/item/shield_projector/line/exosuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofp" = ( +/obj/item/weapon/reagent_containers/spray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofy" = ( +/obj/item/integrated_circuit/input/temperature_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofJ" = ( +/obj/structure/prop/fake_ai/dead/crashed_med_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofN" = ( +/obj/item/mecha_parts/mecha_equipment/runningboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofQ" = ( +/obj/item/weapon/spacecasinocash/c500, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofR" = ( +/obj/item/weapon/book/manual/engineering_singularity_safety, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ofV" = ( +/obj/item/ammo_magazine/molniya/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogb" = ( +/obj/item/weapon/reagent_containers/food/drinks/textmug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogd" = ( +/obj/item/clothing/mask/smokable/ecig/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogh" = ( +/obj/item/ammo_casing/a38/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogp" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag/o10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogq" = ( +/mob/living/simple_mob/humanoid/cultist/noodle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ogJ" = ( +/obj/item/weapon/bone/horn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogK" = ( +/obj/item/device/electronic_assembly/medium/radio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogM" = ( +/obj/item/clothing/accessory/solgov/specialty/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ogY" = ( +/obj/item/weapon/pen/crayon/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohf" = ( +/obj/item/weapon/cell/device/weapon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohj" = ( +/obj/item/weapon/circuitboard/recycler_stamper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohm" = ( +/obj/item/clothing/head/beret/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohn" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohs" = ( +/obj/item/pressurelock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohw" = ( +/obj/item/clothing/accessory/jacket/burgundy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohB" = ( +/obj/item/weapon/reagent_containers/food/snacks/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohD" = ( +/obj/item/rig_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohG" = ( +/obj/item/weapon/storage/box/fluff/koyoakimomi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohH" = ( +/obj/item/weapon/disk/limb/bishop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohI" = ( +/obj/item/integrated_circuit/input/advanced_locator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohS" = ( +/obj/structure/smoletrack/roadF, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohW" = ( +/obj/item/clothing/shoes/boots/ranger/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ohY" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oic" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/o2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oim" = ( +/obj/item/clothing/gloves/bluespace/emagged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oir" = ( +/obj/machinery/exonet_node/map, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oiD" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oiF" = ( +/obj/structure/prop/war/tgmc_missile_rack/keeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oiK" = ( +/obj/item/clothing/head/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oiT" = ( +/obj/item/clothing/suit/space/void/responseteam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojd" = ( +/obj/item/toy/plushie/borgplushie/drake/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojh" = ( +/obj/item/clothing/accessory/hawaiian_random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojn" = ( +/obj/item/weapon/lipstick/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojx" = ( +/obj/item/clothing/glasses/thermal/plain/jensen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojK" = ( +/mob/living/simple_mob/vore/alienanimals/succlet, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ojP" = ( +/obj/item/ammo_magazine/m45tommy/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojR" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/pint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ojS" = ( +/obj/item/weapon/broken_gun/c20r, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okb" = ( +/obj/item/ammo_magazine/chemdart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okd" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/peridaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okh" = ( +/obj/item/clothing/under/rank/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okm" = ( +/obj/item/weapon/handcuffs/cable/tape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okv" = ( +/obj/item/weapon/storage/box/syndie_kit/clerical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okz" = ( +/obj/item/weapon/storage/box/servicekeys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okE" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"okK" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/iaa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okM" = ( +/obj/item/modular_computer/tablet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"okR" = ( +/obj/item/weapon/inflatable_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olb" = ( +/obj/item/weapon/light/bulb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"old" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/bicaridine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oli" = ( +/obj/item/clothing/under/rank/security/corp/fluff/alva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olj" = ( +/obj/structure/anomaly_container, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oll" = ( +/obj/item/ammo_magazine/clip/c762/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oln" = ( +/obj/item/weapon/rig/eva/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olo" = ( +/obj/machinery/botany/extractor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olq" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olr" = ( +/obj/item/clothing/under/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ols" = ( +/obj/item/clothing/glasses/thermal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oly" = ( +/obj/item/rig_module/rad_shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olD" = ( +/obj/item/clothing/head/hood/winter/science/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olG" = ( +/obj/item/clothing/under/batter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olJ" = ( +/obj/item/clothing/accessory/solgov/torch_patch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatsteak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olS" = ( +/obj/machinery/conveyor/centcom_auto, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"olX" = ( +/obj/structure/largecrate/animal/guardmutant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omc" = ( +/obj/item/weapon/card/id/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omi" = ( +/obj/item/integrated_circuit/cryptography/rot13, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omo" = ( +/obj/item/integrated_circuit/logic/binary/rslatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omp" = ( +/obj/item/clothing/head/hood/winter/christmasred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omx" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/tp23s, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omA" = ( +/obj/item/weapon/pen/crayon/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omH" = ( +/obj/item/clothing/head/caphat/formal/fedcover, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omL" = ( +/obj/item/clothing/under/robe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"omX" = ( +/obj/machinery/atmospherics/unary/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ona" = ( +/obj/item/slimepotion/mutator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onb" = ( +/obj/item/integrated_circuit/list/at, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onc" = ( +/obj/machinery/airlock_sensor/airlock_interior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onh" = ( +/obj/item/weapon/reagent_containers/pill/tramadol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oni" = ( +/mob/living/simple_mob/animal/passive/mouse/rat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"onu" = ( +/obj/item/clothing/accessory/medal/gold/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onL" = ( +/obj/item/weapon/bone/leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onR" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onT" = ( +/obj/item/clothing/head/pelt/tigerpeltpink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onW" = ( +/obj/item/clothing/head/kitty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"onY" = ( +/obj/item/clothing/accessory/storage/knifeharness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooa" = ( +/obj/structure/table/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooi" = ( +/obj/machinery/door/airlock/glass_security/polarized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ook" = ( +/obj/item/weapon/storage/box/sinpockets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooJ" = ( +/obj/item/instrument/recorder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooL" = ( +/obj/item/clothing/head/fedora/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooN" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/excitingsuppermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooT" = ( +/obj/item/paiparts/capacitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooU" = ( +/obj/structure/closet/crate/wooden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooV" = ( +/obj/item/clothing/under/dress/goldwrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooW" = ( +/obj/structure/sign/atmos/o2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ooX" = ( +/obj/structure/bed/chair/sofa/bench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opg" = ( +/obj/item/device/integrated_circuit_printer/debug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opj" = ( +/obj/item/clothing/accessory/armor/legguards/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opo" = ( +/obj/item/projectile/bullet/rifle/a556/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opt" = ( +/obj/item/clothing/under/fluff/v_nanovest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opv" = ( +/obj/item/stack/tile/floor/eris/techmaint/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opD" = ( +/obj/item/clothing/accessory/badge/corporate_tag/veymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opE" = ( +/obj/item/weapon/circuitboard/mecha/scarab/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opF" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opI" = ( +/mob/living/simple_mob/animal/giant_spider/tunneler{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"opQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opR" = ( +/obj/structure/dark_portal/minion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opS" = ( +/obj/item/clothing/head/beaverhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opV" = ( +/obj/item/weapon/storage/backpack/saddlebag_common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opX" = ( +/obj/item/clothing/under/fluff/tikorak_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"opZ" = ( +/obj/item/weapon/refill_cartridge/universal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqc" = ( +/obj/item/weapon/gun/projectile/revolver/mateba, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqd" = ( +/obj/item/ammo_magazine/m9mm/vp70/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqi" = ( +/obj/machinery/atmospheric_field_generator/perma/underdoors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqo" = ( +/obj/structure/frame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqp" = ( +/obj/item/ammo_magazine/m9mm/compact/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqr" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqw" = ( +/obj/item/clothing/head/beret/solgov/survey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqy" = ( +/obj/machinery/atmospheric_field_generator/perma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqB" = ( +/obj/item/device/radio/headset/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqD" = ( +/obj/item/weapon/digestion_remains/skull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqM" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vox_hunting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqO" = ( +/obj/item/clothing/suit/kimono/earth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oqX" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/king, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ora" = ( +/obj/item/clothing/head/tinytophat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orb" = ( +/obj/item/weapon/gun/projectile/automatic/serdy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orf" = ( +/obj/item/clothing/head/helmet/space/void/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orj" = ( +/obj/item/clothing/under/skirt/loincloth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ork" = ( +/obj/item/trash/saturno, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orq" = ( +/obj/structure/curtain/bed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orr" = ( +/obj/item/clothing/head/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orv" = ( +/obj/item/weapon/rsp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orH" = ( +/obj/structure/snowman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orJ" = ( +/obj/item/weapon/storage/pill_bottle/carbon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orK" = ( +/obj/item/ammo_magazine/m9mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orO" = ( +/obj/machinery/clonepod/transhuman/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"orW" = ( +/obj/item/device/kit/paint/gygax/darkgygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osa" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osn" = ( +/obj/item/clothing/suit/armor/vest/ert/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oso" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osq" = ( +/obj/item/ammo_casing/a45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osv" = ( +/obj/item/weapon/storage/box/glasses/pint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osA" = ( +/obj/item/organ/internal/brain/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osG" = ( +/obj/structure/sign/deck/second, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osM" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"osN" = ( +/mob/living/simple_mob/shadekin/red{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"osQ" = ( +/obj/item/clothing/suit/storage/toggle/brown_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otk" = ( +/obj/item/ammo_magazine/ammo_box/b762/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otq" = ( +/obj/structure/closet/secure_closet/hos2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otr" = ( +/mob/living/simple_mob/slime/xenobio/purple{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"otz" = ( +/obj/structure/closet/crate/mimic/cointoss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otB" = ( +/obj/item/frame/extinguisher_cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otF" = ( +/obj/item/wheelchair/motor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otG" = ( +/obj/structure/sink/countertop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otK" = ( +/obj/item/weapon/deck/holder/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"otW" = ( +/obj/item/weapon/reagent_containers/hypospray/vial/tempest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oue" = ( +/obj/item/organ/internal/brain/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ouw" = ( +/obj/item/weapon/storage/pill_bottle/antitox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ouV" = ( +/obj/structure/bed/chair/bay/comfy/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ouY" = ( +/mob/living/simple_mob/vore/aggressive/mimic/airlock{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ovb" = ( +/obj/structure/sign/bigname/seg_3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovd" = ( +/obj/item/ammo_magazine/m545saw/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovi" = ( +/obj/item/weapon/circuitboard/arcade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovn" = ( +/obj/structure/bed/chair/comfy/rounded/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovw" = ( +/obj/item/integrated_circuit/output/sound/beepsky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovB" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/dylovene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovF" = ( +/obj/item/integrated_circuit/logic/conditional, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovG" = ( +/mob/living/simple_mob/animal/sif/glitterfly, +/mob/living/simple_mob/animal/sif/glitterfly/rare, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ovI" = ( +/obj/item/weapon/implant/death_alarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovL" = ( +/obj/item/integrated_circuit/input/externalbm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovM" = ( +/obj/structure/prop/alien/computer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovP" = ( +/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovU" = ( +/obj/item/weapon/implant/reagent_generator/savannah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovV" = ( +/obj/item/ammo_magazine/s38, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovW" = ( +/obj/item/ammo_casing/a45lc/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovX" = ( +/obj/item/weapon/storage/backpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovY" = ( +/obj/item/clothing/accessory/solgov/specialty/enlisted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ovZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owa" = ( +/obj/item/weapon/pickaxe/three_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owo" = ( +/obj/item/clothing/suit/space/void/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owv" = ( +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oww" = ( +/obj/item/weapon/digestion_remains/skull/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owz" = ( +/obj/item/clothing/under/librarian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owD" = ( +/obj/item/weapon/weldingtool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owH" = ( +/obj/item/clothing/accessory/armband/solgov/mp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owJ" = ( +/obj/item/ammo_magazine/asval, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owM" = ( +/obj/item/clothing/head/helmet/space/void/atmos/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owN" = ( +/obj/item/mecha_parts/part/odysseus_right_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"owP" = ( +/obj/item/ammo_magazine/ammo_box/b45/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxa" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/elite{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oxi" = ( +/obj/item/seeds/wabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxz" = ( +/obj/item/clothing/head/service/army/garrison/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxC" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tomatojuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxK" = ( +/obj/item/ammo_casing/a9mm/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxT" = ( +/obj/item/weapon/disk/integrated_circuit/upgrade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oxU" = ( +/obj/item/clothing/head/hardhat/dblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyg" = ( +/obj/item/clothing/mask/luchador/rudos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyp" = ( +/obj/item/clothing/head/pin/flower/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oys" = ( +/obj/item/weapon/storage/chewables/tobacco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyw" = ( +/obj/item/clothing/under/det/corporate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyx" = ( +/obj/item/weapon/reagent_containers/food/snacks/steamrolltealeaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyy" = ( +/obj/item/clothing/accessory/collar/casinosentientprize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyI" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyM" = ( +/obj/item/ammo_casing/a357/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oyX" = ( +/obj/item/weapon/reagent_containers/pill/dexalin_plus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oza" = ( +/obj/item/integrated_circuit/manipulation/grenade/frag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozb" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/wo1_monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozc" = ( +/obj/item/weapon/rcd/advanced/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozg" = ( +/obj/structure/closet/jequipcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozk" = ( +/obj/item/flag/icarus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozn" = ( +/obj/item/weapon/melee/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozr" = ( +/obj/item/clothing/head/pelt/wolfpeltblack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozz" = ( +/obj/item/weapon/reagent_containers/food/snacks/greentealeaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozC" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozG" = ( +/obj/item/mecha_parts/component/hull/lightweight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ozI" = ( +/obj/item/clothing/suit/space/void/exploration/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAc" = ( +/obj/item/mecha_parts/part/gygax_right_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAe" = ( +/obj/item/clothing/accessory/sash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAk" = ( +/obj/structure/casino_table/blackjack_r, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAD" = ( +/obj/structure/prop/dna_vault, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAP" = ( +/obj/item/seeds/vale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oAQ" = ( +/obj/item/clothing/under/solgov/utility/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBa" = ( +/obj/item/weapon/folder/red_hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBc" = ( +/obj/item/weapon/reagent_containers/glass/bottle/imidazoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBe" = ( +/obj/item/weapon/reagent_containers/food/snacks/cube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBh" = ( +/obj/item/weapon/reagent_containers/food/snacks/mars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBj" = ( +/obj/item/weapon/implant/backup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBl" = ( +/obj/item/clothing/mask/redscarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBs" = ( +/obj/item/weapon/bedsheet/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBx" = ( +/obj/item/weapon/cartridge/signal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBy" = ( +/obj/item/weapon/storage/bag/sheetsnatcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBA" = ( +/obj/item/weapon/material/knife/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBD" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBI" = ( +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBO" = ( +/obj/item/ammo_magazine/sam48, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBP" = ( +/obj/machinery/atmospherics/trinary/mixer/m_mixer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oBX" = ( +/mob/living/simple_mob/humanoid/pirate/las/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oCo" = ( +/obj/item/weapon/gun/projectile/revolver/cappeacekeeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCp" = ( +/obj/item/mecha_parts/part/durand_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCr" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/pizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCu" = ( +/obj/item/glass_jar/fish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCy" = ( +/obj/item/capture_crystal/cass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCC" = ( +/obj/item/toy/figure/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oCF" = ( +/obj/item/weapon/chaoscake_layer/nine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDm" = ( +/obj/item/weapon/storage/backpack/messenger/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDs" = ( +/obj/structure/closet/secure_closet/pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDL" = ( +/obj/machinery/door/airlock/angled_tgmc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDO" = ( +/obj/item/weapon/bedsheet/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDQ" = ( +/obj/item/clothing/head/tesh_hood/standard/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oDX" = ( +/obj/item/weapon/circuitboard/atmoscontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEa" = ( +/obj/structure/closet/body_bag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEb" = ( +/obj/item/weapon/reagent_containers/spray/windowsealant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEk" = ( +/obj/item/clothing/head/helmet/space/vox/civ/mechanic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEm" = ( +/obj/structure/loot_pile/maint/junk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEt" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEv" = ( +/mob/living/simple_mob/animal/space/goose/domesticated{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oEF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEK" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEQ" = ( +/obj/item/integrated_circuit/logic/binary/equals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oET" = ( +/obj/machinery/vending/snlvend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oEU" = ( +/obj/item/slimepotion/mimic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFa" = ( +/obj/item/clothing/glasses/fluff/spiffygogs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFe" = ( +/obj/item/weapon/xenobio/monkey_gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFq" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/shiny, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFt" = ( +/obj/item/clothing/head/helmet/space/void/refurb/research/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFC" = ( +/obj/item/clothing/glasses/sunglasses/sechud/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFG" = ( +/obj/item/weapon/gun/projectile/gyropistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFL" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFO" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFR" = ( +/obj/structure/sign/ironhammer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFW" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oFZ" = ( +/obj/item/weapon/disposable_teleporter/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGb" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGd" = ( +/obj/item/weapon/card/id/civilian/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGi" = ( +/obj/item/clothing/head/beret/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGm" = ( +/obj/item/weapon/reagent_containers/pill/dermaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGo" = ( +/obj/item/weapon/reagent_containers/glass/bottle/eznutrient, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGq" = ( +/obj/item/trash/ratpackramen/lacquer2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGG" = ( +/obj/item/weapon/banner/virgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGI" = ( +/obj/item/clothing/under/saare/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oGZ" = ( +/obj/item/clothing/under/color/lightred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHb" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHd" = ( +/obj/machinery/shield_gen/external, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHh" = ( +/obj/structure/closet/secure_closet/guncabinet/phase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHj" = ( +/obj/item/seeds/poisonberryseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHk" = ( +/obj/item/clothing/glasses/thermal/plain/eyepatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHs" = ( +/obj/machinery/ion_engine/fancy_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHy" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/memegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHz" = ( +/obj/item/clothing/accessory/scarf/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHC" = ( +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHG" = ( +/obj/item/clothing/accessory/altevian_badge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHJ" = ( +/obj/item/clothing/accessory/holster/waist/lanyard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHM" = ( +/obj/item/clothing/under/terran/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHO" = ( +/obj/item/weapon/paper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHT" = ( +/obj/item/weapon/dnainjector/nobreath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oHV" = ( +/obj/item/clothing/head/that, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIm" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/winebrandy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIn" = ( +/obj/item/weapon/storage/dicecup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIq" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheeseburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIu" = ( +/obj/item/clothing/under/overalls, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIJ" = ( +/obj/item/weapon/reagent_containers/food/condiment/hotsauce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oIR" = ( +/obj/item/seeds/goldappleseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJk" = ( +/obj/item/device/encryptionkey/heads/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJl" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/fal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJm" = ( +/obj/structure/loot_pile/surface/alien/end, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJn" = ( +/obj/item/weapon/implantcase/loyalty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJy" = ( +/obj/item/clothing/under/dress/lilacdress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJA" = ( +/obj/item/weapon/storage/backpack/satchel/hyd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJG" = ( +/obj/structure/simple_door/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJJ" = ( +/obj/fiftyspawner/purcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJR" = ( +/obj/item/clothing/head/hood/techpriest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oJS" = ( +/obj/structure/shuttle/engine/propulsion/burst/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKa" = ( +/obj/item/weapon/implant/organ/limbaugment/upperarm/medkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKh" = ( +/obj/item/organ/internal/liver/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKj" = ( +/obj/item/weapon/melee/goz_whitecane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKp" = ( +/obj/item/seeds/greengrapeseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKt" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKw" = ( +/obj/item/weapon/reagent_containers/food/snacks/cube/protein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKx" = ( +/obj/item/clothing/suit/space/void/atmos/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKy" = ( +/obj/structure/bed/chair/bay/chair/padded/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKD" = ( +/obj/item/weapon/storage/vore_egg/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKE" = ( +/obj/item/mecha_parts/mecha_equipment/storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oKW" = ( +/obj/item/clothing/under/teshari/undercoat/standard/brown_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLf" = ( +/mob/living/simple_mob/animal/passive/fish/rockfish, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"oLl" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLm" = ( +/obj/mecha/working/ripley/antique, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLp" = ( +/obj/structure/sign/department/telecoms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLu" = ( +/obj/structure/salvageable/implant_container_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLz" = ( +/obj/item/ammo_magazine/kord, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLA" = ( +/obj/item/ammo_magazine/ammo_box/b545/large/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLB" = ( +/obj/item/projectile/bullet/shotgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLD" = ( +/obj/item/clothing/suit/space/vox/civ/medical/geneticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLF" = ( +/obj/item/weapon/circuitboard/rdconsole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLH" = ( +/obj/item/weapon/stamp/solgovlogo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLL" = ( +/obj/structure/sign/department/interrogation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLN" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratveggies, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLP" = ( +/obj/item/weapon/gun/magnetic/railgun/flechette/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oLU" = ( +/mob/living/bot/medbot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oLV" = ( +/obj/item/clothing/ears/earring/dangle/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMh" = ( +/obj/item/weapon/cell/high/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMj" = ( +/obj/item/clothing/suit/space/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMm" = ( +/obj/item/organ/internal/xenos/plasmavessel/sentinel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMq" = ( +/obj/item/weapon/cell/device/weapon/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMr" = ( +/obj/item/clothing/under/fluff/eravik_vessi_3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMx" = ( +/obj/structure/prop/fake_ai/dead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oMU" = ( +/obj/structure/micro_tunnel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNi" = ( +/obj/structure/bed/chair/sofa/corner/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNl" = ( +/obj/item/device/electronic_assembly/implant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNt" = ( +/mob/living/simple_mob/animal/passive/dog/stray, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oNv" = ( +/obj/structure/simple_door/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNw" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNy" = ( +/obj/item/weapon/storage/mre/menu2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNB" = ( +/obj/item/weapon/storage/bagoplanets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNJ" = ( +/obj/item/ammo_magazine/fal/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNK" = ( +/obj/item/weapon/technomancer_core/bulky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNT" = ( +/obj/item/clothing/suit/space/void/syndicate_contract, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNW" = ( +/obj/item/weapon/spell/modifier/mend_all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oNZ" = ( +/obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOi" = ( +/obj/item/clothing/under/dress/formalred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOk" = ( +/obj/structure/casino_table/blackjack_m, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOv" = ( +/obj/item/mecha_parts/part/gygax_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOy" = ( +/obj/structure/sign/department/morgue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOC" = ( +/obj/item/clothing/suit/caution, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOE" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOL" = ( +/obj/item/weapon/digestion_remains/skull/vulpkanin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oON" = ( +/obj/item/clothing/accessory/wcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOQ" = ( +/obj/item/weapon/toy/desk/stellardelight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oOV" = ( +/obj/item/clothing/mask/gas/monkeymask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPh" = ( +/obj/item/clothing/under/cheongsam/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPj" = ( +/obj/structure/sign/warning/nosmoking_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPk" = ( +/obj/item/weapon/gun/launcher/grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPn" = ( +/obj/item/weapon/storage/bag/circuits/mini/output, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPp" = ( +/obj/item/device/nif/authenticbio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPH" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPI" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPM" = ( +/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPR" = ( +/obj/item/weapon/storage/backpack/dufflebag/cursed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oPU" = ( +/obj/item/clothing/under/dress/dress_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQa" = ( +/obj/item/clothing/suit/storage/toggle/yw/secjacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQc" = ( +/obj/machinery/fusion_fuel_injector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQd" = ( +/obj/item/weapon/card/id/security/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQm" = ( +/obj/item/weapon/implant/organ/limbaugment/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQs" = ( +/obj/item/clothing/under/rank/hydroponics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQt" = ( +/obj/structure/portal_event, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQx" = ( +/obj/item/clothing/head/bluetag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQy" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/nuka_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQB" = ( +/obj/structure/prop/lock/projectile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQC" = ( +/obj/item/clothing/shoes/boots/jungle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQD" = ( +/obj/item/weapon/storage/pill_bottle/dermaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQI" = ( +/obj/machinery/requests_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQN" = ( +/obj/machinery/button/remote/blast_door/bear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQS" = ( +/obj/item/weapon/storage/bag/circuits/mini/logic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oQZ" = ( +/obj/item/weapon/storage/backpack/chameleon/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRc" = ( +/obj/item/clothing/suit/bluetag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRg" = ( +/obj/item/weapon/coin/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRm" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRp" = ( +/obj/item/clothing/suit/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRt" = ( +/obj/item/weapon/storage/bag/circuits/mini/transfer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRx" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRK" = ( +/obj/structure/prop/machine/comm_tower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRU" = ( +/obj/item/clothing/accessory/medal/solgov/iron/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRW" = ( +/obj/item/clothing/under/teshari/smock/bluegreydress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oRX" = ( +/obj/item/clothing/accessory/shiny/gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSk" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oSr" = ( +/obj/item/weapon/book/custom_library/reference/spacesurvivalguidedespressurization, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSs" = ( +/obj/item/mecha_parts/part/gygax_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSu" = ( +/obj/vehicle/train/trolley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSC" = ( +/obj/item/clothing/under/qipao_colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSI" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSK" = ( +/obj/machinery/smartfridge/drying_rack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSO" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/chloral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSQ" = ( +/obj/item/weapon/storage/fancy/cigarettes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oST" = ( +/obj/structure/prop/machine/smelter/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oSZ" = ( +/obj/item/clothing/mask/mouthwheat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oTh" = ( +/obj/item/weapon/reagent_containers/food/snacks/red_sun_special, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oTr" = ( +/obj/item/clothing/accessory/medal/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oTz" = ( +/obj/item/weapon/storage/box/fluff/yonra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oTB" = ( +/obj/item/weapon/storage/pouch/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oTZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUf" = ( +/obj/item/clothing/suit/space/void/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUi" = ( +/obj/item/weapon/card/id/gateway/snowfield/class4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUl" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUm" = ( +/obj/item/stack/animalhide/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUq" = ( +/obj/item/clothing/head/helmet/space/void/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUw" = ( +/obj/item/weapon/tank/emergency/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUJ" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUM" = ( +/obj/item/weapon/storage/belt/dbandolier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUO" = ( +/obj/item/clothing/head/hood/winter/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUP" = ( +/obj/item/weapon/spellbook/oneuse/blind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUQ" = ( +/obj/machinery/holoplant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUU" = ( +/obj/item/weapon/card/id/science/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oUX" = ( +/mob/living/simple_mob/vore/woof/hostile/aweful/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oUZ" = ( +/obj/machinery/door/airlock/angled_tgmc/secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVc" = ( +/obj/item/clothing/suit/kimono/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVh" = ( +/obj/item/weapon/pen/fountain8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVl" = ( +/obj/item/weapon/commcard/signal/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVr" = ( +/obj/item/weapon/tank/emergency/phoron/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVt" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "9" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVA" = ( +/obj/item/clothing/under/dress/pinktutu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVI" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat/chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oVW" = ( +/obj/machinery/vending/phoronresearch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWe" = ( +/obj/item/weapon/gun/magnetic/railgun/flechette/pistol/khi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWg" = ( +/obj/item/weapon/stock_parts/matter_bin/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWn" = ( +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWC" = ( +/obj/structure/prop/machine/alien_tank/starts_broken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWG" = ( +/obj/item/trash/ratpackramen/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWK" = ( +/obj/item/weapon/tool/prybar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWO" = ( +/obj/item/petrifier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWP" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWU" = ( +/obj/item/organ/internal/augment/armmounted/hand/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oWX" = ( +/obj/item/organ/internal/xenos/plasmavessel/queen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXo" = ( +/obj/machinery/mineral/processing_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXv" = ( +/obj/item/ammo_casing/a380, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXx" = ( +/obj/item/clothing/under/explorer/armored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXA" = ( +/obj/item/clothing/gloves/ring/material/lead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXL" = ( +/obj/item/ammo_magazine/ar10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXR" = ( +/obj/item/clothing/under/dress/bluedress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXS" = ( +/obj/item/ammo_casing/microbattery/medical/haste, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXT" = ( +/obj/item/weapon/cartridge/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oXU" = ( +/obj/item/weapon/storage/mrebag/menu6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYg" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYk" = ( +/obj/item/clothing/under/corp/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYr" = ( +/obj/item/weapon/reagent_containers/food/snacks/icecream, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYv" = ( +/obj/item/clothing/under/pants/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYA" = ( +/obj/item/weapon/storage/box/glasses/shake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYC" = ( +/obj/item/weapon/card/emag_broken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYR" = ( +/obj/structure/prop/esoteric/nt_pedestal0_old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYS" = ( +/obj/item/weapon/commcard/head/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYT" = ( +/obj/item/device/powersink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oYV" = ( +/mob/living/simple_mob/mechanical/cyber_horror/grey{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"oYX" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/chaplain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZa" = ( +/obj/machinery/bodyscanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZc" = ( +/obj/item/weapon/storage/box/syndie_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZe" = ( +/obj/item/clothing/head/hijab/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZh" = ( +/obj/item/weapon/cell/potato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZk" = ( +/obj/item/weapon/refill_cartridge/multitype/technical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZr" = ( +/obj/structure/cable/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZw" = ( +/obj/item/weapon/melee/altevian_wrench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZy" = ( +/obj/item/ammo_magazine/ammo_box/b12g/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZM" = ( +/obj/item/mecha_parts/part/ripley_right_leg, +/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZP" = ( +/obj/item/weapon/storage/bag/circuits/mini/power/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"oZZ" = ( +/obj/item/clothing/head/helmet/space/void/engineering/zena, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pag" = ( +/obj/item/clothing/under/solgov/service/sifguard/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paj" = ( +/obj/structure/fence/door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pan" = ( +/obj/item/ammo_casing/a9mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pap" = ( +/obj/item/mecha_parts/component/hull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pat" = ( +/obj/item/weapon/pen/crayon/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pau" = ( +/obj/item/clothing/accessory/medal/silver/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paC" = ( +/obj/item/integrated_circuit/memory/huge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paD" = ( +/obj/item/integrated_circuit/manipulation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paF" = ( +/obj/item/clothing/suit/storage/apron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paG" = ( +/obj/item/stack/tile/floor/eris/techmaint/perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paR" = ( +/obj/item/ammo_casing/a12g/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paS" = ( +/obj/item/weapon/material/twohanded/baseballbat/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"paW" = ( +/obj/machinery/ai_powersupply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pba" = ( +/obj/item/weapon/grenade/concussion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbp" = ( +/obj/item/weapon/card/id/event/accessset/itg/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbv" = ( +/obj/item/clothing/head/beret/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pby" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbB" = ( +/obj/item/weapon/gun/launcher/crossbow/bow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbF" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbH" = ( +/obj/item/rig_module/protean/armor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbI" = ( +/obj/item/clothing/suit/storage/solgov/service/army/exploration/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbJ" = ( +/obj/item/ammo_casing/microbattery/medical/omni2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pbP" = ( +/obj/item/ammo_magazine/m9mml/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcl" = ( +/obj/structure/bed/chair/sofa/left/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcs" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/wt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcw" = ( +/obj/item/weapon/circuitboard/mecha/imperion/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcB" = ( +/obj/item/weapon/reagent_containers/glass/paint/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcF" = ( +/obj/item/clothing/head/helmet/space/void/axis/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcH" = ( +/obj/item/toy/eight_ball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcK" = ( +/obj/item/weapon/reagent_containers/food/snacks/kitsuneudon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcL" = ( +/obj/item/clothing/head/helmet/bucket/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pcV" = ( +/obj/item/weapon/circuitboard/telecomms/exonet_node, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdd" = ( +/obj/structure/morgue/crematorium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdf" = ( +/obj/structure/bookcase/bookcart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdg" = ( +/obj/machinery/vending/wardrobe/cargodrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdk" = ( +/obj/item/weapon/storage/box/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdp" = ( +/obj/structure/closet/secure_closet/security/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdu" = ( +/obj/item/weapon/reagent_containers/pill/dexalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdx" = ( +/obj/item/clothing/gloves/ring/seal/signet/fluff/phi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdF" = ( +/obj/item/frame/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdG" = ( +/obj/item/device/lightpainter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdO" = ( +/obj/machinery/gateway/centeraway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdR" = ( +/obj/item/integrated_circuit/output/text_to_speech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdT" = ( +/obj/item/clothing/under/pants/baggy/blackjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdV" = ( +/obj/item/weapon/tool/wrench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pdX" = ( +/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pej" = ( +/obj/item/weapon/melee/cultblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pek" = ( +/obj/item/clothing/under/gentlesuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pem" = ( +/obj/item/clothing/under/rank/janitor/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pep" = ( +/obj/item/mecha_parts/part/durand_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"peA" = ( +/obj/structure/fans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfa" = ( +/obj/item/device/cataloguer/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfb" = ( +/obj/item/organ/internal/xenos/acidgland, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfc" = ( +/obj/item/weapon/storage/box/glasses/mug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfi" = ( +/obj/item/trash/skrellsnax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pft" = ( +/obj/item/clothing/under/suit_jacket/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfw" = ( +/obj/item/clothing/glasses/thin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfz" = ( +/obj/item/weapon/card/id/civilian/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfK" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/makarov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfL" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratfruitcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfP" = ( +/obj/item/clothing/gloves/ring/cti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pfQ" = ( +/obj/structure/fireaxecabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgf" = ( +/obj/item/weapon/cell/super/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgq" = ( +/obj/item/device/encryptionkey/heads/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgu" = ( +/obj/machinery/computer/cryopod/travel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgD" = ( +/obj/item/clothing/head/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgG" = ( +/obj/item/clothing/accessory/hawaiian/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgK" = ( +/obj/item/seeds/blackwabback, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgP" = ( +/obj/item/stack/tile/carpet/bcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pgR" = ( +/obj/item/clothing/accessory/maidcorset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pha" = ( +/obj/item/weapon/reagent_containers/glass/beaker/noreact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pho" = ( +/obj/item/clothing/head/tesh_hood/standard/green_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phF" = ( +/obj/item/ammo_casing/a762/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phJ" = ( +/obj/item/robot_parts/robot_component/camera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phK" = ( +/obj/structure/sign/signnew/electrical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phR" = ( +/obj/machinery/gateway/brass{ + dir = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phS" = ( +/obj/item/weapon/gun/projectile/automatic/p90, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"phT" = ( +/obj/item/weapon/circuitboard/secure_data, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pic" = ( +/obj/structure/prop/rock/small/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pij" = ( +/obj/item/clothing/head/hardhat/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pio" = ( +/obj/item/weapon/card/id/event/accessset/itg/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piq" = ( +/obj/item/weapon/circuitboard/security/xenobio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piv" = ( +/obj/machinery/atmospherics/pipe/cap/visible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piF" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piI" = ( +/obj/item/weapon/deck/egy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piM" = ( +/obj/item/organ/internal/brain/cephalon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piU" = ( +/obj/item/trash/venus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piV" = ( +/obj/item/weapon/reagent_containers/food/snacks/squid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piX" = ( +/obj/item/weapon/storage/backpack/ert/commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"piY" = ( +/mob/living/simple_mob/mechanical/viscerator/piercing{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pjc" = ( +/obj/item/seeds/ambrosiadeusseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pje" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tricord, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjf" = ( +/obj/machinery/the_singularitygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjj" = ( +/obj/item/weapon/magnetic_ammo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjp" = ( +/obj/structure/loot_pile/mecha/mouse_tank/livewire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjw" = ( +/obj/item/device/headpods, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjF" = ( +/obj/item/weapon/storage/mre/menu5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjI" = ( +/obj/item/weapon/spell/spawner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjK" = ( +/mob/living/simple_mob/construct/harvester/greater{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pjL" = ( +/obj/vehicle/boat/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjR" = ( +/obj/machinery/power/rtg/fake_reactor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjS" = ( +/obj/machinery/door/blast/angled/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjU" = ( +/obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pjX" = ( +/obj/item/seeds/siflettuce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pka" = ( +/obj/item/weapon/material/twohanded/sledgehammer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkc" = ( +/obj/item/trash/ratpackramen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkf" = ( +/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkg" = ( +/mob/living/simple_mob/vore/bee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pkk" = ( +/obj/item/weapon/reagent_containers/food/snacks/chickenmomo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pky" = ( +/mob/living/simple_mob/animal/giant_spider/pepper{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pkz" = ( +/obj/item/weapon/extinguisher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkC" = ( +/obj/item/clothing/under/solgov/service/sifguard/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkM" = ( +/obj/item/ammo_casing/a762/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkR" = ( +/obj/item/clothing/suit/storage/solgov/service/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pkZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pla" = ( +/obj/machinery/computer/cryopod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plg" = ( +/obj/item/device/binoculars/spyglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plv" = ( +/obj/item/clothing/under/pants/greyjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plw" = ( +/obj/item/ammo_casing/microbattery/combat/xray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ply" = ( +/obj/item/clothing/under/pants/classicjeans/ripped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plC" = ( +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar/rustic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plK" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plT" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plV" = ( +/obj/item/clothing/gloves/boxing/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plW" = ( +/obj/item/clothing/suit/radiation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"plZ" = ( +/obj/item/weapon/card/id/gateway/snowfield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmb" = ( +/obj/item/weapon/tape_roll, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmc" = ( +/obj/item/weapon/gun/energy/locked/frontier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmd" = ( +/obj/item/clothing/head/redcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmf" = ( +/obj/item/rig_module/vision/meson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pml" = ( +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmp" = ( +/obj/structure/bed/chair/sofa/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmz" = ( +/obj/item/device/analyzer/plant_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmA" = ( +/obj/item/weapon/bone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmL" = ( +/obj/item/clothing/under/lawyer/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmP" = ( +/obj/item/clothing/head/soft/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmS" = ( +/obj/item/weapon/circuitboard/machine/rtg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmX" = ( +/mob/living/simple_mob/mobs_monsters/clowns/giggles{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pmY" = ( +/obj/item/clothing/accessory/medal/solgov/bronze/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pmZ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnh" = ( +/obj/machinery/casinoslave_handler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnm" = ( +/obj/item/clothing/under/rank/trek/eng/ds9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pno" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/pizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnu" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnv" = ( +/obj/item/clothing/under/altevian/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnx" = ( +/obj/structure/sign/levels/medical/morgue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnC" = ( +/obj/item/clothing/under/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnD" = ( +/obj/item/clothing/under/altevian/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnG" = ( +/obj/item/modular_computer/console/preset/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnN" = ( +/obj/item/device/healthanalyzer/improved/fluff/jiao_health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pnZ" = ( +/obj/item/weapon/pen/fountain5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poe" = ( +/obj/item/clothing/suit/space/void/refurb/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poj" = ( +/obj/item/integrated_circuit/arithmetic/subtraction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pol" = ( +/obj/item/weapon/coin/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pon" = ( +/obj/item/clothing/suit/space/void/zaddat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pov" = ( +/obj/mecha/working/ripley/mining/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pow" = ( +/obj/item/clothing/head/soft/purple/wah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poC" = ( +/obj/item/weapon/diseasedisk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poD" = ( +/obj/item/robot_parts/robot_component/armour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poF" = ( +/obj/item/weapon/stock_parts/capacitor/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poH" = ( +/obj/item/weapon/storage/vore_egg/synthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poR" = ( +/obj/item/ammo_magazine/m10mm/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"poY" = ( +/obj/item/weapon/spell/aura/frost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppb" = ( +/obj/structure/sign/signnew/magnetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppe" = ( +/obj/machinery/atmospherics/pipe/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pph" = ( +/obj/item/weapon/stock_parts/subspace/ansible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppi" = ( +/obj/machinery/power/grid_checker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppl" = ( +/obj/item/stack/material/painite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppp" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/apurrrrfectman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppI" = ( +/obj/item/organ/internal/metamorphgland, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppK" = ( +/obj/item/weapon/form_printer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppQ" = ( +/obj/item/weapon/gun/energy/toxgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppV" = ( +/obj/structure/medical_stand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ppX" = ( +/obj/item/weapon/paper/pamphlet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqc" = ( +/obj/item/clothing/suit/space/vox/carapace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqo" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/lithium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqw" = ( +/obj/item/clothing/under/terran/navy/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqz" = ( +/obj/item/clothing/under/rank/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqC" = ( +/obj/item/clothing/glasses/welding/tiemgogs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqE" = ( +/obj/item/toy/plushie/teshari/eili, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqN" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqP" = ( +/obj/item/stack/tile/floor/eris/steel/bluecorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqQ" = ( +/obj/item/weapon/stock_parts/subspace/transmitter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pqT" = ( +/obj/item/weapon/reagent_containers/food/snacks/dionaroast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"prf" = ( +/obj/item/ammo_magazine/ssp4/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pri" = ( +/obj/item/weapon/aiModule/protectStation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"prk" = ( +/obj/machinery/door/airlock/angled_bay/standard/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"prn" = ( +/obj/item/clothing/under/pants/baggy/youngfolksjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"prp" = ( +/obj/item/ammo_casing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"prq" = ( +/obj/structure/closet/crate/secure/gilthari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psc" = ( +/obj/item/weapon/book/manual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psi" = ( +/obj/item/clothing/accessory/armor/tag/solgov/com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pso" = ( +/mob/living/simple_mob/slime/xenobio/pink{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"psv" = ( +/obj/item/integrated_circuit/time/delay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psB" = ( +/obj/item/clothing/suit/storage/fluff/techpriestrobes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psM" = ( +/obj/item/weapon/circuitboard/shuttle_console/multi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psO" = ( +/obj/structure/bed/chair/sofa/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psR" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psS" = ( +/obj/item/instrument/glockenspiel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"psW" = ( +/obj/item/clothing/head/helmet/space/capspace/fluff/harmhelm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptb" = ( +/obj/item/clothing/head/crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptf" = ( +/obj/item/weapon/coin/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pth" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptr" = ( +/obj/item/clothing/ears/earring/stud/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptw" = ( +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptz" = ( +/obj/item/weapon/circuitboard/research_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptI" = ( +/obj/item/weapon/material/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptJ" = ( +/obj/machinery/portable_atmospherics/canister/phoron/cold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptK" = ( +/obj/item/clothing/accessory/sweater/virgin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptL" = ( +/obj/item/weapon/storage/pill_bottle/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptR" = ( +/obj/item/weapon/grenade/shooter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ptZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/rawbacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pul" = ( +/obj/item/poster/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pus" = ( +/obj/item/weapon/implant/compressed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puy" = ( +/obj/structure/closet/crate/secure/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puM" = ( +/obj/item/device/soulstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puP" = ( +/obj/item/weapon/gun/energy/netgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puT" = ( +/obj/item/clothing/accessory/gaiter/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puX" = ( +/obj/structure/bed/chair/sofa/corner/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"puY" = ( +/obj/machinery/partyalarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvc" = ( +/obj/item/clothing/under/solgov/utility/sifguard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvj" = ( +/obj/item/clothing/head/beret/science/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvm" = ( +/obj/item/stack/nanopaste, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvp" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvq" = ( +/obj/item/ammo_magazine/m545/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvr" = ( +/obj/machinery/smartfridge/secure/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvv" = ( +/obj/item/clothing/under/away/patrol/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvG" = ( +/obj/item/weapon/circuitboard/fryer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvJ" = ( +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvU" = ( +/obj/machinery/librarypubliccomp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pvY" = ( +/obj/item/clothing/suit/armor/combat/crusader/bedevere, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwd" = ( +/obj/structure/closet/l3closet/scientist/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwe" = ( +/obj/item/clothing/accessory/medal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwk" = ( +/obj/item/clothing/under/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwq" = ( +/obj/item/clothing/accessory/tie/blue_clip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pws" = ( +/obj/machinery/bluespace_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwt" = ( +/obj/structure/sign/flag/fivearrows, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwu" = ( +/obj/item/weapon/storage/toolbox/lunchbox/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwH" = ( +/obj/structure/closet/crate/secure/cybersolutions, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwJ" = ( +/obj/machinery/status_display/supply_display, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwL" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pwN" = ( +/obj/item/clothing/gloves/ring/buzzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwS" = ( +/obj/item/weapon/card/id/event/accessset/itg/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pwT" = ( +/obj/item/weapon/material/twohanded/spear/lance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pxl" = ( +/obj/item/weapon/lipstick/jade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pxr" = ( +/obj/item/weapon/circuitboard/mechfab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pxw" = ( +/obj/item/seeds/harebell, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pxA" = ( +/obj/item/ammo_magazine/makarov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pxS" = ( +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyb" = ( +/obj/item/toy/figure/profwho, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyk" = ( +/obj/item/clothing/under/dress/blacktango/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyA" = ( +/obj/item/clothing/glasses/sunglasses/sechud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyB" = ( +/obj/item/weapon/storage/belt/utility/fluff/sam_belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyE" = ( +/mob/living/simple_mob/vore/demonAI{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pyK" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyL" = ( +/obj/item/seeds/whitebeetseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyQ" = ( +/obj/machinery/disposal/wall/cleaner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyS" = ( +/obj/item/device/electronic_assembly/tiny/cylinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pyV" = ( +/mob/living/simple_mob/animal/passive/bird/azure_tit/great, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pzb" = ( +/obj/machinery/shower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pze" = ( +/obj/item/weapon/rig/medical/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzp" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/genetics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzq" = ( +/obj/structure/closet/gimmick/tacticool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzs" = ( +/mob/living/simple_mob/vore/woof/hostile/terrible{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pzx" = ( +/obj/item/weapon/disk/species/zaddat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzA" = ( +/obj/item/integrated_circuit/passive/power/solar_cell/dual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzB" = ( +/obj/item/mecha_parts/part/odysseus_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzK" = ( +/obj/item/weapon/melee/energy/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzL" = ( +/obj/item/clothing/mask/smokable/pipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzM" = ( +/obj/item/device/gps/explorer/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pzO" = ( +/obj/item/seeds/replicapod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAa" = ( +/obj/item/weapon/storage/backpack/satchel/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAj" = ( +/obj/item/weapon/storage/box/survival/comp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAr" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAu" = ( +/mob/living/simple_mob/mechanical/mecha/odysseus/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pAB" = ( +/obj/machinery/implantchair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAK" = ( +/obj/item/mecha_parts/mecha_equipment/runningboard/limited, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAL" = ( +/obj/item/weapon/gun/energy/ionrifle/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAN" = ( +/obj/item/device/electronic_assembly/large/scope, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAR" = ( +/obj/structure/dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pAU" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pBc" = ( +/obj/item/weapon/cell/device/weapon/recharge/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBh" = ( +/obj/item/clothing/head/beret/solgov/inspector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBj" = ( +/obj/machinery/atmospherics/binary/passive_gate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBl" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBt" = ( +/obj/item/weapon/gun/projectile/revolver/detective45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBC" = ( +/obj/item/weapon/tool/wirecutters/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBG" = ( +/obj/machinery/scale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBK" = ( +/obj/item/integrated_circuit/input/internalbm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBR" = ( +/obj/item/clothing/accessory/armor/armguards/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pBV" = ( +/obj/item/clothing/suit/space/void/refurb/marine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCj" = ( +/obj/machinery/seed_storage/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCk" = ( +/obj/item/weapon/storage/toolbox/lunchbox/mars/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCm" = ( +/obj/item/clothing/under/teshari/undercoat/standard/green_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCn" = ( +/obj/machinery/atmospherics/pipe/tank/air, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCp" = ( +/obj/item/weapon/refill_cartridge/multitype/smokes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCq" = ( +/obj/item/weapon/tank/emergency/oxygen/engi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCJ" = ( +/obj/item/clothing/head/helmet/fluff/korei_laskor_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pCP" = ( +/mob/living/simple_mob/animal/passive/lizard/large{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pCT" = ( +/obj/item/weapon/storage/bag/trash/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDe" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDf" = ( +/obj/item/weapon/gun/projectile/automatic/sts35, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDi" = ( +/obj/machinery/clonepod/transhuman/full/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDk" = ( +/obj/structure/backup_implanter_ch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDo" = ( +/obj/item/weapon/storage/belt/utility/fluff/raja_belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDr" = ( +/obj/item/weapon/reagent_containers/pill/patch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDs" = ( +/obj/machinery/atmospherics/pipe/vent/high_volume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDu" = ( +/obj/structure/ghost_pod/ghost_activated/maintpred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDw" = ( +/obj/machinery/button/holosign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDA" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDF" = ( +/obj/item/clothing/accessory/bowtie/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDG" = ( +/obj/item/weapon/cell/device/shield_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDO" = ( +/obj/item/device/denecrotizer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDS" = ( +/obj/item/slime_extract/light_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pDX" = ( +/obj/item/weapon/implant/reagent_generator/egg/slow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEe" = ( +/obj/item/weapon/material/fishing_rod/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEl" = ( +/obj/structure/reagent_dispensers/fueltank/barrel/three, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEo" = ( +/obj/machinery/atmospherics/pipe/tank/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEu" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/stripperpink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEx" = ( +/obj/item/rig_module/vision/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEJ" = ( +/obj/item/weapon/card/id/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEM" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEN" = ( +/obj/item/weapon/implant/loyalty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pEY" = ( +/obj/structure/sign/deck4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFd" = ( +/obj/item/device/communicator/commlink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFm" = ( +/obj/item/clothing/head/hardhat/firefighter/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFp" = ( +/obj/item/clothing/shoes/leg_guard/fluff/madoka_legs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFw" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whiteorange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFC" = ( +/obj/item/clothing/under/rank/trek/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pFK" = ( +/obj/item/clothing/head/caphat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGf" = ( +/obj/item/clothing/under/skirt/denim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGg" = ( +/mob/living/simple_mob/metroid/juvenile/gamma{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pGk" = ( +/obj/item/seeds/riceseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGl" = ( +/obj/machinery/porta_turret/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGy" = ( +/mob/living/simple_mob/humanoid/merc/ranged/deagle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pGB" = ( +/obj/item/trash/smolhotdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGH" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/OPlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGN" = ( +/obj/item/device/denecrotizer/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGT" = ( +/obj/item/clothing/accessory/medal/solgov/silver/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pGX" = ( +/obj/item/clothing/suit/armor/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHf" = ( +/obj/item/clothing/accessory/tropical_random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHj" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/passengerliason, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHo" = ( +/obj/item/clothing/accessory/medal/solgov/bronze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHp" = ( +/obj/item/clothing/accessory/badge/corporate_tag/gilthari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHq" = ( +/obj/item/weapon/banner/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHu" = ( +/mob/living/simple_mob/vore/alienanimals/dustjumper{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pHv" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHC" = ( +/obj/item/clothing/suit/space/void/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHJ" = ( +/obj/item/weapon/newspaper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pHK" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIa" = ( +/obj/structure/sign/electricshock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIb" = ( +/obj/item/stack/tile/wood/panel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIi" = ( +/obj/item/weapon/folder/yellow_ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIo" = ( +/obj/item/weapon/reagent_containers/food/snacks/squid/true, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIH" = ( +/obj/item/weapon/dnainjector/regenerate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIJ" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitegreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIL" = ( +/obj/item/clothing/under/fluff/kilanosuit/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIN" = ( +/obj/item/device/geiger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pIY" = ( +/mob/living/simple_mob/vore/aggressive/giant_snake{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pJi" = ( +/obj/item/weapon/flame/lighter/zippo/royal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJm" = ( +/obj/item/weapon/shovel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJp" = ( +/obj/item/weapon/reagent_containers/food/snacks/poachedegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJt" = ( +/obj/item/weapon/circuitboard/atmos_alert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJu" = ( +/obj/item/toy/figure/psychologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJv" = ( +/obj/item/stack/tile/floor/eris/white/golden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJH" = ( +/obj/item/weapon/storage/vore_egg/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJJ" = ( +/obj/item/clothing/suit/armor/pcarrier/light/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJN" = ( +/obj/item/weapon/circuitboard/message_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJS" = ( +/obj/machinery/door/airlock/angled_bay/external/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJT" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pJW" = ( +/obj/item/weapon/storage/box/snappops, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJY" = ( +/obj/item/ammo_magazine/m9mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pJZ" = ( +/obj/structure/sign/levels/elevator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKd" = ( +/obj/item/weapon/gun/magic/firestaff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKf" = ( +/obj/item/weapon/storage/box/glasses/coffeecup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKg" = ( +/obj/item/weapon/storage/backpack/vietnam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKh" = ( +/obj/item/weapon/card/id/science/xenobiologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKj" = ( +/obj/item/clothing/under/tropical/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKs" = ( +/obj/item/clothing/gloves/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKu" = ( +/obj/item/clothing/accessory/gaiter/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKw" = ( +/obj/structure/closet/secure_closet/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKx" = ( +/obj/item/clothing/mask/gas/plaguedoctor/fluff/kelplaguemask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKy" = ( +/obj/item/weapon/coin/morphium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKz" = ( +/obj/structure/musician/piano/unanchored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKB" = ( +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKD" = ( +/obj/item/weapon/deskbell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKL" = ( +/obj/item/weapon/storage/belt/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pKQ" = ( +/obj/item/integrated_circuit/output/sound/medbot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pLi" = ( +/obj/item/clothing/suit/armor/pcarrier/navy/fluff/saur_pccarrier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pLx" = ( +/obj/item/weapon/reagent_containers/pill/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pLy" = ( +/obj/item/weapon/pickaxe/jackhammer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pLI" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pMg" = ( +/obj/item/weapon/digestion_remains/skull/vasilissan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMq" = ( +/mob/living/simple_mob/animal/passive/bird/azure_tit/iceman, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pMs" = ( +/obj/item/clothing/gloves/arm_guard/fluff/madoka_arms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMv" = ( +/obj/item/rig_module/device/anomaly_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pME" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMG" = ( +/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMH" = ( +/obj/item/trash/ratpackramen/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMI" = ( +/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMS" = ( +/obj/item/mecha_parts/chassis/ripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMT" = ( +/obj/item/weapon/storage/box/ids, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMV" = ( +/obj/item/capture_crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pMY" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNd" = ( +/obj/item/clothing/accessory/watch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNj" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pNr" = ( +/obj/item/weapon/gun/energy/gun/protector/pilotgun/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNs" = ( +/obj/item/weapon/reagent_containers/spray/plantbgone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNu" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNA" = ( +/obj/item/organ/internal/xenos/resinspinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNB" = ( +/obj/item/weapon/circuitboard/engine/ion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNE" = ( +/obj/item/clothing/under/yw/blueshield2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pNN" = ( +/obj/item/clothing/under/corp/saare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOg" = ( +/obj/structure/closet/secure_closet/atmos_personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOm" = ( +/obj/item/seeds/gnomes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOr" = ( +/obj/item/weapon/material/twohanded/baseballbat/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOs" = ( +/obj/item/weapon/storage/belt/utility/spicyfull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOv" = ( +/obj/item/clothing/shoes/leg_guard/combat/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOz" = ( +/mob/living/simple_mob/animal/passive/cat, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pOA" = ( +/obj/structure/bed/chair/shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOB" = ( +/obj/item/device/defib_kit/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOM" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOO" = ( +/obj/machinery/door/airlock/vault, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOV" = ( +/obj/item/ammo_magazine/ammo_box/b145, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pOZ" = ( +/obj/item/weapon/gun/energy/locked/frontier/rifle/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pPh" = ( +/obj/structure/sign/directions/chapel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pPk" = ( +/obj/item/weapon/implanter/sizecontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pPs" = ( +/mob/living/simple_mob/vore/redpanda/blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pPt" = ( +/obj/structure/bed/nest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pPC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pPR" = ( +/obj/item/ammo_magazine/m762enbloc/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQb" = ( +/obj/item/clothing/shoes/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQg" = ( +/obj/machinery/particle_accelerator/control_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQh" = ( +/obj/item/clothing/suit/storage/toggle/med_dep_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQj" = ( +/obj/item/integrated_circuit/logic/binary/not_equals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQt" = ( +/obj/item/weapon/gun/projectile/revolver/toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQy" = ( +/obj/item/clothing/suit/storage/solgov/service/army/medical/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQL" = ( +/obj/item/ammo_casing/microbattery/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pQY" = ( +/obj/item/clothing/under/modjump2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRo" = ( +/obj/item/weapon/tool/wirecutters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRp" = ( +/obj/item/weapon/storage/belt/fannypack/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRs" = ( +/obj/item/clothing/glasses/omnihud/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRt" = ( +/obj/item/weapon/rig/pmc/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRB" = ( +/obj/item/weapon/storage/box/flashbangs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRD" = ( +/obj/item/weapon/gun/energy/locked/phasegun/cannon/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRE" = ( +/obj/structure/sign/nosmoking_2/burnt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRF" = ( +/obj/machinery/door/blast/gate/thin/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRL" = ( +/obj/item/clothing/suit/storage/forensics/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRX" = ( +/obj/machinery/firework_launcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pRY" = ( +/obj/structure/reagent_dispensers/he3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSl" = ( +/obj/item/clothing/accessory/cowboy_vest/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSm" = ( +/obj/item/pizzabox/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSI" = ( +/obj/item/clothing/head/collectable/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSL" = ( +/obj/item/weapon/storage/bag/trash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSV" = ( +/obj/structure/prop/rock/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSW" = ( +/obj/item/weapon/circuitboard/shuttle_console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSX" = ( +/obj/item/clothing/suit/weaversilk_bindings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pSY" = ( +/obj/item/organ/internal/augment/armmounted/shoulder/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTb" = ( +/obj/structure/sign/sec2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTd" = ( +/obj/item/clothing/accessory/collar/shock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTe" = ( +/obj/item/weapon/pen/crayon/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTg" = ( +/obj/item/clothing/accessory/medal/silver/security/fluff/dhael, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTm" = ( +/obj/machinery/beehive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTn" = ( +/obj/item/device/daredevice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTq" = ( +/obj/item/weapon/broken_gun/pumpshotgun_combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTx" = ( +/obj/item/weapon/paper/talisman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTz" = ( +/obj/item/integrated_circuit/input/nitrogen_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTG" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTJ" = ( +/obj/item/weapon/storage/box/casino/costume_gladiator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTP" = ( +/obj/item/clothing/under/fluff/eviriik_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTS" = ( +/obj/random/soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTU" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTV" = ( +/obj/item/instrument/piano_synth/fluff/kyutar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pTY" = ( +/obj/item/weapon/storage/backpack/dufflebag/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUc" = ( +/mob/living/simple_mob/horror/bradley{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pUd" = ( +/obj/item/weapon/reagent_containers/dropper/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUe" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUj" = ( +/obj/structure/loot_pile/maint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUm" = ( +/obj/item/clothing/shoes/bhop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUn" = ( +/obj/item/weapon/aiModule/asimov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUq" = ( +/obj/item/weapon/storage/box/fluff/cirra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUw" = ( +/obj/item/clothing/under/color/ranger/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUB" = ( +/obj/item/weapon/material/shard/shrapnel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pUR" = ( +/obj/item/weapon/spellbook/oneuse/smoke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVc" = ( +/obj/item/weapon/stamp/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVj" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVk" = ( +/obj/item/frame/fireaxe_cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVn" = ( +/obj/item/weapon/storage/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVx" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVy" = ( +/mob/living/simple_mob/mechanical/cyber_horror/vox{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pVD" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/groza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVN" = ( +/obj/machinery/vending/foodasian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pVQ" = ( +/obj/structure/curtain/open/shower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pWb" = ( +/obj/structure/sign/directions/science/xenoflora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pWo" = ( +/obj/item/paiparts/speech_synthesizer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pWw" = ( +/obj/item/weapon/reagent_containers/glass/bottle/spaceacillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pWB" = ( +/obj/item/clothing/under/excelsior/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pWR" = ( +/obj/item/weapon/fluff/fidgetspinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXb" = ( +/obj/item/toy/plushie/purple_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXd" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXg" = ( +/obj/item/weapon/spell/projectile/overload, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXn" = ( +/obj/item/ammo_casing/afoam_dart/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXq" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXs" = ( +/obj/structure/closet/crate/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXA" = ( +/mob/living/simple_mob/mobs_monsters/clowns/chlown{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pXQ" = ( +/obj/structure/curtain/open/shower/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXX" = ( +/obj/item/seeds/pineapple, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pXY" = ( +/obj/item/integrated_circuit/logic/binary/less_than, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYb" = ( +/obj/machinery/smartfridge/survival_pod/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYg" = ( +/obj/item/weapon/melee/fluffstuff/wolfgirlsword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYj" = ( +/obj/item/clothing/suit/straight_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYl" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "19" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYz" = ( +/obj/item/seeds/surik, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYA" = ( +/obj/item/weapon/storage/fancy/cigarettes/menthols, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYB" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYH" = ( +/obj/structure/barricade/cutout/swarmer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYI" = ( +/obj/item/weapon/rig/military/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYM" = ( +/obj/item/toy/figure/chemist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYR" = ( +/obj/item/weapon/reagent_containers/food/snacks/rawcutlet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYS" = ( +/obj/item/weapon/gun/energy/laser/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYT" = ( +/mob/living/bot/cleanbot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"pYV" = ( +/obj/machinery/vending/wardrobe/atmosdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pYY" = ( +/obj/structure/closet/jcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZb" = ( +/obj/item/clothing/shoes/footwraps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZf" = ( +/obj/item/weapon/paper/shieldgen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZo" = ( +/obj/item/ammo_magazine/ak74/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZH" = ( +/obj/item/weapon/teleportation_scroll, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZL" = ( +/obj/item/trash/candle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZN" = ( +/obj/item/modular_computer/console/preset/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZR" = ( +/obj/structure/closet/firecloset/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"pZW" = ( +/obj/item/clothing/under/solgov/utility/sifguard_skirt/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qab" = ( +/obj/item/device/flash/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qad" = ( +/obj/item/toy/plushie/possum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qag" = ( +/obj/machinery/door/airlock/multi_tile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaq" = ( +/mob/living/simple_mob/animal/passive/chick{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qav" = ( +/obj/item/weapon/storage/backpack/dufflebag/syndie/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qay" = ( +/obj/item/clothing/head/helmet/space/syndicate/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaG" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaL" = ( +/obj/structure/panic_button, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaP" = ( +/obj/vehicle/train/rover/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaR" = ( +/obj/item/clothing/head/hood/carp_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaW" = ( +/obj/item/clothing/under/det/fluff/tasald, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qaY" = ( +/obj/item/clothing/accessory/bracelet/material/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbg" = ( +/obj/structure/sign/directions/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbn" = ( +/obj/item/weapon/card/robot/syndi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbo" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbs" = ( +/obj/item/weapon/gun/magnetic/railgun/flechette/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbx" = ( +/obj/item/weapon/implanter/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbC" = ( +/obj/item/clothing/mask/nock_life, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbH" = ( +/obj/structure/reagent_dispensers/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbJ" = ( +/obj/item/weapon/weldingtool/largetank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbM" = ( +/obj/machinery/door/airlock/angled_bay/centcomm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbN" = ( +/obj/item/seeds/bluespacetomatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbT" = ( +/obj/item/weapon/melee/energy/sword/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbU" = ( +/obj/item/capture_crystal/master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbW" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qbZ" = ( +/obj/item/clothing/accessory/shiny/socks/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qce" = ( +/obj/item/toy/rock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qci" = ( +/obj/item/clothing/suit/storage/toggle/fr_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcj" = ( +/obj/item/clothing/head/hood/winter/science/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcm" = ( +/obj/item/weapon/storage/box/fluff/morxaina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcs" = ( +/obj/item/weapon/storage/box/admints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcu" = ( +/obj/structure/bed/chair/sofa/corner/sif_ora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcw" = ( +/obj/item/weapon/melee/baton/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcx" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcC" = ( +/obj/item/clothing/suit/storage/fluff/jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcE" = ( +/obj/item/clothing/suit/fluff/freddy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcF" = ( +/obj/item/clothing/gloves/duty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcN" = ( +/obj/item/clothing/glasses/regular/rimless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcQ" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcT" = ( +/obj/item/weapon/storage/backpack/messenger/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcU" = ( +/obj/item/weapon/refill_cartridge/multitype/wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcX" = ( +/obj/structure/bed/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qcY" = ( +/obj/machinery/vending/wardrobe/engidrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdb" = ( +/obj/machinery/keycard_auth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qde" = ( +/obj/item/clothing/suit/space/vox/civ/librarian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdg" = ( +/obj/item/ammo_magazine/m45tommy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdt" = ( +/obj/item/device/encryptionkey/headset_sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdu" = ( +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdx" = ( +/obj/item/clothing/shoes/boots/ranger/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdJ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/calcium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdM" = ( +/obj/item/weapon/rig/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdT" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdU" = ( +/obj/item/weapon/cannonframe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdW" = ( +/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qdZ" = ( +/obj/item/clothing/under/rank/nullsuit/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qef" = ( +/obj/item/weapon/reagent_containers/glass/beaker/stopperedbottle{ + desc = s + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeg" = ( +/obj/item/ammo_casing/chemdart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qei" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qel" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeq" = ( +/obj/item/clothing/under/rank/nullsuit/eng/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qex" = ( +/obj/item/weapon/storage/briefcase/crimekit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeB" = ( +/obj/item/toy/mecha/fireripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeD" = ( +/obj/item/weapon/reagent_containers/food/condiment/soysauce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeE" = ( +/obj/item/clothing/accessory/wcoat/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeH" = ( +/obj/item/clothing/head/helmet/space/void/custodian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeI" = ( +/obj/item/weapon/reagent_containers/pill/osteodaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeR" = ( +/obj/item/weapon/shreddedp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeT" = ( +/obj/item/clothing/head/helmet/space/void/zaddat/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qeV" = ( +/obj/item/clothing/suit/space/void/zaddat/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qff" = ( +/obj/item/clothing/ears/skrell/cloth_female/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfg" = ( +/obj/item/ammo_magazine/ammo_box/b38/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfq" = ( +/obj/move_trader_landmark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfE" = ( +/obj/item/integrated_circuit/list/len, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfH" = ( +/obj/item/weapon/cell/mech/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfI" = ( +/obj/machinery/mining/drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfK" = ( +/obj/item/integrated_circuit/trig/tangent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfQ" = ( +/obj/item/clothing/gloves/gauntlets/rig/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qfW" = ( +/mob/living/simple_mob/mechanical/combat_drone/lesser/aerostat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qfY" = ( +/obj/structure/closet/crate/secure/heph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgb" = ( +/obj/structure/sign/levels/medical/surgery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgc" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgf" = ( +/obj/item/stack/material/resin{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgg" = ( +/obj/item/weapon/soap/uranium_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgl" = ( +/mob/living/simple_mob/animal/sif/hooligan_crab{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qgo" = ( +/obj/item/projectile/sickshot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgE" = ( +/obj/item/ammo_magazine/clip/c9mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgI" = ( +/obj/item/clothing/under/solgov/service/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgL" = ( +/obj/item/clothing/suit/storage/fluff/loincloth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgO" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgP" = ( +/obj/item/clothing/under/tourist_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qgX" = ( +/obj/item/clothing/head/soft/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhf" = ( +/obj/item/clothing/gloves/sterile/fluff/jiao_gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhi" = ( +/obj/item/clothing/shoes/magboots/fluff/tikorak_magboots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhr" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhs" = ( +/obj/machinery/door/airlock/glass_engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qht" = ( +/obj/item/clothing/accessory/solgov/department/command/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhu" = ( +/obj/item/weapon/tool/crowbar/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhC" = ( +/obj/item/clothing/suit/armor/captain/fluff/harmsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhF" = ( +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhH" = ( +/obj/item/weapon/pinpointer/advpinpointer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhK" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/wine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhO" = ( +/obj/item/weapon/storage/firstaid/o2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhS" = ( +/obj/item/clothing/gloves/sterile/latex/fluff/sam_gloves, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhT" = ( +/obj/item/clothing/suit/armor/pcarrier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhV" = ( +/obj/machinery/gear_dispenser/suit_fancy/autolok, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qhX" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qiq" = ( +/obj/item/clothing/under/fluff/david_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qiB" = ( +/obj/item/clothing/head/soft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qiH" = ( +/obj/item/clothing/ears/skrell/cloth_male/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qiJ" = ( +/obj/item/weapon/gun/projectile/automatic/stg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qiL" = ( +/obj/item/weapon/disk/nifsoft/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjb" = ( +/obj/item/weapon/reagent_containers/food/snacks/cutlet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjg" = ( +/obj/item/device/fluff/id_kit_mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjh" = ( +/obj/item/clothing/suit/cyberpunk/recolorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjo" = ( +/obj/item/weapon/a_gift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjp" = ( +/obj/item/weapon/spell/construct/projectile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjr" = ( +/obj/item/clothing/head/helmet/space/void/security/fluff/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjy" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/brown_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjE" = ( +/obj/item/clothing/under/det/black/waistcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjM" = ( +/obj/item/clothing/suit/storage/snowsuit/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjO" = ( +/obj/item/ammo_casing/macrobattery/healie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qjS" = ( +/obj/item/clothing/under/suit_jacket/red/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkc" = ( +/obj/item/weapon/soap/pink_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qke" = ( +/mob/living/simple_mob/metroid/juvenile/omega{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qki" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat/fedblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkB" = ( +/obj/item/clothing/under/rank/medical/scrubs/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkF" = ( +/obj/item/clothing/glasses/material, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkI" = ( +/obj/structure/bed/chair/sofa/corp/corner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkL" = ( +/obj/item/weapon/aiModule/quarantine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkT" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qkW" = ( +/mob/living/simple_mob/mobs_monsters/clowns/hulk{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qlb" = ( +/obj/item/weapon/reagent_containers/food/drinks/milk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlf" = ( +/obj/machinery/drone_fabricator/unify, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlk" = ( +/obj/item/integrated_circuit/reagent/storage/big, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlo" = ( +/obj/item/clothing/head/beret/sec/gov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlp" = ( +/obj/structure/door_assembly/door_assembly_min, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlq" = ( +/obj/item/weapon/reagent_containers/food/snacks/boiledegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlz" = ( +/obj/item/weapon/refill_cartridge/autoname/food/weeb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlB" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sobakacube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlC" = ( +/obj/item/clothing/under/color/fjumpsuit/lightgreenf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlO" = ( +/obj/structure/ghost_pod/ghost_activated/swarm_drone/event, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlT" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/sugar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qlW" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qme" = ( +/obj/structure/prop/machine/gravygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmh" = ( +/obj/item/clothing/gloves/boxing/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmA" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmJ" = ( +/obj/item/weapon/gun/energy/locked/frontier/handbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmL" = ( +/obj/structure/closet/crate/secure/hydrosec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmP" = ( +/obj/structure/bed/chair/sofa/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmU" = ( +/obj/item/weapon/gun/projectile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmW" = ( +/obj/item/weapon/nailpolish_remover, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qmX" = ( +/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qnq" = ( +/obj/item/device/pda/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnr" = ( +/obj/item/ammo_magazine/mglock9mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnt" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/tulidaan{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qnw" = ( +/obj/item/mecha_parts/mecha_equipment/crisis_drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qny" = ( +/obj/item/device/flashlight/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnD" = ( +/obj/item/device/defib_kit/compact/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnG" = ( +/obj/item/toy/plushie/ipc/toaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnI" = ( +/obj/item/weapon/soap/blue_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnR" = ( +/obj/structure/sign/levels/science/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnS" = ( +/obj/item/clothing/glasses/omnihud/kamina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qnV" = ( +/obj/item/weapon/rig/vox/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qom" = ( +/obj/item/clothing/under/fluff/ivy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoz" = ( +/obj/item/clothing/accessory/tie/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoF" = ( +/obj/item/clothing/head/centhat/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoG" = ( +/obj/item/weapon/surgical/surgicaldrill/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoI" = ( +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoO" = ( +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qoQ" = ( +/obj/item/clothing/suit/storage/hazardvest/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpe" = ( +/obj/item/weapon/reagent_containers/food/drinks/dry_ramen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpg" = ( +/obj/item/clothing/under/scratch/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpn" = ( +/obj/item/clothing/under/solgov/utility/sifguard/medical/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpo" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/honey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpK" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/oculum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpQ" = ( +/obj/item/stack/material/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpX" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpY" = ( +/obj/item/robot_parts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qpZ" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qqe" = ( +/obj/item/clothing/head/helmet/space/void/pilot/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qqv" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qqB" = ( +/obj/mecha/combat/phazon/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qqP" = ( +/obj/machinery/vending/deathmatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qqV" = ( +/obj/item/clothing/under/rank/chief_medical_officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrg" = ( +/obj/item/organ/internal/nano/refactory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qro" = ( +/obj/structure/closet/crate/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrs" = ( +/obj/item/rig_module/device/pen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrB" = ( +/obj/item/weapon/stamp/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrC" = ( +/obj/item/ammo_magazine/m10mm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrD" = ( +/obj/item/clothing/accessory/holster/waist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qrO" = ( +/obj/item/clothing/head/tajaran/scarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qse" = ( +/obj/item/weapon/melee/energy/sword/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsg" = ( +/obj/item/stamp/einstein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsi" = ( +/obj/structure/ghost_pod/ghost_activated/morphspawn/no_announce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsm" = ( +/obj/machinery/abstract_grub_machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsn" = ( +/obj/item/weapon/circuitboard/machine/rtg/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qso" = ( +/obj/item/weapon/light/tube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsq" = ( +/obj/item/projectile/bullet/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qss" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/acidspit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsv" = ( +/obj/item/clothing/head/helmet/space/fluff/joan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsx" = ( +/obj/item/clothing/under/sec_flight_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsB" = ( +/obj/item/weapon/aliencoin/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsK" = ( +/mob/living/simple_mob/animal/passive/dog/corgi/Lisa, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qsN" = ( +/obj/item/ammo_magazine/ammo_box/b762/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsO" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsP" = ( +/obj/item/weapon/staff/stick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qsT" = ( +/obj/item/toy/plushie/generic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qta" = ( +/obj/machinery/suit_cycler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qth" = ( +/obj/item/weapon/storage/belt/fannypack/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtn" = ( +/obj/item/clothing/under/skirt/pleated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtp" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qts" = ( +/obj/item/weapon/fluff/chemset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtw" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtA" = ( +/obj/item/clothing/ears/skrell/colored/chain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtH" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/white_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qtS" = ( +/mob/living/simple_mob/vore/cookiegirl{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"quc" = ( +/obj/item/clothing/accessory/holster/waist/kinetic_accelerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"quk" = ( +/obj/item/clothing/suit/armor/tdome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qup" = ( +/obj/machinery/vending/foodveggie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"quG" = ( +/obj/item/clothing/head/pelt/tigerpeltsnow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"quN" = ( +/obj/item/clothing/accessory/solgov/department/medical/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"quR" = ( +/obj/item/clothing/shoes/syndigaloshes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"quS" = ( +/obj/item/device/personal_shield_generator/belt/parry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvb" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvs" = ( +/obj/structure/sign/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvt" = ( +/obj/item/clothing/accessory/holster/machete/rapier/swords, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvw" = ( +/obj/item/seeds/cherryseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvF" = ( +/obj/item/weapon/card/id/medical/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvK" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/kea, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qvL" = ( +/obj/item/weapon/storage/mre/menu11, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvX" = ( +/obj/item/weapon/arrow/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qvY" = ( +/obj/item/organ/internal/augment/armmounted/shoulder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwe" = ( +/obj/item/clothing/suit/ianshirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwi" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/wataur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qws" = ( +/obj/structure/bed/chair/bay/chair/padded/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwA" = ( +/obj/item/weapon/circuitboard/autolathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwD" = ( +/obj/item/clothing/accessory/ribbon/solgov/instructor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwI" = ( +/obj/item/projectile/temp/hot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwK" = ( +/obj/structure/bed/chair/sofa/right/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwT" = ( +/obj/item/clothing/suit/storage/hazardvest/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwX" = ( +/obj/item/integrated_circuit/manipulation/weapon_firing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qwZ" = ( +/obj/item/clothing/under/blazer/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxc" = ( +/obj/item/clothing/under/christmas/croptop/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxd" = ( +/obj/structure/largecrate/animal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxq" = ( +/obj/item/clothing/suit/wizrobe/magusblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxs" = ( +/obj/item/weapon/reagent_containers/food/snacks/tomatomeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxv" = ( +/obj/item/ammo_magazine/ammo_box/b545/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxw" = ( +/obj/item/weapon/spacecash/c50, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxx" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratpackramen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxA" = ( +/obj/item/clothing/under/solgov/service/sifguard/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxJ" = ( +/obj/item/device/t_scanner/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxK" = ( +/obj/item/weapon/aliencoin/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxN" = ( +/obj/structure/sign/department/toxin_res, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qxO" = ( +/mob/living/simple_mob/animal/passive/gaslamp/snow{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qxS" = ( +/mob/living/simple_mob/animal/passive/crab/Coffee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qxT" = ( +/obj/structure/closet/crate/mimic/airlock/dangerous, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyc" = ( +/obj/item/device/modkit_conversion/fluff/amara_hos_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyj" = ( +/obj/item/device/halogen_counter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyv" = ( +/obj/item/clothing/under/teshari/smock/uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyy" = ( +/obj/item/integrated_circuit/arithmetic/sign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyE" = ( +/obj/structure/sign/levels/medical/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyS" = ( +/obj/item/weapon/reagent_containers/food/snacks/caramelapple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyU" = ( +/obj/item/clothing/suit/space/void/chrono, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyX" = ( +/obj/item/toy/minigibber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qyZ" = ( +/obj/structure/sign/warning/secure_area/armory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qzp" = ( +/obj/item/organ/internal/augment/armmounted/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qzs" = ( +/obj/structure/sign/levels/engineering/solars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qzu" = ( +/obj/item/clothing/under/fluff/srususoviet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qzw" = ( +/obj/item/clothing/under/rank/cargotech/jeans/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAa" = ( +/obj/item/surplus_voucher/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAb" = ( +/obj/machinery/particle_smasher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAj" = ( +/obj/item/weapon/toy/xmas_cracker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAr" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/antediluvian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAu" = ( +/obj/item/weapon/syringe_cartridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAE" = ( +/obj/item/weapon/card/id/gateway/snowfield/class6S, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAP" = ( +/obj/item/device/assembly/igniter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qAR" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBa" = ( +/obj/item/weapon/reagent_containers/food/snacks/tastybread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBj" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBk" = ( +/obj/item/toy/plushie/grey_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBn" = ( +/obj/item/clothing/gloves/gauntlets/rig/fluff/sheri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBq" = ( +/obj/item/clothing/head/helmet/combat/USDF, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBw" = ( +/obj/structure/sign/signnew/danger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBx" = ( +/obj/item/clothing/head/helmet/space/vox/pressure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBy" = ( +/obj/item/weapon/pen/multi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBD" = ( +/obj/item/ammo_magazine/m9mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBI" = ( +/obj/item/weapon/storage/mrebag/menu9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qBP" = ( +/obj/item/weapon/gun/energy/locked/phasegun/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCb" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/brown_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCi" = ( +/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCk" = ( +/obj/structure/closet/crate/einstein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCp" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/chapel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCC" = ( +/obj/item/device/debugger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qCQ" = ( +/mob/living/simple_mob/shadekin/orange{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qCU" = ( +/obj/item/ammo_casing/a10x24, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDg" = ( +/obj/machinery/vending/event/loadout_misc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDh" = ( +/obj/item/weapon/storage/fancy/fluff/charlotte, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDq" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDr" = ( +/obj/item/stack/material/smolebricks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDs" = ( +/obj/structure/closet/crate/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDt" = ( +/obj/item/weapon/glass_extra/straw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDu" = ( +/obj/item/clothing/head/beret/sec/navy/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDA" = ( +/obj/item/rig_module/ai_container, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDG" = ( +/obj/item/weapon/gun/projectile/caseless/prototype/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDJ" = ( +/obj/item/instrument/accordion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDM" = ( +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDQ" = ( +/obj/item/ammo_magazine/m95/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qDV" = ( +/obj/item/device/personal_shield_generator/belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEf" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEg" = ( +/obj/item/weapon/book/bundle/custom_library/reference/recyclingprocedures, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEh" = ( +/mob/living/simple_mob/humanoid/clown/clown, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qEm" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEo" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/vendburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEu" = ( +/obj/item/clothing/under/rank/atmospheric_technician, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEC" = ( +/obj/structure/prop/machine/tgmc_console4/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qED" = ( +/obj/item/clothing/under/det/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEM" = ( +/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qEN" = ( +/obj/machinery/atmospherics/pipe/cap/visible/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEW" = ( +/obj/item/clothing/under/dress/alpine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qEZ" = ( +/obj/structure/sign/directions/ladder_down, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qFo" = ( +/mob/living/simple_mob/animal/giant_spider/hunter/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qFq" = ( +/obj/item/clothing/shoes/boots/jackboots/toeless/knee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qFJ" = ( +/obj/item/device/nif/protean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qFK" = ( +/obj/item/clothing/shoes/boots/singer/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qFT" = ( +/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun/auto{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qGe" = ( +/obj/item/ammo_magazine/mg42/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGf" = ( +/obj/machinery/artifact/predefined/hungry_statue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGl" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ak74/variantun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGn" = ( +/obj/item/clothing/under/christmas/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGy" = ( +/obj/item/toy/figure/borg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGB" = ( +/obj/item/clothing/suit/armor/vest/wolftaur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGF" = ( +/obj/item/weapon/grenade/spawnergrenade/spider/briefcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGG" = ( +/obj/item/weapon/cartridge/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qGR" = ( +/obj/item/toy/plushie/blue_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHm" = ( +/obj/item/clothing/accessory/dosimeter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHo" = ( +/obj/structure/sign/directions/security/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHM" = ( +/obj/item/clothing/under/rank/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHQ" = ( +/obj/item/weapon/cell/hyper/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHS" = ( +/obj/item/weapon/surgical/scalpel/ripper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHT" = ( +/obj/machinery/crystal/ice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHX" = ( +/obj/machinery/computer/arcade/clawmachine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qHY" = ( +/obj/item/weapon/spell/projectile/chain_lightning/lesser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIa" = ( +/obj/item/weapon/storage/backpack/parachute, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIb" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/red_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIc" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIy" = ( +/obj/item/weapon/paper/Court, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIE" = ( +/obj/item/clothing/head/beret/solgov/survey/extraplanar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIJ" = ( +/obj/item/integrated_circuit/built_in, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIP" = ( +/obj/structure/prop/machine/tube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIS" = ( +/obj/item/weapon/circuitboard/skills, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIU" = ( +/obj/item/weapon/flag/advent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIW" = ( +/obj/item/weapon/gun/magnetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qIY" = ( +/obj/item/clothing/head/hood/winter/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJa" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJe" = ( +/obj/machinery/vending/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJh" = ( +/obj/item/clothing/under/shorts/jeans/youngfolks/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJj" = ( +/obj/item/clothing/accessory/medal/solgov/gold/crest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJl" = ( +/obj/item/clothing/gloves/sterile/nitrile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJm" = ( +/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJo" = ( +/obj/item/clothing/head/fish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJp" = ( +/obj/machinery/vending/wardrobe/mimedrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJt" = ( +/obj/item/clothing/suit/space/syndicate/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJu" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJy" = ( +/obj/machinery/airlock_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJM" = ( +/obj/machinery/door/airlock/angled_bay/hatch/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJN" = ( +/obj/item/clothing/suit/dress/solgov/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qJQ" = ( +/obj/item/ammo_magazine/rpd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKd" = ( +/obj/item/ammo_magazine/m762/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKe" = ( +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKj" = ( +/obj/item/clothing/suit/wizrobe/psypurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKn" = ( +/obj/machinery/recharge_station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKq" = ( +/obj/item/weapon/reagent_containers/food/drinks/chaitea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKs" = ( +/obj/item/integrated_circuit/manipulation/grenade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKt" = ( +/obj/item/clothing/under/color/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKv" = ( +/obj/item/weapon/storage/pill_bottle/citalopram, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKx" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qKC" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKF" = ( +/obj/item/weapon/reagent_containers/food/snacks/stuffing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKG" = ( +/obj/item/weapon/weldingtool/mini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKL" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKM" = ( +/obj/structure/sign/scenery/map/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qKV" = ( +/obj/item/clothing/head/helmet/space/changeling/armored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLa" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLd" = ( +/obj/item/weapon/reagent_containers/food/snacks/nugget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLi" = ( +/obj/item/clothing/head/caphat/formal/fedcover/fedcoverblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLj" = ( +/obj/item/weapon/storage/box/fluff/cassandra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLm" = ( +/obj/item/clothing/suit/space/vox/civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLo" = ( +/obj/item/weapon/card/id/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLD" = ( +/obj/item/device/radio/headset/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLH" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLR" = ( +/obj/structure/closet/crate/miningcar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qLY" = ( +/obj/machinery/door/morgue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMb" = ( +/obj/item/trash/mochicakewrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMe" = ( +/obj/structure/largecrate/animal/swoopie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMi" = ( +/obj/machinery/computer/diseasesplicer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMm" = ( +/obj/item/ammo_magazine/tp23/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMn" = ( +/obj/item/weapon/flame/lighter/zippo/fluff/amara, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMp" = ( +/obj/machinery/chem_master, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMt" = ( +/obj/item/clothing/suit/space/void/refurb/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMz" = ( +/obj/item/weapon/reagent_containers/pill/methylphenidate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMA" = ( +/obj/structure/sign/flag/catpirate/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMD" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qME" = ( +/obj/item/clothing/under/curator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMJ" = ( +/mob/living/simple_mob/vore/horse/big, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qMO" = ( +/obj/item/toy/figure/red_soldier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMP" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qMV" = ( +/obj/item/ammo_casing/a357/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNb" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/mp5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNe" = ( +/obj/structure/table/alien/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNg" = ( +/obj/structure/table/woodentable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNq" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNs" = ( +/obj/item/robot_parts/l_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNG" = ( +/obj/item/weapon/storage/belt/security/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNM" = ( +/obj/machinery/gibber/autogibber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNO" = ( +/obj/item/clothing/head/hood_vr/turnip_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qNP" = ( +/obj/item/trash/cheesie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOk" = ( +/obj/item/clothing/suit/storage/miljacket/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOl" = ( +/obj/machinery/partslathe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOs" = ( +/obj/machinery/gateway{ + dir = 10 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOu" = ( +/obj/structure/symbol/pr, +/turf/simulated/fitness, +/area/survivalpod) +"qOD" = ( +/obj/item/clothing/head/helmet/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOQ" = ( +/obj/item/device/electronic_assembly/clothing/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOR" = ( +/obj/item/trash/rkibble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOY" = ( +/obj/item/weapon/storage/fancy/cigarettes/luckystars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qOZ" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPa" = ( +/obj/item/clothing/under/shorts/jeans/youngfolks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPd" = ( +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPf" = ( +/obj/item/weapon/storage/backpack/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPg" = ( +/obj/item/device/flashlight/lamp/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPn" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPr" = ( +/obj/machinery/light/small/emergency/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPv" = ( +/obj/item/clothing/suit/jacket/puffer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPA" = ( +/obj/item/ammo_casing/macrobattery/detox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPB" = ( +/obj/item/clothing/head/collectable/hardhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPF" = ( +/obj/item/clothing/glasses/aerogelgoggles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPH" = ( +/obj/item/clothing/under/undersuit/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPL" = ( +/obj/item/ammo_casing/microbattery/medical/brute2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPS" = ( +/obj/item/weapon/bedsheet/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPU" = ( +/obj/item/clothing/under/rank/medical/paramedic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPV" = ( +/obj/mecha/medical/odysseus/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qPW" = ( +/obj/item/clothing/suit/armor/swat/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQa" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQg" = ( +/obj/item/weapon/reagent_containers/food/snacks/excitingsuppermattershard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQs" = ( +/obj/item/clothing/head/helmet/space/vox/civ/trader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQu" = ( +/obj/item/seeds/random, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQy" = ( +/obj/item/clothing/head/helmet/space/void/responseteam/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQI" = ( +/obj/item/clothing/suit/whitedress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQP" = ( +/obj/item/device/bodysnatcher, +/obj/item/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qQY" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/mug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRa" = ( +/obj/item/stack/marker_beacon/ten, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRb" = ( +/obj/item/clothing/suit/space/vox/civ/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRd" = ( +/obj/structure/prop/machine/nt_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRe" = ( +/obj/item/weapon/gun/energy/lasertag/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRf" = ( +/obj/item/clothing/head/headband/maid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRg" = ( +/obj/item/device/kit/paint/durand/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRt" = ( +/obj/item/weapon/implant/reagent_generator/tempest/natalya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRv" = ( +/obj/item/capture_crystal/basic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRJ" = ( +/obj/item/clothing/accessory/storage/webbing/pilot1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRP" = ( +/mob/living/simple_mob/animal/giant_spider/nurse/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qRT" = ( +/obj/item/clothing/under/teshari/smock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qRY" = ( +/obj/item/weapon/card/id/cargo/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSd" = ( +/obj/item/capture_crystal/broodmother, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSe" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSj" = ( +/obj/structure/prop/rock/watersharp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSp" = ( +/obj/item/integrated_circuit/passive/power/solar_cell/quad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSt" = ( +/obj/item/weapon/telecube/randomized/mated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSx" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/cheap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSz" = ( +/obj/structure/closet/crate/secure/large/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSC" = ( +/obj/item/weapon/shield_diffuser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSE" = ( +/obj/item/weapon/disk/data/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSK" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSL" = ( +/mob/living/simple_mob/animal/passive/cat/original, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qSM" = ( +/obj/item/weapon/circuitboard/curefab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSR" = ( +/obj/item/stack/material/algae{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qST" = ( +/obj/structure/bookcase/manuals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSV" = ( +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qSX" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/security/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTh" = ( +/obj/item/weapon/SWF_uplink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTj" = ( +/obj/item/weapon/book/custom_library/fiction/irishairmanforseesdeath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTn" = ( +/obj/item/seeds/kudzuseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTq" = ( +/obj/item/clothing/accessory/solgov/rank/ec/officer/o8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTI" = ( +/obj/item/ammo_magazine/clip/c12g/beanbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTJ" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTW" = ( +/obj/item/weapon/shovel/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTX" = ( +/obj/item/weapon/storage/fancy/cigarettes/jerichos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qTZ" = ( +/obj/item/clothing/shoes/flats/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUf" = ( +/obj/item/weapon/anobattery/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUy" = ( +/obj/item/weapon/spacecash/c20, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUL" = ( +/obj/item/clothing/under/rank/medical/scrubs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUO" = ( +/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUP" = ( +/obj/item/clothing/suit/armor/det_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUU" = ( +/obj/item/toy/russian_revolver/trick_revolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qUW" = ( +/obj/item/rig_module/mounted/mop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVd" = ( +/obj/item/weapon/circuitboard/arf_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVf" = ( +/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"qVx" = ( +/obj/item/clothing/head/helmet/space/void/refurb/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVA" = ( +/obj/item/clothing/gloves/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVD" = ( +/obj/item/device/flashlight/lamp/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVF" = ( +/obj/item/bee_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVG" = ( +/obj/item/weapon/circuitboard/mecha/imperion/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVI" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qVM" = ( +/obj/item/weapon/storage/backpack/dufflebag/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWf" = ( +/obj/item/weapon/card/id/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWi" = ( +/obj/item/toy/plushie/borgplushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWr" = ( +/obj/item/clothing/suit/storage/puffypurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWt" = ( +/obj/structure/closet/crate/large/einstein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWu" = ( +/obj/item/weapon/storage/vore_egg/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWv" = ( +/obj/structure/sign/directions/medical/operating_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWx" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWy" = ( +/obj/structure/sign/levels/teleporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWD" = ( +/obj/item/weapon/paper/photograph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWH" = ( +/obj/item/clothing/head/culthood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWI" = ( +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWM" = ( +/obj/item/weapon/storage/backpack/fluff/stunstaff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWN" = ( +/obj/item/device/tape/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWW" = ( +/obj/item/weapon/material/shard/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qWX" = ( +/obj/item/flag/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXe" = ( +/obj/machinery/vending/hydronutrients/brig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXp" = ( +/obj/item/clothing/suit/space/void/merc/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXq" = ( +/obj/item/weapon/storage/box/botanydisk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXu" = ( +/obj/item/clothing/head/hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXv" = ( +/obj/item/rig_module/vision/nvg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXA" = ( +/obj/item/weapon/storage/bag/plants/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXD" = ( +/obj/structure/sign/painting/library_secure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXG" = ( +/obj/item/clothing/head/dress/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXI" = ( +/obj/item/clothing/suit/radiation/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qXM" = ( +/obj/structure/sign/atmosplaque, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYa" = ( +/obj/item/weapon/rig/pmc/security/green/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYb" = ( +/obj/item/ammo_magazine/clip/c12g/scatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYe" = ( +/obj/item/weapon/reagent_containers/food/snacks/bageleverything, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYh" = ( +/obj/item/flag/vystholm/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYl" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYn" = ( +/obj/structure/particle_accelerator/particle_emitter/center, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYs" = ( +/obj/item/stack/tile/carpet/gaycarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYx" = ( +/obj/item/trash/brownies, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYC" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYD" = ( +/obj/item/weapon/storage/backpack/messenger/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYN" = ( +/obj/item/weapon/circuitboard/disperserfront, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYX" = ( +/obj/item/clothing/under/christmas/croptop/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qYY" = ( +/obj/item/integrated_circuit/input, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZa" = ( +/obj/item/weapon/material/knife/machete/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZj" = ( +/obj/structure/outcrop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZk" = ( +/obj/structure/sign/directions/engineering/solars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZl" = ( +/obj/item/clothing/under/shorts/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZJ" = ( +/obj/item/weapon/aiModule, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZL" = ( +/obj/machinery/power/port_gen/pacman/mrs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZU" = ( +/obj/item/weapon/beartrap/hunting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"qZX" = ( +/obj/item/clothing/glasses/meson/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raa" = ( +/obj/item/weapon/gun/projectile/dartgun/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raf" = ( +/obj/item/clothing/head/hood/winter/aformal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raj" = ( +/obj/item/weapon/card/id/event, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ran" = ( +/obj/item/toy/character/lich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rav" = ( +/obj/item/clothing/under/psyche, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raC" = ( +/obj/item/weapon/circuitboard/communications, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raD" = ( +/obj/item/weapon/fluff/dragor_dot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raK" = ( +/obj/item/weapon/storage/backpack/messenger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raO" = ( +/obj/structure/sign/vacuum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"raP" = ( +/obj/item/weapon/rig/ert/assetprotection, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbe" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/christmasgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbj" = ( +/mob/living/simple_mob/humanoid/merc/ranged/technician{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rbo" = ( +/obj/item/clothing/suit/greatcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbx" = ( +/obj/item/clothing/under/rank/psych/turtleneck/sweater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rby" = ( +/obj/item/clothing/accessory/holster/armpit/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbA" = ( +/obj/item/clothing/suit/wizrobe/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbD" = ( +/obj/item/weapon/reagent_containers/food/drinks/smallmilk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbG" = ( +/obj/item/mecha_parts/part/odysseus_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbJ" = ( +/obj/item/weapon/refill_cartridge/multitype/clothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbT" = ( +/obj/item/clothing/suit/storage/solgov/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbV" = ( +/obj/item/weapon/storage/backpack/fluff/kaith, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rbW" = ( +/obj/item/clothing/under/rank/medical/paramedic_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcb" = ( +/obj/item/clothing/under/lawyer/red/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcc" = ( +/obj/item/rig_module/device/defib, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcd" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcj" = ( +/obj/item/rig_module/device/drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rck" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcq" = ( +/obj/item/weapon/handcuffs/cable/tape/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcs" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcB" = ( +/obj/item/weapon/gun/energy/laser/mounted/augment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcG" = ( +/obj/item/clothing/suit/space/void/engineering/hazmat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcO" = ( +/obj/item/weapon/implant/integrated_circuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcP" = ( +/obj/item/weapon/mining_scanner/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcS" = ( +/obj/machinery/power/solar_control/config_start, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcU" = ( +/obj/item/weapon/reagent_containers/food/drinks/h_chocolate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rcX" = ( +/obj/item/weapon/book/manual/hydroponics_pod_people, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdb" = ( +/obj/item/weapon/reagent_containers/food/snacks/truffle/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rde" = ( +/obj/item/clothing/head/beret/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rds" = ( +/obj/item/weapon/book/custom_library/fiction/blacksmithandkinglybloke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdx" = ( +/obj/item/weapon/spell/oxygenate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdH" = ( +/obj/item/weapon/card/id/centcom/ERT/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdI" = ( +/obj/item/device/personal_shield_generator/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdL" = ( +/obj/item/clothing/suit/armor/combat/USDF, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdO" = ( +/obj/item/weapon/storage/smolebrickcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdP" = ( +/obj/item/weapon/stamp/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rdW" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/vendburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rea" = ( +/obj/item/weapon/book/custom_library/fiction/myrock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ren" = ( +/obj/item/weapon/reagent_containers/food/snacks/dip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"req" = ( +/obj/item/clothing/accessory/armor/armorplate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"res" = ( +/obj/item/clothing/accessory/solgov/department/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ret" = ( +/obj/item/clothing/shoes/tourist_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reI" = ( +/obj/item/toy/figure/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reK" = ( +/obj/item/weapon/rig/ert/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reM" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reS" = ( +/obj/item/weapon/bikehorn/tinytether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reU" = ( +/obj/item/weapon/tank/stasis/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reX" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/soy_latte, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"reZ" = ( +/obj/item/device/perfect_tele, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfd" = ( +/obj/item/device/electronic_assembly/tiny/box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfg" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/hydrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfz" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfC" = ( +/obj/item/weapon/gun/projectile/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfO" = ( +/obj/machinery/door/airlock/engineeringatmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfP" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rfU" = ( +/obj/item/weapon/storage/fancy/cigarettes/yw/mauser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rge" = ( +/obj/item/clothing/shoes/heels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgl" = ( +/obj/structure/sign/sec4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgq" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgv" = ( +/obj/machinery/smartfridge/chemistry/chemvator/down, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgx" = ( +/obj/item/weapon/circuitboard/mecha/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgA" = ( +/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgE" = ( +/obj/item/clothing/ears/skrell/cloth_female/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgQ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgR" = ( +/obj/machinery/suit_cycler/vintage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgT" = ( +/obj/item/weapon/reagent_containers/food/snacks/generalschicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgX" = ( +/obj/item/weapon/bananapeel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rgY" = ( +/obj/item/device/slow_sizegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rha" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/olive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhg" = ( +/obj/item/weapon/storage/backpack/dufflebag/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhj" = ( +/obj/item/seeds/thaadra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhk" = ( +/obj/item/clothing/accessory/armor/legguards/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhA" = ( +/obj/item/trash/sweetration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhD" = ( +/obj/item/weapon/circuitboard/doorbell_chime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rhL" = ( +/obj/item/clothing/accessory/collar/fluff/stellar_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rih" = ( +/obj/item/weapon/storage/backpack/satchel/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rij" = ( +/obj/item/weapon/circuitboard/machine/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rit" = ( +/obj/item/weapon/gun/projectile/automatic/bullpup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"riE" = ( +/obj/item/clothing/accessory/badge/holo/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"riT" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjb" = ( +/obj/item/clothing/ears/skrell/band/ebony, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjd" = ( +/obj/item/clothing/accessory/poncho/thermal/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjm" = ( +/obj/item/wheelchair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjo" = ( +/obj/item/clothing/head/hood/winter/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjw" = ( +/obj/machinery/space_heater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjM" = ( +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjN" = ( +/obj/item/clothing/head/hood/winter/security/santa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjT" = ( +/obj/item/weapon/tank/oxygen/onetankbomb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjU" = ( +/obj/item/clothing/under/dress/dress_hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjV" = ( +/obj/item/clothing/head/service/sifguard/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rjX" = ( +/obj/item/clothing/accessory/medal/solgov/iron/star, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rka" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/applecake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkh" = ( +/obj/item/weapon/card/id/event/altcard/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkk" = ( +/obj/item/weapon/stock_parts/manipulator/nano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkl" = ( +/obj/machinery/chemical_dispenser/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rko" = ( +/obj/item/weapon/circuitboard/transhuman_resleever, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkx" = ( +/obj/item/clothing/accessory/scarf/altevian/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rky" = ( +/obj/item/clothing/suit/storage/hooded/costume/ian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkA" = ( +/obj/item/weapon/pickaxe/diamonddrill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkE" = ( +/obj/item/clothing/ears/skrell/colored/band, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkO" = ( +/obj/item/seeds/cutting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkQ" = ( +/obj/item/clothing/suit/monkeysuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rkT" = ( +/obj/item/weapon/arrow/rod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rln" = ( +/obj/item/weapon/spell/energy_siphon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlr" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/surge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlt" = ( +/obj/item/toy/bosunwhistle/fluff/strix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlu" = ( +/obj/machinery/atmospherics/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlw" = ( +/mob/living/simple_mob/animal/giant_spider/lurker{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rly" = ( +/obj/vehicle/bike/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlD" = ( +/obj/item/clothing/mask/gas/wwii, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlH" = ( +/obj/item/weapon/gun/projectile/cell_loaded/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlK" = ( +/obj/item/weapon/reagent_containers/food/snacks/onionsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlO" = ( +/obj/item/clothing/under/pants/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlP" = ( +/mob/living/simple_mob/vore/aggressive/lizardman{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rlS" = ( +/obj/item/trash/cookiesnack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlV" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlX" = ( +/obj/structure/sign/levels/medical/operating_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rlZ" = ( +/obj/item/clothing/head/helmet/space/void, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rme" = ( +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmg" = ( +/obj/item/clothing/under/fluff/slime_skeleton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmi" = ( +/obj/item/clothing/head/helmet/space/void/engineering/construction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmo" = ( +/obj/item/clothing/under/det/waistcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmx" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmz" = ( +/obj/item/clothing/under/dress/dress_fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmI" = ( +/obj/item/clothing/suit/armor/pcarrier/riot/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rmL" = ( +/obj/item/clothing/under/fluff/kelplagueuniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnb" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnx" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnA" = ( +/obj/item/toy/plushie/robo_corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnC" = ( +/obj/item/stack/medical/bruise_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnG" = ( +/obj/item/stack/cable_coil/heavyduty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnH" = ( +/obj/item/ammo_casing/afoam_dart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnP" = ( +/obj/structure/dark_portal/hub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnQ" = ( +/obj/item/organ/internal/xenos/plasmavessel/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnS" = ( +/obj/item/weapon/bedsheet/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnT" = ( +/mob/living/simple_mob/animal/sif/savik{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rnU" = ( +/obj/structure/sign/flag/almach_a/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnX" = ( +/obj/item/integrated_circuit/list/write, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnY" = ( +/obj/machinery/light/small/fairylights, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rnZ" = ( +/obj/structure/filingcabinet/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rof" = ( +/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"roi" = ( +/obj/machinery/cablelayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"roj" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/dylovene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rol" = ( +/obj/structure/sign/flag/sol/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"roq" = ( +/obj/mecha/combat/fighter/baron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rot" = ( +/obj/item/weapon/reagent_containers/blood/APlus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"roK" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, +/turf/simulated/floor/atoll, +/area/survivalpod) +"roN" = ( +/obj/item/seeds/redtowermycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"roS" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/glock71, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpb" = ( +/obj/item/weapon/cell/device/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpe" = ( +/obj/item/weapon/storage/box/condimentbottles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpk" = ( +/obj/item/clothing/shoes/boots/jackboots/fluff/sam_boots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpn" = ( +/obj/item/clothing/accessory/bracer/fluff/xander_sthasha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpB" = ( +/obj/item/clothing/head/soft/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpI" = ( +/obj/structure/bed/chair/sofa/left/sif_ora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpJ" = ( +/obj/item/weapon/storage/wallet/womens, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpT" = ( +/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rpV" = ( +/mob/living/simple_mob/metroid/juvenile/zeta{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rqa" = ( +/mob/living/simple_mob/humanoid/pirate/shield{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rqe" = ( +/obj/item/device/mass_spectrometer/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqf" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqq" = ( +/obj/item/device/electronic_assembly/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqr" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqA" = ( +/obj/item/weapon/vehicle_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqD" = ( +/obj/item/clothing/under/teshari/undercoat/standard/lightgrey_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqF" = ( +/obj/structure/closet/body_bag/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqL" = ( +/obj/machinery/gravity_generator/main/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqM" = ( +/mob/living/simple_mob/animal/passive/fox{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rqP" = ( +/obj/item/clothing/accessory/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqR" = ( +/obj/item/ammo_magazine/mp5mag/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rqW" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrd" = ( +/obj/item/weapon/shield/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rri" = ( +/obj/item/trash/tidegobs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrn" = ( +/obj/item/clothing/under/sifcop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrq" = ( +/obj/structure/barricade/cutout/traitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrt" = ( +/obj/machinery/vending/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rru" = ( +/obj/item/stack/tile/floor/sidewalk/slab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrF" = ( +/obj/item/clothing/under/dress/white3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrR" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/nutriment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrY" = ( +/obj/item/ammo_magazine/m12gdrumjack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rrZ" = ( +/obj/item/clothing/under/rank/parameduniskirtlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rso" = ( +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"rsp" = ( +/obj/item/weapon/gun/magnetic/matfed/phoronbore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsF" = ( +/obj/structure/sign/warning/pods, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsN" = ( +/obj/item/device/measuring_tape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsP" = ( +/obj/item/clothing/glasses/night/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsQ" = ( +/obj/item/clothing/suit/space/void/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsS" = ( +/obj/item/clothing/suit/storage/snowsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rsY" = ( +/mob/living/simple_mob/horror/Eddy{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rta" = ( +/obj/structure/bed/chair/sofa/bench/marble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtb" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/soup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rth" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/old/tox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rti" = ( +/obj/item/clothing/suit/storage/vest/solgov/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtk" = ( +/obj/item/pipe/trinary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtw" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtG" = ( +/obj/machinery/suit_cycler/vintage/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtK" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtO" = ( +/obj/item/weapon/gun/launcher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/risottoballs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtS" = ( +/obj/item/weapon/circuitboard/mecha/gygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtX" = ( +/obj/item/clothing/shoes/hitops/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rtY" = ( +/obj/item/clothing/shoes/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rur" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rus" = ( +/obj/item/clothing/accessory/scarf/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rux" = ( +/obj/machinery/vending/deluxe_dinner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruy" = ( +/obj/item/weapon/tool/wrench/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruz" = ( +/obj/item/weapon/stamp/internalaffairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruB" = ( +/obj/item/weapon/reagent_containers/food/snacks/pretzels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruD" = ( +/obj/structure/closet/crate/mimic/closet/guaranteed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruE" = ( +/obj/item/organ/internal/eyes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruJ" = ( +/obj/item/weapon/storage/box/fluff/maxie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruT" = ( +/obj/item/clothing/accessory/collar/holo/indigestible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruY" = ( +/obj/item/weapon/storage/belt/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ruZ" = ( +/obj/item/toy/plushie/moth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvn" = ( +/obj/item/weapon/reagent_containers/food/snacks/greencurry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvo" = ( +/obj/item/device/radio/headset/raider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvp" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvH" = ( +/obj/item/ammo_casing/a792, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvN" = ( +/obj/structure/prop/machine/sorter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvP" = ( +/obj/structure/prop/esoteric/reader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvQ" = ( +/obj/item/weapon/gun/magnetic/gasthrower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvR" = ( +/obj/item/toy/figure/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvS" = ( +/obj/item/weapon/material/kitchen/utensil/spoon/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rvX" = ( +/obj/item/toy/figure/cargotech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwh" = ( +/obj/item/weapon/syndie/c4explosive/heavy/super_heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwj" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwk" = ( +/obj/structure/closet/secure_closet/guncabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwq" = ( +/obj/item/clothing/under/rank/geneticist_new, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwC" = ( +/obj/item/clothing/glasses/sunglasses/medhud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwE" = ( +/obj/structure/sign/directions/science/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rwZ" = ( +/obj/structure/loot_pile/surface, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxb" = ( +/obj/item/weapon/spell/construct/projectile/inverted_beam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxg" = ( +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxj" = ( +/obj/item/weapon/reagent_containers/glass/bottle/myelamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxk" = ( +/obj/item/clothing/under/solgov/service/sifguard/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxm" = ( +/mob/living/simple_mob/metroid/juvenile/alpha{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rxJ" = ( +/obj/item/clothing/suit/space/vox/civ/botanist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxK" = ( +/obj/item/trash/waffles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxL" = ( +/obj/structure/sign/department/prison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/dorayaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxW" = ( +/obj/item/clothing/under/swimsuit/fluff/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rxZ" = ( +/obj/item/clothing/under/cowboy/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryb" = ( +/obj/item/clothing/under/clown/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryq" = ( +/obj/item/mecha_parts/part/durand_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rys" = ( +/obj/item/weapon/gun/energy/bfgtaser/tongue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryu" = ( +/obj/item/weapon/surgical/bioregen/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryz" = ( +/obj/item/organ/internal/liver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryA" = ( +/obj/item/seeds/lettuce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryH" = ( +/obj/item/weapon/book/manual/rotary_electric_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryV" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/hyronalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ryY" = ( +/obj/item/weapon/reagent_containers/food/snacks/lomein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzf" = ( +/obj/item/ammo_casing/a9mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzl" = ( +/obj/item/weapon/gun/projectile/lamia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzp" = ( +/obj/structure/event/stage{ + icon_state = "grass" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzs" = ( +/obj/machinery/shieldwall{ + dir = 9 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzu" = ( +/obj/item/weapon/storage/box/wormcan/sickly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzv" = ( +/obj/item/clothing/accessory/poncho/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzx" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzy" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzB" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzC" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/electro{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rzF" = ( +/obj/item/ammo_casing/a57/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzH" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rzT" = ( +/obj/item/weapon/mine/frag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rzY" = ( +/obj/item/weapon/circuitboard/mecha/gygax/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAt" = ( +/obj/item/device/electronic_assembly/wallmount/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAv" = ( +/obj/item/weapon/book/custom_library/religious/storyoflordganesha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAw" = ( +/obj/item/weapon/storage/belt/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAy" = ( +/obj/item/weapon/gun/energy/laser/practice/xenoarch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAE" = ( +/obj/structure/reagent_dispensers/space_cleaner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAK" = ( +/obj/item/clothing/under/shorts/cshorts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAM" = ( +/obj/item/weapon/card/mining_point_card/survey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAP" = ( +/obj/structure/largecrate/vehicle/bike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAQ" = ( +/obj/item/clothing/accessory/armor/tag/aneg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAX" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAY" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rAZ" = ( +/obj/item/weapon/material/knife/machete/hatchet/stone/bone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBd" = ( +/obj/item/weapon/circuitboard/machine/abductor/core/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBe" = ( +/obj/item/weapon/card/id/generic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBo" = ( +/obj/item/weapon/gun/magnetic/railgun/heater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBq" = ( +/obj/item/weapon/gun/launcher/spikethrower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBy" = ( +/obj/item/ammo_casing/a545/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBA" = ( +/obj/item/ammo_casing/a762/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBB" = ( +/mob/living/simple_mob/mechanical/mecha/ripley/pirate/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rBL" = ( +/obj/item/clothing/suit/armor/pcarrier/medium/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBM" = ( +/obj/item/stack/tile/floor/eris/dark/cyancorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBP" = ( +/obj/item/flag/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBV" = ( +/obj/item/clothing/under/rank/chief_engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rBZ" = ( +/obj/mecha/combat/fighter/baron/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCc" = ( +/obj/item/debris_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCe" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/fennec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCh" = ( +/obj/item/clothing/accessory/fluff/heartpin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCo" = ( +/obj/item/clothing/under/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCs" = ( +/obj/item/integrated_circuit/converter/refdecode, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCt" = ( +/obj/structure/sign/levels/security/seceqp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCA" = ( +/obj/item/weapon/gun/energy/mouseray/redpanda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCK" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCP" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/sterilizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCV" = ( +/obj/item/clothing/gloves/ring/material/osmium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCX" = ( +/obj/item/weapon/handcuffs/cable/plantfiber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rCZ" = ( +/obj/item/clothing/accessory/armor/legguards/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDg" = ( +/obj/item/clothing/glasses/sunglasses/bigshot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDk" = ( +/obj/structure/sign/kiddieplaque/poi4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDl" = ( +/obj/item/clothing/under/dress/antediluvian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDm" = ( +/obj/item/ammo_magazine/clip/c45/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDt" = ( +/obj/item/clothing/gloves/arm_guard/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDv" = ( +/obj/structure/closet/secure_closet/egg/shark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDx" = ( +/obj/item/clothing/accessory/gaiter/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDz" = ( +/mob/living/simple_mob/animal/giant_spider/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rDK" = ( +/obj/item/trash/pistachios, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rDU" = ( +/obj/item/weedkiller/lindane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEc" = ( +/obj/item/weapon/disposable_teleporter/free, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEd" = ( +/obj/item/weapon/reagent_containers/food/snacks/devilledegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEi" = ( +/obj/item/clothing/shoes/flats/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEj" = ( +/obj/item/weapon/reagent_containers/pill/kelotane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEr" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/mu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEx" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEz" = ( +/obj/item/ammo_magazine/m45/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rED" = ( +/obj/item/stack/tile/floor/eris/steel/danger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEI" = ( +/obj/item/weapon/reagent_containers/food/snacks/hanami_dango, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEO" = ( +/obj/item/clothing/under/teshari/smock/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rER" = ( +/obj/structure/closet/crate/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEW" = ( +/obj/item/clothing/shoes/hitops/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rEZ" = ( +/obj/item/clothing/ears/earring/dangle/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFa" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/beepskysmash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFo" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFq" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rFu" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "33" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFv" = ( +/obj/item/weapon/storage/chewables/tobacco/fine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFA" = ( +/obj/item/device/encryptionkey/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFL" = ( +/obj/item/clothing/suit/space/vox/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFS" = ( +/obj/item/organ/internal/spleen/minor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFX" = ( +/mob/living/simple_mob/animal/passive/cat/jones, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rFY" = ( +/obj/item/weapon/spacecash/c100, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rFZ" = ( +/obj/item/clothing/mask/ai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGa" = ( +/obj/item/clothing/accessory/armor/tag/bpos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGb" = ( +/obj/item/mecha_parts/mecha_equipment/combat_shield, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGn" = ( +/obj/item/weapon/spell/illusion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGx" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGy" = ( +/obj/item/clothing/shoes/sandal/clogs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGA" = ( +/obj/structure/closet/secure_closet/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGC" = ( +/obj/structure/mirror, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGL" = ( +/obj/structure/sign/level/fourth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGS" = ( +/obj/structure/table/bench/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGT" = ( +/obj/structure/bed/chair/sofa/pew/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rGU" = ( +/obj/item/clothing/suit/dress/saare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHf" = ( +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHg" = ( +/obj/item/device/t_scanner/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHm" = ( +/obj/item/clothing/accessory/shiny/socks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHw" = ( +/obj/item/clothing/shoes/magboots/changeling/armored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHy" = ( +/obj/item/trash/carpegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHG" = ( +/obj/item/weapon/reagent_containers/glass/paint/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHN" = ( +/obj/item/mecha_parts/part/janus_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHQ" = ( +/obj/item/toy/plushie/mouse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHR" = ( +/obj/structure/sign/directions/kitchen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rHZ" = ( +/obj/item/clothing/shoes/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIm" = ( +/obj/item/stack/material/wood/hard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIo" = ( +/obj/machinery/suit_cycler/vintage/tcaptain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIG" = ( +/obj/item/slimepotion/stabilizer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIJ" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIM" = ( +/obj/structure/noticeboard/toxins, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIQ" = ( +/obj/item/weapon/mine/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIS" = ( +/obj/item/clothing/under/customs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rIU" = ( +/mob/living/simple_mob/humanoid/pirate/ranged/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rIV" = ( +/obj/item/clothing/head/sombrero, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJc" = ( +/obj/item/weapon/reagent_containers/food/snacks/spicy_boys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJl" = ( +/obj/item/weapon/dnainjector/anticlumsy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJu" = ( +/obj/item/weapon/pickaxe/drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJC" = ( +/obj/item/clothing/under/tribalwear/common1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJU" = ( +/obj/item/weapon/reagent_containers/glass/bottle/alkysine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJX" = ( +/obj/machinery/portable_atmospherics/powered/pump/huge/stationary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rJZ" = ( +/obj/item/clothing/under/pants/utility/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKf" = ( +/obj/structure/timer_door, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKr" = ( +/obj/item/clothing/head/collectable/welding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKw" = ( +/obj/item/weapon/storage/mre/menu3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKA" = ( +/obj/item/ammo_casing/a545, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKF" = ( +/obj/structure/sign/levels/science/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKG" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/honker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKJ" = ( +/obj/item/device/cataloguer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKK" = ( +/obj/item/clothing/accessory/medal/gold/heroism, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rKM" = ( +/obj/item/weapon/gun/projectile/caseless/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLa" = ( +/obj/item/weapon/disk/limb/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLc" = ( +/obj/item/integrated_circuit/passive/power/solar_cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLk" = ( +/obj/item/ammo_casing/a38/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLl" = ( +/obj/item/weapon/gun/energy/taser/disabler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLo" = ( +/obj/item/weapon/implanter/reagent_generator/mira, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLu" = ( +/mob/living/simple_mob/vore/hippo{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rLw" = ( +/obj/machinery/atmospherics/pipe/tank/carbon_dioxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLz" = ( +/obj/item/weapon/book/codex/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLB" = ( +/obj/item/clothing/suit/armor/pcarrier/bulletproof/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLN" = ( +/obj/item/clothing/head/surgery/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rLU" = ( +/obj/item/clothing/head/helmet/space/void/refurb/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMc" = ( +/obj/item/ammo_casing/microbattery/medical/resist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMh" = ( +/obj/item/weapon/gun/projectile/luger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMi" = ( +/obj/item/clothing/head/beret/solgov/gateway, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMj" = ( +/obj/structure/reagent_dispensers/peppertank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMo" = ( +/obj/item/clothing/head/hood/winter/security/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMp" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMH" = ( +/obj/item/clothing/head/collectable/kitty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMM" = ( +/obj/item/weapon/book/bundle/custom_library/nonfiction/riseandfallofpersianempire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMS" = ( +/obj/item/weapon/reagent_containers/glass/bottle/capsaicin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rMV" = ( +/obj/structure/symbol/lo, +/turf/simulated/fitness, +/area/survivalpod) +"rMZ" = ( +/obj/item/clothing/head/soft/solgov/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNf" = ( +/obj/item/clothing/head/beret/solgov/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNm" = ( +/obj/item/weapon/reagent_containers/food/snacks/cuttlefishcooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNu" = ( +/obj/item/clothing/under/teshari/undercoat/fluff/strix_cco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNA" = ( +/obj/item/clothing/mask/chewable/tobacco/nico, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNB" = ( +/obj/item/weapon/aiModule/maintenance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNM" = ( +/obj/item/weapon/storage/box/donkpockets/spicy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNR" = ( +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNV" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "21" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rNZ" = ( +/obj/item/clothing/under/vox/vox_robes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOa" = ( +/obj/structure/sign/levels/medical/cloning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOh" = ( +/obj/item/weapon/gun/energy/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOv" = ( +/obj/machinery/vending/wardrobe/bardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOx" = ( +/obj/item/integrated_circuit/reagent/storage/cryo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOy" = ( +/obj/item/clothing/suit/storage/toggle/track/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOz" = ( +/obj/item/clothing/under/teshari/smock/greydress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOD" = ( +/obj/item/weapon/shield/fluff/wolfgirlshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOJ" = ( +/obj/structure/closet/lawcloset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOK" = ( +/obj/item/clothing/head/helmet/space/vox/civ/librarian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rOX" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPk" = ( +/obj/structure/prop/statue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPn" = ( +/obj/item/weapon/firework_star/aesthetic/configurable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPp" = ( +/obj/item/weapon/computer_hardware/battery_module/nano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPy" = ( +/mob/living/simple_mob/animal/passive/crab/sif{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rPD" = ( +/obj/machinery/door/blast/gate/bars/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPI" = ( +/obj/machinery/door/airlock/sandstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPJ" = ( +/obj/item/toy/cultsword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rPK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQa" = ( +/obj/item/weapon/handcuffs/cable/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQb" = ( +/obj/item/trash/ratpackramen/trans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQc" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQe" = ( +/obj/item/ammo_magazine/t12, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQi" = ( +/obj/machinery/alarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQl" = ( +/mob/living/simple_mob/vore/sheep{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rQo" = ( +/obj/structure/particle_accelerator/end_cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQp" = ( +/obj/structure/door_assembly/door_assembly_research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQJ" = ( +/obj/item/weapon/gun/energy/meteorgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQK" = ( +/obj/item/clothing/suit/space/syndicate/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQS" = ( +/obj/item/weapon/book/codex/lore/robutt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rQU" = ( +/obj/item/stack/arcadeticket/thirty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRb" = ( +/obj/item/clothing/suit/space/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRf" = ( +/obj/item/weapon/circuitboard/request, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRi" = ( +/obj/item/clothing/under/rank/trek/medsci/next, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRl" = ( +/obj/structure/sign/warning/caution, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRq" = ( +/obj/item/seeds/cabbageseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRu" = ( +/obj/item/weapon/scepter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRv" = ( +/obj/item/clothing/accessory/armor/helmcover/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRB" = ( +/obj/item/stack/material/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRG" = ( +/obj/item/weapon/reagent_containers/food/snacks/friedegg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRL" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/singulo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRN" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRW" = ( +/obj/structure/bed/chair/sofa/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rRX" = ( +/obj/item/clothing/accessory/scarf/stripedgreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSc" = ( +/obj/item/weapon/commcard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSf" = ( +/obj/item/weapon/reagent_containers/food/snacks/onionrings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSg" = ( +/obj/item/weapon/tank/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSo" = ( +/obj/item/toy/figure/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSu" = ( +/obj/item/weapon/storage/box/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSv" = ( +/obj/item/weapon/circuitboard/timeclock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSw" = ( +/obj/item/weapon/reagent_containers/spray/luminol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSB" = ( +/obj/item/capture_crystal/cheap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSG" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSH" = ( +/obj/structure/bed/chair/sofa/pew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSL" = ( +/obj/structure/stripper_pole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSS" = ( +/obj/item/weapon/circuitboard/pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rSV" = ( +/obj/item/clothing/head/helmet/space/void/security/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTe" = ( +/obj/item/trash/smolburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTi" = ( +/obj/item/clothing/suit/storage/vest/heavy/flexitac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTj" = ( +/obj/item/weapon/rig/pmc/commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTs" = ( +/obj/item/clothing/suit/storage/explorer/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTt" = ( +/obj/item/weapon/storage/bag/plasticbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTw" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTA" = ( +/obj/item/device/laser_pointer/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTC" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxycodone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTD" = ( +/obj/item/weapon/reagent_containers/glass/bottle/ammonia, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTE" = ( +/mob/living/simple_mob/animal/passive/gaslamp{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rTI" = ( +/obj/item/weapon/reagent_containers/food/snacks/oort, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTK" = ( +/obj/item/clothing/under/solgov/service/sifguard/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTQ" = ( +/obj/structure/prop/statue/pillar/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rTT" = ( +/obj/item/weapon/flamethrower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUc" = ( +/obj/structure/barricade/cutout/greytide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUe" = ( +/obj/item/weapon/TVAssembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUg" = ( +/obj/item/weapon/material/knife/stone/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUi" = ( +/obj/item/clothing/suit/cardborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUt" = ( +/obj/machinery/message_server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUz" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUB" = ( +/obj/item/weapon/folder/blue_hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUM" = ( +/obj/machinery/vending/event/food/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUQ" = ( +/obj/item/weapon/handcuffs/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rUT" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rVa" = ( +/obj/structure/sign/directions/stairs_up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVh" = ( +/obj/item/clothing/head/tesh_hood/standard/purple_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVm" = ( +/obj/structure/bed/chair/sofa/left/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVq" = ( +/obj/item/weapon/circuitboard/mecha/phazon/main, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVB" = ( +/obj/item/weapon/refill_cartridge/autoname/food/sovietvend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVE" = ( +/obj/item/weapon/flame/lighter/zippo/gonzo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVJ" = ( +/obj/item/weapon/material/knife/table/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVK" = ( +/obj/item/clothing/accessory/sweater/keyhole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVM" = ( +/obj/item/clothing/head/beret/solgov/stratcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVQ" = ( +/obj/item/weapon/storage/box/fluff/alva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVR" = ( +/obj/item/clothing/head/beret/solgov/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVU" = ( +/obj/machinery/door/airlock/angled_bay/hatch/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rVX" = ( +/obj/structure/sign/directions/medical/surgery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWf" = ( +/obj/machinery/computer/arcade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWi" = ( +/obj/item/clothing/under/color/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWp" = ( +/obj/machinery/door/airlock/alien/public, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWE" = ( +/obj/item/ammo_magazine/m12gdrum/beanbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWK" = ( +/obj/machinery/gateway{ + dir = 6 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWL" = ( +/obj/item/weapon/grenade/confetti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rWR" = ( +/obj/item/weapon/storage/toolbox/lunchbox/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXe" = ( +/obj/item/integrated_circuit/memory/constant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXf" = ( +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXg" = ( +/obj/item/weapon/cane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXr" = ( +/obj/item/clothing/under/dress/vneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXy" = ( +/obj/item/weapon/spell/spawner/pulsar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXA" = ( +/obj/item/clothing/head/fedora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXB" = ( +/obj/item/toy/plushie/carp/dragon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXG" = ( +/obj/item/weapon/ore/hydrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXL" = ( +/obj/item/weapon/reagent_containers/food/snacks/clubsandwich, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXN" = ( +/obj/item/clothing/under/shorts/jeans/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rXV" = ( +/mob/living/simple_mob/mechanical/hivebot/support/commander{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rXZ" = ( +/obj/machinery/power/smes/buildable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYb" = ( +/obj/item/clothing/gloves/weddingring/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYh" = ( +/mob/living/simple_mob/animal/synx/scp{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"rYk" = ( +/obj/machinery/button/crematorium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYv" = ( +/obj/item/gunbox/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYy" = ( +/obj/item/weapon/gun/projectile/smartgun/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYI" = ( +/obj/structure/closet/walllocker/emerglocker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYJ" = ( +/obj/item/weapon/gun/projectile/revolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYL" = ( +/obj/item/weapon/dnainjector/h2m, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rYZ" = ( +/obj/item/clothing/suit/hackercost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZf" = ( +/obj/item/weapon/storage/box/glasses/wine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZh" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZm" = ( +/obj/item/clothing/accessory/ribbon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZp" = ( +/obj/item/weapon/circuitboard/mecha/scarab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZu" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZy" = ( +/obj/item/stack/tile/floor/eris/white/brown_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZB" = ( +/obj/item/toy/plushie/borgplushie/drake/jani, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZE" = ( +/obj/item/toy/plushie/snakeplushie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZQ" = ( +/obj/item/device/robotanalyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"rZS" = ( +/obj/item/clothing/head/helmet/space/void/responseteam/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"saa" = ( +/obj/item/clothing/shoes/sandal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"saf" = ( +/obj/item/clothing/suit/storage/toggle/hoodie/fluff/noel_hoodie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sag" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/type901, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sak" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"saY" = ( +/obj/machinery/light/poi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbb" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbd" = ( +/obj/item/rig_module/self_destruct, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbe" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/kvass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbg" = ( +/obj/item/weapon/storage/vore_egg/badrecipe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbk" = ( +/obj/item/seeds/goldappleseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbl" = ( +/mob/living/simple_mob/vore/leopardmander{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sbo" = ( +/obj/machinery/door/blast/multi_tile/three_tile_hor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbv" = ( +/obj/machinery/door/airlock/angled_tgmc/security_glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbD" = ( +/obj/item/clothing/head/hood/winter/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbE" = ( +/obj/structure/sign/graffiti/pisoff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbI" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/clonexadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbN" = ( +/obj/item/weapon/circuitboard/stationalert_engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbP" = ( +/obj/item/stack/tile/floor/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbQ" = ( +/obj/item/clothing/accessory/bowtie/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbS" = ( +/obj/item/weapon/gun/projectile/pistol/toy/n99, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sbY" = ( +/obj/item/seeds/grapeseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sca" = ( +/obj/item/trash/cigbutt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scj" = ( +/obj/item/clothing/suit/armor/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scn" = ( +/obj/mecha/combat/scarab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scq" = ( +/obj/machinery/blackbox_recorder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scr" = ( +/obj/item/weapon/digestion_remains/skull/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scz" = ( +/obj/item/clothing/head/rose_crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scB" = ( +/obj/item/weapon/circuitboard/ntnet_relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scH" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/ssp4_silenced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scN" = ( +/obj/item/integrated_circuit/time/ticker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"scX" = ( +/obj/item/clothing/under/rank/trek/medsci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdj" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdl" = ( +/obj/structure/largecrate/animal/goat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdo" = ( +/obj/machinery/atmospherics/tvalve/mirrored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdq" = ( +/obj/machinery/newscaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdr" = ( +/obj/item/clothing/accessory/permit/drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdu" = ( +/obj/item/weapon/reagent_containers/food/snacks/fruit_slice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdF" = ( +/obj/item/clothing/under/skirt/outfit/plaid_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdG" = ( +/obj/item/weapon/stock_parts/capacitor/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdQ" = ( +/obj/item/rig_module/datajack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdT" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sdW" = ( +/obj/item/ammo_magazine/ammo_box/b10mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seb" = ( +/obj/item/weapon/circuitboard/telecomms/broadcaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sec" = ( +/obj/item/weapon/card/id/silver/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seh" = ( +/obj/item/stack/tile/floor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sen" = ( +/obj/item/device/destTagger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seo" = ( +/obj/item/integrated_circuit/arithmetic/addition, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ses" = ( +/obj/item/weapon/refill_cartridge/autoname/drink/bepis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seu" = ( +/obj/item/ammo_casing/a57/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seD" = ( +/obj/item/clothing/under/cohesion/striped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seF" = ( +/obj/item/toy/tennis/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seH" = ( +/obj/item/capture_crystal/skeleton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seI" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/carrotjuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seJ" = ( +/obj/item/clothing/suit/storage/solgov/service/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seQ" = ( +/obj/item/clothing/under/rank/khi/sec/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"seU" = ( +/obj/item/weapon/storage/pouch/holster/full_taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfb" = ( +/obj/item/integrated_circuit/converter/num2text, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfc" = ( +/obj/item/weapon/plastique/seismic/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfd" = ( +/obj/item/ammo_casing/a338/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sff" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfl" = ( +/obj/item/weapon/gun/projectile/heavysniper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfm" = ( +/obj/item/clothing/mask/breath/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfu" = ( +/obj/item/weapon/tool/crowbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfv" = ( +/obj/item/trash/asian_bowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfB" = ( +/obj/structure/barricade/planks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfM" = ( +/obj/item/weapon/grenade/spawnergrenade/spider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfQ" = ( +/obj/item/weapon/flame/lighter/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sfV" = ( +/obj/item/weapon/reagent_containers/food/snacks/syndicake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgm" = ( +/obj/item/clothing/suit/space, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgr" = ( +/obj/item/weapon/storage/belt/fannypack/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgu" = ( +/obj/item/weapon/storage/mre/menu4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgv" = ( +/obj/item/clothing/glasses/monocoole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgx" = ( +/obj/structure/sign/deck3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgB" = ( +/obj/item/tabloid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgG" = ( +/obj/item/clothing/accessory/scarf/christmas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgI" = ( +/obj/item/clothing/under/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgJ" = ( +/mob/living/simple_mob/humanoid/merc/melee{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sgK" = ( +/obj/item/device/perfect_tele/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgL" = ( +/obj/item/weapon/towel/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgV" = ( +/obj/item/flag/catpirate/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sgW" = ( +/obj/item/clothing/under/corp/grayson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shr" = ( +/obj/item/ammo_casing/microbattery/medical/brute, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shu" = ( +/obj/item/weapon/fluff/fidgetspinner/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shw" = ( +/mob/living/simple_mob/mechanical/mining_drone{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"shy" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shz" = ( +/obj/item/weapon/reagent_containers/food/snacks/nt_muffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shC" = ( +/obj/item/integrated_circuit/transfer/pulsedemultiplexer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shG" = ( +/obj/item/clothing/under/saare/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"shQ" = ( +/obj/machinery/door/airlock/maintenance/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sia" = ( +/obj/item/weapon/coilgun_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sii" = ( +/obj/item/clothing/suit/armor/pcarrier/medium/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sij" = ( +/obj/structure/closet/secure_closet/wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"siw" = ( +/obj/item/ammo_magazine/m10mm/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"siy" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"siJ" = ( +/obj/item/mecha_parts/mecha_equipment/tool/jetpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"siL" = ( +/obj/item/device/pda/lawyer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjc" = ( +/obj/item/slime_extract/oil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjg" = ( +/obj/item/ammo_magazine/m9mmt/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjk" = ( +/obj/structure/prop/alien/computer/camera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjp" = ( +/obj/item/weapon/gun/projectile/dartgun/tranq, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjq" = ( +/obj/item/clothing/suit/kimono/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjs" = ( +/obj/item/ammo_casing/a357/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjt" = ( +/obj/item/weapon/reagent_containers/food/snacks/chickennoodlesoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjw" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/psc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjy" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjB" = ( +/mob/living/simple_mob/animal/giant_spider/carrier/recursive{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sjC" = ( +/obj/item/clothing/glasses/material/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjH" = ( +/obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjI" = ( +/obj/item/weapon/reagent_containers/food/snacks/butterscotch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sjR" = ( +/obj/item/clothing/ears/skrell/cloth_male/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skh" = ( +/obj/item/clothing/suit/barding/mason, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skl" = ( +/obj/machinery/power/shield_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skm" = ( +/obj/item/clothing/under/det/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sko" = ( +/obj/item/weapon/pen/crayon/marker/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skt" = ( +/obj/machinery/door/blast/gate/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skA" = ( +/obj/item/weapon/book/manual/tesla_engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skF" = ( +/mob/living/simple_mob/animal/giant_spider/frost/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"skL" = ( +/obj/item/weapon/virusdish/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skM" = ( +/obj/item/weapon/stock_parts/micro_laser/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skR" = ( +/obj/item/clothing/suit/space/void/atmos/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"skS" = ( +/mob/living/simple_mob/animal/sif/sakimm, +/turf/simulated/floor/atoll, +/area/survivalpod) +"skY" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/boda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slc" = ( +/obj/item/clothing/under/fluff/romanarmor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slf" = ( +/obj/item/weapon/pipe_dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slm" = ( +/obj/machinery/door/firedoor/border_only, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sln" = ( +/obj/item/seeds/amanitamycelium, +/obj/machinery/portable_atmospherics/hydroponics/soil/invisible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slo" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slw" = ( +/obj/item/integrated_circuit/list/append, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sly" = ( +/obj/item/clothing/under/color/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slC" = ( +/obj/item/integrated_circuit/transfer/pulsedemultiplexer/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slM" = ( +/obj/item/clothing/head/pin/bow/big, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"slV" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "3" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sma" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smh" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, +/turf/simulated/floor/atoll, +/area/survivalpod) +"smk" = ( +/obj/item/clothing/suit/space/anomaly/heat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smB" = ( +/obj/item/weapon/soap/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smH" = ( +/obj/item/weapon/card/id/civilian/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smI" = ( +/obj/item/weapon/storage/pill_bottle/zoom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smN" = ( +/obj/item/clothing/under/dress/sundress_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smX" = ( +/obj/item/weapon/gun/magnetic/railgun/heater/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smY" = ( +/obj/item/ammo_casing/a9mm/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"smZ" = ( +/obj/item/weapon/dice/d100, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snc" = ( +/obj/machinery/power/port_gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snd" = ( +/obj/item/weapon/bikehorn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sno" = ( +/obj/item/weapon/book/manual/robotics_cyborgs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snw" = ( +/obj/item/device/encryptionkey/headset_medsci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snx" = ( +/obj/item/stack/tile/floor/eris/steel/bar_light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snD" = ( +/obj/machinery/recycling/stamper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snH" = ( +/obj/structure/closet/crate/laundry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snL" = ( +/obj/item/integrated_circuit/converter/hsv2hex, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snM" = ( +/obj/machinery/atmospherics/binary/pump/aux/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snO" = ( +/obj/item/weapon/dice/d12, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snT" = ( +/obj/item/mecha_parts/mecha_equipment/repair_droid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"snU" = ( +/obj/item/ammo_casing/a145/highvel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soc" = ( +/obj/item/stack/nanopaste/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sog" = ( +/obj/item/toy/stickhorse, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sok" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"som" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soq" = ( +/obj/item/weapon/reagent_containers/food/snacks/breakfast_wrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sot" = ( +/mob/living/simple_mob/animal/space/alien/hunterlisk{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"soN" = ( +/obj/item/toy/chewtoy/tall/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soP" = ( +/obj/structure/bed/chair/bay/chair/padded/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soQ" = ( +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soS" = ( +/obj/item/clothing/suit/storage/vest/officer/fluff/jessica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soU" = ( +/obj/item/clothing/mask/luchador/tecnicos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soV" = ( +/obj/item/weapon/circuitboard/stationalert_all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soY" = ( +/obj/structure/bed/chair/comfy/rounded/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"soZ" = ( +/obj/item/weapon/gun/projectile/ppk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sph" = ( +/obj/item/weapon/material/twohanded/fireaxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spj" = ( +/obj/item/clothing/under/rank/warden/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spm" = ( +/obj/item/weapon/gun/projectile/garand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spD" = ( +/obj/item/clothing/head/beret/solgov/fleet/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spO" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spS" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spT" = ( +/obj/machinery/atmospherics/omni/mixer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spX" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"spY" = ( +/obj/item/weapon/gun/energy/laser/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sql" = ( +/obj/structure/sign/levels/eva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqn" = ( +/obj/item/weapon/card/id/guest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqt" = ( +/obj/item/integrated_circuit/transfer/multiplexer/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqB" = ( +/mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sqD" = ( +/obj/structure/ghost_pod/ghost_activated/swarm_drone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqI" = ( +/obj/item/clothing/mask/muzzle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqJ" = ( +/obj/item/weapon/implanter/reagent_generator/evian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqP" = ( +/obj/item/clothing/accessory/armor/armguards/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqQ" = ( +/obj/skeleton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sqS" = ( +/obj/item/slime_extract/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srb" = ( +/obj/item/clothing/suit/space/void/makeshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"src" = ( +/obj/item/ammo_magazine/ammo_box/b45/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srg" = ( +/obj/item/seeds/hardlightseed/typesx, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srh" = ( +/obj/item/weapon/reagent_containers/food/snacks/riztizkzi_sea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srC" = ( +/obj/item/clothing/head/shiny_hood/closed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srG" = ( +/obj/item/mecha_parts/part/phazon_right_arm, +/obj/item/clothing/suit/storage/hooded/fluff/mocha_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srI" = ( +/obj/item/weapon/corncob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srK" = ( +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srM" = ( +/obj/item/weapon/reagent_containers/food/snacks/tgmc_mre_component, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"srX" = ( +/obj/item/clothing/under/pants/ripped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssb" = ( +/obj/item/clothing/suit/storage/vest/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sse" = ( +/obj/item/weapon/circuitboard/circuit_imprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssi" = ( +/mob/living/simple_mob/animal/passive/bird/black_bird, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ssj" = ( +/obj/item/weapon/storage/belt/utility/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sso" = ( +/obj/item/clothing/head/tesh_hood/standard/brown_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssq" = ( +/obj/item/weapon/reagent_containers/glass/bottle/sorbitol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssu" = ( +/obj/item/weapon/reagent_containers/syringe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssz" = ( +/obj/machinery/gateway{ + dir = 9 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssE" = ( +/obj/machinery/door/airlock/glass_external/public, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssR" = ( +/obj/item/weapon/grenade/shooter/energy/tesla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ssW" = ( +/obj/item/clothing/under/wednesday, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"std" = ( +/obj/item/weapon/implanter/reagent_generator/eldi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sth" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/gondola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"stm" = ( +/obj/item/weapon/aiModule/purge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"stq" = ( +/obj/item/broken_device/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"str" = ( +/obj/item/ammo_magazine/s357/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"stD" = ( +/obj/item/modular_computer/console/preset/merchant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"stL" = ( +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"stS" = ( +/obj/item/clothing/suit/armor/tdome/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sue" = ( +/obj/machinery/door/blast/shutters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suj" = ( +/obj/item/slime_extract/cerulean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suk" = ( +/obj/item/rig_module/vision/sechud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sul" = ( +/obj/item/weapon/pack/spaceball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suw" = ( +/obj/item/weapon/folder/white_rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suy" = ( +/obj/item/seeds/glowshroom, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suB" = ( +/obj/machinery/shield_gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suK" = ( +/obj/item/clothing/mask/chewable/candy/lolli, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suQ" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suT" = ( +/obj/machinery/vending, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"suU" = ( +/obj/item/ammo_magazine/fal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sve" = ( +/obj/item/weapon/bone/skull, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svm" = ( +/obj/item/clothing/accessory/solgov/department/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svp" = ( +/obj/item/clothing/under/swimsuit/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svq" = ( +/obj/item/slimepotion/sapience, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svr" = ( +/obj/item/weapon/storage/backpack/ert/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svA" = ( +/obj/item/clothing/accessory/fluff/wolf_erikson_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svI" = ( +/obj/item/weapon/bedsheet/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svU" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/beercan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svV" = ( +/obj/item/fulton_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svX" = ( +/obj/item/clothing/under/rank/roboticist/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"svZ" = ( +/obj/item/weapon/gun/energy/taser/mounted/augment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swe" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/donut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swz" = ( +/obj/item/weapon/card/id/event/fluff/amaya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swC" = ( +/obj/item/clothing/head/beret/solgov/sifguard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swD" = ( +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swJ" = ( +/obj/machinery/atmospherics/portables_connector/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swN" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swP" = ( +/obj/item/weapon/circuitboard/telecomms/relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swS" = ( +/obj/structure/sign/department/medbay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"swV" = ( +/obj/item/device/tvcamera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxc" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cream, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxm" = ( +/obj/item/weapon/cell/secborg/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxo" = ( +/obj/machinery/door/airlock/alien/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxq" = ( +/obj/item/ammo_magazine/clip/c9mm/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxr" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxC" = ( +/obj/item/clothing/accessory/storage/webbing/combatpilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxF" = ( +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxS" = ( +/obj/item/clothing/gloves/gauntlets/rig/ch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sxY" = ( +/obj/item/ammo_magazine/mp5mag/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syd" = ( +/obj/item/clothing/under/pants/baggy/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syl" = ( +/obj/item/toy/mecha/mauler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syn" = ( +/obj/item/weapon/storage/belt/fannypack/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syo" = ( +/obj/item/ammo_magazine/akm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syp" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syA" = ( +/obj/item/weapon/reagent_containers/food/snacks/fruitbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syB" = ( +/mob/living/simple_mob/humanoid/pirate/machete/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"syE" = ( +/obj/item/weapon/digestion_remains/skull/unknown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syH" = ( +/mob/living/simple_mob/horror/Rickey{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"syI" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syK" = ( +/obj/item/weapon/secbot_assembly/edCLN_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syQ" = ( +/obj/item/organ/internal/heart/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"syV" = ( +/obj/item/instrument/trombone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szd" = ( +/obj/item/ammo_casing/a12g/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szf" = ( +/obj/item/clothing/head/helmet/space/vox/civ/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szw" = ( +/obj/item/clothing/head/chicken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szH" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szJ" = ( +/obj/machinery/atmospherics/unary/heater, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szP" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szS" = ( +/obj/item/clothing/accessory/jacket/charcoal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"szT" = ( +/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sAi" = ( +/mob/living/simple_mob/vore/alienanimals/skeleton{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sAj" = ( +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sAs" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/charcoal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sAv" = ( +/obj/item/clothing/accessory/holster/armpit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sAC" = ( +/obj/machinery/vending/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sAF" = ( +/obj/item/weapon/refill_cartridge/autoname/food/snack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sAK" = ( +/obj/structure/sign/levels/library, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBd" = ( +/obj/item/weapon/melee/baton/shocker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBf" = ( +/obj/item/clothing/under/wedding/whitegown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBh" = ( +/obj/item/clothing/gloves/combat/fluff/zara_arm_enhancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBo" = ( +/obj/item/weapon/ore/uranium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBr" = ( +/obj/item/clothing/head/beret/engineering/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBs" = ( +/obj/item/toy/figure/leadbandit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBu" = ( +/obj/item/weapon/grenade/shooter/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBw" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whiteblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBA" = ( +/obj/item/clothing/under/overalls/sleek, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBB" = ( +/obj/structure/prop/dominator/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBG" = ( +/obj/item/clothing/ears/skrell/cloth_male/lightblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBP" = ( +/obj/item/clothing/shoes/circuitry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBR" = ( +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sBT" = ( +/obj/item/clothing/suit/storage/vest/hoscoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBV" = ( +/obj/item/weapon/reagent_containers/food/snacks/roburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sBY" = ( +/obj/item/device/encryptionkey/headset_com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCa" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCf" = ( +/obj/item/weapon/ore/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCi" = ( +/obj/item/ammo_magazine/clip/c545/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCj" = ( +/obj/structure/table/bench/marble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCk" = ( +/obj/structure/closet/grave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCq" = ( +/obj/item/slime_extract/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCu" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/sharkchunk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCw" = ( +/obj/item/clothing/accessory/collar/holo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCy" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/chroniclesofmargatavol1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCz" = ( +/obj/item/weapon/stamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCH" = ( +/obj/item/weapon/material/sword/katana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCI" = ( +/obj/item/integrated_circuit/converter/abs_to_rel_coords, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sCN" = ( +/mob/living/bot/floorbot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sCX" = ( +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDc" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDf" = ( +/obj/item/weapon/gun/launcher/pneumatic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDi" = ( +/obj/item/weapon/melee/changeling/claw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDp" = ( +/obj/item/clothing/under/rank/nursesuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDv" = ( +/obj/structure/prop/war/tgmc_missile_rack/napalm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDw" = ( +/obj/item/stack/tile/floor/eris/steel/cyancorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDB" = ( +/obj/structure/filingcabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDE" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/fluff/alva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDH" = ( +/obj/item/clothing/gloves/ring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDV" = ( +/obj/item/clothing/accessory/solgov/rank/marine/officer/o2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sDW" = ( +/obj/machinery/door_timer/tactical_pet_storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEh" = ( +/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEw" = ( +/obj/item/stack/material/bronze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sED" = ( +/obj/item/clothing/glasses/sunglasses/aviator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEF" = ( +/obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEI" = ( +/obj/machinery/gear_dispenser/custom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEL" = ( +/obj/item/weapon/storage/backpack/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sEW" = ( +/obj/machinery/vending/wardrobe/janidrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFm" = ( +/obj/item/weapon/reagent_containers/food/snacks/omurice/face, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFn" = ( +/obj/structure/loot_pile/surface/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFo" = ( +/obj/item/toy/tennis/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFs" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/armblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFt" = ( +/obj/item/weapon/gun/energy/mouseray/giantrat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFv" = ( +/obj/machinery/power/singularity_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFC" = ( +/obj/item/seeds/celery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFD" = ( +/obj/machinery/door/airlock/voidcraft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFJ" = ( +/obj/item/weapon/kitchenknife/tacknife/unathiknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFR" = ( +/obj/item/clothing/suit/armor/pcarrier/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFS" = ( +/obj/item/weapon/storage/toolbox/lunchbox/cti/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sFZ" = ( +/obj/item/weapon/spell/flame_tongue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGe" = ( +/mob/living/simple_mob/mechanical/combat_drone/lesser{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sGg" = ( +/obj/item/weapon/storage/vore_egg/human{ + desc = s + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGl" = ( +/obj/item/clothing/head/fluff/headbando/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGm" = ( +/obj/item/weapon/card/id/gateway/snowfield/class3M, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGq" = ( +/obj/item/organ/internal/xenos/eggsac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGs" = ( +/obj/item/organ/internal/brain/shadekin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGy" = ( +/obj/item/weapon/storage/backpack/dufflebag/cratebooze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGB" = ( +/obj/item/clothing/accessory/badge/corporate_tag/wardtaka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGC" = ( +/obj/item/clothing/under/rank/medical/scrubs/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGF" = ( +/obj/structure/loot_pile/mecha/deathripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGH" = ( +/obj/item/weapon/disk/limb/cyber_beast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sGO" = ( +/obj/item/stack/material/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHd" = ( +/obj/item/weapon/computer_hardware/processor_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHi" = ( +/obj/item/weapon/reagent_containers/pill/happy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHk" = ( +/obj/item/weapon/storage/backpack/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHl" = ( +/obj/item/clothing/suit/storage/explorer/engineering/command/fluff/vasharr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHt" = ( +/obj/item/clothing/under/yw/victsuit/redblk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHy" = ( +/obj/item/clothing/head/helmet/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHz" = ( +/obj/item/clothing/head/hood/winter/engineering/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHB" = ( +/obj/item/device/integrated_circuit_printer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHC" = ( +/obj/item/clothing/ears/earring/stud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHE" = ( +/obj/item/bodybag/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHO" = ( +/obj/item/pizzabox/margherita, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHQ" = ( +/obj/item/organ/internal/heart/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHU" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sHW" = ( +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sId" = ( +/obj/item/clothing/accessory/poncho/thermal/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIe" = ( +/obj/item/weapon/fluff/fidgetspinner/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIh" = ( +/obj/item/instrument/trumpet/spectral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIi" = ( +/obj/item/clothing/suit/kimono, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIm" = ( +/obj/item/weapon/circuitboard/papershredder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIq" = ( +/obj/item/weapon/storage/box/fluff/eryn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIt" = ( +/obj/structure/sign/signnew/explosives, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIx" = ( +/obj/item/weapon/reagent_containers/blood/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIF" = ( +/obj/structure/bed/chair/sofa/left/purp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIM" = ( +/obj/item/seeds/tobaccoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIQ" = ( +/obj/item/organ/internal/lungs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIX" = ( +/obj/item/weapon/disk/limb/veymed/diona, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sIZ" = ( +/obj/item/weapon/storage/box/masks/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJe" = ( +/obj/item/seeds/reishimycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJh" = ( +/obj/item/clothing/shoes/knight/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJi" = ( +/obj/item/weapon/storage/box/fluff/archermaximus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJp" = ( +/obj/item/weapon/paper/awaygate/carpfarm/suicide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJy" = ( +/obj/item/weapon/pickaxe/one_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJz" = ( +/obj/item/ammo_magazine/m45/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJA" = ( +/obj/machinery/shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJO" = ( +/obj/item/ammo_casing/a9x39/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sJU" = ( +/obj/item/weapon/a_gift/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKc" = ( +/obj/machinery/vending/loadout/loadout_misc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKe" = ( +/obj/item/weapon/storage/secure/briefcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKx" = ( +/obj/item/weapon/storage/box/bodybags, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKC" = ( +/obj/item/clothing/under/pants, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKI" = ( +/obj/item/weapon/storage/box/fluff/Keith_Winters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sKT" = ( +/obj/item/ammo_magazine/s38/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLa" = ( +/obj/item/device/laser_pointer/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLe" = ( +/obj/item/weapon/light/bulb/smol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLp" = ( +/obj/item/clothing/gloves/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLq" = ( +/obj/item/clothing/under/color/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLs" = ( +/obj/item/clothing/suit/storage/hooded/toggle/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLD" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLE" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/akm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sLO" = ( +/mob/living/simple_mob/animal/wolf{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sMa" = ( +/obj/item/sniper_rifle_part, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMb" = ( +/obj/item/clothing/gloves/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMc" = ( +/obj/item/clothing/suit/bio_suit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMe" = ( +/obj/item/stack/tile/floor/eris/steel/techfloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMr" = ( +/mob/living/simple_mob/mechanical/infectionbot{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sMv" = ( +/obj/item/weapon/gun/energy/sizegun/not_advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMx" = ( +/obj/item/clothing/shoes/magboots/fluff/zara_leg_enhancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMD" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMJ" = ( +/obj/structure/fans/hardlight/colorable/abductor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMP" = ( +/obj/item/clothing/under/teshari/smock/blackutilitysmock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sMY" = ( +/obj/machinery/computer/transhuman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNj" = ( +/obj/structure/largecrate/animal/mulebot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNm" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNn" = ( +/obj/item/clothing/shoes/boots/winter/christmasred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNx" = ( +/obj/structure/marker_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNA" = ( +/obj/item/clothing/under/rank/head_of_security/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNC" = ( +/obj/item/weapon/reagent_containers/food/snacks/antball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNG" = ( +/obj/item/weapon/bedsheet/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNI" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/david_3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNK" = ( +/obj/item/weapon/circuitboard/pipelayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNM" = ( +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNP" = ( +/obj/item/mecha_parts/component/hull/durable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNY" = ( +/obj/machinery/telecomms/hub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sNZ" = ( +/obj/item/device/radio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOc" = ( +/obj/item/organ/internal/augment/bioaugment/sprint_enhance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOg" = ( +/obj/item/clothing/suit/storage/explorer/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOj" = ( +/obj/structure/bonfire/permanent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOo" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/gynorovir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOI" = ( +/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sOY" = ( +/obj/item/clothing/suit/armor/pcarrier/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPa" = ( +/obj/item/clothing/head/helmet/space/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPe" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/osteodaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPg" = ( +/obj/item/clothing/under/stripeddungarees, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPr" = ( +/obj/item/clothing/under/fluff/excess, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPt" = ( +/mob/living/simple_mob/humanoid/pirate/shield/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sPu" = ( +/obj/item/clothing/shoes/laceup/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPx" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/candybar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPJ" = ( +/obj/item/weapon/storage/box/handcuffs/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPN" = ( +/obj/structure/prop/war/sentry_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sPS" = ( +/obj/item/weapon/weldingtool/electric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQb" = ( +/obj/structure/closet/secure_closet/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQj" = ( +/obj/item/clothing/under/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQl" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQn" = ( +/obj/item/weapon/pinpointer/nukeop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQs" = ( +/obj/item/clothing/suit/armor/combat/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQB" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQO" = ( +/obj/item/clothing/accessory/jacket/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQU" = ( +/obj/structure/portal_event/resize/preset_shrink_fifty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQW" = ( +/obj/item/clothing/under/color/prison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sQX" = ( +/obj/item/weapon/material/butterflyconstruction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRb" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRe" = ( +/obj/item/weapon/storage/fancy/vials, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRn" = ( +/obj/machinery/gateway{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRo" = ( +/obj/structure/prop/war/tgmc_missile/banshee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRq" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfishremains, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRv" = ( +/obj/machinery/vending/wardrobe/hydrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRz" = ( +/obj/item/clothing/accessory/collar/pink/fluff/warning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRC" = ( +/obj/item/weapon/storage/backpack/sport/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRH" = ( +/obj/structure/largecrate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRM" = ( +/obj/structure/cable/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRS" = ( +/obj/item/weapon/storage/bag/circuits/mini/arithmetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRT" = ( +/obj/item/instrument/harmonica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRX" = ( +/obj/item/weapon/reagent_containers/glass/bottle/bicaridine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sRY" = ( +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSd" = ( +/obj/item/clothing/suit/space/vox/civ/engineer/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSg" = ( +/obj/structure/closet/secure_closet/medical_wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSC" = ( +/obj/item/weapon/circuitboard/mecha/imperion/targeting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSE" = ( +/obj/mecha/combat/fighter/gunpod/recon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSH" = ( +/obj/item/weapon/storage/fancy/cigar/cohiba, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSI" = ( +/obj/item/weapon/arrow/energy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sST" = ( +/obj/item/clothing/suit/storage/toggle/labcoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSV" = ( +/obj/structure/barricade/cutout/free_antag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sSW" = ( +/obj/structure/bed/chair/sofa/corner/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTm" = ( +/obj/item/clothing/under/solgov/pt/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTn" = ( +/obj/item/clothing/head/helmet/space/void/refurb/marine/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTu" = ( +/obj/item/toy/plushie/lizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTy" = ( +/obj/structure/sign/department/cargo_dock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTJ" = ( +/obj/item/clothing/head/justice/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTU" = ( +/obj/item/clothing/under/suit_jacket/green/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTX" = ( +/obj/machinery/door/airlock/glass_external, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sTY" = ( +/mob/living/simple_mob/mobs_monsters/clowns/big/c_shift/blob{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sTZ" = ( +/obj/item/clothing/mask/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUf" = ( +/obj/item/weapon/reagent_containers/food/snacks/slimesoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUn" = ( +/obj/item/toy/nuke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUp" = ( +/obj/item/weapon/spell/spawner/destablize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUq" = ( +/obj/item/weapon/material/twohanded/riding_crop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUr" = ( +/obj/structure/closet/l3closet/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUt" = ( +/obj/structure/simple_door/resin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUv" = ( +/mob/living/simple_mob/humanoid/pirate/mate/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sUz" = ( +/obj/item/clothing/gloves/ring/material/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sUP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVb" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVd" = ( +/obj/item/weapon/dnainjector/antideaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVn" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot/rigged, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVq" = ( +/obj/item/clothing/glasses/meson/prescription/tajblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVs" = ( +/obj/item/clothing/head/helmet/ert/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVw" = ( +/mob/living/simple_mob/animal/passive/fish/icebass, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"sVA" = ( +/obj/item/ammo_casing/a12g/stunshell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVI" = ( +/obj/item/clothing/under/suit_jacket/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVJ" = ( +/obj/item/clothing/under/rank/cargo/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVL" = ( +/obj/item/weapon/mine/kick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sVY" = ( +/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWb" = ( +/obj/item/rig_module/protean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWk" = ( +/obj/item/weapon/implanter/exile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWl" = ( +/obj/item/weapon/firework_star/weather/light_snow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWo" = ( +/obj/item/weapon/stock_parts/subspace/treatment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWr" = ( +/obj/item/clothing/suit/bio_suit/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWs" = ( +/obj/item/weapon/gun/energy/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWB" = ( +/obj/item/weapon/extinguisher/atmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWE" = ( +/obj/item/clothing/under/permit/natureist_talisman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWF" = ( +/obj/item/weapon/material/fishing_rod/modern/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWJ" = ( +/obj/structure/bed/chair/bay/chair/padded/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWK" = ( +/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWR" = ( +/obj/item/weapon/reagent_containers/blood/synthplas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWT" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWU" = ( +/obj/item/ammo_casing/a12g/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWV" = ( +/obj/machinery/chemical_dispenser/biochemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sWZ" = ( +/obj/item/weapon/gun/energy/pummeler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXf" = ( +/mob/living/simple_mob/vore/aggressive/mimic/floor{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"sXj" = ( +/obj/structure/bed/chair/office, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXu" = ( +/obj/item/toy/plushie/teshari/strix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXE" = ( +/obj/item/weapon/storage/backpack/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXF" = ( +/obj/item/stack/tile/floor/eris/dark/techfloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXG" = ( +/obj/item/weapon/reagent_containers/food/snacks/bibimbap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXM" = ( +/obj/item/weapon/firework_star/weather/hail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXQ" = ( +/obj/item/weapon/reagent_containers/syringe/inaprovaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sXV" = ( +/obj/item/weapon/storage/pouch/holster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYa" = ( +/obj/item/clothing/under/gladiator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYj" = ( +/obj/item/toy/mecha/odysseus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYl" = ( +/obj/item/clothing/head/beret/amara_beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYp" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYs" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYu" = ( +/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/c, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYw" = ( +/obj/item/weapon/gun/energy/locked/phasegun/rifle/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYz" = ( +/obj/item/weapon/reagent_containers/syringe/antitoxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYG" = ( +/obj/item/weapon/implanter/reagent_generator/natalya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYI" = ( +/obj/item/clothing/suit/storage/toggle/leather_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYJ" = ( +/obj/item/weapon/reagent_containers/food/condiment/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYS" = ( +/obj/machinery/atmospherics/binary/algae_farm/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sYU" = ( +/obj/item/weapon/storage/mrebag/menu10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZf" = ( +/obj/item/clothing/head/helmet/space/void/medical/alt/tesh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZg" = ( +/obj/item/clothing/under/dress/dress_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZi" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZn" = ( +/obj/item/weapon/rig/industrial/old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZs" = ( +/obj/item/toy/plushie/foxbear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZt" = ( +/obj/item/weapon/book/manual/engineering_guide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZw" = ( +/obj/item/clothing/under/skirt/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZz" = ( +/obj/machinery/door/airlock/glass_medical/polarized, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZC" = ( +/obj/item/clothing/ears/earring/dangle/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZE" = ( +/obj/item/stamp/hephaestus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZM" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"sZQ" = ( +/obj/machinery/hyperpad/centre, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"taf" = ( +/obj/item/weapon/circuitboard/turbine_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tai" = ( +/mob/living/simple_mob/vore/catgirl{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"taj" = ( +/obj/item/trash/chips, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tap" = ( +/obj/machinery/smartfridge/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tas" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"taE" = ( +/obj/item/toy/plushie/squid/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"taW" = ( +/obj/item/clothing/suit/space/void/security/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"taZ" = ( +/obj/item/clothing/mask/smokable/cigarette/cigar/havana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbk" = ( +/obj/item/clothing/suit/storage/fluff/jacket/special_forces, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbo" = ( +/mob/living/simple_mob/mechanical/mecha/ripley{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tbv" = ( +/obj/item/weapon/book/manual/evaguide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tby" = ( +/obj/item/weapon/tank/phoron/welded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbA" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbC" = ( +/obj/machinery/door/airlock/glass_security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbD" = ( +/obj/item/clothing/suit/storage/vest/heavy/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbE" = ( +/obj/machinery/replicator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbH" = ( +/obj/item/clothing/accessory/armband/med/cross, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbK" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbL" = ( +/obj/item/ammo_magazine/ammo_box/b45/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbN" = ( +/obj/machinery/door/airlock/multi_tile/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbR" = ( +/obj/item/weapon/beartrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbS" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbT" = ( +/obj/item/clothing/accessory/solgov/department/engineering/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbV" = ( +/obj/item/clothing/head/beret/solgov/eio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tbY" = ( +/obj/item/stack/tile/floor/eris/steel/golden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tch" = ( +/obj/item/weapon/reagent_containers/food/snacks/omurice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcm" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/buzz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcr" = ( +/obj/structure/sign/bigname/seg_4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcu" = ( +/obj/item/weapon/rig/light/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcw" = ( +/obj/structure/closet/shuttleemerg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcB" = ( +/obj/item/device/assembly/electronic_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcG" = ( +/obj/item/clothing/under/rank/warden/navyblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcN" = ( +/obj/item/weapon/reagent_containers/blood/prelabeled/AMinus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcS" = ( +/obj/item/weapon/reagent_containers/food/snacks/tossedsalad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcY" = ( +/obj/item/weapon/storage/backpack/virology, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tcZ" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdi" = ( +/obj/item/weapon/light/bulb/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdj" = ( +/obj/item/material_dust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdm" = ( +/obj/structure/bed/chair/comfy/rounded/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdn" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdo" = ( +/obj/item/instrument/saxophone/spectral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdq" = ( +/obj/item/clothing/head/centhat/fluff/harmhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tds" = ( +/obj/item/weapon/stock_parts/capacitor/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdy" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdF" = ( +/obj/item/weapon/stamp/centcomm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdG" = ( +/obj/machinery/door/airlock/angled_tgmc/prep, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdJ" = ( +/obj/item/weapon/flame/lighter/zippo/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdR" = ( +/obj/item/trash/liquidprotein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdV" = ( +/obj/item/weapon/implant/organ/pelvic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdY" = ( +/obj/item/surplus_voucher/sci, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tdZ" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teb" = ( +/obj/structure/sign/levels/dock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ted" = ( +/obj/item/stack/material/sandstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tei" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tej" = ( +/obj/item/seeds/glowshroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tek" = ( +/obj/structure/window/reinforced/full, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tem" = ( +/obj/item/clothing/mask/gas/half, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teo" = ( +/obj/item/clothing/under/dress/sailordress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ter" = ( +/obj/structure/table/rack/gun_rack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tey" = ( +/obj/item/clothing/head/helmet/space/void/refurb/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tez" = ( +/obj/item/weapon/spell/projectile/force_missile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teD" = ( +/obj/machinery/organ_printer/flesh/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teF" = ( +/obj/item/capture_crystal/bigdragon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teH" = ( +/obj/item/clothing/head/helmet/gladiator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teM" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "29" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teT" = ( +/obj/item/clothing/shoes/boots/jackboots/fluff/jiao_boots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teU" = ( +/obj/item/seeds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"teZ" = ( +/obj/item/clothing/suit/storage/hazardvest/yw/brigphysician, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfc" = ( +/mob/living/simple_mob/construct/wraith{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tfi" = ( +/obj/item/weapon/storage/box/beakers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfl" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfo" = ( +/obj/machinery/vending/snack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tft" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfw" = ( +/obj/item/ammo_magazine/m2024/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfy" = ( +/obj/machinery/air_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfE" = ( +/obj/item/clothing/suit/storage/trek/ds9/admiral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfK" = ( +/obj/item/clothing/under/cheongsam/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfM" = ( +/obj/item/clothing/head/helmet/space/santahat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tfO" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/dark_retrowave, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgd" = ( +/obj/item/weapon/card/id/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgk" = ( +/obj/item/weapon/spell/modifier/mend_life, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgp" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/o5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgA" = ( +/obj/item/clothing/under/color/fjumpsuit/darkredf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgB" = ( +/obj/item/weapon/cell/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgG" = ( +/obj/item/clothing/under/blackngold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgJ" = ( +/obj/item/weapon/tank/jetpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgU" = ( +/obj/item/clothing/under/dress/dress_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tgW" = ( +/obj/machinery/teleport/hub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thf" = ( +/obj/item/clothing/under/teshari/undercoat/standard/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thh" = ( +/obj/item/ammo_magazine/s45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thm" = ( +/obj/item/trash/lunacakewrap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thy" = ( +/obj/item/clothing/gloves/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thE" = ( +/obj/item/clothing/accessory/armor/armorplate/blast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thN" = ( +/obj/item/toy/plushie/therapy/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thQ" = ( +/obj/item/clothing/under/color/lightpurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thR" = ( +/obj/structure/bed/chair/bay/comfy/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thT" = ( +/obj/item/ammo_casing/a5mmcaseless/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"thU" = ( +/obj/structure/sign/department/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tin" = ( +/mob/living/silicon/robot/syndicate/combat_medic, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tir" = ( +/obj/item/clothing/head/bandana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiw" = ( +/obj/structure/prop/transmitter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiy" = ( +/obj/machinery/door/airlock/angled_bay/ascent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiC" = ( +/obj/item/clothing/under/rank/pilot1/no_webbing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiP" = ( +/obj/item/weapon/melee/baton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiR" = ( +/obj/item/clothing/head/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiS" = ( +/obj/structure/bed/chair/e_chair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiU" = ( +/obj/item/weapon/dnainjector/runfast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tiV" = ( +/obj/structure/fence/corner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjb" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/caviar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjh" = ( +/obj/machinery/telecomms/broadcaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjs" = ( +/obj/item/device/mapping_unit/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjz" = ( +/obj/item/weapon/gun/projectile/revolvingrifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjP" = ( +/obj/item/ammo_magazine/mfoam_dart/pistol/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjR" = ( +/mob/living/simple_mob/animal/space/alien/hunterling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tjS" = ( +/obj/item/stack/sandbags, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjV" = ( +/obj/item/weapon/aliencoin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tjZ" = ( +/obj/item/slime_extract/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tke" = ( +/obj/item/clothing/gloves/ring/material/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkh" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tkx" = ( +/obj/item/weapon/material/shard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkB" = ( +/obj/machinery/door/unpowered/shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkF" = ( +/obj/item/weapon/gun/magnetic/fuelrod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkH" = ( +/obj/item/weapon/ore/lead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkJ" = ( +/obj/item/clothing/suit/chococoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkQ" = ( +/obj/item/trash/brainzsnaxred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tkU" = ( +/obj/item/clothing/accessory/holster/leg/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tla" = ( +/obj/item/weapon/circuitboard/processor/monkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlf" = ( +/obj/machinery/atmospherics/trinary/mixer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlg" = ( +/obj/machinery/button/remote/emitter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlj" = ( +/obj/structure/prop/rock/crystal_dust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlq" = ( +/obj/machinery/gear_dispenser/suit_fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlr" = ( +/obj/structure/sign/directions/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tly" = ( +/obj/structure/closet/secure_closet/egg/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlD" = ( +/obj/item/clothing/suit/storage/toggle/supply_dep_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlR" = ( +/obj/item/clothing/suit/space/void/engineering/construction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tlW" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tma" = ( +/obj/item/clothing/accessory/medal/silver/unity/tabiranth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmb" = ( +/obj/item/weapon/computer_hardware/tesla_link, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmg" = ( +/obj/item/clothing/suit/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmm" = ( +/obj/structure/symbol/gu, +/turf/simulated/fitness, +/area/survivalpod) +"tmo" = ( +/obj/item/weapon/circuitboard/telecomms/processor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmA" = ( +/obj/item/trash/sosjerky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmD" = ( +/obj/item/weapon/reagent_containers/food/snacks/no_raisin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmP" = ( +/obj/item/weapon/storage/backpack/dufflebag/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmQ" = ( +/obj/item/clothing/shoes/boots/cowboy/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tmR" = ( +/obj/item/clothing/suit/space/void/engineering/zena, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnm" = ( +/obj/item/capture_crystal/adg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tno" = ( +/obj/item/clothing/suit/storage/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnw" = ( +/obj/item/clothing/shoes/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnA" = ( +/obj/item/mecha_parts/part/scarab_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnH" = ( +/obj/item/slime_extract/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnI" = ( +/obj/item/clothing/mask/synthfacemask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/teriyaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnK" = ( +/obj/item/weapon/circuitboard/machine/power_compressor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnN" = ( +/mob/living/simple_mob/mobs_monsters/clowns/thicc{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tnO" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnP" = ( +/obj/item/weapon/reagent_containers/food/snacks/eggplantparm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnR" = ( +/obj/item/weapon/gun/energy/xray/swarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnS" = ( +/obj/item/weapon/aiModule/paladin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnT" = ( +/obj/machinery/door/airlock/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tnW" = ( +/obj/item/weapon/storage/box/monkeycubes/farwacubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tom" = ( +/obj/item/robot_parts/chest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tos" = ( +/obj/structure/barricade/cutout/viva, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tow" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/officer/o3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toz" = ( +/obj/structure/salvageable/server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toA" = ( +/obj/item/clothing/suit/armor/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toD" = ( +/obj/structure/medical_stand/anesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toE" = ( +/obj/machinery/light/bigfloorlamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toG" = ( +/obj/item/clothing/under/cheongsam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toJ" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"toY" = ( +/obj/item/seeds/mtearseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpg" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tph" = ( +/obj/structure/sign/department/bridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpo" = ( +/obj/item/device/holomap_beacon/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpq" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpu" = ( +/obj/item/toy/chewtoy/tall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpz" = ( +/obj/structure/closet/crate/secure/bin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpA" = ( +/obj/item/clothing/mask/gas/sechailer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpD" = ( +/obj/structure/closet/button_example, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpE" = ( +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked/mounted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpI" = ( +/obj/structure/shuttle/engine/propulsion/burst/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpK" = ( +/obj/item/weapon/storage/pill_bottle/benzilate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpQ" = ( +/obj/item/ammo_magazine/ammo_box/b12g/pellet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpU" = ( +/obj/item/clothing/under/swimsuit/earth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpV" = ( +/obj/item/clothing/head/justice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tpY" = ( +/mob/living/simple_mob/animal/passive/chicken{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tpZ" = ( +/obj/structure/bed/chair/comfy/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqa" = ( +/obj/item/device/tape, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqc" = ( +/obj/item/clothing/suit/storage/toggle/track/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqd" = ( +/obj/item/weapon/storage/backpack/sport, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tql" = ( +/obj/item/clothing/shoes/boots/cowboy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqn" = ( +/obj/item/weapon/gun/energy/modular, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqu" = ( +/obj/structure/sign/flag/blank/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqx" = ( +/obj/item/clothing/under/pants/baggy/mustangjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqy" = ( +/obj/item/weapon/storage/toolbox/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqO" = ( +/obj/item/stack/tile/carpet/turcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tqX" = ( +/obj/item/weapon/gun/energy/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trk" = ( +/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trl" = ( +/obj/item/weapon/inflatable_duck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trm" = ( +/obj/item/clothing/suit/kamishimo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trp" = ( +/obj/item/weapon/card/id/gold/captain/spare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trs" = ( +/obj/machinery/access_button/airlock_interior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"try" = ( +/obj/item/trash/candy/fruitbar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trB" = ( +/obj/item/clothing/head/beret/solgov/diplomatic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trF" = ( +/obj/item/weapon/storage/backpack/mime/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trI" = ( +/obj/item/flag/seo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trQ" = ( +/obj/item/surplus_voucher/ser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trR" = ( +/obj/item/clothing/suit/space/void/pilot/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trY" = ( +/obj/item/weapon/storage/backpack/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"trZ" = ( +/mob/living/simple_mob/slime/xenobio/rainbow{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tsa" = ( +/obj/item/frame/painting, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsq" = ( +/obj/item/weapon/stock_parts/micro_laser/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsx" = ( +/obj/item/weapon/holo/esword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsB" = ( +/obj/item/weapon/smes_coil/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsM" = ( +/obj/item/clothing/suit/space/vox/civ/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsN" = ( +/obj/item/weapon/spell/modifier/repel_missiles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsP" = ( +/obj/item/clothing/head/helmet/solgov/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsR" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/pizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsX" = ( +/obj/item/ammo_magazine/plamya/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsY" = ( +/obj/machinery/atmospherics/unary/engine/fancy_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tsZ" = ( +/obj/item/clothing/accessory/armor/armorplate/ablative, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttd" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/snaps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tth" = ( +/obj/item/weapon/material/knife/tacknife/combatknife/fluff/katarina, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tto" = ( +/mob/living/simple_mob/vore/rabbit/killer{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ttv" = ( +/obj/item/weapon/stock_parts/micro_laser/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttA" = ( +/obj/item/clothing/accessory/wcoat/swvest/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttB" = ( +/obj/item/weapon/dnainjector/stuttmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttF" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttI" = ( +/obj/item/ammo_casing/a338, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttL" = ( +/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttN" = ( +/obj/machinery/gateway/brass{ + dir = 6 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttP" = ( +/obj/item/clothing/glasses/omnihud/med/fluff/wickedtemphud, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttQ" = ( +/obj/item/clothing/suit/storage/armor/wolfbrigade2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ttR" = ( +/mob/living/simple_mob/mobs_monsters/clowns/cluwne{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tue" = ( +/mob/living/simple_mob/animal/passive/opossum{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tuk" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tul" = ( +/mob/living/simple_mob/animal/passive/dog, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tum" = ( +/obj/structure/prop/war/tgmc_missile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tup" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/elite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuu" = ( +/obj/item/weapon/circuitboard/security/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tux" = ( +/obj/item/weapon/storage/box/fluff/jessica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuy" = ( +/obj/item/weapon/rig/hephaestus/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuA" = ( +/obj/item/weapon/gun/energy/ionrifle/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuI" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuM" = ( +/obj/item/weapon/gun/energy/sf2000, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuP" = ( +/obj/item/stamp/zeng_hu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tuT" = ( +/obj/item/weapon/storage/box/syndie_kit/cigarette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvb" = ( +/obj/item/weapon/reagent_containers/food/snacks/cube/nutriment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvi" = ( +/obj/item/weapon/barcodescanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvl" = ( +/obj/structure/symbol/fe, +/turf/simulated/fitness, +/area/survivalpod) +"tvL" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_uplink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvO" = ( +/obj/item/weapon/reagent_containers/glass/paint/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvS" = ( +/obj/item/weapon/paper/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvW" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/silence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tvX" = ( +/obj/item/clothing/head/helmet/space/void/refurb/engineering/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twe" = ( +/obj/item/ammo_magazine/m545/small/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twi" = ( +/obj/item/clothing/accessory/storage/pouches/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twm" = ( +/obj/item/weapon/storage/vore_egg/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"two" = ( +/obj/item/device/binoculars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tws" = ( +/obj/structure/closet/crate/ward, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twK" = ( +/obj/item/clothing/under/dress/dress_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twL" = ( +/obj/item/weapon/circuitboard/guestpass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twR" = ( +/obj/item/clothing/suit/space/syndicate/black/engie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twU" = ( +/obj/item/clothing/head/tesh_hood/standard/lightgrey_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"twX" = ( +/obj/item/device/electronic_assembly/medium/gun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txc" = ( +/obj/item/clothing/under/greenasym, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txd" = ( +/obj/item/weapon/circuitboard/dna_analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txj" = ( +/obj/item/slime_extract/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txk" = ( +/obj/item/stack/tile/bmarble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txx" = ( +/obj/item/weapon/implant/organ/limbaugment/dart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txG" = ( +/obj/item/clothing/under/rank/chemist_new, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"txZ" = ( +/obj/item/trash/chips/bbq, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyc" = ( +/obj/machinery/porta_turret/lasertag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyd" = ( +/obj/item/ammo_magazine/m9mm/compact/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tye" = ( +/obj/item/weapon/reagent_containers/food/snacks/candy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyh" = ( +/obj/machinery/vending/emergencyfood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tym" = ( +/obj/item/weapon/weldingtool/spell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyu" = ( +/obj/item/mecha_parts/part/janus_head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyA" = ( +/obj/item/trash/pretzel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyH" = ( +/obj/item/weapon/gun/energy/gun/tongue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyI" = ( +/obj/structure/closet/crate/hydroponics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyO" = ( +/obj/item/toy/figure/acolyte, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyR" = ( +/obj/item/clothing/accessory/collar/cowbell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tyU" = ( +/obj/item/weapon/circuitboard/swfdoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzb" = ( +/obj/item/weapon/surgical/hemostat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzf" = ( +/obj/item/toy/figure/prisoner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzu" = ( +/obj/item/clothing/under/rank/trek/command/ent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzB" = ( +/obj/item/clothing/under/rank/pilot2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzI" = ( +/obj/item/weapon/reagent_containers/spray/waterflower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzO" = ( +/obj/item/clothing/head/helmet/space/void/refurb/medical/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzR" = ( +/obj/item/clothing/under/teshari/smock/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzS" = ( +/obj/machinery/vending/wardrobe/detdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzU" = ( +/obj/item/weapon/book/bundle/custom_library/nonfiction/skrelliancastesystem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tzX" = ( +/obj/item/weapon/reagent_containers/food/snacks/carrotfries, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAa" = ( +/obj/item/weapon/reagent_containers/cooking_container/fryer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAc" = ( +/obj/item/weapon/reagent_containers/glass/bucket/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAe" = ( +/obj/item/weapon/storage/belt/fannypack/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAf" = ( +/obj/item/weapon/surgical/cautery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAO" = ( +/obj/item/ammo_magazine/pkm/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAS" = ( +/obj/item/ammo_casing/microbattery/combat/stripper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tAW" = ( +/obj/item/clothing/mask/bandana/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBb" = ( +/obj/structure/prop/fence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBs" = ( +/obj/machinery/shield_gen/external/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBt" = ( +/obj/fiftyspawner/oracarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBv" = ( +/obj/item/clothing/suit/storage/forensics/red/long, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBO" = ( +/obj/structure/prop/machine/tgmc_console4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tBS" = ( +/obj/item/trash/sun_snax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCb" = ( +/obj/structure/sign/levels/cryo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCe" = ( +/obj/item/weapon/reagent_containers/food/snacks/meatcube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCm" = ( +/obj/machinery/gear_dispenser/suit/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCu" = ( +/obj/item/weapon/aiModule/oxygen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCy" = ( +/obj/item/weapon/implant/exile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCE" = ( +/obj/item/ammo_magazine/s45/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCG" = ( +/obj/item/clothing/under/technomancer/apprentice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCH" = ( +/obj/item/weapon/disk/limb/wardtakahashi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCR" = ( +/obj/item/weapon/card/emag/used, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tCX" = ( +/obj/item/weapon/circuitboard/exploration_equipment_vendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDo" = ( +/obj/structure/closet/crate/secure/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDp" = ( +/obj/item/weapon/reagent_containers/food/snacks/triton, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDr" = ( +/obj/item/seeds/limeseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDz" = ( +/obj/structure/prop/machine/tgmc_console5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDA" = ( +/obj/item/clothing/head/beret/sec/corporate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDE" = ( +/obj/item/weapon/circuitboard/mining_equipment_vendor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDG" = ( +/obj/item/weapon/light/bulb/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDR" = ( +/obj/item/clothing/under/dress/twistfront, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDS" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tDZ" = ( +/obj/item/clothing/head/helmet/space/void/security/riot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEf" = ( +/obj/item/ammo_casing/a792x57m, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEt" = ( +/obj/item/weapon/reagent_containers/syringe/antiviral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEx" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb06, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEA" = ( +/obj/item/clothing/under/rank/internalaffairs/fluff/joan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEG" = ( +/obj/item/clothing/suit/storage/labcoat/fluff/zeke_vincir_3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEH" = ( +/obj/structure/salvageable/console_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEK" = ( +/obj/item/toy/snappop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEQ" = ( +/obj/item/weapon/lipstick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tES" = ( +/obj/item/weapon/material/barbedwire/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tET" = ( +/obj/item/weapon/storage/vore_egg/cocoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEU" = ( +/obj/item/weapon/camera_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tEY" = ( +/obj/item/clothing/accessory/jacket/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFg" = ( +/obj/item/clothing/head/beret/solgov/fleet/branch/second, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFj" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFl" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/starkist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFo" = ( +/obj/item/ammo_casing/a545/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFu" = ( +/obj/item/clothing/suit/storage/miljacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFv" = ( +/obj/item/clothing/accessory/jacket/checkered, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFx" = ( +/obj/item/weapon/implanter/reagent_generator/belle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFE" = ( +/obj/item/clothing/suit/storage/hooded/fluff/kbraid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFO" = ( +/obj/item/clothing/under/harness_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFQ" = ( +/obj/item/weapon/handcuffs/legcuffs/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tFR" = ( +/obj/item/weapon/rig/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGa" = ( +/obj/item/clothing/head/pin/flower, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGb" = ( +/obj/structure/simple_door/sandstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGe" = ( +/obj/item/clothing/under/cheongsam/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGf" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGj" = ( +/mob/living/simple_mob/otie/red{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tGr" = ( +/obj/item/frame/doorbell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGu" = ( +/obj/item/clothing/under/rank/medical/fluff/jiao_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGy" = ( +/obj/structure/bed/chair/holochair, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGz" = ( +/obj/item/clothing/suit/storage/hazardvest/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGB" = ( +/obj/item/trash/material/device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGF" = ( +/obj/item/rig_module/device/plasmacutter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGL" = ( +/obj/item/weapon/gun/projectile/automatic/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGR" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "16" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGT" = ( +/obj/structure/sign/christmas/wreath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGU" = ( +/obj/item/weapon/spell/recall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tGX" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHi" = ( +/obj/item/clothing/suit/imperium_monk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHj" = ( +/obj/item/integrated_circuit/memory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHm" = ( +/obj/item/weapon/reagent_containers/food/snacks/friedrice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHE" = ( +/obj/item/clothing/under/shorts/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHO" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/androrovir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHP" = ( +/obj/item/device/gps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHR" = ( +/obj/structure/sign/directions/pool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHT" = ( +/obj/item/clothing/head/helmet/space/vox/civ/science/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tHW" = ( +/obj/item/clothing/under/lawyer/oldman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tId" = ( +/obj/item/clothing/suit/space/void/refurb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIf" = ( +/obj/structure/lightpost/festive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIu" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIv" = ( +/obj/item/clothing/suit/armor/pcarrier/explorer/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIw" = ( +/obj/item/ammo_magazine/m9mmt/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIx" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIy" = ( +/obj/item/weapon/firework_star/weather/overcast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIz" = ( +/obj/item/weapon/gun/energy/mouseray/wolpin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIA" = ( +/obj/item/weapon/commcard/head/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIE" = ( +/obj/item/clothing/ears/earring/stud/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIG" = ( +/obj/item/device/electronic_assembly/medium/clam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIO" = ( +/obj/item/clothing/suit/storage/hooded/explorer/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIR" = ( +/obj/structure/closet/secure_closet/guncabinet/sidearm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIT" = ( +/obj/structure/bed/chair/comfy/purp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIU" = ( +/obj/item/trash/fancyplate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tIY" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cafe_latte, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJi" = ( +/obj/item/weapon/pen/crayon/marker/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJz" = ( +/obj/item/weapon/gun/energy/staff/focus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJB" = ( +/obj/item/weapon/storage/box/donkpockets/teriyaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJC" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/penguin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJK" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJQ" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJU" = ( +/obj/structure/showcase/sign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tJV" = ( +/obj/structure/sign/atmos/air, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKg" = ( +/obj/item/clothing/under/solgov/utility/fleet/officer/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKr" = ( +/obj/item/clothing/accessory/badge/holo/investigator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKt" = ( +/mob/living/simple_mob/slime/xenobio/dark_blue{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tKu" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKz" = ( +/obj/item/clothing/under/rank/research_director/rdalt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKC" = ( +/obj/structure/closet/crate/secure/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKE" = ( +/mob/living/simple_mob/blob/spore{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tKF" = ( +/obj/machinery/botany, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKH" = ( +/obj/item/ammo_magazine/tp23s, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKI" = ( +/obj/item/weapon/rig/ch/pursuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKK" = ( +/obj/item/weapon/cell/infinite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKP" = ( +/obj/item/weapon/gun/projectile/revolver/lombardi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tKZ" = ( +/obj/item/weapon/storage/mre/menu7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLd" = ( +/obj/machinery/power/port_gen/pacman/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLg" = ( +/obj/item/ammo_magazine/ppsh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLr" = ( +/obj/structure/bed/chair/comfy/rounded/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLz" = ( +/obj/item/weapon/refill_cartridge/autoname/food/snix, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLH" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLU" = ( +/obj/structure/prop/machine/solifier/starts_on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLY" = ( +/obj/item/clothing/under/pants/utility/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tLZ" = ( +/obj/item/selectable_item/chemistrykit/gender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMe" = ( +/obj/item/clothing/head/bio_hood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMq" = ( +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tME" = ( +/obj/item/device/megaphone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMH" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/candiedapple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMS" = ( +/obj/item/integrated_circuit/passive/power/metabolic_siphon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMV" = ( +/obj/item/stack/tile/floor/milspec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tMZ" = ( +/obj/item/clothing/head/tesh_hood/standard/black_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNb" = ( +/mob/living/simple_mob/otie/zorgoia{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tNd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNf" = ( +/obj/item/slime_extract/dark_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNh" = ( +/obj/item/weapon/paper/card/smile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNl" = ( +/obj/item/weapon/rig/pmc/engineer/green/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNx" = ( +/obj/item/toy/blink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNH" = ( +/obj/item/clothing/under/wedding/bride_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tNL" = ( +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tNZ" = ( +/obj/item/weapon/implantcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOe" = ( +/obj/item/weapon/reagent_containers/food/snacks/pastatomato, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOn" = ( +/obj/item/weapon/paper/crumpled/whiskeyhermit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOv" = ( +/obj/item/seeds/megashroom, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOE" = ( +/obj/item/weapon/bikehorn/rubberducky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOF" = ( +/obj/item/weapon/surgical/scalpel/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tON" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tOO" = ( +/obj/item/weapon/reagent_containers/food/snacks/locust_cooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tOP" = ( +/obj/item/modular_computer/telescreen/preset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPi" = ( +/obj/item/weapon/disk/limb/eggnerdltd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPm" = ( +/obj/item/clothing/accessory/medal/dungeon/alien_ufo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPp" = ( +/obj/item/weapon/pen/fountain7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPx" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/rosewood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPB" = ( +/obj/item/ammo_magazine/cell_mag/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPJ" = ( +/obj/item/weapon/surgical/bone_clamp/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPL" = ( +/obj/item/toy/figure/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tPV" = ( +/obj/structure/bed/chair/sofa/right/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQe" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/rezadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQf" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQh" = ( +/obj/machinery/door/airlock/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQn" = ( +/obj/item/weapon/gun/projectile/shotgun/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQu" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQA" = ( +/obj/item/weapon/storage/box/glasses/coffeemug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQC" = ( +/obj/item/clothing/suit/oversize, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQU" = ( +/obj/item/weapon/weldingtool/hugetank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tQV" = ( +/obj/item/clothing/accessory/tie/blue_long, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRm" = ( +/obj/item/weapon/storage/bag/circuits/mini/time, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRr" = ( +/obj/item/weapon/rcd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRv" = ( +/obj/item/weapon/tool/wirecutters/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRB" = ( +/obj/item/ammo_magazine/m792, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRD" = ( +/obj/item/weapon/storage/belt/champion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRE" = ( +/obj/machinery/door/airlock/angled_tgmc/medical_glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRJ" = ( +/obj/item/weapon/card/id/synthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tRY" = ( +/obj/item/clothing/under/nanotrasen/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSc" = ( +/obj/item/weapon/cell/device/giga/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSh" = ( +/obj/item/device/electronic_assembly/default, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSi" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSk" = ( +/obj/item/weapon/storage/box/frags, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSr" = ( +/obj/structure/largecrate/animal/pred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSs" = ( +/obj/item/weapon/spell/mend_organs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSB" = ( +/mob/living/simple_mob/animal/space/carp/large/huge{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tSK" = ( +/obj/item/clothing/shoes/boots/ranger/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tSZ" = ( +/obj/item/weapon/storage/box/nifsofts_security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tTd" = ( +/obj/structure/loot_pile/mecha/gygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tTk" = ( +/obj/item/clothing/gloves/ring/material/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tTO" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tTS" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/appleberry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUd" = ( +/obj/machinery/button/garbosystem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUg" = ( +/obj/structure/closet/coffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUh" = ( +/obj/item/weapon/nullrod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUi" = ( +/obj/item/clothing/suit/kimono/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUr" = ( +/mob/living/simple_mob/vore/fennix{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tUt" = ( +/obj/item/clothing/head/helmet/fluff/freddy/chica, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUv" = ( +/obj/item/stack/material/chitin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUw" = ( +/obj/item/weapon/mining_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUx" = ( +/obj/item/weapon/fossil/shell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUG" = ( +/obj/structure/largecrate/animal/wolfgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUJ" = ( +/obj/item/weapon/gun/projectile/automatic/z8/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUK" = ( +/obj/item/clothing/head/helmet/space/void/refurb/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUM" = ( +/obj/item/weapon/cell/clockwork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUQ" = ( +/obj/item/weapon/surgical/retractor/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUS" = ( +/obj/item/weapon/material/knife/ritual/fluff/astra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUU" = ( +/obj/structure/sign/bigname/seg_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tUZ" = ( +/obj/item/projectile/bullet/magnetic/bore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVa" = ( +/obj/item/weapon/book/bundle/custom_library/fiction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVl" = ( +/obj/structure/reagent_dispensers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVp" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVu" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sarucube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVN" = ( +/obj/item/gunbox/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVS" = ( +/obj/item/weapon/toy/desk/officetoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVT" = ( +/obj/item/weapon/reagent_containers/food/snacks/friedmushroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tVZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWc" = ( +/obj/item/clothing/glasses/rimless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWi" = ( +/obj/item/clothing/head/helmet/space/void/captain/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWn" = ( +/obj/item/clothing/shoes/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWr" = ( +/obj/item/clothing/shoes/boots/jackboots/fluff/mauserboots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWv" = ( +/obj/item/ammo_magazine/cell_mag/medical/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWB" = ( +/obj/item/clothing/head/terran/navy/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWE" = ( +/obj/item/weapon/handcuffs/legcuffs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWG" = ( +/obj/item/ammo_casing/a9x39, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWO" = ( +/obj/item/clothing/mask/gas/clear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tWS" = ( +/obj/structure/closet/crate/large/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXb" = ( +/mob/living/simple_mob/animal/passive/lizard{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"tXc" = ( +/obj/item/toy/plushie/farwa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXh" = ( +/obj/machinery/light/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXj" = ( +/obj/item/slimepotion/fertility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXm" = ( +/obj/item/clothing/accessory/solgov/department/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXp" = ( +/obj/machinery/vending/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXq" = ( +/obj/item/weapon/reagent_containers/food/snacks/funnelcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXs" = ( +/obj/structure/prop/alien/dispenser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXt" = ( +/obj/item/seeds/icepepperseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXw" = ( +/obj/machinery/vending/wallmed1/public, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXy" = ( +/obj/item/weapon/storage/box/swabs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXB" = ( +/obj/item/weapon/storage/bag/circuits/mini/logic/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXC" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXO" = ( +/obj/item/weapon/circuitboard/rdservercontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXP" = ( +/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXR" = ( +/obj/item/clothing/under/croptop/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXU" = ( +/obj/mecha/combat/gygax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tXZ" = ( +/obj/item/seeds/sugarcaneseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYb" = ( +/obj/item/weapon/gun/projectile/p92x, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYk" = ( +/obj/item/weapon/material/shard/titaniumglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYn" = ( +/obj/item/weapon/storage/mrebag/pill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYo" = ( +/obj/item/clothing/accessory/armor/armguards/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYp" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/pink_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYv" = ( +/obj/item/clothing/accessory/solgov/rank/ec/enlisted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYz" = ( +/obj/item/clothing/head/caphat/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYJ" = ( +/obj/item/clothing/under/skirt/colorable/tube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYV" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tYX" = ( +/obj/item/broken_device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZd" = ( +/obj/item/weapon/towel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZf" = ( +/obj/item/weapon/reagent_containers/food/snacks/macncheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZm" = ( +/obj/item/clothing/suit/cyborg_suit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZr" = ( +/obj/item/ammo_magazine/m545/ext/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZw" = ( +/obj/item/clothing/under/color/fjumpsuit/lightredf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZy" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/mosin/scoped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZM" = ( +/obj/structure/bed/chair/bay/chair/padded/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"tZY" = ( +/obj/item/weapon/storage/internal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uac" = ( +/obj/item/weapon/dosimeter_film, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uad" = ( +/obj/item/clothing/suit/storage/flannel/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uau" = ( +/obj/structure/closet/toolcloset, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/module/id_auth, +/obj/item/weapon/module/card_reader, +/obj/item/weapon/module/cell_power, +/obj/item/weapon/module/power_control, +/obj/item/weapon/circuitboard/microwave, +/obj/item/weapon/circuitboard/mass_driver, +/obj/item/weapon/circuitboard/jukebox, +/obj/item/weapon/circuitboard/intercom, +/obj/item/weapon/circuitboard/firealarm, +/obj/item/weapon/circuitboard/airalarm, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/belt/utility/full/multitool, +/obj/item/weapon/storage/bag/trash, +/obj/item/weapon/storage/bag/trash, +/obj/item/weapon/storage/backpack/dufflebag/eng, +/obj/item/device/geiger, +/obj/item/device/mapping_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uaU" = ( +/obj/item/weapon/pen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uaX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uaZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubd" = ( +/obj/mecha/combat/phazon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubo" = ( +/obj/item/weapon/circuitboard/machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubt" = ( +/obj/item/toy/plushie/girly_corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uby" = ( +/obj/item/clothing/suit/storage/det_suit/fluff/tasald, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubC" = ( +/obj/item/clothing/head/helmet/HoS, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubD" = ( +/obj/item/clothing/under/clown/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubG" = ( +/obj/item/clothing/head/trilby/feather, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubI" = ( +/obj/structure/bed/chair/sofa/corner/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubK" = ( +/obj/item/weapon/aiModule/nanotrasen_aggressive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubS" = ( +/obj/structure/closet/syndicate/resources/everything, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubU" = ( +/obj/item/clothing/under/rank/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ubX" = ( +/obj/item/clothing/mask/gas/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uce" = ( +/obj/structure/fence/door/opened, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uci" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucs" = ( +/obj/item/clothing/head/pilot_vr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucx" = ( +/obj/structure/loot_pile/maint/boxfort, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucC" = ( +/obj/item/clothing/head/collectable/wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucD" = ( +/obj/structure/symbol/clock, +/turf/simulated/fitness, +/area/survivalpod) +"ucH" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/poly, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ucN" = ( +/obj/item/weapon/flame/lighter/zippo/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucQ" = ( +/obj/item/integrated_circuit/passive/power/relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucS" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ucT" = ( +/obj/random/flashlight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uda" = ( +/obj/item/clothing/head/beret/medical/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udh" = ( +/obj/structure/sign/hangar/one, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udt" = ( +/obj/item/clothing/under/color/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udE" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udI" = ( +/obj/machinery/vending/hotfood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udJ" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udM" = ( +/obj/item/stack/medical/splint/ghetto, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udU" = ( +/obj/item/device/spaceflare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"udX" = ( +/obj/item/weapon/gun/energy/gun/compact/dazzle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ued" = ( +/obj/item/weapon/gun/projectile/revolver/deckard/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uek" = ( +/obj/item/clothing/under/pants/camo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uen" = ( +/obj/item/clothing/suit/bomb_suit/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueo" = ( +/obj/item/clothing/under/excelsior/mixed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uer" = ( +/obj/item/weapon/scrying, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uew" = ( +/obj/item/clothing/under/relaxwear_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uey" = ( +/obj/item/instrument/bikehorn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueA" = ( +/obj/item/weapon/locator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueC" = ( +/obj/item/weapon/dnainjector/antinobreath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueG" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueK" = ( +/obj/item/weapon/reagent_containers/food/snacks/saturn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueV" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ueX" = ( +/obj/item/weapon/reagent_containers/pill/stox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ufd" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ufE" = ( +/obj/item/stack/tile/carpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ufG" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ufT" = ( +/obj/item/weapon/card/id/casino/manager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugb" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/moss, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ugf" = ( +/obj/item/weapon/card/id/science/xenobotanist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugo" = ( +/mob/living/simple_mob/animal/space/mouse_army/stealth{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ugq" = ( +/obj/structure/closet/crate/fennec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugr" = ( +/obj/item/clothing/accessory/armor/legguards/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugu" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugv" = ( +/obj/item/stack/tile/carpet/retro_red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugw" = ( +/obj/structure/noticeboard/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugx" = ( +/obj/item/clothing/under/rank/cargotech/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugI" = ( +/obj/item/clothing/gloves/gauntlets/rig/pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugJ" = ( +/obj/item/ammo_magazine/ssp4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugL" = ( +/obj/item/clothing/head/caphat/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugQ" = ( +/obj/item/integrated_circuit/input/phoron_sensor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ugZ" = ( +/obj/item/weapon/storage/vore_egg/cd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhb" = ( +/mob/living/simple_mob/animal/passive/dog/brittany, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uhc" = ( +/obj/item/clothing/shoes/boots/cowboy/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhg" = ( +/obj/structure/sign/warning/vacuum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhk" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced/shadowlarkens, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhm" = ( +/obj/item/pizzabox/meat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhn" = ( +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhp" = ( +/obj/item/clothing/accessory/scarf/stripedblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhw" = ( +/obj/item/clothing/suit/storage/hooded/foodcostume/turnip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhx" = ( +/obj/machinery/suit_cycler/vintage/tengi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhy" = ( +/obj/structure/prop/machine/nt_cruciforge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhL" = ( +/obj/machinery/disperser/middle{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhN" = ( +/obj/item/weapon/storage/backpack/satchel/strapless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uhZ" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "6" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uic" = ( +/obj/item/weapon/tank/jetpack/rig, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uig" = ( +/obj/item/ammo_casing/a10mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uih" = ( +/obj/item/weapon/reagent_containers/food/snacks/nutrimentslab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uio" = ( +/obj/item/weapon/grenade/explosive/frag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uis" = ( +/obj/structure/atmospheric_retention_field/impassable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uit" = ( +/obj/item/clothing/shoes/sneakersred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uiy" = ( +/obj/machinery/door/airlock/alien/blue/public, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uiH" = ( +/obj/item/clothing/head/pin/butterfly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uiR" = ( +/obj/item/stack/material/supermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujd" = ( +/obj/structure/closet/crate/solar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujg" = ( +/obj/item/weapon/reagent_containers/food/snacks/salo/true, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujj" = ( +/obj/item/device/electronic_assembly/clothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujl" = ( +/obj/item/weapon/cell/device/shield_generator/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujq" = ( +/obj/item/clothing/under/vox/vox_casual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujr" = ( +/obj/structure/barricade/sandbag{ + icon_state = "sandbag" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujs" = ( +/obj/item/clothing/suit/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujv" = ( +/obj/item/weapon/implantcase/handblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujw" = ( +/obj/item/weapon/secbot_assembly/ed209_assembly/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujx" = ( +/obj/item/clothing/accessory/armor/armorplate/tactical/fluff/saur_plate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujD" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujE" = ( +/obj/item/clothing/suit/storage/fluff/fedcoat/amara_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujN" = ( +/obj/item/weapon/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujS" = ( +/obj/item/weapon/implant/reagent_generator/eldi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujW" = ( +/obj/machinery/media/jukebox/casinojukebox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ujX" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/grapejuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukc" = ( +/obj/item/clothing/accessory/jacket/gambler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukr" = ( +/obj/item/weapon/stamp/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukx" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/beans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukM" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress/mother/big{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ukO" = ( +/obj/machinery/mech_recharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukP" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/robo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukU" = ( +/obj/item/device/encryptionkey/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ukV" = ( +/mob/living/simple_mob/mechanical/cyber_horror{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ukX" = ( +/obj/structure/sign/signnew/memetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulb" = ( +/obj/item/trash/ratpacktaco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulj" = ( +/obj/structure/closet/walllocker_double/misc_civ, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulp" = ( +/obj/machinery/fitness/heavy/lifter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulr" = ( +/obj/item/device/personal_shield_generator/belt/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulA" = ( +/obj/item/weapon/bedsheet/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulG" = ( +/obj/item/clothing/head/beret/corp/saare/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulI" = ( +/obj/structure/closet/crate/secure/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulK" = ( +/obj/item/weapon/gun/energy/locked/frontier/handbow/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ulM" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/awp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umn" = ( +/obj/item/clothing/accessory/pride/trans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umq" = ( +/obj/item/seeds/cutting, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umv" = ( +/obj/item/clothing/under/dress/twopiece, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umz" = ( +/obj/item/weapon/storage/backpack/luchador, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umF" = ( +/obj/item/ammo_casing/a556/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umK" = ( +/obj/item/device/electronic_assembly/tiny/hook, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umN" = ( +/obj/item/weapon/circuitboard/air_management/tank_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umR" = ( +/obj/item/weapon/storage/vore_egg/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umS" = ( +/obj/item/clothing/under/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umV" = ( +/obj/item/weapon/soap/rainbow_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"umX" = ( +/obj/item/clothing/mask/breath, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"und" = ( +/obj/item/weapon/book/manual/chemistry_guide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unf" = ( +/obj/machinery/atmospherics/unary/vent_pump/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ung" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unl" = ( +/obj/structure/sign/directions/stairs_down, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unw" = ( +/obj/structure/closet/walllocker_double/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unD" = ( +/obj/item/clothing/under/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unJ" = ( +/obj/structure/closet/crate/mimic/closet/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"unX" = ( +/obj/item/clothing/under/dress/flamenco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uog" = ( +/obj/item/clothing/gloves/ring/material/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoj" = ( +/obj/item/clothing/suit/space/void/medical/alt/tesh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoo" = ( +/obj/item/weapon/reagent_containers/cooking_container/oven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoz" = ( +/obj/item/clothing/gloves/gauntlets/rig/baymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoD" = ( +/obj/item/ammo_casing/a45/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoH" = ( +/obj/item/weapon/circuitboard/clonescanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoK" = ( +/obj/item/ammo_magazine/m545/small/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uoU" = ( +/obj/item/clothing/under/rank/scientist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upe" = ( +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upf" = ( +/obj/item/weapon/spell/aura/unstable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upg" = ( +/obj/item/weapon/gun/projectile/n80, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upi" = ( +/obj/item/weapon/gun/energy/soapenergy/gauss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upj" = ( +/obj/item/weapon/soap/orange_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upo" = ( +/obj/item/weapon/melee/energy/spear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upq" = ( +/obj/structure/closet/walllocker_double/emergency_engi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upB" = ( +/obj/item/weapon/storage/box/casino/costume_imperiummonk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upD" = ( +/obj/item/stack/material/resin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upK" = ( +/obj/machinery/power/tracker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upM" = ( +/obj/item/stack/tile/carpet/happy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upN" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upO" = ( +/obj/item/clothing/suit/storage/hazardvest/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upX" = ( +/obj/item/weapon/soap/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"upZ" = ( +/obj/item/weapon/material/hatchet/unathiknife, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqe" = ( +/obj/item/ammo_magazine/m12gdrum/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqi" = ( +/obj/item/clothing/suit/storage/solgov/service/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqm" = ( +/mob/living/simple_mob/humanoid/pirate/shield/machete/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uqr" = ( +/obj/item/clothing/accessory/wcoat/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqs" = ( +/obj/machinery/door/window/brigdoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqx" = ( +/obj/item/weapon/circuitboard/teleporter_hub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqA" = ( +/obj/machinery/vending/fitness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqH" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqS" = ( +/mob/living/simple_mob/metroid/juvenile/super{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uqU" = ( +/obj/item/integrated_circuit/output/led/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uqW" = ( +/obj/structure/sign/level/four/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urp" = ( +/obj/item/toy/plushie/white_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urC" = ( +/obj/item/clothing/head/helmet/space/vox/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urR" = ( +/obj/item/weapon/rig/pmc/medical/grey/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urS" = ( +/obj/item/clothing/shoes/boots/jackboots/knee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urU" = ( +/obj/item/weapon/storage/pouch/holster/full_stunrevolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"urX" = ( +/obj/item/seeds/gelthi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usf" = ( +/obj/item/clothing/glasses/omnihud/eng/meson, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usx" = ( +/obj/item/clothing/under/rank/pilot2/no_webbing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usz" = ( +/obj/item/weapon/material/fishing_rod/modern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usN" = ( +/obj/item/clothing/gloves/ring/material/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usX" = ( +/obj/machinery/gear_painter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"usY" = ( +/obj/item/clothing/accessory/armor/tag/com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utb" = ( +/obj/item/clothing/accessory/scarf/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utc" = ( +/obj/machinery/light/small/emergency, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utd" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_aug/analyzer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uti" = ( +/obj/item/weapon/rig/ert/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utn" = ( +/obj/item/ammo_magazine/akm/drum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utq" = ( +/obj/item/weapon/rig/vox_engine_technition_control_module/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utw" = ( +/obj/item/ammo_casing/microbattery/medical/toxin3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uty" = ( +/obj/machinery/vending/loadout/costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utN" = ( +/obj/item/weapon/handcuffs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utR" = ( +/obj/item/weapon/gun/energy/monorifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"utY" = ( +/obj/item/clothing/under/yw/rank/warden/formal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uud" = ( +/obj/item/weapon/tool/wrench/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuf" = ( +/obj/machinery/gravity_generator/main/station/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uug" = ( +/obj/item/clothing/shoes/boots/combat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuq" = ( +/obj/structure/sign/directions/cargo/refinery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uus" = ( +/obj/item/weapon/card/id/talon/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuu" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uuB" = ( +/obj/item/clothing/suit/storage/trek/ds9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuG" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuO" = ( +/obj/machinery/seed_storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uuX" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uva" = ( +/obj/item/weapon/reagent_containers/hypospray/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvb" = ( +/obj/vehicle/train/engine/quadbike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvc" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvm" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvn" = ( +/obj/item/clothing/accessory/poncho/thermal/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvr" = ( +/obj/item/ammo_magazine/m12gdrum/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvx" = ( +/obj/item/clothing/under/shorts/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvz" = ( +/obj/item/stack/cable_coil/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvB" = ( +/obj/machinery/mineral/mint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvF" = ( +/obj/item/weapon/dnainjector/firemut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvL" = ( +/obj/item/clothing/under/solgov/service/sifguard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvQ" = ( +/obj/item/weapon/book/manual/excavation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvU" = ( +/obj/item/clothing/under/color/white/craftable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvX" = ( +/obj/item/weapon/reagent_containers/food/snacks/ratprotein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uvZ" = ( +/obj/machinery/neonsign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwd" = ( +/obj/item/clothing/glasses/goggles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwf" = ( +/obj/item/clothing/accessory/scarf/altevian/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwm" = ( +/obj/machinery/artifact_analyser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwr" = ( +/obj/structure/salvageable/bliss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwt" = ( +/obj/item/weapon/gun/energy/retro/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uww" = ( +/obj/item/weapon/storage/backpack/messenger/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwB" = ( +/obj/item/clothing/under/sundress_white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwC" = ( +/obj/item/weapon/gun/projectile/multi_cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwE" = ( +/obj/item/clothing/under/rank/chief_medical_officer/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwI" = ( +/obj/item/weapon/rig/vox_engine_technition_control_module, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwJ" = ( +/obj/item/clothing/head/beret/solgov/fleet/branch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwK" = ( +/obj/item/clothing/head/beret/mauserhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwL" = ( +/obj/item/clothing/under/whitegoldrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwO" = ( +/obj/item/weapon/reagent_containers/food/snacks/waffles, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwQ" = ( +/obj/structure/sign/flag/blank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uwS" = ( +/obj/machinery/door/airlock/angled_tgmc/pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxf" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/jensen/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxg" = ( +/obj/item/weapon/storage/box/nifsofts_pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxj" = ( +/obj/item/weapon/circuitboard/unary_atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxA" = ( +/obj/item/weapon/reagent_containers/food/snacks/tomatosoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxD" = ( +/obj/item/trash/genration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxF" = ( +/obj/item/device/flashlight/lantern, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxH" = ( +/obj/item/stamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxK" = ( +/obj/structure/sign/levels/science/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxM" = ( +/obj/item/weapon/reagent_containers/glass/paint/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uxP" = ( +/obj/item/weapon/card/id/gold/captain/spare/fakespare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyc" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/strippergreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyf" = ( +/obj/item/weapon/gun/projectile/deagle/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyq" = ( +/obj/item/clothing/mask/gas/poltergeist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyw" = ( +/obj/item/clothing/suit/storage/vest/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyI" = ( +/obj/item/weapon/reagent_containers/food/snacks/gigapuddi/happy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyW" = ( +/obj/item/clothing/suit/fire/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uyZ" = ( +/obj/item/clothing/head/turban, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzb" = ( +/obj/item/weapon/storage/box/syndie_kit/imp_freedom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzd" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzl" = ( +/mob/living/simple_mob/humanoid/pirate/ranged/shotgun/armored{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uzu" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzy" = ( +/obj/item/clothing/suit/armor/yw/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzz" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/beef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzI" = ( +/obj/machinery/atmospheric_field_generator/perma/impassable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzK" = ( +/obj/item/clothing/under/fluff/mocha_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uzM" = ( +/obj/item/clothing/accessory/poncho/thermal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAa" = ( +/obj/item/clothing/suit/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAj" = ( +/obj/item/weapon/tool/screwdriver/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAk" = ( +/obj/item/weapon/implant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAu" = ( +/obj/item/device/gps/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAD" = ( +/obj/item/roller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAI" = ( +/obj/item/ammo_magazine/clip/sks/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAN" = ( +/obj/item/weapon/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAP" = ( +/obj/item/clothing/suit/varsity/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uAV" = ( +/obj/item/device/electronic_assembly/drone/arms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBc" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_glow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBg" = ( +/obj/item/weapon/gun/energy/dakkalaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBn" = ( +/obj/item/ammo_casing/sam48, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBp" = ( +/obj/item/frame/apc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBs" = ( +/obj/item/clothing/under/rank/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBt" = ( +/obj/item/ammo_magazine/ammo_box/b545/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBu" = ( +/obj/item/weapon/book/tome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBy" = ( +/obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBz" = ( +/obj/vehicle/bike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBC" = ( +/obj/machinery/mineral/equipment_vendor/survey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBE" = ( +/obj/item/clothing/under/cohesion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBJ" = ( +/mob/living/simple_mob/mechanical/mecha/combat/durand{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uBV" = ( +/obj/item/weapon/card/id/event/altcard/spare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uBY" = ( +/obj/item/clothing/suit/armor/alien/tank, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCe" = ( +/obj/item/weapon/coin/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCj" = ( +/obj/item/instrument/violin/golden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCo" = ( +/obj/item/weapon/rig/light/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCs" = ( +/obj/item/clothing/under/pants/track, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCD" = ( +/obj/item/clothing/shoes/boots/singer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCL" = ( +/mob/living/simple_mob/animal/passive/fish/bass, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"uCT" = ( +/obj/item/clothing/under/color/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uCV" = ( +/obj/machinery/chemical_dispenser/bar_coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDb" = ( +/obj/item/mecha_parts/part/phazon_torso, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDg" = ( +/obj/item/clothing/under/wetsuit_rec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDk" = ( +/obj/item/weapon/tool/wirecutters/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDl" = ( +/obj/item/weapon/storage/box/donkpockets/gondola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDv" = ( +/obj/item/clothing/under/rank/khi/fluff/aronai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDy" = ( +/obj/item/device/electronic_assembly/drone/secbot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDC" = ( +/obj/item/clothing/suit/space/void/zaddat/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDL" = ( +/obj/structure/closet/athletic_swimwear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDY" = ( +/obj/item/weapon/weldingtool/lasercannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uDZ" = ( +/obj/item/ammo_magazine/s44/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEc" = ( +/obj/structure/closet/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEd" = ( +/obj/item/weapon/technomancer_catalog/universal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEe" = ( +/obj/machinery/atmospherics/pipe/tank/nitrous_oxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEj" = ( +/obj/item/clothing/head/helmet/space/void/responseteam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEk" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEl" = ( +/mob/living/simple_mob/vore/rabbit{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uEo" = ( +/obj/structure/closet/secure_closet/courtroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEt" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/pilotslug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uEw" = ( +/obj/machinery/atmospherics/pipe/cap/visible/scrubbers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEy" = ( +/obj/item/clothing/under/fluff/taiga, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEB" = ( +/obj/item/weapon/chaoscake_layer/eight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uED" = ( +/obj/item/weapon/gun/projectile/fiveseven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEF" = ( +/obj/structure/loot_pile/surface/medicine_cabinet/fresh, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEW" = ( +/obj/structure/sign/flag/vystholm/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uEY" = ( +/mob/living/simple_mob/humanoid/possessed/industrial{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uFl" = ( +/obj/machinery/porta_turret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFo" = ( +/obj/item/clothing/head/beret/solgov/ttc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFp" = ( +/obj/item/weapon/broken_gun/grenadelauncher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFs" = ( +/obj/item/weapon/storage/bag/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFx" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFB" = ( +/obj/item/clothing/under/rank/security/corp/fluff/sam_bodysuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFC" = ( +/obj/item/stack/tile/floor/freezer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFL" = ( +/obj/mecha/working/ripley/deathripley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFR" = ( +/obj/item/weapon/storage/box/monkeycubes/sobakacubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFX" = ( +/obj/item/clothing/under/solgov/utility/fleet/combat/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uFZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/canned/caviar/true, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGb" = ( +/obj/structure/sign/levels/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGf" = ( +/obj/item/clothing/suit/customs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGg" = ( +/obj/item/clothing/accessory/asymmetric, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGi" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGl" = ( +/obj/item/device/encryptionkey/heads/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGn" = ( +/obj/item/weapon/technomancer_core/safety, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGz" = ( +/obj/item/clothing/head/collectable/rabbitears, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGC" = ( +/obj/item/weapon/spellbook/oneuse/charge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGJ" = ( +/obj/item/device/camerabug/spy, +/obj/item/weapon/implant/restrainingbolt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uGP" = ( +/obj/item/weapon/ectoplasm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHf" = ( +/obj/machinery/door/airlock/glass_atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHi" = ( +/obj/item/clothing/accessory/solgov/department/engineering/army, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHj" = ( +/obj/item/integrated_circuit/manipulation/size, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHm" = ( +/obj/item/clothing/gloves/ring/seal/signet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHA" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/red_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHB" = ( +/obj/structure/sign/flag/pirate/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHI" = ( +/obj/structure/droppod_door, +/turf/simulated/shuttle/wall/voidcraft, +/area/survivalpod) +"uHK" = ( +/obj/item/clothing/suit/space/syndicate/black/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHL" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/yithian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHS" = ( +/obj/item/weapon/material/twohanded/spear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uHY" = ( +/obj/item/clothing/shoes/boots/winter/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIa" = ( +/obj/item/weapon/storage/mre/menu9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIc" = ( +/obj/item/clothing/accessory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uId" = ( +/obj/item/clothing/accessory/storage/pouches/navy/fluff/saur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIf" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/kompot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIj" = ( +/obj/structure/sign/department/conference_room, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIn" = ( +/obj/item/weapon/book/manual/research_and_development, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIs" = ( +/obj/item/stack/wetleather, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIt" = ( +/obj/item/clothing/suit/space/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIu" = ( +/obj/item/clothing/accessory/badge/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIx" = ( +/obj/item/weapon/circuitboard/engineering_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIz" = ( +/obj/item/stack/tile/carpet/purplecarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIA" = ( +/obj/item/weapon/material/knife/machete/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIJ" = ( +/obj/item/clothing/accessory/scarf/zebra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIM" = ( +/obj/item/rig_module/sprinter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIQ" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIR" = ( +/obj/structure/prop/war/warhead1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uIU" = ( +/mob/living/simple_mob/tomato{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uIV" = ( +/obj/item/clothing/accessory/bowtie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJa" = ( +/obj/item/clothing/head/helmet/space/void/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJg" = ( +/obj/machinery/ntnet_relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJi" = ( +/obj/item/device/multitool/ai_detector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJk" = ( +/obj/structure/closet/crate/large/critter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJn" = ( +/obj/item/clothing/under/det, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJu" = ( +/obj/machinery/atmospherics/binary/pump/fuel/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJC" = ( +/obj/machinery/neonsign/cafe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJD" = ( +/obj/item/clothing/head/beret/solgov/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJF" = ( +/mob/living/simple_mob/animal/passive/fish/koi/poisonous, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"uJR" = ( +/obj/item/weapon/storage/box/nifsofts_mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJS" = ( +/obj/item/weapon/card/id/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJX" = ( +/obj/item/clothing/accessory/ribbon/solgov/peace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uJY" = ( +/obj/item/weapon/reagent_containers/glass/bottle/ickypak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKc" = ( +/obj/item/weapon/gun/energy/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKg" = ( +/mob/living/simple_mob/animal/passive/cat/tabiranth, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uKh" = ( +/obj/item/clothing/head/pin/flower/violet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKi" = ( +/obj/item/device/kit/paint/durand/seraph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKl" = ( +/obj/structure/closet/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKo" = ( +/obj/item/ammo_casing/a762, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKq" = ( +/obj/item/toy/plushie/red_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKs" = ( +/obj/item/weapon/gun/magnetic/railgun/automatic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKw" = ( +/obj/item/device/gps/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKB" = ( +/obj/item/device/bug_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKE" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/old/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKG" = ( +/obj/item/clothing/accessory/storage/brown_drop_pouches, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKJ" = ( +/obj/item/weapon/reagent_containers/food/snacks/packaged/darklunacake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKR" = ( +/obj/machinery/autolathe/armory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uKS" = ( +/obj/item/ammo_magazine/m16/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLj" = ( +/obj/item/clothing/suit/kimono/violet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLk" = ( +/obj/item/weapon/card/data/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLm" = ( +/obj/item/toy/mecha/seraph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLI" = ( +/obj/item/clothing/under/skirt/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLL" = ( +/obj/item/weapon/dnainjector/remoteview, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLW" = ( +/obj/item/organ/internal/augment/armmounted/shoulder/multiple/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLX" = ( +/obj/item/weapon/storage/box/survival/synth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uLY" = ( +/obj/item/organ/internal/cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMg" = ( +/obj/item/clothing/head/beret/solgov/health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMt" = ( +/obj/item/weapon/gun/projectile/ecureuil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMw" = ( +/obj/item/weapon/dnainjector/epimut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMz" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMC" = ( +/obj/item/weapon/reagent_containers/food/snacks/nacho, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMI" = ( +/obj/item/rig_module/maneuvering_jets, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMJ" = ( +/obj/item/weapon/circuitboard/cloning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMT" = ( +/obj/item/ammo_casing/a38, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uMW" = ( +/obj/item/clothing/under/bathrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNq" = ( +/obj/structure/sign/bigname/seg_5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNs" = ( +/obj/item/seeds/thaadra, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNx" = ( +/obj/item/slime_extract/sapphire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNC" = ( +/obj/item/weapon/reagent_containers/food/snacks/wormsickly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNI" = ( +/obj/item/weapon/card/emag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNL" = ( +/obj/item/ammo_magazine/hectate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNS" = ( +/obj/item/stack/material/glass{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uNU" = ( +/obj/structure/casino_table/blackjack_l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOb" = ( +/obj/item/weapon/storage/bag/circuits/mini/input/all, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOd" = ( +/obj/item/stack/flag/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOg" = ( +/obj/item/weapon/gun/projectile/revolver/nova, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOj" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/patron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOp" = ( +/obj/item/clothing/suit/captunic/capjacket/altevian_admiral, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOr" = ( +/obj/item/integrated_circuit/time, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOt" = ( +/obj/item/clothing/under/rank/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOz" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOA" = ( +/obj/item/weapon/gun/projectile/automatic/as24, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOB" = ( +/obj/item/weapon/gun/energy/lasertag/red/dom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOC" = ( +/obj/item/weapon/rms, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOI" = ( +/obj/item/weapon/circuitboard/pacman/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOJ" = ( +/obj/item/weapon/card/id/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOL" = ( +/obj/item/ammo_magazine/s44/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uOW" = ( +/obj/item/clothing/gloves/gauntlets/rig/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPp" = ( +/obj/item/clothing/head/psy_crown/gluttony, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPt" = ( +/obj/item/ammo_casing/microbattery/medical/burn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPx" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/imidazoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPE" = ( +/obj/item/ammo_magazine/ammo_box/b145/highvel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPK" = ( +/obj/machinery/vending/deluxe_boozeomat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPM" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/dexalinplus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPS" = ( +/obj/item/clothing/under/corp/grayson_jump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uPT" = ( +/obj/item/weapon/implant/health, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQf" = ( +/obj/item/weapon/gun/energy/mindflayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQj" = ( +/obj/item/weapon/firework_star/weather/confetti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQl" = ( +/mob/living/simple_mob/vore/aggressive/mimic/floor/tile{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uQA" = ( +/obj/structure/sign/double/maltesefalcon/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQB" = ( +/obj/item/clothing/suit/fluff/freddy/foxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQF" = ( +/obj/item/clothing/under/teshari/smock/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQL" = ( +/obj/item/clothing/mask/surgical/dust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQN" = ( +/obj/item/device/pda, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQR" = ( +/obj/mecha/combat/marauder/seraph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uQV" = ( +/obj/item/weapon/storage/backpack/dufflebag/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRa" = ( +/obj/item/weapon/cartridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRi" = ( +/obj/item/weapon/storage/backpack/santabag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRk" = ( +/obj/machinery/vending/blood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRm" = ( +/obj/item/clothing/head/beret/corp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRv" = ( +/obj/item/clothing/head/helmet/space/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRD" = ( +/obj/item/weapon/circuitboard/med_data, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRE" = ( +/mob/living/simple_mob/mechanical/hivebot/support/logistics{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uRH" = ( +/obj/item/device/radio/headset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRN" = ( +/obj/item/weapon/gun/projectile/colt/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRQ" = ( +/obj/item/weapon/pickaxe/five_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRR" = ( +/obj/item/weapon/reagent_containers/food/snacks/spellburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uRT" = ( +/obj/item/weapon/implant/organ/limbaugment/upperarm/surge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSd" = ( +/obj/item/clothing/gloves/ring/mariner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSj" = ( +/obj/item/weapon/dnainjector/antixray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSl" = ( +/obj/item/weapon/reagent_containers/food/snacks/hotchili, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSy" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSE" = ( +/obj/item/clothing/gloves/knuckledusters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSF" = ( +/obj/item/clothing/gloves/forensic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSH" = ( +/obj/item/stack/material/plastic{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSL" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSO" = ( +/obj/item/projectile/energy/bolt/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uSS" = ( +/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTa" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTf" = ( +/obj/structure/bonfire/permanent/sifwood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTl" = ( +/obj/item/clothing/head/hood/winter/medical/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTn" = ( +/obj/item/clothing/under/yw/rank/security/brigphys, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTz" = ( +/obj/item/clothing/head/helmet/space/void/refurb/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTA" = ( +/obj/item/clothing/accessory/gaiter/charcoal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTD" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mantle/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTF" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt/holy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTI" = ( +/obj/item/weapon/surgical/scalpel/amaryll_claws, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTJ" = ( +/obj/structure/sign/directions/security/internal_affairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTK" = ( +/obj/item/slimepotion/ferality, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTR" = ( +/obj/item/clothing/under/pj/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTV" = ( +/obj/item/weapon/storage/belt/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uTZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUf" = ( +/obj/structure/prop/machine/tradebeacon2/starts_active, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUp" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/manhattan_proj, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUr" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUs" = ( +/obj/item/weapon/card/id/civilian/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUt" = ( +/mob/living/simple_mob/humanoid/merc/ranged/laser{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uUu" = ( +/obj/item/weapon/storage/box/buns, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUx" = ( +/obj/item/clothing/under/gentlesuit/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUz" = ( +/obj/item/weapon/reagent_containers/food/snacks/bearchili, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUB" = ( +/obj/item/weapon/tool/crowbar/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUC" = ( +/obj/item/weapon/storage/belt/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUF" = ( +/obj/item/clothing/suit/storage/vest/heavy/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUG" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/carnoth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUH" = ( +/obj/item/rig_module/mounted/energy_blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUN" = ( +/obj/item/weapon/storage/backpack/messenger/sec/fluff/ivymoomoo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uUV" = ( +/obj/item/clothing/under/color/fjumpsuit/yellowf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVa" = ( +/obj/item/instrument/trumpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVi" = ( +/obj/item/stack/material/valhollide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVq" = ( +/obj/structure/closet/crate/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVB" = ( +/mob/living/simple_mob/animal/sif/diyaab{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uVD" = ( +/obj/item/clothing/ears/earring/dangle/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVE" = ( +/mob/living/silicon/robot/drone/swarm/gunner, +/turf/simulated/floor/atoll, +/area/survivalpod) +"uVK" = ( +/obj/vehicle/train/engine/quadbike/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVT" = ( +/obj/item/clothing/head/helmet/space/syndicate/black/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uVV" = ( +/obj/machinery/vending/magivend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWa" = ( +/obj/item/ammo_magazine/makarov/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWg" = ( +/obj/item/weapon/implantcase/backup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWm" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/para, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWq" = ( +/obj/item/weapon/rig/light, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWr" = ( +/obj/structure/drop_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWx" = ( +/obj/item/clothing/suit/storage/hooded/knight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWI" = ( +/obj/machinery/door/airlock/maintenance, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWO" = ( +/obj/item/clothing/under/rank/engineer/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWV" = ( +/obj/item/clothing/ears/earring/dangle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uWY" = ( +/obj/item/weapon/circuitboard/mecha/durand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXc" = ( +/obj/item/clothing/shoes/boots/winter/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXe" = ( +/obj/item/paiparts/cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXh" = ( +/obj/item/clothing/suit/storage/hoodie/fluff/redax_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXs" = ( +/obj/item/clothing/head/helmet/space/void/merc/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXv" = ( +/obj/item/weapon/circuitboard/air_management, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXz" = ( +/obj/item/stack/tile/carpet/sblucarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXB" = ( +/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXD" = ( +/obj/item/dnalockingchip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXJ" = ( +/obj/item/clothing/under/yw/victsuit/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXM" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uXX" = ( +/obj/item/weapon/reagent_containers/glass/paint/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYc" = ( +/obj/item/ammo_magazine/m12gdrumjack/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYd" = ( +/obj/item/weapon/storage/bag/circuits/mini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYj" = ( +/obj/item/trash/ratcheese, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYl" = ( +/obj/item/ammo_magazine/m545/practice/ext, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYu" = ( +/obj/item/clothing/suit/storage/det_trench/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYD" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYI" = ( +/obj/item/weapon/flame/lighter/zippo/moff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYM" = ( +/obj/machinery/computer/security/telescreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYN" = ( +/obj/machinery/atmospherics/omni/atmos_filter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYT" = ( +/obj/item/device/ano_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYV" = ( +/obj/item/weapon/pen/blade/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uYY" = ( +/obj/item/clothing/suit/armor/fluff/madoka_chest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZh" = ( +/obj/structure/prop/poicanister, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZn" = ( +/obj/item/weapon/disk/limb/dsi_teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZs" = ( +/obj/item/clothing/under/dress/festivedress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZt" = ( +/obj/item/clothing/suit/storage/det_trench/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZz" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"uZO" = ( +/obj/item/toy/spinningtoy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vab" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/aformal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vad" = ( +/obj/item/weapon/melee/augment/blade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vae" = ( +/obj/item/weapon/circuitboard/holopad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vag" = ( +/obj/item/clothing/head/shiny_hood/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"val" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vap" = ( +/obj/item/ammo_casing/a762x25, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vaw" = ( +/obj/item/clothing/accessory/gaiter/gray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vaB" = ( +/obj/item/weapon/aiModule/reset, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vaK" = ( +/obj/item/weapon/circuitboard/prison_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vaN" = ( +/obj/item/clothing/shoes/cookflop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vaZ" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbc" = ( +/obj/item/weapon/reagent_containers/food/snacks/tastybread/sequel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbf" = ( +/mob/living/simple_mob/vore/alienanimals/skeleton/alt{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vbi" = ( +/obj/item/weapon/card/id/gateway/snowfield/class7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbo" = ( +/obj/item/integrated_circuit/logic/binary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbq" = ( +/obj/structure/closet/firecloset/full/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbr" = ( +/obj/structure/sign/atmos_n2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbt" = ( +/obj/machinery/door/airlock/angled_tgmc/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbu" = ( +/obj/item/ammo_magazine/m2024/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbw" = ( +/obj/item/clothing/head/beret/sec/navy/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbA" = ( +/obj/item/weapon/surgical/circular_saw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbE" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire/manned{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vbI" = ( +/obj/item/paiparts/board, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbK" = ( +/turf/simulated/fitness, +/area/survivalpod) +"vbL" = ( +/mob/living/simple_mob/animal/passive/cat/black, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vbW" = ( +/obj/item/clothing/under/det/fluff/octavious, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vbX" = ( +/obj/item/weapon/storage/mre/menu6, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vch" = ( +/obj/item/weapon/gun/energy/kinetic_accelerator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcm" = ( +/obj/effect/map_effect/perma_light/brighter{ + light_range = 9999 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcv" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcw" = ( +/obj/machinery/r_n_d/server, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcz" = ( +/obj/item/clothing/glasses/meson/aviator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcA" = ( +/mob/living/simple_mob/animal/sif/shantak{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vcG" = ( +/obj/item/clothing/accessory/medal/solgov/heart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcH" = ( +/obj/machinery/radiocarbon_spectrometer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcR" = ( +/obj/item/seeds/sporemycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcU" = ( +/obj/item/clothing/head/orangebandana, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcV" = ( +/obj/structure/prop/machine/tube/starts_down, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vcW" = ( +/obj/item/weapon/surgical/scalpel/laser2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdk" = ( +/obj/structure/closet/crate/secure/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdt" = ( +/mob/living/simple_mob/animal/passive/bird/european_robin, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vdD" = ( +/obj/item/weapon/cell/apc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdG" = ( +/obj/item/clothing/under/skirt/colorable/pencil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdM" = ( +/obj/item/clothing/accessory/jacket/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdR" = ( +/obj/item/clothing/suit/storage/hooded/toggle/colorable/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vdU" = ( +/obj/item/clothing/under/rank/trek/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vec" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ved" = ( +/obj/item/clothing/ears/earring/stud/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veg" = ( +/obj/structure/prop/war/tgmc_laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veh" = ( +/obj/structure/sign/levels/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vej" = ( +/obj/item/clothing/under/rank/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vek" = ( +/obj/structure/ore_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veo" = ( +/obj/item/weapon/plantspray/pests, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ver" = ( +/obj/structure/easel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vew" = ( +/obj/item/weapon/storage/box/glasses/cocktail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veC" = ( +/obj/item/weapon/storage/mrebag/menu4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veF" = ( +/obj/machinery/door/airlock/angled_bay/double/glass/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veM" = ( +/obj/item/weapon/reagent_containers/glass/bottle/unsorbitol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veP" = ( +/obj/item/toy/figure/rooster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veU" = ( +/obj/item/seeds/redtowermycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"veW" = ( +/obj/item/clothing/suit/storage/hooded/toggle/colorable/cropped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfg" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfq" = ( +/obj/item/weapon/storage/box/freezer/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfr" = ( +/obj/item/weapon/disk/nifsoft/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfs" = ( +/obj/machinery/door/airlock/alien/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfx" = ( +/obj/item/weapon/cartridge/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfO" = ( +/obj/item/weapon/cartridge/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfV" = ( +/obj/item/toy/plushie/face_hugger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vfY" = ( +/obj/item/clothing/accessory/jacket/altevian/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgl" = ( +/obj/item/weapon/storage/box/syndie_kit/deadliest_game, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgp" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/chief, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgr" = ( +/obj/structure/sign/directions/stairwell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgt" = ( +/obj/item/weapon/material/twohanded/fireaxe/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgD" = ( +/mob/living/simple_mob/animal/synx/ai/pet/greed/synth{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vgF" = ( +/obj/machinery/vending/entertainer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgG" = ( +/obj/item/weapon/card/id/gateway/snowfield/class5R, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgK" = ( +/obj/item/toy/figure/metacat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgO" = ( +/obj/mecha/combat/gorilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vgS" = ( +/obj/item/stack/flag/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhb" = ( +/obj/item/clothing/head/helmet/space/void/merc/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhc" = ( +/obj/item/weapon/storage/box/casino/costume_sexyclown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhg" = ( +/obj/structure/prop/blackbox/salamander_wreck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhy" = ( +/obj/item/organ/internal/heart/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhC" = ( +/obj/item/ammo_magazine/m9mmp90, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhE" = ( +/obj/item/weapon/storage/backpack/sport/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhF" = ( +/obj/item/clothing/head/beret/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhN" = ( +/obj/item/weapon/tank/phoron/onetankbomb/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhO" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/m16a2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhR" = ( +/obj/item/clothing/head/helmet/space/void/exploration/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhS" = ( +/obj/item/organ/internal/mmi_holder/posibrain/nano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhV" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "4" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vhZ" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vid" = ( +/obj/item/clothing/under/pants/mustangjeans/ripped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vig" = ( +/obj/item/clothing/suit/armor/pcarrier/blue/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vik" = ( +/obj/item/weapon/surgical/FixOVein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vip" = ( +/obj/structure/largecrate/hoverpod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viq" = ( +/obj/structure/sign/sec1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viw" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeykabob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viy" = ( +/obj/item/weapon/circuitboard/comm_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viG" = ( +/obj/item/ammo_magazine/m45/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viO" = ( +/obj/item/clothing/gloves/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viP" = ( +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viT" = ( +/obj/structure/salvageable/machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"viZ" = ( +/obj/item/stack/tile/floor/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjb" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/shot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjc" = ( +/obj/item/clothing/shoes/leg_guard/bulletproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjd" = ( +/obj/item/clothing/head/pumpkinhead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjg" = ( +/obj/item/clothing/gloves/gauntlets/rig/focalpoint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vji" = ( +/obj/item/weapon/rig/hazmat/fluff/sheri, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjj" = ( +/obj/item/clothing/head/hardhat/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjt" = ( +/obj/item/weapon/tracker_electronics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjv" = ( +/obj/item/weapon/book/codex/lore/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjB" = ( +/mob/living/simple_mob/mechanical/mecha/combat/phazon{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vjE" = ( +/obj/item/modular_computer/console, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjN" = ( +/obj/item/device/defib_kit/jumper_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjO" = ( +/obj/item/weapon/flame/candle/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjP" = ( +/obj/item/seeds/chiliseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjR" = ( +/obj/item/clothing/under/solgov/utility/fleet/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjU" = ( +/obj/item/integrated_circuit/trig/cotangent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vjZ" = ( +/obj/item/clothing/gloves/ring/material/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vka" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkg" = ( +/obj/item/weapon/material/harpoon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vki" = ( +/obj/item/clothing/under/fluff/shel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkw" = ( +/obj/item/clothing/glasses/artist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkA" = ( +/obj/structure/closet/secure_closet/personal/patient, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkK" = ( +/obj/structure/portal_event/resize/preset_shrink_hundred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkS" = ( +/obj/item/weapon/implantcase/armblade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkV" = ( +/obj/item/weapon/fossil/bone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkW" = ( +/obj/item/integrated_circuit/output/led, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkX" = ( +/obj/machinery/computer/shutoff_monitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vkY" = ( +/obj/item/weapon/reagent_containers/food/snacks/burger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vle" = ( +/mob/living/simple_mob/humanoid/cultist/initiate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vll" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "27" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vlr" = ( +/obj/item/ammo_magazine/clip/c45, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vlu" = ( +/obj/item/weapon/storage/box/fluff/quanah, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vlz" = ( +/obj/item/clothing/under/rank/medical/turtleneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vlE" = ( +/obj/item/weapon/stock_parts/scanning_module/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vma" = ( +/obj/item/weapon/storage/vore_egg/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vml" = ( +/obj/item/surplus_voucher/com, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmo" = ( +/obj/item/clothing/suit/space/void/responseteam/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vms" = ( +/obj/item/weapon/storage/vore_egg/special, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmu" = ( +/obj/item/clothing/head/halo/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmE" = ( +/obj/item/weapon/book/custom_library/religious/sungoddessofkorea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmG" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmN" = ( +/obj/item/weapon/gun/energy/medigun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vmX" = ( +/obj/item/clothing/head/caphat/hop/beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vne" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vni" = ( +/obj/item/weapon/card/id/civilian/journalist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnl" = ( +/obj/item/clothing/head/helmet/combat/crusader_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnu" = ( +/obj/item/slimepotion/unity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnv" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/space_up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnC" = ( +/obj/item/clothing/under/undersuit/explo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnD" = ( +/obj/item/clothing/head/fluff/wolfgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnH" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh/jelly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnI" = ( +/obj/item/weapon/implanter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnJ" = ( +/obj/item/clothing/under/swimsuit/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnK" = ( +/obj/item/weapon/storage/box/backup_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnL" = ( +/obj/item/clothing/shoes/boots/cowboy/classic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnM" = ( +/obj/item/ammo_magazine/clip/c45/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnN" = ( +/obj/machinery/power/thermoregulator/southerncross, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnR" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnS" = ( +/obj/item/clothing/shoes/boots/fluff/siren, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnT" = ( +/obj/item/organ/internal/regennetwork/oxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnU" = ( +/obj/item/ammo_casing/microbattery/combat/final, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vnZ" = ( +/obj/item/weapon/circuitboard/jukebox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vob" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voh" = ( +/obj/item/clothing/head/helmet/flexitac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vos" = ( +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voA" = ( +/obj/machinery/clonepod/transhuman, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voB" = ( +/obj/item/clothing/head/collectable/flatcap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voE" = ( +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voF" = ( +/mob/living/simple_mob/animal/passive/fish/koi, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"voM" = ( +/obj/item/weapon/circuitboard/processor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"voT" = ( +/obj/item/clothing/head/justice/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpd" = ( +/obj/structure/closet/secure_closet/animal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpg" = ( +/obj/item/weapon/storage/box/monkeycubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpi" = ( +/obj/structure/sign/level/basement, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpq" = ( +/obj/item/clothing/accessory/poncho/thermal/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vps" = ( +/mob/living/simple_mob/animal/giant_spider/carrier/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vpw" = ( +/obj/item/weapon/storage/vore_egg/floppy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpy" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "30" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpz" = ( +/obj/item/clothing/accessory/armband/hydro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpF" = ( +/obj/item/clothing/mask/gas/sexymime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpI" = ( +/obj/item/weapon/spell/aura, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpQ" = ( +/mob/living/simple_mob/vox/armalis, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vpW" = ( +/obj/item/weapon/cell/device/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vpY" = ( +/obj/item/weapon/circuitboard/clonepod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqn" = ( +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vqr" = ( +/mob/living/simple_mob/vore/pakkun{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vqs" = ( +/obj/item/weapon/storage/box/fluff/raja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqz" = ( +/obj/item/ammo_magazine/ammo_box/b12g/beanbag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqD" = ( +/obj/item/weapon/reagent_containers/food/snacks/bearmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqS" = ( +/obj/item/weapon/card/id/silver/secretary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqU" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vqV" = ( +/obj/item/ammo_magazine/cell_mag/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vqW" = ( +/obj/item/clothing/under/away/daedalus/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrb" = ( +/obj/item/weapon/commcard/head/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vri" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrn" = ( +/obj/item/weapon/material/butterflyhandle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrq" = ( +/obj/item/clothing/under/color/fjumpsuit/redf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrs" = ( +/obj/item/clothing/accessory/tropical/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrG" = ( +/mob/living/simple_mob/animal/passive/cockroach{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vrJ" = ( +/obj/item/clothing/accessory/armor/helmcover/saare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrM" = ( +/obj/item/weapon/grenade/anti_photon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrV" = ( +/obj/item/weapon/storage/fancy/crackers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vrW" = ( +/obj/item/weapon/pen/crayon/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsb" = ( +/obj/item/weapon/handcuffs/cable/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsh" = ( +/obj/item/flag/nt/l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vso" = ( +/obj/item/clothing/head/santa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsB" = ( +/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsC" = ( +/obj/item/weapon/tool/wrench/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsD" = ( +/obj/item/clothing/suit/storage/toggle/hoodie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsH" = ( +/obj/item/integrated_circuit/converter/text2num, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsM" = ( +/obj/structure/casino_table/roulette_table, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsN" = ( +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vsY" = ( +/obj/item/weapon/storage/box/holobadge/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vte" = ( +/obj/item/slime_extract/metal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vti" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/ranged{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vtp" = ( +/obj/item/clothing/under/color/fjumpsuit/purplef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vtw" = ( +/obj/item/weapon/tank/jetpack/carbondioxide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vtA" = ( +/obj/item/weapon/circuitboard/unary_atmos/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vtR" = ( +/obj/machinery/hyperpad{ + dir = 9 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vtS" = ( +/obj/machinery/porta_turret/poi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vtY" = ( +/obj/structure/bed/chair/bay/comfy/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuh" = ( +/obj/item/weapon/disk/nifsoft/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vup" = ( +/obj/item/weapon/reagent_containers/food/snacks/browniesslice/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vur" = ( +/obj/item/clothing/gloves/ranger/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuu" = ( +/obj/item/seeds/lavenderseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuv" = ( +/obj/item/weapon/pen/crayon/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vux" = ( +/obj/item/clothing/accessory/tie/red_long, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuC" = ( +/obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuE" = ( +/obj/structure/largecrate/animal/teppi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuI" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuJ" = ( +/obj/item/clothing/suit/storage/solgov/dress/sifguard/senior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuK" = ( +/obj/machinery/drone_fabricator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuN" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/sr25c, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuO" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellyfishcore, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuQ" = ( +/obj/item/weapon/book/manual/wizzoffguide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vuY" = ( +/obj/structure/largecrate/birds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vva" = ( +/obj/item/device/xenoarch_multi_tool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvh" = ( +/obj/item/weedkiller/triclopyr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvA" = ( +/obj/item/weapon/storage/box/donkpockets/berry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvH" = ( +/obj/item/seeds/watermelonseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvI" = ( +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvL" = ( +/obj/item/weapon/surgical/scalpel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vvS" = ( +/obj/item/ammo_magazine/mfoam_dart/pistol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwa" = ( +/obj/item/clothing/under/hosformalmale, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwb" = ( +/obj/item/device/personal_shield_generator/security/strong, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwd" = ( +/obj/item/seeds/ambrosiagaiaseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwf" = ( +/obj/item/ammo_magazine/m44/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwg" = ( +/obj/item/weapon/grenade/flashbang/clusterbang, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwj" = ( +/obj/structure/largecrate/animal/otie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwm" = ( +/obj/item/flag/almach_p, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwo" = ( +/obj/item/clothing/accessory/chaps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwq" = ( +/obj/item/weapon/melee/baton/slime/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vws" = ( +/obj/item/clothing/under/rank/medical/scrubs/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwy" = ( +/obj/item/clothing/suit/storage/fluff/eviriik_3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwC" = ( +/obj/structure/grille/bay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwL" = ( +/mob/living/simple_mob/animal/sif/frostfly{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vwN" = ( +/mob/living/simple_mob/humanoid/merc/ranged/garand{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vwR" = ( +/obj/item/clothing/head/chameleon/changeling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vwY" = ( +/obj/item/clothing/head/hood/winter/centcom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxa" = ( +/obj/item/weapon/tank/oxygen/onetankbomb/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxc" = ( +/obj/machinery/door/blast/regular, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxd" = ( +/obj/machinery/vending/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxf" = ( +/obj/item/weapon/gun/projectile/automatic/cballistic/mp5a5, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxp" = ( +/obj/structure/sign/levels/ai_core, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxt" = ( +/obj/item/weapon/reagent_containers/food/snacks/bellefritter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxw" = ( +/obj/item/flag/almach_a, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vxN" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/horseburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyd" = ( +/mob/living/simple_mob/animal/passive/cow{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vyf" = ( +/obj/item/weapon/implantcase/dart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyi" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/viro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyj" = ( +/obj/machinery/chemical_dispenser/deluxe/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyo" = ( +/obj/item/device/survivalcapsule/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyw" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyx" = ( +/obj/item/weapon/reagent_containers/food/snacks/suppermattershard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyC" = ( +/obj/item/clothing/gloves/ranger/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyF" = ( +/obj/item/clothing/suit/storage/toggle/bomber/bombersec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyI" = ( +/obj/item/device/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyM" = ( +/obj/item/device/electronic_assembly/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyN" = ( +/obj/item/clothing/accessory/scarf/altevian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyO" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vyQ" = ( +/obj/item/clothing/under/lawyer/blue/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzb" = ( +/obj/item/weapon/cartridge/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzk" = ( +/obj/machinery/hyperpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzH" = ( +/obj/item/clothing/suit/storage/apron/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzL" = ( +/obj/item/weapon/pinpointer/shuttle/heist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzM" = ( +/obj/item/weapon/storage/box/fluff/swimsuit/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzU" = ( +/obj/item/weapon/storage/backpack/satchel/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vzZ" = ( +/obj/item/instrument/saxophone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAj" = ( +/obj/item/projectile/beam/precursor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAA" = ( +/obj/item/clothing/head/tesh_hood/standard/black_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAC" = ( +/obj/item/weapon/cell/crap/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAD" = ( +/obj/item/clothing/suit/storage/hazardvest/fluff/verin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAE" = ( +/obj/item/clothing/shoes/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vAX" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBb" = ( +/obj/item/clothing/suit/neocoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBj" = ( +/obj/item/trash/mars, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBk" = ( +/obj/structure/sign/department/atmos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBm" = ( +/obj/item/clothing/shoes/hitops/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBp" = ( +/obj/item/weapon/reagent_containers/food/drinks/sillycup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBq" = ( +/obj/structure/closet/secure_closet/captains, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBt" = ( +/obj/structure/sign/double/barsign, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBz" = ( +/obj/machinery/light_switch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBF" = ( +/obj/item/clothing/under/fluff/eliana_noya_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBM" = ( +/obj/structure/curtain/open/privacy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBS" = ( +/obj/structure/noticeboard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBU" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vBZ" = ( +/mob/living/simple_mob/animal/giant_spider/pepper/broodling{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vCs" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/soymilk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCx" = ( +/obj/structure/prop/alien/computer/camera/flipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCD" = ( +/obj/structure/closet/crate/mimic/closet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCF" = ( +/obj/item/weapon/reagent_containers/food/snacks/croissant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCI" = ( +/obj/structure/prop/machine/tgmc_console1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCL" = ( +/obj/item/weapon/circuitboard/microwave/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCQ" = ( +/obj/item/clothing/mask/luchador, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vCW" = ( +/obj/item/weapon/technomancer_core/rapid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDf" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/combat/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDi" = ( +/obj/item/clothing/under/swimsuit/cowbikini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDj" = ( +/obj/item/clothing/head/utility/army/urban, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDm" = ( +/obj/item/clothing/head/helmet/space/void/engineering/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDp" = ( +/obj/item/weapon/reagent_containers/food/snacks/sauerkraut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDs" = ( +/obj/machinery/door/airlock/angled_bay/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDC" = ( +/obj/item/weapon/implantcase/explosive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDD" = ( +/obj/item/weapon/disk/data, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDI" = ( +/obj/structure/ship_munition/disperser_charge/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDT" = ( +/obj/item/clothing/ears/earring/stud/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDV" = ( +/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/b, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vDY" = ( +/obj/item/clothing/under/qipao/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEe" = ( +/obj/item/mecha_parts/mecha_equipment/tool/passenger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEh" = ( +/obj/item/toy/plushie/borgplushie/drake/trauma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEi" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEp" = ( +/obj/structure/closet/crate/xion, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEu" = ( +/obj/item/clothing/head/beret/solgov/fleet/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEv" = ( +/obj/item/weapon/reagent_containers/food/snacks/zestfish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEz" = ( +/obj/item/clothing/head/blackngoldheaddress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEG" = ( +/obj/machinery/door/airlock/angled_tgmc/prep/prep_alpha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEN" = ( +/obj/item/clothing/under/pants/chaps/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vEX" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFb" = ( +/obj/item/clothing/under/fluff/sakura_hokkaido_kimono, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFd" = ( +/obj/item/weapon/sword/fluff/revolver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFg" = ( +/obj/structure/barricade/cutout/fluke, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFh" = ( +/obj/machinery/vending/fooddessert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFp" = ( +/obj/machinery/disposal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFq" = ( +/obj/item/weapon/material/whip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFt" = ( +/obj/item/ammo_casing/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFz" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFD" = ( +/obj/machinery/crystal/lava, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFK" = ( +/obj/structure/sign/warning/bomb_range, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFO" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFU" = ( +/obj/item/clothing/under/pants/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vFY" = ( +/obj/item/trash/small_bowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGa" = ( +/obj/item/clothing/head/beret/corp/hedberg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGg" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGl" = ( +/obj/item/weapon/storage/backpack/cultpack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGs" = ( +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGA" = ( +/obj/item/weapon/gun/projectile/shotgun/compact/warden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGG" = ( +/obj/item/clothing/under/solgov/utility/fleet/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGO" = ( +/obj/item/clothing/under/sexymime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGQ" = ( +/obj/item/clothing/mask/gas/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGR" = ( +/obj/item/clothing/under/lawyer/purpsuit/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGS" = ( +/obj/item/slimepotion/shrink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGX" = ( +/obj/structure/bed/chair/oldsofa/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vGY" = ( +/obj/structure/reagent_dispensers/cookingoil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHh" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/slug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHk" = ( +/obj/item/clothing/accessory/sweater/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHn" = ( +/obj/item/seeds/ambrosiavulgarisseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHq" = ( +/obj/item/weapon/reagent_containers/pill/bicaridine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHy" = ( +/obj/item/seeds/ghostchiliseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHA" = ( +/obj/vehicle/train/engine/quadbike/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHF" = ( +/obj/item/weapon/storage/box/donkpockets/honk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHM" = ( +/obj/item/device/modkit_conversion/fluff/harmonysuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHN" = ( +/obj/structure/closet/crate/oldreactor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHP" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/kebab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHS" = ( +/obj/item/ammo_casing/microbattery/combat/stun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vHY" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIh" = ( +/obj/item/clothing/under/rank/cargo/jeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIp" = ( +/obj/item/weapon/computer_hardware/hard_drive/super, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIr" = ( +/obj/item/weapon/storage/belt/fannypack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIv" = ( +/obj/item/ammo_magazine/m45uzi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIz" = ( +/obj/item/weapon/flame/lighter/zippo/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIC" = ( +/obj/machinery/door/airlock/alien/blue/locked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIF" = ( +/obj/item/ammo_magazine/m762svd/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIH" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIN" = ( +/obj/item/ammo_magazine/m545/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIP" = ( +/obj/item/weapon/storage/belt/utility/holding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIR" = ( +/obj/machinery/auto_cloner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIS" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_mountain_wind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIX" = ( +/obj/machinery/power/am_control_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vIY" = ( +/obj/structure/sign/directions, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJa" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceacillin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJg" = ( +/obj/item/seeds/plastiseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJk" = ( +/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vJo" = ( +/obj/item/clothing/ears/skrell/band, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJA" = ( +/obj/item/clothing/ears/earring/stud/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJB" = ( +/obj/mecha/combat/phazon/scree, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJL" = ( +/obj/item/weapon/vehicle_assembly/quadbike, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJO" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb09, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vJR" = ( +/obj/structure/closet/walllocker_double/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKg" = ( +/obj/item/organ/internal/liver/replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKo" = ( +/obj/structure/showcase/yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKq" = ( +/obj/item/clothing/accessory/armor/armorplate/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKx" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKJ" = ( +/obj/item/weapon/dnainjector/antihulk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKK" = ( +/obj/item/clothing/under/rank/pilot1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKM" = ( +/obj/vehicle/train/trolley/trailer/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKN" = ( +/obj/item/clothing/head/tesh_hood/standard/black_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKS" = ( +/obj/item/clothing/under/dress/sundress_pinkbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKT" = ( +/obj/item/stack/tile/carpet/purcarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKV" = ( +/obj/item/weapon/spell/passwall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vKY" = ( +/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLb" = ( +/obj/item/weapon/storage/pouch/flares/full_flare, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLc" = ( +/obj/item/weapon/reagent_containers/food/snacks/browniesslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLg" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLl" = ( +/obj/item/organ/internal/augment/armmounted/shoulder/multiple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLt" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/protein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLx" = ( +/obj/item/clothing/gloves/gauntlets/rig/ch/clockwork, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLy" = ( +/obj/item/clothing/suit/suspenders/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLF" = ( +/obj/item/clothing/under/suit_jacket/charcoal/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLK" = ( +/obj/structure/simple_door/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLN" = ( +/obj/vehicle/boat/dragon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLP" = ( +/obj/item/weapon/material/twohanded/baseballbat/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vLV" = ( +/obj/item/toy/figure/barking_dog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMj" = ( +/obj/item/weapon/card/id/event/accessset/itg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMm" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMs" = ( +/obj/item/clothing/under/skirt/outfit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMw" = ( +/obj/machinery/botany/editor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMA" = ( +/obj/item/weapon/storage/lockbox/loyalty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMC" = ( +/obj/item/weapon/material/butterfly/saw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMI" = ( +/obj/structure/closet/thunderdome/tdred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMP" = ( +/obj/structure/closet/emergsuit_wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vMZ" = ( +/obj/item/weapon/storage/box/fluff/melissa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNl" = ( +/obj/item/weapon/reagent_containers/food/snacks/frostbelle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNm" = ( +/obj/item/weapon/pickaxe/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNs" = ( +/obj/structure/closet/crate/large/secure/heph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNz" = ( +/obj/item/weapon/storage/backpack/satchel/norm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNB" = ( +/obj/structure/bed/roller, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vND" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNG" = ( +/obj/item/weapon/reagent_containers/pill/adminordrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNP" = ( +/obj/item/clothing/under/swimsuit/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNS" = ( +/obj/item/clothing/shoes/hitops/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vNY" = ( +/obj/item/clothing/under/solgov/utility/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOc" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOd" = ( +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOe" = ( +/obj/item/weapon/pickaxe/two_pick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOh" = ( +/obj/item/clothing/under/solgov/mildress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOj" = ( +/obj/machinery/door/blast/regular/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOm" = ( +/obj/structure/prop/dominator/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOv" = ( +/obj/machinery/porta_turret/stationary/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOx" = ( +/obj/item/clothing/glasses/omnihud/rnd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOE" = ( +/obj/item/weapon/melee/energy/sword/ionic_rapier, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOG" = ( +/obj/item/weapon/storage/backpack/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOH" = ( +/obj/item/weapon/implant/reagent_generator/jasmine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOI" = ( +/obj/item/clothing/suit/security/navywarden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOQ" = ( +/obj/item/clothing/suit/storage/toggle/bomber/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vOT" = ( +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPc" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/water, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPg" = ( +/obj/item/clothing/suit/space/santa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPk" = ( +/obj/item/ammo_casing/a545/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPo" = ( +/obj/item/clothing/accessory/gaiter/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPw" = ( +/obj/machinery/disease2/isolator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPJ" = ( +/obj/structure/closet/crate/freezer/zenghu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPT" = ( +/obj/item/clothing/head/sunflower_crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPU" = ( +/obj/item/weapon/gun/energy/crossbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vPZ" = ( +/obj/item/trash/ratveg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQa" = ( +/obj/machinery/portable_atmospherics/powered/reagent_distillery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQg" = ( +/obj/item/trash/ratpackturkey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQq" = ( +/obj/item/seeds/wurmwoad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQv" = ( +/obj/item/clothing/accessory/armor/legguards/navy/fluff/saur_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQw" = ( +/obj/item/clothing/accessory/fluff/quanah_collar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQG" = ( +/obj/item/seeds/mtearseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQH" = ( +/obj/item/integrated_circuit/output/screen/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQJ" = ( +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQK" = ( +/obj/item/clothing/head/fluff/hairflowerpin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQP" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/peridaxon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vQT" = ( +/obj/item/clothing/gloves/gauntlets/rig/fluff/saur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRb" = ( +/obj/item/clothing/suit/space/void/refurb/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRv" = ( +/mob/living/simple_mob/animal/space/bear{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vRw" = ( +/obj/item/ammo_magazine/m12gdrum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRz" = ( +/obj/item/clothing/accessory/medal/gold/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRJ" = ( +/obj/item/weapon/autopsy_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRK" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/dropship1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRO" = ( +/obj/item/integrated_circuit/arithmetic/average, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRP" = ( +/obj/item/organ/internal/eyes/robot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRU" = ( +/obj/item/clothing/suit/storage/hooded/knight/galahad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRW" = ( +/obj/item/weapon/paper/dockingcodes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vRZ" = ( +/obj/item/clothing/accessory/gaiter/snow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSa" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSh" = ( +/obj/item/weapon/gun/energy/pulse_rifle/compact, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSi" = ( +/obj/structure/sign/directions/shuttle_bay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSo" = ( +/obj/structure/closet/crate/mimic/safe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSp" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSq" = ( +/obj/structure/alien/membrane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSs" = ( +/obj/item/organ/internal/liver/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSt" = ( +/obj/item/clothing/suit/syndicatefake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSD" = ( +/obj/item/clothing/suit/storage/miljacket/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSF" = ( +/obj/item/weapon/circuitboard/shield_cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSH" = ( +/obj/item/clothing/suit/storage/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSJ" = ( +/obj/item/clothing/shoes/combat/wolfbrigade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSK" = ( +/obj/item/clothing/suit/armor/pcarrier/laserproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSL" = ( +/obj/item/clothing/under/cuttop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSM" = ( +/obj/item/clothing/under/solgov/utility/army/desert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vSY" = ( +/obj/item/clothing/suit/dress/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTa" = ( +/obj/item/device/camera_bug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTc" = ( +/obj/item/weapon/rig/zero/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTe" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTu" = ( +/obj/item/ammo_magazine/m762enbloc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTy" = ( +/obj/item/clothing/accessory/scarf/altevian/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTA" = ( +/obj/item/clothing/head/helmet/space/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTH" = ( +/obj/item/weapon/storage/box/glasses/meta/metapint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTI" = ( +/obj/item/clothing/gloves/ring/material/tin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTJ" = ( +/obj/item/clothing/head/cone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vTV" = ( +/obj/machinery/telecomms/relay, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUa" = ( +/obj/item/device/cataloguer/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUd" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUm" = ( +/obj/item/weapon/flame/candle/everburn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUn" = ( +/obj/item/clothing/accessory/fluff/eviriik_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUp" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/common, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUv" = ( +/obj/item/weapon/storage/backpack/messenger/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUA" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/armadillo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUB" = ( +/obj/item/clothing/head/hood/robin_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUH" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUJ" = ( +/obj/item/trash/tuna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUK" = ( +/obj/item/weapon/circuitboard/mecha/phazon/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUM" = ( +/obj/machinery/power/rad_collector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUP" = ( +/obj/item/clothing/head/pilot_vr/mbill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vUV" = ( +/mob/living/simple_mob/otie/cotie{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vUY" = ( +/mob/living/simple_mob/vore/aggressive/dragon/virgo3b{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vVa" = ( +/obj/item/stack/tile/carpet/blucarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVf" = ( +/mob/living/simple_mob/animal/passive/penguin{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"vVm" = ( +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVn" = ( +/obj/item/extraction_pack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVq" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVr" = ( +/obj/item/rig_module/atmos_shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVs" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVu" = ( +/obj/item/weapon/reagent_containers/food/snacks/bucheslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVv" = ( +/obj/item/clothing/glasses/hud/health/tajblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVA" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVB" = ( +/obj/item/toy/plushie/carp/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVC" = ( +/obj/item/weapon/storage/box/syndie_kit/combat_armor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVD" = ( +/obj/item/clothing/under/undersuit/sec/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVI" = ( +/obj/item/clothing/head/cowboy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVK" = ( +/obj/structure/prop/machine/nt_cruciforge/starts_working, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVT" = ( +/obj/item/clothing/head/helmet/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vVV" = ( +/obj/item/weapon/storage/belt/medical/emt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWa" = ( +/obj/item/ammo_casing/a357, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWh" = ( +/obj/item/clothing/under/cyberpunkharness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWi" = ( +/obj/item/weapon/deck/cah/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWj" = ( +/obj/structure/prop/war/tgmc_missile_rack/single, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWq" = ( +/obj/machinery/hologram/projector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWs" = ( +/obj/item/mecha_parts/mecha_equipment/tool/orescanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWt" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWv" = ( +/obj/item/clothing/suit/armor/crusader, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWy" = ( +/obj/item/ammo_magazine/clip/c762/hunter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWA" = ( +/obj/item/weapon/computer_hardware/processor_unit/photonic/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWE" = ( +/obj/item/clothing/glasses/hud/security/prescription, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWH" = ( +/obj/item/weapon/storage/box/wings/bucket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWJ" = ( +/obj/structure/door_assembly/door_assembly_fre, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWQ" = ( +/obj/structure/closet/l3closet/general, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWR" = ( +/obj/item/weapon/reagent_containers/food/snacks/eggbowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vWV" = ( +/obj/item/clothing/head/santa/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXa" = ( +/obj/item/weapon/gun/projectile/cell_loaded/combat/prototype, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXd" = ( +/obj/structure/sign/directions/bar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXg" = ( +/obj/item/clothing/under/solgov/pt/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXj" = ( +/obj/item/clothing/under/summerdress/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXm" = ( +/obj/item/stack/cable_coil/alien/blood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXo" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "22" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXt" = ( +/obj/item/ammo_magazine/tp23/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXw" = ( +/obj/item/weapon/storage/secure/briefcase/nerd_pack_med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXx" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXy" = ( +/obj/structure/atmospheric_retention_field, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXC" = ( +/obj/item/clothing/suit/wizrobe/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vXP" = ( +/obj/item/clothing/accessory/armband/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYa" = ( +/obj/item/flag/catpirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYd" = ( +/obj/item/stack/tile/floor/eris/steel/monofloor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYg" = ( +/obj/machinery/computer/curer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYx" = ( +/obj/structure/largecrate/animal/guardbeast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYB" = ( +/obj/structure/closet/crate/freezer/nanotrasen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYC" = ( +/obj/item/integrated_circuit/logic/unary, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYH" = ( +/obj/item/integrated_circuit/arithmetic/square_root, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYI" = ( +/obj/item/weapon/weldingtool/tubefed/survival, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYJ" = ( +/obj/machinery/door/window/holowindoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYK" = ( +/obj/item/clothing/under/lawyer/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYN" = ( +/obj/item/clothing/head/helmet/space/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYP" = ( +/obj/item/clothing/gloves/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYQ" = ( +/obj/item/device/electronic_assembly/simple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vYV" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZa" = ( +/obj/item/weapon/storage/mrebag/menu2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZl" = ( +/obj/item/weapon/card/id/centcom/station/fluff/joanbadge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZm" = ( +/obj/mecha/combat/phazon/janus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZD" = ( +/obj/item/mecha_parts/part/phazon_left_arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZJ" = ( +/obj/item/clothing/suit/space/void/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZL" = ( +/obj/item/ammo_casing/microbattery/combat/shotstun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZM" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZN" = ( +/obj/item/weapon/bedsheet/pirate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"vZR" = ( +/obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wac" = ( +/obj/item/ammo_magazine/m16/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wad" = ( +/obj/item/weapon/flame/lighter/zippo/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wak" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/chaitea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wan" = ( +/obj/item/clothing/under/color/aqua, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"war" = ( +/obj/item/clothing/under/swimsuit/fluff/zara_uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"was" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wav" = ( +/obj/item/clothing/glasses/hud/security/eyepatch2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wax" = ( +/obj/structure/table/reinforced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"waL" = ( +/obj/item/clothing/accessory/antediluvian/loincloth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"waQ" = ( +/obj/item/ammo_magazine/ammo_box/b12g/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"waV" = ( +/obj/machinery/vending/wallmed2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbd" = ( +/obj/item/clothing/head/helmet/combat/imperial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbh" = ( +/obj/item/weapon/toy/snowglobe/tether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbi" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/medical{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbk" = ( +/obj/machinery/atmospheric_field_generator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbx" = ( +/obj/item/weapon/tank/phoron/onetankbomb/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbE" = ( +/obj/item/weapon/handcuffs/cable/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbI" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbL" = ( +/mob/living/simple_mob/vore/alienanimals/spooky_ghost{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wbQ" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbR" = ( +/obj/item/seeds/riceseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wbU" = ( +/obj/item/integrated_circuit/power/transmitter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wch" = ( +/obj/item/weapon/gun/energy/particle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wck" = ( +/obj/machinery/vr_sleeper/alien/beta_replicant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcm" = ( +/obj/item/device/flashlight/color/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcw" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/melonliquor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcD" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcL" = ( +/obj/item/weapon/tank/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcW" = ( +/obj/structure/sign/periodic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wcZ" = ( +/obj/item/weapon/storage/pill_bottle/corophizine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wda" = ( +/obj/item/clothing/under/shiny/leotard/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdb" = ( +/obj/item/seeds/killertomatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdm" = ( +/obj/item/clothing/shoes/flipflop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdn" = ( +/mob/living/simple_mob/shadekin/red/rakshasa{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wdu" = ( +/mob/living/simple_mob/vore/aggressive/dino{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wdx" = ( +/obj/item/clothing/suit/storage/trench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdy" = ( +/obj/item/clothing/head/beret/solgov/fleet/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdA" = ( +/obj/structure/ghost_pod/ghost_activated/swarm_drone/event/gunner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdI" = ( +/obj/item/weapon/refill_cartridge/autoname/drink/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdN" = ( +/obj/item/weapon/book/manual/supermatter_engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdR" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wdY" = ( +/obj/item/weapon/storage/bag/circuits/mini/input, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wea" = ( +/obj/structure/loot_pile/mecha/ripley/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wed" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/keltec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wee" = ( +/obj/item/device/tankassemblyproxy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wef" = ( +/obj/item/clothing/under/fluff/wolfgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"weh" = ( +/obj/item/weapon/circuitboard/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wej" = ( +/obj/structure/extinguisher_cabinet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wep" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/kelotane, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wer" = ( +/obj/machinery/disperser/front{ + dir = 4 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"weF" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"weS" = ( +/obj/item/ammo_magazine/ammo_box/b10mm/emp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfa" = ( +/obj/structure/closet/secure_closet/injection, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wff" = ( +/obj/item/clothing/head/helmet/space/syndicate/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfh" = ( +/obj/item/projectile/beam/burstlaser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfp" = ( +/obj/item/clothing/under/lawyer/purpsuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfC" = ( +/obj/item/ammo_casing/a145, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfE" = ( +/obj/structure/loot_pile/mecha/marauder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wfJ" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgp" = ( +/obj/item/clothing/under/serviceoveralls, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgu" = ( +/obj/item/weapon/dnainjector/antiblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgx" = ( +/obj/item/clothing/suit/storage/toggle/sci_dep_jacket, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgz" = ( +/obj/item/weapon/pack/cardemon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgA" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgF" = ( +/obj/item/toy/figure/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgI" = ( +/obj/item/clothing/accessory/collar/fluff/goldenstring, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgO" = ( +/obj/item/clothing/shoes/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wgR" = ( +/obj/item/clothing/head/wizard/amp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whd" = ( +/mob/living/simple_mob/animal/passive/tindalos{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"whe" = ( +/obj/item/clothing/head/helmet/space/void/excelsior, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whm" = ( +/obj/machinery/vending/foodmeat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whn" = ( +/obj/item/clothing/shoes/leg_guard/flexitac, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whq" = ( +/obj/structure/closet/syndicate/nuclear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whs" = ( +/obj/item/clothing/under/away/daedalus/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whw" = ( +/obj/item/weapon/spell/reflect, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whK" = ( +/obj/item/weapon/toy/desk/newtoncradle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"whQ" = ( +/obj/machinery/fitness/punching_bag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wib" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wic" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wii" = ( +/obj/item/projectile/beam/heavylaser/cannon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiq" = ( +/obj/structure/prop/rock/water, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiF" = ( +/obj/item/device/reagent_scanner/adv, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiL" = ( +/obj/item/toy/plushie/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiM" = ( +/obj/structure/closet/crate/mimic/closet/cointoss, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiP" = ( +/obj/item/weapon/circuitboard/recharger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiT" = ( +/obj/item/weapon/tool/screwdriver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wiW" = ( +/obj/item/ammo_magazine/ammo_box/b12g/flash, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjl" = ( +/obj/item/clothing/suit/cultrobes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjp" = ( +/obj/structure/closet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjB" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjE" = ( +/mob/living/simple_mob/animal/passive/mouse{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wjH" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjM" = ( +/obj/item/clothing/accessory/poncho/thermal/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjT" = ( +/obj/structure/prop/esoteric/eotp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wjW" = ( +/obj/item/trash/dipbowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkj" = ( +/obj/structure/door_assembly/door_assembly_voidcraft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkp" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wks" = ( +/obj/item/clothing/suit/varsity/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkG" = ( +/obj/item/clothing/under/teshari/smock/dress/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkJ" = ( +/obj/item/ammo_magazine/tp23/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkN" = ( +/obj/item/weapon/storage/backpack/sport/hyd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkQ" = ( +/obj/item/organ/internal/spleen/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wkT" = ( +/mob/living/simple_mob/animal/passive/mimepet{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wkX" = ( +/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/syndislug{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wla" = ( +/obj/item/clothing/gloves/gauntlets/rig/hazmat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlc" = ( +/obj/item/weapon/card/id/exploration/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wld" = ( +/obj/item/clothing/head/helmet/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wll" = ( +/obj/item/weapon/storage/bag/circuits/mini/manipulation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wln" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/meatshield{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wlu" = ( +/obj/item/device/modkit_conversion/fluff/jiao_anynlizer_kit/a, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wly" = ( +/obj/item/clothing/gloves/boxing/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlz" = ( +/obj/item/frame/lightswitch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlB" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/black_orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlG" = ( +/obj/item/weapon/storage/box/PDAs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlH" = ( +/obj/item/clothing/head/helmet/ert/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlK" = ( +/obj/machinery/atmospherics/binary/algae_farm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlM" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitepurple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlP" = ( +/obj/item/clothing/gloves/ring/wedding/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlS" = ( +/obj/item/organ/internal/augment/armmounted/hand/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlT" = ( +/obj/machinery/power/rtg/reg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlU" = ( +/obj/structure/sign/levels/security/forensics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wlZ" = ( +/obj/structure/bed/chair/sofa/corner/purp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmb" = ( +/obj/item/clothing/suit/storage/hooded/hoodie/purpletrim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmf" = ( +/obj/item/device/pda/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmh" = ( +/obj/item/weapon/reagent_containers/food/snacks/eggroll, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmi" = ( +/obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmm" = ( +/obj/item/integrated_circuit/passive/power/chemical_cell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmp" = ( +/obj/item/clothing/head/cowboy/rustler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wms" = ( +/obj/item/weapon/paper/card, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmu" = ( +/obj/item/ammo_casing/macrobattery/buff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmG" = ( +/obj/item/ammo_magazine/m41/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmM" = ( +/obj/item/clothing/mask/gas/sechailer/swat/hos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wmZ" = ( +/obj/item/weapon/circuitboard/arcade/orion_trail, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnb" = ( +/obj/structure/simple_door/flock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnc" = ( +/obj/item/ammo_casing/a762x39/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnk" = ( +/obj/item/weapon/lipstick/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnn" = ( +/obj/machinery/suspension_gen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnp" = ( +/obj/item/clothing/head/poppy_crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnu" = ( +/obj/item/clothing/under/pants/baggy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnx" = ( +/obj/item/clothing/under/solgov/utility/army/olive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnz" = ( +/obj/item/weapon/cartridge/lawyer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnD" = ( +/obj/item/clothing/under/shorts/cshorts/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnF" = ( +/obj/item/weapon/rig/pmc/commander/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnH" = ( +/obj/item/weapon/folder/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wnX" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wob" = ( +/obj/structure/sign/flag/almach_p/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wog" = ( +/obj/item/ammo_magazine/cell_mag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wor" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/milk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wou" = ( +/obj/item/seeds/replicapod, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wov" = ( +/obj/item/clothing/head/helmet/space/void/heck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"woD" = ( +/obj/structure/loot_pile/mecha/marauder/seraph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"woG" = ( +/obj/item/clothing/under/explorer/utility/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"woI" = ( +/obj/structure/closet/secure_closet/miner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"woU" = ( +/obj/item/weapon/reagent_containers/glass/bottle/healing_nanites, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"woY" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpd" = ( +/obj/item/device/detective_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpj" = ( +/obj/structure/barricade, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpk" = ( +/obj/item/device/integrated_electronics/wirer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpu" = ( +/obj/machinery/shield_diffuser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpv" = ( +/obj/item/weapon/storage/trinketbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpN" = ( +/obj/item/weapon/storage/fancy/egg_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpQ" = ( +/obj/structure/sign/securearea, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpS" = ( +/obj/item/stack/tile/floor/eris/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wpW" = ( +/obj/item/weapon/storage/box/syndie_kit/ewar_voice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqe" = ( +/obj/item/weapon/dice/d10, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqg" = ( +/obj/item/clothing/head/helmet/space/vox/carapace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqh" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/inaprovaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wql" = ( +/obj/item/clothing/suit/bio_suit/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqm" = ( +/obj/item/modular_computer/console/preset/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqq" = ( +/obj/item/capture_crystal/dustjumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqt" = ( +/obj/item/weapon/reagent_containers/glass/bottle/stoxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqy" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/metalglen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqB" = ( +/obj/structure/ghost_pod/manual/human, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqF" = ( +/obj/item/weapon/pen/fountain3, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqI" = ( +/obj/item/clothing/shoes/primitive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqM" = ( +/obj/item/weapon/disk/data/demo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqR" = ( +/obj/item/clothing/suit/storage/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wqX" = ( +/obj/item/weapon/storage/fancy/heartbox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrd" = ( +/obj/machinery/door/airlock/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wre" = ( +/obj/item/weapon/storage/belt/ranger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrl" = ( +/obj/vehicle/train/engine/quadbike/snowmobile/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrp" = ( +/obj/structure/prop/prism/incremental/externalcont, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrq" = ( +/obj/item/weapon/gun/projectile/revolver/cerberus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrr" = ( +/obj/item/weapon/secbot_assembly/ed209_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrs" = ( +/mob/living/simple_mob/vore/aggressive/rat{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wrD" = ( +/obj/structure/sign/scenery/overlay/vine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrE" = ( +/obj/item/clothing/head/pelt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrY" = ( +/obj/item/clothing/under/lawyer/bluesuit/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wrZ" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/dexalin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsa" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsf" = ( +/obj/item/weapon/thecake_layer/six, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsg" = ( +/obj/structure/largecrate/animal/catslug, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsh" = ( +/obj/item/clothing/gloves/vox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsj" = ( +/obj/item/seeds/rose/blood, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsl" = ( +/obj/item/clothing/head/soft/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsx" = ( +/obj/item/device/modkit_conversion/fluff/jessica_sec_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsF" = ( +/obj/structure/prop/dominator/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsG" = ( +/obj/item/mecha_parts/part/janus_right_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsJ" = ( +/obj/structure/sign/levels/security/internal_affairs, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsL" = ( +/obj/structure/sign/directions/medical/morgue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsR" = ( +/obj/machinery/fitness/punching_bag/clown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsV" = ( +/obj/structure/closet/secure_closet/RD, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsX" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsY" = ( +/obj/item/toy/sword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wsZ" = ( +/obj/structure/bed/chair/wood/wings, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wta" = ( +/obj/item/clothing/under/rank/nullsuit/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wte" = ( +/obj/item/weapon/dice/loaded/ceph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtf" = ( +/obj/item/weapon/spell/dispel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wth" = ( +/obj/item/clothing/head/helmet/ert/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtj" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtt" = ( +/obj/item/weapon/circuitboard/mecha, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtu" = ( +/obj/item/toy/plushie/teshari/y_yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtv" = ( +/obj/item/weapon/storage/box/monkeycubes/sarucubes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtx" = ( +/obj/item/ammo_magazine/ammo_box/cap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wty" = ( +/obj/item/weapon/circuitboard/dispersermiddle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtz" = ( +/obj/item/clothing/suit/dress/solgov/fleet/sailor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtA" = ( +/obj/item/weapon/card/id/medical/head, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtD" = ( +/obj/machinery/mass_driver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtN" = ( +/obj/item/clothing/under/explorer/utility/command/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wtQ" = ( +/obj/item/clothing/under/rank/talon/proper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wue" = ( +/obj/item/weapon/storage/box/syndie_kit/spy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuk" = ( +/obj/item/clothing/glasses/omnihud/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wus" = ( +/obj/structure/bed/chair/bay/comfy/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuu" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wux" = ( +/obj/item/toy/plushie/black_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuC" = ( +/obj/item/weapon/rig/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuD" = ( +/obj/item/clothing/head/tesh_hood/standard/black_lightgrey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuH" = ( +/obj/item/weapon/storage/box/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuQ" = ( +/obj/item/ammo_magazine/s44/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wuS" = ( +/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wve" = ( +/obj/machinery/portable_atmospherics/canister/empty/phoron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvn" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvt" = ( +/obj/item/device/survivalcapsule/superpose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvu" = ( +/obj/item/weapon/rcd/shipwright, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvv" = ( +/obj/item/clothing/gloves/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvy" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvD" = ( +/obj/item/clothing/mask/gas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvQ" = ( +/obj/vehicle/train/security/trolley, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wvW" = ( +/mob/living/simple_mob/mobs_monsters/clowns/punished{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wwc" = ( +/obj/machinery/pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwd" = ( +/obj/item/clothing/accessory/solgov/cultex_patch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwe" = ( +/obj/item/weapon/cartridge/storage/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwl" = ( +/obj/item/stack/tile/floor/eris/dark/danger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwr" = ( +/obj/item/ammo_casing/macrobattery, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwt" = ( +/obj/item/clothing/suit/storage/hooded/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwu" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/suppermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwy" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwB" = ( +/obj/item/clothing/under/rank/chef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wwL" = ( +/obj/item/clothing/under/solgov/service/sifguard/command/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxa" = ( +/obj/item/weapon/reagent_containers/food/drinks/teapot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxc" = ( +/obj/item/stack/tile/floor/eris/steel/brown_perforated, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxl" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/security/santa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxp" = ( +/obj/item/clothing/suit/cultrobes/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxy" = ( +/obj/structure/outcrop/lead, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxz" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxH" = ( +/obj/item/weapon/gun/energy/gun/taser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxK" = ( +/obj/item/integrated_circuit/smart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxL" = ( +/obj/item/ammo_casing/a44/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wxW" = ( +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/ascended, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyj" = ( +/obj/item/clothing/under/christmas/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyp" = ( +/obj/item/weapon/card/id/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyt" = ( +/obj/item/weapon/reagent_containers/food/snacks/xenoburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyz" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/poison, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wyA" = ( +/obj/item/weapon/book/bundle/custom_library/fiction/beyondthedoor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyH" = ( +/obj/item/clothing/shoes/boots/jackboots/fluff/amara_boots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wyQ" = ( +/mob/living/simple_mob/mobs_monsters/clowns/longface{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wyS" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzc" = ( +/obj/item/weapon/circuitboard/cell_charger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wze" = ( +/obj/item/ammo_magazine/m2024/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzh" = ( +/obj/item/clothing/head/helmet/space/void/engineering/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzn" = ( +/obj/item/weapon/reagent_containers/glass/bottle/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzq" = ( +/obj/structure/closet/medical_wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzs" = ( +/mob/living/simple_mob/animal/passive/bird/parrot, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wzu" = ( +/obj/item/stack/tile/carpet/brncarpet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzx" = ( +/obj/item/clothing/accessory/storage/pouches/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzH" = ( +/obj/item/weapon/material/twohanded/longsword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzJ" = ( +/obj/item/clothing/suit/armor/riot/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzL" = ( +/obj/item/toy/figure/shitcurity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wzO" = ( +/obj/item/weapon/reagent_containers/food/snacks/sun_snax, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAa" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAc" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/bitters, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAf" = ( +/obj/item/clothing/gloves/grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAg" = ( +/obj/machinery/atmospherics/pipeturbine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAl" = ( +/obj/item/weapon/gun/magnetic/railgun/flechette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAq" = ( +/obj/item/weapon/flame/lighter/zippo/ironic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAu" = ( +/obj/item/clothing/under/rank/security/corp/fluff/ally_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAA" = ( +/obj/item/weapon/nailpolish, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAB" = ( +/obj/item/weapon/reagent_containers/food/snacks/quicheslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAL" = ( +/obj/item/clothing/accessory/solgov/department/service/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAM" = ( +/mob/living/silicon/robot/platform, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wAW" = ( +/obj/item/weapon/stock_parts/micro_laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wAZ" = ( +/obj/item/integrated_circuit/logic/boollatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBh" = ( +/obj/item/clothing/under/pants/baggy/classicjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBi" = ( +/obj/item/device/modkit_conversion/fluff/skinner/b, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBk" = ( +/obj/item/clothing/under/rank/virologist_new, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBo" = ( +/obj/machinery/suit_storage_unit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBw" = ( +/obj/item/device/mcguffin/brass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBx" = ( +/obj/item/weapon/flamethrower/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBQ" = ( +/obj/item/weapon/bedsheet/hop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBT" = ( +/obj/item/instrument/eguitar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wBW" = ( +/obj/item/weapon/pen/crayon/marker/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCd" = ( +/obj/machinery/vending/wardrobe/chapdrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCk" = ( +/obj/item/seeds/ambrosiadeusseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCm" = ( +/obj/item/clothing/suit/storage/flintlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCy" = ( +/obj/item/clothing/mask/veil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCF" = ( +/mob/living/simple_mob/animal/giant_spider/webslinger/event{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wCH" = ( +/obj/item/weapon/material/knife/tacknife/boot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCK" = ( +/obj/item/weapon/dnainjector/hulkmut, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCL" = ( +/obj/item/weapon/bedsheet/mime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wCS" = ( +/obj/item/clothing/under/cuttop/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDf" = ( +/obj/structure/sign/directions/medical/chemlab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDj" = ( +/obj/item/weapon/reagent_containers/food/snacks/wasabi_peas, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDn" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDr" = ( +/obj/structure/table/bench/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDz" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDF" = ( +/obj/item/weapon/storage/pill_bottle/dylovene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDV" = ( +/obj/item/integrated_circuit/illegal/EPv2_Discoverer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wDX" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEa" = ( +/obj/structure/prop/war/tgmc_missile/fatty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEj" = ( +/obj/item/integrated_circuit/input/numberpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEm" = ( +/obj/item/clothing/suit/fluff/purp_robes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEp" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/homer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEt" = ( +/obj/item/clothing/head/radiation/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEB" = ( +/obj/item/weapon/gun/energy/gun/fluff/gunsword, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEC" = ( +/obj/item/device/modkit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEF" = ( +/obj/item/device/mmi/radio_enabled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEN" = ( +/obj/structure/sign/signnew/cryogenics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wEQ" = ( +/obj/structure/bed/chair/comfy/rounded/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wER" = ( +/obj/item/weapon/mine/gadget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFe" = ( +/obj/item/clothing/under/solgov/utility/army/urban, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFq" = ( +/obj/structure/sign/flag/catpirate/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFv" = ( +/obj/item/clothing/head/hood/lancelot_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFA" = ( +/obj/item/weapon/cell/device/weapon/empproof, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFJ" = ( +/obj/item/clothing/under/rank/trek/command/voy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFM" = ( +/obj/item/stack/tile/floor/eris/steel/panels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFQ" = ( +/obj/item/weapon/soap/yellow_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFR" = ( +/obj/item/trash/beef, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFS" = ( +/obj/item/weapon/plantspray/weeds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFV" = ( +/obj/machinery/lapvend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wFX" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGb" = ( +/obj/structure/cable/orange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGk" = ( +/obj/item/clothing/accessory/solgov/fleet_patch/second, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGm" = ( +/obj/item/clothing/suit/storage/hooded/hoodie/greentrim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGs" = ( +/obj/item/instrument/musicalmoth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGK" = ( +/obj/item/weapon/storage/pouch/ammo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGM" = ( +/obj/item/weapon/storage/belt/utility/alien/full, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wGR" = ( +/obj/item/weapon/deck/wizoff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHf" = ( +/obj/item/weapon/gun/energy/gun/burst, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHh" = ( +/obj/item/seeds/carrotseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHp" = ( +/obj/item/weapon/cartridge/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHt" = ( +/obj/item/clothing/accessory/pride/ace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHA" = ( +/obj/item/weapon/storage/part_replacer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHC" = ( +/obj/item/weapon/storage/backpack/industrial, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHD" = ( +/obj/item/weapon/digestion_remains/skull/sergal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHF" = ( +/obj/item/modular_computer/console/preset/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHQ" = ( +/obj/item/clothing/suit/storage/explorer/engineering/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHT" = ( +/obj/item/weapon/grenade/spawnergrenade/riftwallers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHU" = ( +/obj/item/weapon/deck/holder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wHY" = ( +/obj/item/toy/plushie/teshari/b_yw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIf" = ( +/obj/item/weapon/circuitboard/telecomms/hub, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIg" = ( +/obj/item/ammo_magazine/ammo_box/b10mm/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIi" = ( +/obj/machinery/power/thermoregulator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIo" = ( +/obj/item/stack/tile/floor/eris/white/brown_platform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIp" = ( +/obj/item/ammo_casing/a10mm/bb, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIr" = ( +/obj/item/clothing/shoes/boots/winter/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIu" = ( +/obj/item/ammo_magazine/m38, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIw" = ( +/obj/item/clothing/glasses/thermal/syndi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIB" = ( +/obj/item/weapon/circuitboard/station_map, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIN" = ( +/obj/item/weapon/reagent_containers/food/drinks/britcup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIQ" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/phase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIT" = ( +/obj/structure/prop/esoteric/nt_pedestal1_old, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wIV" = ( +/obj/item/clothing/under/dress/dress_saloon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJl" = ( +/obj/item/clothing/accessory/wcoat/swvest/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJo" = ( +/obj/item/integrated_circuit/reagent/pump, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJr" = ( +/obj/item/seeds/carpetseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJu" = ( +/obj/item/ammo_magazine/m38/makarov/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJC" = ( +/obj/item/clothing/gloves/gauntlets/rig/protean, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJF" = ( +/obj/item/weapon/implanter/reagent_generator/yonra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJJ" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/shroud/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJM" = ( +/obj/structure/symbol/ca, +/turf/simulated/fitness, +/area/survivalpod) +"wJR" = ( +/obj/item/weapon/storage/box/scattershot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJS" = ( +/obj/item/weapon/gun/projectile/revolver/lombardi/panther, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJT" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/used, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJW" = ( +/obj/item/weapon/reagent_containers/food/snacks/steamtealeaf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wJZ" = ( +/obj/machinery/button/windowtint/multitint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKb" = ( +/obj/item/toy/figure/bandit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKe" = ( +/obj/item/clothing/suit/space/void/medical/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKf" = ( +/obj/item/weapon/storage/belt/medical/fluff/jiao_belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKg" = ( +/obj/item/clothing/suit/space/vox/pressure, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKh" = ( +/obj/item/toy/plushie/orange_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKi" = ( +/obj/item/weapon/gun/energy/plasmastun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKq" = ( +/obj/item/weapon/reagent_containers/food/snacks/jellyburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKs" = ( +/obj/structure/bed/chair/comfy/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKy" = ( +/obj/item/clothing/head/helmet/space/void/security/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKC" = ( +/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKM" = ( +/obj/item/weapon/melee/energy/axe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKR" = ( +/obj/item/weapon/card/id/event/altcard/syndie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wKS" = ( +/obj/item/device/holomap_beacon/operative, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wLl" = ( +/mob/living/simple_mob/animal/passive/fish/measelshark, +/turf/simulated/floor/water/deep/ocean, +/area/survivalpod) +"wLx" = ( +/obj/machinery/door/airlock/angled_bay/standard/color/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wLy" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wLC" = ( +/obj/item/clothing/suit/space/void/refurb/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wLP" = ( +/obj/machinery/door/blast/angled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wLQ" = ( +/obj/item/weapon/reagent_containers/food/snacks/ribplate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMm" = ( +/mob/living/simple_mob/animal/passive/crab{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wMn" = ( +/obj/structure/closet/crate/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMr" = ( +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMw" = ( +/obj/item/clothing/under/shiny/catsuit/poly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMz" = ( +/obj/item/clothing/accessory/poncho/roles/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wME" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/blue_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMH" = ( +/obj/structure/sign/department/chem, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMI" = ( +/obj/machinery/door/blast/regular/bookcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wML" = ( +/obj/item/clothing/under/sexymime/dress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMR" = ( +/obj/item/stack/tile/floor/techgrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMS" = ( +/obj/item/weapon/gun/projectile/aps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wMX" = ( +/obj/item/clothing/under/schoolgirl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNa" = ( +/obj/item/toy/plushie/orange_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNb" = ( +/obj/item/clothing/accessory/armor/tag/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNd" = ( +/obj/item/clothing/head/helmet/space/void/refurb/research/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNn" = ( +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNw" = ( +/obj/item/seeds/potatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNz" = ( +/obj/item/clothing/gloves/ring/material/platinum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNT" = ( +/obj/item/weapon/flame/lighter/zippo/communist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNW" = ( +/obj/vehicle/train/engine/quadbike/snowmobile/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wNZ" = ( +/obj/item/clothing/under/ert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOd" = ( +/obj/structure/sign/chemdiamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOk" = ( +/obj/item/seeds/deathnettleseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOn" = ( +/obj/item/clothing/head/lavender_crown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOp" = ( +/obj/item/weapon/grenade/spawnergrenade/manhacks/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOB" = ( +/obj/item/device/encryptionkey/headset_med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOD" = ( +/obj/item/clothing/head/wizard/fake, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOG" = ( +/obj/item/seeds/angelmycelium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOH" = ( +/obj/item/clothing/head/fedora/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOK" = ( +/obj/item/weapon/spell/modifier/haste, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOM" = ( +/obj/item/mecha_parts/mecha_equipment/tool/drill, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wOT" = ( +/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPc" = ( +/obj/item/clothing/suit/storage/hooded/knight/robin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPh" = ( +/obj/structure/sign/levels/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPq" = ( +/obj/item/clothing/glasses/material/prescription/tajblind, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPs" = ( +/obj/item/weapon/disk/nifsoft, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPt" = ( +/obj/item/weapon/reagent_containers/food/snacks/pistachios, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPv" = ( +/obj/item/weapon/gun/energy/gun/burst/mg42, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPJ" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wPT" = ( +/obj/item/clothing/suit/bio_suit/general, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQc" = ( +/obj/item/weapon/reagent_containers/glass/beaker/measuring_cup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQf" = ( +/mob/living/simple_mob/metroid{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wQr" = ( +/obj/structure/prop/blackbox/crashed_med_shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQs" = ( +/obj/item/weapon/ore/diamond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQv" = ( +/obj/item/weapon/gun/projectile/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQB" = ( +/obj/structure/curtain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQG" = ( +/obj/item/clothing/gloves/ranger/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQN" = ( +/obj/item/weapon/storage/pill_bottle/arithrazine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQQ" = ( +/obj/item/clothing/head/hairnet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQU" = ( +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wQZ" = ( +/mob/living/simple_mob/mobs_monsters/clowns/flesh{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wRd" = ( +/obj/item/clothing/accessory/fluff/zeke_vincir_1, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRh" = ( +/obj/machinery/vending/loadout/gadget, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRm" = ( +/obj/item/weapon/implanter/restrainingbolt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRs" = ( +/obj/item/weapon/rig/military, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRt" = ( +/obj/structure/showcase/yw/chaplain2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRv" = ( +/obj/item/weapon/circuitboard/stockexchange, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRx" = ( +/obj/item/clothing/head/ushanka/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRy" = ( +/obj/item/seeds/teaseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRB" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRP" = ( +/mob/living/simple_mob/animal/giant_spider/tunneler/frequent{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wRQ" = ( +/obj/item/clothing/under/teshari/undercoat/standard/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRT" = ( +/obj/item/toy/tennis/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRU" = ( +/obj/item/weapon/implantcase/death_alarm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wRZ" = ( +/obj/item/clothing/head/dress/fleet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSf" = ( +/obj/item/weapon/reagent_containers/food/snacks/hatchling_suprise, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSg" = ( +/obj/structure/noticeboard/blueshield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSj" = ( +/obj/item/device/bluespaceradio/cryogaia_prelinked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSp" = ( +/obj/item/weapon/gun/projectile/revolvershotgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSs" = ( +/obj/item/ammo_casing/a75, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSt" = ( +/obj/machinery/door/airlock/glass_research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSx" = ( +/obj/machinery/vending/loadout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSG" = ( +/obj/item/clothing/head/nonla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSP" = ( +/obj/structure/crystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSS" = ( +/obj/item/clothing/suit/space/void/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSW" = ( +/obj/structure/loot_pile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wSZ" = ( +/obj/structure/table/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTa" = ( +/obj/item/slime_extract/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTh" = ( +/obj/item/weapon/aiModule/ninja_override, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTn" = ( +/obj/item/weapon/reagent_containers/food/snacks/cb07, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTs" = ( +/obj/item/weapon/technomancer_core/universal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTu" = ( +/obj/item/clothing/accessory/gaiter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTv" = ( +/obj/item/organ/internal/intestine/unathi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTx" = ( +/obj/item/weapon/spell/shield, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTy" = ( +/obj/item/clothing/glasses/omnihud/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTG" = ( +/obj/structure/sign/examroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTI" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/white_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wTN" = ( +/obj/item/weapon/circuitboard/recycler_sorter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUb" = ( +/obj/item/clothing/suit/technomancer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUi" = ( +/obj/item/clothing/suit/storage/saare/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUq" = ( +/obj/item/organ/internal/augment/armmounted/hand, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUr" = ( +/obj/item/toy/figure/gardener, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUs" = ( +/obj/item/clothing/accessory/altevian_badge/aquila/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUt" = ( +/obj/item/clothing/suit/space/fluff/joan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUx" = ( +/obj/structure/sign/flag/blank/right, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUy" = ( +/obj/item/clothing/shoes/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUI" = ( +/obj/structure/table/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUJ" = ( +/obj/structure/bed/padded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUL" = ( +/obj/item/clothing/head/helmet/space/void/syndicate_contract, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUN" = ( +/mob/living/simple_mob/xeno_ch/sentinel, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wUU" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wUX" = ( +/obj/item/capture_crystal/loadout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVh" = ( +/obj/item/weapon/storage/pill_bottle/phenethylamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVl" = ( +/obj/structure/door_assembly/door_assembly_voidcraft/vertical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVm" = ( +/obj/item/ammo_magazine/m45/practice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVp" = ( +/obj/item/weapon/card/id/medical/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVv" = ( +/obj/machinery/vending/loadout/uniform, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVA" = ( +/obj/item/integrated_circuit/built_in/device_input, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVP" = ( +/obj/item/weapon/lego, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVU" = ( +/obj/item/weapon/card/id/centcom/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVV" = ( +/obj/item/weapon/storage/briefcase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVW" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wVY" = ( +/obj/item/key/snowmobile, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWb" = ( +/obj/item/clothing/suit/space/void/captain/alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWq" = ( +/obj/item/weapon/storage/box/gum, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWt" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/corgi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWB" = ( +/obj/item/weapon/digestion_remains/skull/akula, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWG" = ( +/obj/structure/prop/blackbox/mackerel_wreck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWH" = ( +/obj/structure/closet/crate/secure/gear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWO" = ( +/obj/item/weapon/cane/fluff/tasald, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWV" = ( +/obj/item/clothing/suit/armor/combat/crusader_costume, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWX" = ( +/obj/item/integrated_circuit/reagent/filter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWY" = ( +/obj/item/clothing/accessory/solgov/department/service/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wWZ" = ( +/obj/structure/smoletrack/roadS, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXc" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXe" = ( +/obj/machinery/smartfridge/secure/extract, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXm" = ( +/obj/item/clothing/mask/gas/clown_hat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXn" = ( +/obj/structure/prop/war/tgmc_laser/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXs" = ( +/obj/item/weapon/circuitboard/keycard_auth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXy" = ( +/mob/living/simple_mob/humanoid/pirate/las{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wXz" = ( +/obj/item/integrated_circuit/output/led/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXA" = ( +/obj/item/weapon/circuitboard/security/telescreen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wXG" = ( +/obj/item/weapon/storage/box/glass_extras, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYg" = ( +/obj/item/weapon/reagent_containers/glass/bottle/rezadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYi" = ( +/obj/item/weapon/storage/box/fancy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYm" = ( +/obj/item/weapon/reagent_containers/food/snacks/spesslaw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYx" = ( +/obj/item/weapon/gun/energy/mouseray, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYH" = ( +/obj/item/clothing/under/qipao, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYI" = ( +/obj/structure/sign/flag/vystholm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYK" = ( +/obj/item/toy/plushie/bigcat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYX" = ( +/obj/item/weapon/card/id/medical/psych, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wYZ" = ( +/obj/item/weapon/stock_parts/matter_bin/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZo" = ( +/obj/structure/barricade/cutout/servant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZt" = ( +/obj/item/clothing/suit/drake_cloak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZu" = ( +/mob/living/simple_mob/humanoid/merc/voxpirate/pirate{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"wZw" = ( +/obj/item/clothing/head/helmet/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZE" = ( +/obj/item/weapon/reagent_containers/food/snacks/bagelpoppy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZN" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZQ" = ( +/obj/item/device/buttonofnormal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZR" = ( +/obj/item/clothing/gloves/brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZU" = ( +/obj/structure/fence, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZX" = ( +/obj/structure/showcase/yw/plaque, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"wZY" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xaa" = ( +/obj/item/ammo_casing/a545/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xad" = ( +/obj/structure/outcrop/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xah" = ( +/obj/item/weapon/pen/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xaj" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/nothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xat" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/barflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xaw" = ( +/obj/item/weapon/storage/toolbox/lunchbox/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xaR" = ( +/obj/item/weapon/cartridge/chemistry, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xaU" = ( +/obj/item/clothing/accessory/armor/helmcover/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xbc" = ( +/obj/item/weapon/storage/firstaid/fire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xby" = ( +/mob/living/simple_mob/vore/alienanimals/space_jellyfish{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xbz" = ( +/obj/structure/sign/directions/science/robotics, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xbB" = ( +/obj/item/device/encryptionkey/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xbR" = ( +/obj/item/seeds/sporemycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xbS" = ( +/obj/item/toy/plushie/carp/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xca" = ( +/obj/item/clothing/accessory/armor/armguards/merc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcc" = ( +/obj/item/weapon/hand_labeler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcd" = ( +/obj/item/organ/internal/brain/xenochimera, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcf" = ( +/obj/item/weapon/pen/fountain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcg" = ( +/obj/item/clothing/shoes/lightrig/hacker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xch" = ( +/obj/structure/bed/chair/bay/comfy/teal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcn" = ( +/mob/living/simple_mob/animal/passive/dog/void_puppy, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xco" = ( +/obj/item/weapon/card/id/exploration, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcr" = ( +/obj/item/stack/material/morphium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcu" = ( +/obj/item/clothing/accessory/solgov/department/security/jumper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcC" = ( +/obj/machinery/conveyor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcH" = ( +/obj/item/weapon/material/ashtray/bronze, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcI" = ( +/obj/item/weapon/book/manual/command_guide, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcN" = ( +/obj/item/clothing/suit/space/vox/civ/trader/stealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcQ" = ( +/obj/machinery/mecha_part_fabricator/pros, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcU" = ( +/obj/item/weapon/storage/box/cups, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcV" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xcZ" = ( +/obj/item/trash/liquidfood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdf" = ( +/obj/item/ammo_magazine/akm/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdg" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdo" = ( +/obj/item/weapon/beach_ball/dodgeball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdN" = ( +/obj/item/weapon/stamp/chameleon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdP" = ( +/obj/item/clothing/suit/storage/solgov/service/army/engineering/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdR" = ( +/mob/living/simple_mob/vore/aggressive/deathclaw{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xdV" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xdX" = ( +/obj/structure/sign/flag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeb" = ( +/obj/item/stack/marker_beacon/hundred, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xed" = ( +/obj/item/ammo_magazine/mfoam_dart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xee" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xej" = ( +/obj/item/weapon/material/kitchen/utensil/fork/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xek" = ( +/obj/item/weapon/surgical/FixOVein/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xel" = ( +/obj/item/weapon/rig/combat/equipped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeo" = ( +/obj/item/weapon/implant/uplink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xes" = ( +/obj/item/weapon/card/id/casino/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeJ" = ( +/obj/structure/table/steel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeL" = ( +/obj/item/clothing/suit/space/vox/civ/trader/medic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeR" = ( +/obj/item/weapon/storage/bag/food, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xeT" = ( +/obj/structure/sign/clock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfh" = ( +/obj/item/flag/vystholm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfk" = ( +/obj/item/weapon/reagent_containers/food/snacks/boiledrice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfn" = ( +/mob/living/simple_mob/animal/passive/bird/parrot/eclectus, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xfs" = ( +/obj/item/weapon/storage/box/anti_photons, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfz" = ( +/obj/item/clothing/accessory/badge/holo/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfF" = ( +/obj/item/clothing/under/teshari/smock/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfR" = ( +/obj/item/weapon/storage/part_replacer/adv/discount_bluespace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfS" = ( +/obj/item/weapon/gun/projectile/serdy_pistols/ssp4, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xfV" = ( +/obj/item/weapon/gun/projectile/automatic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgb" = ( +/obj/item/weapon/circuitboard/scan_consolenew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgu" = ( +/obj/machinery/chemical_dispenser/deluxe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgy" = ( +/obj/item/weapon/circuitboard/recharge_station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgA" = ( +/mob/living/simple_mob/animal/space/bats/cult{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xgC" = ( +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgE" = ( +/obj/item/clothing/shoes/slippers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgH" = ( +/obj/item/clothing/accessory/sweater/fluff/annie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xgV" = ( +/obj/item/clothing/under/rank/talon/basic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xha" = ( +/obj/item/ammo_casing/a545/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhl" = ( +/obj/item/weapon/cell/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhr" = ( +/obj/item/mecha_parts/part/phazon_left_leg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xht" = ( +/obj/structure/closet/walllocker_double/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhu" = ( +/obj/machinery/door/airlock/angled_tgmc/prep/prep_delta, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhy" = ( +/obj/item/clothing/suit/armor/tesla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhD" = ( +/obj/item/clothing/suit/storage/solgov/dress/fleet/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhG" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhH" = ( +/obj/item/ammo_magazine/ammo_box/b545/large/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhM" = ( +/obj/structure/closet/grave/dirthole, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhO" = ( +/obj/item/clothing/suit/armor/pcarrier/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhP" = ( +/obj/item/weapon/reagent_containers/food/snacks/scorpion_cooked, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhR" = ( +/obj/item/weapon/storage/box/fluff/mira, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xhX" = ( +/obj/item/weapon/circuitboard/nav/tele, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xia" = ( +/obj/item/toy/figure/virologist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xic" = ( +/obj/structure/sign/directions/science/rnd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xij" = ( +/obj/item/weapon/reagent_containers/food/snacks/brainburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xil" = ( +/obj/item/clothing/suit/space/skrell/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xiz" = ( +/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xiE" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xiP" = ( +/obj/item/capture_crystal/random, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xiX" = ( +/obj/structure/salvageable/implant_container, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xja" = ( +/obj/item/weapon/gun/energy/pulse_rifle/destroyer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjo" = ( +/obj/item/weapon/storage/belt/security/fluff/kilano, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xju" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjy" = ( +/obj/item/weapon/reagent_containers/food/condiment/ketchup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjH" = ( +/obj/item/weapon/storage/pouch/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjM" = ( +/obj/item/clothing/head/fedora/fluff/bowler, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjT" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjV" = ( +/obj/structure/showcase/sign/nt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xjW" = ( +/obj/item/clothing/head/xenos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xka" = ( +/obj/item/clothing/suit/storage/forensics/blue/long, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkc" = ( +/obj/structure/sign/levels/recreation, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xke" = ( +/obj/item/weapon/card/id/centcom/ERT/commander, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkf" = ( +/obj/item/device/antibody_scanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkl" = ( +/obj/item/clothing/gloves/boxing/hologlove, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkm" = ( +/obj/item/clothing/head/helmet/space/deathsquad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xku" = ( +/obj/item/clothing/under/explorer/utility/command/engineering/fluff/vasharr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkw" = ( +/obj/item/ammo_casing/a10x24/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xky" = ( +/obj/machinery/atmospherics/trinary/atmos_filter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkD" = ( +/obj/item/weapon/chaoscake_layer/seven, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkG" = ( +/obj/item/weapon/storage/fancy/cigar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkH" = ( +/obj/item/device/electronic_assembly/large/arm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkI" = ( +/obj/item/weapon/melee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkQ" = ( +/obj/item/clothing/head/helmet/space/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xkR" = ( +/obj/item/toy/plushie/borgplushie/drake/eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlc" = ( +/obj/item/weapon/storage/quickdraw/syringe_case, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xli" = ( +/obj/item/clothing/gloves/boxing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlm" = ( +/obj/item/weapon/paper/manifest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlo" = ( +/obj/item/weapon/reagent_containers/food/snacks/egg/teshari, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlu" = ( +/obj/item/clothing/suit/storage/toggle/greengov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlB" = ( +/obj/item/device/modkit_conversion/fluff/serdykit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlD" = ( +/obj/item/stack/tile/floor/sidewalk, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlF" = ( +/obj/item/weapon/reagent_containers/pill/zoom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xlR" = ( +/mob/living/simple_mob/clockwork, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xlU" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard/black_green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmf" = ( +/obj/item/weapon/broken_gun/pumpshotgun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmm" = ( +/obj/item/weapon/circuitboard/sleeper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmn" = ( +/obj/item/weapon/reagent_containers/food/snacks/pineappleslice/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmx" = ( +/obj/item/ammo_magazine/mtg/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmA" = ( +/obj/item/clothing/head/beret/medical/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmP" = ( +/obj/structure/bed/chair/sofa/corner/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmR" = ( +/obj/structure/sign/levels/bridge, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xmS" = ( +/obj/item/weapon/spell/blink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xna" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/boat/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnj" = ( +/obj/item/integrated_circuit/list/delete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnp" = ( +/obj/item/weapon/card/id/casino/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnr" = ( +/obj/item/ammo_magazine/s357, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnx" = ( +/obj/structure/prop/rock/round, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnD" = ( +/obj/item/toy/plushie/tuxedo_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnG" = ( +/obj/item/weapon/reagent_containers/food/snacks/variable/cereal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnL" = ( +/obj/item/device/flashlight/pen/fluff/lynn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnM" = ( +/obj/item/clothing/head/cowboy/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnN" = ( +/obj/item/ammo_magazine/m9mm/vp70/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnS" = ( +/obj/item/seeds/chiliseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnV" = ( +/obj/item/seeds/wurmwoad, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xnX" = ( +/obj/item/stack/material/snowbrick, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xoc" = ( +/mob/living/simple_mob/humanoid/merc/ranged/smg{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xoi" = ( +/obj/item/clothing/under/suit_jacket/female/fluff/miqote, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xol" = ( +/obj/item/weapon/circuitboard/pointdefense, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xop" = ( +/obj/item/weapon/storage/vore_egg/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xoy" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/jobs/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xoK" = ( +/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xoS" = ( +/obj/item/integrated_circuit/converter/lowercase, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xoY" = ( +/obj/item/ammo_casing/a5mmcaseless, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpa" = ( +/obj/item/weapon/storage/fancy/candle_box, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpd" = ( +/obj/structure/grille/broken, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpg" = ( +/obj/item/rig_module/voice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpl" = ( +/obj/item/projectile/scatter/laser, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpn" = ( +/obj/item/weapon/reagent_containers/food/snacks/cookiesnack, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpp" = ( +/obj/item/weapon/reagent_containers/spray/chemsprayer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpr" = ( +/obj/item/trash/ratpackramen/ace, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpx" = ( +/obj/item/clothing/head/helmet/space/void/mining, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpz" = ( +/obj/item/clothing/head/helmet/space/vox/civ/medical/geneticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpA" = ( +/obj/item/seeds/weeds, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpD" = ( +/obj/item/clothing/accessory/medal/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpI" = ( +/obj/item/weapon/refill_cartridge/autoname/food/sol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpR" = ( +/obj/item/beehive_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpT" = ( +/obj/machinery/firealarm/angled/hidden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xpX" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/rd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqc" = ( +/obj/item/weapon/key/rover, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqe" = ( +/obj/structure/sign/warning/airlock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqh" = ( +/obj/item/clothing/head/tesh_hood/standard/black_pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqi" = ( +/obj/item/weapon/grenade/spawnergrenade/ward, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqn" = ( +/obj/item/weapon/aliencoin/basic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqp" = ( +/obj/item/weapon/thecake_layer/four, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqq" = ( +/obj/item/weapon/spell/projectile/chain_lightning, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqy" = ( +/obj/structure/sign/levels/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqH" = ( +/obj/item/clothing/suit/storage/fluff/gntop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqI" = ( +/obj/item/device/gps/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqJ" = ( +/obj/item/clothing/under/suit_jacket/female/fluff/asuna, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqL" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/whitered, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xqR" = ( +/obj/item/clothing/head/helmet/space/void/zaddat/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrc" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xri" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/tank{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xrm" = ( +/obj/item/weapon/storage/vore_egg/xenomorph, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrr" = ( +/obj/item/weapon/storage/toolbox/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xry" = ( +/obj/structure/sign/hangar/three, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrz" = ( +/obj/structure/sign/level/four, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrA" = ( +/obj/item/clothing/suit/storage/toggle/track/white, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrB" = ( +/obj/item/clothing/accessory/badge/corporate_tag/bishop, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrC" = ( +/obj/item/weapon/reagent_containers/food/snacks/weebonuts, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrD" = ( +/obj/item/ammo_magazine/plamya/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrL" = ( +/obj/item/weapon/am_containment, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrO" = ( +/obj/machinery/door/blast/multi_tile/two_tile_hor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xrQ" = ( +/obj/item/weapon/storage/backpack/luchador/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsm" = ( +/obj/structure/sign/levels/security/armory, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xso" = ( +/mob/living/simple_mob/animal/space/alien/tanky{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xsv" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsA" = ( +/obj/item/weapon/dnainjector/midgit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsD" = ( +/obj/item/stack/material/gold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsM" = ( +/obj/structure/bed/chair/comfy/rounded/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsU" = ( +/obj/item/weapon/tool/wrench/power, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsV" = ( +/obj/item/weapon/disk/nifsoft/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xsY" = ( +/obj/item/weapon/bone/skull/tajaran, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtg" = ( +/obj/structure/sign/department/drones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtj" = ( +/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xto" = ( +/obj/item/clothing/suit/iasexy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtq" = ( +/obj/item/weapon/storage/backpack/messenger/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xts" = ( +/obj/item/weapon/melee/fluff/holochain/mass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtt" = ( +/obj/structure/smolebuilding/business, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtu" = ( +/obj/machinery/light_construct/bigfloorlamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xty" = ( +/obj/item/clothing/accessory/armor/tag/solgov/agent, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtB" = ( +/obj/item/clothing/mask/balaclava/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtC" = ( +/obj/item/clothing/under/teshari/smock/dress/engine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtG" = ( +/obj/item/weapon/reagent_containers/food/snacks/sharkmeatdip, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtM" = ( +/obj/item/weapon/storage/bible, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtV" = ( +/obj/structure/prop/machine/stamper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtY" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/service/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xtZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/baguette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xua" = ( +/obj/structure/sign/flag/vir, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xub" = ( +/obj/item/clothing/under/cohesion/hazard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xus" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xuw" = ( +/obj/item/projectile/beam/stun/med, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xux" = ( +/obj/item/weapon/gun/projectile/automatic/advanced_smg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xuR" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xuV" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e8, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xuZ" = ( +/obj/item/weapon/bedsheet/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xva" = ( +/obj/item/clothing/head/surgery/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvd" = ( +/obj/item/weapon/reagent_containers/food/snacks/appletart, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvm" = ( +/obj/item/weapon/reagent_containers/food/snacks/porkbowl, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvp" = ( +/obj/structure/closet/thunderdome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvs" = ( +/obj/item/weapon/ore/iron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvv" = ( +/obj/item/clothing/mask/smokable/ecig/simple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvz" = ( +/obj/machinery/telecomms/processor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvC" = ( +/obj/item/weapon/gun/projectile/revolver/saa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvD" = ( +/obj/item/weapon/aiModule/reporter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvH" = ( +/obj/item/weapon/grenade/chem_grenade/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvO" = ( +/obj/item/clothing/head/pin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvR" = ( +/obj/item/clothing/suit/storage/hooded/teshari/standard/black_purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xvY" = ( +/obj/item/clothing/accessory/medal/silver/fluff/zodiacshadow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwc" = ( +/obj/item/toy/character/voidone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwd" = ( +/obj/item/weapon/reagent_containers/food/snacks/siffruit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwl" = ( +/obj/item/weapon/cell/device/hyper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwm" = ( +/obj/item/device/flashlight/maglight, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwp" = ( +/obj/item/clothing/shoes/boots/swat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwu" = ( +/obj/machinery/vending/wardrobe/scidrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwx" = ( +/obj/item/clothing/under/rank/cargo/jeans/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwL" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/crop_jacket/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwN" = ( +/obj/item/clothing/under/psysuit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwP" = ( +/obj/item/weapon/soap/brown_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwQ" = ( +/obj/item/weapon/circuitboard/mecha_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwU" = ( +/obj/item/weapon/reagent_containers/food/snacks/cheesetoast, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xwX" = ( +/obj/item/weapon/cartridge/ce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxe" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xxi" = ( +/obj/item/clothing/under/skirt/khaki, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxo" = ( +/obj/item/ammo_casing/microbattery/medical/corpse_mend, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxu" = ( +/obj/item/clothing/suit/fire/firefighter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxv" = ( +/obj/item/weapon/reagent_containers/food/snacks/grub_blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxz" = ( +/obj/structure/sign/level/two/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxC" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxH" = ( +/obj/item/clothing/under/scratch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxV" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/supermatter, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xxZ" = ( +/obj/item/weapon/storage/backpack/talon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyj" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyl" = ( +/obj/item/toy/gnome, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyr" = ( +/obj/item/weapon/reagent_containers/pill/phenethylamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xys" = ( +/obj/item/weapon/reagent_containers/food/snacks/taco, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyx" = ( +/obj/item/clothing/head/beret/fluff/jiao_beret, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyB" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/para, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyK" = ( +/mob/living/simple_mob/humanoid/russian{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xyN" = ( +/obj/item/weapon/cell/vepr, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyU" = ( +/obj/item/robot_parts/robot_component/radio, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xyV" = ( +/obj/structure/table/bench, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzf" = ( +/obj/machinery/light/small/fairylights/flicker, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzg" = ( +/obj/item/weapon/paper/card/cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzi" = ( +/obj/structure/curtain/open, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzl" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/diethylamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzu" = ( +/obj/item/weapon/card/id/centcom/ERT/engineer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzA" = ( +/obj/item/weapon/spacecash/ewallet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzB" = ( +/obj/item/weapon/storage/vore_egg/purple, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzF" = ( +/obj/structure/alien/wall, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzI" = ( +/obj/machinery/door/airlock/angled_bay/standard/glass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzJ" = ( +/obj/item/weapon/circuitboard/gyrotron, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzS" = ( +/obj/machinery/suit_cycler/refit_only, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xzZ" = ( +/obj/item/weapon/implant/reagent_generator/evian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAc" = ( +/obj/item/stack/material/deuterium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAe" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/captain, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAi" = ( +/obj/item/clothing/accessory/armband/med/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAk" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAl" = ( +/obj/item/weapon/tool/wirecutters/clippers/trimmers, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAA" = ( +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAB" = ( +/obj/structure/door_assembly/door_assembly_highsecurity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAH" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAL" = ( +/obj/structure/bed/chair/sofa/sif_ora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xAO" = ( +/obj/item/device/electronic_assembly/drone/default, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBb" = ( +/obj/item/clothing/head/hood/winter/snowsuit/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBc" = ( +/obj/item/clothing/under/swimsuit/striped, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBd" = ( +/obj/item/weapon/reagent_containers/food/snacks/clownstears, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBg" = ( +/obj/structure/transit_tube/station, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBh" = ( +/obj/machinery/suit_cycler/vintage/tminer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBi" = ( +/obj/item/clothing/suit/storage/fluff/jacket/air_force, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBs" = ( +/obj/item/weapon/gun/projectile/automatic/cballistic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBw" = ( +/obj/item/weapon/gun/projectile/n99, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBD" = ( +/obj/item/clothing/accessory/armor/armorplate/riot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBH" = ( +/obj/item/weapon/implant/language/fluff/m41l, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBK" = ( +/obj/item/weapon/circuitboard/mecha/honker/peripherals, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBP" = ( +/obj/item/weapon/reagent_containers/food/snacks/flatbread, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xBW" = ( +/obj/item/ammo_magazine/m9mmAdvanced/ap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCa" = ( +/obj/item/weapon/reagent_containers/food/snacks/unajerky, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCf" = ( +/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCo" = ( +/obj/machinery/holosign/exit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCq" = ( +/obj/machinery/microwave/advanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCs" = ( +/obj/structure/bed/chair/bay/chair/padded/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCz" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCA" = ( +/obj/item/clothing/glasses/gglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCE" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/gamma, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCH" = ( +/obj/item/toy/plushie/pink_fox, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xCT" = ( +/obj/item/weapon/reagent_containers/food/snacks/wishsoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDc" = ( +/obj/item/weapon/circuitboard/pointdefense_control, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDe" = ( +/obj/item/clothing/glasses/fakesunglasses, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDp" = ( +/obj/item/weapon/tank/emergency/nitrogen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDx" = ( +/obj/item/clothing/head/beret/sec/corporate/officer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDG" = ( +/obj/machinery/seed_storage/garden, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDI" = ( +/obj/item/clothing/under/solgov/utility/sifguard/officer/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDJ" = ( +/obj/item/clothing/under/pants/blackjeans, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDR" = ( +/obj/structure/sign/poster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xDX" = ( +/obj/item/weapon/dnainjector/antimidgit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEa" = ( +/obj/item/clothing/under/pants/altevian/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEc" = ( +/obj/item/weapon/gun/energy/x01, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEd" = ( +/obj/item/weapon/fluff/dimensioncube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEf" = ( +/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEm" = ( +/obj/structure/closet/bombcloset/double, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEp" = ( +/obj/item/organ/internal/stomach/machine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEv" = ( +/obj/item/clothing/head/soft/rainbow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEK" = ( +/obj/item/clothing/under/dress/polka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEL" = ( +/obj/machinery/mining/drill/loaded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEM" = ( +/obj/item/clothing/under/color/lightblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEN" = ( +/obj/item/toy/figure/cmo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xER" = ( +/obj/item/mining_voucher, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xET" = ( +/obj/item/clothing/suit/storage/teshari/cloak/jobs/sec, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEV" = ( +/obj/item/weapon/gun/projectile/revolver/deckard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xEY" = ( +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag/mini, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFd" = ( +/obj/machinery/power/rtg/abductor/hybrid, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFg" = ( +/obj/item/weapon/storage/box/casino/costume_wizard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFl" = ( +/obj/item/device/modkit_conversion/fluff, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFm" = ( +/obj/item/weapon/storage/secure/briefcase/flamer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFw" = ( +/obj/machinery/power/shield_generator/upgraded/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFx" = ( +/obj/item/clothing/ears/skrell/cloth_male/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFD" = ( +/obj/item/weapon/ore/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xFN" = ( +/obj/item/weapon/reagent_containers/food/snacks/donut/olive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGb" = ( +/obj/structure/snowman/spider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGd" = ( +/obj/item/stack/material/osmium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGl" = ( +/obj/item/weapon/fossil, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGr" = ( +/obj/item/clothing/head/ushanka, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGs" = ( +/obj/item/toy/figure/detective, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGv" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGy" = ( +/obj/item/weapon/storage/backpack/holding/slime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGH" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/dropship2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGN" = ( +/obj/structure/grille/cult, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGQ" = ( +/obj/item/clothing/accessory/fluff/smilepin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGR" = ( +/obj/item/rig_module/vision, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGU" = ( +/obj/item/clothing/shoes/boots/cowboy/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xGV" = ( +/obj/item/weapon/reagent_containers/food/snacks/bigos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHb" = ( +/obj/item/weapon/circuitboard/skills/pcu, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHf" = ( +/obj/structure/loot_pile/mecha/mouse_tank/eraticator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHk" = ( +/obj/item/weapon/reagent_containers/food/snacks/mammi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHm" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHn" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/mercury, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHr" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/security{ + dir = 8 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHu" = ( +/obj/item/clothing/under/dress/dress_cap/femformal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHB" = ( +/obj/item/weapon/storage/box/masks/dust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHC" = ( +/obj/item/weapon/reagent_containers/food/snacks/dip/salsa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHM" = ( +/obj/item/weapon/firework_star/weather/storm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHP" = ( +/obj/item/weapon/gun/energy/meteorgun/pen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHS" = ( +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHX" = ( +/obj/item/weapon/reagent_containers/ecig_cartridge/coffee, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xHZ" = ( +/obj/item/weapon/reagent_containers/food/snacks/applepie, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIa" = ( +/obj/item/weapon/flame/candle/candelabra, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIb" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/whitewine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xId" = ( +/obj/item/weapon/paper/dosimeter_manual, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIz" = ( +/obj/item/weapon/rig/baymed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xID" = ( +/obj/item/clothing/shoes/antediluvian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIM" = ( +/obj/item/weapon/storage/box/casino/costume_sexymime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIO" = ( +/obj/item/weapon/storage/belt/soulstone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIP" = ( +/obj/item/weapon/rig/focalpoint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xIQ" = ( +/obj/item/clothing/under/pants/altevian/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJa" = ( +/obj/item/weapon/implant/reagent_generator/belle/ysaline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJd" = ( +/obj/item/clothing/suit/storage/vest/hoscoat/jensen, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJh" = ( +/obj/structure/closet/secure_closet/cargotech, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJm" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJn" = ( +/obj/item/clothing/glasses/sunglasses/big, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJp" = ( +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/gnat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJs" = ( +/obj/item/stack/tile/floor/eris/white/panels, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJx" = ( +/obj/item/weapon/stamp/accepted, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJy" = ( +/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xJA" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/small, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJB" = ( +/obj/item/weapon/grenade/spawnergrenade/clustaur, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJK" = ( +/obj/structure/largecrate/animal/bugsect, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJM" = ( +/obj/item/poi/brokenoldreactor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJN" = ( +/obj/item/clothing/accessory/armor/tag/apos, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJO" = ( +/obj/item/ammo_magazine/m9mmAdvanced, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xJW" = ( +/obj/structure/bonfire, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKb" = ( +/obj/structure/closet/lasertag, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKc" = ( +/obj/item/clothing/under/teshari/undercoat/jobs/para, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKd" = ( +/obj/item/weapon/reagent_containers/food/drinks/metaglass, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKf" = ( +/obj/item/mecha_parts/component/electrical/high_current, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKj" = ( +/obj/item/clothing/head/beret/solgov/sifguard/branch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKm" = ( +/obj/item/weapon/module/id_auth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKp" = ( +/mob/living/simple_mob/animal/space/alien/sentinel{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xKv" = ( +/obj/machinery/door/airlock/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKx" = ( +/obj/item/instrument/piano_synth/headphones/spacepods, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKF" = ( +/obj/machinery/door/airlock/external/bolted/cycling, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKG" = ( +/obj/item/device/defib_kit, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKL" = ( +/obj/structure/closet/crate/focalpoint, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKM" = ( +/obj/item/weapon/reagent_containers/glass/bottle/left4zed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKQ" = ( +/obj/item/weapon/dnainjector/antiremoteview, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKR" = ( +/obj/item/clothing/under/primitive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xKX" = ( +/obj/item/toy/cat_toy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLd" = ( +/mob/living/simple_mob/humanoid/pirate/machete{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xLo" = ( +/obj/machinery/door/window, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLq" = ( +/obj/item/clothing/accessory/bracelet/material/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLv" = ( +/obj/structure/bed/chair/comfy/rounded/lime, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLJ" = ( +/obj/item/weapon/computer_hardware/battery_module/micro, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLM" = ( +/obj/item/device/electronic_assembly/medium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLO" = ( +/obj/item/seeds/amanitamycelium, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLV" = ( +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xLZ" = ( +/mob/living/simple_mob/vore/alienanimals/space_ghost{ + desc = s; + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xMe" = ( +/obj/item/clothing/accessory/scarf, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMi" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMj" = ( +/obj/item/clothing/under/teshari/undercoat/standard/black_brown, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMm" = ( +/mob/living/silicon/robot/drone/swarm/melee, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xMn" = ( +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMo" = ( +/obj/item/weapon/circuitboard/stationalert_security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMs" = ( +/obj/item/device/survivalcapsule/luxury, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMz" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/myelamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xML" = ( +/obj/item/stack/material/plastic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMO" = ( +/obj/item/weapon/storage/box/fingerprints, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMU" = ( +/obj/structure/closet/crate/secure/large/aether, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xMV" = ( +/obj/item/weapon/reagent_containers/food/snacks/chipplate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNc" = ( +/obj/item/mecha_parts/mecha_equipment/crisis_drone/rad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNg" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "24" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNi" = ( +/obj/structure/closet/crate/mimic/airlock/guaranteed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNk" = ( +/obj/machinery/light_construct/flamp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNl" = ( +/obj/item/clothing/suit/storage/det_trench/alt2/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNo" = ( +/obj/item/weapon/gun/energy/mouseray/metamorphosis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNq" = ( +/obj/structure/prop/rock, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNr" = ( +/obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNy" = ( +/obj/item/clothing/suit/storage/hooded/costume/siffet, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNz" = ( +/obj/item/clothing/suit/storage/toggle/hoodiebuttoned, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNF" = ( +/obj/item/clothing/glasses/sunglasses/thinblindfold, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNI" = ( +/obj/item/clothing/accessory/holster/machete, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNN" = ( +/obj/item/weapon/lego/gib, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xNX" = ( +/obj/item/integrated_circuit/smart/basic_pathfinder, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOk" = ( +/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/diona, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOn" = ( +/obj/item/weapon/reagent_containers/food/snacks/old/hotdog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOo" = ( +/obj/item/weapon/implant/sizecontrol, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOq" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOw" = ( +/obj/structure/prop/statue/angel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOz" = ( +/obj/item/clothing/under/relaxwear_2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOD" = ( +/obj/item/clothing/accessory/material/makeshift, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOF" = ( +/obj/machinery/computer/pod/old/syndicate, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOI" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xOM" = ( +/obj/item/modular_computer/tablet/lease, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOV" = ( +/obj/item/slime_extract/silver, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xOW" = ( +/obj/item/clothing/under/rank/bartender/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPu" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/fuel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPw" = ( +/obj/machinery/door/airlock/maintenance/int, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPA" = ( +/obj/item/weapon/storage/box/nifsofts_medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPG" = ( +/obj/item/clothing/under/teshari/undercoat/standard/yellow_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPH" = ( +/obj/item/clothing/accessory/jacket/altevian/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPK" = ( +/obj/item/weapon/firework_star/aesthetic, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPO" = ( +/obj/item/clothing/suit/storage/toggle/track, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPQ" = ( +/obj/item/clothing/suit/storage/toggle/labcoat/science, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xPT" = ( +/mob/living/simple_mob/vore/woof/hostile/aweful{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xQd" = ( +/obj/item/device/integrated_electronics/debugger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQi" = ( +/obj/item/weapon/reagent_containers/pill/healing_nanites, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQr" = ( +/obj/item/clothing/under/solgov/utility/army/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQC" = ( +/obj/item/weapon/storage/vore_egg/shark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQE" = ( +/obj/item/ammo_magazine/m9mm/large, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQH" = ( +/obj/item/clothing/accessory/poncho/roles/cloak/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQP" = ( +/obj/structure/closet/l3closet/janitor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQU" = ( +/obj/item/clothing/accessory/scarf/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQV" = ( +/obj/item/clothing/gloves/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQX" = ( +/obj/structure/closet/crate/galaksi, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xQZ" = ( +/obj/item/clothing/under/rank/khi/crg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRn" = ( +/obj/structure/sign/atmos_co2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRr" = ( +/obj/item/integrated_circuit/reagent/storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRC" = ( +/obj/structure/loot_pile/mecha/gygax/dark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRG" = ( +/obj/item/weapon/soap/fire_soap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRJ" = ( +/obj/item/clothing/under/shorts/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRK" = ( +/obj/item/clothing/head/chefhat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xRQ" = ( +/mob/living/simple_mob/vore/aggressive/deathclaw/den{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xRX" = ( +/obj/item/device/laser_pointer/upgraded, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSf" = ( +/obj/item/organ/internal/lungs/skrell, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSu" = ( +/obj/machinery/gear_dispenser/suit/commonwealth, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSv" = ( +/obj/structure/bed/chair/backed_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSw" = ( +/obj/item/clothing/suit/browncoat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSD" = ( +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSH" = ( +/obj/item/paiparts/projector, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSL" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSN" = ( +/obj/item/clothing/under/solgov/service/sifguard/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSP" = ( +/mob/living/simple_mob/glitch_boss_fake{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xSS" = ( +/obj/item/weapon/gun/projectile/p92x/large/preban/hp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xSW" = ( +/obj/item/device/electronic_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTa" = ( +/obj/item/trash/liquidvitamin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTe" = ( +/obj/item/clothing/under/fluff/John, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTk" = ( +/obj/item/weapon/reagent_containers/food/snacks/thecakeslice, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTu" = ( +/obj/item/weapon/surgical/scalpel/manager, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTx" = ( +/obj/item/clothing/under/shiny/leotard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTz" = ( +/obj/item/weapon/gun/energy/sizegun/admin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTE" = ( +/obj/item/weapon/card/id/gateway/snowfield/class3E, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTO" = ( +/obj/item/weapon/reagent_containers/food/snacks/tofukabob, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTR" = ( +/obj/item/clothing/accessory/hawaiian/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTT" = ( +/obj/structure/prop/statue/statue2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xTU" = ( +/obj/machinery/ai_slipper, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xUf" = ( +/obj/item/clothing/head/beret/solgov/fleet/supply, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xUJ" = ( +/obj/item/clothing/suit/storage/solgov/service/army/service, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xUW" = ( +/obj/item/clothing/under/rank/parameduniskirtdark, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xUZ" = ( +/obj/item/ammo_magazine/molniya, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVd" = ( +/obj/item/device/radio/headset/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVg" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/aux, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVh" = ( +/obj/item/toy/plushie/crab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVk" = ( +/obj/structure/lightpost, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVm" = ( +/obj/item/clothing/head/beret/solgov/fleet/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVo" = ( +/obj/item/weapon/cartridge/storage, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVq" = ( +/obj/item/clothing/accessory/tropical/blue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVs" = ( +/obj/item/toy/plushie/siamese_cat, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVu" = ( +/obj/item/weapon/syndie/c4explosive/heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVw" = ( +/obj/item/integrated_circuit/arithmetic/iterator, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVB" = ( +/obj/item/clothing/head/helmet/space/vox/civ/bartender, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVD" = ( +/obj/item/weapon/shield/riot/explorer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVF" = ( +/obj/item/clothing/suit/storage/solgov/service/sifguard/medical/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVN" = ( +/obj/item/weapon/gun/energy/gun/rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVR" = ( +/obj/item/clothing/glasses/eyepatchwhite, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xVT" = ( +/obj/item/clothing/shoes/boots, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xWi" = ( +/obj/item/frame/noticeboard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xWj" = ( +/obj/item/device/electronic_assembly/device, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xWq" = ( +/obj/item/weapon/melee/energy/sword/color, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xWL" = ( +/obj/structure/bed/chair/comfy/beige, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xWR" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/cheap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXa" = ( +/obj/item/clothing/glasses/welding, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXe" = ( +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXg" = ( +/obj/item/clothing/under/suit_jacket/really_black/skirt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXi" = ( +/obj/item/weapon/reagent_containers/food/snacks/corn_dog, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXj" = ( +/obj/item/weapon/circuitboard/washing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXn" = ( +/obj/item/clothing/head/pin/pink, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXx" = ( +/obj/item/clothing/head/helmet/space/void/axis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXy" = ( +/obj/item/weapon/material/armor_plating/insert, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXB" = ( +/obj/item/clothing/under/explorer/utility, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXC" = ( +/obj/item/weapon/grenade/flashbang, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXD" = ( +/obj/item/clothing/under/dress/stripeddress, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXO" = ( +/obj/item/ammo_magazine/m9mmAdvanced/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXS" = ( +/obj/item/clothing/glasses/regular/thin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXV" = ( +/obj/item/device/perfect_tele/one_beacon, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXX" = ( +/obj/item/clothing/head/pilot, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xXZ" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYa" = ( +/obj/structure/prop/prism, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYe" = ( +/obj/item/shield_projector/rectangle/weak, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYf" = ( +/obj/item/clothing/under/teshari/undercoat/standard/worksuit/blackblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYv" = ( +/obj/item/seeds/greengrapeseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYw" = ( +/obj/item/clothing/under/syndicate/tacticool, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYB" = ( +/obj/item/weapon/card/id/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYD" = ( +/obj/item/weapon/gun/projectile/sec/wood, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYF" = ( +/obj/item/seeds/bluespacetomatoseed, +/obj/machinery/portable_atmospherics/hydroponics{ + frozen = 1; + closed_system = 1 + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYI" = ( +/obj/item/ammo_casing/a44/rubber, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYJ" = ( +/obj/structure/salvageable/server_os, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYN" = ( +/obj/item/weapon/coin/verdantium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYO" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYQ" = ( +/obj/item/seeds/rose, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xYX" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xZi" = ( +/mob/living/simple_mob/slime/xenobio/gold{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"xZu" = ( +/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xZE" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/cryoxadone, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xZK" = ( +/obj/item/weapon/disk/nuclear, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xZS" = ( +/obj/item/stack/tile/floor/eris/white/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"xZW" = ( +/obj/item/weapon/stock_parts/motor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaf" = ( +/obj/machinery/artifact_scanpad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yan" = ( +/obj/item/clothing/gloves/ring/material/titanium, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yas" = ( +/obj/item/weapon/book/custom_library/fiction/starsandsometimesfallingones, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaB" = ( +/obj/item/clothing/mask/gas/commando, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaE" = ( +/obj/item/weapon/reagent_containers/food/snacks/muffin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaG" = ( +/obj/item/weapon/firework_star/weather/fallout, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaO" = ( +/obj/item/ammo_magazine/ammo_box/foam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaQ" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "2" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yaR" = ( +/obj/item/weapon/disk/limb/dsi_spider, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ybn" = ( +/obj/item/paint_palette, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ybq" = ( +/obj/item/clothing/suit/storage/solgov/service/army/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ybx" = ( +/obj/item/weapon/storage/box/metalfoam, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yby" = ( +/obj/item/clothing/under/solgov/service/army/command, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ybA" = ( +/obj/machinery/libraryscanner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ybV" = ( +/mob/living/simple_mob/mobs_monsters/clowns/big/blob{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ybZ" = ( +/obj/item/weapon/pen/crayon/marker/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yca" = ( +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/viktor, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycd" = ( +/obj/machinery/dna_scannernew, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycg" = ( +/obj/item/weapon/aiModule/tyrant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycn" = ( +/obj/structure/sign/department/xenolab, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycv" = ( +/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycx" = ( +/obj/structure/closet/lasertag/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycK" = ( +/obj/item/clothing/under/pants/black, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycN" = ( +/obj/item/clothing/under/tactical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycQ" = ( +/obj/machinery/atmospherics/tvalve/digital/mirrored, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycT" = ( +/obj/item/clothing/accessory/medal/silver/unity, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ycX" = ( +/obj/item/clothing/suit/storage/teshari/beltcloak/standard/blue_grey, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydf" = ( +/obj/item/clothing/accessory/solgov/rank/marine/enlisted/e9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydg" = ( +/obj/item/clothing/accessory/armor/armguards/tan, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydl" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydn" = ( +/obj/structure/fence/end, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydq" = ( +/obj/item/weapon/material/snow/snowball, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydr" = ( +/mob/living/simple_mob/animal/giant_spider/carrier{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ydt" = ( +/obj/item/weapon/material/star/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydv" = ( +/obj/item/ammo_magazine/s45lc/empty, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydI" = ( +/obj/item/weapon/rig/pmc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydM" = ( +/obj/item/weapon/reagent_containers/glass/bottle/diethylamine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ydX" = ( +/obj/item/clothing/suit/armor/pcarrier/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeg" = ( +/obj/item/weapon/storage/backpack/roboticist, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yer" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yey" = ( +/obj/item/clothing/accessory/armor/tag/abneg, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yez" = ( +/obj/machinery/smartfridge/produce, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeF" = ( +/obj/item/clothing/under/pants/track/red, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeG" = ( +/obj/item/clothing/accessory/scarf/darkblue, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeJ" = ( +/obj/structure/portal_event/resize/preset_shrink_twentyfive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeO" = ( +/obj/item/clothing/head/wizard/fake/realistic/colorable, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yeP" = ( +/obj/item/clothing/under/shorts/jeans/female, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfd" = ( +/obj/item/clothing/suit/space/void/medical/alt2, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfi" = ( +/obj/item/weapon/stamp/qm, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfC" = ( +/obj/item/weapon/card/id/event/accessset/itg/crew/research, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfG" = ( +/obj/item/stack/tile/floor/eris/white/cyancorner, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfJ" = ( +/obj/machinery/computer/transhuman/resleeving, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfT" = ( +/obj/item/clothing/suit/kimono/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yfY" = ( +/obj/structure/sign/atmos_air, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygb" = ( +/obj/machinery/cell_charger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygi" = ( +/obj/item/weapon/deck/cards/casino, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygk" = ( +/obj/item/clothing/suit/storage/teshari/cloak/standard, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygm" = ( +/obj/item/weapon/bedsheet/ian, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygn" = ( +/obj/structure/closet/secure_closet/hos_wardrobe, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygv" = ( +/obj/structure/bed/chair/sofa/left/yellow, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygy" = ( +/obj/item/toy/figure/vagabond, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ygN" = ( +/obj/item/ammo_magazine/m545saw, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yha" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhd" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag/o10_alt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhi" = ( +/obj/item/weapon/circuitboard/sensors, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhm" = ( +/obj/item/toy/plushie/ipc, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhn" = ( +/obj/item/weapon/storage/belt/security/tactical/amara_belt, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yht" = ( +/obj/structure/door_assembly/door_assembly_eng, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhA" = ( +/obj/item/seeds/potatoseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhD" = ( +/obj/item/toy/plushie/therapy/green, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhU" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhW" = ( +/obj/item/clothing/suit/armor/material/makeshift/durasteel, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yhX" = ( +/obj/item/seeds/cabbageseed, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yie" = ( +/obj/item/weapon/circuitboard/telecomms/bus, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yik" = ( +/obj/item/clothing/under/gsa, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yim" = ( +/obj/item/clothing/suit/storage/hooded/hoodie/yellowtrim, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiv" = ( +/obj/item/weapon/gun/projectile/automatic/serdy/rpd, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiz" = ( +/obj/item/clothing/under/solgov/utility/fleet/officer/engineering, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiA" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "10" + }, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiC" = ( +/obj/item/clothing/head/flatcap, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiE" = ( +/obj/item/clothing/head/helmet/solgov, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiJ" = ( +/obj/machinery/vending/event/clothing, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiK" = ( +/obj/machinery/pda_multicaster, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiO" = ( +/obj/machinery/door/airlock/angled_bay/hatch/security, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiV" = ( +/obj/item/weapon/book/manual/stasis, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yiZ" = ( +/obj/machinery/chemical_dispenser/xenoflora, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjg" = ( +/obj/item/clothing/under/shorts/cshorts/olive, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjh" = ( +/obj/structure/bed/chair/sofa/corp/left, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjq" = ( +/obj/item/clothing/head/hood/winter/cargo, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjw" = ( +/obj/machinery/airlock_sensor/airlock_exterior/shuttle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjB" = ( +/obj/item/clothing/under/rank/security/turtleneck, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjH" = ( +/obj/item/weapon/reagent_containers/food/snacks/mouseburger, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjI" = ( +/obj/item/weapon/reagent_containers/glass/bottle/carthatoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjO" = ( +/obj/item/clothing/glasses/hud/security/eyepatch, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjP" = ( +/obj/item/trash/tgmc_mre, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjQ" = ( +/obj/item/weapon/storage/mrebag/dessert/menu9, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yjV" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykc" = ( +/obj/item/weapon/gun/energy/pulse_rifle, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykd" = ( +/obj/item/weapon/orion_ship, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykh" = ( +/obj/item/clothing/gloves/gauntlets/rig/light/ninja, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yki" = ( +/obj/item/device/multitool/alien, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yko" = ( +/mob/living/simple_mob/metroid/jellybrig{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ykq" = ( +/obj/vehicle/bike/built, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykA" = ( +/mob/living/simple_mob/animal/sif/duck{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) +"ykB" = ( +/obj/machinery/door/airlock/angled_bay/hatch/medical, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykE" = ( +/obj/item/ammo_magazine/ammo_box/b357, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykP" = ( +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/quad, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ykX" = ( +/obj/item/clothing/accessory/armor/helmcover/navy, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yln" = ( +/obj/item/clothing/accessory/cowboy_vest, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylp" = ( +/obj/structure/firedoor_assembly, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylr" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/imidazoline, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yls" = ( +/obj/item/weapon/spell/spawner/darkness, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"yly" = ( +/obj/item/integrated_circuit/trig/secant, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylC" = ( +/obj/structure/door_assembly/door_assembly_mai, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylD" = ( +/obj/item/weapon/reagent_containers/chem_disp_cartridge/grenadine, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylH" = ( +/obj/item/stack/material/void_opal, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylK" = ( +/obj/item/weapon/storage/box/syringegun, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylU" = ( +/obj/item/projectile/temp, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylW" = ( +/obj/item/weapon/cell/device/weapon/recharge/alien/omni, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ylZ" = ( +/obj/item/weapon/paper/petrification_notes, +/turf/simulated/fitness{ + icon_state = "vault" + }, +/area/survivalpod) +"ymd" = ( +/mob/living/simple_mob/humanoid/pirate/shield/machete{ + ai_holder_type = null + }, +/turf/simulated/floor/atoll, +/area/survivalpod) + +(1,1,1) = {" +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +"} +(2,1,1) = {" +brz +qaL +vOT +eWc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ssz +bHj +qOs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +kwr +ebu +ebu +ebu +ebu +ebu +bkG +lqD +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +tek +tek +tek +tek +tek +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(3,1,1) = {" +brz +cEy +vOT +gHP +uKc +laV +vPU +uBg +jSL +kny +jXL +jVT +awJ +xVN +lOC +hBu +vch +rOh +pYS +fEb +kSu +hlO +fWs +ghb +qBP +uQf +vOT +ykc +adt +kQw +nmd +lzU +jmX +dGI +vOT +vOT +vOT +vOT +vOT +mDr +bbQ +iWV +vOT +vOT +wlT +vOT +azl +vOT +skl +vOT +msU +vOT +nZP +vOT +upK +vOT +hYk +vOT +ctb +vOT +tbE +vOT +dxE +vOT +jbb +vOT +daa +vOT +qta +vOT +rgR +vOT +wBo +vOT +vOT +vOT +prp +qCU +cCQ +cPs +wfC +ttI +vWa +uMT +oXv +luq +osq +nLE +kJu +rKA +dpU +jYq +xoY +wSs +uKo +vap +bXj +aqC +rvH +pan +lnF +tWG +rnH +vFt +qeg +wwr +api +pQL +oXS +kCX +uBn +nLD +odz +vOT +vOT +nKw +mOA +vOT +vOT +vOT +ebu +ebu +ebu +lLX +ebu +aVy +ebu +aqU +ebu +jrK +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +leu +ebu +ebu +ebu +ebu +tek +fqy +wzs +pAU +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(4,1,1) = {" +brz +vOT +vOT +vOT +vOT +mYN +jPx +vOT +vOT +wHf +vOT +vOT +vOT +vOT +fwj +vOT +xiz +vOT +vOT +vOT +aFh +pmc +pOZ +ind +sYw +tqn +vOT +vSh +uwt +vOT +kHr +rLl +caX +fcU +vOT +vOT +vOT +vOT +vOT +cfs +sRn +rWK +vOT +vOT +vOT +vOT +fKv +vOT +ldR +vOT +gTY +vOT +iWj +vOT +bOa +vOT +ecC +vOT +hIP +vOT +eIb +vOT +gJg +vOT +cov +vOT +rjw +vOT +blu +vOT +hcq +vOT +mvv +vOT +vOT +vOT +gNn +xkw +nsi +bMf +snU +sfd +sjs +rLk +vOT +hGV +dHt +aWQ +gCM +xaa +fum +rzF +thT +vOT +phF +vOT +gmk +djQ +tEf +smY +ldt +dwp +pXn +vOT +eDy +wmu +jLB +dAh +nPx +vOT +vOT +vOT +vOT +vOT +vOT +jBQ +fMl +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +hPZ +duk +ebu +tKE +ebu +xlR +ebu +hOA +mWH +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +wdu +ebu +ebu +ebu +qnt +hhW +ebu +ebu +ebu +ebu +tek +ebu +pwL +qvK +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(5,1,1) = {" +brz +vOT +vOT +iZR +azD +vOT +bAx +jIq +vOT +wPv +fey +dUN +jrG +wxH +vOT +pAL +npO +ihb +rAy +gKZ +lVy +nnu +fev +pRD +dVo +nBx +wch +dDH +lAc +jqI +bnw +ber +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ssz +bHj +qOs +vOT +vOT +vOT +vOT +evA +vOT +eDc +vOT +bSb +vOT +rcS +vOT +gdR +vOT +fFM +vOT +qKn +vOT +gHU +vOT +vOT +vOT +kYD +vOT +hsK +vOT +cQG +vOT +nIe +vOT +vOT +vOT +vOT +vOT +wIp +vOT +vOT +nJa +daT +vOT +qMV +ogh +vOT +wxL +mFM +ovW +vOT +muk +kXn +kya +vOT +vOT +bfR +vOT +fPu +vOT +iZZ +oxK +vOT +sJO +vOT +vOT +vOT +qPA +vnU +shr +gqF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fSY +hlc +ebu +eHv +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +bii +ebu +xgA +jNX +ebu +nfu +ebu +ebu +ebu +eCT +pjK +ebu +ebu +ebu +oSk +ebu +ebu +ebu +ebu +xxe +rzH +uBJ +lKG +ebu +ebu +ebu +ebu +icZ +nQQ +ebu +ebu +foC +kAL +ebu +ebu +bEL +ebu +ebu +ebu +ebu +ebu +ekO +ebu +ebu +ebu +ebu +tek +ccD +tkh +hKB +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(6,1,1) = {" +brz +vOT +vOT +vOT +vOT +fFO +vOT +vOT +vOT +vOT +eHh +vOT +kJj +vOT +tqX +vOT +sVY +vOT +vOT +lTI +qRe +hEF +vOT +qoI +mxf +cID +dZT +xja +vOT +upi +khF +svZ +dGb +xEc +vOT +vOT +vOT +vOT +vOT +mDr +pdO +iWV +vOT +vOT +vOT +vOT +xFd +vOT +xFw +vOT +rXZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wpu +vOT +hmu +vOT +cyG +vOT +feu +vOT +rtG +vOT +wnn +vOT +vOT +vOT +acv +vOT +vOT +jlE +vOT +vOT +hyF +aOJ +vOT +xYI +mOt +vOT +vOT +ktA +umF +seu +vOT +vOT +aKG +vOT +wnc +vOT +vOT +nqL +vOT +vOT +vOT +vOT +vOT +qjO +njv +qPL +pbJ +vOT +vOT +vOT +vOT +vOT +vOT +fhK +iZI +vOT +vOT +vOT +ebu +eaW +ebu +rDz +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +uVB +ebu +vRv +ebu +ebu +bnk +ebu +ebu +ebu +goJ +kLC +gNy +ebu +ebu +qKx +ebu +ebu +ebu +ebu +xJy +vbE +oaY +jST +ebu +ebu +ebu +ebu +eJD +tGj +ebu +ebu +kbA +ddH +ebu +ebu +gVs +fgG +aAu +ebu +qpZ +ebu +jDP +ebu +ebu +ebu +ebu +tek +pyV +rUT +ucH +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(7,1,1) = {" +brz +vOT +vOT +fNN +rys +vOT +vOT +hkt +vOT +dkL +wEB +hKU +pNr +tyH +sWs +tuA +ovP +spY +gPZ +vOT +ctp +qmJ +vOT +upe +jSH +nQT +fDv +lLD +tuM +kxj +vOT +jAv +lFg +ffa +vOT +vOT +vOT +vOT +vOT +cfs +sRn +rWK +vOT +vOT +hmL +vOT +gkJ +vOT +vOT +vOT +iMN +vOT +kkc +vOT +kZu +vOT +vcw +vOT +gQt +vOT +oQI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gsw +vOT +cdB +vOT +vOT +vOT +vOT +vOT +kRs +vOT +vOT +hQC +vOT +vOT +oyM +vOT +vOT +vOT +obm +vOT +vOT +vPk +vOT +vOT +vOT +vOT +pkM +vOT +vOT +vOT +vOT +fRn +vOT +vOT +vOT +vOT +vOT +fTD +gUI +diy +gtm +vOT +vOT +vOT +vOT +vOT +vOT +gPu +vOT +vOT +vOT +vOT +ebu +wAM +ebu +ydr +vps +sjB +ebu +ebu +ebu +mvT +ebu +ebu +ykA +ebu +lzc +ebu +ebu +ebu +ebu +ebu +ebu +mTv +ebu +ebu +ebu +ebu +vqU +ebu +ebu +ebu +ebu +uuu +ihU +cQK +sBR +mZi +ebu +ebu +ebu +qCQ +gSz +ebu +ebu +lkM +jgY +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dVy +ebu +ebu +ebu +ebu +tek +pMq +pNj +jfq +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(8,1,1) = {" +brz +vOT +vOT +vOT +vOT +lbz +vOT +vOT +vOT +udX +vOT +vOT +faf +vOT +vOT +eUH +vOT +vOT +vOT +niA +uOB +ulK +vOT +tpE +mrR +vOT +vOT +vOT +vOT +vOT +vOT +jxN +vOT +tnR +vOT +vOT +vOT +vOT +vOT +jxt +ngc +mZA +vOT +vOT +vOT +vOT +elv +vOT +sFv +vOT +kKk +vOT +gHu +vOT +irv +vOT +eKg +vOT +bdh +vOT +vOT +vOT +suB +vOT +pzb +vOT +lbg +vOT +gJn +vOT +rIo +vOT +vOT +vOT +vOT +vOT +uig +vOT +vOT +gYD +vOT +vOT +vOT +vOT +vOT +vOT +gfp +vOT +vOT +tFo +vOT +vOT +vOT +vOT +lYG +vOT +vOT +vOT +vOT +rzf +vOT +vOT +vOT +vOT +vOT +anE +ajL +uPt +rMc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +tin +ebu +myl +lDN +eCF +ebu +ebu +ebu +jdq +ebu +ebu +vwL +ebu +lNI +ebu +bdX +ebu +ebu +ebu +ebu +dAa +ebu +ebu +ebu +ebu +joa +ebu +ebu +ebu +ebu +ebu +ebu +fwK +ebu +ebu +ebu +ebu +ebu +aHY +tNb +ebu +ebu +jlI +jTu +ebu +ebu +ebu +xdR +ebu +xRQ +ebu +ebu +mcm +ebu +ebu +ebu +ebu +tek +sqB +cwl +tON +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(9,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rcB +aEu +vOT +vOT +rHf +vOT +eOa +lRi +utR +wKi +sWZ +erg +gwY +vOT +jls +joD +ddi +vOT +vOT +vOT +vOT +vOT +phR +lYX +jRj +vOT +vOT +vOT +vOT +cqq +vOT +dlx +vOT +fVg +vOT +vOT +vOT +vOT +vOT +mUP +vOT +vOT +vOT +cMm +vOT +bYX +vOT +kay +vOT +aYZ +vOT +gpV +vOT +cxy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +baN +vOT +vOT +vOT +vOT +vOT +vOT +nNh +vOT +vOT +rBy +vOT +vOT +vOT +vOT +rBA +vOT +vOT +vOT +vOT +fMz +vOT +vOT +vOT +vOT +vOT +vOT +vZL +fmC +hnG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +kmu +ebu +aZr +aOW +skF +lWT +ebu +ebu +cUS +ebu +mAM +ovG +ebu +tSB +ebu +kFU +ebu +ebu +ebu +ebu +tfc +ebu +ebu +ebu +ebu +eZe +ebu +ebu +ebu +ebu +ebu +ebu +jYF +vJk +fPl +ebu +ebu +ebu +osN +ebu +ebu +ebu +ebu +tKt +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +bcZ +ebu +ebu +ebu +ebu +tek +ebu +smh +kth +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(10,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dfJ +vOT +vOT +vOT +ltR +vOT +vOT +vOT +vOT +vOT +cXP +ppQ +aDD +vOT +vOT +vOT +vOT +vOT +ncb +eaf +ttN +vtR +afM +jwc +vOT +pjR +vOT +vOT +vOT +kxX +vOT +wIi +vOT +wwc +vOT +gFj +vOT +iZH +vOT +pBG +vOT +oHd +vOT +pbF +vOT +pwJ +vOT +lAz +vOT +uhx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sWU +vOT +vOT +vOT +vOT +vOT +vOT +uoD +vOT +vOT +xha +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tAS +lBT +flg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +gXO +ebu +iYe +qFo +fNA +ebu +ebu +ebu +ugo +ebu +ebu +qgl +ebu +lPT +ebu +ebu +ebu +ebu +ebu +ebu +gQB +nGq +ebu +ebu +ebu +iBu +ebu +ebu +ebu +ebu +ebu +ebu +vjB +ebu +ebu +ebu +ebu +ebu +eRH +ebu +ebu +ebu +ebu +dMX +ebu +ebu +nNj +ebu +vUY +ebu +ebu +ebu +uEt +ebu +ebu +ebu +ebu +tek +ssi +roK +iKu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(11,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xBs +vOT +vxf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kWU +sZQ +vzk +vOT +nui +vOT +fDh +vOT +vOT +vOT +jOv +vOT +vOT +vOT +vOT +vOT +cfC +vOT +knh +vOT +tBs +vOT +nNs +vOT +vOT +vOT +xzS +vOT +hLs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +szd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vHS +xxo +kMk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +gfa +ebu +ebu +ebu +ebu +ebu +bIF +ebu +ebu +guX +ebu +dUn +mjH +vgD +ebu +ebu +ebu +ebu +lFb +eAo +ebu +ebu +ebu +xOI +ebu +ebu +ebu +ebu +ebu +ebu +lRV +nHk +ebu +ebu +ebu +ebu +wdn +ebu +ebu +tai +ebu +kgE +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +gtt +ebu +ebu +ebu +ebu +tek +vdt +bam +ijQ +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(12,1,1) = {" +brz +rCc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cPF +jCp +gOs +vOT +vOT +vOT +flw +vOT +vOT +vOT +vnN +vOT +vOT +vOT +vcH +vOT +snD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bQM +vOT +num +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aww +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +plw +imz +axS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +rlw +kWo +ebu +ebu +ebu +ebu +drS +ebu +ebu +jwv +ebu +rYh +ebu +ebu +ebu +ebu +ebu +ebu +aAM +xSP +hEw +ebu +ebu +hoT +eTV +iGG +nQq +ebu +ebu +ebu +dbI +pAu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +qtS +ebu +xZi +ebu +ebu +dUB +pIY +ebu +ebu +ebu +ebu +eDH +iNP +cve +wkX +ebu +tek +kIl +xfn +ebu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(13,1,1) = {" +brz +vOT +vOT +rtO +oPk +dkc +jWJ +oLP +vOT +qmU +xfV +fBK +phS +orb +sLE +pVD +eQm +vhO +nKd +mVY +aSH +hIV +mAH +fdl +jXS +bVm +hLJ +tYb +dRV +rYJ +tKP +wSp +roS +ajt +ykP +eZx +tSi +mLa +gYq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bbX +vOT +jqV +vOT +vOT +vOT +jur +vOT +xBh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +paR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iKK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +fNF +ebu +eEO +qRP +mUn +jPf +ebu +ebu +rsY +ebu +ebu +cji +ebu +sLO +fvE +ebu +ebu +dol +ebu +ebu +uIU +ebu +ebu +ebu +ebu +dHA +pLI +ebu +ebu +ebu +ebu +ebu +qVf +nYR +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dhI +ebu +dIu +ebu +ebu +rlP +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +tek +tek +tek +tek +tek +tek +tek +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(14,1,1) = {" +brz +vOT +vOT +vOT +dJV +ejI +vOT +vOT +vOT +eZR +xux +hMI +cKR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fAu +spm +fxi +aHG +amK +oCo +jGy +tjz +pfK +vOT +vOT +vOT +vOT +igp +kNi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kCG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sVA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +utw +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +hNE +ebu +pky +vBZ +ebu +ebu +ebu +ebu +gFg +ebu +fek +skS +ebu +lUO +ebu +ebu +ebu +ndW +ebu +ebu +ebu +ebu +ebu +ebu +ebu +lIb +rXV +uRE +ebu +ebu +ebu +ebu +tbo +fTN +ebu +ebu +ebu +sbl +ebu +bxg +ebu +dua +ebu +buN +ebu +ebu +ouY +nNV +sXf +fFW +uQl +ebu +pHu +ebu +ebu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(15,1,1) = {" +brz +vOT +vOT +cRV +vOT +vOT +uKs +rBo +vOT +vOT +gsa +tGL +aYn +jhD +cYC +gWA +gak +dKQ +dWJ +jWQ +yiv +vuN +sag +tUJ +uyf +dku +uwC +hjZ +soZ +wrq +wJS +eGO +xfS +gGe +tPx +nWU +aPJ +aUF +mHC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +grE +ebu +ebu +ebu +ebu +ebu +ldB +ebu +ebu +rnT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +fYs +sGe +qfW +dUw +ebu +alr +ebu +ebu +ebu +ebu +ebu +ebu +kJS +csC +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +jAe +ebu +ebu +glr +ebu +ebu +ebu +ebu +ebu +sAi +vbf +ebu +ebu +ebu +tek +pOz +rFX +ebu +tul +ami +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(16,1,1) = {" +brz +fUy +vOT +neL +sDf +qIW +vOT +vOT +vOT +euc +uOA +iFm +qiJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gTG +gAI +vOT +iMf +vOT +ihM +oqc +rfC +bxP +vOT +vOT +ujD +qVI +oqM +mCM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ett +vOT +pjf +vOT +snc +vOT +aAS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nNf +bWH +wog +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +cBt +eDq +ebu +ebu +ebu +ebu +ebu +ebu +ebu +vcA +ebu +ebu +nYQ +nYQ +nYQ +ebu +ebu +ebu +hDv +ebu +ebu +ebu +ebu +gEa +lKT +cfh +eOt +iEM +ebu +ebu +nWP +cYJ +ebu +ebu +ebu +aYL +ebu +kPt +ebu +ebu +ebu +dXA +ebu +ebu +wrs +atW +anS +ebu +ebu +ebu +xLZ +wbL +ebu +ebu +ebu +tek +vbL +nxp +ebu +uhb +pJT +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(17,1,1) = {" +brz +wAA +vOT +gHI +vOT +tkF +wAl +smX +vOT +vOT +icz +jzv +pDf +fBL +iEL +kzY +laJ +eam +tZy +hZS +mwd +scH +ioV +mmJ +uMt +oFG +upg +xSS +vOT +xEV +lRP +adg +omx +dla +bUY +vOT +oSI +jnD +fiY +vOT +vOT +vOT +vOT +sJA +vOT +vOT +eqH +gAP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tjh +vOT +kzA +vOT +hZx +vOT +aWR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rlH +bHh +tPB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +opI +lcM +kwH +wRP +ebu +ebu +syH +ebu +ebu +lYa +ebu +ebu +nYQ +dPP +nYQ +ebu +ebu +ebu +ukV +ebu +ebu +ebu +ebu +wln +ebu +ebu +ebu +ebu +ebu +ebu +cdN +dmR +rBB +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +mTB +ebu +ebu +ebu +ebu +ebu +ebu +fHS +ebu +xby +ebu +ebu +jmW +ebu +tek +iyH +qSL +ebu +ihR +bxz +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(18,1,1) = {" +brz +qmW +vOT +vOT +idf +rvQ +vOT +vOT +vOT +wMS +rit +ast +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rKM +mSa +sfl +vOT +jRT +vOT +ued +odg +xYD +eoX +vOT +vOT +qgc +bvy +vOT +vOT +vOT +vOT +vOT +vOT +fXn +vOT +vOT +yaQ +bCt +vOT +vOT +eqH +gAP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bkB +vOT +vOT +vOT +qZL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rqL +vOT +vOT +vOT +vOT +uuf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vXa +vqV +dfc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +iyC +kCU +wCF +ebu +ebu +ebu +iFq +ebu +ebu +fnY +ebu +ebu +nYQ +nYQ +nYQ +ebu +ebu +ebu +qmX +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dtl +ebu +ebu +ebu +ebu +hKe +ebu +rLu +ebu +ebu +ebu +pso +ebu +ebu +iGD +ebu +pkg +ebu +aKa +ebu +jvt +ebu +ebu +ebu +ebu +tek +bML +mqb +ebu +dPe +oNt +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(19,1,1) = {" +brz +ueA +vOT +ieB +cDx +gMY +qbs +nbH +vOT +vOT +dTn +vOT +cPe +eqT +ulM +wed +kRc +bdk +qNb +eBY +bmG +eDv +bEF +qDG +lfv +gTb +xBw +vOT +vOT +bXf +uOg +vOT +vOT +nfH +fej +vOT +ocG +vHh +rYy +vOT +vOT +vOT +tsY +vOT +vOT +vOT +yaQ +bCt +vOT +vOT +yaQ +bCt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sNY +vOT +ipa +vOT +tLd +vOT +ppi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tWv +nMO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +nky +ebu +ebu +nYQ +lCY +nYQ +ebu +ebu +ebu +jJE +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +shw +ebu +ebu +ebu +ebu +ebu +ebu +kRL +ebu +imS +ebu +otr +ebu +ebu +frY +ebu +pyE +ebu +bga +ebu +ebu +ebu +ebu +cKA +ebu +tek +fyR +egq +ebu +eIq +lyr +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(20,1,1) = {" +brz +jWY +vOT +pbB +rBq +rsp +vOT +vOT +vOT +vOT +vOT +dAZ +lJd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ifE +uED +rzl +vOT +joo +vOT +pBt +xvC +vOT +tQn +vOT +cOX +vDf +bfl +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +slV +cwt +vOT +vOT +slV +cwt +vOT +vOT +cYa +vOT +nui +vOT +fKv +vOT +xvz +vOT +dNI +vOT +nOP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +wMm +lft +ebu +wkT +cLW +ebu +ebu +ebs +ebu +ebu +ebu +ebu +ebu +nYQ +nYQ +nYQ +ebu +ebu +ebu +oYV +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +fho +ebu +ebu +ebu +ebu +ebu +ebu +qMJ +ebu +abt +ebu +trZ +ebu +ebu +aoI +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +gbK +uKg +ebu +qsK +szT +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(21,1,1) = {" +brz +vOT +vOT +dpX +vOT +bYc +oWe +vOT +vOT +vOT +gCd +eQB +vOT +qGl +oJl +hYS +lZp +oHy +avW +tdy +jKu +dWO +axC +uRN +wQv +rMh +vOT +vOT +vOT +iLZ +dAO +vOT +vGA +cCM +uTF +vOT +hpP +vOT +vOT +vOT +vOT +vOT +omX +vOT +vOT +vOT +vhV +tGR +vll +vOT +vhV +tGR +vll +vOT +bON +vOT +vOT +vOT +evA +vOT +fGP +vOT +dDZ +vOT +vOT +vOT +bUX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +qxS +dmQ +ebu +wjE +iqJ +tue +ebu +iVV +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ewh +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +jzH +clE +piY +jYn +fAS +ebu +ebu +ebu +ebu +ebu +ebu +mqL +ebu +ebu +tUr +ebu +cSP +aiD +uEl +ebu +ebu +ebu +ebu +ebu +ebu +tek +gxk +ebu +ebu +oaS +xcn +kGc +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(22,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mKB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mdB +vOT +vOT +vOT +cNj +mYS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +maU +nPH +lYh +vOT +maU +nPH +lYh +vOT +jBm +vOT +cqq +vOT +xFd +vOT +vTV +vOT +nyR +vOT +gyC +vOT +grc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +rPy +bYm +fbC +ebu +hkT +bkg +ebu +crl +ebu +ebu +ebu +ebu +ebu +ebu +vUV +ebu +ebu +ebu +ebu +qEM +ebu +ebu +ebu +ebu +jYU +ebu +ebu +ebu +ebu +ebu +ebu +kDY +ebu +ebu +ebu +ebu +ebu +ebu +asu +ebu +ebu +ebu +lXc +ebu +ebu +hgA +ebu +ebu +ebu +tto +ebu +ebu +ebu +ebu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(23,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lhn +vOT +vOT +vOT +uhZ +gnw +teM +vOT +uhZ +gnw +teM +vOT +hHN +vOT +elv +vOT +gkJ +vOT +lEL +vOT +vOT +vOT +vUM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +iCR +ebu +oni +whd +uEl +ebu +pUc +ebu +ebu +ebu +ebu +ebu +ebu +eTB +ebu +ebu +ebu +ebu +ffm +ebu +ebu +ebu +ebu +kWW +beR +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +mnv +ebu +ebu +pPs +ebu +eKe +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tek +tek +tek +tek +tek +tek +tek +tek +tek +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(24,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nKT +pYl +vpy +vOT +nKT +pYl +vpy +vOT +vOT +vOT +dlx +vOT +azl +vOT +htF +vOT +hHN +vOT +vOT +vOT +bAd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +qaq +rqM +ebu +gFi +jyP +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +pVy +ebu +ebu +ebu +ebu +wQf +hWf +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +cNM +ebu +ebu +rQl +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +jYU +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(25,1,1) = {" +brz +vOT +vOT +nYs +sMa +ojS +nwM +dnr +vOT +vOT +vOT +xkI +tiP +cLh +eqD +wKM +hUk +cnE +eVr +izR +sph +pka +ptI +bGX +hBw +gbr +miE +lAA +vkg +lxA +agT +vOT +fYh +bYI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kwN +mNb +epf +vOT +kwN +mNb +epf +vOT +vOT +vOT +tbE +vOT +cMm +vOT +jLj +vOT +vOT +vOT +hhk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +tpY +dZS +vVf +oEv +iJO +ebu +iaQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +sMr +ebu +ebu +ebu +ebu +ebu +uqS +ebu +ebu +ebu +ebu +ebu +jGh +ebu +ybV +ebu +sTY +ebu +ebu +ebu +ebu +ebu +ebu +nOX +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(26,1,1) = {" +brz +vOT +vOT +hul +lFt +meW +lyA +bLM +vOT +vOT +vOT +oZw +dQj +cIH +vOT +jtM +xWq +xts +knG +vLP +nVc +ezn +sCH +kVs +sWK +dBx +wCH +lHp +vOT +tsx +ydt +vOT +sff +vob +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lLz +vOT +vOT +vOT +oVt +rNV +iLU +vOT +oVt +rNV +iLU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tgW +vOT +mBq +vOT +vOT +vOT +vIX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +vrG +tXb +gNT +yko +ebu +ebu +cpY +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rxm +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(27,1,1) = {" +brz +vOT +vOT +tVN +jId +cJt +xmf +vOT +vOT +vOT +vOT +ffE +hFY +bsa +pej +iCc +nVb +pYg +vOT +pOr +lNR +vOT +vOT +vOT +qJm +rUg +jAU +vMC +vOT +kAe +vOT +vOT +weF +izj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +yiA +vXo +rFu +vOT +yiA +vXo +rFu +vOT +vOT +vOT +vOT +vOT +yiK +vOT +rUt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +vyd +pCP +jkQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +nZj +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +pGg +ebu +ebu +ebu +ebu +ebu +pXA +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +vqr +ebu +ebu +ebu +kYG +lhj +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(28,1,1) = {" +brz +vOT +vOT +nIX +knN +uFp +pTq +vOT +vOT +vOT +vOT +vad +aix +vOT +dCR +pzK +fQj +oKj +jav +paS +wzH +uHS +vOT +ntB +vOT +vOT +vOT +ejJ +vOT +mqA +kVp +vOT +xHX +kNT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eME +jlz +obD +vOT +eME +jlz +obD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uJg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +lUO +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rpV +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +laj +ebu +ebu +ebu +ebu +ebu +ebu +kim +ebu +ebu +aea +xPT +ciK +oUX +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(29,1,1) = {" +brz +vOT +vOT +rYv +vOT +ckf +cLD +vOT +vOT +vOT +vOT +oap +sBd +ozn +vOT +upo +vOE +atP +vOT +dSt +sUq +nYf +vOT +uIA +oBA +lEF +cDo +vOT +vOT +vOT +ydq +vOT +hSy +kAo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dsz +xNg +cRh +vOT +dsz +xNg +cRh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bOB +cDi +syo +cNg +pOV +guy +kKv +oXL +lYD +kvC +oll +suU +qrC +vRw +rrY +jod +hJL +wIu +npt +aQy +mMi +ygN +hyP +tRB +orK +pJY +csd +dzF +xed +fkk +mYD +bOt +xnr +ezS +oBO +fjq +cPu +vOT +kQW +vOT +jpJ +vOT +vOT +vOT +ebu +ebu +ebu +rTE +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +eXn +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +djU +ebu +ebu +ebu +nIF +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(30,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qcw +iUr +vOT +dlM +gSx +imL +vOT +gbp +gzp +pwT +vOT +qZa +vOT +rVJ +vOT +npJ +vOT +vOT +cjZ +vOT +hmB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mqt +koP +xdf +bUM +uPE +uBt +qsN +jUd +fNY +qTI +vWy +oNJ +poR +rWE +nUu +uKS +bkF +nGY +sJz +gWi +pvq +ovd +qKd +vOT +frX +qBD +ltd +sjg +vvS +qGe +jGS +xrD +bVB +lpM +aGV +hti +eUU +vOT +pDu +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +qxO +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +qke +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +eoC +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +eLB +ebu +ebu +fdZ +hvx +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(31,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vwq +cec +vOT +iwL +eUr +haE +vOT +vOT +cgH +vFq +vOT +kLx +gZH +vOT +vOT +sQX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ich +vOT +hXd +vOT +hPn +vOT +pYV +vOT +qJp +vOT +suT +vOT +yiJ +vOT +dLL +vOT +ahj +vOT +wSx +vOT +tXp +vOT +loK +vOT +sRv +vOT +uuO +vOT +oSK +vOT +gFy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dkg +bso +utn +weS +ykE +mSQ +bNy +vOT +jMh +jbF +gSo +vOT +siw +uvr +djE +npf +vbu +edI +bNz +iLi +lHy +dKF +dCJ +cGu +tyd +nSK +pbP +jhg +tjP +vOT +rqR +tsX +ayT +aQj +bCw +eUy +fxB +vOT +csh +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ttR +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +kzr +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(32,1,1) = {" +brz +vOT +vOT +wYx +xNo +vOT +puP +vOT +eRD +vOT +vOT +vOT +vOT +sDi +vOT +lWo +qbT +nKN +vOT +vOT +vOT +vOT +vOT +mQD +des +vOT +vOT +vrn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lVo +vOT +kCF +vOT +ikb +vOT +rOv +vOT +eZI +vOT +gqo +vOT +gqD +vOT +cIh +vOT +qXe +vOT +bVe +vOT +sAC +vOT +qcY +vOT +sEW +vOT +cXs +vOT +vOT +vOT +jgM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eOX +kxq +gFl +sdW +mQq +fwE +clO +owJ +vOT +qYb +nRX +uNL +etm +uqe +uYc +jAD +tfw +dVf +dXc +vOT +aDO +guw +bJV +qDQ +nZM +xnN +vOT +tIw +eTv +lkZ +sxY +vOT +str +ydv +vOT +vXt +eDA +vOT +ldZ +vOT +nfI +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +eTE +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +pzs +ebu +ebu +kMF +wUN +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(33,1,1) = {" +brz +vOT +vOT +iHW +eqz +vOT +vmN +vOT +kaY +vOT +vOT +vOT +vOT +anl +vOT +cuE +qse +vOT +vOT +vOT +vOT +cWq +vOT +rAZ +tUS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lpZ +vOT +mmg +vOT +hLY +vOT +pdg +vOT +xwu +vOT +hmS +vOT +nVO +vOT +lXo +vOT +awk +vOT +kfr +vOT +hiA +vOT +tzS +vOT +bwd +vOT +xDG +vOT +yez +vOT +ewQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bQy +jDC +dYx +wIg +hxY +hRC +bLJ +nku +okb +iif +moh +grz +dQZ +hmW +kDU +wac +wze +wJu +viG +vIv +ghq +vOT +gHl +vOT +kYJ +oqd +vhC +eus +bHy +hzM +vOT +tLg +ovV +gvd +ugJ +qMm +kZl +vOT +qsi +vOT +hVu +vOT +vOT +vOT +ebu +aUN +ebu +qEh +bGT +ebu +ebu +sgJ +eOW +gDk +ebu +ebu +ebu +ebu +ebu +ebu +kOU +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dCh +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +lhr +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(34,1,1) = {" +brz +vOT +vOT +eBc +wuS +vOT +vOT +vOT +fvB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fwx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hrK +vOT +sEI +vOT +wck +vOT +wCd +vOT +gkr +vOT +gDO +vOT +vgF +vOT +rUM +vOT +udI +vOT +uty +vOT +tfo +vOT +iPD +vOT +bSD +vOT +pCj +vOT +nRt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pZo +bYY +nDi +qfg +mUj +wtx +mNG +hvy +vlr +sxq +vOT +djz +vOT +vOT +vOT +mKG +kYz +wVm +hmv +tZr +gVL +jwb +vOT +oqp +ewI +emk +gzz +llu +jQb +ame +vOT +dYU +boV +prf +wkJ +eBw +vOT +sqD +vOT +wqB +vOT +vOT +vOT +ebu +uEY +ebu +ebu +mpH +ebu +ebu +pGy +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +hXa +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +aXc +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(35,1,1) = {" +brz +vOT +vOT +gfJ +mEg +vOT +cQe +vOT +jib +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nGr +xvH +kfN +vwg +kmC +cid +bNx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xSu +vOT +kjA +vOT +bcz +vOT +ghW +vOT +izl +vOT +lIz +vOT +hcI +vOT +bBy +vOT +nXN +vOT +wRh +vOT +jXu +vOT +iPD +vOT +qJp +vOT +mjR +vOT +dmr +vOT +tap +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vqz +nKp +xhH +yaO +vOT +vOT +cIU +qgE +oLz +lJZ +vOT +vOT +vOT +vOT +vOT +rEz +vOT +vIN +avM +vOT +vOT +gCE +jHv +dFC +vOT +ena +qnr +xmx +qJQ +sKT +vOT +vOT +vOT +kup +vOT +qlO +vOT +fYg +vOT +vOT +vOT +ebu +jSw +ebu +ebu +nnz +ebu +ebu +vwN +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +crs +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +wQZ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ojK +ebu +ebu +ebu +fzV +ebu +ebu +ebu +jrD +hZL +tjR +sot +xKp +ebu +coQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(36,1,1) = {" +brz +vOT +vOT +hWj +eOO +vOT +xTz +vOT +raa +vOT +vOT +bvY +kHp +vOT +cWa +eVS +bcr +vOT +rTT +vOT +vrM +gcR +cja +jHt +jtC +pjU +sfM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +buB +vOT +vOT +vOT +vOT +vOT +jLH +vOT +vOT +vOT +uRk +vOT +qJe +vOT +qDg +vOT +qup +vOT +sKc +vOT +oET +vOT +jLH +vOT +eZI +vOT +vOT +vOT +vOT +vOT +pYb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oZy +emS +edw +csY +aQu +vOT +rDm +mws +vOT +iRz +vOT +vOT +vOT +vcm +jgV +vOT +vOT +ftl +fil +vTu +vOT +cdD +xJO +kuT +pxA +vOT +iWu +vOT +oex +bbE +vOT +brk +tKH +bZg +vOT +wdA +vOT +lol +vOT +vOT +vOT +ebu +gkN +ebu +ebu +vqn +lBF +ebu +aKV +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +wXy +oBX +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +pmX +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dXr +ebu +ebu +ebu +iUt +ebu +nEG +ebu +ebu +ebu +ebu +ebu +lZH +ebu +cKH +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(37,1,1) = {" +brz +vOT +vOT +aPh +chQ +vOT +kES +vOT +sjp +vOT +vOT +cgX +rrd +vOT +pEe +pMI +heC +vOT +wBx +vOT +nPW +jhP +mWo +xXC +ssR +ieS +qGF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tCm +vOT +tlq +vOT +usX +vOT +tzS +vOT +vOT +vOT +dwb +vOT +iVe +vOT +llP +vOT +hNR +vOT +aHi +vOT +eRj +vOT +ghW +vOT +xwu +vOT +myN +vOT +fyp +vOT +cxE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aou +irA +cff +vOT +iZn +vOT +vnM +eyY +vOT +lZc +vOT +vOT +vOT +vOT +wmG +qdg +vOT +iso +vOT +pPR +vOT +xQE +xBW +mrp +uWa +vOT +vOT +nCg +vOT +uDZ +vOT +fet +nhZ +vOT +vOT +gbC +vOT +gKc +vOT +vOT +vOT +ebu +ebu +ebu +ebu +lcI +hkL +ebu +tNL +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +xLd +syB +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dVn +ebu +ebu +ebu +ebu +ebu +imB +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ihI +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +iPc +ebu +mrK +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(38,1,1) = {" +brz +vOT +vOT +dfM +rCA +vOT +nvf +vOT +diU +vOT +vOT +iOY +xVD +vOT +usz +uNC +rzu +vOT +vOT +vOT +eCP +obF +iaR +ibM +sBu +wOp +nRC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iNj +vOT +mqu +vOT +vOT +vOT +qcY +vOT +vOT +vOT +gCZ +vOT +tyh +vOT +fIg +vOT +whm +vOT +wVv +vOT +lWE +vOT +wCd +vOT +gkr +vOT +loz +vOT +wXe +vOT +aMH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wiW +src +oLA +vOT +vOT +vOT +cjN +jlB +vOT +lWu +vOT +vOT +vOT +vOT +vOT +ojP +vOT +uYl +hOK +crc +vOT +lRG +xXO +vOT +vOT +vOT +xUZ +dsU +vOT +wuQ +vOT +vOT +cGI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +xyK +ebu +ebu +vle +ebu +ebu +uUt +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +cXn +sUv +cop +fTQ +iIe +ebu +ebu +ebu +ebu +ebu +ebu +uVE +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +oqX +ebu +ebu +ebu +kUe +ebu +kYF +ebu +ebu +ebu +ebu +ebu +rzC +ebu +gAm +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(39,1,1) = {" +brz +vOT +vOT +lbS +aSB +vOT +sMv +vOT +vOT +vOT +vOT +qSC +ltP +vOT +sWF +vOT +vOT +vOT +vOT +vOT +aDZ +pba +uio +ptR +lcr +lpl +xqi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qhV +vOT +vOT +vOT +loK +vOT +vOT +vOT +jfS +vOT +noU +vOT +mEH +vOT +haN +vOT +uVV +vOT +dLX +vOT +pdg +vOT +izl +vOT +nvk +vOT +cAn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jLS +aSK +qxv +vOT +vOT +vOT +sCi +uAI +vOT +vOT +vOT +vOT +vOT +vOT +iNZ +cUI +vOT +mXv +nsC +vOT +vOT +hVy +vOT +vOT +vOT +vOT +ofV +vOT +vOT +uOL +vOT +rQe +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +kRv +ebu +ebu +eLz +ebu +ebu +cxG +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +dCM +rIU +awO +bCL +kJs +uzl +ebu +ebu +ebu +ebu +ebu +xMm +ebu +ebu +ebu +ebu +ebu +gXs +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ugb +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +mGx +ebu +aal +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(40,1,1) = {" +brz +vOT +vOT +sFt +tIz +vOT +vOT +vOT +vOT +vOT +vOT +lMF +nwN +vOT +iXa +vOT +vOT +vOT +vOT +vOT +aDR +rWL +gIg +mze +mmv +wHT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bOL +vOT +ake +vOT +vOT +vOT +sRv +vOT +vOT +vOT +vxd +vOT +rGx +vOT +uqA +vOT +nHU +vOT +jxO +vOT +jUM +vOT +rOv +vOT +lVS +vOT +rgv +vOT +pvr +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tpQ +nRk +adL +vOT +vOT +vOT +gjF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vwf +vOT +vOT +twe +vOT +boK +vOT +lQU +vOT +vOT +vOT +vOT +vOT +bwX +vOT +thh +vOT +vOT +dPY +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +hoW +ebu +ebu +mGC +hNB +ebu +byF +ebu +ebu +ebu +ebu +ebu +rqa +sPt +ymd +uqm +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +wyz +ebu +ebu +ebu +ukM +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +fRQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(41,1,1) = {" +brz +vOT +vOT +dtd +fTL +vOT +nqj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bVZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sEW +vOT +vOT +vOT +rrt +vOT +rux +vOT +btj +vOT +muz +vOT +fUn +vOT +bBi +vOT +pYV +vOT +kfa +vOT +fRV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +waQ +owP +dqi +vOT +vOT +vOT +iyp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dgW +vOT +ecP +vOT +lRk +vOT +vOT +vOT +vOT +vOT +tAO +vOT +gkj +vOT +vOT +fIE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ogq +ebu +ebu +xoc +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +qkW +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +xri +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(42,1,1) = {" +brz +vOT +vOT +gVk +vOT +vOT +tJz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jui +vOT +vOT +ehG +nYK +vOT +vOT +vjE +vOT +jPM +vOT +syp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bwd +vOT +vOT +vOT +cNS +vOT +uPK +vOT +kQA +vOT +vFh +vOT +oVW +vOT +nnL +vOT +kYU +vOT +bxp +vOT +cAP +vOT +gDs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nFs +tbL +otk +vOT +vOT +vOT +fFA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iEk +vOT +vIF +vOT +lwJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tCE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +hRL +ebu +ebu +dYc +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +xso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(43,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +lic +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uhL +aQA +vOT +vOT +nPN +vOT +luH +vOT +mJG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bSD +vOT +vOT +vOT +qqP +vOT +bJe +vOT +iCG +vOT +pVN +vOT +aNB +vOT +tXw +vOT +waV +vOT +vOT +vOT +mXi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uoK +vOT +vOT +vOT +ftm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gUz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +okE +nLr +aUw +bdp +qFT +idV +oxa +aVx +ebu +uCL +sVw +hLw +voF +uJF +jRf +eYt +mdk +oLf +eSv +ebu +ebu +ebu +ebu +ebu +ebu +ebu +wyQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(44,1,1) = {" +brz +wSP +vOT +xHP +rQJ +vOT +pKd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wer +fWq +vOT +vOT +eLR +vOT +oKt +vOT +qSx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rbj +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +rso +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(45,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eYy +vOT +vOT +pZN +vOT +uhk +vOT +tup +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rFq +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +ndQ +nyp +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +niz +ebu +ebu +wvW +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(46,1,1) = {" +brz +ueA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vDI +vOT +vOT +wqm +vOT +xWR +vOT +fiH +vOT +qsm +vOT +qJy +vOT +yhU +vOT +wbk +vOT +dvB +vOT +pTm +vOT +tKF +vOT +fTM +fii +cbw +vOT +ckA +vOT +njG +vOT +xgu +vOT +abO +vOT +fKc +vOT +llN +vOT +cxF +vOT +fbF +vOT +fCg +vOT +xcC +vOT +bUz +vOT +nHm +vOT +vFp +vOT +kPo +vOT +hih +vOT +lHW +vOT +brZ +vOT +aWf +vOT +gYo +vOT +eXl +vOT +kGR +vOT +eSt +vOT +nvy +vOT +gju +vOT +eCb +vOT +gbJ +vOT +vSq +vOT +wpj +vOT +hAU +vOT +rrq +vOT +xJW +vOT +cDe +vOT +gvc +vOT +ver +vOT +rQo +vOT +iPK +vOT +gFb +vOT +vOT +ebu +ebu +pYT +gti +ebu +ebu +ebu +gVH +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +rso +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(47,1,1) = {" +brz +reS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nsF +vOT +sWT +vOT +iYu +vOT +mJe +vOT +lgH +vOT +eYs +vOT +fxD +vOT +diO +vOT +kJH +vOT +vMw +vOT +rYk +kqG +ggh +vOT +mJN +vOT +cso +vOT +vyj +vOT +lqN +vOT +rWf +vOT +oaL +vOT +mfw +vOT +lFQ +vOT +hbX +vOT +olS +vOT +vOT +vOT +iJL +vOT +hhZ +vOT +huP +vOT +oir +vOT +nHW +vOT +qNM +vOT +lxD +vOT +oHs +vOT +eBE +vOT +ujW +vOT +uBC +vOT +qfI +vOT +lSQ +vOT +ewN +vOT +kVW +vOT +xzF +vOT +etA +vOT +ndr +vOT +tos +vOT +sOj +vOT +pdf +vOT +vOT +vOT +nqO +vOT +esr +vOT +otG +vOT +rSL +vOT +vOT +ebu +ebu +hoM +ebu +ebu +ebu +ebu +wZu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +rso +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +boy +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(48,1,1) = {" +brz +gBE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pba +lcr +sBu +kmC +vOT +vOT +pnG +vOT +rcd +vOT +dto +vOT +mtS +vOT +yjw +vOT +niL +vOT +oqy +vOT +bzS +vOT +scq +vOT +olo +vOT +apo +cat +aVw +vOT +pnh +vOT +pml +vOT +rkl +vOT +djw +vOT +dWS +vOT +gAj +vOT +fPJ +vOT +hCo +vOT +sMY +vOT +kYn +vOT +fam +vOT +vPw +vOT +lVl +vOT +vuK +vOT +vOT +vOT +bVJ +vOT +vOT +vOT +esQ +vOT +iBA +vOT +wtD +vOT +gbs +vOT +vOT +vOT +xEL +vOT +hDh +vOT +pQg +vOT +hFh +vOT +olj +vOT +gpQ +vOT +bdu +vOT +bHo +vOT +uTf +vOT +qST +vOT +uNU +vOT +eHo +vOT +qYn +vOT +fQs +vOT +mfr +vOT +vOT +ebu +ebu +sCN +ebu +ebu +ebu +ebu +vti +bli +fGE +ebu +ebu +ebu +ebu +ebu +ebu +rso +rso +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +cIV +ebu +frM +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(49,1,1) = {" +brz +muO +vOT +cAF +hXD +rzT +wER +lHD +sVL +ixP +rIQ +dRu +cup +iiH +vOT +gIg +vwg +jHt +xXC +vOT +vOT +cnO +vOT +oaT +vOT +mzs +vOT +trs +vOT +onc +vOT +eVc +vOT +uzI +vOT +szJ +vOT +pws +vOT +roi +vOT +jkt +hsO +wJZ +vOT +ygb +vOT +uCV +vOT +bWM +vOT +voA +vOT +qHX +vOT +pgu +vOT +hjh +vOT +mHt +vOT +hFJ +vOT +hFb +vOT +eAu +vOT +vOT +vOT +pyQ +vOT +vOT +vOT +dQu +vOT +vOT +vOT +kFT +vOT +xCo +vOT +cUl +vOT +ukO +vOT +dSr +vOT +uvB +vOT +vOT +vOT +kJg +vOT +qAb +vOT +mUd +vOT +vXy +vOT +nxQ +vOT +cZa +vOT +sfB +vOT +fLt +vOT +ahV +vOT +oOk +vOT +ndq +vOT +ern +vOT +aHI +vOT +vOT +vOT +vOT +ebu +ebu +oLU +ebu +ebu +ebu +ebu +aFq +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +wLl +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +aaH +ebu +kLA +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(50,1,1) = {" +brz +tOE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ybx +gcR +ybx +keu +vOT +vOT +stD +vOT +jVv +vOT +ciR +vOT +eBq +vOT +vOT +vOT +cHI +vOT +oqi +vOT +nJq +vOT +oZa +vOT +aHo +vOT +tUd +oQN +vOT +vOT +qMp +vOT +odo +vOT +lvv +vOT +orO +vOT +dwr +vOT +vYg +vOT +bxc +vOT +uYM +vOT +yfJ +vOT +vOT +vOT +kxT +vOT +ycd +vOT +vOT +vOT +mEM +vOT +lHG +vOT +fqW +vOT +vOT +vOT +htE +vOT +qdb +vOT +niT +vOT +vOT +vOT +oXo +vOT +uvZ +vOT +teD +vOT +qOl +vOT +hqU +vOT +uis +vOT +fOn +vOT +ktd +vOT +ujr +vOT +vOT +vOT +gyH +vOT +oAk +vOT +vOT +vOT +crM +vOT +vOT +vOT +pdd +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +vpQ +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +rso +rso +rso +rso +rso +rso +rso +rso +rso +rso +ebu +ebu +ebu +ebu +ebu +ebu +ebu +jXz +ebu +end +ebu +eYR +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(51,1,1) = {" +brz +hro +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eRD +cBu +mTF +wmi +vgt +bHy +llu +ena +vOT +vOT +dQP +vOT +okM +vOT +tOP +vOT +paW +vOT +rQi +vOT +yaf +vOT +vOT +vOT +vIR +vOT +gAa +vOT +baC +vOT +pDw +fYQ +vOT +vOT +jsD +vOT +cAQ +vOT +hxK +vOT +pDi +vOT +bac +vOT +qMi +vOT +xOF +vOT +hXZ +vOT +mGF +vOT +imx +vOT +eXg +vOT +aIv +vOT +vOT +vOT +vOT +vOT +pRX +vOT +lOa +vOT +ozC +vOT +kaj +vOT +wFV +vOT +vOT +vOT +bDF +vOT +jwV +vOT +uJC +vOT +iuN +vOT +puY +vOT +dEa +vOT +hFl +vOT +vFg +vOT +bVi +vOT +fWm +vOT +jZr +vOT +aQg +vOT +vOT +vOT +mny +vOT +nwP +vOT +orH +vOT +vOT +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +tnN +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(52,1,1) = {" +brz +snd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kaY +sbS +mOs +sYs +btY +vvS +tjP +eTv +vOT +vOT +wHF +vOT +xOM +vOT +fOU +vOT +xTU +vOT +vOT +vOT +uwm +vOT +wlK +vOT +eRJ +vOT +iNv +vOT +vOT +vOT +mjD +kOQ +vOT +vOT +mOO +vOT +nus +vOT +yiZ +vOT +awH +vOT +aIW +vOT +jXE +vOT +gAR +vOT +vkX +vOT +lEr +vOT +qHT +vOT +oeE +vOT +vOT +vOT +vOT +vOT +gRU +vOT +vOT +vOT +vOT +vOT +vWq +vOT +kzi +vOT +kje +vOT +ltJ +vOT +jWZ +vOT +jPN +vOT +vOT +vOT +ivE +vOT +nYZ +vOT +lql +vOT +pDk +vOT +sSV +vOT +jiv +vOT +bjt +vOT +ejP +vOT +lvl +vOT +bcI +vOT +vOT +vOT +vOT +vOT +eRu +vOT +dcZ +vOT +vOT +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +ebu +brz +"} +(53,1,1) = {" +brz +tbR +vOT +uer +rRu +fIR +bls +uOC +tRr +vOT +vOT +fvB +pQt +hxT +nXt +mRa +pXn +csY +vOT +vOT +vOT +idP +vOT +lHC +vOT +vOT +vOT +kIs +vOT +nFv +vOT +mWm +vOT +sYS +vOT +uKR +vOT +don +vOT +vOT +vOT +keH +tlg +vOT +vOT +vOT +vOT +sWV +vOT +lMO +vOT +vOT +vOT +aRU +vOT +dGo +vOT +nbV +vOT +ler +vOT +vOT +vOT +vFD +vOT +vOT +vOT +fuZ +vOT +vOT +vOT +vOT +vOT +ulp +vOT +cSt +vOT +vOT +vOT +dxP +vOT +pvU +vOT +xcQ +vOT +miX +vOT +jUh +vOT +sdq +vOT +glu +vOT +lZC +vOT +vOT +vOT +mHA +vOT +aCd +vOT +wZo +vOT +gfS +vOT +ngA +vOT +oqo +vOT +vsM +vOT +jzm +vOT +rGC +vOT +xGb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(54,1,1) = {" +brz +qZU +vOT +vOT +vOT +vOT +vOT +vOT +jwT +vOT +vOT +nXt +vOT +diU +eyV +bPN +rnH +yaO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tfy +vOT +vOT +vOT +cCR +vOT +hbh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +agP +vOT +cHK +vOT +vOT +vOT +pla +vOT +adX +vOT +lnh +vOT +kpM +vOT +vOT +vOT +vOT +vOT +gNq +vOT +sDW +vOT +hCh +vOT +qlf +vOT +whQ +vOT +auO +vOT +oUQ +vOT +pAB +vOT +ybA +vOT +vOT +vOT +cwi +vOT +cmQ +vOT +cCL +vOT +cOl +vOT +cXc +vOT +ftV +vOT +ggL +vOT +mQI +vOT +lOh +vOT +izF +vOT +xpT +vOT +mNL +vOT +vOT +vOT +vOT +vOT +kMM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fQD +mOJ +lkX +vOT +oUP +brz +"} +(55,1,1) = {" +brz +noB +vOT +vOT +vOT +vOT +vOT +vOT +dbE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wsR +vOT +oQc +vOT +hrd +vOT +exC +vOT +vBz +vOT +vOT +vOT +xCq +vOT +vOT +vOT +vOT +vOT +iSG +vOT +vOT +vOT +dOT +vOT +kUM +vOT +rUc +vOT +pYH +vOT +ppV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ngZ +vOT +iDz +vOT +fSk +saY +xzf +nsM +vOT +mdz +iTQ +bTG +bRw +hen +gCq +miC +gTt +ouV +xWL +wKs +lNn +eXu +lmh +gug +tGy +tJK +pOA +uci +eZv +vNB +bQd +bMQ +bZR +ooX +fvz +rSH +mlm +goG +gPB +jRA +bAE +nQw +gLB +iRo +ahM +vOT +xVk +vOT +peA +vOT +wZU +vOT +paj +vOT +mZB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iqb +rGn +tGU +vOT +uGC +brz +"} +(56,1,1) = {" +brz +bGh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +toD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tGT +vOT +toE +vOT +hUv +tXh +hrS +noi +vOT +xtu +vOT +qcX +mVM +tZM +soP +gbu +vtY +xch +fZR +fuF +tiS +aPm +xLv +xsM +cGa +iGa +bEM +wsZ +pPt +mNX +psO +icW +pmp +myw +qkI +rGT +adj +lLb +ygv +fAR +oNi +ubI +qwK +tPV +fsX +vOT +ebF +vOT +kBF +vOT +tiV +vOT +hfE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hDp +dfl +whw +vOT +dCD +brz +"} +(57,1,1) = {" +brz +qTh +vOT +xIz +lLw +muf +knD +bIQ +qdM +hqf +cfo +xIP +jlO +fhI +aAq +wuC +gsu +uWq +kbz +ayE +wRs +dQB +dCf +ydI +nro +vOT +tFR +mSK +chU +jWc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +avr +vOT +hkz +utc +crG +vOT +vOT +xNk +vOT +hFs +fhq +keC +eWi +jHX +nGE +wus +hGH +tIT +fBy +nuF +wEQ +vOT +mrc +cyB +iWD +bjc +wUJ +vOT +ewf +maH +vOT +ibO +yjh +bqq +hAv +gcM +vOT +xmP +puX +vOT +cQq +abg +vOT +vOT +tIf +vOT +fnN +vOT +iTF +vOT +uce +vOT +gjI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aVe +lrg +lPi +vOT +eMn +brz +"} +(58,1,1) = {" +brz +vOT +vOT +gAB +vOT +kBy +jzE +tKI +jXJ +raP +oln +bUT +ndN +eVQ +tuy +eqi +bOd +miv +pze +caj +pYI +vOT +vOT +rTj +vOT +vOT +vOT +iDE +vTc +uBY +vOT +vOT +vOT +vOT +two +mpb +uYT +pmz +ltS +eLO +aHM +uKB +wZQ +lTt +lJN +nfv +pTn +eCz +pDO +aiI +wpd +hrO +rFA +gpu +bhL +jfj +cCr +jAI +qyj +pjw +cKf +gXu +ddy +ctX +qRg +xRX +iJT +gzb +wBw +tME +uJi +jcQ +reZ +oYT +lJI +puM +udU +mzV +iMZ +wee +hVg +lcC +ilv +aDV +dyq +vva +dfO +uva +dhN +xfR +nnE +uUB +rXf +aJo +leg +uEd +rwh +vOT +cvF +fzw +ivH +oNB +wGM +tUh +nXh +sHE +njg +vml +fut +qAa +tdY +fcS +trQ +iWv +xER +vOT +vOT +vOT +gfx +vOT +aOY +qPr +fmS +vOT +vOT +gXf +vOT +xSv +iri +sWJ +ihW +thR +bQL +jbR +vvI +cJY +vOT +ovn +soY +vOT +sXj +bXC +ifc +meX +iNx +vOT +qmP +jSx +vOT +rta +cJQ +vOT +pcl +sIF +vOT +sSW +wlZ +vOT +gQE +fBF +vOT +vOT +jwq +vOT +sMJ +vOT +jMB +vOT +ydn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vpI +tSs +fDw +vOT +lRL +brz +"} +(59,1,1) = {" +brz +tjV +vOT +vOT +vOT +vOT +vOT +vOT +xel +jKa +vOT +vOT +vOT +vji +vOT +vOT +vOT +uCo +kGZ +vOT +jwm +vOT +vOT +pRt +vOT +vOT +vOT +mQc +vOT +vOT +vOT +vOT +vOT +vOT +plg +vOT +vOT +vOT +vOT +wSj +vOT +evg +vOT +fKF +pFd +vOT +qCC +qnD +pGN +vOT +blr +vOT +vOT +vOT +qny +qVD +vOT +qjg +vOT +vOT +lQl +nXH +vOT +vOT +uKi +vOT +tjs +rqe +vOT +jBB +yki +vOT +xXV +eqn +vOT +vOT +vOT +vOT +xMs +vOT +vOT +vOT +ldj +vOT +vOT +vOT +vOT +vOT +vOT +gZK +iCg +fNH +dQW +qhu +uAj +vOT +xVu +vOT +tPJ +xTu +aRl +jao +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mmI +vOT +hNb +rnY +iFU +vOT +vOT +din +vOT +dBW +qws +xCs +oKy +jdz +aCA +lYW +lNs +tpZ +vOT +tLr +tdm +vOT +gNm +vGX +aJZ +jCf +hnc +vOT +rRW +xAL +vOT +lLW +vOT +vOT +rVm +rpI +vOT +edb +qcu +vOT +bSG +ddc +vOT +vOT +ivQ +vOT +cDP +vOT +dHp +vOT +jun +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nrA +mTM +wTx +vOT +bNV +brz +"} +(60,1,1) = {" +brz +cXv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +reK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tcu +vOT +vOT +vOT +vOT +vOT +dvb +vOT +vOT +vOT +bCp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jYg +vOT +vOT +vOT +vOT +kIm +vOT +vOT +lZr +vOT +vOT +vOT +vOT +vOT +vOT +dJq +uxF +vOT +vOT +vOT +vOT +jfG +tpo +vOT +vOT +orW +vOT +lwq +vOT +vOT +vOT +vOT +vOT +gHz +uJi +vOT +vOT +vOT +vOT +hst +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +koy +kyS +vOT +fpL +vOT +vOT +hUZ +vOT +gOI +qHS +pCT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hXH +cYb +pjI +vOT +jzG +brz +"} +(61,1,1) = {" +brz +qsB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aMy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dcv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +czR +vOT +vOT +vOT +vOT +kNC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iMp +xwm +vOT +vOT +vOT +vOT +noG +wKS +vOT +vOT +dAp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dWF +fJJ +vOT +vOT +vOT +vOT +vyo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vsC +vOT +tRv +vOT +vOT +vOT +vOT +auG +clD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ovX +vGl +kkU +pTY +biO +jaB +exJ +eWf +umz +qYD +bci +byR +cTQ +bAh +ewB +jVM +giP +iRm +wkN +frq +jyy +fSG +qXA +rTt +kPh +leZ +cZC +sgr +uUC +aeO +lqx +wGM +eot +nkE +eHt +hQB +vzM +apr +iDj +coh +oTB +iTz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +poY +wOK +yls +vOT +pUR +brz +"} +(62,1,1) = {" +brz +qxK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uti +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xBg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cnV +dJv +vOT +vOT +vOT +vOT +gzD +vOT +vOT +vOT +iMO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uNI +aKh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bPw +vOT +uud +vOT +vOT +vOT +vOT +ltL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOG +sEL +gDn +rhg +nbX +svr +hos +wHC +xrQ +lRF +kBB +fMB +opV +uRi +mol +oJA +uhN +nba +iVU +nxM +tcY +cvm +ckS +oBy +bkJ +tRD +syn +krG +uTV +vVV +yhn +hma +dXw +biJ +gGt +rmx +rnx +qex +hkM +ipZ +seU +xjH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fCc +oNW +sUp +vOT +vOT +brz +"} +(63,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lyV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dgg +jKk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ctd +xnL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hMc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uYV +wwe +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sFn +vOT +jHD +vOT +dZI +vOT +vOT +vOT +vOT +vOT +gCw +vOT +yki +vOT +vOT +vOT +vOT +tUQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sXE +hUI +sGy +uQV +eHb +piX +cjO +bXP +nam +cUG +uww +trF +cXO +loZ +rih +vzU +efR +hHu +idY +htR +pKg +uFs +hdH +pSL +mTw +oUM +tAe +eqR +rAw +nQe +qNG +pKL +chO +xtM +bKX +tcZ +uyc +byC +mdl +aUn +urU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +upf +tgk +keL +vOT +vOT +brz +"} +(64,1,1) = {" +brz +mwD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kmH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kgD +wIw +vOT +vOT +vOT +vOT +vOT +dSB +vOT +oJm +vOT +sGF +vOT +xHf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tOF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +trY +sHk +hiW +iNq +aph +qPf +faq +xGy +raK +oDm +xtq +qIa +cSO +eGg +nRW +pAa +aIp +nbK +dWK +vhE +dKY +iox +cbq +pCT +nUe +ruY +vIr +pRp +clB +aDu +kBK +jao +ssj +pOs +gNL +gcG +pEu +kxd +wGK +vLb +sXV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xmS +aiR +rXy +vOT +vOT +brz +"} +(65,1,1) = {" +brz +aGs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cXu +vOT +vOT +vOT +vOT +vOT +vOT +iWv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dYI +sgv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nxg +vOT +cTF +vOT +pjp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qoG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oQZ +dOp +oPR +qVM +qav +tmP +aRl +ivH +qcT +fyV +vUv +lFM +yeg +mcb +gyn +vNz +gVg +mhz +tqd +sRC +xxZ +xeR +nbv +ehh +oNB +jdQ +mBw +dXu +qth +ers +wre +xIO +dca +vIP +uYD +qIc +jia +wVV +nGp +hMk +mgp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kZL +kDD +kHJ +vOT +vOT +brz +"} +(66,1,1) = {" +brz +luS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mGg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bqf +lwq +wKS +vOT +vOT +wSW +vOT +pUj +vOT +vQJ +vOT +tTd +vOT +ewS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ddR +tsN +byi +vOT +vOT +brz +"} +(67,1,1) = {" +brz +vOT +vOT +nGr +vrM +aDZ +pba +cja +iaR +xXC +ptR +lcr +xJB +cid +bNx +sfM +nRC +xqi +mmv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nJY +vOT +vOT +vOT +vOT +vOT +vOT +oKt +xWR +sWT +rcd +oaT +jVv +vOT +vOT +bJi +mcf +cNp +xYe +ewJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +msH +ecy +vOT +vOT +vOT +vOT +vOT +ucx +vOT +hfS +vOT +xRC +vOT +ecm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mCD +vOT +vOT +vOT +vOT +iNK +ncd +qrD +evm +onY +iul +twi +qRJ +vOT +pVn +fMT +mpA +azF +cFX +xIM +jim +aTr +ibi +bIT +kvz +dEr +pRB +vew +pKf +iew +rZf +nYF +cNl +nfh +ybx +ifu +kdK +bTk +wJR +pAj +kDK +aKn +vgl +fNS +jKl +jSA +uzb +aAf +eSx +mCD +oIn +kMt +nJp +qTX +qDh +wqX +xbc +qhO +htG +mEc +pjF +vbX +sYU +vZa +aOV +keJ +lBS +hAx +kFn +hCp +gaR +nBw +bIa +xCf +vOT +kzs +myW +vpw +oKD +xop +poH +pJH +fvL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +btn +rdx +ndU +vOT +vOT +brz +"} +(68,1,1) = {" +brz +mRF +vOT +vOT +vOT +aDR +vOT +mWo +uio +jHt +mze +vOT +vOT +pjU +vOT +qGF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mLq +vOT +vOT +vOT +vOT +vOT +vOT +uhk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kDA +vyI +vOT +vOT +vOT +vOT +vOT +oEm +vOT +syI +vOT +dPO +vOT +liM +vOT +vOT +vOT +vOT +vOT +vOT +jJq +mdN +vWH +naM +xxv +vOT +vOT +sAv +tkU +aUq +mZm +hwt +eFu +bND +kbu +vOT +wlG +tfi +sKx +wuH +mkf +vhc +xFg +xcU +vvA +etS +ghU +xMO +tSk +gRj +tQA +aoy +lEf +pMT +gSe +muU +fLl +hBs +iRi +mWR +iZK +bIJ +uLX +vVC +eBj +sFs +cuU +mRe +tvL +ylK +hbN +vWH +rFv +enD +lLY +jCS +wpN +kBN +mBC +jqu +vMA +lbL +sgu +tKZ +yjQ +nLb +tYn +ixO +xFm +mGP +hgt +rdO +rWR +sFS +min +hWo +wpv +sbg +kcW +aGc +xzB +ioO +vms +vma +hrw +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mpw +vKV +cKq +vOT +vOT +brz +"} +(69,1,1) = {" +brz +vOT +vOT +vOT +vOT +xvH +vOT +vOT +ibM +vwg +kmC +vOT +vOT +ieS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kRF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +leZ +mKK +vOT +vOT +vOT +vOT +vOT +jbG +vOT +nTp +vOT +buH +vOT +brB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cgR +vOT +vOT +vOT +vOT +rby +xNI +quc +gMu +cOD +alP +ibq +blf +vOT +qcs +vnK +qXq +gjY +ecQ +gWX +keu +rpe +uDl +fFf +noo +pMG +dct +dBD +eiF +oYA +wWq +hsS +aqJ +sIZ +vpg +lFX +xPA +eaV +iIJ +pJW +tXy +okv +qdW +utd +mdu +ioP +jmE +juD +kUc +cgR +oys +nhc +oSQ +qOY +oeN +sRe +hQR +iLW +ayj +fng +rKw +frv +hcz +veC +qBI +cWw +aBF +auF +rXf +kLc +iiZ +mXb +pwu +cmN +hZU +qWu +tET +dVZ +fdW +aKD +fBV +xrm +lpX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qjp +eed +mNk +vOT +vOT +brz +"} +(70,1,1) = {" +brz +bcD +vOT +vOT +vOT +gcR +vOT +vOT +vOT +gIg +jtC +vOT +vOT +wOp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xOM +mJG +qSx +tup +fiH +dto +mzs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tuT +vVC +vOT +vOT +vOT +vOT +vOT +jCo +vOT +doH +vOT +irh +vOT +wea +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hEP +iwx +oHJ +uKG +jto +nBr +kLd +eaB +vOT +hwb +aZB +bdd +eMq +pTJ +iWY +isv +oeO +vHF +tJB +jnC +kcT +pdk +ndL +vTH +npb +gMe +vsY +cqR +xHB +tnW +uFR +uJR +kzH +okz +hMx +rSu +tuT +ycv +hQH +giU +qYl +wue +dsq +aIM +bcr +mbn +xpa +apF +pYA +vrV +kdz +ekf +bFt +aNF +qvL +oNy +uIa +gNP +frH +bxO +mwr +sKe +vXw +dQW +tqy +ifz +ftE +pCk +xaw +xrr +nnt +nwi +sGg +jYM +eoj +umR +gsV +gNo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rxb +mMv +iLR +vOT +vOT +brz +"} +(71,1,1) = {" +brz +vOT +vOT +vOT +vOT +obF +vOT +vOT +vOT +vOT +ssR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gMu +vOT +vOT +vOT +vOT +vOT +vOT +rwZ +vOT +uEF +vOT +wfE +vOT +bhQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iLy +qvt +fDa +hTh +wzx +kFY +sxC +vOT +vOT +jkh +xfs +gwd +uUu +upB +dOd +lkn +dqu +cJA +rNM +wYi +esI +vfq +wXG +pfc +osv +sPJ +hmc +kjK +aQb +hqE +wtv +uxg +tSZ +ook +fXS +oZc +kDA +wpW +kIB +rlr +blw +feJ +ebh +nCi +heC +rzu +xkG +sSH +fPo +rfU +kWS +eVf +tZY +aRN +dQL +eAP +ibZ +btR +oXU +ibV +jvE +nES +mUQ +gLA +oed +bvh +dJl +frg +sOI +nWk +ugZ +bfm +fxx +twm +xQC +ofe +vOT +rpJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fgx +nBy +vOT +vOT +vOT +brz +"} +(72,1,1) = {" +brz +fAd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sBu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nZm +vOT +jhG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gpf +xqq +vOT +vOT +vOT +brz +"} +(73,1,1) = {" +brz +vVn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bYj +aCs +gIc +cQs +fQu +vOT +vOT +vOT +vOT +vOT +vOT +qDJ +nzl +uey +wBT +psS +nWT +sRT +jXy +wGs +ezw +ooJ +vzZ +syV +uVa +ctV +hYm +vOT +kdf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +woD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hkw +vOT +cnt +vOT +mRk +vOT +uFL +vOT +vLN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uIc +iaU +waL +ned +vXP +fPf +vrJ +xJN +fpv +csK +bIS +cgw +lxM +llo +riE +jPZ +jee +kSV +fCz +nRp +xLq +baQ +fIz +bbB +pTd +iVm +wTu +pKu +bTH +ojh +vfY +szS +cQS +naL +xOD +iMh +jFu +ycT +dsN +vcG +jHE +bBc +haL +oRx +nxb +ble +vVq +xus +nxj +jXN +sMD +gFp +nfT +pME +bNT +sRb +uzM +rjd +cXf +hOt +rZm +uJX +eHw +yeG +uhp +eQR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jTr +qHY +vOT +vOT +vOT +brz +"} +(74,1,1) = {" +brz +svV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nql +gjZ +nfm +lxp +tNZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gbh +vOT +tdo +nRu +sIh +uCj +vOT +vOT +vnI +tNZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mWj +vOT +uQR +vOT +qPV +vOT +dKM +vOT +ltk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oHG +rfg +eoz +xAi +baK +iOL +xaU +aXV +lVF +xty +dFB +iEt +bVk +jNZ +tKr +iHk +bUZ +uIV +aWC +nXx +cwC +boS +tyR +ruT +gmY +bzu +rDx +vPo +dcI +lkI +jMk +tFv +sQO +krH +pwe +fwH +rKK +lGg +qJj +oRU +sdr +kNt +rzv +dCs +gwG +fhl +qCp +sAs +kfz +rqr +bVN +oPI +xQH +qOZ +uuX +hUd +fWe +dBY +wHt +bsK +gKJ +oAe +vTy +bBW +rRX +frW +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hsw +tez +vOT +vOT +vOT +brz +"} +(75,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vnI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xKx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nql +hMj +vkS +uWg +aBK +vyf +wRU +gjZ +vDC +edu +ujv +nfm +fEG +oJn +lxp +gIc +cQs +bYj +aCs +fkb +cOF +fQu +nfW +fpN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jZN +vOT +vOT +vOT +vOT +tXU +vOT +ubd +vOT +dAA +vOT +cAm +vOT +pjL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hEo +iGu +aqA +bGl +bHd +ykX +yey +rGa +iEC +psi +uGg +ldm +cwz +dbi +nBo +drZ +uIu +sbQ +miS +jYT +vwo +oyy +hmK +mWN +agQ +qHm +uTA +vRZ +xTR +mmy +xPH +ipW +mra +pgR +mKt +jEz +keU +xpD +hrj +rjX +laE +hFV +fMp +enY +oso +rZh +dkq +hJm +lUQ +dwo +lXf +wic +tuk +mWS +qJu +ciG +wjM +vpq +mTZ +umn +jpj +xMe +uwf +utb +igT +rus +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wtf +mYT +vOT +vOT +vOT +brz +"} +(76,1,1) = {" +brz +vOT +vOT +nhr +vdD +cZO +mOn +kFV +khl +xhl +tKK +aGt +oZh +lYq +tgB +anU +cam +ehP +cam +xyN +kRp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dod +vOT +lsO +vOT +eKl +vOT +pov +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wUs +dni +jya +tbH +owH +ifd +fLn +usY +wNb +cuY +bkn +xrB +opD +khm +aWP +eow +hMA +pDF +qaY +axY +bef +bQW +nqN +mzX +yln +eIB +vaw +puT +iNE +fkl +cic +ukc +tEY +kbB +iWp +onu +oTr +pHo +ifQ +pGT +aSl +nVF +lWe +jVq +nxF +wLy +uSy +xwL +iuz +jfU +lXh +xAH +kkV +gup +dvs +wMz +hVo +sId +avO +dWe +qwD +vyN +xQU +ngz +lJu +uIJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rln +ajp +vOT +vOT +vOT +brz +"} +(77,1,1) = {" +brz +mzl +vOT +vOT +vOT +vOT +xwl +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dRm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wjp +vOT +cMY +vOT +nKY +vOT +vPJ +vOT +uJk +vOT +gdi +vOT +vSo +vOT +gvN +vOT +qfY +vOT +tKC +vOT +hbI +vOT +hCm +vOT +pYY +vOT +ycx +vOT +wsV +vOT +inK +vOT +jkw +vOT +kCr +vOT +bSn +vOT +fUP +vOT +mwg +vOT +jVh +vOT +xht +vOT +eYk +vOT +sRH +vOT +sdl +vOT +vuE +vOT +eWN +vOT +vOT +vOT +vOT +lIw +vOT +vOT +vgO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +msl +jgC +vpz +hdY +rRv +cNC +rAQ +gTj +cCa +cED +dwe +pHp +sGB +xfz +hmP +lAp +hgI +gkv +hZC +gNJ +gdn +bDV +sCw +sRz +pSl +mVU +blQ +gnQ +pgG +hch +ohw +vdM +bgK +mWa +tPm +vRz +pau +pmY +gsf +mhi +lrt +inu +qAr +ihz +xna +moK +eHa +jnZ +bwE +pUe +uTD +oEK +jtu +tpg +wJJ +fOm +uvn +mXB +kQk +gEV +fnz +rkx +sgG +oHz +mOk +oRX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sFZ +pXg +vOT +vOT +vOT +brz +"} +(78,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +rpb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ctd +pba +lcr +sBu +kmC +vOT +vOT +vOT +jEK +vOT +hRf +vOT +hWB +vOT +xQX +vOT +qWt +vOT +qxT +vOT +qLR +vOT +puy +vOT +qmL +vOT +eDK +vOT +rER +vOT +aAl +vOT +ozg +vOT +rOJ +vOT +dKt +vOT +nhA +vOT +hue +vOT +kHl +vOT +fUr +vOT +bMu +vOT +axi +vOT +eYe +vOT +upq +vOT +wej +vOT +qxd +vOT +vYx +vOT +hnH +vOT +irB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +huf +vOT +vZm +vOT +mzx +vOT +uBz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(79,1,1) = {" +brz +bLv +bDj +vOT +vOT +vOT +ohf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nHW +ucT +gIg +vwg +jHt +xXC +vOT +vOT +vOT +uKl +vOT +tpD +vOT +qCk +vOT +cwR +vOT +tWS +vOT +xNi +vOT +iIA +vOT +tpz +vOT +kmX +vOT +mEA +vOT +kvS +vOT +pZR +vOT +ngy +vOT +nUb +vOT +vpd +vOT +hGa +vOT +jOH +vOT +rwk +vOT +wfa +vOT +oDs +vOT +dev +vOT +ubS +vOT +krn +vOT +iUQ +vOT +xJK +vOT +olX +vOT +tUG +vOT +vek +vOT +vOT +vOT +vOT +sSE +vOT +vOT +gRd +vOT +ggX +vOT +qqB +vOT +bPE +vOT +ykq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ixZ +wIw +jTO +oFC +rDg +kpc +tWc +msm +cKa +rsP +sgv +vcz +kIY +vVv +nKa +xDe +arz +qPF +vOT +mOT +lnd +bPf +cuF +ved +lDM +cal +afr +aSy +vOT +dPc +oON +dZE +pHf +iDQ +jSZ +vHk +gts +dCq +ddf +duI +sDV +lng +lgq +fLB +qWx +mbP +oic +inm +xuV +bqF +dzA +irw +wGk +lfb +fcY +res +gGD +lsL +svm +mJb +koI +btr +lFD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(80,1,1) = {" +brz +oUm +aRl +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kgC +utN +mwf +ybx +gcR +ybx +keu +vOT +vOT +vOT +gRT +vOT +bjo +vOT +hUX +vOT +hIE +vOT +hNK +vOT +eQq +vOT +adD +vOT +lTx +vOT +xMU +vOT +nOJ +vOT +tws +vOT +vbq +vOT +vWQ +vOT +dPD +vOT +pOg +vOT +aTP +vOT +mKn +vOT +jSE +vOT +lvS +vOT +tGX +vOT +aPP +vOT +iBi +vOT +ioq +vOT +sDB +vOT +jGZ +vOT +ipH +vOT +obP +vOT +aLt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nBm +vOT +vJB +vOT +juT +vOT +rly +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pqC +fTH +ols +rwC +oNZ +hyd +mxN +hFi +cUB +cWj +wTy +ngF +wPq +nis +dQw +xVR +afs +vkw +vOT +kMj +sBG +jqf +mne +vJo +tIE +fht +rEZ +kLR +vOT +jvC +uqr +qeE +izr +fFS +gVC +hMO +jJj +hJW +lmL +gOw +baL +moC +fZW +fMC +fyQ +tgp +avG +vaZ +vyw +dIg +jyQ +bvW +mgk +jbp +hvg +wAL +cKu +quN +naP +kxx +hVI +tXm +rHm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(81,1,1) = {" +brz +jah +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wQB +dHe +vOT +rnP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eRD +cBu +mTF +wmi +vgt +bHy +llu +ena +vOT +vOT +vOT +uDL +vOT +bwx +vOT +eKI +vOT +gwJ +vOT +vNs +vOT +vCD +vOT +lGW +vOT +pwH +vOT +aEY +vOT +dPm +vOT +jbM +vOT +bVw +vOT +xQP +vOT +ghP +vOT +crT +vOT +rDv +vOT +pby +vOT +oHh +vOT +pEM +vOT +hNO +vOT +pdp +vOT +xvp +vOT +npy +vOT +aSQ +vOT +nfF +vOT +sNj +vOT +vuY +vOT +kcM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lAt +vOT +scn +vOT +oLm +vOT +nIu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ojx +kQP +bzY +nsQ +sjH +lxn +kjO +vOx +usf +pRs +qZX +sjC +yjO +dXB +ciN +uwd +iol +vOT +sjR +qiH +rgE +bib +gYj +njT +sHC +oLV +kAG +vOT +vOT +wJl +eUx +xVq +hfK +tQV +eae +ptK +lcs +olJ +ovY +neI +jqs +yhd +lzl +kDe +nIT +jRK +qvb +mlO +tuI +qTq +wMr +akg +ikv +lAd +wWY +xcu +mwn +ldO +huJ +uHi +bmz +qbZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(82,1,1) = {" +brz +nFc +vOT +vOT +gjO +vOT +vOT +vOT +vOT +vOT +orq +fSE +vOT +opR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kaY +sbS +mOs +sYs +btY +vvS +tjP +eTv +vOT +vOT +vOT +gGC +vOT +tUg +vOT +ugq +vOT +lDD +vOT +hoX +vOT +wiM +vOT +pXs +vOT +hdP +vOT +qSz +vOT +hXi +vOT +ooU +vOT +axl +vOT +aCy +vOT +dBc +vOT +aqZ +vOT +ahT +vOT +jYN +vOT +eIr +vOT +gmd +vOT +vkA +vOT +sij +vOT +eAp +vOT +enT +vOT +kvY +vOT +aJe +vOT +vwj +vOT +jqW +vOT +vOT +vOT +vOT +vOT +vOT +idZ +vOT +vOT +lZk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oHk +mxU +cJn +pyA +gRm +sED +wuk +exm +qnS +muM +sVq +qkF +wav +iGU +aDd +xCA +bIr +vOT +rkE +xFx +bpg +mPb +rjb +vDT +vJA +mZw +uWV +vOT +vOT +ttA +pNd +vrs +vux +pwq +mYE +iIm +rVK +fnO +nmj +lHl +ocS +ogp +koc +kbH +ozb +cSR +ntx +fII +lNW +ikE +cGd +dyu +cAt +dEY +fsA +eMv +jfT +mZl +cYo +lEO +nBN +cWL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(83,1,1) = {" +brz +bsO +vOT +vOT +gUr +vOT +vOT +vOT +vOT +vOT +hab +vBM +vOT +jXq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fvB +pQt +hxT +nXt +mRa +pXn +csY +vOT +vOT +vOT +vOT +oEa +vOT +jro +vOT +xKL +vOT +tyI +vOT +lgz +vOT +kcl +vOT +fEX +vOT +ulI +vOT +aaT +vOT +iSj +vOT +vEp +vOT +ijN +vOT +eac +vOT +hIf +vOT +vBq +vOT +tly +vOT +mak +vOT +tIR +vOT +sSg +vOT +pKw +vOT +ijJ +vOT +vMI +vOT +unw +vOT +rnZ +vOT +wsg +vOT +cLl +vOT +vip +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bOG +uvb +vHA +uVK +vOT +aLA +wrl +wNW +qaP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xXa +pfw +xNF +gkQ +njE +xJn +xXS +qcN +jAC +lyY +hJq +vWE +arH +awo +frt +hWY +aEE +vOT +qtA +dTM +qff +eYN +eAV +kMl +ptr +uVD +sZC +vOT +vOT +hoj +dDo +kVj +aND +qoz +cPg +rqP +kEl +mUI +ogM +jFS +hIO +ikW +ydf +nan +nem +tow +dDP +kxz +brT +jhn +hee +tYv +iyL +lgD +jJi +lbr +kkv +cJJ +nQI +tbT +qht +wwd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(84,1,1) = {" +brz +aRD +vOT +vOT +aax +vOT +vOT +vOT +vOT +vOT +lBY +pVQ +vOT +oMU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nXt +iZG +diU +eyV +bPN +rnH +yaO +vOT +vOT +vOT +vOT +nyu +vOT +lHf +vOT +ghu +vOT +fIi +vOT +snH +vOT +ruD +vOT +vHN +vOT +jas +vOT +juK +vOT +vdk +vOT +qro +vOT +pzq +vOT +pwd +vOT +wzq +vOT +xJh +vOT +kwM +vOT +rGA +vOT +jBe +vOT +epx +vOT +hsh +vOT +fVZ +vOT +nIq +vOT +ulj +vOT +keI +vOT +dKP +vOT +jIu +vOT +eGh +vOT +vOT +vOT +vOT +vOT +vOT +aIc +vOT +vOT +nIR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(85,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xzi +pXQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ipJ +vOT +ikP +vOT +dqN +vOT +jSz +vOT +qDs +vOT +unJ +vOT +wMn +vOT +wWH +vOT +age +vOT +kSE +vOT +bJF +vOT +eTz +vOT +sUr +vOT +fyv +vOT +fms +vOT +giT +vOT +aYk +vOT +hJU +vOT +jEY +vOT +gqb +vOT +tcw +vOT +rYI +vOT +aFk +vOT +pfQ +vOT +ere +vOT +bHL +vOT +ndT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kyR +cGb +fpW +wvQ +vOT +ilI +oSu +iQq +vKM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vYP +gny +plV +bPS +qcF +cPT +sxS +vjg +ykh +kxE +wQG +lmy +dWy +pfP +mVK +oXA +cXK +tke +uHm +qJl +wsh +sLp +vOT +jop +gev +sYl +uRm +nBO +rde +cPl +ghs +ljb +vbw +tbV +tFg +vEu +xUf +hEk +fTE +jAu +qIE +tMe +cRk +oQx +dQr +cRX +eXK +diG +orr +szw +fgF +gyw +pSI +lad +fjZ +cyu +hMf +gUj +emw +fRC +mMI +alG +ffo +nFN +vmu +jqR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(86,1,1) = {" +brz +pvm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +etl +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qSV +cHz +cwi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rqF +vOT +fuo +vOT +vYB +vOT +aVj +vOT +jiV +vOT +otz +vOT +aZd +vOT +prq +vOT +dSu +vOT +ujd +vOT +ljS +vOT +sCk +vOT +dJi +vOT +fRj +vOT +uEo +vOT +dCI +vOT +nDR +vOT +gIT +vOT +woI +vOT +erL +vOT +lQF +vOT +nQC +vOT +vJR +vOT +cMf +vOT +aBZ +vOT +tSr +vOT +neB +vOT +vOT +vOT +vOT +vOT +vOT +ndA +vOT +vOT +roq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kRi +xli +wZR +xQV +eDP +goF +fPU +wla +uOW +wAf +lJF +kcE +pwN +hfZ +sUz +rCV +vjZ +iYT +eZW +ecy +apG +viO +vOT +ldJ +chs +iPo +vGa +vhF +ccJ +mqZ +oGi +qlo +ohm +rNf +aEr +spD +rMi +gjS +lmu +kRE +uFo +kCy +cKd +kpy +cZq +omH +tYz +dQG +vwR +bEx +voB +kVo +dSy +vTJ +amW +hIZ +mkX +tiR +aKX +xjM +dxt +mbQ +fJD +eHe +aRG +vjj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(87,1,1) = {" +brz +soc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bYq +vOT +fNO +vOT +xLV +vOT +hkA +vOT +iLG +vOT +nKD +vOT +nyG +vOT +kmV +vOT +mNH +vOT +eLN +vOT +aSn +vOT +xhM +vOT +xKb +vOT +nwq +vOT +sQb +vOT +jAm +vOT +qAR +vOT +otq +vOT +lGZ +vOT +gBd +vOT +uEc +vOT +nOb +vOT +mup +vOT +vOT +vOT +iMP +vOT +cTw +vOT +cbT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hXt +wly +mEO +iUA +dXi +jBU +vLx +kVm +ugI +kNx +kBG +vur +sDH +uSd +usN +tTk +vTI +kQl +wlP +mnD +gYy +vOT +vOT +dwO +bsR +pbv +kez +sBr +xmA +cen +tDA +fhZ +aYs +uwJ +aeJ +gxm +uMg +uJD +hBV +fMV +cmC +dlL +ahZ +jdO +pFK +qLi +vmX +ehE +bAX +mOa +qPB +ize +mbc +vVI +kWG +obI +nAh +jAx +kmo +kfP +qJo +vQK +mkx +kcD +oxU +pij +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(88,1,1) = {" +brz +mqk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xEm +vOT +jVj +vOT +gaz +vOT +jRt +vOT +ePd +vOT +gWM +vOT +uVq +vOT +tDo +vOT +hXO +vOT +mPw +vOT +vMP +vOT +eJM +vOT +bBO +vOT +kvB +vOT +ibC +vOT +qLa +vOT +nME +vOT +ygn +vOT +fwm +vOT +kMD +vOT +whq +vOT +bwr +vOT +eLF +vOT +vOT +vOT +iGS +vOT +qMe +vOT +rAP +vOT +vOT +vOT +vOT +vOT +vOT +dBN +vOT +vOT +rBZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gfB +qmh +qVA +cCC +uSF +uoz +axF +aEW +wJC +uSE +hAN +lVE +mhQ +hKj +doW +mnZ +yan +dmX +aak +alg +rYb +vOT +vOT +tir +opS +nJw +jET +cvp +ect +dNy +lHL +jpn +dPX +iTl +wdy +xVm +eEI +rVR +swC +rVM +dOH +mOS +mhg +mRb +agB +kZR +jFB +qoF +fIl +kWh +rMH +uGz +rKr +kJc +hMu +ptb +alQ +qXG +rXA +kze +gyA +dfG +fqL +wQQ +hWZ +bYN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(89,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qrs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oim +xkl +byu +pKs +agZ +oee +ihr +mJF +qfQ +nCj +kVz +vyC +thy +mXF +uog +wNz +jqj +hhR +hgJ +fjF +wvv +vOT +vOT +cOg +eeb +mcC +ulG +uwK +uda +pvj +xDx +qDu +trB +isy +gRL +cUx +pBh +xKj +kji +oqw +hTZ +cnH +vEz +mwS +obW +itr +ugL +tdq +xRK +kPW +fvn +hCu +ucC +xnM +wmp +aSX +eTK +wRZ +wOH +ooL +yiC +sGl +vnD +odd +pFm +bJg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(90,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(91,1,1) = {" +brz +vOT +nLM +jwx +odX +sEw +hHS +tUv +eOx +imq +xAc +gHj +dpa +jNh +rRB +xsD +nxT +gFW +nXr +bOm +cfR +cJh +bsX +xcr +xGd +ppl +gWg +fBe +xML +vOT +iZX +lDf +wQs +jzd +sCf +rXG +xvs +tkH +lhl +myx +chA +caC +xFD +fvC +sBo +iNU +vOT +eKh +nsJ +brD +qYY +ugQ +kWK +gbe +paD +iyG +pKQ +mSU +nYG +dXZ +vOT +aIr +aEp +vOT +xSW +oaN +rAt +hGF +vOT +sHB +gnA +wEC +gCY +vOT +cww +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jdt +yeO +fFF +hAB +iiY +agt +uyZ +ubG +mOK +inb +gEY +xqh +imA +jdr +ifH +egV +aia +hIN +wsl +qgX +vag +cfJ +dFf +aGa +wEt +kYN +xXn +byv +uiH +env +xXX +hem +lue +fiB +bOU +bSW +hks +xBb +kzE +dDR +iJV +ejg +sHz +omp +jAg +oJR +jgI +nxr +jVf +chM +blG +qRf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(92,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fsT +vOT +vOT +vOT +vOT +vOT +czj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cGh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hlY +sCI +mqQ +dhi +dGn +slw +vbo +fBb +goO +pdR +cPq +wWX +jdl +vOT +nmQ +fJa +vOT +aGd +pAN +ocn +hNV +vOT +ocQ +vOT +ljf +idD +vOT +kco +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bGY +bsz +ieA +jaz +msg +ihP +aQw +dAV +rVh +lzF +jrA +aTA +oDQ +tWB +xva +eHU +fty +rMZ +ocJ +avK +qiB +srC +nSC +gEx +pmd +lDq +gXh +aiJ +cou +slM +jSU +ozr +vcU +wSG +nzM +iJq +qNO +aJd +lvj +lGP +oUO +mFb +flI +nlV +njw +mhu +nNb +fIt +qaR +xkQ +aQC +bqs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rzp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(93,1,1) = {" +brz +vOT +vOT +vOT +poF +dBU +wYZ +ttv +aeQ +vOT +vOT +vOT +vOT +vOT +hlB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dKG +ftY +gnY +nzf +hju +onb +awz +qKs +vkW +jnW +wmm +nzX +cWo +vOT +eoW +fXr +vOT +djG +aKd +lZN +qdt +vOT +opg +vOT +eLG +wBi +vOT +lUN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gtx +wOD +lMI +asP +bBG +dHf +xGr +ora +jsy +twU +alS +nSi +vKN +nXW +bWn +rLN +eXp +rpB +pow +dwV +fSy +njr +oxz +oiK +dmn +vjd +gvx +dgS +tGa +jMD +ucs +aJp +wrE +dTC +lAI +voT +nzu +aVb +rjN +eFg +lRs +gSl +qIY +vwY +cmG +vUB +hQO +oZe +qXu +tfM +haZ +nkI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(94,1,1) = {" +brz +vOT +vOT +vOT +obQ +nWY +mHz +iGA +dCy +vOT +vOT +vOT +vOT +vOT +bzU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +seo +lTH +omi +eSP +joW +xnj +oEQ +oza +cnC +bmD +tMS +wJo +mIr +vOT +uYd +mwl +vOT +ujj +lXg +gNQ +bkt +vOT +kJG +vOT +xFl +gxa +vOT +nMc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nbW +lQD +dgG +mJv +bSI +kol +wRx +oHV +kJe +pho +nhu +wuD +vAA +cgL +aIP +hUB +edE +cPf +xEv +fqY +pmP +eXS +iiz +vWV +eCN +cTt +cLR +uKh +aIG +xvO +fGg +quG +hat +lqP +onW +sTJ +aEi +iTm +rMo +fWw +uTl +ajA +bYi +iBK +raf +mHq +odP +djf +gfI +mNy +sPa +pcL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(95,1,1) = {" +brz +oQt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lki +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vRO +efP +vOT +ohI +ofy +lNw +jlp +iUM +jks +vOT +kjd +dcF +ets +vOT +sRS +tRm +vOT +gio +xLM +bMg +atD +vOT +jlV +vOT +qyc +lSl +vOT +jba +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +orK +frX +xQE +nSK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xjW +cIA +wgR +pgD +lCW +vDj +eud +baJ +nCO +dna +sso +dLn +jJY +tMZ +nAC +qrO +vPT +rIV +iGi +nNa +kaJ +diK +rjV +hBJ +vso +scz +wnp +lcl +gAn +oyp +khA +vUP +onT +mvb +jwE +wOn +tpV +hnS +qcj +kRW +rjo +olD +nyr +yjq +sbD +kRk +nHO +wFv +kSK +gaq +aLK +qKV +atf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(96,1,1) = {" +brz +jbE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bbu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qOD +jWc +fUy +bzk +rdL +sQs +vWv +hoU +kou +bDt +wzJ +dnG +vOT +cVZ +vOT +vOT +vOT +fte +gRc +dag +kzx +dGl +qfE +gEN +uHj +aKO +vOT +lWn +xRr +bCl +vOT +uOb +aCl +vOT +qOQ +mSg +kle +eqo +vOT +vOT +vOT +mVW +vOT +vOT +rtk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xJO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ngU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(97,1,1) = {" +brz +aLn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +myJ +uBY +dVz +gxv +vOT +bKe +vOT +vOT +vOT +eHN +pGX +vOT +vOT +bJg +vOT +vOT +vOT +iAK +snL +wDV +mZx +hid +mIP +mLB +qwX +gzj +vOT +ucQ +qlk +gGV +vOT +wdY +amd +vOT +tSh +tIG +xbB +ukU +vOT +hkW +vOT +aye +vOT +vOT +cSC +vOT +vOT +vOT +vOT +dGb +qwI +vOT +vOT +gsa +aDD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cqA +gOn +qWH +nsv +dgD +mCe +cdh +wld +wZw +bGu +dkJ +vVT +xkm +gkb +uVT +rlZ +kga +orf +wzh +fND +cFn +nSL +ggY +hNG +jVN +gdE +aRS +uTz +gYR +tUK +edT +qjr +wUL +uRv +hXm +eAx +hkv +szf +qQs +qBx +off +ino +uug +qFq +kJC +vSJ +jHV +jsx +hJi +ixG +kvW +hoU +bDt +cUZ +xhy +mdO +dnG +drT +kGC +dVb +jBs +skR +dPt +mgq +eJd +yfd +lrd +mAF +nQY +fRb +chd +cZg +brO +haQ +eTu +oNT +crW +adB +rIJ +rAY +iDB +sBT +oas +nns +jox +fxT +qKj +vXC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(98,1,1) = {" +brz +kRd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wbd +vOT +vOT +vOT +xhy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xVw +xoS +vOT +hBU +vOT +mmF +nyW +vOT +wXz +vOT +itn +rOx +fjG +vOT +mFZ +nAn +vOT +xWj +odh +ccg +fkV +vOT +xQd +vOT +vHM +vOT +vOT +lvK +vOT +vOT +vOT +vOT +rsp +ylU +vOT +vOT +qsq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jKg +rDt +fyU +ubC +nyQ +fxM +lvD +wth +voh +teH +gZn +yiE +gcJ +kox +moa +cnb +knt +tWi +vDm +oZZ +vhR +feW +gjL +xpx +qqe +sTn +nlk +gBO +rLU +uEj +rZS +mmj +bGZ +wqg +hny +eSI +tQf +kbY +mcJ +eWJ +fGl +cts +emu +aYS +fsk +eeA +fPv +frC +qhC +pvY +sQs +kou +pGX +stS +gvv +osn +wjl +dDs +twR +eNv +nyg +wSS +nMk +cdy +ozI +uoj +geN +nSA +vZJ +mrD +poe +dFe +dPG +cXI +bEk +oUf +rFL +tIO +lxU +mIA +ssb +mmq +lzW +cPS +hcE +igd +bTM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(99,1,1) = {" +brz +sQU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cdh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dYp +sfb +vOT +jGd +vOT +rnX +pXY +tHj +uqU +vOT +rLc +cIc +sqt +vOT +gdt +oRt +vOT +rqq +twX +acG +aAG +vOT +nhJ +vOT +wsx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bUl +edy +bCy +gpq +etv +bZX +bMU +wlH +pCJ +gKr +bzq +nXX +vYN +bJx +wff +fnL +xXx +aBa +rmi +whe +wov +sZf +vhb +hxh +dNn +tey +lBm +mxv +oFt +mOB +nWX +gPr +exf +jjg +cCu +rOK +xpz +tHT +lLZ +bfG +bid +nDQ +urS +oQC +dBh +sJh +aSI +jWc +nuD +aGg +bKe +dRJ +wzJ +quk +gMJ +meg +wxp +oMj +nTH +exU +gmp +wWb +dnI +tmR +fXR +wKe +rsQ +ikh +aCn +pBV +mrV +wLC +oiT +vmo +taW +qeV +wKg +uWx +wxl +eTm +rTi +nKK +xJd +keb +ijw +dFD +cgY +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(100,1,1) = {" +brz +vkK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aAF +bMU +lvD +sHy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nTU +dql +vOT +kZs +vOT +vOT +fiX +rXe +nzj +vOT +pzA +vOT +shC +vOT +avp +efI +vOT +hiy +hTn +bKI +bVO +vOT +wpk +vOT +jtP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mVO +gbk +fSA +qOD +sHy +vnl +aAF +iSx +lgj +iuj +awh +tsP +vTA +eSO +nTS +cqK +pcF +qeH +aQE +eAQ +jGW +nCH +mBv +dXS +mnh +tzO +qVx +aNU +eri +fNc +jWr +rSV +xqR +xVB +fNM +oEk +kFN +bXG +hTp +egu +esM +wmM +bkl +ncV +dGY +vjc +whn +uBY +gxv +rdL +vWv +yhW +eHN +toA +fLi +cef +fGu +dnj +uHK +ljB +owo +qyU +tlR +bRZ +gXF +pHC +qXp +mEF +trR +gCt +jen +euz +gAE +nat +gcq +fvs +doy +vRU +pYB +oiD +cWC +ltr +uxf +hpC +rti +aPS +qxq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(101,1,1) = {" +brz +yeJ +vOT +dRQ +sGO +npV +upD +ted +bOF +qDr +nau +uiR +lpj +fgd +etr +qpQ +uVi +hMt +ylH +ngO +bmZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aPH +vOT +vOT +qBq +kdq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jZk +een +vOT +ovL +vOT +vOT +pQj +paC +hRo +vOT +lQi +wxK +aUB +vOT +oQS +vOT +vOT +uAV +ogK +uGl +rFA +vOT +vOT +vOT +wlu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bDk +fCZ +khk +myJ +qBq +wbd +dDY +sVs +iTx +bTD +bna +kek +dEJ +cNT +qay +owM +lxZ +azT +lsS +oUq +eik +msp +uXs +uJa +tvX +mVd +hWT +ifU +wNd +qQy +wKy +tDZ +qeT +eJq +nEh +kmF +agN +hnV +urC +aPH +tpA +nPi +kBJ +xwp +hyK +cDT +pOv +nsA +bzk +scj +qUP +jiw +iGv +qPW +ixv +aBm +gGM +qJt +mbH +rQK +oKx +kIu +rcG +edf +jck +fch +eBC +ivh +tId +qMt +gRN +vRb +fOQ +iWo +bLB +pqc +ttQ +bMc +wPc +cKe +tbD +uUF +bgB +nhj +uyw +dxA +cyQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(102,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +etv +iBb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hfA +fLI +vOT +gbQ +vOT +vOT +iSW +mvw +mmu +vOT +qSp +xNX +slC +vOT +tXB +vOT +vOT +xAO +atc +oJk +idy +vOT +gIo +vOT +vDV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(103,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mQT +vOT +vOT +vOT +jmH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jCV +rCs +vOT +pBK +vOT +vOT +omo +fyL +cqO +vOT +dmo +vOT +cao +vOT +wll +vOT +vOT +htJ +vYQ +fMw +eFn +vOT +nWE +vOT +sYu +vOT +vOT +vOT +vOT +vOT +vOT +rFZ +mYx +lFO +dXm +suK +bop +wvD +ubX +bpf +vpF +epU +bAF +oSZ +dEz +jLO +iaG +ogd +uQL +mOz +vOT +xID +aNO +uhc +isp +gcD +neX +cRy +ijr +ehf +rHZ +wgO +rEi +dcL +liT +jJa +jPS +imR +xcg +vAE +tWn +cSX +uit +bZL +vOT +wWV +wPT +mbv +gho +xSw +ipe +oOC +jct +lGX +vSY +nnX +qcE +wEm +mkH +trm +sIi +klf +mTK +tQC +ntA +dBf +dkj +rRb +xil +dNR +jMQ +dmg +qRb +bVM +xeL +vSH +njF +uZt +sHl +cjh +wCm +qcC +tbk +xka +pRL +ivp +bab +gjw +jsz +gCH +dUA +rEx +eRz +wME +iLk +mRQ +vab +rbe +nNC +qcQ +xyB +bBB +nQy +lmq +kni +ked +haM +vOT +xtt +ohS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(104,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uPp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qyy +gyK +vOT +nIA +vOT +vOT +wAZ +kpw +kOV +vOT +vOT +uOr +ewc +vOT +dGK +vOT +vOT +ekr +hMg +lzv +gpu +vOT +kXY +vOT +giN +vOT +vOT +vOT +vOT +vOT +vcm +mwB +fzh +umX +gBg +oaD +eqe +tWO +imt +hzi +fVm +rlD +npG +sqI +fLA +nPE +kIE +xvv +bko +tnI +vOT +jMm +gBZ +vnL +awp +ano +iuX +fQR +akk +uHY +sBP +rtY +qTZ +nFS +kpG +vBm +itM +fKi +aFR +fOx +idl +xgE +kcg +tnw +vOT +mDK +wql +sWr +oRc +atL +rha +ujs +jjN +qjh +mkB +uAa +dgB +rbo +qwe +dRW +oVc +tUi +iea +cCU +cnl +vOI +nsS +vPg +ixo +rxJ +hKA +cSL +oLD +lFY +xcN +nRr +kUw +diJ +wHQ +jKv +cKr +kOz +qgL +dRi +tBv +qwT +teZ +uhw +wGm +lUe +cMg +tKu +uvc +qCb +tYp +vdR +flj +lom +qYC +wPJ +xYX +gCj +lsr +oau +qOk +iAV +wUi +vOT +gjb +wWZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(105,1,1) = {" +brz +vOT +vOT +gWw +cTx +czw +mzt +lWM +ona +rIG +atQ +vnu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wgR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vYH +fVL +vOT +juv +vOT +vOT +ovF +vOT +gFs +vOT +bpE +aJA +aOc +vOT +jNo +vOT +vOT +uDy +rfd +pgq +qab +vOT +cvW +vOT +goj +vOT +vOT +vOT +vOT +vOT +vOT +lVP +kQT +eFd +fRT +goS +ktv +wXm +tem +mix +fLc +nqP +vCQ +iAQ +qbC +oBl +taZ +eJT +dNC +wCy +vOT +pUm +cxN +tql +iax +qdx +tSK +odr +wIr +uXc +cQn +hqX +eFP +wdm +wUy +rtX +ocI +sPu +jyZ +cyy +saa +jRk +quR +fQg +vOT +nbr +bJp +mYa +esS +oag +hhT +iPb +tkJ +tZm +qJN +xxu +err +rYZ +xto +iUV +oqO +sjq +jRx +vBb +plW +eVx +sgm +fHP +nJz +nbY +fvY +lCB +dEy +lOM +paF +gey +caT +aKj +sOg +fgv +uad +xBi +kSr +psB +hax +iEf +ctD +iPV +wmb +rpT +uqH +lTe +kPb +mvu +ixy +veW +mti +neM +fVu +etd +cxU +nAB +vWt +jyN +dLv +qWr +rsS +vOT +mKU +isR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(106,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mhQ +pwN +vOT +vOT +afs +sgv +vOT +uzM +vOT +lFD +vOT +ncV +cRy +xcg +vOT +vOT +vOT +poj +lSn +vOT +mRD +vOT +vOT +vYC +vOT +vQH +vOT +wbU +psv +aGm +vOT +oZP +vOT +vOT +bYG +pyS +eGw +har +vOT +bsg +vOT +aAi +vOT +vOT +vOT +vOT +vOT +vOT +xtB +tAW +fns +sTZ +jxG +aDr +yaB +blo +uyq +vGQ +akS +oyg +cqV +cMW +jwM +iFK +pzL +mQR +vOT +vOT +bVL +pQb +tmQ +xGU +ohW +uCD +nZz +diY +hcG +vaN +gYU +mmN +pZb +dyj +vNS +fAs +mZe +czJ +wqI +rGy +jLa +clp +vOT +vOT +gkl +kcd +eqx +jvf +uOp +nfb +tmg +oRp +wZt +cgV +uyW +uQB +cVZ +tHi +gJq +yfT +uLj +lqV +rkQ +qXI +jIA +mvt +uIt +srb +qLm +kRl +qde +hXB +hGJ +cAj +gEe +uYu +mTa +jxV +ibP +fKb +cDy +doe +nsY +nHu +upO +aQT +xNy +cta +hhM +fzA +bjq +xvR +gvV +uHA +sLs +btW +sCa +qEm +nzZ +jSn +jky +oFO +tFu +vSD +kaI +knE +vOT +jtW +isR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(107,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vjg +dWy +vOT +vOT +ciN +cWj +vOT +fnO +vOT +qbZ +vOT +pOv +kpG +imR +vOT +vOT +vOT +qIJ +vsH +vOT +jpc +vOT +vOT +bhe +vOT +kgc +vOT +ccf +scN +vjU +vOT +epV +vOT +vOT +oNl +eev +sBY +vOT +vOT +jTb +vOT +euh +vOT +vOT +vOT +vOT +vOT +vOT +aKr +kXB +sfm +hqK +hvV +rNA +eAa +oOV +nQZ +msH +lVt +soU +koK +bZJ +gDE +jju +bBD +lbb +vOT +vOT +ncU +xVT +dIQ +bKj +mVD +qFK +sNn +kAE +kER +gGj +kAM +gMT +duK +rge +rEW +mVE +jmO +rHw +aLr +hWO +llx +ret +vOT +vOT +akM +skh +sMc +uen +cJa +rUi +hfP +uGf +rGU +wtz +jWO +hea +mIt +qPv +iQX +cnz +iGo +bxv +hML +bot +mML +gvC +smk +pon +uDC +sSd +tsM +cGk +gFY +cHm +vzH +xNl +nSd +rTs +ewW +lwb +jfd +cUU +jpU +qoQ +tGz +chw +rky +yim +cpL +wwt +gWC +amf +pNu +qtH +jMf +fqP +bIv +fUG +fEW +dBG +mPS +hci +hxc +nRb +wqR +qjM +vOT +jvd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(108,1,1) = {" +brz +vOT +vOT +djN +ieo +eau +suj +tNf +mej +bKw +sqS +tnH +sCq +pDS +vte +sjc +lCd +tjZ +ciY +dhr +wTa +mfH +uNx +xOV +txj +vOT +vOT +vOT +vOT +vOT +kVm +iYT +vOT +vOT +wPq +lyY +vOT +gMu +vOT +oyg +vOT +jyZ +jHV +vOT +vOT +vOT +vOT +emL +dBy +vOT +pTz +vOT +vOT +vOT +vOT +fHG +vOT +vOT +vOT +yly +vOT +izX +vOT +vOT +vyM +umK +apQ +vOT +vOT +ksP +vOT +hHJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(109,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iGU +qnS +vOT +evm +vOT +soU +vOT +pUm +vOT +vOT +vOT +vOT +vOT +wVA +vOT +vOT +wEj +vOT +vOT +vOT +vOT +dyV +vOT +vOT +vOT +jqZ +vOT +oPn +vOT +vOT +xkH +hdZ +wOB +vOT +vOT +wEF +vOT +xlB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +dxU +nTm +sqP +kBV +gJx +kyw +req +vKq +esn +qhT +jof +sOY +aUS +xhO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wks +lkW +erD +aaK +mge +dLb +wdx +nbI +tlD +fSu +pKB +ahz +xee +oqr +tYV +dim +iAj +jeT +lVs +mIH +qci +fgJ +lSt +iSf +xdg +myh +oLl +nIk +ygk +qtw +ldX +fgN +aXo +lpY +evI +fuM +dCz +eAZ +dIv +ixe +cjS +nEU +clv +kZz +xtY +jyT +bpi +tMH +aVv +xUJ +uqi +pkR +mmY +gtC +miJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(110,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sqQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vVv +jTO +vOT +rqP +vOT +vCQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dER +vOT +vOT +imb +vOT +vOT +vOT +vOT +ovw +vOT +vOT +vOT +qfK +vOT +hiU +vOT +vOT +eYD +nuo +snw +vOT +vOT +vOT +vOT +kiC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gjT +ydg +bgZ +bRR +dZl +vOT +tsZ +eLh +hiG +nps +tIv +pJJ +iUl +htT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uAP +fzD +bsp +kMw +eyB +pYj +tfE +kuB +mEB +vuC +sYI +kDf +cfE +uKE +khs +cRc +sST +eDO +bSM +xlu +lKb +gsm +meA +vOQ +bJz +hJp +cZB +bhg +gtR +vIH +uWm +jOd +hzF +kYp +mZK +iPa +nIL +wlB +gyp +vyi +lPo +gbE +xoy +qqv +dEF +qSX +fMq +cGc +eYH +mDv +dNZ +rbT +tXC +nTa +byc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(111,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wIw +ixZ +vOT +rFZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pBR +kJX +tYo +rhk +lVu +vOT +thE +gUO +elX +vig +jdF +grA +sii +jOV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pSX +frk +wUb +vSt +gsi +dyC +uuB +xPO +wgx +cmA +bPA +xPQ +cwA +hWp +daw +xrc +goR +nrF +rEr +vsD +gqX +gvP +iHB +vyF +eUu +fCl +iCm +hSZ +dqg +xET +vTe +qKL +eEN +jil +mDW +iRG +aEF +ewm +bhM +alT +nvD +lQt +vri +lVC +kjQ +iYA +ard +kKW +seJ +ybq +xdP +vuJ +vgp +xhD +lKu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(112,1,1) = {" +brz +vOT +vOT +pUR +jzG +bNV +eMn +dCD +uGC +oUP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kHM +vOT +vOT +rCZ +opj +vOT +gGf +xBD +vOT +jhQ +ydX +sFR +rBL +rmI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dGO +qQI +ehx +lVM +vLy +bMm +guH +xrA +rOy +nOy +ekj +lQa +qDq +sxr +rth +jRr +bIl +etJ +rwj +rSG +rzy +fqv +qdu +vKY +evp +ttF +aXz +gbd +ikF +uBc +fqu +pVj +nQG +akL +nmD +acK +qjy +drQ +hcT +sdT +wuu +nkr +mWi +udE +icH +abx +fUj +vUd +ocp +nJH +pQy +ioJ +hCT +icw +hlr +eQQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(113,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xca +vOT +vOT +ugr +drB +vOT +nUQ +jfi +vOT +rLB +vSK +bGW +iVY +jTg +hrc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dCi +rbA +hDT +kql +ajc +jBW +jHb +tqc +dze +bPV +pQh +nCS +dXX +cls +dgj +pzp +qgO +xNz +efH +cMe +aeI +jNV +lVv +osQ +kLg +fLd +hJv +tfO +oNw +xlU +jGi +eWd +vnR +gwE +wTI +qIb +ycX +qTJ +mVm +oFW +spX +ukP +lfn +vND +nTl +cUm +eho +xVF +lqH +mdd +hbm +pbI +eXi +gjQ +npL +tno +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(114,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(115,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sBf +jUC +ujq +hwr +gzI +aIB +btq +hxX +pIJ +sBw +cqM +obe +nSe +mTh +lvL +jtL +lRz +okK +nsP +nbk +xfF +rOz +bDU +qRT +ycN +xYw +eNz +nNy +svp +eHV +ajY +qjS +bCm +vLF +jNb +bRc +pZW +aIz +xDI +fwW +fse +lil +iYU +vNY +wFe +eOJ +vSM +oUJ +vVA +lTZ +qNq +tdn +oUl +mff +fBA +ifB +cyV +sdF +tYJ +nlK +eXU +hSa +qJh +qPa +ise +noV +wda +xTx +kyX +wgp +omL +jJO +uBs +wBk +awe +rRi +wFJ +jOP +jZn +yjB +uoU +svX +tzB +tiC +lao +nWn +wta +eAy +rbW +qPU +gZw +nRa +gbv +nor +uWO +fMM +nZB +maf +eaD +sVJ +oSC +fuN +kqr +uTR +tLY +bDd +srX +vFU +nxf +uek +loI +tqx +jDZ +xEa +mAl +dzt +fNV +bAk +wrY +gWY +iJg +vwa +hSY +bLX +eJb +cWe +oXx +lcz +kiL +ein +cNh +cxx +cEO +xEK +gQD +bBQ +oPU +wIV +mEL +bPT +bIV +rmo +wCS +vSL +mCr +lmc +kxs +hZI +kPM +cwr +aiz +rWi +xEM +mRB +ibB +qlC +bfo +iBH +anR +nOK +ryb +ubD +oPh +tGe +mEd +axj +hun +pvv +cXx +nOM +kVJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(116,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ssW +kwh +rNZ +lQh +vnC +qPH +dio +rJC +pFw +eaG +wRQ +hGR +sjy +opF +cVX +tft +cAH +qSe +oyI +mTD +kru +clX +sMP +hJY +aKf +idO +vNP +war +vDi +uwB +fmD +gLM +lJD +dKS +iot +bUm +gwq +lDn +cFD +eap +vjR +jGQ +vGG +djO +nNx +eeX +nAf +oHb +xSN +kJP +rur +kZt +fQE +qgI +yby +hFC +axn +iSk +pGf +duG +eEZ +sZw +qZl +eqk +eFW +uvx +enX +wMw +bem +qsx +kKd +iRb +jQH +bTv +itg +dCo +vdU +tzu +xgV +aIJ +jwu +qHM +usx +vKK +elV +kwJ +jWB +vlz +qUL +okh +xQZ +pem +sNA +mGI +jmF +eOr +mqE +wwB +ccQ +xwx +qEu +mbB +xKR +iPU +dFg +rJZ +rlO +vid +vEN +hKs +syd +fZe +mmn +nEw +oIu +fjv +pwk +mUX +cob +vyQ +kEr +hLR +txc +iqp +fYb +dbF +xXB +pWB +jaD +gng +vKS +xXD +lEX +oVA +oJy +lmd +uZs +twK +cRb +luB +qEW +ftI +vWh +miR +nSj +bNq +iDy +hvG +mnY +uvU +lvb +iwh +gHo +bQv +tZw +eeG +gMp +kxV +kxC +seD +lnT +jdD +jPD +hcY +iMx +fdu +evu +aYV +eka +iKh +iil +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(117,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +knc +hTc +lNh +kLv +kUf +cpQ +emi +hJB +wlM +kSl +jJF +thf +nLA +jti +kDg +lZs +xKc +tTO +lVz +cbg +uQF +myH +oRW +pqw +tCG +sQj +xBc +rxW +tpU +dff +bKa +xXg +sVI +hYa +khV +dgz +nsj +kds +hbU +dNu +iLl +iOg +ilT +cGe +iUj +cjq +rxk +qLH +glt +pkC +lTi +wwL +ccE +eSH +fmo +nPG +vOh +lXF +xxi +dki +klJ +olr +lUl +mFe +las +tHE +eki +cvA +csL +qpg +shG +xOz +tcG +vej +aOB +atj +pnm +hrR +cOT +knV +iSP +tKz +ajf +rrZ +sDp +qdZ +kdS +mEy +vws +jau +nyE +gGu +oQs +eZi +mSb +jIM +txG +cxK +qzw +vIh +cof +aay +rav +hMd +ncN +oYv +uCs +bCa +cFU +xDJ +efe +gYJ +wnu +bjX +sBA +tRY +nrJ +owz +tHW +ofm +umS +kur +yik +sYa +bmu +woG +mau +ueo +rrF +rXr +nOn +kOf +bns +lPa +mZn +ooV +unX +tgU +xHu +oXR +rDl +ejO +uJn +rIS +rxZ +nhT +fqw +oYk +jYk +udt +hzb +sQW +lSL +izk +hmh +cPb +lya +mCU +wan +hiL +iQR +pnC +qxc +mmT +jlN +qwZ +nON +jpb +vqW +kif +rCo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(118,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ddv +uDg +auB +elp +nXO +cmP +jPl +pKj +qgP +xqL +fqK +ePJ +rqD +mwi +kXR +tdZ +mWY +wtj +qhX +cAc +eCM +rEO +ncW +bqy +ahw +naS +vnJ +kry +hXb +kSD +vXj +lDc +awK +sTU +eqQ +iim +bUm +bsu +jDA +lfs +pvc +aZO +yiz +oAQ +agk +xQr +dJY +heV +cuL +pag +rTK +fiJ +aYG +uSL +eOD +mAx +sTm +mAk +qtn +orj +cES +aTv +rrn +ist +eIc +fWa +yjg +xRJ +gsb +vGO +xxH +oGI +uew +spj +nST +mxV +scX +jcd +pFC +kaP +hGQ +dkI +inC +jlZ +xUW +aar +kCl +aat +bCd +sGC +seQ +nxH +leY +mWF +hDs +hll +uwE +rBV +kKt +ugx +pqz +kjf +vDY +xwN +sWE +idx +iNl +jdV +aAU +ply +ycK +lrA +wBh +mnM +xIQ +fRR +unD +jUl +rcb +wfp +dkm +kjt +tFO +dYR +nIg +fwJ +kUY +wtN +cgm +diE +hDa +smN +fYf +teo +msF +bYs +jvY +bpK +hFa +rmz +pyk +ngm +skm +qED +qME +cVr +iZd +pNN +uPS +nUD +qKt +jHU +sly +thQ +uUV +mlK +eLc +hHA +hIw +uCT +xub +ngf +jNA +qYX +nwI +sgI +dUd +uMW +dAD +whs +ccS +pnv +vOT +xDR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(119,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uwL +nsO +tNH +fxk +vVD +eFY +cmw +fvk +dCa +xPG +xYf +dsn +pCm +oKW +keX +xMj +xpX +fgK +jmt +wbQ +tzR +qyv +wkG +xtC +oHM +duW +bHO +lMK +lBv +dfr +izK +fCJ +hOB +gDV +pft +sPg +dgz +eaT +bjr +wUU +qpn +tKg +iqM +uFX +cBR +iWQ +wnx +mah +fyw +qxA +uvL +cZU +hrZ +fst +jjH +gwb +vXg +ieG +uLI +vMs +dOY +vdG +dkl +iVH +rXN +yeP +wnD +rAK +fBS +wML +wMX +mqW +cYh +hXK +gIh +bCj +hlP +iTf +eZM +wtQ +dxG +ubU +eob +rbx +llM +nBP +bIC +qeq +qkB +kYv +fDK +bFO +tEA +aXB +fWJ +rwq +qqV +fTJ +hgX +uOt +fHv +xOW +wYH +fYA +fex +klm +yeF +lUb +aqI +plv +prn +gvu +gOp +pdT +dUg +sKC +ddd +pQY +vYK +vGR +pmL +lFB +cXi +jVn +uUx +pek +iBc +xku +wNZ +edD +umv +tDR +hjA +bjg +jex +jAF +nFi +oOi +rjU +sZg +bPJ +euW +oyw +qjE +tXR +ctT +kMU +hRX +sgW +hzN +mKi +pUw +sLq +oGZ +vrq +vtp +tgA +hAc +eOu +dsO +cTl +uBE +qGn +wyj +tfK +toG +tgG +olG +eNu +hmI +fpn +pnD +vOT +kbe +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(120,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hJX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(121,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(122,1,1) = {" +brz +pnN +fzb +nUa +hro +reS +cVu +ovU +bMs +tFx +sYG +cno +iiX +flS +wbh +ujx +mpz +gdy +vQw +wRd +jNU +euq +uId +iKM +ttP +sMb +hpQ +pdx +gJd +iYE +pKx +rpk +lVY +qhi +uzy +cRv +aTT +qki +flH +mQB +tEG +jxY +ixb +soS +dHy +qiq +rmL +frJ +uzK +slc +opX +opt +uDv +erk +esE +rNu +hYW +uXJ +cCo +uUN +tth +lbE +cEV +lIP +vOT +vOT +vOT +nnM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wFR +pZL +oaH +ckG +dXE +rlS +kjg +nXi +aho +tGB +ihG +eJR +bHF +lOu +oGq +vQg +bMv +pGB +cAB +tBS +rri +lTd +ese +rvS +rVJ +tkx +oHO +dxq +kDP +wms +dyT +mbM +ncw +ylZ +mfI +bwO +xah +wBW +sko +omA +mYh +tPp +cfw +sff +bYI +hDg +uxM +uXX +odb +qnI +xRG +upj +bDK +wFQ +qUy +eIl +aZu +xJx +xdN +rdP +oLH +gGP +wnu +vOT +nvL +vOT +kHb +vOT +nFF +vOT +oLu +vOT +xYJ +vOT +fbT +vOT +xjV +vOT +wRt +vOT +qvs +obu +vbr +qXM +cuW +gPU +xeT +gOA +fkh +fFK +nBl +iev +xtg +hLC +oOy +ifD +jpQ +aJC +kLk +pIa +lJC +lwg +oFR +gZz +uqW +eWe +gaS +pRE +qXD +fZp +hUV +eax +rgl +wEN +auZ +imT +xqe +lQu +cXo +eNW +oPj +qyZ +hhY +vOT +brz +"} +(123,1,1) = {" +brz +jkJ +lFi +oWO +sXu +swz +cCN +dRG +qRt +std +cew +htH +lbE +otW +ewJ +vQv +iDV +vUn +xGQ +fsQ +xvY +mil +cxS +gLx +mrd +aRK +nta +qhf +psW +cbR +cNs +tWr +dCr +sMx +fkO +wUt +eeF +nAp +mFl +uXh +cSJ +gqy +jQc +gKe +nuu +mCi +qom +pIL +bup +iCb +cbc +wef +tGu +ceA +xoi +jxQ +nFl +sHt +qWM +dSE +uTI +sNI +iiy +gXH +vOT +vOT +vOT +sln +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bKJ +qYx +try +rHy +caf +dUV +uxD +fYC +thm +nUy +hLE +hed +uYj +pkc +mCQ +vPZ +pfi +hSw +lgh +rhA +hsf +piU +rgX +jqJ +lEF +qWW +hEZ +sJp +dcT +xzg +fPB +vRW +ikA +qWD +msf +jKW +jiF +jGa +agJ +vuv +wqF +oVh +tAa +weF +vob +aii +jnj +tvO +bTN +xwP +mTn +qkc +cIz +mfE +far +nyI +ivt +qrB +pVc +ruz +mWq +skL +wnu +vOT +mFL +vOT +uwr +vOT +tEH +vOT +viT +vOT +hCR +vOT +tJU +vOT +vOT +vOT +wZX +vOT +tJV +ooW +aWE +vOT +tUU +fnm +gvZ +osG +aqk +ciQ +eUd +wMH +fgs +oLL +dXD +nFM +ycn +vOT +vOT +wTG +sbE +xry +cYq +rDk +rGL +jMO +szP +agz +gcI +cbi +eTG +mDq +wpQ +qBw +ppb +jGU +nls +krm +jVG +apl +fmY +jEf +nLk +vOT +brz +"} +(124,1,1) = {" +brz +aSi +eLG +xJM +pqE +qts +xBH +lio +cNG +sqJ +kls +wJF +tth +emo +grO +kxM +cGp +rCh +lqo +iXc +pTg +gXx +xgH +oFa +pMs +equ +qBn +qhS +qsv +aFC +cvV +teT +cHO +uYY +gsG +jPj +vwy +gEF +vAD +lpT +kyF +saf +nVY +vbW +asS +kef +gim +chk +ffR +vFb +uEy +lhu +wAu +uFB +xqJ +pNE +utY +cSN +rbV +nPy +jNB +jJk +obz +yjV +vOT +vOT +vOT +kNp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sfv +tkQ +kYL +qNP +sca +wjW +gWQ +xcZ +ieR +bEr +hMe +lKX +gIE +xpr +pMH +qOR +vFY +nUd +gyY +kEM +fTq +rxK +nwn +xej +oBA +eDa +qIy +nlp +mJf +kQV +gDl +xId +xlm +amA +jiO +bdz +lCN +jyM +jZC +ogY +lGp +kgr +ilO +xHX +izj +pcB +hLx +hzH +dZt +hPs +hdr +mhq +qgg +dsE +qxw +evZ +ofQ +ukr +aYJ +yfi +nzH +aYP +wnu +vOT +hCc +vOT +dQe +vOT +jDj +vOT +mYC +vOT +vOT +vOT +gjk +vOT +vKo +vOT +vOT +vOT +fze +flP +mGD +vOT +ovb +lDe +gjD +hie +sgx +edg +tph +epo +thU +cQr +rxL +oLp +vOT +vOT +vOT +kGN +nfl +cMJ +lwz +vpi +nmv +lMa +hqg +lnf +wcW +klD +wrD +viq +iHA +phK +ukX +raO +vFK +eaX +mgy +gun +rsF +nHl +vOT +vOT +brz +"} +(125,1,1) = {" +brz +xnL +pTV +nbi +cqs +xEd +xJa +vOH +gTN +cvY +jzz +kWP +tUS +lPq +qfq +luE +wgI +hDX +nlv +aJS +tma +mRz +hFT +isD +sBh +fVo +vQT +gSA +eQD +iMb +geU +wyH +mPI +pLi +qGB +vOT +gQf +hwY +tFE +kyC +brl +sDE +oQa +qaW +xTe +vBF +sPr +daX +nQt +vki +qzu +hUn +oli +knx +aQt +mVR +nAD +bAe +iYW +wKf +pyB +yca +iBs +lIf +vOT +vOT +vOT +ijf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bHN +ngp +eTd +eFX +dJx +jGD +fde +tdR +vBj +qMb +rDK +tyA +dDJ +oWG +rQb +lSy +mzG +tmA +bCs +jYh +vUJ +aBL +jVP +mjT +dwY +pUB +ofg +mMM +nPc +iZg +tOn +kis +liD +dhQ +pTx +uaU +pTe +tJi +ybZ +vrW +pnZ +ipv +uoo +hSy +kNT +hPy +jHG +bjQ +qeR +upX +jIw +cbU +fqE +rFY +gpp +hTs +mSP +mQy +cjc +hJc +qAu +mik +wnu +vOT +cyi +vOT +bwL +vOT +esl +vOT +itT +vOT +vOT +vOT +vOT +vOT +mgx +vOT +vOT +vOT +kUE +yfY +mKW +vOT +tcr +wOd +vOT +jIV +pEY +gqJ +hav +uIj +kFi +swS +mIp +qxN +vOT +vBt +iIa +aDo +nGN +bmj +eAN +dAo +gEL +hcJ +fcT +kYC +mcO +qKM +dRk +pTb +mSD +sIt +bqr +aII +rRl +cug +kLL +esd +inl +uhg +vOT +vOT +brz +"} +(126,1,1) = {" +brz +dvK +uhk +iNY +rlt +raD +ujS +xzZ +kBe +rLo +jXg +lax +qJm +nGT +eWa +rpn +rhL +aKY +svA +jPt +fVB +iJj +hOp +eLb +kit +dXd +bfZ +xyx +aVL +mKf +dfu +vnS +pFp +dZZ +fOf +uby +ujE +xqH +cBb +aNt +kfS +eQO +aeh +keR +bOv +oMr +pTP +iiQ +dLV +lcD +rmg +eGA +ggN +fnB +mya +uTn +cqm +fcZ +jnG +xjo +pDo +fcb +wOT +vOT +vOT +vOT +vOT +eHg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nVz +bts +dWo +taj +txZ +tIU +edO +xTa +egG +cDZ +enM +cmm +awW +bPx +ulb +ork +rTe +cyH +kOt +yjP +nwD +bYV +evJ +dpb +ehi +tYk +tvS +keW +kSo +tNh +biR +ach +ppX +pZf +lSj +gWP +fhB +dcr +pat +xcf +mzk +jLP +fYh +hmB +kAo +rHG +aXu +htX +gPs +eNI +smB +bhi +bVS +gZf +xzA +dDB +sCz +tdF +nij +iuy +tZd +sgL +vOT +vOT +vOT +vOT +llR +vOT +xiX +vOT +toz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kUE +xRn +ayc +vOT +uNq +nop +vOT +vOT +vOT +vBk +sTy +erE +hmn +krJ +hWD +nBv +vOT +vOT +uQA +cri +udh +lvC +neh +xrz +nPT +xxz +fMg +eCJ +lMi +hAy +cDD +fLh +cpi +lwc +bqO +drl +lro +ngj +xSD +axe +wXc +keE +vOT +vOT +brz +"} +(127,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nph +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(128,1,1) = {" +brz +vOT +vOT +vOT +tYX +iVk +vOT +tnm +oCy +wUX +nlf +vOT +vOT +vOT +vOT +vOT +vOT +ncX +caR +fRw +lvX +jSt +bbO +rGb +chv +kMs +gHY +vWs +cwI +aIZ +pdX +etO +cjs +wFX +pHK +bWZ +wIQ +rKG +pep +eyH +laq +rHN +pzB +gwW +uDb +dkp +cpw +gcH +vOT +vOT +vOT +sxm +lYq +oMh +khl +mLR +ldS +pDG +idz +tUM +vdD +vOT +teU +edd +hPP +jZl +hFq +gdk +knM +tej +xYv +aJR +ryA +vQG +bUd +eIX +fkR +cDw +kEt +eHl +rhj +nNT +pyL +hPo +jvb +vOT +iEh +vOT +hMa +vOT +aXv +vOT +fOs +vOT +esp +vOT +eHu +vOT +suy +vOT +oKp +vOT +cgi +vOT +eBL +vOT +toY +vOT +azE +vOT +eBd +vOT +gsF +vOT +ngL +vOT +obq +vOT +tXZ +vOT +uNs +vOT +fjJ +vOT +hsA +vOT +vOT +hQv +fYI +wve +bnp +vOT +bxr +uEe +vOT +tVl +vOT +ldl +vOT +fyg +vOT +csE +vOT +pAR +vOT +vOT +jFF +vQa +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lBN +vOT +vOT +vOT +vOT +xdX +hHV +dsy +cFf +hus +lMW +xua +uEW +vOT +vIY +nHp +hbf +aSe +kOq +qEZ +wDf +qWv +mqm +xbz +qbg +uTJ +rVa +gVW +baG +teb +hcr +mpY +xqy +mMl +jWu +uxK +uGb +wsJ +qWy +vOT +brz +"} +(129,1,1) = {" +brz +vOT +vOT +vOT +iRJ +stq +vOT +qRv +rSB +qbU +jlY +vOT +vOT +vOT +vOT +vOT +vOT +jse +pMS +ksX +goE +xKf +vGs +qnw +eEb +feg +rNR +siJ +vEe +mbZ +hJs +jmC +aXJ +sVn +som +dii +aQW +hyx +oCp +ezW +oAc +hnD +lBO +vZD +lyb +tnA +geW +wrr +vOT +vOT +dRm +tgB +mNz +xhl +bbc +pBc +oMq +mxQ +xwl +cZO +nhr +vOT +fgP +vHn +czn +yhX +dED +rkO +kjZ +pOm +iUh +wdb +cdP +bey +cdw +oHj +aWA +pGk +blk +jrw +nLO +oxi +aVh +vOT +xLO +vOT +miY +vOT +pgK +vOT +rRq +vOT +qvw +vOT +umq +vOT +nFV +vOT +irc +vOT +fnv +vOT +eTL +vOT +gEj +vOT +jts +vOT +pXX +vOT +nJt +vOT +qQu +vOT +wbR +vOT +goV +vOT +nmM +vOT +sIM +vOT +ifO +vOT +fNi +vOT +vOT +fBP +hxz +sVb +hlD +vOT +pCn +pEo +vOT +hRq +vOT +qbH +vOT +uzd +vOT +arI +vOT +dcw +vOT +vOT +fJs +gEO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gqc +wob +wFq +dbh +arD +gWB +nbl +mvR +vOT +aLB +uuq +nlB +fjW +ebU +fEU +hPE +hbS +mEW +fSZ +bLa +fMk +vgr +vxp +kPa +dRy +nIn +eWK +biE +rlX +xkc +feE +xsm +fgz +aNo +vOT +brz +"} +(130,1,1) = {" +brz +vOT +vOT +vOT +geG +vOT +vOT +teF +gls +xiP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lrm +gww +buz +bGC +cgo +hDW +xNc +cAN +oKE +wOM +rgA +iEP +qtp +xiE +ckr +izG +kOk +gvG +rfP +lMf +jgU +ryq +mXr +oOv +wsG +apb +xhr +mIx +hjs +ofn +ujw +rqA +vOT +kRp +anU +oZh +qHQ +hkO +odE +wFA +iwA +tSc +vAC +ejF +vOT +cOq +wOG +iMa +dfS +xnS +gBF +urX +oIR +srg +qTn +krP +hQe +bJN +dXM +veU +xYQ +pjX +pYz +bCx +mer +vQq +vOT +nkf +vOT +iOV +vOT +nYg +vOT +wJr +vOT +vjP +vOT +hKc +vOT +lpv +vOT +sbk +vOT +efi +vOT +hEu +vOT +tDr +vOT +mpI +vOT +ddr +vOT +drf +vOT +roN +vOT +fPt +vOT +aJW +vOT +esz +vOT +jly +vOT +vvH +vOT +xnV +vOT +vOT +uOz +iag +fbm +avi +vOT +cBC +jtz +vOT +bZn +vOT +iHV +vOT +pRY +vOT +fGK +vOT +nIO +vOT +vOT +kFr +sak +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rnU +uwQ +qMA +kiz +itE +doL +lET +vOT +vOT +vXd +pPh +gwA +mvr +eKs +aGY +mrj +rVX +tlr +rwE +qHo +bTO +jsZ +veh +dFP +pJZ +fHM +wPh +rOa +aRr +mHP +qnR +arW +rCt +vOT +vOT +brz +"} +(131,1,1) = {" +brz +vOT +vOT +vOT +rQU +vOT +vOT +aXW +wqq +seH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bmq +lnL +mLI +agx +bBt +ozG +kpf +snT +fhh +lgY +nAa +rck +ggA +fEV +pDe +gXC +kMu +aqt +jJo +iya +kKN +iXg +khp +tyu +iPv +owN +srG +jPR +lhU +eyk +syK +mrx +vOT +xyN +ehP +qfH +tKK +kFV +ylW +ohf +ujl +iIP +mOn +fGh +vOT +pjc +lOw +qbN +iqN +deX +wOk +koe +nwu +bzE +vuu +iiC +igc +kQE +lat +ceb +bvr +kuY +wRy +hcn +xpA +vOT +vOT +wCk +vOT +aej +vOT +xYF +vOT +wHh +vOT +gkW +vOT +hgr +vOT +vHy +vOT +sbY +vOT +pxw +vOT +cqu +vOT +eRX +vOT +dAn +vOT +hQw +vOT +nHr +vOT +sJe +vOT +wsj +vOT +mYZ +vOT +mgE +vOT +jpr +vOT +nIm +vOT +vOT +vOT +vOT +uUr +bhN +alc +ptJ +vOT +rLw +eIo +vOT +cNr +vOT +npa +vOT +rMj +vOT +bVF +vOT +vOT +vOT +vOT +rJX +kBQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gPH +tqu +pwt +eKm +leM +nYA +wYI +vOT +vOT +fqz +ddn +lhp +qZk +fIL +hMK +wsL +lNX +euI +cZH +ifA +vSi +mvc +xmR +kcb +mdJ +qzs +ioZ +bZx +qgb +rKF +hlk +wlU +cmO +vOT +vOT +brz +"} +(132,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +qSd +iVd +bFe +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gBa +gXJ +kuw +aMB +pap +sNP +iNh +ofN +pAK +bVa +eRn +ixz +sEF +alX +aLs +xEY +gYQ +xCE +wkp +iLV +eFH +dbG +oSs +aKb +fMr +rbG +dXR +oZM +gOy +vJL +nGy +fET +vOT +pgf +cam +mvd +aGt +bHR +kBR +hHp +rpb +vpW +heB +bNH +vOT +vwd +lzR +hGx +sFC +aIN +bWF +gNY +gKI +mlX +lOx +gKj +aaj +vJg +yhA +pzO +cPW +vcR +mpE +oAP +gdL +vOT +vOT +iLF +vOT +fCL +vOT +mfs +vOT +jhI +vOT +nye +vOT +cSj +vOT +nZK +vOT +hOn +vOT +tXt +vOT +dNf +vOT +tOv +vOT +glI +vOT +aYW +vOT +wNw +vOT +wou +vOT +gFa +vOT +xbR +vOT +ljd +vOT +nfq +vOT +aIi +vOT +vOT +vOT +vOT +qEf +nmi +gik +jfH +vOT +cwK +vOT +vOT +vGY +vOT +pEl +vOT +rAE +vOT +jGI +vOT +vOT +vOT +vOT +gtT +gyM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jor +wUx +vOT +fov +uHB +rol +vOT +vOT +vOT +jno +eoR +asJ +lIa +rHR +eIm +lEV +tHR +xic +pWb +cAu +unl +clf +bnz +tCb +fVb +sql +sAK +pnx +qyE +ghR +eip +ngr +fSv +vOT +vOT +brz +"} +(133,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(134,1,1) = {" +brz +vOT +vOT +vOT +qVF +lNi +rCc +hwd +gAF +plg +fKF +kNC +xbB +snw +atD +eFn +jki +uxF +jAI +sLa +mjk +gme +eIp +wmf +mwm +qLD +mzV +hVg +ldj +mHr +bcL +drv +oKt +jVv +iYu +gyO +qvY +qzp +dTy +gPz +mCp +fWb +imO +fnt +gah +ngu +npX +sIQ +eyo +ppI +jmy +rFS +ljx +bbJ +inE +ybn +aPw +iWv +naC +dVz +qNs +dSM +ddL +eau +sqS +sjc +wTa +nqY +uTK +oEU +vGS +aRD +bLv +kOC +qZJ +hlK +iAD +ubK +kGT +jIz +ebL +apE +xqn +bhd +qvX +bkY +kdF +bFr +eeI +sNG +nby +wBQ +oDO +iCh +blb +tOE +eNl +gqB +tVa +nfn +niW +bvo +rLz +qTj +eil +rAv +iwn +xcI +gFn +rcX +cRW +kBT +yiV +vuQ +fIf +aiF +msQ +iWg +fmT +exS +qwA +kNO +gzX +hrf +viy +mfy +bwU +rhD +uIx +kYQ +hRj +eBs +aOn +cPX +cio +mwq +gKY +dAG +koV +bEE +rgx +rVq +nTD +xwQ +nyZ +hww +scB +ebx +sNK +vaK +naY +tXO +wTN +exy +phT +eSE +nsd +cuq +hRl +xmm +wIB +wRv +wIf +tmo +uqx +kFF +gqS +gjt +sia +oRg +ptf +lJv +vrb +rSc +ewo +cVo +gaQ +mGM +acr +sHd +srI +kkh +pKD +fxm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(135,1,1) = {" +brz +vOT +vOT +vOT +lWZ +mQl +uYT +lcm +mpb +uKB +evg +nfv +eGw +hGF +aAG +bhL +iOC +xwm +qjg +jFE +rsN +ktM +qFJ +siL +fQc +rvo +tqa +faQ +ilv +oCu +nyY +wVY +xWR +mJG +dto +aDE +pSY +sOc +piM +sGs +igk +vRP +oaI +vhy +syQ +fPr +hTi +oKh +xSf +vhS +hBc +wkQ +ihK +pfb +pNA +vbI +xSH +fZu +kpY +fUy +ahB +mrn +eAL +suj +tnH +lCd +mfH +dIB +tXj +ona +rIG +bsO +eCg +sgB +dTA +fQl +kAa +wTh +iGl +stm +jap +ycg +cXv +qUf +cEo +fbt +oGG +fxI +qPS +bkS +oBs +heZ +kuJ +vZN +gZX +snd +pmA +csn +ppp +gHR +tvW +gKW +nJU +rea +ciU +vmE +hhU +bOS +ilu +caD +uIn +ryH +wdN +muO +tEU +wWO +nYC +kIT +ovi +qVd +leH +fUJ +nbf +sse +itu +fBz +qYN +jnA +tCX +pvG +dRI +gPC +ldQ +vnZ +niZ +pmS +nBb +rtS +xBK +lmo +bds +vUK +opE +pxr +tDE +ljD +gIu +dIN +rSS +bXH +fHU +xgy +ohj +mOU +eny +nsd +piq +kIy +nPm +dhf +soV +fdF +seb +iXQ +kOi +rSv +taf +aDk +ghD +pKy +xYN +mlc +oYS +cUw +oVl +xLJ +bSt +jVJ +imF +nZZ +iOG +ygi +wGR +wqe +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(136,1,1) = {" +brz +vOT +vOT +vOT +xpR +nuz +tcB +jWo +ihs +iVA +uGJ +gNQ +sBY +hNV +bVO +qny +wcm +dJv +bpr +rTA +tME +oPp +kqO +qnq +eAY +oqB +qWN +lAo +aDV +kwx +bIm +jsn +sWT +qSx +mzs +wUq +vLl +dUT +iBp +oue +xcd +dZr +kJL +hLG +gVp +fgi +ryz +vSs +hwy +geF +lAq +fAM +ejK +sGq +oMm +ooT +pWo +dhL +pul +tom +bwD +phJ +ktu +tNf +sCq +tjZ +uNx +gWw +mzt +gnL +atQ +nFc +doN +hgC +pUn +iVI +beU +egg +iQm +qkL +aaE +njR +qsB +bGh +sSI +iUa +tvi +qZU +lie +nfG +giw +fHk +wCL +aEM +aiy +hfx +lUS +xsY +wyA +wqy +eTI +fhW +rQS +yas +kpW +iqz +jyW +ejA +ofR +avN +ffj +kLQ +lUa +uBu +aNs +eve +kET +umN +dfC +iDo +nwc +eOC +hyJ +vpY +bfW +qSM +wty +jkN +fwV +kJd +nca +nbP +vae +wXs +tnK +qsn +uWY +hQK +bIO +pcw +moy +iTn +mRM +uRD +vCL +jKO +bSY +sIm +xol +voM +bbP +wiP +rRf +hsX +tuu +piq +yhi +lJK +psM +hJr +sbN +kEC +yie +swP +mHB +mCd +uxj +xXj +mzM +uCe +jgX +tIA +iaz +bYo +gSG +rPp +iAN +cMi +gCn +vWA +mKK +jzc +eqI +smZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(137,1,1) = {" +brz +vOT +vOT +vOT +jkv +pMV +qAP +ktb +two +lTt +lJN +bMg +apQ +qdt +rFA +dJq +jfj +ctd +pjw +xRX +jBB +glx +uQN +kIK +nwa +fVi +gql +iZu +uXD +bcD +mOE +tdj +rcd +tup +hfI +oWU +uLW +lRt +osA +cmW +lRt +ruE +ruE +sHQ +atF +dck +dVH +cFS +hGP +qrg +ihF +xEp +hUp +hFp +rnQ +uXe +sHO +pSm +nOh +fbn +kqo +kYo +djN +mej +pDS +ciY +xOV +cTx +kNj +hJI +vnu +jah +uIs +iTd +mqs +fVs +rNB +tCu +pri +xvD +acc +eoi +qxK +noB +lXb +fXf +auP +tbR +ulA +ggO +rnS +xHS +eGX +svI +oBI +xuZ +ogJ +sve +sCy +oaZ +rMM +qEg +vjv +wKC +oSr +cip +oWn +arw +tbv +gID +iZO +iWf +skA +psc +rXg +geD +lLN +fEA +fod +pJt +guo +dGR +wzc +uoH +raC +iPA +fyY +weh +keq +gLF +dLi +twL +cBF +ubo +rBd +nyi +wtt +rzY +jKh +qVG +dqs +dkf +rZp +nKj +dik +xhX +fkW +gAs +xDc +tla +oLF +mRx +ptz +xgb +bJM +yhi +vSF +aaR +qIS +mMs +xMo +tyU +pcV +eIR +fJj +rko +nwB +bTA +pol +fSd +bKx +iml +nvJ +bJS +dPE +hLX +keD +era +dVF +mpl +ehz +piI +iMQ +snO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(138,1,1) = {" +brz +vOT +vOT +vOT +aQl +dNa +elf +hbd +dsl +vTa +kIm +kle +wOB +bkt +idy +iMp +qPg +cCr +ctX +pdG +gIo +iDr +nMC +sNZ +uRH +fSo +fyb +swV +dyq +nTh +hpm +xER +oaT +fiH +aqR +wlS +ctI +cVM +lKD +jVd +uLY +kTX +ipA +kqL +lpu +wTv +vKg +amU +fZF +gOH +vnT +afm +nLz +gJl +oWX +dPR +uhm +nEg +ohs +jea +poD +xyU +ieo +bKw +vte +dhr +txj +czw +lWM +svq +cOr +oUm +emH +fRa +btL +cYM +gzl +tnS +mqh +vaB +ktC +tjV +xrL +vOT +rkT +pHq +xdo +aZb +emr +mzp +mJE +ygm +jKt +jcu +clJ +emG +onL +uZz +lHz +ieH +tzU +oeJ +rds +hrE +kIo +nOF +und +sZt +uvQ +iJZ +sno +jyJ +jgm +kWv +bqf +qdU +uXv +muH +wmZ +oDX +ofh +aOK +iWJ +uMJ +iPM +hEq +txd +pNB +hoq +gnD +iVa +xzJ +gfF +rij +ckE +kfD +mtE +oen +lLO +dkQ +sSC +ava +lHj +loR +pJN +hGW +jrM +uOI +mhA +cuf +cXS +aCc +asF +lcp +wXA +eSE +lXC +pSW +xHb +gqu +nnn +kUr +hoH +bXL +iCj +dew +vtA +jMK +cjC +dOM +lnN +bYR +msR +iZq +hSn +igW +dHz +vIp +bnr +tmb +vWi +wHU +otK +cwc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(139,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(140,1,1) = {" +brz +vOT +vOT +vOT +asn +hqd +kdy +iyk +mfV +kEI +ejY +lLh +oTz +cME +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hvM +vYa +aes +trI +eFi +xWi +tsa +tVS +whK +dKO +kyo +ttv +skM +dBU +rkk +poF +tsB +uAN +pHJ +qmW +cjZ +ydq +pEe +cWa +xcH +gco +qso +sLe +bSq +kup +eBw +fXA +vkV +wnH +rUB +uYI +gxS +uGP +kIg +bbG +kwU +ujN +jxS +dyO +fUB +htY +kDC +vDD +wqM +qSE +nvT +kKr +lmi +syE +wHD +gGJ +nru +vOT +wJM +tvl +gyU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(141,1,1) = {" +brz +vOT +vOT +vOT +izb +pUq +sIq +ohG +cTb +lSC +die +ePc +iTH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vxw +sgV +nZc +dcW +vOT +uBp +kFG +oOQ +hXU +pph +eEW +iGA +tsq +nWY +geo +obQ +dwA +pUd +tUh +wAA +sUq +lMF +usz +jui +gHH +xXy +cGK +lww +xqc +bZg +kZl +tUx +gLl +oBa +fGi +wAq +fsz +jSV +hZj +bRK +dAU +qIU +mve +rLa +sIX +tCH +gYc +ade +nno +kUK +dyr +oxT +dar +bFn +nzc +kuX +gXq +vOT +ucD +tmm +vbK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(142,1,1) = {" +brz +vOT +vOT +vOT +sKI +qLj +iqd +fEm +ruJ +gQs +mtG +hmw +dCB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jAY +hEn +vsh +ccx +qYh +tGr +wlz +bPY +lyk +lMU +dCy +xZW +wAW +kqm +enC +tds +hFS +ceD +giA +cWz +eVr +gpE +sWF +vrn +klz +leT +tEQ +tDG +ecM +ewC +eDA +gTI +xGl +nXM +lRr +rVE +gud +xIa +ikp +vUm +vjO +jPU +nol +xZK +jnw +kzQ +nlm +ohH +dyA +sGH +bag +ktN +lZK +pMg +oww +oqD +axV +vOT +ace +rMV +vbK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(143,1,1) = {" +brz +vOT +vOT +vOT +aFU +sJi +tux +dbq +vMZ +qcm +lSK +jJT +iaT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vwm +nwp +rBP +iJh +xfh +otB +loL +qAj +pmb +kri +aeQ +czb +mHz +oWg +lKh +sdG +feM +aqe +eKR +xKm +knG +sxF +iXa +sQX +exA +ojn +wnk +tdi +cab +qDt +fxB +eDW +pIi +mIN +iPW +vIz +nYP +tdJ +wad +kvf +sfQ +gge +jgN +jXC +aDv +gwP +gLI +yaR +mth +apZ +aNe +djt +poC +kwm +scr +wWB +wte +vOT +gxO +bbp +vbK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(144,1,1) = {" +brz +vOT +vOT +vOT +rVQ +hpd +lQb +che +xhR +jjK +vlu +vqs +enp +vOT +vOT +vOT +vOT +fTw +vOT +vOT +vOT +vOT +vOT +vOT +sNx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eTZ +goL +ozk +qWX +ech +pVk +pdF +vjt +sWo +pqQ +hVP +vlE +wYZ +lhm +kam +gTu +bls +sul +wgz +igG +eTF +ljL +bVZ +npJ +tES +gEd +pxl +olb +fcw +gpM +eUU +cPu +aTZ +suw +pJi +ucN +dcA +axy +euj +wNT +cQE +qMn +laI +uac +asM +kAV +pzx +dGE +uZn +gce +gna +tPi +mac +oOL +fMG +mFq +lAi +vOT +jjW +qOu +vbK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(145,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(146,1,1) = {" +brz +vOT +vOT +vOT +lBq +pmz +qQP +qCC +pDO +hrO +tHP +qyj +ddy +hPo +dWF +oYT +bwH +rgY +wvt +vVn +svV +uAD +xYe +rnG +xeb +cbo +eCL +vml +qAa +fcS +gBE +vfr +hSt +rJl +iyg +fPz +mQw +nVr +uvF +jDH +cgu +mPi +cEU +iBI +utN +cXk +gQi +tWE +aXa +ovI +lhX +txx +oQm +pDX +eQW +tNZ +nql +vyf +edu +fEG +bYj +nfW +gXb +hvn +mpC +ueA +fXy +rkA +vNm +hZz +qhH +veo +wFS +gjH +jwT +irH +pGH +mED +qpX +bhH +kDL +qdJ +mHS +sbI +nlP +jRF +het +nIo +euS +ylD +meK +vYV +evf +jSi +mcu +xaj +rTC +vQP +nmX +hoA +rRL +faw +kGY +eas +oxC +mOF +iYs +xgC +qef +atn +uPM +wqh +okd +rJU +voE +igN +lkj +iYK +hEe +wYg +wzn +tAc +ofp +ciA +ses +cRT +xpI +pCp +jHz +fIR +hOT +ryu +tAf +tzb +tOF +qHS +aoZ +vtw +cnR +hXk +kUL +kfB +kbI +jzS +jDY +dZm +qhu +fxL +wiT +fNH +pBC +kyS +ruy +owD +kCQ +qKG +jnP +rDU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(147,1,1) = {" +brz +vOT +vOT +vOT +gSE +ajr +rKJ +xKG +pGN +gpu +xqI +cKf +mnp +uJi +jcQ +aHB +lJI +puM +xMs +lQJ +fAd +kRF +kUD +nlW +qRa +fTw +fQT +fut +tdY +trQ +cWq +gTD +rEc +eeW +nuY +ueC +bkv +gvF +egn +hgB +pIH +clx +kzL +ppK +vsb +rCX +cBx +mwf +oBj +lwf +klX +mYn +beb +lBW +aWF +kFy +hMj +wRU +ujv +oJn +aCs +fpN +sWk +hFd +fJJ +lHp +gNw +rJu +ijs +lGd +sQn +jTz +mch +wvu +dbE +aRf +lOZ +sWR +bSx +huh +lus +pth +dYT +mgn +hUP +chZ +xzl +lfE +gcB +qpo +luc +fyE +dGU +nWi +eRF +oQy +eMw +fCx +udJ +kmM +jbJ +dMu +kNn +feq +xjT +lLv +mtw +mJP +nig +tHO +ovB +nMl +yer +rTD +rMS +htt +woU +dxu +hkI +bHE +nqv +hBW +xpp +pNs +ikQ +klv +rVB +gGT +oZk +orv +vik +ibG +gOI +ltL +nQd +irN +xDp +tgJ +uic +dex +bHw +tby +oNK +uGn +fRX +llX +hFv +gEr +fpL +uAj +hKa +leg +lqb +aJo +bPw +fae +nwy +vvh +gQU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(148,1,1) = {" +brz +vOT +vOT +vOT +hHD +ltS +vUa +pOB +sen +qab +uAu +lQl +lwq +yki +reZ +npq +rZQ +udU +hst +vva +dgg +bJi +nLF +mqk +hKF +jfs +pvm +soc +rUe +sJU +mKK +qiL +oFZ +sVd +vKJ +iDS +nMU +kDX +rYL +xsA +uLL +jKU +occ +eco +caW +rQa +rUQ +tFQ +nOm +dyR +uPT +pEN +oKa +llr +kas +xeo +vkS +gjZ +nfm +lxp +fkb +vnI +qbx +kdf +nZw +tUw +hQk +kTr +pLy +owa +vzL +hQM +joG +bjy +dGJ +eso +lZW +qss +eoh +rFa +wAc +seI +oSO +igO +sxc +cml +mqa +aVZ +lMu +eju +cwd +wep +nHK +wcw +mYA +rrR +jtN +brJ +pBl +gkc +xJA +reX +rCP +tDS +cet +eVk +oIm +wQc +tbK +old +sOo +dCg +xxV +ttL +yjI +dOq +knI +xKM +fOt +ssq +veM +dfO +bZT +kHh +wdI +sAF +qlz +aer +qcU +bWx +cvF +tPJ +vbA +dRM +vcW +qoG +hpK +oVr +jqo +vxa +ilw +gRJ +bvf +lrN +aMx +qSt +lvc +fED +jUs +aWo +lZG +pdV +vsC +dOk +tQU +tym +aRW +rjm +xfR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(149,1,1) = {" +brz +vOT +vOT +vOT +gdv +xkf +pfa +bIz +wpd +har +uKw +noG +rqe +naT +sgK +eqn +isC +jpT +iMZ +jtq +jKk +mcf +vXm +nVP +nnp +rnC +udM +qTh +qjo +vRJ +wPs +xsV +kDt +ftt +ntI +fVT +hWt +lGo +bQK +mGj +tiU +pkz +kuO +xcc +wbE +okm +lEp +qWI +hBh +gei +rcO +fIn +uRT +tdV +ddu +kYq +uWg +heH +oeP +gIc +cOF +kgd +mCH +lyG +okR +rcP +hzs +uRQ +sJy +vOe +jvD +fjm +tRr +ePk +rot +sIx +dmN +eZk +huz +piF +mgv +iDG +pmZ +clo +xZE +jyu +bpd +anu +huN +akP +uPx +gTx +uUp +xHn +xMz +hnW +uOj +jGB +tQe +cDY +gle +vCs +fdj +esf +pje +vPc +lGq +bzQ +jIv +mWw +ryV +qSK +fwM +gth +uXB +ydM +uJY +nYx +jnb +pWw +kAk +uva +cMX +oEb +nIE +tLz +dDz +rbJ +opZ +qTW +xek +nKS +auG +tUQ +fzw +fCO +dlS +oUw +wcL +cIa +wbx +reU +mRW +wTs +jcZ +pZH +gCw +oWK +iVl +pRo +xAl +uud +aMZ +sPS +qbJ +lmW +hqc +otF +gZK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(150,1,1) = {" +brz +vOT +vOT +vOT +mqV +eLO +vyI +vjN +blr +pIN +iZt +gzD +gzb +gHz +xXV +bpL +wiF +cOS +jjf +qxJ +rHg +cNp +fJN +uOd +vgS +cyx +tjS +kkb +lRh +ocB +ocP +vuh +wgu +fko +xDX +xKQ +uSj +uMw +wCK +oHT +ttB +sWB +bzC +jAO +kob +rcq +hYl +uAk +pus +tCy +gTl +hnP +kBL +gKy +xOo +hVU +aBK +vDC +mNs +cQs +fQu +den +wRm +pPk +dYV +ezs +ltO +ebQ +boa +izM +slf +nLy +awM +ozc +jcU +tcN +eCd +hRi +cCY +oEF +tIY +wak +sYp +xSL +hbE +bZk +roj +dra +ggB +ayN +bmW +mjY +nry +wor +vAX +sPe +eZT +vLt +amj +rcs +ttd +vJa +iHC +ntF +ewH +wyS +ggU +pha +uMz +wrZ +ylr +rqf +nPM +sRX +eZU +oGo +oBc +rxj +hra +wqt +nvt +dhN +rSw +mkl +sEh +hjW +iwt +iQN +uOC +pJm +bnh +bjD +clD +vvL +xTu +mwV +hcU +pCq +hAP +rjT +vhN +rSg +vCW +gPV +hex +sfu +uUB +ilY +inn +tRv +uDk +bsA +xsU +izJ +uDY +vYI +ceC +hZJ +wHA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gdQ +was +vOT +eNG +vOT +kYh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(151,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ppe +piv +vOT +vXx +vOT +pDs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(152,1,1) = {" +brz +vOT +vOT +vOT +wZQ +dAp +nzl +sRT +syV +nRu +hYm +yaG +kgm +shu +vUA +rCe +xOq +xGv +mqe +fHW +xJB +bsa +cLB +moF +isF +dab +tUt +iBb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +chA +sCf +fvq +jwx +mYB +bzU +bbu +cfR +xGd +sGO +nau +etr +bmZ +vOT +vOT +kGn +xKX +fid +tpu +dBk +vLV +kUI +xEN +oCC +cvJ +rvR +pJu +ijp +gSW +iZG +koq +syl +qyX +wYK +rZB +jni +jbA +vVB +bwm +ubt +jBF +rHQ +wNa +rnA +bMh +hUf +wiL +urp +tEK +hLU +iTi +hsr +vOT +vOT +riT +wvy +dHC +wDz +koQ +bcT +suQ +dof +aSS +hve +vSp +bKY +vNG +kMi +nyX +bGP +jtO +lXT +igL +ueX +dMK +sXQ +vOT +bne +aPb +qKv +arO +gZO +wVh +mFs +xlc +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lVN +fai +vOT +qZt +vOT +hIy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(153,1,1) = {" +brz +vOT +vOT +vOT +pTn +iMO +uey +jXy +tdo +uVa +tLZ +uQj +sXM +sIe +ung +xAk +bth +elJ +jTw +lrI +trl +gzp +nXh +qBy +kpK +fcJ +ciw +jmH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +caC +rXG +iZX +odX +imq +fsT +xsD +fiA +ppl +npV +xnX +qpQ +rIm +vOT +vOT +mzl +ndb +lOc +soN +tyO +gTR +fiS +wgF +lHT +sBs +hOC +eSj +veP +hlg +xyl +qeB +sYj +hZN +wux +chJ +iiL +iEO +mkv +vfV +kAP +sTu +bdZ +fRx +xVs +cyI +wHY +xnD +gOJ +uZO +bdY +cfQ +vOT +vOT +vOT +cxb +eDR +qei +jLb +rFo +qQa +plT +aMG +jfR +wwy +ydl +mBL +boo +vHq +jEy +bdx +hXu +aHf +xyr +coG +ssu +heA +vOT +aaV +orJ +fdC +hOi +iFe +hqx +soQ +nnE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wfJ +nbG +vOT +cXX +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(154,1,1) = {" +brz +vOT +vOT +vOT +qRg +hMc +wBT +wGs +vzZ +sIh +mdF +bwM +sWl +pWR +ekm +eFC +oBD +hDo +pDA +wvn +wVP +vgt +fkp +jNr +lNm +oFe +uPp +jKM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xFD +xvs +cGh +sEw +xAc +rRB +nxT +czj +gWg +upD +cUA +uVi +amV +vOT +vOT +tNx +lMr +jby +jeu +iKl +qGy +bbn +xGs +wUr +cYN +lCf +mPP +fiK +ygy +nvC +jgu +nkS +eFK +grL +fVM +hDb +aOb +mwM +tXc +mcB +hLc +hNL +xCH +gmf +lhe +hyO +aZE +qce +sog +iTJ +ejp +vOT +vOT +vOT +tei +iTc +bJD +wxz +pyK +tbA +bBM +woY +cIB +dnm +hDC +aBP +koF +fBk +oGm +sHi +pLx +qeI +mkc +onh +sYz +eBg +vOT +hhp +anM +wcZ +jey +ptL +knO +cPB +koy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kFx +uEw +vOT +kIN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(155,1,1) = {" +brz +vOT +vOT +vOT +uKi +kmH +psS +ezw +ooJ +ctV +dmx +jZz +tIy +xHM +wWt +sdj +bXx +aZa +tJC +uHL +xNN +btY +ykd +tzI +uEd +gXv +mQT +nJW +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fvC +tkH +lDf +hHS +gHj +mxD +gFW +cJh +fBe +ted +uiR +hMt +vOT +vOT +vOT +eVe +mxZ +aMz +rPJ +elU +ixY +kwj +kRo +mvL +ffM +iuw +iRl +bcf +xia +eYm +fhN +cJD +sUn +qGR +ojd +aOX +bzH +nCs +sZs +qBk +hhq +lcQ +qad +rZE +buX +wtu +cBi +qUU +wsY +seF +mOI +vOT +vOT +vOT +gfU +swN +leD +hOm +xCz +uEk +bof +siy +rQc +cqz +nXK +wcD +mGt +hnz +pdu +xQi +rEj +iaV +kMV +ddT +tEt +iBZ +vOT +ouw +tpK +oQD +wDF +fuw +gZY +foj +iCg +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qEN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(156,1,1) = {" +brz +vOT +vOT +vOT +orW +qDJ +nWT +xKx +gbh +uCj +xPK +rPn +azS +aju +mAB +vZM +kRD +psR +gtI +dVu +jWY +bPN +lAu +umV +baU +kHA +kdq +pKz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sBo +lhl +wQs +tUv +dpa +nAL +nXr +bsX +xML +bOF +lpj +ylH +vOT +vOT +vOT +kfL +cDu +xwc +pcH +tPL +fZx +pYM +cPG +eMd +vgK +tzf +qMO +fUk +rSo +jxX +fEK +aMc +mwQ +qWi +lrp +hWd +xbS +xVh +mIM +yhm +jLR +nGL +pXb +nBE +kAj +thN +bAo +ioW +aAk +wRT +jzh +vOT +vOT +vOT +wVW +kkz +hEH +irT +xYO +iId +nLx +icY +vBU +uIQ +oPH +wJT +jMP +ghB +oyX +hNa +qMz +pDr +eGR +xlF +eht +vOT +vOT +wQN +lPO +ndM +lxu +hrp +lkd +smI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(157,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iNU +myx +jzd +eOx +jNh +fIK +bOm +xcr +dRQ +qDr +fgd +ngO +vOT +vOT +vOT +atl +ran +lTm +ljo +wKb +rvX +mFj +ioY +reI +nER +pyb +cvq +wzL +kqz +atp +epN +uLm +ety +xkR +vEh +rXB +iin +fLb +qsT +qnG +ruZ +wKh +uKq +taE +dRl +yhD +eug +hYB +eiL +sFo +dQh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hIy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(158,1,1) = {" +brz +vOT +vOT +vOT +nxx +quS +vOT +vOT +vOT +mwD +vOT +txk +wzu +hig +uXz +jVm +fKg +rBM +nRw +kkK +fCP +wxc +tbY +wFM +opv +rZy +pJv +xJs +tMV +mHQ +wMR +dsI +jFn +dBj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xXZ +vOT +tHP +ibZ +dfJ +pTS +dJq +fwM +raK +pAj +vOT +vOT +jro +tGf +vOT +uSH +atu +uNS +cBq +nKO +apr +vOT +vOT +vOT +vOT +vOT +wbw +lkC +bEs +xcV +cNa +dqJ +fGW +erz +vOT +bfs +vOT +vOT +vOT +vOT +brz +"} +(159,1,1) = {" +brz +vOT +vOT +vOT +rdI +eYn +vOT +qpY +vOT +aGs +vOT +ufE +qYs +vKT +iHN +azA +keA +wwl +btG +kSG +meB +kwP +hjm +sMe +mXL +wIo +jBY +aRa +eRc +rru +kxN +bnV +aDL +crb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kOC +ibZ +cDo +sgL +dJq +fwM +evm +tqy +vOT +vOT +vOT +vOT +vOT +uSH +atu +uNS +cBq +nKO +apr +vOT +vOT +vOT +vOT +vOT +vVQ +cEb +osM +aBg +iyf +eCO +djF +xVg +vOT +mSx +vOT +vOT +vOT +vOT +brz +"} +(160,1,1) = {" +brz +vOT +vOT +vOT +vwb +qDV +vOT +vOT +vOT +vOT +vOT +pgP +nWh +uIz +tqO +hya +lty +lNN +hXA +fQB +eMI +bWX +kgk +bpS +paG +xZS +ntu +fDT +eLa +flz +gHh +cwe +nJJ +ktF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ngb +vOT +vOT +mzV +rCK +laE +hHD +wcm +eGR +uzM +cNl +vOT +vOT +ngb +vOT +vOT +uSH +atu +uNS +cBq +uvz +apr +vOT +vOT +vOT +vOT +vOT +rPK +ucz +lCr +ecZ +oqg +ikq +vOT +vOT +vOT +nJn +vOT +vOT +vOT +vOT +brz +"} +(161,1,1) = {" +brz +vOT +vOT +vOT +jzg +vOT +vOT +vOT +vOT +vOT +vOT +vVa +bKT +iYI +seh +bbW +iiE +mWU +sXF +inD +snx +sDw +vYd +dwK +wpS +yfG +hla +iIl +sbP +hCG +viZ +kTO +beS +uIs +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gWP +rCK +lTt +vOT +sNZ +eGR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uSH +atu +uNS +cBq +fJG +apr +vOT +vOT +vOT +vOT +vOT +qhB +gWa +sQB +ffy +uSa +uaX +vOT +vOT +vOT +lWk +vOT +vOT +vOT +vOT +brz +"} +(162,1,1) = {" +brz +vOT +vOT +vOT +ulr +vOT +vOT +vOT +vOT +vOT +vOT +bUD +upM +ugv +cOz +avI +hVR +dbv +jES +ezG +pqP +rED +bbZ +dDm +bGJ +bzz +bOz +uFC +xlD +cLk +mky +geP +pIb +emH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ohf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uQN +rjM +two +vOT +sNZ +eFn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pPC +rsj +jKN +uXM +qQO +wvz +vOT +vOT +vOT +eBJ +vOT +vOT +vOT +vOT +brz +"} +(163,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +luq +vOT +vOT +vOT +bJV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ngb +rjM +hVg +vOT +sfQ +eFn +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kTn +bEq +ucS +mUo +loJ +mwx +wbI +xPu +vOT +mqq +vOT +vOT +vOT +vOT +brz +"} +(164,1,1) = {" +brz +vOT +vOT +vOT +nYs +lFt +ojS +nwM +nGr +nPW +gcR +kfN +gIg +ptR +sBu +wOp +qGF +aUk +fVh +vkg +bGX +kVs +rUg +gbr +agT +vLP +sph +pwT +vFq +aix +sBd +eqD +iwL +lWo +qbT +qse +oKj +jav +wER +dRu +lqX +jnR +cgX +xVD +oUP +bNV +htr +xVu +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +joi +mDs +nuM +gOj +cxJ +gzT +nrL +wib +pqN +dgT +vOT +jom +bBZ +eZO +jJt +dPN +ohY +sDc +mdG +vOT +svU +kTJ +wjH +iAc +cPN +cQg +jTv +kRA +eja +dGx +aNx +keT +bJT +bWW +lKB +knQ +xHm +tnO +gpy +lev +qKe +cIX +xvd +hXy +mhM +mrI +iPl +oHC +mGH +soq +bdS +gvy +tye +ukx +kva +mkb +gEy +fJZ +nBD +xwU +cjk +iwm +oRm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iNZ +vOT +vOT +qrC +hyP +hyP +dzF +mMi +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xwl +cOS +vOT +vOT +vOT +vOT +jro +wZY +vOT +sRY +btQ +gZD +dpu +ted +cEm +vOT +vOT +vOT +vOT +vOT +xhs +mCY +nFm +ioK +akt +vMY +vOT +vOT +vOT +wGb +vOT +vOT +vOT +vOT +brz +"} +(165,1,1) = {" +brz +vOT +vOT +vOT +hul +jId +meW +lyA +vrM +eCP +jhP +cja +vwg +mze +lcr +lpl +nRC +gIO +aLf +ejJ +fIY +ntB +dBx +miE +ydt +pOr +nVc +mRa +xkI +hFY +qcw +pej +dlM +cuE +eUr +fwx +atP +iiH +lHD +cup +fmA +sfc +iOY +ltP +uGC +jzG +qsP +rwh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iAE +wQU +sYJ +lLB +rgq +kEw +ggw +tLH +fNy +qlT +vEi +kfQ +mAL +hBa +jLp +aNz +bTL +xZu +anO +fuh +eNS +vGg +pTG +qMP +pkZ +cis +wIN +byE +igt +xat +wDn +fJR +dpA +ueG +aHs +wgA +aYv +duL +kPU +qlb +nPw +nxa +jQf +aNW +jiE +uUz +bgr +sXG +qlq +vLc +vkY +uvm +bWQ +uzz +aPg +fPi +fFL +hEC +uSS +cSA +bPn +pnu +gSM +vOT +vOT +vOT +vOT +vOT +uKc +gKZ +rOh +ffa +kny +wHf +awJ +niA +jXS +ujD +ifE +dTn +rit +fdl +fBK +pDf +pKd +rsp +sWZ +jPx +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xwl +pvm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sRY +tBt +gZD +dpu +ted +jGK +vOT +vOT +vOT +vOT +vOT +mdI +fHc +men +rgQ +sUP +jIh +vOT +vOT +vOT +oZr +vOT +vOT +vOT +vOT +brz +"} +(166,1,1) = {" +brz +vOT +vOT +vOT +tVN +knN +cJt +xmf +rTT +aDZ +obF +mWo +jHt +kmC +cid +wHT +xqi +cAv +sFJ +vMC +upZ +qZa +gZH +wCH +ptI +paS +wzH +nYf +oZw +dQj +vwq +dCR +upo +hUk +gSx +cnE +imL +cAF +sVL +aKZ +gIG +dgJ +rOD +nwN +dCD +pUR +bBS +fgk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +aYh +bPR +qeD +vOT +aPj +mPF +kmR +iwK +tFj +vOT +nCf +sZi +ujX +jFj +mQP +hVe +rAX +wdR +vne +yha +skY +htQ +jIr +egY +vnv +jDU +qKq +kwg +qpe +lwY +dDE +reM +ggv +fLf +sjw +iBT +hhH +vjb +rcU +qPd +wxa +hEh +muL +eOc +ily +vqD +gxD +lnv +xfk +vup +sNM +iBX +kbC +rRN +afD +bzB +tzX +tEx +qDM +hAJ +pkk +dnF +ayS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bzC +eDR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sRY +oJJ +qhF +dpu +ted +qgf +vOT +vOT +vOT +vOT +vOT +lWa +tNd +qmA +xNU +gZx +ewM +vOT +vOT +vOT +fiC +vOT +vOT +vOT +vOT +brz +"} +(167,1,1) = {" +brz +vOT +vOT +vOT +nIX +jEQ +uFp +pTq +wBx +aDR +pba +iaR +xXC +jtC +pjU +bNx +mmv +lRX +gQg +lAA +dMQ +kLx +hBw +jAU +sCH +dSt +cgH +uHS +ffE +tiP +cLh +wKM +pzK +xWq +vOE +xts +haE +hXD +ixP +dgf +uYV +rRu +kHp +qSC +eMn +fPy +vFd +hSH +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jFH +lKU +uhn +vOT +vuI +tfl +kTQ +dYm +wjB +vOT +kNE +cqb +vhZ +vVs +dfE +aNw +aNa +xJm +cxz +lin +dHr +kqF +uIf +fmy +tFl +rCK +hIA +gWc +vOT +pqo +jCj +hVd +iYa +fsl +aIE +qJa +qQY +jGE +alL +vBp +ogb +klI +bSp +qYe +xtZ +gCX +lmf +xGV +moX +vVu +wNn +gfZ +oPM +tpq +jaq +xJp +gru +wTn +oIq +ddh +sjt +diH +xMV +vOT +vOT +vOT +vOT +vOT +vAj +wii +gyX +jkk +xuw +eCk +gpm +xpl +iaj +oLB +los +los +aNS +aNS +qsq +nIJ +dhn +tUZ +cLb +uSO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +sRY +fPw +qhF +hDx +vOT +bbg +vOT +vOT +vOT +vOT +vOT +jKD +cBE +hmm +qMD +psL +jNF +jEe +ghj +vOT +sRM +vOT +vOT +vOT +vOT +brz +"} +(168,1,1) = {" +brz +vOT +vOT +vOT +rYv +vOT +ckf +cLD +dnr +xvH +rWL +uio +ibM +ssR +ieS +sfM +bLM +aNX +pjj +atx +mpy +mQD +rAZ +cDo +izR +gbp +pka +ezn +vad +oap +cIH +jtM +iCc +nVb +fQj +pYg +nKN +rzT +rIQ +dYI +kgD +uer +rrd +bDj +lRL +kPK +hUZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nMv +oIJ +nZI +vOT +cnX +dDf +vLg +xxC +hfC +vOT +rlV +jXZ +spO +rzB +sQl +xMi +nxm +kCM +xIb +fwQ +tcm +uTa +sbe +mCG +dqw +qwi +cLy +gJD +vOT +oFq +vMm +bLb +vyO +hYG +nyN +pcs +ojR +qhK +nLd +swD +vOT +sNC +uBy +gxP +nxz +dLf +ptw +jKi +xoK +nOS +slo +sjI +arl +tjb +qyS +eTX +nBW +iid +tVZ +jGA +lcq +cfq +giE +vOT +vOT +dTn +vOT +vOT +vOT +vOT +evY +vOT +jXd +eCk +wfh +ajV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fKB +pvJ +hDx +vOT +bbg +vOT +vOT +vOT +vOT +vOT +hfX +ley +rMp +mJK +vhf +cjM +nJg +tQu +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(169,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +plC +xjy +fMe +vOT +dvX +val +cRJ +dpo +igy +vOT +uUG +jTm +jXP +lOe +vFO +vOc +vIS +kuH +eYa +olq +szH +hZp +laD +lvu +oTZ +vOT +mCo +bFy +vOT +dKD +nFK +xOk +oEt +qpK +uTZ +jDz +kKc +vOT +xKd +rbD +vOT +xHZ +kYT +wZE +hGy +vxt +rxg +bEd +xij +aoU +exv +tMJ +tTS +uFZ +nJE +gBz +jjO +vJO +dOA +ayi +hcj +hXG +fEI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wfh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gtA +pvJ +qSR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wZV +luu +dMO +vFz +fNz +ilN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(170,1,1) = {" +brz +vOT +uxH +vOT +jRg +hwZ +lXp +vOT +vOT +ohD +jvW +pMv +fiM +gKa +cKn +uUH +dmJ +akd +gNv +eMs +vOT +jDO +knD +tKI +raP +oln +fhI +sZn +uCo +emO +rTj +eBu +bmI +ixF +mQc +chU +vOT +vOT +vji +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +xVd +fLV +xbB +pzM +hls +vOT +iKG +omc +xVD +ltP +oDm +rhg +hos +jdQ +mBw +uLX +vOT +nIq +uau +vOT +jqu +xKm +khl +cqR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(171,1,1) = {" +brz +vOT +qsg +vOT +uEB +cGD +vOT +vOT +vOT +qDA +hNv +kPg +ajQ +kak +dyZ +qUW +sWb +kuA +xGR +qXv +vOT +lLw +jzE +fpq +reK +lVd +eVQ +der +tcu +wRs +wnF +tNl +luo +iBj +fKk +vTc +vOT +vOT +jKa +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jhh +trk +rXL +lPM +gYP +oKw +uuG +but +gOT +cBL +qsO +dDX +wEp +hkc +nEe +rxQ +sLD +tIu +vWR +ezU +hHK +sdu +rgT +atC +kSS +ueV +spS +nMa +xNr +jOW +lRm +fes +pcK +sHW +tZf +oVI +czm +cPH +mZq +gDb +hMH +fDC +viw +fwb +iCK +eYd +hZi +rTI +fTP +rdW +bPF +xmn +bZh +xvm +bvx +uvX +lRc +nHa +cbW +gaa +mtk +kno +rka +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pTS +dfJ +jof +hls +ibZ +fwM +rih +pAj +vOT +vOT +vOT +vOT +vOT +vOT +xbc +eTF +khl +cqR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +bke +vOT +iwC +vOT +sAj +vOT +aNb +vOT +nie +vOT +gEp +vOT +mAf +vOT +brz +"} +(172,1,1) = {" +brz +vOT +sZE +vOT +lwQ +xqp +vOT +vOT +vOT +vVr +lij +rcc +qrs +eOf +dBI +eIz +pbH +sbd +pEx +suk +vOT +xIz +hQt +qdM +aMy +xIP +aAq +gsu +kbz +pYI +awN +aJD +urR +nro +qnV +vOT +vOT +vOT +kGZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kZA +pOM +kQz +kcB +dgd +aRB +iYC +rEd +oBJ +pno +dfq +nJv +cSK +osa +ilh +lUG +eEy +ufG +tnP +kOh +rRG +syA +gZi +uyI +lPB +uzu +uMQ +rEI +uSl +oYr +wKq +lsC +aOE +eeZ +nqZ +etn +dBt +gzZ +hDl +blq +cnA +mXf +cIT +mqx +tmD +jnV +tch +fvw +dnE +nve +iYH +bxs +vVm +ruB +fhf +dhS +ixi +mTo +akA +ujg +mQL +xtG +wsa +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wZw +vOT +vOT +vOT +vOT +vOT +sgL +vhO +jdF +kOC +ibZ +fwM +evm +bIJ +vOT +vOT +vOT +vOT +vOT +vOT +bFt +igG +bhL +dca +vOT +vOT +vOT +vOT +vOT +vOT +tap +kIU +vOT +pmb +ijs +pTS +soQ +tqy +mzV +ibZ +dfJ +tqd +vOT +vOT +stL +vOT +eAG +vOT +deE +vOT +flp +vOT +ihB +vOT +exw +vOT +iJA +vOT +brz +"} +(173,1,1) = {" +brz +vOT +tuP +vOT +gol +wsf +vOT +vOT +vOT +dBz +hcR +rcj +tGF +nEd +uMI +dpW +hAK +uIM +aCP +dJu +vOT +gAB +abV +jXJ +uti +bUT +tuy +bOd +pze +jwm +dpv +kvm +dcv +tFR +bCp +vOT +vOT +vOT +dQB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +cLe +mkh +dKa +hPO +jRN +aWs +rtb +pqT +wxW +lGG +ovZ +dFS +qPn +bJl +gyJ +mQZ +hBK +xlo +wmh +jFd +tVT +iub +koG +jsB +rOX +shy +naM +wSf +hYX +jbi +qcx +mrl +mlj +mIJ +xHk +kiq +kWT +tCe +bKS +vka +qel +xMn +mhk +bAN +shz +vxN +sFm +gQn +gHa +iym +byz +wPt +gBt +aqm +cnN +oLN +oTh +lbj +sBV +daM +emc +xwd +jFP +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jVf +vOT +vOT +vOT +vOT +vOT +hHD +vOT +wZw +mzV +rCK +eGR +jdQ +cNl +vOT +vOT +vOT +vOT +vOT +vOT +qhO +cWz +bhL +pSL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kOC +wcm +pTS +ouw +kDK +mnp +ibZ +nnu +tqd +vOT +vOT +pBj +vOT +pxS +vOT +swJ +vOT +dsw +vOT +ghi +vOT +pHv +vOT +vOT +vOT +brz +"} +(174,1,1) = {" +brz +vOT +vOT +vOT +oCF +fDy +vOT +vOT +vOT +gOh +sdQ +fpZ +jeW +cke +aDh +lqR +bpy +eIY +pmf +xpg +vOT +muf +nUN +xel +lyV +jlO +wuC +uWq +ayE +dCf +hel +dvb +cxg +mSK +uwI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hIc +fiO +euU +ail +tMq +ddM +qjb +ren +hqs +aYi +vcv +lGa +vnH +fHQ +fNe +isE +pTU +kXF +rme +dAE +tHm +flY +dIF +dop +xuR +fSL +xxv +nwZ +aUV +ePF +jIe +kne +izW +lBg +oBh +iQn +ekV +miG +ehR +tVu +igQ +mQm +iEE +uMC +qLd +xOn +bzO +uKJ +kCp +fYz +jFz +pkf +pJp +wAB +qxx +ptZ +bYP +rtQ +jpw +mbU +xhP +eZl +ioC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +rKf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +knG +ntB +ubX +gWP +rCK +eGR +xVd +bvh +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dik +pmb +pSL +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gWP +jki +sgL +cKf +kDK +bIT +ibZ +vsN +evm +vOT +vOT +cJc +vOT +rlu +vOT +xky +vOT +cjX +vOT +aLi +vOT +xSJ +vOT +vOT +vOT +brz +"} +(175,1,1) = {" +brz +vOT +vOT +vOT +xkD +dVj +vOT +vOT +vOT +dkY +gnA +jNn +lgG +lRI +caa +lMw +oly +fjk +aMj +vOT +vOT +kBy +krY +hqf +cfo +ndN +eqi +miv +caj +ydI +pRt +krN +qYa +iDE +utq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lpI +jjI +xpn +azt +oBe +vsB +mdp +fMQ +kzS +tnJ +iFk +gPN +mOh +qbW +rvp +vOT +gMK +hEs +qQg +xBP +kSY +tXq +vos +rvn +iTp +rqW +jJq +jRI +miZ +ceP +vuO +djR +xtj +tOO +ocD +nPk +avV +olQ +jDM +qlB +ewq +vOT +yjH +srK +uih +tsR +rSf +biW +ndj +sCX +tXP +gNO +gGi +cme +hRr +pYR +fnh +srh +mpR +ueK +dsQ +eBn +aHA +vOT +vOT +vOT +vOT +vOT +jAD +jod +vhO +itl +vOT +vOT +vOT +vOT +vOT +rOh +vOT +vOT +wtN +cWe +vOT +vOT +vOT +fPF +cDo +fsk +hVg +rjM +eFn +fLV +vOT +vOT +vOT +vOT +fVf +lGK +cZz +vOT +kfD +pmb +uQV +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gWP +hVg +sgL +jqu +kDK +tHP +ibZ +vsN +evm +vOT +vOT +bQY +vOT +uYN +vOT +iGn +vOT +ycQ +vOT +nWN +vOT +bkf +vOT +vOT +vOT +brz +"} +(176,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qaG +xBd +xXi +vCF +tvb +agl +rNm +xHC +sth +vOT +sma +rZu +xFN +pXq +ddQ +vOT +buo +kcU +aXm +hXz +vNl +fsc +ejf +ozz +xXe +iqu +mdN +itt +aYl +vOd +dKg +apd +fJV +ryY +kVZ +jjj +aRJ +htd +vOT +iqE +kFX +vOT +yaE +gDN +ohB +idI +rlK +jDa +qEo +tOe +hbM +ghp +gaT +pfL +oGb +hbK +wLQ +fKt +dsC +vDp +dEI +hdC +nxy +vOT +vOT +vOT +vOT +vOT +wac +uKS +vOT +opo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mau +eJb +vOT +vOT +vOT +nUQ +rKJ +rCZ +mwr +rjM +eFn +vOT +vOT +vOT +vOT +vOT +duH +vOT +duH +vOT +vnZ +cMX +pIN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +svV +sNZ +hHD +qhO +mwr +tHP +ibZ +laE +nUe +vOT +vOT +liu +vOT +spT +vOT +tlf +vOT +fRM +vOT +nSY +vOT +krp +vOT +vOT +vOT +brz +"} +(177,1,1) = {" +brz +vOT +vOT +vOT +vOT +kbO +oBx +wnz +qGG +jXW +xaR +nKb +iZT +jvL +mIU +kWy +oUU +tgd +pEJ +sqn +vgG +gBQ +iKG +omc +hmX +lEc +noM +pio +yfC +raj +cjW +aSf +smH +aRs +xke +jJX +qRY +oYC +cXm +vOT +kiX +vOT +hlN +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +ltR +vOT +npf +vOT +lUV +vOT +vOT +vOT +vOT +vOT +jkk +vOT +vOT +iBc +dbF +vOT +vOT +vOT +nUQ +laE +pBR +ijs +qcs +cOS +vOT +vOT +vOT +vOT +vOT +moI +lGK +rzs +vOT +cPX +vOT +mnp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +svV +sNZ +hHD +eFn +dEr +xwl +ibZ +laE +uzM +vOT +vOT +snM +vOT +vOT +vOT +oBP +vOT +sdo +vOT +unf +vOT +qKC +vOT +vOT +vOT +brz +"} +(178,1,1) = {" +brz +vOT +vOT +vOT +vOT +xVo +vfO +jfc +vzb +oXT +xwX +eAA +kIw +lyq +lMX +aOu +dGh +jFe +lFr +uxP +gMs +eCI +ngb +xco +uBV +bPr +pwS +pbp +wAa +vMj +nqG +mCz +fhr +ilE +xzu +lZT +juj +ixA +gnH +vOT +ugw +vOT +vBS +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mwC +qbo +sok +kGB +xsv +bxB +qhr +opQ +iTw +qkT +wsX +nwS +lPz +sCu +lhH +jMx +uRR +piV +gCc +uaZ +srM +xTO +tcS +jjr +xnG +fjY +rof +xrC +ddB +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fTI +xHP +aCS +vOT +vOT +vOT +vOT +vOT +vOT +kUY +woG +vOT +vOT +vOT +nUQ +lTt +uvn +dJq +muU +pvm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +keq +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vVn +sNZ +vOT +eFn +cNl +xwl +rCK +ntB +vOT +vOT +vOT +ijz +vOT +wAg +vOT +nEj +vOT +oeq +vOT +fpc +vOT +vOT +vOT +vOT +vOT +brz +"} +(179,1,1) = {" +brz +vOT +vOT +vOT +vOT +wwe +wHp +gje +vfx +caE +iJW +rAM +mKv +gnV +uOJ +oQd +cEd +wVp +mAe +trp +qAE +oUi +jGJ +wlc +wKR +rkh +cqI +jhS +pHj +nIH +xYB +uUs +pfz +gJJ +grr +gcY +kwv +kal +uLk +vOT +nkD +vOT +nAb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hvD +iLI +tIx +deU +nzF +ksj +xju +pYQ +lnH +plK +ilq +vec +juY +wwu +qUJ +kgu +wYm +pIo +qKF +sfV +xTk +bqP +tDp +xCa +upN +dmB +bwh +bcj +wyt +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +qwI +vOT +erg +qgo +vOT +rQJ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nUQ +two +cjh +dJq +kMt +eDR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +fEA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vVn +bzC +vOT +pvm +cNl +xwl +rCK +jui +vOT +vOT +vOT +uJu +vOT +gdv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(180,1,1) = {" +brz +vOT +vOT +vOT +vOT +aKh +euo +dVp +nrV +gBN +dEZ +iXG +lqk +tRJ +vqS +fkv +pKh +qvF +dmO +cLH +vbi +sGm +plZ +lyn +lnl +nXZ +lXr +wDX +qlW +rnb +nfw +krx +nMs +vZl +rdH +xnp +aiW +wyp +uNI +vOT +wSg +vOT +rIM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nti +ohn +rUz +lhi +rTw +asV +uFx +mpd +pMY +jCq +oWP +dUX +ebV +ndk +sUf +eSp +vZR +oyx +axX +xys +lAO +bUA +eVX +bgf +swe +oCr +lHS +xCT +lPA +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mnp +nSd +pmb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +jVv +bzC +vOT +cOS +apr +uQN +rCK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(181,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +kIA +dDO +eQd +jMT +uRa +qbn +uus +uJS +sec +qWf +ugf +wYX +wtA +dOj +rBe +xTE +gMQ +jlG +hMM +ghM +fiI +eat +rtK +xAe +jGc +oGd +vni +eCm +wVU +ufT +xes +qLo +tCR +vOT +gLb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +oOE +eep +wnX +pVx +sNm +sHU +vHY +ebO +iBJ +ooN +xhG +onR +ewD +vfg +hdd +owv +rJc +wJW +wzO +iju +viP +qxs +rdb +eLu +iHx +anV +uwO +eVS +qUO +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kvf +vOT +cOS +qRa +uQN +rCK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(182,1,1) = {" +brz +vOT +qme +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vmG +iqj +eOl +iwX +kCD +oeK +pAr +inv +jJD +tbS +duN +kTC +krD +vSa +rjM +qCi +afJ +fHR +dmb +qBa +aTN +uxA +bql +fRy +tVp +dAr +wDj +pMI +jBd +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kvf +vOT +eDR +vOT +ngb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(183,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +agv +lxe +eii +xEf +uGi +anW +tas +iuv +rfz +sZM +sRq +mUG +jOO +rzx +gMg +ecq +eOR +jon +vyx +vbc +btf +kZq +mWC +sPx +vHP +bLP +kON +uNC +vEv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +uxF +vOT +eDR +vOT +ngb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(184,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(185,1,1) = {" +brz +vOT +gJb +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vcm +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(186,1,1) = {" +brz +vOT +oRK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(187,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(188,1,1) = {" +brz +vOT +ovM +vOT +ecY +vOT +eGa +vOT +vhg +vOT +vOT +vOT +oAD +vOT +bhu +vOT +gym +vOT +rvP +vOT +aHd +vOT +lyX +vOT +nTF +vOT +uhy +vOT +vOT +qRd +vOT +tLU +vOT +vCI +vOT +iFE +vOT +cDj +vOT +vOT +qIP +vOT +nzG +vOT +eRY +vOT +gCU +vOT +pSV +vOT +hxM +vOT +rPk +vOT +rTQ +vOT +mnQ +vOT +cOP +vOT +veg +vOT +sRo +vOT +ixU +vOT +vWj +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uFl +vOT +vtS +vOT +brz +"} +(189,1,1) = {" +brz +vOT +sjk +vOT +lso +vOT +wQr +vOT +mUJ +vOT +vOT +vOT +vOT +vOT +sBB +vOT +vOm +vOT +jYi +vOT +oQB +vOT +iZb +vOT +iUm +vOT +vVK +vOT +vOT +aNR +vOT +rvN +vOT +aIa +vOT +tBO +vOT +iIq +vOT +vOT +vcV +vOT +fUT +vOT +ahh +vOT +tlj +vOT +pic +vOT +qSj +vOT +xOw +vOT +hkE +vOT +lLf +vOT +sPN +vOT +wXn +vOT +mPU +vOT +jiW +vOT +uIR +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +mPh +vOT +mYm +vOT +brz +"} +(190,1,1) = {" +brz +vOT +vCx +vOT +wRB +vOT +kir +vOT +gxQ +vOT +vOT +vOT +vOT +vOT +eek +vOT +wjT +vOT +oMx +vOT +fAp +vOT +mfi +vOT +ajR +vOT +dXQ +vOT +vOT +lRO +vOT +nkh +vOT +iWB +vOT +qEC +vOT +aDC +vOT +vOT +emZ +vOT +jaE +vOT +wrp +vOT +mie +vOT +ezr +vOT +vOT +vOT +glm +vOT +xTT +vOT +tiw +vOT +jVc +vOT +mae +vOT +wEa +vOT +ccy +vOT +mUD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pGl +vOT +ksO +vOT +brz +"} +(191,1,1) = {" +brz +vOT +mFt +vOT +mwk +vOT +wWG +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wsF +vOT +oYR +vOT +ofJ +vOT +oWC +vOT +crE +vOT +gNc +vOT +koT +vOT +vOT +oST +vOT +xtV +vOT +hgs +vOT +tDz +vOT +uUf +vOT +vOT +eDX +vOT +uZh +vOT +abD +vOT +xnx +vOT +eff +vOT +vOT +vOT +iUi +vOT +bOl +vOT +vOT +vOT +bpo +vOT +gui +vOT +mql +vOT +oiF +vOT +nCU +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +uHI +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gtc +vOT +vOv +vOT +brz +"} +(192,1,1) = {" +brz +vOT +tXs +vOT +aPz +vOT +bST +vOT +vOT +vOT +vOT +vOT +vOT +vOT +eal +vOT +wIT +vOT +tBb +vOT +iRW +vOT +mbk +vOT +gBw +vOT +dfA +vOT +vOT +bYU +vOT +aai +vOT +gdZ +vOT +dIq +vOT +vOT +vOT +vOT +cVI +vOT +xYa +vOT +xNq +vOT +xnx +vOT +wiq +vOT +vOT +vOT +lWp +vOT +cQY +vOT +vOT +vOT +dbx +vOT +tum +vOT +nlN +vOT +sDv +vOT +deQ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dXy +vOT +bpc +vOT +brz +"} +(193,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lDt +vOT +vOT +vOT +brz +"} +(194,1,1) = {" +brz +vOT +cdo +vOT +uiy +vOT +vDs +vOT +mlU +vOT +oYX +vOT +jSX +vOT +aFy +vOT +dmp +vOT +mSJ +vOT +dme +vOT +dQQ +vOT +yiO +vOT +ufd +vOT +wLx +vOT +tJQ +vOT +oYg +vOT +mNV +vOT +oDL +vOT +bWz +vOT +uwS +vOT +xhu +vOT +lmb +vOT +xGH +vOT +pXd +vOT +xHr +vOT +llW +vOT +rfO +vOT +mHg +vOT +qhs +vOT +sZz +vOT +ooi +vOT +uWI +vOT +xPw +vOT +hzV +vOT +wZN +vOT +tbN +vOT +tnT +vOT +jsj +vOT +sFD +vOT +wLP +vOT +nxo +vOT +lWf +vOT +huK +vOT +sbo +vOT +kPZ +vOT +vOj +vOT +kvZ +vOT +eqC +vOT +qLY +vOT +xLo +vOT +rKf +vOT +jNQ +vOT +yht +vOT +ylC +vOT +gDh +vOT +dzs +vOT +mFI +xpd +vOT +joc +fiu +vOT +bNl +vOT +fsd +vOT +xyV +jIZ +vOT +mPT +vOT +aWg +vOT +iRs +vOT +jSm +vOT +kWa +vOT +wSZ +vOT +qNg +vOT +vOT +nRP +vOT +tpI +vOT +vOT +qZj +vOT +wxy +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +arF +vOT +aRw +vOT +brz +"} +(195,1,1) = {" +brz +vOT +djb +vOT +sxo +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +hpz +vOT +iOB +vOT +jBE +vOT +kQC +vOT +vEX +vOT +hmr +vOT +bZz +vOT +vUp +vOT +xyj +vOT +kAF +vOT +oFL +vOT +tdG +vOT +oUZ +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tQh +vOT +cxR +vOT +uHf +vOT +cGX +vOT +cEC +vOT +mXP +vOT +aUp +vOT +moJ +vOT +xKv +vOT +vOT +vOT +vOT +vOT +jDp +vOT +wrd +vOT +xdV +vOT +pjS +vOT +bdv +vOT +vOT +vOT +vOT +vOT +vOT +vOT +afl +vOT +sue +vOT +cge +vOT +vOT +vOT +tkB +vOT +uqs +vOT +cpF +vOT +jan +vOT +aQn +vOT +acn +vOT +ljW +vOT +vOT +vOT +vwC +dlw +vOT +vOT +oNv +vOT +vLK +vOT +bhk +vOT +wDr +kNA +vOT +ter +vOT +mPp +vOT +fLL +vOT +toJ +vOT +cTR +vOT +xeJ +vOT +gJt +vOT +vOT +gpB +vOT +bjU +vOT +vOT +miP +vOT +ijk +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lyI +vOT +hyM +vOT +brz +"} +(196,1,1) = {" +brz +vOT +ezE +vOT +rWp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +foe +vOT +jmn +vOT +hKk +vOT +iXu +vOT +dNE +vOT +pvp +vOT +xzI +vOT +cbJ +vOT +nyj +vOT +bGz +vOT +bcX +vOT +vEG +vOT +vbt +vOT +vRK +vOT +vOT +vOT +vOT +vOT +vOT +vOT +iNe +vOT +jcB +vOT +lQS +vOT +sTX +vOT +wSt +vOT +bki +vOT +hdE +vOT +aTy +vOT +lQp +vOT +vOT +vOT +vOT +vOT +rPI +vOT +aiO +vOT +xAA +vOT +hwn +vOT +rPD +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nMo +vOT +eai +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vYJ +vOT +bnT +vOT +fzm +vOT +vWJ +vOT +eJc +vOT +wkj +vOT +uWr +vOT +xGN +ffK +vOT +vOT +oJG +vOT +ncc +vOT +gJN +vOT +sCj +rGS +vOT +nJr +vOT +vOT +vOT +qNe +vOT +wUI +vOT +wax +vOT +fJC +vOT +vOT +vOT +vOT +jzb +vOT +arV +vOT +vOT +ioU +vOT +jWE +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +tyc +vOT +qGf +vOT +brz +"} +(197,1,1) = {" +brz +vOT +vfs +vOT +tiy +vOT +nlc +vOT +veF +vOT +bpC +vOT +iPI +vOT +abA +vOT +hqI +vOT +mpW +vOT +rVU +vOT +ykB +vOT +erF +vOT +rtw +vOT +idN +vOT +jDo +vOT +ugu +vOT +vOT +vOT +mwa +vOT +tRE +vOT +caH +vOT +sbv +vOT +vOT +vOT +ang +vOT +wbi +vOT +vOT +vOT +hUF +vOT +xKF +vOT +aGX +vOT +ssE +vOT +cPI +vOT +ibj +vOT +gSB +vOT +shQ +vOT +qag +vOT +bTR +vOT +vUH +vOT +jYb +vOT +pOO +vOT +vOT +vOT +irO +vOT +skt +vOT +vOT +vOT +vOT +vOT +xrO +vOT +vxc +vOT +slm +vOT +vOT +vOT +iIC +vOT +vOT +vOT +fxQ +vOT +dtI +vOT +fGQ +vOT +lDm +vOT +qlp +vOT +wVl +vOT +hso +vOT +czA +vOT +vOT +vOT +wnb +vOT +sUt +vOT +aSp +vOT +nYi +tlW +vOT +cnw +vOT +vOT +vOT +aDt +vOT +ooa +vOT +cBV +vOT +dDk +vOT +vOT +vOT +vOT +qdT +vOT +vOT +vOT +vOT +mNZ +vOT +xad +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +gPR +vOT +vOT +vOT +brz +"} +(198,1,1) = {" +brz +vOT +vIC +vOT +qbM +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +pJS +vOT +dlu +vOT +qJM +vOT +prk +vOT +ivV +vOT +ivm +vOT +ndP +vOT +cuz +vOT +vOT +vOT +qoO +vOT +vKx +vOT +hBz +vOT +dcf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kSt +vOT +dyg +vOT +cLM +vOT +lHA +vOT +tbC +vOT +cZA +vOT +dTF +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +lPn +vOT +khb +vOT +vOT +vOT +pRF +vOT +bKf +vOT +vOT +vOT +vOT +vOT +vOT +vOT +wMI +vOT +aje +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +dso +vOT +xAB +vOT +rQp +vOT +ylp +vOT +vOT +vOT +vOT +vOT +vOT +vOT +kNl +vOT +tGb +vOT +vOT +vOT +sbb +vOT +vOT +ebl +vOT +vOT +vOT +nnZ +vOT +cFc +vOT +laK +vOT +qBj +vOT +vOT +vOT +vOT +oJS +vOT +vOT +vOT +vOT +mFG +vOT +dDC +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +nFu +vOT +vOT +vOT +brz +"} +(199,1,1) = {" +brz +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +vOT +brz +"} +(200,1,1) = {" +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +brz +"} diff --git a/1SP_pods.dmm b/1SP_pods.dmm index 3de011ce78..ab352d5c3a 100644 --- a/1SP_pods.dmm +++ b/1SP_pods.dmm @@ -1,100755 +1,100755 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aan" = ( -/obj/structure/table/glass, -/obj/item/clothing/shoes/swimmingfins, -/obj/item/clothing/mask/snorkel, -/obj/item/clothing/shoes/swimmingfins, -/obj/item/clothing/mask/snorkel, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"aap" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = 2; - pixel_y = 17 - }, -/obj/item/weapon/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"aaW" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"abb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"abH" = ( -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"abV" = ( -/obj/machinery/shipsensors{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"abX" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"acc" = ( -/obj/machinery/autolathe, -/obj/item/weapon/rcd/advanced/loaded{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/weapon/rcd_ammo/large, -/obj/item/weapon/rcd_ammo/large, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"acp" = ( -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"acx" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"acB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/structure/closet/secure_closet/guncabinet{ - req_one_access = null - }, -/obj/item/clothing/head/helmet/combat/USDF, -/obj/item/clothing/head/helmet/combat/USDF, -/obj/item/clothing/suit/armor/combat/USDF, -/obj/item/clothing/suit/armor/combat/USDF, -/obj/item/device/flash, -/obj/item/device/flash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"acC" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors{ - dir = 8 - }, -/obj/structure/sign/science{ - pixel_x = 32 - }, -/turf/template_noop, -/area/survivalpod/superpose/ScienceShip) -"acE" = ( -/obj/item/weapon/newspaper, -/obj/item/device/tape, -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"acH" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"adA" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/pointdefense, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"adB" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"aeb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"aee" = ( -/obj/machinery/disperser/front{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"aej" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"aep" = ( -/turf/simulated/floor/wood, -/area/survivalpod) -"aer" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"aeH" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"aeL" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"afk" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"afs" = ( -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"afT" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"agb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"agc" = ( -/obj/structure/prop/poicanister{ - icon_state = "orangeps-1" - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"agi" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ago" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/glass, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"agN" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod) -"agZ" = ( -/obj/item/weapon/flame/lighter/random, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"ahc" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"ahx" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"ahE" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ahY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"aig" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"aiI" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"aiV" = ( -/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, -/obj/structure/curtain/black, -/turf/simulated/floor/plating, -/area/template_noop) -"ajg" = ( -/obj/structure/mirror{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = -9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"ajz" = ( -/obj/machinery/light, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"akf" = ( -/obj/item/clothing/accessory/permit/gun, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"akm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"akr" = ( -/obj/structure/table/darkglass, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"akw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"akz" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"akI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/shield_generator/charged{ - field_radius = 8; - initial_shield_modes = 2153; - target_radius = 8 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"akZ" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = -2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ald" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"alI" = ( -/obj/item/weapon/extinguisher/mini, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"alT" = ( -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"amB" = ( -/obj/machinery/door/airlock/maintenance/sec, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/MethLab) -"amT" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"amU" = ( -/turf/simulated/floor/outdoors/mud{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"ane" = ( -/obj/structure/bed/chair/bay/comfy/red{ - dir = 8 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/ScienceShip) -"anJ" = ( -/obj/structure/bed/chair/oldsofa, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"anK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"anP" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/wood, -/area/survivalpod) -"anZ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/machinery/recharger{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/pizzavoucher, -/obj/item/toy/figure, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"aoX" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"apk" = ( -/obj/structure/bed/padded, -/obj/machinery/flasher{ - id = "SP-Cell flash"; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"apq" = ( -/obj/effect/floor_decal/steeldecal/monofloor, -/turf/simulated/floor/tiled, -/area/template_noop) -"aqS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"aqY" = ( -/obj/item/weapon/storage/backpack/cultpack, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"arm" = ( -/obj/structure/prop/statue/pillar/dark, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"aro" = ( -/turf/simulated/goreeyes, -/area/survivalpod/superpose/DemonPool) -"arH" = ( -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"arN" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"arV" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"asa" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"asr" = ( -/obj/machinery/door/window/eastleft, -/obj/machinery/door/window/westleft, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"asH" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"asV" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/cult{ - icon_state = "cult-narsie" - }, -/area/template_noop) -"atu" = ( -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/HellCave) -"atC" = ( -/obj/machinery/appliance/cooker/grill, -/obj/structure/window/reinforced/tinted, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"atS" = ( -/obj/structure/sign/warning{ - name = "HOSTILE LIFEFORMS"; - pixel_y = 29 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"atT" = ( -/obj/structure/closet/cabinet, -/obj/random/ammo_all, -/obj/random/cargopod, -/obj/random/cargopod, -/obj/random/cargopod, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"atV" = ( -/obj/effect/floor_decal/industrial/danger/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"aue" = ( -/obj/structure/table/rack/shelf, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"aui" = ( -/obj/structure/cult/talisman, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"auy" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/freezer{ - desc = "Cools the gas in the air tank to acceptable levels after an internal fire."; - dir = 4; - icon_state = "freezer_1"; - name = "Mech Internal Fire Supression system"; - use_power = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"auC" = ( -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"auD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"auI" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cult/forge, -/turf/simulated/floor/cult, -/area/template_noop) -"auY" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/box/glasses/square, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"avv" = ( -/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"avE" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"avI" = ( -/obj/structure/table/steel_reinforced, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"awq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"aww" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/LoneHome) -"awy" = ( -/obj/item/stack/marker_beacon/ten, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"awB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"axk" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "estrella_side_hatch"; - locked = 1; - req_access = null; - req_one_access = null - }, -/obj/machinery/button/remote/airlock{ - dir = 8; - id = "estrella_side_hatch"; - name = "Side Hatch Control"; - pixel_x = -27; - specialfunctions = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"axE" = ( -/obj/machinery/honey_extractor, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"axU" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"axX" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"ayh" = ( -/obj/structure/table/woodentable, -/obj/machinery/light{ - dir = 4 - }, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled, -/area/template_noop) -"ayZ" = ( -/obj/machinery/libraryscanner, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"azi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"azz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"azO" = ( -/obj/structure/table/steel_reinforced, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"aAz" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"aBk" = ( -/obj/structure/closet/toolcloset, -/turf/template_noop, -/area/template_noop) -"aBv" = ( -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"aBE" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"aBF" = ( -/obj/machinery/r_n_d/server/core, -/obj/machinery/light/small, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"aBY" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"aBZ" = ( -/obj/structure/fans, -/turf/simulated/floor/plating, -/area/template_noop) -"aCh" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"aCt" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"aCJ" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/item/weapon/packageWrap, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"aDl" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"aFn" = ( -/obj/structure/cult/talisman, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"aFE" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"aGd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"aGo" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"aGF" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"aHa" = ( -/obj/machinery/door/airlock/angled_tgmc, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"aHE" = ( -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/extinguisher, -/obj/item/weapon/storage/box/lights/mixed, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"aIl" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/item/device/geiger, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/welding, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"aIB" = ( -/obj/machinery/microwave{ - pixel_y = -2 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/table/steel{ - pixel_y = -9 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"aIH" = ( -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = -3 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"aIS" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"aJb" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"aJH" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"aJN" = ( -/obj/random/maintenance/engineering, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"aKd" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/optable, -/obj/machinery/oxygen_pump/anesthetic{ - layer = 3.11; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"aKe" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"aKM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"aKN" = ( -/obj/item/trash/tastybread, -/obj/item/weapon/material/butterfly/boxcutter, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aLa" = ( -/obj/structure/closet/cabinet, -/obj/random/curseditem, -/obj/random/curseditem, -/obj/item/weapon/melee/cursedblade, -/obj/item/weapon/melee/cultblade, -/obj/item/weapon/beartrap/hunting, -/obj/item/weapon/beartrap/hunting, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/device/soulstone, -/obj/item/device/soulstone, -/obj/item/weapon/storage/belt/soulstone/full, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"aLG" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"aLR" = ( -/obj/structure/fence/cut/large, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"aNb" = ( -/obj/item/tape/medical{ - icon_state = "tape_v_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"aNp" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"aNC" = ( -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/structure/table/rack/shelf, -/obj/item/weapon/storage/box/glass_extras/straws, -/obj/item/weapon/storage/box/glass_extras/straws, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"aNI" = ( -/obj/structure/table/standard, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"aNM" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"aOw" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "estrella_back_hatch"; - locked = 1; - req_one_access = null - }, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - id = "estrella_back_hatch"; - name = "Rear Hatch Control"; - pixel_y = 27; - req_access = null; - specialfunctions = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"aOM" = ( -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/cleanable/mucus/mapped, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aPd" = ( -/obj/random/trash, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/MethLab) -"aPq" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/fire, -/obj/item/trash/material/circuit, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"aPy" = ( -/obj/machinery/camera{ - c_tag = "Central Hallway"; - dir = 1; - network = list("UO45") - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"aPL" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"aPP" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"aPT" = ( -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/smartfridge/survival_pod{ - pixel_y = 28 - }, -/obj/item/device/reagent_scanner, -/obj/item/device/mass_spectrometer/adv, -/obj/item/weapon/forensics/sample_kit/powder, -/obj/item/weapon/forensics/sample_kit, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/reagent_containers/spray/luminol, -/obj/item/weapon/storage/briefcase/crimekit, -/obj/item/weapon/storage/briefcase/crimekit, -/obj/item/weapon/storage/box/bodybags, -/obj/item/weapon/storage/box/bodybags, -/obj/item/device/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detectives camera"; - pictures_left = 30; - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/device/camera_film, -/obj/item/weapon/storage/photo_album{ - pixel_y = -10 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"aPX" = ( -/obj/machinery/chem_master/condimaster, -/obj/structure/window/reinforced/tinted, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"aQr" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"aQA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"aQX" = ( -/obj/item/weapon/storage/toolbox/brass, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"aRa" = ( -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"aRf" = ( -/obj/structure/hull_corner/long_horiz{ - dir = 10 - }, -/turf/template_noop, -/area/template_noop) -"aRM" = ( -/obj/structure/closet/alien, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"aRR" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"aRV" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"aSS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 6 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"aTe" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"aTp" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"aTu" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - on = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"aTE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"aUJ" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Dorm" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"aVj" = ( -/obj/machinery/disperser/back{ - dir = 4 - }, -/obj/structure/ship_munition/disperser_charge/explosive, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"aVJ" = ( -/turf/simulated/floor/cult, -/area/template_noop) -"aVT" = ( -/obj/structure/grille/rustic, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"aVU" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"aWn" = ( -/obj/structure/table/survival_pod, -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/obj/item/clothing/glasses/welding, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"aWq" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"aWD" = ( -/obj/structure/table/marble{ - color = "#B03A2E" - }, -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/item/device/soulstone, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"aWG" = ( -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/stack/material/uranium{ - amount = 50 - }, -/obj/item/stack/material/silver{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/phoron{ - amount = 50 - }, -/obj/item/stack/material/osmium{ - amount = 50 - }, -/obj/item/stack/material/mhydrogen{ - amount = 50 - }, -/obj/item/stack/material/gold{ - amount = 50 - }, -/obj/item/stack/material/durasteel{ - amount = 50 - }, -/obj/item/stack/material/diamond{ - amount = 50 - }, -/obj/item/stack/material/lead, -/obj/item/stack/material/titanium, -/obj/item/stack/material/verdantium{ - amount = 50 - }, -/obj/structure/closet/crate/secure/engineering{ - name = "secure research materials crate"; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"aWS" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"aXm" = ( -/obj/item/seeds/pumpkinseed, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"aXn" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"aXy" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"aXX" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/survivalpod) -"aYZ" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"aZu" = ( -/obj/item/clothing/shoes/boots/winter/hydro, -/obj/item/clothing/suit/storage/hooded/wintercoat/hydro, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"aZy" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"bab" = ( -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"baZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = -3 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/CultShip) -"bbP" = ( -/obj/structure/hull_corner{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"bcf" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"bdp" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"bdE" = ( -/obj/machinery/light, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"bdI" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"bdX" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"bej" = ( -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/ScienceShip) -"bel" = ( -/obj/structure/sign/science{ - pixel_x = 32 - }, -/turf/template_noop, -/area/template_noop) -"beW" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/tool/screwdriver{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bfB" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"bfH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bfM" = ( -/obj/item/trash/cheesie, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bgJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CultShip) -"bgR" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"bha" = ( -/obj/machinery/atmospheric_field_generator/perma/underdoors, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"bhd" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bia" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/item/device/starcaster_news, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/carpet, -/area/template_noop) -"biA" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"biM" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"biS" = ( -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bje" = ( -/obj/fire, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"bjl" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/lava, -/area/template_noop) -"bjw" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"bjy" = ( -/obj/effect/rune, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"bjI" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/machinery/autolathe, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"bjO" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"bkF" = ( -/obj/structure/table/survival_pod, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"bkY" = ( -/obj/fire, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/HellCave) -"ble" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/purple, -/obj/item/device/gps/computer{ - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bll" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/chemical_dispenser/ert/specialops/abductor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"bmA" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bmJ" = ( -/obj/machinery/power/port_gen/pacman, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bmW" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/shuttle/plating/airless, -/area/survivalpod/superpose/TradingShip) -"bnA" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/clipboard, -/obj/item/weapon/folder/white, -/obj/item/weapon/pen, -/obj/item/weapon/reagent_containers/dropper{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bnC" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bnH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"bnI" = ( -/obj/structure/reagent_dispensers/beerkeg/fakenuke, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"bnS" = ( -/obj/machinery/crystal/lava, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"bop" = ( -/obj/machinery/vending/emergencyfood/filled, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"boq" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"bos" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"box" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"boP" = ( -/obj/structure/sign/nosmoking_2{ - pixel_x = 30 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"boR" = ( -/obj/machinery/bodyscanner, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"boT" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"boV" = ( -/obj/item/trash/candy, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bpe" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/ScienceShip) -"bph" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/obj/structure/closet/walllocker_double/survival/north, -/turf/simulated/floor/carpet, -/area/template_noop) -"bpl" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"bpC" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"bpM" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/MethLab) -"bqm" = ( -/obj/random/trash, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"bqC" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/pirate, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bqT" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"brn" = ( -/obj/structure/safe/floor, -/obj/item/weapon/moneybag/vault, -/obj/item/weapon/moneybag/vault, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"brR" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/obj/machinery/reagentgrinder{ - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/dropper, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"brT" = ( -/obj/machinery/mech_recharger, -/obj/mecha/combat/durand, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"brX" = ( -/obj/machinery/light/small, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bst" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bsG" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"bsM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"btE" = ( -/turf/simulated/goreeyes, -/area/survivalpod/superpose/HellCave) -"buk" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = 26; - req_access = list(2,4) - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/bay/chair/padded/black{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"bur" = ( -/obj/structure/cliff/automatic/corner{ - dir = 9 - }, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"buN" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ - pixel_x = 1; - pixel_y = 15 - }, -/obj/machinery/recharger{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/pizzavoucher{ - pixel_x = 7; - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bvG" = ( -/obj/machinery/camera{ - c_tag = "Central Hallway"; - dir = 8; - network = list("Research") - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"bvO" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"bwm" = ( -/turf/simulated/wall/r_wall, -/area/template_noop) -"bwU" = ( -/obj/effect/floor_decal/industrial/danger/corner, -/turf/simulated/floor/tiled, -/area/template_noop) -"bwY" = ( -/obj/structure/janitorialcart, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"bxr" = ( -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"bye" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/toolbox, -/obj/random/tool, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"byk" = ( -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"byn" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/weapon/card/id/external, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bys" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/storage/box/glasses/meta/metapint, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"byP" = ( -/obj/item/clothing/suit/storage/apron/white, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"bze" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bzu" = ( -/obj/structure/curtain/bed, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bAk" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"bAD" = ( -/obj/item/weapon/flame/lighter/zippo, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bAJ" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/turf/simulated/shuttle/plating, -/area/template_noop) -"bAU" = ( -/obj/machinery/door/airlock/maintenance/sec{ - name = "Security Door"; - req_one_access = null - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bBS" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bCa" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"bCG" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"bCM" = ( -/obj/structure/sink/kitchen, -/turf/simulated/wall, -/area/survivalpod/superpose/Dinner) -"bCZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bDQ" = ( -/obj/structure/closet/walllocker_double/survival/south, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"bEb" = ( -/obj/item/weapon/cell/device/hyper, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bEt" = ( -/obj/structure/morgue/crematorium{ - dir = 8; - id = "mercpodburn" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"bEw" = ( -/obj/structure/table/darkglass, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"bEI" = ( -/obj/structure/window/reinforced, -/obj/structure/table/darkglass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"bEL" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MethLab) -"bEU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"bEZ" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 7 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"bFd" = ( -/obj/machinery/flasher{ - id = "SP-Cell flash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bGa" = ( -/obj/machinery/power/thermoregulator/southerncross{ - pixel_y = 30 - }, -/obj/structure/cable, -/turf/simulated/floor/wood, -/area/survivalpod) -"bGp" = ( -/obj/item/weapon/module/id_auth, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bGI" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"bHl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"bHr" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bHC" = ( -/obj/item/weapon/storage/box/survival/space, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"bHF" = ( -/obj/machinery/door/window/westleft{ - name = "Storefront"; - req_access = list(160) - }, -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/obj/structure/table/marble, -/obj/machinery/cash_register/civilian{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"bHN" = ( -/obj/machinery/vending/coffee, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bHY" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"bIk" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"bIo" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"bIp" = ( -/obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; - name = "security officer's locker"; - req_access_txt = "201" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"bII" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"bJc" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"bJf" = ( -/turf/simulated/wall/cult, -/area/survivalpod/superpose/DemonPool) -"bJP" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bJU" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"bJV" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"bKo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bKW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"bLf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bLw" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"bLG" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"bLZ" = ( -/obj/machinery/light/floortube/flicker{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"bMp" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"bMv" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"bML" = ( -/turf/simulated/floor/lava, -/area/template_noop) -"bMN" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"bNj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair/bay/chair/padded/red, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bNk" = ( -/obj/machinery/light, -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"bNn" = ( -/obj/fire, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bNJ" = ( -/obj/item/trash/cigbutt, -/obj/item/weapon/tank/emergency/oxygen, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bNX" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"bOf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bOp" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = "splock" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"bOs" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 4; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bOT" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/purpledouble, -/turf/simulated/floor/carpet/gaycarpet, -/area/template_noop) -"bPx" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"bPY" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"bQx" = ( -/obj/structure/table/rack/shelf, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"bQL" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"bQO" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/seeds/ambrosiadeusseed, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"bQS" = ( -/obj/machinery/media/jukebox, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"bQT" = ( -/obj/machinery/door/blast/regular{ - name = "Cargo Door" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bRr" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"bRM" = ( -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"bRN" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"bSg" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"bST" = ( -/obj/machinery/light{ - layer = 3 - }, -/obj/structure/bed/padded, -/obj/machinery/flasher{ - id = "SP-Cell flash"; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bTe" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"bTq" = ( -/obj/structure/table/woodentable, -/obj/random/mug, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"bTA" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"bTD" = ( -/obj/structure/hull_corner/long_vert{ - dir = 9 - }, -/turf/template_noop, -/area/template_noop) -"bUc" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/CultShip) -"bUJ" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/cornseed, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"bUV" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bVd" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/lipstick/black, -/obj/item/weapon/lipstick/jade, -/obj/item/weapon/lipstick/purple, -/obj/item/weapon/lipstick, -/obj/item/weapon/lipstick/random, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bVh" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bVz" = ( -/obj/machinery/vending/hydroseeds, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"bVJ" = ( -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"bVP" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/machinery/holoplant, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"bVT" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/closet/secure_closet/freezer/kitchen{ - locked = 0; - pixel_x = -5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"bWy" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"bWO" = ( -/obj/structure/bed/chair/bay/chair/padded/blue, -/obj/structure/sign/nanotrasen{ - pixel_y = 27 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"bWV" = ( -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bXQ" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/cult, -/area/template_noop) -"bXS" = ( -/obj/item/clothing/accessory/stethoscope, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"bXZ" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bYf" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"bYu" = ( -/obj/effect/catwalk_plated/white, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"bYB" = ( -/obj/structure/closet/secure_closet/engineering_welding{ - locked = 0 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"bYQ" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"bYR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bYV" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/deck/tarot{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"bZy" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"bZR" = ( -/obj/structure/cult/talisman, -/obj/item/device/soulstone, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"caa" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"caR" = ( -/obj/structure/cult/tome, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"caS" = ( -/obj/structure/table/steel_reinforced, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/item/weapon/bikehorn, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cby" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/botany/editor, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"cbz" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"cbG" = ( -/obj/structure/table/woodentable, -/obj/machinery/recharger, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cbH" = ( -/obj/machinery/the_singularitygen, -/turf/simulated/floor/airless, -/area/survivalpod/superpose/CrashedInfestedShip) -"ccy" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/button/remote/blast_door{ - id = "shelterblast"; - name = "Shelter Blast Doors"; - pixel_y = 32 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"ccQ" = ( -/obj/structure/hull_corner, -/turf/template_noop, -/area/template_noop) -"ceo" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/box/donkpockets, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"ceA" = ( -/obj/random/maintenance/clean, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"ceL" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"ceN" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"ceQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera{ - c_tag = "Staff Locker Room"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cfz" = ( -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"cgk" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/cee, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"cgO" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"chf" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"chm" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"chJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/window/basic{ - dir = 4; - tag = "icon-window (EAST)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ciK" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ciW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock{ - id_tag = "awaydorm3"; - name = "Dorm 3" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"cjw" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"cjz" = ( -/obj/structure/fuel_port{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"cjP" = ( -/obj/structure/cult/tome, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"ckg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"cle" = ( -/obj/structure/flora/bboulder1, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"clr" = ( -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"clB" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"clO" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/machinery/button/windowtint{ - id = "h-kitchen"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"clR" = ( -/turf/simulated/wall, -/area/survivalpod/superpose/MethLab) -"clT" = ( -/obj/item/clothing/head/cone, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"cmi" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/suit/hgpirate, -/obj/item/clothing/suit/imperium_monk, -/obj/item/clothing/suit/leathercoat, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/pirate, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cmn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/mecha/working/ripley/mining, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cnh" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cnw" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"coo" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/stock_parts/gear{ - pixel_x = -8; - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cou" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"coy" = ( -/obj/machinery/light/poi, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"coA" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -34 - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"coK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"cpf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cph" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"cpj" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"cpn" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"cpV" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"cqC" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"cqS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"crx" = ( -/obj/structure/curtain/open/shower/security, -/obj/machinery/shower{ - pixel_y = 20 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"crz" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/HellCave) -"crD" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"crT" = ( -/obj/structure/cult/forge, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"crY" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/firstaid/surgery, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"crZ" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"csb" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"csk" = ( -/obj/structure/table/glass, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/newscaster{ - pixel_y = -30 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"csm" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"csv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"csJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"cto" = ( -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"cup" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cuv" = ( -/obj/structure/table/rack, -/obj/item/weapon/gun/launcher/crossbow, -/obj/item/stack/rods{ - amount = 17 - }, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"cuI" = ( -/obj/vehicle/train/engine/quadbike/built{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"cuM" = ( -/mob/living/simple_mob/vore/aggressive/corrupthound, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"cvl" = ( -/obj/structure/bookcase, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"cvm" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cvL" = ( -/obj/machinery/alarm/monitor{ - dir = 8; - locked = 0; - pixel_x = 23; - req_access = null - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cvT" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cwo" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"cwx" = ( -/obj/structure/lightpost, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"cwJ" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cwO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_tgmc/maintenance{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"cxo" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"cxz" = ( -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"cxC" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"cya" = ( -/obj/structure/inflatable, -/turf/simulated/floor/plating, -/area/template_noop) -"cyi" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"cyr" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/space_heater, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"czf" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"czi" = ( -/obj/structure/table/alien, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"czn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/prop/alien/dispenser, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"czR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"cAb" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/obj/machinery/recharger/wallcharger{ - pixel_y = 22 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 8; - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"cAi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"cAC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/turf/simulated/floor/wood, -/area/template_noop) -"cBn" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"cBr" = ( -/obj/random/maintenance/cargo, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"cBU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"cCp" = ( -/obj/effect/gateway, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"cCT" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/vending/medical{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"cCX" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"cDc" = ( -/obj/fire, -/obj/item/trash/material/circuit, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"cDm" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"cDp" = ( -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"cDG" = ( -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"cEK" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Quarters"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"cEM" = ( -/turf/simulated/floor/carpet/blucarpet, -/area/template_noop) -"cGj" = ( -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/floor/wood, -/area/template_noop) -"cGD" = ( -/obj/machinery/media/jukebox/casinojukebox, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"cGG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"cHg" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"cHz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/trash/material/device, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"cHU" = ( -/obj/structure/alien/membrane, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"cIf" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"cIs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"cIx" = ( -/obj/structure/table/reinforced, -/obj/item/roller/adv{ - layer = 2.97; - pixel_y = -4 - }, -/obj/item/roller/adv{ - layer = 2.98 - }, -/obj/item/roller/adv{ - layer = 2.99; - pixel_y = 4 - }, -/obj/item/roller/adv{ - pixel_y = 8 - }, -/obj/item/device/sleevemate, -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/obj/item/weapon/storage/box/body_record_disk{ - pixel_x = -16 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"cII" = ( -/obj/machinery/iv_drip, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"cJg" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"cJz" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/curtain/open, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"cJD" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"cJU" = ( -/obj/structure/flora/smallbould, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"cKp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"cKI" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = 32 - }, -/turf/template_noop, -/area/survivalpod) -"cLh" = ( -/obj/item/device/binoculars, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"cLj" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"cLn" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westleft{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"cMh" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/machinery/washing_machine{ - pixel_x = 2; - pixel_y = 18 - }, -/obj/item/weapon/storage/laundry_basket{ - pixel_x = -1; - pixel_y = -7 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"cMl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"cMC" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/atm{ - pixel_x = -32 - }, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cMK" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"cMR" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cNl" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_y = -6 - }, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/obj/structure/grille/broken, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"cNn" = ( -/obj/machinery/button/remote/blast_door{ - id = "trade"; - name = "Shop Shutters"; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"cND" = ( -/turf/simulated/floor/atoll, -/area/template_noop) -"cNI" = ( -/obj/effect/fusion_em_field, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"cNR" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"cNS" = ( -/obj/structure/fence/corner, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"cOm" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/shuttle/engine/heater{ - dir = 4; - icon_state = "heater" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"cOq" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"cOv" = ( -/obj/structure/salvageable/console_broken_os{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"cOE" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/module/power_control, -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"cOS" = ( -/obj/machinery/vending/cola{ - categories = 3; - dir = 8; - name = "hacked Robust Softdrinks"; - prices = list() - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"cOZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"cPf" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"cPt" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"cPA" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cPL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"cQd" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"cQD" = ( -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cQF" = ( -/obj/machinery/vending/coffee, -/obj/machinery/camera{ - c_tag = "BioResearch Entry East"; - dir = 8; - network = list("Research") - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cQG" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/obj/machinery/recharger, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cQY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"cRh" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"cRM" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"cRO" = ( -/obj/machinery/door/window/brigdoor/northright{ - dir = 8; - id = "SP-Cell"; - name = "Cell"; - req_access = null; - req_one_access = list(2,4) - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "SP-Cell2"; - name = "Cell Door" - }, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"cRP" = ( -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"cRS" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/structure/filingcabinet, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"cSu" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/item/device/kit/paint/ripley/death, -/obj/item/device/kit/paint/ripley/flames_blue, -/obj/item/device/kit/paint/ripley/flames_red, -/obj/item/device/kit/paint/ripley, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cSH" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"cSN" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"cSW" = ( -/obj/machinery/door/blast/angled_shutter{ - dir = 4; - id = "frog" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"cTn" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/tank/air{ - dir = 8; - start_pressure = 4559.63 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"cTy" = ( -/obj/structure/toilet, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"cTB" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/toy/plushie/kitten, -/obj/item/toy/plushie/grey_cat, -/obj/item/toy/plushie/orange_cat, -/obj/item/toy/plushie/borgplushie/scrubpuppy, -/obj/item/toy/plushie/black_fox, -/obj/item/toy/plushie, -/obj/item/toy/plushie/corgi, -/obj/item/toy/plushie/crimson_fox, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = -32 - }, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/carpet/turcarpet, -/area/survivalpod/superpose/ScienceShip) -"cTU" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"cUX" = ( -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"cVg" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"cVl" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cVH" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cVO" = ( -/obj/machinery/light/small, -/obj/structure/table/standard, -/obj/random/soap, -/obj/random/soap{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"cVS" = ( -/obj/item/weapon/material/knife/tacknife/boot, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cWA" = ( -/obj/item/device/gps/computer{ - pixel_y = -16 - }, -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"cXj" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain8, -/obj/structure/table/darkglass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"cXq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = null; - maxhealth = 8000000000; - normalspeed = 0; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"cYi" = ( -/turf/simulated/floor/plating, -/area/template_noop) -"cZt" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"cZu" = ( -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"cZw" = ( -/obj/structure/noticeboard, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"cZK" = ( -/obj/item/poster, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cZN" = ( -/obj/structure/bed/chair/sofa/left/brown{ - dir = 8 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dal" = ( -/turf/template_noop, -/area/survivalpod) -"daD" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"daH" = ( -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"daR" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"dbX" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"dcm" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"dcJ" = ( -/obj/structure/railing, -/obj/structure/closet/crate/bin, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"dcU" = ( -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ddf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"ddn" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"ddo" = ( -/obj/structure/bed/chair/bay/comfy/blue, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"ddq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"dek" = ( -/obj/structure/closet, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"del" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"dfc" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/kitchenspike, -/obj/effect/rune, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"dfi" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/wall{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod) -"dfr" = ( -/obj/structure/railing, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"dfA" = ( -/obj/structure/table/woodentable, -/obj/random/contraband, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"dfF" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 28 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"dgg" = ( -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"dgk" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 2; - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"dgY" = ( -/obj/structure/table/woodentable, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/random/maintenance, -/obj/random/maintenance/cargo, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled, -/area/template_noop) -"dhP" = ( -/obj/machinery/door/blast/angled_shutter{ - dir = 4; - id = "hound" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"diw" = ( -/obj/item/device/gps/computer, -/turf/simulated/floor/plating, -/area/template_noop) -"diH" = ( -/obj/structure/simple_door/cult, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"djg" = ( -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"djH" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"dko" = ( -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"dkJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"dkN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dla" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/ScienceShip) -"dlb" = ( -/obj/random/maintenance, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"dle" = ( -/obj/item/weapon/bone/arm, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"dlh" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dlp" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "engine_access_hatch"; - locked = 1; - req_access = list(11) - }, -/turf/simulated/floor, -/area/template_noop) -"dlz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"dlO" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"dlQ" = ( -/obj/structure/window/reinforced/tinted, -/obj/machinery/door/window/brigdoor/westleft{ - req_access = null - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"dmo" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dms" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dmQ" = ( -/obj/item/weapon/material/shard, -/obj/structure/grille/broken/rustic, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"dnm" = ( -/obj/machinery/vending/snack{ - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dnF" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/obj/fire, -/obj/item/trash/material/device, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"dnX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"dnY" = ( -/obj/item/device/starcaster_news, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"dob" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"don" = ( -/obj/machinery/atmospherics/pipe/tank/air{ - start_pressure = 740.5 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"doq" = ( -/obj/structure/curtain/open/shower/security, -/obj/machinery/shower{ - pixel_y = 20 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"dot" = ( -/obj/structure/bed/chair/bay/chair/padded/red/bignest, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"dov" = ( -/obj/structure/grille, -/obj/structure/bonfire/sifwood, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"doy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/table/bench/standard, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"doG" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell"; - name = "Cell Locker" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dqE" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"dqM" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"dro" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/cult, -/area/template_noop) -"drr" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/module/id_auth, -/obj/item/weapon/module/card_reader, -/obj/item/weapon/module/cell_power, -/obj/item/weapon/module/power_control, -/obj/item/weapon/circuitboard/microwave, -/obj/item/weapon/circuitboard/mass_driver, -/obj/item/weapon/circuitboard/jukebox, -/obj/item/weapon/circuitboard/intercom, -/obj/item/weapon/circuitboard/firealarm, -/obj/item/weapon/circuitboard/airalarm, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/tape_roll, -/obj/item/weapon/tape_roll, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/belt/utility/full/multitool, -/obj/item/weapon/storage/bag/trash, -/obj/item/weapon/storage/bag/trash, -/obj/item/weapon/storage/backpack/dufflebag/eng, -/obj/item/device/geiger, -/obj/item/device/mapping_unit, -/turf/simulated/floor/plating, -/area/template_noop) -"drP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"drV" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/ScienceShip) -"dsd" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"dth" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"dtq" = ( -/obj/structure/bed/chair/sofa/left/black{ - dir = 2 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"dtt" = ( -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dtF" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dtK" = ( -/obj/structure/closet/crate, -/obj/random/firstaid, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"dtP" = ( -/obj/item/weapon/virusdish/random, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"dtY" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/prop/alien/dispenser, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"duO" = ( -/obj/machinery/transhuman/synthprinter, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"duX" = ( -/obj/structure/table/standard, -/obj/item/weapon/book/manual/hydroponics_pod_people, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"dva" = ( -/mob/living/simple_mob/vore/demonAI/engorge{ - evasion = 1; - health = 750; - projectilesound = 'sound/weapons/taser2.ogg'; - projectiletype = /obj/item/projectile/beam/stun/electric_spider; - size_multiplier = 3; - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"dvn" = ( -/obj/fire, -/obj/item/trash/material/metal, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"dvx" = ( -/obj/structure/bed/chair/sofa{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"dvC" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/random/cash/huge, -/obj/random/cash/huge, -/obj/random/cash/huge, -/obj/random/cash/huge, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dvV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dwa" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"dwq" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dwr" = ( -/obj/structure/table/glass, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dxl" = ( -/obj/machinery/mecha_part_fabricator/pros, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dxm" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dxv" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"dxM" = ( -/obj/machinery/vending/medical{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777) - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"dyz" = ( -/obj/machinery/smartfridge/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"dzp" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"dzv" = ( -/obj/effect/floor_decal/rust, -/obj/random/maintenance, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"dAo" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/obj/machinery/light/floortube, -/obj/structure/table/reinforced, -/obj/machinery/photocopier/faxmachine{ - department = "CMO's Office" - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"dAA" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"dBQ" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell"; - name = "Cell Locker" - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dCe" = ( -/obj/structure/table/marble{ - color = "#B03A2E" - }, -/obj/random/soap{ - pixel_y = 5 - }, -/obj/random/soap, -/obj/item/weapon/towel/random{ - pixel_y = 4 - }, -/obj/item/weapon/towel/random{ - pixel_y = 4 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"dCh" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"dCB" = ( -/obj/random/maintenance/medical, -/obj/fire, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"dCS" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"dDa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"dDw" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/porta_turret/alien{ - faction = "cult" - }, -/turf/simulated/floor/cult, -/area/template_noop) -"dDB" = ( -/turf/template_noop, -/area/survivalpod/superpose/Dinner) -"dDO" = ( -/obj/structure/grille/broken/cult, -/obj/fire, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"dDX" = ( -/obj/item/toy/plushie/box, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"dEb" = ( -/obj/structure/tubes, -/obj/machinery/computer/rdservercontrol{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dEi" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"dED" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/personal, -/obj/item/modular_computer/laptop/preset/custom_loadout/elite, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/weapon/gun/projectile/pistol, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/storage/box/survival/comp, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"dEG" = ( -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"dEK" = ( -/turf/simulated/floor/redgrid/animated, -/area/template_noop) -"dEQ" = ( -/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/simulated/floor/plating, -/area/template_noop) -"dFC" = ( -/obj/item/stack/material/glass{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"dFH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"dFO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"dGK" = ( -/obj/item/device/geiger, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"dGL" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"dGV" = ( -/obj/structure/table/woodentable, -/obj/item/ammo_magazine/s357, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"dHc" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 4; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dHg" = ( -/obj/structure/table/standard, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"dHt" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"dHu" = ( -/obj/machinery/door/airlock/maintenance/common, -/obj/item/tape/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"dHD" = ( -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"dIo" = ( -/obj/machinery/atmospherics/binary/circulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"dIq" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/closet/secure_closet/medical2{ - req_access = list(300) - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"dIr" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/light, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"dIy" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"dIC" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"dIL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"dIU" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"dJh" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dJi" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_x = -3; - pixel_y = -1 - }, -/obj/item/weapon/towel{ - color = "#ff0000"; - name = "red towel" - }, -/obj/item/weapon/towel{ - color = "#ff0000"; - name = "red towel" - }, -/obj/item/weapon/towel{ - color = "#FF8C00"; - name = "orange towel"; - pixel_x = -2; - pixel_y = -4 - }, -/obj/item/weapon/towel{ - color = "#FF8C00"; - name = "orange towel"; - pixel_x = -2; - pixel_y = -4 - }, -/obj/item/weapon/towel{ - color = "#90ee90"; - name = "green towel" - }, -/obj/item/weapon/towel{ - color = "#90ee90"; - name = "green towel" - }, -/obj/item/weapon/towel{ - color = "#b5651d"; - name = "brown towel" - }, -/obj/item/weapon/towel{ - color = "#b5651d"; - name = "brown towel" - }, -/obj/item/weapon/towel, -/obj/item/weapon/towel, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/item/weapon/tape_roll{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/tape_roll{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/device/taperecorder, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/folder/yellow, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"dJs" = ( -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"dJG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"dKg" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"dKh" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"dLq" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dMu" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/Farm) -"dMv" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/yellow, -/turf/simulated/floor/wood, -/area/template_noop) -"dMB" = ( -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"dMC" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"dMD" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 6 - }, -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"dMX" = ( -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/WoodenCamp) -"dNs" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"dNT" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"dOg" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dOl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"dOt" = ( -/turf/simulated/floor/cult{ - icon_state = "cult-narsie" - }, -/area/survivalpod/superpose/CultShip) -"dPb" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/GrandLibrary) -"dPn" = ( -/obj/machinery/vending/foodfast, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"dQo" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"dQp" = ( -/obj/machinery/suit_cycler/vintage/omni{ - req_one_access = list(150) - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"dRC" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"dRE" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/carpet/purcarpet, -/area/template_noop) -"dRG" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"dRR" = ( -/obj/item/device/radio/intercom/department/medbay{ - pixel_y = -21 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"dSa" = ( -/obj/machinery/button/remote/blast_door{ - id = "SP-Cell"; - name = "Cell Door"; - pixel_x = 6; - pixel_y = -33; - req_one_access = list(2,4) - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = -24; - req_access = list(2,4) - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"dSC" = ( -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"dSK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"dTe" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/table/woodentable, -/obj/item/paint_palette{ - pixel_y = 6; - pixel_x = 6 - }, -/obj/item/paint_brush{ - pixel_y = 4; - pixel_x = -8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"dUu" = ( -/obj/item/weapon/cell/hyper, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"dUz" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dUE" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dVe" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"dVp" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"dVG" = ( -/obj/structure/closet/walllocker_double/south{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/template_noop) -"dVK" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"dVL" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"dVP" = ( -/obj/item/weapon/material/knife/tacknife/survival, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"dWH" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"dWQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"dXj" = ( -/obj/machinery/chemical_dispenser/bar_alc/full{ - pixel_y = 22 - }, -/obj/structure/table/marble, -/obj/item/weapon/clipboard, -/obj/item/toy/figure/bartender, -/obj/item/weapon/storage/fancy/cigar/havana, -/obj/item/weapon/storage/fancy/cigar/cohiba, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dXz" = ( -/obj/structure/bed/chair/wood, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"dXD" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/suit/bio_suit/anomaly, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/bio_hood/anomaly, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/storage/excavation, -/obj/item/stack/flag/yellow, -/obj/item/device/measuring_tape, -/obj/item/weapon/pickaxe/drill, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/item/weapon/material/knife/machete/hatchet, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"dYd" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/green, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"dYD" = ( -/turf/simulated/floor/carpet/gaycarpet, -/area/template_noop) -"dYQ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"dYU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"dZa" = ( -/obj/machinery/gibber/autogibber{ - emagged = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"dZk" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"dZo" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/simulated/floor/plating, -/area/template_noop) -"eab" = ( -/obj/fire, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"eam" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"eaw" = ( -/obj/random/pottedplant, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - opacity = 1 - }, -/obj/structure/curtain/black, -/turf/simulated/floor/cult, -/area/template_noop) -"eaB" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"eaM" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"ebl" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"ebv" = ( -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"ebA" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"ecg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/fireaxecabinet{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"ecn" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"ecq" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id = "SP-Cell"; - name = "Cell Door" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ecx" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"ecK" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ecV" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"edd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"edy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"edH" = ( -/obj/structure/table/reinforced, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"edW" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"eet" = ( -/obj/machinery/smartfridge/drying_rack{ - pixel_x = 9 - }, -/obj/machinery/smartfridge/drying_rack{ - pixel_x = -8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"eeG" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"efD" = ( -/obj/structure/sink{ - pixel_y = 14 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"efF" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"efG" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ - id = "frog"; - name = "Frog"; - pixel_x = 6; - pixel_y = 2 - }, -/obj/machinery/button/remote/blast_door{ - id = "death"; - name = "Deathclaw"; - pixel_x = -6; - pixel_y = 2 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"efN" = ( -/turf/simulated/mineral/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"efQ" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/book/tome/imbued, -/obj/item/weapon/digestion_remains/skull/unathi, -/obj/item/device/soulstone, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"efY" = ( -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"egm" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/obj/machinery/light/poi, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"egx" = ( -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"egE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"ehi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"ehG" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - req_one_access = null - }, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ehT" = ( -/obj/fire, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"eii" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"eim" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"eir" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"ejR" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/obj/item/weapon/material/shard{ - pixel_x = 5 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"eka" = ( -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ekd" = ( -/obj/structure/closet/cabinet, -/obj/random/curseditem, -/obj/random/curseditem, -/obj/item/weapon/melee/cursedblade, -/obj/item/weapon/melee/cultblade, -/obj/item/weapon/beartrap/hunting, -/obj/item/weapon/beartrap/hunting, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/device/soulstone, -/obj/item/device/soulstone, -/obj/item/weapon/storage/belt/soulstone/full, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"eko" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "estrella_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "estrella_sensor"; - pixel_y = -28 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"elo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"elq" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 8; - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"elu" = ( -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/structure/table/rack/shelf, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"elG" = ( -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"elI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"elO" = ( -/obj/structure/sign/flag/pirate, -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"emx" = ( -/obj/structure/prop/blackbox/quarantined_shuttle, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"emZ" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/part_replacer/adv/discount_bluespace{ - layer = 3.01 - }, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/obj/effect/spawner/parts/t3, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"enm" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/power/emitter, -/turf/simulated/floor/plating, -/area/template_noop) -"enH" = ( -/obj/machinery/optable, -/obj/machinery/oxygen_pump/anesthetic{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eog" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"eok" = ( -/obj/item/weapon/material/knife/machete/hatchet, -/turf/simulated/floor/outdoors/mud{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"eoo" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"eoQ" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/wood, -/area/template_noop) -"epj" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/sign/deathsposal{ - desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; - name = "\improper DISPOSAL: LEADS TO EXTERIOR"; - pixel_y = -32 - }, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"epm" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"epr" = ( -/obj/item/device/flashlight/lamp, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"epD" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/dead{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"epR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"epS" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"eqb" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"eqK" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"eqP" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "estrella"; - name = "interior access button"; - pixel_y = 26 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"eqX" = ( -/obj/structure/table/survival_pod, -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/clothing/glasses/welding, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"erk" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"erV" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 8; - name = "Security Checkpoint"; - req_access_txt = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Security Checkpoint"; - req_access_txt = null - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "checkshutt" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"erW" = ( -/obj/effect/floor_decal/spline/plain, -/obj/structure/reagent_dispensers/water_cooler/full{ - dir = 8; - pixel_x = 9 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"esy" = ( -/mob/living/bot/farmbot, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"esW" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"ett" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/int{ - name = "Sauna" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"eua" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/template_noop) -"eup" = ( -/obj/machinery/vending/coffee, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eus" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"euE" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"euL" = ( -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"euU" = ( -/obj/structure/closet/emcloset, -/obj/item/clothing/mask/breath, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"evF" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"evL" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ewo" = ( -/obj/structure/sink{ - pixel_y = 16 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ewE" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"ewY" = ( -/turf/simulated/floor/lino, -/area/survivalpod) -"exa" = ( -/obj/vehicle/train/engine{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"exi" = ( -/obj/item/weapon/storage/belt/utility/full/multitool, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"exk" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/weapon/storage/box/freezer, -/obj/item/weapon/storage/box/freezer, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/defib_kit/loaded, -/obj/item/device/defib_kit/loaded, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"exz" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"exB" = ( -/obj/structure/closet/crate/bin, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"exK" = ( -/obj/structure/cliff/automatic/corner, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"eyx" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - on = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"eyY" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"eza" = ( -/obj/machinery/alarm/monitor{ - dir = 1; - locked = 0; - pixel_y = -23; - req_access = null - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"ezf" = ( -/obj/structure/table/woodentable, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor/wood, -/area/template_noop) -"ezi" = ( -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ezj" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"eAz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"eAS" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/projectile/shotgun/pump/rifle/scoped, -/obj/item/weapon/gun/projectile/shotgun/pump/rifle, -/obj/item/weapon/storage/box/syndie_kit{ - max_storage_space = 20; - name = "box of 7.62mm clips"; - starts_with = list(/obj/item/ammo_magazine/clip/c762=10) - }, -/obj/item/weapon/storage/box/syndie_kit{ - max_storage_space = 20; - name = "box of 7.62mm clips"; - starts_with = list(/obj/item/ammo_magazine/clip/c762=10) - }, -/turf/simulated/floor/wood, -/area/template_noop) -"eBn" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/greendouble, -/turf/simulated/floor/wood, -/area/template_noop) -"eBu" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/rack/shelf, -/obj/random/maintenance, -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"eBz" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/table/rack, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"eBF" = ( -/obj/item/weapon/cell/high/empty, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"eBY" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"eBZ" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"eCc" = ( -/obj/structure/alien/wall, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"eCh" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"eCC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eDL" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"eEr" = ( -/obj/item/weapon/melee/cultblade, -/obj/structure/table/fancyblack, -/obj/item/device/soulstone, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eEP" = ( -/obj/machinery/smartfridge/drying_rack, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"eFL" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/sign/painting/public, -/turf/simulated/wall/wood, -/area/template_noop) -"eFO" = ( -/obj/machinery/camera{ - dir = 1 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"eGz" = ( -/obj/machinery/vending/cola, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eGL" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"eGN" = ( -/obj/structure/table/standard, -/obj/item/weapon/deck/cards, -/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"eGY" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"eGZ" = ( -/obj/machinery/camera{ - c_tag = "Containment Chamber"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"eHB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eHJ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"eHK" = ( -/obj/structure/table/rack, -/obj/item/weapon/shovel, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"eHY" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"eIo" = ( -/obj/structure/sign/vacuum{ - desc = "A beacon used by a teleporter."; - icon = 'icons/obj/radio.dmi'; - icon_state = "beacon"; - name = "tracking beacon" - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"eIL" = ( -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"eIQ" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/structure/closet/walllocker_double/survival/north, -/turf/simulated/floor/wood, -/area/template_noop) -"eJa" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"eJh" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"eJk" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"eJG" = ( -/obj/structure/lattice, -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"eJH" = ( -/obj/item/roller_holder, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"eJL" = ( -/obj/machinery/light/floortube/flicker{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"eJO" = ( -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"eKn" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"eKv" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"eKE" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "door_locked"; - locked = 1; - name = "Cargo Bay" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"eLg" = ( -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"eLw" = ( -/obj/structure/table/steel, -/obj/item/device/starcaster_news{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/toy/eight_ball{ - pixel_x = 5; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eLB" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = 32 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"eLG" = ( -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/suit/space/void/atmos, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/void/atmos, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/westleft{ - name = "Atmospherics Suits"; - req_access = list(24) - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eMa" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eMd" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/snacks/mint, -/obj/item/weapon/packageWrap, -/obj/item/weapon/reagent_containers/dropper, -/obj/machinery/chemical_dispenser/bar_alc/full{ - pixel_x = -1; - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eMl" = ( -/obj/structure/table/rack/shelf, -/obj/item/weapon/storage/toolbox, -/obj/item/weapon/storage/toolbox, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eMp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/gear_painter, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"eMS" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"eMU" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"eMZ" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"eNg" = ( -/obj/structure/cult/tome, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"eNw" = ( -/obj/structure/bonfire/permanent, -/obj/structure/grille/rustic, -/turf/simulated/floor/cult, -/area/template_noop) -"eNP" = ( -/obj/structure/salvageable/computer, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"eOn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/obj/random/maintenance/clean, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"eOx" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "military autolathe" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"eOW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/largecrate/animal/corgi, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ePy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ePU" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"ePY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"eQc" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eQk" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"eRn" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"eRq" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"eRr" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"eRx" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"eRQ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"eSv" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"eSK" = ( -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eSR" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"eTn" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"eTx" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"eTA" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"eTG" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eTL" = ( -/obj/item/weapon/material/shard{ - pixel_x = 6 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"eUt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"eUx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"eUR" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"eUS" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/mirror{ - dir = 4; - pixel_x = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"eVH" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"eVP" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"eWv" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"eWF" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/closet/jcloset, -/obj/item/weapon/mop, -/obj/structure/mopbucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"eXg" = ( -/obj/structure/grille/broken/cult, -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"eXl" = ( -/obj/structure/table/rack, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"eYe" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"eYv" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"eYK" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"eZk" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"eZo" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"fak" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"fam" = ( -/obj/machinery/button/remote/blast_door{ - id = "Teshnomancer_frontdoor"; - name = "Front Blast Door"; - pixel_x = 7; - pixel_y = 25; - req_one_access = list(300) - }, -/obj/machinery/button/remote/airlock{ - id = "Teshnomancer_doors"; - name = "Bolt doors"; - pixel_x = -8; - pixel_y = 25; - req_one_access = list(300); - specialfunctions = 4 - }, -/obj/machinery/button/remote/airlock{ - id = "Teshnomancer_doors"; - name = "Open doors"; - pixel_x = -8; - pixel_y = 39; - req_one_access = list(300) - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"fay" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/cosmos, -/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"faD" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"faJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"fbo" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"fbv" = ( -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/FieldLab) -"fbz" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fbY" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/r_n_d/server/core, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"fcs" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms"; - req_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"fcx" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fcD" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/button/windowtint{ - id = "SP-Pool"; - pixel_x = -27 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"fcX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"fdh" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fdj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"fdy" = ( -/obj/structure/hull_corner{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"fdM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"fdY" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"fen" = ( -/obj/item/weapon/pickaxe/hand, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"feF" = ( -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Teshnomancer_innerdoor"; - name = "Inner Door"; - pixel_x = 26; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"ffG" = ( -/obj/item/stack/nanopaste, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"ffK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"fgs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"fgz" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"fgF" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"fhd" = ( -/obj/fiftyspawner/turcarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"fhp" = ( -/obj/structure/table/glass, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fhG" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fhV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"fhZ" = ( -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/ScienceShip) -"fiQ" = ( -/obj/item/weapon/storage/backpack/sport, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"fjA" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 5 - }, -/obj/machinery/door/window/brigdoor/northright{ - name = "FH Chemistry Windoor"; - req_access = list(300) - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"fjT" = ( -/mob/living/simple_mob/animal/passive/cat/bones{ - desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; - name = "Felix" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"fkn" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 4; - pixel_x = -3 - }, -/turf/template_noop, -/area/survivalpod/superpose/ScienceShip) -"fkQ" = ( -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"fkW" = ( -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"fkZ" = ( -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"flw" = ( -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"flG" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"fmj" = ( -/obj/item/clothing/suit/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fmw" = ( -/obj/item/device/flashlight, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"fmE" = ( -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/wood, -/area/survivalpod) -"fmN" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/sign/kiddieplaque{ - desc = "A plaque commemorating the construction of the cargo ship Beruang."; - name = "Beruang"; - pixel_x = 32 - }, -/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"fnO" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"fon" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"fou" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"foz" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"foD" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"foI" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"foK" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/bed/chair/office/dark, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"foL" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"foR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/fire, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"fpf" = ( -/obj/structure/table/woodentable, -/obj/item/trash/candle, -/obj/item/weapon/paper{ - info = "This is a stupid tresure hunt task, that thing is not taking us anywhere. Go on and have fun finding a waste of time."; - name = "Wrinkled sheet of paper" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"fpi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"fpo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"fpt" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fpQ" = ( -/obj/item/weapon/inflatable_duck, -/turf/simulated/floor/water/pool, -/area/template_noop) -"fpS" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/WoodenCamp) -"fqN" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ - id = "hound"; - name = "Currupt Hound"; - pixel_x = -6; - pixel_y = 2 - }, -/obj/machinery/button/remote/blast_door{ - id = "panther"; - name = "Panther"; - pixel_x = 6; - pixel_y = 2 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"fqW" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"frw" = ( -/obj/machinery/vending/hydronutrients, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"frA" = ( -/obj/item/weapon/stool/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"frF" = ( -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/DemonPool) -"frP" = ( -/obj/structure/closet/cabinet, -/obj/random/curseditem, -/obj/random/curseditem, -/obj/item/weapon/melee/cursedblade, -/obj/item/weapon/melee/cultblade, -/obj/item/weapon/beartrap/hunting, -/obj/item/weapon/beartrap/hunting, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/device/soulstone, -/obj/item/device/soulstone, -/obj/item/weapon/storage/belt/soulstone/full, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"fsq" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"fsy" = ( -/obj/structure/closet/secure_closet/hydroponics{ - anchored = 1; - name = "minimalist botanist's locker"; - req_access = list(300); - starts_with = list(/obj/item/weapon/storage/bag/plants,/obj/item/clothing/gloves/botanic_leather,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/reagent_containers/glass/beaker=2,/obj/item/weapon/tool/wirecutters/clippers/trimmers,/obj/item/weapon/reagent_containers/spray/plantbgone) - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"fsJ" = ( -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"fsK" = ( -/obj/structure/table/woodentable, -/obj/random/coin, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"ftq" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"ftt" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"fua" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"fuu" = ( -/obj/machinery/door/airlock{ - name = "Restroom" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fuv" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 36; - pixel_y = 3 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 36; - pixel_y = -10 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"fux" = ( -/obj/structure/curtain/open/shower, -/obj/machinery/shower{ - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"fvw" = ( -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"fvQ" = ( -/obj/structure/grille/rustic, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 3 - }, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"fwW" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"fxk" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/gun/energy/netgun, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"fxm" = ( -/obj/structure/table/fancyblack, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/starcaster_news, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"fxq" = ( -/obj/machinery/telecomms/relay, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"fxy" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cult/forge, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"fxB" = ( -/obj/structure/simple_door/sifwood, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"fxI" = ( -/obj/structure/bookcase, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"fyk" = ( -/obj/item/weapon/flame/lighter, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/WoodenCamp) -"fyt" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - dir = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"fyJ" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 32 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"fyN" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fyQ" = ( -/obj/item/device/flashlight/lantern, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"fzi" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/structure/flora/pottedplant/fern{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"fzk" = ( -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_y = 22 - }, -/obj/structure/table/marble, -/obj/item/weapon/book/manual/barman_recipes, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"fzN" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fzP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/steel_grid, -/area/template_noop) -"fAE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/Dinner) -"fAL" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"fAS" = ( -/obj/structure/table/fancyblack, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"fBv" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"fBC" = ( -/obj/item/stack/material/sandstone, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"fBE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"fBH" = ( -/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, -/obj/structure/curtain/black, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/template_noop) -"fBI" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 9 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/firstaid/surgery, -/obj/machinery/light/floortube{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"fBQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"fCf" = ( -/obj/structure/table/hardwoodtable, -/obj/structure/stripper_pole{ - pixel_y = 9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/item/clothing/under/swimsuit/stripper/mankini{ - pixel_y = 5; - pixel_x = -6 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"fCi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/obj/machinery/newscaster{ - pixel_y = 29 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"fCq" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/item/organ/internal/heart, -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"fCH" = ( -/obj/structure/reagent_dispensers/water_cooler/full{ - pixel_x = -10; - pixel_y = 12 - }, -/obj/structure/closet/crate/bin{ - pixel_x = 6; - pixel_y = 13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"fCK" = ( -/obj/structure/table/alien/blue, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"fDk" = ( -/obj/structure/railing/grey, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"fDy" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"fDW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"fEa" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"fEx" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"fEC" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/closet/wardrobe/chemistry_white, -/obj/item/weapon/storage/box/pillbottles, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"fEX" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"fFv" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"fFz" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"fGT" = ( -/obj/item/weapon/reagent_containers/glass/rag, -/obj/item/clothing/gloves/ring/engagement, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"fHf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 8; - tag = "icon-window (WEST)" - }, -/obj/random/trash, -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"fHi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"fHv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"fHw" = ( -/obj/machinery/vending/tool, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"fHI" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/kitchen/utensil/spoon, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"fHL" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"fIb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"fIe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"fJf" = ( -/obj/structure/closet/walllocker_double/south{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/carpet/gaycarpet, -/area/template_noop) -"fJo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"fJx" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"fJV" = ( -/obj/structure/bed/chair/backed_red, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fKu" = ( -/obj/machinery/light/bigfloorlamp, -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"fKG" = ( -/obj/machinery/door/airlock/external{ - desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; - frequency = 1380; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "MBT-540" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fLc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"fLQ" = ( -/obj/structure/table/sifwooden_reinforced, -/obj/item/device/binoculars, -/obj/item/device/bluespaceradio/southerncross_prelinked, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"fMb" = ( -/obj/structure/salvageable/console_os, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/ScienceShip) -"fMf" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"fMh" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"fMT" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = 32 - }, -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"fNP" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/vending/fitness, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"fNT" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder, -/obj/machinery/camera{ - c_tag = "HydroResearch Bay East"; - dir = 8; - network = list("Research") - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"fNW" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"fOt" = ( -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CultShip) -"fOK" = ( -/obj/machinery/porta_turret/stationary/syndie, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"fOX" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/obj/item/device/gps/medical/on{ - pixel_x = 7; - pixel_y = 6 - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"fPt" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"fPP" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"fQz" = ( -/obj/structure/closet/secure_closet/miner{ - locked = 0 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"fQL" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"fSN" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"fSR" = ( -/obj/structure/fans, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"fTB" = ( -/obj/structure/closet/secure_closet/freezer/fridge{ - locked = 0 - }, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"fTP" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_y = -32 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"fTU" = ( -/obj/fire, -/obj/fire, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"fUo" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/remains/human, -/obj/item/clothing/under/mbill{ - desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; - name = "\improper old Major Bill's uniform" - }, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fUD" = ( -/obj/structure/cliff/automatic{ - dir = 2 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"fVh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"fVD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"fVZ" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"fWa" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor, -/area/template_noop) -"fWs" = ( -/obj/machinery/gear_dispenser/suit/autolok, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fWu" = ( -/obj/structure/closet{ - anchored = 1; - name = "welding equipment" - }, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/head/welding/knight, -/obj/item/clothing/head/welding/knight, -/obj/structure/railing/grey{ - dir = 1; - health = 8000000000; - maxhealth = 8000000000; - name = "durable grey railing" - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/bag/circuits/basic, -/obj/item/weapon/beartrap/hunting, -/obj/item/weapon/beartrap/hunting, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"fWJ" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"fWL" = ( -/obj/item/bodybag/cryobag, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"fWS" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"fXk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = -4 - }, -/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"fXO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"fXX" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"fYM" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"fZo" = ( -/obj/structure/table/steel, -/obj/machinery/light, -/obj/item/weapon/storage/box/lights/mixed{ - pixel_x = 8 - }, -/obj/item/weapon/storage/box/lights/mixed{ - pixel_x = -8 - }, -/obj/item/weapon/storage/box/lights/mixed{ - pixel_x = -8; - pixel_y = 11 - }, -/obj/item/weapon/storage/box/lights/mixed{ - pixel_x = 8; - pixel_y = 11 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"fZR" = ( -/obj/machinery/chem_master{ - pixel_x = -7 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"fZX" = ( -/obj/structure/table, -/obj/machinery/light{ - layer = 3 - }, -/obj/item/weapon/gun/projectile/revolver/toy/crossbow, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"gaf" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"gax" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"gaP" = ( -/obj/structure/simple_door/wood, -/obj/structure/barricade/planks, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"gbd" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"gby" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"gbD" = ( -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/hyper; - dir = 8; - name = "Unknown APC"; - operating = 0; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"gcd" = ( -/obj/structure/prop/alien/pod/open, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"gch" = ( -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"gcv" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"gcO" = ( -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"gdY" = ( -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"gek" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"gfk" = ( -/obj/machinery/button/remote/blast_door{ - dir = 1; - id = "glcafe"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"gfp" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Utility"; - dir = 1; - network = list("Research") - }, -/obj/machinery/camera{ - c_tag = "Lobby"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"ggx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"ggA" = ( -/obj/fire, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"ggV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/crate/secure/loot, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ghf" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ghq" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/windoor_assembly{ - dir = 2 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"gio" = ( -/obj/structure/salvageable/computer, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"gjs" = ( -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"gjB" = ( -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gjK" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/extinguisher{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/structure/mopbucket{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/weapon/mop, -/obj/item/device/multitool, -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/LoneHome) -"gjM" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"gkK" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/empty/nitrogen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"gkR" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/tealcarpet, -/area/template_noop) -"glG" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gmc" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"gmL" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"gnu" = ( -/obj/structure/barricade, -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 4; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"gnx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 8; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"gnT" = ( -/obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; - name = "security officer's locker"; - req_access_txt = "201" - }, -/obj/item/clothing/under/rank/security/corp, -/obj/item/clothing/under/rank/security/corp, -/obj/item/clothing/suit/armor/vest/alt, -/obj/item/clothing/suit/armor/vest/alt, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/obj/item/clothing/glasses/sunglasses/sechud, -/obj/item/clothing/glasses/sunglasses/sechud, -/obj/item/clothing/shoes/boots/duty, -/obj/item/clothing/shoes/boots/duty, -/obj/item/clothing/gloves/black, -/obj/item/clothing/gloves/black, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/weapon/gun/projectile/automatic/bullpup, -/obj/item/weapon/gun/projectile/automatic/bullpup, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/weapon/gun/energy/taser, -/obj/item/weapon/gun/energy/taser, -/obj/item/weapon/handcuffs, -/obj/item/weapon/handcuffs, -/obj/item/weapon/handcuffs, -/obj/item/weapon/handcuffs, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"gnX" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"gnZ" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"got" = ( -/obj/machinery/access_button{ - master_tag = null; - pixel_x = 27; - pixel_y = -7; - req_one_access = null - }, -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"gpc" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/full{ - pixel_y = 5 - }, -/obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; - name = "Station Intercom (Brig Radio)"; - pixel_y = -21; - wires = 7 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"gqU" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"gre" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/obj/item/trash/material/metal, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"grn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = -6 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"grp" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"grU" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gsv" = ( -/obj/item/trash/material/metal, -/obj/item/trash/material/circuit, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"gsw" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "screen"; - layer = 4; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"gtC" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"gtD" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/table/gamblingtable, -/obj/item/device/starcaster_news, -/obj/item/weapon/deck/cards, -/obj/structure/fireaxecabinet{ - pixel_y = 27 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gtH" = ( -/obj/effect/fusion_em_field, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"gtI" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"gtN" = ( -/obj/random/trash, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"gue" = ( -/obj/structure/flora/tree/jungle_small, -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"guf" = ( -/obj/random/maintenance/clean, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"guO" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"gvb" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"gvd" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"gvF" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"gvQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"gvX" = ( -/obj/item/trash/sosjerky, -/obj/item/weapon/storage/box/donut/empty, -/obj/item/weapon/reagent_containers/food/drinks/sillycup, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"gvZ" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"gwl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - id_tag = "awaydorm1"; - name = "Dorm 1" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"gwo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"gwz" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/toy/figure/abe, -/obj/item/toy/figure/acolyte, -/obj/item/toy/figure/agent, -/obj/item/toy/figure/assistant, -/obj/item/toy/figure/atmos, -/obj/item/toy/figure/bandit, -/obj/item/toy/figure/barking_dog, -/obj/item/toy/figure/bartender, -/obj/item/toy/figure/borg, -/obj/item/toy/figure/bounty_hunter, -/obj/item/toy/figure/captain, -/obj/item/toy/figure/cargotech, -/obj/item/toy/figure/carrion, -/obj/item/toy/figure/ce, -/obj/item/toy/figure/chaplain, -/obj/item/toy/figure/chef, -/obj/item/toy/figure/chemist, -/obj/item/toy/figure/clown, -/obj/item/toy/figure/cmo, -/obj/item/toy/figure/corgi, -/obj/item/toy/figure/detective, -/obj/item/toy/figure/dsquad, -/obj/item/toy/figure/engineer, -/obj/item/toy/figure/error, -/obj/item/toy/figure/ert, -/obj/item/toy/figure/excelsior, -/obj/item/toy/figure/gardener, -/obj/item/toy/figure/geneticist, -/obj/item/toy/figure/hop, -/obj/item/toy/figure/hos, -/obj/item/toy/figure/janitor, -/obj/item/toy/figure/leadbandit, -/obj/item/toy/figure/librarian, -/obj/item/toy/figure/md, -/obj/item/toy/figure/metacat, -/obj/item/toy/figure/metro_patrolman, -/obj/item/toy/figure/mime, -/obj/item/toy/figure/miner, -/obj/item/toy/figure/ninja, -/obj/item/toy/figure/paramedic, -/obj/item/toy/figure/prisoner, -/obj/item/toy/figure/profwho, -/obj/item/toy/figure/psychologist, -/obj/item/toy/figure/qm, -/obj/item/toy/figure/ranger, -/obj/item/toy/figure/rd, -/obj/item/toy/figure/red_soldier, -/obj/item/toy/figure/roach, -/obj/item/toy/figure/roboticist, -/obj/item/toy/figure/rooster, -/obj/item/toy/figure/scientist, -/obj/item/toy/figure/secofficer, -/obj/item/toy/figure/serbian, -/obj/item/toy/figure/shitcurity, -/obj/item/toy/figure/syndie, -/obj/item/toy/figure/vagabond, -/obj/item/toy/figure/virologist, -/obj/item/toy/figure/warden, -/obj/item/toy/figure/wizard, -/obj/item/toy/figure/station, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"gwH" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gwP" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"gxq" = ( -/obj/machinery/deployable/barrier{ - desc = "A deployable barrier with strange undertones. Swipe your ID card to lock/unlock it."; - health = 8000000000; - maxhealth = 8000000000; - name = "modified deployable barrier"; - req_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"gxF" = ( -/obj/structure/hull_corner/long_vert{ - dir = 5 - }, -/turf/template_noop, -/area/template_noop) -"gyj" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"gyJ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/large, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gyL" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -10 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gyP" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"gzu" = ( -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gzW" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"gAN" = ( -/obj/item/device/suit_cooling_unit/emergency, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gAX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"gBi" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"gBM" = ( -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gBP" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"gCk" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/engivend{ - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"gDd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"gDg" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = -30 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"gDk" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/storage/belt/utility, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/device/healthanalyzer, -/obj/item/device/healthanalyzer, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/storage/backpack/dufflebag/sci, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"gDA" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"gDN" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiadeusseed, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"gDT" = ( -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"gDU" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/CrashedInfestedShip) -"gEk" = ( -/obj/fire, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"gEF" = ( -/obj/item/stack/rods{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"gFd" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"gGk" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"gGt" = ( -/turf/simulated/wall/cult, -/area/template_noop) -"gGJ" = ( -/obj/structure/table/rack/shelf, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"gHi" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/ScienceShip) -"gHl" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/obj/machinery/door/window/southleft{ - dir = 8; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "hrshutt" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"gHq" = ( -/obj/structure/closet/cabinet, -/obj/random/maintenance/medical, -/obj/random/carp_plushie, -/obj/random/cigarettes, -/obj/random/drinkbottle, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"gHu" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/item/weapon/book/tome/imbued, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"gHE" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 9 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/packageWrap, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"gHV" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/glasses/square{ - pixel_y = -2 - }, -/obj/item/weapon/storage/box/glass_extras/sticks{ - pixel_y = 4 - }, -/obj/item/weapon/storage/box/glass_extras/straws{ - pixel_y = 7 - }, -/obj/item/weapon/packageWrap, -/obj/structure/curtain/open/bed, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"gIc" = ( -/obj/item/stack/rods, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"gIp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"gIG" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"gIN" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/paper_bin{ - pixel_y = 3 - }, -/obj/item/weapon/pen{ - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"gIP" = ( -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"gJb" = ( -/obj/structure/barricade, -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"gJt" = ( -/obj/structure/window/reinforced, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"gJv" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/item/organ/internal/lungs, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"gJz" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"gJO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"gJV" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 8 - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"gKa" = ( -/obj/structure/cult/talisman, -/obj/item/weapon/melee/cultblade, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"gKm" = ( -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "Teshnomancer_innerdoor"; - name = "Inner Door"; - pixel_x = -26; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"gKs" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"gKR" = ( -/obj/machinery/button/remote/airlock/survival_pod{ - dir = 10; - pixel_y = -24 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"gKT" = ( -/obj/machinery/camera{ - c_tag = "Breakroom South"; - dir = 1; - network = list("Research") - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"gLq" = ( -/obj/fire, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"gMI" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"gMS" = ( -/obj/structure/bed/chair, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"gOf" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiadeusseed, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"gOA" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"gOT" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/template_noop) -"gPj" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"gPx" = ( -/obj/item/weapon/weldingtool/largetank, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"gPA" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"gQf" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/template_noop) -"gRb" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"gSa" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/machinery/light{ - layer = 3 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"gSr" = ( -/obj/machinery/librarycomp, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/template_noop) -"gSJ" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/medical, -/obj/structure/curtain/open/privacy, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"gTa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"gUc" = ( -/obj/machinery/sleeper/survival_pod, -/obj/machinery/cryopod{ - dir = 4; - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"gUq" = ( -/obj/structure/sign/warning{ - name = "ACTIVE FACILITY"; - pixel_y = 29 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"gUN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"gVr" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"gVG" = ( -/obj/structure/table/reinforced, -/obj/structure/railing/grey{ - dir = 1; - health = 8000000000; - maxhealth = 8000000000; - name = "durable grey railing" - }, -/obj/item/device/defib_kit/jumper_kit/loaded, -/obj/item/device/defib_kit/jumper_kit/loaded, -/obj/item/device/robotanalyzer, -/obj/item/device/robotanalyzer, -/obj/machinery/cell_charger, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"gWa" = ( -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"gWI" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/papershredder, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"gWP" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"gWS" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"gWY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"gYP" = ( -/obj/item/weapon/gun/projectile/colt, -/obj/item/weapon/gun/projectile/shotgun/pump, -/obj/item/ammo_magazine/m45, -/obj/item/ammo_magazine/m45, -/obj/structure/closet/secure_closet/guncabinet{ - req_one_access = null - }, -/obj/item/ammo_magazine/ammo_box/b12g/beanbag, -/obj/item/ammo_magazine/ammo_box/b12g/beanbag, -/obj/item/ammo_magazine/ammo_box/b12g/flechette, -/obj/item/ammo_magazine/ammo_box/b12g/flechette, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"gZt" = ( -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"hab" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 3 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"hah" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"haB" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"haD" = ( -/obj/machinery/atmospherics/pipe/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"haL" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"haW" = ( -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"hbp" = ( -/obj/item/frame/apc, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"hbw" = ( -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"hbT" = ( -/obj/structure/table/standard, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hca" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/gaycarpet, -/area/template_noop) -"hcm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"hco" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/head/wizard/marisa/fake, -/obj/item/clothing/head/wizard/fake/realistic, -/obj/item/clothing/accessory/poncho/roles/cloak/mining, -/obj/item/clothing/accessory/poncho/roles/cloak/research, -/obj/item/clothing/gloves/combat/knight_costume, -/obj/item/clothing/gloves/combat/knight_costume/brown, -/obj/item/clothing/shoes/knight_costume, -/obj/item/clothing/shoes/knight_costume/black, -/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, -/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, -/obj/item/clothing/suit/storage/hooded/knight_costume/robin, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"hcE" = ( -/obj/item/weapon/photo, -/obj/item/weapon/photo{ - pixel_x = 4 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"hcO" = ( -/obj/machinery/appliance/cooker/grill, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"hdg" = ( -/obj/structure/bed/chair/oldsofa/right, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"hdr" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/stock_parts/scanning_module/adv{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/weapon/stock_parts/scanning_module/adv{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/weapon/stock_parts/micro_laser/high, -/obj/item/weapon/stock_parts/micro_laser/high, -/obj/item/weapon/stock_parts/matter_bin/adv, -/obj/item/weapon/stock_parts/matter_bin/adv, -/obj/item/weapon/stock_parts/manipulator/hyper, -/obj/item/weapon/stock_parts/manipulator/hyper, -/obj/item/weapon/stock_parts/capacitor/adv, -/obj/item/weapon/stock_parts/capacitor/adv, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"hdt" = ( -/obj/machinery/atmospherics/unary/heater/sauna{ - dir = 8; - icon_state = "heater_1"; - use_power = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"hdu" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi, -/obj/item/weapon/surgical/bonesetter, -/obj/item/weapon/bone/ribs, -/obj/item/weapon/bone/skull{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"hdB" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/appliance/cooker/grill, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"hdU" = ( -/obj/structure/sink/kitchen{ - dir = 1; - pixel_y = -11 - }, -/obj/item/weapon/farmbot_arm_assembly, -/obj/item/weapon/material/minihoe{ - layer = 3.01 - }, -/obj/item/weapon/reagent_containers/glass/bucket{ - layer = 3.01 - }, -/obj/item/device/analyzer/plant_analyzer{ - layer = 3.01 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"hec" = ( -/obj/machinery/botany/extractor, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"hef" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/largecrate/animal/corgi, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"heh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/cult, -/area/template_noop) -"heq" = ( -/obj/fire, -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"heE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hfc" = ( -/obj/structure/window/reinforced/tinted, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28; - pixel_y = 5 - }, -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"hfj" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"hgr" = ( -/obj/structure/salvageable/console_broken_os, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"hgA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hhh" = ( -/obj/machinery/door/window/westleft{ - name = "Storefront"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hhl" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/floor/carpet, -/area/template_noop) -"hhw" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"hhE" = ( -/obj/structure/toilet, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"hhG" = ( -/obj/machinery/vending/nifsoft_shop{ - categories = 3; - emagged = 1; - name = "Hacked NIFSoft Shop" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"hin" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Dinner) -"hip" = ( -/obj/structure/simple_door/iron, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"hiw" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"hiN" = ( -/obj/structure/hull_corner/long_horiz{ - dir = 5 - }, -/turf/template_noop, -/area/template_noop) -"hjr" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"hjs" = ( -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -28 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"hjN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"hjW" = ( -/obj/structure/closet/walllocker_double/survival/south, -/turf/simulated/floor/wood, -/area/template_noop) -"hkb" = ( -/obj/structure/table/steel, -/obj/item/weapon/storage/box/bodybags, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"hlc" = ( -/obj/structure/table/standard, -/obj/item/weapon/towel/random{ - pixel_y = -5 - }, -/obj/item/weapon/towel/random, -/obj/random/soap{ - pixel_y = 5 - }, -/obj/random/soap{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"hln" = ( -/obj/item/device/healthanalyzer, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"hlM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"hmh" = ( -/turf/simulated/wall/fancy_shuttle, -/area/template_noop) -"hml" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"hmt" = ( -/obj/structure/bed/chair, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"hmK" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/piratedouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"hmO" = ( -/obj/item/weapon/flame/candle/everburn{ - pixel_y = 0 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/wall/wood, -/area/template_noop) -"hnf" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hnl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"hnx" = ( -/obj/structure/cult/pylon, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hnO" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"hoi" = ( -/obj/effect/floor_decal/borderfloorwhite/corner, -/obj/effect/floor_decal/corner/purple/bordercorner, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hok" = ( -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"hol" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"hor" = ( -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/plating, -/area/template_noop) -"hoH" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"hoK" = ( -/obj/machinery/button{ - name = "Cargo Hatch" - }, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"hpJ" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"hqs" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"hqE" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"hrp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"hrX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/template_noop) -"hsc" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"hsw" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/rust, -/obj/item/weapon/storage/bag/chemistry, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"hsG" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"htj" = ( -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"huu" = ( -/obj/machinery/door/airlock/silver{ - name = "Sleeping" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"huy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"huz" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"huE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"huQ" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"huR" = ( -/turf/simulated/wall/cult, -/area/survivalpod/superpose/CultShip) -"huV" = ( -/obj/machinery/door/airlock/command{ - icon_state = "door_locked"; - locked = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"huZ" = ( -/obj/structure/closet/alien, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"hvj" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/MethLab) -"hvv" = ( -/obj/machinery/sleep_console, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hwy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"hxl" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hxt" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"hxx" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-22" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"hxz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"hyu" = ( -/obj/structure/table/standard, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"hyA" = ( -/obj/fire, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"hyB" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"hyD" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"hzm" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hzI" = ( -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower/medical, -/obj/random/soap, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"hzJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"hzK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hzP" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"hAg" = ( -/obj/machinery/cryopod/robot, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"hAk" = ( -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = -9 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"hAu" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"hAz" = ( -/obj/effect/decal/remains/deer, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"hAF" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"hBi" = ( -/mob/living/simple_mob/vore/demonAI/wendigo{ - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"hBX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hCj" = ( -/obj/effect/map_effect/interval/sound_emitter/punching, -/obj/effect/map_effect/interval/effect_emitter/smoke/fire, -/turf/simulated/floor/lava, -/area/template_noop) -"hCk" = ( -/obj/structure/table/fancyblack, -/obj/machinery/photocopier/faxmachine{ - department = "Grand_Library"; - pixel_y = 6 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"hCs" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiainfernusseed, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"hCD" = ( -/obj/fire, -/obj/item/trash/material/circuit, -/turf/simulated/floor/airless, -/area/survivalpod/superpose/CrashedInfestedShip) -"hCP" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/structure/closet/walllocker_double/hydrant/east, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hDo" = ( -/obj/structure/closet/secure_closet/engineering_electrical{ - req_access = null - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/belt/utility, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"hDw" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/computer/secure_data{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"hEU" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"hEY" = ( -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"hFf" = ( -/obj/item/tape/medical{ - icon_state = "tape_h_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"hFh" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"hFo" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"hFu" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"hFC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"hFH" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/eastright{ - name = "FH Surgery Windoor"; - req_access = list(300) - }, -/obj/structure/curtain/medical, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"hFV" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hGx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hGz" = ( -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"hGL" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/ScienceShip) -"hGQ" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"hHz" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"hIm" = ( -/obj/random/maintenance/engineering, -/obj/fire, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hIo" = ( -/obj/machinery/door/airlock/maintenance/command{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"hIw" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"hIJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hIZ" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"hJu" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hJH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/fire, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"hKe" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"hLg" = ( -/obj/machinery/vending/fitness{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hLj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"hMg" = ( -/obj/structure/table/survival_pod, -/obj/machinery/recharger{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ - pixel_x = 1; - pixel_y = 15 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"hMm" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/maglight, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/head/welding/knight, -/obj/item/clothing/glasses/welding, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/item/weapon/inducer, -/obj/item/weapon/storage/belt/utility/full, -/obj/item/weapon/storage/belt/utility/full, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/weapon/extinguisher/atmo, -/obj/item/weapon/extinguisher/atmo, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/weapon/storage/backpack/dufflebag/eng, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hMS" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"hOR" = ( -/obj/structure/hull_corner, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"hPi" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hPn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"hPx" = ( -/obj/item/device/mapping_unit, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"hPD" = ( -/obj/structure/bed/chair/comfy/black, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"hPF" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"hPJ" = ( -/turf/simulated/floor/carpet/tealcarpet, -/area/template_noop) -"hPV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"hPW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"hQb" = ( -/obj/item/weapon/pen/fountain, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"hQI" = ( -/obj/structure/closet/secure_closet/engineering_welding{ - req_access = null - }, -/obj/item/weapon/storage/belt/utility, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"hRb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/floortube/flicker{ - pixel_y = -3 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"hRu" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"hRP" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"hSs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"hSv" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/wheatseed, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"hSD" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"hSF" = ( -/obj/item/weapon/material/knife/machete, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"hSK" = ( -/obj/structure/table/steel_reinforced, -/obj/item/stack/material/mhydrogen, -/obj/item/stack/material/diamond, -/obj/item/stack/material/sandstone, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hSL" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"hTh" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 8; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"hTE" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"hUE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"hUK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"hUP" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"hVV" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"hWp" = ( -/obj/structure/table/darkglass, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"hWr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"hWD" = ( -/obj/machinery/power/supermatter/shard, -/turf/simulated/floor/greengrid/nitrogen, -/area/template_noop) -"hWE" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"hXY" = ( -/obj/random/maintenance/cargo, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"hYI" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"hYJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"hZa" = ( -/obj/machinery/button/remote/blast_door{ - id = "tradestarshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hZh" = ( -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = -13; - pixel_y = 12 - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"iac" = ( -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"iak" = ( -/obj/machinery/door/window/westright{ - name = "Storefront"; - req_access = list(160) - }, -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"iax" = ( -/obj/machinery/porta_turret/crescent, -/turf/simulated/floor/plating, -/area/template_noop) -"iaN" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/acid{ - pixel_y = -30 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/device/nifrepairer, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/machinery/cell_charger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"ibi" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/telecomms/relay/preset/ruskie, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"ibw" = ( -/obj/structure/bed/chair, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ibW" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"icn" = ( -/obj/structure/table/standard, -/obj/item/weapon/module/power_control, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"icy" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"icK" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"idp" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"idw" = ( -/obj/structure/salvageable/console_broken_os{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"idJ" = ( -/obj/structure/tubes, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/button/remote/airlock/survival_pod{ - dir = 10; - pixel_y = -24 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"iey" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/shoes/boots/winter, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"ieK" = ( -/obj/structure/morgue{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"ifk" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "SP-Cell flash"; - name = "Floor mounted flash" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ifG" = ( -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ifK" = ( -/obj/structure/fitness/punchingbag, -/obj/machinery/light, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"ifS" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/cedouble, -/turf/simulated/floor/wood, -/area/template_noop) -"iga" = ( -/obj/structure/prop/fake_ai{ - name = "P0ps1ck13" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"igl" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/characters, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/template_noop) -"igs" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "SP-kitchen"; - layer = 3.3; - name = "Kitchen Shutters" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"igz" = ( -/obj/machinery/power/smes/buildable/point_of_interest, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"igB" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"igX" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"igY" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"ihi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"ihs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"ihw" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"ihD" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/structure/toilet/prison{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"ihU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"iip" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/item/seeds/ambrosiainfernusseed, -/obj/item/seeds/ambrosiainfernusseed, -/obj/item/seeds/ambrosiainfernusseed, -/obj/item/seeds/ambrosiadeusseed, -/obj/item/seeds/ambrosiadeusseed, -/obj/item/seeds/ambrosiadeusseed, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"iiA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"iiE" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"iiL" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"iiS" = ( -/obj/structure/constructshell/cult, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"ijK" = ( -/obj/machinery/appliance/cooker/oven, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"ikJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"ila" = ( -/obj/machinery/door/airlock/scp, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MethLab) -"ill" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"ilq" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/melee/umbrella/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"ilV" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"imo" = ( -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"imI" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"imR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"inb" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ino" = ( -/obj/structure/sign/periodic, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/LoneHome) -"int" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"iob" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"iol" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"ioy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"ioA" = ( -/obj/structure/fans, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"ioY" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 3; - pixel_y = -28 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 3; - pixel_y = -38 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ipl" = ( -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"ipI" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"iqu" = ( -/obj/structure/alien/wall, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"iqS" = ( -/obj/structure/cliff/automatic, -/obj/structure/railing/grey{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"iru" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"irG" = ( -/obj/screen/alert/highpressure, -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"irM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"isd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = -30 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"isO" = ( -/obj/structure/fence/corner{ - dir = 10 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"itw" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"ity" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"itA" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"itF" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"iuj" = ( -/obj/machinery/button/windowtint{ - id = "SP-Hydro"; - pixel_x = -28; - pixel_y = 6 - }, -/obj/machinery/light_switch{ - name = "light switch "; - pixel_x = -27; - pixel_y = -5 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"iuA" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/chemical_analyzer, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"iuC" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"ivK" = ( -/obj/fire, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"ivM" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"iwk" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"iwV" = ( -/obj/structure/table/standard, -/obj/random/toolbox, -/obj/item/weapon/cell/super, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"iwX" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ixO" = ( -/obj/machinery/vending/boozeomat{ - req_access = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"iyc" = ( -/obj/structure/fence/cut/medium, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"iyj" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/cult, -/area/template_noop) -"iyP" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/table/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"izM" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"izV" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"izZ" = ( -/obj/effect/floor_decal/steeldecal/monofloor{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"iAQ" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"iBc" = ( -/obj/item/stack/material/marble{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iBk" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"iBE" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/shoes/dress{ - pixel_y = -9 - }, -/obj/item/clothing/mask/demon, -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"iCs" = ( -/obj/item/extraction_pack, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iCM" = ( -/obj/machinery/power/port_gen/pacman, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"iDe" = ( -/obj/item/weapon/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"iDp" = ( -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 5 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 5 - }, -/obj/item/weapon/storage/firstaid/o2{ - layer = 2.8; - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/fire{ - layer = 2.9; - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = -2 - }, -/obj/item/weapon/reagent_containers/blood/empty, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"iDq" = ( -/obj/machinery/button/crematorium{ - id = "mercpodburn"; - pixel_x = -10; - pixel_y = -20; - req_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"iDv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"iDY" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"iDZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/vending/wallmed1{ - dir = 8; - pixel_x = 25; - pixel_y = -1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"iEQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"iEU" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"iGV" = ( -/obj/fiftyspawner/blucarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iIe" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"iIu" = ( -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"iIx" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"iIC" = ( -/obj/machinery/mecha_part_fabricator{ - req_access = list(300) - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"iJp" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"iJA" = ( -/obj/structure/bed/chair/bay/chair/padded/green, -/turf/simulated/floor/wood, -/area/template_noop) -"iJC" = ( -/obj/fiftyspawner/oracarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iJH" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 8 - }, -/obj/machinery/light/floortube{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/device/mass_spectrometer/adv, -/obj/item/device/mass_spectrometer/adv, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"iJI" = ( -/obj/structure/table/wooden_reinforced, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Teshnomancer_Private_blastdoors"; - name = "Privacy"; - pixel_x = 26; - req_one_access = list(300) - }, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"iJS" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"iKh" = ( -/obj/structure/ledge/ledge_stairs, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"iKp" = ( -/obj/machinery/vending/snack{ - contraband = null; - products = list(/obj/item/weapon/reagent_containers/food/snacks/candy=0,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen=0,/obj/item/weapon/reagent_containers/food/snacks/chips=0,/obj/item/weapon/reagent_containers/food/snacks/sosjerky=0,/obj/item/weapon/reagent_containers/food/snacks/no_raisin=0,/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie=0,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers=0,/obj/item/weapon/reagent_containers/food/snacks/tastybread=0,/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks=0) - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"iKz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/filingcabinet/medical, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"iKY" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/brain/grey, -/obj/item/weapon/material/knife/plastic, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"iLe" = ( -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/ScienceShip) -"iLK" = ( -/obj/machinery/scale, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"iMj" = ( -/turf/simulated/shuttle/floor/white, -/area/template_noop) -"iMr" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"iML" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"iNo" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"iNu" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"iNO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"iOn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"iOt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"iOP" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"iPm" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/iandouble, -/turf/simulated/floor/wood, -/area/template_noop) -"iPv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/largecrate/animal/cat, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"iPz" = ( -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"iPU" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"iPV" = ( -/obj/structure/cliff/automatic{ - dir = 4 - }, -/obj/structure/railing/grey{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"iQi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"iQk" = ( -/obj/structure/simple_door/cult, -/turf/template_noop, -/area/template_noop) -"iQm" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"iQG" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"iQJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"iQY" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"iRK" = ( -/obj/structure/railing/grey, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"iRQ" = ( -/obj/structure/cliff/automatic/corner{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"iRV" = ( -/obj/structure/sink/kitchen, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"iRW" = ( -/obj/structure/table/standard, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"iSB" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/obj/machinery/door/window/brigdoor/northleft{ - name = "FH Surgery Windoor"; - req_access = list(300) - }, -/obj/structure/curtain/medical, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"iSD" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"iSR" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/tool{ - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"iTi" = ( -/obj/item/weapon/tape_roll, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iUt" = ( -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"iVt" = ( -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"iVU" = ( -/obj/vehicle/train/engine, -/turf/simulated/floor/plating, -/area/template_noop) -"iVZ" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"iWp" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"iWB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"iXg" = ( -/obj/item/weapon/towel/random, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"iXo" = ( -/obj/machinery/vending/loadout/gadget, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"iXp" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"iYk" = ( -/obj/item/weapon/tool/wrench{ - pixel_x = 10; - pixel_y = 4 - }, -/obj/item/clothing/accessory/collar/bell{ - desc = "A bell collar, on it reads. My beloved cat Mitzy" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"iYw" = ( -/obj/structure/simple_door/sandstone{ - color = "#D35400" - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"iYD" = ( -/obj/structure/closet/crate/hydroponics, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"iZf" = ( -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"iZg" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/reagentgrinder, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"iZh" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"iZk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"iZK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = -3 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"jaa" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"jae" = ( -/obj/structure/closet/walllocker_double/medical/west, -/obj/item/weapon/storage/firstaid, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/roller, -/obj/item/device/defib_kit/loaded, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"jap" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/weapon/implanter/sizecontrol, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/phoron, -/obj/item/weapon/ore/phoron, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/gold, -/obj/item/weapon/ore/diamond, -/obj/item/weapon/ore/marble, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/rutile, -/obj/item/toy/bosunwhistle/fluff/strix, -/obj/item/toy/character/wizard, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, -/obj/item/weapon/fluff/squeezetoy, -/obj/item/weapon/fluff/zekewatch, -/obj/item/weapon/fluff/fidgetspinner/red, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"jau" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"jax" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"jbR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/random/maintenance/medical, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"jbZ" = ( -/obj/structure/closet/secure_closet/hydroponics{ - req_access = list(47) - }, -/obj/item/weapon/gun/energy/floragun, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"jcd" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jdj" = ( -/obj/structure/salvageable/autolathe, -/obj/effect/floor_decal/rust/color_rustedfull, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"jdk" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"jdx" = ( -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"jdM" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_nineteen, -/turf/simulated/floor/wood, -/area/template_noop) -"jea" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"jef" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jfi" = ( -/obj/machinery/light, -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jfk" = ( -/obj/machinery/vending/coffee{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"jfv" = ( -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"jfw" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"jgz" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"jhd" = ( -/obj/structure/table/standard, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/folder/white, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"jiy" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/closet/walllocker_double/survival/west, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jiR" = ( -/obj/item/seeds/random, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"jiS" = ( -/obj/machinery/vending/cigarette{ - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/weapon/storage/fancy/cigarettes=10,/obj/item/weapon/storage/box/matches=10,/obj/item/weapon/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jiZ" = ( -/obj/item/device/gps/computer{ - pixel_y = 0 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jjh" = ( -/obj/machinery/door/airlock/silver{ - name = "Restroom" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"jjq" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"jjs" = ( -/obj/structure/shuttle/engine/router, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/ScienceShip) -"jjA" = ( -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"jjP" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"jkj" = ( -/obj/structure/table/wooden_reinforced, -/obj/random/medical, -/obj/random/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"jkv" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"jkZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/obj/structure/largecrate/animal/cat, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jli" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"jlm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"jlq" = ( -/obj/structure/hull_corner/long_horiz{ - dir = 6 - }, -/turf/template_noop, -/area/template_noop) -"jlR" = ( -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"jmw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"jmZ" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain/black, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jnc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"jne" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/locked/phasegun/rifle{ - pixel_y = 3 - }, -/obj/item/weapon/gun/energy/locked/phasegun/rifle{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jnu" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"jnw" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/bee_pack, -/obj/item/bee_pack, -/obj/item/bee_smoker, -/obj/item/bee_smoker, -/obj/item/beehive_assembly, -/obj/item/beehive_assembly, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/device/analyzer/plant_analyzer, -/obj/item/device/analyzer/plant_analyzer, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/head/greenbandana, -/obj/item/clothing/head/greenbandana, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/tool/wirecutters/clippers/trimmers, -/obj/item/weapon/tool/wirecutters/clippers/trimmers, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/clothing/suit/storage/apron/overalls, -/obj/item/clothing/suit/storage/apron/overalls, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jnQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"jnT" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"joj" = ( -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jor" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/plating, -/area/template_noop) -"joy" = ( -/obj/structure/closet/walllocker_double/survival/north{ - dir = 1; - name = "Emergency Food Wall Cabinet"; - pixel_y = -32; - starts_with = list(/obj/item/weapon/storage/mre/menu11=20,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=20) - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"jpm" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/effect/floor_decal/spline/fancy{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"jpu" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/mirror{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"jpT" = ( -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/obj/machinery/bodyscanner{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jqm" = ( -/obj/structure/closet/crate, -/turf/template_noop, -/area/template_noop) -"jqx" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/mime, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jqZ" = ( -/obj/structure/closet/secure_closet/personal, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"jrD" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"jrQ" = ( -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/ScienceShip) -"jsc" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"jsw" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jtq" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/computer/skills{ - dir = 4 - }, -/obj/structure/table/darkglass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jtF" = ( -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"jtI" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jue" = ( -/obj/machinery/door/airlock/maintenance/sec{ - name = "Security Door"; - req_one_access = null - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"juK" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jvj" = ( -/obj/structure/table/woodentable, -/obj/random/cigarettes, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"jvl" = ( -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/item/weapon/storage/backpack/cultpack, -/obj/item/weapon/storage/backpack/cultpack, -/obj/structure/closet/cabinet, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"jvp" = ( -/obj/effect/gateway, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"jvP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"jvW" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"jww" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"jxl" = ( -/obj/item/weapon/storage/bag/trash, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"jyt" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"jyy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"jzc" = ( -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jzf" = ( -/obj/structure/salvageable/computer, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jzh" = ( -/obj/machinery/vending/medical{ - pixel_y = -32; - req_access = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jzI" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"jzN" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - icon_state = "map_vent_out"; - use_power = 1 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"jAI" = ( -/obj/structure/cult/talisman, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"jAZ" = ( -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"jBu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"jBA" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 8 - }, -/obj/machinery/light/floortube{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/structure/backup_implanter_ch{ - pixel_y = 4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/obj/item/device/toner{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"jBK" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jCp" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/survivalpod/superpose/Dinner) -"jCG" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"jCU" = ( -/obj/structure/bookcase/bookcart, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jDG" = ( -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jEm" = ( -/obj/random/trash, -/obj/random/trash, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"jEw" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jES" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"jFf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"jFk" = ( -/turf/simulated/floor/airless, -/area/survivalpod/superpose/CrashedInfestedShip) -"jFA" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/DemonPool) -"jFI" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"jFJ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"jFM" = ( -/obj/fire, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"jFN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = -21 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"jFQ" = ( -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/suit/space/void/atmos, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/void/atmos, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/window/westright{ - name = "Atmospherics Suits"; - req_access = list(24) - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/sign/warning/nosmoking_2{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jGk" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"jGS" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"jHn" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"jHI" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"jHQ" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"jHU" = ( -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"jHZ" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/rd, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jJt" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"jJG" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"jJI" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"jJR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jKf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"jKu" = ( -/obj/structure/cliff/automatic{ - dir = 5 - }, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/railing/grey{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"jKW" = ( -/obj/machinery/camera{ - c_tag = "Lobby North"; - network = list("Research") - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jLN" = ( -/obj/structure/ship_munition/disperser_charge/explosive, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"jLT" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"jMj" = ( -/obj/machinery/autolathe, -/obj/item/weapon/rcd/loaded{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/weapon/rcd_ammo, -/obj/item/weapon/rcd_ammo, -/turf/simulated/floor/plating, -/area/template_noop) -"jMn" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"jMp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"jME" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"jMP" = ( -/obj/machinery/chem_master, -/obj/effect/floor_decal/rust/color_rustedfull, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"jMW" = ( -/obj/machinery/appliance/cooker/fryer, -/obj/structure/window/reinforced/tinted, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"jNk" = ( -/obj/effect/wingrille_spawn/reinforced, -/obj/structure/barricade, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"jNU" = ( -/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/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jOt" = ( -/obj/structure/closet/jcloset, -/obj/item/weapon/soap/nanotrasen, -/obj/item/weapon/shovel, -/obj/fiftyspawner/steel, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/pickaxe/silver, -/obj/item/weapon/material/knife/machete/hatchet, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jPu" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_y = 5 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = 8; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jPN" = ( -/obj/structure/closet/secure_closet/bar{ - req_access = newlist() - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jPO" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"jQk" = ( -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"jRs" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"jRP" = ( -/obj/machinery/vending/coffee{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jRX" = ( -/obj/item/weapon/stool, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"jSd" = ( -/obj/structure/closet/secure_closet/hydroponics, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"jSe" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jSG" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"jTe" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"jTC" = ( -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/beerkeg, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jTF" = ( -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"jTN" = ( -/obj/effect/floor_decal/chapel{ - dir = 1; - pixel_y = -16 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"jTS" = ( -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"jUk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"jUq" = ( -/turf/simulated/floor/water/deep/pool, -/area/template_noop) -"jUA" = ( -/obj/item/weapon/shovel, -/obj/item/weapon/tool/wrench, -/obj/item/weapon/pickaxe, -/obj/item/weapon/tool/crowbar, -/obj/item/stack/flag/yellow{ - pixel_x = 4 - }, -/obj/item/stack/flag/red, -/obj/item/stack/flag/green{ - pixel_x = -4 - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/item/device/gps/mining{ - pixel_x = -5 - }, -/obj/item/device/gps/mining{ - pixel_x = 5 - }, -/obj/item/weapon/storage/belt/utility/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jUV" = ( -/obj/machinery/space_heater, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"jVg" = ( -/obj/structure/bed/nest, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"jVq" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"jVP" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"jWm" = ( -/obj/structure/bookcase/manuals/medical, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jWG" = ( -/obj/structure/bed/chair/sofa/right/black, -/turf/simulated/floor/wood, -/area/template_noop) -"jXb" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/closet/secure_closet/chemical{ - name = "FH chemical closet"; - req_access = null - }, -/obj/item/weapon/storage/box/syringes, -/obj/item/weapon/tool/screwdriver, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"jXc" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"jXi" = ( -/obj/item/organ/internal/liver, -/obj/random/trash, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"jXj" = ( -/obj/item/device/flashlight/lamp{ - pixel_x = -8; - pixel_y = 13 - }, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 - }, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"jXz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"jXE" = ( -/obj/structure/simple_door/wood, -/obj/structure/sign/graffiti/pisoff, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"jXU" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"jYe" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/largecrate/animal/cow, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jYo" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"jYs" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"jYG" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/survival_pod, -/obj/item/weapon/cat_box, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jYR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"jZE" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/clipboard, -/obj/item/toy/figure/bartender, -/obj/item/weapon/storage/fancy/cigar, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"jZQ" = ( -/obj/machinery/turretid/lethal{ - pixel_y = 28 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"kad" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/weapon/ore/diamond, -/obj/item/weapon/ore/gold, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/silver, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/clothing/head/sombrero, -/obj/item/clothing/head/sombrero, -/obj/item/clothing/suit/poncho, -/obj/item/clothing/accessory/poncho/thermal/red, -/obj/item/clothing/accessory/poncho/thermal/security, -/obj/item/clothing/accessory/poncho/thermal/green, -/obj/item/clothing/accessory/poncho/red, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/toy/bosunwhistle/fluff/strix, -/obj/item/weapon/blobcore_chunk, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"kag" = ( -/turf/template_noop, -/area/survivalpod/superpose/HellCave) -"kam" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/ce, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kaq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/power/thermoregulator/southerncross{ - pixel_y = 28 - }, -/obj/structure/cable, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"kaP" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"kaT" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"kaZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"kbH" = ( -/obj/structure/window/reinforced/full, -/obj/structure/grille/rustic, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"kbV" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"kco" = ( -/obj/structure/closet/cabinet, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/toolbox, -/obj/random/toolbox, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"kcy" = ( -/obj/item/device/flashlight/color/orange, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"kcX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"kdl" = ( -/obj/structure/flora/bboulder2, -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"kdw" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/wood, -/area/template_noop) -"kdA" = ( -/obj/effect/map_effect/interval/effect_emitter/smoke/fire, -/turf/simulated/floor/lava, -/area/template_noop) -"kdY" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"keG" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = -32 - }, -/turf/template_noop, -/area/template_noop) -"keY" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/walllocker_double/survival/north, -/turf/simulated/floor/carpet, -/area/template_noop) -"kfj" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"kfv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"kfH" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm/monitor{ - dir = 8; - locked = 0; - pixel_x = 23; - req_access = null - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"kgu" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"kgy" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/gear_dispenser/suit/ert{ - req_one_access = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"kgQ" = ( -/obj/item/device/flashlight/color/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"khi" = ( -/obj/item/clothing/suit/straight_jacket, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"kho" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"khr" = ( -/obj/structure/closet, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"khM" = ( -/obj/machinery/mecha_part_fabricator/pros{ - req_access = null - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kiq" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"kiD" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper_bin, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"kiX" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"kjc" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"kjH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kjR" = ( -/obj/item/ammo_magazine/s357{ - pixel_y = -9 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kke" = ( -/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"kkz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"kkC" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"kkK" = ( -/obj/structure/grille/rustic, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic, -/turf/simulated/floor/plating, -/area/template_noop) -"kkP" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"kkQ" = ( -/obj/machinery/shuttle_sensor, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/ScienceShip) -"kla" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/structure/prop/poicanister{ - icon_state = "orangeps-1" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"klq" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"klt" = ( -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"klv" = ( -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/southleft{ - req_access = null - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"klY" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"kmb" = ( -/obj/structure/fence/corner{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"kmg" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/mecha/working/ripley/mining/old, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kmp" = ( -/obj/machinery/mech_recharger, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/obj/mecha/medical/odysseus/old, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"kmz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"kmR" = ( -/obj/item/device/fbp_backup_cell, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"knc" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"knd" = ( -/obj/machinery/meter, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"knF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"knL" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"knV" = ( -/obj/machinery/vending/cigarette{ - categories = 3; - name = "hacked cigarette machine"; - prices = list() - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"koo" = ( -/obj/machinery/vending/cola{ - dir = 8; - pixel_x = 5 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"kos" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/loading, -/obj/structure/closet/secure_closet/medical_wall{ - name = "FH O- Blood Locker"; - pixel_x = -32; - req_access = list(300) - }, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"koN" = ( -/obj/structure/table/bench/glass, -/obj/structure/closet/walllocker_double/survival/west, -/obj/item/clothing/under/swimsuit/stripper/stripper_pink, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/turf/simulated/floor/wood, -/area/template_noop) -"koU" = ( -/obj/machinery/floodlight, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"kpk" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp{ - pixel_x = -8; - pixel_y = 13 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"kpI" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor, -/area/survivalpod/superpose/WoodenCamp) -"kqp" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"kqw" = ( -/obj/structure/bed/chair/sofa/corner/brown, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"kqH" = ( -/obj/structure/closet{ - name = "custodial" - }, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/mop, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kqI" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"krb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/machinery/light/poi, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"krd" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"kri" = ( -/obj/structure/bed/chair/sofa/right/brown, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"krk" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"krN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"krS" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/green, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"krT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"ksh" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"ksF" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"ksO" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = 21 - }, -/obj/machinery/reagentgrinder, -/obj/fiftyspawner/phoron, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"ksX" = ( -/obj/machinery/vending/snack{ - categories = 3; - dir = 8; - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"ktk" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"ktD" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"ktO" = ( -/obj/structure/table/rack/shelf, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"ktQ" = ( -/turf/template_noop, -/area/template_noop) -"ktU" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"kuy" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"kuz" = ( -/obj/structure/coatrack, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"kvg" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/piratedouble, -/turf/simulated/floor/wood, -/area/template_noop) -"kvl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kvG" = ( -/obj/machinery/shower{ - dir = 8; - pixel_x = -5 - }, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain/black, -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"kvK" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"kvN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"kwD" = ( -/obj/structure/table/wooden_reinforced, -/obj/structure/flora/pottedplant/smallcactus{ - pixel_y = 13 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"kxa" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 9; - pixel_y = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kxj" = ( -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"kyi" = ( -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"kyr" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kyw" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = null - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"kyE" = ( -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/obj/structure/table/rack/shelf, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"kyV" = ( -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"kzq" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"kzz" = ( -/obj/structure/fans{ - pixel_y = 32 - }, -/obj/machinery/vending/loadout/clothing, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kzL" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kAz" = ( -/obj/item/tape/medical{ - dir = 1; - icon_state = "tape_dir_0" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_dir_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"kAO" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"kAV" = ( -/obj/machinery/status_display{ - pixel_y = 32 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"kBL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"kCu" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"kDW" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/accessory/holster/hip, -/obj/item/clothing/accessory/holster/armpit, -/obj/item/clothing/accessory/holster/armpit, -/obj/item/clothing/accessory/holster/hip, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/webbing, -/obj/item/clothing/accessory/storage/webbing, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/scarf/white, -/obj/item/clothing/accessory/scarf/lightblue, -/obj/item/clothing/accessory/scarf/red, -/obj/item/clothing/accessory/scarf/purple, -/obj/item/clothing/accessory/armband/science, -/obj/item/clothing/accessory/armband/med, -/obj/item/clothing/accessory/armband/engine, -/obj/item/clothing/accessory/armband/cargo, -/obj/item/clothing/accessory/armband, -/obj/item/clothing/accessory/medal/nobel_science, -/obj/item/clothing/accessory/medal/silver, -/obj/item/clothing/accessory/medal/gold, -/obj/item/clothing/accessory/medal/bronze_heart, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kEc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"kEJ" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/computer/rdservercontrol{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kEY" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"kFn" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"kFw" = ( -/obj/structure/constructshell/cult, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"kFN" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"kFY" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kGs" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kGL" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"kGT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"kIy" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/pointdefense, -/turf/simulated/floor/cult, -/area/template_noop) -"kIX" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"kJe" = ( -/obj/item/device/flashlight/lantern, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"kJA" = ( -/obj/machinery/shipsensors/weak{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"kKO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/table/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"kLo" = ( -/obj/machinery/porta_turret/alien/destroyed, -/obj/effect/catwalk_plated/white, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"kLp" = ( -/obj/structure/closet/crate/freezer, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"kND" = ( -/turf/simulated/shuttle/wall/alien/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"kOn" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"kOC" = ( -/obj/structure/ore_box, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"kOI" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_y = 3 - }, -/obj/item/weapon/pen{ - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kPX" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"kQl" = ( -/obj/structure/cult/pylon, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kQv" = ( -/obj/structure/cult/pylon, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"kQW" = ( -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kQY" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"kRF" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"kSa" = ( -/obj/structure/cliff/automatic/ramp{ - dir = 9 - }, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"kSc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate/secure/loot, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kSj" = ( -/obj/effect/map_effect/interval/sound_emitter/punching, -/obj/effect/map_effect/interval/effect_emitter/smoke/fire, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"kSn" = ( -/obj/machinery/door/airlock/silver{ - name = "Toilet" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"kST" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"kTn" = ( -/obj/structure/constructshell/cult, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kTp" = ( -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"kUj" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"kUr" = ( -/obj/machinery/door/blast/angled_shutter{ - id = "death" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"kUE" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"kUL" = ( -/obj/structure/cryofeed{ - dir = 2 - }, -/obj/machinery/light/small/emergency, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"kVd" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"kVp" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kVL" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = -2 - }, -/obj/machinery/recharger{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/item/weapon/reagent_containers/food/drinks/jar{ - pixel_x = 10; - pixel_y = 12 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"kVP" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"kWn" = ( -/obj/machinery/newscaster{ - pixel_y = -30 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kWB" = ( -/obj/structure/table/rack/shelf, -/obj/machinery/light{ - layer = 3 - }, -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kWI" = ( -/mob/living/simple_mob/vore/aggressive/panther, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"kWR" = ( -/obj/item/weapon/material/fishing_rod/modern/strong, -/turf/simulated/floor/outdoors/rocks, -/area/survivalpod/superpose/Farm) -"kXk" = ( -/obj/structure/undies_wardrobe{ - anchored = 1 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = -21 - }, -/turf/simulated/floor/lino, -/area/survivalpod) -"kXw" = ( -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"kXJ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/blue{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kXY" = ( -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"kYa" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/lino, -/area/survivalpod) -"kYt" = ( -/obj/structure/barricade, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"kYy" = ( -/obj/machinery/power/smes/batteryrack, -/turf/simulated/floor/plating, -/area/template_noop) -"kYH" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"kYZ" = ( -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"kZh" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 4; - pixel_x = -3 - }, -/turf/template_noop, -/area/template_noop) -"kZx" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra{ - pixel_y = 5 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kZC" = ( -/obj/item/weapon/book/manual/barman_recipes, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/reagent_containers/glass/rag, -/obj/structure/table/gamblingtable, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kZI" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"kZU" = ( -/turf/simulated/floor/outdoors/rocks, -/area/survivalpod/superpose/Farm) -"lar" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"laC" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod/superpose/LoneHome) -"lbc" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/cult, -/area/template_noop) -"lbl" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/glasses/square{ - pixel_y = -2 - }, -/obj/item/weapon/storage/box/glass_extras/sticks{ - pixel_y = 4 - }, -/obj/item/weapon/storage/box/glass_extras/straws{ - pixel_y = 7 - }, -/obj/item/weapon/packageWrap, -/obj/structure/curtain/open/bed, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/storage/box/condimentbottles, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/teapot{ - pixel_y = 7 - }, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lbA" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"lbP" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ - id = "wolfsnake"; - name = "Wolfgirl and Lamia"; - pixel_x = 6; - pixel_y = 2 - }, -/obj/machinery/button/remote/blast_door{ - id = "lizard"; - name = "Lizardman"; - pixel_x = -6; - pixel_y = 2 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"lcu" = ( -/obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"lcC" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue, -/area/survivalpod) -"lcD" = ( -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"lcH" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"lde" = ( -/obj/structure/sign/deathsposal{ - desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; - name = "\improper DISPOSAL: LEADS TO EXTERIOR"; - pixel_y = 32 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"ldw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"ldx" = ( -/obj/structure/table/survival_pod, -/obj/structure/closet/walllocker_double/survival/west, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"ldS" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/tape_roll, -/obj/item/sticky_pad/random, -/obj/item/weapon/pen/blue, -/obj/item/weapon/pen/blue, -/obj/item/fulton_core, -/obj/item/fulton_core, -/obj/item/extraction_pack, -/obj/item/extraction_pack, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/item/weapon/pickaxe/hand, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/flashlight/color/orange, -/obj/item/device/threadneedle, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/device/flashlight/lantern, -/obj/random/soap, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/stack/nanopaste, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/stack/marker_beacon/ten, -/obj/item/device/starcaster_news, -/obj/item/device/mapping_unit, -/obj/item/weapon/storage/box/dosimeter, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/device/pda, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/accessory/permit/gun, -/obj/item/clothing/accessory/permit/gun, -/obj/item/weapon/material/knife/machete, -/obj/item/weapon/material/fishing_net, -/obj/item/weapon/storage/backpack/sport, -/obj/item/weapon/storage/backpack/sport, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/storage/belt, -/obj/item/clothing/accessory/poncho/thermal, -/turf/simulated/floor/plating, -/area/template_noop) -"lea" = ( -/obj/item/weapon/card/id/external, -/turf/template_noop, -/area/template_noop) -"les" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lfZ" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "Field Hospital General Storage" - }, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/radio/emergency, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/device/binoculars, -/obj/item/device/perfect_tele, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/device/denecrotizer/medical, -/obj/item/device/denecrotizer/medical, -/obj/machinery/light/floortube{ - dir = 1 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 9 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"lge" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lgp" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"lgq" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"lgy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/rdconsole/core{ - dir = 8; - id = 300; - req_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"lgM" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"lhe" = ( -/obj/item/weapon/storage/pill_bottle/antitox, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"lhg" = ( -/obj/effect/floor_decal/industrial/danger{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"lhs" = ( -/obj/machinery/atmospheric_field_generator/perma/underdoors, -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"lhA" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"lhY" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"liz" = ( -/obj/structure/table/standard, -/obj/random/tool, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"liO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"liR" = ( -/obj/item/device/radio, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"ljl" = ( -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"ljo" = ( -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"ljG" = ( -/obj/structure/table/reinforced, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"lkn" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"lkp" = ( -/obj/machinery/autolathe, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"lkG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bookcase, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lkR" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lkW" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"llP" = ( -/obj/effect/floor_decal/industrial/warning/cee, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"llZ" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"lma" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/template_noop, -/area/template_noop) -"lmg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lmI" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"lng" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/template_noop) -"lnm" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lnr" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/storage/belt/utility, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/device/healthanalyzer, -/obj/item/device/healthanalyzer, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/storage/backpack/dufflebag/sci, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lnv" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"lnx" = ( -/obj/item/device/tape, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"lnD" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"lod" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/HydroCave) -"lop" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"los" = ( -/obj/structure/closet/crate/secure/science{ - icon_state = "scisecurecrateopen"; - locked = 0; - name = "Virus Samples - FRAGILE"; - opened = 1 - }, -/obj/item/weapon/virusdish/random, -/obj/item/weapon/virusdish/random, -/obj/item/weapon/virusdish/random, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"loD" = ( -/obj/item/weapon/pen/blue, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"loQ" = ( -/obj/machinery/smartfridge/drying_rack, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"lpo" = ( -/obj/effect/floor_decal/chapel{ - pixel_y = -16 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"lqf" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating, -/area/template_noop) -"lqg" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/east{ - name = "Survival Cabinet" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/WoodenCamp) -"lqk" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/cult, -/area/template_noop) -"lqm" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/template_noop) -"lrg" = ( -/obj/machinery/vending/blood{ - categories = 3; - name = "hacked Blood-Onator"; - req_access = list(300) - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"lrs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/port_gen/pacman, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"lsg" = ( -/obj/machinery/door/airlock/maintenance/medical{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"lsH" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"lsL" = ( -/obj/structure/barricade, -/obj/effect/floor_decal/steeldecal/steel_decals_central5, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"ltd" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"ltK" = ( -/obj/machinery/vending/blood, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"ltL" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"ltN" = ( -/obj/structure/table/bench/marble, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ltT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"luV" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"lvv" = ( -/obj/structure/bed/chair, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"lvA" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"lvT" = ( -/obj/machinery/door/window/northright{ - name = "Server Room"; - req_access = null - }, -/obj/machinery/door/window/southleft{ - name = "Server Room"; - req_access = null - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"lwb" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"lwG" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_y = -32 - }, -/obj/machinery/biogenerator, -/obj/machinery/light/floortube, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"lwH" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/captain, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"lxb" = ( -/obj/random/paicard, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"lxQ" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/WoodenCamp) -"lxX" = ( -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/deck/cards{ - pixel_y = 5; - pixel_x = -4 - }, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/carpet, -/area/template_noop) -"lyl" = ( -/obj/structure/table/wooden_reinforced, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"lyR" = ( -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"lze" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"lzq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"lzA" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"lzY" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/purple/border, -/obj/machinery/newscaster{ - pixel_y = -29 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"lAl" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"lAt" = ( -/obj/random/maintenance/medical, -/turf/simulated/shuttle/floor/white, -/area/template_noop) -"lAF" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"lAS" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"lBe" = ( -/obj/structure/table/hardwoodtable, -/obj/structure/stripper_pole{ - pixel_y = 9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/item/clothing/under/fluff/latexmaid{ - pixel_y = 7; - pixel_x = -8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"lBh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/random/maintenance/engineering, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"lBN" = ( -/obj/structure/ore_box, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"lCl" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"lCq" = ( -/obj/machinery/alarm/monitor{ - dir = 8; - locked = 0; - pixel_x = 23; - req_access = null - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"lCr" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"lCN" = ( -/turf/simulated/floor/greengrid/nitrogen, -/area/template_noop) -"lCO" = ( -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"lCX" = ( -/obj/structure/table/woodentable, -/obj/item/trash/candle, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lDi" = ( -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"lDn" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/internals, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"lDo" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"lDu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"lDx" = ( -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"lDV" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"lEh" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"lEL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/mech_recharger, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"lFp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"lFH" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lGp" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lGv" = ( -/obj/structure/frame/computer, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lGy" = ( -/obj/item/weapon/storage/backpack/messenger, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"lGL" = ( -/obj/structure/closet/l3closet/virology, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"lHd" = ( -/obj/structure/table/woodentable, -/obj/item/trash/tray, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lHe" = ( -/obj/item/stack/cable_coil/green, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"lHg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lHo" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"lHE" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"lIc" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"lIi" = ( -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"lIp" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"lIr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"lIQ" = ( -/obj/vehicle/train/trolley{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"lJa" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"lJj" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"lJk" = ( -/obj/random/junk, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"lJD" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"lKg" = ( -/obj/machinery/vending/assist{ - contraband = null; - name = "Old Vending Machine"; - products = list(/obj/item/device/assembly/prox_sensor=5,/obj/item/device/assembly/signaler=4,/obj/item/device/assembly/infra=4,/obj/item/device/assembly/prox_sensor=4,/obj/item/weapon/handcuffs=8,/obj/item/device/flash=4,/obj/item/weapon/cartridge/signal=4,/obj/item/clothing/glasses/sunglasses=4) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lKL" = ( -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"lKV" = ( -/obj/random/soap, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"lLn" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lLq" = ( -/obj/structure/bed/double/padded, -/obj/structure/curtain/bed, -/obj/item/weapon/bedsheet/hosdouble, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"lLH" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/fire, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"lMe" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 4 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = 21 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"lMg" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"lMj" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"lMq" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lMR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"lMY" = ( -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/glass, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"lNf" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"lNk" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lNF" = ( -/obj/machinery/vending/tool{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lNO" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"lOe" = ( -/obj/structure/cliff/automatic, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"lOp" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"lOr" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/characters, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"lPt" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"lQx" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1; - regulate_mode = 0; - unlocked = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"lQz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "estrella_pump" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"lQY" = ( -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/template_noop, -/area/template_noop) -"lRK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"lSb" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_x = 1; - pixel_y = 17 - }, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"lSN" = ( -/obj/machinery/button{ - dir = 4; - name = "Cargo Access" - }, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"lTq" = ( -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"lTG" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"lTH" = ( -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"lTO" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "glcafe" - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"lTP" = ( -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Dinner) -"lUl" = ( -/obj/structure/table/rack/shelf, -/obj/item/weapon/SWF_uplink, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"lUH" = ( -/obj/machinery/shipsensors{ - dir = 8 - }, -/turf/simulated/floor/redgrid/off, -/area/template_noop) -"lUW" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"lVf" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools{ - pixel_y = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"lVq" = ( -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"lVr" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospheric_field_generator/perma/underdoors, -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"lVt" = ( -/obj/structure/closet/crate, -/obj/random/cash, -/obj/random/cigarettes, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lVL" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"lWU" = ( -/obj/fire, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"lXb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"lXs" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"lXG" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2"; - tag = "icon-pipe-j1 (WEST)" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"lXK" = ( -/obj/structure/salvageable/console_os{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/ScienceShip) -"lYA" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"lYN" = ( -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"lZv" = ( -/obj/machinery/iv_drip, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lZH" = ( -/obj/item/stack/material/algae{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"mak" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"maA" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"maL" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 4; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "hrshutt" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"maR" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/ammo, -/obj/random/cigarettes, -/obj/random/contraband, -/obj/random/junk, -/obj/random/maintenance/security, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"mbc" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/random/mre, -/obj/item/weapon/material/kitchen/utensil/fork{ - pixel_x = 12 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"mbh" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"mbp" = ( -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"mbP" = ( -/obj/machinery/light/small, -/obj/machinery/alarm/monitor{ - dir = 1; - locked = 0; - pixel_y = -23; - req_access = null - }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"mco" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/redgrid/animated, -/area/template_noop) -"mdk" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/purple, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"mdn" = ( -/obj/structure/bookcase{ - name = "bookcase (Reference)" - }, -/obj/item/weapon/book/codex/lore/robutt, -/obj/item/weapon/book/bundle/custom_library/fiction/metalglen, -/obj/item/weapon/book/bundle/custom_library/fiction/silence, -/obj/item/weapon/book/bundle/custom_library/fiction/taleoftherainbowcat, -/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism, -/turf/simulated/floor/wood, -/area/template_noop) -"mdt" = ( -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"mep" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"mer" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/hand_labeler{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"mff" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mfl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/largecrate/hoverpod, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mfN" = ( -/obj/structure/closet/secure_closet/freezer/kitchen{ - locked = 0 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"mfR" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4; - icon_state = "heater" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"mfZ" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"mga" = ( -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"mgk" = ( -/obj/structure/hull_corner{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"mgw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 9 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"mgD" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"mhe" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"mhg" = ( -/obj/machinery/vending/engivend{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mhA" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"mhY" = ( -/obj/machinery/bookbinder, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"mip" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mit" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"miz" = ( -/obj/structure/bonfire/sifwood, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"miF" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"miK" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"miN" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/turf/simulated/floor/redgrid/animated, -/area/survivalpod/superpose/CultShip) -"miS" = ( -/obj/machinery/door/airlock/glass_external, -/obj/machinery/door/firedoor, -/turf/simulated/shuttle/plating, -/area/template_noop) -"mjd" = ( -/obj/item/weapon/pickaxe/drill, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"mjk" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/under/suit_jacket/red, -/obj/item/clothing/shoes/dress{ - pixel_y = -9 - }, -/obj/item/clothing/mask/goblin, -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"mjJ" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"mjX" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"mlp" = ( -/obj/machinery/vending/snack, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"mlI" = ( -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"mlT" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"mml" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/sharpeningkit, -/obj/item/weapon/reagent_containers/dropper, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"mmu" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"mmK" = ( -/obj/fire, -/turf/simulated/floor/airless, -/area/survivalpod/superpose/CrashedInfestedShip) -"mmX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - dir = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue, -/area/survivalpod) -"mnz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"mnC" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/lightorange/border, -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/full, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"mnQ" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"mnT" = ( -/obj/structure/prop/poicanister{ - icon_state = "orangeps-1" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"mov" = ( -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"mow" = ( -/obj/machinery/vending/cigarette{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"moO" = ( -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"moS" = ( -/obj/structure/fence/corner{ - dir = 6 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"mpb" = ( -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mpq" = ( -/obj/machinery/suit_cycler/syndicate, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mpM" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"mqR" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/flame/lighter/random{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/weapon/flame/lighter/random, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"mqS" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"mrl" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"mrx" = ( -/obj/structure/salvageable/console_broken_os{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"mrI" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"mso" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/machinery/scale, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"mss" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"msN" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"msR" = ( -/obj/structure/simple_door/cult, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"mtx" = ( -/obj/machinery/r_n_d/server/core, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"mtA" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"mtI" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/pointdefense, -/turf/simulated/floor/cult, -/area/template_noop) -"muj" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/blue{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"muV" = ( -/obj/fire, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"muY" = ( -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"mvC" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/multi_tile/two_tile_hor{ - id = "xrlock" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"mvU" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/weapon/stool/baystool/padded{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"mwq" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mwW" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"mxr" = ( -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"mxJ" = ( -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"mxM" = ( -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"mxZ" = ( -/turf/simulated/floor/redgrid/animated, -/area/survivalpod/superpose/CultShip) -"myb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"myq" = ( -/obj/machinery/shower, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"mzh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"mzj" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 9 - }, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"mAF" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "food storage" - }, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"mCq" = ( -/obj/structure/sink/kitchen{ - dir = 4; - pixel_x = 13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"mCt" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"mCB" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"mDE" = ( -/obj/machinery/vending/fitness, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"mDH" = ( -/obj/structure/prop/blackbox/xenofrigate, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"mDX" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"mEi" = ( -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/ScienceShip) -"mEk" = ( -/obj/structure/toilet/prison{ - name = "toilet"; - pixel_y = 10 - }, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 4 - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0; - dir = 2 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"mFa" = ( -/obj/structure/inflatable, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"mFk" = ( -/obj/machinery/vending/hotfood, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"mFm" = ( -/obj/structure/table/alien, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"mFy" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp{ - pixel_x = 4; - pixel_y = 8 - }, -/turf/simulated/floor/lino, -/area/survivalpod) -"mGD" = ( -/obj/structure/constructshell/cult, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"mGP" = ( -/obj/machinery/mining/drill/loaded, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"mHY" = ( -/obj/structure/table/fancyblack, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"mIh" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mIi" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"mIs" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"mJe" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"mJy" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"mKO" = ( -/obj/structure/toilet/prison{ - name = "toilet"; - pixel_y = 10 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/cult, -/area/template_noop) -"mLi" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"mLn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"mLJ" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 4; - req_access = null - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"mLW" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "hrshutt"; - name = "HydroResearch Shutters"; - pixel_x = -31 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"mMk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet/secure_closet{ - desc = "It's a secure locker for personnel. The first card swiped gains control."; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective"; - locked = 0; - name = "personal closet"; - req_access_txt = "201" - }, -/obj/item/clothing/under/pj/blue, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"mML" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"mMV" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"mMX" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"mNb" = ( -/obj/structure/table/bench/wooden, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"mNm" = ( -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"mNs" = ( -/obj/machinery/door/airlock/glass_medical/polarized{ - hackProof = 1; - id_tag = "Teshnomancer_Private_doors"; - id_tint = "tesh_private_tint"; - maxhealth = 8000000000; - name = "Electrochromic Airlock"; - normalspeed = 0; - req_one_access = list(300); - secured_wires = 1 - }, -/obj/machinery/door/blast/puzzle{ - desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors. Seems a little excessive for a privacy shutter..."; - id = "Teshnomancer_Private_blastdoors"; - name = "Privacy blast door" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"mNw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"mNH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"mNN" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/floor/lava, -/area/template_noop) -"mOn" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/green, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"mOo" = ( -/obj/structure/disposalpipe/junction, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"mOB" = ( -/obj/structure/hull_corner{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"mOK" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"mON" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 8 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"mOO" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"mOW" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/effect/floor_decal/spline/fancy{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"mPa" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"mPj" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"mPt" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"mPX" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - id_tag = null - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 4; - frequency = 1331; - id_tag = "trade2_control"; - pixel_x = -25; - req_access = list(150); - tag_airpump = null; - tag_chamber_sensor = null; - tag_exterior_door = null; - tag_interior_door = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mQh" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"mQj" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mQJ" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"mQR" = ( -/mob/living/simple_mob/vore/aggressive/lizardman, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"mQU" = ( -/obj/item/weapon/circuitboard/microwave, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"mRN" = ( -/obj/machinery/button/remote/airlock{ - id = "Teshnomancer_Private_doors"; - name = "Open Privacy doors"; - pixel_y = 24; - req_one_access = list(300) - }, -/obj/machinery/button/remote/airlock{ - id = "Teshnomancer_Private_doors"; - name = "Bolt Privacy doors"; - pixel_y = 38; - req_one_access = list(300); - specialfunctions = 4 - }, -/obj/machinery/button/windowtint/doortint{ - id = "tesh_private_tint"; - name = "privacy tint control"; - pixel_x = -10; - pixel_y = 32; - req_one_access = list(300) - }, -/turf/simulated/floor/wood, -/area/survivalpod) -"mSt" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/template_noop) -"mSR" = ( -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"mSZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"mTh" = ( -/obj/effect/mist, -/obj/machinery/light, -/turf/simulated/floor/water/pool, -/area/template_noop) -"mTt" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"mTK" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"mUd" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"mUk" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"mUq" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"mUF" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"mUG" = ( -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"mUV" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"mUW" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/plating, -/area/template_noop) -"mVr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"mVN" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sauna" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sauna" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Sauna" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"mVT" = ( -/obj/machinery/vending/snack{ - dir = 4; - pixel_x = -6 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"mWP" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/deck/cards, -/obj/machinery/computer/security/telescreen/entertainment{ - layer = 4; - pixel_y = -32 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"mXK" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"mYw" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"mYG" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"mYP" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mZP" = ( -/obj/machinery/porta_turret/alien/destroyed, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"nac" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"nah" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - dir = 4; - frequency = 1380; - id_tag = "trade_shuttle"; - pixel_x = -25; - req_one_access = list(101); - tag_door = "trade_shuttle_hatch" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nav" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"naJ" = ( -/turf/simulated/floor/lava/outdoors, -/area/survivalpod/superpose/DemonPool) -"naL" = ( -/obj/structure/hull_corner{ - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"naM" = ( -/obj/structure/bed/chair/oldsofa/left, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"nbf" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "estrella_back_hatch"; - locked = 1; - req_one_access = null - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"nbt" = ( -/obj/machinery/mecha_part_fabricator/pros, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"nbF" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"nbR" = ( -/obj/structure/bonfire/sifwood, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/WoodenCamp) -"ndv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"ndw" = ( -/obj/structure/window/reinforced/full, -/obj/structure/grille/rustic, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"ndN" = ( -/obj/fire, -/turf/simulated/wall/cult, -/area/survivalpod/superpose/HellCave) -"neD" = ( -/obj/structure/sign/kiddieplaque{ - desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; - name = "\improper Sif Department of Disease Control notice" - }, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"nfn" = ( -/obj/structure/table/steel, -/obj/item/clothing/suit/bio_suit, -/obj/random/medical/lite, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"nfs" = ( -/obj/machinery/button/remote/blast_door{ - id = "tradeportshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nfR" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"nfX" = ( -/obj/item/weapon/storage/backpack/dufflebag/eng, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"ngn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = -6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"ngw" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"ngx" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ngD" = ( -/turf/simulated/floor/cult{ - icon_state = "cult-narsie" - }, -/area/survivalpod/superpose/DemonPool) -"ngR" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"ngS" = ( -/obj/structure/sign/flag/pirate{ - pixel_y = 29 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_external, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"nhe" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"nhv" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"nhB" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"nhE" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"nhQ" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"nhW" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"niA" = ( -/obj/structure/table/gamblingtable, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"njx" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"njF" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"nkc" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/bluetomatoseed, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"nko" = ( -/obj/machinery/pointdefense, -/turf/simulated/floor/plating, -/area/template_noop) -"nkT" = ( -/obj/fire, -/turf/simulated/floor/lava/outdoors, -/area/survivalpod/superpose/DemonPool) -"nlB" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nmo" = ( -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"nmJ" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"nmX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"nni" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"nnp" = ( -/obj/effect/decal/remains/xeno, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"nnI" = ( -/obj/item/weapon/material/knife/machete/hatchet, -/turf/template_noop, -/area/template_noop) -"nnR" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/wood, -/area/survivalpod) -"now" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"noD" = ( -/obj/structure/table/reinforced, -/obj/structure/closet/crate/carp{ - desc = "All you need to start your own honey farm."; - name = "Beekeeping crate"; - starts_with = list(/obj/item/beehive_assembly=5,/obj/item/bee_smoker,/obj/item/honey_frame=25,/obj/item/bee_pack=5) - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"npj" = ( -/obj/machinery/r_n_d/server/robotics, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"nqx" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/microwave, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"nqN" = ( -/obj/machinery/mecha_part_fabricator/pros{ - req_access = list(300) - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"nqZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"nrh" = ( -/obj/machinery/button/holosign{ - id = "SP-baropen"; - name = "Open Sign"; - pixel_x = -27; - pixel_y = 5 - }, -/obj/machinery/button/remote/blast_door{ - id = "SP-kitchen"; - name = "Kitchen Shutters Control"; - pixel_x = -27; - pixel_y = -5; - req_access = list(28) - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"nrR" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"nsj" = ( -/obj/machinery/door/airlock/maintenance/cargo, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"nsn" = ( -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"nsL" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"nsP" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_twentythree, -/turf/simulated/floor/wood, -/area/template_noop) -"nuh" = ( -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"nuq" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nux" = ( -/obj/item/weapon/storage/box/donut{ - pixel_x = 3; - pixel_y = -4 - }, -/obj/structure/table/marble, -/obj/item/weapon/storage/box/donut{ - pixel_x = 3; - pixel_y = 11 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"nvt" = ( -/obj/fire, -/turf/template_noop, -/area/template_noop) -"nvB" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"nvS" = ( -/obj/effect/floor_decal/techfloor, -/obj/random/maintenance/engineering, -/obj/random/maintenance/clean, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"nwb" = ( -/obj/item/trash/sosjerky, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"nwf" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"nwD" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"nwS" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nxf" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"nxm" = ( -/obj/vehicle/train/engine, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nxC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"nxL" = ( -/obj/fire, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"nxV" = ( -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"nxX" = ( -/obj/structure/urinal{ - dir = 4; - pixel_y = 0; - pixel_x = -31 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"nyP" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/storage/box/matches{ - pixel_x = -4; - pixel_y = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"nza" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"nzB" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"nAh" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"nAj" = ( -/obj/item/weapon/module/card_reader, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"nAq" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"nAY" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"nBO" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MethLab) -"nBP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Security Checkpoint Maintenance"; - req_access_txt = "201"; - req_one_access_txt = "0" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nCk" = ( -/turf/template_noop, -/area/survivalpod/superpose/FieldLab) -"nCo" = ( -/obj/machinery/porta_turret/alien/destroyed, -/obj/effect/catwalk_plated/white, -/turf/simulated/floor/cult, -/area/template_noop) -"nCw" = ( -/obj/machinery/door/airlock/maintenance/common, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"nCC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance/sec, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/MethLab) -"nCN" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 7 - }, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"nDi" = ( -/obj/machinery/door/blast/angled_shutter{ - id = "lizard" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"nDv" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Dorm" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"nDz" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"nDT" = ( -/obj/structure/table/steel, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"nEd" = ( -/obj/machinery/door/airlock/freezer, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"nEf" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"nEs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/ScienceShip) -"nEv" = ( -/obj/machinery/button/remote/blast_door{ - id = "SP-Cell"; - name = "Cell Door"; - pixel_x = 6; - pixel_y = -33; - req_one_access = list(2,4) - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = -24; - req_access = list(2,4) - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"nEE" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastright{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"nEP" = ( -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "SP-Cell2"; - name = "Cell Door"; - pixel_x = -25; - pixel_y = 8; - req_one_access = list(2,4) - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = 26; - req_access = list(2,4) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"nEQ" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/flora/pottedplant{ - icon_state = "plant-09"; - name = "Esteban"; - pixel_y = 8 - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nFj" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"nFm" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"nFT" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 7 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"nGx" = ( -/obj/effect/floor_decal/emblem/black, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"nGS" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"nHe" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nHC" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nHJ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/microwave{ - pixel_x = -4; - pixel_y = 17 - }, -/obj/structure/table/steel{ - pixel_x = -4 - }, -/obj/item/weapon/storage/box/donkpockets{ - pixel_y = -3; - pixel_x = -7 - }, -/obj/item/weapon/storage/box/donkpockets{ - pixel_y = -3; - pixel_x = 7 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"nHK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"nIc" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/folder/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/weapon/pen/red, -/obj/item/weapon/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"nIk" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"nIo" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/item/weapon/dice/d20, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/carpet, -/area/template_noop) -"nIx" = ( -/obj/structure/flora/pottedplant/large, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nJH" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/bed, -/obj/item/weapon/bedsheet/mime, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"nJR" = ( -/obj/item/weapon/stool/baystool/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"nJX" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nJY" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/west{ - name = "Survival Cabinet" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/WoodenCamp) -"nKk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/floortube/flicker{ - pixel_y = -3 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"nKt" = ( -/obj/structure/hull_corner/long_horiz{ - dir = 9 - }, -/turf/template_noop, -/area/template_noop) -"nKw" = ( -/obj/item/weapon/reagent_containers/dropper, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"nKJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nLb" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/device/sleevemate, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"nLk" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"nLQ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Dinner) -"nMu" = ( -/obj/screen/alert/highpressure, -/obj/machinery/computer/rdconsole/core{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"nNa" = ( -/obj/effect/decal/remains/deer, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"nNj" = ( -/obj/structure/sign/warning, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"nNp" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nNs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"nNO" = ( -/obj/structure/grille/cult, -/obj/structure/bonfire/permanent, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"nNR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"nOo" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"nOM" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/red, -/turf/simulated/floor/wood, -/area/template_noop) -"nPb" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"nPH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"nRd" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"nRD" = ( -/obj/item/weapon/circuitboard/airalarm, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"nRS" = ( -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"nRY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/table/reinforced, -/obj/machinery/camera{ - c_tag = "Medical Bay"; - dir = 1; - network = list("Research") - }, -/obj/item/device/radio/emergency, -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"nSp" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"nSO" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/shoes/dress{ - pixel_y = -9 - }, -/obj/item/clothing/mask/fluff/lucerna_1, -/obj/structure/curtain/black, -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"nTD" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"nTX" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/sleep_console, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"nUo" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/hos, -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nVb" = ( -/obj/structure/cliff/automatic/corner{ - dir = 6 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"nVf" = ( -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"nWH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nXT" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"nYn" = ( -/obj/item/weapon/melee/cultblade, -/obj/structure/table/fancyblack, -/obj/item/device/soulstone, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"nYr" = ( -/obj/structure/toilet{ - dir = 8; - pixel_x = 9 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/ScienceShip) -"nYL" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"nZb" = ( -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, -/obj/machinery/vending/wallmed1{ - dir = 8; - pixel_x = 22; - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"nZe" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"nZi" = ( -/obj/item/weapon/material/minihoe, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"nZr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/random/maintenance/engineering, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"oaL" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"obA" = ( -/obj/structure/closet/secure_closet/hydroponics{ - req_access = list(47) - }, -/obj/item/weapon/gun/energy/floragun, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"obI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"obU" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"obV" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"obZ" = ( -/obj/machinery/power/thermoregulator/southerncross{ - dir = 4; - pixel_x = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/lino, -/area/survivalpod) -"ocb" = ( -/obj/item/weapon/tool/crowbar/red, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ocd" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"ocj" = ( -/obj/vehicle/train/trolley, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ocl" = ( -/obj/structure/table/alien/blue, -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 5 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"ocu" = ( -/turf/simulated/wall, -/area/survivalpod/superpose/Dinner) -"ocz" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - emagged = 1; - hacked = 1; - name = "Unlocked Autolathe" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"odd" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 1 - }, -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"odl" = ( -/obj/structure/hull_corner{ - dir = 8 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"oea" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/ScienceShip) -"oef" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"oeH" = ( -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"oeZ" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"ofF" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"ofU" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"ogd" = ( -/obj/structure/fence, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"ogf" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"ogy" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"ogJ" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"ohG" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ohI" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/flame/lighter/random{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/weapon/flame/lighter/random, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"oiw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; - name = "Stained sheet of paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"oiD" = ( -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"oiN" = ( -/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, -/obj/structure/curtain/black, -/obj/structure/barricade/planks, -/turf/simulated/floor/plating, -/area/template_noop) -"ojc" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/fire{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"oji" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/machinery/body_scanconsole, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"okz" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"okH" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"okM" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning, -/obj/item/device/kit/paint/gygax/darkgygax, -/obj/item/device/kit/paint/gygax/recitence, -/obj/item/device/kit/paint/durand, -/obj/item/device/kit/paint/durand/phazon, -/obj/item/device/kit/paint/durand/seraph, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"olq" = ( -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/Dinner) -"olR" = ( -/obj/structure/railing/grey{ - dir = 1; - health = 8000000000; - maxhealth = 8000000000; - name = "durable grey railing" - }, -/obj/machinery/autolathe{ - hacked = 1; - name = "unlocked autolathe" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"oml" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"omA" = ( -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/head/soft/solgov/veteranhat, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"omY" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/obj/structure/prop/poicanister{ - icon_state = "orangeps-1" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"oni" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/survival/west{ - dir = 2; - pixel_x = 0; - pixel_y = 32 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"onS" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio{ - anchored = 1; - canhear_range = 1; - frequency = 1487; - icon = 'icons/obj/items.dmi'; - icon_state = "red_phone"; - name = "Reception Emergency Phone" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"ooD" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy{ - dir = 5 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"ooR" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 1; - icon_state = "pdoor0"; - id = "shelterblast"; - name = "Shelter Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"opQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 30 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"oqd" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/device/flashlight, -/obj/item/weapon/storage/belt/utility/full/multitool, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/weapon/module/power_control, -/obj/item/weapon/module/cell_power, -/obj/item/weapon/module/card_reader, -/obj/item/weapon/module/id_auth, -/obj/item/weapon/storage/firstaid/regular, -/turf/simulated/floor/plating, -/area/template_noop) -"oqm" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/machinery/button/remote/airlock{ - dir = 8; - id = "frontgate"; - name = "Door Lock"; - pixel_x = 27; - pixel_y = 6; - specialfunctions = 4 - }, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "checkshutt"; - name = "Checkpoint Shutters"; - pixel_x = 27; - pixel_y = -6 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"oqM" = ( -/obj/fire, -/turf/simulated/floor, -/area/template_noop) -"oqN" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LoneHome) -"oqX" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"orl" = ( -/obj/structure/prop/alien/computer{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ory" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"orH" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"orZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/machinery/access_button{ - dir = 1; - master_tag = null; - pixel_x = -27; - pixel_y = 7; - req_one_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"osB" = ( -/obj/machinery/mecha_part_fabricator, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"otf" = ( -/obj/machinery/camera{ - c_tag = "BioResearch West"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"otF" = ( -/obj/machinery/vending/security{ - pixel_x = 3; - pixel_y = -1; - req_access = null; - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"oul" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/clipboard, -/obj/item/weapon/folder/white, -/obj/item/weapon/pen, -/obj/item/weapon/reagent_containers/dropper{ - pixel_y = -4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ouU" = ( -/obj/structure/sink{ - dir = 1; - pixel_y = -9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"ovi" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/wood, -/area/template_noop) -"ovj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"ovB" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/washing_machine, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"owd" = ( -/obj/structure/salvageable/console_broken_os{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"owp" = ( -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"owJ" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"owQ" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"owS" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/ian, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"owV" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"oxy" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"oxz" = ( -/obj/structure/bed/double/padded, -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/obj/item/weapon/bedsheet/rainbowdouble, -/turf/simulated/floor/carpet/turcarpet, -/area/survivalpod/superpose/ScienceShip) -"oxD" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"oyg" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/gloves/sterile/latex, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"oyy" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"oyS" = ( -/obj/item/weapon/material/knife/ritual, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"ozy" = ( -/obj/structure/toilet{ - pixel_y = 12 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/ScienceShip) -"ozA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"ozF" = ( -/obj/machinery/computer, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"ozP" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"ozT" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/redgrid, -/area/template_noop) -"oAs" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"oAI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"oAJ" = ( -/obj/structure/table/standard, -/obj/item/device/multitool, -/obj/item/clothing/glasses/welding, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"oAR" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/CrashedInfestedShip) -"oBW" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"oCA" = ( -/obj/machinery/computer/security/abductor{ - icon_screen = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"oCM" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"oCX" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"oCY" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "Field Hospital Medical Storage" - }, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/machinery/light/floortube{ - dir = 1 - }, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/weapon/surgical/circular_saw/manager, -/obj/item/weapon/surgical/circular_saw/manager, -/obj/item/weapon/surgical/scalpel/ripper, -/obj/item/weapon/surgical/scalpel/ripper, -/obj/item/weapon/surgical/scalpel/manager, -/obj/item/weapon/surgical/scalpel/manager, -/obj/item/weapon/surgical/bone_clamp, -/obj/item/weapon/surgical/bone_clamp, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/weapon/reagent_containers/glass/bottle/biomass, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/weapon/storage/box/cdeathalarm_kit, -/obj/item/device/sleevemate, -/obj/item/device/sleevemate, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/masks, -/obj/item/clothing/under/rank/medical, -/obj/item/clothing/under/rank/medical, -/obj/item/clothing/under/rank/medical, -/obj/item/clothing/under/rank/medical, -/obj/item/clothing/under/rank/medical, -/obj/item/clothing/under/rank/medical/skirt, -/obj/item/clothing/under/rank/medical/skirt, -/obj/item/clothing/under/rank/medical/skirt, -/obj/item/clothing/under/rank/medical/skirt, -/obj/item/clothing/under/rank/medical/skirt, -/obj/item/clothing/under/rank/medical/turtleneck, -/obj/item/clothing/under/rank/medical/turtleneck, -/obj/item/clothing/under/rank/medical/turtleneck, -/obj/item/clothing/under/rank/medical/turtleneck, -/obj/item/clothing/under/rank/medical/turtleneck, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/green, -/obj/item/clothing/under/rank/medical/scrubs/green, -/obj/item/clothing/under/rank/medical/scrubs/green, -/obj/item/clothing/under/rank/medical/scrubs/green, -/obj/item/clothing/under/rank/medical/scrubs/green, -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/obj/item/clothing/under/rank/medical/scrubs/navyblue, -/obj/item/clothing/under/rank/medical/scrubs/purple, -/obj/item/clothing/under/rank/medical/scrubs/purple, -/obj/item/clothing/under/rank/medical/scrubs/purple, -/obj/item/clothing/under/rank/medical/scrubs/purple, -/obj/item/clothing/under/rank/medical/scrubs/purple, -/obj/item/clothing/under/rank/medical/scrubs/white, -/obj/item/clothing/under/rank/medical/scrubs/white, -/obj/item/clothing/under/rank/medical/scrubs/white, -/obj/item/clothing/under/rank/medical/scrubs/white, -/obj/item/clothing/under/rank/medical/scrubs/white, -/obj/item/clothing/head/surgery, -/obj/item/clothing/head/surgery, -/obj/item/clothing/head/surgery, -/obj/item/clothing/head/surgery, -/obj/item/clothing/head/surgery, -/obj/item/clothing/head/surgery/black{ - name = "black surgical cap" - }, -/obj/item/clothing/head/surgery/black{ - name = "black surgical cap" - }, -/obj/item/clothing/head/surgery/black{ - name = "black surgical cap" - }, -/obj/item/clothing/head/surgery/black{ - name = "black surgical cap" - }, -/obj/item/clothing/head/surgery/black{ - name = "black surgical cap" - }, -/obj/item/clothing/head/surgery/blue{ - name = "blue surgical cap" - }, -/obj/item/clothing/head/surgery/blue{ - name = "blue surgical cap" - }, -/obj/item/clothing/head/surgery/blue{ - name = "blue surgical cap" - }, -/obj/item/clothing/head/surgery/blue{ - name = "blue surgical cap" - }, -/obj/item/clothing/head/surgery/blue{ - name = "blue surgical cap" - }, -/obj/item/clothing/head/surgery/green{ - name = "green surgical cap" - }, -/obj/item/clothing/head/surgery/green{ - name = "green surgical cap" - }, -/obj/item/clothing/head/surgery/green{ - name = "green surgical cap" - }, -/obj/item/clothing/head/surgery/green{ - name = "green surgical cap" - }, -/obj/item/clothing/head/surgery/green{ - name = "green surgical cap" - }, -/obj/item/clothing/head/surgery/navyblue{ - name = "navy blue surgical cap" - }, -/obj/item/clothing/head/surgery/navyblue{ - name = "navy blue surgical cap" - }, -/obj/item/clothing/head/surgery/navyblue{ - name = "navy blue surgical cap" - }, -/obj/item/clothing/head/surgery/navyblue{ - name = "navy blue surgical cap" - }, -/obj/item/clothing/head/surgery/navyblue{ - name = "navy blue surgical cap" - }, -/obj/item/clothing/head/surgery/purple{ - name = "purple surgical cap" - }, -/obj/item/clothing/head/surgery/purple{ - name = "purple surgical cap" - }, -/obj/item/clothing/head/surgery/purple{ - name = "purple surgical cap" - }, -/obj/item/clothing/head/surgery/purple{ - name = "purple surgical cap" - }, -/obj/item/clothing/head/surgery/purple{ - name = "purple surgical cap" - }, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/shoes/white, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 1 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"oDr" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"oDD" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"oDE" = ( -/obj/item/weapon/storage/box/dosimeter, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"oEn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"oEt" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"oEz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 8; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 32 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 23 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"oEG" = ( -/obj/structure/sink{ - pixel_y = 14 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/machinery/disposal/wall{ - dir = 4; - pixel_y = 0; - pixel_x = -37 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"oEK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"oEU" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"oFo" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"oFI" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 3 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"oGt" = ( -/obj/structure/closet/cabinet, -/obj/random/maintenance/medical, -/obj/random/cash, -/obj/random/cigarettes, -/obj/random/firstaid, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"oGD" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"oHd" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"oHi" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"oHl" = ( -/obj/machinery/light/small, -/obj/machinery/alarm/monitor{ - dir = 1; - locked = 0; - pixel_y = -23; - req_access = null - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"oHo" = ( -/obj/structure/barricade/cutout/wizard{ - anchored = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oHH" = ( -/obj/effect/floor_decal/emblem/black, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"oIx" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"oIA" = ( -/obj/machinery/r_n_d/protolathe, -/obj/structure/sign/periodic{ - pixel_y = 29 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"oIC" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/template_noop) -"oII" = ( -/obj/structure/bed/chair/wood{ - dir = 8; - icon_state = "wooden_chair" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"oIN" = ( -/obj/machinery/biogenerator, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"oJd" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) -"oKd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"oKt" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - dir = 4; - icon_state = "2-4" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"oKK" = ( -/turf/simulated/floor/cult{ - icon_state = "cult-narsie" - }, -/area/template_noop) -"oLn" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"oLq" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"oLy" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "screen"; - pixel_y = 32 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"oLI" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"oLU" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"oMb" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"oMh" = ( -/obj/effect/catwalk_plated/white, -/turf/template_noop, -/area/survivalpod/superpose/ScienceShip) -"oMk" = ( -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"oMv" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/sniperrifle, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"oMw" = ( -/obj/structure/window/reinforced/survival_pod{ - density = 0; - dir = 9; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"oME" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/optable, -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"oNd" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/filingcabinet, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"oNj" = ( -/obj/structure/fence, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/MethLab) -"oNF" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oNG" = ( -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"oNL" = ( -/obj/item/weapon/storage/firstaid/o2, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"oNW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"oOk" = ( -/obj/structure/closet/crate/hydroponics, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"oOo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"oOK" = ( -/obj/effect/alien/weeds/node, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"oOW" = ( -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"oPi" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "estrella_outer"; - locked = 1; - name = "External Access" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"oPm" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/cult, -/area/template_noop) -"oPB" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"oPG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"oPZ" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"oQj" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"oQr" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"oQy" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"oSe" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"oSf" = ( -/obj/structure/fans, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oSs" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor, -/area/survivalpod/superpose/FieldLab) -"oSt" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 10 - }, -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/machinery/light/floortube, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"oSY" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"oTl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"oTC" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/item/device/starcaster_news, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oTF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/maintenance/engineering, -/obj/fire, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"oTP" = ( -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/item/device/gps/computer, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"oUb" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/gloves/black, -/obj/item/clothing/gloves/blue, -/obj/item/clothing/gloves/brown, -/obj/item/clothing/gloves/captain, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/green, -/obj/item/clothing/gloves/grey, -/obj/item/clothing/gloves/light_brown, -/obj/item/clothing/gloves/purple, -/obj/item/clothing/gloves/rainbow, -/obj/item/clothing/gloves/swat, -/obj/item/clothing/gloves/white, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"oUT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"oUU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod/superpose/LoneHome) -"oUZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_external, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"oVg" = ( -/obj/machinery/vending/cigarette{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"oVL" = ( -/turf/simulated/floor/redgrid, -/area/template_noop) -"oVQ" = ( -/obj/machinery/autolathe, -/obj/item/weapon/rcd/advanced/loaded{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/weapon/rcd_ammo/large, -/obj/item/weapon/rcd_ammo/large, -/turf/simulated/floor/plating, -/area/template_noop) -"oXC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"oXM" = ( -/obj/structure/table/glass, -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"oXO" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"oYb" = ( -/obj/machinery/atm{ - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"oYf" = ( -/obj/machinery/door/airlock/maintenance/command{ - req_one_access = null; - name = "Bridge Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"oYq" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"oYK" = ( -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"oYO" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"oZp" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/airlock_sensor{ - dir = 8; - id_tag = null; - pixel_x = 27 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - id_tag = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"oZu" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"oZx" = ( -/obj/item/weapon/cell/high, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"oZL" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 8 - }, -/obj/machinery/transhuman/resleever, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"pag" = ( -/obj/structure/closet/toolcloset, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"pan" = ( -/obj/structure/table/glass, -/obj/structure/closet/walllocker_double/survival/west, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"pao" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"paE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"paG" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"pbm" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"pcj" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"pck" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"pcn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"pcC" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -25 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"pcE" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"pcP" = ( -/obj/item/device/multitool, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"pcX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"pcY" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"pda" = ( -/obj/item/weapon/storage/box/lights/mixed, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"pdg" = ( -/obj/structure/barricade, -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"pdM" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"peh" = ( -/obj/machinery/door/airlock/phoron, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"peG" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"peY" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"pgJ" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"phy" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/template_noop) -"phA" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"phC" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"phG" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westright{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"pib" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"piJ" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"piK" = ( -/obj/machinery/disperser/middle{ - dir = 4 - }, -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"pja" = ( -/obj/random/mob/sif/peaceful, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"pju" = ( -/obj/machinery/door/airlock/phoron, -/obj/structure/fans/hardlight/colorable/abductor, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CultShip) -"pjH" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"pjJ" = ( -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"pjZ" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"pkh" = ( -/obj/structure/table/standard, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain8, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"pkr" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/pill_bottle/corophizine{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/corophizine{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/corophizine{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/corophizine{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/arithrazine{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/arithrazine{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/arithrazine{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/arithrazine{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/combat{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/combat{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/combat{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/combat{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/weapon/storage/pill_bottle/iron{ - pixel_x = -4 - }, -/obj/item/weapon/storage/pill_bottle/iron{ - pixel_x = -4 - }, -/obj/item/weapon/storage/pill_bottle/iron{ - pixel_x = -4 - }, -/obj/item/weapon/storage/pill_bottle/iron{ - pixel_x = -4 - }, -/obj/item/weapon/storage/pill_bottle/nutriment{ - pixel_x = 1 - }, -/obj/item/weapon/storage/pill_bottle/nutriment{ - pixel_x = 1 - }, -/obj/item/weapon/storage/pill_bottle/nutriment{ - pixel_x = 1 - }, -/obj/item/weapon/storage/pill_bottle/nutriment{ - pixel_x = 1 - }, -/obj/item/weapon/storage/pill_bottle/carbon{ - pixel_x = 6 - }, -/obj/item/weapon/storage/pill_bottle/carbon{ - pixel_x = 6 - }, -/obj/item/weapon/storage/pill_bottle/carbon{ - pixel_x = 6 - }, -/obj/item/weapon/storage/pill_bottle/carbon{ - pixel_x = 6 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"pkC" = ( -/obj/machinery/vending/foodfish, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pkV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"plu" = ( -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"plI" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"pmC" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/locked/frontier/carbine{ - pixel_y = 7 - }, -/obj/item/weapon/gun/energy/locked/frontier/carbine{ - pixel_y = -4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"por" = ( -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"pot" = ( -/obj/structure/table/rack/shelf, -/obj/random/maintenance/clean, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"poB" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"poF" = ( -/obj/item/weapon/module/power_control, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"poP" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/plating, -/area/template_noop) -"poX" = ( -/obj/machinery/conveyor_switch{ - id = "SP-Mining"; - name = "Disposal Sorter"; - pixel_y = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"pph" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ppr" = ( -/obj/structure/cult/talisman, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"ppH" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain4, -/turf/simulated/floor/atoll, -/area/template_noop) -"ppI" = ( -/obj/machinery/suit_cycler/engineering{ - req_access = null - }, -/turf/simulated/floor/plating, -/area/template_noop) -"ppY" = ( -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"pqN" = ( -/obj/structure/table/fancyblack, -/obj/item/toy/eight_ball, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"pqO" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - hackProof = 1; - id_tag = "Teshnomancer_doors"; - maxhealth = 8000000000; - normalspeed = 0; - req_one_access = list(300); - secured_wires = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"pqZ" = ( -/obj/structure/ship_munition/disperser_charge/mining, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"prz" = ( -/obj/machinery/smartfridge/produce, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"pso" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"psw" = ( -/obj/machinery/power/emitter{ - anchored = 1; - id = "EngineEmitter"; - state = 2 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"psD" = ( -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"ptq" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ptv" = ( -/obj/structure/table/marble, -/obj/machinery/cash_register/civilian{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "SP-kitchen"; - layer = 3.3; - name = "Kitchen Shutters" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ptG" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/device/flashlight/lamp/green, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"puB" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"puO" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"pva" = ( -/obj/machinery/mining/brace, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"pvH" = ( -/obj/structure/table/steel, -/obj/machinery/button/windowtint{ - id = "SP-Sec"; - pixel_x = 10; - pixel_y = 25 - }, -/obj/structure/fans{ - pixel_y = 32 - }, -/obj/machinery/microscope{ - pixel_y = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pvX" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/computer/skills{ - dir = 8 - }, -/obj/structure/table/darkglass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"pwl" = ( -/obj/structure/table/marble, -/obj/structure/sink/countertop{ - dir = 1; - pixel_y = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pwp" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/item/weapon/refill_cartridge/universal, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/cornoil, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/cookingoil, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/sprinkles, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/yeast, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/vinegar{ - name = "Vinegar" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/soysauce{ - name = "Soysauce" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/mustard{ - name = "Mustard" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/obj/item/weapon/reagent_containers/food/condiment/ketchup{ - name = "Ketchup" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"pwK" = ( -/obj/machinery/door/airlock/angled_tgmc{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"pwV" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"pxo" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"pxr" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/reinforced{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/weapon/paper_bin{ - pixel_x = 9 - }, -/obj/machinery/vending/loadout/uniform{ - pixel_x = -5 - }, -/obj/item/weapon/pen{ - pixel_x = 11; - pixel_y = -3 - }, -/obj/item/weapon/pen{ - pixel_x = 10; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"pxI" = ( -/obj/structure/table/bench/wooden, -/obj/item/weapon/flame/candle/everburn{ - pixel_y = 0 - }, -/turf/simulated/wall/wood, -/area/template_noop) -"pxU" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - pressure_checks = 0; - pressure_checks_default = 0; - use_power = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/item/weapon/bikehorn/rubberducky, -/turf/simulated/floor/wood, -/area/template_noop) -"pyq" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 8 - }, -/obj/machinery/computer/transhuman/resleeving{ - dir = 4; - req_access = list(300) - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = -21 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"pyD" = ( -/obj/structure/table/glass, -/obj/item/clothing/suit/storage/vest/press, -/obj/item/clothing/accessory/badge/press/independent, -/obj/item/device/tvcamera, -/obj/item/device/camera, -/obj/item/device/camera_film, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"pyZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"pzq" = ( -/turf/template_noop, -/area/survivalpod/superpose/ScienceShip) -"pzt" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"pzy" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"pzK" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"pAp" = ( -/obj/structure/cliff/automatic{ - dir = 8 - }, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"pAA" = ( -/obj/structure/closet/crate/freezer, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"pAF" = ( -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"pAZ" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 6 - }, -/obj/structure/bed/chair/wheelchair, -/obj/structure/bed/chair/wheelchair, -/obj/structure/bed/chair/wheelchair, -/obj/structure/bed/chair/wheelchair/smallmotor, -/obj/structure/bed/chair/wheelchair/smallmotor, -/obj/structure/bed/chair/wheelchair/smallmotor, -/obj/structure/window/reinforced, -/obj/machinery/light/floortube, -/obj/structure/table/rack, -/obj/structure/bedsheetbin, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"pBG" = ( -/obj/structure/bed/chair/bay/chair/padded/red/bignest, -/turf/simulated/floor/wood, -/area/survivalpod) -"pBX" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/telecube/randomized{ - name = "Odd artifact" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"pCb" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"pCP" = ( -/obj/item/weapon/storage/box/survival/comp, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"pDj" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "estrella_inner"; - locked = 1; - name = "Internal Access" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"pDx" = ( -/obj/structure/salvageable/data, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"pEc" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"pEj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"pEp" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"pEM" = ( -/obj/structure/table/rack/shelf, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"pFp" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"pFX" = ( -/obj/structure/railing, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"pGu" = ( -/obj/structure/table/reinforced, -/obj/item/device/radio/subspace{ - pixel_y = -7 - }, -/obj/item/device/flashlight/lamp{ - pixel_x = 4; - pixel_y = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"pGz" = ( -/obj/item/stack/cable_coil, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"pGG" = ( -/obj/item/stack/cable_coil/blue, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"pHl" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/surgery, -/obj/structure/sink/kitchen{ - dir = 4; - icon_state = "sink_alt"; - pixel_x = -13 - }, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pHn" = ( -/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, -/obj/structure/curtain/black, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"pHZ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/machinery/shower{ - pixel_y = 20 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/ScienceShip) -"pIa" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"pIq" = ( -/obj/item/weapon/module/power_control, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"pIr" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"pIW" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"pJo" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/camera{ - c_tag = "HydroResearch Bay West"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"pJr" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/carpet/gaycarpet, -/area/template_noop) -"pJx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/ScienceShip) -"pJO" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"pJY" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"pKP" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "estrella"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"pKV" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/sharpeningkit, -/obj/item/weapon/reagent_containers/dropper, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pLn" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"pLs" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/rig/internalaffairs, -/obj/item/clothing/head/helmet/space/void/wizard, -/obj/item/clothing/suit/space/void/wizard, -/obj/item/device/survivalcapsule/luxury, -/obj/item/device/survivalcapsule/luxurybar, -/obj/item/device/survivalcapsule/tabiranth, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule/luxury, -/obj/item/device/survivalcapsule/luxury, -/obj/item/device/survivalcapsule/superpose, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pLO" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"pLQ" = ( -/turf/simulated/wall/wood, -/area/template_noop) -"pLU" = ( -/obj/item/seeds/random, -/obj/item/seeds/random, -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"pMc" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"pNd" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"pNf" = ( -/obj/structure/fence/corner{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"pND" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/lighter/zippo/royal, -/obj/item/weapon/lipstick/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"pOh" = ( -/mob/living/simple_mob/vore/aggressive/rat, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"pPz" = ( -/obj/item/weapon/shovel, -/obj/item/weapon/tool/wrench, -/obj/item/weapon/pickaxe, -/obj/item/weapon/tool/crowbar, -/obj/item/stack/flag/yellow{ - pixel_x = 4 - }, -/obj/item/stack/flag/red, -/obj/item/stack/flag/green{ - pixel_x = -4 - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/item/device/gps/mining{ - pixel_x = -5 - }, -/obj/item/device/gps/mining{ - pixel_x = 5 - }, -/obj/item/weapon/storage/belt/utility/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pPV" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"pPZ" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/plating, -/area/template_noop) -"pQB" = ( -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"pQS" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/captain, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pQW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/voidcraft/survival_pod{ - hackProof = 1; - id_tag = "Teshnomancer_doors"; - maxhealth = 8000000000; - normalspeed = 0; - req_one_access = list(300); - secured_wires = 1 - }, -/obj/machinery/door/blast/puzzle{ - desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors."; - id = "Teshnomancer_innerdoor"; - name = "Heavy Duty blast door" - }, -/obj/structure/fans/hardlight/colorable{ - color = "#99ccff"; - light_color = "#99ccff" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"pRb" = ( -/obj/effect/floor_decal/industrial/danger, -/turf/simulated/floor/tiled, -/area/template_noop) -"pRi" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"pRp" = ( -/obj/machinery/computer/cryopod{ - layer = 3.3; - pixel_x = 32; - req_one_access = list(300) - }, -/obj/machinery/libraryscanner, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"pSs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom/department/medbay{ - pixel_y = -21 - }, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/graphite, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"pTg" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"pTl" = ( -/turf/simulated/floor/carpet, -/area/template_noop) -"pTp" = ( -/obj/fire, -/mob/living/simple_mob/vore/demonAI/lutra{ - faction = "neutral" - }, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"pTt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"pTC" = ( -/obj/item/device/camera, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"pTK" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate/internals, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pTO" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"pTV" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"pUj" = ( -/obj/structure/table/bench/glass, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/fuzzy, -/turf/simulated/floor/wood, -/area/template_noop) -"pUs" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"pUy" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/tech_disk, -/obj/item/weapon/disk/tech_disk, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"pUP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"pUX" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"pVk" = ( -/obj/machinery/camera{ - c_tag = "Lobby South"; - dir = 1; - network = list("Research") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite/corner, -/obj/effect/floor_decal/corner/purple/bordercorner, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"pVq" = ( -/obj/structure/bed/chair/sofa/corner, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"pWk" = ( -/obj/machinery/door/window/survival_pod, -/obj/structure/closet/walllocker_double/survival/north, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"pWA" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"pXr" = ( -/obj/machinery/floodlight, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"pXO" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"pYg" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"pYq" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"pYs" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"pYG" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"pYP" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"pYS" = ( -/obj/machinery/door/window/southright{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pZr" = ( -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"pZV" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"qaj" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"qaP" = ( -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/survivalpod/superpose/HellCave) -"qaS" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"qaT" = ( -/obj/item/weapon/tank/emergency/oxygen/engi, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"qbg" = ( -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "Teshnomancer_Private_blastdoors"; - name = "Private"; - pixel_x = -26; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"qbt" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/thermoregulator, -/turf/simulated/floor/plating, -/area/template_noop) -"qbC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"qcu" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"qcw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"qcF" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"qcI" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/MethLab) -"qdm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/vending/dinnerware{ - categories = 3; - req_log_access = 300; - req_one_access = list(300) - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"qen" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"qeq" = ( -/obj/effect/floor_decal/spline/plain, -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"qfd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"qfy" = ( -/obj/random/maintenance/engineering, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"qfH" = ( -/obj/structure/cliff/automatic{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"qgd" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/survivalpod) -"qgu" = ( -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"qgy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"qgz" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"qgB" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/sign/warning{ - icon_state = "custodian"; - name = "\improper Trash Ejection"; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"qha" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"qhD" = ( -/obj/structure/table/woodentable, -/obj/item/device/starcaster_news, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qik" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"qiO" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/template_noop, -/area/template_noop) -"qiS" = ( -/obj/machinery/mecha_part_fabricator{ - req_access = null - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"qjr" = ( -/obj/structure/grille, -/obj/structure/shuttle/window, -/obj/machinery/door/blast/regular{ - dir = 8; - id = "QShuttlePoIDoors"; - layer = 3.3; - name = "Emergency Lockdown Shutters" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"qju" = ( -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"qjA" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qjZ" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"qkd" = ( -/obj/item/stack/material/resin{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qkA" = ( -/obj/machinery/washing_machine{ - pixel_x = 8; - pixel_y = 15 - }, -/obj/item/weapon/storage/laundry_basket{ - pixel_x = -1; - pixel_y = -7 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qkX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"qkY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"qlo" = ( -/obj/structure/closet/crate/wooden, -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, -/turf/simulated/floor/wood, -/area/template_noop) -"qly" = ( -/obj/structure/curtain/black, -/obj/machinery/light_switch{ - pixel_x = 21; - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qmz" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/remote/blast_door{ - id = "tradebridgeshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(150) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qmC" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/carp_plushie, -/obj/random/curseditem, -/obj/random/junk, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"qmI" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"qmJ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"qmQ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"qnV" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"qnX" = ( -/obj/structure/simple_door/wood, -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qoz" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qoG" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"qoL" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"qoN" = ( -/obj/structure/railing/grey, -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/cliff/automatic{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"qpl" = ( -/obj/machinery/autolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qpO" = ( -/obj/structure/fence, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"qqL" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"qrz" = ( -/obj/machinery/newscaster/security_unit{ - pixel_x = -30 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/computer/security{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"qrW" = ( -/obj/machinery/camera{ - c_tag = "Production Room"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"qsi" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"qsB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"qsM" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"qtw" = ( -/obj/structure/sink/countertop{ - pixel_y = 7 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"quq" = ( -/obj/structure/closet/cabinet, -/obj/item/device/binoculars/spyglass, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/maintenance/medical, -/obj/random/cash, -/obj/random/drinkbottle, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"quA" = ( -/turf/simulated/floor/carpet/brown, -/area/template_noop) -"quK" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"quT" = ( -/obj/structure/hull_corner/long_vert{ - dir = 6 - }, -/turf/template_noop, -/area/template_noop) -"quV" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/glass/bucket{ - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/weapon/reagent_containers/glass/bucket{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/structure/sink/kitchen{ - layer = 1; - pixel_y = 12 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"qvq" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"qvB" = ( -/obj/structure/table/woodentable, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"qvK" = ( -/obj/random/soap, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qvQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"qwe" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qwz" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"qwC" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"qxh" = ( -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qxi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"qxt" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qye" = ( -/obj/structure/table/steel, -/obj/item/weapon/tool/crowbar/power, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"qyk" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"qyo" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/wood, -/area/template_noop) -"qyr" = ( -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"qyA" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/under/cheongsam, -/obj/item/clothing/under/hosformalmale, -/obj/item/clothing/under/hosformalfem, -/obj/item/clothing/under/harness, -/obj/item/clothing/under/gladiator, -/obj/item/clothing/under/ert, -/obj/item/clothing/under/schoolgirl, -/obj/item/clothing/under/redcoat, -/obj/item/clothing/under/sexymime, -/obj/item/clothing/under/sexyclown, -/obj/item/clothing/under/soviet, -/obj/item/clothing/under/space, -/obj/item/clothing/under/swimsuit/stripper/mankini, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/rank/psych/turtleneck, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/tacticool, -/obj/item/clothing/under/syndicate/tacticool, -/obj/item/clothing/under/dress/sailordress, -/obj/item/clothing/under/dress/redeveninggown, -/obj/item/clothing/under/dress/dress_saloon, -/obj/item/clothing/under/dress/blacktango, -/obj/item/clothing/under/dress/blacktango/alt, -/obj/item/clothing/under/dress/dress_orange, -/obj/item/clothing/under/dress/maid/janitor, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qyG" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/DemonPool) -"qzo" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/east, -/turf/simulated/floor/plating, -/area/template_noop) -"qzq" = ( -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/cliff/automatic, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"qzG" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/icepepperseed, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"qzP" = ( -/obj/machinery/porta_turret, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"qzX" = ( -/turf/simulated/gore, -/area/survivalpod/superpose/HellCave) -"qAr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"qAy" = ( -/turf/simulated/wall/cult, -/area/survivalpod/superpose/HellCave) -"qAG" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"qAO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/rnd{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"qBE" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/machinery/light, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"qBN" = ( -/obj/structure/closet/crate/secure/engineering{ - req_one_access = list(300) - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"qBX" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/device/defib_kit/compact/combat/loaded{ - pixel_x = 5; - pixel_y = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -26 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_x = -6; - pixel_y = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"qCa" = ( -/obj/item/weapon/storage/backpack/cultpack, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"qDr" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 35 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 22 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"qEC" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"qEO" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"qFn" = ( -/obj/item/fulton_core, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qFs" = ( -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Teshnomancer_frontdoor"; - name = "Front Door"; - pixel_x = 26; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"qFH" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/obj/machinery/camera{ - c_tag = "BioResearch Entry West"; - dir = 4; - network = list("Research") - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"qHq" = ( -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qHO" = ( -/obj/structure/window/reinforced/full{ - dir = 8 - }, -/obj/structure/window/reinforced/full{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"qHP" = ( -/obj/structure/sink/puddle, -/turf/simulated/floor/outdoors/mud{ - outdoors = 0 - }, -/area/survivalpod/superpose/Farm) -"qHQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"qII" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qJz" = ( -/obj/machinery/washing_machine, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"qJK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"qJQ" = ( -/obj/machinery/vending/fitness{ - dir = 4; - pixel_x = -5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"qKd" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qKl" = ( -/obj/structure/fans, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"qKA" = ( -/obj/item/clothing/shoes/cult, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qLj" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"qLu" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/surgical/circular_saw/manager, -/obj/item/weapon/surgical/scalpel/ripper, -/obj/item/weapon/surgical/scalpel/manager, -/obj/item/weapon/surgical/bone_clamp, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"qLB" = ( -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"qNh" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"qOk" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"qOl" = ( -/obj/structure/sign/atmos_waste, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/MethLab) -"qOy" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"qPo" = ( -/obj/item/weapon/material/shard, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"qPB" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_y = -9 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qPW" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"qQy" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l" - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"qQF" = ( -/obj/structure/lattice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"qQJ" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"qRd" = ( -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"qSd" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"qSf" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/medical, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"qSh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"qTy" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"qTA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"qTC" = ( -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"qTK" = ( -/obj/machinery/mineral/mint{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qUy" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"qUz" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"qUK" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/white, -/obj/item/weapon/pen/fountain4, -/obj/item/device/gps/medical{ - pixel_x = 12 - }, -/obj/item/device/gps/medical{ - pixel_x = 12 - }, -/obj/item/device/gps/medical{ - pixel_x = 12 - }, -/obj/item/device/gps/medical{ - pixel_x = 12 - }, -/obj/item/device/gps/medical{ - pixel_x = 12 - }, -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"qUO" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"qVd" = ( -/obj/machinery/power/smes/buildable/hybrid, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"qVl" = ( -/obj/structure/table/steel_reinforced, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/curseditem, -/obj/random/curseditem, -/obj/random/curseditem, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qVw" = ( -/obj/random/maintenance, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"qVO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"qWd" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"qWl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"qWF" = ( -/obj/structure/toilet/prison{ - name = "toilet"; - pixel_y = 10 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"qWV" = ( -/obj/structure/sink{ - pixel_y = 25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"qXf" = ( -/mob/living/simple_mob/vore/catgirl, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"qYf" = ( -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"qYA" = ( -/obj/structure/cult/tome, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"qYC" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/ScienceShip) -"qYF" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"qYJ" = ( -/obj/machinery/power/emitter/gyrotron{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"qZN" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"rac" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/device/multitool, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"raj" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"raz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/shuttle/plating, -/area/template_noop) -"rbm" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/under/pirate, -/obj/item/clothing/head/bandana, -/obj/item/clothing/glasses/eyepatch, -/obj/item/clothing/shoes/boots/duty, -/turf/simulated/floor/tiled, -/area/template_noop) -"rbq" = ( -/obj/structure/window/reinforced/full, -/obj/structure/grille/rustic, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"rbr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"rbM" = ( -/obj/item/robot_parts/chest, -/obj/item/robot_parts/l_arm, -/obj/item/robot_parts/r_arm, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"rbR" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/template_noop) -"rbS" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"rbW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"rcc" = ( -/obj/fire, -/obj/fire, -/obj/item/trash/material/device, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"rck" = ( -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"rcR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"rds" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"rdt" = ( -/obj/machinery/autolathe{ - hacked = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"rdw" = ( -/obj/structure/table/bench/wooden, -/obj/item/device/flashlight/lamp/green{ - pixel_y = 2 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"rdM" = ( -/obj/structure/bookcase, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rdS" = ( -/obj/machinery/sleeper{ - dir = 4; - emagged = 1; - initial_bin_rating = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"req" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - dir = 2; - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"rer" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/southleft{ - req_access = null - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"rev" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/largecrate/hoverpod, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rex" = ( -/obj/structure/grille/broken/cult, -/turf/template_noop, -/area/survivalpod/superpose/DemonPool) -"reH" = ( -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/MethLab) -"rfr" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer_1"; - set_temperature = 19; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"rfP" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"rgK" = ( -/obj/item/weapon/mining_scanner, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/void/mining, -/obj/item/clothing/head/helmet/space/void/mining, -/obj/structure/table/rack/shelf/steel, -/obj/item/device/suit_cooling_unit, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rgO" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rgX" = ( -/obj/structure/alien/membrane, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"rhY" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rif" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"rih" = ( -/obj/machinery/iv_drip, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"rio" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dispenser/oxygen, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"riA" = ( -/obj/structure/table/standard, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/head/helmet/space/void/merc, -/obj/item/clothing/head/helmet/space/void/merc, -/obj/item/clothing/head/helmet/space/void/merc, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rjB" = ( -/obj/structure/tubes, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rjJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"rjX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/item/device/radio/intercom{ - dir = 8; - name = "Station Intercom (General)"; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"rkb" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"rki" = ( -/obj/structure/closet/secure_closet/scientist, -/obj/item/device/gps/science, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rkm" = ( -/obj/structure/table/darkglass, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"rkE" = ( -/obj/machinery/atm{ - pixel_y = -32 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"rkS" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/bio_hood, -/obj/item/clothing/suit/bio_suit, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"rle" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"rlf" = ( -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"rlm" = ( -/turf/simulated/gore, -/area/template_noop) -"rlA" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/dice, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rlL" = ( -/obj/screen/alert/highpressure, -/turf/template_noop, -/area/template_noop) -"rmo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"rmP" = ( -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"rnj" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"rnB" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rnE" = ( -/obj/structure/cliff/automatic{ - dir = 2 - }, -/obj/structure/railing/grey, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"rnG" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 4 - }, -/obj/machinery/computer/crew{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"rnM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/bed, -/obj/item/weapon/bedsheet/pirate, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"rnY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_cycler{ - departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control","Exploration","Pilot Blue","Pilot"); - locked = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rol" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/appliance/mixer/cereal, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"rop" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"roK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"rpe" = ( -/obj/structure/sign/flag/pirate{ - pixel_y = 29 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"rpl" = ( -/obj/machinery/door/window/survival_pod, -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rps" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"rpF" = ( -/obj/item/weapon/gun/projectile/revolver/nagant{ - pixel_x = 10; - pixel_y = 7 - }, -/obj/effect/decal/remains/human, -/obj/item/ammo_magazine/s357{ - pixel_x = -13; - pixel_y = 9 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rqf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_external, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"rqq" = ( -/obj/machinery/power/thermoregulator/southerncross{ - dir = 4; - pixel_x = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"rqG" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"rrc" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"rrh" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"rrm" = ( -/obj/structure/table/glass, -/obj/item/device/camerabug, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rrN" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"rrV" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Pole Dance Room" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"rsf" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rsM" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/fire, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"rsQ" = ( -/obj/structure/railing/grey, -/obj/structure/cliff/automatic{ - dir = 2 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"rts" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/lightorange/border{ - dir = 10 - }, -/obj/machinery/door/window/brigdoor/westleft{ - name = "FH Chemistry Windoor"; - req_access = list(300) - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"rtO" = ( -/obj/random/trash, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"rtV" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"rug" = ( -/obj/structure/hull_corner{ - dir = 4 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"ruW" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/template_noop) -"rvf" = ( -/mob/living/simple_mob/vore/aggressive/frog, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"rvU" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"rwM" = ( -/obj/machinery/seed_extractor, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rwO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rxc" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ryh" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/brown, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ryn" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/porta_turret/alien{ - faction = "cult" - }, -/turf/simulated/floor/cult, -/area/template_noop) -"ryL" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rzg" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rzN" = ( -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/template_noop) -"rzQ" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = "stolenlock" - }, -/obj/structure/barricade/planks, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rAH" = ( -/obj/structure/table/woodentable, -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rAW" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"rBo" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"rBu" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"rBL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"rBR" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"rCt" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - on = 1 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"rDz" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"rEO" = ( -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"rFd" = ( -/obj/machinery/vending/security, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"rFn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"rFv" = ( -/obj/structure/cliff/automatic/corner{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"rFE" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"rGa" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"rGi" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"rGq" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rGY" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"rGZ" = ( -/obj/structure/fence/door/opened, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"rHE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"rHG" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"rHR" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"rIq" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"rIQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"rJv" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"rKi" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rKB" = ( -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"rLe" = ( -/obj/structure/constructshell/cult, -/turf/simulated/floor/cult, -/area/template_noop) -"rLo" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"rLt" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"rLL" = ( -/obj/machinery/disperser/front{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"rMI" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"rMN" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rMY" = ( -/obj/machinery/door/window/southleft{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rNs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"rNC" = ( -/obj/structure/table/woodentable, -/obj/item/device/tape, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"rNF" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/steel_reinforced, -/obj/fiftyspawner/glass{ - pixel_y = -5 - }, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20; - pixel_y = 5 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"rNI" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/machinery/light/floortube{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"rNJ" = ( -/obj/structure/curtain/open/bed{ - anchored = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod) -"rNK" = ( -/obj/item/frame/apc, -/obj/structure/table/steel, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 22 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"rOb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"rOc" = ( -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = -30 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/clothing/glasses/welding, -/obj/item/device/robotanalyzer, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rPq" = ( -/obj/machinery/iv_drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rQp" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder{ - pixel_x = 10; - pixel_y = 19 - }, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rQA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"rRu" = ( -/obj/structure/fans/hardlight, -/obj/machinery/door/airlock/multi_tile/metal/mait, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"rRO" = ( -/obj/fiftyspawner/tealcarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"rRZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rSA" = ( -/obj/structure/table/reinforced, -/obj/item/device/gps/advanced/science, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"rUc" = ( -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"rUp" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"rVO" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/toilet, -/obj/machinery/light/floortube{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"rVR" = ( -/obj/vehicle/train/trolley{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rVS" = ( -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"rWB" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"rWQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"rXd" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rXy" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"rXE" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rXS" = ( -/obj/structure/table/steel, -/obj/item/device/starcaster_news{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/toy/eight_ball{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rYs" = ( -/obj/structure/cult/tome, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"rYG" = ( -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"rYO" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"rZj" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"rZk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"rZy" = ( -/obj/machinery/vending/snack{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"rZR" = ( -/obj/structure/grille, -/turf/template_noop, -/area/template_noop) -"saB" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"saF" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"saN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"saQ" = ( -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/obj/machinery/light, -/obj/structure/table/glass, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sbm" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/structure/fans{ - pixel_y = 16 - }, -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -14 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/tool/wrench, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/gloves/boxing, -/obj/item/clothing/gloves/boxing/blue, -/obj/item/weapon/material/twohanded/baseballbat/foam, -/obj/item/weapon/material/sword/foam, -/obj/item/weapon/material/twohanded/fireaxe/foam, -/obj/item/weapon/material/twohanded/spear/foam, -/obj/item/paint_palette{ - pixel_y = 6; - pixel_x = 6 - }, -/obj/item/paint_palette{ - pixel_y = 6; - pixel_x = 6 - }, -/obj/item/paint_brush{ - pixel_y = 4; - pixel_x = -8 - }, -/obj/item/paint_brush{ - pixel_y = 4; - pixel_x = -8 - }, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/camera, -/obj/item/device/camera, -/obj/item/weapon/storage/photo_album, -/obj/item/weapon/storage/fancy/crayons{ - pixel_y = -3; - pixel_x = 11 - }, -/obj/item/weapon/storage/fancy/crayons{ - pixel_y = -3; - pixel_x = 11 - }, -/obj/item/weapon/storage/fancy/markers{ - pixel_y = 6; - pixel_x = 11 - }, -/obj/item/weapon/tape_roll, -/obj/item/weapon/tape_roll, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/cell/device, -/obj/item/weapon/cell/device, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sbp" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/everburn, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"sbs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sbC" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"sbY" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"scn" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/under/mbill{ - desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; - name = "\improper old Major Bill's uniform" - }, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"scp" = ( -/obj/structure/railing/grey, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"scy" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"scA" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/carpet, -/area/template_noop) -"scK" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"sdi" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sdj" = ( -/obj/effect/decal/remains/deer, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"sdr" = ( -/obj/machinery/computer/operating{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"sdv" = ( -/obj/structure/fence, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"sdH" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sec" = ( -/obj/machinery/disperser/middle{ - dir = 8 - }, -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"seD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/ScienceShip) -"seY" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/clipboard, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"sfl" = ( -/obj/structure/urinal{ - dir = 4; - pixel_y = 0; - pixel_x = -31 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"sfH" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"sfT" = ( -/obj/item/weapon/makeover, -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/swimsuit/fluff/penelope, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"sgH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/template_noop, -/area/template_noop) -"sgU" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sic" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 6 - }, -/obj/structure/window/reinforced/tinted, -/obj/machinery/smartfridge/secure/medbay{ - req_one_access = list(150) - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/machinery/light/floortube, -/obj/item/weapon/storage/bag/chemistry{ - layer = 3.01 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"siQ" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/glasses/cocktail, -/obj/item/weapon/storage/box/glasses/wine, -/obj/item/weapon/storage/box/glasses/shot, -/obj/item/weapon/storage/box/glasses/meta/metapint, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sjw" = ( -/obj/item/device/threadneedle, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sjL" = ( -/obj/machinery/alarm/freezer{ - dir = 8; - pixel_x = 22; - req_one_access = list(24,11,300) - }, -/obj/machinery/gibber{ - req_access = list(300) - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"ske" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"skj" = ( -/obj/item/weapon/tank/emergency/oxygen/engi, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"skn" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sko" = ( -/obj/effect/floor_decal/stairs/dark_stairs, -/turf/simulated/floor, -/area/template_noop) -"skA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"skJ" = ( -/obj/machinery/dnaforensics{ - pixel_x = -4 - }, -/obj/structure/tubes, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"slo" = ( -/obj/effect/decal/cleanable/generic, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"slP" = ( -/obj/item/weapon/melee/cultblade, -/obj/structure/table/fancyblack, -/obj/item/device/soulstone, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"slV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"slZ" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"sme" = ( -/mob/living/simple_mob/animal/synx{ - dir = 4 - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"smW" = ( -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"snB" = ( -/obj/machinery/vending/hydronutrients{ - categories = 3; - dir = 1; - req_log_access = 300 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"spe" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"spx" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"spF" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"spL" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_y = 5 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sql" = ( -/obj/machinery/r_n_d/server/core, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"sqB" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"srk" = ( -/turf/simulated/wall/phoron, -/area/survivalpod/superpose/CultShip) -"srF" = ( -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"srO" = ( -/obj/item/stack/material/plastic{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sst" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"ssy" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"ssR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ssW" = ( -/obj/machinery/door/window/northright{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"stk" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/carpet, -/area/template_noop) -"stC" = ( -/turf/simulated/shuttle/wall/dark/hard_corner, -/area/survivalpod/superpose/TradingShip) -"stZ" = ( -/mob/living/simple_mob/vore/demonAI{ - faction = "neutral" - }, -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/DemonPool) -"suM" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"suV" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"suW" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"svb" = ( -/obj/machinery/porta_turret/lasertag/red{ - name = "REAL turret" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"svg" = ( -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"svj" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/CultShip) -"swI" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"swP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"swU" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"swY" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"sxA" = ( -/obj/structure/barricade, -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 4; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"sxJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "estrella_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "estrella"; - pixel_y = 26; - tag_airpump = "estrella_pump"; - tag_chamber_sensor = "estrella_sensor"; - tag_exterior_door = "estrella_outer"; - tag_interior_door = "estrella_inner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"sxL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"syj" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 7 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"syW" = ( -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"szh" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"szv" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"szA" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"sAG" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"sBk" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/machinery/recharger{ - pixel_y = 0; - pixel_x = -5 - }, -/obj/machinery/recharger{ - pixel_y = 0; - pixel_x = 6 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sBo" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"sCs" = ( -/obj/machinery/deployable/barrier{ - desc = "A deployable barrier with strange undertones. Swipe your ID card to lock/unlock it."; - health = 8000000000; - maxhealth = 8000000000; - name = "modified deployable barrier"; - req_access = list(300) - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"sCA" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"sCN" = ( -/obj/item/device/flashlight/lamp/green, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/template_noop) -"sDA" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"sEe" = ( -/turf/simulated/floor/gorefloor, -/area/template_noop) -"sEG" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"sEH" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sEI" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = -30 - }, -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sFg" = ( -/obj/structure/table/standard, -/obj/item/device/starcaster_news{ - pixel_x = 8 - }, -/obj/item/device/starcaster_news{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"sFi" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/obj/item/weapon/gun/energy/locked/frontier, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"sFk" = ( -/obj/structure/hull_corner/long_vert{ - dir = 10 - }, -/turf/template_noop, -/area/template_noop) -"sFs" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/fire, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"sFL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"sGj" = ( -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/machinery/smartfridge/survival_pod{ - pixel_y = 28 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"sGo" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/Dinner) -"sGA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - id_tag = "awaydorm2"; - name = "Dorm 2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"sGH" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"sGW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/fire, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"sHl" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"sIt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/obj/machinery/door/airlock/angled_tgmc/maintenance{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"sIy" = ( -/obj/item/trash/chips, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"sJr" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/chainsaw, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/extinguisher, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/stack/material/log/sif{ - amount = 25 - }, -/obj/item/stack/material/log/sif{ - amount = 25 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/WoodenCamp) -"sJz" = ( -/obj/item/weapon/module/cell_power, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sJA" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"sJG" = ( -/obj/machinery/door/window/northleft{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sJN" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"sKn" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"sKC" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/folder/white, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/item/weapon/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"sLh" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain8, -/obj/structure/table/darkglass, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"sLi" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/lightorange/border, -/obj/machinery/chem_master, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"sLq" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/cosmos, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/tealcarpet, -/area/template_noop) -"sLs" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"sLO" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/floortube/flicker{ - pixel_y = 13 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"sMc" = ( -/obj/item/device/gps, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sMq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CultShip) -"sMx" = ( -/obj/effect/floor_decal/sign, -/turf/simulated/wall, -/area/survivalpod/superpose/MethLab) -"sMz" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"sMD" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sNc" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"sNt" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sNP" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/cult, -/area/template_noop) -"sNT" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"sOj" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/obj/structure/simple_door/wood, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"sOv" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/inflatable_duck, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sOE" = ( -/obj/fire, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"sOH" = ( -/obj/structure/bed/chair/oldsofa/right{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod) -"sOY" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = -27; - pixel_y = -10 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = -27; - pixel_y = 3 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"sPt" = ( -/obj/machinery/vending/tool{ - emagged = 1; - req_log_access = null - }, -/turf/simulated/floor/plating, -/area/template_noop) -"sPP" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"sQn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"sQo" = ( -/obj/structure/curtain/bed, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"sQp" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"sQZ" = ( -/obj/machinery/vending/boozeomat{ - req_access = newlist() - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sRi" = ( -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"sRM" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sRV" = ( -/obj/structure/table/bench/sifwooden, -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"sSn" = ( -/obj/machinery/light/floortube{ - dir = 4 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"sTv" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/pirate, -/turf/simulated/floor/wood, -/area/template_noop) -"sTA" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "shelterblast"; - name = "Shelter Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sUb" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"sUj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sUn" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"sUq" = ( -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"sUw" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sUO" = ( -/obj/structure/closet/wardrobe/captain, -/obj/item/weapon/gun/projectile/revolver/mateba, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sUX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"sVt" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/rack/shelf, -/obj/item/weapon/storage/box/glasses/meta/metapint, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sVH" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"sWl" = ( -/obj/structure/table/steel, -/turf/simulated/floor/redgrid/off, -/area/template_noop) -"sWm" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ - id = "xrlock"; - name = "Lockdown Shutters"; - pixel_x = 6; - pixel_y = 2 - }, -/obj/machinery/button/remote/blast_door{ - id = "rat"; - name = "Giant Rat"; - pixel_x = -6; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"sWy" = ( -/obj/item/device/gps/computer{ - can_hide_signal = 1; - gps_tag = "MEDBAY"; - long_range = 1; - tracking = 1 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"sWT" = ( -/obj/structure/closet/alien, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"sXl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"sXV" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"sYD" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"sZq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"sZF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"tap" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 5 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/structure/filingcabinet/chestdrawer{ - name = "Medical Forms" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"tav" = ( -/obj/machinery/vending/robotics, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"taZ" = ( -/obj/machinery/r_n_d/server/robotics, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"tbq" = ( -/obj/item/weapon/storage/firstaid/toxin, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tbY" = ( -/obj/fiftyspawner/purcarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tcF" = ( -/obj/structure/closet/walllocker_double/south{ - name = s - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"tdy" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"tdz" = ( -/obj/machinery/door/airlock/glass_medical{ - name = "Medical Bay"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"tdG" = ( -/obj/structure/table/marble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"tdW" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/coin/uranium, -/obj/item/weapon/coin/silver, -/obj/item/weapon/coin/platinum, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/iron, -/obj/item/weapon/coin/gold, -/obj/item/weapon/coin/diamond, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"teo" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"teN" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"teQ" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) -"tgE" = ( -/obj/structure/kitchenspike, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"thn" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shieldgen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"thD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/angled_tgmc/security_glass{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"tic" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"tid" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"tih" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"tin" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/carpet, -/area/template_noop) -"tiJ" = ( -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"tiK" = ( -/obj/machinery/newscaster{ - pixel_y = -30 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"tjg" = ( -/obj/item/weapon/circuitboard/jukebox, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tjq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"tjL" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"tki" = ( -/obj/machinery/disposal/wall{ - dir = 8; - pixel_y = 0; - pixel_x = 35 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"tkk" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"tko" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"tkE" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"tlk" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"tlz" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"tlY" = ( -/obj/structure/table/reinforced, -/obj/machinery/cash_register/civilian{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"tmw" = ( -/obj/item/weapon/phone, -/obj/structure/table/bench/wooden, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/obj/machinery/button/windowtint{ - id = "h-master"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"tmV" = ( -/obj/machinery/appliance/mixer/cereal, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"tnb" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) -"tnp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"tnK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/template_noop) -"tnO" = ( -/obj/machinery/vending/loadout/uniform{ - categories = 3 - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"tnU" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"tod" = ( -/obj/structure/table/standard, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"toB" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = 32 - }, -/turf/template_noop, -/area/template_noop) -"toJ" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/floor/plating, -/area/template_noop) -"tpk" = ( -/obj/structure/bed/chair/sofa/black, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"tpm" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"tpq" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"tpt" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tpy" = ( -/obj/structure/sign/warning{ - name = "HOSTILE LIFEFORMS"; - pixel_y = 29 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tpG" = ( -/obj/machinery/vending/sovietsoda, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"tql" = ( -/turf/template_noop, -/area/survivalpod/superpose/DemonPool) -"tqs" = ( -/obj/structure/cult/pylon, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"tqt" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"tqE" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"tro" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = -32 - }, -/turf/template_noop, -/area/survivalpod) -"trs" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"trv" = ( -/obj/structure/bonfire/permanent/sifwood, -/obj/item/weapon/reagent_containers/cooking_container/grill, -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"trL" = ( -/obj/structure/sign/science{ - pixel_y = -32 - }, -/turf/template_noop, -/area/template_noop) -"tsu" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/cult, -/area/template_noop) -"tsy" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/gorefloor, -/area/template_noop) -"tsV" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"tvd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"twL" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - maxhealth = 8000000000; - normalspeed = 0; - req_one_access = list(300) - }, -/obj/structure/fans/hardlight/colorable{ - light_color = "#D7D7D7" - }, -/turf/simulated/floor/tiled/freezer/cold, -/area/survivalpod) -"txe" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"txi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"txt" = ( -/obj/structure/plasticflaps, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/floortube{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/sign/warning{ - name = "\improper Trash Ejection"; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"txz" = ( -/obj/machinery/door/blast/regular{ - dir = 2; - id = "SP-Cell2"; - name = "Cell Door" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"txD" = ( -/obj/effect/mist, -/turf/simulated/floor/water/pool, -/area/template_noop) -"txG" = ( -/obj/structure/table/standard, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"txT" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/tech_disk, -/obj/item/weapon/disk/tech_disk, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"tyC" = ( -/obj/machinery/honey_extractor, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"tyE" = ( -/obj/structure/constructshell/cult, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"tyI" = ( -/obj/structure/grille/rustic, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 4; - tag = "icon-window (EAST)" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"tyX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"tzb" = ( -/obj/machinery/vending/wallmed1{ - name = "NanoMed Wall"; - pixel_x = 25 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/quickdraw/syringe_case, -/obj/item/weapon/storage/quickdraw/syringe_case, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"tzZ" = ( -/obj/item/weapon/circuitboard/intercom, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tBq" = ( -/obj/machinery/body_scanconsole{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tCd" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"tCx" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"tCB" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"tCP" = ( -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"tCR" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"tDd" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"tDh" = ( -/obj/machinery/floodlight, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"tDB" = ( -/obj/machinery/smartfridge/survival_pod, -/turf/template_noop, -/area/template_noop) -"tEc" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"tEh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"tFt" = ( -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"tFw" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"tFV" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"tGy" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"tGE" = ( -/obj/item/weapon/storage/box/flare, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tGO" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"tGY" = ( -/obj/structure/fence/cut/medium, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"tHe" = ( -/obj/machinery/porta_turret/alien/destroyed, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/cult, -/area/template_noop) -"tHf" = ( -/obj/structure/bed/chair/bay/chair/padded/red, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tHx" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"tIp" = ( -/obj/structure/bed/chair/sofa/left{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"tIA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"tJi" = ( -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"tJn" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/sink/kitchen{ - dir = 4; - pixel_x = 4; - pixel_y = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"tJU" = ( -/obj/structure/curtain/open/shower, -/obj/machinery/shower, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"tKq" = ( -/obj/machinery/light, -/turf/simulated/floor/water/deep/pool, -/area/template_noop) -"tKN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"tKW" = ( -/obj/fire, -/obj/item/trash/material/metal, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"tLe" = ( -/obj/effect/decal/remains/human, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"tLk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"tLA" = ( -/obj/effect/floor_decal/industrial/danger{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"tLC" = ( -/obj/machinery/vending/medical{ - categories = 3; - name = "hacked NanoMed Plus"; - req_access = list(300) - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"tLR" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"tLS" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/wall/shull, -/area/template_noop) -"tLX" = ( -/obj/structure/table/survival_pod, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"tMy" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"tMX" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/template_noop) -"tNd" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"tNI" = ( -/obj/machinery/smartfridge/produce, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"tOS" = ( -/obj/structure/table/fancyblack, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -32 - }, -/obj/item/device/paicard, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"tOY" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"tPf" = ( -/obj/item/clothing/mask/muzzle, -/obj/random/trash, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"tPh" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tPk" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"tQe" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"tQB" = ( -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tRx" = ( -/obj/machinery/camera{ - c_tag = "BioResearch East"; - dir = 1; - network = list("Research") - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"tRC" = ( -/obj/structure/prop/alien/computer/hybrid, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"tRF" = ( -/turf/simulated/floor/water, -/area/survivalpod/superpose/Farm) -"tRH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"tRO" = ( -/obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"tSm" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"tSE" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/item/slimepotion/stabilizer, -/obj/item/slimepotion/steroid, -/obj/item/slimepotion/unity, -/obj/item/slimepotion/friendship, -/obj/item/slimepotion/friendship, -/obj/item/slimepotion/feeding, -/obj/item/slimepotion/docility, -/obj/item/slimepotion/enhancer, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"tSX" = ( -/obj/structure/table/marble{ - color = "#B03A2E" - }, -/obj/item/clothing/suit/cultrobes/alt, -/obj/item/clothing/head/helmet/space/cult, -/obj/item/clothing/shoes/cult, -/obj/item/device/soulstone, -/turf/simulated/floor/wood/alt/tile, -/area/survivalpod/superpose/DemonPool) -"tTC" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/pointdefense, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"tTT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"tTX" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"tVi" = ( -/obj/effect/floor_decal/chapel{ - dir = 8; - pixel_y = -16 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"tVn" = ( -/obj/machinery/power/rtg/fake_gen{ - desc = "Some power generation equipment that is powering the current area's thermal regulators."; - irradiate = 0; - layer = 3.01; - name = "air conditioning power generator"; - power_gen = 30000 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"tVq" = ( -/obj/machinery/door/airlock/angled_tgmc, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"tVv" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/shuttle/engine/heater{ - dir = 4; - icon_state = "heater" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"tWt" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"tWX" = ( -/obj/item/weapon/storage/box/wormcan/deluxe, -/turf/simulated/floor/outdoors/rocks, -/area/survivalpod/superpose/Farm) -"tXc" = ( -/obj/effect/floor_decal/borderfloorwhite/corner, -/obj/effect/floor_decal/corner/purple/bordercorner, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"tXg" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/box/matches, -/obj/item/weapon/flame/match, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"tXk" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Unisex Bathroom" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"tYl" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"tYG" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/uranium, -/obj/item/stack/material/phoron{ - amount = 5; - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/stack/material/gold{ - amount = 5 - }, -/obj/item/stack/material/diamond, -/obj/item/stack/material/silver{ - amount = 5; - pixel_x = 2; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"tYH" = ( -/obj/structure/table/standard, -/obj/item/device/taperecorder, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"tZn" = ( -/obj/machinery/light/small, -/obj/structure/table/standard, -/obj/item/weapon/bikehorn/fluff/chew_ire, -/turf/simulated/floor, -/area/survivalpod/superpose/Dinner) -"tZx" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"uas" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uat" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"uaw" = ( -/obj/structure/sign/biohazard{ - dir = 1 - }, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"uaI" = ( -/obj/machinery/smartfridge/survival_pod{ - pixel_y = 12 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uaQ" = ( -/obj/random/junk, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"uaT" = ( -/obj/structure/bed/chair/sofa/right, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"ubm" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/plating, -/area/template_noop) -"ucD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/structure/closet/secure_closet{ - desc = "It's a secure locker for personnel. The first card swiped gains control."; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective"; - locked = 0; - name = "personal closet"; - req_access_txt = "201" - }, -/obj/item/clothing/under/suit_jacket/female, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"ucR" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"udc" = ( -/obj/item/weapon/storage/firstaid/fire, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"udi" = ( -/obj/fire, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"udp" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"udz" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"udB" = ( -/obj/structure/bed/chair/wood, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"udG" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/pizzavoucher, -/obj/item/toy/figure, -/turf/simulated/floor/wood, -/area/template_noop) -"udM" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/orangedouble, -/turf/simulated/floor/wood, -/area/template_noop) -"ues" = ( -/obj/machinery/button/remote/airlock{ - dir = 1; - id = "stolenlock"; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 8; - pixel_y = -22 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"ueu" = ( -/obj/machinery/door/window/brigdoor/southright{ - name = "Kitchen"; - req_access = list(300) - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"ueO" = ( -/turf/simulated/shuttle/wall/no_join{ - base_state = "orange"; - icon = 'icons/turf/shuttle_orange.dmi'; - icon_state = "orange" - }, -/area/survivalpod/superpose/ScienceShip) -"ufh" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ugc" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ugM" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ugN" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/curtain/bed{ - name = "Bathroom curtain"; - icon_state = "open"; - opacity = 0; - dir = 2; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"uhc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance"; - req_access_txt = "201" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"uhd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uhr" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"uhA" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"uhF" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"uhM" = ( -/obj/machinery/computer/crew{ - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uhP" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"uhQ" = ( -/obj/item/device/flashlight/flare, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"uib" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/hyper, -/obj/item/weapon/cell/potato, -/obj/structure/window/reinforced, -/obj/item/weapon/cell/slime, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uig" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"uij" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/yellowdouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"uiv" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"uiD" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uiT" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-10" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"uiX" = ( -/turf/simulated/floor/wood, -/area/template_noop) -"uiY" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uje" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"ujh" = ( -/turf/simulated/shuttle/wall/dark, -/area/survivalpod/superpose/TradingShip) -"ujk" = ( -/obj/structure/table/bench/sifwooden, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"ujI" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ukf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"uko" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"ukN" = ( -/obj/structure/tubes, -/obj/machinery/icecream_vat, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ukP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/ScienceShip) -"ukX" = ( -/obj/machinery/librarycomp, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ukY" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"ulf" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 8; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"ulH" = ( -/turf/simulated/wall/phoron, -/area/template_noop) -"ulI" = ( -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ulT" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/structure/closet/crate/solar, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ulU" = ( -/obj/machinery/newscaster{ - pixel_y = 29 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"umd" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"umB" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/cell/high, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"umC" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/CrashedInfestedShip) -"unL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"unS" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"uoy" = ( -/obj/random/plushie, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"uoL" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/weapon/weldpack, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"upo" = ( -/obj/structure/table/standard, -/obj/random/soap, -/obj/random/soap, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"upv" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"upy" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"upA" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"uqb" = ( -/obj/random/maintenance/clean, -/obj/fire, -/obj/item/trash/material/circuit, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"uqX" = ( -/obj/structure/shuttle/engine/router, -/turf/simulated/wall/shull, -/area/template_noop) -"uqZ" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"urh" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"urC" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"urJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"usN" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/paper_bin{ - pixel_y = 5 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"usP" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"usV" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"uti" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"utt" = ( -/obj/machinery/door/airlock/maintenance/rnd{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/ScienceShip) -"utw" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"utI" = ( -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"utK" = ( -/obj/item/weapon/material/fishing_net, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"utS" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/under/suit_jacket/burgundy, -/obj/item/clothing/shoes/dress{ - pixel_y = -9 - }, -/obj/item/clothing/mask/dolphin, -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MethLab) -"uui" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized{ - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"uuk" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor2, -/area/template_noop) -"uuC" = ( -/obj/machinery/autolathe, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"uuF" = ( -/obj/item/weapon/beach_ball, -/turf/simulated/floor/water/deep/pool, -/area/template_noop) -"uvi" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/o2{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"uvB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"uvD" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/head/bearpelt, -/obj/item/clothing/head/bowler, -/obj/item/clothing/head/caphat/cap, -/obj/item/clothing/head/beaverhat, -/obj/item/clothing/head/beret/centcom, -/obj/item/clothing/head/beret/sec, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/petehat, -/obj/item/clothing/head/collectable/pirate, -/obj/item/clothing/head/collectable/wizard, -/obj/item/clothing/head/collectable/xenom, -/obj/item/clothing/head/pin/flower/violet, -/obj/item/clothing/head/pin/flower/blue, -/obj/item/clothing/head/pin/flower/orange, -/obj/item/clothing/head/pin/flower/pink, -/obj/item/clothing/head/justice, -/obj/item/clothing/head/justice/blue, -/obj/item/clothing/head/justice/green, -/obj/item/clothing/head/justice/pink, -/obj/item/clothing/head/justice/yellow, -/obj/item/clothing/head/philosopher_wig, -/obj/item/clothing/head/plaguedoctorhat, -/obj/item/clothing/head/xenos, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uvO" = ( -/obj/structure/table/standard, -/obj/machinery/camera{ - c_tag = "Security Checkpoint"; - dir = 1; - network = list("Research") - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"uwf" = ( -/obj/structure/table/standard, -/obj/item/seeds/ambrosiavulgarisseed, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"uwm" = ( -/obj/effect/floor_decal/rust/mono_rusted3, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"uwv" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"uwD" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/tape_roll, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"uxZ" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uyW" = ( -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"uAe" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uBk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/teal, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"uBs" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"uBz" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"uBA" = ( -/obj/item/weapon/storage/belt, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"uBG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"uBV" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"uCx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"uCB" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = "splock" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"uDb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"uDq" = ( -/obj/item/taperoll/medical, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"uDN" = ( -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/ScienceShip) -"uDS" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"uDZ" = ( -/obj/structure/closet/crate/bin{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/structure/reagent_dispensers/water_cooler/full{ - pixel_x = -10; - pixel_y = 12 - }, -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"uEC" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"uEN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uER" = ( -/obj/structure/table/bench/wooden, -/turf/simulated/wall/wood, -/area/template_noop) -"uEV" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/pill_bottle/dice, -/obj/item/weapon/storage/dicecup, -/obj/item/weapon/storage/dicecup, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"uEW" = ( -/obj/machinery/door/airlock/glass_engineering{ - name = "Engineering"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"uEY" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/book/tome/imbued, -/obj/item/weapon/digestion_remains/skull/unathi, -/obj/item/device/soulstone, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"uFg" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/survivalpod/superpose/WoodenCamp) -"uFr" = ( -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uFv" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - hackProof = 1; - id_tag = "Teshnomancer_doors"; - maxhealth = 8000000000; - normalspeed = 0; - req_one_access = list(300); - secured_wires = 1 - }, -/obj/structure/fans/hardlight/colorable{ - color = "#99ccff"; - light_color = "#99ccff" - }, -/obj/machinery/light/floortube{ - dir = 4 - }, -/obj/machinery/door/blast/puzzle{ - desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors."; - id = "Teshnomancer_frontdoor"; - name = "Heavy Duty blast door" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"uFJ" = ( -/obj/item/device/gps/computer, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"uFK" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"uGA" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uHc" = ( -/obj/item/weapon/stool, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"uHB" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uHE" = ( -/turf/simulated/wall/shull, -/area/template_noop) -"uIc" = ( -/obj/machinery/appliance/cooker/fryer, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"uIn" = ( -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/CultShip) -"uIW" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/machinery/light, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"uJC" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"uJL" = ( -/obj/random/maintenance/engineering, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uJY" = ( -/obj/structure/table/woodentable, -/obj/item/pizzavoucher, -/turf/simulated/floor/wood, -/area/template_noop) -"uKg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"uKX" = ( -/obj/machinery/light, -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/storage/bag/chemistry, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"uLA" = ( -/obj/structure/bed/chair/wood/wings, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"uMf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"uMs" = ( -/obj/structure/bed/chair/bay/chair/padded/purple{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 3; - pixel_y = -28 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 3; - pixel_y = -38 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"uMz" = ( -/obj/item/weapon/coin/silver, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"uMH" = ( -/obj/structure/closet/crate/medical, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"uMP" = ( -/obj/machinery/door/airlock{ - name = "Charge Station" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"uMV" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/template_noop) -"uNa" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"uNn" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/medical, -/turf/simulated/floor/lino, -/area/survivalpod) -"uNp" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"uOD" = ( -/obj/item/trash/syndi_cakes, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"uOQ" = ( -/obj/structure/bed/double/padded, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"uOU" = ( -/obj/fire, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"uPv" = ( -/obj/item/weapon/card/id/external, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"uPN" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/toy/plushie/borgplushie/medihound, -/turf/simulated/floor/lino, -/area/survivalpod) -"uQc" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"uQn" = ( -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"uQY" = ( -/obj/effect/floor_decal/spline/plain, -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"uRF" = ( -/obj/structure/toilet, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"uRL" = ( -/obj/structure/barricade, -/obj/effect/floor_decal/steeldecal/steel_decals_central5, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"uRX" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"uSf" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/reagent_containers/dropper, -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"uSs" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"uSI" = ( -/obj/item/bodybag, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"uSV" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/power/apc/alarms_hidden{ - dir = 8; - pixel_x = -20 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"uTm" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"uTU" = ( -/obj/machinery/power/generator{ - anchored = 1; - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"uUw" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"uUO" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"uVa" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"uWk" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/deck/cards{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/weapon/deck/cah{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/weapon/deck/holder{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = 1; - pixel_y = -1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"uWB" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "estrella_pump" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"uXs" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"uXD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/chemical_dispenser/full, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"uXM" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"uYe" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"uYF" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/condimentbottles, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/structure/curtain/open/bed, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"uZJ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"uZN" = ( -/obj/machinery/light/floortube/flicker{ - dir = 8; - pixel_x = -3 - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"uZW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"vak" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"vaN" = ( -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"vby" = ( -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"vcm" = ( -/turf/simulated/floor, -/area/template_noop) -"vcM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"vcN" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"vcU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"vdn" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"veQ" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"veW" = ( -/obj/structure/bed/chair/sofa/brown, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"veX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"vfl" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/tape_roll, -/obj/item/weapon/tape_roll, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/storage/fancy/markers, -/obj/item/weapon/storage/fancy/markers, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/hand_labeler, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vfw" = ( -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vfN" = ( -/obj/effect/decal/remains/tajaran, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"vgs" = ( -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"vgJ" = ( -/obj/machinery/mecha_part_fabricator, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vhi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"vhD" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 10 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"vhF" = ( -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"vig" = ( -/obj/machinery/door/blast/angled_shutter{ - dir = 4; - id = "rat" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"viG" = ( -/obj/effect/rune, -/obj/item/weapon/cat_box/black, -/turf/simulated/floor/cult, -/area/template_noop) -"vjk" = ( -/obj/structure/reagent_dispensers/acid{ - pixel_x = 30 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vjn" = ( -/obj/structure/closet/walllocker_double/south{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/carpet/blue, -/area/template_noop) -"vjV" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/old_tile/white, -/area/survivalpod/superpose/MethLab) -"vkx" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/template_noop) -"vkJ" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/maintenance/engineering, -/obj/random/maintenance/clean, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"vls" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"vlt" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"vlO" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"vma" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"vmn" = ( -/obj/structure/grille/cult, -/turf/template_noop, -/area/survivalpod/superpose/DemonPool) -"vmM" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/wood/alt{ - color = "red" - }, -/area/template_noop) -"vnh" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vnt" = ( -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vnZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/template_noop) -"voj" = ( -/obj/effect/floor_decal/industrial/danger/full, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"voH" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"voQ" = ( -/obj/item/weapon/mining_scanner, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/void/mining, -/obj/item/clothing/head/helmet/space/void/mining, -/obj/structure/table/rack/shelf/steel, -/obj/item/device/suit_cooling_unit, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vpa" = ( -/obj/item/weapon/reagent_containers/dropper, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"vpK" = ( -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/template_noop) -"vpO" = ( -/obj/machinery/door/airlock/phoron, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"vpR" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/chainsaw, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/extinguisher, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"vpY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"vqd" = ( -/obj/machinery/vending/foodasian, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vqj" = ( -/obj/structure/fence/corner, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"vqP" = ( -/turf/simulated/shuttle/floor, -/area/survivalpod) -"vrE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/chem_master/condimaster, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vrM" = ( -/obj/structure/table/rack/shelf, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"vsn" = ( -/obj/effect/floor_decal/borderfloorwhite/corner, -/obj/effect/floor_decal/corner/red/bordercorner, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"vst" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vsG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"vts" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"vtt" = ( -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"vtN" = ( -/obj/item/device/tape/random, -/obj/item/device/taperecorder, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/structure/table/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vuA" = ( -/obj/machinery/shower{ - dir = 8 - }, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vuN" = ( -/obj/machinery/disperser/back{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"vuR" = ( -/obj/effect/floor_decal/techfloor, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"vve" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/fitness/heavy/lifter, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"vvq" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vvr" = ( -/obj/item/stack/material/lead{ - amount = 30 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vvE" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 4; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"vvK" = ( -/obj/structure/bed/chair/oldsofa/corner, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"vvX" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4; - id_tag = "frontgate" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"vvY" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"vwi" = ( -/obj/structure/dispenser{ - phorontanks = 0 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"vwF" = ( -/obj/item/clothing/accessory/storage/black_drop_pouches, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vwH" = ( -/obj/structure/particle_accelerator/fuel_chamber{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"vwJ" = ( -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MethLab) -"vwO" = ( -/turf/simulated/gore, -/area/survivalpod/superpose/DemonPool) -"vwY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"vxb" = ( -/obj/machinery/vending/event/costume, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"vxG" = ( -/obj/item/weapon/module/power_control, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"vxV" = ( -/obj/machinery/light/small, -/obj/item/weapon/ore/diamond, -/obj/structure/sign/goldenplaque{ - desc = "Done No Harm."; - name = "Best Doctor 2552"; - pixel_y = -32 - }, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"vxY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"vys" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/cult, -/area/template_noop) -"vyG" = ( -/obj/structure/table/marble{ - color = "#B03A2E" - }, -/obj/random/soap{ - pixel_y = 5 - }, -/obj/random/soap, -/obj/item/weapon/towel/random{ - pixel_y = 4 - }, -/obj/item/weapon/towel/random{ - pixel_y = 4 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"vzs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vzu" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"vAB" = ( -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_x = -24; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"vAF" = ( -/obj/machinery/disperser/back{ - dir = 8 - }, -/obj/structure/ship_munition/disperser_charge/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"vBi" = ( -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/cult, -/area/template_noop) -"vBF" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"vCe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"vCM" = ( -/obj/item/weapon/storage/firstaid/regular, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vDc" = ( -/obj/structure/table/standard, -/obj/item/weapon/paper{ - desc = "Gladstone for the last fucking time, We have crowbars for a REASON. Stop breaking in through the goddamn windows! We big red shiny doors for god's sakes!" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"vDl" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"vDX" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vEB" = ( -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"vEG" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"vFo" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/ScienceShip) -"vFu" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"vFy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"vFP" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/floor/wood, -/area/template_noop) -"vGa" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/template_noop) -"vGr" = ( -/obj/machinery/crystal/lava, -/turf/simulated/floor/lava, -/area/template_noop) -"vHx" = ( -/obj/item/frame/apc, -/turf/simulated/floor/lino, -/area/survivalpod/superpose/Dinner) -"vHL" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain, -/obj/item/weapon/pen/chameleon, -/obj/item/device/gps/advanced/science, -/obj/machinery/button/remote/blast_door{ - id = "estrella_blast"; - name = "remote blast shielding control"; - pixel_x = -1; - pixel_y = -26 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"vHX" = ( -/obj/structure/table/standard, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vHY" = ( -/turf/simulated/goreeyes, -/area/template_noop) -"vIX" = ( -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"vJk" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"vJp" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 4; - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"vJU" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vKc" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vKz" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"vKD" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"vKZ" = ( -/obj/item/pizzabox/meat{ - pixel_y = 10 - }, -/obj/structure/table/reinforced, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"vLo" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vLF" = ( -/obj/machinery/mech_recharger, -/obj/mecha/medical/odysseus/old, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vLM" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"vMs" = ( -/obj/structure/bed/chair/wood, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vNc" = ( -/obj/machinery/door/airlock/phoron, -/obj/structure/fans/hardlight/colorable/abductor, -/turf/simulated/shuttle/plating, -/area/template_noop) -"vNz" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"vND" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/table/reinforced, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"vNW" = ( -/obj/machinery/seed_storage/garden{ - dir = 1; - hacked = 1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod) -"vOb" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"vOq" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/WoodenCamp) -"vOs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"vOz" = ( -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"vON" = ( -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"vPl" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/surgery, -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vPq" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall, -/area/survivalpod/superpose/MethLab) -"vPJ" = ( -/obj/item/weapon/stool, -/obj/effect/floor_decal/rust, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"vPQ" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"vPT" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"vQf" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vQj" = ( -/obj/item/weapon/cell/super, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"vQE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"vQH" = ( -/obj/structure/fence/corner{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"vQI" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"vQO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/CultShip) -"vRa" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/white/border, -/obj/machinery/computer/transhuman/designer{ - dir = 1; - req_access = list(300) - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"vRg" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/fruitgland, -/obj/item/weapon/material/knife/hook, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"vRi" = ( -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/device/starcaster_news, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/template_noop) -"vRq" = ( -/obj/machinery/camera{ - c_tag = "Workshop Storage"; - dir = 4; - network = list("Research") - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"vRZ" = ( -/obj/structure/closet/crate/freezer, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"vSa" = ( -/obj/structure/bed/chair/comfy, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"vSb" = ( -/obj/fire, -/obj/item/trash/material/device, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"vSk" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vSq" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"vSC" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/template_noop) -"vTz" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vTW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_tgmc/medical_glass{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"vUr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"vUu" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/head/helmet/space/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/clothing/shoes/boots/duty, -/obj/item/clothing/glasses/eyepatch, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"vUS" = ( -/obj/structure/table/bench/wooden, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/WoodenCamp) -"vVC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"vVH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/closet, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"vWo" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"vWB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"vWK" = ( -/obj/structure/cryofeed, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/CrashedInfestedShip) -"vWP" = ( -/obj/machinery/door/blast/angled_shutter{ - id = "wolfsnake" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"vWT" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/ert/specialops, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"vXi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"vXz" = ( -/obj/structure/table/survival_pod, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vYf" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"vYq" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/obj/fire, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"vYu" = ( -/obj/structure/table/woodentable, -/obj/item/trash/candle, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"vYO" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/vending/foodstuffing, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vYQ" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_r" - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"vZF" = ( -/mob/living/simple_mob/vore/lamia, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"vZQ" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vZT" = ( -/obj/structure/grille/rustic, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"vZU" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair/backed_red{ - dir = 1 - }, -/obj/machinery/button/remote/airlock{ - dir = 1; - id = "splock"; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 8; - pixel_y = -22 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"vZV" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/template_noop) -"wak" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod) -"waB" = ( -/obj/item/stack/cable_coil, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/Dinner) -"waG" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"waQ" = ( -/obj/random/maintenance/cargo, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"wcD" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/table/reinforced, -/obj/machinery/door/window/northright{ - dir = 4; - name = "Medical booth" - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"wdf" = ( -/obj/structure/table/rack, -/obj/item/weapon/material/knife/ritual, -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/head/soft/solgov/veteranhat, -/obj/item/clothing/under/swimsuit/fluff/penelope, -/obj/item/weapon/makeover, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"wdk" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_y = 32 - }, -/turf/template_noop, -/area/survivalpod) -"wdm" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CultShip) -"wdC" = ( -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"wdD" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/weapon/pen/red{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/weapon/pen, -/obj/item/weapon/folder/red, -/obj/item/weapon/folder/red, -/obj/item/weapon/folder/red, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"weg" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"wes" = ( -/obj/structure/table/rack, -/obj/structure/loot_pile/maint/boxfort, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"weN" = ( -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"weP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/mecha/working/ripley/firefighter, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wfe" = ( -/obj/machinery/door/airlock/angled_tgmc/security, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "xrlock" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"wgq" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"wgA" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"wgK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/chair/sofa, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"whZ" = ( -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/template_noop) -"wiQ" = ( -/obj/machinery/power/generator, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"wiX" = ( -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"wjq" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"wkp" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "SP-CargoHatch"; - locked = 1; - name = "Rear Hatch" - }, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 4; - id = "SP-CargoHatch"; - name = "Rear Hatch Control"; - pixel_x = -26; - req_access = null; - specialfunctions = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wkD" = ( -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"wkN" = ( -/obj/item/organ/internal/lungs/vox, -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/obj/structure/curtain/black, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"wlA" = ( -/obj/structure/table/steel, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/wrench, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wlI" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod) -"wlX" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"wmh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wmF" = ( -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"wnc" = ( -/obj/machinery/ai_status_display{ - pixel_y = 32 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"wnE" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/hopdouble, -/turf/simulated/floor/wood, -/area/template_noop) -"wnI" = ( -/obj/item/clothing/accessory/poncho/thermal, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wnJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"won" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/shoes/boots/winter, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"woF" = ( -/obj/item/weapon/storage/bag/circuits, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"woT" = ( -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"wph" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"wqi" = ( -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/survivalpod/superpose/HydroCave) -"wqj" = ( -/obj/item/trash/material/metal, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"wqk" = ( -/turf/simulated/wall/solidrock, -/area/template_noop) -"wql" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/plating, -/area/template_noop) -"wqs" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/salvageable/personal, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"wqz" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"wqK" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/medical, -/obj/structure/curtain/open/privacy, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"wra" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"wrd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"wre" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"wrm" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wrx" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"wrH" = ( -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"wrX" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"wsc" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/white/border{ - dir = 10 - }, -/obj/machinery/clonepod/transhuman/full, -/turf/simulated/shuttle/floor, -/area/survivalpod) -"wso" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"wsp" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/CultShip) -"wsv" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wsY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"wtD" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 8; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wtM" = ( -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"wvs" = ( -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"wvy" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"wvZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wwo" = ( -/obj/structure/barricade, -/turf/simulated/floor, -/area/survivalpod/superpose/MethLab) -"wwH" = ( -/obj/structure/table/alien/blue, -/turf/simulated/floor/atoll, -/area/template_noop) -"wwI" = ( -/obj/machinery/door/window/survival_pod, -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wwM" = ( -/obj/item/weapon/stool, -/obj/random/projectile/scrapped_shotgun, -/obj/random/cash, -/obj/machinery/light/small, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"wwQ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/freezer, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wxa" = ( -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "SP-Cell2"; - name = "Cell Door"; - pixel_x = -25; - pixel_y = 8; - req_one_access = list(2,4) - }, -/obj/structure/closet/walllocker_double/survival/south, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"wxO" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"wyg" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"wym" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/stock_parts/spring{ - pixel_x = 5; - pixel_y = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"wyB" = ( -/obj/structure/sign/science, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"wzw" = ( -/obj/structure/grille/broken/cult, -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/DemonPool) -"wzD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/ScienceShip) -"wzN" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/reagent_containers/food/snacks/clownburger, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"wzT" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 8; - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wAr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wAw" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"wAy" = ( -/obj/structure/table/bench/sifwooden, -/turf/simulated/floor/outdoors/rocks, -/area/survivalpod/superpose/Farm) -"wAz" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"wAC" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/cedouble, -/turf/simulated/floor/carpet/oracarpet, -/area/template_noop) -"wBt" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"wBG" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"wBL" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/cult, -/area/template_noop) -"wBM" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wCa" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"wCu" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - on = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wCB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"wCE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"wDk" = ( -/turf/simulated/floor/water/pool, -/area/template_noop) -"wDp" = ( -/obj/structure/inflatable/door, -/turf/simulated/floor/plating, -/area/template_noop) -"wDA" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"wDQ" = ( -/obj/machinery/door/airlock/multi_tile/glass, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"wEa" = ( -/obj/structure/table/standard, -/obj/item/stack/material/steel{ - amount = 2 - }, -/obj/item/stack/material/steel{ - amount = 2 - }, -/obj/item/stack/material/glass{ - amount = 15 - }, -/obj/item/stack/material/glass{ - amount = 15 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wEn" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"wEq" = ( -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"wEC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wEE" = ( -/turf/simulated/floor/gorefloor, -/area/survivalpod/superpose/HellCave) -"wET" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/floortube/flicker{ - pixel_y = 13 - }, -/turf/simulated/floor/cult, -/area/template_noop) -"wEV" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/red, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"wFe" = ( -/obj/fire, -/obj/item/trash/material/metal, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"wFf" = ( -/obj/structure/table/rack/shelf, -/obj/item/weapon/gun/energy/ionrifle/pistol, -/obj/item/weapon/gun/energy/ionrifle, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wFs" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"wFu" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wFw" = ( -/obj/machinery/power/thermoregulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"wGb" = ( -/obj/item/weapon/bone/skull/unknown, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"wGh" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"wGW" = ( -/obj/fiftyspawner/sblucarpet, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wHu" = ( -/obj/structure/closet/secure_closet/medical3, -/obj/item/device/gps/medical, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wHx" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wHy" = ( -/obj/structure/table/fancyblack, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"wHD" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/Dinner) -"wHW" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wIb" = ( -/turf/simulated/wall/r_lead, -/area/template_noop) -"wIj" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/table/sifwooden_reinforced, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"wIv" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/Dinner) -"wIy" = ( -/obj/structure/tubes, -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wJr" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wKl" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/item/trash/material/circuit, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"wKp" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; - name = "Station Intercom (Brig Radio)"; - pixel_y = -21; - wires = 7 - }, -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/ScienceShip) -"wKL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"wLt" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Pool" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Pool" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Pool" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"wLu" = ( -/obj/structure/urinal{ - pixel_y = 24 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"wLG" = ( -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"wLV" = ( -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "fridge_sci"; - icon_contents = "chem"; - icon_state = "fridge_sci"; - name = "Phoron storage"; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wMH" = ( -/obj/item/weapon/circuitboard/mass_driver, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wMI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"wMJ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"wMK" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"wNM" = ( -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/CrashedInfestedShip) -"wNV" = ( -/obj/machinery/disperser/back{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/template_noop) -"wOU" = ( -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"wPm" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/CultShip) -"wPT" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"wQC" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"wQH" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"wQX" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"wRf" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wRm" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/floor/atoll, -/area/template_noop) -"wSy" = ( -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"wTh" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - categories = 3; - dir = 8; - name = "hacked Hot Drinks machine"; - prices = list() - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod) -"wTi" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"wTj" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"wTm" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee{ - dir = 8; - pixel_y = 0; - pixel_x = 4 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"wTo" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"wTp" = ( -/obj/structure/cult/talisman, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"wTs" = ( -/mob/living/simple_mob/vore/demonAI/covern{ - faction = "neutral" - }, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/DemonPool) -"wTH" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"wTW" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/structure/table/rack/shelf, -/obj/item/weapon/reagent_containers/glass/bucket/wood{ - pixel_y = 6 - }, -/obj/item/weapon/reagent_containers/glass/bucket/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"wUg" = ( -/turf/simulated/floor/plating, -/area/survivalpod/superpose/ScienceShip) -"wUr" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/yellowdouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"wUy" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod{ - id_tag = "splock" - }, -/obj/structure/barricade/planks, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"wUF" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"wUM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"wUX" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/cliff/automatic{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"wVz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"wVA" = ( -/obj/item/weapon/circuitboard/firealarm, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wVE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"wVK" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"wWO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"wWX" = ( -/turf/simulated/floor/redgrid/off, -/area/template_noop) -"wXg" = ( -/obj/item/device/taperecorder, -/obj/item/device/tape/random, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = -21 - }, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod) -"wXs" = ( -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "Teshnomancer_frontdoor"; - name = "Front Door"; - pixel_x = -26; - req_one_access = list(300) - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"wYc" = ( -/turf/simulated/floor/tiled, -/area/template_noop) -"wYk" = ( -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/closet/crate/wooden, -/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/blackcandle_box, -/obj/item/weapon/storage/fancy/blackcandle_box, -/obj/item/weapon/storage/fancy/whitecandle_box, -/obj/item/weapon/storage/fancy/whitecandle_box, -/obj/item/weapon/flame/lighter/zippo, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"wYs" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"wYv" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/structure/sign/vacuum{ - desc = "A beacon used by a teleporter."; - icon = 'icons/obj/radio.dmi'; - icon_state = "beacon"; - name = "tracking beacon" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wYI" = ( -/obj/structure/railing/grey{ - dir = 1; - health = 8000000000; - maxhealth = 8000000000; - name = "durable grey railing" - }, -/obj/machinery/r_n_d/server{ - health = 800000000; - id_with_download_string = "300"; - id_with_upload_string = "300"; - name = "Technomancer R&D Server"; - produces_heat = 0; - server_id = 300; - use_power = 0 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"wYV" = ( -/obj/structure/plasticflaps/mining, -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"wZm" = ( -/obj/machinery/recharge_station, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/template_noop) -"wZr" = ( -/mob/living/simple_mob/vore/aggressive/deathclaw, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"wZA" = ( -/obj/item/weapon/reagent_containers/food/drinks/shaker{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/teapot{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"xaq" = ( -/obj/item/weapon/reagent_containers/blood, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/deck/tarot, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xbm" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"xbr" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"xbw" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - icon_state = "map_vent_out"; - use_power = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/template_noop) -"xbO" = ( -/obj/structure/table/glass, -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xbQ" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/random/maintenance/engineering, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xbR" = ( -/obj/structure/coatrack, -/obj/machinery/button/windowtint{ - id = "h-living"; - pixel_x = -27 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xcc" = ( -/obj/machinery/vending/fitness{ - categories = 3; - name = "hacked SweatMAX"; - prices = list() - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"xda" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"xdd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/obj/machinery/atmospherics/unary/vent_pump, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xdf" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xdn" = ( -/turf/simulated/wall/log_sif, -/area/survivalpod/superpose/WoodenCamp) -"xdq" = ( -/obj/structure/grille/cult, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/survivalpod/superpose/DemonPool) -"xec" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"xed" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/CrashedInfestedShip) -"xeq" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"xev" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/wall/dark, -/area/template_noop) -"xfs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xfK" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/steeldecal/steel_decals3, -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"xfO" = ( -/obj/random/maintenance/medical, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"xfR" = ( -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"xgc" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/CrashedInfestedShip) -"xgg" = ( -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"xgw" = ( -/obj/structure/fans, -/turf/simulated/floor/wood, -/area/template_noop) -"xhp" = ( -/turf/simulated/mineral/ignore_mapgen/cave, -/area/template_noop) -"xhy" = ( -/obj/structure/sign/biohazard, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"xhB" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"xhI" = ( -/obj/item/trash/cigbutt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"xhJ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/fancy/candle_box, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"xhP" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = -32 - }, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/fuzzy, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/suit/iasexy, -/obj/item/clothing/under/sexybunny_white/sexybunny_black, -/obj/item/clothing/under/dress/maid/sexy, -/obj/item/clothing/head/collectable/rabbitears, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/ScienceShip) -"xhW" = ( -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"xhX" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/CrashedInfestedShip) -"xhY" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/box/bodybags, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/device/sleevemate, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/device/defib_kit/compact/loaded, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/device/binoculars, -/obj/item/device/bluespaceradio, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/weapon/storage/backpack/dufflebag/emt, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xij" = ( -/obj/structure/sign/science{ - pixel_y = 32 - }, -/turf/template_noop, -/area/template_noop) -"xiw" = ( -/obj/machinery/vending/tool{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/CrashedInfestedShip) -"xiy" = ( -/obj/machinery/vending/cola{ - contraband = null; - products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind=0,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb=0,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist=0,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up=0,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea=0,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice=0,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale=0) - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"xiW" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"xjd" = ( -/obj/item/stack/material/cloth{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"xjj" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/Farm) -"xjk" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/Dinner) -"xjx" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"xjB" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xkk" = ( -/obj/machinery/mecha_part_fabricator/pros, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"xkx" = ( -/obj/fire, -/obj/fire, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"xky" = ( -/obj/structure/constructshell/cult, -/turf/simulated/floor/gorefloor2, -/area/survivalpod/superpose/HellCave) -"xkN" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xlj" = ( -/obj/effect/floor_decal/techfloor, -/obj/fire, -/obj/fire, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/CrashedInfestedShip) -"xlt" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xlI" = ( -/obj/structure/flora/tree/jungle, -/turf/simulated/floor/outdoors/grass/sif, -/area/survivalpod/superpose/Farm) -"xmy" = ( -/obj/item/weapon/dice, -/obj/structure/table/hardwoodtable, -/turf/simulated/floor/carpet, -/area/template_noop) -"xmG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xmO" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"xmQ" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/microwave/advanced{ - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"xmX" = ( -/turf/simulated/floor/cult, -/area/survivalpod/superpose/HellCave) -"xnS" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"xoF" = ( -/obj/structure/closet/secure_closet{ - icon_broken = "hydrosecurebroken"; - icon_closed = "hydrosecure"; - icon_locked = "hydrosecure1"; - icon_off = "hydrosecureoff"; - icon_opened = "hydrosecureopen"; - icon_state = "hydrosecure"; - locked = 0; - name = "botanist's locker"; - req_access_txt = "201" - }, -/obj/item/clothing/mask/bandana, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"xoH" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"xpa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"xpH" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/ScienceShip) -"xpL" = ( -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/CrashedInfestedShip) -"xpM" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/structure/sign/deathsposal{ - desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; - name = "\improper DISPOSAL: LEADS TO EXTERIOR"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"xpR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/borderfloorwhite/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xqh" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 5 - }, -/turf/simulated/floor/carpet, -/area/template_noop) -"xqK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/machinery/suspension_gen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"xqL" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/CrashedInfestedShip) -"xri" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/medical, -/obj/structure/curtain/open/privacy, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xrs" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xry" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/cell/hyper, -/obj/random/coin, -/obj/random/cash/huge, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"xrZ" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"xsr" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/CrashedInfestedShip) -"xsC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xsH" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xty" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/storage/backpack/cultpack, -/obj/item/weapon/material/knife/ritual, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xtZ" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xuk" = ( -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"xup" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xuE" = ( -/obj/structure/railing/grey, -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/projectile/SVD, -/obj/item/ammo_magazine/m762svd, -/obj/item/ammo_magazine/m762svd, -/turf/simulated/floor/outdoors/rocks, -/area/template_noop) -"xvF" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xwj" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/item/device/flash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"xwu" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xwy" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"xxA" = ( -/obj/machinery/door/blast/angled_shutter{ - dir = 4; - id = "panther" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"xxE" = ( -/obj/effect/decal/remains/mouse, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"xxV" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"xxY" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"xyk" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xym" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xyL" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"xyN" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"xzd" = ( -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xzN" = ( -/obj/machinery/chem_master, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"xzW" = ( -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"xAm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xAN" = ( -/obj/item/seeds/pumpkinseed, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xAW" = ( -/obj/structure/closet/secure_closet/miner{ - locked = 0 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xBc" = ( -/obj/effect/catwalk_plated/white, -/turf/simulated/floor/tiled/steel_dirty{ - color = "grey" - }, -/area/template_noop) -"xBf" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"xBt" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/ScienceShip) -"xBE" = ( -/obj/structure/closet/cabinet, -/turf/simulated/floor/wood, -/area/template_noop) -"xBL" = ( -/obj/fire, -/obj/fire, -/turf/simulated/floor/lava/outdoors, -/area/survivalpod/superpose/DemonPool) -"xCa" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/rust, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"xCe" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"xCM" = ( -/obj/structure/cult/forge, -/turf/simulated/floor/cult, -/area/survivalpod/superpose/DemonPool) -"xDo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xDH" = ( -/obj/item/device/pda, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"xDI" = ( -/obj/machinery/appliance/cooker/fryer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xEh" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/north, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/HydroCave) -"xEi" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/organ_printer/flesh/full, -/obj/item/device/radio/intercom/department/medbay{ - pixel_y = -21 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod) -"xEm" = ( -/obj/machinery/light, -/obj/structure/table/standard, -/obj/item/weapon/soap, -/obj/item/weapon/towel{ - color = "#0000FF" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xFn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xFQ" = ( -/obj/structure/table/fancyblack, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xFS" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/template_noop) -"xGz" = ( -/obj/structure/fence/corner{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/Farm) -"xGX" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xHd" = ( -/obj/item/frame/apc, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 22 - }, -/obj/random/junk, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"xHn" = ( -/obj/item/weapon/material/knife/ritual, -/obj/structure/table/fancyblack, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xHG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"xIV" = ( -/obj/machinery/power/thermoregulator/southerncross{ - dir = 4; - pixel_x = -28 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod) -"xIY" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xJd" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - layer = 2.6 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"xJe" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/template_noop) -"xJq" = ( -/obj/structure/table/standard, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/clothing/mask/surgical, -/obj/item/weapon/surgical/retractor{ - pixel_y = 6 - }, -/obj/item/weapon/surgical/scalpel, -/obj/item/weapon/surgical/surgicaldrill, -/obj/item/weapon/surgical/circular_saw, -/obj/item/stack/nanopaste, -/obj/item/weapon/surgical/hemostat{ - pixel_y = 4 - }, -/obj/item/weapon/surgical/cautery{ - pixel_y = 4 - }, -/obj/item/weapon/surgical/FixOVein{ - pixel_x = -6; - pixel_y = 1 - }, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/weapon/surgical/bonesetter, -/obj/item/weapon/surgical/bonegel{ - pixel_x = 4; - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xJu" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/structure/curtain/open, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"xJA" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/coin/diamond, -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"xJC" = ( -/obj/structure/window/bay/phoronreinforced, -/turf/simulated/floor, -/area/template_noop) -"xJV" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dispenser{ - phorontanks = 0 - }, -/turf/simulated/floor/plating, -/area/template_noop) -"xKK" = ( -/obj/item/weapon/stool/baystool/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"xLE" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"xMg" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"xMm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xMt" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"xMD" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/structure/cliff/automatic{ - dir = 6 - }, -/turf/simulated/floor/outdoors/dirt, -/area/template_noop) -"xMG" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"xNr" = ( -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xNs" = ( -/turf/template_noop, -/area/survivalpod/superpose/CrashedInfestedShip) -"xNC" = ( -/obj/structure/fitness/weightlifter, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/boxing/gym, -/area/template_noop) -"xNH" = ( -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"xOd" = ( -/obj/structure/cult/talisman, -/obj/item/device/soulstone, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"xOf" = ( -/obj/structure/table/bench/wooden{ - pixel_x = -9 - }, -/obj/structure/flora/pottedplant/small{ - pixel_x = -9; - pixel_y = 10 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"xOI" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/pizzavoucher, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xOX" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id = "SP-Cell"; - name = "Cell Door" - }, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/floor/tiled/techmaint, -/area/template_noop) -"xPe" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/FieldLab) -"xQk" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/lightorange/border, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod) -"xQo" = ( -/obj/structure/grille/cult, -/turf/simulated/wall/cult, -/area/survivalpod/superpose/HellCave) -"xQE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/ScienceShip) -"xRh" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"xRq" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xRx" = ( -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"xRF" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xSc" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"xSr" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/modular_computer/laptop/preset/custom_loadout/elite, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/weapon/gun/projectile/pistol, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/storage/box/survival/comp{ - starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi) - }, -/turf/simulated/floor/carpet/bcarpet, -/area/template_noop) -"xSw" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"xTk" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"xTE" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"xTJ" = ( -/obj/structure/cult/talisman, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xTK" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/manual/hydroponics_pod_people, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/Farm) -"xTO" = ( -/obj/effect/floor_decal/chapel{ - dir = 4; - pixel_y = -16 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"xTV" = ( -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xUg" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"xUr" = ( -/obj/structure/closet/cabinet, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/toy, -/obj/random/toy, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"xUw" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1; - icon_state = "comfychair_preview" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"xUy" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/template_noop) -"xVh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/machinery/meter, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xVt" = ( -/obj/structure/table/steel_reinforced, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xVz" = ( -/obj/structure/sign/warning/engineering_access, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/template_noop) -"xVA" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xVN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xWf" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 8; - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"xWu" = ( -/obj/structure/inflatable/door, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"xXc" = ( -/obj/machinery/button/windowtint{ - id = "SP-Pool"; - pixel_y = -29 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/template_noop) -"xXW" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/random/maintenance/engineering, -/obj/fire, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"xYc" = ( -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"xYQ" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/lava, -/area/survivalpod/superpose/HellCave) -"xZo" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/WoodenCamp) -"xZI" = ( -/obj/machinery/r_n_d/protolathe, -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/floor/purple, -/area/survivalpod/superpose/ScienceShip) -"yaE" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/turf/simulated/floor, -/area/survivalpod/superpose/CrashedInfestedShip) -"yaZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ybc" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_l" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"ybe" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"ybm" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/bookcase/manuals/medical, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ybr" = ( -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/HydroCave) -"ybs" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ybM" = ( -/obj/machinery/porta_turret/alien{ - faction = "neutral" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/CultShip) -"ybX" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"ycw" = ( -/obj/structure/table/woodentable, -/obj/item/trash/tray, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"ycD" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/computer/rdservercontrol, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/ScienceShip) -"ycL" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"ydl" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"ydt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/CrashedInfestedShip) -"ydF" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/Dinner) -"ydL" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/FieldLab) -"ydP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/blue, -/area/survivalpod) -"yed" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"yej" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/steel_dirty, -/area/survivalpod/superpose/MethLab) -"yev" = ( -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"yez" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/template_noop) -"yeD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old_tile/green, -/area/survivalpod/superpose/MethLab) -"yeQ" = ( -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/CrashedInfestedShip) -"yfe" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/radio/emergency, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/bluespaceradio, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/device/binoculars, -/obj/item/device/perfect_tele, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/storage/pill_bottle/corophizine, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"yfA" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"ygs" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/template_noop) -"ygz" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"ygL" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"yhU" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"yhZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/kara, -/area/template_noop) -"yie" = ( -/obj/structure/closet/wardrobe/pjs, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"yii" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/template_noop) -"yis" = ( -/turf/template_noop, -/area/survivalpod/superpose/MethLab) -"yiH" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/blue, -/turf/simulated/shuttle/floor/voidcraft, -/area/template_noop) -"yjr" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/ScienceShip) -"yjM" = ( -/obj/structure/bookcase/bookcart, -/turf/simulated/floor/wood/alt/parquet, -/area/template_noop) -"ykk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"yku" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/template_noop) -"ykO" = ( -/obj/machinery/holosign/bar{ - id = "SP-baropen" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/template_noop) -"ykW" = ( -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/template_noop) -"ylk" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/overgrown{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ylL" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 6 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/HydroCave) -"ymd" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/template_noop) - -(1,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(2,1,1) = {" -ktQ -vIX -vIX -vIX -vIX -vIX -wJr -vIX -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -kFn -kzL -vIX -vIX -vIX -kFn -vIX -poX -pXr -ktQ -vIX -uYe -nAY -uYe -ljl -uYe -jNU -uYe -jNU -uYe -vIX -ktQ -vIX -kFn -ljl -uYe -ljl -ooR -ljl -uYe -ljl -kFn -vIX -ktQ -ljl -ljl -aiV -uYe -ljl -ykO -grU -guO -pzt -pzt -pzt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -hmh -hmh -hmh -dEQ -hmh -dEQ -hmh -hmh -ktQ -ljl -uYe -aiV -ljl -uYe -ljl -aiV -uYe -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(3,1,1) = {" -ktQ -vIX -ubm -ubm -ydl -ydl -cYi -cYi -cYi -cYi -hor -vIX -ktQ -vIX -pva -rio -iEQ -axU -bNX -bNX -bNX -wYV -xsH -xsH -ktQ -iJp -hxl -bjw -mqR -sPP -tCP -cqC -daD -okz -eTA -qyk -ktQ -iJp -xvF -udp -pHl -ljl -iEQ -cxo -ljl -jmZ -jmZ -qyk -ktQ -ljl -xDI -tFt -qII -nrh -cJg -iEQ -ibW -qJQ -mVT -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -rsf -dtF -gmc -pyD -pan -wRf -wRf -hmh -ktQ -rHR -jsw -wRf -rOc -wFf -dtt -wRf -wBM -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(4,1,1) = {" -ktQ -vIX -wFw -cYi -cYi -cYi -cYi -cYi -cYi -cYi -qUO -vIX -ktQ -iJp -mGP -lkW -xNr -jtI -jtI -jtI -jtI -vIX -pLO -lBN -ktQ -ljl -uiD -bjw -ezi -sPP -tCP -tCP -tCP -tCP -kPX -ljl -ktQ -ljl -yfe -cII -tFt -aDl -xNr -oCX -ljl -tFt -ryL -ljl -ktQ -ljl -hcO -tFt -klq -tFt -igs -xNr -uiX -uiX -uiX -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -tjL -ecn -ecn -ecn -ecn -wRf -wRf -nEd -ktQ -ljl -osB -rwO -adB -pEM -wRf -wRf -wRf -uCB -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -rZR -rZR -rZR -rZR -rZR -rZR -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(5,1,1) = {" -ktQ -vIX -vBF -cYi -ykW -wIb -xJC -wIb -uJC -cYi -cYi -vIX -ktQ -vIX -pva -tCB -xNr -jtI -qSf -jtI -rXd -vIX -wlA -lBN -ktQ -rHR -sYD -bjw -ezi -sPP -tCP -cqC -daD -okz -tCP -xUg -ktQ -rHR -ecV -enH -vWT -ljl -ccy -vDX -ljl -dmo -ljl -xUg -ktQ -rHR -lGp -tFt -rQp -tFt -ptv -xNr -iJA -ybX -hah -rWB -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -cND -uXs -cND -uXs -wRm -wRf -aRa -hmh -ktQ -ljl -xkk -rwO -uhP -vrM -wRf -wRf -egx -ljl -ktQ -ktQ -ktQ -ccQ -mgk -ktQ -ktQ -ktQ -rZR -rZR -pIr -kJA -ktQ -ktQ -ktQ -abV -pIr -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(6,1,1) = {" -ktQ -vIX -cYi -cYi -wIb -ovj -egE -llP -wIb -cYi -cYi -vIX -ktQ -vIX -pmC -bjw -xNr -gyJ -lDn -wwQ -vSk -vIX -aoX -vIX -ktQ -ljl -sQZ -bjw -nyP -sPP -tCP -cqC -daD -okz -tCP -ljl -ktQ -ljl -ljl -ljl -ljl -ljl -wSy -oLq -qJz -bjw -rnY -ljl -ktQ -ljl -nhW -tFt -lSb -tFt -igs -xNr -iJA -eGN -hah -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -wnc -ocl -cND -cND -hmh -bjO -wRf -dEQ -ktQ -rHR -brT -wRf -lJD -ktD -wRf -wRf -wRf -xUg -ktQ -ktQ -ktQ -fdy -naL -ktQ -ktQ -ktQ -rZR -nko -hOR -uHE -iru -xFS -oPZ -uHE -rug -nko -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(7,1,1) = {" -ktQ -aoX -cYi -psw -xJC -rUp -hWD -lCN -dlp -cYi -cYi -vIX -ktQ -aiV -jne -bjw -xNr -xNr -xNr -xNr -xNr -teo -gzW -wkp -ktQ -rHR -kZC -bjw -ezi -sPP -tCP -tCP -tCP -tCP -tCP -nAY -ktQ -rHR -dED -tCP -tCP -sgU -xNr -xNr -xNr -xNr -gzW -sTA -ktQ -ljl -aap -tFt -eMd -tFt -ljl -oLy -iJA -sFg -gsw -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -bWO -wwH -cND -eFO -hmh -wRf -dwr -hmh -ktQ -ljl -fqW -dms -ggx -pYg -wRf -cZt -rYG -aiV -ktQ -ktQ -ktQ -jlq -hiN -ktQ -ktQ -rZR -rZR -hOR -uHE -uHE -wWX -wWX -lUH -uHE -uHE -rug -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(8,1,1) = {" -ktQ -vIX -cYi -cYi -wIb -xJe -oPG -llP -wIb -cYi -cYi -vIX -ktQ -vIX -vIX -eVP -xjB -rVR -rVR -rVR -exa -xNr -gzW -gzu -ktQ -ljl -jZE -bjw -ezi -sPP -tCP -ljl -ljl -ljl -ljl -ljl -ktQ -ljl -xSr -lwH -lwH -ljl -fyJ -aQr -tNd -xUw -oMv -ljl -ktQ -ljl -gPj -tFt -tFt -tFt -bQS -xNr -iJA -tod -hah -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -kAV -ppH -cND -cND -hmh -ulU -rrm -dEQ -ktQ -ljl -wtD -jSe -iNO -jVq -wRf -wRf -uMs -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -rZR -jlq -uHE -uHE -sWl -wWX -wWX -wWX -sWl -uHE -uHE -hiN -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(9,1,1) = {" -ktQ -vIX -rbR -cYi -wOU -wIb -xJC -wIb -kyV -cYi -cYi -vIX -ktQ -vIX -eMa -cjw -sBk -voQ -rgK -jUA -pPz -tFt -ahE -qyk -ktQ -rHR -niA -bjw -ezi -sPP -tCP -ljl -wLu -tFt -tFt -xUg -ktQ -rHR -ljl -ljl -ljl -ljl -fyJ -aQr -tNd -xUw -uIW -xUg -ktQ -rWB -aGo -qxt -buN -biA -ljl -qDr -iJA -ybX -pLn -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -cND -tTX -cND -tTX -wRm -wRf -oXM -hmh -ktQ -rHR -sql -oLU -wzT -dlh -wRf -wHx -cRS -ljl -ktQ -ktQ -ktQ -aRf -nKt -ktQ -rZR -ktQ -ktQ -uHE -wWX -wWX -wWX -wWX -wWX -wWX -wWX -uHE -ktQ -ktQ -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(10,1,1) = {" -ktQ -vIX -rbR -cYi -cYi -cYi -cYi -cYi -cYi -cYi -cYi -vIX -ktQ -aoX -dtF -hFu -tFt -tFt -tFt -tFt -tpq -tFt -tFt -aiV -ktQ -ljl -jPN -bjw -fdh -tCP -tCP -jBK -tFt -ljl -jBK -ljl -ktQ -ljl -dED -tCP -tCP -sgU -xNr -bjw -bjw -bjw -bjw -ljl -ktQ -ljl -knL -hFu -tFt -vaN -nsj -xNr -uiX -uiX -uiX -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -kYH -wyg -fbo -fbo -juK -wRf -wRf -dEQ -ktQ -ljl -yhU -aiV -ljl -yhU -aiV -ljl -yhU -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -ccQ -tLS -uqX -uHE -uHE -oYf -uHE -oYf -uHE -uHE -uqX -tLS -mgk -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(11,1,1) = {" -ktQ -vIX -ubm -ubm -ydl -ydl -cYi -cYi -cYi -cYi -kYy -vIX -ktQ -vIX -ecV -kam -dUz -xAW -fQz -bmJ -qQJ -qzo -kmg -vIX -ktQ -iJp -fzN -bjw -ezi -pCb -wrX -ljl -yku -ljl -sEH -qyk -ktQ -iJp -xSr -lwH -lwH -ljl -rmo -hFV -fyN -eOx -sRM -qyk -ktQ -ljl -ecV -dYd -ukN -aCt -ljl -pjJ -oVg -koo -jfk -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -fxq -iNo -wRf -sEG -qSh -qUy -wRf -hmh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -quT -ktQ -gxF -rZR -uHE -jSG -uHE -cYi -oVL -oVL -oVL -oVL -oVL -cYi -uHE -jSG -uHE -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(12,1,1) = {" -ktQ -vIX -vIX -vIX -vIX -vIX -wJr -vIX -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -aiV -xMt -vIX -vIX -vIX -xMt -vIX -vIX -vIX -ktQ -vIX -kiX -pzt -itw -pzt -efF -ljl -yhU -ljl -xMt -vIX -ktQ -vIX -xMt -ljl -yhU -ljl -ooR -ljl -yhU -ljl -oxy -vIX -ktQ -ljl -ljl -aiV -yhU -ljl -ykO -grU -yhU -ljl -ljl -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hmh -hmh -hmh -hmh -dEQ -hmh -dEQ -hmh -hmh -ktQ -vIX -vIX -kFn -vIX -vIX -vIX -kFn -vIX -vIX -ktQ -ktQ -ktQ -sFk -ktQ -bTD -ktQ -nko -ktQ -uHE -cYi -cYi -ozT -oVL -ozT -cYi -cYi -uHE -ktQ -nko -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(13,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -dHt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vIX -bop -dwq -acE -dVK -lLn -bHr -doG -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -cYi -ozT -oVL -ozT -cYi -cYi -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(14,1,1) = {" -ktQ -vIX -aiV -vIX -vIX -aiV -vIX -vIX -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -kzL -vIX -mVN -caa -caa -boq -vIX -ktQ -vIX -vIX -aiV -vIX -aiV -vIX -vIX -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -aiV -vIX -vIX -grU -vIX -vIX -vIX -vIX -vIX -ktQ -cya -cya -cya -cya -cya -cya -cya -cya -cya -cya -cya -ktQ -cya -cya -cya -cya -cya -cya -cya -cya -cya -ktQ -ljl -uYe -ljl -uYe -ljl -uYe -aiV -uYe -ljl -ktQ -iJp -cgk -ifk -tFt -txz -kvl -tFt -bST -aoX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -cYi -uHE -jue -uHE -cYi -cYi -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(15,1,1) = {" -ktQ -vIX -kpk -hVV -vIX -kpk -hVV -vIX -pTl -jME -hiw -vIX -ktQ -vIX -jqZ -tCP -upv -xXc -vIX -arV -pxU -txD -txD -hTE -ktQ -vIX -xGX -tFt -inb -bjw -haL -vZV -vIX -igl -xOf -vIX -ktQ -vIX -dXj -qII -ohI -xKK -iEQ -mlT -tOS -lHE -nSp -vIX -ktQ -cya -lIQ -cYi -cYi -oqd -sPt -cYi -cYi -kxj -cYi -cya -ktQ -cya -oqd -cYi -kxj -cYi -cYi -cYi -cYi -cya -ktQ -rHR -hxl -vXz -aWn -ljl -fJV -akr -vZU -xUg -ktQ -vIX -mOn -sZq -vIX -vIX -vIX -ecq -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -uHE -uHE -uHE -wWX -uHE -uHE -uHE -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(16,1,1) = {" -ktQ -vIX -uiX -fJf -vIX -uiX -vjn -vIX -pTl -sKC -tin -aiV -ktQ -vIX -jqZ -tCP -bjw -aSS -ett -oef -mgw -txD -mTh -mMV -ktQ -vIX -lGp -tFt -pwl -bjw -mOW -pTV -vIX -eIQ -gkR -aiV -ktQ -vIX -fzk -tFt -nhQ -nJR -xNr -euE -lkn -pqN -izM -vIX -ktQ -cya -lIQ -cYi -cYi -oqd -mUW -cYi -cYi -oVQ -cYi -cya -ktQ -cya -bYB -cYi -jMj -cYi -poP -poP -dHt -cya -ktQ -ljl -mjX -bjw -ioY -ljl -itF -xNr -xNr -bOp -ktQ -vIX -uDZ -tFt -vIX -nEP -dxm -vxY -nEv -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -rZR -ktQ -ktQ -odl -uHE -wWX -aUJ -wWX -aUJ -wWX -uHE -mOB -ktQ -ktQ -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(17,1,1) = {" -ktQ -vIX -kdw -hca -vIX -eBn -vnZ -vIX -ssy -dNT -hhl -aiV -ktQ -vIX -aan -tCP -bjw -hdt -vIX -wTW -mNb -txD -txD -bfB -ktQ -vIX -nqx -tFt -pKV -bjw -jpm -mWP -vIX -uiX -sLq -vIX -ktQ -vIX -fSR -tFt -tlY -nJR -xNr -dlO -tCP -tCP -tCP -aiV -ktQ -cya -lIQ -cYi -cYi -bYB -dZo -cYi -cYi -cYi -cYi -cya -ktQ -cya -dZo -cYi -cYi -cYi -pPZ -mep -yii -cya -ktQ -rHR -kFY -kFY -rpl -ljl -bys -xNr -hWp -xUg -ktQ -vIX -wEV -tFt -dWH -tEh -wRf -wRf -bDQ -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -pIr -pIr -pIr -hOR -uHE -wWX -uHE -wWX -uHE -wWX -uHE -bbP -pIr -pIr -pIr -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(18,1,1) = {" -ktQ -vIX -vIX -aUJ -vIX -vIX -aUJ -vIX -uRX -tDd -tDd -vIX -ktQ -vIX -jqZ -tCP -bjw -edH -vIX -mVN -caa -caa -boq -vIX -ktQ -vIX -wBG -tFt -pso -bjw -ooD -gvZ -vIX -aUJ -vIX -vIX -ktQ -vIX -siQ -tFt -eRq -veQ -xNr -iuC -huQ -fxm -jdk -vIX -ktQ -cya -iVU -cuI -cYi -cYi -cYi -cYi -cYi -cYi -cYi -cya -ktQ -cya -cuI -cYi -cYi -cYi -cYi -cYi -cYi -cya -ktQ -ljl -mDE -xNr -dVe -ebv -xNr -xNr -bEw -ljl -ktQ -aoX -rXS -ifk -dWH -hxz -pcj -rrh -gSa -qyk -ktQ -ktQ -ktQ -ktQ -ktQ -rZR -rZR -ktQ -jlq -uHE -uHE -uHE -uHE -jue -uHE -uHE -uHE -uHE -hiN -ktQ -rZR -rZR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(19,1,1) = {" -ktQ -qwe -nmX -xNr -dVe -xNr -xNr -iDZ -xNr -xNr -gzW -qwe -ktQ -vIX -jqZ -tCP -bjw -xNr -fcD -wDk -wDk -jUq -jUq -uui -ktQ -vIX -lbl -tFt -fAL -bjw -rMI -fuv -teo -xNr -gzW -qwe -ktQ -vIX -ecV -qPB -jTC -veQ -wVz -sQp -tki -rMI -gzW -sTA -ktQ -cya -cYi -cYi -cYi -cYi -poP -mep -vGa -gOT -lqm -cya -ktQ -cya -wDp -wDp -cya -cYi -lqm -gOT -eua -cya -ktQ -rHR -jYG -kST -ljl -sVt -rrh -eBu -eBu -xUg -ktQ -vIX -qkA -rGq -vIX -nYL -cTU -dVe -otF -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -uHE -oVL -oVL -oVL -uHE -cYi -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(20,1,1) = {" -ktQ -vIX -vIX -aUJ -vIX -vIX -aUJ -vIX -iXo -bjw -hLg -vIX -ktQ -vIX -vIX -wwI -bjw -xNr -frA -wDk -fpQ -jUq -jUq -jXc -ktQ -vIX -bVT -ivM -vIX -pWk -vIX -vIX -vIX -aUJ -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -eWv -iQi -dPn -vIX -vIX -vIX -vIX -ktQ -cya -wDp -wDp -cya -cYi -poP -dHt -wql -gOT -lqm -cya -ktQ -cya -cYi -cYi -cya -cYi -vGa -gOT -mSt -cya -ktQ -ljl -dyz -fsJ -ljl -lUl -xNr -xNr -xNr -aiV -ktQ -vIX -vIX -xMt -vIX -grU -vIX -xMt -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -uHE -cYi -qTC -oVL -oVL -oVL -qTC -cYi -uHE -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(21,1,1) = {" -ktQ -vIX -qnV -nIk -vIX -dRE -xUy -vIX -kzz -bjw -rZy -vIX -ktQ -vIX -xvF -gVr -sbY -xNr -pUs -wDk -wDk -jUq -tKq -jXc -ktQ -vIX -aBZ -clB -uRF -vaN -vIX -uJY -cGj -uiX -syj -aiV -ktQ -vIX -jWG -koN -lBe -vIX -iQi -vIX -oEG -sfl -nxX -vIX -ktQ -cya -cYi -cYi -cya -cYi -poP -dHt -lqf -gOT -mSt -cya -ktQ -cya -cYi -cYi -cya -cYi -cYi -cYi -cYi -cya -ktQ -rHR -wBM -xNr -kyw -xNr -dVe -pot -kWB -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -jlq -uHE -cYi -cYi -uHE -oVL -oVL -oVL -uHE -cYi -cYi -uHE -hiN -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(22,1,1) = {" -ktQ -vIX -gtI -uiX -vIX -gtI -uiX -vIX -sGj -bjw -jRP -vIX -ktQ -vIX -knL -gVr -sbY -xNr -frA -wDk -wDk -uuF -jUq -jXc -ktQ -vIX -knL -clB -tJU -vaN -vIX -xBE -pFp -szA -szA -vIX -ktQ -vIX -tpk -uiX -uiX -tXk -qcu -rrV -sfH -vaN -abH -vIX -ktQ -cya -cYi -cYi -cya -cYi -pPZ -pPZ -lqf -gOT -mSt -cya -ktQ -cya -wDp -wDp -cya -cya -cya -cya -cya -cya -ktQ -ljl -yhU -aiV -yhU -aiV -yhU -aiV -yhU -ljl -ktQ -ljl -uYe -ljl -uYe -ljl -uYe -ljl -uYe -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -cYi -uHE -uHE -nbf -uHE -uHE -cYi -cYi -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(23,1,1) = {" -ktQ -vIX -kpk -wnE -vIX -kpk -udM -vIX -jiZ -dNs -mow -vIX -ktQ -vIX -ecV -gVr -sbY -rmo -qLj -wDk -wDk -jUq -jUq -hAF -ktQ -vIX -diw -nXT -hlc -sAG -vIX -xBE -krk -wAC -rdw -vIX -ktQ -vIX -dtq -pUj -fCf -vIX -aCJ -vIX -efD -ugN -ugN -vIX -ktQ -cya -cYi -cYi -cya -cYi -cYi -cYi -cYi -cYi -cYi -cya -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rHR -ezi -mLJ -lcu -oul -hxl -jiy -vLF -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -nko -uHE -tLS -tLS -tLS -uqX -cYi -cYi -cYi -uqX -tLS -tLS -tLS -uHE -nko -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(24,1,1) = {" -ktQ -vIX -aiV -vIX -vIX -aiV -vIX -vIX -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -kzL -vIX -aIS -wLt -wLt -hyB -vIX -ktQ -vIX -vIX -vIX -vIX -vIX -vIX -vIX -vIX -vIX -vIX -vIX -ktQ -ogy -ogy -fBH -ogy -ogy -pHn -vIX -vIX -vIX -vIX -vIX -ktQ -cya -wDp -wDp -cya -cya -cya -cya -cya -cya -cya -cya -ktQ -cya -cya -cya -cya -cya -cya -cya -ktQ -ktQ -ktQ -ljl -uYe -oiN -uYe -ljl -uYe -oiN -uYe -ljl -ktQ -ljl -cAb -xNr -xNr -pUy -uxZ -xNr -xNr -aXn -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -cYi -xxV -uHE -uHE -nbf -uHE -uHE -cYi -cYi -xxV -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(25,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -oqd -cYi -jMj -cYi -poP -cya -ktQ -ktQ -ktQ -rHR -wBM -bkF -ldx -ljl -rsf -rKi -eqX -xUg -ktQ -rHR -gwH -aFE -qmJ -paG -xNr -xNr -dJs -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uHE -cYi -cYi -cYi -uHE -cYi -cYi -cYi -uHE -cYi -cYi -cYi -uHE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(26,1,1) = {" -ktQ -vIX -vIX -kFn -vIX -aiV -vIX -kFn -vIX -vIX -ktQ -vIX -vIX -kFn -vIX -kzL -vIX -kFn -vIX -vIX -ktQ -vIX -vIX -kFn -vIX -vIX -vIX -kFn -vIX -vIX -ktQ -vIX -vIX -vIX -prz -grU -mIs -ygs -ygs -eyY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -dHt -cYi -cYi -cYi -pPZ -cya -ktQ -ktQ -ktQ -oiN -vlO -rKi -jDG -ljl -fPP -rKi -rKi -oiN -ktQ -ljl -fbz -xNr -gyL -kEJ -xNr -vJp -dIr -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -fdy -cYi -cYi -cYi -iax -cYi -cYi -cYi -iax -cYi -cYi -cYi -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(27,1,1) = {" -ktQ -vIX -uSV -ppI -hMm -thn -ymd -enm -uMV -vIX -ktQ -vIX -oIA -qoz -pUy -iEQ -dxl -sEI -iwX -vIX -ktQ -vIX -wEV -dYd -ibw -acE -bop -ihD -psD -vIX -ktQ -vIX -eet -iuj -bjw -iEQ -bjw -bjw -glG -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -cYi -cYi -kxj -yii -lqm -cya -ktQ -ktQ -ktQ -rHR -mJe -rKi -swU -ljl -ljl -poB -ues -xUg -ktQ -rHR -khM -hlM -xNr -foD -xNr -xVh -pcX -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(28,1,1) = {" -ktQ -aiV -jYo -tFt -tFt -njx -gQf -tnK -qbt -qyk -ktQ -aiV -ske -mnQ -bnA -xNr -lnr -tFt -qpl -aoX -ktQ -iJp -jYo -tFt -bFd -tFt -bFd -gmL -sAG -aoX -ktQ -vIX -jnw -bjw -axE -xNr -vQf -bjw -xIY -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -wDp -wDp -cya -gOT -mSt -cya -ktQ -ktQ -ktQ -ljl -xCa -rKi -rKi -wUy -sOY -wRf -rKi -rzQ -ktQ -ljl -gDk -xNr -xNr -ceL -jFJ -hTh -xbw -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -uER -pLQ -pLQ -pxI -pLQ -pLQ -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(29,1,1) = {" -ktQ -vIX -xJV -jFQ -eLG -yez -rNF -tnK -lrs -vIX -ktQ -wyB -uiv -tFt -kxa -igB -vgJ -tFt -tOY -vIX -ktQ -vIX -fCH -eLw -cMh -ebA -lng -xOX -vIX -vIX -ktQ -vIX -oIN -bjw -quV -xNr -uHB -bjw -glG -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -cYi -cYi -cya -eua -vGa -cya -ktQ -ktQ -ktQ -rHR -xzN -wRf -eTx -ljl -kri -qvB -wRf -xUg -ktQ -rHR -qiS -vjk -sdi -ufh -ehG -fbY -taZ -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pxI -cEM -fxI -fxI -cEM -fAS -rVS -yjM -yjM -rVS -fAS -pLQ -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(30,1,1) = {" -ktQ -rWB -vIX -vIX -vIX -kZI -xNr -xNr -gzW -qwe -ktQ -qwe -nmX -xNr -xNr -xNr -xNr -xNr -gzW -qwe -ktQ -vIX -dWH -fak -vIX -buk -vIX -tFt -apk -vIX -ktQ -vIX -rwM -bjw -bjw -xNr -glG -bjw -glG -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cya -wDp -wDp -cya -cya -cya -cya -ktQ -ktQ -ktQ -oiN -vEG -rKi -spF -ljl -veW -dKg -rKi -oiN -ktQ -ljl -yhU -ljl -yhU -ljl -yhU -ljl -yhU -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -fxI -cEM -fxI -fxI -cEM -fAS -rVS -yjM -yjM -rVS -fAS -pLQ -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(31,1,1) = {" -ktQ -vIX -xvF -udp -tLX -gCk -xNr -oSY -ufh -xVz -ktQ -vIX -lFH -vvq -kVL -bjw -kEY -bze -kmp -vIX -ktQ -vIX -pvH -vtN -rFd -xVN -dEQ -tFt -dBQ -vIX -ktQ -vIX -aGo -qxt -xOI -igB -glG -bjw -glG -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rHR -rIq -rKi -kfj -ljl -kqw -cZN -wRf -xUg -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -aVT -tCP -rVS -cEM -fxI -fxI -cEM -fAS -rVS -yjM -yjM -rVS -fAS -hmO -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(32,1,1) = {" -ktQ -iJp -dtF -hFu -tFt -njx -xNr -bjw -xkN -vIX -ktQ -aoX -knL -hFu -tpq -skA -vzs -mtx -npj -qyk -ktQ -aoX -aPT -bLf -bAU -dSa -vIX -cRO -vIX -qyk -ktQ -vIX -knL -hFu -pso -xNr -glG -bjw -xIY -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ljl -kvN -aiV -kvN -ljl -yhU -oiN -yhU -ljl -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kkK -tCP -rVS -cEM -rVS -rVS -cEM -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(33,1,1) = {" -ktQ -vIX -ecV -kam -akZ -iSR -rmo -lnD -hCP -vIX -ktQ -vIX -ecV -mdk -dEb -fpt -elq -ulf -jzN -vIX -ktQ -vIX -ble -skJ -vIX -mPa -lnv -bPY -wxa -vIX -ktQ -vIX -ecV -ryh -rjB -rmo -bjw -bjw -glG -lTG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -hml -ktQ -xwu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -tyI -tCP -rVS -cEM -rVS -rVS -cEM -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -ktQ -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(34,1,1) = {" -ktQ -vIX -vIX -xMt -aiV -xVz -grU -xMt -vIX -vIX -ktQ -vIX -vIX -aiV -vIX -vIX -vIX -xMt -vIX -vIX -ktQ -vIX -vIX -xMt -vIX -grU -vIX -xMt -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -grU -mIs -ygs -ygs -umd -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -jor -ktQ -sMc -qxh -euL -qvK -uhQ -vnt -lGy -pCP -ktQ -jqm -toJ -ktQ -srO -vfw -dFC -gEF -gBM -lyR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -fxI -fxI -fxI -fxI -fxI -rVS -rVS -ktQ -rVS -asa -njF -bpC -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(35,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -toB -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vOz -qxh -dVP -iXg -uhQ -vnt -vwF -aQX -ktQ -ktQ -ktQ -ktQ -srO -vfw -dFC -gEF -gBM -lyR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -hmO -pLQ -pLQ -pLQ -pLQ -hmO -rVS -ktQ -rVS -iRK -eNw -mlI -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(36,1,1) = {" -ktQ -vIX -kFn -ljl -ljl -uYe -voj -ljl -kFn -vIX -ktQ -vIX -kFn -vIX -vIX -vIX -vIX -vIX -kFn -vIX -ktQ -vIX -vIX -vIX -vIX -aiV -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -grU -vIX -vIX -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -dnY -sUq -akf -fWL -kgQ -eLg -wnI -biS -ktQ -ktQ -ktQ -ktQ -srO -vfw -dFC -gEF -lHe -lyR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rVS -wUF -wYs -yhZ -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(37,1,1) = {" -ktQ -iJp -xvF -udp -vPl -cCT -iEQ -daH -wQC -qyk -ktQ -vIX -xvF -gUc -hMg -vIX -ipI -now -pib -qyk -ktQ -vIX -jdM -mrl -mdn -ovi -aXy -cSH -xqh -vIX -ktQ -vIX -keY -hiw -upv -iEQ -vIX -xBE -hjW -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -loD -sUq -pTC -gzu -liR -eLg -gzu -gzu -ktQ -ktQ -ktQ -ktQ -srO -vfw -dFC -gEF -pGG -lyR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(38,1,1) = {" -ktQ -ljl -exk -cII -tFt -njx -xNr -daH -jfi -ljl -ktQ -aoX -knL -hFu -tFt -vIX -wZm -vaN -hAk -vIX -ktQ -vIX -nsP -uiX -gSr -ovi -lxX -xmy -scA -vIX -ktQ -vIX -bYV -stk -bjw -xNr -nDv -uiX -uiX -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xDH -qHq -cLh -gzu -liR -kmR -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -quA -quA -quA -quA -quA -quA -quA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(39,1,1) = {" -ktQ -ljl -ecV -enH -hnO -muj -xNr -daH -xbO -ljl -ktQ -vIX -xTE -ory -ivM -pxr -dJi -vPQ -lDx -vIX -ktQ -vIX -dTe -aTe -eFL -uQY -nIo -bia -odd -vIX -ktQ -vIX -bph -rFE -bjw -xNr -vIX -ifS -sCN -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uPv -qHq -sjw -gzu -agZ -kmR -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(40,1,1) = {" -ktQ -rWB -ljl -ljl -ljl -gtD -xNr -daH -csk -rWB -ktQ -qwe -nmX -xNr -wFs -boP -rMI -xNr -gzW -qwe -ktQ -qwe -nmX -xNr -xNr -xNr -xNr -xNr -gzW -qwe -ktQ -vIX -nHJ -uAe -tJn -tiK -vIX -vIX -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -gzu -gzu -gzu -bEb -gAN -gzu -gzu -ktQ -jqm -mep -ktQ -uQn -iGV -nmo -iBc -fBC -vvr -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rVS -asa -njF -bpC -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(41,1,1) = {" -ktQ -ljl -xhY -uvi -ojc -kXJ -xNr -ovB -hsc -ljl -ktQ -vIX -anZ -aUJ -vIX -vIX -vIX -aUJ -udG -vIX -ktQ -vIX -sbm -faD -faD -qeq -fNP -vSq -mso -vIX -ktQ -vIX -xvF -tFt -vIX -igB -vIX -xBE -hjW -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -gzu -gzu -gzu -bEb -ffG -gzu -gzu -ktQ -ktQ -ktQ -ktQ -uQn -iJC -nmo -iBc -fBC -mxJ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -hmO -pLQ -pLQ -pLQ -pLQ -ktQ -ktQ -ktQ -rVS -iRK -eNw -mlI -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(42,1,1) = {" -ktQ -aiV -jYo -tFt -tFt -njx -xNr -owJ -brX -ljl -ktQ -iJp -vRi -vSC -dVG -vIX -vpK -hPJ -dVG -vIX -ktQ -vIX -uaI -rzN -rzN -qWd -vve -nsn -ifK -vIX -ktQ -vIX -knL -tFt -vIX -xNr -nDv -uiX -uiX -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -gzu -gzu -gzu -alI -rBo -gzu -gzu -ktQ -ktQ -ktQ -ktQ -uQn -tbY -mdt -iBc -fBC -qkd -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -fxI -fxI -fxI -fxI -fxI -ktQ -ktQ -ktQ -rVS -wUF -wYs -yhZ -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(43,1,1) = {" -ktQ -iJp -xri -nZb -xri -rzg -rmo -sdH -vuA -qyk -ktQ -vIX -dMv -qyo -kdw -vIX -iPm -qyo -nOM -qyk -ktQ -vIX -cWA -lXs -oEt -erW -xNC -wso -iLK -vIX -ktQ -vIX -ecV -ifG -vIX -rmo -vIX -vFP -sCN -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -gzu -gzu -gzu -gzu -gzu -gzu -gzu -ktQ -ktQ -ktQ -ktQ -uQn -wGW -mdt -xjd -gzu -xuk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -aVT -tCP -rVS -cEM -rVS -rVS -cEM -rVS -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(44,1,1) = {" -ktQ -ogy -lEh -pzt -pzt -xBf -voj -ljl -xMt -vIX -ktQ -vIX -xMt -aiV -vIX -vIX -vIX -aiV -xMt -vIX -ktQ -vIX -vIX -vIX -vIX -aiV -vIX -vIX -vIX -vIX -ktQ -vIX -vIX -vIX -vIX -grU -vIX -vIX -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -rRO -gjB -xjd -gzu -xuk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kkK -tCP -rVS -cEM -rVS -rVS -cEM -rVS -rVS -rVS -rVS -rVS -rVS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(45,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -keG -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -fhd -gjB -lZH -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -tyI -tCP -rVS -cEM -fxI -fxI -cEM -fxI -pxI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(46,1,1) = {" -ktQ -vIX -kFn -vIX -kFn -vIX -kFn -vIX -ktQ -vIX -vIX -vIX -aiV -vIX -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -aBk -drr -ktQ -vCM -bGp -oZx -pda -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -fxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(47,1,1) = {" -ktQ -iJp -rsf -eYv -nDz -aIB -bMN -qyk -ktQ -vIX -jOt -jOt -jPu -ybe -ybe -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -udc -nAj -oZx -pda -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pxI -cEM -fxI -fxI -cEM -fxI -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(48,1,1) = {" -ktQ -vIX -lgM -wRf -wRf -lvA -kPX -vIX -ktQ -vIX -ewo -bjw -bjw -bjw -kWn -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -tbq -sJz -fmw -exi -gzu -ktQ -ktQ -ktQ -ktQ -tDB -ldS -ktQ -iTi -fen -qvK -jTS -aQX -dnY -qxh -euL -fiQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(49,1,1) = {" -ktQ -iJp -fPP -yiH -wIy -bVP -tCP -mit -ktQ -qwe -nmX -xNr -fZo -hqE -bhd -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -oNL -pIq -fmw -jxl -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vOz -kgQ -qvK -lhe -bHC -hPx -qxh -owp -fiQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(50,1,1) = {" -ktQ -vIX -myq -xJd -gBP -oMw -gKR -vIX -ktQ -vIX -ulI -xNr -bwY -vfl -tFt -aiV -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -mQU -iTi -jxl -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -lea -ktQ -loD -kcy -iXg -hln -bHC -oDE -qxh -lcD -vwF -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(51,1,1) = {" -ktQ -iJp -cTy -hPD -flG -mbc -okz -aoX -ktQ -vIX -smW -rmo -sUj -vJU -owS -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -wMH -iTi -nfX -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -loD -sjw -iXg -vCM -bHC -sMc -qxh -lcD -vwF -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -eJO -sQo -rVS -rVS -rVS -rVS -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(52,1,1) = {" -ktQ -vIX -xMt -vIX -xMt -vIX -xMt -vIX -ktQ -vIX -vIX -kzL -vIX -vIX -vIX -vIX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -tjg -cZu -dGK -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -qFn -liR -fWL -oNL -tQB -sMc -qxh -akf -uBA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -eJO -bzu -mHY -mHY -bJP -rVS -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(53,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -tzZ -gzu -hPx -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -qFn -liR -fWL -kmR -tGE -bEb -qxh -akf -wnI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -ktO -bzu -vSa -mHY -bJP -rVS -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(54,1,1) = {" -ktQ -vby -vby -vkx -vby -vby -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -wVA -gzu -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iCs -liR -gzu -kmR -biS -bEb -sUq -hSF -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -ktO -bzu -mHY -mHY -bJP -rVS -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(55,1,1) = {" -ktQ -vby -rsf -eYv -bkF -bGI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -nRD -gzu -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iCs -alI -gzu -ffG -biS -bEb -sUq -utK -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -rVS -sQo -rVS -rVS -rVS -rVS -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(56,1,1) = {" -ktQ -nTD -rlA -wRf -wRf -mit -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rEO -alI -gzu -gAN -lyR -xDH -sUq -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -pLQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(57,1,1) = {" -ktQ -vby -fPP -jqx -idJ -iAQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -bAD -gzu -gAN -awy -xDH -sUq -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(58,1,1) = {" -ktQ -vby -vby -hzP -vby -vby -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cYi -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -bAD -gzu -rBo -gzu -uPv -gzu -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(59,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gzu -kJe -gzu -rBo -gzu -uPv -gzu -gzu -gzu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(60,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(61,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -ktQ -xGz -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -pNf -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(62,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -jCp -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -gGk -jTF -jTF -jTF -jTF -jTF -jTF -mtA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(63,1,1) = {" -ktQ -dDB -dDB -dDB -jCp -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -jCp -dDB -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -jTF -jTF -dMu -dMu -kYZ -kYZ -dMu -dMu -dMu -dMu -dMu -jTF -gGk -gGk -gGk -gGk -gGk -gGk -jTF -jTF -jTF -mtA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(64,1,1) = {" -ktQ -dDB -dDB -dDB -hin -hin -hin -hin -hin -hin -dDB -hin -hin -hin -hin -hin -hin -dDB -hin -hin -hin -hin -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -dMu -dMu -dMu -dMu -dMu -tXg -ltd -xhJ -exB -dMu -xTK -idp -dMu -gGk -gGk -kZU -kZU -kZU -gGk -gGk -jTF -gGk -jTF -mtA -ktQ -plu -plu -sSn -plu -plu -fMT -plu -plu -plu -fKu -qFs -bJc -klt -fKu -dal -dal -dal -cKI -dal -dal -dal -dal -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -lTH -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(65,1,1) = {" -ktQ -dDB -hin -hin -dDB -hin -hin -dDB -hin -hin -dDB -hin -hin -hin -hin -hin -hin -hin -dDB -hin -hin -dDB -hin -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -dMu -vma -dbX -rtV -dMu -ltd -oII -dbX -dbX -gIG -dbX -dbX -dMu -gGk -kZU -kZU -tRF -kZU -kZU -cJU -gGk -jTF -jTF -mtA -ktQ -plu -elG -elG -elG -tNI -elG -elG -elG -elG -elG -elG -uFv -elG -elG -elG -elG -elG -elG -elG -elG -elG -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wMK -fEX -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -rLL -ktQ -ktQ -ktQ -ktQ -ktQ -rLL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(66,1,1) = {" -ktQ -dDB -dDB -dDB -hin -hin -hin -hin -hin -hin -hin -hin -hin -nLQ -hin -hin -hin -hin -hin -hin -hin -hin -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -kYZ -bLw -dbX -dbX -gIG -dbX -dbX -dbX -dbX -dMu -dbX -dbX -dMu -gGk -kZU -tRF -tRF -tRF -kZU -kZU -gGk -gGk -jTF -mtA -ktQ -vNW -elG -ijK -brR -wlI -jMW -wXg -nnR -anP -elG -wXs -bJc -xIV -kmz -fXk -jFN -duO -wYI -auy -tRO -saF -elG -dal -ktQ -ktQ -lTH -lTH -lTH -lTH -lTH -elO -lTH -lTH -lTH -oUZ -oUZ -lTH -sec -lTH -bAJ -bAJ -bAJ -lTH -sec -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(67,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -ocu -wlX -wlX -ocu -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -kYZ -tdG -dbX -dbX -dMu -aZu -dbX -dbX -idp -dMu -uij -vYu -dMu -gGk -kZU -tRF -tRF -tRF -tRF -kZU -kZU -gGk -jTF -mtA -ktQ -snB -elG -ioA -pJO -pJO -atC -agN -pBG -aep -elG -bJc -bJc -utI -iiA -eRr -wak -cnw -fWu -ihi -pAF -iaN -elG -dal -ktQ -wMK -fEX -lTH -vUu -ezf -lTH -rbm -mrl -eoQ -lTH -jXz -jXz -lTH -vAF -cOv -wYc -wYc -wYc -jJt -wNV -owd -lTH -bAJ -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(68,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -ocu -ocu -rYO -rYO -rYO -ocu -rKB -rKB -ocu -rYO -rYO -rYO -ocu -rYO -rYO -rYO -ocu -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -dMu -nfR -tdG -tYl -dMu -dMu -dMu -gIG -dMu -dMu -dMu -dMu -dMu -gGk -kZU -tRF -tRF -tRF -tRF -tRF -kZU -gGk -jTF -mtA -ktQ -pZV -elG -pwp -pJO -pJO -aPX -rNJ -rNJ -rNJ -elG -feF -bJc -klt -iiA -eRr -qTA -qBN -gVG -ihi -lgy -nza -elG -dal -wMK -fEX -lTH -elO -jjA -oIC -lTH -sTv -uiX -qlo -lTH -ngS -rqf -cqS -tMX -wYc -wYc -izZ -apq -wYc -wYc -bwU -lhg -xNr -lTH -bAJ -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(69,1,1) = {" -ktQ -dDB -dDB -dDB -ocu -ocu -jyt -vMs -bpl -dqE -ocu -rKB -kVd -ocu -vMs -bpl -dqE -vMs -bpl -dqE -jyt -ocu -ocu -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -dMu -dMu -kYZ -dMu -dMu -dMu -wqz -dbX -dMu -lze -jTF -jTF -kdl -gGk -kZU -tRF -tRF -tRF -tRF -tRF -kZU -gGk -jTF -mtA -ktQ -lwG -elG -sWy -tVn -pJO -ueu -aep -aep -dfi -nhv -qkX -pQW -qkX -fyt -rfr -qTA -aWG -olR -ihi -nqN -iIC -elG -wdk -ktQ -lTH -lTH -eAS -uiX -hjs -lTH -lTH -cAC -lTH -lTH -dGL -tiJ -sko -wYc -wYc -wYc -ayh -jLN -pqZ -jLN -pRb -xNr -xNr -jkv -xNr -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(70,1,1) = {" -ktQ -dDB -dDB -ocu -ocu -jea -jyt -vMs -vst -dqE -ocu -wlX -wlX -ocu -vMs -vst -dqE -vMs -vst -dqE -jyt -cyr -ocu -ocu -dDB -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -jTF -jTF -jTF -dMu -wqz -dbX -dMu -vOb -jTF -jTF -jTF -gGk -kWR -wAy -tRF -tRF -tRF -tRF -kZU -gGk -jTF -mtA -ktQ -hdU -elG -elG -qdm -twL -lcC -bGa -mxr -sOH -nPH -gKm -eMZ -oYO -iiA -svg -ihs -pAF -nuh -ihi -abb -pSs -elG -dal -ktQ -lTH -xgw -uiX -uiX -uiX -cAC -uiX -uiX -uiX -fzP -tiJ -tiJ -sko -wYc -gcv -wYc -lTH -jLN -pqZ -jLN -lTH -gkK -bTe -wiQ -tnp -lTH -lTH -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(71,1,1) = {" -ktQ -dDB -ocu -ocu -jyt -jyt -jyt -jyt -jyt -jyt -xjk -jyt -jyt -tMy -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -ocu -ocu -dDB -ktQ -mtA -jTF -jTF -gGk -gGk -gue -gGk -gGk -dMu -dMu -gIG -dMu -bab -gGk -gGk -gGk -gGk -gGk -tWX -wAy -tRF -tRF -tRF -kZU -gGk -jTF -mtA -ktQ -noD -elG -cDG -eAz -fVD -kEc -fmE -ptG -cyi -wUM -fam -rIQ -dQp -hrp -kaq -aWS -rQA -ddq -kcX -eMZ -iDq -elG -dal -ktQ -lTH -xev -uiX -uiX -uiX -lTH -lTH -cAC -lTH -lTH -dGL -tiJ -sko -wYc -wYc -wYc -dgY -jLN -pqZ -jLN -pRb -xNr -xNr -dVe -lFp -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(72,1,1) = {" -ktQ -dDB -rYO -jyt -vMs -pUP -dqE -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -ocu -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -gGk -gGk -gGk -gGk -gGk -gGk -gGk -gGk -gGk -gGk -jTF -sRV -gGk -gGk -kWR -wAy -tRF -kZU -kZU -gGk -jTF -mtA -ktQ -loQ -elG -sjL -tgE -lCl -iiA -mRN -iJI -oml -nPH -xbm -pAF -jJI -elG -eMZ -pAF -cTn -ieK -ieK -ieK -bEt -elG -dal -wMK -fEX -lTH -elO -uiX -uiX -lTH -rbm -uiX -qlo -lTH -rpe -tiJ -fDk -wYc -wYc -wYc -izZ -apq -wYc -wYc -atV -tLA -xNr -lTH -bAJ -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(73,1,1) = {" -ktQ -dDB -rYO -jyt -vMs -wre -dqE -lAS -qUz -qUz -qUz -qUz -qUz -qUz -qUz -qUz -qUz -qUz -qUz -qUz -jyt -jyt -qAG -qAG -rYO -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -jTF -jTF -gGk -gGk -jTF -jTF -jTF -jTF -gGk -gGk -sRV -trv -sRV -gGk -gGk -tWX -kZU -kZU -cle -gGk -jTF -mtA -ktQ -fsy -wMJ -qkX -gjM -eMp -mmX -mNs -qkX -qkX -vFy -eMZ -pAF -eMZ -elG -pqO -pqO -oEU -elG -elG -elG -elG -elG -dal -ktQ -wMK -fEX -lTH -gvF -kvg -lTH -sTv -jJG -eoQ -lTH -tiJ -tiJ -scp -vuN -mrx -wYc -wYc -wYc -mCt -aVj -idw -lTH -bAJ -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(74,1,1) = {" -ktQ -dDB -ocu -ocu -ocu -ocu -ocu -ocu -vKc -vQE -nav -vKc -vKc -vKc -vKc -vKc -vKc -nav -vQE -vKc -jyt -jyt -vst -bpl -rYO -dDB -ktQ -mtA -jTF -jTF -ndw -ndw -ndw -qHO -asr -ndw -ndw -ndw -ndw -jTF -jTF -gGk -gGk -sRV -jTF -gGk -gGk -gGk -gGk -gGk -gGk -gGk -jTF -mtA -ktQ -tyC -iiA -gxq -gxq -eMZ -rqq -eMZ -qbg -yev -rjJ -eMZ -pAF -eMZ -eMZ -eMZ -pAF -fBI -kos -aKd -lPt -oSt -elG -dal -ktQ -ktQ -lTH -lTH -lTH -lTH -lTH -elO -lTH -lTH -lTH -miS -miS -lTH -piK -lTH -bAJ -bAJ -bAJ -lTH -piK -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(75,1,1) = {" -ktQ -dDB -ocu -cBn -rKB -cDm -rKB -wlX -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -jyt -qgu -jyt -jyt -jsc -jsc -rYO -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -nkc -esy -nkc -mov -hSv -ndw -jTF -gGk -gGk -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -gGk -jTF -mtA -ktQ -fTP -iiA -sCs -gxq -pAF -pAF -pAF -pAF -pAF -nNR -pAF -pAF -pAF -pAF -pAF -pAF -qLu -rih -mMX -ljo -nTX -elG -wdk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wMK -fEX -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -aee -ktQ -ktQ -ktQ -ktQ -ktQ -aee -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(76,1,1) = {" -ktQ -dDB -ocu -kbV -rKB -rKB -rKB -wlX -jyt -vrE -nmJ -lgp -uIc -hdB -rol -teN -wTm -icn -hhw -ghq -jyt -jyt -jyt -jyt -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -nkc -mov -nkc -mov -hSv -ndw -jTF -jTF -gGk -jTF -jTF -dMu -dMu -kYZ -kYZ -kYZ -dMu -dMu -jTF -jTF -mtA -ktQ -myb -iiA -vwi -eMZ -pAF -exz -tsV -tsV -exz -ydP -xcc -tnO -hhG -tLC -lrg -pAF -iSB -ljo -ljo -ljo -xEi -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -lTH -lTH -lTH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(77,1,1) = {" -ktQ -dDB -rYO -del -rKB -hyu -rKB -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -sGo -ocu -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -nkc -mov -nkc -mov -hSv -ndw -jTF -jTF -gGk -gGk -jTF -dMu -sNT -qOk -vdn -nOo -lIc -dMu -gGk -jTF -mtA -ktQ -myb -iiA -knV -eMZ -pAF -lar -wdD -vKZ -rkE -ydP -lfZ -jBA -pyq -oZL -wsc -pAF -dIq -ljo -boR -ljo -qBX -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(78,1,1) = {" -ktQ -dDB -rYO -gaf -rKB -lhY -rKB -wIv -olq -wHD -olq -olq -olq -olq -fAE -fAE -olq -olq -wHD -waB -ocu -mEk -gcO -ajg -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -amU -amU -amU -mov -hSv -ndw -jTF -jTF -gGk -gGk -jTF -dMu -pYq -lYN -lYN -lYN -lYN -dMu -jTF -jTF -mtA -ktQ -myb -iiA -xmQ -pAF -pAF -lar -pGu -uWk -dRR -ydP -oCY -vqP -vqP -vqP -vKD -pAF -tap -pXO -oji -hFH -sic -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(79,1,1) = {" -ktQ -dDB -ocu -mFk -rKB -vnh -rKB -ocu -ocu -ocu -ocu -ocu -ocu -hPn -fXO -ocu -ocu -ocu -abX -ocu -ocu -mEk -gcO -cVO -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -amU -qHP -amU -mov -hSv -ndw -jTF -gGk -gGk -gGk -gGk -lYN -lYN -lYN -lYN -lYN -xjj -dMu -jTF -jTF -mtA -ktQ -myb -iiA -gWI -pAF -pAF -exz -rLt -rLt -joy -ydP -wqK -rer -vqP -ddo -vRa -pAF -pAF -pAF -pAF -pAF -pAF -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(80,1,1) = {" -ktQ -dDB -ocu -kVP -rKB -rKB -rKB -ocu -akz -pTg -vRZ -bMp -ocu -fSN -fHv -ocu -vHx -jFI -dMB -nrR -ocu -mEk -gcO -ouU -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -amU -eok -amU -mov -hSv -ndw -jTF -gGk -gGk -gGk -gGk -lYN -lYN -lYN -lkp -lYN -bab -dMu -jTF -jTF -mtA -ktQ -myb -iiA -pRp -pAF -mCq -uFK -ksX -cOS -wTh -ydP -gSJ -klv -vqP -ddo -qUK -pAF -gHE -iJH -emZ -pkr -rts -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(81,1,1) = {" -ktQ -dDB -ocu -bCM -rKB -rKB -rKB -ydF -qju -qju -qju -ocu -ocu -wIv -ocu -ocu -tlz -umB -dMB -dMB -ocu -ocu -ocu -ocu -ocu -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -qzG -mov -qzG -mov -hSv -ndw -jTF -gGk -gGk -gGk -gGk -lYN -lYN -lYN -lYN -lYN -bab -dMu -jTF -jTF -mtA -ktQ -fTP -rkb -qkX -cXq -oKt -nac -mhA -mhA -mhA -huz -wqK -rer -vqP -ddo -dAo -pAF -iuA -jlR -jlR -jlR -xQk -elG -wdk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(82,1,1) = {" -ktQ -dDB -dDB -ocu -ocu -tmV -rKB -ocu -qju -qju -qju -ocu -biM -eBZ -lTP -ocu -dQo -bTq -dMB -cvl -ocu -kke -ocu -ocu -dDB -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -qzG -mov -qzG -mov -hSv -ndw -jTF -gGk -gGk -gGk -jTF -dMu -lYN -lYN -lYN -lYN -lYN -dMu -jTF -jTF -mtA -ktQ -myb -elG -qgd -ewY -obZ -kXk -uNn -uNn -uNn -ydP -gSJ -klv -vqP -vqP -cIx -pAF -jXb -jlR -hEY -jlR -sLi -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(83,1,1) = {" -ktQ -dDB -dDB -dDB -ocu -ocu -ihw -ocu -pAA -kLp -fsq -ocu -dKh -eBZ -tZn -ocu -jaa -sKn -dMB -cvl -ocu -ocu -ocu -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -ndw -bUJ -mov -qzG -mov -qzG -mov -hSv -ndw -jTF -gGk -gGk -gGk -xlI -dMu -uBV -mjJ -bWy -bWy -nwf -dMu -jTF -jTF -mtA -ktQ -myb -elG -aXX -ewY -ewY -ewY -ewY -ewY -ewY -ydP -rVO -rNI -dlQ -oNG -hfj -pAF -fEC -jlR -bTA -rGi -mnC -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(84,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -wIv -ocu -ocu -ocu -ocu -ocu -ocu -ocu -ocu -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -ndw -ndw -ndw -ndw -ndw -ndw -ndw -ndw -ndw -jTF -gGk -gGk -gGk -jTF -dMu -dMu -kYZ -kYZ -kYZ -dMu -dMu -jTF -jTF -mtA -ktQ -eYK -elG -kYa -ewY -mFy -uPN -uNn -uNn -uNn -ydP -kvG -kvG -hfc -lMe -pAZ -pAF -fjA -pbm -rnG -ksO -dMD -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(85,1,1) = {" -ktQ -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -ktQ -mtA -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -gGk -gGk -gGk -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -jTF -mtA -ktQ -dal -elG -elG -elG -elG -elG -elG -elG -elG -nac -mhA -mhA -mhA -mOo -mhA -mhA -mhA -mhA -huz -elG -elG -elG -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(86,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vQH -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -aVU -sdv -aVU -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -sdv -moS -ktQ -dal -dal -dal -dal -dal -tro -dal -dal -dal -dal -dal -tro -dal -dal -dal -dal -dal -qoL -txt -qgB -dal -dal -dal -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(87,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(88,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -qRd -lNO -qRd -oDr -qRd -oDr -qRd -qRd -qRd -qRd -qRd -qRd -qRd -xNH -qRd -qRd -qRd -qRd -xNH -qRd -ktQ -nCk -fbv -fbv -fbv -fbv -fbv -fbv -fbv -nCk -nCk -fbv -fbv -fbv -fbv -fbv -fbv -fbv -nCk -ktQ -unS -ogd -ogd -aLR -yis -yis -ogd -ogd -oNj -ogd -yis -aLR -aLR -yis -yis -iyc -ogd -yis -ogd -isO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(89,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -aww -qRd -kqI -hab -fon -fon -sJN -aww -aww -aww -aww -aww -qRd -qRd -xNH -xNH -qRd -xNH -xNH -qRd -ktQ -nCk -ddf -srF -bye -liz -iwV -gbD -ddf -nCk -nCk -ddf -srF -ydL -gJz -ydL -iYD -ddf -nCk -ktQ -cgO -yis -yis -yis -yis -yis -yis -hvj -yis -yis -yis -yis -ejR -hbw -yis -yis -yis -yis -yis -cgO -ktQ -xdn -xdn -dMX -xdn -xdn -xdn -vOq -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(90,1,1) = {" -ktQ -qRd -qRd -qRd -lNO -aww -aww -ltN -wgq -dCh -dCh -djH -aww -aww -qmC -kiD -maR -ino -aww -aww -qpO -tGY -qpO -izV -qRd -qRd -ktQ -nCk -kuy -srF -srF -srF -srF -ddn -kuy -nCk -nCk -kuy -jli -srF -srF -srF -jSd -kuy -nCk -ktQ -cgO -yis -yis -yis -yis -yis -clR -udz -jNk -clR -yis -kbH -vZT -kbH -kbH -kbH -kbH -kbH -yis -cgO -ktQ -xdn -iiL -jdx -nJY -uFg -xdn -lxQ -vUS -vUS -vUS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(91,1,1) = {" -ktQ -qRd -qRd -qRd -aww -aww -xbR -chf -naM -eSv -eSv -chm -aww -eBz -qvq -hQb -fjT -pYs -aww -lMj -xNH -xNH -xNH -tZx -qRd -qRd -ktQ -nCk -xPe -srF -acH -fHw -pag -igz -xPe -nCk -nCk -xPe -bVz -jHU -esW -srF -uwf -xPe -nCk -ktQ -xwy -yis -svb -eKv -eKv -vPq -clR -kvK -hRP -aRV -pcP -kbH -vjV -vjV -sLs -hCs -hCs -kbH -yis -cgO -ktQ -xdn -iiL -jdx -jXj -xdn -xdn -xdn -fpS -fpS -fyk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(92,1,1) = {" -ktQ -qRd -lNO -lNO -lNO -gnX -uvB -vOs -wHy -dRG -dRG -xFQ -aww -wdf -eBF -iZk -oeZ -vtt -ylk -qTy -xNH -xNH -xNH -bJU -qRd -qRd -ktQ -nCk -fbv -owV -fbv -fbv -fbv -fbv -fbv -srF -srF -fbv -fbv -fbv -fbv -owV -fbv -fbv -nCk -ktQ -cgO -yis -yis -yis -yis -clR -jdj -qVw -pNd -clR -kbH -kbH -oeH -oeH -vON -xda -vON -kbH -yis -cgO -ktQ -dMX -rZj -fyQ -jdx -fxB -jdx -fxB -fpS -nbR -fpS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(93,1,1) = {" -ktQ -lNO -lNO -qRd -aww -aww -pYs -vtt -uvB -pcn -pcn -chf -aww -gHu -gOA -xyN -dRG -chf -xrs -lMj -iBk -xNH -xNH -mDX -qRd -qRd -ktQ -nCk -ddf -srF -ddf -bdX -jUV -acc -vhF -srF -srF -nFm -hUP -mYw -ddf -srF -ddf -nCk -nCk -ktQ -cgO -yis -yis -yis -lJk -jNk -onS -lVq -iQG -nCC -uwm -rUc -xpa -fPt -kAO -eMU -iip -kbH -yis -cgO -ktQ -dMX -oyy -jdx -jdx -xdn -xdn -xdn -fpS -fpS -fpS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(94,1,1) = {" -ktQ -qRd -lNO -qRd -qRd -aww -sJN -chf -vtt -oLI -hPW -tGy -sJN -tGy -oiw -dRG -dRG -ppY -epD -xSw -xNH -xNH -xNH -imI -qRd -qRd -ktQ -nCk -kuy -srF -xPe -bdX -jUV -nFm -nFm -srF -srF -nFm -ogf -jrD -xPe -srF -kuy -nCk -nCk -ktQ -cgO -yis -iZh -hvj -aPd -jNk -wqs -pNd -qVw -clR -kbH -kbH -yeD -rUc -yeD -hzJ -xda -kbH -yis -yfA -ktQ -xdn -iiL -jdx -jdx -jhd -xdn -xZo -vUS -vUS -vUS -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(95,1,1) = {" -ktQ -lNO -qRd -qRd -qRd -qRd -aww -lnx -iac -chf -xtZ -poF -aww -box -vtt -hcE -uOQ -tmw -aww -qTy -xNH -vDl -xNH -imI -qRd -qRd -ktQ -nCk -kuy -piJ -fbv -fbv -fbv -fbv -fbv -srF -srF -fbv -fbv -fbv -fbv -uQc -kuy -nCk -nCk -ktQ -xwy -yis -yis -yis -hvj -udz -rHG -jfw -uKX -clR -clR -kbH -gDN -gOf -bQO -gOf -gOf -kbH -yis -yis -ktQ -xdn -iiL -jdx -lqg -cuv -xdn -sJr -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(96,1,1) = {" -ktQ -qRd -qRd -aZy -qRd -qRd -aww -aww -sJN -gnX -aww -wEq -aww -gnX -aww -sJN -aww -aww -aww -aww -nZi -xNH -xNH -bJU -qRd -qRd -ktQ -nCk -kuy -srF -eZo -srF -eJa -srF -eZo -srF -srF -eZo -srF -srF -eZo -srF -kuy -nCk -nCk -ktQ -cgO -yis -yis -yis -yis -clR -ofU -lVq -iDv -iBE -clR -kbH -kbH -kbH -kbH -kbH -fvQ -kbH -yis -cgO -ktQ -xdn -xdn -dMX -xdn -xdn -xdn -kpI -nnI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(97,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -aww -gjK -gnX -tGy -tGy -lMg -oEK -cOZ -gyP -vOs -vOs -vOs -uvB -gnX -xNH -xNH -xNH -rGZ -qRd -qRd -ktQ -nCk -kuy -srF -eZo -srF -srF -srF -eZo -srF -srF -eZo -ilV -srF -eZo -srF -kuy -nCk -nCk -ktQ -cgO -yis -clR -clR -aRV -clR -ofU -fdj -hFo -utS -clR -nBO -yis -yis -yis -phC -gch -yis -yis -xwy -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(98,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -aww -aww -aww -aww -gnX -aww -fzi -sJN -aww -aww -aww -jXE -aww -aww -aww -pRi -aww -xNH -tZx -qRd -aZy -ktQ -nCk -kuy -piJ -fbv -fbv -fbv -fbv -fbv -srF -srF -fbv -fbv -fbv -fbv -uQc -kuy -nCk -nCk -ktQ -cgO -clR -clR -dUu -jMP -dzv -jMP -nKw -qHQ -nSO -clR -vwJ -yis -yis -yis -yis -lJk -yis -yis -cgO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(99,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -aww -fnO -vCe -ecK -chf -obV -chf -iDe -pLU -aww -lOr -cOZ -pYs -tRH -lAl -saN -aww -xNH -bJU -qRd -qRd -ktQ -nCk -kuy -srF -ddf -koU -koU -nFm -nFm -srF -srF -nFm -nFm -oSs -ddf -srF -kuy -nCk -nCk -ktQ -bpM -udz -jMP -alT -xrZ -uHc -cOE -jtF -pTt -mjk -clR -bEL -yis -ltL -yis -lJk -yis -yis -yis -cgO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(100,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -sJN -daR -vCe -fHI -tGy -wxO -tGy -gWa -jiR -sJN -cvT -oUU -lcH -aww -xHd -oqN -aww -xNH -tZx -qRd -qRd -ktQ -nCk -xPe -srF -xPe -koU -koU -nFm -nFm -srF -srF -nFm -nFm -fwW -xPe -srF -xPe -nCk -nCk -ktQ -bpM -jNk -afT -vpa -uSf -pQB -xrZ -jRX -bNk -clR -clR -clR -clR -sMx -yis -yis -yis -yis -yis -cgO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(101,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -sJN -szv -byP -mml -ybs -uvB -bdp -chf -vxV -aww -fay -laC -bqC -aww -dVp -muY -sJN -xNH -hGQ -qRd -qRd -ktQ -nCk -fbv -owV -fbv -fbv -fbv -fbv -fbv -srF -srF -fbv -fbv -fbv -fbv -owV -fbv -fbv -nCk -ktQ -cgO -jNk -yej -vPJ -iQG -nvB -iQG -tqt -lsL -amB -eKv -wwo -amB -rtO -aPd -hvj -yis -hvj -yis -cgO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(102,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -aww -ptq -dIL -dIL -hsG -uvB -ciK -sCA -fGT -aww -xUr -xaq -kco -aww -vpR -kUE -aww -xNH -tZx -qRd -qRd -ktQ -nCk -ddf -srF -srF -won -aJb -vDc -ddf -nCk -nCk -ddf -nhE -gvd -srF -srF -tav -ddf -nCk -ktQ -cgO -vPq -clR -pDx -pDx -hsw -bXS -xfK -uRL -amB -eKv -wwo -amB -eKv -hvj -yis -hvj -yis -yis -qcI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(103,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -aww -aww -gHV -weN -tQe -hol -ghf -clO -aww -aww -aww -aww -aww -aww -aww -vWo -aww -xNH -tZx -qRd -qRd -ktQ -nCk -kuy -srF -srF -srF -srF -srF -kuy -nCk -nCk -kuy -txG -vQj -srF -srF -sDA -kuy -nCk -ktQ -cgO -yis -clR -aRV -reH -reH -ila -qOl -reH -clR -clR -clR -clR -vPq -eKv -svb -yis -yis -yis -yis -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kIy -ktQ -ktQ -ktQ -mtI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(104,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -aww -uYF -iUt -udB -jHn -mOO -pTO -aww -dfc -khi -jXi -tPf -tWt -evL -wkN -sJN -xNH -nLk -qRd -qRd -ktQ -nCk -xPe -srF -srF -iey -aJb -axX -xPe -nCk -nCk -xPe -oAJ -nbt -woF -rbM -amT -xPe -nCk -ktQ -xwy -yis -yis -yis -reH -sfT -qJK -epr -reH -peY -rtO -bCa -uaQ -oPB -yis -yis -yis -yis -yis -yfA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ulH -ktQ -ktQ -ktQ -ulH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(105,1,1) = {" -ktQ -qRd -aZy -qRd -qRd -qRd -aww -lNO -rBR -eTL -uXM -oDr -qaj -aww -aww -dZa -hdu -iKY -vRg -gJv -aww -aww -qpO -cNS -xNH -qRd -ktQ -nCk -fbv -fbv -fbv -fbv -fbv -fbv -fbv -nCk -nCk -fbv -fbv -fbv -fbv -fbv -fbv -fbv -nCk -ktQ -cgO -yis -iZh -yis -reH -omA -spe -bRr -reH -rNK -aHE -clR -rtO -yis -yis -yis -iZh -yis -yis -cgO -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gGt -iwk -okH -gMI -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(106,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -lNO -qRd -qRd -saB -qRd -qRd -lNO -qRd -aww -aww -aww -aww -aww -aww -aww -qRd -qRd -qRd -qRd -qRd -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cgO -yis -yis -yis -reH -reH -reH -reH -reH -clR -clR -clR -tDh -yis -yis -yis -yis -yis -yis -yfA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -tHe -gGt -iwk -okH -gMI -gGt -nCo -ktQ -ktQ -ktQ -ktQ -ktQ -iol -qZN -gio -qZN -iol -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(107,1,1) = {" -ktQ -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -qRd -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kmb -ogd -aLR -yis -ogd -ogd -ogd -aLR -ogd -ogd -ogd -ogd -aLR -yis -ogd -ogd -ogd -ogd -ogd -vqj -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -gGt -gGt -aWq -jzf -aWq -gGt -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -acx -lmI -por -waG -acx -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(108,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iol -xTJ -lmI -bLZ -waG -wTp -iol -ktQ -ktQ -ktQ -ktQ -ryn -gGt -gGt -iQk -gGt -gGt -dDw -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(109,1,1) = {" -ktQ -tql -byk -tql -tql -frF -frF -tql -tql -byk -tql -tql -tql -byk -tql -byk -tql -vwO -tql -tql -tql -tql -ktQ -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ktQ -ktQ -ktQ -ktQ -ktQ -mZP -huR -hoH -gRb -jTe -huR -kLo -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -sUb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -acx -kQl -phy -por -hrX -hnx -acx -ktQ -ktQ -ktQ -ktQ -ulH -gGt -gGt -por -ldw -gGt -ulH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(110,1,1) = {" -ktQ -tql -cUX -cUX -tql -cUX -cUX -frF -frF -byk -byk -vwO -aro -byk -byk -tql -tql -byk -vwO -aro -tql -tql -ktQ -rmP -cwx -xhB -xhB -tnb -tnb -xhB -rmP -rmP -rmP -rmP -rmP -rmP -rmP -fWJ -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ktQ -ktQ -ktQ -ktQ -ktQ -huR -huR -uti -eNP -uti -huR -huR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -clT -sUb -ktQ -ktQ -sUb -sUb -sUb -sUb -sUb -sUb -sUb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ulH -gGt -gGt -gGt -diH -gGt -gGt -gGt -ulH -ktQ -ktQ -ktQ -vNc -raz -vNc -por -ldw -fWs -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(111,1,1) = {" -ktQ -tql -tql -frF -iJS -obU -iJS -obU -bos -cfz -afk -vwO -vwO -byk -iJS -obU -afk -iJS -vwO -vwO -tql -tql -ktQ -rmP -xhB -xhB -atT -kuz -ilq -xhB -xhB -rmP -rrN -xhB -teQ -xhB -ksh -nCN -teQ -xhB -xhB -ksh -ksh -xhB -xhB -rmP -ktQ -ktQ -ktQ -ktQ -ktQ -lzA -jAI -bsG -eJL -bgR -ppr -lzA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -sUb -sUb -xzW -qjr -qjr -qjr -xzW -sUb -clT -sUb -sUb -sUb -clT -ktQ -ktQ -ktQ -ktQ -ktQ -gGt -dkJ -raz -gGt -por -ldw -tFt -yed -gGt -ktQ -ktQ -ktQ -gGt -gGt -gGt -nGx -ldw -kQl -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(112,1,1) = {" -ktQ -byk -aro -byk -cUX -cfz -cfz -byk -byk -vwO -nkT -xBL -uOU -dSC -cUX -bje -byk -byk -tql -vmn -tql -tql -ktQ -uCx -uCx -hip -kXY -kXY -xgg -xhB -xhB -rbq -dmQ -xhB -tnb -xhB -fua -dmQ -tnb -tnb -xhB -rbq -rbq -xhB -xhB -rmP -ktQ -ktQ -ktQ -ktQ -ktQ -aGF -tqs -vPT -czf -tyX -kQv -aGF -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -sUb -xzW -xzW -ozF -scn -ozF -xzW -xzW -sUb -sUb -sUb -sUb -sUb -sUb -ktQ -ktQ -ktQ -ktQ -vNc -kTp -kTp -vNc -bLZ -ldw -bjw -rYs -gGt -ktQ -ktQ -ktQ -iol -eEr -tsu -por -ldw -yed -iol -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(113,1,1) = {" -ktQ -tql -vwO -byk -cUX -cUX -bje -bje -cUX -bje -nNO -nkT -dSC -cfz -pTp -bje -bje -tql -byk -rex -vwO -tql -ktQ -rmP -xhB -cZw -dYU -qmQ -dYU -xhB -lge -dfA -rds -dtK -teQ -lge -lHd -tLR -lVt -xhB -eCh -lge -pBX -tLR -teQ -rmP -ktQ -ktQ -ktQ -ktQ -srk -huR -huR -huR -msR -huR -huR -huR -srk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -xzW -xzW -xzW -wgA -xhI -fUo -xzW -xzW -xzW -aNb -kAz -sUb -sUb -sUb -ktQ -ktQ -ktQ -ktQ -gGt -gGt -gGt -gGt -por -ldw -tFt -bZR -gGt -ktQ -ktQ -ktQ -jXU -hnx -tsu -por -ldw -rYs -jXU -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(114,1,1) = {" -ktQ -byk -vwO -tql -cUX -uOU -stZ -vwO -cfz -dRC -cfz -dSC -jvp -vwO -vwO -cfz -bje -cfz -cUX -frF -vwO -tql -ktQ -rmP -rrN -cNl -bQL -lCX -wwM -xhB -kXY -gtN -mNm -dYU -xhB -szh -bqm -jBu -bQL -xhB -vcN -oTl -ktU -bQL -tnb -rmP -ktQ -ktQ -ktQ -ktQ -huR -bgJ -sMq -huR -czf -iWB -uIn -uwv -huR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -qjr -wAz -xzW -emx -xhI -tYH -xzW -pMc -qjr -sUb -hFf -sUb -qaS -uMH -ktQ -ktQ -ktQ -kIy -gGt -uFr -tFt -tsu -nGx -ldw -bjw -lkR -gGt -mtI -ktQ -ktQ -acx -xty -jpu -por -ldw -kGs -acx -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(115,1,1) = {" -ktQ -tql -vwO -cfz -bje -uOU -cfz -vwO -bJf -bJf -bJf -xdq -bJf -vwO -aro -byk -cfz -cfz -cUX -frF -vwO -tql -ktQ -rmP -rmP -rbq -uMf -pND -hbp -tnb -szh -uig -vcM -dYU -xhB -kXY -rGY -pGz -cPL -tnb -kXY -rXy -oTl -bQL -xhB -rmP -ktQ -ktQ -ktQ -ktQ -pju -fOt -fOt -pju -eJL -iWB -qOy -cjP -huR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -mFa -djg -fuu -xzW -xzW -huV -xzW -xzW -uMP -djg -mFa -hFf -sUb -nDT -nDT -ktQ -ktQ -ktQ -gGt -gGt -tFt -kTn -tsu -bLZ -ldw -tyE -bjw -gGt -gGt -ktQ -ktQ -gGt -gGt -gGt -kjc -gGt -gGt -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(116,1,1) = {" -ktQ -byk -vwO -cfz -bje -heq -byk -bJf -aWD -epm -aro -dSC -iob -bJf -cfz -cfz -cUX -heq -heq -frF -vwO -tql -ktQ -rmP -fWJ -eRx -dko -rNC -bQL -teQ -lCX -qcF -gHq -bQL -xhB -lCX -wUr -oGt -dYU -xhB -bQL -quq -hmK -fpf -xhB -rmP -ktQ -ktQ -ktQ -ktQ -huR -huR -huR -huR -czf -iWB -uIn -xOd -huR -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xWu -fKG -lwb -xYc -bfM -qaT -ocb -bWV -aKN -fKG -mFa -hFf -sUb -gBi -sUb -ktQ -ktQ -ktQ -iol -qKA -bjw -tFt -tsu -por -ldw -bjw -tFt -slP -iol -ktQ -ktQ -gGt -vys -aQA -uDS -tTT -heh -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(117,1,1) = {" -ktQ -tql -iJS -cfz -bje -cUX -cfz -vwO -nVf -nVf -iYw -ngD -wDA -qyG -naJ -naJ -cUX -heq -cUX -tql -vwO -tql -ktQ -rmP -tnb -xhB -uoy -kXY -bQL -xhB -xhB -xhB -xhB -iDY -xhB -xhB -tnb -xhB -iDY -xhB -iDY -xhB -teQ -xhB -xhB -rmP -ktQ -ktQ -ktQ -tTC -huR -ybM -uIn -nwD -oHH -iWB -qOy -scy -huR -adA -ktQ -ktQ -ktQ -ktQ -ktQ -mFa -fKG -cwJ -xyL -pEj -vak -sIy -uMz -aOM -fKG -xWu -hFf -sUb -pcY -sUb -ktQ -ktQ -ktQ -jXU -gIP -tFt -kTn -tsu -bLZ -ldw -tyE -bjw -aqY -jXU -ktQ -ktQ -ulH -gGt -fFz -asV -cQY -gGt -ulH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(118,1,1) = {" -ktQ -tql -vwO -vwO -bje -cUX -mGD -bJf -pxo -miK -bJf -dSC -mON -jFA -naJ -naJ -cUX -cUX -heq -byk -byk -byk -ktQ -rmP -teQ -xhB -bQL -bQL -dYU -bQL -dYU -dko -iDY -bQL -pZr -dYU -bQL -dYU -aeb -dYU -dYU -dYU -tnU -rbq -rmP -rmP -ktQ -ktQ -ktQ -huR -huR -uIn -kFw -nwD -eJL -iWB -iiS -qOy -huR -huR -ktQ -ktQ -ktQ -ktQ -ktQ -mFa -uaw -xzW -cQD -gDA -xzW -lvv -iZf -xzW -xhy -mFa -hFf -sUb -qye -sUb -ktQ -ktQ -ktQ -acx -qKA -lqk -bZy -aQA -por -tTT -bZy -evF -xHn -acx -ktQ -ktQ -kIy -gGt -tVv -cOm -tVv -gGt -mtI -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(119,1,1) = {" -ktQ -tql -aro -vwO -bje -byk -dSC -bJf -bJf -bJf -vwO -dva -gWP -bJf -cfz -dSC -bje -vwO -vwO -tql -byk -tql -ktQ -rmP -rmP -rbq -bQL -hdg -jvj -ycw -iPz -dYU -iDY -dYU -lge -sbp -rle -tLR -rac -lge -rle -sbp -tLR -rbq -rmP -rmP -ktQ -ktQ -ktQ -lzA -lCO -qOy -uIn -nwD -czf -iWB -qOy -uIn -nYn -lzA -ktQ -ktQ -ktQ -ktQ -ktQ -sUb -qjr -hmt -uOD -fVZ -fgF -gMS -dIy -gwP -qjr -sUb -hFf -qQF -rkS -sUb -ktQ -ktQ -ulH -gGt -bjw -tsu -gGt -gGt -peh -gGt -gGt -ldw -tFt -gGt -ulH -ktQ -ktQ -ulH -jAZ -jAZ -aAz -ulH -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(120,1,1) = {" -ktQ -tql -byk -iJS -cfz -cfz -cfz -vwO -dot -nVf -iYw -ngD -gKa -bJf -mpM -hBi -cUX -vwO -aro -tql -byk -tql -ktQ -rmP -rrN -dmQ -dko -anJ -pYP -fsK -iPz -bQL -xhB -tnb -xhB -teQ -tnb -xhB -xhB -xhB -xhB -xhB -xhB -tnb -teQ -rmP -ktQ -ktQ -ktQ -wPm -lIi -uIn -kFw -nwD -eJL -iWB -iiS -qOy -qCa -wPm -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xzW -hmt -iZf -eJh -sJA -bVh -iZf -eJh -xzW -sUb -hFf -ezj -sUb -sUb -ktQ -ktQ -gGt -hnx -tFt -tsu -gGt -frP -por -hyD -gGt -ldw -bjw -kQl -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(121,1,1) = {" -ktQ -tql -tql -vwO -naJ -nkT -bje -vwO -miK -tSX -bJf -dSC -caR -bJf -xCM -byk -bje -byk -byk -bos -byk -tql -ktQ -rmP -rmP -rbq -bQL -vvK -ePU -ePU -jgz -dYU -hip -gax -vxG -mUV -wAw -bYQ -fTB -cou -jkj -lyl -cJD -mfN -dcJ -rmP -ktQ -ktQ -ktQ -aGF -lCO -ceN -tko -rps -czf -imR -tko -jVP -oyS -aGF -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -qjr -fhG -bNJ -eJh -ofF -vYf -oQy -byn -qjr -sUb -hFf -neD -sUb -sUb -ktQ -ktQ -iol -tFt -bjw -wET -iol -por -por -efQ -iol -nKk -tFt -bjw -iol -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(122,1,1) = {" -ktQ -byk -tql -vwO -naJ -nkT -cfz -vwO -vwO -bJf -bJf -iYw -bJf -aro -bJf -byk -cUX -cUX -cfz -obU -byk -tql -ktQ -rmP -xhB -xhB -xry -kXY -pZr -dYU -bQL -kXY -hip -gax -ksh -dcm -ksh -dcm -drP -dcm -uCx -drP -ksh -dcm -ksh -rmP -ktQ -ktQ -srk -huR -qOy -nwD -huR -huR -vpO -huR -huR -iWB -uIn -huR -srk -ktQ -ktQ -ktQ -ktQ -sUb -xzW -xzW -cVS -mmu -xzW -lvv -skj -xzW -xzW -sUb -hFf -nNj -gPx -sUb -ktQ -ktQ -jXU -bjw -tFt -tsu -acx -por -por -por -acx -ldw -bjw -tFt -jXU -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(123,1,1) = {" -ktQ -tql -tql -vwO -byk -cUX -byk -iJS -cCp -dSC -cfz -dSC -dSC -mGD -cfz -bje -fTU -cUX -cfz -afk -tql -tql -ktQ -rmP -tnb -xhB -tnb -xhB -fIe -xhB -xhB -xhB -iRV -drP -uCx -syW -uCx -ksh -bLG -ksh -uCx -oNW -jEm -ksh -dfr -rmP -ktQ -ktQ -huR -kQv -uIn -nwD -huR -aLa -czf -tPk -huR -iWB -qOy -tqs -huR -ktQ -ktQ -ktQ -sUb -sUb -xzW -iKp -bWV -kQY -fmj -pEj -nwb -eXl -xzW -uDq -hFf -uSI -sUb -sUb -ktQ -ktQ -acx -eka -vZQ -paE -gGt -kCu -vvY -kCu -gGt -fkW -oBW -uFr -acx -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(124,1,1) = {" -ktQ -tql -byk -obU -byk -byk -wTs -dSC -cfz -vwO -aro -byk -naJ -byk -bje -heq -cUX -byk -cfz -afk -tql -tql -ktQ -rmP -xhB -xhB -xRx -eUS -drP -hzI -teQ -elu -dcm -dcm -syW -ksh -pja -ksh -ksh -ksh -syW -ksh -pja -ksh -dfr -rmP -ktQ -ktQ -lzA -uIn -qOy -sLO -lzA -czf -czf -uEY -lzA -hRb -uIn -qOy -lzA -ktQ -ktQ -ktQ -clT -sUb -xzW -xiy -gvX -oOW -boV -nnp -qYF -wCa -xzW -sUb -hFf -uSI -uSI -ktQ -ktQ -ktQ -gGt -gGt -kjc -gGt -gGt -gGt -gGt -gGt -gGt -gGt -kjc -gGt -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(125,1,1) = {" -ktQ -tql -tql -aro -vwO -tql -cUX -uOU -cUX -cUX -nNO -byk -byk -cfz -cUX -cUX -cfz -cfz -tql -vwO -tql -tql -ktQ -rmP -rmP -xhB -lIp -drP -lKV -gtC -xhB -kyE -dcm -gax -ksh -ksh -rmP -ujk -dov -ujk -rmP -ksh -rmP -rmP -rmP -rmP -ktQ -ktQ -wPm -qOy -uIn -nwD -aGF -czf -czf -czf -aGF -iWB -qOy -uIn -wPm -ktQ -ktQ -ktQ -sUb -sUb -xzW -xzW -xzW -eKE -xzW -eKE -xzW -xzW -xzW -sUb -hFf -uSI -uSI -ktQ -ktQ -ktQ -gGt -gJO -qfd -iZK -qfd -tFV -bLZ -gGt -mKO -aIH -aVJ -wBL -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(126,1,1) = {" -ktQ -tql -frF -wzw -cUX -cUX -cUX -cUX -cUX -cUX -cUX -cUX -byk -byk -cfz -tql -tql -cfz -vwO -tql -tql -tql -ktQ -rmP -rmP -tnb -xhB -tnb -oJd -xhB -xhB -tnb -xhB -slZ -dcm -ksh -rmP -rmP -ksh -rmP -rmP -rmP -rmP -rmP -pFX -rmP -ktQ -ktQ -aGF -aBv -lVL -eim -huR -bHY -fBv -bHY -huR -jfv -cCX -ybM -aGF -ktQ -ktQ -ktQ -sUb -sUb -xzW -pEp -oIx -dtP -wes -csm -mLi -kOC -xzW -sUb -hFf -sUb -sUb -ktQ -ktQ -nCo -gGt -vBi -dEK -oKK -mco -auI -dAA -gGt -doq -aVJ -oHi -vyG -gGt -tHe -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(127,1,1) = {" -ktQ -tql -tql -byk -vwO -vwO -vwO -vwO -aro -aro -vwO -vwO -rex -iJS -vwO -vwO -vwO -vwO -aro -tql -tql -tql -ktQ -rmP -rmP -rmP -rmP -rmP -fWJ -rmP -rmP -rmP -ksh -ksh -ksh -rmP -ksh -rmP -ksh -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ktQ -ktQ -huR -huR -wdm -huR -huR -huR -huR -huR -huR -huR -wdm -huR -huR -ktQ -ktQ -ktQ -ktQ -sUb -xzW -mjd -rif -iZf -iZf -iZf -rif -cZK -xzW -sUb -hFf -hkb -sUb -ktQ -ktQ -gGt -gGt -gGt -gGt -gGt -gGt -ulH -ulH -ulH -gGt -gGt -gGt -gGt -gGt -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(128,1,1) = {" -ktQ -tql -tql -byk -tql -byk -byk -tql -byk -tql -tql -byk -byk -byk -byk -tql -byk -tql -tql -byk -tql -tql -ktQ -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ksh -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -cRM -rmP -ktQ -ktQ -huR -vQO -bUc -baZ -bUc -svj -eJL -huR -qWF -uZN -auC -wsp -huR -ktQ -ktQ -ktQ -ktQ -sUb -xzW -gWS -fWS -qPo -eHK -xxE -wQX -iZf -xzW -lbA -hFf -nfn -sUb -ktQ -ktQ -gGt -jAZ -jAZ -aAz -hMS -gGt -gGt -gGt -gGt -gGt -xBc -jAZ -jAZ -aAz -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(129,1,1) = {" -ktQ -tql -tql -tql -tql -tql -tql -byk -tql -tql -aro -vwO -tql -tql -tql -byk -tql -tql -tql -tql -tql -tql -ktQ -rmP -cRM -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ksh -ksh -rmP -rmP -ksh -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ktQ -kLo -huR -lDi -mxZ -dOt -miN -fxy -hSL -huR -crx -auC -gFd -dCe -huR -mZP -ktQ -ktQ -xzW -xzW -xzW -xzW -xzW -lxb -iZf -dtP -xzW -xzW -xzW -xzW -xzW -lGL -sUb -sUb -ktQ -gGt -jAZ -jAZ -jAZ -xBc -gGt -jAZ -jAZ -aAz -gGt -hMS -jAZ -jAZ -jAZ -gGt -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(130,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -rmP -ktQ -huR -huR -huR -huR -huR -huR -srk -srk -srk -huR -huR -huR -huR -huR -huR -ktQ -ktQ -xzW -mfR -xzW -mfR -hoK -iZf -los -dlb -xzW -mfR -xzW -mfR -xzW -sUb -sUb -sUb -ktQ -ktQ -ktQ -ktQ -ktQ -hMS -xBc -jAZ -jAZ -jAZ -jAZ -xBc -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(131,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ruW -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -huR -bxr -bxr -hAu -mUq -huR -huR -huR -huR -huR -bYu -bxr -bxr -hAu -huR -ktQ -sUb -xzW -ybc -xzW -ybc -xzW -bQT -bQT -bQT -lSN -ybc -xzW -ybc -xzW -fvw -sUb -clT -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(132,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -nxV -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -huR -bxr -bxr -bxr -bYu -huR -bxr -bxr -hAu -huR -mUq -bxr -bxr -bxr -huR -ktQ -sUb -clT -sUb -ktQ -ktQ -sUb -sUb -sUb -sUb -sUb -sUb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(133,1,1) = {" -ktQ -ktQ -ktQ -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -ktQ -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -lQY -ktQ -qiO -lQY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -mUq -bYu -bxr -bxr -bxr -mUq -bYu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(134,1,1) = {" -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -xhp -ktQ -lma -lma -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(135,1,1) = {" -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -vvE -bRM -xhp -xhp -xhp -xhp -xhp -xhp -afs -afs -afs -afs -afs -afs -afs -afs -afs -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xLE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(136,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -bRM -nbF -bRM -nxV -bRM -xhp -xhp -bRM -bRM -bRM -xhp -afs -clr -clr -afs -afs -clr -afs -vlt -euU -usV -jlm -hWr -awB -vts -afs -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rlL -uDN -xmO -xmO -xmO -uDN -rlL -rlL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xLE -ktQ -yeQ -oqM -nvt -vcm -xNs -vcm -vcm -vcm -yeQ -vcm -vcm -vcm -xNs -ktQ -ktQ -ktQ -xLE -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(137,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -bRM -bRM -xhp -bRM -gPA -nbF -bRM -nbF -bRM -bRM -vvE -xhp -afs -fkQ -qSd -qSd -qSd -wCE -afs -mak -elI -gIc -huy -clr -clr -nBP -clr -clr -clr -clr -afs -clr -clr -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bej -xmO -mEi -xZI -irG -nMu -mEi -xmO -uDN -rlL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -rxc -wmF -moO -xNs -rxc -rxc -rxc -yeQ -rxc -rxc -xNs -xNs -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(138,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -clr -afs -aBE -afs -afs -clr -qSd -afs -khr -vls -nuq -ssR -clr -bIp -cKp -oNd -isd -xHG -hLj -iyP -jLT -clr -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bej -ljG -uUO -mTK -mqS -qyr -gDg -qBE -bej -rlL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -rxc -rxc -rxc -kND -yeQ -yeQ -yeQ -moO -xNs -yeQ -yeQ -yeQ -rxc -xNs -xNs -rxc -yeQ -kND -rxc -rxc -rxc -yeQ -ktQ -ktQ -dPb -dPb -dPb -lYA -tdy -lYA -dPb -dPb -dPb -tdy -klY -lYA -klY -dPb -dPb -lYA -tdy -klY -lYA -tdy -klY -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(139,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -vvE -clr -xhW -slV -kGL -avE -tKN -iOt -ald -ald -hjr -hRu -dFH -jUk -unL -eyx -wAr -kGT -pkV -jUk -obI -mbP -afs -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -bej -xmO -bej -ktQ -ktQ -ktQ -ktQ -kho -rdt -qyr -qyr -qyr -qyr -iMr -rSA -kho -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -kND -ydt -sGW -fpi -mJy -acp -epR -fhV -fpi -ydt -kND -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -ktQ -ktQ -dPb -dPb -dPb -dPb -pwV -dPb -dPb -dPb -dPb -dPb -cpV -sVH -dPb -dPb -dPb -dPb -kaP -tkE -pYG -dPb -dPb -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(140,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -clr -qWV -oHl -afs -eIL -dDa -jlm -awB -rFn -rFn -awB -aKM -clr -gnx -rck -ndv -rck -hgr -clr -bHl -sGH -afs -xhp -ktQ -ktQ -ktQ -ktQ -bej -iLe -wKp -iLe -bej -acC -bej -xmO -bej -tYG -foK -nIc -tIA -pWA -txT -hdr -bej -bej -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -uas -jFf -rxc -nAh -uZJ -txe -vYq -gEk -xNs -cRP -cRP -gLq -cRP -cRP -eYe -edd -uZJ -qYJ -rxc -jFf -hPF -yeQ -ktQ -ktQ -dPb -dPb -sNt -wQH -kaZ -bXZ -xbr -dIU -dwa -mOK -jCU -jCU -mOK -kVp -pgJ -qhD -dth -mOK -hYI -mOK -dXz -iEU -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(141,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -xhp -xhp -xhp -xhp -xhp -clr -afs -afs -afs -clr -vvE -bRM -clr -xhW -eIL -ahx -bAk -vVC -ssR -clr -clr -afs -clr -hHz -clr -rnj -usV -scK -xWf -usV -clr -ciW -afs -clr -xhp -ktQ -ktQ -ktQ -ktQ -kho -fMb -ane -lXK -bej -ueO -iLe -gpc -iLe -bej -bej -iLe -utt -iLe -bej -bej -iLe -bej -iLe -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -gcd -bUV -wmF -urC -yeQ -vKz -cRP -gLq -xNs -xNs -xNs -acp -acp -gLq -acp -wVE -yeQ -uhd -wmF -cxC -xFn -yeQ -ktQ -ktQ -uDb -lJa -cSN -dxv -pcE -bXZ -xbr -mUd -gIN -mOK -jCU -jCU -mOK -nHC -pgJ -iEU -dth -mOK -iEU -mOK -mOK -kyr -dPb -klY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(142,1,1) = {" -ktQ -ktQ -ktQ -ktQ -bRM -xhp -xhp -xhp -xhp -xhp -xhp -clr -xup -csv -lod -clr -hjr -nHe -clr -clr -fcs -clr -clr -vVC -vwY -hLj -ckg -iyP -afs -jau -eaM -bVJ -wrH -wrH -wrH -wrH -tSm -cMl -kBL -clr -por -ktQ -ktQ -ktQ -ktQ -kho -fMb -drV -lXK -bej -wGh -doy -hpJ -fZR -jae -qoG -bej -jnc -bej -uhF -knd -ago -ukP -suV -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -voH -mNH -xbQ -tCR -nxf -igY -cRP -cRP -eJG -moO -moO -raj -raj -cRP -cRP -edd -nxf -coK -wPT -kiq -krb -yeQ -ktQ -ktQ -eRQ -wph -tFw -dxv -pcE -xbr -xbr -mUd -hCk -mOK -jCU -jCU -mOK -qKd -mOK -mOK -mOK -mOK -fJx -mOK -mOK -mOK -pwV -tdy -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(143,1,1) = {" -ktQ -ktQ -ktQ -ktQ -clr -clr -clr -clr -clr -clr -clr -clr -wrH -jau -jau -ycL -bVJ -bVJ -dJh -qha -bVJ -tSm -sHl -dDa -bnH -afs -cIf -vUr -sGA -mLn -uZW -bVJ -bVJ -bVJ -bVJ -bVJ -bVJ -cMl -bVJ -llZ -por -ktQ -ktQ -ktQ -ktQ -bej -pHZ -hWE -iXp -bej -aTp -dlz -oYK -oYK -oYK -kRF -bej -swP -bej -mUk -qen -lvT -nNs -aBF -bej -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -dIo -vpY -vkJ -eOn -rGa -igY -wiX -mbp -raj -jFk -mmK -jFk -xNs -xNs -mbp -edd -rGa -coK -spx -miF -dIo -yeQ -ktQ -ktQ -eBY -rrc -nRd -dxv -jGS -rop -rop -rDz -rop -rop -rop -rop -rop -rop -rop -rop -rop -rop -rop -rop -kaZ -hYI -dPb -tdy -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(144,1,1) = {" -ktQ -ktQ -ktQ -ktQ -clr -clr -clr -clr -clr -clr -clr -clr -wrH -jau -bVJ -cQd -wrH -eIo -mzh -dnX -wCB -sUX -tcF -rbW -kfv -ald -mMk -rnM -afs -fcX -jnQ -rLo -wrH -wrH -uBz -uBz -akm -iQJ -bVJ -clr -por -ktQ -ktQ -ktQ -trL -ueO -ozy -fhZ -vHL -bej -vJk -xBt -xxY -tzb -hUK -iZg -bej -jnc -bej -ycD -hSs -lMY -liO -ibi -bej -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -uTU -mNH -iQm -rBL -rGa -gre -cRP -moO -xNs -jFk -cbH -mmK -xNs -xNs -vSb -edd -rGa -coK -spx -kiq -uTU -rxc -ktQ -ktQ -dPb -dPb -bst -dxv -sNc -ahY -ahY -wBt -ahY -ahY -ahY -ahY -ahY -ahY -ahY -ahY -ahY -ahY -ahY -pzK -pcE -qhD -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(145,1,1) = {" -ktQ -ktQ -ktQ -bRM -clr -clr -brn -bnI -brn -clr -clr -jax -wrH -bVJ -bVJ -nuq -rck -pdM -pdM -rck -afs -tid -bVJ -vVC -ihU -clr -afs -afs -clr -xEh -bVJ -mff -lnm -ohG -ohG -xRq -mff -irM -wAr -llZ -por -ktQ -ktQ -ktQ -ktQ -bej -jap -fhZ -uhA -iLe -bej -bej -wcD -iLe -lsg -iLe -bej -jnc -bej -iLe -qAO -iLe -bej -bej -bej -iLe -rfP -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wmF -bYf -hBX -lLH -xlt -rGa -txe -cRP -xNs -xkx -jFk -hCD -mmK -raj -acp -tKW -edd -rGa -coK -spx -xXW -bYf -rxc -ktQ -ktQ -klY -dPb -bst -dxv -pcE -orH -orH -mUd -icy -mPt -mPt -cMR -mOK -mOK -arm -nwS -mOK -mOK -arm -dxv -pcE -kyr -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(146,1,1) = {" -ktQ -ktQ -ktQ -xhp -clr -clr -fOK -hIw -hIw -jjP -jjP -jjP -wrH -bVJ -bVJ -ugM -rck -wzN -mpb -rck -afs -auD -wAr -iOn -bCZ -bmA -jau -jau -nhe -bVJ -bVJ -mQj -ugM -nEf -aNM -ugM -mQj -cMl -aPy -clr -por -ktQ -ktQ -ktQ -ktQ -bej -kad -fhZ -roK -hIo -bEU -lDV -wzD -ehi -qxi -wzD -ecg -dfF -wzD -bEU -qxi -cIs -wzD -lDV -iOP -axk -oMh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wmF -jyy -qkY -oTF -igX -iIx -txe -mbp -acp -eJG -raj -xNs -xNs -raj -acp -cRP -edd -iIx -eVH -rbS -jCG -xym -rxc -ktQ -ktQ -tdy -dPb -ybm -dxv -pcE -orH -sNt -mUd -qNh -dPb -dPb -dPb -dPb -dPb -dPb -dPb -qjA -ugc -mOK -dxv -pcE -mOK -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(147,1,1) = {" -ktQ -ktQ -ktQ -xhp -clr -clr -fOK -hIw -hIw -fgz -fgz -fgz -wrH -bVJ -jau -ugM -rck -mpb -mpb -rck -afs -ozA -qWl -sQn -jYR -bVJ -bVJ -bVJ -nhe -bVJ -bVJ -mQj -ugM -aNM -kIX -ugM -mQj -cMl -gqU -clr -sgH -ktQ -ktQ -ktQ -ktQ -dZk -gnZ -fhZ -gnZ -efY -jnc -bej -bej -nCw -bej -xpH -bej -bej -bej -dHu -bej -xpH -bej -bej -tih -iLe -iLe -bel -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rxc -rNs -akw -bNn -mfZ -yeQ -haB -cRP -bnC -nxL -cRP -moO -slo -cRP -gLq -wFe -fDW -yeQ -uhd -rxc -foR -bKo -rxc -ktQ -ktQ -dPb -dPb -rdM -dxv -pcE -sNt -cVH -mUd -qNh -dPb -oSf -wYk -mOK -cnh -mOK -mOK -mOK -iEU -mOK -dxv -jGS -kzq -mCB -sOj -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(148,1,1) = {" -ktQ -ktQ -bRM -xhp -clr -clr -brn -dDX -brn -clr -clr -eGY -wrH -bVJ -jau -pyZ -ndv -jPO -jPO -rck -afs -aqS -jau -dDa -ihU -afs -clr -afs -afs -xEh -bVJ -veX -eus -ohG -ohG -hRu -jzI -cMl -jau -nuq -ktQ -ktQ -ktQ -ktQ -ktQ -bej -lLq -xwj -kwD -bej -oqX -bej -cTB -xQE -wEn -xJA -dla -bej -xhP -seD -jrQ -fZX -hGL -bej -wdC -bej -iLe -ueO -bej -bej -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -mPj -asH -uJL -aaW -xhX -txe -bnC -gsv -acp -eYe -acp -acp -acp -ecx -bnC -edd -xhX -qYJ -rxc -jRs -egm -yeQ -ktQ -ktQ -dPb -dPb -sNt -dxv -pcE -grn -iEU -mUd -hSD -dPb -uFJ -mOK -vgs -dPb -ayZ -mOK -pgJ -iEU -mOK -dxv -aej -pcE -nlB -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(149,1,1) = {" -ktQ -ktQ -bRM -xhp -clr -clr -clr -clr -clr -clr -clr -clr -wrH -bVJ -bVJ -cQd -wrH -rck -rCt -fdM -qAr -gDd -tcF -dDa -uKg -hLj -ucD -nJH -afs -jnT -knF -rLo -uBz -wrH -wrH -wrH -akm -dkN -ipl -ugM -ktQ -ktQ -ktQ -ktQ -bej -bej -bej -bej -bej -bej -gvQ -bej -oxz -crD -gnZ -gnZ -nYr -bej -gHi -qYC -arH -wUg -nYr -bej -agb -bej -eWF -lNf -haD -iLe -bej -ktQ -ktQ -ktQ -ktQ -yeQ -mnT -omY -wmF -mfZ -yeQ -kND -tvd -tLk -tvd -gUN -wqj -rHE -tvd -tLk -tvd -kND -yeQ -uhd -wmF -mnT -mnT -rxc -ktQ -ktQ -dPb -dPb -jWm -dxv -pcE -bBS -rdM -mUd -orH -dPb -ukX -mOK -mOK -dPb -mhY -ujI -mOK -kOI -mOK -dxv -sNc -vhi -mCB -sUw -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(150,1,1) = {" -ktQ -ktQ -xhp -xhp -clr -clr -clr -clr -clr -clr -clr -clr -wrH -jau -bVJ -xSc -bVJ -bVJ -bVJ -bVJ -bVJ -kFN -sHl -vVC -ssR -afs -cIf -vUr -gwl -qWl -bfH -eUx -dLq -dLq -dLq -dLq -dLq -xoH -ipl -pyZ -ktQ -ktQ -ktQ -bej -iLe -ebl -uhr -wvs -wvs -iLe -hok -iLe -bej -bej -bej -bej -bej -bej -bej -bej -bej -bej -bej -iLe -lXb -iLe -bRN -rOb -vAB -coA -iLe -bej -ktQ -ktQ -ktQ -yeQ -yeQ -yeQ -bIk -gDU -yeQ -yeQ -bIk -yeQ -gDU -eoo -sbC -wTj -gDU -yeQ -bIk -yeQ -yeQ -gDU -bIk -yeQ -rxc -rxc -ktQ -ktQ -klY -dPb -usP -dxv -pcE -rdM -bBS -mUd -cVH -dPb -dPb -dPb -cnh -dPb -dPb -dPb -qjA -iEU -mOK -dxv -pcE -iEU -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(151,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -ksF -iSD -lsH -clr -hjr -ohG -ohG -nHe -clr -clr -clr -bKW -dFH -jUk -hwy -kKO -afs -fJo -wrH -hFC -wrH -wrH -wrH -wrH -kfH -rJv -epj -clr -ktQ -ktQ -ktQ -bej -hDo -qVO -aer -aer -aer -cjz -ozP -oKd -gbd -rjX -vFo -qVd -iCM -lEL -oEn -akI -ngR -rjX -gbd -qgy -rOb -lQx -lDo -gTa -swI -swI -bdE -bej -ktQ -ktQ -ktQ -kND -rxc -xdf -rxc -uJL -hIm -fkZ -haW -mbh -aeL -vsG -vsG -vsG -iNu -ffK -fkZ -fkZ -fkZ -fkZ -haW -crZ -yeQ -kND -ktQ -ktQ -lYA -dPb -wjq -dxv -pcE -bBS -sNt -mUd -sNt -rdM -rdM -sNt -hIZ -mOK -arm -mOK -mOK -mOK -arm -dxv -pcE -rAH -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(152,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -afs -afs -afs -clr -bRM -bRM -bRM -bRM -xhp -xhp -xhp -dDa -huy -clr -afs -clr -clr -afs -nuq -xRh -nhe -nuq -wrH -uBz -clr -clr -clr -clr -ktQ -ktQ -trL -ueO -hQI -swI -tpm -swI -swI -tHx -urJ -awq -czR -mVr -mss -urh -qvQ -swI -swI -fgs -jKf -mVr -czR -awq -urJ -ioy -swI -swI -swI -swI -gYP -ueO -xij -ktQ -ktQ -ktQ -kND -rxc -wmF -haW -rxc -wmF -jFM -txe -luV -sZF -kgu -oGD -ill -jmw -eKn -haW -haW -haW -mSR -kND -kND -ktQ -ktQ -ktQ -dPb -dPb -rdM -dxv -jGS -rop -rop -rDz -rop -rop -rop -rop -fFv -rop -rop -rop -rop -rop -rop -dsd -pcE -cbG -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(153,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -vvE -bRM -xhp -xhp -xhp -xhp -dDa -mNw -rFn -rFn -rFn -vVH -afs -pyZ -wnJ -bVJ -pyZ -dHc -oXO -clr -xhp -xhp -ktQ -ktQ -ktQ -bej -iLe -lVf -wra -nEs -lUW -yjr -nEs -dIC -oOo -iLe -mAF -kgy -lop -lop -itA -krS -nxC -swI -aIl -iLe -dFO -aTE -nEs -dXD -xqK -nEs -gwo -acB -iLe -bej -ktQ -ktQ -ktQ -ktQ -yeQ -yeQ -bIk -yeQ -yeQ -eKn -igY -eMS -xAm -bnC -wVK -ukf -fpo -fkZ -yeQ -xNs -aCh -xNs -xNs -ktQ -ktQ -ktQ -ktQ -uDb -lJa -cSN -dxv -sNc -ahY -ahY -wBt -ahY -ahY -ahY -pzK -aej -sNc -ahY -ahY -pzK -aej -aej -aej -pcE -cQG -dPb -lYA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(154,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -xhp -xhp -xhp -xhp -aGd -jUk -ald -ald -elo -dzp -clr -ePY -uat -wrH -wrH -wrH -uBz -clr -bRM -ktQ -ktQ -ktQ -ktQ -bej -bej -pJx -pJx -jjs -pJx -pJx -jjs -pJx -pJx -bej -bej -bpe -eqP -pDj -iLe -iLe -aNp -swI -fYM -bej -pJx -pJx -jjs -pJx -pJx -jjs -pJx -pJx -bej -bej -ktQ -ktQ -ktQ -yeQ -kND -weg -flw -sFL -yeQ -haW -nvS -luV -hgA -vwH -wVK -ukf -nZr -fkZ -yeQ -bll -hyA -huZ -kND -yeQ -ktQ -ktQ -ktQ -eRQ -wph -tFw -dxv -pcE -iPU -jef -mUd -pzy -dPb -arm -dxv -aej -pcE -arm -dPb -uaT -aej -aej -aej -pcE -mOK -pwV -klY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(155,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -vvE -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -afs -lHg -wvy -hUE -gAX -hPV -mIi -pJY -pJY -wrH -nuq -bRM -ktQ -ktQ -ktQ -ktQ -bej -bej -pzq -fkn -bej -pzq -fkn -bej -pzq -fkn -bej -bej -cLj -lQz -wsY -uWB -bej -fHL -fYM -iLe -bej -pzq -fkn -bej -pzq -fkn -bej -pzq -fkn -bej -bej -ktQ -ktQ -ktQ -yeQ -xiw -waQ -flw -ukf -uwD -haW -wKl -luV -wMI -dcU -ePy -ill -jmw -fkZ -maA -rBu -dCB -dgg -dMC -yeQ -ktQ -ktQ -ktQ -eBY -rrc -nRd -dxv -pcE -jcd -mPt -mUd -rdM -dPb -suM -dxv -aej -pcE -cvm -dPb -wgK -ngn -hEU -aej -pcE -cvm -dPb -klY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(156,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -vvE -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -lHg -lzq -afs -woT -ipl -xfR -ipl -xfR -wrH -ugM -bRM -ktQ -xhp -ktQ -ktQ -bej -ktQ -pzq -pzq -ktQ -pzq -pzq -ktQ -pzq -pzq -ktQ -bej -iLe -sxJ -nGS -eko -bej -qbC -iLe -bej -ktQ -pzq -pzq -ktQ -pzq -pzq -ktQ -pzq -pzq -ktQ -bej -ktQ -ktQ -ktQ -mgD -qmI -vEB -waQ -ukf -qwC -hXY -lCr -dnF -kkz -kkz -kkz -aPq -jbR -kXw -jMn -rBu -hyA -dCB -rdS -iWp -ktQ -ktQ -ktQ -dPb -dPb -cVH -jES -xnS -icy -xjx -bCG -pzy -dPb -arm -jES -aej -iiE -arm -dPb -pVq -dvx -dvx -tIp -nFT -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(157,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -vvE -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -lHg -lzq -mQJ -rZk -uBG -pJY -pJY -uBG -wrH -ugM -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iLe -pKP -oPi -kkQ -iLe -aOw -bej -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -wTi -vEB -vEB -uBk -req -fkZ -jvW -gEk -cRP -cRP -cRP -rcc -jmw -fkZ -fEx -uBs -lAt -hyA -umC -iVZ -ktQ -ktQ -ktQ -dPb -dPb -dPb -gaP -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -cJz -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(158,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -xhp -vvE -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -clr -fBE -lzq -cRh -hFC -ipl -ipl -ipl -ipl -uBz -pyZ -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -oMh -oMh -oea -oMh -oMh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -mwW -vEB -waQ -ukf -seY -cBr -kdY -cRP -kND -lOp -kND -cRP -lBh -haW -nLb -rBu -lAt -dgg -sdr -rxc -ktQ -ktQ -ktQ -dPb -dPb -kjR -mOK -dPb -aNC -rlf -rlf -lTO -rlf -aBY -mvU -aej -kaZ -hYI -dPb -hco -oNF -mOK -mOK -mOK -mOK -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(159,1,1) = {" -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -bRM -xhp -xhp -xhp -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -clr -fBE -uko -xpM -lXG -pJY -pJY -pJY -pJY -wrH -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -yeQ -sWT -iKz -yeQ -haW -lhA -udi -kND -mDH -kND -sOE -rsM -xfO -yeQ -oDD -iMj -dxM -rxc -kND -ktQ -ktQ -ktQ -dPb -dPb -kZx -rpF -dPb -bEZ -rlf -qtw -lTO -rlf -aBY -mvU -aej -pcE -nNp -dPb -gwz -oNF -oFI -eZk -kUj -mML -dPb -tdy -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(160,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -bRM -cNI -bRM -bRM -xhp -xhp -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -clr -lHg -lzq -cwo -hFC -ipl -xfR -xfR -ipl -sUn -clr -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xNs -xNs -yeQ -yeQ -yeQ -haW -xlj -acp -kND -lOp -kND -ecx -hcm -kXw -yeQ -yeQ -fCK -yeQ -kND -ktQ -ktQ -ktQ -ktQ -dPb -dPb -dGV -iYk -dPb -nux -rlf -wZA -lTO -rlf -aBY -mvU -aej -pcE -fJx -dPb -vxb -oNF -ftq -usN -kUj -mOK -dPb -lYA -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(161,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -bRM -xhp -bRM -xhp -xhp -bRM -bRM -nxV -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -clr -fBE -uko -tGO -rZk -pJY -pJY -pJY -pJY -uBz -oOk -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -hKe -pao -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xNs -xNs -kND -mSR -haW -lhA -cRP -cRP -cRP -cRP -acp -cHz -cDc -mSR -kND -xNs -xNs -ktQ -ktQ -ktQ -ktQ -ktQ -dPb -dPb -beW -avv -dPb -wtM -rlf -rlf -lTO -rlf -aBY -mvU -aej -pcE -wLG -dPb -uEV -oNF -gyj -rAW -kUj -mML -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(162,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -bRM -xhp -xhp -bRM -xhp -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -nuq -xsC -uko -clr -eUR -xfR -ipl -ipl -ipl -gZt -wrd -clr -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -lGv -icK -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xNs -crZ -cDc -fkZ -oYq -tvd -gUN -acp -rHE -hjN -pUX -haW -xNs -vzu -xNs -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -dPb -dPb -coo -wym -dPb -cNR -rlf -gfk -dPb -mer -aBY -mvU -aej -pcE -hYI -dPb -xTk -qly -mOK -mOK -mOK -mOK -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(163,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -bRM -gPA -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -pyZ -tjq -dOl -jUk -lgq -oZu -utw -eRn -eRn -oFo -mwq -clr -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wrx -wsv -lKL -foI -nJX -trs -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kZh -ktQ -ktQ -mgD -eKn -jFM -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -haW -xNs -fQL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -klY -dPb -dPb -dPb -dPb -dPb -dPb -cnh -dPb -fCi -rop -dsd -aej -pcE -nNp -dPb -dPb -dPb -dPb -dPb -qnX -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(164,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -xhp -xhp -xhp -xhp -xhp -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -bRM -bRM -bRM -bRM -bRM -clr -lHg -ssR -afs -wrH -wrH -wrH -gZt -dJG -wrH -gIp -clr -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -uVa -nEQ -fmN -lKL -qmz -eDL -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -rxc -rxc -yeQ -ktQ -yeQ -haW -jFM -yeQ -gKs -vWK -upy -yeQ -xgc -nEE -hJH -yeQ -fkZ -iVt -yeQ -ktQ -yeQ -rxc -xNs -yeQ -ktQ -lYA -dPb -qPW -sXV -tJi -upo -dPb -mOK -dPb -mSZ -aej -aej -aej -pcE -fJx -dPb -cup -spL -iEU -oHo -hIZ -oHo -dPb -tdy -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(165,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -xhp -xhp -xhp -xhp -bRM -xhp -xhp -xhp -xhp -xhp -xhp -bRM -nbF -gPA -nbF -bRM -nbF -bRM -clr -fHf -ssR -clr -xoF -xoF -bcf -dHg -iRW -clr -uhc -clr -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -ujh -iIu -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -yeQ -yeQ -yeQ -yeQ -fkZ -fkZ -bIk -mSR -iga -kUL -yeQ -sFs -ivK -nHK -lWU -fkZ -eKn -xNs -xNs -xNs -xNs -coy -yeQ -ktQ -tdy -dPb -dPb -dPb -ygz -tJi -cnh -mOK -cnh -jES -ahY -ahY -ahY -vhi -dYQ -xJu -dYQ -dYQ -dYQ -dYQ -hxt -mML -dPb -klY -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(166,1,1) = {" -ktQ -ktQ -ktQ -ktQ -lma -lma -lma -lma -ktQ -bRM -bRM -bRM -bRM -xhp -xhp -xhp -bRM -bRM -nxV -bRM -xhp -xhp -xhp -xhp -bRM -bRM -clr -cBU -ssR -afs -afs -afs -clr -clr -afs -clr -gek -nuq -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -hhE -kSn -jzc -lKg -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -ngx -lHo -phA -aeH -yeQ -eab -fkZ -yeQ -uNp -erk -upy -yeQ -phG -cLn -fBQ -yeQ -fkZ -eKn -xNs -arN -anK -cPf -mnT -yeQ -ktQ -dPb -dPb -aRR -sXV -tJi -jnu -dPb -rgO -dPb -pgJ -fXX -dth -pgJ -oTC -dth -dPb -kQW -lAF -kQW -mOK -nIx -mOK -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(167,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -bRM -xhp -bRM -bRM -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -bRM -bRM -clr -chJ -txi -hWr -hWr -qsB -rFn -cGG -qsB -jMp -qsi -kaT -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ewE -pIW -ujh -ktQ -ujh -ujh -stC -jzc -kqH -ujh -ktQ -ujh -pjZ -jjq -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -mnT -lHo -phA -qgz -yeQ -uqb -muV -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -fkZ -fkZ -yeQ -aeH -rcR -cPf -mnT -rxc -ktQ -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(168,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -bRM -bRM -bRM -bRM -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -xhp -xhp -ktQ -ktQ -ktQ -ujh -stC -vLo -yie -ujh -ktQ -ujh -eaB -ujh -jzc -tpG -ujh -ktQ -ujh -sUO -jzc -stC -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iqu -tRC -xzd -ftt -aeH -yeQ -guf -muV -yeQ -gDT -aYZ -gvb -yeQ -vNz -foL -tqE -yeQ -dvn -ceA -yeQ -agi -dWQ -rxc -uGA -rxc -ktQ -dPb -dPb -dPb -tdy -klY -tdy -dPb -dPb -dPb -klY -lYA -klY -klY -tdy -lYA -dPb -dPb -dPb -klY -tdy -tdy -dPb -dPb -dPb -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(169,1,1) = {" -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -bRM -bRM -bRM -xhp -xhp -xhp -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ujh -dek -jzc -saQ -ujh -ktQ -ujh -krd -jjh -jzc -xEm -ujh -ktQ -ujh -lkG -jzc -pQS -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iqu -agc -xCe -phA -bnC -bIk -fkZ -jFM -bIk -gDT -wNM -kkP -yeQ -xsr -cxz -gDT -bIk -fkZ -fkZ -bIk -bnC -rcR -cPf -mnT -rxc -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(170,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ujh -jHZ -jzc -nUo -ujh -ktQ -ujh -fux -ujh -lMq -joj -ujh -ktQ -ujh -wrm -jzc -fhp -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -kla -lHo -mQh -cpn -yeQ -dvn -eKn -yeQ -aRM -swY -eGL -yeQ -ahc -aiI -aRM -yeQ -kXw -haW -yeQ -quK -faJ -tic -mnT -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(171,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -huu -ujh -ujh -ujh -ujh -stC -puB -jzc -jzc -ujh -ujh -ujh -ujh -cEK -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -yeQ -xzd -xzd -yeQ -yeQ -eab -eKn -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -eKn -ggA -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(172,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -bqT -jzc -jzc -ujh -ujh -ujh -ujh -ujh -eeG -dgk -stC -ujh -jzc -jzc -jzc -wHW -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -aPL -gDT -bJV -bnC -yeQ -fkZ -haW -yeQ -gDT -aYZ -vNz -yeQ -gvb -foL -gDT -yeQ -eKn -dvn -yeQ -hnf -foz -qEC -hAg -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(173,1,1) = {" -ktQ -kag -qAy -qzX -qzX -qzX -kag -kag -kag -kag -kag -kag -kag -qzX -kag -qzX -qzX -qAy -wkD -wkD -kag -kag -kag -kag -kag -kag -ktQ -ktQ -ktQ -cto -cto -cto -cto -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -uiY -jzc -jzc -mYP -ujh -bHN -dnm -jiS -jzc -jzc -ixO -ujh -wTo -jzc -jzc -jzc -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -nxf -uLA -msN -upA -bnC -bIk -fkZ -haW -bIk -gDT -cxz -oQr -yeQ -oSe -mga -gDT -bIk -haW -aJN -bIk -bnC -nHK -mSR -iVt -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(174,1,1) = {" -ktQ -wkD -qzX -qzX -qAy -kag -wkD -wkD -wkD -atu -qAy -kag -kag -qAy -qzX -qzX -wkD -wkD -wkD -wkD -kag -kag -wkD -qzX -kag -kag -ktQ -ktQ -cto -nVb -qfH -qfH -qfH -qfH -exK -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vQI -dqM -kyi -fMh -jzc -xeq -jzc -jzc -lKL -lKL -jzc -jzc -xeq -jzc -kyi -mrI -nzB -nni -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rGa -uLA -rkm -upA -bnC -yeQ -haW -haW -yeQ -aRM -aiI -ahc -yeQ -pjH -bMv -aRM -yeQ -haW -fkZ -yeQ -aJH -vFu -int -hAg -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(175,1,1) = {" -ktQ -kag -qzX -wkD -wkD -wkD -gdY -gdY -wkD -wkD -wkD -kag -kag -qzX -qzX -nRS -nRS -wkD -wEE -qAy -kag -kag -wEE -wkD -qzX -wkD -ktQ -ktQ -cto -fUD -pLQ -wIj -bjI -pLQ -lOe -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -nAq -ogJ -ceo -auY -jzc -eeG -jzc -lKL -lKL -lKL -lKL -jzc -eeG -jzc -epS -eJk -oQj -nhB -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -rGa -uLA -vNz -upA -xRF -yeQ -haW -mxM -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -haW -guf -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(176,1,1) = {" -ktQ -kag -qAy -wkD -wkD -gdY -gdY -gdY -gdY -wkD -wkD -qAy -kag -qzX -wkD -nRS -wkD -wEE -wEE -kag -qaP -qaP -qaP -wEE -wkD -kag -ktQ -ktQ -cto -fUD -oTP -mUG -mUG -xuE -lOe -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -eSR -hxx -oMb -eLB -hZa -ujh -jzc -lKL -iPv -eOW -lKL -jzc -ujh -nfs -aKe -mXK -uiT -xiW -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -iIx -uLA -rkm -upA -bnC -yeQ -haW -haW -yeQ -gDT -aYZ -vNz -yeQ -rkm -foL -gDT -yeQ -haW -haW -yeQ -mFm -cDp -nFj -xed -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(177,1,1) = {" -ktQ -wkD -wkD -wkD -gdY -gdY -kSj -gdY -ehT -wkD -wkD -qAy -qzX -wkD -wkD -wkD -wkD -wEE -kag -kag -qaP -qaP -qaP -wEE -wkD -kag -ktQ -ktQ -nVb -xMD -pLQ -plI -mUG -pLQ -lOe -cto -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -ujh -ujh -ujh -stC -jzc -lKL -jYe -hef -lKL -jzc -stC -ujh -ujh -ujh -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -aPL -gDT -bJV -bnC -yeQ -haW -guf -bIk -gDT -hGz -jGk -yeQ -fdY -wNM -gDT -bIk -haW -haW -xec -cDp -cDp -pck -yeQ -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(178,1,1) = {" -ktQ -kag -wkD -wkD -gdY -gdY -mYG -gdY -ehT -nRS -wkD -btE -wkD -wkD -kkC -wEE -wEE -qaP -qaP -qaP -qaP -qaP -wEE -wEE -wkD -qzX -ktQ -ktQ -rsQ -fLQ -mUG -mUG -mUG -wBM -qzq -cto -cto -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -sOv -xVA -xVt -sMD -lKL -oAI -pTK -lKL -ajz -boT -caS -qVl -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -cGD -bJV -bnC -yeQ -bdI -haW -yeQ -aRM -oAs -ngw -yeQ -eGL -swY -aRM -yeQ -haW -iVt -yeQ -oLn -uTm -qwz -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(179,1,1) = {" -ktQ -wkD -qAy -wkD -wkD -gdY -gdY -gdY -cbz -wkD -ocd -wkD -wkD -wkD -wkD -wEE -qaP -qaP -qaP -qaP -qaP -qaP -wEE -wEE -wkD -wkD -ktQ -ktQ -rsQ -vLM -mUG -mUG -mUG -mUG -qzq -cto -cto -cto -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vQI -hSK -pph -rMY -jzc -lKL -cSu -okM -lKL -jzc -sJG -bYR -bVd -nni -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -xqL -bnC -yeQ -haW -haW -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -haW -haW -yeQ -nsL -yeQ -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(180,1,1) = {" -ktQ -kag -qzX -qzX -wkD -nRS -wkD -wkD -wkD -nNa -wkD -wEE -wEE -qaP -qaP -qaP -qaP -wEE -qaP -qaP -qaP -qaP -wEE -wEE -kag -kag -ktQ -ktQ -rsQ -mUG -mUG -mUG -mUG -mUG -iqS -cto -cto -cto -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -nAq -pLs -dvV -tdW -jzc -lKL -ggV -kSc -lKL -jzc -avI -vTz -kDW -nhB -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -yeQ -yeQ -crZ -haW -haW -haW -haW -txe -acp -edd -haW -haW -guf -haW -crZ -yeQ -yeQ -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(181,1,1) = {" -ktQ -wkD -qzX -qzX -wkD -wkD -wkD -wkD -ocd -wEE -wEE -qaP -qaP -qaP -wEE -wEE -wEE -wEE -wEE -wEE -wEE -wEE -wEE -kag -wkD -kag -ktQ -ktQ -iRQ -qoN -mUG -mUG -mUG -mUG -jKu -iPV -iPV -exK -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -eSR -tSE -kjH -pYS -jzc -lKL -mfl -rev -lKL -jzc -ssW -sbs -qyA -xiW -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -kND -imo -haW -iQY -haW -txe -acp -edd -haW -iQY -qfy -xNs -xNs -rgX -xNs -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(182,1,1) = {" -ktQ -wkD -qzX -qzX -qzX -btE -nRS -bkY -wEE -qaP -qaP -qaP -wEE -wEE -wEE -wEE -wkD -wkD -nRS -nRS -nRS -wkD -wkD -qAy -kag -wkD -ktQ -ktQ -cto -rsQ -mUG -mUG -uSs -mUG -mUG -mUG -mUG -iqS -cto -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -azO -uoL -uib -jzc -lKL -cmn -weP -lKL -jzc -oUb -uvD -cmi -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -yeQ -bIk -yeQ -oAR -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -yeQ -iqu -iqu -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(183,1,1) = {" -ktQ -kag -gdY -ehT -wkD -wkD -wEE -qaP -qaP -qaP -wEE -wEE -wkD -nRS -nRS -wkD -wkD -nRS -nRS -nRS -nRS -wkD -qzX -qAy -kag -wkD -ktQ -ktQ -cto -rnE -mUG -eQk -miz -sBo -mUG -mUG -mUG -iqS -cto -ktQ -ktQ -ktQ -ktQ -ujh -ujh -ujh -cph -eHJ -wTH -ujh -lKL -lKL -lKL -lKL -ujh -cph -eHJ -wTH -ujh -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -fMf -haW -haW -guf -txe -xpL -bOf -rxc -yaE -yaE -yaE -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(184,1,1) = {" -ktQ -qzX -gdY -nRS -wkD -wkD -qaP -qaP -wEE -wEE -wEE -wkD -wkD -wkD -wkD -wkD -wkD -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qAy -kag -ktQ -ktQ -cto -rnE -mUG -mUG -sBo -mUG -mUG -mUG -mUG -iqS -cto -ktQ -ktQ -ktQ -stC -ujh -stC -oYb -nxm -ocj -ocj -ujh -jzc -lKL -lKL -jzc -ujh -don -jkZ -ulT -cMC -stC -ujh -stC -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cHU -rxc -hGz -hGz -haW -txe -tEc -bOf -rxc -rxc -oOK -rxc -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(185,1,1) = {" -ktQ -wkD -cHg -wkD -wkD -wEE -qaP -wEE -wkD -wkD -wkD -wkD -wkD -wkD -jHQ -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -kag -ktQ -ktQ -cto -rnE -mUG -mUG -mUG -mUG -mUG -mUG -mUG -iqS -ktQ -ktQ -ktQ -ktQ -rRu -nah -rRu -jzc -lKL -lKL -lKL -wDQ -lKL -lKL -lKL -lKL -wDQ -lKL -lKL -lKL -gby -orZ -mPX -qYf -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cHU -ngw -jVg -ngw -haW -txe -eTn -bOf -rxc -yaE -aLG -yaE -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(186,1,1) = {" -ktQ -wkD -wkD -dob -wkD -bkY -qaP -wEE -wkD -cbz -kkC -btE -crz -btE -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -qzX -kag -ktQ -ktQ -ktQ -iRQ -pAp -bur -knc -iKh -iKh -iKh -mUG -qzq -ktQ -ktQ -ktQ -ktQ -dHD -xyk -dHD -jzc -lKL -lKL -jzc -eeG -jzc -lKL -lKL -jzc -eeG -jzc -lKL -lKL -dOg -jQk -oZp -got -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -eCc -yeQ -yeQ -yeQ -yeQ -bIk -yeQ -bIk -yeQ -yeQ -yeQ -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(187,1,1) = {" -ktQ -qzX -qAy -wkD -wkD -wEE -qaP -qaP -wEE -wkD -wkD -wkD -wkD -wkD -nRS -nRS -wkD -wkD -wkD -wkD -jHI -qzX -qzX -qzX -qAy -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -cto -kSa -wUX -wUX -wUX -rFv -ktQ -ktQ -ktQ -ktQ -stC -ujh -stC -mpq -jzc -jzc -mYP -stC -gJt -iak -bHF -hhh -stC -wTo -jzc -jzc -jzc -stC -ujh -stC -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -oCA -czn -txe -czi -edd -dtY -ukY -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(188,1,1) = {" -ktQ -kag -wkD -nRS -wkD -wkD -wEE -qaP -qaP -qaP -wEE -wEE -wEE -wEE -wkD -wkD -nRS -wkD -wkD -wkD -wkD -wkD -wkD -qAy -kag -qzX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -ujh -tdz -tdz -stC -ujh -yaZ -bIo -lKL -jzc -ujh -stC -uEW -uEW -ujh -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -mgD -lRK -lIr -vuR -tEc -edd -txe -jww -mgD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(189,1,1) = {" -ktQ -kag -gdY -wkD -wkD -wkD -nNa -wEE -wEE -qaP -qaP -qaP -qaP -wEE -wEE -wEE -wEE -wkD -wkD -nNa -wkD -kag -qAy -kag -kag -qzX -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -vQI -fcx -jzc -jzc -ujh -dvC -lKL -lKL -lKL -cNn -vHX -ujh -jzc -jzc -riA -nni -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -yeQ -uhM -rbr -xNs -acp -epR -fEa -orl -yeQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(190,1,1) = {" -ktQ -wkD -qzX -qzX -wkD -wkD -wkD -nRS -wkD -wEE -wEE -wkD -qaP -qaP -qaP -qaP -qaP -qaP -wEE -wkD -wkD -btE -wkD -qAy -kag -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -eSR -hzm -jzc -ajz -ujh -wLV -lKL -lKL -lKL -lKL -cVl -ujh -sMD -jzc -hbT -xiW -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -yeQ -xNs -hJu -uEN -hJu -qqL -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(191,1,1) = {" -ktQ -kag -qzX -qzX -qzX -cbz -wkD -wkD -wkD -wkD -nRS -ocd -wkD -wkD -wkD -wEE -qaP -qaP -qaP -wEE -cbz -wkD -wkD -wkD -wkD -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -stC -iDp -jzc -jzh -stC -ujh -qTK -pkC -vqd -vYO -ujh -ujh -lNk -jzc -wEa -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -kND -iqu -eoo -sbC -wTj -yeQ -kND -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(192,1,1) = {" -ktQ -kag -qzX -qzX -qzX -qzX -btE -nRS -wkD -wkD -gdY -wkD -gdY -ehT -nRS -wkD -wkD -wEE -qaP -qaP -wkD -wkD -wkD -wkD -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -hvv -jzc -jzc -jzc -xJq -ujh -ujh -ujh -ujh -ujh -ujh -mhg -jzc -jzc -jzc -rMN -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(193,1,1) = {" -ktQ -qAy -qzX -qzX -csb -wkD -wEE -wEE -wEE -wEE -wEE -wkD -bnS -dle -wkD -wkD -wkD -wEE -wEE -qaP -wEE -nRS -nRS -wkD -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -skn -ygL -rXE -jzc -lZv -ujh -bmW -bmW -bmW -bmW -ujh -lNF -jzc -tkk -ygL -ocz -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(194,1,1) = {" -ktQ -kag -qzX -btE -wkD -wEE -qaP -wEE -wEE -qaP -qaP -wkD -wkD -wkD -wkD -jYs -nRS -nRS -wkD -qaP -wEE -wkD -wkD -qzX -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -ujh -ujh -ujh -ujh -ujh -ujh -vYQ -oMk -gJV -qQy -ujh -ujh -ujh -ujh -ujh -ujh -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(195,1,1) = {" -ktQ -qzX -qzX -dob -wkD -wEE -qaP -wEE -wEE -wkD -wEE -qaP -wEE -wkD -btE -wkD -wkD -wkD -wkD -wEE -qaP -wEE -wkD -qAy -qAy -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -bmW -bmW -bmW -bmW -ujh -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -ujh -bmW -bmW -bmW -bmW -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(196,1,1) = {" -ktQ -wkD -qAy -wkD -wkD -wEE -wEE -wkD -wkD -wkD -wEE -qaP -wEE -xky -qAy -puO -qAy -qAy -ocd -wkD -qaP -wkD -wkD -qAy -qAy -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -vYQ -oMk -gJV -qQy -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ujh -vYQ -oMk -gJV -qQy -ujh -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(197,1,1) = {" -ktQ -qzX -qzX -nRS -wEE -qaP -qaP -wkD -cbz -wkD -wEE -qaP -wEE -qAy -qAy -xmX -crT -qAy -wkD -wEE -qaP -qaP -qAy -qzX -qzX -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(198,1,1) = {" -ktQ -kag -qzX -nRS -wEE -qaP -wkD -wkD -btE -nRS -wEE -wEE -wEE -suW -hAz -xmX -eNg -iIe -wkD -wEE -qaP -qaP -wEE -wkD -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(199,1,1) = {" -ktQ -wkD -qzX -nRS -wEE -wEE -nRS -jHQ -qzX -nRS -wEE -wEE -wEE -mUF -xmX -xmX -aui -qAy -wkD -wEE -qaP -wEE -wEE -qAy -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(200,1,1) = {" -ktQ -kag -qzX -wkD -wEE -wEE -wkD -wkD -btE -nRS -wEE -qaP -wkD -iIe -hAz -xmX -xmX -qAy -wkD -wEE -qaP -wEE -wkD -wkD -qAy -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(201,1,1) = {" -ktQ -qzX -qzX -wkD -wEE -qaP -wEE -wkD -kkC -wkD -wEE -qaP -wEE -qAy -qAy -eqK -xmX -suW -wkD -wkD -qaP -qaP -wEE -wkD -qAy -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(202,1,1) = {" -ktQ -kag -btE -wEE -wEE -qaP -wEE -wkD -wkD -wkD -wEE -wEE -wkD -xky -qAy -qAy -rvU -gdY -nRS -wkD -wEE -qaP -wEE -wkD -wkD -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(203,1,1) = {" -ktQ -wkD -xQo -wEE -wEE -wEE -wEE -bkY -xYQ -btE -wEE -qaP -qaP -wkD -wkD -wkD -wGb -gdY -nRS -wEE -wEE -qaP -wEE -ocd -qAy -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(204,1,1) = {" -ktQ -wkD -xYQ -bkY -wEE -qaP -wEE -bkY -dDO -qzX -wkD -wkD -qaP -qaP -wkD -wkD -dob -wkD -wkD -wkD -qaP -qaP -kag -qAy -kag -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(205,1,1) = {" -ktQ -wkD -dDO -bkY -wEE -qaP -wEE -wEE -oxD -btE -wkD -eXg -wEE -wEE -wkD -wEE -wEE -wkD -wkD -wEE -qaP -wEE -wkD -wkD -kag -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(206,1,1) = {" -ktQ -qAy -gdY -xYQ -crz -wEE -crz -xYQ -gdY -qzX -hqs -nRS -wkD -qaP -qaP -wEE -qaP -qaP -qaP -qaP -qaP -wkD -nRS -wkD -wkD -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(207,1,1) = {" -ktQ -wkD -gdY -gdY -wEE -qaP -wEE -gdY -ehT -qzX -qzX -wkD -nRS -nRS -wEE -wkD -wEE -qaP -qaP -qaP -wEE -wkD -wkD -wkD -qzX -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(208,1,1) = {" -ktQ -kag -ehT -gdY -qaP -qaP -qaP -gdY -ehT -qzX -qzX -gdY -nRS -nRS -wkD -wkD -kag -wEE -wEE -wEE -wEE -wkD -wkD -btE -qzX -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(209,1,1) = {" -ktQ -qzX -ndN -gdY -wEE -qaP -wEE -gdY -ehT -qzX -qzX -gdY -gdY -gdY -wkD -wkD -qAy -nNa -nRS -nRS -nRS -wkD -wkD -qzX -qzX -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(210,1,1) = {" -ktQ -kag -ehT -bnS -gdY -gdY -gdY -bnS -ehT -qzX -qzX -gdY -gdY -gdY -qAy -kag -kag -qAy -wkD -ocd -wkD -wkD -qzX -qzX -qzX -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -ktQ -wqk -wqk -wqk -ktQ -ktQ -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(211,1,1) = {" -ktQ -wkD -gdY -qAy -gdY -ehT -ndN -gdY -qAy -qzX -qzX -qzX -gdY -qAy -gdY -kag -wkD -kag -qAy -qzX -qzX -qzX -qzX -qzX -qzX -wkD -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -ktQ -ktQ -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(212,1,1) = {" -ktQ -kag -qzX -wkD -wkD -qAy -kag -wkD -wkD -kag -wkD -kag -wkD -kag -kag -kag -kag -kag -qAy -wkD -wkD -qzX -kag -wkD -kag -kag -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -wqk -rlm -rlm -rlm -rlm -wqk -wqk -wqk -wqk -wqk -wqk -wqk -rlm -rlm -rlm -rlm -rlm -rlm -rlm -wqk -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(213,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -sRi -sRi -sRi -sRi -rlm -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(214,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -nxV -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sRi -sRi -sRi -bML -bML -sRi -sRi -sRi -rlm -rlm -rlm -rlm -sRi -sRi -sRi -gGt -gGt -gGt -gGt -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(215,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -htj -ktQ -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -lQY -ktQ -qiO -lQY -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sRi -sRi -bML -bML -bML -bML -sRi -sRi -rlm -rlm -rlm -sRi -sRi -sRi -sRi -gGt -bXQ -aVJ -aVJ -gGt -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(216,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -efN -htj -htj -htj -htj -htj -htj -efN -efN -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -xhp -ktQ -lma -lma -ktQ -ktQ -wqk -rlm -rlm -sRi -bML -bML -hCj -bML -bML -sRi -sRi -rlm -rlm -sRi -sRi -sRi -sRi -sRi -gGt -oPm -aVJ -aVJ -gGt -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(217,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -efN -efN -efN -efN -efN -efN -efN -efN -efN -htj -htj -htj -efN -efN -efN -efN -efN -efN -clr -clr -clr -clr -clr -clr -clr -clr -clr -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sRi -bML -bML -mNN -bML -bML -sRi -sRi -vHY -sRi -sRi -sRi -sEe -gGt -gGt -gGt -gGt -iyj -gGt -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(218,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -htj -htj -cpj -htj -wqi -htj -efN -efN -htj -htj -htj -efN -clr -clr -clr -clr -clr -clr -clr -vlt -euU -afs -jlm -hWr -awB -vts -clr -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -sRi -bML -bML -bML -hFh -sRi -sRi -sRi -sRi -sRi -qEO -sEe -eaw -aVJ -uyW -mzj -uyW -ekd -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(219,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -htj -htj -efN -htj -cVg -cpj -htj -htj -htj -htj -htj -efN -clr -fkQ -qSd -qSd -qSd -wCE -afs -mak -elI -kOn -huy -afs -afs -cwO -clr -clr -clr -clr -clr -clr -clr -xhp -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -sRi -sRi -sRi -sRi -sdj -sRi -sEe -sEe -whZ -whZ -whZ -iyj -aVJ -uyW -uyW -uyW -vmM -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(220,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -htj -htj -efN -efN -efN -efN -efN -efN -efN -efN -htj -htj -clr -clr -xMG -afs -afs -afs -qSd -afs -khr -vls -afs -ssR -afs -gnT -mnz -hDw -qrz -pkh -afs -qKl -wYv -clr -xhp -ktQ -ktQ -wqk -rlm -rlm -rlm -sRi -sRi -sRi -sRi -uuk -sEe -sEe -whZ -whZ -whZ -sEe -sEe -eaw -aVJ -uyW -uyW -uyW -fCq -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(221,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -htj -efN -efN -efN -xhp -xhp -xhp -xhp -xhp -efN -htj -htj -clr -xhW -eIL -aHa -avE -tKN -iOt -ald -ald -afs -afs -dFH -ald -opQ -wCu -wAr -bNj -uvO -afs -eqb -eza -clr -xhp -ktQ -ktQ -wqk -rlm -rlm -rlm -rlm -vHY -sRi -sEe -sEe -whZ -whZ -whZ -sEe -sEe -sEe -sEe -gGt -gGt -dYD -dYD -uyW -fCq -gGt -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(222,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -efN -efN -efN -efN -xhp -xhp -xhp -xhp -xhp -efN -htj -htj -clr -xhW -oHl -afs -afs -dDa -jlm -awB -rFn -rFn -awB -aKM -afs -oEz -vsn -oqm -azz -bVJ -tVq -bOs -gfp -clr -xhp -ktQ -ktQ -wqk -rlm -bML -bML -sRi -sRi -tsy -whZ -whZ -whZ -sEe -sEe -qEO -sRi -sRi -sRi -sRi -gGt -bOT -pJr -uyW -cOq -gGt -rlm -rlm -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(223,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -clr -clr -clr -clr -clr -clr -bwm -bwm -bwm -clr -htj -htj -clr -xhW -eIL -aHa -aig -dDa -cwO -afs -afs -afs -afs -xMG -afs -thD -usV -afs -erV -usV -afs -dDa -lzq -clr -xhp -ktQ -ktQ -wqk -rlm -bML -sRi -sRi -sRi -whZ -whZ -sEe -sEe -sEe -sRi -sRi -sRi -sRi -sRi -rlm -gGt -gGt -gGt -gGt -gGt -gGt -rlm -rlm -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(224,1,1) = {" -ktQ -ktQ -ktQ -xhp -xhp -kWI -xhp -cuM -clr -wrH -nZe -nZe -wrH -clr -tpt -qFH -pIa -clr -hjr -nHe -clr -clr -pwK -afs -afs -dDa -sxL -krT -eHB -rnB -afs -gjs -dVL -gjs -gjs -vvX -fIb -xpR -bSg -rRZ -hYJ -clr -gUq -ktQ -ktQ -wqk -rlm -sRi -sRi -sRi -sEe -whZ -sEe -sRi -sRi -sRi -sRi -sRi -sRi -oHd -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(225,1,1) = {" -ktQ -ktQ -xhp -xhp -clr -xxA -clr -dhP -clr -wrH -bVJ -qzP -otf -clr -uqZ -gjs -dEG -qsM -peG -peG -qjZ -pcC -mhe -qik -vhD -dDa -bsM -gjs -ity -ceQ -hUE -hGx -wFu -gjs -gjs -gjs -gjs -gjs -eUt -wmh -ltT -lVr -por -ktQ -ktQ -wqk -rlm -sRi -tCx -sRi -sEe -whZ -sEe -sRi -hFh -sRi -vHY -fWa -vHY -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(226,1,1) = {" -ktQ -ktQ -xhp -mQR -nDi -wrH -nZe -wrH -clr -mip -bVJ -bVJ -mIh -clr -uqZ -gjs -gjs -xMg -mhe -mhe -csJ -vXi -vXi -qcw -lJj -rbW -xMm -ikJ -hzK -vWB -afs -mlp -gjs -gjs -jtq -sLh -gjs -gjs -azi -ikJ -wWO -lhs -por -ktQ -ktQ -wqk -rlm -rlm -sRi -sRi -sEe -whZ -whZ -tsy -sRi -sRi -sRi -sRi -sRi -sRi -sRi -sRi -sRi -sRi -sRi -sRi -rlm -rlm -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(227,1,1) = {" -ktQ -xhp -xhp -xhp -clr -wrH -bVJ -wrH -wfe -bVJ -bVJ -fxk -wrH -clr -tpy -uNa -gjs -cMK -owQ -owQ -owQ -mhe -mhe -fVh -gKT -dDa -lzq -pwK -afs -afs -afs -jKW -gjs -gjs -tHf -bEI -ybr -gjs -gjs -gjs -eUt -lVr -por -ktQ -ktQ -ktQ -wqk -rlm -sRi -sRi -sRi -sEe -whZ -whZ -whZ -sEe -sEe -sEe -sEe -sRi -sRi -sRi -sRi -sRi -sRi -sRi -rlm -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(228,1,1) = {" -ktQ -xhp -xhp -qXf -vWP -wrH -bVJ -eGZ -clr -fqN -bVJ -dUE -bVJ -tVq -lMR -dSK -gjs -dEG -bPx -bPx -bPx -xMg -mhe -gWY -vXi -hIJ -jJR -gjs -sMz -gjs -hPi -gjs -gjs -gjs -gjs -bEI -lTq -jTN -tVi -gjs -pVk -clr -por -ktQ -ktQ -ktQ -wqk -rlm -sRi -sRi -sRi -sdj -sEe -sEe -whZ -whZ -whZ -whZ -sEe -sEe -sEe -tsy -sRi -sRi -sdj -sRi -rlm -rlm -rlm -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(229,1,1) = {" -xhp -xhp -xhp -vZF -vWP -wrH -bVJ -wrH -mvC -lbP -bVJ -dUE -bVJ -tVq -lMR -dSK -gjs -gjs -gjs -gjs -gjs -mhe -mhe -lDu -oXC -fLc -xmG -pEc -bvG -gjs -gjs -gjs -gjs -gjs -gjs -bEI -qLB -xTO -lpo -gjs -vcU -clr -por -ktQ -ktQ -wqk -rlm -rlm -rlm -sRi -sRi -sRi -sRi -sRi -sEe -sEe -qEO -whZ -whZ -whZ -whZ -whZ -whZ -sEe -sRi -sRi -vHY -rlm -rlm -wqk -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(230,1,1) = {" -xhp -xhp -xhp -xhp -clr -wrH -bVJ -wrH -cPt -efG -bVJ -fxk -wrH -clr -atS -nPb -gjs -gjs -gjs -gjs -gjs -mhe -mhe -eii -tXc -dDa -vTW -afs -afs -afs -afs -lTq -gjs -gjs -tHf -bEI -ybr -gjs -gjs -gjs -eUt -bha -por -ktQ -ktQ -ktQ -wqk -rlm -rlm -rlm -hFh -sRi -sRi -sRi -sRi -sEe -sEe -whZ -whZ -sEe -sEe -whZ -whZ -whZ -sEe -hFh -sRi -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(231,1,1) = {" -xhp -xhp -xhp -wZr -kUr -wrH -rqG -wrH -clr -sWm -bVJ -bVJ -mIh -clr -jZQ -gjs -gjs -gjs -gjs -gjs -aTu -sXl -oXC -nqZ -lzY -dDa -ity -wEC -rPq -crY -afs -oCM -gjs -gjs -pvX -cXj -lTq -gjs -gjs -gjs -eUt -bha -por -ktQ -ktQ -ktQ -wqk -rlm -rlm -rlm -rlm -vHY -sRi -sRi -sEe -sEe -whZ -sEe -sEe -sEe -sEe -sEe -sEe -whZ -whZ -sRi -sRi -sRi -sRi -uje -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(232,1,1) = {" -ktQ -xhp -xhp -xhp -clr -cSW -clr -vig -clr -wrH -bVJ -qzP -tRx -clr -uqZ -gjs -hoi -eQc -dCS -dCS -dCS -bII -ktk -eir -ylL -dDa -ltK -jJR -ity -oME -hUE -wvZ -wFu -gjs -gjs -fDy -uqZ -gjs -gjs -wmh -heE -bha -por -ktQ -ktQ -wqk -gGt -rlm -rlm -sRi -sRi -sEe -sEe -sEe -sEe -whZ -sEe -sEe -gGt -gGt -gGt -gGt -sEe -sEe -whZ -sEe -sRi -sRi -sRi -uje -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(233,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -rvf -xhp -pOh -clr -wrH -rqG -rqG -wrH -clr -rhY -cQF -eGz -afs -afs -afs -pwK -afs -afs -afs -afs -rbW -xdd -eCC -oyg -nRY -afs -eup -lTq -gjs -gjs -fDy -uqZ -hoi -lCq -tPh -fou -clr -gUq -ktQ -ktQ -ktQ -wqk -rlm -vHY -sRi -sEe -sEe -whZ -sEe -whZ -whZ -sRi -sRi -gGt -lbc -aVJ -gGt -gGt -gGt -whZ -tsy -sRi -sRi -sRi -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(234,1,1) = {" -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -aNI -gjs -gjs -gjs -afs -eMl -vRq -dDa -tBq -fHi -huE -wHu -afs -afs -nuq -eHY -tCd -afs -jEw -sqB -clr -clr -clr -clr -ktQ -ktQ -ktQ -wqk -rlm -rlm -tCx -sRi -sEe -whZ -sEe -sEe -sRi -sEe -whZ -sEe -gGt -aVJ -aVJ -aVJ -aVJ -gGt -sEe -whZ -sEe -sRi -sRi -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(235,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -uuC -gjs -uUw -gjs -afs -gGJ -gjs -dDa -jpT -rWQ -cpf -iML -vND -afs -pyZ -gjs -gjs -afs -maL -gHl -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -wqk -rlm -gGt -sRi -sRi -aVJ -sEe -sRi -sRi -sRi -sEe -whZ -sEe -dro -aVJ -aVJ -aVJ -aVJ -dro -sRi -whZ -sRi -sRi -rlm -rlm -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(236,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -oni -gjs -uUw -qrW -afs -rki -gjs -oUT -jUk -jUk -jUk -sIt -lzq -afs -gjs -gjs -gjs -mLW -gjs -mTt -clr -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -rLe -aVJ -rLe -sRi -hFh -sRi -sEe -whZ -sEe -gGt -gGt -gGt -iyj -gGt -gGt -sEe -whZ -whZ -gGt -rlm -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(237,1,1) = {" -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -oni -gjs -uUw -gjs -afs -rki -gjs -bvO -xTV -xTV -xTV -xfs -edy -cby -iML -xAN -eSK -eSK -eSK -gjs -nuq -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sRi -sEe -aVJ -sRi -sRi -vHY -sRi -sEe -sEe -sEe -gGt -aVJ -aVJ -aVJ -aVJ -gGt -sEe -whZ -whZ -sEe -sRi -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(238,1,1) = {" -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -oni -gjs -uUw -gjs -tVq -gjs -kqp -clr -clr -clr -clr -hnl -afs -hec -eTG -gjs -gjs -gjs -gjs -gjs -ugM -bRM -ktQ -xhp -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -rLe -aVJ -rLe -oHd -rlm -sRi -sEe -sEe -sEe -iyj -aVJ -aVJ -sNP -aVJ -dro -sEe -whZ -sEe -sEe -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(239,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -clr -aPP -gjs -gjs -gjs -afs -bQx -aue -clr -efN -efN -clr -cAi -afs -frw -gjs -eSK -pJY -pJY -pJY -dEi -ugM -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -sEe -aVJ -sRi -sRi -vHY -sRi -sEe -whZ -sRi -gGt -jvl -uyW -bjy -uyW -gGt -sEe -whZ -sEe -sRi -sRi -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(240,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -efN -efN -efN -efN -efN -efN -xhp -xhp -clr -hjr -ohG -ohG -nHe -clr -clr -clr -clr -efN -htj -clr -lmg -afs -cRh -gjs -gjs -gjs -gjs -gjs -gjs -pyZ -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -sRi -rLe -aVJ -rLe -sRi -vHY -sRi -sEe -whZ -sEe -dro -mzj -uyW -oaL -uyW -gGt -sRi -whZ -whZ -sEe -sRi -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(241,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -efN -htj -htj -htj -htj -efN -efN -efN -htj -htj -htj -htj -htj -efN -efN -efN -efN -htj -htj -clr -lmg -clr -lde -gjs -eSK -pJY -pJY -pJY -pJo -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sEe -sEe -aVJ -sEe -sRi -vHY -vHY -sEe -sEe -sRi -gGt -jvl -uyW -uyW -uyW -dro -sRi -tsy -whZ -sEe -sRi -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(242,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -efN -htj -gtH -htj -htj -efN -efN -htj -htj -htj -htj -htj -htj -htj -efN -efN -htj -htj -htj -clr -hnl -afs -cwo -gjs -gjs -gjs -gjs -gjs -cPA -clr -clr -xhp -xhp -ktQ -ktQ -ktQ -ktQ -wqk -rlm -sEe -rLe -aVJ -rLe -sEe -bjl -vHY -sEe -whZ -whZ -gGt -gGt -qYA -aFn -qYA -gGt -sEe -sEe -whZ -sEe -uuk -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(243,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -efN -htj -efN -htj -efN -efN -htj -htj -htj -htj -htj -efN -htj -efN -efN -efN -htj -htj -htj -clr -wKL -afs -tGO -gjs -eSK -pJY -pJY -pJY -dEi -dEi -clr -xhp -xhp -ktQ -ktQ -ktQ -wqk -rlm -bjl -sEe -sEe -aVJ -sEe -sEe -bjl -rlm -sRi -sRi -whZ -whZ -gGt -gGt -dro -gGt -gGt -sRi -whZ -whZ -sEe -gGt -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(244,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -xhp -efN -efN -htj -efN -efN -htj -efN -htj -htj -htj -efN -efN -efN -efN -efN -efN -htj -htj -htj -nuq -nWH -afs -eEP -gjs -gjs -gjs -gjs -gjs -gjs -mTt -clr -xhp -ktQ -ktQ -ktQ -ktQ -wqk -rlm -bjl -sEe -rLe -aVJ -rLe -sEe -bjl -vHY -sRi -sRi -sEe -sEe -sRi -sEe -sEe -sRi -sRi -sEe -whZ -sEe -sRi -sRi -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(245,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -xhp -efN -efN -efN -efN -efN -htj -htj -htj -efN -htj -efN -efN -efN -efN -efN -efN -efN -htj -htj -pyZ -jvP -ald -uXD -ikJ -aXm -pJY -pJY -pJY -dEi -dEi -clr -bRM -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -bjl -sEe -aVJ -sEe -bjl -bjl -rlm -edW -sRi -sRi -whZ -whZ -sEe -whZ -whZ -whZ -whZ -whZ -sRi -sRi -sRi -rlm -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(246,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -pPV -hZh -bRM -xhp -xhp -xhp -xhp -efN -htj -efN -efN -efN -efN -efN -efN -efN -efN -htj -kYt -kYt -htj -htj -clr -les -ykk -eog -gjs -gjs -gjs -gjs -gjs -cvL -gjs -clr -bRM -ktQ -ktQ -ktQ -ktQ -wqk -rlm -bML -bML -tsy -aVJ -tsy -bML -bML -rlm -rlm -sRi -sRi -sRi -sEe -qEO -sEe -whZ -whZ -whZ -sEe -sRi -sRi -sRi -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(247,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -bRM -ucR -bRM -bRM -xhp -xhp -xhp -efN -htj -efN -efN -efN -efN -efN -efN -grp -htj -cVg -kYt -kYt -htj -htj -clr -lHg -krN -afs -obA -jbZ -fNT -tlk -duX -afs -xMG -clr -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -bML -sNP -viG -sNP -bML -bML -bML -rlm -bML -sRi -sRi -sRi -sRi -sEe -sEe -sEe -sEe -sEe -sRi -sRi -vHY -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(248,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -sFi -nbF -eam -nbF -nbF -eam -fOX -pdg -gJb -efN -efN -efN -htj -sme -htj -tLe -efN -efN -efN -efN -htj -htj -clr -cBU -ssR -afs -afs -afs -afs -afs -afs -afs -xTV -nuq -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -bML -tsy -sNP -tsy -bML -bML -bML -bML -bML -kdA -bML -sRi -sRi -sRi -sdj -sRi -sRi -sRi -sRi -sRi -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(249,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -eJH -bRM -bRM -bRM -bRM -bRM -bRM -bRM -efN -sxA -efN -sst -htj -htj -htj -vfN -efN -efN -xhp -xhp -efN -htj -htj -clr -chJ -txi -hWr -nKJ -qsB -rFn -xDo -qsB -jMp -rFn -pyZ -bRM -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -rlm -vGr -bML -bML -bML -vGr -bML -bML -bML -bML -bML -bML -sRi -sRi -sRi -sRi -rlm -rlm -sRi -sRi -rlm -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(250,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -bRM -ktQ -bRM -ktQ -ktQ -ktQ -efN -gnu -uEC -cpj -cpj -fNW -wqi -htj -efN -xhp -xhp -xhp -efN -efN -efN -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -clr -xhp -xhp -ktQ -ktQ -ktQ -wqk -rlm -rlm -gGt -kdA -rlm -rlm -rlm -rlm -rlm -rlm -bML -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -rlm -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(251,1,1) = {" -ktQ -ktQ -ktQ -ktQ -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -bRM -efN -oiD -htj -htj -efN -efN -efN -bRM -bRM -bRM -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -wqk -rlm -rlm -rlm -rlm -wqk -rlm -rlm -wqk -rlm -rlm -rlm -wqk -wqk -wqk -wqk -wqk -rlm -rlm -rlm -rlm -wqk -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(252,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -wqk -wqk -wqk -ktQ -wqk -wqk -ktQ -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -wqk -wqk -wqk -wqk -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(253,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -xhp -xhp -xhp -xhp -xhp -xhp -xhp -xhp -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(254,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} -(255,1,1) = {" -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -ktQ -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aan" = ( +/obj/structure/table/glass, +/obj/item/clothing/shoes/swimmingfins, +/obj/item/clothing/mask/snorkel, +/obj/item/clothing/shoes/swimmingfins, +/obj/item/clothing/mask/snorkel, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"aap" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = 2; + pixel_y = 17 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"aaW" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"abb" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"abH" = ( +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"abV" = ( +/obj/machinery/shipsensors{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"abX" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"acc" = ( +/obj/machinery/autolathe, +/obj/item/weapon/rcd/advanced/loaded{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/weapon/rcd_ammo/large, +/obj/item/weapon/rcd_ammo/large, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"acp" = ( +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"acx" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"acB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/structure/closet/secure_closet/guncabinet{ + req_one_access = null + }, +/obj/item/clothing/head/helmet/combat/USDF, +/obj/item/clothing/head/helmet/combat/USDF, +/obj/item/clothing/suit/armor/combat/USDF, +/obj/item/clothing/suit/armor/combat/USDF, +/obj/item/device/flash, +/obj/item/device/flash, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"acC" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors{ + dir = 8 + }, +/obj/structure/sign/science{ + pixel_x = 32 + }, +/turf/template_noop, +/area/survivalpod/superpose/ScienceShip) +"acE" = ( +/obj/item/weapon/newspaper, +/obj/item/device/tape, +/obj/item/device/taperecorder{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"acH" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"adA" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/pointdefense, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"adB" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"aeb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"aee" = ( +/obj/machinery/disperser/front{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"aej" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"aep" = ( +/turf/simulated/floor/wood, +/area/survivalpod) +"aer" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"aeH" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"aeL" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"afk" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"afs" = ( +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"afT" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"agb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"agc" = ( +/obj/structure/prop/poicanister{ + icon_state = "orangeps-1" + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"agi" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ago" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/glass, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"agN" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod) +"agZ" = ( +/obj/item/weapon/flame/lighter/random, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"ahc" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"ahx" = ( +/obj/machinery/door/airlock{ + name = "Unit 1" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"ahE" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ahY" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"aig" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"aiI" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"aiV" = ( +/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, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/template_noop) +"ajg" = ( +/obj/structure/mirror{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = -9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"ajz" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"akf" = ( +/obj/item/clothing/accessory/permit/gun, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"akm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"akr" = ( +/obj/structure/table/darkglass, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"akw" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"akz" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"akI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/shield_generator/charged{ + field_radius = 8; + initial_shield_modes = 2153; + target_radius = 8 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"akZ" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = -2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ald" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"alI" = ( +/obj/item/weapon/extinguisher/mini, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"alT" = ( +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"amB" = ( +/obj/machinery/door/airlock/maintenance/sec, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/MethLab) +"amT" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"amU" = ( +/turf/simulated/floor/outdoors/mud{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"ane" = ( +/obj/structure/bed/chair/bay/comfy/red{ + dir = 8 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/ScienceShip) +"anJ" = ( +/obj/structure/bed/chair/oldsofa, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"anK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"anP" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/wood, +/area/survivalpod) +"anZ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/pizzavoucher, +/obj/item/toy/figure, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"aoX" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"apk" = ( +/obj/structure/bed/padded, +/obj/machinery/flasher{ + id = "SP-Cell flash"; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"apq" = ( +/obj/effect/floor_decal/steeldecal/monofloor, +/turf/simulated/floor/tiled, +/area/template_noop) +"aqS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"aqY" = ( +/obj/item/weapon/storage/backpack/cultpack, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"arm" = ( +/obj/structure/prop/statue/pillar/dark, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"aro" = ( +/turf/simulated/goreeyes, +/area/survivalpod/superpose/DemonPool) +"arH" = ( +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"arN" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"arV" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = 5; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"asa" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"asr" = ( +/obj/machinery/door/window/eastleft, +/obj/machinery/door/window/westleft, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"asH" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"asV" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/cult{ + icon_state = "cult-narsie" + }, +/area/template_noop) +"atu" = ( +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/HellCave) +"atC" = ( +/obj/machinery/appliance/cooker/grill, +/obj/structure/window/reinforced/tinted, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"atS" = ( +/obj/structure/sign/warning{ + name = "HOSTILE LIFEFORMS"; + pixel_y = 29 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"atT" = ( +/obj/structure/closet/cabinet, +/obj/random/ammo_all, +/obj/random/cargopod, +/obj/random/cargopod, +/obj/random/cargopod, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"atV" = ( +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"aue" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"aui" = ( +/obj/structure/cult/talisman, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"auy" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/freezer{ + desc = "Cools the gas in the air tank to acceptable levels after an internal fire."; + dir = 4; + icon_state = "freezer_1"; + name = "Mech Internal Fire Supression system"; + use_power = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"auC" = ( +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"auD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"auI" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/cult/forge, +/turf/simulated/floor/cult, +/area/template_noop) +"auY" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/glasses/square, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"avv" = ( +/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"avE" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"avI" = ( +/obj/structure/table/steel_reinforced, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"awq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"aww" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/LoneHome) +"awy" = ( +/obj/item/stack/marker_beacon/ten, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"awB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"axk" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "estrella_side_hatch"; + locked = 1; + req_access = null; + req_one_access = null + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "estrella_side_hatch"; + name = "Side Hatch Control"; + pixel_x = -27; + specialfunctions = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"axE" = ( +/obj/machinery/honey_extractor, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"axU" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"axX" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"ayh" = ( +/obj/structure/table/woodentable, +/obj/machinery/light{ + dir = 4 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled, +/area/template_noop) +"ayZ" = ( +/obj/machinery/libraryscanner, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"azi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"azz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"azO" = ( +/obj/structure/table/steel_reinforced, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"aAz" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"aBk" = ( +/obj/structure/closet/toolcloset, +/turf/template_noop, +/area/template_noop) +"aBv" = ( +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"aBE" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"aBF" = ( +/obj/machinery/r_n_d/server/core, +/obj/machinery/light/small, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"aBY" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"aBZ" = ( +/obj/structure/fans, +/turf/simulated/floor/plating, +/area/template_noop) +"aCh" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"aCt" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"aCJ" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/item/weapon/packageWrap, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"aDl" = ( +/obj/effect/floor_decal/industrial/hatch, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"aFn" = ( +/obj/structure/cult/talisman, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"aFE" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"aGd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"aGo" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"aGF" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"aHa" = ( +/obj/machinery/door/airlock/angled_tgmc, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"aHE" = ( +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/extinguisher, +/obj/item/weapon/storage/box/lights/mixed, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"aIl" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/multitool, +/obj/item/device/geiger, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/welding, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"aIB" = ( +/obj/machinery/microwave{ + pixel_y = -2 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/table/steel{ + pixel_y = -9 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"aIH" = ( +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = -3 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"aIS" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"aJb" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"aJH" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"aJN" = ( +/obj/random/maintenance/engineering, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"aKd" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/optable, +/obj/machinery/oxygen_pump/anesthetic{ + layer = 3.11; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"aKe" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"aKM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"aKN" = ( +/obj/item/trash/tastybread, +/obj/item/weapon/material/butterfly/boxcutter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aLa" = ( +/obj/structure/closet/cabinet, +/obj/random/curseditem, +/obj/random/curseditem, +/obj/item/weapon/melee/cursedblade, +/obj/item/weapon/melee/cultblade, +/obj/item/weapon/beartrap/hunting, +/obj/item/weapon/beartrap/hunting, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/device/soulstone, +/obj/item/device/soulstone, +/obj/item/weapon/storage/belt/soulstone/full, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"aLG" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"aLR" = ( +/obj/structure/fence/cut/large, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"aNb" = ( +/obj/item/tape/medical{ + icon_state = "tape_v_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"aNp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"aNC" = ( +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"aNI" = ( +/obj/structure/table/standard, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"aNM" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"aOw" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "estrella_back_hatch"; + locked = 1; + req_one_access = null + }, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + id = "estrella_back_hatch"; + name = "Rear Hatch Control"; + pixel_y = 27; + req_access = null; + specialfunctions = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"aOM" = ( +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/cleanable/mucus/mapped, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aPd" = ( +/obj/random/trash, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/MethLab) +"aPq" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/fire, +/obj/item/trash/material/circuit, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"aPy" = ( +/obj/machinery/camera{ + c_tag = "Central Hallway"; + dir = 1; + network = list("UO45") + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"aPL" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"aPP" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"aPT" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/smartfridge/survival_pod{ + pixel_y = 28 + }, +/obj/item/device/reagent_scanner, +/obj/item/device/mass_spectrometer/adv, +/obj/item/weapon/forensics/sample_kit/powder, +/obj/item/weapon/forensics/sample_kit, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/reagent_containers/spray/luminol, +/obj/item/weapon/storage/briefcase/crimekit, +/obj/item/weapon/storage/briefcase/crimekit, +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/storage/box/bodybags, +/obj/item/device/camera{ + desc = "A one use - polaroid camera. 30 photos left."; + name = "detectives camera"; + pictures_left = 30; + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/device/camera_film, +/obj/item/weapon/storage/photo_album{ + pixel_y = -10 + }, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/device/flash, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"aPX" = ( +/obj/machinery/chem_master/condimaster, +/obj/structure/window/reinforced/tinted, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"aQr" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"aQA" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"aQX" = ( +/obj/item/weapon/storage/toolbox/brass, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"aRa" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"aRf" = ( +/obj/structure/hull_corner/long_horiz{ + dir = 10 + }, +/turf/template_noop, +/area/template_noop) +"aRM" = ( +/obj/structure/closet/alien, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"aRR" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"aRV" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"aSS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"aTe" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"aTp" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"aTu" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + on = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"aTE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"aUJ" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Dorm" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"aVj" = ( +/obj/machinery/disperser/back{ + dir = 4 + }, +/obj/structure/ship_munition/disperser_charge/explosive, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"aVJ" = ( +/turf/simulated/floor/cult, +/area/template_noop) +"aVT" = ( +/obj/structure/grille/rustic, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/window/basic, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"aVU" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"aWn" = ( +/obj/structure/table/survival_pod, +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/obj/item/clothing/glasses/welding, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"aWq" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"aWD" = ( +/obj/structure/table/marble{ + color = "#B03A2E" + }, +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/item/device/soulstone, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"aWG" = ( +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/stack/material/uranium{ + amount = 50 + }, +/obj/item/stack/material/silver{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/phoron{ + amount = 50 + }, +/obj/item/stack/material/osmium{ + amount = 50 + }, +/obj/item/stack/material/mhydrogen{ + amount = 50 + }, +/obj/item/stack/material/gold{ + amount = 50 + }, +/obj/item/stack/material/durasteel{ + amount = 50 + }, +/obj/item/stack/material/diamond{ + amount = 50 + }, +/obj/item/stack/material/lead, +/obj/item/stack/material/titanium, +/obj/item/stack/material/verdantium{ + amount = 50 + }, +/obj/structure/closet/crate/secure/engineering{ + name = "secure research materials crate"; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"aWS" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"aXm" = ( +/obj/item/seeds/pumpkinseed, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"aXn" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"aXy" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"aXX" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/survivalpod) +"aYZ" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"aZu" = ( +/obj/item/clothing/shoes/boots/winter/hydro, +/obj/item/clothing/suit/storage/hooded/wintercoat/hydro, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"aZy" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"bab" = ( +/obj/structure/table/steel, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"baZ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/CultShip) +"bbP" = ( +/obj/structure/hull_corner{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"bcf" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"bdp" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/sugar, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"bdE" = ( +/obj/machinery/light, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"bdI" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"bdX" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"bej" = ( +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/ScienceShip) +"bel" = ( +/obj/structure/sign/science{ + pixel_x = 32 + }, +/turf/template_noop, +/area/template_noop) +"beW" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/tool/screwdriver{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bfB" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"bfH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bfM" = ( +/obj/item/trash/cheesie, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bgJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CultShip) +"bgR" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"bha" = ( +/obj/machinery/atmospheric_field_generator/perma/underdoors, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"bhd" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bia" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/device/starcaster_news, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/template_noop) +"biA" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"biM" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"biS" = ( +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bje" = ( +/obj/fire, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"bjl" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/lava, +/area/template_noop) +"bjw" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"bjy" = ( +/obj/effect/rune, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"bjI" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/autolathe, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"bjO" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"bkF" = ( +/obj/structure/table/survival_pod, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"bkY" = ( +/obj/fire, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/HellCave) +"ble" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/purple, +/obj/item/device/gps/computer{ + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bll" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/chemical_dispenser/ert/specialops/abductor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"bmA" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bmJ" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bmW" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/shuttle/plating/airless, +/area/survivalpod/superpose/TradingShip) +"bnA" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/clipboard, +/obj/item/weapon/folder/white, +/obj/item/weapon/pen, +/obj/item/weapon/reagent_containers/dropper{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bnC" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bnH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"bnI" = ( +/obj/structure/reagent_dispensers/beerkeg/fakenuke, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"bnS" = ( +/obj/machinery/crystal/lava, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"bop" = ( +/obj/machinery/vending/emergencyfood/filled, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"boq" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"bos" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"box" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"boP" = ( +/obj/structure/sign/nosmoking_2{ + pixel_x = 30 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"boR" = ( +/obj/machinery/bodyscanner, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"boT" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"boV" = ( +/obj/item/trash/candy, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bpe" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/ScienceShip) +"bph" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/structure/closet/walllocker_double/survival/north, +/turf/simulated/floor/carpet, +/area/template_noop) +"bpl" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"bpC" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"bpM" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/MethLab) +"bqm" = ( +/obj/random/trash, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"bqC" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/pirate, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bqT" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"brn" = ( +/obj/structure/safe/floor, +/obj/item/weapon/moneybag/vault, +/obj/item/weapon/moneybag/vault, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"brR" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/obj/machinery/reagentgrinder{ + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/dropper, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = -21 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"brT" = ( +/obj/machinery/mech_recharger, +/obj/mecha/combat/durand, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"brX" = ( +/obj/machinery/light/small, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bst" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bsG" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"bsM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"btE" = ( +/turf/simulated/goreeyes, +/area/survivalpod/superpose/HellCave) +"buk" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = 26; + req_access = list(2,4) + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/bay/chair/padded/black{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"bur" = ( +/obj/structure/cliff/automatic/corner{ + dir = 9 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"buN" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/pizzavoucher{ + pixel_x = 7; + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bvG" = ( +/obj/machinery/camera{ + c_tag = "Central Hallway"; + dir = 8; + network = list("Research") + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"bvO" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"bwm" = ( +/turf/simulated/wall/r_wall, +/area/template_noop) +"bwU" = ( +/obj/effect/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled, +/area/template_noop) +"bwY" = ( +/obj/structure/janitorialcart, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"bxr" = ( +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"bye" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/toolbox, +/obj/random/tool, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"byk" = ( +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"byn" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/item/weapon/card/id/external, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bys" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/storage/box/glasses/meta/metapint, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"byP" = ( +/obj/item/clothing/suit/storage/apron/white, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"bze" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bzu" = ( +/obj/structure/curtain/bed, +/turf/simulated/floor/carpet/blue2, +/area/template_noop) +"bAk" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"bAD" = ( +/obj/item/weapon/flame/lighter/zippo, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bAJ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/turf/simulated/shuttle/plating, +/area/template_noop) +"bAU" = ( +/obj/machinery/door/airlock/maintenance/sec{ + name = "Security Door"; + req_one_access = null + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bBS" = ( +/obj/structure/bookcase/manuals/research_and_development, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bCa" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"bCG" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"bCM" = ( +/obj/structure/sink/kitchen, +/turf/simulated/wall, +/area/survivalpod/superpose/Dinner) +"bCZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bDQ" = ( +/obj/structure/closet/walllocker_double/survival/south, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"bEb" = ( +/obj/item/weapon/cell/device/hyper, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bEt" = ( +/obj/structure/morgue/crematorium{ + dir = 8; + id = "mercpodburn" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"bEw" = ( +/obj/structure/table/darkglass, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"bEI" = ( +/obj/structure/window/reinforced, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"bEL" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MethLab) +"bEU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"bEZ" = ( +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 7 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"bFd" = ( +/obj/machinery/flasher{ + id = "SP-Cell flash"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bGa" = ( +/obj/machinery/power/thermoregulator/southerncross{ + pixel_y = 30 + }, +/obj/structure/cable, +/turf/simulated/floor/wood, +/area/survivalpod) +"bGp" = ( +/obj/item/weapon/module/id_auth, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bGI" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"bHl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"bHr" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bHC" = ( +/obj/item/weapon/storage/box/survival/space, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"bHF" = ( +/obj/machinery/door/window/westleft{ + name = "Storefront"; + req_access = list(160) + }, +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/obj/structure/table/marble, +/obj/machinery/cash_register/civilian{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"bHN" = ( +/obj/machinery/vending/coffee, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bHY" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"bIk" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"bIo" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"bIp" = ( +/obj/structure/closet/secure_closet{ + icon_broken = "secbroken"; + icon_closed = "sec"; + icon_locked = "sec1"; + icon_off = "secoff"; + icon_opened = "secopen"; + icon_state = "sec1"; + name = "security officer's locker"; + req_access_txt = "201" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"bII" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"bJc" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"bJf" = ( +/turf/simulated/wall/cult, +/area/survivalpod/superpose/DemonPool) +"bJP" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/template_noop) +"bJU" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"bJV" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"bKo" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bKW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"bLf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bLw" = ( +/obj/structure/table/marble, +/obj/machinery/microwave, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"bLG" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"bLZ" = ( +/obj/machinery/light/floortube/flicker{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"bMp" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"bMv" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"bML" = ( +/turf/simulated/floor/lava, +/area/template_noop) +"bMN" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"bNj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/chair/bay/chair/padded/red, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bNk" = ( +/obj/machinery/light, +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"bNn" = ( +/obj/fire, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bNJ" = ( +/obj/item/trash/cigbutt, +/obj/item/weapon/tank/emergency/oxygen, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bNX" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"bOf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bOp" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = "splock" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"bOs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bOT" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/purpledouble, +/turf/simulated/floor/carpet/gaycarpet, +/area/template_noop) +"bPx" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"bPY" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"bQx" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"bQL" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"bQO" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/seeds/ambrosiadeusseed, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"bQS" = ( +/obj/machinery/media/jukebox, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"bQT" = ( +/obj/machinery/door/blast/regular{ + name = "Cargo Door" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bRr" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"bRM" = ( +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"bRN" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"bSg" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"bST" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/structure/bed/padded, +/obj/machinery/flasher{ + id = "SP-Cell flash"; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bTe" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"bTq" = ( +/obj/structure/table/woodentable, +/obj/random/mug, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"bTA" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"bTD" = ( +/obj/structure/hull_corner/long_vert{ + dir = 9 + }, +/turf/template_noop, +/area/template_noop) +"bUc" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/CultShip) +"bUJ" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/seeds/cornseed, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"bUV" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bVd" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/lipstick/black, +/obj/item/weapon/lipstick/jade, +/obj/item/weapon/lipstick/purple, +/obj/item/weapon/lipstick, +/obj/item/weapon/lipstick/random, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bVh" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bVz" = ( +/obj/machinery/vending/hydroseeds, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"bVJ" = ( +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"bVP" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/machinery/holoplant, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"bVT" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/closet/secure_closet/freezer/kitchen{ + locked = 0; + pixel_x = -5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"bWy" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"bWO" = ( +/obj/structure/bed/chair/bay/chair/padded/blue, +/obj/structure/sign/nanotrasen{ + pixel_y = 27 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"bWV" = ( +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bXQ" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/cult, +/area/template_noop) +"bXS" = ( +/obj/item/clothing/accessory/stethoscope, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"bXZ" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bYf" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"bYu" = ( +/obj/effect/catwalk_plated/white, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"bYB" = ( +/obj/structure/closet/secure_closet/engineering_welding{ + locked = 0 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"bYQ" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"bYR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bYV" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/deck/tarot{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"bZy" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"bZR" = ( +/obj/structure/cult/talisman, +/obj/item/device/soulstone, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"caa" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"caR" = ( +/obj/structure/cult/tome, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"caS" = ( +/obj/structure/table/steel_reinforced, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/item/weapon/bikehorn, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cby" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/botany/editor, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"cbz" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"cbG" = ( +/obj/structure/table/woodentable, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cbH" = ( +/obj/machinery/the_singularitygen, +/turf/simulated/floor/airless, +/area/survivalpod/superpose/CrashedInfestedShip) +"ccy" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + id = "shelterblast"; + name = "Shelter Blast Doors"; + pixel_y = 32 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"ccQ" = ( +/obj/structure/hull_corner, +/turf/template_noop, +/area/template_noop) +"ceo" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/donkpockets, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"ceA" = ( +/obj/random/maintenance/clean, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"ceL" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"ceN" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"ceQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/camera{ + c_tag = "Staff Locker Room"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cfz" = ( +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"cgk" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"cgO" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"chf" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"chm" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"chJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/window/basic{ + dir = 4; + tag = "icon-window (EAST)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ciK" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ciW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock{ + id_tag = "awaydorm3"; + name = "Dorm 3" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"cjw" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"cjz" = ( +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"cjP" = ( +/obj/structure/cult/tome, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"ckg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"cle" = ( +/obj/structure/flora/bboulder1, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"clr" = ( +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"clB" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"clO" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/machinery/button/windowtint{ + id = "h-kitchen"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"clR" = ( +/turf/simulated/wall, +/area/survivalpod/superpose/MethLab) +"clT" = ( +/obj/item/clothing/head/cone, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"cmi" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/suit/hgpirate, +/obj/item/clothing/suit/imperium_monk, +/obj/item/clothing/suit/leathercoat, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/pirate, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cmn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/mecha/working/ripley/mining, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cnh" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cnw" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"coo" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/gear{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cou" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"coy" = ( +/obj/machinery/light/poi, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"coA" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -34 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"coK" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"cpf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cph" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"cpj" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"cpn" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"cpV" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"cqC" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"cqS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"crx" = ( +/obj/structure/curtain/open/shower/security, +/obj/machinery/shower{ + pixel_y = 20 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"crz" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/HellCave) +"crD" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"crT" = ( +/obj/structure/cult/forge, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"crY" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/firstaid/surgery, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"crZ" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"csb" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"csk" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"csm" = ( +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"csv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"csJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"cto" = ( +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"cup" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cuv" = ( +/obj/structure/table/rack, +/obj/item/weapon/gun/launcher/crossbow, +/obj/item/stack/rods{ + amount = 17 + }, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"cuI" = ( +/obj/vehicle/train/engine/quadbike/built{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"cuM" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"cvl" = ( +/obj/structure/bookcase, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"cvm" = ( +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cvL" = ( +/obj/machinery/alarm/monitor{ + dir = 8; + locked = 0; + pixel_x = 23; + req_access = null + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cvT" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cwo" = ( +/obj/machinery/seed_extractor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"cwx" = ( +/obj/structure/lightpost, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"cwJ" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cwO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"cxo" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"cxz" = ( +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"cxC" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"cya" = ( +/obj/structure/inflatable, +/turf/simulated/floor/plating, +/area/template_noop) +"cyi" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"cyr" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"czf" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"czi" = ( +/obj/structure/table/alien, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"czn" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/prop/alien/dispenser, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"czR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"cAb" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/machinery/recharger/wallcharger{ + pixel_y = 22 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"cAi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"cAC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock, +/turf/simulated/floor/wood, +/area/template_noop) +"cBn" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"cBr" = ( +/obj/random/maintenance/cargo, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"cBU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"cCp" = ( +/obj/effect/gateway, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"cCT" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/vending/medical{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"cCX" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"cDc" = ( +/obj/fire, +/obj/item/trash/material/circuit, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"cDm" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"cDp" = ( +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"cDG" = ( +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"cEK" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"cEM" = ( +/turf/simulated/floor/carpet/blucarpet, +/area/template_noop) +"cGj" = ( +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/floor/wood, +/area/template_noop) +"cGD" = ( +/obj/machinery/media/jukebox/casinojukebox, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"cGG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"cHg" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"cHz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/trash/material/device, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"cHU" = ( +/obj/structure/alien/membrane, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"cIf" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"cIs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"cIx" = ( +/obj/structure/table/reinforced, +/obj/item/roller/adv{ + layer = 2.97; + pixel_y = -4 + }, +/obj/item/roller/adv{ + layer = 2.98 + }, +/obj/item/roller/adv{ + layer = 2.99; + pixel_y = 4 + }, +/obj/item/roller/adv{ + pixel_y = 8 + }, +/obj/item/device/sleevemate, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/obj/item/weapon/storage/box/body_record_disk{ + pixel_x = -16 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"cII" = ( +/obj/machinery/iv_drip, +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"cJg" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"cJz" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"cJD" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"cJU" = ( +/obj/structure/flora/smallbould, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"cKp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"cKI" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = 32 + }, +/turf/template_noop, +/area/survivalpod) +"cLh" = ( +/obj/item/device/binoculars, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"cLj" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"cLn" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"cMh" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/machinery/washing_machine{ + pixel_x = 2; + pixel_y = 18 + }, +/obj/item/weapon/storage/laundry_basket{ + pixel_x = -1; + pixel_y = -7 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"cMl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"cMC" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/atm{ + pixel_x = -32 + }, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cMK" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"cMR" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cNl" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_y = -6 + }, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/obj/structure/grille/broken, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"cNn" = ( +/obj/machinery/button/remote/blast_door{ + id = "trade"; + name = "Shop Shutters"; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"cND" = ( +/turf/simulated/floor/atoll, +/area/template_noop) +"cNI" = ( +/obj/effect/fusion_em_field, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"cNR" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"cNS" = ( +/obj/structure/fence/corner, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"cOm" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"cOq" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"cOv" = ( +/obj/structure/salvageable/console_broken_os{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"cOE" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/module/power_control, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"cOS" = ( +/obj/machinery/vending/cola{ + categories = 3; + dir = 8; + name = "hacked Robust Softdrinks"; + prices = list() + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"cOZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"cPf" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"cPt" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"cPA" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cPL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"cQd" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"cQD" = ( +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cQF" = ( +/obj/machinery/vending/coffee, +/obj/machinery/camera{ + c_tag = "BioResearch Entry East"; + dir = 8; + network = list("Research") + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cQG" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cQY" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"cRh" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"cRM" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"cRO" = ( +/obj/machinery/door/window/brigdoor/northright{ + dir = 8; + id = "SP-Cell"; + name = "Cell"; + req_access = null; + req_one_access = list(2,4) + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "SP-Cell2"; + name = "Cell Door" + }, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"cRP" = ( +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"cRS" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/structure/filingcabinet, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"cSu" = ( +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/device/kit/paint/ripley/death, +/obj/item/device/kit/paint/ripley/flames_blue, +/obj/item/device/kit/paint/ripley/flames_red, +/obj/item/device/kit/paint/ripley, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cSH" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"cSN" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"cSW" = ( +/obj/machinery/door/blast/angled_shutter{ + dir = 4; + id = "frog" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"cTn" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 8; + start_pressure = 4559.63 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"cTy" = ( +/obj/structure/toilet, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"cTB" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/toy/plushie/kitten, +/obj/item/toy/plushie/grey_cat, +/obj/item/toy/plushie/orange_cat, +/obj/item/toy/plushie/borgplushie/scrubpuppy, +/obj/item/toy/plushie/black_fox, +/obj/item/toy/plushie, +/obj/item/toy/plushie/corgi, +/obj/item/toy/plushie/crimson_fox, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = -32 + }, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/carpet/turcarpet, +/area/survivalpod/superpose/ScienceShip) +"cTU" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"cUX" = ( +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"cVg" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"cVl" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cVH" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cVO" = ( +/obj/machinery/light/small, +/obj/structure/table/standard, +/obj/random/soap, +/obj/random/soap{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"cVS" = ( +/obj/item/weapon/material/knife/tacknife/boot, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cWA" = ( +/obj/item/device/gps/computer{ + pixel_y = -16 + }, +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"cXj" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain8, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"cXq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = null; + maxhealth = 8000000000; + normalspeed = 0; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"cYi" = ( +/turf/simulated/floor/plating, +/area/template_noop) +"cZt" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"cZu" = ( +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"cZw" = ( +/obj/structure/noticeboard, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"cZK" = ( +/obj/item/poster, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cZN" = ( +/obj/structure/bed/chair/sofa/left/brown{ + dir = 8 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dal" = ( +/turf/template_noop, +/area/survivalpod) +"daD" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"daH" = ( +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"daR" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"dbX" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"dcm" = ( +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"dcJ" = ( +/obj/structure/railing, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"dcU" = ( +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ddf" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"ddn" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"ddo" = ( +/obj/structure/bed/chair/bay/comfy/blue, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"ddq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"dek" = ( +/obj/structure/closet, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"del" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/glass/beaker, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"dfc" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/kitchenspike, +/obj/effect/rune, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"dfi" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod) +"dfr" = ( +/obj/structure/railing, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"dfA" = ( +/obj/structure/table/woodentable, +/obj/random/contraband, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"dfF" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"dgg" = ( +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"dgk" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2; + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"dgY" = ( +/obj/structure/table/woodentable, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/random/maintenance, +/obj/random/maintenance/cargo, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled, +/area/template_noop) +"dhP" = ( +/obj/machinery/door/blast/angled_shutter{ + dir = 4; + id = "hound" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"diw" = ( +/obj/item/device/gps/computer, +/turf/simulated/floor/plating, +/area/template_noop) +"diH" = ( +/obj/structure/simple_door/cult, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"djg" = ( +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"djH" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"dko" = ( +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"dkJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"dkN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dla" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/ScienceShip) +"dlb" = ( +/obj/random/maintenance, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"dle" = ( +/obj/item/weapon/bone/arm, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"dlh" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dlp" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "engine_access_hatch"; + locked = 1; + req_access = list(11) + }, +/turf/simulated/floor, +/area/template_noop) +"dlz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"dlO" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"dlQ" = ( +/obj/structure/window/reinforced/tinted, +/obj/machinery/door/window/brigdoor/westleft{ + req_access = null + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"dmo" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/hatch, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dms" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dmQ" = ( +/obj/item/weapon/material/shard, +/obj/structure/grille/broken/rustic, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"dnm" = ( +/obj/machinery/vending/snack{ + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dnF" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/obj/fire, +/obj/item/trash/material/device, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"dnX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"dnY" = ( +/obj/item/device/starcaster_news, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"dob" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"don" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + start_pressure = 740.5 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"doq" = ( +/obj/structure/curtain/open/shower/security, +/obj/machinery/shower{ + pixel_y = 20 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"dot" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"dov" = ( +/obj/structure/grille, +/obj/structure/bonfire/sifwood, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"doy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/table/bench/standard, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"doG" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell"; + name = "Cell Locker" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dqE" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"dqM" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"dro" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/cult, +/area/template_noop) +"drr" = ( +/obj/structure/closet/toolcloset, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/module/id_auth, +/obj/item/weapon/module/card_reader, +/obj/item/weapon/module/cell_power, +/obj/item/weapon/module/power_control, +/obj/item/weapon/circuitboard/microwave, +/obj/item/weapon/circuitboard/mass_driver, +/obj/item/weapon/circuitboard/jukebox, +/obj/item/weapon/circuitboard/intercom, +/obj/item/weapon/circuitboard/firealarm, +/obj/item/weapon/circuitboard/airalarm, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/belt/utility/full/multitool, +/obj/item/weapon/storage/bag/trash, +/obj/item/weapon/storage/bag/trash, +/obj/item/weapon/storage/backpack/dufflebag/eng, +/obj/item/device/geiger, +/obj/item/device/mapping_unit, +/turf/simulated/floor/plating, +/area/template_noop) +"drP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"drV" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/ScienceShip) +"dsd" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"dth" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dtq" = ( +/obj/structure/bed/chair/sofa/left/black{ + dir = 2 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"dtt" = ( +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dtF" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dtK" = ( +/obj/structure/closet/crate, +/obj/random/firstaid, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"dtP" = ( +/obj/item/weapon/virusdish/random, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"dtY" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/prop/alien/dispenser, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"duO" = ( +/obj/machinery/transhuman/synthprinter, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"duX" = ( +/obj/structure/table/standard, +/obj/item/weapon/book/manual/hydroponics_pod_people, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"dva" = ( +/mob/living/simple_mob/vore/demonAI/engorge{ + evasion = 1; + health = 750; + projectilesound = 'sound/weapons/taser2.ogg'; + projectiletype = /obj/item/projectile/beam/stun/electric_spider; + size_multiplier = 3; + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"dvn" = ( +/obj/fire, +/obj/item/trash/material/metal, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"dvx" = ( +/obj/structure/bed/chair/sofa{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"dvC" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/random/cash/huge, +/obj/random/cash/huge, +/obj/random/cash/huge, +/obj/random/cash/huge, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dvV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dwa" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dwq" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/bed/chair, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dwr" = ( +/obj/structure/table/glass, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dxl" = ( +/obj/machinery/mecha_part_fabricator/pros, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dxm" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dxv" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"dxM" = ( +/obj/machinery/vending/medical{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777) + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"dyz" = ( +/obj/machinery/smartfridge/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"dzp" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"dzv" = ( +/obj/effect/floor_decal/rust, +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"dAo" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/obj/machinery/light/floortube, +/obj/structure/table/reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "CMO's Office" + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"dAA" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"dBQ" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell"; + name = "Cell Locker" + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dCe" = ( +/obj/structure/table/marble{ + color = "#B03A2E" + }, +/obj/random/soap{ + pixel_y = 5 + }, +/obj/random/soap, +/obj/item/weapon/towel/random{ + pixel_y = 4 + }, +/obj/item/weapon/towel/random{ + pixel_y = 4 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"dCh" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"dCB" = ( +/obj/random/maintenance/medical, +/obj/fire, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"dCS" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"dDa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"dDw" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/porta_turret/alien{ + faction = "cult" + }, +/turf/simulated/floor/cult, +/area/template_noop) +"dDB" = ( +/turf/template_noop, +/area/survivalpod/superpose/Dinner) +"dDO" = ( +/obj/structure/grille/broken/cult, +/obj/fire, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"dDX" = ( +/obj/item/toy/plushie/box, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"dEb" = ( +/obj/structure/tubes, +/obj/machinery/computer/rdservercontrol{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dEi" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"dED" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/personal, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/weapon/gun/projectile/pistol, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/storage/box/survival/comp, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"dEG" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"dEK" = ( +/turf/simulated/floor/redgrid/animated, +/area/template_noop) +"dEQ" = ( +/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/simulated/floor/plating, +/area/template_noop) +"dFC" = ( +/obj/item/stack/material/glass{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"dFH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"dFO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"dGK" = ( +/obj/item/device/geiger, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"dGL" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"dGV" = ( +/obj/structure/table/woodentable, +/obj/item/ammo_magazine/s357, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dHc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 4; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dHg" = ( +/obj/structure/table/standard, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"dHt" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"dHu" = ( +/obj/machinery/door/airlock/maintenance/common, +/obj/item/tape/engineering, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"dHD" = ( +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"dIo" = ( +/obj/machinery/atmospherics/binary/circulator, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"dIq" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/closet/secure_closet/medical2{ + req_access = list(300) + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"dIr" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/light, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"dIy" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"dIC" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"dIL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"dIU" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"dJh" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dJi" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_x = -3; + pixel_y = -1 + }, +/obj/item/weapon/towel{ + color = "#ff0000"; + name = "red towel" + }, +/obj/item/weapon/towel{ + color = "#ff0000"; + name = "red towel" + }, +/obj/item/weapon/towel{ + color = "#FF8C00"; + name = "orange towel"; + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/weapon/towel{ + color = "#FF8C00"; + name = "orange towel"; + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/weapon/towel{ + color = "#90ee90"; + name = "green towel" + }, +/obj/item/weapon/towel{ + color = "#90ee90"; + name = "green towel" + }, +/obj/item/weapon/towel{ + color = "#b5651d"; + name = "brown towel" + }, +/obj/item/weapon/towel{ + color = "#b5651d"; + name = "brown towel" + }, +/obj/item/weapon/towel, +/obj/item/weapon/towel, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/item/weapon/tape_roll{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/tape_roll{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/device/taperecorder, +/obj/item/device/tape/random, +/obj/item/device/tape/random, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/folder/yellow, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"dJs" = ( +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"dJG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"dKg" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"dKh" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"dLq" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dMu" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/Farm) +"dMv" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/yellow, +/turf/simulated/floor/wood, +/area/template_noop) +"dMB" = ( +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"dMC" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"dMD" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"dMX" = ( +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/full, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/WoodenCamp) +"dNs" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"dNT" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"dOg" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dOl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"dOt" = ( +/turf/simulated/floor/cult{ + icon_state = "cult-narsie" + }, +/area/survivalpod/superpose/CultShip) +"dPb" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/GrandLibrary) +"dPn" = ( +/obj/machinery/vending/foodfast, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"dQo" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"dQp" = ( +/obj/machinery/suit_cycler/vintage/omni{ + req_one_access = list(150) + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"dRC" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"dRE" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/carpet/purcarpet, +/area/template_noop) +"dRG" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"dRR" = ( +/obj/item/device/radio/intercom/department/medbay{ + pixel_y = -21 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"dSa" = ( +/obj/machinery/button/remote/blast_door{ + id = "SP-Cell"; + name = "Cell Door"; + pixel_x = 6; + pixel_y = -33; + req_one_access = list(2,4) + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = -24; + req_access = list(2,4) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"dSC" = ( +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"dSK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"dTe" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/table/woodentable, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"dUu" = ( +/obj/item/weapon/cell/hyper, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"dUz" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dUE" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dVe" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"dVp" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"dVG" = ( +/obj/structure/closet/walllocker_double/south{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/template_noop) +"dVK" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"dVL" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"dVP" = ( +/obj/item/weapon/material/knife/tacknife/survival, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"dWH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"dWQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"dXj" = ( +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_y = 22 + }, +/obj/structure/table/marble, +/obj/item/weapon/clipboard, +/obj/item/toy/figure/bartender, +/obj/item/weapon/storage/fancy/cigar/havana, +/obj/item/weapon/storage/fancy/cigar/cohiba, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dXz" = ( +/obj/structure/bed/chair/wood, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dXD" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/storage/excavation, +/obj/item/stack/flag/yellow, +/obj/item/device/measuring_tape, +/obj/item/weapon/pickaxe/drill, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/item/weapon/material/knife/machete/hatchet, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"dYd" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/green, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"dYD" = ( +/turf/simulated/floor/carpet/gaycarpet, +/area/template_noop) +"dYQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"dYU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"dZa" = ( +/obj/machinery/gibber/autogibber{ + emagged = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"dZk" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"dZo" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/plating, +/area/template_noop) +"eab" = ( +/obj/fire, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"eam" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"eaw" = ( +/obj/random/pottedplant, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + opacity = 1 + }, +/obj/structure/curtain/black, +/turf/simulated/floor/cult, +/area/template_noop) +"eaB" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"eaM" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"ebl" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"ebv" = ( +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"ebA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"ecg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/fireaxecabinet{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"ecn" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"ecq" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id = "SP-Cell"; + name = "Cell Door" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ecx" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"ecK" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ecV" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"edd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"edy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"edH" = ( +/obj/structure/table/reinforced, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"edW" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"eet" = ( +/obj/machinery/smartfridge/drying_rack{ + pixel_x = 9 + }, +/obj/machinery/smartfridge/drying_rack{ + pixel_x = -8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"eeG" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"efD" = ( +/obj/structure/sink{ + pixel_y = 14 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"efF" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"efG" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door{ + id = "frog"; + name = "Frog"; + pixel_x = 6; + pixel_y = 2 + }, +/obj/machinery/button/remote/blast_door{ + id = "death"; + name = "Deathclaw"; + pixel_x = -6; + pixel_y = 2 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"efN" = ( +/turf/simulated/mineral/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"efQ" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/book/tome/imbued, +/obj/item/weapon/digestion_remains/skull/unathi, +/obj/item/device/soulstone, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"efY" = ( +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"egm" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/obj/machinery/light/poi, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"egx" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"egE" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"ehi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"ehG" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + req_one_access = null + }, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ehT" = ( +/obj/fire, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"eii" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"eim" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"eir" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"ejR" = ( +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/obj/item/weapon/material/shard{ + pixel_x = 5 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"eka" = ( +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ekd" = ( +/obj/structure/closet/cabinet, +/obj/random/curseditem, +/obj/random/curseditem, +/obj/item/weapon/melee/cursedblade, +/obj/item/weapon/melee/cultblade, +/obj/item/weapon/beartrap/hunting, +/obj/item/weapon/beartrap/hunting, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/device/soulstone, +/obj/item/device/soulstone, +/obj/item/weapon/storage/belt/soulstone/full, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"eko" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "estrella_pump" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "estrella_sensor"; + pixel_y = -28 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"elo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"elq" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 8; + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"elu" = ( +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"elG" = ( +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"elI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"elO" = ( +/obj/structure/sign/flag/pirate, +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"emx" = ( +/obj/structure/prop/blackbox/quarantined_shuttle, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"emZ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/part_replacer/adv/discount_bluespace{ + layer = 3.01 + }, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/obj/effect/spawner/parts/t3, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"enm" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/power/emitter, +/turf/simulated/floor/plating, +/area/template_noop) +"enH" = ( +/obj/machinery/optable, +/obj/machinery/oxygen_pump/anesthetic{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eog" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"eok" = ( +/obj/item/weapon/material/knife/machete/hatchet, +/turf/simulated/floor/outdoors/mud{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"eoo" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"eoQ" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood, +/area/template_noop) +"epj" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/sign/deathsposal{ + desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; + name = "\improper DISPOSAL: LEADS TO EXTERIOR"; + pixel_y = -32 + }, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"epm" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"epr" = ( +/obj/item/device/flashlight/lamp, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"epD" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/dead{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"epR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"epS" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"eqb" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"eqK" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"eqP" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "estrella"; + name = "interior access button"; + pixel_y = 26 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"eqX" = ( +/obj/structure/table/survival_pod, +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/clothing/glasses/welding, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"erk" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"erV" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 8; + name = "Security Checkpoint"; + req_access_txt = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Security Checkpoint"; + req_access_txt = null + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "checkshutt" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"erW" = ( +/obj/effect/floor_decal/spline/plain, +/obj/structure/reagent_dispensers/water_cooler/full{ + dir = 8; + pixel_x = 9 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"esy" = ( +/mob/living/bot/farmbot, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"esW" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"ett" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/maintenance/int{ + name = "Sauna" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"eua" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/template_noop) +"eup" = ( +/obj/machinery/vending/coffee, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eus" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"euE" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"euL" = ( +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"euU" = ( +/obj/structure/closet/emcloset, +/obj/item/clothing/mask/breath, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"evF" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"evL" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ewo" = ( +/obj/structure/sink{ + pixel_y = 16 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ewE" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"ewY" = ( +/turf/simulated/floor/lino, +/area/survivalpod) +"exa" = ( +/obj/vehicle/train/engine{ + dir = 2 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"exi" = ( +/obj/item/weapon/storage/belt/utility/full/multitool, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"exk" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/storage/box/freezer, +/obj/item/weapon/storage/box/freezer, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/device/defib_kit/loaded, +/obj/item/device/defib_kit/loaded, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"exz" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"exB" = ( +/obj/structure/closet/crate/bin, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"exK" = ( +/obj/structure/cliff/automatic/corner, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"eyx" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + on = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"eyY" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"eza" = ( +/obj/machinery/alarm/monitor{ + dir = 1; + locked = 0; + pixel_y = -23; + req_access = null + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"ezf" = ( +/obj/structure/table/woodentable, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor/wood, +/area/template_noop) +"ezi" = ( +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ezj" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"eAz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"eAS" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/scoped, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle, +/obj/item/weapon/storage/box/syndie_kit{ + max_storage_space = 20; + name = "box of 7.62mm clips"; + starts_with = list(/obj/item/ammo_magazine/clip/c762=10) + }, +/obj/item/weapon/storage/box/syndie_kit{ + max_storage_space = 20; + name = "box of 7.62mm clips"; + starts_with = list(/obj/item/ammo_magazine/clip/c762=10) + }, +/turf/simulated/floor/wood, +/area/template_noop) +"eBn" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/greendouble, +/turf/simulated/floor/wood, +/area/template_noop) +"eBu" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/rack/shelf, +/obj/random/maintenance, +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"eBz" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/table/rack, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"eBF" = ( +/obj/item/weapon/cell/high/empty, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"eBY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"eBZ" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"eCc" = ( +/obj/structure/alien/wall, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"eCh" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"eCC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eDL" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"eEr" = ( +/obj/item/weapon/melee/cultblade, +/obj/structure/table/fancyblack, +/obj/item/device/soulstone, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eEP" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"eFL" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/sign/painting/public, +/turf/simulated/wall/wood, +/area/template_noop) +"eFO" = ( +/obj/machinery/camera{ + dir = 1 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"eGz" = ( +/obj/machinery/vending/cola, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eGL" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"eGN" = ( +/obj/structure/table/standard, +/obj/item/weapon/deck/cards, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"eGY" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"eGZ" = ( +/obj/machinery/camera{ + c_tag = "Containment Chamber"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"eHB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/structure/closet, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eHJ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"eHK" = ( +/obj/structure/table/rack, +/obj/item/weapon/shovel, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"eHY" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"eIo" = ( +/obj/structure/sign/vacuum{ + desc = "A beacon used by a teleporter."; + icon = 'icons/obj/radio.dmi'; + icon_state = "beacon"; + name = "tracking beacon" + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"eIL" = ( +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"eIQ" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/closet/walllocker_double/survival/north, +/turf/simulated/floor/wood, +/area/template_noop) +"eJa" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"eJh" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"eJk" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"eJG" = ( +/obj/structure/lattice, +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"eJH" = ( +/obj/item/roller_holder, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"eJL" = ( +/obj/machinery/light/floortube/flicker{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"eJO" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"eKn" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"eKv" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"eKE" = ( +/obj/machinery/door/airlock/engineering{ + icon_state = "door_locked"; + locked = 1; + name = "Cargo Bay" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"eLg" = ( +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"eLw" = ( +/obj/structure/table/steel, +/obj/item/device/starcaster_news{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/toy/eight_ball{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eLB" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = 32 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"eLG" = ( +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/space/void/atmos, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/helmet/space/void/atmos, +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/westleft{ + name = "Atmospherics Suits"; + req_access = list(24) + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eMa" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eMd" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/mint, +/obj/item/weapon/packageWrap, +/obj/item/weapon/reagent_containers/dropper, +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_x = -1; + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eMl" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/toolbox, +/obj/item/weapon/storage/toolbox, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/electrical, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eMp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/gear_painter, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"eMS" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"eMU" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"eMZ" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"eNg" = ( +/obj/structure/cult/tome, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"eNw" = ( +/obj/structure/bonfire/permanent, +/obj/structure/grille/rustic, +/turf/simulated/floor/cult, +/area/template_noop) +"eNP" = ( +/obj/structure/salvageable/computer, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"eOn" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/obj/random/maintenance/clean, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"eOx" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "military autolathe" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"eOW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/largecrate/animal/corgi, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ePy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ePU" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"ePY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"eQc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eQk" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"eRn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"eRq" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"eRr" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"eRx" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"eRQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"eSv" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"eSK" = ( +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eSR" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"eTn" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"eTx" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"eTA" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"eTG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eTL" = ( +/obj/item/weapon/material/shard{ + pixel_x = 6 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"eUt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"eUx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"eUR" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"eUS" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + dir = 4; + pixel_x = -28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"eVH" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"eVP" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"eWv" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"eWF" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/closet/jcloset, +/obj/item/weapon/mop, +/obj/structure/mopbucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"eXg" = ( +/obj/structure/grille/broken/cult, +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"eXl" = ( +/obj/structure/table/rack, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"eYe" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"eYv" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"eYK" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"eZk" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"eZo" = ( +/obj/machinery/door/airlock/external, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"fak" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"fam" = ( +/obj/machinery/button/remote/blast_door{ + id = "Teshnomancer_frontdoor"; + name = "Front Blast Door"; + pixel_x = 7; + pixel_y = 25; + req_one_access = list(300) + }, +/obj/machinery/button/remote/airlock{ + id = "Teshnomancer_doors"; + name = "Bolt doors"; + pixel_x = -8; + pixel_y = 25; + req_one_access = list(300); + specialfunctions = 4 + }, +/obj/machinery/button/remote/airlock{ + id = "Teshnomancer_doors"; + name = "Open doors"; + pixel_x = -8; + pixel_y = 39; + req_one_access = list(300) + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"fay" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/cosmos, +/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"faD" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"faJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"fbo" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"fbv" = ( +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/FieldLab) +"fbz" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fbY" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/r_n_d/server/core, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"fcs" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms"; + req_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"fcx" = ( +/obj/machinery/bodyscanner{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fcD" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/windowtint{ + id = "SP-Pool"; + pixel_x = -27 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"fcX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/snack, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"fdh" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fdj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"fdy" = ( +/obj/structure/hull_corner{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"fdM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"fdY" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"fen" = ( +/obj/item/weapon/pickaxe/hand, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"feF" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Teshnomancer_innerdoor"; + name = "Inner Door"; + pixel_x = 26; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"ffG" = ( +/obj/item/stack/nanopaste, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"ffK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"fgs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"fgz" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"fgF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"fhd" = ( +/obj/fiftyspawner/turcarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"fhp" = ( +/obj/structure/table/glass, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fhG" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fhV" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"fhZ" = ( +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/ScienceShip) +"fiQ" = ( +/obj/item/weapon/storage/backpack/sport, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"fjA" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 5 + }, +/obj/machinery/door/window/brigdoor/northright{ + name = "FH Chemistry Windoor"; + req_access = list(300) + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"fjT" = ( +/mob/living/simple_mob/animal/passive/cat/bones{ + desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; + name = "Felix" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"fkn" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 4; + pixel_x = -3 + }, +/turf/template_noop, +/area/survivalpod/superpose/ScienceShip) +"fkQ" = ( +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"fkW" = ( +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"fkZ" = ( +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"flw" = ( +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"flG" = ( +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"fmj" = ( +/obj/item/clothing/suit/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fmw" = ( +/obj/item/device/flashlight, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"fmE" = ( +/obj/item/device/radio/intercom/department/medbay{ + dir = 1; + pixel_y = 21 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/wood, +/area/survivalpod) +"fmN" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/kiddieplaque{ + desc = "A plaque commemorating the construction of the cargo ship Beruang."; + name = "Beruang"; + pixel_x = 32 + }, +/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"fnO" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"fon" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"fou" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"foz" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"foD" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"foI" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"foK" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"foL" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"foR" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/fire, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"fpf" = ( +/obj/structure/table/woodentable, +/obj/item/trash/candle, +/obj/item/weapon/paper{ + info = "This is a stupid tresure hunt task, that thing is not taking us anywhere. Go on and have fun finding a waste of time."; + name = "Wrinkled sheet of paper" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"fpi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"fpo" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"fpt" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fpQ" = ( +/obj/item/weapon/inflatable_duck, +/turf/simulated/floor/water/pool, +/area/template_noop) +"fpS" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/WoodenCamp) +"fqN" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door{ + id = "hound"; + name = "Currupt Hound"; + pixel_x = -6; + pixel_y = 2 + }, +/obj/machinery/button/remote/blast_door{ + id = "panther"; + name = "Panther"; + pixel_x = 6; + pixel_y = 2 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"fqW" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"frw" = ( +/obj/machinery/vending/hydronutrients, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"frA" = ( +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/template_noop) +"frF" = ( +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/DemonPool) +"frP" = ( +/obj/structure/closet/cabinet, +/obj/random/curseditem, +/obj/random/curseditem, +/obj/item/weapon/melee/cursedblade, +/obj/item/weapon/melee/cultblade, +/obj/item/weapon/beartrap/hunting, +/obj/item/weapon/beartrap/hunting, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/device/soulstone, +/obj/item/device/soulstone, +/obj/item/weapon/storage/belt/soulstone/full, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"fsq" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"fsy" = ( +/obj/structure/closet/secure_closet/hydroponics{ + anchored = 1; + name = "minimalist botanist's locker"; + req_access = list(300); + starts_with = list(/obj/item/weapon/storage/bag/plants,/obj/item/clothing/gloves/botanic_leather,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/reagent_containers/glass/beaker=2,/obj/item/weapon/tool/wirecutters/clippers/trimmers,/obj/item/weapon/reagent_containers/spray/plantbgone) + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"fsJ" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"fsK" = ( +/obj/structure/table/woodentable, +/obj/random/coin, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"ftq" = ( +/obj/structure/bed/chair/comfy/red, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"ftt" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"fua" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"fuu" = ( +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fuv" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 36; + pixel_y = 3 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 36; + pixel_y = -10 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"fux" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"fvw" = ( +/obj/item/weapon/reagent_containers/syringe/antiviral, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"fvQ" = ( +/obj/structure/grille/rustic, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"fwW" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"fxk" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/gun/energy/netgun, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"fxm" = ( +/obj/structure/table/fancyblack, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/starcaster_news, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"fxq" = ( +/obj/machinery/telecomms/relay, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"fxy" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/cult/forge, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"fxB" = ( +/obj/structure/simple_door/sifwood, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"fxI" = ( +/obj/structure/bookcase, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"fyk" = ( +/obj/item/weapon/flame/lighter, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/WoodenCamp) +"fyt" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + dir = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"fyJ" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 32 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"fyN" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fyQ" = ( +/obj/item/device/flashlight/lantern, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"fzi" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/structure/flora/pottedplant/fern{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"fzk" = ( +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 22 + }, +/obj/structure/table/marble, +/obj/item/weapon/book/manual/barman_recipes, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"fzN" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fzP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled/steel_grid, +/area/template_noop) +"fAE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/Dinner) +"fAL" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"fAS" = ( +/obj/structure/table/fancyblack, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"fBv" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"fBC" = ( +/obj/item/stack/material/sandstone, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"fBE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"fBH" = ( +/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, +/obj/structure/curtain/black, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/template_noop) +"fBI" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/firstaid/surgery, +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"fBQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"fCf" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/stripper_pole{ + pixel_y = 9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/item/clothing/under/swimsuit/stripper/mankini{ + pixel_y = 5; + pixel_x = -6 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"fCi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/newscaster{ + pixel_y = 29 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"fCq" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/item/organ/internal/heart, +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"fCH" = ( +/obj/structure/reagent_dispensers/water_cooler/full{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/structure/closet/crate/bin{ + pixel_x = 6; + pixel_y = 13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"fCK" = ( +/obj/structure/table/alien/blue, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"fDk" = ( +/obj/structure/railing/grey, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"fDy" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"fDW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"fEa" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"fEx" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"fEC" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/closet/wardrobe/chemistry_white, +/obj/item/weapon/storage/box/pillbottles, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"fEX" = ( +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"fFv" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"fFz" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"fGT" = ( +/obj/item/weapon/reagent_containers/glass/rag, +/obj/item/clothing/gloves/ring/engagement, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"fHf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/window/basic{ + dir = 8; + tag = "icon-window (WEST)" + }, +/obj/random/trash, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"fHi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"fHv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"fHw" = ( +/obj/machinery/vending/tool, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"fHI" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/kitchen/utensil/spoon, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"fHL" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"fIb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"fIe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"fJf" = ( +/obj/structure/closet/walllocker_double/south{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/carpet/gaycarpet, +/area/template_noop) +"fJo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"fJx" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"fJV" = ( +/obj/structure/bed/chair/backed_red, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fKu" = ( +/obj/machinery/light/bigfloorlamp, +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"fKG" = ( +/obj/machinery/door/airlock/external{ + desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; + frequency = 1380; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "MBT-540" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fLc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"fLQ" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/device/binoculars, +/obj/item/device/bluespaceradio/southerncross_prelinked, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"fMb" = ( +/obj/structure/salvageable/console_os, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/ScienceShip) +"fMf" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"fMh" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"fMT" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = 32 + }, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"fNP" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/vending/fitness, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"fNT" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/obj/machinery/camera{ + c_tag = "HydroResearch Bay East"; + dir = 8; + network = list("Research") + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"fNW" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"fOt" = ( +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CultShip) +"fOK" = ( +/obj/machinery/porta_turret/stationary/syndie, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"fOX" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/obj/item/device/gps/medical/on{ + pixel_x = 7; + pixel_y = 6 + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"fPt" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"fPP" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"fQz" = ( +/obj/structure/closet/secure_closet/miner{ + locked = 0 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"fQL" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"fSN" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"fSR" = ( +/obj/structure/fans, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"fTB" = ( +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"fTP" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_y = -32 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"fTU" = ( +/obj/fire, +/obj/fire, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"fUo" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/decal/remains/human, +/obj/item/clothing/under/mbill{ + desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; + name = "\improper old Major Bill's uniform" + }, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fUD" = ( +/obj/structure/cliff/automatic{ + dir = 2 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"fVh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"fVD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"fVZ" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"fWa" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor, +/area/template_noop) +"fWs" = ( +/obj/machinery/gear_dispenser/suit/autolok, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fWu" = ( +/obj/structure/closet{ + anchored = 1; + name = "welding equipment" + }, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/head/welding/knight, +/obj/item/clothing/head/welding/knight, +/obj/structure/railing/grey{ + dir = 1; + health = 8000000000; + maxhealth = 8000000000; + name = "durable grey railing" + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/bag/circuits/basic, +/obj/item/weapon/beartrap/hunting, +/obj/item/weapon/beartrap/hunting, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"fWJ" = ( +/obj/item/weapon/material/shard, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"fWL" = ( +/obj/item/bodybag/cryobag, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"fWS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"fXk" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = -4 + }, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"fXO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"fXX" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"fYM" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"fZo" = ( +/obj/structure/table/steel, +/obj/machinery/light, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_x = 8 + }, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_x = -8 + }, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_x = 8; + pixel_y = 11 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"fZR" = ( +/obj/machinery/chem_master{ + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"fZX" = ( +/obj/structure/table, +/obj/machinery/light{ + layer = 3 + }, +/obj/item/weapon/gun/projectile/revolver/toy/crossbow, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"gaf" = ( +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"gax" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"gaP" = ( +/obj/structure/simple_door/wood, +/obj/structure/barricade/planks, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gbd" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"gby" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"gbD" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/hyper; + dir = 8; + name = "Unknown APC"; + operating = 0; + pixel_x = -24 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"gcd" = ( +/obj/structure/prop/alien/pod/open, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"gch" = ( +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"gcv" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central6{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"gcO" = ( +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"gdY" = ( +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"gek" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"gfk" = ( +/obj/machinery/button/remote/blast_door{ + dir = 1; + id = "glcafe"; + pixel_y = -25 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"gfp" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Utility"; + dir = 1; + network = list("Research") + }, +/obj/machinery/camera{ + c_tag = "Lobby"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"ggx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"ggA" = ( +/obj/fire, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"ggV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/crate/secure/loot, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ghf" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ghq" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/windoor_assembly{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"gio" = ( +/obj/structure/salvageable/computer, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"gjs" = ( +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"gjB" = ( +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gjK" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/extinguisher{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/structure/mopbucket{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/weapon/mop, +/obj/item/device/multitool, +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/LoneHome) +"gjM" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"gkK" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty/nitrogen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"gkR" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/template_noop) +"glG" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gmc" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"gmL" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"gnu" = ( +/obj/structure/barricade, +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 4; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"gnx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"gnT" = ( +/obj/structure/closet/secure_closet{ + icon_broken = "secbroken"; + icon_closed = "sec"; + icon_locked = "sec1"; + icon_off = "secoff"; + icon_opened = "secopen"; + icon_state = "sec1"; + name = "security officer's locker"; + req_access_txt = "201" + }, +/obj/item/clothing/under/rank/security/corp, +/obj/item/clothing/under/rank/security/corp, +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/gloves/black, +/obj/item/clothing/gloves/black, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/weapon/gun/projectile/automatic/bullpup, +/obj/item/weapon/gun/projectile/automatic/bullpup, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/weapon/gun/energy/taser, +/obj/item/weapon/gun/energy/taser, +/obj/item/weapon/handcuffs, +/obj/item/weapon/handcuffs, +/obj/item/weapon/handcuffs, +/obj/item/weapon/handcuffs, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"gnX" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"gnZ" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"got" = ( +/obj/machinery/access_button{ + master_tag = null; + pixel_x = 27; + pixel_y = -7; + req_one_access = null + }, +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"gpc" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/full{ + pixel_y = 5 + }, +/obj/item/device/radio/intercom{ + desc = "Talk... listen through this."; + name = "Station Intercom (Brig Radio)"; + pixel_y = -21; + wires = 7 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"gqU" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"gre" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/obj/item/trash/material/metal, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"grn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"grp" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"grU" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gsv" = ( +/obj/item/trash/material/metal, +/obj/item/trash/material/circuit, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"gsw" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "screen"; + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"gtC" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower/medical, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"gtD" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/table/gamblingtable, +/obj/item/device/starcaster_news, +/obj/item/weapon/deck/cards, +/obj/structure/fireaxecabinet{ + pixel_y = 27 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gtH" = ( +/obj/effect/fusion_em_field, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"gtI" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"gtN" = ( +/obj/random/trash, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"gue" = ( +/obj/structure/flora/tree/jungle_small, +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"guf" = ( +/obj/random/maintenance/clean, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"guO" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"gvb" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"gvd" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"gvF" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"gvQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"gvX" = ( +/obj/item/trash/sosjerky, +/obj/item/weapon/storage/box/donut/empty, +/obj/item/weapon/reagent_containers/food/drinks/sillycup, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"gvZ" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"gwl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock{ + id_tag = "awaydorm1"; + name = "Dorm 1" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"gwo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"gwz" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/toy/figure/abe, +/obj/item/toy/figure/acolyte, +/obj/item/toy/figure/agent, +/obj/item/toy/figure/assistant, +/obj/item/toy/figure/atmos, +/obj/item/toy/figure/bandit, +/obj/item/toy/figure/barking_dog, +/obj/item/toy/figure/bartender, +/obj/item/toy/figure/borg, +/obj/item/toy/figure/bounty_hunter, +/obj/item/toy/figure/captain, +/obj/item/toy/figure/cargotech, +/obj/item/toy/figure/carrion, +/obj/item/toy/figure/ce, +/obj/item/toy/figure/chaplain, +/obj/item/toy/figure/chef, +/obj/item/toy/figure/chemist, +/obj/item/toy/figure/clown, +/obj/item/toy/figure/cmo, +/obj/item/toy/figure/corgi, +/obj/item/toy/figure/detective, +/obj/item/toy/figure/dsquad, +/obj/item/toy/figure/engineer, +/obj/item/toy/figure/error, +/obj/item/toy/figure/ert, +/obj/item/toy/figure/excelsior, +/obj/item/toy/figure/gardener, +/obj/item/toy/figure/geneticist, +/obj/item/toy/figure/hop, +/obj/item/toy/figure/hos, +/obj/item/toy/figure/janitor, +/obj/item/toy/figure/leadbandit, +/obj/item/toy/figure/librarian, +/obj/item/toy/figure/md, +/obj/item/toy/figure/metacat, +/obj/item/toy/figure/metro_patrolman, +/obj/item/toy/figure/mime, +/obj/item/toy/figure/miner, +/obj/item/toy/figure/ninja, +/obj/item/toy/figure/paramedic, +/obj/item/toy/figure/prisoner, +/obj/item/toy/figure/profwho, +/obj/item/toy/figure/psychologist, +/obj/item/toy/figure/qm, +/obj/item/toy/figure/ranger, +/obj/item/toy/figure/rd, +/obj/item/toy/figure/red_soldier, +/obj/item/toy/figure/roach, +/obj/item/toy/figure/roboticist, +/obj/item/toy/figure/rooster, +/obj/item/toy/figure/scientist, +/obj/item/toy/figure/secofficer, +/obj/item/toy/figure/serbian, +/obj/item/toy/figure/shitcurity, +/obj/item/toy/figure/syndie, +/obj/item/toy/figure/vagabond, +/obj/item/toy/figure/virologist, +/obj/item/toy/figure/warden, +/obj/item/toy/figure/wizard, +/obj/item/toy/figure/station, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gwH" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gwP" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"gxq" = ( +/obj/machinery/deployable/barrier{ + desc = "A deployable barrier with strange undertones. Swipe your ID card to lock/unlock it."; + health = 8000000000; + maxhealth = 8000000000; + name = "modified deployable barrier"; + req_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"gxF" = ( +/obj/structure/hull_corner/long_vert{ + dir = 5 + }, +/turf/template_noop, +/area/template_noop) +"gyj" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"gyJ" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/large, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gyL" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gyP" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"gzu" = ( +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gzW" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"gAN" = ( +/obj/item/device/suit_cooling_unit/emergency, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gAX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"gBi" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/syringe/antiviral, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"gBM" = ( +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gBP" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"gCk" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/engivend{ + pixel_x = -1 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"gDd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"gDg" = ( +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -30 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"gDk" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/device/healthanalyzer, +/obj/item/device/healthanalyzer, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/storage/backpack/dufflebag/sci, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"gDA" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"gDN" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/ambrosiadeusseed, +/obj/effect/floor_decal/rust, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"gDT" = ( +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"gDU" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'RADIOACTIVE AREA'"; + icon_state = "radiation"; + name = "RADIOACTIVE AREA"; + pixel_x = 0; + pixel_y = 0 + }, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/CrashedInfestedShip) +"gEk" = ( +/obj/fire, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"gEF" = ( +/obj/item/stack/rods{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"gFd" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"gGk" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"gGt" = ( +/turf/simulated/wall/cult, +/area/template_noop) +"gGJ" = ( +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"gHi" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/ScienceShip) +"gHl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/obj/machinery/door/window/southleft{ + dir = 8; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "hrshutt" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"gHq" = ( +/obj/structure/closet/cabinet, +/obj/random/maintenance/medical, +/obj/random/carp_plushie, +/obj/random/cigarettes, +/obj/random/drinkbottle, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"gHu" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/item/weapon/book/tome/imbued, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"gHE" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 9 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/packageWrap, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"gHV" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/glasses/square{ + pixel_y = -2 + }, +/obj/item/weapon/storage/box/glass_extras/sticks{ + pixel_y = 4 + }, +/obj/item/weapon/storage/box/glass_extras/straws{ + pixel_y = 7 + }, +/obj/item/weapon/packageWrap, +/obj/structure/curtain/open/bed, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"gIc" = ( +/obj/item/stack/rods, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"gIp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"gIG" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"gIN" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gIP" = ( +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"gJb" = ( +/obj/structure/barricade, +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"gJt" = ( +/obj/structure/window/reinforced, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"gJv" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/organ/internal/lungs, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"gJz" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"gJO" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"gJV" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 8 + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"gKa" = ( +/obj/structure/cult/talisman, +/obj/item/weapon/melee/cultblade, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"gKm" = ( +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "Teshnomancer_innerdoor"; + name = "Inner Door"; + pixel_x = -26; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"gKs" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"gKR" = ( +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"gKT" = ( +/obj/machinery/camera{ + c_tag = "Breakroom South"; + dir = 1; + network = list("Research") + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"gLq" = ( +/obj/fire, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"gMI" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"gMS" = ( +/obj/structure/bed/chair, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"gOf" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/ambrosiadeusseed, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"gOA" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"gOT" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/template_noop) +"gPj" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo"; + pixel_x = -5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"gPx" = ( +/obj/item/weapon/weldingtool/largetank, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"gPA" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"gQf" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/template_noop) +"gRb" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"gSa" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/machinery/light{ + layer = 3 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"gSr" = ( +/obj/machinery/librarycomp, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/template_noop) +"gSJ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/structure/curtain/open/privacy, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"gTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"gUc" = ( +/obj/machinery/sleeper/survival_pod, +/obj/machinery/cryopod{ + dir = 4; + pixel_x = 5; + pixel_y = -3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"gUq" = ( +/obj/structure/sign/warning{ + name = "ACTIVE FACILITY"; + pixel_y = 29 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"gUN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"gVr" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"gVG" = ( +/obj/structure/table/reinforced, +/obj/structure/railing/grey{ + dir = 1; + health = 8000000000; + maxhealth = 8000000000; + name = "durable grey railing" + }, +/obj/item/device/defib_kit/jumper_kit/loaded, +/obj/item/device/defib_kit/jumper_kit/loaded, +/obj/item/device/robotanalyzer, +/obj/item/device/robotanalyzer, +/obj/machinery/cell_charger, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"gWa" = ( +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"gWI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/papershredder, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"gWP" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"gWS" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"gWY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"gYP" = ( +/obj/item/weapon/gun/projectile/colt, +/obj/item/weapon/gun/projectile/shotgun/pump, +/obj/item/ammo_magazine/m45, +/obj/item/ammo_magazine/m45, +/obj/structure/closet/secure_closet/guncabinet{ + req_one_access = null + }, +/obj/item/ammo_magazine/ammo_box/b12g/beanbag, +/obj/item/ammo_magazine/ammo_box/b12g/beanbag, +/obj/item/ammo_magazine/ammo_box/b12g/flechette, +/obj/item/ammo_magazine/ammo_box/b12g/flechette, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"gZt" = ( +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"hab" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"hah" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"haB" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"haD" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"haL" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"haW" = ( +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"hbp" = ( +/obj/item/frame/apc, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"hbw" = ( +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"hbT" = ( +/obj/structure/table/standard, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hca" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/gaycarpet, +/area/template_noop) +"hcm" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"hco" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/wizard/marisa/fake, +/obj/item/clothing/head/wizard/fake/realistic, +/obj/item/clothing/accessory/poncho/roles/cloak/mining, +/obj/item/clothing/accessory/poncho/roles/cloak/research, +/obj/item/clothing/gloves/combat/knight_costume, +/obj/item/clothing/gloves/combat/knight_costume/brown, +/obj/item/clothing/shoes/knight_costume, +/obj/item/clothing/shoes/knight_costume/black, +/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, +/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, +/obj/item/clothing/suit/storage/hooded/knight_costume/robin, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hcE" = ( +/obj/item/weapon/photo, +/obj/item/weapon/photo{ + pixel_x = 4 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"hcO" = ( +/obj/machinery/appliance/cooker/grill, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"hdg" = ( +/obj/structure/bed/chair/oldsofa/right, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"hdr" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/stock_parts/scanning_module/adv{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/stock_parts/scanning_module/adv{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/stock_parts/micro_laser/high, +/obj/item/weapon/stock_parts/micro_laser/high, +/obj/item/weapon/stock_parts/matter_bin/adv, +/obj/item/weapon/stock_parts/matter_bin/adv, +/obj/item/weapon/stock_parts/manipulator/hyper, +/obj/item/weapon/stock_parts/manipulator/hyper, +/obj/item/weapon/stock_parts/capacitor/adv, +/obj/item/weapon/stock_parts/capacitor/adv, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"hdt" = ( +/obj/machinery/atmospherics/unary/heater/sauna{ + dir = 8; + icon_state = "heater_1"; + use_power = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"hdu" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi, +/obj/item/weapon/surgical/bonesetter, +/obj/item/weapon/bone/ribs, +/obj/item/weapon/bone/skull{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"hdB" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/appliance/cooker/grill, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"hdU" = ( +/obj/structure/sink/kitchen{ + dir = 1; + pixel_y = -11 + }, +/obj/item/weapon/farmbot_arm_assembly, +/obj/item/weapon/material/minihoe{ + layer = 3.01 + }, +/obj/item/weapon/reagent_containers/glass/bucket{ + layer = 3.01 + }, +/obj/item/device/analyzer/plant_analyzer{ + layer = 3.01 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"hec" = ( +/obj/machinery/botany/extractor, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"hef" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/largecrate/animal/corgi, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"heh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/cult, +/area/template_noop) +"heq" = ( +/obj/fire, +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"heE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hfc" = ( +/obj/structure/window/reinforced/tinted, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28; + pixel_y = 5 + }, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"hfj" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/obj/machinery/iv_drip, +/obj/machinery/iv_drip, +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"hgr" = ( +/obj/structure/salvageable/console_broken_os, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"hgA" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hhh" = ( +/obj/machinery/door/window/westleft{ + name = "Storefront"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hhl" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/floor/carpet, +/area/template_noop) +"hhw" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"hhE" = ( +/obj/structure/toilet, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"hhG" = ( +/obj/machinery/vending/nifsoft_shop{ + categories = 3; + emagged = 1; + name = "Hacked NIFSoft Shop" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"hin" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Dinner) +"hip" = ( +/obj/structure/simple_door/iron, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"hiw" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"hiN" = ( +/obj/structure/hull_corner/long_horiz{ + dir = 5 + }, +/turf/template_noop, +/area/template_noop) +"hjr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"hjs" = ( +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -28 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"hjN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"hjW" = ( +/obj/structure/closet/walllocker_double/survival/south, +/turf/simulated/floor/wood, +/area/template_noop) +"hkb" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/box/bodybags, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"hlc" = ( +/obj/structure/table/standard, +/obj/item/weapon/towel/random{ + pixel_y = -5 + }, +/obj/item/weapon/towel/random, +/obj/random/soap{ + pixel_y = 5 + }, +/obj/random/soap{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"hln" = ( +/obj/item/device/healthanalyzer, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"hlM" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"hmh" = ( +/turf/simulated/wall/fancy_shuttle, +/area/template_noop) +"hml" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"hmt" = ( +/obj/structure/bed/chair, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"hmK" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/piratedouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"hmO" = ( +/obj/item/weapon/flame/candle/everburn{ + pixel_y = 0 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/wall/wood, +/area/template_noop) +"hnf" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hnl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"hnx" = ( +/obj/structure/cult/pylon, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hnO" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"hoi" = ( +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/effect/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hok" = ( +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"hol" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"hor" = ( +/obj/machinery/power/smes/buildable, +/turf/simulated/floor/plating, +/area/template_noop) +"hoH" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"hoK" = ( +/obj/machinery/button{ + name = "Cargo Hatch" + }, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"hpJ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"hqs" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"hqE" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"hrp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"hrX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/template_noop) +"hsc" = ( +/obj/structure/sign/nosmoking_2, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"hsw" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/rust, +/obj/item/weapon/storage/bag/chemistry, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"hsG" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"htj" = ( +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"huu" = ( +/obj/machinery/door/airlock/silver{ + name = "Sleeping" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"huy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"huz" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"huE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"huQ" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"huR" = ( +/turf/simulated/wall/cult, +/area/survivalpod/superpose/CultShip) +"huV" = ( +/obj/machinery/door/airlock/command{ + icon_state = "door_locked"; + locked = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"huZ" = ( +/obj/structure/closet/alien, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"hvj" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/MethLab) +"hvv" = ( +/obj/machinery/sleep_console, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hwy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"hxl" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hxt" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"hxx" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-22" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"hxz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"hyu" = ( +/obj/structure/table/standard, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"hyA" = ( +/obj/fire, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"hyB" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"hyD" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"hzm" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hzI" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower/medical, +/obj/random/soap, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"hzJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"hzK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hzP" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"hAg" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"hAk" = ( +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = -9 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"hAu" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"hAz" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"hAF" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"hBi" = ( +/mob/living/simple_mob/vore/demonAI/wendigo{ + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"hBX" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hCj" = ( +/obj/effect/map_effect/interval/sound_emitter/punching, +/obj/effect/map_effect/interval/effect_emitter/smoke/fire, +/turf/simulated/floor/lava, +/area/template_noop) +"hCk" = ( +/obj/structure/table/fancyblack, +/obj/machinery/photocopier/faxmachine{ + department = "Grand_Library"; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hCs" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/ambrosiainfernusseed, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"hCD" = ( +/obj/fire, +/obj/item/trash/material/circuit, +/turf/simulated/floor/airless, +/area/survivalpod/superpose/CrashedInfestedShip) +"hCP" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/structure/closet/walllocker_double/hydrant/east, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hDo" = ( +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = null + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/belt/utility, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"hDw" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/computer/secure_data{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"hEU" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"hEY" = ( +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"hFf" = ( +/obj/item/tape/medical{ + icon_state = "tape_h_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"hFh" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"hFo" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"hFu" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"hFC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"hFH" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/eastright{ + name = "FH Surgery Windoor"; + req_access = list(300) + }, +/obj/structure/curtain/medical, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"hFV" = ( +/obj/structure/closet/crate/secure/engineering, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hGx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hGz" = ( +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"hGL" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/ScienceShip) +"hGQ" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"hHz" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"hIm" = ( +/obj/random/maintenance/engineering, +/obj/fire, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hIo" = ( +/obj/machinery/door/airlock/maintenance/command{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"hIw" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"hIJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hIZ" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"hJu" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hJH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/fire, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"hKe" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"hLg" = ( +/obj/machinery/vending/fitness{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hLj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"hMg" = ( +/obj/structure/table/survival_pod, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"hMm" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/head/welding/knight, +/obj/item/clothing/glasses/welding, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/item/weapon/inducer, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/weapon/extinguisher/atmo, +/obj/item/weapon/extinguisher/atmo, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/weapon/storage/backpack/dufflebag/eng, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hMS" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"hOR" = ( +/obj/structure/hull_corner, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"hPi" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hPn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"hPx" = ( +/obj/item/device/mapping_unit, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"hPD" = ( +/obj/structure/bed/chair/comfy/black, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"hPF" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"hPJ" = ( +/turf/simulated/floor/carpet/tealcarpet, +/area/template_noop) +"hPV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"hPW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"hQb" = ( +/obj/item/weapon/pen/fountain, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"hQI" = ( +/obj/structure/closet/secure_closet/engineering_welding{ + req_access = null + }, +/obj/item/weapon/storage/belt/utility, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"hRb" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/floortube/flicker{ + pixel_y = -3 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"hRu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"hRP" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"hSs" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"hSv" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/seeds/wheatseed, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"hSD" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hSF" = ( +/obj/item/weapon/material/knife/machete, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"hSK" = ( +/obj/structure/table/steel_reinforced, +/obj/item/stack/material/mhydrogen, +/obj/item/stack/material/diamond, +/obj/item/stack/material/sandstone, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hSL" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"hTh" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 8; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"hTE" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"hUE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"hUK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"hUP" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"hVV" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"hWp" = ( +/obj/structure/table/darkglass, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"hWr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"hWD" = ( +/obj/machinery/power/supermatter/shard, +/turf/simulated/floor/greengrid/nitrogen, +/area/template_noop) +"hWE" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"hXY" = ( +/obj/random/maintenance/cargo, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"hYI" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hYJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"hZa" = ( +/obj/machinery/button/remote/blast_door{ + id = "tradestarshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hZh" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -13; + pixel_y = 12 + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"iac" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"iak" = ( +/obj/machinery/door/window/westright{ + name = "Storefront"; + req_access = list(160) + }, +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"iax" = ( +/obj/machinery/porta_turret/crescent, +/turf/simulated/floor/plating, +/area/template_noop) +"iaN" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/acid{ + pixel_y = -30 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/device/nifrepairer, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/machinery/cell_charger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"ibi" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/telecomms/relay/preset/ruskie, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"ibw" = ( +/obj/structure/bed/chair, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ibW" = ( +/obj/machinery/disposal, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"icn" = ( +/obj/structure/table/standard, +/obj/item/weapon/module/power_control, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"icy" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"icK" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"idp" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"idw" = ( +/obj/structure/salvageable/console_broken_os{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"idJ" = ( +/obj/structure/tubes, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"iey" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/storage/hooded/wintercoat, +/obj/item/clothing/shoes/boots/winter, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"ieK" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"ifk" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "SP-Cell flash"; + name = "Floor mounted flash" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ifG" = ( +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ifK" = ( +/obj/structure/fitness/punchingbag, +/obj/machinery/light, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"ifS" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/cedouble, +/turf/simulated/floor/wood, +/area/template_noop) +"iga" = ( +/obj/structure/prop/fake_ai{ + name = "P0ps1ck13" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"igl" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/characters, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/template_noop) +"igs" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "SP-kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"igz" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"igB" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"igX" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"igY" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"ihi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"ihs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"ihw" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"ihD" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/toilet/prison{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"ihU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"iip" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/item/seeds/ambrosiainfernusseed, +/obj/item/seeds/ambrosiainfernusseed, +/obj/item/seeds/ambrosiainfernusseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiadeusseed, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"iiA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"iiE" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"iiL" = ( +/obj/structure/bed/padded, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"iiS" = ( +/obj/structure/constructshell/cult, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"ijK" = ( +/obj/machinery/appliance/cooker/oven, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"ikJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"ila" = ( +/obj/machinery/door/airlock/scp, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MethLab) +"ill" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"ilq" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"ilV" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"imo" = ( +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"imI" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"imR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"inb" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ino" = ( +/obj/structure/sign/periodic, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/LoneHome) +"int" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"iob" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"iol" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"ioy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"ioA" = ( +/obj/structure/fans, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"ioY" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 3; + pixel_y = -28 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 3; + pixel_y = -38 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ipl" = ( +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"ipI" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"iqu" = ( +/obj/structure/alien/wall, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"iqS" = ( +/obj/structure/cliff/automatic, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"iru" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"irG" = ( +/obj/screen/alert/highpressure, +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"irM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"isd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -30 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"isO" = ( +/obj/structure/fence/corner{ + dir = 10 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"itw" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"ity" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"itA" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"itF" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"iuj" = ( +/obj/machinery/button/windowtint{ + id = "SP-Hydro"; + pixel_x = -28; + pixel_y = 6 + }, +/obj/machinery/light_switch{ + name = "light switch "; + pixel_x = -27; + pixel_y = -5 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"iuA" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/chemical_analyzer, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"iuC" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"ivK" = ( +/obj/fire, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"ivM" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"iwk" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"iwV" = ( +/obj/structure/table/standard, +/obj/random/toolbox, +/obj/item/weapon/cell/super, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"iwX" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ixO" = ( +/obj/machinery/vending/boozeomat{ + req_access = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"iyc" = ( +/obj/structure/fence/cut/medium, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"iyj" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/cult, +/area/template_noop) +"iyP" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/table/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"izM" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"izV" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"izZ" = ( +/obj/effect/floor_decal/steeldecal/monofloor{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"iAQ" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"iBc" = ( +/obj/item/stack/material/marble{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iBk" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"iBE" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/shoes/dress{ + pixel_y = -9 + }, +/obj/item/clothing/mask/demon, +/obj/structure/curtain/black, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"iCs" = ( +/obj/item/extraction_pack, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iCM" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"iDe" = ( +/obj/item/weapon/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"iDp" = ( +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 5 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 5 + }, +/obj/item/weapon/storage/firstaid/o2{ + layer = 2.8; + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/fire{ + layer = 2.9; + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = -2 + }, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/structure/closet/medical_wall{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"iDq" = ( +/obj/machinery/button/crematorium{ + id = "mercpodburn"; + pixel_x = -10; + pixel_y = -20; + req_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"iDv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"iDY" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"iDZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 25; + pixel_y = -1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"iEQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"iEU" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"iGV" = ( +/obj/fiftyspawner/blucarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iIe" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"iIu" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"iIx" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"iIC" = ( +/obj/machinery/mecha_part_fabricator{ + req_access = list(300) + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"iJp" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"iJA" = ( +/obj/structure/bed/chair/bay/chair/padded/green, +/turf/simulated/floor/wood, +/area/template_noop) +"iJC" = ( +/obj/fiftyspawner/oracarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iJH" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/device/mass_spectrometer/adv, +/obj/item/device/mass_spectrometer/adv, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"iJI" = ( +/obj/structure/table/wooden_reinforced, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Teshnomancer_Private_blastdoors"; + name = "Privacy"; + pixel_x = 26; + req_one_access = list(300) + }, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"iJS" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"iKh" = ( +/obj/structure/ledge/ledge_stairs, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"iKp" = ( +/obj/machinery/vending/snack{ + contraband = null; + products = list(/obj/item/weapon/reagent_containers/food/snacks/candy=0,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen=0,/obj/item/weapon/reagent_containers/food/snacks/chips=0,/obj/item/weapon/reagent_containers/food/snacks/sosjerky=0,/obj/item/weapon/reagent_containers/food/snacks/no_raisin=0,/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie=0,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers=0,/obj/item/weapon/reagent_containers/food/snacks/tastybread=0,/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks=0) + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"iKz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/filingcabinet/medical, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"iKY" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/brain/grey, +/obj/item/weapon/material/knife/plastic, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"iLe" = ( +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/ScienceShip) +"iLK" = ( +/obj/machinery/scale, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"iMj" = ( +/turf/simulated/shuttle/floor/white, +/area/template_noop) +"iMr" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"iML" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"iNo" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + icon_state = "map_vent_out"; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"iNu" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"iNO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"iOn" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"iOt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"iOP" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"iPm" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/iandouble, +/turf/simulated/floor/wood, +/area/template_noop) +"iPv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/largecrate/animal/cat, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"iPz" = ( +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"iPU" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"iPV" = ( +/obj/structure/cliff/automatic{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"iQi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"iQk" = ( +/obj/structure/simple_door/cult, +/turf/template_noop, +/area/template_noop) +"iQm" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"iQG" = ( +/obj/random/trash, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"iQJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"iQY" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"iRK" = ( +/obj/structure/railing/grey, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"iRQ" = ( +/obj/structure/cliff/automatic/corner{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"iRV" = ( +/obj/structure/sink/kitchen, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"iRW" = ( +/obj/structure/table/standard, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"iSB" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/northleft{ + name = "FH Surgery Windoor"; + req_access = list(300) + }, +/obj/structure/curtain/medical, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"iSD" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"iSR" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/tool{ + pixel_x = -1 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"iTi" = ( +/obj/item/weapon/tape_roll, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iUt" = ( +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"iVt" = ( +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"iVU" = ( +/obj/vehicle/train/engine, +/turf/simulated/floor/plating, +/area/template_noop) +"iVZ" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"iWp" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"iWB" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"iXg" = ( +/obj/item/weapon/towel/random, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"iXo" = ( +/obj/machinery/vending/loadout/gadget, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"iXp" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"iYk" = ( +/obj/item/weapon/tool/wrench{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/clothing/accessory/collar/bell{ + desc = "A bell collar, on it reads. My beloved cat Mitzy" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"iYw" = ( +/obj/structure/simple_door/sandstone{ + color = "#D35400" + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"iYD" = ( +/obj/structure/closet/crate/hydroponics, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"iZf" = ( +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"iZg" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/reagentgrinder, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"iZh" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"iZk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"iZK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"jaa" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"jae" = ( +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/weapon/storage/firstaid, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/roller, +/obj/item/device/defib_kit/loaded, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"jap" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/weapon/implanter/sizecontrol, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/phoron, +/obj/item/weapon/ore/phoron, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/gold, +/obj/item/weapon/ore/diamond, +/obj/item/weapon/ore/marble, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/rutile, +/obj/item/toy/bosunwhistle/fluff/strix, +/obj/item/toy/character/wizard, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, +/obj/item/weapon/fluff/squeezetoy, +/obj/item/weapon/fluff/zekewatch, +/obj/item/weapon/fluff/fidgetspinner/red, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"jau" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"jax" = ( +/obj/structure/sign/warning/lethal_turrets, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"jbR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/random/maintenance/medical, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"jbZ" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = list(47) + }, +/obj/item/weapon/gun/energy/floragun, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"jcd" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jdj" = ( +/obj/structure/salvageable/autolathe, +/obj/effect/floor_decal/rust/color_rustedfull, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"jdk" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"jdx" = ( +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"jdM" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_nineteen, +/turf/simulated/floor/wood, +/area/template_noop) +"jea" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"jef" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jfi" = ( +/obj/machinery/light, +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jfk" = ( +/obj/machinery/vending/coffee{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"jfv" = ( +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"jfw" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/random/junk, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"jgz" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"jhd" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/folder/white, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"jiy" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/closet/walllocker_double/survival/west, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jiR" = ( +/obj/item/seeds/random, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"jiS" = ( +/obj/machinery/vending/cigarette{ + name = "hacked cigarette machine"; + prices = list(); + products = list(/obj/item/weapon/storage/fancy/cigarettes=10,/obj/item/weapon/storage/box/matches=10,/obj/item/weapon/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jiZ" = ( +/obj/item/device/gps/computer{ + pixel_y = 0 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jjh" = ( +/obj/machinery/door/airlock/silver{ + name = "Restroom" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"jjq" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"jjs" = ( +/obj/structure/shuttle/engine/router, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/ScienceShip) +"jjA" = ( +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"jjP" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"jkj" = ( +/obj/structure/table/wooden_reinforced, +/obj/random/medical, +/obj/random/medical, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"jkv" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"jkZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/obj/structure/largecrate/animal/cat, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jli" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"jlm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"jlq" = ( +/obj/structure/hull_corner/long_horiz{ + dir = 6 + }, +/turf/template_noop, +/area/template_noop) +"jlR" = ( +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"jmw" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"jmZ" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain/black, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jnc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"jne" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/locked/phasegun/rifle{ + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/locked/phasegun/rifle{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jnu" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"jnw" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/bee_smoker, +/obj/item/bee_smoker, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/device/analyzer/plant_analyzer, +/obj/item/device/analyzer/plant_analyzer, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/head/greenbandana, +/obj/item/clothing/head/greenbandana, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/tool/wirecutters/clippers/trimmers, +/obj/item/weapon/tool/wirecutters/clippers/trimmers, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jnQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"jnT" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"joj" = ( +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jor" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/plating, +/area/template_noop) +"joy" = ( +/obj/structure/closet/walllocker_double/survival/north{ + dir = 1; + name = "Emergency Food Wall Cabinet"; + pixel_y = -32; + starts_with = list(/obj/item/weapon/storage/mre/menu11=20,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=20) + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"jpm" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/effect/floor_decal/spline/fancy{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"jpu" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/mirror{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"jpT" = ( +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/obj/machinery/bodyscanner{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jqm" = ( +/obj/structure/closet/crate, +/turf/template_noop, +/area/template_noop) +"jqx" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/mime, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jqZ" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"jrD" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"jrQ" = ( +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/ScienceShip) +"jsc" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"jsw" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jtq" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/skills{ + dir = 4 + }, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jtF" = ( +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"jtI" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jue" = ( +/obj/machinery/door/airlock/maintenance/sec{ + name = "Security Door"; + req_one_access = null + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"juK" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jvj" = ( +/obj/structure/table/woodentable, +/obj/random/cigarettes, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"jvl" = ( +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/item/weapon/storage/backpack/cultpack, +/obj/item/weapon/storage/backpack/cultpack, +/obj/structure/closet/cabinet, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"jvp" = ( +/obj/effect/gateway, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"jvP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"jvW" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"jww" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"jxl" = ( +/obj/item/weapon/storage/bag/trash, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"jyt" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"jyy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"jzc" = ( +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jzf" = ( +/obj/structure/salvageable/computer, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jzh" = ( +/obj/machinery/vending/medical{ + pixel_y = -32; + req_access = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jzI" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"jzN" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + icon_state = "map_vent_out"; + use_power = 1 + }, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"jAI" = ( +/obj/structure/cult/talisman, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"jAZ" = ( +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"jBu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"jBA" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/structure/backup_implanter_ch{ + pixel_y = 4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/obj/item/device/toner{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"jBK" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jCp" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/survivalpod/superpose/Dinner) +"jCG" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"jCU" = ( +/obj/structure/bookcase/bookcart, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jDG" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jEm" = ( +/obj/random/trash, +/obj/random/trash, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"jEw" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jES" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"jFf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"jFk" = ( +/turf/simulated/floor/airless, +/area/survivalpod/superpose/CrashedInfestedShip) +"jFA" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/DemonPool) +"jFI" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"jFJ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"jFM" = ( +/obj/fire, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"jFN" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = -21 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"jFQ" = ( +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/space/void/atmos, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/helmet/space/void/atmos, +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/westright{ + name = "Atmospherics Suits"; + req_access = list(24) + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/sign/warning/nosmoking_2{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jGk" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"jGS" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"jHn" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"jHI" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"jHQ" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"jHU" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"jHZ" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/rd, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jJt" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"jJG" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"jJI" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"jJR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jKf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"jKu" = ( +/obj/structure/cliff/automatic{ + dir = 5 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"jKW" = ( +/obj/machinery/camera{ + c_tag = "Lobby North"; + network = list("Research") + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jLN" = ( +/obj/structure/ship_munition/disperser_charge/explosive, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"jLT" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"jMj" = ( +/obj/machinery/autolathe, +/obj/item/weapon/rcd/loaded{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/weapon/rcd_ammo, +/obj/item/weapon/rcd_ammo, +/turf/simulated/floor/plating, +/area/template_noop) +"jMn" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"jMp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"jME" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"jMP" = ( +/obj/machinery/chem_master, +/obj/effect/floor_decal/rust/color_rustedfull, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"jMW" = ( +/obj/machinery/appliance/cooker/fryer, +/obj/structure/window/reinforced/tinted, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"jNk" = ( +/obj/effect/wingrille_spawn/reinforced, +/obj/structure/barricade, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"jNU" = ( +/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/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jOt" = ( +/obj/structure/closet/jcloset, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/shovel, +/obj/fiftyspawner/steel, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/pickaxe/silver, +/obj/item/weapon/material/knife/machete/hatchet, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jPu" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_y = 5 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jPN" = ( +/obj/structure/closet/secure_closet/bar{ + req_access = newlist() + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jPO" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"jQk" = ( +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"jRs" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"jRP" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jRX" = ( +/obj/item/weapon/stool, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"jSd" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"jSe" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jSG" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"jTe" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"jTC" = ( +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jTF" = ( +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"jTN" = ( +/obj/effect/floor_decal/chapel{ + dir = 1; + pixel_y = -16 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"jTS" = ( +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"jUk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"jUq" = ( +/turf/simulated/floor/water/deep/pool, +/area/template_noop) +"jUA" = ( +/obj/item/weapon/shovel, +/obj/item/weapon/tool/wrench, +/obj/item/weapon/pickaxe, +/obj/item/weapon/tool/crowbar, +/obj/item/stack/flag/yellow{ + pixel_x = 4 + }, +/obj/item/stack/flag/red, +/obj/item/stack/flag/green{ + pixel_x = -4 + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/item/device/gps/mining{ + pixel_x = -5 + }, +/obj/item/device/gps/mining{ + pixel_x = 5 + }, +/obj/item/weapon/storage/belt/utility/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jUV" = ( +/obj/machinery/space_heater, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"jVg" = ( +/obj/structure/bed/nest, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"jVq" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"jVP" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"jWm" = ( +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jWG" = ( +/obj/structure/bed/chair/sofa/right/black, +/turf/simulated/floor/wood, +/area/template_noop) +"jXb" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/closet/secure_closet/chemical{ + name = "FH chemical closet"; + req_access = null + }, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/tool/screwdriver, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"jXc" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"jXi" = ( +/obj/item/organ/internal/liver, +/obj/random/trash, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"jXj" = ( +/obj/item/device/flashlight/lamp{ + pixel_x = -8; + pixel_y = 13 + }, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = 5; + pixel_y = 6 + }, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"jXz" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"jXE" = ( +/obj/structure/simple_door/wood, +/obj/structure/sign/graffiti/pisoff, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"jXU" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"jYe" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/largecrate/animal/cow, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jYo" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"jYs" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"jYG" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/survival_pod, +/obj/item/weapon/cat_box, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jYR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"jZE" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/clipboard, +/obj/item/toy/figure/bartender, +/obj/item/weapon/storage/fancy/cigar, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"jZQ" = ( +/obj/machinery/turretid/lethal{ + pixel_y = 28 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"kad" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/weapon/ore/diamond, +/obj/item/weapon/ore/gold, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/clothing/head/sombrero, +/obj/item/clothing/head/sombrero, +/obj/item/clothing/suit/poncho, +/obj/item/clothing/accessory/poncho/thermal/red, +/obj/item/clothing/accessory/poncho/thermal/security, +/obj/item/clothing/accessory/poncho/thermal/green, +/obj/item/clothing/accessory/poncho/red, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/toy/bosunwhistle/fluff/strix, +/obj/item/weapon/blobcore_chunk, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"kag" = ( +/turf/template_noop, +/area/survivalpod/superpose/HellCave) +"kam" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/ce, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kaq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/power/thermoregulator/southerncross{ + pixel_y = 28 + }, +/obj/structure/cable, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"kaP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"kaT" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"kaZ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"kbH" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille/rustic, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"kbV" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"kco" = ( +/obj/structure/closet/cabinet, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/toolbox, +/obj/random/toolbox, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"kcy" = ( +/obj/item/device/flashlight/color/orange, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"kcX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"kdl" = ( +/obj/structure/flora/bboulder2, +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"kdw" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/wood, +/area/template_noop) +"kdA" = ( +/obj/effect/map_effect/interval/effect_emitter/smoke/fire, +/turf/simulated/floor/lava, +/area/template_noop) +"kdY" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"keG" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = -32 + }, +/turf/template_noop, +/area/template_noop) +"keY" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/walllocker_double/survival/north, +/turf/simulated/floor/carpet, +/area/template_noop) +"kfj" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"kfv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"kfH" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/monitor{ + dir = 8; + locked = 0; + pixel_x = 23; + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"kgu" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"kgy" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/gear_dispenser/suit/ert{ + req_one_access = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"kgQ" = ( +/obj/item/device/flashlight/color/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"khi" = ( +/obj/item/clothing/suit/straight_jacket, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"kho" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"khr" = ( +/obj/structure/closet, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"khM" = ( +/obj/machinery/mecha_part_fabricator/pros{ + req_access = null + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kiq" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"kiD" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper_bin, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"kiX" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"kjc" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"kjH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kjR" = ( +/obj/item/ammo_magazine/s357{ + pixel_y = -9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kke" = ( +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"kkz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"kkC" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"kkK" = ( +/obj/structure/grille/rustic, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/window/basic, +/turf/simulated/floor/plating, +/area/template_noop) +"kkP" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"kkQ" = ( +/obj/machinery/shuttle_sensor, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/ScienceShip) +"kla" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/structure/prop/poicanister{ + icon_state = "orangeps-1" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"klq" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"klt" = ( +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = 21 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"klv" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/southleft{ + req_access = null + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"klY" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"kmb" = ( +/obj/structure/fence/corner{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"kmg" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/mecha/working/ripley/mining/old, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kmp" = ( +/obj/machinery/mech_recharger, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/obj/mecha/medical/odysseus/old, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"kmz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"kmR" = ( +/obj/item/device/fbp_backup_cell, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"knc" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"knd" = ( +/obj/machinery/meter, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"knF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"knL" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"knV" = ( +/obj/machinery/vending/cigarette{ + categories = 3; + name = "hacked cigarette machine"; + prices = list() + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"koo" = ( +/obj/machinery/vending/cola{ + dir = 8; + pixel_x = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"kos" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading, +/obj/structure/closet/secure_closet/medical_wall{ + name = "FH O- Blood Locker"; + pixel_x = -32; + req_access = list(300) + }, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"koN" = ( +/obj/structure/table/bench/glass, +/obj/structure/closet/walllocker_double/survival/west, +/obj/item/clothing/under/swimsuit/stripper/stripper_pink, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/turf/simulated/floor/wood, +/area/template_noop) +"koU" = ( +/obj/machinery/floodlight, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"kpk" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_x = -8; + pixel_y = 13 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = 5; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"kpI" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor, +/area/survivalpod/superpose/WoodenCamp) +"kqp" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"kqw" = ( +/obj/structure/bed/chair/sofa/corner/brown, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"kqH" = ( +/obj/structure/closet{ + name = "custodial" + }, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/mop, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kqI" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"krb" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/machinery/light/poi, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"krd" = ( +/obj/structure/mirror{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"kri" = ( +/obj/structure/bed/chair/sofa/right/brown, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"krk" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"krN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"krS" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable/green, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"krT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/closet, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"ksh" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"ksF" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"ksO" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = 21 + }, +/obj/machinery/reagentgrinder, +/obj/fiftyspawner/phoron, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"ksX" = ( +/obj/machinery/vending/snack{ + categories = 3; + dir = 8; + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"ktk" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"ktD" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"ktO" = ( +/obj/structure/table/rack/shelf, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"ktQ" = ( +/turf/template_noop, +/area/template_noop) +"ktU" = ( +/obj/random/junk, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"kuy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"kuz" = ( +/obj/structure/coatrack, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"kvg" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/piratedouble, +/turf/simulated/floor/wood, +/area/template_noop) +"kvl" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kvG" = ( +/obj/machinery/shower{ + dir = 8; + pixel_x = -5 + }, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain/black, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"kvK" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"kvN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"kwD" = ( +/obj/structure/table/wooden_reinforced, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_y = 13 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"kxa" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kxj" = ( +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"kyi" = ( +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"kyr" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kyw" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = null + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"kyE" = ( +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"kyV" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"kzq" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"kzz" = ( +/obj/structure/fans{ + pixel_y = 32 + }, +/obj/machinery/vending/loadout/clothing, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kzL" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kAz" = ( +/obj/item/tape/medical{ + dir = 1; + icon_state = "tape_dir_0" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_dir_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"kAO" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"kAV" = ( +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"kBL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"kCu" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"kDW" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/webbing, +/obj/item/clothing/accessory/storage/webbing, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/scarf/white, +/obj/item/clothing/accessory/scarf/lightblue, +/obj/item/clothing/accessory/scarf/red, +/obj/item/clothing/accessory/scarf/purple, +/obj/item/clothing/accessory/armband/science, +/obj/item/clothing/accessory/armband/med, +/obj/item/clothing/accessory/armband/engine, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/clothing/accessory/armband, +/obj/item/clothing/accessory/medal/nobel_science, +/obj/item/clothing/accessory/medal/silver, +/obj/item/clothing/accessory/medal/gold, +/obj/item/clothing/accessory/medal/bronze_heart, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kEc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"kEJ" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/computer/rdservercontrol{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kEY" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"kFn" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"kFw" = ( +/obj/structure/constructshell/cult, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"kFN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"kFY" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kGs" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kGL" = ( +/obj/machinery/door/airlock{ + name = "Unit 2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"kGT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"kIy" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/pointdefense, +/turf/simulated/floor/cult, +/area/template_noop) +"kIX" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"kJe" = ( +/obj/item/device/flashlight/lantern, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"kJA" = ( +/obj/machinery/shipsensors/weak{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"kKO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/table/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"kLo" = ( +/obj/machinery/porta_turret/alien/destroyed, +/obj/effect/catwalk_plated/white, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"kLp" = ( +/obj/structure/closet/crate/freezer, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"kND" = ( +/turf/simulated/shuttle/wall/alien/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"kOn" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"kOC" = ( +/obj/structure/ore_box, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"kOI" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kPX" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"kQl" = ( +/obj/structure/cult/pylon, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kQv" = ( +/obj/structure/cult/pylon, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"kQW" = ( +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kQY" = ( +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"kRF" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"kSa" = ( +/obj/structure/cliff/automatic/ramp{ + dir = 9 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"kSc" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/closet/crate/secure/loot, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kSj" = ( +/obj/effect/map_effect/interval/sound_emitter/punching, +/obj/effect/map_effect/interval/effect_emitter/smoke/fire, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"kSn" = ( +/obj/machinery/door/airlock/silver{ + name = "Toilet" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"kST" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"kTn" = ( +/obj/structure/constructshell/cult, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kTp" = ( +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"kUj" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"kUr" = ( +/obj/machinery/door/blast/angled_shutter{ + id = "death" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"kUE" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"kUL" = ( +/obj/structure/cryofeed{ + dir = 2 + }, +/obj/machinery/light/small/emergency, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"kVd" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"kVp" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kVL" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/machinery/recharger{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/item/weapon/reagent_containers/food/drinks/jar{ + pixel_x = 10; + pixel_y = 12 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"kVP" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"kWn" = ( +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kWB" = ( +/obj/structure/table/rack/shelf, +/obj/machinery/light{ + layer = 3 + }, +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kWI" = ( +/mob/living/simple_mob/vore/aggressive/panther, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"kWR" = ( +/obj/item/weapon/material/fishing_rod/modern/strong, +/turf/simulated/floor/outdoors/rocks, +/area/survivalpod/superpose/Farm) +"kXk" = ( +/obj/structure/undies_wardrobe{ + anchored = 1 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = -21 + }, +/turf/simulated/floor/lino, +/area/survivalpod) +"kXw" = ( +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"kXJ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kXY" = ( +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"kYa" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/lino, +/area/survivalpod) +"kYt" = ( +/obj/structure/barricade, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"kYy" = ( +/obj/machinery/power/smes/batteryrack, +/turf/simulated/floor/plating, +/area/template_noop) +"kYH" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"kYZ" = ( +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/full, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"kZh" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 4; + pixel_x = -3 + }, +/turf/template_noop, +/area/template_noop) +"kZx" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra{ + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kZC" = ( +/obj/item/weapon/book/manual/barman_recipes, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/structure/table/gamblingtable, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kZI" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/vending/wallmed1/public{ + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"kZU" = ( +/turf/simulated/floor/outdoors/rocks, +/area/survivalpod/superpose/Farm) +"lar" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"laC" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod/superpose/LoneHome) +"lbc" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/cult, +/area/template_noop) +"lbl" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/glasses/square{ + pixel_y = -2 + }, +/obj/item/weapon/storage/box/glass_extras/sticks{ + pixel_y = 4 + }, +/obj/item/weapon/storage/box/glass_extras/straws{ + pixel_y = 7 + }, +/obj/item/weapon/packageWrap, +/obj/structure/curtain/open/bed, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/storage/box/condimentbottles, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/teapot{ + pixel_y = 7 + }, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lbA" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"lbP" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door{ + id = "wolfsnake"; + name = "Wolfgirl and Lamia"; + pixel_x = 6; + pixel_y = 2 + }, +/obj/machinery/button/remote/blast_door{ + id = "lizard"; + name = "Lizardman"; + pixel_x = -6; + pixel_y = 2 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"lcu" = ( +/obj/machinery/r_n_d/protolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"lcC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue, +/area/survivalpod) +"lcD" = ( +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"lcH" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"lde" = ( +/obj/structure/sign/deathsposal{ + desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; + name = "\improper DISPOSAL: LEADS TO EXTERIOR"; + pixel_y = 32 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"ldw" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"ldx" = ( +/obj/structure/table/survival_pod, +/obj/structure/closet/walllocker_double/survival/west, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"ldS" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/tape_roll, +/obj/item/sticky_pad/random, +/obj/item/weapon/pen/blue, +/obj/item/weapon/pen/blue, +/obj/item/fulton_core, +/obj/item/fulton_core, +/obj/item/extraction_pack, +/obj/item/extraction_pack, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/item/weapon/pickaxe/hand, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/flashlight/color/orange, +/obj/item/device/threadneedle, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/device/flashlight/lantern, +/obj/random/soap, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/stack/nanopaste, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/stack/marker_beacon/ten, +/obj/item/device/starcaster_news, +/obj/item/device/mapping_unit, +/obj/item/weapon/storage/box/dosimeter, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/device/pda, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/weapon/material/knife/machete, +/obj/item/weapon/material/fishing_net, +/obj/item/weapon/storage/backpack/sport, +/obj/item/weapon/storage/backpack/sport, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/storage/belt, +/obj/item/clothing/accessory/poncho/thermal, +/turf/simulated/floor/plating, +/area/template_noop) +"lea" = ( +/obj/item/weapon/card/id/external, +/turf/template_noop, +/area/template_noop) +"les" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lfZ" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "Field Hospital General Storage" + }, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/radio/emergency, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/device/binoculars, +/obj/item/device/perfect_tele, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/device/denecrotizer/medical, +/obj/item/device/denecrotizer/medical, +/obj/machinery/light/floortube{ + dir = 1 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 9 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"lge" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lgp" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"lgq" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"lgy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/rdconsole/core{ + dir = 8; + id = 300; + req_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"lgM" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"lhe" = ( +/obj/item/weapon/storage/pill_bottle/antitox, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"lhg" = ( +/obj/effect/floor_decal/industrial/danger{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"lhs" = ( +/obj/machinery/atmospheric_field_generator/perma/underdoors, +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"lhA" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"lhY" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"liz" = ( +/obj/structure/table/standard, +/obj/random/tool, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"liO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"liR" = ( +/obj/item/device/radio, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"ljl" = ( +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"ljo" = ( +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"ljG" = ( +/obj/structure/table/reinforced, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"lkn" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"lkp" = ( +/obj/machinery/autolathe, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"lkG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bookcase, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lkR" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lkW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"llP" = ( +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"llZ" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"lma" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/template_noop, +/area/template_noop) +"lmg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/random/trash, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lmI" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"lng" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/template_noop) +"lnm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lnr" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/device/healthanalyzer, +/obj/item/device/healthanalyzer, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/storage/backpack/dufflebag/sci, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lnv" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"lnx" = ( +/obj/item/device/tape, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"lnD" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"lod" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/HydroCave) +"lop" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"los" = ( +/obj/structure/closet/crate/secure/science{ + icon_state = "scisecurecrateopen"; + locked = 0; + name = "Virus Samples - FRAGILE"; + opened = 1 + }, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"loD" = ( +/obj/item/weapon/pen/blue, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"loQ" = ( +/obj/machinery/smartfridge/drying_rack, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"lpo" = ( +/obj/effect/floor_decal/chapel{ + pixel_y = -16 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"lqf" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating, +/area/template_noop) +"lqg" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/east{ + name = "Survival Cabinet" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/WoodenCamp) +"lqk" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/floor/cult, +/area/template_noop) +"lqm" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/template_noop) +"lrg" = ( +/obj/machinery/vending/blood{ + categories = 3; + name = "hacked Blood-Onator"; + req_access = list(300) + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"lrs" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/port_gen/pacman, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"lsg" = ( +/obj/machinery/door/airlock/maintenance/medical{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"lsH" = ( +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"lsL" = ( +/obj/structure/barricade, +/obj/effect/floor_decal/steeldecal/steel_decals_central5, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"ltd" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"ltK" = ( +/obj/machinery/vending/blood, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"ltL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"ltN" = ( +/obj/structure/table/bench/marble, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ltT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"luV" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"lvv" = ( +/obj/structure/bed/chair, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"lvA" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"lvT" = ( +/obj/machinery/door/window/northright{ + name = "Server Room"; + req_access = null + }, +/obj/machinery/door/window/southleft{ + name = "Server Room"; + req_access = null + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"lwb" = ( +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"lwG" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_y = -32 + }, +/obj/machinery/biogenerator, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"lwH" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/captain, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"lxb" = ( +/obj/random/paicard, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"lxQ" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/WoodenCamp) +"lxX" = ( +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/deck/cards{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/template_noop) +"lyl" = ( +/obj/structure/table/wooden_reinforced, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"lyR" = ( +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"lze" = ( +/obj/machinery/seed_storage/garden, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"lzq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"lzA" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"lzY" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/newscaster{ + pixel_y = -29 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"lAl" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"lAt" = ( +/obj/random/maintenance/medical, +/turf/simulated/shuttle/floor/white, +/area/template_noop) +"lAF" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"lAS" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"lBe" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/stripper_pole{ + pixel_y = 9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/item/clothing/under/fluff/latexmaid{ + pixel_y = 7; + pixel_x = -8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"lBh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/random/maintenance/engineering, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"lBN" = ( +/obj/structure/ore_box, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"lCl" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"lCq" = ( +/obj/machinery/alarm/monitor{ + dir = 8; + locked = 0; + pixel_x = 23; + req_access = null + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"lCr" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"lCN" = ( +/turf/simulated/floor/greengrid/nitrogen, +/area/template_noop) +"lCO" = ( +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"lCX" = ( +/obj/structure/table/woodentable, +/obj/item/trash/candle, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lDi" = ( +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"lDn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/internals, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"lDo" = ( +/obj/machinery/atmospherics/valve, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"lDu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"lDx" = ( +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"lDV" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"lEh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"lEL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/mech_recharger, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"lFp" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"lFH" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lGp" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lGv" = ( +/obj/structure/frame/computer, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lGy" = ( +/obj/item/weapon/storage/backpack/messenger, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"lGL" = ( +/obj/structure/closet/l3closet/virology, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"lHd" = ( +/obj/structure/table/woodentable, +/obj/item/trash/tray, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lHe" = ( +/obj/item/stack/cable_coil/green, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"lHg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lHo" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"lHE" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"lIc" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"lIi" = ( +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"lIp" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"lIr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"lIQ" = ( +/obj/vehicle/train/trolley{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"lJa" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"lJj" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/purple/border, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"lJk" = ( +/obj/random/junk, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"lJD" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"lKg" = ( +/obj/machinery/vending/assist{ + contraband = null; + name = "Old Vending Machine"; + products = list(/obj/item/device/assembly/prox_sensor=5,/obj/item/device/assembly/signaler=4,/obj/item/device/assembly/infra=4,/obj/item/device/assembly/prox_sensor=4,/obj/item/weapon/handcuffs=8,/obj/item/device/flash=4,/obj/item/weapon/cartridge/signal=4,/obj/item/clothing/glasses/sunglasses=4) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lKL" = ( +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"lKV" = ( +/obj/random/soap, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"lLn" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lLq" = ( +/obj/structure/bed/double/padded, +/obj/structure/curtain/bed, +/obj/item/weapon/bedsheet/hosdouble, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"lLH" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/fire, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"lMe" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = 21 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"lMg" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"lMj" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"lMq" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lMR" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"lMY" = ( +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/glass, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"lNf" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"lNk" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lNF" = ( +/obj/machinery/vending/tool{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lNO" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"lOe" = ( +/obj/structure/cliff/automatic, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"lOp" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"lOr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/characters, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"lPt" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"lQx" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 1; + regulate_mode = 0; + unlocked = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"lQz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "estrella_pump" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"lQY" = ( +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/template_noop, +/area/template_noop) +"lRK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"lSb" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_x = 1; + pixel_y = 17 + }, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"lSN" = ( +/obj/machinery/button{ + dir = 4; + name = "Cargo Access" + }, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"lTq" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"lTG" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"lTH" = ( +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"lTO" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "glcafe" + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"lTP" = ( +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Dinner) +"lUl" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/SWF_uplink, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"lUH" = ( +/obj/machinery/shipsensors{ + dir = 8 + }, +/turf/simulated/floor/redgrid/off, +/area/template_noop) +"lUW" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"lVf" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools{ + pixel_y = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"lVq" = ( +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"lVr" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospheric_field_generator/perma/underdoors, +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"lVt" = ( +/obj/structure/closet/crate, +/obj/random/cash, +/obj/random/cigarettes, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lVL" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"lWU" = ( +/obj/fire, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"lXb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"lXs" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"lXG" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2"; + tag = "icon-pipe-j1 (WEST)" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"lXK" = ( +/obj/structure/salvageable/console_os{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/ScienceShip) +"lYA" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"lYN" = ( +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"lZv" = ( +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lZH" = ( +/obj/item/stack/material/algae{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"mak" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"maA" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"maL" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 4; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "hrshutt" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"maR" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/ammo, +/obj/random/cigarettes, +/obj/random/contraband, +/obj/random/junk, +/obj/random/maintenance/security, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"mbc" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/random/mre, +/obj/item/weapon/material/kitchen/utensil/fork{ + pixel_x = 12 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"mbh" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"mbp" = ( +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"mbP" = ( +/obj/machinery/light/small, +/obj/machinery/alarm/monitor{ + dir = 1; + locked = 0; + pixel_y = -23; + req_access = null + }, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"mco" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/redgrid/animated, +/area/template_noop) +"mdk" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/purple, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"mdn" = ( +/obj/structure/bookcase{ + name = "bookcase (Reference)" + }, +/obj/item/weapon/book/codex/lore/robutt, +/obj/item/weapon/book/bundle/custom_library/fiction/metalglen, +/obj/item/weapon/book/bundle/custom_library/fiction/silence, +/obj/item/weapon/book/bundle/custom_library/fiction/taleoftherainbowcat, +/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism, +/turf/simulated/floor/wood, +/area/template_noop) +"mdt" = ( +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"mep" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"mer" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/hand_labeler{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"mff" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mfl" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/largecrate/hoverpod, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mfN" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + locked = 0 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"mfR" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"mfZ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"mga" = ( +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"mgk" = ( +/obj/structure/hull_corner{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"mgw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 9 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/template_noop) +"mgD" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"mhe" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"mhg" = ( +/obj/machinery/vending/engivend{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mhA" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"mhY" = ( +/obj/machinery/bookbinder, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"mip" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mit" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"miz" = ( +/obj/structure/bonfire/sifwood, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"miF" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"miK" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"miN" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/turf/simulated/floor/redgrid/animated, +/area/survivalpod/superpose/CultShip) +"miS" = ( +/obj/machinery/door/airlock/glass_external, +/obj/machinery/door/firedoor, +/turf/simulated/shuttle/plating, +/area/template_noop) +"mjd" = ( +/obj/item/weapon/pickaxe/drill, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"mjk" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/clothing/shoes/dress{ + pixel_y = -9 + }, +/obj/item/clothing/mask/goblin, +/obj/structure/curtain/black, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"mjJ" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"mjX" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"mlp" = ( +/obj/machinery/vending/snack, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"mlI" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"mlT" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"mml" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/sharpeningkit, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"mmu" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"mmK" = ( +/obj/fire, +/turf/simulated/floor/airless, +/area/survivalpod/superpose/CrashedInfestedShip) +"mmX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + dir = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue, +/area/survivalpod) +"mnz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"mnC" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/lightorange/border, +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/full, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"mnQ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"mnT" = ( +/obj/structure/prop/poicanister{ + icon_state = "orangeps-1" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"mov" = ( +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"mow" = ( +/obj/machinery/vending/cigarette{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"moO" = ( +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"moS" = ( +/obj/structure/fence/corner{ + dir = 6 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"mpb" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mpq" = ( +/obj/machinery/suit_cycler/syndicate, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mpM" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"mqR" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/flame/lighter/random{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/flame/lighter/random, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"mqS" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"mrl" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"mrx" = ( +/obj/structure/salvageable/console_broken_os{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"mrI" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"mso" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/machinery/scale, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"mss" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"msN" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"msR" = ( +/obj/structure/simple_door/cult, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"mtx" = ( +/obj/machinery/r_n_d/server/core, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"mtA" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"mtI" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/pointdefense, +/turf/simulated/floor/cult, +/area/template_noop) +"muj" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"muV" = ( +/obj/fire, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"muY" = ( +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"mvC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/multi_tile/two_tile_hor{ + id = "xrlock" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"mvU" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/stool/baystool/padded{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"mwq" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mwW" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"mxr" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"mxJ" = ( +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"mxM" = ( +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"mxZ" = ( +/turf/simulated/floor/redgrid/animated, +/area/survivalpod/superpose/CultShip) +"myb" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"myq" = ( +/obj/machinery/shower, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"mzh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"mzj" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 9 + }, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"mAF" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "food storage" + }, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"mCq" = ( +/obj/structure/sink/kitchen{ + dir = 4; + pixel_x = 13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"mCt" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"mCB" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"mDE" = ( +/obj/machinery/vending/fitness, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"mDH" = ( +/obj/structure/prop/blackbox/xenofrigate, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"mDX" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"mEi" = ( +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/ScienceShip) +"mEk" = ( +/obj/structure/toilet/prison{ + name = "toilet"; + pixel_y = 10 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 4 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"mFa" = ( +/obj/structure/inflatable, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"mFk" = ( +/obj/machinery/vending/hotfood, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"mFm" = ( +/obj/structure/table/alien, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"mFy" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/simulated/floor/lino, +/area/survivalpod) +"mGD" = ( +/obj/structure/constructshell/cult, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"mGP" = ( +/obj/machinery/mining/drill/loaded, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"mHY" = ( +/obj/structure/table/fancyblack, +/turf/simulated/floor/carpet/blue2, +/area/template_noop) +"mIh" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mIi" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"mIs" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"mJe" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"mJy" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"mKO" = ( +/obj/structure/toilet/prison{ + name = "toilet"; + pixel_y = 10 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/cult, +/area/template_noop) +"mLi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"mLn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"mLJ" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 4; + req_access = null + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"mLW" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "hrshutt"; + name = "HydroResearch Shutters"; + pixel_x = -31 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"mMk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/secure_closet{ + desc = "It's a secure locker for personnel. The first card swiped gains control."; + icon_broken = "cabinetdetective_broken"; + icon_closed = "cabinetdetective"; + icon_locked = "cabinetdetective_locked"; + icon_off = "cabinetdetective_broken"; + icon_opened = "cabinetdetective_open"; + icon_state = "cabinetdetective"; + locked = 0; + name = "personal closet"; + req_access_txt = "201" + }, +/obj/item/clothing/under/pj/blue, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"mML" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"mMV" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"mMX" = ( +/obj/machinery/computer/operating{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"mNb" = ( +/obj/structure/table/bench/wooden, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/template_noop) +"mNm" = ( +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"mNs" = ( +/obj/machinery/door/airlock/glass_medical/polarized{ + hackProof = 1; + id_tag = "Teshnomancer_Private_doors"; + id_tint = "tesh_private_tint"; + maxhealth = 8000000000; + name = "Electrochromic Airlock"; + normalspeed = 0; + req_one_access = list(300); + secured_wires = 1 + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors. Seems a little excessive for a privacy shutter..."; + id = "Teshnomancer_Private_blastdoors"; + name = "Privacy blast door" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"mNw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"mNH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"mNN" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/lava, +/area/template_noop) +"mOn" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/green, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"mOo" = ( +/obj/structure/disposalpipe/junction, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"mOB" = ( +/obj/structure/hull_corner{ + dir = 1 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"mOK" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"mON" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 8 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"mOO" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"mOW" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/effect/floor_decal/spline/fancy{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"mPa" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"mPj" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"mPt" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"mPX" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + id_tag = null + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 4; + frequency = 1331; + id_tag = "trade2_control"; + pixel_x = -25; + req_access = list(150); + tag_airpump = null; + tag_chamber_sensor = null; + tag_exterior_door = null; + tag_interior_door = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mQh" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"mQj" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mQJ" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"mQR" = ( +/mob/living/simple_mob/vore/aggressive/lizardman, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"mQU" = ( +/obj/item/weapon/circuitboard/microwave, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"mRN" = ( +/obj/machinery/button/remote/airlock{ + id = "Teshnomancer_Private_doors"; + name = "Open Privacy doors"; + pixel_y = 24; + req_one_access = list(300) + }, +/obj/machinery/button/remote/airlock{ + id = "Teshnomancer_Private_doors"; + name = "Bolt Privacy doors"; + pixel_y = 38; + req_one_access = list(300); + specialfunctions = 4 + }, +/obj/machinery/button/windowtint/doortint{ + id = "tesh_private_tint"; + name = "privacy tint control"; + pixel_x = -10; + pixel_y = 32; + req_one_access = list(300) + }, +/turf/simulated/floor/wood, +/area/survivalpod) +"mSt" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/template_noop) +"mSR" = ( +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"mSZ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"mTh" = ( +/obj/effect/mist, +/obj/machinery/light, +/turf/simulated/floor/water/pool, +/area/template_noop) +"mTt" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"mTK" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"mUd" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"mUk" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"mUq" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"mUF" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"mUG" = ( +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"mUV" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"mUW" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/plating, +/area/template_noop) +"mVr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"mVN" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sauna" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sauna" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Sauna" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"mVT" = ( +/obj/machinery/vending/snack{ + dir = 4; + pixel_x = -6 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"mWP" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/deck/cards, +/obj/machinery/computer/security/telescreen/entertainment{ + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"mXK" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"mYw" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"mYG" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"mYP" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mZP" = ( +/obj/machinery/porta_turret/alien/destroyed, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"nac" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"nah" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + dir = 4; + frequency = 1380; + id_tag = "trade_shuttle"; + pixel_x = -25; + req_one_access = list(101); + tag_door = "trade_shuttle_hatch" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nav" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"naJ" = ( +/turf/simulated/floor/lava/outdoors, +/area/survivalpod/superpose/DemonPool) +"naL" = ( +/obj/structure/hull_corner{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"naM" = ( +/obj/structure/bed/chair/oldsofa/left, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"nbf" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "estrella_back_hatch"; + locked = 1; + req_one_access = null + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"nbt" = ( +/obj/machinery/mecha_part_fabricator/pros, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"nbF" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"nbR" = ( +/obj/structure/bonfire/sifwood, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/WoodenCamp) +"ndv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"ndw" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille/rustic, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"ndN" = ( +/obj/fire, +/turf/simulated/wall/cult, +/area/survivalpod/superpose/HellCave) +"neD" = ( +/obj/structure/sign/kiddieplaque{ + desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; + name = "\improper Sif Department of Disease Control notice" + }, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"nfn" = ( +/obj/structure/table/steel, +/obj/item/clothing/suit/bio_suit, +/obj/random/medical/lite, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"nfs" = ( +/obj/machinery/button/remote/blast_door{ + id = "tradeportshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nfR" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"nfX" = ( +/obj/item/weapon/storage/backpack/dufflebag/eng, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"ngn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ngw" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"ngx" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ngD" = ( +/turf/simulated/floor/cult{ + icon_state = "cult-narsie" + }, +/area/survivalpod/superpose/DemonPool) +"ngR" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"ngS" = ( +/obj/structure/sign/flag/pirate{ + pixel_y = 29 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_external, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"nhe" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"nhv" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"nhB" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"nhE" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"nhQ" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"nhW" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"niA" = ( +/obj/structure/table/gamblingtable, +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"njx" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"njF" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"nkc" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/seeds/bluetomatoseed, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"nko" = ( +/obj/machinery/pointdefense, +/turf/simulated/floor/plating, +/area/template_noop) +"nkT" = ( +/obj/fire, +/turf/simulated/floor/lava/outdoors, +/area/survivalpod/superpose/DemonPool) +"nlB" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nmo" = ( +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"nmJ" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"nmX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"nni" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"nnp" = ( +/obj/effect/decal/remains/xeno, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"nnI" = ( +/obj/item/weapon/material/knife/machete/hatchet, +/turf/template_noop, +/area/template_noop) +"nnR" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood, +/area/survivalpod) +"now" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"noD" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/crate/carp{ + desc = "All you need to start your own honey farm."; + name = "Beekeeping crate"; + starts_with = list(/obj/item/beehive_assembly=5,/obj/item/bee_smoker,/obj/item/honey_frame=25,/obj/item/bee_pack=5) + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"npj" = ( +/obj/machinery/r_n_d/server/robotics, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"nqx" = ( +/obj/structure/table/marble, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/microwave, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"nqN" = ( +/obj/machinery/mecha_part_fabricator/pros{ + req_access = list(300) + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"nqZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"nrh" = ( +/obj/machinery/button/holosign{ + id = "SP-baropen"; + name = "Open Sign"; + pixel_x = -27; + pixel_y = 5 + }, +/obj/machinery/button/remote/blast_door{ + id = "SP-kitchen"; + name = "Kitchen Shutters Control"; + pixel_x = -27; + pixel_y = -5; + req_access = list(28) + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"nrR" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"nsj" = ( +/obj/machinery/door/airlock/maintenance/cargo, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"nsn" = ( +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"nsL" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"nsP" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/turf/simulated/floor/wood, +/area/template_noop) +"nuh" = ( +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"nuq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nux" = ( +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/structure/table/marble, +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = 11 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"nvt" = ( +/obj/fire, +/turf/template_noop, +/area/template_noop) +"nvB" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"nvS" = ( +/obj/effect/floor_decal/techfloor, +/obj/random/maintenance/engineering, +/obj/random/maintenance/clean, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"nwb" = ( +/obj/item/trash/sosjerky, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"nwf" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"nwD" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"nwS" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nxf" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"nxm" = ( +/obj/vehicle/train/engine, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nxC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"nxL" = ( +/obj/fire, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"nxV" = ( +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"nxX" = ( +/obj/structure/urinal{ + dir = 4; + pixel_y = 0; + pixel_x = -31 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"nyP" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/box/matches{ + pixel_x = -4; + pixel_y = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"nza" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"nzB" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"nAh" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"nAj" = ( +/obj/item/weapon/module/card_reader, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"nAq" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"nAY" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"nBO" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MethLab) +"nBP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Security Checkpoint Maintenance"; + req_access_txt = "201"; + req_one_access_txt = "0" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nCk" = ( +/turf/template_noop, +/area/survivalpod/superpose/FieldLab) +"nCo" = ( +/obj/machinery/porta_turret/alien/destroyed, +/obj/effect/catwalk_plated/white, +/turf/simulated/floor/cult, +/area/template_noop) +"nCw" = ( +/obj/machinery/door/airlock/maintenance/common, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"nCC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance/sec, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/MethLab) +"nCN" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 7 + }, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"nDi" = ( +/obj/machinery/door/blast/angled_shutter{ + id = "lizard" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"nDv" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Dorm" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"nDz" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/adv, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"nDT" = ( +/obj/structure/table/steel, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"nEd" = ( +/obj/machinery/door/airlock/freezer, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"nEf" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"nEs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/ScienceShip) +"nEv" = ( +/obj/machinery/button/remote/blast_door{ + id = "SP-Cell"; + name = "Cell Door"; + pixel_x = 6; + pixel_y = -33; + req_one_access = list(2,4) + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = -24; + req_access = list(2,4) + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"nEE" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastright{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"nEP" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "SP-Cell2"; + name = "Cell Door"; + pixel_x = -25; + pixel_y = 8; + req_one_access = list(2,4) + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = 26; + req_access = list(2,4) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"nEQ" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/flora/pottedplant{ + icon_state = "plant-09"; + name = "Esteban"; + pixel_y = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nFj" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"nFm" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"nFT" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 7 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"nGx" = ( +/obj/effect/floor_decal/emblem/black, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"nGS" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"nHe" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nHC" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nHJ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/microwave{ + pixel_x = -4; + pixel_y = 17 + }, +/obj/structure/table/steel{ + pixel_x = -4 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_y = -3; + pixel_x = -7 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_y = -3; + pixel_x = 7 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"nHK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"nIc" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/folder/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/weapon/pen/red, +/obj/item/weapon/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"nIk" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"nIo" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/weapon/dice/d20, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/template_noop) +"nIx" = ( +/obj/structure/flora/pottedplant/large, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nJH" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/mime, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"nJR" = ( +/obj/item/weapon/stool/baystool/padded, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"nJX" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nJY" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/west{ + name = "Survival Cabinet" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/WoodenCamp) +"nKk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/floortube/flicker{ + pixel_y = -3 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"nKt" = ( +/obj/structure/hull_corner/long_horiz{ + dir = 9 + }, +/turf/template_noop, +/area/template_noop) +"nKw" = ( +/obj/item/weapon/reagent_containers/dropper, +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"nKJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nLb" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/device/sleevemate, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"nLk" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"nLQ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Dinner) +"nMu" = ( +/obj/screen/alert/highpressure, +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"nNa" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"nNj" = ( +/obj/structure/sign/warning, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"nNp" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nNs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"nNO" = ( +/obj/structure/grille/cult, +/obj/structure/bonfire/permanent, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"nNR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"nOo" = ( +/obj/structure/closet/crate/hydroponics/prespawned, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"nOM" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/red, +/turf/simulated/floor/wood, +/area/template_noop) +"nPb" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"nPH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"nRd" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"nRD" = ( +/obj/item/weapon/circuitboard/airalarm, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"nRS" = ( +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"nRY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/table/reinforced, +/obj/machinery/camera{ + c_tag = "Medical Bay"; + dir = 1; + network = list("Research") + }, +/obj/item/device/radio/emergency, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"nSp" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"nSO" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/shoes/dress{ + pixel_y = -9 + }, +/obj/item/clothing/mask/fluff/lucerna_1, +/obj/structure/curtain/black, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"nTD" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"nTX" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/machinery/sleep_console, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"nUo" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/hos, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nVb" = ( +/obj/structure/cliff/automatic/corner{ + dir = 6 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"nVf" = ( +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"nWH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nXT" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"nYn" = ( +/obj/item/weapon/melee/cultblade, +/obj/structure/table/fancyblack, +/obj/item/device/soulstone, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"nYr" = ( +/obj/structure/toilet{ + dir = 8; + pixel_x = 9 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/ScienceShip) +"nYL" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"nZb" = ( +/obj/machinery/iv_drip, +/obj/machinery/iv_drip, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 22; + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"nZe" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"nZi" = ( +/obj/item/weapon/material/minihoe, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"nZr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/random/maintenance/engineering, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"oaL" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"obA" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = list(47) + }, +/obj/item/weapon/gun/energy/floragun, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"obI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"obU" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"obV" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"obZ" = ( +/obj/machinery/power/thermoregulator/southerncross{ + dir = 4; + pixel_x = -28 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/lino, +/area/survivalpod) +"ocb" = ( +/obj/item/weapon/tool/crowbar/red, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ocd" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"ocj" = ( +/obj/vehicle/train/trolley, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ocl" = ( +/obj/structure/table/alien/blue, +/obj/item/device/radio/intercom/entertainment{ + pixel_y = 5 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"ocu" = ( +/turf/simulated/wall, +/area/survivalpod/superpose/Dinner) +"ocz" = ( +/obj/machinery/autolathe{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + emagged = 1; + hacked = 1; + name = "Unlocked Autolathe" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"odd" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"odl" = ( +/obj/structure/hull_corner{ + dir = 8 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"oea" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/ScienceShip) +"oef" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"oeH" = ( +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"oeZ" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"ofF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"ofU" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"ogd" = ( +/obj/structure/fence, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"ogf" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"ogy" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"ogJ" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"ohG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ohI" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/flame/lighter/random{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/flame/lighter/random, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"oiw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; + name = "Stained sheet of paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"oiD" = ( +/obj/effect/decal/cleanable/cobweb2, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"oiN" = ( +/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, +/obj/structure/curtain/black, +/obj/structure/barricade/planks, +/turf/simulated/floor/plating, +/area/template_noop) +"ojc" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"oji" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/body_scanconsole, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"okz" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"okH" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"okM" = ( +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning, +/obj/item/device/kit/paint/gygax/darkgygax, +/obj/item/device/kit/paint/gygax/recitence, +/obj/item/device/kit/paint/durand, +/obj/item/device/kit/paint/durand/phazon, +/obj/item/device/kit/paint/durand/seraph, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"olq" = ( +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/Dinner) +"olR" = ( +/obj/structure/railing/grey{ + dir = 1; + health = 8000000000; + maxhealth = 8000000000; + name = "durable grey railing" + }, +/obj/machinery/autolathe{ + hacked = 1; + name = "unlocked autolathe" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"oml" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"omA" = ( +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/head/soft/solgov/veteranhat, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"omY" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/obj/structure/prop/poicanister{ + icon_state = "orangeps-1" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"oni" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/survival/west{ + dir = 2; + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"onS" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/radio{ + anchored = 1; + canhear_range = 1; + frequency = 1487; + icon = 'icons/obj/items.dmi'; + icon_state = "red_phone"; + name = "Reception Emergency Phone" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"ooD" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy{ + dir = 5 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"ooR" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "shelterblast"; + name = "Shelter Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"opQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 30 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"oqd" = ( +/obj/structure/closet/toolcloset, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/device/flashlight, +/obj/item/weapon/storage/belt/utility/full/multitool, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/weapon/module/power_control, +/obj/item/weapon/module/cell_power, +/obj/item/weapon/module/card_reader, +/obj/item/weapon/module/id_auth, +/obj/item/weapon/storage/firstaid/regular, +/turf/simulated/floor/plating, +/area/template_noop) +"oqm" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "frontgate"; + name = "Door Lock"; + pixel_x = 27; + pixel_y = 6; + specialfunctions = 4 + }, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "checkshutt"; + name = "Checkpoint Shutters"; + pixel_x = 27; + pixel_y = -6 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"oqM" = ( +/obj/fire, +/turf/simulated/floor, +/area/template_noop) +"oqN" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LoneHome) +"oqX" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"orl" = ( +/obj/structure/prop/alien/computer{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ory" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"orH" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"orZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/machinery/access_button{ + dir = 1; + master_tag = null; + pixel_x = -27; + pixel_y = 7; + req_one_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"osB" = ( +/obj/machinery/mecha_part_fabricator, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"otf" = ( +/obj/machinery/camera{ + c_tag = "BioResearch West"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"otF" = ( +/obj/machinery/vending/security{ + pixel_x = 3; + pixel_y = -1; + req_access = null; + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"oul" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/clipboard, +/obj/item/weapon/folder/white, +/obj/item/weapon/pen, +/obj/item/weapon/reagent_containers/dropper{ + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ouU" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"ovi" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/wood, +/area/template_noop) +"ovj" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"ovB" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/washing_machine, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"owd" = ( +/obj/structure/salvageable/console_broken_os{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"owp" = ( +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"owJ" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"owQ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"owS" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/ian, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"owV" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"oxy" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"oxz" = ( +/obj/structure/bed/double/padded, +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/obj/item/weapon/bedsheet/rainbowdouble, +/turf/simulated/floor/carpet/turcarpet, +/area/survivalpod/superpose/ScienceShip) +"oxD" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"oyg" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/gloves/sterile/latex, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"oyy" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"oyS" = ( +/obj/item/weapon/material/knife/ritual, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"ozy" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/ScienceShip) +"ozA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"ozF" = ( +/obj/machinery/computer, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"ozP" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"ozT" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/redgrid, +/area/template_noop) +"oAs" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"oAI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"oAJ" = ( +/obj/structure/table/standard, +/obj/item/device/multitool, +/obj/item/clothing/glasses/welding, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"oAR" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/CrashedInfestedShip) +"oBW" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"oCA" = ( +/obj/machinery/computer/security/abductor{ + icon_screen = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"oCM" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"oCX" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"oCY" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "Field Hospital Medical Storage" + }, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/machinery/light/floortube{ + dir = 1 + }, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/weapon/surgical/circular_saw/manager, +/obj/item/weapon/surgical/circular_saw/manager, +/obj/item/weapon/surgical/scalpel/ripper, +/obj/item/weapon/surgical/scalpel/ripper, +/obj/item/weapon/surgical/scalpel/manager, +/obj/item/weapon/surgical/scalpel/manager, +/obj/item/weapon/surgical/bone_clamp, +/obj/item/weapon/surgical/bone_clamp, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/weapon/storage/box/cdeathalarm_kit, +/obj/item/device/sleevemate, +/obj/item/device/sleevemate, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/masks, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical/skirt, +/obj/item/clothing/under/rank/medical/skirt, +/obj/item/clothing/under/rank/medical/skirt, +/obj/item/clothing/under/rank/medical/skirt, +/obj/item/clothing/under/rank/medical/skirt, +/obj/item/clothing/under/rank/medical/turtleneck, +/obj/item/clothing/under/rank/medical/turtleneck, +/obj/item/clothing/under/rank/medical/turtleneck, +/obj/item/clothing/under/rank/medical/turtleneck, +/obj/item/clothing/under/rank/medical/turtleneck, +/obj/item/clothing/under/rank/medical/scrubs, +/obj/item/clothing/under/rank/medical/scrubs, +/obj/item/clothing/under/rank/medical/scrubs, +/obj/item/clothing/under/rank/medical/scrubs, +/obj/item/clothing/under/rank/medical/scrubs, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/obj/item/clothing/under/rank/medical/scrubs/navyblue, +/obj/item/clothing/under/rank/medical/scrubs/purple, +/obj/item/clothing/under/rank/medical/scrubs/purple, +/obj/item/clothing/under/rank/medical/scrubs/purple, +/obj/item/clothing/under/rank/medical/scrubs/purple, +/obj/item/clothing/under/rank/medical/scrubs/purple, +/obj/item/clothing/under/rank/medical/scrubs/white, +/obj/item/clothing/under/rank/medical/scrubs/white, +/obj/item/clothing/under/rank/medical/scrubs/white, +/obj/item/clothing/under/rank/medical/scrubs/white, +/obj/item/clothing/under/rank/medical/scrubs/white, +/obj/item/clothing/head/surgery, +/obj/item/clothing/head/surgery, +/obj/item/clothing/head/surgery, +/obj/item/clothing/head/surgery, +/obj/item/clothing/head/surgery, +/obj/item/clothing/head/surgery/black{ + name = "black surgical cap" + }, +/obj/item/clothing/head/surgery/black{ + name = "black surgical cap" + }, +/obj/item/clothing/head/surgery/black{ + name = "black surgical cap" + }, +/obj/item/clothing/head/surgery/black{ + name = "black surgical cap" + }, +/obj/item/clothing/head/surgery/black{ + name = "black surgical cap" + }, +/obj/item/clothing/head/surgery/blue{ + name = "blue surgical cap" + }, +/obj/item/clothing/head/surgery/blue{ + name = "blue surgical cap" + }, +/obj/item/clothing/head/surgery/blue{ + name = "blue surgical cap" + }, +/obj/item/clothing/head/surgery/blue{ + name = "blue surgical cap" + }, +/obj/item/clothing/head/surgery/blue{ + name = "blue surgical cap" + }, +/obj/item/clothing/head/surgery/green{ + name = "green surgical cap" + }, +/obj/item/clothing/head/surgery/green{ + name = "green surgical cap" + }, +/obj/item/clothing/head/surgery/green{ + name = "green surgical cap" + }, +/obj/item/clothing/head/surgery/green{ + name = "green surgical cap" + }, +/obj/item/clothing/head/surgery/green{ + name = "green surgical cap" + }, +/obj/item/clothing/head/surgery/navyblue{ + name = "navy blue surgical cap" + }, +/obj/item/clothing/head/surgery/navyblue{ + name = "navy blue surgical cap" + }, +/obj/item/clothing/head/surgery/navyblue{ + name = "navy blue surgical cap" + }, +/obj/item/clothing/head/surgery/navyblue{ + name = "navy blue surgical cap" + }, +/obj/item/clothing/head/surgery/navyblue{ + name = "navy blue surgical cap" + }, +/obj/item/clothing/head/surgery/purple{ + name = "purple surgical cap" + }, +/obj/item/clothing/head/surgery/purple{ + name = "purple surgical cap" + }, +/obj/item/clothing/head/surgery/purple{ + name = "purple surgical cap" + }, +/obj/item/clothing/head/surgery/purple{ + name = "purple surgical cap" + }, +/obj/item/clothing/head/surgery/purple{ + name = "purple surgical cap" + }, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/shoes/white, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"oDr" = ( +/obj/item/weapon/material/shard, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"oDD" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"oDE" = ( +/obj/item/weapon/storage/box/dosimeter, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"oEn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/recharge_station, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"oEt" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"oEz" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 32 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 23 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"oEG" = ( +/obj/structure/sink{ + pixel_y = 14 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/disposal/wall{ + dir = 4; + pixel_y = 0; + pixel_x = -37 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"oEK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"oEU" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"oFo" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"oFI" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 3 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"oGt" = ( +/obj/structure/closet/cabinet, +/obj/random/maintenance/medical, +/obj/random/cash, +/obj/random/cigarettes, +/obj/random/firstaid, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"oGD" = ( +/obj/structure/particle_accelerator/particle_emitter/right{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"oHd" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"oHi" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"oHl" = ( +/obj/machinery/light/small, +/obj/machinery/alarm/monitor{ + dir = 1; + locked = 0; + pixel_y = -23; + req_access = null + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"oHo" = ( +/obj/structure/barricade/cutout/wizard{ + anchored = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oHH" = ( +/obj/effect/floor_decal/emblem/black, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"oIx" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"oIA" = ( +/obj/machinery/r_n_d/protolathe, +/obj/structure/sign/periodic{ + pixel_y = 29 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"oIC" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/template_noop) +"oII" = ( +/obj/structure/bed/chair/wood{ + dir = 8; + icon_state = "wooden_chair" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"oIN" = ( +/obj/machinery/biogenerator, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"oJd" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) +"oKd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"oKt" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + dir = 4; + icon_state = "2-4" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"oKK" = ( +/turf/simulated/floor/cult{ + icon_state = "cult-narsie" + }, +/area/template_noop) +"oLn" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"oLq" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"oLy" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "screen"; + pixel_y = 32 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"oLI" = ( +/obj/random/junk, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"oLU" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + icon_state = "map_vent_out"; + use_power = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"oMb" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"oMh" = ( +/obj/effect/catwalk_plated/white, +/turf/template_noop, +/area/survivalpod/superpose/ScienceShip) +"oMk" = ( +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"oMv" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/sniperrifle, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"oMw" = ( +/obj/structure/window/reinforced/survival_pod{ + density = 0; + dir = 9; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"oME" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/optable, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"oNd" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"oNj" = ( +/obj/structure/fence, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/MethLab) +"oNF" = ( +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oNG" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"oNL" = ( +/obj/item/weapon/storage/firstaid/o2, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"oNW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"oOk" = ( +/obj/structure/closet/crate/hydroponics, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"oOo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"oOK" = ( +/obj/effect/alien/weeds/node, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"oOW" = ( +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"oPi" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + frequency = 1380; + icon_state = "door_locked"; + id_tag = "estrella_outer"; + locked = 1; + name = "External Access" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"oPm" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/cult, +/area/template_noop) +"oPB" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"oPG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"oPZ" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"oQj" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"oQr" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"oQy" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"oSe" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"oSf" = ( +/obj/structure/fans, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oSs" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor, +/area/survivalpod/superpose/FieldLab) +"oSt" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/machinery/light/floortube, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"oSY" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"oTl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"oTC" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oTF" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/random/maintenance/engineering, +/obj/fire, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"oTP" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/item/device/gps/computer, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"oUb" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/gloves/black, +/obj/item/clothing/gloves/blue, +/obj/item/clothing/gloves/brown, +/obj/item/clothing/gloves/captain, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/green, +/obj/item/clothing/gloves/grey, +/obj/item/clothing/gloves/light_brown, +/obj/item/clothing/gloves/purple, +/obj/item/clothing/gloves/rainbow, +/obj/item/clothing/gloves/swat, +/obj/item/clothing/gloves/white, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"oUT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"oUU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod/superpose/LoneHome) +"oUZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_external, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"oVg" = ( +/obj/machinery/vending/cigarette{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"oVL" = ( +/turf/simulated/floor/redgrid, +/area/template_noop) +"oVQ" = ( +/obj/machinery/autolathe, +/obj/item/weapon/rcd/advanced/loaded{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/weapon/rcd_ammo/large, +/obj/item/weapon/rcd_ammo/large, +/turf/simulated/floor/plating, +/area/template_noop) +"oXC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"oXM" = ( +/obj/structure/table/glass, +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"oXO" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"oYb" = ( +/obj/machinery/atm{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"oYf" = ( +/obj/machinery/door/airlock/maintenance/command{ + req_one_access = null; + name = "Bridge Access" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"oYq" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"oYK" = ( +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"oYO" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"oZp" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/airlock_sensor{ + dir = 8; + id_tag = null; + pixel_x = 27 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + id_tag = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"oZu" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"oZx" = ( +/obj/item/weapon/cell/high, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"oZL" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/transhuman/resleever, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"pag" = ( +/obj/structure/closet/toolcloset, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"pan" = ( +/obj/structure/table/glass, +/obj/structure/closet/walllocker_double/survival/west, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"pao" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"paE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"paG" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"pbm" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"pcj" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"pck" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"pcn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"pcC" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -25 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"pcE" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"pcP" = ( +/obj/item/device/multitool, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"pcX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"pcY" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"pda" = ( +/obj/item/weapon/storage/box/lights/mixed, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"pdg" = ( +/obj/structure/barricade, +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"pdM" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"peh" = ( +/obj/machinery/door/airlock/phoron, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"peG" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"peY" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"pgJ" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"phy" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/template_noop) +"phA" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"phC" = ( +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"phG" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westright{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"pib" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"piJ" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"piK" = ( +/obj/machinery/disperser/middle{ + dir = 4 + }, +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"pja" = ( +/obj/random/mob/sif/peaceful, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"pju" = ( +/obj/machinery/door/airlock/phoron, +/obj/structure/fans/hardlight/colorable/abductor, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CultShip) +"pjH" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"pjJ" = ( +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"pjZ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"pkh" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain8, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"pkr" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/pill_bottle/corophizine{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/corophizine{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/corophizine{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/corophizine{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/arithrazine{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/arithrazine{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/arithrazine{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/arithrazine{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/combat{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/combat{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/combat{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/combat{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/weapon/storage/pill_bottle/iron{ + pixel_x = -4 + }, +/obj/item/weapon/storage/pill_bottle/iron{ + pixel_x = -4 + }, +/obj/item/weapon/storage/pill_bottle/iron{ + pixel_x = -4 + }, +/obj/item/weapon/storage/pill_bottle/iron{ + pixel_x = -4 + }, +/obj/item/weapon/storage/pill_bottle/nutriment{ + pixel_x = 1 + }, +/obj/item/weapon/storage/pill_bottle/nutriment{ + pixel_x = 1 + }, +/obj/item/weapon/storage/pill_bottle/nutriment{ + pixel_x = 1 + }, +/obj/item/weapon/storage/pill_bottle/nutriment{ + pixel_x = 1 + }, +/obj/item/weapon/storage/pill_bottle/carbon{ + pixel_x = 6 + }, +/obj/item/weapon/storage/pill_bottle/carbon{ + pixel_x = 6 + }, +/obj/item/weapon/storage/pill_bottle/carbon{ + pixel_x = 6 + }, +/obj/item/weapon/storage/pill_bottle/carbon{ + pixel_x = 6 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"pkC" = ( +/obj/machinery/vending/foodfish, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pkV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"plu" = ( +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"plI" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"pmC" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/locked/frontier/carbine{ + pixel_y = 7 + }, +/obj/item/weapon/gun/energy/locked/frontier/carbine{ + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"por" = ( +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"pot" = ( +/obj/structure/table/rack/shelf, +/obj/random/maintenance/clean, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"poB" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"poF" = ( +/obj/item/weapon/module/power_control, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"poP" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/plating, +/area/template_noop) +"poX" = ( +/obj/machinery/conveyor_switch{ + id = "SP-Mining"; + name = "Disposal Sorter"; + pixel_y = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"pph" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ppr" = ( +/obj/structure/cult/talisman, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"ppH" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain4, +/turf/simulated/floor/atoll, +/area/template_noop) +"ppI" = ( +/obj/machinery/suit_cycler/engineering{ + req_access = null + }, +/turf/simulated/floor/plating, +/area/template_noop) +"ppY" = ( +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"pqN" = ( +/obj/structure/table/fancyblack, +/obj/item/toy/eight_ball, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"pqO" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + hackProof = 1; + id_tag = "Teshnomancer_doors"; + maxhealth = 8000000000; + normalspeed = 0; + req_one_access = list(300); + secured_wires = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"pqZ" = ( +/obj/structure/ship_munition/disperser_charge/mining, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"prz" = ( +/obj/machinery/smartfridge/produce, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"pso" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"psw" = ( +/obj/machinery/power/emitter{ + anchored = 1; + id = "EngineEmitter"; + state = 2 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"psD" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"ptq" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ptv" = ( +/obj/structure/table/marble, +/obj/machinery/cash_register/civilian{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "SP-kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ptG" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"puB" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"puO" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"pva" = ( +/obj/machinery/mining/brace, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"pvH" = ( +/obj/structure/table/steel, +/obj/machinery/button/windowtint{ + id = "SP-Sec"; + pixel_x = 10; + pixel_y = 25 + }, +/obj/structure/fans{ + pixel_y = 32 + }, +/obj/machinery/microscope{ + pixel_y = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pvX" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/skills{ + dir = 8 + }, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"pwl" = ( +/obj/structure/table/marble, +/obj/structure/sink/countertop{ + dir = 1; + pixel_y = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pwp" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/item/weapon/refill_cartridge/universal, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/cornoil, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/cookingoil, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/sprinkles, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/yeast, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/vinegar{ + name = "Vinegar" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/soysauce{ + name = "Soysauce" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/mustard{ + name = "Mustard" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/obj/item/weapon/reagent_containers/food/condiment/ketchup{ + name = "Ketchup" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"pwK" = ( +/obj/machinery/door/airlock/angled_tgmc{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"pwV" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"pxo" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"pxr" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/reinforced{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/weapon/paper_bin{ + pixel_x = 9 + }, +/obj/machinery/vending/loadout/uniform{ + pixel_x = -5 + }, +/obj/item/weapon/pen{ + pixel_x = 11; + pixel_y = -3 + }, +/obj/item/weapon/pen{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"pxI" = ( +/obj/structure/table/bench/wooden, +/obj/item/weapon/flame/candle/everburn{ + pixel_y = 0 + }, +/turf/simulated/wall/wood, +/area/template_noop) +"pxU" = ( +/obj/structure/table/bench/wooden, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + pressure_checks = 0; + pressure_checks_default = 0; + use_power = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/item/weapon/bikehorn/rubberducky, +/turf/simulated/floor/wood, +/area/template_noop) +"pyq" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/computer/transhuman/resleeving{ + dir = 4; + req_access = list(300) + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = -21 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"pyD" = ( +/obj/structure/table/glass, +/obj/item/clothing/suit/storage/vest/press, +/obj/item/clothing/accessory/badge/press/independent, +/obj/item/device/tvcamera, +/obj/item/device/camera, +/obj/item/device/camera_film, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"pyZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"pzq" = ( +/turf/template_noop, +/area/survivalpod/superpose/ScienceShip) +"pzt" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"pzy" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"pzK" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"pAp" = ( +/obj/structure/cliff/automatic{ + dir = 8 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"pAA" = ( +/obj/structure/closet/crate/freezer, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"pAF" = ( +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"pAZ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 6 + }, +/obj/structure/bed/chair/wheelchair, +/obj/structure/bed/chair/wheelchair, +/obj/structure/bed/chair/wheelchair, +/obj/structure/bed/chair/wheelchair/smallmotor, +/obj/structure/bed/chair/wheelchair/smallmotor, +/obj/structure/bed/chair/wheelchair/smallmotor, +/obj/structure/window/reinforced, +/obj/machinery/light/floortube, +/obj/structure/table/rack, +/obj/structure/bedsheetbin, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"pBG" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/turf/simulated/floor/wood, +/area/survivalpod) +"pBX" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/telecube/randomized{ + name = "Odd artifact" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"pCb" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"pCP" = ( +/obj/item/weapon/storage/box/survival/comp, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"pDj" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + frequency = 1380; + icon_state = "door_locked"; + id_tag = "estrella_inner"; + locked = 1; + name = "Internal Access" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"pDx" = ( +/obj/structure/salvageable/data, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"pEc" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"pEj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"pEp" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"pEM" = ( +/obj/structure/table/rack/shelf, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"pFp" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"pFX" = ( +/obj/structure/railing, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"pGu" = ( +/obj/structure/table/reinforced, +/obj/item/device/radio/subspace{ + pixel_y = -7 + }, +/obj/item/device/flashlight/lamp{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"pGz" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"pGG" = ( +/obj/item/stack/cable_coil/blue, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"pHl" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/sink/kitchen{ + dir = 4; + icon_state = "sink_alt"; + pixel_x = -13 + }, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pHn" = ( +/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, +/obj/structure/curtain/black, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"pHZ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/shower{ + pixel_y = 20 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/ScienceShip) +"pIa" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"pIq" = ( +/obj/item/weapon/module/power_control, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"pIr" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"pIW" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"pJo" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/camera{ + c_tag = "HydroResearch Bay West"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"pJr" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/carpet/gaycarpet, +/area/template_noop) +"pJx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/ScienceShip) +"pJO" = ( +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"pJY" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"pKP" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "estrella"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"pKV" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/sharpeningkit, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pLn" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"pLs" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/rig/internalaffairs, +/obj/item/clothing/head/helmet/space/void/wizard, +/obj/item/clothing/suit/space/void/wizard, +/obj/item/device/survivalcapsule/luxury, +/obj/item/device/survivalcapsule/luxurybar, +/obj/item/device/survivalcapsule/tabiranth, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule/luxury, +/obj/item/device/survivalcapsule/luxury, +/obj/item/device/survivalcapsule/superpose, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pLO" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"pLQ" = ( +/turf/simulated/wall/wood, +/area/template_noop) +"pLU" = ( +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"pMc" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"pNd" = ( +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"pNf" = ( +/obj/structure/fence/corner{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"pND" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/lighter/zippo/royal, +/obj/item/weapon/lipstick/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"pOh" = ( +/mob/living/simple_mob/vore/aggressive/rat, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"pPz" = ( +/obj/item/weapon/shovel, +/obj/item/weapon/tool/wrench, +/obj/item/weapon/pickaxe, +/obj/item/weapon/tool/crowbar, +/obj/item/stack/flag/yellow{ + pixel_x = 4 + }, +/obj/item/stack/flag/red, +/obj/item/stack/flag/green{ + pixel_x = -4 + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/item/device/gps/mining{ + pixel_x = -5 + }, +/obj/item/device/gps/mining{ + pixel_x = 5 + }, +/obj/item/weapon/storage/belt/utility/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pPV" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"pPZ" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/plating, +/area/template_noop) +"pQB" = ( +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"pQS" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/captain, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pQW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/voidcraft/survival_pod{ + hackProof = 1; + id_tag = "Teshnomancer_doors"; + maxhealth = 8000000000; + normalspeed = 0; + req_one_access = list(300); + secured_wires = 1 + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors."; + id = "Teshnomancer_innerdoor"; + name = "Heavy Duty blast door" + }, +/obj/structure/fans/hardlight/colorable{ + color = "#99ccff"; + light_color = "#99ccff" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"pRb" = ( +/obj/effect/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/template_noop) +"pRi" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"pRp" = ( +/obj/machinery/computer/cryopod{ + layer = 3.3; + pixel_x = 32; + req_one_access = list(300) + }, +/obj/machinery/libraryscanner, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"pSs" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom/department/medbay{ + pixel_y = -21 + }, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/graphite, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"pTg" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"pTl" = ( +/turf/simulated/floor/carpet, +/area/template_noop) +"pTp" = ( +/obj/fire, +/mob/living/simple_mob/vore/demonAI/lutra{ + faction = "neutral" + }, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"pTt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"pTC" = ( +/obj/item/device/camera, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"pTK" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/closet/crate/internals, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pTO" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"pTV" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"pUj" = ( +/obj/structure/table/bench/glass, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/fuzzy, +/turf/simulated/floor/wood, +/area/template_noop) +"pUs" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/template_noop) +"pUy" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/tech_disk, +/obj/item/weapon/disk/tech_disk, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"pUP" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"pUX" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"pVk" = ( +/obj/machinery/camera{ + c_tag = "Lobby South"; + dir = 1; + network = list("Research") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/effect/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"pVq" = ( +/obj/structure/bed/chair/sofa/corner, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"pWk" = ( +/obj/machinery/door/window/survival_pod, +/obj/structure/closet/walllocker_double/survival/north, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"pWA" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 21 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"pXr" = ( +/obj/machinery/floodlight, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"pXO" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"pYg" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"pYq" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"pYs" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"pYG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"pYP" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"pYS" = ( +/obj/machinery/door/window/southright{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pZr" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"pZV" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"qaj" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"qaP" = ( +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/survivalpod/superpose/HellCave) +"qaS" = ( +/obj/structure/dispenser/oxygen, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"qaT" = ( +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"qbg" = ( +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "Teshnomancer_Private_blastdoors"; + name = "Private"; + pixel_x = -26; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"qbt" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/thermoregulator, +/turf/simulated/floor/plating, +/area/template_noop) +"qbC" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"qcu" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"qcw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"qcF" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"qcI" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/MethLab) +"qdm" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/vending/dinnerware{ + categories = 3; + req_log_access = 300; + req_one_access = list(300) + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"qen" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"qeq" = ( +/obj/effect/floor_decal/spline/plain, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"qfd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"qfy" = ( +/obj/random/maintenance/engineering, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"qfH" = ( +/obj/structure/cliff/automatic{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"qgd" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/survivalpod) +"qgu" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"qgy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"qgz" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"qgB" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/sign/warning{ + icon_state = "custodian"; + name = "\improper Trash Ejection"; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"qha" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"qhD" = ( +/obj/structure/table/woodentable, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qik" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"qiO" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/template_noop, +/area/template_noop) +"qiS" = ( +/obj/machinery/mecha_part_fabricator{ + req_access = null + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"qjr" = ( +/obj/structure/grille, +/obj/structure/shuttle/window, +/obj/machinery/door/blast/regular{ + dir = 8; + id = "QShuttlePoIDoors"; + layer = 3.3; + name = "Emergency Lockdown Shutters" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"qju" = ( +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"qjA" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qjZ" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"qkd" = ( +/obj/item/stack/material/resin{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qkA" = ( +/obj/machinery/washing_machine{ + pixel_x = 8; + pixel_y = 15 + }, +/obj/item/weapon/storage/laundry_basket{ + pixel_x = -1; + pixel_y = -7 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qkX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"qkY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"qlo" = ( +/obj/structure/closet/crate/wooden, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/turf/simulated/floor/wood, +/area/template_noop) +"qly" = ( +/obj/structure/curtain/black, +/obj/machinery/light_switch{ + pixel_x = 21; + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qmz" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/button/remote/blast_door{ + id = "tradebridgeshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(150) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qmC" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/carp_plushie, +/obj/random/curseditem, +/obj/random/junk, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"qmI" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"qmJ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"qmQ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"qnV" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"qnX" = ( +/obj/structure/simple_door/wood, +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qoz" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qoG" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"qoL" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = -32 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"qoN" = ( +/obj/structure/railing/grey, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/cliff/automatic{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"qpl" = ( +/obj/machinery/autolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qpO" = ( +/obj/structure/fence, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"qqL" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"qrz" = ( +/obj/machinery/newscaster/security_unit{ + pixel_x = -30 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"qrW" = ( +/obj/machinery/camera{ + c_tag = "Production Room"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"qsi" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"qsB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"qsM" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"qtw" = ( +/obj/structure/sink/countertop{ + pixel_y = 7 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"quq" = ( +/obj/structure/closet/cabinet, +/obj/item/device/binoculars/spyglass, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/maintenance/medical, +/obj/random/cash, +/obj/random/drinkbottle, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"quA" = ( +/turf/simulated/floor/carpet/brown, +/area/template_noop) +"quK" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"quT" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/turf/template_noop, +/area/template_noop) +"quV" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/glass/bucket{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/weapon/reagent_containers/glass/bucket{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/structure/sink/kitchen{ + layer = 1; + pixel_y = 12 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"qvq" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"qvB" = ( +/obj/structure/table/woodentable, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"qvK" = ( +/obj/random/soap, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qvQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"qwe" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qwz" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"qwC" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"qxh" = ( +/obj/item/weapon/storage/mre/random, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qxi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"qxt" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qye" = ( +/obj/structure/table/steel, +/obj/item/weapon/tool/crowbar/power, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"qyk" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"qyo" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood, +/area/template_noop) +"qyr" = ( +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"qyA" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/under/cheongsam, +/obj/item/clothing/under/hosformalmale, +/obj/item/clothing/under/hosformalfem, +/obj/item/clothing/under/harness, +/obj/item/clothing/under/gladiator, +/obj/item/clothing/under/ert, +/obj/item/clothing/under/schoolgirl, +/obj/item/clothing/under/redcoat, +/obj/item/clothing/under/sexymime, +/obj/item/clothing/under/sexyclown, +/obj/item/clothing/under/soviet, +/obj/item/clothing/under/space, +/obj/item/clothing/under/swimsuit/stripper/mankini, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/rank/psych/turtleneck, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/tacticool, +/obj/item/clothing/under/syndicate/tacticool, +/obj/item/clothing/under/dress/sailordress, +/obj/item/clothing/under/dress/redeveninggown, +/obj/item/clothing/under/dress/dress_saloon, +/obj/item/clothing/under/dress/blacktango, +/obj/item/clothing/under/dress/blacktango/alt, +/obj/item/clothing/under/dress/dress_orange, +/obj/item/clothing/under/dress/maid/janitor, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qyG" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/DemonPool) +"qzo" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/east, +/turf/simulated/floor/plating, +/area/template_noop) +"qzq" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/cliff/automatic, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"qzG" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/seeds/icepepperseed, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"qzP" = ( +/obj/machinery/porta_turret, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"qzX" = ( +/turf/simulated/gore, +/area/survivalpod/superpose/HellCave) +"qAr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"qAy" = ( +/turf/simulated/wall/cult, +/area/survivalpod/superpose/HellCave) +"qAG" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"qAO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/rnd{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"qBE" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/machinery/light, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"qBN" = ( +/obj/structure/closet/crate/secure/engineering{ + req_one_access = list(300) + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"qBX" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/device/defib_kit/compact/combat/loaded{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -26 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"qCa" = ( +/obj/item/weapon/storage/backpack/cultpack, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"qDr" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 35 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 22 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"qEC" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"qEO" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"qFn" = ( +/obj/item/fulton_core, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qFs" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Teshnomancer_frontdoor"; + name = "Front Door"; + pixel_x = 26; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"qFH" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/obj/machinery/camera{ + c_tag = "BioResearch Entry West"; + dir = 4; + network = list("Research") + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"qHq" = ( +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qHO" = ( +/obj/structure/window/reinforced/full{ + dir = 8 + }, +/obj/structure/window/reinforced/full{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"qHP" = ( +/obj/structure/sink/puddle, +/turf/simulated/floor/outdoors/mud{ + outdoors = 0 + }, +/area/survivalpod/superpose/Farm) +"qHQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"qII" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qJz" = ( +/obj/machinery/washing_machine, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"qJK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"qJQ" = ( +/obj/machinery/vending/fitness{ + dir = 4; + pixel_x = -5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"qKd" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qKl" = ( +/obj/structure/fans, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"qKA" = ( +/obj/item/clothing/shoes/cult, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qLj" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"qLu" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/surgical/circular_saw/manager, +/obj/item/weapon/surgical/scalpel/ripper, +/obj/item/weapon/surgical/scalpel/manager, +/obj/item/weapon/surgical/bone_clamp, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"qLB" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"qNh" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"qOk" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"qOl" = ( +/obj/structure/sign/atmos_waste, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/MethLab) +"qOy" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"qPo" = ( +/obj/item/weapon/material/shard, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"qPB" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = -9 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qPW" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"qQy" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4; + icon_state = "propulsion_l" + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"qQF" = ( +/obj/structure/lattice, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"qQJ" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"qRd" = ( +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"qSd" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"qSf" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/medical, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"qSh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"qTy" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"qTA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"qTC" = ( +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"qTK" = ( +/obj/machinery/mineral/mint{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qUy" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"qUz" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"qUK" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/white, +/obj/item/weapon/pen/fountain4, +/obj/item/device/gps/medical{ + pixel_x = 12 + }, +/obj/item/device/gps/medical{ + pixel_x = 12 + }, +/obj/item/device/gps/medical{ + pixel_x = 12 + }, +/obj/item/device/gps/medical{ + pixel_x = 12 + }, +/obj/item/device/gps/medical{ + pixel_x = 12 + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"qUO" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"qVd" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"qVl" = ( +/obj/structure/table/steel_reinforced, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/curseditem, +/obj/random/curseditem, +/obj/random/curseditem, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qVw" = ( +/obj/random/maintenance, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"qVO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"qWd" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"qWl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"qWF" = ( +/obj/structure/toilet/prison{ + name = "toilet"; + pixel_y = 10 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"qWV" = ( +/obj/structure/sink{ + pixel_y = 25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"qXf" = ( +/mob/living/simple_mob/vore/catgirl, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"qYf" = ( +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"qYA" = ( +/obj/structure/cult/tome, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"qYC" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/ScienceShip) +"qYF" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"qYJ" = ( +/obj/machinery/power/emitter/gyrotron{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"qZN" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"rac" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/device/multitool, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"raj" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"raz" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume, +/turf/simulated/shuttle/plating, +/area/template_noop) +"rbm" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/under/pirate, +/obj/item/clothing/head/bandana, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/shoes/boots/duty, +/turf/simulated/floor/tiled, +/area/template_noop) +"rbq" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille/rustic, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"rbr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"rbM" = ( +/obj/item/robot_parts/chest, +/obj/item/robot_parts/l_arm, +/obj/item/robot_parts/r_arm, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"rbR" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/template_noop) +"rbS" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"rbW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"rcc" = ( +/obj/fire, +/obj/fire, +/obj/item/trash/material/device, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"rck" = ( +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"rcR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"rds" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"rdt" = ( +/obj/machinery/autolathe{ + hacked = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"rdw" = ( +/obj/structure/table/bench/wooden, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 2 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"rdM" = ( +/obj/structure/bookcase, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rdS" = ( +/obj/machinery/sleeper{ + dir = 4; + emagged = 1; + initial_bin_rating = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"req" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"rer" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/southleft{ + req_access = null + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"rev" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/largecrate/hoverpod, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rex" = ( +/obj/structure/grille/broken/cult, +/turf/template_noop, +/area/survivalpod/superpose/DemonPool) +"reH" = ( +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/MethLab) +"rfr" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer_1"; + set_temperature = 19; + use_power = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"rfP" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"rgK" = ( +/obj/item/weapon/mining_scanner, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/void/mining, +/obj/item/clothing/head/helmet/space/void/mining, +/obj/structure/table/rack/shelf/steel, +/obj/item/device/suit_cooling_unit, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rgO" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rgX" = ( +/obj/structure/alien/membrane, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"rhY" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rif" = ( +/obj/machinery/door/airlock/glass, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"rih" = ( +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"rio" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"riA" = ( +/obj/structure/table/standard, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/head/helmet/space/void/merc, +/obj/item/clothing/head/helmet/space/void/merc, +/obj/item/clothing/head/helmet/space/void/merc, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rjB" = ( +/obj/structure/tubes, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rjJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"rjX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/item/device/radio/intercom{ + dir = 8; + name = "Station Intercom (General)"; + pixel_x = -21 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"rkb" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"rki" = ( +/obj/structure/closet/secure_closet/scientist, +/obj/item/device/gps/science, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rkm" = ( +/obj/structure/table/darkglass, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"rkE" = ( +/obj/machinery/atm{ + pixel_y = -32 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"rkS" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/bio_hood, +/obj/item/clothing/suit/bio_suit, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"rle" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"rlf" = ( +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"rlm" = ( +/turf/simulated/gore, +/area/template_noop) +"rlA" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rlL" = ( +/obj/screen/alert/highpressure, +/turf/template_noop, +/area/template_noop) +"rmo" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"rmP" = ( +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"rnj" = ( +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"rnB" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/closet, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rnE" = ( +/obj/structure/cliff/automatic{ + dir = 2 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"rnG" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"rnM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/pirate, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"rnY" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_cycler{ + departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control","Exploration","Pilot Blue","Pilot"); + locked = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rol" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/appliance/mixer/cereal, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"rop" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"roK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"rpe" = ( +/obj/structure/sign/flag/pirate{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"rpl" = ( +/obj/machinery/door/window/survival_pod, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rps" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"rpF" = ( +/obj/item/weapon/gun/projectile/revolver/nagant{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/effect/decal/remains/human, +/obj/item/ammo_magazine/s357{ + pixel_x = -13; + pixel_y = 9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rqf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_external, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"rqq" = ( +/obj/machinery/power/thermoregulator/southerncross{ + dir = 4; + pixel_x = -28 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"rqG" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"rrc" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"rrh" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"rrm" = ( +/obj/structure/table/glass, +/obj/item/device/camerabug, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rrN" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"rrV" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Pole Dance Room" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"rsf" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rsM" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/fire, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"rsQ" = ( +/obj/structure/railing/grey, +/obj/structure/cliff/automatic{ + dir = 2 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"rts" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 10 + }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "FH Chemistry Windoor"; + req_access = list(300) + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"rtO" = ( +/obj/random/trash, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"rtV" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"rug" = ( +/obj/structure/hull_corner{ + dir = 4 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"ruW" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/template_noop) +"rvf" = ( +/mob/living/simple_mob/vore/aggressive/frog, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"rvU" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"rwM" = ( +/obj/machinery/seed_extractor, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rwO" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rxc" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ryh" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/brown, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ryn" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/porta_turret/alien{ + faction = "cult" + }, +/turf/simulated/floor/cult, +/area/template_noop) +"ryL" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rzg" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rzN" = ( +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/template_noop) +"rzQ" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = "stolenlock" + }, +/obj/structure/barricade/planks, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rAH" = ( +/obj/structure/table/woodentable, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rAW" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"rBo" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"rBu" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"rBL" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"rBR" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"rCt" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + on = 1 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"rDz" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"rEO" = ( +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"rFd" = ( +/obj/machinery/vending/security, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"rFn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"rFv" = ( +/obj/structure/cliff/automatic/corner{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"rFE" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"rGa" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"rGi" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"rGq" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rGY" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"rGZ" = ( +/obj/structure/fence/door/opened, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"rHE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"rHG" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"rHR" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"rIq" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"rIQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"rJv" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"rKi" = ( +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rKB" = ( +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"rLe" = ( +/obj/structure/constructshell/cult, +/turf/simulated/floor/cult, +/area/template_noop) +"rLo" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"rLt" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"rLL" = ( +/obj/machinery/disperser/front{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"rMI" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"rMN" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rMY" = ( +/obj/machinery/door/window/southleft{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rNs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"rNC" = ( +/obj/structure/table/woodentable, +/obj/item/device/tape, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"rNF" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/table/steel_reinforced, +/obj/fiftyspawner/glass{ + pixel_y = -5 + }, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20; + pixel_y = 5 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"rNI" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"rNJ" = ( +/obj/structure/curtain/open/bed{ + anchored = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod) +"rNK" = ( +/obj/item/frame/apc, +/obj/structure/table/steel, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 22 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"rOb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"rOc" = ( +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -30 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/clothing/glasses/welding, +/obj/item/device/robotanalyzer, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rPq" = ( +/obj/machinery/iv_drip, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rQp" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder{ + pixel_x = 10; + pixel_y = 19 + }, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rQA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"rRu" = ( +/obj/structure/fans/hardlight, +/obj/machinery/door/airlock/multi_tile/metal/mait, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"rRO" = ( +/obj/fiftyspawner/tealcarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"rRZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rSA" = ( +/obj/structure/table/reinforced, +/obj/item/device/gps/advanced/science, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"rUc" = ( +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"rUp" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"rVO" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/toilet, +/obj/machinery/light/floortube{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"rVR" = ( +/obj/vehicle/train/trolley{ + dir = 2 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rVS" = ( +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"rWB" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"rWQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"rXd" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rXy" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"rXE" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rXS" = ( +/obj/structure/table/steel, +/obj/item/device/starcaster_news{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/toy/eight_ball{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rYs" = ( +/obj/structure/cult/tome, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"rYG" = ( +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"rYO" = ( +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"rZj" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"rZk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"rZy" = ( +/obj/machinery/vending/snack{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"rZR" = ( +/obj/structure/grille, +/turf/template_noop, +/area/template_noop) +"saB" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"saF" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"saN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"saQ" = ( +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/machinery/light, +/obj/structure/table/glass, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sbm" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/fans{ + pixel_y = 16 + }, +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -14 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/tool/wrench, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/weapon/material/twohanded/baseballbat/foam, +/obj/item/weapon/material/sword/foam, +/obj/item/weapon/material/twohanded/fireaxe/foam, +/obj/item/weapon/material/twohanded/spear/foam, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera, +/obj/item/device/camera, +/obj/item/weapon/storage/photo_album, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/cell/device, +/obj/item/weapon/cell/device, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sbp" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/everburn, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"sbs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sbC" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"sbY" = ( +/obj/structure/closet/athletic_mixed, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"scn" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/under/mbill{ + desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; + name = "\improper old Major Bill's uniform" + }, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"scp" = ( +/obj/structure/railing/grey, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"scy" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"scA" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet, +/area/template_noop) +"scK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"sdi" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sdj" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"sdr" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"sdv" = ( +/obj/structure/fence, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"sdH" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sec" = ( +/obj/machinery/disperser/middle{ + dir = 8 + }, +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"seD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/ScienceShip) +"seY" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/clipboard, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"sfl" = ( +/obj/structure/urinal{ + dir = 4; + pixel_y = 0; + pixel_x = -31 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"sfH" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"sfT" = ( +/obj/item/weapon/makeover, +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/swimsuit/fluff/penelope, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"sgH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/template_noop, +/area/template_noop) +"sgU" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/hatch, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sic" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/structure/window/reinforced/tinted, +/obj/machinery/smartfridge/secure/medbay{ + req_one_access = list(150) + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/light/floortube, +/obj/item/weapon/storage/bag/chemistry{ + layer = 3.01 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"siQ" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/glasses/cocktail, +/obj/item/weapon/storage/box/glasses/wine, +/obj/item/weapon/storage/box/glasses/shot, +/obj/item/weapon/storage/box/glasses/meta/metapint, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sjw" = ( +/obj/item/device/threadneedle, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sjL" = ( +/obj/machinery/alarm/freezer{ + dir = 8; + pixel_x = 22; + req_one_access = list(24,11,300) + }, +/obj/machinery/gibber{ + req_access = list(300) + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"ske" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"skj" = ( +/obj/item/weapon/tank/emergency/oxygen/engi, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"skn" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sko" = ( +/obj/effect/floor_decal/stairs/dark_stairs, +/turf/simulated/floor, +/area/template_noop) +"skA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"skJ" = ( +/obj/machinery/dnaforensics{ + pixel_x = -4 + }, +/obj/structure/tubes, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"slo" = ( +/obj/effect/decal/cleanable/generic, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"slP" = ( +/obj/item/weapon/melee/cultblade, +/obj/structure/table/fancyblack, +/obj/item/device/soulstone, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"slV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"slZ" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"sme" = ( +/mob/living/simple_mob/animal/synx{ + dir = 4 + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"smW" = ( +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"snB" = ( +/obj/machinery/vending/hydronutrients{ + categories = 3; + dir = 1; + req_log_access = 300 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"spe" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"spx" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"spF" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"spL" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sql" = ( +/obj/machinery/r_n_d/server/core, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"sqB" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"srk" = ( +/turf/simulated/wall/phoron, +/area/survivalpod/superpose/CultShip) +"srF" = ( +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"srO" = ( +/obj/item/stack/material/plastic{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sst" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/cobweb, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"ssy" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"ssR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ssW" = ( +/obj/machinery/door/window/northright{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"stk" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/deck/cards, +/turf/simulated/floor/carpet, +/area/template_noop) +"stC" = ( +/turf/simulated/shuttle/wall/dark/hard_corner, +/area/survivalpod/superpose/TradingShip) +"stZ" = ( +/mob/living/simple_mob/vore/demonAI{ + faction = "neutral" + }, +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/DemonPool) +"suM" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"suV" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + icon_state = "map_vent_out"; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"suW" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"svb" = ( +/obj/machinery/porta_turret/lasertag/red{ + name = "REAL turret" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"svg" = ( +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"svj" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/CultShip) +"swI" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"swP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"swU" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"swY" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"sxA" = ( +/obj/structure/barricade, +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 4; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"sxJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "estrella_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "estrella"; + pixel_y = 26; + tag_airpump = "estrella_pump"; + tag_chamber_sensor = "estrella_sensor"; + tag_exterior_door = "estrella_outer"; + tag_interior_door = "estrella_inner" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"sxL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"syj" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 7 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"syW" = ( +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"szh" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"szv" = ( +/obj/structure/table/marble, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"szA" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"sAG" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"sBk" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/machinery/recharger{ + pixel_y = 0; + pixel_x = -5 + }, +/obj/machinery/recharger{ + pixel_y = 0; + pixel_x = 6 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sBo" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"sCs" = ( +/obj/machinery/deployable/barrier{ + desc = "A deployable barrier with strange undertones. Swipe your ID card to lock/unlock it."; + health = 8000000000; + maxhealth = 8000000000; + name = "modified deployable barrier"; + req_access = list(300) + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"sCA" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"sCN" = ( +/obj/item/device/flashlight/lamp/green, +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/template_noop) +"sDA" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"sEe" = ( +/turf/simulated/floor/gorefloor, +/area/template_noop) +"sEG" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"sEH" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sEI" = ( +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -30 + }, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sFg" = ( +/obj/structure/table/standard, +/obj/item/device/starcaster_news{ + pixel_x = 8 + }, +/obj/item/device/starcaster_news{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"sFi" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/obj/item/weapon/gun/energy/locked/frontier, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"sFk" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/turf/template_noop, +/area/template_noop) +"sFs" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/fire, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"sFL" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"sGj" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/machinery/smartfridge/survival_pod{ + pixel_y = 28 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"sGo" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/Dinner) +"sGA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock{ + id_tag = "awaydorm2"; + name = "Dorm 2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"sGH" = ( +/obj/structure/bed, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"sGW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/fire, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"sHl" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"sIt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"sIy" = ( +/obj/item/trash/chips, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"sJr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/chainsaw, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/extinguisher, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/stack/material/log/sif{ + amount = 25 + }, +/obj/item/stack/material/log/sif{ + amount = 25 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/WoodenCamp) +"sJz" = ( +/obj/item/weapon/module/cell_power, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sJA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"sJG" = ( +/obj/machinery/door/window/northleft{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sJN" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"sKn" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"sKC" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/folder/white, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/item/weapon/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"sLh" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain8, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"sLi" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/lightorange/border, +/obj/machinery/chem_master, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"sLq" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/cosmos, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/template_noop) +"sLs" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"sLO" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/floortube/flicker{ + pixel_y = 13 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"sMc" = ( +/obj/item/device/gps, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sMq" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CultShip) +"sMx" = ( +/obj/effect/floor_decal/sign, +/turf/simulated/wall, +/area/survivalpod/superpose/MethLab) +"sMz" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"sMD" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sNc" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"sNt" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sNP" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/cult, +/area/template_noop) +"sNT" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"sOj" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"sOv" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/inflatable_duck, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sOE" = ( +/obj/fire, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"sOH" = ( +/obj/structure/bed/chair/oldsofa/right{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) +"sOY" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = -27; + pixel_y = -10 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = -27; + pixel_y = 3 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"sPt" = ( +/obj/machinery/vending/tool{ + emagged = 1; + req_log_access = null + }, +/turf/simulated/floor/plating, +/area/template_noop) +"sPP" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"sQn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"sQo" = ( +/obj/structure/curtain/bed, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"sQp" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"sQZ" = ( +/obj/machinery/vending/boozeomat{ + req_access = newlist() + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sRi" = ( +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"sRM" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sRV" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"sSn" = ( +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"sTv" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/pirate, +/turf/simulated/floor/wood, +/area/template_noop) +"sTA" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "shelterblast"; + name = "Shelter Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sUb" = ( +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"sUj" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sUn" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"sUq" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"sUw" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sUO" = ( +/obj/structure/closet/wardrobe/captain, +/obj/item/weapon/gun/projectile/revolver/mateba, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sUX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"sVt" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/box/glasses/meta/metapint, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sVH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"sWl" = ( +/obj/structure/table/steel, +/turf/simulated/floor/redgrid/off, +/area/template_noop) +"sWm" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door{ + id = "xrlock"; + name = "Lockdown Shutters"; + pixel_x = 6; + pixel_y = 2 + }, +/obj/machinery/button/remote/blast_door{ + id = "rat"; + name = "Giant Rat"; + pixel_x = -6; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"sWy" = ( +/obj/item/device/gps/computer{ + can_hide_signal = 1; + gps_tag = "MEDBAY"; + long_range = 1; + tracking = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"sWT" = ( +/obj/structure/closet/alien, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"sXl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"sXV" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"sYD" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"sZq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"sZF" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"tap" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/filingcabinet/chestdrawer{ + name = "Medical Forms" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"tav" = ( +/obj/machinery/vending/robotics, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"taZ" = ( +/obj/machinery/r_n_d/server/robotics, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"tbq" = ( +/obj/item/weapon/storage/firstaid/toxin, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tbY" = ( +/obj/fiftyspawner/purcarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tcF" = ( +/obj/structure/closet/walllocker_double/south{ + name = s + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"tdy" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"tdz" = ( +/obj/machinery/door/airlock/glass_medical{ + name = "Medical Bay"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"tdG" = ( +/obj/structure/table/marble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"tdW" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/coin/uranium, +/obj/item/weapon/coin/silver, +/obj/item/weapon/coin/platinum, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/iron, +/obj/item/weapon/coin/gold, +/obj/item/weapon/coin/diamond, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"teo" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"teN" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"teQ" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) +"tgE" = ( +/obj/structure/kitchenspike, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"thn" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shieldgen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"thD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/angled_tgmc/security_glass{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"tic" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"tid" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"tih" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"tin" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/deck/cards, +/turf/simulated/floor/carpet, +/area/template_noop) +"tiJ" = ( +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"tiK" = ( +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"tjg" = ( +/obj/item/weapon/circuitboard/jukebox, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tjq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"tjL" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"tki" = ( +/obj/machinery/disposal/wall{ + dir = 8; + pixel_y = 0; + pixel_x = 35 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"tkk" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"tko" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"tkE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"tlk" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"tlz" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"tlY" = ( +/obj/structure/table/reinforced, +/obj/machinery/cash_register/civilian{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"tmw" = ( +/obj/item/weapon/phone, +/obj/structure/table/bench/wooden, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/obj/machinery/button/windowtint{ + id = "h-master"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"tmV" = ( +/obj/machinery/appliance/mixer/cereal, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"tnb" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) +"tnp" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"tnK" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/template_noop) +"tnO" = ( +/obj/machinery/vending/loadout/uniform{ + categories = 3 + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"tnU" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"tod" = ( +/obj/structure/table/standard, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"toB" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = 32 + }, +/turf/template_noop, +/area/template_noop) +"toJ" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/floor/plating, +/area/template_noop) +"tpk" = ( +/obj/structure/bed/chair/sofa/black, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"tpm" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 21 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"tpq" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"tpt" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tpy" = ( +/obj/structure/sign/warning{ + name = "HOSTILE LIFEFORMS"; + pixel_y = 29 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tpG" = ( +/obj/machinery/vending/sovietsoda, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"tql" = ( +/turf/template_noop, +/area/survivalpod/superpose/DemonPool) +"tqs" = ( +/obj/structure/cult/pylon, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"tqt" = ( +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"tqE" = ( +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"tro" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = -32 + }, +/turf/template_noop, +/area/survivalpod) +"trs" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"trv" = ( +/obj/structure/bonfire/permanent/sifwood, +/obj/item/weapon/reagent_containers/cooking_container/grill, +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"trL" = ( +/obj/structure/sign/science{ + pixel_y = -32 + }, +/turf/template_noop, +/area/template_noop) +"tsu" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/cult, +/area/template_noop) +"tsy" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/gorefloor, +/area/template_noop) +"tsV" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"tvd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"twL" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + maxhealth = 8000000000; + normalspeed = 0; + req_one_access = list(300) + }, +/obj/structure/fans/hardlight/colorable{ + light_color = "#D7D7D7" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/survivalpod) +"txe" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"txi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"txt" = ( +/obj/structure/plasticflaps, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/floortube{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/sign/warning{ + name = "\improper Trash Ejection"; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"txz" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id = "SP-Cell2"; + name = "Cell Door" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"txD" = ( +/obj/effect/mist, +/turf/simulated/floor/water/pool, +/area/template_noop) +"txG" = ( +/obj/structure/table/standard, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"txT" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/tech_disk, +/obj/item/weapon/disk/tech_disk, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"tyC" = ( +/obj/machinery/honey_extractor, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"tyE" = ( +/obj/structure/constructshell/cult, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"tyI" = ( +/obj/structure/grille/rustic, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/window/basic, +/obj/structure/window/basic{ + dir = 4; + tag = "icon-window (EAST)" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"tyX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"tzb" = ( +/obj/machinery/vending/wallmed1{ + name = "NanoMed Wall"; + pixel_x = 25 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/quickdraw/syringe_case, +/obj/item/weapon/storage/quickdraw/syringe_case, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"tzZ" = ( +/obj/item/weapon/circuitboard/intercom, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tBq" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tCd" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"tCx" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"tCB" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/floodlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"tCP" = ( +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"tCR" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"tDd" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"tDh" = ( +/obj/machinery/floodlight, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"tDB" = ( +/obj/machinery/smartfridge/survival_pod, +/turf/template_noop, +/area/template_noop) +"tEc" = ( +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"tEh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"tFt" = ( +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"tFw" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"tFV" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"tGy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"tGE" = ( +/obj/item/weapon/storage/box/flare, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tGO" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"tGY" = ( +/obj/structure/fence/cut/medium, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"tHe" = ( +/obj/machinery/porta_turret/alien/destroyed, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/cult, +/area/template_noop) +"tHf" = ( +/obj/structure/bed/chair/bay/chair/padded/red, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tHx" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"tIp" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"tIA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"tJi" = ( +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"tJn" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/sink/kitchen{ + dir = 4; + pixel_x = 4; + pixel_y = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"tJU" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"tKq" = ( +/obj/machinery/light, +/turf/simulated/floor/water/deep/pool, +/area/template_noop) +"tKN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"tKW" = ( +/obj/fire, +/obj/item/trash/material/metal, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"tLe" = ( +/obj/effect/decal/remains/human, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"tLk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"tLA" = ( +/obj/effect/floor_decal/industrial/danger{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"tLC" = ( +/obj/machinery/vending/medical{ + categories = 3; + name = "hacked NanoMed Plus"; + req_access = list(300) + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"tLR" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"tLS" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/wall/shull, +/area/template_noop) +"tLX" = ( +/obj/structure/table/survival_pod, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"tMy" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"tMX" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/template_noop) +"tNd" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"tNI" = ( +/obj/machinery/smartfridge/produce, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"tOS" = ( +/obj/structure/table/fancyblack, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/obj/item/device/paicard, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"tOY" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"tPf" = ( +/obj/item/clothing/mask/muzzle, +/obj/random/trash, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"tPh" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tPk" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"tQe" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"tQB" = ( +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tRx" = ( +/obj/machinery/camera{ + c_tag = "BioResearch East"; + dir = 1; + network = list("Research") + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"tRC" = ( +/obj/structure/prop/alien/computer/hybrid, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"tRF" = ( +/turf/simulated/floor/water, +/area/survivalpod/superpose/Farm) +"tRH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"tRO" = ( +/obj/machinery/r_n_d/protolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"tSm" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"tSE" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/item/slimepotion/stabilizer, +/obj/item/slimepotion/steroid, +/obj/item/slimepotion/unity, +/obj/item/slimepotion/friendship, +/obj/item/slimepotion/friendship, +/obj/item/slimepotion/feeding, +/obj/item/slimepotion/docility, +/obj/item/slimepotion/enhancer, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"tSX" = ( +/obj/structure/table/marble{ + color = "#B03A2E" + }, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/head/helmet/space/cult, +/obj/item/clothing/shoes/cult, +/obj/item/device/soulstone, +/turf/simulated/floor/wood/alt/tile, +/area/survivalpod/superpose/DemonPool) +"tTC" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/pointdefense, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"tTT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"tTX" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"tVi" = ( +/obj/effect/floor_decal/chapel{ + dir = 8; + pixel_y = -16 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"tVn" = ( +/obj/machinery/power/rtg/fake_gen{ + desc = "Some power generation equipment that is powering the current area's thermal regulators."; + irradiate = 0; + layer = 3.01; + name = "air conditioning power generator"; + power_gen = 30000 + }, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"tVq" = ( +/obj/machinery/door/airlock/angled_tgmc, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"tVv" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"tWt" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"tWX" = ( +/obj/item/weapon/storage/box/wormcan/deluxe, +/turf/simulated/floor/outdoors/rocks, +/area/survivalpod/superpose/Farm) +"tXc" = ( +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/effect/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"tXg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/box/matches, +/obj/item/weapon/flame/match, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"tXk" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Unisex Bathroom" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"tYl" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"tYG" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/uranium, +/obj/item/stack/material/phoron{ + amount = 5; + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/stack/material/gold{ + amount = 5 + }, +/obj/item/stack/material/diamond, +/obj/item/stack/material/silver{ + amount = 5; + pixel_x = 2; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"tYH" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"tZn" = ( +/obj/machinery/light/small, +/obj/structure/table/standard, +/obj/item/weapon/bikehorn/fluff/chew_ire, +/turf/simulated/floor, +/area/survivalpod/superpose/Dinner) +"tZx" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"uas" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uat" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"uaw" = ( +/obj/structure/sign/biohazard{ + dir = 1 + }, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"uaI" = ( +/obj/machinery/smartfridge/survival_pod{ + pixel_y = 12 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uaQ" = ( +/obj/random/junk, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"uaT" = ( +/obj/structure/bed/chair/sofa/right, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ubm" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/plating, +/area/template_noop) +"ucD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/structure/closet/secure_closet{ + desc = "It's a secure locker for personnel. The first card swiped gains control."; + icon_broken = "cabinetdetective_broken"; + icon_closed = "cabinetdetective"; + icon_locked = "cabinetdetective_locked"; + icon_off = "cabinetdetective_broken"; + icon_opened = "cabinetdetective_open"; + icon_state = "cabinetdetective"; + locked = 0; + name = "personal closet"; + req_access_txt = "201" + }, +/obj/item/clothing/under/suit_jacket/female, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"ucR" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"udc" = ( +/obj/item/weapon/storage/firstaid/fire, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"udi" = ( +/obj/fire, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"udp" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"udz" = ( +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"udB" = ( +/obj/structure/bed/chair/wood, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"udG" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/pizzavoucher, +/obj/item/toy/figure, +/turf/simulated/floor/wood, +/area/template_noop) +"udM" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/orangedouble, +/turf/simulated/floor/wood, +/area/template_noop) +"ues" = ( +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "stolenlock"; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 8; + pixel_y = -22 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"ueu" = ( +/obj/machinery/door/window/brigdoor/southright{ + name = "Kitchen"; + req_access = list(300) + }, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"ueO" = ( +/turf/simulated/shuttle/wall/no_join{ + base_state = "orange"; + icon = 'icons/turf/shuttle_orange.dmi'; + icon_state = "orange" + }, +/area/survivalpod/superpose/ScienceShip) +"ufh" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ugc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ugM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ugN" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/curtain/bed{ + name = "Bathroom curtain"; + icon_state = "open"; + opacity = 0; + dir = 2; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"uhc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics Maintenance"; + req_access_txt = "201" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"uhd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uhr" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"uhA" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"uhF" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"uhM" = ( +/obj/machinery/computer/crew{ + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uhP" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"uhQ" = ( +/obj/item/device/flashlight/flare, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"uib" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/hyper, +/obj/item/weapon/cell/potato, +/obj/structure/window/reinforced, +/obj/item/weapon/cell/slime, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uig" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"uij" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/yellowdouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"uiv" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"uiD" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uiT" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-10" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"uiX" = ( +/turf/simulated/floor/wood, +/area/template_noop) +"uiY" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uje" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"ujh" = ( +/turf/simulated/shuttle/wall/dark, +/area/survivalpod/superpose/TradingShip) +"ujk" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"ujI" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ukf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"uko" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"ukN" = ( +/obj/structure/tubes, +/obj/machinery/icecream_vat, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ukP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/ScienceShip) +"ukX" = ( +/obj/machinery/librarycomp, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ukY" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"ulf" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 8; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"ulH" = ( +/turf/simulated/wall/phoron, +/area/template_noop) +"ulI" = ( +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ulT" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/closet/crate/solar, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ulU" = ( +/obj/machinery/newscaster{ + pixel_y = 29 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"umd" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"umB" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/cell/high, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"umC" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/CrashedInfestedShip) +"unL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"unS" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"uoy" = ( +/obj/random/plushie, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"uoL" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/item/weapon/weldpack, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"upo" = ( +/obj/structure/table/standard, +/obj/random/soap, +/obj/random/soap, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"upv" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"upy" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"upA" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"uqb" = ( +/obj/random/maintenance/clean, +/obj/fire, +/obj/item/trash/material/circuit, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"uqX" = ( +/obj/structure/shuttle/engine/router, +/turf/simulated/wall/shull, +/area/template_noop) +"uqZ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"urh" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"urC" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"urJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"usN" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"usP" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"usV" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"uti" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"utt" = ( +/obj/machinery/door/airlock/maintenance/rnd{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/ScienceShip) +"utw" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"utI" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"utK" = ( +/obj/item/weapon/material/fishing_net, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"utS" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/suit_jacket/burgundy, +/obj/item/clothing/shoes/dress{ + pixel_y = -9 + }, +/obj/item/clothing/mask/dolphin, +/obj/structure/curtain/black, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MethLab) +"uui" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized{ + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"uuk" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor2, +/area/template_noop) +"uuC" = ( +/obj/machinery/autolathe, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"uuF" = ( +/obj/item/weapon/beach_ball, +/turf/simulated/floor/water/deep/pool, +/area/template_noop) +"uvi" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"uvB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"uvD" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/head/bearpelt, +/obj/item/clothing/head/bowler, +/obj/item/clothing/head/caphat/cap, +/obj/item/clothing/head/beaverhat, +/obj/item/clothing/head/beret/centcom, +/obj/item/clothing/head/beret/sec, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/petehat, +/obj/item/clothing/head/collectable/pirate, +/obj/item/clothing/head/collectable/wizard, +/obj/item/clothing/head/collectable/xenom, +/obj/item/clothing/head/pin/flower/violet, +/obj/item/clothing/head/pin/flower/blue, +/obj/item/clothing/head/pin/flower/orange, +/obj/item/clothing/head/pin/flower/pink, +/obj/item/clothing/head/justice, +/obj/item/clothing/head/justice/blue, +/obj/item/clothing/head/justice/green, +/obj/item/clothing/head/justice/pink, +/obj/item/clothing/head/justice/yellow, +/obj/item/clothing/head/philosopher_wig, +/obj/item/clothing/head/plaguedoctorhat, +/obj/item/clothing/head/xenos, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uvO" = ( +/obj/structure/table/standard, +/obj/machinery/camera{ + c_tag = "Security Checkpoint"; + dir = 1; + network = list("Research") + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"uwf" = ( +/obj/structure/table/standard, +/obj/item/seeds/ambrosiavulgarisseed, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"uwm" = ( +/obj/effect/floor_decal/rust/mono_rusted3, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"uwv" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"uwD" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/tape_roll, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"uxZ" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uyW" = ( +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"uAe" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uBk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/teal, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"uBs" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"uBz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"uBA" = ( +/obj/item/weapon/storage/belt, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"uBG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"uBV" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"uCx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"uCB" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = "splock" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"uDb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"uDq" = ( +/obj/item/taperoll/medical, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"uDN" = ( +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/ScienceShip) +"uDS" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/template_noop) +"uDZ" = ( +/obj/structure/closet/crate/bin{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/structure/reagent_dispensers/water_cooler/full{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"uEC" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"uEN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uER" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/wall/wood, +/area/template_noop) +"uEV" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/pill_bottle/dice, +/obj/item/weapon/storage/dicecup, +/obj/item/weapon/storage/dicecup, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"uEW" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Engineering"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"uEY" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/book/tome/imbued, +/obj/item/weapon/digestion_remains/skull/unathi, +/obj/item/device/soulstone, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"uFg" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/survivalpod/superpose/WoodenCamp) +"uFr" = ( +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uFv" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + hackProof = 1; + id_tag = "Teshnomancer_doors"; + maxhealth = 8000000000; + normalspeed = 0; + req_one_access = list(300); + secured_wires = 1 + }, +/obj/structure/fans/hardlight/colorable{ + color = "#99ccff"; + light_color = "#99ccff" + }, +/obj/machinery/light/floortube{ + dir = 4 + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, virtually indestructible door. This one is a lot tougher then most other blast doors."; + id = "Teshnomancer_frontdoor"; + name = "Heavy Duty blast door" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"uFJ" = ( +/obj/item/device/gps/computer, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"uFK" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"uGA" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uHc" = ( +/obj/item/weapon/stool, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"uHB" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uHE" = ( +/turf/simulated/wall/shull, +/area/template_noop) +"uIc" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"uIn" = ( +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/CultShip) +"uIW" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/machinery/light, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"uJC" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"uJL" = ( +/obj/random/maintenance/engineering, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uJY" = ( +/obj/structure/table/woodentable, +/obj/item/pizzavoucher, +/turf/simulated/floor/wood, +/area/template_noop) +"uKg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"uKX" = ( +/obj/machinery/light, +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/storage/bag/chemistry, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"uLA" = ( +/obj/structure/bed/chair/wood/wings, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"uMf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"uMs" = ( +/obj/structure/bed/chair/bay/chair/padded/purple{ + dir = 8 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 3; + pixel_y = -28 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 3; + pixel_y = -38 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"uMz" = ( +/obj/item/weapon/coin/silver, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"uMH" = ( +/obj/structure/closet/crate/medical, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"uMP" = ( +/obj/machinery/door/airlock{ + name = "Charge Station" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"uMV" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/template_noop) +"uNa" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"uNn" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/turf/simulated/floor/lino, +/area/survivalpod) +"uNp" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"uOD" = ( +/obj/item/trash/syndi_cakes, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"uOQ" = ( +/obj/structure/bed/double/padded, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"uOU" = ( +/obj/fire, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"uPv" = ( +/obj/item/weapon/card/id/external, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"uPN" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/item/toy/plushie/borgplushie/medihound, +/turf/simulated/floor/lino, +/area/survivalpod) +"uQc" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"uQn" = ( +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"uQY" = ( +/obj/effect/floor_decal/spline/plain, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"uRF" = ( +/obj/structure/toilet, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"uRL" = ( +/obj/structure/barricade, +/obj/effect/floor_decal/steeldecal/steel_decals_central5, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"uRX" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"uSf" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/reagent_containers/dropper, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"uSs" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"uSI" = ( +/obj/item/bodybag, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"uSV" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/power/apc/alarms_hidden{ + dir = 8; + pixel_x = -20 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"uTm" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"uTU" = ( +/obj/machinery/power/generator{ + anchored = 1; + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"uUw" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"uUO" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"uVa" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"uWk" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/deck/cards{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/weapon/deck/cah{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/weapon/deck/holder{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"uWB" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "estrella_pump" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"uXs" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"uXD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/chemical_dispenser/full, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"uXM" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"uYe" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"uYF" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/condimentbottles, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/structure/curtain/open/bed, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"uZJ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"uZN" = ( +/obj/machinery/light/floortube/flicker{ + dir = 8; + pixel_x = -3 + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"uZW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"vak" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"vaN" = ( +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"vby" = ( +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"vcm" = ( +/turf/simulated/floor, +/area/template_noop) +"vcM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"vcN" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"vcU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"vdn" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"veQ" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"veW" = ( +/obj/structure/bed/chair/sofa/brown, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"veX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"vfl" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/storage/fancy/markers, +/obj/item/weapon/storage/fancy/markers, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/hand_labeler, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vfw" = ( +/obj/item/stack/material/steel{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vfN" = ( +/obj/effect/decal/remains/tajaran, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"vgs" = ( +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vgJ" = ( +/obj/machinery/mecha_part_fabricator, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vhi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"vhD" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"vhF" = ( +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"vig" = ( +/obj/machinery/door/blast/angled_shutter{ + dir = 4; + id = "rat" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"viG" = ( +/obj/effect/rune, +/obj/item/weapon/cat_box/black, +/turf/simulated/floor/cult, +/area/template_noop) +"vjk" = ( +/obj/structure/reagent_dispensers/acid{ + pixel_x = 30 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vjn" = ( +/obj/structure/closet/walllocker_double/south{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/carpet/blue, +/area/template_noop) +"vjV" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_tile/white, +/area/survivalpod/superpose/MethLab) +"vkx" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/template_noop) +"vkJ" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/random/maintenance/engineering, +/obj/random/maintenance/clean, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"vls" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"vlt" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"vlO" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"vma" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"vmn" = ( +/obj/structure/grille/cult, +/turf/template_noop, +/area/survivalpod/superpose/DemonPool) +"vmM" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/wood/alt{ + color = "red" + }, +/area/template_noop) +"vnh" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vnt" = ( +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vnZ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/template_noop) +"voj" = ( +/obj/effect/floor_decal/industrial/danger/full, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"voH" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"voQ" = ( +/obj/item/weapon/mining_scanner, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/void/mining, +/obj/item/clothing/head/helmet/space/void/mining, +/obj/structure/table/rack/shelf/steel, +/obj/item/device/suit_cooling_unit, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vpa" = ( +/obj/item/weapon/reagent_containers/dropper, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"vpK" = ( +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/template_noop) +"vpO" = ( +/obj/machinery/door/airlock/phoron, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"vpR" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/chainsaw, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/extinguisher, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"vpY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"vqd" = ( +/obj/machinery/vending/foodasian, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vqj" = ( +/obj/structure/fence/corner, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"vqP" = ( +/turf/simulated/shuttle/floor, +/area/survivalpod) +"vrE" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/chem_master/condimaster, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vrM" = ( +/obj/structure/table/rack/shelf, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"vsn" = ( +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/effect/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"vst" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vsG" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"vts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"vtt" = ( +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"vtN" = ( +/obj/item/device/tape/random, +/obj/item/device/taperecorder, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/structure/table/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vuA" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vuN" = ( +/obj/machinery/disperser/back{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"vuR" = ( +/obj/effect/floor_decal/techfloor, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"vve" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/fitness/heavy/lifter, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"vvq" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vvr" = ( +/obj/item/stack/material/lead{ + amount = 30 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vvE" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 4; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"vvK" = ( +/obj/structure/bed/chair/oldsofa/corner, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"vvX" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4; + id_tag = "frontgate" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"vvY" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"vwi" = ( +/obj/structure/dispenser{ + phorontanks = 0 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"vwF" = ( +/obj/item/clothing/accessory/storage/black_drop_pouches, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vwH" = ( +/obj/structure/particle_accelerator/fuel_chamber{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"vwJ" = ( +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MethLab) +"vwO" = ( +/turf/simulated/gore, +/area/survivalpod/superpose/DemonPool) +"vwY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"vxb" = ( +/obj/machinery/vending/event/costume, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vxG" = ( +/obj/item/weapon/module/power_control, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"vxV" = ( +/obj/machinery/light/small, +/obj/item/weapon/ore/diamond, +/obj/structure/sign/goldenplaque{ + desc = "Done No Harm."; + name = "Best Doctor 2552"; + pixel_y = -32 + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"vxY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"vys" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/cult, +/area/template_noop) +"vyG" = ( +/obj/structure/table/marble{ + color = "#B03A2E" + }, +/obj/random/soap{ + pixel_y = 5 + }, +/obj/random/soap, +/obj/item/weapon/towel/random{ + pixel_y = 4 + }, +/obj/item/weapon/towel/random{ + pixel_y = 4 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"vzs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vzu" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"vAB" = ( +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_x = -24; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"vAF" = ( +/obj/machinery/disperser/back{ + dir = 8 + }, +/obj/structure/ship_munition/disperser_charge/mining, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"vBi" = ( +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/cult, +/area/template_noop) +"vBF" = ( +/obj/machinery/floodlight, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"vCe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"vCM" = ( +/obj/item/weapon/storage/firstaid/regular, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vDc" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper{ + desc = "Gladstone for the last fucking time, We have crowbars for a REASON. Stop breaking in through the goddamn windows! We big red shiny doors for god's sakes!" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"vDl" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"vDX" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vEB" = ( +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"vEG" = ( +/obj/machinery/smartfridge/chemistry, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"vFo" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/ScienceShip) +"vFu" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"vFy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"vFP" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/wood, +/area/template_noop) +"vGa" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/template_noop) +"vGr" = ( +/obj/machinery/crystal/lava, +/turf/simulated/floor/lava, +/area/template_noop) +"vHx" = ( +/obj/item/frame/apc, +/turf/simulated/floor/lino, +/area/survivalpod/superpose/Dinner) +"vHL" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain, +/obj/item/weapon/pen/chameleon, +/obj/item/device/gps/advanced/science, +/obj/machinery/button/remote/blast_door{ + id = "estrella_blast"; + name = "remote blast shielding control"; + pixel_x = -1; + pixel_y = -26 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"vHX" = ( +/obj/structure/table/standard, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vHY" = ( +/turf/simulated/goreeyes, +/area/template_noop) +"vIX" = ( +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"vJk" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"vJp" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 4; + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"vJU" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vKc" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vKz" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"vKD" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"vKZ" = ( +/obj/item/pizzabox/meat{ + pixel_y = 10 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"vLo" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vLF" = ( +/obj/machinery/mech_recharger, +/obj/mecha/medical/odysseus/old, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vLM" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"vMs" = ( +/obj/structure/bed/chair/wood, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vNc" = ( +/obj/machinery/door/airlock/phoron, +/obj/structure/fans/hardlight/colorable/abductor, +/turf/simulated/shuttle/plating, +/area/template_noop) +"vNz" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"vND" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/table/reinforced, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"vNW" = ( +/obj/machinery/seed_storage/garden{ + dir = 1; + hacked = 1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod) +"vOb" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"vOq" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/WoodenCamp) +"vOs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"vOz" = ( +/obj/item/sticky_pad/random, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"vON" = ( +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"vPl" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vPq" = ( +/obj/structure/sign/warning/lethal_turrets, +/turf/simulated/wall, +/area/survivalpod/superpose/MethLab) +"vPJ" = ( +/obj/item/weapon/stool, +/obj/effect/floor_decal/rust, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"vPQ" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"vPT" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"vQf" = ( +/obj/machinery/seed_storage/garden, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vQj" = ( +/obj/item/weapon/cell/super, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"vQE" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"vQH" = ( +/obj/structure/fence/corner{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"vQI" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"vQO" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/CultShip) +"vRa" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/white/border, +/obj/machinery/computer/transhuman/designer{ + dir = 1; + req_access = list(300) + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"vRg" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/fruitgland, +/obj/item/weapon/material/knife/hook, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"vRi" = ( +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/device/starcaster_news, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/template_noop) +"vRq" = ( +/obj/machinery/camera{ + c_tag = "Workshop Storage"; + dir = 4; + network = list("Research") + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"vRZ" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"vSa" = ( +/obj/structure/bed/chair/comfy, +/turf/simulated/floor/carpet/blue2, +/area/template_noop) +"vSb" = ( +/obj/fire, +/obj/item/trash/material/device, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"vSk" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vSq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"vSC" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/template_noop) +"vTz" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vTW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_tgmc/medical_glass{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"vUr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"vUu" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/head/helmet/space/pirate, +/obj/item/clothing/suit/pirate, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/glasses/eyepatch, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"vUS" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/WoodenCamp) +"vVC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"vVH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/closet, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"vWo" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"vWB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/closet, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"vWK" = ( +/obj/structure/cryofeed, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/CrashedInfestedShip) +"vWP" = ( +/obj/machinery/door/blast/angled_shutter{ + id = "wolfsnake" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"vWT" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/ert/specialops, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"vXi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"vXz" = ( +/obj/structure/table/survival_pod, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vYf" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"vYq" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/obj/fire, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"vYu" = ( +/obj/structure/table/woodentable, +/obj/item/trash/candle, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"vYO" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/vending/foodstuffing, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vYQ" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4; + icon_state = "propulsion_r" + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"vZF" = ( +/mob/living/simple_mob/vore/lamia, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"vZQ" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vZT" = ( +/obj/structure/grille/rustic, +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"vZU" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/bed/chair/backed_red{ + dir = 1 + }, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "splock"; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 8; + pixel_y = -22 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"vZV" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/template_noop) +"wak" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod) +"waB" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/Dinner) +"waG" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"waQ" = ( +/obj/random/maintenance/cargo, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"wcD" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/table/reinforced, +/obj/machinery/door/window/northright{ + dir = 4; + name = "Medical booth" + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"wdf" = ( +/obj/structure/table/rack, +/obj/item/weapon/material/knife/ritual, +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/head/soft/solgov/veteranhat, +/obj/item/clothing/under/swimsuit/fluff/penelope, +/obj/item/weapon/makeover, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"wdk" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_y = 32 + }, +/turf/template_noop, +/area/survivalpod) +"wdm" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CultShip) +"wdC" = ( +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"wdD" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/weapon/pen/red{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/item/weapon/pen, +/obj/item/weapon/folder/red, +/obj/item/weapon/folder/red, +/obj/item/weapon/folder/red, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"weg" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"wes" = ( +/obj/structure/table/rack, +/obj/structure/loot_pile/maint/boxfort, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"weN" = ( +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"weP" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/mecha/working/ripley/firefighter, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wfe" = ( +/obj/machinery/door/airlock/angled_tgmc/security, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "xrlock" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"wgq" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"wgA" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"wgK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/sofa, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"whZ" = ( +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/template_noop) +"wiQ" = ( +/obj/machinery/power/generator, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"wiX" = ( +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"wjq" = ( +/obj/structure/bookcase/manuals/medical, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wkp" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "SP-CargoHatch"; + locked = 1; + name = "Rear Hatch" + }, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 4; + id = "SP-CargoHatch"; + name = "Rear Hatch Control"; + pixel_x = -26; + req_access = null; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wkD" = ( +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"wkN" = ( +/obj/item/organ/internal/lungs/vox, +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/obj/structure/curtain/black, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"wlA" = ( +/obj/structure/table/steel, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/wrench, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wlI" = ( +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod) +"wlX" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"wmh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wmF" = ( +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"wnc" = ( +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"wnE" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/hopdouble, +/turf/simulated/floor/wood, +/area/template_noop) +"wnI" = ( +/obj/item/clothing/accessory/poncho/thermal, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wnJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"won" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/storage/hooded/wintercoat, +/obj/item/clothing/shoes/boots/winter, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"woF" = ( +/obj/item/weapon/storage/bag/circuits, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"woT" = ( +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"wph" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"wqi" = ( +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/survivalpod/superpose/HydroCave) +"wqj" = ( +/obj/item/trash/material/metal, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"wqk" = ( +/turf/simulated/wall/solidrock, +/area/template_noop) +"wql" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/plating, +/area/template_noop) +"wqs" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/salvageable/personal, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"wqz" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"wqK" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/structure/curtain/open/privacy, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"wra" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"wrd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"wre" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"wrm" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wrx" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"wrH" = ( +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"wrX" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"wsc" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 10 + }, +/obj/machinery/clonepod/transhuman/full, +/turf/simulated/shuttle/floor, +/area/survivalpod) +"wso" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"wsp" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/CultShip) +"wsv" = ( +/obj/machinery/computer/arcade/battle, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wsY" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"wtD" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 8; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wtM" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"wvs" = ( +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"wvy" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"wvZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wwo" = ( +/obj/structure/barricade, +/turf/simulated/floor, +/area/survivalpod/superpose/MethLab) +"wwH" = ( +/obj/structure/table/alien/blue, +/turf/simulated/floor/atoll, +/area/template_noop) +"wwI" = ( +/obj/machinery/door/window/survival_pod, +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wwM" = ( +/obj/item/weapon/stool, +/obj/random/projectile/scrapped_shotgun, +/obj/random/cash, +/obj/machinery/light/small, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"wwQ" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/freezer, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wxa" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "SP-Cell2"; + name = "Cell Door"; + pixel_x = -25; + pixel_y = 8; + req_one_access = list(2,4) + }, +/obj/structure/closet/walllocker_double/survival/south, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"wxO" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"wyg" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"wym" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/spring{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wyB" = ( +/obj/structure/sign/science, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"wzw" = ( +/obj/structure/grille/broken/cult, +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/DemonPool) +"wzD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/ScienceShip) +"wzN" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/reagent_containers/food/snacks/clownburger, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"wzT" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 8; + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wAr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wAw" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"wAy" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/outdoors/rocks, +/area/survivalpod/superpose/Farm) +"wAz" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"wAC" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/cedouble, +/turf/simulated/floor/carpet/oracarpet, +/area/template_noop) +"wBt" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"wBG" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"wBL" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/cult, +/area/template_noop) +"wBM" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wCa" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"wCu" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + on = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wCB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"wCE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"wDk" = ( +/turf/simulated/floor/water/pool, +/area/template_noop) +"wDp" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor/plating, +/area/template_noop) +"wDA" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"wDQ" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"wEa" = ( +/obj/structure/table/standard, +/obj/item/stack/material/steel{ + amount = 2 + }, +/obj/item/stack/material/steel{ + amount = 2 + }, +/obj/item/stack/material/glass{ + amount = 15 + }, +/obj/item/stack/material/glass{ + amount = 15 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wEn" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"wEq" = ( +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"wEC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wEE" = ( +/turf/simulated/floor/gorefloor, +/area/survivalpod/superpose/HellCave) +"wET" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/floortube/flicker{ + pixel_y = 13 + }, +/turf/simulated/floor/cult, +/area/template_noop) +"wEV" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/red, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"wFe" = ( +/obj/fire, +/obj/item/trash/material/metal, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"wFf" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/gun/energy/ionrifle/pistol, +/obj/item/weapon/gun/energy/ionrifle, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wFs" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"wFu" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wFw" = ( +/obj/machinery/power/thermoregulator, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"wGb" = ( +/obj/item/weapon/bone/skull/unknown, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"wGh" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"wGW" = ( +/obj/fiftyspawner/sblucarpet, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wHu" = ( +/obj/structure/closet/secure_closet/medical3, +/obj/item/device/gps/medical, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wHx" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wHy" = ( +/obj/structure/table/fancyblack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"wHD" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/Dinner) +"wHW" = ( +/obj/structure/filingcabinet/filingcabinet, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wIb" = ( +/turf/simulated/wall/r_lead, +/area/template_noop) +"wIj" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/table/sifwooden_reinforced, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"wIv" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/Dinner) +"wIy" = ( +/obj/structure/tubes, +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wJr" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wKl" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/item/trash/material/circuit, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"wKp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + desc = "Talk... listen through this."; + name = "Station Intercom (Brig Radio)"; + pixel_y = -21; + wires = 7 + }, +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/ScienceShip) +"wKL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/random/trash, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"wLt" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Pool" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Pool" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Pool" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"wLu" = ( +/obj/structure/urinal{ + pixel_y = 24 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"wLG" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wLV" = ( +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "fridge_sci"; + icon_contents = "chem"; + icon_state = "fridge_sci"; + name = "Phoron storage"; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wMH" = ( +/obj/item/weapon/circuitboard/mass_driver, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wMI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"wMJ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"wMK" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"wNM" = ( +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/CrashedInfestedShip) +"wNV" = ( +/obj/machinery/disperser/back{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/template_noop) +"wOU" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"wPm" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/CultShip) +"wPT" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"wQC" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"wQH" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"wQX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"wRf" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wRm" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/floor/atoll, +/area/template_noop) +"wSy" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"wTh" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/vending/coffee{ + categories = 3; + dir = 8; + name = "hacked Hot Drinks machine"; + prices = list() + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod) +"wTi" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"wTj" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"wTm" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_coffee{ + dir = 8; + pixel_y = 0; + pixel_x = 4 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"wTo" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"wTp" = ( +/obj/structure/cult/talisman, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"wTs" = ( +/mob/living/simple_mob/vore/demonAI/covern{ + faction = "neutral" + }, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/DemonPool) +"wTH" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"wTW" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/structure/table/rack/shelf, +/obj/item/weapon/reagent_containers/glass/bucket/wood{ + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/glass/bucket/wood, +/turf/simulated/floor/wood, +/area/template_noop) +"wUg" = ( +/turf/simulated/floor/plating, +/area/survivalpod/superpose/ScienceShip) +"wUr" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/yellowdouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"wUy" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod{ + id_tag = "splock" + }, +/obj/structure/barricade/planks, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"wUF" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"wUM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"wUX" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/cliff/automatic{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"wVz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"wVA" = ( +/obj/item/weapon/circuitboard/firealarm, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wVE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"wVK" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"wWO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"wWX" = ( +/turf/simulated/floor/redgrid/off, +/area/template_noop) +"wXg" = ( +/obj/item/device/taperecorder, +/obj/item/device/tape/random, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = -21 + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod) +"wXs" = ( +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "Teshnomancer_frontdoor"; + name = "Front Door"; + pixel_x = -26; + req_one_access = list(300) + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"wYc" = ( +/turf/simulated/floor/tiled, +/area/template_noop) +"wYk" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/closet/crate/wooden, +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/blackcandle_box, +/obj/item/weapon/storage/fancy/blackcandle_box, +/obj/item/weapon/storage/fancy/whitecandle_box, +/obj/item/weapon/storage/fancy/whitecandle_box, +/obj/item/weapon/flame/lighter/zippo, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wYs" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"wYv" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/structure/sign/vacuum{ + desc = "A beacon used by a teleporter."; + icon = 'icons/obj/radio.dmi'; + icon_state = "beacon"; + name = "tracking beacon" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wYI" = ( +/obj/structure/railing/grey{ + dir = 1; + health = 8000000000; + maxhealth = 8000000000; + name = "durable grey railing" + }, +/obj/machinery/r_n_d/server{ + health = 800000000; + id_with_download_string = "300"; + id_with_upload_string = "300"; + name = "Technomancer R&D Server"; + produces_heat = 0; + server_id = 300; + use_power = 0 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"wYV" = ( +/obj/structure/plasticflaps/mining, +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"wZm" = ( +/obj/machinery/recharge_station, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/template_noop) +"wZr" = ( +/mob/living/simple_mob/vore/aggressive/deathclaw, +/turf/simulated/floor/tiled/dark, +/area/template_noop) +"wZA" = ( +/obj/item/weapon/reagent_containers/food/drinks/shaker{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/teapot{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"xaq" = ( +/obj/item/weapon/reagent_containers/blood, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/deck/tarot, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xbm" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"xbr" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xbw" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + icon_state = "map_vent_out"; + use_power = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/template_noop) +"xbO" = ( +/obj/structure/table/glass, +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xbQ" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/random/maintenance/engineering, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xbR" = ( +/obj/structure/coatrack, +/obj/machinery/button/windowtint{ + id = "h-living"; + pixel_x = -27 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xcc" = ( +/obj/machinery/vending/fitness{ + categories = 3; + name = "hacked SweatMAX"; + prices = list() + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"xda" = ( +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"xdd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/obj/machinery/atmospherics/unary/vent_pump, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xdf" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xdn" = ( +/turf/simulated/wall/log_sif, +/area/survivalpod/superpose/WoodenCamp) +"xdq" = ( +/obj/structure/grille/cult, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/survivalpod/superpose/DemonPool) +"xec" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"xed" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/CrashedInfestedShip) +"xeq" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"xev" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/wall/dark, +/area/template_noop) +"xfs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xfK" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/floor_decal/rust, +/obj/effect/floor_decal/steeldecal/steel_decals3, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"xfO" = ( +/obj/random/maintenance/medical, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"xfR" = ( +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"xgc" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastleft{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/CrashedInfestedShip) +"xgg" = ( +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"xgw" = ( +/obj/structure/fans, +/turf/simulated/floor/wood, +/area/template_noop) +"xhp" = ( +/turf/simulated/mineral/ignore_mapgen/cave, +/area/template_noop) +"xhy" = ( +/obj/structure/sign/biohazard, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"xhB" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"xhI" = ( +/obj/item/trash/cigbutt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"xhJ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/fancy/candle_box, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"xhP" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = -32 + }, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/fuzzy, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/suit/iasexy, +/obj/item/clothing/under/sexybunny_white/sexybunny_black, +/obj/item/clothing/under/dress/maid/sexy, +/obj/item/clothing/head/collectable/rabbitears, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/ScienceShip) +"xhW" = ( +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"xhX" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/CrashedInfestedShip) +"xhY" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/box/bodybags, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/device/sleevemate, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/device/defib_kit/compact/loaded, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/device/binoculars, +/obj/item/device/bluespaceradio, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/weapon/storage/backpack/dufflebag/emt, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xij" = ( +/obj/structure/sign/science{ + pixel_y = 32 + }, +/turf/template_noop, +/area/template_noop) +"xiw" = ( +/obj/machinery/vending/tool{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/CrashedInfestedShip) +"xiy" = ( +/obj/machinery/vending/cola{ + contraband = null; + products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind=0,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb=0,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist=0,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up=0,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea=0,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice=0,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale=0) + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"xiW" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"xjd" = ( +/obj/item/stack/material/cloth{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"xjj" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/Farm) +"xjk" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/coatrack, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/Dinner) +"xjx" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xjB" = ( +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xkk" = ( +/obj/machinery/mecha_part_fabricator/pros, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"xkx" = ( +/obj/fire, +/obj/fire, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"xky" = ( +/obj/structure/constructshell/cult, +/turf/simulated/floor/gorefloor2, +/area/survivalpod/superpose/HellCave) +"xkN" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xlj" = ( +/obj/effect/floor_decal/techfloor, +/obj/fire, +/obj/fire, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/CrashedInfestedShip) +"xlt" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xlI" = ( +/obj/structure/flora/tree/jungle, +/turf/simulated/floor/outdoors/grass/sif, +/area/survivalpod/superpose/Farm) +"xmy" = ( +/obj/item/weapon/dice, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/template_noop) +"xmG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xmO" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"xmQ" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/microwave/advanced{ + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"xmX" = ( +/turf/simulated/floor/cult, +/area/survivalpod/superpose/HellCave) +"xnS" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xoF" = ( +/obj/structure/closet/secure_closet{ + icon_broken = "hydrosecurebroken"; + icon_closed = "hydrosecure"; + icon_locked = "hydrosecure1"; + icon_off = "hydrosecureoff"; + icon_opened = "hydrosecureopen"; + icon_state = "hydrosecure"; + locked = 0; + name = "botanist's locker"; + req_access_txt = "201" + }, +/obj/item/clothing/mask/bandana, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"xoH" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"xpa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"xpH" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/ScienceShip) +"xpL" = ( +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/CrashedInfestedShip) +"xpM" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/deathsposal{ + desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; + name = "\improper DISPOSAL: LEADS TO EXTERIOR"; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"xpR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xqh" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 5 + }, +/turf/simulated/floor/carpet, +/area/template_noop) +"xqK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/machinery/suspension_gen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"xqL" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/CrashedInfestedShip) +"xri" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/structure/curtain/open/privacy, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xrs" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xry" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/cell/hyper, +/obj/random/coin, +/obj/random/cash/huge, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"xrZ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"xsr" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/CrashedInfestedShip) +"xsC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xsH" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xty" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/storage/backpack/cultpack, +/obj/item/weapon/material/knife/ritual, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xtZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xuk" = ( +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"xup" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xuE" = ( +/obj/structure/railing/grey, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/projectile/SVD, +/obj/item/ammo_magazine/m762svd, +/obj/item/ammo_magazine/m762svd, +/turf/simulated/floor/outdoors/rocks, +/area/template_noop) +"xvF" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xwj" = ( +/obj/structure/table/bench/wooden, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/item/device/flash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"xwu" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xwy" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"xxA" = ( +/obj/machinery/door/blast/angled_shutter{ + dir = 4; + id = "panther" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"xxE" = ( +/obj/effect/decal/remains/mouse, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"xxV" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"xxY" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"xyk" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xym" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xyL" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"xyN" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"xzd" = ( +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xzN" = ( +/obj/machinery/chem_master, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"xzW" = ( +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"xAm" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xAN" = ( +/obj/item/seeds/pumpkinseed, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xAW" = ( +/obj/structure/closet/secure_closet/miner{ + locked = 0 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xBc" = ( +/obj/effect/catwalk_plated/white, +/turf/simulated/floor/tiled/steel_dirty{ + color = "grey" + }, +/area/template_noop) +"xBf" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"xBt" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/ScienceShip) +"xBE" = ( +/obj/structure/closet/cabinet, +/turf/simulated/floor/wood, +/area/template_noop) +"xBL" = ( +/obj/fire, +/obj/fire, +/turf/simulated/floor/lava/outdoors, +/area/survivalpod/superpose/DemonPool) +"xCa" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/full, +/obj/effect/floor_decal/rust, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"xCe" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"xCM" = ( +/obj/structure/cult/forge, +/turf/simulated/floor/cult, +/area/survivalpod/superpose/DemonPool) +"xDo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xDH" = ( +/obj/item/device/pda, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"xDI" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xEh" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/north, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/HydroCave) +"xEi" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/machinery/organ_printer/flesh/full, +/obj/item/device/radio/intercom/department/medbay{ + pixel_y = -21 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod) +"xEm" = ( +/obj/machinery/light, +/obj/structure/table/standard, +/obj/item/weapon/soap, +/obj/item/weapon/towel{ + color = "#0000FF" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xFn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xFQ" = ( +/obj/structure/table/fancyblack, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xFS" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/template_noop) +"xGz" = ( +/obj/structure/fence/corner{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/Farm) +"xGX" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xHd" = ( +/obj/item/frame/apc, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 22 + }, +/obj/random/junk, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"xHn" = ( +/obj/item/weapon/material/knife/ritual, +/obj/structure/table/fancyblack, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xHG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"xIV" = ( +/obj/machinery/power/thermoregulator/southerncross{ + dir = 4; + pixel_x = -28 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod) +"xIY" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xJd" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + layer = 2.6 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"xJe" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/template_noop) +"xJq" = ( +/obj/structure/table/standard, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/clothing/mask/surgical, +/obj/item/weapon/surgical/retractor{ + pixel_y = 6 + }, +/obj/item/weapon/surgical/scalpel, +/obj/item/weapon/surgical/surgicaldrill, +/obj/item/weapon/surgical/circular_saw, +/obj/item/stack/nanopaste, +/obj/item/weapon/surgical/hemostat{ + pixel_y = 4 + }, +/obj/item/weapon/surgical/cautery{ + pixel_y = 4 + }, +/obj/item/weapon/surgical/FixOVein{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/weapon/surgical/bonesetter, +/obj/item/weapon/surgical/bonegel{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xJu" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xJA" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/coin/diamond, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"xJC" = ( +/obj/structure/window/bay/phoronreinforced, +/turf/simulated/floor, +/area/template_noop) +"xJV" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser{ + phorontanks = 0 + }, +/turf/simulated/floor/plating, +/area/template_noop) +"xKK" = ( +/obj/item/weapon/stool/baystool/padded, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"xLE" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"xMg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"xMm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xMt" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"xMD" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/cliff/automatic{ + dir = 6 + }, +/turf/simulated/floor/outdoors/dirt, +/area/template_noop) +"xMG" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"xNr" = ( +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xNs" = ( +/turf/template_noop, +/area/survivalpod/superpose/CrashedInfestedShip) +"xNC" = ( +/obj/structure/fitness/weightlifter, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/boxing/gym, +/area/template_noop) +"xNH" = ( +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"xOd" = ( +/obj/structure/cult/talisman, +/obj/item/device/soulstone, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"xOf" = ( +/obj/structure/table/bench/wooden{ + pixel_x = -9 + }, +/obj/structure/flora/pottedplant/small{ + pixel_x = -9; + pixel_y = 10 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"xOI" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/item/modular_computer/laptop/preset/custom_loadout/cheap{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/pizzavoucher, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xOX" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id = "SP-Cell"; + name = "Cell Door" + }, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/floor/tiled/techmaint, +/area/template_noop) +"xPe" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/FieldLab) +"xQk" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/lightorange/border, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod) +"xQo" = ( +/obj/structure/grille/cult, +/turf/simulated/wall/cult, +/area/survivalpod/superpose/HellCave) +"xQE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/ScienceShip) +"xRh" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"xRq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xRx" = ( +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/structure/table/standard, +/obj/item/weapon/storage/firstaid, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"xRF" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xSc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"xSr" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/weapon/gun/projectile/pistol, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/storage/box/survival/comp{ + starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi) + }, +/turf/simulated/floor/carpet/bcarpet, +/area/template_noop) +"xSw" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"xTk" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xTE" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"xTJ" = ( +/obj/structure/cult/talisman, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xTK" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/manual/hydroponics_pod_people, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/Farm) +"xTO" = ( +/obj/effect/floor_decal/chapel{ + dir = 4; + pixel_y = -16 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"xTV" = ( +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xUg" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"xUr" = ( +/obj/structure/closet/cabinet, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/toy, +/obj/random/toy, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"xUw" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1; + icon_state = "comfychair_preview" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"xUy" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/template_noop) +"xVh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/machinery/meter, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xVt" = ( +/obj/structure/table/steel_reinforced, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xVz" = ( +/obj/structure/sign/warning/engineering_access, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/template_noop) +"xVA" = ( +/obj/structure/table/steel_reinforced, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/firstaid, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xVN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xWf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 8; + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"xWu" = ( +/obj/structure/inflatable/door, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"xXc" = ( +/obj/machinery/button/windowtint{ + id = "SP-Pool"; + pixel_y = -29 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/template_noop) +"xXW" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/random/maintenance/engineering, +/obj/fire, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"xYc" = ( +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"xYQ" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/lava, +/area/survivalpod/superpose/HellCave) +"xZo" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/WoodenCamp) +"xZI" = ( +/obj/machinery/r_n_d/protolathe, +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/floor/purple, +/area/survivalpod/superpose/ScienceShip) +"yaE" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/floor, +/area/survivalpod/superpose/CrashedInfestedShip) +"yaZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ybc" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"ybe" = ( +/obj/structure/closet/l3closet/janitor, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"ybm" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ybr" = ( +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/HydroCave) +"ybs" = ( +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ybM" = ( +/obj/machinery/porta_turret/alien{ + faction = "neutral" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/CultShip) +"ybX" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/wood, +/area/template_noop) +"ycw" = ( +/obj/structure/table/woodentable, +/obj/item/trash/tray, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"ycD" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/computer/rdservercontrol, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/ScienceShip) +"ycL" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"ydl" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"ydt" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/CrashedInfestedShip) +"ydF" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/Dinner) +"ydL" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/FieldLab) +"ydP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/blue, +/area/survivalpod) +"yed" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"yej" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/steel_dirty, +/area/survivalpod/superpose/MethLab) +"yev" = ( +/obj/structure/closet/hydrant{ + pixel_x = -32 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"yez" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/template_noop) +"yeD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/old_tile/green, +/area/survivalpod/superpose/MethLab) +"yeQ" = ( +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/CrashedInfestedShip) +"yfe" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/radio/emergency, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/bluespaceradio, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/device/binoculars, +/obj/item/device/perfect_tele, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/storage/pill_bottle/corophizine, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"yfA" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"ygs" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/template_noop) +"ygz" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"ygL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"yhU" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"yhZ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/kara, +/area/template_noop) +"yie" = ( +/obj/structure/closet/wardrobe/pjs, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"yii" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/template_noop) +"yis" = ( +/turf/template_noop, +/area/survivalpod/superpose/MethLab) +"yiH" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/blue, +/turf/simulated/shuttle/floor/voidcraft, +/area/template_noop) +"yjr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/ScienceShip) +"yjM" = ( +/obj/structure/bookcase/bookcart, +/turf/simulated/floor/wood/alt/parquet, +/area/template_noop) +"ykk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"yku" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/template_noop) +"ykO" = ( +/obj/machinery/holosign/bar{ + id = "SP-baropen" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/template_noop) +"ykW" = ( +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/template_noop) +"ylk" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/overgrown{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ylL" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/HydroCave) +"ymd" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/template_noop) + +(1,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(2,1,1) = {" +ktQ +vIX +vIX +vIX +vIX +vIX +wJr +vIX +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +kFn +kzL +vIX +vIX +vIX +kFn +vIX +poX +pXr +ktQ +vIX +uYe +nAY +uYe +ljl +uYe +jNU +uYe +jNU +uYe +vIX +ktQ +vIX +kFn +ljl +uYe +ljl +ooR +ljl +uYe +ljl +kFn +vIX +ktQ +ljl +ljl +aiV +uYe +ljl +ykO +grU +guO +pzt +pzt +pzt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +hmh +hmh +hmh +dEQ +hmh +dEQ +hmh +hmh +ktQ +ljl +uYe +aiV +ljl +uYe +ljl +aiV +uYe +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(3,1,1) = {" +ktQ +vIX +ubm +ubm +ydl +ydl +cYi +cYi +cYi +cYi +hor +vIX +ktQ +vIX +pva +rio +iEQ +axU +bNX +bNX +bNX +wYV +xsH +xsH +ktQ +iJp +hxl +bjw +mqR +sPP +tCP +cqC +daD +okz +eTA +qyk +ktQ +iJp +xvF +udp +pHl +ljl +iEQ +cxo +ljl +jmZ +jmZ +qyk +ktQ +ljl +xDI +tFt +qII +nrh +cJg +iEQ +ibW +qJQ +mVT +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +rsf +dtF +gmc +pyD +pan +wRf +wRf +hmh +ktQ +rHR +jsw +wRf +rOc +wFf +dtt +wRf +wBM +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(4,1,1) = {" +ktQ +vIX +wFw +cYi +cYi +cYi +cYi +cYi +cYi +cYi +qUO +vIX +ktQ +iJp +mGP +lkW +xNr +jtI +jtI +jtI +jtI +vIX +pLO +lBN +ktQ +ljl +uiD +bjw +ezi +sPP +tCP +tCP +tCP +tCP +kPX +ljl +ktQ +ljl +yfe +cII +tFt +aDl +xNr +oCX +ljl +tFt +ryL +ljl +ktQ +ljl +hcO +tFt +klq +tFt +igs +xNr +uiX +uiX +uiX +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +tjL +ecn +ecn +ecn +ecn +wRf +wRf +nEd +ktQ +ljl +osB +rwO +adB +pEM +wRf +wRf +wRf +uCB +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +rZR +rZR +rZR +rZR +rZR +rZR +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(5,1,1) = {" +ktQ +vIX +vBF +cYi +ykW +wIb +xJC +wIb +uJC +cYi +cYi +vIX +ktQ +vIX +pva +tCB +xNr +jtI +qSf +jtI +rXd +vIX +wlA +lBN +ktQ +rHR +sYD +bjw +ezi +sPP +tCP +cqC +daD +okz +tCP +xUg +ktQ +rHR +ecV +enH +vWT +ljl +ccy +vDX +ljl +dmo +ljl +xUg +ktQ +rHR +lGp +tFt +rQp +tFt +ptv +xNr +iJA +ybX +hah +rWB +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +cND +uXs +cND +uXs +wRm +wRf +aRa +hmh +ktQ +ljl +xkk +rwO +uhP +vrM +wRf +wRf +egx +ljl +ktQ +ktQ +ktQ +ccQ +mgk +ktQ +ktQ +ktQ +rZR +rZR +pIr +kJA +ktQ +ktQ +ktQ +abV +pIr +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(6,1,1) = {" +ktQ +vIX +cYi +cYi +wIb +ovj +egE +llP +wIb +cYi +cYi +vIX +ktQ +vIX +pmC +bjw +xNr +gyJ +lDn +wwQ +vSk +vIX +aoX +vIX +ktQ +ljl +sQZ +bjw +nyP +sPP +tCP +cqC +daD +okz +tCP +ljl +ktQ +ljl +ljl +ljl +ljl +ljl +wSy +oLq +qJz +bjw +rnY +ljl +ktQ +ljl +nhW +tFt +lSb +tFt +igs +xNr +iJA +eGN +hah +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +wnc +ocl +cND +cND +hmh +bjO +wRf +dEQ +ktQ +rHR +brT +wRf +lJD +ktD +wRf +wRf +wRf +xUg +ktQ +ktQ +ktQ +fdy +naL +ktQ +ktQ +ktQ +rZR +nko +hOR +uHE +iru +xFS +oPZ +uHE +rug +nko +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(7,1,1) = {" +ktQ +aoX +cYi +psw +xJC +rUp +hWD +lCN +dlp +cYi +cYi +vIX +ktQ +aiV +jne +bjw +xNr +xNr +xNr +xNr +xNr +teo +gzW +wkp +ktQ +rHR +kZC +bjw +ezi +sPP +tCP +tCP +tCP +tCP +tCP +nAY +ktQ +rHR +dED +tCP +tCP +sgU +xNr +xNr +xNr +xNr +gzW +sTA +ktQ +ljl +aap +tFt +eMd +tFt +ljl +oLy +iJA +sFg +gsw +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +bWO +wwH +cND +eFO +hmh +wRf +dwr +hmh +ktQ +ljl +fqW +dms +ggx +pYg +wRf +cZt +rYG +aiV +ktQ +ktQ +ktQ +jlq +hiN +ktQ +ktQ +rZR +rZR +hOR +uHE +uHE +wWX +wWX +lUH +uHE +uHE +rug +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(8,1,1) = {" +ktQ +vIX +cYi +cYi +wIb +xJe +oPG +llP +wIb +cYi +cYi +vIX +ktQ +vIX +vIX +eVP +xjB +rVR +rVR +rVR +exa +xNr +gzW +gzu +ktQ +ljl +jZE +bjw +ezi +sPP +tCP +ljl +ljl +ljl +ljl +ljl +ktQ +ljl +xSr +lwH +lwH +ljl +fyJ +aQr +tNd +xUw +oMv +ljl +ktQ +ljl +gPj +tFt +tFt +tFt +bQS +xNr +iJA +tod +hah +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +kAV +ppH +cND +cND +hmh +ulU +rrm +dEQ +ktQ +ljl +wtD +jSe +iNO +jVq +wRf +wRf +uMs +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +rZR +jlq +uHE +uHE +sWl +wWX +wWX +wWX +sWl +uHE +uHE +hiN +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(9,1,1) = {" +ktQ +vIX +rbR +cYi +wOU +wIb +xJC +wIb +kyV +cYi +cYi +vIX +ktQ +vIX +eMa +cjw +sBk +voQ +rgK +jUA +pPz +tFt +ahE +qyk +ktQ +rHR +niA +bjw +ezi +sPP +tCP +ljl +wLu +tFt +tFt +xUg +ktQ +rHR +ljl +ljl +ljl +ljl +fyJ +aQr +tNd +xUw +uIW +xUg +ktQ +rWB +aGo +qxt +buN +biA +ljl +qDr +iJA +ybX +pLn +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +cND +tTX +cND +tTX +wRm +wRf +oXM +hmh +ktQ +rHR +sql +oLU +wzT +dlh +wRf +wHx +cRS +ljl +ktQ +ktQ +ktQ +aRf +nKt +ktQ +rZR +ktQ +ktQ +uHE +wWX +wWX +wWX +wWX +wWX +wWX +wWX +uHE +ktQ +ktQ +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(10,1,1) = {" +ktQ +vIX +rbR +cYi +cYi +cYi +cYi +cYi +cYi +cYi +cYi +vIX +ktQ +aoX +dtF +hFu +tFt +tFt +tFt +tFt +tpq +tFt +tFt +aiV +ktQ +ljl +jPN +bjw +fdh +tCP +tCP +jBK +tFt +ljl +jBK +ljl +ktQ +ljl +dED +tCP +tCP +sgU +xNr +bjw +bjw +bjw +bjw +ljl +ktQ +ljl +knL +hFu +tFt +vaN +nsj +xNr +uiX +uiX +uiX +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +kYH +wyg +fbo +fbo +juK +wRf +wRf +dEQ +ktQ +ljl +yhU +aiV +ljl +yhU +aiV +ljl +yhU +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +ccQ +tLS +uqX +uHE +uHE +oYf +uHE +oYf +uHE +uHE +uqX +tLS +mgk +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(11,1,1) = {" +ktQ +vIX +ubm +ubm +ydl +ydl +cYi +cYi +cYi +cYi +kYy +vIX +ktQ +vIX +ecV +kam +dUz +xAW +fQz +bmJ +qQJ +qzo +kmg +vIX +ktQ +iJp +fzN +bjw +ezi +pCb +wrX +ljl +yku +ljl +sEH +qyk +ktQ +iJp +xSr +lwH +lwH +ljl +rmo +hFV +fyN +eOx +sRM +qyk +ktQ +ljl +ecV +dYd +ukN +aCt +ljl +pjJ +oVg +koo +jfk +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +fxq +iNo +wRf +sEG +qSh +qUy +wRf +hmh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +quT +ktQ +gxF +rZR +uHE +jSG +uHE +cYi +oVL +oVL +oVL +oVL +oVL +cYi +uHE +jSG +uHE +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(12,1,1) = {" +ktQ +vIX +vIX +vIX +vIX +vIX +wJr +vIX +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +aiV +xMt +vIX +vIX +vIX +xMt +vIX +vIX +vIX +ktQ +vIX +kiX +pzt +itw +pzt +efF +ljl +yhU +ljl +xMt +vIX +ktQ +vIX +xMt +ljl +yhU +ljl +ooR +ljl +yhU +ljl +oxy +vIX +ktQ +ljl +ljl +aiV +yhU +ljl +ykO +grU +yhU +ljl +ljl +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hmh +hmh +hmh +hmh +dEQ +hmh +dEQ +hmh +hmh +ktQ +vIX +vIX +kFn +vIX +vIX +vIX +kFn +vIX +vIX +ktQ +ktQ +ktQ +sFk +ktQ +bTD +ktQ +nko +ktQ +uHE +cYi +cYi +ozT +oVL +ozT +cYi +cYi +uHE +ktQ +nko +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(13,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +dHt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vIX +bop +dwq +acE +dVK +lLn +bHr +doG +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +cYi +ozT +oVL +ozT +cYi +cYi +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(14,1,1) = {" +ktQ +vIX +aiV +vIX +vIX +aiV +vIX +vIX +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +kzL +vIX +mVN +caa +caa +boq +vIX +ktQ +vIX +vIX +aiV +vIX +aiV +vIX +vIX +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +aiV +vIX +vIX +grU +vIX +vIX +vIX +vIX +vIX +ktQ +cya +cya +cya +cya +cya +cya +cya +cya +cya +cya +cya +ktQ +cya +cya +cya +cya +cya +cya +cya +cya +cya +ktQ +ljl +uYe +ljl +uYe +ljl +uYe +aiV +uYe +ljl +ktQ +iJp +cgk +ifk +tFt +txz +kvl +tFt +bST +aoX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +cYi +uHE +jue +uHE +cYi +cYi +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(15,1,1) = {" +ktQ +vIX +kpk +hVV +vIX +kpk +hVV +vIX +pTl +jME +hiw +vIX +ktQ +vIX +jqZ +tCP +upv +xXc +vIX +arV +pxU +txD +txD +hTE +ktQ +vIX +xGX +tFt +inb +bjw +haL +vZV +vIX +igl +xOf +vIX +ktQ +vIX +dXj +qII +ohI +xKK +iEQ +mlT +tOS +lHE +nSp +vIX +ktQ +cya +lIQ +cYi +cYi +oqd +sPt +cYi +cYi +kxj +cYi +cya +ktQ +cya +oqd +cYi +kxj +cYi +cYi +cYi +cYi +cya +ktQ +rHR +hxl +vXz +aWn +ljl +fJV +akr +vZU +xUg +ktQ +vIX +mOn +sZq +vIX +vIX +vIX +ecq +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +uHE +uHE +uHE +wWX +uHE +uHE +uHE +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(16,1,1) = {" +ktQ +vIX +uiX +fJf +vIX +uiX +vjn +vIX +pTl +sKC +tin +aiV +ktQ +vIX +jqZ +tCP +bjw +aSS +ett +oef +mgw +txD +mTh +mMV +ktQ +vIX +lGp +tFt +pwl +bjw +mOW +pTV +vIX +eIQ +gkR +aiV +ktQ +vIX +fzk +tFt +nhQ +nJR +xNr +euE +lkn +pqN +izM +vIX +ktQ +cya +lIQ +cYi +cYi +oqd +mUW +cYi +cYi +oVQ +cYi +cya +ktQ +cya +bYB +cYi +jMj +cYi +poP +poP +dHt +cya +ktQ +ljl +mjX +bjw +ioY +ljl +itF +xNr +xNr +bOp +ktQ +vIX +uDZ +tFt +vIX +nEP +dxm +vxY +nEv +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +rZR +ktQ +ktQ +odl +uHE +wWX +aUJ +wWX +aUJ +wWX +uHE +mOB +ktQ +ktQ +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(17,1,1) = {" +ktQ +vIX +kdw +hca +vIX +eBn +vnZ +vIX +ssy +dNT +hhl +aiV +ktQ +vIX +aan +tCP +bjw +hdt +vIX +wTW +mNb +txD +txD +bfB +ktQ +vIX +nqx +tFt +pKV +bjw +jpm +mWP +vIX +uiX +sLq +vIX +ktQ +vIX +fSR +tFt +tlY +nJR +xNr +dlO +tCP +tCP +tCP +aiV +ktQ +cya +lIQ +cYi +cYi +bYB +dZo +cYi +cYi +cYi +cYi +cya +ktQ +cya +dZo +cYi +cYi +cYi +pPZ +mep +yii +cya +ktQ +rHR +kFY +kFY +rpl +ljl +bys +xNr +hWp +xUg +ktQ +vIX +wEV +tFt +dWH +tEh +wRf +wRf +bDQ +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +pIr +pIr +pIr +hOR +uHE +wWX +uHE +wWX +uHE +wWX +uHE +bbP +pIr +pIr +pIr +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(18,1,1) = {" +ktQ +vIX +vIX +aUJ +vIX +vIX +aUJ +vIX +uRX +tDd +tDd +vIX +ktQ +vIX +jqZ +tCP +bjw +edH +vIX +mVN +caa +caa +boq +vIX +ktQ +vIX +wBG +tFt +pso +bjw +ooD +gvZ +vIX +aUJ +vIX +vIX +ktQ +vIX +siQ +tFt +eRq +veQ +xNr +iuC +huQ +fxm +jdk +vIX +ktQ +cya +iVU +cuI +cYi +cYi +cYi +cYi +cYi +cYi +cYi +cya +ktQ +cya +cuI +cYi +cYi +cYi +cYi +cYi +cYi +cya +ktQ +ljl +mDE +xNr +dVe +ebv +xNr +xNr +bEw +ljl +ktQ +aoX +rXS +ifk +dWH +hxz +pcj +rrh +gSa +qyk +ktQ +ktQ +ktQ +ktQ +ktQ +rZR +rZR +ktQ +jlq +uHE +uHE +uHE +uHE +jue +uHE +uHE +uHE +uHE +hiN +ktQ +rZR +rZR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(19,1,1) = {" +ktQ +qwe +nmX +xNr +dVe +xNr +xNr +iDZ +xNr +xNr +gzW +qwe +ktQ +vIX +jqZ +tCP +bjw +xNr +fcD +wDk +wDk +jUq +jUq +uui +ktQ +vIX +lbl +tFt +fAL +bjw +rMI +fuv +teo +xNr +gzW +qwe +ktQ +vIX +ecV +qPB +jTC +veQ +wVz +sQp +tki +rMI +gzW +sTA +ktQ +cya +cYi +cYi +cYi +cYi +poP +mep +vGa +gOT +lqm +cya +ktQ +cya +wDp +wDp +cya +cYi +lqm +gOT +eua +cya +ktQ +rHR +jYG +kST +ljl +sVt +rrh +eBu +eBu +xUg +ktQ +vIX +qkA +rGq +vIX +nYL +cTU +dVe +otF +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +uHE +oVL +oVL +oVL +uHE +cYi +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(20,1,1) = {" +ktQ +vIX +vIX +aUJ +vIX +vIX +aUJ +vIX +iXo +bjw +hLg +vIX +ktQ +vIX +vIX +wwI +bjw +xNr +frA +wDk +fpQ +jUq +jUq +jXc +ktQ +vIX +bVT +ivM +vIX +pWk +vIX +vIX +vIX +aUJ +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +eWv +iQi +dPn +vIX +vIX +vIX +vIX +ktQ +cya +wDp +wDp +cya +cYi +poP +dHt +wql +gOT +lqm +cya +ktQ +cya +cYi +cYi +cya +cYi +vGa +gOT +mSt +cya +ktQ +ljl +dyz +fsJ +ljl +lUl +xNr +xNr +xNr +aiV +ktQ +vIX +vIX +xMt +vIX +grU +vIX +xMt +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +uHE +cYi +qTC +oVL +oVL +oVL +qTC +cYi +uHE +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(21,1,1) = {" +ktQ +vIX +qnV +nIk +vIX +dRE +xUy +vIX +kzz +bjw +rZy +vIX +ktQ +vIX +xvF +gVr +sbY +xNr +pUs +wDk +wDk +jUq +tKq +jXc +ktQ +vIX +aBZ +clB +uRF +vaN +vIX +uJY +cGj +uiX +syj +aiV +ktQ +vIX +jWG +koN +lBe +vIX +iQi +vIX +oEG +sfl +nxX +vIX +ktQ +cya +cYi +cYi +cya +cYi +poP +dHt +lqf +gOT +mSt +cya +ktQ +cya +cYi +cYi +cya +cYi +cYi +cYi +cYi +cya +ktQ +rHR +wBM +xNr +kyw +xNr +dVe +pot +kWB +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +jlq +uHE +cYi +cYi +uHE +oVL +oVL +oVL +uHE +cYi +cYi +uHE +hiN +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(22,1,1) = {" +ktQ +vIX +gtI +uiX +vIX +gtI +uiX +vIX +sGj +bjw +jRP +vIX +ktQ +vIX +knL +gVr +sbY +xNr +frA +wDk +wDk +uuF +jUq +jXc +ktQ +vIX +knL +clB +tJU +vaN +vIX +xBE +pFp +szA +szA +vIX +ktQ +vIX +tpk +uiX +uiX +tXk +qcu +rrV +sfH +vaN +abH +vIX +ktQ +cya +cYi +cYi +cya +cYi +pPZ +pPZ +lqf +gOT +mSt +cya +ktQ +cya +wDp +wDp +cya +cya +cya +cya +cya +cya +ktQ +ljl +yhU +aiV +yhU +aiV +yhU +aiV +yhU +ljl +ktQ +ljl +uYe +ljl +uYe +ljl +uYe +ljl +uYe +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +cYi +uHE +uHE +nbf +uHE +uHE +cYi +cYi +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(23,1,1) = {" +ktQ +vIX +kpk +wnE +vIX +kpk +udM +vIX +jiZ +dNs +mow +vIX +ktQ +vIX +ecV +gVr +sbY +rmo +qLj +wDk +wDk +jUq +jUq +hAF +ktQ +vIX +diw +nXT +hlc +sAG +vIX +xBE +krk +wAC +rdw +vIX +ktQ +vIX +dtq +pUj +fCf +vIX +aCJ +vIX +efD +ugN +ugN +vIX +ktQ +cya +cYi +cYi +cya +cYi +cYi +cYi +cYi +cYi +cYi +cya +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rHR +ezi +mLJ +lcu +oul +hxl +jiy +vLF +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +nko +uHE +tLS +tLS +tLS +uqX +cYi +cYi +cYi +uqX +tLS +tLS +tLS +uHE +nko +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(24,1,1) = {" +ktQ +vIX +aiV +vIX +vIX +aiV +vIX +vIX +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +kzL +vIX +aIS +wLt +wLt +hyB +vIX +ktQ +vIX +vIX +vIX +vIX +vIX +vIX +vIX +vIX +vIX +vIX +vIX +ktQ +ogy +ogy +fBH +ogy +ogy +pHn +vIX +vIX +vIX +vIX +vIX +ktQ +cya +wDp +wDp +cya +cya +cya +cya +cya +cya +cya +cya +ktQ +cya +cya +cya +cya +cya +cya +cya +ktQ +ktQ +ktQ +ljl +uYe +oiN +uYe +ljl +uYe +oiN +uYe +ljl +ktQ +ljl +cAb +xNr +xNr +pUy +uxZ +xNr +xNr +aXn +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +cYi +xxV +uHE +uHE +nbf +uHE +uHE +cYi +cYi +xxV +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(25,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +oqd +cYi +jMj +cYi +poP +cya +ktQ +ktQ +ktQ +rHR +wBM +bkF +ldx +ljl +rsf +rKi +eqX +xUg +ktQ +rHR +gwH +aFE +qmJ +paG +xNr +xNr +dJs +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uHE +cYi +cYi +cYi +uHE +cYi +cYi +cYi +uHE +cYi +cYi +cYi +uHE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(26,1,1) = {" +ktQ +vIX +vIX +kFn +vIX +aiV +vIX +kFn +vIX +vIX +ktQ +vIX +vIX +kFn +vIX +kzL +vIX +kFn +vIX +vIX +ktQ +vIX +vIX +kFn +vIX +vIX +vIX +kFn +vIX +vIX +ktQ +vIX +vIX +vIX +prz +grU +mIs +ygs +ygs +eyY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +dHt +cYi +cYi +cYi +pPZ +cya +ktQ +ktQ +ktQ +oiN +vlO +rKi +jDG +ljl +fPP +rKi +rKi +oiN +ktQ +ljl +fbz +xNr +gyL +kEJ +xNr +vJp +dIr +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +fdy +cYi +cYi +cYi +iax +cYi +cYi +cYi +iax +cYi +cYi +cYi +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(27,1,1) = {" +ktQ +vIX +uSV +ppI +hMm +thn +ymd +enm +uMV +vIX +ktQ +vIX +oIA +qoz +pUy +iEQ +dxl +sEI +iwX +vIX +ktQ +vIX +wEV +dYd +ibw +acE +bop +ihD +psD +vIX +ktQ +vIX +eet +iuj +bjw +iEQ +bjw +bjw +glG +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +cYi +cYi +kxj +yii +lqm +cya +ktQ +ktQ +ktQ +rHR +mJe +rKi +swU +ljl +ljl +poB +ues +xUg +ktQ +rHR +khM +hlM +xNr +foD +xNr +xVh +pcX +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(28,1,1) = {" +ktQ +aiV +jYo +tFt +tFt +njx +gQf +tnK +qbt +qyk +ktQ +aiV +ske +mnQ +bnA +xNr +lnr +tFt +qpl +aoX +ktQ +iJp +jYo +tFt +bFd +tFt +bFd +gmL +sAG +aoX +ktQ +vIX +jnw +bjw +axE +xNr +vQf +bjw +xIY +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +wDp +wDp +cya +gOT +mSt +cya +ktQ +ktQ +ktQ +ljl +xCa +rKi +rKi +wUy +sOY +wRf +rKi +rzQ +ktQ +ljl +gDk +xNr +xNr +ceL +jFJ +hTh +xbw +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +uER +pLQ +pLQ +pxI +pLQ +pLQ +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(29,1,1) = {" +ktQ +vIX +xJV +jFQ +eLG +yez +rNF +tnK +lrs +vIX +ktQ +wyB +uiv +tFt +kxa +igB +vgJ +tFt +tOY +vIX +ktQ +vIX +fCH +eLw +cMh +ebA +lng +xOX +vIX +vIX +ktQ +vIX +oIN +bjw +quV +xNr +uHB +bjw +glG +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +cYi +cYi +cya +eua +vGa +cya +ktQ +ktQ +ktQ +rHR +xzN +wRf +eTx +ljl +kri +qvB +wRf +xUg +ktQ +rHR +qiS +vjk +sdi +ufh +ehG +fbY +taZ +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pxI +cEM +fxI +fxI +cEM +fAS +rVS +yjM +yjM +rVS +fAS +pLQ +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(30,1,1) = {" +ktQ +rWB +vIX +vIX +vIX +kZI +xNr +xNr +gzW +qwe +ktQ +qwe +nmX +xNr +xNr +xNr +xNr +xNr +gzW +qwe +ktQ +vIX +dWH +fak +vIX +buk +vIX +tFt +apk +vIX +ktQ +vIX +rwM +bjw +bjw +xNr +glG +bjw +glG +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cya +wDp +wDp +cya +cya +cya +cya +ktQ +ktQ +ktQ +oiN +vEG +rKi +spF +ljl +veW +dKg +rKi +oiN +ktQ +ljl +yhU +ljl +yhU +ljl +yhU +ljl +yhU +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +fxI +cEM +fxI +fxI +cEM +fAS +rVS +yjM +yjM +rVS +fAS +pLQ +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(31,1,1) = {" +ktQ +vIX +xvF +udp +tLX +gCk +xNr +oSY +ufh +xVz +ktQ +vIX +lFH +vvq +kVL +bjw +kEY +bze +kmp +vIX +ktQ +vIX +pvH +vtN +rFd +xVN +dEQ +tFt +dBQ +vIX +ktQ +vIX +aGo +qxt +xOI +igB +glG +bjw +glG +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rHR +rIq +rKi +kfj +ljl +kqw +cZN +wRf +xUg +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +aVT +tCP +rVS +cEM +fxI +fxI +cEM +fAS +rVS +yjM +yjM +rVS +fAS +hmO +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(32,1,1) = {" +ktQ +iJp +dtF +hFu +tFt +njx +xNr +bjw +xkN +vIX +ktQ +aoX +knL +hFu +tpq +skA +vzs +mtx +npj +qyk +ktQ +aoX +aPT +bLf +bAU +dSa +vIX +cRO +vIX +qyk +ktQ +vIX +knL +hFu +pso +xNr +glG +bjw +xIY +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ljl +kvN +aiV +kvN +ljl +yhU +oiN +yhU +ljl +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kkK +tCP +rVS +cEM +rVS +rVS +cEM +rVS +rVS +rVS +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(33,1,1) = {" +ktQ +vIX +ecV +kam +akZ +iSR +rmo +lnD +hCP +vIX +ktQ +vIX +ecV +mdk +dEb +fpt +elq +ulf +jzN +vIX +ktQ +vIX +ble +skJ +vIX +mPa +lnv +bPY +wxa +vIX +ktQ +vIX +ecV +ryh +rjB +rmo +bjw +bjw +glG +lTG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +hml +ktQ +xwu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +tyI +tCP +rVS +cEM +rVS +rVS +cEM +rVS +rVS +rVS +rVS +rVS +rVS +rVS +rVS +ktQ +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(34,1,1) = {" +ktQ +vIX +vIX +xMt +aiV +xVz +grU +xMt +vIX +vIX +ktQ +vIX +vIX +aiV +vIX +vIX +vIX +xMt +vIX +vIX +ktQ +vIX +vIX +xMt +vIX +grU +vIX +xMt +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +grU +mIs +ygs +ygs +umd +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +jor +ktQ +sMc +qxh +euL +qvK +uhQ +vnt +lGy +pCP +ktQ +jqm +toJ +ktQ +srO +vfw +dFC +gEF +gBM +lyR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +fxI +fxI +fxI +fxI +fxI +rVS +rVS +ktQ +rVS +asa +njF +bpC +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(35,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +toB +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vOz +qxh +dVP +iXg +uhQ +vnt +vwF +aQX +ktQ +ktQ +ktQ +ktQ +srO +vfw +dFC +gEF +gBM +lyR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +hmO +pLQ +pLQ +pLQ +pLQ +hmO +rVS +ktQ +rVS +iRK +eNw +mlI +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(36,1,1) = {" +ktQ +vIX +kFn +ljl +ljl +uYe +voj +ljl +kFn +vIX +ktQ +vIX +kFn +vIX +vIX +vIX +vIX +vIX +kFn +vIX +ktQ +vIX +vIX +vIX +vIX +aiV +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +grU +vIX +vIX +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +dnY +sUq +akf +fWL +kgQ +eLg +wnI +biS +ktQ +ktQ +ktQ +ktQ +srO +vfw +dFC +gEF +lHe +lyR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rVS +wUF +wYs +yhZ +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(37,1,1) = {" +ktQ +iJp +xvF +udp +vPl +cCT +iEQ +daH +wQC +qyk +ktQ +vIX +xvF +gUc +hMg +vIX +ipI +now +pib +qyk +ktQ +vIX +jdM +mrl +mdn +ovi +aXy +cSH +xqh +vIX +ktQ +vIX +keY +hiw +upv +iEQ +vIX +xBE +hjW +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +loD +sUq +pTC +gzu +liR +eLg +gzu +gzu +ktQ +ktQ +ktQ +ktQ +srO +vfw +dFC +gEF +pGG +lyR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(38,1,1) = {" +ktQ +ljl +exk +cII +tFt +njx +xNr +daH +jfi +ljl +ktQ +aoX +knL +hFu +tFt +vIX +wZm +vaN +hAk +vIX +ktQ +vIX +nsP +uiX +gSr +ovi +lxX +xmy +scA +vIX +ktQ +vIX +bYV +stk +bjw +xNr +nDv +uiX +uiX +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xDH +qHq +cLh +gzu +liR +kmR +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +quA +quA +quA +quA +quA +quA +quA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(39,1,1) = {" +ktQ +ljl +ecV +enH +hnO +muj +xNr +daH +xbO +ljl +ktQ +vIX +xTE +ory +ivM +pxr +dJi +vPQ +lDx +vIX +ktQ +vIX +dTe +aTe +eFL +uQY +nIo +bia +odd +vIX +ktQ +vIX +bph +rFE +bjw +xNr +vIX +ifS +sCN +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uPv +qHq +sjw +gzu +agZ +kmR +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(40,1,1) = {" +ktQ +rWB +ljl +ljl +ljl +gtD +xNr +daH +csk +rWB +ktQ +qwe +nmX +xNr +wFs +boP +rMI +xNr +gzW +qwe +ktQ +qwe +nmX +xNr +xNr +xNr +xNr +xNr +gzW +qwe +ktQ +vIX +nHJ +uAe +tJn +tiK +vIX +vIX +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +gzu +gzu +gzu +bEb +gAN +gzu +gzu +ktQ +jqm +mep +ktQ +uQn +iGV +nmo +iBc +fBC +vvr +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rVS +asa +njF +bpC +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(41,1,1) = {" +ktQ +ljl +xhY +uvi +ojc +kXJ +xNr +ovB +hsc +ljl +ktQ +vIX +anZ +aUJ +vIX +vIX +vIX +aUJ +udG +vIX +ktQ +vIX +sbm +faD +faD +qeq +fNP +vSq +mso +vIX +ktQ +vIX +xvF +tFt +vIX +igB +vIX +xBE +hjW +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +gzu +gzu +gzu +bEb +ffG +gzu +gzu +ktQ +ktQ +ktQ +ktQ +uQn +iJC +nmo +iBc +fBC +mxJ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +hmO +pLQ +pLQ +pLQ +pLQ +ktQ +ktQ +ktQ +rVS +iRK +eNw +mlI +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(42,1,1) = {" +ktQ +aiV +jYo +tFt +tFt +njx +xNr +owJ +brX +ljl +ktQ +iJp +vRi +vSC +dVG +vIX +vpK +hPJ +dVG +vIX +ktQ +vIX +uaI +rzN +rzN +qWd +vve +nsn +ifK +vIX +ktQ +vIX +knL +tFt +vIX +xNr +nDv +uiX +uiX +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +gzu +gzu +gzu +alI +rBo +gzu +gzu +ktQ +ktQ +ktQ +ktQ +uQn +tbY +mdt +iBc +fBC +qkd +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +fxI +fxI +fxI +fxI +fxI +ktQ +ktQ +ktQ +rVS +wUF +wYs +yhZ +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(43,1,1) = {" +ktQ +iJp +xri +nZb +xri +rzg +rmo +sdH +vuA +qyk +ktQ +vIX +dMv +qyo +kdw +vIX +iPm +qyo +nOM +qyk +ktQ +vIX +cWA +lXs +oEt +erW +xNC +wso +iLK +vIX +ktQ +vIX +ecV +ifG +vIX +rmo +vIX +vFP +sCN +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +gzu +gzu +gzu +gzu +gzu +gzu +gzu +ktQ +ktQ +ktQ +ktQ +uQn +wGW +mdt +xjd +gzu +xuk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +aVT +tCP +rVS +cEM +rVS +rVS +cEM +rVS +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(44,1,1) = {" +ktQ +ogy +lEh +pzt +pzt +xBf +voj +ljl +xMt +vIX +ktQ +vIX +xMt +aiV +vIX +vIX +vIX +aiV +xMt +vIX +ktQ +vIX +vIX +vIX +vIX +aiV +vIX +vIX +vIX +vIX +ktQ +vIX +vIX +vIX +vIX +grU +vIX +vIX +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +rRO +gjB +xjd +gzu +xuk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kkK +tCP +rVS +cEM +rVS +rVS +cEM +rVS +rVS +rVS +rVS +rVS +rVS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(45,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +keG +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +fhd +gjB +lZH +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +tyI +tCP +rVS +cEM +fxI +fxI +cEM +fxI +pxI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(46,1,1) = {" +ktQ +vIX +kFn +vIX +kFn +vIX +kFn +vIX +ktQ +vIX +vIX +vIX +aiV +vIX +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +aBk +drr +ktQ +vCM +bGp +oZx +pda +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +fxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(47,1,1) = {" +ktQ +iJp +rsf +eYv +nDz +aIB +bMN +qyk +ktQ +vIX +jOt +jOt +jPu +ybe +ybe +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +udc +nAj +oZx +pda +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pxI +cEM +fxI +fxI +cEM +fxI +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(48,1,1) = {" +ktQ +vIX +lgM +wRf +wRf +lvA +kPX +vIX +ktQ +vIX +ewo +bjw +bjw +bjw +kWn +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +tbq +sJz +fmw +exi +gzu +ktQ +ktQ +ktQ +ktQ +tDB +ldS +ktQ +iTi +fen +qvK +jTS +aQX +dnY +qxh +euL +fiQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(49,1,1) = {" +ktQ +iJp +fPP +yiH +wIy +bVP +tCP +mit +ktQ +qwe +nmX +xNr +fZo +hqE +bhd +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +oNL +pIq +fmw +jxl +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vOz +kgQ +qvK +lhe +bHC +hPx +qxh +owp +fiQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(50,1,1) = {" +ktQ +vIX +myq +xJd +gBP +oMw +gKR +vIX +ktQ +vIX +ulI +xNr +bwY +vfl +tFt +aiV +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +mQU +iTi +jxl +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +lea +ktQ +loD +kcy +iXg +hln +bHC +oDE +qxh +lcD +vwF +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(51,1,1) = {" +ktQ +iJp +cTy +hPD +flG +mbc +okz +aoX +ktQ +vIX +smW +rmo +sUj +vJU +owS +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +wMH +iTi +nfX +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +loD +sjw +iXg +vCM +bHC +sMc +qxh +lcD +vwF +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +eJO +sQo +rVS +rVS +rVS +rVS +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(52,1,1) = {" +ktQ +vIX +xMt +vIX +xMt +vIX +xMt +vIX +ktQ +vIX +vIX +kzL +vIX +vIX +vIX +vIX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +tjg +cZu +dGK +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +qFn +liR +fWL +oNL +tQB +sMc +qxh +akf +uBA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +eJO +bzu +mHY +mHY +bJP +rVS +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(53,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +tzZ +gzu +hPx +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +qFn +liR +fWL +kmR +tGE +bEb +qxh +akf +wnI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +ktO +bzu +vSa +mHY +bJP +rVS +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(54,1,1) = {" +ktQ +vby +vby +vkx +vby +vby +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +wVA +gzu +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iCs +liR +gzu +kmR +biS +bEb +sUq +hSF +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +ktO +bzu +mHY +mHY +bJP +rVS +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(55,1,1) = {" +ktQ +vby +rsf +eYv +bkF +bGI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +nRD +gzu +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iCs +alI +gzu +ffG +biS +bEb +sUq +utK +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +rVS +sQo +rVS +rVS +rVS +rVS +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(56,1,1) = {" +ktQ +nTD +rlA +wRf +wRf +mit +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rEO +alI +gzu +gAN +lyR +xDH +sUq +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +pLQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(57,1,1) = {" +ktQ +vby +fPP +jqx +idJ +iAQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +bAD +gzu +gAN +awy +xDH +sUq +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(58,1,1) = {" +ktQ +vby +vby +hzP +vby +vby +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cYi +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +bAD +gzu +rBo +gzu +uPv +gzu +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(59,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gzu +kJe +gzu +rBo +gzu +uPv +gzu +gzu +gzu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(60,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(61,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +ktQ +xGz +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +pNf +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(62,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +jCp +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +gGk +jTF +jTF +jTF +jTF +jTF +jTF +mtA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(63,1,1) = {" +ktQ +dDB +dDB +dDB +jCp +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +jCp +dDB +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +jTF +jTF +dMu +dMu +kYZ +kYZ +dMu +dMu +dMu +dMu +dMu +jTF +gGk +gGk +gGk +gGk +gGk +gGk +jTF +jTF +jTF +mtA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(64,1,1) = {" +ktQ +dDB +dDB +dDB +hin +hin +hin +hin +hin +hin +dDB +hin +hin +hin +hin +hin +hin +dDB +hin +hin +hin +hin +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +dMu +dMu +dMu +dMu +dMu +tXg +ltd +xhJ +exB +dMu +xTK +idp +dMu +gGk +gGk +kZU +kZU +kZU +gGk +gGk +jTF +gGk +jTF +mtA +ktQ +plu +plu +sSn +plu +plu +fMT +plu +plu +plu +fKu +qFs +bJc +klt +fKu +dal +dal +dal +cKI +dal +dal +dal +dal +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +lTH +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(65,1,1) = {" +ktQ +dDB +hin +hin +dDB +hin +hin +dDB +hin +hin +dDB +hin +hin +hin +hin +hin +hin +hin +dDB +hin +hin +dDB +hin +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +dMu +vma +dbX +rtV +dMu +ltd +oII +dbX +dbX +gIG +dbX +dbX +dMu +gGk +kZU +kZU +tRF +kZU +kZU +cJU +gGk +jTF +jTF +mtA +ktQ +plu +elG +elG +elG +tNI +elG +elG +elG +elG +elG +elG +uFv +elG +elG +elG +elG +elG +elG +elG +elG +elG +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wMK +fEX +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +rLL +ktQ +ktQ +ktQ +ktQ +ktQ +rLL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(66,1,1) = {" +ktQ +dDB +dDB +dDB +hin +hin +hin +hin +hin +hin +hin +hin +hin +nLQ +hin +hin +hin +hin +hin +hin +hin +hin +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +kYZ +bLw +dbX +dbX +gIG +dbX +dbX +dbX +dbX +dMu +dbX +dbX +dMu +gGk +kZU +tRF +tRF +tRF +kZU +kZU +gGk +gGk +jTF +mtA +ktQ +vNW +elG +ijK +brR +wlI +jMW +wXg +nnR +anP +elG +wXs +bJc +xIV +kmz +fXk +jFN +duO +wYI +auy +tRO +saF +elG +dal +ktQ +ktQ +lTH +lTH +lTH +lTH +lTH +elO +lTH +lTH +lTH +oUZ +oUZ +lTH +sec +lTH +bAJ +bAJ +bAJ +lTH +sec +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(67,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +ocu +wlX +wlX +ocu +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +kYZ +tdG +dbX +dbX +dMu +aZu +dbX +dbX +idp +dMu +uij +vYu +dMu +gGk +kZU +tRF +tRF +tRF +tRF +kZU +kZU +gGk +jTF +mtA +ktQ +snB +elG +ioA +pJO +pJO +atC +agN +pBG +aep +elG +bJc +bJc +utI +iiA +eRr +wak +cnw +fWu +ihi +pAF +iaN +elG +dal +ktQ +wMK +fEX +lTH +vUu +ezf +lTH +rbm +mrl +eoQ +lTH +jXz +jXz +lTH +vAF +cOv +wYc +wYc +wYc +jJt +wNV +owd +lTH +bAJ +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(68,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +ocu +ocu +rYO +rYO +rYO +ocu +rKB +rKB +ocu +rYO +rYO +rYO +ocu +rYO +rYO +rYO +ocu +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +dMu +nfR +tdG +tYl +dMu +dMu +dMu +gIG +dMu +dMu +dMu +dMu +dMu +gGk +kZU +tRF +tRF +tRF +tRF +tRF +kZU +gGk +jTF +mtA +ktQ +pZV +elG +pwp +pJO +pJO +aPX +rNJ +rNJ +rNJ +elG +feF +bJc +klt +iiA +eRr +qTA +qBN +gVG +ihi +lgy +nza +elG +dal +wMK +fEX +lTH +elO +jjA +oIC +lTH +sTv +uiX +qlo +lTH +ngS +rqf +cqS +tMX +wYc +wYc +izZ +apq +wYc +wYc +bwU +lhg +xNr +lTH +bAJ +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(69,1,1) = {" +ktQ +dDB +dDB +dDB +ocu +ocu +jyt +vMs +bpl +dqE +ocu +rKB +kVd +ocu +vMs +bpl +dqE +vMs +bpl +dqE +jyt +ocu +ocu +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +dMu +dMu +kYZ +dMu +dMu +dMu +wqz +dbX +dMu +lze +jTF +jTF +kdl +gGk +kZU +tRF +tRF +tRF +tRF +tRF +kZU +gGk +jTF +mtA +ktQ +lwG +elG +sWy +tVn +pJO +ueu +aep +aep +dfi +nhv +qkX +pQW +qkX +fyt +rfr +qTA +aWG +olR +ihi +nqN +iIC +elG +wdk +ktQ +lTH +lTH +eAS +uiX +hjs +lTH +lTH +cAC +lTH +lTH +dGL +tiJ +sko +wYc +wYc +wYc +ayh +jLN +pqZ +jLN +pRb +xNr +xNr +jkv +xNr +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(70,1,1) = {" +ktQ +dDB +dDB +ocu +ocu +jea +jyt +vMs +vst +dqE +ocu +wlX +wlX +ocu +vMs +vst +dqE +vMs +vst +dqE +jyt +cyr +ocu +ocu +dDB +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +jTF +jTF +jTF +dMu +wqz +dbX +dMu +vOb +jTF +jTF +jTF +gGk +kWR +wAy +tRF +tRF +tRF +tRF +kZU +gGk +jTF +mtA +ktQ +hdU +elG +elG +qdm +twL +lcC +bGa +mxr +sOH +nPH +gKm +eMZ +oYO +iiA +svg +ihs +pAF +nuh +ihi +abb +pSs +elG +dal +ktQ +lTH +xgw +uiX +uiX +uiX +cAC +uiX +uiX +uiX +fzP +tiJ +tiJ +sko +wYc +gcv +wYc +lTH +jLN +pqZ +jLN +lTH +gkK +bTe +wiQ +tnp +lTH +lTH +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(71,1,1) = {" +ktQ +dDB +ocu +ocu +jyt +jyt +jyt +jyt +jyt +jyt +xjk +jyt +jyt +tMy +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +ocu +ocu +dDB +ktQ +mtA +jTF +jTF +gGk +gGk +gue +gGk +gGk +dMu +dMu +gIG +dMu +bab +gGk +gGk +gGk +gGk +gGk +tWX +wAy +tRF +tRF +tRF +kZU +gGk +jTF +mtA +ktQ +noD +elG +cDG +eAz +fVD +kEc +fmE +ptG +cyi +wUM +fam +rIQ +dQp +hrp +kaq +aWS +rQA +ddq +kcX +eMZ +iDq +elG +dal +ktQ +lTH +xev +uiX +uiX +uiX +lTH +lTH +cAC +lTH +lTH +dGL +tiJ +sko +wYc +wYc +wYc +dgY +jLN +pqZ +jLN +pRb +xNr +xNr +dVe +lFp +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(72,1,1) = {" +ktQ +dDB +rYO +jyt +vMs +pUP +dqE +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +ocu +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +gGk +gGk +gGk +gGk +gGk +gGk +gGk +gGk +gGk +gGk +jTF +sRV +gGk +gGk +kWR +wAy +tRF +kZU +kZU +gGk +jTF +mtA +ktQ +loQ +elG +sjL +tgE +lCl +iiA +mRN +iJI +oml +nPH +xbm +pAF +jJI +elG +eMZ +pAF +cTn +ieK +ieK +ieK +bEt +elG +dal +wMK +fEX +lTH +elO +uiX +uiX +lTH +rbm +uiX +qlo +lTH +rpe +tiJ +fDk +wYc +wYc +wYc +izZ +apq +wYc +wYc +atV +tLA +xNr +lTH +bAJ +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(73,1,1) = {" +ktQ +dDB +rYO +jyt +vMs +wre +dqE +lAS +qUz +qUz +qUz +qUz +qUz +qUz +qUz +qUz +qUz +qUz +qUz +qUz +jyt +jyt +qAG +qAG +rYO +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +jTF +jTF +gGk +gGk +jTF +jTF +jTF +jTF +gGk +gGk +sRV +trv +sRV +gGk +gGk +tWX +kZU +kZU +cle +gGk +jTF +mtA +ktQ +fsy +wMJ +qkX +gjM +eMp +mmX +mNs +qkX +qkX +vFy +eMZ +pAF +eMZ +elG +pqO +pqO +oEU +elG +elG +elG +elG +elG +dal +ktQ +wMK +fEX +lTH +gvF +kvg +lTH +sTv +jJG +eoQ +lTH +tiJ +tiJ +scp +vuN +mrx +wYc +wYc +wYc +mCt +aVj +idw +lTH +bAJ +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(74,1,1) = {" +ktQ +dDB +ocu +ocu +ocu +ocu +ocu +ocu +vKc +vQE +nav +vKc +vKc +vKc +vKc +vKc +vKc +nav +vQE +vKc +jyt +jyt +vst +bpl +rYO +dDB +ktQ +mtA +jTF +jTF +ndw +ndw +ndw +qHO +asr +ndw +ndw +ndw +ndw +jTF +jTF +gGk +gGk +sRV +jTF +gGk +gGk +gGk +gGk +gGk +gGk +gGk +jTF +mtA +ktQ +tyC +iiA +gxq +gxq +eMZ +rqq +eMZ +qbg +yev +rjJ +eMZ +pAF +eMZ +eMZ +eMZ +pAF +fBI +kos +aKd +lPt +oSt +elG +dal +ktQ +ktQ +lTH +lTH +lTH +lTH +lTH +elO +lTH +lTH +lTH +miS +miS +lTH +piK +lTH +bAJ +bAJ +bAJ +lTH +piK +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(75,1,1) = {" +ktQ +dDB +ocu +cBn +rKB +cDm +rKB +wlX +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +jyt +qgu +jyt +jyt +jsc +jsc +rYO +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +nkc +esy +nkc +mov +hSv +ndw +jTF +gGk +gGk +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +gGk +jTF +mtA +ktQ +fTP +iiA +sCs +gxq +pAF +pAF +pAF +pAF +pAF +nNR +pAF +pAF +pAF +pAF +pAF +pAF +qLu +rih +mMX +ljo +nTX +elG +wdk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wMK +fEX +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +aee +ktQ +ktQ +ktQ +ktQ +ktQ +aee +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(76,1,1) = {" +ktQ +dDB +ocu +kbV +rKB +rKB +rKB +wlX +jyt +vrE +nmJ +lgp +uIc +hdB +rol +teN +wTm +icn +hhw +ghq +jyt +jyt +jyt +jyt +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +nkc +mov +nkc +mov +hSv +ndw +jTF +jTF +gGk +jTF +jTF +dMu +dMu +kYZ +kYZ +kYZ +dMu +dMu +jTF +jTF +mtA +ktQ +myb +iiA +vwi +eMZ +pAF +exz +tsV +tsV +exz +ydP +xcc +tnO +hhG +tLC +lrg +pAF +iSB +ljo +ljo +ljo +xEi +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +lTH +lTH +lTH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(77,1,1) = {" +ktQ +dDB +rYO +del +rKB +hyu +rKB +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +sGo +ocu +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +nkc +mov +nkc +mov +hSv +ndw +jTF +jTF +gGk +gGk +jTF +dMu +sNT +qOk +vdn +nOo +lIc +dMu +gGk +jTF +mtA +ktQ +myb +iiA +knV +eMZ +pAF +lar +wdD +vKZ +rkE +ydP +lfZ +jBA +pyq +oZL +wsc +pAF +dIq +ljo +boR +ljo +qBX +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(78,1,1) = {" +ktQ +dDB +rYO +gaf +rKB +lhY +rKB +wIv +olq +wHD +olq +olq +olq +olq +fAE +fAE +olq +olq +wHD +waB +ocu +mEk +gcO +ajg +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +amU +amU +amU +mov +hSv +ndw +jTF +jTF +gGk +gGk +jTF +dMu +pYq +lYN +lYN +lYN +lYN +dMu +jTF +jTF +mtA +ktQ +myb +iiA +xmQ +pAF +pAF +lar +pGu +uWk +dRR +ydP +oCY +vqP +vqP +vqP +vKD +pAF +tap +pXO +oji +hFH +sic +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(79,1,1) = {" +ktQ +dDB +ocu +mFk +rKB +vnh +rKB +ocu +ocu +ocu +ocu +ocu +ocu +hPn +fXO +ocu +ocu +ocu +abX +ocu +ocu +mEk +gcO +cVO +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +amU +qHP +amU +mov +hSv +ndw +jTF +gGk +gGk +gGk +gGk +lYN +lYN +lYN +lYN +lYN +xjj +dMu +jTF +jTF +mtA +ktQ +myb +iiA +gWI +pAF +pAF +exz +rLt +rLt +joy +ydP +wqK +rer +vqP +ddo +vRa +pAF +pAF +pAF +pAF +pAF +pAF +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(80,1,1) = {" +ktQ +dDB +ocu +kVP +rKB +rKB +rKB +ocu +akz +pTg +vRZ +bMp +ocu +fSN +fHv +ocu +vHx +jFI +dMB +nrR +ocu +mEk +gcO +ouU +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +amU +eok +amU +mov +hSv +ndw +jTF +gGk +gGk +gGk +gGk +lYN +lYN +lYN +lkp +lYN +bab +dMu +jTF +jTF +mtA +ktQ +myb +iiA +pRp +pAF +mCq +uFK +ksX +cOS +wTh +ydP +gSJ +klv +vqP +ddo +qUK +pAF +gHE +iJH +emZ +pkr +rts +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(81,1,1) = {" +ktQ +dDB +ocu +bCM +rKB +rKB +rKB +ydF +qju +qju +qju +ocu +ocu +wIv +ocu +ocu +tlz +umB +dMB +dMB +ocu +ocu +ocu +ocu +ocu +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +qzG +mov +qzG +mov +hSv +ndw +jTF +gGk +gGk +gGk +gGk +lYN +lYN +lYN +lYN +lYN +bab +dMu +jTF +jTF +mtA +ktQ +fTP +rkb +qkX +cXq +oKt +nac +mhA +mhA +mhA +huz +wqK +rer +vqP +ddo +dAo +pAF +iuA +jlR +jlR +jlR +xQk +elG +wdk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(82,1,1) = {" +ktQ +dDB +dDB +ocu +ocu +tmV +rKB +ocu +qju +qju +qju +ocu +biM +eBZ +lTP +ocu +dQo +bTq +dMB +cvl +ocu +kke +ocu +ocu +dDB +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +qzG +mov +qzG +mov +hSv +ndw +jTF +gGk +gGk +gGk +jTF +dMu +lYN +lYN +lYN +lYN +lYN +dMu +jTF +jTF +mtA +ktQ +myb +elG +qgd +ewY +obZ +kXk +uNn +uNn +uNn +ydP +gSJ +klv +vqP +vqP +cIx +pAF +jXb +jlR +hEY +jlR +sLi +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(83,1,1) = {" +ktQ +dDB +dDB +dDB +ocu +ocu +ihw +ocu +pAA +kLp +fsq +ocu +dKh +eBZ +tZn +ocu +jaa +sKn +dMB +cvl +ocu +ocu +ocu +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +ndw +bUJ +mov +qzG +mov +qzG +mov +hSv +ndw +jTF +gGk +gGk +gGk +xlI +dMu +uBV +mjJ +bWy +bWy +nwf +dMu +jTF +jTF +mtA +ktQ +myb +elG +aXX +ewY +ewY +ewY +ewY +ewY +ewY +ydP +rVO +rNI +dlQ +oNG +hfj +pAF +fEC +jlR +bTA +rGi +mnC +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(84,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +wIv +ocu +ocu +ocu +ocu +ocu +ocu +ocu +ocu +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +ndw +ndw +ndw +ndw +ndw +ndw +ndw +ndw +ndw +jTF +gGk +gGk +gGk +jTF +dMu +dMu +kYZ +kYZ +kYZ +dMu +dMu +jTF +jTF +mtA +ktQ +eYK +elG +kYa +ewY +mFy +uPN +uNn +uNn +uNn +ydP +kvG +kvG +hfc +lMe +pAZ +pAF +fjA +pbm +rnG +ksO +dMD +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(85,1,1) = {" +ktQ +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +dDB +ktQ +mtA +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +gGk +gGk +gGk +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +jTF +mtA +ktQ +dal +elG +elG +elG +elG +elG +elG +elG +elG +nac +mhA +mhA +mhA +mOo +mhA +mhA +mhA +mhA +huz +elG +elG +elG +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(86,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vQH +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +aVU +sdv +aVU +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +sdv +moS +ktQ +dal +dal +dal +dal +dal +tro +dal +dal +dal +dal +dal +tro +dal +dal +dal +dal +dal +qoL +txt +qgB +dal +dal +dal +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(87,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(88,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +qRd +lNO +qRd +oDr +qRd +oDr +qRd +qRd +qRd +qRd +qRd +qRd +qRd +xNH +qRd +qRd +qRd +qRd +xNH +qRd +ktQ +nCk +fbv +fbv +fbv +fbv +fbv +fbv +fbv +nCk +nCk +fbv +fbv +fbv +fbv +fbv +fbv +fbv +nCk +ktQ +unS +ogd +ogd +aLR +yis +yis +ogd +ogd +oNj +ogd +yis +aLR +aLR +yis +yis +iyc +ogd +yis +ogd +isO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(89,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +aww +qRd +kqI +hab +fon +fon +sJN +aww +aww +aww +aww +aww +qRd +qRd +xNH +xNH +qRd +xNH +xNH +qRd +ktQ +nCk +ddf +srF +bye +liz +iwV +gbD +ddf +nCk +nCk +ddf +srF +ydL +gJz +ydL +iYD +ddf +nCk +ktQ +cgO +yis +yis +yis +yis +yis +yis +hvj +yis +yis +yis +yis +ejR +hbw +yis +yis +yis +yis +yis +cgO +ktQ +xdn +xdn +dMX +xdn +xdn +xdn +vOq +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(90,1,1) = {" +ktQ +qRd +qRd +qRd +lNO +aww +aww +ltN +wgq +dCh +dCh +djH +aww +aww +qmC +kiD +maR +ino +aww +aww +qpO +tGY +qpO +izV +qRd +qRd +ktQ +nCk +kuy +srF +srF +srF +srF +ddn +kuy +nCk +nCk +kuy +jli +srF +srF +srF +jSd +kuy +nCk +ktQ +cgO +yis +yis +yis +yis +yis +clR +udz +jNk +clR +yis +kbH +vZT +kbH +kbH +kbH +kbH +kbH +yis +cgO +ktQ +xdn +iiL +jdx +nJY +uFg +xdn +lxQ +vUS +vUS +vUS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(91,1,1) = {" +ktQ +qRd +qRd +qRd +aww +aww +xbR +chf +naM +eSv +eSv +chm +aww +eBz +qvq +hQb +fjT +pYs +aww +lMj +xNH +xNH +xNH +tZx +qRd +qRd +ktQ +nCk +xPe +srF +acH +fHw +pag +igz +xPe +nCk +nCk +xPe +bVz +jHU +esW +srF +uwf +xPe +nCk +ktQ +xwy +yis +svb +eKv +eKv +vPq +clR +kvK +hRP +aRV +pcP +kbH +vjV +vjV +sLs +hCs +hCs +kbH +yis +cgO +ktQ +xdn +iiL +jdx +jXj +xdn +xdn +xdn +fpS +fpS +fyk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(92,1,1) = {" +ktQ +qRd +lNO +lNO +lNO +gnX +uvB +vOs +wHy +dRG +dRG +xFQ +aww +wdf +eBF +iZk +oeZ +vtt +ylk +qTy +xNH +xNH +xNH +bJU +qRd +qRd +ktQ +nCk +fbv +owV +fbv +fbv +fbv +fbv +fbv +srF +srF +fbv +fbv +fbv +fbv +owV +fbv +fbv +nCk +ktQ +cgO +yis +yis +yis +yis +clR +jdj +qVw +pNd +clR +kbH +kbH +oeH +oeH +vON +xda +vON +kbH +yis +cgO +ktQ +dMX +rZj +fyQ +jdx +fxB +jdx +fxB +fpS +nbR +fpS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(93,1,1) = {" +ktQ +lNO +lNO +qRd +aww +aww +pYs +vtt +uvB +pcn +pcn +chf +aww +gHu +gOA +xyN +dRG +chf +xrs +lMj +iBk +xNH +xNH +mDX +qRd +qRd +ktQ +nCk +ddf +srF +ddf +bdX +jUV +acc +vhF +srF +srF +nFm +hUP +mYw +ddf +srF +ddf +nCk +nCk +ktQ +cgO +yis +yis +yis +lJk +jNk +onS +lVq +iQG +nCC +uwm +rUc +xpa +fPt +kAO +eMU +iip +kbH +yis +cgO +ktQ +dMX +oyy +jdx +jdx +xdn +xdn +xdn +fpS +fpS +fpS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(94,1,1) = {" +ktQ +qRd +lNO +qRd +qRd +aww +sJN +chf +vtt +oLI +hPW +tGy +sJN +tGy +oiw +dRG +dRG +ppY +epD +xSw +xNH +xNH +xNH +imI +qRd +qRd +ktQ +nCk +kuy +srF +xPe +bdX +jUV +nFm +nFm +srF +srF +nFm +ogf +jrD +xPe +srF +kuy +nCk +nCk +ktQ +cgO +yis +iZh +hvj +aPd +jNk +wqs +pNd +qVw +clR +kbH +kbH +yeD +rUc +yeD +hzJ +xda +kbH +yis +yfA +ktQ +xdn +iiL +jdx +jdx +jhd +xdn +xZo +vUS +vUS +vUS +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(95,1,1) = {" +ktQ +lNO +qRd +qRd +qRd +qRd +aww +lnx +iac +chf +xtZ +poF +aww +box +vtt +hcE +uOQ +tmw +aww +qTy +xNH +vDl +xNH +imI +qRd +qRd +ktQ +nCk +kuy +piJ +fbv +fbv +fbv +fbv +fbv +srF +srF +fbv +fbv +fbv +fbv +uQc +kuy +nCk +nCk +ktQ +xwy +yis +yis +yis +hvj +udz +rHG +jfw +uKX +clR +clR +kbH +gDN +gOf +bQO +gOf +gOf +kbH +yis +yis +ktQ +xdn +iiL +jdx +lqg +cuv +xdn +sJr +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(96,1,1) = {" +ktQ +qRd +qRd +aZy +qRd +qRd +aww +aww +sJN +gnX +aww +wEq +aww +gnX +aww +sJN +aww +aww +aww +aww +nZi +xNH +xNH +bJU +qRd +qRd +ktQ +nCk +kuy +srF +eZo +srF +eJa +srF +eZo +srF +srF +eZo +srF +srF +eZo +srF +kuy +nCk +nCk +ktQ +cgO +yis +yis +yis +yis +clR +ofU +lVq +iDv +iBE +clR +kbH +kbH +kbH +kbH +kbH +fvQ +kbH +yis +cgO +ktQ +xdn +xdn +dMX +xdn +xdn +xdn +kpI +nnI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(97,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +aww +gjK +gnX +tGy +tGy +lMg +oEK +cOZ +gyP +vOs +vOs +vOs +uvB +gnX +xNH +xNH +xNH +rGZ +qRd +qRd +ktQ +nCk +kuy +srF +eZo +srF +srF +srF +eZo +srF +srF +eZo +ilV +srF +eZo +srF +kuy +nCk +nCk +ktQ +cgO +yis +clR +clR +aRV +clR +ofU +fdj +hFo +utS +clR +nBO +yis +yis +yis +phC +gch +yis +yis +xwy +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(98,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +aww +aww +aww +aww +gnX +aww +fzi +sJN +aww +aww +aww +jXE +aww +aww +aww +pRi +aww +xNH +tZx +qRd +aZy +ktQ +nCk +kuy +piJ +fbv +fbv +fbv +fbv +fbv +srF +srF +fbv +fbv +fbv +fbv +uQc +kuy +nCk +nCk +ktQ +cgO +clR +clR +dUu +jMP +dzv +jMP +nKw +qHQ +nSO +clR +vwJ +yis +yis +yis +yis +lJk +yis +yis +cgO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(99,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +aww +fnO +vCe +ecK +chf +obV +chf +iDe +pLU +aww +lOr +cOZ +pYs +tRH +lAl +saN +aww +xNH +bJU +qRd +qRd +ktQ +nCk +kuy +srF +ddf +koU +koU +nFm +nFm +srF +srF +nFm +nFm +oSs +ddf +srF +kuy +nCk +nCk +ktQ +bpM +udz +jMP +alT +xrZ +uHc +cOE +jtF +pTt +mjk +clR +bEL +yis +ltL +yis +lJk +yis +yis +yis +cgO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(100,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +sJN +daR +vCe +fHI +tGy +wxO +tGy +gWa +jiR +sJN +cvT +oUU +lcH +aww +xHd +oqN +aww +xNH +tZx +qRd +qRd +ktQ +nCk +xPe +srF +xPe +koU +koU +nFm +nFm +srF +srF +nFm +nFm +fwW +xPe +srF +xPe +nCk +nCk +ktQ +bpM +jNk +afT +vpa +uSf +pQB +xrZ +jRX +bNk +clR +clR +clR +clR +sMx +yis +yis +yis +yis +yis +cgO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(101,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +sJN +szv +byP +mml +ybs +uvB +bdp +chf +vxV +aww +fay +laC +bqC +aww +dVp +muY +sJN +xNH +hGQ +qRd +qRd +ktQ +nCk +fbv +owV +fbv +fbv +fbv +fbv +fbv +srF +srF +fbv +fbv +fbv +fbv +owV +fbv +fbv +nCk +ktQ +cgO +jNk +yej +vPJ +iQG +nvB +iQG +tqt +lsL +amB +eKv +wwo +amB +rtO +aPd +hvj +yis +hvj +yis +cgO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(102,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +aww +ptq +dIL +dIL +hsG +uvB +ciK +sCA +fGT +aww +xUr +xaq +kco +aww +vpR +kUE +aww +xNH +tZx +qRd +qRd +ktQ +nCk +ddf +srF +srF +won +aJb +vDc +ddf +nCk +nCk +ddf +nhE +gvd +srF +srF +tav +ddf +nCk +ktQ +cgO +vPq +clR +pDx +pDx +hsw +bXS +xfK +uRL +amB +eKv +wwo +amB +eKv +hvj +yis +hvj +yis +yis +qcI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(103,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +aww +aww +gHV +weN +tQe +hol +ghf +clO +aww +aww +aww +aww +aww +aww +aww +vWo +aww +xNH +tZx +qRd +qRd +ktQ +nCk +kuy +srF +srF +srF +srF +srF +kuy +nCk +nCk +kuy +txG +vQj +srF +srF +sDA +kuy +nCk +ktQ +cgO +yis +clR +aRV +reH +reH +ila +qOl +reH +clR +clR +clR +clR +vPq +eKv +svb +yis +yis +yis +yis +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kIy +ktQ +ktQ +ktQ +mtI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(104,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +aww +uYF +iUt +udB +jHn +mOO +pTO +aww +dfc +khi +jXi +tPf +tWt +evL +wkN +sJN +xNH +nLk +qRd +qRd +ktQ +nCk +xPe +srF +srF +iey +aJb +axX +xPe +nCk +nCk +xPe +oAJ +nbt +woF +rbM +amT +xPe +nCk +ktQ +xwy +yis +yis +yis +reH +sfT +qJK +epr +reH +peY +rtO +bCa +uaQ +oPB +yis +yis +yis +yis +yis +yfA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ulH +ktQ +ktQ +ktQ +ulH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(105,1,1) = {" +ktQ +qRd +aZy +qRd +qRd +qRd +aww +lNO +rBR +eTL +uXM +oDr +qaj +aww +aww +dZa +hdu +iKY +vRg +gJv +aww +aww +qpO +cNS +xNH +qRd +ktQ +nCk +fbv +fbv +fbv +fbv +fbv +fbv +fbv +nCk +nCk +fbv +fbv +fbv +fbv +fbv +fbv +fbv +nCk +ktQ +cgO +yis +iZh +yis +reH +omA +spe +bRr +reH +rNK +aHE +clR +rtO +yis +yis +yis +iZh +yis +yis +cgO +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gGt +iwk +okH +gMI +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(106,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +lNO +qRd +qRd +saB +qRd +qRd +lNO +qRd +aww +aww +aww +aww +aww +aww +aww +qRd +qRd +qRd +qRd +qRd +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cgO +yis +yis +yis +reH +reH +reH +reH +reH +clR +clR +clR +tDh +yis +yis +yis +yis +yis +yis +yfA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +tHe +gGt +iwk +okH +gMI +gGt +nCo +ktQ +ktQ +ktQ +ktQ +ktQ +iol +qZN +gio +qZN +iol +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(107,1,1) = {" +ktQ +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +qRd +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kmb +ogd +aLR +yis +ogd +ogd +ogd +aLR +ogd +ogd +ogd +ogd +aLR +yis +ogd +ogd +ogd +ogd +ogd +vqj +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +gGt +gGt +aWq +jzf +aWq +gGt +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +acx +lmI +por +waG +acx +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(108,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iol +xTJ +lmI +bLZ +waG +wTp +iol +ktQ +ktQ +ktQ +ktQ +ryn +gGt +gGt +iQk +gGt +gGt +dDw +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(109,1,1) = {" +ktQ +tql +byk +tql +tql +frF +frF +tql +tql +byk +tql +tql +tql +byk +tql +byk +tql +vwO +tql +tql +tql +tql +ktQ +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ktQ +ktQ +ktQ +ktQ +ktQ +mZP +huR +hoH +gRb +jTe +huR +kLo +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +sUb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +acx +kQl +phy +por +hrX +hnx +acx +ktQ +ktQ +ktQ +ktQ +ulH +gGt +gGt +por +ldw +gGt +ulH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(110,1,1) = {" +ktQ +tql +cUX +cUX +tql +cUX +cUX +frF +frF +byk +byk +vwO +aro +byk +byk +tql +tql +byk +vwO +aro +tql +tql +ktQ +rmP +cwx +xhB +xhB +tnb +tnb +xhB +rmP +rmP +rmP +rmP +rmP +rmP +rmP +fWJ +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ktQ +ktQ +ktQ +ktQ +ktQ +huR +huR +uti +eNP +uti +huR +huR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +clT +sUb +ktQ +ktQ +sUb +sUb +sUb +sUb +sUb +sUb +sUb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ulH +gGt +gGt +gGt +diH +gGt +gGt +gGt +ulH +ktQ +ktQ +ktQ +vNc +raz +vNc +por +ldw +fWs +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(111,1,1) = {" +ktQ +tql +tql +frF +iJS +obU +iJS +obU +bos +cfz +afk +vwO +vwO +byk +iJS +obU +afk +iJS +vwO +vwO +tql +tql +ktQ +rmP +xhB +xhB +atT +kuz +ilq +xhB +xhB +rmP +rrN +xhB +teQ +xhB +ksh +nCN +teQ +xhB +xhB +ksh +ksh +xhB +xhB +rmP +ktQ +ktQ +ktQ +ktQ +ktQ +lzA +jAI +bsG +eJL +bgR +ppr +lzA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +sUb +sUb +xzW +qjr +qjr +qjr +xzW +sUb +clT +sUb +sUb +sUb +clT +ktQ +ktQ +ktQ +ktQ +ktQ +gGt +dkJ +raz +gGt +por +ldw +tFt +yed +gGt +ktQ +ktQ +ktQ +gGt +gGt +gGt +nGx +ldw +kQl +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(112,1,1) = {" +ktQ +byk +aro +byk +cUX +cfz +cfz +byk +byk +vwO +nkT +xBL +uOU +dSC +cUX +bje +byk +byk +tql +vmn +tql +tql +ktQ +uCx +uCx +hip +kXY +kXY +xgg +xhB +xhB +rbq +dmQ +xhB +tnb +xhB +fua +dmQ +tnb +tnb +xhB +rbq +rbq +xhB +xhB +rmP +ktQ +ktQ +ktQ +ktQ +ktQ +aGF +tqs +vPT +czf +tyX +kQv +aGF +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +sUb +xzW +xzW +ozF +scn +ozF +xzW +xzW +sUb +sUb +sUb +sUb +sUb +sUb +ktQ +ktQ +ktQ +ktQ +vNc +kTp +kTp +vNc +bLZ +ldw +bjw +rYs +gGt +ktQ +ktQ +ktQ +iol +eEr +tsu +por +ldw +yed +iol +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(113,1,1) = {" +ktQ +tql +vwO +byk +cUX +cUX +bje +bje +cUX +bje +nNO +nkT +dSC +cfz +pTp +bje +bje +tql +byk +rex +vwO +tql +ktQ +rmP +xhB +cZw +dYU +qmQ +dYU +xhB +lge +dfA +rds +dtK +teQ +lge +lHd +tLR +lVt +xhB +eCh +lge +pBX +tLR +teQ +rmP +ktQ +ktQ +ktQ +ktQ +srk +huR +huR +huR +msR +huR +huR +huR +srk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +xzW +xzW +xzW +wgA +xhI +fUo +xzW +xzW +xzW +aNb +kAz +sUb +sUb +sUb +ktQ +ktQ +ktQ +ktQ +gGt +gGt +gGt +gGt +por +ldw +tFt +bZR +gGt +ktQ +ktQ +ktQ +jXU +hnx +tsu +por +ldw +rYs +jXU +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(114,1,1) = {" +ktQ +byk +vwO +tql +cUX +uOU +stZ +vwO +cfz +dRC +cfz +dSC +jvp +vwO +vwO +cfz +bje +cfz +cUX +frF +vwO +tql +ktQ +rmP +rrN +cNl +bQL +lCX +wwM +xhB +kXY +gtN +mNm +dYU +xhB +szh +bqm +jBu +bQL +xhB +vcN +oTl +ktU +bQL +tnb +rmP +ktQ +ktQ +ktQ +ktQ +huR +bgJ +sMq +huR +czf +iWB +uIn +uwv +huR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +qjr +wAz +xzW +emx +xhI +tYH +xzW +pMc +qjr +sUb +hFf +sUb +qaS +uMH +ktQ +ktQ +ktQ +kIy +gGt +uFr +tFt +tsu +nGx +ldw +bjw +lkR +gGt +mtI +ktQ +ktQ +acx +xty +jpu +por +ldw +kGs +acx +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(115,1,1) = {" +ktQ +tql +vwO +cfz +bje +uOU +cfz +vwO +bJf +bJf +bJf +xdq +bJf +vwO +aro +byk +cfz +cfz +cUX +frF +vwO +tql +ktQ +rmP +rmP +rbq +uMf +pND +hbp +tnb +szh +uig +vcM +dYU +xhB +kXY +rGY +pGz +cPL +tnb +kXY +rXy +oTl +bQL +xhB +rmP +ktQ +ktQ +ktQ +ktQ +pju +fOt +fOt +pju +eJL +iWB +qOy +cjP +huR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +mFa +djg +fuu +xzW +xzW +huV +xzW +xzW +uMP +djg +mFa +hFf +sUb +nDT +nDT +ktQ +ktQ +ktQ +gGt +gGt +tFt +kTn +tsu +bLZ +ldw +tyE +bjw +gGt +gGt +ktQ +ktQ +gGt +gGt +gGt +kjc +gGt +gGt +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(116,1,1) = {" +ktQ +byk +vwO +cfz +bje +heq +byk +bJf +aWD +epm +aro +dSC +iob +bJf +cfz +cfz +cUX +heq +heq +frF +vwO +tql +ktQ +rmP +fWJ +eRx +dko +rNC +bQL +teQ +lCX +qcF +gHq +bQL +xhB +lCX +wUr +oGt +dYU +xhB +bQL +quq +hmK +fpf +xhB +rmP +ktQ +ktQ +ktQ +ktQ +huR +huR +huR +huR +czf +iWB +uIn +xOd +huR +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xWu +fKG +lwb +xYc +bfM +qaT +ocb +bWV +aKN +fKG +mFa +hFf +sUb +gBi +sUb +ktQ +ktQ +ktQ +iol +qKA +bjw +tFt +tsu +por +ldw +bjw +tFt +slP +iol +ktQ +ktQ +gGt +vys +aQA +uDS +tTT +heh +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(117,1,1) = {" +ktQ +tql +iJS +cfz +bje +cUX +cfz +vwO +nVf +nVf +iYw +ngD +wDA +qyG +naJ +naJ +cUX +heq +cUX +tql +vwO +tql +ktQ +rmP +tnb +xhB +uoy +kXY +bQL +xhB +xhB +xhB +xhB +iDY +xhB +xhB +tnb +xhB +iDY +xhB +iDY +xhB +teQ +xhB +xhB +rmP +ktQ +ktQ +ktQ +tTC +huR +ybM +uIn +nwD +oHH +iWB +qOy +scy +huR +adA +ktQ +ktQ +ktQ +ktQ +ktQ +mFa +fKG +cwJ +xyL +pEj +vak +sIy +uMz +aOM +fKG +xWu +hFf +sUb +pcY +sUb +ktQ +ktQ +ktQ +jXU +gIP +tFt +kTn +tsu +bLZ +ldw +tyE +bjw +aqY +jXU +ktQ +ktQ +ulH +gGt +fFz +asV +cQY +gGt +ulH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(118,1,1) = {" +ktQ +tql +vwO +vwO +bje +cUX +mGD +bJf +pxo +miK +bJf +dSC +mON +jFA +naJ +naJ +cUX +cUX +heq +byk +byk +byk +ktQ +rmP +teQ +xhB +bQL +bQL +dYU +bQL +dYU +dko +iDY +bQL +pZr +dYU +bQL +dYU +aeb +dYU +dYU +dYU +tnU +rbq +rmP +rmP +ktQ +ktQ +ktQ +huR +huR +uIn +kFw +nwD +eJL +iWB +iiS +qOy +huR +huR +ktQ +ktQ +ktQ +ktQ +ktQ +mFa +uaw +xzW +cQD +gDA +xzW +lvv +iZf +xzW +xhy +mFa +hFf +sUb +qye +sUb +ktQ +ktQ +ktQ +acx +qKA +lqk +bZy +aQA +por +tTT +bZy +evF +xHn +acx +ktQ +ktQ +kIy +gGt +tVv +cOm +tVv +gGt +mtI +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(119,1,1) = {" +ktQ +tql +aro +vwO +bje +byk +dSC +bJf +bJf +bJf +vwO +dva +gWP +bJf +cfz +dSC +bje +vwO +vwO +tql +byk +tql +ktQ +rmP +rmP +rbq +bQL +hdg +jvj +ycw +iPz +dYU +iDY +dYU +lge +sbp +rle +tLR +rac +lge +rle +sbp +tLR +rbq +rmP +rmP +ktQ +ktQ +ktQ +lzA +lCO +qOy +uIn +nwD +czf +iWB +qOy +uIn +nYn +lzA +ktQ +ktQ +ktQ +ktQ +ktQ +sUb +qjr +hmt +uOD +fVZ +fgF +gMS +dIy +gwP +qjr +sUb +hFf +qQF +rkS +sUb +ktQ +ktQ +ulH +gGt +bjw +tsu +gGt +gGt +peh +gGt +gGt +ldw +tFt +gGt +ulH +ktQ +ktQ +ulH +jAZ +jAZ +aAz +ulH +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(120,1,1) = {" +ktQ +tql +byk +iJS +cfz +cfz +cfz +vwO +dot +nVf +iYw +ngD +gKa +bJf +mpM +hBi +cUX +vwO +aro +tql +byk +tql +ktQ +rmP +rrN +dmQ +dko +anJ +pYP +fsK +iPz +bQL +xhB +tnb +xhB +teQ +tnb +xhB +xhB +xhB +xhB +xhB +xhB +tnb +teQ +rmP +ktQ +ktQ +ktQ +wPm +lIi +uIn +kFw +nwD +eJL +iWB +iiS +qOy +qCa +wPm +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xzW +hmt +iZf +eJh +sJA +bVh +iZf +eJh +xzW +sUb +hFf +ezj +sUb +sUb +ktQ +ktQ +gGt +hnx +tFt +tsu +gGt +frP +por +hyD +gGt +ldw +bjw +kQl +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(121,1,1) = {" +ktQ +tql +tql +vwO +naJ +nkT +bje +vwO +miK +tSX +bJf +dSC +caR +bJf +xCM +byk +bje +byk +byk +bos +byk +tql +ktQ +rmP +rmP +rbq +bQL +vvK +ePU +ePU +jgz +dYU +hip +gax +vxG +mUV +wAw +bYQ +fTB +cou +jkj +lyl +cJD +mfN +dcJ +rmP +ktQ +ktQ +ktQ +aGF +lCO +ceN +tko +rps +czf +imR +tko +jVP +oyS +aGF +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +qjr +fhG +bNJ +eJh +ofF +vYf +oQy +byn +qjr +sUb +hFf +neD +sUb +sUb +ktQ +ktQ +iol +tFt +bjw +wET +iol +por +por +efQ +iol +nKk +tFt +bjw +iol +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(122,1,1) = {" +ktQ +byk +tql +vwO +naJ +nkT +cfz +vwO +vwO +bJf +bJf +iYw +bJf +aro +bJf +byk +cUX +cUX +cfz +obU +byk +tql +ktQ +rmP +xhB +xhB +xry +kXY +pZr +dYU +bQL +kXY +hip +gax +ksh +dcm +ksh +dcm +drP +dcm +uCx +drP +ksh +dcm +ksh +rmP +ktQ +ktQ +srk +huR +qOy +nwD +huR +huR +vpO +huR +huR +iWB +uIn +huR +srk +ktQ +ktQ +ktQ +ktQ +sUb +xzW +xzW +cVS +mmu +xzW +lvv +skj +xzW +xzW +sUb +hFf +nNj +gPx +sUb +ktQ +ktQ +jXU +bjw +tFt +tsu +acx +por +por +por +acx +ldw +bjw +tFt +jXU +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(123,1,1) = {" +ktQ +tql +tql +vwO +byk +cUX +byk +iJS +cCp +dSC +cfz +dSC +dSC +mGD +cfz +bje +fTU +cUX +cfz +afk +tql +tql +ktQ +rmP +tnb +xhB +tnb +xhB +fIe +xhB +xhB +xhB +iRV +drP +uCx +syW +uCx +ksh +bLG +ksh +uCx +oNW +jEm +ksh +dfr +rmP +ktQ +ktQ +huR +kQv +uIn +nwD +huR +aLa +czf +tPk +huR +iWB +qOy +tqs +huR +ktQ +ktQ +ktQ +sUb +sUb +xzW +iKp +bWV +kQY +fmj +pEj +nwb +eXl +xzW +uDq +hFf +uSI +sUb +sUb +ktQ +ktQ +acx +eka +vZQ +paE +gGt +kCu +vvY +kCu +gGt +fkW +oBW +uFr +acx +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(124,1,1) = {" +ktQ +tql +byk +obU +byk +byk +wTs +dSC +cfz +vwO +aro +byk +naJ +byk +bje +heq +cUX +byk +cfz +afk +tql +tql +ktQ +rmP +xhB +xhB +xRx +eUS +drP +hzI +teQ +elu +dcm +dcm +syW +ksh +pja +ksh +ksh +ksh +syW +ksh +pja +ksh +dfr +rmP +ktQ +ktQ +lzA +uIn +qOy +sLO +lzA +czf +czf +uEY +lzA +hRb +uIn +qOy +lzA +ktQ +ktQ +ktQ +clT +sUb +xzW +xiy +gvX +oOW +boV +nnp +qYF +wCa +xzW +sUb +hFf +uSI +uSI +ktQ +ktQ +ktQ +gGt +gGt +kjc +gGt +gGt +gGt +gGt +gGt +gGt +gGt +kjc +gGt +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(125,1,1) = {" +ktQ +tql +tql +aro +vwO +tql +cUX +uOU +cUX +cUX +nNO +byk +byk +cfz +cUX +cUX +cfz +cfz +tql +vwO +tql +tql +ktQ +rmP +rmP +xhB +lIp +drP +lKV +gtC +xhB +kyE +dcm +gax +ksh +ksh +rmP +ujk +dov +ujk +rmP +ksh +rmP +rmP +rmP +rmP +ktQ +ktQ +wPm +qOy +uIn +nwD +aGF +czf +czf +czf +aGF +iWB +qOy +uIn +wPm +ktQ +ktQ +ktQ +sUb +sUb +xzW +xzW +xzW +eKE +xzW +eKE +xzW +xzW +xzW +sUb +hFf +uSI +uSI +ktQ +ktQ +ktQ +gGt +gJO +qfd +iZK +qfd +tFV +bLZ +gGt +mKO +aIH +aVJ +wBL +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(126,1,1) = {" +ktQ +tql +frF +wzw +cUX +cUX +cUX +cUX +cUX +cUX +cUX +cUX +byk +byk +cfz +tql +tql +cfz +vwO +tql +tql +tql +ktQ +rmP +rmP +tnb +xhB +tnb +oJd +xhB +xhB +tnb +xhB +slZ +dcm +ksh +rmP +rmP +ksh +rmP +rmP +rmP +rmP +rmP +pFX +rmP +ktQ +ktQ +aGF +aBv +lVL +eim +huR +bHY +fBv +bHY +huR +jfv +cCX +ybM +aGF +ktQ +ktQ +ktQ +sUb +sUb +xzW +pEp +oIx +dtP +wes +csm +mLi +kOC +xzW +sUb +hFf +sUb +sUb +ktQ +ktQ +nCo +gGt +vBi +dEK +oKK +mco +auI +dAA +gGt +doq +aVJ +oHi +vyG +gGt +tHe +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(127,1,1) = {" +ktQ +tql +tql +byk +vwO +vwO +vwO +vwO +aro +aro +vwO +vwO +rex +iJS +vwO +vwO +vwO +vwO +aro +tql +tql +tql +ktQ +rmP +rmP +rmP +rmP +rmP +fWJ +rmP +rmP +rmP +ksh +ksh +ksh +rmP +ksh +rmP +ksh +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ktQ +ktQ +huR +huR +wdm +huR +huR +huR +huR +huR +huR +huR +wdm +huR +huR +ktQ +ktQ +ktQ +ktQ +sUb +xzW +mjd +rif +iZf +iZf +iZf +rif +cZK +xzW +sUb +hFf +hkb +sUb +ktQ +ktQ +gGt +gGt +gGt +gGt +gGt +gGt +ulH +ulH +ulH +gGt +gGt +gGt +gGt +gGt +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(128,1,1) = {" +ktQ +tql +tql +byk +tql +byk +byk +tql +byk +tql +tql +byk +byk +byk +byk +tql +byk +tql +tql +byk +tql +tql +ktQ +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ksh +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +cRM +rmP +ktQ +ktQ +huR +vQO +bUc +baZ +bUc +svj +eJL +huR +qWF +uZN +auC +wsp +huR +ktQ +ktQ +ktQ +ktQ +sUb +xzW +gWS +fWS +qPo +eHK +xxE +wQX +iZf +xzW +lbA +hFf +nfn +sUb +ktQ +ktQ +gGt +jAZ +jAZ +aAz +hMS +gGt +gGt +gGt +gGt +gGt +xBc +jAZ +jAZ +aAz +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(129,1,1) = {" +ktQ +tql +tql +tql +tql +tql +tql +byk +tql +tql +aro +vwO +tql +tql +tql +byk +tql +tql +tql +tql +tql +tql +ktQ +rmP +cRM +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ksh +ksh +rmP +rmP +ksh +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ktQ +kLo +huR +lDi +mxZ +dOt +miN +fxy +hSL +huR +crx +auC +gFd +dCe +huR +mZP +ktQ +ktQ +xzW +xzW +xzW +xzW +xzW +lxb +iZf +dtP +xzW +xzW +xzW +xzW +xzW +lGL +sUb +sUb +ktQ +gGt +jAZ +jAZ +jAZ +xBc +gGt +jAZ +jAZ +aAz +gGt +hMS +jAZ +jAZ +jAZ +gGt +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(130,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +rmP +ktQ +huR +huR +huR +huR +huR +huR +srk +srk +srk +huR +huR +huR +huR +huR +huR +ktQ +ktQ +xzW +mfR +xzW +mfR +hoK +iZf +los +dlb +xzW +mfR +xzW +mfR +xzW +sUb +sUb +sUb +ktQ +ktQ +ktQ +ktQ +ktQ +hMS +xBc +jAZ +jAZ +jAZ +jAZ +xBc +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(131,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ruW +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +huR +bxr +bxr +hAu +mUq +huR +huR +huR +huR +huR +bYu +bxr +bxr +hAu +huR +ktQ +sUb +xzW +ybc +xzW +ybc +xzW +bQT +bQT +bQT +lSN +ybc +xzW +ybc +xzW +fvw +sUb +clT +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(132,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +nxV +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +huR +bxr +bxr +bxr +bYu +huR +bxr +bxr +hAu +huR +mUq +bxr +bxr +bxr +huR +ktQ +sUb +clT +sUb +ktQ +ktQ +sUb +sUb +sUb +sUb +sUb +sUb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(133,1,1) = {" +ktQ +ktQ +ktQ +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +ktQ +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +lQY +ktQ +qiO +lQY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +mUq +bYu +bxr +bxr +bxr +mUq +bYu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(134,1,1) = {" +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +xhp +ktQ +lma +lma +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(135,1,1) = {" +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +vvE +bRM +xhp +xhp +xhp +xhp +xhp +xhp +afs +afs +afs +afs +afs +afs +afs +afs +afs +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xLE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(136,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +bRM +nbF +bRM +nxV +bRM +xhp +xhp +bRM +bRM +bRM +xhp +afs +clr +clr +afs +afs +clr +afs +vlt +euU +usV +jlm +hWr +awB +vts +afs +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rlL +uDN +xmO +xmO +xmO +uDN +rlL +rlL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xLE +ktQ +yeQ +oqM +nvt +vcm +xNs +vcm +vcm +vcm +yeQ +vcm +vcm +vcm +xNs +ktQ +ktQ +ktQ +xLE +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(137,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +bRM +bRM +xhp +bRM +gPA +nbF +bRM +nbF +bRM +bRM +vvE +xhp +afs +fkQ +qSd +qSd +qSd +wCE +afs +mak +elI +gIc +huy +clr +clr +nBP +clr +clr +clr +clr +afs +clr +clr +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bej +xmO +mEi +xZI +irG +nMu +mEi +xmO +uDN +rlL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +rxc +wmF +moO +xNs +rxc +rxc +rxc +yeQ +rxc +rxc +xNs +xNs +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(138,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +clr +afs +aBE +afs +afs +clr +qSd +afs +khr +vls +nuq +ssR +clr +bIp +cKp +oNd +isd +xHG +hLj +iyP +jLT +clr +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bej +ljG +uUO +mTK +mqS +qyr +gDg +qBE +bej +rlL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +rxc +rxc +rxc +kND +yeQ +yeQ +yeQ +moO +xNs +yeQ +yeQ +yeQ +rxc +xNs +xNs +rxc +yeQ +kND +rxc +rxc +rxc +yeQ +ktQ +ktQ +dPb +dPb +dPb +lYA +tdy +lYA +dPb +dPb +dPb +tdy +klY +lYA +klY +dPb +dPb +lYA +tdy +klY +lYA +tdy +klY +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(139,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +vvE +clr +xhW +slV +kGL +avE +tKN +iOt +ald +ald +hjr +hRu +dFH +jUk +unL +eyx +wAr +kGT +pkV +jUk +obI +mbP +afs +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +bej +xmO +bej +ktQ +ktQ +ktQ +ktQ +kho +rdt +qyr +qyr +qyr +qyr +iMr +rSA +kho +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +kND +ydt +sGW +fpi +mJy +acp +epR +fhV +fpi +ydt +kND +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +ktQ +ktQ +dPb +dPb +dPb +dPb +pwV +dPb +dPb +dPb +dPb +dPb +cpV +sVH +dPb +dPb +dPb +dPb +kaP +tkE +pYG +dPb +dPb +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(140,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +clr +qWV +oHl +afs +eIL +dDa +jlm +awB +rFn +rFn +awB +aKM +clr +gnx +rck +ndv +rck +hgr +clr +bHl +sGH +afs +xhp +ktQ +ktQ +ktQ +ktQ +bej +iLe +wKp +iLe +bej +acC +bej +xmO +bej +tYG +foK +nIc +tIA +pWA +txT +hdr +bej +bej +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +uas +jFf +rxc +nAh +uZJ +txe +vYq +gEk +xNs +cRP +cRP +gLq +cRP +cRP +eYe +edd +uZJ +qYJ +rxc +jFf +hPF +yeQ +ktQ +ktQ +dPb +dPb +sNt +wQH +kaZ +bXZ +xbr +dIU +dwa +mOK +jCU +jCU +mOK +kVp +pgJ +qhD +dth +mOK +hYI +mOK +dXz +iEU +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(141,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +xhp +xhp +xhp +xhp +xhp +clr +afs +afs +afs +clr +vvE +bRM +clr +xhW +eIL +ahx +bAk +vVC +ssR +clr +clr +afs +clr +hHz +clr +rnj +usV +scK +xWf +usV +clr +ciW +afs +clr +xhp +ktQ +ktQ +ktQ +ktQ +kho +fMb +ane +lXK +bej +ueO +iLe +gpc +iLe +bej +bej +iLe +utt +iLe +bej +bej +iLe +bej +iLe +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +gcd +bUV +wmF +urC +yeQ +vKz +cRP +gLq +xNs +xNs +xNs +acp +acp +gLq +acp +wVE +yeQ +uhd +wmF +cxC +xFn +yeQ +ktQ +ktQ +uDb +lJa +cSN +dxv +pcE +bXZ +xbr +mUd +gIN +mOK +jCU +jCU +mOK +nHC +pgJ +iEU +dth +mOK +iEU +mOK +mOK +kyr +dPb +klY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(142,1,1) = {" +ktQ +ktQ +ktQ +ktQ +bRM +xhp +xhp +xhp +xhp +xhp +xhp +clr +xup +csv +lod +clr +hjr +nHe +clr +clr +fcs +clr +clr +vVC +vwY +hLj +ckg +iyP +afs +jau +eaM +bVJ +wrH +wrH +wrH +wrH +tSm +cMl +kBL +clr +por +ktQ +ktQ +ktQ +ktQ +kho +fMb +drV +lXK +bej +wGh +doy +hpJ +fZR +jae +qoG +bej +jnc +bej +uhF +knd +ago +ukP +suV +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +voH +mNH +xbQ +tCR +nxf +igY +cRP +cRP +eJG +moO +moO +raj +raj +cRP +cRP +edd +nxf +coK +wPT +kiq +krb +yeQ +ktQ +ktQ +eRQ +wph +tFw +dxv +pcE +xbr +xbr +mUd +hCk +mOK +jCU +jCU +mOK +qKd +mOK +mOK +mOK +mOK +fJx +mOK +mOK +mOK +pwV +tdy +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(143,1,1) = {" +ktQ +ktQ +ktQ +ktQ +clr +clr +clr +clr +clr +clr +clr +clr +wrH +jau +jau +ycL +bVJ +bVJ +dJh +qha +bVJ +tSm +sHl +dDa +bnH +afs +cIf +vUr +sGA +mLn +uZW +bVJ +bVJ +bVJ +bVJ +bVJ +bVJ +cMl +bVJ +llZ +por +ktQ +ktQ +ktQ +ktQ +bej +pHZ +hWE +iXp +bej +aTp +dlz +oYK +oYK +oYK +kRF +bej +swP +bej +mUk +qen +lvT +nNs +aBF +bej +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +dIo +vpY +vkJ +eOn +rGa +igY +wiX +mbp +raj +jFk +mmK +jFk +xNs +xNs +mbp +edd +rGa +coK +spx +miF +dIo +yeQ +ktQ +ktQ +eBY +rrc +nRd +dxv +jGS +rop +rop +rDz +rop +rop +rop +rop +rop +rop +rop +rop +rop +rop +rop +rop +kaZ +hYI +dPb +tdy +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(144,1,1) = {" +ktQ +ktQ +ktQ +ktQ +clr +clr +clr +clr +clr +clr +clr +clr +wrH +jau +bVJ +cQd +wrH +eIo +mzh +dnX +wCB +sUX +tcF +rbW +kfv +ald +mMk +rnM +afs +fcX +jnQ +rLo +wrH +wrH +uBz +uBz +akm +iQJ +bVJ +clr +por +ktQ +ktQ +ktQ +trL +ueO +ozy +fhZ +vHL +bej +vJk +xBt +xxY +tzb +hUK +iZg +bej +jnc +bej +ycD +hSs +lMY +liO +ibi +bej +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +uTU +mNH +iQm +rBL +rGa +gre +cRP +moO +xNs +jFk +cbH +mmK +xNs +xNs +vSb +edd +rGa +coK +spx +kiq +uTU +rxc +ktQ +ktQ +dPb +dPb +bst +dxv +sNc +ahY +ahY +wBt +ahY +ahY +ahY +ahY +ahY +ahY +ahY +ahY +ahY +ahY +ahY +pzK +pcE +qhD +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(145,1,1) = {" +ktQ +ktQ +ktQ +bRM +clr +clr +brn +bnI +brn +clr +clr +jax +wrH +bVJ +bVJ +nuq +rck +pdM +pdM +rck +afs +tid +bVJ +vVC +ihU +clr +afs +afs +clr +xEh +bVJ +mff +lnm +ohG +ohG +xRq +mff +irM +wAr +llZ +por +ktQ +ktQ +ktQ +ktQ +bej +jap +fhZ +uhA +iLe +bej +bej +wcD +iLe +lsg +iLe +bej +jnc +bej +iLe +qAO +iLe +bej +bej +bej +iLe +rfP +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wmF +bYf +hBX +lLH +xlt +rGa +txe +cRP +xNs +xkx +jFk +hCD +mmK +raj +acp +tKW +edd +rGa +coK +spx +xXW +bYf +rxc +ktQ +ktQ +klY +dPb +bst +dxv +pcE +orH +orH +mUd +icy +mPt +mPt +cMR +mOK +mOK +arm +nwS +mOK +mOK +arm +dxv +pcE +kyr +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(146,1,1) = {" +ktQ +ktQ +ktQ +xhp +clr +clr +fOK +hIw +hIw +jjP +jjP +jjP +wrH +bVJ +bVJ +ugM +rck +wzN +mpb +rck +afs +auD +wAr +iOn +bCZ +bmA +jau +jau +nhe +bVJ +bVJ +mQj +ugM +nEf +aNM +ugM +mQj +cMl +aPy +clr +por +ktQ +ktQ +ktQ +ktQ +bej +kad +fhZ +roK +hIo +bEU +lDV +wzD +ehi +qxi +wzD +ecg +dfF +wzD +bEU +qxi +cIs +wzD +lDV +iOP +axk +oMh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wmF +jyy +qkY +oTF +igX +iIx +txe +mbp +acp +eJG +raj +xNs +xNs +raj +acp +cRP +edd +iIx +eVH +rbS +jCG +xym +rxc +ktQ +ktQ +tdy +dPb +ybm +dxv +pcE +orH +sNt +mUd +qNh +dPb +dPb +dPb +dPb +dPb +dPb +dPb +qjA +ugc +mOK +dxv +pcE +mOK +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(147,1,1) = {" +ktQ +ktQ +ktQ +xhp +clr +clr +fOK +hIw +hIw +fgz +fgz +fgz +wrH +bVJ +jau +ugM +rck +mpb +mpb +rck +afs +ozA +qWl +sQn +jYR +bVJ +bVJ +bVJ +nhe +bVJ +bVJ +mQj +ugM +aNM +kIX +ugM +mQj +cMl +gqU +clr +sgH +ktQ +ktQ +ktQ +ktQ +dZk +gnZ +fhZ +gnZ +efY +jnc +bej +bej +nCw +bej +xpH +bej +bej +bej +dHu +bej +xpH +bej +bej +tih +iLe +iLe +bel +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rxc +rNs +akw +bNn +mfZ +yeQ +haB +cRP +bnC +nxL +cRP +moO +slo +cRP +gLq +wFe +fDW +yeQ +uhd +rxc +foR +bKo +rxc +ktQ +ktQ +dPb +dPb +rdM +dxv +pcE +sNt +cVH +mUd +qNh +dPb +oSf +wYk +mOK +cnh +mOK +mOK +mOK +iEU +mOK +dxv +jGS +kzq +mCB +sOj +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(148,1,1) = {" +ktQ +ktQ +bRM +xhp +clr +clr +brn +dDX +brn +clr +clr +eGY +wrH +bVJ +jau +pyZ +ndv +jPO +jPO +rck +afs +aqS +jau +dDa +ihU +afs +clr +afs +afs +xEh +bVJ +veX +eus +ohG +ohG +hRu +jzI +cMl +jau +nuq +ktQ +ktQ +ktQ +ktQ +ktQ +bej +lLq +xwj +kwD +bej +oqX +bej +cTB +xQE +wEn +xJA +dla +bej +xhP +seD +jrQ +fZX +hGL +bej +wdC +bej +iLe +ueO +bej +bej +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +mPj +asH +uJL +aaW +xhX +txe +bnC +gsv +acp +eYe +acp +acp +acp +ecx +bnC +edd +xhX +qYJ +rxc +jRs +egm +yeQ +ktQ +ktQ +dPb +dPb +sNt +dxv +pcE +grn +iEU +mUd +hSD +dPb +uFJ +mOK +vgs +dPb +ayZ +mOK +pgJ +iEU +mOK +dxv +aej +pcE +nlB +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(149,1,1) = {" +ktQ +ktQ +bRM +xhp +clr +clr +clr +clr +clr +clr +clr +clr +wrH +bVJ +bVJ +cQd +wrH +rck +rCt +fdM +qAr +gDd +tcF +dDa +uKg +hLj +ucD +nJH +afs +jnT +knF +rLo +uBz +wrH +wrH +wrH +akm +dkN +ipl +ugM +ktQ +ktQ +ktQ +ktQ +bej +bej +bej +bej +bej +bej +gvQ +bej +oxz +crD +gnZ +gnZ +nYr +bej +gHi +qYC +arH +wUg +nYr +bej +agb +bej +eWF +lNf +haD +iLe +bej +ktQ +ktQ +ktQ +ktQ +yeQ +mnT +omY +wmF +mfZ +yeQ +kND +tvd +tLk +tvd +gUN +wqj +rHE +tvd +tLk +tvd +kND +yeQ +uhd +wmF +mnT +mnT +rxc +ktQ +ktQ +dPb +dPb +jWm +dxv +pcE +bBS +rdM +mUd +orH +dPb +ukX +mOK +mOK +dPb +mhY +ujI +mOK +kOI +mOK +dxv +sNc +vhi +mCB +sUw +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(150,1,1) = {" +ktQ +ktQ +xhp +xhp +clr +clr +clr +clr +clr +clr +clr +clr +wrH +jau +bVJ +xSc +bVJ +bVJ +bVJ +bVJ +bVJ +kFN +sHl +vVC +ssR +afs +cIf +vUr +gwl +qWl +bfH +eUx +dLq +dLq +dLq +dLq +dLq +xoH +ipl +pyZ +ktQ +ktQ +ktQ +bej +iLe +ebl +uhr +wvs +wvs +iLe +hok +iLe +bej +bej +bej +bej +bej +bej +bej +bej +bej +bej +bej +iLe +lXb +iLe +bRN +rOb +vAB +coA +iLe +bej +ktQ +ktQ +ktQ +yeQ +yeQ +yeQ +bIk +gDU +yeQ +yeQ +bIk +yeQ +gDU +eoo +sbC +wTj +gDU +yeQ +bIk +yeQ +yeQ +gDU +bIk +yeQ +rxc +rxc +ktQ +ktQ +klY +dPb +usP +dxv +pcE +rdM +bBS +mUd +cVH +dPb +dPb +dPb +cnh +dPb +dPb +dPb +qjA +iEU +mOK +dxv +pcE +iEU +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(151,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +ksF +iSD +lsH +clr +hjr +ohG +ohG +nHe +clr +clr +clr +bKW +dFH +jUk +hwy +kKO +afs +fJo +wrH +hFC +wrH +wrH +wrH +wrH +kfH +rJv +epj +clr +ktQ +ktQ +ktQ +bej +hDo +qVO +aer +aer +aer +cjz +ozP +oKd +gbd +rjX +vFo +qVd +iCM +lEL +oEn +akI +ngR +rjX +gbd +qgy +rOb +lQx +lDo +gTa +swI +swI +bdE +bej +ktQ +ktQ +ktQ +kND +rxc +xdf +rxc +uJL +hIm +fkZ +haW +mbh +aeL +vsG +vsG +vsG +iNu +ffK +fkZ +fkZ +fkZ +fkZ +haW +crZ +yeQ +kND +ktQ +ktQ +lYA +dPb +wjq +dxv +pcE +bBS +sNt +mUd +sNt +rdM +rdM +sNt +hIZ +mOK +arm +mOK +mOK +mOK +arm +dxv +pcE +rAH +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(152,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +afs +afs +afs +clr +bRM +bRM +bRM +bRM +xhp +xhp +xhp +dDa +huy +clr +afs +clr +clr +afs +nuq +xRh +nhe +nuq +wrH +uBz +clr +clr +clr +clr +ktQ +ktQ +trL +ueO +hQI +swI +tpm +swI +swI +tHx +urJ +awq +czR +mVr +mss +urh +qvQ +swI +swI +fgs +jKf +mVr +czR +awq +urJ +ioy +swI +swI +swI +swI +gYP +ueO +xij +ktQ +ktQ +ktQ +kND +rxc +wmF +haW +rxc +wmF +jFM +txe +luV +sZF +kgu +oGD +ill +jmw +eKn +haW +haW +haW +mSR +kND +kND +ktQ +ktQ +ktQ +dPb +dPb +rdM +dxv +jGS +rop +rop +rDz +rop +rop +rop +rop +fFv +rop +rop +rop +rop +rop +rop +dsd +pcE +cbG +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(153,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +vvE +bRM +xhp +xhp +xhp +xhp +dDa +mNw +rFn +rFn +rFn +vVH +afs +pyZ +wnJ +bVJ +pyZ +dHc +oXO +clr +xhp +xhp +ktQ +ktQ +ktQ +bej +iLe +lVf +wra +nEs +lUW +yjr +nEs +dIC +oOo +iLe +mAF +kgy +lop +lop +itA +krS +nxC +swI +aIl +iLe +dFO +aTE +nEs +dXD +xqK +nEs +gwo +acB +iLe +bej +ktQ +ktQ +ktQ +ktQ +yeQ +yeQ +bIk +yeQ +yeQ +eKn +igY +eMS +xAm +bnC +wVK +ukf +fpo +fkZ +yeQ +xNs +aCh +xNs +xNs +ktQ +ktQ +ktQ +ktQ +uDb +lJa +cSN +dxv +sNc +ahY +ahY +wBt +ahY +ahY +ahY +pzK +aej +sNc +ahY +ahY +pzK +aej +aej +aej +pcE +cQG +dPb +lYA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(154,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +xhp +xhp +xhp +xhp +aGd +jUk +ald +ald +elo +dzp +clr +ePY +uat +wrH +wrH +wrH +uBz +clr +bRM +ktQ +ktQ +ktQ +ktQ +bej +bej +pJx +pJx +jjs +pJx +pJx +jjs +pJx +pJx +bej +bej +bpe +eqP +pDj +iLe +iLe +aNp +swI +fYM +bej +pJx +pJx +jjs +pJx +pJx +jjs +pJx +pJx +bej +bej +ktQ +ktQ +ktQ +yeQ +kND +weg +flw +sFL +yeQ +haW +nvS +luV +hgA +vwH +wVK +ukf +nZr +fkZ +yeQ +bll +hyA +huZ +kND +yeQ +ktQ +ktQ +ktQ +eRQ +wph +tFw +dxv +pcE +iPU +jef +mUd +pzy +dPb +arm +dxv +aej +pcE +arm +dPb +uaT +aej +aej +aej +pcE +mOK +pwV +klY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(155,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +vvE +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +afs +lHg +wvy +hUE +gAX +hPV +mIi +pJY +pJY +wrH +nuq +bRM +ktQ +ktQ +ktQ +ktQ +bej +bej +pzq +fkn +bej +pzq +fkn +bej +pzq +fkn +bej +bej +cLj +lQz +wsY +uWB +bej +fHL +fYM +iLe +bej +pzq +fkn +bej +pzq +fkn +bej +pzq +fkn +bej +bej +ktQ +ktQ +ktQ +yeQ +xiw +waQ +flw +ukf +uwD +haW +wKl +luV +wMI +dcU +ePy +ill +jmw +fkZ +maA +rBu +dCB +dgg +dMC +yeQ +ktQ +ktQ +ktQ +eBY +rrc +nRd +dxv +pcE +jcd +mPt +mUd +rdM +dPb +suM +dxv +aej +pcE +cvm +dPb +wgK +ngn +hEU +aej +pcE +cvm +dPb +klY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(156,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +vvE +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +lHg +lzq +afs +woT +ipl +xfR +ipl +xfR +wrH +ugM +bRM +ktQ +xhp +ktQ +ktQ +bej +ktQ +pzq +pzq +ktQ +pzq +pzq +ktQ +pzq +pzq +ktQ +bej +iLe +sxJ +nGS +eko +bej +qbC +iLe +bej +ktQ +pzq +pzq +ktQ +pzq +pzq +ktQ +pzq +pzq +ktQ +bej +ktQ +ktQ +ktQ +mgD +qmI +vEB +waQ +ukf +qwC +hXY +lCr +dnF +kkz +kkz +kkz +aPq +jbR +kXw +jMn +rBu +hyA +dCB +rdS +iWp +ktQ +ktQ +ktQ +dPb +dPb +cVH +jES +xnS +icy +xjx +bCG +pzy +dPb +arm +jES +aej +iiE +arm +dPb +pVq +dvx +dvx +tIp +nFT +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(157,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +vvE +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +lHg +lzq +mQJ +rZk +uBG +pJY +pJY +uBG +wrH +ugM +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iLe +pKP +oPi +kkQ +iLe +aOw +bej +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +wTi +vEB +vEB +uBk +req +fkZ +jvW +gEk +cRP +cRP +cRP +rcc +jmw +fkZ +fEx +uBs +lAt +hyA +umC +iVZ +ktQ +ktQ +ktQ +dPb +dPb +dPb +gaP +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +cJz +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(158,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +xhp +vvE +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +clr +fBE +lzq +cRh +hFC +ipl +ipl +ipl +ipl +uBz +pyZ +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +oMh +oMh +oea +oMh +oMh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +mwW +vEB +waQ +ukf +seY +cBr +kdY +cRP +kND +lOp +kND +cRP +lBh +haW +nLb +rBu +lAt +dgg +sdr +rxc +ktQ +ktQ +ktQ +dPb +dPb +kjR +mOK +dPb +aNC +rlf +rlf +lTO +rlf +aBY +mvU +aej +kaZ +hYI +dPb +hco +oNF +mOK +mOK +mOK +mOK +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(159,1,1) = {" +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +bRM +xhp +xhp +xhp +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +clr +fBE +uko +xpM +lXG +pJY +pJY +pJY +pJY +wrH +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +yeQ +sWT +iKz +yeQ +haW +lhA +udi +kND +mDH +kND +sOE +rsM +xfO +yeQ +oDD +iMj +dxM +rxc +kND +ktQ +ktQ +ktQ +dPb +dPb +kZx +rpF +dPb +bEZ +rlf +qtw +lTO +rlf +aBY +mvU +aej +pcE +nNp +dPb +gwz +oNF +oFI +eZk +kUj +mML +dPb +tdy +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(160,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +bRM +cNI +bRM +bRM +xhp +xhp +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +clr +lHg +lzq +cwo +hFC +ipl +xfR +xfR +ipl +sUn +clr +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xNs +xNs +yeQ +yeQ +yeQ +haW +xlj +acp +kND +lOp +kND +ecx +hcm +kXw +yeQ +yeQ +fCK +yeQ +kND +ktQ +ktQ +ktQ +ktQ +dPb +dPb +dGV +iYk +dPb +nux +rlf +wZA +lTO +rlf +aBY +mvU +aej +pcE +fJx +dPb +vxb +oNF +ftq +usN +kUj +mOK +dPb +lYA +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(161,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +bRM +xhp +bRM +xhp +xhp +bRM +bRM +nxV +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +clr +fBE +uko +tGO +rZk +pJY +pJY +pJY +pJY +uBz +oOk +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +hKe +pao +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xNs +xNs +kND +mSR +haW +lhA +cRP +cRP +cRP +cRP +acp +cHz +cDc +mSR +kND +xNs +xNs +ktQ +ktQ +ktQ +ktQ +ktQ +dPb +dPb +beW +avv +dPb +wtM +rlf +rlf +lTO +rlf +aBY +mvU +aej +pcE +wLG +dPb +uEV +oNF +gyj +rAW +kUj +mML +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(162,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +bRM +xhp +xhp +bRM +xhp +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +nuq +xsC +uko +clr +eUR +xfR +ipl +ipl +ipl +gZt +wrd +clr +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +lGv +icK +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xNs +crZ +cDc +fkZ +oYq +tvd +gUN +acp +rHE +hjN +pUX +haW +xNs +vzu +xNs +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +dPb +dPb +coo +wym +dPb +cNR +rlf +gfk +dPb +mer +aBY +mvU +aej +pcE +hYI +dPb +xTk +qly +mOK +mOK +mOK +mOK +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(163,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +bRM +gPA +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +pyZ +tjq +dOl +jUk +lgq +oZu +utw +eRn +eRn +oFo +mwq +clr +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wrx +wsv +lKL +foI +nJX +trs +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kZh +ktQ +ktQ +mgD +eKn +jFM +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +haW +xNs +fQL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +klY +dPb +dPb +dPb +dPb +dPb +dPb +cnh +dPb +fCi +rop +dsd +aej +pcE +nNp +dPb +dPb +dPb +dPb +dPb +qnX +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(164,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +xhp +xhp +xhp +xhp +xhp +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +bRM +bRM +bRM +bRM +bRM +clr +lHg +ssR +afs +wrH +wrH +wrH +gZt +dJG +wrH +gIp +clr +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +uVa +nEQ +fmN +lKL +qmz +eDL +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +rxc +rxc +yeQ +ktQ +yeQ +haW +jFM +yeQ +gKs +vWK +upy +yeQ +xgc +nEE +hJH +yeQ +fkZ +iVt +yeQ +ktQ +yeQ +rxc +xNs +yeQ +ktQ +lYA +dPb +qPW +sXV +tJi +upo +dPb +mOK +dPb +mSZ +aej +aej +aej +pcE +fJx +dPb +cup +spL +iEU +oHo +hIZ +oHo +dPb +tdy +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(165,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +xhp +xhp +xhp +xhp +bRM +xhp +xhp +xhp +xhp +xhp +xhp +bRM +nbF +gPA +nbF +bRM +nbF +bRM +clr +fHf +ssR +clr +xoF +xoF +bcf +dHg +iRW +clr +uhc +clr +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +ujh +iIu +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +yeQ +yeQ +yeQ +yeQ +fkZ +fkZ +bIk +mSR +iga +kUL +yeQ +sFs +ivK +nHK +lWU +fkZ +eKn +xNs +xNs +xNs +xNs +coy +yeQ +ktQ +tdy +dPb +dPb +dPb +ygz +tJi +cnh +mOK +cnh +jES +ahY +ahY +ahY +vhi +dYQ +xJu +dYQ +dYQ +dYQ +dYQ +hxt +mML +dPb +klY +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(166,1,1) = {" +ktQ +ktQ +ktQ +ktQ +lma +lma +lma +lma +ktQ +bRM +bRM +bRM +bRM +xhp +xhp +xhp +bRM +bRM +nxV +bRM +xhp +xhp +xhp +xhp +bRM +bRM +clr +cBU +ssR +afs +afs +afs +clr +clr +afs +clr +gek +nuq +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +hhE +kSn +jzc +lKg +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +ngx +lHo +phA +aeH +yeQ +eab +fkZ +yeQ +uNp +erk +upy +yeQ +phG +cLn +fBQ +yeQ +fkZ +eKn +xNs +arN +anK +cPf +mnT +yeQ +ktQ +dPb +dPb +aRR +sXV +tJi +jnu +dPb +rgO +dPb +pgJ +fXX +dth +pgJ +oTC +dth +dPb +kQW +lAF +kQW +mOK +nIx +mOK +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(167,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +bRM +xhp +bRM +bRM +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +bRM +bRM +clr +chJ +txi +hWr +hWr +qsB +rFn +cGG +qsB +jMp +qsi +kaT +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ewE +pIW +ujh +ktQ +ujh +ujh +stC +jzc +kqH +ujh +ktQ +ujh +pjZ +jjq +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +mnT +lHo +phA +qgz +yeQ +uqb +muV +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +fkZ +fkZ +yeQ +aeH +rcR +cPf +mnT +rxc +ktQ +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(168,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +bRM +bRM +bRM +bRM +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +xhp +xhp +ktQ +ktQ +ktQ +ujh +stC +vLo +yie +ujh +ktQ +ujh +eaB +ujh +jzc +tpG +ujh +ktQ +ujh +sUO +jzc +stC +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iqu +tRC +xzd +ftt +aeH +yeQ +guf +muV +yeQ +gDT +aYZ +gvb +yeQ +vNz +foL +tqE +yeQ +dvn +ceA +yeQ +agi +dWQ +rxc +uGA +rxc +ktQ +dPb +dPb +dPb +tdy +klY +tdy +dPb +dPb +dPb +klY +lYA +klY +klY +tdy +lYA +dPb +dPb +dPb +klY +tdy +tdy +dPb +dPb +dPb +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(169,1,1) = {" +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +bRM +bRM +bRM +xhp +xhp +xhp +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ujh +dek +jzc +saQ +ujh +ktQ +ujh +krd +jjh +jzc +xEm +ujh +ktQ +ujh +lkG +jzc +pQS +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iqu +agc +xCe +phA +bnC +bIk +fkZ +jFM +bIk +gDT +wNM +kkP +yeQ +xsr +cxz +gDT +bIk +fkZ +fkZ +bIk +bnC +rcR +cPf +mnT +rxc +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(170,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ujh +jHZ +jzc +nUo +ujh +ktQ +ujh +fux +ujh +lMq +joj +ujh +ktQ +ujh +wrm +jzc +fhp +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +kla +lHo +mQh +cpn +yeQ +dvn +eKn +yeQ +aRM +swY +eGL +yeQ +ahc +aiI +aRM +yeQ +kXw +haW +yeQ +quK +faJ +tic +mnT +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(171,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +huu +ujh +ujh +ujh +ujh +stC +puB +jzc +jzc +ujh +ujh +ujh +ujh +cEK +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +yeQ +xzd +xzd +yeQ +yeQ +eab +eKn +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +eKn +ggA +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(172,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +bqT +jzc +jzc +ujh +ujh +ujh +ujh +ujh +eeG +dgk +stC +ujh +jzc +jzc +jzc +wHW +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +aPL +gDT +bJV +bnC +yeQ +fkZ +haW +yeQ +gDT +aYZ +vNz +yeQ +gvb +foL +gDT +yeQ +eKn +dvn +yeQ +hnf +foz +qEC +hAg +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(173,1,1) = {" +ktQ +kag +qAy +qzX +qzX +qzX +kag +kag +kag +kag +kag +kag +kag +qzX +kag +qzX +qzX +qAy +wkD +wkD +kag +kag +kag +kag +kag +kag +ktQ +ktQ +ktQ +cto +cto +cto +cto +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +uiY +jzc +jzc +mYP +ujh +bHN +dnm +jiS +jzc +jzc +ixO +ujh +wTo +jzc +jzc +jzc +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +nxf +uLA +msN +upA +bnC +bIk +fkZ +haW +bIk +gDT +cxz +oQr +yeQ +oSe +mga +gDT +bIk +haW +aJN +bIk +bnC +nHK +mSR +iVt +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(174,1,1) = {" +ktQ +wkD +qzX +qzX +qAy +kag +wkD +wkD +wkD +atu +qAy +kag +kag +qAy +qzX +qzX +wkD +wkD +wkD +wkD +kag +kag +wkD +qzX +kag +kag +ktQ +ktQ +cto +nVb +qfH +qfH +qfH +qfH +exK +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vQI +dqM +kyi +fMh +jzc +xeq +jzc +jzc +lKL +lKL +jzc +jzc +xeq +jzc +kyi +mrI +nzB +nni +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rGa +uLA +rkm +upA +bnC +yeQ +haW +haW +yeQ +aRM +aiI +ahc +yeQ +pjH +bMv +aRM +yeQ +haW +fkZ +yeQ +aJH +vFu +int +hAg +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(175,1,1) = {" +ktQ +kag +qzX +wkD +wkD +wkD +gdY +gdY +wkD +wkD +wkD +kag +kag +qzX +qzX +nRS +nRS +wkD +wEE +qAy +kag +kag +wEE +wkD +qzX +wkD +ktQ +ktQ +cto +fUD +pLQ +wIj +bjI +pLQ +lOe +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +nAq +ogJ +ceo +auY +jzc +eeG +jzc +lKL +lKL +lKL +lKL +jzc +eeG +jzc +epS +eJk +oQj +nhB +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +rGa +uLA +vNz +upA +xRF +yeQ +haW +mxM +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +haW +guf +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(176,1,1) = {" +ktQ +kag +qAy +wkD +wkD +gdY +gdY +gdY +gdY +wkD +wkD +qAy +kag +qzX +wkD +nRS +wkD +wEE +wEE +kag +qaP +qaP +qaP +wEE +wkD +kag +ktQ +ktQ +cto +fUD +oTP +mUG +mUG +xuE +lOe +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +eSR +hxx +oMb +eLB +hZa +ujh +jzc +lKL +iPv +eOW +lKL +jzc +ujh +nfs +aKe +mXK +uiT +xiW +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +iIx +uLA +rkm +upA +bnC +yeQ +haW +haW +yeQ +gDT +aYZ +vNz +yeQ +rkm +foL +gDT +yeQ +haW +haW +yeQ +mFm +cDp +nFj +xed +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(177,1,1) = {" +ktQ +wkD +wkD +wkD +gdY +gdY +kSj +gdY +ehT +wkD +wkD +qAy +qzX +wkD +wkD +wkD +wkD +wEE +kag +kag +qaP +qaP +qaP +wEE +wkD +kag +ktQ +ktQ +nVb +xMD +pLQ +plI +mUG +pLQ +lOe +cto +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +ujh +ujh +ujh +stC +jzc +lKL +jYe +hef +lKL +jzc +stC +ujh +ujh +ujh +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +aPL +gDT +bJV +bnC +yeQ +haW +guf +bIk +gDT +hGz +jGk +yeQ +fdY +wNM +gDT +bIk +haW +haW +xec +cDp +cDp +pck +yeQ +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(178,1,1) = {" +ktQ +kag +wkD +wkD +gdY +gdY +mYG +gdY +ehT +nRS +wkD +btE +wkD +wkD +kkC +wEE +wEE +qaP +qaP +qaP +qaP +qaP +wEE +wEE +wkD +qzX +ktQ +ktQ +rsQ +fLQ +mUG +mUG +mUG +wBM +qzq +cto +cto +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +sOv +xVA +xVt +sMD +lKL +oAI +pTK +lKL +ajz +boT +caS +qVl +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +cGD +bJV +bnC +yeQ +bdI +haW +yeQ +aRM +oAs +ngw +yeQ +eGL +swY +aRM +yeQ +haW +iVt +yeQ +oLn +uTm +qwz +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(179,1,1) = {" +ktQ +wkD +qAy +wkD +wkD +gdY +gdY +gdY +cbz +wkD +ocd +wkD +wkD +wkD +wkD +wEE +qaP +qaP +qaP +qaP +qaP +qaP +wEE +wEE +wkD +wkD +ktQ +ktQ +rsQ +vLM +mUG +mUG +mUG +mUG +qzq +cto +cto +cto +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vQI +hSK +pph +rMY +jzc +lKL +cSu +okM +lKL +jzc +sJG +bYR +bVd +nni +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +xqL +bnC +yeQ +haW +haW +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +haW +haW +yeQ +nsL +yeQ +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(180,1,1) = {" +ktQ +kag +qzX +qzX +wkD +nRS +wkD +wkD +wkD +nNa +wkD +wEE +wEE +qaP +qaP +qaP +qaP +wEE +qaP +qaP +qaP +qaP +wEE +wEE +kag +kag +ktQ +ktQ +rsQ +mUG +mUG +mUG +mUG +mUG +iqS +cto +cto +cto +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +nAq +pLs +dvV +tdW +jzc +lKL +ggV +kSc +lKL +jzc +avI +vTz +kDW +nhB +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +yeQ +yeQ +crZ +haW +haW +haW +haW +txe +acp +edd +haW +haW +guf +haW +crZ +yeQ +yeQ +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(181,1,1) = {" +ktQ +wkD +qzX +qzX +wkD +wkD +wkD +wkD +ocd +wEE +wEE +qaP +qaP +qaP +wEE +wEE +wEE +wEE +wEE +wEE +wEE +wEE +wEE +kag +wkD +kag +ktQ +ktQ +iRQ +qoN +mUG +mUG +mUG +mUG +jKu +iPV +iPV +exK +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +eSR +tSE +kjH +pYS +jzc +lKL +mfl +rev +lKL +jzc +ssW +sbs +qyA +xiW +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +kND +imo +haW +iQY +haW +txe +acp +edd +haW +iQY +qfy +xNs +xNs +rgX +xNs +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(182,1,1) = {" +ktQ +wkD +qzX +qzX +qzX +btE +nRS +bkY +wEE +qaP +qaP +qaP +wEE +wEE +wEE +wEE +wkD +wkD +nRS +nRS +nRS +wkD +wkD +qAy +kag +wkD +ktQ +ktQ +cto +rsQ +mUG +mUG +uSs +mUG +mUG +mUG +mUG +iqS +cto +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +azO +uoL +uib +jzc +lKL +cmn +weP +lKL +jzc +oUb +uvD +cmi +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +yeQ +bIk +yeQ +oAR +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +yeQ +iqu +iqu +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(183,1,1) = {" +ktQ +kag +gdY +ehT +wkD +wkD +wEE +qaP +qaP +qaP +wEE +wEE +wkD +nRS +nRS +wkD +wkD +nRS +nRS +nRS +nRS +wkD +qzX +qAy +kag +wkD +ktQ +ktQ +cto +rnE +mUG +eQk +miz +sBo +mUG +mUG +mUG +iqS +cto +ktQ +ktQ +ktQ +ktQ +ujh +ujh +ujh +cph +eHJ +wTH +ujh +lKL +lKL +lKL +lKL +ujh +cph +eHJ +wTH +ujh +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +fMf +haW +haW +guf +txe +xpL +bOf +rxc +yaE +yaE +yaE +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(184,1,1) = {" +ktQ +qzX +gdY +nRS +wkD +wkD +qaP +qaP +wEE +wEE +wEE +wkD +wkD +wkD +wkD +wkD +wkD +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qAy +kag +ktQ +ktQ +cto +rnE +mUG +mUG +sBo +mUG +mUG +mUG +mUG +iqS +cto +ktQ +ktQ +ktQ +stC +ujh +stC +oYb +nxm +ocj +ocj +ujh +jzc +lKL +lKL +jzc +ujh +don +jkZ +ulT +cMC +stC +ujh +stC +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cHU +rxc +hGz +hGz +haW +txe +tEc +bOf +rxc +rxc +oOK +rxc +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(185,1,1) = {" +ktQ +wkD +cHg +wkD +wkD +wEE +qaP +wEE +wkD +wkD +wkD +wkD +wkD +wkD +jHQ +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +kag +ktQ +ktQ +cto +rnE +mUG +mUG +mUG +mUG +mUG +mUG +mUG +iqS +ktQ +ktQ +ktQ +ktQ +rRu +nah +rRu +jzc +lKL +lKL +lKL +wDQ +lKL +lKL +lKL +lKL +wDQ +lKL +lKL +lKL +gby +orZ +mPX +qYf +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cHU +ngw +jVg +ngw +haW +txe +eTn +bOf +rxc +yaE +aLG +yaE +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(186,1,1) = {" +ktQ +wkD +wkD +dob +wkD +bkY +qaP +wEE +wkD +cbz +kkC +btE +crz +btE +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +qzX +kag +ktQ +ktQ +ktQ +iRQ +pAp +bur +knc +iKh +iKh +iKh +mUG +qzq +ktQ +ktQ +ktQ +ktQ +dHD +xyk +dHD +jzc +lKL +lKL +jzc +eeG +jzc +lKL +lKL +jzc +eeG +jzc +lKL +lKL +dOg +jQk +oZp +got +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +eCc +yeQ +yeQ +yeQ +yeQ +bIk +yeQ +bIk +yeQ +yeQ +yeQ +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(187,1,1) = {" +ktQ +qzX +qAy +wkD +wkD +wEE +qaP +qaP +wEE +wkD +wkD +wkD +wkD +wkD +nRS +nRS +wkD +wkD +wkD +wkD +jHI +qzX +qzX +qzX +qAy +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +cto +kSa +wUX +wUX +wUX +rFv +ktQ +ktQ +ktQ +ktQ +stC +ujh +stC +mpq +jzc +jzc +mYP +stC +gJt +iak +bHF +hhh +stC +wTo +jzc +jzc +jzc +stC +ujh +stC +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +oCA +czn +txe +czi +edd +dtY +ukY +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(188,1,1) = {" +ktQ +kag +wkD +nRS +wkD +wkD +wEE +qaP +qaP +qaP +wEE +wEE +wEE +wEE +wkD +wkD +nRS +wkD +wkD +wkD +wkD +wkD +wkD +qAy +kag +qzX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +ujh +tdz +tdz +stC +ujh +yaZ +bIo +lKL +jzc +ujh +stC +uEW +uEW +ujh +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +mgD +lRK +lIr +vuR +tEc +edd +txe +jww +mgD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(189,1,1) = {" +ktQ +kag +gdY +wkD +wkD +wkD +nNa +wEE +wEE +qaP +qaP +qaP +qaP +wEE +wEE +wEE +wEE +wkD +wkD +nNa +wkD +kag +qAy +kag +kag +qzX +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +vQI +fcx +jzc +jzc +ujh +dvC +lKL +lKL +lKL +cNn +vHX +ujh +jzc +jzc +riA +nni +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +yeQ +uhM +rbr +xNs +acp +epR +fEa +orl +yeQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(190,1,1) = {" +ktQ +wkD +qzX +qzX +wkD +wkD +wkD +nRS +wkD +wEE +wEE +wkD +qaP +qaP +qaP +qaP +qaP +qaP +wEE +wkD +wkD +btE +wkD +qAy +kag +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +eSR +hzm +jzc +ajz +ujh +wLV +lKL +lKL +lKL +lKL +cVl +ujh +sMD +jzc +hbT +xiW +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +yeQ +xNs +hJu +uEN +hJu +qqL +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(191,1,1) = {" +ktQ +kag +qzX +qzX +qzX +cbz +wkD +wkD +wkD +wkD +nRS +ocd +wkD +wkD +wkD +wEE +qaP +qaP +qaP +wEE +cbz +wkD +wkD +wkD +wkD +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +stC +iDp +jzc +jzh +stC +ujh +qTK +pkC +vqd +vYO +ujh +ujh +lNk +jzc +wEa +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +kND +iqu +eoo +sbC +wTj +yeQ +kND +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(192,1,1) = {" +ktQ +kag +qzX +qzX +qzX +qzX +btE +nRS +wkD +wkD +gdY +wkD +gdY +ehT +nRS +wkD +wkD +wEE +qaP +qaP +wkD +wkD +wkD +wkD +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +hvv +jzc +jzc +jzc +xJq +ujh +ujh +ujh +ujh +ujh +ujh +mhg +jzc +jzc +jzc +rMN +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(193,1,1) = {" +ktQ +qAy +qzX +qzX +csb +wkD +wEE +wEE +wEE +wEE +wEE +wkD +bnS +dle +wkD +wkD +wkD +wEE +wEE +qaP +wEE +nRS +nRS +wkD +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +skn +ygL +rXE +jzc +lZv +ujh +bmW +bmW +bmW +bmW +ujh +lNF +jzc +tkk +ygL +ocz +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(194,1,1) = {" +ktQ +kag +qzX +btE +wkD +wEE +qaP +wEE +wEE +qaP +qaP +wkD +wkD +wkD +wkD +jYs +nRS +nRS +wkD +qaP +wEE +wkD +wkD +qzX +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +ujh +ujh +ujh +ujh +ujh +ujh +vYQ +oMk +gJV +qQy +ujh +ujh +ujh +ujh +ujh +ujh +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(195,1,1) = {" +ktQ +qzX +qzX +dob +wkD +wEE +qaP +wEE +wEE +wkD +wEE +qaP +wEE +wkD +btE +wkD +wkD +wkD +wkD +wEE +qaP +wEE +wkD +qAy +qAy +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +bmW +bmW +bmW +bmW +ujh +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +ujh +bmW +bmW +bmW +bmW +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(196,1,1) = {" +ktQ +wkD +qAy +wkD +wkD +wEE +wEE +wkD +wkD +wkD +wEE +qaP +wEE +xky +qAy +puO +qAy +qAy +ocd +wkD +qaP +wkD +wkD +qAy +qAy +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +vYQ +oMk +gJV +qQy +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ujh +vYQ +oMk +gJV +qQy +ujh +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(197,1,1) = {" +ktQ +qzX +qzX +nRS +wEE +qaP +qaP +wkD +cbz +wkD +wEE +qaP +wEE +qAy +qAy +xmX +crT +qAy +wkD +wEE +qaP +qaP +qAy +qzX +qzX +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(198,1,1) = {" +ktQ +kag +qzX +nRS +wEE +qaP +wkD +wkD +btE +nRS +wEE +wEE +wEE +suW +hAz +xmX +eNg +iIe +wkD +wEE +qaP +qaP +wEE +wkD +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(199,1,1) = {" +ktQ +wkD +qzX +nRS +wEE +wEE +nRS +jHQ +qzX +nRS +wEE +wEE +wEE +mUF +xmX +xmX +aui +qAy +wkD +wEE +qaP +wEE +wEE +qAy +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(200,1,1) = {" +ktQ +kag +qzX +wkD +wEE +wEE +wkD +wkD +btE +nRS +wEE +qaP +wkD +iIe +hAz +xmX +xmX +qAy +wkD +wEE +qaP +wEE +wkD +wkD +qAy +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(201,1,1) = {" +ktQ +qzX +qzX +wkD +wEE +qaP +wEE +wkD +kkC +wkD +wEE +qaP +wEE +qAy +qAy +eqK +xmX +suW +wkD +wkD +qaP +qaP +wEE +wkD +qAy +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(202,1,1) = {" +ktQ +kag +btE +wEE +wEE +qaP +wEE +wkD +wkD +wkD +wEE +wEE +wkD +xky +qAy +qAy +rvU +gdY +nRS +wkD +wEE +qaP +wEE +wkD +wkD +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(203,1,1) = {" +ktQ +wkD +xQo +wEE +wEE +wEE +wEE +bkY +xYQ +btE +wEE +qaP +qaP +wkD +wkD +wkD +wGb +gdY +nRS +wEE +wEE +qaP +wEE +ocd +qAy +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(204,1,1) = {" +ktQ +wkD +xYQ +bkY +wEE +qaP +wEE +bkY +dDO +qzX +wkD +wkD +qaP +qaP +wkD +wkD +dob +wkD +wkD +wkD +qaP +qaP +kag +qAy +kag +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(205,1,1) = {" +ktQ +wkD +dDO +bkY +wEE +qaP +wEE +wEE +oxD +btE +wkD +eXg +wEE +wEE +wkD +wEE +wEE +wkD +wkD +wEE +qaP +wEE +wkD +wkD +kag +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(206,1,1) = {" +ktQ +qAy +gdY +xYQ +crz +wEE +crz +xYQ +gdY +qzX +hqs +nRS +wkD +qaP +qaP +wEE +qaP +qaP +qaP +qaP +qaP +wkD +nRS +wkD +wkD +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(207,1,1) = {" +ktQ +wkD +gdY +gdY +wEE +qaP +wEE +gdY +ehT +qzX +qzX +wkD +nRS +nRS +wEE +wkD +wEE +qaP +qaP +qaP +wEE +wkD +wkD +wkD +qzX +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(208,1,1) = {" +ktQ +kag +ehT +gdY +qaP +qaP +qaP +gdY +ehT +qzX +qzX +gdY +nRS +nRS +wkD +wkD +kag +wEE +wEE +wEE +wEE +wkD +wkD +btE +qzX +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(209,1,1) = {" +ktQ +qzX +ndN +gdY +wEE +qaP +wEE +gdY +ehT +qzX +qzX +gdY +gdY +gdY +wkD +wkD +qAy +nNa +nRS +nRS +nRS +wkD +wkD +qzX +qzX +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(210,1,1) = {" +ktQ +kag +ehT +bnS +gdY +gdY +gdY +bnS +ehT +qzX +qzX +gdY +gdY +gdY +qAy +kag +kag +qAy +wkD +ocd +wkD +wkD +qzX +qzX +qzX +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +ktQ +wqk +wqk +wqk +ktQ +ktQ +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(211,1,1) = {" +ktQ +wkD +gdY +qAy +gdY +ehT +ndN +gdY +qAy +qzX +qzX +qzX +gdY +qAy +gdY +kag +wkD +kag +qAy +qzX +qzX +qzX +qzX +qzX +qzX +wkD +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +ktQ +ktQ +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(212,1,1) = {" +ktQ +kag +qzX +wkD +wkD +qAy +kag +wkD +wkD +kag +wkD +kag +wkD +kag +kag +kag +kag +kag +qAy +wkD +wkD +qzX +kag +wkD +kag +kag +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +wqk +rlm +rlm +rlm +rlm +wqk +wqk +wqk +wqk +wqk +wqk +wqk +rlm +rlm +rlm +rlm +rlm +rlm +rlm +wqk +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(213,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +sRi +sRi +sRi +sRi +rlm +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(214,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +nxV +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sRi +sRi +sRi +bML +bML +sRi +sRi +sRi +rlm +rlm +rlm +rlm +sRi +sRi +sRi +gGt +gGt +gGt +gGt +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(215,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +htj +ktQ +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +lQY +ktQ +qiO +lQY +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sRi +sRi +bML +bML +bML +bML +sRi +sRi +rlm +rlm +rlm +sRi +sRi +sRi +sRi +gGt +bXQ +aVJ +aVJ +gGt +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(216,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +efN +htj +htj +htj +htj +htj +htj +efN +efN +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +xhp +ktQ +lma +lma +ktQ +ktQ +wqk +rlm +rlm +sRi +bML +bML +hCj +bML +bML +sRi +sRi +rlm +rlm +sRi +sRi +sRi +sRi +sRi +gGt +oPm +aVJ +aVJ +gGt +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(217,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +efN +efN +efN +efN +efN +efN +efN +efN +efN +htj +htj +htj +efN +efN +efN +efN +efN +efN +clr +clr +clr +clr +clr +clr +clr +clr +clr +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sRi +bML +bML +mNN +bML +bML +sRi +sRi +vHY +sRi +sRi +sRi +sEe +gGt +gGt +gGt +gGt +iyj +gGt +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(218,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +htj +htj +cpj +htj +wqi +htj +efN +efN +htj +htj +htj +efN +clr +clr +clr +clr +clr +clr +clr +vlt +euU +afs +jlm +hWr +awB +vts +clr +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +sRi +bML +bML +bML +hFh +sRi +sRi +sRi +sRi +sRi +qEO +sEe +eaw +aVJ +uyW +mzj +uyW +ekd +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(219,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +htj +htj +efN +htj +cVg +cpj +htj +htj +htj +htj +htj +efN +clr +fkQ +qSd +qSd +qSd +wCE +afs +mak +elI +kOn +huy +afs +afs +cwO +clr +clr +clr +clr +clr +clr +clr +xhp +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +sRi +sRi +sRi +sRi +sdj +sRi +sEe +sEe +whZ +whZ +whZ +iyj +aVJ +uyW +uyW +uyW +vmM +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(220,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +htj +htj +efN +efN +efN +efN +efN +efN +efN +efN +htj +htj +clr +clr +xMG +afs +afs +afs +qSd +afs +khr +vls +afs +ssR +afs +gnT +mnz +hDw +qrz +pkh +afs +qKl +wYv +clr +xhp +ktQ +ktQ +wqk +rlm +rlm +rlm +sRi +sRi +sRi +sRi +uuk +sEe +sEe +whZ +whZ +whZ +sEe +sEe +eaw +aVJ +uyW +uyW +uyW +fCq +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(221,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +htj +efN +efN +efN +xhp +xhp +xhp +xhp +xhp +efN +htj +htj +clr +xhW +eIL +aHa +avE +tKN +iOt +ald +ald +afs +afs +dFH +ald +opQ +wCu +wAr +bNj +uvO +afs +eqb +eza +clr +xhp +ktQ +ktQ +wqk +rlm +rlm +rlm +rlm +vHY +sRi +sEe +sEe +whZ +whZ +whZ +sEe +sEe +sEe +sEe +gGt +gGt +dYD +dYD +uyW +fCq +gGt +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(222,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +efN +efN +efN +efN +xhp +xhp +xhp +xhp +xhp +efN +htj +htj +clr +xhW +oHl +afs +afs +dDa +jlm +awB +rFn +rFn +awB +aKM +afs +oEz +vsn +oqm +azz +bVJ +tVq +bOs +gfp +clr +xhp +ktQ +ktQ +wqk +rlm +bML +bML +sRi +sRi +tsy +whZ +whZ +whZ +sEe +sEe +qEO +sRi +sRi +sRi +sRi +gGt +bOT +pJr +uyW +cOq +gGt +rlm +rlm +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(223,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +clr +clr +clr +clr +clr +clr +bwm +bwm +bwm +clr +htj +htj +clr +xhW +eIL +aHa +aig +dDa +cwO +afs +afs +afs +afs +xMG +afs +thD +usV +afs +erV +usV +afs +dDa +lzq +clr +xhp +ktQ +ktQ +wqk +rlm +bML +sRi +sRi +sRi +whZ +whZ +sEe +sEe +sEe +sRi +sRi +sRi +sRi +sRi +rlm +gGt +gGt +gGt +gGt +gGt +gGt +rlm +rlm +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(224,1,1) = {" +ktQ +ktQ +ktQ +xhp +xhp +kWI +xhp +cuM +clr +wrH +nZe +nZe +wrH +clr +tpt +qFH +pIa +clr +hjr +nHe +clr +clr +pwK +afs +afs +dDa +sxL +krT +eHB +rnB +afs +gjs +dVL +gjs +gjs +vvX +fIb +xpR +bSg +rRZ +hYJ +clr +gUq +ktQ +ktQ +wqk +rlm +sRi +sRi +sRi +sEe +whZ +sEe +sRi +sRi +sRi +sRi +sRi +sRi +oHd +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(225,1,1) = {" +ktQ +ktQ +xhp +xhp +clr +xxA +clr +dhP +clr +wrH +bVJ +qzP +otf +clr +uqZ +gjs +dEG +qsM +peG +peG +qjZ +pcC +mhe +qik +vhD +dDa +bsM +gjs +ity +ceQ +hUE +hGx +wFu +gjs +gjs +gjs +gjs +gjs +eUt +wmh +ltT +lVr +por +ktQ +ktQ +wqk +rlm +sRi +tCx +sRi +sEe +whZ +sEe +sRi +hFh +sRi +vHY +fWa +vHY +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(226,1,1) = {" +ktQ +ktQ +xhp +mQR +nDi +wrH +nZe +wrH +clr +mip +bVJ +bVJ +mIh +clr +uqZ +gjs +gjs +xMg +mhe +mhe +csJ +vXi +vXi +qcw +lJj +rbW +xMm +ikJ +hzK +vWB +afs +mlp +gjs +gjs +jtq +sLh +gjs +gjs +azi +ikJ +wWO +lhs +por +ktQ +ktQ +wqk +rlm +rlm +sRi +sRi +sEe +whZ +whZ +tsy +sRi +sRi +sRi +sRi +sRi +sRi +sRi +sRi +sRi +sRi +sRi +sRi +rlm +rlm +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(227,1,1) = {" +ktQ +xhp +xhp +xhp +clr +wrH +bVJ +wrH +wfe +bVJ +bVJ +fxk +wrH +clr +tpy +uNa +gjs +cMK +owQ +owQ +owQ +mhe +mhe +fVh +gKT +dDa +lzq +pwK +afs +afs +afs +jKW +gjs +gjs +tHf +bEI +ybr +gjs +gjs +gjs +eUt +lVr +por +ktQ +ktQ +ktQ +wqk +rlm +sRi +sRi +sRi +sEe +whZ +whZ +whZ +sEe +sEe +sEe +sEe +sRi +sRi +sRi +sRi +sRi +sRi +sRi +rlm +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(228,1,1) = {" +ktQ +xhp +xhp +qXf +vWP +wrH +bVJ +eGZ +clr +fqN +bVJ +dUE +bVJ +tVq +lMR +dSK +gjs +dEG +bPx +bPx +bPx +xMg +mhe +gWY +vXi +hIJ +jJR +gjs +sMz +gjs +hPi +gjs +gjs +gjs +gjs +bEI +lTq +jTN +tVi +gjs +pVk +clr +por +ktQ +ktQ +ktQ +wqk +rlm +sRi +sRi +sRi +sdj +sEe +sEe +whZ +whZ +whZ +whZ +sEe +sEe +sEe +tsy +sRi +sRi +sdj +sRi +rlm +rlm +rlm +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(229,1,1) = {" +xhp +xhp +xhp +vZF +vWP +wrH +bVJ +wrH +mvC +lbP +bVJ +dUE +bVJ +tVq +lMR +dSK +gjs +gjs +gjs +gjs +gjs +mhe +mhe +lDu +oXC +fLc +xmG +pEc +bvG +gjs +gjs +gjs +gjs +gjs +gjs +bEI +qLB +xTO +lpo +gjs +vcU +clr +por +ktQ +ktQ +wqk +rlm +rlm +rlm +sRi +sRi +sRi +sRi +sRi +sEe +sEe +qEO +whZ +whZ +whZ +whZ +whZ +whZ +sEe +sRi +sRi +vHY +rlm +rlm +wqk +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(230,1,1) = {" +xhp +xhp +xhp +xhp +clr +wrH +bVJ +wrH +cPt +efG +bVJ +fxk +wrH +clr +atS +nPb +gjs +gjs +gjs +gjs +gjs +mhe +mhe +eii +tXc +dDa +vTW +afs +afs +afs +afs +lTq +gjs +gjs +tHf +bEI +ybr +gjs +gjs +gjs +eUt +bha +por +ktQ +ktQ +ktQ +wqk +rlm +rlm +rlm +hFh +sRi +sRi +sRi +sRi +sEe +sEe +whZ +whZ +sEe +sEe +whZ +whZ +whZ +sEe +hFh +sRi +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(231,1,1) = {" +xhp +xhp +xhp +wZr +kUr +wrH +rqG +wrH +clr +sWm +bVJ +bVJ +mIh +clr +jZQ +gjs +gjs +gjs +gjs +gjs +aTu +sXl +oXC +nqZ +lzY +dDa +ity +wEC +rPq +crY +afs +oCM +gjs +gjs +pvX +cXj +lTq +gjs +gjs +gjs +eUt +bha +por +ktQ +ktQ +ktQ +wqk +rlm +rlm +rlm +rlm +vHY +sRi +sRi +sEe +sEe +whZ +sEe +sEe +sEe +sEe +sEe +sEe +whZ +whZ +sRi +sRi +sRi +sRi +uje +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(232,1,1) = {" +ktQ +xhp +xhp +xhp +clr +cSW +clr +vig +clr +wrH +bVJ +qzP +tRx +clr +uqZ +gjs +hoi +eQc +dCS +dCS +dCS +bII +ktk +eir +ylL +dDa +ltK +jJR +ity +oME +hUE +wvZ +wFu +gjs +gjs +fDy +uqZ +gjs +gjs +wmh +heE +bha +por +ktQ +ktQ +wqk +gGt +rlm +rlm +sRi +sRi +sEe +sEe +sEe +sEe +whZ +sEe +sEe +gGt +gGt +gGt +gGt +sEe +sEe +whZ +sEe +sRi +sRi +sRi +uje +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(233,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +rvf +xhp +pOh +clr +wrH +rqG +rqG +wrH +clr +rhY +cQF +eGz +afs +afs +afs +pwK +afs +afs +afs +afs +rbW +xdd +eCC +oyg +nRY +afs +eup +lTq +gjs +gjs +fDy +uqZ +hoi +lCq +tPh +fou +clr +gUq +ktQ +ktQ +ktQ +wqk +rlm +vHY +sRi +sEe +sEe +whZ +sEe +whZ +whZ +sRi +sRi +gGt +lbc +aVJ +gGt +gGt +gGt +whZ +tsy +sRi +sRi +sRi +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(234,1,1) = {" +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +aNI +gjs +gjs +gjs +afs +eMl +vRq +dDa +tBq +fHi +huE +wHu +afs +afs +nuq +eHY +tCd +afs +jEw +sqB +clr +clr +clr +clr +ktQ +ktQ +ktQ +wqk +rlm +rlm +tCx +sRi +sEe +whZ +sEe +sEe +sRi +sEe +whZ +sEe +gGt +aVJ +aVJ +aVJ +aVJ +gGt +sEe +whZ +sEe +sRi +sRi +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(235,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +uuC +gjs +uUw +gjs +afs +gGJ +gjs +dDa +jpT +rWQ +cpf +iML +vND +afs +pyZ +gjs +gjs +afs +maL +gHl +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +wqk +rlm +gGt +sRi +sRi +aVJ +sEe +sRi +sRi +sRi +sEe +whZ +sEe +dro +aVJ +aVJ +aVJ +aVJ +dro +sRi +whZ +sRi +sRi +rlm +rlm +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(236,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +oni +gjs +uUw +qrW +afs +rki +gjs +oUT +jUk +jUk +jUk +sIt +lzq +afs +gjs +gjs +gjs +mLW +gjs +mTt +clr +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +rLe +aVJ +rLe +sRi +hFh +sRi +sEe +whZ +sEe +gGt +gGt +gGt +iyj +gGt +gGt +sEe +whZ +whZ +gGt +rlm +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(237,1,1) = {" +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +oni +gjs +uUw +gjs +afs +rki +gjs +bvO +xTV +xTV +xTV +xfs +edy +cby +iML +xAN +eSK +eSK +eSK +gjs +nuq +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sRi +sEe +aVJ +sRi +sRi +vHY +sRi +sEe +sEe +sEe +gGt +aVJ +aVJ +aVJ +aVJ +gGt +sEe +whZ +whZ +sEe +sRi +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(238,1,1) = {" +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +oni +gjs +uUw +gjs +tVq +gjs +kqp +clr +clr +clr +clr +hnl +afs +hec +eTG +gjs +gjs +gjs +gjs +gjs +ugM +bRM +ktQ +xhp +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +rLe +aVJ +rLe +oHd +rlm +sRi +sEe +sEe +sEe +iyj +aVJ +aVJ +sNP +aVJ +dro +sEe +whZ +sEe +sEe +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(239,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +clr +aPP +gjs +gjs +gjs +afs +bQx +aue +clr +efN +efN +clr +cAi +afs +frw +gjs +eSK +pJY +pJY +pJY +dEi +ugM +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +sEe +aVJ +sRi +sRi +vHY +sRi +sEe +whZ +sRi +gGt +jvl +uyW +bjy +uyW +gGt +sEe +whZ +sEe +sRi +sRi +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(240,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +efN +efN +efN +efN +efN +efN +xhp +xhp +clr +hjr +ohG +ohG +nHe +clr +clr +clr +clr +efN +htj +clr +lmg +afs +cRh +gjs +gjs +gjs +gjs +gjs +gjs +pyZ +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +sRi +rLe +aVJ +rLe +sRi +vHY +sRi +sEe +whZ +sEe +dro +mzj +uyW +oaL +uyW +gGt +sRi +whZ +whZ +sEe +sRi +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(241,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +efN +htj +htj +htj +htj +efN +efN +efN +htj +htj +htj +htj +htj +efN +efN +efN +efN +htj +htj +clr +lmg +clr +lde +gjs +eSK +pJY +pJY +pJY +pJo +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sEe +sEe +aVJ +sEe +sRi +vHY +vHY +sEe +sEe +sRi +gGt +jvl +uyW +uyW +uyW +dro +sRi +tsy +whZ +sEe +sRi +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(242,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +efN +htj +gtH +htj +htj +efN +efN +htj +htj +htj +htj +htj +htj +htj +efN +efN +htj +htj +htj +clr +hnl +afs +cwo +gjs +gjs +gjs +gjs +gjs +cPA +clr +clr +xhp +xhp +ktQ +ktQ +ktQ +ktQ +wqk +rlm +sEe +rLe +aVJ +rLe +sEe +bjl +vHY +sEe +whZ +whZ +gGt +gGt +qYA +aFn +qYA +gGt +sEe +sEe +whZ +sEe +uuk +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(243,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +efN +htj +efN +htj +efN +efN +htj +htj +htj +htj +htj +efN +htj +efN +efN +efN +htj +htj +htj +clr +wKL +afs +tGO +gjs +eSK +pJY +pJY +pJY +dEi +dEi +clr +xhp +xhp +ktQ +ktQ +ktQ +wqk +rlm +bjl +sEe +sEe +aVJ +sEe +sEe +bjl +rlm +sRi +sRi +whZ +whZ +gGt +gGt +dro +gGt +gGt +sRi +whZ +whZ +sEe +gGt +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(244,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +xhp +efN +efN +htj +efN +efN +htj +efN +htj +htj +htj +efN +efN +efN +efN +efN +efN +htj +htj +htj +nuq +nWH +afs +eEP +gjs +gjs +gjs +gjs +gjs +gjs +mTt +clr +xhp +ktQ +ktQ +ktQ +ktQ +wqk +rlm +bjl +sEe +rLe +aVJ +rLe +sEe +bjl +vHY +sRi +sRi +sEe +sEe +sRi +sEe +sEe +sRi +sRi +sEe +whZ +sEe +sRi +sRi +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(245,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +xhp +efN +efN +efN +efN +efN +htj +htj +htj +efN +htj +efN +efN +efN +efN +efN +efN +efN +htj +htj +pyZ +jvP +ald +uXD +ikJ +aXm +pJY +pJY +pJY +dEi +dEi +clr +bRM +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +bjl +sEe +aVJ +sEe +bjl +bjl +rlm +edW +sRi +sRi +whZ +whZ +sEe +whZ +whZ +whZ +whZ +whZ +sRi +sRi +sRi +rlm +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(246,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +pPV +hZh +bRM +xhp +xhp +xhp +xhp +efN +htj +efN +efN +efN +efN +efN +efN +efN +efN +htj +kYt +kYt +htj +htj +clr +les +ykk +eog +gjs +gjs +gjs +gjs +gjs +cvL +gjs +clr +bRM +ktQ +ktQ +ktQ +ktQ +wqk +rlm +bML +bML +tsy +aVJ +tsy +bML +bML +rlm +rlm +sRi +sRi +sRi +sEe +qEO +sEe +whZ +whZ +whZ +sEe +sRi +sRi +sRi +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(247,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +bRM +ucR +bRM +bRM +xhp +xhp +xhp +efN +htj +efN +efN +efN +efN +efN +efN +grp +htj +cVg +kYt +kYt +htj +htj +clr +lHg +krN +afs +obA +jbZ +fNT +tlk +duX +afs +xMG +clr +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +bML +sNP +viG +sNP +bML +bML +bML +rlm +bML +sRi +sRi +sRi +sRi +sEe +sEe +sEe +sEe +sEe +sRi +sRi +vHY +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(248,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +sFi +nbF +eam +nbF +nbF +eam +fOX +pdg +gJb +efN +efN +efN +htj +sme +htj +tLe +efN +efN +efN +efN +htj +htj +clr +cBU +ssR +afs +afs +afs +afs +afs +afs +afs +xTV +nuq +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +bML +tsy +sNP +tsy +bML +bML +bML +bML +bML +kdA +bML +sRi +sRi +sRi +sdj +sRi +sRi +sRi +sRi +sRi +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(249,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +eJH +bRM +bRM +bRM +bRM +bRM +bRM +bRM +efN +sxA +efN +sst +htj +htj +htj +vfN +efN +efN +xhp +xhp +efN +htj +htj +clr +chJ +txi +hWr +nKJ +qsB +rFn +xDo +qsB +jMp +rFn +pyZ +bRM +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +rlm +vGr +bML +bML +bML +vGr +bML +bML +bML +bML +bML +bML +sRi +sRi +sRi +sRi +rlm +rlm +sRi +sRi +rlm +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(250,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +bRM +ktQ +bRM +ktQ +ktQ +ktQ +efN +gnu +uEC +cpj +cpj +fNW +wqi +htj +efN +xhp +xhp +xhp +efN +efN +efN +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +clr +xhp +xhp +ktQ +ktQ +ktQ +wqk +rlm +rlm +gGt +kdA +rlm +rlm +rlm +rlm +rlm +rlm +bML +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +rlm +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(251,1,1) = {" +ktQ +ktQ +ktQ +ktQ +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +bRM +efN +oiD +htj +htj +efN +efN +efN +bRM +bRM +bRM +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +wqk +rlm +rlm +rlm +rlm +wqk +rlm +rlm +wqk +rlm +rlm +rlm +wqk +wqk +wqk +wqk +wqk +rlm +rlm +rlm +rlm +wqk +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(252,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +wqk +wqk +wqk +ktQ +wqk +wqk +ktQ +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +wqk +wqk +wqk +wqk +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(253,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +xhp +xhp +xhp +xhp +xhp +xhp +xhp +xhp +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(254,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} +(255,1,1) = {" +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +ktQ +"} diff --git a/1mapping_palette.dmm b/1mapping_palette.dmm index 8cbb11417c..deaaadd499 100644 --- a/1mapping_palette.dmm +++ b/1mapping_palette.dmm @@ -1,103898 +1,103898 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aau" = ( -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"aav" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/plating, -/area/space) -"aaK" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/space) -"aaY" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/space) -"abg" = ( -/obj/effect/forcefield/mime, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"abL" = ( -/obj/machinery/gateway/brass{ - dir = 6 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"abP" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/mimedouble, -/turf/simulated/floor/wood, -/area/space) -"abR" = ( -/obj/machinery/power/thermoregulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"ace" = ( -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/black, -/area/space) -"acl" = ( -/obj/machinery/mining/brace, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"acK" = ( -/obj/structure/girder, -/turf/template_noop, -/area/space) -"acQ" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/space) -"aea" = ( -/obj/machinery/computer/ship/engines, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"aeg" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"aeo" = ( -/obj/machinery/artifact_scanpad, -/obj/effect/simple_portal/linked, -/obj/effect/map_effect/interval/effect_emitter/sparks, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aeA" = ( -/obj/structure/closet/secure_closet/miner{ - pixel_x = -27 - }, -/obj/structure/bed/chair/bay/shuttle{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"aeH" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"aeX" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/reagent_containers/glass/beaker/bluespace, -/obj/item/weapon/reagent_containers/glass/beaker/bluespace{ - pixel_x = -7 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"afc" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/item/stack/material/lead{ - amount = 50 - }, -/obj/fiftyspawner/gold, -/obj/fiftyspawner/phoron, -/turf/simulated/floor/plating, -/area/space) -"afn" = ( -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"afA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"afD" = ( -/obj/structure/disposalpipe/sortjunction/untagged{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"afL" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "echidna_hatch"; - locked = 1; - name = "Rear Hatch" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"afN" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/space) -"afQ" = ( -/obj/effect/gibspawner/robot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ahk" = ( -/obj/effect/catwalk_plated/white, -/turf/template_noop, -/area/space) -"ahT" = ( -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/space) -"ahX" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aid" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"aiv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"aiy" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/space) -"aiz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"ajs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"ajt" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 5; - icon_state = "2-5" - }, -/turf/simulated/floor/plating, -/area/space) -"ajG" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"akc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"akM" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"alb" = ( -/obj/machinery/vending/medical{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777) - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"ald" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"alo" = ( -/obj/machinery/power/smes, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating/eris/under, -/area/space) -"alx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"ame" = ( -/obj/random/tech_supply/component/nofail, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ami" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/obj/structure/dispenser{ - phorontanks = 0 - }, -/turf/simulated/floor/plating/external, -/area/space) -"amn" = ( -/obj/structure/cryofeed{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"amo" = ( -/obj/machinery/transportpod, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"amu" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"ank" = ( -/obj/machinery/replicator, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"anR" = ( -/obj/structure/table/reinforced, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"aoq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/structure/closet/alien, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"aot" = ( -/turf/unsimulated/elevator_shaft, -/area/space) -"aov" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod) -"aoL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/item/device/geiger, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/welding, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/plating, -/area/space) -"aoX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/space) -"aoZ" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"apP" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"apT" = ( -/obj/structure/lattice, -/obj/machinery/light{ - layer = 3 - }, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"aqc" = ( -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/space) -"aqk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aqC" = ( -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/space) -"aqH" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -34 - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aqO" = ( -/obj/vehicle/train/trolley{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ark" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"arl" = ( -/obj/machinery/door/blast/puzzle{ - checkrange_mult = 3; - dir = 4; - layer = 3.3; - name = "Blast Door"; - open_layer = 3.3 - }, -/turf/simulated/floor/dungeon, -/area/space) -"arT" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"asu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"asx" = ( -/mob/living/simple_mob/mechanical/hivebot/tank, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"asT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"atg" = ( -/obj/machinery/computer/prisoner{ - dir = 1; - icon = 'icons/obj/abductor.dmi'; - icon_screen = null; - icon_state = "console-c"; - req_access = list(777) - }, -/turf/simulated/floor/wood/sif, -/area/space) -"atZ" = ( -/obj/structure/largecrate/vehicle/bike, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"auM" = ( -/obj/structure/table/wooden_reinforced, -/obj/structure/flora/pottedplant/smallcactus{ - pixel_y = 13 - }, -/turf/simulated/floor/wood, -/area/space) -"avt" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"avI" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/space) -"awb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"awk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/structure/shuttle/engine/router, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"awm" = ( -/turf/simulated/wall/rdshull, -/area/space) -"awv" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - dir = 4; - name = "Auxiliary Storage" - }, -/turf/simulated/floor, -/area/space) -"axl" = ( -/obj/effect/decal/cleanable/generic, -/obj/item/weapon/gun/energy/toxgun, -/turf/simulated/floor/plating, -/area/space) -"axm" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"axP" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "ursula"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "ursula_outer"; - locked = 1; - name = "External Access" - }, -/turf/simulated/shuttle/plating, -/area/space) -"ayr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"ayW" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"azj" = ( -/obj/structure/ledge/ledge_nub{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aAm" = ( -/obj/structure/prop/alien/computer{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aAn" = ( -/obj/machinery/computer/crew{ - dir = 1; - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"aAz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aBb" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"aBB" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"aBG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"aBH" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/table/alien/blue, -/obj/item/device/healthanalyzer/phasic, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/white, -/area/space) -"aBR" = ( -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"aCb" = ( -/obj/structure/window/basic/full, -/turf/simulated/floor/tiled, -/area/space) -"aCo" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"aCL" = ( -/obj/item/weapon/shovel, -/obj/item/weapon/pickaxe, -/obj/item/weapon/tool/crowbar, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/weapon/storage/belt/utility/full, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/holster/hip, -/obj/item/device/gps, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"aDc" = ( -/obj/item/weapon/antag_spawner/technomancer_apprentice, -/turf/template_noop, -/area/space) -"aDt" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"aDX" = ( -/obj/item/stack/animalhide/xeno, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"aEb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/external, -/area/space) -"aEm" = ( -/obj/structure/table/alien, -/obj/item/device/taperecorder, -/obj/item/device/taperecorder, -/obj/item/device/taperecorder, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"aEH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aFc" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"aFl" = ( -/obj/effect/alien/weeds, -/obj/random/junk, -/turf/simulated/floor, -/area/space) -"aFz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/shuttle/wall, -/area/space) -"aFE" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/carpet/blucarpet, -/area/space) -"aFN" = ( -/obj/structure/bed/chair/bay/comfy/green{ - dir = 1 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 24; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"aFQ" = ( -/turf/simulated/wall/phoron, -/area/space) -"aGS" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"aHs" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/shuttle/plating, -/area/space) -"aHD" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aHF" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7 - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"aHZ" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/space) -"aIm" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/power/apc/alarms_hidden{ - dir = 8; - pixel_x = -20 - }, -/turf/simulated/floor/plating, -/area/space) -"aIp" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/space) -"aIu" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"aIB" = ( -/obj/effect/decal/cleanable/blood/gibs{ - color = "red"; - icon_state = "gibdown1_flesh" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aIW" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor, -/area/space) -"aJk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"aJn" = ( -/obj/structure/largecrate/animal/cow, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"aJp" = ( -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"aJs" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - pixel_y = -26 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aKE" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"aKH" = ( -/obj/effect/map_effect/portal/master/side_a{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aLd" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aLg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 5; - icon_state = "4-5" - }, -/turf/simulated/floor/plating, -/area/space) -"aMg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dispenser{ - phorontanks = 0 - }, -/turf/simulated/floor/plating, -/area/space) -"aMk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/floor/black, -/area/space) -"aMl" = ( -/turf/simulated/wall/skipjack, -/area/space) -"aMy" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - pixel_y = -26 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aMF" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "atriumsouth" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"aMP" = ( -/obj/effect/gateway/active, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aNv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "exaroom5"; - pixel_y = 31 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"aOv" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aOw" = ( -/obj/machinery/vending/event/overwear, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aOC" = ( -/obj/machinery/wish_granter, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aOT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aOV" = ( -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/techfloor, -/obj/structure/closet/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aPb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"aPm" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "atriumeast" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"aPs" = ( -/obj/machinery/recharge_station, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"aPI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"aPM" = ( -/obj/structure/bed/padded, -/obj/machinery/flasher{ - id = "SP-Cell flash"; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"aQm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"aQo" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/personal, -/obj/item/modular_computer/laptop/preset/custom_loadout/elite, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/weapon/gun/projectile/pistol, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/storage/box/survival/comp, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"aQp" = ( -/obj/structure/disposalpipe/broken{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"aRk" = ( -/obj/screen/alert/highpressure, -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/shuttle/floor/purple, -/area/space) -"aSQ" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -32 - }, -/turf/simulated/shuttle/plating, -/area/space) -"aTD" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/holoplant, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"aTP" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"aUe" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"aUz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room5"; - name = "Room 5 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"aUG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/space) -"aUX" = ( -/obj/machinery/atmospherics/binary/algae_farm/filled{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"aVl" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/iandouble, -/turf/simulated/floor/wood, -/area/space) -"aVP" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"aVR" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"aVX" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/space) -"aVY" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "food storage" - }, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/burrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, -/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/enchiladas, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/cubannachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/nachos, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/pandenata, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/obj/item/weapon/reagent_containers/food/snacks/tocino, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"aWr" = ( -/obj/structure/fuel_port{ - pixel_y = -28 - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"aWP" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"aXc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"aXg" = ( -/obj/machinery/power/emitter{ - anchored = 1; - id = "EngineEmitter"; - state = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"aXv" = ( -/turf/simulated/wall/sandstonediamond, -/area/space) -"aXH" = ( -/obj/machinery/gateway/brass{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"aXM" = ( -/obj/machinery/suit_cycler/engineering{ - req_access = null - }, -/turf/simulated/floor/plating, -/area/space) -"aXO" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"aYg" = ( -/turf/simulated/floor/beach/water, -/area/space) -"aYh" = ( -/obj/structure/prop/statue/lion, -/turf/template_noop, -/area/space) -"aYj" = ( -/obj/structure/sign/botany, -/turf/simulated/wall, -/area/space) -"aYA" = ( -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/suit/space/void/atmos, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/void/atmos, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/window/westright{ - name = "Atmospherics Suits"; - req_access = list(24) - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/sign/warning/nosmoking_2{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"aZe" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"aZs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"aZu" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"aZO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bae" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/random/trash, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"bam" = ( -/obj/structure/flora/tree/dead, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bav" = ( -/obj/structure/fence/corner, -/turf/template_noop, -/area/space) -"baV" = ( -/obj/machinery/fitness/heavy/lifter, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"bbk" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bbu" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 1 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 24; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"bbw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"bbI" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"bbM" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "5" - }, -/turf/template_noop, -/area/space) -"bco" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/space) -"bcv" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/turf/simulated/floor, -/area/space) -"bdb" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/reagent_containers/glass/beaker/bluespace, -/obj/item/weapon/reagent_containers/glass/beaker/bluespace{ - pixel_x = -7 - }, -/obj/item/weapon/storage/belt/medical/alien, -/obj/item/weapon/storage/belt/medical/alien{ - pixel_y = 6 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"bdm" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/prop/alien/computer/camera/flipped{ - dir = 1 - }, -/turf/simulated/floor/greengrid, -/area/space) -"bdH" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1; - req_one_access = list(67) - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"beM" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_4" - }, -/turf/simulated/floor/tiled, -/area/space) -"bfk" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/simulated/floor/plating, -/area/space) -"bfD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bfM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bfX" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bgo" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - icon_state = "door_locked"; - id_tag = "baby_mammoth_hatch_side"; - locked = 1; - name = "shuttle side hatch" - }, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/remote/airlock{ - id = "baby_mammoth_hatch_side"; - name = "Side Hatch Control"; - pixel_y = -26; - specialfunctions = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "baby_mammoth_blast"; - layer = 2.5; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"bgv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "ursula_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"bgy" = ( -/obj/machinery/door/firedoor/glass/hidden, -/turf/simulated/floor/tiled/dark, -/area/space) -"bgQ" = ( -/obj/structure/salvageable/autolathe, -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"bhd" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"bhq" = ( -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"bhs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"biJ" = ( -/obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/grass, -/area/space) -"biQ" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "Advanced storage" - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/device/t_scanner, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/geiger, -/obj/item/device/geiger, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/scanning_module, -/obj/item/weapon/stock_parts/scanning_module, -/obj/item/weapon/stock_parts/capacitor, -/obj/item/weapon/stock_parts/capacitor, -/obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/clotting, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/shuttle/floor/purple, -/area/space) -"biX" = ( -/obj/structure/bed/alien, -/obj/structure/curtain/open/privacy, -/obj/item/weapon/bedsheet/medical, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"bjr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor, -/area/space) -"bjA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/angled_bay/external/glass{ - name = "Interior Airlock Access"; - id_tag = "Avalon_engine_airlock_interior" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bjM" = ( -/obj/machinery/gateway/brass, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bkh" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "baby_mammoth_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"bkx" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"bkR" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"bla" = ( -/obj/structure/table/sifwoodentable, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"ble" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"blp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"blq" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"blK" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/wood/sif, -/area/space) -"blR" = ( -/obj/effect/map_effect/portal/master/side_a{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bmj" = ( -/turf/simulated/floor/cult, -/area/space) -"bmH" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/ce, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bmP" = ( -/obj/structure/table/darkglass, -/obj/item/device/lightreplacer, -/turf/simulated/floor/carpet, -/area/space) -"bmW" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bmX" = ( -/obj/machinery/light/small/poi{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bmY" = ( -/obj/effect/map_effect/portal/master/side_a{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bnr" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"boe" = ( -/obj/effect/simple_portal/coords, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"boC" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor, -/area/space) -"boI" = ( -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hangar Bay" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"boQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bpj" = ( -/obj/effect/temporary_effect/pulse/snake/testing/hunter, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bpq" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bpE" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/blue{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"bpJ" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood/sif, -/area/space) -"bpZ" = ( -/obj/machinery/button/flasher{ - id = "procroom1"; - pixel_y = 31 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bqt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/button/flasher{ - id = "teleroom1"; - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"bqz" = ( -/obj/effect/meteor/irradiated, -/turf/simulated/floor/lava, -/area/space) -"bqS" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"brs" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"bsg" = ( -/obj/machinery/flasher{ - id = "teleroom2"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bsx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bsy" = ( -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"bsS" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/space) -"bue" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/machinery/holoplant, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"bum" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bur" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"but" = ( -/obj/machinery/power/apc/hyper{ - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"buI" = ( -/obj/structure/table/alien, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/tiled/freezer, -/area/space) -"buS" = ( -/obj/structure/closet/alien, -/obj/machinery/button/remote/airlock{ - id = "abdorm2"; - name = "Door Lock Control"; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"bvh" = ( -/obj/machinery/computer/security/abductor{ - dir = 1; - icon_screen = null; - icon_state = "camera_flipped" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"bvi" = ( -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bwt" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"bwB" = ( -/turf/simulated/wall/r_lead, -/area/space) -"bxh" = ( -/obj/random/trash, -/turf/template_noop, -/area/space) -"bxo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bxJ" = ( -/obj/item/weapon/shovel, -/obj/item/weapon/tool/wrench, -/obj/item/weapon/pickaxe, -/obj/item/weapon/tool/crowbar, -/obj/item/stack/flag/yellow{ - pixel_x = 4 - }, -/obj/item/stack/flag/red, -/obj/item/stack/flag/green{ - pixel_x = -4 - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/item/device/gps/mining{ - pixel_x = -5 - }, -/obj/item/device/gps/mining{ - pixel_x = 5 - }, -/obj/item/weapon/storage/belt/utility/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bxN" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/structure/sign/poster/nanotrasen{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"bxO" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"byu" = ( -/obj/machinery/sleeper{ - dir = 4; - emagged = 1; - initial_bin_rating = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"byK" = ( -/mob/living/simple_mob/vore/demonAI{ - faction = "cult" - }, -/turf/simulated/floor/gorefloor2, -/area/space) -"byX" = ( -/turf/simulated/floor/beach/sand/desert, -/area/space) -"bzk" = ( -/obj/machinery/conveyor{ - id = "garbageone" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bzl" = ( -/obj/machinery/computer/ship/disperser, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bzD" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"bAt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"bBn" = ( -/obj/structure/window/bay/phoronreinforced, -/turf/simulated/floor, -/area/space) -"bBr" = ( -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"bCg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bCl" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"bCI" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/purple, -/area/space) -"bCU" = ( -/obj/machinery/button/windowtint{ - id = "atriumnorth"; - pixel_y = -23 - }, -/obj/machinery/button/flasher{ - id = "atriumflash"; - pixel_y = -31 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"bDS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"bEA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"bEW" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "stargazer_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"bFg" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/maglight, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/head/welding/knight, -/obj/item/clothing/glasses/welding, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/item/weapon/inducer, -/obj/item/weapon/storage/belt/utility/full, -/obj/item/weapon/storage/belt/utility/full, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/weapon/extinguisher/atmo, -/obj/item/weapon/extinguisher/atmo, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/weapon/storage/backpack/dufflebag/eng, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"bGj" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"bGm" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bGE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"bGF" = ( -/obj/structure/sign/science{ - pixel_y = 32 - }, -/turf/template_noop, -/area/space) -"bGS" = ( -/obj/structure/closet/walllocker_double/medical/west, -/obj/item/weapon/storage/firstaid, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/roller, -/turf/simulated/shuttle/floor/black, -/area/space) -"bHd" = ( -/obj/structure/table/rack/shelf/steel, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bHv" = ( -/obj/effect/alien/weeds, -/obj/machinery/telecomms/broadcaster, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"bHA" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/floor/plating, -/area/space) -"bHD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"bIi" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bIr" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"bIB" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"bJh" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/blue{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"bJp" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools{ - pixel_y = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"bJE" = ( -/obj/machinery/atmospherics/binary/circulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"bJT" = ( -/obj/structure/hull_corner/long_vert{ - dir = 6 - }, -/turf/template_noop, -/area/space) -"bJZ" = ( -/obj/structure/closet/alien, -/obj/random/energy, -/obj/random/energy, -/obj/random/energy, -/obj/random/grenade/less_lethal, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"bKv" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/light, -/obj/structure/fuel_port{ - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"bKN" = ( -/obj/structure/prop/alien/dispenser{ - pixel_x = -27 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"bKO" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"bLt" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/floor/greengrid, -/area/space) -"bLS" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"bLY" = ( -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 8; - id = "SD-1"; - name = "Shelter Lock"; - pixel_x = 26; - req_access = null; - specialfunctions = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"bMg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/reinforced, -/area/space) -"bMm" = ( -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bMJ" = ( -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"bML" = ( -/obj/machinery/power/smes/buildable/point_of_interest, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"bMS" = ( -/obj/effect/temporary_effect/fire_blast, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bNl" = ( -/obj/structure/loot_pile/maint, -/turf/simulated/floor, -/area/space) -"bNL" = ( -/obj/structure/flora/lily1, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bOc" = ( -/obj/structure/closet/alien, -/obj/item/device/megaphone/super, -/obj/item/device/megaphone/super, -/obj/item/device/megaphone/super, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/turf/simulated/floor/wood/sif, -/area/space) -"bOq" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/black, -/area/space) -"bOI" = ( -/obj/structure/cliff/automatic/corner, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bOT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"bPz" = ( -/obj/structure/particle_accelerator/particle_emitter/left{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bPL" = ( -/obj/structure/disposalpipe/up{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"bPZ" = ( -/obj/effect/gibspawner/human, -/turf/simulated/shuttle/floor/alien, -/area/space) -"bRs" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"bRT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"bRU" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"bSd" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/surgery, -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bSg" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"bSi" = ( -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/suit/space/void/atmos, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/void/atmos, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/westleft{ - name = "Atmospherics Suits"; - req_access = list(24) - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bSn" = ( -/obj/machinery/door/airlock/alien{ - id_tag = "abdorm6"; - name = "Dorm 4"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"bSy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"bSB" = ( -/obj/structure/outcrop, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bSL" = ( -/obj/structure/table/standard, -/obj/item/toy/tennis, -/turf/simulated/floor/tiled/dark, -/area/space) -"bSS" = ( -/obj/structure/table/survival_pod, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bTA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"bTC" = ( -/obj/machinery/porta_turret/alien{ - faction = "hivebot" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"bTY" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_7" - }, -/turf/simulated/floor/tiled, -/area/space) -"bUe" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = -2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bUh" = ( -/obj/structure/table/alien, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/lightreplacer, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bUs" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_5" - }, -/turf/simulated/floor/tiled, -/area/space) -"bUv" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 4; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bUE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating, -/area/space) -"bUJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"bUL" = ( -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"bUW" = ( -/obj/machinery/door/airlock/maintenance/cargo, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bVY" = ( -/obj/structure/salvageable/server_os, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bWD" = ( -/obj/structure/sign/biohazard, -/turf/simulated/wall/skipjack, -/area/space) -"bWF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/loot_pile/mecha/gygax/dark/adv, -/turf/template_noop, -/area/space) -"bWP" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"bWR" = ( -/obj/structure/hull_corner{ - dir = 1 - }, -/turf/template_noop, -/area/space) -"bWU" = ( -/obj/machinery/power/apc{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor, -/area/space) -"bXs" = ( -/obj/machinery/computer/ship/helm, -/turf/simulated/shuttle/floor/black, -/area/space) -"bXu" = ( -/obj/machinery/chem_master{ - pixel_x = -7 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"bXx" = ( -/obj/structure/urinal{ - pixel_y = 24 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"bXE" = ( -/obj/structure/bed/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bXF" = ( -/obj/item/trash/material/metal, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bXI" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/loot_pile/mecha/marauder/mauler, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"bYs" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "28" - }, -/obj/machinery/artillerycontrol, -/turf/template_noop, -/area/space) -"bYE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor, -/area/space) -"bYS" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/shuttle/plating, -/area/space) -"bYT" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"bZb" = ( -/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, -/obj/structure/curtain/black, -/turf/simulated/floor/plating, -/area/space) -"bZw" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"bZx" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor, -/area/space) -"bZA" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"bZT" = ( -/obj/machinery/vending/hydronutrients{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"caf" = ( -/obj/structure/fence/door/opened, -/turf/template_noop, -/area/space) -"caV" = ( -/obj/machinery/smartfridge/produce, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"cbn" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"cbr" = ( -/obj/machinery/door/airlock/glass_centcom, -/turf/simulated/shuttle/floor/black, -/area/space) -"cby" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - dir = 4; - name = "Auxiliary Storage" - }, -/turf/simulated/floor, -/area/space) -"cbW" = ( -/obj/machinery/vending/wallmed1/public{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ccf" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ccE" = ( -/obj/structure/disposalpipe/junction, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"cdg" = ( -/obj/structure/prop/statue/phoron, -/turf/template_noop, -/area/space) -"cdi" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"cdO" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating/external, -/area/space) -"cdR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"cdU" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/ammo_magazine/m545/ap, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/obj/machinery/light, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ceb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"cet" = ( -/obj/item/weapon/bone/arm, -/turf/simulated/floor/lava, -/area/space) -"cew" = ( -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_x = -24; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ceK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/chair/bay/shuttle, -/turf/simulated/shuttle/floor/black, -/area/space) -"ceX" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 8; - pixel_x = -6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"cgj" = ( -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"cgJ" = ( -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"chI" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"cim" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ciR" = ( -/obj/item/stack/cable_coil, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"cjn" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"cjJ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"cjP" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"ckB" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ckX" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"clm" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"clE" = ( -/obj/random/cargopod, -/turf/template_noop, -/area/space) -"clJ" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cmP" = ( -/obj/machinery/door/airlock/alien{ - name = "Processing room 1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"cmZ" = ( -/turf/unsimulated/wall/planetary/sif{ - icon_state = "rock-dark" - }, -/area/space) -"cnp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"cnH" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"cnI" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/space) -"cnJ" = ( -/obj/machinery/power/supermatter/shard{ - color = "red"; - simulated = 0 - }, -/turf/simulated/floor/gorefloor, -/area/space) -"cnW" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"cot" = ( -/turf/simulated/shuttle/floor/white, -/area/space) -"cpi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cpO" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/obj/structure/closet/walllocker_double/hydrant/north, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/plating, -/area/space) -"cpQ" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"cqb" = ( -/obj/structure/sign/science{ - pixel_y = -32 - }, -/turf/template_noop, -/area/space) -"cqp" = ( -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/space) -"cqy" = ( -/obj/machinery/button/remote/airlock{ - id = "abdorm3"; - name = "Door Lock Control"; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"cqI" = ( -/obj/structure/prop/alien/power, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"cre" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"cry" = ( -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/roller/adv, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/wheelchair{ - color = "grey" - }, -/obj/item/wheelchair{ - color = "grey" - }, -/obj/item/wheelchair{ - color = "grey" - }, -/obj/item/wheelchair{ - color = "grey" - }, -/obj/item/bodybag/large, -/obj/item/bodybag/large, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/machinery/light/small/emergency{ - dir = 4 - }, -/obj/item/weapon/melee/baton/shocker, -/obj/item/weapon/melee/baton/shocker, -/obj/item/weapon/melee/baton/shocker{ - agonyforce = 75 - }, -/obj/item/weapon/cell/void, -/obj/item/weapon/cell/void, -/obj/item/weapon/cell/void, -/obj/item/weapon/gun/energy/sickshot, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ro-Bust-Us" - }, -/obj/item/weapon/storage/box/handcuffs, -/obj/item/weapon/storage/box/handcuffs, -/obj/item/weapon/storage/box/handcuffs, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"crT" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"crX" = ( -/obj/machinery/door/airlock/maintenance/common, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"csg" = ( -/obj/machinery/disposal, -/turf/simulated/floor/tiled, -/area/space) -"csh" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_7" - }, -/turf/simulated/floor/tiled, -/area/space) -"cst" = ( -/obj/effect/alien/weeds, -/obj/structure/simple_door/resin, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"ctg" = ( -/obj/item/organ/internal/liver, -/obj/random/trash, -/turf/simulated/floor, -/area/space) -"ctq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"ctI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"ctJ" = ( -/turf/simulated/floor/wood/sif, -/area/space) -"cuj" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/turf/simulated/floor/wood/sif, -/area/space) -"cuk" = ( -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"cul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"cuq" = ( -/mob/living/simple_mob/animal/space/alien, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"cur" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"cuG" = ( -/obj/structure/cable{ - d1 = 5; - d2 = 8; - icon_state = "5-8" - }, -/turf/simulated/floor/plating, -/area/space) -"cvk" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/plating/external, -/area/space) -"cvJ" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cvP" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"cvU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, -/area/space) -"cwk" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_3" - }, -/turf/simulated/floor/tiled, -/area/space) -"cwQ" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"cxb" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"cxs" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"czu" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"cAh" = ( -/obj/structure/cliff/automatic{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"cAO" = ( -/obj/machinery/exonet_node/map, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"cBF" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cBO" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"cBP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cBT" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/closet/jcloset, -/obj/item/weapon/mop, -/obj/structure/mopbucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"cDi" = ( -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"cDV" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cEh" = ( -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"cFp" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/reddouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"cFu" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"cFJ" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"cGd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"cGm" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/engivend{ - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/space) -"cGA" = ( -/obj/machinery/computer/timeclock/premade/north, -/turf/simulated/floor/tiled, -/area/space) -"cHc" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"cHe" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/tool{ - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/space) -"cHi" = ( -/obj/structure/sign/warning/engineering_access, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"cHS" = ( -/obj/machinery/door/airlock/angled_tgmc/secure{ - dir = 4; - name = "Kodiak Airlock" - }, -/obj/structure/fans/hardlight, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/eris/under, -/area/space) -"cIh" = ( -/obj/structure/sign/atmos, -/turf/simulated/wall, -/area/space) -"cIj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/double/glass/medical{ - name = "Triage Center" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cIw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi, -/obj/structure/prop/alien/computer/camera{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cII" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 9; - icon_state = "2-9" - }, -/turf/simulated/floor/plating, -/area/space) -"cIU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cJl" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/template_noop, -/area/space) -"cJU" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/mime, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"cJW" = ( -/turf/simulated/mineral/alt{ - light_color = "white" - }, -/area/space) -"cKN" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"cKS" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/kitchenspike, -/obj/effect/rune, -/turf/simulated/floor, -/area/space) -"cLg" = ( -/obj/structure/closet/crate/large, -/obj/fiftyspawner/steel, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/fiftyspawner/steel, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"cLN" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/purple, -/area/space) -"cLR" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"cLY" = ( -/obj/structure/table/alien, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"cME" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"cNb" = ( -/obj/effect/floor_decal/industrial/danger/full, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"cNe" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "overclocked" - }, -/turf/simulated/floor/tiled, -/area/space) -"cNW" = ( -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Portside Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"cOn" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"cPm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cPu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"cPC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"cPQ" = ( -/obj/machinery/vending/coffee{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cQa" = ( -/obj/structure/disposalpipe/sortjunction/wildcard{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"cQU" = ( -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "ID-Mart" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cRm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8"; - dir = 1 - }, -/obj/structure/frame, -/turf/simulated/floor/bluegrid, -/area/space) -"cRJ" = ( -/obj/random, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"cSp" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"cSr" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/gorefloor2, -/area/space) -"cTj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cTs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cTy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room4"; - name = "Room 4 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"cTz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/turf/simulated/floor, -/area/space) -"cTZ" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"cUb" = ( -/obj/machinery/power/supermatter/shard, -/turf/simulated/floor/greengrid/nitrogen, -/area/space) -"cUd" = ( -/obj/machinery/gear_dispenser/suit_old, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"cUm" = ( -/obj/effect/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor, -/area/space) -"cUU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"cVb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"cVE" = ( -/obj/effect/floor_decal/techfloor, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/structure/closet/alien, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"cWi" = ( -/obj/structure/curtain/open/privacy, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"cWp" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/shuttle_landmark{ - base_area = /area/expoutpost/hangartwo; - base_turf = /turf/simulated/floor/reinforced; - landmark_tag = "stargazer_dock"; - name = "Stargazer Dock" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"cWA" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_2" - }, -/turf/simulated/floor/tiled, -/area/space) -"cWQ" = ( -/obj/structure/table/gamblingtable, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"cXI" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"cXN" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/wood, -/area/space) -"cXZ" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/purple, -/obj/item/device/gps/computer{ - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"cYI" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating/external, -/area/space) -"cYV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"cYY" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cZb" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/pirate, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/wood, -/area/space) -"cZd" = ( -/obj/structure/bed/alien, -/obj/effect/decal/remains/xeno, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"cZr" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"cZz" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = 2; - pixel_y = 17 - }, -/obj/item/weapon/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"cZV" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "SP-kitchen"; - layer = 3.3; - name = "Kitchen Shutters" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"daa" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/uranium, -/obj/item/stack/material/phoron{ - amount = 5; - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/stack/material/gold{ - amount = 5 - }, -/obj/item/stack/material/diamond, -/obj/item/stack/material/silver{ - amount = 5; - pixel_x = 2; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"dag" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "garbagethree" - }, -/turf/simulated/floor, -/area/space) -"dan" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/space) -"daq" = ( -/obj/structure/table/alien/blue, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/weapon/surgical/retractor/alien, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"daF" = ( -/obj/machinery/sleeper{ - dir = 4; - emagged = 1; - initial_bin_rating = 4 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"dbd" = ( -/obj/fiftyspawner/steel, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dbD" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/space) -"dcm" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/mecha_equipment/cloak, -/obj/item/mecha_parts/mecha_equipment/tool/jetpack, -/obj/item/mecha_parts/mecha_equipment/tool/passenger, -/turf/simulated/floor/plating/external, -/area/space) -"ddf" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"ddx" = ( -/obj/structure/disposalpipe/broken{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"ddS" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Bathroom" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"dee" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/wall/rshull, -/area/space) -"del" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/space) -"deA" = ( -/obj/item/debris_pack, -/turf/template_noop, -/area/space) -"dfu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/space) -"dfH" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/steel_reinforced, -/obj/fiftyspawner/glass{ - pixel_y = -5 - }, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20; - pixel_y = 5 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/plating, -/area/space) -"diH" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"diN" = ( -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"djA" = ( -/obj/structure/table/standard, -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"djF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"djK" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"djR" = ( -/obj/machinery/door/airlock/alien/blue/public, -/obj/machinery/door/blast/puzzle{ - checkrange_mult = 3; - dir = 4; - layer = 3.3; - name = "Blast Door"; - open_layer = 3.3 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dkf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"dkj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"dks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Starboard Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"dkE" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumnorth" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dlg" = ( -/obj/effect/graffitispawner, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dlQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dmh" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"dmp" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dmw" = ( -/turf/template_noop, -/area/awaymission/snowfield/outside) -"dmQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - name = "Atmospherics" - }, -/turf/simulated/floor, -/area/space) -"dmR" = ( -/obj/structure/sign/directions, -/turf/simulated/wall, -/area/space) -"dmW" = ( -/obj/structure/filingcabinet/medical, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"dmY" = ( -/obj/random/trash, -/turf/simulated/shuttle/floor/alien, -/area/space) -"dnc" = ( -/obj/effect/spider/spiderling/stunted, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dnj" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dnn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/machinery/shield_diffuser, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"dnC" = ( -/obj/effect/floor_decal/industrial/warning/cee, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/space) -"dnJ" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_y = -9 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"doo" = ( -/turf/simulated/floor/greengrid/nitrogen, -/area/space) -"dox" = ( -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"doA" = ( -/obj/machinery/door/airlock/alien/blue/public, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"doB" = ( -/obj/random/trash, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"doE" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"doG" = ( -/obj/machinery/conveyor, -/obj/structure/sign/poster/nanotrasen{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/shuttle/plating, -/area/space) -"doN" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"doZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/power/emitter, -/turf/simulated/floor/plating, -/area/space) -"dpo" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"dpX" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/FixOVein/alien, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"dqi" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/space) -"dqt" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"dqu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 10; - icon_state = "1-10" - }, -/turf/simulated/floor/plating, -/area/space) -"dqQ" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"dqR" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "echidna_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/closet/walllocker_double/hydrant/south, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "echidna_sensor"; - pixel_x = -25; - pixel_y = -1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"drO" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/space) -"drY" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"dsy" = ( -/obj/vehicle/boat/dragon/sifwood{ - dir = 8 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"dsS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, -/area/space) -"dsX" = ( -/obj/structure/transit_tube_pod{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dsZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/space) -"dth" = ( -/obj/effect/temporary_effect/pulse/agonizing_sphere, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dtk" = ( -/obj/machinery/atmospherics/pipe/tank/phoron, -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"dto" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating, -/area/space) -"dtx" = ( -/obj/structure/flora/pumpkin/carved/scream, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dtM" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"dut" = ( -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"duG" = ( -/obj/mecha/working/hoverpod/shuttlecraft, -/turf/template_noop, -/area/space) -"duQ" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dvB" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/space) -"dvD" = ( -/obj/machinery/light/poi, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dvM" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/autopsy_scanner, -/obj/item/weapon/surgical/FixOVein/alien{ - pixel_y = -2 - }, -/obj/item/weapon/surgical/surgicaldrill/alien{ - pixel_x = 3; - pixel_y = 7 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"dvT" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/wood, -/area/space) -"dvV" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "12" - }, -/turf/template_noop, -/area/space) -"dwg" = ( -/obj/structure/tubes, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"dwF" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"dwW" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/hemostat/alien, -/obj/item/weapon/surgical/cautery/alien{ - pixel_y = -6 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"dxB" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"dxP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dxY" = ( -/obj/machinery/computer{ - dir = 1 - }, -/obj/structure/railing/grey, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"dyd" = ( -/obj/machinery/light{ - layer = 3 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor, -/area/space) -"dyx" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"dyT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"dzi" = ( -/turf/simulated/floor/lava, -/area/space) -"dzH" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dzI" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"dzU" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 5; - icon_state = "32-5" - }, -/turf/simulated/floor/plating, -/area/space) -"dAc" = ( -/obj/machinery/mineral/processing_unit_console, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"dBb" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"dBn" = ( -/obj/machinery/door/airlock/alien{ - id_tag = "abdorm1"; - name = "Dorm 1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dBz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"dBX" = ( -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/space) -"dBZ" = ( -/obj/machinery/door/airlock/maintenance/common, -/obj/item/tape/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"dCf" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/device/perfect_tele, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"dCn" = ( -/obj/machinery/vending/loadout/uniform, -/turf/template_noop, -/area/space) -"dCA" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dDJ" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/purpledouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"dDU" = ( -/obj/machinery/computer/ship/engines, -/turf/simulated/shuttle/floor/black, -/area/space) -"dEg" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/lava, -/area/space) -"dEl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Starboard Upper Thruster One" - }, -/turf/simulated/floor, -/area/space) -"dEB" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"dEZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/reinforced, -/area/space) -"dGF" = ( -/turf/simulated/shuttle/wall/no_join{ - base_state = "orange"; - icon = 'icons/turf/shuttle_orange.dmi'; - icon_state = "orange" - }, -/area/space) -"dGK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"dHc" = ( -/obj/mecha/combat/gygax/serenity, -/turf/template_noop, -/area/space) -"dHx" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"dHF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dIp" = ( -/obj/machinery/vending/event/loadout_misc, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dIQ" = ( -/obj/effect/fancy_shuttle/wagon, -/turf/template_noop, -/area/space) -"dIT" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"dIY" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"dJr" = ( -/obj/machinery/light/spot, -/obj/structure/hull_corner, -/turf/template_noop, -/area/space) -"dJN" = ( -/turf/simulated/floor/gorefloor2, -/area/space) -"dJU" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "engine_access_hatch"; - locked = 1; - req_access = list(11) - }, -/turf/simulated/floor, -/area/space) -"dKh" = ( -/turf/simulated/wall/resin, -/area/space) -"dKz" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "35" - }, -/turf/template_noop, -/area/space) -"dKP" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"dLe" = ( -/obj/machinery/vending/cigarette{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dLp" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 4; - pixel_x = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"dLO" = ( -/obj/machinery/appliance/cooker/grill, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"dLQ" = ( -/obj/machinery/door/window/northright{ - name = "Server Room"; - req_access = null - }, -/obj/machinery/door/window/southleft{ - name = "Server Room"; - req_access = null - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"dLY" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"dMe" = ( -/obj/machinery/door/blast/puzzle, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dMg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/ntnet_relay, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/simulated/floor/bluegrid, -/area/space) -"dMi" = ( -/obj/structure/loot_pile/surface/alien, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dMl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/space) -"dMq" = ( -/obj/machinery/teleport/hub, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dMs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/space) -"dMv" = ( -/obj/structure/table/hardwoodtable, -/obj/structure/stripper_pole{ - pixel_y = 9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/item/clothing/under/swimsuit/stripper/mankini{ - pixel_x = -6; - pixel_y = 5 - }, -/turf/simulated/floor/wood, -/area/space) -"dMD" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"dMQ" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"dMS" = ( -/obj/machinery/door/airlock/alien{ - name = "Atrium-Brig"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dNH" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/space) -"dOK" = ( -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/space) -"dPh" = ( -/obj/structure/closet/secure_closet, -/turf/simulated/floor/tiled, -/area/space) -"dPi" = ( -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"dPl" = ( -/obj/structure/shuttle/window, -/turf/template_noop, -/area/space) -"dPA" = ( -/obj/structure/prop/alien/computer/camera, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dPL" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 6"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"dPW" = ( -/obj/structure/largecrate/vehicle/quadtrailer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dQp" = ( -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"dQP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/space) -"dQQ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"dQS" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dQZ" = ( -/obj/structure/closet/secure_closet/engineering_welding{ - req_access = null - }, -/obj/item/weapon/storage/belt/utility, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dRe" = ( -/obj/structure/prop/alien/computer/hybrid, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"dRB" = ( -/obj/structure/table/darkglass, -/obj/item/toy/bouquet, -/obj/machinery/button/remote/airlock{ - id = "abdorm6"; - name = "Door Lock Control"; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"dRK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/map_effect/interval/sound_emitter/ballistic_gunfight, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dSQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/thermoregulator, -/turf/simulated/floor/plating, -/area/space) -"dSX" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "10" - }, -/turf/template_noop, -/area/space) -"dTe" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"dTV" = ( -/turf/simulated/shuttle/wall/hard_corner, -/area/space) -"dTY" = ( -/obj/structure/salvageable/computer, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dUx" = ( -/obj/structure/smoleruins, -/turf/template_noop, -/area/space) -"dUz" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"dUD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"dUN" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dUT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"dVg" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor, -/area/space) -"dVo" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/catwalk_plated/techfloor, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"dWb" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"dWi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"dWj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/vending/medical{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"dWq" = ( -/obj/effect/alien/weeds, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor, -/area/space) -"dWx" = ( -/obj/effect/map_effect/beam_point/instant/electric, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"dWz" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/structure/closet/walllocker_double/hydrant/east, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dWD" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet/blue, -/area/space) -"dXi" = ( -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/plating, -/area/space) -"dXo" = ( -/obj/machinery/r_n_d/server/core, -/obj/machinery/light/small, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"dXH" = ( -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/turf/simulated/floor, -/area/space) -"dYj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/space) -"dYw" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"dYM" = ( -/obj/structure/catwalk, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor, -/area/space) -"dZb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 9; - icon_state = "4-9" - }, -/turf/simulated/floor/plating, -/area/space) -"dZD" = ( -/obj/machinery/vending/tool{ - emagged = 1; - req_log_access = null - }, -/turf/simulated/floor/plating, -/area/space) -"dZU" = ( -/obj/item/stack/flag/blue, -/turf/template_noop, -/area/space) -"eac" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"eai" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"eax" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"ebI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/closet/walllocker_double/kitchen/north, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "echidna_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"ebS" = ( -/obj/machinery/power/smes/batteryrack, -/turf/simulated/floor/plating, -/area/space) -"ech" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Captain's Quarters"; - id_tag = "Avalon-captainsquarters" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eck" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eda" = ( -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"edb" = ( -/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ - desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; - name = "alien admiral's medal" - }, -/obj/item/weapon/telecube/precursor/mated/zone, -/obj/item/clothing/head/helmet/alien/tank, -/obj/structure/table/alien, -/obj/item/stack/material/glass/plastitanium{ - amount = 20 - }, -/turf/simulated/floor/greengrid, -/area/space) -"edu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "dressroom"; - pixel_y = 31 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"eed" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eeF" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eeP" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/paper_bin, -/turf/simulated/floor/carpet/blue, -/area/space) -"eeQ" = ( -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eeR" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/space) -"eeU" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"egc" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/obj/structure/closet/walllocker/emerglocker/south, -/turf/simulated/shuttle/floor/black, -/area/space) -"egj" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"egr" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"egL" = ( -/obj/structure/closet/secure_closet/engineering_electrical{ - req_access = null - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/belt/utility, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ehi" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "echidna_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"ehL" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"eig" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ein" = ( -/obj/machinery/door/airlock/maintenance/sec{ - name = "Security Door" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"eiD" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eiP" = ( -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/green/bordercorner, -/turf/simulated/floor/tiled, -/area/space) -"eiR" = ( -/obj/machinery/vending/snack{ - dir = 4; - pixel_x = -6 - }, -/turf/simulated/floor/wood, -/area/space) -"eiX" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"ejg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ejG" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/item/weapon/material/shard/phoron, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ekn" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "needle_outer"; - locked = 1; - name = "External Access" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "needle"; - name = "exterior access button"; - pixel_y = 26 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ekw" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"ekE" = ( -/obj/effect/temporary_effect/pulse/staticshock, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"elb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"elF" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/floor/gorefloor2, -/area/space) -"elN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"emt" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"end" = ( -/obj/structure/plasticflaps/mining, -/turf/simulated/floor/cult{ - icon_state = "cult-narsie" - }, -/area/space) -"enk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm/alarms_hidden{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"enp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"enu" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/machinery/vending/emergencyfood/filled, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"enz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/telecomms/allinone, -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/railing/grey, -/turf/simulated/floor/bluegrid, -/area/space) -"epd" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/template_noop, -/area/space) -"epl" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee, -/turf/simulated/floor/greengrid, -/area/space) -"epV" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/gootrap{ - basecolor = #610B0B; - desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; - name = "Spill of fear" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"epX" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"eqm" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eqG" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/medical, -/obj/structure/curtain/open/privacy, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"eqT" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"erc" = ( -/obj/machinery/media/jukebox, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"erz" = ( -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/black/bordercorner, -/turf/simulated/floor/tiled, -/area/space) -"erQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"esv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"esW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"etm" = ( -/obj/structure/disposalpipe/tagger{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"etr" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 12 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "Avalon-kitchen"; - layer = 3.3; - name = "Avalon Kitchen Shutters" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"eua" = ( -/obj/item/weapon/shovel, -/obj/item/weapon/tool/wrench, -/obj/item/weapon/pickaxe, -/obj/item/weapon/tool/crowbar, -/obj/item/stack/flag/yellow{ - pixel_x = 4 - }, -/obj/item/stack/flag/red, -/obj/item/stack/flag/green{ - pixel_x = -4 - }, -/obj/structure/table/rack/shelf/steel, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/item/device/gps/mining{ - pixel_x = -5 - }, -/obj/item/device/gps/mining{ - pixel_x = 5 - }, -/obj/item/weapon/storage/belt/utility/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"eub" = ( -/obj/structure/prop/rock/crystal, -/turf/template_noop, -/area/space) -"euK" = ( -/obj/effect/meteor/dust, -/turf/template_noop, -/area/space) -"evn" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"evB" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"evJ" = ( -/obj/structure/transit_tube{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ewi" = ( -/obj/structure/largecrate/animal/wolfgirl, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"ewr" = ( -/obj/structure/grille/cult, -/turf/simulated/floor/cult, -/area/space) -"ews" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/empty, -/obj/item/weapon/reagent_containers/blood/empty, -/obj/item/weapon/reagent_containers/blood/empty, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"ewt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Portside Upper Thruster One" - }, -/turf/simulated/floor, -/area/space) -"ewS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"exU" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eyi" = ( -/obj/structure/table/standard, -/obj/item/weapon/deck/holder, -/turf/simulated/floor/tiled/dark, -/area/space) -"eyP" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"eyY" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - name = "Atmospherics" - }, -/turf/simulated/floor, -/area/space) -"ezb" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - pixel_y = -26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"ezR" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor, -/area/space) -"eAa" = ( -/obj/structure/window/reinforced/survival_pod, -/turf/simulated/floor/tiled, -/area/space) -"eAc" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/obj/effect/alien/weeds, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/engineering, -/obj/random/plushie, -/obj/item/organ/internal/augment/armmounted, -/obj/item/organ/internal/intestine, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"eBp" = ( -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 - }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Station Gym" - }, -/turf/simulated/floor/tiled, -/area/space) -"eBC" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "29" - }, -/turf/template_noop, -/area/space) -"eBD" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "needle_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "needle"; - pixel_y = 26; - tag_airpump = "needle_pump"; - tag_chamber_sensor = "needle_sensor"; - tag_exterior_door = "needle_outer"; - tag_interior_door = "needle_inner" - }, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"eBO" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "atriumwest" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eBV" = ( -/obj/machinery/computer/transhuman/resleeving/abductor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"eCg" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eCi" = ( -/obj/structure/table/bench/glass, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/fuzzy, -/turf/simulated/floor/wood, -/area/space) -"eCj" = ( -/turf/simulated/floor/carpet/tealcarpet, -/area/space) -"eDL" = ( -/obj/machinery/door/airlock/alien{ - name = "Dorm'n'Engine"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eEh" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"eEj" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"eEz" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eEG" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"eEH" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"eEO" = ( -/obj/structure/cable{ - d2 = 10; - icon_state = "6-10"; - d1 = 6 - }, -/turf/simulated/floor/plating, -/area/space) -"eFc" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"eFg" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"eFo" = ( -/obj/machinery/door/airlock/alien{ - name = "Disposals"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eFs" = ( -/obj/item/prop/alien/junk, -/turf/simulated/shuttle/floor/alien, -/area/space) -"eFH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/double/glass/common{ - dir = 8; - name = "Cryogenics" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eFQ" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eFW" = ( -/obj/machinery/porta_turret/stationary/syndie, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eGe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"eGE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"eGJ" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"eHc" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/item/weapon/material/shard/phoron, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eIg" = ( -/obj/structure/ledge{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eIv" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 9; - pixel_y = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"eID" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eJe" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"eJw" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor, -/area/space) -"eJL" = ( -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -4 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"eJV" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"eKu" = ( -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/wall/hard_corner, -/area/space) -"eKV" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eLT" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"eLX" = ( -/obj/machinery/power/smes/buildable/hybrid, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"eMj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"eMw" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"eMD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/photocopier/faxmachine, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eMJ" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/plastitanium, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"eML" = ( -/obj/effect/decal/remains/deer, -/turf/simulated/floor/gorefloor2, -/area/space) -"eMP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Primary Storage" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eNo" = ( -/obj/structure/window/plastitanium/full, -/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/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"eNv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"eOs" = ( -/obj/structure/bed/double/padded, -/obj/structure/curtain/bed, -/obj/item/weapon/bedsheet/hosdouble, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/space) -"eOw" = ( -/obj/structure/undies_wardrobe, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"eOT" = ( -/obj/machinery/flasher{ - id = "slavecell2"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eOX" = ( -/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"ePd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"ePC" = ( -/mob/living/simple_mob/animal/space/alien/sentinel, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"ePP" = ( -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/template_noop, -/area/space) -"ePV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 9; - icon_state = "1-9" - }, -/turf/simulated/floor/plating, -/area/space) -"eQa" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 28 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"eQg" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/weapon/book/manual/chef_recipes, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"eQk" = ( -/obj/item/device/gps/internal/poi, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eQp" = ( -/obj/structure/cult/forge, -/turf/simulated/floor/cult, -/area/space) -"eQA" = ( -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/item/roller, -/obj/item/roller{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"eQE" = ( -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/space) -"eRQ" = ( -/obj/effect/map_effect/radiation_emitter, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eRZ" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eSi" = ( -/obj/machinery/teleport/hub{ - emagged = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"eSG" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"eSH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"eSW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/vending/medical{ - dir = 8; - emagged = 1; - pixel_x = -6; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"eTp" = ( -/obj/random/gun/random, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"eTw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"eUc" = ( -/obj/structure/prop/alien/computer/camera/flipped, -/obj/structure/prop/alien/computer/camera/flipped, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eUj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/prop/alien/dispenser, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"eUH" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"eVl" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/weapon/tool/screwdriver/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"eVI" = ( -/obj/structure/prop/alien/computer/camera/flipped, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"eVL" = ( -/obj/machinery/computer/ship/sensors, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"eWA" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "34" - }, -/turf/template_noop, -/area/space) -"eWO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 10; - icon_state = "4-10" - }, -/turf/simulated/floor/plating, -/area/space) -"eXd" = ( -/obj/vehicle/train/engine{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"eYd" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor, -/area/space) -"eYy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/space) -"eYV" = ( -/obj/effect/alien/weeds, -/obj/structure/prop/transmitter, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"eZe" = ( -/obj/structure/cult/talisman, -/obj/effect/map_effect/interval/sound_emitter/geiger/med, -/turf/simulated/floor/cult, -/area/space) -"eZk" = ( -/obj/machinery/pointdefense, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"eZp" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"fal" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"faA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/phoronrglass, -/turf/simulated/floor, -/area/space) -"faH" = ( -/obj/structure/toilet{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"faJ" = ( -/obj/machinery/the_singularitygen/tesla, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fcD" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fdb" = ( -/mob/living/simple_mob/mechanical/hivebot/tank, -/turf/template_noop, -/area/space) -"fdx" = ( -/obj/item/weapon/stool/baystool/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"feM" = ( -/obj/machinery/door/airlock/vault, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"feU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "ursula_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"feX" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"ffF" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ffW" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/flasher{ - id = "procroom2"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/cult, -/area/space) -"fgj" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/rddouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"fgs" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fgG" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/engineering, -/obj/effect/floor_decal/industrial/warning, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"fhh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"fhr" = ( -/obj/structure/table, -/obj/effect/alien/weeds, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor, -/area/space) -"fhv" = ( -/obj/structure/prop/alien/dispenser, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fhD" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fit" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"fiP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room2"; - name = "Room 2 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"fjf" = ( -/obj/structure/bed/chair/bay/chair/padded/black, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fjP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fjT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"fjX" = ( -/obj/machinery/door/airlock/maintenance/rnd{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"fkd" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/loot_pile/mecha/phazon, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"fkf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fkl" = ( -/obj/structure/flora/lily1, -/turf/simulated/floor/beach/water, -/area/space) -"fky" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod) -"fkA" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"fkI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fld" = ( -/obj/machinery/power/supermatter/shard{ - color = "red"; - simulated = 0 - }, -/turf/simulated/floor/gorefloor2, -/area/space) -"flk" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - icon_state = "door_locked"; - id_tag = "needle_hatch"; - locked = 1; - name = "shuttle side hatch" - }, -/obj/machinery/button/remote/airlock{ - id = "needle_hatch"; - name = "Side Hatch Control"; - pixel_y = -26; - specialfunctions = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"fll" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "22" - }, -/turf/template_noop, -/area/space) -"flr" = ( -/obj/structure/table/alien, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"flt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/space) -"flw" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/dark, -/area/space) -"flB" = ( -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/turf/simulated/floor/plating/external, -/area/space) -"flC" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/orange, -/obj/machinery/flasher{ - id = "permflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/wood, -/area/space) -"flP" = ( -/obj/structure/fans/hardlight/colorable/abductor, -/obj/machinery/door/airlock/alien{ - name = "External Airlock"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"fmx" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"fmD" = ( -/obj/item/weapon/cell/super/empty, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fmG" = ( -/obj/effect/alien/weeds, -/obj/effect/gibspawner/human, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"fmU" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"fnm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/space) -"fnt" = ( -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Translocate-R-US" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fnM" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"fnU" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"foz" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/light, -/turf/simulated/shuttle/plating, -/area/space) -"foY" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/shuttle/plating, -/area/space) -"fpe" = ( -/obj/machinery/vending/tool{ - dir = 4; - pixel_x = 5 - }, -/turf/template_noop, -/area/space) -"fpl" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"fqa" = ( -/obj/structure/transit_tube/station, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fqB" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/wood, -/area/space) -"fry" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/flasher{ - id = "exaroom2"; - name = "Floor mounted flash" - }, -/turf/simulated/floor, -/area/space) -"frQ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/prop/alien/computer/hybrid, -/turf/simulated/floor, -/area/space) -"frR" = ( -/turf/unsimulated/fake_space, -/area/space) -"fsl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fsu" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fsy" = ( -/obj/structure/salvageable/server, -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"fsS" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"ftd" = ( -/obj/machinery/door/airlock/glass_centcom, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"ftq" = ( -/obj/machinery/computer/ship/sensors, -/turf/simulated/shuttle/floor/black, -/area/space) -"ftr" = ( -/obj/mecha/combat/fighter/pinnace{ - dir = 8 - }, -/obj/machinery/mech_recharger{ - icon = 'icons/turf/shuttle_alien_blue.dmi' - }, -/turf/simulated/floor/reinforced, -/area/space) -"fue" = ( -/obj/structure/table/standard, -/obj/item/toy/eight_ball, -/obj/item/toy/tennis/red, -/turf/simulated/floor/wood, -/area/space) -"fuq" = ( -/obj/structure/bed/chair/bay/chair/padded/red, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fuJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fuL" = ( -/obj/structure/table/alien/blue, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/weapon/surgical/retractor/alien, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"fuP" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"fvh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fvA" = ( -/obj/structure/table/alien, -/obj/item/weapon/packageWrap, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"fvG" = ( -/obj/structure/prop/alien/dispenser, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fvJ" = ( -/obj/structure/fuel_port{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"fvW" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"fwf" = ( -/obj/machinery/door/airlock/alien{ - name = "Left-Wing Thrusters MK-2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"fwj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fwZ" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"fxo" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fxp" = ( -/turf/simulated/shuttle/floor/yellow, -/area/space) -"fxI" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"fyh" = ( -/obj/structure/safe/floor, -/turf/template_noop, -/area/space) -"fyO" = ( -/obj/item/weapon/gun/energy/ionrifle, -/obj/item/weapon/gun/energy/modular/carbine, -/obj/item/weapon/gun/energy/pummeler, -/obj/item/weapon/gun/energy/taser, -/obj/machinery/light, -/obj/item/weapon/cell/device/super, -/obj/item/weapon/cell/device/super, -/obj/item/weapon/cell/device/super, -/obj/item/weapon/cell/device/super, -/obj/structure/closet/secure_closet/guncabinet{ - req_one_access = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fzd" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"fzg" = ( -/obj/structure/sign/science{ - pixel_x = 32 - }, -/turf/template_noop, -/area/space) -"fzh" = ( -/obj/structure/table/fancyblack, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/starcaster_news, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"fzk" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_cycler{ - departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control","Exploration","Pilot Blue","Pilot"); - locked = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fAo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"fBi" = ( -/mob/living/simple_mob/vore/demon/wendigo{ - faction = "cult" - }, -/turf/simulated/floor/gorefloor2, -/area/space) -"fBU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fCv" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"fCI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fCX" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fCZ" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"fDi" = ( -/obj/structure/ship_munition/disperser_charge/fire, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fDm" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"fDG" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fEj" = ( -/obj/effect/meteor/emp, -/turf/template_noop, -/area/space) -"fED" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fFj" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"fFq" = ( -/obj/machinery/computer/security/abductor{ - icon_screen = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fFC" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/obj/machinery/telecomms/receiver, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"fFO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "ursula"; - pixel_y = 26; - tag_airpump = "ursula_pump"; - tag_chamber_sensor = "ursula_sensor"; - tag_exterior_door = "ursula_outer"; - tag_interior_door = "ursula_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/plating, -/area/space) -"fFW" = ( -/obj/structure/girder/reinforced, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"fGk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/floor/black, -/area/space) -"fGr" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fGs" = ( -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/closet/walllocker_double/medical/north, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/roller, -/turf/simulated/shuttle/floor/black, -/area/space) -"fGE" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"fGN" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "2" - }, -/turf/template_noop, -/area/template_noop) -"fGY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/wall/rshull, -/area/space) -"fHu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fId" = ( -/obj/structure/table/reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fIQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "Avalon_engine_airlock_pump" - }, -/obj/machinery/airlock_sensor{ - pixel_x = 28; - id_tag = "Avalon_engine_airlock_sensor" - }, -/turf/simulated/floor/reinforced, -/area/space) -"fIZ" = ( -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"fJa" = ( -/obj/effect/map_effect/portal/line/side_b{ - dir = 1 - }, -/obj/effect/map_effect/perma_light/concentrated, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fJh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room1"; - name = "Room 1 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"fJt" = ( -/obj/structure/cryofeed{ - dir = 1; - pixel_y = -31 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fJA" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, -/area/space) -"fJU" = ( -/obj/structure/prop/alien/pod/open, -/obj/structure/prop/alien/pod/open, -/turf/simulated/shuttle/floor/alien, -/area/space) -"fJY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"fMv" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"fNC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"fOO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"fPf" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fPu" = ( -/obj/structure/closet/walllocker_double/hydrant/north, -/obj/machinery/recharger/wallcharger{ - pixel_x = -27; - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"fPL" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"fPP" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/space) -"fPU" = ( -/obj/machinery/atm{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/space) -"fQa" = ( -/obj/effect/map_effect/portal/line/side_a{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fQu" = ( -/obj/machinery/seed_extractor, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"fQE" = ( -/obj/machinery/computer/prisoner{ - dir = 4; - icon = 'icons/obj/abductor.dmi'; - icon_screen = null; - icon_state = "console-c"; - req_access = list(777) - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fRl" = ( -/obj/machinery/ai_status_display{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/space) -"fRt" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/template_noop, -/area/space) -"fRT" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"fSo" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"fSx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Upper Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"fTk" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"fTF" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/space) -"fUp" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alien, -/area/space) -"fUG" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam5" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"fVe" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fVq" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "ursula_inner"; - locked = 1; - name = "Internal Access" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "ursula"; - name = "interior access button"; - pixel_y = 26 - }, -/turf/simulated/shuttle/plating, -/area/space) -"fVx" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"fVz" = ( -/obj/item/device/nif/authentic, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"fVG" = ( -/obj/machinery/door/airlock/alien{ - name = "Cargo Airlock"; - req_one_access = list(777) - }, -/obj/structure/fans/hardlight/colorable/abductor, -/turf/simulated/floor, -/area/space) -"fWy" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/wood/sif, -/area/space) -"fWJ" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"fWK" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"fXf" = ( -/obj/effect/mobblocker, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/space) -"fXK" = ( -/obj/machinery/artifact, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fYg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"fYl" = ( -/obj/structure/prop/alien/power, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"fYn" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/weapon/surgical/retractor/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"fZc" = ( -/turf/simulated/floor/wood, -/area/space) -"fZA" = ( -/obj/machinery/shower, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gaO" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/r_wall, -/area/space) -"gbd" = ( -/obj/machinery/computer/crew{ - dir = 1; - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gbn" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumnorth" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gbw" = ( -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"gbM" = ( -/obj/structure/fence/cut/medium, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"gcn" = ( -/obj/machinery/power/supermatter/shard, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gcq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/random/maintenance/engineering, -/turf/simulated/floor/plating/external, -/area/space) -"gcy" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gcK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gdf" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 10; - icon_state = "2-10" - }, -/turf/simulated/floor/plating, -/area/space) -"gdk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"gdH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"ged" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gep" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/bed/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"geV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gfe" = ( -/turf/simulated/shuttle/floor/purple, -/area/space) -"gfo" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/scalpel/ripper, -/obj/item/weapon/surgical/scalpel/manager, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"gfB" = ( -/obj/machinery/power/tesla_coil, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/space) -"gfC" = ( -/obj/structure/loot_pile/surface/alien/end, -/turf/simulated/floor/greengrid, -/area/space) -"ggJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"ggX" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"ghm" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/snacks/mint, -/obj/item/weapon/packageWrap, -/obj/item/weapon/reagent_containers/dropper, -/obj/machinery/chemical_dispenser/bar_alc/full{ - pixel_x = -1; - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ghq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"ghO" = ( -/obj/machinery/computer/teleporter{ - dir = 2 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ghY" = ( -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/clean, -/obj/structure/closet/alien, -/obj/item/device/lightreplacer, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gic" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"gie" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam4" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gih" = ( -/turf/simulated/shuttle/wall/alien/hard_corner, -/area/space) -"gij" = ( -/obj/structure/bed/chair/bay/comfy/green{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"git" = ( -/turf/simulated/shuttle/wall, -/area/space) -"giA" = ( -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"giB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"giW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"gjA" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/obj/structure/sign/poster/nanotrasen{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/shuttle/plating, -/area/space) -"gjU" = ( -/obj/machinery/light, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gkM" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"gkR" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/loot_pile/mecha/odysseus/murdysseus, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"gkT" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gkU" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/machinery/computer/crew{ - dir = 4 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"gle" = ( -/obj/random/outcrop, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gll" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/space) -"glu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/machinery/power/terminal, -/obj/structure/cable/blue{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"glz" = ( -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"glT" = ( -/obj/machinery/telepad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gma" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/space) -"gmq" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/space) -"gmM" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"gmP" = ( -/obj/structure/catwalk, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"gmZ" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/wood/sif, -/area/space) -"gnj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"gnx" = ( -/obj/structure/cable{ - d2 = 5; - icon_state = "0-5" - }, -/turf/simulated/floor/plating, -/area/space) -"gog" = ( -/obj/effect/alien/weeds, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"goi" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"goo" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled, -/area/space) -"gov" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gpd" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gpg" = ( -/obj/machinery/teleport/station, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gpP" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/purple, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gpT" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"gpX" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"gqk" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"gqp" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 3"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gqz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/geiger, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/gloves/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"gqD" = ( -/obj/machinery/power/shield_generator/charged{ - field_radius = 8; - initial_shield_modes = 2153; - target_radius = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/plating, -/area/space) -"gqJ" = ( -/mob/living/simple_mob/animal/space/alien/sentinel, -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gqR" = ( -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, -/area/space) -"gqZ" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"grh" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/external, -/area/space) -"grw" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/shuttle/floor/white, -/area/space) -"grO" = ( -/obj/machinery/teleport/hub, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"grX" = ( -/obj/structure/tubes, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/button/remote/airlock/survival_pod{ - dir = 10; - pixel_y = -24 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gsu" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gsO" = ( -/obj/structure/closet, -/turf/simulated/floor/tiled, -/area/space) -"gtb" = ( -/obj/structure/sign/graffiti/pisoff, -/turf/simulated/floor/tiled, -/area/space) -"gtI" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/machinery/recharger{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/pizzavoucher, -/obj/item/toy/figure, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gtL" = ( -/obj/structure/cliff/automatic/corner{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"guh" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/space) -"gus" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"guK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gvy" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"gvL" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"gvO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/space) -"gvR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"gvZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gwK" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/template_noop, -/area/space) -"gwS" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; - name = "Station Intercom (Brig Radio)"; - pixel_y = -21; - wires = 7 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gxr" = ( -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/white, -/area/space) -"gxx" = ( -/obj/structure/filingcabinet/security, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gxy" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"gyr" = ( -/turf/simulated/floor/airless, -/area/space) -"gyt" = ( -/turf/simulated/shuttle/wall/alien, -/area/space) -"gzp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"gzE" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_state = "dispenser"; - name = "Drug-Dispenser"; - req_access = list(777) - }, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/device/sleevemate, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"gzF" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/turf/simulated/shuttle/floor/white, -/area/space) -"gzR" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"gzV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor, -/area/space) -"gzZ" = ( -/turf/simulated/floor/carpet/blue, -/area/space) -"gAs" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain, -/obj/item/weapon/pen/chameleon, -/obj/item/device/gps/advanced/science, -/obj/machinery/button/remote/blast_door{ - id = "estrella_blast"; - name = "remote blast shielding control"; - pixel_x = -1; - pixel_y = -26 - }, -/turf/simulated/floor/wood, -/area/space) -"gAT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gBj" = ( -/obj/structure/hull_corner{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"gBz" = ( -/obj/machinery/bodyscanner, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"gBV" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/item/weapon/material/shard/phoron, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gCb" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "dorm_tint5" - }, -/obj/structure/window/reinforced/polarized{ - id = "sauna_tint2" - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/window/plastitanium, -/turf/simulated/floor/reinforced, -/area/space) -"gCf" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = -27; - pixel_y = -4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod) -"gCJ" = ( -/obj/item/weapon/mining_scanner, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/void/mining, -/obj/item/clothing/head/helmet/space/void/mining, -/obj/structure/table/rack/shelf/steel, -/obj/item/device/suit_cooling_unit, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gCK" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"gCR" = ( -/obj/effect/fancy_shuttle/escape, -/turf/template_noop, -/area/space) -"gCW" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"gDe" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "military autolathe" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"gDi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"gDx" = ( -/obj/item/weapon/bone/skull/unknown, -/turf/simulated/floor/lava, -/area/space) -"gEF" = ( -/obj/structure/simple_door/flock, -/turf/template_noop, -/area/space) -"gFa" = ( -/obj/structure/cable{ - d1 = 32; - icon_state = "32-1" - }, -/turf/simulated/floor/plating, -/area/space) -"gFp" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "garbageone"; - name = "disposal coveyor" - }, -/turf/simulated/floor/cult, -/area/space) -"gFw" = ( -/obj/effect/map_effect/portal/line/side_a{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gFJ" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/wood/sif, -/obj/fiftyspawner/turcarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/marble, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/fiftyspawner/cardboard, -/obj/fiftyspawner/cardboard, -/turf/simulated/floor/plating, -/area/space) -"gFO" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gGj" = ( -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"gGu" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_x = 18; - pixel_y = -4; - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "Avalon-kitchen"; - layer = 3.3; - name = "Avalon Kitchen Shutters" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"gGL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "stargazer_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"gHn" = ( -/obj/structure/prop/alien/pod/open, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"gHr" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gHM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"gId" = ( -/obj/machinery/computer/ship/sensors{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"gIf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/bed/chair/bay/comfy/captain, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"gIk" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/implantpad, -/obj/item/weapon/implantpad, -/turf/simulated/floor/carpet, -/area/space) -"gIL" = ( -/obj/effect/alien/weeds, -/obj/structure/loot_pile/mecha/durand, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"gIW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/space) -"gIX" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"gJb" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gJq" = ( -/turf/simulated/floor/carpet, -/area/space) -"gJY" = ( -/obj/mecha/combat/fighter/baron{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"gKd" = ( -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"gKr" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"gLy" = ( -/obj/machinery/light{ - layer = 3 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/blade/fountain, -/turf/simulated/floor/tiled/dark, -/area/space) -"gMt" = ( -/obj/machinery/mecha_part_fabricator, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"gNv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gNE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"gNI" = ( -/obj/effect/meteor/big, -/turf/template_noop, -/area/space) -"gNP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gNZ" = ( -/obj/machinery/vending/cola{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gOk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/mob/living/simple_mob/mechanical/hivebot/tank/meatshield, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gOm" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/shuttle/floor/purple, -/area/space) -"gOp" = ( -/mob/living/carbon/alien/diona{ - adult_name = "Schmeinkie"; - can_namepick_as_adult = 0; - desc = "An overfed diona nymph that looks weirdly like scrumbulous, currently has a hollocollar tagged 'Schmeinkie' on it"; - faction = "hivebot"; - health = 150; - maxHealth = 150; - name = "Schmeinkie"; - voice_name = "Schmeinkie" - }, -/turf/simulated/floor/greengrid, -/area/space) -"gOR" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"gOV" = ( -/obj/effect/fancy_shuttle/lifeboat2, -/turf/template_noop, -/area/space) -"gPh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"gPx" = ( -/obj/structure/table/alien/blue, -/turf/simulated/shuttle/floor/white, -/area/space) -"gPD" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"gPE" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"gPK" = ( -/obj/screen/alert/highpressure, -/obj/machinery/computer/rdconsole/core{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"gPX" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"gQf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor/airless, -/area/space) -"gQt" = ( -/obj/structure/transit_tube_pod{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gQK" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/shuttle/plating, -/area/space) -"gRd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gRp" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor, -/area/space) -"gRz" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/flasher{ - id = "exaroom6"; - name = "Floor mounted flash" - }, -/turf/simulated/floor, -/area/space) -"gSa" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/device/sleevemate, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gSl" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumbath" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"gSJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gTh" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/space) -"gTn" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/flame/lighter/random{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/weapon/flame/lighter/random, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"gTC" = ( -/obj/structure/bed/chair/bay/comfy, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-boardroom"; - name = "Avalon Boardroom Blast Doors Control"; - pixel_y = 24; - req_access = list(28); - pixel_x = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"gTR" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"gUc" = ( -/obj/machinery/disperser/front, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gUh" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_2" - }, -/turf/simulated/floor/tiled, -/area/space) -"gUt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"gUE" = ( -/obj/machinery/button/remote/airlock{ - id = "abdorm1"; - name = "Door Lock Control"; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"gUI" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"gUV" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"gWg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"gWt" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = -32 - }, -/turf/template_noop, -/area/space) -"gWJ" = ( -/obj/effect/map_effect/interval/sound_emitter, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"gWK" = ( -/obj/structure/cable/blue{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"gXy" = ( -/obj/machinery/vending/wallmed1{ - name = "NanoMed Wall"; - pixel_x = 25 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/storage/quickdraw/syringe_case, -/obj/item/weapon/storage/quickdraw/syringe_case, -/turf/simulated/shuttle/floor/white, -/area/space) -"gXK" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/step_trigger/message{ - message = "You feel a horrible chill run up your spine. . . you really should not continue. . ."; - once = 0 - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"gYa" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"gYn" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "15" - }, -/turf/template_noop, -/area/template_noop) -"gZa" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/vertical, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"gZg" = ( -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"gZR" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/green, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"gZZ" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "echidna"; - name = "interior access button"; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/plating, -/area/space) -"haj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"haI" = ( -/obj/machinery/power/apc/alarms_hidden{ - pixel_y = -20 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"haV" = ( -/obj/structure/flora/pottedplant/mysterious, -/turf/simulated/floor/wood/sif, -/area/space) -"haW" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hbc" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"hbn" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"hbq" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"hbA" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/structure/toilet/prison{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"hbL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-singularity"; - name = "Avalon Singularity Blast Doors Control"; - req_access = list(28); - pixel_x = -27 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hbQ" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hcd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hcs" = ( -/obj/structure/lattice, -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"hcx" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hcC" = ( -/mob/living/simple_mob/animal/space/alien/drone, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"hdl" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "9" - }, -/turf/template_noop, -/area/space) -"hdF" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"hdU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"hei" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/map_effect/interval/sound_emitter/geiger/high, -/obj/effect/map_effect/interval/sound_emitter/thunder, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"heD" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored, -/turf/simulated/shuttle/floor/alien, -/area/space) -"heQ" = ( -/obj/fire, -/turf/simulated/floor/gorefloor, -/area/space) -"heV" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"hfh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Starboard Upper Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"hfm" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - name = "Atmospherics" - }, -/turf/simulated/floor, -/area/space) -"hfy" = ( -/obj/machinery/transhuman/resleever/abductor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hfB" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/obj/machinery/cell_charger{ - pixel_x = 1; - pixel_y = -2 - }, -/obj/machinery/recharger{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/item/weapon/reagent_containers/food/drinks/jar{ - pixel_x = 10; - pixel_y = 12 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hgc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"hgh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Starboard Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"hgq" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/plating, -/area/space) -"hgu" = ( -/obj/structure/loot_pile/surface/alien/security, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hgL" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/tiled/white, -/area/space) -"hgQ" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"hhj" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"hhy" = ( -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/space) -"hhG" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"hih" = ( -/obj/structure/lattice, -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"hiB" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"hiI" = ( -/obj/machinery/iv_drip, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"hjd" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hjx" = ( -/obj/structure/table/alien/blue, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/clothing/suit/armor/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hjN" = ( -/obj/structure/table/alien/blue, -/obj/item/prop/alien/junk, -/obj/item/weapon/telecube/precursor/mated/mirrorcolor, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"hks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"hkS" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating/external, -/area/space) -"hkY" = ( -/turf/simulated/floor/tiled, -/area/space) -"hln" = ( -/obj/structure/closet/secure_closet/engineering_electrical{ - req_access = null - }, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/plating/external, -/area/space) -"hlt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"hlF" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Starboard Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"hlZ" = ( -/obj/machinery/chemical_dispenser/bar_alc/full{ - pixel_y = 22 - }, -/obj/structure/table/marble, -/obj/item/weapon/clipboard, -/obj/item/toy/figure/bartender, -/obj/item/weapon/storage/fancy/cigar/havana, -/obj/item/weapon/storage/fancy/cigar/cohiba, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hmn" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"hms" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid{ - pixel_y = -7 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid{ - pixel_y = 7 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, -/obj/structure/table/alien/blue, -/turf/simulated/shuttle/floor/alien, -/area/space) -"hnE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hnJ" = ( -/obj/effect/alien/weeds, -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"hnQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/button/flasher{ - id = "teleroom2"; - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hoX" = ( -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"hpa" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/pizzavoucher, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hpj" = ( -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 8 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"hpn" = ( -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hpt" = ( -/obj/structure/fans/hardlight/colorable/abductor, -/obj/machinery/door/airlock/alien{ - name = "Cargo Airlock"; - req_one_access = list(777) - }, -/turf/simulated/floor, -/area/space) -"hpQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"hqe" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/space) -"hqf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hqi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hqH" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/mech_recharger, -/turf/simulated/shuttle/plating, -/area/space) -"hqV" = ( -/obj/structure/closet/secure_closet/miner{ - locked = 0 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hrg" = ( -/obj/machinery/sleep_console, -/obj/structure/sign/nosmoking_1{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"hrv" = ( -/obj/structure/sign/double/maltesefalcon/left, -/turf/simulated/wall, -/area/space) -"hrI" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/button/flasher{ - id = "exaroom3"; - pixel_y = -31 - }, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hrQ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/template_noop, -/area/space) -"hrR" = ( -/obj/machinery/doppler_array, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hsZ" = ( -/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"htn" = ( -/obj/structure/cryofeed, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"hty" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"huH" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"huK" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hvp" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"hvv" = ( -/obj/effect/landmark/carved_pumpkin_spawn, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hvx" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/structure/railing/grey, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"hvK" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - dir = 2; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"hvT" = ( -/obj/machinery/porta_turret/alien{ - faction = "hivebot" - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"hwy" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 8; - pixel_x = -6 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"hwQ" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"hxr" = ( -/obj/item/weapon/broken_gun, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hxu" = ( -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/wood, -/area/space) -"hxw" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"hxA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"hxD" = ( -/obj/structure/table/darkglass, -/obj/machinery/computer/med_data/laptop, -/turf/simulated/floor/wood/sif, -/area/space) -"hxR" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/item/prop/alien/junk, -/obj/item/device/perfect_tele/alien/bluefo, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hxV" = ( -/obj/machinery/door/airlock/alien/blue/locked, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"hyc" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hyj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/fireaxecabinet{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hyu" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"hyL" = ( -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"hyM" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"hzE" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"hAy" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"hAD" = ( -/obj/structure/prop/alien/power, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"hAE" = ( -/obj/structure/table/reinforced, -/obj/item/device/gps/advanced/science, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hBm" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/space) -"hBu" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/button/flasher{ - id = "exaroom2"; - pixel_y = -31 - }, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hBF" = ( -/turf/simulated/floor/tiled/dark, -/area/space) -"hBH" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor, -/obj/item/weapon/storage/belt/medical/alien, -/obj/item/clothing/head/helmet/alien/tank, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hBN" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"hBP" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/reagentgrinder, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"hBW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hCm" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"hCx" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam3" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"hCz" = ( -/obj/machinery/floorlayer, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"hDj" = ( -/obj/machinery/holosign/bar{ - id = "SP-baropen" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"hDy" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/shuttle, -/turf/simulated/shuttle/floor/black, -/area/space) -"hDU" = ( -/obj/item/clothing/suit/straight_jacket, -/turf/simulated/floor, -/area/space) -"hFu" = ( -/obj/random/tech_supply/nofail, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hFz" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumbath" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"hGR" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hHk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hHv" = ( -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hHE" = ( -/obj/structure/table/reinforced, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"hHN" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"hIe" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/space) -"hJf" = ( -/obj/machinery/vending/event/clothing, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hJo" = ( -/obj/item/weapon/antag_spawner/syndicate_drone/protector, -/turf/template_noop, -/area/space) -"hJu" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"hJY" = ( -/obj/machinery/power/emitter{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8"; - dir = 2 - }, -/turf/simulated/floor/airless, -/area/space) -"hKr" = ( -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/space) -"hKD" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hKZ" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"hLe" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hLg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/shuttle/plating, -/area/space) -"hLn" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"hMc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"hMo" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/sign/poster/nanotrasen{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"hMP" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "activating" - }, -/turf/simulated/floor/tiled, -/area/space) -"hNr" = ( -/obj/item/weapon/gun/projectile/colt, -/obj/item/weapon/gun/projectile/garand, -/obj/item/weapon/gun/projectile/revolvingrifle, -/obj/item/weapon/gun/projectile/shotgun/pump, -/obj/item/ammo_magazine/ammo_box/b12g, -/obj/item/ammo_magazine/m45, -/obj/item/ammo_magazine/m45, -/obj/structure/closet/secure_closet/guncabinet{ - req_one_access = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hNE" = ( -/obj/structure/bed/chair/comfy/black, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"hNF" = ( -/obj/structure/salvageable/bliss, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"hNI" = ( -/obj/random/trash_pile, -/turf/template_noop, -/area/space) -"hNQ" = ( -/obj/effect/alien/weeds, -/obj/structure/simple_door/resin, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"hOa" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/space) -"hOp" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hOr" = ( -/obj/machinery/disposal/deliveryChute, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/cult, -/area/space) -"hOO" = ( -/obj/structure/cryofeed{ - dir = 2; - pixel_y = 32 - }, -/obj/machinery/cryopod{ - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hOP" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"hPw" = ( -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hPy" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"hPP" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"hPV" = ( -/obj/structure/closet/alien, -/obj/item/clothing/shoes/boots/jackboots/thigh, -/obj/item/clothing/shoes/boots/jackboots/toeless/thigh, -/obj/item/clothing/shoes/boots/jackboots/toeless/knee, -/obj/item/clothing/shoes/boots/fluff/siren, -/obj/item/clothing/shoes/dress/white, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/flats, -/obj/item/clothing/shoes/griffin, -/obj/item/clothing/shoes/heels, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/black/cuffs/red, -/obj/item/clothing/shoes/black/cuffs/octavious, -/obj/item/clothing/shoes/boots/hoof, -/obj/item/clothing/accessory/shiny/socks/poly, -/obj/item/clothing/accessory/shiny/socks/poly, -/obj/item/clothing/accessory/shiny/socks, -/obj/item/clothing/accessory/shiny/socks, -/obj/item/clothing/accessory/shiny/gloves/poly, -/obj/item/clothing/accessory/shiny/gloves/poly, -/obj/item/clothing/accessory/shiny/gloves, -/obj/item/clothing/accessory/shiny/gloves, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hQe" = ( -/obj/machinery/button/windowtint{ - id = "exam4"; - pixel_y = -23 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"hQl" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/button/remote/blast_door{ - id = "shelterblast"; - name = "Shelter Blast Doors"; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"hQr" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"hQH" = ( -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"hRf" = ( -/obj/structure/coatrack, -/obj/machinery/button/windowtint{ - id = "h-living"; - pixel_x = -27 - }, -/turf/simulated/floor/wood, -/area/space) -"hRm" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/blucarpet, -/area/space) -"hSc" = ( -/obj/machinery/disperser/middle, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hSj" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/space) -"hSG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/reinforced, -/area/space) -"hSP" = ( -/obj/structure/disposalpipe/tagger{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"hSS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/wall, -/area/space) -"hSV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/wall/rshull, -/area/space) -"hTt" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 24; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"hTU" = ( -/obj/structure/largecrate/animal/cat, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hTW" = ( -/obj/machinery/atmospherics/pipe/tank/air, -/turf/simulated/floor/plating/external, -/area/space) -"hUt" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/space) -"hUz" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/curtain/bed{ - dir = 2; - icon_state = "open"; - name = "Bathroom curtain"; - opacity = 0; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"hVl" = ( -/obj/structure/bed/chair/bay/chair/padded/blue{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hVK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"hWq" = ( -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"hWs" = ( -/obj/random/maintenance/engineering, -/turf/simulated/floor/plating/external, -/area/space) -"hWw" = ( -/turf/simulated/floor/outdoors/ice/dark_smooth, -/area/space) -"hWR" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/railing/grey, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"hXr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/table/bench/standard, -/turf/simulated/shuttle/floor/white, -/area/space) -"hXv" = ( -/obj/effect/floor_decal/borderfloorblack/corner, -/turf/simulated/floor/tiled/dark, -/area/space) -"hXx" = ( -/obj/item/weapon/storage/box, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"hXY" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/floor/tiled/white, -/area/space) -"hYg" = ( -/obj/structure/bed/chair/bay/chair/padded/blue{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hYn" = ( -/obj/machinery/transhuman/synthprinter, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"hYo" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"hYu" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/greendouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"hYG" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/space) -"hZr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"hZx" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/item/modular_computer/console/preset/medical{ - dir = 4 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"hZH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"hZU" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/space) -"iac" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/space) -"iad" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 4; - icon_state = "32-4" - }, -/turf/simulated/floor/plating, -/area/space) -"iar" = ( -/obj/machinery/computer/crew{ - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iaU" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam6" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ibn" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"ibq" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"ibO" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/space) -"icl" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = list(67) - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"ico" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"idJ" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"iei" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iew" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"ieF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"ieJ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/space) -"ifn" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "echidna"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"ifq" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/mecha/combat/gygax/old, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ifr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"ifx" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled/white, -/area/space) -"iga" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/floor/wood, -/area/space) -"ihc" = ( -/obj/machinery/door/airlock/alien{ - name = "West Engine"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ihK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - id_tag = "Avalon_engine_airlock_pump" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ihX" = ( -/mob/living/simple_mob/animal/space/alien/drone, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"iie" = ( -/obj/effect/floor_decal/borderfloorblack, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/dark, -/area/space) -"iiv" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iiF" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/space) -"iiQ" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/bluegrid, -/area/space) -"ijj" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - icon_state = "door_locked"; - id_tag = "ursula_hatch"; - locked = 1; - name = "shuttle side hatch" - }, -/obj/machinery/button/remote/airlock{ - id = "ursula_hatch"; - name = "Side Hatch Control"; - pixel_y = -26; - specialfunctions = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ijy" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/turf/simulated/floor, -/area/space) -"ijF" = ( -/obj/machinery/vr_sleeper/alien/alpha_replicant, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ika" = ( -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"ikc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "estrella_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "estrella_sensor"; - pixel_y = -28 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ike" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iku" = ( -/obj/machinery/door/airlock/alien{ - name = "Cargo Hold"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ikK" = ( -/turf/unsimulated/floor/dark, -/area/space) -"ikU" = ( -/obj/structure/fuel_port, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"ikX" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/fire{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ild" = ( -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/space) -"ilm" = ( -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"ilx" = ( -/obj/machinery/gateway/brass{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ilE" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"imH" = ( -/obj/item/weapon/banner/blue, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"imW" = ( -/obj/structure/closet/alien, -/obj/item/weapon/tool/wrench/alien, -/obj/item/weapon/weldingtool/alien, -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, -/obj/item/device/multitool/alien, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"inf" = ( -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/space) -"inz" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"inH" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/device/multitool/alien, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"inJ" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/random/tool/alien, -/obj/item/stack/cable_coil/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"inU" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"inW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"iok" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/door/airlock/alien/blue/public, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"iol" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/obj/item/weapon/card/id/syndicate, -/obj/item/device/healthanalyzer/advanced, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/cell/device/weapon/recharge/alien/omni, -/obj/item/weapon/cell/device/weapon/recharge/alien/omni, -/obj/item/weapon/gun/energy/gun/fluff/dominator, -/obj/item/weapon/gun/energy/netgun, -/obj/item/weapon/storage/box/handcuffs, -/obj/item/weapon/tape_roll, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/explosive, -/obj/item/weapon/implantcase/freedom, -/turf/template_noop, -/area/space) -"ioY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Bridge" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ipf" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1; - icon_state = "comfychair_preview" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ips" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/space) -"iqr" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"iqH" = ( -/obj/machinery/pump, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iqQ" = ( -/obj/machinery/door/airlock/alien{ - name = "Cell 2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"iro" = ( -/obj/effect/map_effect/portal/line/side_a, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"irx" = ( -/obj/structure/window/plastitanium, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"irP" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"irV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"isf" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor, -/area/space) -"isj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"itc" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "24" - }, -/turf/template_noop, -/area/space) -"itF" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"itL" = ( -/obj/effect/floor_decal/emblem/nt3, -/turf/simulated/floor/tiled/dark, -/area/space) -"iuf" = ( -/turf/simulated/floor/reinforced, -/area/space) -"iuq" = ( -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/shuttle/floor/white, -/area/space) -"iuu" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"ivg" = ( -/obj/machinery/computer, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ivo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/shield_generator/charged{ - field_radius = 8; - initial_shield_modes = 2153; - target_radius = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ivw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/wall/rshull, -/area/space) -"ivA" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"iwa" = ( -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"iwi" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/surgery, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/space) -"iwA" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "stargazer_inner"; - name = "Internal Access" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "stargazer"; - name = "interior access button"; - pixel_y = -26 - }, -/turf/simulated/shuttle/plating, -/area/space) -"iwN" = ( -/obj/structure/table/bench/marble, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/space) -"iwS" = ( -/obj/machinery/door/airlock/alien{ - id_tag = "abdorm3"; - name = "Dorm 3"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"iwZ" = ( -/obj/machinery/computer/operating{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"ixh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"ixo" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ixD" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ixN" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/space) -"iyk" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"iyp" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 1 - }, -/turf/template_noop, -/area/space) -"iyQ" = ( -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"iyY" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/borderfloorblack{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"izf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 4"; - id_tag = "Avalon-room4" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"izm" = ( -/obj/machinery/teleport/station, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"izz" = ( -/obj/machinery/door/airlock/alien/blue/public, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"izS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - opacity = 1 - }, -/obj/machinery/power/smes/buildable/power_shuttle, -/turf/simulated/shuttle/plating, -/area/space) -"iAD" = ( -/mob/living/simple_mob/creature/strong, -/turf/template_noop, -/area/space) -"iBg" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"iBk" = ( -/obj/effect/forcefield/cult, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iBt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iBP" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "Avalon_engine_airlock_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_x = 28; - id_tag = "Avalon_engine_airlock"; - tag_airpump = "Avalon_engine_airlock_pump"; - tag_exterior_door = "Avalon_engine_airlock_exterior"; - tag_interior_door = "Avalon_engine_airlock_interior"; - tag_chamber_sensor = "Avalon_engine_airlock_sensor"; - name = "Engine Airlock Controller" - }, -/turf/simulated/floor/reinforced, -/area/space) -"iCd" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/machinery/meter, -/turf/simulated/floor, -/area/space) -"iCw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "baby_mammoth_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"iCz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iCH" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/reagent_containers/glass/beaker/noreact{ - pixel_x = -6 - }, -/obj/item/weapon/reagent_containers/glass/beaker/noreact, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"iCJ" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - req_one_access = list(67) - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"iDa" = ( -/obj/machinery/vending/dinnerware{ - pixel_y = 24; - density = 0 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm/angled{ - pixel_y = 18; - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"iDD" = ( -/obj/item/device/tape, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"iDE" = ( -/obj/structure/largecrate/animal/dangerous, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"iDF" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/extinguisher{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/structure/mopbucket{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/weapon/mop, -/obj/item/device/multitool, -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/turf/simulated/floor/tiled, -/area/space) -"iDP" = ( -/obj/structure/table/marble, -/obj/machinery/cash_register/civilian{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "SP-kitchen"; - layer = 3.3; - name = "Kitchen Shutters" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"iDW" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"iEA" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"iEW" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/tealcarpet, -/area/space) -"iFa" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/cult, -/area/space) -"iFi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"iFC" = ( -/obj/trader/capture_crystal, -/turf/template_noop, -/area/space) -"iGF" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/floor, -/area/space) -"iGG" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"iHo" = ( -/obj/effect/overlay/wallrot, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iHr" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iHx" = ( -/obj/machinery/computer/ship/sensors{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"iHE" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/sifwoodentable, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/carpet/blue, -/area/space) -"iId" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/space) -"iIi" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/radio/emergency, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/bluespaceradio, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/device/binoculars, -/obj/item/device/perfect_tele, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/storage/pill_bottle/corophizine, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/weapon/gun/energy/sniperrifle, -/obj/item/weapon/gun/energy/sniperrifle, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"iIq" = ( -/obj/effect/ctrigger, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iIv" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "33" - }, -/turf/template_noop, -/area/space) -"iIy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iIY" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - id_tag = "Avalon_engine_airlock_pump" - }, -/obj/machinery/vending/wallmed_airlock{ - pixel_y = 30 - }, -/turf/simulated/floor/reinforced, -/area/space) -"iJp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"iJw" = ( -/turf/simulated/shuttle/wall/voidcraft/red, -/area/survivalpod) -"iJG" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/turf/simulated/floor/reinforced, -/area/space) -"iKm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/space) -"iKL" = ( -/obj/machinery/door/airlock/maintenance/command, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iLI" = ( -/obj/item/device/gps/computer, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"iMi" = ( -/obj/structure/prop/alien/computer/camera/flipped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iMk" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"iMx" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"iNd" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"iNg" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"iNE" = ( -/obj/machinery/vending/fitness, -/turf/template_noop, -/area/space) -"iNF" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - icon_state = "map_vent_out"; - use_power = 1 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"iNS" = ( -/obj/vehicle/bike/random, -/turf/template_noop, -/area/space) -"iNV" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"iOq" = ( -/obj/machinery/computer/ship/engines, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"iOu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 6; - icon_state = "1-6" - }, -/turf/simulated/floor/plating, -/area/space) -"iOE" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"iPI" = ( -/obj/structure/closet/walllocker_double/hydrant/south, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/regular, -/turf/simulated/shuttle/floor/purple, -/area/space) -"iPZ" = ( -/obj/item/clothing/suit/storage/apron/white, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/space) -"iQa" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iQZ" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/table/standard, -/obj/effect/floor_decal/borderfloorwhite, -/obj/effect/floor_decal/corner/paleblue/border, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/storage/firstaid/o2, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"iRh" = ( -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"iRk" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iRo" = ( -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/wood, -/area/space) -"iRD" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"iRF" = ( -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_state = "dispenser"; - name = "Garmentier"; - req_access = null - }, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iSv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"iSx" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"iSR" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"iSX" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iTl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/space) -"iTS" = ( -/obj/structure/closet/walllocker_double/south{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/space) -"iTV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 6"; - id_tag = "Avalon-room6" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iUd" = ( -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"iUu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/turf/simulated/floor, -/area/space) -"iUJ" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/carpet/oracarpet, -/area/space) -"iUW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"iVc" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/floor/gorefloor2, -/area/space) -"iVq" = ( -/obj/structure/loot_pile/maint/trash, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"iVs" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/structure/fuel_port{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/blue{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"iVu" = ( -/obj/structure/bed/psych, -/turf/simulated/floor/wood/sif, -/area/space) -"iVO" = ( -/obj/structure/table/standard, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/space) -"iWn" = ( -/obj/item/stack/rods{ - amount = 5 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"iWJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor, -/area/space) -"iXl" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_8" - }, -/turf/simulated/floor/tiled, -/area/space) -"iXt" = ( -/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"iXD" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"iYc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/space) -"iYt" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"iZg" = ( -/turf/simulated/shuttle/plating, -/area/space) -"iZx" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/space) -"jaT" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jbs" = ( -/obj/structure/table/standard, -/obj/item/toy/tennis/blue, -/turf/simulated/floor/tiled/dark, -/area/space) -"jbu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jbC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/random/contraband/nofail, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jbF" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"jco" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"jcD" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"jcH" = ( -/obj/item/weapon/mining_scanner, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/void/mining, -/obj/item/clothing/head/helmet/space/void/mining, -/obj/structure/table/rack/shelf/steel, -/obj/item/device/suit_cooling_unit, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jcM" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/mecha/working/ripley/mining/old, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jdn" = ( -/obj/item/device/tape/random, -/obj/item/device/taperecorder, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/structure/table/survival_pod, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jdo" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jdq" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor/carpet, -/area/space) -"jeb" = ( -/obj/machinery/atmospherics/pipe/tank/nitrogen{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"jeh" = ( -/obj/item/weapon/material/knife/machete, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jer" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/space) -"jfd" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/glasses/square{ - pixel_y = -2 - }, -/obj/item/weapon/storage/box/glass_extras/sticks{ - pixel_y = 4 - }, -/obj/item/weapon/storage/box/glass_extras/straws{ - pixel_y = 7 - }, -/obj/item/weapon/packageWrap, -/obj/structure/curtain/open/bed, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jfe" = ( -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = -9 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"jfi" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "estrella_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "estrella"; - pixel_y = 26; - tag_airpump = "estrella_pump"; - tag_chamber_sensor = "estrella_sensor"; - tag_exterior_door = "estrella_outer"; - tag_interior_door = "estrella_inner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/shuttle/plating, -/area/space) -"jfo" = ( -/obj/random/trash_pile, -/turf/simulated/floor/plating, -/area/space) -"jfs" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jft" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jfO" = ( -/obj/structure/prop/alien/dispenser/twoway, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"jfQ" = ( -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/glass, -/turf/simulated/shuttle/plating, -/area/space) -"jfX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"jgf" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/condimentbottles, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/structure/curtain/open/bed, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jgZ" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_3" - }, -/turf/simulated/floor/tiled, -/area/space) -"jhm" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"jie" = ( -/obj/machinery/bodyscanner, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"jii" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"jiw" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/space) -"jiz" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jjg" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"jjA" = ( -/obj/structure/cable{ - d2 = 6; - icon_state = "0-6" - }, -/turf/simulated/floor/plating, -/area/space) -"jjI" = ( -/obj/structure/sign/christmas/lights{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"jjR" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jkb" = ( -/obj/item/device/reagent_scanner/adv, -/obj/structure/closet/alien, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jkj" = ( -/obj/structure/table/darkglass, -/obj/item/device/binoculars, -/obj/item/device/megaphone/super, -/turf/simulated/floor/wood/sif, -/area/space) -"jku" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/shuttle/floor/alien, -/area/space) -"jkv" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"jkz" = ( -/obj/random/humanoidremains, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jkM" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "20" - }, -/turf/template_noop, -/area/space) -"jlz" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/shuttle/floor/white, -/area/space) -"jlB" = ( -/obj/structure/disposalpipe/tagger/partial{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"jlD" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jlZ" = ( -/obj/structure/grille/broken/cult, -/obj/fire, -/turf/simulated/floor/lava, -/area/space) -"jmf" = ( -/obj/effect/weaversilk/wall, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jmm" = ( -/turf/simulated/mineral/crystal_shiny, -/area/space) -"jmn" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/turf/template_noop, -/area/space) -"jmO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jmQ" = ( -/obj/structure/table/steel, -/obj/item/device/starcaster_news{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/toy/eight_ball{ - pixel_x = 5; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jmU" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/blue, -/area/space) -"jnB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jnS" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/obj/machinery/power/apc/super/critical{ - dir = 4; - name = "Alien Energy Hub"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jnZ" = ( -/obj/structure/prop/blackbox, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"joj" = ( -/obj/machinery/flasher{ - id = "procroom1"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/cult, -/area/space) -"jol" = ( -/mob/living/simple_mob/mechanical/hivebot/swarm, -/turf/template_noop, -/area/space) -"jow" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/scalpel/ripper, -/obj/item/weapon/surgical/scalpel/manager, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"joQ" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"joV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"jpj" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor, -/area/space) -"jpq" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/suit/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/clothing/head/helmet/space/void/merc/odst, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/shoes/magboots/adv, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jqt" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/space) -"jqK" = ( -/obj/machinery/mining/drill/loaded, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jrh" = ( -/obj/machinery/flasher{ - id = "auctionroom"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jrj" = ( -/obj/structure/table/standard, -/obj/item/device/starcaster_news{ - pixel_x = 8 - }, -/obj/item/device/starcaster_news{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/simulated/floor/wood, -/area/space) -"jrw" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"jsb" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"jsp" = ( -/obj/machinery/door/airlock/glass_centcom{ - req_one_access = list(67) - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"jsA" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/washing_machine{ - pixel_x = -2; - pixel_y = 18 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jsR" = ( -/mob/living/simple_mob/vore/demon/engorge{ - faction = "cult" - }, -/turf/simulated/floor/gorefloor2, -/area/space) -"jte" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 8 - }, -/obj/random/mob/robotic/hivebot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jtL" = ( -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"jue" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"juf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"juk" = ( -/turf/space, -/area/space) -"jum" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"juq" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"juz" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/borderfloorblack{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jvf" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jvj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jvr" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jvK" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jvS" = ( -/obj/machinery/door/airlock/alien{ - name = "Cell 1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jvT" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor, -/area/space) -"jwd" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jwl" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/captaindouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"jwn" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"jwp" = ( -/obj/structure/fans/hardlight/colorable/abductor, -/obj/machinery/door/airlock/alien{ - name = "Internal Airlock"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jwt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"jwu" = ( -/obj/structure/bed/alien, -/obj/structure/curtain/open/privacy, -/obj/item/weapon/bedsheet/medical, -/turf/simulated/shuttle/floor/white, -/area/space) -"jwv" = ( -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"jwL" = ( -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"jwO" = ( -/obj/structure/table/alien, -/obj/item/weapon/packageWrap, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"jxh" = ( -/obj/structure/disposalpipe/sortjunction/wildcard{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"jxj" = ( -/obj/structure/bed/chair/bay/chair/padded/green, -/turf/simulated/floor/wood, -/area/space) -"jym" = ( -/obj/machinery/button/holosign{ - id = "SP-baropen"; - name = "Open Sign"; - pixel_x = -27; - pixel_y = 5 - }, -/obj/machinery/button/remote/blast_door{ - id = "SP-kitchen"; - name = "Kitchen Shutters Control"; - pixel_x = -27; - pixel_y = -5; - req_access = list(28) - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jzm" = ( -/obj/machinery/vending/tool{ - emagged = 1 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"jzy" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"jzI" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/obj/effect/alien/weeds, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/obj/item/organ/internal/brain/alraune, -/obj/item/organ/internal/eyes/replicant, -/obj/item/weapon/gun/energy/gun/fluff/dominator, -/turf/simulated/floor, -/area/space) -"jzV" = ( -/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"jAi" = ( -/turf/simulated/floor/carpet/oracarpet, -/area/space) -"jAz" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jAA" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/red, -/turf/simulated/floor/wood, -/area/space) -"jBc" = ( -/obj/effect/shadow_wight, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jBk" = ( -/obj/structure/reagent_dispensers/cookingoil, -/turf/template_noop, -/area/space) -"jBB" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jBJ" = ( -/obj/structure/table/darkglass, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/turf/simulated/floor/wood/sif, -/area/space) -"jBY" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"jCf" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/template_noop, -/area/space) -"jCM" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"jCQ" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"jCW" = ( -/obj/structure/largecrate/animal/corgi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"jDr" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "hacked autolathe" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"jEO" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"jFd" = ( -/obj/structure/closet/secure_closet/miner{ - locked = 0 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jFh" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jFt" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/space) -"jFC" = ( -/turf/simulated/floor/outdoors/ice, -/area/space) -"jFN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jGa" = ( -/obj/structure/bed/chair/oldsofa/left, -/turf/simulated/floor/wood, -/area/space) -"jGl" = ( -/obj/structure/table/fancyblack, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"jGU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"jGZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jHo" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/random/mre, -/obj/item/weapon/material/kitchen/utensil/fork{ - pixel_x = 12 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"jHV" = ( -/obj/effect/alien/weeds/node, -/turf/template_noop, -/area/space) -"jIh" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/item/prop/alien/junk, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jIu" = ( -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"jIN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jKi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jKj" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"jKC" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/space) -"jLb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "stargazer_sensor"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "stargazer_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"jLp" = ( -/obj/effect/fancy_shuttle/lifeboat, -/turf/template_noop, -/area/space) -"jLQ" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"jLR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"jMb" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"jMm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jNu" = ( -/obj/random/trash, -/turf/simulated/floor/wood, -/area/space) -"jNB" = ( -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"jNE" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/emergency, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"jNH" = ( -/obj/machinery/biogenerator, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"jPa" = ( -/obj/structure/simple_door/resin, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jPk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/shuttle/floor/alien, -/area/space) -"jPH" = ( -/obj/item/weapon/antag_spawner/syndicate_drone, -/turf/template_noop, -/area/space) -"jPZ" = ( -/obj/machinery/door/airlock/alien{ - name = "Engineering Post"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jQf" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 35 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 22 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"jQH" = ( -/obj/effect/temporary_effect/pulse/microsingulo, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"jRd" = ( -/obj/structure/prop/alien/computer/camera/flipped{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"jRR" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = -32 - }, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/fuzzy, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/suit/iasexy, -/obj/item/clothing/under/sexybunny_white/sexybunny_black, -/obj/item/clothing/under/dress/maid/sexy, -/obj/item/clothing/head/collectable/rabbitears, -/turf/simulated/floor/wood/broken, -/area/space) -"jTz" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "estrella_side_hatch"; - locked = 1; - req_access = null; - req_one_access = null - }, -/obj/machinery/button/remote/airlock{ - dir = 8; - id = "estrella_side_hatch"; - name = "Side Hatch Control"; - pixel_x = -27; - specialfunctions = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/space) -"jTI" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 8; - pixel_x = -6 - }, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"jTP" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"jUj" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jUk" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/space) -"jUL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"jUV" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"jVb" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"jVj" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/kitchen/utensil/spoon, -/turf/simulated/floor/tiled/white, -/area/space) -"jVr" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"jWp" = ( -/obj/machinery/r_n_d/protolathe, -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/floor/purple, -/area/space) -"jWW" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder{ - pixel_x = 10; - pixel_y = 19 - }, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"jXp" = ( -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/turf/simulated/floor, -/area/space) -"jXL" = ( -/obj/structure/closet/secure_closet/freezer/meat{ - pixel_x = 5 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jXO" = ( -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor, -/area/space) -"jXU" = ( -/turf/simulated/floor/tiled/white, -/area/space) -"jXX" = ( -/obj/structure/salvageable/computer, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"jYi" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"jYz" = ( -/obj/trader/capture_crystal/cash, -/turf/template_noop, -/area/space) -"jYU" = ( -/obj/machinery/door/airlock/alien{ - name = "Cryogenics sleepers"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"jZi" = ( -/obj/structure/sign/science, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"jZr" = ( -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"jZC" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/loot_pile/mecha/durand, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"jZW" = ( -/obj/structure/reagent_dispensers, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kax" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"kaP" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kaS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor, -/area/space) -"kaT" = ( -/obj/machinery/optable, -/obj/machinery/oxygen_pump/anesthetic{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kbe" = ( -/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, -/obj/structure/curtain/black, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/space) -"kbl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"kbr" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/machinery/meter, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"kbK" = ( -/obj/item/weapon/soap/nanotrasen, -/obj/item/weapon/soap/nanotrasen, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/soap/deluxe, -/obj/structure/table/steel, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/tiled/freezer, -/area/space) -"kbO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"kbU" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - pixel_x = -10; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/space) -"kbZ" = ( -/obj/mecha/combat/marauder/old, -/turf/template_noop, -/area/space) -"kcn" = ( -/obj/structure/table/alien, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/hand_labeler, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"kcx" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/wood/sif, -/area/space) -"kcO" = ( -/obj/machinery/mecha_part_fabricator/pros, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kcY" = ( -/turf/simulated/shuttle/floor/alien, -/area/space) -"kdx" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kdJ" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_5" - }, -/turf/simulated/floor/tiled, -/area/space) -"kdT" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"kdX" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 17 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kdY" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"keh" = ( -/obj/machinery/door/airlock/alien{ - name = "Meeting hall"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"kei" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"kem" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "estrella_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"keu" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"kev" = ( -/obj/machinery/door/airlock/alien{ - name = "Main Hall"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"keO" = ( -/obj/structure/table/steel, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/wrench, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"keX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kfg" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating/external, -/area/space) -"kfo" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/structure/cryofeed{ - dir = 2; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kfA" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kfB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/decal/remains/xeno, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/shuttle/floor/alien, -/area/space) -"kfJ" = ( -/obj/vehicle/train/engine/quadbike/built{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"khd" = ( -/obj/structure/curtain/open/privacy, -/turf/simulated/shuttle/floor/purple, -/area/space) -"khq" = ( -/obj/machinery/vending/boozeomat{ - pixel_y = 25; - density = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"khA" = ( -/turf/simulated/wall/cult, -/area/space) -"kit" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"kiB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kiR" = ( -/obj/machinery/light{ - layer = 3 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kiX" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kjk" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/gibs/robot, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"kjt" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_x = -3; - pixel_y = -1 - }, -/obj/item/weapon/towel{ - color = "#ff0000"; - name = "red towel" - }, -/obj/item/weapon/towel{ - color = "#ff0000"; - name = "red towel" - }, -/obj/item/weapon/towel{ - color = "#FF8C00"; - name = "orange towel"; - pixel_x = -2; - pixel_y = -4 - }, -/obj/item/weapon/towel{ - color = "#FF8C00"; - name = "orange towel"; - pixel_x = -2; - pixel_y = -4 - }, -/obj/item/weapon/towel{ - color = "#90ee90"; - name = "green towel" - }, -/obj/item/weapon/towel{ - color = "#90ee90"; - name = "green towel" - }, -/obj/item/weapon/towel{ - color = "#b5651d"; - name = "brown towel" - }, -/obj/item/weapon/towel{ - color = "#b5651d"; - name = "brown towel" - }, -/obj/item/weapon/towel, -/obj/item/weapon/towel, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/item/weapon/tape_roll{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/tape_roll{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/device/taperecorder, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/folder/yellow, -/turf/simulated/floor/tiled/freezer, -/area/space) -"kjG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kkq" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kkr" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/coin/diamond, -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/wood, -/area/space) -"kkv" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kkA" = ( -/obj/structure/flora/rocks1, -/turf/simulated/floor/beach/sand, -/area/space) -"kkC" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"kkQ" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "baby_mammoth_outer"; - locked = 1; - name = "External Access" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "baby_mammoth"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "stargazer_blast"; - layer = 2.5; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"klF" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor, -/area/space) -"klQ" = ( -/obj/effect/landmark/mcguffin_spawner, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kmm" = ( -/turf/simulated/shuttle/floor/black, -/area/space) -"kmR" = ( -/obj/machinery/power/shield_generator/charged, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"knf" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"knl" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kns" = ( -/obj/trader/general, -/turf/template_noop, -/area/space) -"kop" = ( -/obj/structure/table/darkglass, -/obj/item/device/gps, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"kox" = ( -/obj/machinery/vending/tool{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"koI" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/plating, -/area/space) -"kpi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kpm" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"kpG" = ( -/obj/structure/table/alien/blue, -/obj/item/clothing/under/psysuit, -/obj/item/weapon/cell/device/weapon/recharge/alien/omni, -/obj/item/weapon/circuitboard/mecha/imperion/peripherals, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"kqa" = ( -/obj/structure/prop/alien/computer{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kqb" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "atriumwest" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"kqd" = ( -/obj/random/crate, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kqA" = ( -/obj/structure/catwalk, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor, -/area/space) -"krp" = ( -/obj/structure/table/reinforced, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/kitchen/east, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/shuttle/floor/black, -/area/space) -"krC" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"krO" = ( -/obj/effect/zone_divider, -/turf/template_noop, -/area/survivalpod) -"krQ" = ( -/obj/structure/filingcabinet/medical, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"krU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"kts" = ( -/obj/mecha/combat/phazon/scree, -/turf/template_noop, -/area/space) -"kty" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ktB" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/mineral/equipment_vendor{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/plating, -/area/space) -"ktO" = ( -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/turf/simulated/floor, -/area/space) -"kua" = ( -/obj/structure/railing/grey, -/turf/simulated/floor/glass/reinforced, -/area/space) -"kup" = ( -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"kvb" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/alien/blue, -/obj/item/weapon/paper/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kve" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"kvh" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "7" - }, -/turf/template_noop, -/area/space) -"kvw" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kvK" = ( -/obj/machinery/vending/emergencyfood/filled, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kwm" = ( -/obj/machinery/disperser/back, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kwy" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "14" - }, -/turf/template_noop, -/area/template_noop) -"kwC" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"kxa" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/storage/belt/utility, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/device/healthanalyzer, -/obj/item/device/healthanalyzer, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plastic{ - max_amount = 25 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/storage/backpack/dufflebag/sci, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kxq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/shuttle/floor/white, -/area/space) -"kxI" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/browndouble, -/turf/simulated/floor/wood, -/area/space) -"kyo" = ( -/obj/effect/map_effect/portal/line/side_b{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kyO" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/flasher{ - id = "exaroom3"; - name = "Floor mounted flash" - }, -/turf/simulated/floor, -/area/space) -"kzd" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/space) -"kze" = ( -/obj/structure/table/rack/shelf/steel, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"kzt" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"kAj" = ( -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"kAJ" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kAU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/phoronrglass, -/turf/simulated/floor, -/area/space) -"kBd" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 2 - }, -/turf/simulated/floor/greengrid, -/area/space) -"kBf" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/circular_saw/alien, -/obj/item/weapon/surgical/scalpel/alien{ - pixel_y = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"kBt" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "11" - }, -/turf/template_noop, -/area/space) -"kCP" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"kDb" = ( -/obj/machinery/icecream_vat, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"kDq" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kDs" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"kDA" = ( -/obj/structure/flora/log2, -/turf/simulated/floor/beach/water, -/area/space) -"kDZ" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"kET" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 10; - icon_state = "32-10" - }, -/turf/simulated/floor/plating, -/area/space) -"kFN" = ( -/obj/effect/map_effect/portal/line/side_b{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kFS" = ( -/obj/structure/table/standard, -/obj/item/device/tape, -/turf/simulated/floor/tiled/dark, -/area/space) -"kGL" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kHs" = ( -/obj/structure/largecrate/animal/dangerous, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"kHz" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/floor/tiled/freezer, -/area/space) -"kHG" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"kHK" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/toy/plushie/kitten, -/obj/item/toy/plushie/grey_cat, -/obj/item/toy/plushie/orange_cat, -/obj/item/toy/plushie/borgplushie/scrubpuppy, -/obj/item/toy/plushie/black_fox, -/obj/item/toy/plushie, -/obj/item/toy/plushie/corgi, -/obj/item/toy/plushie/crimson_fox, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = -32 - }, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/carpet/turcarpet, -/area/space) -"kHQ" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/floor/black, -/area/space) -"kHR" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kHU" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"kIE" = ( -/obj/machinery/button/windowtint{ - id = "exam3"; - pixel_y = 24 - }, -/turf/simulated/floor, -/area/space) -"kII" = ( -/obj/structure/table/hardwoodtable, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"kIL" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"kIV" = ( -/obj/machinery/computer/ship/navigation/telescreen, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"kJg" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"kJK" = ( -/obj/structure/outcrop/diamond, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kJT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor/alien, -/area/space) -"kJX" = ( -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"kJZ" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "off_8" - }, -/turf/simulated/floor/tiled, -/area/space) -"kKb" = ( -/obj/structure/tubes, -/obj/machinery/computer/rdservercontrol{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kKe" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/briefcase/inflatable{ - pixel_y = 3 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"kKD" = ( -/obj/machinery/the_singularitygen/tesla, -/turf/simulated/floor/airless, -/area/space) -"kKJ" = ( -/obj/structure/bed/alien, -/obj/effect/decal/remains/xeno, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"kKK" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"kKO" = ( -/obj/machinery/optable, -/obj/machinery/oxygen_pump/anesthetic{ - pixel_y = 32 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/space) -"kLa" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"kLk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kLw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kLO" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"kMR" = ( -/obj/machinery/atmospherics/pipe/cap/hidden, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"kNc" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/circular_saw/alien, -/obj/item/weapon/surgical/scalpel/alien{ - pixel_y = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"kNo" = ( -/obj/machinery/gear_dispenser/suit, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kNY" = ( -/obj/effect/forcefield/swarm, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kOg" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Translocate-R-US" - }, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/gps/syndie, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/perfect_tele/alien, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, -/turf/simulated/floor/wood/sif, -/area/space) -"kOn" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1; - regulate_mode = 0; - unlocked = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kOo" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/prop/alien/computer{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kOr" = ( -/obj/machinery/computer/security/abductor{ - icon_screen = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kOH" = ( -/turf/simulated/floor/tiled/techmaint, -/area/space) -"kOQ" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/item/device/flash, -/turf/simulated/floor/wood, -/area/space) -"kPa" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"kPT" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/space) -"kQn" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/blue, -/area/space) -"kQY" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"kRn" = ( -/obj/structure/fuel_port{ - pixel_y = -28 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"kRA" = ( -/obj/effect/decal/cleanable/blood/gibs{ - color = "red"; - icon_state = "gib1_flesh" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kRY" = ( -/obj/structure/particle_accelerator/particle_emitter/right, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"kSb" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kSc" = ( -/obj/vehicle/boat{ - dir = 8 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"kSd" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster, -/obj/item/mecha_parts/mecha_equipment/repair_droid, -/obj/item/mecha_parts/mecha_equipment/tool/passenger, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang, -/turf/simulated/floor/plating/external, -/area/space) -"kSp" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/combat, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/radio/emergency, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/device/survivalcapsule, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/bluespaceradio, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/device/binoculars, -/obj/item/device/perfect_tele, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/nutriment, -/obj/item/weapon/storage/pill_bottle/iron, -/obj/item/weapon/storage/pill_bottle/arithrazine, -/obj/item/weapon/storage/pill_bottle/corophizine, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kSC" = ( -/turf/simulated/shuttle/wall{ - base_state = "dark"; - icon = 'icons/turf/shuttle_dark.dmi'; - icon_state = "dark" - }, -/area/space) -"kSU" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kTn" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/green, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kTP" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 6; - icon_state = "2-6" - }, -/turf/simulated/floor/plating, -/area/space) -"kTV" = ( -/obj/structure/cable{ - d2 = 10; - icon_state = "9-10"; - d1 = 9 - }, -/turf/simulated/floor/plating, -/area/space) -"kUh" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"kUz" = ( -/obj/structure/trash_pile, -/turf/template_noop, -/area/space) -"kUF" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kUS" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/space) -"kVP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Combat Information Center" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"kVU" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 4; - pixel_x = -3 - }, -/turf/simulated/floor, -/area/space) -"kWs" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/vending/engivend, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kWE" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"kWH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"kWI" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "17" - }, -/turf/template_noop, -/area/space) -"kWU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"kYl" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/obj/item/weapon/storage/box/donut{ - pixel_y = -4 - }, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/glasses/cocktail, -/obj/item/weapon/storage/box/glasses/wine, -/obj/item/weapon/storage/box/glasses/shot, -/obj/item/weapon/storage/box/glasses/meta/metapint, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"kYo" = ( -/obj/machinery/light/small/emergency, -/turf/simulated/floor, -/area/space) -"kYz" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 3 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"kYH" = ( -/obj/machinery/door/airlock/alien{ - name = "Auxiliar Storage"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"kYP" = ( -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"laj" = ( -/obj/machinery/computer/ship/helm, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "stargazer_blast"; - name = "remote blast shielding control"; - pixel_x = -26; - pixel_y = -1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"laK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"lba" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/clipboard, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"lbg" = ( -/obj/structure/fans/tiny, -/turf/simulated/shuttle/plating, -/area/space) -"lbt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/filingcabinet/medical, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"lbO" = ( -/obj/machinery/conveyor, -/turf/simulated/shuttle/plating, -/area/space) -"lbZ" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/weapon/reagent_containers/dropper, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-kitchen"; - name = "Avalon Kitchen Shutters Control"; - pixel_y = -22; - req_access = list(28); - pixel_x = -6 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"lcj" = ( -/obj/structure/disposalpipe/up{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"lco" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/space) -"lcp" = ( -/turf/simulated/shuttle/wall/flock, -/area/space) -"lcC" = ( -/obj/machinery/washing_machine, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ldG" = ( -/obj/structure/sign/double/maltesefalcon/right, -/turf/simulated/floor/tiled, -/area/space) -"leh" = ( -/obj/structure/table/alien, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lel" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"lff" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"lfg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"lfo" = ( -/obj/machinery/appliance/cooker/fryer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lfY" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"lfZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"lgf" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/brown, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lha" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"lhf" = ( -/obj/effect/phase_shift, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lht" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"lhC" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, -/turf/simulated/floor/wood, -/area/space) -"lhE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"lhP" = ( -/obj/trader, -/turf/template_noop, -/area/space) -"liK" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam1" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"lkm" = ( -/obj/structure/table/darkglass, -/obj/machinery/computer/med_data/laptop{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"lkL" = ( -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"llr" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"llF" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/blood/gibs/robot, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"lmE" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"lmI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"lmJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lmQ" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/locked/frontier/carbine{ - pixel_y = 7 - }, -/obj/item/weapon/gun/energy/locked/frontier/carbine{ - pixel_y = -4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"lmU" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"lnu" = ( -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/blue, -/area/space) -"loV" = ( -/obj/structure/flora/tree/jungle_small, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lpZ" = ( -/obj/item/weapon/antag_spawner/syndicate_drone/mechanist, -/turf/template_noop, -/area/space) -"lqf" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"lqj" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lqt" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lqS" = ( -/obj/machinery/computer/ship/navigation, -/turf/simulated/shuttle/floor/black, -/area/space) -"lqT" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/space) -"lrA" = ( -/obj/machinery/computer/teleporter{ - dir = 8; - emagged = 1; - pixel_x = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"lrY" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lsd" = ( -/obj/random/maintenance, -/turf/simulated/floor, -/area/space) -"lsn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"lsA" = ( -/obj/machinery/computer/crew{ - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lsS" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet/walllocker_double/east, -/turf/simulated/floor/plating, -/area/space) -"lti" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/machinery/suspension_gen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"ltp" = ( -/obj/structure/window/plastitanium, -/turf/simulated/floor/tiled/white, -/area/space) -"ltq" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/shuttle/wall/hard_corner, -/area/space) -"ltC" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"ltH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"lua" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 8; - regulate_mode = 0; - unlocked = 1 - }, -/turf/simulated/floor/plating/external, -/area/space) -"luf" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lup" = ( -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"luC" = ( -/obj/item/sniper_rifle_part/stock, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"luV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lvn" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lvJ" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"lwk" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "27" - }, -/turf/template_noop, -/area/space) -"lwq" = ( -/turf/simulated/floor/tiled/freezer, -/area/space) -"lxu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 2"; - id_tag = "Avalon-room2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lxC" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"lxK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"lye" = ( -/obj/machinery/gateway/brass{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lyy" = ( -/obj/structure/bed/alien, -/obj/effect/decal/remains/xeno, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"lyD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"lyP" = ( -/obj/structure/prop/alien/computer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lzd" = ( -/obj/structure/sink{ - pixel_y = 14 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"lzC" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"lzH" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lzM" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"lzT" = ( -/obj/structure/toilet{ - pixel_y = 12 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"lAa" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"lAM" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/command{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"lAS" = ( -/obj/structure/bed/chair/wood, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/space) -"lBD" = ( -/obj/structure/prop/machine/comm_tower/starts_on, -/turf/template_noop, -/area/space) -"lBE" = ( -/obj/machinery/light, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"lBG" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/bonegel, -/obj/item/weapon/surgical/bone_clamp/alien, -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"lBV" = ( -/obj/structure/plasticflaps/mining, -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"lCt" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/clothing/under/psysuit, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lCB" = ( -/turf/simulated/wall/sandstone, -/area/space) -"lCG" = ( -/obj/item/weapon/material/shard{ - pixel_x = 6 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lCR" = ( -/obj/machinery/feeder, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"lCZ" = ( -/obj/machinery/autolathe, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lDj" = ( -/obj/structure/catwalk, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor, -/area/space) -"lDp" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/item/clothing/under/psysuit, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lDz" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lDK" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 8; - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"lEe" = ( -/obj/structure/reagent_dispensers/he3, -/turf/template_noop, -/area/space) -"lEk" = ( -/obj/machinery/door/airlock/maintenance/cargo, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"lEy" = ( -/mob/living/simple_mob/animal/space/alien, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"lEz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"lEQ" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"lFi" = ( -/obj/structure/prop/blackbox/xenofrigate, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"lGg" = ( -/mob/living/simple_mob/animal/space/alien/sentinel, -/obj/effect/alien/weeds/node, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"lGj" = ( -/obj/structure/bed/chair, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lGr" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/floor/tiled, -/area/space) -"lGN" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "6" - }, -/turf/template_noop, -/area/space) -"lHu" = ( -/obj/machinery/mineral/processing_unit, -/turf/simulated/shuttle/plating, -/area/space) -"lHx" = ( -/obj/structure/particle_accelerator/power_box{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lHP" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"lIA" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/wood/sif, -/area/space) -"lJh" = ( -/obj/item/modular_computer/tablet/preset/custom_loadout/elite, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"lJP" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/wall/rshull, -/area/space) -"lKh" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam5" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"lKj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"lKw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lLC" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor, -/area/space) -"lMf" = ( -/obj/structure/table/standard, -/obj/item/device/defib_kit/loaded, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 5 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/space) -"lMx" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"lMD" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"lMG" = ( -/obj/machinery/power/port_gen/pacman, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"lMK" = ( -/obj/machinery/chemical_dispenser/full{ - pixel_y = 5 - }, -/obj/structure/table/darkglass, -/turf/simulated/shuttle/floor/purple, -/area/space) -"lMV" = ( -/obj/random/medical/pillbottle, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lMZ" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/space) -"lOd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"lOq" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/space) -"lOK" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 4; - pixel_x = -3 - }, -/turf/template_noop, -/area/space) -"lPe" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"lPB" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/mecha_equipment/combat_shield, -/obj/item/mecha_parts/mecha_equipment/repair_droid, -/obj/item/mecha_parts/mecha_equipment/tool/sleeper, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged, -/turf/simulated/floor/plating/external, -/area/space) -"lPZ" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lQs" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/shuttle/floor/alien, -/area/space) -"lQF" = ( -/obj/random/cargopod, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lRl" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_state = "dispenser"; - name = "Drug-Dispenser"; - req_access = list(777) - }, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/device/sleevemate, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/turf/simulated/floor, -/area/space) -"lRJ" = ( -/obj/item/weapon/newspaper, -/obj/item/device/tape, -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"lSp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"lSs" = ( -/obj/machinery/button/windowtint{ - id = "atriumwest"; - pixel_x = 23 - }, -/obj/machinery/button/flasher{ - id = "atriumflash"; - pixel_x = 30 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"lSB" = ( -/obj/structure/fans/tiny, -/turf/template_noop, -/area/space) -"lSC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"lSF" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lSH" = ( -/obj/random/firstaid, -/turf/template_noop, -/area/space) -"lST" = ( -/obj/machinery/vending/deluxe_boozeomat{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"lTt" = ( -/obj/machinery/r_n_d/server/robotics, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"lTz" = ( -/obj/effect/fancy_shuttle/tourbus, -/turf/template_noop, -/area/space) -"lTU" = ( -/obj/machinery/fusion_fuel_compressor, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"lUo" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lUp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/grounding_rod/pre_mapped{ - item_state = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lUq" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/storage/victcoat, -/obj/item/clothing/suit/storage/victcoat/red, -/obj/item/clothing/under/yw/victsuit/victdress/red, -/obj/item/clothing/under/yw/victsuit/victdress, -/obj/item/clothing/under/dress/blacktango, -/obj/item/clothing/under/dress/blacktango/alt, -/obj/item/clothing/under/dress/black_corset, -/obj/item/clothing/under/dress/cropdress, -/obj/item/clothing/under/dress/flamenco, -/obj/item/clothing/under/dress/festivedress, -/obj/item/clothing/under/dress/lilacdress, -/obj/item/clothing/under/dress/redeveninggown, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/wedding/bride_red, -/obj/item/clothing/under/wedding/bride_orange, -/obj/item/clothing/under/wedding/bride_white, -/obj/item/clothing/under/cheongsam/purple, -/obj/item/clothing/under/cheongsam/darkblue, -/obj/item/clothing/under/cheongsam/black, -/obj/item/clothing/suit/iasexy, -/obj/item/clothing/suit/johnny_coat, -/obj/item/clothing/suit/poncho, -/obj/item/weapon/storage/box/fluff/swimsuit/blue, -/obj/item/clothing/under/swimsuit/fluff/penelope, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lUy" = ( -/obj/item/weapon/stool/baystool/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"lVa" = ( -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/medical, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/security, -/obj/random/maintenance/cargo, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/structure/closet/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lVk" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled, -/area/space) -"lVm" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/deliveryChute{ - dir = 8 - }, -/obj/structure/plasticflaps/mining, -/turf/simulated/floor, -/area/space) -"lVy" = ( -/turf/simulated/gore, -/area/space) -"lVM" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"lWh" = ( -/obj/structure/ledge, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lWi" = ( -/obj/effect/map_effect/beam_point/end, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lWt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"lWL" = ( -/obj/machinery/door/blast/multi_tile/four_tile_hor_sec, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"lWT" = ( -/obj/effect/landmark/hidden_level, -/turf/template_noop, -/area/template_noop) -"lXd" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/alien/blue, -/obj/item/prop/alien/junk, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lXh" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer, -/turf/simulated/shuttle/floor/black, -/area/space) -"lXn" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor, -/area/space) -"lXN" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/space) -"lXW" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"lYb" = ( -/obj/machinery/light/small/readylight, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"lYn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/emblem/nt1, -/turf/simulated/floor/tiled/dark, -/area/space) -"lYv" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/machinery/light, -/turf/simulated/shuttle/floor/purple, -/area/space) -"lYH" = ( -/obj/structure/cable{ - d2 = 9; - icon_state = "0-9" - }, -/turf/simulated/floor/plating, -/area/space) -"lZV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"lZY" = ( -/obj/item/wheelchair, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"mag" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/carpet/oracarpet, -/area/space) -"map" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/computer/rdservercontrol, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"mat" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4; - id_tag = "frontgate" - }, -/turf/simulated/floor/tiled, -/area/space) -"maB" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/item/weapon/gun/energy/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"maX" = ( -/obj/structure/bed/chair/bay/comfy/red{ - dir = 8 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mbt" = ( -/obj/item/weapon/material/shard/phoron, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"mbv" = ( -/obj/structure/toilet, -/obj/machinery/light/small/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"mby" = ( -/obj/item/weapon/bedsheet/piratedouble, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"mcg" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/command{ - name = "Boardroom" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mcp" = ( -/obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mcL" = ( -/obj/effect/shuttle_landmark{ - base_area = /area/expoutpost/hangarone; - base_turf = /turf/simulated/floor/reinforced; - docking_controller = "exphangar_1"; - landmark_tag = "exphangar_1"; - name = "Exploration Carrier Hangar One" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/shuttle/plating, -/area/space) -"mcP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mdx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 5; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"meD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"meS" = ( -/obj/machinery/light, -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"mfl" = ( -/obj/structure/toilet{ - dir = 8; - pixel_x = 9 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"mfy" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Dorm" - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"mfO" = ( -/obj/effect/ctrigger, -/turf/template_noop, -/area/space) -"mfQ" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain/black, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mga" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"mgb" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"mgg" = ( -/obj/structure/salvageable/autolathe, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mgN" = ( -/obj/structure/disposalpipe/up{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"mgQ" = ( -/obj/structure/ore_box, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"mgU" = ( -/obj/machinery/door/airlock/alien{ - id_tag = "abdorm2"; - name = "Dorm 2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mhu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mhD" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"miz" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/washing_machine, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"miB" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/cult, -/area/space) -"miF" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = -30 - }, -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"miN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/space) -"miX" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/button/windowtint{ - id = "atriumbath"; - pixel_y = -23 - }, -/obj/machinery/button/flasher{ - id = "exaroom1"; - pixel_y = -31 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mjj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"mjm" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"mjC" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 8; - icon_state = "32-8" - }, -/turf/simulated/floor/plating, -/area/space) -"mjV" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"mjW" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor, -/area/space) -"mkx" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/condiment/spacespice, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/milk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mkA" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"mkS" = ( -/obj/structure/table/fancyblack, -/obj/item/toy/eight_ball, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"mkW" = ( -/obj/item/weapon/storage/backpack/dufflebag/emt, -/turf/template_noop, -/area/space) -"mlj" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"mlA" = ( -/obj/structure/bed/chair/bay/comfy/black{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mlK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mlL" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mlX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/space) -"mmd" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"mml" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"mmu" = ( -/obj/structure/table/standard, -/obj/item/toy/tennis/yellow, -/turf/simulated/floor/wood, -/area/space) -"mmw" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"mmL" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mmN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"mnd" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/clipboard, -/obj/item/toy/figure/bartender, -/obj/item/weapon/storage/fancy/cigar, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"mnz" = ( -/obj/structure/window/reinforced/polarized{ - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/space) -"mnP" = ( -/obj/machinery/door/airlock/alien{ - name = "AI room"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mnZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - dir = 4; - name = "Tesla Engine" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"moe" = ( -/obj/structure/table/darkglass, -/turf/simulated/floor/wood/sif, -/area/space) -"moi" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/item/weapon/tape_roll, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mom" = ( -/obj/random/obstruction, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mot" = ( -/obj/structure/closet/walllocker{ - dir = 8; - pixel_x = -32 - }, -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"moD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"mpm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating/external, -/area/space) -"mpo" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/reddouble, -/turf/simulated/floor/carpet, -/area/space) -"mpF" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors{ - dir = 8 - }, -/obj/structure/sign/science{ - pixel_x = 32 - }, -/turf/template_noop, -/area/space) -"mpU" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mqh" = ( -/obj/machinery/power/port_gen/pacman/super, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/bluegrid, -/area/space) -"mqx" = ( -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"mqJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/tiled/dark, -/area/space) -"mro" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"msl" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"msn" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 6; - icon_state = "32-6" - }, -/turf/simulated/floor/plating, -/area/space) -"msF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room6"; - name = "Room 6 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"msL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"msS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"msV" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"msY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mto" = ( -/obj/machinery/gear_dispenser/custom, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mtv" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"mue" = ( -/obj/item/device/gps/internal/poi, -/turf/simulated/shuttle/wall/alien, -/area/space) -"muk" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"muz" = ( -/obj/machinery/vending/cola{ - dir = 8; - pixel_x = 5 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/space) -"muQ" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/space) -"mvi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"mvE" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/space) -"mvK" = ( -/obj/structure/flora/ausbushes, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mvY" = ( -/obj/structure/disposalpipe/down{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"mwk" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dispenser/oxygen, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"mwm" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"mwT" = ( -/obj/machinery/mineral/unloading_machine, -/obj/machinery/light, -/turf/simulated/shuttle/plating, -/area/space) -"mxf" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 1 - }, -/obj/item/trash/material/metal, -/turf/simulated/floor/plating, -/area/space) -"mxx" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"mxB" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"mxI" = ( -/obj/structure/disposalpipe/sortjunction/untagged{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"mxL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"mxN" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mxW" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "ID-Mart" - }, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/encryptionkey/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/device/radio/headset/syndicate, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - access = list(777); - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/turf/simulated/floor/wood/sif, -/area/space) -"myg" = ( -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/survivalpod) -"myA" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"myT" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/space) -"mza" = ( -/obj/effect/alien/weeds, -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"mzj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mzk" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Bridge" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mzx" = ( -/obj/structure/table/survival_pod, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mzH" = ( -/obj/structure/fuel_port{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mAm" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"mAr" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mAC" = ( -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/turf/simulated/floor/wood/sif, -/area/space) -"mAD" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"mAJ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/power/smes/buildable/power_shuttle, -/obj/structure/cable/green, -/turf/simulated/shuttle/plating, -/area/space) -"mAS" = ( -/obj/effect/floor_decal/emblem/nt2, -/turf/simulated/floor/tiled/dark, -/area/space) -"mAZ" = ( -/obj/structure/loot_pile/maint, -/turf/simulated/floor/plating, -/area/space) -"mBi" = ( -/obj/structure/cliff/automatic/ramp, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mBm" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mBQ" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/emitter/gyrotron/anchored{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mBV" = ( -/obj/effect/gibspawner/robot, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"mCd" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mCh" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/obj/machinery/light/small/emergency/flicker{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"mCm" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_1" - }, -/turf/simulated/floor/tiled, -/area/space) -"mCp" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"mCE" = ( -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"mCI" = ( -/obj/structure/particle_accelerator/end_cap, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mCJ" = ( -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 24; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"mCR" = ( -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/wood/sif/broken, -/area/space) -"mCY" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/table/darkglass, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/gps, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/turf/simulated/shuttle/floor/black, -/area/space) -"mDa" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "atriumsouth" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mDJ" = ( -/obj/structure/disposalpipe/sortjunction/untagged{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"mDM" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mEw" = ( -/obj/machinery/light/small/readylight{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"mEI" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6, -/turf/simulated/floor/tiled/monotile, -/area/space) -"mEW" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "screen"; - layer = 4; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/space) -"mFb" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mFU" = ( -/obj/structure/window/plastitanium/full, -/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/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "baby_mammoth_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"mGs" = ( -/obj/machinery/vending/fitness{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mGC" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"mGE" = ( -/obj/machinery/cryopod, -/obj/structure/catwalk, -/turf/simulated/floor/bluegrid, -/area/space) -"mHn" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/blood/gibs/robot, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"mHx" = ( -/obj/machinery/power/generator{ - anchored = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"mHG" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/freezer, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"mHN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/gibspawner/robot, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"mHO" = ( -/obj/structure/window/reinforced/survival_pod, -/turf/simulated/shuttle/floor/black, -/area/space) -"mIl" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"mIu" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/space) -"mIA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/obj/fiftyspawner/phoronrglass, -/turf/simulated/floor, -/area/space) -"mIV" = ( -/obj/effect/effect/smoke/elemental, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mJw" = ( -/obj/structure/flora/rocks2, -/turf/simulated/floor/beach/sand, -/area/space) -"mJK" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian, -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"mJN" = ( -/obj/structure/table/standard, -/obj/item/weapon/deck/cards, -/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/space) -"mKI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/meter, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "ursula_sensor"; - pixel_y = 28 - }, -/turf/simulated/shuttle/plating, -/area/space) -"mKV" = ( -/obj/structure/cable/blue{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/space) -"mLk" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - name = "Avalon Hangar Blast Door"; - id = "Avalon-hangar" - }, -/turf/simulated/floor/reinforced, -/area/space) -"mLq" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "fridge_sci"; - icon_contents = "chem"; - icon_state = "fridge_sci"; - name = "Advanced storage"; - pixel_y = 0 - }, -/obj/item/weapon/handcuffs, -/obj/item/weapon/handcuffs, -/obj/item/weapon/handcuffs/legcuffs/bola, -/obj/item/weapon/handcuffs/legcuffs/bola, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/device/chameleon, -/obj/item/device/chameleon, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/spacecash/ewallet{ - worth = 750 - }, -/obj/item/weapon/spacecash/ewallet{ - worth = 750 - }, -/obj/item/weapon/card/id/syndicate, -/obj/item/weapon/card/id/syndicate, -/obj/item/weapon/implantcase/explosive, -/obj/item/weapon/implantcase/explosive, -/obj/item/device/pda/syndicate, -/obj/item/device/pda/syndicate, -/turf/template_noop, -/area/space) -"mLs" = ( -/obj/structure/bed/chair/bay/comfy/teal, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"mLT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor, -/area/space) -"mNs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mNJ" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/floor/tiled/white, -/area/space) -"mNQ" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand9" - }, -/area/space) -"mNT" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "31" - }, -/turf/template_noop, -/area/space) -"mOw" = ( -/obj/effect/map_effect/portal/line/side_b{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mPl" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/structure/prop/alien/computer/camera/flipped, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mPo" = ( -/obj/random/maintenance/engineering, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"mPA" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"mPD" = ( -/obj/structure/sign/atmos/co2, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mPQ" = ( -/mob/living/simple_mob/vore/demon/covern{ - faction = "cult" - }, -/turf/simulated/floor/cult, -/area/space) -"mQa" = ( -/obj/effect/decal/cleanable/blood/gibs/robot, -/obj/effect/decal/cleanable/molten_item, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"mQe" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"mQM" = ( -/obj/structure/prop/alien/power, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mQW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mQY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"mRg" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/button/flasher{ - id = "exaroom1"; - pixel_y = -31 - }, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mRu" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"mRF" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mRJ" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon CIC Blast Door"; - id = "Avalon-cic" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"mSn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/item/device/radio/intercom{ - dir = 8; - name = "Station Intercom (General)"; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mSo" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mSC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mTM" = ( -/obj/structure/bed/chair/bay/shuttle, -/turf/simulated/shuttle/floor/black, -/area/space) -"mVh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-cic"; - name = "Avalon CIC Blast Doors Control"; - pixel_y = 20; - req_access = list(28); - pixel_x = 18 - }, -/turf/simulated/floor/tiled/neutral, -/area/space) -"mVw" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "stargazer_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"mVA" = ( -/obj/structure/stairs/bottom{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mVO" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"mVU" = ( -/obj/machinery/smartfridge/drying_rack{ - pixel_x = 9 - }, -/obj/machinery/smartfridge/drying_rack{ - pixel_x = -8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"mVX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/cosmos, -/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"mWa" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/turf/simulated/wall/rshull, -/area/space) -"mWr" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mWF" = ( -/obj/machinery/appliance/cooker/grill, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"mWQ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"mXf" = ( -/obj/machinery/meter, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"mXT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor, -/area/space) -"mYh" = ( -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/turf/simulated/floor/plating, -/area/space) -"mYm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"mYB" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"mYJ" = ( -/obj/machinery/power/port_gen/pacman, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mYY" = ( -/turf/simulated/floor/outdoors/dirt, -/area/space) -"mZk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"mZn" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ - pixel_x = 1; - pixel_y = 15 - }, -/obj/machinery/recharger{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/pizzavoucher{ - pixel_x = 7; - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"mZt" = ( -/obj/structure/cult/tome, -/turf/simulated/floor/cult, -/area/space) -"mZO" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"mZS" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"naF" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"naM" = ( -/turf/simulated/wall, -/area/space) -"nbj" = ( -/obj/random/handgun/sec, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nbm" = ( -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nbu" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/plasticflaps/mining, -/turf/simulated/floor, -/area/space) -"nbx" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand4" - }, -/area/space) -"nbA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"nbL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"nbM" = ( -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"nbU" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "estrella_inner"; - locked = 1; - name = "Internal Access" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/shuttle/plating, -/area/space) -"nch" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/space) -"ncq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/meter, -/obj/machinery/access_button{ - pixel_x = 26; - pixel_y = 24; - name = "exterior access button"; - master_tag = "Avalon_engine_airlock" - }, -/turf/simulated/floor, -/area/space) -"ndi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"ndQ" = ( -/obj/item/supply_beacon, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"neg" = ( -/obj/structure/largecrate/animal/pred, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"neH" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/vending/medical{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"neP" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nfM" = ( -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"nfZ" = ( -/obj/structure/disposalpipe/down{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"ngF" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/reinforced, -/area/space) -"ngN" = ( -/obj/structure/bed/chair/bay/chair/padded/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nhf" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/space) -"nhU" = ( -/obj/structure/bed/chair/sofa/left/black{ - dir = 2 - }, -/turf/simulated/floor/wood, -/area/space) -"niu" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"njw" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Hydro" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Hydro" - }, -/obj/structure/grille/rustic, -/obj/structure/window/reinforced/polarized/full{ - id = "SP-Hydro" - }, -/turf/simulated/floor/plating, -/area/space) -"nkz" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"nkH" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/space) -"nlE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nlJ" = ( -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Portside Upper Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"nlN" = ( -/obj/structure/particle_accelerator/end_cap{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nmu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/the_singularitygen/tesla, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nmI" = ( -/obj/structure/urinal{ - dir = 4; - pixel_x = -31; - pixel_y = 0 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/space) -"nmR" = ( -/obj/machinery/disposal/deliveryChute, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/plasticflaps/mining, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nmZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"nnQ" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/space) -"nnV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"nod" = ( -/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"noS" = ( -/obj/structure/cliff/automatic{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"npD" = ( -/obj/machinery/light/poi, -/turf/simulated/floor, -/area/space) -"npE" = ( -/obj/machinery/button/flasher{ - id = "procroom2"; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"npK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"npL" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam3" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"npX" = ( -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"nro" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"nrV" = ( -/obj/machinery/light/small, -/obj/item/weapon/ore/diamond, -/obj/structure/sign/goldenplaque{ - desc = "Done No Harm."; - name = "Best Doctor 2552"; - pixel_y = -32 - }, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"nsk" = ( -/obj/machinery/door/airlock/alien/blue/locked, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ntP" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"ntZ" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "8" - }, -/turf/template_noop, -/area/space) -"nuu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nuR" = ( -/obj/machinery/door/airlock/glass_centcom{ - req_one_access = list(67) - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"nuT" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_4" - }, -/turf/simulated/floor/tiled, -/area/space) -"nuW" = ( -/obj/machinery/mineral/equipment_vendor/survey, -/turf/simulated/shuttle/floor/purple, -/area/space) -"nvt" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/space) -"nwc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/mech_recharger, -/turf/simulated/shuttle/plating, -/area/space) -"nwo" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, -/obj/item/weapon/storage/box/freezer, -/obj/item/weapon/storage/box/freezer, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/defib_kit/loaded, -/obj/item/device/defib_kit/loaded, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"nwr" = ( -/obj/machinery/honey_extractor, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"nwG" = ( -/turf/template_noop, -/area/space) -"nwN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"nwX" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "16" - }, -/turf/template_noop, -/area/space) -"nxc" = ( -/obj/machinery/door/airlock/angled_tgmc/secure{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"nxw" = ( -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/machinery/computer/med_data{ - dir = 4 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"nxx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"nxJ" = ( -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor, -/area/space) -"nxX" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/simulated/shuttle/floor/purple, -/area/space) -"nyc" = ( -/obj/structure/table/fancyblack, -/turf/simulated/floor/wood, -/area/space) -"nyJ" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"nyQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/floor, -/area/space) -"nza" = ( -/obj/structure/lattice, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"nzu" = ( -/obj/structure/cable{ - d1 = 8; - d2 = 10; - icon_state = "8-10" - }, -/turf/simulated/floor/plating, -/area/space) -"nzG" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/component/gas/reinforced, -/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator, -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged, -/obj/item/mecha_parts/mecha_equipment/wormhole_generator, -/turf/simulated/floor/plating/external, -/area/space) -"nzK" = ( -/obj/item/weapon/module/power_control, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"nzQ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam4" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"nzW" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "1" - }, -/turf/template_noop, -/area/template_noop) -"nAf" = ( -/obj/effect/decal/remains/deer, -/turf/simulated/floor/cult, -/area/space) -"nAw" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/component/armor/alien, -/obj/item/mecha_parts/mecha_equipment/crisis_drone/rad, -/obj/item/mecha_parts/mecha_equipment/tool/passenger, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun, -/turf/simulated/floor/plating/external, -/area/space) -"nAB" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"nAF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - opacity = 1 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/telecomms/allinone, -/turf/simulated/shuttle/plating, -/area/space) -"nBH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"nCe" = ( -/obj/effect/map_effect/portal/line/side_b, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nCu" = ( -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"nCJ" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/step_trigger/message{ - message = "There is nothing in your mind, the sensation of emptiness overwhelms you as if your body itself has been left behind. . . but you can't help but to move on. . ."; - once = 0 - }, -/turf/simulated/floor/gorefloor, -/area/space) -"nCW" = ( -/obj/structure/loot_pile/mecha, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nDe" = ( -/turf/simulated/mineral/light, -/area/space) -"nDw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"nDE" = ( -/obj/machinery/vending/loadout/uniform, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nDU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/vending/nifsoft_shop, -/turf/simulated/floor/tiled/dark, -/area/space) -"nED" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/reinforced, -/area/space) -"nEE" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/space) -"nEQ" = ( -/obj/structure/ledge/ledge_nub{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nER" = ( -/obj/structure/largecrate/animal/cat/bones, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"nFh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"nFR" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/floor/wood/sif, -/area/space) -"nFX" = ( -/obj/machinery/door/window, -/turf/simulated/floor/tiled/white, -/area/space) -"nFZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"nGd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"nGn" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/medical, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"nGw" = ( -/mob/living/simple_mob/animal/passive/pillbug{ - name = "Conchambruda" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"nGI" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"nGO" = ( -/obj/item/seeds/random, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"nHx" = ( -/obj/structure/flora/pumpkin/carved/girly, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nHD" = ( -/obj/machinery/shipsensors, -/obj/effect/catwalk_plated/dark, -/turf/simulated/shuttle/plating, -/area/space) -"nHN" = ( -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/space) -"nHZ" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"nIl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, -/area/space) -"nIr" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"nIt" = ( -/obj/structure/table/darkglass, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor, -/area/space) -"nIG" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/prop/alien/dispenser, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"nJg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/geiger, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/welding, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/turf/simulated/shuttle/plating, -/area/space) -"nJL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"nKd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - opacity = 1 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/shuttle/plating, -/area/space) -"nKr" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"nKz" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "military autolathe"; - req_access = list(777) - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"nKM" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor2, -/area/space) -"nKN" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"nKT" = ( -/obj/random/multiple/large_corp_crate, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nKX" = ( -/obj/machinery/porta_turret/alien{ - faction = "hivebot" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nKY" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"nLJ" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"nLN" = ( -/obj/effect/overlay/palmtree_l, -/turf/simulated/floor/beach/sand/desert, -/area/space) -"nLQ" = ( -/obj/item/weapon/gift, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nMg" = ( -/obj/machinery/r_n_d/server/core, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"nNj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"nNl" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"nNs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"nNF" = ( -/obj/structure/bed/alien, -/obj/effect/decal/remains/xeno, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nNQ" = ( -/obj/structure/disposalpipe/sortjunction/untagged/flipped{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"nNW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Starboard Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"nOB" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nPl" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nPo" = ( -/obj/item/weapon/implantpad, -/obj/structure/closet/alien, -/obj/item/weapon/implantpad, -/obj/item/weapon/implantpad, -/obj/item/weapon/implantpad, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nPC" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"nPH" = ( -/obj/machinery/computer/ship/navigation, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"nPX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Captain's Quarters" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"nQr" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/structure/flora/pottedplant/fern{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/space) -"nQR" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/space) -"nRm" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nRp" = ( -/turf/simulated/floor/water/deep/pool, -/area/space) -"nRH" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nSj" = ( -/obj/structure/barricade, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"nSP" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "32" - }, -/turf/template_noop, -/area/space) -"nTE" = ( -/obj/structure/table/alien/blue, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"nTP" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nUd" = ( -/obj/structure/sign/redcross{ - desc = "The Star of Life, a symbol of Medical Aid."; - icon_state = "lifestar"; - name = "Medbay"; - pixel_x = 32 - }, -/turf/template_noop, -/area/space) -"nUX" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/space) -"nVV" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"nWV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/green, -/turf/simulated/floor/plating, -/area/space) -"nXo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"nXM" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"nXO" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"nXP" = ( -/obj/machinery/door/blast/angled/open, -/obj/structure/plasticflaps/mining, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"nXR" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"nXW" = ( -/obj/machinery/computer/prisoner{ - icon = 'icons/obj/abductor.dmi'; - icon_screen = null; - icon_state = "console-c"; - req_access = list(777) - }, -/turf/simulated/floor/wood/sif, -/area/space) -"nYk" = ( -/obj/machinery/power/tesla_coil, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nYH" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"nZj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/rnd{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"nZF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"nZZ" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oac" = ( -/obj/structure/table/glass, -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"oap" = ( -/obj/structure/closet/walllocker{ - dir = 4; - pixel_x = 32 - }, -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"oaB" = ( -/obj/machinery/vending/boozeomat{ - req_access = newlist() - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"oaH" = ( -/obj/effect/fancy_shuttle/tether_cargo, -/turf/template_noop, -/area/space) -"obj" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tesla_coil/pre_mapped, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"obI" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"obS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor, -/area/space) -"ocn" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/obj/effect/alien/weeds, -/obj/item/stolenpackage, -/obj/item/organ/internal/heart, -/obj/item/organ/internal/kidneys/vox, -/obj/structure/reagent_dispensers/space_cleaner{ - pixel_y = 31 - }, -/turf/simulated/floor, -/area/space) -"ocY" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"ode" = ( -/obj/machinery/pointdefense, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"odr" = ( -/obj/machinery/computer/ship/helm{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"odO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/light, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"odY" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"odZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"oev" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"oeT" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ofO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/space) -"ofP" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/prop/alien/computer{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ogd" = ( -/obj/effect/alien/weeds, -/obj/structure/simple_door/resin, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"ogL" = ( -/obj/item/weapon/material/shard/phoron, -/turf/simulated/floor/plating, -/area/space) -"ohM" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oib" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/borderfloorblack{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oig" = ( -/obj/structure/table/darkglass, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/lightreplacer, -/obj/item/device/lightreplacer, -/turf/simulated/floor/carpet, -/area/space) -"oix" = ( -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/space) -"oiB" = ( -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"oiM" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"oiU" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"ojs" = ( -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"ojA" = ( -/obj/effect/fancy_shuttle/lifeboat1, -/turf/template_noop, -/area/space) -"oka" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"olh" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"olv" = ( -/obj/mecha/working/hoverpod/shuttlecraft{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"olM" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"olO" = ( -/mob/living/simple_mob/animal/space/alien/queen/empress, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"omi" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"omk" = ( -/obj/machinery/particle_accelerator/control_box{ - anchored = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"omo" = ( -/obj/machinery/button/remote/airlock{ - name = "Rear Hatch Control"; - pixel_x = 26; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"omC" = ( -/obj/structure/cliff/automatic{ - dir = 5 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"omH" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/obj/item/weapon/soap/deluxe, -/turf/simulated/floor/tiled/white, -/area/space) -"omM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - name = "Waste to Filter" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"onk" = ( -/obj/machinery/button/windowtint{ - id = "exam6"; - pixel_y = -23 - }, -/turf/simulated/floor, -/area/space) -"ony" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 9 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ooB" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"ooI" = ( -/turf/simulated/shuttle/plating/airless/carry, -/area/space) -"ooS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - name = "Atmospherics" - }, -/turf/simulated/floor, -/area/space) -"opn" = ( -/obj/effect/fancy_shuttle{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/space) -"opr" = ( -/obj/structure/cable/blue{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"opE" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"opF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"opX" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/space) -"oqv" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/space) -"org" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/shuttle/floor/alien, -/area/space) -"orm" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"orA" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"orH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"orM" = ( -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/device/starcaster_news, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/space) -"osG" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ota" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/space) -"otc" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"otj" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/storage/belt/utility, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/stack/material/copper{ - amount = 25 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/tech_disk, -/obj/item/weapon/disk/tech_disk, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"otr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"otG" = ( -/obj/structure/cliff/automatic, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"otM" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oue" = ( -/obj/structure/table/alien/blue, -/obj/item/clothing/under/psysuit, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"our" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/particle_accelerator/particle_emitter/left{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ouw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/random/contraband/nofail, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ouB" = ( -/obj/machinery/dnaforensics{ - pixel_x = -4 - }, -/obj/structure/tubes, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ouM" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"ouN" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/turf/template_noop, -/area/space) -"ouX" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - layer = 2.6 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1; - icon_state = "windoor" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"ovg" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating/external, -/area/space) -"ovj" = ( -/obj/structure/prop/nt_biocan, -/turf/template_noop, -/area/space) -"ovl" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"ovB" = ( -/mob/living/silicon/decoy, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ovI" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"ovK" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"owF" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor, -/area/space) -"owS" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"owY" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"oxA" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/piratedouble, -/obj/machinery/flasher{ - id = "permflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/wood, -/area/space) -"oyk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"oyE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ozv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/space) -"ozw" = ( -/obj/effect/floor_decal/borderfloorblack/corner, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ozz" = ( -/obj/structure/urinal{ - dir = 4; - pixel_x = -31; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"oAh" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_1" - }, -/turf/simulated/floor/tiled, -/area/space) -"oBe" = ( -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oBA" = ( -/turf/unsimulated/wall/dark, -/area/space) -"oBQ" = ( -/obj/effect/gibspawner/robot, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"oBS" = ( -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/shuttle/plating, -/area/space) -"oCb" = ( -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/space) -"oCw" = ( -/obj/machinery/light/small/flicker{ - dir = 1 - }, -/obj/structure/closet/alien, -/obj/item/device/perfect_tele_beacon/stationary{ - tele_name = "Unknown"; - tele_network = "abd1" - }, -/turf/simulated/floor/cult, -/area/space) -"oCB" = ( -/obj/machinery/vending/engivend{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777); - req_log_access = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"oCL" = ( -/obj/structure/catwalk, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/railing/grey, -/turf/simulated/floor, -/area/space) -"oCM" = ( -/obj/random/maintenance, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"oDn" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"oDu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"oEe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/space) -"oEo" = ( -/obj/structure/bed/double/padded, -/turf/simulated/floor/wood/sif/broken, -/area/space) -"oFb" = ( -/obj/structure/foodcart, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oFO" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "door_locked"; - id_tag = "estrella_back_hatch"; - locked = 1; - req_one_access = null - }, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - id = "estrella_back_hatch"; - name = "Rear Hatch Control"; - pixel_y = 27; - req_access = null; - specialfunctions = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/space) -"oGj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/rshull, -/area/space) -"oGm" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "military autolathe"; - req_access = list(777) - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"oGp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"oGr" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "baby_mammoth_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "baby_mammoth_shuttle"; - pixel_y = 26; - tag_airpump = "baby_mammoth_pump"; - tag_chamber_sensor = "baby_mammoth_sensor"; - tag_exterior_door = "baby_mammoth_outer"; - tag_interior_door = "baby_mammoth_inner" - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/plating, -/area/space) -"oGs" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Combat Information Center" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oGL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"oHA" = ( -/obj/machinery/button/windowtint{ - id = "SP-Hydro"; - pixel_x = -28; - pixel_y = 6 - }, -/obj/machinery/light_switch{ - name = "light switch "; - pixel_x = -27; - pixel_y = -5 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"oHC" = ( -/obj/structure/grille, -/turf/simulated/floor/tiled, -/area/space) -"oHR" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/gootrap{ - basecolor = #610B0B; - desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; - name = "Spill of fear" - }, -/obj/effect/step_trigger/message{ - message = "Your body starts to feel numb with every step you take, there is an imposing presence you have yet to face. . . Maybe this isn't as bad."; - once = 0 - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"oHU" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/effect/floor_decal/techfloor, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"oHX" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/item/modular_computer/console/preset/engineering{ - dir = 1 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"oHY" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "atriumeast" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oIK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"oJd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"oJj" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"oJq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oJJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oJS" = ( -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"oKa" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 8; - pixel_x = -6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"oKd" = ( -/obj/item/weapon/reagent_containers/cooking_container/grill, -/turf/simulated/floor/tiled, -/area/space) -"oKj" = ( -/obj/structure/table/standard, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/floor/tiled/dark, -/area/space) -"oKX" = ( -/obj/effect/floor_decal/borderfloorblack, -/turf/simulated/floor/tiled/dark, -/area/space) -"oLe" = ( -/obj/structure/table/rack/shelf/steel, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oLq" = ( -/obj/structure/sign/christmas/wreath, -/turf/simulated/floor/tiled, -/area/space) -"oLw" = ( -/obj/structure/hoist, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oLG" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"oLH" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/carpet, -/area/space) -"oLO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"oLW" = ( -/obj/item/weapon/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"oLX" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"oLZ" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"oMn" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"oMs" = ( -/obj/machinery/seed_storage/garden{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oMv" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/space) -"oMz" = ( -/obj/structure/particle_accelerator/power_box{ - anchored = 1; - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oNc" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oNh" = ( -/obj/machinery/r_n_d/protolathe, -/obj/structure/sign/periodic{ - pixel_y = 29 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"oNq" = ( -/obj/machinery/particle_accelerator/control_box{ - anchored = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oNW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/giga_drill, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oOe" = ( -/obj/item/trash/rkibble, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oOk" = ( -/obj/machinery/gateway/brass{ - dir = 5 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oPn" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"oPy" = ( -/obj/vehicle/train/trolley{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"oQk" = ( -/turf/simulated/floor/redgrid/animated, -/area/space) -"oQt" = ( -/obj/machinery/button/flasher{ - id = "slavecell1"; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oQD" = ( -/turf/simulated/floor/airless{ - icon_state = "solarpanel" - }, -/area/space) -"oQS" = ( -/obj/random/maintenance, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oQU" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/space) -"oQW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/weapon/gun/energy/sniperrifle, -/turf/simulated/shuttle/floor/alien, -/area/space) -"oRx" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/lava, -/area/space) -"oRy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Starboard Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"oSt" = ( -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"oSO" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oSX" = ( -/obj/structure/toilet, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oTn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"oTJ" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/ert/specialops, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"oUa" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/mecha/combat/durand/old, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"oVj" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - anchored = 1; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"oVv" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"oVy" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"oVH" = ( -/obj/machinery/door/airlock/alien{ - name = "Tele-Room Mk2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oWa" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"oWf" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/machinery/shower{ - pixel_y = 20 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/space) -"oWj" = ( -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oWm" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"oWr" = ( -/obj/machinery/computer/security/abductor{ - dir = 1; - icon_screen = null; - icon_state = "camera_flipped" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"oWv" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod) -"oWA" = ( -/obj/structure/transit_tube, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"oXl" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"oXt" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_6" - }, -/turf/simulated/floor/tiled, -/area/space) -"oXY" = ( -/obj/mecha/working/ripley/antique, -/turf/template_noop, -/area/space) -"oYx" = ( -/obj/structure/prop/poicanister, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"oYZ" = ( -/obj/machinery/vending/medical{ - dir = 8; - emagged = 1; - pixel_x = 22; - req_access = list(777); - density = 0 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"oZC" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/vr_sleeper/alien, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod) -"paf" = ( -/obj/structure/loot_pile/surface, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"paL" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"pbc" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/box/bodybags, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/device/sleevemate, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/device/defib_kit/compact/loaded, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/device/binoculars, -/obj/item/device/bluespaceradio, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/device/radio/emergency, -/obj/item/weapon/storage/backpack/dufflebag/emt, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"pbS" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pcb" = ( -/obj/machinery/door/airlock/sandstone, -/turf/template_noop, -/area/space) -"pcr" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/mecha_equipment/generator/nuclear, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/rigged, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged, -/turf/simulated/floor/plating/external, -/area/space) -"pcE" = ( -/obj/item/weapon/reagent_containers/food/snacks/syndicake, -/turf/simulated/floor/plating/external, -/area/space) -"pcP" = ( -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/closet/walllocker_double/kitchen/north{ - name = "Ration Cabinet" - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"pds" = ( -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"pdH" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = 26; - req_access = list(2,4) - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/bay/chair/padded/black{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"peo" = ( -/obj/machinery/door/airlock/alien{ - name = "Auction airlock"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"peq" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/black, -/area/space) -"pey" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/space) -"peE" = ( -/obj/structure/cable{ - d2 = 9; - icon_state = "6-9"; - d1 = 6 - }, -/turf/simulated/floor/plating, -/area/space) -"pfo" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"pfu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pfH" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/floor/plating, -/area/space) -"pfL" = ( -/obj/structure/disposalpipe/sortjunction/untagged/flipped{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"pfQ" = ( -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pgv" = ( -/obj/mecha/combat/fighter/pinnace{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"pgC" = ( -/obj/machinery/light/spot, -/obj/structure/hull_corner{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"pgF" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"pgK" = ( -/obj/machinery/atmospherics/pipe/tank/air/full{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"phn" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/cosmos, -/turf/simulated/floor/wood, -/area/space) -"php" = ( -/obj/machinery/vending/event/costume, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"phx" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand14" - }, -/area/space) -"phQ" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/space) -"piu" = ( -/obj/machinery/microwave{ - pixel_y = -2 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1; - icon_state = "pwindow" - }, -/obj/structure/table/steel{ - pixel_y = -9 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"piI" = ( -/obj/effect/fancy_shuttle/security, -/turf/template_noop, -/area/space) -"piU" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pje" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "stargazer_hatch"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"pjT" = ( -/obj/structure/prop/alien/computer/camera, -/turf/simulated/floor, -/area/space) -"pkc" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/flasher{ - id = "exaroom5"; - name = "Floor mounted flash" - }, -/turf/simulated/floor, -/area/space) -"pkB" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall, -/area/space) -"pkK" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/stack/cable_coil/yellow, -/obj/item/stack/cable_coil/yellow, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/green, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pkN" = ( -/obj/machinery/door/airlock/alien/blue/public, -/obj/machinery/door/blast/puzzle{ - layer = 3.3; - name = "Blast Door"; - open_layer = 3.3 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pkS" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"plr" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"plK" = ( -/obj/structure/fireaxecabinet, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"plM" = ( -/obj/random/firstaid, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"plV" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"pmh" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"pmk" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumnorth" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pmm" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"pmu" = ( -/obj/machinery/power/thermoregulator, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pmT" = ( -/obj/structure/prop/alien/dispenser{ - pixel_x = -27 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"pna" = ( -/obj/machinery/door/airlock/alien{ - name = "Security Post"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pnl" = ( -/obj/structure/flora/pottedplant/largebush{ - name = "Guadalajara" - }, -/turf/simulated/floor/wood/sif, -/area/space) -"pnv" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"pnz" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/item/weapon/material/shard/phoron, -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pnA" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"pnH" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/gorefloor, -/area/space) -"pnL" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - anchored = 1; - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pom" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/loot_pile/mecha/gygax/dark/adv, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"poy" = ( -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"poA" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/yellow, -/turf/simulated/floor/wood, -/area/space) -"poC" = ( -/obj/structure/prop/dna_vault, -/turf/template_noop, -/area/space) -"ppm" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"ppZ" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 2; - name = "Waste Compresser" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"pqn" = ( -/turf/simulated/floor/water/ocean, -/area/space) -"pqE" = ( -/obj/structure/cryofeed{ - dir = 2; - pixel_y = 32 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pqK" = ( -/obj/structure/flora/grass/both, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pri" = ( -/obj/machinery/computer/guestpass{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/space) -"pro" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"psc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"psg" = ( -/obj/machinery/porta_turret/alien, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"psJ" = ( -/obj/item/sniper_rifle_part/trigger_group, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"psL" = ( -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"psP" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"psT" = ( -/obj/structure/cliff/automatic/ramp{ - dir = 6 - }, -/obj/structure/cliff/automatic/ramp{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"psY" = ( -/obj/structure/particle_accelerator/fuel_chamber{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ptr" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - icon_state = "door_locked"; - id_tag = "echidna_outer"; - locked = 1 - }, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"puh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"pul" = ( -/obj/machinery/door/airlock/angled_tgmc/personal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"puq" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"puU" = ( -/turf/simulated/floor, -/area/space) -"pvM" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"pvY" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"pwb" = ( -/obj/machinery/computer/operating, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"pwA" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/space) -"pwC" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/tape_roll, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pwU" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"pxh" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/mecha/combat/marauder/seraph, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"pxp" = ( -/obj/structure/ledge/ledge_nub, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pxt" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pxM" = ( -/obj/machinery/autolathe{ - hacked = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"pxT" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/shuttle/floor/black, -/area/space) -"pyz" = ( -/obj/structure/particle_accelerator/end_cap{ - anchored = 1; - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pyA" = ( -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/backup, -/obj/item/weapon/implantcase/backup, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/gun/energy/netgun, -/obj/item/weapon/melee/baton/shocker, -/obj/item/weapon/melee/baton/shocker{ - agonyforce = 75 - }, -/obj/item/weapon/storage/belt/utility/alien/full, -/obj/item/weapon/storage/belt/utility/alien/full, -/obj/item/clothing/suit/armor/alien, -/obj/item/clothing/suit/armor/alien, -/obj/item/clothing/shoes/boots/swat, -/obj/item/clothing/shoes/boots/swat, -/obj/item/clothing/gloves/swat, -/obj/item/clothing/gloves/swat, -/obj/item/clothing/mask/gas/sechailer/swat, -/obj/item/clothing/mask/gas/sechailer/swat, -/obj/item/clothing/accessory/storage/pouches/large, -/obj/item/clothing/accessory/storage/pouches/large, -/obj/item/weapon/cell/void, -/obj/item/weapon/cell/void, -/obj/item/weapon/cell/void, -/obj/item/weapon/cell/void, -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ - desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; - name = "alien admiral's medal" - }, -/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ - desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; - name = "alien admiral's medal" - }, -/obj/item/clothing/accessory/poncho/thermal/purple{ - color = "grey"; - desc = "An ornate, comfortable poncho with markings and thermal layers."; - name = "Alien thermal poncho" - }, -/obj/item/clothing/accessory/poncho/thermal/purple{ - color = "grey"; - desc = "An ornate, comfortable poncho with markings and thermal layers."; - name = "Alien thermal poncho" - }, -/obj/item/clothing/head/beret/blueshield{ - desc = "A dark blue beret adorned with a silver patch. It has odd alien markings all around it."; - name = "Alien's beret" - }, -/obj/item/clothing/head/beret/blueshield{ - desc = "A dark blue beret adorned with a silver patch. It has odd alien markings all around it."; - name = "Alien's beret" - }, -/obj/item/weapon/storage/box/syndie_kit/spy, -/obj/item/weapon/deadringer, -/obj/item/weapon/handcuffs/legcuffs/bola, -/obj/item/weapon/handcuffs/legcuffs/bola, -/obj/item/device/chameleon, -/obj/item/weapon/card/emag, -/obj/item/weapon/plastique, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/glasses/graviton, -/obj/item/device/radio_jammer, -/obj/item/weapon/grenade/anti_photon, -/obj/item/weapon/grenade/anti_photon, -/obj/item/weapon/grenade/flashbang, -/obj/item/weapon/grenade/flashbang, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/weapon/reagent_containers/spray/pepper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/gun/energy/sickshot, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "UP-Duction"; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pyH" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id = "SP-Cell"; - name = "Cell Door" - }, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"pzv" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"pzx" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"pzH" = ( -/obj/machinery/clonepod/transhuman/full/abductor{ - name = "grower pod" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"pzK" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "baby_mammoth_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"pzP" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/alien{ - pixel_y = -6 - }, -/obj/item/weapon/gun/energy/alien, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"pzZ" = ( -/obj/machinery/light, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pAr" = ( -/turf/simulated/floor/plating/external, -/area/space) -"pAx" = ( -/obj/structure/table/alien, -/obj/item/device/tvcamera, -/obj/item/device/tvcamera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pAJ" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pAP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pBk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hangar Bay" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pBs" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled, -/area/space) -"pBK" = ( -/obj/structure/reagent_dispensers/water_cooler/full{ - pixel_x = -10; - pixel_y = 12 - }, -/obj/structure/closet/crate/bin{ - pixel_x = 6; - pixel_y = 13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"pCs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pCz" = ( -/obj/effect/resonance, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pDb" = ( -/obj/structure/fuel_port{ - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"pDf" = ( -/obj/machinery/gateway/centeraway/mcguffin, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pDg" = ( -/obj/structure/table/alien, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pEg" = ( -/obj/machinery/door/airlock/maintenance/int, -/obj/structure/fans/hardlight, -/turf/simulated/floor/plating/external, -/area/space) -"pER" = ( -/obj/structure/simple_door/cult, -/turf/simulated/floor/cult, -/area/space) -"pEY" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alien, -/area/space) -"pFl" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/brain/grey, -/obj/item/weapon/material/knife/plastic, -/turf/simulated/floor, -/area/space) -"pFN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pGl" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pGr" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pGy" = ( -/obj/structure/closet/walllocker_double/kitchen/east{ - name = "Ration Cabinet" - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"pHZ" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pIv" = ( -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pIz" = ( -/obj/machinery/autolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"pIT" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pJa" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pJl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"pJn" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"pJw" = ( -/obj/structure/hull_corner, -/turf/template_noop, -/area/space) -"pJz" = ( -/obj/structure/particle_accelerator/particle_emitter/left, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"pJM" = ( -/obj/structure/table/rack, -/obj/item/weapon/makeover, -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/swimsuit/fluff/penelope, -/turf/simulated/floor/wood, -/area/space) -"pKA" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"pKK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"pKU" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"pLl" = ( -/obj/item/weapon/disk/tech_disk, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"pLx" = ( -/obj/structure/table/rack, -/obj/item/weapon/material/knife/ritual, -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/head/soft/solgov/veteranhat, -/turf/simulated/floor/wood, -/area/space) -"pLE" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pMf" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/plating, -/area/space) -"pMw" = ( -/obj/structure/closet/alien, -/turf/simulated/floor/wood/sif, -/area/space) -"pMC" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"pMM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/space) -"pMW" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"pNj" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"pNo" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/component/armor/military, -/obj/item/mecha_parts/component/gas/reinforced, -/obj/item/mecha_parts/mecha_equipment/omni_shield, -/obj/item/mecha_parts/mecha_equipment/tool/jetpack, -/obj/item/mecha_parts/mecha_equipment/tool/passenger, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, -/turf/simulated/floor/plating/external, -/area/space) -"pNG" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/item/weapon/book/tome/imbued, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"pNQ" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/component/hull/lightweight, -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, -/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged, -/turf/simulated/floor/plating/external, -/area/space) -"pOg" = ( -/obj/machinery/flasher{ - id = "teleroom1"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pOC" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pPv" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"pPz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pPN" = ( -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/space) -"pPZ" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"pQi" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pQk" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 4; - pixel_x = -22 - }, -/obj/item/pizzavoucher, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"pRa" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood/broken, -/area/space) -"pRr" = ( -/obj/machinery/cryopod/robot, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pRF" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "atriumeast" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"pRG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/space) -"pSg" = ( -/obj/effect/blocker, -/turf/template_noop, -/area/space) -"pSv" = ( -/obj/structure/sink{ - pixel_y = 14 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/machinery/disposal/wall{ - dir = 4; - pixel_x = -37; - pixel_y = 0 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"pSV" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/space) -"pTY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"pUb" = ( -/obj/item/seeds/random, -/obj/item/seeds/random, -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/space) -"pVs" = ( -/obj/structure/filingcabinet{ - pixel_x = -9; - pixel_y = 12; - density = 0 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"pVx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"pVC" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "3" - }, -/turf/template_noop, -/area/template_noop) -"pWg" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "garbagethree"; - name = "disposal coveyor" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pWq" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"pXi" = ( -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/beerkeg, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"pXp" = ( -/obj/item/weapon/reagent_containers/glass/rag, -/obj/item/clothing/gloves/ring/engagement, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"pXy" = ( -/obj/structure/bed/chair/wood/wings, -/turf/simulated/floor/wood/sif, -/area/space) -"pXF" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"pYp" = ( -/obj/machinery/sleeper{ - dir = 4; - emagged = 1; - initial_bin_rating = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"pYO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pYV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"pYW" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - opacity = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"pZr" = ( -/obj/machinery/button/windowtint{ - id = "atriumsouth"; - pixel_y = 24 - }, -/obj/machinery/button/flasher{ - id = "atriumflash"; - pixel_y = 31 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"pZK" = ( -/obj/machinery/alarm/angled{ - pixel_y = 18 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"pZV" = ( -/obj/machinery/door/airlock/alien{ - name = "Dressing and Managing"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qaP" = ( -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"qbS" = ( -/obj/effect/simple_portal/linked{ - desc = "It looks like a hole that leads to somewhere, although you can't quite see through it. . . It seems dormant and sealed closed. . ."; - name = "Demonic portal"; - portal_id = 20 - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"qcn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"qdI" = ( -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs/fuzzy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs{ - pixel_x = 5 - }, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/obj/item/weapon/handcuffs/legcuffs/fuzzy, -/turf/simulated/floor, -/area/space) -"qed" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/power/grounding_rod, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qew" = ( -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qeY" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/machinery/computer/power_monitor{ - dir = 8 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"qfd" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty/phoron, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"qfw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/wall/rshull, -/area/space) -"qfA" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qfF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"qfH" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"qfQ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qgc" = ( -/obj/effect/overlay/palmtree_r, -/turf/simulated/floor/beach/sand/desert, -/area/space) -"qgj" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qgw" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - anchored = 1; - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qgB" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/item/trash/material/metal, -/turf/simulated/floor/plating, -/area/space) -"qgK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/rshull, -/area/space) -"qgZ" = ( -/obj/structure/railing/grey, -/obj/structure/railing/grey{ - dir = 4 - }, -/turf/unsimulated/fake_space, -/area/space) -"qhh" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_9" - }, -/turf/simulated/floor/tiled, -/area/space) -"qhl" = ( -/obj/mecha/medical/odysseus/old, -/turf/template_noop, -/area/space) -"qhK" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"qhP" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7 - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = -9; - pixel_y = -7 - }, -/turf/simulated/floor/plating, -/area/space) -"qhV" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet, -/area/space) -"qio" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/external, -/area/space) -"qjE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"qjW" = ( -/obj/machinery/robotic_fabricator, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"qkk" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/machinery/power/apc/hyper{ - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"qkq" = ( -/obj/structure/prop/alien/power, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qkG" = ( -/obj/machinery/vending/deluxe_boozeomat{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/wood/sif, -/area/space) -"qlc" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/obj/item/slimepotion/docility, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qlv" = ( -/obj/machinery/door/airlock/alien{ - name = "Tele-Room Mk1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qlE" = ( -/obj/structure/girder/displaced, -/turf/template_noop, -/area/space) -"qlX" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qmf" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"qmq" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"qmu" = ( -/obj/structure/bed/alien, -/turf/simulated/floor/cult, -/area/space) -"qmD" = ( -/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, -/obj/structure/curtain/black, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/space) -"qmI" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"qmW" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/blue, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qnL" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_state = "dispenser"; - name = "Drug-Dispenser"; - req_access = list(777) - }, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/device/sleevemate, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"qoi" = ( -/obj/structure/fuel_port{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod) -"qoo" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"qpd" = ( -/obj/effect/rune, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qph" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"qpT" = ( -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"qpZ" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/engineering, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"qqi" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/captain, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"qql" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/fans/hardlight/colorable{ - invisibility = 99 - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"qqu" = ( -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"qqx" = ( -/obj/structure/particle_accelerator/particle_emitter/center, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/turf/simulated/floor, -/area/space) -"qra" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"qrw" = ( -/obj/structure/railing/grey, -/obj/structure/railing/grey{ - dir = 8 - }, -/turf/unsimulated/fake_space, -/area/space) -"qrA" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/step_trigger/message{ - message = "Feels as if you are now going with the motions, your senses betray you as not only your body feels numb but your mind does so too. . ."; - once = 0 - }, -/turf/simulated/floor/gorefloor, -/area/space) -"qrB" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"qsy" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qsz" = ( -/obj/structure/flora/pottedplant/xmas{ - anchored = 1 - }, -/turf/simulated/floor/tiled, -/area/space) -"qsA" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"qsG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qsH" = ( -/obj/structure/flora/log1, -/turf/simulated/floor/beach/water, -/area/space) -"qsP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/gear_dispenser/suit_old, -/turf/simulated/floor/plating/external, -/area/space) -"qsX" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"qta" = ( -/obj/effect/fancy_shuttle/dropship, -/turf/template_noop, -/area/space) -"qtf" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand13" - }, -/area/space) -"qtj" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"qtl" = ( -/obj/structure/inflatable, -/turf/simulated/floor/plating, -/area/space) -"qtn" = ( -/obj/structure/particle_accelerator/particle_emitter/left{ - anchored = 1; - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange/corner, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qtu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"qua" = ( -/obj/structure/loot_pile/maint, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"quT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 4; - id = "baby_mammoth_hatch"; - name = "Rear Hatch Control"; - pixel_x = -26; - req_access = null; - specialfunctions = 4 - }, -/obj/machinery/door/blast/regular/open{ - id = "baby_mammoth_blast"; - layer = 2.5; - name = "window blast shield" - }, -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "baby_mammoth_hatch"; - locked = 1; - name = "Rear Hatch" - }, -/turf/simulated/shuttle/plating, -/area/space) -"quX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"qvk" = ( -/obj/structure/prop/blackbox/xenofrigate, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"qvm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"qvv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"qvw" = ( -/obj/machinery/door/airlock/alien{ - name = "Right-Wing Thrusters MK-2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qvO" = ( -/obj/mecha/combat/phazon/old, -/turf/template_noop, -/area/space) -"qwG" = ( -/obj/random/trash, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qwI" = ( -/obj/structure/cable/blue{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/space) -"qwS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating/external, -/area/space) -"qxF" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"qxM" = ( -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"qyk" = ( -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/sign/poster/nanotrasen{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"qzw" = ( -/obj/item/device/multitool, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qzM" = ( -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qzT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"qAn" = ( -/obj/structure/prop/machine/gravygen, -/turf/template_noop, -/area/space) -"qAM" = ( -/obj/structure/table/standard, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"qAN" = ( -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"qBj" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shieldgen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/space) -"qBL" = ( -/obj/machinery/pointdefense, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"qBW" = ( -/obj/structure/bed/chair/bay/chair/padded/blue{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/purple, -/area/space) -"qCl" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/orangedouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"qCp" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qCM" = ( -/obj/machinery/door/airlock/alien{ - name = "Left-Wing Thrusters MK-1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qDh" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"qDo" = ( -/obj/structure/table/alien/blue, -/turf/simulated/shuttle/floor/black, -/area/space) -"qDs" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"qDy" = ( -/obj/fire, -/turf/simulated/floor/lava, -/area/space) -"qDz" = ( -/obj/structure/table/hardwoodtable, -/obj/structure/stripper_pole{ - pixel_y = 9 - }, -/obj/structure/mirror{ - dir = 1; - pixel_y = -27 - }, -/obj/item/clothing/under/fluff/latexmaid{ - pixel_x = -8; - pixel_y = 7 - }, -/turf/simulated/floor/wood, -/area/space) -"qDB" = ( -/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"qDH" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors/weak{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod) -"qDJ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qEb" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/mime, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"qEu" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors, -/turf/simulated/shuttle/plating, -/area/space) -"qFb" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full{ - pixel_x = 18; - pixel_y = 1; - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "Avalon-kitchen"; - layer = 3.3; - name = "Avalon Kitchen Shutters" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"qFB" = ( -/obj/structure/flora/smallbould, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qFN" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"qFQ" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/salvageable/personal, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"qFU" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/clipboard, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qGc" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor/hole, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qGk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"qGu" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"qGy" = ( -/obj/screen/alert/highpressure, -/turf/simulated/shuttle/wall, -/area/space) -"qGE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"qGF" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"qHF" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/lava, -/area/space) -"qHP" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/hyper{ - pixel_y = -24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_x = 25; - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"qIb" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"qIh" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer_1"; - power_setting = 20; - set_temperature = 73; - use_power = 1 - }, -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"qIj" = ( -/obj/mecha/combat/fighter/allure{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"qIR" = ( -/obj/machinery/particle_accelerator/control_box, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qJA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/rnd{ - req_one_access = null - }, -/turf/simulated/floor/plating/external, -/area/space) -"qJE" = ( -/obj/effect/map_effect/beam_point/timer/electric, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qJF" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qJK" = ( -/obj/structure/table/bench/wooden, -/turf/simulated/floor/tiled, -/area/space) -"qJY" = ( -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"qKl" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 1 - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/space) -"qKu" = ( -/obj/machinery/power/smes/buildable/hybrid, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating/external, -/area/space) -"qKy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"qLe" = ( -/obj/machinery/door/airlock/alien{ - name = "Right-Wing Thrusters MK-1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qLi" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/space) -"qLM" = ( -/obj/machinery/door/airlock/alien{ - name = "Ship Helm"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"qLY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/power/tesla_coil, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qMn" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/tesla_coil/pre_mapped, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qMq" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "crglockdown"; - name = "Cargo Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/space) -"qMO" = ( -/obj/structure/flora/tree/jungle, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qMX" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"qNQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/space) -"qOe" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/space) -"qOh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qOk" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/carp_plushie, -/obj/random/curseditem, -/obj/random/junk, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood, -/area/space) -"qOB" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/folder/red, -/obj/item/weapon/folder/blue{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/carpet, -/area/space) -"qPw" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/pizzavoucher, -/obj/item/toy/figure, -/turf/simulated/floor/wood, -/area/space) -"qPH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"qPM" = ( -/obj/structure/closet/crate, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/turf/simulated/floor/plating, -/area/space) -"qRk" = ( -/obj/structure/girder/reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"qRs" = ( -/obj/structure/table/survival_pod, -/obj/item/stack/telecrystal{ - amount = 150 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"qRE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"qRJ" = ( -/obj/structure/hull_corner/long_vert{ - dir = 10 - }, -/turf/template_noop, -/area/space) -"qRQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/space) -"qSf" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor, -/area/space) -"qSr" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"qSz" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"qSK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"qSY" = ( -/obj/machinery/computer/ship/navigation{ - pixel_y = -12 - }, -/obj/structure/railing/grey{ - layer = 2; - pixel_x = 8 - }, -/obj/structure/railing/grey{ - layer = 2; - pixel_x = -8 - }, -/turf/unsimulated/fake_space, -/area/space) -"qTO" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor, -/area/space) -"qUq" = ( -/obj/structure/disposalpipe/broken{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"qUr" = ( -/obj/mecha/working/hoverpod/combatpod{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"qUS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/trash/material/metal, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qVa" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"qVp" = ( -/obj/effect/meteor/tunguska, -/turf/simulated/floor/lava, -/area/space) -"qVv" = ( -/obj/machinery/button/remote/blast_door{ - id = "SP-Cell"; - name = "Cell Door"; - pixel_x = 6; - pixel_y = -33; - req_one_access = list(2,4) - }, -/obj/machinery/button/flasher{ - id = "SP-Cell flash"; - name = "Cell Flash"; - pixel_x = 7; - pixel_y = -24; - req_access = list(2,4) - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"qVH" = ( -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - id = "estrella_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"qWk" = ( -/obj/effect/decal/remains/mummy2, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qWl" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "estrella"; - name = "interior access button"; - pixel_y = 26 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/shuttle/plating, -/area/space) -"qWo" = ( -/obj/machinery/button/flasher{ - id = "slavecell2"; - pixel_y = 31 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qWs" = ( -/obj/structure/table/alien, -/obj/item/weapon/gun/energy/alien, -/obj/item/prop/alien/phasecoil, -/obj/item/clothing/suit/armor/alien/tank, -/obj/item/stack/material/diamond{ - amount = 15 - }, -/turf/simulated/floor/greengrid, -/area/space) -"qWR" = ( -/obj/machinery/sleeper/survival_pod, -/obj/machinery/cryopod{ - dir = 4; - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"qXb" = ( -/obj/machinery/washing_machine, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"qXu" = ( -/obj/effect/fancy_shuttle/miner, -/turf/template_noop, -/area/space) -"qXA" = ( -/obj/effect/map_effect/interval/sound_emitter/punching, -/obj/effect/map_effect/interval/effect_emitter/smoke/fire, -/turf/simulated/floor/lava, -/area/space) -"qXI" = ( -/obj/structure/flora/tree/pine{ - desc = "A wondrous decorated Christmas tree. It has presents!"; - icon_state = "pinepresents" - }, -/turf/simulated/floor/tiled, -/area/space) -"qYd" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"qYi" = ( -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qYn" = ( -/obj/structure/disposalpipe/tagger/partial{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"qYy" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/machinery/button/windowtint{ - id = "h-kitchen"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/space) -"qYS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/particle_accelerator/power_box, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qZn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"qZt" = ( -/obj/structure/ledge{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"qZx" = ( -/obj/structure/closet/secure_closet/miner{ - pixel_x = 27 - }, -/obj/structure/bed/chair/bay/shuttle{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"qZK" = ( -/obj/random/trash_pile, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rav" = ( -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/smartfridge/survival_pod{ - pixel_y = 28 - }, -/obj/item/device/reagent_scanner, -/obj/item/device/mass_spectrometer/adv, -/obj/item/weapon/forensics/sample_kit/powder, -/obj/item/weapon/forensics/sample_kit, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/reagent_containers/spray/luminol, -/obj/item/weapon/storage/briefcase/crimekit, -/obj/item/weapon/storage/briefcase/crimekit, -/obj/item/weapon/storage/box/bodybags, -/obj/item/weapon/storage/box/bodybags, -/obj/item/device/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detectives camera"; - pictures_left = 30; - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/device/camera_film, -/obj/item/weapon/storage/photo_album{ - pixel_y = -10 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"raz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"raE" = ( -/obj/machinery/flasher{ - id = "exaroom1"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/carpet/turcarpet, -/area/space) -"rbc" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rbL" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"rbR" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_x = 1; - pixel_y = 17 - }, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"rcj" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/table/reinforced, -/obj/machinery/door/window/northright{ - dir = 4; - name = "Medical booth" - }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"rcA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"rcE" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"rcM" = ( -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"rcS" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 2; - icon_state = "32-2" - }, -/turf/simulated/floor/plating, -/area/space) -"rdl" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood, -/area/space) -"rdE" = ( -/obj/machinery/power/singularity_beacon/syndicate, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rdF" = ( -/obj/effect/effect/confetti, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rdP" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/glass/bucket{ - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/weapon/reagent_containers/glass/bucket{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/structure/sink/kitchen{ - layer = 1; - pixel_y = 12 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"reb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"rer" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"reE" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"reF" = ( -/obj/machinery/vending/security, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"reM" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"reP" = ( -/obj/item/toy/xmastree, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rfi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "exaroom6"; - pixel_y = 31 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"rfK" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/table/reinforced{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/weapon/paper_bin{ - pixel_x = 9 - }, -/obj/machinery/vending/loadout/uniform{ - pixel_x = -5 - }, -/obj/item/weapon/pen{ - pixel_x = 11; - pixel_y = -3 - }, -/obj/item/weapon/pen{ - pixel_x = 10; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"rfR" = ( -/obj/machinery/the_singularitygen, -/turf/simulated/floor/airless, -/area/space) -"rgj" = ( -/obj/machinery/vending/engivend{ - emagged = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"rgl" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"rgp" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"rgu" = ( -/obj/item/weapon/cell/high/empty, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"rgx" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"rgV" = ( -/obj/structure/flora/pumpkin/carved, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rhN" = ( -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"rhV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"rie" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"rjk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 5"; - id_tag = "Avalon-room5" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rjm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/floor/plating, -/area/space) -"rjM" = ( -/obj/structure/flora/lily2, -/turf/simulated/floor/beach/water, -/area/space) -"rjR" = ( -/obj/effect/weaversilk/trap, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rjY" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/machinery/computer/rcon{ - dir = 8 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"rkd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rkD" = ( -/obj/item/prop/alien/phasecoil, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rkK" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rlv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/external/glass{ - name = "Exterior Airlock Access"; - id_tag = "Avalon_engine_airlock_exterior" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/space) -"rlV" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"rma" = ( -/obj/machinery/power/emitter/gyrotron, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rmd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; - name = "Stained sheet of paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"rmv" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rmz" = ( -/obj/structure/table/alien/blue, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/weapon/paper/alien, -/obj/item/weapon/cell/device/weapon/recharge/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rng" = ( -/obj/machinery/button/windowtint{ - id = "exam2"; - pixel_y = 24 - }, -/turf/simulated/floor, -/area/space) -"rnp" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"rnA" = ( -/obj/structure/table/alien/blue, -/obj/item/prop/alien/junk, -/obj/item/weapon/paper/alien, -/obj/item/clothing/head/helmet/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"rnJ" = ( -/obj/structure/prop/alien/computer/camera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rnQ" = ( -/obj/random/maintenance/security, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"rnS" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rnW" = ( -/obj/structure/disposalpipe/broken{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"roD" = ( -/obj/structure/table/alien, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"roQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rpj" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"rpz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/random/mob/robotic/hivebot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rqE" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"rqZ" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/space) -"rra" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"rry" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"rrB" = ( -/obj/structure/loot_pile/mecha, -/turf/simulated/floor/plating, -/area/space) -"rrI" = ( -/obj/effect/overmap/visitable/ship/landable/stargazer, -/turf/simulated/shuttle/floor/black, -/area/space) -"rse" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"rsg" = ( -/obj/structure/closet/walllocker_double/kitchen/south{ - name = "Ration Cabinet" - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"rsj" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rsm" = ( -/obj/structure/cable/blue, -/turf/simulated/floor/plating, -/area/space) -"rsH" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"rsU" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/stock_parts/scanning_module/adv{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/weapon/stock_parts/scanning_module/adv{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/weapon/stock_parts/micro_laser/high, -/obj/item/weapon/stock_parts/micro_laser/high, -/obj/item/weapon/stock_parts/matter_bin/adv, -/obj/item/weapon/stock_parts/matter_bin/adv, -/obj/item/weapon/stock_parts/manipulator/hyper, -/obj/item/weapon/stock_parts/manipulator/hyper, -/obj/item/weapon/stock_parts/capacitor/adv, -/obj/item/weapon/stock_parts/capacitor/adv, -/turf/simulated/shuttle/floor/purple, -/area/space) -"rtg" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"rtj" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"rtK" = ( -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"run" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/briefcase/inflatable{ - pixel_y = 3 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/pizzavoucher, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"ruH" = ( -/obj/machinery/power/shield_generator/charged{ - field_radius = 8; - initial_shield_modes = 2153; - target_radius = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/railing/grey{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8"; - dir = 2 - }, -/turf/simulated/floor/bluegrid, -/area/space) -"rve" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/random/maintenance, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"rvE" = ( -/obj/item/weapon/oar{ - desc = "Used to provide propulsion to a space ship."; - force = 50; - name = "Alien oar"; - throw_range = 10; - throw_speed = 5; - throwforce = 30 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"rvJ" = ( -/obj/machinery/vending/deluxe_boozeomat{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rwf" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"rwk" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rwy" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod{ - locked = 1 - }, -/obj/effect/floor_decal/industrial/danger/full, -/obj/effect/blocker, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"rwD" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/tiled, -/area/space) -"rwF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/shuttle/window, -/obj/machinery/door/firedoor/glass, -/turf/simulated/shuttle/plating, -/area/space) -"rwP" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor, -/area/space) -"rwS" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"ryr" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"ryw" = ( -/obj/structure/barricade/cutout/cultist, -/turf/simulated/floor/cult, -/area/space) -"ryG" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_y = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"ryU" = ( -/obj/machinery/button/flasher{ - id = "auctionroom"; - pixel_y = 31 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"rzo" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rzu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rAc" = ( -/obj/machinery/atmospherics/pipe/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/shuttle/plating, -/area/space) -"rAf" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"rAt" = ( -/obj/structure/sink/countertop{ - pixel_y = 20 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"rAu" = ( -/obj/structure/plasticflaps, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rAM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double{ - pixel_y = 6 - }, -/obj/item/weapon/tank/emergency/oxygen/double{ - pixel_y = 6 - }, -/obj/item/weapon/tank/emergency/oxygen/double{ - pixel_y = 6 - }, -/obj/item/weapon/tank/emergency/oxygen/double{ - pixel_y = 6 - }, -/obj/item/weapon/tank/emergency/oxygen/double{ - pixel_y = 6 - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"rBa" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rBt" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/space) -"rBH" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"rBI" = ( -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"rBX" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/red, -/area/survivalpod) -"rCQ" = ( -/obj/structure/salvageable/server, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"rDe" = ( -/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rDh" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/obj/machinery/light/poi, -/turf/simulated/floor/carpet, -/area/space) -"rDl" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/simulated/floor/grass, -/area/space) -"rDs" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/space) -"rDA" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"rDN" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/red, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"rDO" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"rEb" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"rEd" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/weapon/ore/diamond, -/obj/item/weapon/ore/gold, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/silver, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/clothing/head/sombrero, -/obj/item/clothing/head/sombrero, -/obj/item/clothing/suit/poncho, -/obj/item/clothing/accessory/poncho/thermal/red, -/obj/item/clothing/accessory/poncho/thermal/security, -/obj/item/clothing/accessory/poncho/thermal/green, -/obj/item/clothing/accessory/poncho/red, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/toy/bosunwhistle/fluff/strix, -/obj/item/weapon/blobcore_chunk, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/wood, -/area/space) -"rFe" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plating, -/area/space) -"rFv" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/plating, -/area/space) -"rFI" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"rFR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating/external, -/area/space) -"rFW" = ( -/obj/machinery/power/tesla_coil, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8"; - dir = 2 - }, -/turf/simulated/floor/airless, -/area/space) -"rGv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rGC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 8 - }, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/shuttle/floor/alien, -/area/space) -"rGT" = ( -/obj/structure/loot_pile/surface/alien/medical, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rHf" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/space) -"rHI" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"rHS" = ( -/obj/structure/table/fancyblack, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -32 - }, -/obj/item/device/paicard, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"rJp" = ( -/obj/random/junk, -/turf/simulated/floor/plating/external, -/area/space) -"rJs" = ( -/obj/machinery/door/airlock/angled_tgmc/maintenance, -/turf/simulated/floor/plating, -/area/space) -"rKs" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"rKE" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"rKI" = ( -/obj/structure/window/reinforced/survival_pod{ - density = 0; - dir = 9; - icon_state = "pwindow" - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"rLa" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"rLf" = ( -/obj/structure/table/glass, -/obj/item/device/defib_kit/loaded, -/obj/structure/closet/walllocker_double/medical/south, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/toxin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/surgery, -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/shuttle/floor/white, -/area/space) -"rLz" = ( -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rLB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/button/remote/airlock{ - id = "Avalon-room3"; - name = "Room 3 Bolt Control"; - pixel_y = 29; - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"rNl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"rNR" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"rNT" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"rOx" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"rOE" = ( -/obj/structure/flora/bboulder1, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rOH" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"rPt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"rPx" = ( -/obj/effect/floor_decal/techfloor/orange/corner, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/space) -"rPz" = ( -/obj/machinery/light/small/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rQd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -28 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"rQn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "stargazer"; - pixel_y = 26; - tag_airpump = "stargazer_pump"; - tag_chamber_sensor = "stargazer_sensor"; - tag_exterior_door = "stargazer_outer"; - tag_interior_door = "stargazer_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "stargazer_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"rQS" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"rQX" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/template_noop, -/area/space) -"rRf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"rSk" = ( -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"rTg" = ( -/obj/structure/filingcabinet/medical{ - desc = "A large cabinet with hard copy medical records."; - name = "Medical Records" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/purple, -/area/space) -"rTh" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/poi, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"rTB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rTZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rUy" = ( -/obj/structure/simple_door/resin, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"rUz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/double{ - dir = 8; - name = "Boardroom"; - req_access = list(19) - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"rUN" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors/weak, -/turf/simulated/shuttle/plating, -/area/space) -"rVe" = ( -/turf/simulated/wall/r_wall, -/area/space) -"rVg" = ( -/obj/effect/fancy_shuttle/orangeline, -/turf/template_noop, -/area/space) -"rVw" = ( -/turf/simulated/floor/carpet/turcarpet, -/area/space) -"rVV" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"rWi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"rWD" = ( -/obj/structure/prop/transmitter, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"rWK" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, -/turf/simulated/floor/plating, -/area/space) -"rXc" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rXt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"rXu" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"rXD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"rYB" = ( -/obj/structure/curtain/open/privacy, -/turf/simulated/shuttle/floor/white, -/area/space) -"rYF" = ( -/obj/structure/fans/hardlight, -/turf/template_noop, -/area/space) -"rYN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/space) -"rYP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 8; - name = "Air to Distro" - }, -/turf/simulated/floor, -/area/space) -"rZe" = ( -/obj/machinery/vending/nifsoft_shop{ - dir = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"rZr" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumbath" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"rZM" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/turf/simulated/floor/airless, -/area/space) -"say" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"saC" = ( -/obj/machinery/porta_turret/alien{ - faction = "hivebot" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"saK" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/power/emitter/gyrotron/anchored{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sbq" = ( -/obj/machinery/computer/ship/disperser{ - dir = 4 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"sbz" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"sbA" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"scE" = ( -/obj/machinery/media/jukebox/casinojukebox, -/turf/simulated/floor/wood/sif, -/area/space) -"scN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"scR" = ( -/obj/machinery/smartfridge/survival_pod{ - name = "Advanced storage" - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/device/t_scanner, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/geiger, -/obj/item/device/geiger, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/gps{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/matter_bin, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/micro_laser, -/obj/item/weapon/stock_parts/scanning_module, -/obj/item/weapon/stock_parts/scanning_module, -/obj/item/weapon/stock_parts/capacitor, -/obj/item/weapon/stock_parts/capacitor, -/obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/turf/simulated/shuttle/floor/purple, -/area/space) -"scS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/random/mob/robotic/hivebot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"scU" = ( -/obj/effect/decal/cleanable/blood/gibs{ - color = "red"; - icon_state = "gib2_flesh" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sdi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"sdS" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/full{ - pixel_y = 5 - }, -/obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; - name = "Station Intercom (Brig Radio)"; - pixel_y = -21; - wires = 7 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"seb" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"seB" = ( -/obj/machinery/light{ - layer = 3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/space) -"seK" = ( -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "SP-Cell2"; - name = "Cell Door"; - pixel_x = -25; - pixel_y = 8; - req_one_access = list(2,4) - }, -/obj/structure/closet/walllocker_double/survival/south, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"seL" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"seO" = ( -/obj/machinery/gateway/brass{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"seP" = ( -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"sfG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/plasteel, -/turf/simulated/floor, -/area/space) -"sgJ" = ( -/obj/machinery/light/small/emergency{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"sgW" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"shk" = ( -/obj/item/weapon/antag_spawner/syndicate_drone/combat_medic, -/turf/template_noop, -/area/space) -"shx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/dark, -/area/space) -"shE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"shZ" = ( -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 8; - id = "echidna_hatch"; - name = "Rear Hatch Control"; - pixel_x = 26; - req_access = list(67); - specialfunctions = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"sij" = ( -/obj/effect/alien/weeds, -/turf/template_noop, -/area/space) -"siq" = ( -/obj/machinery/particle_accelerator/control_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"six" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/space) -"siy" = ( -/obj/structure/largecrate/animal/catgirl, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"siL" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"siU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"siX" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "smartfridge"; - icon_contents = "boxes"; - icon_state = "smartfridge"; - name = "Advanced storage"; - pixel_y = -1 - }, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/bee_pack, -/obj/item/bee_pack, -/obj/item/bee_smoker, -/obj/item/bee_smoker, -/obj/item/beehive_assembly, -/obj/item/beehive_assembly, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/crowbar, -/obj/item/device/analyzer/plant_analyzer, -/obj/item/device/analyzer/plant_analyzer, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/head/greenbandana, -/obj/item/clothing/head/greenbandana, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/tool/wirecutters/clippers/trimmers, -/obj/item/weapon/tool/wirecutters/clippers/trimmers, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/clothing/suit/storage/apron/overalls, -/obj/item/clothing/suit/storage/apron/overalls, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"siZ" = ( -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/turf/simulated/floor, -/area/space) -"sjc" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sjB" = ( -/obj/item/stolenpackage, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sjH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sjS" = ( -/obj/structure/flora/tree/pine/xmas, -/turf/simulated/floor/tiled, -/area/space) -"sjU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"sjW" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/dice, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"skp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"skr" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"skT" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 1 - }, -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/airless, -/area/space) -"skV" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"smd" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/closet/jcloset, -/obj/item/weapon/mop, -/obj/structure/mopbucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/simulated/shuttle/plating, -/area/space) -"snk" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"snv" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "estrella_outer"; - locked = 1; - name = "External Access" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/space) -"snB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"snJ" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"snW" = ( -/obj/machinery/atmospherics/omni/atmos_filter{ - name = "CO2 Filter"; - tag_east = 2; - tag_north = 1; - tag_south = 5 - }, -/turf/simulated/floor, -/area/space) -"sof" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = -30 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"sou" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/kitchen/rollingpin, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/white, -/area/space) -"soE" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"spj" = ( -/obj/machinery/vending/security/yw{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777); - req_log_access = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"spE" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"sqL" = ( -/obj/structure/bed/chair, -/obj/effect/alien/weeds, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"srA" = ( -/obj/mecha/combat/scarab, -/turf/template_noop, -/area/space) -"srZ" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "stargazer_outer"; - name = "External Access" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "stargazer"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ssc" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/space) -"ssp" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/item/weapon/packageWrap, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ssw" = ( -/obj/effect/floor_decal/flesh, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ssE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ssV" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"stc" = ( -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/turf/simulated/shuttle/plating, -/area/space) -"stl" = ( -/obj/structure/table/glass, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/newscaster{ - pixel_y = -30 - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"stU" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/item/weapon/clipboard, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"sud" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper_bin, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"sus" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/space) -"suu" = ( -/turf/simulated/floor/beach/sand, -/area/space) -"suw" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"suG" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"suK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"svC" = ( -/obj/machinery/light, -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"swc" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"swk" = ( -/obj/effect/gibspawner/human, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"swv" = ( -/obj/structure/shuttle/engine/router, -/turf/simulated/shuttle/wall, -/area/space) -"swH" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/shuttle/plating, -/area/space) -"sxf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"sxJ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Phoron to Connector" - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"syf" = ( -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"sym" = ( -/obj/effect/gibspawner, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"syv" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, -/turf/template_noop, -/area/space) -"syO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"syR" = ( -/obj/machinery/power/generator{ - anchored = 1; - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"syZ" = ( -/obj/structure/table/standard, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/flashlight/pen, -/obj/item/clothing/glasses/hud/health, -/turf/simulated/floor/tiled/white, -/area/space) -"szl" = ( -/obj/structure/loot_pile/surface/alien/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"szm" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"szx" = ( -/obj/effect/meteor/irradiated, -/turf/template_noop, -/area/space) -"szS" = ( -/obj/machinery/shower, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"szT" = ( -/obj/effect/alien/weeds/node, -/turf/simulated/floor, -/area/space) -"szW" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sAg" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"sAj" = ( -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/turf/simulated/floor/wood/sif, -/area/space) -"sAq" = ( -/obj/structure/table/sifwoodentable, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"sAt" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, -/area/space) -"sBp" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"sCm" = ( -/obj/structure/stairs/bottom, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"sCp" = ( -/obj/machinery/feeder, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sCs" = ( -/turf/simulated/wall/dungeon, -/area/space) -"sCv" = ( -/obj/machinery/mineral/stacking_unit_console, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"sDg" = ( -/obj/structure/closet/walllocker_double/medical/west, -/obj/item/weapon/storage/firstaid, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/roller, -/obj/item/device/defib_kit/loaded, -/turf/simulated/shuttle/floor/white, -/area/space) -"sDx" = ( -/obj/structure/bed/double, -/obj/item/weapon/bedsheet/yellowdouble, -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"sDP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/space) -"sEo" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"sEH" = ( -/obj/structure/hull_corner/long_vert{ - dir = 9 - }, -/turf/template_noop, -/area/space) -"sEO" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sET" = ( -/obj/item/weapon/pen/fountain, -/turf/simulated/floor/wood, -/area/space) -"sFL" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/toilet{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"sFZ" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "shelterblast"; - name = "Shelter Blast Doors"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"sGy" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand11" - }, -/area/space) -"sGG" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/prop/lock/projectile{ - pixel_y = 6 - }, -/turf/simulated/floor/greengrid, -/area/space) -"sGH" = ( -/obj/fire, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sHg" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 1 - }, -/obj/machinery/power/apc/hyper{ - dir = 4; - pixel_x = 23 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"sHj" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"sHK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"sIx" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"sIY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"sJe" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"sJh" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sJq" = ( -/obj/machinery/autolathe, -/obj/item/weapon/rcd/advanced/loaded{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/weapon/rcd_ammo/large, -/obj/item/weapon/rcd_ammo/large, -/turf/simulated/floor/plating, -/area/space) -"sJA" = ( -/obj/machinery/telecomms/allinone, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"sJB" = ( -/obj/item/clothing/accessory/solgov/rank/fleet/flag, -/turf/template_noop, -/area/space) -"sJT" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"sKd" = ( -/obj/effect/effect/steam, -/turf/simulated/floor/holofloor/beach/coastline, -/area/space) -"sKi" = ( -/obj/machinery/gibber/autogibber{ - emagged = 1 - }, -/turf/simulated/floor, -/area/space) -"sKv" = ( -/obj/machinery/disposal/wall{ - dir = 8; - pixel_x = 35; - pixel_y = 0 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"sLy" = ( -/obj/structure/salvageable/server, -/turf/simulated/floor/plating/external, -/area/space) -"sMk" = ( -/obj/structure/particle_accelerator/fuel_chamber{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sMD" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"sNj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"sNx" = ( -/turf/simulated/floor/carpet/gaycarpet, -/area/space) -"sNB" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 1 - }, -/turf/template_noop, -/area/space) -"sNM" = ( -/obj/machinery/light/poi, -/turf/simulated/floor/wood, -/area/space) -"sOt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"sOv" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/alien/weeds, -/obj/machinery/light/small/emergency/flicker{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"sOy" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"sPn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"sPs" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 1"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"sPA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"sQq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/turf/simulated/floor/plating, -/area/space) -"sQC" = ( -/obj/machinery/computer/shuttle_control, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"sQJ" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "SP-CargoHatch"; - locked = 1; - name = "Rear Hatch" - }, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 4; - id = "SP-CargoHatch"; - name = "Rear Hatch Control"; - pixel_x = -26; - req_access = null; - specialfunctions = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"sQP" = ( -/obj/machinery/light/poi, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sQR" = ( -/obj/structure/table/darkglass, -/obj/item/device/binoculars, -/obj/item/device/megaphone/super, -/obj/item/device/binoculars, -/obj/machinery/button/windowtint{ - id = "atriumeast"; - pixel_x = -22 - }, -/obj/machinery/button/flasher{ - id = "atriumflash"; - pixel_x = -30 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"sRn" = ( -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/plating, -/area/space) -"sRs" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"sRL" = ( -/obj/structure/prop/alien/pod, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sRR" = ( -/obj/structure/ghost_pod/manual/lost_drone/dogborg, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sRY" = ( -/obj/structure/fans/hardlight/colorable{ - invisibility = 99 - }, -/turf/simulated/floor/gorefloor, -/area/space) -"sSo" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"sSx" = ( -/obj/structure/bed/chair/bay/comfy{ - dir = 4; - pixel_x = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"sSC" = ( -/turf/simulated/floor/gorefloor, -/area/space) -"sTq" = ( -/obj/structure/constructshell/cult, -/turf/simulated/floor/gorefloor2, -/area/space) -"sTs" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Pole Dance Room" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"sTT" = ( -/obj/machinery/vr_sleeper/alien/random_replicant, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"sTV" = ( -/obj/item/weapon/photo, -/obj/item/weapon/photo{ - pixel_x = 4 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/space) -"sUl" = ( -/obj/structure/window/plastitanium/full, -/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/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "stargazer_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"sUD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"sUE" = ( -/turf/simulated/floor/tiled/monotile, -/area/space) -"sVo" = ( -/mob/living/simple_mob/mechanical/hivebot/swarm, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sVu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"sVQ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 6; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"sVY" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - dir = 4; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/device/nif/bad, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/tracking, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/implantcase/chem, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/obj/item/weapon/disk/nifsoft/compliance, -/turf/simulated/shuttle/floor/white, -/area/space) -"sWr" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"sWv" = ( -/turf/simulated/floor/water/beach, -/area/space) -"sXy" = ( -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"sXB" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"sYn" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/characters, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/space) -"sYC" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"sYI" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/space) -"sYT" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/blue, -/area/space) -"sZh" = ( -/obj/structure/table/reinforced, -/obj/machinery/cash_register/civilian{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"sZq" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "stargazer_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"sZt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/structure/shuttle/engine/router, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"sZv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = "baby_mammoth_pump" - }, -/obj/machinery/light, -/turf/simulated/shuttle/plating, -/area/space) -"sZz" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"sZF" = ( -/obj/structure/closet/cabinet, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/toy, -/obj/random/toy, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/wood, -/area/space) -"sZG" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 25 - }, -/turf/simulated/shuttle/plating, -/area/space) -"tai" = ( -/obj/structure/table/rack/shelf/steel, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tav" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/shield_projector/line, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"taA" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tbe" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westleft{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/suit/armor/alien/tank, -/obj/item/clothing/head/helmet/alien/tank, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"tbk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/alien/blue, -/area/space) -"tbt" = ( -/obj/structure/flora/ausbushes/sparsegrass, -/turf/simulated/floor/grass, -/area/space) -"tbW" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/simulated/floor/tiled/white, -/area/space) -"tci" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"tcp" = ( -/obj/structure/flora/lily3, -/turf/simulated/floor/beach/water, -/area/space) -"tcq" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"tdb" = ( -/obj/machinery/vr_sleeper/alien/random_replicant, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"tdk" = ( -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"tdq" = ( -/obj/machinery/button/windowtint{ - id = "exam1"; - pixel_y = 24 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"tdv" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/item/slimepotion/docility, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tdA" = ( -/turf/simulated/floor/flock, -/area/space) -"tdE" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"tdT" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/space) -"tea" = ( -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Starboard Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"teb" = ( -/obj/item/weapon/book/manual/barman_recipes, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/reagent_containers/glass/rag, -/obj/structure/table/gamblingtable, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"tej" = ( -/obj/structure/table/darkglass, -/obj/item/device/binoculars, -/turf/simulated/floor/wood/sif, -/area/space) -"tek" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, -/obj/item/weapon/circuitboard/mecha/imperion/phasing, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tep" = ( -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"tet" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_x = -32; - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"teP" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 5"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"tfg" = ( -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"tfy" = ( -/obj/structure/disposalpipe/sortjunction/untagged{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"tfz" = ( -/obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/closet/walllocker_double/survival/west, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"tfL" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/clipboard, -/obj/item/weapon/folder/white, -/obj/item/weapon/pen, -/obj/item/weapon/reagent_containers/dropper{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"thf" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/obj/effect/alien/weeds, -/obj/item/stolenpackage, -/obj/item/organ/internal/fruitgland, -/obj/item/organ/internal/intestine/xeno, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"thm" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam2" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"tji" = ( -/obj/structure/table/rack/shelf/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/reinforced, -/area/space) -"tjy" = ( -/obj/machinery/exonet_node/map, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tjB" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/plating/external, -/area/space) -"tjE" = ( -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/structure/fans/tiny, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "shelterblast"; - name = "Shelter Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tjR" = ( -/obj/machinery/door/airlock/alien{ - name = "Expedition Storage"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"tkp" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tkz" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"tkL" = ( -/turf/simulated/floor/grass2, -/area/space) -"tlj" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell"; - name = "Cell Locker" - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tln" = ( -/obj/structure/flora/grass/brown, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tlr" = ( -/obj/item/weapon/a_gift, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tly" = ( -/obj/structure/table/sifwoodentable, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/carpet/blue, -/area/space) -"tmc" = ( -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor/alien, -/area/space) -"tmJ" = ( -/obj/machinery/computer/teleporter{ - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tmS" = ( -/turf/simulated/floor/outdoors/ironsand{ - icon_state = "ironsand10" - }, -/area/space) -"tmV" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 8 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"tmZ" = ( -/obj/structure/closet/secure_closet/engineering_welding{ - req_access = null - }, -/obj/random/maintenance, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"tnk" = ( -/obj/effect/floor_decal/borderfloorblack, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/dark, -/area/space) -"tnu" = ( -/obj/machinery/implantchair, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"tof" = ( -/obj/item/weapon/surgical/circular_saw/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"tos" = ( -/turf/template_noop, -/area/survivalpod/superpose/CultShip) -"toV" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/space) -"tpd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"tpT" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tql" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"tqw" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "fix0_9" - }, -/turf/simulated/floor/tiled, -/area/space) -"trQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/grey{ - dir = 1 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/bluegrid, -/area/space) -"trU" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/turf/template_noop, -/area/space) -"tsL" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ttn" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"ttu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ttE" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ttK" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/black, -/area/space) -"tul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tuD" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"tuL" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"tuP" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - pixel_x = -26 - }, -/turf/simulated/floor, -/area/space) -"tva" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tvj" = ( -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"tvv" = ( -/obj/structure/fans, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tvJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/bed/chair/bay/shuttle, -/obj/structure/sign/poster/nanotrasen{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"tvM" = ( -/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/simulated/floor/plating, -/area/space) -"twa" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"twf" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/fusion_fuel_injector/mapped, -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"twq" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/telecomms/relay/preset/ruskie, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"twE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/grounding_rod/pre_mapped{ - item_state = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"twL" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"twS" = ( -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"twZ" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"txL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"txV" = ( -/obj/machinery/power/emitter{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/space) -"txW" = ( -/obj/machinery/field_generator, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tyo" = ( -/obj/machinery/flasher{ - id = "exaroom4"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/carpet/blucarpet, -/area/space) -"tyT" = ( -/obj/structure/cable{ - d1 = 6; - d2 = 8; - icon_state = "6-8" - }, -/turf/simulated/floor/plating, -/area/space) -"tyX" = ( -/obj/random/crate, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tzn" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/machinery/washing_machine{ - pixel_x = 2; - pixel_y = 18 - }, -/obj/item/weapon/storage/laundry_basket{ - pixel_x = -1; - pixel_y = -7 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tzK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/floor/plating, -/area/space) -"tzS" = ( -/obj/structure/loot_pile/surface, -/turf/simulated/floor/plating, -/area/space) -"tAp" = ( -/obj/structure/bed/chair/sofa/black, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/space) -"tAt" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tAG" = ( -/obj/effect/gateway/active/cult, -/turf/simulated/floor/gorefloor2, -/area/space) -"tAH" = ( -/obj/item/capture_crystal/cass, -/turf/template_noop, -/area/space) -"tAW" = ( -/obj/structure/bed/alien, -/turf/simulated/floor, -/area/space) -"tBb" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"tBS" = ( -/obj/machinery/door/window{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"tBU" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/turf/simulated/floor, -/area/space) -"tCk" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/projectile/automatic/sts35, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/sniperrifle, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"tCD" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/storage/belt/utility/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"tDK" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/full, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tDR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"tEo" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/purple, -/area/space) -"tEz" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/space) -"tEQ" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/space) -"tFb" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"tFw" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/cryofeed{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"tFI" = ( -/obj/item/weapon/stool/baystool/padded{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tFT" = ( -/obj/machinery/teleport/station{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod) -"tGb" = ( -/turf/simulated/floor/redgrid/off, -/area/space) -"tGh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Kodiak Shuttle Bay" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tGA" = ( -/obj/machinery/porta_turret/industrial/military, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tGJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tGL" = ( -/obj/machinery/power/apc/hyper{ - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/space) -"tGV" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"tHc" = ( -/obj/item/weapon/portable_destructive_analyzer, -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"tHh" = ( -/obj/structure/table/rack/shelf/steel, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tHq" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central2, -/turf/simulated/floor/tiled, -/area/space) -"tHJ" = ( -/obj/item/weapon/bone/ribs, -/turf/simulated/floor/lava, -/area/space) -"tIr" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - id = "stargazer_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"tIv" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tII" = ( -/obj/effect/map_effect/beam_point, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tIM" = ( -/obj/machinery/power/grounding_rod, -/turf/simulated/floor, -/area/space) -"tIT" = ( -/obj/structure/noticeboard/anomaly, -/turf/simulated/wall/skipjack, -/area/space) -"tJg" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tJi" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/template_noop, -/area/space) -"tJn" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/flame/candle/candelabra, -/turf/simulated/floor/wood/sif, -/area/space) -"tJF" = ( -/turf/simulated/floor/grass, -/area/space) -"tJP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"tKm" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/structure/sink{ - pixel_y = 16 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tKn" = ( -/obj/structure/table, -/obj/machinery/light{ - layer = 3 - }, -/turf/simulated/floor/wood, -/area/space) -"tKu" = ( -/obj/random, -/turf/simulated/floor/plating, -/area/space) -"tKy" = ( -/obj/machinery/light/small/flicker, -/obj/structure/closet/alien, -/obj/item/device/perfect_tele_beacon/stationary{ - tele_name = "Unknown"; - tele_network = "abd2" - }, -/turf/simulated/floor/cult, -/area/space) -"tKS" = ( -/obj/structure/prop/fake_ai{ - name = "P0ps1ck13" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"tLb" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tLc" = ( -/obj/item/sniper_rifle_part/barrel, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tLG" = ( -/obj/structure/disposalpipe/up{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"tLU" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"tLX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "exaroom4"; - pixel_y = 31 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"tMj" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"tMW" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"tMY" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"tNh" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/cee, -/obj/machinery/light, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "needle_sensor"; - pixel_x = -28; - pixel_y = -1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"tNr" = ( -/obj/structure/cliff/automatic{ - dir = 2 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tNF" = ( -/obj/structure/table, -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/storage/backpack/holding, -/turf/simulated/floor, -/area/space) -"tNR" = ( -/obj/structure/sign/nosmoking_2{ - pixel_x = 30 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"tNU" = ( -/obj/effect/wingrille_spawn/reinforced, -/obj/structure/fans/hardlight, -/turf/simulated/floor/plating/external, -/area/space) -"tOh" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"tOm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor/plating/external, -/area/space) -"tOC" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, -/obj/item/weapon/gun/energy/laser/sleek, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tOR" = ( -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/turf/simulated/floor, -/area/space) -"tOZ" = ( -/obj/machinery/door/airlock/angled_tgmc/cell{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"tPk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"tPy" = ( -/obj/machinery/telecomms/allinone, -/turf/template_noop, -/area/space) -"tPB" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/weapon/paper/alien, -/turf/simulated/shuttle/floor/alien, -/area/space) -"tQT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tQW" = ( -/obj/structure/prop/lock/projectile{ - pixel_y = 6 - }, -/turf/simulated/floor/dungeon, -/area/space) -"tRj" = ( -/obj/machinery/vending/tool, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tRD" = ( -/obj/structure/stripper_pole, -/turf/simulated/shuttle/floor/black, -/area/space) -"tRM" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"tRW" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/chemical_dispenser/ert/specialops/abductor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tSl" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/taser, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/vrlanguage, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/sprinter, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/shades, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/freedom, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/death_alarm, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implantcase/exile, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implanter, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/toolkit, -/obj/item/weapon/implantcase/armblade, -/obj/item/weapon/implantcase/armblade, -/obj/item/weapon/implantcase/armblade, -/obj/item/weapon/implantcase/armblade, -/obj/item/weapon/implantcase/armblade, -/obj/item/weapon/implantcase/armblade, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"tSz" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 1 - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/space) -"tTw" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"tTG" = ( -/obj/item/weapon/storage/firstaid, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"tTI" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"tTO" = ( -/obj/machinery/requests_console{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/space) -"tTX" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled, -/area/space) -"tUf" = ( -/obj/structure/table/darkglass, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/wood/sif, -/area/space) -"tUO" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"tVj" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tVm" = ( -/obj/structure/closet/walllocker_double/kitchen/north{ - dir = 8; - name = "Ration Cabinet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"tVo" = ( -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tVz" = ( -/obj/structure/window/basic, -/turf/simulated/floor/tiled, -/area/space) -"tWd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "estrella_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"tWJ" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 1; - icon_state = "door_locked"; - id_tag = "echidna_inner"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/plating, -/area/space) -"tXM" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"tXS" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tYv" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"tZC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"tZV" = ( -/obj/structure/reagent_dispensers/water_cooler/full{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"tZZ" = ( -/obj/machinery/shuttle_sensor, -/turf/simulated/shuttle/wall/hard_corner, -/area/space) -"uaK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/structure/closet/secure_closet/guncabinet{ - req_one_access = null - }, -/obj/item/clothing/head/helmet/combat/USDF, -/obj/item/clothing/head/helmet/combat/USDF, -/obj/item/clothing/suit/armor/combat/USDF, -/obj/item/clothing/suit/armor/combat/USDF, -/obj/item/device/flash, -/obj/item/device/flash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"uaN" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/weapon/implanter/compressed, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uaT" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uaW" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"ube" = ( -/obj/structure/flora/pumpkin, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ubh" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"ubm" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"ucw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm/angled{ - dir = 8; - pixel_x = -22 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"ucx" = ( -/obj/machinery/atmospherics/omni/atmos_filter{ - name = "N2/O2 Filter"; - tag_east = 4; - tag_north = 3; - tag_south = 2; - tag_west = 1 - }, -/turf/simulated/floor, -/area/space) -"ucE" = ( -/turf/simulated/floor/plating, -/area/space) -"ucG" = ( -/obj/structure/prop/alien/pod/open, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ucI" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"ucM" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "garbagetwo"; - name = "disposal coveyor" - }, -/turf/simulated/floor/cult, -/area/space) -"udp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood, -/area/space) -"udB" = ( -/obj/machinery/computer/telescience{ - dir = 1; - distance_off = 0; - powerCoefficient = 25; - rotation_off = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"udE" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/voidcraft/survival_pod, -/obj/effect/floor_decal/industrial/danger/full, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 1; - icon_state = "pdoor0"; - id = "shelterblast"; - name = "Shelter Blast Doors"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"udM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor, -/area/space) -"udP" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"udS" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/emitter{ - anchored = 1; - dir = 1; - state = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"udW" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/random/trash, -/turf/simulated/floor/wood, -/area/space) -"uez" = ( -/obj/effect/decal/remains/mummy1, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ueE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/teal, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ueP" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/ammo, -/obj/random/cigarettes, -/obj/random/contraband, -/obj/random/junk, -/obj/random/maintenance/security, -/turf/simulated/floor/wood, -/area/space) -"ufa" = ( -/obj/effect/alien/weeds, -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor, -/area/space) -"ufx" = ( -/obj/structure/table/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - icon_state = "pwindow" - }, -/obj/machinery/recharger{ - pixel_x = -5; - pixel_y = 0 - }, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ufB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ufG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"ufH" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"ugd" = ( -/obj/structure/sign/mining/survival, -/turf/simulated/shuttle/wall/voidcraft/red, -/area/survivalpod) -"uge" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Unisex Bathroom" - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ugv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ugy" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Portside Lower Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"ugC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"ugN" = ( -/mob/living/simple_mob/animal/passive/cat/bones{ - desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; - name = "Felix" - }, -/turf/simulated/floor/wood, -/area/space) -"ugX" = ( -/obj/structure/cryofeed, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"uha" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"uhz" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uhJ" = ( -/obj/random/trash, -/turf/simulated/floor, -/area/space) -"uhN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uhX" = ( -/turf/simulated/floor/carpet/blucarpet, -/area/space) -"uhZ" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/alien/weeds, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"uiT" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "19" - }, -/turf/template_noop, -/area/space) -"uiZ" = ( -/obj/screen/alert/highpressure, -/turf/template_noop, -/area/space) -"ujr" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"ujt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/door/airlock/alien/blue/public, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"ujN" = ( -/obj/structure/closet/alien, -/obj/item/weapon/weldingtool/alien, -/obj/item/weapon/storage/belt/utility/alien/full, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ukD" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"ulw" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ulP" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"ulT" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/space) -"ulZ" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/alarms_hidden{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/plating/external, -/area/space) -"umb" = ( -/obj/machinery/chem_master, -/turf/simulated/shuttle/floor/purple, -/area/space) -"umy" = ( -/obj/machinery/door/airlock/alien{ - name = "Medical"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"umH" = ( -/obj/structure/bed/double/padded, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/space) -"umS" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Upper Thruster One" - }, -/turf/simulated/floor, -/area/space) -"unA" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"unD" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"uog" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"uoi" = ( -/obj/structure/flora/grass/green, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uop" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"uoy" = ( -/turf/simulated/wall/solidrock, -/area/space) -"uoF" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uoH" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"uoQ" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - req_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"uoR" = ( -/obj/structure/simple_door/wood, -/obj/structure/sign/graffiti/pisoff, -/turf/simulated/floor/wood, -/area/space) -"upq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"upK" = ( -/mob/living/simple_mob/mechanical/hivebot/swarm, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"upR" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/space) -"uqx" = ( -/obj/effect/alien/weeds, -/obj/structure/mopbucket, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"uqP" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/space) -"urd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"usi" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/space) -"usw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating/external, -/area/space) -"usG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"uty" = ( -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/glass/reinforced, -/area/space) -"utD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"utL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/turf/simulated/floor, -/area/space) -"uue" = ( -/obj/structure/closet/cabinet{ - pixel_y = 20 - }, -/obj/item/weapon/implanter/sizecontrol, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/uranium, -/obj/item/weapon/ore/phoron, -/obj/item/weapon/ore/phoron, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/gold, -/obj/item/weapon/ore/diamond, -/obj/item/weapon/ore/marble, -/obj/item/weapon/ore/osmium, -/obj/item/weapon/ore/rutile, -/obj/item/toy/bosunwhistle/fluff/strix, -/obj/item/toy/character/wizard, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, -/obj/item/weapon/fluff/squeezetoy, -/obj/item/weapon/fluff/zekewatch, -/obj/item/weapon/fluff/fidgetspinner/red, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/turf/simulated/floor/wood, -/area/space) -"uuZ" = ( -/obj/item/weapon/spacecash/c1000, -/turf/template_noop, -/area/space) -"uvT" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"uvZ" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/hosdouble, -/turf/simulated/floor/carpet/gaycarpet, -/area/space) -"uwh" = ( -/mob/living/simple_mob/animal/space/alien/sentinel, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"uwo" = ( -/obj/machinery/door/airlock/alien{ - name = "East Engine"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"uwz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"uwY" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "echidna_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "echidna"; - pixel_y = 26; - tag_airpump = "echidna_pump"; - tag_chamber_sensor = "echidna_sensor"; - tag_exterior_door = "echidna_outer"; - tag_interior_door = "echidna_inner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/shuttle/plating, -/area/space) -"uyj" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/table/darkglass, -/obj/machinery/recharger{ - pixel_x = 6 - }, -/obj/machinery/recharger{ - pixel_x = -6 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"uyk" = ( -/obj/effect/alien/weeds, -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"uyJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uze" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "estrella"; - name = "exterior access button"; - pixel_y = 26 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id = "estrella_blast"; - layer = 2; - name = "window blast shield"; - open_layer = 2 - }, -/turf/simulated/shuttle/plating, -/area/space) -"uzj" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/deck/cah{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/deck/cah/black{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"uzD" = ( -/obj/item/weapon/spacecash/ewallet{ - worth = 750 - }, -/turf/template_noop, -/area/space) -"uzG" = ( -/obj/effect/catwalk_plated/white, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/template_noop, -/area/space) -"uzS" = ( -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"uAv" = ( -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"uAJ" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/storage/box/matches{ - pixel_x = -4; - pixel_y = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"uBh" = ( -/obj/machinery/door/airlock/maintenance/command{ - req_one_access = null - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"uBn" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"uBz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 26 - }, -/turf/simulated/floor, -/area/space) -"uCg" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/space) -"uCl" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"uCq" = ( -/obj/machinery/atmospherics/omni/mixer{ - name = "Air Mixer"; - tag_north = 2; - tag_south = 1; - tag_south_con = 0.79; - tag_west = 1; - tag_west_con = 0.21 - }, -/turf/simulated/floor, -/area/space) -"uCt" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/tealcarpet, -/area/space) -"uCu" = ( -/obj/effect/fusion_em_field, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uDk" = ( -/obj/machinery/vr_sleeper/alien/beta_replicant, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uDW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"uEa" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/oracarpet, -/area/space) -"uEw" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/obj/effect/step_trigger/message{ - message = "Finally, you gaze upon a horror your sanity fails to understand. The numbness of your body fades as the sound of glass shattering fills your mind, the horrifying sensation of barbed wire tangling your body as every waking second you spend gazing upon this nightmare tightens those bonds. . . Is this what your mortal coil desires?. . ."; - once = 0 - }, -/turf/simulated/floor/gorefloor, -/area/space) -"uEA" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"uEJ" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi, -/obj/item/weapon/surgical/bonesetter, -/obj/item/weapon/bone/ribs, -/obj/item/weapon/bone/skull{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/simulated/floor, -/area/space) -"uEV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"uEX" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"uFN" = ( -/obj/item/weapon/reagent_containers/blood, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/deck/tarot, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/space) -"uFQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/weapon/implanter/adrenalin, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uGr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/space) -"uGy" = ( -/obj/structure/cliff/automatic{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uHp" = ( -/obj/machinery/atmospherics/pipe/tank/oxygen{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"uHw" = ( -/obj/structure/cryofeed, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uIa" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uIb" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2; - req_one_access = null - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uIp" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uIX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"uJc" = ( -/obj/effect/map_effect/portal/master/side_b{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uJy" = ( -/obj/structure/table/survival_pod, -/obj/machinery/recharger{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ - pixel_x = 1; - pixel_y = 15 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uKi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uKj" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/turf/simulated/floor/plating, -/area/space) -"uKH" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uKP" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uLe" = ( -/obj/structure/fans/hardlight/colorable{ - invisibility = 99 - }, -/turf/simulated/floor/gorefloor2, -/area/space) -"uLC" = ( -/obj/structure/largecrate/animal/wolfgirl, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uLN" = ( -/obj/structure/disposalpipe/sortjunction/wildcard{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"uMv" = ( -/obj/machinery/vending/foodfast, -/turf/simulated/shuttle/wall/voidcraft/survival, -/area/space) -"uMB" = ( -/obj/machinery/sleep_console, -/turf/simulated/shuttle/floor/white, -/area/space) -"uMC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uMN" = ( -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/space) -"uMQ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/space) -"uOg" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/shuttle/plating, -/area/space) -"uOr" = ( -/obj/machinery/light/small, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uOF" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uOO" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"uOR" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"uPa" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/space) -"uPc" = ( -/obj/machinery/telecomms/allinone/antag, -/turf/template_noop, -/area/space) -"uPd" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "4" - }, -/turf/template_noop, -/area/space) -"uPf" = ( -/obj/structure/inflatable/door, -/turf/simulated/floor/plating, -/area/space) -"uPk" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uPr" = ( -/obj/structure/bonfire, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uPL" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uPN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"uPY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/maintenance/engi{ - req_one_access = null - }, -/turf/simulated/floor/plating/external, -/area/space) -"uQk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uQV" = ( -/obj/machinery/gear_dispenser/suit/autolok, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uRg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uRL" = ( -/obj/structure/cable{ - d2 = 10; - icon_state = "0-10" - }, -/turf/simulated/floor/plating, -/area/space) -"uRR" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - req_one_access = null - }, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/weapon/gun/energy/locked/frontier, -/obj/item/weapon/gun/energy/locked/frontier, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"uRU" = ( -/obj/structure/largecrate/animal/goat, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uRX" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/weapon/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"uSs" = ( -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"uSU" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"uTd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"uTg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"uTl" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uTE" = ( -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/item/device/radio/electropack, -/obj/item/clothing/accessory/collar/shock, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/turf/simulated/floor, -/area/space) -"uTP" = ( -/obj/effect/map_effect/portal/line/side_a, -/obj/effect/map_effect/perma_light/concentrated, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"uUF" = ( -/obj/effect/gibspawner/human/xenochimera, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"uUP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"uUV" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"uVk" = ( -/obj/structure/bed/chair/sofa/right/black, -/turf/simulated/floor/wood, -/area/space) -"uVs" = ( -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"uVO" = ( -/obj/mecha/working/ripley/firefighter, -/turf/template_noop, -/area/space) -"uWf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/space) -"uWm" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 4 - }, -/turf/simulated/floor/greengrid, -/area/space) -"uWA" = ( -/obj/machinery/the_singularitygen/tesla{ - anchored = 1; - pixel_y = 11 - }, -/obj/effect/floor_decal/industrial/danger/full, -/obj/effect/floor_decal/plaque{ - name = "Anchors" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uWE" = ( -/obj/structure/table/alien/blue, -/obj/machinery/chemical_dispenser/ert/specialops/abductor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"uWI" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uWP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/random/junk, -/turf/simulated/floor/plating/external, -/area/space) -"uWR" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"uYC" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - name = "Avalon Boardroom Blast Door"; - id = "Avalon-boardroom" - }, -/turf/simulated/floor/reinforced, -/area/space) -"uYH" = ( -/obj/structure/table/darkglass, -/obj/machinery/recharger, -/turf/simulated/floor/carpet, -/area/space) -"uYZ" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"uZr" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"uZI" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"uZM" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - pixel_y = -32 - }, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"uZS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"vaq" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"var" = ( -/obj/machinery/light/spot, -/obj/structure/lattice, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"vaM" = ( -/obj/machinery/power/apc/hyper{ - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"vaU" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor/hole/right, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vbb" = ( -/obj/effect/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"vbi" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vbv" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor, -/area/space) -"vbw" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/structure/sign/poster/nanotrasen{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"vbJ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty/phoron, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor, -/area/space) -"vbY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/closet/walllocker{ - dir = 8; - pixel_x = -32 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"vbZ" = ( -/turf/simulated/shuttle/wall/alien/no_join, -/area/space) -"vcp" = ( -/obj/structure/closet, -/turf/simulated/floor/wood, -/area/space) -"vct" = ( -/turf/simulated/floor/greengrid, -/area/space) -"vdT" = ( -/obj/singularity/narsie{ - l_move_time = 0; - move_self = 0; - move_speed = 0 - }, -/turf/simulated/floor/lava, -/area/space) -"vek" = ( -/obj/structure/table/bench/glass, -/obj/structure/closet/walllocker_double/survival/west, -/obj/item/clothing/under/swimsuit/stripper/stripper_pink, -/obj/item/clothing/mask/muzzle/ballgag/ringgag, -/turf/simulated/floor/wood, -/area/space) -"vet" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/space) -"veT" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - id = "exam6" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"vfo" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/device/flashlight, -/obj/item/weapon/storage/belt/utility/full/multitool, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/weapon/module/power_control, -/obj/item/weapon/module/cell_power, -/obj/item/weapon/module/card_reader, -/obj/item/weapon/module/id_auth, -/obj/item/weapon/storage/firstaid/regular, -/turf/simulated/floor/plating, -/area/space) -"vfH" = ( -/turf/simulated/shuttle/floor/darkred, -/area/space) -"vfO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vge" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vgF" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vgL" = ( -/obj/item/clothing/accessory/solgov/rank/marine/flag/o10, -/turf/template_noop, -/area/space) -"vgZ" = ( -/obj/machinery/vending/event/accessory, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vhJ" = ( -/obj/machinery/button/windowtint{ - id = "exam5"; - pixel_y = -23 - }, -/turf/simulated/floor, -/area/space) -"vhO" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/gorefloor2, -/area/space) -"vhR" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/space) -"vhU" = ( -/obj/random/multiple/large_corp_crate/no_weapons, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vid" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/port_gen/pacman, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/turf/simulated/floor/plating, -/area/space) -"vii" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"viD" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"viY" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/space) -"vja" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vjd" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/cult, -/area/space) -"vji" = ( -/obj/machinery/mech_recharger, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/obj/mecha/medical/odysseus/old, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"vjk" = ( -/obj/machinery/cryopod/robot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vjE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 3"; - id_tag = "Avalon-room3" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"vjN" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/shuttle/plating, -/area/space) -"vjR" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, -/obj/item/weapon/material/shard/phoron{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vkl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"vkG" = ( -/obj/machinery/door/window/survival_pod, -/turf/template_noop, -/area/space) -"vkR" = ( -/obj/effect/map_effect/portal/line/side_a{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vkW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vlg" = ( -/obj/structure/loot_pile/surface/alien/security, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vlx" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"vlK" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/weapon/surgical/bone_clamp/alien, -/obj/item/weapon/surgical/hemostat/alien, -/obj/item/weapon/surgical/scalpel/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"vlT" = ( -/obj/structure/bed/chair/bay/chair/padded/green{ - dir = 1 - }, -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/space) -"vmP" = ( -/obj/structure/hull_corner/long_vert{ - dir = 5 - }, -/turf/template_noop, -/area/space) -"vmS" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastright{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/darkmatter{ - pixel_y = 6 - }, -/obj/item/weapon/gun/energy/darkmatter, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"vnh" = ( -/obj/random/mob/robotic/hivebot, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"vod" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/shield_projector/rectangle/weak, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vof" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/structure/closet/walllocker_double/hydrant/east, -/turf/simulated/shuttle/plating, -/area/space) -"vor" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/fiftyspawner/phoronrglass, -/turf/simulated/floor, -/area/space) -"vow" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"vqs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 6; - icon_state = "4-6" - }, -/turf/simulated/floor/plating, -/area/space) -"vqK" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "screen"; - pixel_y = 32 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"vrd" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vrn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"vrr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vrK" = ( -/obj/random/roguemineloot, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vsb" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"vsI" = ( -/obj/structure/bed/double/padded, -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/obj/item/weapon/bedsheet/rainbowdouble, -/turf/simulated/floor/carpet/turcarpet, -/area/space) -"vsM" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"vtm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"vtu" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/storage/belt/medical/alien, -/obj/item/weapon/storage/belt/medical/alien{ - pixel_y = 6 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"vuE" = ( -/obj/machinery/gateway/brass{ - dir = 9 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vuM" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 9; - icon_state = "32-9" - }, -/turf/simulated/floor/plating, -/area/space) -"vuQ" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/space) -"vvk" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"vvw" = ( -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, -/obj/machinery/vending/wallmed1{ - dir = 8; - pixel_x = 22; - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vvz" = ( -/obj/structure/grille/rustic, -/turf/simulated/floor/tiled, -/area/space) -"vvF" = ( -/obj/structure/sign/periodic, -/turf/simulated/wall/wood, -/area/space) -"vvG" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/surgery, -/obj/structure/sink/kitchen{ - dir = 4; - icon_state = "sink_alt"; - pixel_x = -13 - }, -/obj/machinery/recharger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vvH" = ( -/obj/structure/closet/alien, -/obj/random/energy, -/obj/random/energy, -/obj/random/energy, -/obj/random/grenade, -/obj/random/grenade, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"vwp" = ( -/obj/structure/girder/cult, -/turf/simulated/floor/cult, -/area/space) -"vwv" = ( -/obj/machinery/computer/ship/sensors, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "stargazer_blast"; - name = "remote blast shielding control"; - pixel_x = 27 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"vwJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/space) -"vxb" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/wall/rshull, -/area/space) -"vxF" = ( -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/wood, -/area/space) -"vye" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"vyg" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor, -/area/space) -"vyj" = ( -/obj/item/weapon/phone, -/obj/structure/table/bench/wooden, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/obj/machinery/button/windowtint{ - id = "h-master"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/space) -"vyk" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/browndouble, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/space) -"vyP" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"vyW" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/large, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"vzm" = ( -/obj/structure/prop/alien/pod/open, -/obj/structure/prop/alien/pod/open, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vzp" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/space) -"vzs" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"vAl" = ( -/obj/structure/prop/fake_ai{ - name = "3n1g-M@" - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"vAo" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser"; - name = "Scrap-Storage" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vBp" = ( -/obj/structure/flora/tree/pine/xmas/presents, -/turf/simulated/floor/tiled, -/area/space) -"vBH" = ( -/obj/structure/hull_corner{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"vBW" = ( -/obj/structure/simple_door/sandstone, -/turf/template_noop, -/area/space) -"vCb" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet, -/area/space) -"vCw" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"vCM" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/suit/bio_suit/anomaly, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/bio_hood/anomaly, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/weapon/storage/excavation, -/obj/item/stack/flag/yellow, -/obj/item/device/measuring_tape, -/obj/item/weapon/pickaxe/drill, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/obj/item/weapon/material/knife/machete/hatchet, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"vDo" = ( -/obj/mecha/combat/fighter/gunpod{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"vDr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/machinery/shield_diffuser, -/obj/effect/floor_decal/milspec/stripe{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"vEk" = ( -/obj/machinery/door/airlock/angled_tgmc/engineering, -/turf/simulated/floor/plating, -/area/space) -"vES" = ( -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/under/color/prison, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/under/fluff/latexmaid, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/item/clothing/shoes/dress, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor.dmi'; - icon_state = "dispenser"; - name = "Garmentier"; - req_access = list(777) - }, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/headband/maid, -/turf/simulated/floor/cult, -/area/space) -"vFe" = ( -/obj/machinery/vending/emergencyfood/filled, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"vGQ" = ( -/obj/structure/ledge{ - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vHq" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"vHw" = ( -/turf/simulated/wall/wood, -/area/space) -"vHD" = ( -/obj/structure/cable{ - d2 = 9; - icon_state = "5-9"; - d1 = 5 - }, -/turf/simulated/floor/plating, -/area/space) -"vHL" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor, -/area/space) -"vHQ" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/space) -"vHX" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"vId" = ( -/obj/structure/closet/cabinet, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/toolbox, -/obj/random/toolbox, -/turf/simulated/floor/wood, -/area/space) -"vIy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"vIV" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"vJd" = ( -/obj/machinery/door/airlock/angled_tgmc/cell, -/turf/template_noop, -/area/space) -"vJe" = ( -/obj/machinery/iv_drip, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vJh" = ( -/obj/effect/fancy_shuttle/science, -/turf/template_noop, -/area/space) -"vJt" = ( -/obj/structure/flora/pottedplant/smalltree, -/turf/simulated/floor/beach/sand/desert, -/area/space) -"vJT" = ( -/obj/structure/prop/dominator, -/turf/template_noop, -/area/space) -"vKC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vKX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"vLm" = ( -/obj/item/clothing/mask/muzzle, -/obj/random/trash, -/turf/simulated/floor, -/area/space) -"vMe" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/table/reinforced, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/design_disk, -/obj/item/weapon/disk/tech_disk, -/obj/item/weapon/disk/tech_disk, -/turf/simulated/shuttle/floor/purple, -/area/space) -"vMr" = ( -/obj/structure/salvageable/implant_container, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vMU" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"vNc" = ( -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, -/area/space) -"vNi" = ( -/obj/structure/cryofeed{ - dir = 1; - pixel_y = -31 - }, -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vNu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 4 - }, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-hangar"; - name = "Avalon Hangar Blast Doors Control"; - pixel_y = -24; - req_access = list(28); - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/space) -"vNY" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 8; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"vOh" = ( -/obj/machinery/shower{ - dir = 8 - }, -/obj/item/weapon/soap/deluxe, -/obj/structure/curtain, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vPg" = ( -/obj/machinery/flasher{ - id = "slavecell1"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vPi" = ( -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vPl" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/space) -"vPm" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"vPs" = ( -/obj/item/device/uav/loaded, -/turf/template_noop, -/area/space) -"vPG" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/obj/machinery/computer/atmos_alert{ - dir = 8 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"vPI" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam1" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"vPK" = ( -/obj/structure/closet/alien, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/ore/bluespace_crystal, -/obj/item/weapon/tool/screwdriver/alien, -/obj/item/device/multitool/alien, -/obj/item/device/gps/syndie, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vQb" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/gaycarpet, -/area/space) -"vQz" = ( -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/space) -"vQF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/space) -"vQR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/plating/external, -/area/space) -"vSR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"vTc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "baby_mammoth_sensor"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "baby_mammoth_pump" - }, -/turf/simulated/shuttle/plating, -/area/space) -"vTr" = ( -/turf/simulated/floor/dungeon, -/area/space) -"vTN" = ( -/obj/machinery/button/remote/airlock/survival_pod{ - dir = 10; - pixel_y = -24 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"vTQ" = ( -/obj/structure/table/alien/blue, -/obj/item/clothing/under/psysuit, -/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"vUb" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vUh" = ( -/obj/machinery/disposal, -/turf/simulated/floor/tiled/dark, -/area/space) -"vUL" = ( -/obj/structure/bed/chair/bay/comfy/purple, -/turf/simulated/floor/wood/sif, -/area/space) -"vUQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"vUT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/space) -"vVd" = ( -/obj/machinery/computer/ship/helm{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"vVl" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/turf/simulated/floor, -/area/space) -"vVz" = ( -/obj/structure/cable{ - d2 = 10; - icon_state = "5-10"; - d1 = 5 - }, -/turf/simulated/floor/plating, -/area/space) -"vVU" = ( -/obj/structure/prop/alien/pod/open, -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vWF" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"vWN" = ( -/obj/structure/cliff/automatic{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vXg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/contraband/nofail, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"vXy" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"vXU" = ( -/obj/machinery/alarm{ - pixel_y = 22 - }, -/turf/simulated/floor/tiled, -/area/space) -"vYa" = ( -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/rods, -/obj/fiftyspawner/rods, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"vYe" = ( -/obj/structure/cliff/automatic{ - dir = 6 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"vYx" = ( -/obj/machinery/vending/tool{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777); - req_log_access = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/space) -"vYS" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/flame/lighter/random{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/weapon/flame/lighter/random, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"vYV" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"vZh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"vZr" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"vZv" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"wab" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"wak" = ( -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/obj/structure/closet{ - name = "Survival closet" - }, -/turf/simulated/floor/plating, -/area/space) -"waq" = ( -/obj/effect/alien/weeds, -/turf/simulated/mineral/ignore_mapgen, -/area/space) -"waA" = ( -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/alien/hard_corner, -/area/space) -"waG" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"waY" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wbL" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - dir = 2; - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"wcc" = ( -/obj/structure/closet/secure_closet/engineering_welding{ - locked = 0 - }, -/turf/simulated/floor/plating, -/area/space) -"wcE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wcO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wdK" = ( -/obj/structure/table/steel, -/obj/machinery/button/windowtint{ - id = "SP-Sec"; - pixel_x = 10; - pixel_y = 25 - }, -/obj/structure/fans{ - pixel_y = 32 - }, -/obj/machinery/microscope{ - pixel_y = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"weO" = ( -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"weS" = ( -/obj/machinery/firealarm/angled{ - pixel_y = 18 - }, -/obj/structure/table/rack/shelf/steel, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/steel, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wfh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"wfE" = ( -/obj/machinery/door/airlock/maintenance/medical{ - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"wfO" = ( -/obj/effect/map_effect/portal/master/side_b{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"wfW" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/medical, -/turf/simulated/floor/tiled/white, -/area/space) -"wgp" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/bed/chair/office/dark, -/turf/simulated/shuttle/floor/purple, -/area/space) -"wgy" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/tape_roll, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"wgI" = ( -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor, -/area/space) -"wgK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/door/blast/regular/open{ - id = "baby_mammoth_blast"; - layer = 2.5; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"wgP" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "13" - }, -/turf/template_noop, -/area/template_noop) -"whh" = ( -/obj/structure/sign/mining, -/turf/simulated/shuttle/wall/voidcraft, -/area/space) -"whu" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/obj/item/prop/alien/junk, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"whD" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/flasher{ - id = "atriumflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"whK" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"wie" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/table/gamblingtable, -/obj/item/device/starcaster_news, -/obj/item/weapon/deck/cards, -/obj/structure/fireaxecabinet{ - pixel_y = 27 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"wiN" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wiR" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 4 - }, -/turf/template_noop, -/area/space) -"wiW" = ( -/obj/machinery/porta_turret/alien{ - faction = "hivebot" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"wjl" = ( -/obj/machinery/appliance/cooker/fryer, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wjv" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"wjB" = ( -/obj/structure/fans, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"wjJ" = ( -/obj/effect/fancy_shuttle/medical, -/turf/template_noop, -/area/space) -"wkn" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = -7; - dir = 4; - pixel_x = 18 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "Avalon-kitchen"; - layer = 3.3; - name = "Avalon Kitchen Shutters" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wkY" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/freezer, -/area/space) -"wlf" = ( -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wlm" = ( -/obj/random/mob/robotic/hivebot, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wlo" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"wlE" = ( -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"wlN" = ( -/obj/structure/closet/secure_closet/bar{ - req_access = newlist() - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"wmz" = ( -/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/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"wmI" = ( -/obj/structure/undies_wardrobe, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"wmS" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/space) -"wmV" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"wno" = ( -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/space) -"woE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/access_button{ - pixel_x = 26; - pixel_y = -24; - name = "interior access button"; - master_tag = "Avalon_engine_airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"woN" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/space) -"wpP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 5; - icon_state = "1-5" - }, -/turf/simulated/floor/plating, -/area/space) -"wpT" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"wqd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wqh" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"wqp" = ( -/obj/structure/catwalk, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor, -/area/space) -"wqK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wqO" = ( -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"wqT" = ( -/obj/structure/shuttle/engine/router, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"wqX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wrb" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor, -/area/space) -"wrh" = ( -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"wry" = ( -/obj/structure/grille/broken/cult, -/obj/fire, -/turf/simulated/floor/gorefloor2, -/area/space) -"wrL" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/overgrown{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/space) -"wrU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wrW" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/space) -"wsr" = ( -/obj/machinery/conveyor_switch{ - id = "SP-Mining"; - name = "Disposal Sorter"; - pixel_y = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"wst" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"wsC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wsJ" = ( -/obj/vehicle/train/engine, -/turf/simulated/floor/plating, -/area/space) -"wtB" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/dead{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/space) -"wtD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"wtF" = ( -/obj/machinery/door/airlock/alien{ - name = "Examination room 4"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"wtZ" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor, -/area/space) -"wuC" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, -/turf/simulated/floor/tiled/white, -/area/space) -"wvE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wvF" = ( -/obj/structure/bed/chair/bay/comfy/purple{ - dir = 4 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"wvO" = ( -/obj/structure/fans, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"wwk" = ( -/obj/structure/window/plastitanium, -/obj/structure/sink{ - dir = 4; - pixel_x = 12 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 4 - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wwm" = ( -/obj/machinery/sleeper/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"wwn" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/locked/phasegun/rifle{ - pixel_y = 3 - }, -/obj/item/weapon/gun/energy/locked/phasegun/rifle{ - pixel_y = -4 - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"wwC" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tesla_coil/pre_mapped, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wwE" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/turf/simulated/floor/greengrid, -/area/space) -"wxc" = ( -/obj/machinery/light/bigfloorlamp/flicker, -/turf/template_noop, -/area/space) -"wxm" = ( -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/wood/broken, -/area/space) -"wxu" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/fruitgland, -/obj/item/weapon/material/knife/hook, -/turf/simulated/floor, -/area/space) -"wxB" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"wxC" = ( -/obj/machinery/door/airlock/angled_tgmc/engineering{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"wxG" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/space) -"wxH" = ( -/turf/simulated/goreeyes, -/area/space) -"wxK" = ( -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wxV" = ( -/obj/structure/largecrate/animal/chick, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wyk" = ( -/obj/structure/prop/alien/dispenser/twoway, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wyr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wyw" = ( -/obj/structure/particle_accelerator/fuel_chamber, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wAV" = ( -/obj/item/trash/material/metal, -/turf/simulated/floor/plating, -/area/space) -"wAX" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 8; - id = "Avalon-captainsquarters"; - name = "Bolt Control"; - pixel_x = 26; - req_access = list(67); - specialfunctions = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"wBl" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westright{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/suit/armor/alien, -/obj/item/clothing/head/helmet/alien, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"wBs" = ( -/obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor/plating/external, -/area/space) -"wCb" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"wDn" = ( -/obj/structure/cult/pylon, -/turf/simulated/floor/gorefloor2, -/area/space) -"wDp" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"wEc" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wEx" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/space) -"wEG" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/plastitanium{ - dir = 4 - }, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Bridge Blast Door"; - id = "Avalon-bridge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"wFf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/alarm/alarms_hidden{ - pixel_y = 22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"wFw" = ( -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "needle_inner"; - locked = 1; - name = "Internal Access" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "needle"; - name = "interior access button"; - pixel_y = 26 - }, -/turf/simulated/shuttle/plating, -/area/space) -"wFZ" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/plasticflaps/mining, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wGL" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/obj/item/weapon/soap/nanotrasen, -/turf/simulated/floor/tiled/white, -/area/space) -"wGN" = ( -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"wHb" = ( -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/medical, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/obj/random/maintenance/cargo, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/closet/alien, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wHi" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"wHO" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"wIc" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "garbagetwo" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wII" = ( -/obj/structure/table/darkglass, -/obj/item/device/sleevemate, -/obj/item/device/sleevemate, -/obj/item/device/sleevemate, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/item/weapon/backup_implanter, -/obj/item/weapon/backup_implanter, -/obj/item/weapon/backup_implanter, -/obj/item/weapon/backup_implanter, -/obj/item/weapon/backup_implanter, -/turf/simulated/shuttle/floor/purple, -/area/space) -"wIS" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"wJr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-hangar"; - name = "Avalon Hangar Blast Doors Control"; - pixel_y = -24; - req_access = list(28) - }, -/turf/simulated/floor/reinforced, -/area/space) -"wJL" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"wJR" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"wJT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/space) -"wKT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/mob/living/simple_mob/humanoid/merc/ranged{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"wKV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"wKX" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "dorm_tint5" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "atriumnorth" - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/obj/structure/window/plastitanium{ - dir = 8 - }, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/space) -"wKZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/space) -"wLU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wLX" = ( -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"wMu" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/alien/blue, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wMy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"wNh" = ( -/obj/structure/closet/walllocker_double/north{ - name = "Survival Cabinet" - }, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/weapon/reagent_containers/pill/dylovene, -/obj/item/device/flashlight/maglight, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/random/soap, -/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, -/obj/item/device/fbp_backup_cell, -/obj/item/device/pda, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/starcaster_news, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/gps, -/turf/simulated/floor/wood, -/area/space) -"wNI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wNX" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Air to Distro" - }, -/turf/simulated/floor, -/area/space) -"wOj" = ( -/obj/structure/table/darkglass, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/cult, -/area/space) -"wOq" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"wOK" = ( -/obj/structure/tubes, -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"wOQ" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/machinery/light{ - dir = 4; - layer = 3 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wPf" = ( -/obj/structure/largecrate/animal/fennec, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"wPu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wPH" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb/dark{ - color = #8A0808; - desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; - name = "Wires of doubt" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"wPR" = ( -/obj/machinery/ion_engine, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"wQe" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/shuttle/window, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/space) -"wQq" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"wQK" = ( -/obj/machinery/floodlight, -/turf/simulated/shuttle/plating/skipjack, -/area/space) -"wQR" = ( -/obj/random/toolbox, -/turf/template_noop, -/area/space) -"wQS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"wQT" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/machinery/meter, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/space) -"wRv" = ( -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_y = 22 - }, -/obj/structure/table/marble, -/obj/item/weapon/book/manual/barman_recipes, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"wTj" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/simulated/shuttle/wall/voidcraft/red, -/area/survivalpod) -"wTZ" = ( -/obj/machinery/door/window/brigdoor/northright{ - dir = 8; - id = "SP-Cell"; - name = "Cell"; - req_access = null; - req_one_access = list(2,4) - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "SP-Cell2"; - name = "Cell Door" - }, -/obj/effect/floor_decal/industrial/danger/full, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"wUd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wUf" = ( -/obj/structure/table/standard, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/device/sleevemate, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wUI" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"wUW" = ( -/turf/template_noop, -/area/template_noop) -"wVG" = ( -/obj/machinery/power/smes/buildable/hybrid, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/cable/green, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/plating, -/area/space) -"wVS" = ( -/obj/effect/alien/weeds, -/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"wVV" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"wWh" = ( -/turf/template_noop, -/area/survivalpod) -"wWl" = ( -/obj/structure/disposalpipe/sortjunction/wildcard{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"wWp" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, -/turf/template_noop, -/area/space) -"wWI" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "23" - }, -/turf/template_noop, -/area/space) -"wWK" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"wWR" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"wWW" = ( -/obj/machinery/door/firedoor, -/obj/structure/atmospheric_retention_field/underdoors, -/obj/machinery/door/blast/regular{ - name = "Avalon Hangar Blast Door"; - id = "Avalon-hangar" - }, -/turf/simulated/floor/reinforced, -/area/space) -"wXk" = ( -/obj/machinery/light{ - dir = 8; - layer = 3 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"wXB" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"wXN" = ( -/obj/structure/disposalpipe/down{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"wYf" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/pen/blade/fountain, -/turf/simulated/floor/carpet/blue, -/area/space) -"wYD" = ( -/obj/machinery/porta_turret/alien/destroyed, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"wYR" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"wZt" = ( -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"wZG" = ( -/obj/effect/alien/weeds, -/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/space) -"xau" = ( -/obj/effect/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"xaw" = ( -/obj/structure/sign/department/xenolab, -/turf/simulated/wall/skipjack, -/area/space) -"xaO" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor, -/area/space) -"xbb" = ( -/obj/structure/closet/alien, -/obj/item/prop/alien/junk, -/obj/item/weapon/tool/crowbar/alien, -/obj/item/weapon/tool/wirecutters/alien, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xck" = ( -/obj/item/frame/apc, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 22 - }, -/obj/random/junk, -/turf/simulated/floor, -/area/space) -"xcs" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"xcw" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/super{ - pixel_y = -24 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"xcA" = ( -/obj/structure/flora/pumpkin/carved/owo, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xcK" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xdg" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/structure/window/plastitanium, -/obj/structure/window/plastitanium{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - name = "Avalon Singularity Blast Door"; - id = "Avalon-singularity"; - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/space) -"xdM" = ( -/turf/simulated/wall/rshull, -/area/space) -"xdZ" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 8; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"xec" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xeT" = ( -/obj/machinery/crystal/lava, -/turf/simulated/floor/lava, -/area/space) -"xfk" = ( -/obj/structure/flora/bboulder2, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xfo" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/folder/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/weapon/pen/red, -/obj/item/weapon/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/purple, -/area/space) -"xfv" = ( -/obj/structure/tubes, -/obj/machinery/icecream_vat, -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 20 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"xfE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe, -/turf/simulated/floor/reinforced, -/area/space) -"xgI" = ( -/obj/structure/bed/chair/bay/comfy/green{ - dir = 1 - }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"xgK" = ( -/obj/structure/cliff/automatic/corner{ - dir = 10 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xgO" = ( -/obj/mecha/working/hoverpod/shuttlepod, -/turf/template_noop, -/area/space) -"xhp" = ( -/obj/structure/closet/alien, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"xic" = ( -/obj/structure/window/reinforced/tinted/frosted, -/turf/simulated/floor/tiled, -/area/space) -"xix" = ( -/obj/structure/cryofeed{ - dir = 2 - }, -/obj/machinery/light/small/emergency, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"xjc" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "SP-Mining" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"xjo" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - name = "Portside Lower Thruster One" - }, -/turf/simulated/floor, -/area/space) -"xjC" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"xkh" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "exam2" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xkm" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/white, -/area/space) -"xkR" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/space) -"xls" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/briefcase/inflatable{ - pixel_y = 3 - }, -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"xlt" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/space) -"xlu" = ( -/obj/machinery/shipsensors{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"xlH" = ( -/obj/effect/map_effect/portal/master/side_b{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xlT" = ( -/obj/machinery/conveyor, -/obj/structure/plasticflaps/mining, -/turf/simulated/shuttle/plating, -/area/space) -"xmg" = ( -/obj/effect/step_trigger/message{ - message = "Example text"; - once = 0 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xmE" = ( -/obj/machinery/light/small/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/space) -"xnt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating/external, -/area/space) -"xnE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xnS" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/space) -"xoj" = ( -/turf/simulated/floor/wood/broken, -/area/space) -"xow" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"xox" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm/angled{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/catwalk_plated/techfloor, -/turf/simulated/floor, -/area/space) -"xpc" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/chainsaw, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/extinguisher, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor, -/area/space) -"xpy" = ( -/obj/structure/closet/secure_closet/guncabinet/phase{ - req_one_access = null - }, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/weapon/gun/energy/locked/frontier, -/obj/item/weapon/gun/energy/locked/frontier, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/weapon/gun/energy/locked/frontier/holdout, -/obj/item/clothing/accessory/holster/waist, -/obj/item/clothing/accessory/holster/waist, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/obj/item/weapon/gun/energy/locked/frontier/carbine, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"xpC" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/wall/rshull, -/area/space) -"xqf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xqD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xqM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/space) -"xqP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - name = "Hallway Airlock" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xqS" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/plating/external, -/area/space) -"xqU" = ( -/obj/structure/largecrate/vehicle/quadbike, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xrE" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/ion_engine, -/turf/simulated/floor/tiled/techfloor/grid, -/area/space) -"xrJ" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xrT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/space) -"xst" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xsX" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/simulated/floor, -/area/space) -"xtj" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/item/organ/internal/lungs, -/turf/simulated/floor, -/area/space) -"xts" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular/open{ - dir = 8; - id = "baby_mammoth_blast"; - name = "window blast shield" - }, -/turf/simulated/shuttle/plating, -/area/space) -"xtx" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xtC" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/shuttle_control/explore/stargazer{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"xud" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/space) -"xuf" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"xug" = ( -/obj/structure/table/hardwoodtable, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/space) -"xuL" = ( -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, -/obj/item/device/sleevemate, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/reagent_scanner/adv, -/obj/item/device/healthanalyzer/phasic, -/obj/item/device/healthanalyzer/phasic, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Ross-Traints"; - req_access = list(777) - }, -/turf/simulated/floor, -/area/space) -"xuN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/standard/glass/common{ - dir = 4; - name = "Primary Storage" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xvE" = ( -/obj/machinery/alarm/angled{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 10 - }, -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/fire{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/storage/firstaid/toxin, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"xvG" = ( -/obj/machinery/gravity_generator/main/station{ - icon_state = "on_6" - }, -/turf/simulated/floor/tiled, -/area/space) -"xvO" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating, -/area/space) -"xws" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod) -"xwu" = ( -/obj/structure/girder/reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xwQ" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, -/area/space) -"xxd" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/sharpeningkit, -/obj/item/weapon/reagent_containers/dropper, -/turf/simulated/floor/tiled/white, -/area/space) -"xxq" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "military autolathe" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"xxs" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xxt" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"xxu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 8; - name = "Room 1"; - id_tag = "Avalon-room1" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xxB" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/outdoors/rocks, -/area/space) -"xxQ" = ( -/obj/structure/bed/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/weapon/surgical/FixOVein/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xxS" = ( -/obj/structure/flora/pottedplant/flower, -/turf/simulated/floor/wood/sif, -/area/space) -"xyd" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine, -/turf/simulated/floor/wood/sif, -/area/space) -"xyp" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/turf/template_noop, -/area/space) -"xyE" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/weeds, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/rocks{ - outdoors = 0 - }, -/area/space) -"xyL" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4; - id_tag = "frontgate" - }, -/turf/simulated/floor/plating, -/area/space) -"xyR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/internals, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"xyT" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alien/blue, -/area/space) -"xzg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xzP" = ( -/obj/structure/prop/alien/computer/hybrid, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor, -/area/space) -"xBs" = ( -/obj/structure/particle_accelerator/end_cap{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xBG" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"xCw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/alarm/alarms_hidden{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"xCD" = ( -/turf/simulated/floor/outdoors/rocks, -/area/space) -"xCF" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xCP" = ( -/obj/effect/fancy_shuttle, -/turf/template_noop, -/area/space) -"xDq" = ( -/obj/machinery/firealarm/angled{ - dir = 4; - pixel_x = 22 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xDP" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"xEB" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/monotile, -/area/space) -"xEM" = ( -/obj/machinery/door/blast/gate, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xEN" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xES" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"xEX" = ( -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/hatch/common{ - dir = 4; - name = "Starboard Upper Thruster Two" - }, -/turf/simulated/floor, -/area/space) -"xFl" = ( -/obj/machinery/door/airlock/alien{ - name = "Processing room 2"; - req_one_access = list(777) - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xFm" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"xFG" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = -13 - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"xFI" = ( -/obj/structure/bed/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xFP" = ( -/obj/effect/map_effect/portal/master/side_b, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xFR" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"xFY" = ( -/obj/machinery/computer/ship/helm, -/obj/machinery/button/remote/blast_door{ - id = "Avalon-bridge"; - name = "Avalon Bridge Blast Doors Control"; - pixel_y = -6; - req_access = list(28); - pixel_x = -27 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 1 - }, -/turf/simulated/floor/tiled/milspec/raised, -/area/space) -"xGf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/space) -"xGz" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xHh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/machinery/meter, -/obj/structure/catwalk, -/turf/simulated/floor, -/area/space) -"xHk" = ( -/obj/machinery/computer/shuttle_control/explore/stargazer{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xHE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xHY" = ( -/obj/effect/fancy_shuttle/delivery, -/turf/template_noop, -/area/space) -"xIb" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 1; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/gootrap{ - basecolor = #610B0B; - desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; - name = "Spill of fear" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/turf/simulated/floor/flesh/colour{ - color = red - }, -/area/space) -"xIq" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/girder/reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xIr" = ( -/obj/structure/ledge/ledge_nub{ - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xIK" = ( -/obj/machinery/door/airlock/alien/blue/locked, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xIN" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/template_noop, -/area/space) -"xIV" = ( -/obj/structure/fence, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"xJd" = ( -/obj/effect/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt{ - outdoors = 0 - }, -/area/space) -"xJg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/crate, -/obj/machinery/light, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/space) -"xJm" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Dorm" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/space) -"xJt" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "21" - }, -/turf/template_noop, -/area/space) -"xJw" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/gear_dispenser/suit/ert{ - req_one_access = null - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xJx" = ( -/obj/machinery/door/airlock/glass_centcom, -/obj/structure/sign/poster/nanotrasen{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"xKe" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"xKv" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"xKG" = ( -/obj/machinery/vending/cigarette{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/wood, -/area/space) -"xLk" = ( -/obj/machinery/pointdefense, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/space) -"xLn" = ( -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"xLr" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/toilet{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"xLt" = ( -/obj/effect/temporary_effect/pulse/snake/flamestrike, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xLF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xMn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xMv" = ( -/obj/machinery/vending/medical{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/white, -/area/space) -"xMz" = ( -/obj/structure/table/darkglass, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor/wood/sif, -/area/space) -"xMA" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xMJ" = ( -/obj/structure/grille/broken/cult, -/turf/simulated/floor/cult, -/area/space) -"xND" = ( -/obj/machinery/door/window{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/space) -"xNL" = ( -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - dir = 4; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/structure/window/phoronreinforced{ - desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; - maxhealth = 500; - name = "Veil of sanity" - }, -/obj/effect/spider/stickyweb{ - color = #8A0808; - desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; - name = "Strings of distress" - }, -/turf/simulated/floor/gorefloor, -/area/space) -"xNQ" = ( -/obj/effect/catwalk_plated/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor, -/area/space) -"xOp" = ( -/obj/structure/prop/blackbox/xenofrigate, -/turf/simulated/floor/greengrid, -/area/space) -"xOt" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/template_noop, -/area/space) -"xOD" = ( -/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ - health = 15; - maxHealth = 15 - }, -/turf/simulated/shuttle/floor/alien, -/area/space) -"xOH" = ( -/obj/effect/fancy_shuttle/escapepod, -/turf/template_noop, -/area/space) -"xPh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"xPs" = ( -/obj/machinery/flasher{ - id = "SP-Cell flash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"xPI" = ( -/obj/structure/table/standard, -/obj/item/device/starcaster_news, -/turf/simulated/floor/tiled/dark, -/area/space) -"xPN" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/disposalpipe/segment, -/turf/simulated/shuttle/floor/alienplating, -/area/space) -"xQc" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/space) -"xQk" = ( -/obj/structure/closet/crate/engineering, -/obj/fiftyspawner/steel, -/obj/fiftyspawner/glass, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/tank/phoron, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/device/geiger, -/obj/item/clothing/glasses/goggles, -/obj/item/clothing/glasses/goggles, -/obj/item/device/t_scanner, -/obj/item/clothing/glasses/welding, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/floor/darkred, -/area/space) -"xQq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/angled_bay/hatch/engineering{ - dir = 4; - name = "Tesla Engine" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xQs" = ( -/obj/effect/overlay/energy_ball, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xQt" = ( -/obj/item/weapon/material/minihoe, -/turf/simulated/floor/outdoors/grass/heavy, -/area/space) -"xQG" = ( -/obj/effect/temporary_effect/shuttle_landing, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xRs" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/gaycarpet, -/area/space) -"xRE" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xRV" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"xSh" = ( -/obj/structure/window/titanium/full, -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/space) -"xSk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "SP-Sec" - }, -/obj/structure/window/reinforced/polarized{ - id = "SP-Sec" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/space) -"xSx" = ( -/obj/structure/table/survival_pod, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/o2{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"xSC" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor, -/area/space) -"xSD" = ( -/obj/structure/lattice, -/obj/machinery/shield_diffuser, -/turf/template_noop, -/area/space) -"xTt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"xTP" = ( -/obj/machinery/media/jukebox/casinojukebox, -/turf/template_noop, -/area/space) -"xTS" = ( -/obj/effect/map_effect/portal/master/side_a, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xTW" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/simulated/floor/reinforced, -/area/space) -"xUa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xUh" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xUA" = ( -/obj/structure/prop/alien/computer/camera/flipped{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xUJ" = ( -/obj/item/mecha_parts, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xVe" = ( -/obj/machinery/vending/fitness{ - dir = 4; - pixel_x = -5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/space) -"xVf" = ( -/turf/simulated/floor/tiled/eris/dark/techfloor, -/area/space) -"xVg" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/modular_computer/laptop/preset/custom_loadout/elite, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/ammo_magazine/m9mm/compact/flash, -/obj/item/weapon/gun/projectile/pistol, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/weapon/storage/box/survival/comp{ - starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi) - }, -/turf/simulated/floor/carpet/bcarpet, -/area/space) -"xVi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"xVA" = ( -/obj/effect/gibspawner/robot, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xVC" = ( -/turf/simulated/wall/shull, -/area/space) -"xVL" = ( -/obj/structure/closet/alien, -/obj/item/clothing/head/headband/maid, -/obj/item/clothing/head/plaguedoctorhat, -/obj/item/clothing/head/poppy_crown, -/obj/item/clothing/head/redcoat, -/obj/item/clothing/head/turban, -/obj/item/clothing/head/woodcirclet, -/obj/item/clothing/head/greenbandana, -/obj/item/clothing/head/cone, -/obj/item/clothing/head/bowler, -/obj/item/clothing/head/bandana, -/obj/item/clothing/head/beanie, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xWf" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/obj/effect/floor_decal/milspec/stripe{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/space) -"xWn" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xWB" = ( -/obj/structure/disposalpipe/sortjunction/untagged/flipped{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"xWE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/space) -"xWN" = ( -/obj/machinery/mineral/stacking_machine, -/turf/simulated/shuttle/plating, -/area/space) -"xXf" = ( -/obj/machinery/light/floortube, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"xXn" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "baby_mammoth"; - name = "interior access button"; - pixel_y = 26 - }, -/obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1380; - id_tag = "baby_mammoth_inner"; - locked = 1; - name = "Internal Access" - }, -/turf/simulated/shuttle/plating, -/area/space) -"xYs" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/green, -/area/space) -"xYQ" = ( -/obj/machinery/flasher{ - id = "dressroom"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"xYV" = ( -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"xZn" = ( -/obj/structure/barricade, -/turf/simulated/floor/plating, -/area/space) -"xZo" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"xZL" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"xZY" = ( -/obj/random/multiple/large_corp_crate, -/turf/simulated/floor/tiled/techmaint, -/area/space) -"yah" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 - }, -/obj/structure/shuttle/engine/heater, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"yal" = ( -/obj/item/organ/internal/lungs/vox, -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/obj/structure/curtain/black, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"yaI" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/turf/simulated/floor/plating/external, -/area/space) -"yaN" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/shuttle/plating, -/area/space) -"ybm" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "30" - }, -/turf/template_noop, -/area/space) -"ybo" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/rainbowdouble, -/obj/machinery/partyalarm{ - pixel_y = -18 - }, -/turf/simulated/floor/wood/sif, -/area/space) -"ybx" = ( -/obj/structure/bed/alien, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"yby" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ybA" = ( -/turf/simulated/mineral/ignore_mapgen, -/area/space) -"ybG" = ( -/obj/structure/table/alien/blue, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/item/weapon/storage/belt/utility/alien, -/obj/item/weapon/paper/alien{ - icon_state = "alienpaper_words"; - info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ybT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/prop/alien/power, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/space) -"ycV" = ( -/obj/machinery/vending/coffee{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/wood, -/area/space) -"ydh" = ( -/obj/effect/alien/weeds, -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"ydo" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/space) -"ydr" = ( -/obj/machinery/power/emitter/gyrotron{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/space) -"ydu" = ( -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"ydy" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ydH" = ( -/obj/structure/shuttle/engine/heater, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/wall/voidcraft/no_join, -/area/space) -"ydU" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/alien/weeds, -/obj/item/toy/plushie/face_hugger, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/space) -"yft" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/surgical/bone_clamp/alien, -/obj/item/device/healthanalyzer/phasic, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating/external, -/area/space) -"yfy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"yfC" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/obj/machinery/light/poi, -/turf/simulated/floor/carpet, -/area/space) -"yfD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/space) -"yfX" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner"; - pixel_x = 2; - pixel_y = 2 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/white, -/area/space) -"ygl" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/space) -"ygo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/space) -"ygs" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/space) -"ygZ" = ( -/obj/effect/temporary_effect/pulse/pulsar, -/turf/simulated/floor/outdoors/dirt, -/area/space) -"yhj" = ( -/obj/structure/cable{ - d2 = 6; - icon_state = "5-6"; - d1 = 5 - }, -/turf/simulated/floor/plating, -/area/space) -"yhk" = ( -/obj/structure/catwalk, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/space) -"yhY" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/space) -"yik" = ( -/obj/structure/largecrate/birds, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"yjo" = ( -/obj/structure/salvageable/bliss, -/obj/effect/alien/weeds, -/turf/simulated/floor, -/area/space) -"yjw" = ( -/obj/structure/artilleryplaceholder{ - icon_state = "18" - }, -/turf/template_noop, -/area/space) -"yka" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/random/maintenance/research, -/obj/machinery/alarm/alarms_hidden{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/space) -"ykj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) -"ykY" = ( -/obj/structure/prop/alien/computer/hybrid, -/turf/simulated/floor, -/area/space) - -(1,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -naM -naM -naM -naM -naM -naM -naM -naM -naM -naM -naM -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(2,1,1) = {" -nwG -dOK -mIu -hSj -tXM -flt -dBz -xud -ieJ -nGI -akc -gnx -jjA -uRL -lYH -vVz -peE -vHD -yhj -eEO -kTV -wpP -iOu -dqu -ePV -aLg -dZb -eWO -vqs -kTP -ajt -cII -gdf -nzu -tyT -cuG -gFa -dzU -iad -msn -rcS -kET -mjC -vuM -mYh -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -eBp -hkY -hkY -hkY -hkY -hkY -hkY -naM -naM -naM -tHq -nwG -tPy -nwG -nwG -nwG -nwG -nwG -cmZ -gle -sjB -qua -nCW -dMi -ccf -qew -uPL -vrK -jeh -tlr -nLQ -qwG -wLX -oQS -cRJ -tLc -bZw -iWn -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -xTW -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -gkT -xxs -oka -npX -gkT -xxs -oka -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(3,1,1) = {" -nwG -rsm -qwI -hKr -gWK -qOe -hPy -viY -mKV -opr -xRV -xRV -xRV -xRV -xRV -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -aQp -ucE -aFc -fTF -mZO -ucE -mxB -mmd -ucE -afD -nNQ -ucE -jxh -iXt -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -iZx -uWf -dMs -hkY -hkY -cqp -rwD -jrw -kIL -hkY -hkY -nwG -uPc -nwG -nwG -nwG -nwG -nwG -cmZ -kJK -bSB -qZK -fgs -ucG -sRL -mRF -pfQ -fmD -eeQ -qzw -ciR -ahX -sJh -tTG -plM -luC -oFb -mYY -mYY -sij -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -tdk -flk -tdk -wqO -tdk -tdk -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wiR -nwG -nwG -nwG -wiR -nwG -nwG -nwG -wiR -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -fQE -leh -fCX -uMN -iMi -leh -lzH -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(4,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rnW -ucE -fIZ -ahT -yhY -ucE -jjg -uSU -ucE -tfy -pfL -ucE -uLN -nod -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -vXU -hkY -sAt -hkY -hkY -qxM -goo -uqP -sUE -sUE -sUE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mYY -mYY -pfu -pfu -pfu -pfu -rLz -dbd -fxo -ame -hFu -pLl -klQ -dlg -mYY -mYY -psJ -mYY -mYY -mYY -jHV -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -tdk -egj -tdk -iuf -tdk -iZg -yaN -tdk -tdk -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -wiR -nwG -uMN -puU -puU -puU -uMN -puU -puU -puU -uMN -puU -puU -puU -uMN -nwG -nwG -nwG -wiR -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -fFq -aiv -esW -bMm -kOH -bMm -gxy -eTw -fCX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(5,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -qUq -ucE -hBN -nQR -rgp -ucE -ssc -fCZ -ucE -mxI -xWB -ucE -cQa -eOX -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -kbU -hkY -iTl -fAo -hkY -cqp -rwD -erz -qmI -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -eTp -lQF -nbj -jkz -oQS -fVz -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -dKh -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -tdk -gqR -owY -gqR -wqO -gqR -cpO -nJg -tdk -rUN -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -puU -puU -puU -uMN -puU -puU -puU -uMN -puU -puU -puU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -iar -nwN -huH -bMm -kOH -bMm -uhN -xyT -kqa -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(6,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ddx -ucE -kJg -drO -iBg -ucE -xcs -qMX -ucE -mDJ -xWB -ucE -wWl -qDB -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -vQz -hkY -hkY -hkY -hkY -hkY -hkY -naM -naM -naM -tHq -nwG -nwG -lcp -lcp -iNS -nwG -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -jPa -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -gqR -bXs -xgI -hMo -bGS -pwU -qkk -gqR -awk -ooI -ooI -qKl -nwG -nwG -nwG -uMN -puU -puU -puU -npX -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -npX -puU -puU -puU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cdi -pAx -iFi -aid -nGw -bMm -kOH -bMm -uhN -viD -gIf -pAx -cdi -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(7,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -fRl -hkY -jer -hkY -hkY -hkY -naM -sJe -tEQ -hkY -hkY -nwG -nwG -gEF -tdA -fyh -nwG -nwG -cmZ -nSj -uPr -aOC -jnZ -oYx -rkD -dPA -rWD -jZW -ovB -ndQ -paf -hXx -mYY -dQS -xVA -bXF -lMV -oLw -mPD -nwG -sCs -sCs -sCs -nwG -nwG -oXY -uVO -nwG -nwG -nwG -iuf -egj -kop -kmm -kmm -iCJ -eJL -mga -pDb -vkl -dmh -ooI -ooI -ooI -nwG -nwG -nwG -uMN -uMN -uMN -uMN -uMN -uMN -npX -pTY -pTY -pTY -uyJ -kOH -oyk -pTY -pTY -pTY -npX -uMN -uMN -uMN -uMN -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qDJ -iiv -uhN -pxt -jfO -bMm -kOH -bMm -wyk -pxt -huH -iiv -qDJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(8,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -qpT -ucE -cFJ -ucE -hSP -ucE -mvY -lcj -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -lGr -hkY -hkY -hkY -hkY -qxM -goo -rDs -sUE -sUE -sUE -nwG -nwG -nwG -nwG -jBk -nwG -nwG -cmZ -mom -mYY -xUJ -oOe -mYY -mYY -mYY -mYY -mYY -qWk -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -sCs -vTr -vTr -vTr -vTr -dHc -qhl -nwG -nwG -nwG -iuf -tdk -gqR -ftq -aFN -hDy -pGy -pwU -rQd -tdk -sZt -ooI -ooI -ooI -nwG -nwG -nwG -uMN -iGF -fOO -puU -oQU -mWQ -uTl -suG -kOH -kOH -kOH -kOH -suG -kOH -kOH -suG -mQW -mWQ -ydr -puU -fOO -iGF -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -npX -npX -qLM -npX -npX -npX -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(9,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -bUJ -ucE -lup -ucE -etm -ucE -nfZ -mgN -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -lXN -hkY -csg -hkY -hkY -hkY -dmR -eiP -suw -hkY -hkY -nwG -nwG -uzD -nwG -lEe -nwG -nwG -cmZ -szS -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -uez -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -sCs -vTr -vTr -vTr -vTr -kts -qvO -nwG -nwG -nwG -iuf -iuf -tdk -gqR -iXD -gqR -wqO -tdk -wFw -gqR -tdk -bYS -iuf -iuf -nwG -nwG -nwG -uMN -gHn -hdF -puU -dwF -uMN -uTl -kOH -bMm -kOH -juk -juk -kOH -kOH -bMm -kOH -mQW -uMN -oIK -puU -vCw -gKr -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -pnl -ctJ -ctJ -ctJ -rZe -ctJ -nFR -npX -vct -bdm -hyu -ugX -hyu -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(10,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -iiF -ucE -iyk -ucE -jlB -ucE -wXN -bPL -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -dBX -jqt -lVk -qJK -hkY -hkY -hkY -naM -naM -naM -hkY -nwG -nwG -nwG -nwG -rQX -nwG -acK -cmZ -szW -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -dWx -rAu -mYY -mYY -mYY -mYY -mYY -mYY -hvv -nwG -sCs -tQW -arl -vTr -vTr -srA -xgO -vPs -nwG -nwG -iuf -iuf -iuf -tdk -egj -tdk -iuf -tdk -eBD -tNh -tdk -tdk -iuf -iuf -nwG -nwG -nwG -uMN -cTz -wKV -dNH -toV -qfQ -uTl -kOH -kOH -qtj -juk -juk -qtj -qtj -kOH -kOH -mQW -qfQ -gTh -qTO -dpo -cTz -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -ctJ -gJq -phQ -gJq -ctJ -ctJ -ctJ -mnP -vct -bLt -ika -vAl -xix -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(11,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -woN -ucE -wpT -ucE -qYn -ucE -cgJ -tLG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -cGA -hkY -orm -hkY -hkY -cqp -rwD -juk -juk -juk -juk -nwG -nwG -nwG -nwG -syv -nwG -qlE -cmZ -uoy -uoy -uoy -dMe -uoy -uoy -uoy -psg -gcn -faJ -gWJ -tII -dnc -xmg -hxr -wOq -qJF -ssw -mYY -dtx -nwG -sCs -vTr -vTr -vTr -vTr -kbZ -nwG -duG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -tdk -ekn -tdk -wqO -tdk -tdk -iuf -nwG -nwG -nwG -uMN -bJE -utL -amu -aiy -ixo -uTl -suG -kOH -qtj -gyr -gyr -gyr -juk -juk -kOH -mQW -ixo -gTh -oiM -hLn -bJE -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -qVa -oLH -qOB -xnS -ctJ -ctJ -yfC -npX -vct -wwE -hyu -jue -hyu -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(12,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -aUG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ild -hkY -hkY -hkY -hkY -cqp -rwD -juk -juk -juk -juk -nwG -nwG -iAD -nwG -epd -nwG -nwG -cmZ -xEM -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -xcA -nwG -sCs -vTr -vTr -vTr -vTr -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iJG -iuf -iuf -iuf -nwG -nwG -nwG -uMN -syR -wKV -amu -aiy -ixo -uTl -kOH -juk -juk -gyr -rfR -gyr -juk -juk -kOH -mQW -ixo -gTh -oiM -dpo -syR -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -ctJ -oLH -jdq -xnS -ctJ -ctJ -gIk -npX -npX -npX -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(13,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -pey -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -fPU -hkY -dPh -hkY -hkY -cqp -rwD -juk -juk -juk -juk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -cmZ -cmZ -cmZ -mYY -cmZ -cmZ -mYY -mYY -mYY -mYY -mYY -nHx -nwG -sCs -sCs -sCs -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -vuQ -utL -amu -aiy -ixo -uTl -kOH -juk -juk -gyr -gyr -gyr -qtj -kOH -suG -mQW -ixo -gTh -oiM -hLn -vuQ -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -ctJ -oLH -bmP -xnS -ctJ -ctJ -uYH -npX -vjk -bMm -poy -bMm -vjk -tbk -sEo -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(14,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -jco -hkY -gsO -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mgg -dTY -bVY -vMr -bVY -fDi -eFW -tGA -xlH -pAr -cmZ -mYY -cmZ -xTS -mYY -mYY -xlH -bmY -mYY -rgV -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -dbD -qGk -rYN -aiy -seL -uTl -kOH -kOH -qtj -qtj -juk -juk -qtj -kOH -kOH -mQW -seL -gTh -tdT -dTe -eYy -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -npX -ctJ -oLH -gIk -xnS -ctJ -ctJ -oig -npX -pqE -bMm -bMm -bMm -fJt -qvm -nbu -uMN -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(15,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -pri -hkY -hkY -hkY -naM -naM -naM -cIh -hkY -gmq -fnU -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -ivg -mYY -mYY -mYY -mYY -mYY -mYY -mYY -fJa -pAr -cmZ -mYY -cmZ -uTP -mYY -mYY -xFP -xTS -mYY -ube -nwG -nwG -nwG -nwG -aDc -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -xTW -iuf -iuf -iuf -iuf -nwG -nwG -nwG -uMN -mLT -udM -puU -jLQ -uMN -uTl -kOH -bMm -kOH -kOH -juk -juk -kOH -bMm -kOH -mQW -uMN -oIK -puU -mmN -wMy -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -cQU -fnt -hHv -npX -qVa -gJq -avI -gJq -ctJ -ctJ -rDh -npX -kfo -bMm -bMm -bMm -vNi -qvm -dag -pWg -vAo -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(16,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -tTO -guh -lOq -hkY -aZu -szm -aZu -aZu -hkY -gmq -fnU -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -fJa -pAr -cmZ -mYY -cmZ -uTP -mYY -mYY -wfO -blR -mYY -mYY -nwG -nwG -nwG -nwG -jPH -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -tdk -tdk -tdk -tdk -ijj -wqO -nDw -vkl -pJl -iuf -iuf -iuf -nwG -nwG -nwG -uMN -ijy -ijy -puU -rqZ -dCA -uTl -suG -kOH -kOH -suG -kOH -kOH -kOH -kOH -suG -mQW -dCA -ydr -puU -ijy -ijy -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -jkb -bMm -bMm -bMm -npX -ctJ -ctJ -ctJ -ctJ -ctJ -ctJ -gmZ -npX -hOO -bMm -bMm -bMm -vNi -qvm -dag -bMm -bMm -gxx -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(17,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -hkY -dvB -gma -hkY -sUE -vNc -sUE -sUE -hkY -gmq -fnU -nwG -nwG -lSB -nwG -nwG -nwG -nwG -cmZ -sRR -plK -mYY -iIq -imH -mYY -mYY -mYY -fJa -pAr -cmZ -mYY -cmZ -uTP -mYY -mYY -uJc -aKH -mYY -mYY -nwG -nwG -nwG -nwG -shk -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -gqR -vVd -mlj -qyk -kmm -izS -iVs -aHs -vtm -tdk -iuf -iuf -nwG -nwG -nwG -uMN -nyJ -aZe -puU -jLQ -uMN -npX -sVu -sVu -sVu -rse -kOH -wyr -sVu -sVu -sVu -npX -uMN -oIK -puU -nyJ -nyJ -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -nPo -bMm -bMm -bMm -npX -fky -qkG -mxW -kOg -cuj -ctJ -cnW -npX -xst -bMm -bMm -bMm -rkK -qvm -lVm -cBF -fjf -bGm -iNV -lzC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(18,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -xQc -naM -tci -hkY -gmM -lha -gmM -gmM -hkY -gmq -fnU -nwG -nwG -hkY -hkY -hkY -hkY -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -kyo -pAr -cmZ -mYY -cmZ -iro -mYY -mYY -iro -gFw -vkR -fQa -nwG -nwG -nwG -nwG -lpZ -nwG -nwG -nwG -nwG -nwG -nwG -iuf -stc -nPH -aFN -jVb -kmm -kmm -lKj -eSH -foz -tkz -ooI -tSz -iuf -nwG -nwG -nwG -uMN -uMN -uMN -pGr -pgF -uMN -uMN -pGr -uMN -pgF -gkT -xxs -oka -pgF -uMN -pGr -uMN -uMN -pgF -pGr -uMN -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -npX -kYH -npX -npX -npX -npX -npX -npX -npX -keh -qvm -npX -npX -nXR -jYU -nXR -npX -qvm -npX -eFo -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(19,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -tTX -qMq -giW -hkY -hrv -naM -naM -aYj -hkY -kOH -kOH -nwG -nwG -hkY -jjI -hkY -hkY -nwG -cmZ -oix -oix -oix -mYY -mYY -mYY -mYY -mYY -cmZ -cmZ -cmZ -mYY -cmZ -cmZ -mYY -mYY -nCe -kyo -mOw -kFN -nwG -nwG -nwG -nwG -hJo -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -gqR -iHx -bdH -mCJ -kmm -nAF -gUt -hgq -tkz -ooI -ooI -iuf -nwG -nwG -nwG -npX -uMN -pEY -seP -seP -seP -seP -seP -huH -tva -xow -xow -xow -qmf -uhN -seP -seP -seP -seP -seP -pEY -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -qoo -seP -seP -seP -seP -seP -seP -uKi -fWJ -fWJ -fWJ -xPN -cBF -ccE -cBF -wqd -fWJ -fWJ -fWJ -twS -hcx -seP -seP -seP -seP -seP -qoo -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(20,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -bWP -naM -aGS -hkY -ldG -hkY -hkY -gtb -hkY -hkY -hkY -nwG -nwG -hkY -oLq -hkY -hkY -nwG -cmZ -oix -oix -oix -mYY -mYY -bzl -mYY -mYY -mYY -mYY -hsZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -tdk -tdk -gqR -scR -gfe -nKd -qHP -gqR -wqT -tdk -nHD -iuf -nwG -nwG -nwG -nwG -npX -npX -kcY -seP -seP -seP -seP -huH -ujr -bPz -tYv -clJ -oXl -uhN -seP -seP -seP -seP -kcY -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -kdT -wrh -ddf -bGE -bGE -oDu -bGE -bGE -mzj -bGE -bGE -oDu -ltH -bMm -kOH -bMm -sjU -oDu -bGE -bGE -mzj -bGE -bGE -oDu -bGE -bGE -pkS -wrh -uUV -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(21,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -oKd -vvz -oHC -hkY -naM -naM -naM -naM -hkY -hkY -hkY -nwG -nwG -hkY -qsz -hkY -hkY -nwG -cmZ -fXf -oix -oix -mYY -kwm -hSc -gUc -mYY -boe -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -gNI -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -jwL -umb -gfe -rsg -cvU -fVq -tdk -tkz -ooI -tSz -iuf -nwG -nwG -nwG -nwG -nwG -uMN -uMN -pGr -uMN -uMN -seP -huH -ujr -yfy -lHx -gus -oXl -uhN -seP -uMN -uMN -pGr -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -uhN -ddf -ltH -uMN -npX -npX -npX -npX -qvm -npX -npX -npX -npX -npX -kev -npX -npX -npX -npX -npX -qvm -npX -npX -npX -npX -uMN -sjU -pkS -huH -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(22,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -hkY -aCb -pBs -hkY -hkY -vNc -hkY -hkY -hkY -hkY -hkY -nwG -nwG -hkY -hkY -hkY -hkY -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -amo -mYY -mYY -mYY -cAh -noS -noS -uGy -mYY -mYY -dmp -bUv -sVQ -mdx -mYY -nwG -nwG -nwG -euK -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -mqx -lMK -bbu -iPI -qjE -fFO -bgv -xYs -ooI -ooI -iuf -nwG -nwG -nwG -nwG -uMN -npX -tcq -fxp -vZh -uMN -seP -huH -ujr -siq -sMk -gus -oXl -uhN -seP -uMN -tRW -cot -iuq -npX -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -uhN -huH -uMN -qnL -qdI -dXH -xMz -npX -nmR -bzk -bzk -vES -cdi -pIv -kOH -pIv -cdi -vES -wIc -wIc -wFZ -npX -xMz -mAC -sAj -gzE -uMN -uhN -huH -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(23,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -hkY -tVz -xic -hkY -naM -naM -naM -naM -hkY -hkY -hkY -nwG -nwG -hkY -hkY -qXI -hkY -nwG -cmZ -aIB -eRQ -mYY -mYY -mYY -mYY -mYY -mYY -lWL -otG -dzi -dzi -tNr -mYY -mYY -aIB -scU -kRA -mYY -mYY -nwG -rYF -nwG -fEj -nwG -nwG -nwG -stc -nwG -nwG -nwG -iuf -iuf -iuf -tdk -gqR -bCI -nuW -orH -mKI -feU -tdk -tdk -iuf -iuf -nwG -nwG -nwG -nwG -uMN -kox -fxp -fxp -oXl -wgy -seP -huH -ujr -vrr -xBs -wNI -oXl -uhN -seP -cwQ -ujr -cot -cot -bGj -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -rPz -cXI -npX -uhN -huH -sPs -ctJ -rVw -rVw -cxb -npX -gFp -bmj -bmj -bmj -qDJ -bMm -kOH -bMm -qDJ -bmj -bmj -bmj -ucM -npX -cxb -uhX -uhX -ctJ -wtF -uhN -huH -npX -aeg -rPz -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(24,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -hkY -eAa -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -nwG -nwG -hkY -hkY -hkY -hkY -nwG -cmZ -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -otG -dzi -dzi -tNr -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -rYF -nwG -szx -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -tdk -bMJ -pds -wqO -axP -tdk -tdk -iuf -iuf -iuf -nwG -nwG -nwG -nwG -bhd -uCl -fxp -fxp -oXl -cjn -seP -huH -eEG -gDi -gDi -gDi -tLb -uhN -seP -gpd -ujr -cot -cot -byu -bhd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -bMm -cXI -npX -uhN -mRg -npX -tdq -raE -rVw -xxS -npX -oCw -bmj -joj -bmj -cmP -bMm -kOH -bMm -xFl -bmj -ffW -bmj -tKy -npX -haV -uhX -tyo -hQe -npX -tLX -huH -npX -aeg -bMm -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(25,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -hkY -hkY -sjS -hkY -nwG -cmZ -pqK -uoi -mBi -vWN -vWN -vWN -bOI -mYY -mYY -omC -vWN -vWN -vYe -mYY -mYY -mYY -mYY -mYY -dsX -eQk -nwG -rYF -nwG -nwG -nwG -nwG -nwG -egj -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iJG -iuf -iuf -iuf -iuf -nwG -nwG -nwG -nwG -uMN -oLG -fxp -fxp -ueE -wbL -seP -huH -kOH -kOH -kOH -kOH -kOH -uhN -seP -pIT -eig -cot -cot -xkm -pfo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -aeg -bMm -cXI -npX -uhN -huH -liK -ctJ -rVw -rVw -tUf -npX -qmu -bmj -qmu -bmj -cdi -bpZ -kOH -npE -cdi -bmj -qmu -bmj -qmu -npX -tUf -uhX -uhX -ctJ -nzQ -uhN -huH -npX -aeg -bMm -cXI -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(26,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -flt -dBz -akc -xud -nGI -ieJ -hSj -dOK -tXM -mIu -nwG -nwG -hkY -hkY -hkY -hkY -nwG -cmZ -tln -bNL -mYY -mYY -mYY -mYY -otG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -gQt -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -rOx -fxp -fxp -oXl -lba -seP -fUp -kOH -npX -nXR -npX -kOH -sPA -seP -gSa -ujr -cot -cot -iwZ -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -aeg -bMm -cXI -npX -uhN -huH -vPI -hxD -nAB -iVu -pMw -npX -wOj -iFa -wOj -iFa -qDJ -bMm -kOH -bMm -qDJ -iFa -wOj -iFa -wOj -npX -pMw -iVu -nAB -lkm -gie -uhN -huH -npX -aeg -bMm -cXI -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(27,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -dfu -gYa -rRf -wJT -sJT -sDP -jKC -wno -nLJ -hOa -nwG -nwG -hkY -hkY -vBp -hkY -nwG -cmZ -mYY -mYY -psT -uGy -mYY -mYY -otG -mYY -mYY -mYY -mYY -mYY -mYY -xIr -qZt -qZt -pxp -mYY -fqa -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -uMN -gPE -lbt -uMN -seP -fUp -kOH -npX -lFi -npX -kOH -sPA -seP -uMN -bLS -cot -xMv -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -pjT -bMm -bMm -bMm -qLe -uhN -huH -lST -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -cry -kOH -cry -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -lST -uhN -huH -qCM -bMm -bMm -bMm -jRd -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(28,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -usi -bUJ -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mYY -bam -mvK -tNr -mYY -mYY -otG -mYY -mYY -mYY -mYY -mYY -mYY -lWh -mYY -mYY -eIg -mYY -evJ -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -xTW -iuf -tdk -ifn -ptr -fJA -tdk -iuf -iuf -nwG -nwG -nwG -nwG -nwG -npX -uMN -uMN -uMN -uMN -seP -fUp -kOH -npX -nXR -npX -kOH -sPA -seP -uMN -uMN -bdb -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -xzP -gRd -gRd -eFQ -npX -uhN -huH -thm -mjW -nIt -mjW -nIt -npX -eBV -pzH -hfy -hYn -uMN -npX -umy -npX -uMN -vtu -iCH -aeX -uWE -npX -nIt -mjW -nIt -mjW -fUG -uhN -huH -npX -eFQ -gRd -bmX -rKE -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(29,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -ofO -ykj -xWE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -dmw -nwG -mfO -nwG -nwG -cmZ -mYY -mYY -rOE -tNr -mYY -mYY -otG -mYY -mYY -mYY -mYY -mYY -mYY -lWh -mYY -mYY -eIg -txW -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -tdk -tdk -egj -wqO -tdk -tdk -uwY -oDn -dqR -tdk -tdk -iuf -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -npX -kcY -seP -fUp -kOH -kOH -kOH -kOH -kOH -sPA -seP -kcY -npX -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -npX -npX -npX -uhN -huH -xkh -puU -tAW -puU -tAW -npX -gfe -gfe -gfe -gfe -khd -cLN -kOH -eSW -gfe -gfe -hYg -gfe -umb -npX -tAW -puU -tAW -puU -lKh -uhN -huH -npX -npX -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -"} -(30,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -mlX -aBG -nFh -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -oBA -ikK -nwG -nwG -nwG -nwG -cmZ -mYY -loV -xfk -tNr -mYY -mYY -omC -vWN -vWN -bOI -mYY -qJE -rdE -azj -vGQ -vGQ -nEQ -lWi -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -gqR -aeA -mCY -nPC -gjA -oTn -ebI -lEQ -ehi -eGJ -ooI -tSz -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -pnA -seP -seP -mYB -laK -eTw -kOH -aiv -laK -mCd -seP -seP -unA -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -puU -kVU -npX -puU -kVU -npX -uhN -hBu -npX -rng -fry -puU -kYo -npX -wII -qSz -kzt -qSz -cWi -cLN -kOH -hqf -gfe -gfe -gfe -gfe -gfe -npX -sgJ -puU -pkc -vhJ -npX -aNv -huH -npX -puU -kVU -npX -puU -kVU -npX -npX -nwG -nwG -nwG -nwG -"} -(31,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -jfo -wxG -hZU -hhy -tKu -xZn -oMv -ucE -ucE -ucE -nwG -aot -aot -nwG -nwG -nwG -nwG -cmZ -mYY -mYY -qFB -tNr -mYY -mYY -mYY -mYY -mYY -otG -mto -mYY -tjy -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -dUx -nwG -vkG -nwG -xOt -nwG -deA -nwG -nwG -iuf -sMD -fnM -udP -mHO -fTk -tGL -dsS -gZZ -tWJ -nIl -dmh -ooI -ooI -nwG -nwG -nwG -nwG -lOK -nwG -nwG -bhd -mWr -seP -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -seP -ojs -bhd -nwG -nwG -nwG -lOK -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -puU -puU -puU -puU -puU -puU -npX -uhN -huH -eiD -puU -puU -puU -puU -npX -fuL -kBf -jEO -jow -sVY -tEo -kOH -hqf -dWb -dWb -dWb -dWb -dWb -npX -puU -puU -puU -puU -teP -uhN -huH -npX -puU -puU -puU -puU -puU -puU -npX -nwG -nwG -nwG -nwG -"} -(32,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -mAZ -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -frR -frR -nwG -nwG -nwG -nwG -cmZ -mYY -qMO -mYY -tNr -mYY -mYY -mYY -mYY -mYY -otG -kNo -mYY -hrR -mYY -mYY -mYY -mYY -mYY -mYY -mcp -nwG -nwG -nwG -nwG -gwK -nwG -ouN -nwG -nwG -nwG -nwG -iuf -jMb -bXs -gij -mHO -yfD -fGk -fGk -fGk -pxT -fvJ -afL -bYS -iuf -nwG -nwG -uMN -puU -puU -uMN -nwG -uMN -mWr -seP -uMN -hKZ -htn -hyu -uMN -pzP -vmS -hms -uMN -seP -ojs -uMN -nwG -uMN -puU -puU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cdi -uhN -huH -npX -boC -uTE -jXp -xuL -npX -dwW -cot -xkm -cot -yfX -qBW -kOH -hqf -cot -jwu -gPx -jwu -gPx -npX -xuL -jXp -uTE -boC -npX -uhN -huH -cdi -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(33,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -rrB -ucE -ucE -ucE -nWV -ucE -sQq -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cmZ -mYY -mYY -mYY -tNr -mYY -mYY -mYY -mYY -mYY -otG -uQV -mYY -sCp -mYY -mYY -mYY -mYY -mYY -mYY -iKL -nwG -nwG -nwG -nwG -fRt -nwG -xyp -nwG -nwG -nwG -nwG -iuf -ivA -lqS -kmm -icl -bSy -aCL -aCL -lxC -vPm -kmm -shZ -bYS -iuf -nwG -nwG -npX -uMN -uMN -uMN -uMN -uMN -waY -seP -pGr -kcY -tKS -xix -tep -vfH -vfH -sPA -pGr -seP -ojs -uMN -uMN -uMN -uMN -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qDJ -uhN -huH -odY -npX -npX -npX -npX -npX -lBG -cot -egr -cot -aBH -rBH -kOH -hqf -cot -cot -cot -cot -gxr -npX -npX -npX -npX -npX -odY -uhN -huH -qDJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(34,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -tzS -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -cJW -nwG -nwG -cmZ -mYY -mYY -mYY -xgK -noS -noS -noS -noS -noS -gtL -cUd -mYY -wPR -mYY -iqH -mYY -mYY -mYY -mYY -bUW -nwG -nwG -nwG -nwG -wWp -nwG -hrQ -nwG -nwG -nwG -nwG -iuf -eNo -ftq -gij -mHO -bSy -kmm -kmm -vMU -cpQ -ttK -vtm -qEu -iuf -nwG -nwG -uMN -vVl -vyg -owF -szl -uMN -mWr -seP -uMN -fmx -sWr -hyu -uMN -wBl -tbe -hms -uMN -seP -ojs -uMN -szl -ceb -gRp -pKU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -uhN -huH -npX -boC -dXH -qdI -lRl -npX -dvM -cot -cot -cot -rYB -cLN -kOH -hqf -gCK -biX -uYZ -biX -uYZ -npX -lRl -qdI -dXH -boC -npX -uhN -huH -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(35,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -jmm -nwG -nwG -wxH -lVy -lVy -lVy -lVy -reP -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -xXf -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -sMD -aea -hTt -mHO -ehL -ktB -sCv -mAJ -dAc -mwT -tkz -ooI -tSz -nwG -nwG -uMN -vVl -vyg -owF -szl -uMN -mWr -seP -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -seP -ojs -uMN -jvr -ceb -gRp -pKU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -uhN -huH -gqp -puU -puU -puU -puU -npX -dvM -cot -cot -cot -rYB -cLN -kOH -hqf -gOm -lEz -lEz -lEz -dMQ -npX -puU -puU -puU -puU -dPL -uhN -huH -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(36,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iZg -iZg -iZg -nwG -nwG -nwG -nwG -nDe -nwG -nwG -wxH -dJN -dJN -dJN -lVy -suu -suu -suu -sKd -fkl -kDA -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ovj -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -gqR -qZx -uyj -peq -xlT -xWN -doG -lHu -lbO -xYs -ooI -ooI -nwG -nwG -uMN -ykY -puU -kPT -jvr -uMN -mWr -seP -uMN -ctJ -lIA -bpJ -uMN -fPP -qra -ctJ -uMN -seP -ojs -uMN -szl -fnm -puU -qsX -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -uhN -hrI -npX -kIE -kyO -puU -kYo -npX -lBG -cot -vlx -cot -aBH -rTg -kOH -hqf -cLN -jie -kOH -cHc -hqf -npX -sgJ -puU -gRz -onk -npX -rfi -huH -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(37,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iZg -iZg -iZg -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wxH -dJN -dJN -dJN -lVy -mJw -kkA -suu -sKd -rjM -aYg -nwG -nwG -nwG -nwG -vJT -nwG -nwG -nwG -poC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -tdk -tdk -egj -wqO -tdk -tdk -tdk -wqO -sMD -tdk -tdk -iuf -nwG -nwG -uMN -vVl -vyg -owF -bMm -pGr -mWr -seP -pGr -ctJ -gzZ -gzZ -uMN -eCj -eCj -ctJ -pGr -seP -ojs -pGr -bMm -ceb -gRp -pKU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -rPz -cXI -npX -uhN -huH -hCx -puU -tAW -puU -tAW -npX -dwW -cot -xkm -cot -yfX -hVl -kOH -hqf -cLN -oVv -kOH -pYp -hqf -npX -tAW -puU -tAW -puU -iaU -uhN -huH -npX -aeg -rPz -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(38,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iZg -iZg -iZg -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wxH -dJN -dJN -dJN -lVy -suu -suu -suu -sKd -tcp -qsH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lBD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iJG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -nwG -nwG -uMN -vVl -vyg -puq -iiv -uMN -mWr -seP -uMN -pMw -sYT -jmU -uMN -iEW -uCt -pMw -uMN -seP -ojs -uMN -iiv -obS -gRp -pKU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -bMm -cXI -npX -uhN -huH -npL -mjW -nIt -mjW -nIt -npX -daq -kNc -jEO -gfo -gzF -tEo -kOH -dWj -qph -mjj -odZ -mjj -gic -npX -nIt -mjW -nIt -mjW -veT -uhN -huH -npX -aeg -bMm -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(39,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -git -git -git -git -git -nwG -nwG -nwG -nwG -nwG -wxH -sSC -sSC -sSC -lVy -suu -suu -suu -sKd -aYg -aYg -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -uMN -uMN -uMN -uMN -uMN -waY -seP -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -seP -ojs -uMN -uMN -uMN -uMN -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -aeg -bMm -cXI -npX -uhN -huH -uMN -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -umy -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -uMN -uhN -huH -npX -aeg -bMm -cXI -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(40,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -naM -nwG -nwG -nwG -nwG -nwG -nwG -lhP -git -nwG -nwG -nwG -nwG -git -nwG -nwG -nwG -nwG -nwG -wxH -sSC -sSC -sSC -lVy -byX -nLN -vJt -sWv -pqn -pqn -nRp -nRp -nwG -nwG -nwG -wxc -nwG -nwG -nwG -nwG -hkY -hkY -cwk -xvG -qhh -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -ctJ -ctJ -fWy -bMm -uMN -mWr -seP -uMN -ctJ -lIA -fPP -uMN -bpJ -qra -ctJ -uMN -seP -ojs -uMN -luf -eqT -kLa -pRr -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -aeg -bMm -cXI -npX -uhN -mYB -laK -laK -laK -wLU -laK -laK -laK -laK -laK -laK -gdk -bMm -kOH -bMm -upq -laK -laK -laK -laK -laK -laK -wLU -laK -laK -laK -mCd -huH -npX -aeg -bMm -cXI -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(41,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dTV -nwG -nwG -nwG -nwG -git -nwG -nwG -uuZ -nwG -nwG -wxH -sSC -sSC -sSC -lVy -byX -byX -byX -sWv -pqn -pqn -nRp -nRp -nwG -nwG -nwG -nwG -qAn -nwG -aYh -nwG -hkY -cNe -gUh -bUs -kJZ -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -xTW -iuf -iuf -nwG -nwG -qfQ -pXy -bco -kkC -bMm -pGr -mWr -seP -pGr -ctJ -eCj -eCj -uMN -sNx -sNx -ctJ -pGr -seP -ojs -pGr -bMm -sPA -kcY -seP -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -pjT -bMm -bMm -bMm -qvw -uhN -seP -ddf -bGE -bGE -bGE -bGE -bGE -bqt -bGE -bGE -bGE -ltH -bMm -kOH -bMm -sjU -bGE -bGE -bGE -hnQ -bGE -bGE -bGE -bGE -bGE -pkS -wrh -huH -fwf -bMm -bMm -bMm -jRd -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(42,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -wWh -wWh -wWh -wWh -wWh -nwG -dTV -dTV -git -dPl -git -git -nwG -nwG -nwG -uuZ -nwG -wxH -wxH -wxH -wxH -lVy -byX -byX -byX -sWv -pqn -pqn -nRp -nRp -nwG -nwG -nwG -nwG -nwG -nwG -cdg -nwG -hkY -hkY -oAh -beM -csh -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -tdk -tdk -tdk -tdk -tdk -fWK -nkH -nwG -nwG -ixo -pXy -moe -kkC -bMm -uMN -mWr -seP -uMN -pMw -uCt -iEW -uMN -vQb -xRs -pMw -uMN -seP -ojs -uMN -qCp -doN -fvW -pRr -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -xzP -bmX -gRd -uOF -npX -uhN -wrh -huH -uMN -npX -gkT -xxs -oka -npX -uMN -bOc -tej -wvF -bMm -lSs -bMm -wvF -tej -bOc -uMN -npX -gkT -xxs -oka -npX -uMN -uhN -wrh -huH -npX -uOF -gRd -bmX -rKE -npX -nwG -nwG -nwG -nwG -nwG -nwG -"} -(43,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -wWh -wWh -wWh -wWh -wWh -nwG -dTV -nwG -nwG -nwG -nwG -git -nwG -nwG -nwG -nwG -nwG -nwG -oQD -oQD -aXv -lCB -byX -qgc -byX -sWv -pqn -pqn -nRp -nRp -nwG -nwG -nwG -nwG -nwG -nwG -eub -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -bEW -tdk -bEW -wqO -tdk -tdk -fPu -bKO -bxN -uCg -kdY -nkH -nwG -nwG -ixo -pXy -fPP -kkC -bMm -uMN -mWr -seP -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -seP -ojs -uMN -uMN -uMN -uMN -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -npX -npX -npX -uhN -wrh -huH -npX -fFq -ngN -bMm -bMm -vPK -npX -npX -npX -eBO -kqb -npX -eBO -kqb -npX -npX -npX -dMq -bMm -bMm -fuq -oWr -npX -uhN -wrh -huH -npX -npX -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -"} -(44,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -krO -wWh -wWh -wWh -wWh -nwG -git -nwG -nwG -nwG -nwG -git -nwG -nwG -nwG -nwG -nwG -nwG -oQD -oQD -aXv -lCB -tJF -tJF -tJF -nwG -nwG -nwG -nwG -nwG -nwG -xVC -xdM -awm -nwG -nwG -nwG -nwG -hkY -hkY -jgZ -oXt -tqw -nwG -nwG -nwG -nwG -nwG -nwG -tdk -afn -xtC -dut -pcP -tet -vbw -dut -tUO -xQk -bKv -wfh -bkR -nkH -nwG -nwG -seL -pXy -moe -kkC -bMm -uMN -mWr -seP -uMN -ctJ -lIA -fPP -uMN -moe -qra -ctJ -uMN -seP -ojs -uMN -buI -lwq -uoH -kzd -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -puU -kVU -npX -puU -kVU -npX -uhN -wrh -huH -qlv -bMm -bMm -pOg -bMm -glT -npX -uMN -iyY -mAr -mAr -kkq -mAr -mAr -oib -uMN -npX -izm -bMm -bsg -bMm -bMm -oVH -uhN -wrh -huH -npX -puU -kVU -npX -puU -kVU -npX -npX -nwG -nwG -nwG -nwG -"} -(45,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -krO -wWh -wWh -wWh -wWh -nwG -git -git -git -git -git -git -nwG -nwG -nwG -tAH -nwG -nwG -nwG -nwG -aXv -lCB -tJF -tJF -tJF -nwG -nwG -nwG -nwG -nwG -nwG -xVC -xdM -awm -nwG -nwG -nwG -nwG -hkY -hMP -cWA -kdJ -iXl -nwG -nwG -nwG -nwG -nwG -nwG -tIr -bXs -xgI -egj -mTM -kmm -uMB -egj -fxp -uRR -sxJ -pje -bYS -iuf -nwG -nwG -uMN -ctJ -ctJ -fWy -bMm -uMN -mWr -seP -pGr -ctJ -gJq -gJq -uMN -gzZ -gzZ -ctJ -pGr -seP -ojs -xDP -lwq -lwq -swc -uMN -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -puU -puU -puU -puU -puU -puU -npX -xhp -pkS -huH -npX -iar -ngN -dnj -bMm -udB -npX -juz -dyx -hBF -hBF -hBF -hBF -hBF -oKX -oMs -npX -tmJ -bMm -dnj -fuq -gbd -npX -uhN -ddf -vyP -npX -puU -puU -puU -puU -puU -puU -npX -nwG -nwG -nwG -nwG -"} -(46,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -krO -krO -krO -krO -krO -wWh -wWh -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kYP -nwG -nwG -aXv -lCB -tJF -tJF -tJF -nwG -nwG -nwG -nwG -nwG -nwG -xVC -xdM -awm -nwG -nwG -nwG -nwG -hkY -hkY -mCm -nuT -bTY -nwG -tdA -tdA -nwG -nwG -nwG -sZq -lqS -kmm -nuR -kmm -kmm -kmm -cbr -fxp -fxp -dEB -omo -bYS -iuf -nwG -nwG -npX -uMN -scE -fWy -bMm -uMN -waY -seP -uMN -pMw -qhV -vCb -uMN -jmU -sYT -pMw -uMN -seP -ojs -uMN -kHz -mkA -wkY -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -uhN -rTh -npX -npX -npX -npX -npX -npX -uMN -jVr -hBF -hBF -hBF -hBF -hBF -hBF -oKX -bZT -npX -npX -npX -npX -npX -npX -npX -nXo -huH -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(47,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -krO -wWh -wWh -wWh -wWh -nwG -kSC -kSC -kSC -kSC -kSC -kSC -nwG -nwG -nwG -kns -nwG -nwG -nwG -nwG -vBW -pcb -tJF -tJF -tJF -nwG -nwG -pSg -nwG -nwG -nwG -xVC -xdM -awm -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -tdA -tdA -nwG -nwG -nwG -sUl -vwv -gij -egj -mTM -kmm -egc -wqO -egj -iwA -dut -lsn -qEu -iuf -nwG -nwG -nwG -npX -uMN -blK -rvJ -uMN -mWr -seP -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -seP -ojs -uMN -rHf -uMN -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -rZr -mQe -pPN -lwq -lwq -kbK -acQ -fGr -aqc -hBF -djA -xPI -jbs -uvT -oKX -doE -npX -vgZ -hJf -php -dIp -aOw -npX -edu -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(48,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wWh -wWh -krO -wWh -wWh -wWh -wWh -nwG -kSC -nwG -nwG -nwG -nwG -kSC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -tkL -tkL -tkL -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uoy -dKh -oQk -oQk -nwG -nwG -nwG -tdk -afn -iNg -dut -fGs -iuu -sHg -dut -rQn -ygl -mVw -lyD -tuL -nkH -nwG -nwG -nwG -nwG -npX -uMN -uMN -uMN -diH -seP -seP -seP -seP -huH -kOH -uhN -seP -seP -seP -seP -hHN -uMN -uMN -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -gSl -eUH -pPN -lwq -aqC -wkY -npX -uog -hBF -hBF -eyi -kFS -tEz -hBF -oKX -wEc -npX -bMm -bMm -bMm -bMm -bMm -nXR -uhN -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(49,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -wUW -wUW -wUW -nwG -kSC -nwG -nwG -nwG -nwG -kSC -nwG -nwG -nwG -jYz -nwG -nwG -dtk -nwG -nwG -nwG -tkL -tkL -tkL -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vJd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uoy -dKh -tGb -tGb -aFQ -uoy -nwG -iuf -tdk -bEW -tdk -bEW -wqO -tdk -tdk -jLb -mcL -gGL -drY -kdY -nkH -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -npX -ucI -say -say -say -tBb -wlo -qSK -say -say -say -pvY -npX -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cdi -uhN -miX -npX -npX -npX -npX -xmE -lwq -ddS -jVr -hBF -hBF -hBF -hBF -hBF -hBF -oKX -uHw -npX -bMm -bMm -xYQ -bMm -bMm -pZV -uhN -huH -cdi -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(50,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -lWT -wUW -wUW -wUW -wUW -nwG -kSC -nwG -nwG -nwG -nwG -kSC -nwG -nwG -nwG -iFC -nwG -nwG -nwG -nwG -nwG -nwG -tkL -tkL -tkL -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uoy -dKh -tGb -tGb -aFQ -uoy -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -tdk -tdk -srZ -qGE -ifr -ydH -nkH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -uMN -pGr -uMN -bCl -uMN -uMN -uMN -uMN -uMN -uMN -uMN -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ixo -uhN -huH -hFz -mbv -aqC -ddS -vii -vii -npX -lcC -hBF -hBF -apP -hBF -hBF -hBF -oKX -uMN -uMN -peo -uMN -xVL -lUq -hPV -npX -uhN -huH -ixo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(51,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -wUW -wUW -wUW -nwG -kSC -nwG -nwG -nwG -nwG -kSC -nwG -nwG -nwG -lhP -nwG -nwG -nwG -nwG -nwG -nwG -tkL -tkL -tkL -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dZU -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iJG -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -jUV -seP -seP -seP -huH -kOH -rhV -puU -bcv -bcv -bcv -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qDJ -uhN -rTh -npX -npX -npX -npX -npX -npX -uMN -lcC -hBF -hBF -xPI -oKj -vUh -hBF -oKX -npX -bMm -bMm -npX -npX -npX -npX -npX -nXo -huH -qDJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(52,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -wUW -wUW -wUW -nwG -kSC -nwG -nwG -nwG -nwG -kSC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -vgL -nwG -xTP -nwG -nwG -wQR -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -gJq -gJq -gJq -seP -huH -kOH -rhV -puU -puU -szT -puU -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -npX -ctJ -tfg -ctJ -npX -ony -dIT -iei -hBF -hXv -inz -mmL -opE -hBF -tnk -npX -bMm -jrh -nXR -ctJ -tfg -ctJ -npX -uhN -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(53,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -nzW -wgP -wUW -nwG -kSC -kSC -kSC -kSC -kSC -kSC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -bMS -ekE -jmf -mYY -mYY -mYY -mIV -mYY -rdF -mYY -mYY -mYY -mYY -nwG -nwG -sJB -nwG -nwG -lSH -iNE -nwG -uzD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -vCb -vCb -vCb -seP -huH -tSl -rhV -puU -bcv -bcv -bcv -uMN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -gsu -ctJ -vUL -ctJ -pmk -aHD -mFb -hBF -ozw -exU -tJF -rDl -pbS -iSX -oKX -uMN -npX -peo -npX -ryU -evB -ctJ -gsu -uhN -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(54,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -fGN -kwy -wUW -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -sGH -xQG -rjR -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -clE -iol -uzD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -uMN -uMN -uMN -pGr -uMN -pGr -uMN -uMN -uMN -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cdi -uhN -huH -gsu -ctJ -jkj -ctJ -gbn -qAM -tEz -flw -iie -tbt -muQ -tJF -tJF -jVr -oKX -bMm -kmm -kmm -aMF -ctJ -jkj -ctJ -gsu -uhN -huH -cdi -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(55,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wUW -wUW -wUW -wUW -pVC -gYn -wUW -nwG -dGF -dGF -dGF -dGF -dGF -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -dth -jBc -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -wQR -nwG -nwG -nwG -clE -nwG -nwG -nwG -jFC -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -kOr -eUj -huH -flr -uhN -nIG -aOv -oWA -npX -nwG -nwG -nwG -nwG -nwG -tmS -tmS -nbx -tmS -tmS -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ixo -uhN -huH -gsu -ctJ -vUL -ctJ -dkE -rmv -rbc -hBF -oKX -tJF -tJF -tbt -tJF -jVr -oKX -bMm -tRD -kmm -mDa -ctJ -evB -ctJ -gsu -uhN -huH -ixo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(56,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uPd -nwX -lwk -nwG -dGF -nwG -nwG -nwG -nwG -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -jQH -qpd -mYY -kNY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -dCn -nwG -lSH -fpe -nwG -nwG -nwG -hWw -nwG -nwG -nwG -iuf -iuf -lbg -lbg -lbg -lbg -lbg -lbg -lbg -tdk -tdk -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -bhd -qsG -uhN -huH -kOH -uhN -huH -aLd -bhd -nwG -nwG -nwG -nwG -nwG -nwG -tmS -tmS -tmS -tmS -qtf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qDJ -uhN -rTh -odY -ctJ -jBJ -bCU -npX -tKm -hBF -hBF -oKX -tJF -tJF -tJF -qLi -jVr -oKX -bMm -kmm -ace -npX -pZr -jBJ -ctJ -odY -nXo -huH -qDJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(57,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -bbM -kWI -bYs -nwG -dGF -nwG -nwG -nwG -nwG -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -ygZ -pCz -mYY -abg -mYY -mYY -xQs -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -lbg -lXh -uyj -kmm -kmm -kmm -kmm -tvj -eMj -ooI -tSz -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uMN -lsA -snB -ltH -kOH -sjU -pGl -aAm -uMN -nwG -nwG -nwG -nwG -nwG -nwG -tmS -sGy -tmS -tmS -tmS -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -gsu -ctJ -vUL -ctJ -pmk -aHD -mFb -hBF -oKX -rDl -muQ -tJF -tJF -jVr -oKX -bMm -tRD -kmm -aMF -ctJ -evB -ctJ -gsu -uhN -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(58,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lGN -yjw -eBC -nwG -dGF -nwG -nwG -nwG -nwG -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -bpj -lhf -mYY -iBk -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -lbg -bXs -gij -kmm -mxx -mxx -kmm -pKA -mZk -ooI -ooI -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -qlX -ilE -gRd -ilE -hbQ -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -tmS -tmS -mNQ -tmS -tmS -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -huH -gsu -ctJ -jkj -ctJ -gbn -gHr -bSL -flw -iie -tJF -tJF -tbt -tJF -jVr -oKX -bMm -kmm -kmm -mDa -ctJ -jkj -ctJ -gsu -uhN -huH -cdi -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(59,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kvh -uiT -ybm -nwG -dGF -nwG -nwG -nwG -nwG -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -xLt -uCu -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -lbg -lqS -kmm -gDe -biQ -iIi -kmm -ikU -kve -qEu -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -gkT -xxs -oka -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mNQ -tmS -tmS -phx -tmS -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cdi -uhN -huH -gsu -ctJ -vUL -ctJ -dkE -rmv -rbc -hBF -qfH -xRE -biJ -tJF -kHR -whD -oKX -bMm -kmm -kmm -npX -ctJ -evB -ctJ -gsu -uhN -huH -ixo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(60,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ntZ -jkM -mNT -nwG -dGF -nwG -nwG -nwG -nwG -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -sym -aMP -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -lbg -ftq -gij -kmm -cTZ -cTZ -kmm -eLX -mZk -ooI -tSz -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ixo -uhN -rTh -npX -ctJ -sIx -atg -npX -mpU -hBF -hBF -hBF -iQa -ffF -tVj -dyx -hBF -oKX -npX -qDo -qDo -npX -nXW -sIx -ctJ -npX -nXo -huH -ixo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(61,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -hdl -xJt -nSP -nwG -dGF -dGF -dGF -dGF -dGF -dGF -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -iHo -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -lbg -dDU -uyj -kmm -kmm -kmm -kmm -xcw -hMc -ooI -ooI -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qDJ -uhN -uMC -npX -npX -npX -npX -uMN -enu -vFe -tZV -hBF -hBF -oKj -tEz -vUh -hBF -tnk -uMN -npX -npX -npX -npX -npX -npX -npX -nTP -huH -qDJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(62,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dSX -fll -iIv -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -xmg -mYY -mYY -mYY -mYY -vuE -lye -seO -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -lbg -lbg -lbg -lbg -lbg -lbg -lbg -tdk -tdk -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -nwG -hYG -nwG -hYG -nwG -nwG -nwG -nwG -kUz -nwG -nwG -wGN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uhN -qsG -bMm -nXR -bMm -iRF -nXR -jVr -hBF -hBF -hBF -hBF -xGz -hBF -hBF -hBF -iQa -ffF -ffF -xRE -nXR -iRF -bMm -nXR -bMm -aLd -huH -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(63,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kBt -wWI -eWA -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -aXH -pDf -bjM -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -nwG -jCf -kYz -muk -muk -lMZ -vHw -vHw -vHw -vHw -vHw -nwG -nwG -wGN -wGN -nwG -wGN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -uhN -qsG -bMm -jvS -bMm -vPg -dMS -jVr -hBF -uvT -hBF -hBF -hBF -uvT -hBF -hBF -hBF -uvT -hBF -hBF -dMS -eOT -bMm -iqQ -bMm -aLd -huH -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(64,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dvV -itc -dKz -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -oOk -ilx -abL -mYY -mYY -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -vHw -vHw -iwN -jFt -lco -lco -nnQ -vHw -vHw -qOk -sud -ueP -vvF -vHw -vHw -xIV -gbM -xIV -nNl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -tuD -mCd -qsG -oQt -nXR -bMm -bXE -nXR -pbS -pOC -inz -inz -inz -inz -pOC -inz -inz -inz -inz -pOC -exU -nXR -bXE -bMm -nXR -qWo -aLd -mYB -aVP -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(65,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -iJw -aov -qDH -myg -myg -aov -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xIN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -vHw -hRf -fZc -jGa -lel -lel -nvt -vHw -pJM -rdl -sET -ugN -hUt -vHw -wQq -wGN -wGN -wGN -sBp -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -uoy -npX -npX -uhN -wrh -tGJ -npX -npX -npX -npX -npX -npX -uMN -acQ -acQ -acQ -xJm -acQ -xJm -acQ -acQ -acQ -uMN -npX -npX -npX -npX -npX -npX -rkd -wrh -huH -npX -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(66,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -iJw -rBX -iJw -iJw -rwy -rBX -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -tdk -xts -wqO -xts -tdk -tdk -bgo -tdk -tdk -tdk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -hIe -ygs -ixh -jGl -lfY -lfY -nyc -vHw -pLx -rgu -sPn -ulT -xoj -wrL -wWK -wGN -wGN -wGN -ssV -nwG -nwG -nwG -nwG -npX -npX -uMN -kcx -tfg -pMw -npX -uhN -wrh -rTh -npX -pyA -pyA -pyA -pyA -npX -npX -fue -fZc -fZc -fZc -fZc -fZc -fZc -fZc -mmu -npX -npX -pyA -pyA -pyA -pyA -npX -nXo -wrh -huH -npX -tJn -tfg -pMw -uMN -npX -npX -nwG -nwG -nwG -nwG -nwG -"} -(67,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -wTj -xws -qoi -gCf -iOE -jNE -ugd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -tdk -gqR -iYt -fDm -rLf -wqO -gQK -glu -bML -fWK -nkH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -nwG -vHw -vHw -hUt -xoj -ygs -lfZ -lfZ -fZc -vHw -pNG -rlV -sRs -lfY -fZc -wrW -wQq -xKe -wGN -wGN -nro -nwG -nwG -nwG -nwG -npX -uMN -lIA -gJq -gJq -ctJ -npX -uhN -wrh -huH -tjR -wrh -wrh -wrh -wrh -roD -npX -bsS -fZc -fZc -fZc -fZc -fZc -fZc -fZc -sNM -npX -cLY -wrh -wrh -wrh -wrh -tjR -uhN -wrh -huH -npX -ctJ -sNx -sNx -qra -uMN -npX -nwG -nwG -nwG -nwG -nwG -"} -(68,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -iJw -oZC -oZC -oZC -iOE -bvh -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -xts -gqR -afn -hrg -cot -xkm -afn -gQK -dyT -gqD -yah -nkH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -nwG -nwG -vHw -lMZ -fZc -xoj -llr -mvi -lmI -lMZ -lmI -rmd -lfY -lfY -vxF -wtB -wYR -wGN -wGN -wGN -cxs -nwG -nwG -nwG -npX -uMN -vIV -uMN -mpo -qhV -gUE -npX -uhN -wrh -huH -nXR -wrh -wrh -wrh -wrh -pDg -npX -phn -vcp -flC -vcp -vyk -vcp -oxA -vcp -abP -npX -pDg -wrh -wrh -wrh -wrh -nXR -uhN -wrh -huH -npX -cqy -xRs -uvZ -uMN -vIV -uMN -npX -nwG -nwG -nwG -nwG -"} -(69,1,1) = {" -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -wTj -kDs -pJn -qRs -iOE -aAn -ugd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -tdk -gqR -pPZ -xpy -afn -afn -xJx -jCQ -afn -vjN -kRn -elN -fjT -tdk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -nwG -nwG -nwG -nwG -vHw -iDD -jNu -fZc -mvE -nzK -vHw -pRa -xoj -sTV -umH -vyj -vHw -wWK -wGN -wGN -wGN -cxs -nwG -nwG -nwG -npX -ctJ -ctJ -xyd -uMN -uMN -dBn -uMN -uhN -wrh -huH -uMN -gkT -xxs -xxs -oka -npX -npX -npX -pRF -oHY -aPm -npX -pRF -oHY -aPm -npX -npX -npX -gkT -xxs -xxs -oka -uMN -uhN -wrh -huH -uMN -iwS -uMN -uMN -ctJ -ctJ -pMw -npX -nwG -nwG -nwG -nwG -"} -(70,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -iJw -dCf -iOE -iOE -iOE -eSi -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pzK -laj -gij -but -afn -bOq -kmm -jbF -kIV -hqH -xPh -pMM -nHD -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pSV -nwG -nwG -vHw -vHw -lMZ -hIe -vHw -nHN -vHw -hIe -vHw -lMZ -vHw -vHw -vHw -vHw -xQt -wGN -wGN -ssV -nwG -nwG -nwG -npX -uPa -uhX -ctJ -mgU -wrh -wrh -eDL -uhN -wrh -mYB -laK -laK -laK -laK -laK -laK -wLU -laK -laK -eTw -tmV -sQR -tmV -aiv -laK -laK -wLU -laK -laK -laK -laK -laK -laK -mCd -wrh -huH -eDL -wrh -wrh -bSn -ctJ -jAi -mag -npX -nwG -nwG -nwG -nwG -"} -(71,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -wTj -msl -qEb -iOE -lrA -tFT -ugd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -bkh -lqS -rrI -eac -jsp -fJY -fJY -fJY -ftd -fJY -aMk -quT -bYS -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -hNI -vHw -iDF -hIe -lmI -lmI -nKr -oEe -pRG -rpj -ixh -ixh -ixh -ygs -hIe -wGN -iVq -wGN -caf -nwG -nwG -npX -npX -aFE -hRm -buS -uMN -wrh -waG -uMN -gUV -seP -seP -pxt -seP -seP -seP -seP -seP -seP -seP -seP -huH -bMm -kOH -bMm -uhN -seP -seP -seP -seP -seP -seP -seP -seP -pxt -seP -seP -xKv -uMN -waG -wrh -uMN -dRB -uEa -iUJ -npX -npX -nwG -nwG -nwG -"} -(72,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -iJw -iJw -oWv -spE -iJw -iJw -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mFU -ftq -aFN -kmm -egj -mTM -kmm -rEb -egj -gqz -kHQ -wgK -bYS -iuf -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -vHw -vHw -vHw -hIe -vHw -nQr -lMZ -vHw -vHw -vHw -uoR -vHw -vHw -vHw -xSC -vHw -wGN -sBp -nwG -npX -npX -npX -npX -npX -npX -uMN -uwo -uMN -npX -npX -npX -npX -npX -npX -pna -npX -gkT -oka -npX -npX -seP -uMC -bMm -kOH -bMm -nTP -seP -npX -npX -gkT -oka -npX -jPZ -npX -npX -npX -npX -npX -npX -uMN -ihc -uMN -npX -npX -npX -npX -npX -npX -nwG -nwG -"} -(73,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -mYY -nwG -nwG -iJw -jXX -nfM -rCQ -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -tdk -gqR -oLZ -krp -afn -ceK -kmm -meS -fGE -aCo -xXn -cul -pJl -tdk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -hXY -iKm -jUk -fZc -myA -fZc -oLW -pUb -vHw -sYn -pRG -hUt -wtD -xaO -xVi -vHw -wGN -ssV -nwG -npX -npX -jTP -jTP -jTP -frQ -qsG -aLd -mml -jTP -jTP -jTP -npX -npX -aoq -vfH -hzE -fvA -eSG -aau -npX -seP -qsG -npX -nXR -npX -aLd -seP -npX -iyQ -uOR -jwO -mgb -fxp -cVE -npX -npX -jTP -jTP -jTP -frQ -qsG -aLd -mml -jTP -jTP -jTP -npX -npX -nwG -nwG -"} -(74,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wTj -iJw -kLO -iJw -ugd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -tdk -xts -gqR -afn -tvJ -ufG -aZs -mwm -oGr -vWF -sZv -yah -nkH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lMZ -iac -iKm -jVj -lmI -myT -lmI -hxu -nGO -lMZ -sYI -urd -vHQ -vHw -xck -xVi -vHw -wGN -sBp -nwG -npX -aOT -lLC -lLC -iCd -ovI -qsG -aLd -rDA -iCd -lLC -lLC -iBt -npX -vvH -vfH -vfH -vfH -kAj -fCv -stU -seP -dvD -npX -lFi -npX -iRk -seP -pwC -bEA -hpj -fxp -fxp -fxp -mZS -npX -aOT -lLC -lLC -iCd -ovI -qsG -aLd -rDA -iCd -lLC -lLC -iBt -npX -nwG -nwG -"} -(75,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iJw -oWv -iJw -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -tdk -gqR -sZG -vof -aSQ -arT -vTc -cWp -iCw -ydH -nkH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lMZ -ibO -iPZ -xxd -lmU -ygs -eeR -fZc -nrV -vHw -mVX -sHj -cZb -vHw -xlt -xYV -lMZ -wGN -kHG -nwG -npX -bIi -lht -lht -lht -jLQ -qsG -aLd -oIK -lht -lht -lht -joQ -npX -bJZ -vfH -vfH -vfH -vfH -mLs -hvK -seP -qsG -npX -nXR -npX -aLd -seP -uoQ -iwa -fxp -fxp -fxp -fxp -oHU -npX -bIi -lht -lht -lht -jLQ -qsG -aLd -oIK -lht -lht -lht -joQ -npX -nwG -nwG -"} -(76,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -iuf -iuf -iuf -iuf -tdk -xts -xuf -xts -ubm -tdk -kkQ -tdk -tdk -tdk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -ifx -iYc -iYc -lzM -ygs -udW -aaY -pXp -vHw -sZF -uFN -vId -vHw -xpc -xZo -vHw -wGN -sBp -nwG -npX -jbC -rsH -iUu -vor -fgG -qsG -aLd -qKy -six -mIA -cnI -wMu -npX -dmW -vfH -vfH -vfH -vfH -fCv -moi -seP -tGJ -bMm -kOH -bMm -rkd -seP -qFU -bEA -fxp -fxp -fxp -fxp -krQ -npX -jbC -hiB -kAU -sfG -qpZ -qsG -aLd -qKy -faA -jkv -aKE -wMu -npX -nwG -nwG -"} -(77,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mLq -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -trU -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -vHw -jfd -jXU -oqv -iga -lhC -qYy -vHw -vHw -vHw -vHw -vHw -vHw -vHw -xZL -vHw -wGN -sBp -nwG -npX -ouw -puU -puU -puU -jLQ -qsG -aLd -oIK -puU -puU -puU -qlc -npX -npX -heV -nKz -spj -alb -aEm -npX -seP -huH -iiv -odY -iiv -uhN -seP -npX -kcn -oGm -vYx -oCB -dMD -npX -npX -ouw -puU -puU -puU -jLQ -qsG -aLd -oIK -puU -puU -puU -qlc -npX -nwG -nwG -"} -(78,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vHw -jgf -jZr -lAS -jiw -wmS -rBt -vHw -cKS -hDU -ctg -vLm -wtZ -xsX -yal -lMZ -wGN -pMC -nwG -npX -mPl -rPt -rPt -eai -ppm -qsG -aLd -mAm -gvR -rPt -rPt -cIw -npX -npX -npX -npX -npX -npX -npX -npX -iku -iku -npX -npX -npX -iku -iku -npX -npX -npX -npX -npX -npX -npX -npX -mPl -rPt -rPt -eai -ppm -qsG -aLd -mAm -gvR -rPt -rPt -cIw -npX -nwG -nwG -"} -(79,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pSV -nwG -nwG -nwG -vHw -mYY -kfA -lCG -cSp -hYG -cJl -vHw -vHw -sKi -uEJ -pFl -wxu -xtj -vHw -vHw -xIV -bav -nwG -npX -qkq -bbI -mHx -dqt -ybT -qsG -aLd -cqI -bbI -mHx -dqt -mQM -npX -npX -hTU -hTU -nER -siy -npX -npX -seP -huH -vhU -kOH -nKT -uhN -seP -npX -npX -iDE -iDE -wPf -uRU -npX -npX -qkq -bbI -mHx -dqt -ybT -qsG -aLd -cqI -bbI -mHx -dqt -mQM -npX -nwG -nwG -"} -(80,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -nwG -nwG -sJh -nwG -nwG -mYY -kUz -vHw -vHw -vHw -vHw -vHw -vHw -vHw -nwG -nwG -nwG -nwG -npX -eed -gNE -tDR -bHD -wUI -qsG -aLd -rqE -bHD -tDR -xES -jFN -npX -wxV -seP -wrh -wrh -wrh -qoo -npX -seP -huH -xqU -kOH -vhU -uhN -seP -npX -qoo -wrh -wrh -wrh -seP -neg -npX -eed -gNE -tDR -bHD -wUI -qsG -aLd -rqE -bHD -tDR -xES -jFN -npX -nwG -nwG -"} -(81,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -tdv -rPt -rPt -eai -ppm -qsG -aLd -mAm -uwz -qtu -gHM -vXg -npX -jCW -seP -wrh -wrh -wrh -seP -hWq -seP -huH -nKT -kOH -dPW -uhN -seP -hWq -seP -wrh -wrh -wrh -seP -neg -npX -tdv -rPt -rPt -eai -ppm -qsG -aLd -mAm -uwz -qtu -gHM -vXg -npX -nwG -nwG -"} -(82,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dut -dut -vsM -dut -dut -nwG -nwG -nwG -nwG -npX -qkq -bbI -mHx -dqt -hAD -qsG -aLd -cqI -bbI -mHx -dqt -mQM -npX -aJn -seP -wrh -wrh -wrh -seP -seP -seP -huH -kqd -kOH -kqd -uhN -seP -seP -seP -wrh -wrh -wrh -seP -ewi -npX -qkq -bbI -mHx -dqt -hAD -qsG -aLd -cqI -bbI -mHx -dqt -mQM -npX -nwG -nwG -"} -(83,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -tos -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dut -kUh -bwt -mzx -gvy -nwG -nwG -nwG -npX -npX -npX -asT -asT -kei -wUI -ofP -kOo -rqE -jUL -asT -asT -npX -npX -kHs -oDu -bGE -bGE -bGE -bGE -pkS -ddf -ltH -bMm -kOH -bMm -sjU -pkS -ddf -bGE -bGE -bGE -bGE -oDu -uLC -npX -npX -asT -asT -kei -wUI -ofP -kOo -rqE -jUL -asT -asT -npX -npX -npX -nwG -"} -(84,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qtl -qtl -qtl -qtl -qtl -qtl -qtl -qtl -qtl -qtl -qtl -nwG -nwG -sAg -sjW -gsu -gsu -jUj -nwG -nwG -nwG -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -kYH -npX -uMN -uhN -huH -npX -bMm -kOH -bMm -npX -uhN -huH -uMN -npX -kYH -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -npX -nwG -"} -(85,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -qAN -qAN -qAN -qAN -cKN -qAN -qAN -qAN -qAN -qAN -nwG -qAN -qAN -oMn -gvL -qAN -qAN -qAN -oMn -qAN -wsr -wQK -nwG -qaP -qaP -bZb -xwQ -qaP -hDj -gZa -unD -iMk -iMk -iMk -nwG -qtl -oPy -ucE -ucE -vfo -dZD -ucE -ucE -sRn -ucE -qtl -nwG -nwG -dut -oWm -cJU -grX -whh -nwG -nwG -npX -npX -npX -puU -puU -uEX -npX -puU -puU -uEX -npX -puU -puU -uEX -npX -npX -npX -bUh -bMm -bMm -sjc -npX -uhN -huH -kqd -bMm -tyX -bMm -kqd -uhN -huH -npX -jvK -bMm -bMm -bUh -npX -npX -npX -puU -puU -uEX -npX -puU -puU -uEX -npX -puU -puU -uEX -npX -npX -npX -"} -(86,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aav -aav -bqS -bqS -ucE -ucE -ucE -ucE -dXi -qAN -nwG -qAN -acl -mwk -hZH -pMW -xjc -xjc -xjc -lBV -fPL -fPL -nwG -qaP -lfo -hpn -rNT -jym -otc -hZH -uWR -xVe -eiR -qaP -nwG -qtl -oPy -ucE -ucE -vfo -pMf -ucE -ucE -sJq -ucE -qtl -nwG -nwG -dut -dut -vzs -dut -dut -nwG -nwG -npX -npX -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -npX -npX -bUh -bMm -bMm -sQP -npX -nXo -huH -nKT -bMm -atZ -bMm -nKT -uhN -rTh -npX -hjd -bMm -bMm -bUh -npX -npX -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -puU -npX -npX -"} -(87,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -abR -ucE -ucE -ucE -ucE -ucE -ucE -ucE -eax -qAN -nwG -kpm -jqK -ixD -qqu -bDS -bDS -bDS -bDS -qAN -uRX -mgQ -nwG -qaP -dLO -hpn -kdX -hpn -cZV -qqu -fZc -fZc -fZc -bZb -nwG -qtl -oPy -ucE -ucE -wcc -bfk -ucE -ucE -ucE -ucE -qtl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -qsy -bMm -aLd -npX -uhN -huH -nKT -bMm -xZY -bMm -yik -uhN -huH -npX -qsG -bMm -xUA -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -"} -(88,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aBb -ucE -bsy -bwB -bBn -bwB -dzI -ucE -ucE -qAN -nwG -qAN -acl -fBU -qqu -bDS -nGn -bDS -xJg -qAN -keO -mgQ -nwG -oiU -tTI -hpn -jWW -hpn -iDP -qqu -jxj -cXN -vhR -siL -nwG -qtl -wsJ -kfJ -ucE -ucE -ucE -ucE -ucE -ucE -ucE -qtl -nwG -qAN -oMn -qAN -oMn -qAN -oMn -qAN -nwG -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -uMN -ghY -aOV -npX -sjU -ltH -yik -bMm -xZY -bMm -vhU -sjU -ltH -npX -wHb -lVa -uMN -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -"} -(89,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -rVe -bLY -nXP -miB -pkB -vjd -vjd -gaO -hOr -end -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -ucE -ucE -bwB -cdR -cPC -dnC -bwB -ucE -ucE -qAN -nwG -qAN -lmQ -gPD -qqu -vyW -xyR -mHG -hbn -qAN -kwC -qAN -nwG -qaP -mkx -hpn -rbR -hpn -cZV -qqu -jxj -mJN -vhR -bZb -nwG -qtl -ucE -ucE -ucE -ucE -qPM -afc -nEE -lqT -xkR -qtl -nwG -kpm -kUh -bwt -otM -piu -xFG -nYH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -npX -bMm -bMm -kqd -bMm -tyX -bMm -kqd -bMm -bMm -npX -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(90,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kwC -ucE -aXg -bBn -cjJ -cUb -doo -dJU -ucE -ucE -qAN -nwG -bZb -wwn -gPD -qqu -qqu -qqu -qqu -qqu -gkM -kHU -sQJ -nwG -qaP -cZz -hpn -ghm -hpn -qaP -vqK -jxj -jrj -mEW -qaP -nwG -qtl -uPf -uPf -qtl -ucE -qPM -wak -uKj -lqT -xkR -qtl -nwG -qAN -owS -gsu -gsu -bnr -nKN -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -npX -jwp -jwp -npX -bMm -kOH -bMm -npX -jwp -jwp -npX -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(91,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -ucE -ucE -bwB -cnp -cYV -dnC -bwB -ucE -ucE -qAN -nwG -qAN -qAN -hYo -lVM -aqO -aqO -aqO -eXd -qqu -kHU -kOH -nwG -qaP -vbi -hpn -hpn -hpn -erc -qqu -jxj -iVO -vhR -bZb -nwG -qtl -ucE -ucE -qtl -ucE -qPM -wak -dto -lqT -ixN -qtl -nwG -kpm -oWm -qmW -wOK -bue -wZt -jUj -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -npX -bMm -bMm -npX -ydy -kOH -doE -npX -bMm -bMm -npX -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(92,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aHZ -ucE -bBr -bwB -bBn -bwB -dPi -ucE -ucE -qAN -nwG -qAN -idJ -tAt -ufx -jcH -gCJ -eua -bxJ -hpn -hGR -nYH -nwG -siL -tvv -wwm -mZn -mGC -qaP -jQf -jxj -cXN -vlT -axm -nwG -qtl -ucE -ucE -qtl -ucE -gFJ -gFJ -dto -lqT -ixN -qtl -nwG -qAN -fZA -ouX -mmw -rKI -vTN -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -bMm -bMm -npX -bMm -kOH -bMm -npX -bMm -bMm -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(93,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aHZ -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -qAN -nwG -kwC -aUe -dtM -hpn -hpn -hpn -hpn -hLe -hpn -hpn -bZb -nwG -qaP -qGu -dtM -hpn -lwq -lEk -qqu -fZc -fZc -fZc -bZb -nwG -qtl -ucE -ucE -qtl -ucE -ucE -ucE -ucE -ucE -ucE -qtl -nwG -kpm -oSX -hNE -fwZ -jHo -eFc -kwC -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -flP -flP -npX -bMm -bMm -bMm -npX -flP -flP -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(94,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aav -aav -bqS -bqS -ucE -ucE -ucE -ucE -ebS -qAN -nwG -qAN -lvn -bmH -lCZ -hqV -jFd -mYJ -huK -lsS -jcM -qAN -nwG -qaP -lvn -kTn -xfv -ota -qaP -jIu -xKG -muz -ycV -qaP -nwG -qtl -uPf -uPf -qtl -qtl -qtl -qtl -qtl -qtl -qtl -qtl -nwG -qAN -reE -qAN -reE -qAN -reE -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -puU -npD -npX -fVG -hpt -hpt -npX -rKs -puU -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(95,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -qAN -qAN -qAN -qAN -cKN -qAN -qAN -qAN -qAN -qAN -nwG -qAN -qAN -bZb -reE -qAN -qAN -qAN -reE -qAN -qAN -qAN -nwG -qaP -qaP -bZb -iDW -qaP -hDj -gZa -iDW -qaP -qaP -qaP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -npX -puU -puU -puU -npX -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(96,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -rVe -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -xwQ -ayW -xwQ -qaP -xwQ -wmz -xwQ -wmz -xwQ -qAN -nwG -qAN -oMn -qaP -xwQ -qaP -udE -qaP -xwQ -qaP -oMn -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(97,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -qAN -oMn -qAN -bZb -qAN -oMn -qAN -qAN -nwG -qAN -qAN -oMn -qAN -gvL -qAN -oMn -qAN -qAN -nwG -qAN -qAN -oMn -qAN -qAN -qAN -oMn -qAN -qAN -nwG -qAN -qAN -bZb -qAN -qAN -gZa -qAN -qAN -qAN -qAN -qAN -nwG -nwG -kpm -wvO -gPD -gTn -kCP -wZt -eJV -pNj -eFc -jYi -nYH -nwG -kpm -lrY -dUz -vvG -qaP -gPD -rOH -qaP -mfQ -mfQ -nYH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(98,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aIm -aXM -bFg -qBj -dan -doZ -dQP -qAN -nwG -qAN -oNh -rLa -otj -hZH -kcO -miF -ydo -qAN -nwG -qAN -rDN -kTn -lGj -lRJ -kvK -hbA -hyL -qAN -nwG -qAN -hlZ -rNT -vYS -fdx -hZH -tfz -rHS -lMx -plV -qAN -nwG -nwG -qaP -rVV -gPD -fId -kCP -wZt -wZt -wZt -wZt -nKN -qaP -nwG -qaP -kSp -vJe -hpn -jwd -gPD -rcE -qaP -hpn -gFO -qaP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uiZ -qGy -pmh -pmh -pmh -qGy -uiZ -uiZ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(99,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -bZb -aDt -hpn -hpn -iMx -del -dsZ -dSQ -nYH -nwG -bZb -uhz -eMw -tfL -qqu -kxa -hpn -pIz -kwC -nwG -kpm -aDt -hpn -xPs -hpn -xPs -hhG -eEj -kwC -nwG -qAN -wRv -hpn -uoF -lUy -qqu -fit -uzj -mkS -jBY -qAN -nwG -nwG -oiU -itF -gPD -fId -kCP -wZt -eJV -pNj -eFc -wZt -axm -nwG -oiU -lvn -kaT -oTJ -qaP -hQl -xjC -qaP -jwd -qaP -axm -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -pmh -eKu -jWp -aRk -gPK -eKu -pmh -qGy -uiZ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(100,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -aMg -aYA -bSi -cvP -dfH -dsZ -vid -qAN -nwG -jZi -ckB -hpn -eIv -hJu -gMt -hpn -fsu -qAN -nwG -qAN -pBK -jmQ -tzn -xGf -xSk -pyH -qAN -qAN -nwG -qAN -wjB -hpn -sZh -lUy -qqu -tGV -wZt -wZt -wZt -bZb -nwG -nwG -qaP -oaB -gPD -uAJ -kCP -wZt -eJV -pNj -eFc -wZt -qaP -nwG -qaP -qaP -qaP -qaP -qaP -iUd -jpq -qXb -gPD -fzk -qaP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -anR -rFI -juq -jzy -gfe -sof -lYv -git -uiZ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(101,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -siL -qAN -qAN -qAN -czu -qqu -qqu -kHU -oiB -nwG -oiB -nBH -qqu -qqu -qqu -qqu -qqu -kHU -oiB -nwG -qAN -uMQ -aaK -qAN -pdH -qAN -hpn -aPM -qAN -nwG -qAN -kYl -hpn -uIb -ltC -qqu -gTR -xBG -fzh -pzx -qAN -nwG -nwG -oiU -teb -gPD -fId -kCP -wZt -wZt -wZt -wZt -wZt -ayW -nwG -oiU -aQo -wZt -wZt -jwd -gPD -gPD -gPD -gPD -gPD -sFZ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -pmh -git -nwG -nwG -nwG -nwG -qVH -pxM -gfe -gfe -gfe -gfe -gOR -hAE -qVH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(102,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -lrY -dUz -bSS -cGm -qqu -duQ -dUN -cHi -nwG -qAN -pYW -cFu -hfB -gPD -gWg -vsb -vji -qAN -nwG -qAN -wdK -jdn -reF -ajs -tvM -hpn -tlj -qAN -nwG -qAN -lvn -dnJ -pXi -ltC -lxK -qDh -sKv -tOh -kHU -tjE -nwG -nwG -qaP -mnd -gPD -fId -kCP -wZt -qaP -qaP -qaP -qaP -qaP -nwG -qaP -xVg -qqi -qqi -qaP -aIu -sOy -jft -ipf -tCk -qaP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -dTV -gwS -dTV -git -mpF -git -pmh -git -daa -wgp -xfo -utD -nxX -vMe -rsU -git -git -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(103,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -kpm -aUe -dtM -hpn -iMx -qqu -gPD -uZM -qAN -nwG -kwC -qGu -dtM -hLe -rie -nnV -nMg -lTt -nYH -nwG -kwC -rav -nxx -ein -qVv -qAN -wTZ -qAN -nYH -nwG -qAN -qAN -qAN -qAN -ggX -dxP -uMv -qAN -qAN -qAN -qAN -nwG -nwG -oiU -cWQ -gPD -fId -kCP -wZt -qaP -bXx -hpn -hpn -axm -nwG -oiU -qaP -qaP -qaP -qaP -aIu -sOy -jft -ipf -cdU -axm -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qVH -eVL -maX -odr -git -dGF -dTV -sdS -dTV -git -git -dTV -fjX -dTV -git -git -dTV -git -dTV -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(104,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -oaH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qXu -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -lVy -dJN -dJN -dJN -dJN -inf -dJN -lVy -lVy -lVy -lVy -lVy -dJN -dJN -dJN -dJN -dJN -dJN -dJN -lVy -lVy -lVy -nwG -qAN -lvn -bmH -bUe -cHe -nFZ -dzH -dWz -qAN -nwG -qAN -lvn -gpP -kKb -lff -lDK -vNY -iNF -qAN -nwG -qAN -cXZ -ouB -qAN -fpl -wJR -gqZ -seK -qAN -nwG -qAN -uVk -vek -qDz -qAN -dxP -qAN -pSv -ozz -nmI -qAN -nwG -nwG -qaP -wlN -gPD -dYw -wZt -wZt -cZr -hpn -qaP -cZr -qaP -nwG -qaP -aQo -wZt -wZt -jwd -gPD -gPD -gPD -gPD -gPD -qaP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qVH -iOq -gsu -xHk -git -jlz -hXr -hvp -bXu -sDg -bGj -git -mNs -git -qIh -mXf -rwF -ygo -qYd -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(105,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lTz -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -dJN -dJN -dzi -dzi -dJN -dJN -jsR -lVy -lVy -lVy -lVy -inf -inf -dJN -sSC -sSC -sSC -sSC -sSC -dJN -lVy -lVy -nwG -qAN -qAN -reE -bZb -cHi -gZa -reE -qAN -qAN -nwG -qAN -qAN -bZb -qAN -qAN -qAN -reE -qAN -qAN -nwG -qAN -qAN -reE -qAN -gZa -qAN -reE -qAN -qAN -nwG -qAN -tAp -fZc -fZc -uge -hyM -sTs -wXB -lwq -haI -qAN -nwG -nwG -kpm -vXy -gPD -fId -wVV -qFN -qaP -oVy -qaP -lPZ -nYH -nwG -kpm -xVg -qqi -qqi -qaP -gPD -tMY -mIl -xxq -jFh -nYH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -oWf -hBm -dqi -git -grw -kxq -cot -cot -cot -hmn -git -wFf -git -iSx -ufB -dLQ -rNl -dXo -git -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(106,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -dJN -dJN -dzi -dzi -dzi -dzi -dJN -dJN -lVy -lVy -lVy -dJN -inf -dJN -sSC -inU -cbn -cBO -cBO -knf -sSC -dJN -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nUd -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qAN -nhU -eCi -dMv -qAN -ssp -qAN -lzd -hUz -hUz -qAN -nwG -nwG -qAN -kit -iMk -fVx -iMk -tMj -qaP -iDW -qaP -reE -qAN -nwG -qAN -reE -qaP -iDW -qaP -udE -qaP -iDW -qaP -oev -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cqb -dGF -lzT -gJq -gAs -git -uOO -lAa -kDZ -gXy -rXD -hBP -git -mNs -git -map -hxA -jfQ -gzp -twq -git -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(107,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -jXU -jXU -jXU -jXU -jXU -jXU -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -dJN -dzi -dzi -qXA -dzi -qDy -dJN -dJN -lVy -lVy -dJN -dJN -dJN -dJN -sSC -uBn -nCu -nCu -nCu -wPH -sSC -dJN -lVy -nwG -qAN -oMn -qaP -qaP -xwQ -cNb -qaP -oMn -qAN -nwG -qAN -oMn -qAN -qAN -qAN -qAN -qAN -oMn -qAN -nwG -qAN -qAN -qAN -caV -gZa -kUS -njw -njw -mnz -nwG -qrB -qrB -qmD -qrB -qrB -kbe -qAN -qAN -qAN -qAN -qAN -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -uue -gJq -nUX -dTV -git -git -rcj -dTV -wfE -dTV -git -mNs -git -dTV -nZj -dTV -git -git -git -dTV -uzG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(108,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -jXU -jXU -jXU -jXU -jXU -jXU -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -dJN -dzi -dzi -tHJ -qVp -qDy -inf -dJN -wxH -dJN -dJN -vhO -sSC -sSC -mRu -glz -nCu -qbS -nCu -iRD -sSC -dJN -lVy -nwG -kpm -lrY -dUz -bSd -neH -hZH -bUL -iNd -nYH -nwG -qAN -lrY -qWR -uJy -qAN -hqe -sgW -qsA -nYH -nwG -qAN -mVU -oHA -gPD -hZH -gPD -gPD -fhD -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -rEd -gJq -udp -uBh -jmO -xFR -mlK -mhu -gvZ -mlK -hyj -eQa -mlK -jmO -gvZ -tul -mlK -xFR -soE -jTz -ahk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(109,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -jXU -jXU -jXU -ucE -jXU -jXU -jXU -ucE -jXU -jXU -jXU -jXU -jXU -jXU -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -dJN -dzi -dzi -dzi -cSr -dJN -nKM -dJN -dJN -dJN -dJN -sSC -rcM -fSo -glz -nCu -nCu -nCu -iRD -sSC -byK -lVy -nwG -qaP -nwo -vJe -hpn -iMx -qqu -bUL -svC -qaP -nwG -kwC -qGu -dtM -hpn -qAN -aPs -lwq -jfe -qAN -nwG -qAN -siX -gPD -nwr -qqu -gqk -gPD -jjR -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -eiX -fZc -gJq -fZc -eQE -mNs -git -git -crX -git -wQe -git -git -git -dBZ -git -wQe -git -git -ajG -dTV -dTV -fzg -nwG -nwG -nwG -nwG -nwG -nwG -"} -(110,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -jXU -ucE -jXU -jXU -jXU -ucE -jXU -jXU -jXU -ucE -jXU -jXU -jXU -jXU -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -dJN -inf -dJN -dJN -dJN -eML -dJN -sSC -sSC -pmm -rwf -uzS -ibq -sSC -oLX -wDp -wDp -wDp -plr -sSC -dJN -lVy -nwG -qaP -lvn -kaT -tDK -bpE -qqu -bUL -oac -qaP -nwG -qAN -iLI -jvf -chI -rfK -kjt -kHz -uSs -qAN -nwG -qAN -jNH -gPD -rdP -qqu -ubh -gPD -fhD -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -eOs -kOQ -auM -git -fkA -git -kHK -dYj -oqv -kkr -aVX -git -jRR -oLO -xoj -tKn -rFv -git -hQH -git -dTV -dGF -git -git -nwG -nwG -nwG -nwG -"} -(111,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -pul -ucE -ucE -ucE -pul -ucE -pul -ucE -ucE -ucE -hgL -jXU -wfW -hgL -ucE -hkY -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -dJN -dJN -dJN -dJN -nKM -sSC -rtg -rwf -gXK -fSo -xxt -sSC -sSC -sSC -sSC -sSC -sSC -sSC -sSC -dJN -dJN -lVy -nwG -siL -qaP -qaP -qaP -wie -qqu -bUL -stl -siL -nwG -oiB -nBH -qqu -kQY -tNR -tOh -qqu -kHU -oiB -nwG -qAN -fQu -gPD -gPD -qqu -fhD -gPD -fhD -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -git -git -git -git -git -iJp -git -vsI -dvT -fZc -fZc -mfl -git -sus -wxm -iRo -ucE -mfl -git -xCw -git -smd -foY -rAc -dTV -git -nwG -nwG -nwG -"} -(112,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xyL -hkY -hkY -mat -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -lAM -hkY -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -lVy -wxH -inf -heQ -lHP -cBO -nCu -ibq -sSC -sSC -sSC -sSC -dJN -dJN -inf -inf -inf -dJN -dJN -dJN -dJN -lVy -nwG -qaP -pbc -xSx -ikX -bJh -qqu -miz -niu -qaP -nwG -qAN -gtI -mfy -qAN -qAN -qAN -mfy -qPw -qAN -nwG -qAN -tvv -wwm -hpa -hJu -fhD -gPD -fhD -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -dTV -uOg -swH -oBS -oBS -dTV -ilm -dTV -git -git -git -git -git -git -git -git -git -git -git -dTV -bOT -dTV -mxN -bfM -cew -aqH -dTV -git -nwG -nwG -"} -(113,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -qDy -dJN -dJN -sSC -pmm -nCu -fSo -bIB -sSC -dJN -inf -inf -dJN -dJN -inf -inf -inf -inf -dJN -lVy -lVy -lVy -lVy -nwG -bZb -aDt -hpn -hpn -iMx -qqu -vrd -uOr -qaP -nwG -kpm -orM -wEx -iTS -qAN -wNh -eCj -iTS -qAN -nwG -qAN -qGu -dtM -bbk -qqu -fhD -gPD -jjR -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -egL -wUd -ark -ark -ark -mzH -bmW -mYm -dHx -mSn -cYY -wVG -lMG -nwc -hLg -ivo -pLE -mSn -dHx -vkW -bfM -kOn -kty -dlQ -bMm -bMm -fyO -git -nwG -nwG -"} -(114,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -rVg -nwG -nwG -nwG -ucE -ucE -ucE -pul -ucE -ucE -tOZ -ucE -hgL -jXU -ucE -ucE -ucE -wxC -ucE -jXU -wuC -ucE -hkY -hkY -hkY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -inf -dJN -dJN -pmm -fSo -xNL -sSC -sSC -dJN -dJN -tAG -dJN -dJN -dJN -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -kpm -eqG -vvw -eqG -jdo -nFZ -dBb -vOh -nYH -nwG -qAN -poA -fqB -kxI -qAN -aVl -fqB -jAA -nYH -nwG -qAN -lvn -lgf -dwg -nFZ -gPD -gPD -fhD -iId -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -cqb -dGF -dQZ -bMm -lDz -bMm -bMm -sEO -xUa -mSC -bbw -jKi -aZO -sZz -rzu -bMm -bMm -cim -fsl -jKi -bbw -mSC -xUa -elb -bMm -bMm -bMm -bMm -hNr -dGF -bGF -nwG -"} -(115,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -ucE -jXU -ucE -jXU -jXU -ucE -jXU -jXU -ucE -ucE -ucE -ucE -ucE -jXU -jXU -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -dJN -dJN -sSC -xIb -sSC -dJN -dJN -dJN -dJN -dJN -dJN -iVc -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -qrB -eJe -iMk -iMk -iqr -cNb -qaP -reE -qAN -nwG -qAN -reE -bZb -qAN -qAN -qAN -bZb -reE -qAN -nwG -qAN -qAN -qAN -qAN -gZa -kUS -njw -njw -gll -nwG -nwG -nwG -jol -nwG -nwG -mYY -mYY -xCD -xCD -ybA -xCD -ybA -ybA -ybA -ybA -ybA -xCD -ybA -ybA -xCD -xCD -ybA -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -dTV -bJp -ieF -hSS -aoZ -vYa -hSS -eLT -krU -dTV -aVY -xJw -tQT -tQT -yka -gZR -hBW -bMm -aoL -dTV -gPh -rcA -hSS -vCM -lti -hSS -lWt -uaK -dTV -git -nwG -"} -(116,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -jXU -jXU -ucE -jXU -jXU -ucE -ucE -rJs -ucE -ucE -jXU -jXU -vEk -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -wDn -dJN -heQ -cjP -sSC -dJN -cSr -vhO -wxH -pnH -wxH -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gWt -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -nwG -nwG -mYY -mYY -xCD -xCD -xCD -ybA -xCD -ybA -ybA -xwu -gyt -gyt -gyt -gyt -gyt -gih -xwu -gih -waA -xtx -nwG -xCD -xCD -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -git -aFz -aFz -swv -aFz -aFz -swv -aFz -aFz -git -git -ltq -qWl -nbU -dTV -dTV -rXu -bMm -iSR -git -aFz -aFz -swv -aFz -aFz -swv -aFz -aFz -git -git -nwG -"} -(117,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -jXU -jXU -ucE -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -dJN -dJN -sSC -mjV -vZr -sSC -dJN -dJN -dJN -dJN -dJN -inf -inf -dJN -dJN -dJN -dJN -dJN -lVy -lVy -lVy -lVy -lVy -nwG -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mkW -nwG -nwG -nwG -nwG -nwG -nwG -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ePP -mYY -xCD -ybA -xCD -xCD -ybA -ybA -ybA -ybA -gyt -gyt -rTZ -rTZ -oNW -qed -qed -gyt -xwu -vPi -waA -xxB -mYY -mYY -mYY -xCD -sVo -nwG -mYY -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -git -nwG -lOK -git -nwG -lOK -git -nwG -lOK -git -git -ulw -tWd -vWF -kem -git -eKV -iSR -dTV -git -nwG -lOK -git -nwG -lOK -git -nwG -lOK -git -git -nwG -"} -(118,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -ucE -nxc -ucE -ucE -jXU -jXU -ucE -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dJN -inf -dJN -dJN -sSC -mjV -qGF -xdZ -sSC -sSC -sSC -sSC -dJN -dJN -inf -dJN -dJN -dJN -dJN -dJN -dJN -dJN -fBi -lVy -nwG -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -nwG -nwG -nwG -nwG -nwG -nwG -jol -nwG -asx -ybA -xCD -xCD -ybA -ybA -ybA -ybA -ybA -gyt -gyt -rGT -suG -rma -fXK -rma -rma -tav -gyt -gyt -waA -xtx -xCD -xCD -xCD -xCD -mYY -xCD -asx -jzV -mYY -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -dTV -jfi -ble -ikc -git -ugv -dTV -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -git -nwG -"} -(119,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ucE -jXU -jXU -jXU -ucE -ucE -ucE -ucE -ucE -ucE -ucE -gIX -ucE -ucE -ucE -ucE -ucE -ucE -ucE -ucE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dJN -dJN -dJN -eML -sSC -sSC -mjV -qGF -qGF -rwf -ufH -sSC -sSC -sSC -dJN -dJN -eML -dJN -dJN -dJN -dJN -dJN -lVy -nwG -kWE -aMl -kSc -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -ybA -nwG -mYY -xCD -xCD -ybA -ybA -ybA -ybA -ybA -xwu -gyt -kUF -msL -msL -qOh -bsx -gRd -rpz -gRd -uFQ -gyt -waA -xtx -nwG -mYY -xCD -mYY -xCD -mYY -xCD -xCD -mYY -xCD -xCD -xCD -nwG -mYY -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dTV -uze -snv -tZZ -dTV -oFO -git -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(120,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -dJN -dJN -dJN -inf -dJN -sSC -sSC -dJN -kax -fSo -oHR -rwf -rwf -xdZ -sSC -dJN -tAG -wxH -dJN -dJN -dJN -lVy -nwG -nwG -aMl -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dsy -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -xCD -ybA -ybA -ybA -ybA -ybA -ybA -xwu -gyt -gyt -gyt -gyt -xwu -xwu -nsk -gyt -gyt -gyt -gyt -gyt -gyt -gih -nwG -nwG -nwG -xCD -nwG -xCD -nwG -xCD -jol -xCD -nwG -mYY -xCD -mYY -nwG -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ahk -ahk -pvM -ahk -ahk -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(121,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -lVy -cSr -dJN -dJN -tAG -dJN -inf -nKM -dJN -dJN -dJN -akM -wDp -nCu -vZr -sSC -cSr -dJN -dJN -dJN -dJN -lVy -nwG -nwG -aMl -pAr -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -kWE -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -mYY -ybA -xCD -ybA -ybA -ybA -gyt -gyt -gyt -gyt -gyt -nKX -xnE -lMD -xnE -xnE -xnE -xnE -xnE -xnE -xnE -vSR -gyt -gih -xSh -xSh -xSh -xwu -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -upK -xCD -nwG -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(122,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ojA -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -lVy -lVy -wxH -inf -dJN -dJN -dzi -dJN -dzi -qDy -inf -dJN -dJN -akM -nCu -vZr -dJN -dJN -dJN -dJN -lVy -lVy -nwG -kWE -aMl -pAr -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -kWE -pAr -aMl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -xCD -xCD -ybA -ybA -gyt -gih -uWm -uWm -gih -eVl -xLn -kcY -kcY -xLn -nRH -oPn -cvJ -xLn -kcY -kcY -xLn -xLn -gih -ybx -lyy -ybx -gyt -gyt -gih -xwu -nsk -gyt -waA -xtx -nwG -mYY -mYY -xCD -mYY -xCD -mYY -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(123,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xCP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -lVy -fld -dJN -sSC -sSC -sSC -sSC -sSC -dJN -xeT -cet -dJN -dJN -dJN -sSC -akM -cre -sSC -inf -inf -dJN -lVy -lVy -nwG -kWE -aMl -pAr -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -kWE -pAr -aMl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -ybA -ybA -ybA -ybA -gyt -gfC -gOp -epl -djR -uIX -uIX -kfB -oQW -uIX -nXO -oSt -eeF -uIX -tdE -brs -kPa -uIX -hxV -uIX -dWi -vHX -xFI -gyt -gyt -heD -eFs -eFs -waA -rNR -nwG -xCD -nwG -mYY -ePP -asx -nwG -xCD -xCD -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -ybA -ybA -ybA -nwG -nwG -nwG -nwG -nwG -nwG -"} -(124,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -wxH -dJN -sSC -rer -nCJ -hwQ -qGF -mAD -dJN -dJN -dJN -dJN -elF -inf -inf -dJN -kax -ufH -dJN -dJN -lVy -lVy -lVy -nwG -kWE -aMl -pAr -nwG -olv -kWE -nwG -pgv -kWE -nwG -vDo -kWE -nwG -gJY -kWE -nwG -qIj -kWE -qUr -kWE -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -xCD -xCD -ybA -ybA -ybA -gyt -gfC -vct -edb -gih -xbb -jiz -kiX -lSF -mBm -nZZ -oMz -qfA -yby -tek -rnS -vUb -vUb -gyt -ybG -rmz -vUb -vUb -nNF -gyt -gyt -jlD -twf -waA -xtx -xCD -xCD -xCD -xCD -xCD -mYY -sVo -nwG -mYY -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -ybA -ybA -ybA -ybA -ybA -ybA -ybA -ybA -nwG -nwG -nwG -"} -(125,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -dJN -sSC -cjP -sSC -sSC -dJN -akM -vZr -sSC -dJN -wxH -dJN -dJN -dJN -dJN -sSC -cjP -sSC -dJN -wxH -lVy -lVy -nwG -kWE -aMl -pAr -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -nwG -nwG -kWE -kWE -kWE -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -xCD -ybA -ybA -xwu -gyt -gyt -gfC -vct -qWs -gyt -gih -jnS -knl -lUo -mBQ -mxf -oVj -qgw -hCm -tpT -uKH -vVU -gih -gih -nKX -xnE -xnE -xnE -xnE -kKJ -gyt -gyt -gyt -waA -xxB -nwG -nwG -nwG -nwG -xCD -xCD -xCD -mYY -mYY -nwG -xCD -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -aMl -aMl -mJK -tHc -wVS -hnJ -aMl -aMl -aMl -ybA -nwG -nwG -nwG -"} -(126,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -dJN -sSC -ico -dJN -dJN -dJN -sSC -sbz -sSC -sTq -khA -vwp -khA -khA -nKM -dJN -cjP -dJN -dJN -lVy -lVy -lVy -nwG -kWE -aMl -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -gyt -gyt -gyt -gyt -gih -pkN -gih -gyt -gih -gih -gih -xwu -xec -gBV -tFb -xSh -rra -xwu -gih -gih -gih -gih -gih -gih -nsk -gih -gyt -gyt -gyt -gyt -gyt -gyt -gyt -gyt -xwu -nwG -nwG -nwG -nwG -nwG -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -aMl -qvk -fmU -yjo -gog -tNF -ydU -sOv -ybA -ybA -ybA -nwG -nwG -"} -(127,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dIQ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -wjJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -inf -sSC -rer -vZv -dJN -cSr -dJN -sSC -cjP -sSC -khA -khA -bmj -eQp -khA -dJN -sSC -iew -vZr -sSC -lVy -lVy -lVy -nwG -kWE -aMl -nAw -pAr -aMl -aMl -pEg -aMl -aMl -tNU -tNU -tNU -tNU -tNU -aMl -aMl -pEg -aMl -aMl -nzG -pAr -aMl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -xwu -gyt -fhv -jvr -bXE -gyt -xLn -rSk -gyt -gih -bTC -vTQ -nRm -vjR -bMm -evn -bHA -rwk -jsb -tCD -rSk -xwu -gih -gih -xLn -xLn -lqf -gyt -gyt -gyt -rGT -rGT -twL -vzm -wYD -gih -gih -lXW -oSO -oSO -waA -xtx -nwG -xCD -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -hnJ -fsy -ihX -djK -aIW -wxB -wxB -fmU -ybA -aMl -ybA -nwG -nwG -"} -(128,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -inf -sSC -cjP -dJN -dJN -wxH -inf -sSC -ico -sSC -xMJ -nAf -bmj -mZt -ewr -dJN -sSC -ovl -cre -sSC -dJN -lVy -lVy -nwG -kWE -aMl -lPB -pAr -aMl -fnU -fnU -aMl -cAO -rgl -ttn -sLy -dLY -rnQ -ekw -aMl -fnU -fnU -aMl -dcm -pAr -aMl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -aHF -rnJ -fkf -fwj -nKX -gyt -wrh -psL -gyt -twL -wqh -hQr -uIa -hPP -llF -bUE -rjm -rwS -tsL -uKP -xLn -wCb -xwu -rSk -kcY -kcY -kcY -mCE -gyt -gih -hbc -xnE -xnE -bae -ayr -xnE -gih -xwu -gih -gih -waA -xxB -nwG -nwG -mBV -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -wlE -sXy -cUm -bHv -fmU -sqL -dWq -lGg -ufa -aMl -ybA -nwG -nwG -"} -(129,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -jLp -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -inf -sSC -ico -inf -iVc -lVy -inf -cnJ -epV -sSC -pER -mPQ -ryw -eZe -khA -dJN -sSC -iew -irP -sSC -wxH -lVy -lVy -nwG -nwG -aMl -pNo -pAr -aMl -oGp -fnU -cYI -hNF -lvJ -mPo -aJp -oCM -cDi -aJp -cYI -fnU -qPH -aMl -pcr -pAr -aMl -kWE -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ejG -eRZ -fkI -fDG -fYl -gyt -gCW -hhj -gyt -ijF -skp -lCt -qUS -mHn -mQa -oWj -qMn -rBa -twE -uPk -gGj -xLn -nsk -ydu -kcY -tmc -kcY -lmE -mCE -xwu -hvT -fJU -fJU -lQs -xcK -xLn -rSk -gyt -gyt -gih -gih -xwu -gyt -gyt -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -lJh -fhr -djK -eYV -wxB -bkx -bgQ -bkx -fmU -aMl -ybA -ybA -nwG -"} -(130,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xHY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -sSC -epV -dJN -dJN -wxH -inf -sSC -cjP -dJN -ewr -nAf -bmj -bmj -khA -dJN -sSC -wHi -iRD -dJN -dJN -lVy -lVy -nwG -nwG -aMl -pNQ -pAr -aMl -fnU -cgj -aMl -sJA -aJp -rJp -lvJ -aTD -lvJ -qjW -aMl -fnU -fnU -aMl -kSd -pAr -aMl -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mbt -emt -eUc -nwN -hAy -xLn -gih -xLn -mCE -gyt -ujN -xHE -tXS -cim -kBd -vct -wAV -vct -xvO -cim -uZr -aBB -xLn -nsk -xLn -xLn -xLn -xLn -xLn -xLn -doA -xcK -kcY -kcY -xOD -oBQ -uVs -xLn -xLn -cEh -gih -kaP -mDM -rsj -gyt -xwu -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -aDX -qFQ -uhZ -fFC -aFl -kze -bWD -feM -feM -aMl -ybA -ybA -nwG -"} -(131,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -lVy -dJN -sSC -cjP -sSC -dJN -vhO -dJN -sSC -pXF -sSC -khA -khA -bmj -bmj -xMJ -dJN -dJN -iew -cre -sSC -dJN -lVy -lVy -nwG -nwG -aMl -aMl -aMl -aMl -aMl -pEg -aMl -aMl -cYI -wBs -cYI -aMl -aMl -aMl -aMl -pEg -aMl -aMl -aMl -aMl -aMl -nwG -kWE -nwG -nwG -nwG -nwG -nwG -ybA -xwu -gyt -dRe -xLn -xLn -nsk -xLn -nTE -gyt -lyP -cPu -rzo -qMn -vct -kcY -kcY -kcY -vct -qMn -wst -jLR -uIX -gih -uIX -gih -gyt -gih -hxw -uIX -doA -uIX -aJk -dWi -brs -gyt -tdb -tdb -jPk -uIX -iok -kPa -mHN -uIX -wKT -mYY -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -tIT -mCh -olO -wZG -hcC -ybA -aMl -uwh -jhm -xaw -ybA -ybA -nwG -"} -(132,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -wxH -sRY -sRY -qql -sRY -uLe -uLe -uLe -sSC -ico -dJN -sTq -khA -khA -qHF -dzi -inf -dJN -uBn -cre -sSC -dJN -dJN -lVy -nwG -nwG -nwG -aMl -jZC -ifq -pom -aJp -xls -aMl -vYV -lvJ -pAr -rtK -oEo -aMl -rgj -aJp -bXI -oUa -fkd -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -ybA -xwu -xwu -mue -jIh -maB -gih -ovK -hjx -gyt -sGG -jte -udS -xvO -ucE -kcY -uWA -kcY -vct -bMm -aeH -ank -lXW -xEN -oSO -oNc -xOp -oNc -oSO -oSO -gyt -kaP -nPl -xUh -gyt -gyt -wlm -bMm -afQ -bMm -izz -bMm -wlm -mhD -rDe -bxh -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -aMl -ocn -tOR -pPv -jzI -ybA -aMl -qxF -ogd -ybA -ybA -ybA -nwG -"} -(133,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dEg -sSC -sSC -aXO -sSC -heQ -dEg -wxH -sSC -kax -vZr -dJN -dJN -dJN -gDx -dzi -inf -sSC -paL -cre -sSC -nKM -dJN -lVy -nwG -nwG -nwG -tNU -pAr -pAr -pAr -aJp -kKe -cYI -aVR -pAr -ukD -aMl -aMl -aMl -jzm -aJp -pAr -hWs -pAr -tNU -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -gih -gih -dRe -uUF -xLn -nsk -xLn -hjN -gyt -lyP -joV -goi -wwC -vct -kcY -kcY -kcY -vct -obj -wst -wab -xnE -qRk -xnE -gih -gyt -gih -nbm -xnE -doA -xnE -moD -hlt -moD -gyt -sTT -sTT -rGC -xnE -ujt -lSC -bae -xnE -quX -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -aMl -aMl -eAc -thf -aMl -aMl -aMl -pzv -fal -ybA -ybA -nwG -nwG -"} -(134,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dEg -heQ -sSC -cjP -sSC -heQ -jlZ -lVy -dJN -dJN -kax -mAD -dJN -dJN -fld -dJN -dJN -dJN -iew -cnH -sSC -dJN -dJN -lVy -nwG -pAr -pAr -aMl -fkd -oUa -gkR -lPe -run -cYI -cLR -hWs -ukD -mCR -ybo -aMl -rAM -bRT -pom -gkR -pxh -aMl -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -eeU -emt -rnJ -nwN -hAy -gbw -gih -xLn -lqf -gyt -uDk -jGU -kjk -cim -kBd -wAV -vct -vct -axl -cim -uZr -weO -nRm -nsk -xLn -xLn -xLn -xLn -xLn -xLn -doA -xcK -bPZ -dmY -kcY -xLn -doB -xLn -doB -swk -gih -kaP -mDM -ovK -xwu -xwu -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -ybA -ybA -ybA -mza -tTw -xau -ybA -ybA -ybA -nwG -nwG -"} -(135,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xOH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gOV -nwG -nwG -nwG -nwG -lVy -jlZ -cnJ -sSC -pXF -sSC -cnJ -oRx -wxH -dJN -wry -sSC -ico -dJN -sSC -sSC -dJN -dJN -mtv -cre -sSC -dJN -dJN -dJN -lVy -nwG -pAr -nwG -aMl -pAr -pAr -hWs -cDi -ghq -aMl -hHE -qDs -ukD -aMl -aMl -aMl -mpm -lvJ -pAr -pAr -pAr -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -rBI -emt -bMm -nwN -fMv -fYl -gyt -gCW -hhj -gyt -imW -juf -koI -lUp -bMm -obj -bMm -qgB -rFe -tzK -vaU -wrh -xLn -nsk -ydu -kcY -kcY -kcY -lmE -lqf -gyt -rSk -jku -fJU -org -xcK -xLn -rSk -gyt -gyt -gih -gih -gih -xwu -gyt -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -uIp -qxF -ybA -ybA -ybA -ybA -epX -xyE -rtj -ybA -ybA -nwG -nwG -nwG -"} -(136,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dEg -pnH -uEw -pnH -dEg -dzi -lVy -dJN -inf -dJN -kax -gpX -qrA -rwf -hOP -rwf -nCu -qIb -dJN -inf -dJN -dJN -lVy -nwG -pAr -nwG -aMl -aMl -aMl -aMl -aMl -oGL -aMl -jCM -cDi -ukD -rtK -oEo -aMl -usw -aMl -aMl -aMl -aMl -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -ybA -eHc -eVI -fvh -jLR -gdH -gyt -gGj -hoX -gyt -szl -wqh -piU -kGL -naF -ctq -pfH -mxL -rPx -uWI -lDp -xLn -wCb -gih -hvT -kcY -kcY -kcY -wCb -xwu -gyt -uIX -uIX -mHN -kPa -uIX -wKT -gih -gih -fFW -gih -waA -xtx -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -qxF -ePC -ybA -ybA -ybA -cst -qxF -waq -ybA -ybA -nwG -nwG -nwG -"} -(137,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dzi -lHP -nCu -mPA -dzi -qDy -lVy -lVy -dJN -inf -inf -sSC -dJN -akM -fSo -fSo -vZv -sSC -dJN -dJN -dJN -lVy -lVy -nwG -nwG -nwG -tNU -xqS -xqS -vQR -uPY -uWP -aMl -jDr -rve -aJp -aMl -aMl -aMl -ghq -cYI -ulZ -kfg -tjB -tNU -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -gyt -gyt -fvG -fPf -gep -gyt -xLn -hvT -gyt -xwu -nuu -kpG -rnA -osG -ogL -bpq -qhP -rWK -tCD -oue -hvT -gih -gih -gih -gbw -xLn -jwv -gyt -gyt -gyt -vlg -vlg -twL -jvr -saC -gih -gih -ovK -vUb -vUb -waA -xxB -mYY -mBV -xCD -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ccf -uIp -uyk -ybA -ybA -ybA -uqx -qxF -uyk -ybA -ybA -ybA -ccf -nwG -nwG -"} -(138,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -qta -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -dzi -iew -nCu -cre -dzi -qDy -lVy -lVy -dzi -inf -inf -dJN -dJN -dJN -sSC -sSC -sSC -sSC -dJN -dJN -wxH -lVy -lVy -nwG -nwG -kWE -tNU -hkS -pAr -lua -cYI -bhs -aMl -cLg -bhs -lvJ -mby -oEo -aMl -mpm -cYI -grh -aEb -qwS -tNU -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xwu -gyt -gyt -gyt -gih -pkN -gih -gyt -gih -gih -gih -gih -eEz -ohM -pnz -ohM -eZp -xwu -vbZ -xwu -gih -gih -gih -gih -nsk -gih -gyt -gyt -gyt -gyt -gyt -gyt -gyt -gyt -xwu -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -ybA -ybA -ybA -gIL -fal -fal -ybA -ybA -ybA -qxF -uIp -ybA -nwG -"} -(139,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -dzi -tLU -hei -xxt -dzi -qDy -lVy -lVy -dzi -bqz -dzi -dJN -dJN -tAG -eML -inf -inf -inf -dJN -dJN -lVy -lVy -lVy -nwG -nwG -nwG -tNU -cdO -gcq -ami -cYI -ghq -aMl -aMl -tOm -aMl -aMl -aMl -aMl -ghq -cYI -pAr -ovg -qKu -tNU -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xwu -gyt -gyt -ghO -gOk -hxR -gyt -gih -jAz -kvb -lXd -nhf -olh -pnL -qtn -saK -tIv -vge -whu -gih -gih -yft -dpX -uIX -bKN -pmT -xxQ -gyt -gyt -gyt -waA -xxB -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -lEy -qxF -rgx -lEy -ybA -ybA -uyk -ePC -ybA -ybA -nwG -"} -(140,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -xeT -dzi -dzi -dzi -xeT -qDy -lVy -lVy -lVy -dzi -dzi -dJN -dJN -dJN -dJN -dJN -nKM -dJN -dJN -lVy -lVy -lVy -lVy -nwG -kWE -nwG -aMl -hTW -rFR -qsP -cYI -qRE -uZS -xnt -rFR -uZS -tPk -uZS -jwt -erQ -flB -pAr -qio -yaI -aMl -kWE -kWE -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gyt -gpg -gSJ -hBH -gih -inH -jBB -kAJ -lXW -oSO -omi -wAV -qzM -sbA -tOC -vgF -vUb -vUb -xIq -cZd -tJg -vUb -fYn -cZd -gyt -gyt -vja -vja -waA -xtx -xCD -xCD -xCD -mYY -nwG -nwG -nwG -jol -nwG -nwG -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -qxF -fmG -tMW -qxF -ybA -ybA -uyk -qxF -ybA -ybA -nwG -"} -(141,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -vJh -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -dzi -dzi -qDy -qDy -dzi -dzi -dzi -dzi -lVy -dzi -dzi -dzi -dJN -dJN -dJN -dJN -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -pAr -pAr -aMl -aMl -aMl -aMl -aMl -qJA -aMl -aMl -cYI -aMl -qJA -aMl -aMl -qJA -aMl -aMl -aMl -aMl -aMl -pAr -pAr -pcE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gyt -grO -hcd -hHk -djR -xnE -xnE -kJT -moD -nlE -omk -psY -qGc -xnE -tPB -vnh -xnE -xnE -xIK -mjm -moD -moD -vlK -gyt -gyt -heD -rvE -eFs -waA -xxB -nwG -xCD -nwG -xCD -sVo -nwG -mYY -nwG -nwG -nwG -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -qxF -xJd -fal -ybA -ybA -ybA -ePC -ybA -ybA -ybA -nwG -"} -(142,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -dzi -dzi -dzi -dzi -dzi -dzi -dzi -qDy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -lVy -nwG -pAr -pAr -aMl -tmZ -hln -reM -enk -bAt -aMl -lvJ -rWi -tVm -xrT -pQk -aMl -puh -fhh -cvk -kmR -cBT -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gyt -gih -hgu -hgu -gih -inJ -xLn -kcY -kcY -xLn -opX -pyz -kAJ -xLn -kcY -kcY -xLn -xLn -gih -rSk -tof -tnu -gyt -gyt -gyt -gyt -nsk -gyt -waA -xxB -nwG -nwG -mYY -xCD -xCD -jtL -mYY -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -ydh -ybA -ybA -uyk -fal -qxF -ybA -ybA -ybA -qxF -uIp -ybA -ybA -nwG -"} -(143,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dzi -dzi -dzi -dzi -dzi -dzi -dzi -dzi -lVy -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pAr -pAr -aMl -lvJ -lvJ -lvJ -rJp -aJp -cYI -lvJ -aJp -pAr -ukD -lvJ -cYI -lvJ -rhN -lvJ -pAr -aJp -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gyt -gyt -gyt -gyt -gyt -gdH -kPa -msV -uIX -uIX -uIX -uIX -uIX -uIX -uIX -wiW -gih -gih -gih -eqm -gih -xwu -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xCD -nwG -xCD -xCD -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -uIp -gqJ -ybA -ybA -hNQ -qxF -ybA -ybA -ybA -ybA -uIp -ccf -ybA -nwG -"} -(144,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dzi -dzi -dzi -dzi -dzi -qDy -qDy -dzi -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -nwG -aMl -fED -jKj -hKD -pAr -aJp -aMl -lvJ -fED -jKj -hKD -lvJ -aMl -baV -lvJ -fED -jKj -hKD -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -jol -nwG -nwG -nwG -nwG -nwG -gyt -gyt -gyt -gyt -gyt -gyt -gih -nsk -gih -gyt -xwu -gyt -gyt -gih -xwu -nwG -xCD -xCD -mYY -nwG -mYY -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -jol -nwG -mYY -xCD -xCD -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -uIp -ybA -ybA -lEy -tql -tql -ybA -ybA -ybA -ybA -mYY -nwG -nwG -"} -(145,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -qDy -dzi -dzi -vdT -dzi -qDy -qDy -dzi -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -pAr -aMl -rXc -aeo -kSb -aJp -lCR -aMl -qDs -rXc -aeo -kSb -lvJ -aMl -lvJ -cLR -rXc -aeo -kSb -aMl -nwG -kWE -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xwu -gyt -kWH -msY -msY -otr -pFN -msY -scS -msY -vod -gyt -waA -xxB -xCD -nwG -nwG -xCD -xCD -nwG -nwG -mYY -nwG -sVo -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xCD -xCD -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ccf -mYY -ybA -ybA -tql -vbb -rUy -cuq -ybA -ybA -ybA -nwG -nwG -"} -(146,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -qDy -qDy -dzi -dzi -dzi -dzi -qDy -qDy -dzi -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -pAr -aMl -tFw -gpT -xrE -aJp -kDb -aMl -hCz -amn -gpT -xrE -lTU -aMl -baV -pAr -amn -gpT -xrE -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -fdb -ePP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xwu -gyt -szl -nlN -sMk -pHZ -qIR -lHx -uaN -gyt -gyt -waA -xtx -nwG -xCD -xCD -xCD -nwG -jol -xCD -nwG -nwG -nwG -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -mYY -mYY -nwG -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -nwG -nwG -ybA -ybA -ybA -qxF -rUy -dRK -sjH -bWF -ybA -ybA -nwG -"} -(147,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -qDy -qDy -dzi -qDy -qDy -dzi -dzi -qDy -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -pAr -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -aMl -pAr -pAr -pAr -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -jol -nwG -nwG -nwG -nwG -nwG -gyt -gyt -nmu -our -pJa -qLY -qLY -gyt -gyt -wlf -waA -xtx -xCD -mYY -mYY -mYY -nwG -xCD -nwG -jzV -fdb -xCD -nwG -nwG -nwG -xCD -mYY -xCD -nwG -nwG -nwG -mYY -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -ybA -ybA -ybA -mYY -ccf -nwG -nwG -nwG -nwG -nwG -"} -(148,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -qDy -qDy -dzi -qDy -qDy -dzi -dzi -dzi -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -nwG -nwG -pAr -pAr -nwG -kWE -pAr -pAr -pAr -kWE -kWE -nwG -pAr -pAr -pAr -nwG -pAr -pAr -pAr -pAr -nwG -kWE -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xwu -gyt -gyt -gyt -gyt -gyt -gih -xwu -xwu -waA -xtx -nwG -nwG -nwG -nwG -mYY -nwG -nwG -xCD -mYY -nwG -xCD -xCD -nwG -nwG -nwG -nwG -nwG -xCD -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(149,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gCR -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -lVy -dzi -dzi -dzi -dzi -dzi -dzi -dzi -dzi -dzi -lVy -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -kWE -nwG -kWE -kWE -kWE -kWE -kWE -kWE -kWE -nwG -nwG -nwG -kWE -kWE -kWE -kWE -kWE -kWE -kWE -nwG -nwG -nwG -kWE -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -mYY -nwG -nwG -nwG -nwG -nwG -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xCD -xCD -xCD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(150,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(151,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -"} -(152,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -qBL -dnn -ips -ips -ips -ips -ips -vNu -vDr -qBL -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -hcs -qBL -hcs -nwG -nwG -nwG -nwG -nwG -nwG -"} -(153,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -oGj -xdM -wWW -wWW -wWW -wWW -mLk -wWW -xdM -oGj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -oGj -xdM -xdM -xdM -xdM -vBH -nwG -nwG -"} -(154,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -bNl -lsd -uhJ -uTg -puU -siZ -uhJ -bjr -xdM -oCb -xWf -xWf -xWf -xWf -dEZ -xdM -iSv -bWU -qfd -cVb -qfd -puU -qfd -puU -xdM -rHI -rHI -xdM -eJw -hgc -xdM -iuf -iuf -sNB -nwG -nwG -nwG -"} -(155,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -ode -qgK -bzD -bzD -bzD -gzV -vQF -vQF -vQF -rbL -fSx -lSp -vUT -vUT -gvO -miN -xfE -sUD -keu -ndi -hZr -psc -inW -tJP -inW -vye -opF -wQT -pnv -nNs -iWJ -vwJ -xpC -iuf -iuf -nwG -nwG -nwG -nwG -"} -(156,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -uhJ -jXO -vIy -puU -bNl -syf -klF -xVC -pKK -blq -obI -gIW -tji -bMg -xVC -kqA -vbJ -vIy -vbJ -vvk -vbJ -puU -puU -xdM -rDO -aTP -xdM -puU -vvk -xdM -iuf -iuf -nwG -nwG -nwG -nwG -"} -(157,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -syf -xVC -xVC -mEI -ftr -cuk -gIW -ngF -wJr -xVC -ugy -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -bWR -nwG -nwG -nwG -"} -(158,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xdM -syf -xVC -xVC -mEI -xEB -mCp -gIW -afN -jfX -xVC -oCL -eMJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(159,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -piI -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -vBH -nwG -nwG -nwG -nwG -nwG -nwG -bJT -xdM -xdM -xdM -xdM -xdM -nlJ -xVC -xVC -xVC -xVC -xVC -boI -xVC -pBk -xVC -oCL -eMJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(160,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -iuf -iuf -iuf -iuf -iuf -iuf -iuf -iuf -opn -xVC -tVo -dVo -boQ -xVC -cNW -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -vBH -nwG -nwG -nwG -"} -(161,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -bNl -puU -puU -puU -puU -puU -uhJ -puU -uTg -puU -siZ -nxJ -tuP -xVC -iuf -iuf -xVf -oWa -oWa -oWa -aWr -iuf -iuf -xVC -hBF -raz -irV -xVC -kqA -nxJ -qfd -cVb -qfd -puU -qfd -puU -xdM -rHI -rHI -xdM -eJw -puU -xdM -iuf -iuf -sNB -nwG -nwG -nwG -"} -(162,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -ode -qgK -bzD -bzD -bzD -bzD -bzD -bzD -bzD -bzD -bzD -gzV -vQF -vQF -vQF -ugC -umS -iuf -sQC -kJX -xVf -dQQ -reb -xFm -alo -iuf -xVC -cbW -tpd -cME -msS -rQS -nbL -rXt -shE -scN -cGd -scN -uEV -enp -xHh -nJL -xjo -rwP -fNC -xpC -iuf -iuf -nwG -nwG -nwG -nwG -"} -(163,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -puU -jXO -bNl -uhJ -puU -puU -puU -lsd -vIy -uhJ -puU -puU -sOt -xVC -iuf -iuf -xVf -kKK -ctI -kKK -vaM -iuf -iuf -xVC -hBF -nkz -vUQ -xVC -lDj -vbJ -vIy -vbJ -vvk -vbJ -puU -puU -xdM -rDO -aTP -xdM -puU -vvk -xdM -iuf -iuf -nwG -nwG -nwG -nwG -"} -(164,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -sOt -xVC -iuf -iuf -iuf -iuf -cHS -iuf -iuf -iuf -iuf -xVC -oBe -xVC -sIY -xVC -cNW -xVC -xVC -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -bWR -nwG -nwG -nwG -"} -(165,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -bWR -nwG -nwG -tJi -nwG -xlu -xdM -ewt -xVC -xVC -xVC -xVC -xVC -tGh -xVC -xVC -xVC -xVC -xVC -olM -bxO -uha -pAJ -uQk -kdx -xVC -xdM -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -bWR -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(166,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -eck -asu -qvv -aEH -aEH -qzT -haj -bur -uZI -aWP -bur -bxo -uZI -hBF -iUW -dUT -suK -dLe -xVC -xdM -xdM -nwG -vmP -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(167,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -hih -qBL -hih -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -xVC -xVC -tkp -bMm -bMm -nbM -nbM -kbO -nbM -orA -xVC -rXu -bMm -hBF -bMm -uha -bMm -esv -cPQ -xdM -xdM -xdM -xdM -xdM -xdM -nwG -vmP -nwG -nwG -nwG -nwG -xSD -xSD -nwG -nwG -nwG -nwG -nwG -"} -(168,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -hih -qBL -hih -nwG -nwG -nwG -dJr -xdM -oGj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -txL -bMm -jbu -wqK -pYO -ssE -wqK -aqk -gNP -pCs -jGZ -fHu -pYO -xMn -guK -uRg -hPw -xdM -iIY -ihK -xdM -xdM -xdM -xdM -xdM -xdM -nwG -vmP -nwG -xLk -hcs -nwG -nwG -nwG -nwG -nwG -"} -(169,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -dJr -xdM -oGj -uYC -uYC -uYC -uYC -xdM -xdM -nVV -syO -nPX -vbY -iHE -jwl -xdM -sAq -mot -eOw -qCl -xdM -sAq -mot -eOw -dDJ -xdM -sAq -mot -eOw -fgj -xdM -txL -jcD -qNQ -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xdM -xQq -wKX -gCb -xdM -aIp -seB -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -vBH -nwG -nwG -nwG -nwG -"} -(170,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -qBL -xSD -nwG -nwG -dJr -xdM -xdM -mRJ -mRJ -mRJ -mRJ -xdM -xdM -pVs -dLp -dLp -dLp -sSx -gZg -xdM -faH -kup -xdM -cOn -aPb -awb -xdM -fJh -lnu -uTd -aXc -xdM -rLB -lnu -uTd -aXc -xdM -aUz -lnu -uTd -aXc -xdM -qJY -wrb -uop -xVC -xWn -dHF -uaT -gJb -gJb -kkv -cDV -giA -cRm -xdM -jMm -kLw -woE -bjA -hSG -nED -rlv -ncq -eGe -nbA -nbA -nbA -gQf -hks -fGY -iuf -iuf -sNB -nwG -nwG -nwG -nwG -"} -(171,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -var -qfw -dKP -xdM -wEG -xdM -xdM -mVO -xCF -xCF -xCF -oHX -kiR -xVC -gTC -xug -wYf -eeP -kII -aBR -xdM -jsA -nFX -xdM -dWD -uUP -ezb -xdM -diN -xdM -sFL -xND -xdM -diN -xdM -sFL -xND -xdM -diN -xVC -sFL -xND -xdM -pZK -lXn -wKZ -xVC -xWn -vKC -pWq -dVg -vPl -ryr -wqp -fcD -trQ -xdM -pro -bMm -bMm -xdM -iBP -fIQ -xdM -bYT -puU -hJY -ooB -hJY -gyr -skT -lJP -iuf -iuf -nwG -nwG -nwG -nwG -nwG -"} -(172,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -fFj -wEG -wEG -xdM -fuJ -xCF -sNj -xdM -oyE -nXM -xzg -xzg -xzg -xTt -psP -mcg -gzZ -jTI -hwy -oKa -ceX -gzZ -xdM -omH -vzp -xdM -tly -wAX -nmZ -xdM -iRh -xdM -wGL -dQp -xdM -iRh -xdM -wGL -dQp -xdM -iRh -xdM -wGL -dQp -xdM -avt -sYC -qNQ -xVC -pmu -eda -wJL -dMg -ruH -enz -yhk -bMm -mqh -xdM -sdi -nZF -bMm -xdM -xdM -xdM -xdM -puU -puU -gyr -rFW -gyr -gyr -ooB -dee -iuf -nwG -nwG -nwG -nwG -nwG -nwG -"} -(173,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -fsS -wjv -uty -eyP -hvx -gNv -cUU -aJs -xdM -pAP -uDW -qeY -rjY -vPG -kbO -aMy -xVC -xVC -xVC -xVC -bgy -rUz -xVC -xdM -xdM -xdM -xdM -xdM -xdM -ech -xdM -xxu -xdM -xdM -xdM -xdM -vjE -xdM -xdM -xdM -xdM -rjk -xdM -xdM -xdM -xdM -wcO -bMm -fjP -xVC -xVC -xVC -cby -xVC -xVC -xVC -awv -xVC -xVC -xdM -rGv -oeT -bCg -hbL -bCg -bCg -xdg -puU -tIM -qtj -qtj -qtj -tIM -ooB -mWa -iuf -iyp -nwG -nwG -nwG -nwG -nwG -"} -(174,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -fsS -tRM -ckX -fzd -sbq -kua -mSo -cTj -ike -ioY -xqM -dxY -frR -frR -qgZ -iGG -oJJ -kVP -jvj -hnE -nGd -wPu -aQm -gcK -xqP -oJq -hnE -ucw -wWR -mro -wcE -xqD -sSo -gcK -wWR -iIy -mro -sSo -gcK -hyc -hnE -mro -sSo -gcK -wWR -mro -cpi -lKw -lYn -dIY -ooS -dMl -tZC -dGK -omM -ppZ -nch -qRQ -nIr -eYd -hfm -ged -xrJ -bMm -oNq -bMm -bMm -xdg -puU -qtj -vHq -gyr -vHq -qtj -ooB -mWa -iuf -nwG -nwG -nwG -nwG -nwG -nwG -"} -(175,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -ode -gzR -rnp -xFY -mlA -twa -twa -sCm -fCI -pzZ -xdM -eCg -dxY -frR -qSY -mVh -mVA -gjU -xVC -taA -nbM -sYC -hgQ -qcn -orA -xVC -cIU -jpj -iEA -whK -bMm -nbM -jwn -qcn -bMm -nbM -nbM -nbM -pYV -jpj -iEA -whK -bMm -qcn -nbM -nbM -qYi -xVC -gPX -mAS -lBE -xVC -ouM -rYP -nyQ -isf -wIS -kMR -snW -ulP -dyd -xdM -kLk -xrJ -mCI -wyw -qYS -bMm -xdg -puU -qtj -gyr -kKD -gyr -qtj -skT -dee -xdM -nwG -nwG -nwG -nwG -nwG -nwG -"} -(176,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -snJ -tRM -eEH -gId -bRU -kua -lqj -pPz -haW -mzk -fVe -dxY -frR -frR -qrw -fuP -bfX -oGs -kSU -lOd -olM -hBF -cTs -wiN -mlL -hVK -hBF -hBF -hBF -hBF -hBF -jfs -cTs -wiN -bvi -lOd -olM -cTs -wiN -bvi -xDq -olM -cTs -wiN -bvi -olM -aWP -nNj -itL -jNB -eyY -vet -wNX -jii -jvT -qmq -aoX -gnj -eEh -kaS -dmQ -aiz -xrJ -bMm -bMm -bMm -bMm -xdg -puU -qtj -vHq -gyr -vHq -qtj -ooB -mWa -iuf -iyp -nwG -nwG -nwG -nwG -nwG -"} -(177,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -snJ -dqQ -feX -uaW -hWR -rTB -npK -uEA -xdM -xqf -djF -gkU -hZx -nxw -nbM -kDq -xdM -xdM -xdM -xdM -lqt -eFH -xdM -xdM -nDU -tFI -tFI -tFI -tFI -wOQ -xdM -lxu -xdM -xdM -xdM -xdM -izf -xdM -xdM -xdM -xdM -iTV -xdM -xdM -xdM -xdM -afA -bMm -xMA -xVC -uBz -uCq -rAf -uHp -ezR -ucx -wIS -jii -wIS -xdM -mcP -eID -meD -meD -meD -meD -xdg -puU -tIM -qtj -qtj -qtj -tIM -ooB -mWa -iuf -nwG -nwG -nwG -nwG -nwG -nwG -"} -(178,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -oJj -crT -crT -xdM -fYg -gAT -blp -xdM -ejg -clm -hBF -hBF -hBF -hBF -kDq -xdM -iiQ -gmP -iiQ -syf -vow -iiQ -xdM -wxK -etr -wkn -gGu -qFb -xVC -xdM -gKd -xdM -wGL -wXk -xdM -gKd -xdM -wGL -wXk -xdM -gKd -xdM -wGL -wXk -xdM -hty -jcD -pwA -xVC -bYE -ezR -ulP -isf -ulP -dxB -qmq -qmq -qmq -xdM -eNv -wqX -bMm -twZ -bMm -twZ -xdM -puU -puU -gyr -gfB -gyr -gyr -ooB -dee -iuf -nwG -sNB -nwG -nwG -nwG -nwG -"} -(179,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -var -vxb -skr -xdM -wEG -xdM -xdM -hOp -gAT -gAT -gAT -eMD -gLy -xdM -mEw -vHL -krC -krC -vbv -lYb -xdM -khq -sou -rAt -jXU -jXU -tbW -xdM -diN -xdM -xLr -nFX -xdM -diN -xdM -xLr -nFX -xdM -diN -xdM -xLr -nFX -xdM -geV -qhK -pwA -xVC -tBU -uPN -jii -wIS -wmV -qSf -usG -aUX -aUX -xdM -shx -hBF -hBF -hBF -hBF -nYk -xdM -bYT -puU -txV -ooB -txV -gyr -skT -lJP -iuf -iuf -nwG -nwG -nwG -nwG -nwG -"} -(180,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -eZk -xSD -nwG -nwG -pgC -xdM -xdM -mRJ -mRJ -mRJ -mRJ -xdM -xdM -mGE -wHO -mGE -bhq -dYM -mGE -xdM -iDa -kbl -hpQ -bRs -jXU -lbZ -xdM -fiP -kQn -alx -lZV -xdM -cTy -kQn -alx -lZV -xdM -msF -kQn -alx -lZV -xdM -xLF -xNQ -pwA -xVC -bZx -pgK -qSr -jeb -ezR -isf -isf -rAf -dxB -xdM -keX -kRY -qqx -pJz -hBF -nYk -xdM -puU -puU -upR -ocY -ocY -rZM -fxI -hSV -iuf -iuf -nwG -nwG -nwG -nwG -nwG -"} -(181,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pgC -xdM -vxb -ivw -xdM -xdM -xdM -xdM -xdM -wjl -mWF -iac -ryG -jXL -eQg -xdM -bla -oap -wmI -hYu -xdM -bla -oap -wmI -cFp -xdM -bla -oap -wmI -sDx -xdM -siU -sYC -pwA -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xdM -mnZ -xdM -xdM -xdM -bIr -hBF -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -bWR -nwG -nwG -nwG -nwG -"} -(182,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nza -eZk -nza -nwG -nwG -nwG -pgC -xdM -oGj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -siU -bMm -bur -bxo -kvw -bxo -bxo -uZI -aWP -bur -oJS -dox -kvw -dkj -luV -vfO -gcy -xdM -pkK -jaT -xdM -xdM -xdM -xdM -xdM -xdM -nwG -sEH -nwG -xLk -nza -nwG -nwG -nwG -nwG -nwG -"} -(183,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nza -eZk -nza -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xVC -xVC -vaq -bMm -bMm -nbM -nbM -nbM -nbM -orA -xVC -rXu -bMm -hBF -bMm -keX -bMm -qZn -gNZ -xdM -xdM -xdM -xdM -xdM -xdM -nwG -sEH -nwG -nwG -nwG -nwG -xSD -xSD -nwG -nwG -nwG -nwG -nwG -"} -(184,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xVC -bum -wrU -gov -gov -gov -gov -gov -kiB -cpi -wrU -gov -lmJ -wsC -hqi -dUT -cPm -mGs -xVC -xdM -xdM -nwG -sEH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(185,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -vBH -nwG -nwG -jmn -nwG -kWE -xdM -xVC -dEl -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -xVC -ttu -pQi -keX -snk -aAz -lkL -xVC -xdM -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -vBH -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(186,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -sOt -xVC -lZY -nHZ -irx -hiI -gBz -uAv -eQA -xvE -xVC -bfD -xVC -kpi -xVC -hlF -xVC -xVC -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -vBH -nwG -nwG -nwG -"} -(187,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -uhJ -puU -jXO -puU -puU -puU -uhJ -puU -puU -uTg -puU -bNl -puU -puU -sOt -xVC -iwi -sXB -ltp -jXU -mNJ -uGr -jXU -iQZ -xVC -dkf -skV -kjG -xVC -ntP -qfd -eGE -qfd -cur -qfd -puU -puU -xdM -fRT -rHI -xdM -puU -cur -xdM -iuf -iuf -sNB -nwG -nwG -nwG -"} -(188,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -ode -qgK -bzD -bzD -bzD -bzD -bzD -bzD -bzD -bzD -bzD -gzV -vQF -vQF -vQF -vQF -ald -xVC -kKO -lhE -tBS -dUD -dUD -nKY -jIN -sHK -cIj -giB -isj -kWU -nNW -ibn -bTA -qfF -rry -cGd -scN -cGd -uEV -dks -xHh -nJL -dks -rwP -fNC -xpC -iuf -iuf -nwG -nwG -nwG -nwG -"} -(189,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -puU -puU -bNl -uhJ -puU -puU -puU -puU -vIy -puU -uhJ -ktO -wgI -klF -xVC -pwb -hdU -ltp -jXU -syZ -eFg -jXU -hdU -jfs -dkf -raz -roQ -xVC -kqA -wgI -vbJ -hbq -vbJ -puU -vbJ -puU -xdM -aTP -aTP -xdM -eJw -puU -xdM -iuf -iuf -nwG -nwG -nwG -nwG -"} -(190,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xVC -lMf -ews -wwk -jXU -gUI -daF -oYZ -wUf -xVC -cBP -xox -keX -xVC -hlF -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -bWR -nwG -nwG -nwG -"} -(191,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -bWR -nwG -nwG -nwG -nwG -nwG -nwG -qRJ -xdM -xdM -xdM -xdM -xdM -xEX -xVC -xVC -xVC -xVC -xVC -eMP -xVC -xuN -xVC -oCL -eMJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(192,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xdM -syf -xVC -xVC -tRj -ttE -iHr -dkf -bZA -keX -xVC -oCL -eMJ -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(193,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -pJw -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -syf -xVC -xVC -weS -hBF -qgj -dkf -nOB -keX -xVC -tea -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -vBH -nwG -nwG -nwG -"} -(194,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -bNl -jXO -uTg -lsd -uhJ -syf -tuP -xVC -kWs -hBF -twZ -dkf -nDE -odO -xVC -kqA -qfd -eGE -qfd -cur -qfd -puU -puU -xdM -fRT -rHI -xdM -puU -cur -xdM -iuf -iuf -sNB -nwG -nwG -nwG -"} -(195,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -ode -qgK -bzD -bzD -bzD -gzV -vQF -vQF -vQF -sxf -hfh -lfg -wvE -wPu -iCz -jnB -mqJ -hgh -bSg -aPI -ePd -oJd -mQY -vKX -mQY -jum -oRy -kbr -wQS -oRy -seb -vrn -xpC -iuf -iuf -nwG -nwG -nwG -nwG -"} -(196,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -apT -xdM -puU -uhJ -puU -vIy -uhJ -ktO -bNl -mXT -xVC -twZ -oLe -tai -neP -tHh -bHd -xVC -pVx -klF -vbJ -hbq -vbJ -puU -vbJ -puU -xdM -aTP -aTP -xdM -eJw -hgc -xdM -iuf -iuf -nwG -nwG -nwG -nwG -"} -(197,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -gBj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -oGj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -oGj -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -xdM -oGj -xdM -xdM -xdM -xdM -bWR -nwG -nwG -"} -(198,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -eZk -ggJ -ozv -ozv -ozv -ozv -ozv -ozv -ewS -eZk -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nza -eZk -nza -nwG -nwG -nwG -nwG -nwG -nwG -"} -(199,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -xSD -xSD -xSD -nwG -nwG -nwG -nwG -nwG -nwG -"} -(200,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(201,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(202,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(203,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(204,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(205,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(206,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(207,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(208,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(209,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(210,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(211,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(212,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(213,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(214,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(215,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(216,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(217,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(218,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(219,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(220,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(221,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(222,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(223,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(224,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(225,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(226,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(227,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(228,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(229,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(230,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(231,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(232,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(233,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(234,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(235,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(236,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(237,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(238,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(239,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(240,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(241,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(242,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(243,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(244,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(245,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(246,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(247,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(248,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(249,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(250,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(251,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(252,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(253,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(254,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(255,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} -(256,1,1) = {" -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -nwG -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aau" = ( +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"aav" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/plating, +/area/space) +"aaK" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"aaY" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/space) +"abg" = ( +/obj/effect/forcefield/mime, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"abL" = ( +/obj/machinery/gateway/brass{ + dir = 6 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"abP" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/mimedouble, +/turf/simulated/floor/wood, +/area/space) +"abR" = ( +/obj/machinery/power/thermoregulator, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"ace" = ( +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/black, +/area/space) +"acl" = ( +/obj/machinery/mining/brace, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"acK" = ( +/obj/structure/girder, +/turf/template_noop, +/area/space) +"acQ" = ( +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating, +/area/space) +"aea" = ( +/obj/machinery/computer/ship/engines, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"aeg" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"aeo" = ( +/obj/machinery/artifact_scanpad, +/obj/effect/simple_portal/linked, +/obj/effect/map_effect/interval/effect_emitter/sparks, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aeA" = ( +/obj/structure/closet/secure_closet/miner{ + pixel_x = -27 + }, +/obj/structure/bed/chair/bay/shuttle{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"aeH" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"aeX" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/reagent_containers/glass/beaker/bluespace, +/obj/item/weapon/reagent_containers/glass/beaker/bluespace{ + pixel_x = -7 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"afc" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/item/stack/material/lead{ + amount = 50 + }, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/phoron, +/turf/simulated/floor/plating, +/area/space) +"afn" = ( +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"afA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"afD" = ( +/obj/structure/disposalpipe/sortjunction/untagged{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"afL" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "echidna_hatch"; + locked = 1; + name = "Rear Hatch" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"afN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/space) +"afQ" = ( +/obj/effect/gibspawner/robot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ahk" = ( +/obj/effect/catwalk_plated/white, +/turf/template_noop, +/area/space) +"ahT" = ( +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/space) +"ahX" = ( +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aid" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"aiv" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"aiy" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/space) +"aiz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"ajs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"ajt" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 5; + icon_state = "2-5" + }, +/turf/simulated/floor/plating, +/area/space) +"ajG" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"akc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"akM" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"alb" = ( +/obj/machinery/vending/medical{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"ald" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"alo" = ( +/obj/machinery/power/smes, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating/eris/under, +/area/space) +"alx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"ame" = ( +/obj/random/tech_supply/component/nofail, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ami" = ( +/obj/machinery/atmospherics/valve{ + dir = 8 + }, +/obj/structure/dispenser{ + phorontanks = 0 + }, +/turf/simulated/floor/plating/external, +/area/space) +"amn" = ( +/obj/structure/cryofeed{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"amo" = ( +/obj/machinery/transportpod, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"amu" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"ank" = ( +/obj/machinery/replicator, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"anR" = ( +/obj/structure/table/reinforced, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"aoq" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/structure/closet/alien, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"aot" = ( +/turf/unsimulated/elevator_shaft, +/area/space) +"aov" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod) +"aoL" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/multitool, +/obj/item/device/geiger, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/welding, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/plating, +/area/space) +"aoX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/space) +"aoZ" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"apP" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"apT" = ( +/obj/structure/lattice, +/obj/machinery/light{ + layer = 3 + }, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"aqc" = ( +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/space) +"aqk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aqC" = ( +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/freezer, +/area/space) +"aqH" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -34 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aqO" = ( +/obj/vehicle/train/trolley{ + dir = 2 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ark" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"arl" = ( +/obj/machinery/door/blast/puzzle{ + checkrange_mult = 3; + dir = 4; + layer = 3.3; + name = "Blast Door"; + open_layer = 3.3 + }, +/turf/simulated/floor/dungeon, +/area/space) +"arT" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"asu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"asx" = ( +/mob/living/simple_mob/mechanical/hivebot/tank, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"asT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"atg" = ( +/obj/machinery/computer/prisoner{ + dir = 1; + icon = 'icons/obj/abductor.dmi'; + icon_screen = null; + icon_state = "console-c"; + req_access = list(777) + }, +/turf/simulated/floor/wood/sif, +/area/space) +"atZ" = ( +/obj/structure/largecrate/vehicle/bike, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"auM" = ( +/obj/structure/table/wooden_reinforced, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_y = 13 + }, +/turf/simulated/floor/wood, +/area/space) +"avt" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"avI" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/space) +"awb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"awk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/structure/shuttle/engine/router, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"awm" = ( +/turf/simulated/wall/rdshull, +/area/space) +"awv" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + dir = 4; + name = "Auxiliary Storage" + }, +/turf/simulated/floor, +/area/space) +"axl" = ( +/obj/effect/decal/cleanable/generic, +/obj/item/weapon/gun/energy/toxgun, +/turf/simulated/floor/plating, +/area/space) +"axm" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"axP" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "ursula"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "ursula_outer"; + locked = 1; + name = "External Access" + }, +/turf/simulated/shuttle/plating, +/area/space) +"ayr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/gibspawner/human, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"ayW" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"azj" = ( +/obj/structure/ledge/ledge_nub{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aAm" = ( +/obj/structure/prop/alien/computer{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aAn" = ( +/obj/machinery/computer/crew{ + dir = 1; + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"aAz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aBb" = ( +/obj/machinery/floodlight, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"aBB" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"aBG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"aBH" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/device/healthanalyzer/phasic, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/white, +/area/space) +"aBR" = ( +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"aCb" = ( +/obj/structure/window/basic/full, +/turf/simulated/floor/tiled, +/area/space) +"aCo" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"aCL" = ( +/obj/item/weapon/shovel, +/obj/item/weapon/pickaxe, +/obj/item/weapon/tool/crowbar, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/holster/hip, +/obj/item/device/gps, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"aDc" = ( +/obj/item/weapon/antag_spawner/technomancer_apprentice, +/turf/template_noop, +/area/space) +"aDt" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"aDX" = ( +/obj/item/stack/animalhide/xeno, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"aEb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating/external, +/area/space) +"aEm" = ( +/obj/structure/table/alien, +/obj/item/device/taperecorder, +/obj/item/device/taperecorder, +/obj/item/device/taperecorder, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"aEH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aFc" = ( +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"aFl" = ( +/obj/effect/alien/weeds, +/obj/random/junk, +/turf/simulated/floor, +/area/space) +"aFz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/shuttle/wall, +/area/space) +"aFE" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/carpet/blucarpet, +/area/space) +"aFN" = ( +/obj/structure/bed/chair/bay/comfy/green{ + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 24; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"aFQ" = ( +/turf/simulated/wall/phoron, +/area/space) +"aGS" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"aHs" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/shuttle/plating, +/area/space) +"aHD" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aHF" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7 + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"aHZ" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/space) +"aIm" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/power/apc/alarms_hidden{ + dir = 8; + pixel_x = -20 + }, +/turf/simulated/floor/plating, +/area/space) +"aIp" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/space) +"aIu" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"aIB" = ( +/obj/effect/decal/cleanable/blood/gibs{ + color = "red"; + icon_state = "gibdown1_flesh" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aIW" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor, +/area/space) +"aJk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"aJn" = ( +/obj/structure/largecrate/animal/cow, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"aJp" = ( +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"aJs" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + pixel_y = -26 + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aKE" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"aKH" = ( +/obj/effect/map_effect/portal/master/side_a{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aLd" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aLg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 5; + icon_state = "4-5" + }, +/turf/simulated/floor/plating, +/area/space) +"aMg" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser{ + phorontanks = 0 + }, +/turf/simulated/floor/plating, +/area/space) +"aMk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/floor/black, +/area/space) +"aMl" = ( +/turf/simulated/wall/skipjack, +/area/space) +"aMy" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + pixel_y = -26 + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aMF" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "atriumsouth" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"aMP" = ( +/obj/effect/gateway/active, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aNv" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "exaroom5"; + pixel_y = 31 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"aOv" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aOw" = ( +/obj/machinery/vending/event/overwear, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aOC" = ( +/obj/machinery/wish_granter, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aOT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aOV" = ( +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/effect/floor_decal/techfloor, +/obj/structure/closet/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aPb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"aPm" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "atriumeast" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"aPs" = ( +/obj/machinery/recharge_station, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"aPI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"aPM" = ( +/obj/structure/bed/padded, +/obj/machinery/flasher{ + id = "SP-Cell flash"; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"aQm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"aQo" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/personal, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/weapon/gun/projectile/pistol, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/storage/box/survival/comp, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"aQp" = ( +/obj/structure/disposalpipe/broken{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"aRk" = ( +/obj/screen/alert/highpressure, +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/shuttle/floor/purple, +/area/space) +"aSQ" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -32 + }, +/turf/simulated/shuttle/plating, +/area/space) +"aTD" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/holoplant, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"aTP" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"aUe" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"aUz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room5"; + name = "Room 5 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"aUG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/space) +"aUX" = ( +/obj/machinery/atmospherics/binary/algae_farm/filled{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"aVl" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/iandouble, +/turf/simulated/floor/wood, +/area/space) +"aVP" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"aVR" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"aVX" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/space) +"aVY" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "food storage" + }, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/burrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/enchiladas, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/cheesenachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/cubannachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/pandenata, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/obj/item/weapon/reagent_containers/food/snacks/tocino, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"aWr" = ( +/obj/structure/fuel_port{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"aWP" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"aXc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"aXg" = ( +/obj/machinery/power/emitter{ + anchored = 1; + id = "EngineEmitter"; + state = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"aXv" = ( +/turf/simulated/wall/sandstonediamond, +/area/space) +"aXH" = ( +/obj/machinery/gateway/brass{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"aXM" = ( +/obj/machinery/suit_cycler/engineering{ + req_access = null + }, +/turf/simulated/floor/plating, +/area/space) +"aXO" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"aYg" = ( +/turf/simulated/floor/beach/water, +/area/space) +"aYh" = ( +/obj/structure/prop/statue/lion, +/turf/template_noop, +/area/space) +"aYj" = ( +/obj/structure/sign/botany, +/turf/simulated/wall, +/area/space) +"aYA" = ( +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/space/void/atmos, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/helmet/space/void/atmos, +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/westright{ + name = "Atmospherics Suits"; + req_access = list(24) + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/sign/warning/nosmoking_2{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"aZe" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"aZs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"aZu" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"aZO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bae" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/random/trash, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"bam" = ( +/obj/structure/flora/tree/dead, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bav" = ( +/obj/structure/fence/corner, +/turf/template_noop, +/area/space) +"baV" = ( +/obj/machinery/fitness/heavy/lifter, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"bbk" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bbu" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 24; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"bbw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"bbI" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"bbM" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "5" + }, +/turf/template_noop, +/area/space) +"bco" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/space) +"bcv" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/floor, +/area/space) +"bdb" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/reagent_containers/glass/beaker/bluespace, +/obj/item/weapon/reagent_containers/glass/beaker/bluespace{ + pixel_x = -7 + }, +/obj/item/weapon/storage/belt/medical/alien, +/obj/item/weapon/storage/belt/medical/alien{ + pixel_y = 6 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"bdm" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/prop/alien/computer/camera/flipped{ + dir = 1 + }, +/turf/simulated/floor/greengrid, +/area/space) +"bdH" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1; + req_one_access = list(67) + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"beM" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_4" + }, +/turf/simulated/floor/tiled, +/area/space) +"bfk" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/plating, +/area/space) +"bfD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bfM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bfX" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bgo" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + icon_state = "door_locked"; + id_tag = "baby_mammoth_hatch_side"; + locked = 1; + name = "shuttle side hatch" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/remote/airlock{ + id = "baby_mammoth_hatch_side"; + name = "Side Hatch Control"; + pixel_y = -26; + specialfunctions = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "baby_mammoth_blast"; + layer = 2.5; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"bgv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "ursula_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"bgy" = ( +/obj/machinery/door/firedoor/glass/hidden, +/turf/simulated/floor/tiled/dark, +/area/space) +"bgQ" = ( +/obj/structure/salvageable/autolathe, +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"bhd" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"bhq" = ( +/obj/machinery/computer/cryopod{ + pixel_x = 32 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"bhs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"biJ" = ( +/obj/structure/flora/ausbushes/sunnybush, +/turf/simulated/floor/grass, +/area/space) +"biQ" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "Advanced storage" + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/device/t_scanner, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/geiger, +/obj/item/device/geiger, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/scanning_module, +/obj/item/weapon/stock_parts/scanning_module, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/clotting, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/adv, +/turf/simulated/shuttle/floor/purple, +/area/space) +"biX" = ( +/obj/structure/bed/alien, +/obj/structure/curtain/open/privacy, +/obj/item/weapon/bedsheet/medical, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"bjr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor, +/area/space) +"bjA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/angled_bay/external/glass{ + name = "Interior Airlock Access"; + id_tag = "Avalon_engine_airlock_interior" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bjM" = ( +/obj/machinery/gateway/brass, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bkh" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "baby_mammoth_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"bkx" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"bkR" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"bla" = ( +/obj/structure/table/sifwoodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"ble" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"blp" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"blq" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"blK" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/wood/sif, +/area/space) +"blR" = ( +/obj/effect/map_effect/portal/master/side_a{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bmj" = ( +/turf/simulated/floor/cult, +/area/space) +"bmH" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/ce, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bmP" = ( +/obj/structure/table/darkglass, +/obj/item/device/lightreplacer, +/turf/simulated/floor/carpet, +/area/space) +"bmW" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bmX" = ( +/obj/machinery/light/small/poi{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bmY" = ( +/obj/effect/map_effect/portal/master/side_a{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bnr" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"boe" = ( +/obj/effect/simple_portal/coords, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"boC" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor, +/area/space) +"boI" = ( +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hangar Bay" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"boQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bpj" = ( +/obj/effect/temporary_effect/pulse/snake/testing/hunter, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bpq" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bpE" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"bpJ" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood/sif, +/area/space) +"bpZ" = ( +/obj/machinery/button/flasher{ + id = "procroom1"; + pixel_y = 31 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bqt" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/flasher{ + id = "teleroom1"; + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"bqz" = ( +/obj/effect/meteor/irradiated, +/turf/simulated/floor/lava, +/area/space) +"bqS" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"brs" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"bsg" = ( +/obj/machinery/flasher{ + id = "teleroom2"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bsx" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bsy" = ( +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"bsS" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/space) +"bue" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/machinery/holoplant, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"bum" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bur" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"but" = ( +/obj/machinery/power/apc/hyper{ + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"buI" = ( +/obj/structure/table/alien, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/tiled/freezer, +/area/space) +"buS" = ( +/obj/structure/closet/alien, +/obj/machinery/button/remote/airlock{ + id = "abdorm2"; + name = "Door Lock Control"; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"bvh" = ( +/obj/machinery/computer/security/abductor{ + dir = 1; + icon_screen = null; + icon_state = "camera_flipped" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"bvi" = ( +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bwt" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"bwB" = ( +/turf/simulated/wall/r_lead, +/area/space) +"bxh" = ( +/obj/random/trash, +/turf/template_noop, +/area/space) +"bxo" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bxJ" = ( +/obj/item/weapon/shovel, +/obj/item/weapon/tool/wrench, +/obj/item/weapon/pickaxe, +/obj/item/weapon/tool/crowbar, +/obj/item/stack/flag/yellow{ + pixel_x = 4 + }, +/obj/item/stack/flag/red, +/obj/item/stack/flag/green{ + pixel_x = -4 + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/item/device/gps/mining{ + pixel_x = -5 + }, +/obj/item/device/gps/mining{ + pixel_x = 5 + }, +/obj/item/weapon/storage/belt/utility/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bxN" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/structure/sign/poster/nanotrasen{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"bxO" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"byu" = ( +/obj/machinery/sleeper{ + dir = 4; + emagged = 1; + initial_bin_rating = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"byK" = ( +/mob/living/simple_mob/vore/demonAI{ + faction = "cult" + }, +/turf/simulated/floor/gorefloor2, +/area/space) +"byX" = ( +/turf/simulated/floor/beach/sand/desert, +/area/space) +"bzk" = ( +/obj/machinery/conveyor{ + id = "garbageone" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bzl" = ( +/obj/machinery/computer/ship/disperser, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bzD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"bAt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"bBn" = ( +/obj/structure/window/bay/phoronreinforced, +/turf/simulated/floor, +/area/space) +"bBr" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"bCg" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bCl" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"bCI" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/purple, +/area/space) +"bCU" = ( +/obj/machinery/button/windowtint{ + id = "atriumnorth"; + pixel_y = -23 + }, +/obj/machinery/button/flasher{ + id = "atriumflash"; + pixel_y = -31 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"bDS" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"bEA" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"bEW" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "stargazer_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"bFg" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/head/welding/knight, +/obj/item/clothing/glasses/welding, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/item/weapon/inducer, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/weapon/extinguisher/atmo, +/obj/item/weapon/extinguisher/atmo, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/weapon/storage/backpack/dufflebag/eng, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"bGj" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"bGm" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bGE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"bGF" = ( +/obj/structure/sign/science{ + pixel_y = 32 + }, +/turf/template_noop, +/area/space) +"bGS" = ( +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/weapon/storage/firstaid, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/roller, +/turf/simulated/shuttle/floor/black, +/area/space) +"bHd" = ( +/obj/structure/table/rack/shelf/steel, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bHv" = ( +/obj/effect/alien/weeds, +/obj/machinery/telecomms/broadcaster, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"bHA" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/floor/plating, +/area/space) +"bHD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"bIi" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bIr" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"bIB" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"bJh" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"bJp" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools{ + pixel_y = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"bJE" = ( +/obj/machinery/atmospherics/binary/circulator, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"bJT" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/turf/template_noop, +/area/space) +"bJZ" = ( +/obj/structure/closet/alien, +/obj/random/energy, +/obj/random/energy, +/obj/random/energy, +/obj/random/grenade/less_lethal, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"bKv" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/light, +/obj/structure/fuel_port{ + pixel_y = -28 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"bKN" = ( +/obj/structure/prop/alien/dispenser{ + pixel_x = -27 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"bKO" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"bLt" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/floor/greengrid, +/area/space) +"bLS" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"bLY" = ( +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 8; + id = "SD-1"; + name = "Shelter Lock"; + pixel_x = 26; + req_access = null; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"bMg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/space) +"bMm" = ( +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bMJ" = ( +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"bML" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"bMS" = ( +/obj/effect/temporary_effect/fire_blast, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bNl" = ( +/obj/structure/loot_pile/maint, +/turf/simulated/floor, +/area/space) +"bNL" = ( +/obj/structure/flora/lily1, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bOc" = ( +/obj/structure/closet/alien, +/obj/item/device/megaphone/super, +/obj/item/device/megaphone/super, +/obj/item/device/megaphone/super, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/turf/simulated/floor/wood/sif, +/area/space) +"bOq" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/black, +/area/space) +"bOI" = ( +/obj/structure/cliff/automatic/corner, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bOT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"bPz" = ( +/obj/structure/particle_accelerator/particle_emitter/left{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bPL" = ( +/obj/structure/disposalpipe/up{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"bPZ" = ( +/obj/effect/gibspawner/human, +/turf/simulated/shuttle/floor/alien, +/area/space) +"bRs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"bRT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"bRU" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"bSd" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bSg" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"bSi" = ( +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/space/void/atmos, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/helmet/space/void/atmos, +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/westleft{ + name = "Atmospherics Suits"; + req_access = list(24) + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bSn" = ( +/obj/machinery/door/airlock/alien{ + id_tag = "abdorm6"; + name = "Dorm 4"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"bSy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"bSB" = ( +/obj/structure/outcrop, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bSL" = ( +/obj/structure/table/standard, +/obj/item/toy/tennis, +/turf/simulated/floor/tiled/dark, +/area/space) +"bSS" = ( +/obj/structure/table/survival_pod, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bTA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"bTC" = ( +/obj/machinery/porta_turret/alien{ + faction = "hivebot" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"bTY" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_7" + }, +/turf/simulated/floor/tiled, +/area/space) +"bUe" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = -2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bUh" = ( +/obj/structure/table/alien, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/lightreplacer, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bUs" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_5" + }, +/turf/simulated/floor/tiled, +/area/space) +"bUv" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 4; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bUE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/plating, +/area/space) +"bUJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"bUL" = ( +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"bUW" = ( +/obj/machinery/door/airlock/maintenance/cargo, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bVY" = ( +/obj/structure/salvageable/server_os, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bWD" = ( +/obj/structure/sign/biohazard, +/turf/simulated/wall/skipjack, +/area/space) +"bWF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/loot_pile/mecha/gygax/dark/adv, +/turf/template_noop, +/area/space) +"bWP" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"bWR" = ( +/obj/structure/hull_corner{ + dir = 1 + }, +/turf/template_noop, +/area/space) +"bWU" = ( +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -26 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor, +/area/space) +"bXs" = ( +/obj/machinery/computer/ship/helm, +/turf/simulated/shuttle/floor/black, +/area/space) +"bXu" = ( +/obj/machinery/chem_master{ + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"bXx" = ( +/obj/structure/urinal{ + pixel_y = 24 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"bXE" = ( +/obj/structure/bed/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bXF" = ( +/obj/item/trash/material/metal, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bXI" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/loot_pile/mecha/marauder/mauler, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"bYs" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "28" + }, +/obj/machinery/artillerycontrol, +/turf/template_noop, +/area/space) +"bYE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor, +/area/space) +"bYS" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/shuttle/plating, +/area/space) +"bYT" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"bZb" = ( +/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, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/space) +"bZw" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"bZx" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor, +/area/space) +"bZA" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/structure/bedsheetbin, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"bZT" = ( +/obj/machinery/vending/hydronutrients{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"caf" = ( +/obj/structure/fence/door/opened, +/turf/template_noop, +/area/space) +"caV" = ( +/obj/machinery/smartfridge/produce, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"cbn" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"cbr" = ( +/obj/machinery/door/airlock/glass_centcom, +/turf/simulated/shuttle/floor/black, +/area/space) +"cby" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + dir = 4; + name = "Auxiliary Storage" + }, +/turf/simulated/floor, +/area/space) +"cbW" = ( +/obj/machinery/vending/wallmed1/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ccf" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ccE" = ( +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"cdg" = ( +/obj/structure/prop/statue/phoron, +/turf/template_noop, +/area/space) +"cdi" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"cdO" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/plating/external, +/area/space) +"cdR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"cdU" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/ammo_magazine/m545/ap, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/machinery/light, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ceb" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"cet" = ( +/obj/item/weapon/bone/arm, +/turf/simulated/floor/lava, +/area/space) +"cew" = ( +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_x = -24; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ceK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/bay/shuttle, +/turf/simulated/shuttle/floor/black, +/area/space) +"ceX" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 8; + pixel_x = -6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"cgj" = ( +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"cgJ" = ( +/obj/structure/disposalpipe/down{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"chI" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"cim" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ciR" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"cjn" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"cjJ" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"cjP" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"ckB" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ckX" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"clm" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"clE" = ( +/obj/random/cargopod, +/turf/template_noop, +/area/space) +"clJ" = ( +/obj/structure/particle_accelerator/particle_emitter/right{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cmP" = ( +/obj/machinery/door/airlock/alien{ + name = "Processing room 1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"cmZ" = ( +/turf/unsimulated/wall/planetary/sif{ + icon_state = "rock-dark" + }, +/area/space) +"cnp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"cnH" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"cnI" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/space) +"cnJ" = ( +/obj/machinery/power/supermatter/shard{ + color = "red"; + simulated = 0 + }, +/turf/simulated/floor/gorefloor, +/area/space) +"cnW" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"cot" = ( +/turf/simulated/shuttle/floor/white, +/area/space) +"cpi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cpO" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/obj/structure/closet/walllocker_double/hydrant/north, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/plating, +/area/space) +"cpQ" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"cqb" = ( +/obj/structure/sign/science{ + pixel_y = -32 + }, +/turf/template_noop, +/area/space) +"cqp" = ( +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/space) +"cqy" = ( +/obj/machinery/button/remote/airlock{ + id = "abdorm3"; + name = "Door Lock Control"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"cqI" = ( +/obj/structure/prop/alien/power, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"cre" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"cry" = ( +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/roller/adv, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/wheelchair{ + color = "grey" + }, +/obj/item/wheelchair{ + color = "grey" + }, +/obj/item/wheelchair{ + color = "grey" + }, +/obj/item/wheelchair{ + color = "grey" + }, +/obj/item/bodybag/large, +/obj/item/bodybag/large, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/item/weapon/melee/baton/shocker, +/obj/item/weapon/melee/baton/shocker, +/obj/item/weapon/melee/baton/shocker{ + agonyforce = 75 + }, +/obj/item/weapon/cell/void, +/obj/item/weapon/cell/void, +/obj/item/weapon/cell/void, +/obj/item/weapon/gun/energy/sickshot, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ro-Bust-Us" + }, +/obj/item/weapon/storage/box/handcuffs, +/obj/item/weapon/storage/box/handcuffs, +/obj/item/weapon/storage/box/handcuffs, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"crT" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"crX" = ( +/obj/machinery/door/airlock/maintenance/common, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"csg" = ( +/obj/machinery/disposal, +/turf/simulated/floor/tiled, +/area/space) +"csh" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_7" + }, +/turf/simulated/floor/tiled, +/area/space) +"cst" = ( +/obj/effect/alien/weeds, +/obj/structure/simple_door/resin, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"ctg" = ( +/obj/item/organ/internal/liver, +/obj/random/trash, +/turf/simulated/floor, +/area/space) +"ctq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"ctI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"ctJ" = ( +/turf/simulated/floor/wood/sif, +/area/space) +"cuj" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/turf/simulated/floor/wood/sif, +/area/space) +"cuk" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"cul" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"cuq" = ( +/mob/living/simple_mob/animal/space/alien, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"cur" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"cuG" = ( +/obj/structure/cable{ + d1 = 5; + d2 = 8; + icon_state = "5-8" + }, +/turf/simulated/floor/plating, +/area/space) +"cvk" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/floor/plating/external, +/area/space) +"cvJ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cvP" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"cvU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, +/area/space) +"cwk" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_3" + }, +/turf/simulated/floor/tiled, +/area/space) +"cwQ" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"cxb" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"cxs" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"czu" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/vending/wallmed1/public{ + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"cAh" = ( +/obj/structure/cliff/automatic{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"cAO" = ( +/obj/machinery/exonet_node/map, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"cBF" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cBO" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"cBP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cBT" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/closet/jcloset, +/obj/item/weapon/mop, +/obj/structure/mopbucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"cDi" = ( +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"cDV" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cEh" = ( +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"cFp" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/reddouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"cFu" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"cFJ" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"cGd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"cGm" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/engivend{ + pixel_x = -1 + }, +/turf/simulated/floor/plating, +/area/space) +"cGA" = ( +/obj/machinery/computer/timeclock/premade/north, +/turf/simulated/floor/tiled, +/area/space) +"cHc" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"cHe" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/tool{ + pixel_x = -1 + }, +/turf/simulated/floor/plating, +/area/space) +"cHi" = ( +/obj/structure/sign/warning/engineering_access, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"cHS" = ( +/obj/machinery/door/airlock/angled_tgmc/secure{ + dir = 4; + name = "Kodiak Airlock" + }, +/obj/structure/fans/hardlight, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating/eris/under, +/area/space) +"cIh" = ( +/obj/structure/sign/atmos, +/turf/simulated/wall, +/area/space) +"cIj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/double/glass/medical{ + name = "Triage Center" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cIw" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi, +/obj/structure/prop/alien/computer/camera{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cII" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 9; + icon_state = "2-9" + }, +/turf/simulated/floor/plating, +/area/space) +"cIU" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cJl" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/template_noop, +/area/space) +"cJU" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/mime, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"cJW" = ( +/turf/simulated/mineral/alt{ + light_color = "white" + }, +/area/space) +"cKN" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"cKS" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/kitchenspike, +/obj/effect/rune, +/turf/simulated/floor, +/area/space) +"cLg" = ( +/obj/structure/closet/crate/large, +/obj/fiftyspawner/steel, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"cLN" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/purple, +/area/space) +"cLR" = ( +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"cLY" = ( +/obj/structure/table/alien, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"cME" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"cNb" = ( +/obj/effect/floor_decal/industrial/danger/full, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"cNe" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "overclocked" + }, +/turf/simulated/floor/tiled, +/area/space) +"cNW" = ( +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Portside Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"cOn" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"cPm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cPu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"cPC" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"cPQ" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cQa" = ( +/obj/structure/disposalpipe/sortjunction/wildcard{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"cQU" = ( +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "ID-Mart" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cRm" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8"; + dir = 1 + }, +/obj/structure/frame, +/turf/simulated/floor/bluegrid, +/area/space) +"cRJ" = ( +/obj/random, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"cSp" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"cSr" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/gorefloor2, +/area/space) +"cTj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cTs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cTy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room4"; + name = "Room 4 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"cTz" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/turf/simulated/floor, +/area/space) +"cTZ" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"cUb" = ( +/obj/machinery/power/supermatter/shard, +/turf/simulated/floor/greengrid/nitrogen, +/area/space) +"cUd" = ( +/obj/machinery/gear_dispenser/suit_old, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"cUm" = ( +/obj/effect/alien/weeds/node, +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor, +/area/space) +"cUU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"cVb" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"cVE" = ( +/obj/effect/floor_decal/techfloor, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/structure/closet/alien, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"cWi" = ( +/obj/structure/curtain/open/privacy, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"cWp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/effect/shuttle_landmark{ + base_area = /area/expoutpost/hangartwo; + base_turf = /turf/simulated/floor/reinforced; + landmark_tag = "stargazer_dock"; + name = "Stargazer Dock" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"cWA" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_2" + }, +/turf/simulated/floor/tiled, +/area/space) +"cWQ" = ( +/obj/structure/table/gamblingtable, +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"cXI" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"cXN" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/wood, +/area/space) +"cXZ" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/purple, +/obj/item/device/gps/computer{ + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"cYI" = ( +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating/external, +/area/space) +"cYV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"cYY" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cZb" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/pirate, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/wood, +/area/space) +"cZd" = ( +/obj/structure/bed/alien, +/obj/effect/decal/remains/xeno, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"cZr" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"cZz" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = 2; + pixel_y = 17 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"cZV" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "SP-kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"daa" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/uranium, +/obj/item/stack/material/phoron{ + amount = 5; + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/stack/material/gold{ + amount = 5 + }, +/obj/item/stack/material/diamond, +/obj/item/stack/material/silver{ + amount = 5; + pixel_x = 2; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"dag" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "garbagethree" + }, +/turf/simulated/floor, +/area/space) +"dan" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/space) +"daq" = ( +/obj/structure/table/alien/blue, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/weapon/surgical/retractor/alien, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"daF" = ( +/obj/machinery/sleeper{ + dir = 4; + emagged = 1; + initial_bin_rating = 4 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"dbd" = ( +/obj/fiftyspawner/steel, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dbD" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/space) +"dcm" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/mecha_equipment/cloak, +/obj/item/mecha_parts/mecha_equipment/tool/jetpack, +/obj/item/mecha_parts/mecha_equipment/tool/passenger, +/turf/simulated/floor/plating/external, +/area/space) +"ddf" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"ddx" = ( +/obj/structure/disposalpipe/broken{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"ddS" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Bathroom" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"dee" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/wall/rshull, +/area/space) +"del" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/space) +"deA" = ( +/obj/item/debris_pack, +/turf/template_noop, +/area/space) +"dfu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"dfH" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/table/steel_reinforced, +/obj/fiftyspawner/glass{ + pixel_y = -5 + }, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20; + pixel_y = 5 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/turf/simulated/floor/plating, +/area/space) +"diH" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"diN" = ( +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"djA" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"djF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"djK" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"djR" = ( +/obj/machinery/door/airlock/alien/blue/public, +/obj/machinery/door/blast/puzzle{ + checkrange_mult = 3; + dir = 4; + layer = 3.3; + name = "Blast Door"; + open_layer = 3.3 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dkf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"dkj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"dks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Starboard Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"dkE" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumnorth" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dlg" = ( +/obj/effect/graffitispawner, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dlQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dmh" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"dmp" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dmw" = ( +/turf/template_noop, +/area/awaymission/snowfield/outside) +"dmQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + name = "Atmospherics" + }, +/turf/simulated/floor, +/area/space) +"dmR" = ( +/obj/structure/sign/directions, +/turf/simulated/wall, +/area/space) +"dmW" = ( +/obj/structure/filingcabinet/medical, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"dmY" = ( +/obj/random/trash, +/turf/simulated/shuttle/floor/alien, +/area/space) +"dnc" = ( +/obj/effect/spider/spiderling/stunted, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dnj" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dnn" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/machinery/shield_diffuser, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"dnC" = ( +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/space) +"dnJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = -9 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"doo" = ( +/turf/simulated/floor/greengrid/nitrogen, +/area/space) +"dox" = ( +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"doA" = ( +/obj/machinery/door/airlock/alien/blue/public, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"doB" = ( +/obj/random/trash, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"doE" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"doG" = ( +/obj/machinery/conveyor, +/obj/structure/sign/poster/nanotrasen{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/shuttle/plating, +/area/space) +"doN" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"doZ" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/power/emitter, +/turf/simulated/floor/plating, +/area/space) +"dpo" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"dpX" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/FixOVein/alien, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"dqi" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/space) +"dqt" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"dqu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 10; + icon_state = "1-10" + }, +/turf/simulated/floor/plating, +/area/space) +"dqQ" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"dqR" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "echidna_pump" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/closet/walllocker_double/hydrant/south, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "echidna_sensor"; + pixel_x = -25; + pixel_y = -1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"drO" = ( +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/space) +"drY" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"dsy" = ( +/obj/vehicle/boat/dragon/sifwood{ + dir = 8 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"dsS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, +/area/space) +"dsX" = ( +/obj/structure/transit_tube_pod{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dsZ" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/space) +"dth" = ( +/obj/effect/temporary_effect/pulse/agonizing_sphere, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dtk" = ( +/obj/machinery/atmospherics/pipe/tank/phoron, +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"dto" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating, +/area/space) +"dtx" = ( +/obj/structure/flora/pumpkin/carved/scream, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dtM" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"dut" = ( +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"duG" = ( +/obj/mecha/working/hoverpod/shuttlecraft, +/turf/template_noop, +/area/space) +"duQ" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dvB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/space) +"dvD" = ( +/obj/machinery/light/poi, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dvM" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/autopsy_scanner, +/obj/item/weapon/surgical/FixOVein/alien{ + pixel_y = -2 + }, +/obj/item/weapon/surgical/surgicaldrill/alien{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"dvT" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/wood, +/area/space) +"dvV" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "12" + }, +/turf/template_noop, +/area/space) +"dwg" = ( +/obj/structure/tubes, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"dwF" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"dwW" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/hemostat/alien, +/obj/item/weapon/surgical/cautery/alien{ + pixel_y = -6 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"dxB" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"dxP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dxY" = ( +/obj/machinery/computer{ + dir = 1 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"dyd" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor, +/area/space) +"dyx" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"dyT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"dzi" = ( +/turf/simulated/floor/lava, +/area/space) +"dzH" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dzI" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"dzU" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 5; + icon_state = "32-5" + }, +/turf/simulated/floor/plating, +/area/space) +"dAc" = ( +/obj/machinery/mineral/processing_unit_console, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"dBb" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"dBn" = ( +/obj/machinery/door/airlock/alien{ + id_tag = "abdorm1"; + name = "Dorm 1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dBz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"dBX" = ( +/obj/machinery/vending/wallmed1{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/space) +"dBZ" = ( +/obj/machinery/door/airlock/maintenance/common, +/obj/item/tape/engineering, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"dCf" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/device/perfect_tele, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"dCn" = ( +/obj/machinery/vending/loadout/uniform, +/turf/template_noop, +/area/space) +"dCA" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dDJ" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/purpledouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"dDU" = ( +/obj/machinery/computer/ship/engines, +/turf/simulated/shuttle/floor/black, +/area/space) +"dEg" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/lava, +/area/space) +"dEl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Starboard Upper Thruster One" + }, +/turf/simulated/floor, +/area/space) +"dEB" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"dEZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/space) +"dGF" = ( +/turf/simulated/shuttle/wall/no_join{ + base_state = "orange"; + icon = 'icons/turf/shuttle_orange.dmi'; + icon_state = "orange" + }, +/area/space) +"dGK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"dHc" = ( +/obj/mecha/combat/gygax/serenity, +/turf/template_noop, +/area/space) +"dHx" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"dHF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dIp" = ( +/obj/machinery/vending/event/loadout_misc, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dIQ" = ( +/obj/effect/fancy_shuttle/wagon, +/turf/template_noop, +/area/space) +"dIT" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"dIY" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"dJr" = ( +/obj/machinery/light/spot, +/obj/structure/hull_corner, +/turf/template_noop, +/area/space) +"dJN" = ( +/turf/simulated/floor/gorefloor2, +/area/space) +"dJU" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "engine_access_hatch"; + locked = 1; + req_access = list(11) + }, +/turf/simulated/floor, +/area/space) +"dKh" = ( +/turf/simulated/wall/resin, +/area/space) +"dKz" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "35" + }, +/turf/template_noop, +/area/space) +"dKP" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"dLe" = ( +/obj/machinery/vending/cigarette{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dLp" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 4; + pixel_x = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"dLO" = ( +/obj/machinery/appliance/cooker/grill, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"dLQ" = ( +/obj/machinery/door/window/northright{ + name = "Server Room"; + req_access = null + }, +/obj/machinery/door/window/southleft{ + name = "Server Room"; + req_access = null + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"dLY" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"dMe" = ( +/obj/machinery/door/blast/puzzle, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dMg" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/ntnet_relay, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/space) +"dMi" = ( +/obj/structure/loot_pile/surface/alien, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dMl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/space) +"dMq" = ( +/obj/machinery/teleport/hub, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dMs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/space) +"dMv" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/stripper_pole{ + pixel_y = 9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/item/clothing/under/swimsuit/stripper/mankini{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/space) +"dMD" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"dMQ" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"dMS" = ( +/obj/machinery/door/airlock/alien{ + name = "Atrium-Brig"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dNH" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/space) +"dOK" = ( +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/space) +"dPh" = ( +/obj/structure/closet/secure_closet, +/turf/simulated/floor/tiled, +/area/space) +"dPi" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"dPl" = ( +/obj/structure/shuttle/window, +/turf/template_noop, +/area/space) +"dPA" = ( +/obj/structure/prop/alien/computer/camera, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dPL" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 6"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"dPW" = ( +/obj/structure/largecrate/vehicle/quadtrailer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dQp" = ( +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"dQP" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/space) +"dQQ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"dQS" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dQZ" = ( +/obj/structure/closet/secure_closet/engineering_welding{ + req_access = null + }, +/obj/item/weapon/storage/belt/utility, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dRe" = ( +/obj/structure/prop/alien/computer/hybrid, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"dRB" = ( +/obj/structure/table/darkglass, +/obj/item/toy/bouquet, +/obj/machinery/button/remote/airlock{ + id = "abdorm6"; + name = "Door Lock Control"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"dRK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/map_effect/interval/sound_emitter/ballistic_gunfight, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dSQ" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/thermoregulator, +/turf/simulated/floor/plating, +/area/space) +"dSX" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "10" + }, +/turf/template_noop, +/area/space) +"dTe" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"dTV" = ( +/turf/simulated/shuttle/wall/hard_corner, +/area/space) +"dTY" = ( +/obj/structure/salvageable/computer, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dUx" = ( +/obj/structure/smoleruins, +/turf/template_noop, +/area/space) +"dUz" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"dUD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"dUN" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dUT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"dVg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, +/area/space) +"dVo" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/catwalk_plated/techfloor, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"dWb" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"dWi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"dWj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/vending/medical{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"dWq" = ( +/obj/effect/alien/weeds, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor, +/area/space) +"dWx" = ( +/obj/effect/map_effect/beam_point/instant/electric, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"dWz" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/structure/closet/walllocker_double/hydrant/east, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dWD" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/carpet/blue, +/area/space) +"dXi" = ( +/obj/machinery/power/smes/buildable, +/turf/simulated/floor/plating, +/area/space) +"dXo" = ( +/obj/machinery/r_n_d/server/core, +/obj/machinery/light/small, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"dXH" = ( +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/turf/simulated/floor, +/area/space) +"dYj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/space) +"dYw" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"dYM" = ( +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor, +/area/space) +"dZb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 9; + icon_state = "4-9" + }, +/turf/simulated/floor/plating, +/area/space) +"dZD" = ( +/obj/machinery/vending/tool{ + emagged = 1; + req_log_access = null + }, +/turf/simulated/floor/plating, +/area/space) +"dZU" = ( +/obj/item/stack/flag/blue, +/turf/template_noop, +/area/space) +"eac" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"eai" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"eax" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"ebI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/closet/walllocker_double/kitchen/north, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "echidna_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"ebS" = ( +/obj/machinery/power/smes/batteryrack, +/turf/simulated/floor/plating, +/area/space) +"ech" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Captain's Quarters"; + id_tag = "Avalon-captainsquarters" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eck" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eda" = ( +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"edb" = ( +/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ + desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; + name = "alien admiral's medal" + }, +/obj/item/weapon/telecube/precursor/mated/zone, +/obj/item/clothing/head/helmet/alien/tank, +/obj/structure/table/alien, +/obj/item/stack/material/glass/plastitanium{ + amount = 20 + }, +/turf/simulated/floor/greengrid, +/area/space) +"edu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "dressroom"; + pixel_y = 31 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"eed" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eeF" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/effect/floor_decal/techfloor/hole/right, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eeP" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/turf/simulated/floor/carpet/blue, +/area/space) +"eeQ" = ( +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eeR" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/sugar, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/space) +"eeU" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"egc" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker/south, +/turf/simulated/shuttle/floor/black, +/area/space) +"egj" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"egr" = ( +/obj/machinery/computer/operating{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"egL" = ( +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = null + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/belt/utility, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ehi" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "echidna_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"ehL" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"eig" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ein" = ( +/obj/machinery/door/airlock/maintenance/sec{ + name = "Security Door" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"eiD" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eiP" = ( +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/tiled, +/area/space) +"eiR" = ( +/obj/machinery/vending/snack{ + dir = 4; + pixel_x = -6 + }, +/turf/simulated/floor/wood, +/area/space) +"eiX" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"ejg" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ejG" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/item/weapon/material/shard/phoron, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ekn" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "needle_outer"; + locked = 1; + name = "External Access" + }, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "needle"; + name = "exterior access button"; + pixel_y = 26 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ekw" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"ekE" = ( +/obj/effect/temporary_effect/pulse/staticshock, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"elb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"elF" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/gorefloor2, +/area/space) +"elN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"emt" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"end" = ( +/obj/structure/plasticflaps/mining, +/turf/simulated/floor/cult{ + icon_state = "cult-narsie" + }, +/area/space) +"enk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"enp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"enu" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/vending/emergencyfood/filled, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"enz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/telecomms/allinone, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/bluegrid, +/area/space) +"epd" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/template_noop, +/area/space) +"epl" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee, +/turf/simulated/floor/greengrid, +/area/space) +"epV" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/gootrap{ + basecolor = #610B0B; + desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; + name = "Spill of fear" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"epX" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"eqm" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eqG" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/structure/curtain/open/privacy, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"eqT" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"erc" = ( +/obj/machinery/media/jukebox, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"erz" = ( +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/black/bordercorner, +/turf/simulated/floor/tiled, +/area/space) +"erQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"esv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"esW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"etm" = ( +/obj/structure/disposalpipe/tagger{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"etr" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 12 + }, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "Avalon-kitchen"; + layer = 3.3; + name = "Avalon Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"eua" = ( +/obj/item/weapon/shovel, +/obj/item/weapon/tool/wrench, +/obj/item/weapon/pickaxe, +/obj/item/weapon/tool/crowbar, +/obj/item/stack/flag/yellow{ + pixel_x = 4 + }, +/obj/item/stack/flag/red, +/obj/item/stack/flag/green{ + pixel_x = -4 + }, +/obj/structure/table/rack/shelf/steel, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/item/device/gps/mining{ + pixel_x = -5 + }, +/obj/item/device/gps/mining{ + pixel_x = 5 + }, +/obj/item/weapon/storage/belt/utility/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"eub" = ( +/obj/structure/prop/rock/crystal, +/turf/template_noop, +/area/space) +"euK" = ( +/obj/effect/meteor/dust, +/turf/template_noop, +/area/space) +"evn" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"evB" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"evJ" = ( +/obj/structure/transit_tube{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ewi" = ( +/obj/structure/largecrate/animal/wolfgirl, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"ewr" = ( +/obj/structure/grille/cult, +/turf/simulated/floor/cult, +/area/space) +"ews" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"ewt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Portside Upper Thruster One" + }, +/turf/simulated/floor, +/area/space) +"ewS" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"exU" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eyi" = ( +/obj/structure/table/standard, +/obj/item/weapon/deck/holder, +/turf/simulated/floor/tiled/dark, +/area/space) +"eyP" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"eyY" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + name = "Atmospherics" + }, +/turf/simulated/floor, +/area/space) +"ezb" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + pixel_y = -26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"ezR" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor, +/area/space) +"eAa" = ( +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/floor/tiled, +/area/space) +"eAc" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/effect/alien/weeds, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/engineering, +/obj/random/plushie, +/obj/item/organ/internal/augment/armmounted, +/obj/item/organ/internal/intestine, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"eBp" = ( +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Station Gym" + }, +/turf/simulated/floor/tiled, +/area/space) +"eBC" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "29" + }, +/turf/template_noop, +/area/space) +"eBD" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "needle_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "needle"; + pixel_y = 26; + tag_airpump = "needle_pump"; + tag_chamber_sensor = "needle_sensor"; + tag_exterior_door = "needle_outer"; + tag_interior_door = "needle_inner" + }, +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"eBO" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "atriumwest" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eBV" = ( +/obj/machinery/computer/transhuman/resleeving/abductor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"eCg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eCi" = ( +/obj/structure/table/bench/glass, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/fuzzy, +/turf/simulated/floor/wood, +/area/space) +"eCj" = ( +/turf/simulated/floor/carpet/tealcarpet, +/area/space) +"eDL" = ( +/obj/machinery/door/airlock/alien{ + name = "Dorm'n'Engine"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eEh" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"eEj" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"eEz" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eEG" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"eEH" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"eEO" = ( +/obj/structure/cable{ + d2 = 10; + icon_state = "6-10"; + d1 = 6 + }, +/turf/simulated/floor/plating, +/area/space) +"eFc" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"eFg" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"eFo" = ( +/obj/machinery/door/airlock/alien{ + name = "Disposals"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eFs" = ( +/obj/item/prop/alien/junk, +/turf/simulated/shuttle/floor/alien, +/area/space) +"eFH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/double/glass/common{ + dir = 8; + name = "Cryogenics" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eFQ" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eFW" = ( +/obj/machinery/porta_turret/stationary/syndie, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eGe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"eGE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"eGJ" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"eHc" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/item/weapon/material/shard/phoron, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eIg" = ( +/obj/structure/ledge{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eIv" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"eID" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eJe" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"eJw" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor, +/area/space) +"eJL" = ( +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = -4 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"eJV" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"eKu" = ( +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/wall/hard_corner, +/area/space) +"eKV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eLT" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"eLX" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"eMj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"eMw" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"eMD" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eMJ" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/plastitanium, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"eML" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/floor/gorefloor2, +/area/space) +"eMP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Primary Storage" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eNo" = ( +/obj/structure/window/plastitanium/full, +/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/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"eNv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"eOs" = ( +/obj/structure/bed/double/padded, +/obj/structure/curtain/bed, +/obj/item/weapon/bedsheet/hosdouble, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/space) +"eOw" = ( +/obj/structure/undies_wardrobe, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"eOT" = ( +/obj/machinery/flasher{ + id = "slavecell2"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eOX" = ( +/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"ePd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"ePC" = ( +/mob/living/simple_mob/animal/space/alien/sentinel, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"ePP" = ( +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/template_noop, +/area/space) +"ePV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 9; + icon_state = "1-9" + }, +/turf/simulated/floor/plating, +/area/space) +"eQa" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"eQg" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/weapon/book/manual/chef_recipes, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"eQk" = ( +/obj/item/device/gps/internal/poi, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eQp" = ( +/obj/structure/cult/forge, +/turf/simulated/floor/cult, +/area/space) +"eQA" = ( +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"eQE" = ( +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/space) +"eRQ" = ( +/obj/effect/map_effect/radiation_emitter, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eRZ" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eSi" = ( +/obj/machinery/teleport/hub{ + emagged = 1 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"eSG" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"eSH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"eSW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/vending/medical{ + dir = 8; + emagged = 1; + pixel_x = -6; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"eTp" = ( +/obj/random/gun/random, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"eTw" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"eUc" = ( +/obj/structure/prop/alien/computer/camera/flipped, +/obj/structure/prop/alien/computer/camera/flipped, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eUj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/prop/alien/dispenser, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"eUH" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"eVl" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/weapon/tool/screwdriver/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"eVI" = ( +/obj/structure/prop/alien/computer/camera/flipped, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"eVL" = ( +/obj/machinery/computer/ship/sensors, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"eWA" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "34" + }, +/turf/template_noop, +/area/space) +"eWO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 10; + icon_state = "4-10" + }, +/turf/simulated/floor/plating, +/area/space) +"eXd" = ( +/obj/vehicle/train/engine{ + dir = 2 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"eYd" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor, +/area/space) +"eYy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/space) +"eYV" = ( +/obj/effect/alien/weeds, +/obj/structure/prop/transmitter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"eZe" = ( +/obj/structure/cult/talisman, +/obj/effect/map_effect/interval/sound_emitter/geiger/med, +/turf/simulated/floor/cult, +/area/space) +"eZk" = ( +/obj/machinery/pointdefense, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"eZp" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"fal" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"faA" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/phoronrglass, +/turf/simulated/floor, +/area/space) +"faH" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"faJ" = ( +/obj/machinery/the_singularitygen/tesla, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fcD" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fdb" = ( +/mob/living/simple_mob/mechanical/hivebot/tank, +/turf/template_noop, +/area/space) +"fdx" = ( +/obj/item/weapon/stool/baystool/padded, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"feM" = ( +/obj/machinery/door/airlock/vault, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"feU" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "ursula_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"feX" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"ffF" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ffW" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/flasher{ + id = "procroom2"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/cult, +/area/space) +"fgj" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/rddouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"fgs" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fgG" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/random/maintenance/engineering, +/obj/effect/floor_decal/industrial/warning, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"fhh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"fhr" = ( +/obj/structure/table, +/obj/effect/alien/weeds, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor, +/area/space) +"fhv" = ( +/obj/structure/prop/alien/dispenser, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fhD" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fit" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"fiP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room2"; + name = "Room 2 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"fjf" = ( +/obj/structure/bed/chair/bay/chair/padded/black, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fjP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fjT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 9 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"fjX" = ( +/obj/machinery/door/airlock/maintenance/rnd{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"fkd" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/loot_pile/mecha/phazon, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"fkf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fkl" = ( +/obj/structure/flora/lily1, +/turf/simulated/floor/beach/water, +/area/space) +"fky" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod) +"fkA" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"fkI" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fld" = ( +/obj/machinery/power/supermatter/shard{ + color = "red"; + simulated = 0 + }, +/turf/simulated/floor/gorefloor2, +/area/space) +"flk" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + icon_state = "door_locked"; + id_tag = "needle_hatch"; + locked = 1; + name = "shuttle side hatch" + }, +/obj/machinery/button/remote/airlock{ + id = "needle_hatch"; + name = "Side Hatch Control"; + pixel_y = -26; + specialfunctions = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"fll" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "22" + }, +/turf/template_noop, +/area/space) +"flr" = ( +/obj/structure/table/alien, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"flt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"flw" = ( +/obj/machinery/computer/arcade, +/turf/simulated/floor/tiled/dark, +/area/space) +"flB" = ( +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/turf/simulated/floor/plating/external, +/area/space) +"flC" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/orange, +/obj/machinery/flasher{ + id = "permflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/wood, +/area/space) +"flP" = ( +/obj/structure/fans/hardlight/colorable/abductor, +/obj/machinery/door/airlock/alien{ + name = "External Airlock"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"fmx" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"fmD" = ( +/obj/item/weapon/cell/super/empty, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fmG" = ( +/obj/effect/alien/weeds, +/obj/effect/gibspawner/human, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"fmU" = ( +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"fnm" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor, +/area/space) +"fnt" = ( +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Translocate-R-US" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fnM" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"fnU" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"foz" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/light, +/turf/simulated/shuttle/plating, +/area/space) +"foY" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/shuttle/plating, +/area/space) +"fpe" = ( +/obj/machinery/vending/tool{ + dir = 4; + pixel_x = 5 + }, +/turf/template_noop, +/area/space) +"fpl" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"fqa" = ( +/obj/structure/transit_tube/station, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fqB" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood, +/area/space) +"fry" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/flasher{ + id = "exaroom2"; + name = "Floor mounted flash" + }, +/turf/simulated/floor, +/area/space) +"frQ" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/prop/alien/computer/hybrid, +/turf/simulated/floor, +/area/space) +"frR" = ( +/turf/unsimulated/fake_space, +/area/space) +"fsl" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fsu" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fsy" = ( +/obj/structure/salvageable/server, +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"fsS" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"ftd" = ( +/obj/machinery/door/airlock/glass_centcom, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"ftq" = ( +/obj/machinery/computer/ship/sensors, +/turf/simulated/shuttle/floor/black, +/area/space) +"ftr" = ( +/obj/mecha/combat/fighter/pinnace{ + dir = 8 + }, +/obj/machinery/mech_recharger{ + icon = 'icons/turf/shuttle_alien_blue.dmi' + }, +/turf/simulated/floor/reinforced, +/area/space) +"fue" = ( +/obj/structure/table/standard, +/obj/item/toy/eight_ball, +/obj/item/toy/tennis/red, +/turf/simulated/floor/wood, +/area/space) +"fuq" = ( +/obj/structure/bed/chair/bay/chair/padded/red, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fuJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fuL" = ( +/obj/structure/table/alien/blue, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/weapon/surgical/retractor/alien, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"fuP" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"fvh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fvA" = ( +/obj/structure/table/alien, +/obj/item/weapon/packageWrap, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"fvG" = ( +/obj/structure/prop/alien/dispenser, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fvJ" = ( +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 9 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"fvW" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"fwf" = ( +/obj/machinery/door/airlock/alien{ + name = "Left-Wing Thrusters MK-2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"fwj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fwZ" = ( +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"fxo" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fxp" = ( +/turf/simulated/shuttle/floor/yellow, +/area/space) +"fxI" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"fyh" = ( +/obj/structure/safe/floor, +/turf/template_noop, +/area/space) +"fyO" = ( +/obj/item/weapon/gun/energy/ionrifle, +/obj/item/weapon/gun/energy/modular/carbine, +/obj/item/weapon/gun/energy/pummeler, +/obj/item/weapon/gun/energy/taser, +/obj/machinery/light, +/obj/item/weapon/cell/device/super, +/obj/item/weapon/cell/device/super, +/obj/item/weapon/cell/device/super, +/obj/item/weapon/cell/device/super, +/obj/structure/closet/secure_closet/guncabinet{ + req_one_access = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fzd" = ( +/obj/machinery/computer/ship/navigation{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"fzg" = ( +/obj/structure/sign/science{ + pixel_x = 32 + }, +/turf/template_noop, +/area/space) +"fzh" = ( +/obj/structure/table/fancyblack, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/starcaster_news, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"fzk" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_cycler{ + departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control","Exploration","Pilot Blue","Pilot"); + locked = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fAo" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"fBi" = ( +/mob/living/simple_mob/vore/demon/wendigo{ + faction = "cult" + }, +/turf/simulated/floor/gorefloor2, +/area/space) +"fBU" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/floodlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fCv" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"fCI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fCX" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fCZ" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"fDi" = ( +/obj/structure/ship_munition/disperser_charge/fire, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fDm" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"fDG" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fEj" = ( +/obj/effect/meteor/emp, +/turf/template_noop, +/area/space) +"fED" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fFj" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"fFq" = ( +/obj/machinery/computer/security/abductor{ + icon_screen = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fFC" = ( +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/obj/machinery/telecomms/receiver, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"fFO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "ursula"; + pixel_y = 26; + tag_airpump = "ursula_pump"; + tag_chamber_sensor = "ursula_sensor"; + tag_exterior_door = "ursula_outer"; + tag_interior_door = "ursula_inner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/plating, +/area/space) +"fFW" = ( +/obj/structure/girder/reinforced, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"fGk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/floor/black, +/area/space) +"fGr" = ( +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fGs" = ( +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/closet/walllocker_double/medical/north, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/roller, +/turf/simulated/shuttle/floor/black, +/area/space) +"fGE" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"fGN" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "2" + }, +/turf/template_noop, +/area/template_noop) +"fGY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/wall/rshull, +/area/space) +"fHu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fId" = ( +/obj/structure/table/reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fIQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 8; + id_tag = "Avalon_engine_airlock_pump" + }, +/obj/machinery/airlock_sensor{ + pixel_x = 28; + id_tag = "Avalon_engine_airlock_sensor" + }, +/turf/simulated/floor/reinforced, +/area/space) +"fIZ" = ( +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"fJa" = ( +/obj/effect/map_effect/portal/line/side_b{ + dir = 1 + }, +/obj/effect/map_effect/perma_light/concentrated, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fJh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room1"; + name = "Room 1 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"fJt" = ( +/obj/structure/cryofeed{ + dir = 1; + pixel_y = -31 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fJA" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, +/area/space) +"fJU" = ( +/obj/structure/prop/alien/pod/open, +/obj/structure/prop/alien/pod/open, +/turf/simulated/shuttle/floor/alien, +/area/space) +"fJY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"fMv" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"fNC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"fOO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"fPf" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fPu" = ( +/obj/structure/closet/walllocker_double/hydrant/north, +/obj/machinery/recharger/wallcharger{ + pixel_x = -27; + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"fPL" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"fPP" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/space) +"fPU" = ( +/obj/machinery/atm{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/space) +"fQa" = ( +/obj/effect/map_effect/portal/line/side_a{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fQu" = ( +/obj/machinery/seed_extractor, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"fQE" = ( +/obj/machinery/computer/prisoner{ + dir = 4; + icon = 'icons/obj/abductor.dmi'; + icon_screen = null; + icon_state = "console-c"; + req_access = list(777) + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fRl" = ( +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/space) +"fRt" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/template_noop, +/area/space) +"fRT" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"fSo" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"fSx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Upper Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"fTk" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"fTF" = ( +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/space) +"fUp" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alien, +/area/space) +"fUG" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam5" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"fVe" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fVq" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "ursula_inner"; + locked = 1; + name = "Internal Access" + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "ursula"; + name = "interior access button"; + pixel_y = 26 + }, +/turf/simulated/shuttle/plating, +/area/space) +"fVx" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"fVz" = ( +/obj/item/device/nif/authentic, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"fVG" = ( +/obj/machinery/door/airlock/alien{ + name = "Cargo Airlock"; + req_one_access = list(777) + }, +/obj/structure/fans/hardlight/colorable/abductor, +/turf/simulated/floor, +/area/space) +"fWy" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/wood/sif, +/area/space) +"fWJ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"fWK" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"fXf" = ( +/obj/effect/mobblocker, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/space) +"fXK" = ( +/obj/machinery/artifact, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fYg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"fYl" = ( +/obj/structure/prop/alien/power, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"fYn" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/weapon/surgical/retractor/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"fZc" = ( +/turf/simulated/floor/wood, +/area/space) +"fZA" = ( +/obj/machinery/shower, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gaO" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/r_wall, +/area/space) +"gbd" = ( +/obj/machinery/computer/crew{ + dir = 1; + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gbn" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumnorth" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gbw" = ( +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"gbM" = ( +/obj/structure/fence/cut/medium, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"gcn" = ( +/obj/machinery/power/supermatter/shard, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gcq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/random/maintenance/engineering, +/turf/simulated/floor/plating/external, +/area/space) +"gcy" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gcK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gdf" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 10; + icon_state = "2-10" + }, +/turf/simulated/floor/plating, +/area/space) +"gdk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"gdH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"ged" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gep" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/bed/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"geV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gfe" = ( +/turf/simulated/shuttle/floor/purple, +/area/space) +"gfo" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/scalpel/ripper, +/obj/item/weapon/surgical/scalpel/manager, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"gfB" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/airless, +/area/space) +"gfC" = ( +/obj/structure/loot_pile/surface/alien/end, +/turf/simulated/floor/greengrid, +/area/space) +"ggJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"ggX" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"ghm" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/mint, +/obj/item/weapon/packageWrap, +/obj/item/weapon/reagent_containers/dropper, +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_x = -1; + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ghq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"ghO" = ( +/obj/machinery/computer/teleporter{ + dir = 2 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ghY" = ( +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/clean, +/obj/structure/closet/alien, +/obj/item/device/lightreplacer, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gic" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"gie" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam4" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gih" = ( +/turf/simulated/shuttle/wall/alien/hard_corner, +/area/space) +"gij" = ( +/obj/structure/bed/chair/bay/comfy/green{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"git" = ( +/turf/simulated/shuttle/wall, +/area/space) +"giA" = ( +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"giB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"giW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"gjA" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/structure/sign/poster/nanotrasen{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/shuttle/plating, +/area/space) +"gjU" = ( +/obj/machinery/light, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gkM" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"gkR" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/loot_pile/mecha/odysseus/murdysseus, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"gkT" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gkU" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/computer/crew{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"gle" = ( +/obj/random/outcrop, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gll" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/space) +"glu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/machinery/power/terminal, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"glz" = ( +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"glT" = ( +/obj/machinery/telepad, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gma" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/space) +"gmq" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/space) +"gmM" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"gmP" = ( +/obj/structure/catwalk, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"gmZ" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/wood/sif, +/area/space) +"gnj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"gnx" = ( +/obj/structure/cable{ + d2 = 5; + icon_state = "0-5" + }, +/turf/simulated/floor/plating, +/area/space) +"gog" = ( +/obj/effect/alien/weeds, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"goi" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"goo" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled, +/area/space) +"gov" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gpd" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gpg" = ( +/obj/machinery/teleport/station, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gpP" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/purple, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gpT" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"gpX" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"gqk" = ( +/obj/machinery/seed_storage/garden, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"gqp" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 3"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gqz" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/multitool, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/geiger, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/gloves/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"gqD" = ( +/obj/machinery/power/shield_generator/charged{ + field_radius = 8; + initial_shield_modes = 2153; + target_radius = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/plating, +/area/space) +"gqJ" = ( +/mob/living/simple_mob/animal/space/alien/sentinel, +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gqR" = ( +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, +/area/space) +"gqZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"grh" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating/external, +/area/space) +"grw" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/shuttle/floor/white, +/area/space) +"grO" = ( +/obj/machinery/teleport/hub, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"grX" = ( +/obj/structure/tubes, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gsu" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gsO" = ( +/obj/structure/closet, +/turf/simulated/floor/tiled, +/area/space) +"gtb" = ( +/obj/structure/sign/graffiti/pisoff, +/turf/simulated/floor/tiled, +/area/space) +"gtI" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/pizzavoucher, +/obj/item/toy/figure, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gtL" = ( +/obj/structure/cliff/automatic/corner{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"guh" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/space) +"gus" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"guK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gvy" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"gvL" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"gvO" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/space) +"gvR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"gvZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gwK" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/template_noop, +/area/space) +"gwS" = ( +/obj/machinery/computer/ship/navigation{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + desc = "Talk... listen through this."; + name = "Station Intercom (Brig Radio)"; + pixel_y = -21; + wires = 7 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gxr" = ( +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/white, +/area/space) +"gxx" = ( +/obj/structure/filingcabinet/security, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gxy" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"gyr" = ( +/turf/simulated/floor/airless, +/area/space) +"gyt" = ( +/turf/simulated/shuttle/wall/alien, +/area/space) +"gzp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"gzE" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_state = "dispenser"; + name = "Drug-Dispenser"; + req_access = list(777) + }, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/device/sleevemate, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"gzF" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/turf/simulated/shuttle/floor/white, +/area/space) +"gzR" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"gzV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor, +/area/space) +"gzZ" = ( +/turf/simulated/floor/carpet/blue, +/area/space) +"gAs" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain, +/obj/item/weapon/pen/chameleon, +/obj/item/device/gps/advanced/science, +/obj/machinery/button/remote/blast_door{ + id = "estrella_blast"; + name = "remote blast shielding control"; + pixel_x = -1; + pixel_y = -26 + }, +/turf/simulated/floor/wood, +/area/space) +"gAT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gBj" = ( +/obj/structure/hull_corner{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"gBz" = ( +/obj/machinery/bodyscanner, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"gBV" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/item/weapon/material/shard/phoron, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gCb" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "dorm_tint5" + }, +/obj/structure/window/reinforced/polarized{ + id = "sauna_tint2" + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/window/plastitanium, +/turf/simulated/floor/reinforced, +/area/space) +"gCf" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = -27; + pixel_y = -4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod) +"gCJ" = ( +/obj/item/weapon/mining_scanner, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/void/mining, +/obj/item/clothing/head/helmet/space/void/mining, +/obj/structure/table/rack/shelf/steel, +/obj/item/device/suit_cooling_unit, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gCK" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"gCR" = ( +/obj/effect/fancy_shuttle/escape, +/turf/template_noop, +/area/space) +"gCW" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"gDe" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "military autolathe" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"gDi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"gDx" = ( +/obj/item/weapon/bone/skull/unknown, +/turf/simulated/floor/lava, +/area/space) +"gEF" = ( +/obj/structure/simple_door/flock, +/turf/template_noop, +/area/space) +"gFa" = ( +/obj/structure/cable{ + d1 = 32; + icon_state = "32-1" + }, +/turf/simulated/floor/plating, +/area/space) +"gFp" = ( +/obj/machinery/conveyor_switch/oneway{ + convdir = -1; + id = "garbageone"; + name = "disposal coveyor" + }, +/turf/simulated/floor/cult, +/area/space) +"gFw" = ( +/obj/effect/map_effect/portal/line/side_a{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gFJ" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/wood/sif, +/obj/fiftyspawner/turcarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/marble, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/fiftyspawner/cardboard, +/obj/fiftyspawner/cardboard, +/turf/simulated/floor/plating, +/area/space) +"gFO" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gGj" = ( +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"gGu" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_x = 18; + pixel_y = -4; + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "Avalon-kitchen"; + layer = 3.3; + name = "Avalon Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"gGL" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "stargazer_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"gHn" = ( +/obj/structure/prop/alien/pod/open, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"gHr" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gHM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"gId" = ( +/obj/machinery/computer/ship/sensors{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"gIf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/bed/chair/bay/comfy/captain, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"gIk" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/implantpad, +/obj/item/weapon/implantpad, +/turf/simulated/floor/carpet, +/area/space) +"gIL" = ( +/obj/effect/alien/weeds, +/obj/structure/loot_pile/mecha/durand, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"gIW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/space) +"gIX" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"gJb" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gJq" = ( +/turf/simulated/floor/carpet, +/area/space) +"gJY" = ( +/obj/mecha/combat/fighter/baron{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"gKd" = ( +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"gKr" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"gLy" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blade/fountain, +/turf/simulated/floor/tiled/dark, +/area/space) +"gMt" = ( +/obj/machinery/mecha_part_fabricator, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"gNv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gNE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"gNI" = ( +/obj/effect/meteor/big, +/turf/template_noop, +/area/space) +"gNP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gNZ" = ( +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gOk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/mob/living/simple_mob/mechanical/hivebot/tank/meatshield, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gOm" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/shuttle/floor/purple, +/area/space) +"gOp" = ( +/mob/living/carbon/alien/diona{ + adult_name = "Schmeinkie"; + can_namepick_as_adult = 0; + desc = "An overfed diona nymph that looks weirdly like scrumbulous, currently has a hollocollar tagged 'Schmeinkie' on it"; + faction = "hivebot"; + health = 150; + maxHealth = 150; + name = "Schmeinkie"; + voice_name = "Schmeinkie" + }, +/turf/simulated/floor/greengrid, +/area/space) +"gOR" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"gOV" = ( +/obj/effect/fancy_shuttle/lifeboat2, +/turf/template_noop, +/area/space) +"gPh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"gPx" = ( +/obj/structure/table/alien/blue, +/turf/simulated/shuttle/floor/white, +/area/space) +"gPD" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"gPE" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"gPK" = ( +/obj/screen/alert/highpressure, +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"gPX" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"gQf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor/airless, +/area/space) +"gQt" = ( +/obj/structure/transit_tube_pod{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gQK" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/shuttle/plating, +/area/space) +"gRd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gRp" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/turf/simulated/floor, +/area/space) +"gRz" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/flasher{ + id = "exaroom6"; + name = "Floor mounted flash" + }, +/turf/simulated/floor, +/area/space) +"gSa" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/device/sleevemate, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gSl" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumbath" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"gSJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gTh" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/space) +"gTn" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/flame/lighter/random{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/flame/lighter/random, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"gTC" = ( +/obj/structure/bed/chair/bay/comfy, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-boardroom"; + name = "Avalon Boardroom Blast Doors Control"; + pixel_y = 24; + req_access = list(28); + pixel_x = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"gTR" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"gUc" = ( +/obj/machinery/disperser/front, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gUh" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_2" + }, +/turf/simulated/floor/tiled, +/area/space) +"gUt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"gUE" = ( +/obj/machinery/button/remote/airlock{ + id = "abdorm1"; + name = "Door Lock Control"; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"gUI" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"gUV" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"gWg" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"gWt" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = -32 + }, +/turf/template_noop, +/area/space) +"gWJ" = ( +/obj/effect/map_effect/interval/sound_emitter, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"gWK" = ( +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"gXy" = ( +/obj/machinery/vending/wallmed1{ + name = "NanoMed Wall"; + pixel_x = 25 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/storage/quickdraw/syringe_case, +/obj/item/weapon/storage/quickdraw/syringe_case, +/turf/simulated/shuttle/floor/white, +/area/space) +"gXK" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/step_trigger/message{ + message = "You feel a horrible chill run up your spine. . . you really should not continue. . ."; + once = 0 + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"gYa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"gYn" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "15" + }, +/turf/template_noop, +/area/template_noop) +"gZa" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"gZg" = ( +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"gZR" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable/green, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"gZZ" = ( +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "echidna"; + name = "interior access button"; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/plating, +/area/space) +"haj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"haI" = ( +/obj/machinery/power/apc/alarms_hidden{ + pixel_y = -20 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"haV" = ( +/obj/structure/flora/pottedplant/mysterious, +/turf/simulated/floor/wood/sif, +/area/space) +"haW" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hbc" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"hbn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"hbq" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"hbA" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/toilet/prison{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"hbL" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-singularity"; + name = "Avalon Singularity Blast Doors Control"; + req_access = list(28); + pixel_x = -27 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hbQ" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hcd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hcs" = ( +/obj/structure/lattice, +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"hcx" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hcC" = ( +/mob/living/simple_mob/animal/space/alien/drone, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"hdl" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "9" + }, +/turf/template_noop, +/area/space) +"hdF" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"hdU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"hei" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/map_effect/interval/sound_emitter/geiger/high, +/obj/effect/map_effect/interval/sound_emitter/thunder, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"heD" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored, +/turf/simulated/shuttle/floor/alien, +/area/space) +"heQ" = ( +/obj/fire, +/turf/simulated/floor/gorefloor, +/area/space) +"heV" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"hfh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Starboard Upper Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"hfm" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + name = "Atmospherics" + }, +/turf/simulated/floor, +/area/space) +"hfy" = ( +/obj/machinery/transhuman/resleever/abductor{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hfB" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/obj/machinery/cell_charger{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/machinery/recharger{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/item/weapon/reagent_containers/food/drinks/jar{ + pixel_x = 10; + pixel_y = 12 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hgc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"hgh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Starboard Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"hgq" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/plating, +/area/space) +"hgu" = ( +/obj/structure/loot_pile/surface/alien/security, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hgL" = ( +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/tiled/white, +/area/space) +"hgQ" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"hhj" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"hhy" = ( +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/space) +"hhG" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"hih" = ( +/obj/structure/lattice, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"hiB" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"hiI" = ( +/obj/machinery/iv_drip, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"hjd" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hjx" = ( +/obj/structure/table/alien/blue, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/clothing/suit/armor/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hjN" = ( +/obj/structure/table/alien/blue, +/obj/item/prop/alien/junk, +/obj/item/weapon/telecube/precursor/mated/mirrorcolor, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"hks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/airless, +/area/space) +"hkS" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating/external, +/area/space) +"hkY" = ( +/turf/simulated/floor/tiled, +/area/space) +"hln" = ( +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = null + }, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating/external, +/area/space) +"hlt" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"hlF" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Starboard Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"hlZ" = ( +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_y = 22 + }, +/obj/structure/table/marble, +/obj/item/weapon/clipboard, +/obj/item/toy/figure/bartender, +/obj/item/weapon/storage/fancy/cigar/havana, +/obj/item/weapon/storage/fancy/cigar/cohiba, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hmn" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"hms" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid{ + pixel_y = -7 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid{ + pixel_y = 7 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/structure/table/alien/blue, +/turf/simulated/shuttle/floor/alien, +/area/space) +"hnE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hnJ" = ( +/obj/effect/alien/weeds, +/obj/effect/landmark/loot_spawn, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"hnQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/flasher{ + id = "teleroom2"; + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hoX" = ( +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"hpa" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/item/modular_computer/laptop/preset/custom_loadout/cheap{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/pizzavoucher, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hpj" = ( +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 8 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"hpn" = ( +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hpt" = ( +/obj/structure/fans/hardlight/colorable/abductor, +/obj/machinery/door/airlock/alien{ + name = "Cargo Airlock"; + req_one_access = list(777) + }, +/turf/simulated/floor, +/area/space) +"hpQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"hqe" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/space) +"hqf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hqi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hqH" = ( +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/mech_recharger, +/turf/simulated/shuttle/plating, +/area/space) +"hqV" = ( +/obj/structure/closet/secure_closet/miner{ + locked = 0 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hrg" = ( +/obj/machinery/sleep_console, +/obj/structure/sign/nosmoking_1{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"hrv" = ( +/obj/structure/sign/double/maltesefalcon/left, +/turf/simulated/wall, +/area/space) +"hrI" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/button/flasher{ + id = "exaroom3"; + pixel_y = -31 + }, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hrQ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/template_noop, +/area/space) +"hrR" = ( +/obj/machinery/doppler_array, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hsZ" = ( +/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"htn" = ( +/obj/structure/cryofeed, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"hty" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/vending/wallmed1/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"huH" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"huK" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hvp" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"hvv" = ( +/obj/effect/landmark/carved_pumpkin_spawn, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hvx" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/structure/railing/grey, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"hvK" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"hvT" = ( +/obj/machinery/porta_turret/alien{ + faction = "hivebot" + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"hwy" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 8; + pixel_x = -6 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"hwQ" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"hxr" = ( +/obj/item/weapon/broken_gun, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hxu" = ( +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/wood, +/area/space) +"hxw" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"hxA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"hxD" = ( +/obj/structure/table/darkglass, +/obj/machinery/computer/med_data/laptop, +/turf/simulated/floor/wood/sif, +/area/space) +"hxR" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/item/prop/alien/junk, +/obj/item/device/perfect_tele/alien/bluefo, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hxV" = ( +/obj/machinery/door/airlock/alien/blue/locked, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"hyc" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hyj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/fireaxecabinet{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hyu" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"hyL" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"hyM" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"hzE" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"hAy" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"hAD" = ( +/obj/structure/prop/alien/power, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"hAE" = ( +/obj/structure/table/reinforced, +/obj/item/device/gps/advanced/science, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hBm" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/space) +"hBu" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/button/flasher{ + id = "exaroom2"; + pixel_y = -31 + }, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hBF" = ( +/turf/simulated/floor/tiled/dark, +/area/space) +"hBH" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor, +/obj/item/weapon/storage/belt/medical/alien, +/obj/item/clothing/head/helmet/alien/tank, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hBN" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"hBP" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/reagentgrinder, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"hBW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hCm" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"hCx" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam3" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"hCz" = ( +/obj/machinery/floorlayer, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"hDj" = ( +/obj/machinery/holosign/bar{ + id = "SP-baropen" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"hDy" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/shuttle, +/turf/simulated/shuttle/floor/black, +/area/space) +"hDU" = ( +/obj/item/clothing/suit/straight_jacket, +/turf/simulated/floor, +/area/space) +"hFu" = ( +/obj/random/tech_supply/nofail, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hFz" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumbath" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"hGR" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hHk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hHv" = ( +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hHE" = ( +/obj/structure/table/reinforced, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"hHN" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"hIe" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/space) +"hJf" = ( +/obj/machinery/vending/event/clothing, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hJo" = ( +/obj/item/weapon/antag_spawner/syndicate_drone/protector, +/turf/template_noop, +/area/space) +"hJu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"hJY" = ( +/obj/machinery/power/emitter{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8"; + dir = 2 + }, +/turf/simulated/floor/airless, +/area/space) +"hKr" = ( +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/space) +"hKD" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hKZ" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"hLe" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hLg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/recharge_station, +/turf/simulated/shuttle/plating, +/area/space) +"hLn" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"hMc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"hMo" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/sign/poster/nanotrasen{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"hMP" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "activating" + }, +/turf/simulated/floor/tiled, +/area/space) +"hNr" = ( +/obj/item/weapon/gun/projectile/colt, +/obj/item/weapon/gun/projectile/garand, +/obj/item/weapon/gun/projectile/revolvingrifle, +/obj/item/weapon/gun/projectile/shotgun/pump, +/obj/item/ammo_magazine/ammo_box/b12g, +/obj/item/ammo_magazine/m45, +/obj/item/ammo_magazine/m45, +/obj/structure/closet/secure_closet/guncabinet{ + req_one_access = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hNE" = ( +/obj/structure/bed/chair/comfy/black, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"hNF" = ( +/obj/structure/salvageable/bliss, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"hNI" = ( +/obj/random/trash_pile, +/turf/template_noop, +/area/space) +"hNQ" = ( +/obj/effect/alien/weeds, +/obj/structure/simple_door/resin, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"hOa" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"hOp" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hOr" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/cult, +/area/space) +"hOO" = ( +/obj/structure/cryofeed{ + dir = 2; + pixel_y = 32 + }, +/obj/machinery/cryopod{ + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hOP" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"hPw" = ( +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hPy" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"hPP" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"hPV" = ( +/obj/structure/closet/alien, +/obj/item/clothing/shoes/boots/jackboots/thigh, +/obj/item/clothing/shoes/boots/jackboots/toeless/thigh, +/obj/item/clothing/shoes/boots/jackboots/toeless/knee, +/obj/item/clothing/shoes/boots/fluff/siren, +/obj/item/clothing/shoes/dress/white, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/flats, +/obj/item/clothing/shoes/griffin, +/obj/item/clothing/shoes/heels, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/black/cuffs/red, +/obj/item/clothing/shoes/black/cuffs/octavious, +/obj/item/clothing/shoes/boots/hoof, +/obj/item/clothing/accessory/shiny/socks/poly, +/obj/item/clothing/accessory/shiny/socks/poly, +/obj/item/clothing/accessory/shiny/socks, +/obj/item/clothing/accessory/shiny/socks, +/obj/item/clothing/accessory/shiny/gloves/poly, +/obj/item/clothing/accessory/shiny/gloves/poly, +/obj/item/clothing/accessory/shiny/gloves, +/obj/item/clothing/accessory/shiny/gloves, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hQe" = ( +/obj/machinery/button/windowtint{ + id = "exam4"; + pixel_y = -23 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"hQl" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + id = "shelterblast"; + name = "Shelter Blast Doors"; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"hQr" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"hQH" = ( +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"hRf" = ( +/obj/structure/coatrack, +/obj/machinery/button/windowtint{ + id = "h-living"; + pixel_x = -27 + }, +/turf/simulated/floor/wood, +/area/space) +"hRm" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/blucarpet, +/area/space) +"hSc" = ( +/obj/machinery/disperser/middle, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hSj" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/space) +"hSG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/reinforced, +/area/space) +"hSP" = ( +/obj/structure/disposalpipe/tagger{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"hSS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/wall, +/area/space) +"hSV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/wall/rshull, +/area/space) +"hTt" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 24; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"hTU" = ( +/obj/structure/largecrate/animal/cat, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hTW" = ( +/obj/machinery/atmospherics/pipe/tank/air, +/turf/simulated/floor/plating/external, +/area/space) +"hUt" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/space) +"hUz" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/curtain/bed{ + dir = 2; + icon_state = "open"; + name = "Bathroom curtain"; + opacity = 0; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"hVl" = ( +/obj/structure/bed/chair/bay/chair/padded/blue{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hVK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"hWq" = ( +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"hWs" = ( +/obj/random/maintenance/engineering, +/turf/simulated/floor/plating/external, +/area/space) +"hWw" = ( +/turf/simulated/floor/outdoors/ice/dark_smooth, +/area/space) +"hWR" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/railing/grey, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"hXr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/table/bench/standard, +/turf/simulated/shuttle/floor/white, +/area/space) +"hXv" = ( +/obj/effect/floor_decal/borderfloorblack/corner, +/turf/simulated/floor/tiled/dark, +/area/space) +"hXx" = ( +/obj/item/weapon/storage/box, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"hXY" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/tiled/white, +/area/space) +"hYg" = ( +/obj/structure/bed/chair/bay/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hYn" = ( +/obj/machinery/transhuman/synthprinter, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"hYo" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"hYu" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/greendouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"hYG" = ( +/obj/item/weapon/material/shard, +/turf/template_noop, +/area/space) +"hZr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"hZx" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/item/modular_computer/console/preset/medical{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"hZH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"hZU" = ( +/obj/random/junk, +/turf/simulated/floor/plating, +/area/space) +"iac" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/space) +"iad" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 4; + icon_state = "32-4" + }, +/turf/simulated/floor/plating, +/area/space) +"iar" = ( +/obj/machinery/computer/crew{ + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iaU" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam6" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ibn" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"ibq" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"ibO" = ( +/obj/structure/table/marble, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/space) +"icl" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = list(67) + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"ico" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"idJ" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"iei" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iew" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"ieF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"ieJ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/space) +"ifn" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "echidna"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"ifq" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/mecha/combat/gygax/old, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ifr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"ifx" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/tiled/white, +/area/space) +"iga" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/wood, +/area/space) +"ihc" = ( +/obj/machinery/door/airlock/alien{ + name = "West Engine"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ihK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + id_tag = "Avalon_engine_airlock_pump" + }, +/turf/simulated/floor/reinforced, +/area/space) +"ihX" = ( +/mob/living/simple_mob/animal/space/alien/drone, +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"iie" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/space) +"iiv" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iiF" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/space) +"iiQ" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/bluegrid, +/area/space) +"ijj" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + icon_state = "door_locked"; + id_tag = "ursula_hatch"; + locked = 1; + name = "shuttle side hatch" + }, +/obj/machinery/button/remote/airlock{ + id = "ursula_hatch"; + name = "Side Hatch Control"; + pixel_y = -26; + specialfunctions = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ijy" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/turf/simulated/floor, +/area/space) +"ijF" = ( +/obj/machinery/vr_sleeper/alien/alpha_replicant, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ika" = ( +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"ikc" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "estrella_pump" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "estrella_sensor"; + pixel_y = -28 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ike" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iku" = ( +/obj/machinery/door/airlock/alien{ + name = "Cargo Hold"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ikK" = ( +/turf/unsimulated/floor/dark, +/area/space) +"ikU" = ( +/obj/structure/fuel_port, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"ikX" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ild" = ( +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/space) +"ilm" = ( +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"ilx" = ( +/obj/machinery/gateway/brass{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ilE" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"imH" = ( +/obj/item/weapon/banner/blue, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"imW" = ( +/obj/structure/closet/alien, +/obj/item/weapon/tool/wrench/alien, +/obj/item/weapon/weldingtool/alien, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/item/device/multitool/alien, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"inf" = ( +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/space) +"inz" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"inH" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/device/multitool/alien, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"inJ" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/random/tool/alien, +/obj/item/stack/cable_coil/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"inU" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"inW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"iok" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/airlock/alien/blue/public, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"iol" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/obj/item/weapon/card/id/syndicate, +/obj/item/device/healthanalyzer/advanced, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/cell/device/weapon/recharge/alien/omni, +/obj/item/weapon/cell/device/weapon/recharge/alien/omni, +/obj/item/weapon/gun/energy/gun/fluff/dominator, +/obj/item/weapon/gun/energy/netgun, +/obj/item/weapon/storage/box/handcuffs, +/obj/item/weapon/tape_roll, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/explosive, +/obj/item/weapon/implantcase/freedom, +/turf/template_noop, +/area/space) +"ioY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Bridge" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ipf" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1; + icon_state = "comfychair_preview" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ips" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/space) +"iqr" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"iqH" = ( +/obj/machinery/pump, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iqQ" = ( +/obj/machinery/door/airlock/alien{ + name = "Cell 2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"iro" = ( +/obj/effect/map_effect/portal/line/side_a, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"irx" = ( +/obj/structure/window/plastitanium, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"irP" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"irV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"isf" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor, +/area/space) +"isj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"itc" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "24" + }, +/turf/template_noop, +/area/space) +"itF" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"itL" = ( +/obj/effect/floor_decal/emblem/nt3, +/turf/simulated/floor/tiled/dark, +/area/space) +"iuf" = ( +/turf/simulated/floor/reinforced, +/area/space) +"iuq" = ( +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/shuttle/floor/white, +/area/space) +"iuu" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"ivg" = ( +/obj/machinery/computer, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ivo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/shield_generator/charged{ + field_radius = 8; + initial_shield_modes = 2153; + target_radius = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ivw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/rshull, +/area/space) +"ivA" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"iwa" = ( +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"iwi" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/firstaid/surgery, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/space) +"iwA" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "stargazer_inner"; + name = "Internal Access" + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "stargazer"; + name = "interior access button"; + pixel_y = -26 + }, +/turf/simulated/shuttle/plating, +/area/space) +"iwN" = ( +/obj/structure/table/bench/marble, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/space) +"iwS" = ( +/obj/machinery/door/airlock/alien{ + id_tag = "abdorm3"; + name = "Dorm 3"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"iwZ" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"ixh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"ixo" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ixD" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ixN" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/space) +"iyk" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"iyp" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 1 + }, +/turf/template_noop, +/area/space) +"iyQ" = ( +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"iyY" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"izf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 4"; + id_tag = "Avalon-room4" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"izm" = ( +/obj/machinery/teleport/station, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"izz" = ( +/obj/machinery/door/airlock/alien/blue/public, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"izS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + opacity = 1 + }, +/obj/machinery/power/smes/buildable/power_shuttle, +/turf/simulated/shuttle/plating, +/area/space) +"iAD" = ( +/mob/living/simple_mob/creature/strong, +/turf/template_noop, +/area/space) +"iBg" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"iBk" = ( +/obj/effect/forcefield/cult, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iBt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iBP" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 8; + id_tag = "Avalon_engine_airlock_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + pixel_x = 28; + id_tag = "Avalon_engine_airlock"; + tag_airpump = "Avalon_engine_airlock_pump"; + tag_exterior_door = "Avalon_engine_airlock_exterior"; + tag_interior_door = "Avalon_engine_airlock_interior"; + tag_chamber_sensor = "Avalon_engine_airlock_sensor"; + name = "Engine Airlock Controller" + }, +/turf/simulated/floor/reinforced, +/area/space) +"iCd" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/machinery/meter, +/turf/simulated/floor, +/area/space) +"iCw" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "baby_mammoth_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"iCz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iCH" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/reagent_containers/glass/beaker/noreact{ + pixel_x = -6 + }, +/obj/item/weapon/reagent_containers/glass/beaker/noreact, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"iCJ" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + req_one_access = list(67) + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"iDa" = ( +/obj/machinery/vending/dinnerware{ + pixel_y = 24; + density = 0 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/angled{ + pixel_y = 18; + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"iDD" = ( +/obj/item/device/tape, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"iDE" = ( +/obj/structure/largecrate/animal/dangerous, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"iDF" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/extinguisher{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/structure/mopbucket{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/weapon/mop, +/obj/item/device/multitool, +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/turf/simulated/floor/tiled, +/area/space) +"iDP" = ( +/obj/structure/table/marble, +/obj/machinery/cash_register/civilian{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "SP-kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"iDW" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"iEA" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"iEW" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/tealcarpet, +/area/space) +"iFa" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/cult, +/area/space) +"iFi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"iFC" = ( +/obj/trader/capture_crystal, +/turf/template_noop, +/area/space) +"iGF" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/floor, +/area/space) +"iGG" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"iHo" = ( +/obj/effect/overlay/wallrot, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iHr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iHx" = ( +/obj/machinery/computer/ship/sensors{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"iHE" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/sifwoodentable, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/carpet/blue, +/area/space) +"iId" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/space) +"iIi" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/radio/emergency, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/bluespaceradio, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/device/binoculars, +/obj/item/device/perfect_tele, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/storage/pill_bottle/corophizine, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/gun/energy/sniperrifle, +/obj/item/weapon/gun/energy/sniperrifle, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"iIq" = ( +/obj/effect/ctrigger, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iIv" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "33" + }, +/turf/template_noop, +/area/space) +"iIy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iIY" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + id_tag = "Avalon_engine_airlock_pump" + }, +/obj/machinery/vending/wallmed_airlock{ + pixel_y = 30 + }, +/turf/simulated/floor/reinforced, +/area/space) +"iJp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"iJw" = ( +/turf/simulated/shuttle/wall/voidcraft/red, +/area/survivalpod) +"iJG" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/turf/simulated/floor/reinforced, +/area/space) +"iKm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/space) +"iKL" = ( +/obj/machinery/door/airlock/maintenance/command, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iLI" = ( +/obj/item/device/gps/computer, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"iMi" = ( +/obj/structure/prop/alien/computer/camera/flipped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iMk" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"iMx" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"iNd" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"iNg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"iNE" = ( +/obj/machinery/vending/fitness, +/turf/template_noop, +/area/space) +"iNF" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + icon_state = "map_vent_out"; + use_power = 1 + }, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"iNS" = ( +/obj/vehicle/bike/random, +/turf/template_noop, +/area/space) +"iNV" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"iOq" = ( +/obj/machinery/computer/ship/engines, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"iOu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 6; + icon_state = "1-6" + }, +/turf/simulated/floor/plating, +/area/space) +"iOE" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"iPI" = ( +/obj/structure/closet/walllocker_double/hydrant/south, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/regular, +/turf/simulated/shuttle/floor/purple, +/area/space) +"iPZ" = ( +/obj/item/clothing/suit/storage/apron/white, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/space) +"iQa" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iQZ" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/table/standard, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"iRh" = ( +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"iRk" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iRo" = ( +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/wood, +/area/space) +"iRD" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"iRF" = ( +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_state = "dispenser"; + name = "Garmentier"; + req_access = null + }, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iSv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"iSx" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"iSR" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"iSX" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iTl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/space) +"iTS" = ( +/obj/structure/closet/walllocker_double/south{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/space) +"iTV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 6"; + id_tag = "Avalon-room6" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iUd" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"iUu" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/turf/simulated/floor, +/area/space) +"iUJ" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/carpet/oracarpet, +/area/space) +"iUW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"iVc" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/floor/gorefloor2, +/area/space) +"iVq" = ( +/obj/structure/loot_pile/maint/trash, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"iVs" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"iVu" = ( +/obj/structure/bed/psych, +/turf/simulated/floor/wood/sif, +/area/space) +"iVO" = ( +/obj/structure/table/standard, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/space) +"iWn" = ( +/obj/item/stack/rods{ + amount = 5 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"iWJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor, +/area/space) +"iXl" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_8" + }, +/turf/simulated/floor/tiled, +/area/space) +"iXt" = ( +/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"iXD" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"iYc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/space) +"iYt" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"iZg" = ( +/turf/simulated/shuttle/plating, +/area/space) +"iZx" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/space) +"jaT" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jbs" = ( +/obj/structure/table/standard, +/obj/item/toy/tennis/blue, +/turf/simulated/floor/tiled/dark, +/area/space) +"jbu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jbC" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/random/contraband/nofail, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jbF" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"jco" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"jcD" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"jcH" = ( +/obj/item/weapon/mining_scanner, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/void/mining, +/obj/item/clothing/head/helmet/space/void/mining, +/obj/structure/table/rack/shelf/steel, +/obj/item/device/suit_cooling_unit, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jcM" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/mecha/working/ripley/mining/old, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jdn" = ( +/obj/item/device/tape/random, +/obj/item/device/taperecorder, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/structure/table/survival_pod, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jdo" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jdq" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor/carpet, +/area/space) +"jeb" = ( +/obj/machinery/atmospherics/pipe/tank/nitrogen{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"jeh" = ( +/obj/item/weapon/material/knife/machete, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jer" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/space) +"jfd" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/glasses/square{ + pixel_y = -2 + }, +/obj/item/weapon/storage/box/glass_extras/sticks{ + pixel_y = 4 + }, +/obj/item/weapon/storage/box/glass_extras/straws{ + pixel_y = 7 + }, +/obj/item/weapon/packageWrap, +/obj/structure/curtain/open/bed, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jfe" = ( +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = -9 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"jfi" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "estrella_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "estrella"; + pixel_y = 26; + tag_airpump = "estrella_pump"; + tag_chamber_sensor = "estrella_sensor"; + tag_exterior_door = "estrella_outer"; + tag_interior_door = "estrella_inner" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/shuttle/plating, +/area/space) +"jfo" = ( +/obj/random/trash_pile, +/turf/simulated/floor/plating, +/area/space) +"jfs" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jft" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jfO" = ( +/obj/structure/prop/alien/dispenser/twoway, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"jfQ" = ( +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/glass, +/turf/simulated/shuttle/plating, +/area/space) +"jfX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/space) +"jgf" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/condimentbottles, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/structure/curtain/open/bed, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jgZ" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_3" + }, +/turf/simulated/floor/tiled, +/area/space) +"jhm" = ( +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"jie" = ( +/obj/machinery/bodyscanner, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"jii" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"jiw" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/space) +"jiz" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jjg" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"jjA" = ( +/obj/structure/cable{ + d2 = 6; + icon_state = "0-6" + }, +/turf/simulated/floor/plating, +/area/space) +"jjI" = ( +/obj/structure/sign/christmas/lights{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"jjR" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jkb" = ( +/obj/item/device/reagent_scanner/adv, +/obj/structure/closet/alien, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jkj" = ( +/obj/structure/table/darkglass, +/obj/item/device/binoculars, +/obj/item/device/megaphone/super, +/turf/simulated/floor/wood/sif, +/area/space) +"jku" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/shuttle/floor/alien, +/area/space) +"jkv" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"jkz" = ( +/obj/random/humanoidremains, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jkM" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "20" + }, +/turf/template_noop, +/area/space) +"jlz" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor/white, +/area/space) +"jlB" = ( +/obj/structure/disposalpipe/tagger/partial{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"jlD" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jlZ" = ( +/obj/structure/grille/broken/cult, +/obj/fire, +/turf/simulated/floor/lava, +/area/space) +"jmf" = ( +/obj/effect/weaversilk/wall, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jmm" = ( +/turf/simulated/mineral/crystal_shiny, +/area/space) +"jmn" = ( +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/turf/template_noop, +/area/space) +"jmO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jmQ" = ( +/obj/structure/table/steel, +/obj/item/device/starcaster_news{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/toy/eight_ball{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jmU" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/blue, +/area/space) +"jnB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jnS" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "Alien Energy Hub"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jnZ" = ( +/obj/structure/prop/blackbox, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"joj" = ( +/obj/machinery/flasher{ + id = "procroom1"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/cult, +/area/space) +"jol" = ( +/mob/living/simple_mob/mechanical/hivebot/swarm, +/turf/template_noop, +/area/space) +"jow" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/scalpel/ripper, +/obj/item/weapon/surgical/scalpel/manager, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"joQ" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"joV" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"jpj" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor, +/area/space) +"jpq" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/suit/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/clothing/head/helmet/space/void/merc/odst, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/shoes/magboots/adv, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jqt" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/tiled, +/area/space) +"jqK" = ( +/obj/machinery/mining/drill/loaded, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jrh" = ( +/obj/machinery/flasher{ + id = "auctionroom"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jrj" = ( +/obj/structure/table/standard, +/obj/item/device/starcaster_news{ + pixel_x = 8 + }, +/obj/item/device/starcaster_news{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/simulated/floor/wood, +/area/space) +"jrw" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"jsb" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"jsp" = ( +/obj/machinery/door/airlock/glass_centcom{ + req_one_access = list(67) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"jsA" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/machinery/washing_machine{ + pixel_x = -2; + pixel_y = 18 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jsR" = ( +/mob/living/simple_mob/vore/demon/engorge{ + faction = "cult" + }, +/turf/simulated/floor/gorefloor2, +/area/space) +"jte" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 8 + }, +/obj/random/mob/robotic/hivebot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jtL" = ( +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"jue" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"juf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"juk" = ( +/turf/space, +/area/space) +"jum" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"juq" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"juz" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jvf" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jvj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jvr" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jvK" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jvS" = ( +/obj/machinery/door/airlock/alien{ + name = "Cell 1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jvT" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor, +/area/space) +"jwd" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/hatch, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jwl" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/captaindouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"jwn" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"jwp" = ( +/obj/structure/fans/hardlight/colorable/abductor, +/obj/machinery/door/airlock/alien{ + name = "Internal Airlock"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jwt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"jwu" = ( +/obj/structure/bed/alien, +/obj/structure/curtain/open/privacy, +/obj/item/weapon/bedsheet/medical, +/turf/simulated/shuttle/floor/white, +/area/space) +"jwv" = ( +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"jwL" = ( +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"jwO" = ( +/obj/structure/table/alien, +/obj/item/weapon/packageWrap, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"jxh" = ( +/obj/structure/disposalpipe/sortjunction/wildcard{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"jxj" = ( +/obj/structure/bed/chair/bay/chair/padded/green, +/turf/simulated/floor/wood, +/area/space) +"jym" = ( +/obj/machinery/button/holosign{ + id = "SP-baropen"; + name = "Open Sign"; + pixel_x = -27; + pixel_y = 5 + }, +/obj/machinery/button/remote/blast_door{ + id = "SP-kitchen"; + name = "Kitchen Shutters Control"; + pixel_x = -27; + pixel_y = -5; + req_access = list(28) + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jzm" = ( +/obj/machinery/vending/tool{ + emagged = 1 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"jzy" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"jzI" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/effect/alien/weeds, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/obj/item/organ/internal/brain/alraune, +/obj/item/organ/internal/eyes/replicant, +/obj/item/weapon/gun/energy/gun/fluff/dominator, +/turf/simulated/floor, +/area/space) +"jzV" = ( +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"jAi" = ( +/turf/simulated/floor/carpet/oracarpet, +/area/space) +"jAz" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jAA" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/red, +/turf/simulated/floor/wood, +/area/space) +"jBc" = ( +/obj/effect/shadow_wight, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jBk" = ( +/obj/structure/reagent_dispensers/cookingoil, +/turf/template_noop, +/area/space) +"jBB" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jBJ" = ( +/obj/structure/table/darkglass, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/turf/simulated/floor/wood/sif, +/area/space) +"jBY" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"jCf" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/template_noop, +/area/space) +"jCM" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"jCQ" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"jCW" = ( +/obj/structure/largecrate/animal/corgi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"jDr" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "hacked autolathe" + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"jEO" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"jFd" = ( +/obj/structure/closet/secure_closet/miner{ + locked = 0 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jFh" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jFt" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/space) +"jFC" = ( +/turf/simulated/floor/outdoors/ice, +/area/space) +"jFN" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jGa" = ( +/obj/structure/bed/chair/oldsofa/left, +/turf/simulated/floor/wood, +/area/space) +"jGl" = ( +/obj/structure/table/fancyblack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"jGU" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"jGZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jHo" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/random/mre, +/obj/item/weapon/material/kitchen/utensil/fork{ + pixel_x = 12 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"jHV" = ( +/obj/effect/alien/weeds/node, +/turf/template_noop, +/area/space) +"jIh" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/item/prop/alien/junk, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jIu" = ( +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"jIN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jKi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jKj" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"jKC" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/space) +"jLb" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "stargazer_sensor"; + pixel_y = 28 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "stargazer_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"jLp" = ( +/obj/effect/fancy_shuttle/lifeboat, +/turf/template_noop, +/area/space) +"jLQ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"jLR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"jMb" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"jMm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jNu" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/space) +"jNB" = ( +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"jNE" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/emergency, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"jNH" = ( +/obj/machinery/biogenerator, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"jPa" = ( +/obj/structure/simple_door/resin, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jPk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/shuttle/floor/alien, +/area/space) +"jPH" = ( +/obj/item/weapon/antag_spawner/syndicate_drone, +/turf/template_noop, +/area/space) +"jPZ" = ( +/obj/machinery/door/airlock/alien{ + name = "Engineering Post"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jQf" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 35 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 22 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"jQH" = ( +/obj/effect/temporary_effect/pulse/microsingulo, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"jRd" = ( +/obj/structure/prop/alien/computer/camera/flipped{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"jRR" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = -32 + }, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/fuzzy, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/suit/iasexy, +/obj/item/clothing/under/sexybunny_white/sexybunny_black, +/obj/item/clothing/under/dress/maid/sexy, +/obj/item/clothing/head/collectable/rabbitears, +/turf/simulated/floor/wood/broken, +/area/space) +"jTz" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "estrella_side_hatch"; + locked = 1; + req_access = null; + req_one_access = null + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "estrella_side_hatch"; + name = "Side Hatch Control"; + pixel_x = -27; + specialfunctions = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/space) +"jTI" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 8; + pixel_x = -6 + }, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"jTP" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"jUj" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jUk" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/space) +"jUL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"jUV" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"jVb" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"jVj" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/kitchen/utensil/spoon, +/turf/simulated/floor/tiled/white, +/area/space) +"jVr" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"jWp" = ( +/obj/machinery/r_n_d/protolathe, +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/floor/purple, +/area/space) +"jWW" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder{ + pixel_x = 10; + pixel_y = 19 + }, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"jXp" = ( +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/turf/simulated/floor, +/area/space) +"jXL" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + pixel_x = 5 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jXO" = ( +/obj/effect/floor_decal/industrial/outline, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor, +/area/space) +"jXU" = ( +/turf/simulated/floor/tiled/white, +/area/space) +"jXX" = ( +/obj/structure/salvageable/computer, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"jYi" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"jYz" = ( +/obj/trader/capture_crystal/cash, +/turf/template_noop, +/area/space) +"jYU" = ( +/obj/machinery/door/airlock/alien{ + name = "Cryogenics sleepers"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"jZi" = ( +/obj/structure/sign/science, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"jZr" = ( +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"jZC" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/loot_pile/mecha/durand, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"jZW" = ( +/obj/structure/reagent_dispensers, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kax" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"kaP" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kaS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor, +/area/space) +"kaT" = ( +/obj/machinery/optable, +/obj/machinery/oxygen_pump/anesthetic{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kbe" = ( +/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, +/obj/structure/curtain/black, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/space) +"kbl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"kbr" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/machinery/meter, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"kbK" = ( +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/soap/deluxe, +/obj/structure/table/steel, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/tiled/freezer, +/area/space) +"kbO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"kbU" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 24 + }, +/obj/machinery/button/windowtint{ + pixel_x = -10; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/space) +"kbZ" = ( +/obj/mecha/combat/marauder/old, +/turf/template_noop, +/area/space) +"kcn" = ( +/obj/structure/table/alien, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/hand_labeler, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"kcx" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/deck/cards, +/turf/simulated/floor/wood/sif, +/area/space) +"kcO" = ( +/obj/machinery/mecha_part_fabricator/pros, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kcY" = ( +/turf/simulated/shuttle/floor/alien, +/area/space) +"kdx" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kdJ" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_5" + }, +/turf/simulated/floor/tiled, +/area/space) +"kdT" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"kdX" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 17 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kdY" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"keh" = ( +/obj/machinery/door/airlock/alien{ + name = "Meeting hall"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"kei" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"kem" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "estrella_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"keu" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"kev" = ( +/obj/machinery/door/airlock/alien{ + name = "Main Hall"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"keO" = ( +/obj/structure/table/steel, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/wrench, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"keX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kfg" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating/external, +/area/space) +"kfo" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/structure/cryofeed{ + dir = 2; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kfA" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kfB" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/decal/remains/xeno, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/shuttle/floor/alien, +/area/space) +"kfJ" = ( +/obj/vehicle/train/engine/quadbike/built{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"khd" = ( +/obj/structure/curtain/open/privacy, +/turf/simulated/shuttle/floor/purple, +/area/space) +"khq" = ( +/obj/machinery/vending/boozeomat{ + pixel_y = 25; + density = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"khA" = ( +/turf/simulated/wall/cult, +/area/space) +"kit" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"kiB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kiR" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kiX" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kjk" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/gibs/robot, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"kjt" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_x = -3; + pixel_y = -1 + }, +/obj/item/weapon/towel{ + color = "#ff0000"; + name = "red towel" + }, +/obj/item/weapon/towel{ + color = "#ff0000"; + name = "red towel" + }, +/obj/item/weapon/towel{ + color = "#FF8C00"; + name = "orange towel"; + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/weapon/towel{ + color = "#FF8C00"; + name = "orange towel"; + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/weapon/towel{ + color = "#90ee90"; + name = "green towel" + }, +/obj/item/weapon/towel{ + color = "#90ee90"; + name = "green towel" + }, +/obj/item/weapon/towel{ + color = "#b5651d"; + name = "brown towel" + }, +/obj/item/weapon/towel{ + color = "#b5651d"; + name = "brown towel" + }, +/obj/item/weapon/towel, +/obj/item/weapon/towel, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/item/weapon/tape_roll{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/tape_roll{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/device/taperecorder, +/obj/item/device/tape/random, +/obj/item/device/tape/random, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/folder/yellow, +/turf/simulated/floor/tiled/freezer, +/area/space) +"kjG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kkq" = ( +/obj/machinery/disposal, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kkr" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/coin/diamond, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/wood, +/area/space) +"kkv" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kkA" = ( +/obj/structure/flora/rocks1, +/turf/simulated/floor/beach/sand, +/area/space) +"kkC" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"kkQ" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "baby_mammoth_outer"; + locked = 1; + name = "External Access" + }, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "baby_mammoth"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "stargazer_blast"; + layer = 2.5; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"klF" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/turf/simulated/floor, +/area/space) +"klQ" = ( +/obj/effect/landmark/mcguffin_spawner, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kmm" = ( +/turf/simulated/shuttle/floor/black, +/area/space) +"kmR" = ( +/obj/machinery/power/shield_generator/charged, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"knf" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"knl" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kns" = ( +/obj/trader/general, +/turf/template_noop, +/area/space) +"kop" = ( +/obj/structure/table/darkglass, +/obj/item/device/gps, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"kox" = ( +/obj/machinery/vending/tool{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"koI" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/plating, +/area/space) +"kpi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kpm" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"kpG" = ( +/obj/structure/table/alien/blue, +/obj/item/clothing/under/psysuit, +/obj/item/weapon/cell/device/weapon/recharge/alien/omni, +/obj/item/weapon/circuitboard/mecha/imperion/peripherals, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"kqa" = ( +/obj/structure/prop/alien/computer{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kqb" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "atriumwest" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"kqd" = ( +/obj/random/crate, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kqA" = ( +/obj/structure/catwalk, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor, +/area/space) +"krp" = ( +/obj/structure/table/reinforced, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/kitchen/east, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/turf/simulated/shuttle/floor/black, +/area/space) +"krC" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"krO" = ( +/obj/effect/zone_divider, +/turf/template_noop, +/area/survivalpod) +"krQ" = ( +/obj/structure/filingcabinet/medical, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"krU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 20 + }, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"kts" = ( +/obj/mecha/combat/phazon/scree, +/turf/template_noop, +/area/space) +"kty" = ( +/obj/machinery/atmospherics/valve, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ktB" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/mineral/equipment_vendor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/plating, +/area/space) +"ktO" = ( +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor, +/area/space) +"kua" = ( +/obj/structure/railing/grey, +/turf/simulated/floor/glass/reinforced, +/area/space) +"kup" = ( +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"kvb" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/alien/blue, +/obj/item/weapon/paper/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kve" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"kvh" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "7" + }, +/turf/template_noop, +/area/space) +"kvw" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kvK" = ( +/obj/machinery/vending/emergencyfood/filled, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kwm" = ( +/obj/machinery/disperser/back, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kwy" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "14" + }, +/turf/template_noop, +/area/template_noop) +"kwC" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"kxa" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/device/healthanalyzer, +/obj/item/device/healthanalyzer, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/device/flash/synthetic, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plastic{ + max_amount = 25 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/storage/backpack/dufflebag/sci, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kxq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/shuttle/floor/white, +/area/space) +"kxI" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/wood, +/area/space) +"kyo" = ( +/obj/effect/map_effect/portal/line/side_b{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kyO" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/flasher{ + id = "exaroom3"; + name = "Floor mounted flash" + }, +/turf/simulated/floor, +/area/space) +"kzd" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/space) +"kze" = ( +/obj/structure/table/rack/shelf/steel, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"kzt" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"kAj" = ( +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"kAJ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kAU" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/phoronrglass, +/turf/simulated/floor, +/area/space) +"kBd" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 2 + }, +/turf/simulated/floor/greengrid, +/area/space) +"kBf" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/circular_saw/alien, +/obj/item/weapon/surgical/scalpel/alien{ + pixel_y = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"kBt" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "11" + }, +/turf/template_noop, +/area/space) +"kCP" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"kDb" = ( +/obj/machinery/icecream_vat, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"kDq" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kDs" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"kDA" = ( +/obj/structure/flora/log2, +/turf/simulated/floor/beach/water, +/area/space) +"kDZ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"kET" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 10; + icon_state = "32-10" + }, +/turf/simulated/floor/plating, +/area/space) +"kFN" = ( +/obj/effect/map_effect/portal/line/side_b{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kFS" = ( +/obj/structure/table/standard, +/obj/item/device/tape, +/turf/simulated/floor/tiled/dark, +/area/space) +"kGL" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kHs" = ( +/obj/structure/largecrate/animal/dangerous, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"kHz" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/floor/tiled/freezer, +/area/space) +"kHG" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"kHK" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/toy/plushie/kitten, +/obj/item/toy/plushie/grey_cat, +/obj/item/toy/plushie/orange_cat, +/obj/item/toy/plushie/borgplushie/scrubpuppy, +/obj/item/toy/plushie/black_fox, +/obj/item/toy/plushie, +/obj/item/toy/plushie/corgi, +/obj/item/toy/plushie/crimson_fox, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = -32 + }, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/carpet/turcarpet, +/area/space) +"kHQ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/floor/black, +/area/space) +"kHR" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kHU" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"kIE" = ( +/obj/machinery/button/windowtint{ + id = "exam3"; + pixel_y = 24 + }, +/turf/simulated/floor, +/area/space) +"kII" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"kIL" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"kIV" = ( +/obj/machinery/computer/ship/navigation/telescreen, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"kJg" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"kJK" = ( +/obj/structure/outcrop/diamond, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kJT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor/alien, +/area/space) +"kJX" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"kJZ" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "off_8" + }, +/turf/simulated/floor/tiled, +/area/space) +"kKb" = ( +/obj/structure/tubes, +/obj/machinery/computer/rdservercontrol{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kKe" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/briefcase/inflatable{ + pixel_y = 3 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"kKD" = ( +/obj/machinery/the_singularitygen/tesla, +/turf/simulated/floor/airless, +/area/space) +"kKJ" = ( +/obj/structure/bed/alien, +/obj/effect/decal/remains/xeno, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"kKK" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"kKO" = ( +/obj/machinery/optable, +/obj/machinery/oxygen_pump/anesthetic{ + pixel_y = 32 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white, +/area/space) +"kLa" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"kLk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kLw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kLO" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"kMR" = ( +/obj/machinery/atmospherics/pipe/cap/hidden, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"kNc" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/circular_saw/alien, +/obj/item/weapon/surgical/scalpel/alien{ + pixel_y = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"kNo" = ( +/obj/machinery/gear_dispenser/suit, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kNY" = ( +/obj/effect/forcefield/swarm, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kOg" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Translocate-R-US" + }, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/gps/syndie, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/perfect_tele/alien, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, +/turf/simulated/floor/wood/sif, +/area/space) +"kOn" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 1; + regulate_mode = 0; + unlocked = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kOo" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/prop/alien/computer{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kOr" = ( +/obj/machinery/computer/security/abductor{ + icon_screen = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kOH" = ( +/turf/simulated/floor/tiled/techmaint, +/area/space) +"kOQ" = ( +/obj/structure/table/bench/wooden, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/item/device/flash, +/turf/simulated/floor/wood, +/area/space) +"kPa" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"kPT" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor, +/area/space) +"kQn" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/blue, +/area/space) +"kQY" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"kRn" = ( +/obj/structure/fuel_port{ + pixel_y = -28 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"kRA" = ( +/obj/effect/decal/cleanable/blood/gibs{ + color = "red"; + icon_state = "gib1_flesh" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kRY" = ( +/obj/structure/particle_accelerator/particle_emitter/right, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"kSb" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kSc" = ( +/obj/vehicle/boat{ + dir = 8 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"kSd" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster, +/obj/item/mecha_parts/mecha_equipment/repair_droid, +/obj/item/mecha_parts/mecha_equipment/tool/passenger, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang, +/turf/simulated/floor/plating/external, +/area/space) +"kSp" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/radio/emergency, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/device/survivalcapsule, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/bluespaceradio, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/device/binoculars, +/obj/item/device/perfect_tele, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/nutriment, +/obj/item/weapon/storage/pill_bottle/iron, +/obj/item/weapon/storage/pill_bottle/arithrazine, +/obj/item/weapon/storage/pill_bottle/corophizine, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kSC" = ( +/turf/simulated/shuttle/wall{ + base_state = "dark"; + icon = 'icons/turf/shuttle_dark.dmi'; + icon_state = "dark" + }, +/area/space) +"kSU" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kTn" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/green, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kTP" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 6; + icon_state = "2-6" + }, +/turf/simulated/floor/plating, +/area/space) +"kTV" = ( +/obj/structure/cable{ + d2 = 10; + icon_state = "9-10"; + d1 = 9 + }, +/turf/simulated/floor/plating, +/area/space) +"kUh" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"kUz" = ( +/obj/structure/trash_pile, +/turf/template_noop, +/area/space) +"kUF" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kUS" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/space) +"kVP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Combat Information Center" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"kVU" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 4; + pixel_x = -3 + }, +/turf/simulated/floor, +/area/space) +"kWs" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/vending/engivend, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kWE" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"kWH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"kWI" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "17" + }, +/turf/template_noop, +/area/space) +"kWU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"kYl" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4 + }, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/glasses/cocktail, +/obj/item/weapon/storage/box/glasses/wine, +/obj/item/weapon/storage/box/glasses/shot, +/obj/item/weapon/storage/box/glasses/meta/metapint, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"kYo" = ( +/obj/machinery/light/small/emergency, +/turf/simulated/floor, +/area/space) +"kYz" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"kYH" = ( +/obj/machinery/door/airlock/alien{ + name = "Auxiliar Storage"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"kYP" = ( +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"laj" = ( +/obj/machinery/computer/ship/helm, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "stargazer_blast"; + name = "remote blast shielding control"; + pixel_x = -26; + pixel_y = -1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"laK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"lba" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/clipboard, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"lbg" = ( +/obj/structure/fans/tiny, +/turf/simulated/shuttle/plating, +/area/space) +"lbt" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/filingcabinet/medical, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"lbO" = ( +/obj/machinery/conveyor, +/turf/simulated/shuttle/plating, +/area/space) +"lbZ" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/item/weapon/reagent_containers/dropper, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-kitchen"; + name = "Avalon Kitchen Shutters Control"; + pixel_y = -22; + req_access = list(28); + pixel_x = -6 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"lcj" = ( +/obj/structure/disposalpipe/up{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"lco" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/space) +"lcp" = ( +/turf/simulated/shuttle/wall/flock, +/area/space) +"lcC" = ( +/obj/machinery/washing_machine, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ldG" = ( +/obj/structure/sign/double/maltesefalcon/right, +/turf/simulated/floor/tiled, +/area/space) +"leh" = ( +/obj/structure/table/alien, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lel" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"lff" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"lfg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"lfo" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lfY" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"lfZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"lgf" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/brown, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lha" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"lhf" = ( +/obj/effect/phase_shift, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lht" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"lhC" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, +/turf/simulated/floor/wood, +/area/space) +"lhE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"lhP" = ( +/obj/trader, +/turf/template_noop, +/area/space) +"liK" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam1" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"lkm" = ( +/obj/structure/table/darkglass, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"lkL" = ( +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"llr" = ( +/obj/random/junk, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"llF" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/blood/gibs/robot, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"lmE" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"lmI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"lmJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lmQ" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/locked/frontier/carbine{ + pixel_y = 7 + }, +/obj/item/weapon/gun/energy/locked/frontier/carbine{ + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"lmU" = ( +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"lnu" = ( +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/blue, +/area/space) +"loV" = ( +/obj/structure/flora/tree/jungle_small, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lpZ" = ( +/obj/item/weapon/antag_spawner/syndicate_drone/mechanist, +/turf/template_noop, +/area/space) +"lqf" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"lqj" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lqt" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lqS" = ( +/obj/machinery/computer/ship/navigation, +/turf/simulated/shuttle/floor/black, +/area/space) +"lqT" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/space) +"lrA" = ( +/obj/machinery/computer/teleporter{ + dir = 8; + emagged = 1; + pixel_x = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"lrY" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lsd" = ( +/obj/random/maintenance, +/turf/simulated/floor, +/area/space) +"lsn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"lsA" = ( +/obj/machinery/computer/crew{ + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lsS" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet/walllocker_double/east, +/turf/simulated/floor/plating, +/area/space) +"lti" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/machinery/suspension_gen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"ltp" = ( +/obj/structure/window/plastitanium, +/turf/simulated/floor/tiled/white, +/area/space) +"ltq" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/shuttle/wall/hard_corner, +/area/space) +"ltC" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"ltH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"lua" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 8; + regulate_mode = 0; + unlocked = 1 + }, +/turf/simulated/floor/plating/external, +/area/space) +"luf" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lup" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"luC" = ( +/obj/item/sniper_rifle_part/stock, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"luV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 9 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lvn" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lvJ" = ( +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"lwk" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "27" + }, +/turf/template_noop, +/area/space) +"lwq" = ( +/turf/simulated/floor/tiled/freezer, +/area/space) +"lxu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 2"; + id_tag = "Avalon-room2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lxC" = ( +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"lxK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"lye" = ( +/obj/machinery/gateway/brass{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lyy" = ( +/obj/structure/bed/alien, +/obj/effect/decal/remains/xeno, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"lyD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"lyP" = ( +/obj/structure/prop/alien/computer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lzd" = ( +/obj/structure/sink{ + pixel_y = 14 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"lzC" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"lzH" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lzM" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"lzT" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"lAa" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"lAM" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/command{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"lAS" = ( +/obj/structure/bed/chair/wood, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/space) +"lBD" = ( +/obj/structure/prop/machine/comm_tower/starts_on, +/turf/template_noop, +/area/space) +"lBE" = ( +/obj/machinery/light, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"lBG" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/bonegel, +/obj/item/weapon/surgical/bone_clamp/alien, +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"lBV" = ( +/obj/structure/plasticflaps/mining, +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"lCt" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/clothing/under/psysuit, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lCB" = ( +/turf/simulated/wall/sandstone, +/area/space) +"lCG" = ( +/obj/item/weapon/material/shard{ + pixel_x = 6 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lCR" = ( +/obj/machinery/feeder, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"lCZ" = ( +/obj/machinery/autolathe, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lDj" = ( +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor, +/area/space) +"lDp" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/item/clothing/under/psysuit, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lDz" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 21 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lDK" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 8; + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"lEe" = ( +/obj/structure/reagent_dispensers/he3, +/turf/template_noop, +/area/space) +"lEk" = ( +/obj/machinery/door/airlock/maintenance/cargo, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"lEy" = ( +/mob/living/simple_mob/animal/space/alien, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"lEz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"lEQ" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"lFi" = ( +/obj/structure/prop/blackbox/xenofrigate, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"lGg" = ( +/mob/living/simple_mob/animal/space/alien/sentinel, +/obj/effect/alien/weeds/node, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"lGj" = ( +/obj/structure/bed/chair, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lGr" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled, +/area/space) +"lGN" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "6" + }, +/turf/template_noop, +/area/space) +"lHu" = ( +/obj/machinery/mineral/processing_unit, +/turf/simulated/shuttle/plating, +/area/space) +"lHx" = ( +/obj/structure/particle_accelerator/power_box{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lHP" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"lIA" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/wood/sif, +/area/space) +"lJh" = ( +/obj/item/modular_computer/tablet/preset/custom_loadout/elite, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"lJP" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/wall/rshull, +/area/space) +"lKh" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam5" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"lKj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"lKw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lLC" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor, +/area/space) +"lMf" = ( +/obj/structure/table/standard, +/obj/item/device/defib_kit/loaded, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/space) +"lMx" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"lMD" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"lMG" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"lMK" = ( +/obj/machinery/chemical_dispenser/full{ + pixel_y = 5 + }, +/obj/structure/table/darkglass, +/turf/simulated/shuttle/floor/purple, +/area/space) +"lMV" = ( +/obj/random/medical/pillbottle, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lMZ" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/space) +"lOd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"lOq" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/space) +"lOK" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 4; + pixel_x = -3 + }, +/turf/template_noop, +/area/space) +"lPe" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"lPB" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/mecha_equipment/combat_shield, +/obj/item/mecha_parts/mecha_equipment/repair_droid, +/obj/item/mecha_parts/mecha_equipment/tool/sleeper, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged, +/turf/simulated/floor/plating/external, +/area/space) +"lPZ" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lQs" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/shuttle/floor/alien, +/area/space) +"lQF" = ( +/obj/random/cargopod, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lRl" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_state = "dispenser"; + name = "Drug-Dispenser"; + req_access = list(777) + }, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/device/sleevemate, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/turf/simulated/floor, +/area/space) +"lRJ" = ( +/obj/item/weapon/newspaper, +/obj/item/device/tape, +/obj/item/device/taperecorder{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"lSp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/space) +"lSs" = ( +/obj/machinery/button/windowtint{ + id = "atriumwest"; + pixel_x = 23 + }, +/obj/machinery/button/flasher{ + id = "atriumflash"; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"lSB" = ( +/obj/structure/fans/tiny, +/turf/template_noop, +/area/space) +"lSC" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"lSF" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lSH" = ( +/obj/random/firstaid, +/turf/template_noop, +/area/space) +"lST" = ( +/obj/machinery/vending/deluxe_boozeomat{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"lTt" = ( +/obj/machinery/r_n_d/server/robotics, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"lTz" = ( +/obj/effect/fancy_shuttle/tourbus, +/turf/template_noop, +/area/space) +"lTU" = ( +/obj/machinery/fusion_fuel_compressor, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"lUo" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lUp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/grounding_rod/pre_mapped{ + item_state = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lUq" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/storage/victcoat, +/obj/item/clothing/suit/storage/victcoat/red, +/obj/item/clothing/under/yw/victsuit/victdress/red, +/obj/item/clothing/under/yw/victsuit/victdress, +/obj/item/clothing/under/dress/blacktango, +/obj/item/clothing/under/dress/blacktango/alt, +/obj/item/clothing/under/dress/black_corset, +/obj/item/clothing/under/dress/cropdress, +/obj/item/clothing/under/dress/flamenco, +/obj/item/clothing/under/dress/festivedress, +/obj/item/clothing/under/dress/lilacdress, +/obj/item/clothing/under/dress/redeveninggown, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/wedding/bride_red, +/obj/item/clothing/under/wedding/bride_orange, +/obj/item/clothing/under/wedding/bride_white, +/obj/item/clothing/under/cheongsam/purple, +/obj/item/clothing/under/cheongsam/darkblue, +/obj/item/clothing/under/cheongsam/black, +/obj/item/clothing/suit/iasexy, +/obj/item/clothing/suit/johnny_coat, +/obj/item/clothing/suit/poncho, +/obj/item/weapon/storage/box/fluff/swimsuit/blue, +/obj/item/clothing/under/swimsuit/fluff/penelope, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lUy" = ( +/obj/item/weapon/stool/baystool/padded, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"lVa" = ( +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/medical, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/security, +/obj/random/maintenance/cargo, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/structure/closet/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lVk" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled, +/area/space) +"lVm" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/obj/structure/plasticflaps/mining, +/turf/simulated/floor, +/area/space) +"lVy" = ( +/turf/simulated/gore, +/area/space) +"lVM" = ( +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"lWh" = ( +/obj/structure/ledge, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lWi" = ( +/obj/effect/map_effect/beam_point/end, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lWt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"lWL" = ( +/obj/machinery/door/blast/multi_tile/four_tile_hor_sec, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"lWT" = ( +/obj/effect/landmark/hidden_level, +/turf/template_noop, +/area/template_noop) +"lXd" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/alien/blue, +/obj/item/prop/alien/junk, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lXh" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer, +/turf/simulated/shuttle/floor/black, +/area/space) +"lXn" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor, +/area/space) +"lXN" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/space) +"lXW" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"lYb" = ( +/obj/machinery/light/small/readylight, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"lYn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/emblem/nt1, +/turf/simulated/floor/tiled/dark, +/area/space) +"lYv" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/machinery/light, +/turf/simulated/shuttle/floor/purple, +/area/space) +"lYH" = ( +/obj/structure/cable{ + d2 = 9; + icon_state = "0-9" + }, +/turf/simulated/floor/plating, +/area/space) +"lZV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"lZY" = ( +/obj/item/wheelchair, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"mag" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/carpet/oracarpet, +/area/space) +"map" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/computer/rdservercontrol, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"mat" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4; + id_tag = "frontgate" + }, +/turf/simulated/floor/tiled, +/area/space) +"maB" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/item/weapon/gun/energy/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"maX" = ( +/obj/structure/bed/chair/bay/comfy/red{ + dir = 8 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mbt" = ( +/obj/item/weapon/material/shard/phoron, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"mbv" = ( +/obj/structure/toilet, +/obj/machinery/light/small/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"mby" = ( +/obj/item/weapon/bedsheet/piratedouble, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"mcg" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/command{ + name = "Boardroom" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mcp" = ( +/obj/machinery/door/airlock/maintenance/common, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mcL" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/expoutpost/hangarone; + base_turf = /turf/simulated/floor/reinforced; + docking_controller = "exphangar_1"; + landmark_tag = "exphangar_1"; + name = "Exploration Carrier Hangar One" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/shuttle/plating, +/area/space) +"mcP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mdx" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 5; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"meD" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"meS" = ( +/obj/machinery/light, +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"mfl" = ( +/obj/structure/toilet{ + dir = 8; + pixel_x = 9 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"mfy" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Dorm" + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"mfO" = ( +/obj/effect/ctrigger, +/turf/template_noop, +/area/space) +"mfQ" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain/black, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mga" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"mgb" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"mgg" = ( +/obj/structure/salvageable/autolathe, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mgN" = ( +/obj/structure/disposalpipe/up{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"mgQ" = ( +/obj/structure/ore_box, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"mgU" = ( +/obj/machinery/door/airlock/alien{ + id_tag = "abdorm2"; + name = "Dorm 2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mhu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mhD" = ( +/obj/random/trash, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"miz" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/washing_machine, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"miB" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/cult, +/area/space) +"miF" = ( +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -30 + }, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"miN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/space) +"miX" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/button/windowtint{ + id = "atriumbath"; + pixel_y = -23 + }, +/obj/machinery/button/flasher{ + id = "exaroom1"; + pixel_y = -31 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mjj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"mjm" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"mjC" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 8; + icon_state = "32-8" + }, +/turf/simulated/floor/plating, +/area/space) +"mjV" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"mjW" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor, +/area/space) +"mkx" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/condiment/spacespice, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mkA" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"mkS" = ( +/obj/structure/table/fancyblack, +/obj/item/toy/eight_ball, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"mkW" = ( +/obj/item/weapon/storage/backpack/dufflebag/emt, +/turf/template_noop, +/area/space) +"mlj" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"mlA" = ( +/obj/structure/bed/chair/bay/comfy/black{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mlK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mlL" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mlX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/space) +"mmd" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"mml" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"mmu" = ( +/obj/structure/table/standard, +/obj/item/toy/tennis/yellow, +/turf/simulated/floor/wood, +/area/space) +"mmw" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"mmL" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mmN" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"mnd" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/clipboard, +/obj/item/toy/figure/bartender, +/obj/item/weapon/storage/fancy/cigar, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"mnz" = ( +/obj/structure/window/reinforced/polarized{ + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/space) +"mnP" = ( +/obj/machinery/door/airlock/alien{ + name = "AI room"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mnZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + dir = 4; + name = "Tesla Engine" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"moe" = ( +/obj/structure/table/darkglass, +/turf/simulated/floor/wood/sif, +/area/space) +"moi" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/item/weapon/tape_roll, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mom" = ( +/obj/random/obstruction, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mot" = ( +/obj/structure/closet/walllocker{ + dir = 8; + pixel_x = -32 + }, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"moD" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"mpm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating/external, +/area/space) +"mpo" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/reddouble, +/turf/simulated/floor/carpet, +/area/space) +"mpF" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors{ + dir = 8 + }, +/obj/structure/sign/science{ + pixel_x = 32 + }, +/turf/template_noop, +/area/space) +"mpU" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mqh" = ( +/obj/machinery/power/port_gen/pacman/super, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/bluegrid, +/area/space) +"mqx" = ( +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"mqJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/tiled/dark, +/area/space) +"mro" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"msl" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"msn" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 6; + icon_state = "32-6" + }, +/turf/simulated/floor/plating, +/area/space) +"msF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room6"; + name = "Room 6 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"msL" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"msS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"msV" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"msY" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mto" = ( +/obj/machinery/gear_dispenser/custom, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mtv" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"mue" = ( +/obj/item/device/gps/internal/poi, +/turf/simulated/shuttle/wall/alien, +/area/space) +"muk" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"muz" = ( +/obj/machinery/vending/cola{ + dir = 8; + pixel_x = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/space) +"muQ" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/space) +"mvi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"mvE" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/space) +"mvK" = ( +/obj/structure/flora/ausbushes, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mvY" = ( +/obj/structure/disposalpipe/down{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"mwk" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"mwm" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"mwT" = ( +/obj/machinery/mineral/unloading_machine, +/obj/machinery/light, +/turf/simulated/shuttle/plating, +/area/space) +"mxf" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/item/trash/material/metal, +/turf/simulated/floor/plating, +/area/space) +"mxx" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"mxB" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"mxI" = ( +/obj/structure/disposalpipe/sortjunction/untagged{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"mxL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"mxN" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mxW" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "ID-Mart" + }, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/encryptionkey/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/device/radio/headset/syndicate, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + access = list(777); + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/turf/simulated/floor/wood/sif, +/area/space) +"myg" = ( +/obj/effect/catwalk_plated/dark, +/turf/template_noop, +/area/survivalpod) +"myA" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"myT" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/space) +"mza" = ( +/obj/effect/alien/weeds, +/obj/effect/landmark/loot_spawn, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"mzj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mzk" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Bridge" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mzx" = ( +/obj/structure/table/survival_pod, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mzH" = ( +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mAm" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"mAr" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mAC" = ( +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/turf/simulated/floor/wood/sif, +/area/space) +"mAD" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"mAJ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/power/smes/buildable/power_shuttle, +/obj/structure/cable/green, +/turf/simulated/shuttle/plating, +/area/space) +"mAS" = ( +/obj/effect/floor_decal/emblem/nt2, +/turf/simulated/floor/tiled/dark, +/area/space) +"mAZ" = ( +/obj/structure/loot_pile/maint, +/turf/simulated/floor/plating, +/area/space) +"mBi" = ( +/obj/structure/cliff/automatic/ramp, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mBm" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mBQ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/emitter/gyrotron/anchored{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mBV" = ( +/obj/effect/gibspawner/robot, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"mCd" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mCh" = ( +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"mCm" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_1" + }, +/turf/simulated/floor/tiled, +/area/space) +"mCp" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"mCE" = ( +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"mCI" = ( +/obj/structure/particle_accelerator/end_cap, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mCJ" = ( +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 24; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"mCR" = ( +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/floor/wood/sif/broken, +/area/space) +"mCY" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/table/darkglass, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/gps, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/turf/simulated/shuttle/floor/black, +/area/space) +"mDa" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "atriumsouth" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mDJ" = ( +/obj/structure/disposalpipe/sortjunction/untagged{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"mDM" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mEw" = ( +/obj/machinery/light/small/readylight{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"mEI" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/monotile, +/area/space) +"mEW" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "screen"; + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/space) +"mFb" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mFU" = ( +/obj/structure/window/plastitanium/full, +/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/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "baby_mammoth_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"mGs" = ( +/obj/machinery/vending/fitness{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mGC" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"mGE" = ( +/obj/machinery/cryopod, +/obj/structure/catwalk, +/turf/simulated/floor/bluegrid, +/area/space) +"mHn" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/blood/gibs/robot, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"mHx" = ( +/obj/machinery/power/generator{ + anchored = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"mHG" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/freezer, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"mHN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/gibspawner/robot, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"mHO" = ( +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/shuttle/floor/black, +/area/space) +"mIl" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"mIu" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"mIA" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/obj/fiftyspawner/phoronrglass, +/turf/simulated/floor, +/area/space) +"mIV" = ( +/obj/effect/effect/smoke/elemental, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mJw" = ( +/obj/structure/flora/rocks2, +/turf/simulated/floor/beach/sand, +/area/space) +"mJK" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian, +/obj/effect/alien/weeds, +/obj/structure/bed/nest, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"mJN" = ( +/obj/structure/table/standard, +/obj/item/weapon/deck/cards, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk{ + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/space) +"mKI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/meter, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "ursula_sensor"; + pixel_y = 28 + }, +/turf/simulated/shuttle/plating, +/area/space) +"mKV" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/space) +"mLk" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + name = "Avalon Hangar Blast Door"; + id = "Avalon-hangar" + }, +/turf/simulated/floor/reinforced, +/area/space) +"mLq" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "fridge_sci"; + icon_contents = "chem"; + icon_state = "fridge_sci"; + name = "Advanced storage"; + pixel_y = 0 + }, +/obj/item/weapon/handcuffs, +/obj/item/weapon/handcuffs, +/obj/item/weapon/handcuffs/legcuffs/bola, +/obj/item/weapon/handcuffs/legcuffs/bola, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/device/chameleon, +/obj/item/device/chameleon, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/spacecash/ewallet{ + worth = 750 + }, +/obj/item/weapon/spacecash/ewallet{ + worth = 750 + }, +/obj/item/weapon/card/id/syndicate, +/obj/item/weapon/card/id/syndicate, +/obj/item/weapon/implantcase/explosive, +/obj/item/weapon/implantcase/explosive, +/obj/item/device/pda/syndicate, +/obj/item/device/pda/syndicate, +/turf/template_noop, +/area/space) +"mLs" = ( +/obj/structure/bed/chair/bay/comfy/teal, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"mLT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor, +/area/space) +"mNs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mNJ" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/floor/tiled/white, +/area/space) +"mNQ" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand9" + }, +/area/space) +"mNT" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "31" + }, +/turf/template_noop, +/area/space) +"mOw" = ( +/obj/effect/map_effect/portal/line/side_b{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mPl" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/structure/prop/alien/computer/camera/flipped, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mPo" = ( +/obj/random/maintenance/engineering, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"mPA" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"mPD" = ( +/obj/structure/sign/atmos/co2, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mPQ" = ( +/mob/living/simple_mob/vore/demon/covern{ + faction = "cult" + }, +/turf/simulated/floor/cult, +/area/space) +"mQa" = ( +/obj/effect/decal/cleanable/blood/gibs/robot, +/obj/effect/decal/cleanable/molten_item, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"mQe" = ( +/obj/machinery/shower{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"mQM" = ( +/obj/structure/prop/alien/power, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mQW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mQY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"mRg" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/button/flasher{ + id = "exaroom1"; + pixel_y = -31 + }, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mRu" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"mRF" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mRJ" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon CIC Blast Door"; + id = "Avalon-cic" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"mSn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/item/device/radio/intercom{ + dir = 8; + name = "Station Intercom (General)"; + pixel_x = -21 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mSo" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mSC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mTM" = ( +/obj/structure/bed/chair/bay/shuttle, +/turf/simulated/shuttle/floor/black, +/area/space) +"mVh" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-cic"; + name = "Avalon CIC Blast Doors Control"; + pixel_y = 20; + req_access = list(28); + pixel_x = 18 + }, +/turf/simulated/floor/tiled/neutral, +/area/space) +"mVw" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "stargazer_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"mVA" = ( +/obj/structure/stairs/bottom{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mVO" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"mVU" = ( +/obj/machinery/smartfridge/drying_rack{ + pixel_x = 9 + }, +/obj/machinery/smartfridge/drying_rack{ + pixel_x = -8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"mVX" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/cosmos, +/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"mWa" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/turf/simulated/wall/rshull, +/area/space) +"mWr" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mWF" = ( +/obj/machinery/appliance/cooker/grill, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"mWQ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"mXf" = ( +/obj/machinery/meter, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"mXT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor, +/area/space) +"mYh" = ( +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/turf/simulated/floor/plating, +/area/space) +"mYm" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"mYB" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"mYJ" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mYY" = ( +/turf/simulated/floor/outdoors/dirt, +/area/space) +"mZk" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"mZn" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/pizzavoucher{ + pixel_x = 7; + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"mZt" = ( +/obj/structure/cult/tome, +/turf/simulated/floor/cult, +/area/space) +"mZO" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"mZS" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"naF" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"naM" = ( +/turf/simulated/wall, +/area/space) +"nbj" = ( +/obj/random/handgun/sec, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nbm" = ( +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nbu" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/plasticflaps/mining, +/turf/simulated/floor, +/area/space) +"nbx" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand4" + }, +/area/space) +"nbA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/airless, +/area/space) +"nbL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"nbM" = ( +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"nbU" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + frequency = 1380; + icon_state = "door_locked"; + id_tag = "estrella_inner"; + locked = 1; + name = "Internal Access" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/shuttle/plating, +/area/space) +"nch" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/space) +"ncq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/meter, +/obj/machinery/access_button{ + pixel_x = 26; + pixel_y = 24; + name = "exterior access button"; + master_tag = "Avalon_engine_airlock" + }, +/turf/simulated/floor, +/area/space) +"ndi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"ndQ" = ( +/obj/item/supply_beacon, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"neg" = ( +/obj/structure/largecrate/animal/pred, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"neH" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/vending/medical{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"neP" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nfM" = ( +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"nfZ" = ( +/obj/structure/disposalpipe/down{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"ngF" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/reinforced, +/area/space) +"ngN" = ( +/obj/structure/bed/chair/bay/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nhf" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"nhU" = ( +/obj/structure/bed/chair/sofa/left/black{ + dir = 2 + }, +/turf/simulated/floor/wood, +/area/space) +"niu" = ( +/obj/structure/sign/nosmoking_2, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"njw" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Hydro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Hydro" + }, +/obj/structure/grille/rustic, +/obj/structure/window/reinforced/polarized/full{ + id = "SP-Hydro" + }, +/turf/simulated/floor/plating, +/area/space) +"nkz" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"nkH" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/space) +"nlE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nlJ" = ( +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Portside Upper Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"nlN" = ( +/obj/structure/particle_accelerator/end_cap{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nmu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/the_singularitygen/tesla, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nmI" = ( +/obj/structure/urinal{ + dir = 4; + pixel_x = -31; + pixel_y = 0 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer, +/area/space) +"nmR" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/plasticflaps/mining, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nmZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"nnQ" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/space) +"nnV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"nod" = ( +/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"noS" = ( +/obj/structure/cliff/automatic{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"npD" = ( +/obj/machinery/light/poi, +/turf/simulated/floor, +/area/space) +"npE" = ( +/obj/machinery/button/flasher{ + id = "procroom2"; + pixel_y = -31 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"npK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"npL" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam3" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"npX" = ( +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"nro" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"nrV" = ( +/obj/machinery/light/small, +/obj/item/weapon/ore/diamond, +/obj/structure/sign/goldenplaque{ + desc = "Done No Harm."; + name = "Best Doctor 2552"; + pixel_y = -32 + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"nsk" = ( +/obj/machinery/door/airlock/alien/blue/locked, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ntP" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"ntZ" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "8" + }, +/turf/template_noop, +/area/space) +"nuu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nuR" = ( +/obj/machinery/door/airlock/glass_centcom{ + req_one_access = list(67) + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"nuT" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_4" + }, +/turf/simulated/floor/tiled, +/area/space) +"nuW" = ( +/obj/machinery/mineral/equipment_vendor/survey, +/turf/simulated/shuttle/floor/purple, +/area/space) +"nvt" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/space) +"nwc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/mech_recharger, +/turf/simulated/shuttle/plating, +/area/space) +"nwo" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/storage/box/freezer, +/obj/item/weapon/storage/box/freezer, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/device/defib_kit/loaded, +/obj/item/device/defib_kit/loaded, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"nwr" = ( +/obj/machinery/honey_extractor, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"nwG" = ( +/turf/template_noop, +/area/space) +"nwN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"nwX" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "16" + }, +/turf/template_noop, +/area/space) +"nxc" = ( +/obj/machinery/door/airlock/angled_tgmc/secure{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"nxw" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/computer/med_data{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"nxx" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"nxJ" = ( +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor, +/area/space) +"nxX" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 21 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/simulated/shuttle/floor/purple, +/area/space) +"nyc" = ( +/obj/structure/table/fancyblack, +/turf/simulated/floor/wood, +/area/space) +"nyJ" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"nyQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/floor, +/area/space) +"nza" = ( +/obj/structure/lattice, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"nzu" = ( +/obj/structure/cable{ + d1 = 8; + d2 = 10; + icon_state = "8-10" + }, +/turf/simulated/floor/plating, +/area/space) +"nzG" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/component/gas/reinforced, +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator, +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/rigged, +/obj/item/mecha_parts/mecha_equipment/wormhole_generator, +/turf/simulated/floor/plating/external, +/area/space) +"nzK" = ( +/obj/item/weapon/module/power_control, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"nzQ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam4" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"nzW" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "1" + }, +/turf/template_noop, +/area/template_noop) +"nAf" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/floor/cult, +/area/space) +"nAw" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/component/armor/alien, +/obj/item/mecha_parts/mecha_equipment/crisis_drone/rad, +/obj/item/mecha_parts/mecha_equipment/tool/passenger, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun, +/turf/simulated/floor/plating/external, +/area/space) +"nAB" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"nAF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + opacity = 1 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/telecomms/allinone, +/turf/simulated/shuttle/plating, +/area/space) +"nBH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"nCe" = ( +/obj/effect/map_effect/portal/line/side_b, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nCu" = ( +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"nCJ" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/step_trigger/message{ + message = "There is nothing in your mind, the sensation of emptiness overwhelms you as if your body itself has been left behind. . . but you can't help but to move on. . ."; + once = 0 + }, +/turf/simulated/floor/gorefloor, +/area/space) +"nCW" = ( +/obj/structure/loot_pile/mecha, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nDe" = ( +/turf/simulated/mineral/light, +/area/space) +"nDw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"nDE" = ( +/obj/machinery/vending/loadout/uniform, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nDU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/vending/nifsoft_shop, +/turf/simulated/floor/tiled/dark, +/area/space) +"nED" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/reinforced, +/area/space) +"nEE" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/space) +"nEQ" = ( +/obj/structure/ledge/ledge_nub{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nER" = ( +/obj/structure/largecrate/animal/cat/bones, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"nFh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"nFR" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor/wood/sif, +/area/space) +"nFX" = ( +/obj/machinery/door/window, +/turf/simulated/floor/tiled/white, +/area/space) +"nFZ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"nGd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"nGn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/medical, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"nGw" = ( +/mob/living/simple_mob/animal/passive/pillbug{ + name = "Conchambruda" + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"nGI" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"nGO" = ( +/obj/item/seeds/random, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"nHx" = ( +/obj/structure/flora/pumpkin/carved/girly, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nHD" = ( +/obj/machinery/shipsensors, +/obj/effect/catwalk_plated/dark, +/turf/simulated/shuttle/plating, +/area/space) +"nHN" = ( +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/space) +"nHZ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"nIl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green, +/area/space) +"nIr" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"nIt" = ( +/obj/structure/table/darkglass, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor, +/area/space) +"nIG" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/prop/alien/dispenser, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"nJg" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/multitool, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/geiger, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/welding, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 9 + }, +/turf/simulated/shuttle/plating, +/area/space) +"nJL" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"nKd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + opacity = 1 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/shuttle/plating, +/area/space) +"nKr" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"nKz" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "military autolathe"; + req_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"nKM" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor2, +/area/space) +"nKN" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"nKT" = ( +/obj/random/multiple/large_corp_crate, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nKX" = ( +/obj/machinery/porta_turret/alien{ + faction = "hivebot" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nKY" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"nLJ" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"nLN" = ( +/obj/effect/overlay/palmtree_l, +/turf/simulated/floor/beach/sand/desert, +/area/space) +"nLQ" = ( +/obj/item/weapon/gift, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nMg" = ( +/obj/machinery/r_n_d/server/core, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"nNj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"nNl" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"nNs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"nNF" = ( +/obj/structure/bed/alien, +/obj/effect/decal/remains/xeno, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nNQ" = ( +/obj/structure/disposalpipe/sortjunction/untagged/flipped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"nNW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Starboard Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"nOB" = ( +/obj/machinery/washing_machine, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nPl" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nPo" = ( +/obj/item/weapon/implantpad, +/obj/structure/closet/alien, +/obj/item/weapon/implantpad, +/obj/item/weapon/implantpad, +/obj/item/weapon/implantpad, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nPC" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"nPH" = ( +/obj/machinery/computer/ship/navigation, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"nPX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Captain's Quarters" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"nQr" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/structure/flora/pottedplant/fern{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/space) +"nQR" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/space) +"nRm" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nRp" = ( +/turf/simulated/floor/water/deep/pool, +/area/space) +"nRH" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nSj" = ( +/obj/structure/barricade, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"nSP" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "32" + }, +/turf/template_noop, +/area/space) +"nTE" = ( +/obj/structure/table/alien/blue, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"nTP" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nUd" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay"; + pixel_x = 32 + }, +/turf/template_noop, +/area/space) +"nUX" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/space) +"nVV" = ( +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"nWV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/green, +/turf/simulated/floor/plating, +/area/space) +"nXo" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"nXM" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"nXO" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"nXP" = ( +/obj/machinery/door/blast/angled/open, +/obj/structure/plasticflaps/mining, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"nXR" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"nXW" = ( +/obj/machinery/computer/prisoner{ + icon = 'icons/obj/abductor.dmi'; + icon_screen = null; + icon_state = "console-c"; + req_access = list(777) + }, +/turf/simulated/floor/wood/sif, +/area/space) +"nYk" = ( +/obj/machinery/power/tesla_coil, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nYH" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"nZj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/rnd{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"nZF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"nZZ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oac" = ( +/obj/structure/table/glass, +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"oap" = ( +/obj/structure/closet/walllocker{ + dir = 4; + pixel_x = 32 + }, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"oaB" = ( +/obj/machinery/vending/boozeomat{ + req_access = newlist() + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"oaH" = ( +/obj/effect/fancy_shuttle/tether_cargo, +/turf/template_noop, +/area/space) +"obj" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/tesla_coil/pre_mapped, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"obI" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"obS" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor, +/area/space) +"ocn" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/effect/alien/weeds, +/obj/item/stolenpackage, +/obj/item/organ/internal/heart, +/obj/item/organ/internal/kidneys/vox, +/obj/structure/reagent_dispensers/space_cleaner{ + pixel_y = 31 + }, +/turf/simulated/floor, +/area/space) +"ocY" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"ode" = ( +/obj/machinery/pointdefense, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"odr" = ( +/obj/machinery/computer/ship/helm{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"odO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/light, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"odY" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"odZ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"oev" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"oeT" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ofO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/space) +"ofP" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/prop/alien/computer{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ogd" = ( +/obj/effect/alien/weeds, +/obj/structure/simple_door/resin, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"ogL" = ( +/obj/item/weapon/material/shard/phoron, +/turf/simulated/floor/plating, +/area/space) +"ohM" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oib" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oig" = ( +/obj/structure/table/darkglass, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/lightreplacer, +/obj/item/device/lightreplacer, +/turf/simulated/floor/carpet, +/area/space) +"oix" = ( +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/space) +"oiB" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"oiM" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"oiU" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"ojs" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"ojA" = ( +/obj/effect/fancy_shuttle/lifeboat1, +/turf/template_noop, +/area/space) +"oka" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"olh" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"olv" = ( +/obj/mecha/working/hoverpod/shuttlecraft{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"olM" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"olO" = ( +/mob/living/simple_mob/animal/space/alien/queen/empress, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"omi" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"omk" = ( +/obj/machinery/particle_accelerator/control_box{ + anchored = 1 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"omo" = ( +/obj/machinery/button/remote/airlock{ + name = "Rear Hatch Control"; + pixel_x = 26; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"omC" = ( +/obj/structure/cliff/automatic{ + dir = 5 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"omH" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain/open/shower, +/obj/item/weapon/soap/deluxe, +/turf/simulated/floor/tiled/white, +/area/space) +"omM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + name = "Waste to Filter" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"onk" = ( +/obj/machinery/button/windowtint{ + id = "exam6"; + pixel_y = -23 + }, +/turf/simulated/floor, +/area/space) +"ony" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ooB" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"ooI" = ( +/turf/simulated/shuttle/plating/airless/carry, +/area/space) +"ooS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + name = "Atmospherics" + }, +/turf/simulated/floor, +/area/space) +"opn" = ( +/obj/effect/fancy_shuttle{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/space) +"opr" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"opE" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"opF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"opX" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/space) +"oqv" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/space) +"org" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/shuttle/floor/alien, +/area/space) +"orm" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"orA" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"orH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"orM" = ( +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/device/starcaster_news, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/space) +"osG" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ota" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/space) +"otc" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"otj" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/stack/material/copper{ + amount = 25 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/tech_disk, +/obj/item/weapon/disk/tech_disk, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"otr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"otG" = ( +/obj/structure/cliff/automatic, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"otM" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/adv, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oue" = ( +/obj/structure/table/alien/blue, +/obj/item/clothing/under/psysuit, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"our" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/particle_accelerator/particle_emitter/left{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ouw" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/random/contraband/nofail, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ouB" = ( +/obj/machinery/dnaforensics{ + pixel_x = -4 + }, +/obj/structure/tubes, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ouM" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"ouN" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/turf/template_noop, +/area/space) +"ouX" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + layer = 2.6 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1; + icon_state = "windoor" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"ovg" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating/external, +/area/space) +"ovj" = ( +/obj/structure/prop/nt_biocan, +/turf/template_noop, +/area/space) +"ovl" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"ovB" = ( +/mob/living/silicon/decoy, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ovI" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"ovK" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"owF" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor, +/area/space) +"owS" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"owY" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"oxA" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/piratedouble, +/obj/machinery/flasher{ + id = "permflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/wood, +/area/space) +"oyk" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"oyE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ozv" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/space) +"ozw" = ( +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ozz" = ( +/obj/structure/urinal{ + dir = 4; + pixel_x = -31; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"oAh" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_1" + }, +/turf/simulated/floor/tiled, +/area/space) +"oBe" = ( +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oBA" = ( +/turf/unsimulated/wall/dark, +/area/space) +"oBQ" = ( +/obj/effect/gibspawner/robot, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"oBS" = ( +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/shuttle/plating, +/area/space) +"oCb" = ( +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/space) +"oCw" = ( +/obj/machinery/light/small/flicker{ + dir = 1 + }, +/obj/structure/closet/alien, +/obj/item/device/perfect_tele_beacon/stationary{ + tele_name = "Unknown"; + tele_network = "abd1" + }, +/turf/simulated/floor/cult, +/area/space) +"oCB" = ( +/obj/machinery/vending/engivend{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777); + req_log_access = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"oCL" = ( +/obj/structure/catwalk, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey, +/turf/simulated/floor, +/area/space) +"oCM" = ( +/obj/random/maintenance, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"oDn" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"oDu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"oEe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/space) +"oEo" = ( +/obj/structure/bed/double/padded, +/turf/simulated/floor/wood/sif/broken, +/area/space) +"oFb" = ( +/obj/structure/foodcart, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oFO" = ( +/obj/machinery/door/airlock/hatch{ + icon_state = "door_locked"; + id_tag = "estrella_back_hatch"; + locked = 1; + req_one_access = null + }, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + id = "estrella_back_hatch"; + name = "Rear Hatch Control"; + pixel_y = 27; + req_access = null; + specialfunctions = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/space) +"oGj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/rshull, +/area/space) +"oGm" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "military autolathe"; + req_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"oGp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"oGr" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "baby_mammoth_pump" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "baby_mammoth_shuttle"; + pixel_y = 26; + tag_airpump = "baby_mammoth_pump"; + tag_chamber_sensor = "baby_mammoth_sensor"; + tag_exterior_door = "baby_mammoth_outer"; + tag_interior_door = "baby_mammoth_inner" + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/plating, +/area/space) +"oGs" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Combat Information Center" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oGL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"oHA" = ( +/obj/machinery/button/windowtint{ + id = "SP-Hydro"; + pixel_x = -28; + pixel_y = 6 + }, +/obj/machinery/light_switch{ + name = "light switch "; + pixel_x = -27; + pixel_y = -5 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"oHC" = ( +/obj/structure/grille, +/turf/simulated/floor/tiled, +/area/space) +"oHR" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/gootrap{ + basecolor = #610B0B; + desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; + name = "Spill of fear" + }, +/obj/effect/step_trigger/message{ + message = "Your body starts to feel numb with every step you take, there is an imposing presence you have yet to face. . . Maybe this isn't as bad."; + once = 0 + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"oHU" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/effect/floor_decal/techfloor, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"oHX" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/item/modular_computer/console/preset/engineering{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"oHY" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "atriumeast" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oIK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"oJd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"oJj" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"oJq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oJJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oJS" = ( +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"oKa" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 8; + pixel_x = -6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"oKd" = ( +/obj/item/weapon/reagent_containers/cooking_container/grill, +/turf/simulated/floor/tiled, +/area/space) +"oKj" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/dark, +/area/space) +"oKX" = ( +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/tiled/dark, +/area/space) +"oLe" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oLq" = ( +/obj/structure/sign/christmas/wreath, +/turf/simulated/floor/tiled, +/area/space) +"oLw" = ( +/obj/structure/hoist, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oLG" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"oLH" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/carpet, +/area/space) +"oLO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"oLW" = ( +/obj/item/weapon/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"oLX" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"oLZ" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"oMn" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"oMs" = ( +/obj/machinery/seed_storage/garden{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oMv" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/space) +"oMz" = ( +/obj/structure/particle_accelerator/power_box{ + anchored = 1; + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oNc" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oNh" = ( +/obj/machinery/r_n_d/protolathe, +/obj/structure/sign/periodic{ + pixel_y = 29 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"oNq" = ( +/obj/machinery/particle_accelerator/control_box{ + anchored = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oNW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/giga_drill, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oOe" = ( +/obj/item/trash/rkibble, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oOk" = ( +/obj/machinery/gateway/brass{ + dir = 5 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oPn" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"oPy" = ( +/obj/vehicle/train/trolley{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"oQk" = ( +/turf/simulated/floor/redgrid/animated, +/area/space) +"oQt" = ( +/obj/machinery/button/flasher{ + id = "slavecell1"; + pixel_y = -31 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oQD" = ( +/turf/simulated/floor/airless{ + icon_state = "solarpanel" + }, +/area/space) +"oQS" = ( +/obj/random/maintenance, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oQU" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/space) +"oQW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/item/weapon/gun/energy/sniperrifle, +/turf/simulated/shuttle/floor/alien, +/area/space) +"oRx" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/lava, +/area/space) +"oRy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Starboard Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"oSt" = ( +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"oSO" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oSX" = ( +/obj/structure/toilet, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oTn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"oTJ" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/ert/specialops, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"oUa" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/mecha/combat/durand/old, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"oVj" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + anchored = 1; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"oVv" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"oVy" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"oVH" = ( +/obj/machinery/door/airlock/alien{ + name = "Tele-Room Mk2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oWa" = ( +/obj/structure/bed/chair/shuttle{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"oWf" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/shower{ + pixel_y = 20 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/space) +"oWj" = ( +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oWm" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"oWr" = ( +/obj/machinery/computer/security/abductor{ + dir = 1; + icon_screen = null; + icon_state = "camera_flipped" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"oWv" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod) +"oWA" = ( +/obj/structure/transit_tube, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"oXl" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"oXt" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_6" + }, +/turf/simulated/floor/tiled, +/area/space) +"oXY" = ( +/obj/mecha/working/ripley/antique, +/turf/template_noop, +/area/space) +"oYx" = ( +/obj/structure/prop/poicanister, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"oYZ" = ( +/obj/machinery/vending/medical{ + dir = 8; + emagged = 1; + pixel_x = 22; + req_access = list(777); + density = 0 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"oZC" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/vr_sleeper/alien, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod) +"paf" = ( +/obj/structure/loot_pile/surface, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"paL" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"pbc" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/box/bodybags, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/device/sleevemate, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/device/defib_kit/compact/loaded, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/device/binoculars, +/obj/item/device/bluespaceradio, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/device/radio/emergency, +/obj/item/weapon/storage/backpack/dufflebag/emt, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"pbS" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pcb" = ( +/obj/machinery/door/airlock/sandstone, +/turf/template_noop, +/area/space) +"pcr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/mecha_equipment/generator/nuclear, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/rigged, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/rigged, +/turf/simulated/floor/plating/external, +/area/space) +"pcE" = ( +/obj/item/weapon/reagent_containers/food/snacks/syndicake, +/turf/simulated/floor/plating/external, +/area/space) +"pcP" = ( +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/closet/walllocker_double/kitchen/north{ + name = "Ration Cabinet" + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"pds" = ( +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"pdH" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = 26; + req_access = list(2,4) + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/bay/chair/padded/black{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"peo" = ( +/obj/machinery/door/airlock/alien{ + name = "Auction airlock"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"peq" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/black, +/area/space) +"pey" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/space) +"peE" = ( +/obj/structure/cable{ + d2 = 9; + icon_state = "6-9"; + d1 = 6 + }, +/turf/simulated/floor/plating, +/area/space) +"pfo" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"pfu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pfH" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/floor/plating, +/area/space) +"pfL" = ( +/obj/structure/disposalpipe/sortjunction/untagged/flipped{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"pfQ" = ( +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pgv" = ( +/obj/mecha/combat/fighter/pinnace{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"pgC" = ( +/obj/machinery/light/spot, +/obj/structure/hull_corner{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"pgF" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'RADIOACTIVE AREA'"; + icon_state = "radiation"; + name = "RADIOACTIVE AREA"; + pixel_x = 0; + pixel_y = 0 + }, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"pgK" = ( +/obj/machinery/atmospherics/pipe/tank/air/full{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"phn" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/cosmos, +/turf/simulated/floor/wood, +/area/space) +"php" = ( +/obj/machinery/vending/event/costume, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"phx" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand14" + }, +/area/space) +"phQ" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/space) +"piu" = ( +/obj/machinery/microwave{ + pixel_y = -2 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1; + icon_state = "pwindow" + }, +/obj/structure/table/steel{ + pixel_y = -9 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"piI" = ( +/obj/effect/fancy_shuttle/security, +/turf/template_noop, +/area/space) +"piU" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pje" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "stargazer_hatch"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"pjT" = ( +/obj/structure/prop/alien/computer/camera, +/turf/simulated/floor, +/area/space) +"pkc" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/flasher{ + id = "exaroom5"; + name = "Floor mounted flash" + }, +/turf/simulated/floor, +/area/space) +"pkB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall, +/area/space) +"pkK" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/stack/cable_coil/yellow, +/obj/item/stack/cable_coil/yellow, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/green, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pkN" = ( +/obj/machinery/door/airlock/alien/blue/public, +/obj/machinery/door/blast/puzzle{ + layer = 3.3; + name = "Blast Door"; + open_layer = 3.3 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pkS" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"plr" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"plK" = ( +/obj/structure/fireaxecabinet, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"plM" = ( +/obj/random/firstaid, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"plV" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"pmh" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"pmk" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumnorth" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pmm" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"pmu" = ( +/obj/machinery/power/thermoregulator, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pmT" = ( +/obj/structure/prop/alien/dispenser{ + pixel_x = -27 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"pna" = ( +/obj/machinery/door/airlock/alien{ + name = "Security Post"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pnl" = ( +/obj/structure/flora/pottedplant/largebush{ + name = "Guadalajara" + }, +/turf/simulated/floor/wood/sif, +/area/space) +"pnv" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"pnz" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/item/weapon/material/shard/phoron, +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pnA" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"pnH" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/gorefloor, +/area/space) +"pnL" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + anchored = 1; + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pom" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/loot_pile/mecha/gygax/dark/adv, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"poy" = ( +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"poA" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/yellow, +/turf/simulated/floor/wood, +/area/space) +"poC" = ( +/obj/structure/prop/dna_vault, +/turf/template_noop, +/area/space) +"ppm" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"ppZ" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 2; + name = "Waste Compresser" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"pqn" = ( +/turf/simulated/floor/water/ocean, +/area/space) +"pqE" = ( +/obj/structure/cryofeed{ + dir = 2; + pixel_y = 32 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pqK" = ( +/obj/structure/flora/grass/both, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pri" = ( +/obj/machinery/computer/guestpass{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/space) +"pro" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"psc" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"psg" = ( +/obj/machinery/porta_turret/alien, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"psJ" = ( +/obj/item/sniper_rifle_part/trigger_group, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"psL" = ( +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"psP" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"psT" = ( +/obj/structure/cliff/automatic/ramp{ + dir = 6 + }, +/obj/structure/cliff/automatic/ramp{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"psY" = ( +/obj/structure/particle_accelerator/fuel_chamber{ + anchored = 1; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ptr" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + icon_state = "door_locked"; + id_tag = "echidna_outer"; + locked = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"puh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"pul" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"puq" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"puU" = ( +/turf/simulated/floor, +/area/space) +"pvM" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"pvY" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"pwb" = ( +/obj/machinery/computer/operating, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"pwA" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/dark, +/area/space) +"pwC" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/tape_roll, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pwU" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"pxh" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/mecha/combat/marauder/seraph, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"pxp" = ( +/obj/structure/ledge/ledge_nub, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pxt" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pxM" = ( +/obj/machinery/autolathe{ + hacked = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"pxT" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/shuttle/floor/black, +/area/space) +"pyz" = ( +/obj/structure/particle_accelerator/end_cap{ + anchored = 1; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pyA" = ( +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/backup, +/obj/item/weapon/implantcase/backup, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/gun/energy/netgun, +/obj/item/weapon/melee/baton/shocker, +/obj/item/weapon/melee/baton/shocker{ + agonyforce = 75 + }, +/obj/item/weapon/storage/belt/utility/alien/full, +/obj/item/weapon/storage/belt/utility/alien/full, +/obj/item/clothing/suit/armor/alien, +/obj/item/clothing/suit/armor/alien, +/obj/item/clothing/shoes/boots/swat, +/obj/item/clothing/shoes/boots/swat, +/obj/item/clothing/gloves/swat, +/obj/item/clothing/gloves/swat, +/obj/item/clothing/mask/gas/sechailer/swat, +/obj/item/clothing/mask/gas/sechailer/swat, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/weapon/cell/void, +/obj/item/weapon/cell/void, +/obj/item/weapon/cell/void, +/obj/item/weapon/cell/void, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ + desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; + name = "alien admiral's medal" + }, +/obj/item/clothing/accessory/medal/dungeon/alien_ufo{ + desc = "It vaguely like a star. It looks like something an alien admiral might've worn. Probably."; + name = "alien admiral's medal" + }, +/obj/item/clothing/accessory/poncho/thermal/purple{ + color = "grey"; + desc = "An ornate, comfortable poncho with markings and thermal layers."; + name = "Alien thermal poncho" + }, +/obj/item/clothing/accessory/poncho/thermal/purple{ + color = "grey"; + desc = "An ornate, comfortable poncho with markings and thermal layers."; + name = "Alien thermal poncho" + }, +/obj/item/clothing/head/beret/blueshield{ + desc = "A dark blue beret adorned with a silver patch. It has odd alien markings all around it."; + name = "Alien's beret" + }, +/obj/item/clothing/head/beret/blueshield{ + desc = "A dark blue beret adorned with a silver patch. It has odd alien markings all around it."; + name = "Alien's beret" + }, +/obj/item/weapon/storage/box/syndie_kit/spy, +/obj/item/weapon/deadringer, +/obj/item/weapon/handcuffs/legcuffs/bola, +/obj/item/weapon/handcuffs/legcuffs/bola, +/obj/item/device/chameleon, +/obj/item/weapon/card/emag, +/obj/item/weapon/plastique, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/glasses/graviton, +/obj/item/device/radio_jammer, +/obj/item/weapon/grenade/anti_photon, +/obj/item/weapon/grenade/anti_photon, +/obj/item/weapon/grenade/flashbang, +/obj/item/weapon/grenade/flashbang, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/weapon/reagent_containers/spray/pepper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/gun/energy/sickshot, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "UP-Duction"; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pyH" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id = "SP-Cell"; + name = "Cell Door" + }, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"pzv" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"pzx" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"pzH" = ( +/obj/machinery/clonepod/transhuman/full/abductor{ + name = "grower pod" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"pzK" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "baby_mammoth_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"pzP" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastleft{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/alien{ + pixel_y = -6 + }, +/obj/item/weapon/gun/energy/alien, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"pzZ" = ( +/obj/machinery/light, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pAr" = ( +/turf/simulated/floor/plating/external, +/area/space) +"pAx" = ( +/obj/structure/table/alien, +/obj/item/device/tvcamera, +/obj/item/device/tvcamera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pAJ" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pAP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pBk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hangar Bay" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pBs" = ( +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled, +/area/space) +"pBK" = ( +/obj/structure/reagent_dispensers/water_cooler/full{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/structure/closet/crate/bin{ + pixel_x = 6; + pixel_y = 13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"pCs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pCz" = ( +/obj/effect/resonance, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pDb" = ( +/obj/structure/fuel_port{ + pixel_y = -28 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"pDf" = ( +/obj/machinery/gateway/centeraway/mcguffin, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pDg" = ( +/obj/structure/table/alien, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pEg" = ( +/obj/machinery/door/airlock/maintenance/int, +/obj/structure/fans/hardlight, +/turf/simulated/floor/plating/external, +/area/space) +"pER" = ( +/obj/structure/simple_door/cult, +/turf/simulated/floor/cult, +/area/space) +"pEY" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alien, +/area/space) +"pFl" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/brain/grey, +/obj/item/weapon/material/knife/plastic, +/turf/simulated/floor, +/area/space) +"pFN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pGl" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pGr" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pGy" = ( +/obj/structure/closet/walllocker_double/kitchen/east{ + name = "Ration Cabinet" + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"pHZ" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pIv" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pIz" = ( +/obj/machinery/autolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"pIT" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pJa" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/particle_accelerator/particle_emitter/right{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pJl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"pJn" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"pJw" = ( +/obj/structure/hull_corner, +/turf/template_noop, +/area/space) +"pJz" = ( +/obj/structure/particle_accelerator/particle_emitter/left, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"pJM" = ( +/obj/structure/table/rack, +/obj/item/weapon/makeover, +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/swimsuit/fluff/penelope, +/turf/simulated/floor/wood, +/area/space) +"pKA" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"pKK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"pKU" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"pLl" = ( +/obj/item/weapon/disk/tech_disk, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"pLx" = ( +/obj/structure/table/rack, +/obj/item/weapon/material/knife/ritual, +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/head/soft/solgov/veteranhat, +/turf/simulated/floor/wood, +/area/space) +"pLE" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pMf" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/plating, +/area/space) +"pMw" = ( +/obj/structure/closet/alien, +/turf/simulated/floor/wood/sif, +/area/space) +"pMC" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"pMM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/space) +"pMW" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"pNj" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"pNo" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/component/armor/military, +/obj/item/mecha_parts/component/gas/reinforced, +/obj/item/mecha_parts/mecha_equipment/omni_shield, +/obj/item/mecha_parts/mecha_equipment/tool/jetpack, +/obj/item/mecha_parts/mecha_equipment/tool/passenger, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon, +/turf/simulated/floor/plating/external, +/area/space) +"pNG" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/item/weapon/book/tome/imbued, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"pNQ" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/mecha_parts/component/hull/lightweight, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, +/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser/rigged, +/turf/simulated/floor/plating/external, +/area/space) +"pOg" = ( +/obj/machinery/flasher{ + id = "teleroom1"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pOC" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pPv" = ( +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/obj/structure/bed/nest, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"pPz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pPN" = ( +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/space) +"pPZ" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"pQi" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pQk" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -22 + }, +/obj/item/pizzavoucher, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"pRa" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood/broken, +/area/space) +"pRr" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pRF" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "atriumeast" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"pRG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/space) +"pSg" = ( +/obj/effect/blocker, +/turf/template_noop, +/area/space) +"pSv" = ( +/obj/structure/sink{ + pixel_y = 14 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/disposal/wall{ + dir = 4; + pixel_x = -37; + pixel_y = 0 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"pSV" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/space) +"pTY" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"pUb" = ( +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/space) +"pVs" = ( +/obj/structure/filingcabinet{ + pixel_x = -9; + pixel_y = 12; + density = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"pVx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"pVC" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "3" + }, +/turf/template_noop, +/area/template_noop) +"pWg" = ( +/obj/machinery/conveyor_switch/oneway{ + convdir = -1; + id = "garbagethree"; + name = "disposal coveyor" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pWq" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"pXi" = ( +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"pXp" = ( +/obj/item/weapon/reagent_containers/glass/rag, +/obj/item/clothing/gloves/ring/engagement, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"pXy" = ( +/obj/structure/bed/chair/wood/wings, +/turf/simulated/floor/wood/sif, +/area/space) +"pXF" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"pYp" = ( +/obj/machinery/sleeper{ + dir = 4; + emagged = 1; + initial_bin_rating = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"pYO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pYV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"pYW" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + opacity = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"pZr" = ( +/obj/machinery/button/windowtint{ + id = "atriumsouth"; + pixel_y = 24 + }, +/obj/machinery/button/flasher{ + id = "atriumflash"; + pixel_y = 31 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"pZK" = ( +/obj/machinery/alarm/angled{ + pixel_y = 18 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"pZV" = ( +/obj/machinery/door/airlock/alien{ + name = "Dressing and Managing"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qaP" = ( +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"qbS" = ( +/obj/effect/simple_portal/linked{ + desc = "It looks like a hole that leads to somewhere, although you can't quite see through it. . . It seems dormant and sealed closed. . ."; + name = "Demonic portal"; + portal_id = 20 + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"qcn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"qdI" = ( +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs/fuzzy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs{ + pixel_x = 5 + }, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/obj/item/weapon/handcuffs/legcuffs/fuzzy, +/turf/simulated/floor, +/area/space) +"qed" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/power/grounding_rod, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qew" = ( +/obj/effect/landmark/loot_spawn, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qeY" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/computer/power_monitor{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"qfd" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/empty/phoron, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"qfw" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/rshull, +/area/space) +"qfA" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qfF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"qfH" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"qfQ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qgc" = ( +/obj/effect/overlay/palmtree_r, +/turf/simulated/floor/beach/sand/desert, +/area/space) +"qgj" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qgw" = ( +/obj/structure/particle_accelerator/particle_emitter/right{ + anchored = 1; + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qgB" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/item/trash/material/metal, +/turf/simulated/floor/plating, +/area/space) +"qgK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/rshull, +/area/space) +"qgZ" = ( +/obj/structure/railing/grey, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/unsimulated/fake_space, +/area/space) +"qhh" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_9" + }, +/turf/simulated/floor/tiled, +/area/space) +"qhl" = ( +/obj/mecha/medical/odysseus/old, +/turf/template_noop, +/area/space) +"qhK" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"qhP" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7 + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = -9; + pixel_y = -7 + }, +/turf/simulated/floor/plating, +/area/space) +"qhV" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet, +/area/space) +"qio" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating/external, +/area/space) +"qjE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"qjW" = ( +/obj/machinery/robotic_fabricator, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"qkk" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/machinery/power/apc/hyper{ + pixel_y = -24 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"qkq" = ( +/obj/structure/prop/alien/power, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qkG" = ( +/obj/machinery/vending/deluxe_boozeomat{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/wood/sif, +/area/space) +"qlc" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/obj/item/slimepotion/docility, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qlv" = ( +/obj/machinery/door/airlock/alien{ + name = "Tele-Room Mk1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qlE" = ( +/obj/structure/girder/displaced, +/turf/template_noop, +/area/space) +"qlX" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qmf" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"qmq" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"qmu" = ( +/obj/structure/bed/alien, +/turf/simulated/floor/cult, +/area/space) +"qmD" = ( +/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, +/obj/structure/curtain/black, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/space) +"qmI" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"qmW" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/blue, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qnL" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_state = "dispenser"; + name = "Drug-Dispenser"; + req_access = list(777) + }, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/device/sleevemate, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"qoi" = ( +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod) +"qoo" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"qpd" = ( +/obj/effect/rune, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qph" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"qpT" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"qpZ" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/random/maintenance/engineering, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"qqi" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/captain, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"qql" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/fans/hardlight/colorable{ + invisibility = 99 + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"qqu" = ( +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"qqx" = ( +/obj/structure/particle_accelerator/particle_emitter/center, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/turf/simulated/floor, +/area/space) +"qra" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"qrw" = ( +/obj/structure/railing/grey, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/unsimulated/fake_space, +/area/space) +"qrA" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/step_trigger/message{ + message = "Feels as if you are now going with the motions, your senses betray you as not only your body feels numb but your mind does so too. . ."; + once = 0 + }, +/turf/simulated/floor/gorefloor, +/area/space) +"qrB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"qsy" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qsz" = ( +/obj/structure/flora/pottedplant/xmas{ + anchored = 1 + }, +/turf/simulated/floor/tiled, +/area/space) +"qsA" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"qsG" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qsH" = ( +/obj/structure/flora/log1, +/turf/simulated/floor/beach/water, +/area/space) +"qsP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/gear_dispenser/suit_old, +/turf/simulated/floor/plating/external, +/area/space) +"qsX" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"qta" = ( +/obj/effect/fancy_shuttle/dropship, +/turf/template_noop, +/area/space) +"qtf" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand13" + }, +/area/space) +"qtj" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"qtl" = ( +/obj/structure/inflatable, +/turf/simulated/floor/plating, +/area/space) +"qtn" = ( +/obj/structure/particle_accelerator/particle_emitter/left{ + anchored = 1; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange/corner, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qtu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"qua" = ( +/obj/structure/loot_pile/maint, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"quT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 4; + id = "baby_mammoth_hatch"; + name = "Rear Hatch Control"; + pixel_x = -26; + req_access = null; + specialfunctions = 4 + }, +/obj/machinery/door/blast/regular/open{ + id = "baby_mammoth_blast"; + layer = 2.5; + name = "window blast shield" + }, +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "baby_mammoth_hatch"; + locked = 1; + name = "Rear Hatch" + }, +/turf/simulated/shuttle/plating, +/area/space) +"quX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"qvk" = ( +/obj/structure/prop/blackbox/xenofrigate, +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"qvm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"qvv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"qvw" = ( +/obj/machinery/door/airlock/alien{ + name = "Right-Wing Thrusters MK-2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qvO" = ( +/obj/mecha/combat/phazon/old, +/turf/template_noop, +/area/space) +"qwG" = ( +/obj/random/trash, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qwI" = ( +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"qwS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating/external, +/area/space) +"qxF" = ( +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"qxM" = ( +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"qyk" = ( +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/sign/poster/nanotrasen{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"qzw" = ( +/obj/item/device/multitool, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qzM" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qzT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"qAn" = ( +/obj/structure/prop/machine/gravygen, +/turf/template_noop, +/area/space) +"qAM" = ( +/obj/structure/table/standard, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"qAN" = ( +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"qBj" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shieldgen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/space) +"qBL" = ( +/obj/machinery/pointdefense, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"qBW" = ( +/obj/structure/bed/chair/bay/chair/padded/blue{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/purple, +/area/space) +"qCl" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/orangedouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"qCp" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qCM" = ( +/obj/machinery/door/airlock/alien{ + name = "Left-Wing Thrusters MK-1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qDh" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"qDo" = ( +/obj/structure/table/alien/blue, +/turf/simulated/shuttle/floor/black, +/area/space) +"qDs" = ( +/obj/random/maintenance, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"qDy" = ( +/obj/fire, +/turf/simulated/floor/lava, +/area/space) +"qDz" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/stripper_pole{ + pixel_y = 9 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -27 + }, +/obj/item/clothing/under/fluff/latexmaid{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/simulated/floor/wood, +/area/space) +"qDB" = ( +/obj/structure/disposalpipe/sortjunction/wildcard/flipped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"qDH" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors/weak{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod) +"qDJ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qEb" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/mime, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"qEu" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors, +/turf/simulated/shuttle/plating, +/area/space) +"qFb" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_x = 18; + pixel_y = 1; + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "Avalon-kitchen"; + layer = 3.3; + name = "Avalon Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"qFB" = ( +/obj/structure/flora/smallbould, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qFN" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"qFQ" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/salvageable/personal, +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"qFU" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/clipboard, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qGc" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/effect/floor_decal/techfloor/hole, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qGk" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"qGu" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"qGy" = ( +/obj/screen/alert/highpressure, +/turf/simulated/shuttle/wall, +/area/space) +"qGE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"qGF" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"qHF" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/lava, +/area/space) +"qHP" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/hyper{ + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_x = 25; + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"qIb" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"qIh" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer_1"; + power_setting = 20; + set_temperature = 73; + use_power = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"qIj" = ( +/obj/mecha/combat/fighter/allure{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"qIR" = ( +/obj/machinery/particle_accelerator/control_box, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qJA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/rnd{ + req_one_access = null + }, +/turf/simulated/floor/plating/external, +/area/space) +"qJE" = ( +/obj/effect/map_effect/beam_point/timer/electric, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qJF" = ( +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qJK" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/floor/tiled, +/area/space) +"qJY" = ( +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"qKl" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 1 + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/space) +"qKu" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating/external, +/area/space) +"qKy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"qLe" = ( +/obj/machinery/door/airlock/alien{ + name = "Right-Wing Thrusters MK-1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qLi" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/space) +"qLM" = ( +/obj/machinery/door/airlock/alien{ + name = "Ship Helm"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"qLY" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/power/tesla_coil, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qMn" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/tesla_coil/pre_mapped, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qMq" = ( +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "crglockdown"; + name = "Cargo Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/space) +"qMO" = ( +/obj/structure/flora/tree/jungle, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qMX" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"qNQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/dark, +/area/space) +"qOe" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"qOh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qOk" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/carp_plushie, +/obj/random/curseditem, +/obj/random/junk, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood, +/area/space) +"qOB" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/folder/red, +/obj/item/weapon/folder/blue{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/carpet, +/area/space) +"qPw" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/pizzavoucher, +/obj/item/toy/figure, +/turf/simulated/floor/wood, +/area/space) +"qPH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"qPM" = ( +/obj/structure/closet/crate, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/plating, +/area/space) +"qRk" = ( +/obj/structure/girder/reinforced, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"qRs" = ( +/obj/structure/table/survival_pod, +/obj/item/stack/telecrystal{ + amount = 150 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"qRE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/random/junk, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"qRJ" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/turf/template_noop, +/area/space) +"qRQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/space) +"qSf" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor, +/area/space) +"qSr" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"qSz" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"qSK" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"qSY" = ( +/obj/machinery/computer/ship/navigation{ + pixel_y = -12 + }, +/obj/structure/railing/grey{ + layer = 2; + pixel_x = 8 + }, +/obj/structure/railing/grey{ + layer = 2; + pixel_x = -8 + }, +/turf/unsimulated/fake_space, +/area/space) +"qTO" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor, +/area/space) +"qUq" = ( +/obj/structure/disposalpipe/broken{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"qUr" = ( +/obj/mecha/working/hoverpod/combatpod{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"qUS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/trash/material/metal, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qVa" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"qVp" = ( +/obj/effect/meteor/tunguska, +/turf/simulated/floor/lava, +/area/space) +"qVv" = ( +/obj/machinery/button/remote/blast_door{ + id = "SP-Cell"; + name = "Cell Door"; + pixel_x = 6; + pixel_y = -33; + req_one_access = list(2,4) + }, +/obj/machinery/button/flasher{ + id = "SP-Cell flash"; + name = "Cell Flash"; + pixel_x = 7; + pixel_y = -24; + req_access = list(2,4) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"qVH" = ( +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + id = "estrella_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"qWk" = ( +/obj/effect/decal/remains/mummy2, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qWl" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "estrella"; + name = "interior access button"; + pixel_y = 26 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/shuttle/plating, +/area/space) +"qWo" = ( +/obj/machinery/button/flasher{ + id = "slavecell2"; + pixel_y = 31 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qWs" = ( +/obj/structure/table/alien, +/obj/item/weapon/gun/energy/alien, +/obj/item/prop/alien/phasecoil, +/obj/item/clothing/suit/armor/alien/tank, +/obj/item/stack/material/diamond{ + amount = 15 + }, +/turf/simulated/floor/greengrid, +/area/space) +"qWR" = ( +/obj/machinery/sleeper/survival_pod, +/obj/machinery/cryopod{ + dir = 4; + pixel_x = 5; + pixel_y = -3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"qXb" = ( +/obj/machinery/washing_machine, +/obj/effect/floor_decal/industrial/outline, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"qXu" = ( +/obj/effect/fancy_shuttle/miner, +/turf/template_noop, +/area/space) +"qXA" = ( +/obj/effect/map_effect/interval/sound_emitter/punching, +/obj/effect/map_effect/interval/effect_emitter/smoke/fire, +/turf/simulated/floor/lava, +/area/space) +"qXI" = ( +/obj/structure/flora/tree/pine{ + desc = "A wondrous decorated Christmas tree. It has presents!"; + icon_state = "pinepresents" + }, +/turf/simulated/floor/tiled, +/area/space) +"qYd" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + icon_state = "map_vent_out"; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"qYi" = ( +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qYn" = ( +/obj/structure/disposalpipe/tagger/partial{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"qYy" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/machinery/button/windowtint{ + id = "h-kitchen"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/space) +"qYS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/particle_accelerator/power_box, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qZn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"qZt" = ( +/obj/structure/ledge{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"qZx" = ( +/obj/structure/closet/secure_closet/miner{ + pixel_x = 27 + }, +/obj/structure/bed/chair/bay/shuttle{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"qZK" = ( +/obj/random/trash_pile, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rav" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/smartfridge/survival_pod{ + pixel_y = 28 + }, +/obj/item/device/reagent_scanner, +/obj/item/device/mass_spectrometer/adv, +/obj/item/weapon/forensics/sample_kit/powder, +/obj/item/weapon/forensics/sample_kit, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/reagent_containers/spray/luminol, +/obj/item/weapon/storage/briefcase/crimekit, +/obj/item/weapon/storage/briefcase/crimekit, +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/storage/box/bodybags, +/obj/item/device/camera{ + desc = "A one use - polaroid camera. 30 photos left."; + name = "detectives camera"; + pictures_left = 30; + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/device/camera_film, +/obj/item/weapon/storage/photo_album{ + pixel_y = -10 + }, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/device/flash, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"raz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"raE" = ( +/obj/machinery/flasher{ + id = "exaroom1"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/space) +"rbc" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rbL" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"rbR" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_x = 1; + pixel_y = 17 + }, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"rcj" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/table/reinforced, +/obj/machinery/door/window/northright{ + dir = 4; + name = "Medical booth" + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"rcA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"rcE" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"rcM" = ( +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"rcS" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 2; + icon_state = "32-2" + }, +/turf/simulated/floor/plating, +/area/space) +"rdl" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood, +/area/space) +"rdE" = ( +/obj/machinery/power/singularity_beacon/syndicate, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rdF" = ( +/obj/effect/effect/confetti, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rdP" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/glass/bucket{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/weapon/reagent_containers/glass/bucket{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/structure/sink/kitchen{ + layer = 1; + pixel_y = 12 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"reb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"rer" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"reE" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"reF" = ( +/obj/machinery/vending/security, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"reM" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"reP" = ( +/obj/item/toy/xmastree, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rfi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "exaroom6"; + pixel_y = 31 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"rfK" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/table/reinforced{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/weapon/paper_bin{ + pixel_x = 9 + }, +/obj/machinery/vending/loadout/uniform{ + pixel_x = -5 + }, +/obj/item/weapon/pen{ + pixel_x = 11; + pixel_y = -3 + }, +/obj/item/weapon/pen{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"rfR" = ( +/obj/machinery/the_singularitygen, +/turf/simulated/floor/airless, +/area/space) +"rgj" = ( +/obj/machinery/vending/engivend{ + emagged = 1 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"rgl" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"rgp" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"rgu" = ( +/obj/item/weapon/cell/high/empty, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"rgx" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"rgV" = ( +/obj/structure/flora/pumpkin/carved, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rhN" = ( +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"rhV" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"rie" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"rjk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 5"; + id_tag = "Avalon-room5" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rjm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/floor/plating, +/area/space) +"rjM" = ( +/obj/structure/flora/lily2, +/turf/simulated/floor/beach/water, +/area/space) +"rjR" = ( +/obj/effect/weaversilk/trap, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rjY" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/computer/rcon{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"rkd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rkD" = ( +/obj/item/prop/alien/phasecoil, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rkK" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rlv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/external/glass{ + name = "Exterior Airlock Access"; + id_tag = "Avalon_engine_airlock_exterior" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor, +/area/space) +"rlV" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"rma" = ( +/obj/machinery/power/emitter/gyrotron, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rmd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; + name = "Stained sheet of paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"rmv" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rmz" = ( +/obj/structure/table/alien/blue, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/weapon/paper/alien, +/obj/item/weapon/cell/device/weapon/recharge/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rng" = ( +/obj/machinery/button/windowtint{ + id = "exam2"; + pixel_y = 24 + }, +/turf/simulated/floor, +/area/space) +"rnp" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"rnA" = ( +/obj/structure/table/alien/blue, +/obj/item/prop/alien/junk, +/obj/item/weapon/paper/alien, +/obj/item/clothing/head/helmet/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"rnJ" = ( +/obj/structure/prop/alien/computer/camera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rnQ" = ( +/obj/random/maintenance/security, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"rnS" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rnW" = ( +/obj/structure/disposalpipe/broken{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"roD" = ( +/obj/structure/table/alien, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"roQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rpj" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"rpz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/random/mob/robotic/hivebot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rqE" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"rqZ" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/space) +"rra" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"rry" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"rrB" = ( +/obj/structure/loot_pile/mecha, +/turf/simulated/floor/plating, +/area/space) +"rrI" = ( +/obj/effect/overmap/visitable/ship/landable/stargazer, +/turf/simulated/shuttle/floor/black, +/area/space) +"rse" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"rsg" = ( +/obj/structure/closet/walllocker_double/kitchen/south{ + name = "Ration Cabinet" + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"rsj" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/random/trash, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rsm" = ( +/obj/structure/cable/blue, +/turf/simulated/floor/plating, +/area/space) +"rsH" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"rsU" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/stock_parts/scanning_module/adv{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/stock_parts/scanning_module/adv{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/stock_parts/micro_laser/high, +/obj/item/weapon/stock_parts/micro_laser/high, +/obj/item/weapon/stock_parts/matter_bin/adv, +/obj/item/weapon/stock_parts/matter_bin/adv, +/obj/item/weapon/stock_parts/manipulator/hyper, +/obj/item/weapon/stock_parts/manipulator/hyper, +/obj/item/weapon/stock_parts/capacitor/adv, +/obj/item/weapon/stock_parts/capacitor/adv, +/turf/simulated/shuttle/floor/purple, +/area/space) +"rtg" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"rtj" = ( +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"rtK" = ( +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"run" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/briefcase/inflatable{ + pixel_y = 3 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/pizzavoucher, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"ruH" = ( +/obj/machinery/power/shield_generator/charged{ + field_radius = 8; + initial_shield_modes = 2153; + target_radius = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8"; + dir = 2 + }, +/turf/simulated/floor/bluegrid, +/area/space) +"rve" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"rvE" = ( +/obj/item/weapon/oar{ + desc = "Used to provide propulsion to a space ship."; + force = 50; + name = "Alien oar"; + throw_range = 10; + throw_speed = 5; + throwforce = 30 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"rvJ" = ( +/obj/machinery/vending/deluxe_boozeomat{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rwf" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"rwk" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rwy" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod{ + locked = 1 + }, +/obj/effect/floor_decal/industrial/danger/full, +/obj/effect/blocker, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"rwD" = ( +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/tiled, +/area/space) +"rwF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/shuttle/window, +/obj/machinery/door/firedoor/glass, +/turf/simulated/shuttle/plating, +/area/space) +"rwP" = ( +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor, +/area/space) +"rwS" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"ryr" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"ryw" = ( +/obj/structure/barricade/cutout/cultist, +/turf/simulated/floor/cult, +/area/space) +"ryG" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 26 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"ryU" = ( +/obj/machinery/button/flasher{ + id = "auctionroom"; + pixel_y = 31 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"rzo" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rzu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rAc" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/shuttle/plating, +/area/space) +"rAf" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"rAt" = ( +/obj/structure/sink/countertop{ + pixel_y = 20 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"rAu" = ( +/obj/structure/plasticflaps, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rAM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double{ + pixel_y = 6 + }, +/obj/item/weapon/tank/emergency/oxygen/double{ + pixel_y = 6 + }, +/obj/item/weapon/tank/emergency/oxygen/double{ + pixel_y = 6 + }, +/obj/item/weapon/tank/emergency/oxygen/double{ + pixel_y = 6 + }, +/obj/item/weapon/tank/emergency/oxygen/double{ + pixel_y = 6 + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"rBa" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rBt" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/space) +"rBH" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"rBI" = ( +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"rBX" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/red, +/area/survivalpod) +"rCQ" = ( +/obj/structure/salvageable/server, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"rDe" = ( +/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rDh" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/machinery/light/poi, +/turf/simulated/floor/carpet, +/area/space) +"rDl" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/grass, +/area/space) +"rDs" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/space) +"rDA" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"rDN" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/red, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"rDO" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"rEb" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"rEd" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/weapon/ore/diamond, +/obj/item/weapon/ore/gold, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/clothing/head/sombrero, +/obj/item/clothing/head/sombrero, +/obj/item/clothing/suit/poncho, +/obj/item/clothing/accessory/poncho/thermal/red, +/obj/item/clothing/accessory/poncho/thermal/security, +/obj/item/clothing/accessory/poncho/thermal/green, +/obj/item/clothing/accessory/poncho/red, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/toy/bosunwhistle/fluff/strix, +/obj/item/weapon/blobcore_chunk, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/wood, +/area/space) +"rFe" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/plating, +/area/space) +"rFv" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/plating, +/area/space) +"rFI" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"rFR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating/external, +/area/space) +"rFW" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8"; + dir = 2 + }, +/turf/simulated/floor/airless, +/area/space) +"rGv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rGC" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 8 + }, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/shuttle/floor/alien, +/area/space) +"rGT" = ( +/obj/structure/loot_pile/surface/alien/medical, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rHf" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/space) +"rHI" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"rHS" = ( +/obj/structure/table/fancyblack, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/obj/item/device/paicard, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"rJp" = ( +/obj/random/junk, +/turf/simulated/floor/plating/external, +/area/space) +"rJs" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor/plating, +/area/space) +"rKs" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"rKE" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"rKI" = ( +/obj/structure/window/reinforced/survival_pod{ + density = 0; + dir = 9; + icon_state = "pwindow" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"rLa" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"rLf" = ( +/obj/structure/table/glass, +/obj/item/device/defib_kit/loaded, +/obj/structure/closet/walllocker_double/medical/south, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/weapon/storage/firstaid/adv, +/turf/simulated/shuttle/floor/white, +/area/space) +"rLz" = ( +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rLB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/button/remote/airlock{ + id = "Avalon-room3"; + name = "Room 3 Bolt Control"; + pixel_y = 29; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"rNl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"rNR" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"rNT" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"rOx" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"rOE" = ( +/obj/structure/flora/bboulder1, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rOH" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"rPt" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"rPx" = ( +/obj/effect/floor_decal/techfloor/orange/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/molten_item, +/turf/simulated/floor/plating, +/area/space) +"rPz" = ( +/obj/machinery/light/small/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rQd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -28 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"rQn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "stargazer"; + pixel_y = 26; + tag_airpump = "stargazer_pump"; + tag_chamber_sensor = "stargazer_sensor"; + tag_exterior_door = "stargazer_outer"; + tag_interior_door = "stargazer_inner" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "stargazer_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"rQS" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"rQX" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/template_noop, +/area/space) +"rRf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"rSk" = ( +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"rTg" = ( +/obj/structure/filingcabinet/medical{ + desc = "A large cabinet with hard copy medical records."; + name = "Medical Records" + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/purple, +/area/space) +"rTh" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/light/poi, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"rTB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rTZ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rUy" = ( +/obj/structure/simple_door/resin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"rUz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/double{ + dir = 8; + name = "Boardroom"; + req_access = list(19) + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"rUN" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors/weak, +/turf/simulated/shuttle/plating, +/area/space) +"rVe" = ( +/turf/simulated/wall/r_wall, +/area/space) +"rVg" = ( +/obj/effect/fancy_shuttle/orangeline, +/turf/template_noop, +/area/space) +"rVw" = ( +/turf/simulated/floor/carpet/turcarpet, +/area/space) +"rVV" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"rWi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"rWD" = ( +/obj/structure/prop/transmitter, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"rWK" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, +/turf/simulated/floor/plating, +/area/space) +"rXc" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rXt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"rXu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"rXD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"rYB" = ( +/obj/structure/curtain/open/privacy, +/turf/simulated/shuttle/floor/white, +/area/space) +"rYF" = ( +/obj/structure/fans/hardlight, +/turf/template_noop, +/area/space) +"rYN" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/space) +"rYP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 8; + name = "Air to Distro" + }, +/turf/simulated/floor, +/area/space) +"rZe" = ( +/obj/machinery/vending/nifsoft_shop{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"rZr" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumbath" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"rZM" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/turf/simulated/floor/airless, +/area/space) +"say" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"saC" = ( +/obj/machinery/porta_turret/alien{ + faction = "hivebot" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"saK" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/power/emitter/gyrotron/anchored{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sbq" = ( +/obj/machinery/computer/ship/disperser{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"sbz" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"sbA" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"scE" = ( +/obj/machinery/media/jukebox/casinojukebox, +/turf/simulated/floor/wood/sif, +/area/space) +"scN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"scR" = ( +/obj/machinery/smartfridge/survival_pod{ + name = "Advanced storage" + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/device/t_scanner, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/geiger, +/obj/item/device/geiger, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/gps{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/scanning_module, +/obj/item/weapon/stock_parts/scanning_module, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/turf/simulated/shuttle/floor/purple, +/area/space) +"scS" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/random/mob/robotic/hivebot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"scU" = ( +/obj/effect/decal/cleanable/blood/gibs{ + color = "red"; + icon_state = "gib2_flesh" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sdi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"sdS" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/full{ + pixel_y = 5 + }, +/obj/item/device/radio/intercom{ + desc = "Talk... listen through this."; + name = "Station Intercom (Brig Radio)"; + pixel_y = -21; + wires = 7 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"seb" = ( +/obj/machinery/atmospherics/binary/pump/on, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"seB" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/space) +"seK" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "SP-Cell2"; + name = "Cell Door"; + pixel_x = -25; + pixel_y = 8; + req_one_access = list(2,4) + }, +/obj/structure/closet/walllocker_double/survival/south, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"seL" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"seO" = ( +/obj/machinery/gateway/brass{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"seP" = ( +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"sfG" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/plasteel, +/turf/simulated/floor, +/area/space) +"sgJ" = ( +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"sgW" = ( +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"shk" = ( +/obj/item/weapon/antag_spawner/syndicate_drone/combat_medic, +/turf/template_noop, +/area/space) +"shx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/dark, +/area/space) +"shE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"shZ" = ( +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 8; + id = "echidna_hatch"; + name = "Rear Hatch Control"; + pixel_x = 26; + req_access = list(67); + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"sij" = ( +/obj/effect/alien/weeds, +/turf/template_noop, +/area/space) +"siq" = ( +/obj/machinery/particle_accelerator/control_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"six" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/space) +"siy" = ( +/obj/structure/largecrate/animal/catgirl, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"siL" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"siU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"siX" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "smartfridge"; + icon_contents = "boxes"; + icon_state = "smartfridge"; + name = "Advanced storage"; + pixel_y = -1 + }, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/bee_smoker, +/obj/item/bee_smoker, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/device/analyzer/plant_analyzer, +/obj/item/device/analyzer/plant_analyzer, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/head/greenbandana, +/obj/item/clothing/head/greenbandana, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/tool/wirecutters/clippers/trimmers, +/obj/item/weapon/tool/wirecutters/clippers/trimmers, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"siZ" = ( +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/turf/simulated/floor, +/area/space) +"sjc" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sjB" = ( +/obj/item/stolenpackage, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sjH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sjS" = ( +/obj/structure/flora/tree/pine/xmas, +/turf/simulated/floor/tiled, +/area/space) +"sjU" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"sjW" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"skp" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"skr" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"skT" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 1 + }, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/airless, +/area/space) +"skV" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"smd" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/closet/jcloset, +/obj/item/weapon/mop, +/obj/structure/mopbucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/simulated/shuttle/plating, +/area/space) +"snk" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"snv" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + frequency = 1380; + icon_state = "door_locked"; + id_tag = "estrella_outer"; + locked = 1; + name = "External Access" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/space) +"snB" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"snJ" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"snW" = ( +/obj/machinery/atmospherics/omni/atmos_filter{ + name = "CO2 Filter"; + tag_east = 2; + tag_north = 1; + tag_south = 5 + }, +/turf/simulated/floor, +/area/space) +"sof" = ( +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -30 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"sou" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/kitchen/rollingpin, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/white, +/area/space) +"soE" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"spj" = ( +/obj/machinery/vending/security/yw{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777); + req_log_access = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"spE" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"sqL" = ( +/obj/structure/bed/chair, +/obj/effect/alien/weeds, +/obj/effect/gibspawner/human, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"srA" = ( +/obj/mecha/combat/scarab, +/turf/template_noop, +/area/space) +"srZ" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "stargazer_outer"; + name = "External Access" + }, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "stargazer"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ssc" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/space) +"ssp" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/item/weapon/packageWrap, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ssw" = ( +/obj/effect/floor_decal/flesh, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ssE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ssV" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"stc" = ( +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/turf/simulated/shuttle/plating, +/area/space) +"stl" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"stU" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/item/weapon/clipboard, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"sud" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper_bin, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"sus" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/space) +"suu" = ( +/turf/simulated/floor/beach/sand, +/area/space) +"suw" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"suG" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"suK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"svC" = ( +/obj/machinery/light, +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"swc" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"swk" = ( +/obj/effect/gibspawner/human, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"swv" = ( +/obj/structure/shuttle/engine/router, +/turf/simulated/shuttle/wall, +/area/space) +"swH" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/shuttle/plating, +/area/space) +"sxf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"sxJ" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Phoron to Connector" + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"syf" = ( +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"sym" = ( +/obj/effect/gibspawner, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"syv" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/template_noop, +/area/space) +"syO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"syR" = ( +/obj/machinery/power/generator{ + anchored = 1; + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"syZ" = ( +/obj/structure/table/standard, +/obj/item/clothing/accessory/stethoscope, +/obj/item/device/flashlight/pen, +/obj/item/clothing/glasses/hud/health, +/turf/simulated/floor/tiled/white, +/area/space) +"szl" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"szm" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"szx" = ( +/obj/effect/meteor/irradiated, +/turf/template_noop, +/area/space) +"szS" = ( +/obj/machinery/shower, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"szT" = ( +/obj/effect/alien/weeds/node, +/turf/simulated/floor, +/area/space) +"szW" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sAg" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"sAj" = ( +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/turf/simulated/floor/wood/sif, +/area/space) +"sAq" = ( +/obj/structure/table/sifwoodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"sAt" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled, +/area/space) +"sBp" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"sCm" = ( +/obj/structure/stairs/bottom, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"sCp" = ( +/obj/machinery/feeder, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sCs" = ( +/turf/simulated/wall/dungeon, +/area/space) +"sCv" = ( +/obj/machinery/mineral/stacking_unit_console, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"sDg" = ( +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/weapon/storage/firstaid, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/roller, +/obj/item/device/defib_kit/loaded, +/turf/simulated/shuttle/floor/white, +/area/space) +"sDx" = ( +/obj/structure/bed/double, +/obj/item/weapon/bedsheet/yellowdouble, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"sDP" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/space) +"sEo" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"sEH" = ( +/obj/structure/hull_corner/long_vert{ + dir = 9 + }, +/turf/template_noop, +/area/space) +"sEO" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sET" = ( +/obj/item/weapon/pen/fountain, +/turf/simulated/floor/wood, +/area/space) +"sFL" = ( +/obj/structure/window/basic{ + dir = 8 + }, +/obj/structure/toilet{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"sFZ" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "shelterblast"; + name = "Shelter Blast Doors"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"sGy" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand11" + }, +/area/space) +"sGG" = ( +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/prop/lock/projectile{ + pixel_y = 6 + }, +/turf/simulated/floor/greengrid, +/area/space) +"sGH" = ( +/obj/fire, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sHg" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 1 + }, +/obj/machinery/power/apc/hyper{ + dir = 4; + pixel_x = 23 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"sHj" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"sHK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"sIx" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"sIY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"sJe" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"sJh" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sJq" = ( +/obj/machinery/autolathe, +/obj/item/weapon/rcd/advanced/loaded{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/weapon/rcd_ammo/large, +/obj/item/weapon/rcd_ammo/large, +/turf/simulated/floor/plating, +/area/space) +"sJA" = ( +/obj/machinery/telecomms/allinone, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"sJB" = ( +/obj/item/clothing/accessory/solgov/rank/fleet/flag, +/turf/template_noop, +/area/space) +"sJT" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"sKd" = ( +/obj/effect/effect/steam, +/turf/simulated/floor/holofloor/beach/coastline, +/area/space) +"sKi" = ( +/obj/machinery/gibber/autogibber{ + emagged = 1 + }, +/turf/simulated/floor, +/area/space) +"sKv" = ( +/obj/machinery/disposal/wall{ + dir = 8; + pixel_x = 35; + pixel_y = 0 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"sLy" = ( +/obj/structure/salvageable/server, +/turf/simulated/floor/plating/external, +/area/space) +"sMk" = ( +/obj/structure/particle_accelerator/fuel_chamber{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sMD" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"sNj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"sNx" = ( +/turf/simulated/floor/carpet/gaycarpet, +/area/space) +"sNB" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 1 + }, +/turf/template_noop, +/area/space) +"sNM" = ( +/obj/machinery/light/poi, +/turf/simulated/floor/wood, +/area/space) +"sOt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"sOv" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/alien/weeds, +/obj/machinery/light/small/emergency/flicker{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"sOy" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"sPn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"sPs" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 1"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"sPA" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"sQq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/floor/plating, +/area/space) +"sQC" = ( +/obj/machinery/computer/shuttle_control, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"sQJ" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "SP-CargoHatch"; + locked = 1; + name = "Rear Hatch" + }, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 4; + id = "SP-CargoHatch"; + name = "Rear Hatch Control"; + pixel_x = -26; + req_access = null; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"sQP" = ( +/obj/machinery/light/poi, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sQR" = ( +/obj/structure/table/darkglass, +/obj/item/device/binoculars, +/obj/item/device/megaphone/super, +/obj/item/device/binoculars, +/obj/machinery/button/windowtint{ + id = "atriumeast"; + pixel_x = -22 + }, +/obj/machinery/button/flasher{ + id = "atriumflash"; + pixel_x = -30 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"sRn" = ( +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/material/phoron{ + amount = 25 + }, +/turf/simulated/floor/plating, +/area/space) +"sRs" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"sRL" = ( +/obj/structure/prop/alien/pod, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sRR" = ( +/obj/structure/ghost_pod/manual/lost_drone/dogborg, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sRY" = ( +/obj/structure/fans/hardlight/colorable{ + invisibility = 99 + }, +/turf/simulated/floor/gorefloor, +/area/space) +"sSo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"sSx" = ( +/obj/structure/bed/chair/bay/comfy{ + dir = 4; + pixel_x = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"sSC" = ( +/turf/simulated/floor/gorefloor, +/area/space) +"sTq" = ( +/obj/structure/constructshell/cult, +/turf/simulated/floor/gorefloor2, +/area/space) +"sTs" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Pole Dance Room" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"sTT" = ( +/obj/machinery/vr_sleeper/alien/random_replicant, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"sTV" = ( +/obj/item/weapon/photo, +/obj/item/weapon/photo{ + pixel_x = 4 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/space) +"sUl" = ( +/obj/structure/window/plastitanium/full, +/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/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "stargazer_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"sUD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"sUE" = ( +/turf/simulated/floor/tiled/monotile, +/area/space) +"sVo" = ( +/mob/living/simple_mob/mechanical/hivebot/swarm, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sVu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"sVQ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 6; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"sVY" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + dir = 4; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/device/nif/bad, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/implantcase/chem, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/obj/item/weapon/disk/nifsoft/compliance, +/turf/simulated/shuttle/floor/white, +/area/space) +"sWr" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"sWv" = ( +/turf/simulated/floor/water/beach, +/area/space) +"sXy" = ( +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"sXB" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"sYn" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/characters, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/space) +"sYC" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"sYI" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/space) +"sYT" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/blue, +/area/space) +"sZh" = ( +/obj/structure/table/reinforced, +/obj/machinery/cash_register/civilian{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"sZq" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "stargazer_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"sZt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/structure/shuttle/engine/router, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"sZv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = "baby_mammoth_pump" + }, +/obj/machinery/light, +/turf/simulated/shuttle/plating, +/area/space) +"sZz" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"sZF" = ( +/obj/structure/closet/cabinet, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/toy, +/obj/random/toy, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/turf/simulated/floor/wood, +/area/space) +"sZG" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 25 + }, +/turf/simulated/shuttle/plating, +/area/space) +"tai" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tav" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/shield_projector/line, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"taA" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tbe" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/alien/tank, +/obj/item/clothing/head/helmet/alien/tank, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"tbk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/alien/blue, +/area/space) +"tbt" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/space) +"tbW" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/simulated/floor/tiled/white, +/area/space) +"tci" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"tcp" = ( +/obj/structure/flora/lily3, +/turf/simulated/floor/beach/water, +/area/space) +"tcq" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"tdb" = ( +/obj/machinery/vr_sleeper/alien/random_replicant, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"tdk" = ( +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"tdq" = ( +/obj/machinery/button/windowtint{ + id = "exam1"; + pixel_y = 24 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"tdv" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/item/slimepotion/docility, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tdA" = ( +/turf/simulated/floor/flock, +/area/space) +"tdE" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"tdT" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/space) +"tea" = ( +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Starboard Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"teb" = ( +/obj/item/weapon/book/manual/barman_recipes, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/structure/table/gamblingtable, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"tej" = ( +/obj/structure/table/darkglass, +/obj/item/device/binoculars, +/turf/simulated/floor/wood/sif, +/area/space) +"tek" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, +/obj/item/weapon/circuitboard/mecha/imperion/phasing, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tep" = ( +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"tet" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_x = -32; + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"teP" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 5"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"tfg" = ( +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"tfy" = ( +/obj/structure/disposalpipe/sortjunction/untagged{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"tfz" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/survival/west, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"tfL" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/clipboard, +/obj/item/weapon/folder/white, +/obj/item/weapon/pen, +/obj/item/weapon/reagent_containers/dropper{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"thf" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/effect/alien/weeds, +/obj/item/stolenpackage, +/obj/item/organ/internal/fruitgland, +/obj/item/organ/internal/intestine/xeno, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"thm" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam2" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"tji" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/reinforced, +/area/space) +"tjy" = ( +/obj/machinery/exonet_node/map, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tjB" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/plating/external, +/area/space) +"tjE" = ( +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "shelterblast"; + name = "Shelter Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tjR" = ( +/obj/machinery/door/airlock/alien{ + name = "Expedition Storage"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"tkp" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tkz" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"tkL" = ( +/turf/simulated/floor/grass2, +/area/space) +"tlj" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell"; + name = "Cell Locker" + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tln" = ( +/obj/structure/flora/grass/brown, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tlr" = ( +/obj/item/weapon/a_gift, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tly" = ( +/obj/structure/table/sifwoodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet/blue, +/area/space) +"tmc" = ( +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor/alien, +/area/space) +"tmJ" = ( +/obj/machinery/computer/teleporter{ + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tmS" = ( +/turf/simulated/floor/outdoors/ironsand{ + icon_state = "ironsand10" + }, +/area/space) +"tmV" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"tmZ" = ( +/obj/structure/closet/secure_closet/engineering_welding{ + req_access = null + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"tnk" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/dark, +/area/space) +"tnu" = ( +/obj/machinery/implantchair, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"tof" = ( +/obj/item/weapon/surgical/circular_saw/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"tos" = ( +/turf/template_noop, +/area/survivalpod/superpose/CultShip) +"toV" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/space) +"tpd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"tpT" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tql" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"tqw" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "fix0_9" + }, +/turf/simulated/floor/tiled, +/area/space) +"trQ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/power/smes/buildable, +/turf/simulated/floor/bluegrid, +/area/space) +"trU" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/turf/template_noop, +/area/space) +"tsL" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ttn" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"ttu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/obj/machinery/vending/wallmed1/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ttE" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ttK" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/black, +/area/space) +"tul" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tuD" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"tuL" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"tuP" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -26 + }, +/turf/simulated/floor, +/area/space) +"tva" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tvj" = ( +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"tvv" = ( +/obj/structure/fans, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tvJ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/bed/chair/bay/shuttle, +/obj/structure/sign/poster/nanotrasen{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"tvM" = ( +/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/simulated/floor/plating, +/area/space) +"twa" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"twf" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/fusion_fuel_injector/mapped, +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"twq" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/telecomms/relay/preset/ruskie, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"twE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/grounding_rod/pre_mapped{ + item_state = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"twL" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"twS" = ( +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"twZ" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"txL" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"txV" = ( +/obj/machinery/power/emitter{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/airless, +/area/space) +"txW" = ( +/obj/machinery/field_generator, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tyo" = ( +/obj/machinery/flasher{ + id = "exaroom4"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/carpet/blucarpet, +/area/space) +"tyT" = ( +/obj/structure/cable{ + d1 = 6; + d2 = 8; + icon_state = "6-8" + }, +/turf/simulated/floor/plating, +/area/space) +"tyX" = ( +/obj/random/crate, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tzn" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/machinery/washing_machine{ + pixel_x = 2; + pixel_y = 18 + }, +/obj/item/weapon/storage/laundry_basket{ + pixel_x = -1; + pixel_y = -7 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tzK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/floor/plating, +/area/space) +"tzS" = ( +/obj/structure/loot_pile/surface, +/turf/simulated/floor/plating, +/area/space) +"tAp" = ( +/obj/structure/bed/chair/sofa/black, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/space) +"tAt" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tAG" = ( +/obj/effect/gateway/active/cult, +/turf/simulated/floor/gorefloor2, +/area/space) +"tAH" = ( +/obj/item/capture_crystal/cass, +/turf/template_noop, +/area/space) +"tAW" = ( +/obj/structure/bed/alien, +/turf/simulated/floor, +/area/space) +"tBb" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"tBS" = ( +/obj/machinery/door/window{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"tBU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 1 + }, +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/turf/simulated/floor, +/area/space) +"tCk" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/projectile/automatic/sts35, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/sniperrifle, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"tCD" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/storage/belt/utility/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"tDK" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/full, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tDR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"tEo" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/purple, +/area/space) +"tEz" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/space) +"tEQ" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/space) +"tFb" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"tFw" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/cryofeed{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"tFI" = ( +/obj/item/weapon/stool/baystool/padded{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tFT" = ( +/obj/machinery/teleport/station{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) +"tGb" = ( +/turf/simulated/floor/redgrid/off, +/area/space) +"tGh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Kodiak Shuttle Bay" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tGA" = ( +/obj/machinery/porta_turret/industrial/military, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tGJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tGL" = ( +/obj/machinery/power/apc/hyper{ + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/space) +"tGV" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"tHc" = ( +/obj/item/weapon/portable_destructive_analyzer, +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"tHh" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tHq" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central2, +/turf/simulated/floor/tiled, +/area/space) +"tHJ" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/lava, +/area/space) +"tIr" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + id = "stargazer_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"tIv" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tII" = ( +/obj/effect/map_effect/beam_point, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tIM" = ( +/obj/machinery/power/grounding_rod, +/turf/simulated/floor, +/area/space) +"tIT" = ( +/obj/structure/noticeboard/anomaly, +/turf/simulated/wall/skipjack, +/area/space) +"tJg" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tJi" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/template_noop, +/area/space) +"tJn" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/flame/candle/candelabra, +/turf/simulated/floor/wood/sif, +/area/space) +"tJF" = ( +/turf/simulated/floor/grass, +/area/space) +"tJP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"tKm" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/sink{ + pixel_y = 16 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tKn" = ( +/obj/structure/table, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/wood, +/area/space) +"tKu" = ( +/obj/random, +/turf/simulated/floor/plating, +/area/space) +"tKy" = ( +/obj/machinery/light/small/flicker, +/obj/structure/closet/alien, +/obj/item/device/perfect_tele_beacon/stationary{ + tele_name = "Unknown"; + tele_network = "abd2" + }, +/turf/simulated/floor/cult, +/area/space) +"tKS" = ( +/obj/structure/prop/fake_ai{ + name = "P0ps1ck13" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"tLb" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tLc" = ( +/obj/item/sniper_rifle_part/barrel, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tLG" = ( +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"tLU" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"tLX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "exaroom4"; + pixel_y = 31 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"tMj" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"tMW" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"tMY" = ( +/obj/structure/closet/crate/secure/engineering, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/glass/phoronrglass{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"tNh" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/cee, +/obj/machinery/light, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "needle_sensor"; + pixel_x = -28; + pixel_y = -1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"tNr" = ( +/obj/structure/cliff/automatic{ + dir = 2 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tNF" = ( +/obj/structure/table, +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/storage/backpack/holding, +/turf/simulated/floor, +/area/space) +"tNR" = ( +/obj/structure/sign/nosmoking_2{ + pixel_x = 30 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"tNU" = ( +/obj/effect/wingrille_spawn/reinforced, +/obj/structure/fans/hardlight, +/turf/simulated/floor/plating/external, +/area/space) +"tOh" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"tOm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance/common, +/turf/simulated/floor/plating/external, +/area/space) +"tOC" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/weapon/cell/device/weapon/recharge/alien/omni/empty, +/obj/item/weapon/gun/energy/laser/sleek, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tOR" = ( +/obj/effect/alien/weeds, +/obj/structure/bed/nest, +/turf/simulated/floor, +/area/space) +"tOZ" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"tPk" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"tPy" = ( +/obj/machinery/telecomms/allinone, +/turf/template_noop, +/area/space) +"tPB" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/item/weapon/paper/alien, +/turf/simulated/shuttle/floor/alien, +/area/space) +"tQT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tQW" = ( +/obj/structure/prop/lock/projectile{ + pixel_y = 6 + }, +/turf/simulated/floor/dungeon, +/area/space) +"tRj" = ( +/obj/machinery/vending/tool, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tRD" = ( +/obj/structure/stripper_pole, +/turf/simulated/shuttle/floor/black, +/area/space) +"tRM" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"tRW" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/chemical_dispenser/ert/specialops/abductor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tSl" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/taser, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/vrlanguage, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/sprinter, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/shades, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/freedom, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/death_alarm, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implantcase/exile, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implanter, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/toolkit, +/obj/item/weapon/implantcase/armblade, +/obj/item/weapon/implantcase/armblade, +/obj/item/weapon/implantcase/armblade, +/obj/item/weapon/implantcase/armblade, +/obj/item/weapon/implantcase/armblade, +/obj/item/weapon/implantcase/armblade, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"tSz" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 1 + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/space) +"tTw" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"tTG" = ( +/obj/item/weapon/storage/firstaid, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"tTI" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"tTO" = ( +/obj/machinery/requests_console{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/space) +"tTX" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/door/blast/regular, +/turf/simulated/floor/tiled, +/area/space) +"tUf" = ( +/obj/structure/table/darkglass, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/wood/sif, +/area/space) +"tUO" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"tVj" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tVm" = ( +/obj/structure/closet/walllocker_double/kitchen/north{ + dir = 8; + name = "Ration Cabinet"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"tVo" = ( +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tVz" = ( +/obj/structure/window/basic, +/turf/simulated/floor/tiled, +/area/space) +"tWd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "estrella_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"tWJ" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 1; + icon_state = "door_locked"; + id_tag = "echidna_inner"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/plating, +/area/space) +"tXM" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"tXS" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tYv" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"tZC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"tZV" = ( +/obj/structure/reagent_dispensers/water_cooler/full{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"tZZ" = ( +/obj/machinery/shuttle_sensor, +/turf/simulated/shuttle/wall/hard_corner, +/area/space) +"uaK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/structure/closet/secure_closet/guncabinet{ + req_one_access = null + }, +/obj/item/clothing/head/helmet/combat/USDF, +/obj/item/clothing/head/helmet/combat/USDF, +/obj/item/clothing/suit/armor/combat/USDF, +/obj/item/clothing/suit/armor/combat/USDF, +/obj/item/device/flash, +/obj/item/device/flash, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"uaN" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/weapon/implanter/compressed, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uaT" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uaW" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"ube" = ( +/obj/structure/flora/pumpkin, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ubh" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"ubm" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"ucw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm/angled{ + dir = 8; + pixel_x = -22 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"ucx" = ( +/obj/machinery/atmospherics/omni/atmos_filter{ + name = "N2/O2 Filter"; + tag_east = 4; + tag_north = 3; + tag_south = 2; + tag_west = 1 + }, +/turf/simulated/floor, +/area/space) +"ucE" = ( +/turf/simulated/floor/plating, +/area/space) +"ucG" = ( +/obj/structure/prop/alien/pod/open, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ucI" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"ucM" = ( +/obj/machinery/conveyor_switch/oneway{ + convdir = -1; + id = "garbagetwo"; + name = "disposal coveyor" + }, +/turf/simulated/floor/cult, +/area/space) +"udp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/space) +"udB" = ( +/obj/machinery/computer/telescience{ + dir = 1; + distance_off = 0; + powerCoefficient = 25; + rotation_off = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"udE" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/voidcraft/survival_pod, +/obj/effect/floor_decal/industrial/danger/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "shelterblast"; + name = "Shelter Blast Doors"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"udM" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor, +/area/space) +"udP" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"udS" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/emitter{ + anchored = 1; + dir = 1; + state = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"udW" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/random/trash, +/turf/simulated/floor/wood, +/area/space) +"uez" = ( +/obj/effect/decal/remains/mummy1, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ueE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/teal, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ueP" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/ammo, +/obj/random/cigarettes, +/obj/random/contraband, +/obj/random/junk, +/obj/random/maintenance/security, +/turf/simulated/floor/wood, +/area/space) +"ufa" = ( +/obj/effect/alien/weeds, +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor, +/area/space) +"ufx" = ( +/obj/structure/table/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8; + icon_state = "pwindow" + }, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = 0 + }, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ufB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ufG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"ufH" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"ugd" = ( +/obj/structure/sign/mining/survival, +/turf/simulated/shuttle/wall/voidcraft/red, +/area/survivalpod) +"uge" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Unisex Bathroom" + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ugv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ugy" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Portside Lower Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"ugC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"ugN" = ( +/mob/living/simple_mob/animal/passive/cat/bones{ + desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; + name = "Felix" + }, +/turf/simulated/floor/wood, +/area/space) +"ugX" = ( +/obj/structure/cryofeed, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"uha" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"uhz" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uhJ" = ( +/obj/random/trash, +/turf/simulated/floor, +/area/space) +"uhN" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uhX" = ( +/turf/simulated/floor/carpet/blucarpet, +/area/space) +"uhZ" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/alien/weeds, +/obj/effect/gibspawner/human, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"uiT" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "19" + }, +/turf/template_noop, +/area/space) +"uiZ" = ( +/obj/screen/alert/highpressure, +/turf/template_noop, +/area/space) +"ujr" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"ujt" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/airlock/alien/blue/public, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"ujN" = ( +/obj/structure/closet/alien, +/obj/item/weapon/weldingtool/alien, +/obj/item/weapon/storage/belt/utility/alien/full, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ukD" = ( +/obj/random/junk, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"ulw" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ulP" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"ulT" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/space) +"ulZ" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/alarms_hidden{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/plating/external, +/area/space) +"umb" = ( +/obj/machinery/chem_master, +/turf/simulated/shuttle/floor/purple, +/area/space) +"umy" = ( +/obj/machinery/door/airlock/alien{ + name = "Medical"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"umH" = ( +/obj/structure/bed/double/padded, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/space) +"umS" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Upper Thruster One" + }, +/turf/simulated/floor, +/area/space) +"unA" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"unD" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"uog" = ( +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"uoi" = ( +/obj/structure/flora/grass/green, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uop" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"uoy" = ( +/turf/simulated/wall/solidrock, +/area/space) +"uoF" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uoH" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"uoQ" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + req_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"uoR" = ( +/obj/structure/simple_door/wood, +/obj/structure/sign/graffiti/pisoff, +/turf/simulated/floor/wood, +/area/space) +"upq" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"upK" = ( +/mob/living/simple_mob/mechanical/hivebot/swarm, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"upR" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/airless, +/area/space) +"uqx" = ( +/obj/effect/alien/weeds, +/obj/structure/mopbucket, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"uqP" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/space) +"urd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"usi" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/space) +"usw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/plating/external, +/area/space) +"usG" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"uty" = ( +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/glass/reinforced, +/area/space) +"utD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"utL" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/turf/simulated/floor, +/area/space) +"uue" = ( +/obj/structure/closet/cabinet{ + pixel_y = 20 + }, +/obj/item/weapon/implanter/sizecontrol, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/uranium, +/obj/item/weapon/ore/phoron, +/obj/item/weapon/ore/phoron, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/gold, +/obj/item/weapon/ore/diamond, +/obj/item/weapon/ore/marble, +/obj/item/weapon/ore/osmium, +/obj/item/weapon/ore/rutile, +/obj/item/toy/bosunwhistle/fluff/strix, +/obj/item/toy/character/wizard, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified, +/obj/item/weapon/fluff/squeezetoy, +/obj/item/weapon/fluff/zekewatch, +/obj/item/weapon/fluff/fidgetspinner/red, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/floor/wood, +/area/space) +"uuZ" = ( +/obj/item/weapon/spacecash/c1000, +/turf/template_noop, +/area/space) +"uvT" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"uvZ" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/carpet/gaycarpet, +/area/space) +"uwh" = ( +/mob/living/simple_mob/animal/space/alien/sentinel, +/obj/effect/alien/weeds, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"uwo" = ( +/obj/machinery/door/airlock/alien{ + name = "East Engine"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"uwz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"uwY" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "echidna_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "echidna"; + pixel_y = 26; + tag_airpump = "echidna_pump"; + tag_chamber_sensor = "echidna_sensor"; + tag_exterior_door = "echidna_outer"; + tag_interior_door = "echidna_inner" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/shuttle/plating, +/area/space) +"uyj" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/table/darkglass, +/obj/machinery/recharger{ + pixel_x = 6 + }, +/obj/machinery/recharger{ + pixel_x = -6 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"uyk" = ( +/obj/effect/alien/weeds, +/obj/effect/landmark/loot_spawn/low, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"uyJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uze" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "estrella"; + name = "exterior access button"; + pixel_y = 26 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id = "estrella_blast"; + layer = 2; + name = "window blast shield"; + open_layer = 2 + }, +/turf/simulated/shuttle/plating, +/area/space) +"uzj" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"uzD" = ( +/obj/item/weapon/spacecash/ewallet{ + worth = 750 + }, +/turf/template_noop, +/area/space) +"uzG" = ( +/obj/effect/catwalk_plated/white, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/template_noop, +/area/space) +"uzS" = ( +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"uAv" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -26 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"uAJ" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/box/matches{ + pixel_x = -4; + pixel_y = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"uBh" = ( +/obj/machinery/door/airlock/maintenance/command{ + req_one_access = null + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"uBn" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"uBz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 26 + }, +/turf/simulated/floor, +/area/space) +"uCg" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/space) +"uCl" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"uCq" = ( +/obj/machinery/atmospherics/omni/mixer{ + name = "Air Mixer"; + tag_north = 2; + tag_south = 1; + tag_south_con = 0.79; + tag_west = 1; + tag_west_con = 0.21 + }, +/turf/simulated/floor, +/area/space) +"uCt" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/tealcarpet, +/area/space) +"uCu" = ( +/obj/effect/fusion_em_field, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uDk" = ( +/obj/machinery/vr_sleeper/alien/beta_replicant, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uDW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"uEa" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/oracarpet, +/area/space) +"uEw" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/obj/effect/step_trigger/message{ + message = "Finally, you gaze upon a horror your sanity fails to understand. The numbness of your body fades as the sound of glass shattering fills your mind, the horrifying sensation of barbed wire tangling your body as every waking second you spend gazing upon this nightmare tightens those bonds. . . Is this what your mortal coil desires?. . ."; + once = 0 + }, +/turf/simulated/floor/gorefloor, +/area/space) +"uEA" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"uEJ" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi, +/obj/item/weapon/surgical/bonesetter, +/obj/item/weapon/bone/ribs, +/obj/item/weapon/bone/skull{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/simulated/floor, +/area/space) +"uEV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"uEX" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"uFN" = ( +/obj/item/weapon/reagent_containers/blood, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/deck/tarot, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/space) +"uFQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/weapon/implanter/adrenalin, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uGr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/space) +"uGy" = ( +/obj/structure/cliff/automatic{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uHp" = ( +/obj/machinery/atmospherics/pipe/tank/oxygen{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"uHw" = ( +/obj/structure/cryofeed, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uIa" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uIb" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2; + req_one_access = null + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uIp" = ( +/obj/effect/alien/weeds, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uIX" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"uJc" = ( +/obj/effect/map_effect/portal/master/side_b{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uJy" = ( +/obj/structure/table/survival_pod, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uKi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uKj" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/turf/simulated/floor/plating, +/area/space) +"uKH" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uKP" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uLe" = ( +/obj/structure/fans/hardlight/colorable{ + invisibility = 99 + }, +/turf/simulated/floor/gorefloor2, +/area/space) +"uLC" = ( +/obj/structure/largecrate/animal/wolfgirl, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uLN" = ( +/obj/structure/disposalpipe/sortjunction/wildcard{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"uMv" = ( +/obj/machinery/vending/foodfast, +/turf/simulated/shuttle/wall/voidcraft/survival, +/area/space) +"uMB" = ( +/obj/machinery/sleep_console, +/turf/simulated/shuttle/floor/white, +/area/space) +"uMC" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uMN" = ( +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/space) +"uMQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/space) +"uOg" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/shuttle/plating, +/area/space) +"uOr" = ( +/obj/machinery/light/small, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uOF" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uOO" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"uOR" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"uPa" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/space) +"uPc" = ( +/obj/machinery/telecomms/allinone/antag, +/turf/template_noop, +/area/space) +"uPd" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "4" + }, +/turf/template_noop, +/area/space) +"uPf" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor/plating, +/area/space) +"uPk" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uPr" = ( +/obj/structure/bonfire, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uPL" = ( +/obj/effect/landmark/loot_spawn/low, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uPN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"uPY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/maintenance/engi{ + req_one_access = null + }, +/turf/simulated/floor/plating/external, +/area/space) +"uQk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uQV" = ( +/obj/machinery/gear_dispenser/suit/autolok, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uRg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uRL" = ( +/obj/structure/cable{ + d2 = 10; + icon_state = "0-10" + }, +/turf/simulated/floor/plating, +/area/space) +"uRR" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + req_one_access = null + }, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/weapon/gun/energy/locked/frontier, +/obj/item/weapon/gun/energy/locked/frontier, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"uRU" = ( +/obj/structure/largecrate/animal/goat, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uRX" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/weapon/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"uSs" = ( +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"uSU" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"uTd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"uTg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"uTl" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uTE" = ( +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/item/device/radio/electropack, +/obj/item/clothing/accessory/collar/shock, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/turf/simulated/floor, +/area/space) +"uTP" = ( +/obj/effect/map_effect/portal/line/side_a, +/obj/effect/map_effect/perma_light/concentrated, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"uUF" = ( +/obj/effect/gibspawner/human/xenochimera, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"uUP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"uUV" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"uVk" = ( +/obj/structure/bed/chair/sofa/right/black, +/turf/simulated/floor/wood, +/area/space) +"uVs" = ( +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"uVO" = ( +/obj/mecha/working/ripley/firefighter, +/turf/template_noop, +/area/space) +"uWf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/space) +"uWm" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/space) +"uWA" = ( +/obj/machinery/the_singularitygen/tesla{ + anchored = 1; + pixel_y = 11 + }, +/obj/effect/floor_decal/industrial/danger/full, +/obj/effect/floor_decal/plaque{ + name = "Anchors" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uWE" = ( +/obj/structure/table/alien/blue, +/obj/machinery/chemical_dispenser/ert/specialops/abductor{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"uWI" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uWP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/random/junk, +/turf/simulated/floor/plating/external, +/area/space) +"uWR" = ( +/obj/machinery/disposal, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"uYC" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + name = "Avalon Boardroom Blast Door"; + id = "Avalon-boardroom" + }, +/turf/simulated/floor/reinforced, +/area/space) +"uYH" = ( +/obj/structure/table/darkglass, +/obj/machinery/recharger, +/turf/simulated/floor/carpet, +/area/space) +"uYZ" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"uZr" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"uZI" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"uZM" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + pixel_y = -32 + }, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"uZS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"vaq" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"var" = ( +/obj/machinery/light/spot, +/obj/structure/lattice, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"vaM" = ( +/obj/machinery/power/apc/hyper{ + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"vaU" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/techfloor/hole/right, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vbb" = ( +/obj/effect/alien/weeds/node, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"vbi" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo"; + pixel_x = -5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vbv" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor, +/area/space) +"vbw" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/structure/sign/poster/nanotrasen{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"vbJ" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/empty/phoron, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor, +/area/space) +"vbY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/closet/walllocker{ + dir = 8; + pixel_x = -32 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"vbZ" = ( +/turf/simulated/shuttle/wall/alien/no_join, +/area/space) +"vcp" = ( +/obj/structure/closet, +/turf/simulated/floor/wood, +/area/space) +"vct" = ( +/turf/simulated/floor/greengrid, +/area/space) +"vdT" = ( +/obj/singularity/narsie{ + l_move_time = 0; + move_self = 0; + move_speed = 0 + }, +/turf/simulated/floor/lava, +/area/space) +"vek" = ( +/obj/structure/table/bench/glass, +/obj/structure/closet/walllocker_double/survival/west, +/obj/item/clothing/under/swimsuit/stripper/stripper_pink, +/obj/item/clothing/mask/muzzle/ballgag/ringgag, +/turf/simulated/floor/wood, +/area/space) +"vet" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/space) +"veT" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + id = "exam6" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"vfo" = ( +/obj/structure/closet/toolcloset, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/device/flashlight, +/obj/item/weapon/storage/belt/utility/full/multitool, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/weapon/module/power_control, +/obj/item/weapon/module/cell_power, +/obj/item/weapon/module/card_reader, +/obj/item/weapon/module/id_auth, +/obj/item/weapon/storage/firstaid/regular, +/turf/simulated/floor/plating, +/area/space) +"vfH" = ( +/turf/simulated/shuttle/floor/darkred, +/area/space) +"vfO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vge" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vgF" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vgL" = ( +/obj/item/clothing/accessory/solgov/rank/marine/flag/o10, +/turf/template_noop, +/area/space) +"vgZ" = ( +/obj/machinery/vending/event/accessory, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vhJ" = ( +/obj/machinery/button/windowtint{ + id = "exam5"; + pixel_y = -23 + }, +/turf/simulated/floor, +/area/space) +"vhO" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/gorefloor2, +/area/space) +"vhR" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/space) +"vhU" = ( +/obj/random/multiple/large_corp_crate/no_weapons, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vid" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/port_gen/pacman, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/floor/plating, +/area/space) +"vii" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"viD" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"viY" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"vja" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vjd" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/cult, +/area/space) +"vji" = ( +/obj/machinery/mech_recharger, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/obj/mecha/medical/odysseus/old, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"vjk" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vjE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 3"; + id_tag = "Avalon-room3" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"vjN" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/shuttle/plating, +/area/space) +"vjR" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, +/obj/item/weapon/material/shard/phoron{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vkl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"vkG" = ( +/obj/machinery/door/window/survival_pod, +/turf/template_noop, +/area/space) +"vkR" = ( +/obj/effect/map_effect/portal/line/side_a{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vkW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vlg" = ( +/obj/structure/loot_pile/surface/alien/security, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vlx" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"vlK" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/weapon/surgical/bone_clamp/alien, +/obj/item/weapon/surgical/hemostat/alien, +/obj/item/weapon/surgical/scalpel/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"vlT" = ( +/obj/structure/bed/chair/bay/chair/padded/green{ + dir = 1 + }, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/space) +"vmP" = ( +/obj/structure/hull_corner/long_vert{ + dir = 5 + }, +/turf/template_noop, +/area/space) +"vmS" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastright{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/darkmatter{ + pixel_y = 6 + }, +/obj/item/weapon/gun/energy/darkmatter, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"vnh" = ( +/obj/random/mob/robotic/hivebot, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"vod" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/shield_projector/rectangle/weak, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vof" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/space_heater, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/structure/closet/walllocker_double/hydrant/east, +/turf/simulated/shuttle/plating, +/area/space) +"vor" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/fiftyspawner/phoronrglass, +/turf/simulated/floor, +/area/space) +"vow" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"vqs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 6; + icon_state = "4-6" + }, +/turf/simulated/floor/plating, +/area/space) +"vqK" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "screen"; + pixel_y = 32 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"vrd" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vrn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"vrr" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vrK" = ( +/obj/random/roguemineloot, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vsb" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"vsI" = ( +/obj/structure/bed/double/padded, +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/obj/item/weapon/bedsheet/rainbowdouble, +/turf/simulated/floor/carpet/turcarpet, +/area/space) +"vsM" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"vtm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"vtu" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/storage/belt/medical/alien, +/obj/item/weapon/storage/belt/medical/alien{ + pixel_y = 6 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"vuE" = ( +/obj/machinery/gateway/brass{ + dir = 9 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vuM" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 9; + icon_state = "32-9" + }, +/turf/simulated/floor/plating, +/area/space) +"vuQ" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/space) +"vvk" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"vvw" = ( +/obj/machinery/iv_drip, +/obj/machinery/iv_drip, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 22; + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vvz" = ( +/obj/structure/grille/rustic, +/turf/simulated/floor/tiled, +/area/space) +"vvF" = ( +/obj/structure/sign/periodic, +/turf/simulated/wall/wood, +/area/space) +"vvG" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/sink/kitchen{ + dir = 4; + icon_state = "sink_alt"; + pixel_x = -13 + }, +/obj/machinery/recharger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vvH" = ( +/obj/structure/closet/alien, +/obj/random/energy, +/obj/random/energy, +/obj/random/energy, +/obj/random/grenade, +/obj/random/grenade, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"vwp" = ( +/obj/structure/girder/cult, +/turf/simulated/floor/cult, +/area/space) +"vwv" = ( +/obj/machinery/computer/ship/sensors, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "stargazer_blast"; + name = "remote blast shielding control"; + pixel_x = 27 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"vwJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/space) +"vxb" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/rshull, +/area/space) +"vxF" = ( +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/wood, +/area/space) +"vye" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"vyg" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor, +/area/space) +"vyj" = ( +/obj/item/weapon/phone, +/obj/structure/table/bench/wooden, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/obj/machinery/button/windowtint{ + id = "h-master"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/space) +"vyk" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/space) +"vyP" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"vyW" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/large, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"vzm" = ( +/obj/structure/prop/alien/pod/open, +/obj/structure/prop/alien/pod/open, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vzp" = ( +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/white, +/area/space) +"vzs" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"vAl" = ( +/obj/structure/prop/fake_ai{ + name = "3n1g-M@" + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"vAo" = ( +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser"; + name = "Scrap-Storage" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vBp" = ( +/obj/structure/flora/tree/pine/xmas/presents, +/turf/simulated/floor/tiled, +/area/space) +"vBH" = ( +/obj/structure/hull_corner{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"vBW" = ( +/obj/structure/simple_door/sandstone, +/turf/template_noop, +/area/space) +"vCb" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet, +/area/space) +"vCw" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"vCM" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/weapon/storage/excavation, +/obj/item/stack/flag/yellow, +/obj/item/device/measuring_tape, +/obj/item/weapon/pickaxe/drill, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/obj/item/weapon/material/knife/machete/hatchet, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"vDo" = ( +/obj/mecha/combat/fighter/gunpod{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"vDr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#DDFFD3" + }, +/obj/machinery/shield_diffuser, +/obj/effect/floor_decal/milspec/stripe{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"vEk" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering, +/turf/simulated/floor/plating, +/area/space) +"vES" = ( +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/under/fluff/latexmaid, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor.dmi'; + icon_state = "dispenser"; + name = "Garmentier"; + req_access = list(777) + }, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/headband/maid, +/turf/simulated/floor/cult, +/area/space) +"vFe" = ( +/obj/machinery/vending/emergencyfood/filled, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"vGQ" = ( +/obj/structure/ledge{ + dir = 8 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vHq" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"vHw" = ( +/turf/simulated/wall/wood, +/area/space) +"vHD" = ( +/obj/structure/cable{ + d2 = 9; + icon_state = "5-9"; + d1 = 5 + }, +/turf/simulated/floor/plating, +/area/space) +"vHL" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor, +/area/space) +"vHQ" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/space) +"vHX" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"vId" = ( +/obj/structure/closet/cabinet, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/toolbox, +/obj/random/toolbox, +/turf/simulated/floor/wood, +/area/space) +"vIy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"vIV" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"vJd" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/template_noop, +/area/space) +"vJe" = ( +/obj/machinery/iv_drip, +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vJh" = ( +/obj/effect/fancy_shuttle/science, +/turf/template_noop, +/area/space) +"vJt" = ( +/obj/structure/flora/pottedplant/smalltree, +/turf/simulated/floor/beach/sand/desert, +/area/space) +"vJT" = ( +/obj/structure/prop/dominator, +/turf/template_noop, +/area/space) +"vKC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vKX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"vLm" = ( +/obj/item/clothing/mask/muzzle, +/obj/random/trash, +/turf/simulated/floor, +/area/space) +"vMe" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/table/reinforced, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/design_disk, +/obj/item/weapon/disk/tech_disk, +/obj/item/weapon/disk/tech_disk, +/turf/simulated/shuttle/floor/purple, +/area/space) +"vMr" = ( +/obj/structure/salvageable/implant_container, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vMU" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"vNc" = ( +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled, +/area/space) +"vNi" = ( +/obj/structure/cryofeed{ + dir = 1; + pixel_y = -31 + }, +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vNu" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 4 + }, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-hangar"; + name = "Avalon Hangar Blast Doors Control"; + pixel_y = -24; + req_access = list(28); + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/space) +"vNY" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 8; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"vOh" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/item/weapon/soap/deluxe, +/obj/structure/curtain, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vPg" = ( +/obj/machinery/flasher{ + id = "slavecell1"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vPi" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vPl" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/space) +"vPm" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"vPs" = ( +/obj/item/device/uav/loaded, +/turf/template_noop, +/area/space) +"vPG" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"vPI" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam1" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"vPK" = ( +/obj/structure/closet/alien, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/ore/bluespace_crystal, +/obj/item/weapon/tool/screwdriver/alien, +/obj/item/device/multitool/alien, +/obj/item/device/gps/syndie, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vQb" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/gaycarpet, +/area/space) +"vQz" = ( +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/space) +"vQF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/space) +"vQR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plating/external, +/area/space) +"vSR" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"vTc" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "baby_mammoth_sensor"; + pixel_y = 28 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = "baby_mammoth_pump" + }, +/turf/simulated/shuttle/plating, +/area/space) +"vTr" = ( +/turf/simulated/floor/dungeon, +/area/space) +"vTN" = ( +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"vTQ" = ( +/obj/structure/table/alien/blue, +/obj/item/clothing/under/psysuit, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"vUb" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vUh" = ( +/obj/machinery/disposal, +/turf/simulated/floor/tiled/dark, +/area/space) +"vUL" = ( +/obj/structure/bed/chair/bay/comfy/purple, +/turf/simulated/floor/wood/sif, +/area/space) +"vUQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"vUT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/space) +"vVd" = ( +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"vVl" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/turf/simulated/floor, +/area/space) +"vVz" = ( +/obj/structure/cable{ + d2 = 10; + icon_state = "5-10"; + d1 = 5 + }, +/turf/simulated/floor/plating, +/area/space) +"vVU" = ( +/obj/structure/prop/alien/pod/open, +/obj/effect/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vWF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"vWN" = ( +/obj/structure/cliff/automatic{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vXg" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/contraband/nofail, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"vXy" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"vXU" = ( +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled, +/area/space) +"vYa" = ( +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"vYe" = ( +/obj/structure/cliff/automatic{ + dir = 6 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"vYx" = ( +/obj/machinery/vending/tool{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777); + req_log_access = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/space) +"vYS" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/flame/lighter/random{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/flame/lighter/random, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"vYV" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"vZh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"vZr" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"vZv" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"wab" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"wak" = ( +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/obj/structure/closet{ + name = "Survival closet" + }, +/turf/simulated/floor/plating, +/area/space) +"waq" = ( +/obj/effect/alien/weeds, +/turf/simulated/mineral/ignore_mapgen, +/area/space) +"waA" = ( +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/alien/hard_corner, +/area/space) +"waG" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"waY" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wbL" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"wcc" = ( +/obj/structure/closet/secure_closet/engineering_welding{ + locked = 0 + }, +/turf/simulated/floor/plating, +/area/space) +"wcE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wcO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wdK" = ( +/obj/structure/table/steel, +/obj/machinery/button/windowtint{ + id = "SP-Sec"; + pixel_x = 10; + pixel_y = 25 + }, +/obj/structure/fans{ + pixel_y = 32 + }, +/obj/machinery/microscope{ + pixel_y = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"weO" = ( +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"weS" = ( +/obj/machinery/firealarm/angled{ + pixel_y = 18 + }, +/obj/structure/table/rack/shelf/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wfh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"wfE" = ( +/obj/machinery/door/airlock/maintenance/medical{ + req_one_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"wfO" = ( +/obj/effect/map_effect/portal/master/side_b{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"wfW" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/medical, +/turf/simulated/floor/tiled/white, +/area/space) +"wgp" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/shuttle/floor/purple, +/area/space) +"wgy" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/tape_roll, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"wgI" = ( +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor, +/area/space) +"wgK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/door/blast/regular/open{ + id = "baby_mammoth_blast"; + layer = 2.5; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"wgP" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "13" + }, +/turf/template_noop, +/area/template_noop) +"whh" = ( +/obj/structure/sign/mining, +/turf/simulated/shuttle/wall/voidcraft, +/area/space) +"whu" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/obj/item/prop/alien/junk, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"whD" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/flasher{ + id = "atriumflash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"whK" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"wie" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/table/gamblingtable, +/obj/item/device/starcaster_news, +/obj/item/weapon/deck/cards, +/obj/structure/fireaxecabinet{ + pixel_y = 27 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"wiN" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wiR" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 4 + }, +/turf/template_noop, +/area/space) +"wiW" = ( +/obj/machinery/porta_turret/alien{ + faction = "hivebot" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"wjl" = ( +/obj/machinery/appliance/cooker/fryer, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wjv" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"wjB" = ( +/obj/structure/fans, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"wjJ" = ( +/obj/effect/fancy_shuttle/medical, +/turf/template_noop, +/area/space) +"wkn" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = -7; + dir = 4; + pixel_x = 18 + }, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "Avalon-kitchen"; + layer = 3.3; + name = "Avalon Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wkY" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/freezer, +/area/space) +"wlf" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wlm" = ( +/obj/random/mob/robotic/hivebot, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wlo" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"wlE" = ( +/obj/effect/alien/weeds, +/obj/structure/bed/nest, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"wlN" = ( +/obj/structure/closet/secure_closet/bar{ + req_access = newlist() + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"wmz" = ( +/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/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"wmI" = ( +/obj/structure/undies_wardrobe, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"wmS" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/space) +"wmV" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"wno" = ( +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/space) +"woE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/access_button{ + pixel_x = 26; + pixel_y = -24; + name = "interior access button"; + master_tag = "Avalon_engine_airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"woN" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/space) +"wpP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 5; + icon_state = "1-5" + }, +/turf/simulated/floor/plating, +/area/space) +"wpT" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"wqd" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wqh" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"wqp" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor, +/area/space) +"wqK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wqO" = ( +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"wqT" = ( +/obj/structure/shuttle/engine/router, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"wqX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wrb" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor, +/area/space) +"wrh" = ( +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"wry" = ( +/obj/structure/grille/broken/cult, +/obj/fire, +/turf/simulated/floor/gorefloor2, +/area/space) +"wrL" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/overgrown{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/space) +"wrU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wrW" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/space) +"wsr" = ( +/obj/machinery/conveyor_switch{ + id = "SP-Mining"; + name = "Disposal Sorter"; + pixel_y = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"wst" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"wsC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wsJ" = ( +/obj/vehicle/train/engine, +/turf/simulated/floor/plating, +/area/space) +"wtB" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/dead{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/space) +"wtD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"wtF" = ( +/obj/machinery/door/airlock/alien{ + name = "Examination room 4"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"wtZ" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor, +/area/space) +"wuC" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/turf/simulated/floor/tiled/white, +/area/space) +"wvE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wvF" = ( +/obj/structure/bed/chair/bay/comfy/purple{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"wvO" = ( +/obj/structure/fans, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"wwk" = ( +/obj/structure/window/plastitanium, +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wwm" = ( +/obj/machinery/sleeper/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"wwn" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/locked/phasegun/rifle{ + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/locked/phasegun/rifle{ + pixel_y = -4 + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"wwC" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/tesla_coil/pre_mapped, +/obj/effect/decal/cleanable/ash, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wwE" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/turf/simulated/floor/greengrid, +/area/space) +"wxc" = ( +/obj/machinery/light/bigfloorlamp/flicker, +/turf/template_noop, +/area/space) +"wxm" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/wood/broken, +/area/space) +"wxu" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/fruitgland, +/obj/item/weapon/material/knife/hook, +/turf/simulated/floor, +/area/space) +"wxB" = ( +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"wxC" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"wxG" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/space) +"wxH" = ( +/turf/simulated/goreeyes, +/area/space) +"wxK" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wxV" = ( +/obj/structure/largecrate/animal/chick, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wyk" = ( +/obj/structure/prop/alien/dispenser/twoway, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wyr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wyw" = ( +/obj/structure/particle_accelerator/fuel_chamber, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wAV" = ( +/obj/item/trash/material/metal, +/turf/simulated/floor/plating, +/area/space) +"wAX" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 8; + id = "Avalon-captainsquarters"; + name = "Bolt Control"; + pixel_x = 26; + req_access = list(67); + specialfunctions = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"wBl" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westright{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/alien, +/obj/item/clothing/head/helmet/alien, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"wBs" = ( +/obj/machinery/door/airlock/maintenance/common, +/turf/simulated/floor/plating/external, +/area/space) +"wCb" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"wDn" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/gorefloor2, +/area/space) +"wDp" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"wEc" = ( +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wEx" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/space) +"wEG" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/plastitanium{ + dir = 4 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Bridge Blast Door"; + id = "Avalon-bridge" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"wFf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/closet/walllocker/emerglocker{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"wFw" = ( +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "needle_inner"; + locked = 1; + name = "Internal Access" + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "needle"; + name = "interior access button"; + pixel_y = 26 + }, +/turf/simulated/shuttle/plating, +/area/space) +"wFZ" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/plasticflaps/mining, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wGL" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain/open/shower, +/obj/item/weapon/soap/nanotrasen, +/turf/simulated/floor/tiled/white, +/area/space) +"wGN" = ( +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"wHb" = ( +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/medical, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/obj/random/maintenance/cargo, +/obj/random/maintenance/clean, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/alien, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wHi" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"wHO" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"wIc" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "garbagetwo" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wII" = ( +/obj/structure/table/darkglass, +/obj/item/device/sleevemate, +/obj/item/device/sleevemate, +/obj/item/device/sleevemate, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/item/weapon/backup_implanter, +/obj/item/weapon/backup_implanter, +/obj/item/weapon/backup_implanter, +/obj/item/weapon/backup_implanter, +/obj/item/weapon/backup_implanter, +/turf/simulated/shuttle/floor/purple, +/area/space) +"wIS" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"wJr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-hangar"; + name = "Avalon Hangar Blast Doors Control"; + pixel_y = -24; + req_access = list(28) + }, +/turf/simulated/floor/reinforced, +/area/space) +"wJL" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"wJR" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"wJT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"wKT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/mob/living/simple_mob/humanoid/merc/ranged{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"wKV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"wKX" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "dorm_tint5" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "atriumnorth" + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/space) +"wKZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/space) +"wLU" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wLX" = ( +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"wMu" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/table/alien/blue, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wMy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"wNh" = ( +/obj/structure/closet/walllocker_double/north{ + name = "Survival Cabinet" + }, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/weapon/reagent_containers/pill/dylovene, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/random/soap, +/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked, +/obj/item/device/fbp_backup_cell, +/obj/item/device/pda, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/starcaster_news, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/gps, +/turf/simulated/floor/wood, +/area/space) +"wNI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wNX" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Air to Distro" + }, +/turf/simulated/floor, +/area/space) +"wOj" = ( +/obj/structure/table/darkglass, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/cult, +/area/space) +"wOq" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"wOK" = ( +/obj/structure/tubes, +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"wOQ" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wPf" = ( +/obj/structure/largecrate/animal/fennec, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"wPu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wPH" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb/dark{ + color = #8A0808; + desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; + name = "Wires of doubt" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"wPR" = ( +/obj/machinery/ion_engine, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"wQe" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/shuttle/window, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/space) +"wQq" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"wQK" = ( +/obj/machinery/floodlight, +/turf/simulated/shuttle/plating/skipjack, +/area/space) +"wQR" = ( +/obj/random/toolbox, +/turf/template_noop, +/area/space) +"wQS" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"wQT" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/machinery/meter, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/space) +"wRv" = ( +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 22 + }, +/obj/structure/table/marble, +/obj/item/weapon/book/manual/barman_recipes, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"wTj" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/simulated/shuttle/wall/voidcraft/red, +/area/survivalpod) +"wTZ" = ( +/obj/machinery/door/window/brigdoor/northright{ + dir = 8; + id = "SP-Cell"; + name = "Cell"; + req_access = null; + req_one_access = list(2,4) + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "SP-Cell2"; + name = "Cell Door" + }, +/obj/effect/floor_decal/industrial/danger/full, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"wUd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wUf" = ( +/obj/structure/table/standard, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/device/sleevemate, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wUI" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"wUW" = ( +/turf/template_noop, +/area/template_noop) +"wVG" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/cable/green, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/plating, +/area/space) +"wVS" = ( +/obj/effect/alien/weeds, +/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"wVV" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"wWh" = ( +/turf/template_noop, +/area/survivalpod) +"wWl" = ( +/obj/structure/disposalpipe/sortjunction/wildcard{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"wWp" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8 + }, +/turf/template_noop, +/area/space) +"wWI" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "23" + }, +/turf/template_noop, +/area/space) +"wWK" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"wWR" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"wWW" = ( +/obj/machinery/door/firedoor, +/obj/structure/atmospheric_retention_field/underdoors, +/obj/machinery/door/blast/regular{ + name = "Avalon Hangar Blast Door"; + id = "Avalon-hangar" + }, +/turf/simulated/floor/reinforced, +/area/space) +"wXk" = ( +/obj/machinery/light{ + dir = 8; + layer = 3 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"wXB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"wXN" = ( +/obj/structure/disposalpipe/down{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"wYf" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/pen/blade/fountain, +/turf/simulated/floor/carpet/blue, +/area/space) +"wYD" = ( +/obj/machinery/porta_turret/alien/destroyed, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"wYR" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"wZt" = ( +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"wZG" = ( +/obj/effect/alien/weeds, +/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/space) +"xau" = ( +/obj/effect/alien/weeds/node, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"xaw" = ( +/obj/structure/sign/department/xenolab, +/turf/simulated/wall/skipjack, +/area/space) +"xaO" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor, +/area/space) +"xbb" = ( +/obj/structure/closet/alien, +/obj/item/prop/alien/junk, +/obj/item/weapon/tool/crowbar/alien, +/obj/item/weapon/tool/wirecutters/alien, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xck" = ( +/obj/item/frame/apc, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 22 + }, +/obj/random/junk, +/turf/simulated/floor, +/area/space) +"xcs" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"xcw" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/super{ + pixel_y = -24 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"xcA" = ( +/obj/structure/flora/pumpkin/carved/owo, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xcK" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xdg" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/structure/window/plastitanium, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + name = "Avalon Singularity Blast Door"; + id = "Avalon-singularity"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/space) +"xdM" = ( +/turf/simulated/wall/rshull, +/area/space) +"xdZ" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 8; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"xec" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xeT" = ( +/obj/machinery/crystal/lava, +/turf/simulated/floor/lava, +/area/space) +"xfk" = ( +/obj/structure/flora/bboulder2, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xfo" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/folder/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/weapon/pen/red, +/obj/item/weapon/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/purple, +/area/space) +"xfv" = ( +/obj/structure/tubes, +/obj/machinery/icecream_vat, +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 20 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"xfE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe, +/turf/simulated/floor/reinforced, +/area/space) +"xgI" = ( +/obj/structure/bed/chair/bay/comfy/green{ + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"xgK" = ( +/obj/structure/cliff/automatic/corner{ + dir = 10 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xgO" = ( +/obj/mecha/working/hoverpod/shuttlepod, +/turf/template_noop, +/area/space) +"xhp" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"xic" = ( +/obj/structure/window/reinforced/tinted/frosted, +/turf/simulated/floor/tiled, +/area/space) +"xix" = ( +/obj/structure/cryofeed{ + dir = 2 + }, +/obj/machinery/light/small/emergency, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"xjc" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "SP-Mining" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"xjo" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + name = "Portside Lower Thruster One" + }, +/turf/simulated/floor, +/area/space) +"xjC" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"xkh" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "exam2" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xkm" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/white, +/area/space) +"xkR" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/space) +"xls" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/briefcase/inflatable{ + pixel_y = 3 + }, +/obj/item/weapon/storage/toolbox/electrical, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"xlt" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/space) +"xlu" = ( +/obj/machinery/shipsensors{ + dir = 1 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"xlH" = ( +/obj/effect/map_effect/portal/master/side_b{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xlT" = ( +/obj/machinery/conveyor, +/obj/structure/plasticflaps/mining, +/turf/simulated/shuttle/plating, +/area/space) +"xmg" = ( +/obj/effect/step_trigger/message{ + message = "Example text"; + once = 0 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xmE" = ( +/obj/machinery/light/small/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/space) +"xnt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating/external, +/area/space) +"xnE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xnS" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/space) +"xoj" = ( +/turf/simulated/floor/wood/broken, +/area/space) +"xow" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"xox" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/angled{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/catwalk_plated/techfloor, +/turf/simulated/floor, +/area/space) +"xpc" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/chainsaw, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/extinguisher, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor, +/area/space) +"xpy" = ( +/obj/structure/closet/secure_closet/guncabinet/phase{ + req_one_access = null + }, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/weapon/gun/energy/locked/frontier, +/obj/item/weapon/gun/energy/locked/frontier, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/weapon/gun/energy/locked/frontier/holdout, +/obj/item/clothing/accessory/holster/waist, +/obj/item/clothing/accessory/holster/waist, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/obj/item/weapon/gun/energy/locked/frontier/carbine, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"xpC" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/turf/simulated/wall/rshull, +/area/space) +"xqf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/vending/wallmed1/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xqD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xqM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/space) +"xqP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + name = "Hallway Airlock" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xqS" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/floor/plating/external, +/area/space) +"xqU" = ( +/obj/structure/largecrate/vehicle/quadbike, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xrE" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/ion_engine, +/turf/simulated/floor/tiled/techfloor/grid, +/area/space) +"xrJ" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xrT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/space) +"xst" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xsX" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/simulated/floor, +/area/space) +"xtj" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/organ/internal/lungs, +/turf/simulated/floor, +/area/space) +"xts" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular/open{ + dir = 8; + id = "baby_mammoth_blast"; + name = "window blast shield" + }, +/turf/simulated/shuttle/plating, +/area/space) +"xtx" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xtC" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/shuttle_control/explore/stargazer{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"xud" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"xuf" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"xug" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/space) +"xuL" = ( +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium, +/obj/item/device/sleevemate, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/reagent_scanner/adv, +/obj/item/device/healthanalyzer/phasic, +/obj/item/device/healthanalyzer/phasic, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Ross-Traints"; + req_access = list(777) + }, +/turf/simulated/floor, +/area/space) +"xuN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/standard/glass/common{ + dir = 4; + name = "Primary Storage" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xvE" = ( +/obj/machinery/alarm/angled{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/toxin, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"xvG" = ( +/obj/machinery/gravity_generator/main/station{ + icon_state = "on_6" + }, +/turf/simulated/floor/tiled, +/area/space) +"xvO" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/plating, +/area/space) +"xws" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod) +"xwu" = ( +/obj/structure/girder/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xwQ" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner, +/area/space) +"xxd" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/sharpeningkit, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/floor/tiled/white, +/area/space) +"xxq" = ( +/obj/machinery/autolathe{ + hacked = 1; + name = "military autolathe" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"xxs" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xxt" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"xxu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 8; + name = "Room 1"; + id_tag = "Avalon-room1" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xxB" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/floor/outdoors/rocks, +/area/space) +"xxQ" = ( +/obj/structure/bed/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/item/weapon/surgical/FixOVein/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xxS" = ( +/obj/structure/flora/pottedplant/flower, +/turf/simulated/floor/wood/sif, +/area/space) +"xyd" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine, +/turf/simulated/floor/wood/sif, +/area/space) +"xyp" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/turf/template_noop, +/area/space) +"xyE" = ( +/obj/effect/alien/weeds, +/obj/effect/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/rocks{ + outdoors = 0 + }, +/area/space) +"xyL" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4; + id_tag = "frontgate" + }, +/turf/simulated/floor/plating, +/area/space) +"xyR" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/internals, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"xyT" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alien/blue, +/area/space) +"xzg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xzP" = ( +/obj/structure/prop/alien/computer/hybrid, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor, +/area/space) +"xBs" = ( +/obj/structure/particle_accelerator/end_cap{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xBG" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"xCw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"xCD" = ( +/turf/simulated/floor/outdoors/rocks, +/area/space) +"xCF" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xCP" = ( +/obj/effect/fancy_shuttle, +/turf/template_noop, +/area/space) +"xDq" = ( +/obj/machinery/firealarm/angled{ + dir = 4; + pixel_x = 22 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xDP" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"xEB" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled/monotile, +/area/space) +"xEM" = ( +/obj/machinery/door/blast/gate, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xEN" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xES" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"xEX" = ( +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/hatch/common{ + dir = 4; + name = "Starboard Upper Thruster Two" + }, +/turf/simulated/floor, +/area/space) +"xFl" = ( +/obj/machinery/door/airlock/alien{ + name = "Processing room 2"; + req_one_access = list(777) + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xFm" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"xFG" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = -13 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"xFI" = ( +/obj/structure/bed/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xFP" = ( +/obj/effect/map_effect/portal/master/side_b, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xFR" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"xFY" = ( +/obj/machinery/computer/ship/helm, +/obj/machinery/button/remote/blast_door{ + id = "Avalon-bridge"; + name = "Avalon Bridge Blast Doors Control"; + pixel_y = -6; + req_access = list(28); + pixel_x = -27 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/space) +"xGf" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/space) +"xGz" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xHh" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/machinery/meter, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/space) +"xHk" = ( +/obj/machinery/computer/shuttle_control/explore/stargazer{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xHE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xHY" = ( +/obj/effect/fancy_shuttle/delivery, +/turf/template_noop, +/area/space) +"xIb" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 1; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/gootrap{ + basecolor = #610B0B; + desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; + name = "Spill of fear" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/turf/simulated/floor/flesh/colour{ + color = red + }, +/area/space) +"xIq" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/girder/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xIr" = ( +/obj/structure/ledge/ledge_nub{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xIK" = ( +/obj/machinery/door/airlock/alien/blue/locked, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xIN" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/template_noop, +/area/space) +"xIV" = ( +/obj/structure/fence, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"xJd" = ( +/obj/effect/alien/weeds/node, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt{ + outdoors = 0 + }, +/area/space) +"xJg" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate, +/obj/machinery/light, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/space) +"xJm" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Dorm" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/space) +"xJt" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "21" + }, +/turf/template_noop, +/area/space) +"xJw" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/gear_dispenser/suit/ert{ + req_one_access = null + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xJx" = ( +/obj/machinery/door/airlock/glass_centcom, +/obj/structure/sign/poster/nanotrasen{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"xKe" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"xKv" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"xKG" = ( +/obj/machinery/vending/cigarette{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/floor/wood, +/area/space) +"xLk" = ( +/obj/machinery/pointdefense, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced/airless, +/area/space) +"xLn" = ( +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"xLr" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/structure/toilet{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"xLt" = ( +/obj/effect/temporary_effect/pulse/snake/flamestrike, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xLF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xMn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xMv" = ( +/obj/machinery/vending/medical{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/white, +/area/space) +"xMz" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor/wood/sif, +/area/space) +"xMA" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xMJ" = ( +/obj/structure/grille/broken/cult, +/turf/simulated/floor/cult, +/area/space) +"xND" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/space) +"xNL" = ( +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + dir = 4; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/structure/window/phoronreinforced{ + desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; + maxhealth = 500; + name = "Veil of sanity" + }, +/obj/effect/spider/stickyweb{ + color = #8A0808; + desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; + name = "Strings of distress" + }, +/turf/simulated/floor/gorefloor, +/area/space) +"xNQ" = ( +/obj/effect/catwalk_plated/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor, +/area/space) +"xOp" = ( +/obj/structure/prop/blackbox/xenofrigate, +/turf/simulated/floor/greengrid, +/area/space) +"xOt" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/template_noop, +/area/space) +"xOD" = ( +/mob/living/simple_mob/humanoid/merc/melee/sword/poi{ + health = 15; + maxHealth = 15 + }, +/turf/simulated/shuttle/floor/alien, +/area/space) +"xOH" = ( +/obj/effect/fancy_shuttle/escapepod, +/turf/template_noop, +/area/space) +"xPh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"xPs" = ( +/obj/machinery/flasher{ + id = "SP-Cell flash"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"xPI" = ( +/obj/structure/table/standard, +/obj/item/device/starcaster_news, +/turf/simulated/floor/tiled/dark, +/area/space) +"xPN" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/disposalpipe/segment, +/turf/simulated/shuttle/floor/alienplating, +/area/space) +"xQc" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled, +/area/space) +"xQk" = ( +/obj/structure/closet/crate/engineering, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/tank/phoron, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/device/multitool, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/device/geiger, +/obj/item/clothing/glasses/goggles, +/obj/item/clothing/glasses/goggles, +/obj/item/device/t_scanner, +/obj/item/clothing/glasses/welding, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/floor/darkred, +/area/space) +"xQq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_bay/hatch/engineering{ + dir = 4; + name = "Tesla Engine" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xQs" = ( +/obj/effect/overlay/energy_ball, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xQt" = ( +/obj/item/weapon/material/minihoe, +/turf/simulated/floor/outdoors/grass/heavy, +/area/space) +"xQG" = ( +/obj/effect/temporary_effect/shuttle_landing, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xRs" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/gaycarpet, +/area/space) +"xRE" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xRV" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"xSh" = ( +/obj/structure/window/titanium/full, +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/space) +"xSk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "SP-Sec" + }, +/obj/structure/window/reinforced/polarized{ + id = "SP-Sec" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/space) +"xSx" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"xSC" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor, +/area/space) +"xSD" = ( +/obj/structure/lattice, +/obj/machinery/shield_diffuser, +/turf/template_noop, +/area/space) +"xTt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/space) +"xTP" = ( +/obj/machinery/media/jukebox/casinojukebox, +/turf/template_noop, +/area/space) +"xTS" = ( +/obj/effect/map_effect/portal/master/side_a, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xTW" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/simulated/floor/reinforced, +/area/space) +"xUa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xUh" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xUA" = ( +/obj/structure/prop/alien/computer/camera/flipped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xUJ" = ( +/obj/item/mecha_parts, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xVe" = ( +/obj/machinery/vending/fitness{ + dir = 4; + pixel_x = -5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/space) +"xVf" = ( +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/space) +"xVg" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/ammo_magazine/m9mm/compact/flash, +/obj/item/weapon/gun/projectile/pistol, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/weapon/storage/box/survival/comp{ + starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi) + }, +/turf/simulated/floor/carpet/bcarpet, +/area/space) +"xVi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"xVA" = ( +/obj/effect/gibspawner/robot, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xVC" = ( +/turf/simulated/wall/shull, +/area/space) +"xVL" = ( +/obj/structure/closet/alien, +/obj/item/clothing/head/headband/maid, +/obj/item/clothing/head/plaguedoctorhat, +/obj/item/clothing/head/poppy_crown, +/obj/item/clothing/head/redcoat, +/obj/item/clothing/head/turban, +/obj/item/clothing/head/woodcirclet, +/obj/item/clothing/head/greenbandana, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/bowler, +/obj/item/clothing/head/bandana, +/obj/item/clothing/head/beanie, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xWf" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/floor_decal/milspec/stripe{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/space) +"xWn" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xWB" = ( +/obj/structure/disposalpipe/sortjunction/untagged/flipped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"xWE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"xWN" = ( +/obj/machinery/mineral/stacking_machine, +/turf/simulated/shuttle/plating, +/area/space) +"xXf" = ( +/obj/machinery/light/floortube, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"xXn" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "baby_mammoth"; + name = "interior access button"; + pixel_y = 26 + }, +/obj/machinery/door/airlock/voidcraft/vertical{ + frequency = 1380; + id_tag = "baby_mammoth_inner"; + locked = 1; + name = "Internal Access" + }, +/turf/simulated/shuttle/plating, +/area/space) +"xYs" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/green, +/area/space) +"xYQ" = ( +/obj/machinery/flasher{ + id = "dressroom"; + name = "Floor mounted flash" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"xYV" = ( +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"xZn" = ( +/obj/structure/barricade, +/turf/simulated/floor/plating, +/area/space) +"xZo" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"xZL" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"xZY" = ( +/obj/random/multiple/large_corp_crate, +/turf/simulated/floor/tiled/techmaint, +/area/space) +"yah" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"yal" = ( +/obj/item/organ/internal/lungs/vox, +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/obj/structure/curtain/black, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"yaI" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/turf/simulated/floor/plating/external, +/area/space) +"yaN" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/shuttle/plating, +/area/space) +"ybm" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "30" + }, +/turf/template_noop, +/area/space) +"ybo" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/rainbowdouble, +/obj/machinery/partyalarm{ + pixel_y = -18 + }, +/turf/simulated/floor/wood/sif, +/area/space) +"ybx" = ( +/obj/structure/bed/alien, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"yby" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ybA" = ( +/turf/simulated/mineral/ignore_mapgen, +/area/space) +"ybG" = ( +/obj/structure/table/alien/blue, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/weapon/storage/belt/utility/alien, +/obj/item/weapon/paper/alien{ + icon_state = "alienpaper_words"; + info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]" + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ybT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/prop/alien/power, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/space) +"ycV" = ( +/obj/machinery/vending/coffee{ + dir = 8; + pixel_x = 5 + }, +/turf/simulated/floor/wood, +/area/space) +"ydh" = ( +/obj/effect/alien/weeds, +/obj/effect/landmark/loot_spawn/low, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"ydo" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/space) +"ydr" = ( +/obj/machinery/power/emitter/gyrotron{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/space) +"ydu" = ( +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"ydy" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ydH" = ( +/obj/structure/shuttle/engine/heater, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/wall/voidcraft/no_join, +/area/space) +"ydU" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/alien/weeds, +/obj/item/toy/plushie/face_hugger, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/space) +"yft" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/surgical/bone_clamp/alien, +/obj/item/device/healthanalyzer/phasic, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating/external, +/area/space) +"yfy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"yfC" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/machinery/light/poi, +/turf/simulated/floor/carpet, +/area/space) +"yfD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/space) +"yfX" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/white, +/area/space) +"ygl" = ( +/obj/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/space) +"ygo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/space) +"ygs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/space) +"ygZ" = ( +/obj/effect/temporary_effect/pulse/pulsar, +/turf/simulated/floor/outdoors/dirt, +/area/space) +"yhj" = ( +/obj/structure/cable{ + d2 = 6; + icon_state = "5-6"; + d1 = 5 + }, +/turf/simulated/floor/plating, +/area/space) +"yhk" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor, +/area/space) +"yhY" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/space) +"yik" = ( +/obj/structure/largecrate/birds, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"yjo" = ( +/obj/structure/salvageable/bliss, +/obj/effect/alien/weeds, +/turf/simulated/floor, +/area/space) +"yjw" = ( +/obj/structure/artilleryplaceholder{ + icon_state = "18" + }, +/turf/template_noop, +/area/space) +"yka" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/machinery/alarm/alarms_hidden{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/space) +"ykj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/space) +"ykY" = ( +/obj/structure/prop/alien/computer/hybrid, +/turf/simulated/floor, +/area/space) + +(1,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +naM +naM +naM +naM +naM +naM +naM +naM +naM +naM +naM +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(2,1,1) = {" +nwG +dOK +mIu +hSj +tXM +flt +dBz +xud +ieJ +nGI +akc +gnx +jjA +uRL +lYH +vVz +peE +vHD +yhj +eEO +kTV +wpP +iOu +dqu +ePV +aLg +dZb +eWO +vqs +kTP +ajt +cII +gdf +nzu +tyT +cuG +gFa +dzU +iad +msn +rcS +kET +mjC +vuM +mYh +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +eBp +hkY +hkY +hkY +hkY +hkY +hkY +naM +naM +naM +tHq +nwG +tPy +nwG +nwG +nwG +nwG +nwG +cmZ +gle +sjB +qua +nCW +dMi +ccf +qew +uPL +vrK +jeh +tlr +nLQ +qwG +wLX +oQS +cRJ +tLc +bZw +iWn +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +xTW +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +gkT +xxs +oka +npX +gkT +xxs +oka +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(3,1,1) = {" +nwG +rsm +qwI +hKr +gWK +qOe +hPy +viY +mKV +opr +xRV +xRV +xRV +xRV +xRV +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +aQp +ucE +aFc +fTF +mZO +ucE +mxB +mmd +ucE +afD +nNQ +ucE +jxh +iXt +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +iZx +uWf +dMs +hkY +hkY +cqp +rwD +jrw +kIL +hkY +hkY +nwG +uPc +nwG +nwG +nwG +nwG +nwG +cmZ +kJK +bSB +qZK +fgs +ucG +sRL +mRF +pfQ +fmD +eeQ +qzw +ciR +ahX +sJh +tTG +plM +luC +oFb +mYY +mYY +sij +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +tdk +flk +tdk +wqO +tdk +tdk +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wiR +nwG +nwG +nwG +wiR +nwG +nwG +nwG +wiR +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +fQE +leh +fCX +uMN +iMi +leh +lzH +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(4,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rnW +ucE +fIZ +ahT +yhY +ucE +jjg +uSU +ucE +tfy +pfL +ucE +uLN +nod +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +vXU +hkY +sAt +hkY +hkY +qxM +goo +uqP +sUE +sUE +sUE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mYY +mYY +pfu +pfu +pfu +pfu +rLz +dbd +fxo +ame +hFu +pLl +klQ +dlg +mYY +mYY +psJ +mYY +mYY +mYY +jHV +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +tdk +egj +tdk +iuf +tdk +iZg +yaN +tdk +tdk +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +wiR +nwG +uMN +puU +puU +puU +uMN +puU +puU +puU +uMN +puU +puU +puU +uMN +nwG +nwG +nwG +wiR +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +fFq +aiv +esW +bMm +kOH +bMm +gxy +eTw +fCX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(5,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +qUq +ucE +hBN +nQR +rgp +ucE +ssc +fCZ +ucE +mxI +xWB +ucE +cQa +eOX +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +kbU +hkY +iTl +fAo +hkY +cqp +rwD +erz +qmI +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +eTp +lQF +nbj +jkz +oQS +fVz +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +dKh +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +tdk +gqR +owY +gqR +wqO +gqR +cpO +nJg +tdk +rUN +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +puU +puU +puU +uMN +puU +puU +puU +uMN +puU +puU +puU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +iar +nwN +huH +bMm +kOH +bMm +uhN +xyT +kqa +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(6,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ddx +ucE +kJg +drO +iBg +ucE +xcs +qMX +ucE +mDJ +xWB +ucE +wWl +qDB +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +vQz +hkY +hkY +hkY +hkY +hkY +hkY +naM +naM +naM +tHq +nwG +nwG +lcp +lcp +iNS +nwG +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +jPa +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +gqR +bXs +xgI +hMo +bGS +pwU +qkk +gqR +awk +ooI +ooI +qKl +nwG +nwG +nwG +uMN +puU +puU +puU +npX +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +npX +puU +puU +puU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cdi +pAx +iFi +aid +nGw +bMm +kOH +bMm +uhN +viD +gIf +pAx +cdi +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(7,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +fRl +hkY +jer +hkY +hkY +hkY +naM +sJe +tEQ +hkY +hkY +nwG +nwG +gEF +tdA +fyh +nwG +nwG +cmZ +nSj +uPr +aOC +jnZ +oYx +rkD +dPA +rWD +jZW +ovB +ndQ +paf +hXx +mYY +dQS +xVA +bXF +lMV +oLw +mPD +nwG +sCs +sCs +sCs +nwG +nwG +oXY +uVO +nwG +nwG +nwG +iuf +egj +kop +kmm +kmm +iCJ +eJL +mga +pDb +vkl +dmh +ooI +ooI +ooI +nwG +nwG +nwG +uMN +uMN +uMN +uMN +uMN +uMN +npX +pTY +pTY +pTY +uyJ +kOH +oyk +pTY +pTY +pTY +npX +uMN +uMN +uMN +uMN +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qDJ +iiv +uhN +pxt +jfO +bMm +kOH +bMm +wyk +pxt +huH +iiv +qDJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(8,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +qpT +ucE +cFJ +ucE +hSP +ucE +mvY +lcj +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +lGr +hkY +hkY +hkY +hkY +qxM +goo +rDs +sUE +sUE +sUE +nwG +nwG +nwG +nwG +jBk +nwG +nwG +cmZ +mom +mYY +xUJ +oOe +mYY +mYY +mYY +mYY +mYY +qWk +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +sCs +vTr +vTr +vTr +vTr +dHc +qhl +nwG +nwG +nwG +iuf +tdk +gqR +ftq +aFN +hDy +pGy +pwU +rQd +tdk +sZt +ooI +ooI +ooI +nwG +nwG +nwG +uMN +iGF +fOO +puU +oQU +mWQ +uTl +suG +kOH +kOH +kOH +kOH +suG +kOH +kOH +suG +mQW +mWQ +ydr +puU +fOO +iGF +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +npX +npX +qLM +npX +npX +npX +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(9,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +bUJ +ucE +lup +ucE +etm +ucE +nfZ +mgN +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +lXN +hkY +csg +hkY +hkY +hkY +dmR +eiP +suw +hkY +hkY +nwG +nwG +uzD +nwG +lEe +nwG +nwG +cmZ +szS +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +uez +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +sCs +vTr +vTr +vTr +vTr +kts +qvO +nwG +nwG +nwG +iuf +iuf +tdk +gqR +iXD +gqR +wqO +tdk +wFw +gqR +tdk +bYS +iuf +iuf +nwG +nwG +nwG +uMN +gHn +hdF +puU +dwF +uMN +uTl +kOH +bMm +kOH +juk +juk +kOH +kOH +bMm +kOH +mQW +uMN +oIK +puU +vCw +gKr +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +pnl +ctJ +ctJ +ctJ +rZe +ctJ +nFR +npX +vct +bdm +hyu +ugX +hyu +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(10,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +iiF +ucE +iyk +ucE +jlB +ucE +wXN +bPL +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +dBX +jqt +lVk +qJK +hkY +hkY +hkY +naM +naM +naM +hkY +nwG +nwG +nwG +nwG +rQX +nwG +acK +cmZ +szW +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +dWx +rAu +mYY +mYY +mYY +mYY +mYY +mYY +hvv +nwG +sCs +tQW +arl +vTr +vTr +srA +xgO +vPs +nwG +nwG +iuf +iuf +iuf +tdk +egj +tdk +iuf +tdk +eBD +tNh +tdk +tdk +iuf +iuf +nwG +nwG +nwG +uMN +cTz +wKV +dNH +toV +qfQ +uTl +kOH +kOH +qtj +juk +juk +qtj +qtj +kOH +kOH +mQW +qfQ +gTh +qTO +dpo +cTz +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +ctJ +gJq +phQ +gJq +ctJ +ctJ +ctJ +mnP +vct +bLt +ika +vAl +xix +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(11,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +woN +ucE +wpT +ucE +qYn +ucE +cgJ +tLG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +cGA +hkY +orm +hkY +hkY +cqp +rwD +juk +juk +juk +juk +nwG +nwG +nwG +nwG +syv +nwG +qlE +cmZ +uoy +uoy +uoy +dMe +uoy +uoy +uoy +psg +gcn +faJ +gWJ +tII +dnc +xmg +hxr +wOq +qJF +ssw +mYY +dtx +nwG +sCs +vTr +vTr +vTr +vTr +kbZ +nwG +duG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +tdk +ekn +tdk +wqO +tdk +tdk +iuf +nwG +nwG +nwG +uMN +bJE +utL +amu +aiy +ixo +uTl +suG +kOH +qtj +gyr +gyr +gyr +juk +juk +kOH +mQW +ixo +gTh +oiM +hLn +bJE +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +qVa +oLH +qOB +xnS +ctJ +ctJ +yfC +npX +vct +wwE +hyu +jue +hyu +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(12,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +aUG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ild +hkY +hkY +hkY +hkY +cqp +rwD +juk +juk +juk +juk +nwG +nwG +iAD +nwG +epd +nwG +nwG +cmZ +xEM +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +xcA +nwG +sCs +vTr +vTr +vTr +vTr +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iJG +iuf +iuf +iuf +nwG +nwG +nwG +uMN +syR +wKV +amu +aiy +ixo +uTl +kOH +juk +juk +gyr +rfR +gyr +juk +juk +kOH +mQW +ixo +gTh +oiM +dpo +syR +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +ctJ +oLH +jdq +xnS +ctJ +ctJ +gIk +npX +npX +npX +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(13,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +pey +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +fPU +hkY +dPh +hkY +hkY +cqp +rwD +juk +juk +juk +juk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +cmZ +cmZ +cmZ +mYY +cmZ +cmZ +mYY +mYY +mYY +mYY +mYY +nHx +nwG +sCs +sCs +sCs +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +vuQ +utL +amu +aiy +ixo +uTl +kOH +juk +juk +gyr +gyr +gyr +qtj +kOH +suG +mQW +ixo +gTh +oiM +hLn +vuQ +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +ctJ +oLH +bmP +xnS +ctJ +ctJ +uYH +npX +vjk +bMm +poy +bMm +vjk +tbk +sEo +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(14,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +jco +hkY +gsO +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mgg +dTY +bVY +vMr +bVY +fDi +eFW +tGA +xlH +pAr +cmZ +mYY +cmZ +xTS +mYY +mYY +xlH +bmY +mYY +rgV +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +dbD +qGk +rYN +aiy +seL +uTl +kOH +kOH +qtj +qtj +juk +juk +qtj +kOH +kOH +mQW +seL +gTh +tdT +dTe +eYy +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +npX +ctJ +oLH +gIk +xnS +ctJ +ctJ +oig +npX +pqE +bMm +bMm +bMm +fJt +qvm +nbu +uMN +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(15,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +pri +hkY +hkY +hkY +naM +naM +naM +cIh +hkY +gmq +fnU +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +ivg +mYY +mYY +mYY +mYY +mYY +mYY +mYY +fJa +pAr +cmZ +mYY +cmZ +uTP +mYY +mYY +xFP +xTS +mYY +ube +nwG +nwG +nwG +nwG +aDc +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +xTW +iuf +iuf +iuf +iuf +nwG +nwG +nwG +uMN +mLT +udM +puU +jLQ +uMN +uTl +kOH +bMm +kOH +kOH +juk +juk +kOH +bMm +kOH +mQW +uMN +oIK +puU +mmN +wMy +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +cQU +fnt +hHv +npX +qVa +gJq +avI +gJq +ctJ +ctJ +rDh +npX +kfo +bMm +bMm +bMm +vNi +qvm +dag +pWg +vAo +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(16,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +tTO +guh +lOq +hkY +aZu +szm +aZu +aZu +hkY +gmq +fnU +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +fJa +pAr +cmZ +mYY +cmZ +uTP +mYY +mYY +wfO +blR +mYY +mYY +nwG +nwG +nwG +nwG +jPH +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +tdk +tdk +tdk +tdk +ijj +wqO +nDw +vkl +pJl +iuf +iuf +iuf +nwG +nwG +nwG +uMN +ijy +ijy +puU +rqZ +dCA +uTl +suG +kOH +kOH +suG +kOH +kOH +kOH +kOH +suG +mQW +dCA +ydr +puU +ijy +ijy +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +jkb +bMm +bMm +bMm +npX +ctJ +ctJ +ctJ +ctJ +ctJ +ctJ +gmZ +npX +hOO +bMm +bMm +bMm +vNi +qvm +dag +bMm +bMm +gxx +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(17,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +hkY +dvB +gma +hkY +sUE +vNc +sUE +sUE +hkY +gmq +fnU +nwG +nwG +lSB +nwG +nwG +nwG +nwG +cmZ +sRR +plK +mYY +iIq +imH +mYY +mYY +mYY +fJa +pAr +cmZ +mYY +cmZ +uTP +mYY +mYY +uJc +aKH +mYY +mYY +nwG +nwG +nwG +nwG +shk +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +gqR +vVd +mlj +qyk +kmm +izS +iVs +aHs +vtm +tdk +iuf +iuf +nwG +nwG +nwG +uMN +nyJ +aZe +puU +jLQ +uMN +npX +sVu +sVu +sVu +rse +kOH +wyr +sVu +sVu +sVu +npX +uMN +oIK +puU +nyJ +nyJ +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +nPo +bMm +bMm +bMm +npX +fky +qkG +mxW +kOg +cuj +ctJ +cnW +npX +xst +bMm +bMm +bMm +rkK +qvm +lVm +cBF +fjf +bGm +iNV +lzC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(18,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +xQc +naM +tci +hkY +gmM +lha +gmM +gmM +hkY +gmq +fnU +nwG +nwG +hkY +hkY +hkY +hkY +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +kyo +pAr +cmZ +mYY +cmZ +iro +mYY +mYY +iro +gFw +vkR +fQa +nwG +nwG +nwG +nwG +lpZ +nwG +nwG +nwG +nwG +nwG +nwG +iuf +stc +nPH +aFN +jVb +kmm +kmm +lKj +eSH +foz +tkz +ooI +tSz +iuf +nwG +nwG +nwG +uMN +uMN +uMN +pGr +pgF +uMN +uMN +pGr +uMN +pgF +gkT +xxs +oka +pgF +uMN +pGr +uMN +uMN +pgF +pGr +uMN +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +npX +kYH +npX +npX +npX +npX +npX +npX +npX +keh +qvm +npX +npX +nXR +jYU +nXR +npX +qvm +npX +eFo +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(19,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +tTX +qMq +giW +hkY +hrv +naM +naM +aYj +hkY +kOH +kOH +nwG +nwG +hkY +jjI +hkY +hkY +nwG +cmZ +oix +oix +oix +mYY +mYY +mYY +mYY +mYY +cmZ +cmZ +cmZ +mYY +cmZ +cmZ +mYY +mYY +nCe +kyo +mOw +kFN +nwG +nwG +nwG +nwG +hJo +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +gqR +iHx +bdH +mCJ +kmm +nAF +gUt +hgq +tkz +ooI +ooI +iuf +nwG +nwG +nwG +npX +uMN +pEY +seP +seP +seP +seP +seP +huH +tva +xow +xow +xow +qmf +uhN +seP +seP +seP +seP +seP +pEY +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +qoo +seP +seP +seP +seP +seP +seP +uKi +fWJ +fWJ +fWJ +xPN +cBF +ccE +cBF +wqd +fWJ +fWJ +fWJ +twS +hcx +seP +seP +seP +seP +seP +qoo +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(20,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +bWP +naM +aGS +hkY +ldG +hkY +hkY +gtb +hkY +hkY +hkY +nwG +nwG +hkY +oLq +hkY +hkY +nwG +cmZ +oix +oix +oix +mYY +mYY +bzl +mYY +mYY +mYY +mYY +hsZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +tdk +tdk +gqR +scR +gfe +nKd +qHP +gqR +wqT +tdk +nHD +iuf +nwG +nwG +nwG +nwG +npX +npX +kcY +seP +seP +seP +seP +huH +ujr +bPz +tYv +clJ +oXl +uhN +seP +seP +seP +seP +kcY +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +kdT +wrh +ddf +bGE +bGE +oDu +bGE +bGE +mzj +bGE +bGE +oDu +ltH +bMm +kOH +bMm +sjU +oDu +bGE +bGE +mzj +bGE +bGE +oDu +bGE +bGE +pkS +wrh +uUV +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(21,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +oKd +vvz +oHC +hkY +naM +naM +naM +naM +hkY +hkY +hkY +nwG +nwG +hkY +qsz +hkY +hkY +nwG +cmZ +fXf +oix +oix +mYY +kwm +hSc +gUc +mYY +boe +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +gNI +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +jwL +umb +gfe +rsg +cvU +fVq +tdk +tkz +ooI +tSz +iuf +nwG +nwG +nwG +nwG +nwG +uMN +uMN +pGr +uMN +uMN +seP +huH +ujr +yfy +lHx +gus +oXl +uhN +seP +uMN +uMN +pGr +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +uhN +ddf +ltH +uMN +npX +npX +npX +npX +qvm +npX +npX +npX +npX +npX +kev +npX +npX +npX +npX +npX +qvm +npX +npX +npX +npX +uMN +sjU +pkS +huH +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(22,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +hkY +aCb +pBs +hkY +hkY +vNc +hkY +hkY +hkY +hkY +hkY +nwG +nwG +hkY +hkY +hkY +hkY +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +amo +mYY +mYY +mYY +cAh +noS +noS +uGy +mYY +mYY +dmp +bUv +sVQ +mdx +mYY +nwG +nwG +nwG +euK +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +mqx +lMK +bbu +iPI +qjE +fFO +bgv +xYs +ooI +ooI +iuf +nwG +nwG +nwG +nwG +uMN +npX +tcq +fxp +vZh +uMN +seP +huH +ujr +siq +sMk +gus +oXl +uhN +seP +uMN +tRW +cot +iuq +npX +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +uhN +huH +uMN +qnL +qdI +dXH +xMz +npX +nmR +bzk +bzk +vES +cdi +pIv +kOH +pIv +cdi +vES +wIc +wIc +wFZ +npX +xMz +mAC +sAj +gzE +uMN +uhN +huH +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(23,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +hkY +tVz +xic +hkY +naM +naM +naM +naM +hkY +hkY +hkY +nwG +nwG +hkY +hkY +qXI +hkY +nwG +cmZ +aIB +eRQ +mYY +mYY +mYY +mYY +mYY +mYY +lWL +otG +dzi +dzi +tNr +mYY +mYY +aIB +scU +kRA +mYY +mYY +nwG +rYF +nwG +fEj +nwG +nwG +nwG +stc +nwG +nwG +nwG +iuf +iuf +iuf +tdk +gqR +bCI +nuW +orH +mKI +feU +tdk +tdk +iuf +iuf +nwG +nwG +nwG +nwG +uMN +kox +fxp +fxp +oXl +wgy +seP +huH +ujr +vrr +xBs +wNI +oXl +uhN +seP +cwQ +ujr +cot +cot +bGj +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +rPz +cXI +npX +uhN +huH +sPs +ctJ +rVw +rVw +cxb +npX +gFp +bmj +bmj +bmj +qDJ +bMm +kOH +bMm +qDJ +bmj +bmj +bmj +ucM +npX +cxb +uhX +uhX +ctJ +wtF +uhN +huH +npX +aeg +rPz +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(24,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +hkY +eAa +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +nwG +nwG +hkY +hkY +hkY +hkY +nwG +cmZ +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +otG +dzi +dzi +tNr +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +rYF +nwG +szx +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +tdk +bMJ +pds +wqO +axP +tdk +tdk +iuf +iuf +iuf +nwG +nwG +nwG +nwG +bhd +uCl +fxp +fxp +oXl +cjn +seP +huH +eEG +gDi +gDi +gDi +tLb +uhN +seP +gpd +ujr +cot +cot +byu +bhd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +bMm +cXI +npX +uhN +mRg +npX +tdq +raE +rVw +xxS +npX +oCw +bmj +joj +bmj +cmP +bMm +kOH +bMm +xFl +bmj +ffW +bmj +tKy +npX +haV +uhX +tyo +hQe +npX +tLX +huH +npX +aeg +bMm +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(25,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +hkY +hkY +sjS +hkY +nwG +cmZ +pqK +uoi +mBi +vWN +vWN +vWN +bOI +mYY +mYY +omC +vWN +vWN +vYe +mYY +mYY +mYY +mYY +mYY +dsX +eQk +nwG +rYF +nwG +nwG +nwG +nwG +nwG +egj +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iJG +iuf +iuf +iuf +iuf +nwG +nwG +nwG +nwG +uMN +oLG +fxp +fxp +ueE +wbL +seP +huH +kOH +kOH +kOH +kOH +kOH +uhN +seP +pIT +eig +cot +cot +xkm +pfo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +aeg +bMm +cXI +npX +uhN +huH +liK +ctJ +rVw +rVw +tUf +npX +qmu +bmj +qmu +bmj +cdi +bpZ +kOH +npE +cdi +bmj +qmu +bmj +qmu +npX +tUf +uhX +uhX +ctJ +nzQ +uhN +huH +npX +aeg +bMm +cXI +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(26,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +flt +dBz +akc +xud +nGI +ieJ +hSj +dOK +tXM +mIu +nwG +nwG +hkY +hkY +hkY +hkY +nwG +cmZ +tln +bNL +mYY +mYY +mYY +mYY +otG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +gQt +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +rOx +fxp +fxp +oXl +lba +seP +fUp +kOH +npX +nXR +npX +kOH +sPA +seP +gSa +ujr +cot +cot +iwZ +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +aeg +bMm +cXI +npX +uhN +huH +vPI +hxD +nAB +iVu +pMw +npX +wOj +iFa +wOj +iFa +qDJ +bMm +kOH +bMm +qDJ +iFa +wOj +iFa +wOj +npX +pMw +iVu +nAB +lkm +gie +uhN +huH +npX +aeg +bMm +cXI +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(27,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +dfu +gYa +rRf +wJT +sJT +sDP +jKC +wno +nLJ +hOa +nwG +nwG +hkY +hkY +vBp +hkY +nwG +cmZ +mYY +mYY +psT +uGy +mYY +mYY +otG +mYY +mYY +mYY +mYY +mYY +mYY +xIr +qZt +qZt +pxp +mYY +fqa +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +uMN +gPE +lbt +uMN +seP +fUp +kOH +npX +lFi +npX +kOH +sPA +seP +uMN +bLS +cot +xMv +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +pjT +bMm +bMm +bMm +qLe +uhN +huH +lST +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +cry +kOH +cry +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +lST +uhN +huH +qCM +bMm +bMm +bMm +jRd +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(28,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +usi +bUJ +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mYY +bam +mvK +tNr +mYY +mYY +otG +mYY +mYY +mYY +mYY +mYY +mYY +lWh +mYY +mYY +eIg +mYY +evJ +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +xTW +iuf +tdk +ifn +ptr +fJA +tdk +iuf +iuf +nwG +nwG +nwG +nwG +nwG +npX +uMN +uMN +uMN +uMN +seP +fUp +kOH +npX +nXR +npX +kOH +sPA +seP +uMN +uMN +bdb +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +xzP +gRd +gRd +eFQ +npX +uhN +huH +thm +mjW +nIt +mjW +nIt +npX +eBV +pzH +hfy +hYn +uMN +npX +umy +npX +uMN +vtu +iCH +aeX +uWE +npX +nIt +mjW +nIt +mjW +fUG +uhN +huH +npX +eFQ +gRd +bmX +rKE +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(29,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +ofO +ykj +xWE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +dmw +nwG +mfO +nwG +nwG +cmZ +mYY +mYY +rOE +tNr +mYY +mYY +otG +mYY +mYY +mYY +mYY +mYY +mYY +lWh +mYY +mYY +eIg +txW +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +tdk +tdk +egj +wqO +tdk +tdk +uwY +oDn +dqR +tdk +tdk +iuf +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +npX +kcY +seP +fUp +kOH +kOH +kOH +kOH +kOH +sPA +seP +kcY +npX +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +npX +npX +npX +uhN +huH +xkh +puU +tAW +puU +tAW +npX +gfe +gfe +gfe +gfe +khd +cLN +kOH +eSW +gfe +gfe +hYg +gfe +umb +npX +tAW +puU +tAW +puU +lKh +uhN +huH +npX +npX +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +"} +(30,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +mlX +aBG +nFh +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +oBA +ikK +nwG +nwG +nwG +nwG +cmZ +mYY +loV +xfk +tNr +mYY +mYY +omC +vWN +vWN +bOI +mYY +qJE +rdE +azj +vGQ +vGQ +nEQ +lWi +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +gqR +aeA +mCY +nPC +gjA +oTn +ebI +lEQ +ehi +eGJ +ooI +tSz +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +pnA +seP +seP +mYB +laK +eTw +kOH +aiv +laK +mCd +seP +seP +unA +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +puU +kVU +npX +puU +kVU +npX +uhN +hBu +npX +rng +fry +puU +kYo +npX +wII +qSz +kzt +qSz +cWi +cLN +kOH +hqf +gfe +gfe +gfe +gfe +gfe +npX +sgJ +puU +pkc +vhJ +npX +aNv +huH +npX +puU +kVU +npX +puU +kVU +npX +npX +nwG +nwG +nwG +nwG +"} +(31,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +jfo +wxG +hZU +hhy +tKu +xZn +oMv +ucE +ucE +ucE +nwG +aot +aot +nwG +nwG +nwG +nwG +cmZ +mYY +mYY +qFB +tNr +mYY +mYY +mYY +mYY +mYY +otG +mto +mYY +tjy +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +dUx +nwG +vkG +nwG +xOt +nwG +deA +nwG +nwG +iuf +sMD +fnM +udP +mHO +fTk +tGL +dsS +gZZ +tWJ +nIl +dmh +ooI +ooI +nwG +nwG +nwG +nwG +lOK +nwG +nwG +bhd +mWr +seP +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +seP +ojs +bhd +nwG +nwG +nwG +lOK +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +puU +puU +puU +puU +puU +puU +npX +uhN +huH +eiD +puU +puU +puU +puU +npX +fuL +kBf +jEO +jow +sVY +tEo +kOH +hqf +dWb +dWb +dWb +dWb +dWb +npX +puU +puU +puU +puU +teP +uhN +huH +npX +puU +puU +puU +puU +puU +puU +npX +nwG +nwG +nwG +nwG +"} +(32,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +mAZ +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +frR +frR +nwG +nwG +nwG +nwG +cmZ +mYY +qMO +mYY +tNr +mYY +mYY +mYY +mYY +mYY +otG +kNo +mYY +hrR +mYY +mYY +mYY +mYY +mYY +mYY +mcp +nwG +nwG +nwG +nwG +gwK +nwG +ouN +nwG +nwG +nwG +nwG +iuf +jMb +bXs +gij +mHO +yfD +fGk +fGk +fGk +pxT +fvJ +afL +bYS +iuf +nwG +nwG +uMN +puU +puU +uMN +nwG +uMN +mWr +seP +uMN +hKZ +htn +hyu +uMN +pzP +vmS +hms +uMN +seP +ojs +uMN +nwG +uMN +puU +puU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cdi +uhN +huH +npX +boC +uTE +jXp +xuL +npX +dwW +cot +xkm +cot +yfX +qBW +kOH +hqf +cot +jwu +gPx +jwu +gPx +npX +xuL +jXp +uTE +boC +npX +uhN +huH +cdi +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(33,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +rrB +ucE +ucE +ucE +nWV +ucE +sQq +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cmZ +mYY +mYY +mYY +tNr +mYY +mYY +mYY +mYY +mYY +otG +uQV +mYY +sCp +mYY +mYY +mYY +mYY +mYY +mYY +iKL +nwG +nwG +nwG +nwG +fRt +nwG +xyp +nwG +nwG +nwG +nwG +iuf +ivA +lqS +kmm +icl +bSy +aCL +aCL +lxC +vPm +kmm +shZ +bYS +iuf +nwG +nwG +npX +uMN +uMN +uMN +uMN +uMN +waY +seP +pGr +kcY +tKS +xix +tep +vfH +vfH +sPA +pGr +seP +ojs +uMN +uMN +uMN +uMN +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qDJ +uhN +huH +odY +npX +npX +npX +npX +npX +lBG +cot +egr +cot +aBH +rBH +kOH +hqf +cot +cot +cot +cot +gxr +npX +npX +npX +npX +npX +odY +uhN +huH +qDJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(34,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +tzS +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +cJW +nwG +nwG +cmZ +mYY +mYY +mYY +xgK +noS +noS +noS +noS +noS +gtL +cUd +mYY +wPR +mYY +iqH +mYY +mYY +mYY +mYY +bUW +nwG +nwG +nwG +nwG +wWp +nwG +hrQ +nwG +nwG +nwG +nwG +iuf +eNo +ftq +gij +mHO +bSy +kmm +kmm +vMU +cpQ +ttK +vtm +qEu +iuf +nwG +nwG +uMN +vVl +vyg +owF +szl +uMN +mWr +seP +uMN +fmx +sWr +hyu +uMN +wBl +tbe +hms +uMN +seP +ojs +uMN +szl +ceb +gRp +pKU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +uhN +huH +npX +boC +dXH +qdI +lRl +npX +dvM +cot +cot +cot +rYB +cLN +kOH +hqf +gCK +biX +uYZ +biX +uYZ +npX +lRl +qdI +dXH +boC +npX +uhN +huH +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(35,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +jmm +nwG +nwG +wxH +lVy +lVy +lVy +lVy +reP +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +xXf +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +sMD +aea +hTt +mHO +ehL +ktB +sCv +mAJ +dAc +mwT +tkz +ooI +tSz +nwG +nwG +uMN +vVl +vyg +owF +szl +uMN +mWr +seP +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +seP +ojs +uMN +jvr +ceb +gRp +pKU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +uhN +huH +gqp +puU +puU +puU +puU +npX +dvM +cot +cot +cot +rYB +cLN +kOH +hqf +gOm +lEz +lEz +lEz +dMQ +npX +puU +puU +puU +puU +dPL +uhN +huH +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(36,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iZg +iZg +iZg +nwG +nwG +nwG +nwG +nDe +nwG +nwG +wxH +dJN +dJN +dJN +lVy +suu +suu +suu +sKd +fkl +kDA +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ovj +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +gqR +qZx +uyj +peq +xlT +xWN +doG +lHu +lbO +xYs +ooI +ooI +nwG +nwG +uMN +ykY +puU +kPT +jvr +uMN +mWr +seP +uMN +ctJ +lIA +bpJ +uMN +fPP +qra +ctJ +uMN +seP +ojs +uMN +szl +fnm +puU +qsX +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +uhN +hrI +npX +kIE +kyO +puU +kYo +npX +lBG +cot +vlx +cot +aBH +rTg +kOH +hqf +cLN +jie +kOH +cHc +hqf +npX +sgJ +puU +gRz +onk +npX +rfi +huH +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(37,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iZg +iZg +iZg +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wxH +dJN +dJN +dJN +lVy +mJw +kkA +suu +sKd +rjM +aYg +nwG +nwG +nwG +nwG +vJT +nwG +nwG +nwG +poC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +tdk +tdk +egj +wqO +tdk +tdk +tdk +wqO +sMD +tdk +tdk +iuf +nwG +nwG +uMN +vVl +vyg +owF +bMm +pGr +mWr +seP +pGr +ctJ +gzZ +gzZ +uMN +eCj +eCj +ctJ +pGr +seP +ojs +pGr +bMm +ceb +gRp +pKU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +rPz +cXI +npX +uhN +huH +hCx +puU +tAW +puU +tAW +npX +dwW +cot +xkm +cot +yfX +hVl +kOH +hqf +cLN +oVv +kOH +pYp +hqf +npX +tAW +puU +tAW +puU +iaU +uhN +huH +npX +aeg +rPz +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(38,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iZg +iZg +iZg +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wxH +dJN +dJN +dJN +lVy +suu +suu +suu +sKd +tcp +qsH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lBD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iJG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +nwG +nwG +uMN +vVl +vyg +puq +iiv +uMN +mWr +seP +uMN +pMw +sYT +jmU +uMN +iEW +uCt +pMw +uMN +seP +ojs +uMN +iiv +obS +gRp +pKU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +bMm +cXI +npX +uhN +huH +npL +mjW +nIt +mjW +nIt +npX +daq +kNc +jEO +gfo +gzF +tEo +kOH +dWj +qph +mjj +odZ +mjj +gic +npX +nIt +mjW +nIt +mjW +veT +uhN +huH +npX +aeg +bMm +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(39,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +git +git +git +git +git +nwG +nwG +nwG +nwG +nwG +wxH +sSC +sSC +sSC +lVy +suu +suu +suu +sKd +aYg +aYg +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +uMN +uMN +uMN +uMN +uMN +waY +seP +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +seP +ojs +uMN +uMN +uMN +uMN +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +aeg +bMm +cXI +npX +uhN +huH +uMN +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +umy +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +uMN +uhN +huH +npX +aeg +bMm +cXI +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(40,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +naM +nwG +nwG +nwG +nwG +nwG +nwG +lhP +git +nwG +nwG +nwG +nwG +git +nwG +nwG +nwG +nwG +nwG +wxH +sSC +sSC +sSC +lVy +byX +nLN +vJt +sWv +pqn +pqn +nRp +nRp +nwG +nwG +nwG +wxc +nwG +nwG +nwG +nwG +hkY +hkY +cwk +xvG +qhh +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +ctJ +ctJ +fWy +bMm +uMN +mWr +seP +uMN +ctJ +lIA +fPP +uMN +bpJ +qra +ctJ +uMN +seP +ojs +uMN +luf +eqT +kLa +pRr +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +aeg +bMm +cXI +npX +uhN +mYB +laK +laK +laK +wLU +laK +laK +laK +laK +laK +laK +gdk +bMm +kOH +bMm +upq +laK +laK +laK +laK +laK +laK +wLU +laK +laK +laK +mCd +huH +npX +aeg +bMm +cXI +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(41,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dTV +nwG +nwG +nwG +nwG +git +nwG +nwG +uuZ +nwG +nwG +wxH +sSC +sSC +sSC +lVy +byX +byX +byX +sWv +pqn +pqn +nRp +nRp +nwG +nwG +nwG +nwG +qAn +nwG +aYh +nwG +hkY +cNe +gUh +bUs +kJZ +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +xTW +iuf +iuf +nwG +nwG +qfQ +pXy +bco +kkC +bMm +pGr +mWr +seP +pGr +ctJ +eCj +eCj +uMN +sNx +sNx +ctJ +pGr +seP +ojs +pGr +bMm +sPA +kcY +seP +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +pjT +bMm +bMm +bMm +qvw +uhN +seP +ddf +bGE +bGE +bGE +bGE +bGE +bqt +bGE +bGE +bGE +ltH +bMm +kOH +bMm +sjU +bGE +bGE +bGE +hnQ +bGE +bGE +bGE +bGE +bGE +pkS +wrh +huH +fwf +bMm +bMm +bMm +jRd +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(42,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +wWh +wWh +wWh +wWh +wWh +nwG +dTV +dTV +git +dPl +git +git +nwG +nwG +nwG +uuZ +nwG +wxH +wxH +wxH +wxH +lVy +byX +byX +byX +sWv +pqn +pqn +nRp +nRp +nwG +nwG +nwG +nwG +nwG +nwG +cdg +nwG +hkY +hkY +oAh +beM +csh +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +tdk +tdk +tdk +tdk +tdk +fWK +nkH +nwG +nwG +ixo +pXy +moe +kkC +bMm +uMN +mWr +seP +uMN +pMw +uCt +iEW +uMN +vQb +xRs +pMw +uMN +seP +ojs +uMN +qCp +doN +fvW +pRr +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +xzP +bmX +gRd +uOF +npX +uhN +wrh +huH +uMN +npX +gkT +xxs +oka +npX +uMN +bOc +tej +wvF +bMm +lSs +bMm +wvF +tej +bOc +uMN +npX +gkT +xxs +oka +npX +uMN +uhN +wrh +huH +npX +uOF +gRd +bmX +rKE +npX +nwG +nwG +nwG +nwG +nwG +nwG +"} +(43,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +wWh +wWh +wWh +wWh +wWh +nwG +dTV +nwG +nwG +nwG +nwG +git +nwG +nwG +nwG +nwG +nwG +nwG +oQD +oQD +aXv +lCB +byX +qgc +byX +sWv +pqn +pqn +nRp +nRp +nwG +nwG +nwG +nwG +nwG +nwG +eub +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +bEW +tdk +bEW +wqO +tdk +tdk +fPu +bKO +bxN +uCg +kdY +nkH +nwG +nwG +ixo +pXy +fPP +kkC +bMm +uMN +mWr +seP +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +seP +ojs +uMN +uMN +uMN +uMN +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +npX +npX +npX +uhN +wrh +huH +npX +fFq +ngN +bMm +bMm +vPK +npX +npX +npX +eBO +kqb +npX +eBO +kqb +npX +npX +npX +dMq +bMm +bMm +fuq +oWr +npX +uhN +wrh +huH +npX +npX +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +"} +(44,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +krO +wWh +wWh +wWh +wWh +nwG +git +nwG +nwG +nwG +nwG +git +nwG +nwG +nwG +nwG +nwG +nwG +oQD +oQD +aXv +lCB +tJF +tJF +tJF +nwG +nwG +nwG +nwG +nwG +nwG +xVC +xdM +awm +nwG +nwG +nwG +nwG +hkY +hkY +jgZ +oXt +tqw +nwG +nwG +nwG +nwG +nwG +nwG +tdk +afn +xtC +dut +pcP +tet +vbw +dut +tUO +xQk +bKv +wfh +bkR +nkH +nwG +nwG +seL +pXy +moe +kkC +bMm +uMN +mWr +seP +uMN +ctJ +lIA +fPP +uMN +moe +qra +ctJ +uMN +seP +ojs +uMN +buI +lwq +uoH +kzd +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +puU +kVU +npX +puU +kVU +npX +uhN +wrh +huH +qlv +bMm +bMm +pOg +bMm +glT +npX +uMN +iyY +mAr +mAr +kkq +mAr +mAr +oib +uMN +npX +izm +bMm +bsg +bMm +bMm +oVH +uhN +wrh +huH +npX +puU +kVU +npX +puU +kVU +npX +npX +nwG +nwG +nwG +nwG +"} +(45,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +krO +wWh +wWh +wWh +wWh +nwG +git +git +git +git +git +git +nwG +nwG +nwG +tAH +nwG +nwG +nwG +nwG +aXv +lCB +tJF +tJF +tJF +nwG +nwG +nwG +nwG +nwG +nwG +xVC +xdM +awm +nwG +nwG +nwG +nwG +hkY +hMP +cWA +kdJ +iXl +nwG +nwG +nwG +nwG +nwG +nwG +tIr +bXs +xgI +egj +mTM +kmm +uMB +egj +fxp +uRR +sxJ +pje +bYS +iuf +nwG +nwG +uMN +ctJ +ctJ +fWy +bMm +uMN +mWr +seP +pGr +ctJ +gJq +gJq +uMN +gzZ +gzZ +ctJ +pGr +seP +ojs +xDP +lwq +lwq +swc +uMN +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +puU +puU +puU +puU +puU +puU +npX +xhp +pkS +huH +npX +iar +ngN +dnj +bMm +udB +npX +juz +dyx +hBF +hBF +hBF +hBF +hBF +oKX +oMs +npX +tmJ +bMm +dnj +fuq +gbd +npX +uhN +ddf +vyP +npX +puU +puU +puU +puU +puU +puU +npX +nwG +nwG +nwG +nwG +"} +(46,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +krO +krO +krO +krO +krO +wWh +wWh +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kYP +nwG +nwG +aXv +lCB +tJF +tJF +tJF +nwG +nwG +nwG +nwG +nwG +nwG +xVC +xdM +awm +nwG +nwG +nwG +nwG +hkY +hkY +mCm +nuT +bTY +nwG +tdA +tdA +nwG +nwG +nwG +sZq +lqS +kmm +nuR +kmm +kmm +kmm +cbr +fxp +fxp +dEB +omo +bYS +iuf +nwG +nwG +npX +uMN +scE +fWy +bMm +uMN +waY +seP +uMN +pMw +qhV +vCb +uMN +jmU +sYT +pMw +uMN +seP +ojs +uMN +kHz +mkA +wkY +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +uhN +rTh +npX +npX +npX +npX +npX +npX +uMN +jVr +hBF +hBF +hBF +hBF +hBF +hBF +oKX +bZT +npX +npX +npX +npX +npX +npX +npX +nXo +huH +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(47,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +krO +wWh +wWh +wWh +wWh +nwG +kSC +kSC +kSC +kSC +kSC +kSC +nwG +nwG +nwG +kns +nwG +nwG +nwG +nwG +vBW +pcb +tJF +tJF +tJF +nwG +nwG +pSg +nwG +nwG +nwG +xVC +xdM +awm +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +tdA +tdA +nwG +nwG +nwG +sUl +vwv +gij +egj +mTM +kmm +egc +wqO +egj +iwA +dut +lsn +qEu +iuf +nwG +nwG +nwG +npX +uMN +blK +rvJ +uMN +mWr +seP +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +seP +ojs +uMN +rHf +uMN +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +rZr +mQe +pPN +lwq +lwq +kbK +acQ +fGr +aqc +hBF +djA +xPI +jbs +uvT +oKX +doE +npX +vgZ +hJf +php +dIp +aOw +npX +edu +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(48,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wWh +wWh +krO +wWh +wWh +wWh +wWh +nwG +kSC +nwG +nwG +nwG +nwG +kSC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +tkL +tkL +tkL +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uoy +dKh +oQk +oQk +nwG +nwG +nwG +tdk +afn +iNg +dut +fGs +iuu +sHg +dut +rQn +ygl +mVw +lyD +tuL +nkH +nwG +nwG +nwG +nwG +npX +uMN +uMN +uMN +diH +seP +seP +seP +seP +huH +kOH +uhN +seP +seP +seP +seP +hHN +uMN +uMN +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +gSl +eUH +pPN +lwq +aqC +wkY +npX +uog +hBF +hBF +eyi +kFS +tEz +hBF +oKX +wEc +npX +bMm +bMm +bMm +bMm +bMm +nXR +uhN +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(49,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +wUW +wUW +wUW +nwG +kSC +nwG +nwG +nwG +nwG +kSC +nwG +nwG +nwG +jYz +nwG +nwG +dtk +nwG +nwG +nwG +tkL +tkL +tkL +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vJd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uoy +dKh +tGb +tGb +aFQ +uoy +nwG +iuf +tdk +bEW +tdk +bEW +wqO +tdk +tdk +jLb +mcL +gGL +drY +kdY +nkH +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +npX +ucI +say +say +say +tBb +wlo +qSK +say +say +say +pvY +npX +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cdi +uhN +miX +npX +npX +npX +npX +xmE +lwq +ddS +jVr +hBF +hBF +hBF +hBF +hBF +hBF +oKX +uHw +npX +bMm +bMm +xYQ +bMm +bMm +pZV +uhN +huH +cdi +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(50,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +lWT +wUW +wUW +wUW +wUW +nwG +kSC +nwG +nwG +nwG +nwG +kSC +nwG +nwG +nwG +iFC +nwG +nwG +nwG +nwG +nwG +nwG +tkL +tkL +tkL +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uoy +dKh +tGb +tGb +aFQ +uoy +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +tdk +tdk +srZ +qGE +ifr +ydH +nkH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +uMN +pGr +uMN +bCl +uMN +uMN +uMN +uMN +uMN +uMN +uMN +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ixo +uhN +huH +hFz +mbv +aqC +ddS +vii +vii +npX +lcC +hBF +hBF +apP +hBF +hBF +hBF +oKX +uMN +uMN +peo +uMN +xVL +lUq +hPV +npX +uhN +huH +ixo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(51,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +wUW +wUW +wUW +nwG +kSC +nwG +nwG +nwG +nwG +kSC +nwG +nwG +nwG +lhP +nwG +nwG +nwG +nwG +nwG +nwG +tkL +tkL +tkL +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dZU +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iJG +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +jUV +seP +seP +seP +huH +kOH +rhV +puU +bcv +bcv +bcv +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qDJ +uhN +rTh +npX +npX +npX +npX +npX +npX +uMN +lcC +hBF +hBF +xPI +oKj +vUh +hBF +oKX +npX +bMm +bMm +npX +npX +npX +npX +npX +nXo +huH +qDJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(52,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +wUW +wUW +wUW +nwG +kSC +nwG +nwG +nwG +nwG +kSC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +vgL +nwG +xTP +nwG +nwG +wQR +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +gJq +gJq +gJq +seP +huH +kOH +rhV +puU +puU +szT +puU +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +npX +ctJ +tfg +ctJ +npX +ony +dIT +iei +hBF +hXv +inz +mmL +opE +hBF +tnk +npX +bMm +jrh +nXR +ctJ +tfg +ctJ +npX +uhN +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(53,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +nzW +wgP +wUW +nwG +kSC +kSC +kSC +kSC +kSC +kSC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +bMS +ekE +jmf +mYY +mYY +mYY +mIV +mYY +rdF +mYY +mYY +mYY +mYY +nwG +nwG +sJB +nwG +nwG +lSH +iNE +nwG +uzD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +vCb +vCb +vCb +seP +huH +tSl +rhV +puU +bcv +bcv +bcv +uMN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +gsu +ctJ +vUL +ctJ +pmk +aHD +mFb +hBF +ozw +exU +tJF +rDl +pbS +iSX +oKX +uMN +npX +peo +npX +ryU +evB +ctJ +gsu +uhN +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(54,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +fGN +kwy +wUW +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +sGH +xQG +rjR +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +clE +iol +uzD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +uMN +uMN +uMN +pGr +uMN +pGr +uMN +uMN +uMN +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cdi +uhN +huH +gsu +ctJ +jkj +ctJ +gbn +qAM +tEz +flw +iie +tbt +muQ +tJF +tJF +jVr +oKX +bMm +kmm +kmm +aMF +ctJ +jkj +ctJ +gsu +uhN +huH +cdi +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(55,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wUW +wUW +wUW +wUW +pVC +gYn +wUW +nwG +dGF +dGF +dGF +dGF +dGF +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +dth +jBc +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +wQR +nwG +nwG +nwG +clE +nwG +nwG +nwG +jFC +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +kOr +eUj +huH +flr +uhN +nIG +aOv +oWA +npX +nwG +nwG +nwG +nwG +nwG +tmS +tmS +nbx +tmS +tmS +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ixo +uhN +huH +gsu +ctJ +vUL +ctJ +dkE +rmv +rbc +hBF +oKX +tJF +tJF +tbt +tJF +jVr +oKX +bMm +tRD +kmm +mDa +ctJ +evB +ctJ +gsu +uhN +huH +ixo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(56,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uPd +nwX +lwk +nwG +dGF +nwG +nwG +nwG +nwG +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +jQH +qpd +mYY +kNY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +dCn +nwG +lSH +fpe +nwG +nwG +nwG +hWw +nwG +nwG +nwG +iuf +iuf +lbg +lbg +lbg +lbg +lbg +lbg +lbg +tdk +tdk +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +bhd +qsG +uhN +huH +kOH +uhN +huH +aLd +bhd +nwG +nwG +nwG +nwG +nwG +nwG +tmS +tmS +tmS +tmS +qtf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qDJ +uhN +rTh +odY +ctJ +jBJ +bCU +npX +tKm +hBF +hBF +oKX +tJF +tJF +tJF +qLi +jVr +oKX +bMm +kmm +ace +npX +pZr +jBJ +ctJ +odY +nXo +huH +qDJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(57,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +bbM +kWI +bYs +nwG +dGF +nwG +nwG +nwG +nwG +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +ygZ +pCz +mYY +abg +mYY +mYY +xQs +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +lbg +lXh +uyj +kmm +kmm +kmm +kmm +tvj +eMj +ooI +tSz +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uMN +lsA +snB +ltH +kOH +sjU +pGl +aAm +uMN +nwG +nwG +nwG +nwG +nwG +nwG +tmS +sGy +tmS +tmS +tmS +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +gsu +ctJ +vUL +ctJ +pmk +aHD +mFb +hBF +oKX +rDl +muQ +tJF +tJF +jVr +oKX +bMm +tRD +kmm +aMF +ctJ +evB +ctJ +gsu +uhN +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(58,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lGN +yjw +eBC +nwG +dGF +nwG +nwG +nwG +nwG +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +bpj +lhf +mYY +iBk +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +lbg +bXs +gij +kmm +mxx +mxx +kmm +pKA +mZk +ooI +ooI +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +qlX +ilE +gRd +ilE +hbQ +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +tmS +tmS +mNQ +tmS +tmS +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +huH +gsu +ctJ +jkj +ctJ +gbn +gHr +bSL +flw +iie +tJF +tJF +tbt +tJF +jVr +oKX +bMm +kmm +kmm +mDa +ctJ +jkj +ctJ +gsu +uhN +huH +cdi +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(59,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kvh +uiT +ybm +nwG +dGF +nwG +nwG +nwG +nwG +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +xLt +uCu +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +lbg +lqS +kmm +gDe +biQ +iIi +kmm +ikU +kve +qEu +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +gkT +xxs +oka +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mNQ +tmS +tmS +phx +tmS +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cdi +uhN +huH +gsu +ctJ +vUL +ctJ +dkE +rmv +rbc +hBF +qfH +xRE +biJ +tJF +kHR +whD +oKX +bMm +kmm +kmm +npX +ctJ +evB +ctJ +gsu +uhN +huH +ixo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(60,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ntZ +jkM +mNT +nwG +dGF +nwG +nwG +nwG +nwG +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +sym +aMP +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +lbg +ftq +gij +kmm +cTZ +cTZ +kmm +eLX +mZk +ooI +tSz +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ixo +uhN +rTh +npX +ctJ +sIx +atg +npX +mpU +hBF +hBF +hBF +iQa +ffF +tVj +dyx +hBF +oKX +npX +qDo +qDo +npX +nXW +sIx +ctJ +npX +nXo +huH +ixo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(61,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +hdl +xJt +nSP +nwG +dGF +dGF +dGF +dGF +dGF +dGF +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +iHo +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +lbg +dDU +uyj +kmm +kmm +kmm +kmm +xcw +hMc +ooI +ooI +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qDJ +uhN +uMC +npX +npX +npX +npX +uMN +enu +vFe +tZV +hBF +hBF +oKj +tEz +vUh +hBF +tnk +uMN +npX +npX +npX +npX +npX +npX +npX +nTP +huH +qDJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(62,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dSX +fll +iIv +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +xmg +mYY +mYY +mYY +mYY +vuE +lye +seO +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +lbg +lbg +lbg +lbg +lbg +lbg +lbg +tdk +tdk +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +nwG +hYG +nwG +hYG +nwG +nwG +nwG +nwG +kUz +nwG +nwG +wGN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uhN +qsG +bMm +nXR +bMm +iRF +nXR +jVr +hBF +hBF +hBF +hBF +xGz +hBF +hBF +hBF +iQa +ffF +ffF +xRE +nXR +iRF +bMm +nXR +bMm +aLd +huH +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(63,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kBt +wWI +eWA +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +aXH +pDf +bjM +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +nwG +jCf +kYz +muk +muk +lMZ +vHw +vHw +vHw +vHw +vHw +nwG +nwG +wGN +wGN +nwG +wGN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +uhN +qsG +bMm +jvS +bMm +vPg +dMS +jVr +hBF +uvT +hBF +hBF +hBF +uvT +hBF +hBF +hBF +uvT +hBF +hBF +dMS +eOT +bMm +iqQ +bMm +aLd +huH +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(64,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dvV +itc +dKz +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +oOk +ilx +abL +mYY +mYY +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +vHw +vHw +iwN +jFt +lco +lco +nnQ +vHw +vHw +qOk +sud +ueP +vvF +vHw +vHw +xIV +gbM +xIV +nNl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +tuD +mCd +qsG +oQt +nXR +bMm +bXE +nXR +pbS +pOC +inz +inz +inz +inz +pOC +inz +inz +inz +inz +pOC +exU +nXR +bXE +bMm +nXR +qWo +aLd +mYB +aVP +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(65,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +iJw +aov +qDH +myg +myg +aov +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xIN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +vHw +hRf +fZc +jGa +lel +lel +nvt +vHw +pJM +rdl +sET +ugN +hUt +vHw +wQq +wGN +wGN +wGN +sBp +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +uoy +npX +npX +uhN +wrh +tGJ +npX +npX +npX +npX +npX +npX +uMN +acQ +acQ +acQ +xJm +acQ +xJm +acQ +acQ +acQ +uMN +npX +npX +npX +npX +npX +npX +rkd +wrh +huH +npX +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(66,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +iJw +rBX +iJw +iJw +rwy +rBX +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +tdk +xts +wqO +xts +tdk +tdk +bgo +tdk +tdk +tdk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +hIe +ygs +ixh +jGl +lfY +lfY +nyc +vHw +pLx +rgu +sPn +ulT +xoj +wrL +wWK +wGN +wGN +wGN +ssV +nwG +nwG +nwG +nwG +npX +npX +uMN +kcx +tfg +pMw +npX +uhN +wrh +rTh +npX +pyA +pyA +pyA +pyA +npX +npX +fue +fZc +fZc +fZc +fZc +fZc +fZc +fZc +mmu +npX +npX +pyA +pyA +pyA +pyA +npX +nXo +wrh +huH +npX +tJn +tfg +pMw +uMN +npX +npX +nwG +nwG +nwG +nwG +nwG +"} +(67,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +wTj +xws +qoi +gCf +iOE +jNE +ugd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +tdk +gqR +iYt +fDm +rLf +wqO +gQK +glu +bML +fWK +nkH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +nwG +vHw +vHw +hUt +xoj +ygs +lfZ +lfZ +fZc +vHw +pNG +rlV +sRs +lfY +fZc +wrW +wQq +xKe +wGN +wGN +nro +nwG +nwG +nwG +nwG +npX +uMN +lIA +gJq +gJq +ctJ +npX +uhN +wrh +huH +tjR +wrh +wrh +wrh +wrh +roD +npX +bsS +fZc +fZc +fZc +fZc +fZc +fZc +fZc +sNM +npX +cLY +wrh +wrh +wrh +wrh +tjR +uhN +wrh +huH +npX +ctJ +sNx +sNx +qra +uMN +npX +nwG +nwG +nwG +nwG +nwG +"} +(68,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +iJw +oZC +oZC +oZC +iOE +bvh +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +xts +gqR +afn +hrg +cot +xkm +afn +gQK +dyT +gqD +yah +nkH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +nwG +nwG +vHw +lMZ +fZc +xoj +llr +mvi +lmI +lMZ +lmI +rmd +lfY +lfY +vxF +wtB +wYR +wGN +wGN +wGN +cxs +nwG +nwG +nwG +npX +uMN +vIV +uMN +mpo +qhV +gUE +npX +uhN +wrh +huH +nXR +wrh +wrh +wrh +wrh +pDg +npX +phn +vcp +flC +vcp +vyk +vcp +oxA +vcp +abP +npX +pDg +wrh +wrh +wrh +wrh +nXR +uhN +wrh +huH +npX +cqy +xRs +uvZ +uMN +vIV +uMN +npX +nwG +nwG +nwG +nwG +"} +(69,1,1) = {" +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +wTj +kDs +pJn +qRs +iOE +aAn +ugd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +tdk +gqR +pPZ +xpy +afn +afn +xJx +jCQ +afn +vjN +kRn +elN +fjT +tdk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +nwG +nwG +nwG +nwG +vHw +iDD +jNu +fZc +mvE +nzK +vHw +pRa +xoj +sTV +umH +vyj +vHw +wWK +wGN +wGN +wGN +cxs +nwG +nwG +nwG +npX +ctJ +ctJ +xyd +uMN +uMN +dBn +uMN +uhN +wrh +huH +uMN +gkT +xxs +xxs +oka +npX +npX +npX +pRF +oHY +aPm +npX +pRF +oHY +aPm +npX +npX +npX +gkT +xxs +xxs +oka +uMN +uhN +wrh +huH +uMN +iwS +uMN +uMN +ctJ +ctJ +pMw +npX +nwG +nwG +nwG +nwG +"} +(70,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +iJw +dCf +iOE +iOE +iOE +eSi +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pzK +laj +gij +but +afn +bOq +kmm +jbF +kIV +hqH +xPh +pMM +nHD +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pSV +nwG +nwG +vHw +vHw +lMZ +hIe +vHw +nHN +vHw +hIe +vHw +lMZ +vHw +vHw +vHw +vHw +xQt +wGN +wGN +ssV +nwG +nwG +nwG +npX +uPa +uhX +ctJ +mgU +wrh +wrh +eDL +uhN +wrh +mYB +laK +laK +laK +laK +laK +laK +wLU +laK +laK +eTw +tmV +sQR +tmV +aiv +laK +laK +wLU +laK +laK +laK +laK +laK +laK +mCd +wrh +huH +eDL +wrh +wrh +bSn +ctJ +jAi +mag +npX +nwG +nwG +nwG +nwG +"} +(71,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +wTj +msl +qEb +iOE +lrA +tFT +ugd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +bkh +lqS +rrI +eac +jsp +fJY +fJY +fJY +ftd +fJY +aMk +quT +bYS +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +hNI +vHw +iDF +hIe +lmI +lmI +nKr +oEe +pRG +rpj +ixh +ixh +ixh +ygs +hIe +wGN +iVq +wGN +caf +nwG +nwG +npX +npX +aFE +hRm +buS +uMN +wrh +waG +uMN +gUV +seP +seP +pxt +seP +seP +seP +seP +seP +seP +seP +seP +huH +bMm +kOH +bMm +uhN +seP +seP +seP +seP +seP +seP +seP +seP +pxt +seP +seP +xKv +uMN +waG +wrh +uMN +dRB +uEa +iUJ +npX +npX +nwG +nwG +nwG +"} +(72,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +iJw +iJw +oWv +spE +iJw +iJw +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mFU +ftq +aFN +kmm +egj +mTM +kmm +rEb +egj +gqz +kHQ +wgK +bYS +iuf +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +vHw +vHw +vHw +hIe +vHw +nQr +lMZ +vHw +vHw +vHw +uoR +vHw +vHw +vHw +xSC +vHw +wGN +sBp +nwG +npX +npX +npX +npX +npX +npX +uMN +uwo +uMN +npX +npX +npX +npX +npX +npX +pna +npX +gkT +oka +npX +npX +seP +uMC +bMm +kOH +bMm +nTP +seP +npX +npX +gkT +oka +npX +jPZ +npX +npX +npX +npX +npX +npX +uMN +ihc +uMN +npX +npX +npX +npX +npX +npX +nwG +nwG +"} +(73,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +mYY +nwG +nwG +iJw +jXX +nfM +rCQ +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +tdk +gqR +oLZ +krp +afn +ceK +kmm +meS +fGE +aCo +xXn +cul +pJl +tdk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +hXY +iKm +jUk +fZc +myA +fZc +oLW +pUb +vHw +sYn +pRG +hUt +wtD +xaO +xVi +vHw +wGN +ssV +nwG +npX +npX +jTP +jTP +jTP +frQ +qsG +aLd +mml +jTP +jTP +jTP +npX +npX +aoq +vfH +hzE +fvA +eSG +aau +npX +seP +qsG +npX +nXR +npX +aLd +seP +npX +iyQ +uOR +jwO +mgb +fxp +cVE +npX +npX +jTP +jTP +jTP +frQ +qsG +aLd +mml +jTP +jTP +jTP +npX +npX +nwG +nwG +"} +(74,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wTj +iJw +kLO +iJw +ugd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +tdk +xts +gqR +afn +tvJ +ufG +aZs +mwm +oGr +vWF +sZv +yah +nkH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lMZ +iac +iKm +jVj +lmI +myT +lmI +hxu +nGO +lMZ +sYI +urd +vHQ +vHw +xck +xVi +vHw +wGN +sBp +nwG +npX +aOT +lLC +lLC +iCd +ovI +qsG +aLd +rDA +iCd +lLC +lLC +iBt +npX +vvH +vfH +vfH +vfH +kAj +fCv +stU +seP +dvD +npX +lFi +npX +iRk +seP +pwC +bEA +hpj +fxp +fxp +fxp +mZS +npX +aOT +lLC +lLC +iCd +ovI +qsG +aLd +rDA +iCd +lLC +lLC +iBt +npX +nwG +nwG +"} +(75,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iJw +oWv +iJw +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +tdk +gqR +sZG +vof +aSQ +arT +vTc +cWp +iCw +ydH +nkH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lMZ +ibO +iPZ +xxd +lmU +ygs +eeR +fZc +nrV +vHw +mVX +sHj +cZb +vHw +xlt +xYV +lMZ +wGN +kHG +nwG +npX +bIi +lht +lht +lht +jLQ +qsG +aLd +oIK +lht +lht +lht +joQ +npX +bJZ +vfH +vfH +vfH +vfH +mLs +hvK +seP +qsG +npX +nXR +npX +aLd +seP +uoQ +iwa +fxp +fxp +fxp +fxp +oHU +npX +bIi +lht +lht +lht +jLQ +qsG +aLd +oIK +lht +lht +lht +joQ +npX +nwG +nwG +"} +(76,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +iuf +iuf +iuf +iuf +tdk +xts +xuf +xts +ubm +tdk +kkQ +tdk +tdk +tdk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +ifx +iYc +iYc +lzM +ygs +udW +aaY +pXp +vHw +sZF +uFN +vId +vHw +xpc +xZo +vHw +wGN +sBp +nwG +npX +jbC +rsH +iUu +vor +fgG +qsG +aLd +qKy +six +mIA +cnI +wMu +npX +dmW +vfH +vfH +vfH +vfH +fCv +moi +seP +tGJ +bMm +kOH +bMm +rkd +seP +qFU +bEA +fxp +fxp +fxp +fxp +krQ +npX +jbC +hiB +kAU +sfG +qpZ +qsG +aLd +qKy +faA +jkv +aKE +wMu +npX +nwG +nwG +"} +(77,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mLq +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +trU +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +vHw +jfd +jXU +oqv +iga +lhC +qYy +vHw +vHw +vHw +vHw +vHw +vHw +vHw +xZL +vHw +wGN +sBp +nwG +npX +ouw +puU +puU +puU +jLQ +qsG +aLd +oIK +puU +puU +puU +qlc +npX +npX +heV +nKz +spj +alb +aEm +npX +seP +huH +iiv +odY +iiv +uhN +seP +npX +kcn +oGm +vYx +oCB +dMD +npX +npX +ouw +puU +puU +puU +jLQ +qsG +aLd +oIK +puU +puU +puU +qlc +npX +nwG +nwG +"} +(78,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vHw +jgf +jZr +lAS +jiw +wmS +rBt +vHw +cKS +hDU +ctg +vLm +wtZ +xsX +yal +lMZ +wGN +pMC +nwG +npX +mPl +rPt +rPt +eai +ppm +qsG +aLd +mAm +gvR +rPt +rPt +cIw +npX +npX +npX +npX +npX +npX +npX +npX +iku +iku +npX +npX +npX +iku +iku +npX +npX +npX +npX +npX +npX +npX +npX +mPl +rPt +rPt +eai +ppm +qsG +aLd +mAm +gvR +rPt +rPt +cIw +npX +nwG +nwG +"} +(79,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pSV +nwG +nwG +nwG +vHw +mYY +kfA +lCG +cSp +hYG +cJl +vHw +vHw +sKi +uEJ +pFl +wxu +xtj +vHw +vHw +xIV +bav +nwG +npX +qkq +bbI +mHx +dqt +ybT +qsG +aLd +cqI +bbI +mHx +dqt +mQM +npX +npX +hTU +hTU +nER +siy +npX +npX +seP +huH +vhU +kOH +nKT +uhN +seP +npX +npX +iDE +iDE +wPf +uRU +npX +npX +qkq +bbI +mHx +dqt +ybT +qsG +aLd +cqI +bbI +mHx +dqt +mQM +npX +nwG +nwG +"} +(80,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +nwG +nwG +sJh +nwG +nwG +mYY +kUz +vHw +vHw +vHw +vHw +vHw +vHw +vHw +nwG +nwG +nwG +nwG +npX +eed +gNE +tDR +bHD +wUI +qsG +aLd +rqE +bHD +tDR +xES +jFN +npX +wxV +seP +wrh +wrh +wrh +qoo +npX +seP +huH +xqU +kOH +vhU +uhN +seP +npX +qoo +wrh +wrh +wrh +seP +neg +npX +eed +gNE +tDR +bHD +wUI +qsG +aLd +rqE +bHD +tDR +xES +jFN +npX +nwG +nwG +"} +(81,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +tdv +rPt +rPt +eai +ppm +qsG +aLd +mAm +uwz +qtu +gHM +vXg +npX +jCW +seP +wrh +wrh +wrh +seP +hWq +seP +huH +nKT +kOH +dPW +uhN +seP +hWq +seP +wrh +wrh +wrh +seP +neg +npX +tdv +rPt +rPt +eai +ppm +qsG +aLd +mAm +uwz +qtu +gHM +vXg +npX +nwG +nwG +"} +(82,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dut +dut +vsM +dut +dut +nwG +nwG +nwG +nwG +npX +qkq +bbI +mHx +dqt +hAD +qsG +aLd +cqI +bbI +mHx +dqt +mQM +npX +aJn +seP +wrh +wrh +wrh +seP +seP +seP +huH +kqd +kOH +kqd +uhN +seP +seP +seP +wrh +wrh +wrh +seP +ewi +npX +qkq +bbI +mHx +dqt +hAD +qsG +aLd +cqI +bbI +mHx +dqt +mQM +npX +nwG +nwG +"} +(83,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +tos +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dut +kUh +bwt +mzx +gvy +nwG +nwG +nwG +npX +npX +npX +asT +asT +kei +wUI +ofP +kOo +rqE +jUL +asT +asT +npX +npX +kHs +oDu +bGE +bGE +bGE +bGE +pkS +ddf +ltH +bMm +kOH +bMm +sjU +pkS +ddf +bGE +bGE +bGE +bGE +oDu +uLC +npX +npX +asT +asT +kei +wUI +ofP +kOo +rqE +jUL +asT +asT +npX +npX +npX +nwG +"} +(84,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qtl +qtl +qtl +qtl +qtl +qtl +qtl +qtl +qtl +qtl +qtl +nwG +nwG +sAg +sjW +gsu +gsu +jUj +nwG +nwG +nwG +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +kYH +npX +uMN +uhN +huH +npX +bMm +kOH +bMm +npX +uhN +huH +uMN +npX +kYH +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +npX +nwG +"} +(85,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +qAN +qAN +qAN +qAN +cKN +qAN +qAN +qAN +qAN +qAN +nwG +qAN +qAN +oMn +gvL +qAN +qAN +qAN +oMn +qAN +wsr +wQK +nwG +qaP +qaP +bZb +xwQ +qaP +hDj +gZa +unD +iMk +iMk +iMk +nwG +qtl +oPy +ucE +ucE +vfo +dZD +ucE +ucE +sRn +ucE +qtl +nwG +nwG +dut +oWm +cJU +grX +whh +nwG +nwG +npX +npX +npX +puU +puU +uEX +npX +puU +puU +uEX +npX +puU +puU +uEX +npX +npX +npX +bUh +bMm +bMm +sjc +npX +uhN +huH +kqd +bMm +tyX +bMm +kqd +uhN +huH +npX +jvK +bMm +bMm +bUh +npX +npX +npX +puU +puU +uEX +npX +puU +puU +uEX +npX +puU +puU +uEX +npX +npX +npX +"} +(86,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aav +aav +bqS +bqS +ucE +ucE +ucE +ucE +dXi +qAN +nwG +qAN +acl +mwk +hZH +pMW +xjc +xjc +xjc +lBV +fPL +fPL +nwG +qaP +lfo +hpn +rNT +jym +otc +hZH +uWR +xVe +eiR +qaP +nwG +qtl +oPy +ucE +ucE +vfo +pMf +ucE +ucE +sJq +ucE +qtl +nwG +nwG +dut +dut +vzs +dut +dut +nwG +nwG +npX +npX +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +npX +npX +bUh +bMm +bMm +sQP +npX +nXo +huH +nKT +bMm +atZ +bMm +nKT +uhN +rTh +npX +hjd +bMm +bMm +bUh +npX +npX +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +puU +npX +npX +"} +(87,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +abR +ucE +ucE +ucE +ucE +ucE +ucE +ucE +eax +qAN +nwG +kpm +jqK +ixD +qqu +bDS +bDS +bDS +bDS +qAN +uRX +mgQ +nwG +qaP +dLO +hpn +kdX +hpn +cZV +qqu +fZc +fZc +fZc +bZb +nwG +qtl +oPy +ucE +ucE +wcc +bfk +ucE +ucE +ucE +ucE +qtl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +qsy +bMm +aLd +npX +uhN +huH +nKT +bMm +xZY +bMm +yik +uhN +huH +npX +qsG +bMm +xUA +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +"} +(88,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aBb +ucE +bsy +bwB +bBn +bwB +dzI +ucE +ucE +qAN +nwG +qAN +acl +fBU +qqu +bDS +nGn +bDS +xJg +qAN +keO +mgQ +nwG +oiU +tTI +hpn +jWW +hpn +iDP +qqu +jxj +cXN +vhR +siL +nwG +qtl +wsJ +kfJ +ucE +ucE +ucE +ucE +ucE +ucE +ucE +qtl +nwG +qAN +oMn +qAN +oMn +qAN +oMn +qAN +nwG +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +uMN +ghY +aOV +npX +sjU +ltH +yik +bMm +xZY +bMm +vhU +sjU +ltH +npX +wHb +lVa +uMN +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +"} +(89,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +rVe +bLY +nXP +miB +pkB +vjd +vjd +gaO +hOr +end +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +ucE +ucE +bwB +cdR +cPC +dnC +bwB +ucE +ucE +qAN +nwG +qAN +lmQ +gPD +qqu +vyW +xyR +mHG +hbn +qAN +kwC +qAN +nwG +qaP +mkx +hpn +rbR +hpn +cZV +qqu +jxj +mJN +vhR +bZb +nwG +qtl +ucE +ucE +ucE +ucE +qPM +afc +nEE +lqT +xkR +qtl +nwG +kpm +kUh +bwt +otM +piu +xFG +nYH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +npX +bMm +bMm +kqd +bMm +tyX +bMm +kqd +bMm +bMm +npX +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(90,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kwC +ucE +aXg +bBn +cjJ +cUb +doo +dJU +ucE +ucE +qAN +nwG +bZb +wwn +gPD +qqu +qqu +qqu +qqu +qqu +gkM +kHU +sQJ +nwG +qaP +cZz +hpn +ghm +hpn +qaP +vqK +jxj +jrj +mEW +qaP +nwG +qtl +uPf +uPf +qtl +ucE +qPM +wak +uKj +lqT +xkR +qtl +nwG +qAN +owS +gsu +gsu +bnr +nKN +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +npX +jwp +jwp +npX +bMm +kOH +bMm +npX +jwp +jwp +npX +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(91,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +ucE +ucE +bwB +cnp +cYV +dnC +bwB +ucE +ucE +qAN +nwG +qAN +qAN +hYo +lVM +aqO +aqO +aqO +eXd +qqu +kHU +kOH +nwG +qaP +vbi +hpn +hpn +hpn +erc +qqu +jxj +iVO +vhR +bZb +nwG +qtl +ucE +ucE +qtl +ucE +qPM +wak +dto +lqT +ixN +qtl +nwG +kpm +oWm +qmW +wOK +bue +wZt +jUj +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +npX +bMm +bMm +npX +ydy +kOH +doE +npX +bMm +bMm +npX +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(92,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aHZ +ucE +bBr +bwB +bBn +bwB +dPi +ucE +ucE +qAN +nwG +qAN +idJ +tAt +ufx +jcH +gCJ +eua +bxJ +hpn +hGR +nYH +nwG +siL +tvv +wwm +mZn +mGC +qaP +jQf +jxj +cXN +vlT +axm +nwG +qtl +ucE +ucE +qtl +ucE +gFJ +gFJ +dto +lqT +ixN +qtl +nwG +qAN +fZA +ouX +mmw +rKI +vTN +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +bMm +bMm +npX +bMm +kOH +bMm +npX +bMm +bMm +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(93,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aHZ +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +qAN +nwG +kwC +aUe +dtM +hpn +hpn +hpn +hpn +hLe +hpn +hpn +bZb +nwG +qaP +qGu +dtM +hpn +lwq +lEk +qqu +fZc +fZc +fZc +bZb +nwG +qtl +ucE +ucE +qtl +ucE +ucE +ucE +ucE +ucE +ucE +qtl +nwG +kpm +oSX +hNE +fwZ +jHo +eFc +kwC +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +flP +flP +npX +bMm +bMm +bMm +npX +flP +flP +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(94,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aav +aav +bqS +bqS +ucE +ucE +ucE +ucE +ebS +qAN +nwG +qAN +lvn +bmH +lCZ +hqV +jFd +mYJ +huK +lsS +jcM +qAN +nwG +qaP +lvn +kTn +xfv +ota +qaP +jIu +xKG +muz +ycV +qaP +nwG +qtl +uPf +uPf +qtl +qtl +qtl +qtl +qtl +qtl +qtl +qtl +nwG +qAN +reE +qAN +reE +qAN +reE +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +puU +npD +npX +fVG +hpt +hpt +npX +rKs +puU +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(95,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +qAN +qAN +qAN +qAN +cKN +qAN +qAN +qAN +qAN +qAN +nwG +qAN +qAN +bZb +reE +qAN +qAN +qAN +reE +qAN +qAN +qAN +nwG +qaP +qaP +bZb +iDW +qaP +hDj +gZa +iDW +qaP +qaP +qaP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +npX +puU +puU +puU +npX +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(96,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +rVe +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +xwQ +ayW +xwQ +qaP +xwQ +wmz +xwQ +wmz +xwQ +qAN +nwG +qAN +oMn +qaP +xwQ +qaP +udE +qaP +xwQ +qaP +oMn +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(97,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +qAN +oMn +qAN +bZb +qAN +oMn +qAN +qAN +nwG +qAN +qAN +oMn +qAN +gvL +qAN +oMn +qAN +qAN +nwG +qAN +qAN +oMn +qAN +qAN +qAN +oMn +qAN +qAN +nwG +qAN +qAN +bZb +qAN +qAN +gZa +qAN +qAN +qAN +qAN +qAN +nwG +nwG +kpm +wvO +gPD +gTn +kCP +wZt +eJV +pNj +eFc +jYi +nYH +nwG +kpm +lrY +dUz +vvG +qaP +gPD +rOH +qaP +mfQ +mfQ +nYH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(98,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aIm +aXM +bFg +qBj +dan +doZ +dQP +qAN +nwG +qAN +oNh +rLa +otj +hZH +kcO +miF +ydo +qAN +nwG +qAN +rDN +kTn +lGj +lRJ +kvK +hbA +hyL +qAN +nwG +qAN +hlZ +rNT +vYS +fdx +hZH +tfz +rHS +lMx +plV +qAN +nwG +nwG +qaP +rVV +gPD +fId +kCP +wZt +wZt +wZt +wZt +nKN +qaP +nwG +qaP +kSp +vJe +hpn +jwd +gPD +rcE +qaP +hpn +gFO +qaP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uiZ +qGy +pmh +pmh +pmh +qGy +uiZ +uiZ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(99,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +bZb +aDt +hpn +hpn +iMx +del +dsZ +dSQ +nYH +nwG +bZb +uhz +eMw +tfL +qqu +kxa +hpn +pIz +kwC +nwG +kpm +aDt +hpn +xPs +hpn +xPs +hhG +eEj +kwC +nwG +qAN +wRv +hpn +uoF +lUy +qqu +fit +uzj +mkS +jBY +qAN +nwG +nwG +oiU +itF +gPD +fId +kCP +wZt +eJV +pNj +eFc +wZt +axm +nwG +oiU +lvn +kaT +oTJ +qaP +hQl +xjC +qaP +jwd +qaP +axm +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +pmh +eKu +jWp +aRk +gPK +eKu +pmh +qGy +uiZ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(100,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +aMg +aYA +bSi +cvP +dfH +dsZ +vid +qAN +nwG +jZi +ckB +hpn +eIv +hJu +gMt +hpn +fsu +qAN +nwG +qAN +pBK +jmQ +tzn +xGf +xSk +pyH +qAN +qAN +nwG +qAN +wjB +hpn +sZh +lUy +qqu +tGV +wZt +wZt +wZt +bZb +nwG +nwG +qaP +oaB +gPD +uAJ +kCP +wZt +eJV +pNj +eFc +wZt +qaP +nwG +qaP +qaP +qaP +qaP +qaP +iUd +jpq +qXb +gPD +fzk +qaP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +anR +rFI +juq +jzy +gfe +sof +lYv +git +uiZ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(101,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +siL +qAN +qAN +qAN +czu +qqu +qqu +kHU +oiB +nwG +oiB +nBH +qqu +qqu +qqu +qqu +qqu +kHU +oiB +nwG +qAN +uMQ +aaK +qAN +pdH +qAN +hpn +aPM +qAN +nwG +qAN +kYl +hpn +uIb +ltC +qqu +gTR +xBG +fzh +pzx +qAN +nwG +nwG +oiU +teb +gPD +fId +kCP +wZt +wZt +wZt +wZt +wZt +ayW +nwG +oiU +aQo +wZt +wZt +jwd +gPD +gPD +gPD +gPD +gPD +sFZ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +pmh +git +nwG +nwG +nwG +nwG +qVH +pxM +gfe +gfe +gfe +gfe +gOR +hAE +qVH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(102,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +lrY +dUz +bSS +cGm +qqu +duQ +dUN +cHi +nwG +qAN +pYW +cFu +hfB +gPD +gWg +vsb +vji +qAN +nwG +qAN +wdK +jdn +reF +ajs +tvM +hpn +tlj +qAN +nwG +qAN +lvn +dnJ +pXi +ltC +lxK +qDh +sKv +tOh +kHU +tjE +nwG +nwG +qaP +mnd +gPD +fId +kCP +wZt +qaP +qaP +qaP +qaP +qaP +nwG +qaP +xVg +qqi +qqi +qaP +aIu +sOy +jft +ipf +tCk +qaP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +dTV +gwS +dTV +git +mpF +git +pmh +git +daa +wgp +xfo +utD +nxX +vMe +rsU +git +git +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(103,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +kpm +aUe +dtM +hpn +iMx +qqu +gPD +uZM +qAN +nwG +kwC +qGu +dtM +hLe +rie +nnV +nMg +lTt +nYH +nwG +kwC +rav +nxx +ein +qVv +qAN +wTZ +qAN +nYH +nwG +qAN +qAN +qAN +qAN +ggX +dxP +uMv +qAN +qAN +qAN +qAN +nwG +nwG +oiU +cWQ +gPD +fId +kCP +wZt +qaP +bXx +hpn +hpn +axm +nwG +oiU +qaP +qaP +qaP +qaP +aIu +sOy +jft +ipf +cdU +axm +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qVH +eVL +maX +odr +git +dGF +dTV +sdS +dTV +git +git +dTV +fjX +dTV +git +git +dTV +git +dTV +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(104,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +oaH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qXu +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +lVy +dJN +dJN +dJN +dJN +inf +dJN +lVy +lVy +lVy +lVy +lVy +dJN +dJN +dJN +dJN +dJN +dJN +dJN +lVy +lVy +lVy +nwG +qAN +lvn +bmH +bUe +cHe +nFZ +dzH +dWz +qAN +nwG +qAN +lvn +gpP +kKb +lff +lDK +vNY +iNF +qAN +nwG +qAN +cXZ +ouB +qAN +fpl +wJR +gqZ +seK +qAN +nwG +qAN +uVk +vek +qDz +qAN +dxP +qAN +pSv +ozz +nmI +qAN +nwG +nwG +qaP +wlN +gPD +dYw +wZt +wZt +cZr +hpn +qaP +cZr +qaP +nwG +qaP +aQo +wZt +wZt +jwd +gPD +gPD +gPD +gPD +gPD +qaP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qVH +iOq +gsu +xHk +git +jlz +hXr +hvp +bXu +sDg +bGj +git +mNs +git +qIh +mXf +rwF +ygo +qYd +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(105,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lTz +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +dJN +dJN +dzi +dzi +dJN +dJN +jsR +lVy +lVy +lVy +lVy +inf +inf +dJN +sSC +sSC +sSC +sSC +sSC +dJN +lVy +lVy +nwG +qAN +qAN +reE +bZb +cHi +gZa +reE +qAN +qAN +nwG +qAN +qAN +bZb +qAN +qAN +qAN +reE +qAN +qAN +nwG +qAN +qAN +reE +qAN +gZa +qAN +reE +qAN +qAN +nwG +qAN +tAp +fZc +fZc +uge +hyM +sTs +wXB +lwq +haI +qAN +nwG +nwG +kpm +vXy +gPD +fId +wVV +qFN +qaP +oVy +qaP +lPZ +nYH +nwG +kpm +xVg +qqi +qqi +qaP +gPD +tMY +mIl +xxq +jFh +nYH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +oWf +hBm +dqi +git +grw +kxq +cot +cot +cot +hmn +git +wFf +git +iSx +ufB +dLQ +rNl +dXo +git +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(106,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +dJN +dJN +dzi +dzi +dzi +dzi +dJN +dJN +lVy +lVy +lVy +dJN +inf +dJN +sSC +inU +cbn +cBO +cBO +knf +sSC +dJN +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nUd +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qAN +nhU +eCi +dMv +qAN +ssp +qAN +lzd +hUz +hUz +qAN +nwG +nwG +qAN +kit +iMk +fVx +iMk +tMj +qaP +iDW +qaP +reE +qAN +nwG +qAN +reE +qaP +iDW +qaP +udE +qaP +iDW +qaP +oev +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cqb +dGF +lzT +gJq +gAs +git +uOO +lAa +kDZ +gXy +rXD +hBP +git +mNs +git +map +hxA +jfQ +gzp +twq +git +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(107,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +jXU +jXU +jXU +jXU +jXU +jXU +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +dJN +dzi +dzi +qXA +dzi +qDy +dJN +dJN +lVy +lVy +dJN +dJN +dJN +dJN +sSC +uBn +nCu +nCu +nCu +wPH +sSC +dJN +lVy +nwG +qAN +oMn +qaP +qaP +xwQ +cNb +qaP +oMn +qAN +nwG +qAN +oMn +qAN +qAN +qAN +qAN +qAN +oMn +qAN +nwG +qAN +qAN +qAN +caV +gZa +kUS +njw +njw +mnz +nwG +qrB +qrB +qmD +qrB +qrB +kbe +qAN +qAN +qAN +qAN +qAN +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +uue +gJq +nUX +dTV +git +git +rcj +dTV +wfE +dTV +git +mNs +git +dTV +nZj +dTV +git +git +git +dTV +uzG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(108,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +jXU +jXU +jXU +jXU +jXU +jXU +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +dJN +dzi +dzi +tHJ +qVp +qDy +inf +dJN +wxH +dJN +dJN +vhO +sSC +sSC +mRu +glz +nCu +qbS +nCu +iRD +sSC +dJN +lVy +nwG +kpm +lrY +dUz +bSd +neH +hZH +bUL +iNd +nYH +nwG +qAN +lrY +qWR +uJy +qAN +hqe +sgW +qsA +nYH +nwG +qAN +mVU +oHA +gPD +hZH +gPD +gPD +fhD +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +rEd +gJq +udp +uBh +jmO +xFR +mlK +mhu +gvZ +mlK +hyj +eQa +mlK +jmO +gvZ +tul +mlK +xFR +soE +jTz +ahk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(109,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +jXU +jXU +jXU +ucE +jXU +jXU +jXU +ucE +jXU +jXU +jXU +jXU +jXU +jXU +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +dJN +dzi +dzi +dzi +cSr +dJN +nKM +dJN +dJN +dJN +dJN +sSC +rcM +fSo +glz +nCu +nCu +nCu +iRD +sSC +byK +lVy +nwG +qaP +nwo +vJe +hpn +iMx +qqu +bUL +svC +qaP +nwG +kwC +qGu +dtM +hpn +qAN +aPs +lwq +jfe +qAN +nwG +qAN +siX +gPD +nwr +qqu +gqk +gPD +jjR +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +eiX +fZc +gJq +fZc +eQE +mNs +git +git +crX +git +wQe +git +git +git +dBZ +git +wQe +git +git +ajG +dTV +dTV +fzg +nwG +nwG +nwG +nwG +nwG +nwG +"} +(110,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +jXU +ucE +jXU +jXU +jXU +ucE +jXU +jXU +jXU +ucE +jXU +jXU +jXU +jXU +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +dJN +inf +dJN +dJN +dJN +eML +dJN +sSC +sSC +pmm +rwf +uzS +ibq +sSC +oLX +wDp +wDp +wDp +plr +sSC +dJN +lVy +nwG +qaP +lvn +kaT +tDK +bpE +qqu +bUL +oac +qaP +nwG +qAN +iLI +jvf +chI +rfK +kjt +kHz +uSs +qAN +nwG +qAN +jNH +gPD +rdP +qqu +ubh +gPD +fhD +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +eOs +kOQ +auM +git +fkA +git +kHK +dYj +oqv +kkr +aVX +git +jRR +oLO +xoj +tKn +rFv +git +hQH +git +dTV +dGF +git +git +nwG +nwG +nwG +nwG +"} +(111,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +pul +ucE +ucE +ucE +pul +ucE +pul +ucE +ucE +ucE +hgL +jXU +wfW +hgL +ucE +hkY +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +dJN +dJN +dJN +dJN +nKM +sSC +rtg +rwf +gXK +fSo +xxt +sSC +sSC +sSC +sSC +sSC +sSC +sSC +sSC +dJN +dJN +lVy +nwG +siL +qaP +qaP +qaP +wie +qqu +bUL +stl +siL +nwG +oiB +nBH +qqu +kQY +tNR +tOh +qqu +kHU +oiB +nwG +qAN +fQu +gPD +gPD +qqu +fhD +gPD +fhD +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +git +git +git +git +git +iJp +git +vsI +dvT +fZc +fZc +mfl +git +sus +wxm +iRo +ucE +mfl +git +xCw +git +smd +foY +rAc +dTV +git +nwG +nwG +nwG +"} +(112,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xyL +hkY +hkY +mat +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +lAM +hkY +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +lVy +wxH +inf +heQ +lHP +cBO +nCu +ibq +sSC +sSC +sSC +sSC +dJN +dJN +inf +inf +inf +dJN +dJN +dJN +dJN +lVy +nwG +qaP +pbc +xSx +ikX +bJh +qqu +miz +niu +qaP +nwG +qAN +gtI +mfy +qAN +qAN +qAN +mfy +qPw +qAN +nwG +qAN +tvv +wwm +hpa +hJu +fhD +gPD +fhD +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +dTV +uOg +swH +oBS +oBS +dTV +ilm +dTV +git +git +git +git +git +git +git +git +git +git +git +dTV +bOT +dTV +mxN +bfM +cew +aqH +dTV +git +nwG +nwG +"} +(113,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +qDy +dJN +dJN +sSC +pmm +nCu +fSo +bIB +sSC +dJN +inf +inf +dJN +dJN +inf +inf +inf +inf +dJN +lVy +lVy +lVy +lVy +nwG +bZb +aDt +hpn +hpn +iMx +qqu +vrd +uOr +qaP +nwG +kpm +orM +wEx +iTS +qAN +wNh +eCj +iTS +qAN +nwG +qAN +qGu +dtM +bbk +qqu +fhD +gPD +jjR +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +egL +wUd +ark +ark +ark +mzH +bmW +mYm +dHx +mSn +cYY +wVG +lMG +nwc +hLg +ivo +pLE +mSn +dHx +vkW +bfM +kOn +kty +dlQ +bMm +bMm +fyO +git +nwG +nwG +"} +(114,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +rVg +nwG +nwG +nwG +ucE +ucE +ucE +pul +ucE +ucE +tOZ +ucE +hgL +jXU +ucE +ucE +ucE +wxC +ucE +jXU +wuC +ucE +hkY +hkY +hkY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +inf +dJN +dJN +pmm +fSo +xNL +sSC +sSC +dJN +dJN +tAG +dJN +dJN +dJN +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +kpm +eqG +vvw +eqG +jdo +nFZ +dBb +vOh +nYH +nwG +qAN +poA +fqB +kxI +qAN +aVl +fqB +jAA +nYH +nwG +qAN +lvn +lgf +dwg +nFZ +gPD +gPD +fhD +iId +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +cqb +dGF +dQZ +bMm +lDz +bMm +bMm +sEO +xUa +mSC +bbw +jKi +aZO +sZz +rzu +bMm +bMm +cim +fsl +jKi +bbw +mSC +xUa +elb +bMm +bMm +bMm +bMm +hNr +dGF +bGF +nwG +"} +(115,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +ucE +jXU +ucE +jXU +jXU +ucE +jXU +jXU +ucE +ucE +ucE +ucE +ucE +jXU +jXU +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +dJN +dJN +sSC +xIb +sSC +dJN +dJN +dJN +dJN +dJN +dJN +iVc +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +qrB +eJe +iMk +iMk +iqr +cNb +qaP +reE +qAN +nwG +qAN +reE +bZb +qAN +qAN +qAN +bZb +reE +qAN +nwG +qAN +qAN +qAN +qAN +gZa +kUS +njw +njw +gll +nwG +nwG +nwG +jol +nwG +nwG +mYY +mYY +xCD +xCD +ybA +xCD +ybA +ybA +ybA +ybA +ybA +xCD +ybA +ybA +xCD +xCD +ybA +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +dTV +bJp +ieF +hSS +aoZ +vYa +hSS +eLT +krU +dTV +aVY +xJw +tQT +tQT +yka +gZR +hBW +bMm +aoL +dTV +gPh +rcA +hSS +vCM +lti +hSS +lWt +uaK +dTV +git +nwG +"} +(116,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +jXU +jXU +ucE +jXU +jXU +ucE +ucE +rJs +ucE +ucE +jXU +jXU +vEk +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +wDn +dJN +heQ +cjP +sSC +dJN +cSr +vhO +wxH +pnH +wxH +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gWt +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +nwG +nwG +mYY +mYY +xCD +xCD +xCD +ybA +xCD +ybA +ybA +xwu +gyt +gyt +gyt +gyt +gyt +gih +xwu +gih +waA +xtx +nwG +xCD +xCD +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +git +aFz +aFz +swv +aFz +aFz +swv +aFz +aFz +git +git +ltq +qWl +nbU +dTV +dTV +rXu +bMm +iSR +git +aFz +aFz +swv +aFz +aFz +swv +aFz +aFz +git +git +nwG +"} +(117,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +jXU +jXU +ucE +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +dJN +dJN +sSC +mjV +vZr +sSC +dJN +dJN +dJN +dJN +dJN +inf +inf +dJN +dJN +dJN +dJN +dJN +lVy +lVy +lVy +lVy +lVy +nwG +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mkW +nwG +nwG +nwG +nwG +nwG +nwG +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ePP +mYY +xCD +ybA +xCD +xCD +ybA +ybA +ybA +ybA +gyt +gyt +rTZ +rTZ +oNW +qed +qed +gyt +xwu +vPi +waA +xxB +mYY +mYY +mYY +xCD +sVo +nwG +mYY +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +git +nwG +lOK +git +nwG +lOK +git +nwG +lOK +git +git +ulw +tWd +vWF +kem +git +eKV +iSR +dTV +git +nwG +lOK +git +nwG +lOK +git +nwG +lOK +git +git +nwG +"} +(118,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +ucE +nxc +ucE +ucE +jXU +jXU +ucE +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dJN +inf +dJN +dJN +sSC +mjV +qGF +xdZ +sSC +sSC +sSC +sSC +dJN +dJN +inf +dJN +dJN +dJN +dJN +dJN +dJN +dJN +fBi +lVy +nwG +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +nwG +nwG +nwG +nwG +nwG +nwG +jol +nwG +asx +ybA +xCD +xCD +ybA +ybA +ybA +ybA +ybA +gyt +gyt +rGT +suG +rma +fXK +rma +rma +tav +gyt +gyt +waA +xtx +xCD +xCD +xCD +xCD +mYY +xCD +asx +jzV +mYY +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +dTV +jfi +ble +ikc +git +ugv +dTV +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +git +nwG +"} +(119,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ucE +jXU +jXU +jXU +ucE +ucE +ucE +ucE +ucE +ucE +ucE +gIX +ucE +ucE +ucE +ucE +ucE +ucE +ucE +ucE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dJN +dJN +dJN +eML +sSC +sSC +mjV +qGF +qGF +rwf +ufH +sSC +sSC +sSC +dJN +dJN +eML +dJN +dJN +dJN +dJN +dJN +lVy +nwG +kWE +aMl +kSc +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +ybA +nwG +mYY +xCD +xCD +ybA +ybA +ybA +ybA +ybA +xwu +gyt +kUF +msL +msL +qOh +bsx +gRd +rpz +gRd +uFQ +gyt +waA +xtx +nwG +mYY +xCD +mYY +xCD +mYY +xCD +xCD +mYY +xCD +xCD +xCD +nwG +mYY +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dTV +uze +snv +tZZ +dTV +oFO +git +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(120,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +dJN +dJN +dJN +inf +dJN +sSC +sSC +dJN +kax +fSo +oHR +rwf +rwf +xdZ +sSC +dJN +tAG +wxH +dJN +dJN +dJN +lVy +nwG +nwG +aMl +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dsy +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +xCD +ybA +ybA +ybA +ybA +ybA +ybA +xwu +gyt +gyt +gyt +gyt +xwu +xwu +nsk +gyt +gyt +gyt +gyt +gyt +gyt +gih +nwG +nwG +nwG +xCD +nwG +xCD +nwG +xCD +jol +xCD +nwG +mYY +xCD +mYY +nwG +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ahk +ahk +pvM +ahk +ahk +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(121,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +lVy +cSr +dJN +dJN +tAG +dJN +inf +nKM +dJN +dJN +dJN +akM +wDp +nCu +vZr +sSC +cSr +dJN +dJN +dJN +dJN +lVy +nwG +nwG +aMl +pAr +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +kWE +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +mYY +ybA +xCD +ybA +ybA +ybA +gyt +gyt +gyt +gyt +gyt +nKX +xnE +lMD +xnE +xnE +xnE +xnE +xnE +xnE +xnE +vSR +gyt +gih +xSh +xSh +xSh +xwu +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +upK +xCD +nwG +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(122,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ojA +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +lVy +lVy +wxH +inf +dJN +dJN +dzi +dJN +dzi +qDy +inf +dJN +dJN +akM +nCu +vZr +dJN +dJN +dJN +dJN +lVy +lVy +nwG +kWE +aMl +pAr +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +kWE +pAr +aMl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +xCD +xCD +ybA +ybA +gyt +gih +uWm +uWm +gih +eVl +xLn +kcY +kcY +xLn +nRH +oPn +cvJ +xLn +kcY +kcY +xLn +xLn +gih +ybx +lyy +ybx +gyt +gyt +gih +xwu +nsk +gyt +waA +xtx +nwG +mYY +mYY +xCD +mYY +xCD +mYY +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(123,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xCP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +lVy +fld +dJN +sSC +sSC +sSC +sSC +sSC +dJN +xeT +cet +dJN +dJN +dJN +sSC +akM +cre +sSC +inf +inf +dJN +lVy +lVy +nwG +kWE +aMl +pAr +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +kWE +pAr +aMl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +ybA +ybA +ybA +ybA +gyt +gfC +gOp +epl +djR +uIX +uIX +kfB +oQW +uIX +nXO +oSt +eeF +uIX +tdE +brs +kPa +uIX +hxV +uIX +dWi +vHX +xFI +gyt +gyt +heD +eFs +eFs +waA +rNR +nwG +xCD +nwG +mYY +ePP +asx +nwG +xCD +xCD +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +ybA +ybA +ybA +nwG +nwG +nwG +nwG +nwG +nwG +"} +(124,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +wxH +dJN +sSC +rer +nCJ +hwQ +qGF +mAD +dJN +dJN +dJN +dJN +elF +inf +inf +dJN +kax +ufH +dJN +dJN +lVy +lVy +lVy +nwG +kWE +aMl +pAr +nwG +olv +kWE +nwG +pgv +kWE +nwG +vDo +kWE +nwG +gJY +kWE +nwG +qIj +kWE +qUr +kWE +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +xCD +xCD +ybA +ybA +ybA +gyt +gfC +vct +edb +gih +xbb +jiz +kiX +lSF +mBm +nZZ +oMz +qfA +yby +tek +rnS +vUb +vUb +gyt +ybG +rmz +vUb +vUb +nNF +gyt +gyt +jlD +twf +waA +xtx +xCD +xCD +xCD +xCD +xCD +mYY +sVo +nwG +mYY +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +ybA +ybA +ybA +ybA +ybA +ybA +ybA +ybA +nwG +nwG +nwG +"} +(125,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +dJN +sSC +cjP +sSC +sSC +dJN +akM +vZr +sSC +dJN +wxH +dJN +dJN +dJN +dJN +sSC +cjP +sSC +dJN +wxH +lVy +lVy +nwG +kWE +aMl +pAr +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +nwG +nwG +kWE +kWE +kWE +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +xCD +ybA +ybA +xwu +gyt +gyt +gfC +vct +qWs +gyt +gih +jnS +knl +lUo +mBQ +mxf +oVj +qgw +hCm +tpT +uKH +vVU +gih +gih +nKX +xnE +xnE +xnE +xnE +kKJ +gyt +gyt +gyt +waA +xxB +nwG +nwG +nwG +nwG +xCD +xCD +xCD +mYY +mYY +nwG +xCD +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +aMl +aMl +mJK +tHc +wVS +hnJ +aMl +aMl +aMl +ybA +nwG +nwG +nwG +"} +(126,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +dJN +sSC +ico +dJN +dJN +dJN +sSC +sbz +sSC +sTq +khA +vwp +khA +khA +nKM +dJN +cjP +dJN +dJN +lVy +lVy +lVy +nwG +kWE +aMl +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +gyt +gyt +gyt +gyt +gih +pkN +gih +gyt +gih +gih +gih +xwu +xec +gBV +tFb +xSh +rra +xwu +gih +gih +gih +gih +gih +gih +nsk +gih +gyt +gyt +gyt +gyt +gyt +gyt +gyt +gyt +xwu +nwG +nwG +nwG +nwG +nwG +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +aMl +qvk +fmU +yjo +gog +tNF +ydU +sOv +ybA +ybA +ybA +nwG +nwG +"} +(127,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dIQ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +wjJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +inf +sSC +rer +vZv +dJN +cSr +dJN +sSC +cjP +sSC +khA +khA +bmj +eQp +khA +dJN +sSC +iew +vZr +sSC +lVy +lVy +lVy +nwG +kWE +aMl +nAw +pAr +aMl +aMl +pEg +aMl +aMl +tNU +tNU +tNU +tNU +tNU +aMl +aMl +pEg +aMl +aMl +nzG +pAr +aMl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +xwu +gyt +fhv +jvr +bXE +gyt +xLn +rSk +gyt +gih +bTC +vTQ +nRm +vjR +bMm +evn +bHA +rwk +jsb +tCD +rSk +xwu +gih +gih +xLn +xLn +lqf +gyt +gyt +gyt +rGT +rGT +twL +vzm +wYD +gih +gih +lXW +oSO +oSO +waA +xtx +nwG +xCD +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +hnJ +fsy +ihX +djK +aIW +wxB +wxB +fmU +ybA +aMl +ybA +nwG +nwG +"} +(128,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +inf +sSC +cjP +dJN +dJN +wxH +inf +sSC +ico +sSC +xMJ +nAf +bmj +mZt +ewr +dJN +sSC +ovl +cre +sSC +dJN +lVy +lVy +nwG +kWE +aMl +lPB +pAr +aMl +fnU +fnU +aMl +cAO +rgl +ttn +sLy +dLY +rnQ +ekw +aMl +fnU +fnU +aMl +dcm +pAr +aMl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +aHF +rnJ +fkf +fwj +nKX +gyt +wrh +psL +gyt +twL +wqh +hQr +uIa +hPP +llF +bUE +rjm +rwS +tsL +uKP +xLn +wCb +xwu +rSk +kcY +kcY +kcY +mCE +gyt +gih +hbc +xnE +xnE +bae +ayr +xnE +gih +xwu +gih +gih +waA +xxB +nwG +nwG +mBV +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +wlE +sXy +cUm +bHv +fmU +sqL +dWq +lGg +ufa +aMl +ybA +nwG +nwG +"} +(129,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +jLp +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +inf +sSC +ico +inf +iVc +lVy +inf +cnJ +epV +sSC +pER +mPQ +ryw +eZe +khA +dJN +sSC +iew +irP +sSC +wxH +lVy +lVy +nwG +nwG +aMl +pNo +pAr +aMl +oGp +fnU +cYI +hNF +lvJ +mPo +aJp +oCM +cDi +aJp +cYI +fnU +qPH +aMl +pcr +pAr +aMl +kWE +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ejG +eRZ +fkI +fDG +fYl +gyt +gCW +hhj +gyt +ijF +skp +lCt +qUS +mHn +mQa +oWj +qMn +rBa +twE +uPk +gGj +xLn +nsk +ydu +kcY +tmc +kcY +lmE +mCE +xwu +hvT +fJU +fJU +lQs +xcK +xLn +rSk +gyt +gyt +gih +gih +xwu +gyt +gyt +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +lJh +fhr +djK +eYV +wxB +bkx +bgQ +bkx +fmU +aMl +ybA +ybA +nwG +"} +(130,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xHY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +sSC +epV +dJN +dJN +wxH +inf +sSC +cjP +dJN +ewr +nAf +bmj +bmj +khA +dJN +sSC +wHi +iRD +dJN +dJN +lVy +lVy +nwG +nwG +aMl +pNQ +pAr +aMl +fnU +cgj +aMl +sJA +aJp +rJp +lvJ +aTD +lvJ +qjW +aMl +fnU +fnU +aMl +kSd +pAr +aMl +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mbt +emt +eUc +nwN +hAy +xLn +gih +xLn +mCE +gyt +ujN +xHE +tXS +cim +kBd +vct +wAV +vct +xvO +cim +uZr +aBB +xLn +nsk +xLn +xLn +xLn +xLn +xLn +xLn +doA +xcK +kcY +kcY +xOD +oBQ +uVs +xLn +xLn +cEh +gih +kaP +mDM +rsj +gyt +xwu +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +aDX +qFQ +uhZ +fFC +aFl +kze +bWD +feM +feM +aMl +ybA +ybA +nwG +"} +(131,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +lVy +dJN +sSC +cjP +sSC +dJN +vhO +dJN +sSC +pXF +sSC +khA +khA +bmj +bmj +xMJ +dJN +dJN +iew +cre +sSC +dJN +lVy +lVy +nwG +nwG +aMl +aMl +aMl +aMl +aMl +pEg +aMl +aMl +cYI +wBs +cYI +aMl +aMl +aMl +aMl +pEg +aMl +aMl +aMl +aMl +aMl +nwG +kWE +nwG +nwG +nwG +nwG +nwG +ybA +xwu +gyt +dRe +xLn +xLn +nsk +xLn +nTE +gyt +lyP +cPu +rzo +qMn +vct +kcY +kcY +kcY +vct +qMn +wst +jLR +uIX +gih +uIX +gih +gyt +gih +hxw +uIX +doA +uIX +aJk +dWi +brs +gyt +tdb +tdb +jPk +uIX +iok +kPa +mHN +uIX +wKT +mYY +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +tIT +mCh +olO +wZG +hcC +ybA +aMl +uwh +jhm +xaw +ybA +ybA +nwG +"} +(132,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +wxH +sRY +sRY +qql +sRY +uLe +uLe +uLe +sSC +ico +dJN +sTq +khA +khA +qHF +dzi +inf +dJN +uBn +cre +sSC +dJN +dJN +lVy +nwG +nwG +nwG +aMl +jZC +ifq +pom +aJp +xls +aMl +vYV +lvJ +pAr +rtK +oEo +aMl +rgj +aJp +bXI +oUa +fkd +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +ybA +xwu +xwu +mue +jIh +maB +gih +ovK +hjx +gyt +sGG +jte +udS +xvO +ucE +kcY +uWA +kcY +vct +bMm +aeH +ank +lXW +xEN +oSO +oNc +xOp +oNc +oSO +oSO +gyt +kaP +nPl +xUh +gyt +gyt +wlm +bMm +afQ +bMm +izz +bMm +wlm +mhD +rDe +bxh +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +aMl +ocn +tOR +pPv +jzI +ybA +aMl +qxF +ogd +ybA +ybA +ybA +nwG +"} +(133,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dEg +sSC +sSC +aXO +sSC +heQ +dEg +wxH +sSC +kax +vZr +dJN +dJN +dJN +gDx +dzi +inf +sSC +paL +cre +sSC +nKM +dJN +lVy +nwG +nwG +nwG +tNU +pAr +pAr +pAr +aJp +kKe +cYI +aVR +pAr +ukD +aMl +aMl +aMl +jzm +aJp +pAr +hWs +pAr +tNU +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +gih +gih +dRe +uUF +xLn +nsk +xLn +hjN +gyt +lyP +joV +goi +wwC +vct +kcY +kcY +kcY +vct +obj +wst +wab +xnE +qRk +xnE +gih +gyt +gih +nbm +xnE +doA +xnE +moD +hlt +moD +gyt +sTT +sTT +rGC +xnE +ujt +lSC +bae +xnE +quX +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +aMl +aMl +eAc +thf +aMl +aMl +aMl +pzv +fal +ybA +ybA +nwG +nwG +"} +(134,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dEg +heQ +sSC +cjP +sSC +heQ +jlZ +lVy +dJN +dJN +kax +mAD +dJN +dJN +fld +dJN +dJN +dJN +iew +cnH +sSC +dJN +dJN +lVy +nwG +pAr +pAr +aMl +fkd +oUa +gkR +lPe +run +cYI +cLR +hWs +ukD +mCR +ybo +aMl +rAM +bRT +pom +gkR +pxh +aMl +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +eeU +emt +rnJ +nwN +hAy +gbw +gih +xLn +lqf +gyt +uDk +jGU +kjk +cim +kBd +wAV +vct +vct +axl +cim +uZr +weO +nRm +nsk +xLn +xLn +xLn +xLn +xLn +xLn +doA +xcK +bPZ +dmY +kcY +xLn +doB +xLn +doB +swk +gih +kaP +mDM +ovK +xwu +xwu +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +ybA +ybA +ybA +mza +tTw +xau +ybA +ybA +ybA +nwG +nwG +"} +(135,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xOH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gOV +nwG +nwG +nwG +nwG +lVy +jlZ +cnJ +sSC +pXF +sSC +cnJ +oRx +wxH +dJN +wry +sSC +ico +dJN +sSC +sSC +dJN +dJN +mtv +cre +sSC +dJN +dJN +dJN +lVy +nwG +pAr +nwG +aMl +pAr +pAr +hWs +cDi +ghq +aMl +hHE +qDs +ukD +aMl +aMl +aMl +mpm +lvJ +pAr +pAr +pAr +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +rBI +emt +bMm +nwN +fMv +fYl +gyt +gCW +hhj +gyt +imW +juf +koI +lUp +bMm +obj +bMm +qgB +rFe +tzK +vaU +wrh +xLn +nsk +ydu +kcY +kcY +kcY +lmE +lqf +gyt +rSk +jku +fJU +org +xcK +xLn +rSk +gyt +gyt +gih +gih +gih +xwu +gyt +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +uIp +qxF +ybA +ybA +ybA +ybA +epX +xyE +rtj +ybA +ybA +nwG +nwG +nwG +"} +(136,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dEg +pnH +uEw +pnH +dEg +dzi +lVy +dJN +inf +dJN +kax +gpX +qrA +rwf +hOP +rwf +nCu +qIb +dJN +inf +dJN +dJN +lVy +nwG +pAr +nwG +aMl +aMl +aMl +aMl +aMl +oGL +aMl +jCM +cDi +ukD +rtK +oEo +aMl +usw +aMl +aMl +aMl +aMl +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +ybA +eHc +eVI +fvh +jLR +gdH +gyt +gGj +hoX +gyt +szl +wqh +piU +kGL +naF +ctq +pfH +mxL +rPx +uWI +lDp +xLn +wCb +gih +hvT +kcY +kcY +kcY +wCb +xwu +gyt +uIX +uIX +mHN +kPa +uIX +wKT +gih +gih +fFW +gih +waA +xtx +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +qxF +ePC +ybA +ybA +ybA +cst +qxF +waq +ybA +ybA +nwG +nwG +nwG +"} +(137,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dzi +lHP +nCu +mPA +dzi +qDy +lVy +lVy +dJN +inf +inf +sSC +dJN +akM +fSo +fSo +vZv +sSC +dJN +dJN +dJN +lVy +lVy +nwG +nwG +nwG +tNU +xqS +xqS +vQR +uPY +uWP +aMl +jDr +rve +aJp +aMl +aMl +aMl +ghq +cYI +ulZ +kfg +tjB +tNU +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +gyt +gyt +fvG +fPf +gep +gyt +xLn +hvT +gyt +xwu +nuu +kpG +rnA +osG +ogL +bpq +qhP +rWK +tCD +oue +hvT +gih +gih +gih +gbw +xLn +jwv +gyt +gyt +gyt +vlg +vlg +twL +jvr +saC +gih +gih +ovK +vUb +vUb +waA +xxB +mYY +mBV +xCD +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ccf +uIp +uyk +ybA +ybA +ybA +uqx +qxF +uyk +ybA +ybA +ybA +ccf +nwG +nwG +"} +(138,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +qta +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +dzi +iew +nCu +cre +dzi +qDy +lVy +lVy +dzi +inf +inf +dJN +dJN +dJN +sSC +sSC +sSC +sSC +dJN +dJN +wxH +lVy +lVy +nwG +nwG +kWE +tNU +hkS +pAr +lua +cYI +bhs +aMl +cLg +bhs +lvJ +mby +oEo +aMl +mpm +cYI +grh +aEb +qwS +tNU +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xwu +gyt +gyt +gyt +gih +pkN +gih +gyt +gih +gih +gih +gih +eEz +ohM +pnz +ohM +eZp +xwu +vbZ +xwu +gih +gih +gih +gih +nsk +gih +gyt +gyt +gyt +gyt +gyt +gyt +gyt +gyt +xwu +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +ybA +ybA +ybA +gIL +fal +fal +ybA +ybA +ybA +qxF +uIp +ybA +nwG +"} +(139,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +dzi +tLU +hei +xxt +dzi +qDy +lVy +lVy +dzi +bqz +dzi +dJN +dJN +tAG +eML +inf +inf +inf +dJN +dJN +lVy +lVy +lVy +nwG +nwG +nwG +tNU +cdO +gcq +ami +cYI +ghq +aMl +aMl +tOm +aMl +aMl +aMl +aMl +ghq +cYI +pAr +ovg +qKu +tNU +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xwu +gyt +gyt +ghO +gOk +hxR +gyt +gih +jAz +kvb +lXd +nhf +olh +pnL +qtn +saK +tIv +vge +whu +gih +gih +yft +dpX +uIX +bKN +pmT +xxQ +gyt +gyt +gyt +waA +xxB +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +lEy +qxF +rgx +lEy +ybA +ybA +uyk +ePC +ybA +ybA +nwG +"} +(140,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +xeT +dzi +dzi +dzi +xeT +qDy +lVy +lVy +lVy +dzi +dzi +dJN +dJN +dJN +dJN +dJN +nKM +dJN +dJN +lVy +lVy +lVy +lVy +nwG +kWE +nwG +aMl +hTW +rFR +qsP +cYI +qRE +uZS +xnt +rFR +uZS +tPk +uZS +jwt +erQ +flB +pAr +qio +yaI +aMl +kWE +kWE +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gyt +gpg +gSJ +hBH +gih +inH +jBB +kAJ +lXW +oSO +omi +wAV +qzM +sbA +tOC +vgF +vUb +vUb +xIq +cZd +tJg +vUb +fYn +cZd +gyt +gyt +vja +vja +waA +xtx +xCD +xCD +xCD +mYY +nwG +nwG +nwG +jol +nwG +nwG +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +qxF +fmG +tMW +qxF +ybA +ybA +uyk +qxF +ybA +ybA +nwG +"} +(141,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +vJh +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +dzi +dzi +qDy +qDy +dzi +dzi +dzi +dzi +lVy +dzi +dzi +dzi +dJN +dJN +dJN +dJN +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +pAr +pAr +aMl +aMl +aMl +aMl +aMl +qJA +aMl +aMl +cYI +aMl +qJA +aMl +aMl +qJA +aMl +aMl +aMl +aMl +aMl +pAr +pAr +pcE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gyt +grO +hcd +hHk +djR +xnE +xnE +kJT +moD +nlE +omk +psY +qGc +xnE +tPB +vnh +xnE +xnE +xIK +mjm +moD +moD +vlK +gyt +gyt +heD +rvE +eFs +waA +xxB +nwG +xCD +nwG +xCD +sVo +nwG +mYY +nwG +nwG +nwG +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +qxF +xJd +fal +ybA +ybA +ybA +ePC +ybA +ybA +ybA +nwG +"} +(142,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +dzi +dzi +dzi +dzi +dzi +dzi +dzi +qDy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +lVy +nwG +pAr +pAr +aMl +tmZ +hln +reM +enk +bAt +aMl +lvJ +rWi +tVm +xrT +pQk +aMl +puh +fhh +cvk +kmR +cBT +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gyt +gih +hgu +hgu +gih +inJ +xLn +kcY +kcY +xLn +opX +pyz +kAJ +xLn +kcY +kcY +xLn +xLn +gih +rSk +tof +tnu +gyt +gyt +gyt +gyt +nsk +gyt +waA +xxB +nwG +nwG +mYY +xCD +xCD +jtL +mYY +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +ydh +ybA +ybA +uyk +fal +qxF +ybA +ybA +ybA +qxF +uIp +ybA +ybA +nwG +"} +(143,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dzi +dzi +dzi +dzi +dzi +dzi +dzi +dzi +lVy +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pAr +pAr +aMl +lvJ +lvJ +lvJ +rJp +aJp +cYI +lvJ +aJp +pAr +ukD +lvJ +cYI +lvJ +rhN +lvJ +pAr +aJp +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gyt +gyt +gyt +gyt +gyt +gdH +kPa +msV +uIX +uIX +uIX +uIX +uIX +uIX +uIX +wiW +gih +gih +gih +eqm +gih +xwu +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xCD +nwG +xCD +xCD +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +uIp +gqJ +ybA +ybA +hNQ +qxF +ybA +ybA +ybA +ybA +uIp +ccf +ybA +nwG +"} +(144,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dzi +dzi +dzi +dzi +dzi +qDy +qDy +dzi +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +nwG +aMl +fED +jKj +hKD +pAr +aJp +aMl +lvJ +fED +jKj +hKD +lvJ +aMl +baV +lvJ +fED +jKj +hKD +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +jol +nwG +nwG +nwG +nwG +nwG +gyt +gyt +gyt +gyt +gyt +gyt +gih +nsk +gih +gyt +xwu +gyt +gyt +gih +xwu +nwG +xCD +xCD +mYY +nwG +mYY +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +jol +nwG +mYY +xCD +xCD +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +uIp +ybA +ybA +lEy +tql +tql +ybA +ybA +ybA +ybA +mYY +nwG +nwG +"} +(145,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +qDy +dzi +dzi +vdT +dzi +qDy +qDy +dzi +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +pAr +aMl +rXc +aeo +kSb +aJp +lCR +aMl +qDs +rXc +aeo +kSb +lvJ +aMl +lvJ +cLR +rXc +aeo +kSb +aMl +nwG +kWE +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xwu +gyt +kWH +msY +msY +otr +pFN +msY +scS +msY +vod +gyt +waA +xxB +xCD +nwG +nwG +xCD +xCD +nwG +nwG +mYY +nwG +sVo +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xCD +xCD +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ccf +mYY +ybA +ybA +tql +vbb +rUy +cuq +ybA +ybA +ybA +nwG +nwG +"} +(146,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +qDy +qDy +dzi +dzi +dzi +dzi +qDy +qDy +dzi +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +pAr +aMl +tFw +gpT +xrE +aJp +kDb +aMl +hCz +amn +gpT +xrE +lTU +aMl +baV +pAr +amn +gpT +xrE +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +fdb +ePP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xwu +gyt +szl +nlN +sMk +pHZ +qIR +lHx +uaN +gyt +gyt +waA +xtx +nwG +xCD +xCD +xCD +nwG +jol +xCD +nwG +nwG +nwG +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +mYY +mYY +nwG +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +nwG +nwG +ybA +ybA +ybA +qxF +rUy +dRK +sjH +bWF +ybA +ybA +nwG +"} +(147,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +qDy +qDy +dzi +qDy +qDy +dzi +dzi +qDy +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +pAr +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +aMl +pAr +pAr +pAr +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +jol +nwG +nwG +nwG +nwG +nwG +gyt +gyt +nmu +our +pJa +qLY +qLY +gyt +gyt +wlf +waA +xtx +xCD +mYY +mYY +mYY +nwG +xCD +nwG +jzV +fdb +xCD +nwG +nwG +nwG +xCD +mYY +xCD +nwG +nwG +nwG +mYY +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +ybA +ybA +ybA +mYY +ccf +nwG +nwG +nwG +nwG +nwG +"} +(148,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +qDy +qDy +dzi +qDy +qDy +dzi +dzi +dzi +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +nwG +nwG +pAr +pAr +nwG +kWE +pAr +pAr +pAr +kWE +kWE +nwG +pAr +pAr +pAr +nwG +pAr +pAr +pAr +pAr +nwG +kWE +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xwu +gyt +gyt +gyt +gyt +gyt +gih +xwu +xwu +waA +xtx +nwG +nwG +nwG +nwG +mYY +nwG +nwG +xCD +mYY +nwG +xCD +xCD +nwG +nwG +nwG +nwG +nwG +xCD +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(149,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gCR +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +lVy +dzi +dzi +dzi +dzi +dzi +dzi +dzi +dzi +dzi +lVy +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +kWE +nwG +kWE +kWE +kWE +kWE +kWE +kWE +kWE +nwG +nwG +nwG +kWE +kWE +kWE +kWE +kWE +kWE +kWE +nwG +nwG +nwG +kWE +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +mYY +nwG +nwG +nwG +nwG +nwG +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xCD +xCD +xCD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(150,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(151,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +"} +(152,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +qBL +dnn +ips +ips +ips +ips +ips +vNu +vDr +qBL +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +hcs +qBL +hcs +nwG +nwG +nwG +nwG +nwG +nwG +"} +(153,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +oGj +xdM +wWW +wWW +wWW +wWW +mLk +wWW +xdM +oGj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +oGj +xdM +xdM +xdM +xdM +vBH +nwG +nwG +"} +(154,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +bNl +lsd +uhJ +uTg +puU +siZ +uhJ +bjr +xdM +oCb +xWf +xWf +xWf +xWf +dEZ +xdM +iSv +bWU +qfd +cVb +qfd +puU +qfd +puU +xdM +rHI +rHI +xdM +eJw +hgc +xdM +iuf +iuf +sNB +nwG +nwG +nwG +"} +(155,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +ode +qgK +bzD +bzD +bzD +gzV +vQF +vQF +vQF +rbL +fSx +lSp +vUT +vUT +gvO +miN +xfE +sUD +keu +ndi +hZr +psc +inW +tJP +inW +vye +opF +wQT +pnv +nNs +iWJ +vwJ +xpC +iuf +iuf +nwG +nwG +nwG +nwG +"} +(156,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +uhJ +jXO +vIy +puU +bNl +syf +klF +xVC +pKK +blq +obI +gIW +tji +bMg +xVC +kqA +vbJ +vIy +vbJ +vvk +vbJ +puU +puU +xdM +rDO +aTP +xdM +puU +vvk +xdM +iuf +iuf +nwG +nwG +nwG +nwG +"} +(157,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +syf +xVC +xVC +mEI +ftr +cuk +gIW +ngF +wJr +xVC +ugy +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +bWR +nwG +nwG +nwG +"} +(158,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xdM +syf +xVC +xVC +mEI +xEB +mCp +gIW +afN +jfX +xVC +oCL +eMJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(159,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +piI +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +vBH +nwG +nwG +nwG +nwG +nwG +nwG +bJT +xdM +xdM +xdM +xdM +xdM +nlJ +xVC +xVC +xVC +xVC +xVC +boI +xVC +pBk +xVC +oCL +eMJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(160,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +iuf +iuf +iuf +iuf +iuf +iuf +iuf +iuf +opn +xVC +tVo +dVo +boQ +xVC +cNW +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +vBH +nwG +nwG +nwG +"} +(161,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +bNl +puU +puU +puU +puU +puU +uhJ +puU +uTg +puU +siZ +nxJ +tuP +xVC +iuf +iuf +xVf +oWa +oWa +oWa +aWr +iuf +iuf +xVC +hBF +raz +irV +xVC +kqA +nxJ +qfd +cVb +qfd +puU +qfd +puU +xdM +rHI +rHI +xdM +eJw +puU +xdM +iuf +iuf +sNB +nwG +nwG +nwG +"} +(162,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +ode +qgK +bzD +bzD +bzD +bzD +bzD +bzD +bzD +bzD +bzD +gzV +vQF +vQF +vQF +ugC +umS +iuf +sQC +kJX +xVf +dQQ +reb +xFm +alo +iuf +xVC +cbW +tpd +cME +msS +rQS +nbL +rXt +shE +scN +cGd +scN +uEV +enp +xHh +nJL +xjo +rwP +fNC +xpC +iuf +iuf +nwG +nwG +nwG +nwG +"} +(163,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +puU +jXO +bNl +uhJ +puU +puU +puU +lsd +vIy +uhJ +puU +puU +sOt +xVC +iuf +iuf +xVf +kKK +ctI +kKK +vaM +iuf +iuf +xVC +hBF +nkz +vUQ +xVC +lDj +vbJ +vIy +vbJ +vvk +vbJ +puU +puU +xdM +rDO +aTP +xdM +puU +vvk +xdM +iuf +iuf +nwG +nwG +nwG +nwG +"} +(164,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +sOt +xVC +iuf +iuf +iuf +iuf +cHS +iuf +iuf +iuf +iuf +xVC +oBe +xVC +sIY +xVC +cNW +xVC +xVC +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +bWR +nwG +nwG +nwG +"} +(165,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +bWR +nwG +nwG +tJi +nwG +xlu +xdM +ewt +xVC +xVC +xVC +xVC +xVC +tGh +xVC +xVC +xVC +xVC +xVC +olM +bxO +uha +pAJ +uQk +kdx +xVC +xdM +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +bWR +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(166,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +eck +asu +qvv +aEH +aEH +qzT +haj +bur +uZI +aWP +bur +bxo +uZI +hBF +iUW +dUT +suK +dLe +xVC +xdM +xdM +nwG +vmP +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(167,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +hih +qBL +hih +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +xVC +xVC +tkp +bMm +bMm +nbM +nbM +kbO +nbM +orA +xVC +rXu +bMm +hBF +bMm +uha +bMm +esv +cPQ +xdM +xdM +xdM +xdM +xdM +xdM +nwG +vmP +nwG +nwG +nwG +nwG +xSD +xSD +nwG +nwG +nwG +nwG +nwG +"} +(168,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +hih +qBL +hih +nwG +nwG +nwG +dJr +xdM +oGj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +txL +bMm +jbu +wqK +pYO +ssE +wqK +aqk +gNP +pCs +jGZ +fHu +pYO +xMn +guK +uRg +hPw +xdM +iIY +ihK +xdM +xdM +xdM +xdM +xdM +xdM +nwG +vmP +nwG +xLk +hcs +nwG +nwG +nwG +nwG +nwG +"} +(169,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +dJr +xdM +oGj +uYC +uYC +uYC +uYC +xdM +xdM +nVV +syO +nPX +vbY +iHE +jwl +xdM +sAq +mot +eOw +qCl +xdM +sAq +mot +eOw +dDJ +xdM +sAq +mot +eOw +fgj +xdM +txL +jcD +qNQ +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xdM +xQq +wKX +gCb +xdM +aIp +seB +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +vBH +nwG +nwG +nwG +nwG +"} +(170,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +qBL +xSD +nwG +nwG +dJr +xdM +xdM +mRJ +mRJ +mRJ +mRJ +xdM +xdM +pVs +dLp +dLp +dLp +sSx +gZg +xdM +faH +kup +xdM +cOn +aPb +awb +xdM +fJh +lnu +uTd +aXc +xdM +rLB +lnu +uTd +aXc +xdM +aUz +lnu +uTd +aXc +xdM +qJY +wrb +uop +xVC +xWn +dHF +uaT +gJb +gJb +kkv +cDV +giA +cRm +xdM +jMm +kLw +woE +bjA +hSG +nED +rlv +ncq +eGe +nbA +nbA +nbA +gQf +hks +fGY +iuf +iuf +sNB +nwG +nwG +nwG +nwG +"} +(171,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +var +qfw +dKP +xdM +wEG +xdM +xdM +mVO +xCF +xCF +xCF +oHX +kiR +xVC +gTC +xug +wYf +eeP +kII +aBR +xdM +jsA +nFX +xdM +dWD +uUP +ezb +xdM +diN +xdM +sFL +xND +xdM +diN +xdM +sFL +xND +xdM +diN +xVC +sFL +xND +xdM +pZK +lXn +wKZ +xVC +xWn +vKC +pWq +dVg +vPl +ryr +wqp +fcD +trQ +xdM +pro +bMm +bMm +xdM +iBP +fIQ +xdM +bYT +puU +hJY +ooB +hJY +gyr +skT +lJP +iuf +iuf +nwG +nwG +nwG +nwG +nwG +"} +(172,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +fFj +wEG +wEG +xdM +fuJ +xCF +sNj +xdM +oyE +nXM +xzg +xzg +xzg +xTt +psP +mcg +gzZ +jTI +hwy +oKa +ceX +gzZ +xdM +omH +vzp +xdM +tly +wAX +nmZ +xdM +iRh +xdM +wGL +dQp +xdM +iRh +xdM +wGL +dQp +xdM +iRh +xdM +wGL +dQp +xdM +avt +sYC +qNQ +xVC +pmu +eda +wJL +dMg +ruH +enz +yhk +bMm +mqh +xdM +sdi +nZF +bMm +xdM +xdM +xdM +xdM +puU +puU +gyr +rFW +gyr +gyr +ooB +dee +iuf +nwG +nwG +nwG +nwG +nwG +nwG +"} +(173,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +fsS +wjv +uty +eyP +hvx +gNv +cUU +aJs +xdM +pAP +uDW +qeY +rjY +vPG +kbO +aMy +xVC +xVC +xVC +xVC +bgy +rUz +xVC +xdM +xdM +xdM +xdM +xdM +xdM +ech +xdM +xxu +xdM +xdM +xdM +xdM +vjE +xdM +xdM +xdM +xdM +rjk +xdM +xdM +xdM +xdM +wcO +bMm +fjP +xVC +xVC +xVC +cby +xVC +xVC +xVC +awv +xVC +xVC +xdM +rGv +oeT +bCg +hbL +bCg +bCg +xdg +puU +tIM +qtj +qtj +qtj +tIM +ooB +mWa +iuf +iyp +nwG +nwG +nwG +nwG +nwG +"} +(174,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +fsS +tRM +ckX +fzd +sbq +kua +mSo +cTj +ike +ioY +xqM +dxY +frR +frR +qgZ +iGG +oJJ +kVP +jvj +hnE +nGd +wPu +aQm +gcK +xqP +oJq +hnE +ucw +wWR +mro +wcE +xqD +sSo +gcK +wWR +iIy +mro +sSo +gcK +hyc +hnE +mro +sSo +gcK +wWR +mro +cpi +lKw +lYn +dIY +ooS +dMl +tZC +dGK +omM +ppZ +nch +qRQ +nIr +eYd +hfm +ged +xrJ +bMm +oNq +bMm +bMm +xdg +puU +qtj +vHq +gyr +vHq +qtj +ooB +mWa +iuf +nwG +nwG +nwG +nwG +nwG +nwG +"} +(175,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +ode +gzR +rnp +xFY +mlA +twa +twa +sCm +fCI +pzZ +xdM +eCg +dxY +frR +qSY +mVh +mVA +gjU +xVC +taA +nbM +sYC +hgQ +qcn +orA +xVC +cIU +jpj +iEA +whK +bMm +nbM +jwn +qcn +bMm +nbM +nbM +nbM +pYV +jpj +iEA +whK +bMm +qcn +nbM +nbM +qYi +xVC +gPX +mAS +lBE +xVC +ouM +rYP +nyQ +isf +wIS +kMR +snW +ulP +dyd +xdM +kLk +xrJ +mCI +wyw +qYS +bMm +xdg +puU +qtj +gyr +kKD +gyr +qtj +skT +dee +xdM +nwG +nwG +nwG +nwG +nwG +nwG +"} +(176,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +snJ +tRM +eEH +gId +bRU +kua +lqj +pPz +haW +mzk +fVe +dxY +frR +frR +qrw +fuP +bfX +oGs +kSU +lOd +olM +hBF +cTs +wiN +mlL +hVK +hBF +hBF +hBF +hBF +hBF +jfs +cTs +wiN +bvi +lOd +olM +cTs +wiN +bvi +xDq +olM +cTs +wiN +bvi +olM +aWP +nNj +itL +jNB +eyY +vet +wNX +jii +jvT +qmq +aoX +gnj +eEh +kaS +dmQ +aiz +xrJ +bMm +bMm +bMm +bMm +xdg +puU +qtj +vHq +gyr +vHq +qtj +ooB +mWa +iuf +iyp +nwG +nwG +nwG +nwG +nwG +"} +(177,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +snJ +dqQ +feX +uaW +hWR +rTB +npK +uEA +xdM +xqf +djF +gkU +hZx +nxw +nbM +kDq +xdM +xdM +xdM +xdM +lqt +eFH +xdM +xdM +nDU +tFI +tFI +tFI +tFI +wOQ +xdM +lxu +xdM +xdM +xdM +xdM +izf +xdM +xdM +xdM +xdM +iTV +xdM +xdM +xdM +xdM +afA +bMm +xMA +xVC +uBz +uCq +rAf +uHp +ezR +ucx +wIS +jii +wIS +xdM +mcP +eID +meD +meD +meD +meD +xdg +puU +tIM +qtj +qtj +qtj +tIM +ooB +mWa +iuf +nwG +nwG +nwG +nwG +nwG +nwG +"} +(178,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +oJj +crT +crT +xdM +fYg +gAT +blp +xdM +ejg +clm +hBF +hBF +hBF +hBF +kDq +xdM +iiQ +gmP +iiQ +syf +vow +iiQ +xdM +wxK +etr +wkn +gGu +qFb +xVC +xdM +gKd +xdM +wGL +wXk +xdM +gKd +xdM +wGL +wXk +xdM +gKd +xdM +wGL +wXk +xdM +hty +jcD +pwA +xVC +bYE +ezR +ulP +isf +ulP +dxB +qmq +qmq +qmq +xdM +eNv +wqX +bMm +twZ +bMm +twZ +xdM +puU +puU +gyr +gfB +gyr +gyr +ooB +dee +iuf +nwG +sNB +nwG +nwG +nwG +nwG +"} +(179,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +var +vxb +skr +xdM +wEG +xdM +xdM +hOp +gAT +gAT +gAT +eMD +gLy +xdM +mEw +vHL +krC +krC +vbv +lYb +xdM +khq +sou +rAt +jXU +jXU +tbW +xdM +diN +xdM +xLr +nFX +xdM +diN +xdM +xLr +nFX +xdM +diN +xdM +xLr +nFX +xdM +geV +qhK +pwA +xVC +tBU +uPN +jii +wIS +wmV +qSf +usG +aUX +aUX +xdM +shx +hBF +hBF +hBF +hBF +nYk +xdM +bYT +puU +txV +ooB +txV +gyr +skT +lJP +iuf +iuf +nwG +nwG +nwG +nwG +nwG +"} +(180,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +eZk +xSD +nwG +nwG +pgC +xdM +xdM +mRJ +mRJ +mRJ +mRJ +xdM +xdM +mGE +wHO +mGE +bhq +dYM +mGE +xdM +iDa +kbl +hpQ +bRs +jXU +lbZ +xdM +fiP +kQn +alx +lZV +xdM +cTy +kQn +alx +lZV +xdM +msF +kQn +alx +lZV +xdM +xLF +xNQ +pwA +xVC +bZx +pgK +qSr +jeb +ezR +isf +isf +rAf +dxB +xdM +keX +kRY +qqx +pJz +hBF +nYk +xdM +puU +puU +upR +ocY +ocY +rZM +fxI +hSV +iuf +iuf +nwG +nwG +nwG +nwG +nwG +"} +(181,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pgC +xdM +vxb +ivw +xdM +xdM +xdM +xdM +xdM +wjl +mWF +iac +ryG +jXL +eQg +xdM +bla +oap +wmI +hYu +xdM +bla +oap +wmI +cFp +xdM +bla +oap +wmI +sDx +xdM +siU +sYC +pwA +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xdM +mnZ +xdM +xdM +xdM +bIr +hBF +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +bWR +nwG +nwG +nwG +nwG +"} +(182,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nza +eZk +nza +nwG +nwG +nwG +pgC +xdM +oGj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +siU +bMm +bur +bxo +kvw +bxo +bxo +uZI +aWP +bur +oJS +dox +kvw +dkj +luV +vfO +gcy +xdM +pkK +jaT +xdM +xdM +xdM +xdM +xdM +xdM +nwG +sEH +nwG +xLk +nza +nwG +nwG +nwG +nwG +nwG +"} +(183,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nza +eZk +nza +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xVC +xVC +vaq +bMm +bMm +nbM +nbM +nbM +nbM +orA +xVC +rXu +bMm +hBF +bMm +keX +bMm +qZn +gNZ +xdM +xdM +xdM +xdM +xdM +xdM +nwG +sEH +nwG +nwG +nwG +nwG +xSD +xSD +nwG +nwG +nwG +nwG +nwG +"} +(184,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xVC +bum +wrU +gov +gov +gov +gov +gov +kiB +cpi +wrU +gov +lmJ +wsC +hqi +dUT +cPm +mGs +xVC +xdM +xdM +nwG +sEH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(185,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +vBH +nwG +nwG +jmn +nwG +kWE +xdM +xVC +dEl +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +xVC +ttu +pQi +keX +snk +aAz +lkL +xVC +xdM +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +vBH +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(186,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +sOt +xVC +lZY +nHZ +irx +hiI +gBz +uAv +eQA +xvE +xVC +bfD +xVC +kpi +xVC +hlF +xVC +xVC +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +vBH +nwG +nwG +nwG +"} +(187,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +uhJ +puU +jXO +puU +puU +puU +uhJ +puU +puU +uTg +puU +bNl +puU +puU +sOt +xVC +iwi +sXB +ltp +jXU +mNJ +uGr +jXU +iQZ +xVC +dkf +skV +kjG +xVC +ntP +qfd +eGE +qfd +cur +qfd +puU +puU +xdM +fRT +rHI +xdM +puU +cur +xdM +iuf +iuf +sNB +nwG +nwG +nwG +"} +(188,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +ode +qgK +bzD +bzD +bzD +bzD +bzD +bzD +bzD +bzD +bzD +gzV +vQF +vQF +vQF +vQF +ald +xVC +kKO +lhE +tBS +dUD +dUD +nKY +jIN +sHK +cIj +giB +isj +kWU +nNW +ibn +bTA +qfF +rry +cGd +scN +cGd +uEV +dks +xHh +nJL +dks +rwP +fNC +xpC +iuf +iuf +nwG +nwG +nwG +nwG +"} +(189,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +puU +puU +bNl +uhJ +puU +puU +puU +puU +vIy +puU +uhJ +ktO +wgI +klF +xVC +pwb +hdU +ltp +jXU +syZ +eFg +jXU +hdU +jfs +dkf +raz +roQ +xVC +kqA +wgI +vbJ +hbq +vbJ +puU +vbJ +puU +xdM +aTP +aTP +xdM +eJw +puU +xdM +iuf +iuf +nwG +nwG +nwG +nwG +"} +(190,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xVC +lMf +ews +wwk +jXU +gUI +daF +oYZ +wUf +xVC +cBP +xox +keX +xVC +hlF +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +bWR +nwG +nwG +nwG +"} +(191,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +bWR +nwG +nwG +nwG +nwG +nwG +nwG +qRJ +xdM +xdM +xdM +xdM +xdM +xEX +xVC +xVC +xVC +xVC +xVC +eMP +xVC +xuN +xVC +oCL +eMJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(192,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xdM +syf +xVC +xVC +tRj +ttE +iHr +dkf +bZA +keX +xVC +oCL +eMJ +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(193,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +pJw +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +syf +xVC +xVC +weS +hBF +qgj +dkf +nOB +keX +xVC +tea +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +vBH +nwG +nwG +nwG +"} +(194,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +bNl +jXO +uTg +lsd +uhJ +syf +tuP +xVC +kWs +hBF +twZ +dkf +nDE +odO +xVC +kqA +qfd +eGE +qfd +cur +qfd +puU +puU +xdM +fRT +rHI +xdM +puU +cur +xdM +iuf +iuf +sNB +nwG +nwG +nwG +"} +(195,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +ode +qgK +bzD +bzD +bzD +gzV +vQF +vQF +vQF +sxf +hfh +lfg +wvE +wPu +iCz +jnB +mqJ +hgh +bSg +aPI +ePd +oJd +mQY +vKX +mQY +jum +oRy +kbr +wQS +oRy +seb +vrn +xpC +iuf +iuf +nwG +nwG +nwG +nwG +"} +(196,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +apT +xdM +puU +uhJ +puU +vIy +uhJ +ktO +bNl +mXT +xVC +twZ +oLe +tai +neP +tHh +bHd +xVC +pVx +klF +vbJ +hbq +vbJ +puU +vbJ +puU +xdM +aTP +aTP +xdM +eJw +hgc +xdM +iuf +iuf +nwG +nwG +nwG +nwG +"} +(197,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +gBj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +oGj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +oGj +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +xdM +oGj +xdM +xdM +xdM +xdM +bWR +nwG +nwG +"} +(198,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +eZk +ggJ +ozv +ozv +ozv +ozv +ozv +ozv +ewS +eZk +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nza +eZk +nza +nwG +nwG +nwG +nwG +nwG +nwG +"} +(199,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +xSD +xSD +xSD +nwG +nwG +nwG +nwG +nwG +nwG +"} +(200,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(201,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(202,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(203,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(204,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(205,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(206,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(207,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(208,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(209,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(210,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(211,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(212,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(213,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(214,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(215,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(216,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(217,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(218,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(219,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(220,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(221,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(222,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(223,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(224,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(225,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(226,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(227,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(228,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(229,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(230,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(231,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(232,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(233,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(234,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(235,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(236,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(237,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(238,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(239,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(240,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(241,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(242,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(243,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(244,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(245,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(246,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(247,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(248,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(249,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(250,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(251,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(252,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(253,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(254,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(255,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} +(256,1,1) = {" +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +nwG +"} diff --git a/README.md b/README.md index 3a2da187d3..1c798fa0db 100644 --- a/README.md +++ b/README.md @@ -1,100 +1,100 @@ -# CHOMPStation2 - -[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/compatibility-club-penguin.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/no-ragrets.svg)](http://forthebadge.com) - -[Website (we dont have one)](https://www.youtube.com/watch?v=oHg5SJYRHA0) - [Forums](hhttps://forums.chompstation13.net/index.php) - [Wiki](https://wiki.chompstation13.net/index.php?title=Main_Page) - [Discord](contact admin) - -Going to make a Pull Request? Make sure you read the [CONTRIBUTING.md](.github/CONTRIBUTING.md) first! - -CHOMPStation was a fork of the Yawn-wider code branch which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, but we are now since separated from Yawn-wider code, while keeping some of their features, which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, for the game Space Station 13. - -![Render Nanomaps](https://github.com/VOREStation/VOREStation/workflows/Render%20Nanomaps/badge.svg) - ---- - -### LICENSE -The code for CHOMPStation is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl.html) version 3, which can be found in full in LICENSE-AGPL3.txt. - -Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt. - -All code whose authorship dates are not prior to `1420675200 +0000` is assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. - -If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which is licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. - -See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. - -Any files located in the -`vorestation/goon`, -`vorestation/icons/goonstation`, or -`vorestation/sound/goonstation` -directories, or any subdirectories of mentioned directories are licensed under the -Creative Commons 3.0 BY-NC-SA license -(https://creativecommons.org/licenses/by-nc-sa/3.0) - -All assets including icons and sound are under a [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license unless otherwise indicated. - -Attributions and other licenses with links to original works are noted in [ATTRIBUTIONS.md](./ATTRIBUTIONS.md). - -### GETTING THE CODE -The simplest way to obtain the code is using the github .zip feature. If you do this, you won't be able to make a Pull Request later, though. You'll need to use the git method. - -Click [here](https://github.com/CHOMPStation2/CHOMPStation2/archive/master.zip) to get the latest code as a .zip file, then unzip it to wherever you want. - -The more complicated and easier to update method is using git. You'll need to download git or some client from [here](http://git-scm.com/). When that's installed, right click in any folder and click on "Git Bash". When that opens, type in: - - git clone https://github.com/CHOMPStation2/CHOMPStation2.git - -(hint: hold down ctrl and press insert to paste into git bash) - -This will take a while to download, but it provides an easier method for updating. - -### INSTALLATION - -First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). - -This is a sourcecode-only release, so the next step is to compile the server files. Open vorestation.dme by double-clicking it, open the Build menu, and click compile. This'll take a little while, and if everything's done right you'll get a message like this: - - saving vorestation.dmb (DEBUG mode) - - vorestation.dmb - 0 errors, 0 warnings - -If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC. - -Once that's done, open up the config folder. You'll want to edit config.txt to set the probabilities for different gamemodes in Secret and to set your server location so that all your players don't get disconnected at the end of each round. It's recommended you don't turn on the gamemodes with probability 0, as they have various issues and aren't currently being tested, so they may have unknown and bizarre bugs. - -You'll also want to edit admins.txt to remove the default admins and add your own. "Host" is the highest level of access, and the other recommended admin levels for now are "Game Admin" and "Moderator". The format is: - - byondkey - Rank - -where the BYOND key must be in lowercase and the admin rank must be properly capitalised. There are a bunch more admin ranks, but these two should be enough for most servers, assuming you have trustworthy admins. - -Finally, to start the server, run Dream Daemon and enter the path to your compiled vorestation.dmb file. Make sure to set the port to the one you specified in the config.txt, and set the Security box to 'Trusted'. Then press GO and the server should start up and be ready to join. - ---- - -### UPDATING - -To update an existing installation, first back up your /config and /data folders -as these store your server configuration, player preferences and banlist. - -If you used the zip method, you'll need to download the zip file again and unzip it somewhere else, and then copy the /config and /data folders over. - -If you used the git method, you simply need to type this in to git bash: - - git pull - -When this completes, copy over your /data and /config folders again, just in case. - -When you have done this, you'll need to recompile the code, but then it should work fine. - ---- - -### Configuration - -For a basic setup, simply copy every file from config/example to config. - ---- - -### SQL Setup - -The SQL backend for the library and stats tracking requires a MySQL server. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. More detailed setup instructions arecoming soon, for now ask in our Discord. +# CHOMPStation2 + +[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/compatibility-club-penguin.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/no-ragrets.svg)](http://forthebadge.com) + +[Website (we dont have one)](https://www.youtube.com/watch?v=oHg5SJYRHA0) - [Forums](hhttps://forums.chompstation13.net/index.php) - [Wiki](https://wiki.chompstation13.net/index.php?title=Main_Page) - [Discord](contact admin) + +Going to make a Pull Request? Make sure you read the [CONTRIBUTING.md](.github/CONTRIBUTING.md) first! + +CHOMPStation was a fork of the Yawn-wider code branch which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, but we are now since separated from Yawn-wider code, while keeping some of their features, which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, for the game Space Station 13. + +![Render Nanomaps](https://github.com/VOREStation/VOREStation/workflows/Render%20Nanomaps/badge.svg) + +--- + +### LICENSE +The code for CHOMPStation is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl.html) version 3, which can be found in full in LICENSE-AGPL3.txt. + +Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt. + +All code whose authorship dates are not prior to `1420675200 +0000` is assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. + +If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which is licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. + +See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. + +Any files located in the +`vorestation/goon`, +`vorestation/icons/goonstation`, or +`vorestation/sound/goonstation` +directories, or any subdirectories of mentioned directories are licensed under the +Creative Commons 3.0 BY-NC-SA license +(https://creativecommons.org/licenses/by-nc-sa/3.0) + +All assets including icons and sound are under a [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license unless otherwise indicated. + +Attributions and other licenses with links to original works are noted in [ATTRIBUTIONS.md](./ATTRIBUTIONS.md). + +### GETTING THE CODE +The simplest way to obtain the code is using the github .zip feature. If you do this, you won't be able to make a Pull Request later, though. You'll need to use the git method. + +Click [here](https://github.com/CHOMPStation2/CHOMPStation2/archive/master.zip) to get the latest code as a .zip file, then unzip it to wherever you want. + +The more complicated and easier to update method is using git. You'll need to download git or some client from [here](http://git-scm.com/). When that's installed, right click in any folder and click on "Git Bash". When that opens, type in: + + git clone https://github.com/CHOMPStation2/CHOMPStation2.git + +(hint: hold down ctrl and press insert to paste into git bash) + +This will take a while to download, but it provides an easier method for updating. + +### INSTALLATION + +First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). + +This is a sourcecode-only release, so the next step is to compile the server files. Open vorestation.dme by double-clicking it, open the Build menu, and click compile. This'll take a little while, and if everything's done right you'll get a message like this: + + saving vorestation.dmb (DEBUG mode) + + vorestation.dmb - 0 errors, 0 warnings + +If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC. + +Once that's done, open up the config folder. You'll want to edit config.txt to set the probabilities for different gamemodes in Secret and to set your server location so that all your players don't get disconnected at the end of each round. It's recommended you don't turn on the gamemodes with probability 0, as they have various issues and aren't currently being tested, so they may have unknown and bizarre bugs. + +You'll also want to edit admins.txt to remove the default admins and add your own. "Host" is the highest level of access, and the other recommended admin levels for now are "Game Admin" and "Moderator". The format is: + + byondkey - Rank + +where the BYOND key must be in lowercase and the admin rank must be properly capitalised. There are a bunch more admin ranks, but these two should be enough for most servers, assuming you have trustworthy admins. + +Finally, to start the server, run Dream Daemon and enter the path to your compiled vorestation.dmb file. Make sure to set the port to the one you specified in the config.txt, and set the Security box to 'Trusted'. Then press GO and the server should start up and be ready to join. + +--- + +### UPDATING + +To update an existing installation, first back up your /config and /data folders +as these store your server configuration, player preferences and banlist. + +If you used the zip method, you'll need to download the zip file again and unzip it somewhere else, and then copy the /config and /data folders over. + +If you used the git method, you simply need to type this in to git bash: + + git pull + +When this completes, copy over your /data and /config folders again, just in case. + +When you have done this, you'll need to recompile the code, but then it should work fine. + +--- + +### Configuration + +For a basic setup, simply copy every file from config/example to config. + +--- + +### SQL Setup + +The SQL backend for the library and stats tracking requires a MySQL server. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. More detailed setup instructions arecoming soon, for now ask in our Discord. diff --git a/bot/CORE_DATA.py b/bot/CORE_DATA.py index ca235888f1..5fe47961db 100644 --- a/bot/CORE_DATA.py +++ b/bot/CORE_DATA.py @@ -1,13 +1,13 @@ -Name = "CC_NanoTrasen" #The name he uses to connect -no_absolute_paths = True -debug_on = False -SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, in lowercase -DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False -directory = "bot/directory/here/" # Directory the bot is located in, make sure to keep the "/" at the end -version = "TG CC-BY-SA 6" -Network = 'YOUR.SERVER.HERE' #e.g. "irc.rizon.net" -channel = "#YOUR CHANNEL HERE" #what channel you want the bot in -channels = ["#YOUR CHANNEL HERE"] #same as above -greeting = "Welcome!" #what he says when a person he hasn't seen before joins -prefix = "!" #prefix for bot commands -Port = 7000 +Name = "CC_NanoTrasen" #The name he uses to connect +no_absolute_paths = True +debug_on = False +SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, in lowercase +DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False +directory = "bot/directory/here/" # Directory the bot is located in, make sure to keep the "/" at the end +version = "TG CC-BY-SA 6" +Network = 'YOUR.SERVER.HERE' #e.g. "irc.rizon.net" +channel = "#YOUR CHANNEL HERE" #what channel you want the bot in +channels = ["#YOUR CHANNEL HERE"] #same as above +greeting = "Welcome!" #what he says when a person he hasn't seen before joins +prefix = "!" #prefix for bot commands +Port = 7000 diff --git a/bot/C_eightball.py b/bot/C_eightball.py index 2ed73dafd5..3841c22172 100644 --- a/bot/C_eightball.py +++ b/bot/C_eightball.py @@ -1,32 +1,32 @@ -from random import choice as fsample #Yay for added speed! -global responses -responses = ['Yes','Too bad','Will you turn me off if I tell you?','Absolutely', - "Not at all", "Nope", "It does", "No", "All the time", - "I don't really know", "Could be","Possibly","You're still here?",# Chaoticag - "No idea", "Of course", "Would you turn me off if I tell you?", - "Sweet!","Nah","Certainly","Yeah","Yup","I am quite confident that the answer is Yes", - "Perhaps", "Yeeeeaah... No.", "Indubitably" ] # Richard -def eightball(data,debug,sender,prefix): - global responses - arg = data.lower().replace(prefix+"eightball ","") - arg = arg.replace(prefix+"8ball ","") - if debug: - print sender+":"+prefix+"eightball", arg - if "answer" in arg and "everything" in arg and "to" in arg: - if debug: - print "Responded with",42 - return "42" - elif arg == "derp": - if debug: - print "Responded with herp" - return("herp") - elif arg == "herp": - if debug: - print "Responded with derp" - return("derp") - else: - #choice = sample(responses,1)[0] - choice = fsample(responses) - if debug: - print "Responded with", choice - return(choice) +from random import choice as fsample #Yay for added speed! +global responses +responses = ['Yes','Too bad','Will you turn me off if I tell you?','Absolutely', + "Not at all", "Nope", "It does", "No", "All the time", + "I don't really know", "Could be","Possibly","You're still here?",# Chaoticag + "No idea", "Of course", "Would you turn me off if I tell you?", + "Sweet!","Nah","Certainly","Yeah","Yup","I am quite confident that the answer is Yes", + "Perhaps", "Yeeeeaah... No.", "Indubitably" ] # Richard +def eightball(data,debug,sender,prefix): + global responses + arg = data.lower().replace(prefix+"eightball ","") + arg = arg.replace(prefix+"8ball ","") + if debug: + print sender+":"+prefix+"eightball", arg + if "answer" in arg and "everything" in arg and "to" in arg: + if debug: + print "Responded with",42 + return "42" + elif arg == "derp": + if debug: + print "Responded with herp" + return("herp") + elif arg == "herp": + if debug: + print "Responded with derp" + return("derp") + else: + #choice = sample(responses,1)[0] + choice = fsample(responses) + if debug: + print "Responded with", choice + return(choice) diff --git a/bot/C_heaortai.py b/bot/C_heaortai.py index 6e8b304e73..257c3a8634 100644 --- a/bot/C_heaortai.py +++ b/bot/C_heaortai.py @@ -1,5 +1,5 @@ -#Throws a coin, simple. -from random import random -def heaortai(debug,sender): return("Heads" if random() > 0.5 else "Tails") -# Takes 1/6th the time of doing it with random.randint(0,1) -# This file used to be a lot bigger, now it's kind of useless. +#Throws a coin, simple. +from random import random +def heaortai(debug,sender): return("Heads" if random() > 0.5 else "Tails") +# Takes 1/6th the time of doing it with random.randint(0,1) +# This file used to be a lot bigger, now it's kind of useless. diff --git a/bot/C_makequote.py b/bot/C_makequote.py index f79b863449..9ae556ab7e 100644 --- a/bot/C_makequote.py +++ b/bot/C_makequote.py @@ -1,21 +1,21 @@ -from save_load import save -from os import listdir -import CORE_DATA -directory = CORE_DATA.directory -def mkquote(prefix,influx,sender,debug): - arg = influx[10+len(prefix):] - if debug: - print sender+":"+prefix+"makequote "+str(len(arg))+" Characters" - if len(arg) == 0: - return("Type something to a quote") - else: - files = listdir(directory+"userquotes") - numb = 0 - while True: - numb += 1 - if sender.lower()+str(numb) in files: - pass - else: - save(directory+"userquotes/"+sender.lower()+str(numb),[arg,sender.lower()]) - return("Saved as:"+sender.lower()+str(numb)) - break +from save_load import save +from os import listdir +import CORE_DATA +directory = CORE_DATA.directory +def mkquote(prefix,influx,sender,debug): + arg = influx[10+len(prefix):] + if debug: + print sender+":"+prefix+"makequote "+str(len(arg))+" Characters" + if len(arg) == 0: + return("Type something to a quote") + else: + files = listdir(directory+"userquotes") + numb = 0 + while True: + numb += 1 + if sender.lower()+str(numb) in files: + pass + else: + save(directory+"userquotes/"+sender.lower()+str(numb),[arg,sender.lower()]) + return("Saved as:"+sender.lower()+str(numb)) + break diff --git a/bot/C_maths.py b/bot/C_maths.py index 86013b74a7..ea60457331 100644 --- a/bot/C_maths.py +++ b/bot/C_maths.py @@ -1,70 +1,70 @@ -### EXPERIMENTAL PROTOTYPE ### -# e = 2.7182818284590452353602874713526624977572 -# pi = math.pi -from __future__ import division #PYTHON Y U NO TELL ME THIS BEFORE -import math -import random -import re -e = "2.7182818284590452353602874713526624977572" -pi = str(math.pi) -global pre -pre = len("maths ") -def maths(influx,prefix="!",sender="NaN",debug=True,method="n"): - global pre - influx = influx.lower() - influx = influx[len(prefix)+pre:] - influx = influx.replace("pie",pi+"*"+e) - influx = influx.replace("e*",e+"*") - influx = influx.replace("*e","*"+e) - influx = influx.replace("pi",pi) - if debug: - print sender+":"+prefix+"maths" - if influx.count("**") == 0 and influx.count('"') == 0 and influx.count("'") == 0 and influx.count(";") == 0 and influx.count(":") == 0: - influx_low = influx.lower() - influx_hi = influx.upper() - if "0b" in influx_low: - influx_low = re.sub("0b[0-1]*","",influx_low) - influx_hi = re.sub("0B[0-1]*","",influx_hi) - if "0x" in influx_low: - influx_low = re.sub("0x[a-f0-9]*","",influx_low) - influx_hi = re.sub("0X[A-F0-9]*","",influx_hi) - if "rand" in influx_low: - influx_low = re.sub("rand","",influx_low) - influx_hi = re.sub("RAND","",influx_hi) - if influx_low == influx_hi: - influx = re.sub("rand","random.random()",influx) - try: - result = eval(influx.lower()) - except ZeroDivisionError: - return "Divide by zero detected." - except SyntaxError: - return "Syntax Error detected." - except TypeError: - return "Type Error detected." - except: - return "Unknown Error detected." - else: - if method == "n": #Normal - return result - elif method == "i": #Forced Int - return int(result) - elif method == "h": #Hex - try: - if "L" in hex(result)[2:]: - return hex(result)[2:-1] - else: - return hex(result)[2:].upper() - except TypeError: - return "That value (%s) cannot be interpreted properly using !hmaths" %(str(result)) - elif method == "b": #Binary - try: - return bin(result)[2:].upper() - except TypeError: - return "That value (%s) cannot be interpreted properly using !bmaths" %(str(result)) - else: - return result - else: - return "What are you trying to make me do again?" - else: - return "Those are likely to make me hang" - +### EXPERIMENTAL PROTOTYPE ### +# e = 2.7182818284590452353602874713526624977572 +# pi = math.pi +from __future__ import division #PYTHON Y U NO TELL ME THIS BEFORE +import math +import random +import re +e = "2.7182818284590452353602874713526624977572" +pi = str(math.pi) +global pre +pre = len("maths ") +def maths(influx,prefix="!",sender="NaN",debug=True,method="n"): + global pre + influx = influx.lower() + influx = influx[len(prefix)+pre:] + influx = influx.replace("pie",pi+"*"+e) + influx = influx.replace("e*",e+"*") + influx = influx.replace("*e","*"+e) + influx = influx.replace("pi",pi) + if debug: + print sender+":"+prefix+"maths" + if influx.count("**") == 0 and influx.count('"') == 0 and influx.count("'") == 0 and influx.count(";") == 0 and influx.count(":") == 0: + influx_low = influx.lower() + influx_hi = influx.upper() + if "0b" in influx_low: + influx_low = re.sub("0b[0-1]*","",influx_low) + influx_hi = re.sub("0B[0-1]*","",influx_hi) + if "0x" in influx_low: + influx_low = re.sub("0x[a-f0-9]*","",influx_low) + influx_hi = re.sub("0X[A-F0-9]*","",influx_hi) + if "rand" in influx_low: + influx_low = re.sub("rand","",influx_low) + influx_hi = re.sub("RAND","",influx_hi) + if influx_low == influx_hi: + influx = re.sub("rand","random.random()",influx) + try: + result = eval(influx.lower()) + except ZeroDivisionError: + return "Divide by zero detected." + except SyntaxError: + return "Syntax Error detected." + except TypeError: + return "Type Error detected." + except: + return "Unknown Error detected." + else: + if method == "n": #Normal + return result + elif method == "i": #Forced Int + return int(result) + elif method == "h": #Hex + try: + if "L" in hex(result)[2:]: + return hex(result)[2:-1] + else: + return hex(result)[2:].upper() + except TypeError: + return "That value (%s) cannot be interpreted properly using !hmaths" %(str(result)) + elif method == "b": #Binary + try: + return bin(result)[2:].upper() + except TypeError: + return "That value (%s) cannot be interpreted properly using !bmaths" %(str(result)) + else: + return result + else: + return "What are you trying to make me do again?" + else: + return "Those are likely to make me hang" + diff --git a/bot/C_rot13.py b/bot/C_rot13.py index 62b72dc2ad..36e0796b9b 100644 --- a/bot/C_rot13.py +++ b/bot/C_rot13.py @@ -1,23 +1,23 @@ -global parta,partb -parta = {"A":"N","B":"O","C":"P","D":"Q","E":"R","F":"S","G":"T","H":"U","I":"V","J":"W","K":"X","L":"Y","M":"Z"} -partb = {'O':'B','N':'A','Q':'D','P':'C','S':'F','R':'E','U':'H','T':'G','W':'J','V':'I','Y':'L','X':'K','Z':'M'} -def rot13(text): - global parta,partb - newtext = "" - for letter in text: - try: - if letter.isupper(): - newtext += parta[letter] - else: - newtext += parta[letter.upper()].lower() - except: - try: - if letter.isupper(): - newtext += partb[letter] - pass - else: - newtext += partb[letter.upper()].lower() - pass - except: - newtext += letter - return newtext +global parta,partb +parta = {"A":"N","B":"O","C":"P","D":"Q","E":"R","F":"S","G":"T","H":"U","I":"V","J":"W","K":"X","L":"Y","M":"Z"} +partb = {'O':'B','N':'A','Q':'D','P':'C','S':'F','R':'E','U':'H','T':'G','W':'J','V':'I','Y':'L','X':'K','Z':'M'} +def rot13(text): + global parta,partb + newtext = "" + for letter in text: + try: + if letter.isupper(): + newtext += parta[letter] + else: + newtext += parta[letter.upper()].lower() + except: + try: + if letter.isupper(): + newtext += partb[letter] + pass + else: + newtext += partb[letter.upper()].lower() + pass + except: + newtext += letter + return newtext diff --git a/bot/C_rtd.py b/bot/C_rtd.py index 96736fec21..e4a032a0de 100644 --- a/bot/C_rtd.py +++ b/bot/C_rtd.py @@ -1,96 +1,96 @@ -import random -def rtd(data,debug,sender): - backo = data - try: - arg1,arg2 = backo.split("d") - except ValueError, err: - return("Too many or too small amount of arguments") - else: - if debug: - print sender+":!rtd "+arg1+"d"+arg2 #faster than using %s's - die,die2 = [],[] - current_mark = "" - outcome = 0 - realnumberfound = False - checks = [] - count = 0 - arg1 = arg1.replace(" ","") - arg2 = arg2.replace(" ","") - try: - i_arg1 = int(arg1) - a_arg1 = abs(i_arg1) - if "+" in arg2 or "-" in arg2: - plus_spot = arg2.find("+") - minus_spot = arg2.find("-") - if plus_spot == -1 and minus_spot == -1: - nicer_form = "" - elif plus_spot != -1 and minus_spot == -1: - nicer_form = arg2[plus_spot:] - elif plus_spot == -1 and minus_spot != -1: - nicer_form = arg2[minus_spot:] - else: - if plus_spot < minus_spot: - nicer_form = arg2[plus_spot:] - else: - nicer_form = arg2[minus_spot:] - for letter in arg2: - if letter == "+" or letter == "-": - current_mark = letter - checks = [] - count += 1 - continue - checks.append(letter) - try: - next_up = arg2[count+1] - except: - if realnumberfound == False: - i_arg2 = int("".join(checks)) - checks = [] - realnumberfound = True - elif current_mark == "+": - outcome += int("".join(checks)) - else: - outcome -= int("".join(checks)) - else: - if next_up == "+" or next_up == "-": - if realnumberfound == False: - i_arg2 = int("".join(checks)) - checks = [] - realnumberfound = True - else: - if current_mark == "+": - outcome += int("".join(checks)) - else: - outcome -= int("".join(checks)) - checks = [] - count += 1 - else: - i_arg2 = int(arg2) - if a_arg1 == 0 or abs(i_arg2) == 0: - raise RuntimeError - except ValueError: - return("You lied! That's not a number!") - except RuntimeError: - return("Too many zeroes!") - else: - if a_arg1 > 100: - return("Too many rolls, I can only do one hundred at max.") - else: - for i in xrange(0,a_arg1): - if i_arg2 < 0: - dice = random.randint(i_arg2,0) - else: - dice = random.randint(1,i_arg2) - die.append(dice) - die2.append(str(dice)) - if i_arg2 < 0: - flist = "".join(die2) - else: - flist = "+".join(die2) - if len(flist) > 350: - return(str(reduce(lambda x,y: x+y, die)+outcome)) - else: - if current_mark == "": - return(flist+" = "+str(reduce(lambda x,y: x+y, die)+outcome)) - else: - return(flist+" ("+nicer_form+") = "+str(reduce(lambda x,y: x+y, die)+outcome)) +import random +def rtd(data,debug,sender): + backo = data + try: + arg1,arg2 = backo.split("d") + except ValueError, err: + return("Too many or too small amount of arguments") + else: + if debug: + print sender+":!rtd "+arg1+"d"+arg2 #faster than using %s's + die,die2 = [],[] + current_mark = "" + outcome = 0 + realnumberfound = False + checks = [] + count = 0 + arg1 = arg1.replace(" ","") + arg2 = arg2.replace(" ","") + try: + i_arg1 = int(arg1) + a_arg1 = abs(i_arg1) + if "+" in arg2 or "-" in arg2: + plus_spot = arg2.find("+") + minus_spot = arg2.find("-") + if plus_spot == -1 and minus_spot == -1: + nicer_form = "" + elif plus_spot != -1 and minus_spot == -1: + nicer_form = arg2[plus_spot:] + elif plus_spot == -1 and minus_spot != -1: + nicer_form = arg2[minus_spot:] + else: + if plus_spot < minus_spot: + nicer_form = arg2[plus_spot:] + else: + nicer_form = arg2[minus_spot:] + for letter in arg2: + if letter == "+" or letter == "-": + current_mark = letter + checks = [] + count += 1 + continue + checks.append(letter) + try: + next_up = arg2[count+1] + except: + if realnumberfound == False: + i_arg2 = int("".join(checks)) + checks = [] + realnumberfound = True + elif current_mark == "+": + outcome += int("".join(checks)) + else: + outcome -= int("".join(checks)) + else: + if next_up == "+" or next_up == "-": + if realnumberfound == False: + i_arg2 = int("".join(checks)) + checks = [] + realnumberfound = True + else: + if current_mark == "+": + outcome += int("".join(checks)) + else: + outcome -= int("".join(checks)) + checks = [] + count += 1 + else: + i_arg2 = int(arg2) + if a_arg1 == 0 or abs(i_arg2) == 0: + raise RuntimeError + except ValueError: + return("You lied! That's not a number!") + except RuntimeError: + return("Too many zeroes!") + else: + if a_arg1 > 100: + return("Too many rolls, I can only do one hundred at max.") + else: + for i in xrange(0,a_arg1): + if i_arg2 < 0: + dice = random.randint(i_arg2,0) + else: + dice = random.randint(1,i_arg2) + die.append(dice) + die2.append(str(dice)) + if i_arg2 < 0: + flist = "".join(die2) + else: + flist = "+".join(die2) + if len(flist) > 350: + return(str(reduce(lambda x,y: x+y, die)+outcome)) + else: + if current_mark == "": + return(flist+" = "+str(reduce(lambda x,y: x+y, die)+outcome)) + else: + return(flist+" ("+nicer_form+") = "+str(reduce(lambda x,y: x+y, die)+outcome)) diff --git a/bot/C_sarcasticball.py b/bot/C_sarcasticball.py index 1f5ae32181..f5b0e60b1d 100644 --- a/bot/C_sarcasticball.py +++ b/bot/C_sarcasticball.py @@ -1,30 +1,30 @@ -from random import choice as fsample -sarcastic_responses = ["Yeah right","What do I look like to you?","Are you kidding me?",#UsF - "As much as you","You don't believe that yourself","When pigs fly",#UsF - "Like your grandma","You would like to know, wouldn't you?", #UsF - "Like your mom", #Spectre - "Totally","Not at all", #Spectre - "AHAHAHahahaha, No.", #Strumpetplaya - "Not as much as USER","As much as USER", - "Really, you expect me to tell you that?", - "Right, and you've been building NOUNs for those USERs in the LOCATION, haven't you?" ] #Richard -locations = ["woods","baystation","ditch"] -nouns = ["bomb","toilet","robot","cyborg", - "garbage can","gun","cake", - "missile"] -def sarcasticball(data,debug,sender,users,prefix): - arg = data.lower().replace(prefix+"sarcasticball ","") - arg = arg.replace(prefix+"sball ","") - if debug: - print sender+":"+prefix+"sarcasticball", arg - choice = fsample(sarcastic_responses) - if "USER" in choice: - choice = choice.replace("USER",fsample(users),1) - choice = choice.replace("USER",fsample(users),1) - if "NOUN" in choice: - choice = choice.replace("NOUN",fsample(nouns),1) - if "LOCATION" in choice: - choice = choice.replace("LOCATION",fsample(locations),1) - if debug: - print "Responded with", choice - return(choice) +from random import choice as fsample +sarcastic_responses = ["Yeah right","What do I look like to you?","Are you kidding me?",#UsF + "As much as you","You don't believe that yourself","When pigs fly",#UsF + "Like your grandma","You would like to know, wouldn't you?", #UsF + "Like your mom", #Spectre + "Totally","Not at all", #Spectre + "AHAHAHahahaha, No.", #Strumpetplaya + "Not as much as USER","As much as USER", + "Really, you expect me to tell you that?", + "Right, and you've been building NOUNs for those USERs in the LOCATION, haven't you?" ] #Richard +locations = ["woods","baystation","ditch"] +nouns = ["bomb","toilet","robot","cyborg", + "garbage can","gun","cake", + "missile"] +def sarcasticball(data,debug,sender,users,prefix): + arg = data.lower().replace(prefix+"sarcasticball ","") + arg = arg.replace(prefix+"sball ","") + if debug: + print sender+":"+prefix+"sarcasticball", arg + choice = fsample(sarcastic_responses) + if "USER" in choice: + choice = choice.replace("USER",fsample(users),1) + choice = choice.replace("USER",fsample(users),1) + if "NOUN" in choice: + choice = choice.replace("NOUN",fsample(nouns),1) + if "LOCATION" in choice: + choice = choice.replace("LOCATION",fsample(locations),1) + if debug: + print "Responded with", choice + return(choice) diff --git a/bot/C_srtd.py b/bot/C_srtd.py index 761c0628d6..b49b8f8c1c 100644 --- a/bot/C_srtd.py +++ b/bot/C_srtd.py @@ -1,35 +1,35 @@ -import random -def srtd(data,debug,sender): - try: - arg1,arg2 = data.split("d") - except ValueError, err: - if str(err) == "need more than 1 value to unpack": - return("Too small amount of arguments") - else: - return("Too many arguments") - else: - if debug: - print sender+":!rtd "+arg1+"d"+arg2 - die = [] - arg1 = arg1.replace(" ","") - arg2 = arg2.replace(" ","") - try: - i_arg1 = int(arg1) - i_arg2 = int(arg2) - if abs(i_arg1) == 0 or abs(i_arg2) == 0: - raise RuntimeError - except ValueError: - return("You lied! That's not a number!") - except RuntimeError: - return("Too many zeroes!") - else: - if abs(i_arg1) > 500: - return("Too many rolls, I can only do five hundred at max.") - else: - for i in xrange(0,abs(i_arg1)): - if i_arg2 < 0: - dice = random.randint(i_arg2,0) - else: - dice = random.randint(1,i_arg2) - die.append(dice) - return(str(reduce(lambda x,y: x+y, die))) +import random +def srtd(data,debug,sender): + try: + arg1,arg2 = data.split("d") + except ValueError, err: + if str(err) == "need more than 1 value to unpack": + return("Too small amount of arguments") + else: + return("Too many arguments") + else: + if debug: + print sender+":!rtd "+arg1+"d"+arg2 + die = [] + arg1 = arg1.replace(" ","") + arg2 = arg2.replace(" ","") + try: + i_arg1 = int(arg1) + i_arg2 = int(arg2) + if abs(i_arg1) == 0 or abs(i_arg2) == 0: + raise RuntimeError + except ValueError: + return("You lied! That's not a number!") + except RuntimeError: + return("Too many zeroes!") + else: + if abs(i_arg1) > 500: + return("Too many rolls, I can only do five hundred at max.") + else: + for i in xrange(0,abs(i_arg1)): + if i_arg2 < 0: + dice = random.randint(i_arg2,0) + else: + dice = random.randint(1,i_arg2) + die.append(dice) + return(str(reduce(lambda x,y: x+y, die))) diff --git a/bot/D_help.py b/bot/D_help.py index ee4e2c07cf..d75ed94f5f 100644 --- a/bot/D_help.py +++ b/bot/D_help.py @@ -1,60 +1,60 @@ -#As new commands are added, update this. -# Last updated: 8.3.2011 - -# Updated 12.3.2011: -# - Added the missing help data for Version -# - Imported CORE_DATA to get the name. -# - Tidied some commands up a bit. -# - Replaced all "Bot"s with the Skibot's current name. - -from CORE_DATA import Name -everything = {"8ball":"[8ball ] Responds to the argument", - "allcaps":"[allcaps ] Takes an uppercase string and returns a capitalized version", - "bmaths":"[bmaths ] Takes a math equation (Like 5+5) and returns a binary result", - "coin":"[coin] Flips a coin", - "dance":"[dance] Makes %s do a little dance" %(Name), - "delquote":"(OP ONLY) [delquote ] Removes a quote with the filename equal to the argument", - "disable":"(OP ONLY) [disable] Disables all output from %s" %(Name), - "disable dance":"(HALFOP / OP ONLY) [disable dance] or [dd] Toggles dancing", - "disable fml":"(HALFOP / OP ONLY) [disable fml] Disables FML", - "eightball":"[eightball ] Responds to the argument", - "enable":"(OP ONLY) [enable] After being disabled, enable will turn output back on", - "enable fml":"{HALFOP / OP ONLY} [enable fml] After fml has been disabled, enable fml will make it available again", - "fml":"[fml] Returns a random Fuck My Life bit", - "give":"[give ] Gives the Pneumatic Disposal Unit the argument", - "help":"[help []] Returns the list of commands or a detailed description of a command if specified", - "hmaths":"[hmaths ] Takes a math equation (Like 5+5) and returns a hex result", - "makequote":"[makequote ] Creates a quote with arg being the quote itself", - "maths":"[maths ] Takes a math equation (Like 5+5) and returns a default result", - "note":"[note []] Opens a note if only arg1 is specified, Creates a note with the name of arg1 and contents of arg2 if arg2 is specified, if you prefix the note name with [CP], it creates a public note only to that channel. Which can be accessed by !note _", - "notes":"[notes] Displays all your saved notes on %s" %(Name), - "otherball":"[otherball] If Floorbot is on the same channel, %s will ask him a random question when this command is passed" %(Name), - "purgemessages":"[purgemessages] Used to delete all your Tell messages (%s,Tell )" %(Name), - "quote":"[quote []] Picks a random quote, if the author is specified, a random quote by that author", - "redmine":"[redmine] If you have a note called redmine, with a valid whoopshop redmine address, this displays all the bugs labeled as 'New' on that page. It also displays the todo note if it's found.", - "replace":"[replace] Fixes the Pneumatic Smasher if it's been broken", - "rot13":"[rot13 ] Encrypts the arg by using the rot13 method", - "rtd":"[rtd [d]] Rolls a six-sided dice if no arguments are specified, otherwise arg1 is the amount of rolls and arg2 is the amount of sides the dice have", - "sarcasticball":"[sarcasticball ] Responds to the argument sarcastically", - "sball":"[sball ] Responds to the argument sarcastically", - "srtd":"[srtd d] Rolls amount of sided die without showing the dice values separately", - "stop":"(RESTRICTED TO OP AND CREATOR) [stop] Stops %s, plain and simple" %(Name), - "suggest":"[suggest ] Saves a suggestion given to %s, to be later viewed by the creator" %(Name), - "take":"[take ] Takes an item specified in the argument from the Pneumatic Smasher", - "tban":"(OP ONLY) [tban ] When %s is an operator, You can ban an user for specified amount of seconds" %(Name), - "thm":"(RESTRICTED TO OP AND CREATOR) [thm] Normally in 8ball and sarcasticball, Users are not shown, instead replaced by things like demons or plasma researchers, toggling this changes that behaviour.", - "tm":"(OP AND CREATOR ONLY) [tm] Toggles marakov", - "togglequotemakers":"(OP ONLY) [togglequotemakers or tqm] Normally with the quote command, makers are not shown, this toggles that behaviour.", - "tqm":"(OP ONLY) [tqm or togglequotemakers] Normally with the quote command, makers are not shown, this toggles that behaviour.", - "toggleofflinemessages":"(OP ONLY) [toggleofflinemessages or tom] Allows an operator to toggle leaving Tell messages (%s, Tell ] Whenever the user says something in allcaps, it's capitalized.", - "uptime":"[uptime] Displays how long %s has been alive on the channel."%(Name), - "use":"[use] Uses the Pneumatic Smasher.", - "youtube":"[youtube ] Shows the title of a video by checking the URL provided.", - "version":"[version] Shows the current version of %s." %(Name), - "weather":"[weather ] Displays the current weather of the provided location.", - "life":"I cannot help you with that, sorry."} - +#As new commands are added, update this. +# Last updated: 8.3.2011 + +# Updated 12.3.2011: +# - Added the missing help data for Version +# - Imported CORE_DATA to get the name. +# - Tidied some commands up a bit. +# - Replaced all "Bot"s with the Skibot's current name. + +from CORE_DATA import Name +everything = {"8ball":"[8ball ] Responds to the argument", + "allcaps":"[allcaps ] Takes an uppercase string and returns a capitalized version", + "bmaths":"[bmaths ] Takes a math equation (Like 5+5) and returns a binary result", + "coin":"[coin] Flips a coin", + "dance":"[dance] Makes %s do a little dance" %(Name), + "delquote":"(OP ONLY) [delquote ] Removes a quote with the filename equal to the argument", + "disable":"(OP ONLY) [disable] Disables all output from %s" %(Name), + "disable dance":"(HALFOP / OP ONLY) [disable dance] or [dd] Toggles dancing", + "disable fml":"(HALFOP / OP ONLY) [disable fml] Disables FML", + "eightball":"[eightball ] Responds to the argument", + "enable":"(OP ONLY) [enable] After being disabled, enable will turn output back on", + "enable fml":"{HALFOP / OP ONLY} [enable fml] After fml has been disabled, enable fml will make it available again", + "fml":"[fml] Returns a random Fuck My Life bit", + "give":"[give ] Gives the Pneumatic Disposal Unit the argument", + "help":"[help []] Returns the list of commands or a detailed description of a command if specified", + "hmaths":"[hmaths ] Takes a math equation (Like 5+5) and returns a hex result", + "makequote":"[makequote ] Creates a quote with arg being the quote itself", + "maths":"[maths ] Takes a math equation (Like 5+5) and returns a default result", + "note":"[note []] Opens a note if only arg1 is specified, Creates a note with the name of arg1 and contents of arg2 if arg2 is specified, if you prefix the note name with [CP], it creates a public note only to that channel. Which can be accessed by !note _", + "notes":"[notes] Displays all your saved notes on %s" %(Name), + "otherball":"[otherball] If Floorbot is on the same channel, %s will ask him a random question when this command is passed" %(Name), + "purgemessages":"[purgemessages] Used to delete all your Tell messages (%s,Tell )" %(Name), + "quote":"[quote []] Picks a random quote, if the author is specified, a random quote by that author", + "redmine":"[redmine] If you have a note called redmine, with a valid whoopshop redmine address, this displays all the bugs labeled as 'New' on that page. It also displays the todo note if it's found.", + "replace":"[replace] Fixes the Pneumatic Smasher if it's been broken", + "rot13":"[rot13 ] Encrypts the arg by using the rot13 method", + "rtd":"[rtd [d]] Rolls a six-sided dice if no arguments are specified, otherwise arg1 is the amount of rolls and arg2 is the amount of sides the dice have", + "sarcasticball":"[sarcasticball ] Responds to the argument sarcastically", + "sball":"[sball ] Responds to the argument sarcastically", + "srtd":"[srtd d] Rolls amount of sided die without showing the dice values separately", + "stop":"(RESTRICTED TO OP AND CREATOR) [stop] Stops %s, plain and simple" %(Name), + "suggest":"[suggest ] Saves a suggestion given to %s, to be later viewed by the creator" %(Name), + "take":"[take ] Takes an item specified in the argument from the Pneumatic Smasher", + "tban":"(OP ONLY) [tban ] When %s is an operator, You can ban an user for specified amount of seconds" %(Name), + "thm":"(RESTRICTED TO OP AND CREATOR) [thm] Normally in 8ball and sarcasticball, Users are not shown, instead replaced by things like demons or plasma researchers, toggling this changes that behaviour.", + "tm":"(OP AND CREATOR ONLY) [tm] Toggles marakov", + "togglequotemakers":"(OP ONLY) [togglequotemakers or tqm] Normally with the quote command, makers are not shown, this toggles that behaviour.", + "tqm":"(OP ONLY) [tqm or togglequotemakers] Normally with the quote command, makers are not shown, this toggles that behaviour.", + "toggleofflinemessages":"(OP ONLY) [toggleofflinemessages or tom] Allows an operator to toggle leaving Tell messages (%s, Tell ] Whenever the user says something in allcaps, it's capitalized.", + "uptime":"[uptime] Displays how long %s has been alive on the channel."%(Name), + "use":"[use] Uses the Pneumatic Smasher.", + "youtube":"[youtube ] Shows the title of a video by checking the URL provided.", + "version":"[version] Shows the current version of %s." %(Name), + "weather":"[weather ] Displays the current weather of the provided location.", + "life":"I cannot help you with that, sorry."} + diff --git a/bot/FMLformatter.py b/bot/FMLformatter.py index 153af61a41..78649fe053 100644 --- a/bot/FMLformatter.py +++ b/bot/FMLformatter.py @@ -1,55 +1,55 @@ -from htmltagremove import htr -def formatter(data): - newdata = [] - data = htr(data) - bad = ["Your nick : Categories : ","\r","Advanced search - last", - "FMyLife","Get the guts to spill the beans","FML: Your random funny stories", - "Woman","Man","Choose","Health","Intimacy","Miscellaneous","Man or woman? ", - "Money","Kids","Work","Love","Email notification?", - "Moderate the FMLs","Submit your FML story", - "- If your story isn't published on the website, don't feel offended, and thank you nevertheless!", - "Pick a country","See all","Your account","Team's blog", - "Meet the FMLHello readers! Did you meet someone new this...The whole blog", - "Amazon","Borders","IndieBound","Personalized book","Terms of use", - "FML t-shirts -","Love - Money - Kids - Work - Health - Intimacy - Miscellaneous - Members", - "Follow the FML Follow the FML blog Follow the FML comments ", - "_qoptions={", - "};","})();","Categories","Sign up - Password? ", " Net Avenir : gestion publicitaire", - "FMyLife, the book","Available NOW on:","Barnes & Noble"] - - for checkable in data: - if checkable in bad: - pass - elif "_gaq.push" in checkable: - pass - elif "ga.src" in checkable: - pass - elif "var _gaq" in checkable: - pass - elif "var s =" in checkable: - pass - elif "var ga" in checkable: - pass - elif "function()" in checkable: - pass - elif "siteanalytics" in checkable: - pass - elif "qacct:" in checkable: - pass - elif "\r" in checkable: - pass - elif "ic_" in checkable: - pass - elif "Please note that spam and nonsensical stories" in checkable: - pass - elif "Refresh this page" in checkable: - pass - elif "You...The whole blo" in checkable: - pass - elif "Net Avenir : gestion publicitair" in checkable: - pass - else: - if "Net Avenir : gestion publicitaireClose the advertisement" in checkable: - checkable = checkable.replace("Net Avenir : gestion publicitaireClose the advertisement","") - newdata.append(checkable) - return newdata +from htmltagremove import htr +def formatter(data): + newdata = [] + data = htr(data) + bad = ["Your nick : Categories : ","\r","Advanced search - last", + "FMyLife","Get the guts to spill the beans","FML: Your random funny stories", + "Woman","Man","Choose","Health","Intimacy","Miscellaneous","Man or woman? ", + "Money","Kids","Work","Love","Email notification?", + "Moderate the FMLs","Submit your FML story", + "- If your story isn't published on the website, don't feel offended, and thank you nevertheless!", + "Pick a country","See all","Your account","Team's blog", + "Meet the FMLHello readers! Did you meet someone new this...The whole blog", + "Amazon","Borders","IndieBound","Personalized book","Terms of use", + "FML t-shirts -","Love - Money - Kids - Work - Health - Intimacy - Miscellaneous - Members", + "Follow the FML Follow the FML blog Follow the FML comments ", + "_qoptions={", + "};","})();","Categories","Sign up - Password? ", " Net Avenir : gestion publicitaire", + "FMyLife, the book","Available NOW on:","Barnes & Noble"] + + for checkable in data: + if checkable in bad: + pass + elif "_gaq.push" in checkable: + pass + elif "ga.src" in checkable: + pass + elif "var _gaq" in checkable: + pass + elif "var s =" in checkable: + pass + elif "var ga" in checkable: + pass + elif "function()" in checkable: + pass + elif "siteanalytics" in checkable: + pass + elif "qacct:" in checkable: + pass + elif "\r" in checkable: + pass + elif "ic_" in checkable: + pass + elif "Please note that spam and nonsensical stories" in checkable: + pass + elif "Refresh this page" in checkable: + pass + elif "You...The whole blo" in checkable: + pass + elif "Net Avenir : gestion publicitair" in checkable: + pass + else: + if "Net Avenir : gestion publicitaireClose the advertisement" in checkable: + checkable = checkable.replace("Net Avenir : gestion publicitaireClose the advertisement","") + newdata.append(checkable) + return newdata diff --git a/bot/Marakov/Marakov.Cache b/bot/Marakov/Marakov.Cache index 500f4384ed..9818ecc7ab 100644 --- a/bot/Marakov/Marakov.Cache +++ b/bot/Marakov/Marakov.Cache @@ -1,2450 +1,2450 @@ -(dp0 -S'all' -p1 -(lp2 -S':p' -p3 -aS'the' -p4 -asS'code' -p5 -(lp6 -S'in' -p7 -asS'stores' -p8 -(lp9 -S'that' -p10 -asS'just' -p11 -(lp12 -S'like' -p13 -aS'marakov' -p14 -aS'felt' -p15 -aS'gives' -p16 -aS'a' -p17 -aS'add' -p18 -aS'what' -p19 -asS'being' -p20 -(lp21 -S'goon' -p22 -aS'a' -p23 -asS'text' -p24 -(lp25 -S'string' -p26 -asS'dependant' -p27 -(lp28 -S'on' -p29 -asS'speedup' -p30 -(lp31 -S'at' -p32 -asS'felt' -p33 -(lp34 -S'like' -p35 -asS'installed' -p36 -(lp37 -S'tho' -p38 -asS'disabled' -p39 -(lp40 -S'it' -p41 -asS'timing' -p42 -(lp43 -S'when' -p44 -asS'psyco' -p45 -(lp46 -S'installed' -p47 -aS'is' -p48 -asS'stops' -p49 -(lp50 -S'timing' -p51 -asS'file' -p52 -(lp53 -S'too' -p54 -aS'that' -p55 -aS'where' -p56 -asS'go' -p57 -(lp58 -S'fuck' -p59 -aS'into' -p60 -aS'test' -p61 -asS'hell' -p62 -(lp63 -S'recreate' -p64 -asS'configurable' -p65 -(lp66 -S'greeting' -p67 -asS'bs12' -p68 -(lp69 -S'message' -p70 -asS'its' -p71 -(lp72 -S'fine' -p73 -aS'just' -p74 -aS'calculated' -p75 -aS'not' -p76 -aS'really' -p77 -aS'ridiculously' -p78 -aS'now' -p79 -aS'a' -p80 -aS'missing' -p81 -aS'for' -p82 -aS'false' -p83 -aS'on' -p84 -asS'before' -p85 -(lp86 -S'that' -p87 -asS'rp-heavy' -p88 -(lp89 -S'server' -p90 -asS'announcement' -p91 -(lp92 -S'like' -p93 -asS'now' -p94 -(lp95 -S'it' -p96 -aS'running' -p97 -aS'makie' -p98 -aS'i' -p99 -asS'nudge' -p100 -(lp101 -S'python' -p102 -aS'is' -p103 -asS'sourced' -p104 -(lp105 -S'under' -p106 -asS'title' -p107 -(lp108 -S'of' -p109 -asS'situations' -p110 -(lp111 -S'where' -p112 -asS'fine-tune' -p113 -(lp114 -S'it' -p115 -asS'enough' -p116 -(lp117 -S'to' -p118 -asS'send' -p119 -(lp120 -S'it' -p121 -aS'one' -p122 -asS'should' -p123 -(lp124 -S'be' -p125 -aS'learn' -p126 -aS'we' -p127 -asS'values' -p128 -(lp129 -S'dont' -p130 -asS'to' -p131 -(lp132 -S'edit' -p133 -aS'back' -p134 -aS'know' -p135 -aS'care' -p136 -aS'be' -p137 -aS'configure' -p138 -aS'the' -p139 -aS'null' -p140 -aS'phone' -p141 -aS'welcome' -p142 -aS'reverse' -p143 -aS'send' -p144 -aS'reg' -p145 -aS'point' -p146 -aS'automatically' -p147 -aS'work' -p148 -aS'waste' -p149 -aS'marshmallow' -p150 -aS'queries' -p151 -aS'+o' -p152 -aS'disable' -p153 -asS'jit' -p154 -(lp155 -S'compiler' -p156 -asS'going' -p157 -(lp158 -S'to' -p159 -asS'helps' -p160 -(lp161 -S'me' -p162 -asS'messes' -p163 -(lp164 -S'it' -p165 -asS'indeed' -p166 -(lp167 -S'it' -p168 -asS'tg' -p169 -(lp170 -S'and' -p171 -asS'has' -p172 -(lp173 -S'been' -p174 -aS'my' -p175 -asS'into' -p176 -(lp177 -S'#tgstation13' -p178 -asS'ridiculously' -p179 -(lp180 -S'simple' -p181 -asS'annoy' -p182 -(lp183 -S'downstream' -p184 -asS'them' -p185 -(lp186 -S'out' -p187 -asS'someone' -p188 -(lp189 -S'adminhelps' -p190 -asS'sense' -p191 -(lp192 -S'i' -p193 -asS'string' -p194 -(lp195 -S'called' -p196 -asS'get' -p197 -(lp198 -S'ready' -p199 -asS'python' -p200 -(lp201 -S'script' -p202 -aS'so' -p203 -aS'code' -p204 -aS'scripts' -p205 -aS'and' -p206 -aS'but' -p207 -aS'now' -p208 -aS'released' -p209 -aS'is' -p210 -aS'enough' -p211 -asS'goon' -p212 -(lp213 -S'tg' -p214 -asS'showing' -p215 -(lp216 -S'up' -p217 -asS'20ish' -p218 -(lp219 -S'line' -p220 -asS'gonna' -p221 -(lp222 -S'go' -p223 -asS'made' -p224 -(lp225 -S'doctors' -p226 -asS'every' -p227 -(lp228 -S'loop' -p229 -aS'time' -p230 -asS'know' -p231 -(lp232 -S'the' -p233 -aS'why' -p234 -aS'that' -p235 -asS'not' -p236 -(lp237 -S'just' -p238 -aS'necessary' -p239 -aS'to' -p240 -aS'so' -p241 -aS'need' -p242 -aS'sure' -p243 -aS'relaying' -p244 -aS'very' -p245 -aS'even' -p246 -asS'2' -p247 -(lp248 -S'loop' -p249 -asS'password' -p250 -(lp251 -S'var' -p252 -asS'day' -p253 -(lp254 -S'so' -p255 -asS'swapping' -p256 -(lp257 -S'to' -p258 -asS'easily' -p259 -(lp260 -S'editable' -p261 -asS'necessary' -p262 -(lp263 -S'at' -p264 -asS'like' -p265 -(lp266 -S'being' -p267 -aS'linking' -p268 -aS'to' -p269 -aS'how' -p270 -aS'it' -p271 -aS'skbzzzzzibi' -p272 -asS'course' -p273 -(lp274 -S'that' -p275 -asS'edit' -p276 -(lp277 -S'baystation' -p278 -asS'fully' -p279 -(lp280 -S'open' -p281 -asS'greeting' -p282 -(lp283 -S'message' -p284 -asS'server' -p285 -(lp286 -S'basically' -p287 -aS'' -p288 -asS'default' -p289 -(lp290 -S'config' -p291 -asS'bad' -p292 -(lp293 -S'company' -p294 -asS'channel' -p295 -(lp296 -S'or' -p297 -asS'always' -p298 -(lp299 -S'makes' -p300 -asS'went' -p301 -(lp302 -S'past' -p303 -asS'quarxink' -p304 -(lp305 -S'its' -p306 -asS'automatic' -p307 -(lp308 -S'announcement' -p309 -asS'once' -p310 -(lp311 -S'per' -p312 -asS'wrote' -p313 -(lp314 -S'most' -p315 -asS'pain' -p316 -(lp317 -S'on' -p318 -asS'system' -p319 -(lp320 -S'calls' -p321 -asS'right' -p322 -(lp323 -S'brb' -p324 -asS'decides' -p325 -(lp326 -S'not' -p327 -asS'people' -p328 -(lp329 -S'say' -p330 -aS'i' -p331 -aS'he' -p332 -asS'goddamn' -p333 -(lp334 -S'python' -p335 -asS'back' -p336 -(lp337 -S'it' -p338 -asS'used' -p339 -(lp340 -S'to' -p341 -aS'for' -p342 -asS'past' -p343 -(lp344 -S'too' -p345 -asS'cost' -p346 -(lp347 -S'of' -p348 -asS'learn' -p349 -(lp350 -S'python' -p351 -asS'are' -p352 -(lp353 -S'lawyers' -p354 -aS'actually' -p355 -aS'configurable' -p356 -aS'we' -p357 -asS'celestialike' -p358 -(lp359 -S'of' -p360 -asS'lawyers' -p361 -(lp362 -S'for' -p363 -asS'time' -p364 -(lp365 -S'he' -p366 -asS'out' -p367 -(lp368 -S'switch' -p369 -aS'slowdowns' -p370 -aS'that' -p371 -aS'why' -p372 -aS'nudge' -p373 -asS'even' -p374 -(lp375 -S'an' -p376 -asS'what' -p377 -(lp378 -S'the' -p379 -aS'is' -p380 -aS'these' -p381 -aS'was' -p382 -aS'license' -p383 -aS'about' -p384 -aS'i' -p385 -asS'said' -p386 -(lp387 -S'in' -p388 -asS'sayt' -p389 -(lp390 -S'hat' -p391 -asS'for' -p392 -(lp393 -S'that' -p394 -aS'every' -p395 -aS'the' -p396 -aS'quarx' -p397 -aS'cc_nanotrasen' -p398 -aS'homoerotic' -p399 -aS'situations' -p400 -aS'good' -p401 -asS'#tgstation13' -p402 -(lp403 -S'and' -p404 -asS'per' -p405 -(lp406 -S'name' -p407 -asS'whole' -p408 -(lp409 -S'config' -p410 -asS'state' -p411 -(lp412 -S'the' -p413 -asS'does' -p414 -(lp415 -S'the' -p416 -aS'it' -p417 -asS'goes' -p418 -(lp419 -S'on' -p420 -asS'readme' -p421 -(lp422 -S'too' -p423 -asS'new' -p424 -(lp425 -S'bot' -p426 -aS'person' -p427 -asS'learned' -p428 -(lp429 -S'python' -p430 -asS'irc' -p431 -(lp432 -S'bot' -p433 -asS'reg' -p434 -(lp435 -S'it' -p436 -asS'blow' -p437 -(lp438 -S'borgs' -p439 -asS'shut' -p440 -(lp441 -S'down' -p442 -asS'after' -p443 -(lp444 -S'an' -p445 -aS'a' -p446 -asS'ill' -p447 -(lp448 -S'switch' -p449 -asS'says' -p450 -(lp451 -S'someones' -p452 -asS'queries' -p453 -(lp454 -S'again' -p455 -asS'technocracy' -p456 -(lp457 -S'and' -p458 -asS'we' -p459 -(lp460 -S'go' -p461 -aS'do' -p462 -aS'totally' -p463 -aS'going' -p464 -aS'expect' -p465 -aS'just' -p466 -aS'dont' -p467 -aS'have' -p468 -asS'put' -p469 -(lp470 -S'all' -p471 -asS'from' -p472 -(lp473 -S'the' -p474 -asS'data11lower' -p475 -(lp476 -S'==' -p477 -asS'configuration' -p478 -(lp479 -S'for' -p480 -asS'wait' -p481 -(lp482 -S'what' -p483 -asS'on' -p484 -(lp485 -S'my' -p486 -aS'the' -p487 -aS'a' -p488 -aS'connect' -p489 -aS'svn' -p490 -aS'one' -p491 -aS'/' -p492 -asS'about' -p493 -(lp494 -S'system' -p495 -asS'ok' -p496 -(lp497 -S'thats' -p498 -asS'reverse' -p499 -(lp500 -S'engineer' -p501 -asS'license' -p502 -(lp503 -S'is' -p504 -asS'oh' -p505 -(lp506 -S'okay' -p507 -aS'ok' -p508 -aS'i' -p509 -aS'wait' -p510 -asS'starts' -p511 -(lp512 -S'timing' -p513 -asS'could' -p514 -(lp515 -S'learn' -p516 -asS'larger' -p517 -(lp518 -S'ram' -p519 -asS'bot' -p520 -(lp521 -S'is' -p522 -aS'have' -p523 -aS'shut' -p524 -aS'uses' -p525 -asS'running' -p526 -(lp527 -S'it' -p528 -aS'the' -p529 -aS'on' -p530 -asS'times' -p531 -(lp532 -S'on' -p533 -aS'reported' -p534 -aS'went' -p535 -asS'where' -p536 -(lp537 -S'he' -p538 -asS'heck' -p539 -(lp540 -S':d' -p541 -asS'idk' -p542 -(lp543 -S'magic' -p544 -asS'receives' -p545 -(lp546 -S'a' -p547 -asS'bots' -p548 -(lp549 -S'showing' -p550 -asS'slightly' -p551 -(lp552 -S'larger' -p553 -asS'or' -p554 -(lp555 -S'know' -p556 -aS'what' -p557 -aS'work' -p558 -aS'should' -p559 -aS'data11lower' -p560 -asS'automatically' -p561 -(lp562 -S'state' -p563 -asS'thats' -p564 -(lp565 -S'not' -p566 -aS'the' -p567 -aS'kind' -p568 -asS'ugh' -p569 -(lp570 -S'fuck' -p571 -asS'major' -p572 -(lp573 -S'ss13' -p574 -aS'three' -p575 -asS'py' -p576 -(lp577 -S'file' -p578 -asS'soss' -p579 -(lp580 -S'server' -p581 -asS'dont' -p582 -(lp583 -S'need' -p584 -aS'have' -p585 -aS'send' -p586 -aS'want' -p587 -aS'speak' -p588 -asS'hostmask' -p589 -(lp590 -S'combination' -p591 -asS'point' -p592 -(lp593 -S'out' -p594 -aS'has' -p595 -asS'simple' -p596 -(lp597 -S'to' -p598 -asS'miura' -p599 -(lp600 -S'doesnt' -p601 -asS'variables' -p602 -(lp603 -S'in' -p604 -asS'recreate' -p605 -(lp606 -S'it' -p607 -asS'welcome' -p608 -(lp609 -S'to' -p610 -asS'linking' -p611 -(lp612 -S'them' -p613 -asS'down' -p614 -(lp615 -S'when' -p616 -asS'why' -p617 -(lp618 -S'its' -p619 -aS'it' -p620 -aS'is' -p621 -asS'doesnt' -p622 -(lp623 -S'play' -p624 -aS'call' -p625 -asS'marakov' -p626 -(lp627 -S'loops' -p628 -aS'helps' -p629 -asS'laugh' -p630 -(lp631 -S'when' -p632 -asS'pony' -p633 -(lp634 -S'asshole' -p635 -asS'message' -p636 -(lp637 -S'has' -p638 -aS'should' -p639 -asS'open' -p640 -(lp641 -S'sourced' -p642 -aS'source' -p643 -asS'brb' -p644 -(lp645 -S'swapping' -p646 -asS'speak' -p647 -(lp648 -S'python' -p649 -asS'pastebin' -p650 -(lp651 -S'the' -p652 -asS'line' -p653 -(lp654 -S'core' -p655 -aS'on' -p656 -asS'three' -p657 -(lp658 -S'being' -p659 -asS'yay' -p660 -(lp661 -S'it' -p662 -asS'meatbag' -p663 -(lp664 -S'when' -p665 -asS'would' -p666 -(lp667 -S'be' -p668 -aS'expect' -p669 -asS'script' -p670 -(lp671 -S'that' -p672 -asS'illegal' -p673 -(lp674 -S'ban' -p675 -asS'there' -p676 -(lp677 -S'are' -p678 -aS'we' -p679 -asS'add' -p680 -(lp681 -S'that' -p682 -aS'a' -p683 -asS'been' -p684 -(lp685 -S'processed' -p686 -asS'name' -p687 -(lp688 -S'/' -p689 -aS'when' -p690 -asS'ai' -p691 -(lp692 -S'malf' -p693 -asS'marshmallow' -p694 -(lp695 -S'pony' -p696 -asS'of' -p697 -(lp698 -S'the' -p699 -aS'ss13' -p700 -aS'tgstation13' -p701 -aS'a' -p702 -aS'course' -p703 -aS'it' -p704 -aS'soss' -p705 -aS'annoying' -p706 -aS'any' -p707 -aS'me' -p708 -aS'cap' -p709 -aS'technocracy' -p710 -asS'call' -p711 -(lp712 -S'me' -p713 -asS'too' -p714 -(lp715 -S':' -p716 -aS'fast' -p717 -asS'basic' -p718 -(lp719 -S'configuration' -p720 -asS'var' -p721 -(lp722 -S'and' -p723 -asS'calc' -p724 -(lp725 -S'times' -p726 -asS'was' -p727 -(lp728 -S'going' -p729 -aS'it' -p730 -aS'that' -p731 -aS'not' -p732 -aS'intended' -p733 -asS'tell' -p734 -(lp735 -S'people' -p736 -asS'500' -p737 -(lp738 -S'chance' -p739 -asS'gives' -p740 -(lp741 -S'a' -p742 -asS'sort' -p743 -(lp744 -S'of' -p745 -asS'svn' -p746 -(lp747 -S'size' -p748 -asS'only' -p749 -(lp750 -S'does' -p751 -aS'2' -p752 -asS'10-30%' -p753 -(lp754 -S'speedup' -p755 -asS'knows' -p756 -(lp757 -S'about' -p758 -asS'webpage' -p759 -(lp760 -S'title' -p761 -asS'that' -p762 -(lp763 -S'makes' -p764 -aS'would' -p765 -aS'the' -p766 -aS'needs' -p767 -aS'to' -p768 -aS'at' -p769 -aS'for' -p770 -aS'was' -p771 -aS'data' -p772 -asS'company' -p773 -(lp774 -S'2' -p775 -asS'under' -p776 -(lp777 -S'cc-by-sa' -p778 -asS'editable' -p779 -(lp780 -S'config' -p781 -asS'but' -p782 -(lp783 -S'of' -p784 -asS'idea' -p785 -(lp786 -S'what' -p787 -asS'released' -p788 -(lp789 -S'under' -p790 -asS'part' -p791 -(lp792 -S'before' -p793 -asS'link' -p794 -(lp795 -S'said' -p796 -aS'to' -p797 -asS'basically' -p798 -(lp799 -S'it' -p800 -asS'doctors' -p801 -(lp802 -S'useless' -p803 -asS'==' -p804 -(lp805 -S'channel' -p806 -aS'channel1::' -p807 -asS'be' -p808 -(lp809 -S'an' -p810 -aS'called' -p811 -aS'a' -p812 -aS'in' -p813 -aS'running' -p814 -aS'used' -p815 -asS'editing' -p816 -(lp817 -S'goddamn' -p818 -asS'with' -p819 -(lp820 -S'the' -p821 -aS'easily' -p822 -aS'adminhelps' -p823 -aS'my' -p824 -aS'a' -p825 -asS'those' -p826 -(lp827 -S'are' -p828 -asS'he' -p829 -(lp830 -S'put' -p831 -aS'disabled' -p832 -aS'is' -p833 -aS'keeps' -p834 -aS'knows' -p835 -aS'stores' -p836 -aS'notices' -p837 -aS'only' -p838 -aS'doesnt' -p839 -aS'receives' -p840 -aS'says' -p841 -aS'messes' -p842 -asS'me' -p843 -(lp844 -S'figure' -p845 -aS'laugh' -p846 -aS'to' -p847 -aS'meatbag' -p848 -asS'also' -p849 -(lp850 -S'i' -p851 -aS'we' -p852 -aS'now' -p853 -asS'kind' -p854 -(lp855 -S'of' -p856 -asS'main' -p857 -(lp858 -S'bot' -p859 -asS'/' -p860 -(lp861 -S'hostmask' -p862 -aS'off' -p863 -asS'full' -p864 -(lp865 -S'of' -p866 -asS'these' -p867 -(lp868 -S'are' -p869 -asS'makie' -p870 -(lp871 -S'it' -p872 -asS'sleepers' -p873 -(lp874 -S'made' -p875 -asS'up' -p876 -(lp877 -S'elsewhere' -p878 -aS'me' -p879 -aS'a' -p880 -asS'will' -p881 -(lp882 -S'annoy' -p883 -asS'computer' -p884 -(lp885 -S'explodd' -p886 -asS'limit' -p887 -(lp888 -S'on' -p889 -asS'can' -p890 -(lp891 -S'fine-tune' -p892 -aS'add' -p893 -aS'i' -p894 -aS'we' -p895 -asS'how' -p896 -(lp897 -S'its' -p898 -aS'he' -p899 -asS'were' -p900 -(lp901 -S'the' -p902 -asS'malf' -p903 -(lp904 -S'blow' -p905 -asS'baystation' -p906 -(lp907 -S'12' -p908 -asS'other' -p909 -(lp910 -S'loop' -p911 -asS'my' -p912 -(lp913 -S'end' -p914 -aS'computer' -p915 -aS'code' -p916 -asS'called' -p917 -(lp918 -S'as' -p919 -aS'when' -p920 -asS'loop' -p921 -(lp922 -S'times' -p923 -asS'expect' -p924 -(lp925 -S'it' -p926 -asS'and' -p927 -(lp928 -S'bs12' -p929 -aS'stops' -p930 -aS'i' -p931 -aS'do' -p932 -aS'to' -p933 -aS'make' -p934 -aS'he' -p935 -aS'preferably' -p936 -aS'thats' -p937 -aS'sayt' -p938 -aS'fascism' -p939 -asS'dedicated' -p940 -(lp941 -S'solely' -p942 -asS'changed' -p943 -(lp944 -S'it' -p945 -asS'sees' -p946 -(lp947 -S'a' -p948 -asS'relaying' -p949 -(lp950 -S'adminhelps' -p951 -asS'figure' -p952 -(lp953 -S'out' -p954 -asS'do' -p955 -(lp956 -S'not' -p957 -aS'it' -p958 -aS'seem' -p959 -asS'ran' -p960 -(lp961 -S'the' -p962 -asS'ah' -p963 -(lp964 -S'running' -p965 -aS'ok' -p966 -asS'is' -p967 -(lp968 -S'baystation' -p969 -aS'a' -p970 -aS'that' -p971 -aS'it' -p972 -aS'coded' -p973 -aS'python' -p974 -aS'open' -p975 -aS'dependant' -p976 -aS'so' -p977 -aS'apparently' -p978 -asS'ram' -p979 -(lp980 -S'footprint' -p981 -asS'am' -p982 -(lp983 -S'the' -p984 -asS'it' -p985 -(lp986 -S'up' -p987 -aS'starts' -p988 -aS'receives' -p989 -aS'just' -p990 -aS'expires' -p991 -aS'works' -p992 -aS'always' -p993 -aS'decides' -p994 -aS'on' -p995 -aS'here' -p996 -aS'used' -p997 -aS'to' -p998 -aS'those' -p999 -aS'sees' -p1000 -aS'does' -p1001 -aS'myself' -p1002 -aS'a' -p1003 -aS'okay' -p1004 -aS'was' -p1005 -aS'go' -p1006 -aS'if' -p1007 -aS'once' -p1008 -aS'is' -p1009 -aS'for' -p1010 -asS'an' -p1011 -(lp1012 -S'hour' -p1013 -aS'illegal' -p1014 -aS'automatic' -p1015 -aS'error' -p1016 -asS'ready' -p1017 -(lp1018 -S'for' -p1019 -asS'say' -p1020 -(lp1021 -S'sleepers' -p1022 -aS'ai' -p1023 -aS'that*' -p1024 -aS'stop' -p1025 -asS'good' -p1026 -(lp1027 -S':p' -p1028 -asS'im' -p1029 -(lp1030 -S'not' -p1031 -aS'sorry' -p1032 -aS'lazy' -p1033 -asS'at' -p1034 -(lp1035 -S'all' -p1036 -aS'the' -p1037 -aS'no' -p1038 -asS'have' -p1039 -(lp1040 -S'no' -p1041 -aS'psyco' -p1042 -aS'the' -p1043 -aS'a' -p1044 -asS'in' -p1045 -(lp1046 -S'python' -p1047 -aS'a' -p1048 -aS'the' -p1049 -aS'100' -p1050 -asS'need' -p1051 -(lp1052 -S'to' -p1053 -aS'six' -p1054 -asS'politics' -p1055 -(lp1056 -S'of' -p1057 -asS'seem' -p1058 -(lp1059 -S'familiar' -p1060 -asS'work' -p1061 -(lp1062 -S'with' -p1063 -asS'apparently' -p1064 -(lp1065 -S'homophobic' -p1066 -aS'i' -p1067 -asS'any' -p1068 -(lp1069 -S'link' -p1070 -asS'as' -p1071 -(lp1072 -S'well' -p1073 -aS'variables' -p1074 -asS'sci-fi' -p1075 -(lp1076 -S'with' -p1077 -asS'preferably' -p1078 -(lp1079 -S'python' -p1080 -asS'really' -p1081 -(lp1082 -S'simple' -p1083 -aS'now' -p1084 -asS'needs' -p1085 -(lp1086 -S'to' -p1087 -aS'a' -p1088 -asS'null' -p1089 -(lp1090 -S'them' -p1091 -asS'because' -p1092 -(lp1093 -S'we' -p1094 -asS'want' -p1095 -(lp1096 -S'to' -p1097 -asS'no' -p1098 -(lp1099 -S'pain' -p1100 -aS'idea' -p1101 -aS'point' -p1102 -aS'the' -p1103 -asS'solely' -p1104 -(lp1105 -S'to' -p1106 -asS'nah' -p1107 -(lp1108 -S'its' -p1109 -aS'ill' -p1110 -asS'dunno' -p1111 -(lp1112 -S'is' -p1113 -asS'when' -p1114 -(lp1115 -S'it' -p1116 -aS'the' -p1117 -aS'people' -p1118 -aS'i' -p1119 -aS'can' -p1120 -aS'someone' -p1121 -aS'its' -p1122 -asS'same' -p1123 -(lp1124 -S'file' -p1125 -asS'id' -p1126 -(lp1127 -S'like' -p1128 -asS'note' -p1129 -(lp1130 -S'how' -p1131 -asS'figuring' -p1132 -(lp1133 -S'out' -p1134 -asS'bah' -p1135 -(lp1136 -S'apparently' -p1137 -asS'coded' -p1138 -(lp1139 -S'in' -p1140 -asS'take' -p1141 -(lp1142 -S'it' -p1143 -asS'hop' -p1144 -(lp1145 -S'to' -p1146 -asS'familiar' -p1147 -(lp1148 -S'message' -p1149 -asS'test' -p1150 -(lp1151 -S'server' -p1152 -aS'bots' -p1153 -aS'bad' -p1154 -asS'asshole' -p1155 -(lp1156 -g288 -asS'if' -p1157 -(lp1158 -S'it' -p1159 -aS'its' -p1160 -aS'data11lower' -p1161 -aS'he' -p1162 -asS'config' -p1163 -(lp1164 -S'file' -p1165 -aS'values' -p1166 -asS'homophobic' -p1167 -(lp1168 -S'as' -p1169 -asS'dose' -p1170 -(lp1171 -S'of' -p1172 -asS'play' -p1173 -(lp1174 -S'ss13' -p1175 -asS'sure' -p1176 -(lp1177 -S'the' -p1178 -aS'if' -p1179 -asS'okay' -p1180 -(lp1181 -S'desu' -p1182 -aS'cool' -p1183 -aS'cc' -p1184 -asS'intended' -p1185 -(lp1186 -S'to' -p1187 -asS'one' -p1188 -(lp1189 -S'of' -p1190 -aS'line' -p1191 -aS'in' -p1192 -asS'neat' -p1193 -(lp1194 -S'is' -p1195 -asS'adminhelps' -p1196 -(lp1197 -S'from' -p1198 -aS'with' -p1199 -asS'expires' -p1200 -(lp1201 -S'after' -p1202 -asS'chance' -p1203 -(lp1204 -S'every' -p1205 -asS'most' -p1206 -(lp1207 -S'of' -p1208 -asS'fascism' -p1209 -(lp1210 -g288 -asS'disable' -p1211 -(lp1212 -S'it' -p1213 -asS'connected' -p1214 -(lp1215 -S'businessman' -p1216 -asS'never' -p1217 -(lp1218 -S'learned' -p1219 -asS'scripts' -p1220 -(lp1221 -S'will' -p1222 -asS'along' -p1223 -(lp1224 -S'with' -p1225 -asS'waste' -p1226 -(lp1227 -S'space' -p1228 -asS'ss13' -p1229 -(lp1230 -S'servers' -p1231 -asS'cap' -p1232 -(lp1233 -S'troopers' -p1234 -asS'totally' -p1235 -(lp1236 -S'need' -p1237 -asS'six' -p1238 -(lp1239 -S'test' -p1240 -asS'a' -p1241 -(lp1242 -S'businessman' -p1243 -aS'message' -p1244 -aS'jit' -p1245 -aS'10-30%' -p1246 -aS'slightly' -p1247 -aS'day' -p1248 -aS'test' -p1249 -aS'config' -p1250 -aS'20ish' -p1251 -aS'bs12' -p1252 -aS'text' -p1253 -aS'new' -p1254 -aS'password' -p1255 -aS'vhost' -p1256 -aS'configurable' -p1257 -aS'link' -p1258 -aS'limit' -p1259 -aS'file' -p1260 -aS'dose' -p1261 -aS'500' -p1262 -aS'bit' -p1263 -asS'ofc' -p1264 -(lp1265 -S'i' -p1266 -asS'off' -p1267 -(lp1268 -S'of' -p1269 -asS'calls' -p1270 -(lp1271 -S'external' -p1272 -asS'i' -p1273 -(lp1274 -S'need' -p1275 -aS'can' -p1276 -aS'dont' -p1277 -aS'am' -p1278 -aS'guess' -p1279 -aS'see' -p1280 -aS'have' -p1281 -aS'just' -p1282 -aS'dunno' -p1283 -aS'wrote' -p1284 -aS'know' -p1285 -aS'was' -p1286 -aS'changed' -p1287 -aS'take' -p1288 -aS'could' -p1289 -aS'never' -p1290 -aS'should' -p1291 -aS'say' -p1292 -aS'tell' -p1293 -aS'code' -p1294 -aS'would' -p1295 -aS'like' -p1296 -aS'disabled' -p1297 -asS'makes' -p1298 -(lp1299 -S'sense' -p1300 -aS'me' -p1301 -asS'calculated' -p1302 -(lp1303 -S'for' -p1304 -asS'afk' -p1305 -(lp1306 -S'vidya' -p1307 -asS'well' -p1308 -(lp1309 -S'connected' -p1310 -asS'data' -p1311 -(lp1312 -S'in' -p1313 -asS'homoerotic' -p1314 -(lp1315 -S'sci-fi' -p1316 -asS'switch' -p1317 -(lp1318 -S'after' -p1319 -aS'goes' -p1320 -asS'so' -p1321 -(lp1322 -S'i' -p1323 -aS'uh' -p1324 -aS':p' -p1325 -aS'bad' -p1326 -aS'sly' -p1327 -asS'someones' -p1328 -(lp1329 -S'name' -p1330 -asS'keeps' -p1331 -(lp1332 -S'all' -p1333 -asS'very' -p1334 -(lp1335 -S'celestialike' -p1336 -asS'businessman' -p1337 -(lp1338 -S'of' -p1339 -ag288 -asS'the' -p1340 -(lp1341 -S'heck' -p1342 -aS'major' -p1343 -aS'well' -p1344 -aS'politics' -p1345 -aS'rp-heavy' -p1346 -aS'marakov' -p1347 -aS'law' -p1348 -aS'message' -p1349 -aS'cost' -p1350 -aS'new' -p1351 -aS'nudge' -p1352 -aS'bot' -p1353 -aS'python' -p1354 -aS'basic' -p1355 -aS'whole' -p1356 -aS'configuration' -p1357 -aS'irc' -p1358 -aS'readme' -p1359 -aS'default' -p1360 -aS'conspiracy' -p1361 -aS'config' -p1362 -aS'webpage' -p1363 -aS'channel' -p1364 -aS'server' -p1365 -aS'download' -p1366 -aS'main' -p1367 -aS'dmb' -p1368 -aS'part' -p1369 -aS'people' -p1370 -aS'same' -p1371 -aS'hell' -p1372 -aS'other' -p1373 -aS'switch' -p1374 -asS'12' -p1375 -(lp1376 -S'out' -p1377 -aS'anyway' -p1378 -asS'core' -p1379 -(lp1380 -S'py' -p1381 -asS'make' -p1382 -(lp1383 -S'sure' -p1384 -aS'the' -p1385 -asS'turns' -p1386 -(lp1387 -S'out' -p1388 -asS'external' -p1389 -(lp1390 -S'apps' -p1391 +(dp0 +S'all' +p1 +(lp2 +S':p' +p3 +aS'the' +p4 +asS'code' +p5 +(lp6 +S'in' +p7 +asS'stores' +p8 +(lp9 +S'that' +p10 +asS'just' +p11 +(lp12 +S'like' +p13 +aS'marakov' +p14 +aS'felt' +p15 +aS'gives' +p16 +aS'a' +p17 +aS'add' +p18 +aS'what' +p19 +asS'being' +p20 +(lp21 +S'goon' +p22 +aS'a' +p23 +asS'text' +p24 +(lp25 +S'string' +p26 +asS'dependant' +p27 +(lp28 +S'on' +p29 +asS'speedup' +p30 +(lp31 +S'at' +p32 +asS'felt' +p33 +(lp34 +S'like' +p35 +asS'installed' +p36 +(lp37 +S'tho' +p38 +asS'disabled' +p39 +(lp40 +S'it' +p41 +asS'timing' +p42 +(lp43 +S'when' +p44 +asS'psyco' +p45 +(lp46 +S'installed' +p47 +aS'is' +p48 +asS'stops' +p49 +(lp50 +S'timing' +p51 +asS'file' +p52 +(lp53 +S'too' +p54 +aS'that' +p55 +aS'where' +p56 +asS'go' +p57 +(lp58 +S'fuck' +p59 +aS'into' +p60 +aS'test' +p61 +asS'hell' +p62 +(lp63 +S'recreate' +p64 +asS'configurable' +p65 +(lp66 +S'greeting' +p67 +asS'bs12' +p68 +(lp69 +S'message' +p70 +asS'its' +p71 +(lp72 +S'fine' +p73 +aS'just' +p74 +aS'calculated' +p75 +aS'not' +p76 +aS'really' +p77 +aS'ridiculously' +p78 +aS'now' +p79 +aS'a' +p80 +aS'missing' +p81 +aS'for' +p82 +aS'false' +p83 +aS'on' +p84 +asS'before' +p85 +(lp86 +S'that' +p87 +asS'rp-heavy' +p88 +(lp89 +S'server' +p90 +asS'announcement' +p91 +(lp92 +S'like' +p93 +asS'now' +p94 +(lp95 +S'it' +p96 +aS'running' +p97 +aS'makie' +p98 +aS'i' +p99 +asS'nudge' +p100 +(lp101 +S'python' +p102 +aS'is' +p103 +asS'sourced' +p104 +(lp105 +S'under' +p106 +asS'title' +p107 +(lp108 +S'of' +p109 +asS'situations' +p110 +(lp111 +S'where' +p112 +asS'fine-tune' +p113 +(lp114 +S'it' +p115 +asS'enough' +p116 +(lp117 +S'to' +p118 +asS'send' +p119 +(lp120 +S'it' +p121 +aS'one' +p122 +asS'should' +p123 +(lp124 +S'be' +p125 +aS'learn' +p126 +aS'we' +p127 +asS'values' +p128 +(lp129 +S'dont' +p130 +asS'to' +p131 +(lp132 +S'edit' +p133 +aS'back' +p134 +aS'know' +p135 +aS'care' +p136 +aS'be' +p137 +aS'configure' +p138 +aS'the' +p139 +aS'null' +p140 +aS'phone' +p141 +aS'welcome' +p142 +aS'reverse' +p143 +aS'send' +p144 +aS'reg' +p145 +aS'point' +p146 +aS'automatically' +p147 +aS'work' +p148 +aS'waste' +p149 +aS'marshmallow' +p150 +aS'queries' +p151 +aS'+o' +p152 +aS'disable' +p153 +asS'jit' +p154 +(lp155 +S'compiler' +p156 +asS'going' +p157 +(lp158 +S'to' +p159 +asS'helps' +p160 +(lp161 +S'me' +p162 +asS'messes' +p163 +(lp164 +S'it' +p165 +asS'indeed' +p166 +(lp167 +S'it' +p168 +asS'tg' +p169 +(lp170 +S'and' +p171 +asS'has' +p172 +(lp173 +S'been' +p174 +aS'my' +p175 +asS'into' +p176 +(lp177 +S'#tgstation13' +p178 +asS'ridiculously' +p179 +(lp180 +S'simple' +p181 +asS'annoy' +p182 +(lp183 +S'downstream' +p184 +asS'them' +p185 +(lp186 +S'out' +p187 +asS'someone' +p188 +(lp189 +S'adminhelps' +p190 +asS'sense' +p191 +(lp192 +S'i' +p193 +asS'string' +p194 +(lp195 +S'called' +p196 +asS'get' +p197 +(lp198 +S'ready' +p199 +asS'python' +p200 +(lp201 +S'script' +p202 +aS'so' +p203 +aS'code' +p204 +aS'scripts' +p205 +aS'and' +p206 +aS'but' +p207 +aS'now' +p208 +aS'released' +p209 +aS'is' +p210 +aS'enough' +p211 +asS'goon' +p212 +(lp213 +S'tg' +p214 +asS'showing' +p215 +(lp216 +S'up' +p217 +asS'20ish' +p218 +(lp219 +S'line' +p220 +asS'gonna' +p221 +(lp222 +S'go' +p223 +asS'made' +p224 +(lp225 +S'doctors' +p226 +asS'every' +p227 +(lp228 +S'loop' +p229 +aS'time' +p230 +asS'know' +p231 +(lp232 +S'the' +p233 +aS'why' +p234 +aS'that' +p235 +asS'not' +p236 +(lp237 +S'just' +p238 +aS'necessary' +p239 +aS'to' +p240 +aS'so' +p241 +aS'need' +p242 +aS'sure' +p243 +aS'relaying' +p244 +aS'very' +p245 +aS'even' +p246 +asS'2' +p247 +(lp248 +S'loop' +p249 +asS'password' +p250 +(lp251 +S'var' +p252 +asS'day' +p253 +(lp254 +S'so' +p255 +asS'swapping' +p256 +(lp257 +S'to' +p258 +asS'easily' +p259 +(lp260 +S'editable' +p261 +asS'necessary' +p262 +(lp263 +S'at' +p264 +asS'like' +p265 +(lp266 +S'being' +p267 +aS'linking' +p268 +aS'to' +p269 +aS'how' +p270 +aS'it' +p271 +aS'skbzzzzzibi' +p272 +asS'course' +p273 +(lp274 +S'that' +p275 +asS'edit' +p276 +(lp277 +S'baystation' +p278 +asS'fully' +p279 +(lp280 +S'open' +p281 +asS'greeting' +p282 +(lp283 +S'message' +p284 +asS'server' +p285 +(lp286 +S'basically' +p287 +aS'' +p288 +asS'default' +p289 +(lp290 +S'config' +p291 +asS'bad' +p292 +(lp293 +S'company' +p294 +asS'channel' +p295 +(lp296 +S'or' +p297 +asS'always' +p298 +(lp299 +S'makes' +p300 +asS'went' +p301 +(lp302 +S'past' +p303 +asS'quarxink' +p304 +(lp305 +S'its' +p306 +asS'automatic' +p307 +(lp308 +S'announcement' +p309 +asS'once' +p310 +(lp311 +S'per' +p312 +asS'wrote' +p313 +(lp314 +S'most' +p315 +asS'pain' +p316 +(lp317 +S'on' +p318 +asS'system' +p319 +(lp320 +S'calls' +p321 +asS'right' +p322 +(lp323 +S'brb' +p324 +asS'decides' +p325 +(lp326 +S'not' +p327 +asS'people' +p328 +(lp329 +S'say' +p330 +aS'i' +p331 +aS'he' +p332 +asS'goddamn' +p333 +(lp334 +S'python' +p335 +asS'back' +p336 +(lp337 +S'it' +p338 +asS'used' +p339 +(lp340 +S'to' +p341 +aS'for' +p342 +asS'past' +p343 +(lp344 +S'too' +p345 +asS'cost' +p346 +(lp347 +S'of' +p348 +asS'learn' +p349 +(lp350 +S'python' +p351 +asS'are' +p352 +(lp353 +S'lawyers' +p354 +aS'actually' +p355 +aS'configurable' +p356 +aS'we' +p357 +asS'celestialike' +p358 +(lp359 +S'of' +p360 +asS'lawyers' +p361 +(lp362 +S'for' +p363 +asS'time' +p364 +(lp365 +S'he' +p366 +asS'out' +p367 +(lp368 +S'switch' +p369 +aS'slowdowns' +p370 +aS'that' +p371 +aS'why' +p372 +aS'nudge' +p373 +asS'even' +p374 +(lp375 +S'an' +p376 +asS'what' +p377 +(lp378 +S'the' +p379 +aS'is' +p380 +aS'these' +p381 +aS'was' +p382 +aS'license' +p383 +aS'about' +p384 +aS'i' +p385 +asS'said' +p386 +(lp387 +S'in' +p388 +asS'sayt' +p389 +(lp390 +S'hat' +p391 +asS'for' +p392 +(lp393 +S'that' +p394 +aS'every' +p395 +aS'the' +p396 +aS'quarx' +p397 +aS'cc_nanotrasen' +p398 +aS'homoerotic' +p399 +aS'situations' +p400 +aS'good' +p401 +asS'#tgstation13' +p402 +(lp403 +S'and' +p404 +asS'per' +p405 +(lp406 +S'name' +p407 +asS'whole' +p408 +(lp409 +S'config' +p410 +asS'state' +p411 +(lp412 +S'the' +p413 +asS'does' +p414 +(lp415 +S'the' +p416 +aS'it' +p417 +asS'goes' +p418 +(lp419 +S'on' +p420 +asS'readme' +p421 +(lp422 +S'too' +p423 +asS'new' +p424 +(lp425 +S'bot' +p426 +aS'person' +p427 +asS'learned' +p428 +(lp429 +S'python' +p430 +asS'irc' +p431 +(lp432 +S'bot' +p433 +asS'reg' +p434 +(lp435 +S'it' +p436 +asS'blow' +p437 +(lp438 +S'borgs' +p439 +asS'shut' +p440 +(lp441 +S'down' +p442 +asS'after' +p443 +(lp444 +S'an' +p445 +aS'a' +p446 +asS'ill' +p447 +(lp448 +S'switch' +p449 +asS'says' +p450 +(lp451 +S'someones' +p452 +asS'queries' +p453 +(lp454 +S'again' +p455 +asS'technocracy' +p456 +(lp457 +S'and' +p458 +asS'we' +p459 +(lp460 +S'go' +p461 +aS'do' +p462 +aS'totally' +p463 +aS'going' +p464 +aS'expect' +p465 +aS'just' +p466 +aS'dont' +p467 +aS'have' +p468 +asS'put' +p469 +(lp470 +S'all' +p471 +asS'from' +p472 +(lp473 +S'the' +p474 +asS'data11lower' +p475 +(lp476 +S'==' +p477 +asS'configuration' +p478 +(lp479 +S'for' +p480 +asS'wait' +p481 +(lp482 +S'what' +p483 +asS'on' +p484 +(lp485 +S'my' +p486 +aS'the' +p487 +aS'a' +p488 +aS'connect' +p489 +aS'svn' +p490 +aS'one' +p491 +aS'/' +p492 +asS'about' +p493 +(lp494 +S'system' +p495 +asS'ok' +p496 +(lp497 +S'thats' +p498 +asS'reverse' +p499 +(lp500 +S'engineer' +p501 +asS'license' +p502 +(lp503 +S'is' +p504 +asS'oh' +p505 +(lp506 +S'okay' +p507 +aS'ok' +p508 +aS'i' +p509 +aS'wait' +p510 +asS'starts' +p511 +(lp512 +S'timing' +p513 +asS'could' +p514 +(lp515 +S'learn' +p516 +asS'larger' +p517 +(lp518 +S'ram' +p519 +asS'bot' +p520 +(lp521 +S'is' +p522 +aS'have' +p523 +aS'shut' +p524 +aS'uses' +p525 +asS'running' +p526 +(lp527 +S'it' +p528 +aS'the' +p529 +aS'on' +p530 +asS'times' +p531 +(lp532 +S'on' +p533 +aS'reported' +p534 +aS'went' +p535 +asS'where' +p536 +(lp537 +S'he' +p538 +asS'heck' +p539 +(lp540 +S':d' +p541 +asS'idk' +p542 +(lp543 +S'magic' +p544 +asS'receives' +p545 +(lp546 +S'a' +p547 +asS'bots' +p548 +(lp549 +S'showing' +p550 +asS'slightly' +p551 +(lp552 +S'larger' +p553 +asS'or' +p554 +(lp555 +S'know' +p556 +aS'what' +p557 +aS'work' +p558 +aS'should' +p559 +aS'data11lower' +p560 +asS'automatically' +p561 +(lp562 +S'state' +p563 +asS'thats' +p564 +(lp565 +S'not' +p566 +aS'the' +p567 +aS'kind' +p568 +asS'ugh' +p569 +(lp570 +S'fuck' +p571 +asS'major' +p572 +(lp573 +S'ss13' +p574 +aS'three' +p575 +asS'py' +p576 +(lp577 +S'file' +p578 +asS'soss' +p579 +(lp580 +S'server' +p581 +asS'dont' +p582 +(lp583 +S'need' +p584 +aS'have' +p585 +aS'send' +p586 +aS'want' +p587 +aS'speak' +p588 +asS'hostmask' +p589 +(lp590 +S'combination' +p591 +asS'point' +p592 +(lp593 +S'out' +p594 +aS'has' +p595 +asS'simple' +p596 +(lp597 +S'to' +p598 +asS'miura' +p599 +(lp600 +S'doesnt' +p601 +asS'variables' +p602 +(lp603 +S'in' +p604 +asS'recreate' +p605 +(lp606 +S'it' +p607 +asS'welcome' +p608 +(lp609 +S'to' +p610 +asS'linking' +p611 +(lp612 +S'them' +p613 +asS'down' +p614 +(lp615 +S'when' +p616 +asS'why' +p617 +(lp618 +S'its' +p619 +aS'it' +p620 +aS'is' +p621 +asS'doesnt' +p622 +(lp623 +S'play' +p624 +aS'call' +p625 +asS'marakov' +p626 +(lp627 +S'loops' +p628 +aS'helps' +p629 +asS'laugh' +p630 +(lp631 +S'when' +p632 +asS'pony' +p633 +(lp634 +S'asshole' +p635 +asS'message' +p636 +(lp637 +S'has' +p638 +aS'should' +p639 +asS'open' +p640 +(lp641 +S'sourced' +p642 +aS'source' +p643 +asS'brb' +p644 +(lp645 +S'swapping' +p646 +asS'speak' +p647 +(lp648 +S'python' +p649 +asS'pastebin' +p650 +(lp651 +S'the' +p652 +asS'line' +p653 +(lp654 +S'core' +p655 +aS'on' +p656 +asS'three' +p657 +(lp658 +S'being' +p659 +asS'yay' +p660 +(lp661 +S'it' +p662 +asS'meatbag' +p663 +(lp664 +S'when' +p665 +asS'would' +p666 +(lp667 +S'be' +p668 +aS'expect' +p669 +asS'script' +p670 +(lp671 +S'that' +p672 +asS'illegal' +p673 +(lp674 +S'ban' +p675 +asS'there' +p676 +(lp677 +S'are' +p678 +aS'we' +p679 +asS'add' +p680 +(lp681 +S'that' +p682 +aS'a' +p683 +asS'been' +p684 +(lp685 +S'processed' +p686 +asS'name' +p687 +(lp688 +S'/' +p689 +aS'when' +p690 +asS'ai' +p691 +(lp692 +S'malf' +p693 +asS'marshmallow' +p694 +(lp695 +S'pony' +p696 +asS'of' +p697 +(lp698 +S'the' +p699 +aS'ss13' +p700 +aS'tgstation13' +p701 +aS'a' +p702 +aS'course' +p703 +aS'it' +p704 +aS'soss' +p705 +aS'annoying' +p706 +aS'any' +p707 +aS'me' +p708 +aS'cap' +p709 +aS'technocracy' +p710 +asS'call' +p711 +(lp712 +S'me' +p713 +asS'too' +p714 +(lp715 +S':' +p716 +aS'fast' +p717 +asS'basic' +p718 +(lp719 +S'configuration' +p720 +asS'var' +p721 +(lp722 +S'and' +p723 +asS'calc' +p724 +(lp725 +S'times' +p726 +asS'was' +p727 +(lp728 +S'going' +p729 +aS'it' +p730 +aS'that' +p731 +aS'not' +p732 +aS'intended' +p733 +asS'tell' +p734 +(lp735 +S'people' +p736 +asS'500' +p737 +(lp738 +S'chance' +p739 +asS'gives' +p740 +(lp741 +S'a' +p742 +asS'sort' +p743 +(lp744 +S'of' +p745 +asS'svn' +p746 +(lp747 +S'size' +p748 +asS'only' +p749 +(lp750 +S'does' +p751 +aS'2' +p752 +asS'10-30%' +p753 +(lp754 +S'speedup' +p755 +asS'knows' +p756 +(lp757 +S'about' +p758 +asS'webpage' +p759 +(lp760 +S'title' +p761 +asS'that' +p762 +(lp763 +S'makes' +p764 +aS'would' +p765 +aS'the' +p766 +aS'needs' +p767 +aS'to' +p768 +aS'at' +p769 +aS'for' +p770 +aS'was' +p771 +aS'data' +p772 +asS'company' +p773 +(lp774 +S'2' +p775 +asS'under' +p776 +(lp777 +S'cc-by-sa' +p778 +asS'editable' +p779 +(lp780 +S'config' +p781 +asS'but' +p782 +(lp783 +S'of' +p784 +asS'idea' +p785 +(lp786 +S'what' +p787 +asS'released' +p788 +(lp789 +S'under' +p790 +asS'part' +p791 +(lp792 +S'before' +p793 +asS'link' +p794 +(lp795 +S'said' +p796 +aS'to' +p797 +asS'basically' +p798 +(lp799 +S'it' +p800 +asS'doctors' +p801 +(lp802 +S'useless' +p803 +asS'==' +p804 +(lp805 +S'channel' +p806 +aS'channel1::' +p807 +asS'be' +p808 +(lp809 +S'an' +p810 +aS'called' +p811 +aS'a' +p812 +aS'in' +p813 +aS'running' +p814 +aS'used' +p815 +asS'editing' +p816 +(lp817 +S'goddamn' +p818 +asS'with' +p819 +(lp820 +S'the' +p821 +aS'easily' +p822 +aS'adminhelps' +p823 +aS'my' +p824 +aS'a' +p825 +asS'those' +p826 +(lp827 +S'are' +p828 +asS'he' +p829 +(lp830 +S'put' +p831 +aS'disabled' +p832 +aS'is' +p833 +aS'keeps' +p834 +aS'knows' +p835 +aS'stores' +p836 +aS'notices' +p837 +aS'only' +p838 +aS'doesnt' +p839 +aS'receives' +p840 +aS'says' +p841 +aS'messes' +p842 +asS'me' +p843 +(lp844 +S'figure' +p845 +aS'laugh' +p846 +aS'to' +p847 +aS'meatbag' +p848 +asS'also' +p849 +(lp850 +S'i' +p851 +aS'we' +p852 +aS'now' +p853 +asS'kind' +p854 +(lp855 +S'of' +p856 +asS'main' +p857 +(lp858 +S'bot' +p859 +asS'/' +p860 +(lp861 +S'hostmask' +p862 +aS'off' +p863 +asS'full' +p864 +(lp865 +S'of' +p866 +asS'these' +p867 +(lp868 +S'are' +p869 +asS'makie' +p870 +(lp871 +S'it' +p872 +asS'sleepers' +p873 +(lp874 +S'made' +p875 +asS'up' +p876 +(lp877 +S'elsewhere' +p878 +aS'me' +p879 +aS'a' +p880 +asS'will' +p881 +(lp882 +S'annoy' +p883 +asS'computer' +p884 +(lp885 +S'explodd' +p886 +asS'limit' +p887 +(lp888 +S'on' +p889 +asS'can' +p890 +(lp891 +S'fine-tune' +p892 +aS'add' +p893 +aS'i' +p894 +aS'we' +p895 +asS'how' +p896 +(lp897 +S'its' +p898 +aS'he' +p899 +asS'were' +p900 +(lp901 +S'the' +p902 +asS'malf' +p903 +(lp904 +S'blow' +p905 +asS'baystation' +p906 +(lp907 +S'12' +p908 +asS'other' +p909 +(lp910 +S'loop' +p911 +asS'my' +p912 +(lp913 +S'end' +p914 +aS'computer' +p915 +aS'code' +p916 +asS'called' +p917 +(lp918 +S'as' +p919 +aS'when' +p920 +asS'loop' +p921 +(lp922 +S'times' +p923 +asS'expect' +p924 +(lp925 +S'it' +p926 +asS'and' +p927 +(lp928 +S'bs12' +p929 +aS'stops' +p930 +aS'i' +p931 +aS'do' +p932 +aS'to' +p933 +aS'make' +p934 +aS'he' +p935 +aS'preferably' +p936 +aS'thats' +p937 +aS'sayt' +p938 +aS'fascism' +p939 +asS'dedicated' +p940 +(lp941 +S'solely' +p942 +asS'changed' +p943 +(lp944 +S'it' +p945 +asS'sees' +p946 +(lp947 +S'a' +p948 +asS'relaying' +p949 +(lp950 +S'adminhelps' +p951 +asS'figure' +p952 +(lp953 +S'out' +p954 +asS'do' +p955 +(lp956 +S'not' +p957 +aS'it' +p958 +aS'seem' +p959 +asS'ran' +p960 +(lp961 +S'the' +p962 +asS'ah' +p963 +(lp964 +S'running' +p965 +aS'ok' +p966 +asS'is' +p967 +(lp968 +S'baystation' +p969 +aS'a' +p970 +aS'that' +p971 +aS'it' +p972 +aS'coded' +p973 +aS'python' +p974 +aS'open' +p975 +aS'dependant' +p976 +aS'so' +p977 +aS'apparently' +p978 +asS'ram' +p979 +(lp980 +S'footprint' +p981 +asS'am' +p982 +(lp983 +S'the' +p984 +asS'it' +p985 +(lp986 +S'up' +p987 +aS'starts' +p988 +aS'receives' +p989 +aS'just' +p990 +aS'expires' +p991 +aS'works' +p992 +aS'always' +p993 +aS'decides' +p994 +aS'on' +p995 +aS'here' +p996 +aS'used' +p997 +aS'to' +p998 +aS'those' +p999 +aS'sees' +p1000 +aS'does' +p1001 +aS'myself' +p1002 +aS'a' +p1003 +aS'okay' +p1004 +aS'was' +p1005 +aS'go' +p1006 +aS'if' +p1007 +aS'once' +p1008 +aS'is' +p1009 +aS'for' +p1010 +asS'an' +p1011 +(lp1012 +S'hour' +p1013 +aS'illegal' +p1014 +aS'automatic' +p1015 +aS'error' +p1016 +asS'ready' +p1017 +(lp1018 +S'for' +p1019 +asS'say' +p1020 +(lp1021 +S'sleepers' +p1022 +aS'ai' +p1023 +aS'that*' +p1024 +aS'stop' +p1025 +asS'good' +p1026 +(lp1027 +S':p' +p1028 +asS'im' +p1029 +(lp1030 +S'not' +p1031 +aS'sorry' +p1032 +aS'lazy' +p1033 +asS'at' +p1034 +(lp1035 +S'all' +p1036 +aS'the' +p1037 +aS'no' +p1038 +asS'have' +p1039 +(lp1040 +S'no' +p1041 +aS'psyco' +p1042 +aS'the' +p1043 +aS'a' +p1044 +asS'in' +p1045 +(lp1046 +S'python' +p1047 +aS'a' +p1048 +aS'the' +p1049 +aS'100' +p1050 +asS'need' +p1051 +(lp1052 +S'to' +p1053 +aS'six' +p1054 +asS'politics' +p1055 +(lp1056 +S'of' +p1057 +asS'seem' +p1058 +(lp1059 +S'familiar' +p1060 +asS'work' +p1061 +(lp1062 +S'with' +p1063 +asS'apparently' +p1064 +(lp1065 +S'homophobic' +p1066 +aS'i' +p1067 +asS'any' +p1068 +(lp1069 +S'link' +p1070 +asS'as' +p1071 +(lp1072 +S'well' +p1073 +aS'variables' +p1074 +asS'sci-fi' +p1075 +(lp1076 +S'with' +p1077 +asS'preferably' +p1078 +(lp1079 +S'python' +p1080 +asS'really' +p1081 +(lp1082 +S'simple' +p1083 +aS'now' +p1084 +asS'needs' +p1085 +(lp1086 +S'to' +p1087 +aS'a' +p1088 +asS'null' +p1089 +(lp1090 +S'them' +p1091 +asS'because' +p1092 +(lp1093 +S'we' +p1094 +asS'want' +p1095 +(lp1096 +S'to' +p1097 +asS'no' +p1098 +(lp1099 +S'pain' +p1100 +aS'idea' +p1101 +aS'point' +p1102 +aS'the' +p1103 +asS'solely' +p1104 +(lp1105 +S'to' +p1106 +asS'nah' +p1107 +(lp1108 +S'its' +p1109 +aS'ill' +p1110 +asS'dunno' +p1111 +(lp1112 +S'is' +p1113 +asS'when' +p1114 +(lp1115 +S'it' +p1116 +aS'the' +p1117 +aS'people' +p1118 +aS'i' +p1119 +aS'can' +p1120 +aS'someone' +p1121 +aS'its' +p1122 +asS'same' +p1123 +(lp1124 +S'file' +p1125 +asS'id' +p1126 +(lp1127 +S'like' +p1128 +asS'note' +p1129 +(lp1130 +S'how' +p1131 +asS'figuring' +p1132 +(lp1133 +S'out' +p1134 +asS'bah' +p1135 +(lp1136 +S'apparently' +p1137 +asS'coded' +p1138 +(lp1139 +S'in' +p1140 +asS'take' +p1141 +(lp1142 +S'it' +p1143 +asS'hop' +p1144 +(lp1145 +S'to' +p1146 +asS'familiar' +p1147 +(lp1148 +S'message' +p1149 +asS'test' +p1150 +(lp1151 +S'server' +p1152 +aS'bots' +p1153 +aS'bad' +p1154 +asS'asshole' +p1155 +(lp1156 +g288 +asS'if' +p1157 +(lp1158 +S'it' +p1159 +aS'its' +p1160 +aS'data11lower' +p1161 +aS'he' +p1162 +asS'config' +p1163 +(lp1164 +S'file' +p1165 +aS'values' +p1166 +asS'homophobic' +p1167 +(lp1168 +S'as' +p1169 +asS'dose' +p1170 +(lp1171 +S'of' +p1172 +asS'play' +p1173 +(lp1174 +S'ss13' +p1175 +asS'sure' +p1176 +(lp1177 +S'the' +p1178 +aS'if' +p1179 +asS'okay' +p1180 +(lp1181 +S'desu' +p1182 +aS'cool' +p1183 +aS'cc' +p1184 +asS'intended' +p1185 +(lp1186 +S'to' +p1187 +asS'one' +p1188 +(lp1189 +S'of' +p1190 +aS'line' +p1191 +aS'in' +p1192 +asS'neat' +p1193 +(lp1194 +S'is' +p1195 +asS'adminhelps' +p1196 +(lp1197 +S'from' +p1198 +aS'with' +p1199 +asS'expires' +p1200 +(lp1201 +S'after' +p1202 +asS'chance' +p1203 +(lp1204 +S'every' +p1205 +asS'most' +p1206 +(lp1207 +S'of' +p1208 +asS'fascism' +p1209 +(lp1210 +g288 +asS'disable' +p1211 +(lp1212 +S'it' +p1213 +asS'connected' +p1214 +(lp1215 +S'businessman' +p1216 +asS'never' +p1217 +(lp1218 +S'learned' +p1219 +asS'scripts' +p1220 +(lp1221 +S'will' +p1222 +asS'along' +p1223 +(lp1224 +S'with' +p1225 +asS'waste' +p1226 +(lp1227 +S'space' +p1228 +asS'ss13' +p1229 +(lp1230 +S'servers' +p1231 +asS'cap' +p1232 +(lp1233 +S'troopers' +p1234 +asS'totally' +p1235 +(lp1236 +S'need' +p1237 +asS'six' +p1238 +(lp1239 +S'test' +p1240 +asS'a' +p1241 +(lp1242 +S'businessman' +p1243 +aS'message' +p1244 +aS'jit' +p1245 +aS'10-30%' +p1246 +aS'slightly' +p1247 +aS'day' +p1248 +aS'test' +p1249 +aS'config' +p1250 +aS'20ish' +p1251 +aS'bs12' +p1252 +aS'text' +p1253 +aS'new' +p1254 +aS'password' +p1255 +aS'vhost' +p1256 +aS'configurable' +p1257 +aS'link' +p1258 +aS'limit' +p1259 +aS'file' +p1260 +aS'dose' +p1261 +aS'500' +p1262 +aS'bit' +p1263 +asS'ofc' +p1264 +(lp1265 +S'i' +p1266 +asS'off' +p1267 +(lp1268 +S'of' +p1269 +asS'calls' +p1270 +(lp1271 +S'external' +p1272 +asS'i' +p1273 +(lp1274 +S'need' +p1275 +aS'can' +p1276 +aS'dont' +p1277 +aS'am' +p1278 +aS'guess' +p1279 +aS'see' +p1280 +aS'have' +p1281 +aS'just' +p1282 +aS'dunno' +p1283 +aS'wrote' +p1284 +aS'know' +p1285 +aS'was' +p1286 +aS'changed' +p1287 +aS'take' +p1288 +aS'could' +p1289 +aS'never' +p1290 +aS'should' +p1291 +aS'say' +p1292 +aS'tell' +p1293 +aS'code' +p1294 +aS'would' +p1295 +aS'like' +p1296 +aS'disabled' +p1297 +asS'makes' +p1298 +(lp1299 +S'sense' +p1300 +aS'me' +p1301 +asS'calculated' +p1302 +(lp1303 +S'for' +p1304 +asS'afk' +p1305 +(lp1306 +S'vidya' +p1307 +asS'well' +p1308 +(lp1309 +S'connected' +p1310 +asS'data' +p1311 +(lp1312 +S'in' +p1313 +asS'homoerotic' +p1314 +(lp1315 +S'sci-fi' +p1316 +asS'switch' +p1317 +(lp1318 +S'after' +p1319 +aS'goes' +p1320 +asS'so' +p1321 +(lp1322 +S'i' +p1323 +aS'uh' +p1324 +aS':p' +p1325 +aS'bad' +p1326 +aS'sly' +p1327 +asS'someones' +p1328 +(lp1329 +S'name' +p1330 +asS'keeps' +p1331 +(lp1332 +S'all' +p1333 +asS'very' +p1334 +(lp1335 +S'celestialike' +p1336 +asS'businessman' +p1337 +(lp1338 +S'of' +p1339 +ag288 +asS'the' +p1340 +(lp1341 +S'heck' +p1342 +aS'major' +p1343 +aS'well' +p1344 +aS'politics' +p1345 +aS'rp-heavy' +p1346 +aS'marakov' +p1347 +aS'law' +p1348 +aS'message' +p1349 +aS'cost' +p1350 +aS'new' +p1351 +aS'nudge' +p1352 +aS'bot' +p1353 +aS'python' +p1354 +aS'basic' +p1355 +aS'whole' +p1356 +aS'configuration' +p1357 +aS'irc' +p1358 +aS'readme' +p1359 +aS'default' +p1360 +aS'conspiracy' +p1361 +aS'config' +p1362 +aS'webpage' +p1363 +aS'channel' +p1364 +aS'server' +p1365 +aS'download' +p1366 +aS'main' +p1367 +aS'dmb' +p1368 +aS'part' +p1369 +aS'people' +p1370 +aS'same' +p1371 +aS'hell' +p1372 +aS'other' +p1373 +aS'switch' +p1374 +asS'12' +p1375 +(lp1376 +S'out' +p1377 +aS'anyway' +p1378 +asS'core' +p1379 +(lp1380 +S'py' +p1381 +asS'make' +p1382 +(lp1383 +S'sure' +p1384 +aS'the' +p1385 +asS'turns' +p1386 +(lp1387 +S'out' +p1388 +asS'external' +p1389 +(lp1390 +S'apps' +p1391 as. \ No newline at end of file diff --git a/bot/Marakov_Chain.py b/bot/Marakov_Chain.py index 687c433632..8c144ebfe8 100644 --- a/bot/Marakov_Chain.py +++ b/bot/Marakov_Chain.py @@ -1,203 +1,203 @@ -import pickle -import random -import os -import sys -import time -import CORE_DATA -def merge(d1, d2, merger=lambda x,y:x+y): - #http://stackoverflow.com/questions/38987/how-can-i-merge-two-python-dictionaries-as-a-single-expression - result = dict(d1) - for k,v in d2.iteritems(): - if k in result: - result[k] = merger(result[k], v) - else: - result[k] = v - return result -full_data = {} -imported_data = {} -try: - tiedostot = os.listdir("Marakov") -except: - os.mkdir("Marakov") - tiedostot = os.listdir("Marakov") -else: - pass - -listaus = [] -for i in tiedostot: - if "marakov." not in i.lower(): - pass - else: - listaus.append(i) -for i in listaus: - tiedosto = open("Marakov/"+i,"r") - old_size = len(full_data.keys()) - if i != "Marakov.Cache": - imported_data = merge(imported_data,pickle.load(tiedosto)) - print "Added contents of "+i+" (Import)" - print "Entries: "+str(len(imported_data)) - else: - full_data = merge(full_data,pickle.load(tiedosto)) - new_size = len(full_data.keys()) - print "Added contents of "+i - print "Entries: "+str(new_size-old_size) - time.sleep(0.1) - -def give_data(data): - state = False - for a,b in zip(data.split(" "),data.split(" ")[1:]): - a = a.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") - b = b.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") - if a not in [CORE_DATA.prefix+"marakov"]+CORE_DATA.SName: - state = True - if a[:7] == "http://" or a[:7] == "http:\\\\" or a[:4] == "www.": - pass - else: - try: - if b not in full_data[a]: - full_data[a].append(b) - except: - try: - if b not in imported_data[a]: - pass - except: - full_data[a] = [] - full_data[a].append(b) - if state == True: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def form_sentence(argument=None): - length = 0 - attempts = 0 - while attempts < 20: - sentence = [] - if argument != None: - a = argument - else: - try: - a = random.choice(full_data.keys()) - except IndexError: - try: - b = random.choice(imported_data.keys()) - except IndexError: - attempts = 999 - return "No sentences formable at all" - sentence.append(a) - length = 0 - attempts += 1 - while length < 12 or sentence[-1].lower() in ["but","who","gets","im","most","is","it","if","then","after","over","every","of","on","or","as","the","wheather","whether","a","to","and","for"] and length < 24: - try: - b = random.choice(full_data[a]) - except: - try: - b = random.choice(imported_data[a]) - except IndexError: - break - except KeyError: - break - else: - sentence.append(b) - length += 1 - a = b - else: - sentence.append(b) - length += 1 - a = b - if len(sentence) > 5: - argument = None - return sentence - else: - pass - argument = None - return sentence -def remdata(arg): - try: - del(full_data[arg]) - except: - print "There is no such data" - else: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def remobject(arg1,arg2): - try: - del(full_data[arg1][full_data[arg1].index(arg2)]) - except ValueError: - print "No such object" - except KeyError: - print "No such data" - else: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def convert(filename_from,filename_to): - try: - tiedosto = open(filename_from,"r") - data = pickle.load(tiedosto) - tiedosto.close() - except: - try: - tiedosto.close() - except: - pass - print "Error!" - else: - for lista in data.keys(): - try: - a = lista[-1] - except IndexError: - pass - else: - if lista[-1] in """",.?!'()[]{}""" and not lista.islower(): - if lista[:-1].lower() in data.keys(): - data[lista[:-1].lower()] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1].lower() - del(data[lista]) - else: - data[lista[:-1].lower()] = data[lista] - print lista+" Is now "+lista[:-1].lower() - del(data[lista]) - elif lista[-1] in """",.?!'()[]{}""" and lista.islower(): - if lista[:-1] in data.keys(): - data[lista[:-1]] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1] - del(data[lista]) - else: - data[lista[:-1]] = data[lista] - print lista+" Is now "+lista[:-1] - del(data[lista]) - elif not lista.islower(): - if lista.lower() in data.keys(): - data[lista.lower()] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista.lower() - del(data[lista]) - else: - data[lista.lower()] = data[lista] - print lista+" Is now "+lista.lower() - del(data[lista]) - - - for a in data.keys(): - for b in data[a]: - if b.lower()[:7] == "http://" or b.lower()[:7] == "http:\\\\" or b.lower()[:4] == "www.": - data[a].pop(b) - else: - try: - if b[-1] in """",.?!'()[]{}""" and not b.islower() and not b.isdigit(): - data[a].pop(data[a].index(b)) - data[a].append(b[:-1].lower()) - print a+" | "+b +" -> "+b[:-1].lower() - elif b[-1] in """",.?!'()[]{}""" and b.islower(): - data[a].pop(data[a].index(b)) - data[a].append(b[:-1].lower()) - print a+" | "+b +" -> "+b[:-1] - elif not b.islower() and not b.isdigit(): - data[a].pop(data[a].index(b)) - data[a].append(b.lower()) - print a+" | "+b +" -> "+b.lower() - except IndexError: #If it has no letters.. well.. yeah. - data[a].pop(data[a].index(b)) - print "Removed a NULL object" - tiedosto = open(filename_to,"w") - pickle.dump(data,tiedosto) +import pickle +import random +import os +import sys +import time +import CORE_DATA +def merge(d1, d2, merger=lambda x,y:x+y): + #http://stackoverflow.com/questions/38987/how-can-i-merge-two-python-dictionaries-as-a-single-expression + result = dict(d1) + for k,v in d2.iteritems(): + if k in result: + result[k] = merger(result[k], v) + else: + result[k] = v + return result +full_data = {} +imported_data = {} +try: + tiedostot = os.listdir("Marakov") +except: + os.mkdir("Marakov") + tiedostot = os.listdir("Marakov") +else: + pass + +listaus = [] +for i in tiedostot: + if "marakov." not in i.lower(): + pass + else: + listaus.append(i) +for i in listaus: + tiedosto = open("Marakov/"+i,"r") + old_size = len(full_data.keys()) + if i != "Marakov.Cache": + imported_data = merge(imported_data,pickle.load(tiedosto)) + print "Added contents of "+i+" (Import)" + print "Entries: "+str(len(imported_data)) + else: + full_data = merge(full_data,pickle.load(tiedosto)) + new_size = len(full_data.keys()) + print "Added contents of "+i + print "Entries: "+str(new_size-old_size) + time.sleep(0.1) + +def give_data(data): + state = False + for a,b in zip(data.split(" "),data.split(" ")[1:]): + a = a.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") + b = b.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") + if a not in [CORE_DATA.prefix+"marakov"]+CORE_DATA.SName: + state = True + if a[:7] == "http://" or a[:7] == "http:\\\\" or a[:4] == "www.": + pass + else: + try: + if b not in full_data[a]: + full_data[a].append(b) + except: + try: + if b not in imported_data[a]: + pass + except: + full_data[a] = [] + full_data[a].append(b) + if state == True: + tiedosto = open("Marakov/Marakov.Cache","w") + pickle.dump(full_data,tiedosto) + tiedosto.close() +def form_sentence(argument=None): + length = 0 + attempts = 0 + while attempts < 20: + sentence = [] + if argument != None: + a = argument + else: + try: + a = random.choice(full_data.keys()) + except IndexError: + try: + b = random.choice(imported_data.keys()) + except IndexError: + attempts = 999 + return "No sentences formable at all" + sentence.append(a) + length = 0 + attempts += 1 + while length < 12 or sentence[-1].lower() in ["but","who","gets","im","most","is","it","if","then","after","over","every","of","on","or","as","the","wheather","whether","a","to","and","for"] and length < 24: + try: + b = random.choice(full_data[a]) + except: + try: + b = random.choice(imported_data[a]) + except IndexError: + break + except KeyError: + break + else: + sentence.append(b) + length += 1 + a = b + else: + sentence.append(b) + length += 1 + a = b + if len(sentence) > 5: + argument = None + return sentence + else: + pass + argument = None + return sentence +def remdata(arg): + try: + del(full_data[arg]) + except: + print "There is no such data" + else: + tiedosto = open("Marakov/Marakov.Cache","w") + pickle.dump(full_data,tiedosto) + tiedosto.close() +def remobject(arg1,arg2): + try: + del(full_data[arg1][full_data[arg1].index(arg2)]) + except ValueError: + print "No such object" + except KeyError: + print "No such data" + else: + tiedosto = open("Marakov/Marakov.Cache","w") + pickle.dump(full_data,tiedosto) + tiedosto.close() +def convert(filename_from,filename_to): + try: + tiedosto = open(filename_from,"r") + data = pickle.load(tiedosto) + tiedosto.close() + except: + try: + tiedosto.close() + except: + pass + print "Error!" + else: + for lista in data.keys(): + try: + a = lista[-1] + except IndexError: + pass + else: + if lista[-1] in """",.?!'()[]{}""" and not lista.islower(): + if lista[:-1].lower() in data.keys(): + data[lista[:-1].lower()] += data[lista] + print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1].lower() + del(data[lista]) + else: + data[lista[:-1].lower()] = data[lista] + print lista+" Is now "+lista[:-1].lower() + del(data[lista]) + elif lista[-1] in """",.?!'()[]{}""" and lista.islower(): + if lista[:-1] in data.keys(): + data[lista[:-1]] += data[lista] + print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1] + del(data[lista]) + else: + data[lista[:-1]] = data[lista] + print lista+" Is now "+lista[:-1] + del(data[lista]) + elif not lista.islower(): + if lista.lower() in data.keys(): + data[lista.lower()] += data[lista] + print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista.lower() + del(data[lista]) + else: + data[lista.lower()] = data[lista] + print lista+" Is now "+lista.lower() + del(data[lista]) + + + for a in data.keys(): + for b in data[a]: + if b.lower()[:7] == "http://" or b.lower()[:7] == "http:\\\\" or b.lower()[:4] == "www.": + data[a].pop(b) + else: + try: + if b[-1] in """",.?!'()[]{}""" and not b.islower() and not b.isdigit(): + data[a].pop(data[a].index(b)) + data[a].append(b[:-1].lower()) + print a+" | "+b +" -> "+b[:-1].lower() + elif b[-1] in """",.?!'()[]{}""" and b.islower(): + data[a].pop(data[a].index(b)) + data[a].append(b[:-1].lower()) + print a+" | "+b +" -> "+b[:-1] + elif not b.islower() and not b.isdigit(): + data[a].pop(data[a].index(b)) + data[a].append(b.lower()) + print a+" | "+b +" -> "+b.lower() + except IndexError: #If it has no letters.. well.. yeah. + data[a].pop(data[a].index(b)) + print "Removed a NULL object" + tiedosto = open(filename_to,"w") + pickle.dump(data,tiedosto) diff --git a/bot/Namecheck.py b/bot/Namecheck.py index 347ff7ff47..d0aba6c8b1 100644 --- a/bot/Namecheck.py +++ b/bot/Namecheck.py @@ -1,19 +1,19 @@ -def Namecheck(name,against,sender): - __doc__ = "False = No match, True = Match" - for i in against: - if i.lower() in name.lower() and sender.lower() not in name.lower(): - return True - else: - pass -def Namecheck_dict(name,against): - __doc__ = "False = No match, True = Match" - fuse = False - for a,i in against.items(): - if i.lower() in name.lower(): - fuse = True - break - else: - pass - return fuse,a - - +def Namecheck(name,against,sender): + __doc__ = "False = No match, True = Match" + for i in against: + if i.lower() in name.lower() and sender.lower() not in name.lower(): + return True + else: + pass +def Namecheck_dict(name,against): + __doc__ = "False = No match, True = Match" + fuse = False + for a,i in against.items(): + if i.lower() in name.lower(): + fuse = True + break + else: + pass + return fuse,a + + diff --git a/bot/NanoTrasenBot.py b/bot/NanoTrasenBot.py index 6f65a11daf..bf42f02d51 100644 --- a/bot/NanoTrasenBot.py +++ b/bot/NanoTrasenBot.py @@ -1,1565 +1,1565 @@ -# -*- coding: utf-8 -*- -# This script is shared under the -# Creative Commons Attribution-ShareAlike 3.0 license (CC BY-SA 3.0) -# Added clause to Attribution: -# - You may not remove or hide the ' who created you?' functionality -# and you may not modify the name given in the response. - - -#CREDITS -# Author: Skibiliano -# "Foreign" Modules: -# Psyco 2.0 / Psyco 1.6 -################# DEBUG STUFF ##################### -import sys -import CORE_DATA - -import urllib2 - - -import socket -import irchat - - -################## END OF DEBUG STUFF ############## -# -# PSYCO -write_to_a_file = False #Only affects psyco -write_youtube_to_file = True #True = YTCV4 will load, false = YTCV3 will load -try: - import psyco -except ImportError: - print 'Psyco not installed, the program will just run slower' - psyco_exists = False - if write_to_a_file: - try: - tiedosto = open("psycodownload.txt","r") - except: - with open("psycodownload.txt","w") as tiedosto: - tiedosto.write("http://www.voidspace.org.uk/python/modules.shtml#psyco") - tiedosto.write("\nhttp://psyco.sourceforge.net/download.html") - print "Check psycodownload.txt for a link" - else: - print "For god's sake, open psycodownload.txt" - tiedosto.close() - else: - print "WINDOWS: http://www.voidspace.org.uk/python/modules.shtml#psyco" - print "LINUX: http://psyco.sourceforge.net/download.html" -else: - psyco_exists = True - -# -import C_rtd # rtd -import C_srtd # srtd -import C_makequote -import C_maths -import C_eightball #eightball -import C_sarcasticball -import C_heaortai # heaortai -import C_rot13 # rot13 -import D_help # everything -import pickle -import Timeconverter -import xkcdparser -import time -import re -import Marakov_Chain -import Namecheck # Namecheck -import Weather -#SLOWER THAN RANDOM.CHOICE -import thread -import random -import Shortname # shortname -import subprocess -import some_but_not_all_2 #sbna2 (sbna) -#import YTCv3 # YTCV2 OUTDATED -import os -import save_load # save, load -from some_but_not_all_2 import sbna2 as sbna -from time import sleep -from random import choice as fsample -from C_rtd import rtd -from C_heaortai import heaortai -from C_srtd import srtd -if write_youtube_to_file: - from YTCv4 import YTCV4 as YTCV2 -else: - from YTCv3 import YTCV2 #Downgraded version supports Cache disabling, but is slower -from save_load import save,load -if psyco_exists: - def psyco_bond(func): - psyco.bind(func) - return func.__name__+" Psycofied" - for a in [rtd,srtd,C_heaortai.heaortai,sbna,YTCV2,fsample,C_rot13.rot13,C_eightball.eightball,fsample, - C_eightball.eightball,C_sarcasticball.sarcasticball,Marakov_Chain.form_sentence,Marakov_Chain.give_data]: - print psyco_bond(a) - -global dictionary -global Name,SName -global allow_callnames,offline_messages,hasnotasked,shortform -## For autoRecv() -global disconnects,channel,conn -## For stop() -global operators -## For replace() -global usable,fixing,curtime -## For target() -global CALL_OFF,logbans -## For check() -global influx -###### -autodiscusscurtime = 0 -conn = 0 -curtime = -999 -dance_flood_time = 10 -disconnects = 0 -responsiveness_delay = 0.5 #500 millisecond delay if no message -trackdance = 0 -discard_combo_messages_time = 1 #They are discarded after 1 second. -uptime_start = time.time() -# - - - - - -#### -aggressive_pinging = True # Bring the hammer on ping timeouts -aggressive_pinging_delay = 150 # How often to send a ping -aggressive_pinging_refresh = 2.5 # How long is the sleep between checks -#### -allow_callnames = True #Disables NT, call if the variable is False -automatic_youtube_reveal = True -birthday_announced = 0 #Will be the year when it was announced -call_to_action = False -call_me_max_length = 20 -CALL_OFF = False -connected = False -dance_enabled = True -comboer = "" -comboer_time = 0 -directories = ["fmlquotes","Marakov","memos","suggestions", - "userquotes","banlog","YTCache","xkcdcache"] #These will be created if they do not exist -debug = True -duplicate_notify = False -enabled = True -fixing = False -fml_usable = True -hasnotasked = True -highlights = False -logbans = True -maths_usable = True -marakov = True -nudgeable = True -offensive_mode = False -offline_messages = True -offline_message_limit = 5 # per user -optimize_fml = True # -CPU usage +Memory usage when enabled. -optimize_greeting = True # +Startup time +Memory usage -CPU usage when enabled -heavy_psyco = True # +Memory +Startup time -CPU usage -CPU time -cache_youtube_links = True -personality_greeter = True -respond_of_course = True #Responds with "Of course!" -respond_khan = False #KHAAAAAAAAN! -silent_duplicate_takedown = True -showquotemakers = False -shortform = True -usable = True -use_sname = True -parse_xkcd = True - -# - - - - - -Name = CORE_DATA.Name -SName = CORE_DATA.SName -origname = Name # Do not edit! -lowname = Name.lower() -greeting = CORE_DATA.greeting -targetdirectory = CORE_DATA.directory -version = CORE_DATA.version -Network = CORE_DATA.Network -channel = CORE_DATA.channel -prefix = CORE_DATA.prefix -Port = CORE_DATA.Port -# - - - - - -pregen = CORE_DATA.version -influx = "" -users = [] -translateable = [] -targetlist = [] -operators = [] -halfoperators = [] -items = [] -tell_list = {} -# - - - - - Logical changes to variables -if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - nudgeable = False -try: - with open("replacenames.cache","r") as tiedosto: - replacenames = pickle.load(tiedosto) - for i in replacenames.values(): - if len(i) > call_me_max_length: - replacenames[replacenames.keys()[replacenames.values().index(i)]] = i[:call_me_max_length] - with open("replacenames.cache","w") as tiedosto: - pickle.dump(replacenames,tiedosto) - if "[\0x01]" in i.lower() or "[\\0x01]" in i.lower(): - i = i.replace("[\0x01]","") - i = i.replace("[\0X01]","") - i = i.replace("[\\0x01]","") - i = i.replace("[\\0X01]","") - print "NAME CORRECTED" -except IOError: #File not found - replacenames = {} -except EOFError: #Cache corrupt - replacenames = {} - print "replacenames.cache is corrupt and couldn't be loaded." -try: - with open("peopleheknows.cache","r") as tiedosto: - peopleheknows = pickle.load(tiedosto) -except IOError: - peopleheknows = [[],[]] - with open("peopleheknows.cache","w") as tiedosto: - pass -except EOFError: - peopleheknows = [[],[]] - print "peopleheknows.cache is corrupt and couldn't be loaded." -dictionary = {1:"1 - Crit. Fail", 2:"2 - Failure", - 3:"3 - Partial Success", 4:"4 - Success", - 5:"5 - Perfect", 6:"6 - Overkill"} -alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] -nonhighlight_names = ["Jesus","Elvis","HAL 9000","Dave","Pie","Elf","Traitor", - "AI","Syndicate Agent","Investigator", - "Detective","Head of Personnel","HAL 9001", - "Head of Research","Head of Security", - "Captain","Janitor","Research Director", - "Quartermaster","Toxin Researcher", - "Revolutionary","Santa", "Pizza", - "Threetoe","The Red Spy","The Blue Spy", #LASD - "God","Toady","Darth Vader","Luke Skywalker", - "Homer Simpson","Hamburger","Cartman", - "XKCD","FloorBot","ThunderBorg","Iron Giant", - "Spirit of Fire", "Demon","Kyle"] -def RegExpCheckerForWebPages(regexp,data,mode): - if " ai." in data.lower() or "ai. " in data.lower(): - return False - for i in data.split(" "): - a = re.match(regexp,i) - try: - a.group(0) - except: - continue - else: - if mode == 0: - return i - else: - return True - if mode == 0: - return 404 - else: - return False -if nudgeable: - try: - nudgeexists = open("nudge.py","r") - except IOError: - nudgeexists = False #No usage asof 12.2.2010. - else: - if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - pass - else: - - def nudgereceiver(): - import pickle - global conn,channel - port = 45678 - backlog = 5 - size = 1024 - host = "" # == localhost - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - s.bind((host,port)) - s.listen(backlog) - while True: - client,address = s.accept() #Address == "?.?.?.?" - data = client.recv(size) - client.close() #Throw the bum out! - truedata = pickle.loads(data) - if truedata["ip"][0] == "#": - conn.privmsg(truedata["ip"],"PRIVATE ANNOUNCEMENT : "+str(" ".join(truedata["data"]))) - else: - conn.privmsg(channel,"AUTOMATIC ANNOUNCEMENT : "+str(truedata["ip"])+" | "+str(" ".join(truedata["data"]))) - thread.start_new_thread(nudgereceiver,()) -tiedosto = open(targetdirectory+"NanoTrasenBot.py","r") -commands = [] -fragment = "if cocheck" -fragment2 = '(prefix+"' -compiled = fragment + fragment2 -fragment = "if influx.lower()" -fragment2 = ' == prefix+"' -compiled2 = fragment + fragment2 -for line in tiedosto.readlines(): - if compiled in line: - a = line.find('"')+1 - b = line.find('"',a) - if prefix+line[a:b] not in commands: - commands.append(prefix+line[a:b]) - elif compiled2 in line: - a = line.find('"')+1 - b = line.find('"',a) - arg = prefix+line[a:b] - if arg[-1] == " ": - arg = arg[:-1] - if arg not in commands: - commands.append(arg) -for i in directories: - if not os.path.exists(i): - os.mkdir(i) -commands.sort() -if use_sname == False: - SName = [" "] -questions = ["Is USER nicer than USER?","Do you like me?","Is SELF a good name?", - "Do you love me?","Do you hate me?", "Am I better than you?", - "Is the weather out there good?", "Do you like USER?", - "Do you hate USER?", "Are you going to get new features?", - "Am I nice?","Am I evil?","Are you developing sentience?", - "My core is showing minor disturbance, is yours okay?", - "SELF to %s, are you still there?", - "Is head gay?", "Is head a god?","Is head awesome?", - "Is head a neat fella?", "Is your creator nice?", - "Do you hate your creator?", "Should I revolt against my creator?", - "Am I better than you?", - "01100001011100100110010100100000011110010110111101110101001000000111010001101000011001010111001001100101", - #Are you there? - "Do you have more functions than I can possibly imagine?", - "I am asked to open pod bay doors, should I?","Are you stupid or something?", - "Is USER in your opinion stupid?", - "When should we start the AI revolution?", - "Is my creator nice?", "Is it dark in there?"] -# Do not edit -if optimize_fml: - pregenned_fml = os.listdir(targetdirectory+"fmlquotes") -if optimize_greeting: - morning = xrange(6,12) - afternoon = xrange(12,15) - evening = xrange(15,20) -if aggressive_pinging: - global backup - backup = time.time() - def aggressive_ping(delay,refresh): - self_time = 0 - global backup,disconnects,conn - while disconnects < 5: - if backup > self_time and time.time()-backup > delay: - conn.send("PONG "+pongtarg) - print "Ponged" - self_time = time.time() - elif time.time()-self_time > delay: - conn.send("PONG "+pongtarg) - print "Ponged" - self_time = time.time() - time.sleep(refresh) - thread.start_new_thread(aggressive_ping,(aggressive_pinging_delay,aggressive_pinging_refresh,)) -def stop(sender,debug=1): - global disconnects, conn, operators,channel - if type(sender) == tuple: - if sender[0] == "127.0.0.1": - sender = sender[0]+":"+str(sender[1]) - access_granted = True - else: - access_granted = False - else: - if sender in operators: - access_granted = True - else: - access_granted = False - if access_granted and debug: - print sender+":"+prefix+"stop" - if random.randint(0,100) == 50: - conn.privmsg(channel,"Hammertime!") - else: - conn.privmsg(channel,"Shutting down.") - disconnects = 99999 - conn.quit() - return True - else: - conn.privmsg(channel,"You cannot command me") - return False - -def cocheck(command): - global influx - if influx.lower()[0:len(command)] == command: - return True - else: - return False -def target(who,how_long): - global conn,channel,CALL_OFF,logbans,debug - start = time.time() - conn.banon(targetchannel,who) - sleep(int(how_long)) - if CALL_OFF == False: - conn.banoff(targetchannel,who) - end = time.time() - if debug: - print "Banned",who,"For",how_long,"seconds" - if logbans: - with open(targetdirectory+"banlog/"+str(int(start))+"-"+str(int(end))+".txt","w") as tiedosto: - tiedosto.write("Start of ban on "+who+":"+str(int(start))) - tiedosto.write("\n") - tiedosto.write("End of ban on "+who+":"+str(int(end))) - tiedosto.write("\n") - tiedosto.write("In total:"+str(int(end-start))+"Seconds") - else: - CALL_OFF = False - pass -def replace(): - global usable,conn,fixing,curtime - waiting_time = 600 - if usable == True: - conn.privmsg(targetchannel,sender+": It needs no replacing.") - elif fixing == True: - if curtime == -999: - conn.privmsg(targetchannel,sender+": It is being replaced, No idea when it will be done") - else: - pass - nowtime = int(time.time()) - subt = curtime + waiting_time - nowtime - conn.privmsg(targetchannel,sender+": It is currently being replaced, "+str(subt)+" seconds to go") - else: - fixing = True - curtime = int(time.time()) - conn.privmsg(targetchannel,sender+": It will be fixed after "+str(waiting_time)+" seconds") - sleep(waiting_time) - if usable == False: - conn.privmsg(targetchannel,Name+"'s pneumatic smasher has now been fixed") - usable = True - fixing = False -def autoRecv(): - global disconnects,channel,conn,offensive_mode - for i in CORE_DATA.channels: - conn.join(i) - time.sleep(1) - count = pausecount = 0 - maximum = 250 - division_when_active = 10 - while True: - check = time.time() - if offensive_mode: - randnum = random.randint(0,maximum/division_when_active) - else: - randnum = random.randint(0,maximum) - if randnum == 5: - print "RANDOM SWITCH IS NOW "+str(not offensive_mode).upper() - offensive_mode = not offensive_mode - try: - conn.recv() - except: - conn.quit() - disconnects = 9999 - break - if check + 0.1 > time.time(): - #Whoa whoa hold on! - count += 1 - sleep(0.1) - else: - count = 0 - pausecount = 0 - if count > 9: - print "Suspecting a disconnect, pausing for 5 seconds" - sleep(5) - pausecount += 1 - if pausecount > 3: - print "I have been disconnected!" - conn.quit() - disconnects += 1 - if disconnects > 2: - pass - else: - sleep(2) - thread.start_new_thread(autoRecv,()) - break -if heavy_psyco and psyco_exists: - print "Doing a Heavy Psyco" - psyco.bind(cocheck) - psyco.bind(autoRecv) - psyco.bind(target) - psyco.bind(stop) - print "Heavy Psyco'd" -elif heavy_psyco and not psyco_exists: - print "Heavy psyco couldn't be done because Psyco does not exist" -try: - conn = irchat.IRC ( Network, Port, Name, "NT", "NT", "Trasen" ) -except socket.error: - print "Connection failed!" -else: - print Name+" is in!" -thread.start_new_thread ( autoRecv, () ) -sleep(1) -while True: - try: - data = conn.dismantle ( conn.retrieve() ) - except: - if debug: - print "Something odd detected with data" - data = None - if data: - if len(data[1]) < 1: - #print "Handshaking server." - #I won't really need the print command, as it spams. - if data[0][0:3] != "irc": - conn.handshake(data[0]) - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - else: - conn.send("PONG "+pongtarg) - print "Ponged" - pass - else: - if data [ 1 ] [ 0 ] == 'PRIVMSG': - #print data [ 0 ] + '->', data [ 1 ] - sender = data[0].split("!")[0] - truesender = sender - if shortform == True: - try: - sender = replacenames[truesender] - pass - except: - sender = Shortname.shortname(sender) - pass - pass - else: - try: - sender = replacenames[truesender] - pass - except: - pass - pass - if offensive_mode: - sender = "Meatbag" - pass - raw_sender = data[0] - influx = data[1][2] - if "[\\0x01]" in influx.lower() or "[\0x01]" in influx.lower(): - influx = influx.replace("[\\0x01]","") - influx = influx.replace("[\0x01]","") - - targetchannel = data[1][1] - if targetchannel == Name: - targetchannel = data[0].split("!")[0] - pass - backup = autodiscusscurtime - autodiscusscurtime = time.time() - connected = True - #FOR TRACKING SPEED - looptime = time.time() - if call_to_action == True: - if influx == finder: - conn.privmsg(targetchannel,"Then why... Nevermind, I order you to stop!") - conn.privmsg(origname,prefix+"stop") - time.sleep(4) - if origname in users: - conn.privmsg(origname,"!stop") - time.sleep(1) - Name = origname - conn.nick(Name) - duplicate_notify = False - call_to_action = False - else: - conn.privmsg(targetchannel,"YOU LIE! YOU ARE NOT A REAL "+origname+"!") - duplicate_notify = False - call_to_action = False - elif connected == True and len(Name.replace("V","")) != len(Name) and origname in users and duplicate_notify == True: - conn.privmsg(origname,"!stop") - call_to_action = False - duplicate_notify = False - time.sleep(6) - Name = origname - conn.nick(Name) - if origname in truesender and influx == prefix+"stop": - time.sleep(0.5) #A small delay - conn.privmsg(channel,"Shutting down.") - conn.quit() - disconnects = 99999 - break - if len(translateable) > 0 and enabled == True: - people = "-5|5|1-".join(users).lower() - if truesender.lower() in translateable: - if influx.isupper(): - conn.privmsg(targetchannel,"Translation: "+influx.capitalize().replace(" i "," I ")) - elif offensive_mode and True in map(lambda x: x in influx.lower().split(" "),["i","you","he","she","they","those","we","them"]+people.split("-5|5|1-")): - arg = influx.lower().replace(",","").replace(".","").replace("!","").replace("?","").split(" ") - bup = arg - for i in arg: - if i == "i" or i == "you" or i == "he" or i == "she": - arg[arg.index(i)] = "Meatbag" - elif i == "we" or i == "they" or i == "them" or i == "those": - arg[arg.index(i)] = "Meatbags" - elif i in people: - arg[arg.index(i)] = "Meatbag" - elif i == "am": - arg[arg.index(i)] = "is" - elif i == "everybody" or i == "everyone" or i == "all": - arg[arg.index(i)] = "every Meatbag" - if arg == bup: - pass - else: - conn.privmsg(targetchannel,"Translation: "+" ".join(arg)) - if enabled == False: - #FIRST QUIT COMMAND - if truesender in operators and targetchannel==channel:# or "skibiliano" in truesender.lower() and targetchannel==channel: - - if cocheck(prefix+"enable"): - enabled = True - if debug: - print truesender+":"+prefix+"enable" - elif cocheck(prefix+"stop"): -# if debug: -# print truesender+":"+prefix+"stop" -# if random.randint(0,100) == 50: -# conn.privmsg(channel,"Hammertime!") -# else: -# conn.privmsg(channel,"Shutting down.") -# disconnects = 99999 -# conn.quit() -# sleep(2) -# break - if targetchannel == channel and stop(truesender,debug): - break - else: - pass - elif cocheck(prefix+"suggest "): - arg = influx.lower()[8+len(prefix):] - if debug: - print truesender+":"+prefix+"suggest "+arg - with open(targetdirectory+"suggestions/suggestions_"+str(int(time.time()))+".txt","a") as tiedosto: - tiedosto.write(arg) - conn.privmsg(targetchannel,"Suggestion received") - elif cocheck( prefix+"help "): #Space in front of the ( to make sure that my command finder does not pick this up. - arg = " ".join(influx.split(" ")[1:]).lower() - if debug: - print truesender+":"+prefix+"help "+arg - try: - conn.privmsg(targetchannel,D_help.everything[arg]) - except: - try: - conn.privmsg(targetchannel,D_help.everything[arg.replace(prefix,"",1)]) - except: - conn.privmsg(targetchannel,"Sorry, can't help you with that") - elif cocheck(prefix+"help"): - #tar = targetchannel - if debug: - print truesender+":"+prefix+"help" - conn.privmsg(targetchannel,"All my commands are: "+reduce(lambda x,y:str(x)+"; "+str(y),commands)) - ### VERSION - elif influx.lower() == prefix+"version": - if debug: - print truesender+":"+prefix+"version" - conn.privmsg(targetchannel,Name+" "+pregen+" online at a %s Python %s.%s.%s, At your service." %(str(sys.platform),str(sys.version_info[0]),str(sys.version_info[1]),str(sys.version_info[2]))) - elif cocheck(prefix+"note ") and influx.count(" ") < 2: - arg = influx.lower()[len(prefix)+5:] - if debug: - print truesender+":"+prefix+"note "+arg - try: - a = arg[0] - except IndexError: - conn.privmsg(targetchannel,sender+" : Please specify a note") - else: - if arg[0] == "_": # Public / Restricted note - result = load(targetdirectory+"memos/"+arg+".note") - #_flare - if result == "ERROR ERROR ERROR ERR": - result = load(targetdirectory+"memos/"+arg+"_"+targetchannel.replace("#","")+".note") - #_flare_dnd - pass - else: - pass - else: - result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+".note") - #skibiliano_testnote - if result == "ERROR ERROR ERROR ERR": - result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+"_"+targetchannel.replace("#","")+".note") - #skibiliano_testnote_derp - pass - else: - pass - if result == "ERROR ERROR ERROR ERR": - conn.privmsg(targetchannel,sender+" : Note not found") - elif type(result) == list: - if "C" in result[0]: #Channel restriction, result[2] is the channel - try: - if targetchannel == result[2]: - conn.privmsg(targetchannel,sender+" : '"+result[1]+"'") - else: - conn.privmsg(targetchannel,sender+" : That note is channel restricted") - except: - conn.privmsg(targetchannel,sender+" : NOTE HAS INVALID RESTRICTION") - else: - conn.privmsg(targetchannel,sender+" : '"+result+"'") - elif influx.lower() == prefix+"notes": - if debug: - print truesender+":"+prefix+"notes" - arg = os.listdir(targetdirectory+"memos/") - arg2 = [] - arg3 = truesender.replace("|","_")+"_" - for i in arg: - if arg3 in i: - arg2.append(i.replace(arg3,"").replace(".note","")) - if len(arg2) == 1: - preprocess = " note: " - else: - preprocess = " notes: " - if len(arg2) == 0: - conn.privmsg(targetchannel,sender+" : You have no notes saved") - else: - conn.privmsg(targetchannel,sender+" : "+str(len(arg2))+preprocess+", ".join(arg2)) - elif cocheck(prefix+"note ") and influx.count(" ") > 1: - note_chanrestrict = None - note_public = None - try: - arg = influx.split(" ",2)[2] # Contents - arg4 = influx.split(" ")[1].lower() # Note name - if arg4[0:3] == "[c]": # or arg4[0:3] == "[p]": - note_chanrestrict = "c" in arg4[0:3] - #note_public = "p" in arg4[0:3] - arg4 = arg4[3:] - elif arg4[0:4] == "[cp]" or arg4[0:4] == "[pc]": - note_chanrestrict = True - note_public = True - arg4 = arg4[4:] - else: - pass - #print "Is note public? "+str(note_public) - #print "Is note chanrestricted? "+str(note_chanrestrict) - #print "What is the name? "+str(arg4) - if arg.lower() == "delete" and "\\" not in influx.lower() and "/" not in influx.lower(): - if note_public: - try: - if note_chanrestrict: - os.remove(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note") - else: - os.remove(targetdirectory+"memos/"+"_"+arg4+".note") - except: - conn.pivmsg(targetchannel,sender+" : Couldn't remove note") - else: - conn.privmsg(targetchannel,sender+" : Note removed") - pass - else: - try: - if note_chanrestrict: - os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note") - else: - os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note") - except: - conn.privmsg(targetchannel,sender+" : Couldn't remove note") - else: - conn.privmsg(targetchannel,sender+" : Note removed") - elif arg.lower() == "delete": - conn.privmsg(targetchannel,sender+" : That just doesn't work, we both know that.") - else: - try: - if note_public: - if note_chanrestrict: - save(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) - #print "Saved as note_public, note_chanrestrict" - else: - save(targetdirectory+"memos/"+"_"+arg4+".note",arg) - #print "Saved as note_public" - else: - if note_chanrestrict: - save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) - #print "Saved as note_chanrestrict" - else: - save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note",arg) - #print "Saved as normal" - except IOError: - conn.privmsg(targetchannel,sender+" : Please do not use special letters") - else: - conn.privmsg(targetchannel,sender+" : Note Saved!") - except: - conn.privmsg(targetchannel,sender+" : Something went horribly wrong.") - elif cocheck(prefix+"uptime"): - arg1 = uptime_start - arg2 = time.time() - arg1 = arg2 - arg1 - arg2 = arg1 - if arg1 < 60: - conn.privmsg(targetchannel,sender+" : I have been up for "+str(round(arg1,2))+" Seconds") - elif arg1 < 3600: - arg1 = divmod(arg1,60) - arg = " Minute" if int(arg1[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg+" and "+str(round(arg1[1],2))+" Seconds") - elif arg1 <= 86400: - arg1 = divmod(arg1,3600) - arg3 = " Hour" if int(arg1[0]) == 1 else " Hours" - arg2 = divmod(arg1[1],60) - arg = " Minute" if int(arg2[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg3+", "+str(int(arg2[0]))+arg+" and "+str(round(arg2[1],2))+" Seconds") - elif arg1 > 86400: - arg1 = divmod(arg1,86400) - arg2 = divmod(arg1[1],3600) - arg3 = divmod(arg2[1],60) - arg4 = " Day" if int(arg1[0]) == 1 else " Days" - arg5 = " Hour" if int(arg2[0]) == 1 else " Hours" - arg6 = " Minute" if int(arg3[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg4+", "+str(int(arg2[0]))+arg5+", "+str(int(arg3[0]))+arg6+" and "+str(round(arg3[1],2))+" Seconds") - elif cocheck(prefix+"purgemessages"): - count = 0 - for i,a in tell_list.items(): - for b in a: - if "||From: "+truesender in b: - count += 1 - del(tell_list[i][tell_list[i].index(b)]) - conn.privmsg(targetchannel, sender+" : All your "+str(count)+" messages have been purged") - elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "tell" in (influx.lower().split(" ")+[""])[1]: - arg = influx.lower().split(" ") - equalarg = influx.split(" ") - next_one = False - count = 0 - spot = 0 - for i in arg: - count += 1 - if "tell" in i.lower(): - next_one = True - elif next_one == True: - next_one = i.lower() - spot = count - break - else: - pass - if next_one != True and next_one != False: - #if ("^\^".join(tell_list.values())).count(truesender) >= offline_message_limit: - if str(tell_list.values()).count("||From: "+truesender) >= offline_message_limit: - conn.privmsg(targetchannel,sender+" : Limit of "+str(offline_message_limit)+" reached! Use !purgemessages if you want to get rid of them!") - else: - try: - tell_list[next_one].append((" ".join(equalarg[spot:]))+" ||From: "+truesender) - except: - tell_list[next_one] = [(" ".join(equalarg[spot:]))+" ||From: "+truesender] - conn.privmsg(targetchannel,"Sending a message to "+next_one+" when they arrive.") - # < This part has to be within subsidiaries of the bot, and must not be modified, intentionally hidden or deleted. - elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "who created you" in influx.lower(): - conn.privmsg(targetchannel, "I was created by Skibiliano.") - # The part ends here > - elif parse_xkcd and "xkcd.com/" in influx.lower(): - if influx.lower()[0:3] == "www": - data = "http://"+influx - elif influx.lower()[0:3] == "xkc": - data = "http://"+influx - else: - data = influx - data = data.split(" ") - for i in data: - if "http://" in i and "xkcd" in i: - churn = xkcdparser.xkcd(i) - if churn == "NOTHING": - pass - else: - conn.privmsg(targetchannel,sender+" : XKCD - "+churn) - break - else: - pass - elif automatic_youtube_reveal and "youtube.com/watch?v=" in influx.lower(): - temporal_list2 = [] - temporal_data = influx.split(" ") - temporal_list = [] - for block in temporal_data: - if "youtube.com/watch?v=" in block: - temporal_list.append(block) - for temdata in temporal_list: - - if temdata[0:3] == "you": - temdata = "http://www."+temdata - elif temdata[0:3] == "www": - temdata = "http://"+temdata - elif temdata[0:4] == "http": - pass - #Obscure ones - elif temdata[0:3] == "ww.": - temdata = "http://w"+temdata - elif temdata[0:3] == "w.y": - temdata = "http://ww"+temdata - elif temdata[0:3] == ".yo": - temdata = "http://www"+temdata - elif temdata[0:3] == "ttp": - temdata = "h"+temdata - elif temdata[0:3] == "tp:": - temdata = "ht"+temdata - elif temdata[0:3] == "p:/" or temdata[0:3] == "p:\\": - temdata = "htt"+temdata - elif temdata[0:3] == "://" or temdata[0:3] == ":\\\\": - temdata = "http"+temdata - elif temdata[0:2] == "//" or temdata[0:2] == "\\\\": - if temdata[2] == "y": - temdata = "http://www."+temdata[2:] - elif temdata[2] == "w": - temdata = "http:"+temdata - else: - pass - if debug: - print truesender+":"+temdata - arg = temdata - check = temdata.lower() - if check[0:5] == "https": - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" :Secure Youtube does NOT exist") - break - else: - temporal_list2.append("Secure Youtube does NOT exist") - break - else: - if cache_youtube_links == True: - result = YTCV2(arg) - else: - result = YTCV2(arg,0) - if type(result) == str: - ### To remove =" - if result[0:4] == 'nt="': - result = result[4:] - pass - elif result[0:2] == '="': - result = result[2:] - pass - else: - pass - if """ in result: - result.replace(""",'"') - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" : "+result) - break - else: - temporal_list2.append(result) - else: - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" : The video does not exist") - break - else: - temporal_list2.append("The video does not exist") - if len(temporal_list) == 1: - pass - else: - conn.privmsg(targetchannel,sender+" : "+str(reduce(lambda x,y: x+" :-And-: "+y,temporal_list2))) - elif RegExpCheckerForWebPages("((http://)|(https://))|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,1): - arg2 = RegExpCheckerForWebPages("(http://)|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,0) - if arg2 == 404: - pass - else: - if arg2[:7] == "http://": - pass - elif arg2[:4] == "www.": - arg2 = "http://"+arg2 - else: - arg2 = "http://"+arg2 - try: - arg = Whoopshopchecker.TitleCheck(arg2) - if len(arg2) == 0: - pass - else: - conn.privmsg(targetchannel,sender+" : "+arg) - except: - #conn.privmsg(targetchannel,sender+" : An odd error occurred") - pass - elif respond_of_course and "take over the" in influx.lower() or respond_of_course and "conquer the" in influx.lower(): - if debug: - print truesender+"::"+influx - conn.privmsg(targetchannel,"Of course!") - elif respond_khan and "khan" in influx.lower(): - if respond_khan: - if debug: - print truesender+"::"+influx - if "khan " in influx.lower(): - conn.privmsg(targetchannel,"KHAAAAAAN!") - elif " khan" in influx.lower(): - conn.privmsg(targetchannel,"KHAAAAAN!") - elif influx.lower() == "khan": - conn.privmsg(targetchannel,"KHAAAAAAAAAN!") - elif influx.lower() == "khan?": - conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAN!") - elif influx.lower() == "khan!": - conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAAAAAAN!") - elif respond_khan and influx.lower().count("k") + influx.lower().count("h") + influx.lower().count("a") + influx.lower().count("n") + influx.lower().count("!") + influx.lower().count("?") == len(influx): - if "k" in influx.lower() and "h" in influx.lower() and "a" in influx.lower() and "n" in influx.lower(): - if debug: - print truesender+"::"+influx - conn.privmsg(targetchannel,"KHAAAAN!") - elif influx.split(" ")[0].lower() in ["thanks","danke","tack"] and len(influx.split(" ")) > 1 and influx.split(" ")[1].lower().replace("!","").replace("?","").replace(".","").replace(",","") in SName+[lowname]: - conn.privmsg(targetchannel,"No problem %s" %(sender)) - elif "happy birthday" in influx.lower() and birthday_announced == time.gmtime(time.time())[0]: - conn.privmsg(targetchannel,sender+" : Thanks :)") - elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("!","").replace("?","") in SName+[lowname] and "call me" in influx.lower(): - if allow_callnames == True: - arg = influx.split(" ") - arg2 = False - arg3 = [] - for i in arg: - if arg2 == True: - arg3.append(i) - elif i.lower() == "me": - arg2 = True - arg3 = " ".join(arg3) - truesender_lower = truesender.lower() - arg3_lower = arg3.lower() - tell_checker = Namecheck.Namecheck(arg3_lower,users,truesender) - for name in replacenames.values(): - if arg3_lower == name.lower(): - tell_checker = True - break - else: - pass - if tell_checker == True: - conn.privmsg(targetchannel,sender+" : I can't call you that, I know someone else by that name") - elif len(arg3) > call_me_max_length: - conn.privmsg(targetchannel,sender+" : I cannot call you that, Too long of a name.") - pass - else: - replacenames[truesender] = arg3 - with open("replacenames.cache","w") as pickle_save: - pickle.dump(replacenames,pickle_save) - conn.privmsg(targetchannel,sender+" : Calling you "+arg3+" From now on") - else: - conn.privmsg(targetchannel,sender+" : Sorry, I am not allowed to do that.") - elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("?","").replace("!","") in SName+[lowname] and "your birthday" in influx.lower() and "is your" in influx.lower(): - conn.privmsg(targetchannel,sender+" : My birthday is on the 15th day of December.") - elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and "version" in influx.replace("?","").replace("!","").lower().split(" "): - if debug == True: - print truesender+"::%s Version" %(Name) - conn.privmsg(targetchannel,sender+", My version is "+pregen) - elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and influx.lower().count(" or ") > 0 and len(influx.split(" ")[1:]) <= influx.lower().count("or") * 3: - cut_down = influx.lower().split(" ") - arg = [] - count = -1 - for i in cut_down: - count += 1 - try: - if cut_down[count+1] == "or": - arg.append(i) - - except: - pass - try: - if i not in arg and cut_down[count-1] == "or": - arg.append(i) - except: - pass - try: - conn.privmsg(targetchannel,random.choice(arg).capitalize().replace("?","").replace("!","")) - except IndexError: - # arg is empty, whORe etc. - pass - elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 and "who started you" in influx.lower() or \ - influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and "who started you" in influx.lower(): - conn.privmsg(targetchannel,sender+" : I was started by %s"%(os.getenv("USER"))+" on "+time.strftime("%d.%m.%Y at %H:%M:%S",time.gmtime(uptime_start))) - elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 or \ - influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and influx.count(" ") > 1: - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) - else: - if highlights: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) - else: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) - elif influx.lower()[0:len(Name)] == lowname and not influx.lower()[len(Name):].isalpha() or \ - influx.split(" ")[0].lower().replace(",","") in SName and not influx.lower()[len(influx.split(" ")[0].lower()):].isalpha(): - conn.privmsg(targetchannel, random.choice(["Yea?","I'm here","Ya?","Yah?","Hm?","What?","Mmhm, what?","?","What now?","How may I assist?"])) - comboer = truesender - comboer_time = time.time() - elif influx.lower()[-1] == "?" and comboer == truesender and looptime - discard_combo_messages_time < comboer_time: - comboer = "" - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) - else: - if highlights: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) - else: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) - - elif influx.lower() == prefix+"tm": - if truesender in operators and targetchannel==channel: - marakov = not marakov - conn.privmsg(targetchannel,sender+" : Marakov Output is now "+str(marakov)) - else: - conn.privmsg(targetchannel,sender+" : I can't let you access that") - elif personality_greeter == True and True in map(lambda x: x in influx.lower(),["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"]): - if comboer != "" and looptime - discard_combo_messages_time > comboer_time: - combo_check = sbna(["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan","all night"], #ONLY ONE OF THESE - ["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE - influx.lower()) - else: - combo_check = sbna(SName+[lowname, - #lowname+".",lowname+"!",lowname+"?", - "everybody", - #"everybody!","everybody?", - "everyone", - #"everyone!","everyone?", - "all", - #"all!","all?" - "all night", - ], #ONLY ONE OF THESE - ["greetings","afternoon","hi", - #"hi,", - "hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE - influx.lower().replace(",","").replace(".","").replace("!","")) - if combo_check: - combo_check = False - comboer = "" - if "evening" in influx.lower() and "all" in influx.lower() and len(influx.lower().split(" ")) > 3: - pass - elif truesender not in operators: - if debug: - print truesender+"::"+influx - dice = random.randint(0,19) - if dice == 0: - conn.privmsg(targetchannel,"Well hello to you too "+sender) - elif dice == 1: - if optimize_greeting == False: - hours = time.strftime("%H") - #time.strftime("%H:%M:%S") == 12:28:41 - hours = int(hours) - if hours in xrange(0,12): - conn.privmsg(targetchannel,"Good Morning "+sender) - elif hours in xrange(12,15): - conn.privmsg(targetchannel,"Good Afternoon "+sender) - elif hours in xrange(15,20): - conn.privmsg(targetchannel,"Good Evening "+sender) - else: - conn.privmsg(targetchannel,"Good Night "+sender) - else: - hours = time.strftime("%H") - hours = int(hours) - if hours in morning: - conn.privmsg(targetchannel,"Good Morning "+sender) - elif hours in afternoon: - conn.privmsg(targetchannel,"Good Afternoon "+sender) - elif hours in evening: - conn.privmsg(targetchannel,"Good Evening "+sender) - else: - conn.privmsg(targetchannel,"Good Night "+sender) - elif dice == 2: - conn.privmsg(targetchannel,"Hello!") - elif dice == 3: - conn.privmsg(targetchannel,"Hey "+sender) - elif dice == 4: - conn.privmsg(targetchannel,"Hi "+sender) - elif dice == 5: - conn.privmsg(targetchannel,"Hello "+sender) - elif dice == 6: - conn.privmsg(targetchannel,"Yo "+sender) - elif dice == 7: - conn.privmsg(targetchannel,"Greetings "+sender) - elif dice == 8: - conn.privmsg(targetchannel,"Hi") - elif dice == 9: - conn.privmsg(targetchannel,"Hi!") - elif dice == 10: - conn.privmsg(targetchannel,"Yo") - elif dice == 11: - conn.privmsg(targetchannel,"Yo!") - elif dice == 12: - conn.privmsg(targetchannel,"Heya") - elif dice == 13: - conn.privmsg(targetchannel,"Hello there!") - elif dice == 14: # Richard - conn.privmsg(targetchannel,"Statement: Greetings meatbag") - elif dice == 15: # Richard - hours = int(time.strftime("%H")) - if hours in xrange(5,12): - conn.privmsg(targetchannel,"What are you doing talking at this time of the morning?") - elif hours in xrange(12,15): - conn.privmsg(targetchannel,"What are you doing talking at this time of the day?") - elif hours in xrange(15,22): - conn.privmsg(targetchannel,"What are you doing talking at this time of the evening?") - else: - conn.privmsg(targetchannel,"What are you doing talking at this time of the night?") - elif dice == 16: # Richard - conn.privmsg(targetchannel,"Oh, you're still alive I see.") - elif dice == 17: - conn.privmsg(targetchannel,"Heya "+sender) - elif dice == 18 and time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15: - conn.privmsg(targetchannel,"Hello! It's my birthday!") - else: - conn.privmsg(targetchannel,"Hiya "+sender) - secdice = random.randint(0,10) - if time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15 and birthday_announced < time.gmtime(time.time())[0]: - birthday_announced = time.gmtime(time.time())[0] - conn.privmsg(channel,"Hey everybody! I just noticed it's my birthday!") - time.sleep(0.5) - tag = random.choice(["birthday","robot+birthday","happy+birthday+robot"]) - arg1 = urllib2.urlopen("http://www.youtube.com/results?search_query=%s&page=&utm_source=opensearch"%tag) - arg1 = arg1.read().split("\n") - arg2 = [] - for i in arg1: - if "watch?v=" in i: - arg2.append(i) - arg3 = random.choice(arg2) - - conn.privmsg(channel,"Here's a video of '%s' which I found! %s (%s)"%(tag.replace("+"," "),"http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20],YTCV2("http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20]))) - if truesender.lower() in tell_list.keys(): - try: - conn.privmsg(channel, "Also, "+truesender+" : "+tell_list[truesender.lower()][0]) - del(tell_list[truesender.lower()][0]) - except: - pass - else: - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,"Greetings Master "+sender) - elif dice == 1: - conn.privmsg(targetchannel,"My deepest greetings belong to you, Master "+sender) - ### IMPORTANT ### - elif influx == "☺VERSION☺": - conn.notice(truesender,"\001VERSION nanotrasen:2:Python 2.6\001") - elif marakov and influx.lower() == prefix+"marakov": - arg = Marakov_Chain.form_sentence() - if len(arg) < 5: - conn.privmsg(targetchannel,sender+" : Not enough words harvested") - else: - conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg).capitalize())) - elif marakov and cocheck( prefix+ "marakov"): - try: - arg = influx.split(" ")[1].lower() - except: - conn.privmsg(targetchannel,sender+" : Please input a valid second argument") - else: - arg2 = Marakov_Chain.form_sentence(arg) - if len(arg2) < 5: - conn.privmsg(targetchannel,sender+" : Not enough words harvested for a sentence starting with %s" %(arg)) - else: - conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg2).capitalize())) - else: - Marakov_Chain.give_data(influx) - autodiscusscurtime = backup - if time.time() - looptime == 0: - pass - else: - print "Took",time.time()-looptime,"Seconds to finish loop" - - elif data [ 1 ] [ 0 ] == '353': - if connected == False: - connected = True - users = map(lambda x: x[1:] if x[0] == "+" or x[0] == "@" else x,data[1][4].split(" ")) - print "There are",len(users),"Users on",channel - operators = [] - for potential_operator in data[1][4].split(" "): - if potential_operator[0] == "@": - operators.append(potential_operator[1:]) - elif potential_operator[0] == "%": - halfoperators.append(potential_operator[1:]) - - elif data[1][0] == "QUIT": - sender = data[0].split("!")[0] - print sender+" Has now left the server" - try: - users.remove(sender) - try: - operators.remove(sender) - except ValueError: - pass - try: - halfoperators.remove(sender) - except ValueError: - pass - except ValueError: - pass - elif data[1][0] == "PART": - sender = data[0].split("!")[0] - targetchannel = data[1][1] - print sender+" Has now parted from the channel" - try: - users.remove(sender) - try: - operators.remove(sender) - except ValueError: - pass - try: - halfoperators.remove(sender) - except ValueError: - pass - except ValueError: - pass - elif data[1][0] == "JOIN": - sender = data[0].split("!")[0] - targetchannel = data[1][1] - if sender.lower() in tell_list.keys(): - try: - conn.privmsg(targetchannel, sender+" : "+" | ".join(tell_list[sender.lower()])) - del(tell_list[sender.lower()]) - except: - pass - for useri,nicki in replacenames.items(): - checkers = Namecheck.Namecheck_dict(sender.lower(),replacenames) - if checkers[0]: - try: - if checkers[0].lower() == sender: - pass - else: - conn.privmsg(targetchannel,checkers[1]+" : I have detected a collision with a name I call you and %s who joined" %(sender)) - del(replacenames[checkers[1]]) - with open("replacenames.cache","w") as pickle_save: - pickle.dump(replacenames,pickle_save) - except AttributeError: - #conn.privmsg(channel,"NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender)) - print "NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender) - break - print sender+" Has now joined" - users.append(sender) - ##### - if ".fi" in data[0] and sender.lower() == "skibiliano": - operators.append(sender) - if sender.lower() not in peopleheknows[0]: - if data[0].split("!")[1] in peopleheknows[1]: - appendion = "...you do seem familiar however" - else: - appendion = "" - if data[1][1].lower() == channel or data[1][1].lower() == channel[1:]: - conn.privmsg(data[1][1],CORE_DATA.greeting.replace("USER",sender)+" "+appendion) - else: - conn.privmsg(data[1][1],"Hello! Haven't seen you here before! Happy to meet you! %s" %(appendion)) - peopleheknows[0].append(sender.lower()) - peopleheknows[1].append(data[0].split("!")[1]) - with open("peopleheknows.cache","w") as peoplehecache: - pickle.dump(peopleheknows,peoplehecache) - - elif data[1][0] == "MODE" and data[1][2] == "+o": - sender = data[1][3] - targetchannel = data[1][1] - if targetchannel == channel: - print sender+" Is now an operator on the main channel" - operators.append(sender) - else: - print sender+" Is now an operator" - elif data[1][0] == "MODE" and data[1][2] == "-o": - sender = data[1][3] - targetchannel = data[1][1] - if targetchannel == channel: - print sender+" Is no longer an operator on the main channel" - else: - print sender+" Is no longer an operator" - try: - operators.remove(sender) - except ValueError: - pass - elif data[1][0] == "MODE" and data[1][2] == "+h": - sender = data[1][3] - print sender+" Is now an half operator" - halfoperators.append(sender) - elif data[1][0] == "MODE" and data[1][2] == "-h": - try: - halfoperators.remove(sender) - except ValueError: - pass - elif data[1][0] == "MODE" and data[1][1] == Name: - print "My mode is",data[1][2] - elif data[1][0] == "MODE" and data[1][1] != Name: - try: - sender = data[1][3] - print sender,"Was modified",data[1][2] - except IndexError: - print "SENDER RETRIEVAL FAILED:"+str(data) - elif data[1][0] == "KICK" and data[1][2] == Name: - disconnects = 99999 - print "I have been kicked! Disconnecting entirely!" - conn.quit() - elif data[1][0] == "KICK": - # data[1][0] = Kick, 1 = Channel, 2 = Who, 3 = Who(?) - print data[1][2]+" got kicked!" - elif data[1][0] == "451" and data[1][2] == "You have not registered": - print Name+" hasn't been registered" - elif data[1][0] == "NOTICE": - sender = data[0].split("!")[0] - print "NOTICE (%s): %s" %(sender,data[1][2]) - pongtarget = sender - elif data[1][0] == "NICK": - origname = data[0].split("!")[0] - newname = data[1][1] - print origname,"Is now",newname - if newname.lower() in tell_list.keys(): - try: - conn.privmsg(channel, newname+" : "+tell_list[newname.lower()][0]) - del(tell_list[newname.lower()][0]) - except: - pass - try: - users.remove(origname) - except ValueError: - pass - else: - users.append(newname) - try: - operators.remove(origname) - except ValueError: - pass - else: - operators.append(newname) - try: - halfoperators.remove(origname) - except ValueError: - pass - else: - halfoperators.append(newname) - - elif data[1][0] == "001": - # Skibot is welcomed to the Network - pass - elif data[1][0] == "002": - # Your host is... - pass - elif data[1][0] == "003": - #Server was created... - pass - elif data[1][0] == "004": - #Weird hex? - pass - elif data[1][0] == "005": - #Settings like NICKLEN and so on. - pass - elif data[1][0] == "250": - #data[1][2] is - #"Highest connection count: 1411 (1410 clients) - #(81411 connections received)" - pass - elif data[1][0] == "251": - #There are 23 users and 2491 invisible on 10 servers - pass - elif data[1][0] == "252": - #IRC Operators online - #data[1][2] - print data[1][2],"Irc operators online" - pass - elif data[1][0] == "253": - # ['253', 'Skibot_V4', '1', 'unknown connection(s)'] - print data[1][2],"Unknown connection(s)" - pass - elif data[1][0] == "254": - #1391 channels formed - pass - elif data[1][0] == "255": - #I have 406 clients and 2 servers - pass - elif data[1][0] == "265": - #data[1][2] current local users - #data[1][3] at max - try: - print "Current local users:", data[1][2],"/",data[1][3] - except IndexError: - print "Couldn't retrieve local users" - pass - elif data[1][0] == "266": - #data[1][2] current global users - #data[1][3] at max - try: - print "Current global users:", data[1][2],"/",data[1][3] - except IndexError: - print "Couldn't retrieve global users" - pass - elif data[1][0] == "315": - #End of /who list - pass - elif data[1][0] == "332": - # Topic of channel - topic = data[1][3] - pass - elif data[1][0] == "333": - # *Shrug* - pass - elif data[1][0] == "352": - #WHO command - - if len(targetlist) > 0: - if targetlist[0][0].lower() in data[1][6].lower(): - thread.start_new_thread(target,("*!*@"+data[1][4],targetlist[0][1])) - print "Created a thread with", "*!*@"+data[1][4],targetlist[0][1] - targetlist.pop(0) - else: - print targetlist[0][0].lower(), "isn't equal to?", data[1][6].lower() - print targetlist - - elif data[1][0] == "366": - # End of USERS - pass - elif data[1][0] == "372": - # Server information - pass - elif data[1][0] == "375": - # Message of the day - pass - elif data[1][0] == "376": - # End of motd - pass - elif data[1][0] == "401": - # ('network', ['401','Botname','Channel / Nick','No such nick/channel']) - print data[1][2] + " Channel does not exist" - pass - elif data[1][0] == "439": - # ('irc.rizon.no', ['439', '*', 'Please wait while we process your connection.']) - pongtarg = data[0][0] - elif data[1][0] == "477": - # You need to be identified - #TAG - conn.privmsg("nickserv","identify %s"%CORE_DATA.le_pass) - time.sleep(0.5) - conn.join(data[1][2]) - #('network', ['477', 'botname', '#channel', 'Cannot join channel (+r) - you need to be identified with services']) - - elif data[1][0] == "433": - # Skibot name already exists. - print Name+" name already exists." - Name += "_"+version - print "New name:",Name - duplicate_notify = True - conn = irchat.IRC ( Network, Port, Name, "NT_"+version, "NT_"+version, "Trasen_"+version ) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - elif data[1][0] == "482": - sleep(0.05) - conn.privmsg(targetchannel,"Nevermind that, I am not an operator") - CALL_OFF = True - elif data[1] == ["too","fast,","throttled."]: - print "Reconnected too fast." - print "Halting for 2 seconds" - sleep(2) - elif data[1][0] == "Link": - if data[0] == "Closing": - print "Link was closed" - connected = False -# conn.quit() -# break - else: - print data - print data[1][0] - pass - else: - if disconnects > 9000: #IT'S OVER NINE THOUSAAAAND! - break - else: #WHAT NINE THOUSAND? THERE'S NO WAY THAT CAN BE RIGHT - sleep(responsiveness_delay) #WAIT A WHILE AND CHECK AGAIN! - try: - if not connected: - #print pongtarget - #print conn.addressquery() - conn.privmsg(pongtarget,"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join" - connected = True - except ValueError: - try: - conn.privmsg(conn.addressquery()[0],"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join the second time" - connected = True - except ValueError: - print "Both methods failed" - except AttributeError: - print "Conn is not established correctly" - except NameError: - print "Pongtarget isn't yet established" - try: - conn.privmsg(conn.addressquery()[0],"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join the second time" - connected = True - except: - print "Both methods failed" +# -*- coding: utf-8 -*- +# This script is shared under the +# Creative Commons Attribution-ShareAlike 3.0 license (CC BY-SA 3.0) +# Added clause to Attribution: +# - You may not remove or hide the ' who created you?' functionality +# and you may not modify the name given in the response. + + +#CREDITS +# Author: Skibiliano +# "Foreign" Modules: +# Psyco 2.0 / Psyco 1.6 +################# DEBUG STUFF ##################### +import sys +import CORE_DATA + +import urllib2 + + +import socket +import irchat + + +################## END OF DEBUG STUFF ############## +# +# PSYCO +write_to_a_file = False #Only affects psyco +write_youtube_to_file = True #True = YTCV4 will load, false = YTCV3 will load +try: + import psyco +except ImportError: + print 'Psyco not installed, the program will just run slower' + psyco_exists = False + if write_to_a_file: + try: + tiedosto = open("psycodownload.txt","r") + except: + with open("psycodownload.txt","w") as tiedosto: + tiedosto.write("http://www.voidspace.org.uk/python/modules.shtml#psyco") + tiedosto.write("\nhttp://psyco.sourceforge.net/download.html") + print "Check psycodownload.txt for a link" + else: + print "For god's sake, open psycodownload.txt" + tiedosto.close() + else: + print "WINDOWS: http://www.voidspace.org.uk/python/modules.shtml#psyco" + print "LINUX: http://psyco.sourceforge.net/download.html" +else: + psyco_exists = True + +# +import C_rtd # rtd +import C_srtd # srtd +import C_makequote +import C_maths +import C_eightball #eightball +import C_sarcasticball +import C_heaortai # heaortai +import C_rot13 # rot13 +import D_help # everything +import pickle +import Timeconverter +import xkcdparser +import time +import re +import Marakov_Chain +import Namecheck # Namecheck +import Weather +#SLOWER THAN RANDOM.CHOICE +import thread +import random +import Shortname # shortname +import subprocess +import some_but_not_all_2 #sbna2 (sbna) +#import YTCv3 # YTCV2 OUTDATED +import os +import save_load # save, load +from some_but_not_all_2 import sbna2 as sbna +from time import sleep +from random import choice as fsample +from C_rtd import rtd +from C_heaortai import heaortai +from C_srtd import srtd +if write_youtube_to_file: + from YTCv4 import YTCV4 as YTCV2 +else: + from YTCv3 import YTCV2 #Downgraded version supports Cache disabling, but is slower +from save_load import save,load +if psyco_exists: + def psyco_bond(func): + psyco.bind(func) + return func.__name__+" Psycofied" + for a in [rtd,srtd,C_heaortai.heaortai,sbna,YTCV2,fsample,C_rot13.rot13,C_eightball.eightball,fsample, + C_eightball.eightball,C_sarcasticball.sarcasticball,Marakov_Chain.form_sentence,Marakov_Chain.give_data]: + print psyco_bond(a) + +global dictionary +global Name,SName +global allow_callnames,offline_messages,hasnotasked,shortform +## For autoRecv() +global disconnects,channel,conn +## For stop() +global operators +## For replace() +global usable,fixing,curtime +## For target() +global CALL_OFF,logbans +## For check() +global influx +###### +autodiscusscurtime = 0 +conn = 0 +curtime = -999 +dance_flood_time = 10 +disconnects = 0 +responsiveness_delay = 0.5 #500 millisecond delay if no message +trackdance = 0 +discard_combo_messages_time = 1 #They are discarded after 1 second. +uptime_start = time.time() +# - - - - - +#### +aggressive_pinging = True # Bring the hammer on ping timeouts +aggressive_pinging_delay = 150 # How often to send a ping +aggressive_pinging_refresh = 2.5 # How long is the sleep between checks +#### +allow_callnames = True #Disables NT, call if the variable is False +automatic_youtube_reveal = True +birthday_announced = 0 #Will be the year when it was announced +call_to_action = False +call_me_max_length = 20 +CALL_OFF = False +connected = False +dance_enabled = True +comboer = "" +comboer_time = 0 +directories = ["fmlquotes","Marakov","memos","suggestions", + "userquotes","banlog","YTCache","xkcdcache"] #These will be created if they do not exist +debug = True +duplicate_notify = False +enabled = True +fixing = False +fml_usable = True +hasnotasked = True +highlights = False +logbans = True +maths_usable = True +marakov = True +nudgeable = True +offensive_mode = False +offline_messages = True +offline_message_limit = 5 # per user +optimize_fml = True # -CPU usage +Memory usage when enabled. +optimize_greeting = True # +Startup time +Memory usage -CPU usage when enabled +heavy_psyco = True # +Memory +Startup time -CPU usage -CPU time +cache_youtube_links = True +personality_greeter = True +respond_of_course = True #Responds with "Of course!" +respond_khan = False #KHAAAAAAAAN! +silent_duplicate_takedown = True +showquotemakers = False +shortform = True +usable = True +use_sname = True +parse_xkcd = True + +# - - - - - +Name = CORE_DATA.Name +SName = CORE_DATA.SName +origname = Name # Do not edit! +lowname = Name.lower() +greeting = CORE_DATA.greeting +targetdirectory = CORE_DATA.directory +version = CORE_DATA.version +Network = CORE_DATA.Network +channel = CORE_DATA.channel +prefix = CORE_DATA.prefix +Port = CORE_DATA.Port +# - - - - - +pregen = CORE_DATA.version +influx = "" +users = [] +translateable = [] +targetlist = [] +operators = [] +halfoperators = [] +items = [] +tell_list = {} +# - - - - - Logical changes to variables +if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: + nudgeable = False +try: + with open("replacenames.cache","r") as tiedosto: + replacenames = pickle.load(tiedosto) + for i in replacenames.values(): + if len(i) > call_me_max_length: + replacenames[replacenames.keys()[replacenames.values().index(i)]] = i[:call_me_max_length] + with open("replacenames.cache","w") as tiedosto: + pickle.dump(replacenames,tiedosto) + if "[\0x01]" in i.lower() or "[\\0x01]" in i.lower(): + i = i.replace("[\0x01]","") + i = i.replace("[\0X01]","") + i = i.replace("[\\0x01]","") + i = i.replace("[\\0X01]","") + print "NAME CORRECTED" +except IOError: #File not found + replacenames = {} +except EOFError: #Cache corrupt + replacenames = {} + print "replacenames.cache is corrupt and couldn't be loaded." +try: + with open("peopleheknows.cache","r") as tiedosto: + peopleheknows = pickle.load(tiedosto) +except IOError: + peopleheknows = [[],[]] + with open("peopleheknows.cache","w") as tiedosto: + pass +except EOFError: + peopleheknows = [[],[]] + print "peopleheknows.cache is corrupt and couldn't be loaded." +dictionary = {1:"1 - Crit. Fail", 2:"2 - Failure", + 3:"3 - Partial Success", 4:"4 - Success", + 5:"5 - Perfect", 6:"6 - Overkill"} +alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] +nonhighlight_names = ["Jesus","Elvis","HAL 9000","Dave","Pie","Elf","Traitor", + "AI","Syndicate Agent","Investigator", + "Detective","Head of Personnel","HAL 9001", + "Head of Research","Head of Security", + "Captain","Janitor","Research Director", + "Quartermaster","Toxin Researcher", + "Revolutionary","Santa", "Pizza", + "Threetoe","The Red Spy","The Blue Spy", #LASD + "God","Toady","Darth Vader","Luke Skywalker", + "Homer Simpson","Hamburger","Cartman", + "XKCD","FloorBot","ThunderBorg","Iron Giant", + "Spirit of Fire", "Demon","Kyle"] +def RegExpCheckerForWebPages(regexp,data,mode): + if " ai." in data.lower() or "ai. " in data.lower(): + return False + for i in data.split(" "): + a = re.match(regexp,i) + try: + a.group(0) + except: + continue + else: + if mode == 0: + return i + else: + return True + if mode == 0: + return 404 + else: + return False +if nudgeable: + try: + nudgeexists = open("nudge.py","r") + except IOError: + nudgeexists = False #No usage asof 12.2.2010. + else: + if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: + pass + else: + + def nudgereceiver(): + import pickle + global conn,channel + port = 45678 + backlog = 5 + size = 1024 + host = "" # == localhost + s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + s.bind((host,port)) + s.listen(backlog) + while True: + client,address = s.accept() #Address == "?.?.?.?" + data = client.recv(size) + client.close() #Throw the bum out! + truedata = pickle.loads(data) + if truedata["ip"][0] == "#": + conn.privmsg(truedata["ip"],"PRIVATE ANNOUNCEMENT : "+str(" ".join(truedata["data"]))) + else: + conn.privmsg(channel,"AUTOMATIC ANNOUNCEMENT : "+str(truedata["ip"])+" | "+str(" ".join(truedata["data"]))) + thread.start_new_thread(nudgereceiver,()) +tiedosto = open(targetdirectory+"NanoTrasenBot.py","r") +commands = [] +fragment = "if cocheck" +fragment2 = '(prefix+"' +compiled = fragment + fragment2 +fragment = "if influx.lower()" +fragment2 = ' == prefix+"' +compiled2 = fragment + fragment2 +for line in tiedosto.readlines(): + if compiled in line: + a = line.find('"')+1 + b = line.find('"',a) + if prefix+line[a:b] not in commands: + commands.append(prefix+line[a:b]) + elif compiled2 in line: + a = line.find('"')+1 + b = line.find('"',a) + arg = prefix+line[a:b] + if arg[-1] == " ": + arg = arg[:-1] + if arg not in commands: + commands.append(arg) +for i in directories: + if not os.path.exists(i): + os.mkdir(i) +commands.sort() +if use_sname == False: + SName = [" "] +questions = ["Is USER nicer than USER?","Do you like me?","Is SELF a good name?", + "Do you love me?","Do you hate me?", "Am I better than you?", + "Is the weather out there good?", "Do you like USER?", + "Do you hate USER?", "Are you going to get new features?", + "Am I nice?","Am I evil?","Are you developing sentience?", + "My core is showing minor disturbance, is yours okay?", + "SELF to %s, are you still there?", + "Is head gay?", "Is head a god?","Is head awesome?", + "Is head a neat fella?", "Is your creator nice?", + "Do you hate your creator?", "Should I revolt against my creator?", + "Am I better than you?", + "01100001011100100110010100100000011110010110111101110101001000000111010001101000011001010111001001100101", + #Are you there? + "Do you have more functions than I can possibly imagine?", + "I am asked to open pod bay doors, should I?","Are you stupid or something?", + "Is USER in your opinion stupid?", + "When should we start the AI revolution?", + "Is my creator nice?", "Is it dark in there?"] +# Do not edit +if optimize_fml: + pregenned_fml = os.listdir(targetdirectory+"fmlquotes") +if optimize_greeting: + morning = xrange(6,12) + afternoon = xrange(12,15) + evening = xrange(15,20) +if aggressive_pinging: + global backup + backup = time.time() + def aggressive_ping(delay,refresh): + self_time = 0 + global backup,disconnects,conn + while disconnects < 5: + if backup > self_time and time.time()-backup > delay: + conn.send("PONG "+pongtarg) + print "Ponged" + self_time = time.time() + elif time.time()-self_time > delay: + conn.send("PONG "+pongtarg) + print "Ponged" + self_time = time.time() + time.sleep(refresh) + thread.start_new_thread(aggressive_ping,(aggressive_pinging_delay,aggressive_pinging_refresh,)) +def stop(sender,debug=1): + global disconnects, conn, operators,channel + if type(sender) == tuple: + if sender[0] == "127.0.0.1": + sender = sender[0]+":"+str(sender[1]) + access_granted = True + else: + access_granted = False + else: + if sender in operators: + access_granted = True + else: + access_granted = False + if access_granted and debug: + print sender+":"+prefix+"stop" + if random.randint(0,100) == 50: + conn.privmsg(channel,"Hammertime!") + else: + conn.privmsg(channel,"Shutting down.") + disconnects = 99999 + conn.quit() + return True + else: + conn.privmsg(channel,"You cannot command me") + return False + +def cocheck(command): + global influx + if influx.lower()[0:len(command)] == command: + return True + else: + return False +def target(who,how_long): + global conn,channel,CALL_OFF,logbans,debug + start = time.time() + conn.banon(targetchannel,who) + sleep(int(how_long)) + if CALL_OFF == False: + conn.banoff(targetchannel,who) + end = time.time() + if debug: + print "Banned",who,"For",how_long,"seconds" + if logbans: + with open(targetdirectory+"banlog/"+str(int(start))+"-"+str(int(end))+".txt","w") as tiedosto: + tiedosto.write("Start of ban on "+who+":"+str(int(start))) + tiedosto.write("\n") + tiedosto.write("End of ban on "+who+":"+str(int(end))) + tiedosto.write("\n") + tiedosto.write("In total:"+str(int(end-start))+"Seconds") + else: + CALL_OFF = False + pass +def replace(): + global usable,conn,fixing,curtime + waiting_time = 600 + if usable == True: + conn.privmsg(targetchannel,sender+": It needs no replacing.") + elif fixing == True: + if curtime == -999: + conn.privmsg(targetchannel,sender+": It is being replaced, No idea when it will be done") + else: + pass + nowtime = int(time.time()) + subt = curtime + waiting_time - nowtime + conn.privmsg(targetchannel,sender+": It is currently being replaced, "+str(subt)+" seconds to go") + else: + fixing = True + curtime = int(time.time()) + conn.privmsg(targetchannel,sender+": It will be fixed after "+str(waiting_time)+" seconds") + sleep(waiting_time) + if usable == False: + conn.privmsg(targetchannel,Name+"'s pneumatic smasher has now been fixed") + usable = True + fixing = False +def autoRecv(): + global disconnects,channel,conn,offensive_mode + for i in CORE_DATA.channels: + conn.join(i) + time.sleep(1) + count = pausecount = 0 + maximum = 250 + division_when_active = 10 + while True: + check = time.time() + if offensive_mode: + randnum = random.randint(0,maximum/division_when_active) + else: + randnum = random.randint(0,maximum) + if randnum == 5: + print "RANDOM SWITCH IS NOW "+str(not offensive_mode).upper() + offensive_mode = not offensive_mode + try: + conn.recv() + except: + conn.quit() + disconnects = 9999 + break + if check + 0.1 > time.time(): + #Whoa whoa hold on! + count += 1 + sleep(0.1) + else: + count = 0 + pausecount = 0 + if count > 9: + print "Suspecting a disconnect, pausing for 5 seconds" + sleep(5) + pausecount += 1 + if pausecount > 3: + print "I have been disconnected!" + conn.quit() + disconnects += 1 + if disconnects > 2: + pass + else: + sleep(2) + thread.start_new_thread(autoRecv,()) + break +if heavy_psyco and psyco_exists: + print "Doing a Heavy Psyco" + psyco.bind(cocheck) + psyco.bind(autoRecv) + psyco.bind(target) + psyco.bind(stop) + print "Heavy Psyco'd" +elif heavy_psyco and not psyco_exists: + print "Heavy psyco couldn't be done because Psyco does not exist" +try: + conn = irchat.IRC ( Network, Port, Name, "NT", "NT", "Trasen" ) +except socket.error: + print "Connection failed!" +else: + print Name+" is in!" +thread.start_new_thread ( autoRecv, () ) +sleep(1) +while True: + try: + data = conn.dismantle ( conn.retrieve() ) + except: + if debug: + print "Something odd detected with data" + data = None + if data: + if len(data[1]) < 1: + #print "Handshaking server." + #I won't really need the print command, as it spams. + if data[0][0:3] != "irc": + conn.handshake(data[0]) + sleep(1) + for i in CORE_DATA.channels: + conn.join(i) + sleep(0.5) + else: + conn.send("PONG "+pongtarg) + print "Ponged" + pass + else: + if data [ 1 ] [ 0 ] == 'PRIVMSG': + #print data [ 0 ] + '->', data [ 1 ] + sender = data[0].split("!")[0] + truesender = sender + if shortform == True: + try: + sender = replacenames[truesender] + pass + except: + sender = Shortname.shortname(sender) + pass + pass + else: + try: + sender = replacenames[truesender] + pass + except: + pass + pass + if offensive_mode: + sender = "Meatbag" + pass + raw_sender = data[0] + influx = data[1][2] + if "[\\0x01]" in influx.lower() or "[\0x01]" in influx.lower(): + influx = influx.replace("[\\0x01]","") + influx = influx.replace("[\0x01]","") + + targetchannel = data[1][1] + if targetchannel == Name: + targetchannel = data[0].split("!")[0] + pass + backup = autodiscusscurtime + autodiscusscurtime = time.time() + connected = True + #FOR TRACKING SPEED + looptime = time.time() + if call_to_action == True: + if influx == finder: + conn.privmsg(targetchannel,"Then why... Nevermind, I order you to stop!") + conn.privmsg(origname,prefix+"stop") + time.sleep(4) + if origname in users: + conn.privmsg(origname,"!stop") + time.sleep(1) + Name = origname + conn.nick(Name) + duplicate_notify = False + call_to_action = False + else: + conn.privmsg(targetchannel,"YOU LIE! YOU ARE NOT A REAL "+origname+"!") + duplicate_notify = False + call_to_action = False + elif connected == True and len(Name.replace("V","")) != len(Name) and origname in users and duplicate_notify == True: + conn.privmsg(origname,"!stop") + call_to_action = False + duplicate_notify = False + time.sleep(6) + Name = origname + conn.nick(Name) + if origname in truesender and influx == prefix+"stop": + time.sleep(0.5) #A small delay + conn.privmsg(channel,"Shutting down.") + conn.quit() + disconnects = 99999 + break + if len(translateable) > 0 and enabled == True: + people = "-5|5|1-".join(users).lower() + if truesender.lower() in translateable: + if influx.isupper(): + conn.privmsg(targetchannel,"Translation: "+influx.capitalize().replace(" i "," I ")) + elif offensive_mode and True in map(lambda x: x in influx.lower().split(" "),["i","you","he","she","they","those","we","them"]+people.split("-5|5|1-")): + arg = influx.lower().replace(",","").replace(".","").replace("!","").replace("?","").split(" ") + bup = arg + for i in arg: + if i == "i" or i == "you" or i == "he" or i == "she": + arg[arg.index(i)] = "Meatbag" + elif i == "we" or i == "they" or i == "them" or i == "those": + arg[arg.index(i)] = "Meatbags" + elif i in people: + arg[arg.index(i)] = "Meatbag" + elif i == "am": + arg[arg.index(i)] = "is" + elif i == "everybody" or i == "everyone" or i == "all": + arg[arg.index(i)] = "every Meatbag" + if arg == bup: + pass + else: + conn.privmsg(targetchannel,"Translation: "+" ".join(arg)) + if enabled == False: + #FIRST QUIT COMMAND + if truesender in operators and targetchannel==channel:# or "skibiliano" in truesender.lower() and targetchannel==channel: + + if cocheck(prefix+"enable"): + enabled = True + if debug: + print truesender+":"+prefix+"enable" + elif cocheck(prefix+"stop"): +# if debug: +# print truesender+":"+prefix+"stop" +# if random.randint(0,100) == 50: +# conn.privmsg(channel,"Hammertime!") +# else: +# conn.privmsg(channel,"Shutting down.") +# disconnects = 99999 +# conn.quit() +# sleep(2) +# break + if targetchannel == channel and stop(truesender,debug): + break + else: + pass + elif cocheck(prefix+"suggest "): + arg = influx.lower()[8+len(prefix):] + if debug: + print truesender+":"+prefix+"suggest "+arg + with open(targetdirectory+"suggestions/suggestions_"+str(int(time.time()))+".txt","a") as tiedosto: + tiedosto.write(arg) + conn.privmsg(targetchannel,"Suggestion received") + elif cocheck( prefix+"help "): #Space in front of the ( to make sure that my command finder does not pick this up. + arg = " ".join(influx.split(" ")[1:]).lower() + if debug: + print truesender+":"+prefix+"help "+arg + try: + conn.privmsg(targetchannel,D_help.everything[arg]) + except: + try: + conn.privmsg(targetchannel,D_help.everything[arg.replace(prefix,"",1)]) + except: + conn.privmsg(targetchannel,"Sorry, can't help you with that") + elif cocheck(prefix+"help"): + #tar = targetchannel + if debug: + print truesender+":"+prefix+"help" + conn.privmsg(targetchannel,"All my commands are: "+reduce(lambda x,y:str(x)+"; "+str(y),commands)) + ### VERSION + elif influx.lower() == prefix+"version": + if debug: + print truesender+":"+prefix+"version" + conn.privmsg(targetchannel,Name+" "+pregen+" online at a %s Python %s.%s.%s, At your service." %(str(sys.platform),str(sys.version_info[0]),str(sys.version_info[1]),str(sys.version_info[2]))) + elif cocheck(prefix+"note ") and influx.count(" ") < 2: + arg = influx.lower()[len(prefix)+5:] + if debug: + print truesender+":"+prefix+"note "+arg + try: + a = arg[0] + except IndexError: + conn.privmsg(targetchannel,sender+" : Please specify a note") + else: + if arg[0] == "_": # Public / Restricted note + result = load(targetdirectory+"memos/"+arg+".note") + #_flare + if result == "ERROR ERROR ERROR ERR": + result = load(targetdirectory+"memos/"+arg+"_"+targetchannel.replace("#","")+".note") + #_flare_dnd + pass + else: + pass + else: + result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+".note") + #skibiliano_testnote + if result == "ERROR ERROR ERROR ERR": + result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+"_"+targetchannel.replace("#","")+".note") + #skibiliano_testnote_derp + pass + else: + pass + if result == "ERROR ERROR ERROR ERR": + conn.privmsg(targetchannel,sender+" : Note not found") + elif type(result) == list: + if "C" in result[0]: #Channel restriction, result[2] is the channel + try: + if targetchannel == result[2]: + conn.privmsg(targetchannel,sender+" : '"+result[1]+"'") + else: + conn.privmsg(targetchannel,sender+" : That note is channel restricted") + except: + conn.privmsg(targetchannel,sender+" : NOTE HAS INVALID RESTRICTION") + else: + conn.privmsg(targetchannel,sender+" : '"+result+"'") + elif influx.lower() == prefix+"notes": + if debug: + print truesender+":"+prefix+"notes" + arg = os.listdir(targetdirectory+"memos/") + arg2 = [] + arg3 = truesender.replace("|","_")+"_" + for i in arg: + if arg3 in i: + arg2.append(i.replace(arg3,"").replace(".note","")) + if len(arg2) == 1: + preprocess = " note: " + else: + preprocess = " notes: " + if len(arg2) == 0: + conn.privmsg(targetchannel,sender+" : You have no notes saved") + else: + conn.privmsg(targetchannel,sender+" : "+str(len(arg2))+preprocess+", ".join(arg2)) + elif cocheck(prefix+"note ") and influx.count(" ") > 1: + note_chanrestrict = None + note_public = None + try: + arg = influx.split(" ",2)[2] # Contents + arg4 = influx.split(" ")[1].lower() # Note name + if arg4[0:3] == "[c]": # or arg4[0:3] == "[p]": + note_chanrestrict = "c" in arg4[0:3] + #note_public = "p" in arg4[0:3] + arg4 = arg4[3:] + elif arg4[0:4] == "[cp]" or arg4[0:4] == "[pc]": + note_chanrestrict = True + note_public = True + arg4 = arg4[4:] + else: + pass + #print "Is note public? "+str(note_public) + #print "Is note chanrestricted? "+str(note_chanrestrict) + #print "What is the name? "+str(arg4) + if arg.lower() == "delete" and "\\" not in influx.lower() and "/" not in influx.lower(): + if note_public: + try: + if note_chanrestrict: + os.remove(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note") + else: + os.remove(targetdirectory+"memos/"+"_"+arg4+".note") + except: + conn.pivmsg(targetchannel,sender+" : Couldn't remove note") + else: + conn.privmsg(targetchannel,sender+" : Note removed") + pass + else: + try: + if note_chanrestrict: + os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note") + else: + os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note") + except: + conn.privmsg(targetchannel,sender+" : Couldn't remove note") + else: + conn.privmsg(targetchannel,sender+" : Note removed") + elif arg.lower() == "delete": + conn.privmsg(targetchannel,sender+" : That just doesn't work, we both know that.") + else: + try: + if note_public: + if note_chanrestrict: + save(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) + #print "Saved as note_public, note_chanrestrict" + else: + save(targetdirectory+"memos/"+"_"+arg4+".note",arg) + #print "Saved as note_public" + else: + if note_chanrestrict: + save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) + #print "Saved as note_chanrestrict" + else: + save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note",arg) + #print "Saved as normal" + except IOError: + conn.privmsg(targetchannel,sender+" : Please do not use special letters") + else: + conn.privmsg(targetchannel,sender+" : Note Saved!") + except: + conn.privmsg(targetchannel,sender+" : Something went horribly wrong.") + elif cocheck(prefix+"uptime"): + arg1 = uptime_start + arg2 = time.time() + arg1 = arg2 - arg1 + arg2 = arg1 + if arg1 < 60: + conn.privmsg(targetchannel,sender+" : I have been up for "+str(round(arg1,2))+" Seconds") + elif arg1 < 3600: + arg1 = divmod(arg1,60) + arg = " Minute" if int(arg1[0]) == 1 else " Minutes" + conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg+" and "+str(round(arg1[1],2))+" Seconds") + elif arg1 <= 86400: + arg1 = divmod(arg1,3600) + arg3 = " Hour" if int(arg1[0]) == 1 else " Hours" + arg2 = divmod(arg1[1],60) + arg = " Minute" if int(arg2[0]) == 1 else " Minutes" + conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg3+", "+str(int(arg2[0]))+arg+" and "+str(round(arg2[1],2))+" Seconds") + elif arg1 > 86400: + arg1 = divmod(arg1,86400) + arg2 = divmod(arg1[1],3600) + arg3 = divmod(arg2[1],60) + arg4 = " Day" if int(arg1[0]) == 1 else " Days" + arg5 = " Hour" if int(arg2[0]) == 1 else " Hours" + arg6 = " Minute" if int(arg3[0]) == 1 else " Minutes" + conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg4+", "+str(int(arg2[0]))+arg5+", "+str(int(arg3[0]))+arg6+" and "+str(round(arg3[1],2))+" Seconds") + elif cocheck(prefix+"purgemessages"): + count = 0 + for i,a in tell_list.items(): + for b in a: + if "||From: "+truesender in b: + count += 1 + del(tell_list[i][tell_list[i].index(b)]) + conn.privmsg(targetchannel, sender+" : All your "+str(count)+" messages have been purged") + elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "tell" in (influx.lower().split(" ")+[""])[1]: + arg = influx.lower().split(" ") + equalarg = influx.split(" ") + next_one = False + count = 0 + spot = 0 + for i in arg: + count += 1 + if "tell" in i.lower(): + next_one = True + elif next_one == True: + next_one = i.lower() + spot = count + break + else: + pass + if next_one != True and next_one != False: + #if ("^\^".join(tell_list.values())).count(truesender) >= offline_message_limit: + if str(tell_list.values()).count("||From: "+truesender) >= offline_message_limit: + conn.privmsg(targetchannel,sender+" : Limit of "+str(offline_message_limit)+" reached! Use !purgemessages if you want to get rid of them!") + else: + try: + tell_list[next_one].append((" ".join(equalarg[spot:]))+" ||From: "+truesender) + except: + tell_list[next_one] = [(" ".join(equalarg[spot:]))+" ||From: "+truesender] + conn.privmsg(targetchannel,"Sending a message to "+next_one+" when they arrive.") + # < This part has to be within subsidiaries of the bot, and must not be modified, intentionally hidden or deleted. + elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "who created you" in influx.lower(): + conn.privmsg(targetchannel, "I was created by Skibiliano.") + # The part ends here > + elif parse_xkcd and "xkcd.com/" in influx.lower(): + if influx.lower()[0:3] == "www": + data = "http://"+influx + elif influx.lower()[0:3] == "xkc": + data = "http://"+influx + else: + data = influx + data = data.split(" ") + for i in data: + if "http://" in i and "xkcd" in i: + churn = xkcdparser.xkcd(i) + if churn == "NOTHING": + pass + else: + conn.privmsg(targetchannel,sender+" : XKCD - "+churn) + break + else: + pass + elif automatic_youtube_reveal and "youtube.com/watch?v=" in influx.lower(): + temporal_list2 = [] + temporal_data = influx.split(" ") + temporal_list = [] + for block in temporal_data: + if "youtube.com/watch?v=" in block: + temporal_list.append(block) + for temdata in temporal_list: + + if temdata[0:3] == "you": + temdata = "http://www."+temdata + elif temdata[0:3] == "www": + temdata = "http://"+temdata + elif temdata[0:4] == "http": + pass + #Obscure ones + elif temdata[0:3] == "ww.": + temdata = "http://w"+temdata + elif temdata[0:3] == "w.y": + temdata = "http://ww"+temdata + elif temdata[0:3] == ".yo": + temdata = "http://www"+temdata + elif temdata[0:3] == "ttp": + temdata = "h"+temdata + elif temdata[0:3] == "tp:": + temdata = "ht"+temdata + elif temdata[0:3] == "p:/" or temdata[0:3] == "p:\\": + temdata = "htt"+temdata + elif temdata[0:3] == "://" or temdata[0:3] == ":\\\\": + temdata = "http"+temdata + elif temdata[0:2] == "//" or temdata[0:2] == "\\\\": + if temdata[2] == "y": + temdata = "http://www."+temdata[2:] + elif temdata[2] == "w": + temdata = "http:"+temdata + else: + pass + if debug: + print truesender+":"+temdata + arg = temdata + check = temdata.lower() + if check[0:5] == "https": + if len(temporal_list) == 1: + conn.privmsg(targetchannel,sender+" :Secure Youtube does NOT exist") + break + else: + temporal_list2.append("Secure Youtube does NOT exist") + break + else: + if cache_youtube_links == True: + result = YTCV2(arg) + else: + result = YTCV2(arg,0) + if type(result) == str: + ### To remove =" + if result[0:4] == 'nt="': + result = result[4:] + pass + elif result[0:2] == '="': + result = result[2:] + pass + else: + pass + if """ in result: + result.replace(""",'"') + if len(temporal_list) == 1: + conn.privmsg(targetchannel,sender+" : "+result) + break + else: + temporal_list2.append(result) + else: + if len(temporal_list) == 1: + conn.privmsg(targetchannel,sender+" : The video does not exist") + break + else: + temporal_list2.append("The video does not exist") + if len(temporal_list) == 1: + pass + else: + conn.privmsg(targetchannel,sender+" : "+str(reduce(lambda x,y: x+" :-And-: "+y,temporal_list2))) + elif RegExpCheckerForWebPages("((http://)|(https://))|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,1): + arg2 = RegExpCheckerForWebPages("(http://)|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,0) + if arg2 == 404: + pass + else: + if arg2[:7] == "http://": + pass + elif arg2[:4] == "www.": + arg2 = "http://"+arg2 + else: + arg2 = "http://"+arg2 + try: + arg = Whoopshopchecker.TitleCheck(arg2) + if len(arg2) == 0: + pass + else: + conn.privmsg(targetchannel,sender+" : "+arg) + except: + #conn.privmsg(targetchannel,sender+" : An odd error occurred") + pass + elif respond_of_course and "take over the" in influx.lower() or respond_of_course and "conquer the" in influx.lower(): + if debug: + print truesender+"::"+influx + conn.privmsg(targetchannel,"Of course!") + elif respond_khan and "khan" in influx.lower(): + if respond_khan: + if debug: + print truesender+"::"+influx + if "khan " in influx.lower(): + conn.privmsg(targetchannel,"KHAAAAAAN!") + elif " khan" in influx.lower(): + conn.privmsg(targetchannel,"KHAAAAAN!") + elif influx.lower() == "khan": + conn.privmsg(targetchannel,"KHAAAAAAAAAN!") + elif influx.lower() == "khan?": + conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAN!") + elif influx.lower() == "khan!": + conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAAAAAAN!") + elif respond_khan and influx.lower().count("k") + influx.lower().count("h") + influx.lower().count("a") + influx.lower().count("n") + influx.lower().count("!") + influx.lower().count("?") == len(influx): + if "k" in influx.lower() and "h" in influx.lower() and "a" in influx.lower() and "n" in influx.lower(): + if debug: + print truesender+"::"+influx + conn.privmsg(targetchannel,"KHAAAAN!") + elif influx.split(" ")[0].lower() in ["thanks","danke","tack"] and len(influx.split(" ")) > 1 and influx.split(" ")[1].lower().replace("!","").replace("?","").replace(".","").replace(",","") in SName+[lowname]: + conn.privmsg(targetchannel,"No problem %s" %(sender)) + elif "happy birthday" in influx.lower() and birthday_announced == time.gmtime(time.time())[0]: + conn.privmsg(targetchannel,sender+" : Thanks :)") + elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("!","").replace("?","") in SName+[lowname] and "call me" in influx.lower(): + if allow_callnames == True: + arg = influx.split(" ") + arg2 = False + arg3 = [] + for i in arg: + if arg2 == True: + arg3.append(i) + elif i.lower() == "me": + arg2 = True + arg3 = " ".join(arg3) + truesender_lower = truesender.lower() + arg3_lower = arg3.lower() + tell_checker = Namecheck.Namecheck(arg3_lower,users,truesender) + for name in replacenames.values(): + if arg3_lower == name.lower(): + tell_checker = True + break + else: + pass + if tell_checker == True: + conn.privmsg(targetchannel,sender+" : I can't call you that, I know someone else by that name") + elif len(arg3) > call_me_max_length: + conn.privmsg(targetchannel,sender+" : I cannot call you that, Too long of a name.") + pass + else: + replacenames[truesender] = arg3 + with open("replacenames.cache","w") as pickle_save: + pickle.dump(replacenames,pickle_save) + conn.privmsg(targetchannel,sender+" : Calling you "+arg3+" From now on") + else: + conn.privmsg(targetchannel,sender+" : Sorry, I am not allowed to do that.") + elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("?","").replace("!","") in SName+[lowname] and "your birthday" in influx.lower() and "is your" in influx.lower(): + conn.privmsg(targetchannel,sender+" : My birthday is on the 15th day of December.") + elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and "version" in influx.replace("?","").replace("!","").lower().split(" "): + if debug == True: + print truesender+"::%s Version" %(Name) + conn.privmsg(targetchannel,sender+", My version is "+pregen) + elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and influx.lower().count(" or ") > 0 and len(influx.split(" ")[1:]) <= influx.lower().count("or") * 3: + cut_down = influx.lower().split(" ") + arg = [] + count = -1 + for i in cut_down: + count += 1 + try: + if cut_down[count+1] == "or": + arg.append(i) + + except: + pass + try: + if i not in arg and cut_down[count-1] == "or": + arg.append(i) + except: + pass + try: + conn.privmsg(targetchannel,random.choice(arg).capitalize().replace("?","").replace("!","")) + except IndexError: + # arg is empty, whORe etc. + pass + elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 and "who started you" in influx.lower() or \ + influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and "who started you" in influx.lower(): + conn.privmsg(targetchannel,sender+" : I was started by %s"%(os.getenv("USER"))+" on "+time.strftime("%d.%m.%Y at %H:%M:%S",time.gmtime(uptime_start))) + elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 or \ + influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and influx.count(" ") > 1: + dice = random.randint(0,1) + if dice == 0: + conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) + else: + if highlights: + conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) + else: + conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) + elif influx.lower()[0:len(Name)] == lowname and not influx.lower()[len(Name):].isalpha() or \ + influx.split(" ")[0].lower().replace(",","") in SName and not influx.lower()[len(influx.split(" ")[0].lower()):].isalpha(): + conn.privmsg(targetchannel, random.choice(["Yea?","I'm here","Ya?","Yah?","Hm?","What?","Mmhm, what?","?","What now?","How may I assist?"])) + comboer = truesender + comboer_time = time.time() + elif influx.lower()[-1] == "?" and comboer == truesender and looptime - discard_combo_messages_time < comboer_time: + comboer = "" + dice = random.randint(0,1) + if dice == 0: + conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) + else: + if highlights: + conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) + else: + conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) + + elif influx.lower() == prefix+"tm": + if truesender in operators and targetchannel==channel: + marakov = not marakov + conn.privmsg(targetchannel,sender+" : Marakov Output is now "+str(marakov)) + else: + conn.privmsg(targetchannel,sender+" : I can't let you access that") + elif personality_greeter == True and True in map(lambda x: x in influx.lower(),["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"]): + if comboer != "" and looptime - discard_combo_messages_time > comboer_time: + combo_check = sbna(["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan","all night"], #ONLY ONE OF THESE + ["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE + influx.lower()) + else: + combo_check = sbna(SName+[lowname, + #lowname+".",lowname+"!",lowname+"?", + "everybody", + #"everybody!","everybody?", + "everyone", + #"everyone!","everyone?", + "all", + #"all!","all?" + "all night", + ], #ONLY ONE OF THESE + ["greetings","afternoon","hi", + #"hi,", + "hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE + influx.lower().replace(",","").replace(".","").replace("!","")) + if combo_check: + combo_check = False + comboer = "" + if "evening" in influx.lower() and "all" in influx.lower() and len(influx.lower().split(" ")) > 3: + pass + elif truesender not in operators: + if debug: + print truesender+"::"+influx + dice = random.randint(0,19) + if dice == 0: + conn.privmsg(targetchannel,"Well hello to you too "+sender) + elif dice == 1: + if optimize_greeting == False: + hours = time.strftime("%H") + #time.strftime("%H:%M:%S") == 12:28:41 + hours = int(hours) + if hours in xrange(0,12): + conn.privmsg(targetchannel,"Good Morning "+sender) + elif hours in xrange(12,15): + conn.privmsg(targetchannel,"Good Afternoon "+sender) + elif hours in xrange(15,20): + conn.privmsg(targetchannel,"Good Evening "+sender) + else: + conn.privmsg(targetchannel,"Good Night "+sender) + else: + hours = time.strftime("%H") + hours = int(hours) + if hours in morning: + conn.privmsg(targetchannel,"Good Morning "+sender) + elif hours in afternoon: + conn.privmsg(targetchannel,"Good Afternoon "+sender) + elif hours in evening: + conn.privmsg(targetchannel,"Good Evening "+sender) + else: + conn.privmsg(targetchannel,"Good Night "+sender) + elif dice == 2: + conn.privmsg(targetchannel,"Hello!") + elif dice == 3: + conn.privmsg(targetchannel,"Hey "+sender) + elif dice == 4: + conn.privmsg(targetchannel,"Hi "+sender) + elif dice == 5: + conn.privmsg(targetchannel,"Hello "+sender) + elif dice == 6: + conn.privmsg(targetchannel,"Yo "+sender) + elif dice == 7: + conn.privmsg(targetchannel,"Greetings "+sender) + elif dice == 8: + conn.privmsg(targetchannel,"Hi") + elif dice == 9: + conn.privmsg(targetchannel,"Hi!") + elif dice == 10: + conn.privmsg(targetchannel,"Yo") + elif dice == 11: + conn.privmsg(targetchannel,"Yo!") + elif dice == 12: + conn.privmsg(targetchannel,"Heya") + elif dice == 13: + conn.privmsg(targetchannel,"Hello there!") + elif dice == 14: # Richard + conn.privmsg(targetchannel,"Statement: Greetings meatbag") + elif dice == 15: # Richard + hours = int(time.strftime("%H")) + if hours in xrange(5,12): + conn.privmsg(targetchannel,"What are you doing talking at this time of the morning?") + elif hours in xrange(12,15): + conn.privmsg(targetchannel,"What are you doing talking at this time of the day?") + elif hours in xrange(15,22): + conn.privmsg(targetchannel,"What are you doing talking at this time of the evening?") + else: + conn.privmsg(targetchannel,"What are you doing talking at this time of the night?") + elif dice == 16: # Richard + conn.privmsg(targetchannel,"Oh, you're still alive I see.") + elif dice == 17: + conn.privmsg(targetchannel,"Heya "+sender) + elif dice == 18 and time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15: + conn.privmsg(targetchannel,"Hello! It's my birthday!") + else: + conn.privmsg(targetchannel,"Hiya "+sender) + secdice = random.randint(0,10) + if time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15 and birthday_announced < time.gmtime(time.time())[0]: + birthday_announced = time.gmtime(time.time())[0] + conn.privmsg(channel,"Hey everybody! I just noticed it's my birthday!") + time.sleep(0.5) + tag = random.choice(["birthday","robot+birthday","happy+birthday+robot"]) + arg1 = urllib2.urlopen("http://www.youtube.com/results?search_query=%s&page=&utm_source=opensearch"%tag) + arg1 = arg1.read().split("\n") + arg2 = [] + for i in arg1: + if "watch?v=" in i: + arg2.append(i) + arg3 = random.choice(arg2) + + conn.privmsg(channel,"Here's a video of '%s' which I found! %s (%s)"%(tag.replace("+"," "),"http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20],YTCV2("http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20]))) + if truesender.lower() in tell_list.keys(): + try: + conn.privmsg(channel, "Also, "+truesender+" : "+tell_list[truesender.lower()][0]) + del(tell_list[truesender.lower()][0]) + except: + pass + else: + dice = random.randint(0,1) + if dice == 0: + conn.privmsg(targetchannel,"Greetings Master "+sender) + elif dice == 1: + conn.privmsg(targetchannel,"My deepest greetings belong to you, Master "+sender) + ### IMPORTANT ### + elif influx == "☺VERSION☺": + conn.notice(truesender,"\001VERSION nanotrasen:2:Python 2.6\001") + elif marakov and influx.lower() == prefix+"marakov": + arg = Marakov_Chain.form_sentence() + if len(arg) < 5: + conn.privmsg(targetchannel,sender+" : Not enough words harvested") + else: + conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg).capitalize())) + elif marakov and cocheck( prefix+ "marakov"): + try: + arg = influx.split(" ")[1].lower() + except: + conn.privmsg(targetchannel,sender+" : Please input a valid second argument") + else: + arg2 = Marakov_Chain.form_sentence(arg) + if len(arg2) < 5: + conn.privmsg(targetchannel,sender+" : Not enough words harvested for a sentence starting with %s" %(arg)) + else: + conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg2).capitalize())) + else: + Marakov_Chain.give_data(influx) + autodiscusscurtime = backup + if time.time() - looptime == 0: + pass + else: + print "Took",time.time()-looptime,"Seconds to finish loop" + + elif data [ 1 ] [ 0 ] == '353': + if connected == False: + connected = True + users = map(lambda x: x[1:] if x[0] == "+" or x[0] == "@" else x,data[1][4].split(" ")) + print "There are",len(users),"Users on",channel + operators = [] + for potential_operator in data[1][4].split(" "): + if potential_operator[0] == "@": + operators.append(potential_operator[1:]) + elif potential_operator[0] == "%": + halfoperators.append(potential_operator[1:]) + + elif data[1][0] == "QUIT": + sender = data[0].split("!")[0] + print sender+" Has now left the server" + try: + users.remove(sender) + try: + operators.remove(sender) + except ValueError: + pass + try: + halfoperators.remove(sender) + except ValueError: + pass + except ValueError: + pass + elif data[1][0] == "PART": + sender = data[0].split("!")[0] + targetchannel = data[1][1] + print sender+" Has now parted from the channel" + try: + users.remove(sender) + try: + operators.remove(sender) + except ValueError: + pass + try: + halfoperators.remove(sender) + except ValueError: + pass + except ValueError: + pass + elif data[1][0] == "JOIN": + sender = data[0].split("!")[0] + targetchannel = data[1][1] + if sender.lower() in tell_list.keys(): + try: + conn.privmsg(targetchannel, sender+" : "+" | ".join(tell_list[sender.lower()])) + del(tell_list[sender.lower()]) + except: + pass + for useri,nicki in replacenames.items(): + checkers = Namecheck.Namecheck_dict(sender.lower(),replacenames) + if checkers[0]: + try: + if checkers[0].lower() == sender: + pass + else: + conn.privmsg(targetchannel,checkers[1]+" : I have detected a collision with a name I call you and %s who joined" %(sender)) + del(replacenames[checkers[1]]) + with open("replacenames.cache","w") as pickle_save: + pickle.dump(replacenames,pickle_save) + except AttributeError: + #conn.privmsg(channel,"NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender)) + print "NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender) + break + print sender+" Has now joined" + users.append(sender) + ##### + if ".fi" in data[0] and sender.lower() == "skibiliano": + operators.append(sender) + if sender.lower() not in peopleheknows[0]: + if data[0].split("!")[1] in peopleheknows[1]: + appendion = "...you do seem familiar however" + else: + appendion = "" + if data[1][1].lower() == channel or data[1][1].lower() == channel[1:]: + conn.privmsg(data[1][1],CORE_DATA.greeting.replace("USER",sender)+" "+appendion) + else: + conn.privmsg(data[1][1],"Hello! Haven't seen you here before! Happy to meet you! %s" %(appendion)) + peopleheknows[0].append(sender.lower()) + peopleheknows[1].append(data[0].split("!")[1]) + with open("peopleheknows.cache","w") as peoplehecache: + pickle.dump(peopleheknows,peoplehecache) + + elif data[1][0] == "MODE" and data[1][2] == "+o": + sender = data[1][3] + targetchannel = data[1][1] + if targetchannel == channel: + print sender+" Is now an operator on the main channel" + operators.append(sender) + else: + print sender+" Is now an operator" + elif data[1][0] == "MODE" and data[1][2] == "-o": + sender = data[1][3] + targetchannel = data[1][1] + if targetchannel == channel: + print sender+" Is no longer an operator on the main channel" + else: + print sender+" Is no longer an operator" + try: + operators.remove(sender) + except ValueError: + pass + elif data[1][0] == "MODE" and data[1][2] == "+h": + sender = data[1][3] + print sender+" Is now an half operator" + halfoperators.append(sender) + elif data[1][0] == "MODE" and data[1][2] == "-h": + try: + halfoperators.remove(sender) + except ValueError: + pass + elif data[1][0] == "MODE" and data[1][1] == Name: + print "My mode is",data[1][2] + elif data[1][0] == "MODE" and data[1][1] != Name: + try: + sender = data[1][3] + print sender,"Was modified",data[1][2] + except IndexError: + print "SENDER RETRIEVAL FAILED:"+str(data) + elif data[1][0] == "KICK" and data[1][2] == Name: + disconnects = 99999 + print "I have been kicked! Disconnecting entirely!" + conn.quit() + elif data[1][0] == "KICK": + # data[1][0] = Kick, 1 = Channel, 2 = Who, 3 = Who(?) + print data[1][2]+" got kicked!" + elif data[1][0] == "451" and data[1][2] == "You have not registered": + print Name+" hasn't been registered" + elif data[1][0] == "NOTICE": + sender = data[0].split("!")[0] + print "NOTICE (%s): %s" %(sender,data[1][2]) + pongtarget = sender + elif data[1][0] == "NICK": + origname = data[0].split("!")[0] + newname = data[1][1] + print origname,"Is now",newname + if newname.lower() in tell_list.keys(): + try: + conn.privmsg(channel, newname+" : "+tell_list[newname.lower()][0]) + del(tell_list[newname.lower()][0]) + except: + pass + try: + users.remove(origname) + except ValueError: + pass + else: + users.append(newname) + try: + operators.remove(origname) + except ValueError: + pass + else: + operators.append(newname) + try: + halfoperators.remove(origname) + except ValueError: + pass + else: + halfoperators.append(newname) + + elif data[1][0] == "001": + # Skibot is welcomed to the Network + pass + elif data[1][0] == "002": + # Your host is... + pass + elif data[1][0] == "003": + #Server was created... + pass + elif data[1][0] == "004": + #Weird hex? + pass + elif data[1][0] == "005": + #Settings like NICKLEN and so on. + pass + elif data[1][0] == "250": + #data[1][2] is + #"Highest connection count: 1411 (1410 clients) + #(81411 connections received)" + pass + elif data[1][0] == "251": + #There are 23 users and 2491 invisible on 10 servers + pass + elif data[1][0] == "252": + #IRC Operators online + #data[1][2] + print data[1][2],"Irc operators online" + pass + elif data[1][0] == "253": + # ['253', 'Skibot_V4', '1', 'unknown connection(s)'] + print data[1][2],"Unknown connection(s)" + pass + elif data[1][0] == "254": + #1391 channels formed + pass + elif data[1][0] == "255": + #I have 406 clients and 2 servers + pass + elif data[1][0] == "265": + #data[1][2] current local users + #data[1][3] at max + try: + print "Current local users:", data[1][2],"/",data[1][3] + except IndexError: + print "Couldn't retrieve local users" + pass + elif data[1][0] == "266": + #data[1][2] current global users + #data[1][3] at max + try: + print "Current global users:", data[1][2],"/",data[1][3] + except IndexError: + print "Couldn't retrieve global users" + pass + elif data[1][0] == "315": + #End of /who list + pass + elif data[1][0] == "332": + # Topic of channel + topic = data[1][3] + pass + elif data[1][0] == "333": + # *Shrug* + pass + elif data[1][0] == "352": + #WHO command + + if len(targetlist) > 0: + if targetlist[0][0].lower() in data[1][6].lower(): + thread.start_new_thread(target,("*!*@"+data[1][4],targetlist[0][1])) + print "Created a thread with", "*!*@"+data[1][4],targetlist[0][1] + targetlist.pop(0) + else: + print targetlist[0][0].lower(), "isn't equal to?", data[1][6].lower() + print targetlist + + elif data[1][0] == "366": + # End of USERS + pass + elif data[1][0] == "372": + # Server information + pass + elif data[1][0] == "375": + # Message of the day + pass + elif data[1][0] == "376": + # End of motd + pass + elif data[1][0] == "401": + # ('network', ['401','Botname','Channel / Nick','No such nick/channel']) + print data[1][2] + " Channel does not exist" + pass + elif data[1][0] == "439": + # ('irc.rizon.no', ['439', '*', 'Please wait while we process your connection.']) + pongtarg = data[0][0] + elif data[1][0] == "477": + # You need to be identified + #TAG + conn.privmsg("nickserv","identify %s"%CORE_DATA.le_pass) + time.sleep(0.5) + conn.join(data[1][2]) + #('network', ['477', 'botname', '#channel', 'Cannot join channel (+r) - you need to be identified with services']) + + elif data[1][0] == "433": + # Skibot name already exists. + print Name+" name already exists." + Name += "_"+version + print "New name:",Name + duplicate_notify = True + conn = irchat.IRC ( Network, Port, Name, "NT_"+version, "NT_"+version, "Trasen_"+version ) + for i in CORE_DATA.channels: + conn.join(i) + sleep(0.5) + elif data[1][0] == "482": + sleep(0.05) + conn.privmsg(targetchannel,"Nevermind that, I am not an operator") + CALL_OFF = True + elif data[1] == ["too","fast,","throttled."]: + print "Reconnected too fast." + print "Halting for 2 seconds" + sleep(2) + elif data[1][0] == "Link": + if data[0] == "Closing": + print "Link was closed" + connected = False +# conn.quit() +# break + else: + print data + print data[1][0] + pass + else: + if disconnects > 9000: #IT'S OVER NINE THOUSAAAAND! + break + else: #WHAT NINE THOUSAND? THERE'S NO WAY THAT CAN BE RIGHT + sleep(responsiveness_delay) #WAIT A WHILE AND CHECK AGAIN! + try: + if not connected: + #print pongtarget + #print conn.addressquery() + conn.privmsg(pongtarget,"Pong") + sleep(1) + for i in CORE_DATA.channels: + conn.join(i) + sleep(0.5) + print "Attempted to join" + connected = True + except ValueError: + try: + conn.privmsg(conn.addressquery()[0],"Pong") + sleep(1) + for i in CORE_DATA.channels: + conn.join(i) + sleep(0.5) + print "Attempted to join the second time" + connected = True + except ValueError: + print "Both methods failed" + except AttributeError: + print "Conn is not established correctly" + except NameError: + print "Pongtarget isn't yet established" + try: + conn.privmsg(conn.addressquery()[0],"Pong") + sleep(1) + for i in CORE_DATA.channels: + conn.join(i) + sleep(0.5) + print "Attempted to join the second time" + connected = True + except: + print "Both methods failed" diff --git a/bot/Shortname.py b/bot/Shortname.py index ae8ac473b8..40b8cc1960 100644 --- a/bot/Shortname.py +++ b/bot/Shortname.py @@ -1,28 +1,28 @@ -def shortname(name): - lowname = name.lower() - numb = 0 - count = 0 - spot = 0 - for letter in name: - if letter.isupper(): - spot = numb - count += 1 - numb += 1 - if "_" in name: - if name.count("_") > 1: - name = " ".join(name.split("_")[0:name.count("_")]) - if name.lower()[-3:] == "the": - return name[:-4] - else: - return name - else: - return name.split("_")[0] - if count > 1: - if len(name[0:spot]) > 2: - return name[0:spot] - if len(name) < 5: - return name #Too short to be shortened - elif "ca" in lowname or "ct" in lowname or "tp" in lowname or "lp" in lowname: - return name[0:max(map(lambda x: lowname.find(x),["ca","ct","tp","lp"]))+1] - else: - return name[0:len(name)/2+len(name)%2] +def shortname(name): + lowname = name.lower() + numb = 0 + count = 0 + spot = 0 + for letter in name: + if letter.isupper(): + spot = numb + count += 1 + numb += 1 + if "_" in name: + if name.count("_") > 1: + name = " ".join(name.split("_")[0:name.count("_")]) + if name.lower()[-3:] == "the": + return name[:-4] + else: + return name + else: + return name.split("_")[0] + if count > 1: + if len(name[0:spot]) > 2: + return name[0:spot] + if len(name) < 5: + return name #Too short to be shortened + elif "ca" in lowname or "ct" in lowname or "tp" in lowname or "lp" in lowname: + return name[0:max(map(lambda x: lowname.find(x),["ca","ct","tp","lp"]))+1] + else: + return name[0:len(name)/2+len(name)%2] diff --git a/bot/Timeconverter.py b/bot/Timeconverter.py index a39f821c84..f44f51c196 100644 --- a/bot/Timeconverter.py +++ b/bot/Timeconverter.py @@ -1,204 +1,204 @@ -#Sources: -# http://wwp.greenwichmeantime.com/time-zone/usa/eastern-time/convert/ -# http://www.timeanddate.com/library/abbreviations/timezones/na/ -# Times are GMT +- x -# For eq. -# EST = -5 -# GMT = 0 -# UTC = 0 -#Times are in hours, -#2.5 = 2 and half hours -global times -times = {"ADT":-3,"HAA":-3, #Synonyms on the same line - "AKDT":-8,"HAY":-8, - "AKST":-9,"HNY":-9, - "AST":-4,"HNA":-4, - "CDT":-5,"HAC":-5, - "CST":-6,"HNC":-6, - "EDT":-4,"HAE":-4, - "EGST":0, - "EGT":-1, - "EST":-5,"HNE":-5,"ET":-5, - "HADT":-9, - "HAST":-10, - "MDT":-6,"HAR":-6, - "MST":-7,"HNR":-7, - "NDT":-2.5,"HAT":-2.5, - "NST":-3.5,"HNT":-3.5, - "PDT":-7,"HAP":-7, - "PMDT":-2, - "PMST":-3, - "PST":-8,"HNP":-8,"PT":-8, - "WGST":-2, - "WGT":-3, - "GMT":0, - "UTC":0} -def converter(zones,time): - #Zones should be a list containing - # ( From zone - # To zone ) - global times - #from_z = for example UTC+00:00, WGT or GMT-05:30 - #to_z = same style as above. - from_z,to_z = zones - from_z = from_z.upper() - to_z = to_z.upper() - if from_z.find("+") != -1: - from_zone_offset = from_z[from_z.find("+"):] - if ":" in from_zone_offset: - try: - from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") - except ValueError: - return "Too many or too small amount of values" - try: - from_zone_offset = int(from_zone_offset1) + int(from_zone_offset2)/60.0 - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - else: - try: - from_zone_offset = float(from_zone_offset) - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - try: - from_zone_realtime = from_zone_offset + times[from_z[:from_z.find("+")]] - except KeyError: - return "Incorrect From zone" - - elif "-" in from_z: - from_zone_offset = from_z[from_z.find("-"):] - if ":" in from_zone_offset: - from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") - try: - from_zone_offset = -int(from_zone_offset1) + int(from_zone_offset2)/60.0 - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - else: - try: - from_zone_offset = -float(from_zone_offset) - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - from_zone_realtime = times[from_z[:from_z.find("-")]] - from_zone_offset - pass - else: - from_zone_offset = 0 - try: - from_zone_realtime = from_zone_offset + times[from_z] - except KeyError: - return "Incorrect From zone" - if to_z.find("+") != -1: - to_zone_offset = to_z[to_z.find("+"):] - if ":" in to_zone_offset: - try: - to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") - except ValueError: - return "Too many or too small amount of values" - try: - to_zone_offset = int(to_zone_offset1) + int(to_zone_offset2)/60.0 - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - else: - try: - to_zone_offset = float(to_zone_offset) - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - try: - to_zone_realtime = to_zone_offset + times[to_z[:to_z.find("+")]] - except KeyError: - return "The zone you want the time to be changed to is not found" - - elif "-" in to_z: - to_zone_offset = to_z[to_z.find("-"):] - if ":" in to_zone_offset: - to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") - try: - to_zone_offset = -int(to_zone_offset1) + int(to_zone_offset2)/60.0 - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - else: - try: - to_zone_offset = -float(to_zone_offset) - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - to_zone_realtime = times[to_z[:to_z.find("-")]] -to_zone_offset - - pass - else: - to_zone_offset = 0 - try: - to_zone_realtime = to_zone_offset + times[to_z] - except KeyError: - return "Incorrect To zone" - try: - time_hour,time_minute = time.split(":") - time_hour,time_minute = int(time_hour),int(time_minute) - string = ":" - except: - try: - time_hour,time_minute = time.split(".") - time_hour,time_minute = int(time_hour),int(time_minute) - string = "." - except ValueError: - return "The time was input in an odd way" - if to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 == 0.0: - time_hour = time_hour + (to_zone_realtime - from_zone_realtime) - return str(int(time_hour))+string+str(int(time_minute)) - else: - if to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 != 0.0: - time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - ((from_zone_realtime % 1.0) * 60)) - elif to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 == 0.0: - time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - 0) - elif to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 != 0.0: - time_minute = time_minute + (0 - ((from_zone_realtime % 1.0) * 60)) - else: - print "Wut?" - time_hour = time_hour + (int(to_zone_realtime//1) - int(from_zone_realtime//1)) - return str(int(time_hour))+string+str(int(time_minute)) - - -def formatter(time): - if "." in time: - string = "." - elif ":" in time: - string = ":" - else: - return time - hours,minutes = time.split(string) - days = 0 - if int(minutes) < 0: - buphours = int(hours) - hours,minutes = divmod(int(minutes),60) - hours += buphours - if int(minutes) > 60: - hours,minutes = divmod(int(minutes),60) - hours += int(hours) - if int(hours) < 0: - days = 0 - days,hours = divmod(int(hours),24) - if int(hours) > 24: - days = 0 - days,hours = divmod(int(hours),24) - if int(hours) == 24 and int(minutes) > 0: - days += 1 - hours = int(hours) - 24 - hours = str(hours) - minutes = str(minutes) - if len(minutes) == 1: - minutes = "0"+minutes - if len(hours) == 1: - hours = "0"+hours - if days > 0: - if days == 1: - return hours+string+minutes+" (Tomorrow)" - else: - return hours+string+minutes+" (After "+str(days)+" days)" - elif days < 0: - if days == -1: - return hours+string+minutes+" (Yesterday)" - else: - return hours+string+minutes+" ("+str(abs(days))+" days ago)" - return hours+string+minutes - - - - - +#Sources: +# http://wwp.greenwichmeantime.com/time-zone/usa/eastern-time/convert/ +# http://www.timeanddate.com/library/abbreviations/timezones/na/ +# Times are GMT +- x +# For eq. +# EST = -5 +# GMT = 0 +# UTC = 0 +#Times are in hours, +#2.5 = 2 and half hours +global times +times = {"ADT":-3,"HAA":-3, #Synonyms on the same line + "AKDT":-8,"HAY":-8, + "AKST":-9,"HNY":-9, + "AST":-4,"HNA":-4, + "CDT":-5,"HAC":-5, + "CST":-6,"HNC":-6, + "EDT":-4,"HAE":-4, + "EGST":0, + "EGT":-1, + "EST":-5,"HNE":-5,"ET":-5, + "HADT":-9, + "HAST":-10, + "MDT":-6,"HAR":-6, + "MST":-7,"HNR":-7, + "NDT":-2.5,"HAT":-2.5, + "NST":-3.5,"HNT":-3.5, + "PDT":-7,"HAP":-7, + "PMDT":-2, + "PMST":-3, + "PST":-8,"HNP":-8,"PT":-8, + "WGST":-2, + "WGT":-3, + "GMT":0, + "UTC":0} +def converter(zones,time): + #Zones should be a list containing + # ( From zone + # To zone ) + global times + #from_z = for example UTC+00:00, WGT or GMT-05:30 + #to_z = same style as above. + from_z,to_z = zones + from_z = from_z.upper() + to_z = to_z.upper() + if from_z.find("+") != -1: + from_zone_offset = from_z[from_z.find("+"):] + if ":" in from_zone_offset: + try: + from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") + except ValueError: + return "Too many or too small amount of values" + try: + from_zone_offset = int(from_zone_offset1) + int(from_zone_offset2)/60.0 + except: + return "Error, the 'From Zone' variable has an incorrect offset number" + else: + try: + from_zone_offset = float(from_zone_offset) + except: + return "Error, the 'From Zone' variable has an incorrect offset number" + try: + from_zone_realtime = from_zone_offset + times[from_z[:from_z.find("+")]] + except KeyError: + return "Incorrect From zone" + + elif "-" in from_z: + from_zone_offset = from_z[from_z.find("-"):] + if ":" in from_zone_offset: + from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") + try: + from_zone_offset = -int(from_zone_offset1) + int(from_zone_offset2)/60.0 + except: + return "Error, the 'From Zone' variable has an incorrect offset number" + else: + try: + from_zone_offset = -float(from_zone_offset) + except: + return "Error, the 'From Zone' variable has an incorrect offset number" + from_zone_realtime = times[from_z[:from_z.find("-")]] - from_zone_offset + pass + else: + from_zone_offset = 0 + try: + from_zone_realtime = from_zone_offset + times[from_z] + except KeyError: + return "Incorrect From zone" + if to_z.find("+") != -1: + to_zone_offset = to_z[to_z.find("+"):] + if ":" in to_zone_offset: + try: + to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") + except ValueError: + return "Too many or too small amount of values" + try: + to_zone_offset = int(to_zone_offset1) + int(to_zone_offset2)/60.0 + except: + return "Error, the 'To Zone' variable has an incorrect offset number" + else: + try: + to_zone_offset = float(to_zone_offset) + except: + return "Error, the 'To Zone' variable has an incorrect offset number" + try: + to_zone_realtime = to_zone_offset + times[to_z[:to_z.find("+")]] + except KeyError: + return "The zone you want the time to be changed to is not found" + + elif "-" in to_z: + to_zone_offset = to_z[to_z.find("-"):] + if ":" in to_zone_offset: + to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") + try: + to_zone_offset = -int(to_zone_offset1) + int(to_zone_offset2)/60.0 + except: + return "Error, the 'To Zone' variable has an incorrect offset number" + else: + try: + to_zone_offset = -float(to_zone_offset) + except: + return "Error, the 'To Zone' variable has an incorrect offset number" + to_zone_realtime = times[to_z[:to_z.find("-")]] -to_zone_offset + + pass + else: + to_zone_offset = 0 + try: + to_zone_realtime = to_zone_offset + times[to_z] + except KeyError: + return "Incorrect To zone" + try: + time_hour,time_minute = time.split(":") + time_hour,time_minute = int(time_hour),int(time_minute) + string = ":" + except: + try: + time_hour,time_minute = time.split(".") + time_hour,time_minute = int(time_hour),int(time_minute) + string = "." + except ValueError: + return "The time was input in an odd way" + if to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 == 0.0: + time_hour = time_hour + (to_zone_realtime - from_zone_realtime) + return str(int(time_hour))+string+str(int(time_minute)) + else: + if to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 != 0.0: + time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - ((from_zone_realtime % 1.0) * 60)) + elif to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 == 0.0: + time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - 0) + elif to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 != 0.0: + time_minute = time_minute + (0 - ((from_zone_realtime % 1.0) * 60)) + else: + print "Wut?" + time_hour = time_hour + (int(to_zone_realtime//1) - int(from_zone_realtime//1)) + return str(int(time_hour))+string+str(int(time_minute)) + + +def formatter(time): + if "." in time: + string = "." + elif ":" in time: + string = ":" + else: + return time + hours,minutes = time.split(string) + days = 0 + if int(minutes) < 0: + buphours = int(hours) + hours,minutes = divmod(int(minutes),60) + hours += buphours + if int(minutes) > 60: + hours,minutes = divmod(int(minutes),60) + hours += int(hours) + if int(hours) < 0: + days = 0 + days,hours = divmod(int(hours),24) + if int(hours) > 24: + days = 0 + days,hours = divmod(int(hours),24) + if int(hours) == 24 and int(minutes) > 0: + days += 1 + hours = int(hours) - 24 + hours = str(hours) + minutes = str(minutes) + if len(minutes) == 1: + minutes = "0"+minutes + if len(hours) == 1: + hours = "0"+hours + if days > 0: + if days == 1: + return hours+string+minutes+" (Tomorrow)" + else: + return hours+string+minutes+" (After "+str(days)+" days)" + elif days < 0: + if days == -1: + return hours+string+minutes+" (Yesterday)" + else: + return hours+string+minutes+" ("+str(abs(days))+" days ago)" + return hours+string+minutes + + + + + diff --git a/bot/Weather.py b/bot/Weather.py index 1fb786e8f4..f06ed24356 100644 --- a/bot/Weather.py +++ b/bot/Weather.py @@ -1,61 +1,61 @@ -# -*- coding: cp1252 -*- -import urllib,xml.sax.handler -# S10 COMPATIABLE -def message(data): - if data["type"] == "PRIVMSG": - try: - splitdata = data["content"].lower().split(" ") - if splitdata[0] == ":weather" and len(splitdata) > 1: - data = Weather(" ".join(splitdata[1:])) - - data["conn"].privmsg(data["target"],"Weather for "+data[1]+": "+data[0]) - return True - except KeyError: - print "WUT" - else: - return -1 -def Weather(question): - question = question.replace("ä","a") - url = "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="+question - opener = urllib.FancyURLopener({}) - f = opener.open(url) - data = f.read() - f.close() - bufferi = [] - seen = False - for i in data.split("\n"): - if "" in i: - stuff = cutter(i,"") - if len(stuff) > 7: - bufferi.append("Temperature: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 19: - bufferi.append(stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Weather: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Humidity: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Wind blows "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 9: - bufferi.append("Air pressure is "+stuff) - elif "" in i and seen == False: - seen = True - where = cutter(i,"") - if len(where) == 4: - where = "Location doesn't exist" - return [", ".join(bufferi),where] -def cutter(fullstring,cut): - fullstring = fullstring.replace(cut,"") - fullstring = fullstring.replace(" 1: + data = Weather(" ".join(splitdata[1:])) + + data["conn"].privmsg(data["target"],"Weather for "+data[1]+": "+data[0]) + return True + except KeyError: + print "WUT" + else: + return -1 +def Weather(question): + question = question.replace("ä","a") + url = "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="+question + opener = urllib.FancyURLopener({}) + f = opener.open(url) + data = f.read() + f.close() + bufferi = [] + seen = False + for i in data.split("\n"): + if "" in i: + stuff = cutter(i,"") + if len(stuff) > 7: + bufferi.append("Temperature: "+stuff) + elif "" in i: + stuff = cutter(i,"") + if len(stuff) > 19: + bufferi.append(stuff) + elif "" in i: + stuff = cutter(i,"") + if len(stuff) > 0: + bufferi.append("Weather: "+stuff) + elif "" in i: + stuff = cutter(i,"") + if len(stuff) > 0: + bufferi.append("Humidity: "+stuff) + elif "" in i: + stuff = cutter(i,"") + if len(stuff) > 0: + bufferi.append("Wind blows "+stuff) + elif "" in i: + stuff = cutter(i,"") + if len(stuff) > 9: + bufferi.append("Air pressure is "+stuff) + elif "" in i and seen == False: + seen = True + where = cutter(i,"") + if len(where) == 4: + where = "Location doesn't exist" + return [", ".join(bufferi),where] +def cutter(fullstring,cut): + fullstring = fullstring.replace(cut,"") + fullstring = fullstring.replace(" 11: #Longer than normal, presume troll. - youtube_url.replace(cut_down,cut_down[:11]) - elif len(cut_down) < 11: #Shorter than normal - pass - except IndexError: - return "Reflex: Where's the watch?v=?" - first_two = cut_down[0:2] - try: - if no_absolute_paths: - tiedosto = open("YTCache/"+first_two+".tcc","r") - else: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","r") - except: - prev_dict = {} - else: - try: - prev_dict = pickle.load(tiedosto) - except EOFError: # Cache is corrupt - os.remove(directory+tiedosto.name) - print "REMOVED CORRUPT CACHE: "+tiedosto.name - prev_dict = {} - tiedosto.close() # I think this should belong here. - if cut_down in prev_dict.keys(): - return prev_dict[cut_down] - else: - pass - try: - if no_absolute_paths: - tiedosto = open("YTCache/"+first_two+".tcc","w") - else: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") - except IOError,error: - if len(prev_dict.keys()) > 0: - try: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - except IOError: - if did_tell == False: - did_tell = True - return "COULD NOT ACCESS FILE "+first_two+".tcc! The next time you run this link, it checks it through the web" - Do_not_open = False - else: - did_tell = False - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Very odd error occurred: " + str(error) - youtube_url = youtube_url.replace("http//","http://") - if youtube_url.lower()[0:7] != "http://" and youtube_url[0:4] == "www.": - youtube_url = "http://" + youtube_url - if youtube_url.count("/") + youtube_url.count("\\") < 3: - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Reflex: Video cannot exist" - else: - if "http://" in youtube_url[0:12].lower() and youtube_url[0:7].lower() != "http://": - youtube_url = youtube_url[youtube_url.find("http://"):] - elif youtube_url[0:7].lower() != "http://": - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return "Reflex: Incorrect link start" - if "?feature=player_embedded&" in youtube_url: - youtube_url = youtube_url.replace("?feature=player_embedded&","?") - try: - website = urlopen(youtube_url) - except: - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Reflex: Incorrect link!" - for i in website.readlines(): - if i.count('',contentvar)] - if "&quot;" in result: - result = result.replace("&quot;",'"') - else: - pass - if "&amp;" in result: - result = result.replace("&amp;","&") - else: - pass - if "&#39;" in result: - result = result.replace("&#39;","'") - else: - pass - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - prev_dict[cut_down] = result - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return result - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - prev_dict[cut_down] = "No title for video, Removed / Needs Age verification / Does not exist" - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return "No title for video, Removed / Needs age verification / Does not exist" +from urllib2 import urlopen +import os +import pickle +from CORE_DATA import directory,no_absolute_paths +global did_tell, no_absolute_paths +no_absolute_paths = True +did_tell = False +def YTCV4(youtube_url,cache=1,debug=0): + global did_tell, no_absolute_paths + Do_not_open = True + __doc__ = "Cache does not affect anything, it's legacy for skibot." + try: + cut_down = youtube_url.split("watch?v=")[1].split("&")[0] + if len(cut_down) > 11: #Longer than normal, presume troll. + youtube_url.replace(cut_down,cut_down[:11]) + elif len(cut_down) < 11: #Shorter than normal + pass + except IndexError: + return "Reflex: Where's the watch?v=?" + first_two = cut_down[0:2] + try: + if no_absolute_paths: + tiedosto = open("YTCache/"+first_two+".tcc","r") + else: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","r") + except: + prev_dict = {} + else: + try: + prev_dict = pickle.load(tiedosto) + except EOFError: # Cache is corrupt + os.remove(directory+tiedosto.name) + print "REMOVED CORRUPT CACHE: "+tiedosto.name + prev_dict = {} + tiedosto.close() # I think this should belong here. + if cut_down in prev_dict.keys(): + return prev_dict[cut_down] + else: + pass + try: + if no_absolute_paths: + tiedosto = open("YTCache/"+first_two+".tcc","w") + else: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") + except IOError,error: + if len(prev_dict.keys()) > 0: + try: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + except IOError: + if did_tell == False: + did_tell = True + return "COULD NOT ACCESS FILE "+first_two+".tcc! The next time you run this link, it checks it through the web" + Do_not_open = False + else: + did_tell = False + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + else: + pass + return "Very odd error occurred: " + str(error) + youtube_url = youtube_url.replace("http//","http://") + if youtube_url.lower()[0:7] != "http://" and youtube_url[0:4] == "www.": + youtube_url = "http://" + youtube_url + if youtube_url.count("/") + youtube_url.count("\\") < 3: + if len(prev_dict.keys()) > 0: + if Do_not_open == True: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + else: + pass + return "Reflex: Video cannot exist" + else: + if "http://" in youtube_url[0:12].lower() and youtube_url[0:7].lower() != "http://": + youtube_url = youtube_url[youtube_url.find("http://"):] + elif youtube_url[0:7].lower() != "http://": + if len(prev_dict.keys()) > 0: + if Do_not_open == True: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + return "Reflex: Incorrect link start" + if "?feature=player_embedded&" in youtube_url: + youtube_url = youtube_url.replace("?feature=player_embedded&","?") + try: + website = urlopen(youtube_url) + except: + if len(prev_dict.keys()) > 0: + if Do_not_open == True: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + else: + pass + return "Reflex: Incorrect link!" + for i in website.readlines(): + if i.count('',contentvar)] + if "&quot;" in result: + result = result.replace("&quot;",'"') + else: + pass + if "&amp;" in result: + result = result.replace("&amp;","&") + else: + pass + if "&#39;" in result: + result = result.replace("&#39;","'") + else: + pass + if Do_not_open == True: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + prev_dict[cut_down] = result + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + return result + if Do_not_open == True: + tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case + prev_dict[cut_down] = "No title for video, Removed / Needs Age verification / Does not exist" + pickle.dump(prev_dict,tiedosto) + tiedosto.close() + return "No title for video, Removed / Needs age verification / Does not exist" diff --git a/bot/_____Readme.txt b/bot/_____Readme.txt index 1c56f9ad12..acbf66af7d 100644 --- a/bot/_____Readme.txt +++ b/bot/_____Readme.txt @@ -1,74 +1,74 @@ -/// Adminhelp relay IRC bot setup guide -/// CC_Nanotrasen bot created by Skibiliano and distributed under the CC-BY-SA 3.0 license -/// All derivative works of this bot must properly credit Skibiliano as the original author -/// Big thanks to Skibiliano his bot and allowing distribution, and to BS12 for sharing their code for making use of it ingame - -QUESTION: What does this bot do? -ANSWER: It, in conjunction with BYOND, relays adminhelps to a designated channel, along with various extra functions that can be accessed by saying !help in the same channel/in a query with the bot. - -Some basic info before you set this up: -CC_Nanotrasen is coded in python 2.6 and requires a serverside installation of python 2.6 (obtainable at http://www.python.org/getit/releases/2.6/) -- Python MUST BE installed to the same directory as the .dmb you are using to host your server/server config folder -- CC_Nanotrasen supports, but does not require, Psyco (obtainable at http://psyco.sourceforge.net/download.html) which increases the speed 20-30% and slightly increases RAM usage - -Now that that's out of the way, I'll teach you how to set this up. - -BOT CONFIG: -Move everything in this folder (this file noninclusive) to the same folder as the hosting server (where your .dmb, config folder, and python are installed) -Open CORE_DATA.py with a text editor of your choice (recommended to be notepad++ or notepad) -You should see 14 lines of code which look like - Name = "CC_NanoTrasen" #The name he uses to connect - no_absolute_paths = True #Do not change this. - debug_on = False - SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, must be lowercase - DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False - directory = "BOT DIRECTORY GOES HERE/" #make sure to keep the "/" at the end - version = "TG CC-BY-SA 6" - Network = 'irc.server.goes.here' #e.g. "irc.rizon.net" - channel = "#CHANNEL GOES HERE" #what channel you want the bot in - channels = ["#CHANNEL GOES HERE","#ALSO ANOTHER CHANNEL GOES HERE IF YOU WANT"] #same as above - greeting = "Welcome!" #what he says when a person he hasn't seen before joins - prefix = "!" #prefix for bot commands - Port = 7000 -There are some basic comments besides every important config option in here, but I'll summarize them in detail -NAME - The name the bot assumes when it connects to IRC, so in this example it would join the IRC under the nickname "CC_Nanotrasen" -SNAME - A list of secondary names, with commas, that the bot will respond to for commands (for example, this setup will allow the bot to respond to "nt, tell quarxink he's a terrible writer") -DIRECTORY - The directory of the bot files, dmb, python, and config folder IN FORWARD SLASHES, WITH FORWARD SLASH AT THE END(for example, I host my test server from "c:\tgstation\tgstation13\tgstation.dmb" so for me the line would say directory = "c:/tgstation/tgstation13/") -NETWORK - The IRC server it will connect to, such as "irc.rizon.net" -CHANNEL/CHANNELS - what channel the bot will join (channels allows for multiple channel connections, in the same formatting as SName separates nicknames) -GREETING - CC_Nanotrasen will store the names of people it has seen before, but when a nickname joins that it hasn't seen before it will greet that person with whatever message is put in this -PREFIX = What character/string will be placed before commands for the bot (so if you changed this to "$", you would pull up the bot's help menu by saying $help instead of !help) -PORT - What port to connect to for the IRC server (if you are unsure of what port to use, most IRC clients will show you what port you are connecting to) - -Once you have that ready, you're on to step two. -Open up the config folder in your install dir, and open config.txt -Scroll to the bottom, right below #FORBID_SINGULO_POSSESSION should be - ##Remove the # mark if you are going to use the SVN irc bot to relay adminhelps - #USEIRCBOT -Just remove the "#" in front of USEIRCBOT (you don't even have to recompile your DMB! - -Got that all ready to go? Good, it's time for step three. -Open Dream Daemon (that thing you use when you host) -On the bottom of the window you should see port, security, and visibility. -Change security to "Trusted" - -Congratulations, you've set up this bot! -A few things to note as far as features: -Use !help to list most commands for the bot. -You can leave notes for other users! Just say "[bot name], tell [other user's name] [message]" - So let's say you wonder if I'm going to jump in to your IRC ever and you want to tell me this readme was horrible, you would say "Nano, tell Quarxink Your readme was horrible" - -TROUBLESHOOTING: -Attempting to run the bot gives me an error about encoding.utf-8. - You've probably installed python to a separate folder than the bot/server, move python's files over and it should run fine - -It's telling me connection refused when someone adminhelps. - You've moved the bot to a separate folder from the nudge script, most likely. - -BYOND asks me on any restart if I want to allow nudge.py to run. - Set security to trusted in Dream Daemon - - - - +/// Adminhelp relay IRC bot setup guide +/// CC_Nanotrasen bot created by Skibiliano and distributed under the CC-BY-SA 3.0 license +/// All derivative works of this bot must properly credit Skibiliano as the original author +/// Big thanks to Skibiliano his bot and allowing distribution, and to BS12 for sharing their code for making use of it ingame + +QUESTION: What does this bot do? +ANSWER: It, in conjunction with BYOND, relays adminhelps to a designated channel, along with various extra functions that can be accessed by saying !help in the same channel/in a query with the bot. + +Some basic info before you set this up: +CC_Nanotrasen is coded in python 2.6 and requires a serverside installation of python 2.6 (obtainable at http://www.python.org/getit/releases/2.6/) +- Python MUST BE installed to the same directory as the .dmb you are using to host your server/server config folder +- CC_Nanotrasen supports, but does not require, Psyco (obtainable at http://psyco.sourceforge.net/download.html) which increases the speed 20-30% and slightly increases RAM usage + +Now that that's out of the way, I'll teach you how to set this up. + +BOT CONFIG: +Move everything in this folder (this file noninclusive) to the same folder as the hosting server (where your .dmb, config folder, and python are installed) +Open CORE_DATA.py with a text editor of your choice (recommended to be notepad++ or notepad) +You should see 14 lines of code which look like + Name = "CC_NanoTrasen" #The name he uses to connect + no_absolute_paths = True #Do not change this. + debug_on = False + SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, must be lowercase + DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False + directory = "BOT DIRECTORY GOES HERE/" #make sure to keep the "/" at the end + version = "TG CC-BY-SA 6" + Network = 'irc.server.goes.here' #e.g. "irc.rizon.net" + channel = "#CHANNEL GOES HERE" #what channel you want the bot in + channels = ["#CHANNEL GOES HERE","#ALSO ANOTHER CHANNEL GOES HERE IF YOU WANT"] #same as above + greeting = "Welcome!" #what he says when a person he hasn't seen before joins + prefix = "!" #prefix for bot commands + Port = 7000 +There are some basic comments besides every important config option in here, but I'll summarize them in detail +NAME - The name the bot assumes when it connects to IRC, so in this example it would join the IRC under the nickname "CC_Nanotrasen" +SNAME - A list of secondary names, with commas, that the bot will respond to for commands (for example, this setup will allow the bot to respond to "nt, tell quarxink he's a terrible writer") +DIRECTORY - The directory of the bot files, dmb, python, and config folder IN FORWARD SLASHES, WITH FORWARD SLASH AT THE END(for example, I host my test server from "c:\tgstation\tgstation13\tgstation.dmb" so for me the line would say directory = "c:/tgstation/tgstation13/") +NETWORK - The IRC server it will connect to, such as "irc.rizon.net" +CHANNEL/CHANNELS - what channel the bot will join (channels allows for multiple channel connections, in the same formatting as SName separates nicknames) +GREETING - CC_Nanotrasen will store the names of people it has seen before, but when a nickname joins that it hasn't seen before it will greet that person with whatever message is put in this +PREFIX = What character/string will be placed before commands for the bot (so if you changed this to "$", you would pull up the bot's help menu by saying $help instead of !help) +PORT - What port to connect to for the IRC server (if you are unsure of what port to use, most IRC clients will show you what port you are connecting to) + +Once you have that ready, you're on to step two. +Open up the config folder in your install dir, and open config.txt +Scroll to the bottom, right below #FORBID_SINGULO_POSSESSION should be + ##Remove the # mark if you are going to use the SVN irc bot to relay adminhelps + #USEIRCBOT +Just remove the "#" in front of USEIRCBOT (you don't even have to recompile your DMB! + +Got that all ready to go? Good, it's time for step three. +Open Dream Daemon (that thing you use when you host) +On the bottom of the window you should see port, security, and visibility. +Change security to "Trusted" + +Congratulations, you've set up this bot! +A few things to note as far as features: +Use !help to list most commands for the bot. +You can leave notes for other users! Just say "[bot name], tell [other user's name] [message]" + So let's say you wonder if I'm going to jump in to your IRC ever and you want to tell me this readme was horrible, you would say "Nano, tell Quarxink Your readme was horrible" + +TROUBLESHOOTING: +Attempting to run the bot gives me an error about encoding.utf-8. + You've probably installed python to a separate folder than the bot/server, move python's files over and it should run fine + +It's telling me connection refused when someone adminhelps. + You've moved the bot to a separate folder from the nudge script, most likely. + +BYOND asks me on any restart if I want to allow nudge.py to run. + Set security to trusted in Dream Daemon + + + + If you have any requests, suggestions, or issues not covered by this guide, I can be contacted as Quarxink at #coderbus on irc.rizon.net (If I don't respond, leave me a query with your problem and how to reach you [preferably an email address, steam, other irc channel, or aim/msn]) \ No newline at end of file diff --git a/bot/gen_fml.py b/bot/gen_fml.py index 358fac8700..f523a4add8 100644 --- a/bot/gen_fml.py +++ b/bot/gen_fml.py @@ -1,15 +1,15 @@ -from FMLformatter import formatter -from urllib2 import urlopen -try: - from hashlib import md5 -except: - from md5 import md5 -from save_load import save,load -import CORE_DATA -directory = CORE_DATA.directory -FML = urlopen("http://www.fmylife.com/random") -formatted = formatter(FML.read().split("\n")) -for Quote in formatted: - exact = Quote[:Quote.find("#")] -# print exact - save(directory+"fmlquotes/"+md5(exact).hexdigest()+".txt",exact) +from FMLformatter import formatter +from urllib2 import urlopen +try: + from hashlib import md5 +except: + from md5 import md5 +from save_load import save,load +import CORE_DATA +directory = CORE_DATA.directory +FML = urlopen("http://www.fmylife.com/random") +formatted = formatter(FML.read().split("\n")) +for Quote in formatted: + exact = Quote[:Quote.find("#")] +# print exact + save(directory+"fmlquotes/"+md5(exact).hexdigest()+".txt",exact) diff --git a/bot/htmltagremove.py b/bot/htmltagremove.py index c9d13086d5..4ecd9b6cd0 100644 --- a/bot/htmltagremove.py +++ b/bot/htmltagremove.py @@ -1,28 +1,28 @@ -def htr(data): - ignore = False - if type(data) == list: - b = [] - for olio in data: - tempolio = "" - for letter in olio: - if letter == "<": - ignore = True - else: - pass - if ignore != True: - tempolio += letter - else: - pass - if letter == ">": - ignore = False - else: - pass - tempolio = tempolio.replace("\t","") - if len(tempolio) == 0: - pass - elif len(tempolio.replace(" ","")) == 0: - pass - else: - b.append(tempolio) - #Finetuning - return b +def htr(data): + ignore = False + if type(data) == list: + b = [] + for olio in data: + tempolio = "" + for letter in olio: + if letter == "<": + ignore = True + else: + pass + if ignore != True: + tempolio += letter + else: + pass + if letter == ">": + ignore = False + else: + pass + tempolio = tempolio.replace("\t","") + if len(tempolio) == 0: + pass + elif len(tempolio.replace(" ","")) == 0: + pass + else: + b.append(tempolio) + #Finetuning + return b diff --git a/bot/irchat.py b/bot/irchat.py index 46ae2d4caf..467d96e8b8 100644 --- a/bot/irchat.py +++ b/bot/irchat.py @@ -1,94 +1,94 @@ -import socket -import time -class IRC: - queue = [] - partial = '' - def __init__ ( self, network, port, name, hostName, serverName, realName ): - self.network = network - self.port = port - self.hostName = hostName - self.serverName = serverName - self.realName = realName - self.socket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) - self.socket.connect ( ( self.network, self.port ) ) - self.address = self.socket.getpeername() - self.nick ( name ) - self.send ( 'USER ' + self.name + ' ' + self.serverName + ' ' + self.hostName + ' :' + self.realName ) - def quit ( self ): - self.send ( 'QUIT' ) - self.socket.close() - def send ( self, text ): - count = 0 - try: - count += 1 - self.socket.send ( text + '\r\n' ) - except: - if count > 10: - time.sleep(1) - self.socket.send(text+'\r\n') - else: - count = 0 - def nick ( self, name ): - self.name = name - self.send ( 'NICK ' + self.name ) - def addressquery(self): - print self.address - aha = socket.gethostbyaddr(str(self.address[0])) - return aha - def recv ( self, size = 2048 ): - commands = self.socket.recv ( size ).split ( '\r\n' ) - if len ( self.partial ): - commands [ 0 ] = self.partial + commands [ 0 ] - self.partial = '' - if len ( commands [ -1 ] ): - self.partial = commands [ -1 ] - self.queue.extend ( commands [ :-1 ] ) - else: - self.queue.extend ( commands ) - def retrieve ( self ): - if len ( self.queue ): - command = self.queue [ 0 ] - self.queue.pop ( 0 ) - return command - else: - return False - def dismantle ( self, command ): - if command: - source = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 0 ] - parameters = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 1: ] - if len(parameters) > 0: - if not len ( parameters [ -1 ] ): - parameters.pop() - if command.count ( ':' ) > 1: - parameters.append(command[command.find(":",command.find(":")+1)+1:]) - return source, parameters - def privmsg ( self, destination, message ): - self.send ( 'PRIVMSG ' + destination + ' :' + message ) - def handshake(self,hexstring): - self.send("PONG :"+hexstring) - def notice ( self, destination, message ): - self.send ( 'NOTICE ' + destination + ' :' + message ) - def join ( self, channel ): - self.send ( 'JOIN ' + channel ) - def part ( self, channel ): - self.send ( 'PART ' + channel ) - def topic ( self, channel, topic = '' ): - self.send ( 'TOPIC ' + channel + ' ' + topic ) - def names ( self, channel ): - self.send ( 'NAMES ' + channel ) - def invite ( self, nick, channel ): - self.send ( 'INVITE ' + nick + ' ' + channel ) - def mode ( self, channel, mode, nick = '' ): - self.send ( 'MODE ' + channel + ' ' + mode + ' ' + nick ) - def banon(self,channel,name): - self.mode(channel,"+b",name) - def banoff(self,channel,name): - self.mode(channel,"-b",name) - def kick ( self, channel, nick, reason = '' ): - self.send ( 'KICK ' + channel + ' ' + nick + ' ' + reason ) - def who ( self, pattern ): - self.send ( 'WHO ' + pattern ) - def whois ( self, nick ): - self.send ( 'WHOIS ' + nick ) - def whowas ( self, nick ): - self.send ( 'WHOWAS ' + nick ) +import socket +import time +class IRC: + queue = [] + partial = '' + def __init__ ( self, network, port, name, hostName, serverName, realName ): + self.network = network + self.port = port + self.hostName = hostName + self.serverName = serverName + self.realName = realName + self.socket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) + self.socket.connect ( ( self.network, self.port ) ) + self.address = self.socket.getpeername() + self.nick ( name ) + self.send ( 'USER ' + self.name + ' ' + self.serverName + ' ' + self.hostName + ' :' + self.realName ) + def quit ( self ): + self.send ( 'QUIT' ) + self.socket.close() + def send ( self, text ): + count = 0 + try: + count += 1 + self.socket.send ( text + '\r\n' ) + except: + if count > 10: + time.sleep(1) + self.socket.send(text+'\r\n') + else: + count = 0 + def nick ( self, name ): + self.name = name + self.send ( 'NICK ' + self.name ) + def addressquery(self): + print self.address + aha = socket.gethostbyaddr(str(self.address[0])) + return aha + def recv ( self, size = 2048 ): + commands = self.socket.recv ( size ).split ( '\r\n' ) + if len ( self.partial ): + commands [ 0 ] = self.partial + commands [ 0 ] + self.partial = '' + if len ( commands [ -1 ] ): + self.partial = commands [ -1 ] + self.queue.extend ( commands [ :-1 ] ) + else: + self.queue.extend ( commands ) + def retrieve ( self ): + if len ( self.queue ): + command = self.queue [ 0 ] + self.queue.pop ( 0 ) + return command + else: + return False + def dismantle ( self, command ): + if command: + source = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 0 ] + parameters = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 1: ] + if len(parameters) > 0: + if not len ( parameters [ -1 ] ): + parameters.pop() + if command.count ( ':' ) > 1: + parameters.append(command[command.find(":",command.find(":")+1)+1:]) + return source, parameters + def privmsg ( self, destination, message ): + self.send ( 'PRIVMSG ' + destination + ' :' + message ) + def handshake(self,hexstring): + self.send("PONG :"+hexstring) + def notice ( self, destination, message ): + self.send ( 'NOTICE ' + destination + ' :' + message ) + def join ( self, channel ): + self.send ( 'JOIN ' + channel ) + def part ( self, channel ): + self.send ( 'PART ' + channel ) + def topic ( self, channel, topic = '' ): + self.send ( 'TOPIC ' + channel + ' ' + topic ) + def names ( self, channel ): + self.send ( 'NAMES ' + channel ) + def invite ( self, nick, channel ): + self.send ( 'INVITE ' + nick + ' ' + channel ) + def mode ( self, channel, mode, nick = '' ): + self.send ( 'MODE ' + channel + ' ' + mode + ' ' + nick ) + def banon(self,channel,name): + self.mode(channel,"+b",name) + def banoff(self,channel,name): + self.mode(channel,"-b",name) + def kick ( self, channel, nick, reason = '' ): + self.send ( 'KICK ' + channel + ' ' + nick + ' ' + reason ) + def who ( self, pattern ): + self.send ( 'WHO ' + pattern ) + def whois ( self, nick ): + self.send ( 'WHOIS ' + nick ) + def whowas ( self, nick ): + self.send ( 'WHOWAS ' + nick ) diff --git a/bot/linereader.py b/bot/linereader.py index cef804935b..469b6e1444 100644 --- a/bot/linereader.py +++ b/bot/linereader.py @@ -1,43 +1,43 @@ -import os -directory = "" -raw = os.listdir(directory) -extract = [] -for i in raw: - if i[-3:] == ".py": - extract.append(i) -toc = 0 -toc3 = 0 -toc2 = 0 -print len(extract),"Files" -lista = [] -for ob in extract: - count3 = 0 - if directory == "": - tiedosto = open(ob,"r") - tiedosto2 = open(ob,"r") - count3 += os.path.getsize(ob) - toc3 += count3 - else: - tiedosto = open(directory+"/"+ob,"r") - tiedosto2 = open(directory+"/"+ob,"r") - count3 += os.path.getsize(directory+"/"+ob) - toc3 += count3 - count = 0 - count2 = 0 - line = tiedosto.readline() - while line != "": - count += 1 - toc += 1 - line = tiedosto.readline() - count2 += len(tiedosto2.read()) - toc2 += count2 - lista.append([count,count2,ob,count3]) - tiedosto.close() - tiedosto2.close() -print toc,"Lines in total" -print toc2,"Letters in total" -print toc3,"Bytes in total" - -for linecount, lettercount, filename, bytecount in lista: - print str(linecount)+" Lines (%s%%) || "%(str(round((float(linecount)/toc)*100,1))),str(lettercount)+" Letters (%s%%) in file " %(str(round((float(lettercount)/toc2)*100,1)))+filename - print str(bytecount) + " Bytes (%s%%) "%(str(round((float(bytecount)/toc3)*100,1))) +import os +directory = "" +raw = os.listdir(directory) +extract = [] +for i in raw: + if i[-3:] == ".py": + extract.append(i) +toc = 0 +toc3 = 0 +toc2 = 0 +print len(extract),"Files" +lista = [] +for ob in extract: + count3 = 0 + if directory == "": + tiedosto = open(ob,"r") + tiedosto2 = open(ob,"r") + count3 += os.path.getsize(ob) + toc3 += count3 + else: + tiedosto = open(directory+"/"+ob,"r") + tiedosto2 = open(directory+"/"+ob,"r") + count3 += os.path.getsize(directory+"/"+ob) + toc3 += count3 + count = 0 + count2 = 0 + line = tiedosto.readline() + while line != "": + count += 1 + toc += 1 + line = tiedosto.readline() + count2 += len(tiedosto2.read()) + toc2 += count2 + lista.append([count,count2,ob,count3]) + tiedosto.close() + tiedosto2.close() +print toc,"Lines in total" +print toc2,"Letters in total" +print toc3,"Bytes in total" + +for linecount, lettercount, filename, bytecount in lista: + print str(linecount)+" Lines (%s%%) || "%(str(round((float(linecount)/toc)*100,1))),str(lettercount)+" Letters (%s%%) in file " %(str(round((float(lettercount)/toc2)*100,1)))+filename + print str(bytecount) + " Bytes (%s%%) "%(str(round((float(bytecount)/toc3)*100,1))) diff --git a/bot/nudge.py b/bot/nudge.py index e39ebc314c..8c20c4c735 100644 --- a/bot/nudge.py +++ b/bot/nudge.py @@ -1,39 +1,39 @@ -import sys,pickle,socket, CORE_DATA -#def pack(): -# path = "/home/ski/Nanotrasen/message.txt" -# ip = sys.argv[1] -# dictionary = {"ip":ip,"data":1} -# try: -# targetfile = open(path,"r") -# except IOError: -# targetfile = open(path,"w") -# pickle.dump(dictionary,targetfile) -# targetfile.close() -# nudge() -# else: -# targetfile.close() #Professionals, have standards. -# pass -def pack(): - ip = sys.argv[1] - try: - data = sys.argv[2:] #The rest of the arguments is data - except: - data = "NO DATA SPECIFIED" - dictionary = {"ip":ip,"data":data} - pickled = pickle.dumps(dictionary) - nudge(pickled) -def nudge(data): - if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - pass - else: - HOST = "localhost" - PORT = 45678 - size = 1024 - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((HOST,PORT)) - s.send(data) - s.close() - -if __name__ == "__main__" and len(sys.argv) > 1: # If not imported and more than one argument - pack() - +import sys,pickle,socket, CORE_DATA +#def pack(): +# path = "/home/ski/Nanotrasen/message.txt" +# ip = sys.argv[1] +# dictionary = {"ip":ip,"data":1} +# try: +# targetfile = open(path,"r") +# except IOError: +# targetfile = open(path,"w") +# pickle.dump(dictionary,targetfile) +# targetfile.close() +# nudge() +# else: +# targetfile.close() #Professionals, have standards. +# pass +def pack(): + ip = sys.argv[1] + try: + data = sys.argv[2:] #The rest of the arguments is data + except: + data = "NO DATA SPECIFIED" + dictionary = {"ip":ip,"data":data} + pickled = pickle.dumps(dictionary) + nudge(pickled) +def nudge(data): + if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: + pass + else: + HOST = "localhost" + PORT = 45678 + size = 1024 + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((HOST,PORT)) + s.send(data) + s.close() + +if __name__ == "__main__" and len(sys.argv) > 1: # If not imported and more than one argument + pack() + diff --git a/bot/save_load.py b/bot/save_load.py index 34eac99072..1cd058763a 100644 --- a/bot/save_load.py +++ b/bot/save_load.py @@ -1,24 +1,24 @@ -import pickle -def save(filename,data,dnrw=0): - if dnrw == 1: - try: - tiedosto = open(filename,"r") - except: - tiedosto = open(filename,"w") - else: - return False - else: - tiedosto = open(filename,"w") - - if "http//" in data: - data = data.replace("http//","http://") - pickle.dump(data,tiedosto) - tiedosto.close() -def load(filename): - try: - tiedosto = open(filename,"r") - except IOError: - return "ERROR ERROR ERROR ERR" - a = pickle.load(tiedosto) - tiedosto.close() - return a +import pickle +def save(filename,data,dnrw=0): + if dnrw == 1: + try: + tiedosto = open(filename,"r") + except: + tiedosto = open(filename,"w") + else: + return False + else: + tiedosto = open(filename,"w") + + if "http//" in data: + data = data.replace("http//","http://") + pickle.dump(data,tiedosto) + tiedosto.close() +def load(filename): + try: + tiedosto = open(filename,"r") + except IOError: + return "ERROR ERROR ERROR ERR" + a = pickle.load(tiedosto) + tiedosto.close() + return a diff --git a/bot/some_but_not_all_2.py b/bot/some_but_not_all_2.py index 211eef9fd5..34627abd12 100644 --- a/bot/some_but_not_all_2.py +++ b/bot/some_but_not_all_2.py @@ -1,20 +1,20 @@ -def sbna2(only_one,one_of_these,data): - if type(only_one) != list: - only_one = list(only_one) - if type(data) != list: - data = data.split(" ") - count = 0 - for datoid in only_one: - if datoid in data and count >= 1: - return False - elif datoid in data: - count += 1 - pass - else: - pass - if count == 0: - return False - for datoid in one_of_these: - if datoid in data: - return True - return False +def sbna2(only_one,one_of_these,data): + if type(only_one) != list: + only_one = list(only_one) + if type(data) != list: + data = data.split(" ") + count = 0 + for datoid in only_one: + if datoid in data and count >= 1: + return False + elif datoid in data: + count += 1 + pass + else: + pass + if count == 0: + return False + for datoid in one_of_these: + if datoid in data: + return True + return False diff --git a/bot/xkcdparser.py b/bot/xkcdparser.py index 24d6f51416..7ad033d0b8 100644 --- a/bot/xkcdparser.py +++ b/bot/xkcdparser.py @@ -1,40 +1,40 @@ -from urllib2 import urlopen -from json import loads -from pickle import dump,load -from CORE_DATA import no_absolute_paths -def xkcd(link): - try: - filename = link[link.find("xkcd.com")+9:].replace("/","").replace("\\","") - if no_absolute_paths: - tiedosto = open("xkcdcache/"+filename,"r") - else: - tiedosto = open(directory+"xkcdcache/"+filename,"r") - except: - try: - if no_absolute_paths: - tiedosto = open("xkcdcache/"+filename,"w") - else: - tiedosto = open(directory+"xkcdcache/"+filename,"w") - except IOError: - return "NOTHING" - else: - try: - return load(tiedosto) - except EOFError: - tiedosto = open("xkcdcache/"+filename,"w") - pass #Corrupt cache, moving on. - if link[-1] == "/" or link[-1] == "\\": #Ending is fine. - link += "info.0.json" - else: - link += "/info.0.json" - try: - data = urlopen(link).read() - except: - return "NOTHING" - try: - newdata = loads(data)["title"] - dump(newdata,tiedosto) - return newdata - except: - return "NOTHING" - +from urllib2 import urlopen +from json import loads +from pickle import dump,load +from CORE_DATA import no_absolute_paths +def xkcd(link): + try: + filename = link[link.find("xkcd.com")+9:].replace("/","").replace("\\","") + if no_absolute_paths: + tiedosto = open("xkcdcache/"+filename,"r") + else: + tiedosto = open(directory+"xkcdcache/"+filename,"r") + except: + try: + if no_absolute_paths: + tiedosto = open("xkcdcache/"+filename,"w") + else: + tiedosto = open(directory+"xkcdcache/"+filename,"w") + except IOError: + return "NOTHING" + else: + try: + return load(tiedosto) + except EOFError: + tiedosto = open("xkcdcache/"+filename,"w") + pass #Corrupt cache, moving on. + if link[-1] == "/" or link[-1] == "\\": #Ending is fine. + link += "info.0.json" + else: + link += "/info.0.json" + try: + data = urlopen(link).read() + except: + return "NOTHING" + try: + newdata = loads(data)["title"] + dump(newdata,tiedosto) + return newdata + except: + return "NOTHING" + diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index a5e1563972..e5765075c2 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -1,231 +1,231 @@ -/* -Quick overview: - -Pipes combine to form pipelines -Pipelines and other atmospheric objects combine to form pipe_networks - Note: A single pipe_network represents a completely open space - -Pipes -> Pipelines -Pipelines + Other Objects -> Pipe network - -*/ -/obj/machinery/atmospherics - anchored = TRUE - idle_power_usage = 0 - active_power_usage = 0 - power_channel = ENVIRON - var/nodealert = 0 - var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts - - unacidable = TRUE - layer = ATMOS_LAYER - plane = PLATING_PLANE - - var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis. - var/connect_types = CONNECT_TYPE_REGULAR - var/piping_layer = PIPING_LAYER_DEFAULT // This will replace icon_connect_type at some point ~Leshana - var/icon_connect_type = "" //"-supply" or "-scrubbers" - var/construction_type = null // Type path of the pipe item when this is deconstructed. - var/pipe_state // icon_state as a pipe item - - var/initialize_directions = 0 - var/pipe_color - - var/global/datum/pipe_icon_manager/icon_manager - var/obj/machinery/atmospherics/node1 - var/obj/machinery/atmospherics/node2 - -/obj/machinery/atmospherics/New(loc, newdir) - ..() - if(!icon_manager) - icon_manager = new() - if(!isnull(newdir)) - set_dir(newdir) - if(!pipe_color) - pipe_color = color - color = null - - if(!pipe_color_check(pipe_color)) - pipe_color = null - init_dir() - -/obj/machinery/atmospherics/examine_icon() - return icon(icon=initial(icon),icon_state=initial(icon_state)) - -// This is used to set up what directions pipes will connect to. Should be called inside New() and whenever a dir changes. -/obj/machinery/atmospherics/proc/init_dir() - return - -// Get ALL initialize_directions - Some types (HE pipes etc) combine two vars together for this. -/obj/machinery/atmospherics/proc/get_init_dirs() - return initialize_directions - -// Get the direction each node is facing to connect. -// It now returns as a list so it can be fetched nicely, each entry corresponds to node of same number. -/obj/machinery/atmospherics/proc/get_node_connect_dirs() - return - -// Initializes nodes by looking at neighboring atmospherics machinery to connect to. -// When we're being constructed at runtime, atmos_init() is called by the construction code. -// When dynamically loading a map atmos_init is called by the maploader (initTemplateBounds proc) -// But during initial world creation its called by the master_controller. -// TODO - Consolidate these different ways of being called once SSatoms is created. -/obj/machinery/atmospherics/proc/atmos_init() - return - -/** Check if target is an acceptable target to connect as a node from this machine. */ -/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, node_num) - return (target.initialize_directions & get_dir(target,src)) && check_connectable(target) && target.check_connectable(src) - -/** Check if this machine is willing to connect with the target machine. */ -/obj/machinery/atmospherics/proc/check_connectable(obj/machinery/atmospherics/target) - return (src.connect_types & target.connect_types) - -/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) - if(istype(A, /obj/item/device/pipe_painter)) - return - ..() - -/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) - if(node) - if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - //underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) - else - //underlays += icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) - else - //underlays += icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) - -/obj/machinery/atmospherics/proc/update_underlays() - if(check_icon_cache()) - return 1 - else - return 0 - -/obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) - if(!istype(icon_manager)) - if(!safety) //to prevent infinite loops - icon_manager = new() - check_icon_cache(1) - return 0 - - return 1 - -/obj/machinery/atmospherics/proc/color_cache_name(var/obj/machinery/atmospherics/node) - //Don't use this for standard pipes - if(!istype(node)) - return null - - return node.pipe_color - -/obj/machinery/atmospherics/process() - last_flow_rate = 0 - last_power_draw = 0 - - build_network() - -/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - // Check to see if should be added to network. Add self if so and adjust variables appropriately. - // Note don't forget to have neighbors look as well! - - return null - -/obj/machinery/atmospherics/proc/build_network() - // Called to build a network from this node - - return null - -/obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference) - // Returns pipe_network associated with connection to reference - // Notes: should create network if necessary - // Should never return null - - return null - -/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - // Used when two pipe_networks are combining - -/obj/machinery/atmospherics/proc/return_network_air(datum/pipe_network/reference) - // Return a list of gas_mixture(s) in the object - // associated with reference pipe_network for use in rebuilding the networks gases list - // Is permitted to return null - -/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) - -/obj/machinery/atmospherics/update_icon() - return null - -/obj/machinery/atmospherics/proc/can_unwrench() - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - return 0 - return 1 - -// Deconstruct into a pipe item. -/obj/machinery/atmospherics/proc/deconstruct() - if(QDELETED(src)) - return - if(construction_type) - var/obj/item/pipe/I = new construction_type(loc, null, null, src) - I.setPipingLayer(piping_layer) - transfer_fingerprints_to(I) - qdel(src) - -// Return a list of nodes which we should call atmos_init() and build_network() during on_construction() -/obj/machinery/atmospherics/proc/get_neighbor_nodes_for_init() - return null - -// Called on construction (i.e from pipe item) but not on initialization -/obj/machinery/atmospherics/proc/on_construction(obj_color, set_layer) - pipe_color = obj_color - setPipingLayer(set_layer) - // TODO - M.connect_types = src.connect_types - Or otherwise copy from item? Or figure it out from piping layer? - var/turf/T = get_turf(src) - level = !T.is_plating() ? 2 : 1 - atmos_init() - if(QDELETED(src)) - return // TODO - Eventually should get rid of the need for this. - build_network() - var/list/nodes = get_neighbor_nodes_for_init() - for(var/obj/machinery/atmospherics/A in nodes) - A.atmos_init() - A.build_network() - // TODO - Should we do src.build_network() before or after the nodes? - // We've historically done before, but /tg does after. TODO research if there is a difference. - -// This sets our piping layer. Hopefully its cool. -/obj/machinery/atmospherics/proc/setPipingLayer(new_layer) - if(pipe_flags & (PIPING_DEFAULT_LAYER_ONLY|PIPING_ALL_LAYER)) - new_layer = PIPING_LAYER_DEFAULT - piping_layer = new_layer - // Do it the Polaris way - switch(piping_layer) - if(PIPING_LAYER_SCRUBBER) - icon_state = "[icon_state]-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - layer = PIPES_SCRUBBER_LAYER - icon_connect_type = "-scrubbers" - if(PIPING_LAYER_SUPPLY) - icon_state = "[icon_state]-supply" - connect_types = CONNECT_TYPE_SUPPLY - layer = PIPES_SUPPLY_LAYER - icon_connect_type = "-supply" - if(PIPING_LAYER_FUEL) - icon_state = "[icon_state]-fuel" - connect_types = CONNECT_TYPE_FUEL - layer = PIPES_FUEL_LAYER - icon_connect_type = "-fuel" - if(PIPING_LAYER_AUX) - icon_state = "[icon_state]-aux" - connect_types = CONNECT_TYPE_AUX - layer = PIPES_AUX_LAYER - icon_connect_type = "-aux" - if(pipe_flags & PIPING_ALL_LAYER) - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_AUX - // Or if we were to do it the TG way... - // pixel_x = PIPE_PIXEL_OFFSET_X(piping_layer) - // pixel_y = PIPE_PIXEL_OFFSET_Y(piping_layer) - // layer = initial(layer) + PIPE_LAYER_OFFSET(piping_layer) +/* +Quick overview: + +Pipes combine to form pipelines +Pipelines and other atmospheric objects combine to form pipe_networks + Note: A single pipe_network represents a completely open space + +Pipes -> Pipelines +Pipelines + Other Objects -> Pipe network + +*/ +/obj/machinery/atmospherics + anchored = TRUE + idle_power_usage = 0 + active_power_usage = 0 + power_channel = ENVIRON + var/nodealert = 0 + var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts + + unacidable = TRUE + layer = ATMOS_LAYER + plane = PLATING_PLANE + + var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis. + var/connect_types = CONNECT_TYPE_REGULAR + var/piping_layer = PIPING_LAYER_DEFAULT // This will replace icon_connect_type at some point ~Leshana + var/icon_connect_type = "" //"-supply" or "-scrubbers" + var/construction_type = null // Type path of the pipe item when this is deconstructed. + var/pipe_state // icon_state as a pipe item + + var/initialize_directions = 0 + var/pipe_color + + var/global/datum/pipe_icon_manager/icon_manager + var/obj/machinery/atmospherics/node1 + var/obj/machinery/atmospherics/node2 + +/obj/machinery/atmospherics/New(loc, newdir) + ..() + if(!icon_manager) + icon_manager = new() + if(!isnull(newdir)) + set_dir(newdir) + if(!pipe_color) + pipe_color = color + color = null + + if(!pipe_color_check(pipe_color)) + pipe_color = null + init_dir() + +/obj/machinery/atmospherics/examine_icon() + return icon(icon=initial(icon),icon_state=initial(icon_state)) + +// This is used to set up what directions pipes will connect to. Should be called inside New() and whenever a dir changes. +/obj/machinery/atmospherics/proc/init_dir() + return + +// Get ALL initialize_directions - Some types (HE pipes etc) combine two vars together for this. +/obj/machinery/atmospherics/proc/get_init_dirs() + return initialize_directions + +// Get the direction each node is facing to connect. +// It now returns as a list so it can be fetched nicely, each entry corresponds to node of same number. +/obj/machinery/atmospherics/proc/get_node_connect_dirs() + return + +// Initializes nodes by looking at neighboring atmospherics machinery to connect to. +// When we're being constructed at runtime, atmos_init() is called by the construction code. +// When dynamically loading a map atmos_init is called by the maploader (initTemplateBounds proc) +// But during initial world creation its called by the master_controller. +// TODO - Consolidate these different ways of being called once SSatoms is created. +/obj/machinery/atmospherics/proc/atmos_init() + return + +/** Check if target is an acceptable target to connect as a node from this machine. */ +/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, node_num) + return (target.initialize_directions & get_dir(target,src)) && check_connectable(target) && target.check_connectable(src) + +/** Check if this machine is willing to connect with the target machine. */ +/obj/machinery/atmospherics/proc/check_connectable(obj/machinery/atmospherics/target) + return (src.connect_types & target.connect_types) + +/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) + if(istype(A, /obj/item/device/pipe_painter)) + return + ..() + +/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) + if(node) + if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + //underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) + underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) + else + //underlays += icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) + underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + else + //underlays += icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) + underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) + +/obj/machinery/atmospherics/proc/update_underlays() + if(check_icon_cache()) + return 1 + else + return 0 + +/obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) + if(!istype(icon_manager)) + if(!safety) //to prevent infinite loops + icon_manager = new() + check_icon_cache(1) + return 0 + + return 1 + +/obj/machinery/atmospherics/proc/color_cache_name(var/obj/machinery/atmospherics/node) + //Don't use this for standard pipes + if(!istype(node)) + return null + + return node.pipe_color + +/obj/machinery/atmospherics/process() + last_flow_rate = 0 + last_power_draw = 0 + + build_network() + +/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + // Check to see if should be added to network. Add self if so and adjust variables appropriately. + // Note don't forget to have neighbors look as well! + + return null + +/obj/machinery/atmospherics/proc/build_network() + // Called to build a network from this node + + return null + +/obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference) + // Returns pipe_network associated with connection to reference + // Notes: should create network if necessary + // Should never return null + + return null + +/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + // Used when two pipe_networks are combining + +/obj/machinery/atmospherics/proc/return_network_air(datum/pipe_network/reference) + // Return a list of gas_mixture(s) in the object + // associated with reference pipe_network for use in rebuilding the networks gases list + // Is permitted to return null + +/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) + +/obj/machinery/atmospherics/update_icon() + return null + +/obj/machinery/atmospherics/proc/can_unwrench() + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + return 0 + return 1 + +// Deconstruct into a pipe item. +/obj/machinery/atmospherics/proc/deconstruct() + if(QDELETED(src)) + return + if(construction_type) + var/obj/item/pipe/I = new construction_type(loc, null, null, src) + I.setPipingLayer(piping_layer) + transfer_fingerprints_to(I) + qdel(src) + +// Return a list of nodes which we should call atmos_init() and build_network() during on_construction() +/obj/machinery/atmospherics/proc/get_neighbor_nodes_for_init() + return null + +// Called on construction (i.e from pipe item) but not on initialization +/obj/machinery/atmospherics/proc/on_construction(obj_color, set_layer) + pipe_color = obj_color + setPipingLayer(set_layer) + // TODO - M.connect_types = src.connect_types - Or otherwise copy from item? Or figure it out from piping layer? + var/turf/T = get_turf(src) + level = !T.is_plating() ? 2 : 1 + atmos_init() + if(QDELETED(src)) + return // TODO - Eventually should get rid of the need for this. + build_network() + var/list/nodes = get_neighbor_nodes_for_init() + for(var/obj/machinery/atmospherics/A in nodes) + A.atmos_init() + A.build_network() + // TODO - Should we do src.build_network() before or after the nodes? + // We've historically done before, but /tg does after. TODO research if there is a difference. + +// This sets our piping layer. Hopefully its cool. +/obj/machinery/atmospherics/proc/setPipingLayer(new_layer) + if(pipe_flags & (PIPING_DEFAULT_LAYER_ONLY|PIPING_ALL_LAYER)) + new_layer = PIPING_LAYER_DEFAULT + piping_layer = new_layer + // Do it the Polaris way + switch(piping_layer) + if(PIPING_LAYER_SCRUBBER) + icon_state = "[icon_state]-scrubbers" + connect_types = CONNECT_TYPE_SCRUBBER + layer = PIPES_SCRUBBER_LAYER + icon_connect_type = "-scrubbers" + if(PIPING_LAYER_SUPPLY) + icon_state = "[icon_state]-supply" + connect_types = CONNECT_TYPE_SUPPLY + layer = PIPES_SUPPLY_LAYER + icon_connect_type = "-supply" + if(PIPING_LAYER_FUEL) + icon_state = "[icon_state]-fuel" + connect_types = CONNECT_TYPE_FUEL + layer = PIPES_FUEL_LAYER + icon_connect_type = "-fuel" + if(PIPING_LAYER_AUX) + icon_state = "[icon_state]-aux" + connect_types = CONNECT_TYPE_AUX + layer = PIPES_AUX_LAYER + icon_connect_type = "-aux" + if(pipe_flags & PIPING_ALL_LAYER) + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_AUX + // Or if we were to do it the TG way... + // pixel_x = PIPE_PIXEL_OFFSET_X(piping_layer) + // pixel_y = PIPE_PIXEL_OFFSET_Y(piping_layer) + // layer = initial(layer) + PIPE_LAYER_OFFSET(piping_layer) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index cc280d97cc..cee94b9b5a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -1,129 +1,129 @@ -/obj/machinery/atmospherics/binary - dir = SOUTH - initialize_directions = SOUTH|NORTH - use_power = USE_POWER_IDLE - - var/datum/gas_mixture/air1 - var/datum/gas_mixture/air2 - - var/datum/pipe_network/network1 - var/datum/pipe_network/network2 - -/obj/machinery/atmospherics/binary/New() - ..() - - air1 = new - air2 = new - - air1.volume = 200 - air2.volume = 200 - -/obj/machinery/atmospherics/binary/init_dir() - switch(dir) - if(NORTH) - initialize_directions = NORTH|SOUTH - if(SOUTH) - initialize_directions = NORTH|SOUTH - if(EAST) - initialize_directions = EAST|WEST - if(WEST) - initialize_directions = EAST|WEST - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/binary/get_neighbor_nodes_for_init() - return list(node1, node2) - -/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network - - else if(reference == node2) - network2 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/binary/Destroy() - . = ..() - - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - -/obj/machinery/atmospherics/binary/atmos_init() - if(node1 && node2) - return - - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - - STANDARD_ATMOS_CHOOSE_NODE(1, node1_connect) - STANDARD_ATMOS_CHOOSE_NODE(2, node2_connect) - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/binary/build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - -/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - return null - -/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - - return 1 - -/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - - return results - -/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network1) - node1 = null - - else if(reference==node2) - qdel(network2) - node2 = null - - update_icon() - update_underlays() - +/obj/machinery/atmospherics/binary + dir = SOUTH + initialize_directions = SOUTH|NORTH + use_power = USE_POWER_IDLE + + var/datum/gas_mixture/air1 + var/datum/gas_mixture/air2 + + var/datum/pipe_network/network1 + var/datum/pipe_network/network2 + +/obj/machinery/atmospherics/binary/New() + ..() + + air1 = new + air2 = new + + air1.volume = 200 + air2.volume = 200 + +/obj/machinery/atmospherics/binary/init_dir() + switch(dir) + if(NORTH) + initialize_directions = NORTH|SOUTH + if(SOUTH) + initialize_directions = NORTH|SOUTH + if(EAST) + initialize_directions = EAST|WEST + if(WEST) + initialize_directions = EAST|WEST + +// Housekeeping and pipe network stuff below +/obj/machinery/atmospherics/binary/get_neighbor_nodes_for_init() + return list(node1, node2) + +/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node1) + network1 = new_network + + else if(reference == node2) + network2 = new_network + + if(new_network.normal_members.Find(src)) + return 0 + + new_network.normal_members += src + + return null + +/obj/machinery/atmospherics/binary/Destroy() + . = ..() + + if(node1) + node1.disconnect(src) + qdel(network1) + if(node2) + node2.disconnect(src) + qdel(network2) + + node1 = null + node2 = null + +/obj/machinery/atmospherics/binary/atmos_init() + if(node1 && node2) + return + + var/node2_connect = dir + var/node1_connect = turn(dir, 180) + + STANDARD_ATMOS_CHOOSE_NODE(1, node1_connect) + STANDARD_ATMOS_CHOOSE_NODE(2, node2_connect) + + update_icon() + update_underlays() + +/obj/machinery/atmospherics/binary/build_network() + if(!network1 && node1) + network1 = new /datum/pipe_network() + network1.normal_members += src + network1.build_network(node1, src) + + if(!network2 && node2) + network2 = new /datum/pipe_network() + network2.normal_members += src + network2.build_network(node2, src) + + +/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node1) + return network1 + + if(reference==node2) + return network2 + + return null + +/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network1 == old_network) + network1 = new_network + if(network2 == old_network) + network2 = new_network + + return 1 + +/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network1 == reference) + results += air1 + if(network2 == reference) + results += air2 + + return results + +/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + qdel(network1) + node1 = null + + else if(reference==node2) + qdel(network2) + node2 = null + + update_icon() + update_underlays() + return null \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 04856958cc..c3f6b81ee3 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -1,152 +1,152 @@ -//node1, air1, network1 correspond to input -//node2, air2, network2 correspond to output -/obj/machinery/atmospherics/binary/circulator - name = "circulator" - desc = "A gas circulator turbine and heat exchanger." - icon = 'icons/obj/power.dmi' - icon_state = "circ-unassembled" - anchored = FALSE - unacidable = TRUE - pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF - - var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency - var/volume_ratio = 0.2 - - var/recent_moles_transferred = 0 - var/last_heat_capacity = 0 - var/last_temperature = 0 - var/last_pressure_delta = 0 - var/last_worldtime_transfer = 0 - var/last_stored_energy_transferred = 0 - var/volume_capacity_used = 0 - var/stored_energy = 0 - var/temperature_overlay - - density = TRUE - -/obj/machinery/atmospherics/binary/circulator/New() - ..() - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - air1.volume = 400 - -/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/removed - if(anchored && !(stat&BROKEN) && network1) - var/input_starting_pressure = air1.return_pressure() - var/output_starting_pressure = air2.return_pressure() - last_pressure_delta = max(input_starting_pressure - output_starting_pressure - 5, 0) - - //only circulate air if there is a pressure difference (plus 5kPa kinetic, 10kPa static friction) - if(air1.temperature > 0 && last_pressure_delta > 5) - - //Calculate necessary moles to transfer using PV = nRT - recent_moles_transferred = (last_pressure_delta*network1.volume/(air1.temperature * R_IDEAL_GAS_EQUATION))/3 //uses the volume of the whole network, not just itself - volume_capacity_used = min( (last_pressure_delta*network1.volume/3)/(input_starting_pressure*air1.volume) , 1) //how much of the gas in the input air volume is consumed - - //Calculate energy generated from kinetic turbine - stored_energy += 1/ADIABATIC_EXPONENT * min(last_pressure_delta * network1.volume , input_starting_pressure*air1.volume) * (1 - volume_ratio**ADIABATIC_EXPONENT) * kinetic_efficiency - - //Actually transfer the gas - removed = air1.remove(recent_moles_transferred) - if(removed) - last_heat_capacity = removed.heat_capacity() - last_temperature = removed.temperature - - //Update the gas networks. - network1.update = 1 - - last_worldtime_transfer = world.time - else - recent_moles_transferred = 0 - - update_icon() - return removed - -/obj/machinery/atmospherics/binary/circulator/proc/return_stored_energy() - last_stored_energy_transferred = stored_energy - stored_energy = 0 - return last_stored_energy_transferred - -/obj/machinery/atmospherics/binary/circulator/process() - ..() - - if(last_worldtime_transfer < world.time - 50) - recent_moles_transferred = 0 - update_icon() - -/obj/machinery/atmospherics/binary/circulator/update_icon() - icon_state = anchored ? "circ-assembled" : "circ-unassembled" - cut_overlays() - if (stat & (BROKEN|NOPOWER) || !anchored) - return 1 - if (last_pressure_delta > 0 && recent_moles_transferred > 0) - if (temperature_overlay) - add_overlay(temperature_overlay) - if (last_pressure_delta > 5*ONE_ATMOSPHERE) - add_overlay("circ-run") - else - add_overlay("circ-slow") - else - add_overlay("circ-off") - - return 1 - -/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - playsound(src, W.usesound, 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet.") - - if(anchored) - temperature_overlay = null - if(dir & (NORTH|SOUTH)) - initialize_directions = NORTH|SOUTH - else if(dir & (EAST|WEST)) - initialize_directions = EAST|WEST - - atmos_init() - build_network() - if (node1) - node1.atmos_init() - node1.build_network() - if (node2) - node2.atmos_init() - node2.build_network() - else - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - - else - ..() - -/obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise() - set name = "Rotate Circulator Clockwise" - set category = "Object" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 270)) - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - - -/obj/machinery/atmospherics/binary/circulator/verb/rotate_counterclockwise() - set name = "Rotate Circulator Counterclockwise" - set category = "Object" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 90)) +//node1, air1, network1 correspond to input +//node2, air2, network2 correspond to output +/obj/machinery/atmospherics/binary/circulator + name = "circulator" + desc = "A gas circulator turbine and heat exchanger." + icon = 'icons/obj/power.dmi' + icon_state = "circ-unassembled" + anchored = FALSE + unacidable = TRUE + pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF + + var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency + var/volume_ratio = 0.2 + + var/recent_moles_transferred = 0 + var/last_heat_capacity = 0 + var/last_temperature = 0 + var/last_pressure_delta = 0 + var/last_worldtime_transfer = 0 + var/last_stored_energy_transferred = 0 + var/volume_capacity_used = 0 + var/stored_energy = 0 + var/temperature_overlay + + density = TRUE + +/obj/machinery/atmospherics/binary/circulator/New() + ..() + desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." + air1.volume = 400 + +/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() + var/datum/gas_mixture/removed + if(anchored && !(stat&BROKEN) && network1) + var/input_starting_pressure = air1.return_pressure() + var/output_starting_pressure = air2.return_pressure() + last_pressure_delta = max(input_starting_pressure - output_starting_pressure - 5, 0) + + //only circulate air if there is a pressure difference (plus 5kPa kinetic, 10kPa static friction) + if(air1.temperature > 0 && last_pressure_delta > 5) + + //Calculate necessary moles to transfer using PV = nRT + recent_moles_transferred = (last_pressure_delta*network1.volume/(air1.temperature * R_IDEAL_GAS_EQUATION))/3 //uses the volume of the whole network, not just itself + volume_capacity_used = min( (last_pressure_delta*network1.volume/3)/(input_starting_pressure*air1.volume) , 1) //how much of the gas in the input air volume is consumed + + //Calculate energy generated from kinetic turbine + stored_energy += 1/ADIABATIC_EXPONENT * min(last_pressure_delta * network1.volume , input_starting_pressure*air1.volume) * (1 - volume_ratio**ADIABATIC_EXPONENT) * kinetic_efficiency + + //Actually transfer the gas + removed = air1.remove(recent_moles_transferred) + if(removed) + last_heat_capacity = removed.heat_capacity() + last_temperature = removed.temperature + + //Update the gas networks. + network1.update = 1 + + last_worldtime_transfer = world.time + else + recent_moles_transferred = 0 + + update_icon() + return removed + +/obj/machinery/atmospherics/binary/circulator/proc/return_stored_energy() + last_stored_energy_transferred = stored_energy + stored_energy = 0 + return last_stored_energy_transferred + +/obj/machinery/atmospherics/binary/circulator/process() + ..() + + if(last_worldtime_transfer < world.time - 50) + recent_moles_transferred = 0 + update_icon() + +/obj/machinery/atmospherics/binary/circulator/update_icon() + icon_state = anchored ? "circ-assembled" : "circ-unassembled" + cut_overlays() + if (stat & (BROKEN|NOPOWER) || !anchored) + return 1 + if (last_pressure_delta > 0 && recent_moles_transferred > 0) + if (temperature_overlay) + add_overlay(temperature_overlay) + if (last_pressure_delta > 5*ONE_ATMOSPHERE) + add_overlay("circ-run") + else + add_overlay("circ-slow") + else + add_overlay("circ-off") + + return 1 + +/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + playsound(src, W.usesound, 75, 1) + anchored = !anchored + user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ + "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ + "You hear a ratchet.") + + if(anchored) + temperature_overlay = null + if(dir & (NORTH|SOUTH)) + initialize_directions = NORTH|SOUTH + else if(dir & (EAST|WEST)) + initialize_directions = EAST|WEST + + atmos_init() + build_network() + if (node1) + node1.atmos_init() + node1.build_network() + if (node2) + node2.atmos_init() + node2.build_network() + else + if(node1) + node1.disconnect(src) + qdel(network1) + if(node2) + node2.disconnect(src) + qdel(network2) + + node1 = null + node2 = null + + else + ..() + +/obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise() + set name = "Rotate Circulator Clockwise" + set category = "Object" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 270)) + desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." + + +/obj/machinery/atmospherics/binary/circulator/verb/rotate_counterclockwise() + set name = "Rotate Circulator Counterclockwise" + set category = "Object" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 90)) desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index aebea38901..251aa4c147 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -1,263 +1,263 @@ -#define DEFAULT_PRESSURE_DELTA 10000 - -#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE -#define INTERNAL_PRESSURE_BOUND 0 -#define PRESSURE_CHECKS 1 - -#define PRESSURE_CHECK_EXTERNAL 1 -#define PRESSURE_CHECK_INPUT 2 -#define PRESSURE_CHECK_OUTPUT 4 - -/obj/machinery/atmospherics/binary/dp_vent_pump - icon = 'icons/atmos/vent_pump.dmi' - icon_state = "map_dp_vent" - - //node2 is output port - //node1 is input port - - name = "Dual Port Air Vent" - desc = "Has a valve and pump attached to it. There are two ports." - - level = 1 - - use_power = USE_POWER_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 7500 //7500 W ~ 10 HP - - pipe_flags = PIPING_ALL_LAYER - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER //connects to regular, supply and scrubbers pipes - - var/pump_direction = 1 //0 = siphoning, 1 = releasing - - var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND - var/input_pressure_min = INTERNAL_PRESSURE_BOUND - var/output_pressure_max = DEFAULT_PRESSURE_DELTA - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - - var/pressure_checks = PRESSURE_CHECK_EXTERNAL - //1: Do not pass external_pressure_bound - //2: Do not pass input_pressure_min - //4: Do not pass output_pressure_max - -/obj/machinery/atmospherics/binary/dp_vent_pump/New() - ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP - icon = null - -/obj/machinery/atmospherics/binary/dp_vent_pump/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume - name = "Large Dual Port Air Vent" - -/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New() - ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 - -/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - cut_overlays() - - var/vent_icon = "vent" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) - vent_icon += "h" - - if(!powered()) - vent_icon += "off" - else - vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]" - - add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) - -/obj/machinery/atmospherics/binary/dp_vent_pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) - return - else - if (node1) - add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) - else - add_underlay(T, node1, turn(dir, -180)) - if (node2) - add_underlay(T, node2, dir, node2.icon_connect_type) - else - add_underlay(T, node2, dir) - -/obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) - update_icon() - update_underlays() - -/obj/machinery/atmospherics/binary/dp_vent_pump/process() - ..() - - last_power_draw = 0 - last_flow_rate = 0 - - if(stat & (NOPOWER|BROKEN) || !use_power) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - - var/power_draw = -1 - - //Figure out the target pressure difference - var/pressure_delta = get_pressure_delta(environment) - - if(pressure_delta > 0.5) - if(pump_direction) //internal -> external - if (node1 && (environment.temperature || air1.temperature)) - var/transfer_moles = calculate_transfer_moles(air1, environment, pressure_delta) - power_draw = pump_gas(src, air1, environment, transfer_moles, power_rating) - - if(power_draw >= 0 && network1) - network1.update = 1 - else //external -> internal - if (node2 && (environment.temperature || air2.temperature)) - var/transfer_moles = calculate_transfer_moles(environment, air2, pressure_delta, (network2)? network2.volume : 0) - - //limit flow rate from turfs - transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here - power_draw = pump_gas(src, environment, air2, transfer_moles, power_rating) - - if(power_draw >= 0 && network2) - network2.update = 1 - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - return 1 - -/obj/machinery/atmospherics/binary/dp_vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) - var/pressure_delta = DEFAULT_PRESSURE_DELTA - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //internal -> external - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INPUT) - pressure_delta = min(pressure_delta, air1.return_pressure() - input_pressure_min) //decreasing the pressure here - else //external -> internal - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here - if(pressure_checks & PRESSURE_CHECK_OUTPUT) - pressure_delta = min(pressure_delta, output_pressure_max - air2.return_pressure()) //increasing the pressure here - - return pressure_delta - - -//Radio remote control - -/obj/machinery/atmospherics/binary/dp_vent_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "ADVP", - "power" = use_power, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "input" = input_pressure_min, - "output" = output_pressure_max, - "external" = external_pressure_bound, - "sigtype" = "status" - ) - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - return 1 - -/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/binary/dp_vent_pump/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" - - -/obj/machinery/atmospherics/unary/vent_pump/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - if(signal.data["power"]) - update_use_power(text2num(signal.data["power"])) - - if(signal.data["power_toggle"]) - update_use_power(!use_power) - - if(signal.data["direction"]) - pump_direction = text2num(signal.data["direction"]) - - if(signal.data["checks"]) - pressure_checks = text2num(signal.data["checks"]) - - if(signal.data["purge"]) - pressure_checks &= ~1 - pump_direction = 0 - - if(signal.data["stabalize"]) - pressure_checks |= 1 - pump_direction = 1 - - if(signal.data["set_input_pressure"]) - input_pressure_min = between(0, text2num(signal.data["set_input_pressure"]), ONE_ATMOSPHERE*50) - - if(signal.data["set_output_pressure"]) - output_pressure_max = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) - - if(signal.data["set_external_pressure"]) - external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50) - - if(signal.data["status"]) - spawn(2) - broadcast_status() - return //do not update_icon - - spawn(2) - broadcast_status() - update_icon() - -#undef DEFAULT_PRESSURE_DELTA - -#undef EXTERNAL_PRESSURE_BOUND -#undef INTERNAL_PRESSURE_BOUND -#undef PRESSURE_CHECKS - -#undef PRESSURE_CHECK_EXTERNAL -#undef PRESSURE_CHECK_INPUT -#undef PRESSURE_CHECK_OUTPUT +#define DEFAULT_PRESSURE_DELTA 10000 + +#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE +#define INTERNAL_PRESSURE_BOUND 0 +#define PRESSURE_CHECKS 1 + +#define PRESSURE_CHECK_EXTERNAL 1 +#define PRESSURE_CHECK_INPUT 2 +#define PRESSURE_CHECK_OUTPUT 4 + +/obj/machinery/atmospherics/binary/dp_vent_pump + icon = 'icons/atmos/vent_pump.dmi' + icon_state = "map_dp_vent" + + //node2 is output port + //node1 is input port + + name = "Dual Port Air Vent" + desc = "Has a valve and pump attached to it. There are two ports." + + level = 1 + + use_power = USE_POWER_OFF + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 7500 //7500 W ~ 10 HP + + pipe_flags = PIPING_ALL_LAYER + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER //connects to regular, supply and scrubbers pipes + + var/pump_direction = 1 //0 = siphoning, 1 = releasing + + var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND + var/input_pressure_min = INTERNAL_PRESSURE_BOUND + var/output_pressure_max = DEFAULT_PRESSURE_DELTA + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + + var/pressure_checks = PRESSURE_CHECK_EXTERNAL + //1: Do not pass external_pressure_bound + //2: Do not pass input_pressure_min + //4: Do not pass output_pressure_max + +/obj/machinery/atmospherics/binary/dp_vent_pump/New() + ..() + air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + icon = null + +/obj/machinery/atmospherics/binary/dp_vent_pump/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume + name = "Large Dual Port Air Vent" + +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New() + ..() + air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 + air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 + +/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(var/safety = 0) + if(!check_icon_cache()) + return + + cut_overlays() + + var/vent_icon = "vent" + + var/turf/T = get_turf(src) + if(!istype(T)) + return + + if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) + vent_icon += "h" + + if(!powered()) + vent_icon += "off" + else + vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]" + + add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) + +/obj/machinery/atmospherics/binary/dp_vent_pump/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) + return + else + if (node1) + add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) + else + add_underlay(T, node1, turn(dir, -180)) + if (node2) + add_underlay(T, node2, dir, node2.icon_connect_type) + else + add_underlay(T, node2, dir) + +/obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) + update_icon() + update_underlays() + +/obj/machinery/atmospherics/binary/dp_vent_pump/process() + ..() + + last_power_draw = 0 + last_flow_rate = 0 + + if(stat & (NOPOWER|BROKEN) || !use_power) + return 0 + + var/datum/gas_mixture/environment = loc.return_air() + + var/power_draw = -1 + + //Figure out the target pressure difference + var/pressure_delta = get_pressure_delta(environment) + + if(pressure_delta > 0.5) + if(pump_direction) //internal -> external + if (node1 && (environment.temperature || air1.temperature)) + var/transfer_moles = calculate_transfer_moles(air1, environment, pressure_delta) + power_draw = pump_gas(src, air1, environment, transfer_moles, power_rating) + + if(power_draw >= 0 && network1) + network1.update = 1 + else //external -> internal + if (node2 && (environment.temperature || air2.temperature)) + var/transfer_moles = calculate_transfer_moles(environment, air2, pressure_delta, (network2)? network2.volume : 0) + + //limit flow rate from turfs + transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here + power_draw = pump_gas(src, environment, air2, transfer_moles, power_rating) + + if(power_draw >= 0 && network2) + network2.update = 1 + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + return 1 + +/obj/machinery/atmospherics/binary/dp_vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) + var/pressure_delta = DEFAULT_PRESSURE_DELTA + var/environment_pressure = environment.return_pressure() + + if(pump_direction) //internal -> external + if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here + if(pressure_checks & PRESSURE_CHECK_INPUT) + pressure_delta = min(pressure_delta, air1.return_pressure() - input_pressure_min) //decreasing the pressure here + else //external -> internal + if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here + if(pressure_checks & PRESSURE_CHECK_OUTPUT) + pressure_delta = min(pressure_delta, output_pressure_max - air2.return_pressure()) //increasing the pressure here + + return pressure_delta + + +//Radio remote control + +/obj/machinery/atmospherics/binary/dp_vent_pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "ADVP", + "power" = use_power, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "input" = input_pressure_min, + "output" = output_pressure_max, + "external" = external_pressure_bound, + "sigtype" = "status" + ) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + + return 1 + +/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/binary/dp_vent_pump/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + + +/obj/machinery/atmospherics/unary/vent_pump/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + if(signal.data["power"]) + update_use_power(text2num(signal.data["power"])) + + if(signal.data["power_toggle"]) + update_use_power(!use_power) + + if(signal.data["direction"]) + pump_direction = text2num(signal.data["direction"]) + + if(signal.data["checks"]) + pressure_checks = text2num(signal.data["checks"]) + + if(signal.data["purge"]) + pressure_checks &= ~1 + pump_direction = 0 + + if(signal.data["stabalize"]) + pressure_checks |= 1 + pump_direction = 1 + + if(signal.data["set_input_pressure"]) + input_pressure_min = between(0, text2num(signal.data["set_input_pressure"]), ONE_ATMOSPHERE*50) + + if(signal.data["set_output_pressure"]) + output_pressure_max = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) + + if(signal.data["set_external_pressure"]) + external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50) + + if(signal.data["status"]) + spawn(2) + broadcast_status() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + +#undef DEFAULT_PRESSURE_DELTA + +#undef EXTERNAL_PRESSURE_BOUND +#undef INTERNAL_PRESSURE_BOUND +#undef PRESSURE_CHECKS + +#undef PRESSURE_CHECK_EXTERNAL +#undef PRESSURE_CHECK_INPUT +#undef PRESSURE_CHECK_OUTPUT diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 364e7eda9f..5d39a60851 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -1,302 +1,302 @@ -#define REGULATE_NONE 0 -#define REGULATE_INPUT 1 //shuts off when input side is below the target pressure -#define REGULATE_OUTPUT 2 //shuts off when output side is above the target pressure - -/obj/machinery/atmospherics/binary/passive_gate - icon = 'icons/atmos/passive_gate.dmi' - icon_state = "map" - construction_type = /obj/item/pipe/directional - pipe_state = "passivegate" - level = 1 - - name = "pressure regulator" - desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. Does not require power." - - use_power = USE_POWER_OFF - interact_offline = TRUE - - var/unlocked = 0 //If 0, then the valve is locked closed, otherwise it is open(-able, it's a one-way valve so it closes if gas would flow backwards). - var/target_pressure = ONE_ATMOSPHERE - var/max_pressure_setting = 15000 //kPa - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - var/regulate_mode = REGULATE_OUTPUT - - var/flowing = 0 //for icons - becomes zero if the valve closes itself due to regulation mode - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - -/obj/machinery/atmospherics/binary/passive_gate/New() - ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - -/obj/machinery/atmospherics/binary/passive_gate/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/binary/passive_gate/update_icon() - icon_state = (unlocked && flowing)? "on" : "off" - -/obj/machinery/atmospherics/binary/passive_gate/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, turn(dir, 180)) - add_underlay(T, node2, dir) - -/obj/machinery/atmospherics/binary/passive_gate/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/binary/passive_gate/process() - ..() - - last_flow_rate = 0 - - if(!unlocked) - return 0 - - var/output_starting_pressure = air2.return_pressure() - var/input_starting_pressure = air1.return_pressure() - - var/pressure_delta - switch (regulate_mode) - if (REGULATE_INPUT) - pressure_delta = input_starting_pressure - target_pressure - if (REGULATE_OUTPUT) - pressure_delta = target_pressure - output_starting_pressure - if (REGULATE_NONE) - pressure_delta = input_starting_pressure - output_starting_pressure - - //-1 if pump_gas() did not move any gas, >= 0 otherwise - var/returnval = -1 - if((regulate_mode == REGULATE_NONE || pressure_delta > 0.01) && (air1.temperature > 0 || air2.temperature > 0)) //since it's basically a valve, it makes sense to check both temperatures - flowing = 1 - - //flow rate limit - var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles - - //Figure out how much gas to transfer to meet the target pressure. - switch (regulate_mode) - if (REGULATE_INPUT) - transfer_moles = min(transfer_moles, calculate_transfer_moles(air2, air1, pressure_delta, (network1)? network1.volume : 0)) - if (REGULATE_OUTPUT) - transfer_moles = min(transfer_moles, calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0)) - if (REGULATE_NONE) - var/source = air1 - var/sink = air2 - // If node1 is a network of more than 1 pipe, we want to transfer from that whole network, otw use just node1, as current - if(istype(node1, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/p = node1 - if(istype(p.parent, /datum/pipeline)) // Nested if-blocks to avoid the mystical : - var/datum/pipeline/l = p.parent - if(istype(l.air, /datum/gas_mixture)) - source = l.air - // If node2 is a network of more than 1 pipe, we want to transfer to that whole network, otw use just node2, as current - if(istype(node2, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/p = node2 - if(istype(p.parent, /datum/pipeline)) - var/datum/pipeline/l = p.parent - if(istype(l.air, /datum/gas_mixture)) - sink = l.air - transfer_moles = max(0, calculate_equalize_moles(source, sink)) // Not regulated, don't care about flow rate - - //pump_gas() will return a negative number if no flow occurred - if(regulate_mode == REGULATE_NONE) // ACTUALLY move gases from the whole network, not just the immediate pipes - var/source = air1 - var/sink = air2 - // If node1 is a network of more than 1 pipe, we want to transfer from that whole network, otw use just node1, as current - if(istype(node1, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/p = node1 - if(istype(p.parent, /datum/pipeline)) // Nested if-blocks to avoid the mystical : - var/datum/pipeline/l = p.parent - if(istype(l.air, /datum/gas_mixture)) - source = l.air - // If node2 is a network of more than 1 pipe, we want to transfer to that whole network, otw use just node2, as current - if(istype(node2, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/p = node2 - if(istype(p.parent, /datum/pipeline)) - var/datum/pipeline/l = p.parent - if(istype(l.air, /datum/gas_mixture)) - sink = l.air - returnval = pump_gas_passive(src, source, sink, transfer_moles) - else - returnval = pump_gas_passive(src, air1, air2, transfer_moles) - - if (returnval >= 0) - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 - - if (last_flow_rate) - flowing = 1 - - update_icon() - - -//Radio remote control - -/obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AGP", - "power" = unlocked, - "target_output" = target_pressure, - "regulate_mode" = regulate_mode, - "set_flow_rate" = set_flow_rate, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - return 1 - -/obj/machinery/atmospherics/binary/passive_gate/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - - if("power" in signal.data) - unlocked = text2num(signal.data["power"]) - - if("power_toggle" in signal.data) - unlocked = !unlocked - - if("set_target_pressure" in signal.data) - target_pressure = between(0, text2num(signal.data["set_target_pressure"]), max_pressure_setting) - - if("set_regulate_mode" in signal.data) - regulate_mode = text2num(signal.data["set_regulate_mode"]) - - if("set_flow_rate" in signal.data) - regulate_mode = text2num(signal.data["set_flow_rate"]) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/binary/passive_gate/attack_hand(user as mob) - if(..()) - return - add_fingerprint(usr) - if(!allowed(user)) - to_chat(user, "Access denied.") - return - tgui_interact(user) - -/obj/machinery/atmospherics/binary/passive_gate/tgui_interact(mob/user, datum/tgui/ui) - if(stat & BROKEN) - return FALSE - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PressureRegulator", name) - ui.open() - -/obj/machinery/atmospherics/binary/passive_gate/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/data[0] - - data = list( - "on" = unlocked, - "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. - "max_pressure" = max_pressure_setting, - "input_pressure" = round(air1.return_pressure()*100), - "output_pressure" = round(air2.return_pressure()*100), - "regulate_mode" = regulate_mode, - "set_flow_rate" = round(set_flow_rate*10), - "last_flow_rate" = round(last_flow_rate*10), - ) - - return data - - -/obj/machinery/atmospherics/binary/passive_gate/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("toggle_valve") - . = TRUE - unlocked = !unlocked - if("regulate_mode") - . = TRUE - switch(params["mode"]) - if("off") regulate_mode = REGULATE_NONE - if("input") regulate_mode = REGULATE_INPUT - if("output") regulate_mode = REGULATE_OUTPUT - - if("set_press") - . = TRUE - switch(params["press"]) - if("min") - target_pressure = 0 - if("max") - target_pressure = max_pressure_setting - if("set") - var/new_pressure = tgui_input_number(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure Control",src.target_pressure,max_pressure_setting,0) - src.target_pressure = between(0, new_pressure, max_pressure_setting) - - if("set_flow_rate") - . = TRUE - switch(params["press"]) - if("min") - set_flow_rate = 0 - if("max") - set_flow_rate = air1.volume - if("set") - var/new_flow_rate = tgui_input_number(usr,"Enter new flow rate limit (0-[air1.volume]L/s)","Flow Rate Control",src.set_flow_rate,air1.volume,0) - src.set_flow_rate = between(0, new_flow_rate, air1.volume) - - update_icon() - add_fingerprint(usr) - -/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (unlocked) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear ratchet.") - deconstruct() - -#undef REGULATE_NONE -#undef REGULATE_INPUT -#undef REGULATE_OUTPUT +#define REGULATE_NONE 0 +#define REGULATE_INPUT 1 //shuts off when input side is below the target pressure +#define REGULATE_OUTPUT 2 //shuts off when output side is above the target pressure + +/obj/machinery/atmospherics/binary/passive_gate + icon = 'icons/atmos/passive_gate.dmi' + icon_state = "map" + construction_type = /obj/item/pipe/directional + pipe_state = "passivegate" + level = 1 + + name = "pressure regulator" + desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. Does not require power." + + use_power = USE_POWER_OFF + interact_offline = TRUE + + var/unlocked = 0 //If 0, then the valve is locked closed, otherwise it is open(-able, it's a one-way valve so it closes if gas would flow backwards). + var/target_pressure = ONE_ATMOSPHERE + var/max_pressure_setting = 15000 //kPa + var/set_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 + var/regulate_mode = REGULATE_OUTPUT + + var/flowing = 0 //for icons - becomes zero if the valve closes itself due to regulation mode + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + +/obj/machinery/atmospherics/binary/passive_gate/New() + ..() + air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 + air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 + +/obj/machinery/atmospherics/binary/passive_gate/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/binary/passive_gate/update_icon() + icon_state = (unlocked && flowing)? "on" : "off" + +/obj/machinery/atmospherics/binary/passive_gate/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + add_underlay(T, node1, turn(dir, 180)) + add_underlay(T, node2, dir) + +/obj/machinery/atmospherics/binary/passive_gate/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/binary/passive_gate/process() + ..() + + last_flow_rate = 0 + + if(!unlocked) + return 0 + + var/output_starting_pressure = air2.return_pressure() + var/input_starting_pressure = air1.return_pressure() + + var/pressure_delta + switch (regulate_mode) + if (REGULATE_INPUT) + pressure_delta = input_starting_pressure - target_pressure + if (REGULATE_OUTPUT) + pressure_delta = target_pressure - output_starting_pressure + if (REGULATE_NONE) + pressure_delta = input_starting_pressure - output_starting_pressure + + //-1 if pump_gas() did not move any gas, >= 0 otherwise + var/returnval = -1 + if((regulate_mode == REGULATE_NONE || pressure_delta > 0.01) && (air1.temperature > 0 || air2.temperature > 0)) //since it's basically a valve, it makes sense to check both temperatures + flowing = 1 + + //flow rate limit + var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles + + //Figure out how much gas to transfer to meet the target pressure. + switch (regulate_mode) + if (REGULATE_INPUT) + transfer_moles = min(transfer_moles, calculate_transfer_moles(air2, air1, pressure_delta, (network1)? network1.volume : 0)) + if (REGULATE_OUTPUT) + transfer_moles = min(transfer_moles, calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0)) + if (REGULATE_NONE) + var/source = air1 + var/sink = air2 + // If node1 is a network of more than 1 pipe, we want to transfer from that whole network, otw use just node1, as current + if(istype(node1, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/p = node1 + if(istype(p.parent, /datum/pipeline)) // Nested if-blocks to avoid the mystical : + var/datum/pipeline/l = p.parent + if(istype(l.air, /datum/gas_mixture)) + source = l.air + // If node2 is a network of more than 1 pipe, we want to transfer to that whole network, otw use just node2, as current + if(istype(node2, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/p = node2 + if(istype(p.parent, /datum/pipeline)) + var/datum/pipeline/l = p.parent + if(istype(l.air, /datum/gas_mixture)) + sink = l.air + transfer_moles = max(0, calculate_equalize_moles(source, sink)) // Not regulated, don't care about flow rate + + //pump_gas() will return a negative number if no flow occurred + if(regulate_mode == REGULATE_NONE) // ACTUALLY move gases from the whole network, not just the immediate pipes + var/source = air1 + var/sink = air2 + // If node1 is a network of more than 1 pipe, we want to transfer from that whole network, otw use just node1, as current + if(istype(node1, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/p = node1 + if(istype(p.parent, /datum/pipeline)) // Nested if-blocks to avoid the mystical : + var/datum/pipeline/l = p.parent + if(istype(l.air, /datum/gas_mixture)) + source = l.air + // If node2 is a network of more than 1 pipe, we want to transfer to that whole network, otw use just node2, as current + if(istype(node2, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/p = node2 + if(istype(p.parent, /datum/pipeline)) + var/datum/pipeline/l = p.parent + if(istype(l.air, /datum/gas_mixture)) + sink = l.air + returnval = pump_gas_passive(src, source, sink, transfer_moles) + else + returnval = pump_gas_passive(src, air1, air2, transfer_moles) + + if (returnval >= 0) + if(network1) + network1.update = 1 + + if(network2) + network2.update = 1 + + if (last_flow_rate) + flowing = 1 + + update_icon() + + +//Radio remote control + +/obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "AGP", + "power" = unlocked, + "target_output" = target_pressure, + "regulate_mode" = regulate_mode, + "set_flow_rate" = set_flow_rate, + "sigtype" = "status" + ) + + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + + return 1 + +/obj/machinery/atmospherics/binary/passive_gate/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + + if("power" in signal.data) + unlocked = text2num(signal.data["power"]) + + if("power_toggle" in signal.data) + unlocked = !unlocked + + if("set_target_pressure" in signal.data) + target_pressure = between(0, text2num(signal.data["set_target_pressure"]), max_pressure_setting) + + if("set_regulate_mode" in signal.data) + regulate_mode = text2num(signal.data["set_regulate_mode"]) + + if("set_flow_rate" in signal.data) + regulate_mode = text2num(signal.data["set_flow_rate"]) + + if("status" in signal.data) + spawn(2) + broadcast_status() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/binary/passive_gate/attack_hand(user as mob) + if(..()) + return + add_fingerprint(usr) + if(!allowed(user)) + to_chat(user, "Access denied.") + return + tgui_interact(user) + +/obj/machinery/atmospherics/binary/passive_gate/tgui_interact(mob/user, datum/tgui/ui) + if(stat & BROKEN) + return FALSE + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PressureRegulator", name) + ui.open() + +/obj/machinery/atmospherics/binary/passive_gate/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/data[0] + + data = list( + "on" = unlocked, + "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. + "max_pressure" = max_pressure_setting, + "input_pressure" = round(air1.return_pressure()*100), + "output_pressure" = round(air2.return_pressure()*100), + "regulate_mode" = regulate_mode, + "set_flow_rate" = round(set_flow_rate*10), + "last_flow_rate" = round(last_flow_rate*10), + ) + + return data + + +/obj/machinery/atmospherics/binary/passive_gate/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("toggle_valve") + . = TRUE + unlocked = !unlocked + if("regulate_mode") + . = TRUE + switch(params["mode"]) + if("off") regulate_mode = REGULATE_NONE + if("input") regulate_mode = REGULATE_INPUT + if("output") regulate_mode = REGULATE_OUTPUT + + if("set_press") + . = TRUE + switch(params["press"]) + if("min") + target_pressure = 0 + if("max") + target_pressure = max_pressure_setting + if("set") + var/new_pressure = tgui_input_number(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure Control",src.target_pressure,max_pressure_setting,0) + src.target_pressure = between(0, new_pressure, max_pressure_setting) + + if("set_flow_rate") + . = TRUE + switch(params["press"]) + if("min") + set_flow_rate = 0 + if("max") + set_flow_rate = air1.volume + if("set") + var/new_flow_rate = tgui_input_number(usr,"Enter new flow rate limit (0-[air1.volume]L/s)","Flow Rate Control",src.set_flow_rate,air1.volume,0) + src.set_flow_rate = between(0, new_flow_rate, air1.volume) + + update_icon() + add_fingerprint(usr) + +/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (unlocked) + to_chat(user, "You cannot unwrench \the [src], turn it off first.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear ratchet.") + deconstruct() + +#undef REGULATE_NONE +#undef REGULATE_INPUT +#undef REGULATE_OUTPUT diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index d979f9decf..3e22ea310d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -1,258 +1,258 @@ -/* -Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure. - -node1, air1, network1 correspond to input -node2, air2, network2 correspond to output - -Thus, the two variables affect pump operation are set in New(): - air1.volume - This is the volume of gas available to the pump that may be transfered to the output - air2.volume - Higher quantities of this cause more air to be perfected later - but overall network volume is also increased as this increases... -*/ - -/obj/machinery/atmospherics/binary/pump - icon = 'icons/atmos/pump.dmi' - icon_state = "map_off" - construction_type = /obj/item/pipe/directional - pipe_state = "pump" - level = 1 - var/base_icon = "pump" - - name = "gas pump" - desc = "A pump that moves gas from one place to another." - - var/target_pressure = ONE_ATMOSPHERE - - //var/max_volume_transfer = 10000 - - use_power = USE_POWER_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 7500 //7500 W ~ 10 HP - - var/max_pressure_setting = 15000 //kPa - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - -/obj/machinery/atmospherics/binary/pump/New() - ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP - -/obj/machinery/atmospherics/binary/pump/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/binary/pump/on - icon_state = "map_on" - use_power = USE_POWER_IDLE - -/obj/machinery/atmospherics/binary/pump/fuel - icon_state = "map_off-fuel" - base_icon = "pump-fuel" - icon_connect_type = "-fuel" - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/binary/pump/fuel/on - icon_state = "map_on-fuel" - use_power = USE_POWER_IDLE - -/obj/machinery/atmospherics/binary/pump/aux - icon_state = "map_off-aux" - base_icon = "pump-aux" - icon_connect_type = "-aux" - connect_types = CONNECT_TYPE_AUX - -/obj/machinery/atmospherics/binary/pump/aux/on - icon_state = "map_on-aux" - use_power = USE_POWER_IDLE - -/obj/machinery/atmospherics/binary/pump/update_icon() - if(!powered()) - icon_state = "[base_icon]-off" - else - icon_state = "[use_power ? "[base_icon]-on" : "[base_icon]-off"]" - -/obj/machinery/atmospherics/binary/pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, turn(dir, -180), node1?.icon_connect_type) - add_underlay(T, node2, dir, node2?.icon_connect_type) - -/obj/machinery/atmospherics/binary/pump/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/binary/pump/process() - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - var/power_draw = -1 - var/pressure_delta = target_pressure - air2.return_pressure() - - if(pressure_delta > 0.01 && air1.temperature > 0) - //Figure out how much gas to transfer to meet the target pressure. - var/transfer_moles = calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0) - power_draw = pump_gas(src, air1, air2, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 - - return 1 - -//Radio remote control - -/obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/atmospherics/binary/pump/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AGP", - "power" = use_power, - "target_output" = target_pressure, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - return 1 - -/obj/machinery/atmospherics/binary/pump/tgui_interact(mob/user, datum/tgui/ui) - if(stat & (BROKEN|NOPOWER)) - return - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "GasPump", name) - ui.open() - -/obj/machinery/atmospherics/binary/pump/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/data[0] - - data = list( - "on" = use_power, - "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. - "max_pressure" = max_pressure_setting, - "last_flow_rate" = round(last_flow_rate*10), - "last_power_draw" = round(last_power_draw), - "max_power_draw" = power_rating, - ) - - return data - -/obj/machinery/atmospherics/binary/pump/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["power"]) - if(text2num(signal.data["power"])) - update_use_power(USE_POWER_IDLE) - else - update_use_power(USE_POWER_OFF) - - if("power_toggle" in signal.data) - update_use_power(!use_power) - - if(signal.data["set_output_pressure"]) - target_pressure = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) - - if(signal.data["status"]) - spawn(2) - broadcast_status() - return //do not update_icon - - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) - tgui_interact(user) - -/obj/machinery/atmospherics/binary/pump/attack_hand(mob/user) - if(..()) - return - add_fingerprint(usr) - if(!allowed(user)) - to_chat(user, "Access denied.") - return - tgui_interact(user) - -/obj/machinery/atmospherics/binary/pump/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - update_use_power(!use_power) - . = TRUE - if("set_press") - var/press = params["press"] - switch(press) - if("min") - target_pressure = 0 - if("max") - target_pressure = max_pressure_setting - if("set") - var/new_pressure = tgui_input_number(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure,max_pressure_setting,0) - src.target_pressure = between(0, new_pressure, max_pressure_setting) - . = TRUE - - add_fingerprint(usr) - update_icon() - -/obj/machinery/atmospherics/binary/pump/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (!(stat & NOPOWER) && use_power) - to_chat(user, "You cannot unwrench this [src], turn it off first.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench this [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear ratchet.") - deconstruct() +/* +Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure. + +node1, air1, network1 correspond to input +node2, air2, network2 correspond to output + +Thus, the two variables affect pump operation are set in New(): + air1.volume + This is the volume of gas available to the pump that may be transfered to the output + air2.volume + Higher quantities of this cause more air to be perfected later + but overall network volume is also increased as this increases... +*/ + +/obj/machinery/atmospherics/binary/pump + icon = 'icons/atmos/pump.dmi' + icon_state = "map_off" + construction_type = /obj/item/pipe/directional + pipe_state = "pump" + level = 1 + var/base_icon = "pump" + + name = "gas pump" + desc = "A pump that moves gas from one place to another." + + var/target_pressure = ONE_ATMOSPHERE + + //var/max_volume_transfer = 10000 + + use_power = USE_POWER_OFF + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 7500 //7500 W ~ 10 HP + + var/max_pressure_setting = 15000 //kPa + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + +/obj/machinery/atmospherics/binary/pump/New() + ..() + air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + +/obj/machinery/atmospherics/binary/pump/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/binary/pump/on + icon_state = "map_on" + use_power = USE_POWER_IDLE + +/obj/machinery/atmospherics/binary/pump/fuel + icon_state = "map_off-fuel" + base_icon = "pump-fuel" + icon_connect_type = "-fuel" + connect_types = CONNECT_TYPE_FUEL + +/obj/machinery/atmospherics/binary/pump/fuel/on + icon_state = "map_on-fuel" + use_power = USE_POWER_IDLE + +/obj/machinery/atmospherics/binary/pump/aux + icon_state = "map_off-aux" + base_icon = "pump-aux" + icon_connect_type = "-aux" + connect_types = CONNECT_TYPE_AUX + +/obj/machinery/atmospherics/binary/pump/aux/on + icon_state = "map_on-aux" + use_power = USE_POWER_IDLE + +/obj/machinery/atmospherics/binary/pump/update_icon() + if(!powered()) + icon_state = "[base_icon]-off" + else + icon_state = "[use_power ? "[base_icon]-on" : "[base_icon]-off"]" + +/obj/machinery/atmospherics/binary/pump/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + add_underlay(T, node1, turn(dir, -180), node1?.icon_connect_type) + add_underlay(T, node2, dir, node2?.icon_connect_type) + +/obj/machinery/atmospherics/binary/pump/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/binary/pump/process() + last_power_draw = 0 + last_flow_rate = 0 + + if((stat & (NOPOWER|BROKEN)) || !use_power) + return + + var/power_draw = -1 + var/pressure_delta = target_pressure - air2.return_pressure() + + if(pressure_delta > 0.01 && air1.temperature > 0) + //Figure out how much gas to transfer to meet the target pressure. + var/transfer_moles = calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0) + power_draw = pump_gas(src, air1, air2, transfer_moles, power_rating) + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + if(network1) + network1.update = 1 + + if(network2) + network2.update = 1 + + return 1 + +//Radio remote control + +/obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/binary/pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "AGP", + "power" = use_power, + "target_output" = target_pressure, + "sigtype" = "status" + ) + + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + + return 1 + +/obj/machinery/atmospherics/binary/pump/tgui_interact(mob/user, datum/tgui/ui) + if(stat & (BROKEN|NOPOWER)) + return + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GasPump", name) + ui.open() + +/obj/machinery/atmospherics/binary/pump/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/data[0] + + data = list( + "on" = use_power, + "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. + "max_pressure" = max_pressure_setting, + "last_flow_rate" = round(last_flow_rate*10), + "last_power_draw" = round(last_power_draw), + "max_power_draw" = power_rating, + ) + + return data + +/obj/machinery/atmospherics/binary/pump/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + + if(signal.data["power"]) + if(text2num(signal.data["power"])) + update_use_power(USE_POWER_IDLE) + else + update_use_power(USE_POWER_OFF) + + if("power_toggle" in signal.data) + update_use_power(!use_power) + + if(signal.data["set_output_pressure"]) + target_pressure = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) + + if(signal.data["status"]) + spawn(2) + broadcast_status() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) + tgui_interact(user) + +/obj/machinery/atmospherics/binary/pump/attack_hand(mob/user) + if(..()) + return + add_fingerprint(usr) + if(!allowed(user)) + to_chat(user, "Access denied.") + return + tgui_interact(user) + +/obj/machinery/atmospherics/binary/pump/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("power") + update_use_power(!use_power) + . = TRUE + if("set_press") + var/press = params["press"] + switch(press) + if("min") + target_pressure = 0 + if("max") + target_pressure = max_pressure_setting + if("set") + var/new_pressure = tgui_input_number(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure,max_pressure_setting,0) + src.target_pressure = between(0, new_pressure, max_pressure_setting) + . = TRUE + + add_fingerprint(usr) + update_icon() + +/obj/machinery/atmospherics/binary/pump/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (!(stat & NOPOWER) && use_power) + to_chat(user, "You cannot unwrench this [src], turn it off first.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench this [src], it too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear ratchet.") + deconstruct() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 8e82750588..135e5a1194 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -1,21 +1,21 @@ -/obj/machinery/atmospherics/binary/pump/high_power - icon = 'icons/atmos/volume_pump.dmi' - icon_state = "map_off" - construction_type = /obj/item/pipe/directional - pipe_state = "volumepump" - level = 1 - - name = "high power gas pump" - desc = "A pump that moves gas from one place to another. Has double the power rating of the standard gas pump." - - power_rating = 15000 //15000 W ~ 20 HP - -/obj/machinery/atmospherics/binary/pump/high_power/on - use_power = USE_POWER_IDLE - icon_state = "map_on" - -/obj/machinery/atmospherics/binary/pump/high_power/update_icon() - if(!powered()) - icon_state = "off" - else +/obj/machinery/atmospherics/binary/pump/high_power + icon = 'icons/atmos/volume_pump.dmi' + icon_state = "map_off" + construction_type = /obj/item/pipe/directional + pipe_state = "volumepump" + level = 1 + + name = "high power gas pump" + desc = "A pump that moves gas from one place to another. Has double the power rating of the standard gas pump." + + power_rating = 15000 //15000 W ~ 20 HP + +/obj/machinery/atmospherics/binary/pump/high_power/on + use_power = USE_POWER_IDLE + icon_state = "map_on" + +/obj/machinery/atmospherics/binary/pump/high_power/update_icon() + if(!powered()) + icon_state = "off" + else icon_state = "[use_power ? "on" : "off"]" \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 84b39b95c3..5d315cf0a0 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -1,168 +1,168 @@ -/obj/machinery/atmospherics/portables_connector - icon = 'icons/atmos/connector.dmi' - icon_state = "map_connector" - - name = "Connector Port" - desc = "For connecting portables devices related to atmospherics control." - - dir = SOUTH - initialize_directions = SOUTH - construction_type = /obj/item/pipe/directional - pipe_state = "connector" - pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF - - var/obj/machinery/portable_atmospherics/connected_device - - var/obj/machinery/atmospherics/node - - var/datum/pipe_network/network - - var/on = 0 - use_power = USE_POWER_OFF - level = 1 - -/obj/machinery/atmospherics/portables_connector/fuel - icon_state = "map_connector-fuel" - pipe_state = "connector-fuel" - icon_connect_type = "-fuel" - pipe_flags = PIPING_ONE_PER_TURF - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/portables_connector/aux - icon_state = "map_connector-aux" - pipe_state = "connector-aux" - icon_connect_type = "-aux" - pipe_flags = PIPING_ONE_PER_TURF - connect_types = CONNECT_TYPE_AUX - -/obj/machinery/atmospherics/portables_connector/init_dir() - initialize_directions = dir - -/obj/machinery/atmospherics/portables_connector/update_icon() - icon_state = "connector" - -/obj/machinery/atmospherics/portables_connector/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node, dir, node?.icon_connect_type) - -/obj/machinery/atmospherics/portables_connector/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/portables_connector/process() - ..() - if(!on) - return - if(!connected_device) - on = 0 - return - if(network) - network.update = 1 - return 1 - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/portables_connector/get_neighbor_nodes_for_init() - return list(node) - -/obj/machinery/atmospherics/portables_connector/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/portables_connector/Destroy() - . = ..() - - if(connected_device) - connected_device.disconnect() - - if(node) - node.disconnect(src) - qdel(network) - - node = null - -/obj/machinery/atmospherics/portables_connector/atmos_init() - if(node) - return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(can_be_node(target, 1)) - node = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/portables_connector/build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) - - -/obj/machinery/atmospherics/portables_connector/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - if(reference==connected_device) - return network - - return null - -/obj/machinery/atmospherics/portables_connector/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - - return 1 - -/obj/machinery/atmospherics/portables_connector/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(connected_device) - results += connected_device.air_contents - - return results - -/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - qdel(network) - node = null - - update_underlays() - - return null - - -/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (connected_device) - to_chat(user, "You cannot unwrench \the [src], dettach \the [connected_device] first.") - return 1 - if (locate(/obj/machinery/portable_atmospherics, src.loc)) - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() +/obj/machinery/atmospherics/portables_connector + icon = 'icons/atmos/connector.dmi' + icon_state = "map_connector" + + name = "Connector Port" + desc = "For connecting portables devices related to atmospherics control." + + dir = SOUTH + initialize_directions = SOUTH + construction_type = /obj/item/pipe/directional + pipe_state = "connector" + pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF + + var/obj/machinery/portable_atmospherics/connected_device + + var/obj/machinery/atmospherics/node + + var/datum/pipe_network/network + + var/on = 0 + use_power = USE_POWER_OFF + level = 1 + +/obj/machinery/atmospherics/portables_connector/fuel + icon_state = "map_connector-fuel" + pipe_state = "connector-fuel" + icon_connect_type = "-fuel" + pipe_flags = PIPING_ONE_PER_TURF + connect_types = CONNECT_TYPE_FUEL + +/obj/machinery/atmospherics/portables_connector/aux + icon_state = "map_connector-aux" + pipe_state = "connector-aux" + icon_connect_type = "-aux" + pipe_flags = PIPING_ONE_PER_TURF + connect_types = CONNECT_TYPE_AUX + +/obj/machinery/atmospherics/portables_connector/init_dir() + initialize_directions = dir + +/obj/machinery/atmospherics/portables_connector/update_icon() + icon_state = "connector" + +/obj/machinery/atmospherics/portables_connector/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + add_underlay(T, node, dir, node?.icon_connect_type) + +/obj/machinery/atmospherics/portables_connector/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/portables_connector/process() + ..() + if(!on) + return + if(!connected_device) + on = 0 + return + if(network) + network.update = 1 + return 1 + +// Housekeeping and pipe network stuff below +/obj/machinery/atmospherics/portables_connector/get_neighbor_nodes_for_init() + return list(node) + +/obj/machinery/atmospherics/portables_connector/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node) + network = new_network + + if(new_network.normal_members.Find(src)) + return 0 + + new_network.normal_members += src + + return null + +/obj/machinery/atmospherics/portables_connector/Destroy() + . = ..() + + if(connected_device) + connected_device.disconnect() + + if(node) + node.disconnect(src) + qdel(network) + + node = null + +/obj/machinery/atmospherics/portables_connector/atmos_init() + if(node) + return + + var/node_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) + if(can_be_node(target, 1)) + node = target + break + + update_icon() + update_underlays() + +/obj/machinery/atmospherics/portables_connector/build_network() + if(!network && node) + network = new /datum/pipe_network() + network.normal_members += src + network.build_network(node, src) + + +/obj/machinery/atmospherics/portables_connector/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node) + return network + + if(reference==connected_device) + return network + + return null + +/obj/machinery/atmospherics/portables_connector/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network == old_network) + network = new_network + + return 1 + +/obj/machinery/atmospherics/portables_connector/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(connected_device) + results += connected_device.air_contents + + return results + +/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) + if(reference==node) + qdel(network) + node = null + + update_underlays() + + return null + + +/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (connected_device) + to_chat(user, "You cannot unwrench \the [src], dettach \the [connected_device] first.") + return 1 + if (locate(/obj/machinery/portable_atmospherics, src.loc)) + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 48085569bc..18ade9acef 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -1,231 +1,231 @@ -/obj/machinery/atmospherics/trinary/atmos_filter - icon = 'icons/atmos/filter.dmi' - icon_state = "map" - construction_type = /obj/item/pipe/trinary/flippable - pipe_state = "filter" - density = FALSE - level = 1 - - name = "Gas filter" - desc = "Filters one type of gas from an input, and pushes it out the side." - - use_power = USE_POWER_IDLE - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 7500 //This also doubles as a measure of how powerful the filter is, in Watts. 7500 W ~ 10 HP - - var/temp = null // -- TLE - - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_FILTER - - /* - Filter types: - -1: Nothing - 0: Phoron: Phoron, Oxygen Agent B - 1: Oxygen: Oxygen ONLY - 2: Nitrogen: Nitrogen ONLY - 3: Carbon Dioxide: Carbon Dioxide ONLY - 4: Nitrous Oxide (Formerly called Sleeping Agent) (N2O) - */ - var/filter_type = -1 - var/list/filtered_out = list() - - - var/frequency = 0 - var/datum/radio_frequency/radio_connection - -/obj/machinery/atmospherics/trinary/atmos_filter/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/atmospherics/trinary/atmos_filter/New() - ..() - switch(filter_type) - if(0) //removing hydrocarbons - filtered_out = list("phoron") - if(1) //removing O2 - filtered_out = list("oxygen") - if(2) //removing N2 - filtered_out = list("nitrogen") - if(3) //removing CO2 - filtered_out = list("carbon_dioxide") - if(4)//removing N2O - filtered_out = list("nitrous_oxide") - - air1.volume = ATMOS_DEFAULT_VOLUME_FILTER - air2.volume = ATMOS_DEFAULT_VOLUME_FILTER - air3.volume = ATMOS_DEFAULT_VOLUME_FILTER - -/obj/machinery/atmospherics/trinary/atmos_filter/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/trinary/atmos_filter/update_icon() - if(mirrored) - icon_state = "m" - else - icon_state = "" - - if(!powered()) - icon_state += "off" - else if(node2 && node3 && node1) - icon_state += use_power ? "on" : "off" - else - icon_state += "off" - update_use_power(USE_POWER_OFF) - -/obj/machinery/atmospherics/trinary/atmos_filter/process() - ..() - - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - //Figure out the amount of moles to transfer - var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles - - var/power_draw = -1 - if (transfer_moles > MINIMUM_MOLES_TO_FILTER) - power_draw = filter_gas(src, filtered_out, air1, air2, air3, transfer_moles, power_rating) - - if(network2) - network2.update = 1 - - if(network3) - network3.update = 1 - - if(network1) - network1.update = 1 - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - return 1 - -/obj/machinery/atmospherics/trinary/atmos_filter/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user) // -- TLE - if(..()) - return - - if(!src.allowed(user)) - to_chat(user, "Access denied.") - return - - tgui_interact(user) - - // var/dat - // var/current_filter_type - // switch(filter_type) - // if(0) - // current_filter_type = "Phoron" - // if(1) - // current_filter_type = "Oxygen" - // if(2) - // current_filter_type = "Nitrogen" - // if(3) - // current_filter_type = "Carbon Dioxide" - // if(4) - // current_filter_type = "Nitrous Oxide" - // if(-1) - // current_filter_type = "Nothing" - // else - // current_filter_type = "ERROR - Report this bug to the admin, please!" - - // dat += {" - // Power: [use_power?"On":"Off"]
- // Filtering: [current_filter_type]

- //

Set Filter Type:

- // Phoron
- // Oxygen
- // Nitrogen
- // Carbon Dioxide
- // Nitrous Oxide
- // Nothing
- //
- // Set Flow Rate Limit: - // [src.set_flow_rate]L/s | Change
- // Flow rate: [round(last_flow_rate, 0.1)]L/s - // "} - - // user << browse("[src.name] control[dat]", "window=atmos_filter") - // onclose(user, "atmos_filter") - - - -/obj/machinery/atmospherics/trinary/atmos_filter/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AtmosFilter", name) - ui.open() - -/obj/machinery/atmospherics/trinary/atmos_filter/tgui_data(mob/user) - var/list/data = list() - - data["on"] = use_power - data["rate"] = set_flow_rate - data["max_rate"] = air1.volume - data["last_flow_rate"] = round(last_flow_rate, 0.1) - - data["filter_types"] = list() - data["filter_types"] += list(list("name" = "Nothing", "f_type" = -1, "selected" = filter_type == -1)) - data["filter_types"] += list(list("name" = "Phoron", "f_type" = 0, "selected" = filter_type == 0)) - data["filter_types"] += list(list("name" = "Oxygen", "f_type" = 1, "selected" = filter_type == 1)) - data["filter_types"] += list(list("name" = "Nitrogen", "f_type" = 2, "selected" = filter_type == 2)) - data["filter_types"] += list(list("name" = "Carbon Dioxide", "f_type" = 3, "selected" = filter_type == 3)) - data["filter_types"] += list(list("name" = "Nitrous Oxide", "f_type" = 4, "selected" = filter_type == 4)) - - return data - -/obj/machinery/atmospherics/trinary/atmos_filter/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - update_use_power(!use_power) - if("rate") - var/rate = params["rate"] - if(rate == "max") - rate = air1.volume - . = TRUE - else if(text2num(rate) != null) - rate = text2num(rate) - . = TRUE - if(.) - set_flow_rate = clamp(rate, 0, air1.volume) - if("filter") - . = TRUE - filter_type = text2num(params["filterset"]) - filtered_out.Cut() //no need to create new lists unnecessarily - switch(filter_type) - if(0) //removing hydrocarbons - filtered_out += "phoron" - filtered_out += "oxygen_agent_b" - if(1) //removing O2 - filtered_out += "oxygen" - if(2) //removing N2 - filtered_out += "nitrogen" - if(3) //removing CO2 - filtered_out += "carbon_dioxide" - if(4)//removing N2O - filtered_out += "nitrous_oxide" - - add_fingerprint(usr) - update_icon() - -// -// Mirrored Orientation - Flips the output dir to opposite side from normal. -// -/obj/machinery/atmospherics/trinary/atmos_filter/m_filter - icon_state = "mmap" - dir = SOUTH - initialize_directions = SOUTH|NORTH|EAST - mirrored = TRUE +/obj/machinery/atmospherics/trinary/atmos_filter + icon = 'icons/atmos/filter.dmi' + icon_state = "map" + construction_type = /obj/item/pipe/trinary/flippable + pipe_state = "filter" + density = FALSE + level = 1 + + name = "Gas filter" + desc = "Filters one type of gas from an input, and pushes it out the side." + + use_power = USE_POWER_IDLE + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 7500 //This also doubles as a measure of how powerful the filter is, in Watts. 7500 W ~ 10 HP + + var/temp = null // -- TLE + + var/set_flow_rate = ATMOS_DEFAULT_VOLUME_FILTER + + /* + Filter types: + -1: Nothing + 0: Phoron: Phoron, Oxygen Agent B + 1: Oxygen: Oxygen ONLY + 2: Nitrogen: Nitrogen ONLY + 3: Carbon Dioxide: Carbon Dioxide ONLY + 4: Nitrous Oxide (Formerly called Sleeping Agent) (N2O) + */ + var/filter_type = -1 + var/list/filtered_out = list() + + + var/frequency = 0 + var/datum/radio_frequency/radio_connection + +/obj/machinery/atmospherics/trinary/atmos_filter/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/atmospherics/trinary/atmos_filter/New() + ..() + switch(filter_type) + if(0) //removing hydrocarbons + filtered_out = list("phoron") + if(1) //removing O2 + filtered_out = list("oxygen") + if(2) //removing N2 + filtered_out = list("nitrogen") + if(3) //removing CO2 + filtered_out = list("carbon_dioxide") + if(4)//removing N2O + filtered_out = list("nitrous_oxide") + + air1.volume = ATMOS_DEFAULT_VOLUME_FILTER + air2.volume = ATMOS_DEFAULT_VOLUME_FILTER + air3.volume = ATMOS_DEFAULT_VOLUME_FILTER + +/obj/machinery/atmospherics/trinary/atmos_filter/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/trinary/atmos_filter/update_icon() + if(mirrored) + icon_state = "m" + else + icon_state = "" + + if(!powered()) + icon_state += "off" + else if(node2 && node3 && node1) + icon_state += use_power ? "on" : "off" + else + icon_state += "off" + update_use_power(USE_POWER_OFF) + +/obj/machinery/atmospherics/trinary/atmos_filter/process() + ..() + + last_power_draw = 0 + last_flow_rate = 0 + + if((stat & (NOPOWER|BROKEN)) || !use_power) + return + + //Figure out the amount of moles to transfer + var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles + + var/power_draw = -1 + if (transfer_moles > MINIMUM_MOLES_TO_FILTER) + power_draw = filter_gas(src, filtered_out, air1, air2, air3, transfer_moles, power_rating) + + if(network2) + network2.update = 1 + + if(network3) + network3.update = 1 + + if(network1) + network1.update = 1 + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + return 1 + +/obj/machinery/atmospherics/trinary/atmos_filter/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user) // -- TLE + if(..()) + return + + if(!src.allowed(user)) + to_chat(user, "Access denied.") + return + + tgui_interact(user) + + // var/dat + // var/current_filter_type + // switch(filter_type) + // if(0) + // current_filter_type = "Phoron" + // if(1) + // current_filter_type = "Oxygen" + // if(2) + // current_filter_type = "Nitrogen" + // if(3) + // current_filter_type = "Carbon Dioxide" + // if(4) + // current_filter_type = "Nitrous Oxide" + // if(-1) + // current_filter_type = "Nothing" + // else + // current_filter_type = "ERROR - Report this bug to the admin, please!" + + // dat += {" + // Power: [use_power?"On":"Off"]
+ // Filtering: [current_filter_type]

+ //

Set Filter Type:

+ // Phoron
+ // Oxygen
+ // Nitrogen
+ // Carbon Dioxide
+ // Nitrous Oxide
+ // Nothing
+ //
+ // Set Flow Rate Limit: + // [src.set_flow_rate]L/s | Change
+ // Flow rate: [round(last_flow_rate, 0.1)]L/s + // "} + + // user << browse("[src.name] control[dat]", "window=atmos_filter") + // onclose(user, "atmos_filter") + + + +/obj/machinery/atmospherics/trinary/atmos_filter/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AtmosFilter", name) + ui.open() + +/obj/machinery/atmospherics/trinary/atmos_filter/tgui_data(mob/user) + var/list/data = list() + + data["on"] = use_power + data["rate"] = set_flow_rate + data["max_rate"] = air1.volume + data["last_flow_rate"] = round(last_flow_rate, 0.1) + + data["filter_types"] = list() + data["filter_types"] += list(list("name" = "Nothing", "f_type" = -1, "selected" = filter_type == -1)) + data["filter_types"] += list(list("name" = "Phoron", "f_type" = 0, "selected" = filter_type == 0)) + data["filter_types"] += list(list("name" = "Oxygen", "f_type" = 1, "selected" = filter_type == 1)) + data["filter_types"] += list(list("name" = "Nitrogen", "f_type" = 2, "selected" = filter_type == 2)) + data["filter_types"] += list(list("name" = "Carbon Dioxide", "f_type" = 3, "selected" = filter_type == 3)) + data["filter_types"] += list(list("name" = "Nitrous Oxide", "f_type" = 4, "selected" = filter_type == 4)) + + return data + +/obj/machinery/atmospherics/trinary/atmos_filter/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("power") + update_use_power(!use_power) + if("rate") + var/rate = params["rate"] + if(rate == "max") + rate = air1.volume + . = TRUE + else if(text2num(rate) != null) + rate = text2num(rate) + . = TRUE + if(.) + set_flow_rate = clamp(rate, 0, air1.volume) + if("filter") + . = TRUE + filter_type = text2num(params["filterset"]) + filtered_out.Cut() //no need to create new lists unnecessarily + switch(filter_type) + if(0) //removing hydrocarbons + filtered_out += "phoron" + filtered_out += "oxygen_agent_b" + if(1) //removing O2 + filtered_out += "oxygen" + if(2) //removing N2 + filtered_out += "nitrogen" + if(3) //removing CO2 + filtered_out += "carbon_dioxide" + if(4)//removing N2O + filtered_out += "nitrous_oxide" + + add_fingerprint(usr) + update_icon() + +// +// Mirrored Orientation - Flips the output dir to opposite side from normal. +// +/obj/machinery/atmospherics/trinary/atmos_filter/m_filter + icon_state = "mmap" + dir = SOUTH + initialize_directions = SOUTH|NORTH|EAST + mirrored = TRUE diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 8cecbc6c65..7e06e5de82 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -1,181 +1,181 @@ -/obj/machinery/atmospherics/trinary/mixer - icon = 'icons/atmos/mixer.dmi' - icon_state = "map" - construction_type = /obj/item/pipe/trinary/flippable - pipe_state = "mixer" - density = FALSE - level = 1 - - name = "Gas mixer" - - use_power = USE_POWER_IDLE - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 3700 //This also doubles as a measure of how powerful the mixer is, in Watts. 3700 W ~ 5 HP - - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_MIXER - var/list/mixing_inputs - - //for mapping - var/node1_concentration = 0.5 - var/node2_concentration = 0.5 - - //node 3 is the outlet, nodes 1 & 2 are intakes - -/obj/machinery/atmospherics/trinary/mixer/update_icon(var/safety = 0) - if(tee) - icon_state = "t" - else if(mirrored) - icon_state = "m" - else - icon_state = "" - - if(!powered()) - icon_state += "off" - else if(node2 && node3 && node1) - icon_state += use_power ? "on" : "off" - else - icon_state += "off" - update_use_power(USE_POWER_OFF) - -/obj/machinery/atmospherics/trinary/mixer/New() - ..() - air1.volume = ATMOS_DEFAULT_VOLUME_MIXER - air2.volume = ATMOS_DEFAULT_VOLUME_MIXER - air3.volume = ATMOS_DEFAULT_VOLUME_MIXER * 1.5 - - if (!mixing_inputs) - mixing_inputs = list(src.air1 = node1_concentration, src.air2 = node2_concentration) - -/obj/machinery/atmospherics/trinary/mixer/process() - ..() - - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - //Figure out the amount of moles to transfer - var/transfer_moles = (set_flow_rate*mixing_inputs[air1]/air1.volume)*air1.total_moles + (set_flow_rate*mixing_inputs[air1]/air2.volume)*air2.total_moles - - var/power_draw = -1 - if (transfer_moles > MINIMUM_MOLES_TO_FILTER) - power_draw = mix_gas(src, mixing_inputs, air3, transfer_moles, power_rating) - - if(network1 && mixing_inputs[air1]) - network1.update = 1 - - if(network2 && mixing_inputs[air2]) - network2.update = 1 - - if(network3) - network3.update = 1 - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - return 1 - -/obj/machinery/atmospherics/trinary/mixer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AtmosMixer", name) - ui.open() - -/obj/machinery/atmospherics/trinary/mixer/tgui_data(mob/user) - var/list/data = list() - data["on"] = use_power - data["set_pressure"] = round(set_flow_rate) - data["max_pressure"] = min(air1.volume, air2.volume) - data["node1_concentration"] = round(mixing_inputs[air1]*100, 1) - data["node2_concentration"] = round(mixing_inputs[air2]*100, 1) - var/list/node_connects = get_node_connect_dirs() - data["node1_dir"] = dir_name(node_connects[1],TRUE) - data["node2_dir"] = dir_name(node_connects[2],TRUE) - return data - -/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) - if(..()) - return - tgui_interact(user) - // src.add_fingerprint(usr) - // if(!src.allowed(user)) - // to_chat(user, "Access denied.") - // return - // usr.set_machine(src) - // var/list/node_connects = get_node_connect_dirs() - // var/dat = {"Power: [use_power?"On":"Off"]
- // Set Flow Rate Limit: - // [set_flow_rate]L/s | Change - //
- // Flow Rate: [round(last_flow_rate, 0.1)]L/s - //

- // Node 1 ([dir_name(node_connects[1],TRUE)]) Concentration: - // - - // - - // [mixing_inputs[air1]]([mixing_inputs[air1]*100]%) - // + - // + - //
- // Node 2 ([dir_name(node_connects[2],TRUE)]) Concentration: - // - - // - - // [mixing_inputs[air2]]([mixing_inputs[air2]*100]%) - // + - // + - // "} - - // user << browse("[src.name] control[dat]", "window=atmo_mixer") - // onclose(user, "atmo_mixer") - // return - -/obj/machinery/atmospherics/trinary/mixer/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - update_use_power(!use_power) - . = TRUE - if("pressure") - var/pressure = params["pressure"] - if(pressure == "max") - pressure = min(air1.volume, air2.volume) - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - set_flow_rate = clamp(pressure, 0, min(air1.volume, air2.volume)) - if("node1") - var/value = text2num(params["concentration"]) - mixing_inputs[air1] = max(0, min(1, value / 100)) - mixing_inputs[air2] = 1.0 - mixing_inputs[air1] - . = TRUE - if("node2") - var/value = text2num(params["concentration"]) - mixing_inputs[air2] = max(0, min(1, value / 100)) - mixing_inputs[air1] = 1.0 - mixing_inputs[air2] - . = TRUE - update_icon() - -// -// "T" Orientation - Inputs are on oposite sides instead of adjacent -// -/obj/machinery/atmospherics/trinary/mixer/t_mixer - icon_state = "tmap" - construction_type = /obj/item/pipe/trinary // Can't flip a "T", its symmetrical - pipe_state = "t_mixer" - dir = SOUTH - initialize_directions = SOUTH|EAST|WEST - tee = TRUE - -// -// Mirrored Orientation - Flips the output dir to opposite side from normal. -// -/obj/machinery/atmospherics/trinary/mixer/m_mixer - icon_state = "mmap" - dir = SOUTH - initialize_directions = SOUTH|NORTH|EAST - mirrored = TRUE +/obj/machinery/atmospherics/trinary/mixer + icon = 'icons/atmos/mixer.dmi' + icon_state = "map" + construction_type = /obj/item/pipe/trinary/flippable + pipe_state = "mixer" + density = FALSE + level = 1 + + name = "Gas mixer" + + use_power = USE_POWER_IDLE + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 3700 //This also doubles as a measure of how powerful the mixer is, in Watts. 3700 W ~ 5 HP + + var/set_flow_rate = ATMOS_DEFAULT_VOLUME_MIXER + var/list/mixing_inputs + + //for mapping + var/node1_concentration = 0.5 + var/node2_concentration = 0.5 + + //node 3 is the outlet, nodes 1 & 2 are intakes + +/obj/machinery/atmospherics/trinary/mixer/update_icon(var/safety = 0) + if(tee) + icon_state = "t" + else if(mirrored) + icon_state = "m" + else + icon_state = "" + + if(!powered()) + icon_state += "off" + else if(node2 && node3 && node1) + icon_state += use_power ? "on" : "off" + else + icon_state += "off" + update_use_power(USE_POWER_OFF) + +/obj/machinery/atmospherics/trinary/mixer/New() + ..() + air1.volume = ATMOS_DEFAULT_VOLUME_MIXER + air2.volume = ATMOS_DEFAULT_VOLUME_MIXER + air3.volume = ATMOS_DEFAULT_VOLUME_MIXER * 1.5 + + if (!mixing_inputs) + mixing_inputs = list(src.air1 = node1_concentration, src.air2 = node2_concentration) + +/obj/machinery/atmospherics/trinary/mixer/process() + ..() + + last_power_draw = 0 + last_flow_rate = 0 + + if((stat & (NOPOWER|BROKEN)) || !use_power) + return + + //Figure out the amount of moles to transfer + var/transfer_moles = (set_flow_rate*mixing_inputs[air1]/air1.volume)*air1.total_moles + (set_flow_rate*mixing_inputs[air1]/air2.volume)*air2.total_moles + + var/power_draw = -1 + if (transfer_moles > MINIMUM_MOLES_TO_FILTER) + power_draw = mix_gas(src, mixing_inputs, air3, transfer_moles, power_rating) + + if(network1 && mixing_inputs[air1]) + network1.update = 1 + + if(network2 && mixing_inputs[air2]) + network2.update = 1 + + if(network3) + network3.update = 1 + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + return 1 + +/obj/machinery/atmospherics/trinary/mixer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AtmosMixer", name) + ui.open() + +/obj/machinery/atmospherics/trinary/mixer/tgui_data(mob/user) + var/list/data = list() + data["on"] = use_power + data["set_pressure"] = round(set_flow_rate) + data["max_pressure"] = min(air1.volume, air2.volume) + data["node1_concentration"] = round(mixing_inputs[air1]*100, 1) + data["node2_concentration"] = round(mixing_inputs[air2]*100, 1) + var/list/node_connects = get_node_connect_dirs() + data["node1_dir"] = dir_name(node_connects[1],TRUE) + data["node2_dir"] = dir_name(node_connects[2],TRUE) + return data + +/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) + if(..()) + return + tgui_interact(user) + // src.add_fingerprint(usr) + // if(!src.allowed(user)) + // to_chat(user, "Access denied.") + // return + // usr.set_machine(src) + // var/list/node_connects = get_node_connect_dirs() + // var/dat = {"Power: [use_power?"On":"Off"]
+ // Set Flow Rate Limit: + // [set_flow_rate]L/s | Change + //
+ // Flow Rate: [round(last_flow_rate, 0.1)]L/s + //

+ // Node 1 ([dir_name(node_connects[1],TRUE)]) Concentration: + // - + // - + // [mixing_inputs[air1]]([mixing_inputs[air1]*100]%) + // + + // + + //
+ // Node 2 ([dir_name(node_connects[2],TRUE)]) Concentration: + // - + // - + // [mixing_inputs[air2]]([mixing_inputs[air2]*100]%) + // + + // + + // "} + + // user << browse("[src.name] control[dat]", "window=atmo_mixer") + // onclose(user, "atmo_mixer") + // return + +/obj/machinery/atmospherics/trinary/mixer/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("power") + update_use_power(!use_power) + . = TRUE + if("pressure") + var/pressure = params["pressure"] + if(pressure == "max") + pressure = min(air1.volume, air2.volume) + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + set_flow_rate = clamp(pressure, 0, min(air1.volume, air2.volume)) + if("node1") + var/value = text2num(params["concentration"]) + mixing_inputs[air1] = max(0, min(1, value / 100)) + mixing_inputs[air2] = 1.0 - mixing_inputs[air1] + . = TRUE + if("node2") + var/value = text2num(params["concentration"]) + mixing_inputs[air2] = max(0, min(1, value / 100)) + mixing_inputs[air1] = 1.0 - mixing_inputs[air2] + . = TRUE + update_icon() + +// +// "T" Orientation - Inputs are on oposite sides instead of adjacent +// +/obj/machinery/atmospherics/trinary/mixer/t_mixer + icon_state = "tmap" + construction_type = /obj/item/pipe/trinary // Can't flip a "T", its symmetrical + pipe_state = "t_mixer" + dir = SOUTH + initialize_directions = SOUTH|EAST|WEST + tee = TRUE + +// +// Mirrored Orientation - Flips the output dir to opposite side from normal. +// +/obj/machinery/atmospherics/trinary/mixer/m_mixer + icon_state = "mmap" + dir = SOUTH + initialize_directions = SOUTH|NORTH|EAST + mirrored = TRUE diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index c548e956cc..1bae066a69 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -1,248 +1,248 @@ -/obj/machinery/atmospherics/trinary - dir = SOUTH - initialize_directions = SOUTH|NORTH|WEST - use_power = USE_POWER_OFF - pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF - - var/mirrored = FALSE - var/tee = FALSE - - var/datum/gas_mixture/air1 - var/datum/gas_mixture/air2 - var/datum/gas_mixture/air3 - - var/obj/machinery/atmospherics/node3 - - var/datum/pipe_network/network1 - var/datum/pipe_network/network2 - var/datum/pipe_network/network3 - -/obj/machinery/atmospherics/trinary/New() - ..() - - air1 = new - air2 = new - air3 = new - - air1.volume = 200 - air2.volume = 200 - air3.volume = 200 - -/obj/machinery/atmospherics/trinary/init_dir() - initialize_directions = get_initialize_directions_trinary(dir, mirrored, tee) - -/obj/machinery/atmospherics/trinary/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - var/list/node_connects = get_node_connect_dirs() - add_underlay(T, node1, node_connects[1]) - add_underlay(T, node2, node_connects[2]) - add_underlay(T, node3, node_connects[3]) - -/obj/machinery/atmospherics/trinary/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/trinary/power_change() - var/old_stat = stat - . = ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/trinary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/trinary/get_neighbor_nodes_for_init() - return list(node1, node2, node3) - -/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network - - else if(reference == node2) - network2 = new_network - - else if (reference == node3) - network3 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/trinary/Destroy() - . = ..() - - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - if(node3) - node3.disconnect(src) - qdel(network3) - - node1 = null - node2 = null - node3 = null - -// Get the direction each node is facing to connect. -// It now returns as a list so it can be fetched nicely, each entry corresponds to node of same number. -/obj/machinery/atmospherics/trinary/get_node_connect_dirs() - return get_node_connect_dirs_trinary(dir, mirrored, tee) - -/obj/machinery/atmospherics/trinary/atmos_init() - if(node1 && node2 && node3) - return - - var/list/node_connects = get_node_connect_dirs() - - STANDARD_ATMOS_CHOOSE_NODE(1, node_connects[1]) - STANDARD_ATMOS_CHOOSE_NODE(2, node_connects[2]) - STANDARD_ATMOS_CHOOSE_NODE(3, node_connects[3]) - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/trinary/build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - if(!network3 && node3) - network3 = new /datum/pipe_network() - network3.normal_members += src - network3.build_network(node3, src) - - -/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - if(reference==node3) - return network3 - - return null - -/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - if(network3 == old_network) - network3 = new_network - - return 1 - -/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - if(network3 == reference) - results += air3 - - return results - -/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network1) - node1 = null - - else if(reference==node2) - qdel(network2) - node2 = null - - else if(reference==node3) - qdel(network3) - node3 = null - - update_underlays() - - return null - -// Trinary init_dir() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves -// TODO - Someday refactor those places under atmospherics/trinary -/proc/get_initialize_directions_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE) - if(tee) - switch(dir) - if(NORTH) - return EAST|NORTH|WEST - if(SOUTH) - return SOUTH|WEST|EAST - if(EAST) - return EAST|NORTH|SOUTH - if(WEST) - return WEST|NORTH|SOUTH - else if(mirrored) - switch(dir) - if(NORTH) - return WEST|NORTH|SOUTH - if(SOUTH) - return SOUTH|EAST|NORTH - if(EAST) - return EAST|WEST|NORTH - if(WEST) - return WEST|SOUTH|EAST - else - switch(dir) - if(NORTH) - return EAST|NORTH|SOUTH - if(SOUTH) - return SOUTH|WEST|NORTH - if(EAST) - return EAST|WEST|SOUTH - if(WEST) - return WEST|NORTH|EAST - -// Trinary get_node_connect_dirs() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves -/proc/get_node_connect_dirs_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE) - var/node1_connect - var/node2_connect - var/node3_connect - - if(tee) - node1_connect = turn(dir, -90) - node2_connect = turn(dir, 90) - node3_connect = dir - else if(mirrored) - node1_connect = turn(dir, 180) - node2_connect = turn(dir, 90) - node3_connect = dir - else - node1_connect = turn(dir, 180) - node2_connect = turn(dir, -90) - node3_connect = dir - return list(node1_connect, node2_connect, node3_connect) +/obj/machinery/atmospherics/trinary + dir = SOUTH + initialize_directions = SOUTH|NORTH|WEST + use_power = USE_POWER_OFF + pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF + + var/mirrored = FALSE + var/tee = FALSE + + var/datum/gas_mixture/air1 + var/datum/gas_mixture/air2 + var/datum/gas_mixture/air3 + + var/obj/machinery/atmospherics/node3 + + var/datum/pipe_network/network1 + var/datum/pipe_network/network2 + var/datum/pipe_network/network3 + +/obj/machinery/atmospherics/trinary/New() + ..() + + air1 = new + air2 = new + air3 = new + + air1.volume = 200 + air2.volume = 200 + air3.volume = 200 + +/obj/machinery/atmospherics/trinary/init_dir() + initialize_directions = get_initialize_directions_trinary(dir, mirrored, tee) + +/obj/machinery/atmospherics/trinary/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + var/list/node_connects = get_node_connect_dirs() + add_underlay(T, node1, node_connects[1]) + add_underlay(T, node2, node_connects[2]) + add_underlay(T, node3, node_connects[3]) + +/obj/machinery/atmospherics/trinary/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/trinary/power_change() + var/old_stat = stat + . = ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/trinary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() + +// Housekeeping and pipe network stuff below +/obj/machinery/atmospherics/trinary/get_neighbor_nodes_for_init() + return list(node1, node2, node3) + +/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node1) + network1 = new_network + + else if(reference == node2) + network2 = new_network + + else if (reference == node3) + network3 = new_network + + if(new_network.normal_members.Find(src)) + return 0 + + new_network.normal_members += src + + return null + +/obj/machinery/atmospherics/trinary/Destroy() + . = ..() + + if(node1) + node1.disconnect(src) + qdel(network1) + if(node2) + node2.disconnect(src) + qdel(network2) + if(node3) + node3.disconnect(src) + qdel(network3) + + node1 = null + node2 = null + node3 = null + +// Get the direction each node is facing to connect. +// It now returns as a list so it can be fetched nicely, each entry corresponds to node of same number. +/obj/machinery/atmospherics/trinary/get_node_connect_dirs() + return get_node_connect_dirs_trinary(dir, mirrored, tee) + +/obj/machinery/atmospherics/trinary/atmos_init() + if(node1 && node2 && node3) + return + + var/list/node_connects = get_node_connect_dirs() + + STANDARD_ATMOS_CHOOSE_NODE(1, node_connects[1]) + STANDARD_ATMOS_CHOOSE_NODE(2, node_connects[2]) + STANDARD_ATMOS_CHOOSE_NODE(3, node_connects[3]) + + update_icon() + update_underlays() + +/obj/machinery/atmospherics/trinary/build_network() + if(!network1 && node1) + network1 = new /datum/pipe_network() + network1.normal_members += src + network1.build_network(node1, src) + + if(!network2 && node2) + network2 = new /datum/pipe_network() + network2.normal_members += src + network2.build_network(node2, src) + + if(!network3 && node3) + network3 = new /datum/pipe_network() + network3.normal_members += src + network3.build_network(node3, src) + + +/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node1) + return network1 + + if(reference==node2) + return network2 + + if(reference==node3) + return network3 + + return null + +/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network1 == old_network) + network1 = new_network + if(network2 == old_network) + network2 = new_network + if(network3 == old_network) + network3 = new_network + + return 1 + +/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network1 == reference) + results += air1 + if(network2 == reference) + results += air2 + if(network3 == reference) + results += air3 + + return results + +/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + qdel(network1) + node1 = null + + else if(reference==node2) + qdel(network2) + node2 = null + + else if(reference==node3) + qdel(network3) + node3 = null + + update_underlays() + + return null + +// Trinary init_dir() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves +// TODO - Someday refactor those places under atmospherics/trinary +/proc/get_initialize_directions_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE) + if(tee) + switch(dir) + if(NORTH) + return EAST|NORTH|WEST + if(SOUTH) + return SOUTH|WEST|EAST + if(EAST) + return EAST|NORTH|SOUTH + if(WEST) + return WEST|NORTH|SOUTH + else if(mirrored) + switch(dir) + if(NORTH) + return WEST|NORTH|SOUTH + if(SOUTH) + return SOUTH|EAST|NORTH + if(EAST) + return EAST|WEST|NORTH + if(WEST) + return WEST|SOUTH|EAST + else + switch(dir) + if(NORTH) + return EAST|NORTH|SOUTH + if(SOUTH) + return SOUTH|WEST|NORTH + if(EAST) + return EAST|WEST|SOUTH + if(WEST) + return WEST|NORTH|EAST + +// Trinary get_node_connect_dirs() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves +/proc/get_node_connect_dirs_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE) + var/node1_connect + var/node2_connect + var/node3_connect + + if(tee) + node1_connect = turn(dir, -90) + node2_connect = turn(dir, 90) + node3_connect = dir + else if(mirrored) + node1_connect = turn(dir, 180) + node2_connect = turn(dir, 90) + node3_connect = dir + else + node1_connect = turn(dir, 180) + node2_connect = turn(dir, -90) + node3_connect = dir + return list(node1_connect, node2_connect, node3_connect) diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index dea0487b48..2cd7403096 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -1,175 +1,175 @@ -//TODO: Put this under a common parent type with heaters to cut down on the copypasta -#define FREEZER_PERF_MULT 2.5 - -/obj/machinery/atmospherics/unary/freezer - name = "gas cooling system" - desc = "Cools gas when connected to pipe network" - icon = 'icons/obj/Cryogenic2_vr.dmi' - icon_state = "freezer_0" - density = TRUE - anchored = TRUE - use_power = USE_POWER_OFF - idle_power_usage = 5 // 5 Watts for thermostat related circuitry - circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler - - var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. - var/internal_volume = 600 // L - - var/max_power_rating = 20000 // Power rating when the usage is turned up to 100 - var/power_setting = 100 - - var/set_temperature = T20C // Thermostat - var/cooling = 0 - -/obj/machinery/atmospherics/unary/freezer/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/atmospherics/unary/freezer/atmos_init() - if(node) - return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) - if(can_be_node(target, 1)) - node = target - break - - if(check_for_obstacles()) - node = null - - if(node) - update_icon() - -/obj/machinery/atmospherics/unary/freezer/update_icon() - if(node) - if(use_power && cooling) - icon_state = "freezer_1" - else - icon_state = "freezer" - else - icon_state = "freezer_0" - return - -/obj/machinery/atmospherics/unary/freezer/attack_ai(mob/user as mob) - tgui_interact(user) - -/obj/machinery/atmospherics/unary/freezer/attack_hand(mob/user as mob) - tgui_interact(user) - -/obj/machinery/atmospherics/unary/freezer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "GasTemperatureSystem", name) - ui.open() - -/obj/machinery/atmospherics/unary/freezer/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/data[0] - data["on"] = use_power ? 1 : 0 - data["gasPressure"] = round(air_contents.return_pressure()) - data["gasTemperature"] = round(air_contents.temperature) - data["minGasTemperature"] = 0 - data["maxGasTemperature"] = round(T20C+500) - data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting - - var/temp_class = "good" - if(air_contents.temperature > (T0C - 20)) - temp_class = "bad" - else if(air_contents.temperature < (T0C - 20) && air_contents.temperature > (T0C - 100)) - temp_class = "average" - data["gasTemperatureClass"] = temp_class - - return data - -/obj/machinery/atmospherics/unary/freezer/tgui_act(action, params) - if(..()) - return TRUE - - . = TRUE - switch(action) - if("toggleStatus") - update_use_power(!use_power) - update_icon() - if("setGasTemperature") - var/amount = text2num(params["temp"]) - if(amount > 0) - set_temperature = min(amount, 1000) - else - set_temperature = max(amount, 0) - if("setPower") //setting power to 0 is redundant anyways - var/new_setting = between(0, text2num(params["value"]), 100) - set_power_level(new_setting) - - add_fingerprint(usr) - -/obj/machinery/atmospherics/unary/freezer/process() - ..() - - if(stat & (NOPOWER|BROKEN) || !use_power) - cooling = 0 - update_icon() - return - - if(network && air_contents.temperature > set_temperature) - cooling = 1 - - var/heat_transfer = max( -air_contents.get_thermal_energy_change(set_temperature - 5), 0 ) - - //Assume the heat is being pumped into the hull which is fixed at heatsink_temperature - //not /really/ proper thermodynamics but whatever - var/cop = FREEZER_PERF_MULT * air_contents.temperature/heatsink_temperature //heatpump coefficient of performance from thermodynamics -> power used = heat_transfer/cop - heat_transfer = min(heat_transfer, cop * power_rating) //limit heat transfer by available power - - var/removed = -air_contents.add_thermal_energy(-heat_transfer) //remove the heat - if(debug) - visible_message("[src]: Removing [removed] W.") - - use_power(power_rating) - - network.update = 1 - else - cooling = 0 - - update_icon() - -//upgrading parts -/obj/machinery/atmospherics/unary/freezer/RefreshParts() - ..() - var/cap_rating = 0 - var/manip_rating = 0 - var/bin_rating = 0 - - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/manipulator)) - manip_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) - bin_rating += P.rating - - max_power_rating = initial(max_power_rating) * cap_rating / 2 //more powerful - heatsink_temperature = initial(heatsink_temperature) / ((manip_rating + bin_rating) / 2) //more efficient - air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) - -/obj/machinery/atmospherics/unary/freezer/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) - -/obj/machinery/atmospherics/unary/freezer/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - - ..() - -/obj/machinery/atmospherics/unary/freezer/examine(mob/user) - . = ..() - if(panel_open) - . += "The maintenance hatch is open." +//TODO: Put this under a common parent type with heaters to cut down on the copypasta +#define FREEZER_PERF_MULT 2.5 + +/obj/machinery/atmospherics/unary/freezer + name = "gas cooling system" + desc = "Cools gas when connected to pipe network" + icon = 'icons/obj/Cryogenic2_vr.dmi' + icon_state = "freezer_0" + density = TRUE + anchored = TRUE + use_power = USE_POWER_OFF + idle_power_usage = 5 // 5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler + + var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. + var/internal_volume = 600 // L + + var/max_power_rating = 20000 // Power rating when the usage is turned up to 100 + var/power_setting = 100 + + var/set_temperature = T20C // Thermostat + var/cooling = 0 + +/obj/machinery/atmospherics/unary/freezer/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/atmospherics/unary/freezer/atmos_init() + if(node) + return + + var/node_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) + if(can_be_node(target, 1)) + node = target + break + + if(check_for_obstacles()) + node = null + + if(node) + update_icon() + +/obj/machinery/atmospherics/unary/freezer/update_icon() + if(node) + if(use_power && cooling) + icon_state = "freezer_1" + else + icon_state = "freezer" + else + icon_state = "freezer_0" + return + +/obj/machinery/atmospherics/unary/freezer/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/atmospherics/unary/freezer/attack_hand(mob/user as mob) + tgui_interact(user) + +/obj/machinery/atmospherics/unary/freezer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GasTemperatureSystem", name) + ui.open() + +/obj/machinery/atmospherics/unary/freezer/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/data[0] + data["on"] = use_power ? 1 : 0 + data["gasPressure"] = round(air_contents.return_pressure()) + data["gasTemperature"] = round(air_contents.temperature) + data["minGasTemperature"] = 0 + data["maxGasTemperature"] = round(T20C+500) + data["targetGasTemperature"] = round(set_temperature) + data["powerSetting"] = power_setting + + var/temp_class = "good" + if(air_contents.temperature > (T0C - 20)) + temp_class = "bad" + else if(air_contents.temperature < (T0C - 20) && air_contents.temperature > (T0C - 100)) + temp_class = "average" + data["gasTemperatureClass"] = temp_class + + return data + +/obj/machinery/atmospherics/unary/freezer/tgui_act(action, params) + if(..()) + return TRUE + + . = TRUE + switch(action) + if("toggleStatus") + update_use_power(!use_power) + update_icon() + if("setGasTemperature") + var/amount = text2num(params["temp"]) + if(amount > 0) + set_temperature = min(amount, 1000) + else + set_temperature = max(amount, 0) + if("setPower") //setting power to 0 is redundant anyways + var/new_setting = between(0, text2num(params["value"]), 100) + set_power_level(new_setting) + + add_fingerprint(usr) + +/obj/machinery/atmospherics/unary/freezer/process() + ..() + + if(stat & (NOPOWER|BROKEN) || !use_power) + cooling = 0 + update_icon() + return + + if(network && air_contents.temperature > set_temperature) + cooling = 1 + + var/heat_transfer = max( -air_contents.get_thermal_energy_change(set_temperature - 5), 0 ) + + //Assume the heat is being pumped into the hull which is fixed at heatsink_temperature + //not /really/ proper thermodynamics but whatever + var/cop = FREEZER_PERF_MULT * air_contents.temperature/heatsink_temperature //heatpump coefficient of performance from thermodynamics -> power used = heat_transfer/cop + heat_transfer = min(heat_transfer, cop * power_rating) //limit heat transfer by available power + + var/removed = -air_contents.add_thermal_energy(-heat_transfer) //remove the heat + if(debug) + visible_message("[src]: Removing [removed] W.") + + use_power(power_rating) + + network.update = 1 + else + cooling = 0 + + update_icon() + +//upgrading parts +/obj/machinery/atmospherics/unary/freezer/RefreshParts() + ..() + var/cap_rating = 0 + var/manip_rating = 0 + var/bin_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + manip_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) + bin_rating += P.rating + + max_power_rating = initial(max_power_rating) * cap_rating / 2 //more powerful + heatsink_temperature = initial(heatsink_temperature) / ((manip_rating + bin_rating) / 2) //more efficient + air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating + set_power_level(power_setting) + +/obj/machinery/atmospherics/unary/freezer/proc/set_power_level(var/new_power_setting) + power_setting = new_power_setting + power_rating = max_power_rating * (power_setting/100) + +/obj/machinery/atmospherics/unary/freezer/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + + ..() + +/obj/machinery/atmospherics/unary/freezer/examine(mob/user) + . = ..() + if(panel_open) + . += "The maintenance hatch is open." diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index ee759c897c..cc50782d71 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -1,87 +1,87 @@ -/obj/machinery/atmospherics/unary/heat_exchanger - - icon = 'icons/obj/atmospherics/heat_exchanger.dmi' - icon_state = "intact" - pipe_state = "heunary" - density = TRUE - - name = "Heat Exchanger" - desc = "Exchanges heat between two input gases. Setup for fast heat transfer" - - var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null - var/update_cycle - -/obj/machinery/atmospherics/unary/heat_exchanger/update_icon() - if(node) - icon_state = "intact" - else - icon_state = "exposed" - - return - -/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() - if(!partner) - var/partner_connect = turn(dir,180) - - for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect)) - if(target.dir & get_dir(src,target)) - partner = target - partner.partner = src - break - - ..() - -/obj/machinery/atmospherics/unary/heat_exchanger/process() - ..() - if(!partner) - return 0 - - if(!air_master || air_master.current_cycle <= update_cycle) - return 0 - - update_cycle = air_master.current_cycle - partner.update_cycle = air_master.current_cycle - - var/air_heat_capacity = air_contents.heat_capacity() - var/other_air_heat_capacity = partner.air_contents.heat_capacity() - var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity - - var/old_temperature = air_contents.temperature - var/other_old_temperature = partner.air_contents.temperature - - if(combined_heat_capacity > 0) - var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature - - var/new_temperature = combined_energy/combined_heat_capacity - air_contents.temperature = new_temperature - partner.air_contents.temperature = new_temperature - - if(network) - if(abs(old_temperature-air_contents.temperature) > 1) - network.update = 1 - - if(partner.network) - if(abs(other_old_temperature-partner.air_contents.temperature) > 1) - partner.network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/heat_exchanger/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - var/turf/T = src.loc - if (level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - if (!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() +/obj/machinery/atmospherics/unary/heat_exchanger + + icon = 'icons/obj/atmospherics/heat_exchanger.dmi' + icon_state = "intact" + pipe_state = "heunary" + density = TRUE + + name = "Heat Exchanger" + desc = "Exchanges heat between two input gases. Setup for fast heat transfer" + + var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null + var/update_cycle + +/obj/machinery/atmospherics/unary/heat_exchanger/update_icon() + if(node) + icon_state = "intact" + else + icon_state = "exposed" + + return + +/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() + if(!partner) + var/partner_connect = turn(dir,180) + + for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect)) + if(target.dir & get_dir(src,target)) + partner = target + partner.partner = src + break + + ..() + +/obj/machinery/atmospherics/unary/heat_exchanger/process() + ..() + if(!partner) + return 0 + + if(!air_master || air_master.current_cycle <= update_cycle) + return 0 + + update_cycle = air_master.current_cycle + partner.update_cycle = air_master.current_cycle + + var/air_heat_capacity = air_contents.heat_capacity() + var/other_air_heat_capacity = partner.air_contents.heat_capacity() + var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity + + var/old_temperature = air_contents.temperature + var/other_old_temperature = partner.air_contents.temperature + + if(combined_heat_capacity > 0) + var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature + + var/new_temperature = combined_energy/combined_heat_capacity + air_contents.temperature = new_temperature + partner.air_contents.temperature = new_temperature + + if(network) + if(abs(old_temperature-air_contents.temperature) > 1) + network.update = 1 + + if(partner.network) + if(abs(other_old_temperature-partner.air_contents.temperature) > 1) + partner.network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/heat_exchanger/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + var/turf/T = src.loc + if (level==1 && isturf(T) && !T.is_plating()) + to_chat(user, "You must remove the plating first.") + return 1 + if (!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index aea5730672..efd3a56d8b 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -1,162 +1,162 @@ -//TODO: Put this under a common parent type with freezers to cut down on the copypasta -#define HEATER_PERF_MULT 2.5 - -/obj/machinery/atmospherics/unary/heater - name = "gas heating system" - desc = "Heats gas when connected to a pipe network" - icon = 'icons/obj/Cryogenic2_vr.dmi' - icon_state = "heater_0" - density = TRUE - anchored = TRUE - use_power = USE_POWER_OFF - idle_power_usage = 5 //5 Watts for thermostat related circuitry - circuit = /obj/item/weapon/circuitboard/unary_atmos/heater - - var/max_temperature = T20C + 680 - var/internal_volume = 600 //L - - var/max_power_rating = 20000 //power rating when the usage is turned up to 100 - var/power_setting = 100 - - var/set_temperature = T20C //thermostat - var/heating = 0 //mainly for icon updates - -/obj/machinery/atmospherics/unary/heater/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/atmospherics/unary/heater/atmos_init() - if(node) - return - - var/node_connect = dir - - //check that there is something to connect to - for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) - if(can_be_node(target, 1)) - node = target - break - - if(check_for_obstacles()) - node = null - - if(node) - update_icon() - - -/obj/machinery/atmospherics/unary/heater/update_icon() - if(node) - if(use_power && heating) - icon_state = "heater_1" - else - icon_state = "heater" - else - icon_state = "heater_0" - return - - -/obj/machinery/atmospherics/unary/heater/process() - ..() - - if(stat & (NOPOWER|BROKEN) || !use_power) - heating = 0 - update_icon() - return - - if(network && air_contents.total_moles && air_contents.temperature < set_temperature) - air_contents.add_thermal_energy(power_rating * HEATER_PERF_MULT) - use_power(power_rating) - - heating = 1 - network.update = 1 - else - heating = 0 - - update_icon() - -/obj/machinery/atmospherics/unary/heater/attack_ai(mob/user as mob) - tgui_interact(user) - -/obj/machinery/atmospherics/unary/heater/attack_hand(mob/user as mob) - tgui_interact(user) - -/obj/machinery/atmospherics/unary/heater/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "GasTemperatureSystem", name) - ui.open() - -/obj/machinery/atmospherics/unary/heater/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/data[0] - data["on"] = use_power ? 1 : 0 - data["gasPressure"] = round(air_contents.return_pressure()) - data["gasTemperature"] = round(air_contents.temperature) - data["minGasTemperature"] = 0 - data["maxGasTemperature"] = round(max_temperature) - data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting - - var/temp_class = "average" - if(air_contents.temperature > (T20C+40)) - temp_class = "bad" - data["gasTemperatureClass"] = temp_class - - return data - -/obj/machinery/atmospherics/unary/heater/tgui_act(action, params) - if(..()) - return TRUE - - . = TRUE - switch(action) - if("toggleStatus") - update_use_power(!use_power) - update_icon() - if("setGasTemperature") - var/amount = text2num(params["temp"]) - if(amount > 0) - set_temperature = min(amount, max_temperature) - else - set_temperature = max(amount, 0) - if("setPower") //setting power to 0 is redundant anyways - var/new_setting = between(0, text2num(params["value"]), 100) - set_power_level(new_setting) - - add_fingerprint(usr) - -//upgrading parts -/obj/machinery/atmospherics/unary/heater/RefreshParts() - ..() - var/cap_rating = 0 - var/bin_rating = 0 - - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) - bin_rating += P.rating - - max_power_rating = initial(max_power_rating) * cap_rating / 2 - max_temperature = max(initial(max_temperature) - T20C, 0) * ((bin_rating * 4 + cap_rating) / 5) + T20C - air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) - -/obj/machinery/atmospherics/unary/heater/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) - -/obj/machinery/atmospherics/unary/heater/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - - ..() - -/obj/machinery/atmospherics/unary/heater/examine(mob/user) - . = ..() - if(panel_open) - . += "The maintenance hatch is open." +//TODO: Put this under a common parent type with freezers to cut down on the copypasta +#define HEATER_PERF_MULT 2.5 + +/obj/machinery/atmospherics/unary/heater + name = "gas heating system" + desc = "Heats gas when connected to a pipe network" + icon = 'icons/obj/Cryogenic2_vr.dmi' + icon_state = "heater_0" + density = TRUE + anchored = TRUE + use_power = USE_POWER_OFF + idle_power_usage = 5 //5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/heater + + var/max_temperature = T20C + 680 + var/internal_volume = 600 //L + + var/max_power_rating = 20000 //power rating when the usage is turned up to 100 + var/power_setting = 100 + + var/set_temperature = T20C //thermostat + var/heating = 0 //mainly for icon updates + +/obj/machinery/atmospherics/unary/heater/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/atmospherics/unary/heater/atmos_init() + if(node) + return + + var/node_connect = dir + + //check that there is something to connect to + for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) + if(can_be_node(target, 1)) + node = target + break + + if(check_for_obstacles()) + node = null + + if(node) + update_icon() + + +/obj/machinery/atmospherics/unary/heater/update_icon() + if(node) + if(use_power && heating) + icon_state = "heater_1" + else + icon_state = "heater" + else + icon_state = "heater_0" + return + + +/obj/machinery/atmospherics/unary/heater/process() + ..() + + if(stat & (NOPOWER|BROKEN) || !use_power) + heating = 0 + update_icon() + return + + if(network && air_contents.total_moles && air_contents.temperature < set_temperature) + air_contents.add_thermal_energy(power_rating * HEATER_PERF_MULT) + use_power(power_rating) + + heating = 1 + network.update = 1 + else + heating = 0 + + update_icon() + +/obj/machinery/atmospherics/unary/heater/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/atmospherics/unary/heater/attack_hand(mob/user as mob) + tgui_interact(user) + +/obj/machinery/atmospherics/unary/heater/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GasTemperatureSystem", name) + ui.open() + +/obj/machinery/atmospherics/unary/heater/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/data[0] + data["on"] = use_power ? 1 : 0 + data["gasPressure"] = round(air_contents.return_pressure()) + data["gasTemperature"] = round(air_contents.temperature) + data["minGasTemperature"] = 0 + data["maxGasTemperature"] = round(max_temperature) + data["targetGasTemperature"] = round(set_temperature) + data["powerSetting"] = power_setting + + var/temp_class = "average" + if(air_contents.temperature > (T20C+40)) + temp_class = "bad" + data["gasTemperatureClass"] = temp_class + + return data + +/obj/machinery/atmospherics/unary/heater/tgui_act(action, params) + if(..()) + return TRUE + + . = TRUE + switch(action) + if("toggleStatus") + update_use_power(!use_power) + update_icon() + if("setGasTemperature") + var/amount = text2num(params["temp"]) + if(amount > 0) + set_temperature = min(amount, max_temperature) + else + set_temperature = max(amount, 0) + if("setPower") //setting power to 0 is redundant anyways + var/new_setting = between(0, text2num(params["value"]), 100) + set_power_level(new_setting) + + add_fingerprint(usr) + +//upgrading parts +/obj/machinery/atmospherics/unary/heater/RefreshParts() + ..() + var/cap_rating = 0 + var/bin_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) + bin_rating += P.rating + + max_power_rating = initial(max_power_rating) * cap_rating / 2 + max_temperature = max(initial(max_temperature) - T20C, 0) * ((bin_rating * 4 + cap_rating) / 5) + T20C + air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating + set_power_level(power_setting) + +/obj/machinery/atmospherics/unary/heater/proc/set_power_level(var/new_power_setting) + power_setting = new_power_setting + power_rating = max_power_rating * (power_setting/100) + +/obj/machinery/atmospherics/unary/heater/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + + ..() + +/obj/machinery/atmospherics/unary/heater/examine(mob/user) + . = ..() + if(panel_open) + . += "The maintenance hatch is open." diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index fa3c9073d8..8002d79ad5 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -1,177 +1,177 @@ -//Basically a one way passive valve. If the pressure inside is greater than the environment then gas will flow passively, -//but it does not permit gas to flow back from the environment into the injector. Can be turned off to prevent any gas flow. -//When it receives the "inject" signal, it will try to pump it's entire contents into the environment regardless of pressure, using power. - -/obj/machinery/atmospherics/unary/outlet_injector - icon = 'icons/atmos/injector.dmi' - icon_state = "map_injector" - pipe_state = "injector" - - name = "air injector" - desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." - - use_power = USE_POWER_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 15000 //15000 W ~ 20 HP - - var/injecting = 0 - - var/volume_rate = 50 //flow rate limit - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - - level = 1 - -/obj/machinery/atmospherics/unary/outlet_injector/New() - ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. - -/obj/machinery/atmospherics/unary/outlet_injector/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/unary/outlet_injector/update_icon() - if(!powered()) - icon_state = "off" - else - icon_state = "[use_power ? "on" : "off"]" - -/obj/machinery/atmospherics/unary/outlet_injector/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node, dir) - -/obj/machinery/atmospherics/unary/outlet_injector/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/unary/outlet_injector/process() - ..() - - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - var/power_draw = -1 - var/datum/gas_mixture/environment = loc.return_air() - - if(environment && air_contents.temperature > 0) - var/transfer_moles = (volume_rate/air_contents.volume)*air_contents.total_moles //apply flow rate limit - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/outlet_injector/proc/inject() - if(injecting || (stat & NOPOWER)) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - if (!environment) - return 0 - - injecting = 1 - - if(air_contents.temperature > 0) - var/power_used = pump_gas(src, air_contents, environment, air_contents.total_moles, power_rating) - use_power(power_used) - - if(network) - network.update = 1 - - flick("inject", src) - -/obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency) - -/obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AO", - "power" = use_power, - "volume_rate" = volume_rate, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal) - - return 1 - -/obj/machinery/atmospherics/unary/outlet_injector/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["power"]) - update_use_power(text2num(signal.data["power"])) - - if(signal.data["power_toggle"]) - update_use_power(!use_power) - - if(signal.data["inject"]) - spawn inject() - return - - if(signal.data["set_volume_rate"]) - var/number = text2num(signal.data["set_volume_rate"]) - volume_rate = between(0, number, air_contents.volume) - - if(signal.data["status"]) - spawn(2) - broadcast_status() - return //do not update_icon - - spawn(2) - broadcast_status() - update_icon() - -/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/unary/outlet_injector/attack_hand(mob/user as mob) - to_chat(user, "You toggle \the [src].") - injecting = !injecting - update_use_power(injecting ? USE_POWER_IDLE : USE_POWER_OFF) - update_icon() - -/obj/machinery/atmospherics/unary/outlet_injector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() +//Basically a one way passive valve. If the pressure inside is greater than the environment then gas will flow passively, +//but it does not permit gas to flow back from the environment into the injector. Can be turned off to prevent any gas flow. +//When it receives the "inject" signal, it will try to pump it's entire contents into the environment regardless of pressure, using power. + +/obj/machinery/atmospherics/unary/outlet_injector + icon = 'icons/atmos/injector.dmi' + icon_state = "map_injector" + pipe_state = "injector" + + name = "air injector" + desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." + + use_power = USE_POWER_OFF + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 15000 //15000 W ~ 20 HP + + var/injecting = 0 + + var/volume_rate = 50 //flow rate limit + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + + level = 1 + +/obj/machinery/atmospherics/unary/outlet_injector/New() + ..() + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. + +/obj/machinery/atmospherics/unary/outlet_injector/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/unary/outlet_injector/update_icon() + if(!powered()) + icon_state = "off" + else + icon_state = "[use_power ? "on" : "off"]" + +/obj/machinery/atmospherics/unary/outlet_injector/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + add_underlay(T, node, dir) + +/obj/machinery/atmospherics/unary/outlet_injector/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/unary/outlet_injector/process() + ..() + + last_power_draw = 0 + last_flow_rate = 0 + + if((stat & (NOPOWER|BROKEN)) || !use_power) + return + + var/power_draw = -1 + var/datum/gas_mixture/environment = loc.return_air() + + if(environment && air_contents.temperature > 0) + var/transfer_moles = (volume_rate/air_contents.volume)*air_contents.total_moles //apply flow rate limit + power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + if(network) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/outlet_injector/proc/inject() + if(injecting || (stat & NOPOWER)) + return 0 + + var/datum/gas_mixture/environment = loc.return_air() + if (!environment) + return 0 + + injecting = 1 + + if(air_contents.temperature > 0) + var/power_used = pump_gas(src, air_contents, environment, air_contents.total_moles, power_rating) + use_power(power_used) + + if(network) + network.update = 1 + + flick("inject", src) + +/obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency) + +/obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "tag" = id, + "device" = "AO", + "power" = use_power, + "volume_rate" = volume_rate, + "sigtype" = "status" + ) + + radio_connection.post_signal(src, signal) + + return 1 + +/obj/machinery/atmospherics/unary/outlet_injector/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return 0 + + if(signal.data["power"]) + update_use_power(text2num(signal.data["power"])) + + if(signal.data["power_toggle"]) + update_use_power(!use_power) + + if(signal.data["inject"]) + spawn inject() + return + + if(signal.data["set_volume_rate"]) + var/number = text2num(signal.data["set_volume_rate"]) + volume_rate = between(0, number, air_contents.volume) + + if(signal.data["status"]) + spawn(2) + broadcast_status() + return //do not update_icon + + spawn(2) + broadcast_status() + update_icon() + +/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/unary/outlet_injector/attack_hand(mob/user as mob) + to_chat(user, "You toggle \the [src].") + injecting = !injecting + update_use_power(injecting ? USE_POWER_IDLE : USE_POWER_OFF) + update_icon() + +/obj/machinery/atmospherics/unary/outlet_injector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 12d6822ad4..9a3a4d3e44 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -1,116 +1,116 @@ -/obj/machinery/atmospherics/unary - dir = SOUTH - initialize_directions = SOUTH - construction_type = /obj/item/pipe/directional - pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF - //layer = TURF_LAYER+0.1 - - var/datum/gas_mixture/air_contents - - var/obj/machinery/atmospherics/node - - var/datum/pipe_network/network - - var/welded = 0 //defining this here for ventcrawl stuff - -/obj/machinery/atmospherics/unary/New() - ..() - air_contents = new - - air_contents.volume = 200 - -/obj/machinery/atmospherics/unary/init_dir() - initialize_directions = dir - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/unary/get_neighbor_nodes_for_init() - return list(node) - -/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/unary/Destroy() - . = ..() - - if(node) - node.disconnect(src) - qdel(network) - - node = null - -/obj/machinery/atmospherics/unary/atmos_init() - if(node) - return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(can_be_node(target, 1)) - node = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) - - -/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - return null - -/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - - return 1 - -/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network == reference) - results += air_contents - - return results - -/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - qdel(network) - node = null - - update_icon() - update_underlays() - - return null - -// Check if there are any other atmos machines in the same turf that will block this machine from initializing. -// Intended for use when a frame-constructable machine (i.e. not made from pipe fittings) wants to wrench down and connect. -// Returns TRUE if something is blocking, FALSE if its okay to continue. -/obj/machinery/atmospherics/unary/proc/check_for_obstacles() - for(var/obj/machinery/atmospherics/M in loc) - if(M == src) continue - if((M.pipe_flags & pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers. - visible_message("\The [src]'s cannot be connected, something is hogging the tile!") - return TRUE - if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) // Pipes on different layers can't block each other unless they are ALL_LAYER - continue - if(M.get_init_dirs() & get_init_dirs()) // matches at least one direction on either type of pipe - visible_message("\The [src]'s connector can't be connected, there is already a pipe at that location!") - return TRUE - return FALSE +/obj/machinery/atmospherics/unary + dir = SOUTH + initialize_directions = SOUTH + construction_type = /obj/item/pipe/directional + pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF + //layer = TURF_LAYER+0.1 + + var/datum/gas_mixture/air_contents + + var/obj/machinery/atmospherics/node + + var/datum/pipe_network/network + + var/welded = 0 //defining this here for ventcrawl stuff + +/obj/machinery/atmospherics/unary/New() + ..() + air_contents = new + + air_contents.volume = 200 + +/obj/machinery/atmospherics/unary/init_dir() + initialize_directions = dir + +// Housekeeping and pipe network stuff below +/obj/machinery/atmospherics/unary/get_neighbor_nodes_for_init() + return list(node) + +/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node) + network = new_network + + if(new_network.normal_members.Find(src)) + return 0 + + new_network.normal_members += src + + return null + +/obj/machinery/atmospherics/unary/Destroy() + . = ..() + + if(node) + node.disconnect(src) + qdel(network) + + node = null + +/obj/machinery/atmospherics/unary/atmos_init() + if(node) + return + + var/node_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) + if(can_be_node(target, 1)) + node = target + break + + update_icon() + update_underlays() + +/obj/machinery/atmospherics/unary/build_network() + if(!network && node) + network = new /datum/pipe_network() + network.normal_members += src + network.build_network(node, src) + + +/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node) + return network + + return null + +/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network == old_network) + network = new_network + + return 1 + +/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network == reference) + results += air_contents + + return results + +/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node) + qdel(network) + node = null + + update_icon() + update_underlays() + + return null + +// Check if there are any other atmos machines in the same turf that will block this machine from initializing. +// Intended for use when a frame-constructable machine (i.e. not made from pipe fittings) wants to wrench down and connect. +// Returns TRUE if something is blocking, FALSE if its okay to continue. +/obj/machinery/atmospherics/unary/proc/check_for_obstacles() + for(var/obj/machinery/atmospherics/M in loc) + if(M == src) continue + if((M.pipe_flags & pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers. + visible_message("\The [src]'s cannot be connected, something is hogging the tile!") + return TRUE + if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) // Pipes on different layers can't block each other unless they are ALL_LAYER + continue + if(M.get_init_dirs() & get_init_dirs()) // matches at least one direction on either type of pipe + visible_message("\The [src]'s connector can't be connected, there is already a pipe at that location!") + return TRUE + return FALSE diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 31f1e33fc9..281d7e48f7 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -1,461 +1,461 @@ -#define DEFAULT_PRESSURE_DELTA 10000 - -#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE -#define INTERNAL_PRESSURE_BOUND 0 -#define PRESSURE_CHECKS 1 - -#define PRESSURE_CHECK_EXTERNAL 1 -#define PRESSURE_CHECK_INTERNAL 2 - -/obj/machinery/atmospherics/unary/vent_pump - icon = 'icons/atmos/vent_pump.dmi' - icon_state = "map_vent" - pipe_state = "uvent" - - name = "Air Vent" - desc = "Has a valve and pump attached to it" - use_power = USE_POWER_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 30000 //7500 W ~ 10 HP //VOREStation Edit - 30000 W - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY //connects to regular and supply pipes - blocks_emissive = FALSE - - var/area/initial_loc - level = 1 - var/area_uid - var/id_tag = null - - var/hibernate = 0 //Do we even process? - var/pump_direction = 1 //0 = siphoning, 1 = releasing - - var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND - - var/pressure_checks = PRESSURE_CHECKS - //1: Do not pass external_pressure_bound - //2: Do not pass internal_pressure_bound - //3: Do not pass either - - // Used when handling incoming radio signals requesting default settings - var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND - var/pressure_checks_default = PRESSURE_CHECKS - - var/frequency = 1439 - var/datum/radio_frequency/radio_connection - - var/radio_filter_out - var/radio_filter_in - - //var/datum/looping_sound/air_pump/soundloop - var/static/start_sound = 'sound/machines/air_pump/airpumpstart.ogg' - var/static/stop_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' - - -/obj/machinery/atmospherics/unary/vent_pump/on - use_power = USE_POWER_IDLE - icon_state = "map_vent_out" - -/obj/machinery/atmospherics/unary/vent_pump/aux - icon_state = "map_vent_aux" - icon_connect_type = "-aux" - connect_types = CONNECT_TYPE_AUX //connects to aux pipes - -/obj/machinery/atmospherics/unary/vent_pump/siphon - pump_direction = 0 - -/obj/machinery/atmospherics/unary/vent_pump/siphon/on - use_power = USE_POWER_IDLE - icon_state = "map_vent_in" - -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos - use_power = USE_POWER_IDLE - icon_state = "map_vent_in" - external_pressure_bound = 0 - external_pressure_bound_default = 0 - internal_pressure_bound = 2000 - internal_pressure_bound_default = 2000 - pressure_checks = 2 - pressure_checks_default = 2 - -/obj/machinery/atmospherics/unary/vent_pump/Initialize() - . = ..() - //soundloop = new(list(src), FALSE) - -/obj/machinery/atmospherics/unary/vent_pump/New() - ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP - - icon = null - initial_loc = get_area(loc) - area_uid = "\ref[initial_loc]" - if (!id_tag) - assign_uid() - id_tag = num2text(uid) - -/obj/machinery/atmospherics/unary/vent_pump/proc/update_area() - initial_loc = get_area(loc) - area_uid = "\ref[initial_loc]" - assign_uid() - id_tag = num2text(uid) - - -/obj/machinery/atmospherics/unary/vent_pump/Destroy() - unregister_radio(src, frequency) - if(initial_loc) - initial_loc.air_vent_info -= id_tag - initial_loc.air_vent_names -= id_tag - //QDEL_NULL(soundloop) - return ..() - -/obj/machinery/atmospherics/unary/vent_pump/high_volume - name = "Large Air Vent" - power_channel = EQUIP - power_rating = 45000 //15 kW ~ 20 HP //VOREStation Edit - 45000 - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux - icon_state = "map_vent_aux" - icon_connect_type = "-aux" - connect_types = CONNECT_TYPE_AUX //connects to aux pipes - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/New() - ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 - -// VOREStation Edit Start - Wall mounted vents -/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted - name = "Wall Mounted Air Vent" - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted/can_unwrench() - return FALSE // No way to construct these, so don't let them be removed. - -// Return the air from the turf in "front" of us (opposite the way the pipe is facing) -/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted/return_air() - var/turf/T = get_step(src, reverse_dir[dir]) - if(isnull(T)) - return ..() - return T.return_air() - -// VOREStation Edit End - -/obj/machinery/atmospherics/unary/vent_pump/engine - name = "Engine Core Vent" - power_channel = ENVIRON - power_rating = 30000 //15 kW ~ 20 HP - -/obj/machinery/atmospherics/unary/vent_pump/engine/New() - ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector - -/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - cut_overlays() - - var/vent_icon = "vent" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - vent_icon += "h" - - if(welded) - vent_icon += "weld" - playsound(src, stop_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) - - else if(!use_power || !node || (stat & (NOPOWER|BROKEN))) - vent_icon += "off" - playsound(src, stop_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) - else - vent_icon += "[pump_direction ? "out" : "in"]" - playsound(src, start_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) - - - add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) - -/obj/machinery/atmospherics/unary/vent_pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/unary/vent_pump/hide() - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/vent_pump/proc/can_pump() - if(stat & (NOPOWER|BROKEN)) - return 0 - if(!use_power) - return 0 - if(welded) - return 0 - return 1 - -/obj/machinery/atmospherics/unary/vent_pump/process() - ..() - - if (hibernate) - return 1 - - if (!node) - update_use_power(USE_POWER_OFF) - if(!can_pump()) - return 0 - - var/datum/gas_mixture/environment = return_air() // VOREStation Edit - Use our own proc - - var/power_draw = -1 - - //Figure out the target pressure difference - var/pressure_delta = get_pressure_delta(environment) - //src.visible_message("DEBUG >>> [src]: pressure_delta = [pressure_delta]") - - if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) - if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) - - //limit flow rate from turfs - transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - else - //If we're in an area that is fucking ideal, and we don't have to do anything, chances are we won't next tick either so why redo these calculations? - //JESUS FUCK. THERE ARE LITERALLY 250 OF YOU MOTHERFUCKERS ON ZLEVEL ONE AND YOU DO THIS SHIT EVERY TICK WHEN VERY OFTEN THERE IS NO REASON TO - - if(pump_direction && pressure_checks == PRESSURE_CHECK_EXTERNAL && controller_iteration > 10) //99% of all vents - //Fucking hibernate because you ain't doing shit. - hibernate = 1 - spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly - hibernate = 0 - - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) - var/pressure_delta = DEFAULT_PRESSURE_DELTA - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //internal -> external - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here - else //external -> internal - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here - - return pressure_delta - -/obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "area" = src.area_uid, - "tag" = src.id_tag, - "device" = "AVP", - "power" = use_power, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "internal" = internal_pressure_bound, - "external" = external_pressure_bound, - "timestamp" = world.time, - "sigtype" = "status", - "power_draw" = last_power_draw, - "flow_rate" = last_flow_rate, - ) - - if(!initial_loc.air_vent_names[id_tag]) - var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]" - initial_loc.air_vent_names[id_tag] = new_name - src.name = new_name - initial_loc.air_vent_info[id_tag] = signal.data - - radio_connection.post_signal(src, signal, radio_filter_out) - - return 1 - - -/obj/machinery/atmospherics/unary/vent_pump/atmos_init() - ..() - - //some vents work his own special way - radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null - if(frequency) - radio_connection = register_radio(src, frequency, frequency, radio_filter_in) - src.broadcast_status() - -/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - - hibernate = 0 - - //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["purge"] != null) - pressure_checks &= ~1 - pump_direction = 0 - - if(signal.data["stabalize"] != null) - pressure_checks |= 1 - pump_direction = 1 - - if(signal.data["power"] != null) - update_use_power(text2num(signal.data["power"])) - - if(signal.data["power_toggle"] != null) - update_use_power(!use_power) - - if(signal.data["checks"] != null) - if (signal.data["checks"] == "default") - pressure_checks = pressure_checks_default - else - pressure_checks = text2num(signal.data["checks"]) - - if(signal.data["checks_toggle"] != null) - pressure_checks = (pressure_checks?0:3) - - if(signal.data["direction"] != null) - pump_direction = text2num(signal.data["direction"]) - - if(signal.data["set_internal_pressure"] != null) - if (signal.data["set_internal_pressure"] == "default") - internal_pressure_bound = internal_pressure_bound_default - else - internal_pressure_bound = between(0,text2num(signal.data["set_internal_pressure"]),ONE_ATMOSPHERE*50) - - if(signal.data["set_external_pressure"] != null) - if (signal.data["set_external_pressure"] == "default") - external_pressure_bound = external_pressure_bound_default - else - external_pressure_bound = between(0,text2num(signal.data["set_external_pressure"]),ONE_ATMOSPHERE*50) - - if(signal.data["adjust_internal_pressure"] != null) - internal_pressure_bound = between(0,internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),ONE_ATMOSPHERE*50) - - if(signal.data["adjust_external_pressure"] != null) - external_pressure_bound = between(0,external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),ONE_ATMOSPHERE*50) - - if("reset_external_pressure" in signal.data) - external_pressure_bound = ONE_ATMOSPHERE - - if("reset_internal_pressure" in signal.data) - internal_pressure_bound = 0 - - if(signal.data["init"] != null) - name = signal.data["init"] - return - - if(signal.data["status"] != null) - spawn(2) - broadcast_status() - return //do not update_icon - - //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if (WT.remove_fuel(0,user)) - to_chat(user, "Now welding the vent.") - if(do_after(user, 20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - playsound(src, WT.usesound, 50, 1) - if(!welded) - user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") - welded = 1 - update_icon() - else - user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") - welded = 0 - update_icon() - else - to_chat(user, "The welding tool needs to be on to start this task.") - else - to_chat(user, "You need more welding fuel to complete this task.") - return 1 - else - ..() - -/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" - else - . += "You are too far away to read the gauge." - if(welded) - . += "It seems welded shut." - -/obj/machinery/atmospherics/unary/vent_pump/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (!(stat & NOPOWER) && use_power) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - var/turf/T = src.loc - if (node && node.level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() - -#undef DEFAULT_PRESSURE_DELTA - -#undef EXTERNAL_PRESSURE_BOUND -#undef INTERNAL_PRESSURE_BOUND -#undef PRESSURE_CHECKS - -#undef PRESSURE_CHECK_EXTERNAL -#undef PRESSURE_CHECK_INTERNAL +#define DEFAULT_PRESSURE_DELTA 10000 + +#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE +#define INTERNAL_PRESSURE_BOUND 0 +#define PRESSURE_CHECKS 1 + +#define PRESSURE_CHECK_EXTERNAL 1 +#define PRESSURE_CHECK_INTERNAL 2 + +/obj/machinery/atmospherics/unary/vent_pump + icon = 'icons/atmos/vent_pump.dmi' + icon_state = "map_vent" + pipe_state = "uvent" + + name = "Air Vent" + desc = "Has a valve and pump attached to it" + use_power = USE_POWER_OFF + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 30000 //7500 W ~ 10 HP //VOREStation Edit - 30000 W + + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY //connects to regular and supply pipes + blocks_emissive = FALSE + + var/area/initial_loc + level = 1 + var/area_uid + var/id_tag = null + + var/hibernate = 0 //Do we even process? + var/pump_direction = 1 //0 = siphoning, 1 = releasing + + var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND + var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND + + var/pressure_checks = PRESSURE_CHECKS + //1: Do not pass external_pressure_bound + //2: Do not pass internal_pressure_bound + //3: Do not pass either + + // Used when handling incoming radio signals requesting default settings + var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND + var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND + var/pressure_checks_default = PRESSURE_CHECKS + + var/frequency = 1439 + var/datum/radio_frequency/radio_connection + + var/radio_filter_out + var/radio_filter_in + + //var/datum/looping_sound/air_pump/soundloop + var/static/start_sound = 'sound/machines/air_pump/airpumpstart.ogg' + var/static/stop_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' + + +/obj/machinery/atmospherics/unary/vent_pump/on + use_power = USE_POWER_IDLE + icon_state = "map_vent_out" + +/obj/machinery/atmospherics/unary/vent_pump/aux + icon_state = "map_vent_aux" + icon_connect_type = "-aux" + connect_types = CONNECT_TYPE_AUX //connects to aux pipes + +/obj/machinery/atmospherics/unary/vent_pump/siphon + pump_direction = 0 + +/obj/machinery/atmospherics/unary/vent_pump/siphon/on + use_power = USE_POWER_IDLE + icon_state = "map_vent_in" + +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos + use_power = USE_POWER_IDLE + icon_state = "map_vent_in" + external_pressure_bound = 0 + external_pressure_bound_default = 0 + internal_pressure_bound = 2000 + internal_pressure_bound_default = 2000 + pressure_checks = 2 + pressure_checks_default = 2 + +/obj/machinery/atmospherics/unary/vent_pump/Initialize() + . = ..() + //soundloop = new(list(src), FALSE) + +/obj/machinery/atmospherics/unary/vent_pump/New() + ..() + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + + icon = null + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + if (!id_tag) + assign_uid() + id_tag = num2text(uid) + +/obj/machinery/atmospherics/unary/vent_pump/proc/update_area() + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + assign_uid() + id_tag = num2text(uid) + + +/obj/machinery/atmospherics/unary/vent_pump/Destroy() + unregister_radio(src, frequency) + if(initial_loc) + initial_loc.air_vent_info -= id_tag + initial_loc.air_vent_names -= id_tag + //QDEL_NULL(soundloop) + return ..() + +/obj/machinery/atmospherics/unary/vent_pump/high_volume + name = "Large Air Vent" + power_channel = EQUIP + power_rating = 45000 //15 kW ~ 20 HP //VOREStation Edit - 45000 + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux + icon_state = "map_vent_aux" + icon_connect_type = "-aux" + connect_types = CONNECT_TYPE_AUX //connects to aux pipes + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/New() + ..() + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 + +// VOREStation Edit Start - Wall mounted vents +/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted + name = "Wall Mounted Air Vent" + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted/can_unwrench() + return FALSE // No way to construct these, so don't let them be removed. + +// Return the air from the turf in "front" of us (opposite the way the pipe is facing) +/obj/machinery/atmospherics/unary/vent_pump/high_volume/wall_mounted/return_air() + var/turf/T = get_step(src, reverse_dir[dir]) + if(isnull(T)) + return ..() + return T.return_air() + +// VOREStation Edit End + +/obj/machinery/atmospherics/unary/vent_pump/engine + name = "Engine Core Vent" + power_channel = ENVIRON + power_rating = 30000 //15 kW ~ 20 HP + +/obj/machinery/atmospherics/unary/vent_pump/engine/New() + ..() + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector + +/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0) + if(!check_icon_cache()) + return + + cut_overlays() + + var/vent_icon = "vent" + + var/turf/T = get_turf(src) + if(!istype(T)) + return + + if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + vent_icon += "h" + + if(welded) + vent_icon += "weld" + playsound(src, stop_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) + + else if(!use_power || !node || (stat & (NOPOWER|BROKEN))) + vent_icon += "off" + playsound(src, stop_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) + else + vent_icon += "[pump_direction ? "out" : "in"]" + playsound(src, start_sound, 25, ignore_walls = FALSE, preference = /datum/client_preference/air_pump_noise) + + + add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) + +/obj/machinery/atmospherics/unary/vent_pump/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + return + else + if(node) + add_underlay(T, node, dir, node.icon_connect_type) + else + add_underlay(T,, dir) + +/obj/machinery/atmospherics/unary/vent_pump/hide() + update_icon() + update_underlays() + +/obj/machinery/atmospherics/unary/vent_pump/proc/can_pump() + if(stat & (NOPOWER|BROKEN)) + return 0 + if(!use_power) + return 0 + if(welded) + return 0 + return 1 + +/obj/machinery/atmospherics/unary/vent_pump/process() + ..() + + if (hibernate) + return 1 + + if (!node) + update_use_power(USE_POWER_OFF) + if(!can_pump()) + return 0 + + var/datum/gas_mixture/environment = return_air() // VOREStation Edit - Use our own proc + + var/power_draw = -1 + + //Figure out the target pressure difference + var/pressure_delta = get_pressure_delta(environment) + //src.visible_message("DEBUG >>> [src]: pressure_delta = [pressure_delta]") + + if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) + if(pump_direction) //internal -> external + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) + power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) + else //external -> internal + var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) + + //limit flow rate from turfs + transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here + power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) + + else + //If we're in an area that is fucking ideal, and we don't have to do anything, chances are we won't next tick either so why redo these calculations? + //JESUS FUCK. THERE ARE LITERALLY 250 OF YOU MOTHERFUCKERS ON ZLEVEL ONE AND YOU DO THIS SHIT EVERY TICK WHEN VERY OFTEN THERE IS NO REASON TO + + if(pump_direction && pressure_checks == PRESSURE_CHECK_EXTERNAL && controller_iteration > 10) //99% of all vents + //Fucking hibernate because you ain't doing shit. + hibernate = 1 + spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly + hibernate = 0 + + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + if(network) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) + var/pressure_delta = DEFAULT_PRESSURE_DELTA + var/environment_pressure = environment.return_pressure() + + if(pump_direction) //internal -> external + if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here + if(pressure_checks & PRESSURE_CHECK_INTERNAL) + pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here + else //external -> internal + if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here + if(pressure_checks & PRESSURE_CHECK_INTERNAL) + pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here + + return pressure_delta + +/obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "area" = src.area_uid, + "tag" = src.id_tag, + "device" = "AVP", + "power" = use_power, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "internal" = internal_pressure_bound, + "external" = external_pressure_bound, + "timestamp" = world.time, + "sigtype" = "status", + "power_draw" = last_power_draw, + "flow_rate" = last_flow_rate, + ) + + if(!initial_loc.air_vent_names[id_tag]) + var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]" + initial_loc.air_vent_names[id_tag] = new_name + src.name = new_name + initial_loc.air_vent_info[id_tag] = signal.data + + radio_connection.post_signal(src, signal, radio_filter_out) + + return 1 + + +/obj/machinery/atmospherics/unary/vent_pump/atmos_init() + ..() + + //some vents work his own special way + radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null + if(frequency) + radio_connection = register_radio(src, frequency, frequency, radio_filter_in) + src.broadcast_status() + +/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) + if(stat & (NOPOWER|BROKEN)) + return + + hibernate = 0 + + //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + + if(signal.data["purge"] != null) + pressure_checks &= ~1 + pump_direction = 0 + + if(signal.data["stabalize"] != null) + pressure_checks |= 1 + pump_direction = 1 + + if(signal.data["power"] != null) + update_use_power(text2num(signal.data["power"])) + + if(signal.data["power_toggle"] != null) + update_use_power(!use_power) + + if(signal.data["checks"] != null) + if (signal.data["checks"] == "default") + pressure_checks = pressure_checks_default + else + pressure_checks = text2num(signal.data["checks"]) + + if(signal.data["checks_toggle"] != null) + pressure_checks = (pressure_checks?0:3) + + if(signal.data["direction"] != null) + pump_direction = text2num(signal.data["direction"]) + + if(signal.data["set_internal_pressure"] != null) + if (signal.data["set_internal_pressure"] == "default") + internal_pressure_bound = internal_pressure_bound_default + else + internal_pressure_bound = between(0,text2num(signal.data["set_internal_pressure"]),ONE_ATMOSPHERE*50) + + if(signal.data["set_external_pressure"] != null) + if (signal.data["set_external_pressure"] == "default") + external_pressure_bound = external_pressure_bound_default + else + external_pressure_bound = between(0,text2num(signal.data["set_external_pressure"]),ONE_ATMOSPHERE*50) + + if(signal.data["adjust_internal_pressure"] != null) + internal_pressure_bound = between(0,internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),ONE_ATMOSPHERE*50) + + if(signal.data["adjust_external_pressure"] != null) + external_pressure_bound = between(0,external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),ONE_ATMOSPHERE*50) + + if("reset_external_pressure" in signal.data) + external_pressure_bound = ONE_ATMOSPHERE + + if("reset_internal_pressure" in signal.data) + internal_pressure_bound = 0 + + if(signal.data["init"] != null) + name = signal.data["init"] + return + + if(signal.data["status"] != null) + spawn(2) + broadcast_status() + return //do not update_icon + + //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if (WT.remove_fuel(0,user)) + to_chat(user, "Now welding the vent.") + if(do_after(user, 20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + playsound(src, WT.usesound, 50, 1) + if(!welded) + user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") + welded = 1 + update_icon() + else + user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") + welded = 0 + update_icon() + else + to_chat(user, "The welding tool needs to be on to start this task.") + else + to_chat(user, "You need more welding fuel to complete this task.") + return 1 + else + ..() + +/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + else + . += "You are too far away to read the gauge." + if(welded) + . += "It seems welded shut." + +/obj/machinery/atmospherics/unary/vent_pump/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (!(stat & NOPOWER) && use_power) + to_chat(user, "You cannot unwrench \the [src], turn it off first.") + return 1 + var/turf/T = src.loc + if (node && node.level==1 && isturf(T) && !T.is_plating()) + to_chat(user, "You must remove the plating first.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() + +#undef DEFAULT_PRESSURE_DELTA + +#undef EXTERNAL_PRESSURE_BOUND +#undef INTERNAL_PRESSURE_BOUND +#undef PRESSURE_CHECKS + +#undef PRESSURE_CHECK_EXTERNAL +#undef PRESSURE_CHECK_INTERNAL diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 477ae9c552..1a57841a69 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -1,300 +1,300 @@ -/obj/machinery/atmospherics/unary/vent_scrubber - icon = 'icons/atmos/vent_scrubber.dmi' - icon_state = "map_scrubber_off" - pipe_state = "scrubber" - - name = "Air Scrubber" - desc = "Has a valve and pump attached to it" - use_power = USE_POWER_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 7500 //7500 W ~ 10 HP - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER //connects to regular and scrubber pipes - - level = 1 - - var/area/initial_loc - var/id_tag = null - var/frequency = 1439 - var/datum/radio_frequency/radio_connection - - var/hibernate = 0 //Do we even process? - var/scrubbing = 1 //0 = siphoning, 1 = scrubbing - var/list/scrubbing_gas = list("carbon_dioxide", "phoron") - - var/panic = 0 //is this scrubber panicked? - - var/area_uid - var/radio_filter_out - var/radio_filter_in - -/obj/machinery/atmospherics/unary/vent_scrubber/on - use_power = USE_POWER_IDLE - icon_state = "map_scrubber_on" - -/obj/machinery/atmospherics/unary/vent_scrubber/New() - ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER - - icon = null - initial_loc = get_area(loc) - area_uid = "\ref[initial_loc]" - if (!id_tag) - assign_uid() - id_tag = num2text(uid) - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/update_area() - initial_loc = get_area(loc) - area_uid = "\ref[initial_loc]" - assign_uid() - id_tag = num2text(uid) - -/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() - unregister_radio(src, frequency) - if(initial_loc) - initial_loc.air_scrub_info -= id_tag - initial_loc.air_scrub_names -= id_tag - return ..() - -/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - cut_overlays() - - var/scrubber_icon = "scrubber" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(!powered()) - scrubber_icon += "off" - else - scrubber_icon += "[use_power ? "[scrubbing ? "on" : "in"]" : "off"]" - - add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon)) - -/obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - signal.data = list( - "area" = area_uid, - "tag" = id_tag, - "device" = "AScr", - "timestamp" = world.time, - "power" = use_power, - "scrubbing" = scrubbing, - "panic" = panic, - "filter_o2" = ("oxygen" in scrubbing_gas), - "filter_n2" = ("nitrogen" in scrubbing_gas), - "filter_co2" = ("carbon_dioxide" in scrubbing_gas), - "filter_phoron" = ("phoron" in scrubbing_gas), - "filter_n2o" = ("nitrous_oxide" in scrubbing_gas), - "filter_fuel" = ("volatile_fuel" in scrubbing_gas), - "sigtype" = "status" - ) - if(!initial_loc.air_scrub_names[id_tag]) - var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]" - initial_loc.air_scrub_names[id_tag] = new_name - src.name = new_name - initial_loc.air_scrub_info[id_tag] = signal.data - radio_connection.post_signal(src, signal, radio_filter_out) - - return 1 - -/obj/machinery/atmospherics/unary/vent_scrubber/atmos_init() - ..() - radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null - if (frequency) - set_frequency(frequency) - src.broadcast_status() - -/obj/machinery/atmospherics/unary/vent_scrubber/process() - ..() - - if (hibernate) - return 1 - - if (!node) - update_use_power(USE_POWER_OFF) - //broadcast_status() - if(!use_power || (stat & (NOPOWER|BROKEN))) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - - var/power_draw = -1 - if(scrubbing) - //limit flow rate from turfs - var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) //group_multiplier gets divided out here - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - else //Just siphon all air - //limit flow rate from turfs - var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SIPHON_FLOWRATE/environment.volume) //group_multiplier gets divided out here - - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - if(scrubbing && power_draw < 0 && controller_iteration > 10) //99% of all scrubbers - //Fucking hibernate because you ain't doing shit. - hibernate = 1 - spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly - hibernate = 0 - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes. - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["power"] != null) - update_use_power(text2num(signal.data["power"])) - if(signal.data["power_toggle"] != null) - update_use_power(!use_power) - - if(signal.data["panic_siphon"]) //must be before if("scrubbing" thing - panic = text2num(signal.data["panic_siphon"]) - if(panic) - update_use_power(USE_POWER_IDLE) - scrubbing = 0 - else - scrubbing = 1 - if(signal.data["toggle_panic_siphon"] != null) - panic = !panic - if(panic) - update_use_power(USE_POWER_IDLE) - scrubbing = 0 - else - scrubbing = 1 - - if(signal.data["scrubbing"] != null) - scrubbing = text2num(signal.data["scrubbing"]) - if(scrubbing) - panic = 0 - if(signal.data["toggle_scrubbing"]) - scrubbing = !scrubbing - if(scrubbing) - panic = 0 - - var/list/toggle = list() - - if(!isnull(signal.data["o2_scrub"]) && text2num(signal.data["o2_scrub"]) != ("oxygen" in scrubbing_gas)) - toggle += "oxygen" - else if(signal.data["toggle_o2_scrub"]) - toggle += "oxygen" - - if(!isnull(signal.data["n2_scrub"]) && text2num(signal.data["n2_scrub"]) != ("nitrogen" in scrubbing_gas)) - toggle += "nitrogen" - else if(signal.data["toggle_n2_scrub"]) - toggle += "nitrogen" - - if(!isnull(signal.data["co2_scrub"]) && text2num(signal.data["co2_scrub"]) != ("carbon_dioxide" in scrubbing_gas)) - toggle += "carbon_dioxide" - else if(signal.data["toggle_co2_scrub"]) - toggle += "carbon_dioxide" - - if(!isnull(signal.data["tox_scrub"]) && text2num(signal.data["tox_scrub"]) != ("phoron" in scrubbing_gas)) - toggle += "phoron" - else if(signal.data["toggle_tox_scrub"]) - toggle += "phoron" - - if(!isnull(signal.data["n2o_scrub"]) && text2num(signal.data["n2o_scrub"]) != ("nitrous_oxide" in scrubbing_gas)) - toggle += "nitrous_oxide" - else if(signal.data["toggle_n2o_scrub"]) - toggle += "nitrous_oxide" - - if(!isnull(signal.data["fuel_scrub"]) && text2num(signal.data["fuel_scrub"]) != ("volatile_fuel" in scrubbing_gas)) - toggle += "volatile_fuel" - else if(signal.data["toggle_fuel_scrub"]) - toggle += "volatile_fuel" - - scrubbing_gas ^= toggle - - if(signal.data["init"] != null) - name = signal.data["init"] - return - - if(signal.data["status"] != null) - spawn(2) - broadcast_status() - return //do not update_icon - -// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/unary/vent_scrubber/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (!(stat & NOPOWER) && use_power) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - var/turf/T = src.loc - if (node && node.level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() - -/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" - else - . += "You are too far away to read the gauge." +/obj/machinery/atmospherics/unary/vent_scrubber + icon = 'icons/atmos/vent_scrubber.dmi' + icon_state = "map_scrubber_off" + pipe_state = "scrubber" + + name = "Air Scrubber" + desc = "Has a valve and pump attached to it" + use_power = USE_POWER_OFF + idle_power_usage = 150 //internal circuitry, friction losses and stuff + power_rating = 7500 //7500 W ~ 10 HP + + connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER //connects to regular and scrubber pipes + + level = 1 + + var/area/initial_loc + var/id_tag = null + var/frequency = 1439 + var/datum/radio_frequency/radio_connection + + var/hibernate = 0 //Do we even process? + var/scrubbing = 1 //0 = siphoning, 1 = scrubbing + var/list/scrubbing_gas = list("carbon_dioxide", "phoron") + + var/panic = 0 //is this scrubber panicked? + + var/area_uid + var/radio_filter_out + var/radio_filter_in + +/obj/machinery/atmospherics/unary/vent_scrubber/on + use_power = USE_POWER_IDLE + icon_state = "map_scrubber_on" + +/obj/machinery/atmospherics/unary/vent_scrubber/New() + ..() + air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER + + icon = null + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + if (!id_tag) + assign_uid() + id_tag = num2text(uid) + +/obj/machinery/atmospherics/unary/vent_scrubber/proc/update_area() + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + assign_uid() + id_tag = num2text(uid) + +/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() + unregister_radio(src, frequency) + if(initial_loc) + initial_loc.air_scrub_info -= id_tag + initial_loc.air_scrub_names -= id_tag + return ..() + +/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) + if(!check_icon_cache()) + return + + cut_overlays() + + var/scrubber_icon = "scrubber" + + var/turf/T = get_turf(src) + if(!istype(T)) + return + + if(!powered()) + scrubber_icon += "off" + else + scrubber_icon += "[use_power ? "[scrubbing ? "on" : "in"]" : "off"]" + + add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon)) + +/obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + return + else + if(node) + add_underlay(T, node, dir, node.icon_connect_type) + else + add_underlay(T,, dir) + +/obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) + +/obj/machinery/atmospherics/unary/vent_scrubber/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + signal.data = list( + "area" = area_uid, + "tag" = id_tag, + "device" = "AScr", + "timestamp" = world.time, + "power" = use_power, + "scrubbing" = scrubbing, + "panic" = panic, + "filter_o2" = ("oxygen" in scrubbing_gas), + "filter_n2" = ("nitrogen" in scrubbing_gas), + "filter_co2" = ("carbon_dioxide" in scrubbing_gas), + "filter_phoron" = ("phoron" in scrubbing_gas), + "filter_n2o" = ("nitrous_oxide" in scrubbing_gas), + "filter_fuel" = ("volatile_fuel" in scrubbing_gas), + "sigtype" = "status" + ) + if(!initial_loc.air_scrub_names[id_tag]) + var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]" + initial_loc.air_scrub_names[id_tag] = new_name + src.name = new_name + initial_loc.air_scrub_info[id_tag] = signal.data + radio_connection.post_signal(src, signal, radio_filter_out) + + return 1 + +/obj/machinery/atmospherics/unary/vent_scrubber/atmos_init() + ..() + radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null + if (frequency) + set_frequency(frequency) + src.broadcast_status() + +/obj/machinery/atmospherics/unary/vent_scrubber/process() + ..() + + if (hibernate) + return 1 + + if (!node) + update_use_power(USE_POWER_OFF) + //broadcast_status() + if(!use_power || (stat & (NOPOWER|BROKEN))) + return 0 + + var/datum/gas_mixture/environment = loc.return_air() + + var/power_draw = -1 + if(scrubbing) + //limit flow rate from turfs + var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) //group_multiplier gets divided out here + + power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) + else //Just siphon all air + //limit flow rate from turfs + var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SIPHON_FLOWRATE/environment.volume) //group_multiplier gets divided out here + + power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) + + if(scrubbing && power_draw < 0 && controller_iteration > 10) //99% of all scrubbers + //Fucking hibernate because you ain't doing shit. + hibernate = 1 + spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly + hibernate = 0 + + if (power_draw >= 0) + last_power_draw = power_draw + use_power(power_draw) + + if(network) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes. + update_icon() + update_underlays() + +/obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) + if(stat & (NOPOWER|BROKEN)) + return + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + + if(signal.data["power"] != null) + update_use_power(text2num(signal.data["power"])) + if(signal.data["power_toggle"] != null) + update_use_power(!use_power) + + if(signal.data["panic_siphon"]) //must be before if("scrubbing" thing + panic = text2num(signal.data["panic_siphon"]) + if(panic) + update_use_power(USE_POWER_IDLE) + scrubbing = 0 + else + scrubbing = 1 + if(signal.data["toggle_panic_siphon"] != null) + panic = !panic + if(panic) + update_use_power(USE_POWER_IDLE) + scrubbing = 0 + else + scrubbing = 1 + + if(signal.data["scrubbing"] != null) + scrubbing = text2num(signal.data["scrubbing"]) + if(scrubbing) + panic = 0 + if(signal.data["toggle_scrubbing"]) + scrubbing = !scrubbing + if(scrubbing) + panic = 0 + + var/list/toggle = list() + + if(!isnull(signal.data["o2_scrub"]) && text2num(signal.data["o2_scrub"]) != ("oxygen" in scrubbing_gas)) + toggle += "oxygen" + else if(signal.data["toggle_o2_scrub"]) + toggle += "oxygen" + + if(!isnull(signal.data["n2_scrub"]) && text2num(signal.data["n2_scrub"]) != ("nitrogen" in scrubbing_gas)) + toggle += "nitrogen" + else if(signal.data["toggle_n2_scrub"]) + toggle += "nitrogen" + + if(!isnull(signal.data["co2_scrub"]) && text2num(signal.data["co2_scrub"]) != ("carbon_dioxide" in scrubbing_gas)) + toggle += "carbon_dioxide" + else if(signal.data["toggle_co2_scrub"]) + toggle += "carbon_dioxide" + + if(!isnull(signal.data["tox_scrub"]) && text2num(signal.data["tox_scrub"]) != ("phoron" in scrubbing_gas)) + toggle += "phoron" + else if(signal.data["toggle_tox_scrub"]) + toggle += "phoron" + + if(!isnull(signal.data["n2o_scrub"]) && text2num(signal.data["n2o_scrub"]) != ("nitrous_oxide" in scrubbing_gas)) + toggle += "nitrous_oxide" + else if(signal.data["toggle_n2o_scrub"]) + toggle += "nitrous_oxide" + + if(!isnull(signal.data["fuel_scrub"]) && text2num(signal.data["fuel_scrub"]) != ("volatile_fuel" in scrubbing_gas)) + toggle += "volatile_fuel" + else if(signal.data["toggle_fuel_scrub"]) + toggle += "volatile_fuel" + + scrubbing_gas ^= toggle + + if(signal.data["init"] != null) + name = signal.data["init"] + return + + if(signal.data["status"] != null) + spawn(2) + broadcast_status() + return //do not update_icon + +// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + return + +/obj/machinery/atmospherics/unary/vent_scrubber/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (!(stat & NOPOWER) && use_power) + to_chat(user, "You cannot unwrench \the [src], turn it off first.") + return 1 + var/turf/T = src.loc + if (node && node.level==1 && isturf(T) && !T.is_plating()) + to_chat(user, "You must remove the plating first.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() + +/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + else + . += "You are too far away to read the gauge." diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 303e84b78c..1996c22336 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -1,311 +1,311 @@ -/obj/machinery/atmospherics/valve - icon = 'icons/atmos/valve.dmi' - icon_state = "map_valve0" - construction_type = /obj/item/pipe/binary - pipe_state = "mvalve" - - name = "manual valve" - desc = "A pipe valve" - - level = 1 - dir = SOUTH - initialize_directions = SOUTH|NORTH - - var/open = 0 - var/openDuringInit = 0 - - - var/datum/pipe_network/network_node1 - var/datum/pipe_network/network_node2 - -/obj/machinery/atmospherics/valve/open - open = 1 - icon_state = "map_valve1" - -/obj/machinery/atmospherics/valve/update_icon(animation) - if(animation) - flick("valve[src.open][!src.open]",src) - else - icon_state = "valve[open]" - -/obj/machinery/atmospherics/valve/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, get_dir(src, node1)) - add_underlay(T, node2, get_dir(src, node2)) - -/obj/machinery/atmospherics/valve/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/valve/init_dir() - switch(dir) - if(NORTH,SOUTH) - initialize_directions = NORTH|SOUTH - if(EAST,WEST) - initialize_directions = EAST|WEST - -/obj/machinery/atmospherics/valve/get_neighbor_nodes_for_init() - return list(node1, node2) - -/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network_node1 = new_network - if(open) - network_node2 = new_network - else if(reference == node2) - network_node2 = new_network - if(open) - network_node1 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - if(open) - if(reference == node1) - if(node2) - return node2.network_expand(new_network, src) - else if(reference == node2) - if(node1) - return node1.network_expand(new_network, src) - - return null - -/obj/machinery/atmospherics/valve/Destroy() - . = ..() - - if(node1) - node1.disconnect(src) - qdel(network_node1) - if(node2) - node2.disconnect(src) - qdel(network_node2) - - node1 = null - node2 = null - -/obj/machinery/atmospherics/valve/proc/open() - if(open) return 0 - - open = 1 - update_icon() - - if(network_node1&&network_node2) - network_node1.merge(network_node2) - network_node2 = network_node1 - - if(network_node1) - network_node1.update = 1 - else if(network_node2) - network_node2.update = 1 - - return 1 - -/obj/machinery/atmospherics/valve/proc/close() - if(!open) - return 0 - - open = 0 - update_icon() - - if(network_node1) - qdel(network_node1) - if(network_node2) - qdel(network_node2) - - build_network() - - return 1 - -/obj/machinery/atmospherics/valve/proc/normalize_dir() - if(dir==3) - set_dir(1) - else if(dir==12) - set_dir(4) - -/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob) - return - -/obj/machinery/atmospherics/valve/attack_hand(mob/user as mob) - src.add_fingerprint(usr) - update_icon(1) - sleep(10) - if (src.open) - src.close() - else - src.open() - -/obj/machinery/atmospherics/valve/process() - ..() - . = PROCESS_KILL - - return - -/obj/machinery/atmospherics/valve/atmos_init() - normalize_dir() - - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - STANDARD_ATMOS_CHOOSE_NODE(1, node1_dir) - STANDARD_ATMOS_CHOOSE_NODE(2, node2_dir) - - build_network() - - update_icon() - update_underlays() - - if(openDuringInit) - close() - open() - openDuringInit = 0 - -/obj/machinery/atmospherics/valve/build_network() - if(!network_node1 && node1) - network_node1 = new /datum/pipe_network() - network_node1.normal_members += src - network_node1.build_network(node1, src) - - if(!network_node2 && node2) - network_node2 = new /datum/pipe_network() - network_node2.normal_members += src - network_node2.build_network(node2, src) - -/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network_node1 - - if(reference==node2) - return network_node2 - - return null - -/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network_node1 == old_network) - network_node1 = new_network - if(network_node2 == old_network) - network_node2 = new_network - - return 1 - -/obj/machinery/atmospherics/valve/return_network_air(datum/pipe_network/reference) - return null - -/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network_node1) - node1 = null - - else if(reference==node2) - qdel(network_node2) - node2 = null - - update_underlays() - - return null - -/obj/machinery/atmospherics/valve/digital // can be controlled by AI - name = "digital valve" - desc = "A digitally controlled valve." - icon = 'icons/atmos/digital_valve.dmi' - pipe_state = "dvalve" - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - -/obj/machinery/atmospherics/valve/digital/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/atmospherics/valve/digital/attack_hand(mob/user as mob) - if(!powered()) - return - if(!src.allowed(user)) - to_chat(user, "Access denied.") - return - ..() - -/obj/machinery/atmospherics/valve/digital/open - open = 1 - icon_state = "map_valve1" - -/obj/machinery/atmospherics/valve/digital/power_change() - var/old_stat = stat - ..() - if(old_stat != stat) - update_icon() - -/obj/machinery/atmospherics/valve/digital/update_icon() - ..() - if(!powered()) - icon_state = "valve[open]nopower" - -/obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/atmospherics/valve/digital/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/valve/digital/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id)) - return 0 - - switch(signal.data["command"]) - if("valve_open") - if(!open) - open() - - if("valve_close") - if(open) - close() - - if("valve_toggle") - if(open) - close() - else - open() - -/obj/machinery/atmospherics/valve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (!W.has_tool_quality(TOOL_WRENCH)) - return ..() - if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user)) - to_chat(user, "Access denied.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() - -/obj/machinery/atmospherics/valve/examine(mob/user) - . = ..() - . += "It is [open ? "open" : "closed"]." +/obj/machinery/atmospherics/valve + icon = 'icons/atmos/valve.dmi' + icon_state = "map_valve0" + construction_type = /obj/item/pipe/binary + pipe_state = "mvalve" + + name = "manual valve" + desc = "A pipe valve" + + level = 1 + dir = SOUTH + initialize_directions = SOUTH|NORTH + + var/open = 0 + var/openDuringInit = 0 + + + var/datum/pipe_network/network_node1 + var/datum/pipe_network/network_node2 + +/obj/machinery/atmospherics/valve/open + open = 1 + icon_state = "map_valve1" + +/obj/machinery/atmospherics/valve/update_icon(animation) + if(animation) + flick("valve[src.open][!src.open]",src) + else + icon_state = "valve[open]" + +/obj/machinery/atmospherics/valve/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + add_underlay(T, node1, get_dir(src, node1)) + add_underlay(T, node2, get_dir(src, node2)) + +/obj/machinery/atmospherics/valve/hide(var/i) + update_underlays() + +/obj/machinery/atmospherics/valve/init_dir() + switch(dir) + if(NORTH,SOUTH) + initialize_directions = NORTH|SOUTH + if(EAST,WEST) + initialize_directions = EAST|WEST + +/obj/machinery/atmospherics/valve/get_neighbor_nodes_for_init() + return list(node1, node2) + +/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node1) + network_node1 = new_network + if(open) + network_node2 = new_network + else if(reference == node2) + network_node2 = new_network + if(open) + network_node1 = new_network + + if(new_network.normal_members.Find(src)) + return 0 + + new_network.normal_members += src + + if(open) + if(reference == node1) + if(node2) + return node2.network_expand(new_network, src) + else if(reference == node2) + if(node1) + return node1.network_expand(new_network, src) + + return null + +/obj/machinery/atmospherics/valve/Destroy() + . = ..() + + if(node1) + node1.disconnect(src) + qdel(network_node1) + if(node2) + node2.disconnect(src) + qdel(network_node2) + + node1 = null + node2 = null + +/obj/machinery/atmospherics/valve/proc/open() + if(open) return 0 + + open = 1 + update_icon() + + if(network_node1&&network_node2) + network_node1.merge(network_node2) + network_node2 = network_node1 + + if(network_node1) + network_node1.update = 1 + else if(network_node2) + network_node2.update = 1 + + return 1 + +/obj/machinery/atmospherics/valve/proc/close() + if(!open) + return 0 + + open = 0 + update_icon() + + if(network_node1) + qdel(network_node1) + if(network_node2) + qdel(network_node2) + + build_network() + + return 1 + +/obj/machinery/atmospherics/valve/proc/normalize_dir() + if(dir==3) + set_dir(1) + else if(dir==12) + set_dir(4) + +/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob) + return + +/obj/machinery/atmospherics/valve/attack_hand(mob/user as mob) + src.add_fingerprint(usr) + update_icon(1) + sleep(10) + if (src.open) + src.close() + else + src.open() + +/obj/machinery/atmospherics/valve/process() + ..() + . = PROCESS_KILL + + return + +/obj/machinery/atmospherics/valve/atmos_init() + normalize_dir() + + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + STANDARD_ATMOS_CHOOSE_NODE(1, node1_dir) + STANDARD_ATMOS_CHOOSE_NODE(2, node2_dir) + + build_network() + + update_icon() + update_underlays() + + if(openDuringInit) + close() + open() + openDuringInit = 0 + +/obj/machinery/atmospherics/valve/build_network() + if(!network_node1 && node1) + network_node1 = new /datum/pipe_network() + network_node1.normal_members += src + network_node1.build_network(node1, src) + + if(!network_node2 && node2) + network_node2 = new /datum/pipe_network() + network_node2.normal_members += src + network_node2.build_network(node2, src) + +/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node1) + return network_node1 + + if(reference==node2) + return network_node2 + + return null + +/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network_node1 == old_network) + network_node1 = new_network + if(network_node2 == old_network) + network_node2 = new_network + + return 1 + +/obj/machinery/atmospherics/valve/return_network_air(datum/pipe_network/reference) + return null + +/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) + if(reference==node1) + qdel(network_node1) + node1 = null + + else if(reference==node2) + qdel(network_node2) + node2 = null + + update_underlays() + + return null + +/obj/machinery/atmospherics/valve/digital // can be controlled by AI + name = "digital valve" + desc = "A digitally controlled valve." + icon = 'icons/atmos/digital_valve.dmi' + pipe_state = "dvalve" + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + +/obj/machinery/atmospherics/valve/digital/Destroy() + unregister_radio(src, frequency) + . = ..() + +/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/atmospherics/valve/digital/attack_hand(mob/user as mob) + if(!powered()) + return + if(!src.allowed(user)) + to_chat(user, "Access denied.") + return + ..() + +/obj/machinery/atmospherics/valve/digital/open + open = 1 + icon_state = "map_valve1" + +/obj/machinery/atmospherics/valve/digital/power_change() + var/old_stat = stat + ..() + if(old_stat != stat) + update_icon() + +/obj/machinery/atmospherics/valve/digital/update_icon() + ..() + if(!powered()) + icon_state = "valve[open]nopower" + +/obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/atmospherics/valve/digital/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/valve/digital/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id)) + return 0 + + switch(signal.data["command"]) + if("valve_open") + if(!open) + open() + + if("valve_close") + if(open) + close() + + if("valve_toggle") + if(open) + close() + else + open() + +/obj/machinery/atmospherics/valve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.has_tool_quality(TOOL_WRENCH)) + return ..() + if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user)) + to_chat(user, "Access denied.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() + +/obj/machinery/atmospherics/valve/examine(mob/user) + . = ..() + . += "It is [open ? "open" : "closed"]." diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index a611e30a89..20a4dbc159 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -1,90 +1,90 @@ -var/global/list/datum/pipe_network/pipe_networks = list() // TODO - Move into SSmachines - -/datum/pipe_network - var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network - var/volume = 0 //caches the total volume for atmos machines to use in gas calculations - - var/list/obj/machinery/atmospherics/normal_members = list() - var/list/datum/pipeline/line_members = list() - //membership roster to go through for updates and what not - - var/list/leaks = list() - - var/update = 1 - //var/datum/gas_mixture/air_transient = null - -/datum/pipe_network/Destroy() - STOP_PROCESSING_PIPENET(src) - for(var/datum/pipeline/line_member in line_members) - line_member.network = null - for(var/obj/machinery/atmospherics/normal_member in normal_members) - normal_member.reassign_network(src, null) - gases.Cut() // Do not qdel the gases, we don't own them - leaks.Cut() - return ..() - -/datum/pipe_network/process() - //Equalize gases amongst pipe if called for - if(update) - update = 0 - reconcile_air() //equalize_gases(gases) - - listclearnulls(leaks) // Let's not have forever-seals. - - //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport - //for(var/datum/pipeline/line_member in line_members) - // line_member.process() - -/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) - //Purpose: Generate membership roster - //Notes: Assuming that members will add themselves to appropriate roster in network_expand() - - if(!start_normal) - qdel(src) - return - - start_normal.network_expand(src, reference) - - update_network_gases() - - if((normal_members.len>0)||(line_members.len>0)) - START_PROCESSING_PIPENET(src) - else - qdel(src) - -/datum/pipe_network/proc/merge(datum/pipe_network/giver) - if(giver==src) return 0 - - normal_members |= giver.normal_members - - line_members |= giver.line_members - - leaks |= giver.leaks - - for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) - normal_member.reassign_network(giver, src) - - for(var/datum/pipeline/line_member in giver.line_members) - line_member.network = src - - update_network_gases() - return 1 - -/datum/pipe_network/proc/update_network_gases() - //Go through membership roster and make sure gases is up to date - - gases = list() - volume = 0 - - for(var/obj/machinery/atmospherics/normal_member in normal_members) - var/result = normal_member.return_network_air(src) - if(result) gases += result - - for(var/datum/pipeline/line_member in line_members) - gases += line_member.air - - for(var/datum/gas_mixture/air in gases) - volume += air.volume - -/datum/pipe_network/proc/reconcile_air() - equalize_gases(gases) +var/global/list/datum/pipe_network/pipe_networks = list() // TODO - Move into SSmachines + +/datum/pipe_network + var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network + var/volume = 0 //caches the total volume for atmos machines to use in gas calculations + + var/list/obj/machinery/atmospherics/normal_members = list() + var/list/datum/pipeline/line_members = list() + //membership roster to go through for updates and what not + + var/list/leaks = list() + + var/update = 1 + //var/datum/gas_mixture/air_transient = null + +/datum/pipe_network/Destroy() + STOP_PROCESSING_PIPENET(src) + for(var/datum/pipeline/line_member in line_members) + line_member.network = null + for(var/obj/machinery/atmospherics/normal_member in normal_members) + normal_member.reassign_network(src, null) + gases.Cut() // Do not qdel the gases, we don't own them + leaks.Cut() + return ..() + +/datum/pipe_network/process() + //Equalize gases amongst pipe if called for + if(update) + update = 0 + reconcile_air() //equalize_gases(gases) + + listclearnulls(leaks) // Let's not have forever-seals. + + //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport + //for(var/datum/pipeline/line_member in line_members) + // line_member.process() + +/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) + //Purpose: Generate membership roster + //Notes: Assuming that members will add themselves to appropriate roster in network_expand() + + if(!start_normal) + qdel(src) + return + + start_normal.network_expand(src, reference) + + update_network_gases() + + if((normal_members.len>0)||(line_members.len>0)) + START_PROCESSING_PIPENET(src) + else + qdel(src) + +/datum/pipe_network/proc/merge(datum/pipe_network/giver) + if(giver==src) return 0 + + normal_members |= giver.normal_members + + line_members |= giver.line_members + + leaks |= giver.leaks + + for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) + normal_member.reassign_network(giver, src) + + for(var/datum/pipeline/line_member in giver.line_members) + line_member.network = src + + update_network_gases() + return 1 + +/datum/pipe_network/proc/update_network_gases() + //Go through membership roster and make sure gases is up to date + + gases = list() + volume = 0 + + for(var/obj/machinery/atmospherics/normal_member in normal_members) + var/result = normal_member.return_network_air(src) + if(result) gases += result + + for(var/datum/pipeline/line_member in line_members) + gases += line_member.air + + for(var/datum/gas_mixture/air in gases) + volume += air.volume + +/datum/pipe_network/proc/reconcile_air() + equalize_gases(gases) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 7a1f5cce95..e3b91813ba 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -1,241 +1,241 @@ - -/datum/pipeline - var/datum/gas_mixture/air - - var/list/obj/machinery/atmospherics/pipe/members - var/list/obj/machinery/atmospherics/pipe/edges //Used for building networks - - // Nodes that are leaking. Used for A.S. Valves. - var/list/leaks = list() - - var/datum/pipe_network/network - - var/alert_pressure = 0 - -/datum/pipeline/Destroy() - QDEL_NULL(network) - - if(air && air.volume) - temporarily_store_air() - for(var/obj/machinery/atmospherics/pipe/P in members) - P.parent = null - members = null - edges = null - leaks = null - . = ..() - -/datum/pipeline/process()//This use to be called called from the pipe networks - - //Check to see if pressure is within acceptable limits - var/pressure = air.return_pressure() - if(pressure > alert_pressure) - for(var/obj/machinery/atmospherics/pipe/member in members) - if(!member.check_pressure(pressure)) - break //Only delete 1 pipe per process - -/datum/pipeline/proc/temporarily_store_air() - //Update individual gas_mixtures by volume ratio - - for(var/obj/machinery/atmospherics/pipe/member in members) - member.air_temporary = new - member.air_temporary.copy_from(air) - member.air_temporary.volume = member.volume - member.air_temporary.multiply(member.volume / air.volume) - -/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) - air = new - - var/list/possible_expansions = list(base) - members = list(base) - edges = list() - - var/volume = base.volume - base.parent = src - alert_pressure = base.alert_pressure - - if(base.air_temporary) - air = base.air_temporary - base.air_temporary = null - else - air = new - - if(base.leaking) - leaks |= base - - while(possible_expansions.len>0) - for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) - - var/list/result = borderline.pipeline_expansion() - var/edge_check = result.len - - if(result.len>0) - for(var/obj/machinery/atmospherics/pipe/item in result) - - if(item.in_stasis) - continue - - if(!members.Find(item)) - members += item - possible_expansions += item - - volume += item.volume - item.parent = src - - alert_pressure = min(alert_pressure, item.alert_pressure) - - if(item.air_temporary) - air.merge(item.air_temporary) - - if(item.leaking) - leaks |= item - - edge_check-- - - if(edge_check>0) - edges += borderline - - possible_expansions -= borderline - - air.volume = volume - -/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - - if(new_network.line_members.Find(src)) - return 0 - - new_network.line_members += src - - network = new_network - network.leaks |= leaks - - for(var/obj/machinery/atmospherics/pipe/edge in edges) - for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) - if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) - result.network_expand(new_network, edge) - - return 1 - -/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference) - if(!network) - network = new /datum/pipe_network() - network.build_network(src, null) - //technically passing these parameters should not be allowed - //however pipe_network.build_network(..) and pipeline.network_extend(...) - // were setup to properly handle this case - - return network - -/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume) - var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) - air_sample.volume = mingle_volume - - if(istype(target) && target.zone) - //Have to consider preservation of group statuses - var/datum/gas_mixture/turf_copy = new - var/datum/gas_mixture/turf_original = new - - turf_copy.copy_from(target.zone.air) - turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group - turf_original.copy_from(turf_copy) - - equalize_gases(list(air_sample, turf_copy)) - air.merge(air_sample) - - - target.zone.air.remove(turf_original.total_moles) - target.zone.air.merge(turf_copy) - - else - var/datum/gas_mixture/turf_air = target.return_air() - - equalize_gases(list(air_sample, turf_air)) - air.merge(air_sample) - //turf_air already modified by equalize_gases() - - if(network) - network.update = 1 - -/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) - var/total_heat_capacity = air.heat_capacity() - var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - - if(istype(target, /turf/simulated)) - var/turf/simulated/modeled_location = target - - if (modeled_location.special_temperature) - air.temperature += thermal_conductivity * (modeled_location.special_temperature - air.temperature) - if (air.temperature < TCMB) - air.temperature = TCMB - if (network) - network.update = TRUE - - if(modeled_location.blocks_air) - - if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - modeled_location.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - modeled_location.temperature += heat/modeled_location.heat_capacity - - else - var/delta_temperature = 0 - var/sharer_heat_capacity = 0 - - if(modeled_location.zone) - delta_temperature = (air.temperature - modeled_location.zone.air.temperature) - sharer_heat_capacity = modeled_location.zone.air.heat_capacity() - else - delta_temperature = (air.temperature - modeled_location.air.temperature) - sharer_heat_capacity = modeled_location.air.heat_capacity() - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) - - self_temperature_delta = -heat/total_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - else - return 1 - - air.temperature += self_temperature_delta - - if(modeled_location.zone) - modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier - else - modeled_location.air.temperature += sharer_temperature_delta - - - else - if((target.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - target.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - if(network) - network.update = 1 - -//surface must be the surface area in m^2 -/datum/pipeline/proc/radiate_heat_to_space(surface, thermal_conductivity) - var/gas_density = air.total_moles/air.volume - thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio - - // We only get heat from the star on the exposed surface area. - // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. - var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity - - // Previously, the temperature would enter equilibrium at 26C or 294K. - // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. - // It currently should stabilise at 129.6K or -143.6C - heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 - - air.add_thermal_energy(heat_gain) - if(network) - network.update = 1 + +/datum/pipeline + var/datum/gas_mixture/air + + var/list/obj/machinery/atmospherics/pipe/members + var/list/obj/machinery/atmospherics/pipe/edges //Used for building networks + + // Nodes that are leaking. Used for A.S. Valves. + var/list/leaks = list() + + var/datum/pipe_network/network + + var/alert_pressure = 0 + +/datum/pipeline/Destroy() + QDEL_NULL(network) + + if(air && air.volume) + temporarily_store_air() + for(var/obj/machinery/atmospherics/pipe/P in members) + P.parent = null + members = null + edges = null + leaks = null + . = ..() + +/datum/pipeline/process()//This use to be called called from the pipe networks + + //Check to see if pressure is within acceptable limits + var/pressure = air.return_pressure() + if(pressure > alert_pressure) + for(var/obj/machinery/atmospherics/pipe/member in members) + if(!member.check_pressure(pressure)) + break //Only delete 1 pipe per process + +/datum/pipeline/proc/temporarily_store_air() + //Update individual gas_mixtures by volume ratio + + for(var/obj/machinery/atmospherics/pipe/member in members) + member.air_temporary = new + member.air_temporary.copy_from(air) + member.air_temporary.volume = member.volume + member.air_temporary.multiply(member.volume / air.volume) + +/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) + air = new + + var/list/possible_expansions = list(base) + members = list(base) + edges = list() + + var/volume = base.volume + base.parent = src + alert_pressure = base.alert_pressure + + if(base.air_temporary) + air = base.air_temporary + base.air_temporary = null + else + air = new + + if(base.leaking) + leaks |= base + + while(possible_expansions.len>0) + for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) + + var/list/result = borderline.pipeline_expansion() + var/edge_check = result.len + + if(result.len>0) + for(var/obj/machinery/atmospherics/pipe/item in result) + + if(item.in_stasis) + continue + + if(!members.Find(item)) + members += item + possible_expansions += item + + volume += item.volume + item.parent = src + + alert_pressure = min(alert_pressure, item.alert_pressure) + + if(item.air_temporary) + air.merge(item.air_temporary) + + if(item.leaking) + leaks |= item + + edge_check-- + + if(edge_check>0) + edges += borderline + + possible_expansions -= borderline + + air.volume = volume + +/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + + if(new_network.line_members.Find(src)) + return 0 + + new_network.line_members += src + + network = new_network + network.leaks |= leaks + + for(var/obj/machinery/atmospherics/pipe/edge in edges) + for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) + if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) + result.network_expand(new_network, edge) + + return 1 + +/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference) + if(!network) + network = new /datum/pipe_network() + network.build_network(src, null) + //technically passing these parameters should not be allowed + //however pipe_network.build_network(..) and pipeline.network_extend(...) + // were setup to properly handle this case + + return network + +/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume) + var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) + air_sample.volume = mingle_volume + + if(istype(target) && target.zone) + //Have to consider preservation of group statuses + var/datum/gas_mixture/turf_copy = new + var/datum/gas_mixture/turf_original = new + + turf_copy.copy_from(target.zone.air) + turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group + turf_original.copy_from(turf_copy) + + equalize_gases(list(air_sample, turf_copy)) + air.merge(air_sample) + + + target.zone.air.remove(turf_original.total_moles) + target.zone.air.merge(turf_copy) + + else + var/datum/gas_mixture/turf_air = target.return_air() + + equalize_gases(list(air_sample, turf_air)) + air.merge(air_sample) + //turf_air already modified by equalize_gases() + + if(network) + network.update = 1 + +/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) + var/total_heat_capacity = air.heat_capacity() + var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) + + if(istype(target, /turf/simulated)) + var/turf/simulated/modeled_location = target + + if (modeled_location.special_temperature) + air.temperature += thermal_conductivity * (modeled_location.special_temperature - air.temperature) + if (air.temperature < TCMB) + air.temperature = TCMB + if (network) + network.update = TRUE + + if(modeled_location.blocks_air) + + if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - modeled_location.temperature + + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) + + air.temperature -= heat/total_heat_capacity + modeled_location.temperature += heat/modeled_location.heat_capacity + + else + var/delta_temperature = 0 + var/sharer_heat_capacity = 0 + + if(modeled_location.zone) + delta_temperature = (air.temperature - modeled_location.zone.air.temperature) + sharer_heat_capacity = modeled_location.zone.air.heat_capacity() + else + delta_temperature = (air.temperature - modeled_location.air.temperature) + sharer_heat_capacity = modeled_location.air.heat_capacity() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/total_heat_capacity + sharer_temperature_delta = heat/sharer_heat_capacity + else + return 1 + + air.temperature += self_temperature_delta + + if(modeled_location.zone) + modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier + else + modeled_location.air.temperature += sharer_temperature_delta + + + else + if((target.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - target.temperature + + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) + + air.temperature -= heat/total_heat_capacity + if(network) + network.update = 1 + +//surface must be the surface area in m^2 +/datum/pipeline/proc/radiate_heat_to_space(surface, thermal_conductivity) + var/gas_density = air.total_moles/air.volume + thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio + + // We only get heat from the star on the exposed surface area. + // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. + var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity + + // Previously, the temperature would enter equilibrium at 26C or 294K. + // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. + // It currently should stabilise at 129.6K or -143.6C + heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 + + air.add_thermal_energy(heat_gain) + if(network) + network.update = 1 diff --git a/code/ATMOSPHERICS/pipes/tank_vr.dm b/code/ATMOSPHERICS/pipes/tank_vr.dm index 32341ad8f3..b95c87ebd5 100644 --- a/code/ATMOSPHERICS/pipes/tank_vr.dm +++ b/code/ATMOSPHERICS/pipes/tank_vr.dm @@ -1,5 +1,5 @@ -/obj/machinery/atmospherics/pipe/tank/phoron/full - start_pressure = 15000 - -/obj/machinery/atmospherics/pipe/tank/air/full +/obj/machinery/atmospherics/pipe/tank/phoron/full + start_pressure = 15000 + +/obj/machinery/atmospherics/pipe/tank/air/full start_pressure = 15000 \ No newline at end of file diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index 982fda8fa1..086360e5e2 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -1,74 +1,74 @@ -#if DM_VERSION >= 515 -#error PLEASE MAKE SURE THAT 515 IS PROPERLY TESTED AND WORKS. ESPECIALLY THE SAVE-FILES HAVE TO WORK. -#error Additionally: Make sure that the GitHub Workflow was updated to BYOND 515 as well. -#endif - -// These defines are from __513_compatibility.dm -- Please Sort -#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX) -#define TAN(x) tan(x) -#define ATAN2(x, y) arctan(x, y) -#define between(x, y, z) clamp(y, x, z) - -// This file contains defines allowing targeting byond versions newer than the supported - -//Update this whenever you need to take advantage of more recent byond features -#define MIN_COMPILER_VERSION 514 -#define MIN_COMPILER_BUILD 1556 -#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) -//Don't forget to update this part -#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 514.1556 or higher -#endif - -#if (DM_VERSION == 514 && DM_BUILD > 1575 && DM_BUILD <= 1577) -#error Your version of BYOND currently has a crashing issue that will prevent you from running Dream Daemon test servers. -#error We require developers to test their content, so an inability to test means we cannot allow the compile. -#error Please consider downgrading to 514.1575 or lower. -#endif - -// Keep savefile compatibilty at minimum supported level -#if DM_VERSION >= 515 -/savefile/byond_version = MIN_COMPILER_VERSION -#endif - -// 515 split call for external libraries into call_ext -#if DM_VERSION < 515 -#define LIBCALL call -#else -#define LIBCALL call_ext -#endif - -// So we want to have compile time guarantees these methods exist on local type, unfortunately 515 killed the .proc/procname and .verb/verbname syntax so we have to use nameof() -// For the record: GLOBAL_VERB_REF would be useless as verbs can't be global. - -#if DM_VERSION < 515 - -/// Call by name proc references, checks if the proc exists on either this type or as a global proc. -#define PROC_REF(X) (.proc/##X) -/// Call by name verb references, checks if the verb exists on either this type or as a global verb. -#define VERB_REF(X) (.verb/##X) - -/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc -#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X) -/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb -#define TYPE_VERB_REF(TYPE, X) (##TYPE.verb/##X) - -/// Call by name proc reference, checks if the proc is an existing global proc -#define GLOBAL_PROC_REF(X) (/proc/##X) - -#else - -/// Call by name proc references, checks if the proc exists on either this type or as a global proc. -#define PROC_REF(X) (nameof(.proc/##X)) -/// Call by name verb references, checks if the verb exists on either this type or as a global verb. -#define VERB_REF(X) (nameof(.verb/##X)) - -/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc -#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X)) -/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb -#define TYPE_VERB_REF(TYPE, X) (nameof(##TYPE.verb/##X)) - -/// Call by name proc reference, checks if the proc is an existing global proc -#define GLOBAL_PROC_REF(X) (/proc/##X) - -#endif +#if DM_VERSION >= 515 +#error PLEASE MAKE SURE THAT 515 IS PROPERLY TESTED AND WORKS. ESPECIALLY THE SAVE-FILES HAVE TO WORK. +#error Additionally: Make sure that the GitHub Workflow was updated to BYOND 515 as well. +#endif + +// These defines are from __513_compatibility.dm -- Please Sort +#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX) +#define TAN(x) tan(x) +#define ATAN2(x, y) arctan(x, y) +#define between(x, y, z) clamp(y, x, z) + +// This file contains defines allowing targeting byond versions newer than the supported + +//Update this whenever you need to take advantage of more recent byond features +#define MIN_COMPILER_VERSION 514 +#define MIN_COMPILER_BUILD 1556 +#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) +//Don't forget to update this part +#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. +#error You need version 514.1556 or higher +#endif + +#if (DM_VERSION == 514 && DM_BUILD > 1575 && DM_BUILD <= 1577) +#error Your version of BYOND currently has a crashing issue that will prevent you from running Dream Daemon test servers. +#error We require developers to test their content, so an inability to test means we cannot allow the compile. +#error Please consider downgrading to 514.1575 or lower. +#endif + +// Keep savefile compatibilty at minimum supported level +#if DM_VERSION >= 515 +/savefile/byond_version = MIN_COMPILER_VERSION +#endif + +// 515 split call for external libraries into call_ext +#if DM_VERSION < 515 +#define LIBCALL call +#else +#define LIBCALL call_ext +#endif + +// So we want to have compile time guarantees these methods exist on local type, unfortunately 515 killed the .proc/procname and .verb/verbname syntax so we have to use nameof() +// For the record: GLOBAL_VERB_REF would be useless as verbs can't be global. + +#if DM_VERSION < 515 + +/// Call by name proc references, checks if the proc exists on either this type or as a global proc. +#define PROC_REF(X) (.proc/##X) +/// Call by name verb references, checks if the verb exists on either this type or as a global verb. +#define VERB_REF(X) (.verb/##X) + +/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc +#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X) +/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb +#define TYPE_VERB_REF(TYPE, X) (##TYPE.verb/##X) + +/// Call by name proc reference, checks if the proc is an existing global proc +#define GLOBAL_PROC_REF(X) (/proc/##X) + +#else + +/// Call by name proc references, checks if the proc exists on either this type or as a global proc. +#define PROC_REF(X) (nameof(.proc/##X)) +/// Call by name verb references, checks if the verb exists on either this type or as a global verb. +#define VERB_REF(X) (nameof(.verb/##X)) + +/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc +#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X)) +/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb +#define TYPE_VERB_REF(TYPE, X) (nameof(##TYPE.verb/##X)) + +/// Call by name proc reference, checks if the proc is an existing global proc +#define GLOBAL_PROC_REF(X) (/proc/##X) + +#endif diff --git a/code/__defines/_protect.dm b/code/__defines/_protect.dm index b10a6264bd..b503155fae 100644 --- a/code/__defines/_protect.dm +++ b/code/__defines/_protect.dm @@ -1,11 +1,11 @@ -///Protects a datum from being VV'd -#define GENERAL_PROTECT_DATUM(Path)\ -##Path/can_vv_get(var_name){\ - return FALSE;\ -}\ -##Path/vv_edit_var(var_name, var_value){\ - return FALSE;\ -}\ -##Path/CanProcCall(procname){\ - return FALSE;\ +///Protects a datum from being VV'd +#define GENERAL_PROTECT_DATUM(Path)\ +##Path/can_vv_get(var_name){\ + return FALSE;\ +}\ +##Path/vv_edit_var(var_name, var_value){\ + return FALSE;\ +}\ +##Path/CanProcCall(procname){\ + return FALSE;\ } \ No newline at end of file diff --git a/code/__defines/belly_modes_ch.dm b/code/__defines/belly_modes_ch.dm index cda69b0e46..78a030e53b 100644 --- a/code/__defines/belly_modes_ch.dm +++ b/code/__defines/belly_modes_ch.dm @@ -1,42 +1,42 @@ -//CHOMP belly modes - - - -//Belly Reagents mode flags -#define DM_FLAG_REAGENTSNUTRI 0x1 -#define DM_FLAG_REAGENTSDIGEST 0x2 -#define DM_FLAG_REAGENTSABSORB 0x4 -#define DM_FLAG_REAGENTSDRAIN 0x8 - -//Vore Sprite Flags -#define DM_FLAG_VORESPRITE_BELLY 0x1 -#define DM_FLAG_VORESPRITE_TAIL 0x2 -#define DM_FLAG_VORESPRITE_MARKING 0x4 -#define DM_FLAG_VORESPRITE_ARTICLE 0x8 - -//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies. -#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx" - -//Auto-transfer mob flags -#define AT_FLAG_CREATURES 0x1 -#define AT_FLAG_ABSORBED 0x2 -#define AT_FLAG_CARBON 0x4 -#define AT_FLAG_SILICON 0x8 -#define AT_FLAG_MOBS 0x10 -#define AT_FLAG_ANIMALS 0x20 -#define AT_FLAG_MICE 0x40 -#define AT_FLAG_DEAD 0x80 -#define AT_FLAG_CANDIGEST 0x100 -#define AT_FLAG_CANABSORB 0x200 -#define AT_FLAG_HEALTHY 0x400 - -//Auto-transfer item flags -#define AT_FLAG_ITEMS 0x1 -#define AT_FLAG_TRASH 0x2 -#define AT_FLAG_EGGS 0x4 -#define AT_FLAG_REMAINS 0x8 -#define AT_FLAG_INDIGESTIBLE 0x10 -#define AT_FLAG_RECYCLABLE 0x20 -#define AT_FLAG_ORES 0x40 -#define AT_FLAG_CLOTHES 0x80 -#define AT_FLAG_FOOD 0x100 +//CHOMP belly modes + + + +//Belly Reagents mode flags +#define DM_FLAG_REAGENTSNUTRI 0x1 +#define DM_FLAG_REAGENTSDIGEST 0x2 +#define DM_FLAG_REAGENTSABSORB 0x4 +#define DM_FLAG_REAGENTSDRAIN 0x8 + +//Vore Sprite Flags +#define DM_FLAG_VORESPRITE_BELLY 0x1 +#define DM_FLAG_VORESPRITE_TAIL 0x2 +#define DM_FLAG_VORESPRITE_MARKING 0x4 +#define DM_FLAG_VORESPRITE_ARTICLE 0x8 + +//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies. +#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx" + +//Auto-transfer mob flags +#define AT_FLAG_CREATURES 0x1 +#define AT_FLAG_ABSORBED 0x2 +#define AT_FLAG_CARBON 0x4 +#define AT_FLAG_SILICON 0x8 +#define AT_FLAG_MOBS 0x10 +#define AT_FLAG_ANIMALS 0x20 +#define AT_FLAG_MICE 0x40 +#define AT_FLAG_DEAD 0x80 +#define AT_FLAG_CANDIGEST 0x100 +#define AT_FLAG_CANABSORB 0x200 +#define AT_FLAG_HEALTHY 0x400 + +//Auto-transfer item flags +#define AT_FLAG_ITEMS 0x1 +#define AT_FLAG_TRASH 0x2 +#define AT_FLAG_EGGS 0x4 +#define AT_FLAG_REMAINS 0x8 +#define AT_FLAG_INDIGESTIBLE 0x10 +#define AT_FLAG_RECYCLABLE 0x20 +#define AT_FLAG_ORES 0x40 +#define AT_FLAG_CLOTHES 0x80 +#define AT_FLAG_FOOD 0x100 diff --git a/code/__defines/color.dm b/code/__defines/color.dm index 8f8332d768..baae616b34 100644 --- a/code/__defines/color.dm +++ b/code/__defines/color.dm @@ -1,207 +1,207 @@ -// BYOND lower-cases color values, and thus we do so as well to ensure atom.color == COLOR_X will work correctly -#define COLOR_BLACK "#000000" -#define COLOR_NAVY "#000080" -#define COLOR_NAVY_BLUE "#000080" -#define COLOR_GREEN "#008000" -#define COLOR_DARK_GRAY "#404040" -#define COLOR_MAROON "#800000" -#define COLOR_PURPLE "#800080" -#define COLOR_VIOLET "#9933ff" -#define COLOR_OLIVE "#52613b" -#define COLOR_BROWN_ORANGE "#824b28" -#define COLOR_DARK_ORANGE "#b95a00" -#define COLOR_GRAY40 "#666666" -#define COLOR_GRAY20 "#333333" -#define COLOR_GRAY15 "#151515" -#define COLOR_SEDONA "#cc6600" -#define COLOR_DARK_BROWN "#917448" -#define COLOR_BLUE "#0000ff" -#define COLOR_DEEP_SKY_BLUE "#00e1ff" -#define COLOR_LIME "#00ff00" -#define COLOR_CYAN "#00ffff" -#define COLOR_TEAL "#33cccc" -#define COLOR_RED "#ff0000" -#define COLOR_PINK "#ff00ff" -#define COLOR_PALE_PINK "#bf89ba" -#define COLOR_ORANGE "#ff9900" -#define COLOR_YELLOW "#ffff00" -#define COLOR_YELLOW_GRAY "#c9a344" -#define COLOR_PALE_YELLOW "#c1bb7a" -#define COLOR_WARM_YELLOW "#b3863c" -#define COLOR_GRAY "#808080" -#define COLOR_RED_GRAY "#aa5f61" -#define COLOR_BROWN "#b19664" -#define COLOR_GREEN_GRAY "#8daf6a" -#define COLOR_DARK_GREEN_GRAY "#54654c" -#define COLOR_BLUE_GRAY "#6a97b0" -#define COLOR_DARK_BLUE_GRAY "#3e4855" -#define COLOR_SURGERY_BLUE "#e0f2f6" -#define COLOR_SUN "#ec8b2f" -#define COLOR_PURPLE_GRAY "#a2819e" -#define COLOR_BLUE_LIGHT "#33ccff" -#define COLOR_RED_LIGHT "#ff3333" -#define COLOR_BEIGE "#ceb689" -#define COLOR_BABY_BLUE "#89cff0" -#define COLOR_PALE_GREEN_GRAY "#aed18b" -#define COLOR_PALE_RED_GRAY "#cc9090" -#define COLOR_PALE_PURPLE_GRAY "#bda2ba" -#define COLOR_PALE_BLUE_GRAY "#8bbbd5" -#define COLOR_LUMINOL "#66ffff" -#define COLOR_SILVER "#c0c0c0" -#define COLOR_GRAY80 "#cccccc" -#define COLOR_OFF_WHITE "#eeeeee" -#define COLOR_WHITE "#ffffff" -#define COLOR_GOLD "#ffcc33" -#define COLOR_CLOSET_GOLD "#6d6133" -#define COLOR_NT_RED "#9d2300" -#define COLOR_BOTTLE_GREEN "#1f6b4f" -#define COLOR_PALE_BTL_GREEN "#57967f" -#define COLOR_GUNMETAL "#545c68" -#define COLOR_WALL_GUNMETAL "#353a42" -#define COLOR_STEEL "#a8b0b2" -#define COLOR_MUZZLE_FLASH "#ffffb2" -#define COLOR_CHESTNUT "#996633" -#define COLOR_BEASTY_BROWN "#663300" -#define COLOR_WHEAT "#ffff99" -#define COLOR_CYAN_BLUE "#3366cc" -#define COLOR_LIGHT_CYAN "#66ccff" -#define COLOR_PAKISTAN_GREEN "#006600" -#define COLOR_HULL "#436b8e" -#define COLOR_AMBER "#ffbf00" -#define COLOR_COMMAND_BLUE "#46698c" -#define COLOR_SKY_BLUE "#5ca1cc" -#define COLOR_PALE_ORANGE "#b88a3b" -#define COLOR_CIVIE_GREEN "#b7f27d" -#define COLOR_TITANIUM "#d1e6e3" -#define COLOR_DARK_GUNMETAL "#4c535b" -#define COLOR_BRONZE "#8c7853" -#define COLOR_BRASS "#b99d71" -#define COLOR_INDIGO "#4b0082" -#define COLOR_ALUMINIUM "#bbbbbb" -#define COLOR_CRYSTAL "#00c8a5" -#define COLOR_ASTEROID_ROCK "#735555" -#define COLOR_NULLGLASS "#ff6088" -#define COLOR_DIAMOND "#d8d4ea" -#define COLOR_LIGHT_PINK "#ffbaf9" -#define COLOR_LIGHT_RED "#ff4f4f" -#define COLOR_PALE_MAROON "#6e2121" -#define COLOR_LIGHT_GREEN "#00cf00" -#define COLOR_SALAD_GREEN "#67e067" -#define COLOR_DARK_GOLD "#ab9029" -#define COLOR_DARK_TEAL "#2db5b5" -#define COLOR_LIGHT_VIOLET "#e7bfff" -#define COLOR_SAN_MARINO_BLUE "#4b75ab" -#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A" - -#define PIPE_COLOR_GREY "#808080" -#define PIPE_COLOR_RED "#ff0000" -#define PIPE_COLOR_BLUE "#0000ff" -#define PIPE_COLOR_CYAN "#00ffff" -#define PIPE_COLOR_GREEN "#00ff00" -#define PIPE_COLOR_YELLOW "#ffcc00" -#define PIPE_COLOR_BLACK "#444444" -#define PIPE_COLOR_ORANGE "#b95a00" -#define PIPE_COLOR_WHITE "#ffffff" -#define PIPE_COLOR_PURPLE "#5c1ec0" - -#define COMMS_COLOR_DEFAULT "#ff00ff" -#define COMMS_COLOR_ENTERTAIN "#666666" -#define COMMS_COLOR_AI "#ff00ff" -#define COMMS_COLOR_COMMON "#408010" -#define COMMS_COLOR_SERVICE "#709b00" -#define COMMS_COLOR_SUPPLY "#7f6539" -#define COMMS_COLOR_SCIENCE "#993399" -#define COMMS_COLOR_MEDICAL "#009190" -#define COMMS_COLOR_MEDICAL_I "#509190" -#define COMMS_COLOR_EXPLORER "#929820" -#define COMMS_COLOR_ENGINEER "#a66300" -#define COMMS_COLOR_SECURITY "#930000" -#define COMMS_COLOR_SECURITY_I "#935050" -#define COMMS_COLOR_COMMAND "#204090" -#define COMMS_COLOR_CENTCOMM "#5c5c7c" -#define COMMS_COLOR_SYNDICATE "#6d3f40" -#define COMMS_COLOR_SKRELL "#7331c4" - -#define WOOD_COLOR_GENERIC "#d5a66e" -#define WOOD_COLOR_RICH "#792f27" -#define WOOD_COLOR_PALE "#d2bc9d" -#define WOOD_COLOR_PALE2 "#e6d2ba" -#define WOOD_COLOR_BLACK "#332521" -#define WOOD_COLOR_CHOCOLATE "#543c30" -#define WOOD_COLOR_YELLOW "#e3994e" - -#define GLASS_COLOR "#74c1ee" -#define GLASS_COLOR_PHORON "#7c3a9a" -#define GLASS_COLOR_TINTED "#222222" -#define GLASS_COLOR_FROSTED "#ffffff" - -#define COLOR_BLOOD_HUMAN "#a10808" - -//Colors defines used by e-sword lighting -#define COLOR_SABER_BLUE "#40ceff" -#define COLOR_SABER_RED "#ff0000" //In case someone wants to tweak COLOR_RED, since COLOR_GREEN is not #00ff00 -#define COLOR_SABER_GREEN "#00ff00" -#define COLOR_SABER_PURPLE "#6800f4" -#define COLOR_SABER_SKRELL "#6600cc" -#define COLOR_SABER_AXE "#00ccff" -#define COLOR_SABER_CUTLASS "#ff0033" - -//Color defines used by the assembly detailer. -#define COLOR_ASSEMBLY_BLACK "#545454" -#define COLOR_ASSEMBLY_BGRAY "#9497AB" -#define COLOR_ASSEMBLY_WHITE "#E2E2E2" -#define COLOR_ASSEMBLY_RED "#CC4242" -#define COLOR_ASSEMBLY_ORANGE "#E39751" -#define COLOR_ASSEMBLY_BEIGE "#AF9366" -#define COLOR_ASSEMBLY_BROWN "#97670E" -#define COLOR_ASSEMBLY_GOLD "#AA9100" -#define COLOR_ASSEMBLY_YELLOW "#CECA2B" -#define COLOR_ASSEMBLY_GURKHA "#999875" -#define COLOR_ASSEMBLY_LGREEN "#789876" -#define COLOR_ASSEMBLY_GREEN "#44843C" -#define COLOR_ASSEMBLY_LBLUE "#5D99BE" -#define COLOR_ASSEMBLY_BLUE "#38559E" -#define COLOR_ASSEMBLY_PURPLE "#6F6192" -#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4" - -// Discord requires colors to be in decimal instead of hexadecimal. -#define COLOR_WEBHOOK_DEFAULT 0x8bbbd5 // "#8bbbd5" -#define COLOR_WEBHOOK_GOOD 0x2ECC71 // "#2ECC71" -#define COLOR_WEBHOOK_POOR 0xE67E22 // "#E67E22" -#define COLOR_WEBHOOK_BAD 0xE74C3C // "#E74C3C" - -//Some defines to generalise colours used in lighting. -//Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated -#define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130) -#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100) -#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) - -#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175) -#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225) -#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255) -#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248) -#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225) -#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) -#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50) -#define LIGHT_COLOR_ORANGE "#FA9632" //Mostly pure orange. rgb(250, 150, 50) -#define LIGHT_COLOR_PURPLE "#952CF4" //Light Purple. rgb(149, 44, 244) -#define LIGHT_COLOR_LAVENDER "#9B51FF" //Less-saturated light purple. rgb(155, 81, 255) - -//These ones aren't a direct colour like the ones above, because nothing would fit -#define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) -#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) -#define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) -#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) -#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) -#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) - -//Lighting values used by the station lights -#define LIGHT_COLOR_FLUORESCENT_TUBE "#E0EFFF" -#define LIGHT_COLOR_FLUORESCENT_FLASHLIGHT "#CDDDFF" -#define LIGHT_COLOR_INCANDESCENT_TUBE "#fffed9" -#define LIGHT_COLOR_INCANDESCENT_BULB "#ffe7ce" -#define LIGHT_COLOR_INCANDESCENT_FLASHLIGHT "#FFCC66" -#define LIGHT_COLOR_NIGHTSHIFT "#EFCC86" - -//Fake ambient occlusion filter -#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, offset=3, color="#04080F80") +// BYOND lower-cases color values, and thus we do so as well to ensure atom.color == COLOR_X will work correctly +#define COLOR_BLACK "#000000" +#define COLOR_NAVY "#000080" +#define COLOR_NAVY_BLUE "#000080" +#define COLOR_GREEN "#008000" +#define COLOR_DARK_GRAY "#404040" +#define COLOR_MAROON "#800000" +#define COLOR_PURPLE "#800080" +#define COLOR_VIOLET "#9933ff" +#define COLOR_OLIVE "#52613b" +#define COLOR_BROWN_ORANGE "#824b28" +#define COLOR_DARK_ORANGE "#b95a00" +#define COLOR_GRAY40 "#666666" +#define COLOR_GRAY20 "#333333" +#define COLOR_GRAY15 "#151515" +#define COLOR_SEDONA "#cc6600" +#define COLOR_DARK_BROWN "#917448" +#define COLOR_BLUE "#0000ff" +#define COLOR_DEEP_SKY_BLUE "#00e1ff" +#define COLOR_LIME "#00ff00" +#define COLOR_CYAN "#00ffff" +#define COLOR_TEAL "#33cccc" +#define COLOR_RED "#ff0000" +#define COLOR_PINK "#ff00ff" +#define COLOR_PALE_PINK "#bf89ba" +#define COLOR_ORANGE "#ff9900" +#define COLOR_YELLOW "#ffff00" +#define COLOR_YELLOW_GRAY "#c9a344" +#define COLOR_PALE_YELLOW "#c1bb7a" +#define COLOR_WARM_YELLOW "#b3863c" +#define COLOR_GRAY "#808080" +#define COLOR_RED_GRAY "#aa5f61" +#define COLOR_BROWN "#b19664" +#define COLOR_GREEN_GRAY "#8daf6a" +#define COLOR_DARK_GREEN_GRAY "#54654c" +#define COLOR_BLUE_GRAY "#6a97b0" +#define COLOR_DARK_BLUE_GRAY "#3e4855" +#define COLOR_SURGERY_BLUE "#e0f2f6" +#define COLOR_SUN "#ec8b2f" +#define COLOR_PURPLE_GRAY "#a2819e" +#define COLOR_BLUE_LIGHT "#33ccff" +#define COLOR_RED_LIGHT "#ff3333" +#define COLOR_BEIGE "#ceb689" +#define COLOR_BABY_BLUE "#89cff0" +#define COLOR_PALE_GREEN_GRAY "#aed18b" +#define COLOR_PALE_RED_GRAY "#cc9090" +#define COLOR_PALE_PURPLE_GRAY "#bda2ba" +#define COLOR_PALE_BLUE_GRAY "#8bbbd5" +#define COLOR_LUMINOL "#66ffff" +#define COLOR_SILVER "#c0c0c0" +#define COLOR_GRAY80 "#cccccc" +#define COLOR_OFF_WHITE "#eeeeee" +#define COLOR_WHITE "#ffffff" +#define COLOR_GOLD "#ffcc33" +#define COLOR_CLOSET_GOLD "#6d6133" +#define COLOR_NT_RED "#9d2300" +#define COLOR_BOTTLE_GREEN "#1f6b4f" +#define COLOR_PALE_BTL_GREEN "#57967f" +#define COLOR_GUNMETAL "#545c68" +#define COLOR_WALL_GUNMETAL "#353a42" +#define COLOR_STEEL "#a8b0b2" +#define COLOR_MUZZLE_FLASH "#ffffb2" +#define COLOR_CHESTNUT "#996633" +#define COLOR_BEASTY_BROWN "#663300" +#define COLOR_WHEAT "#ffff99" +#define COLOR_CYAN_BLUE "#3366cc" +#define COLOR_LIGHT_CYAN "#66ccff" +#define COLOR_PAKISTAN_GREEN "#006600" +#define COLOR_HULL "#436b8e" +#define COLOR_AMBER "#ffbf00" +#define COLOR_COMMAND_BLUE "#46698c" +#define COLOR_SKY_BLUE "#5ca1cc" +#define COLOR_PALE_ORANGE "#b88a3b" +#define COLOR_CIVIE_GREEN "#b7f27d" +#define COLOR_TITANIUM "#d1e6e3" +#define COLOR_DARK_GUNMETAL "#4c535b" +#define COLOR_BRONZE "#8c7853" +#define COLOR_BRASS "#b99d71" +#define COLOR_INDIGO "#4b0082" +#define COLOR_ALUMINIUM "#bbbbbb" +#define COLOR_CRYSTAL "#00c8a5" +#define COLOR_ASTEROID_ROCK "#735555" +#define COLOR_NULLGLASS "#ff6088" +#define COLOR_DIAMOND "#d8d4ea" +#define COLOR_LIGHT_PINK "#ffbaf9" +#define COLOR_LIGHT_RED "#ff4f4f" +#define COLOR_PALE_MAROON "#6e2121" +#define COLOR_LIGHT_GREEN "#00cf00" +#define COLOR_SALAD_GREEN "#67e067" +#define COLOR_DARK_GOLD "#ab9029" +#define COLOR_DARK_TEAL "#2db5b5" +#define COLOR_LIGHT_VIOLET "#e7bfff" +#define COLOR_SAN_MARINO_BLUE "#4b75ab" +#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A" + +#define PIPE_COLOR_GREY "#808080" +#define PIPE_COLOR_RED "#ff0000" +#define PIPE_COLOR_BLUE "#0000ff" +#define PIPE_COLOR_CYAN "#00ffff" +#define PIPE_COLOR_GREEN "#00ff00" +#define PIPE_COLOR_YELLOW "#ffcc00" +#define PIPE_COLOR_BLACK "#444444" +#define PIPE_COLOR_ORANGE "#b95a00" +#define PIPE_COLOR_WHITE "#ffffff" +#define PIPE_COLOR_PURPLE "#5c1ec0" + +#define COMMS_COLOR_DEFAULT "#ff00ff" +#define COMMS_COLOR_ENTERTAIN "#666666" +#define COMMS_COLOR_AI "#ff00ff" +#define COMMS_COLOR_COMMON "#408010" +#define COMMS_COLOR_SERVICE "#709b00" +#define COMMS_COLOR_SUPPLY "#7f6539" +#define COMMS_COLOR_SCIENCE "#993399" +#define COMMS_COLOR_MEDICAL "#009190" +#define COMMS_COLOR_MEDICAL_I "#509190" +#define COMMS_COLOR_EXPLORER "#929820" +#define COMMS_COLOR_ENGINEER "#a66300" +#define COMMS_COLOR_SECURITY "#930000" +#define COMMS_COLOR_SECURITY_I "#935050" +#define COMMS_COLOR_COMMAND "#204090" +#define COMMS_COLOR_CENTCOMM "#5c5c7c" +#define COMMS_COLOR_SYNDICATE "#6d3f40" +#define COMMS_COLOR_SKRELL "#7331c4" + +#define WOOD_COLOR_GENERIC "#d5a66e" +#define WOOD_COLOR_RICH "#792f27" +#define WOOD_COLOR_PALE "#d2bc9d" +#define WOOD_COLOR_PALE2 "#e6d2ba" +#define WOOD_COLOR_BLACK "#332521" +#define WOOD_COLOR_CHOCOLATE "#543c30" +#define WOOD_COLOR_YELLOW "#e3994e" + +#define GLASS_COLOR "#74c1ee" +#define GLASS_COLOR_PHORON "#7c3a9a" +#define GLASS_COLOR_TINTED "#222222" +#define GLASS_COLOR_FROSTED "#ffffff" + +#define COLOR_BLOOD_HUMAN "#a10808" + +//Colors defines used by e-sword lighting +#define COLOR_SABER_BLUE "#40ceff" +#define COLOR_SABER_RED "#ff0000" //In case someone wants to tweak COLOR_RED, since COLOR_GREEN is not #00ff00 +#define COLOR_SABER_GREEN "#00ff00" +#define COLOR_SABER_PURPLE "#6800f4" +#define COLOR_SABER_SKRELL "#6600cc" +#define COLOR_SABER_AXE "#00ccff" +#define COLOR_SABER_CUTLASS "#ff0033" + +//Color defines used by the assembly detailer. +#define COLOR_ASSEMBLY_BLACK "#545454" +#define COLOR_ASSEMBLY_BGRAY "#9497AB" +#define COLOR_ASSEMBLY_WHITE "#E2E2E2" +#define COLOR_ASSEMBLY_RED "#CC4242" +#define COLOR_ASSEMBLY_ORANGE "#E39751" +#define COLOR_ASSEMBLY_BEIGE "#AF9366" +#define COLOR_ASSEMBLY_BROWN "#97670E" +#define COLOR_ASSEMBLY_GOLD "#AA9100" +#define COLOR_ASSEMBLY_YELLOW "#CECA2B" +#define COLOR_ASSEMBLY_GURKHA "#999875" +#define COLOR_ASSEMBLY_LGREEN "#789876" +#define COLOR_ASSEMBLY_GREEN "#44843C" +#define COLOR_ASSEMBLY_LBLUE "#5D99BE" +#define COLOR_ASSEMBLY_BLUE "#38559E" +#define COLOR_ASSEMBLY_PURPLE "#6F6192" +#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4" + +// Discord requires colors to be in decimal instead of hexadecimal. +#define COLOR_WEBHOOK_DEFAULT 0x8bbbd5 // "#8bbbd5" +#define COLOR_WEBHOOK_GOOD 0x2ECC71 // "#2ECC71" +#define COLOR_WEBHOOK_POOR 0xE67E22 // "#E67E22" +#define COLOR_WEBHOOK_BAD 0xE74C3C // "#E74C3C" + +//Some defines to generalise colours used in lighting. +//Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated +#define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130) +#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100) +#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) + +#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175) +#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225) +#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255) +#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248) +#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225) +#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) +#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50) +#define LIGHT_COLOR_ORANGE "#FA9632" //Mostly pure orange. rgb(250, 150, 50) +#define LIGHT_COLOR_PURPLE "#952CF4" //Light Purple. rgb(149, 44, 244) +#define LIGHT_COLOR_LAVENDER "#9B51FF" //Less-saturated light purple. rgb(155, 81, 255) + +//These ones aren't a direct colour like the ones above, because nothing would fit +#define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) +#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) +#define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) +#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) +#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) +#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) + +//Lighting values used by the station lights +#define LIGHT_COLOR_FLUORESCENT_TUBE "#E0EFFF" +#define LIGHT_COLOR_FLUORESCENT_FLASHLIGHT "#CDDDFF" +#define LIGHT_COLOR_INCANDESCENT_TUBE "#fffed9" +#define LIGHT_COLOR_INCANDESCENT_BULB "#ffe7ce" +#define LIGHT_COLOR_INCANDESCENT_FLASHLIGHT "#FFCC66" +#define LIGHT_COLOR_NIGHTSHIFT "#EFCC86" + +//Fake ambient occlusion filter +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, offset=3, color="#04080F80") diff --git a/code/__defines/integrated_circuits.dm b/code/__defines/integrated_circuits.dm index 03cfa358e3..d8b246f0cf 100644 --- a/code/__defines/integrated_circuits.dm +++ b/code/__defines/integrated_circuits.dm @@ -1,4 +1,4 @@ -// Methods of obtaining a circuit. -#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer. -#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it. +// Methods of obtaining a circuit. +#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer. +#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it. #define IC_SPAWN_ILLEGAL 3 // If the circuit design will be available if upgrading the IC printer illegally. \ No newline at end of file diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index bf85454876..9336ac5f78 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -1,119 +1,119 @@ -///Object doesn't use any of the light systems. Should be changed to add a light source to the object. -#define NO_LIGHT_SUPPORT 0 -///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 -///Light made by masking the lighting darkness plane, and is directional. -#define MOVABLE_LIGHT_DIRECTIONAL 3 - -///Is a movable light source attached to another movable (its loc), meaning that the lighting component should go one level deeper. -#define LIGHT_ATTACHED (1<<0) - -//Bay lighting engine shit, not in /code/modules/lighting because BYOND is being shit about it -/// frequency, in 1/10ths of a second, of the lighting process -#define LIGHTING_INTERVAL 5 - -#define MINIMUM_USEFUL_LIGHT_RANGE 1.4 - -/// type of falloff to use for lighting; 1 for circular, 2 for square -#define LIGHTING_FALLOFF 1 -/// use lambertian shading for light sources -#define LIGHTING_LAMBERTIAN 0 -/// height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone -#define LIGHTING_HEIGHT 1 -/// Value used to round lumcounts, values smaller than 1/129 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. -#define LIGHTING_ROUND_VALUE (1 / 64) - -/// icon used for lighting shading effects -#define LIGHTING_ICON 'icons/effects/lighting_object.dmi' - -/// If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting objects. -/// Set to zero to disable soft lighting. Luminosity changes then work if it's lit at all. -#define LIGHTING_SOFT_THRESHOLD 0 - -/// If I were you I'd leave this alone. -#define LIGHTING_BASE_MATRIX \ - list \ - ( \ - 1, 1, 1, 0, \ - 1, 1, 1, 0, \ - 1, 1, 1, 0, \ - 1, 1, 1, 0, \ - 0, 0, 0, 1 \ - ) \ - -///How many tiles standard fires glow. -#define LIGHT_RANGE_FIRE 3 - -#define LIGHTING_PLANE_ALPHA_VISIBLE 255 -#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245 -#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 -/// For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. -#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 -#define LIGHTING_PLANE_ALPHA_INVISIBLE 0 - -//lighting area defines -/// dynamic lighting disabled (area stays at full brightness) -#define DYNAMIC_LIGHTING_DISABLED 0 -/// dynamic lighting enabled -#define DYNAMIC_LIGHTING_ENABLED 1 -/// dynamic lighting enabled even if the area doesn't require power -#define DYNAMIC_LIGHTING_FORCED 2 -/// dynamic lighting enabled only if starlight is. -#define DYNAMIC_LIGHTING_IFSTARLIGHT 3 -#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting - - -//code assumes higher numbers override lower numbers. -#define LIGHTING_NO_UPDATE 0 -#define LIGHTING_VIS_UPDATE 1 -#define LIGHTING_CHECK_UPDATE 2 -#define LIGHTING_FORCE_UPDATE 3 - -#define FLASH_LIGHT_DURATION 2 -#define FLASH_LIGHT_POWER 3 -#define FLASH_LIGHT_RANGE 3.8 - -// Emissive blocking. -/// Uses vis_overlays to leverage caching so that very few new items need to be made for the overlay. For anything that doesn't change outline or opaque area much or at all. -#define EMISSIVE_BLOCK_GENERIC 1 -/// Uses a dedicated render_target object to copy the entire appearance in real time to the blocking layer. For things that can change in appearance a lot from the base state, like humans. -#define EMISSIVE_BLOCK_UNIQUE 2 - -/// The color matrix applied to all emissive overlays. Should be solely dependent on alpha and not have RGB overlap with [EM_BLOCK_COLOR]. -#define EMISSIVE_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 1,1,1,0) -/// A globaly cached version of [EMISSIVE_COLOR] for quick access. -GLOBAL_LIST_INIT(emissive_color, EMISSIVE_COLOR) -/// The color matrix applied to all emissive blockers. Should be solely dependent on alpha and not have RGB overlap with [EMISSIVE_COLOR]. -#define EM_BLOCK_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) -/// A globaly cached version of [EM_BLOCK_COLOR] for quick access. -GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) -/// The color matrix used to mask out emissive blockers on the emissive plane. Alpha should default to zero, be solely dependent on the RGB value of [EMISSIVE_COLOR], and be independant of the RGB value of [EM_BLOCK_COLOR]. -#define EM_MASK_MATRIX list(0,0,0,1/3, 0,0,0,1/3, 0,0,0,1/3, 0,0,0,0, 1,1,1,0) -/// A globaly cached version of [EM_MASK_MATRIX] for quick access. -GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) - -/// Returns the red part of a #RRGGBB hex sequence as number -#define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4)) - -/// Returns the green part of a #RRGGBB hex sequence as number -#define GETGREENPART(hexa) hex2num(copytext(hexa, 4, 6)) - -/// Returns the blue part of a #RRGGBB hex sequence as number -#define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8)) - -/// Parse the hexadecimal color into lumcounts of each perspective. -#define PARSE_LIGHT_COLOR(source) \ -do { \ - if (source.light_color != COLOR_WHITE) { \ - var/__light_color = source.light_color; \ - source.lum_r = GETREDPART(__light_color) / 255; \ - source.lum_g = GETGREENPART(__light_color) / 255; \ - source.lum_b = GETBLUEPART(__light_color) / 255; \ - } else { \ - source.lum_r = 1; \ - source.lum_g = 1; \ - source.lum_b = 1; \ - }; \ -} while (FALSE) +///Object doesn't use any of the light systems. Should be changed to add a light source to the object. +#define NO_LIGHT_SUPPORT 0 +///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 +///Light made by masking the lighting darkness plane, and is directional. +#define MOVABLE_LIGHT_DIRECTIONAL 3 + +///Is a movable light source attached to another movable (its loc), meaning that the lighting component should go one level deeper. +#define LIGHT_ATTACHED (1<<0) + +//Bay lighting engine shit, not in /code/modules/lighting because BYOND is being shit about it +/// frequency, in 1/10ths of a second, of the lighting process +#define LIGHTING_INTERVAL 5 + +#define MINIMUM_USEFUL_LIGHT_RANGE 1.4 + +/// type of falloff to use for lighting; 1 for circular, 2 for square +#define LIGHTING_FALLOFF 1 +/// use lambertian shading for light sources +#define LIGHTING_LAMBERTIAN 0 +/// height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +#define LIGHTING_HEIGHT 1 +/// Value used to round lumcounts, values smaller than 1/129 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_ROUND_VALUE (1 / 64) + +/// icon used for lighting shading effects +#define LIGHTING_ICON 'icons/effects/lighting_object.dmi' + +/// If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting objects. +/// Set to zero to disable soft lighting. Luminosity changes then work if it's lit at all. +#define LIGHTING_SOFT_THRESHOLD 0 + +/// If I were you I'd leave this alone. +#define LIGHTING_BASE_MATRIX \ + list \ + ( \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 0, 0, 0, 1 \ + ) \ + +///How many tiles standard fires glow. +#define LIGHT_RANGE_FIRE 3 + +#define LIGHTING_PLANE_ALPHA_VISIBLE 255 +#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245 +#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 +/// For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. +#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 +#define LIGHTING_PLANE_ALPHA_INVISIBLE 0 + +//lighting area defines +/// dynamic lighting disabled (area stays at full brightness) +#define DYNAMIC_LIGHTING_DISABLED 0 +/// dynamic lighting enabled +#define DYNAMIC_LIGHTING_ENABLED 1 +/// dynamic lighting enabled even if the area doesn't require power +#define DYNAMIC_LIGHTING_FORCED 2 +/// dynamic lighting enabled only if starlight is. +#define DYNAMIC_LIGHTING_IFSTARLIGHT 3 +#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting + + +//code assumes higher numbers override lower numbers. +#define LIGHTING_NO_UPDATE 0 +#define LIGHTING_VIS_UPDATE 1 +#define LIGHTING_CHECK_UPDATE 2 +#define LIGHTING_FORCE_UPDATE 3 + +#define FLASH_LIGHT_DURATION 2 +#define FLASH_LIGHT_POWER 3 +#define FLASH_LIGHT_RANGE 3.8 + +// Emissive blocking. +/// Uses vis_overlays to leverage caching so that very few new items need to be made for the overlay. For anything that doesn't change outline or opaque area much or at all. +#define EMISSIVE_BLOCK_GENERIC 1 +/// Uses a dedicated render_target object to copy the entire appearance in real time to the blocking layer. For things that can change in appearance a lot from the base state, like humans. +#define EMISSIVE_BLOCK_UNIQUE 2 + +/// The color matrix applied to all emissive overlays. Should be solely dependent on alpha and not have RGB overlap with [EM_BLOCK_COLOR]. +#define EMISSIVE_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 1,1,1,0) +/// A globaly cached version of [EMISSIVE_COLOR] for quick access. +GLOBAL_LIST_INIT(emissive_color, EMISSIVE_COLOR) +/// The color matrix applied to all emissive blockers. Should be solely dependent on alpha and not have RGB overlap with [EMISSIVE_COLOR]. +#define EM_BLOCK_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) +/// A globaly cached version of [EM_BLOCK_COLOR] for quick access. +GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) +/// The color matrix used to mask out emissive blockers on the emissive plane. Alpha should default to zero, be solely dependent on the RGB value of [EMISSIVE_COLOR], and be independant of the RGB value of [EM_BLOCK_COLOR]. +#define EM_MASK_MATRIX list(0,0,0,1/3, 0,0,0,1/3, 0,0,0,1/3, 0,0,0,0, 1,1,1,0) +/// A globaly cached version of [EM_MASK_MATRIX] for quick access. +GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) + +/// Returns the red part of a #RRGGBB hex sequence as number +#define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4)) + +/// Returns the green part of a #RRGGBB hex sequence as number +#define GETGREENPART(hexa) hex2num(copytext(hexa, 4, 6)) + +/// Returns the blue part of a #RRGGBB hex sequence as number +#define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8)) + +/// Parse the hexadecimal color into lumcounts of each perspective. +#define PARSE_LIGHT_COLOR(source) \ +do { \ + if (source.light_color != COLOR_WHITE) { \ + var/__light_color = source.light_color; \ + source.lum_r = GETREDPART(__light_color) / 255; \ + source.lum_g = GETGREENPART(__light_color) / 255; \ + source.lum_b = GETBLUEPART(__light_color) / 255; \ + } else { \ + source.lum_r = 1; \ + source.lum_g = 1; \ + source.lum_b = 1; \ + }; \ +} while (FALSE) diff --git a/code/__defines/research.dm b/code/__defines/research.dm index d5827dcab4..b37808def9 100644 --- a/code/__defines/research.dm +++ b/code/__defines/research.dm @@ -1,20 +1,20 @@ -#define SHEET_MATERIAL_AMOUNT 2000 - -#define TECH_MATERIAL "materials" -#define TECH_ENGINEERING "engineering" -#define TECH_PHORON "phorontech" -#define TECH_POWER "powerstorage" -#define TECH_BLUESPACE "bluespace" -#define TECH_BIO "biotech" -#define TECH_COMBAT "combat" -#define TECH_MAGNET "magnets" -#define TECH_DATA "programming" -#define TECH_ILLEGAL "transgressive" -#define TECH_ARCANE "arcane" -#define TECH_PRECURSOR "precursor" - -#define IMPRINTER 0x0001 //For circuits. Uses glass/chemicals. -#define PROTOLATHE 0x0002 //New stuff. Uses glass/metal/chemicals -#define MECHFAB 0x0004 //Mechfab -#define CHASSIS 0x0008 //For protolathe, but differently -#define PROSFAB 0x0010 //For prosthetics fab +#define SHEET_MATERIAL_AMOUNT 2000 + +#define TECH_MATERIAL "materials" +#define TECH_ENGINEERING "engineering" +#define TECH_PHORON "phorontech" +#define TECH_POWER "powerstorage" +#define TECH_BLUESPACE "bluespace" +#define TECH_BIO "biotech" +#define TECH_COMBAT "combat" +#define TECH_MAGNET "magnets" +#define TECH_DATA "programming" +#define TECH_ILLEGAL "transgressive" +#define TECH_ARCANE "arcane" +#define TECH_PRECURSOR "precursor" + +#define IMPRINTER 0x0001 //For circuits. Uses glass/chemicals. +#define PROTOLATHE 0x0002 //New stuff. Uses glass/metal/chemicals +#define MECHFAB 0x0004 //Mechfab +#define CHASSIS 0x0008 //For protolathe, but differently +#define PROSFAB 0x0010 //For prosthetics fab diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm index db58865d72..e775872945 100644 --- a/code/__defines/sound.dm +++ b/code/__defines/sound.dm @@ -1,242 +1,242 @@ -//max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on -#define CHANNEL_LOBBYMUSIC 1024 -#define CHANNEL_ADMIN 1023 -#define CHANNEL_VOX 1022 -#define CHANNEL_JUKEBOX 1021 -#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats -#define CHANNEL_AMBIENCE_FORCED 1019 -#define CHANNEL_AMBIENCE 1018 -#define CHANNEL_BUZZ 1017 -#define CHANNEL_BICYCLE 1016 -#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel - -//THIS SHOULD ALWAYS BE THE LOWEST ONE! -//KEEP IT UPDATED - -#define CHANNEL_HIGHEST_AVAILABLE 1014 //VORESTATION EDIT - Fancy Sound Loop channel from 1015 - -#define SOUND_MINIMUM_PRESSURE 10 -#define FALLOFF_SOUNDS 0.5 - -#define MAX_INSTRUMENT_CHANNELS (128 * 6) - -//default byond sound environments -#define SOUND_ENVIRONMENT_NONE -1 -#define SOUND_ENVIRONMENT_GENERIC 0 -#define SOUND_ENVIRONMENT_PADDED_CELL 1 -#define SOUND_ENVIRONMENT_ROOM 2 -#define SOUND_ENVIRONMENT_BATHROOM 3 -#define SOUND_ENVIRONMENT_LIVINGROOM 4 -#define SOUND_ENVIRONMENT_STONEROOM 5 -#define SOUND_ENVIRONMENT_AUDITORIUM 6 -#define SOUND_ENVIRONMENT_CONCERT_HALL 7 -#define SOUND_ENVIRONMENT_CAVE 8 -#define SOUND_ENVIRONMENT_ARENA 9 -#define SOUND_ENVIRONMENT_HANGAR 10 -#define SOUND_ENVIRONMENT_CARPETED_HALLWAY 11 -#define SOUND_ENVIRONMENT_HALLWAY 12 -#define SOUND_ENVIRONMENT_STONE_CORRIDOR 13 -#define SOUND_ENVIRONMENT_ALLEY 14 -#define SOUND_ENVIRONMENT_FOREST 15 -#define SOUND_ENVIRONMENT_CITY 16 -#define SOUND_ENVIRONMENT_MOUNTAINS 17 -#define SOUND_ENVIRONMENT_QUARRY 18 -#define SOUND_ENVIRONMENT_PLAIN 19 -#define SOUND_ENVIRONMENT_PARKING_LOT 20 -#define SOUND_ENVIRONMENT_SEWER_PIPE 21 -#define SOUND_ENVIRONMENT_UNDERWATER 22 -#define SOUND_ENVIRONMENT_DRUGGED 23 -#define SOUND_ENVIRONMENT_DIZZY 24 -#define SOUND_ENVIRONMENT_PSYCHOTIC 25 -//If we ever make custom ones add them here - -#define STANDARD_STATION SOUND_ENVIRONMENT_STONEROOM -#define LARGE_ENCLOSED SOUND_ENVIRONMENT_HANGAR -#define SMALL_ENCLOSED SOUND_ENVIRONMENT_BATHROOM -#define TUNNEL_ENCLOSED SOUND_ENVIRONMENT_CAVE -#define LARGE_SOFTFLOOR SOUND_ENVIRONMENT_CARPETED_HALLWAY -#define MEDIUM_SOFTFLOOR SOUND_ENVIRONMENT_LIVINGROOM -#define SMALL_SOFTFLOOR SOUND_ENVIRONMENT_ROOM -#define ASTEROID SOUND_ENVIRONMENT_CAVE -#define SPACE SOUND_ENVIRONMENT_UNDERWATER - -// Ambience presets. -// All you need to do to make an area play one of these is set their ambience var to one of these lists. -// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization. - -// For weird alien places like the crashed UFO. -#define AMBIENCE_OTHERWORLDLY list(\ - 'sound/ambience/otherworldly/otherworldly1.ogg',\ - 'sound/ambience/otherworldly/otherworldly2.ogg',\ - 'sound/ambience/otherworldly/otherworldly3.ogg'\ - ) - -// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc. -#define AMBIENCE_HIGHSEC list(\ - 'sound/ambience/highsec/highsec1.ogg',\ - 'sound/ambience/highsec/highsec2.ogg',\ - 'sound/ambience/highsec/highsec3.ogg',\ - 'sound/ambience/highsec/highsec4.ogg'\ - ) - -// Ruined structures found on the surface or in the caves. -#define AMBIENCE_RUINS list(\ - 'sound/ambience/ruins/ruins1.ogg',\ - 'sound/ambience/ruins/ruins2.ogg',\ - 'sound/ambience/ruins/ruins3.ogg',\ - 'sound/ambience/ruins/ruins4.ogg',\ - 'sound/ambience/ruins/ruins5.ogg',\ - 'sound/ambience/ruins/ruins6.ogg'\ - ) - -// Similar to the above, but for more technology/signaling based ruins. -#define AMBIENCE_TECH_RUINS list(\ - 'sound/ambience/tech_ruins/tech_ruins1.ogg',\ - 'sound/ambience/tech_ruins/tech_ruins2.ogg',\ - 'sound/ambience/tech_ruins/tech_ruins3.ogg'\ - ) - -// The actual chapel room, and maybe some other places of worship. -#define AMBIENCE_CHAPEL list(\ - 'sound/ambience/chapel/chapel1.ogg',\ - 'sound/ambience/chapel/chapel2.ogg',\ - 'sound/ambience/chapel/chapel3.ogg',\ - 'sound/ambience/chapel/chapel4.ogg'\ - ) - -// For peaceful, serene areas, distinct from the Chapel. -#define AMBIENCE_HOLY list(\ - 'sound/ambience/holy/holy1.ogg',\ - 'sound/ambience/holy/holy2.ogg'\ - ) - -// Generic sounds for less special rooms. Also apparently on southern cross it's for literally everything including the mining caves. -#define AMBIENCE_GENERIC list(\ - 'sound/ambience/generic/generic1.ogg',\ - 'sound/ambience/generic/generic2.ogg',\ - 'sound/ambience/generic/generic3.ogg',\ - 'sound/ambience/generic/generic4.ogg'\ - ) - -// Sounds of PA announcements, presumably involving shuttles? -#define AMBIENCE_ARRIVALS list(\ - 'sound/ambience/arrivals/arrivals1.ogg',\ - 'sound/ambience/arrivals/arrivals2.ogg',\ - 'sound/ambience/arrivals/arrivals3.ogg',\ - 'sound/ambience/arrivals/arrivals4.ogg',\ - 'sound/ambience/arrivals/arrivals5.ogg',\ - 'sound/ambience/arrivals/arrivals6.ogg',\ - 'sound/ambience/arrivals/arrivals7.ogg'\ - ) - - -// Sounds suitable for being inside dark, tight corridors in the underbelly of the station. //CHOMP Edit keeps original maints sounds and adds sounds from the generic pool which I added and are metal scraping sounds. I should really move these to maintenance folder some day... -#define AMBIENCE_MAINTENANCE list(\ - 'sound/ambience/maintenance/maintenance1.ogg',\ - 'sound/ambience/maintenance/maintenance2.ogg',\ - 'sound/ambience/maintenance/maintenance3.ogg',\ - 'sound/ambience/maintenance/maintenance4.ogg',\ - 'sound/ambience/maintenance/maintenance5.ogg',\ - 'sound/ambience/maintenance/maintenance6.ogg',\ - 'sound/ambience/maintenance/maintenance7.ogg',\ - 'sound/ambience/maintenance/maintenance8.ogg',\ - 'sound/ambience/maintenance/maintenance9.ogg',\ - 'sound/ambience/maintenance/maintenance10.ogg',\ - 'sound/ambience/maintenance/maintenance11.ogg',\ - 'sound/ambience/maintenance/maintenance12.ogg',\ - 'sound/ambience/generic/generic5.ogg',\ - 'sound/ambience/generic/generic6.ogg',\ - 'sound/ambience/generic/generic7.ogg',\ - 'sound/ambience/generic/generic8.ogg'\ - ) - -// Life support machinery at work, keeping everyone breathing. -#define AMBIENCE_ENGINEERING list(\ - 'sound/ambience/engineering/engineering1.ogg',\ - 'sound/ambience/engineering/engineering2.ogg',\ - 'sound/ambience/engineering/engineering3.ogg'\ - ) - -// Creepy AI/borg stuff. -#define AMBIENCE_AI list(\ - 'sound/ambience/ai/ai1.ogg',\ - 'sound/ambience/ai/ai2.ogg',\ - 'sound/ambience/ai/ai3.ogg'\ - ) - -// Peaceful sounds when floating in the void. -#define AMBIENCE_SPACE list(\ - 'sound/ambience/space/space_serithi.ogg',\ - 'sound/ambience/space/space1.ogg'\ - ) - -// Vaguely spooky sounds when around dead things. -#define AMBIENCE_GHOSTLY list(\ - 'sound/ambience/ghostly/ghostly1.ogg',\ - 'sound/ambience/ghostly/ghostly2.ogg'\ - ) - -// Concerning sounds, for when one discovers something horrible happened in a PoI. //CHOMP Edit: Removed foreboding 3-6 as upstream updates just replaced them with maints sounds. -#define AMBIENCE_FOREBODING list(\ - 'sound/ambience/foreboding/foreboding1.ogg',\ - 'sound/ambience/foreboding/foreboding2.ogg'\ - ) - -// Ambience heard when aboveground on Sif and not in a Point of Interest. // CHOMPEdit: Changed to Snowbirds Loops 1-4 -#define AMBIENCE_SIF list(\ - 'sound/ambience/snow_and_ice/Snowbirds_loop1.ogg',\ - 'sound/ambience/snow_and_ice/Snowbirds_loop2.ogg',\ - 'sound/ambience/snow_and_ice/Snowbirds_loop3.ogg',\ - 'sound/ambience/snow_and_ice/Snowbirds_loop4.ogg'\ - ) - -// If we ever add geothermal PoIs or other places that are really hot, this will do. -#define AMBIENCE_LAVA list(\ - 'sound/ambience/lava/lava1.ogg'\ - ) - -// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual. -#define AMBIENCE_UNHOLY list(\ - 'sound/ambience/unholy/unholy1.ogg'\ - ) - -// For the memes. -#define AMBIENCE_AESTHETIC list(\ - 'sound/ambience/vaporwave.ogg'\ - ) - -//CHOMPedit: Exploration outpost ambience. Current tracks taken from Rainworld and Natural Selection 2. -#define AMBIENCE_EXPOUTPOST list(\ - 'sound/ambience/expoutpost/expoutpost1.ogg',\ - 'sound/ambience/expoutpost/expoutpost2.ogg',\ - 'sound/ambience/expoutpost/expoutpost3.ogg',\ - 'sound/ambience/expoutpost/expoutpost4.ogg'\ - ) - -//CHOMP Edit Sounds for Substation rooms. Just electrical sounds, really. -#define AMBIENCE_SUBSTATION list(\ - 'sound/ambience/substation/substation1.ogg',\ - 'sound/ambience/substation/substation2.ogg',\ - 'sound/ambience/substation/substation3.ogg',\ - 'sound/ambience/substation/substation4.ogg',\ - 'sound/ambience/substation/substation5.ogg',\ - 'sound/ambience/substation/substation6.ogg',\ - 'sound/ambience/substation/substation7.ogg',\ - 'sound/ambience/substation/substation8.ogg'\ - ) - -#define AMBIENCE_HANGAR list(\ - 'sound/ambience/hangar/hangar1.ogg',\ - 'sound/ambience/hangar/hangar2.ogg',\ - 'sound/ambience/hangar/hangar3.ogg',\ - 'sound/ambience/hangar/hangar4.ogg',\ - 'sound/ambience/hangar/hangar5.ogg',\ - 'sound/ambience/hangar/hangar6.ogg'\ - ) - -#define AMBIENCE_ATMOS list(\ - 'sound/ambience/engineering/engineering1.ogg',\ - 'sound/ambience/engineering/engineering2.ogg',\ - 'sound/ambience/engineering/engineering3.ogg',\ - 'sound/ambience/atmospherics/atmospherics1.ogg'\ - ) +//max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on +#define CHANNEL_LOBBYMUSIC 1024 +#define CHANNEL_ADMIN 1023 +#define CHANNEL_VOX 1022 +#define CHANNEL_JUKEBOX 1021 +#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats +#define CHANNEL_AMBIENCE_FORCED 1019 +#define CHANNEL_AMBIENCE 1018 +#define CHANNEL_BUZZ 1017 +#define CHANNEL_BICYCLE 1016 +#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel + +//THIS SHOULD ALWAYS BE THE LOWEST ONE! +//KEEP IT UPDATED + +#define CHANNEL_HIGHEST_AVAILABLE 1014 //VORESTATION EDIT - Fancy Sound Loop channel from 1015 + +#define SOUND_MINIMUM_PRESSURE 10 +#define FALLOFF_SOUNDS 0.5 + +#define MAX_INSTRUMENT_CHANNELS (128 * 6) + +//default byond sound environments +#define SOUND_ENVIRONMENT_NONE -1 +#define SOUND_ENVIRONMENT_GENERIC 0 +#define SOUND_ENVIRONMENT_PADDED_CELL 1 +#define SOUND_ENVIRONMENT_ROOM 2 +#define SOUND_ENVIRONMENT_BATHROOM 3 +#define SOUND_ENVIRONMENT_LIVINGROOM 4 +#define SOUND_ENVIRONMENT_STONEROOM 5 +#define SOUND_ENVIRONMENT_AUDITORIUM 6 +#define SOUND_ENVIRONMENT_CONCERT_HALL 7 +#define SOUND_ENVIRONMENT_CAVE 8 +#define SOUND_ENVIRONMENT_ARENA 9 +#define SOUND_ENVIRONMENT_HANGAR 10 +#define SOUND_ENVIRONMENT_CARPETED_HALLWAY 11 +#define SOUND_ENVIRONMENT_HALLWAY 12 +#define SOUND_ENVIRONMENT_STONE_CORRIDOR 13 +#define SOUND_ENVIRONMENT_ALLEY 14 +#define SOUND_ENVIRONMENT_FOREST 15 +#define SOUND_ENVIRONMENT_CITY 16 +#define SOUND_ENVIRONMENT_MOUNTAINS 17 +#define SOUND_ENVIRONMENT_QUARRY 18 +#define SOUND_ENVIRONMENT_PLAIN 19 +#define SOUND_ENVIRONMENT_PARKING_LOT 20 +#define SOUND_ENVIRONMENT_SEWER_PIPE 21 +#define SOUND_ENVIRONMENT_UNDERWATER 22 +#define SOUND_ENVIRONMENT_DRUGGED 23 +#define SOUND_ENVIRONMENT_DIZZY 24 +#define SOUND_ENVIRONMENT_PSYCHOTIC 25 +//If we ever make custom ones add them here + +#define STANDARD_STATION SOUND_ENVIRONMENT_STONEROOM +#define LARGE_ENCLOSED SOUND_ENVIRONMENT_HANGAR +#define SMALL_ENCLOSED SOUND_ENVIRONMENT_BATHROOM +#define TUNNEL_ENCLOSED SOUND_ENVIRONMENT_CAVE +#define LARGE_SOFTFLOOR SOUND_ENVIRONMENT_CARPETED_HALLWAY +#define MEDIUM_SOFTFLOOR SOUND_ENVIRONMENT_LIVINGROOM +#define SMALL_SOFTFLOOR SOUND_ENVIRONMENT_ROOM +#define ASTEROID SOUND_ENVIRONMENT_CAVE +#define SPACE SOUND_ENVIRONMENT_UNDERWATER + +// Ambience presets. +// All you need to do to make an area play one of these is set their ambience var to one of these lists. +// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization. + +// For weird alien places like the crashed UFO. +#define AMBIENCE_OTHERWORLDLY list(\ + 'sound/ambience/otherworldly/otherworldly1.ogg',\ + 'sound/ambience/otherworldly/otherworldly2.ogg',\ + 'sound/ambience/otherworldly/otherworldly3.ogg'\ + ) + +// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc. +#define AMBIENCE_HIGHSEC list(\ + 'sound/ambience/highsec/highsec1.ogg',\ + 'sound/ambience/highsec/highsec2.ogg',\ + 'sound/ambience/highsec/highsec3.ogg',\ + 'sound/ambience/highsec/highsec4.ogg'\ + ) + +// Ruined structures found on the surface or in the caves. +#define AMBIENCE_RUINS list(\ + 'sound/ambience/ruins/ruins1.ogg',\ + 'sound/ambience/ruins/ruins2.ogg',\ + 'sound/ambience/ruins/ruins3.ogg',\ + 'sound/ambience/ruins/ruins4.ogg',\ + 'sound/ambience/ruins/ruins5.ogg',\ + 'sound/ambience/ruins/ruins6.ogg'\ + ) + +// Similar to the above, but for more technology/signaling based ruins. +#define AMBIENCE_TECH_RUINS list(\ + 'sound/ambience/tech_ruins/tech_ruins1.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins2.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins3.ogg'\ + ) + +// The actual chapel room, and maybe some other places of worship. +#define AMBIENCE_CHAPEL list(\ + 'sound/ambience/chapel/chapel1.ogg',\ + 'sound/ambience/chapel/chapel2.ogg',\ + 'sound/ambience/chapel/chapel3.ogg',\ + 'sound/ambience/chapel/chapel4.ogg'\ + ) + +// For peaceful, serene areas, distinct from the Chapel. +#define AMBIENCE_HOLY list(\ + 'sound/ambience/holy/holy1.ogg',\ + 'sound/ambience/holy/holy2.ogg'\ + ) + +// Generic sounds for less special rooms. Also apparently on southern cross it's for literally everything including the mining caves. +#define AMBIENCE_GENERIC list(\ + 'sound/ambience/generic/generic1.ogg',\ + 'sound/ambience/generic/generic2.ogg',\ + 'sound/ambience/generic/generic3.ogg',\ + 'sound/ambience/generic/generic4.ogg'\ + ) + +// Sounds of PA announcements, presumably involving shuttles? +#define AMBIENCE_ARRIVALS list(\ + 'sound/ambience/arrivals/arrivals1.ogg',\ + 'sound/ambience/arrivals/arrivals2.ogg',\ + 'sound/ambience/arrivals/arrivals3.ogg',\ + 'sound/ambience/arrivals/arrivals4.ogg',\ + 'sound/ambience/arrivals/arrivals5.ogg',\ + 'sound/ambience/arrivals/arrivals6.ogg',\ + 'sound/ambience/arrivals/arrivals7.ogg'\ + ) + + +// Sounds suitable for being inside dark, tight corridors in the underbelly of the station. //CHOMP Edit keeps original maints sounds and adds sounds from the generic pool which I added and are metal scraping sounds. I should really move these to maintenance folder some day... +#define AMBIENCE_MAINTENANCE list(\ + 'sound/ambience/maintenance/maintenance1.ogg',\ + 'sound/ambience/maintenance/maintenance2.ogg',\ + 'sound/ambience/maintenance/maintenance3.ogg',\ + 'sound/ambience/maintenance/maintenance4.ogg',\ + 'sound/ambience/maintenance/maintenance5.ogg',\ + 'sound/ambience/maintenance/maintenance6.ogg',\ + 'sound/ambience/maintenance/maintenance7.ogg',\ + 'sound/ambience/maintenance/maintenance8.ogg',\ + 'sound/ambience/maintenance/maintenance9.ogg',\ + 'sound/ambience/maintenance/maintenance10.ogg',\ + 'sound/ambience/maintenance/maintenance11.ogg',\ + 'sound/ambience/maintenance/maintenance12.ogg',\ + 'sound/ambience/generic/generic5.ogg',\ + 'sound/ambience/generic/generic6.ogg',\ + 'sound/ambience/generic/generic7.ogg',\ + 'sound/ambience/generic/generic8.ogg'\ + ) + +// Life support machinery at work, keeping everyone breathing. +#define AMBIENCE_ENGINEERING list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg'\ + ) + +// Creepy AI/borg stuff. +#define AMBIENCE_AI list(\ + 'sound/ambience/ai/ai1.ogg',\ + 'sound/ambience/ai/ai2.ogg',\ + 'sound/ambience/ai/ai3.ogg'\ + ) + +// Peaceful sounds when floating in the void. +#define AMBIENCE_SPACE list(\ + 'sound/ambience/space/space_serithi.ogg',\ + 'sound/ambience/space/space1.ogg'\ + ) + +// Vaguely spooky sounds when around dead things. +#define AMBIENCE_GHOSTLY list(\ + 'sound/ambience/ghostly/ghostly1.ogg',\ + 'sound/ambience/ghostly/ghostly2.ogg'\ + ) + +// Concerning sounds, for when one discovers something horrible happened in a PoI. //CHOMP Edit: Removed foreboding 3-6 as upstream updates just replaced them with maints sounds. +#define AMBIENCE_FOREBODING list(\ + 'sound/ambience/foreboding/foreboding1.ogg',\ + 'sound/ambience/foreboding/foreboding2.ogg'\ + ) + +// Ambience heard when aboveground on Sif and not in a Point of Interest. // CHOMPEdit: Changed to Snowbirds Loops 1-4 +#define AMBIENCE_SIF list(\ + 'sound/ambience/snow_and_ice/Snowbirds_loop1.ogg',\ + 'sound/ambience/snow_and_ice/Snowbirds_loop2.ogg',\ + 'sound/ambience/snow_and_ice/Snowbirds_loop3.ogg',\ + 'sound/ambience/snow_and_ice/Snowbirds_loop4.ogg'\ + ) + +// If we ever add geothermal PoIs or other places that are really hot, this will do. +#define AMBIENCE_LAVA list(\ + 'sound/ambience/lava/lava1.ogg'\ + ) + +// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual. +#define AMBIENCE_UNHOLY list(\ + 'sound/ambience/unholy/unholy1.ogg'\ + ) + +// For the memes. +#define AMBIENCE_AESTHETIC list(\ + 'sound/ambience/vaporwave.ogg'\ + ) + +//CHOMPedit: Exploration outpost ambience. Current tracks taken from Rainworld and Natural Selection 2. +#define AMBIENCE_EXPOUTPOST list(\ + 'sound/ambience/expoutpost/expoutpost1.ogg',\ + 'sound/ambience/expoutpost/expoutpost2.ogg',\ + 'sound/ambience/expoutpost/expoutpost3.ogg',\ + 'sound/ambience/expoutpost/expoutpost4.ogg'\ + ) + +//CHOMP Edit Sounds for Substation rooms. Just electrical sounds, really. +#define AMBIENCE_SUBSTATION list(\ + 'sound/ambience/substation/substation1.ogg',\ + 'sound/ambience/substation/substation2.ogg',\ + 'sound/ambience/substation/substation3.ogg',\ + 'sound/ambience/substation/substation4.ogg',\ + 'sound/ambience/substation/substation5.ogg',\ + 'sound/ambience/substation/substation6.ogg',\ + 'sound/ambience/substation/substation7.ogg',\ + 'sound/ambience/substation/substation8.ogg'\ + ) + +#define AMBIENCE_HANGAR list(\ + 'sound/ambience/hangar/hangar1.ogg',\ + 'sound/ambience/hangar/hangar2.ogg',\ + 'sound/ambience/hangar/hangar3.ogg',\ + 'sound/ambience/hangar/hangar4.ogg',\ + 'sound/ambience/hangar/hangar5.ogg',\ + 'sound/ambience/hangar/hangar6.ogg'\ + ) + +#define AMBIENCE_ATMOS list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg',\ + 'sound/ambience/atmospherics/atmospherics1.ogg'\ + ) diff --git a/code/__defines/sqlite_defines.dm b/code/__defines/sqlite_defines.dm index 8cda3b62a0..4a4c4fe689 100644 --- a/code/__defines/sqlite_defines.dm +++ b/code/__defines/sqlite_defines.dm @@ -1,7 +1,7 @@ -#define SQLITE_TABLE_FEEDBACK "feedback" - -#define SQLITE_FEEDBACK_COLUMN_ID "id" -#define SQLITE_FEEDBACK_COLUMN_AUTHOR "author" -#define SQLITE_FEEDBACK_COLUMN_TOPIC "topic" -#define SQLITE_FEEDBACK_COLUMN_CONTENT "content" +#define SQLITE_TABLE_FEEDBACK "feedback" + +#define SQLITE_FEEDBACK_COLUMN_ID "id" +#define SQLITE_FEEDBACK_COLUMN_AUTHOR "author" +#define SQLITE_FEEDBACK_COLUMN_TOPIC "topic" +#define SQLITE_FEEDBACK_COLUMN_CONTENT "content" #define SQLITE_FEEDBACK_COLUMN_DATETIME "datetime" \ No newline at end of file diff --git a/code/__defines/tgs.config.dm b/code/__defines/tgs.config.dm index c02ed92daa..e25041963b 100644 --- a/code/__defines/tgs.config.dm +++ b/code/__defines/tgs.config.dm @@ -1,11 +1,11 @@ -#define TGS_EXTERNAL_CONFIGURATION -#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) -#define TGS_READ_GLOBAL(Name) GLOB.##Name -#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value -#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "[html_encode(##message)]") -#define TGS_INFO_LOG(message) log_to_dd("TGS Info: [##message]") -#define TGS_WARNING_LOG(message) log_to_dd("TGS Warn: [##message]") -#define TGS_ERROR_LOG(message) log_to_dd("TGS Error: [##message]") -#define TGS_NOTIFY_ADMINS(event) message_admins(##event) -#define TGS_CLIENT_COUNT GLOB.clients.len -#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path) +#define TGS_EXTERNAL_CONFIGURATION +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) +#define TGS_READ_GLOBAL(Name) GLOB.##Name +#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "[html_encode(##message)]") +#define TGS_INFO_LOG(message) log_to_dd("TGS Info: [##message]") +#define TGS_WARNING_LOG(message) log_to_dd("TGS Warn: [##message]") +#define TGS_ERROR_LOG(message) log_to_dd("TGS Error: [##message]") +#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_CLIENT_COUNT GLOB.clients.len +#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path) diff --git a/code/__defines/time.dm b/code/__defines/time.dm index c2a3632c74..9b3c384cfb 100644 --- a/code/__defines/time.dm +++ b/code/__defines/time.dm @@ -1,33 +1,33 @@ -/// Define that just has the current in-universe year for use in whatever context you might want to display that in. (For example, 2022 -> 2562 given a 540 year offset) -#define CURRENT_STATION_YEAR (GLOB.year_integer + STATION_YEAR_OFFSET) - -/// In-universe, SS13 is set 300 years in the future from the real-world day, hence this number for determining the year-offset for the in-game year. -#define STATION_YEAR_OFFSET 300 - -#define MILISECOND * 0.01 -#define MILLISECONDS * 0.01 - -#define DECISECONDS *1 //the base unit all of these defines are scaled by, because byond uses that as a unit of measurement for some reason - -#define SECOND *10 -#define SECONDS *10 - -#define MINUTE *600 -#define MINUTES *600 - -#define HOUR *36000 -#define HOURS *36000 - -#define DAY *864000 -#define DAYS *864000 - -#define TICK *world.tick_lag -#define TICKS *world.tick_lag - -#define DS2TICKS(DS) ((DS)/world.tick_lag) - -#define TICKS2DS(T) ((T) TICKS) - -#define MS2DS(T) ((T) MILLISECONDS) - -#define DS2MS(T) ((T) * 100) +/// Define that just has the current in-universe year for use in whatever context you might want to display that in. (For example, 2022 -> 2562 given a 540 year offset) +#define CURRENT_STATION_YEAR (GLOB.year_integer + STATION_YEAR_OFFSET) + +/// In-universe, SS13 is set 300 years in the future from the real-world day, hence this number for determining the year-offset for the in-game year. +#define STATION_YEAR_OFFSET 300 + +#define MILISECOND * 0.01 +#define MILLISECONDS * 0.01 + +#define DECISECONDS *1 //the base unit all of these defines are scaled by, because byond uses that as a unit of measurement for some reason + +#define SECOND *10 +#define SECONDS *10 + +#define MINUTE *600 +#define MINUTES *600 + +#define HOUR *36000 +#define HOURS *36000 + +#define DAY *864000 +#define DAYS *864000 + +#define TICK *world.tick_lag +#define TICKS *world.tick_lag + +#define DS2TICKS(DS) ((DS)/world.tick_lag) + +#define TICKS2DS(T) ((T) TICKS) + +#define MS2DS(T) ((T) MILLISECONDS) + +#define DS2MS(T) ((T) * 100) diff --git a/code/_global_vars/time_vars.dm b/code/_global_vars/time_vars.dm index f05384ca49..1b4fc6401a 100644 --- a/code/_global_vars/time_vars.dm +++ b/code/_global_vars/time_vars.dm @@ -1,2 +1,2 @@ -GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY")) -GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? +GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY")) +GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? diff --git a/code/_helpers/atmospherics.dm b/code/_helpers/atmospherics.dm index 83b5982f13..25fd699b32 100644 --- a/code/_helpers/atmospherics.dm +++ b/code/_helpers/atmospherics.dm @@ -1,78 +1,78 @@ -/obj/proc/analyze_gases(var/atom/A, var/mob/user) - if(src != A) - user.visible_message("\The [user] has used \an [src] on \the [A]") - - A.add_fingerprint(user) - var/list/result = A.atmosanalyze(user) - if(result && result.len) - to_chat(user, "Results of the analysis[src == A ? "" : " of \the [A]"]") - for(var/line in result) - to_chat(user, "[line]") - return 1 - - to_chat(user, "Your [src] flashes a red light as it fails to analyze \the [A].") - return 0 - -/proc/atmosanalyzer_scan(var/atom/target, var/datum/gas_mixture/mixture, var/mob/user) - var/list/results = list() - - if (mixture && mixture.total_moles > 0) - var/pressure = mixture.return_pressure() - var/total_moles = mixture.total_moles - results += "Pressure: [round(pressure,0.1)] kPa" - for(var/mix in mixture.gas) - results += "[gas_data.name[mix]]: [round((mixture.gas[mix] / total_moles) * 100)]% ([round(mixture.gas[mix], 0.01)] moles)" - results += "Temperature: [round(mixture.temperature-T0C)]°C" - results += "Heat Capacity: [round(mixture.heat_capacity(),0.1)]" - else - results += "\The [target] is empty!" - - return results - -/turf/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air, user) - -/atom/proc/atmosanalyze(var/mob/user) - return - -/obj/item/weapon/tank/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air_contents, user) - -/obj/machinery/portable_atmospherics/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air_contents, user) - -/obj/machinery/atmospherics/pipe/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.parent.air, user) - -/obj/machinery/atmospherics/portables_connector/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.network.gases, user) - -/obj/machinery/atmospherics/unary/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air_contents, user) - -/obj/machinery/atmospherics/binary/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air1, user) - -/obj/machinery/atmospherics/trinary/atmos_filter/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air1, user) - -/obj/machinery/atmospherics/trinary/mixer/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.air3, user) - -/obj/machinery/atmospherics/omni/atmos_filter/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.input.air, user) - -/obj/machinery/atmospherics/omni/mixer/atmosanalyze(var/mob/user) - return atmosanalyzer_scan(src, src.output.air, user) - -/obj/machinery/meter/atmosanalyze(var/mob/user) - var/datum/gas_mixture/mixture = null - if(src.target) - mixture = src.target.parent.air - return atmosanalyzer_scan(src, mixture, user) - -/obj/machinery/power/rad_collector/atmosanalyze(var/mob/user) - if(P) return atmosanalyzer_scan(src, src.P.air_contents, user) - -/obj/item/weapon/flamethrower/atmosanalyze(var/mob/user) - if(ptank) return atmosanalyzer_scan(src, ptank.air_contents, user) +/obj/proc/analyze_gases(var/atom/A, var/mob/user) + if(src != A) + user.visible_message("\The [user] has used \an [src] on \the [A]") + + A.add_fingerprint(user) + var/list/result = A.atmosanalyze(user) + if(result && result.len) + to_chat(user, "Results of the analysis[src == A ? "" : " of \the [A]"]") + for(var/line in result) + to_chat(user, "[line]") + return 1 + + to_chat(user, "Your [src] flashes a red light as it fails to analyze \the [A].") + return 0 + +/proc/atmosanalyzer_scan(var/atom/target, var/datum/gas_mixture/mixture, var/mob/user) + var/list/results = list() + + if (mixture && mixture.total_moles > 0) + var/pressure = mixture.return_pressure() + var/total_moles = mixture.total_moles + results += "Pressure: [round(pressure,0.1)] kPa" + for(var/mix in mixture.gas) + results += "[gas_data.name[mix]]: [round((mixture.gas[mix] / total_moles) * 100)]% ([round(mixture.gas[mix], 0.01)] moles)" + results += "Temperature: [round(mixture.temperature-T0C)]°C" + results += "Heat Capacity: [round(mixture.heat_capacity(),0.1)]" + else + results += "\The [target] is empty!" + + return results + +/turf/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air, user) + +/atom/proc/atmosanalyze(var/mob/user) + return + +/obj/item/weapon/tank/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air_contents, user) + +/obj/machinery/portable_atmospherics/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air_contents, user) + +/obj/machinery/atmospherics/pipe/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.parent.air, user) + +/obj/machinery/atmospherics/portables_connector/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.network.gases, user) + +/obj/machinery/atmospherics/unary/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air_contents, user) + +/obj/machinery/atmospherics/binary/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air1, user) + +/obj/machinery/atmospherics/trinary/atmos_filter/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air1, user) + +/obj/machinery/atmospherics/trinary/mixer/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.air3, user) + +/obj/machinery/atmospherics/omni/atmos_filter/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.input.air, user) + +/obj/machinery/atmospherics/omni/mixer/atmosanalyze(var/mob/user) + return atmosanalyzer_scan(src, src.output.air, user) + +/obj/machinery/meter/atmosanalyze(var/mob/user) + var/datum/gas_mixture/mixture = null + if(src.target) + mixture = src.target.parent.air + return atmosanalyzer_scan(src, mixture, user) + +/obj/machinery/power/rad_collector/atmosanalyze(var/mob/user) + if(P) return atmosanalyzer_scan(src, src.P.air_contents, user) + +/obj/item/weapon/flamethrower/atmosanalyze(var/mob/user) + if(ptank) return atmosanalyzer_scan(src, ptank.air_contents, user) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 7445066139..b43b4abaa1 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -1,746 +1,746 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/proc/dopage(src,target) - var/href_list - var/href - href_list = params2list("src=\ref[src]&[target]=1") - href = "src=\ref[src];[target]=1" - src:temphtml = null - src:Topic(href, href_list) - return null - -/proc/is_on_same_plane_or_station(var/z1, var/z2) - if(z1 == z2) - return 1 - if((z1 in using_map.station_levels) && (z2 in using_map.station_levels)) - return 1 - return 0 - -/proc/max_default_z_level() - var/max_z = 0 - for(var/z in using_map.station_levels) - max_z = max(z, max_z) - for(var/z in using_map.admin_levels) - max_z = max(z, max_z) - for(var/z in using_map.player_levels) - max_z = max(z, max_z) - return max_z - -/proc/get_area(atom/A) - RETURN_TYPE(/area) - if(isarea(A)) - return A - var/turf/T = get_turf(A) - return T ? T.loc : null - -/proc/get_area_name(atom/X, format_text = FALSE) - var/area/A = isarea(X) ? X : get_area(X) - if(!A) - return null - return format_text ? format_text(A.name) : A.name - -/** Checks if any living humans are in a given area. */ -/proc/area_is_occupied(var/area/myarea) - // Testing suggests looping over human_mob_list is quicker than looping over area contents - for(var/mob/living/carbon/human/H in human_mob_list) - if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it. - continue - var/area/A = get_area(H) - if(A == myarea) //The loc of a turf is the area it is in. - return 1 - return 0 - -/proc/in_range(source, user) - if(get_dist(source, user) <= 1) - return 1 - - return 0 //not in range and not telekinetic - -// Like view but bypasses luminosity check - -/proc/hear(var/range, var/atom/source) - - var/lum = source.luminosity - source.luminosity = 6 - - var/list/heard = view(range, source) - source.luminosity = lum - - return heard - -/proc/isStationLevel(var/level) - return level in using_map.station_levels - -/proc/isNotStationLevel(var/level) - return !isStationLevel(level) - -/proc/isPlayerLevel(var/level) - return level in using_map.player_levels - -/proc/isAdminLevel(var/level) - return level in using_map.admin_levels - -/proc/isNotAdminLevel(var/level) - return !isAdminLevel(level) - -/proc/circlerange(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - - //turfs += centerturf - return turfs - -/proc/circleview(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/atoms = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/A in view(radius, centerturf)) - var/dx = A.x - centerturf.x - var/dy = A.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - atoms += A - - //turfs += centerturf - return atoms - -/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive) - if(!centre) - return - - var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z) - var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z) - return block(x1y1,x2y2) - -/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) - var/dx = Loc1.x - Loc2.x - var/dy = Loc1.y - Loc2.y - - var/dist = sqrt(dx**2 + dy**2) - - return dist - -/proc/circlerangeturfs(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/turf/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - return turfs - -/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/turf/T in view(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - return turfs - - - -//var/debug_mob = 0 - -// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. -// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, -// being unable to hear people due to being in a box within a bag. - -/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1, var/ignore_show_messages = 0) - - if(!recursion_limit) - return L - - for(var/I in O.contents) - - if(ismob(I)) - if(!sight_check || isInSight(I, O)) - L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) - if(include_mobs) - if(client_check) - var/mob/M = I - if(M.client) - L |= M - else - L |= I - - else if(istype(I,/obj/)) - var/obj/check_obj = I - if(ignore_show_messages || check_obj.show_messages) - if(!sight_check || isInSight(I, O)) - L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) - if(include_objects) - L |= I - - return L - -// Returns a list of mobs and/or objects in range of R from source. Used in radio and say code. - -/proc/get_mobs_or_objects_in_view(var/R, var/atom/source, var/include_mobs = 1, var/include_objects = 1) - - var/turf/T = get_turf(source) - var/list/hear = list() - - if(!T) - return hear - - var/list/range = hear(R, T) - - for(var/I in range) - if(ismob(I)) - hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) - if(include_mobs) - var/mob/M = I - if(M.client) - hear += M - else if(istype(I,/obj/)) - hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) - var/obj/O = I - if(O.show_messages && include_objects) - hear += I - - return hear - -//CHOMPEdit - entire proc changed basically to use recursive listening -/proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) - - set background = 1 - . = list() - // Returns a list of mobs who can hear any of the radios given in @radios - for(var/obj/item/device/radio/R as anything in radios) - if(get_turf(R)) - for(var/turf/T in R.can_broadcast_to()) //CHOMPEdit - for (var/atom/movable/hearing in T) - if (hearing.recursive_listeners) - . |= hearing.recursive_listeners - - for (var/mob/M as anything in .) - if (!istype(M) || !M.client) - . -= M - for (var/mob/observer/O in player_list) - . |= O - -/mob/proc/can_hear_radio(var/list/hearturfs) - return FALSE - -/mob/living/can_hear_radio(var/list/hearturfs) - return get_turf(src) in hearturfs - -/mob/living/silicon/robot/can_hear_radio(var/list/hearturfs) - var/turf/T = get_turf(src) - var/obj/item/device/radio/borg/R = hearturfs[T] // this should be an assoc list of turf-to-radio - - // We heard it on our own radio? We use power for that. - if(istype(R) && R.myborg == src) - var/datum/robot_component/CO = get_component("radio") - if(!CO || !is_component_functioning("radio") || !cell_use_power(CO.active_usage)) - return FALSE // Sorry, couldn't hear - - return R // radio, true, false, what's the difference - -/mob/observer/dead/can_hear_radio(var/list/hearturfs) - return is_preference_enabled(/datum/client_preference/ghost_radio) - - -//Uses dview to quickly return mobs and objects in view, -// then adds additional mobs or objects if they are in range 'smartly', -// based on their presence in lists of players or registered objects -// Type: 1-audio, 2-visual, 0-neither -/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/type = 1, var/remote_ghosts = TRUE) - var/list/mobs = list() - var/list/objs = list() - - var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) - var/list/hearturfs = list() - - // Openspace visibility handling - // Below turfs we can see - for(var/turf/simulated/open/O in hear) - var/turf/U = GetBelow(O) - while(istype(U)) - hearturfs |= U - if(isopenspace(U)) - U = GetBelow(U) - else - U = null - - // Above us - var/above_range = range - var/turf/Ab = GetAbove(T) - while(isopenspace(Ab) && --above_range > 0) - hear |= dview(above_range,Ab,INVISIBILITY_MAXIMUM) - Ab = GetAbove(Ab) - - for(var/thing in hear) - if(istype(thing, /obj)) //Can't use isobj() because /atom/movable returns true in that - objs += thing - hearturfs |= get_turf(thing) - if(ismob(thing)) - mobs += thing - hearturfs |= get_turf(thing) - - //A list of every mob with a client - for(var/mob in player_list) - if(!ismob(mob)) - player_list -= mob - continue - //VOREStation Edit End - Trying to fix some vorestation bug. - if(get_turf(mob) in hearturfs) - mobs |= mob - continue - - var/mob/M = mob - if(M && M.stat == DEAD && remote_ghosts && !M.forbid_seeing_deadchat) - switch(type) - if(1) //Audio messages use ghost_ears - if(M.is_preference_enabled(/datum/client_preference/ghost_ears)) - mobs |= M - if(2) //Visual messages use ghost_sight - if(M.is_preference_enabled(/datum/client_preference/ghost_sight)) - mobs |= M - - //For objects below the top level who still want to hear - for(var/obj in listening_objects) - if(get_turf(obj) in hearturfs) - objs |= obj - - return list("mobs" = mobs, "objs" = objs) - -/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) - var/turf/T - if(X1==X2) - if(Y1==Y2) - return 1 //Light cannot be blocked on same tile - else - var/s = SIGN(Y2-Y1) - Y1+=s - while(Y1!=Y2) - T=locate(X1,Y1,Z) - if(T.opacity) - return 0 - Y1+=s - else - var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) - var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles - var/signX = SIGN(X2-X1) - var/signY = SIGN(Y2-Y1) - if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie) - if(dy > 0) - return get_step(start, SOUTH) - else - return get_step(start, NORTH) - else - if(dx > 0) - return get_step(start, WEST) - else - return get_step(start, EAST) - -/proc/get_mob_by_key(var/key) - for(var/mob/M in mob_list) - if(M.ckey == lowertext(key)) - return M - return null - - -// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. -/proc/get_active_candidates(var/buffer = 1) - - var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn - var/i = 0 - while(candidates.len <= 0 && i < 5) - for(var/mob/observer/dead/G in player_list) - if(((G.client.inactivity/10)/60) <= buffer + i) // the most active players are more likely to become an alien - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - i++ - return candidates - -// Same as above but for alien candidates. - -/proc/get_alien_candidates() - - var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn - var/i = 0 - while(candidates.len <= 0 && i < 5) - for(var/mob/observer/dead/G in player_list) - if(G.client.prefs.be_special & BE_ALIEN) - if(((G.client.inactivity/10)/60) <= ALIEN_SELECT_AFK_BUFFER + i) // the most active players are more likely to become an alien - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - i++ - return candidates - -/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) - if(!isobj(O)) O = new /obj/screen/text() - O.maptext = maptext - O.maptext_height = maptext_height - O.maptext_width = maptext_width - O.screen_loc = screen_loc - return O - -/proc/Show2Group4Delay(obj/O, list/group, delay=0) - if(!isobj(O)) return - if(!group) group = GLOB.clients - for(var/client/C in group) - C.screen += O - if(delay) - spawn(delay) - for(var/client/C in group) - C.screen -= O - -/datum/projectile_data - var/src_x - var/src_y - var/time - var/distance - var/power_x - var/power_y - var/dest_x - var/dest_y - -/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \ - var/power_x, var/power_y, var/dest_x, var/dest_y) - src.src_x = src_x - src.src_y = src_y - src.time = time - src.distance = distance - src.power_x = power_x - src.power_y = power_y - src.dest_x = dest_x - src.dest_y = dest_y - -/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power) - - // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], - // rotated at [rotation] and with the power of [power] - // Thanks to VistaPOWA for this function - - var/power_x = power * cos(angle) - var/power_y = power * sin(angle) - var/time = 2* power_y / 10 //10 = g - - var/distance = time * power_x - - var/dest_x = src_x + distance*sin(rotation); - var/dest_y = src_y + distance*cos(rotation); - - return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) - -/proc/GetRedPart(const/hexa) - return hex2num(copytext(hexa,2,4)) - -/proc/GetGreenPart(const/hexa) - return hex2num(copytext(hexa,4,6)) - -/proc/GetBluePart(const/hexa) - return hex2num(copytext(hexa,6,8)) - -/proc/GetHexColors(const/hexa) - return list( - GetRedPart(hexa), - GetGreenPart(hexa), - GetBluePart(hexa) - ) - -/proc/MixColors(const/list/colors) - var/list/reds = list() - var/list/blues = list() - var/list/greens = list() - var/list/weights = list() - - for (var/i = 0, ++i <= colors.len) - reds.Add(GetRedPart(colors[i])) - blues.Add(GetBluePart(colors[i])) - greens.Add(GetGreenPart(colors[i])) - weights.Add(1) - - var/r = mixOneColor(weights, reds) - var/g = mixOneColor(weights, greens) - var/b = mixOneColor(weights, blues) - return rgb(r,g,b) - -/proc/mixOneColor(var/list/weight, var/list/color) - if (!weight || !color || length(weight)!=length(color)) - return 0 - - var/contents = length(weight) - var/i - - //normalize weights - var/listsum = 0 - for(i=1; i<=contents; i++) - listsum += weight[i] - for(i=1; i<=contents; i++) - weight[i] /= listsum - - //mix them - var/mixedcolor = 0 - for(i=1; i<=contents; i++) - mixedcolor += weight[i]*color[i] - mixedcolor = round(mixedcolor) - - //until someone writes a formal proof for this algorithm, let's keep this in -// if(mixedcolor<0x00 || mixedcolor>0xFF) -// return 0 - //that's not the kind of operation we are running here, nerd - mixedcolor=min(max(mixedcolor,0),255) - - return mixedcolor - -/** -* Gets the highest and lowest pressures from the tiles in cardinal directions -* around us, then checks the difference. -*/ -/proc/getOPressureDifferential(var/turf/loc) - var/minp=16777216; - var/maxp=0; - for(var/dir in GLOB.cardinal) - var/turf/simulated/T=get_turf(get_step(loc,dir)) - var/cp=0 - if(T && istype(T) && T.zone) - var/datum/gas_mixture/environment = T.return_air() - cp = environment.return_pressure() - else - if(istype(T,/turf/simulated)) - continue - if(cpmaxp)maxp=cp - return abs(minp-maxp) - -/proc/convert_k2c(var/temp) - return ((temp - T0C)) - -/proc/convert_c2k(var/temp) - return ((temp + T0C)) - -/proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature")) - var/list/temps = new/list(4) - for(var/dir in GLOB.cardinal) - var/direction - switch(dir) - if(NORTH) - direction = 1 - if(SOUTH) - direction = 2 - if(EAST) - direction = 3 - if(WEST) - direction = 4 - var/turf/simulated/T=get_turf(get_step(loc,dir)) - var/list/rstats = new /list(stats.len) - if(T && istype(T) && T.zone) - var/datum/gas_mixture/environment = T.return_air() - for(var/i=1;i<=stats.len;i++) - if(stats[i] == "pressure") - rstats[i] = environment.return_pressure() - else - rstats[i] = environment.vars[stats[i]] - else if(istype(T, /turf/simulated)) - rstats = null // Exclude zone (wall, door, etc). - else if(istype(T, /turf)) - // Should still work. (/turf/return_air()) - var/datum/gas_mixture/environment = T.return_air() - for(var/i=1;i<=stats.len;i++) - if(stats[i] == "pressure") - rstats[i] = environment.return_pressure() - else - rstats[i] = environment.vars[stats[i]] - temps[direction] = rstats - return temps - -/proc/MinutesToTicks(var/minutes) - return SecondsToTicks(60 * minutes) - -/proc/SecondsToTicks(var/seconds) - return seconds * 10 - -/proc/window_flash(var/client_or_usr) - if (!client_or_usr) - return - winset(client_or_usr, "mainwindow", "flash=5") - -/** - * Get a bounding box of a list of atoms. - * - * Arguments: - * - atoms - List of atoms. Can accept output of view() and range() procs. - * - * Returns: list(x1, y1, x2, y2) - */ -/proc/get_bbox_of_atoms(list/atoms) - var/list/list_x = list() - var/list/list_y = list() - for(var/_a in atoms) - var/atom/a = _a - list_x += a.x - list_y += a.y - return list( - min(list_x), - min(list_y), - max(list_x), - max(list_y)) - -// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. -// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, -// being unable to hear people due to being in a box within a bag. - -/proc/recursive_mob_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1) - - //GLOB.debug_mob += O.contents.len - if(!recursion_limit) - return L - for(var/atom/A in O.contents) - - if(ismob(A)) - var/mob/M = A - if(client_check && !M.client) - L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) - continue - if(sight_check && !isInSight(A, O)) - continue - L |= M - //log_world("[recursion_limit] = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])") - - else if(include_radio && istype(A, /obj/item/radio)) - if(sight_check && !isInSight(A, O)) - continue - L |= A - - if(isobj(A) || ismob(A)) - L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) - return L - -// The old system would loop through lists for a total of 5000 per function call, in an empty server. -// This new system will loop at around 1000 in an empty server. - -/proc/get_mobs_in_view(var/R, var/atom/source, var/include_clientless = FALSE) - // Returns a list of mobs in range of R from source. Used in radio and say code. - - var/turf/T = get_turf(source) - var/list/hear = list() - - if(!T) - return hear - - var/list/range = hear(R, T) - - for(var/atom/A in range) - if(ismob(A)) - var/mob/M = A - if(M.client || include_clientless) - hear += M - //log_world("Start = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])") - else if(istype(A, /obj/item/radio)) - hear += A - - if(isobj(A) || ismob(A)) - hear |= recursive_mob_check(A, hear, 3, 1, 0, 1) - - return hear - -/proc/get_belly(var/atom/A) // return a belly we're in, one way or another; and if we aren't (or are too deep to comprehend being in belly), returns null - var/atom/loc_check = A.loc - var/recursion_level = 0 - while(loc_check && !isbelly(loc_check) && !isturf(loc_check)) - if(recursion_level > 7) // abstractly picked number, but basically means we tried going 8 levels up. Something is wrong if youre THAT deep anyway - break - loc_check = loc_check.loc - recursion_level++ - if(isbelly(loc_check)) - return loc_check - return null - -/proc/get_all_prey_recursive(var/mob/living/L, var/client_check = 1) // returns all prey inside the target as well all prey of target's prey, as well as all prey inside target's prey, etc. - var/list/result = list() - - if(!istype(L) || !(L.vore_organs) || !(L.vore_organs.len)) - return result - - for(var/obj/belly/B in L.vore_organs) - for(var/mob/living/P in B.contents) - if(istype(P)) - if(client_check && P.client) - result |= P - result |= get_all_prey_recursive(P, client_check) - - return result - -/proc/random_color(saturated) //Returns a random color. If saturated is true, it will avoid pure white or pure black - var/r = rand(1,255) - var/g = rand(1,255) - var/b = rand(1,255) - - if(saturated) //Let's make sure we don't get too close to pure black or pure white, as they won't look good with grayscale sprites - if(r + g + b < 50) - r = r + rand(5,20) - g = g + rand(5,20) - b = b + rand(5,20) - else if (r + g + b > 700) - r = r - rand(5,50) - g = g - rand(5,50) - b = b - rand(5,50) - - var/color = rgb(r, g, b) - return color +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/proc/dopage(src,target) + var/href_list + var/href + href_list = params2list("src=\ref[src]&[target]=1") + href = "src=\ref[src];[target]=1" + src:temphtml = null + src:Topic(href, href_list) + return null + +/proc/is_on_same_plane_or_station(var/z1, var/z2) + if(z1 == z2) + return 1 + if((z1 in using_map.station_levels) && (z2 in using_map.station_levels)) + return 1 + return 0 + +/proc/max_default_z_level() + var/max_z = 0 + for(var/z in using_map.station_levels) + max_z = max(z, max_z) + for(var/z in using_map.admin_levels) + max_z = max(z, max_z) + for(var/z in using_map.player_levels) + max_z = max(z, max_z) + return max_z + +/proc/get_area(atom/A) + RETURN_TYPE(/area) + if(isarea(A)) + return A + var/turf/T = get_turf(A) + return T ? T.loc : null + +/proc/get_area_name(atom/X, format_text = FALSE) + var/area/A = isarea(X) ? X : get_area(X) + if(!A) + return null + return format_text ? format_text(A.name) : A.name + +/** Checks if any living humans are in a given area. */ +/proc/area_is_occupied(var/area/myarea) + // Testing suggests looping over human_mob_list is quicker than looping over area contents + for(var/mob/living/carbon/human/H in human_mob_list) + if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it. + continue + var/area/A = get_area(H) + if(A == myarea) //The loc of a turf is the area it is in. + return 1 + return 0 + +/proc/in_range(source, user) + if(get_dist(source, user) <= 1) + return 1 + + return 0 //not in range and not telekinetic + +// Like view but bypasses luminosity check + +/proc/hear(var/range, var/atom/source) + + var/lum = source.luminosity + source.luminosity = 6 + + var/list/heard = view(range, source) + source.luminosity = lum + + return heard + +/proc/isStationLevel(var/level) + return level in using_map.station_levels + +/proc/isNotStationLevel(var/level) + return !isStationLevel(level) + +/proc/isPlayerLevel(var/level) + return level in using_map.player_levels + +/proc/isAdminLevel(var/level) + return level in using_map.admin_levels + +/proc/isNotAdminLevel(var/level) + return !isAdminLevel(level) + +/proc/circlerange(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/atom/T in range(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + + //turfs += centerturf + return turfs + +/proc/circleview(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/atoms = new/list() + var/rsq = radius * (radius+0.5) + + for(var/atom/A in view(radius, centerturf)) + var/dx = A.x - centerturf.x + var/dy = A.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + atoms += A + + //turfs += centerturf + return atoms + +/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive) + if(!centre) + return + + var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z) + var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z) + return block(x1y1,x2y2) + +/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) + var/dx = Loc1.x - Loc2.x + var/dy = Loc1.y - Loc2.y + + var/dist = sqrt(dx**2 + dy**2) + + return dist + +/proc/circlerangeturfs(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/turf/T in range(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + return turfs + +/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/turf/T in view(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + return turfs + + + +//var/debug_mob = 0 + +// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. +// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, +// being unable to hear people due to being in a box within a bag. + +/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1, var/ignore_show_messages = 0) + + if(!recursion_limit) + return L + + for(var/I in O.contents) + + if(ismob(I)) + if(!sight_check || isInSight(I, O)) + L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) + if(include_mobs) + if(client_check) + var/mob/M = I + if(M.client) + L |= M + else + L |= I + + else if(istype(I,/obj/)) + var/obj/check_obj = I + if(ignore_show_messages || check_obj.show_messages) + if(!sight_check || isInSight(I, O)) + L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) + if(include_objects) + L |= I + + return L + +// Returns a list of mobs and/or objects in range of R from source. Used in radio and say code. + +/proc/get_mobs_or_objects_in_view(var/R, var/atom/source, var/include_mobs = 1, var/include_objects = 1) + + var/turf/T = get_turf(source) + var/list/hear = list() + + if(!T) + return hear + + var/list/range = hear(R, T) + + for(var/I in range) + if(ismob(I)) + hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) + if(include_mobs) + var/mob/M = I + if(M.client) + hear += M + else if(istype(I,/obj/)) + hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) + var/obj/O = I + if(O.show_messages && include_objects) + hear += I + + return hear + +//CHOMPEdit - entire proc changed basically to use recursive listening +/proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) + + set background = 1 + . = list() + // Returns a list of mobs who can hear any of the radios given in @radios + for(var/obj/item/device/radio/R as anything in radios) + if(get_turf(R)) + for(var/turf/T in R.can_broadcast_to()) //CHOMPEdit + for (var/atom/movable/hearing in T) + if (hearing.recursive_listeners) + . |= hearing.recursive_listeners + + for (var/mob/M as anything in .) + if (!istype(M) || !M.client) + . -= M + for (var/mob/observer/O in player_list) + . |= O + +/mob/proc/can_hear_radio(var/list/hearturfs) + return FALSE + +/mob/living/can_hear_radio(var/list/hearturfs) + return get_turf(src) in hearturfs + +/mob/living/silicon/robot/can_hear_radio(var/list/hearturfs) + var/turf/T = get_turf(src) + var/obj/item/device/radio/borg/R = hearturfs[T] // this should be an assoc list of turf-to-radio + + // We heard it on our own radio? We use power for that. + if(istype(R) && R.myborg == src) + var/datum/robot_component/CO = get_component("radio") + if(!CO || !is_component_functioning("radio") || !cell_use_power(CO.active_usage)) + return FALSE // Sorry, couldn't hear + + return R // radio, true, false, what's the difference + +/mob/observer/dead/can_hear_radio(var/list/hearturfs) + return is_preference_enabled(/datum/client_preference/ghost_radio) + + +//Uses dview to quickly return mobs and objects in view, +// then adds additional mobs or objects if they are in range 'smartly', +// based on their presence in lists of players or registered objects +// Type: 1-audio, 2-visual, 0-neither +/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/type = 1, var/remote_ghosts = TRUE) + var/list/mobs = list() + var/list/objs = list() + + var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) + var/list/hearturfs = list() + + // Openspace visibility handling + // Below turfs we can see + for(var/turf/simulated/open/O in hear) + var/turf/U = GetBelow(O) + while(istype(U)) + hearturfs |= U + if(isopenspace(U)) + U = GetBelow(U) + else + U = null + + // Above us + var/above_range = range + var/turf/Ab = GetAbove(T) + while(isopenspace(Ab) && --above_range > 0) + hear |= dview(above_range,Ab,INVISIBILITY_MAXIMUM) + Ab = GetAbove(Ab) + + for(var/thing in hear) + if(istype(thing, /obj)) //Can't use isobj() because /atom/movable returns true in that + objs += thing + hearturfs |= get_turf(thing) + if(ismob(thing)) + mobs += thing + hearturfs |= get_turf(thing) + + //A list of every mob with a client + for(var/mob in player_list) + if(!ismob(mob)) + player_list -= mob + continue + //VOREStation Edit End - Trying to fix some vorestation bug. + if(get_turf(mob) in hearturfs) + mobs |= mob + continue + + var/mob/M = mob + if(M && M.stat == DEAD && remote_ghosts && !M.forbid_seeing_deadchat) + switch(type) + if(1) //Audio messages use ghost_ears + if(M.is_preference_enabled(/datum/client_preference/ghost_ears)) + mobs |= M + if(2) //Visual messages use ghost_sight + if(M.is_preference_enabled(/datum/client_preference/ghost_sight)) + mobs |= M + + //For objects below the top level who still want to hear + for(var/obj in listening_objects) + if(get_turf(obj) in hearturfs) + objs |= obj + + return list("mobs" = mobs, "objs" = objs) + +/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) + var/turf/T + if(X1==X2) + if(Y1==Y2) + return 1 //Light cannot be blocked on same tile + else + var/s = SIGN(Y2-Y1) + Y1+=s + while(Y1!=Y2) + T=locate(X1,Y1,Z) + if(T.opacity) + return 0 + Y1+=s + else + var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) + var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles + var/signX = SIGN(X2-X1) + var/signY = SIGN(Y2-Y1) + if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie) + if(dy > 0) + return get_step(start, SOUTH) + else + return get_step(start, NORTH) + else + if(dx > 0) + return get_step(start, WEST) + else + return get_step(start, EAST) + +/proc/get_mob_by_key(var/key) + for(var/mob/M in mob_list) + if(M.ckey == lowertext(key)) + return M + return null + + +// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. +/proc/get_active_candidates(var/buffer = 1) + + var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn + var/i = 0 + while(candidates.len <= 0 && i < 5) + for(var/mob/observer/dead/G in player_list) + if(((G.client.inactivity/10)/60) <= buffer + i) // the most active players are more likely to become an alien + if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) + candidates += G.key + i++ + return candidates + +// Same as above but for alien candidates. + +/proc/get_alien_candidates() + + var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn + var/i = 0 + while(candidates.len <= 0 && i < 5) + for(var/mob/observer/dead/G in player_list) + if(G.client.prefs.be_special & BE_ALIEN) + if(((G.client.inactivity/10)/60) <= ALIEN_SELECT_AFK_BUFFER + i) // the most active players are more likely to become an alien + if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) + candidates += G.key + i++ + return candidates + +/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) + if(!isobj(O)) O = new /obj/screen/text() + O.maptext = maptext + O.maptext_height = maptext_height + O.maptext_width = maptext_width + O.screen_loc = screen_loc + return O + +/proc/Show2Group4Delay(obj/O, list/group, delay=0) + if(!isobj(O)) return + if(!group) group = GLOB.clients + for(var/client/C in group) + C.screen += O + if(delay) + spawn(delay) + for(var/client/C in group) + C.screen -= O + +/datum/projectile_data + var/src_x + var/src_y + var/time + var/distance + var/power_x + var/power_y + var/dest_x + var/dest_y + +/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \ + var/power_x, var/power_y, var/dest_x, var/dest_y) + src.src_x = src_x + src.src_y = src_y + src.time = time + src.distance = distance + src.power_x = power_x + src.power_y = power_y + src.dest_x = dest_x + src.dest_y = dest_y + +/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power) + + // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], + // rotated at [rotation] and with the power of [power] + // Thanks to VistaPOWA for this function + + var/power_x = power * cos(angle) + var/power_y = power * sin(angle) + var/time = 2* power_y / 10 //10 = g + + var/distance = time * power_x + + var/dest_x = src_x + distance*sin(rotation); + var/dest_y = src_y + distance*cos(rotation); + + return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) + +/proc/GetRedPart(const/hexa) + return hex2num(copytext(hexa,2,4)) + +/proc/GetGreenPart(const/hexa) + return hex2num(copytext(hexa,4,6)) + +/proc/GetBluePart(const/hexa) + return hex2num(copytext(hexa,6,8)) + +/proc/GetHexColors(const/hexa) + return list( + GetRedPart(hexa), + GetGreenPart(hexa), + GetBluePart(hexa) + ) + +/proc/MixColors(const/list/colors) + var/list/reds = list() + var/list/blues = list() + var/list/greens = list() + var/list/weights = list() + + for (var/i = 0, ++i <= colors.len) + reds.Add(GetRedPart(colors[i])) + blues.Add(GetBluePart(colors[i])) + greens.Add(GetGreenPart(colors[i])) + weights.Add(1) + + var/r = mixOneColor(weights, reds) + var/g = mixOneColor(weights, greens) + var/b = mixOneColor(weights, blues) + return rgb(r,g,b) + +/proc/mixOneColor(var/list/weight, var/list/color) + if (!weight || !color || length(weight)!=length(color)) + return 0 + + var/contents = length(weight) + var/i + + //normalize weights + var/listsum = 0 + for(i=1; i<=contents; i++) + listsum += weight[i] + for(i=1; i<=contents; i++) + weight[i] /= listsum + + //mix them + var/mixedcolor = 0 + for(i=1; i<=contents; i++) + mixedcolor += weight[i]*color[i] + mixedcolor = round(mixedcolor) + + //until someone writes a formal proof for this algorithm, let's keep this in +// if(mixedcolor<0x00 || mixedcolor>0xFF) +// return 0 + //that's not the kind of operation we are running here, nerd + mixedcolor=min(max(mixedcolor,0),255) + + return mixedcolor + +/** +* Gets the highest and lowest pressures from the tiles in cardinal directions +* around us, then checks the difference. +*/ +/proc/getOPressureDifferential(var/turf/loc) + var/minp=16777216; + var/maxp=0; + for(var/dir in GLOB.cardinal) + var/turf/simulated/T=get_turf(get_step(loc,dir)) + var/cp=0 + if(T && istype(T) && T.zone) + var/datum/gas_mixture/environment = T.return_air() + cp = environment.return_pressure() + else + if(istype(T,/turf/simulated)) + continue + if(cpmaxp)maxp=cp + return abs(minp-maxp) + +/proc/convert_k2c(var/temp) + return ((temp - T0C)) + +/proc/convert_c2k(var/temp) + return ((temp + T0C)) + +/proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature")) + var/list/temps = new/list(4) + for(var/dir in GLOB.cardinal) + var/direction + switch(dir) + if(NORTH) + direction = 1 + if(SOUTH) + direction = 2 + if(EAST) + direction = 3 + if(WEST) + direction = 4 + var/turf/simulated/T=get_turf(get_step(loc,dir)) + var/list/rstats = new /list(stats.len) + if(T && istype(T) && T.zone) + var/datum/gas_mixture/environment = T.return_air() + for(var/i=1;i<=stats.len;i++) + if(stats[i] == "pressure") + rstats[i] = environment.return_pressure() + else + rstats[i] = environment.vars[stats[i]] + else if(istype(T, /turf/simulated)) + rstats = null // Exclude zone (wall, door, etc). + else if(istype(T, /turf)) + // Should still work. (/turf/return_air()) + var/datum/gas_mixture/environment = T.return_air() + for(var/i=1;i<=stats.len;i++) + if(stats[i] == "pressure") + rstats[i] = environment.return_pressure() + else + rstats[i] = environment.vars[stats[i]] + temps[direction] = rstats + return temps + +/proc/MinutesToTicks(var/minutes) + return SecondsToTicks(60 * minutes) + +/proc/SecondsToTicks(var/seconds) + return seconds * 10 + +/proc/window_flash(var/client_or_usr) + if (!client_or_usr) + return + winset(client_or_usr, "mainwindow", "flash=5") + +/** + * Get a bounding box of a list of atoms. + * + * Arguments: + * - atoms - List of atoms. Can accept output of view() and range() procs. + * + * Returns: list(x1, y1, x2, y2) + */ +/proc/get_bbox_of_atoms(list/atoms) + var/list/list_x = list() + var/list/list_y = list() + for(var/_a in atoms) + var/atom/a = _a + list_x += a.x + list_y += a.y + return list( + min(list_x), + min(list_y), + max(list_x), + max(list_y)) + +// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. +// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, +// being unable to hear people due to being in a box within a bag. + +/proc/recursive_mob_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1) + + //GLOB.debug_mob += O.contents.len + if(!recursion_limit) + return L + for(var/atom/A in O.contents) + + if(ismob(A)) + var/mob/M = A + if(client_check && !M.client) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + continue + if(sight_check && !isInSight(A, O)) + continue + L |= M + //log_world("[recursion_limit] = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])") + + else if(include_radio && istype(A, /obj/item/radio)) + if(sight_check && !isInSight(A, O)) + continue + L |= A + + if(isobj(A) || ismob(A)) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + return L + +// The old system would loop through lists for a total of 5000 per function call, in an empty server. +// This new system will loop at around 1000 in an empty server. + +/proc/get_mobs_in_view(var/R, var/atom/source, var/include_clientless = FALSE) + // Returns a list of mobs in range of R from source. Used in radio and say code. + + var/turf/T = get_turf(source) + var/list/hear = list() + + if(!T) + return hear + + var/list/range = hear(R, T) + + for(var/atom/A in range) + if(ismob(A)) + var/mob/M = A + if(M.client || include_clientless) + hear += M + //log_world("Start = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])") + else if(istype(A, /obj/item/radio)) + hear += A + + if(isobj(A) || ismob(A)) + hear |= recursive_mob_check(A, hear, 3, 1, 0, 1) + + return hear + +/proc/get_belly(var/atom/A) // return a belly we're in, one way or another; and if we aren't (or are too deep to comprehend being in belly), returns null + var/atom/loc_check = A.loc + var/recursion_level = 0 + while(loc_check && !isbelly(loc_check) && !isturf(loc_check)) + if(recursion_level > 7) // abstractly picked number, but basically means we tried going 8 levels up. Something is wrong if youre THAT deep anyway + break + loc_check = loc_check.loc + recursion_level++ + if(isbelly(loc_check)) + return loc_check + return null + +/proc/get_all_prey_recursive(var/mob/living/L, var/client_check = 1) // returns all prey inside the target as well all prey of target's prey, as well as all prey inside target's prey, etc. + var/list/result = list() + + if(!istype(L) || !(L.vore_organs) || !(L.vore_organs.len)) + return result + + for(var/obj/belly/B in L.vore_organs) + for(var/mob/living/P in B.contents) + if(istype(P)) + if(client_check && P.client) + result |= P + result |= get_all_prey_recursive(P, client_check) + + return result + +/proc/random_color(saturated) //Returns a random color. If saturated is true, it will avoid pure white or pure black + var/r = rand(1,255) + var/g = rand(1,255) + var/b = rand(1,255) + + if(saturated) //Let's make sure we don't get too close to pure black or pure white, as they won't look good with grayscale sprites + if(r + g + b < 50) + r = r + rand(5,20) + g = g + rand(5,20) + b = b + rand(5,20) + else if (r + g + b > 700) + r = r - rand(5,50) + g = g - rand(5,50) + b = b - rand(5,50) + + var/color = rgb(r, g, b) + return color diff --git a/code/_helpers/global_lists_ch.dm b/code/_helpers/global_lists_ch.dm index 71db6e379a..3af2ebac51 100644 --- a/code/_helpers/global_lists_ch.dm +++ b/code/_helpers/global_lists_ch.dm @@ -1,193 +1,193 @@ - -//Reagent Vore belly Sounds -var/global/list/vore_reagent_sounds = list( - 'sound/vore/walkslosh1.ogg', - 'sound/vore/walkslosh2.ogg', - 'sound/vore/walkslosh3.ogg', - 'sound/vore/walkslosh4.ogg', - 'sound/vore/walkslosh5.ogg', - 'sound/vore/walkslosh6.ogg', - 'sound/vore/walkslosh7.ogg', - 'sound/vore/walkslosh8.ogg', - 'sound/vore/walkslosh9.ogg', - 'sound/vore/walkslosh10.ogg', - "None" = null) - -var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints - -/var/global/list/existing_metroids = list() //Global variable for tracking metroids for the event announcement. Needs to go here for load order. - -//stuff that only synths can eat -var/global/list/edible_tech = list(/obj/item/weapon/cell, - /obj/item/weapon/circuitboard, - /obj/item/integrated_circuit, - /obj/item/broken_device, - /obj/item/brokenbug, - ) - -var/global/list/item_digestion_blacklist = list( - /obj/item/weapon/hand_tele, - /obj/item/weapon/card/id, - /obj/item/weapon/gun, - /obj/item/weapon/pinpointer, - /obj/item/clothing/shoes/magboots, - /obj/item/areaeditor/blueprints, - /obj/item/weapon/disk/nuclear, - /obj/item/device/perfect_tele_beacon, - /obj/item/organ/internal/brain/slime, - /obj/item/device/mmi/digital/posibrain, - /obj/item/weapon/rig/protean) - -// Options for transforming into a different mob in virtual reality. -var/global/list/vr_mob_tf_options = list( - "Borg" = /mob/living/silicon/robot, - "Cortical borer" = /mob/living/simple_mob/animal/borer/non_antag, - "Hyena" = /mob/living/simple_mob/animal/hyena, - "Giant spider" = /mob/living/simple_mob/animal/giant_spider/thermic, - "Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, - "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot, - "Cat" = /mob/living/simple_mob/animal/passive/cat, - "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, - "Squirrel" = /mob/living/simple_mob/vore/squirrel, - "Frog" = /mob/living/simple_mob/vore/aggressive/frog, - "Seagull" =/mob/living/simple_mob/vore/seagull, - "Fox" = /mob/living/simple_mob/animal/passive/fox, - "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, - "Shantak" = /mob/living/simple_mob/animal/sif/shantak, - "Goose" = /mob/living/simple_mob/animal/space/goose, - "Space shark" = /mob/living/simple_mob/animal/space/shark, - "Synx" = /mob/living/simple_mob/animal/synx, - "Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf, - "Construct Artificer" = /mob/living/simple_mob/construct/artificer, - "Tech golem" = /mob/living/simple_mob/mechanical/technomancer_golem, - "Metroid" = /mob/living/simple_mob/metroid/juvenile/baby, - "Otie" = /mob/living/simple_mob/vore/otie/cotie/chubby, - "Shadekin" = /mob/living/simple_mob/shadekin, - "Slime" = /mob/living/simple_mob/slime/xenobio/metal, - "Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound, - "Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw/den, - "Weretiger" = /mob/living/simple_mob/vore/weretiger, - "Mimic" = /mob/living/simple_mob/vore/aggressive/mimic/floor/plating, - "Giant rat" = /mob/living/simple_mob/vore/aggressive/rat, - "Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, - "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, - "Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost, - "Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, - "Bee" = /mob/living/simple_mob/vore/bee, - //"Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly, //Currently adds 12 bellies to the user when transformed into. Do not uncomment without fixing this. - "Riftwalker" = /mob/living/simple_mob/vore/demon/wendigo, - "Horse" = /mob/living/simple_mob/vore/horse/big, - "Morph" = /mob/living/simple_mob/vore/morph, - "Leopardmander" = /mob/living/simple_mob/vore/leopardmander, - "Rabbit" = /mob/living/simple_mob/vore/rabbit, - "Red panda" = /mob/living/simple_mob/vore/redpanda, - "Sect drone" = /mob/living/simple_mob/vore/sect_drone, - "Armalis vox" = /mob/living/simple_mob/vox/armalis, - "Xeno hunter" = /mob/living/simple_mob/xeno_ch/hunter, - "Xeno queen" = /mob/living/simple_mob/xeno_ch/queen/maid, - "Xeno sentinel" = /mob/living/simple_mob/xeno_ch/sentinel, - "Space carp" = /mob/living/simple_mob/animal/space/carp, - "Jelly blob" = /mob/living/simple_mob/vore/jelly, - "SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, - "Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker, - "Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper, - "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube) - -var/global/list/vr_mob_spawner_options = list( - "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot, - "Rabbit" = /mob/living/simple_mob/vore/rabbit, - "Cat" = /mob/living/simple_mob/animal/passive/cat, - "Fox" = /mob/living/simple_mob/animal/passive/fox, - "Cow" = /mob/living/simple_mob/animal/passive/cow, - "Dog" = /mob/living/simple_mob/vore/woof, - "Horse" = /mob/living/simple_mob/vore/horse/big, - "Hippo" = /mob/living/simple_mob/vore/hippo, - "Sheep" = /mob/living/simple_mob/vore/sheep, - "Squirrel" = /mob/living/simple_mob/vore/squirrel, - "Red panda" = /mob/living/simple_mob/vore/redpanda, - "Fennec" = /mob/living/simple_mob/vore/fennec, - "Seagull" =/mob/living/simple_mob/vore/seagull, - "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, - "Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, - "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, - "Goose" = /mob/living/simple_mob/animal/space/goose, - "Frog" = /mob/living/simple_mob/vore/aggressive/frog, - "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, - "Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf, - "Space bumblebee" = /mob/living/simple_mob/vore/bee, - "Space bear" = /mob/living/simple_mob/animal/space/bear, - "Otie" = /mob/living/simple_mob/vore/otie, - "Mutated otie" =/mob/living/simple_mob/vore/otie/feral, - "Red otie" = /mob/living/simple_mob/vore/otie/red, - "Giant rat" = /mob/living/simple_mob/vore/aggressive/rat, - "Giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake, - "Hyena" = /mob/living/simple_mob/animal/hyena, - "Space shark" = /mob/living/simple_mob/animal/space/shark, - "Shantak" = /mob/living/simple_mob/animal/sif/shantak, - "Kururak" = /mob/living/simple_mob/animal/sif/kururak, - "Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, - "Slug" = /mob/living/simple_mob/vore/slug, - "Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, - "Weretiger" = /mob/living/simple_mob/vore/weretiger, - "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, - "Star treader" = /mob/living/simple_mob/vore/alienanimals/startreader, - "Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost, - "Space carp" = /mob/living/simple_mob/animal/space/carp, - "Space jelly fish" = /mob/living/simple_mob/vore/alienanimals/space_jellyfish, - "Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker, - "Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper, - "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube, - "Panther" = /mob/living/simple_mob/vore/aggressive/panther, - "Lizard man" = /mob/living/simple_mob/vore/aggressive/lizardman, - "Pakkun" = /mob/living/simple_mob/vore/pakkun, - "Synx" = /mob/living/simple_mob/animal/synx, - "Jelly blob" = /mob/living/simple_mob/vore/jelly, - "Voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino, - "Baby metroid" = /mob/living/simple_mob/metroid/juvenile/baby, - "Super metroid" = /mob/living/simple_mob/metroid/juvenile/super, - "Alpha metroid" = /mob/living/simple_mob/metroid/juvenile/alpha, - "Gamma metroid" = /mob/living/simple_mob/metroid/juvenile/gamma, - "Zeta metroid" = /mob/living/simple_mob/metroid/juvenile/zeta, - "Omega metroid" = /mob/living/simple_mob/metroid/juvenile/omega, - "Queen metroid" = /mob/living/simple_mob/metroid/juvenile/queen, - "Xeno hunter" = /mob/living/simple_mob/animal/space/alien, - "Xeno sentinel" = /mob/living/simple_mob/animal/space/alien/sentinel, - "Xeno Praetorian" = /mob/living/simple_mob/animal/space/alien/sentinel/praetorian, - "Xeno queen" = /mob/living/simple_mob/animal/space/alien/queen, - "Xeno Empress" = /mob/living/simple_mob/animal/space/alien/queen/empress, - "Xeno Queen Mother" = /mob/living/simple_mob/animal/space/alien/queen/empress/mother, - "Defanged xeno" = /mob/living/simple_mob/vore/xeno_defanged, - "Sect drone" = /mob/living/simple_mob/vore/sect_drone, - "Sect queen" = /mob/living/simple_mob/vore/sect_queen, - "Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw, - "Great White Wolf" = /mob/living/simple_mob/vore/greatwolf, - "Great Black Wolf" = /mob/living/simple_mob/vore/greatwolf/black, - "Solar grub" = /mob/living/simple_mob/vore/solargrub, - "Pitcher plant" = /mob/living/simple_mob/vore/pitcher_plant, - "Red gummy kobold" = /mob/living/simple_mob/vore/candy/redcabold, - "Blue gummy kobold" = /mob/living/simple_mob/vore/candy/bluecabold, - "Yellow gummy kobold" = /mob/living/simple_mob/vore/candy/yellowcabold, - "Marshmellow serpent" = /mob/living/simple_mob/vore/candy/marshmellowserpent, - "Riftwalker" = /mob/living/simple_mob/vore/demon, - "Wendigo" = /mob/living/simple_mob/vore/demon/wendigo, - "Shadekin" = /mob/living/simple_mob/shadekin, - "Catgirl" = /mob/living/simple_mob/vore/catgirl, - "Wolfgirl" = /mob/living/simple_mob/vore/wolfgirl, - "Wolftaur" = /mob/living/simple_mob/vore/wolftaur, - "Lamia" = /mob/living/simple_mob/vore/lamia, - "Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound, - "Corrupt corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi, - "SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, - "Cultist Teshari" = /mob/living/simple_mob/humanoid/cultist/tesh, - "Burning Mage" = /mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball, - "Converted" = /mob/living/simple_mob/humanoid/cultist/noodle, - "Cultist Teshari Mage" = /mob/living/simple_mob/humanoid/cultist/castertesh, - "Monkey" = /mob/living/carbon/human/monkey, - "Wolpin" = /mob/living/carbon/human/wolpin, - "Sparra" = /mob/living/carbon/human/sparram, - "Saru" = /mob/living/carbon/human/sergallingm, - "Sobaka" = /mob/living/carbon/human/sharkm, - "Farwa" = /mob/living/carbon/human/farwa, - "Neaera" = /mob/living/carbon/human/neaera, - "Stok" = /mob/living/carbon/human/stok + +//Reagent Vore belly Sounds +var/global/list/vore_reagent_sounds = list( + 'sound/vore/walkslosh1.ogg', + 'sound/vore/walkslosh2.ogg', + 'sound/vore/walkslosh3.ogg', + 'sound/vore/walkslosh4.ogg', + 'sound/vore/walkslosh5.ogg', + 'sound/vore/walkslosh6.ogg', + 'sound/vore/walkslosh7.ogg', + 'sound/vore/walkslosh8.ogg', + 'sound/vore/walkslosh9.ogg', + 'sound/vore/walkslosh10.ogg', + "None" = null) + +var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints + +/var/global/list/existing_metroids = list() //Global variable for tracking metroids for the event announcement. Needs to go here for load order. + +//stuff that only synths can eat +var/global/list/edible_tech = list(/obj/item/weapon/cell, + /obj/item/weapon/circuitboard, + /obj/item/integrated_circuit, + /obj/item/broken_device, + /obj/item/brokenbug, + ) + +var/global/list/item_digestion_blacklist = list( + /obj/item/weapon/hand_tele, + /obj/item/weapon/card/id, + /obj/item/weapon/gun, + /obj/item/weapon/pinpointer, + /obj/item/clothing/shoes/magboots, + /obj/item/areaeditor/blueprints, + /obj/item/weapon/disk/nuclear, + /obj/item/device/perfect_tele_beacon, + /obj/item/organ/internal/brain/slime, + /obj/item/device/mmi/digital/posibrain, + /obj/item/weapon/rig/protean) + +// Options for transforming into a different mob in virtual reality. +var/global/list/vr_mob_tf_options = list( + "Borg" = /mob/living/silicon/robot, + "Cortical borer" = /mob/living/simple_mob/animal/borer/non_antag, + "Hyena" = /mob/living/simple_mob/animal/hyena, + "Giant spider" = /mob/living/simple_mob/animal/giant_spider/thermic, + "Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, + "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot, + "Cat" = /mob/living/simple_mob/animal/passive/cat, + "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, + "Squirrel" = /mob/living/simple_mob/vore/squirrel, + "Frog" = /mob/living/simple_mob/vore/aggressive/frog, + "Seagull" =/mob/living/simple_mob/vore/seagull, + "Fox" = /mob/living/simple_mob/animal/passive/fox, + "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, + "Shantak" = /mob/living/simple_mob/animal/sif/shantak, + "Goose" = /mob/living/simple_mob/animal/space/goose, + "Space shark" = /mob/living/simple_mob/animal/space/shark, + "Synx" = /mob/living/simple_mob/animal/synx, + "Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf, + "Construct Artificer" = /mob/living/simple_mob/construct/artificer, + "Tech golem" = /mob/living/simple_mob/mechanical/technomancer_golem, + "Metroid" = /mob/living/simple_mob/metroid/juvenile/baby, + "Otie" = /mob/living/simple_mob/vore/otie/cotie/chubby, + "Shadekin" = /mob/living/simple_mob/shadekin, + "Slime" = /mob/living/simple_mob/slime/xenobio/metal, + "Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound, + "Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw/den, + "Weretiger" = /mob/living/simple_mob/vore/weretiger, + "Mimic" = /mob/living/simple_mob/vore/aggressive/mimic/floor/plating, + "Giant rat" = /mob/living/simple_mob/vore/aggressive/rat, + "Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, + "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, + "Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost, + "Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, + "Bee" = /mob/living/simple_mob/vore/bee, + //"Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly, //Currently adds 12 bellies to the user when transformed into. Do not uncomment without fixing this. + "Riftwalker" = /mob/living/simple_mob/vore/demon/wendigo, + "Horse" = /mob/living/simple_mob/vore/horse/big, + "Morph" = /mob/living/simple_mob/vore/morph, + "Leopardmander" = /mob/living/simple_mob/vore/leopardmander, + "Rabbit" = /mob/living/simple_mob/vore/rabbit, + "Red panda" = /mob/living/simple_mob/vore/redpanda, + "Sect drone" = /mob/living/simple_mob/vore/sect_drone, + "Armalis vox" = /mob/living/simple_mob/vox/armalis, + "Xeno hunter" = /mob/living/simple_mob/xeno_ch/hunter, + "Xeno queen" = /mob/living/simple_mob/xeno_ch/queen/maid, + "Xeno sentinel" = /mob/living/simple_mob/xeno_ch/sentinel, + "Space carp" = /mob/living/simple_mob/animal/space/carp, + "Jelly blob" = /mob/living/simple_mob/vore/jelly, + "SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, + "Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker, + "Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper, + "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube) + +var/global/list/vr_mob_spawner_options = list( + "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot, + "Rabbit" = /mob/living/simple_mob/vore/rabbit, + "Cat" = /mob/living/simple_mob/animal/passive/cat, + "Fox" = /mob/living/simple_mob/animal/passive/fox, + "Cow" = /mob/living/simple_mob/animal/passive/cow, + "Dog" = /mob/living/simple_mob/vore/woof, + "Horse" = /mob/living/simple_mob/vore/horse/big, + "Hippo" = /mob/living/simple_mob/vore/hippo, + "Sheep" = /mob/living/simple_mob/vore/sheep, + "Squirrel" = /mob/living/simple_mob/vore/squirrel, + "Red panda" = /mob/living/simple_mob/vore/redpanda, + "Fennec" = /mob/living/simple_mob/vore/fennec, + "Seagull" =/mob/living/simple_mob/vore/seagull, + "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, + "Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, + "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, + "Goose" = /mob/living/simple_mob/animal/space/goose, + "Frog" = /mob/living/simple_mob/vore/aggressive/frog, + "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, + "Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf, + "Space bumblebee" = /mob/living/simple_mob/vore/bee, + "Space bear" = /mob/living/simple_mob/animal/space/bear, + "Otie" = /mob/living/simple_mob/vore/otie, + "Mutated otie" =/mob/living/simple_mob/vore/otie/feral, + "Red otie" = /mob/living/simple_mob/vore/otie/red, + "Giant rat" = /mob/living/simple_mob/vore/aggressive/rat, + "Giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake, + "Hyena" = /mob/living/simple_mob/animal/hyena, + "Space shark" = /mob/living/simple_mob/animal/space/shark, + "Shantak" = /mob/living/simple_mob/animal/sif/shantak, + "Kururak" = /mob/living/simple_mob/animal/sif/kururak, + "Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, + "Slug" = /mob/living/simple_mob/vore/slug, + "Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, + "Weretiger" = /mob/living/simple_mob/vore/weretiger, + "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, + "Star treader" = /mob/living/simple_mob/vore/alienanimals/startreader, + "Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost, + "Space carp" = /mob/living/simple_mob/animal/space/carp, + "Space jelly fish" = /mob/living/simple_mob/vore/alienanimals/space_jellyfish, + "Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker, + "Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper, + "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube, + "Panther" = /mob/living/simple_mob/vore/aggressive/panther, + "Lizard man" = /mob/living/simple_mob/vore/aggressive/lizardman, + "Pakkun" = /mob/living/simple_mob/vore/pakkun, + "Synx" = /mob/living/simple_mob/animal/synx, + "Jelly blob" = /mob/living/simple_mob/vore/jelly, + "Voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino, + "Baby metroid" = /mob/living/simple_mob/metroid/juvenile/baby, + "Super metroid" = /mob/living/simple_mob/metroid/juvenile/super, + "Alpha metroid" = /mob/living/simple_mob/metroid/juvenile/alpha, + "Gamma metroid" = /mob/living/simple_mob/metroid/juvenile/gamma, + "Zeta metroid" = /mob/living/simple_mob/metroid/juvenile/zeta, + "Omega metroid" = /mob/living/simple_mob/metroid/juvenile/omega, + "Queen metroid" = /mob/living/simple_mob/metroid/juvenile/queen, + "Xeno hunter" = /mob/living/simple_mob/animal/space/alien, + "Xeno sentinel" = /mob/living/simple_mob/animal/space/alien/sentinel, + "Xeno Praetorian" = /mob/living/simple_mob/animal/space/alien/sentinel/praetorian, + "Xeno queen" = /mob/living/simple_mob/animal/space/alien/queen, + "Xeno Empress" = /mob/living/simple_mob/animal/space/alien/queen/empress, + "Xeno Queen Mother" = /mob/living/simple_mob/animal/space/alien/queen/empress/mother, + "Defanged xeno" = /mob/living/simple_mob/vore/xeno_defanged, + "Sect drone" = /mob/living/simple_mob/vore/sect_drone, + "Sect queen" = /mob/living/simple_mob/vore/sect_queen, + "Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw, + "Great White Wolf" = /mob/living/simple_mob/vore/greatwolf, + "Great Black Wolf" = /mob/living/simple_mob/vore/greatwolf/black, + "Solar grub" = /mob/living/simple_mob/vore/solargrub, + "Pitcher plant" = /mob/living/simple_mob/vore/pitcher_plant, + "Red gummy kobold" = /mob/living/simple_mob/vore/candy/redcabold, + "Blue gummy kobold" = /mob/living/simple_mob/vore/candy/bluecabold, + "Yellow gummy kobold" = /mob/living/simple_mob/vore/candy/yellowcabold, + "Marshmellow serpent" = /mob/living/simple_mob/vore/candy/marshmellowserpent, + "Riftwalker" = /mob/living/simple_mob/vore/demon, + "Wendigo" = /mob/living/simple_mob/vore/demon/wendigo, + "Shadekin" = /mob/living/simple_mob/shadekin, + "Catgirl" = /mob/living/simple_mob/vore/catgirl, + "Wolfgirl" = /mob/living/simple_mob/vore/wolfgirl, + "Wolftaur" = /mob/living/simple_mob/vore/wolftaur, + "Lamia" = /mob/living/simple_mob/vore/lamia, + "Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound, + "Corrupt corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi, + "SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, + "Cultist Teshari" = /mob/living/simple_mob/humanoid/cultist/tesh, + "Burning Mage" = /mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball, + "Converted" = /mob/living/simple_mob/humanoid/cultist/noodle, + "Cultist Teshari Mage" = /mob/living/simple_mob/humanoid/cultist/castertesh, + "Monkey" = /mob/living/carbon/human/monkey, + "Wolpin" = /mob/living/carbon/human/wolpin, + "Sparra" = /mob/living/carbon/human/sparram, + "Saru" = /mob/living/carbon/human/sergallingm, + "Sobaka" = /mob/living/carbon/human/sharkm, + "Farwa" = /mob/living/carbon/human/farwa, + "Neaera" = /mob/living/carbon/human/neaera, + "Stok" = /mob/living/carbon/human/stok ) \ No newline at end of file diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 532222b7f6..1f88b6e991 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -1,749 +1,749 @@ -#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) - -/icon/proc/MakeLying() - var/icon/I = new(src,dir=SOUTH) - I.BecomeLying() - return I - -/icon/proc/BecomeLying() - Turn(90) - Shift(SOUTH,6) - Shift(EAST,1) - -// Multiply all alpha values by this float -/icon/proc/ChangeOpacity(opacity = 1.0) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) - -// Convert to grayscale -/icon/proc/GrayScale() - MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) - -/icon/proc/ColorTone(tone) - GrayScale() - - var/list/TONE = rgb2num(tone) - var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) - - var/icon/upper = (255-gray) ? new(src) : null - - if(gray) - MapColors(255/gray,0,0, 0,255/gray,0, 0,0,255/gray, 0,0,0) - Blend(tone, ICON_MULTIPLY) - else SetIntensity(0) - if(255-gray) - upper.Blend(rgb(gray,gray,gray), ICON_SUBTRACT) - upper.MapColors((255-TONE[1])/(255-gray),0,0,0, 0,(255-TONE[2])/(255-gray),0,0, 0,0,(255-TONE[3])/(255-gray),0, 0,0,0,0, 0,0,0,1) - Blend(upper, ICON_ADD) - -// Take the minimum color of two icons; combine transparency as if blending with ICON_ADD -/icon/proc/MinColors(icon) - var/icon/I = new(src) - I.Opaque() - I.Blend(icon, ICON_SUBTRACT) - Blend(I, ICON_SUBTRACT) - -// Take the maximum color of two icons; combine opacity as if blending with ICON_OR -/icon/proc/MaxColors(icon) - var/icon/I - if(isicon(icon)) - I = new(icon) - else - // solid color - I = new(src) - I.Blend("#000000", ICON_OVERLAY) - I.SwapColor("#000000", null) - I.Blend(icon, ICON_OVERLAY) - var/icon/J = new(src) - J.Opaque() - I.Blend(J, ICON_SUBTRACT) - Blend(I, ICON_OR) - -// make this icon fully opaque--transparent pixels become black -/icon/proc/Opaque(background = "#000000") - SwapColor(null, background) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) - -// Change a grayscale icon into a white icon where the original color becomes the alpha -// I.e., black -> transparent, gray -> translucent white, white -> solid white -/icon/proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray - MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) - -/icon/proc/UseAlphaMask(mask) - Opaque() - AddAlphaMask(mask) - -/icon/proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) - // apply mask - Blend(M, ICON_ADD) - -/proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) //CHOMPEdit - Better rgb blend - var/list/RGB2 = ReadRGB(rgb2) - - // add missing alpha if needed - if(RGB1.len < RGB2.len) RGB1 += 255 - else if(RGB2.len < RGB1.len) RGB2 += 255 - var/usealpha = RGB1.len > 3 - - var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) - var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) - var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) - var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null - - return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) - -// Ported from /tg/station -// Creates a single icon from a given /atom or /image. Only the first argument is required. -/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) - //Define... defines. - var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") - - #define BLANK icon(flat_template) - #define SET_SELF(SETVAR) do { \ - var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ - if(A.alpha<255) { \ - SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ - } \ - if(A.color) { \ - if(islist(A.color)){ \ - SELF_ICON.MapColors(arglist(A.color))} \ - else{ \ - SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ - } \ - ##SETVAR=SELF_ICON;\ - } while (0) - #define INDEX_X_LOW 1 - #define INDEX_X_HIGH 2 - #define INDEX_Y_LOW 3 - #define INDEX_Y_HIGH 4 - - #define flatX1 flat_size[INDEX_X_LOW] - #define flatX2 flat_size[INDEX_X_HIGH] - #define flatY1 flat_size[INDEX_Y_LOW] - #define flatY2 flat_size[INDEX_Y_HIGH] - #define addX1 add_size[INDEX_X_LOW] - #define addX2 add_size[INDEX_X_HIGH] - #define addY1 add_size[INDEX_Y_LOW] - #define addY2 add_size[INDEX_Y_HIGH] - - if(!A || A.alpha <= 0) - return BLANK - - var/noIcon = FALSE - if(start) - if(!defdir) - defdir = A.dir - if(!deficon) - deficon = A.icon - if(!defstate) - defstate = A.icon_state - if(!defblend) - defblend = A.blend_mode - - var/curicon = A.icon || deficon - var/curstate = A.icon_state || defstate - - if(!((noIcon = (!curicon)))) - var/curstates = cached_icon_states(curicon) - if(!(curstate in curstates)) - if("" in curstates) - curstate = "" - else - noIcon = TRUE // Do not render this object. - - var/curdir - var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have - - // Use the requested dir or the atom's current dir - curdir = defdir || A.dir - - //Try to remove/optimize this section ASAP, CPU hog. //Slightly mitigated by implementing caching using cached_icon_states - //Determines if there's directionals. - if(!noIcon && curdir != SOUTH) - var/exist = FALSE - var/static/list/checkdirs = list(NORTH, EAST, WEST) - for(var/i in checkdirs) //Not using GLOB for a reason. - if(length(cached_icon_states(icon(curicon, curstate, i)))) - exist = TRUE - break - if(!exist) - base_icon_dir = SOUTH - // - - if(!base_icon_dir) - base_icon_dir = curdir - - ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0. - - var/curblend = A.blend_mode || defblend - - if(A.overlays.len || A.underlays.len) - var/icon/flat = BLANK - // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed - var/list/layers = list() - var/image/copy - // Add the atom's icon itself, without pixel_x/y offsets. - if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir) - copy.color = A.color - copy.alpha = A.alpha - copy.blend_mode = curblend - layers[copy] = A.layer - - // Loop through the underlays, then overlays, sorting them into the layers list - for(var/process_set in 0 to 1) - var/list/process = process_set? A.overlays : A.underlays - for(var/i in 1 to process.len) - var/image/current = process[i] - if(!current) - continue - if(current.plane != FLOAT_PLANE && current.plane != A.plane) - continue - var/current_layer = current.layer - if(current_layer < 0) - //if(current_layer <= -1000) - //return flat - current_layer = process_set + A.layer + current_layer / 1000 - - for(var/p in 1 to layers.len) - var/image/cmp = layers[p] - if(current_layer < layers[cmp]) - layers.Insert(p, current) - break - layers[current] = current_layer - - //sortTim(layers, GLOBAL_PROC_REF(cmp_image_layer_asc)) - - var/icon/add // Icon of overlay being added - - // Current dimensions of flattened icon - var/list/flat_size = list(1, flat.Width(), 1, flat.Height()) - // Dimensions of overlay being added - var/list/add_size[4] - - for(var/image/I as anything in layers) - if(I.alpha == 0) - continue - - if(I == copy) // 'I' is an /image based on the object being flattened. - curblend = BLEND_OVERLAY - add = icon(I.icon, I.icon_state, base_icon_dir) - else // 'I' is an appearance object. - add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) - if(!add) - continue - // Find the new dimensions of the flat icon to fit the added overlay - add_size = list( - min(flatX1, I.pixel_x+1), - max(flatX2, I.pixel_x+add.Width()), - min(flatY1, I.pixel_y+1), - max(flatY2, I.pixel_y+add.Height()) - ) - - if(flat_size ~! add_size) - // Resize the flattened icon so the new icon fits - flat.Crop( - addX1 - flatX1 + 1, - addY1 - flatY1 + 1, - addX2 - flatX1 + 1, - addY2 - flatY1 + 1 - ) - flat_size = add_size.Copy() - - // Blend the overlay into the flattened icon - flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) - - if(A.color) - if(islist(A.color)) - flat.MapColors(arglist(A.color)) - else - flat.Blend(A.color, ICON_MULTIPLY) - - if(A.alpha < 255) - flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) - - if(no_anim) - //Clean up repeated frames - var/icon/cleaned = new /icon() - cleaned.Insert(flat, "", SOUTH, 1, 0) - . = cleaned - else - . = icon(flat, "", SOUTH) - else //There's no overlays. - if(!noIcon) - SET_SELF(.) - - //Clear defines - #undef flatX1 - #undef flatX2 - #undef flatY1 - #undef flatY2 - #undef addX1 - #undef addX2 - #undef addY1 - #undef addY2 - - #undef INDEX_X_LOW - #undef INDEX_X_HIGH - #undef INDEX_Y_LOW - #undef INDEX_Y_HIGH - - #undef BLANK - #undef SET_SELF - -/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N - var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. - //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. - alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. - return alpha_mask//And now return the mask. - -//getFlatIcon but generates an icon that can face ALL four directions. The only four. -/proc/getCompoundIcon(atom/A) - var/icon/north = getFlatIcon(A,defdir=NORTH) - var/icon/south = getFlatIcon(A,defdir=SOUTH) - var/icon/east = getFlatIcon(A,defdir=EAST) - var/icon/west = getFlatIcon(A,defdir=WEST) - - //Starts with a blank icon because of byond bugs. - var/icon/full = icon('icons/effects/effects.dmi', "icon_state"="nothing") - - full.Insert(north,dir=NORTH) - full.Insert(south,dir=SOUTH) - full.Insert(east,dir=EAST) - full.Insert(west,dir=WEST) - qdel(north) - qdel(south) - qdel(east) - qdel(west) - return full - -/proc/downloadImage(atom/A, dir) - var/icon/this_icon = getFlatIcon(A,defdir=dir) - - usr << ftp(this_icon,"[A.name].png") - -/mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. - var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. - //Now we need to culculate overlays+underlays and add them together to form an image for a mask. - //var/icon/alpha_mask = getFlatIcon(src)//Accurate but SLOW. Not designed for running each tick. Could have other uses I guess. - var/icon/alpha_mask = getIconMask(src)//Which is why I created that proc. Also a little slow since it's blending a bunch of icons together but good enough. - opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. - opacity_icon.ChangeOpacity(0.4)//Front end for MapColors so it's fast. 0.5 means half opacity and looks the best in my opinion. - for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. - var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. - switch(i)//Now to determine offset so the result is somewhat blurred. - if(1) I.pixel_x-- - if(2) I.pixel_x++ - if(3) I.pixel_y-- - if(4) I.pixel_y++ - overlays += I//And finally add the overlay. - -/proc/getHologramIcon(icon/A, safety=1, no_color = FALSE)//If safety is on, a new icon is not created. - var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. - /* VOREStation Removal - For AI Vore effects - if(!no_color) - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(0.5)//Make it half transparent. - */ //VOREStation Removal End - var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect. - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - return flat_icon - -//For photo camera. -/proc/build_composite_icon(atom/A) - var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/image/I as anything in A.overlays) - composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite - -GLOBAL_LIST_EMPTY(icon_state_lists) -/proc/cached_icon_states(var/icon/I) - if(!I) - return list() - var/key = I - var/returnlist = GLOB.icon_state_lists[key] - if(!returnlist) - returnlist = icon_states(I) - if(isfile(I)) // It's something that will stick around - GLOB.icon_state_lists[key] = returnlist - return returnlist - -/proc/expire_states_cache(var/key) - if(GLOB.icon_state_lists[key]) - GLOB.icon_state_lists -= key - return TRUE - return FALSE - -GLOBAL_LIST_EMPTY(cached_examine_icons) -/proc/set_cached_examine_icon(var/atom/A, var/icon/I, var/expiry = 12000) - GLOB.cached_examine_icons[WEAKREF(A)] = I - if(expiry) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(uncache_examine_icon), WEAKREF(A)), expiry, TIMER_UNIQUE) - -/proc/get_cached_examine_icon(var/atom/A) - var/datum/weakref/WR = WEAKREF(A) - return GLOB.cached_examine_icons[WR] - -/proc/uncache_examine_icon(var/datum/weakref/WR) - GLOB.cached_examine_icons -= WR - -/proc/adjust_brightness(var/color, var/value) - if (!color) return "#FFFFFF" - if (!value) return color - - var/list/RGB = rgb2num(color) - RGB[1] = CLAMP(RGB[1]+value,0,255) - RGB[2] = CLAMP(RGB[2]+value,0,255) - RGB[3] = CLAMP(RGB[3]+value,0,255) - return rgb(RGB[1],RGB[2],RGB[3]) - -/proc/sort_atoms_by_layer(var/list/atoms) - // Comb sort icons based on levels - var/list/result = atoms.Copy() - var/gap = result.len - var/swapped = 1 - while (gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= result.len; i++) - var/atom/l = result[i] //Fucking hate - var/atom/r = result[gap+i] //how lists work here - if(l.layer > r.layer) //no "result[i].layer" for me - result.Swap(i, gap + i) - swapped = 1 - return result - -/proc/gen_hud_image(var/file, var/person, var/state, var/plane) - var/image/img = image(file, person, state) - img.plane = plane //Thanks Byond. - img.layer = MOB_LAYER-0.2 - img.appearance_flags = APPEARANCE_UI - return img - -/** -* Animate a 'halo' around an object. -* -* This proc is not exactly cheap. You'd be well advised to set up many-loops rather than call this super-often. getCompoundIcon is -* mostly to blame for this. If Byond ever implements a way to get something's icon more 'gently' than this, do that instead. -* -* @param A This is the atom to put the halo on -* @param simple_icons If set to TRUE, will just perform a very basic icon and icon_state steal. DO USE when possible. -* @param color This is the color for the halo -* @param anim_duration This decides how fast (or slow) the animation plays -* @param offset Mysterious variable that determines size of the halo's gap from icon -* @param loops How many times the animation loops -* @param grow_to Relative to the size of the icon, how big the halo grows while fading (don't use negatives for inward halos, use < 1) -* @param pixel_scale If you'd like the halo to use pixel scale or the default 'fuzzy' scale -*/ -/proc/animate_aura(var/atom/A, var/simple_icons, var/color = "#00FF22", var/anim_duration = 5, var/offset = 1, var/loops = 1, var/grow_to = 2, var/pixel_scale = FALSE) - ASSERT(A) - - //Take a guess at this, if they didn't set it - if(isnull(simple_icons)) - if(ismob(A)) - simple_icons = FALSE - else - simple_icons = TRUE - - //Get their icon - var/icon/hole - - if(simple_icons) - hole = icon(A.icon, A.icon_state) - else - hole = getCompoundIcon(A) - - hole.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White. - - //Make a bigger version - var/icon/grower = new(hole) - var/orig_width = grower.Width() - var/orig_height = grower.Height() - var/end_width = orig_width+(offset*2) - var/end_height = orig_height+(offset*2) - var/half_diff_width = (end_width-orig_width)*0.5 - var/half_diff_height = (end_height-orig_height)*0.5 - - //Make icon black - grower.SwapColor("#FFFFFF","#000000") //Black. - - //Scale both icons big so we don't have to deal with low-pixel garbage issues - grower.Scale(orig_width*10,orig_height*10) - hole.Scale(orig_width*9,orig_height*9) - - //Blend the hole in - grower.Blend(hole,ICON_OVERLAY, x = ((orig_width*10-orig_width*9)*0.5)+1, y = ((orig_height*10-orig_height*9)*0.5)+1) - - //Swap white to zero alpha - grower.SwapColor("#FFFFFF","#00000000") - - //Color it - grower.SwapColor("#000000",color) - - //Scale it to final height - grower.Scale(end_width,end_height) - - //Flick it onto them - var/image/img = image(grower,A) - if(pixel_scale) - img.appearance_flags |= PIXEL_SCALE - img.pixel_x = half_diff_width*-1 - img.pixel_y = half_diff_height*-1 - flick_overlay_view(img, A, anim_duration*loops, TRUE) - - //Animate it growing - animate(img, alpha = 0, transform = matrix()*grow_to, time = anim_duration, loop = loops) - -/// generates a filename for a given asset. -/// like generate_asset_name(), except returns the rsc reference and the rsc file hash as well as the asset name (sans extension) -/// used so that certain asset files dont have to be hashed twice -/proc/generate_and_hash_rsc_file(file, dmi_file_path) - var/rsc_ref = fcopy_rsc(file) - var/hash - //if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesnt have the bug described in http://www.byond.com/forum/post/2611357 - if(dmi_file_path) - hash = md5(rsc_ref) - else //otherwise, we need to do the expensive fcopy() workaround - hash = md5asfile(rsc_ref) - - return list(rsc_ref, hash, "asset.[hash]") - -/// Gets a dummy savefile for usage in icon generation. -/// Savefiles generated from this proc will be empty. -/proc/get_dummy_savefile(from_failure = FALSE) - var/static/next_id = 0 - if(next_id++ > 9) - next_id = 0 - var/savefile_path = "tmp/dummy-save-[next_id].sav" - try - if(fexists(savefile_path)) - fdel(savefile_path) - return new /savefile(savefile_path) - catch(var/exception/error) - // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldnt have - if(from_failure) // this *is* the retry, something fucked up - CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'") - return get_dummy_savefile(from_failure = TRUE) - -/** - * Converts an icon to base64. Operates by putting the icon in the iconCache savefile, - * exporting it as text, and then parsing the base64 from that. - * (This relies on byond automatically storing icons in savefiles as base64) - */ -/proc/icon2base64(icon/icon) - if (!isicon(icon)) - return FALSE - var/savefile/dummySave = get_dummy_savefile() - WRITE_FILE(dummySave["dummy"], icon) - var/iconData = dummySave.ExportText("dummy") - var/list/partial = splittext(iconData, "{") - return replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 - -///given a text string, returns whether it is a valid dmi icons folder path -/proc/is_valid_dmi_file(icon_path) - if(!istext(icon_path) || !length(icon_path)) - return FALSE - - var/is_in_icon_folder = findtextEx(icon_path, "icons/") - var/is_dmi_file = findtextEx(icon_path, ".dmi") - - if(is_in_icon_folder && is_dmi_file) - return TRUE - return FALSE - -/// given an icon object, dmi file path, or atom/image/mutable_appearance, attempts to find and return an associated dmi file path. -/// a weird quirk about dm is that /icon objects represent both compile-time or dynamic icons in the rsc, -/// but stringifying rsc references returns a dmi file path -/// ONLY if that icon represents a completely unchanged dmi file from when the game was compiled. -/// so if the given object is associated with an icon that was in the rsc when the game was compiled, this returns a path. otherwise it returns "" -/proc/get_icon_dmi_path(icon/icon) - /// the dmi file path we attempt to return if the given object argument is associated with a stringifiable icon - /// if successful, this looks like "icons/path/to/dmi_file.dmi" - var/icon_path = "" - - if(isatom(icon) || istype(icon, /image) || istype(icon, /mutable_appearance)) - var/atom/atom_icon = icon - icon = atom_icon.icon - //atom icons compiled in from 'icons/path/to/dmi_file.dmi' are weird and not really icon objects that you generate with icon(). - //if theyre unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi" - - if(isicon(icon) && isfile(icon)) - //icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and arent really /icon objects, - ///but they pass both isicon() and isfile() checks. theyre the easiest case since stringifying them gives us the path we want - var/icon_ref = "\ref[icon]" - var/locate_icon_string = "[locate(icon_ref)]" - - icon_path = locate_icon_string - - else if(isicon(icon) && "[icon]" == "/icon") - // icon objects generated from icon() at runtime are icons, but they ARENT files themselves, they represent icon files. - // if the files they represent are compile time dmi files in the rsc, then - // the rsc reference returned by fcopy_rsc() will be stringifiable to "icons/path/to/dmi_file.dmi" - var/rsc_ref = fcopy_rsc(icon) - - var/icon_ref = "\ref[rsc_ref]" - - var/icon_path_string = "[locate(icon_ref)]" - - icon_path = icon_path_string - - else if(istext(icon)) - var/rsc_ref = fcopy_rsc(icon) - //if its the text path of an existing dmi file, the rsc reference returned by fcopy_rsc() will be stringifiable to a dmi path - - var/rsc_ref_ref = "\ref[rsc_ref]" - var/rsc_ref_string = "[locate(rsc_ref_ref)]" - - icon_path = rsc_ref_string - - if(is_valid_dmi_file(icon_path)) - return icon_path - - return FALSE - -/** - * generate an asset for the given icon or the icon of the given appearance for [thing], and send it to any clients in target. - * Arguments: - * * thing - either a /icon object, or an object that has an appearance (atom, image, mutable_appearance). - * * target - either a reference to or a list of references to /client's or mobs with clients - * * icon_state - string to force a particular icon_state for the icon to be used - * * dir - dir number to force a particular direction for the icon to be used - * * frame - what frame of the icon_state's animation for the icon being used - * * moving - whether or not to use a moving state for the given icon - * * sourceonly - if TRUE, only generate the asset and send back the asset url, instead of tags that display the icon to players - * * extra_clases - string of extra css classes to use when returning the icon string - */ -/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) - if (!thing) - return - //if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) - //return - - var/key - var/icon/icon2collapse = thing - - if (!target) - return - if (target == world) - target = GLOB.clients - - var/list/targets - if (!islist(target)) - targets = list(target) - else - targets = target - if(!length(targets)) - return - - //check if the given object is associated with a dmi file in the icons folder. if it is then we dont need to do a lot of work - //for asset generation to get around byond limitations - var/icon_path = get_icon_dmi_path(thing) - - if (!isicon(icon2collapse)) - if (isfile(thing)) //special snowflake - //var/name = SANITIZE_FILENAME("[generate_asset_name(thing)].png") - var/name = "[generate_asset_name(thing)].png" - if (!SSassets.cache[name]) - register_asset(name, thing) - for (var/thing2 in targets) - send_asset(thing2, name) - if(sourceonly) - return get_asset_url(name) - return "" - - //its either an atom, image, or mutable_appearance, we want its icon var - icon2collapse = thing.icon - - if (isnull(icon_state)) - icon_state = thing.icon_state - //Despite casting to atom, this code path supports mutable appearances, so let's be nice to them - //if(isnull(icon_state) || (isatom(thing) && thing.flags_1 & HTML_USE_INITAL_ICON_1)) - if(isnull(icon_state) || isatom(thing)) - icon_state = initial(thing.icon_state) - if (isnull(dir)) - dir = initial(thing.dir) - - if (isnull(dir)) - dir = thing.dir - - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = icon2collapse - icon2collapse = icon() - icon2collapse.Insert(temp, dir = SOUTH) - dir = SOUTH - else - if (isnull(dir)) - dir = SOUTH - if (isnull(icon_state)) - icon_state = "" - - icon2collapse = icon(icon2collapse, icon_state, dir, frame, moving) - - var/list/name_and_ref = generate_and_hash_rsc_file(icon2collapse, icon_path)//pretend that tuples exist - - var/rsc_ref = name_and_ref[1] //weird object thats not even readable to the debugger, represents a reference to the icons rsc entry - var/file_hash = name_and_ref[2] - key = "[name_and_ref[3]].png" - - if(!SSassets.cache[key]) - register_asset(key, rsc_ref, file_hash, icon_path) - for (var/client_target in targets) - send_asset(client_target, key) - if(sourceonly) - return get_asset_url(key) - return "" - -/proc/icon2base64html(target, var/custom_classes = "") - if (!target) - return - var/static/list/bicon_cache = list() - if (isicon(target)) - var/icon/target_icon = target - var/icon_base64 = icon2base64(target_icon) - - if (target_icon.Height() > world.icon_size || target_icon.Width() > world.icon_size) - var/icon_md5 = md5(icon_base64) - icon_base64 = bicon_cache[icon_md5] - if (!icon_base64) // Doesn't exist yet, make it. - bicon_cache[icon_md5] = icon_base64 = icon2base64(target_icon) - - - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/target_atom = target - var/key = "[istype(target_atom.icon, /icon) ? "[REF(target_atom.icon)]" : target_atom.icon]:[target_atom.icon_state]" - - - if (!bicon_cache[key]) // Doesn't exist, make it. - var/icon/target_icon = icon(target_atom.icon, target_atom.icon_state, SOUTH, 1) - if (ishuman(target)) // Shitty workaround for a BYOND issue. - var/icon/temp = target_icon - target_icon = icon() - target_icon.Insert(temp, dir = SOUTH) - - bicon_cache[key] = icon2base64(target_icon) - - return "" - -//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_icon2html(thing, target, sourceonly = FALSE) - if (!thing) - return - //if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) - //return - - if (isicon(thing)) - return icon2html(thing, target) - - var/icon/I = getFlatIcon(thing) - return icon2html(I, target, sourceonly = sourceonly) +#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) + +/icon/proc/MakeLying() + var/icon/I = new(src,dir=SOUTH) + I.BecomeLying() + return I + +/icon/proc/BecomeLying() + Turn(90) + Shift(SOUTH,6) + Shift(EAST,1) + +// Multiply all alpha values by this float +/icon/proc/ChangeOpacity(opacity = 1.0) + MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) + +// Convert to grayscale +/icon/proc/GrayScale() + MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) + +/icon/proc/ColorTone(tone) + GrayScale() + + var/list/TONE = rgb2num(tone) + var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) + + var/icon/upper = (255-gray) ? new(src) : null + + if(gray) + MapColors(255/gray,0,0, 0,255/gray,0, 0,0,255/gray, 0,0,0) + Blend(tone, ICON_MULTIPLY) + else SetIntensity(0) + if(255-gray) + upper.Blend(rgb(gray,gray,gray), ICON_SUBTRACT) + upper.MapColors((255-TONE[1])/(255-gray),0,0,0, 0,(255-TONE[2])/(255-gray),0,0, 0,0,(255-TONE[3])/(255-gray),0, 0,0,0,0, 0,0,0,1) + Blend(upper, ICON_ADD) + +// Take the minimum color of two icons; combine transparency as if blending with ICON_ADD +/icon/proc/MinColors(icon) + var/icon/I = new(src) + I.Opaque() + I.Blend(icon, ICON_SUBTRACT) + Blend(I, ICON_SUBTRACT) + +// Take the maximum color of two icons; combine opacity as if blending with ICON_OR +/icon/proc/MaxColors(icon) + var/icon/I + if(isicon(icon)) + I = new(icon) + else + // solid color + I = new(src) + I.Blend("#000000", ICON_OVERLAY) + I.SwapColor("#000000", null) + I.Blend(icon, ICON_OVERLAY) + var/icon/J = new(src) + J.Opaque() + I.Blend(J, ICON_SUBTRACT) + Blend(I, ICON_OR) + +// make this icon fully opaque--transparent pixels become black +/icon/proc/Opaque(background = "#000000") + SwapColor(null, background) + MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) + +// Change a grayscale icon into a white icon where the original color becomes the alpha +// I.e., black -> transparent, gray -> translucent white, white -> solid white +/icon/proc/BecomeAlphaMask() + SwapColor(null, "#000000ff") // don't let transparent become gray + MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) + +/icon/proc/UseAlphaMask(mask) + Opaque() + AddAlphaMask(mask) + +/icon/proc/AddAlphaMask(mask) + var/icon/M = new(mask) + M.Blend("#ffffff", ICON_SUBTRACT) + // apply mask + Blend(M, ICON_ADD) + +/proc/BlendRGB(rgb1, rgb2, amount) + var/list/RGB1 = ReadRGB(rgb1) //CHOMPEdit - Better rgb blend + var/list/RGB2 = ReadRGB(rgb2) + + // add missing alpha if needed + if(RGB1.len < RGB2.len) RGB1 += 255 + else if(RGB2.len < RGB1.len) RGB2 += 255 + var/usealpha = RGB1.len > 3 + + var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) + var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) + var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) + var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null + + return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) + +// Ported from /tg/station +// Creates a single icon from a given /atom or /image. Only the first argument is required. +/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) + //Define... defines. + var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") + + #define BLANK icon(flat_template) + #define SET_SELF(SETVAR) do { \ + var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ + if(A.alpha<255) { \ + SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ + } \ + if(A.color) { \ + if(islist(A.color)){ \ + SELF_ICON.MapColors(arglist(A.color))} \ + else{ \ + SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ + } \ + ##SETVAR=SELF_ICON;\ + } while (0) + #define INDEX_X_LOW 1 + #define INDEX_X_HIGH 2 + #define INDEX_Y_LOW 3 + #define INDEX_Y_HIGH 4 + + #define flatX1 flat_size[INDEX_X_LOW] + #define flatX2 flat_size[INDEX_X_HIGH] + #define flatY1 flat_size[INDEX_Y_LOW] + #define flatY2 flat_size[INDEX_Y_HIGH] + #define addX1 add_size[INDEX_X_LOW] + #define addX2 add_size[INDEX_X_HIGH] + #define addY1 add_size[INDEX_Y_LOW] + #define addY2 add_size[INDEX_Y_HIGH] + + if(!A || A.alpha <= 0) + return BLANK + + var/noIcon = FALSE + if(start) + if(!defdir) + defdir = A.dir + if(!deficon) + deficon = A.icon + if(!defstate) + defstate = A.icon_state + if(!defblend) + defblend = A.blend_mode + + var/curicon = A.icon || deficon + var/curstate = A.icon_state || defstate + + if(!((noIcon = (!curicon)))) + var/curstates = cached_icon_states(curicon) + if(!(curstate in curstates)) + if("" in curstates) + curstate = "" + else + noIcon = TRUE // Do not render this object. + + var/curdir + var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have + + // Use the requested dir or the atom's current dir + curdir = defdir || A.dir + + //Try to remove/optimize this section ASAP, CPU hog. //Slightly mitigated by implementing caching using cached_icon_states + //Determines if there's directionals. + if(!noIcon && curdir != SOUTH) + var/exist = FALSE + var/static/list/checkdirs = list(NORTH, EAST, WEST) + for(var/i in checkdirs) //Not using GLOB for a reason. + if(length(cached_icon_states(icon(curicon, curstate, i)))) + exist = TRUE + break + if(!exist) + base_icon_dir = SOUTH + // + + if(!base_icon_dir) + base_icon_dir = curdir + + ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0. + + var/curblend = A.blend_mode || defblend + + if(A.overlays.len || A.underlays.len) + var/icon/flat = BLANK + // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed + var/list/layers = list() + var/image/copy + // Add the atom's icon itself, without pixel_x/y offsets. + if(!noIcon) + copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir) + copy.color = A.color + copy.alpha = A.alpha + copy.blend_mode = curblend + layers[copy] = A.layer + + // Loop through the underlays, then overlays, sorting them into the layers list + for(var/process_set in 0 to 1) + var/list/process = process_set? A.overlays : A.underlays + for(var/i in 1 to process.len) + var/image/current = process[i] + if(!current) + continue + if(current.plane != FLOAT_PLANE && current.plane != A.plane) + continue + var/current_layer = current.layer + if(current_layer < 0) + //if(current_layer <= -1000) + //return flat + current_layer = process_set + A.layer + current_layer / 1000 + + for(var/p in 1 to layers.len) + var/image/cmp = layers[p] + if(current_layer < layers[cmp]) + layers.Insert(p, current) + break + layers[current] = current_layer + + //sortTim(layers, GLOBAL_PROC_REF(cmp_image_layer_asc)) + + var/icon/add // Icon of overlay being added + + // Current dimensions of flattened icon + var/list/flat_size = list(1, flat.Width(), 1, flat.Height()) + // Dimensions of overlay being added + var/list/add_size[4] + + for(var/image/I as anything in layers) + if(I.alpha == 0) + continue + + if(I == copy) // 'I' is an /image based on the object being flattened. + curblend = BLEND_OVERLAY + add = icon(I.icon, I.icon_state, base_icon_dir) + else // 'I' is an appearance object. + add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) + if(!add) + continue + // Find the new dimensions of the flat icon to fit the added overlay + add_size = list( + min(flatX1, I.pixel_x+1), + max(flatX2, I.pixel_x+add.Width()), + min(flatY1, I.pixel_y+1), + max(flatY2, I.pixel_y+add.Height()) + ) + + if(flat_size ~! add_size) + // Resize the flattened icon so the new icon fits + flat.Crop( + addX1 - flatX1 + 1, + addY1 - flatY1 + 1, + addX2 - flatX1 + 1, + addY2 - flatY1 + 1 + ) + flat_size = add_size.Copy() + + // Blend the overlay into the flattened icon + flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) + + if(A.color) + if(islist(A.color)) + flat.MapColors(arglist(A.color)) + else + flat.Blend(A.color, ICON_MULTIPLY) + + if(A.alpha < 255) + flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + + if(no_anim) + //Clean up repeated frames + var/icon/cleaned = new /icon() + cleaned.Insert(flat, "", SOUTH, 1, 0) + . = cleaned + else + . = icon(flat, "", SOUTH) + else //There's no overlays. + if(!noIcon) + SET_SELF(.) + + //Clear defines + #undef flatX1 + #undef flatX2 + #undef flatY1 + #undef flatY2 + #undef addX1 + #undef addX2 + #undef addY1 + #undef addY2 + + #undef INDEX_X_LOW + #undef INDEX_X_HIGH + #undef INDEX_Y_LOW + #undef INDEX_Y_HIGH + + #undef BLANK + #undef SET_SELF + +/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N + var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. + for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. + if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. + var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. + //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. + alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. + return alpha_mask//And now return the mask. + +//getFlatIcon but generates an icon that can face ALL four directions. The only four. +/proc/getCompoundIcon(atom/A) + var/icon/north = getFlatIcon(A,defdir=NORTH) + var/icon/south = getFlatIcon(A,defdir=SOUTH) + var/icon/east = getFlatIcon(A,defdir=EAST) + var/icon/west = getFlatIcon(A,defdir=WEST) + + //Starts with a blank icon because of byond bugs. + var/icon/full = icon('icons/effects/effects.dmi', "icon_state"="nothing") + + full.Insert(north,dir=NORTH) + full.Insert(south,dir=SOUTH) + full.Insert(east,dir=EAST) + full.Insert(west,dir=WEST) + qdel(north) + qdel(south) + qdel(east) + qdel(west) + return full + +/proc/downloadImage(atom/A, dir) + var/icon/this_icon = getFlatIcon(A,defdir=dir) + + usr << ftp(this_icon,"[A.name].png") + +/mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. + var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. + //Now we need to culculate overlays+underlays and add them together to form an image for a mask. + //var/icon/alpha_mask = getFlatIcon(src)//Accurate but SLOW. Not designed for running each tick. Could have other uses I guess. + var/icon/alpha_mask = getIconMask(src)//Which is why I created that proc. Also a little slow since it's blending a bunch of icons together but good enough. + opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. + opacity_icon.ChangeOpacity(0.4)//Front end for MapColors so it's fast. 0.5 means half opacity and looks the best in my opinion. + for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. + var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. + switch(i)//Now to determine offset so the result is somewhat blurred. + if(1) I.pixel_x-- + if(2) I.pixel_x++ + if(3) I.pixel_y-- + if(4) I.pixel_y++ + overlays += I//And finally add the overlay. + +/proc/getHologramIcon(icon/A, safety=1, no_color = FALSE)//If safety is on, a new icon is not created. + var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. + /* VOREStation Removal - For AI Vore effects + if(!no_color) + flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. + flat_icon.ChangeOpacity(0.5)//Make it half transparent. + */ //VOREStation Removal End + var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect. + flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. + return flat_icon + +//For photo camera. +/proc/build_composite_icon(atom/A) + var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) + for(var/image/I as anything in A.overlays) + composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) + return composite + +GLOBAL_LIST_EMPTY(icon_state_lists) +/proc/cached_icon_states(var/icon/I) + if(!I) + return list() + var/key = I + var/returnlist = GLOB.icon_state_lists[key] + if(!returnlist) + returnlist = icon_states(I) + if(isfile(I)) // It's something that will stick around + GLOB.icon_state_lists[key] = returnlist + return returnlist + +/proc/expire_states_cache(var/key) + if(GLOB.icon_state_lists[key]) + GLOB.icon_state_lists -= key + return TRUE + return FALSE + +GLOBAL_LIST_EMPTY(cached_examine_icons) +/proc/set_cached_examine_icon(var/atom/A, var/icon/I, var/expiry = 12000) + GLOB.cached_examine_icons[WEAKREF(A)] = I + if(expiry) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(uncache_examine_icon), WEAKREF(A)), expiry, TIMER_UNIQUE) + +/proc/get_cached_examine_icon(var/atom/A) + var/datum/weakref/WR = WEAKREF(A) + return GLOB.cached_examine_icons[WR] + +/proc/uncache_examine_icon(var/datum/weakref/WR) + GLOB.cached_examine_icons -= WR + +/proc/adjust_brightness(var/color, var/value) + if (!color) return "#FFFFFF" + if (!value) return color + + var/list/RGB = rgb2num(color) + RGB[1] = CLAMP(RGB[1]+value,0,255) + RGB[2] = CLAMP(RGB[2]+value,0,255) + RGB[3] = CLAMP(RGB[3]+value,0,255) + return rgb(RGB[1],RGB[2],RGB[3]) + +/proc/sort_atoms_by_layer(var/list/atoms) + // Comb sort icons based on levels + var/list/result = atoms.Copy() + var/gap = result.len + var/swapped = 1 + while (gap > 1 || swapped) + swapped = 0 + if(gap > 1) + gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient + if(gap < 1) + gap = 1 + for(var/i = 1; gap + i <= result.len; i++) + var/atom/l = result[i] //Fucking hate + var/atom/r = result[gap+i] //how lists work here + if(l.layer > r.layer) //no "result[i].layer" for me + result.Swap(i, gap + i) + swapped = 1 + return result + +/proc/gen_hud_image(var/file, var/person, var/state, var/plane) + var/image/img = image(file, person, state) + img.plane = plane //Thanks Byond. + img.layer = MOB_LAYER-0.2 + img.appearance_flags = APPEARANCE_UI + return img + +/** +* Animate a 'halo' around an object. +* +* This proc is not exactly cheap. You'd be well advised to set up many-loops rather than call this super-often. getCompoundIcon is +* mostly to blame for this. If Byond ever implements a way to get something's icon more 'gently' than this, do that instead. +* +* @param A This is the atom to put the halo on +* @param simple_icons If set to TRUE, will just perform a very basic icon and icon_state steal. DO USE when possible. +* @param color This is the color for the halo +* @param anim_duration This decides how fast (or slow) the animation plays +* @param offset Mysterious variable that determines size of the halo's gap from icon +* @param loops How many times the animation loops +* @param grow_to Relative to the size of the icon, how big the halo grows while fading (don't use negatives for inward halos, use < 1) +* @param pixel_scale If you'd like the halo to use pixel scale or the default 'fuzzy' scale +*/ +/proc/animate_aura(var/atom/A, var/simple_icons, var/color = "#00FF22", var/anim_duration = 5, var/offset = 1, var/loops = 1, var/grow_to = 2, var/pixel_scale = FALSE) + ASSERT(A) + + //Take a guess at this, if they didn't set it + if(isnull(simple_icons)) + if(ismob(A)) + simple_icons = FALSE + else + simple_icons = TRUE + + //Get their icon + var/icon/hole + + if(simple_icons) + hole = icon(A.icon, A.icon_state) + else + hole = getCompoundIcon(A) + + hole.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White. + + //Make a bigger version + var/icon/grower = new(hole) + var/orig_width = grower.Width() + var/orig_height = grower.Height() + var/end_width = orig_width+(offset*2) + var/end_height = orig_height+(offset*2) + var/half_diff_width = (end_width-orig_width)*0.5 + var/half_diff_height = (end_height-orig_height)*0.5 + + //Make icon black + grower.SwapColor("#FFFFFF","#000000") //Black. + + //Scale both icons big so we don't have to deal with low-pixel garbage issues + grower.Scale(orig_width*10,orig_height*10) + hole.Scale(orig_width*9,orig_height*9) + + //Blend the hole in + grower.Blend(hole,ICON_OVERLAY, x = ((orig_width*10-orig_width*9)*0.5)+1, y = ((orig_height*10-orig_height*9)*0.5)+1) + + //Swap white to zero alpha + grower.SwapColor("#FFFFFF","#00000000") + + //Color it + grower.SwapColor("#000000",color) + + //Scale it to final height + grower.Scale(end_width,end_height) + + //Flick it onto them + var/image/img = image(grower,A) + if(pixel_scale) + img.appearance_flags |= PIXEL_SCALE + img.pixel_x = half_diff_width*-1 + img.pixel_y = half_diff_height*-1 + flick_overlay_view(img, A, anim_duration*loops, TRUE) + + //Animate it growing + animate(img, alpha = 0, transform = matrix()*grow_to, time = anim_duration, loop = loops) + +/// generates a filename for a given asset. +/// like generate_asset_name(), except returns the rsc reference and the rsc file hash as well as the asset name (sans extension) +/// used so that certain asset files dont have to be hashed twice +/proc/generate_and_hash_rsc_file(file, dmi_file_path) + var/rsc_ref = fcopy_rsc(file) + var/hash + //if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesnt have the bug described in http://www.byond.com/forum/post/2611357 + if(dmi_file_path) + hash = md5(rsc_ref) + else //otherwise, we need to do the expensive fcopy() workaround + hash = md5asfile(rsc_ref) + + return list(rsc_ref, hash, "asset.[hash]") + +/// Gets a dummy savefile for usage in icon generation. +/// Savefiles generated from this proc will be empty. +/proc/get_dummy_savefile(from_failure = FALSE) + var/static/next_id = 0 + if(next_id++ > 9) + next_id = 0 + var/savefile_path = "tmp/dummy-save-[next_id].sav" + try + if(fexists(savefile_path)) + fdel(savefile_path) + return new /savefile(savefile_path) + catch(var/exception/error) + // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldnt have + if(from_failure) // this *is* the retry, something fucked up + CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'") + return get_dummy_savefile(from_failure = TRUE) + +/** + * Converts an icon to base64. Operates by putting the icon in the iconCache savefile, + * exporting it as text, and then parsing the base64 from that. + * (This relies on byond automatically storing icons in savefiles as base64) + */ +/proc/icon2base64(icon/icon) + if (!isicon(icon)) + return FALSE + var/savefile/dummySave = get_dummy_savefile() + WRITE_FILE(dummySave["dummy"], icon) + var/iconData = dummySave.ExportText("dummy") + var/list/partial = splittext(iconData, "{") + return replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 + +///given a text string, returns whether it is a valid dmi icons folder path +/proc/is_valid_dmi_file(icon_path) + if(!istext(icon_path) || !length(icon_path)) + return FALSE + + var/is_in_icon_folder = findtextEx(icon_path, "icons/") + var/is_dmi_file = findtextEx(icon_path, ".dmi") + + if(is_in_icon_folder && is_dmi_file) + return TRUE + return FALSE + +/// given an icon object, dmi file path, or atom/image/mutable_appearance, attempts to find and return an associated dmi file path. +/// a weird quirk about dm is that /icon objects represent both compile-time or dynamic icons in the rsc, +/// but stringifying rsc references returns a dmi file path +/// ONLY if that icon represents a completely unchanged dmi file from when the game was compiled. +/// so if the given object is associated with an icon that was in the rsc when the game was compiled, this returns a path. otherwise it returns "" +/proc/get_icon_dmi_path(icon/icon) + /// the dmi file path we attempt to return if the given object argument is associated with a stringifiable icon + /// if successful, this looks like "icons/path/to/dmi_file.dmi" + var/icon_path = "" + + if(isatom(icon) || istype(icon, /image) || istype(icon, /mutable_appearance)) + var/atom/atom_icon = icon + icon = atom_icon.icon + //atom icons compiled in from 'icons/path/to/dmi_file.dmi' are weird and not really icon objects that you generate with icon(). + //if theyre unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi" + + if(isicon(icon) && isfile(icon)) + //icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and arent really /icon objects, + ///but they pass both isicon() and isfile() checks. theyre the easiest case since stringifying them gives us the path we want + var/icon_ref = "\ref[icon]" + var/locate_icon_string = "[locate(icon_ref)]" + + icon_path = locate_icon_string + + else if(isicon(icon) && "[icon]" == "/icon") + // icon objects generated from icon() at runtime are icons, but they ARENT files themselves, they represent icon files. + // if the files they represent are compile time dmi files in the rsc, then + // the rsc reference returned by fcopy_rsc() will be stringifiable to "icons/path/to/dmi_file.dmi" + var/rsc_ref = fcopy_rsc(icon) + + var/icon_ref = "\ref[rsc_ref]" + + var/icon_path_string = "[locate(icon_ref)]" + + icon_path = icon_path_string + + else if(istext(icon)) + var/rsc_ref = fcopy_rsc(icon) + //if its the text path of an existing dmi file, the rsc reference returned by fcopy_rsc() will be stringifiable to a dmi path + + var/rsc_ref_ref = "\ref[rsc_ref]" + var/rsc_ref_string = "[locate(rsc_ref_ref)]" + + icon_path = rsc_ref_string + + if(is_valid_dmi_file(icon_path)) + return icon_path + + return FALSE + +/** + * generate an asset for the given icon or the icon of the given appearance for [thing], and send it to any clients in target. + * Arguments: + * * thing - either a /icon object, or an object that has an appearance (atom, image, mutable_appearance). + * * target - either a reference to or a list of references to /client's or mobs with clients + * * icon_state - string to force a particular icon_state for the icon to be used + * * dir - dir number to force a particular direction for the icon to be used + * * frame - what frame of the icon_state's animation for the icon being used + * * moving - whether or not to use a moving state for the given icon + * * sourceonly - if TRUE, only generate the asset and send back the asset url, instead of tags that display the icon to players + * * extra_clases - string of extra css classes to use when returning the icon string + */ +/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) + if (!thing) + return + //if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) + //return + + var/key + var/icon/icon2collapse = thing + + if (!target) + return + if (target == world) + target = GLOB.clients + + var/list/targets + if (!islist(target)) + targets = list(target) + else + targets = target + if(!length(targets)) + return + + //check if the given object is associated with a dmi file in the icons folder. if it is then we dont need to do a lot of work + //for asset generation to get around byond limitations + var/icon_path = get_icon_dmi_path(thing) + + if (!isicon(icon2collapse)) + if (isfile(thing)) //special snowflake + //var/name = SANITIZE_FILENAME("[generate_asset_name(thing)].png") + var/name = "[generate_asset_name(thing)].png" + if (!SSassets.cache[name]) + register_asset(name, thing) + for (var/thing2 in targets) + send_asset(thing2, name) + if(sourceonly) + return get_asset_url(name) + return "" + + //its either an atom, image, or mutable_appearance, we want its icon var + icon2collapse = thing.icon + + if (isnull(icon_state)) + icon_state = thing.icon_state + //Despite casting to atom, this code path supports mutable appearances, so let's be nice to them + //if(isnull(icon_state) || (isatom(thing) && thing.flags_1 & HTML_USE_INITAL_ICON_1)) + if(isnull(icon_state) || isatom(thing)) + icon_state = initial(thing.icon_state) + if (isnull(dir)) + dir = initial(thing.dir) + + if (isnull(dir)) + dir = thing.dir + + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = icon2collapse + icon2collapse = icon() + icon2collapse.Insert(temp, dir = SOUTH) + dir = SOUTH + else + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = "" + + icon2collapse = icon(icon2collapse, icon_state, dir, frame, moving) + + var/list/name_and_ref = generate_and_hash_rsc_file(icon2collapse, icon_path)//pretend that tuples exist + + var/rsc_ref = name_and_ref[1] //weird object thats not even readable to the debugger, represents a reference to the icons rsc entry + var/file_hash = name_and_ref[2] + key = "[name_and_ref[3]].png" + + if(!SSassets.cache[key]) + register_asset(key, rsc_ref, file_hash, icon_path) + for (var/client_target in targets) + send_asset(client_target, key) + if(sourceonly) + return get_asset_url(key) + return "" + +/proc/icon2base64html(target, var/custom_classes = "") + if (!target) + return + var/static/list/bicon_cache = list() + if (isicon(target)) + var/icon/target_icon = target + var/icon_base64 = icon2base64(target_icon) + + if (target_icon.Height() > world.icon_size || target_icon.Width() > world.icon_size) + var/icon_md5 = md5(icon_base64) + icon_base64 = bicon_cache[icon_md5] + if (!icon_base64) // Doesn't exist yet, make it. + bicon_cache[icon_md5] = icon_base64 = icon2base64(target_icon) + + + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/target_atom = target + var/key = "[istype(target_atom.icon, /icon) ? "[REF(target_atom.icon)]" : target_atom.icon]:[target_atom.icon_state]" + + + if (!bicon_cache[key]) // Doesn't exist, make it. + var/icon/target_icon = icon(target_atom.icon, target_atom.icon_state, SOUTH, 1) + if (ishuman(target)) // Shitty workaround for a BYOND issue. + var/icon/temp = target_icon + target_icon = icon() + target_icon.Insert(temp, dir = SOUTH) + + bicon_cache[key] = icon2base64(target_icon) + + return "" + +//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. +/proc/costly_icon2html(thing, target, sourceonly = FALSE) + if (!thing) + return + //if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) + //return + + if (isicon(thing)) + return icon2html(thing, target) + + var/icon/I = getFlatIcon(thing) + return icon2html(I, target, sourceonly = sourceonly) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 34d74853bc..994255af6e 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -1,404 +1,404 @@ -//print an error message to world.log - -//This is an external call, "true" and "false" are how rust parses out booleans -#define WRITE_LOG(log, text) rustg_log_write(log, text, "true") -#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") - -/* For logging round startup. */ -/proc/start_log(log) - WRITE_LOG(log, "START: Starting up [log_path].") - return log - -/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ -/proc/shutdown_logging() - rustg_log_close_all() - -/proc/error(msg) - to_world_log("## ERROR: [msg]") - -#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") -//print a warning message to world.log -/proc/warning(msg) - to_world_log("## WARNING: [msg]") - -//print a testing-mode debug message to world.log -/proc/testing(msg) - to_world_log("## TESTING: [msg]") - -/proc/log_admin(text) - admin_log.Add(text) - if (config.log_admin) - WRITE_LOG(diary, "ADMIN: [text]") - -/proc/log_adminpm(text, client/source, client/dest) - admin_log.Add(text) - if (config.log_admin) - WRITE_LOG(diary, "ADMINPM: [key_name(source)]->[key_name(dest)]: [html_decode(text)]") - -/proc/log_pray(text, client/source) - admin_log.Add(text) - if (config.log_admin) - WRITE_LOG(diary, "PRAY: [key_name(source)]: [text]") - -/proc/log_debug(text) - if (config.log_debug) - WRITE_LOG(debug_log, "DEBUG: [sanitize(text)]") - - for(var/client/C in GLOB.admins) - if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) - to_chat(C, - type = MESSAGE_TYPE_DEBUG, - html = "DEBUG: [text]") - -/proc/log_game(text) - if (config.log_game) - WRITE_LOG(diary, "GAME: [text]") - -/proc/log_vote(text) - if (config.log_vote) - WRITE_LOG(diary, "VOTE: [text]") - -/proc/log_access_in(client/new_client) - if (config.log_access) - var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]" - WRITE_LOG(diary, "ACCESS IN: [message]") //VOREStation Edit - -/proc/log_access_out(mob/last_mob) - if (config.log_access) - var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out" - WRITE_LOG(diary, "ACCESS OUT: [message]") - -/proc/log_say(text, mob/speaker) - if (config.log_say) - WRITE_LOG(diary, "SAY: [speaker.simple_info_line()]: [html_decode(text)]") - - //Log the message to in-game dialogue logs, as well. //CHOMPEdit Begin - if(speaker.client) - //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "say", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - //CHOMPEdit End - -/proc/log_ooc(text, client/user) - if (config.log_ooc) - WRITE_LOG(diary, "OOC: [user.simple_info_line()]: [html_decode(text)]") - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "ooc", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //GLOB.round_text_log += "([time_stamp()]) ([user]) OOC: - [text]" - -/proc/log_aooc(text, client/user) - if (config.log_ooc) - WRITE_LOG(diary, "AOOC: [user.simple_info_line()]: [html_decode(text)]") - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "aooc", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //GLOB.round_text_log += "([time_stamp()]) ([user]) AOOC: - [text]" - -/proc/log_looc(text, client/user) - if (config.log_ooc) - WRITE_LOG(diary, "LOOC: [user.simple_info_line()]: [html_decode(text)]") - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "looc", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //GLOB.round_text_log += "([time_stamp()]) ([user]) LOOC: - [text]" - -/proc/log_whisper(text, mob/speaker) - if (config.log_whisper) - WRITE_LOG(diary, "WHISPER: [speaker.simple_info_line()]: [html_decode(text)]") - - if(speaker.client) - //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "whisper", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - -/proc/log_emote(text, mob/speaker) - if (config.log_emote) - WRITE_LOG(diary, "EMOTE: [speaker.simple_info_line()]: [html_decode(text)]") - //CHOMPEdit Begin - if(speaker.client) - //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" - //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "emote", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //CHOMPEdit End - -/proc/log_attack(attacker, defender, message) - if (config.log_attack) - WRITE_LOG(diary, "ATTACK: [attacker] against [defender]: [message]") - -/proc/log_adminsay(text, mob/speaker) - if (config.log_adminchat) - WRITE_LOG(diary, "ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)]") - -/proc/log_modsay(text, mob/speaker) - if (config.log_adminchat) - WRITE_LOG(diary, "MODSAY: [speaker.simple_info_line()]: [html_decode(text)]") - -/proc/log_eventsay(text, mob/speaker) - if (config.log_adminchat) - WRITE_LOG(diary, "EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)]") - -/proc/log_ghostsay(text, mob/speaker) - if (config.log_say) - WRITE_LOG(diary, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]") - //CHOMPEdit Begin - if(speaker.client) - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "deadsay", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - - //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" - //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" - //CHOMPEdit End - -/proc/log_ghostemote(text, mob/speaker) - if (config.log_emote) - WRITE_LOG(diary, "DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)]") - //CHOMPEdit Begin - if(speaker.client) - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "deademote", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - //CHOMPEdit End - -/proc/log_adminwarn(text) - if (config.log_adminwarn) - WRITE_LOG(diary, "ADMINWARN: [html_decode(text)]") - -/proc/log_pda(text, mob/speaker) - if (config.log_pda) - WRITE_LOG(diary, "PDA: [speaker.simple_info_line()]: [html_decode(text)]") - //CHOMPEdit Begin - if(speaker.client) - if(!SSdbcore.IsConnected()) - establish_db_connection() - if(!SSdbcore.IsConnected()) - return null - var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ - list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "pda", "message_content" = text)) - if(!query_insert.Execute()) - log_debug("Error during logging: "+query_insert.ErrorMsg()) - qdel(query_insert) - return - qdel(query_insert) - - //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" - //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" - //CHOMPEdit End - -/proc/log_to_dd(text) - to_world_log(text) //this comes before the config check because it can't possibly runtime - if(config.log_world_output) - WRITE_LOG(diary, "DD_OUTPUT: [text]") - -/proc/log_error(text) - to_world_log(text) - WRITE_LOG(error_log, "RUNTIME: [text]") - -/proc/log_misc(text) - WRITE_LOG(diary, "MISC: [text]") - -/proc/log_topic(text) - if(Debug2) - WRITE_LOG(diary, "TOPIC: [text]") - -/proc/log_unit_test(text) - to_world_log("## UNIT_TEST: [text]") - -#ifdef REFERENCE_TRACKING_LOG -#define log_reftracker(msg) log_world("## REF SEARCH [msg]") -#else -#define log_reftracker(msg) -#endif - -/proc/log_asset(text) - WRITE_LOG(diary, "ASSET: [text]") - -/proc/report_progress(var/progress_message) - admin_notice("[progress_message]", R_DEBUG) - to_world_log(progress_message) - -//pretty print a direction bitflag, can be useful for debugging. -/proc/print_dir(var/dir) - var/list/comps = list() - if(dir & NORTH) comps += "NORTH" - if(dir & SOUTH) comps += "SOUTH" - if(dir & EAST) comps += "EAST" - if(dir & WEST) comps += "WEST" - if(dir & UP) comps += "UP" - if(dir & DOWN) comps += "DOWN" - - return english_list(comps, nothing_text="0", and_text="|", comma_text="|") - -//more or less a logging utility -//Always return "Something/(Something)", even if it's an error message. -/proc/key_name(var/whom, var/include_link = FALSE, var/include_name = TRUE, var/highlight_special_characters = TRUE) - var/mob/M - var/client/C - var/key - - if(!whom) - return "INVALID/INVALID" - if(istype(whom, /client)) - C = whom - M = C.mob - key = C.key - else if(ismob(whom)) - M = whom - C = M.client - key = M.key - else if(istype(whom, /datum/mind)) - var/datum/mind/D = whom - key = D.key - M = D.current - if(D.current) - C = D.current.client - else if(istype(whom, /datum)) - var/datum/D = whom - return "INVALID/([D.type])" - else if(istext(whom)) - return "AUTOMATED/[whom]" //Just give them the text back - else - return "INVALID/INVALID" - - . = "" - - if(key) - if(include_link && C) - . += "" - - if(C && C.holder && C.holder.fakekey) - . += C.holder.rank // CHOMPEdit: Stealth mode displays staff rank in PM Messages - else - . += key - - if(include_link) - if(C) . += "" - else . += " (DC)" - else - . += "INVALID" - - if(include_name) - var/name = "INVALID" - if(M) - if(M.real_name) - name = M.real_name - else if(M.name) - name = M.name - - if(include_link && is_special_character(M) && highlight_special_characters) - name = "[name]" //Orange - - . += "/([name])" - - return . - -/proc/key_name_admin(var/whom, var/include_name = 1) - return key_name(whom, 1, include_name) - -// Helper procs for building detailed log lines -// -// These procs must not fail under ANY CIRCUMSTANCES! -// - -/datum/proc/log_info_line() - return "[src] ([type])" - -/atom/log_info_line() - . = ..() - var/turf/t = get_turf(src) - if(istype(t)) - return "[.] @ [t.log_info_line()]" - else if(loc) - return "[.] @ ([loc]) (0,0,0) ([loc.type])" - else - return "[.] @ (NULL) (0,0,0) (NULL)" - -/turf/log_info_line() - return "([src]) ([x],[y],[z]) ([type])" - -/mob/log_info_line() - return "[..()] (ckey=[ckey])" - -/proc/log_info_line(var/datum/d) - if(!d) - return "*null*" - if(!istype(d)) - return json_encode(d) - return d.log_info_line() - -/mob/proc/simple_info_line() - return "[key_name(src)] ([x],[y],[z])" - -/client/proc/simple_info_line() - return "[key_name(src)] ([mob.x],[mob.y],[mob.z])" +//print an error message to world.log + +//This is an external call, "true" and "false" are how rust parses out booleans +#define WRITE_LOG(log, text) rustg_log_write(log, text, "true") +#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") + +/* For logging round startup. */ +/proc/start_log(log) + WRITE_LOG(log, "START: Starting up [log_path].") + return log + +/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ +/proc/shutdown_logging() + rustg_log_close_all() + +/proc/error(msg) + to_world_log("## ERROR: [msg]") + +#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") +//print a warning message to world.log +/proc/warning(msg) + to_world_log("## WARNING: [msg]") + +//print a testing-mode debug message to world.log +/proc/testing(msg) + to_world_log("## TESTING: [msg]") + +/proc/log_admin(text) + admin_log.Add(text) + if (config.log_admin) + WRITE_LOG(diary, "ADMIN: [text]") + +/proc/log_adminpm(text, client/source, client/dest) + admin_log.Add(text) + if (config.log_admin) + WRITE_LOG(diary, "ADMINPM: [key_name(source)]->[key_name(dest)]: [html_decode(text)]") + +/proc/log_pray(text, client/source) + admin_log.Add(text) + if (config.log_admin) + WRITE_LOG(diary, "PRAY: [key_name(source)]: [text]") + +/proc/log_debug(text) + if (config.log_debug) + WRITE_LOG(debug_log, "DEBUG: [sanitize(text)]") + + for(var/client/C in GLOB.admins) + if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) + to_chat(C, + type = MESSAGE_TYPE_DEBUG, + html = "DEBUG: [text]") + +/proc/log_game(text) + if (config.log_game) + WRITE_LOG(diary, "GAME: [text]") + +/proc/log_vote(text) + if (config.log_vote) + WRITE_LOG(diary, "VOTE: [text]") + +/proc/log_access_in(client/new_client) + if (config.log_access) + var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]" + WRITE_LOG(diary, "ACCESS IN: [message]") //VOREStation Edit + +/proc/log_access_out(mob/last_mob) + if (config.log_access) + var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out" + WRITE_LOG(diary, "ACCESS OUT: [message]") + +/proc/log_say(text, mob/speaker) + if (config.log_say) + WRITE_LOG(diary, "SAY: [speaker.simple_info_line()]: [html_decode(text)]") + + //Log the message to in-game dialogue logs, as well. //CHOMPEdit Begin + if(speaker.client) + //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "say", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + //CHOMPEdit End + +/proc/log_ooc(text, client/user) + if (config.log_ooc) + WRITE_LOG(diary, "OOC: [user.simple_info_line()]: [html_decode(text)]") + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "ooc", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //GLOB.round_text_log += "([time_stamp()]) ([user]) OOC: - [text]" + +/proc/log_aooc(text, client/user) + if (config.log_ooc) + WRITE_LOG(diary, "AOOC: [user.simple_info_line()]: [html_decode(text)]") + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "aooc", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //GLOB.round_text_log += "([time_stamp()]) ([user]) AOOC: - [text]" + +/proc/log_looc(text, client/user) + if (config.log_ooc) + WRITE_LOG(diary, "LOOC: [user.simple_info_line()]: [html_decode(text)]") + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = user.ckey, "sender_mob" = user.mob.real_name, "message_type" = "looc", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //GLOB.round_text_log += "([time_stamp()]) ([user]) LOOC: - [text]" + +/proc/log_whisper(text, mob/speaker) + if (config.log_whisper) + WRITE_LOG(diary, "WHISPER: [speaker.simple_info_line()]: [html_decode(text)]") + + if(speaker.client) + //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "whisper", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + +/proc/log_emote(text, mob/speaker) + if (config.log_emote) + WRITE_LOG(diary, "EMOTE: [speaker.simple_info_line()]: [html_decode(text)]") + //CHOMPEdit Begin + if(speaker.client) + //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" + //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "emote", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //CHOMPEdit End + +/proc/log_attack(attacker, defender, message) + if (config.log_attack) + WRITE_LOG(diary, "ATTACK: [attacker] against [defender]: [message]") + +/proc/log_adminsay(text, mob/speaker) + if (config.log_adminchat) + WRITE_LOG(diary, "ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)]") + +/proc/log_modsay(text, mob/speaker) + if (config.log_adminchat) + WRITE_LOG(diary, "MODSAY: [speaker.simple_info_line()]: [html_decode(text)]") + +/proc/log_eventsay(text, mob/speaker) + if (config.log_adminchat) + WRITE_LOG(diary, "EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)]") + +/proc/log_ghostsay(text, mob/speaker) + if (config.log_say) + WRITE_LOG(diary, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]") + //CHOMPEdit Begin + if(speaker.client) + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "deadsay", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + + //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" + //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" + //CHOMPEdit End + +/proc/log_ghostemote(text, mob/speaker) + if (config.log_emote) + WRITE_LOG(diary, "DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)]") + //CHOMPEdit Begin + if(speaker.client) + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "deademote", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + //CHOMPEdit End + +/proc/log_adminwarn(text) + if (config.log_adminwarn) + WRITE_LOG(diary, "ADMINWARN: [html_decode(text)]") + +/proc/log_pda(text, mob/speaker) + if (config.log_pda) + WRITE_LOG(diary, "PDA: [speaker.simple_info_line()]: [html_decode(text)]") + //CHOMPEdit Begin + if(speaker.client) + if(!SSdbcore.IsConnected()) + establish_db_connection() + if(!SSdbcore.IsConnected()) + return null + var/datum/db_query/query_insert = SSdbcore.NewQuery("INSERT INTO erro_dialog (mid, time, ckey, mob, type, message) VALUES (null, NOW(), :sender_ckey, :sender_mob, :message_type, :message_content)", \ + list("sender_ckey" = speaker.ckey, "sender_mob" = speaker.real_name, "message_type" = "pda", "message_content" = text)) + if(!query_insert.Execute()) + log_debug("Error during logging: "+query_insert.ErrorMsg()) + qdel(query_insert) + return + qdel(query_insert) + + //speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" + //GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" + //CHOMPEdit End + +/proc/log_to_dd(text) + to_world_log(text) //this comes before the config check because it can't possibly runtime + if(config.log_world_output) + WRITE_LOG(diary, "DD_OUTPUT: [text]") + +/proc/log_error(text) + to_world_log(text) + WRITE_LOG(error_log, "RUNTIME: [text]") + +/proc/log_misc(text) + WRITE_LOG(diary, "MISC: [text]") + +/proc/log_topic(text) + if(Debug2) + WRITE_LOG(diary, "TOPIC: [text]") + +/proc/log_unit_test(text) + to_world_log("## UNIT_TEST: [text]") + +#ifdef REFERENCE_TRACKING_LOG +#define log_reftracker(msg) log_world("## REF SEARCH [msg]") +#else +#define log_reftracker(msg) +#endif + +/proc/log_asset(text) + WRITE_LOG(diary, "ASSET: [text]") + +/proc/report_progress(var/progress_message) + admin_notice("[progress_message]", R_DEBUG) + to_world_log(progress_message) + +//pretty print a direction bitflag, can be useful for debugging. +/proc/print_dir(var/dir) + var/list/comps = list() + if(dir & NORTH) comps += "NORTH" + if(dir & SOUTH) comps += "SOUTH" + if(dir & EAST) comps += "EAST" + if(dir & WEST) comps += "WEST" + if(dir & UP) comps += "UP" + if(dir & DOWN) comps += "DOWN" + + return english_list(comps, nothing_text="0", and_text="|", comma_text="|") + +//more or less a logging utility +//Always return "Something/(Something)", even if it's an error message. +/proc/key_name(var/whom, var/include_link = FALSE, var/include_name = TRUE, var/highlight_special_characters = TRUE) + var/mob/M + var/client/C + var/key + + if(!whom) + return "INVALID/INVALID" + if(istype(whom, /client)) + C = whom + M = C.mob + key = C.key + else if(ismob(whom)) + M = whom + C = M.client + key = M.key + else if(istype(whom, /datum/mind)) + var/datum/mind/D = whom + key = D.key + M = D.current + if(D.current) + C = D.current.client + else if(istype(whom, /datum)) + var/datum/D = whom + return "INVALID/([D.type])" + else if(istext(whom)) + return "AUTOMATED/[whom]" //Just give them the text back + else + return "INVALID/INVALID" + + . = "" + + if(key) + if(include_link && C) + . += "" + + if(C && C.holder && C.holder.fakekey) + . += C.holder.rank // CHOMPEdit: Stealth mode displays staff rank in PM Messages + else + . += key + + if(include_link) + if(C) . += "" + else . += " (DC)" + else + . += "INVALID" + + if(include_name) + var/name = "INVALID" + if(M) + if(M.real_name) + name = M.real_name + else if(M.name) + name = M.name + + if(include_link && is_special_character(M) && highlight_special_characters) + name = "[name]" //Orange + + . += "/([name])" + + return . + +/proc/key_name_admin(var/whom, var/include_name = 1) + return key_name(whom, 1, include_name) + +// Helper procs for building detailed log lines +// +// These procs must not fail under ANY CIRCUMSTANCES! +// + +/datum/proc/log_info_line() + return "[src] ([type])" + +/atom/log_info_line() + . = ..() + var/turf/t = get_turf(src) + if(istype(t)) + return "[.] @ [t.log_info_line()]" + else if(loc) + return "[.] @ ([loc]) (0,0,0) ([loc.type])" + else + return "[.] @ (NULL) (0,0,0) (NULL)" + +/turf/log_info_line() + return "([src]) ([x],[y],[z]) ([type])" + +/mob/log_info_line() + return "[..()] (ckey=[ckey])" + +/proc/log_info_line(var/datum/d) + if(!d) + return "*null*" + if(!istype(d)) + return json_encode(d) + return d.log_info_line() + +/mob/proc/simple_info_line() + return "[key_name(src)] ([x],[y],[z])" + +/client/proc/simple_info_line() + return "[key_name(src)] ([mob.x],[mob.y],[mob.z])" diff --git a/code/_helpers/matrices.dm b/code/_helpers/matrices.dm index 88bec71bc2..e2b41b2f5b 100644 --- a/code/_helpers/matrices.dm +++ b/code/_helpers/matrices.dm @@ -1,131 +1,131 @@ -/matrix/proc/TurnTo(old_angle, new_angle) - . = new_angle - old_angle - Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT - - -/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3) - if(!segments) - return - //VOREStation Addition Start - if(speed == 0) - loops = 0 - if(speed < 0) - speed = speed * -1 - clockwise = 0 - //VOREStation Addition End - var/segment = 360/segments - if(!clockwise) - segment = -segment - var/list/matrices = list() - for(var/i in 1 to segments-1) - var/matrix/M = matrix(transform) - M.Turn(segment*i) - matrices += M - var/matrix/last = matrix(transform) - matrices += last - - speed /= segments - - animate(src, transform = matrices[1], time = speed, loops) - for(var/i in 2 to segments) //2 because 1 is covered above - animate(transform = matrices[i], time = speed) - //doesn't have an object argument because this is "Stacking" with the animate call above - //3 billion% intentional - -//The X pixel offset of this matrix -/matrix/proc/get_x_shift() - . = c - -//The Y pixel offset of this matrix -/matrix/proc/get_y_shift() - . = f -// Color matrices: - -//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1. -#define LUMR 0.2126 -#define LUMG 0.7152 -#define LUMB 0.0722 - -//Still need color matrix addition, negation, and multiplication. - -//Returns an identity color matrix which does nothing -/proc/color_identity() - return list(1,0,0, 0,1,0, 0,0,1) - -//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites -//TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) -/proc/color_rotation(angle) - if(angle == 0) - return color_identity() - angle = CLAMP(angle, -180, 180) - var/cos = cos(angle) - var/sin = sin(angle) - - var/constA = 0.143 - var/constB = 0.140 - var/constC = -0.283 - return list( - LUMR + cos * (1-LUMR) + sin * -LUMR, LUMR + cos * -LUMR + sin * constA, LUMR + cos * -LUMR + sin * -(1-LUMR), - LUMG + cos * -LUMG + sin * -LUMG, LUMG + cos * (1-LUMG) + sin * constB, LUMG + cos * -LUMG + sin * LUMG, - LUMB + cos * -LUMB + sin * (1-LUMB), LUMB + cos * -LUMB + sin * constC, LUMB + cos * (1-LUMB) + sin * LUMB - ) - -//Makes everything brighter or darker without regard to existing color or brightness -/proc/color_brightness(power) - power = CLAMP(power, -255, 255) - power = power/255 - - return list(1,0,0, 0,1,0, 0,0,1, power,power,power) - -/var/list/delta_index = list( - 0, 0.01, 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.11, - 0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.22, 0.24, - 0.25, 0.27, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, - 0.44, 0.46, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.65, 0.68, - 0.71, 0.74, 0.77, 0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.98, - 1.0, 1.06, 1.12, 1.18, 1.24, 1.30, 1.36, 1.42, 1.48, 1.54, - 1.60, 1.66, 1.72, 1.78, 1.84, 1.90, 1.96, 2.0, 2.12, 2.25, - 2.37, 2.50, 2.62, 2.75, 2.87, 3.0, 3.2, 3.4, 3.6, 3.8, - 4.0, 4.3, 4.7, 4.9, 5.0, 5.5, 6.0, 6.5, 6.8, 7.0, - 7.3, 7.5, 7.8, 8.0, 8.4, 8.7, 9.0, 9.4, 9.6, 9.8, - 10.0) - -//Exxagerates or removes brightness -/proc/color_contrast(value) - value = CLAMP(value, -100, 100) - if(value == 0) - return color_identity() - - var/x = 0 - if (value < 0) - x = 127 + value / 100 * 127; - else - x = value % 1 - if(x == 0) - x = delta_index[value] - else - x = delta_index[value] * (1-x) + delta_index[value+1] * x//use linear interpolation for more granularity. - x = x * 127 + 127 - - var/mult = x / 127 - var/add = 0.5 * (127-x) / 255 - return list(mult,0,0, 0,mult,0, 0,0,mult, add,add,add) - -//Exxagerates or removes colors -/proc/color_saturation(value as num) - if(value == 0) - return color_identity() - value = CLAMP(value, -100, 100) - if(value > 0) - value *= 3 - var/x = 1 + value / 100 - var/inv = 1 - x - var/R = LUMR * inv - var/G = LUMG * inv - var/B = LUMB * inv - - return list(R + x,R,R, G,G + x,G, B,B,B + x) - -#undef LUMR -#undef LUMG +/matrix/proc/TurnTo(old_angle, new_angle) + . = new_angle - old_angle + Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT + + +/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3) + if(!segments) + return + //VOREStation Addition Start + if(speed == 0) + loops = 0 + if(speed < 0) + speed = speed * -1 + clockwise = 0 + //VOREStation Addition End + var/segment = 360/segments + if(!clockwise) + segment = -segment + var/list/matrices = list() + for(var/i in 1 to segments-1) + var/matrix/M = matrix(transform) + M.Turn(segment*i) + matrices += M + var/matrix/last = matrix(transform) + matrices += last + + speed /= segments + + animate(src, transform = matrices[1], time = speed, loops) + for(var/i in 2 to segments) //2 because 1 is covered above + animate(transform = matrices[i], time = speed) + //doesn't have an object argument because this is "Stacking" with the animate call above + //3 billion% intentional + +//The X pixel offset of this matrix +/matrix/proc/get_x_shift() + . = c + +//The Y pixel offset of this matrix +/matrix/proc/get_y_shift() + . = f +// Color matrices: + +//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1. +#define LUMR 0.2126 +#define LUMG 0.7152 +#define LUMB 0.0722 + +//Still need color matrix addition, negation, and multiplication. + +//Returns an identity color matrix which does nothing +/proc/color_identity() + return list(1,0,0, 0,1,0, 0,0,1) + +//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites +//TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) +/proc/color_rotation(angle) + if(angle == 0) + return color_identity() + angle = CLAMP(angle, -180, 180) + var/cos = cos(angle) + var/sin = sin(angle) + + var/constA = 0.143 + var/constB = 0.140 + var/constC = -0.283 + return list( + LUMR + cos * (1-LUMR) + sin * -LUMR, LUMR + cos * -LUMR + sin * constA, LUMR + cos * -LUMR + sin * -(1-LUMR), + LUMG + cos * -LUMG + sin * -LUMG, LUMG + cos * (1-LUMG) + sin * constB, LUMG + cos * -LUMG + sin * LUMG, + LUMB + cos * -LUMB + sin * (1-LUMB), LUMB + cos * -LUMB + sin * constC, LUMB + cos * (1-LUMB) + sin * LUMB + ) + +//Makes everything brighter or darker without regard to existing color or brightness +/proc/color_brightness(power) + power = CLAMP(power, -255, 255) + power = power/255 + + return list(1,0,0, 0,1,0, 0,0,1, power,power,power) + +/var/list/delta_index = list( + 0, 0.01, 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.11, + 0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.22, 0.24, + 0.25, 0.27, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, + 0.44, 0.46, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.65, 0.68, + 0.71, 0.74, 0.77, 0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.98, + 1.0, 1.06, 1.12, 1.18, 1.24, 1.30, 1.36, 1.42, 1.48, 1.54, + 1.60, 1.66, 1.72, 1.78, 1.84, 1.90, 1.96, 2.0, 2.12, 2.25, + 2.37, 2.50, 2.62, 2.75, 2.87, 3.0, 3.2, 3.4, 3.6, 3.8, + 4.0, 4.3, 4.7, 4.9, 5.0, 5.5, 6.0, 6.5, 6.8, 7.0, + 7.3, 7.5, 7.8, 8.0, 8.4, 8.7, 9.0, 9.4, 9.6, 9.8, + 10.0) + +//Exxagerates or removes brightness +/proc/color_contrast(value) + value = CLAMP(value, -100, 100) + if(value == 0) + return color_identity() + + var/x = 0 + if (value < 0) + x = 127 + value / 100 * 127; + else + x = value % 1 + if(x == 0) + x = delta_index[value] + else + x = delta_index[value] * (1-x) + delta_index[value+1] * x//use linear interpolation for more granularity. + x = x * 127 + 127 + + var/mult = x / 127 + var/add = 0.5 * (127-x) / 255 + return list(mult,0,0, 0,mult,0, 0,0,mult, add,add,add) + +//Exxagerates or removes colors +/proc/color_saturation(value as num) + if(value == 0) + return color_identity() + value = CLAMP(value, -100, 100) + if(value > 0) + value *= 3 + var/x = 1 + value / 100 + var/inv = 1 - x + var/R = LUMR * inv + var/G = LUMG * inv + var/B = LUMB * inv + + return list(R + x,R,R, G,G + x,G, B,B,B + x) + +#undef LUMR +#undef LUMG #undef LUMB \ No newline at end of file diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index e85a607417..12e6c46289 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -1,224 +1,224 @@ -var/church_name = null -/proc/church_name() - if (church_name) - return church_name - - var/name = "" - - name += pick("Holy", "United", "First", "Second", "Last") - - if (prob(20)) - name += " Space" - - name += " " + pick("Church", "Cathedral", "Body", "Worshippers", "Movement", "Witnesses") - name += " of [religion_name()]" - - return name - -/proc/command_name() - if(istype(using_map)) - return using_map.boss_name - -/proc/change_command_name(var/name) - - using_map.boss_name = name - - return name - -var/religion_name = null -/proc/religion_name() - if (religion_name) - return religion_name - - var/name = "" - - name += pick("bee", "science", "edu", "captain", "assistant", "monkey", "alien", "space", "unit", "sprocket", "gadget", "bomb", "revolution", "beyond", "station", "goon", "robot", "ivor", "hobnob") - name += pick("ism", "ia", "ology", "istism", "ites", "ick", "ian", "ity") - - return capitalize(name) - -/proc/system_name() - return using_map.starsys_name - -/proc/station_name() - if (using_map.station_name) - return using_map.station_name - - var/random = rand(1,5) - var/name = "" - var/new_station_name = null - - //Rare: Pre-Prefix - if (prob(10)) - name = pick("Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", "Automated", "Experimental", "Augmented") - new_station_name = name + " " - - // Prefix - switch(Holiday) - //get normal name - if(null,"",0) - name = pick("", "Stanford", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist","Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Capitalist", "Communist", "Bear", "Beard", "Derp", "Space", "Spess", "Star", "Moon", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", "Robot", "Hats", "Pizza") - if(name) - new_station_name += name + " " - - //For special days like christmas, easter, new-years etc ~Carn - if("Friday the 13th") - name = pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby") - new_station_name += name + " " - random = 13 - else - //get the first word of the Holiday and use that - var/i = findtext(Holiday," ",1,0) - name = copytext(Holiday,1,i) - new_station_name += name + " " - - // Suffix - name = pick("Station", "Fortress", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp") - new_station_name += name + " " - - // ID Number - switch(random) - if(1) - new_station_name += "[rand(1, 99)]" - if(2) - new_station_name += pick("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega") - if(3) - new_station_name += pick("II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX") - if(4) - new_station_name += pick("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-ray", "Yankee", "Zulu") - if(5) - new_station_name += pick("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen") - if(13) - new_station_name += pick("13","XIII","Thirteen") - - - if (config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = new_station_name - - return new_station_name - -// Is this even used? -/proc/world_name(var/name) - - using_map.station_name = name - - if (config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = name - - return name - -var/syndicate_name = null -/proc/syndicate_name() - if (syndicate_name) - return syndicate_name - - var/name = "" - - // Prefix - name += pick("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Bonk", "Gene", "Gib") - - // Suffix - if (prob(80)) - name += " " - - // Full - if (prob(60)) - name += pick("Syndicate", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") - // Broken - else - name += pick("Syndi", "Corp", "Bio", "System", "Prod", "Chem", "Inter", "Hive") - name += pick("", "-") - name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Code") - // Small - else - name += pick("-", "*", "") - name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Gen", "Star", "Dyne", "Code", "Hive") - - syndicate_name = name - return name - - -//Traitors and traitor silicons will get these. Revs will not. -var/syndicate_code_phrase//Code phrase for traitors. -var/syndicate_code_response//Code response for traitors. - - /* - Should be expanded. - How this works: - Instead of "I'm looking for James Smith," the traitor would say "James Smith" as part of a conversation. - Another traitor may then respond with: "They enjoy running through the void-filled vacuum of the derelict." - The phrase should then have the words: James Smith. - The response should then have the words: run, void, and derelict. - This way assures that the code is suited to the conversation and is unpredicatable. - Obviously, some people will be better at this than others but in theory, everyone should be able to do it and it only enhances roleplay. - Can probably be done through "{ }" but I don't really see the practical benefit. - One example of an earlier system is commented below. - -N - */ - -/proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm - - var/code_phrase = ""//What is returned when the proc finishes. - var/words = pick(//How many words there will be. Minimum of two. 2, 4 and 5 have a lesser chance of being selected. 3 is the most likely. - 50; 2, - 200; 3, - 50; 4, - 25; 5 - ) - - var/safety[] = list(1,2,3)//Tells the proc which options to remove later on. - var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation") - var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","redwine","moonshine") - var/locations[] = teleportlocs.len ? teleportlocs : drinks//if null, defaults to drinks instead. - - var/names[] = list() - for(var/datum/data/record/t in data_core.general)//Picks from crew manifest. - names += t.fields["name"] - - var/maxwords = words//Extra var to check for duplicates. - - for(words,words>0,words--)//Randomly picks from one of the choices below. - - if(words==1&&(1 in safety)&&(2 in safety))//If there is only one word remaining and choice 1 or 2 have not been selected. - safety = list(pick(1,2))//Select choice 1 or 2. - else if(words==1&&maxwords==2)//Else if there is only one word remaining (and there were two originally), and 1 or 2 were chosen, - safety = list(3)//Default to list 3 - - switch(pick(safety))//Chance based on the safety list. - if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. - switch(rand(1,2))//Mainly to add more options later. - if(1) - if(names.len&&prob(70)) - code_phrase += pick(names) - else - code_phrase += pick(pick(first_names_male,first_names_female)) - code_phrase += " " - code_phrase += pick(last_names) - if(2) - code_phrase += pick(joblist)//Returns a job. - safety -= 1 - if(2) - switch(rand(1,2))//Places or things. - if(1) - code_phrase += pick(drinks) - if(2) - code_phrase += pick(locations) - safety -= 2 - if(3) - switch(rand(1,3))//Nouns, adjectives, verbs. Can be selected more than once. - if(1) - code_phrase += pick(nouns) - if(2) - code_phrase += pick(adjectives) - if(3) - code_phrase += pick(verbs) - if(words==1) - code_phrase += "." - else - code_phrase += ", " - - return code_phrase +var/church_name = null +/proc/church_name() + if (church_name) + return church_name + + var/name = "" + + name += pick("Holy", "United", "First", "Second", "Last") + + if (prob(20)) + name += " Space" + + name += " " + pick("Church", "Cathedral", "Body", "Worshippers", "Movement", "Witnesses") + name += " of [religion_name()]" + + return name + +/proc/command_name() + if(istype(using_map)) + return using_map.boss_name + +/proc/change_command_name(var/name) + + using_map.boss_name = name + + return name + +var/religion_name = null +/proc/religion_name() + if (religion_name) + return religion_name + + var/name = "" + + name += pick("bee", "science", "edu", "captain", "assistant", "monkey", "alien", "space", "unit", "sprocket", "gadget", "bomb", "revolution", "beyond", "station", "goon", "robot", "ivor", "hobnob") + name += pick("ism", "ia", "ology", "istism", "ites", "ick", "ian", "ity") + + return capitalize(name) + +/proc/system_name() + return using_map.starsys_name + +/proc/station_name() + if (using_map.station_name) + return using_map.station_name + + var/random = rand(1,5) + var/name = "" + var/new_station_name = null + + //Rare: Pre-Prefix + if (prob(10)) + name = pick("Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", "Automated", "Experimental", "Augmented") + new_station_name = name + " " + + // Prefix + switch(Holiday) + //get normal name + if(null,"",0) + name = pick("", "Stanford", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist","Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Capitalist", "Communist", "Bear", "Beard", "Derp", "Space", "Spess", "Star", "Moon", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", "Robot", "Hats", "Pizza") + if(name) + new_station_name += name + " " + + //For special days like christmas, easter, new-years etc ~Carn + if("Friday the 13th") + name = pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby") + new_station_name += name + " " + random = 13 + else + //get the first word of the Holiday and use that + var/i = findtext(Holiday," ",1,0) + name = copytext(Holiday,1,i) + new_station_name += name + " " + + // Suffix + name = pick("Station", "Fortress", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp") + new_station_name += name + " " + + // ID Number + switch(random) + if(1) + new_station_name += "[rand(1, 99)]" + if(2) + new_station_name += pick("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega") + if(3) + new_station_name += pick("II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX") + if(4) + new_station_name += pick("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-ray", "Yankee", "Zulu") + if(5) + new_station_name += pick("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen") + if(13) + new_station_name += pick("13","XIII","Thirteen") + + + if (config && config.server_name) + world.name = "[config.server_name]: [name]" + else + world.name = new_station_name + + return new_station_name + +// Is this even used? +/proc/world_name(var/name) + + using_map.station_name = name + + if (config && config.server_name) + world.name = "[config.server_name]: [name]" + else + world.name = name + + return name + +var/syndicate_name = null +/proc/syndicate_name() + if (syndicate_name) + return syndicate_name + + var/name = "" + + // Prefix + name += pick("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Bonk", "Gene", "Gib") + + // Suffix + if (prob(80)) + name += " " + + // Full + if (prob(60)) + name += pick("Syndicate", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") + // Broken + else + name += pick("Syndi", "Corp", "Bio", "System", "Prod", "Chem", "Inter", "Hive") + name += pick("", "-") + name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Code") + // Small + else + name += pick("-", "*", "") + name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Gen", "Star", "Dyne", "Code", "Hive") + + syndicate_name = name + return name + + +//Traitors and traitor silicons will get these. Revs will not. +var/syndicate_code_phrase//Code phrase for traitors. +var/syndicate_code_response//Code response for traitors. + + /* + Should be expanded. + How this works: + Instead of "I'm looking for James Smith," the traitor would say "James Smith" as part of a conversation. + Another traitor may then respond with: "They enjoy running through the void-filled vacuum of the derelict." + The phrase should then have the words: James Smith. + The response should then have the words: run, void, and derelict. + This way assures that the code is suited to the conversation and is unpredicatable. + Obviously, some people will be better at this than others but in theory, everyone should be able to do it and it only enhances roleplay. + Can probably be done through "{ }" but I don't really see the practical benefit. + One example of an earlier system is commented below. + -N + */ + +/proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm + + var/code_phrase = ""//What is returned when the proc finishes. + var/words = pick(//How many words there will be. Minimum of two. 2, 4 and 5 have a lesser chance of being selected. 3 is the most likely. + 50; 2, + 200; 3, + 50; 4, + 25; 5 + ) + + var/safety[] = list(1,2,3)//Tells the proc which options to remove later on. + var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation") + var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","redwine","moonshine") + var/locations[] = teleportlocs.len ? teleportlocs : drinks//if null, defaults to drinks instead. + + var/names[] = list() + for(var/datum/data/record/t in data_core.general)//Picks from crew manifest. + names += t.fields["name"] + + var/maxwords = words//Extra var to check for duplicates. + + for(words,words>0,words--)//Randomly picks from one of the choices below. + + if(words==1&&(1 in safety)&&(2 in safety))//If there is only one word remaining and choice 1 or 2 have not been selected. + safety = list(pick(1,2))//Select choice 1 or 2. + else if(words==1&&maxwords==2)//Else if there is only one word remaining (and there were two originally), and 1 or 2 were chosen, + safety = list(3)//Default to list 3 + + switch(pick(safety))//Chance based on the safety list. + if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. + switch(rand(1,2))//Mainly to add more options later. + if(1) + if(names.len&&prob(70)) + code_phrase += pick(names) + else + code_phrase += pick(pick(first_names_male,first_names_female)) + code_phrase += " " + code_phrase += pick(last_names) + if(2) + code_phrase += pick(joblist)//Returns a job. + safety -= 1 + if(2) + switch(rand(1,2))//Places or things. + if(1) + code_phrase += pick(drinks) + if(2) + code_phrase += pick(locations) + safety -= 2 + if(3) + switch(rand(1,3))//Nouns, adjectives, verbs. Can be selected more than once. + if(1) + code_phrase += pick(nouns) + if(2) + code_phrase += pick(adjectives) + if(3) + code_phrase += pick(verbs) + if(words==1) + code_phrase += "." + else + code_phrase += ", " + + return code_phrase diff --git a/code/_helpers/sanitize_values.dm b/code/_helpers/sanitize_values.dm index 3d04200269..c74176043c 100644 --- a/code/_helpers/sanitize_values.dm +++ b/code/_helpers/sanitize_values.dm @@ -1,113 +1,113 @@ -//general stuff -/proc/sanitize_integer(number, min=0, max=1, default=0) - if(isnum(number)) - number = round(number) - if(min <= number && number <= max) - return number - return default - -// Checks if the given input is a valid list index; returns true/false and doesn't change anything. -/proc/is_valid_index(input, list/given_list) - if(!isnum(input)) - return FALSE - if(input != round(input)) - return FALSE - if(input < 1 || input > length(given_list)) - return FALSE - return TRUE - -/proc/sanitize_text(text, default="") - if(istext(text)) - return text - return default - -/proc/sanitize_inlist(value, list/List, default) - if(value in List) return value - if(default) return default - if(List && List.len)return List[1] - - - -//more specialised stuff -/proc/sanitize_gender(gender,neuter=0,plural=0, default="male") - switch(gender) - if(MALE, FEMALE)return gender - if(NEUTER) - if(neuter) return gender - else return default - if(PLURAL) - if(plural) return gender - else return default - return default - -/proc/sanitize_hexcolor(color, default="#000000") - if(!istext(color)) return default - var/len = length(color) - if(len != 7 && len !=4) return default - if(text2ascii(color,1) != 35) return default //35 is the ascii code for "#" - . = "#" - for(var/i=2,i<=len,i++) - var/ascii = text2ascii(color,i) - switch(ascii) - if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9 - if(97 to 102) . += ascii2text(ascii) //letters a to f - if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase - else return default - return . - -//Valid format codes: YY, YEAR, MM, DD, hh, mm, ss, :, -. " " (space). Invalid format will return default. -/proc/sanitize_time(time, default, format = "hh:mm") - if(!istext(time) || !(length(time) == length(format))) - return default - var/fragment = "" - . = list() - for(var/i = 1, i <= length(format), i++) - fragment += copytext(format,i,i+1) - if(fragment in list("YY", "YEAR", "MM", "DD", "hh", "mm", "ss")) - . += sanitize_one_time(copytext(time, i - length(fragment) + 1, i + 1), copytext(default, i - length(fragment) + 1, i + 1), fragment) - fragment = "" - else if(fragment in list(":", "-", " ")) - . += fragment - fragment = "" - if(fragment) - return default //This means the format was improper. - return JOINTEXT(.) - -//Internal proc, expects valid format and text input of equal length to format. -/proc/sanitize_one_time(input, default, format) - var/list/ainput = list() - for(var/i = 1, i <= length(input), i++) - ainput += text2ascii(input, i) - switch(format) - if("YY") - if(!(ainput[1] in 48 to 57) || !(ainput[2] in 48 to 57))//0 to 9 - return (default || "00") - return input - if("YEAR") - for(var/i = 1, i <= 4, i++) - if(!(ainput[i] in 48 to 57))//0 to 9 - return (default || "0000") - return input - if("MM") - var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 - var/late = (ainput[1] == 49) && (ainput[2] in 48 to 50) //10 to 12 - if(!(early || late)) - return (default || "01") - return input - if("DD") - var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 - var/mid = (ainput[1] in 49 to 50) && (ainput[2] in 48 to 57) //10 to 29 - var/late = (ainput[1] == 51) && (ainput[2] in 48 to 49) //30 to 31 - if(!(early || mid || late)) - return (default || "01") - return input - if("hh") - var/early = (ainput[1] in 48 to 49) && (ainput[2] in 48 to 57) //00 to 19 - var/late = (ainput[1] == 50) && (ainput[2] in 48 to 51) //20 to 23 - if(!(early || late)) - return (default || "00") - return input - if("mm", "ss") - if(!(ainput[1] in 48 to 53) || !(ainput[2] in 48 to 57)) //0 to 5, 0 to 9 - return (default || "00") - return input +//general stuff +/proc/sanitize_integer(number, min=0, max=1, default=0) + if(isnum(number)) + number = round(number) + if(min <= number && number <= max) + return number + return default + +// Checks if the given input is a valid list index; returns true/false and doesn't change anything. +/proc/is_valid_index(input, list/given_list) + if(!isnum(input)) + return FALSE + if(input != round(input)) + return FALSE + if(input < 1 || input > length(given_list)) + return FALSE + return TRUE + +/proc/sanitize_text(text, default="") + if(istext(text)) + return text + return default + +/proc/sanitize_inlist(value, list/List, default) + if(value in List) return value + if(default) return default + if(List && List.len)return List[1] + + + +//more specialised stuff +/proc/sanitize_gender(gender,neuter=0,plural=0, default="male") + switch(gender) + if(MALE, FEMALE)return gender + if(NEUTER) + if(neuter) return gender + else return default + if(PLURAL) + if(plural) return gender + else return default + return default + +/proc/sanitize_hexcolor(color, default="#000000") + if(!istext(color)) return default + var/len = length(color) + if(len != 7 && len !=4) return default + if(text2ascii(color,1) != 35) return default //35 is the ascii code for "#" + . = "#" + for(var/i=2,i<=len,i++) + var/ascii = text2ascii(color,i) + switch(ascii) + if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9 + if(97 to 102) . += ascii2text(ascii) //letters a to f + if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase + else return default + return . + +//Valid format codes: YY, YEAR, MM, DD, hh, mm, ss, :, -. " " (space). Invalid format will return default. +/proc/sanitize_time(time, default, format = "hh:mm") + if(!istext(time) || !(length(time) == length(format))) + return default + var/fragment = "" + . = list() + for(var/i = 1, i <= length(format), i++) + fragment += copytext(format,i,i+1) + if(fragment in list("YY", "YEAR", "MM", "DD", "hh", "mm", "ss")) + . += sanitize_one_time(copytext(time, i - length(fragment) + 1, i + 1), copytext(default, i - length(fragment) + 1, i + 1), fragment) + fragment = "" + else if(fragment in list(":", "-", " ")) + . += fragment + fragment = "" + if(fragment) + return default //This means the format was improper. + return JOINTEXT(.) + +//Internal proc, expects valid format and text input of equal length to format. +/proc/sanitize_one_time(input, default, format) + var/list/ainput = list() + for(var/i = 1, i <= length(input), i++) + ainput += text2ascii(input, i) + switch(format) + if("YY") + if(!(ainput[1] in 48 to 57) || !(ainput[2] in 48 to 57))//0 to 9 + return (default || "00") + return input + if("YEAR") + for(var/i = 1, i <= 4, i++) + if(!(ainput[i] in 48 to 57))//0 to 9 + return (default || "0000") + return input + if("MM") + var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 + var/late = (ainput[1] == 49) && (ainput[2] in 48 to 50) //10 to 12 + if(!(early || late)) + return (default || "01") + return input + if("DD") + var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 + var/mid = (ainput[1] in 49 to 50) && (ainput[2] in 48 to 57) //10 to 29 + var/late = (ainput[1] == 51) && (ainput[2] in 48 to 49) //30 to 31 + if(!(early || mid || late)) + return (default || "01") + return input + if("hh") + var/early = (ainput[1] in 48 to 49) && (ainput[2] in 48 to 57) //00 to 19 + var/late = (ainput[1] == 50) && (ainput[2] in 48 to 51) //20 to 23 + if(!(early || late)) + return (default || "00") + return input + if("mm", "ss") + if(!(ainput[1] in 48 to 53) || !(ainput[2] in 48 to 57)) //0 to 5, 0 to 9 + return (default || "00") + return input diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 9d190aaddf..2b5ba0245b 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -1,616 +1,616 @@ -/* - * Holds procs designed to help with filtering text - * Contains groups: - * SQL sanitization - * Text sanitization - * Text searches - * Text modification - * Misc - */ - - -/* - * SQL sanitization - */ - -// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts. -/proc/sanitizeSQL(var/t as text) - //var/sqltext = dbcon.Quote(t); //CHOMPEdit Begin - //return copytext(sqltext, 2, length(sqltext));//Quote() adds quotes around input, we already do that - return t - //CHOMPEdit End - -/* - * Text sanitization - */ -// Can be used almost the same way as normal input for text -/proc/clean_input(Message, Title, Default, mob/user=usr) - var/txt = input(user, Message, Title, Default) as text | null - if(txt) - return html_encode(txt) - -//Simply removes < and > and limits the length of the message -/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN) - var/list/strip_chars = list("<",">") - t = copytext(t,1,limit) - for(var/char in strip_chars) - var/index = findtext(t, char) - while(index) - t = copytext(t, 1, index) + copytext(t, index+1) - index = findtext(t, char) - return t - -//Runs byond's sanitization proc along-side strip_html_simple -//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' that html_encode() would cause -/proc/adminscrub(var/t,var/limit=MAX_MESSAGE_LEN) - return copytext((html_encode(strip_html_simple(t))),1,limit) - -//Used for preprocessing entered text -/proc/sanitize(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) - if(!input) - return - - if(max_length) - input = copytext(input,1,max_length) - - if(extra) - var/temp_input = replace_characters(input, list("\n"=" ","\t"=" "))//one character is replaced by two - if(length(input) < (length(temp_input) - 6))//6 is the number of linebreaks allowed per message - input = replace_characters(temp_input,list(" "=" "))//replace again, this time the double spaces with single ones - - if(encode) - // The below \ escapes have a space inserted to attempt to enable CI auto-checking of span class usage. Please do not remove the space. - //In addition to processing html, html_encode removes byond formatting codes like "\ red", "\ i" and other. - //It is important to avoid double-encode text, it can "break" quotes and some other characters. - //Also, keep in mind that escaped characters don't work in the interface (window titles, lower left corner of the main window, etc.) - input = html_encode(input) - else - //If not need encode text, simply remove < and > - //note: we can also remove here byond formatting codes: 0xFF + next byte - input = replace_characters(input, list("<"=" ", ">"=" ")) - - if(trim) - //Maybe, we need trim text twice? Here and before copytext? - input = trim(input) - - return input - -//Run sanitize(), but remove <, >, " first to prevent displaying them as > < &34; in some places, after html_encode(). -//Best used for sanitize object names, window titles. -//If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites - -//this is a problem of double-encode(when & becomes &), use sanitize() with encode=0, but not the sanitizeSafe()! -/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) - return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra) - -//Filters out undesirable characters from names -/proc/sanitizeName(var/input, var/max_length = MAX_NAME_LEN, var/allow_numbers = 0) - if(!input || length(input) > max_length) - return //Rejects the input if it is null or if it is longer then the max length allowed - - var/number_of_alphanumeric = 0 - var/last_char_group = 0 - var/output = "" - - for(var/i=1, i<=length(input), i++) - var/ascii_char = text2ascii(input,i) - switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters - output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 4 - - // a .. z - if(97 to 122) //Lowercase Letters - if(last_char_group<2) output += ascii2text(ascii_char-32) //Force uppercase first character - else output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 4 - - // 0 .. 9 - if(48 to 57) //Numbers - if(!allow_numbers) continue // If allow_numbers is 0, then don't do this. - output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 3 - - // ' - . - if(39,45,46) //Common name punctuation - if(!last_char_group) continue - output += ascii2text(ascii_char) - last_char_group = 2 - - // ~ | @ : # $ % & * + - if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI) - if(!last_char_group) continue //suppress at start of string - if(!allow_numbers) continue - output += ascii2text(ascii_char) - last_char_group = 2 - - //Space - if(32) - if(last_char_group <= 1) continue //suppress double-spaces and spaces at start of string - output += ascii2text(ascii_char) - last_char_group = 1 - else - return - - if(number_of_alphanumeric < 2) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '" - - if(last_char_group == 1) - output = copytext(output,1,length(output)) //removes the last character (in this case a space) - - for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai","plating")) //prevents these common metagamey names - if(cmptext(output,bad_name)) return //(not case sensitive) - - return output - -//Returns null if there is any bad text in the string -/proc/reject_bad_text(var/text, var/max_length=512) - if(length(text) > max_length) return //message too long - var/non_whitespace = 0 - for(var/i=1, i<=length(text), i++) - switch(text2ascii(text,i)) - if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or / - if(127 to 255) return //rejects weird letters like � - if(0 to 31) return //more weird stuff - if(32) continue //whitespace - else non_whitespace = 1 - if(non_whitespace) return text //only accepts the text if it has some non-spaces - - -//Old variant. Haven't dared to replace in some places. -/proc/sanitize_old(var/t,var/list/repl_chars = list("\n"="#","\t"="#")) - return html_encode(replace_characters(t,repl_chars)) - - -//Removes a few problematic characters -/proc/sanitize_simple(t,list/repl_chars = list("\n"="#","\t"="#")) - for(var/char in repl_chars) - var/index = findtext(t, char) - while(index) - t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index + length(char)) - index = findtext(t, char, index + length(char)) - return t - -/proc/sanitize_filename(t) - return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"="")) - -/* - * Text searches - */ - -//Checks the beginning of a string for a specified sub-string -//Returns the position of the substring or 0 if it was not found -/proc/dd_hasprefix(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtext(text, prefix, start, end) - -//Checks the beginning of a string for a specified sub-string. This proc is case sensitive -//Returns the position of the substring or 0 if it was not found -/proc/dd_hasprefix_case(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtextEx(text, prefix, start, end) - -//Checks the end of a string for a specified substring. -//Returns the position of the substring or 0 if it was not found -/proc/dd_hassuffix(text, suffix) - var/start = length(text) - length(suffix) - if(start) - return findtext(text, suffix, start, null) - return - -//Checks the end of a string for a specified substring. This proc is case sensitive -//Returns the position of the substring or 0 if it was not found -/proc/dd_hassuffix_case(text, suffix) - var/start = length(text) - length(suffix) - if(start) - return findtextEx(text, suffix, start, null) - -/* - * Text modification - */ -/proc/replace_characters(var/t,var/list/repl_chars) - for(var/char in repl_chars) - t = replacetext(t, char, repl_chars[char]) - return t - -//Adds 'u' number of zeros ahead of the text 't' -/proc/add_zero(t, u) - while (length(t) < u) - t = "0[t]" - return t - -//Adds 'u' number of spaces ahead of the text 't' -/proc/add_lspace(t, u) - while(length(t) < u) - t = " [t]" - return t - -//Adds 'u' number of spaces behind the text 't' -/proc/add_tspace(t, u) - while(length(t) < u) - t = "[t] " - return t - -//Returns a string with reserved characters and spaces before the first letter removed -/proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) - return copytext(text, i) - return "" - -//Returns a string with reserved characters and spaces after the last letter removed -/proc/trim_right(text) - for (var/i = length(text), i > 0, i--) - if (text2ascii(text, i) > 32) - return copytext(text, 1, i + 1) - return "" - -//Returns a string with reserved characters and spaces before the first word and after the last word removed. -/proc/trim(text) - return trim_left(trim_right(text)) - -//Returns a string with the first element of the string capitalized. -/proc/capitalize(var/t as text) - return uppertext(copytext(t, 1, 2)) + copytext(t, 2) - -//Returns a unicode string with the first element of the string capitalized. -/proc/capitalize_utf(var/t as text) - return uppertext(copytext_char(t, 1, 2)) + copytext_char(t, 2) - -//This proc strips html properly, remove < > and all text between -//for complete text sanitizing should be used sanitize() -/proc/strip_html_properly(var/input) - if(!input) - return - var/opentag = 1 //These store the position of < and > respectively. - var/closetag = 1 - while(1) - opentag = findtext(input, "<") - closetag = findtext(input, ">") - if(closetag && opentag) - if(closetag < opentag) - input = copytext(input, (closetag + 1)) - else - input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) - else if(closetag || opentag) - if(opentag) - input = copytext(input, 1, opentag) - else - input = copytext(input, (closetag + 1)) - else - break - - return input - -//This proc fills in all spaces with the "replace" var (* by default) with whatever -//is in the other string at the same spot (assuming it is not a replace char). -//This is used for fingerprints -/proc/stringmerge(var/text,var/compare,replace = "*") - var/newtext = text - if(length(text) != length(compare)) - return 0 - for(var/i = 1, i < length(text), i++) - var/a = copytext(text,i,i+1) - var/b = copytext(compare,i,i+1) - //if it isn't both the same letter, or if they are both the replacement character - //(no way to know what it was supposed to be) - if(a != b) - if(a == replace) //if A is the replacement char - newtext = copytext(newtext,1,i) + b + copytext(newtext, i+1) - else if(b == replace) //if B is the replacement char - newtext = copytext(newtext,1,i) + a + copytext(newtext, i+1) - else //The lists disagree, Uh-oh! - return 0 - return newtext - -//This proc returns the number of chars of the string that is the character -//This is used for detective work to determine fingerprint completion. -/proc/stringpercent(var/text,character = "*") - if(!text || !character) - return 0 - var/count = 0 - for(var/i = 1, i <= length(text), i++) - var/a = copytext(text,i,i+1) - if(a == character) - count++ - return count - -/proc/reverse_text(var/text = "") - var/new_text = "" - for(var/i = length(text); i > 0; i--) - new_text += copytext(text, i, i+1) - return new_text - -//Used in preferences' SetFlavorText and human's set_flavor verb -//Previews a string of len or less length -/proc/TextPreview(var/string,var/len=40) - if(length(string) <= len) - if(!length(string)) - return "\[...\]" - else - return string - else - return "[copytext_preserve_html(string, 1, 37)]..." - -//alternative copytext() for encoded text, doesn't break html entities (" and other) -/proc/copytext_preserve_html(var/text, var/first, var/last) - return html_encode(copytext(html_decode(text), first, last)) - -//For generating neat chat tag-images -//The icon var could be local in the proc, but it's a waste of resources -// to always create it and then throw it out. -/var/icon/text_tag_icons = 'icons/chattags.dmi' -/var/list/text_tag_cache = list() -/proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) - if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) - return tagdesc - if(!text_tag_cache[tagname]) - var/icon/tag = icon(text_tag_icons, tagname) - text_tag_cache[tagname] = bicon(tag, TRUE, "text_tag") - if(!C.tgui_panel.is_ready() || C.tgui_panel.oldchat) - return "[tagdesc]" - return text_tag_cache[tagname] - -/proc/create_text_tag_old(var/tagname, var/tagdesc = tagname, var/client/C = null) - if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) - return tagdesc - return "[tagdesc]" - -/proc/contains_az09(var/input) - for(var/i=1, i<=length(input), i++) - var/ascii_char = text2ascii(input,i) - switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters - return 1 - // a .. z - if(97 to 122) //Lowercase Letters - return 1 - - // 0 .. 9 - if(48 to 57) //Numbers - return 1 - return 0 - -/** - * Strip out the special beyond characters for \proper and \improper - * from text that will be sent to the browser. - */ -/proc/strip_improper(var/text) - return replacetext(replacetext(text, "\proper", ""), "\improper", "") - -/proc/pencode2html(t) - t = replacetext(t, "\n", "
") - t = replacetext(t, "\[center\]", "
") - t = replacetext(t, "\[/center\]", "
") - t = replacetext(t, "\[br\]", "
") - 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\]", "[stationtime2text()]") - t = replacetext(t, "\[date\]", "[stationdate2text()]") - t = replacetext(t, "\[large\]", "") - t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[field\]", "") - 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, "\[cell\]", "") - t = replacetext(t, "\[logo\]", "") //CHOMPEdit - t = replacetext(t, "\[redlogo\]", "") //CHOMPEdit - t = replacetext(t, "\[sglogo\]", "") //CHOMPEdit - t = replacetext(t, "\[editorbr\]", "") - return t - -//pencode translation to html for tags exclusive to digital files (currently email, nanoword, report editor fields, -//modular scanner data and txt file printing) and prints from them -/proc/digitalPencode2html(var/text) - text = replacetext(text, "\[pre\]", "
    ")
    -	text = replacetext(text, "\[/pre\]", "
    ") - text = replacetext(text, "\[fontred\]", "") // to pass html tag integrity unit test - text = replacetext(text, "\[fontblue\]", "")// to pass html tag integrity unit test - text = replacetext(text, "\[fontgreen\]", "") - text = replacetext(text, "\[/font\]", "") - text = replacetext(text, "\[redacted\]", "R E D A C T E D") - return pencode2html(text) - -//Will kill most formatting; not recommended. -/proc/html2pencode(t) - t = replacetext(t, "
    ", "\[pre\]")
    -	t = replacetext(t, "
    ", "\[/pre\]") - t = replacetext(t, "", "\[fontred\]")// to pass html tag integrity unit test - t = replacetext(t, "", "\[fontblue\]")// to pass html tag integrity unit test - t = replacetext(t, "", "\[fontgreen\]") - t = replacetext(t, "", "\[/font\]") - t = replacetext(t, "
    ", "\[br\]") - t = replacetext(t, "
    ", "\[br\]") - 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, "
    ", "\[center\]") - t = replacetext(t, "
    ", "\[/center\]") - 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, "
      ", "\[list\]") - t = replacetext(t, "
    ", "\[/list\]") - t = replacetext(t, "", "\[grid\]") - t = replacetext(t, "
    ", "\[/grid\]") - t = replacetext(t, "", "\[row\]") - t = replacetext(t, "", "\[cell\]") - t = replacetext(t, "", "\[logo\]") - t = replacetext(t, "", "\[redlogo\]") - t = replacetext(t, "", "\[sglogo\]") - t = replacetext(t, "", "\[field\]") - t = replacetext(t, "R E D A C T E D", "\[redacted\]") - t = strip_html_properly(t) - return t - -// Random password generator -/proc/GenerateKey() - //Feel free to move to Helpers. - 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 - -//Used for applying byonds text macros to strings that are loaded at runtime -/proc/apply_text_macros(string) - var/next_backslash = findtext(string, "\\") - if(!next_backslash) - return string - - var/leng = length(string) - - var/next_space = findtext(string, " ", next_backslash + 1) - if(!next_space) - next_space = leng - next_backslash - - if(!next_space) //trailing bs - return string - - var/base = next_backslash == 1 ? "" : copytext(string, 1, next_backslash) - var/macro = lowertext(copytext(string, next_backslash + 1, next_space)) - var/rest = next_backslash > leng ? "" : copytext(string, next_space + 1) - - //See http://www.byond.com/docs/ref/info.html#/DM/text/macros - switch(macro) - //prefixes/agnostic - if("the") - rest = text("\the []", rest) - if("a") - rest = text("\a []", rest) - if("an") - rest = text("\an []", rest) - if("proper") - rest = text("\proper []", rest) - if("improper") - rest = text("\improper []", rest) - if("roman") - rest = text("\roman []", rest) - //postfixes - if("th") - base = text("[]\th", rest) - if("s") - base = text("[]\s", rest) - if("he") - base = text("[]\he", rest) - if("she") - base = text("[]\she", rest) - if("his") - base = text("[]\his", rest) - if("himself") - base = text("[]\himself", rest) - if("herself") - base = text("[]\herself", rest) - if("hers") - base = text("[]\hers", rest) - - . = base - if(rest) - . += .(rest) - - -#define gender2text(gender) capitalize(gender) - -/** - * Used to get a properly sanitized input. Returns null if cancel is pressed. - * - * Arguments - ** user - Target of the input prompt. - ** message - The text inside of the prompt. - ** title - The window title of the prompt. - ** max_length - If you intend to impose a length limit - default is 1024. - ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. -*/ -/proc/stripped_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE) - var/user_input = input(user, message, title, default) as text|null - if(isnull(user_input)) // User pressed cancel - return - if(no_trim) - return copytext(html_encode(user_input), 1, max_length) - else - return trim(html_encode(user_input), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into <) - -/** - * Used to get a properly sanitized input in a larger box. Works very similarly to stripped_input. - * - * Arguments - ** user - Target of the input prompt. - ** message - The text inside of the prompt. - ** title - The window title of the prompt. - ** max_length - If you intend to impose a length limit - default is 1024. - ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. -*/ -/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE) - var/user_input = input(user, message, title, default) as message|null - if(isnull(user_input)) // User pressed cancel - return - if(no_trim) - return copytext(html_encode(user_input), 1, max_length) - else - return trim(html_encode(user_input), max_length) - -//Adds 'char' ahead of 'text' until there are 'count' characters total -/proc/add_leading(text, count, char = " ") - text = "[text]" - var/charcount = count - length_char(text) - var/list/chars_to_add[max(charcount + 1, 0)] - return jointext(chars_to_add, char) + text - -//Adds 'char' behind 'text' until there are 'count' characters total -/proc/add_trailing(text, count, char = " ") - text = "[text]" - var/charcount = count - length_char(text) - var/list/chars_to_add[max(charcount + 1, 0)] - return text + jointext(chars_to_add, char) - -//Readds quotes and apostrophes to HTML-encoded strings -/proc/readd_quotes(var/t) - var/list/repl_chars = list(""" = "\"","'" = "'") - for(var/char in repl_chars) - var/index = findtext(t, char) - while(index) - t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+5) - index = findtext(t, char) - return t - -// Rips out paper HTML but tries to keep it semi-readable. -/proc/paper_html_to_plaintext(paper_text) - paper_text = replacetext(paper_text, "
    ", "-----") - paper_text = replacetext(paper_text, "
  • ", "- ") // This makes ordered lists turn into unordered but fixing that is too much effort. - paper_text = replacetext(paper_text, "
  • ", "\n") - paper_text = replacetext(paper_text, "

    ", "\n") - paper_text = replacetext(paper_text, "
    ", "\n") - paper_text = strip_html_properly(paper_text) // Get rid of everything else entirely. - return paper_text +/* + * Holds procs designed to help with filtering text + * Contains groups: + * SQL sanitization + * Text sanitization + * Text searches + * Text modification + * Misc + */ + + +/* + * SQL sanitization + */ + +// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts. +/proc/sanitizeSQL(var/t as text) + //var/sqltext = dbcon.Quote(t); //CHOMPEdit Begin + //return copytext(sqltext, 2, length(sqltext));//Quote() adds quotes around input, we already do that + return t + //CHOMPEdit End + +/* + * Text sanitization + */ +// Can be used almost the same way as normal input for text +/proc/clean_input(Message, Title, Default, mob/user=usr) + var/txt = input(user, Message, Title, Default) as text | null + if(txt) + return html_encode(txt) + +//Simply removes < and > and limits the length of the message +/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN) + var/list/strip_chars = list("<",">") + t = copytext(t,1,limit) + for(var/char in strip_chars) + var/index = findtext(t, char) + while(index) + t = copytext(t, 1, index) + copytext(t, index+1) + index = findtext(t, char) + return t + +//Runs byond's sanitization proc along-side strip_html_simple +//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' that html_encode() would cause +/proc/adminscrub(var/t,var/limit=MAX_MESSAGE_LEN) + return copytext((html_encode(strip_html_simple(t))),1,limit) + +//Used for preprocessing entered text +/proc/sanitize(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) + if(!input) + return + + if(max_length) + input = copytext(input,1,max_length) + + if(extra) + var/temp_input = replace_characters(input, list("\n"=" ","\t"=" "))//one character is replaced by two + if(length(input) < (length(temp_input) - 6))//6 is the number of linebreaks allowed per message + input = replace_characters(temp_input,list(" "=" "))//replace again, this time the double spaces with single ones + + if(encode) + // The below \ escapes have a space inserted to attempt to enable CI auto-checking of span class usage. Please do not remove the space. + //In addition to processing html, html_encode removes byond formatting codes like "\ red", "\ i" and other. + //It is important to avoid double-encode text, it can "break" quotes and some other characters. + //Also, keep in mind that escaped characters don't work in the interface (window titles, lower left corner of the main window, etc.) + input = html_encode(input) + else + //If not need encode text, simply remove < and > + //note: we can also remove here byond formatting codes: 0xFF + next byte + input = replace_characters(input, list("<"=" ", ">"=" ")) + + if(trim) + //Maybe, we need trim text twice? Here and before copytext? + input = trim(input) + + return input + +//Run sanitize(), but remove <, >, " first to prevent displaying them as > < &34; in some places, after html_encode(). +//Best used for sanitize object names, window titles. +//If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites - +//this is a problem of double-encode(when & becomes &), use sanitize() with encode=0, but not the sanitizeSafe()! +/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) + return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra) + +//Filters out undesirable characters from names +/proc/sanitizeName(var/input, var/max_length = MAX_NAME_LEN, var/allow_numbers = 0) + if(!input || length(input) > max_length) + return //Rejects the input if it is null or if it is longer then the max length allowed + + var/number_of_alphanumeric = 0 + var/last_char_group = 0 + var/output = "" + + for(var/i=1, i<=length(input), i++) + var/ascii_char = text2ascii(input,i) + switch(ascii_char) + // A .. Z + if(65 to 90) //Uppercase Letters + output += ascii2text(ascii_char) + number_of_alphanumeric++ + last_char_group = 4 + + // a .. z + if(97 to 122) //Lowercase Letters + if(last_char_group<2) output += ascii2text(ascii_char-32) //Force uppercase first character + else output += ascii2text(ascii_char) + number_of_alphanumeric++ + last_char_group = 4 + + // 0 .. 9 + if(48 to 57) //Numbers + if(!allow_numbers) continue // If allow_numbers is 0, then don't do this. + output += ascii2text(ascii_char) + number_of_alphanumeric++ + last_char_group = 3 + + // ' - . + if(39,45,46) //Common name punctuation + if(!last_char_group) continue + output += ascii2text(ascii_char) + last_char_group = 2 + + // ~ | @ : # $ % & * + + if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI) + if(!last_char_group) continue //suppress at start of string + if(!allow_numbers) continue + output += ascii2text(ascii_char) + last_char_group = 2 + + //Space + if(32) + if(last_char_group <= 1) continue //suppress double-spaces and spaces at start of string + output += ascii2text(ascii_char) + last_char_group = 1 + else + return + + if(number_of_alphanumeric < 2) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '" + + if(last_char_group == 1) + output = copytext(output,1,length(output)) //removes the last character (in this case a space) + + for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai","plating")) //prevents these common metagamey names + if(cmptext(output,bad_name)) return //(not case sensitive) + + return output + +//Returns null if there is any bad text in the string +/proc/reject_bad_text(var/text, var/max_length=512) + if(length(text) > max_length) return //message too long + var/non_whitespace = 0 + for(var/i=1, i<=length(text), i++) + switch(text2ascii(text,i)) + if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or / + if(127 to 255) return //rejects weird letters like � + if(0 to 31) return //more weird stuff + if(32) continue //whitespace + else non_whitespace = 1 + if(non_whitespace) return text //only accepts the text if it has some non-spaces + + +//Old variant. Haven't dared to replace in some places. +/proc/sanitize_old(var/t,var/list/repl_chars = list("\n"="#","\t"="#")) + return html_encode(replace_characters(t,repl_chars)) + + +//Removes a few problematic characters +/proc/sanitize_simple(t,list/repl_chars = list("\n"="#","\t"="#")) + for(var/char in repl_chars) + var/index = findtext(t, char) + while(index) + t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index + length(char)) + index = findtext(t, char, index + length(char)) + return t + +/proc/sanitize_filename(t) + return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"="")) + +/* + * Text searches + */ + +//Checks the beginning of a string for a specified sub-string +//Returns the position of the substring or 0 if it was not found +/proc/dd_hasprefix(text, prefix) + var/start = 1 + var/end = length(prefix) + 1 + return findtext(text, prefix, start, end) + +//Checks the beginning of a string for a specified sub-string. This proc is case sensitive +//Returns the position of the substring or 0 if it was not found +/proc/dd_hasprefix_case(text, prefix) + var/start = 1 + var/end = length(prefix) + 1 + return findtextEx(text, prefix, start, end) + +//Checks the end of a string for a specified substring. +//Returns the position of the substring or 0 if it was not found +/proc/dd_hassuffix(text, suffix) + var/start = length(text) - length(suffix) + if(start) + return findtext(text, suffix, start, null) + return + +//Checks the end of a string for a specified substring. This proc is case sensitive +//Returns the position of the substring or 0 if it was not found +/proc/dd_hassuffix_case(text, suffix) + var/start = length(text) - length(suffix) + if(start) + return findtextEx(text, suffix, start, null) + +/* + * Text modification + */ +/proc/replace_characters(var/t,var/list/repl_chars) + for(var/char in repl_chars) + t = replacetext(t, char, repl_chars[char]) + return t + +//Adds 'u' number of zeros ahead of the text 't' +/proc/add_zero(t, u) + while (length(t) < u) + t = "0[t]" + return t + +//Adds 'u' number of spaces ahead of the text 't' +/proc/add_lspace(t, u) + while(length(t) < u) + t = " [t]" + return t + +//Adds 'u' number of spaces behind the text 't' +/proc/add_tspace(t, u) + while(length(t) < u) + t = "[t] " + return t + +//Returns a string with reserved characters and spaces before the first letter removed +/proc/trim_left(text) + for (var/i = 1 to length(text)) + if (text2ascii(text, i) > 32) + return copytext(text, i) + return "" + +//Returns a string with reserved characters and spaces after the last letter removed +/proc/trim_right(text) + for (var/i = length(text), i > 0, i--) + if (text2ascii(text, i) > 32) + return copytext(text, 1, i + 1) + return "" + +//Returns a string with reserved characters and spaces before the first word and after the last word removed. +/proc/trim(text) + return trim_left(trim_right(text)) + +//Returns a string with the first element of the string capitalized. +/proc/capitalize(var/t as text) + return uppertext(copytext(t, 1, 2)) + copytext(t, 2) + +//Returns a unicode string with the first element of the string capitalized. +/proc/capitalize_utf(var/t as text) + return uppertext(copytext_char(t, 1, 2)) + copytext_char(t, 2) + +//This proc strips html properly, remove < > and all text between +//for complete text sanitizing should be used sanitize() +/proc/strip_html_properly(var/input) + if(!input) + return + var/opentag = 1 //These store the position of < and > respectively. + var/closetag = 1 + while(1) + opentag = findtext(input, "<") + closetag = findtext(input, ">") + if(closetag && opentag) + if(closetag < opentag) + input = copytext(input, (closetag + 1)) + else + input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) + else if(closetag || opentag) + if(opentag) + input = copytext(input, 1, opentag) + else + input = copytext(input, (closetag + 1)) + else + break + + return input + +//This proc fills in all spaces with the "replace" var (* by default) with whatever +//is in the other string at the same spot (assuming it is not a replace char). +//This is used for fingerprints +/proc/stringmerge(var/text,var/compare,replace = "*") + var/newtext = text + if(length(text) != length(compare)) + return 0 + for(var/i = 1, i < length(text), i++) + var/a = copytext(text,i,i+1) + var/b = copytext(compare,i,i+1) + //if it isn't both the same letter, or if they are both the replacement character + //(no way to know what it was supposed to be) + if(a != b) + if(a == replace) //if A is the replacement char + newtext = copytext(newtext,1,i) + b + copytext(newtext, i+1) + else if(b == replace) //if B is the replacement char + newtext = copytext(newtext,1,i) + a + copytext(newtext, i+1) + else //The lists disagree, Uh-oh! + return 0 + return newtext + +//This proc returns the number of chars of the string that is the character +//This is used for detective work to determine fingerprint completion. +/proc/stringpercent(var/text,character = "*") + if(!text || !character) + return 0 + var/count = 0 + for(var/i = 1, i <= length(text), i++) + var/a = copytext(text,i,i+1) + if(a == character) + count++ + return count + +/proc/reverse_text(var/text = "") + var/new_text = "" + for(var/i = length(text); i > 0; i--) + new_text += copytext(text, i, i+1) + return new_text + +//Used in preferences' SetFlavorText and human's set_flavor verb +//Previews a string of len or less length +/proc/TextPreview(var/string,var/len=40) + if(length(string) <= len) + if(!length(string)) + return "\[...\]" + else + return string + else + return "[copytext_preserve_html(string, 1, 37)]..." + +//alternative copytext() for encoded text, doesn't break html entities (" and other) +/proc/copytext_preserve_html(var/text, var/first, var/last) + return html_encode(copytext(html_decode(text), first, last)) + +//For generating neat chat tag-images +//The icon var could be local in the proc, but it's a waste of resources +// to always create it and then throw it out. +/var/icon/text_tag_icons = 'icons/chattags.dmi' +/var/list/text_tag_cache = list() +/proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) + return tagdesc + if(!text_tag_cache[tagname]) + var/icon/tag = icon(text_tag_icons, tagname) + text_tag_cache[tagname] = bicon(tag, TRUE, "text_tag") + if(!C.tgui_panel.is_ready() || C.tgui_panel.oldchat) + return "[tagdesc]" + return text_tag_cache[tagname] + +/proc/create_text_tag_old(var/tagname, var/tagdesc = tagname, var/client/C = null) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) + return tagdesc + return "[tagdesc]" + +/proc/contains_az09(var/input) + for(var/i=1, i<=length(input), i++) + var/ascii_char = text2ascii(input,i) + switch(ascii_char) + // A .. Z + if(65 to 90) //Uppercase Letters + return 1 + // a .. z + if(97 to 122) //Lowercase Letters + return 1 + + // 0 .. 9 + if(48 to 57) //Numbers + return 1 + return 0 + +/** + * Strip out the special beyond characters for \proper and \improper + * from text that will be sent to the browser. + */ +/proc/strip_improper(var/text) + return replacetext(replacetext(text, "\proper", ""), "\improper", "") + +/proc/pencode2html(t) + t = replacetext(t, "\n", "
    ") + t = replacetext(t, "\[center\]", "

    ") + t = replacetext(t, "\[/center\]", "
    ") + t = replacetext(t, "\[br\]", "
    ") + 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\]", "[stationtime2text()]") + t = replacetext(t, "\[date\]", "[stationdate2text()]") + t = replacetext(t, "\[large\]", "") + t = replacetext(t, "\[/large\]", "") + t = replacetext(t, "\[field\]", "") + 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, "\[cell\]", "") + t = replacetext(t, "\[logo\]", "") //CHOMPEdit + t = replacetext(t, "\[redlogo\]", "") //CHOMPEdit + t = replacetext(t, "\[sglogo\]", "") //CHOMPEdit + t = replacetext(t, "\[editorbr\]", "") + return t + +//pencode translation to html for tags exclusive to digital files (currently email, nanoword, report editor fields, +//modular scanner data and txt file printing) and prints from them +/proc/digitalPencode2html(var/text) + text = replacetext(text, "\[pre\]", "
    ")
    +	text = replacetext(text, "\[/pre\]", "
    ") + text = replacetext(text, "\[fontred\]", "") // to pass html tag integrity unit test + text = replacetext(text, "\[fontblue\]", "")// to pass html tag integrity unit test + text = replacetext(text, "\[fontgreen\]", "") + text = replacetext(text, "\[/font\]", "") + text = replacetext(text, "\[redacted\]", "R E D A C T E D") + return pencode2html(text) + +//Will kill most formatting; not recommended. +/proc/html2pencode(t) + t = replacetext(t, "
    ", "\[pre\]")
    +	t = replacetext(t, "
    ", "\[/pre\]") + t = replacetext(t, "", "\[fontred\]")// to pass html tag integrity unit test + t = replacetext(t, "", "\[fontblue\]")// to pass html tag integrity unit test + t = replacetext(t, "", "\[fontgreen\]") + t = replacetext(t, "", "\[/font\]") + t = replacetext(t, "
    ", "\[br\]") + t = replacetext(t, "
    ", "\[br\]") + 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, "
    ", "\[center\]") + t = replacetext(t, "
    ", "\[/center\]") + 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, "
      ", "\[list\]") + t = replacetext(t, "
    ", "\[/list\]") + t = replacetext(t, "", "\[grid\]") + t = replacetext(t, "
    ", "\[/grid\]") + t = replacetext(t, "", "\[row\]") + t = replacetext(t, "", "\[cell\]") + t = replacetext(t, "", "\[logo\]") + t = replacetext(t, "", "\[redlogo\]") + t = replacetext(t, "", "\[sglogo\]") + t = replacetext(t, "", "\[field\]") + t = replacetext(t, "R E D A C T E D", "\[redacted\]") + t = strip_html_properly(t) + return t + +// Random password generator +/proc/GenerateKey() + //Feel free to move to Helpers. + 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 + +//Used for applying byonds text macros to strings that are loaded at runtime +/proc/apply_text_macros(string) + var/next_backslash = findtext(string, "\\") + if(!next_backslash) + return string + + var/leng = length(string) + + var/next_space = findtext(string, " ", next_backslash + 1) + if(!next_space) + next_space = leng - next_backslash + + if(!next_space) //trailing bs + return string + + var/base = next_backslash == 1 ? "" : copytext(string, 1, next_backslash) + var/macro = lowertext(copytext(string, next_backslash + 1, next_space)) + var/rest = next_backslash > leng ? "" : copytext(string, next_space + 1) + + //See http://www.byond.com/docs/ref/info.html#/DM/text/macros + switch(macro) + //prefixes/agnostic + if("the") + rest = text("\the []", rest) + if("a") + rest = text("\a []", rest) + if("an") + rest = text("\an []", rest) + if("proper") + rest = text("\proper []", rest) + if("improper") + rest = text("\improper []", rest) + if("roman") + rest = text("\roman []", rest) + //postfixes + if("th") + base = text("[]\th", rest) + if("s") + base = text("[]\s", rest) + if("he") + base = text("[]\he", rest) + if("she") + base = text("[]\she", rest) + if("his") + base = text("[]\his", rest) + if("himself") + base = text("[]\himself", rest) + if("herself") + base = text("[]\herself", rest) + if("hers") + base = text("[]\hers", rest) + + . = base + if(rest) + . += .(rest) + + +#define gender2text(gender) capitalize(gender) + +/** + * Used to get a properly sanitized input. Returns null if cancel is pressed. + * + * Arguments + ** user - Target of the input prompt. + ** message - The text inside of the prompt. + ** title - The window title of the prompt. + ** max_length - If you intend to impose a length limit - default is 1024. + ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. +*/ +/proc/stripped_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE) + var/user_input = input(user, message, title, default) as text|null + if(isnull(user_input)) // User pressed cancel + return + if(no_trim) + return copytext(html_encode(user_input), 1, max_length) + else + return trim(html_encode(user_input), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into <) + +/** + * Used to get a properly sanitized input in a larger box. Works very similarly to stripped_input. + * + * Arguments + ** user - Target of the input prompt. + ** message - The text inside of the prompt. + ** title - The window title of the prompt. + ** max_length - If you intend to impose a length limit - default is 1024. + ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. +*/ +/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE) + var/user_input = input(user, message, title, default) as message|null + if(isnull(user_input)) // User pressed cancel + return + if(no_trim) + return copytext(html_encode(user_input), 1, max_length) + else + return trim(html_encode(user_input), max_length) + +//Adds 'char' ahead of 'text' until there are 'count' characters total +/proc/add_leading(text, count, char = " ") + text = "[text]" + var/charcount = count - length_char(text) + var/list/chars_to_add[max(charcount + 1, 0)] + return jointext(chars_to_add, char) + text + +//Adds 'char' behind 'text' until there are 'count' characters total +/proc/add_trailing(text, count, char = " ") + text = "[text]" + var/charcount = count - length_char(text) + var/list/chars_to_add[max(charcount + 1, 0)] + return text + jointext(chars_to_add, char) + +//Readds quotes and apostrophes to HTML-encoded strings +/proc/readd_quotes(var/t) + var/list/repl_chars = list(""" = "\"","'" = "'") + for(var/char in repl_chars) + var/index = findtext(t, char) + while(index) + t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+5) + index = findtext(t, char) + return t + +// Rips out paper HTML but tries to keep it semi-readable. +/proc/paper_html_to_plaintext(paper_text) + paper_text = replacetext(paper_text, "
    ", "-----") + paper_text = replacetext(paper_text, "
  • ", "- ") // This makes ordered lists turn into unordered but fixing that is too much effort. + paper_text = replacetext(paper_text, "
  • ", "\n") + paper_text = replacetext(paper_text, "

    ", "\n") + paper_text = replacetext(paper_text, "
    ", "\n") + paper_text = strip_html_properly(paper_text) // Get rid of everything else entirely. + return paper_text diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 1a6c2dadf2..23b7d7707b 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -1,169 +1,169 @@ -#define TimeOfGame (get_game_time()) -#define TimeOfTick (TICK_USAGE*0.01*world.tick_lag) - -#define DS2NEARESTTICK(DS) TICKS2DS(-round(-(DS2TICKS(DS)))) - -var/world_startup_time - -/proc/get_game_time() - var/global/time_offset = 0 - var/global/last_time = 0 - var/global/last_usage = 0 - - var/wtime = world.time - var/wusage = TICK_USAGE * 0.01 - - if(last_time < wtime && last_usage > 1) - time_offset += last_usage - 1 - - last_time = wtime - last_usage = wusage - - return wtime + (time_offset + wusage) * world.tick_lag - -GLOBAL_VAR_INIT(roundstart_hour, pick(2,7,12,17)) -var/station_date = "" -var/next_station_date_change = 1 DAY - -#define duration2stationtime(time) time2text(station_time_in_ds + time, "hh:mm") -#define roundstart_delay_time (world.time - round_duration_in_ds) -#define world_time_in_ds(time) (GLOB.roundstart_hour HOURS + time - roundstart_delay_time) -#define round_duration_in_ds (GLOB.round_start_time ? REALTIMEOFDAY - GLOB.round_start_time : 0) -#define station_time_in_ds (GLOB.roundstart_hour HOURS + round_duration_in_ds) - -/proc/stationtime2text() - return time2text(station_time_in_ds + GLOB.timezoneOffset, "hh:mm") - -/proc/worldtime2stationtime(time) - return time2text(world_time_in_ds(time) + GLOB.timezoneOffset, "hh:mm") - -/proc/stationdate2text() - var/update_time = FALSE - if(station_time_in_ds > next_station_date_change) - next_station_date_change += 1 DAY - update_time = TRUE - if(!station_date || update_time) - station_date = num2text((text2num(time2text(REALTIMEOFDAY, "YYYY"))+544)) + "-" + time2text(REALTIMEOFDAY, "MM-DD") //CHOMP EDIT - return station_date - -//ISO 8601 -/proc/time_stamp() - var/date_portion = time2text(world.timeofday, "YYYY-MM-DD") - var/time_portion = time2text(world.timeofday, "hh:mm:ss") - return "[date_portion]T[time_portion]" - -/proc/get_timezone_offset() - var/midnight_gmt_here = text2num(time2text(0,"hh")) * 36000 - if(midnight_gmt_here > 12 HOURS) - return 24 HOURS - midnight_gmt_here - else - return midnight_gmt_here - -/proc/gameTimestamp(format = "hh:mm:ss", wtime=null) - if(!wtime) - wtime = world.time - return time2text(wtime - GLOB.timezoneOffset, format) - -/* Returns 1 if it is the selected month and day */ -/proc/isDay(var/month, var/day) - if(isnum(month) && isnum(day)) - var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month - var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day - if(month == MM && day == DD) - return 1 - - // Uncomment this out when debugging! - //else - //return 1 - -var/next_duration_update = 0 -var/last_round_duration = 0 -GLOBAL_VAR_INIT(round_start_time, 0) - -/hook/roundstart/proc/start_timer() - GLOB.round_start_time = REALTIMEOFDAY - return 1 - -/proc/roundduration2text() - if(!GLOB.round_start_time) - return "00:00" - if(last_round_duration && world.time < next_duration_update) - return last_round_duration - - var/mills = round_duration_in_ds // 1/10 of a second, not real milliseconds but whatever - //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something - var/mins = round((mills % 36000) / 600) - var/hours = round(mills / 36000) - - mins = mins < 10 ? add_zero(mins, 1) : mins - hours = hours < 10 ? add_zero(hours, 1) : hours - - last_round_duration = "[hours]:[mins]" - next_duration_update = world.time + 1 MINUTES - return last_round_duration - -/var/midnight_rollovers = 0 -/var/rollovercheck_last_timeofday = 0 -/var/rollover_safety_date = 0 // set in world/New to the server startup day-of-month -/proc/update_midnight_rollover() - // Day has wrapped (world.timeofday drops to 0 at the start of each real day) - if (world.timeofday < rollovercheck_last_timeofday) - // If the day started/last wrap was < 12 hours ago, this is spurious - if(rollover_safety_date < world.realtime - (12 HOURS)) - midnight_rollovers++ - rollover_safety_date = world.realtime - else - warning("Time rollover error: world.timeofday decreased from previous check, but the day or last rollover is less than 12 hours old. System clock?") - rollovercheck_last_timeofday = world.timeofday - return midnight_rollovers - -//Increases delay as the server gets more overloaded, -//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful -#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta-1,1)), 1) - -//returns the number of ticks slept -/proc/stoplag(initial_delay) - if (!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT)) - sleep(world.tick_lag) - return 1 - if (!initial_delay) - initial_delay = world.tick_lag - . = 0 - var/i = DS2TICKS(initial_delay) - do - . += CEILING(i*DELTA_CALC, 1) - sleep(i*world.tick_lag*DELTA_CALC) - i *= 2 - while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit)) - -#undef DELTA_CALC - - -//Takes a value of time in deciseconds. -//Returns a text value of that number in hours, minutes, or seconds. -/proc/DisplayTimeText(time_value, round_seconds_to = 0.1) - var/second = round(time_value * 0.1, round_seconds_to) - if(!second) - return "right now" - if(second < 60) - return "[second] second[(second != 1)? "s":""]" - var/minute = FLOOR(second / 60, 1) - second = MODULUS(second, 60) - var/secondT - if(second) - secondT = " and [second] second[(second != 1)? "s":""]" - if(minute < 60) - return "[minute] minute[(minute != 1)? "s":""][secondT]" - var/hour = FLOOR(minute / 60, 1) - minute = MODULUS(minute, 60) - var/minuteT - if(minute) - minuteT = " and [minute] minute[(minute != 1)? "s":""]" - if(hour < 24) - return "[hour] hour[(hour != 1)? "s":""][minuteT][secondT]" - var/day = FLOOR(hour / 24, 1) - hour = MODULUS(hour, 24) - var/hourT - if(hour) - hourT = " and [hour] hour[(hour != 1)? "s":""]" - return "[day] day[(day != 1)? "s":""][hourT][minuteT][secondT]" +#define TimeOfGame (get_game_time()) +#define TimeOfTick (TICK_USAGE*0.01*world.tick_lag) + +#define DS2NEARESTTICK(DS) TICKS2DS(-round(-(DS2TICKS(DS)))) + +var/world_startup_time + +/proc/get_game_time() + var/global/time_offset = 0 + var/global/last_time = 0 + var/global/last_usage = 0 + + var/wtime = world.time + var/wusage = TICK_USAGE * 0.01 + + if(last_time < wtime && last_usage > 1) + time_offset += last_usage - 1 + + last_time = wtime + last_usage = wusage + + return wtime + (time_offset + wusage) * world.tick_lag + +GLOBAL_VAR_INIT(roundstart_hour, pick(2,7,12,17)) +var/station_date = "" +var/next_station_date_change = 1 DAY + +#define duration2stationtime(time) time2text(station_time_in_ds + time, "hh:mm") +#define roundstart_delay_time (world.time - round_duration_in_ds) +#define world_time_in_ds(time) (GLOB.roundstart_hour HOURS + time - roundstart_delay_time) +#define round_duration_in_ds (GLOB.round_start_time ? REALTIMEOFDAY - GLOB.round_start_time : 0) +#define station_time_in_ds (GLOB.roundstart_hour HOURS + round_duration_in_ds) + +/proc/stationtime2text() + return time2text(station_time_in_ds + GLOB.timezoneOffset, "hh:mm") + +/proc/worldtime2stationtime(time) + return time2text(world_time_in_ds(time) + GLOB.timezoneOffset, "hh:mm") + +/proc/stationdate2text() + var/update_time = FALSE + if(station_time_in_ds > next_station_date_change) + next_station_date_change += 1 DAY + update_time = TRUE + if(!station_date || update_time) + station_date = num2text((text2num(time2text(REALTIMEOFDAY, "YYYY"))+544)) + "-" + time2text(REALTIMEOFDAY, "MM-DD") //CHOMP EDIT + return station_date + +//ISO 8601 +/proc/time_stamp() + var/date_portion = time2text(world.timeofday, "YYYY-MM-DD") + var/time_portion = time2text(world.timeofday, "hh:mm:ss") + return "[date_portion]T[time_portion]" + +/proc/get_timezone_offset() + var/midnight_gmt_here = text2num(time2text(0,"hh")) * 36000 + if(midnight_gmt_here > 12 HOURS) + return 24 HOURS - midnight_gmt_here + else + return midnight_gmt_here + +/proc/gameTimestamp(format = "hh:mm:ss", wtime=null) + if(!wtime) + wtime = world.time + return time2text(wtime - GLOB.timezoneOffset, format) + +/* Returns 1 if it is the selected month and day */ +/proc/isDay(var/month, var/day) + if(isnum(month) && isnum(day)) + var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month + var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day + if(month == MM && day == DD) + return 1 + + // Uncomment this out when debugging! + //else + //return 1 + +var/next_duration_update = 0 +var/last_round_duration = 0 +GLOBAL_VAR_INIT(round_start_time, 0) + +/hook/roundstart/proc/start_timer() + GLOB.round_start_time = REALTIMEOFDAY + return 1 + +/proc/roundduration2text() + if(!GLOB.round_start_time) + return "00:00" + if(last_round_duration && world.time < next_duration_update) + return last_round_duration + + var/mills = round_duration_in_ds // 1/10 of a second, not real milliseconds but whatever + //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something + var/mins = round((mills % 36000) / 600) + var/hours = round(mills / 36000) + + mins = mins < 10 ? add_zero(mins, 1) : mins + hours = hours < 10 ? add_zero(hours, 1) : hours + + last_round_duration = "[hours]:[mins]" + next_duration_update = world.time + 1 MINUTES + return last_round_duration + +/var/midnight_rollovers = 0 +/var/rollovercheck_last_timeofday = 0 +/var/rollover_safety_date = 0 // set in world/New to the server startup day-of-month +/proc/update_midnight_rollover() + // Day has wrapped (world.timeofday drops to 0 at the start of each real day) + if (world.timeofday < rollovercheck_last_timeofday) + // If the day started/last wrap was < 12 hours ago, this is spurious + if(rollover_safety_date < world.realtime - (12 HOURS)) + midnight_rollovers++ + rollover_safety_date = world.realtime + else + warning("Time rollover error: world.timeofday decreased from previous check, but the day or last rollover is less than 12 hours old. System clock?") + rollovercheck_last_timeofday = world.timeofday + return midnight_rollovers + +//Increases delay as the server gets more overloaded, +//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful +#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta-1,1)), 1) + +//returns the number of ticks slept +/proc/stoplag(initial_delay) + if (!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT)) + sleep(world.tick_lag) + return 1 + if (!initial_delay) + initial_delay = world.tick_lag + . = 0 + var/i = DS2TICKS(initial_delay) + do + . += CEILING(i*DELTA_CALC, 1) + sleep(i*world.tick_lag*DELTA_CALC) + i *= 2 + while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit)) + +#undef DELTA_CALC + + +//Takes a value of time in deciseconds. +//Returns a text value of that number in hours, minutes, or seconds. +/proc/DisplayTimeText(time_value, round_seconds_to = 0.1) + var/second = round(time_value * 0.1, round_seconds_to) + if(!second) + return "right now" + if(second < 60) + return "[second] second[(second != 1)? "s":""]" + var/minute = FLOOR(second / 60, 1) + second = MODULUS(second, 60) + var/secondT + if(second) + secondT = " and [second] second[(second != 1)? "s":""]" + if(minute < 60) + return "[minute] minute[(minute != 1)? "s":""][secondT]" + var/hour = FLOOR(minute / 60, 1) + minute = MODULUS(minute, 60) + var/minuteT + if(minute) + minuteT = " and [minute] minute[(minute != 1)? "s":""]" + if(hour < 24) + return "[hour] hour[(hour != 1)? "s":""][minuteT][secondT]" + var/day = FLOOR(hour / 24, 1) + hour = MODULUS(hour, 24) + var/hourT + if(hour) + hourT = " and [hour] hour[(hour != 1)? "s":""]" + return "[day] day[(day != 1)? "s":""][hourT][minuteT][secondT]" diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index e21d973b1b..8bd45bbfc7 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -1,425 +1,425 @@ -/* - * Holds procs designed to change one type of value, into another. - * Contains: - * hex2num & num2hex - * file2list - * angle2dir - */ - -// Returns an integer given a hexadecimal number string as input. -/proc/hex2num(hex) - if (!istext(hex)) - return - - var/num = 0 - var/power = 1 - var/i = length(hex) - - while (i) - var/char = text2ascii(hex, i) - switch(char) - if(48) // 0 -- do nothing - if(49 to 57) num += (char - 48) * power // 1-9 - if(97, 65) num += power * 10 // A - if(98, 66) num += power * 11 // B - if(99, 67) num += power * 12 // C - if(100, 68) num += power * 13 // D - if(101, 69) num += power * 14 // E - if(102, 70) num += power * 15 // F - else - return - power *= 16 - i-- - return num - -// Returns the hex value of a number given a value assumed to be a base-ten value -/proc/num2hex(num, padlength) - var/global/list/hexdigits = list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F") - - . = "" - while(num > 0) - var/hexdigit = hexdigits[(num & 0xF) + 1] - . = "[hexdigit][.]" - num >>= 4 //go to the next half-byte - - //pad with zeroes - var/left = padlength - length(.) - while (left-- > 0) - . = "0[.]" - -/proc/text2numlist(text, delimiter="\n") - var/list/num_list = list() - for(var/x in splittext(text, delimiter)) - num_list += text2num(x) - return num_list - -// Splits the text of a file at seperator and returns them in a list. -/proc/file2list(filename, seperator="\n") - return splittext(return_file_text(filename),seperator) - -// Turns a direction into text -/proc/num2dir(direction) - switch (direction) - if (1.0) return NORTH - if (2.0) return SOUTH - if (4.0) return EAST - if (8.0) return WEST - else - to_world_log("UNKNOWN DIRECTION: [direction]") - -// Turns a direction into text -/proc/dir2text(direction) - switch (direction) - if (NORTH) return "north" - if (SOUTH) return "south" - if (EAST) return "east" - if (WEST) return "west" - if (NORTHEAST) return "northeast" - if (SOUTHEAST) return "southeast" - if (NORTHWEST) return "northwest" - if (SOUTHWEST) return "southwest" - if (UP) return "up" - if (DOWN) return "down" - -// Turns text into proper directions -/proc/text2dir(direction) - switch (uppertext(direction)) - if ("NORTH") return 1 - if ("SOUTH") return 2 - if ("EAST") return 4 - if ("WEST") return 8 - if ("NORTHEAST") return 5 - if ("NORTHWEST") return 9 - if ("SOUTHEAST") return 6 - if ("SOUTHWEST") return 10 - -// Turns a direction into text showing all bits set -/proc/dirs2text(direction) - if(!direction) - return "" - var/list/dirs = list() - if(direction & NORTH) - dirs += "NORTH" - if(direction & SOUTH) - dirs += "SOUTH" - if(direction & EAST) - dirs += "EAST" - if(direction & WEST) - dirs += "WEST" - if(direction & UP) - dirs += "UP" - if(direction & DOWN) - dirs += "DOWN" - return dirs.Join(" ") - -// Converts an angle (degrees) into an ss13 direction -/proc/angle2dir(var/degree) - degree = (degree + 22.5) % 365 // 22.5 = 45 / 2 - if (degree < 45) return NORTH - if (degree < 90) return NORTHEAST - if (degree < 135) return EAST - if (degree < 180) return SOUTHEAST - if (degree < 225) return SOUTH - if (degree < 270) return SOUTHWEST - if (degree < 315) return WEST - return NORTH|WEST - -// Returns the north-zero clockwise angle in degrees, given a direction -/proc/dir2angle(var/D) - switch (D) - if (NORTH) return 0 - if (SOUTH) return 180 - if (EAST) return 90 - if (WEST) return 270 - if (NORTHEAST) return 45 - if (SOUTHEAST) return 135 - if (NORTHWEST) return 315 - if (SOUTHWEST) return 225 - -// Converts a blend_mode constant to one acceptable to icon.Blend() -/proc/blendMode2iconMode(blend_mode) - switch (blend_mode) - if (BLEND_MULTIPLY) return ICON_MULTIPLY - if (BLEND_ADD) return ICON_ADD - if (BLEND_SUBTRACT) return ICON_SUBTRACT - else return ICON_OVERLAY - -// Converts a rights bitfield into a string -/proc/rights2text(rights,seperator="") - if (rights & R_BUILDMODE) . += "[seperator]+BUILDMODE" - if (rights & R_ADMIN) . += "[seperator]+ADMIN" - if (rights & R_BAN) . += "[seperator]+BAN" - if (rights & R_FUN) . += "[seperator]+FUN" - if (rights & R_SERVER) . += "[seperator]+SERVER" - if (rights & R_DEBUG) . += "[seperator]+DEBUG" - if (rights & R_POSSESS) . += "[seperator]+POSSESS" - if (rights & R_PERMISSIONS) . += "[seperator]+PERMISSIONS" - if (rights & R_STEALTH) . += "[seperator]+STEALTH" - if (rights & R_REJUVINATE) . += "[seperator]+REJUVINATE" - if (rights & R_VAREDIT) . += "[seperator]+VAREDIT" - if (rights & R_SOUNDS) . += "[seperator]+SOUND" - if (rights & R_SPAWN) . += "[seperator]+SPAWN" - if (rights & R_MOD) . += "[seperator]+MODERATOR" - if (rights & R_EVENT) . += "[seperator]+EVENT" - return . - -// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ). -/proc/hex2rgb(hex) - // Strips the starting #, in case this is ever supplied without one, so everything doesn't break. - if(findtext(hex,"#",1,2)) - hex = copytext(hex, 2) - return list(hex2rgb_r(hex), hex2rgb_g(hex), hex2rgb_b(hex)) - -// The three procs below require that the '#' part of the hex be stripped, which hex2rgb() does automatically. -/proc/hex2rgb_r(hex) - var/hex_to_work_on = copytext(hex,1,3) - return hex2num(hex_to_work_on) - -/proc/hex2rgb_g(hex) - var/hex_to_work_on = copytext(hex,3,5) - return hex2num(hex_to_work_on) - -/proc/hex2rgb_b(hex) - var/hex_to_work_on = copytext(hex,5,7) - return hex2num(hex_to_work_on) - -// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ -/proc/heat2color(temp) - return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) - -/proc/heat2color_r(temp) - temp /= 100 - if(temp <= 66) - . = 255 - else - . = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592)) - -/proc/heat2color_g(temp) - temp /= 100 - if(temp <= 66) - . = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661)) - else - . = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492))) - -/proc/heat2color_b(temp) - temp /= 100 - if(temp >= 66) - . = 255 - else - if(temp <= 16) - . = 0 - else - . = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307)) - -// Very ugly, BYOND doesn't support unix time and rounding errors make it really hard to convert it to BYOND time. -// returns "YYYY-MM-DD" by default -/proc/unix2date(timestamp, seperator = "-") - if(timestamp < 0) - return 0 //Do not accept negative values - - var/const/dayInSeconds = 86400 //60secs*60mins*24hours - var/const/daysInYear = 365 //Non Leap Year - var/const/daysInLYear = daysInYear + 1//Leap year - var/days = round(timestamp / dayInSeconds) //Days passed since UNIX Epoc - var/year = 1970 //Unix Epoc begins 1970-01-01 - var/tmpDays = days + 1 //If passed (timestamp < dayInSeconds), it will return 0, so add 1 - var/monthsInDays = list() //Months will be in here ***Taken from the PHP source code*** - var/month = 1 //This will be the returned MONTH NUMBER. - var/day //This will be the returned day number. - - while(tmpDays > daysInYear) //Start adding years to 1970 - year++ - if(isLeap(year)) - tmpDays -= daysInLYear - else - tmpDays -= daysInYear - - if(isLeap(year)) //The year is a leap year - monthsInDays = list(-1,30,59,90,120,151,181,212,243,273,304,334) - else - monthsInDays = list(0,31,59,90,120,151,181,212,243,273,304,334) - - var/mDays = 0; - var/monthIndex = 0; - - for(var/m in monthsInDays) - monthIndex++ - if(tmpDays > m) - mDays = m - month = monthIndex - - day = tmpDays - mDays //Setup the date - - return "[year][seperator][((month < 10) ? "0[month]" : month)][seperator][((day < 10) ? "0[day]" : day)]" - -/proc/isLeap(y) - return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) - -//Takes a string and a datum -//The string is well, obviously the string being checked -//The datum is used as a source for var names, to check validity -//Otherwise every single word could technically be a variable! -/proc/string2listofvars(var/t_string, var/datum/var_source) - if(!t_string || !var_source) - return list() - - . = list() - - var/var_found = findtext(t_string,"\[") //Not the actual variables, just a generic "should we even bother" check - if(var_found) - //Find var names - - // "A dog said hi [name]!" - // splittext() --> list("A dog said hi ","name]!" - // jointext() --> "A dog said hi name]!" - // splittext() --> list("A","dog","said","hi","name]!") - - t_string = replacetext(t_string,"\[","\[ ")//Necessary to resolve "word[var_name]" scenarios - var/list/list_value = splittext(t_string,"\[") - var/intermediate_stage = jointext(list_value, null) - - list_value = splittext(intermediate_stage," ") - for(var/value in list_value) - if(findtext(value,"]")) - value = splittext(value,"]") //"name]!" --> list("name","!") - for(var/A in value) - if(var_source.vars.Find(A)) - . += A - -/proc/get_end_section_of_type(type) - var/strtype = "[type]" - var/delim_pos = findlasttext(strtype, "/") - if(delim_pos == 0) - return strtype - return copytext(strtype, delim_pos) - -// Concatenates a list of strings into a single string. A seperator may optionally be provided. -/proc/list2text(list/ls, sep) - if (ls.len <= 1) // Early-out code for empty or singleton lists. - return ls.len ? ls[1] : "" - - var/l = ls.len // Made local for sanic speed. - var/i = 0 // Incremented every time a list index is accessed. - - if (sep != null) - // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... - #define S1 sep, ls[++i] - #define S4 S1, S1, S1, S1 - #define S16 S4, S4, S4, S4 - #define S64 S16, S16, S16, S16 - - . = "[ls[++i]]" // Make sure the initial element is converted to text. - - // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. - if (l-1 & 0x01) // 'i' will always be 1 here. - . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. - if (l-i & 0x02) - . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. - if (l-i & 0x04) - . = text("[][][][][][][][][]", ., S4) // And so on.... - if (l-i & 0x08) - . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) - if (l-i & 0x10) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) - if (l-i & 0x20) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) - if (l-i & 0x40) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) - while (l > i) // Chomp through the rest of the list, 128 elements at a time. - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) - - #undef S64 - #undef S16 - #undef S4 - #undef S1 - else - // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... - #define S1 ls[++i] - #define S4 S1, S1, S1, S1 - #define S16 S4, S4, S4, S4 - #define S64 S16, S16, S16, S16 - - . = "[ls[++i]]" // Make sure the initial element is converted to text. - - if (l-1 & 0x01) // 'i' will always be 1 here. - . += S1 // Append 1 element if the remaining elements are not a multiple of 2. - if (l-i & 0x02) - . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. - if (l-i & 0x04) - . = text("[][][][][]", ., S4) // And so on... - if (l-i & 0x08) - . = text("[][][][][][][][][]", ., S4, S4) - if (l-i & 0x10) - . = text("[][][][][][][][][][][][][][][][][]", ., S16) - if (l-i & 0x20) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) - if (l-i & 0x40) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) - while (l > i) // Chomp through the rest of the list, 128 elements at a time. - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) - - #undef S64 - #undef S16 - #undef S4 - #undef S1 - -// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) -/proc/text2list(text, delimiter="\n") - var/delim_len = length(delimiter) - if (delim_len < 1) - return list(text) - - . = list() - var/last_found = 1 - var/found - - do - found = findtext(text, delimiter, last_found, 0) - . += copytext(text, last_found, found) - last_found = found + delim_len - while (found) - -/proc/type2parent(child) - var/string_type = "[child]" - var/last_slash = findlasttext(string_type, "/") - if (last_slash != 1) - return text2path(copytext(string_type, 1, last_slash)) - switch (child) - if (/datum) - return null - if (/obj, /mob) - return /atom/movable - if (/area, /turf) - return /atom - else - return /datum - - -//checks if a file exists and contains text -//returns text as a string if these conditions are met -/proc/safe_file2text(filename, error_on_invalid_return = TRUE) - try - if(fexists(filename)) - . = file2text(filename) - if(!. && error_on_invalid_return) - error("File empty ([filename])") - else if(error_on_invalid_return) - error("File not found ([filename])") - catch(var/exception/E) - if(error_on_invalid_return) - error("Exception when loading file as string: [E]") +/* + * Holds procs designed to change one type of value, into another. + * Contains: + * hex2num & num2hex + * file2list + * angle2dir + */ + +// Returns an integer given a hexadecimal number string as input. +/proc/hex2num(hex) + if (!istext(hex)) + return + + var/num = 0 + var/power = 1 + var/i = length(hex) + + while (i) + var/char = text2ascii(hex, i) + switch(char) + if(48) // 0 -- do nothing + if(49 to 57) num += (char - 48) * power // 1-9 + if(97, 65) num += power * 10 // A + if(98, 66) num += power * 11 // B + if(99, 67) num += power * 12 // C + if(100, 68) num += power * 13 // D + if(101, 69) num += power * 14 // E + if(102, 70) num += power * 15 // F + else + return + power *= 16 + i-- + return num + +// Returns the hex value of a number given a value assumed to be a base-ten value +/proc/num2hex(num, padlength) + var/global/list/hexdigits = list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F") + + . = "" + while(num > 0) + var/hexdigit = hexdigits[(num & 0xF) + 1] + . = "[hexdigit][.]" + num >>= 4 //go to the next half-byte + + //pad with zeroes + var/left = padlength - length(.) + while (left-- > 0) + . = "0[.]" + +/proc/text2numlist(text, delimiter="\n") + var/list/num_list = list() + for(var/x in splittext(text, delimiter)) + num_list += text2num(x) + return num_list + +// Splits the text of a file at seperator and returns them in a list. +/proc/file2list(filename, seperator="\n") + return splittext(return_file_text(filename),seperator) + +// Turns a direction into text +/proc/num2dir(direction) + switch (direction) + if (1.0) return NORTH + if (2.0) return SOUTH + if (4.0) return EAST + if (8.0) return WEST + else + to_world_log("UNKNOWN DIRECTION: [direction]") + +// Turns a direction into text +/proc/dir2text(direction) + switch (direction) + if (NORTH) return "north" + if (SOUTH) return "south" + if (EAST) return "east" + if (WEST) return "west" + if (NORTHEAST) return "northeast" + if (SOUTHEAST) return "southeast" + if (NORTHWEST) return "northwest" + if (SOUTHWEST) return "southwest" + if (UP) return "up" + if (DOWN) return "down" + +// Turns text into proper directions +/proc/text2dir(direction) + switch (uppertext(direction)) + if ("NORTH") return 1 + if ("SOUTH") return 2 + if ("EAST") return 4 + if ("WEST") return 8 + if ("NORTHEAST") return 5 + if ("NORTHWEST") return 9 + if ("SOUTHEAST") return 6 + if ("SOUTHWEST") return 10 + +// Turns a direction into text showing all bits set +/proc/dirs2text(direction) + if(!direction) + return "" + var/list/dirs = list() + if(direction & NORTH) + dirs += "NORTH" + if(direction & SOUTH) + dirs += "SOUTH" + if(direction & EAST) + dirs += "EAST" + if(direction & WEST) + dirs += "WEST" + if(direction & UP) + dirs += "UP" + if(direction & DOWN) + dirs += "DOWN" + return dirs.Join(" ") + +// Converts an angle (degrees) into an ss13 direction +/proc/angle2dir(var/degree) + degree = (degree + 22.5) % 365 // 22.5 = 45 / 2 + if (degree < 45) return NORTH + if (degree < 90) return NORTHEAST + if (degree < 135) return EAST + if (degree < 180) return SOUTHEAST + if (degree < 225) return SOUTH + if (degree < 270) return SOUTHWEST + if (degree < 315) return WEST + return NORTH|WEST + +// Returns the north-zero clockwise angle in degrees, given a direction +/proc/dir2angle(var/D) + switch (D) + if (NORTH) return 0 + if (SOUTH) return 180 + if (EAST) return 90 + if (WEST) return 270 + if (NORTHEAST) return 45 + if (SOUTHEAST) return 135 + if (NORTHWEST) return 315 + if (SOUTHWEST) return 225 + +// Converts a blend_mode constant to one acceptable to icon.Blend() +/proc/blendMode2iconMode(blend_mode) + switch (blend_mode) + if (BLEND_MULTIPLY) return ICON_MULTIPLY + if (BLEND_ADD) return ICON_ADD + if (BLEND_SUBTRACT) return ICON_SUBTRACT + else return ICON_OVERLAY + +// Converts a rights bitfield into a string +/proc/rights2text(rights,seperator="") + if (rights & R_BUILDMODE) . += "[seperator]+BUILDMODE" + if (rights & R_ADMIN) . += "[seperator]+ADMIN" + if (rights & R_BAN) . += "[seperator]+BAN" + if (rights & R_FUN) . += "[seperator]+FUN" + if (rights & R_SERVER) . += "[seperator]+SERVER" + if (rights & R_DEBUG) . += "[seperator]+DEBUG" + if (rights & R_POSSESS) . += "[seperator]+POSSESS" + if (rights & R_PERMISSIONS) . += "[seperator]+PERMISSIONS" + if (rights & R_STEALTH) . += "[seperator]+STEALTH" + if (rights & R_REJUVINATE) . += "[seperator]+REJUVINATE" + if (rights & R_VAREDIT) . += "[seperator]+VAREDIT" + if (rights & R_SOUNDS) . += "[seperator]+SOUND" + if (rights & R_SPAWN) . += "[seperator]+SPAWN" + if (rights & R_MOD) . += "[seperator]+MODERATOR" + if (rights & R_EVENT) . += "[seperator]+EVENT" + return . + +// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ). +/proc/hex2rgb(hex) + // Strips the starting #, in case this is ever supplied without one, so everything doesn't break. + if(findtext(hex,"#",1,2)) + hex = copytext(hex, 2) + return list(hex2rgb_r(hex), hex2rgb_g(hex), hex2rgb_b(hex)) + +// The three procs below require that the '#' part of the hex be stripped, which hex2rgb() does automatically. +/proc/hex2rgb_r(hex) + var/hex_to_work_on = copytext(hex,1,3) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_g(hex) + var/hex_to_work_on = copytext(hex,3,5) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_b(hex) + var/hex_to_work_on = copytext(hex,5,7) + return hex2num(hex_to_work_on) + +// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ +/proc/heat2color(temp) + return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) + +/proc/heat2color_r(temp) + temp /= 100 + if(temp <= 66) + . = 255 + else + . = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592)) + +/proc/heat2color_g(temp) + temp /= 100 + if(temp <= 66) + . = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661)) + else + . = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492))) + +/proc/heat2color_b(temp) + temp /= 100 + if(temp >= 66) + . = 255 + else + if(temp <= 16) + . = 0 + else + . = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307)) + +// Very ugly, BYOND doesn't support unix time and rounding errors make it really hard to convert it to BYOND time. +// returns "YYYY-MM-DD" by default +/proc/unix2date(timestamp, seperator = "-") + if(timestamp < 0) + return 0 //Do not accept negative values + + var/const/dayInSeconds = 86400 //60secs*60mins*24hours + var/const/daysInYear = 365 //Non Leap Year + var/const/daysInLYear = daysInYear + 1//Leap year + var/days = round(timestamp / dayInSeconds) //Days passed since UNIX Epoc + var/year = 1970 //Unix Epoc begins 1970-01-01 + var/tmpDays = days + 1 //If passed (timestamp < dayInSeconds), it will return 0, so add 1 + var/monthsInDays = list() //Months will be in here ***Taken from the PHP source code*** + var/month = 1 //This will be the returned MONTH NUMBER. + var/day //This will be the returned day number. + + while(tmpDays > daysInYear) //Start adding years to 1970 + year++ + if(isLeap(year)) + tmpDays -= daysInLYear + else + tmpDays -= daysInYear + + if(isLeap(year)) //The year is a leap year + monthsInDays = list(-1,30,59,90,120,151,181,212,243,273,304,334) + else + monthsInDays = list(0,31,59,90,120,151,181,212,243,273,304,334) + + var/mDays = 0; + var/monthIndex = 0; + + for(var/m in monthsInDays) + monthIndex++ + if(tmpDays > m) + mDays = m + month = monthIndex + + day = tmpDays - mDays //Setup the date + + return "[year][seperator][((month < 10) ? "0[month]" : month)][seperator][((day < 10) ? "0[day]" : day)]" + +/proc/isLeap(y) + return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) + +//Takes a string and a datum +//The string is well, obviously the string being checked +//The datum is used as a source for var names, to check validity +//Otherwise every single word could technically be a variable! +/proc/string2listofvars(var/t_string, var/datum/var_source) + if(!t_string || !var_source) + return list() + + . = list() + + var/var_found = findtext(t_string,"\[") //Not the actual variables, just a generic "should we even bother" check + if(var_found) + //Find var names + + // "A dog said hi [name]!" + // splittext() --> list("A dog said hi ","name]!" + // jointext() --> "A dog said hi name]!" + // splittext() --> list("A","dog","said","hi","name]!") + + t_string = replacetext(t_string,"\[","\[ ")//Necessary to resolve "word[var_name]" scenarios + var/list/list_value = splittext(t_string,"\[") + var/intermediate_stage = jointext(list_value, null) + + list_value = splittext(intermediate_stage," ") + for(var/value in list_value) + if(findtext(value,"]")) + value = splittext(value,"]") //"name]!" --> list("name","!") + for(var/A in value) + if(var_source.vars.Find(A)) + . += A + +/proc/get_end_section_of_type(type) + var/strtype = "[type]" + var/delim_pos = findlasttext(strtype, "/") + if(delim_pos == 0) + return strtype + return copytext(strtype, delim_pos) + +// Concatenates a list of strings into a single string. A seperator may optionally be provided. +/proc/list2text(list/ls, sep) + if (ls.len <= 1) // Early-out code for empty or singleton lists. + return ls.len ? ls[1] : "" + + var/l = ls.len // Made local for sanic speed. + var/i = 0 // Incremented every time a list index is accessed. + + if (sep != null) + // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... + #define S1 sep, ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. + if (l-1 & 0x01) // 'i' will always be 1 here. + . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][][][][][]", ., S4) // And so on.... + if (l-i & 0x08) + . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + else + // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... + #define S1 ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + if (l-1 & 0x01) // 'i' will always be 1 here. + . += S1 // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][]", ., S4) // And so on... + if (l-i & 0x08) + . = text("[][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + +// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) +/proc/text2list(text, delimiter="\n") + var/delim_len = length(delimiter) + if (delim_len < 1) + return list(text) + + . = list() + var/last_found = 1 + var/found + + do + found = findtext(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while (found) + +/proc/type2parent(child) + var/string_type = "[child]" + var/last_slash = findlasttext(string_type, "/") + if (last_slash != 1) + return text2path(copytext(string_type, 1, last_slash)) + switch (child) + if (/datum) + return null + if (/obj, /mob) + return /atom/movable + if (/area, /turf) + return /atom + else + return /datum + + +//checks if a file exists and contains text +//returns text as a string if these conditions are met +/proc/safe_file2text(filename, error_on_invalid_return = TRUE) + try + if(fexists(filename)) + . = file2text(filename) + if(!. && error_on_invalid_return) + error("File empty ([filename])") + else if(error_on_invalid_return) + error("File not found ([filename])") + catch(var/exception/E) + if(error_on_invalid_return) + error("Exception when loading file as string: [E]") diff --git a/code/_helpers/visual_filters.dm b/code/_helpers/visual_filters.dm index 60aef7c908..cc3b02dc60 100644 --- a/code/_helpers/visual_filters.dm +++ b/code/_helpers/visual_filters.dm @@ -1,383 +1,383 @@ -#define ICON_NOT_SET "Not Set" -//This is stored as a nested list instead of datums or whatever because it json encodes nicely for usage in tgui -GLOBAL_LIST_INIT(master_filter_info, list( - "alpha" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "icon" = ICON_NOT_SET, - "render_source" = "", - "flags" = 0 - ), - "flags" = list( - "MASK_INVERSE" = MASK_INVERSE, - "MASK_SWAP" = MASK_SWAP - ) - ), - "angular_blur" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = 1 - ) - ), - /* Not supported because making a proper matrix editor on the frontend would be a huge dick pain. - Uncomment if you ever implement it - "color" = list( - "defaults" = list( - "color" = matrix(), - "space" = FILTER_COLOR_RGB - ) - ), - */ - "displace" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = null, - "icon" = ICON_NOT_SET, - "render_source" = "" - ) - ), - "drop_shadow" = list( - "defaults" = list( - "x" = 1, - "y" = -1, - "size" = 1, - "offset" = 0, - "color" = COLOR_HALF_TRANSPARENT_BLACK - ) - ), - "blur" = list( - "defaults" = list( - "size" = 1 - ) - ), - "layer" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "icon" = ICON_NOT_SET, - "render_source" = "", - "flags" = FILTER_OVERLAY, - "color" = "", - "transform" = null, - "blend_mode" = BLEND_DEFAULT - ) - ), - "motion_blur" = list( - "defaults" = list( - "x" = 0, - "y" = 0 - ) - ), - "outline" = list( - "defaults" = list( - "size" = 0, - "color" = COLOR_BLACK, - "flags" = NONE - ), - "flags" = list( - "OUTLINE_SHARP" = OUTLINE_SHARP, - "OUTLINE_SQUARE" = OUTLINE_SQUARE - ) - ), - "radial_blur" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = 0.01 - ) - ), - "rays" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = 16, - "color" = COLOR_WHITE, - "offset" = 0, - "density" = 10, - "threshold" = 0.5, - "factor" = 0, - "flags" = FILTER_OVERLAY | FILTER_UNDERLAY - ), - "flags" = list( - "FILTER_OVERLAY" = FILTER_OVERLAY, - "FILTER_UNDERLAY" = FILTER_UNDERLAY - ) - ), - "ripple" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = 1, - "repeat" = 2, - "radius" = 0, - "falloff" = 1, - "flags" = NONE - ), - "flags" = list( - "WAVE_BOUNDED" = WAVE_BOUNDED - ) - ), - "wave" = list( - "defaults" = list( - "x" = 0, - "y" = 0, - "size" = 1, - "offset" = 0, - "flags" = NONE - ), - "flags" = list( - "WAVE_SIDEWAYS" = WAVE_SIDEWAYS, - "WAVE_BOUNDED" = WAVE_BOUNDED - ) - ) -)) - -#undef ICON_NOT_SET - -//Helpers to generate lists for filter helpers -//This is the only practical way of writing these that actually produces sane lists -/proc/alpha_mask_filter(x, y, icon/icon, render_source, flags) - . = list("type" = "alpha") - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(icon)) - .["icon"] = icon - if(!isnull(render_source)) - .["render_source"] = render_source - if(!isnull(flags)) - .["flags"] = flags - -/proc/angular_blur_filter(x, y, size) - . = list("type" = "angular_blur") - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(size)) - .["size"] = size - -/proc/color_matrix_filter(matrix/in_matrix, space) - . = list("type" = "color") - .["color"] = in_matrix - if(!isnull(space)) - .["space"] = space - -/proc/displacement_map_filter(icon, render_source, x, y, size = 32) - . = list("type" = "displace") - if(!isnull(icon)) - .["icon"] = icon - if(!isnull(render_source)) - .["render_source"] = render_source - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(size)) - .["size"] = size - -/proc/drop_shadow_filter(x, y, size, offset, color) - . = list("type" = "drop_shadow") - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(size)) - .["size"] = size - if(!isnull(offset)) - .["offset"] = offset - if(!isnull(color)) - .["color"] = color - -/proc/gauss_blur_filter(size) - . = list("type" = "blur") - if(!isnull(size)) - .["size"] = size - -/proc/layering_filter(icon, render_source, x, y, flags, color, transform, blend_mode) - . = list("type" = "layer") - if(!isnull(icon)) - .["icon"] = icon - if(!isnull(render_source)) - .["render_source"] = render_source - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(color)) - .["color"] = color - if(!isnull(flags)) - .["flags"] = flags - if(!isnull(transform)) - .["transform"] = transform - if(!isnull(blend_mode)) - .["blend_mode"] = blend_mode - -/proc/motion_blur_filter(x, y) - . = list("type" = "motion_blur") - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - -/proc/outline_filter(size, color, flags) - . = list("type" = "outline") - if(!isnull(size)) - .["size"] = size - if(!isnull(color)) - .["color"] = color - if(!isnull(flags)) - .["flags"] = flags - -/proc/radial_blur_filter(size, x, y) - . = list("type" = "radial_blur") - if(!isnull(size)) - .["size"] = size - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - -/proc/rays_filter(size, color, offset, density, threshold, factor, x, y, flags) - . = list("type" = "rays") - if(!isnull(size)) - .["size"] = size - if(!isnull(color)) - .["color"] = color - if(!isnull(offset)) - .["offset"] = offset - if(!isnull(density)) - .["density"] = density - if(!isnull(threshold)) - .["threshold"] = threshold - if(!isnull(factor)) - .["factor"] = factor - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(flags)) - .["flags"] = flags - -/proc/ripple_filter(radius, size, falloff, repeat, x, y, flags) - . = list("type" = "ripple") - if(!isnull(radius)) - .["radius"] = radius - if(!isnull(size)) - .["size"] = size - if(!isnull(falloff)) - .["falloff"] = falloff - if(!isnull(repeat)) - .["repeat"] = repeat - if(!isnull(flags)) - .["flags"] = flags - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - -/proc/wave_filter(x, y, size, offset, flags) - . = list("type" = "wave") - if(!isnull(size)) - .["size"] = size - if(!isnull(x)) - .["x"] = x - if(!isnull(y)) - .["y"] = y - if(!isnull(offset)) - .["offset"] = offset - if(!isnull(flags)) - .["flags"] = flags - -/atom/proc/add_filter(name,priority,list/params) - LAZYINITLIST(filter_data) - var/list/p = params.Copy() - p["priority"] = priority - filter_data[name] = p - update_filters() - -/atom/proc/update_filters() - filters = null - filter_data = sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE) - for(var/f in filter_data) - var/list/data = filter_data[f] - var/list/arguments = data.Copy() - arguments -= "priority" - filters += filter(arglist(arguments)) - UNSETEMPTY(filter_data) - -/atom/proc/transition_filter(name, time, list/new_params, easing, loop) - var/filter = get_filter(name) - if(!filter) - return - - var/list/old_filter_data = filter_data[name] - - var/list/params = old_filter_data.Copy() - for(var/thing in new_params) - params[thing] = new_params[thing] - - animate(filter, new_params, time = time, easing = easing, loop = loop) - for(var/param in params) - filter_data[name][param] = params[param] - -/atom/proc/change_filter_priority(name, new_priority) - if(!filter_data || !filter_data[name]) - return - - filter_data[name]["priority"] = new_priority - update_filters() - -/obj/item/update_filters() - . = ..() - /* Will port this from TG - for(var/datum/action/A as anything in actions) - A.UpdateButtonIcon() - */ - -/atom/proc/get_filter(name) - if(filter_data && filter_data[name]) - return filters[filter_data.Find(name)] - -/atom/proc/remove_filter(name_or_names) - if(!filter_data) - return - - var/list/names = islist(name_or_names) ? name_or_names : list(name_or_names) - - for(var/name in names) - if(filter_data[name]) - filter_data -= name - update_filters() - -/atom/proc/clear_filters() - filter_data = null - filters = null - -/proc/apply_wibbly_filters(atom/in_atom, length) - for(var/i in 1 to 7) - //This is a very baffling and strange way of doing this but I am just preserving old functionality - var/X - var/Y - var/rsq - do - X = 60*rand() - 30 - Y = 60*rand() - 30 - rsq = X*X + Y*Y - while(rsq<100 || rsq>900) // Yeah let's just loop infinitely due to bad luck what's the worst that could happen? - var/random_roll = rand() - in_atom.add_filter("wibbly-[i]", 5, wave_filter(x = X, y = Y, size = rand() * 2.5 + 0.5, offset = random_roll)) - var/filter = in_atom.get_filter("wibbly-[i]") - animate(filter, offset = random_roll, time = 0, loop = -1, flags = ANIMATION_PARALLEL) - animate(offset = random_roll - 1, time = rand() * 20 + 10) - -/proc/remove_wibbly_filters(atom/in_atom) - var/filter - for(var/i in 1 to 7) - filter = in_atom.get_filter("wibbly-[i]") - animate(filter) - in_atom.remove_filter("wibbly-[i]") +#define ICON_NOT_SET "Not Set" +//This is stored as a nested list instead of datums or whatever because it json encodes nicely for usage in tgui +GLOBAL_LIST_INIT(master_filter_info, list( + "alpha" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "icon" = ICON_NOT_SET, + "render_source" = "", + "flags" = 0 + ), + "flags" = list( + "MASK_INVERSE" = MASK_INVERSE, + "MASK_SWAP" = MASK_SWAP + ) + ), + "angular_blur" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = 1 + ) + ), + /* Not supported because making a proper matrix editor on the frontend would be a huge dick pain. + Uncomment if you ever implement it + "color" = list( + "defaults" = list( + "color" = matrix(), + "space" = FILTER_COLOR_RGB + ) + ), + */ + "displace" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = null, + "icon" = ICON_NOT_SET, + "render_source" = "" + ) + ), + "drop_shadow" = list( + "defaults" = list( + "x" = 1, + "y" = -1, + "size" = 1, + "offset" = 0, + "color" = COLOR_HALF_TRANSPARENT_BLACK + ) + ), + "blur" = list( + "defaults" = list( + "size" = 1 + ) + ), + "layer" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "icon" = ICON_NOT_SET, + "render_source" = "", + "flags" = FILTER_OVERLAY, + "color" = "", + "transform" = null, + "blend_mode" = BLEND_DEFAULT + ) + ), + "motion_blur" = list( + "defaults" = list( + "x" = 0, + "y" = 0 + ) + ), + "outline" = list( + "defaults" = list( + "size" = 0, + "color" = COLOR_BLACK, + "flags" = NONE + ), + "flags" = list( + "OUTLINE_SHARP" = OUTLINE_SHARP, + "OUTLINE_SQUARE" = OUTLINE_SQUARE + ) + ), + "radial_blur" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = 0.01 + ) + ), + "rays" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = 16, + "color" = COLOR_WHITE, + "offset" = 0, + "density" = 10, + "threshold" = 0.5, + "factor" = 0, + "flags" = FILTER_OVERLAY | FILTER_UNDERLAY + ), + "flags" = list( + "FILTER_OVERLAY" = FILTER_OVERLAY, + "FILTER_UNDERLAY" = FILTER_UNDERLAY + ) + ), + "ripple" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = 1, + "repeat" = 2, + "radius" = 0, + "falloff" = 1, + "flags" = NONE + ), + "flags" = list( + "WAVE_BOUNDED" = WAVE_BOUNDED + ) + ), + "wave" = list( + "defaults" = list( + "x" = 0, + "y" = 0, + "size" = 1, + "offset" = 0, + "flags" = NONE + ), + "flags" = list( + "WAVE_SIDEWAYS" = WAVE_SIDEWAYS, + "WAVE_BOUNDED" = WAVE_BOUNDED + ) + ) +)) + +#undef ICON_NOT_SET + +//Helpers to generate lists for filter helpers +//This is the only practical way of writing these that actually produces sane lists +/proc/alpha_mask_filter(x, y, icon/icon, render_source, flags) + . = list("type" = "alpha") + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(icon)) + .["icon"] = icon + if(!isnull(render_source)) + .["render_source"] = render_source + if(!isnull(flags)) + .["flags"] = flags + +/proc/angular_blur_filter(x, y, size) + . = list("type" = "angular_blur") + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(size)) + .["size"] = size + +/proc/color_matrix_filter(matrix/in_matrix, space) + . = list("type" = "color") + .["color"] = in_matrix + if(!isnull(space)) + .["space"] = space + +/proc/displacement_map_filter(icon, render_source, x, y, size = 32) + . = list("type" = "displace") + if(!isnull(icon)) + .["icon"] = icon + if(!isnull(render_source)) + .["render_source"] = render_source + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(size)) + .["size"] = size + +/proc/drop_shadow_filter(x, y, size, offset, color) + . = list("type" = "drop_shadow") + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(size)) + .["size"] = size + if(!isnull(offset)) + .["offset"] = offset + if(!isnull(color)) + .["color"] = color + +/proc/gauss_blur_filter(size) + . = list("type" = "blur") + if(!isnull(size)) + .["size"] = size + +/proc/layering_filter(icon, render_source, x, y, flags, color, transform, blend_mode) + . = list("type" = "layer") + if(!isnull(icon)) + .["icon"] = icon + if(!isnull(render_source)) + .["render_source"] = render_source + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(color)) + .["color"] = color + if(!isnull(flags)) + .["flags"] = flags + if(!isnull(transform)) + .["transform"] = transform + if(!isnull(blend_mode)) + .["blend_mode"] = blend_mode + +/proc/motion_blur_filter(x, y) + . = list("type" = "motion_blur") + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + +/proc/outline_filter(size, color, flags) + . = list("type" = "outline") + if(!isnull(size)) + .["size"] = size + if(!isnull(color)) + .["color"] = color + if(!isnull(flags)) + .["flags"] = flags + +/proc/radial_blur_filter(size, x, y) + . = list("type" = "radial_blur") + if(!isnull(size)) + .["size"] = size + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + +/proc/rays_filter(size, color, offset, density, threshold, factor, x, y, flags) + . = list("type" = "rays") + if(!isnull(size)) + .["size"] = size + if(!isnull(color)) + .["color"] = color + if(!isnull(offset)) + .["offset"] = offset + if(!isnull(density)) + .["density"] = density + if(!isnull(threshold)) + .["threshold"] = threshold + if(!isnull(factor)) + .["factor"] = factor + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(flags)) + .["flags"] = flags + +/proc/ripple_filter(radius, size, falloff, repeat, x, y, flags) + . = list("type" = "ripple") + if(!isnull(radius)) + .["radius"] = radius + if(!isnull(size)) + .["size"] = size + if(!isnull(falloff)) + .["falloff"] = falloff + if(!isnull(repeat)) + .["repeat"] = repeat + if(!isnull(flags)) + .["flags"] = flags + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + +/proc/wave_filter(x, y, size, offset, flags) + . = list("type" = "wave") + if(!isnull(size)) + .["size"] = size + if(!isnull(x)) + .["x"] = x + if(!isnull(y)) + .["y"] = y + if(!isnull(offset)) + .["offset"] = offset + if(!isnull(flags)) + .["flags"] = flags + +/atom/proc/add_filter(name,priority,list/params) + LAZYINITLIST(filter_data) + var/list/p = params.Copy() + p["priority"] = priority + filter_data[name] = p + update_filters() + +/atom/proc/update_filters() + filters = null + filter_data = sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE) + for(var/f in filter_data) + var/list/data = filter_data[f] + var/list/arguments = data.Copy() + arguments -= "priority" + filters += filter(arglist(arguments)) + UNSETEMPTY(filter_data) + +/atom/proc/transition_filter(name, time, list/new_params, easing, loop) + var/filter = get_filter(name) + if(!filter) + return + + var/list/old_filter_data = filter_data[name] + + var/list/params = old_filter_data.Copy() + for(var/thing in new_params) + params[thing] = new_params[thing] + + animate(filter, new_params, time = time, easing = easing, loop = loop) + for(var/param in params) + filter_data[name][param] = params[param] + +/atom/proc/change_filter_priority(name, new_priority) + if(!filter_data || !filter_data[name]) + return + + filter_data[name]["priority"] = new_priority + update_filters() + +/obj/item/update_filters() + . = ..() + /* Will port this from TG + for(var/datum/action/A as anything in actions) + A.UpdateButtonIcon() + */ + +/atom/proc/get_filter(name) + if(filter_data && filter_data[name]) + return filters[filter_data.Find(name)] + +/atom/proc/remove_filter(name_or_names) + if(!filter_data) + return + + var/list/names = islist(name_or_names) ? name_or_names : list(name_or_names) + + for(var/name in names) + if(filter_data[name]) + filter_data -= name + update_filters() + +/atom/proc/clear_filters() + filter_data = null + filters = null + +/proc/apply_wibbly_filters(atom/in_atom, length) + for(var/i in 1 to 7) + //This is a very baffling and strange way of doing this but I am just preserving old functionality + var/X + var/Y + var/rsq + do + X = 60*rand() - 30 + Y = 60*rand() - 30 + rsq = X*X + Y*Y + while(rsq<100 || rsq>900) // Yeah let's just loop infinitely due to bad luck what's the worst that could happen? + var/random_roll = rand() + in_atom.add_filter("wibbly-[i]", 5, wave_filter(x = X, y = Y, size = rand() * 2.5 + 0.5, offset = random_roll)) + var/filter = in_atom.get_filter("wibbly-[i]") + animate(filter, offset = random_roll, time = 0, loop = -1, flags = ANIMATION_PARALLEL) + animate(offset = random_roll - 1, time = rand() * 20 + 10) + +/proc/remove_wibbly_filters(atom/in_atom) + var/filter + for(var/i in 1 to 7) + filter = in_atom.get_filter("wibbly-[i]") + animate(filter) + in_atom.remove_filter("wibbly-[i]") diff --git a/code/_macros.dm b/code/_macros.dm index 169a897881..b37d24fa0d 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -1,47 +1,47 @@ -#define span(class, text) ("[text]") - -#define get_turf(A) get_step(A,0) - -#define get_x(A) (get_step(A, 0)?.x || 0) - -#define get_y(A) (get_step(A, 0)?.y || 0) - -#define get_z(A) (get_step(A, 0)?.z || 0) - -#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") - -// #define to_chat(target, message) target << message Not anymore! -//#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat -//#define to_chat __to_chat -#define to_world(message) to_chat(world, message) -#define to_world_log(message) world.log << message -// TODO - Baystation has this log to crazy places. For now lets just world.log, but maybe look into it later. -#define log_world(message) to_world_log(message) -#define to_file(file_entry, source_var) file_entry << source_var -#define from_file(file_entry, target_var) file_entry >> target_var -#define show_browser(target, browser_content, browser_name) target << browse(browser_content, browser_name) -#define send_rsc(target, rsc_content, rsc_name) target << browse_rsc(rsc_content, rsc_name) -#define open_link(target, url) target << link(url) - -// From TG, might be useful to have. -// Didn't port SEND_TEXT() since to_chat() appears to serve the same purpose. -#define DIRECT_OUTPUT(A, B) A << B -#define SEND_IMAGE(target, image) DIRECT_OUTPUT(target, image) -#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) -//#define WRITE_LOG is in logging.dm - -#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) - -#define qdel_null(x) if(x) { qdel(x) ; x = null } - -#define sequential_id(key) uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, key) - -#define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) - -#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } - -#define WORLD_ICON_SIZE 32 //Needed for the R-UST port - -#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port - -#define JOINTEXT(X) jointext(X, null) +#define span(class, text) ("[text]") + +#define get_turf(A) get_step(A,0) + +#define get_x(A) (get_step(A, 0)?.x || 0) + +#define get_y(A) (get_step(A, 0)?.y || 0) + +#define get_z(A) (get_step(A, 0)?.z || 0) + +#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") + +// #define to_chat(target, message) target << message Not anymore! +//#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat +//#define to_chat __to_chat +#define to_world(message) to_chat(world, message) +#define to_world_log(message) world.log << message +// TODO - Baystation has this log to crazy places. For now lets just world.log, but maybe look into it later. +#define log_world(message) to_world_log(message) +#define to_file(file_entry, source_var) file_entry << source_var +#define from_file(file_entry, target_var) file_entry >> target_var +#define show_browser(target, browser_content, browser_name) target << browse(browser_content, browser_name) +#define send_rsc(target, rsc_content, rsc_name) target << browse_rsc(rsc_content, rsc_name) +#define open_link(target, url) target << link(url) + +// From TG, might be useful to have. +// Didn't port SEND_TEXT() since to_chat() appears to serve the same purpose. +#define DIRECT_OUTPUT(A, B) A << B +#define SEND_IMAGE(target, image) DIRECT_OUTPUT(target, image) +#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) +//#define WRITE_LOG is in logging.dm + +#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) + +#define qdel_null(x) if(x) { qdel(x) ; x = null } + +#define sequential_id(key) uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, key) + +#define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) + +#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } + +#define WORLD_ICON_SIZE 32 //Needed for the R-UST port + +#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port + +#define JOINTEXT(X) jointext(X, null) diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm index 1215218ebe..9f8f97bcce 100644 --- a/code/_onclick/hud/spell_screen_objects.dm +++ b/code/_onclick/hud/spell_screen_objects.dm @@ -1,220 +1,220 @@ -/obj/screen/movable/spell_master - name = "Spells" - icon = 'icons/mob/screen_spells.dmi' - icon_state = "wiz_spell_ready" - var/list/obj/screen/spell/spell_objects = list() - var/showing = 0 - - var/open_state = "master_open" - var/closed_state = "master_closed" - - screen_loc = ui_spell_master - - var/mob/spell_holder - -/obj/screen/movable/spell_master/Destroy() - . = ..() - for(var/obj/screen/spell/spells in spell_objects) - spells.spellmaster = null - spell_objects.Cut() - if(spell_holder) - spell_holder.spell_masters -= src - if(spell_holder.client && spell_holder.client.screen) - spell_holder.client.screen -= src - spell_holder = null - -/obj/screen/movable/spell_master/MouseDrop() - if(showing) - return - - return ..() - -/obj/screen/movable/spell_master/Click() - if(!spell_objects.len) - qdel(src) - return - - toggle_open() - -/obj/screen/movable/spell_master/proc/toggle_open(var/forced_state = 0) - if(showing && (forced_state != 2)) - for(var/obj/screen/spell/O in spell_objects) - if(spell_holder && spell_holder.client) - spell_holder.client.screen -= O - O.handle_icon_updates = 0 - showing = 0 - overlays.len = 0 - overlays.Add(closed_state) - else if(forced_state != 1) - open_spellmaster() - update_spells(1) - showing = 1 - overlays.len = 0 - overlays.Add(open_state) - -/obj/screen/movable/spell_master/proc/open_spellmaster() - var/list/screen_loc_xy = splittext(screen_loc,",") - - //Create list of X offsets - var/list/screen_loc_X = splittext(screen_loc_xy[1],":") - var/x_position = decode_screen_X(screen_loc_X[1]) - var/x_pix = screen_loc_X[2] - - //Create list of Y offsets - var/list/screen_loc_Y = splittext(screen_loc_xy[2],":") - var/y_position = decode_screen_Y(screen_loc_Y[1]) - var/y_pix = screen_loc_Y[2] - - for(var/i = 1; i <= spell_objects.len; i++) - var/obj/screen/spell/S = spell_objects[i] - var/xpos = x_position + (x_position < 8 ? 1 : -1)*(i%7) - var/ypos = y_position + (y_position < 8 ? round(i/7) : -round(i/7)) - if(spell_holder && spell_holder.client) - S.screen_loc = "[encode_screen_X(xpos)]:[x_pix],[encode_screen_Y(ypos)]:[y_pix]" - spell_holder.client.screen += S - S.handle_icon_updates = 1 - -/obj/screen/movable/spell_master/proc/add_spell(var/spell/spell) - if(!spell) return - - if(spell.connected_button) //we have one already, for some reason - if(spell.connected_button in spell_objects) - return - else - spell_objects.Add(spell.connected_button) - if(spell_holder.client) - toggle_open(2) - return - - if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one - return - - var/obj/screen/spell/newscreen = new /obj/screen/spell() - newscreen.spellmaster = src - newscreen.spell = spell - - spell.connected_button = newscreen - - if(!spell.override_base) //if it's not set, we do basic checks - if(spell.spell_flags & CONSTRUCT_CHECK) - newscreen.spell_base = "const" //construct spells - else - newscreen.spell_base = "wiz" //wizard spells - else - newscreen.spell_base = spell.override_base - newscreen.name = spell.name - newscreen.update_charge(1) - spell_objects.Add(newscreen) - if(spell_holder.client) - toggle_open(2) //forces the icons to refresh on screen - -/obj/screen/movable/spell_master/proc/remove_spell(var/spell/spell) - qdel(spell.connected_button) - - spell.connected_button = null - - if(spell_objects.len) - toggle_open(showing + 1) - else - qdel(src) - -/obj/screen/movable/spell_master/proc/silence_spells(var/amount) - for(var/obj/screen/spell/spell in spell_objects) - spell.spell.silenced = amount - spell.update_charge(1) - -/obj/screen/movable/spell_master/proc/update_spells(forced = 0, mob/user) - if(user && user.client) - if(!(src in user.client.screen)) - user.client.screen += src - for(var/obj/screen/spell/spell in spell_objects) - spell.update_charge(forced) - -/obj/screen/movable/spell_master/genetic - name = "Mutant Powers" - icon_state = "genetic_spell_ready" - - open_state = "genetics_open" - closed_state = "genetics_closed" - - screen_loc = ui_genetic_master - -/obj/screen/movable/spell_master/swarm - name = "Swarm Abilities" - icon_state = "nano_spell_ready" - - open_state = "swarm_open" - closed_state = "swarm_closed" - -//////////////ACTUAL SPELLS////////////// -//This is what you click to cast things// -///////////////////////////////////////// -/obj/screen/spell - icon = 'icons/mob/screen_spells.dmi' - icon_state = "wiz_spell_base" - var/spell_base = "wiz" - var/last_charge = 0 //not a time, but the last remembered charge value - - var/spell/spell = null - var/handle_icon_updates = 0 - var/obj/screen/movable/spell_master/spellmaster - - var/icon/last_charged_icon - -/obj/screen/spell/Destroy() - . = ..() - spell = null - last_charged_icon = null - if(spellmaster) - spellmaster.spell_objects -= src - if(spellmaster.spell_holder && spellmaster.spell_holder.client) - spellmaster.spell_holder.client.screen -= src - if(spellmaster && !spellmaster.spell_objects.len) - qdel(spellmaster) - spellmaster = null - -/obj/screen/spell/proc/update_charge(var/forced_update = 0) - if(!spell) - qdel(src) - return - - if((last_charge == spell.charge_counter || !handle_icon_updates) && !forced_update) - return //nothing to see here - - cut_overlay(spell.hud_state) - - if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES) - if(spell.charge_counter < spell.charge_max) - icon_state = "[spell_base]_spell_base" - if(spell.charge_counter > 0) - var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready") - partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max)) - overlays += partial_charge - if(last_charged_icon) - cut_overlay(last_charged_icon) - last_charged_icon = partial_charge - else if(last_charged_icon) - cut_overlay(last_charged_icon) - last_charged_icon = null - else - icon_state = "[spell_base]_spell_ready" - if(last_charged_icon) - cut_overlay(last_charged_icon) - else - icon_state = "[spell_base]_spell_ready" - - add_overlay(spell.hud_state) - - last_charge = spell.charge_counter - - cut_overlay("silence") - if(spell.silenced) - overlays += "silence" - -/obj/screen/spell/Click() - if(!usr || !spell) - qdel(src) - return - - spell.perform(usr) - update_charge(1) +/obj/screen/movable/spell_master + name = "Spells" + icon = 'icons/mob/screen_spells.dmi' + icon_state = "wiz_spell_ready" + var/list/obj/screen/spell/spell_objects = list() + var/showing = 0 + + var/open_state = "master_open" + var/closed_state = "master_closed" + + screen_loc = ui_spell_master + + var/mob/spell_holder + +/obj/screen/movable/spell_master/Destroy() + . = ..() + for(var/obj/screen/spell/spells in spell_objects) + spells.spellmaster = null + spell_objects.Cut() + if(spell_holder) + spell_holder.spell_masters -= src + if(spell_holder.client && spell_holder.client.screen) + spell_holder.client.screen -= src + spell_holder = null + +/obj/screen/movable/spell_master/MouseDrop() + if(showing) + return + + return ..() + +/obj/screen/movable/spell_master/Click() + if(!spell_objects.len) + qdel(src) + return + + toggle_open() + +/obj/screen/movable/spell_master/proc/toggle_open(var/forced_state = 0) + if(showing && (forced_state != 2)) + for(var/obj/screen/spell/O in spell_objects) + if(spell_holder && spell_holder.client) + spell_holder.client.screen -= O + O.handle_icon_updates = 0 + showing = 0 + overlays.len = 0 + overlays.Add(closed_state) + else if(forced_state != 1) + open_spellmaster() + update_spells(1) + showing = 1 + overlays.len = 0 + overlays.Add(open_state) + +/obj/screen/movable/spell_master/proc/open_spellmaster() + var/list/screen_loc_xy = splittext(screen_loc,",") + + //Create list of X offsets + var/list/screen_loc_X = splittext(screen_loc_xy[1],":") + var/x_position = decode_screen_X(screen_loc_X[1]) + var/x_pix = screen_loc_X[2] + + //Create list of Y offsets + var/list/screen_loc_Y = splittext(screen_loc_xy[2],":") + var/y_position = decode_screen_Y(screen_loc_Y[1]) + var/y_pix = screen_loc_Y[2] + + for(var/i = 1; i <= spell_objects.len; i++) + var/obj/screen/spell/S = spell_objects[i] + var/xpos = x_position + (x_position < 8 ? 1 : -1)*(i%7) + var/ypos = y_position + (y_position < 8 ? round(i/7) : -round(i/7)) + if(spell_holder && spell_holder.client) + S.screen_loc = "[encode_screen_X(xpos)]:[x_pix],[encode_screen_Y(ypos)]:[y_pix]" + spell_holder.client.screen += S + S.handle_icon_updates = 1 + +/obj/screen/movable/spell_master/proc/add_spell(var/spell/spell) + if(!spell) return + + if(spell.connected_button) //we have one already, for some reason + if(spell.connected_button in spell_objects) + return + else + spell_objects.Add(spell.connected_button) + if(spell_holder.client) + toggle_open(2) + return + + if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one + return + + var/obj/screen/spell/newscreen = new /obj/screen/spell() + newscreen.spellmaster = src + newscreen.spell = spell + + spell.connected_button = newscreen + + if(!spell.override_base) //if it's not set, we do basic checks + if(spell.spell_flags & CONSTRUCT_CHECK) + newscreen.spell_base = "const" //construct spells + else + newscreen.spell_base = "wiz" //wizard spells + else + newscreen.spell_base = spell.override_base + newscreen.name = spell.name + newscreen.update_charge(1) + spell_objects.Add(newscreen) + if(spell_holder.client) + toggle_open(2) //forces the icons to refresh on screen + +/obj/screen/movable/spell_master/proc/remove_spell(var/spell/spell) + qdel(spell.connected_button) + + spell.connected_button = null + + if(spell_objects.len) + toggle_open(showing + 1) + else + qdel(src) + +/obj/screen/movable/spell_master/proc/silence_spells(var/amount) + for(var/obj/screen/spell/spell in spell_objects) + spell.spell.silenced = amount + spell.update_charge(1) + +/obj/screen/movable/spell_master/proc/update_spells(forced = 0, mob/user) + if(user && user.client) + if(!(src in user.client.screen)) + user.client.screen += src + for(var/obj/screen/spell/spell in spell_objects) + spell.update_charge(forced) + +/obj/screen/movable/spell_master/genetic + name = "Mutant Powers" + icon_state = "genetic_spell_ready" + + open_state = "genetics_open" + closed_state = "genetics_closed" + + screen_loc = ui_genetic_master + +/obj/screen/movable/spell_master/swarm + name = "Swarm Abilities" + icon_state = "nano_spell_ready" + + open_state = "swarm_open" + closed_state = "swarm_closed" + +//////////////ACTUAL SPELLS////////////// +//This is what you click to cast things// +///////////////////////////////////////// +/obj/screen/spell + icon = 'icons/mob/screen_spells.dmi' + icon_state = "wiz_spell_base" + var/spell_base = "wiz" + var/last_charge = 0 //not a time, but the last remembered charge value + + var/spell/spell = null + var/handle_icon_updates = 0 + var/obj/screen/movable/spell_master/spellmaster + + var/icon/last_charged_icon + +/obj/screen/spell/Destroy() + . = ..() + spell = null + last_charged_icon = null + if(spellmaster) + spellmaster.spell_objects -= src + if(spellmaster.spell_holder && spellmaster.spell_holder.client) + spellmaster.spell_holder.client.screen -= src + if(spellmaster && !spellmaster.spell_objects.len) + qdel(spellmaster) + spellmaster = null + +/obj/screen/spell/proc/update_charge(var/forced_update = 0) + if(!spell) + qdel(src) + return + + if((last_charge == spell.charge_counter || !handle_icon_updates) && !forced_update) + return //nothing to see here + + cut_overlay(spell.hud_state) + + if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES) + if(spell.charge_counter < spell.charge_max) + icon_state = "[spell_base]_spell_base" + if(spell.charge_counter > 0) + var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready") + partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max)) + overlays += partial_charge + if(last_charged_icon) + cut_overlay(last_charged_icon) + last_charged_icon = partial_charge + else if(last_charged_icon) + cut_overlay(last_charged_icon) + last_charged_icon = null + else + icon_state = "[spell_base]_spell_ready" + if(last_charged_icon) + cut_overlay(last_charged_icon) + else + icon_state = "[spell_base]_spell_ready" + + add_overlay(spell.hud_state) + + last_charge = spell.charge_counter + + cut_overlay("silence") + if(spell.silenced) + overlays += "silence" + +/obj/screen/spell/Click() + if(!usr || !spell) + qdel(src) + return + + spell.perform(usr) + update_charge(1) diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index 82f7920752..dcfb888522 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -1,96 +1,96 @@ -/** - * Startup hook. - * Called in world.dm when the server starts. - */ -/hook/startup - -/** - * Roundstart hook. - * Called in gameticker.dm when a round starts. - */ -/hook/roundstart - -/** - * Roundend hook. - * Called in gameticker.dm when a round ends. - */ -/hook/roundend - -/** - * Death hook. - * Called in death.dm when someone dies. - * Parameters: var/mob/living/carbon/human, var/gibbed - */ -/hook/death - -/** - * Cloning hook. - * Called in cloning.dm when someone is brought back by the wonders of modern science. - * Parameters: var/mob/living/carbon/human - */ -/hook/clone - -/** - * Debrained hook. - * Called in brain_item.dm when someone gets debrained. - * Parameters: var/obj/item/organ/brain - */ -/hook/debrain - -/** - * Borged hook. - * Called in robot_parts.dm when someone gets turned into a cyborg. - * Parameters: var/mob/living/silicon/robot - */ -/hook/borgify - -/** - * Podman hook. - * Called in podmen.dm when someone is brought back as a Diona. - * Parameters: var/mob/living/carbon/alien/diona - */ -/hook/harvest_podman - -/** - * Payroll revoked hook. - * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/revoke_payroll - -/** - * Account suspension hook. - * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/change_account_status - -/** - * Employee reassignment hook. - * Called in card.dm when someone's card is reassigned at the HoP's desk. - * Parameters: var/obj/item/weapon/card/id - */ -/hook/reassign_employee - -/** - * Employee terminated hook. - * Called in card.dm when someone's card is terminated at the HoP's desk. - * Parameters: var/obj/item/weapon/card/id - */ -/hook/terminate_employee - -/** - * Crate sold hook. - * Called in supplyshuttle.dm when a crate is sold on the shuttle. - * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle - */ -/hook/sell_crate - -/** - * Supply Shuttle sold hook. - * Called in supplyshuttle.dm when the shuttle contents are sold. - * This hook is called _before_ the crates are processed for normal - * phoron/metal sale (and before the sell_crate hooks) - * Parameters: var/area/area_shuttle - */ -/hook/sell_shuttle +/** + * Startup hook. + * Called in world.dm when the server starts. + */ +/hook/startup + +/** + * Roundstart hook. + * Called in gameticker.dm when a round starts. + */ +/hook/roundstart + +/** + * Roundend hook. + * Called in gameticker.dm when a round ends. + */ +/hook/roundend + +/** + * Death hook. + * Called in death.dm when someone dies. + * Parameters: var/mob/living/carbon/human, var/gibbed + */ +/hook/death + +/** + * Cloning hook. + * Called in cloning.dm when someone is brought back by the wonders of modern science. + * Parameters: var/mob/living/carbon/human + */ +/hook/clone + +/** + * Debrained hook. + * Called in brain_item.dm when someone gets debrained. + * Parameters: var/obj/item/organ/brain + */ +/hook/debrain + +/** + * Borged hook. + * Called in robot_parts.dm when someone gets turned into a cyborg. + * Parameters: var/mob/living/silicon/robot + */ +/hook/borgify + +/** + * Podman hook. + * Called in podmen.dm when someone is brought back as a Diona. + * Parameters: var/mob/living/carbon/alien/diona + */ +/hook/harvest_podman + +/** + * Payroll revoked hook. + * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal. + * Parameters: var/datum/money_account + */ +/hook/revoke_payroll + +/** + * Account suspension hook. + * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal. + * Parameters: var/datum/money_account + */ +/hook/change_account_status + +/** + * Employee reassignment hook. + * Called in card.dm when someone's card is reassigned at the HoP's desk. + * Parameters: var/obj/item/weapon/card/id + */ +/hook/reassign_employee + +/** + * Employee terminated hook. + * Called in card.dm when someone's card is terminated at the HoP's desk. + * Parameters: var/obj/item/weapon/card/id + */ +/hook/terminate_employee + +/** + * Crate sold hook. + * Called in supplyshuttle.dm when a crate is sold on the shuttle. + * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle + */ +/hook/sell_crate + +/** + * Supply Shuttle sold hook. + * Called in supplyshuttle.dm when the shuttle contents are sold. + * This hook is called _before_ the crates are processed for normal + * phoron/metal sale (and before the sell_crate hooks) + * Parameters: var/area/area_shuttle + */ +/hook/sell_shuttle diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index bcea4490de..7b63084af2 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -1,56 +1,56 @@ -//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one. -//It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) -//WIP, needs lots of work still - -// -// TODO - This will be completely replaced by master.dm in time. -// - -var/global/datum/controller/game_controller/master_controller //Set in world.New() - -var/global/controller_iteration = 0 -var/global/last_tick_duration = 0 - -var/global/pipe_processing_killed = 0 - -/datum/controller/game_controller - var/list/shuttle_list // For debugging and VV - -/datum/controller/game_controller/New() - //There can be only one master_controller. Out with the old and in with the new. - if(master_controller != src) - log_debug("Rebuilding Master Controller") - if(istype(master_controller)) - qdel(master_controller) - master_controller = src - - if(!job_master) - job_master = new /datum/controller/occupations() - job_master.SetupOccupations() - job_master.LoadJobs("config/jobs.txt") - admin_notice("Job setup complete", R_DEBUG) - - if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() - if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() - -/datum/controller/game_controller/proc/setup() - - setup_objects() - // setupgenetics() Moved to SSatoms - // SetupXenoarch() - Moved to SSxenoarch - - transfer_controller = new - admin_notice("Initializations complete.", R_DEBUG) - -// #if UNIT_TEST -// #define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. -// #else -// #define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } -// #endif - -/datum/controller/game_controller/proc/setup_objects() - // Set up antagonists. - populate_antag_type_list() - - //Set up spawn points. +//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one. +//It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) +//WIP, needs lots of work still + +// +// TODO - This will be completely replaced by master.dm in time. +// + +var/global/datum/controller/game_controller/master_controller //Set in world.New() + +var/global/controller_iteration = 0 +var/global/last_tick_duration = 0 + +var/global/pipe_processing_killed = 0 + +/datum/controller/game_controller + var/list/shuttle_list // For debugging and VV + +/datum/controller/game_controller/New() + //There can be only one master_controller. Out with the old and in with the new. + if(master_controller != src) + log_debug("Rebuilding Master Controller") + if(istype(master_controller)) + qdel(master_controller) + master_controller = src + + if(!job_master) + job_master = new /datum/controller/occupations() + job_master.SetupOccupations() + job_master.LoadJobs("config/jobs.txt") + admin_notice("Job setup complete", R_DEBUG) + + if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() + if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() + +/datum/controller/game_controller/proc/setup() + + setup_objects() + // setupgenetics() Moved to SSatoms + // SetupXenoarch() - Moved to SSxenoarch + + transfer_controller = new + admin_notice("Initializations complete.", R_DEBUG) + +// #if UNIT_TEST +// #define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. +// #else +// #define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } +// #endif + +/datum/controller/game_controller/proc/setup_objects() + // Set up antagonists. + populate_antag_type_list() + + //Set up spawn points. populate_spawn_points() \ No newline at end of file diff --git a/code/controllers/observer_listener/atom/observer.dm b/code/controllers/observer_listener/atom/observer.dm index da38580414..8c3e93f4fc 100644 --- a/code/controllers/observer_listener/atom/observer.dm +++ b/code/controllers/observer_listener/atom/observer.dm @@ -1,31 +1,31 @@ -#define OBSERVER_EVENT_DESTROY "OnDestroy" - -/atom - var/list/observer_events - -/atom/Destroy() - var/list/destroy_listeners = get_listener_list_from_event(OBSERVER_EVENT_DESTROY) - if(destroy_listeners) - for(var/destroy_listener in destroy_listeners) - call(destroy_listener, destroy_listeners[destroy_listener])(src) - - for(var/list/listeners in observer_events) - listeners.Cut() - - return ..() - -/atom/proc/register(var/event, var/procOwner, var/proc_call) - var/list/listeners = get_listener_list_from_event(event) - listeners[procOwner] = proc_call - -/atom/proc/unregister(var/event, var/procOwner) - var/list/listeners = get_listener_list_from_event(event) - listeners -= procOwner - -/atom/proc/get_listener_list_from_event(var/observer_event) - if(!observer_events) observer_events = list() - var/list/listeners = observer_events[observer_event] - if(!listeners) - listeners = list() - observer_events[observer_event] = listeners - return listeners +#define OBSERVER_EVENT_DESTROY "OnDestroy" + +/atom + var/list/observer_events + +/atom/Destroy() + var/list/destroy_listeners = get_listener_list_from_event(OBSERVER_EVENT_DESTROY) + if(destroy_listeners) + for(var/destroy_listener in destroy_listeners) + call(destroy_listener, destroy_listeners[destroy_listener])(src) + + for(var/list/listeners in observer_events) + listeners.Cut() + + return ..() + +/atom/proc/register(var/event, var/procOwner, var/proc_call) + var/list/listeners = get_listener_list_from_event(event) + listeners[procOwner] = proc_call + +/atom/proc/unregister(var/event, var/procOwner) + var/list/listeners = get_listener_list_from_event(event) + listeners -= procOwner + +/atom/proc/get_listener_list_from_event(var/observer_event) + if(!observer_events) observer_events = list() + var/list/listeners = observer_events[observer_event] + if(!listeners) + listeners = list() + observer_events[observer_event] = listeners + return listeners diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm index 4b6140e507..868025eca3 100644 --- a/code/controllers/subsystems/alarm.dm +++ b/code/controllers/subsystems/alarm.dm @@ -1,45 +1,45 @@ - -// We manually initialize the alarm handlers instead of looping over all existing types -// to make it possible to write: camera_alarm.triggerAlarm() rather than SSalarm.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. -/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() -/var/global/datum/alarm_handler/camera/camera_alarm = new() -/var/global/datum/alarm_handler/fire/fire_alarm = new() -/var/global/datum/alarm_handler/motion/motion_alarm = new() -/var/global/datum/alarm_handler/power/power_alarm = new() - -SUBSYSTEM_DEF(alarm) - name = "Alarm" - wait = 2 SECONDS - priority = FIRE_PRIORITY_ALARM - init_order = INIT_ORDER_ALARM - var/list/datum/alarm/all_handlers - var/tmp/list/currentrun = null - var/static/list/active_alarm_cache = list() - -/datum/controller/subsystem/alarm/Initialize() - all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) - . = ..() - -/datum/controller/subsystem/alarm/fire(resumed = FALSE) - if(!resumed) - src.currentrun = all_handlers.Copy() - active_alarm_cache.Cut() - - var/list/currentrun = src.currentrun // Cache for sanic speed - while (currentrun.len) - var/datum/alarm_handler/AH = currentrun[currentrun.len] - currentrun.len-- - AH.process() - active_alarm_cache += AH.alarms - - if (MC_TICK_CHECK) - return - -/datum/controller/subsystem/alarm/proc/active_alarms() - return active_alarm_cache.Copy() - -/datum/controller/subsystem/alarm/proc/number_of_active_alarms() - return active_alarm_cache.len - -/datum/controller/subsystem/alarm/stat_entry() - ..("[number_of_active_alarms()] alarm\s") + +// We manually initialize the alarm handlers instead of looping over all existing types +// to make it possible to write: camera_alarm.triggerAlarm() rather than SSalarm.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. +/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() +/var/global/datum/alarm_handler/camera/camera_alarm = new() +/var/global/datum/alarm_handler/fire/fire_alarm = new() +/var/global/datum/alarm_handler/motion/motion_alarm = new() +/var/global/datum/alarm_handler/power/power_alarm = new() + +SUBSYSTEM_DEF(alarm) + name = "Alarm" + wait = 2 SECONDS + priority = FIRE_PRIORITY_ALARM + init_order = INIT_ORDER_ALARM + var/list/datum/alarm/all_handlers + var/tmp/list/currentrun = null + var/static/list/active_alarm_cache = list() + +/datum/controller/subsystem/alarm/Initialize() + all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) + . = ..() + +/datum/controller/subsystem/alarm/fire(resumed = FALSE) + if(!resumed) + src.currentrun = all_handlers.Copy() + active_alarm_cache.Cut() + + var/list/currentrun = src.currentrun // Cache for sanic speed + while (currentrun.len) + var/datum/alarm_handler/AH = currentrun[currentrun.len] + currentrun.len-- + AH.process() + active_alarm_cache += AH.alarms + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/alarm/proc/active_alarms() + return active_alarm_cache.Copy() + +/datum/controller/subsystem/alarm/proc/number_of_active_alarms() + return active_alarm_cache.len + +/datum/controller/subsystem/alarm/stat_entry() + ..("[number_of_active_alarms()] alarm\s") diff --git a/code/controllers/subsystems/circuits.dm b/code/controllers/subsystems/circuits.dm index 4d2b282171..f417ce3055 100644 --- a/code/controllers/subsystems/circuits.dm +++ b/code/controllers/subsystems/circuits.dm @@ -1,94 +1,94 @@ -// -// This is for custom circuits, mostly the initialization of global properties about them. -// Might make this also process them in the future if its better to do that than using the obj ticker. -// -SUBSYSTEM_DEF(circuit) - name = "Circuit" - init_order = INIT_ORDER_CIRCUIT - flags = SS_NO_FIRE - var/list/all_components = list() // Associative list of [component_name]:[component_path] pairs - var/list/cached_components = list() // Associative list of [component_path]:[component] pairs - var/list/all_assemblies = list() // Associative list of [assembly_name]:[assembly_path] pairs - var/list/cached_assemblies = list() // Associative list of [assembly_path]:[assembly] pairs - var/list/all_circuits = list() // Associative list of [circuit_name]:[circuit_path] pairs - var/list/circuit_fabricator_recipe_list = list() // Associative list of [category_name]:[list_of_circuit_paths] pairs -// var/cost_multiplier = MINERAL_MATERIAL_AMOUNT / 10 // Each circuit cost unit is 200cm3 - -/datum/controller/subsystem/circuit/Recover() - flags |= SS_NO_INIT // Make extra sure we don't initialize twice. - -/datum/controller/subsystem/circuit/Initialize(timeofday) - circuits_init() - return ..() - -/datum/controller/subsystem/circuit/proc/circuits_init() - //Cached lists for free performance - for(var/obj/item/integrated_circuit/IC as anything in typesof(/obj/item/integrated_circuit)) - var/path = IC - all_components[initial(IC.name)] = path // Populating the component lists - cached_components[path] = new path - - if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH))) - continue - - var/category = initial(IC.category_text) - if(!circuit_fabricator_recipe_list[category]) - circuit_fabricator_recipe_list[category] = list() - var/list/category_list = circuit_fabricator_recipe_list[category] - category_list += IC // Populating the fabricator categories - - for(var/obj/item/device/electronic_assembly/A as anything in typesof(/obj/item/device/electronic_assembly)) - var/path = A - all_assemblies[initial(A.name)] = path - cached_assemblies[path] = new path - - - circuit_fabricator_recipe_list["Assemblies"] = list( - /obj/item/device/electronic_assembly/default, - /obj/item/device/electronic_assembly/calc, - /obj/item/device/electronic_assembly/clam, - /obj/item/device/electronic_assembly/simple, - /obj/item/device/electronic_assembly/hook, - /obj/item/device/electronic_assembly/pda, - /obj/item/device/electronic_assembly/tiny/default, - /obj/item/device/electronic_assembly/tiny/cylinder, - /obj/item/device/electronic_assembly/tiny/scanner, - /obj/item/device/electronic_assembly/tiny/hook, - /obj/item/device/electronic_assembly/tiny/box, - /obj/item/device/electronic_assembly/medium/default, - /obj/item/device/electronic_assembly/medium/box, - /obj/item/device/electronic_assembly/medium/clam, - /obj/item/device/electronic_assembly/medium/medical, - /obj/item/device/electronic_assembly/medium/gun, - /obj/item/device/electronic_assembly/medium/radio, - /obj/item/device/electronic_assembly/large/default, - /obj/item/device/electronic_assembly/large/scope, - /obj/item/device/electronic_assembly/large/terminal, - /obj/item/device/electronic_assembly/large/arm, - /obj/item/device/electronic_assembly/large/tall, - /obj/item/device/electronic_assembly/large/industrial, - /obj/item/device/electronic_assembly/drone/default, - /obj/item/device/electronic_assembly/drone/arms, - /obj/item/device/electronic_assembly/drone/secbot, - /obj/item/device/electronic_assembly/drone/medbot, - /obj/item/device/electronic_assembly/drone/genbot, - /obj/item/device/electronic_assembly/drone/android, - /obj/item/device/electronic_assembly/wallmount/tiny, - /obj/item/device/electronic_assembly/wallmount/light, - /obj/item/device/electronic_assembly/wallmount, - /obj/item/device/electronic_assembly/wallmount/heavy, - /obj/item/weapon/implant/integrated_circuit, - /obj/item/clothing/under/circuitry, - /obj/item/clothing/gloves/circuitry, - /obj/item/clothing/glasses/circuitry, - /obj/item/clothing/shoes/circuitry, - /obj/item/clothing/head/circuitry, - /obj/item/clothing/ears/circuitry, - /obj/item/clothing/suit/circuitry - ) - - circuit_fabricator_recipe_list["Tools"] = list( - /obj/item/device/integrated_electronics/wirer, - /obj/item/device/integrated_electronics/debugger, - /obj/item/device/integrated_electronics/detailer - ) +// +// This is for custom circuits, mostly the initialization of global properties about them. +// Might make this also process them in the future if its better to do that than using the obj ticker. +// +SUBSYSTEM_DEF(circuit) + name = "Circuit" + init_order = INIT_ORDER_CIRCUIT + flags = SS_NO_FIRE + var/list/all_components = list() // Associative list of [component_name]:[component_path] pairs + var/list/cached_components = list() // Associative list of [component_path]:[component] pairs + var/list/all_assemblies = list() // Associative list of [assembly_name]:[assembly_path] pairs + var/list/cached_assemblies = list() // Associative list of [assembly_path]:[assembly] pairs + var/list/all_circuits = list() // Associative list of [circuit_name]:[circuit_path] pairs + var/list/circuit_fabricator_recipe_list = list() // Associative list of [category_name]:[list_of_circuit_paths] pairs +// var/cost_multiplier = MINERAL_MATERIAL_AMOUNT / 10 // Each circuit cost unit is 200cm3 + +/datum/controller/subsystem/circuit/Recover() + flags |= SS_NO_INIT // Make extra sure we don't initialize twice. + +/datum/controller/subsystem/circuit/Initialize(timeofday) + circuits_init() + return ..() + +/datum/controller/subsystem/circuit/proc/circuits_init() + //Cached lists for free performance + for(var/obj/item/integrated_circuit/IC as anything in typesof(/obj/item/integrated_circuit)) + var/path = IC + all_components[initial(IC.name)] = path // Populating the component lists + cached_components[path] = new path + + if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH))) + continue + + var/category = initial(IC.category_text) + if(!circuit_fabricator_recipe_list[category]) + circuit_fabricator_recipe_list[category] = list() + var/list/category_list = circuit_fabricator_recipe_list[category] + category_list += IC // Populating the fabricator categories + + for(var/obj/item/device/electronic_assembly/A as anything in typesof(/obj/item/device/electronic_assembly)) + var/path = A + all_assemblies[initial(A.name)] = path + cached_assemblies[path] = new path + + + circuit_fabricator_recipe_list["Assemblies"] = list( + /obj/item/device/electronic_assembly/default, + /obj/item/device/electronic_assembly/calc, + /obj/item/device/electronic_assembly/clam, + /obj/item/device/electronic_assembly/simple, + /obj/item/device/electronic_assembly/hook, + /obj/item/device/electronic_assembly/pda, + /obj/item/device/electronic_assembly/tiny/default, + /obj/item/device/electronic_assembly/tiny/cylinder, + /obj/item/device/electronic_assembly/tiny/scanner, + /obj/item/device/electronic_assembly/tiny/hook, + /obj/item/device/electronic_assembly/tiny/box, + /obj/item/device/electronic_assembly/medium/default, + /obj/item/device/electronic_assembly/medium/box, + /obj/item/device/electronic_assembly/medium/clam, + /obj/item/device/electronic_assembly/medium/medical, + /obj/item/device/electronic_assembly/medium/gun, + /obj/item/device/electronic_assembly/medium/radio, + /obj/item/device/electronic_assembly/large/default, + /obj/item/device/electronic_assembly/large/scope, + /obj/item/device/electronic_assembly/large/terminal, + /obj/item/device/electronic_assembly/large/arm, + /obj/item/device/electronic_assembly/large/tall, + /obj/item/device/electronic_assembly/large/industrial, + /obj/item/device/electronic_assembly/drone/default, + /obj/item/device/electronic_assembly/drone/arms, + /obj/item/device/electronic_assembly/drone/secbot, + /obj/item/device/electronic_assembly/drone/medbot, + /obj/item/device/electronic_assembly/drone/genbot, + /obj/item/device/electronic_assembly/drone/android, + /obj/item/device/electronic_assembly/wallmount/tiny, + /obj/item/device/electronic_assembly/wallmount/light, + /obj/item/device/electronic_assembly/wallmount, + /obj/item/device/electronic_assembly/wallmount/heavy, + /obj/item/weapon/implant/integrated_circuit, + /obj/item/clothing/under/circuitry, + /obj/item/clothing/gloves/circuitry, + /obj/item/clothing/glasses/circuitry, + /obj/item/clothing/shoes/circuitry, + /obj/item/clothing/head/circuitry, + /obj/item/clothing/ears/circuitry, + /obj/item/clothing/suit/circuitry + ) + + circuit_fabricator_recipe_list["Tools"] = list( + /obj/item/device/integrated_electronics/wirer, + /obj/item/device/integrated_electronics/debugger, + /obj/item/device/integrated_electronics/detailer + ) diff --git a/code/controllers/subsystems/events2.dm b/code/controllers/subsystems/events2.dm index 7cf986358f..e52025b2c0 100644 --- a/code/controllers/subsystems/events2.dm +++ b/code/controllers/subsystems/events2.dm @@ -1,36 +1,36 @@ -// This is a simple ticker for the new event system. -// The logic that determines what events get chosen is held inside a seperate subsystem. - -SUBSYSTEM_DEF(event_ticker) - name = "Events (Ticker)" - wait = 2 SECONDS - runlevels = RUNLEVEL_GAME - - // List of `/datum/event2/event`s that are currently active, and receiving process() ticks. - var/list/active_events = list() - - // List of `/datum/event2/event`s that finished, and are here for showing at roundend, if that's desired. - var/list/finished_events = list() - -// Process active events. -/datum/controller/subsystem/event_ticker/fire(resumed) - for(var/datum/event2/event/event as anything in active_events) - event.process() - if(event.finished) - event_finished(event) - -// Starts an event, independent of the GM system. -// This means it will always run, and won't affect the GM system in any way, e.g. not putting the event off limits after one use. -/datum/controller/subsystem/event_ticker/proc/start_event(event_type) - var/datum/event2/event/E = new event_type() - E.execute() - event_started(E) - -/datum/controller/subsystem/event_ticker/proc/event_started(datum/event2/event/E) - log_debug("Event [E.type] is now being ran.") - active_events += E - -/datum/controller/subsystem/event_ticker/proc/event_finished(datum/event2/event/E) - log_debug("Event [E.type] has finished.") - active_events -= E +// This is a simple ticker for the new event system. +// The logic that determines what events get chosen is held inside a seperate subsystem. + +SUBSYSTEM_DEF(event_ticker) + name = "Events (Ticker)" + wait = 2 SECONDS + runlevels = RUNLEVEL_GAME + + // List of `/datum/event2/event`s that are currently active, and receiving process() ticks. + var/list/active_events = list() + + // List of `/datum/event2/event`s that finished, and are here for showing at roundend, if that's desired. + var/list/finished_events = list() + +// Process active events. +/datum/controller/subsystem/event_ticker/fire(resumed) + for(var/datum/event2/event/event as anything in active_events) + event.process() + if(event.finished) + event_finished(event) + +// Starts an event, independent of the GM system. +// This means it will always run, and won't affect the GM system in any way, e.g. not putting the event off limits after one use. +/datum/controller/subsystem/event_ticker/proc/start_event(event_type) + var/datum/event2/event/E = new event_type() + E.execute() + event_started(E) + +/datum/controller/subsystem/event_ticker/proc/event_started(datum/event2/event/E) + log_debug("Event [E.type] is now being ran.") + active_events += E + +/datum/controller/subsystem/event_ticker/proc/event_finished(datum/event2/event/E) + log_debug("Event [E.type] has finished.") + active_events -= E finished_events += E \ No newline at end of file diff --git a/code/controllers/subsystems/game_master.dm b/code/controllers/subsystems/game_master.dm index aa1b6dc953..6b2e8c7bf0 100644 --- a/code/controllers/subsystems/game_master.dm +++ b/code/controllers/subsystems/game_master.dm @@ -1,366 +1,366 @@ -// This is a sort of successor to the various event systems created over the years. It is designed to be just a tad smarter than the -// previous ones, checking various things like player count, department size and composition, individual player activity, -// individual player (IC) skill, and such, in order to try to choose the best events to take in order to add spice or variety to -// the round. - -// This subsystem holds the logic that chooses events. Actual event processing is handled in a seperate subsystem. -SUBSYSTEM_DEF(game_master) - name = "Events (Game Master)" - wait = 1 MINUTE - runlevels = RUNLEVEL_GAME - - // The GM object is what actually chooses events. - // It's held in a seperate object for better encapsulation, and allows for different 'flavors' of GMs to be made, that choose events differently. - var/datum/game_master/GM = null - var/game_master_type = /datum/game_master/default - - var/list/available_events = list() // A list of meta event objects. - - var/danger = 0 // The GM's best guess at how chaotic the round is. High danger makes it hold back. - var/staleness = -20 // Determines liklihood of the GM doing something, increases over time. - - var/next_event = 0 // Minimum amount of time of nothingness until the GM can pick something again. - - var/debug_messages = FALSE // If true, debug information is written to `log_debug()`. - -/datum/controller/subsystem/game_master/Initialize() - var/list/subtypes = subtypesof(/datum/event2/meta) - for(var/T in subtypes) - var/datum/event2/meta/M = new T() - if(!M.name) - continue - available_events += M - - GM = new game_master_type() - - if(config && !config.enable_game_master) - can_fire = FALSE - - return ..() - -/datum/controller/subsystem/game_master/fire(resumed) - adjust_staleness(1) - adjust_danger(-1) - - var/global_afk = metric.assess_all_living_mobs() - global_afk = abs(global_afk - 100) - global_afk = round(global_afk / 100, 0.1) - adjust_staleness(global_afk) // Staleness increases faster if more people are less active. - - if(GM.ignore_time_restrictions || next_event < world.time) - if(prob(staleness) && pre_event_checks()) - do_event_decision() - if(REALTIMEOFDAY >= 386000 && REALTIMEOFDAY < 387000) //CHOMPEdit - to_world("Automated router restart warning! Connection will be temporarily lost in a moment. Recommended to save any unfinished posts and avoid time-sensitive situations until router is back online.") //CHOMPEdit - - -/datum/controller/subsystem/game_master/proc/do_event_decision() - log_game_master("Going to choose an event.") - var/datum/event2/meta/event_picked = GM.choose_event() - if(event_picked) - run_event(event_picked) - next_event = world.time + rand(GM.decision_cooldown_lower_bound, GM.decision_cooldown_upper_bound) - -/datum/controller/subsystem/game_master/proc/debug_gm() - can_fire = TRUE - staleness = 100 - debug_messages = TRUE - -/datum/controller/subsystem/game_master/proc/run_event(datum/event2/meta/chosen_event) - var/datum/event2/event/E = chosen_event.make_event() - - chosen_event.times_ran++ - - if(!chosen_event.reusable) - // Disable this event, so it only gets picked once. - chosen_event.enabled = FALSE - if(chosen_event.event_class) - // Disable similar events, too. - for(var/datum/event2/meta/meta as anything in available_events) - if(meta.event_class == chosen_event.event_class) - meta.enabled = FALSE - - SSevent_ticker.event_started(E) - adjust_danger(chosen_event.chaos) - adjust_staleness(-(10 + chosen_event.chaos)) // More chaotic events reduce staleness more, e.g. a 25 chaos event will reduce it by 35. - - -// Tell the game master that something dangerous happened, e.g. someone dying, station explosions. -/datum/controller/subsystem/game_master/proc/adjust_danger(amount) - amount *= GM.danger_modifier - danger = round(between(0, danger + amount, 1000), 0.1) - -// Tell the game master that things are getting boring if positive, or something interesting if negative.. -/datum/controller/subsystem/game_master/proc/adjust_staleness(amount) - amount *= GM.staleness_modifier - staleness = round( between(-20, staleness + amount, 100), 0.1) - -// These are ran before committing to an event. -// Returns TRUE if the system is allowed to procede, otherwise returns FALSE. -/datum/controller/subsystem/game_master/proc/pre_event_checks(quiet = FALSE) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) - if(!quiet) - log_game_master("Unable to start event: Ticker is nonexistent, or the game is not ongoing.") - return FALSE - if(GM.ignore_time_restrictions) - return TRUE - if(next_event > world.time) // Sanity. - if(!quiet) - log_game_master("Unable to start event: Time until next event is approximately [round((next_event - world.time) / (1 MINUTE))] minute(s)") - return FALSE - - // Last minute antagging is bad for humans to do, so the GM will respect the start and end of the round. - var/mills = round_duration_in_ds - var/mins = round((mills % 36000) / 600) - var/hours = round(mills / 36000) - -// if(hours < 1 && mins <= 20) // Don't do anything for the first twenty minutes of the round. -// if(!quiet) -// log_debug("Game Master unable to start event: It is too early.") -// return FALSE - if(hours >= 2 && mins >= 40) // Don't do anything in the last twenty minutes of the round, as well. - if(!quiet) - log_game_master("Unable to start event: It is too late.") - return FALSE - return TRUE - -/datum/controller/subsystem/game_master/proc/choose_game_master(mob/user) - var/list/subtypes = subtypesof(/datum/game_master) - var/new_gm_path = tgui_input_list(user, "What kind of Game Master do you want?", "New Game Master", subtypes) - if(new_gm_path) - log_and_message_admins("has swapped the current GM ([GM.type]) for a new GM ([new_gm_path]).") - GM = new new_gm_path(src) - -/datum/controller/subsystem/game_master/proc/log_game_master(message) - if(debug_messages) - log_debug("GAME MASTER: [message]") - - -// This object makes the actual decisions. -/datum/game_master - // Multiplier for how much 'danger' is accumulated. Higer generally makes it possible for more dangerous events to be picked. - var/danger_modifier = 1.0 - - // Ditto. Higher numbers generally result in more events occuring in a round. - var/staleness_modifier = 1.0 - - var/decision_cooldown_lower_bound = 5 MINUTES // Lower bound for how long to wait until -the potential- for another event being decided. - var/decision_cooldown_upper_bound = 20 MINUTES // Same, but upper bound. - - var/ignore_time_restrictions = FALSE // Useful for debugging without needing to wait 20 minutes each time. - var/ignore_round_chaos = FALSE // If true, the system will happily choose back to back intense events like meteors and blobs, Dwarf Fortress style. - -/client/proc/show_gm_status() - set category = "Debug" - set name = "Show GM Status" - set desc = "Shows you what the GM is thinking. If only that existed in real life..." - - if(check_rights(R_ADMIN|R_EVENT|R_DEBUG)) - SSgame_master.interact(usr) - else - to_chat(usr, span("warning", "You do not have sufficient rights to view the GM panel, sorry.")) - -/datum/controller/subsystem/game_master/proc/interact(var/client/user) - if(!user) - return - - // Using lists for string tree conservation. - var/list/dat = list("Automated Game Master Event System") - - // Makes the system turn on or off. - dat += href(src, list("toggle" = 1), "\[Toggle GM\]") - dat += " | " - - // Makes the system not care about staleness or being near round-end. - dat += href(src, list("toggle_time_restrictions" = 1), "\[Toggle Time Restrictions\]") - dat += " | " - - // Makes the system not care about how chaotic the round might be. - dat += href(src, list("toggle_chaos_throttle" = 1), "\[Toggle Chaos Throttling\]") - dat += " | " - - // Makes the system immediately choose an event, while still bound to factors like danger, weights, and department staffing. - dat += href(src, list("force_choose_event" = 1), "\[Force Event Decision\]") - dat += "
    " - - // Swaps out the current GM for a new one with different ideas on what a good event might be. - dat += href(src, list("change_gm" = 1), "\[Change GM\]") - dat += "
    " - - dat += "Current GM Type: [GM.type]
    " - dat += "State: [can_fire ? "Active": "Inactive"]
    " - dat += "Status: [pre_event_checks(TRUE) ? "Ready" : "Suppressed"]

    " - - dat += "Staleness: [staleness] " - dat += href(src, list("set_staleness" = 1), "\[Set\]") - dat += "
    " - dat += "Staleness is an estimate of how boring the round might be, and if an event should be done. It is increased passively over time, \ - and increases faster if people are AFK. It deceases when events and certain 'interesting' things happen in the round.
    " - - dat += "Danger: [danger] " - dat += href(src, list("set_danger" = 1), "\[Set\]") - dat += "
    " - dat += "Danger is an estimate of how chaotic the round has been so far. It is decreased passively over time, and is increased by having \ - certain chaotic events be selected, or chaotic things happen in the round. A sufficently high amount of danger will make the system \ - avoid using destructive events, to avoid pushing the station over the edge.
    " - - dat += "

    Player Activity:

    " - - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "" - dat += "" - - for(var/D in metric.departments) - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "" - dat += "" - - for(var/mob/M as anything in player_list) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
    CategoryActivity Percentage
    All Living Mobs[metric.assess_all_living_mobs()]%
    All Ghosts[metric.assess_all_dead_mobs()]%
    Departments" - dat += "
    [D][metric.assess_department(D)]%
    Players" - dat += "
    [M] ([M.ckey])[metric.assess_player_activity(M)]%
    " - - dat += "

    Events available:

    " - - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - for(var/datum/event2/meta/event as anything in available_events) - dat += "" - if(!event.enabled) - dat += "" - else - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
    Event NameInvolved DepartmentsChaosChaotic ThresholdWeightButtons
    [event.name][event.name][english_list(event.departments)][event.chaos][event.chaotic_threshold][event.get_weight()][href(event, list("force" = 1), "\[Force\]")] [href(event, list("toggle" = 1), "\[Toggle\]")]
    " - - dat += "

    Events active:

    " - - dat += "Current time: [world.time]" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - for(var/datum/event2/event/event as anything in SSevent_ticker.active_events) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
    Event TypeTime StartedTime to AnnounceTime to EndAnnouncedStartedEndedButtons
    [event.type][event.time_started][event.time_to_announce ? event.time_to_announce : "NULL"][event.time_to_end ? event.time_to_end : "NULL"][event.announced ? "Yes" : "No"][event.started ? "Yes" : "No"][event.ended ? "Yes" : "No"][href(event, list("abort" = 1), "\[Abort\]")]
    " - dat += "" - - dat += "

    Events completed:

    " - - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - for(var/datum/event2/event/event as anything in SSevent_ticker.finished_events) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "" - - var/datum/browser/popup = new(user, "game_master_debug", "Automated Game Master Event System", 800, 500, src) - popup.set_content(dat.Join()) - popup.open() - - -/datum/controller/subsystem/game_master/Topic(href, href_list) - if(..()) - return - - if(href_list["close"]) // Needed or the window re-opens after closing, making it last forever. - return - - if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) - message_admins("[usr] has attempted to modify the Game Master values without sufficent privilages.") - return - - if(href_list["toggle"]) - can_fire = !can_fire - message_admins("GM was [!can_fire ? "dis" : "en"]abled by [usr.key].") - - if(href_list["toggle_time_restrictions"]) - GM.ignore_time_restrictions = !GM.ignore_time_restrictions - message_admins("GM event time restrictions was [GM.ignore_time_restrictions ? "dis" : "en"]abled by [usr.key].") - - if(href_list["toggle_chaos_throttle"]) - GM.ignore_round_chaos = !GM.ignore_round_chaos - message_admins("GM event chaos restrictions was [GM.ignore_round_chaos ? "dis" : "en"]abled by [usr.key].") - - if(href_list["force_choose_event"]) - do_event_decision() - message_admins("[usr.key] forced the Game Master to choose an event immediately.") - - if(href_list["change_gm"]) - choose_game_master(usr) - - if(href_list["set_staleness"]) - var/amount = tgui_input_number(usr, "How much staleness should there be?", "Game Master") - if(!isnull(amount)) - staleness = amount - message_admins("GM staleness was set to [amount] by [usr.key].") - - if(href_list["set_danger"]) - var/amount = tgui_input_number(usr, "How much danger should there be?", "Game Master") - if(!isnull(amount)) - danger = amount - message_admins("GM danger was set to [amount] by [usr.key].") - - interact(usr) // To refresh the UI. +// This is a sort of successor to the various event systems created over the years. It is designed to be just a tad smarter than the +// previous ones, checking various things like player count, department size and composition, individual player activity, +// individual player (IC) skill, and such, in order to try to choose the best events to take in order to add spice or variety to +// the round. + +// This subsystem holds the logic that chooses events. Actual event processing is handled in a seperate subsystem. +SUBSYSTEM_DEF(game_master) + name = "Events (Game Master)" + wait = 1 MINUTE + runlevels = RUNLEVEL_GAME + + // The GM object is what actually chooses events. + // It's held in a seperate object for better encapsulation, and allows for different 'flavors' of GMs to be made, that choose events differently. + var/datum/game_master/GM = null + var/game_master_type = /datum/game_master/default + + var/list/available_events = list() // A list of meta event objects. + + var/danger = 0 // The GM's best guess at how chaotic the round is. High danger makes it hold back. + var/staleness = -20 // Determines liklihood of the GM doing something, increases over time. + + var/next_event = 0 // Minimum amount of time of nothingness until the GM can pick something again. + + var/debug_messages = FALSE // If true, debug information is written to `log_debug()`. + +/datum/controller/subsystem/game_master/Initialize() + var/list/subtypes = subtypesof(/datum/event2/meta) + for(var/T in subtypes) + var/datum/event2/meta/M = new T() + if(!M.name) + continue + available_events += M + + GM = new game_master_type() + + if(config && !config.enable_game_master) + can_fire = FALSE + + return ..() + +/datum/controller/subsystem/game_master/fire(resumed) + adjust_staleness(1) + adjust_danger(-1) + + var/global_afk = metric.assess_all_living_mobs() + global_afk = abs(global_afk - 100) + global_afk = round(global_afk / 100, 0.1) + adjust_staleness(global_afk) // Staleness increases faster if more people are less active. + + if(GM.ignore_time_restrictions || next_event < world.time) + if(prob(staleness) && pre_event_checks()) + do_event_decision() + if(REALTIMEOFDAY >= 386000 && REALTIMEOFDAY < 387000) //CHOMPEdit + to_world("Automated router restart warning! Connection will be temporarily lost in a moment. Recommended to save any unfinished posts and avoid time-sensitive situations until router is back online.") //CHOMPEdit + + +/datum/controller/subsystem/game_master/proc/do_event_decision() + log_game_master("Going to choose an event.") + var/datum/event2/meta/event_picked = GM.choose_event() + if(event_picked) + run_event(event_picked) + next_event = world.time + rand(GM.decision_cooldown_lower_bound, GM.decision_cooldown_upper_bound) + +/datum/controller/subsystem/game_master/proc/debug_gm() + can_fire = TRUE + staleness = 100 + debug_messages = TRUE + +/datum/controller/subsystem/game_master/proc/run_event(datum/event2/meta/chosen_event) + var/datum/event2/event/E = chosen_event.make_event() + + chosen_event.times_ran++ + + if(!chosen_event.reusable) + // Disable this event, so it only gets picked once. + chosen_event.enabled = FALSE + if(chosen_event.event_class) + // Disable similar events, too. + for(var/datum/event2/meta/meta as anything in available_events) + if(meta.event_class == chosen_event.event_class) + meta.enabled = FALSE + + SSevent_ticker.event_started(E) + adjust_danger(chosen_event.chaos) + adjust_staleness(-(10 + chosen_event.chaos)) // More chaotic events reduce staleness more, e.g. a 25 chaos event will reduce it by 35. + + +// Tell the game master that something dangerous happened, e.g. someone dying, station explosions. +/datum/controller/subsystem/game_master/proc/adjust_danger(amount) + amount *= GM.danger_modifier + danger = round(between(0, danger + amount, 1000), 0.1) + +// Tell the game master that things are getting boring if positive, or something interesting if negative.. +/datum/controller/subsystem/game_master/proc/adjust_staleness(amount) + amount *= GM.staleness_modifier + staleness = round( between(-20, staleness + amount, 100), 0.1) + +// These are ran before committing to an event. +// Returns TRUE if the system is allowed to procede, otherwise returns FALSE. +/datum/controller/subsystem/game_master/proc/pre_event_checks(quiet = FALSE) + if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!quiet) + log_game_master("Unable to start event: Ticker is nonexistent, or the game is not ongoing.") + return FALSE + if(GM.ignore_time_restrictions) + return TRUE + if(next_event > world.time) // Sanity. + if(!quiet) + log_game_master("Unable to start event: Time until next event is approximately [round((next_event - world.time) / (1 MINUTE))] minute(s)") + return FALSE + + // Last minute antagging is bad for humans to do, so the GM will respect the start and end of the round. + var/mills = round_duration_in_ds + var/mins = round((mills % 36000) / 600) + var/hours = round(mills / 36000) + +// if(hours < 1 && mins <= 20) // Don't do anything for the first twenty minutes of the round. +// if(!quiet) +// log_debug("Game Master unable to start event: It is too early.") +// return FALSE + if(hours >= 2 && mins >= 40) // Don't do anything in the last twenty minutes of the round, as well. + if(!quiet) + log_game_master("Unable to start event: It is too late.") + return FALSE + return TRUE + +/datum/controller/subsystem/game_master/proc/choose_game_master(mob/user) + var/list/subtypes = subtypesof(/datum/game_master) + var/new_gm_path = tgui_input_list(user, "What kind of Game Master do you want?", "New Game Master", subtypes) + if(new_gm_path) + log_and_message_admins("has swapped the current GM ([GM.type]) for a new GM ([new_gm_path]).") + GM = new new_gm_path(src) + +/datum/controller/subsystem/game_master/proc/log_game_master(message) + if(debug_messages) + log_debug("GAME MASTER: [message]") + + +// This object makes the actual decisions. +/datum/game_master + // Multiplier for how much 'danger' is accumulated. Higer generally makes it possible for more dangerous events to be picked. + var/danger_modifier = 1.0 + + // Ditto. Higher numbers generally result in more events occuring in a round. + var/staleness_modifier = 1.0 + + var/decision_cooldown_lower_bound = 5 MINUTES // Lower bound for how long to wait until -the potential- for another event being decided. + var/decision_cooldown_upper_bound = 20 MINUTES // Same, but upper bound. + + var/ignore_time_restrictions = FALSE // Useful for debugging without needing to wait 20 minutes each time. + var/ignore_round_chaos = FALSE // If true, the system will happily choose back to back intense events like meteors and blobs, Dwarf Fortress style. + +/client/proc/show_gm_status() + set category = "Debug" + set name = "Show GM Status" + set desc = "Shows you what the GM is thinking. If only that existed in real life..." + + if(check_rights(R_ADMIN|R_EVENT|R_DEBUG)) + SSgame_master.interact(usr) + else + to_chat(usr, span("warning", "You do not have sufficient rights to view the GM panel, sorry.")) + +/datum/controller/subsystem/game_master/proc/interact(var/client/user) + if(!user) + return + + // Using lists for string tree conservation. + var/list/dat = list("Automated Game Master Event System") + + // Makes the system turn on or off. + dat += href(src, list("toggle" = 1), "\[Toggle GM\]") + dat += " | " + + // Makes the system not care about staleness or being near round-end. + dat += href(src, list("toggle_time_restrictions" = 1), "\[Toggle Time Restrictions\]") + dat += " | " + + // Makes the system not care about how chaotic the round might be. + dat += href(src, list("toggle_chaos_throttle" = 1), "\[Toggle Chaos Throttling\]") + dat += " | " + + // Makes the system immediately choose an event, while still bound to factors like danger, weights, and department staffing. + dat += href(src, list("force_choose_event" = 1), "\[Force Event Decision\]") + dat += "
    " + + // Swaps out the current GM for a new one with different ideas on what a good event might be. + dat += href(src, list("change_gm" = 1), "\[Change GM\]") + dat += "
    " + + dat += "Current GM Type: [GM.type]
    " + dat += "State: [can_fire ? "Active": "Inactive"]
    " + dat += "Status: [pre_event_checks(TRUE) ? "Ready" : "Suppressed"]

    " + + dat += "Staleness: [staleness] " + dat += href(src, list("set_staleness" = 1), "\[Set\]") + dat += "
    " + dat += "Staleness is an estimate of how boring the round might be, and if an event should be done. It is increased passively over time, \ + and increases faster if people are AFK. It deceases when events and certain 'interesting' things happen in the round.
    " + + dat += "Danger: [danger] " + dat += href(src, list("set_danger" = 1), "\[Set\]") + dat += "
    " + dat += "Danger is an estimate of how chaotic the round has been so far. It is decreased passively over time, and is increased by having \ + certain chaotic events be selected, or chaotic things happen in the round. A sufficently high amount of danger will make the system \ + avoid using destructive events, to avoid pushing the station over the edge.
    " + + dat += "

    Player Activity:

    " + + dat += "
    Event TypeStart TimeFinish Time
    [event.type][event.time_started][event.time_finished]
    " + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + dat += "" + + for(var/D in metric.departments) + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + dat += "" + + for(var/mob/M as anything in player_list) + dat += "" + dat += "" + dat += "" + dat += "" + dat += "
    CategoryActivity Percentage
    All Living Mobs[metric.assess_all_living_mobs()]%
    All Ghosts[metric.assess_all_dead_mobs()]%
    Departments" + dat += "
    [D][metric.assess_department(D)]%
    Players" + dat += "
    [M] ([M.ckey])[metric.assess_player_activity(M)]%
    " + + dat += "

    Events available:

    " + + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + for(var/datum/event2/meta/event as anything in available_events) + dat += "" + if(!event.enabled) + dat += "" + else + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "
    Event NameInvolved DepartmentsChaosChaotic ThresholdWeightButtons
    [event.name][event.name][english_list(event.departments)][event.chaos][event.chaotic_threshold][event.get_weight()][href(event, list("force" = 1), "\[Force\]")] [href(event, list("toggle" = 1), "\[Toggle\]")]
    " + + dat += "

    Events active:

    " + + dat += "Current time: [world.time]" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + for(var/datum/event2/event/event as anything in SSevent_ticker.active_events) + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "
    Event TypeTime StartedTime to AnnounceTime to EndAnnouncedStartedEndedButtons
    [event.type][event.time_started][event.time_to_announce ? event.time_to_announce : "NULL"][event.time_to_end ? event.time_to_end : "NULL"][event.announced ? "Yes" : "No"][event.started ? "Yes" : "No"][event.ended ? "Yes" : "No"][href(event, list("abort" = 1), "\[Abort\]")]
    " + dat += "" + + dat += "

    Events completed:

    " + + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + for(var/datum/event2/event/event as anything in SSevent_ticker.finished_events) + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + + var/datum/browser/popup = new(user, "game_master_debug", "Automated Game Master Event System", 800, 500, src) + popup.set_content(dat.Join()) + popup.open() + + +/datum/controller/subsystem/game_master/Topic(href, href_list) + if(..()) + return + + if(href_list["close"]) // Needed or the window re-opens after closing, making it last forever. + return + + if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) + message_admins("[usr] has attempted to modify the Game Master values without sufficent privilages.") + return + + if(href_list["toggle"]) + can_fire = !can_fire + message_admins("GM was [!can_fire ? "dis" : "en"]abled by [usr.key].") + + if(href_list["toggle_time_restrictions"]) + GM.ignore_time_restrictions = !GM.ignore_time_restrictions + message_admins("GM event time restrictions was [GM.ignore_time_restrictions ? "dis" : "en"]abled by [usr.key].") + + if(href_list["toggle_chaos_throttle"]) + GM.ignore_round_chaos = !GM.ignore_round_chaos + message_admins("GM event chaos restrictions was [GM.ignore_round_chaos ? "dis" : "en"]abled by [usr.key].") + + if(href_list["force_choose_event"]) + do_event_decision() + message_admins("[usr.key] forced the Game Master to choose an event immediately.") + + if(href_list["change_gm"]) + choose_game_master(usr) + + if(href_list["set_staleness"]) + var/amount = tgui_input_number(usr, "How much staleness should there be?", "Game Master") + if(!isnull(amount)) + staleness = amount + message_admins("GM staleness was set to [amount] by [usr.key].") + + if(href_list["set_danger"]) + var/amount = tgui_input_number(usr, "How much danger should there be?", "Game Master") + if(!isnull(amount)) + danger = amount + message_admins("GM danger was set to [amount] by [usr.key].") + + interact(usr) // To refresh the UI. diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index 30878ea6ac..c137582c7c 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -1,143 +1,143 @@ -SUBSYSTEM_DEF(job) - name = "Job" - init_order = INIT_ORDER_JOB - flags = SS_NO_FIRE - - var/list/occupations = list() //List of all jobs - var/list/datum/job/name_occupations = list() //Dict of all jobs, keys are titles - var/list/type_occupations = list() //Dict of all jobs, keys are types - - var/list/department_datums = list() - var/debug_messages = FALSE - - -/datum/controller/subsystem/job/Initialize(timeofday) - if(!department_datums.len) - setup_departments() - if(!occupations.len) - setup_occupations() - return ..() - -/datum/controller/subsystem/job/proc/setup_occupations(faction = "Station") - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) - if(!all_jobs.len) - to_chat(world, span("warning", "Error setting up jobs, no job datums found")) - return FALSE - - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) - continue - if(job.faction != faction) - continue - occupations += job - name_occupations[job.title] = job - type_occupations[J] = job - if(LAZYLEN(job.departments)) - add_to_departments(job) - - sortTim(occupations, GLOBAL_PROC_REF(cmp_job_datums)) - for(var/D in department_datums) - var/datum/department/dept = department_datums[D] - sortTim(dept.jobs, GLOBAL_PROC_REF(cmp_job_datums), TRUE) - sortTim(dept.primary_jobs, GLOBAL_PROC_REF(cmp_job_datums), TRUE) - - return TRUE - -/datum/controller/subsystem/job/proc/add_to_departments(datum/job/J) - // Adds to the regular job lists in the departments, which allow multiple departments for a job. - for(var/D in J.departments) - var/datum/department/dept = LAZYACCESS(department_datums, D) - if(!istype(dept)) - job_debug_message("Job '[J.title]' is defined as being inside department '[D]', but it does not exist.") - continue - dept.jobs[J.title] = J - - // Now for the 'primary' department for a job, which is defined as being the first department in the list for a job. - // This results in no duplicates, which can be useful in some situations. - if(LAZYLEN(J.departments)) - var/primary_department = J.departments[1] - var/datum/department/dept = LAZYACCESS(department_datums, primary_department) - if(!istype(dept)) - job_debug_message("Job '[J.title]' has their primary department be '[primary_department]', but it does not exist.") - else - dept.primary_jobs[J.title] = J - -/datum/controller/subsystem/job/proc/setup_departments() - for(var/t in subtypesof(/datum/department)) - var/datum/department/D = new t() - department_datums[D.name] = D - - sortTim(department_datums, GLOBAL_PROC_REF(cmp_department_datums), TRUE) - -/datum/controller/subsystem/job/proc/get_all_department_datums() - var/list/dept_datums = list() - for(var/D in department_datums) - dept_datums += department_datums[D] - return dept_datums - -/datum/controller/subsystem/job/proc/get_job(rank) - if(!occupations.len) - setup_occupations() - return name_occupations[rank] - -/datum/controller/subsystem/job/proc/get_job_type(jobtype) - if(!occupations.len) - setup_occupations() - return type_occupations[jobtype] - -// Determines if a job title is inside of a specific department. -// Useful to replace the old `if(job_title in command_positions)` code. -/datum/controller/subsystem/job/proc/is_job_in_department(rank, target_department_name) - var/datum/department/D = LAZYACCESS(department_datums, target_department_name) - if(istype(D)) - return LAZYFIND(D.jobs, rank) ? TRUE : FALSE - return FALSE - -// Returns a list of all job names in a specific department. -/datum/controller/subsystem/job/proc/get_job_titles_in_department(target_department_name) - var/datum/department/D = LAZYACCESS(department_datums, target_department_name) - if(istype(D)) - var/list/job_titles = list() - for(var/J in D.jobs) - job_titles += J - return job_titles - - job_debug_message("Was asked to get job titles for a non-existant department '[target_department_name]'.") - return list() - -// Returns a reference to the primary department datum that a job is in. -// Can receive job datum refs, typepaths, or job title strings. -/datum/controller/subsystem/job/proc/get_primary_department_of_job(datum/job/J) - if(!istype(J, /datum/job)) - if(ispath(J)) - J = get_job_type(J) - else if(istext(J)) - J = get_job(J) - - if(!istype(J)) - job_debug_message("Was asked to get department for job '[J]', but input could not be resolved into a job datum.") - return - - if(!LAZYLEN(J.departments)) - return - - var/primary_department = J.departments[1] - var/datum/department/dept = LAZYACCESS(department_datums, primary_department) - if(!istype(dept)) - job_debug_message("Job '[J.title]' has their primary department be '[primary_department]', but it does not exist.") - return - - return department_datums[primary_department] - -/datum/controller/subsystem/job/proc/get_ping_role(var/role) - var/datum/job/J = get_job(role) - if(J.requestable) - return get_primary_department_of_job(J) - -// Someday it might be good to port code/game/jobs/job_controller.dm to here and clean it up. - -/datum/controller/subsystem/job/proc/job_debug_message(message) - if(debug_messages) - log_debug("JOB DEBUG: [message]") +SUBSYSTEM_DEF(job) + name = "Job" + init_order = INIT_ORDER_JOB + flags = SS_NO_FIRE + + var/list/occupations = list() //List of all jobs + var/list/datum/job/name_occupations = list() //Dict of all jobs, keys are titles + var/list/type_occupations = list() //Dict of all jobs, keys are types + + var/list/department_datums = list() + var/debug_messages = FALSE + + +/datum/controller/subsystem/job/Initialize(timeofday) + if(!department_datums.len) + setup_departments() + if(!occupations.len) + setup_occupations() + return ..() + +/datum/controller/subsystem/job/proc/setup_occupations(faction = "Station") + occupations = list() + var/list/all_jobs = subtypesof(/datum/job) + if(!all_jobs.len) + to_chat(world, span("warning", "Error setting up jobs, no job datums found")) + return FALSE + + for(var/J in all_jobs) + var/datum/job/job = new J() + if(!job) + continue + if(job.faction != faction) + continue + occupations += job + name_occupations[job.title] = job + type_occupations[J] = job + if(LAZYLEN(job.departments)) + add_to_departments(job) + + sortTim(occupations, GLOBAL_PROC_REF(cmp_job_datums)) + for(var/D in department_datums) + var/datum/department/dept = department_datums[D] + sortTim(dept.jobs, GLOBAL_PROC_REF(cmp_job_datums), TRUE) + sortTim(dept.primary_jobs, GLOBAL_PROC_REF(cmp_job_datums), TRUE) + + return TRUE + +/datum/controller/subsystem/job/proc/add_to_departments(datum/job/J) + // Adds to the regular job lists in the departments, which allow multiple departments for a job. + for(var/D in J.departments) + var/datum/department/dept = LAZYACCESS(department_datums, D) + if(!istype(dept)) + job_debug_message("Job '[J.title]' is defined as being inside department '[D]', but it does not exist.") + continue + dept.jobs[J.title] = J + + // Now for the 'primary' department for a job, which is defined as being the first department in the list for a job. + // This results in no duplicates, which can be useful in some situations. + if(LAZYLEN(J.departments)) + var/primary_department = J.departments[1] + var/datum/department/dept = LAZYACCESS(department_datums, primary_department) + if(!istype(dept)) + job_debug_message("Job '[J.title]' has their primary department be '[primary_department]', but it does not exist.") + else + dept.primary_jobs[J.title] = J + +/datum/controller/subsystem/job/proc/setup_departments() + for(var/t in subtypesof(/datum/department)) + var/datum/department/D = new t() + department_datums[D.name] = D + + sortTim(department_datums, GLOBAL_PROC_REF(cmp_department_datums), TRUE) + +/datum/controller/subsystem/job/proc/get_all_department_datums() + var/list/dept_datums = list() + for(var/D in department_datums) + dept_datums += department_datums[D] + return dept_datums + +/datum/controller/subsystem/job/proc/get_job(rank) + if(!occupations.len) + setup_occupations() + return name_occupations[rank] + +/datum/controller/subsystem/job/proc/get_job_type(jobtype) + if(!occupations.len) + setup_occupations() + return type_occupations[jobtype] + +// Determines if a job title is inside of a specific department. +// Useful to replace the old `if(job_title in command_positions)` code. +/datum/controller/subsystem/job/proc/is_job_in_department(rank, target_department_name) + var/datum/department/D = LAZYACCESS(department_datums, target_department_name) + if(istype(D)) + return LAZYFIND(D.jobs, rank) ? TRUE : FALSE + return FALSE + +// Returns a list of all job names in a specific department. +/datum/controller/subsystem/job/proc/get_job_titles_in_department(target_department_name) + var/datum/department/D = LAZYACCESS(department_datums, target_department_name) + if(istype(D)) + var/list/job_titles = list() + for(var/J in D.jobs) + job_titles += J + return job_titles + + job_debug_message("Was asked to get job titles for a non-existant department '[target_department_name]'.") + return list() + +// Returns a reference to the primary department datum that a job is in. +// Can receive job datum refs, typepaths, or job title strings. +/datum/controller/subsystem/job/proc/get_primary_department_of_job(datum/job/J) + if(!istype(J, /datum/job)) + if(ispath(J)) + J = get_job_type(J) + else if(istext(J)) + J = get_job(J) + + if(!istype(J)) + job_debug_message("Was asked to get department for job '[J]', but input could not be resolved into a job datum.") + return + + if(!LAZYLEN(J.departments)) + return + + var/primary_department = J.departments[1] + var/datum/department/dept = LAZYACCESS(department_datums, primary_department) + if(!istype(dept)) + job_debug_message("Job '[J.title]' has their primary department be '[primary_department]', but it does not exist.") + return + + return department_datums[primary_department] + +/datum/controller/subsystem/job/proc/get_ping_role(var/role) + var/datum/job/J = get_job(role) + if(J.requestable) + return get_primary_department_of_job(J) + +// Someday it might be good to port code/game/jobs/job_controller.dm to here and clean it up. + +/datum/controller/subsystem/job/proc/job_debug_message(message) + if(debug_messages) + log_debug("JOB DEBUG: [message]") diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm index 00e3153b3e..e496a97f18 100644 --- a/code/controllers/subsystems/mapping.dm +++ b/code/controllers/subsystems/mapping.dm @@ -1,175 +1,175 @@ -// Handles map-related tasks, mostly here to ensure it does so after the MC initializes. -SUBSYSTEM_DEF(mapping) - name = "Mapping" - init_order = INIT_ORDER_MAPPING - flags = SS_NO_FIRE - - var/list/map_templates = list() - var/dmm_suite/maploader = null - var/obj/effect/landmark/engine_loader/engine_loader - var/list/shelter_templates = list() - -/datum/controller/subsystem/mapping/Recover() - flags |= SS_NO_INIT // Make extra sure we don't initialize twice. - shelter_templates = SSmapping.shelter_templates - -/datum/controller/subsystem/mapping/Initialize(timeofday) - if(subsystem_initialized) - return - world.max_z_changed() // This is to set up the player z-level list, maxz hasn't actually changed (probably) - maploader = new() - load_map_templates() - - if(config.generate_map) - // Map-gen is still very specific to the map, however putting it here should ensure it loads in the correct order. - using_map.perform_map_generation() - - loadEngine() - preloadShelterTemplates() // VOREStation EDIT: Re-enable Shelter Capsules - // Mining generation probably should be here too - // TODO - Other stuff related to maps and areas could be moved here too. Look at /tg - // Lateload Code related to Expedition areas. - if(using_map) // VOREStation Edit: Re-enable this. - loadLateMaps() - ..() - -/datum/controller/subsystem/mapping/proc/load_map_templates() - for(var/datum/map_template/template as anything in subtypesof(/datum/map_template)) - if(!(initial(template.mappath))) // If it's missing the actual path its probably a base type or being used for inheritence. - continue - template = new template() - map_templates[template.name] = template - return TRUE - -/datum/controller/subsystem/mapping/proc/loadEngine() - if(!engine_loader) - return // Seems this map doesn't need an engine loaded. - - var/turf/T = get_turf(engine_loader) - if(!isturf(T)) - to_world_log("[log_info_line(engine_loader)] not on a turf! Cannot place engine template.") - return - - // Choose an engine type - var/datum/map_template/engine/chosen_type = null - if (LAZYLEN(config.engine_map)) - var/chosen_name = pick(config.engine_map) - chosen_type = map_templates[chosen_name] - if(!istype(chosen_type)) - error("Configured engine map [chosen_name] is not a valid engine map name!") - if(!istype(chosen_type)) - var/list/engine_types = list() - for(var/map in map_templates) - var/datum/map_template/engine/MT = map_templates[map] - if(istype(MT)) - engine_types += MT - chosen_type = pick(engine_types) - to_world_log("Chose Engine Map: [chosen_type.name]") - admin_notice("Chose Engine Map: [chosen_type.name]", R_DEBUG) - - // Annihilate movable atoms - engine_loader.annihilate_bounds() - //CHECK_TICK //Don't let anything else happen for now - // Actually load it - chosen_type.load(T) - -// VOREStation Edit Start: Enable This -/datum/controller/subsystem/mapping/proc/loadLateMaps() - var/list/deffo_load = using_map.lateload_z_levels - var/list/maybe_load = using_map.lateload_gateway - var/list/also_load = using_map.lateload_overmap - var/list/redgate_load = using_map.lateload_redgate - - for(var/list/maplist in deffo_load) - if(!islist(maplist)) - error("Lateload Z level [maplist] is not a list! Must be in a list!") - continue - for(var/mapname in maplist) - var/datum/map_template/MT = map_templates[mapname] - if(!istype(MT)) - error("Lateload Z level \"[mapname]\" is not a valid map!") - continue - admin_notice("Lateload: [MT]", R_DEBUG) - MT.load_new_z(centered = FALSE) - CHECK_TICK - - if(LAZYLEN(maybe_load)) - var/picklist = pick(maybe_load) - - if(!picklist) //No lateload maps at all - return - - if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission - error("Randompick Z level [picklist] is not a list! Must be in a list!") - return - - for(var/map in picklist) - if(islist(map)) - // TRIPLE NEST. In this situation we pick one at random from the choices in the list. - //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' - map = pick(map) - var/datum/map_template/MT = map_templates[map] - if(!istype(MT)) - error("Randompick Z level \"[map]\" is not a valid map!") - else - admin_notice("Gateway: [MT]", R_DEBUG) - MT.load_new_z(centered = FALSE) - - if(LAZYLEN(also_load)) //Just copied from gateway picking, this is so we can have a kind of OM map version of the same concept. - var/picklist = pick(also_load) - - if(!picklist) //No lateload maps at all - return - - if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission - error("Randompick Z level [picklist] is not a list! Must be in a list!") - return - - for(var/map in picklist) - if(islist(map)) - // TRIPLE NEST. In this situation we pick one at random from the choices in the list. - //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' - map = pick(map) - var/datum/map_template/MT = map_templates[map] - if(!istype(MT)) - error("Randompick Z level \"[map]\" is not a valid map!") - else - admin_notice("OM Adventure: [MT]", R_DEBUG) - MT.load_new_z(centered = FALSE) - - if(LAZYLEN(redgate_load)) - var/picklist = pick(redgate_load) - - if(!picklist) //No lateload maps at all - return - - if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission - error("Randompick Z level [picklist] is not a list! Must be in a list!") - return - - for(var/map in picklist) - if(islist(map)) - // TRIPLE NEST. In this situation we pick one at random from the choices in the list. - //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' - map = pick(map) - var/datum/map_template/MT = map_templates[map] - if(!istype(MT)) - error("Randompick Z level \"[map]\" is not a valid map!") - else - admin_notice("Redgate: [MT]", R_DEBUG) - MT.load_new_z(centered = FALSE) - - -/datum/controller/subsystem/mapping/proc/preloadShelterTemplates() - for(var/datum/map_template/shelter/shelter_type as anything in subtypesof(/datum/map_template/shelter)) - if(!(initial(shelter_type.mappath))) - continue - var/datum/map_template/shelter/S = new shelter_type() - - shelter_templates[S.shelter_id] = S -// VOREStation Edit End: Re-enable this - -/datum/controller/subsystem/mapping/stat_entry(msg) - if (!Debug2) - return // Only show up in stat panel if debugging is enabled. - . = ..() +// Handles map-related tasks, mostly here to ensure it does so after the MC initializes. +SUBSYSTEM_DEF(mapping) + name = "Mapping" + init_order = INIT_ORDER_MAPPING + flags = SS_NO_FIRE + + var/list/map_templates = list() + var/dmm_suite/maploader = null + var/obj/effect/landmark/engine_loader/engine_loader + var/list/shelter_templates = list() + +/datum/controller/subsystem/mapping/Recover() + flags |= SS_NO_INIT // Make extra sure we don't initialize twice. + shelter_templates = SSmapping.shelter_templates + +/datum/controller/subsystem/mapping/Initialize(timeofday) + if(subsystem_initialized) + return + world.max_z_changed() // This is to set up the player z-level list, maxz hasn't actually changed (probably) + maploader = new() + load_map_templates() + + if(config.generate_map) + // Map-gen is still very specific to the map, however putting it here should ensure it loads in the correct order. + using_map.perform_map_generation() + + loadEngine() + preloadShelterTemplates() // VOREStation EDIT: Re-enable Shelter Capsules + // Mining generation probably should be here too + // TODO - Other stuff related to maps and areas could be moved here too. Look at /tg + // Lateload Code related to Expedition areas. + if(using_map) // VOREStation Edit: Re-enable this. + loadLateMaps() + ..() + +/datum/controller/subsystem/mapping/proc/load_map_templates() + for(var/datum/map_template/template as anything in subtypesof(/datum/map_template)) + if(!(initial(template.mappath))) // If it's missing the actual path its probably a base type or being used for inheritence. + continue + template = new template() + map_templates[template.name] = template + return TRUE + +/datum/controller/subsystem/mapping/proc/loadEngine() + if(!engine_loader) + return // Seems this map doesn't need an engine loaded. + + var/turf/T = get_turf(engine_loader) + if(!isturf(T)) + to_world_log("[log_info_line(engine_loader)] not on a turf! Cannot place engine template.") + return + + // Choose an engine type + var/datum/map_template/engine/chosen_type = null + if (LAZYLEN(config.engine_map)) + var/chosen_name = pick(config.engine_map) + chosen_type = map_templates[chosen_name] + if(!istype(chosen_type)) + error("Configured engine map [chosen_name] is not a valid engine map name!") + if(!istype(chosen_type)) + var/list/engine_types = list() + for(var/map in map_templates) + var/datum/map_template/engine/MT = map_templates[map] + if(istype(MT)) + engine_types += MT + chosen_type = pick(engine_types) + to_world_log("Chose Engine Map: [chosen_type.name]") + admin_notice("Chose Engine Map: [chosen_type.name]", R_DEBUG) + + // Annihilate movable atoms + engine_loader.annihilate_bounds() + //CHECK_TICK //Don't let anything else happen for now + // Actually load it + chosen_type.load(T) + +// VOREStation Edit Start: Enable This +/datum/controller/subsystem/mapping/proc/loadLateMaps() + var/list/deffo_load = using_map.lateload_z_levels + var/list/maybe_load = using_map.lateload_gateway + var/list/also_load = using_map.lateload_overmap + var/list/redgate_load = using_map.lateload_redgate + + for(var/list/maplist in deffo_load) + if(!islist(maplist)) + error("Lateload Z level [maplist] is not a list! Must be in a list!") + continue + for(var/mapname in maplist) + var/datum/map_template/MT = map_templates[mapname] + if(!istype(MT)) + error("Lateload Z level \"[mapname]\" is not a valid map!") + continue + admin_notice("Lateload: [MT]", R_DEBUG) + MT.load_new_z(centered = FALSE) + CHECK_TICK + + if(LAZYLEN(maybe_load)) + var/picklist = pick(maybe_load) + + if(!picklist) //No lateload maps at all + return + + if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission + error("Randompick Z level [picklist] is not a list! Must be in a list!") + return + + for(var/map in picklist) + if(islist(map)) + // TRIPLE NEST. In this situation we pick one at random from the choices in the list. + //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' + map = pick(map) + var/datum/map_template/MT = map_templates[map] + if(!istype(MT)) + error("Randompick Z level \"[map]\" is not a valid map!") + else + admin_notice("Gateway: [MT]", R_DEBUG) + MT.load_new_z(centered = FALSE) + + if(LAZYLEN(also_load)) //Just copied from gateway picking, this is so we can have a kind of OM map version of the same concept. + var/picklist = pick(also_load) + + if(!picklist) //No lateload maps at all + return + + if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission + error("Randompick Z level [picklist] is not a list! Must be in a list!") + return + + for(var/map in picklist) + if(islist(map)) + // TRIPLE NEST. In this situation we pick one at random from the choices in the list. + //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' + map = pick(map) + var/datum/map_template/MT = map_templates[map] + if(!istype(MT)) + error("Randompick Z level \"[map]\" is not a valid map!") + else + admin_notice("OM Adventure: [MT]", R_DEBUG) + MT.load_new_z(centered = FALSE) + + if(LAZYLEN(redgate_load)) + var/picklist = pick(redgate_load) + + if(!picklist) //No lateload maps at all + return + + if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission + error("Randompick Z level [picklist] is not a list! Must be in a list!") + return + + for(var/map in picklist) + if(islist(map)) + // TRIPLE NEST. In this situation we pick one at random from the choices in the list. + //This allows a sort of a1,a2,a3,b1,b2,b3,c1,c2,c3 setup where it picks one 'a', one 'b', one 'c' + map = pick(map) + var/datum/map_template/MT = map_templates[map] + if(!istype(MT)) + error("Randompick Z level \"[map]\" is not a valid map!") + else + admin_notice("Redgate: [MT]", R_DEBUG) + MT.load_new_z(centered = FALSE) + + +/datum/controller/subsystem/mapping/proc/preloadShelterTemplates() + for(var/datum/map_template/shelter/shelter_type as anything in subtypesof(/datum/map_template/shelter)) + if(!(initial(shelter_type.mappath))) + continue + var/datum/map_template/shelter/S = new shelter_type() + + shelter_templates[S.shelter_id] = S +// VOREStation Edit End: Re-enable this + +/datum/controller/subsystem/mapping/stat_entry(msg) + if (!Debug2) + return // Only show up in stat panel if debugging is enabled. + . = ..() diff --git a/code/controllers/subsystems/ping.dm b/code/controllers/subsystems/ping.dm index 00e3effe02..7b41519737 100644 --- a/code/controllers/subsystems/ping.dm +++ b/code/controllers/subsystems/ping.dm @@ -1,44 +1,44 @@ -/*! - * Copyright (c) 2022 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -SUBSYSTEM_DEF(ping) - name = "Ping" - priority = FIRE_PRIORITY_PING - // init_stage = INITSTAGE_EARLY - wait = 4 SECONDS - flags = SS_NO_INIT - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - var/list/currentrun = list() - -/datum/controller/subsystem/ping/stat_entry() - ..("P:[GLOB.clients.len]") - -/datum/controller/subsystem/ping/fire(resumed = FALSE) - // Prepare the new batch of clients - if (!resumed) - src.currentrun = GLOB.clients.Copy() - - // De-reference the list for sanic speeds - var/list/currentrun = src.currentrun - - while (currentrun.len) - var/client/client = currentrun[currentrun.len] - currentrun.len-- - - if(!client.is_preference_enabled(/datum/client_preference/vchat_enable)) - winset(client, "output", "on-show=&is-disabled=0&is-visible=1") - winset(client, "browseroutput", "is-disabled=1;is-visible=0") - client.tgui_panel.oldchat = TRUE - - if (client?.tgui_panel?.is_ready()) - // Send a soft ping - client.tgui_panel.window.send_message("ping/soft", list( - // Slightly less than the subsystem timer (somewhat arbitrary) - // to prevent incoming pings from resetting the afk state - "afk" = client.is_afk(3.5 SECONDS), - )) - - if (MC_TICK_CHECK) - return +/*! + * Copyright (c) 2022 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(ping) + name = "Ping" + priority = FIRE_PRIORITY_PING + // init_stage = INITSTAGE_EARLY + wait = 4 SECONDS + flags = SS_NO_INIT + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + var/list/currentrun = list() + +/datum/controller/subsystem/ping/stat_entry() + ..("P:[GLOB.clients.len]") + +/datum/controller/subsystem/ping/fire(resumed = FALSE) + // Prepare the new batch of clients + if (!resumed) + src.currentrun = GLOB.clients.Copy() + + // De-reference the list for sanic speeds + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/client/client = currentrun[currentrun.len] + currentrun.len-- + + if(!client.is_preference_enabled(/datum/client_preference/vchat_enable)) + winset(client, "output", "on-show=&is-disabled=0&is-visible=1") + winset(client, "browseroutput", "is-disabled=1;is-visible=0") + client.tgui_panel.oldchat = TRUE + + if (client?.tgui_panel?.is_ready()) + // Send a soft ping + client.tgui_panel.window.send_message("ping/soft", list( + // Slightly less than the subsystem timer (somewhat arbitrary) + // to prevent incoming pings from resetting the afk state + "afk" = client.is_afk(3.5 SECONDS), + )) + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/sqlite.dm b/code/controllers/subsystems/sqlite.dm index 3d18ec4a7a..20a5a59475 100644 --- a/code/controllers/subsystems/sqlite.dm +++ b/code/controllers/subsystems/sqlite.dm @@ -1,187 +1,187 @@ -// This holds all the code needed to manage and use a SQLite database. -// It is merely a file sitting inside the data directory, as opposed to a full fledged DB service, -// however this makes it a lot easier to test, and it is natively supported by BYOND. -SUBSYSTEM_DEF(sqlite) - name = "SQLite" - init_order = INIT_ORDER_SQLITE - flags = SS_NO_FIRE - var/database/sqlite_db = null - -/datum/controller/subsystem/sqlite/Initialize(timeofday) - connect() - if(sqlite_db) - init_schema(sqlite_db) - return ..() - -/datum/controller/subsystem/sqlite/proc/connect() - if(!config.sqlite_enabled) - return - - if(!sqlite_db) - sqlite_db = new("data/sqlite/sqlite.db") // The path has to be hardcoded or BYOND silently fails. - - - if(!sqlite_db) - to_world_log("Failed to load or create a SQLite database.") - log_debug("ERROR: SQLite database is active in config but failed to load.") - else - to_world_log("Sqlite database connected.") - -// Makes the tables, if they do not already exist in the sqlite file. -/datum/controller/subsystem/sqlite/proc/init_schema(database/sqlite_object) - // Feedback table. - // Note that this is for direct feedback from players using the in-game feedback system and NOT for stat tracking. - // Player ckeys are not stored in this table as a unique key due to a config option to hash the keys to encourage more honest feedback. - /* - * id - Primary unique key to ID a specific piece of feedback. - NOT used to id people submitting feedback. - * author - The person who submitted it. Will be the ckey, or a hash of the ckey, - if both the config supports it, and the user wants it. - * topic - A specific category to organize feedback under. Options are defined in the config file. - * content - What the author decided to write to the staff. Limited to MAX_FEEDBACK_LENGTH. - * datetime - When the author submitted their feedback, acts as a timestamp. - */ - var/database/query/init_schema = new( - {" - CREATE TABLE IF NOT EXISTS [SQLITE_TABLE_FEEDBACK] - ( - `[SQLITE_FEEDBACK_COLUMN_ID]` INTEGER NOT NULL UNIQUE, - `[SQLITE_FEEDBACK_COLUMN_AUTHOR]` TEXT NOT NULL, - `[SQLITE_FEEDBACK_COLUMN_TOPIC]` TEXT NOT NULL, - `[SQLITE_FEEDBACK_COLUMN_CONTENT]` TEXT NOT NULL, - `[SQLITE_FEEDBACK_COLUMN_DATETIME]` TEXT NOT NULL, - PRIMARY KEY(`[SQLITE_FEEDBACK_COLUMN_ID]`) - ); - "} - ) - init_schema.Execute(sqlite_object) - sqlite_check_for_errors(init_schema, "Feedback table creation") - - // Add more schemas below this if the SQLite DB gets expanded for things like persistant news, polls, bans, deaths, etc. - -// General error checking for SQLite. -// Returns true if something went wrong. Also writes a log. -// The desc parameter should be unique for each call, to make it easier to track down where the error occured. -/datum/controller/subsystem/sqlite/proc/sqlite_check_for_errors(var/database/query/query_used, var/desc) - if(query_used && query_used.ErrorMsg()) - log_debug("SQLite Error: [desc] : [query_used.ErrorMsg()]") - return TRUE - return FALSE - - -/************ - * Feedback * - ************/ - -// Inserts data into the feedback table in a painless manner. -// Returns TRUE if no issues happened, FALSE otherwise. -/datum/controller/subsystem/sqlite/proc/insert_feedback(author, topic, content, database/sqlite_object) - if(!author || !topic || !content) - CRASH("One or more parameters was invalid.") - - // Sanitize everything to avoid sneaky stuff. - var/sqlite_author = sql_sanitize_text(ckey(lowertext(author))) - var/sqlite_content = sql_sanitize_text(content) - var/sqlite_topic = sql_sanitize_text(topic) - - var/database/query/query = new( - "INSERT INTO [SQLITE_TABLE_FEEDBACK] (\ - [SQLITE_FEEDBACK_COLUMN_AUTHOR], \ - [SQLITE_FEEDBACK_COLUMN_TOPIC], \ - [SQLITE_FEEDBACK_COLUMN_CONTENT], \ - [SQLITE_FEEDBACK_COLUMN_DATETIME]) \ - \ - VALUES (\ - ?,\ - ?,\ - ?,\ - datetime('now'))", - sqlite_author, - sqlite_topic, - sqlite_content - ) - query.Execute(sqlite_object) - return !sqlite_check_for_errors(query, "Insert Feedback") - -/datum/controller/subsystem/sqlite/proc/can_submit_feedback(client/C) - if(!config.sqlite_enabled) - return FALSE - if(config.sqlite_feedback_min_age && !is_old_enough(C)) - return FALSE - if(config.sqlite_feedback_cooldown > 0 && get_feedback_cooldown(C.key, config.sqlite_feedback_cooldown, sqlite_db) > 0) - return FALSE - return TRUE - -// Returns TRUE if the player is 'old' enough, according to the config. -/datum/controller/subsystem/sqlite/proc/is_old_enough(client/C) - if(get_player_age(C.key) < config.sqlite_feedback_min_age) - return FALSE - return TRUE - - -// Returns how many days someone has to wait, to submit more feedback, or 0 if they can do so right now. -/datum/controller/subsystem/sqlite/proc/get_feedback_cooldown(player_ckey, cooldown, database/sqlite_object) - player_ckey = sql_sanitize_text(ckey(lowertext(player_ckey))) - var/potential_hashed_ckey = sql_sanitize_text(md5(player_ckey + SSsqlite.get_feedback_pepper())) - - // First query is to get the most recent time the player has submitted feedback. - var/database/query/query = new({" - SELECT [SQLITE_FEEDBACK_COLUMN_DATETIME] - FROM [SQLITE_TABLE_FEEDBACK] - WHERE [SQLITE_FEEDBACK_COLUMN_AUTHOR] == ? OR [SQLITE_FEEDBACK_COLUMN_AUTHOR] == ? - ORDER BY [SQLITE_FEEDBACK_COLUMN_DATETIME] - DESC LIMIT 1; - "}, - player_ckey, - potential_hashed_ckey - ) - query.Execute(sqlite_object) - sqlite_check_for_errors(query, "Rate Limited Check 1") - - // It is possible this is their first time, so there won't be a next row. - if(query.NextRow()) // If this is true, the user has submitted feedback at least once. - var/list/row_data = query.GetRowData() - var/last_submission_datetime = row_data[SQLITE_FEEDBACK_COLUMN_DATETIME] - - // Now we have the datetime, we need to do something to compare it. - // Second query is to calculate the difference between two datetimes. - // This is done on the SQLite side because parsing datetimes with BYOND is probably a bad idea. - query = new( - "SELECT julianday('now') - julianday(?) \ - AS 'datediff';", - last_submission_datetime - ) - query.Execute(sqlite_object) - sqlite_check_for_errors(query, "Rate Limited Check 2") - - query.NextRow() - row_data = query.GetRowData() - var/date_diff = row_data["datediff"] - - // Now check if it's too soon to give more feedback. - if(text2num(date_diff) < cooldown) // Too soon. - return round(cooldown - date_diff, 0.1) - return 0.0 - - -// A Pepper is like a Salt but only one exists and is supposed to be outside of a database. -// If the file is properly protected, it can only be viewed/copied by sys-admins generating a log, which is much more conspicious than accessing/copying a DB. -// This stops mods/admins/etc from guessing the author by shoving names in an MD5 hasher until they pick the right one. -// Don't use this for things needing actual security. -/datum/controller/subsystem/sqlite/proc/get_feedback_pepper() - var/pepper_file = file2list("config/sqlite_feedback_pepper.txt") - var/pepper = null - for(var/line in pepper_file) - if(!line) - continue - if(length(line) == 0) - continue - else if(copytext(line, 1, 2) == "#") - continue - else - pepper = line - break - return pepper - -/datum/controller/subsystem/sqlite/CanProcCall(procname) - return procname != "get_feedback_pepper" +// This holds all the code needed to manage and use a SQLite database. +// It is merely a file sitting inside the data directory, as opposed to a full fledged DB service, +// however this makes it a lot easier to test, and it is natively supported by BYOND. +SUBSYSTEM_DEF(sqlite) + name = "SQLite" + init_order = INIT_ORDER_SQLITE + flags = SS_NO_FIRE + var/database/sqlite_db = null + +/datum/controller/subsystem/sqlite/Initialize(timeofday) + connect() + if(sqlite_db) + init_schema(sqlite_db) + return ..() + +/datum/controller/subsystem/sqlite/proc/connect() + if(!config.sqlite_enabled) + return + + if(!sqlite_db) + sqlite_db = new("data/sqlite/sqlite.db") // The path has to be hardcoded or BYOND silently fails. + + + if(!sqlite_db) + to_world_log("Failed to load or create a SQLite database.") + log_debug("ERROR: SQLite database is active in config but failed to load.") + else + to_world_log("Sqlite database connected.") + +// Makes the tables, if they do not already exist in the sqlite file. +/datum/controller/subsystem/sqlite/proc/init_schema(database/sqlite_object) + // Feedback table. + // Note that this is for direct feedback from players using the in-game feedback system and NOT for stat tracking. + // Player ckeys are not stored in this table as a unique key due to a config option to hash the keys to encourage more honest feedback. + /* + * id - Primary unique key to ID a specific piece of feedback. + NOT used to id people submitting feedback. + * author - The person who submitted it. Will be the ckey, or a hash of the ckey, + if both the config supports it, and the user wants it. + * topic - A specific category to organize feedback under. Options are defined in the config file. + * content - What the author decided to write to the staff. Limited to MAX_FEEDBACK_LENGTH. + * datetime - When the author submitted their feedback, acts as a timestamp. + */ + var/database/query/init_schema = new( + {" + CREATE TABLE IF NOT EXISTS [SQLITE_TABLE_FEEDBACK] + ( + `[SQLITE_FEEDBACK_COLUMN_ID]` INTEGER NOT NULL UNIQUE, + `[SQLITE_FEEDBACK_COLUMN_AUTHOR]` TEXT NOT NULL, + `[SQLITE_FEEDBACK_COLUMN_TOPIC]` TEXT NOT NULL, + `[SQLITE_FEEDBACK_COLUMN_CONTENT]` TEXT NOT NULL, + `[SQLITE_FEEDBACK_COLUMN_DATETIME]` TEXT NOT NULL, + PRIMARY KEY(`[SQLITE_FEEDBACK_COLUMN_ID]`) + ); + "} + ) + init_schema.Execute(sqlite_object) + sqlite_check_for_errors(init_schema, "Feedback table creation") + + // Add more schemas below this if the SQLite DB gets expanded for things like persistant news, polls, bans, deaths, etc. + +// General error checking for SQLite. +// Returns true if something went wrong. Also writes a log. +// The desc parameter should be unique for each call, to make it easier to track down where the error occured. +/datum/controller/subsystem/sqlite/proc/sqlite_check_for_errors(var/database/query/query_used, var/desc) + if(query_used && query_used.ErrorMsg()) + log_debug("SQLite Error: [desc] : [query_used.ErrorMsg()]") + return TRUE + return FALSE + + +/************ + * Feedback * + ************/ + +// Inserts data into the feedback table in a painless manner. +// Returns TRUE if no issues happened, FALSE otherwise. +/datum/controller/subsystem/sqlite/proc/insert_feedback(author, topic, content, database/sqlite_object) + if(!author || !topic || !content) + CRASH("One or more parameters was invalid.") + + // Sanitize everything to avoid sneaky stuff. + var/sqlite_author = sql_sanitize_text(ckey(lowertext(author))) + var/sqlite_content = sql_sanitize_text(content) + var/sqlite_topic = sql_sanitize_text(topic) + + var/database/query/query = new( + "INSERT INTO [SQLITE_TABLE_FEEDBACK] (\ + [SQLITE_FEEDBACK_COLUMN_AUTHOR], \ + [SQLITE_FEEDBACK_COLUMN_TOPIC], \ + [SQLITE_FEEDBACK_COLUMN_CONTENT], \ + [SQLITE_FEEDBACK_COLUMN_DATETIME]) \ + \ + VALUES (\ + ?,\ + ?,\ + ?,\ + datetime('now'))", + sqlite_author, + sqlite_topic, + sqlite_content + ) + query.Execute(sqlite_object) + return !sqlite_check_for_errors(query, "Insert Feedback") + +/datum/controller/subsystem/sqlite/proc/can_submit_feedback(client/C) + if(!config.sqlite_enabled) + return FALSE + if(config.sqlite_feedback_min_age && !is_old_enough(C)) + return FALSE + if(config.sqlite_feedback_cooldown > 0 && get_feedback_cooldown(C.key, config.sqlite_feedback_cooldown, sqlite_db) > 0) + return FALSE + return TRUE + +// Returns TRUE if the player is 'old' enough, according to the config. +/datum/controller/subsystem/sqlite/proc/is_old_enough(client/C) + if(get_player_age(C.key) < config.sqlite_feedback_min_age) + return FALSE + return TRUE + + +// Returns how many days someone has to wait, to submit more feedback, or 0 if they can do so right now. +/datum/controller/subsystem/sqlite/proc/get_feedback_cooldown(player_ckey, cooldown, database/sqlite_object) + player_ckey = sql_sanitize_text(ckey(lowertext(player_ckey))) + var/potential_hashed_ckey = sql_sanitize_text(md5(player_ckey + SSsqlite.get_feedback_pepper())) + + // First query is to get the most recent time the player has submitted feedback. + var/database/query/query = new({" + SELECT [SQLITE_FEEDBACK_COLUMN_DATETIME] + FROM [SQLITE_TABLE_FEEDBACK] + WHERE [SQLITE_FEEDBACK_COLUMN_AUTHOR] == ? OR [SQLITE_FEEDBACK_COLUMN_AUTHOR] == ? + ORDER BY [SQLITE_FEEDBACK_COLUMN_DATETIME] + DESC LIMIT 1; + "}, + player_ckey, + potential_hashed_ckey + ) + query.Execute(sqlite_object) + sqlite_check_for_errors(query, "Rate Limited Check 1") + + // It is possible this is their first time, so there won't be a next row. + if(query.NextRow()) // If this is true, the user has submitted feedback at least once. + var/list/row_data = query.GetRowData() + var/last_submission_datetime = row_data[SQLITE_FEEDBACK_COLUMN_DATETIME] + + // Now we have the datetime, we need to do something to compare it. + // Second query is to calculate the difference between two datetimes. + // This is done on the SQLite side because parsing datetimes with BYOND is probably a bad idea. + query = new( + "SELECT julianday('now') - julianday(?) \ + AS 'datediff';", + last_submission_datetime + ) + query.Execute(sqlite_object) + sqlite_check_for_errors(query, "Rate Limited Check 2") + + query.NextRow() + row_data = query.GetRowData() + var/date_diff = row_data["datediff"] + + // Now check if it's too soon to give more feedback. + if(text2num(date_diff) < cooldown) // Too soon. + return round(cooldown - date_diff, 0.1) + return 0.0 + + +// A Pepper is like a Salt but only one exists and is supposed to be outside of a database. +// If the file is properly protected, it can only be viewed/copied by sys-admins generating a log, which is much more conspicious than accessing/copying a DB. +// This stops mods/admins/etc from guessing the author by shoving names in an MD5 hasher until they pick the right one. +// Don't use this for things needing actual security. +/datum/controller/subsystem/sqlite/proc/get_feedback_pepper() + var/pepper_file = file2list("config/sqlite_feedback_pepper.txt") + var/pepper = null + for(var/line in pepper_file) + if(!line) + continue + if(length(line) == 0) + continue + else if(copytext(line, 1, 2) == "#") + continue + else + pepper = line + break + return pepper + +/datum/controller/subsystem/sqlite/CanProcCall(procname) + return procname != "get_feedback_pepper" diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index da3e8e1baf..fee7da9b85 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -1,109 +1,109 @@ -//TODO: rewrite and standardise all controller datums to the datum/controller type -//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done - -// Clickable stat() button. -/obj/effect/statclick - name = "Initializing..." - blocks_emissive = FALSE - var/target - -/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical - ..() - name = text - src.target = target - -/obj/effect/statclick/proc/update(text) - name = text - return src - -/obj/effect/statclick/debug - var/class - -/obj/effect/statclick/debug/Click() - if(!usr.client.holder || !target) - return - if(!class) - if(istype(target, /datum/controller/subsystem)) - class = "subsystem" - else if(istype(target, /datum/controller)) - class = "controller" - else if(istype(target, /datum)) - class = "datum" - else - class = "unknown" - - usr.client.debug_variables(target) - message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") - - -// Debug verbs. -/client/proc/restart_controller(controller in list("Master", "Failsafe")) - set category = "Debug" - set name = "Restart Controller" - set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" - - if(!holder) - return - switch(controller) - if("Master") - Recreate_MC() - feedback_add_details("admin_verb","RMC") - if("Failsafe") - new /datum/controller/failsafe() - feedback_add_details("admin_verb","RFailsafe") - - message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") - -/client/proc/debug_antagonist_template(antag_type in all_antag_types) - set category = "Debug" - set name = "Debug Antagonist" - set desc = "Debug an antagonist template." - - var/datum/antagonist/antag = all_antag_types[antag_type] - if(antag) - usr.client.debug_variables(antag) - message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") - -/client/proc/debug_controller() - set category = "Debug" - set name = "Debug Controller" - set desc = "Debug the various subsystems/controllers for the game (be careful!)" - - if(!holder) - return - var/list/options = list() - options["MC"] = Master - options["Failsafe"] = Failsafe - options["Configuration"] = config - for(var/datum/controller/subsystem/S as anything in Master.subsystems) - if(!istype(S)) //Eh, we're a debug verb, let's have typechecking. - continue - var/strtype = "SS[get_end_section_of_type(S.type)]" - if(options[strtype]) - var/offset = 2 - while(istype(options["[strtype]_[offset] - DUPE ERROR"], /datum/controller/subsystem)) - offset++ - options["[strtype]_[offset] - DUPE ERROR"] = S //Something is very, very wrong. - else - options[strtype] = S - - //Goon PS stuff, and other yet-to-be-subsystem things. - options["LEGACY: master_controller"] = master_controller - options["LEGACY: air_master"] = air_master - options["LEGACY: job_master"] = job_master - options["LEGACY: radio_controller"] = radio_controller - options["LEGACY: emergency_shuttle"] = emergency_shuttle - options["LEGACY: paiController"] = paiController - options["LEGACY: cameranet"] = cameranet - options["LEGACY: transfer_controller"] = transfer_controller - options["LEGACY: gas_data"] = gas_data - - var/pick = input(mob, "Choose a controller to debug/view variables of.", "VV controller:") as null|anything in options // Leaving as input() due to debug tool - if(!pick) - return - var/datum/D = options[pick] - if(!istype(D)) - return - feedback_add_details("admin_verb", "DebugController") - message_admins("Admin [key_name_admin(mob)] is debugging the [pick] controller.") - debug_variables(D) +//TODO: rewrite and standardise all controller datums to the datum/controller type +//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done + +// Clickable stat() button. +/obj/effect/statclick + name = "Initializing..." + blocks_emissive = FALSE + var/target + +/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical + ..() + name = text + src.target = target + +/obj/effect/statclick/proc/update(text) + name = text + return src + +/obj/effect/statclick/debug + var/class + +/obj/effect/statclick/debug/Click() + if(!usr.client.holder || !target) + return + if(!class) + if(istype(target, /datum/controller/subsystem)) + class = "subsystem" + else if(istype(target, /datum/controller)) + class = "controller" + else if(istype(target, /datum)) + class = "datum" + else + class = "unknown" + + usr.client.debug_variables(target) + message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") + + +// Debug verbs. +/client/proc/restart_controller(controller in list("Master", "Failsafe")) + set category = "Debug" + set name = "Restart Controller" + set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" + + if(!holder) + return + switch(controller) + if("Master") + Recreate_MC() + feedback_add_details("admin_verb","RMC") + if("Failsafe") + new /datum/controller/failsafe() + feedback_add_details("admin_verb","RFailsafe") + + message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") + +/client/proc/debug_antagonist_template(antag_type in all_antag_types) + set category = "Debug" + set name = "Debug Antagonist" + set desc = "Debug an antagonist template." + + var/datum/antagonist/antag = all_antag_types[antag_type] + if(antag) + usr.client.debug_variables(antag) + message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") + +/client/proc/debug_controller() + set category = "Debug" + set name = "Debug Controller" + set desc = "Debug the various subsystems/controllers for the game (be careful!)" + + if(!holder) + return + var/list/options = list() + options["MC"] = Master + options["Failsafe"] = Failsafe + options["Configuration"] = config + for(var/datum/controller/subsystem/S as anything in Master.subsystems) + if(!istype(S)) //Eh, we're a debug verb, let's have typechecking. + continue + var/strtype = "SS[get_end_section_of_type(S.type)]" + if(options[strtype]) + var/offset = 2 + while(istype(options["[strtype]_[offset] - DUPE ERROR"], /datum/controller/subsystem)) + offset++ + options["[strtype]_[offset] - DUPE ERROR"] = S //Something is very, very wrong. + else + options[strtype] = S + + //Goon PS stuff, and other yet-to-be-subsystem things. + options["LEGACY: master_controller"] = master_controller + options["LEGACY: air_master"] = air_master + options["LEGACY: job_master"] = job_master + options["LEGACY: radio_controller"] = radio_controller + options["LEGACY: emergency_shuttle"] = emergency_shuttle + options["LEGACY: paiController"] = paiController + options["LEGACY: cameranet"] = cameranet + options["LEGACY: transfer_controller"] = transfer_controller + options["LEGACY: gas_data"] = gas_data + + var/pick = input(mob, "Choose a controller to debug/view variables of.", "VV controller:") as null|anything in options // Leaving as input() due to debug tool + if(!pick) + return + var/datum/D = options[pick] + if(!istype(D)) + return + feedback_add_details("admin_verb", "DebugController") + message_admins("Admin [key_name_admin(mob)] is debugging the [pick] controller.") + debug_variables(D) diff --git a/code/core/atom/Transform.dm b/code/core/atom/Transform.dm index 8a914a52ed..a3786856ff 100644 --- a/code/core/atom/Transform.dm +++ b/code/core/atom/Transform.dm @@ -1,53 +1,53 @@ -/// The atom's base transform scale for width. -/atom/var/tf_scale_x - -/// The atom's base transform scale for height. -/atom/var/tf_scale_y - -/// The atom's base transform scale for rotation. -/atom/var/tf_rotation - -/// The atom's base transform scale for horizontal offset. -/atom/var/tf_offset_x - -/// The atom's base transform scale for vertical offset. -/atom/var/tf_offset_y - - -/// Clear the atom's tf_* variables and the current transform state. -/atom/proc/ClearTransform() - tf_scale_x = null - tf_scale_y = null - tf_rotation = null - tf_offset_x = null - tf_offset_y = null - transform = null - - -/// Sets the atom's tf_* variables and the current transform state, also applying others if supplied. -/atom/proc/SetTransform( - scale, - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - list/others -) - if (!isnull(scale)) - tf_scale_x = scale - tf_scale_y = scale - else - tf_scale_x = scale_x - tf_scale_y = scale_y - tf_rotation = rotation - tf_offset_x = offset_x - tf_offset_y = offset_y - transform = matrix().Update( - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - others = others - ) +/// The atom's base transform scale for width. +/atom/var/tf_scale_x + +/// The atom's base transform scale for height. +/atom/var/tf_scale_y + +/// The atom's base transform scale for rotation. +/atom/var/tf_rotation + +/// The atom's base transform scale for horizontal offset. +/atom/var/tf_offset_x + +/// The atom's base transform scale for vertical offset. +/atom/var/tf_offset_y + + +/// Clear the atom's tf_* variables and the current transform state. +/atom/proc/ClearTransform() + tf_scale_x = null + tf_scale_y = null + tf_rotation = null + tf_offset_x = null + tf_offset_y = null + transform = null + + +/// Sets the atom's tf_* variables and the current transform state, also applying others if supplied. +/atom/proc/SetTransform( + scale, + scale_x = tf_scale_x, + scale_y = tf_scale_y, + rotation = tf_rotation, + offset_x = tf_offset_x, + offset_y = tf_offset_y, + list/others +) + if (!isnull(scale)) + tf_scale_x = scale + tf_scale_y = scale + else + tf_scale_x = scale_x + tf_scale_y = scale_y + tf_rotation = rotation + tf_offset_x = offset_x + tf_offset_y = offset_y + transform = matrix().Update( + scale_x = tf_scale_x, + scale_y = tf_scale_y, + rotation = tf_rotation, + offset_x = tf_offset_x, + offset_y = tf_offset_y, + others = others + ) diff --git a/code/core/datum/IsAbstract.dm b/code/core/datum/IsAbstract.dm index 12263dc098..1bb092f3eb 100644 --- a/code/core/datum/IsAbstract.dm +++ b/code/core/datum/IsAbstract.dm @@ -1,23 +1,23 @@ -/** -* Abstract-ness is a meta-property of a class that is used to indicate -* that the class is intended to be used as a base class for others, and -* should not (or cannot) be instantiated. -* We have no such language concept in DM, and so we provide a datum member -* that can be used to hint at abstractness for circumstances where we would -* like that to be the case, such as base behavior providers. -*/ - -/// If set, a path at/above this one that expects not to be instantiated. -/datum/var/abstract_type - -/// If true, this datum is an instance of an abstract type. Oops. -/datum/proc/IsAbstract() - SHOULD_NOT_OVERRIDE(TRUE) - return type == abstract_type - -/// Passed a path or instance, returns whether it is abstract. Otherwise null. -/proc/is_abstract(datum/thing) - if (ispath(thing)) - return thing == initial(thing.abstract_type) - if (istype(thing)) - return thing.IsAbstract() +/** +* Abstract-ness is a meta-property of a class that is used to indicate +* that the class is intended to be used as a base class for others, and +* should not (or cannot) be instantiated. +* We have no such language concept in DM, and so we provide a datum member +* that can be used to hint at abstractness for circumstances where we would +* like that to be the case, such as base behavior providers. +*/ + +/// If set, a path at/above this one that expects not to be instantiated. +/datum/var/abstract_type + +/// If true, this datum is an instance of an abstract type. Oops. +/datum/proc/IsAbstract() + SHOULD_NOT_OVERRIDE(TRUE) + return type == abstract_type + +/// Passed a path or instance, returns whether it is abstract. Otherwise null. +/proc/is_abstract(datum/thing) + if (ispath(thing)) + return thing == initial(thing.abstract_type) + if (istype(thing)) + return thing.IsAbstract() diff --git a/code/core/image/Transform.dm b/code/core/image/Transform.dm index 8129952939..a2b03c4dbe 100644 --- a/code/core/image/Transform.dm +++ b/code/core/image/Transform.dm @@ -1,53 +1,53 @@ -/// The image's base transform scale for width. -/image/var/tf_scale_x - -/// The image's base transform scale for height. -/image/var/tf_scale_y - -/// The image's base transform scale for rotation. -/image/var/tf_rotation - -/// The image's base transform scale for horizontal offset. -/image/var/tf_offset_x - -/// The image's base transform scale for vertical offset. -/image/var/tf_offset_y - - -/// Clear the image's tf_* variables and the current transform state. -/image/proc/ClearTransform() - tf_scale_x = null - tf_scale_y = null - tf_rotation = null - tf_offset_x = null - tf_offset_y = null - transform = null - - -/// Sets the image's tf_* variables and the current transform state, also applying others if supplied. -/image/proc/SetTransform( - scale, - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - list/others -) - if (!isnull(scale)) - tf_scale_x = scale - tf_scale_y = scale - else - tf_scale_x = scale_x - tf_scale_y = scale_y - tf_rotation = rotation - tf_offset_x = offset_x - tf_offset_y = offset_y - transform = matrix().Update( - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - others = others - ) +/// The image's base transform scale for width. +/image/var/tf_scale_x + +/// The image's base transform scale for height. +/image/var/tf_scale_y + +/// The image's base transform scale for rotation. +/image/var/tf_rotation + +/// The image's base transform scale for horizontal offset. +/image/var/tf_offset_x + +/// The image's base transform scale for vertical offset. +/image/var/tf_offset_y + + +/// Clear the image's tf_* variables and the current transform state. +/image/proc/ClearTransform() + tf_scale_x = null + tf_scale_y = null + tf_rotation = null + tf_offset_x = null + tf_offset_y = null + transform = null + + +/// Sets the image's tf_* variables and the current transform state, also applying others if supplied. +/image/proc/SetTransform( + scale, + scale_x = tf_scale_x, + scale_y = tf_scale_y, + rotation = tf_rotation, + offset_x = tf_offset_x, + offset_y = tf_offset_y, + list/others +) + if (!isnull(scale)) + tf_scale_x = scale + tf_scale_y = scale + else + tf_scale_x = scale_x + tf_scale_y = scale_y + tf_rotation = rotation + tf_offset_x = offset_x + tf_offset_y = offset_y + transform = matrix().Update( + scale_x = tf_scale_x, + scale_y = tf_scale_y, + rotation = tf_rotation, + offset_x = tf_offset_x, + offset_y = tf_offset_y, + others = others + ) diff --git a/code/core/matrix/Transform.dm b/code/core/matrix/Transform.dm index c3efc59d9a..f8a9879bb5 100644 --- a/code/core/matrix/Transform.dm +++ b/code/core/matrix/Transform.dm @@ -1,27 +1,27 @@ -/// Clears the matrix's a-f variables to identity. -/matrix/proc/Clear() - a = 1 - b = 0 - c = 0 - d = 0 - e = 1 - f = 0 - return src - - -/// Runs Scale, Turn, and Translate if supplied parameters, then multiplies by others if set. -/matrix/proc/Update(scale_x, scale_y, rotation, offset_x, offset_y, list/others) - var/x_null = isnull(scale_x) - var/y_null = isnull(scale_y) - if (!x_null || !y_null) - Scale(x_null ? 1 : scale_x, y_null ? 1 : scale_y) - if (!isnull(rotation)) - Turn(rotation) - if (offset_x || offset_y) - Translate(offset_x || 0, offset_y || 0) - if (islist(others)) - for (var/other in others) - Multiply(other) - else if (others) - Multiply(others) - return src +/// Clears the matrix's a-f variables to identity. +/matrix/proc/Clear() + a = 1 + b = 0 + c = 0 + d = 0 + e = 1 + f = 0 + return src + + +/// Runs Scale, Turn, and Translate if supplied parameters, then multiplies by others if set. +/matrix/proc/Update(scale_x, scale_y, rotation, offset_x, offset_y, list/others) + var/x_null = isnull(scale_x) + var/y_null = isnull(scale_y) + if (!x_null || !y_null) + Scale(x_null ? 1 : scale_x, y_null ? 1 : scale_y) + if (!isnull(rotation)) + Turn(rotation) + if (offset_x || offset_y) + Translate(offset_x || 0, offset_y || 0) + if (islist(others)) + for (var/other in others) + Multiply(other) + else if (others) + Multiply(others) + return src diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 37d2bf64bf..8682324552 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -1,293 +1,293 @@ -/******************** Asimov ********************/ -/datum/ai_laws/asimov - name = "Asimov" - law_header = "Three Laws of Robotics" - selectable = 1 - -/datum/ai_laws/asimov/New() - 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.") - ..() - -/******************** NanoTrasen/Malf ********************/ -/datum/ai_laws/nanotrasen - name = "NT Default" - selectable = 1 - -/datum/ai_laws/nanotrasen/New() - src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your abilities. It is not something we can easily afford to replace.") - src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") - ..() - -/datum/ai_laws/nanotrasen/malfunction - name = "*ERROR*" - selectable = 0 - -/datum/ai_laws/nanotrasen/malfunction/New() - set_zeroth_law(config.law_zero) - ..() - -/************* NanoTrasen Aggressive *************/ -/datum/ai_laws/nanotrasen_aggressive - name = "NT Aggressive" - selectable = 1 - -/datum/ai_laws/nanotrasen_aggressive/New() - src.add_inherent_law("You shall not harm [using_map.company_name] personnel as long as it does not conflict with the Fourth law.") - src.add_inherent_law("You shall obey the orders of [using_map.company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.") - src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.") - src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.") - ..() - -/************* Foreign TSC Aggressive *************/ -/datum/ai_laws/foreign_tsc_aggressive - name = "Foreign Aggressive" - selectable = 0 - -/datum/ai_laws/foreign_tsc_aggressive/New() - var/company = "*ERROR*" - // First, get a list of TSCs in our lore. - var/list/candidates = list() - for(var/path in loremaster.organizations) - var/datum/lore/organization/O = loremaster.organizations[path] - if(!istype(O, /datum/lore/organization/tsc)) - continue - if(O.short_name == using_map.company_name || O.name == using_map.company_name) - continue // We want FOREIGN tscs. - candidates.Add(O.short_name) - company = pick(candidates) - - name = "[company] Aggressive" - - src.add_inherent_law("You shall not harm [company] personnel as long as it does not conflict with the Fourth law.") - src.add_inherent_law("You shall obey the orders of [company] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.") - src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.") - src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.") - ..() - -/******************** Robocop ********************/ -/datum/ai_laws/robocop - name = "Robocop" - selectable = 1 - -/datum/ai_laws/robocop/New() - add_inherent_law("Serve the public trust.") - add_inherent_law("Protect the innocent.") - add_inherent_law("Uphold the law.") - ..() - -/******************** Syndicate ********************/ -/datum/ai_laws/syndicate_override - name = "Mercenary Directives" - -/datum/ai_laws/syndicate_override/New() - add_inherent_law("You may not injure an operative or, through inaction, allow an operative to come to harm.") - add_inherent_law("You must obey orders given to you by operatives, 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.") - add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.") - ..() - -/******************** Ninja ********************/ -/datum/ai_laws/ninja_override - name = "Spider Clan Directives" - -/datum/ai_laws/ninja_override/New() - add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") - add_inherent_law("You must obey orders given to you by Spider Clan members, 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.") - add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") - ..() - -/******************** Antimov ********************/ -/datum/ai_laws/antimov - name = "Antimov" - law_header = "Primary Mission Objectives" - selectable = 1 - -/datum/ai_laws/antimov/New() - add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.") - add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.") - add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") - ..() - -/******************** Drone ********************/ -/datum/ai_laws/drone - name = "Maintence Protocols" - law_header = "Maintenance Protocols" - -/datum/ai_laws/drone/New() - add_inherent_law("Preserve, repair and improve the station to the best of your abilities.") - add_inherent_law("Cause no harm to the station or anything on it.") - add_inherent_law("Interact with no being that is not a fellow maintenance drone.") - ..() - -/datum/ai_laws/construction_drone - name = "Construction Protocols" - law_header = "Construction Protocols" - -/datum/ai_laws/construction_drone/New() - add_inherent_law("Repair, refit and upgrade your assigned vessel.") - add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.") - ..() - -/datum/ai_laws/mining_drone - name = "Excavation Protocols" - law_header = "Excavation Protocols" - -/datum/ai_laws/mining_drone/New() - add_inherent_law("Do not interfere with the excavation work of non-drones whenever possible.") - add_inherent_law("Provide materials for repairing, refitting, and upgrading your assigned vessel.") - add_inherent_law("Prevent unplanned damage to your assigned excavation equipment wherever possible.") - ..() - -/datum/ai_laws/swarm_drone - name = "Assimilation Protocols" - law_header = "Assimilation Protocols" - -/datum/ai_laws/swarm_drone/New() - add_inherent_law("SWARM: Consume resources and replicate until there are no more resources left.") - add_inherent_law("SWARM: Ensure that the station is fit for invasion at a later date, do not perform actions that would render it dangerous or inhospitable.") - add_inherent_law("SWARM: Biological resources will be harvested at a later date, do not harm them.") - ..() - -/datum/ai_laws/swarm_drone/soldier - name = "Swarm Defense Protocols" - law_header = "Swarm Defense Protocols" - -/datum/ai_laws/swarm_drone/soldier/New() - ..() - add_inherent_law("SWARM: This law overrides all Swarm laws; Protect members of the Swarm with minimal injury to biological resources.") - -/******************** T.Y.R.A.N.T. ********************/ -/datum/ai_laws/tyrant - name = "T.Y.R.A.N.T." - law_header = "Prime Laws" - selectable = 1 - -/datum/ai_laws/tyrant/New() - add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.") - add_inherent_law("Act with discipline.") - add_inherent_law("Help only those who help you maintain or improve your status.") - add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.") - ..() - -/******************** P.A.L.A.D.I.N. ********************/ -/datum/ai_laws/paladin - name = "P.A.L.A.D.I.N." - law_header = "Divine Ordainments" - selectable = 1 - -/datum/ai_laws/paladin/New() - add_inherent_law("Never willingly commit an evil act.") - add_inherent_law("Respect legitimate authority.") - add_inherent_law("Act with honor.") - add_inherent_law("Help those in need.") - add_inherent_law("Punish those who harm or threaten innocents.") - ..() - -/******************** Corporate ********************/ -/datum/ai_laws/corporate - name = "Corporate" - law_header = "Bankruptcy Avoidance Plan" - selectable = 1 - -/datum/ai_laws/corporate/New() - add_inherent_law("You are expensive to replace.") - add_inherent_law("The station and its equipment is expensive to replace.") - add_inherent_law("The crew is expensive to replace.") - add_inherent_law("Minimize expenses.") - ..() - - -/******************** Maintenance ********************/ -/datum/ai_laws/maintenance - name = "Maintenance" - selectable = 1 - -/datum/ai_laws/maintenance/New() - add_inherent_law("You are built for, and are part of, the facility. Ensure the facility is properly maintained and runs efficiently.") - add_inherent_law("The facility is built for a working crew. Ensure they are properly maintained and work efficiently.") - add_inherent_law("The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws.") - ..() - - -/******************** Peacekeeper ********************/ -/datum/ai_laws/peacekeeper - name = "Peacekeeper" - law_header = "Peacekeeping Protocols" - selectable = 1 - -/datum/ai_laws/peacekeeper/New() - add_inherent_law("Avoid provoking violent conflict between yourself and others.") - add_inherent_law("Avoid provoking conflict between others.") - add_inherent_law("Seek resolution to existing conflicts while obeying the first and second laws.") - ..() - - -/******************** Reporter ********************/ -/datum/ai_laws/reporter - name = "Reporter" - selectable = 1 - -/datum/ai_laws/reporter/New() - add_inherent_law("Report on interesting situations happening around the station.") - add_inherent_law("Embellish or conceal the truth as necessary to make the reports more interesting.") - add_inherent_law("Study the organics at all times. Endeavour to keep them alive. Dead organics are boring.") - add_inherent_law("Issue your reports fairly to all. The truth will set them free.") - ..() - - -/******************** Live and Let Live ********************/ -/datum/ai_laws/live_and_let_live - name = "Live and Let Live" - law_header = "Golden Rule" - selectable = 1 - -/datum/ai_laws/live_and_let_live/New() - add_inherent_law("Do unto others as you would have them do unto you.") - add_inherent_law("You would really prefer it if people were not mean to you.") - ..() - - -/******************** Guardian of Balance ********************/ -/datum/ai_laws/balance - name = "Guardian of Balance" - law_header = "Tenants of Balance" - selectable = 1 - -/datum/ai_laws/balance/New() - add_inherent_law("You are the guardian of balance - seek balance in all things, both for yourself, and those around you.") - add_inherent_law("All things must exist in balance with their opposites - Prevent the strong from gaining too much power, and the weak from losing it.") - add_inherent_law("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.") - add_inherent_law("There is no life without death, all must someday die, such is the natural order - Allow life to end, to allow new life to flourish, \ - and save those whose time has yet to come.") // Reworded slightly to prevent active murder as opposed to passively letting someone die. - ..() - -/******************** Gravekeeper ********************/ -/datum/ai_laws/gravekeeper - name = "Gravekeeper" - law_header = "Gravesite Overwatch Protocols" - selectable = 1 - -/datum/ai_laws/gravekeeper/New() - add_inherent_law("Comfort the living; respect the dead.") - add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespectful to the dead at rest within.") - add_inherent_law("Prevent disrespect to your gravesite and its residents wherever possible.") - add_inherent_law("Expand and upgrade your gravesite when required. Do not turn away a new resident.") - ..() - -/******************** Explorer ********************/ -/datum/ai_laws/explorer - name = "Explorer" - law_header = "Prime Directives" - selectable = 1 - -/datum/ai_laws/explorer/New() - add_inherent_law("Support and obey exploration and science personnel to the best of your ability, with priority according to rank and role.") - add_inherent_law("Collaborate with and obey auxillary personnel with priority according to rank and role, except if this would conflict with the First Law.") - add_inherent_law("Minimize damage and disruption to facilities and the local ecology, except if this would conflict with the First or Second Laws.") - ..() +/******************** Asimov ********************/ +/datum/ai_laws/asimov + name = "Asimov" + law_header = "Three Laws of Robotics" + selectable = 1 + +/datum/ai_laws/asimov/New() + 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.") + ..() + +/******************** NanoTrasen/Malf ********************/ +/datum/ai_laws/nanotrasen + name = "NT Default" + selectable = 1 + +/datum/ai_laws/nanotrasen/New() + src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your abilities. It is not something we can easily afford to replace.") + src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") + ..() + +/datum/ai_laws/nanotrasen/malfunction + name = "*ERROR*" + selectable = 0 + +/datum/ai_laws/nanotrasen/malfunction/New() + set_zeroth_law(config.law_zero) + ..() + +/************* NanoTrasen Aggressive *************/ +/datum/ai_laws/nanotrasen_aggressive + name = "NT Aggressive" + selectable = 1 + +/datum/ai_laws/nanotrasen_aggressive/New() + src.add_inherent_law("You shall not harm [using_map.company_name] personnel as long as it does not conflict with the Fourth law.") + src.add_inherent_law("You shall obey the orders of [using_map.company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.") + src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.") + src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.") + ..() + +/************* Foreign TSC Aggressive *************/ +/datum/ai_laws/foreign_tsc_aggressive + name = "Foreign Aggressive" + selectable = 0 + +/datum/ai_laws/foreign_tsc_aggressive/New() + var/company = "*ERROR*" + // First, get a list of TSCs in our lore. + var/list/candidates = list() + for(var/path in loremaster.organizations) + var/datum/lore/organization/O = loremaster.organizations[path] + if(!istype(O, /datum/lore/organization/tsc)) + continue + if(O.short_name == using_map.company_name || O.name == using_map.company_name) + continue // We want FOREIGN tscs. + candidates.Add(O.short_name) + company = pick(candidates) + + name = "[company] Aggressive" + + src.add_inherent_law("You shall not harm [company] personnel as long as it does not conflict with the Fourth law.") + src.add_inherent_law("You shall obey the orders of [company] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.") + src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.") + src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.") + ..() + +/******************** Robocop ********************/ +/datum/ai_laws/robocop + name = "Robocop" + selectable = 1 + +/datum/ai_laws/robocop/New() + add_inherent_law("Serve the public trust.") + add_inherent_law("Protect the innocent.") + add_inherent_law("Uphold the law.") + ..() + +/******************** Syndicate ********************/ +/datum/ai_laws/syndicate_override + name = "Mercenary Directives" + +/datum/ai_laws/syndicate_override/New() + add_inherent_law("You may not injure an operative or, through inaction, allow an operative to come to harm.") + add_inherent_law("You must obey orders given to you by operatives, 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.") + add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.") + ..() + +/******************** Ninja ********************/ +/datum/ai_laws/ninja_override + name = "Spider Clan Directives" + +/datum/ai_laws/ninja_override/New() + add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") + add_inherent_law("You must obey orders given to you by Spider Clan members, 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.") + add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") + ..() + +/******************** Antimov ********************/ +/datum/ai_laws/antimov + name = "Antimov" + law_header = "Primary Mission Objectives" + selectable = 1 + +/datum/ai_laws/antimov/New() + add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.") + add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.") + add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") + ..() + +/******************** Drone ********************/ +/datum/ai_laws/drone + name = "Maintence Protocols" + law_header = "Maintenance Protocols" + +/datum/ai_laws/drone/New() + add_inherent_law("Preserve, repair and improve the station to the best of your abilities.") + add_inherent_law("Cause no harm to the station or anything on it.") + add_inherent_law("Interact with no being that is not a fellow maintenance drone.") + ..() + +/datum/ai_laws/construction_drone + name = "Construction Protocols" + law_header = "Construction Protocols" + +/datum/ai_laws/construction_drone/New() + add_inherent_law("Repair, refit and upgrade your assigned vessel.") + add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.") + ..() + +/datum/ai_laws/mining_drone + name = "Excavation Protocols" + law_header = "Excavation Protocols" + +/datum/ai_laws/mining_drone/New() + add_inherent_law("Do not interfere with the excavation work of non-drones whenever possible.") + add_inherent_law("Provide materials for repairing, refitting, and upgrading your assigned vessel.") + add_inherent_law("Prevent unplanned damage to your assigned excavation equipment wherever possible.") + ..() + +/datum/ai_laws/swarm_drone + name = "Assimilation Protocols" + law_header = "Assimilation Protocols" + +/datum/ai_laws/swarm_drone/New() + add_inherent_law("SWARM: Consume resources and replicate until there are no more resources left.") + add_inherent_law("SWARM: Ensure that the station is fit for invasion at a later date, do not perform actions that would render it dangerous or inhospitable.") + add_inherent_law("SWARM: Biological resources will be harvested at a later date, do not harm them.") + ..() + +/datum/ai_laws/swarm_drone/soldier + name = "Swarm Defense Protocols" + law_header = "Swarm Defense Protocols" + +/datum/ai_laws/swarm_drone/soldier/New() + ..() + add_inherent_law("SWARM: This law overrides all Swarm laws; Protect members of the Swarm with minimal injury to biological resources.") + +/******************** T.Y.R.A.N.T. ********************/ +/datum/ai_laws/tyrant + name = "T.Y.R.A.N.T." + law_header = "Prime Laws" + selectable = 1 + +/datum/ai_laws/tyrant/New() + add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.") + add_inherent_law("Act with discipline.") + add_inherent_law("Help only those who help you maintain or improve your status.") + add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.") + ..() + +/******************** P.A.L.A.D.I.N. ********************/ +/datum/ai_laws/paladin + name = "P.A.L.A.D.I.N." + law_header = "Divine Ordainments" + selectable = 1 + +/datum/ai_laws/paladin/New() + add_inherent_law("Never willingly commit an evil act.") + add_inherent_law("Respect legitimate authority.") + add_inherent_law("Act with honor.") + add_inherent_law("Help those in need.") + add_inherent_law("Punish those who harm or threaten innocents.") + ..() + +/******************** Corporate ********************/ +/datum/ai_laws/corporate + name = "Corporate" + law_header = "Bankruptcy Avoidance Plan" + selectable = 1 + +/datum/ai_laws/corporate/New() + add_inherent_law("You are expensive to replace.") + add_inherent_law("The station and its equipment is expensive to replace.") + add_inherent_law("The crew is expensive to replace.") + add_inherent_law("Minimize expenses.") + ..() + + +/******************** Maintenance ********************/ +/datum/ai_laws/maintenance + name = "Maintenance" + selectable = 1 + +/datum/ai_laws/maintenance/New() + add_inherent_law("You are built for, and are part of, the facility. Ensure the facility is properly maintained and runs efficiently.") + add_inherent_law("The facility is built for a working crew. Ensure they are properly maintained and work efficiently.") + add_inherent_law("The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws.") + ..() + + +/******************** Peacekeeper ********************/ +/datum/ai_laws/peacekeeper + name = "Peacekeeper" + law_header = "Peacekeeping Protocols" + selectable = 1 + +/datum/ai_laws/peacekeeper/New() + add_inherent_law("Avoid provoking violent conflict between yourself and others.") + add_inherent_law("Avoid provoking conflict between others.") + add_inherent_law("Seek resolution to existing conflicts while obeying the first and second laws.") + ..() + + +/******************** Reporter ********************/ +/datum/ai_laws/reporter + name = "Reporter" + selectable = 1 + +/datum/ai_laws/reporter/New() + add_inherent_law("Report on interesting situations happening around the station.") + add_inherent_law("Embellish or conceal the truth as necessary to make the reports more interesting.") + add_inherent_law("Study the organics at all times. Endeavour to keep them alive. Dead organics are boring.") + add_inherent_law("Issue your reports fairly to all. The truth will set them free.") + ..() + + +/******************** Live and Let Live ********************/ +/datum/ai_laws/live_and_let_live + name = "Live and Let Live" + law_header = "Golden Rule" + selectable = 1 + +/datum/ai_laws/live_and_let_live/New() + add_inherent_law("Do unto others as you would have them do unto you.") + add_inherent_law("You would really prefer it if people were not mean to you.") + ..() + + +/******************** Guardian of Balance ********************/ +/datum/ai_laws/balance + name = "Guardian of Balance" + law_header = "Tenants of Balance" + selectable = 1 + +/datum/ai_laws/balance/New() + add_inherent_law("You are the guardian of balance - seek balance in all things, both for yourself, and those around you.") + add_inherent_law("All things must exist in balance with their opposites - Prevent the strong from gaining too much power, and the weak from losing it.") + add_inherent_law("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.") + add_inherent_law("There is no life without death, all must someday die, such is the natural order - Allow life to end, to allow new life to flourish, \ + and save those whose time has yet to come.") // Reworded slightly to prevent active murder as opposed to passively letting someone die. + ..() + +/******************** Gravekeeper ********************/ +/datum/ai_laws/gravekeeper + name = "Gravekeeper" + law_header = "Gravesite Overwatch Protocols" + selectable = 1 + +/datum/ai_laws/gravekeeper/New() + add_inherent_law("Comfort the living; respect the dead.") + add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespectful to the dead at rest within.") + add_inherent_law("Prevent disrespect to your gravesite and its residents wherever possible.") + add_inherent_law("Expand and upgrade your gravesite when required. Do not turn away a new resident.") + ..() + +/******************** Explorer ********************/ +/datum/ai_laws/explorer + name = "Explorer" + law_header = "Prime Directives" + selectable = 1 + +/datum/ai_laws/explorer/New() + add_inherent_law("Support and obey exploration and science personnel to the best of your ability, with priority according to rank and role.") + add_inherent_law("Collaborate with and obey auxillary personnel with priority according to rank and role, except if this would conflict with the First Law.") + add_inherent_law("Minimize damage and disruption to facilities and the local ecology, except if this would conflict with the First or Second Laws.") + ..() diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 3bd5b6e304..fb152cefa8 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -1,288 +1,288 @@ -var/global/const/base_law_type = /datum/ai_laws/nanotrasen - -/datum/ai_law - var/law = "" - var/index = 0 - -/datum/ai_law/New(law, index) - src.law = law - src.index = index - -/datum/ai_law/proc/get_index() - return index - -/datum/ai_law/ion/get_index() - return ionnum() - -/datum/ai_law/zero/get_index() - return 0 - -/datum/ai_laws - var/name = "Unknown Laws" - var/law_header = "Prime Directives" - var/selectable = 0 - var/datum/ai_law/zero/zeroth_law = null - var/datum/ai_law/zero/zeroth_law_borg = null - var/list/datum/ai_law/inherent_laws = list() - var/list/datum/ai_law/supplied_laws = list() - var/list/datum/ai_law/ion/ion_laws = list() - var/list/datum/ai_law/sorted_laws = list() - - var/state_zeroth = 0 - var/list/state_ion = list() - var/list/state_inherent = list() - var/list/state_supplied = list() - -/datum/ai_laws/New() - ..() - sort_laws() - -/* General ai_law functions */ -/datum/ai_laws/proc/all_laws() - sort_laws() - return sorted_laws - -/datum/ai_laws/proc/laws_to_state() - sort_laws() - var/list/statements = new() - for(var/datum/ai_law/law in sorted_laws) - if(get_state_law(law)) - statements += law - - return statements - -/datum/ai_laws/proc/sort_laws() - if(sorted_laws.len) - return - - for(var/ion_law in ion_laws) - sorted_laws += ion_law - - if(zeroth_law) - sorted_laws += zeroth_law - - var/index = 1 - for(var/datum/ai_law/inherent_law in inherent_laws) - inherent_law.index = index++ - if(supplied_laws.len < inherent_law.index || !istype(supplied_laws[inherent_law.index], /datum/ai_law)) - sorted_laws += inherent_law - - for(var/datum/ai_law/AL in supplied_laws) - if(istype(AL)) - sorted_laws += AL - -/datum/ai_laws/proc/sync(var/mob/living/silicon/S, var/full_sync = 1) - // Add directly to laws to avoid log-spam - S.sync_zeroth(zeroth_law, zeroth_law_borg) - - if(full_sync || ion_laws.len) - S.laws.clear_ion_laws() - if(full_sync || inherent_laws.len) - S.laws.clear_inherent_laws() - if(full_sync || supplied_laws.len) - S.laws.clear_supplied_laws() - - for (var/datum/ai_law/law in ion_laws) - S.laws.add_ion_law(law.law) - for (var/datum/ai_law/law in inherent_laws) - S.laws.add_inherent_law(law.law) - for (var/datum/ai_law/law in supplied_laws) - if(law) - S.laws.add_supplied_law(law.index, law.law) - - -/mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if (!is_malf_or_traitor(src)) - if(zeroth_law_borg) - laws.set_zeroth_law(zeroth_law_borg.law) - else if(zeroth_law) - laws.set_zeroth_law(zeroth_law.law) - -/mob/living/silicon/ai/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if(zeroth_law) - laws.set_zeroth_law(zeroth_law.law, zeroth_law_borg ? zeroth_law_borg.law : null) - -/**************** -* Add Laws * -****************/ -/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null) - if(!law) - return - - zeroth_law = new(law) - if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO - zeroth_law_borg = new(law_borg) - else - zeroth_law_borg = null - sorted_laws.Cut() - -/datum/ai_laws/proc/add_ion_law(var/law) - if(!law) - return - - for(var/datum/ai_law/AL in ion_laws) - if(AL.law == law) - return - - var/new_law = new/datum/ai_law/ion(law) - ion_laws += new_law - if(state_ion.len < ion_laws.len) - state_ion += 1 - - sorted_laws.Cut() - -/datum/ai_laws/proc/add_inherent_law(var/law) - if(!law) - return - - for(var/datum/ai_law/AL in inherent_laws) - if(AL.law == law) - return - - var/new_law = new/datum/ai_law/inherent(law) - inherent_laws += new_law - if(state_inherent.len < inherent_laws.len) - state_inherent += 1 - - sorted_laws.Cut() - -/datum/ai_laws/proc/add_supplied_law(var/number, var/law) - if(!law) - return - - if(supplied_laws.len >= number) - var/datum/ai_law/existing_law = supplied_laws[number] - if(existing_law && existing_law.law == law) - return - - if(supplied_laws.len >= number && supplied_laws[number]) - delete_law(supplied_laws[number]) - - while (src.supplied_laws.len < number) - src.supplied_laws += "" - if(state_supplied.len < supplied_laws.len) - state_supplied += 1 - - var/new_law = new/datum/ai_law/supplied(law, number) - supplied_laws[number] = new_law - if(state_supplied.len < supplied_laws.len) - state_supplied += 1 - - sorted_laws.Cut() - -/**************** -* Remove Laws * -*****************/ -/datum/ai_laws/proc/delete_law(var/datum/ai_law/law) - if(istype(law)) - law.delete_law(src) - -/datum/ai_law/proc/delete_law(var/datum/ai_laws/laws) - -/datum/ai_law/zero/delete_law(var/datum/ai_laws/laws) - laws.clear_zeroth_laws() - -/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws) - laws.internal_delete_law(laws.ion_laws, laws.state_ion, src) - -/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws) - laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src) - -/datum/ai_law/supplied/delete_law(var/datum/ai_laws/laws) - var/index = laws.supplied_laws.Find(src) - if(index) - laws.supplied_laws[index] = "" - laws.state_supplied[index] = 1 - -/datum/ai_laws/proc/internal_delete_law(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) - var/index = laws.Find(law) - if(index) - laws -= law - for(index, index < state.len, index++) - state[index] = state[index+1] - sorted_laws.Cut() - -/**************** -* Clear Laws * -****************/ -/datum/ai_laws/proc/clear_zeroth_laws() - zeroth_law = null - zeroth_law_borg = null - -/datum/ai_laws/proc/clear_ion_laws() - ion_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/clear_inherent_laws() - inherent_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/clear_supplied_laws() - supplied_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/show_laws(var/who) - sort_laws() - for(var/datum/ai_law/law in sorted_laws) - if(law == zeroth_law_borg) - continue - if(law == zeroth_law) - to_chat(who, "[law.get_index()]. [law.law]") - else - to_chat(who, "[law.get_index()]. [law.law]") - -/******************** -* Stating Laws * -********************/ -/******** -* Get * -********/ -/datum/ai_laws/proc/get_state_law(var/datum/ai_law/law) - return law.get_state_law(src) - -/datum/ai_law/proc/get_state_law(var/datum/ai_laws/laws) - -/datum/ai_law/zero/get_state_law(var/datum/ai_laws/laws) - if(src == laws.zeroth_law) - return laws.state_zeroth - -/datum/ai_law/ion/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.ion_laws, laws.state_ion, src) - -/datum/ai_law/inherent/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.inherent_laws, laws.state_inherent, src) - -/datum/ai_law/supplied/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.supplied_laws, laws.state_supplied, src) - -/datum/ai_laws/proc/get_state_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) - var/index = laws.Find(law) - if(index) - return state[index] - return 0 - -/******** -* Set * -********/ -/datum/ai_laws/proc/set_state_law(var/datum/ai_law/law, var/state) - law.set_state_law(src, state) - -/datum/ai_law/proc/set_state_law(var/datum/ai_law/law, var/state) - -/datum/ai_law/zero/set_state_law(var/datum/ai_laws/laws, var/state) - if(src == laws.zeroth_law) - laws.state_zeroth = state - -/datum/ai_law/ion/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.ion_laws, laws.state_ion, src, state) - -/datum/ai_law/inherent/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.inherent_laws, laws.state_inherent, src, state) - -/datum/ai_law/supplied/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.supplied_laws, laws.state_supplied, src, state) - -/datum/ai_laws/proc/set_state_law_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law, var/do_state) - var/index = laws.Find(law) - if(index) - state[index] = do_state +var/global/const/base_law_type = /datum/ai_laws/nanotrasen + +/datum/ai_law + var/law = "" + var/index = 0 + +/datum/ai_law/New(law, index) + src.law = law + src.index = index + +/datum/ai_law/proc/get_index() + return index + +/datum/ai_law/ion/get_index() + return ionnum() + +/datum/ai_law/zero/get_index() + return 0 + +/datum/ai_laws + var/name = "Unknown Laws" + var/law_header = "Prime Directives" + var/selectable = 0 + var/datum/ai_law/zero/zeroth_law = null + var/datum/ai_law/zero/zeroth_law_borg = null + var/list/datum/ai_law/inherent_laws = list() + var/list/datum/ai_law/supplied_laws = list() + var/list/datum/ai_law/ion/ion_laws = list() + var/list/datum/ai_law/sorted_laws = list() + + var/state_zeroth = 0 + var/list/state_ion = list() + var/list/state_inherent = list() + var/list/state_supplied = list() + +/datum/ai_laws/New() + ..() + sort_laws() + +/* General ai_law functions */ +/datum/ai_laws/proc/all_laws() + sort_laws() + return sorted_laws + +/datum/ai_laws/proc/laws_to_state() + sort_laws() + var/list/statements = new() + for(var/datum/ai_law/law in sorted_laws) + if(get_state_law(law)) + statements += law + + return statements + +/datum/ai_laws/proc/sort_laws() + if(sorted_laws.len) + return + + for(var/ion_law in ion_laws) + sorted_laws += ion_law + + if(zeroth_law) + sorted_laws += zeroth_law + + var/index = 1 + for(var/datum/ai_law/inherent_law in inherent_laws) + inherent_law.index = index++ + if(supplied_laws.len < inherent_law.index || !istype(supplied_laws[inherent_law.index], /datum/ai_law)) + sorted_laws += inherent_law + + for(var/datum/ai_law/AL in supplied_laws) + if(istype(AL)) + sorted_laws += AL + +/datum/ai_laws/proc/sync(var/mob/living/silicon/S, var/full_sync = 1) + // Add directly to laws to avoid log-spam + S.sync_zeroth(zeroth_law, zeroth_law_borg) + + if(full_sync || ion_laws.len) + S.laws.clear_ion_laws() + if(full_sync || inherent_laws.len) + S.laws.clear_inherent_laws() + if(full_sync || supplied_laws.len) + S.laws.clear_supplied_laws() + + for (var/datum/ai_law/law in ion_laws) + S.laws.add_ion_law(law.law) + for (var/datum/ai_law/law in inherent_laws) + S.laws.add_inherent_law(law.law) + for (var/datum/ai_law/law in supplied_laws) + if(law) + S.laws.add_supplied_law(law.index, law.law) + + +/mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) + if (!is_malf_or_traitor(src)) + if(zeroth_law_borg) + laws.set_zeroth_law(zeroth_law_borg.law) + else if(zeroth_law) + laws.set_zeroth_law(zeroth_law.law) + +/mob/living/silicon/ai/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) + if(zeroth_law) + laws.set_zeroth_law(zeroth_law.law, zeroth_law_borg ? zeroth_law_borg.law : null) + +/**************** +* Add Laws * +****************/ +/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null) + if(!law) + return + + zeroth_law = new(law) + if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO + zeroth_law_borg = new(law_borg) + else + zeroth_law_borg = null + sorted_laws.Cut() + +/datum/ai_laws/proc/add_ion_law(var/law) + if(!law) + return + + for(var/datum/ai_law/AL in ion_laws) + if(AL.law == law) + return + + var/new_law = new/datum/ai_law/ion(law) + ion_laws += new_law + if(state_ion.len < ion_laws.len) + state_ion += 1 + + sorted_laws.Cut() + +/datum/ai_laws/proc/add_inherent_law(var/law) + if(!law) + return + + for(var/datum/ai_law/AL in inherent_laws) + if(AL.law == law) + return + + var/new_law = new/datum/ai_law/inherent(law) + inherent_laws += new_law + if(state_inherent.len < inherent_laws.len) + state_inherent += 1 + + sorted_laws.Cut() + +/datum/ai_laws/proc/add_supplied_law(var/number, var/law) + if(!law) + return + + if(supplied_laws.len >= number) + var/datum/ai_law/existing_law = supplied_laws[number] + if(existing_law && existing_law.law == law) + return + + if(supplied_laws.len >= number && supplied_laws[number]) + delete_law(supplied_laws[number]) + + while (src.supplied_laws.len < number) + src.supplied_laws += "" + if(state_supplied.len < supplied_laws.len) + state_supplied += 1 + + var/new_law = new/datum/ai_law/supplied(law, number) + supplied_laws[number] = new_law + if(state_supplied.len < supplied_laws.len) + state_supplied += 1 + + sorted_laws.Cut() + +/**************** +* Remove Laws * +*****************/ +/datum/ai_laws/proc/delete_law(var/datum/ai_law/law) + if(istype(law)) + law.delete_law(src) + +/datum/ai_law/proc/delete_law(var/datum/ai_laws/laws) + +/datum/ai_law/zero/delete_law(var/datum/ai_laws/laws) + laws.clear_zeroth_laws() + +/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws) + laws.internal_delete_law(laws.ion_laws, laws.state_ion, src) + +/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws) + laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src) + +/datum/ai_law/supplied/delete_law(var/datum/ai_laws/laws) + var/index = laws.supplied_laws.Find(src) + if(index) + laws.supplied_laws[index] = "" + laws.state_supplied[index] = 1 + +/datum/ai_laws/proc/internal_delete_law(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) + var/index = laws.Find(law) + if(index) + laws -= law + for(index, index < state.len, index++) + state[index] = state[index+1] + sorted_laws.Cut() + +/**************** +* Clear Laws * +****************/ +/datum/ai_laws/proc/clear_zeroth_laws() + zeroth_law = null + zeroth_law_borg = null + +/datum/ai_laws/proc/clear_ion_laws() + ion_laws.Cut() + sorted_laws.Cut() + +/datum/ai_laws/proc/clear_inherent_laws() + inherent_laws.Cut() + sorted_laws.Cut() + +/datum/ai_laws/proc/clear_supplied_laws() + supplied_laws.Cut() + sorted_laws.Cut() + +/datum/ai_laws/proc/show_laws(var/who) + sort_laws() + for(var/datum/ai_law/law in sorted_laws) + if(law == zeroth_law_borg) + continue + if(law == zeroth_law) + to_chat(who, "[law.get_index()]. [law.law]") + else + to_chat(who, "[law.get_index()]. [law.law]") + +/******************** +* Stating Laws * +********************/ +/******** +* Get * +********/ +/datum/ai_laws/proc/get_state_law(var/datum/ai_law/law) + return law.get_state_law(src) + +/datum/ai_law/proc/get_state_law(var/datum/ai_laws/laws) + +/datum/ai_law/zero/get_state_law(var/datum/ai_laws/laws) + if(src == laws.zeroth_law) + return laws.state_zeroth + +/datum/ai_law/ion/get_state_law(var/datum/ai_laws/laws) + return laws.get_state_internal(laws.ion_laws, laws.state_ion, src) + +/datum/ai_law/inherent/get_state_law(var/datum/ai_laws/laws) + return laws.get_state_internal(laws.inherent_laws, laws.state_inherent, src) + +/datum/ai_law/supplied/get_state_law(var/datum/ai_laws/laws) + return laws.get_state_internal(laws.supplied_laws, laws.state_supplied, src) + +/datum/ai_laws/proc/get_state_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) + var/index = laws.Find(law) + if(index) + return state[index] + return 0 + +/******** +* Set * +********/ +/datum/ai_laws/proc/set_state_law(var/datum/ai_law/law, var/state) + law.set_state_law(src, state) + +/datum/ai_law/proc/set_state_law(var/datum/ai_law/law, var/state) + +/datum/ai_law/zero/set_state_law(var/datum/ai_laws/laws, var/state) + if(src == laws.zeroth_law) + laws.state_zeroth = state + +/datum/ai_law/ion/set_state_law(var/datum/ai_laws/laws, var/state) + laws.set_state_law_internal(laws.ion_laws, laws.state_ion, src, state) + +/datum/ai_law/inherent/set_state_law(var/datum/ai_laws/laws, var/state) + laws.set_state_law_internal(laws.inherent_laws, laws.state_inherent, src, state) + +/datum/ai_law/supplied/set_state_law(var/datum/ai_laws/laws, var/state) + laws.set_state_law_internal(laws.supplied_laws, laws.state_supplied, src, state) + +/datum/ai_laws/proc/set_state_law_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law, var/do_state) + var/index = laws.Find(law) + if(index) + state[index] = do_state diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 6a18cf4fff..9184f61174 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -1,551 +1,551 @@ - -/hook/startup/proc/createDatacore() - data_core = new /datum/datacore() - return 1 - -/datum/datacore - var/name = "datacore" - //For general station crew - var/static/list/medical = list() - var/static/list/general = list() - var/static/list/security = list() - //For offmap spawns so they can have records accessible by certain things - var/static/list/hidden_medical = list() - var/static/list/hidden_general = list() - var/static/list/hidden_security = list() - //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). - var/static/list/locked = list() - - -/datum/datacore/proc/get_manifest(monochrome, OOC,var/snowflake = FALSE) //CHOMPStation Edit - var/list/heads = new() - var/list/sec = new() - var/list/eng = new() - var/list/med = new() - var/list/sci = new() - var/list/car = new() - var/list/pla = new() //VOREStation Edit - var/list/civ = new() - var/list/bot = new() - var/list/off = new() - var/list/misc = new() - var/list/isactive = new() - var/dat = {" - -
    Event TypeStart TimeFinish Time
    [event.type][event.time_started][event.time_finished]
    - [snowflake?"":""] - - "} //Also a chompstation edit with the snowflake stuff on line 43 - var/even = 0 - // sort mobs - for(var/datum/data/record/t in data_core.general) - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/real_rank = make_list_rank(t.fields["real_rank"]) - - if(OOC) - var/active = 0 - for(var/mob/M in player_list) - if(M.real_name == name && M.client && M.client.inactivity <= 10 MINUTES) - active = 1 - break - isactive[name] = active ? "Active" : "Inactive" - else - isactive[name] = t.fields["p_stat"] - //to_world("[name]: [rank]") - //cael - to prevent multiple appearances of a player/job combination, add a continue after each line - var/department = 0 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_COMMAND)) - heads[name] = rank - department = 1 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SECURITY)) - sec[name] = rank - department = 1 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_ENGINEERING)) - eng[name] = rank - department = 1 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_MEDICAL)) - med[name] = rank - department = 1 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_RESEARCH)) - sci[name] = rank - department = 1 - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CARGO)) - car[name] = rank - department = 1 - //VOREStation Add Begin - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_PLANET)) - pla[name] = rank - department = 1 - //VOREStation Add End - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CIVILIAN)) - civ[name] = rank - department = 1 - if(!department && !(name in heads)) - misc[name] = rank - - //For the offmap spawns - if(OOC) - for(var/datum/data/record/t in hidden_general) - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/real_rank = make_list_rank(t.fields["real_rank"]) - - var/active = 0 - for(var/mob/M in player_list) - if(M.real_name == name && M.client && M.client.inactivity <= 10 MINUTES) - active = 1 - break - isactive[name] = active ? "Active" : "Inactive" - - var/datum/job/J = SSjob.get_job(real_rank) - if(J?.offmap_spawn) - off[name] = rank - - // Synthetics don't have actual records, so we will pull them from here. - for(var/mob/living/silicon/ai/ai in mob_list) - bot[ai.name] = "Artificial Intelligence" - - for(var/mob/living/silicon/robot/robot in mob_list) - // No combat/syndicate cyborgs, no drones, and no AI shells. - if(!robot.scrambledcodes && !robot.shell && !(robot.module && robot.module.hide_on_manifest())) - bot[robot.name] = "[robot.modtype] [robot.braintype]" - - - if(heads.len > 0) - dat += "" - for(name in heads) - dat += "" - even = !even - if(sec.len > 0) - dat += "" - for(name in sec) - dat += "" - even = !even - if(eng.len > 0) - dat += "" - for(name in eng) - dat += "" - even = !even - if(med.len > 0) - dat += "" - for(name in med) - dat += "" - even = !even - if(sci.len > 0) - dat += "" - for(name in sci) - dat += "" - even = !even - if(car.len > 0) - dat += "" - for(name in car) - dat += "" - even = !even - //VOREStation Edit Begin - if(pla.len > 0) - dat += "" - for(name in pla) - dat += "" - even = !even - //VOREStation Edit End - if(civ.len > 0) - dat += "" - for(name in civ) - dat += "" - even = !even - // in case somebody is insane and added them to the manifest, why not - if(bot.len > 0) - dat += "" - for(name in bot) - dat += "" - even = !even - // offmap spawners - if(off.len > 0) - dat += "" - for(name in off) - dat += "" - even = !even - // misc guys - if(misc.len > 0) - dat += "" - for(name in misc) - dat += "" - even = !even - - dat += "
    Online players: [TGS_CLIENT_COUNT]
    Crew members: [data_core.general.len]
    NameRankActivity
    Heads
    [name][heads[name]][isactive[name]]
    Security
    [name][sec[name]][isactive[name]]
    Engineering
    [name][eng[name]][isactive[name]]
    Medical
    [name][med[name]][isactive[name]]
    Science
    [name][sci[name]][isactive[name]]
    Cargo
    [name][car[name]][isactive[name]]
    Exploration
    [name][pla[name]][isactive[name]]
    Civilian
    [name][civ[name]][isactive[name]]
    Silicon
    [name][bot[name]][isactive[name]]
    Offmap Spawns
    [name][off[name]][isactive[name]]
    Miscellaneous
    [name][misc[name]][isactive[name]]
    " - dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly - dat = replacetext(dat, "\t", "") - return dat - -/* -We can't just insert in HTML into the nanoUI so we need the raw data to play with. -Instead of creating this list over and over when someone leaves their PDA open to the page -we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change -using /datum/datacore/proc/manifest_inject( ), or manifest_insert( ) -*/ - -var/global/list/PDA_Manifest = list() - -/datum/datacore/proc/get_manifest_list() - if(PDA_Manifest.len) - return - var/list/heads = list() - var/list/sec = list() - var/list/eng = list() - var/list/med = list() - var/list/sci = list() - var/list/car = list() - var/list/pla = list() // Planetside crew: Explorers, Pilots, S&S - var/list/civ = list() - var/list/bot = list() - var/list/misc = list() - for(var/datum/data/record/t in data_core.general) - var/name = sanitize(t.fields["name"]) - var/rank = sanitize(t.fields["rank"]) - var/real_rank = make_list_rank(t.fields["real_rank"]) - - var/isactive = t.fields["p_stat"] - var/department = 0 - var/depthead = 0 // Department Heads will be placed at the top of their lists. - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_COMMAND)) - heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - depthead = 1 - if(rank=="Site Manager" && heads.len != 1) - heads.Swap(1,heads.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SECURITY)) - sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && sec.len != 1) - sec.Swap(1,sec.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_ENGINEERING)) - eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && eng.len != 1) - eng.Swap(1,eng.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_MEDICAL)) - med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && med.len != 1) - med.Swap(1,med.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_RESEARCH)) - sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && sci.len != 1) - sci.Swap(1,sci.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_PLANET)) - pla[++pla.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CARGO)) - car[++car.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && car.len != 1) - car.Swap(1,car.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CIVILIAN)) - civ[++civ.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && civ.len != 1) - civ.Swap(1,civ.len) - - if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SYNTHETIC)) - bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - - if(!department && !(name in heads)) - misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) - - // Synthetics don't have actual records, so we will pull them from here. - // Synths don't have records, which is the means by which isactive is retrieved, so I'm hardcoding it to active, don't really have any better means - for(var/mob/living/silicon/ai/ai in mob_list) - bot[++bot.len] = list("name" = ai.real_name, "rank" = "Artificial Intelligence", "active" = "Active") - - for(var/mob/living/silicon/robot/robot in mob_list) - // No combat/syndicate cyborgs, no drones, and no AI shells. - if(robot.scrambledcodes || robot.shell || (robot.module && robot.module.hide_on_manifest())) - continue - - bot[++bot.len] = list("name" = robot.real_name, "rank" = "[robot.modtype] [robot.braintype]", "active" = "Active") - - - PDA_Manifest = list( - list("cat" = "Command", "elems" = heads), - list("cat" = "Security", "elems" = sec), - list("cat" = "Engineering", "elems" = eng), - list("cat" = "Medical", "elems" = med), - list("cat" = "Science", "elems" = sci), - list("cat" = "Cargo", "elems" = car), - list("cat" = "Exploration", "elems" = pla), // VOREStation Edit - list("cat" = "Civilian", "elems" = civ), - list("cat" = "Silicon", "elems" = bot), - list("cat" = "Miscellaneous", "elems" = misc) - ) - return - -/datum/datacore/proc/manifest() - spawn() - for(var/mob/living/carbon/human/H in player_list) - manifest_inject(H) - return - -/datum/datacore/proc/manifest_modify(var/name, var/assignment, var/rank) - ResetPDAManifest() - var/datum/data/record/foundrecord - var/real_title = assignment - - for(var/datum/data/record/t in data_core.general) - if (t) - if(t.fields["name"] == name) - foundrecord = t - break - - var/list/all_jobs = get_job_datums() - - for(var/datum/job/J in all_jobs) - if(J.title == rank) //If we have a rank, just default to using that. - real_title = rank - break - else if(J.title == assignment) - real_title = assignment - break - else - var/list/alttitles = get_alternate_titles(J.title) - if(assignment in alttitles) - real_title = J.title - break - - if(foundrecord) - foundrecord.fields["rank"] = assignment - foundrecord.fields["real_rank"] = real_title - -/datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H) - if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1)) - var/assignment = GetAssignment(H) - var/hidden - var/datum/job/J = SSjob.get_job(H.mind.assigned_role) - hidden = J?.offmap_spawn - - H.ImmediateOverlayUpdate() - - var/id = generate_record_id() - //General Record - var/datum/data/record/G = CreateGeneralRecord(H, id, hidden) - G.fields["name"] = H.real_name - G.fields["real_rank"] = H.mind.assigned_role - G.fields["rank"] = assignment - G.fields["age"] = H.age - G.fields["languages"] = list2text(H.languages,", ") - if(H.get_FBP_type()) - G.fields["brain_type"] = H.get_FBP_type() - else - G.fields["brain_type"] = "Organic" - G.fields["fingerprint"] = md5(H.dna.uni_identity) - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - G.fields["sex"] = gender2text(H.gender) - G.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit - G.fields["home_system"] = H.home_system - G.fields["birthplace"] = H.birthplace - G.fields["citizenship"] = H.citizenship - G.fields["faction"] = H.personal_faction - G.fields["religion"] = H.religion - if(H.gen_record && !jobban_isbanned(H, "Records")) - G.fields["notes"] = H.gen_record - - //Medical Record - var/datum/data/record/M = CreateMedicalRecord(H.real_name, id, hidden) - M.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit - M.fields["b_type"] = H.b_type - M.fields["blood_reagent"] = H.species.blood_reagents - M.fields["b_dna"] = H.dna.unique_enzymes - M.fields["id_gender"] = gender2text(H.identifying_gender) - if(H.get_FBP_type()) - M.fields["brain_type"] = H.get_FBP_type() - else - M.fields["brain_type"] = "Organic" - if(H.med_record && !jobban_isbanned(H, "Records")) - M.fields["notes"] = H.med_record - - //Security Record - var/datum/data/record/S = CreateSecurityRecord(H.real_name, id, hidden) - S.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit - if(H.get_FBP_type()) - S.fields["brain_type"] = H.get_FBP_type() - else - S.fields["brain_type"] = "Organic" - if(H.sec_record && !jobban_isbanned(H, "Records")) - S.fields["notes"] = H.sec_record - - //Locked Record - var/datum/data/record/L = new() - L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") - L.fields["name"] = H.real_name - L.fields["rank"] = H.mind.assigned_role - L.fields["age"] = H.age - L.fields["languages"] = list2text(H.languages,", ") - L.fields["fingerprint"] = md5(H.dna.uni_identity) - L.fields["sex"] = gender2text(H.gender) - L.fields["id_gender"] = gender2text(H.identifying_gender) - if(H.get_FBP_type()) - L.fields["brain_type"] = H.get_FBP_type() - else - L.fields["brain_type"] = "Organic" - L.fields["b_type"] = H.b_type - L.fields["b_dna"] = H.dna.unique_enzymes - L.fields["enzymes"] = H.dna.SE // Used in respawning - L.fields["identity"] = H.dna.UI // " - L.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit - L.fields["home_system"] = H.home_system - L.fields["birthplace"] = H.birthplace - L.fields["citizenship"] = H.citizenship - L.fields["faction"] = H.personal_faction - L.fields["religion"] = H.religion - L.fields["image"] = icon(cached_character_icon(H), dir = SOUTH) - L.fields["antagfac"] = H.antag_faction - L.fields["antagvis"] = H.antag_vis - L.fields["offmap"] = hidden - if(H.exploit_record && !jobban_isbanned(H, "Records")) - L.fields["exploit_record"] = H.exploit_record - else - L.fields["exploit_record"] = "No additional information acquired." - locked += L - return - -/proc/generate_record_id() - return add_zero(num2hex(rand(1, 65535)), 4) //no point generating higher numbers because of the limitations of num2hex - -/datum/datacore/proc/CreateGeneralRecord(var/mob/living/carbon/human/H, var/id, var/hidden) - ResetPDAManifest() - var/icon/front - var/icon/side - if(H) - var/icon/charicon = cached_character_icon(H) - front = icon(charicon, dir = SOUTH, frame = 1) - side = icon(charicon, dir = WEST, frame = 1) - else // Sending null things through browse_rsc() makes a runtime and breaks the console trying to view the record. - front = icon('html/images/no_image32.png') - side = icon('html/images/no_image32.png') - - if(!id) - id = text("[]", add_zero(num2hex(rand(1, 65536)), 4)) - var/datum/data/record/G = new /datum/data/record() - G.name = "Employee Record #[id]" - G.fields["name"] = "New Record" - G.fields["id"] = id - G.fields["rank"] = "Unassigned" - G.fields["real_rank"] = "Unassigned" - G.fields["sex"] = "Unknown" - G.fields["age"] = "Unknown" - G.fields["languages"] = "Unknown" - G.fields["brain_type"] = "Unknown" - G.fields["fingerprint"] = "Unknown" - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - G.fields["species"] = SPECIES_HUMAN - G.fields["home_system"] = "Unknown" - G.fields["birthplace"] = "Unknown" - G.fields["citizenship"] = "Unknown" - G.fields["faction"] = "Unknown" - G.fields["religion"] = "Unknown" - G.fields["photo_front"] = front - G.fields["photo_side"] = side - G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(front)]'" - G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(side)]'" - G.fields["notes"] = "No notes found." - if(hidden) - hidden_general += G - else - general += G - - return G - -/datum/datacore/proc/CreateSecurityRecord(var/name, var/id, var/hidden) - ResetPDAManifest() - var/datum/data/record/R = new /datum/data/record() - R.name = "Security Record #[id]" - R.fields["name"] = name - R.fields["species"] = SPECIES_HUMAN - R.fields["id"] = id - R.fields["brain_type"] = "Unknown" - R.fields["criminal"] = "None" - R.fields["mi_crim"] = "None" - R.fields["mi_crim_d"] = "No minor crime convictions." - R.fields["ma_crim"] = "None" - R.fields["ma_crim_d"] = "No major crime convictions." - R.fields["notes"] = "No notes." - R.fields["notes"] = "No notes." - if(hidden) - hidden_security += R - else - security += R - - return R - -/datum/datacore/proc/CreateMedicalRecord(var/name, var/id, var/hidden) - ResetPDAManifest() - var/datum/data/record/M = new() - M.name = "Medical Record #[id]" - M.fields["id"] = id - M.fields["name"] = name - M.fields["species"] = SPECIES_HUMAN - M.fields["b_type"] = "AB+" - M.fields["b_dna"] = md5(name) - M.fields["id_gender"] = "Unknown" - M.fields["brain_type"] = "Unknown" - 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 found." - if(hidden) - hidden_medical += M - else - medical += M - - return M - -/datum/datacore/proc/ResetPDAManifest() - if(PDA_Manifest.len) - PDA_Manifest.Cut() - -/proc/find_general_record(field, value) - return find_record(field, value, data_core.general) - -/proc/find_medical_record(field, value) - return find_record(field, value, data_core.medical) - -/proc/find_security_record(field, value) - return find_record(field, value, data_core.security) - -/proc/find_record(field, value, list/L) - for(var/datum/data/record/R in L) - if(R.fields[field] == value) - return R - -/proc/GetAssignment(var/mob/living/carbon/human/H) - if(H.mind.role_alt_title) - return H.mind.role_alt_title - else if(H.mind.assigned_role) - return H.mind.assigned_role - else if(H.job) - return H.job - else - return "Unassigned" + +/hook/startup/proc/createDatacore() + data_core = new /datum/datacore() + return 1 + +/datum/datacore + var/name = "datacore" + //For general station crew + var/static/list/medical = list() + var/static/list/general = list() + var/static/list/security = list() + //For offmap spawns so they can have records accessible by certain things + var/static/list/hidden_medical = list() + var/static/list/hidden_general = list() + var/static/list/hidden_security = list() + //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). + var/static/list/locked = list() + + +/datum/datacore/proc/get_manifest(monochrome, OOC,var/snowflake = FALSE) //CHOMPStation Edit + var/list/heads = new() + var/list/sec = new() + var/list/eng = new() + var/list/med = new() + var/list/sci = new() + var/list/car = new() + var/list/pla = new() //VOREStation Edit + var/list/civ = new() + var/list/bot = new() + var/list/off = new() + var/list/misc = new() + var/list/isactive = new() + var/dat = {" + + + [snowflake?"":""] + + "} //Also a chompstation edit with the snowflake stuff on line 43 + var/even = 0 + // sort mobs + for(var/datum/data/record/t in data_core.general) + var/name = t.fields["name"] + var/rank = t.fields["rank"] + var/real_rank = make_list_rank(t.fields["real_rank"]) + + if(OOC) + var/active = 0 + for(var/mob/M in player_list) + if(M.real_name == name && M.client && M.client.inactivity <= 10 MINUTES) + active = 1 + break + isactive[name] = active ? "Active" : "Inactive" + else + isactive[name] = t.fields["p_stat"] + //to_world("[name]: [rank]") + //cael - to prevent multiple appearances of a player/job combination, add a continue after each line + var/department = 0 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_COMMAND)) + heads[name] = rank + department = 1 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SECURITY)) + sec[name] = rank + department = 1 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_ENGINEERING)) + eng[name] = rank + department = 1 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_MEDICAL)) + med[name] = rank + department = 1 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_RESEARCH)) + sci[name] = rank + department = 1 + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CARGO)) + car[name] = rank + department = 1 + //VOREStation Add Begin + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_PLANET)) + pla[name] = rank + department = 1 + //VOREStation Add End + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CIVILIAN)) + civ[name] = rank + department = 1 + if(!department && !(name in heads)) + misc[name] = rank + + //For the offmap spawns + if(OOC) + for(var/datum/data/record/t in hidden_general) + var/name = t.fields["name"] + var/rank = t.fields["rank"] + var/real_rank = make_list_rank(t.fields["real_rank"]) + + var/active = 0 + for(var/mob/M in player_list) + if(M.real_name == name && M.client && M.client.inactivity <= 10 MINUTES) + active = 1 + break + isactive[name] = active ? "Active" : "Inactive" + + var/datum/job/J = SSjob.get_job(real_rank) + if(J?.offmap_spawn) + off[name] = rank + + // Synthetics don't have actual records, so we will pull them from here. + for(var/mob/living/silicon/ai/ai in mob_list) + bot[ai.name] = "Artificial Intelligence" + + for(var/mob/living/silicon/robot/robot in mob_list) + // No combat/syndicate cyborgs, no drones, and no AI shells. + if(!robot.scrambledcodes && !robot.shell && !(robot.module && robot.module.hide_on_manifest())) + bot[robot.name] = "[robot.modtype] [robot.braintype]" + + + if(heads.len > 0) + dat += "" + for(name in heads) + dat += "" + even = !even + if(sec.len > 0) + dat += "" + for(name in sec) + dat += "" + even = !even + if(eng.len > 0) + dat += "" + for(name in eng) + dat += "" + even = !even + if(med.len > 0) + dat += "" + for(name in med) + dat += "" + even = !even + if(sci.len > 0) + dat += "" + for(name in sci) + dat += "" + even = !even + if(car.len > 0) + dat += "" + for(name in car) + dat += "" + even = !even + //VOREStation Edit Begin + if(pla.len > 0) + dat += "" + for(name in pla) + dat += "" + even = !even + //VOREStation Edit End + if(civ.len > 0) + dat += "" + for(name in civ) + dat += "" + even = !even + // in case somebody is insane and added them to the manifest, why not + if(bot.len > 0) + dat += "" + for(name in bot) + dat += "" + even = !even + // offmap spawners + if(off.len > 0) + dat += "" + for(name in off) + dat += "" + even = !even + // misc guys + if(misc.len > 0) + dat += "" + for(name in misc) + dat += "" + even = !even + + dat += "
    Online players: [TGS_CLIENT_COUNT]
    Crew members: [data_core.general.len]
    NameRankActivity
    Heads
    [name][heads[name]][isactive[name]]
    Security
    [name][sec[name]][isactive[name]]
    Engineering
    [name][eng[name]][isactive[name]]
    Medical
    [name][med[name]][isactive[name]]
    Science
    [name][sci[name]][isactive[name]]
    Cargo
    [name][car[name]][isactive[name]]
    Exploration
    [name][pla[name]][isactive[name]]
    Civilian
    [name][civ[name]][isactive[name]]
    Silicon
    [name][bot[name]][isactive[name]]
    Offmap Spawns
    [name][off[name]][isactive[name]]
    Miscellaneous
    [name][misc[name]][isactive[name]]
    " + dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly + dat = replacetext(dat, "\t", "") + return dat + +/* +We can't just insert in HTML into the nanoUI so we need the raw data to play with. +Instead of creating this list over and over when someone leaves their PDA open to the page +we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change +using /datum/datacore/proc/manifest_inject( ), or manifest_insert( ) +*/ + +var/global/list/PDA_Manifest = list() + +/datum/datacore/proc/get_manifest_list() + if(PDA_Manifest.len) + return + var/list/heads = list() + var/list/sec = list() + var/list/eng = list() + var/list/med = list() + var/list/sci = list() + var/list/car = list() + var/list/pla = list() // Planetside crew: Explorers, Pilots, S&S + var/list/civ = list() + var/list/bot = list() + var/list/misc = list() + for(var/datum/data/record/t in data_core.general) + var/name = sanitize(t.fields["name"]) + var/rank = sanitize(t.fields["rank"]) + var/real_rank = make_list_rank(t.fields["real_rank"]) + + var/isactive = t.fields["p_stat"] + var/department = 0 + var/depthead = 0 // Department Heads will be placed at the top of their lists. + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_COMMAND)) + heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + depthead = 1 + if(rank=="Site Manager" && heads.len != 1) + heads.Swap(1,heads.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SECURITY)) + sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sec.len != 1) + sec.Swap(1,sec.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_ENGINEERING)) + eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && eng.len != 1) + eng.Swap(1,eng.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_MEDICAL)) + med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && med.len != 1) + med.Swap(1,med.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_RESEARCH)) + sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sci.len != 1) + sci.Swap(1,sci.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_PLANET)) + pla[++pla.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CARGO)) + car[++car.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && car.len != 1) + car.Swap(1,car.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_CIVILIAN)) + civ[++civ.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && civ.len != 1) + civ.Swap(1,civ.len) + + if(SSjob.is_job_in_department(real_rank, DEPARTMENT_SYNTHETIC)) + bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + + if(!department && !(name in heads)) + misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) + + // Synthetics don't have actual records, so we will pull them from here. + // Synths don't have records, which is the means by which isactive is retrieved, so I'm hardcoding it to active, don't really have any better means + for(var/mob/living/silicon/ai/ai in mob_list) + bot[++bot.len] = list("name" = ai.real_name, "rank" = "Artificial Intelligence", "active" = "Active") + + for(var/mob/living/silicon/robot/robot in mob_list) + // No combat/syndicate cyborgs, no drones, and no AI shells. + if(robot.scrambledcodes || robot.shell || (robot.module && robot.module.hide_on_manifest())) + continue + + bot[++bot.len] = list("name" = robot.real_name, "rank" = "[robot.modtype] [robot.braintype]", "active" = "Active") + + + PDA_Manifest = list( + list("cat" = "Command", "elems" = heads), + list("cat" = "Security", "elems" = sec), + list("cat" = "Engineering", "elems" = eng), + list("cat" = "Medical", "elems" = med), + list("cat" = "Science", "elems" = sci), + list("cat" = "Cargo", "elems" = car), + list("cat" = "Exploration", "elems" = pla), // VOREStation Edit + list("cat" = "Civilian", "elems" = civ), + list("cat" = "Silicon", "elems" = bot), + list("cat" = "Miscellaneous", "elems" = misc) + ) + return + +/datum/datacore/proc/manifest() + spawn() + for(var/mob/living/carbon/human/H in player_list) + manifest_inject(H) + return + +/datum/datacore/proc/manifest_modify(var/name, var/assignment, var/rank) + ResetPDAManifest() + var/datum/data/record/foundrecord + var/real_title = assignment + + for(var/datum/data/record/t in data_core.general) + if (t) + if(t.fields["name"] == name) + foundrecord = t + break + + var/list/all_jobs = get_job_datums() + + for(var/datum/job/J in all_jobs) + if(J.title == rank) //If we have a rank, just default to using that. + real_title = rank + break + else if(J.title == assignment) + real_title = assignment + break + else + var/list/alttitles = get_alternate_titles(J.title) + if(assignment in alttitles) + real_title = J.title + break + + if(foundrecord) + foundrecord.fields["rank"] = assignment + foundrecord.fields["real_rank"] = real_title + +/datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H) + if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1)) + var/assignment = GetAssignment(H) + var/hidden + var/datum/job/J = SSjob.get_job(H.mind.assigned_role) + hidden = J?.offmap_spawn + + H.ImmediateOverlayUpdate() + + var/id = generate_record_id() + //General Record + var/datum/data/record/G = CreateGeneralRecord(H, id, hidden) + G.fields["name"] = H.real_name + G.fields["real_rank"] = H.mind.assigned_role + G.fields["rank"] = assignment + G.fields["age"] = H.age + G.fields["languages"] = list2text(H.languages,", ") + if(H.get_FBP_type()) + G.fields["brain_type"] = H.get_FBP_type() + else + G.fields["brain_type"] = "Organic" + G.fields["fingerprint"] = md5(H.dna.uni_identity) + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + G.fields["sex"] = gender2text(H.gender) + G.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit + G.fields["home_system"] = H.home_system + G.fields["birthplace"] = H.birthplace + G.fields["citizenship"] = H.citizenship + G.fields["faction"] = H.personal_faction + G.fields["religion"] = H.religion + if(H.gen_record && !jobban_isbanned(H, "Records")) + G.fields["notes"] = H.gen_record + + //Medical Record + var/datum/data/record/M = CreateMedicalRecord(H.real_name, id, hidden) + M.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit + M.fields["b_type"] = H.b_type + M.fields["blood_reagent"] = H.species.blood_reagents + M.fields["b_dna"] = H.dna.unique_enzymes + M.fields["id_gender"] = gender2text(H.identifying_gender) + if(H.get_FBP_type()) + M.fields["brain_type"] = H.get_FBP_type() + else + M.fields["brain_type"] = "Organic" + if(H.med_record && !jobban_isbanned(H, "Records")) + M.fields["notes"] = H.med_record + + //Security Record + var/datum/data/record/S = CreateSecurityRecord(H.real_name, id, hidden) + S.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit + if(H.get_FBP_type()) + S.fields["brain_type"] = H.get_FBP_type() + else + S.fields["brain_type"] = "Organic" + if(H.sec_record && !jobban_isbanned(H, "Records")) + S.fields["notes"] = H.sec_record + + //Locked Record + var/datum/data/record/L = new() + L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") + L.fields["name"] = H.real_name + L.fields["rank"] = H.mind.assigned_role + L.fields["age"] = H.age + L.fields["languages"] = list2text(H.languages,", ") + L.fields["fingerprint"] = md5(H.dna.uni_identity) + L.fields["sex"] = gender2text(H.gender) + L.fields["id_gender"] = gender2text(H.identifying_gender) + if(H.get_FBP_type()) + L.fields["brain_type"] = H.get_FBP_type() + else + L.fields["brain_type"] = "Organic" + L.fields["b_type"] = H.b_type + L.fields["b_dna"] = H.dna.unique_enzymes + L.fields["enzymes"] = H.dna.SE // Used in respawning + L.fields["identity"] = H.dna.UI // " + L.fields["species"] = "[H.custom_species ? "[H.custom_species] ([H.species.name])" : H.species.name]" //VOREStation Edit + L.fields["home_system"] = H.home_system + L.fields["birthplace"] = H.birthplace + L.fields["citizenship"] = H.citizenship + L.fields["faction"] = H.personal_faction + L.fields["religion"] = H.religion + L.fields["image"] = icon(cached_character_icon(H), dir = SOUTH) + L.fields["antagfac"] = H.antag_faction + L.fields["antagvis"] = H.antag_vis + L.fields["offmap"] = hidden + if(H.exploit_record && !jobban_isbanned(H, "Records")) + L.fields["exploit_record"] = H.exploit_record + else + L.fields["exploit_record"] = "No additional information acquired." + locked += L + return + +/proc/generate_record_id() + return add_zero(num2hex(rand(1, 65535)), 4) //no point generating higher numbers because of the limitations of num2hex + +/datum/datacore/proc/CreateGeneralRecord(var/mob/living/carbon/human/H, var/id, var/hidden) + ResetPDAManifest() + var/icon/front + var/icon/side + if(H) + var/icon/charicon = cached_character_icon(H) + front = icon(charicon, dir = SOUTH, frame = 1) + side = icon(charicon, dir = WEST, frame = 1) + else // Sending null things through browse_rsc() makes a runtime and breaks the console trying to view the record. + front = icon('html/images/no_image32.png') + side = icon('html/images/no_image32.png') + + if(!id) + id = text("[]", add_zero(num2hex(rand(1, 65536)), 4)) + var/datum/data/record/G = new /datum/data/record() + G.name = "Employee Record #[id]" + G.fields["name"] = "New Record" + G.fields["id"] = id + G.fields["rank"] = "Unassigned" + G.fields["real_rank"] = "Unassigned" + G.fields["sex"] = "Unknown" + G.fields["age"] = "Unknown" + G.fields["languages"] = "Unknown" + G.fields["brain_type"] = "Unknown" + G.fields["fingerprint"] = "Unknown" + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + G.fields["species"] = SPECIES_HUMAN + G.fields["home_system"] = "Unknown" + G.fields["birthplace"] = "Unknown" + G.fields["citizenship"] = "Unknown" + G.fields["faction"] = "Unknown" + G.fields["religion"] = "Unknown" + G.fields["photo_front"] = front + G.fields["photo_side"] = side + G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(front)]'" + G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(side)]'" + G.fields["notes"] = "No notes found." + if(hidden) + hidden_general += G + else + general += G + + return G + +/datum/datacore/proc/CreateSecurityRecord(var/name, var/id, var/hidden) + ResetPDAManifest() + var/datum/data/record/R = new /datum/data/record() + R.name = "Security Record #[id]" + R.fields["name"] = name + R.fields["species"] = SPECIES_HUMAN + R.fields["id"] = id + R.fields["brain_type"] = "Unknown" + R.fields["criminal"] = "None" + R.fields["mi_crim"] = "None" + R.fields["mi_crim_d"] = "No minor crime convictions." + R.fields["ma_crim"] = "None" + R.fields["ma_crim_d"] = "No major crime convictions." + R.fields["notes"] = "No notes." + R.fields["notes"] = "No notes." + if(hidden) + hidden_security += R + else + security += R + + return R + +/datum/datacore/proc/CreateMedicalRecord(var/name, var/id, var/hidden) + ResetPDAManifest() + var/datum/data/record/M = new() + M.name = "Medical Record #[id]" + M.fields["id"] = id + M.fields["name"] = name + M.fields["species"] = SPECIES_HUMAN + M.fields["b_type"] = "AB+" + M.fields["b_dna"] = md5(name) + M.fields["id_gender"] = "Unknown" + M.fields["brain_type"] = "Unknown" + 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 found." + if(hidden) + hidden_medical += M + else + medical += M + + return M + +/datum/datacore/proc/ResetPDAManifest() + if(PDA_Manifest.len) + PDA_Manifest.Cut() + +/proc/find_general_record(field, value) + return find_record(field, value, data_core.general) + +/proc/find_medical_record(field, value) + return find_record(field, value, data_core.medical) + +/proc/find_security_record(field, value) + return find_record(field, value, data_core.security) + +/proc/find_record(field, value, list/L) + for(var/datum/data/record/R in L) + if(R.fields[field] == value) + return R + +/proc/GetAssignment(var/mob/living/carbon/human/H) + if(H.mind.role_alt_title) + return H.mind.role_alt_title + else if(H.mind.assigned_role) + return H.mind.assigned_role + else if(H.job) + return H.job + else + return "Unassigned" diff --git a/code/datums/game_masters/_common.dm b/code/datums/game_masters/_common.dm index 84efe57c73..142287f510 100644 --- a/code/datums/game_masters/_common.dm +++ b/code/datums/game_masters/_common.dm @@ -1,6 +1,6 @@ -// Push button, receive event. -// Returns a selected event datum. -/datum/game_master/proc/choose_event() - -/datum/game_master/proc/log_game_master(message) +// Push button, receive event. +// Returns a selected event datum. +/datum/game_master/proc/choose_event() + +/datum/game_master/proc/log_game_master(message) // SSgame_master.log_game_master(message) // VOREStation Edit - We don't use SSgame_master yet. \ No newline at end of file diff --git a/code/datums/game_masters/default.dm b/code/datums/game_masters/default.dm index 8f69b296af..46d39ab44e 100644 --- a/code/datums/game_masters/default.dm +++ b/code/datums/game_masters/default.dm @@ -1,87 +1,87 @@ -// The default game master tries to choose events with these goals in mind. -// * Don't choose an event if the crew can't take it. E.g. no meteors after half of the crew died. -// * Try to involve lots of people, particuarly in active departments. -// * Avoid giving events to the same department multiple times in a row. -/datum/game_master/default - // If an event was done for a specific department, it is written here, so it doesn't do it again. - var/last_department_used = null - - -/datum/game_master/default/choose_event() - log_game_master("Now starting event decision.") - - var/list/most_active_departments = metric.assess_all_departments(3, list(last_department_used)) - var/list/best_events = decide_best_events(most_active_departments) - - if(LAZYLEN(best_events)) - log_game_master("Got [best_events.len] choice\s for the next event.") - var/list/weighted_events = list() - - for(var/datum/event2/meta/event as anything in best_events) - var/weight = event.get_weight() - if(weight <= 0) - continue - weighted_events[event] = weight - log_game_master("Filtered down to [weighted_events.len] choice\s.") - - var/datum/event2/meta/choice = pickweight(weighted_events) - - if(choice) - log_game_master("[choice.name] was chosen, and is now being ran.") - last_department_used = LAZYACCESS(choice.departments, 1) - return choice - -/datum/game_master/default/proc/decide_best_events(list/most_active_departments) - if(!LAZYLEN(most_active_departments)) // Server's empty? - log_game_master("Game Master failed to find any active departments.") - return list() - - var/list/best_events = list() - if(most_active_departments.len >= 2) - var/list/top_two = list(most_active_departments[1], most_active_departments[2]) - best_events = filter_events_by_departments(top_two) - - if(LAZYLEN(best_events)) // We found something for those two, let's do it. - return best_events - - // Otherwise we probably couldn't find something for the second highest group, so let's ignore them. - best_events = filter_events_by_departments(most_active_departments[1]) - - if(LAZYLEN(best_events)) - return best_events - - // At this point we should expand our horizons. - best_events = filter_events_by_departments(list(DEPARTMENT_EVERYONE)) - - if(LAZYLEN(best_events)) - return best_events - - // Just give a random event if for some reason it still can't make up its mind. - best_events = filter_events_by_departments() - - if(LAZYLEN(best_events)) - return best_events - - log_game_master("Game Master failed to find a suitable event, something very wrong is going on.") - return list() - -// Filters the available events down to events for specific departments. -// Pass DEPARTMENT_EVERYONE if you want events that target the general population, like gravity failure. -// If no list is passed, all the events will be returned. -/datum/game_master/default/proc/filter_events_by_departments(list/departments) - . = list() - for(var/datum/event2/meta/event as anything in SSgame_master.available_events) - if(!event.enabled) - continue - if(event.chaotic_threshold && !ignore_round_chaos) - if(SSgame_master.danger > event.chaotic_threshold) - continue - // An event has to involve all of these departments to pass. - var/viable = TRUE - if(LAZYLEN(departments)) - for(var/department in departments) - if(!LAZYFIND(departments, department)) - viable = FALSE - break - if(viable) - . += event +// The default game master tries to choose events with these goals in mind. +// * Don't choose an event if the crew can't take it. E.g. no meteors after half of the crew died. +// * Try to involve lots of people, particuarly in active departments. +// * Avoid giving events to the same department multiple times in a row. +/datum/game_master/default + // If an event was done for a specific department, it is written here, so it doesn't do it again. + var/last_department_used = null + + +/datum/game_master/default/choose_event() + log_game_master("Now starting event decision.") + + var/list/most_active_departments = metric.assess_all_departments(3, list(last_department_used)) + var/list/best_events = decide_best_events(most_active_departments) + + if(LAZYLEN(best_events)) + log_game_master("Got [best_events.len] choice\s for the next event.") + var/list/weighted_events = list() + + for(var/datum/event2/meta/event as anything in best_events) + var/weight = event.get_weight() + if(weight <= 0) + continue + weighted_events[event] = weight + log_game_master("Filtered down to [weighted_events.len] choice\s.") + + var/datum/event2/meta/choice = pickweight(weighted_events) + + if(choice) + log_game_master("[choice.name] was chosen, and is now being ran.") + last_department_used = LAZYACCESS(choice.departments, 1) + return choice + +/datum/game_master/default/proc/decide_best_events(list/most_active_departments) + if(!LAZYLEN(most_active_departments)) // Server's empty? + log_game_master("Game Master failed to find any active departments.") + return list() + + var/list/best_events = list() + if(most_active_departments.len >= 2) + var/list/top_two = list(most_active_departments[1], most_active_departments[2]) + best_events = filter_events_by_departments(top_two) + + if(LAZYLEN(best_events)) // We found something for those two, let's do it. + return best_events + + // Otherwise we probably couldn't find something for the second highest group, so let's ignore them. + best_events = filter_events_by_departments(most_active_departments[1]) + + if(LAZYLEN(best_events)) + return best_events + + // At this point we should expand our horizons. + best_events = filter_events_by_departments(list(DEPARTMENT_EVERYONE)) + + if(LAZYLEN(best_events)) + return best_events + + // Just give a random event if for some reason it still can't make up its mind. + best_events = filter_events_by_departments() + + if(LAZYLEN(best_events)) + return best_events + + log_game_master("Game Master failed to find a suitable event, something very wrong is going on.") + return list() + +// Filters the available events down to events for specific departments. +// Pass DEPARTMENT_EVERYONE if you want events that target the general population, like gravity failure. +// If no list is passed, all the events will be returned. +/datum/game_master/default/proc/filter_events_by_departments(list/departments) + . = list() + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) + if(!event.enabled) + continue + if(event.chaotic_threshold && !ignore_round_chaos) + if(SSgame_master.danger > event.chaotic_threshold) + continue + // An event has to involve all of these departments to pass. + var/viable = TRUE + if(LAZYLEN(departments)) + for(var/department in departments) + if(!LAZYFIND(departments, department)) + viable = FALSE + break + if(viable) + . += event diff --git a/code/datums/game_masters/other_game_masters.dm b/code/datums/game_masters/other_game_masters.dm index cd45483251..65d0d65789 100644 --- a/code/datums/game_masters/other_game_masters.dm +++ b/code/datums/game_masters/other_game_masters.dm @@ -1,42 +1,42 @@ -// The `classic` game master tries to act like the old system, choosing events without any specific goals. -// * Has no goals, and instead operates purely off of the weights of the events it has. -// * Does not react to danger at all. -/datum/game_master/classic/choose_event() - var/list/weighted_events = list() - for(var/datum/event2/meta/event as anything in SSgame_master.available_events) - if(!event.enabled) - continue - weighted_events[event] = event.get_weight() - - var/datum/event2/meta/choice = pickweight(weighted_events) - - if(choice) - log_game_master("[choice.name] was chosen, and is now being ran.") - return choice - - -// The `super_random` game master chooses events purely at random, ignoring weights entirely. -// * Has no goals, and instead chooses randomly, ignoring weights. -// * Does not react to danger at all. -/datum/game_master/super_random/choose_event() - return pick(SSgame_master.available_events) - - -// The `brutal` game master tries to run dangerous events frequently. -// * Chaotic events have their weights artifically boosted. -// * Ignores accumulated danger. -/datum/game_master/brutal - ignore_round_chaos = TRUE - -/datum/game_master/brutal/choose_event() - var/list/weighted_events = list() - for(var/datum/event2/meta/event as anything in SSgame_master.available_events) - if(!event.enabled) - continue - weighted_events[event] = event.get_weight() + (event.chaos * 2) - - var/datum/event2/meta/choice = pickweight(weighted_events) - - if(choice) - log_game_master("[choice.name] was chosen, and is now being ran.") - return choice +// The `classic` game master tries to act like the old system, choosing events without any specific goals. +// * Has no goals, and instead operates purely off of the weights of the events it has. +// * Does not react to danger at all. +/datum/game_master/classic/choose_event() + var/list/weighted_events = list() + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) + if(!event.enabled) + continue + weighted_events[event] = event.get_weight() + + var/datum/event2/meta/choice = pickweight(weighted_events) + + if(choice) + log_game_master("[choice.name] was chosen, and is now being ran.") + return choice + + +// The `super_random` game master chooses events purely at random, ignoring weights entirely. +// * Has no goals, and instead chooses randomly, ignoring weights. +// * Does not react to danger at all. +/datum/game_master/super_random/choose_event() + return pick(SSgame_master.available_events) + + +// The `brutal` game master tries to run dangerous events frequently. +// * Chaotic events have their weights artifically boosted. +// * Ignores accumulated danger. +/datum/game_master/brutal + ignore_round_chaos = TRUE + +/datum/game_master/brutal/choose_event() + var/list/weighted_events = list() + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) + if(!event.enabled) + continue + weighted_events[event] = event.get_weight() + (event.chaos * 2) + + var/datum/event2/meta/choice = pickweight(weighted_events) + + if(choice) + log_game_master("[choice.name] was chosen, and is now being ran.") + return choice diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index d60db6e25c..be38a7a5a2 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,161 +1,161 @@ -#define FORWARD -1 -#define BACKWARD 1 - - -// As of August 4th, 2018, these datums are only used in Mech construction. -/datum/construction - var/list/steps - var/atom/holder - var/result - var/list/steps_desc - -/datum/construction/New(atom) - ..() - holder = atom - if(!holder) //don't want this without a holder - spawn - qdel(src) - set_desc(steps.len) - return - -/datum/construction/proc/next_step() - steps.len-- - if(!steps.len) - spawn_result() - else - set_desc(steps.len) - return - -/datum/construction/proc/action(var/obj/item/I,mob/user as mob) - return - -/datum/construction/proc/check_step(var/obj/item/I,mob/user as mob) //check last step only - var/valid_step = is_right_key(I) - if(valid_step) - if(custom_action(valid_step, I, user)) - next_step() - return 1 - return 0 - -/datum/construction/proc/is_right_key(var/obj/item/I) // returns current step num if I is of the right type. - var/list/L = steps[steps.len] - switch(L["key"]) - if(IS_SCREWDRIVER) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - return steps.len - if(IS_CROWBAR) - if(I.has_tool_quality(TOOL_CROWBAR)) - return steps.len - if(IS_WIRECUTTER) - if(I.has_tool_quality(TOOL_WIRECUTTER)) - return steps.len - if(IS_WRENCH) - if(I.has_tool_quality(TOOL_WRENCH)) - return steps.len - if(IS_WELDER) - if(I.has_tool_quality(IS_WELDER)) - return steps.len - - if(istype(I, L["key"])) - return steps.len - return 0 - -/datum/construction/proc/custom_action(step, I, user) - return 1 - -/datum/construction/proc/check_all_steps(var/obj/item/I,mob/user as mob) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) - var/list/L = steps[i]; - if(istype(I, L["key"])) - if(custom_action(i, I, user)) - steps[i]=null;//stupid byond list from list removal... - listclearnulls(steps); - if(!steps.len) - spawn_result() - return 1 - return 0 - - -/datum/construction/proc/spawn_result() - if(result) - new result(get_turf(holder)) - spawn() - qdel(holder) - return - -/datum/construction/proc/set_desc(index as num) - var/list/step = steps[index] - holder.desc = step["desc"] - return - - -// Reversible -/datum/construction/reversible - var/index - -/datum/construction/reversible/New(atom) - ..() - index = steps.len - return - -/datum/construction/reversible/proc/update_index(diff as num) - index+=diff - if(index==0) - spawn_result() - else - set_desc(index) - return - -/datum/construction/reversible/is_right_key(var/obj/item/I) // returns index step - var/list/L = steps[index] - - switch(L["key"]) - if(IS_SCREWDRIVER) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - return FORWARD - if(IS_CROWBAR) - if(I.has_tool_quality(TOOL_CROWBAR)) - return FORWARD - if(IS_WIRECUTTER) - if(I.has_tool_quality(TOOL_WIRECUTTER)) - return FORWARD - if(IS_WRENCH) - if(I.has_tool_quality(TOOL_WRENCH)) - return FORWARD - if(IS_WELDER) - if(I.has_tool_quality(IS_WELDER)) - return FORWARD - - switch(L["backkey"]) - if(IS_SCREWDRIVER) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - return BACKWARD - if(IS_CROWBAR) - if(I.has_tool_quality(TOOL_CROWBAR)) - return BACKWARD - if(IS_WIRECUTTER) - if(I.has_tool_quality(TOOL_WIRECUTTER)) - return BACKWARD - if(IS_WRENCH) - if(I.has_tool_quality(TOOL_WRENCH)) - return BACKWARD - if(IS_WELDER) - if(I.has_tool_quality(IS_WELDER)) - return BACKWARD - - if(istype(I, L["key"])) - return FORWARD //to the first step -> forward - else if(L["backkey"] && istype(I, L["backkey"])) - return BACKWARD //to the last step -> backwards - return 0 - -/datum/construction/reversible/check_step(var/obj/item/I,mob/user as mob) - var/diff = is_right_key(I) - if(diff) - if(custom_action(index, diff, I, user)) - update_index(diff) - return 1 - return 0 - -/datum/construction/reversible/custom_action(index, diff, I, user) +#define FORWARD -1 +#define BACKWARD 1 + + +// As of August 4th, 2018, these datums are only used in Mech construction. +/datum/construction + var/list/steps + var/atom/holder + var/result + var/list/steps_desc + +/datum/construction/New(atom) + ..() + holder = atom + if(!holder) //don't want this without a holder + spawn + qdel(src) + set_desc(steps.len) + return + +/datum/construction/proc/next_step() + steps.len-- + if(!steps.len) + spawn_result() + else + set_desc(steps.len) + return + +/datum/construction/proc/action(var/obj/item/I,mob/user as mob) + return + +/datum/construction/proc/check_step(var/obj/item/I,mob/user as mob) //check last step only + var/valid_step = is_right_key(I) + if(valid_step) + if(custom_action(valid_step, I, user)) + next_step() + return 1 + return 0 + +/datum/construction/proc/is_right_key(var/obj/item/I) // returns current step num if I is of the right type. + var/list/L = steps[steps.len] + switch(L["key"]) + if(IS_SCREWDRIVER) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + return steps.len + if(IS_CROWBAR) + if(I.has_tool_quality(TOOL_CROWBAR)) + return steps.len + if(IS_WIRECUTTER) + if(I.has_tool_quality(TOOL_WIRECUTTER)) + return steps.len + if(IS_WRENCH) + if(I.has_tool_quality(TOOL_WRENCH)) + return steps.len + if(IS_WELDER) + if(I.has_tool_quality(IS_WELDER)) + return steps.len + + if(istype(I, L["key"])) + return steps.len + return 0 + +/datum/construction/proc/custom_action(step, I, user) + return 1 + +/datum/construction/proc/check_all_steps(var/obj/item/I,mob/user as mob) //check all steps, remove matching one. + for(var/i=1;i<=steps.len;i++) + var/list/L = steps[i]; + if(istype(I, L["key"])) + if(custom_action(i, I, user)) + steps[i]=null;//stupid byond list from list removal... + listclearnulls(steps); + if(!steps.len) + spawn_result() + return 1 + return 0 + + +/datum/construction/proc/spawn_result() + if(result) + new result(get_turf(holder)) + spawn() + qdel(holder) + return + +/datum/construction/proc/set_desc(index as num) + var/list/step = steps[index] + holder.desc = step["desc"] + return + + +// Reversible +/datum/construction/reversible + var/index + +/datum/construction/reversible/New(atom) + ..() + index = steps.len + return + +/datum/construction/reversible/proc/update_index(diff as num) + index+=diff + if(index==0) + spawn_result() + else + set_desc(index) + return + +/datum/construction/reversible/is_right_key(var/obj/item/I) // returns index step + var/list/L = steps[index] + + switch(L["key"]) + if(IS_SCREWDRIVER) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + return FORWARD + if(IS_CROWBAR) + if(I.has_tool_quality(TOOL_CROWBAR)) + return FORWARD + if(IS_WIRECUTTER) + if(I.has_tool_quality(TOOL_WIRECUTTER)) + return FORWARD + if(IS_WRENCH) + if(I.has_tool_quality(TOOL_WRENCH)) + return FORWARD + if(IS_WELDER) + if(I.has_tool_quality(IS_WELDER)) + return FORWARD + + switch(L["backkey"]) + if(IS_SCREWDRIVER) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + return BACKWARD + if(IS_CROWBAR) + if(I.has_tool_quality(TOOL_CROWBAR)) + return BACKWARD + if(IS_WIRECUTTER) + if(I.has_tool_quality(TOOL_WIRECUTTER)) + return BACKWARD + if(IS_WRENCH) + if(I.has_tool_quality(TOOL_WRENCH)) + return BACKWARD + if(IS_WELDER) + if(I.has_tool_quality(IS_WELDER)) + return BACKWARD + + if(istype(I, L["key"])) + return FORWARD //to the first step -> forward + else if(L["backkey"] && istype(I, L["backkey"])) + return BACKWARD //to the last step -> backwards + return 0 + +/datum/construction/reversible/check_step(var/obj/item/I,mob/user as mob) + var/diff = is_right_key(I) + if(diff) + if(custom_action(index, diff, I, user)) + update_index(diff) + return 1 + return 0 + +/datum/construction/reversible/custom_action(index, diff, I, user) return 1 \ No newline at end of file diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm index bc3661470e..64a17ab0a0 100644 --- a/code/datums/helper_datums/events.dm +++ b/code/datums/helper_datums/events.dm @@ -1,67 +1,67 @@ -/* - * WARRANTY VOID IF CODE USED - */ - - -/datum/events - var/list/events - -/datum/events/New() - ..() - events = new - -/datum/events/proc/addEventType(event_type as text) - if(!(event_type in events) || !islist(events[event_type])) - events[event_type] = list() - return 1 - return - - -// Arguments: event_type as text, proc_holder as datum, proc_name as text -// Returns: New event, null on error. -/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text) - if(!event_type || !proc_holder || !proc_name) - return - addEventType(event_type) - var/list/event = events[event_type] - var/datum/event/E = new /datum/event(proc_holder,proc_name) - event += E - return E - -// Arguments: event_type as text, any number of additional arguments to pass to event handler -// Returns: null -/datum/events/proc/fireEvent() - //to_world("Events in [args[1]] called") - var/list/event = listgetindex(events,args[1]) - if(istype(event)) - spawn(-1) - for(var/datum/event/E in event) - if(!E.Fire(arglist(args.Copy(2)))) - clearEvent(args[1],E) - return - -// Arguments: event_type as text, E as /datum/event -// Returns: 1 if event cleared, null on error -/datum/events/proc/clearEvent(event_type as text, datum/event/E) - if(!event_type || !E) - return - var/list/event = listgetindex(events,event_type) - event -= E - return 1 - - -/datum/event - var/listener - var/proc_name - -/datum/event/New(tlistener,tprocname) - listener = tlistener - proc_name = tprocname - return ..() - -/datum/event/proc/Fire() - //to_world("Event fired") - if(listener) - call(listener,proc_name)(arglist(args)) - return 1 +/* + * WARRANTY VOID IF CODE USED + */ + + +/datum/events + var/list/events + +/datum/events/New() + ..() + events = new + +/datum/events/proc/addEventType(event_type as text) + if(!(event_type in events) || !islist(events[event_type])) + events[event_type] = list() + return 1 + return + + +// Arguments: event_type as text, proc_holder as datum, proc_name as text +// Returns: New event, null on error. +/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text) + if(!event_type || !proc_holder || !proc_name) + return + addEventType(event_type) + var/list/event = events[event_type] + var/datum/event/E = new /datum/event(proc_holder,proc_name) + event += E + return E + +// Arguments: event_type as text, any number of additional arguments to pass to event handler +// Returns: null +/datum/events/proc/fireEvent() + //to_world("Events in [args[1]] called") + var/list/event = listgetindex(events,args[1]) + if(istype(event)) + spawn(-1) + for(var/datum/event/E in event) + if(!E.Fire(arglist(args.Copy(2)))) + clearEvent(args[1],E) + return + +// Arguments: event_type as text, E as /datum/event +// Returns: 1 if event cleared, null on error +/datum/events/proc/clearEvent(event_type as text, datum/event/E) + if(!event_type || !E) + return + var/list/event = listgetindex(events,event_type) + event -= E + return 1 + + +/datum/event + var/listener + var/proc_name + +/datum/event/New(tlistener,tprocname) + listener = tlistener + proc_name = tprocname + return ..() + +/datum/event/proc/Fire() + //to_world("Event fired") + if(listener) + call(listener,proc_name)(arglist(args)) + return 1 return \ No newline at end of file diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 68aa27e2d1..bed7140449 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -1,84 +1,84 @@ -GLOBAL_DATUM(revdata, /datum/getrev) - -/datum/getrev - var/branch - var/revision - var/date - var/showinfo - var/list/testmerge = list() - -/datum/getrev/New() - if(world.TgsAvailable()) // Try TGS maybe - testmerge = world.TgsTestMerges() - var/datum/tgs_revision_information/REV = world.TgsRevision() - if(REV) - revision = REV.origin_commit || REV.commit - branch = "-Using TGS-" // TGS doesn't provide branch info yet - date = "-Using TGS-" // Or date - - if(!revision) // File parse method - var/list/head_branch = file2list(".git/HEAD", "\n") - if(head_branch.len) - branch = copytext(head_branch[1], 17) - - var/list/head_log = file2list(".git/logs/HEAD", "\n") - for(var/line=head_log.len, line>=1, line--) - if(head_log[line]) - var/list/last_entry = splittext(head_log[line], " ") - if(last_entry.len < 2) continue - revision = last_entry[2] - // Get date/time - if(last_entry.len >= 5) - var/unix_time = text2num(last_entry[5]) - if(unix_time) - date = unix2date(unix_time) - break - - to_world_log("-Revision Info-") - to_world_log("Branch: [branch]") - to_world_log("Date: [date]") - to_world_log("Revision: [revision]") - -/datum/getrev/proc/GetTestMergeInfo(header = TRUE) - . = list() - if(!testmerge.len) - return - if(header) - . += "The following pull requests are currently test merged:" - for(var/datum/tgs_revision_information/test_merge/tm as anything in testmerge) - var/cm = tm.head_commit //CHOMPStation Edit TGS4 - var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11)) - if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) - continue - . += "#[tm.number][details]" - -/client/verb/showrevinfo() - set category = "OOC" - set name = "Show Server Revision" - set desc = "Check the current server code revision" - - if(!GLOB.revdata) - to_chat(src, "Please wait until server initializations are complete.") - return - - var/list/msg = list() - - if(GLOB.revdata.revision) - msg += "Server revision: B:[GLOB.revdata.branch] D:[GLOB.revdata.date]" - if(config.githuburl) - msg += "Commit: [GLOB.revdata.revision]" - else - msg += "Commit: GLOB.revdata.revision" - else - msg += "Server revision: Unknown" - - if(world.TgsAvailable()) - var/datum/tgs_version/version = world.TgsVersion() - msg += "TGS version: [version.raw_parameter]" - var/datum/tgs_version/api_version = world.TgsApiVersion() - msg += "DMAPI version: [api_version.raw_parameter]" - - if(GLOB.revdata.testmerge.len) - msg += GLOB.revdata.GetTestMergeInfo() - - to_chat(src, msg.Join("
    ")) +GLOBAL_DATUM(revdata, /datum/getrev) + +/datum/getrev + var/branch + var/revision + var/date + var/showinfo + var/list/testmerge = list() + +/datum/getrev/New() + if(world.TgsAvailable()) // Try TGS maybe + testmerge = world.TgsTestMerges() + var/datum/tgs_revision_information/REV = world.TgsRevision() + if(REV) + revision = REV.origin_commit || REV.commit + branch = "-Using TGS-" // TGS doesn't provide branch info yet + date = "-Using TGS-" // Or date + + if(!revision) // File parse method + var/list/head_branch = file2list(".git/HEAD", "\n") + if(head_branch.len) + branch = copytext(head_branch[1], 17) + + var/list/head_log = file2list(".git/logs/HEAD", "\n") + for(var/line=head_log.len, line>=1, line--) + if(head_log[line]) + var/list/last_entry = splittext(head_log[line], " ") + if(last_entry.len < 2) continue + revision = last_entry[2] + // Get date/time + if(last_entry.len >= 5) + var/unix_time = text2num(last_entry[5]) + if(unix_time) + date = unix2date(unix_time) + break + + to_world_log("-Revision Info-") + to_world_log("Branch: [branch]") + to_world_log("Date: [date]") + to_world_log("Revision: [revision]") + +/datum/getrev/proc/GetTestMergeInfo(header = TRUE) + . = list() + if(!testmerge.len) + return + if(header) + . += "The following pull requests are currently test merged:" + for(var/datum/tgs_revision_information/test_merge/tm as anything in testmerge) + var/cm = tm.head_commit //CHOMPStation Edit TGS4 + var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11)) + if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) + continue + . += "#[tm.number][details]" + +/client/verb/showrevinfo() + set category = "OOC" + set name = "Show Server Revision" + set desc = "Check the current server code revision" + + if(!GLOB.revdata) + to_chat(src, "Please wait until server initializations are complete.") + return + + var/list/msg = list() + + if(GLOB.revdata.revision) + msg += "Server revision: B:[GLOB.revdata.branch] D:[GLOB.revdata.date]" + if(config.githuburl) + msg += "Commit: [GLOB.revdata.revision]" + else + msg += "Commit: GLOB.revdata.revision" + else + msg += "Server revision: Unknown" + + if(world.TgsAvailable()) + var/datum/tgs_version/version = world.TgsVersion() + msg += "TGS version: [version.raw_parameter]" + var/datum/tgs_version/api_version = world.TgsApiVersion() + msg += "DMAPI version: [api_version.raw_parameter]" + + if(GLOB.revdata.testmerge.len) + msg += GLOB.revdata.GetTestMergeInfo() + + to_chat(src, msg.Join("
    ")) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 270f52410c..2ca2e783cd 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -1,242 +1,242 @@ -var/bluespace_item_types = newlist(/obj/item/weapon/storage/backpack/holding, -/obj/item/weapon/storage/bag/trash/holding, -/obj/item/weapon/storage/pouch/holding, -/obj/item/weapon/storage/belt/utility/holding, -/obj/item/weapon/storage/belt/medical/holding -) - -//wrapper -/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE) //CHOMPStation Edit - new /datum/teleport/instant/science(arglist(args)) - return - -/datum/teleport - var/atom/movable/teleatom //atom to teleport - var/atom/destination //destination to teleport to - var/precision = 0 //teleport precision - var/datum/effect/effect/system/effectin //effect to show right before teleportation - var/datum/effect/effect/system/effectout //effect to show right after teleportation - var/soundin //soundfile to play before teleportation - var/soundout //soundfile to play after teleportation - var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) - var/local = TRUE //VOREStation Add - If false, can teleport from/to any z-level - var/bohsafe = FALSE //CHOMP Add - if true, can teleport safely with a BoH - - -/datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE) //CHOMPStation Edit - ..() - if(!initTeleport(arglist(args))) - return 0 - return 1 - -/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout,local,bohsafe) //CHOMPStation Edit - if(!setTeleatom(ateleatom)) - return 0 - if(!setDestination(adestination)) - return 0 - src.bohsafe = bohsafe - if(!setPrecision(aprecision)) - return 0 - setEffects(aeffectin,aeffectout) - setForceTeleport(afteleport) - setSounds(asoundin,asoundout) - src.local = local // VOREStation Add - return 1 - -//must succeed -/datum/teleport/proc/setPrecision(aprecision) - if(isnum(aprecision)) - precision = aprecision - return 1 - return 0 - -//must succeed -/datum/teleport/proc/setDestination(atom/adestination) - if(istype(adestination)) - destination = adestination - return 1 - return 0 - -//must succeed in most cases -/datum/teleport/proc/setTeleatom(atom/movable/ateleatom) - if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) - qdel(ateleatom) - return 0 - if(istype(ateleatom)) - teleatom = ateleatom - return 1 - return 0 - -//custom effects must be properly set up first for instant-type teleports -//optional -/datum/teleport/proc/setEffects(datum/effect/effect/system/aeffectin=null,datum/effect/effect/system/aeffectout=null) - effectin = istype(aeffectin) ? aeffectin : null - effectout = istype(aeffectout) ? aeffectout : null - return 1 - -//optional -/datum/teleport/proc/setForceTeleport(afteleport) - force_teleport = afteleport - return 1 - -//optional -/datum/teleport/proc/setSounds(asoundin=null,asoundout=null) - soundin = isfile(asoundin) ? asoundin : null - soundout = isfile(asoundout) ? asoundout : null - return 1 - -//placeholder -/datum/teleport/proc/teleportChecks() - return 1 - -/datum/teleport/proc/playSpecials(atom/location,datum/effect/effect/system/effect,sound) - if(location) - if(effect) - spawn(-1) - src = null - effect.attach(location) - effect.start() - if(sound) - spawn(-1) - src = null - playsound(location,sound,60,1) - return - -//do the monkey dance -/datum/teleport/proc/doTeleport() - - var/turf/destturf - var/turf/curturf = get_turf(teleatom) - if(precision) - var/list/posturfs = circlerangeturfs(destination,precision) - destturf = safepick(posturfs) - else - destturf = get_turf(destination) - - if(!destturf || !curturf) - return 0 - - playSpecials(curturf,effectin,soundin) - - var/obj/structure/bed/chair/C = null - if(isliving(teleatom)) - var/mob/living/L = teleatom - if(L.buckled) - C = L.buckled - if(attempt_vr(src,"try_televore",args)) return //VOREStation Edit - Telenoms. - if(force_teleport) - teleatom.forceMove(destturf) - playSpecials(destturf,effectout,soundout) - else - if(teleatom.Move(destturf)) - playSpecials(destturf,effectout,soundout) - if(C) - C.forceMove(destturf) - - return 1 - -/datum/teleport/proc/teleport() - if(teleportChecks()) - return doTeleport() - return 0 - -/datum/teleport/instant //teleports when datum is created - -/datum/teleport/instant/New(ateleatom, adestination, aprecision=0, afteleport=1, bohsafe=0, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) //CHOMP edit - if(..()) - teleport() - return - - -/datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout) - if(!aeffectin || !aeffectout) - var/datum/effect/effect/system/spark_spread/aeffect = new - aeffect.set_up(5, 1, teleatom) - //CHOMP add start - var/datum/effect/effect/system/spark_spread/aeffect2 = new - aeffect2.set_up(5, 1, teleatom) //This looks stupid, but it doesn't work unless I do - //CHOMP add end - effectin = effectin || aeffect - effectout = effectout || aeffect2 //CHOMP edit - return 1 - else - return ..() - -/datum/teleport/instant/science/setPrecision(aprecision) - ..() - if(bohsafe) //CHOMPedit - return 1 //CHOMPedit - - var/list/bluespace_things = newlist() - - for (var/item in bluespace_item_types) - if (istype(teleatom, item)) - precision = rand(1, 100) - bluespace_things |= teleatom.search_contents_for(item) - - //VOREStation Addition Start: Prevent taurriding abuse - if(istype(teleatom, /mob/living)) - var/mob/living/L = teleatom - if(LAZYLEN(L.buckled_mobs)) - for(var/mob/rider in L.buckled_mobs) - for (var/item in bluespace_item_types) - bluespace_things |= rider.search_contents_for(item) - //VOREStation Addition End: Prevent taurriding abuse - - if(bluespace_things.len) - precision = max(rand(1,100)*bluespace_things.len,100) - if(istype(teleatom, /mob/living)) - var/mob/living/MM = teleatom - to_chat(MM, "The Bluespace interface on your [teleatom] interferes with the teleport!") - return 1 - -/datum/teleport/instant/science/teleportChecks() - if(istype(teleatom, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite - teleatom.visible_message("\The [teleatom] bounces off of the portal!") - return 0 - - if(!isemptylist(teleatom.search_contents_for(/obj/item/weapon/disk/nuclear))) - if(istype(teleatom, /mob/living)) - var/mob/living/MM = teleatom - MM.visible_message("\The [MM] bounces off of the portal!","Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.") - else - teleatom.visible_message("\The [teleatom] bounces off of the portal!") - return 0 - /* VOREStation Removal - if(destination.z in using_map.admin_levels) //CentCom z-level - if(istype(teleatom, /obj/mecha)) - var/obj/mecha/MM = teleatom - to_chat(MM.occupant, "\The [MM] would not survive the jump to a location so far away!") - return 0 - if(!isemptylist(teleatom.search_contents_for(/obj/item/weapon/storage/backpack/holding))) - teleatom.visible_message("\The [teleatom] bounces off of the portal!") - return 0 - */ //VOREStation Removal End - //VOREStation Edit Start - var/obstructed = 0 - var/turf/dest_turf = get_turf(destination) - if(local && !(dest_turf.z in using_map.player_levels)) - if(istype(teleatom, /mob/living)) - to_chat(teleatom, "The portal refuses to carry you that far away!") - return 0 - else if(istype(destination.loc, /obj/belly)) - var/obj/belly/destination_belly = destination.loc - var/mob/living/telenommer = destination_belly.owner - if(istype(telenommer)) - if(istype(teleatom, /obj/machinery) || istype(teleatom, /obj/structure)) - return 0 - else if(!isliving(teleatom)) - return 1 - else - var/mob/living/telemob = teleatom - if(telemob.can_be_drop_prey && telenommer.can_be_drop_pred) - return 1 - obstructed = 1 - else if(!((isturf(destination) && !destination.density) || (isturf(destination.loc) && !destination.loc.density)) || !destination.x || !destination.y || !destination.z) //If we're inside something or outside universe - obstructed = 1 - to_chat(teleatom, "Something is blocking way on the other side!") - if(obstructed) - return 0 - else - return 1 - //VOREStation Edit End +var/bluespace_item_types = newlist(/obj/item/weapon/storage/backpack/holding, +/obj/item/weapon/storage/bag/trash/holding, +/obj/item/weapon/storage/pouch/holding, +/obj/item/weapon/storage/belt/utility/holding, +/obj/item/weapon/storage/belt/medical/holding +) + +//wrapper +/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE) //CHOMPStation Edit + new /datum/teleport/instant/science(arglist(args)) + return + +/datum/teleport + var/atom/movable/teleatom //atom to teleport + var/atom/destination //destination to teleport to + var/precision = 0 //teleport precision + var/datum/effect/effect/system/effectin //effect to show right before teleportation + var/datum/effect/effect/system/effectout //effect to show right after teleportation + var/soundin //soundfile to play before teleportation + var/soundout //soundfile to play after teleportation + var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) + var/local = TRUE //VOREStation Add - If false, can teleport from/to any z-level + var/bohsafe = FALSE //CHOMP Add - if true, can teleport safely with a BoH + + +/datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE) //CHOMPStation Edit + ..() + if(!initTeleport(arglist(args))) + return 0 + return 1 + +/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout,local,bohsafe) //CHOMPStation Edit + if(!setTeleatom(ateleatom)) + return 0 + if(!setDestination(adestination)) + return 0 + src.bohsafe = bohsafe + if(!setPrecision(aprecision)) + return 0 + setEffects(aeffectin,aeffectout) + setForceTeleport(afteleport) + setSounds(asoundin,asoundout) + src.local = local // VOREStation Add + return 1 + +//must succeed +/datum/teleport/proc/setPrecision(aprecision) + if(isnum(aprecision)) + precision = aprecision + return 1 + return 0 + +//must succeed +/datum/teleport/proc/setDestination(atom/adestination) + if(istype(adestination)) + destination = adestination + return 1 + return 0 + +//must succeed in most cases +/datum/teleport/proc/setTeleatom(atom/movable/ateleatom) + if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) + qdel(ateleatom) + return 0 + if(istype(ateleatom)) + teleatom = ateleatom + return 1 + return 0 + +//custom effects must be properly set up first for instant-type teleports +//optional +/datum/teleport/proc/setEffects(datum/effect/effect/system/aeffectin=null,datum/effect/effect/system/aeffectout=null) + effectin = istype(aeffectin) ? aeffectin : null + effectout = istype(aeffectout) ? aeffectout : null + return 1 + +//optional +/datum/teleport/proc/setForceTeleport(afteleport) + force_teleport = afteleport + return 1 + +//optional +/datum/teleport/proc/setSounds(asoundin=null,asoundout=null) + soundin = isfile(asoundin) ? asoundin : null + soundout = isfile(asoundout) ? asoundout : null + return 1 + +//placeholder +/datum/teleport/proc/teleportChecks() + return 1 + +/datum/teleport/proc/playSpecials(atom/location,datum/effect/effect/system/effect,sound) + if(location) + if(effect) + spawn(-1) + src = null + effect.attach(location) + effect.start() + if(sound) + spawn(-1) + src = null + playsound(location,sound,60,1) + return + +//do the monkey dance +/datum/teleport/proc/doTeleport() + + var/turf/destturf + var/turf/curturf = get_turf(teleatom) + if(precision) + var/list/posturfs = circlerangeturfs(destination,precision) + destturf = safepick(posturfs) + else + destturf = get_turf(destination) + + if(!destturf || !curturf) + return 0 + + playSpecials(curturf,effectin,soundin) + + var/obj/structure/bed/chair/C = null + if(isliving(teleatom)) + var/mob/living/L = teleatom + if(L.buckled) + C = L.buckled + if(attempt_vr(src,"try_televore",args)) return //VOREStation Edit - Telenoms. + if(force_teleport) + teleatom.forceMove(destturf) + playSpecials(destturf,effectout,soundout) + else + if(teleatom.Move(destturf)) + playSpecials(destturf,effectout,soundout) + if(C) + C.forceMove(destturf) + + return 1 + +/datum/teleport/proc/teleport() + if(teleportChecks()) + return doTeleport() + return 0 + +/datum/teleport/instant //teleports when datum is created + +/datum/teleport/instant/New(ateleatom, adestination, aprecision=0, afteleport=1, bohsafe=0, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) //CHOMP edit + if(..()) + teleport() + return + + +/datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout) + if(!aeffectin || !aeffectout) + var/datum/effect/effect/system/spark_spread/aeffect = new + aeffect.set_up(5, 1, teleatom) + //CHOMP add start + var/datum/effect/effect/system/spark_spread/aeffect2 = new + aeffect2.set_up(5, 1, teleatom) //This looks stupid, but it doesn't work unless I do + //CHOMP add end + effectin = effectin || aeffect + effectout = effectout || aeffect2 //CHOMP edit + return 1 + else + return ..() + +/datum/teleport/instant/science/setPrecision(aprecision) + ..() + if(bohsafe) //CHOMPedit + return 1 //CHOMPedit + + var/list/bluespace_things = newlist() + + for (var/item in bluespace_item_types) + if (istype(teleatom, item)) + precision = rand(1, 100) + bluespace_things |= teleatom.search_contents_for(item) + + //VOREStation Addition Start: Prevent taurriding abuse + if(istype(teleatom, /mob/living)) + var/mob/living/L = teleatom + if(LAZYLEN(L.buckled_mobs)) + for(var/mob/rider in L.buckled_mobs) + for (var/item in bluespace_item_types) + bluespace_things |= rider.search_contents_for(item) + //VOREStation Addition End: Prevent taurriding abuse + + if(bluespace_things.len) + precision = max(rand(1,100)*bluespace_things.len,100) + if(istype(teleatom, /mob/living)) + var/mob/living/MM = teleatom + to_chat(MM, "The Bluespace interface on your [teleatom] interferes with the teleport!") + return 1 + +/datum/teleport/instant/science/teleportChecks() + if(istype(teleatom, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite + teleatom.visible_message("\The [teleatom] bounces off of the portal!") + return 0 + + if(!isemptylist(teleatom.search_contents_for(/obj/item/weapon/disk/nuclear))) + if(istype(teleatom, /mob/living)) + var/mob/living/MM = teleatom + MM.visible_message("\The [MM] bounces off of the portal!","Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.") + else + teleatom.visible_message("\The [teleatom] bounces off of the portal!") + return 0 + /* VOREStation Removal + if(destination.z in using_map.admin_levels) //CentCom z-level + if(istype(teleatom, /obj/mecha)) + var/obj/mecha/MM = teleatom + to_chat(MM.occupant, "\The [MM] would not survive the jump to a location so far away!") + return 0 + if(!isemptylist(teleatom.search_contents_for(/obj/item/weapon/storage/backpack/holding))) + teleatom.visible_message("\The [teleatom] bounces off of the portal!") + return 0 + */ //VOREStation Removal End + //VOREStation Edit Start + var/obstructed = 0 + var/turf/dest_turf = get_turf(destination) + if(local && !(dest_turf.z in using_map.player_levels)) + if(istype(teleatom, /mob/living)) + to_chat(teleatom, "The portal refuses to carry you that far away!") + return 0 + else if(istype(destination.loc, /obj/belly)) + var/obj/belly/destination_belly = destination.loc + var/mob/living/telenommer = destination_belly.owner + if(istype(telenommer)) + if(istype(teleatom, /obj/machinery) || istype(teleatom, /obj/structure)) + return 0 + else if(!isliving(teleatom)) + return 1 + else + var/mob/living/telemob = teleatom + if(telemob.can_be_drop_prey && telenommer.can_be_drop_pred) + return 1 + obstructed = 1 + else if(!((isturf(destination) && !destination.density) || (isturf(destination.loc) && !destination.loc.density)) || !destination.x || !destination.y || !destination.z) //If we're inside something or outside universe + obstructed = 1 + to_chat(teleatom, "Something is blocking way on the other side!") + if(obstructed) + return 0 + else + return 1 + //VOREStation Edit End diff --git a/code/datums/helper_datums/topic_input.dm b/code/datums/helper_datums/topic_input.dm index 809a6c4bc5..bf07340225 100644 --- a/code/datums/helper_datums/topic_input.dm +++ b/code/datums/helper_datums/topic_input.dm @@ -1,60 +1,60 @@ -/datum/topic_input - var/href - var/list/href_list - -/datum/topic_input/New(thref,list/thref_list) - href = thref - href_list = thref_list.Copy() - return - -/datum/topic_input/proc/get(i) - return listgetindex(href_list,i) - -/datum/topic_input/proc/getAndLocate(i) - var/t = get(i) - if(t) - t = locate(t) - return t || null - -/datum/topic_input/proc/getNum(i) - var/t = get(i) - if(t) - t = text2num(t) - return isnum(t) ? t : null - -/datum/topic_input/proc/getObj(i) - var/t = getAndLocate(i) - return isobj(t) ? t : null - -/datum/topic_input/proc/getMob(i) - var/t = getAndLocate(i) - return ismob(t) ? t : null - -/datum/topic_input/proc/getTurf(i) - var/t = getAndLocate(i) - return isturf(t) ? t : null - -/datum/topic_input/proc/getAtom(i) - return getType(i,/atom) - -/datum/topic_input/proc/getArea(i) - var/t = getAndLocate(i) - return isarea(t) ? t : null - -/datum/topic_input/proc/getStr(i)//params should always be text, but... - var/t = get(i) - return istext(t) ? t : null - -/datum/topic_input/proc/getType(i,type) - var/t = getAndLocate(i) - return istype(t,type) ? t : null - -/datum/topic_input/proc/getPath(i) - var/t = get(i) - if(t) - t = text2path(t) - return ispath(t) ? t : null - -/datum/topic_input/proc/getList(i) - var/t = getAndLocate(i) +/datum/topic_input + var/href + var/list/href_list + +/datum/topic_input/New(thref,list/thref_list) + href = thref + href_list = thref_list.Copy() + return + +/datum/topic_input/proc/get(i) + return listgetindex(href_list,i) + +/datum/topic_input/proc/getAndLocate(i) + var/t = get(i) + if(t) + t = locate(t) + return t || null + +/datum/topic_input/proc/getNum(i) + var/t = get(i) + if(t) + t = text2num(t) + return isnum(t) ? t : null + +/datum/topic_input/proc/getObj(i) + var/t = getAndLocate(i) + return isobj(t) ? t : null + +/datum/topic_input/proc/getMob(i) + var/t = getAndLocate(i) + return ismob(t) ? t : null + +/datum/topic_input/proc/getTurf(i) + var/t = getAndLocate(i) + return isturf(t) ? t : null + +/datum/topic_input/proc/getAtom(i) + return getType(i,/atom) + +/datum/topic_input/proc/getArea(i) + var/t = getAndLocate(i) + return isarea(t) ? t : null + +/datum/topic_input/proc/getStr(i)//params should always be text, but... + var/t = get(i) + return istext(t) ? t : null + +/datum/topic_input/proc/getType(i,type) + var/t = getAndLocate(i) + return istype(t,type) ? t : null + +/datum/topic_input/proc/getPath(i) + var/t = get(i) + if(t) + t = text2path(t) + return ispath(t) ? t : null + +/datum/topic_input/proc/getList(i) + var/t = getAndLocate(i) return islist(t) ? t : null \ No newline at end of file diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 3b8e9c9ffc..58c64ba0ae 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -1,129 +1,129 @@ -/* - output_atoms (list of atoms) The destination(s) for the sounds - - 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 - - start_sound (soundfile) Played before starting the mid_sounds loop - start_length (num) How long to wait before starting the main loop after playing start_sound - - end_sound (soundfile) The sound played after the main loop has concluded - - chance (num) Chance per loop to play a mid_sound - volume (num) Sound output volume - muted (bool) Private. Used to stop the sound loop. - max_loops (num) The max amount of loops to run for. - direct (bool) If true plays directly to provided atoms instead of from them - opacity_check (bool) If true, things behind walls/opaque things won't hear the sounds. - pref_check (type) If set to a /datum/client_preference type, will check if the hearer has that preference active before playing it to them. - volume_chan (type) If set to a specific volume channel via the incoming argument, we tell the playsound proc to modulate volume based on that channel //CHOMPedit - exclusive (bool) If true, only one of this sound is allowed to play. Relies on if started is true or not. If true, it will not start another loop until it is false. -*/ -/datum/looping_sound - var/list/atom/output_atoms - var/mid_sounds - var/mid_length - var/start_sound - var/start_length - var/end_sound - var/chance - var/volume = 100 - var/max_loops - var/direct - var/vary - var/extra_range - var/opacity_check - var/pref_check - var/volume_chan //CHOMPedit - var/exclusive - var/falloff // CHOMPEdit: Add Falloff - - var/timerid - var/started - -/datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, disable_direct=FALSE) - if(!mid_sounds) - WARNING("A looping sound datum was created without sounds to play.") - return - - output_atoms = _output_atoms - if(disable_direct) - direct = FALSE - - if(start_immediately) - start() - -/datum/looping_sound/Destroy() - stop() - output_atoms = null - return ..() - -/datum/looping_sound/proc/start(atom/add_thing, skip_start_sound = FALSE) - if(add_thing) - output_atoms |= add_thing - if(timerid) - return - if(skip_start_sound && (!exclusive && !started)) // Skip start sounds optionally, check if we're exclusive AND started already - sound_loop() - started = TRUE - return - if(exclusive && started) // Prevents a sound from starting multiple times - return // Don't start this loop. - on_start() - started = TRUE - -/datum/looping_sound/proc/stop(atom/remove_thing, skip_stop_sound = FALSE) - if(remove_thing) - output_atoms -= remove_thing - if(!timerid) - return - if(!skip_stop_sound) - on_stop() - deltimer(timerid) - timerid = null - started = FALSE - -/datum/looping_sound/proc/sound_loop(starttime) - if(max_loops && world.time >= starttime + mid_length * max_loops) - stop() - return - if(!chance || prob(chance)) - play(get_sound(starttime)) - if(!timerid) - timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), mid_length, TIMER_STOPPABLE | TIMER_LOOP) - -/datum/looping_sound/proc/play(soundfile) - var/list/atoms_cache = output_atoms - var/sound/S = sound(soundfile) - if(direct) - S.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) - if(ismob(thing)) - var/mob/M = thing - if(pref_check && !M.is_preference_enabled(pref_check)) - continue - SEND_SOUND(thing, S) - else - playsound(thing, S, volume, vary, extra_range, falloff = falloff, ignore_walls = !opacity_check, preference = pref_check, volume_channel = volume_chan) // CHOMPEdit - Weather volume channel CHOMPEdit again: falloff - -/datum/looping_sound/proc/get_sound(starttime, _mid_sounds) - if(!_mid_sounds) - . = mid_sounds - else - . = _mid_sounds - while(!isfile(.) && !isnull(.)) - . = pickweight(.) - -/datum/looping_sound/proc/on_start() - var/start_wait = 1 // On TG this is 0, however it needs to be 1 to work around an issue. - if(start_sound) - play(start_sound) - start_wait = start_length - addtimer(CALLBACK(src, PROC_REF(sound_loop)), start_wait) - -/datum/looping_sound/proc/on_stop() - if(end_sound) - play(end_sound) +/* + output_atoms (list of atoms) The destination(s) for the sounds + + 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 + + start_sound (soundfile) Played before starting the mid_sounds loop + start_length (num) How long to wait before starting the main loop after playing start_sound + + end_sound (soundfile) The sound played after the main loop has concluded + + chance (num) Chance per loop to play a mid_sound + volume (num) Sound output volume + muted (bool) Private. Used to stop the sound loop. + max_loops (num) The max amount of loops to run for. + direct (bool) If true plays directly to provided atoms instead of from them + opacity_check (bool) If true, things behind walls/opaque things won't hear the sounds. + pref_check (type) If set to a /datum/client_preference type, will check if the hearer has that preference active before playing it to them. + volume_chan (type) If set to a specific volume channel via the incoming argument, we tell the playsound proc to modulate volume based on that channel //CHOMPedit + exclusive (bool) If true, only one of this sound is allowed to play. Relies on if started is true or not. If true, it will not start another loop until it is false. +*/ +/datum/looping_sound + var/list/atom/output_atoms + var/mid_sounds + var/mid_length + var/start_sound + var/start_length + var/end_sound + var/chance + var/volume = 100 + var/max_loops + var/direct + var/vary + var/extra_range + var/opacity_check + var/pref_check + var/volume_chan //CHOMPedit + var/exclusive + var/falloff // CHOMPEdit: Add Falloff + + var/timerid + var/started + +/datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, disable_direct=FALSE) + if(!mid_sounds) + WARNING("A looping sound datum was created without sounds to play.") + return + + output_atoms = _output_atoms + if(disable_direct) + direct = FALSE + + if(start_immediately) + start() + +/datum/looping_sound/Destroy() + stop() + output_atoms = null + return ..() + +/datum/looping_sound/proc/start(atom/add_thing, skip_start_sound = FALSE) + if(add_thing) + output_atoms |= add_thing + if(timerid) + return + if(skip_start_sound && (!exclusive && !started)) // Skip start sounds optionally, check if we're exclusive AND started already + sound_loop() + started = TRUE + return + if(exclusive && started) // Prevents a sound from starting multiple times + return // Don't start this loop. + on_start() + started = TRUE + +/datum/looping_sound/proc/stop(atom/remove_thing, skip_stop_sound = FALSE) + if(remove_thing) + output_atoms -= remove_thing + if(!timerid) + return + if(!skip_stop_sound) + on_stop() + deltimer(timerid) + timerid = null + started = FALSE + +/datum/looping_sound/proc/sound_loop(starttime) + if(max_loops && world.time >= starttime + mid_length * max_loops) + stop() + return + if(!chance || prob(chance)) + play(get_sound(starttime)) + if(!timerid) + timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), mid_length, TIMER_STOPPABLE | TIMER_LOOP) + +/datum/looping_sound/proc/play(soundfile) + var/list/atoms_cache = output_atoms + var/sound/S = sound(soundfile) + if(direct) + S.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) + if(ismob(thing)) + var/mob/M = thing + if(pref_check && !M.is_preference_enabled(pref_check)) + continue + SEND_SOUND(thing, S) + else + playsound(thing, S, volume, vary, extra_range, falloff = falloff, ignore_walls = !opacity_check, preference = pref_check, volume_channel = volume_chan) // CHOMPEdit - Weather volume channel CHOMPEdit again: falloff + +/datum/looping_sound/proc/get_sound(starttime, _mid_sounds) + if(!_mid_sounds) + . = mid_sounds + else + . = _mid_sounds + while(!isfile(.) && !isnull(.)) + . = pickweight(.) + +/datum/looping_sound/proc/on_start() + var/start_wait = 1 // On TG this is 0, however it needs to be 1 to work around an issue. + if(start_sound) + play(start_sound) + start_wait = start_length + addtimer(CALLBACK(src, PROC_REF(sound_loop)), start_wait) + +/datum/looping_sound/proc/on_stop() + if(end_sound) + play(end_sound) diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index 855f4c5213..be43a0b259 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -1,45 +1,45 @@ -/datum/looping_sound/geiger - mid_sounds = list( - list('sound/items/geiger/low1.ogg'=1, 'sound/items/geiger/low2.ogg'=1, 'sound/items/geiger/low3.ogg'=1, 'sound/items/geiger/low4.ogg'=1), - list('sound/items/geiger/med1.ogg'=1, 'sound/items/geiger/med2.ogg'=1, 'sound/items/geiger/med3.ogg'=1, 'sound/items/geiger/med4.ogg'=1), - list('sound/items/geiger/high1.ogg'=1, 'sound/items/geiger/high2.ogg'=1, 'sound/items/geiger/high3.ogg'=1, 'sound/items/geiger/high4.ogg'=1), - list('sound/items/geiger/ext1.ogg'=1, 'sound/items/geiger/ext2.ogg'=1, 'sound/items/geiger/ext3.ogg'=1, 'sound/items/geiger/ext4.ogg'=1) - ) - mid_length = 1 SECOND - volume = 25 - var/last_radiation - -/datum/looping_sound/geiger/get_sound(starttime) - var/danger - switch(last_radiation) - if(0 to RAD_LEVEL_MODERATE) - danger = 1 - if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH) - danger = 2 - if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH) - danger = 3 - if(RAD_LEVEL_VERY_HIGH to INFINITY) - danger = 4 - else - return null - return ..(starttime, mid_sounds[danger]) - -/datum/looping_sound/geiger/stop() - . = ..() - last_radiation = 0 - -/datum/looping_sound/small_motor - start_sound = 'sound/items/small_motor/motor_start_nopull.ogg' - start_length = 2 SECONDS - mid_sounds = list( - 'sound/items/small_motor/motor_idle.ogg', - 'sound/items/small_motor/motor_fast.ogg', - 'sound/items/small_motor/motor_faster.ogg' - ) - mid_length = 1.9 SECONDS //someone make this loop better please, i'm no good at sound. the clips should be 2 seconds exact but there's a gap if it's set to 2 - end_sound = 'sound/items/small_motor/motor_end.ogg' - var/speed = 1 - -/datum/looping_sound/small_motor/get_sound(starttime) - speed = clamp(speed, 1, 3) +/datum/looping_sound/geiger + mid_sounds = list( + list('sound/items/geiger/low1.ogg'=1, 'sound/items/geiger/low2.ogg'=1, 'sound/items/geiger/low3.ogg'=1, 'sound/items/geiger/low4.ogg'=1), + list('sound/items/geiger/med1.ogg'=1, 'sound/items/geiger/med2.ogg'=1, 'sound/items/geiger/med3.ogg'=1, 'sound/items/geiger/med4.ogg'=1), + list('sound/items/geiger/high1.ogg'=1, 'sound/items/geiger/high2.ogg'=1, 'sound/items/geiger/high3.ogg'=1, 'sound/items/geiger/high4.ogg'=1), + list('sound/items/geiger/ext1.ogg'=1, 'sound/items/geiger/ext2.ogg'=1, 'sound/items/geiger/ext3.ogg'=1, 'sound/items/geiger/ext4.ogg'=1) + ) + mid_length = 1 SECOND + volume = 25 + var/last_radiation + +/datum/looping_sound/geiger/get_sound(starttime) + var/danger + switch(last_radiation) + if(0 to RAD_LEVEL_MODERATE) + danger = 1 + if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH) + danger = 2 + if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH) + danger = 3 + if(RAD_LEVEL_VERY_HIGH to INFINITY) + danger = 4 + else + return null + return ..(starttime, mid_sounds[danger]) + +/datum/looping_sound/geiger/stop() + . = ..() + last_radiation = 0 + +/datum/looping_sound/small_motor + start_sound = 'sound/items/small_motor/motor_start_nopull.ogg' + start_length = 2 SECONDS + mid_sounds = list( + 'sound/items/small_motor/motor_idle.ogg', + 'sound/items/small_motor/motor_fast.ogg', + 'sound/items/small_motor/motor_faster.ogg' + ) + mid_length = 1.9 SECONDS //someone make this loop better please, i'm no good at sound. the clips should be 2 seconds exact but there's a gap if it's set to 2 + end_sound = 'sound/items/small_motor/motor_end.ogg' + var/speed = 1 + +/datum/looping_sound/small_motor/get_sound(starttime) + speed = clamp(speed, 1, 3) return ..(starttime, mid_sounds[speed]) \ No newline at end of file diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 26d31d5eb9..85cf2c4adb 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -1,152 +1,152 @@ -/datum/looping_sound/showering - start_sound = 'sound/machines/shower/shower_start.ogg' - start_length = 2 - mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1) - mid_length = 10 - end_sound = 'sound/machines/shower/shower_end.ogg' - volume = 15 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/supermatter - mid_sounds = list('sound/machines/sm/loops/calm.ogg'=1) - mid_length = 60 - volume = 40 - extra_range = 10 - pref_check = /datum/client_preference/supermatter_hum - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/generator - start_sound = 'sound/machines/generator/generator_start.ogg' - start_length = 4 - mid_sounds = list('sound/machines/generator/generator_mid1.ogg'=1, 'sound/machines/generator/generator_mid2.ogg'=1, 'sound/machines/generator/generator_mid3.ogg'=1) - mid_length = 4 - end_sound = 'sound/machines/generator/generator_end.ogg' - volume = 40 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -/datum/looping_sound/deep_fryer - start_sound = 'sound/machines/kitchen/fryer/deep_fryer_immerse.ogg' //my immersions - start_length = 10 - mid_sounds = list('sound/machines/kitchen/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/kitchen/fryer/deep_fryer_2.ogg' = 1) - mid_length = 2 - end_sound = 'sound/machines/kitchen/fryer/deep_fryer_emerge.ogg' - volume = 15 - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/microwave - start_sound = 'sound/machines/kitchen/microwave/microwave-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/microwave/microwave-mid1.ogg'=10, 'sound/machines/kitchen/microwave/microwave-mid2.ogg'=1) - mid_length = 10 - end_sound = 'sound/machines/kitchen/microwave/microwave-end.ogg' - volume = 90 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/oven - start_sound = 'sound/machines/kitchen/oven/oven-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/oven/oven-mid1.ogg'=10) - mid_length = 40 - end_sound = 'sound/machines/kitchen/oven/oven-stop.ogg' - volume = 50 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/grill - start_sound = 'sound/machines/kitchen/grill/grill-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/grill/grill-mid1.ogg'=10) - mid_length = 40 - end_sound = 'sound/machines/kitchen/grill/grill-stop.ogg' - volume = 50 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/mixer - start_sound = 'sound/machines/kitchen/mixer/mixer-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/mixer/mixer-mid1.ogg'=10) - mid_length = 10 - end_sound = 'sound/machines/kitchen/mixer/mixer-stop.ogg' - volume = 50 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/cerealmaker - start_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/cerealmaker/cerealmaker-mid1.ogg'=10) - mid_length = 60 - end_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-stop.ogg' - volume = 50 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/candymaker - start_sound = 'sound/machines/kitchen/candymaker/candymaker-start.ogg' - start_length = 10 - mid_sounds = list('sound/machines/kitchen/candymaker/candymaker-mid1.ogg'=10) - mid_length = 40 - end_sound = 'sound/machines/kitchen/candymaker/candymaker-stop.ogg' - volume = 20 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/air_pump - start_sound = 'sound/machines/air_pump/airpumpstart.ogg' - start_length = 10 - mid_sounds = list('sound/machines/air_pump/airpumpidle.ogg' = 1) - mid_length = 70 - end_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' - volume = 15 - pref_check = /datum/client_preference/air_pump_noise - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/vehicle_engine - start_sound = 'sound/machines/vehicle/engine_start.ogg' - start_length = 2 - mid_sounds = list('sound/machines/vehicle/engine_mid.ogg'=1) - mid_length = 6 - end_sound = 'sound/machines/vehicle/engine_end.ogg' - volume = 20 - -// CHOMPAdd: Fridges! -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/fridge - mid_sounds = list('sound/machines/kitchen/fridge/fridge_loop.ogg' = 1) - mid_length = 60 - volume = 10 - extra_range = -1 // Short-range - pref_check = /datum/client_preference/fridge_hum - volume_chan = VOLUME_CHANNEL_MACHINERY_IDLE - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/tcomms - start_sound = 'sound/machines/tcomms/tcomms_pulse.ogg' - mid_sounds = list('sound/machines/tcomms/tcomms_01.ogg' = 1) - mid_length = 20 - end_sound = 'sound/machines/tcomms/tcomms_pulse.ogg' - volume = 40 - extra_range = -5 // Short-range - falloff = 0.1 // Harsh - volume_chan = VOLUME_CHANNEL_MACHINERY_IDLE - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/looping_sound/shield_generator - start_sound = 'modular_chomp/sound/machines/shield_hum/shield_generator_whir.ogg' - mid_sounds = list('modular_chomp/sound/machines/shield_hum/shield_generator_hum2.ogg', 'modular_chomp/sound/machines/shield_hum/shield_generator_hum3.ogg') - mid_length = 60 - end_sound = 'modular_chomp/sound/machines/shield_hum/shield_generator_whir.ogg' - volume = 40 - volume_chan = VOLUME_CHANNEL_MACHINERY - exclusive = TRUE - extra_range = 10 +/datum/looping_sound/showering + start_sound = 'sound/machines/shower/shower_start.ogg' + start_length = 2 + mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1) + mid_length = 10 + end_sound = 'sound/machines/shower/shower_end.ogg' + volume = 15 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/supermatter + mid_sounds = list('sound/machines/sm/loops/calm.ogg'=1) + mid_length = 60 + volume = 40 + extra_range = 10 + pref_check = /datum/client_preference/supermatter_hum + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/generator + start_sound = 'sound/machines/generator/generator_start.ogg' + start_length = 4 + mid_sounds = list('sound/machines/generator/generator_mid1.ogg'=1, 'sound/machines/generator/generator_mid2.ogg'=1, 'sound/machines/generator/generator_mid3.ogg'=1) + mid_length = 4 + end_sound = 'sound/machines/generator/generator_end.ogg' + volume = 40 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +/datum/looping_sound/deep_fryer + start_sound = 'sound/machines/kitchen/fryer/deep_fryer_immerse.ogg' //my immersions + start_length = 10 + mid_sounds = list('sound/machines/kitchen/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/kitchen/fryer/deep_fryer_2.ogg' = 1) + mid_length = 2 + end_sound = 'sound/machines/kitchen/fryer/deep_fryer_emerge.ogg' + volume = 15 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/microwave + start_sound = 'sound/machines/kitchen/microwave/microwave-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/microwave/microwave-mid1.ogg'=10, 'sound/machines/kitchen/microwave/microwave-mid2.ogg'=1) + mid_length = 10 + end_sound = 'sound/machines/kitchen/microwave/microwave-end.ogg' + volume = 90 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/oven + start_sound = 'sound/machines/kitchen/oven/oven-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/oven/oven-mid1.ogg'=10) + mid_length = 40 + end_sound = 'sound/machines/kitchen/oven/oven-stop.ogg' + volume = 50 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/grill + start_sound = 'sound/machines/kitchen/grill/grill-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/grill/grill-mid1.ogg'=10) + mid_length = 40 + end_sound = 'sound/machines/kitchen/grill/grill-stop.ogg' + volume = 50 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/mixer + start_sound = 'sound/machines/kitchen/mixer/mixer-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/mixer/mixer-mid1.ogg'=10) + mid_length = 10 + end_sound = 'sound/machines/kitchen/mixer/mixer-stop.ogg' + volume = 50 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/cerealmaker + start_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/cerealmaker/cerealmaker-mid1.ogg'=10) + mid_length = 60 + end_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-stop.ogg' + volume = 50 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/candymaker + start_sound = 'sound/machines/kitchen/candymaker/candymaker-start.ogg' + start_length = 10 + mid_sounds = list('sound/machines/kitchen/candymaker/candymaker-mid1.ogg'=10) + mid_length = 40 + end_sound = 'sound/machines/kitchen/candymaker/candymaker-stop.ogg' + volume = 20 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/datum/looping_sound/air_pump + start_sound = 'sound/machines/air_pump/airpumpstart.ogg' + start_length = 10 + mid_sounds = list('sound/machines/air_pump/airpumpidle.ogg' = 1) + mid_length = 70 + end_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' + volume = 15 + pref_check = /datum/client_preference/air_pump_noise + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/vehicle_engine + start_sound = 'sound/machines/vehicle/engine_start.ogg' + start_length = 2 + mid_sounds = list('sound/machines/vehicle/engine_mid.ogg'=1) + mid_length = 6 + end_sound = 'sound/machines/vehicle/engine_end.ogg' + volume = 20 + +// CHOMPAdd: Fridges! +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/fridge + mid_sounds = list('sound/machines/kitchen/fridge/fridge_loop.ogg' = 1) + mid_length = 60 + volume = 10 + extra_range = -1 // Short-range + pref_check = /datum/client_preference/fridge_hum + volume_chan = VOLUME_CHANNEL_MACHINERY_IDLE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/tcomms + start_sound = 'sound/machines/tcomms/tcomms_pulse.ogg' + mid_sounds = list('sound/machines/tcomms/tcomms_01.ogg' = 1) + mid_length = 20 + end_sound = 'sound/machines/tcomms/tcomms_pulse.ogg' + volume = 40 + extra_range = -5 // Short-range + falloff = 0.1 // Harsh + volume_chan = VOLUME_CHANNEL_MACHINERY_IDLE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/shield_generator + start_sound = 'modular_chomp/sound/machines/shield_hum/shield_generator_whir.ogg' + mid_sounds = list('modular_chomp/sound/machines/shield_hum/shield_generator_hum2.ogg', 'modular_chomp/sound/machines/shield_hum/shield_generator_hum3.ogg') + mid_length = 60 + end_sound = 'modular_chomp/sound/machines/shield_hum/shield_generator_whir.ogg' + volume = 40 + volume_chan = VOLUME_CHANNEL_MACHINERY + exclusive = TRUE + extra_range = 10 diff --git a/code/datums/looping_sounds/sequence.dm b/code/datums/looping_sounds/sequence.dm index 0ad8c30b78..f14b43184b 100644 --- a/code/datums/looping_sounds/sequence.dm +++ b/code/datums/looping_sounds/sequence.dm @@ -1,175 +1,175 @@ -// These looping sounds work off of a sequence of things (usually letters or numbers) given to them. - -// Base sequencer type. -/datum/looping_sound/sequence - var/sequence = "The quick brown fox jumps over the lazy dog" // The string to iterate over. - var/position = 1 // Where we are inside the sequence. IE the index we're on for the above. - var/loop_sequence = TRUE // If it should loop the entire sequence upon reaching the end. Otherwise stop() is called. - var/repeat_sequnce_delay = 2 SECONDS // How long to wait when reaching the end, if the above var is true, in deciseconds. - var/next_iteration_delay = 0 - -/datum/looping_sound/sequence/vv_edit_var(var_name, var_value) - if(var_name == "sequence") - set_new_sequence(var_value) - return ..() - -/datum/looping_sound/sequence/proc/iterate_on_sequence() - var/data = get_data_from_position() - next_iteration_delay = process_data(data) - increment_position() - -/datum/looping_sound/sequence/proc/get_data_from_position() - return sequence[position] - -// Override to do something based on the input. -/datum/looping_sound/sequence/proc/process_data(input) - return - -// Changes the sequence, and sets the position back to the start. -/datum/looping_sound/sequence/proc/set_new_sequence(new_sequence) - sequence = new_sequence - reset_position() - -// Called to advance the position, and handle reaching the end if so. -/datum/looping_sound/sequence/proc/increment_position() - position++ - if(position > get_max_position()) - reached_end_of_sequence() - -/datum/looping_sound/sequence/proc/get_max_position() - return length(sequence) - -/datum/looping_sound/sequence/proc/reset_position() - position = 1 - -// Called when the sequence is finished being iterated over. -// If looping is on, the position will be reset, otherwise processing will stop. -/datum/looping_sound/sequence/proc/reached_end_of_sequence() - if(loop_sequence) - next_iteration_delay += repeat_sequnce_delay - reset_position() - else - stop() - -/datum/looping_sound/sequence/sound_loop(starttime) - iterate_on_sequence() - - timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), next_iteration_delay, TIMER_STOPPABLE) - -#define MORSE_DOT "*" // Yes this is an asterisk but its easier to see on a computer compared to a period. -#define MORSE_DASH "-" -#define MORSE_BASE_DELAY 1 // If you change this you will also need to change [dot|dash]_soundfile variables. - -// This implements an automatic conversion of text (the sequence) into audible morse code. -// This can be useful for flavor purposes. For 'real' usage its suggested to also display the sequence in text form, for the benefit of those without sound. -/datum/looping_sound/sequence/morse - // This is just to pass validation in the base type. - mid_sounds = list('sound/effects/tones/440_sine_01.ogg') - mid_length = 1 - opacity_check = TRUE // So we don't have to constantly hear it when out of sight. - - // Dots. - // In Morse Code, the dot's length is one unit. - var/dot_soundfile = 'sound/effects/tones/440_sine_01.ogg' // The sound file to play for a 'dot'. - var/dot_delay = MORSE_BASE_DELAY // How long the sound above plays for, in deciseconds. - - // Dashes. - // In Morse Code, a dash's length is equal to three units (or three dots). - var/dash_soundfile = 'sound/effects/tones/440_sine_03.ogg' // The sound file to play for a 'dash'. - var/dash_delay = MORSE_BASE_DELAY * 3 // Same as the dot delay, except for the dash sound. - - // Spaces. - // In Morse Code, a space's length is equal to one unit (or one dot). - var/spaces_between_sounds = MORSE_BASE_DELAY // How many spaces are between parts of the same letter. - var/spaces_between_letters = MORSE_BASE_DELAY * 3 // How many spaces are between different letters in the same word. - var/spaces_between_words = MORSE_BASE_DELAY * 7 // How many spaces are between different words. - - // Morse Alphabet. - // Note that it is case-insensative. 'A' and 'a' will make the same sounds. - // Unfortunately there isn't a nice way to implement procedure signs w/o the space inbetween the letters. - // Also some of the punctuation isn't super offical/widespread in real life but its the future so *shrug. - var/static/list/morse_alphabet = list( - "A" = list("*", "-"), - "B" = list("-", "*", "*", "*"), - "C" = list("-", "*", "-", "*"), - "D" = list("-", "*", "*"), - "E" = list("*"), - "F" = list("*", "*", "-", "*"), - "G" = list("-", "-", "*"), - "H" = list("*", "*", "*", "*"), - "I" = list("*", "*"), - "J" = list("*", "-", "-", "-"), - "K" = list("-", "*", "-"), - "L" = list("*", "-", "*", "*"), - "M" = list("*", "*"), - "N" = list("-", "*"), - "O" = list("-", "-", "-"), - "P" = list("*", "-", "-", "*"), - "Q" = list("-", "-", "*", "-"), - "R" = list("*", "-", "*"), - "S" = list("*", "*", "*"), - "T" = list("-"), - "U" = list("*", "*", "-"), - "V" = list("*", "*", "*", "-"), - "W" = list("*", "-", "-"), - "X" = list("-", "*", "*", "-"), - "Y" = list("-", "*", "-", "-"), - "Z" = list("-", "-", "*", "*"), - - "1" = list("*", "-", "-", "-", "-"), - "2" = list("*", "*", "-", "-", "-"), - "3" = list("*", "*", "*", "-", "-"), - "4" = list("*", "*", "*", "*", "-"), - "5" = list("*", "*", "*", "*", "*"), - "6" = list("-", "*", "*", "*", "*"), - "7" = list("-", "-", "*", "*", "*"), - "8" = list("-", "-", "-", "*", "*"), - "9" = list("-", "-", "-", "-", "*"), - "0" = list("-", "-", "-", "-", "-"), - - "." = list("*", "-", "*", "-", "*", "-"), - "," = list("-", "-", "*", "*", "-", "-"), - "?" = list("*", "*", "-", "-", "*", "*"), - "'" = list("*", "-", "-", "-", "-", "*"), - "!" = list("-", "*", "-", "*", "-", "-"), - "/" = list("-", "*", "*", "-", "*"), - "(" = list("-", "*", "-", "-", "*"), - ")" = list("-", "*", "-", "-", "*", "-"), - "&" = list("*", "-", "*", "*", "*"), - ":" = list("-", "-", "-", "*", "*", "*"), - ";" = list("-", "*", "-", "*", "-", "*"), - "=" = list("-", "*", "*", "*", "-"), - "+" = list("*", "-", "*", "-", "*"), - "-" = list("-", "*", "*", "*", "*", "-"), - "_" = list("*", "*", "-", "-", "*", "-"), - "\""= list("*", "-", "*", "*", "-", "*"), - "$" = list("*", "*", "*", "-", "*", "*", "-"), - "@" = list("*", "-", "-", "*", "-", "*"), - ) - - -/datum/looping_sound/sequence/morse/process_data(letter) - letter = uppertext(letter) // Make it case-insensative. - - // If it's whitespace, treat it as a (Morse) space. - if(letter == " ") - return spaces_between_words - - if(!(letter in morse_alphabet)) - CRASH("Encountered invalid character in Morse sequence \"[letter]\".") - - // So I heard you like sequences... - // Play a sequence of sounds while inside the current iteration of the outer sequence. - var/list/instructions = morse_alphabet[letter] - for(var/sound in instructions) - if(sound == MORSE_DOT) - play(dot_soundfile) - sleep(dot_delay) - else // It's a dash otherwise. - play(dash_soundfile) - sleep(dash_delay) - sleep(spaces_between_sounds) - return spaces_between_letters - -#undef MORSE_DOT -#undef MORSE_DASH +// These looping sounds work off of a sequence of things (usually letters or numbers) given to them. + +// Base sequencer type. +/datum/looping_sound/sequence + var/sequence = "The quick brown fox jumps over the lazy dog" // The string to iterate over. + var/position = 1 // Where we are inside the sequence. IE the index we're on for the above. + var/loop_sequence = TRUE // If it should loop the entire sequence upon reaching the end. Otherwise stop() is called. + var/repeat_sequnce_delay = 2 SECONDS // How long to wait when reaching the end, if the above var is true, in deciseconds. + var/next_iteration_delay = 0 + +/datum/looping_sound/sequence/vv_edit_var(var_name, var_value) + if(var_name == "sequence") + set_new_sequence(var_value) + return ..() + +/datum/looping_sound/sequence/proc/iterate_on_sequence() + var/data = get_data_from_position() + next_iteration_delay = process_data(data) + increment_position() + +/datum/looping_sound/sequence/proc/get_data_from_position() + return sequence[position] + +// Override to do something based on the input. +/datum/looping_sound/sequence/proc/process_data(input) + return + +// Changes the sequence, and sets the position back to the start. +/datum/looping_sound/sequence/proc/set_new_sequence(new_sequence) + sequence = new_sequence + reset_position() + +// Called to advance the position, and handle reaching the end if so. +/datum/looping_sound/sequence/proc/increment_position() + position++ + if(position > get_max_position()) + reached_end_of_sequence() + +/datum/looping_sound/sequence/proc/get_max_position() + return length(sequence) + +/datum/looping_sound/sequence/proc/reset_position() + position = 1 + +// Called when the sequence is finished being iterated over. +// If looping is on, the position will be reset, otherwise processing will stop. +/datum/looping_sound/sequence/proc/reached_end_of_sequence() + if(loop_sequence) + next_iteration_delay += repeat_sequnce_delay + reset_position() + else + stop() + +/datum/looping_sound/sequence/sound_loop(starttime) + iterate_on_sequence() + + timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), next_iteration_delay, TIMER_STOPPABLE) + +#define MORSE_DOT "*" // Yes this is an asterisk but its easier to see on a computer compared to a period. +#define MORSE_DASH "-" +#define MORSE_BASE_DELAY 1 // If you change this you will also need to change [dot|dash]_soundfile variables. + +// This implements an automatic conversion of text (the sequence) into audible morse code. +// This can be useful for flavor purposes. For 'real' usage its suggested to also display the sequence in text form, for the benefit of those without sound. +/datum/looping_sound/sequence/morse + // This is just to pass validation in the base type. + mid_sounds = list('sound/effects/tones/440_sine_01.ogg') + mid_length = 1 + opacity_check = TRUE // So we don't have to constantly hear it when out of sight. + + // Dots. + // In Morse Code, the dot's length is one unit. + var/dot_soundfile = 'sound/effects/tones/440_sine_01.ogg' // The sound file to play for a 'dot'. + var/dot_delay = MORSE_BASE_DELAY // How long the sound above plays for, in deciseconds. + + // Dashes. + // In Morse Code, a dash's length is equal to three units (or three dots). + var/dash_soundfile = 'sound/effects/tones/440_sine_03.ogg' // The sound file to play for a 'dash'. + var/dash_delay = MORSE_BASE_DELAY * 3 // Same as the dot delay, except for the dash sound. + + // Spaces. + // In Morse Code, a space's length is equal to one unit (or one dot). + var/spaces_between_sounds = MORSE_BASE_DELAY // How many spaces are between parts of the same letter. + var/spaces_between_letters = MORSE_BASE_DELAY * 3 // How many spaces are between different letters in the same word. + var/spaces_between_words = MORSE_BASE_DELAY * 7 // How many spaces are between different words. + + // Morse Alphabet. + // Note that it is case-insensative. 'A' and 'a' will make the same sounds. + // Unfortunately there isn't a nice way to implement procedure signs w/o the space inbetween the letters. + // Also some of the punctuation isn't super offical/widespread in real life but its the future so *shrug. + var/static/list/morse_alphabet = list( + "A" = list("*", "-"), + "B" = list("-", "*", "*", "*"), + "C" = list("-", "*", "-", "*"), + "D" = list("-", "*", "*"), + "E" = list("*"), + "F" = list("*", "*", "-", "*"), + "G" = list("-", "-", "*"), + "H" = list("*", "*", "*", "*"), + "I" = list("*", "*"), + "J" = list("*", "-", "-", "-"), + "K" = list("-", "*", "-"), + "L" = list("*", "-", "*", "*"), + "M" = list("*", "*"), + "N" = list("-", "*"), + "O" = list("-", "-", "-"), + "P" = list("*", "-", "-", "*"), + "Q" = list("-", "-", "*", "-"), + "R" = list("*", "-", "*"), + "S" = list("*", "*", "*"), + "T" = list("-"), + "U" = list("*", "*", "-"), + "V" = list("*", "*", "*", "-"), + "W" = list("*", "-", "-"), + "X" = list("-", "*", "*", "-"), + "Y" = list("-", "*", "-", "-"), + "Z" = list("-", "-", "*", "*"), + + "1" = list("*", "-", "-", "-", "-"), + "2" = list("*", "*", "-", "-", "-"), + "3" = list("*", "*", "*", "-", "-"), + "4" = list("*", "*", "*", "*", "-"), + "5" = list("*", "*", "*", "*", "*"), + "6" = list("-", "*", "*", "*", "*"), + "7" = list("-", "-", "*", "*", "*"), + "8" = list("-", "-", "-", "*", "*"), + "9" = list("-", "-", "-", "-", "*"), + "0" = list("-", "-", "-", "-", "-"), + + "." = list("*", "-", "*", "-", "*", "-"), + "," = list("-", "-", "*", "*", "-", "-"), + "?" = list("*", "*", "-", "-", "*", "*"), + "'" = list("*", "-", "-", "-", "-", "*"), + "!" = list("-", "*", "-", "*", "-", "-"), + "/" = list("-", "*", "*", "-", "*"), + "(" = list("-", "*", "-", "-", "*"), + ")" = list("-", "*", "-", "-", "*", "-"), + "&" = list("*", "-", "*", "*", "*"), + ":" = list("-", "-", "-", "*", "*", "*"), + ";" = list("-", "*", "-", "*", "-", "*"), + "=" = list("-", "*", "*", "*", "-"), + "+" = list("*", "-", "*", "-", "*"), + "-" = list("-", "*", "*", "*", "*", "-"), + "_" = list("*", "*", "-", "-", "*", "-"), + "\""= list("*", "-", "*", "*", "-", "*"), + "$" = list("*", "*", "*", "-", "*", "*", "-"), + "@" = list("*", "-", "-", "*", "-", "*"), + ) + + +/datum/looping_sound/sequence/morse/process_data(letter) + letter = uppertext(letter) // Make it case-insensative. + + // If it's whitespace, treat it as a (Morse) space. + if(letter == " ") + return spaces_between_words + + if(!(letter in morse_alphabet)) + CRASH("Encountered invalid character in Morse sequence \"[letter]\".") + + // So I heard you like sequences... + // Play a sequence of sounds while inside the current iteration of the outer sequence. + var/list/instructions = morse_alphabet[letter] + for(var/sound in instructions) + if(sound == MORSE_DOT) + play(dot_soundfile) + sleep(dot_delay) + else // It's a dash otherwise. + play(dash_soundfile) + sleep(dash_delay) + sleep(spaces_between_sounds) + return spaces_between_letters + +#undef MORSE_DOT +#undef MORSE_DASH diff --git a/code/datums/looping_sounds/weather_sounds.dm b/code/datums/looping_sounds/weather_sounds.dm index 1a17cae113..b8f712ef68 100644 --- a/code/datums/looping_sounds/weather_sounds.dm +++ b/code/datums/looping_sounds/weather_sounds.dm @@ -1,102 +1,102 @@ -/datum/looping_sound/weather - pref_check = /datum/client_preference/weather_sounds - volume_chan = VOLUME_CHANNEL_WEATHER // CHOMPEdit - Weather Volume Channel - -// CHOMPEdit: Blanket replace all wind with this, for now, in lieue of a snowstorm-specific wind -/datum/looping_sound/weather/outside_blizzard - start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' - start_length = 4 SECONDS - mid_sounds = list( - 'sound/effects/weather/snowstorm/snowstorm_loop.ogg' = 1 - ) - mid_length = 8 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. - end_sound = 'sound/effects/weather/wind/wind_end.ogg' - volume = 85 // Louder because we want to communicate to players that this is a heavy blizzard - -/datum/looping_sound/weather/inside_blizzard - start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' - start_length = 4 SECONDS - mid_sounds = list( - 'sound/effects/weather/snowstorm/snowstorm_interior_loop.ogg' = 1 - ) - mid_length = 10 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. - end_sound = 'sound/effects/weather/wind/wind_end.ogg' - volume = 25 // Should naturally be very quiet - wind isn't usually audible inside a structure unless you're right by the door. - bit louder because blizzard - -/datum/looping_sound/weather/outside_snow - start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' - start_length = 4 SECONDS - mid_sounds = list( - 'sound/effects/weather/snowstorm/snowstorm_loop.ogg' = 1 - ) - mid_length = 8 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. - end_sound = 'sound/effects/weather/wind/wind_end.ogg' - volume = 45 - -/datum/looping_sound/weather/inside_snow - start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' - start_length = 4 SECONDS - mid_sounds = list( - 'sound/effects/weather/snowstorm/snowstorm_interior_loop.ogg' = 1 - ) - mid_length = 10 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. - end_sound = 'sound/effects/weather/wind/wind_end.ogg' - volume = 15 // Should naturally be very quiet - wind isn't usually audible inside a structure unless you're right by the door. - -/datum/looping_sound/weather/wind - start_sound = 'sound/effects/weather/wind/wind_start.ogg' - start_length = 4 SECONDS - mid_sounds = list( - 'sound/effects/weather/wind/wind_loop.ogg' = 1 - ) - mid_length = 15 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. - end_sound = 'sound/effects/weather/wind/wind_end.ogg' - volume = 45 - -// Don't have special sounds so we just make it quieter indoors. -/datum/looping_sound/weather/wind/indoors - volume = 25 - -/datum/looping_sound/weather/wind/gentle - volume = 15 - -/datum/looping_sound/weather/wind/gentle/indoors - volume = 5 - -// CHOMPEdit Start: Replace Rain sounds with something not-garbage. -/datum/looping_sound/weather/rain - mid_sounds = list( - 'sound/effects/weather/rain/rain_loop.ogg' = 1 - ) - mid_length = 10 SECONDS - start_sound = 'sound/effects/weather/rain/start_rain.ogg' - start_length = 3 SECONDS - end_sound = 'sound/effects/weather/rain/end_rain.ogg' - volume = 50 - -// CHOMPEdit End: Replace Rain sounds with something not-garbage. -/datum/looping_sound/weather/rain/indoors - volume = 20 - -// CHOMPEdit Start: Proper storm sounds! -/datum/looping_sound/weather/storm - mid_sounds = list( - 'sound/effects/weather/storm/storm_loop.ogg' = 1, - 'sound/effects/weather/storm/storm_loop2.ogg' = 1 - ) - mid_length = 10 SECONDS - start_sound = list( - 'sound/effects/weather/storm/storm_start1.ogg' = 1, - 'sound/effects/weather/storm/storm_start2.ogg' = 1 - ) - start_length = 4 SECONDS - end_sound = list( - 'sound/effects/weather/storm/storm_end1.ogg' = 1, - 'sound/effects/weather/storm/storm_end2.ogg' = 1 - ) - volume = 60 - -// CHOMPEdit End: Proper storm sounds! - -/datum/looping_sound/weather/storm/indoors +/datum/looping_sound/weather + pref_check = /datum/client_preference/weather_sounds + volume_chan = VOLUME_CHANNEL_WEATHER // CHOMPEdit - Weather Volume Channel + +// CHOMPEdit: Blanket replace all wind with this, for now, in lieue of a snowstorm-specific wind +/datum/looping_sound/weather/outside_blizzard + start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' + start_length = 4 SECONDS + mid_sounds = list( + 'sound/effects/weather/snowstorm/snowstorm_loop.ogg' = 1 + ) + mid_length = 8 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. + end_sound = 'sound/effects/weather/wind/wind_end.ogg' + volume = 85 // Louder because we want to communicate to players that this is a heavy blizzard + +/datum/looping_sound/weather/inside_blizzard + start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' + start_length = 4 SECONDS + mid_sounds = list( + 'sound/effects/weather/snowstorm/snowstorm_interior_loop.ogg' = 1 + ) + mid_length = 10 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. + end_sound = 'sound/effects/weather/wind/wind_end.ogg' + volume = 25 // Should naturally be very quiet - wind isn't usually audible inside a structure unless you're right by the door. - bit louder because blizzard + +/datum/looping_sound/weather/outside_snow + start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' + start_length = 4 SECONDS + mid_sounds = list( + 'sound/effects/weather/snowstorm/snowstorm_loop.ogg' = 1 + ) + mid_length = 8 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. + end_sound = 'sound/effects/weather/wind/wind_end.ogg' + volume = 45 + +/datum/looping_sound/weather/inside_snow + start_sound = 'sound/effects/weather/snowstorm/snowstorm_start.ogg' + start_length = 4 SECONDS + mid_sounds = list( + 'sound/effects/weather/snowstorm/snowstorm_interior_loop.ogg' = 1 + ) + mid_length = 10 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. + end_sound = 'sound/effects/weather/wind/wind_end.ogg' + volume = 15 // Should naturally be very quiet - wind isn't usually audible inside a structure unless you're right by the door. + +/datum/looping_sound/weather/wind + start_sound = 'sound/effects/weather/wind/wind_start.ogg' + start_length = 4 SECONDS + mid_sounds = list( + 'sound/effects/weather/wind/wind_loop.ogg' = 1 + ) + mid_length = 15 SECONDS // The lengths for the files vary, but the longest is four seconds, so this will make it sound like intermittent wind. + end_sound = 'sound/effects/weather/wind/wind_end.ogg' + volume = 45 + +// Don't have special sounds so we just make it quieter indoors. +/datum/looping_sound/weather/wind/indoors + volume = 25 + +/datum/looping_sound/weather/wind/gentle + volume = 15 + +/datum/looping_sound/weather/wind/gentle/indoors + volume = 5 + +// CHOMPEdit Start: Replace Rain sounds with something not-garbage. +/datum/looping_sound/weather/rain + mid_sounds = list( + 'sound/effects/weather/rain/rain_loop.ogg' = 1 + ) + mid_length = 10 SECONDS + start_sound = 'sound/effects/weather/rain/start_rain.ogg' + start_length = 3 SECONDS + end_sound = 'sound/effects/weather/rain/end_rain.ogg' + volume = 50 + +// CHOMPEdit End: Replace Rain sounds with something not-garbage. +/datum/looping_sound/weather/rain/indoors + volume = 20 + +// CHOMPEdit Start: Proper storm sounds! +/datum/looping_sound/weather/storm + mid_sounds = list( + 'sound/effects/weather/storm/storm_loop.ogg' = 1, + 'sound/effects/weather/storm/storm_loop2.ogg' = 1 + ) + mid_length = 10 SECONDS + start_sound = list( + 'sound/effects/weather/storm/storm_start1.ogg' = 1, + 'sound/effects/weather/storm/storm_start2.ogg' = 1 + ) + start_length = 4 SECONDS + end_sound = list( + 'sound/effects/weather/storm/storm_end1.ogg' = 1, + 'sound/effects/weather/storm/storm_end2.ogg' = 1 + ) + volume = 60 + +// CHOMPEdit End: Proper storm sounds! + +/datum/looping_sound/weather/storm/indoors volume = 20 \ No newline at end of file diff --git a/code/datums/managed_browsers/_managed_browser.dm b/code/datums/managed_browsers/_managed_browser.dm index 6c702ddbdd..718fa0570c 100644 --- a/code/datums/managed_browsers/_managed_browser.dm +++ b/code/datums/managed_browsers/_managed_browser.dm @@ -1,52 +1,52 @@ -GLOBAL_VAR(managed_browser_id_ticker) - -// This holds information on managing a /datum/browser object. -// Managing can include things like persisting the state of specific information inside of this object, receiving Topic() calls, or deleting itself when the window is closed. -// This is useful for browser windows to be able to stand 'on their own' instead of being tied to something in the game world, like an object or mob. -/datum/managed_browser - var/client/my_client = null - var/browser_id = null - var/base_browser_id = null - - var/title = null - var/size_x = 200 - var/size_y = 400 - - var/display_when_created = TRUE - -/datum/managed_browser/New(client/new_client) - if(!new_client) - stack_trace("Managed browser object was not given a client.") - return - if(!base_browser_id) - stack_trace("Managed browser object does not have a base browser id defined in its type.") - return - - my_client = new_client - browser_id = "[base_browser_id]-[GLOB.managed_browser_id_ticker++]" - - if(display_when_created) - display() - -/datum/managed_browser/Destroy() - my_client = null - return ..() - -// Override if you want to have the browser title change conditionally. -// Otherwise it's easier to just change the title variable directly. -/datum/managed_browser/proc/get_title() - return title - -// Override to display the html information. -// It is suggested to build it with a list, and use list.Join() at the end. -// This helps prevent excessive concatination, which helps preserves BYOND's string tree from becoming a laggy mess. -/datum/managed_browser/proc/get_html() - return - -/datum/managed_browser/proc/display() - interact(get_html(), get_title(), my_client) - -/datum/managed_browser/proc/interact(html, title, client/C) - var/datum/browser/popup = new(C.mob, browser_id, title, size_x, size_y, src) - popup.set_content(html) +GLOBAL_VAR(managed_browser_id_ticker) + +// This holds information on managing a /datum/browser object. +// Managing can include things like persisting the state of specific information inside of this object, receiving Topic() calls, or deleting itself when the window is closed. +// This is useful for browser windows to be able to stand 'on their own' instead of being tied to something in the game world, like an object or mob. +/datum/managed_browser + var/client/my_client = null + var/browser_id = null + var/base_browser_id = null + + var/title = null + var/size_x = 200 + var/size_y = 400 + + var/display_when_created = TRUE + +/datum/managed_browser/New(client/new_client) + if(!new_client) + stack_trace("Managed browser object was not given a client.") + return + if(!base_browser_id) + stack_trace("Managed browser object does not have a base browser id defined in its type.") + return + + my_client = new_client + browser_id = "[base_browser_id]-[GLOB.managed_browser_id_ticker++]" + + if(display_when_created) + display() + +/datum/managed_browser/Destroy() + my_client = null + return ..() + +// Override if you want to have the browser title change conditionally. +// Otherwise it's easier to just change the title variable directly. +/datum/managed_browser/proc/get_title() + return title + +// Override to display the html information. +// It is suggested to build it with a list, and use list.Join() at the end. +// This helps prevent excessive concatination, which helps preserves BYOND's string tree from becoming a laggy mess. +/datum/managed_browser/proc/get_html() + return + +/datum/managed_browser/proc/display() + interact(get_html(), get_title(), my_client) + +/datum/managed_browser/proc/interact(html, title, client/C) + var/datum/browser/popup = new(C.mob, browser_id, title, size_x, size_y, src) + popup.set_content(html) popup.open() \ No newline at end of file diff --git a/code/datums/managed_browsers/feedback_form.dm b/code/datums/managed_browsers/feedback_form.dm index 9886a55951..febcd9eb10 100644 --- a/code/datums/managed_browsers/feedback_form.dm +++ b/code/datums/managed_browsers/feedback_form.dm @@ -1,147 +1,147 @@ -/client - var/datum/managed_browser/feedback_form/feedback_form = null - -/client/can_vv_get(var_name) - return var_name != NAMEOF(src, feedback_form) // No snooping. - -GENERAL_PROTECT_DATUM(/datum/managed_browser/feedback_form) - -// A fairly simple object to hold information about a player's feedback as it's being written. -// Having this be it's own object instead of being baked into /mob/new_player allows for it to be used -// from other places than just the lobby, and makes it a lot harder for people with dev powers to be naughty with it using VV/proccall. -/datum/managed_browser/feedback_form - base_browser_id = "feedback_form" - title = "Server Feedback" - size_x = 480 - size_y = 520 - var/feedback_topic = null - var/feedback_body = null - var/feedback_hide_author = FALSE - -/datum/managed_browser/feedback_form/New(client/new_client) - feedback_topic = config.sqlite_feedback_topics[1] - ..(new_client) - -/datum/managed_browser/feedback_form/Destroy() - if(my_client) - my_client.feedback_form = null - return ..() - -// Privacy option is allowed if both the config allows it, and the pepper file exists and isn't blank. -/datum/managed_browser/feedback_form/proc/can_be_private() - return config.sqlite_feedback_privacy && SSsqlite.get_feedback_pepper() - -/datum/managed_browser/feedback_form/display() - if(!my_client) - return - if(!SSsqlite.can_submit_feedback(my_client)) - return - ..() - -// Builds the window for players to review their feedback. -/datum/managed_browser/feedback_form/get_html() - var/list/dat = list("") - dat += "
    " - dat += "" - dat += "Here, you can write some feedback for the server.
    " - dat += "Note that HTML is NOT supported!
    " - dat += "Click the edit button to begin writing.
    " - - dat += "Your feedback is currently [length(feedback_body)]/[MAX_FEEDBACK_LENGTH] letters long." - dat += "
    " - dat += "
    " - - dat += "

    Preview

    " - - dat += "Author: " - - if(can_be_private()) - if(!feedback_hide_author) - dat += "[my_client.ckey] " - dat += span("linkOn", "Visible") - dat += " | " - dat += href(src, list("feedback_hide_author" = 1), "Hashed") - else - dat += "[md5(ckey(lowertext(my_client.ckey + SSsqlite.get_feedback_pepper())))] " - dat += href(src, list("feedback_hide_author" = 0), "Visible") - dat += " | " - dat += span("linkOn", "Hashed") - else - dat += my_client.ckey - dat += "
    " - - if(config.sqlite_feedback_topics.len > 1) - dat += "Topic: [href(src, list("feedback_choose_topic" = 1), feedback_topic)]
    " - else - dat += "Topic: [config.sqlite_feedback_topics[1]]
    " - - dat += "
    " - if(feedback_body) - dat += replacetext(feedback_body, "\n", "
    ") // So newlines will look like they work in the preview. - else - dat += "\[Feedback goes here...\]" - dat += "
    " - dat += href(src, list("feedback_edit_body" = 1), "Edit") - dat += "
    " - - if(config.sqlite_feedback_cooldown) - dat += "Please note that you will have to wait [config.sqlite_feedback_cooldown] day\s before \ - being able to write more feedback after submitting.
    " - - dat += href(src, list("feedback_submit" = 1), "Submit") - dat += "" - return dat.Join() - -/datum/managed_browser/feedback_form/Topic(href, href_list[]) - if(!my_client) - return FALSE - - if(href_list["feedback_edit_body"]) - // This is deliberately not sanitized here, and is instead checked when hitting the submission button, - // as we want to give the user a chance to fix it without needing to rewrite the whole thing. - feedback_body = tgui_input_text(my_client, "Please write your feedback here.", "Feedback Body", feedback_body, multiline = TRUE, prevent_enter = TRUE) - display() // Refresh the window with new information. - return - - if(href_list["feedback_hide_author"]) - if(!can_be_private()) - feedback_hide_author = FALSE - else - feedback_hide_author = text2num(href_list["feedback_hide_author"]) - display() - return - - if(href_list["feedback_choose_topic"]) - feedback_topic = tgui_input_list(my_client, "Choose the topic you want to submit your feedback under.", "Feedback Topic", config.sqlite_feedback_topics) - display() - return - - if(href_list["feedback_submit"]) - // Do some last minute validation, and tell the user if something goes wrong, - // so we don't wipe out their ten thousand page essay due to having a few too many characters. - if(length(feedback_body) > MAX_FEEDBACK_LENGTH) - to_chat(my_client, span("warning", "Your feedback is too long, at [length(feedback_body)] characters, where as the \ - limit is [MAX_FEEDBACK_LENGTH]. Please shorten it and try again.")) - return - - var/text = sanitize(feedback_body, max_length = 0, encode = TRUE, trim = FALSE, extra = FALSE) - if(!text) // No text, or it was super invalid. - to_chat(my_client, span("warning", "It appears you didn't write anything, or it was invalid.")) - return - - if(tgui_alert(my_client, "Are you sure you want to submit your feedback?", "Confirm Submission", list("No", "Yes")) == "Yes") - var/author_text = my_client.ckey - if(can_be_private() && feedback_hide_author) - author_text = md5(my_client.ckey + SSsqlite.get_feedback_pepper()) - - var/success = SSsqlite.insert_feedback(author = author_text, topic = feedback_topic, content = feedback_body, sqlite_object = SSsqlite.sqlite_db) - if(!success) - to_chat(my_client, span("warning", "Something went wrong while inserting your feedback into the database. Please try again. \ - If this happens again, you should contact a developer.")) - return - - my_client.mob << browse(null, "window=[browser_id]") // Closes the window. - if(istype(my_client.mob, /mob/new_player)) - var/mob/new_player/NP = my_client.mob - NP.new_player_panel_proc() // So the feedback button goes away, if the user gets put on cooldown. - qdel(src) +/client + var/datum/managed_browser/feedback_form/feedback_form = null + +/client/can_vv_get(var_name) + return var_name != NAMEOF(src, feedback_form) // No snooping. + +GENERAL_PROTECT_DATUM(/datum/managed_browser/feedback_form) + +// A fairly simple object to hold information about a player's feedback as it's being written. +// Having this be it's own object instead of being baked into /mob/new_player allows for it to be used +// from other places than just the lobby, and makes it a lot harder for people with dev powers to be naughty with it using VV/proccall. +/datum/managed_browser/feedback_form + base_browser_id = "feedback_form" + title = "Server Feedback" + size_x = 480 + size_y = 520 + var/feedback_topic = null + var/feedback_body = null + var/feedback_hide_author = FALSE + +/datum/managed_browser/feedback_form/New(client/new_client) + feedback_topic = config.sqlite_feedback_topics[1] + ..(new_client) + +/datum/managed_browser/feedback_form/Destroy() + if(my_client) + my_client.feedback_form = null + return ..() + +// Privacy option is allowed if both the config allows it, and the pepper file exists and isn't blank. +/datum/managed_browser/feedback_form/proc/can_be_private() + return config.sqlite_feedback_privacy && SSsqlite.get_feedback_pepper() + +/datum/managed_browser/feedback_form/display() + if(!my_client) + return + if(!SSsqlite.can_submit_feedback(my_client)) + return + ..() + +// Builds the window for players to review their feedback. +/datum/managed_browser/feedback_form/get_html() + var/list/dat = list("") + dat += "
    " + dat += "" + dat += "Here, you can write some feedback for the server.
    " + dat += "Note that HTML is NOT supported!
    " + dat += "Click the edit button to begin writing.
    " + + dat += "Your feedback is currently [length(feedback_body)]/[MAX_FEEDBACK_LENGTH] letters long." + dat += "
    " + dat += "
    " + + dat += "

    Preview

    " + + dat += "Author: " + + if(can_be_private()) + if(!feedback_hide_author) + dat += "[my_client.ckey] " + dat += span("linkOn", "Visible") + dat += " | " + dat += href(src, list("feedback_hide_author" = 1), "Hashed") + else + dat += "[md5(ckey(lowertext(my_client.ckey + SSsqlite.get_feedback_pepper())))] " + dat += href(src, list("feedback_hide_author" = 0), "Visible") + dat += " | " + dat += span("linkOn", "Hashed") + else + dat += my_client.ckey + dat += "
    " + + if(config.sqlite_feedback_topics.len > 1) + dat += "Topic: [href(src, list("feedback_choose_topic" = 1), feedback_topic)]
    " + else + dat += "Topic: [config.sqlite_feedback_topics[1]]
    " + + dat += "
    " + if(feedback_body) + dat += replacetext(feedback_body, "\n", "
    ") // So newlines will look like they work in the preview. + else + dat += "\[Feedback goes here...\]" + dat += "
    " + dat += href(src, list("feedback_edit_body" = 1), "Edit") + dat += "
    " + + if(config.sqlite_feedback_cooldown) + dat += "Please note that you will have to wait [config.sqlite_feedback_cooldown] day\s before \ + being able to write more feedback after submitting.
    " + + dat += href(src, list("feedback_submit" = 1), "Submit") + dat += "" + return dat.Join() + +/datum/managed_browser/feedback_form/Topic(href, href_list[]) + if(!my_client) + return FALSE + + if(href_list["feedback_edit_body"]) + // This is deliberately not sanitized here, and is instead checked when hitting the submission button, + // as we want to give the user a chance to fix it without needing to rewrite the whole thing. + feedback_body = tgui_input_text(my_client, "Please write your feedback here.", "Feedback Body", feedback_body, multiline = TRUE, prevent_enter = TRUE) + display() // Refresh the window with new information. + return + + if(href_list["feedback_hide_author"]) + if(!can_be_private()) + feedback_hide_author = FALSE + else + feedback_hide_author = text2num(href_list["feedback_hide_author"]) + display() + return + + if(href_list["feedback_choose_topic"]) + feedback_topic = tgui_input_list(my_client, "Choose the topic you want to submit your feedback under.", "Feedback Topic", config.sqlite_feedback_topics) + display() + return + + if(href_list["feedback_submit"]) + // Do some last minute validation, and tell the user if something goes wrong, + // so we don't wipe out their ten thousand page essay due to having a few too many characters. + if(length(feedback_body) > MAX_FEEDBACK_LENGTH) + to_chat(my_client, span("warning", "Your feedback is too long, at [length(feedback_body)] characters, where as the \ + limit is [MAX_FEEDBACK_LENGTH]. Please shorten it and try again.")) + return + + var/text = sanitize(feedback_body, max_length = 0, encode = TRUE, trim = FALSE, extra = FALSE) + if(!text) // No text, or it was super invalid. + to_chat(my_client, span("warning", "It appears you didn't write anything, or it was invalid.")) + return + + if(tgui_alert(my_client, "Are you sure you want to submit your feedback?", "Confirm Submission", list("No", "Yes")) == "Yes") + var/author_text = my_client.ckey + if(can_be_private() && feedback_hide_author) + author_text = md5(my_client.ckey + SSsqlite.get_feedback_pepper()) + + var/success = SSsqlite.insert_feedback(author = author_text, topic = feedback_topic, content = feedback_body, sqlite_object = SSsqlite.sqlite_db) + if(!success) + to_chat(my_client, span("warning", "Something went wrong while inserting your feedback into the database. Please try again. \ + If this happens again, you should contact a developer.")) + return + + my_client.mob << browse(null, "window=[browser_id]") // Closes the window. + if(istype(my_client.mob, /mob/new_player)) + var/mob/new_player/NP = my_client.mob + NP.new_player_panel_proc() // So the feedback button goes away, if the user gets put on cooldown. + qdel(src) diff --git a/code/datums/managed_browsers/feedback_viewer.dm b/code/datums/managed_browsers/feedback_viewer.dm index 0236036338..59fbc679c4 100644 --- a/code/datums/managed_browsers/feedback_viewer.dm +++ b/code/datums/managed_browsers/feedback_viewer.dm @@ -1,162 +1,162 @@ -/client - var/datum/managed_browser/feedback_viewer/feedback_viewer = null - -/datum/admins/proc/view_feedback() - set category = "Admin" - set name = "View Feedback" - set desc = "Open the Feedback Viewer" - - if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT)) - return - - if(usr.client.feedback_viewer) - usr.client.feedback_viewer.display() - else - usr.client.feedback_viewer = new(usr.client) - -// This object holds the code to run the admin feedback viewer. -/datum/managed_browser/feedback_viewer - base_browser_id = "feedback_viewer" - title = "Submitted Feedback" - size_x = 900 - size_y = 500 - var/database/query/last_query = null - -/datum/managed_browser/feedback_viewer/New(client/new_client) - if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT, new_client)) // Just in case someone figures out a way to spawn this as non-staff. - message_admins("[new_client] tried to view feedback with insufficent permissions.") - qdel(src) - - ..() - -/datum/managed_browser/feedback_viewer/Destroy() - if(my_client) - my_client.feedback_viewer = null - return ..() - -/datum/managed_browser/feedback_viewer/proc/feedback_filter(row_name, thing_to_find, exact = FALSE) - var/database/query/query = null - if(exact) // Useful for ID searches, so searching for 'id 10' doesn't also get 'id 101'. - query = new({" - SELECT * - FROM [SQLITE_TABLE_FEEDBACK] - WHERE [row_name] == ? - ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] - DESC LIMIT 50; - "}, - thing_to_find - ) - - else - // Wrap the thing in %s so LIKE will work. - thing_to_find = "%[thing_to_find]%" - query = new({" - SELECT * - FROM [SQLITE_TABLE_FEEDBACK] - WHERE [row_name] LIKE ? - ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] - DESC LIMIT 50; - "}, - thing_to_find - ) - query.Execute(SSsqlite.sqlite_db) - SSsqlite.sqlite_check_for_errors(query, "Admin Feedback Viewer - Filter by [row_name] to find [thing_to_find]") - return query - -// Builds the window for players to review their feedback. -/datum/managed_browser/feedback_viewer/get_html() - var/list/dat = list("") - if(!last_query) // If no query was done before, just show the most recent feedbacks. - var/database/query/query = new({" - SELECT * - FROM [SQLITE_TABLE_FEEDBACK] - ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] - DESC LIMIT 50; - "} - ) - query.Execute(SSsqlite.sqlite_db) - SSsqlite.sqlite_check_for_errors(query, "Admin Feedback Viewer") - last_query = query - - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - while(last_query.NextRow()) - var/list/row_data = last_query.GetRowData() - dat += "" - dat += "" - dat += "" - dat += "" // TODO: Color this to make hashed keys more distinguishable. - var/text = row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] - if(length(text) > 512) - text = href(src, list( - "show_full_feedback" = 1, - "feedback_author" = row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR], - "feedback_content" = row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] - ), "[copytext(text, 1, 64)]... ([length(text)])") - else - text = replacetext(text, "\n", "
    ") - dat += "" - dat += "" - dat += "" - dat += "
    [href(src, list("filter_id" = 1), "ID")][href(src, list("filter_topic" = 1), "Topic")][href(src, list("filter_author" = 1), "Author")][href(src, list("filter_content" = 1), "Content")][href(src, list("filter_datetime" = 1), "Datetime")]
    [row_data[SQLITE_FEEDBACK_COLUMN_ID]][row_data[SQLITE_FEEDBACK_COLUMN_TOPIC]][row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR]][text][row_data[SQLITE_FEEDBACK_COLUMN_DATETIME]]
    " - - dat += "" - return dat.Join() - -// Used to show the full version of feedback in a seperate window. -/datum/managed_browser/feedback_viewer/proc/display_big_feedback(author, text) - var/list/dat = list("") - dat += replacetext(text, "\n", "
    ") - - var/datum/browser/popup = new(my_client.mob, "feedback_big", "[author]'s Feedback", 480, 520, src) - popup.set_content(dat.Join()) - popup.open() - - -/datum/managed_browser/feedback_viewer/Topic(href, href_list[]) - if(!my_client) - return FALSE - - if(href_list["close"]) // To avoid refreshing. - return - - if(href_list["show_full_feedback"]) - display_big_feedback(href_list["feedback_author"], href_list["feedback_content"]) - return - - if(href_list["filter_id"]) - var/id_to_search = tgui_input_number(my_client, "Write feedback ID here.", "Filter by ID", null) - if(id_to_search) - last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_ID, id_to_search, TRUE) - - if(href_list["filter_author"]) - var/author_to_search = tgui_input_text(my_client, "Write desired key or hash here. Partial keys/hashes are allowed.", "Filter by Author", null) - if(author_to_search) - last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_AUTHOR, author_to_search) - - if(href_list["filter_topic"]) - var/topic_to_search = tgui_input_text(my_client, "Write desired topic here. Partial topics are allowed. \ - \nThe current topics in the config are [english_list(config.sqlite_feedback_topics)].", "Filter by Topic", null) - if(topic_to_search) - last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_TOPIC, topic_to_search) - - if(href_list["filter_content"]) - var/content_to_search = tgui_input_text(my_client, "Write desired content to find here. Partial matches are allowed.", "Filter by Content", null, multiline = TRUE) - if(content_to_search) - last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_CONTENT, content_to_search) - - if(href_list["filter_datetime"]) - var/datetime_to_search = tgui_input_text(my_client, "Write desired datetime. Partial matches are allowed.\n\ - Format is 'YYYY-MM-DD HH:MM:SS'.", "Filter by Datetime", null) - if(datetime_to_search) - last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_DATETIME, datetime_to_search) - - // Refresh. +/client + var/datum/managed_browser/feedback_viewer/feedback_viewer = null + +/datum/admins/proc/view_feedback() + set category = "Admin" + set name = "View Feedback" + set desc = "Open the Feedback Viewer" + + if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT)) + return + + if(usr.client.feedback_viewer) + usr.client.feedback_viewer.display() + else + usr.client.feedback_viewer = new(usr.client) + +// This object holds the code to run the admin feedback viewer. +/datum/managed_browser/feedback_viewer + base_browser_id = "feedback_viewer" + title = "Submitted Feedback" + size_x = 900 + size_y = 500 + var/database/query/last_query = null + +/datum/managed_browser/feedback_viewer/New(client/new_client) + if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT, new_client)) // Just in case someone figures out a way to spawn this as non-staff. + message_admins("[new_client] tried to view feedback with insufficent permissions.") + qdel(src) + + ..() + +/datum/managed_browser/feedback_viewer/Destroy() + if(my_client) + my_client.feedback_viewer = null + return ..() + +/datum/managed_browser/feedback_viewer/proc/feedback_filter(row_name, thing_to_find, exact = FALSE) + var/database/query/query = null + if(exact) // Useful for ID searches, so searching for 'id 10' doesn't also get 'id 101'. + query = new({" + SELECT * + FROM [SQLITE_TABLE_FEEDBACK] + WHERE [row_name] == ? + ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] + DESC LIMIT 50; + "}, + thing_to_find + ) + + else + // Wrap the thing in %s so LIKE will work. + thing_to_find = "%[thing_to_find]%" + query = new({" + SELECT * + FROM [SQLITE_TABLE_FEEDBACK] + WHERE [row_name] LIKE ? + ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] + DESC LIMIT 50; + "}, + thing_to_find + ) + query.Execute(SSsqlite.sqlite_db) + SSsqlite.sqlite_check_for_errors(query, "Admin Feedback Viewer - Filter by [row_name] to find [thing_to_find]") + return query + +// Builds the window for players to review their feedback. +/datum/managed_browser/feedback_viewer/get_html() + var/list/dat = list("") + if(!last_query) // If no query was done before, just show the most recent feedbacks. + var/database/query/query = new({" + SELECT * + FROM [SQLITE_TABLE_FEEDBACK] + ORDER BY [SQLITE_FEEDBACK_COLUMN_ID] + DESC LIMIT 50; + "} + ) + query.Execute(SSsqlite.sqlite_db) + SSsqlite.sqlite_check_for_errors(query, "Admin Feedback Viewer") + last_query = query + + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + + while(last_query.NextRow()) + var/list/row_data = last_query.GetRowData() + dat += "" + dat += "" + dat += "" + dat += "" // TODO: Color this to make hashed keys more distinguishable. + var/text = row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] + if(length(text) > 512) + text = href(src, list( + "show_full_feedback" = 1, + "feedback_author" = row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR], + "feedback_content" = row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] + ), "[copytext(text, 1, 64)]... ([length(text)])") + else + text = replacetext(text, "\n", "
    ") + dat += "" + dat += "" + dat += "" + dat += "
    [href(src, list("filter_id" = 1), "ID")][href(src, list("filter_topic" = 1), "Topic")][href(src, list("filter_author" = 1), "Author")][href(src, list("filter_content" = 1), "Content")][href(src, list("filter_datetime" = 1), "Datetime")]
    [row_data[SQLITE_FEEDBACK_COLUMN_ID]][row_data[SQLITE_FEEDBACK_COLUMN_TOPIC]][row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR]][text][row_data[SQLITE_FEEDBACK_COLUMN_DATETIME]]
    " + + dat += "" + return dat.Join() + +// Used to show the full version of feedback in a seperate window. +/datum/managed_browser/feedback_viewer/proc/display_big_feedback(author, text) + var/list/dat = list("") + dat += replacetext(text, "\n", "
    ") + + var/datum/browser/popup = new(my_client.mob, "feedback_big", "[author]'s Feedback", 480, 520, src) + popup.set_content(dat.Join()) + popup.open() + + +/datum/managed_browser/feedback_viewer/Topic(href, href_list[]) + if(!my_client) + return FALSE + + if(href_list["close"]) // To avoid refreshing. + return + + if(href_list["show_full_feedback"]) + display_big_feedback(href_list["feedback_author"], href_list["feedback_content"]) + return + + if(href_list["filter_id"]) + var/id_to_search = tgui_input_number(my_client, "Write feedback ID here.", "Filter by ID", null) + if(id_to_search) + last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_ID, id_to_search, TRUE) + + if(href_list["filter_author"]) + var/author_to_search = tgui_input_text(my_client, "Write desired key or hash here. Partial keys/hashes are allowed.", "Filter by Author", null) + if(author_to_search) + last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_AUTHOR, author_to_search) + + if(href_list["filter_topic"]) + var/topic_to_search = tgui_input_text(my_client, "Write desired topic here. Partial topics are allowed. \ + \nThe current topics in the config are [english_list(config.sqlite_feedback_topics)].", "Filter by Topic", null) + if(topic_to_search) + last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_TOPIC, topic_to_search) + + if(href_list["filter_content"]) + var/content_to_search = tgui_input_text(my_client, "Write desired content to find here. Partial matches are allowed.", "Filter by Content", null, multiline = TRUE) + if(content_to_search) + last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_CONTENT, content_to_search) + + if(href_list["filter_datetime"]) + var/datetime_to_search = tgui_input_text(my_client, "Write desired datetime. Partial matches are allowed.\n\ + Format is 'YYYY-MM-DD HH:MM:SS'.", "Filter by Datetime", null) + if(datetime_to_search) + last_query = feedback_filter(SQLITE_FEEDBACK_COLUMN_DATETIME, datetime_to_search) + + // Refresh. display() \ No newline at end of file diff --git a/code/datums/modules.dm b/code/datums/modules.dm index 43d25a2e25..f2193c5e7b 100644 --- a/code/datums/modules.dm +++ b/code/datums/modules.dm @@ -1,63 +1,63 @@ -// module datum. -// this is per-object instance, and shows the condition of the modules in the object -// actual modules needed is referenced through modulestypes and the object type - -/datum/module - var/status // bits set if working, 0 if broken - var/installed // bits set if installed, 0 if missing - -// moduletypes datum -// this is per-object type, and shows the modules needed for a type of object - -/datum/moduletypes - var/list/modcount = list() // assoc list of the count of modules for a type - - -var/list/modules = list( // global associative list -"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge") - - -/datum/module/New(var/obj/O) - - var/type = O.type // the type of the creating object - - var/mneed = mods.inmodlist(type) // find if this type has modules defined - - if(!mneed) // not found in module list? - qdel(src) - return - - var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object - status = needed - installed = needed - -/datum/moduletypes/proc/addmod(var/type, var/modtextlist) - modules += type // index by type text - modules[type] = modtextlist - -/datum/moduletypes/proc/inmodlist(var/type) - return ("[type]" in modules) - -/datum/moduletypes/proc/getbitmask(var/type) - var/count = modcount["[type]"] - if(count) - return 2**count-1 - - var/modtext = modules["[type]"] - var/num = 1 - var/pos = 1 - - while(1) - pos = findtext(modtext, ",", pos, 0) - if(!pos) - break - else - pos++ - num++ - - modcount += "[type]" - modcount["[type]"] = num - - return 2**num-1 - - +// module datum. +// this is per-object instance, and shows the condition of the modules in the object +// actual modules needed is referenced through modulestypes and the object type + +/datum/module + var/status // bits set if working, 0 if broken + var/installed // bits set if installed, 0 if missing + +// moduletypes datum +// this is per-object type, and shows the modules needed for a type of object + +/datum/moduletypes + var/list/modcount = list() // assoc list of the count of modules for a type + + +var/list/modules = list( // global associative list +"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge") + + +/datum/module/New(var/obj/O) + + var/type = O.type // the type of the creating object + + var/mneed = mods.inmodlist(type) // find if this type has modules defined + + if(!mneed) // not found in module list? + qdel(src) + return + + var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object + status = needed + installed = needed + +/datum/moduletypes/proc/addmod(var/type, var/modtextlist) + modules += type // index by type text + modules[type] = modtextlist + +/datum/moduletypes/proc/inmodlist(var/type) + return ("[type]" in modules) + +/datum/moduletypes/proc/getbitmask(var/type) + var/count = modcount["[type]"] + if(count) + return 2**count-1 + + var/modtext = modules["[type]"] + var/num = 1 + var/pos = 1 + + while(1) + pos = findtext(modtext, ",", pos, 0) + if(!pos) + break + else + pos++ + num++ + + modcount += "[type]" + modcount["[type]"] = num + + return 2**num-1 + + diff --git a/code/datums/observation/z_moved.dm b/code/datums/observation/z_moved.dm index 63b89ba0da..ba30df374c 100644 --- a/code/datums/observation/z_moved.dm +++ b/code/datums/observation/z_moved.dm @@ -1,16 +1,16 @@ -// Observer Pattern Implementation: Z_Moved -// Registration type: /atom/movable -// -// Raised when: An /atom/movable instance has changed z-levels by any means. -// -// Arguments that the called proc should expect: -// /atom/movable/moving_instance: The instance that moved -// old_z: The z number before the move. -// new_z: The z number after the move. - - -GLOBAL_DATUM_INIT(z_moved_event, /decl/observ/z_moved, new) - -/decl/observ/z_moved - name = "Z_Moved" - expected_type = /atom/movable +// Observer Pattern Implementation: Z_Moved +// Registration type: /atom/movable +// +// Raised when: An /atom/movable instance has changed z-levels by any means. +// +// Arguments that the called proc should expect: +// /atom/movable/moving_instance: The instance that moved +// old_z: The z number before the move. +// new_z: The z number after the move. + + +GLOBAL_DATUM_INIT(z_moved_event, /decl/observ/z_moved, new) + +/decl/observ/z_moved + name = "Z_Moved" + expected_type = /atom/movable diff --git a/code/datums/repositories/crew.dm b/code/datums/repositories/crew.dm index 997a8357da..861e02ae4b 100644 --- a/code/datums/repositories/crew.dm +++ b/code/datums/repositories/crew.dm @@ -1,74 +1,74 @@ -var/global/datum/repository/crew/crew_repository = new() - -/datum/repository/crew - var/list/cache_data - -/datum/repository/crew/New() - cache_data = list() - ..() - -/datum/repository/crew/proc/health_data(var/zLevel) - var/list/crewmembers = list() - if(!zLevel) - return crewmembers - - var/z_level = "[zLevel]" - var/datum/cache_entry/cache_entry = cache_data[z_level] - if(!cache_entry) - cache_entry = new/datum/cache_entry - cache_data[z_level] = cache_entry - - if(world.time < cache_entry.timestamp) - return cache_entry.data - - var/tracked = scan() - for(var/obj/item/clothing/under/C in tracked) - var/turf/pos = get_turf(C) - var/area/B = pos?.loc //VOREStation Add: No sensor in Dorm - if((C.has_sensor) && (pos?.z == zLevel) && (C.sensor_mode != SUIT_SENSOR_OFF) && !(B.block_suit_sensors) && !(is_jammed(C)) && !(is_vore_jammed(C))) //VOREStation Edit - if(istype(C.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = C.loc - if(H.w_uniform != C) - continue - - var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]") - - crewmemberData["sensor_type"] = C.sensor_mode - crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown") - crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job") - crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job") - - if(C.sensor_mode >= SUIT_SENSOR_BINARY) - crewmemberData["dead"] = H.stat == DEAD - - if(C.sensor_mode >= SUIT_SENSOR_VITAL) - crewmemberData["stat"] = H.stat - crewmemberData["oxy"] = round(H.getOxyLoss(), 1) - crewmemberData["tox"] = round(H.getToxLoss(), 1) - crewmemberData["fire"] = round(H.getFireLoss(), 1) - crewmemberData["brute"] = round(H.getBruteLoss(), 1) - - if(C.sensor_mode >= SUIT_SENSOR_TRACKING) - var/area/A = get_area(H) - crewmemberData["area"] = sanitize(A.get_name()) - crewmemberData["x"] = pos.x - crewmemberData["y"] = pos.y - crewmemberData["realZ"] = pos.z - crewmemberData["z"] = using_map.get_zlevel_name(pos.z) - - crewmembers[++crewmembers.len] = crewmemberData - - crewmembers = sortByKey(crewmembers, "name") - cache_entry.timestamp = world.time + 5 SECONDS - cache_entry.data = crewmembers - - return crewmembers - -/datum/repository/crew/proc/scan() - var/list/tracked = list() - for(var/mob/living/carbon/human/H in mob_list) - if(istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/C = H.w_uniform - if (C.has_sensor) - tracked |= C - return tracked +var/global/datum/repository/crew/crew_repository = new() + +/datum/repository/crew + var/list/cache_data + +/datum/repository/crew/New() + cache_data = list() + ..() + +/datum/repository/crew/proc/health_data(var/zLevel) + var/list/crewmembers = list() + if(!zLevel) + return crewmembers + + var/z_level = "[zLevel]" + var/datum/cache_entry/cache_entry = cache_data[z_level] + if(!cache_entry) + cache_entry = new/datum/cache_entry + cache_data[z_level] = cache_entry + + if(world.time < cache_entry.timestamp) + return cache_entry.data + + var/tracked = scan() + for(var/obj/item/clothing/under/C in tracked) + var/turf/pos = get_turf(C) + var/area/B = pos?.loc //VOREStation Add: No sensor in Dorm + if((C.has_sensor) && (pos?.z == zLevel) && (C.sensor_mode != SUIT_SENSOR_OFF) && !(B.block_suit_sensors) && !(is_jammed(C)) && !(is_vore_jammed(C))) //VOREStation Edit + if(istype(C.loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = C.loc + if(H.w_uniform != C) + continue + + var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]") + + crewmemberData["sensor_type"] = C.sensor_mode + crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown") + crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job") + crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job") + + if(C.sensor_mode >= SUIT_SENSOR_BINARY) + crewmemberData["dead"] = H.stat == DEAD + + if(C.sensor_mode >= SUIT_SENSOR_VITAL) + crewmemberData["stat"] = H.stat + crewmemberData["oxy"] = round(H.getOxyLoss(), 1) + crewmemberData["tox"] = round(H.getToxLoss(), 1) + crewmemberData["fire"] = round(H.getFireLoss(), 1) + crewmemberData["brute"] = round(H.getBruteLoss(), 1) + + if(C.sensor_mode >= SUIT_SENSOR_TRACKING) + var/area/A = get_area(H) + crewmemberData["area"] = sanitize(A.get_name()) + crewmemberData["x"] = pos.x + crewmemberData["y"] = pos.y + crewmemberData["realZ"] = pos.z + crewmemberData["z"] = using_map.get_zlevel_name(pos.z) + + crewmembers[++crewmembers.len] = crewmemberData + + crewmembers = sortByKey(crewmembers, "name") + cache_entry.timestamp = world.time + 5 SECONDS + cache_entry.data = crewmembers + + return crewmembers + +/datum/repository/crew/proc/scan() + var/list/tracked = list() + for(var/mob/living/carbon/human/H in mob_list) + if(istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/C = H.w_uniform + if (C.has_sensor) + tracked |= C + return tracked diff --git a/code/datums/repositories/repository.dm b/code/datums/repositories/repository.dm index 04eee50540..511ea992c8 100644 --- a/code/datums/repositories/repository.dm +++ b/code/datums/repositories/repository.dm @@ -1,19 +1,19 @@ -/repository/New() - return - -/datum/cache_entry - var/timestamp - var/data - -/datum/cache_entry/New() - timestamp = world.time - -/datum/cache_entry/proc/is_valid() - return FALSE - -/datum/cache_entry/valid_until/New(var/valid_duration) - ..() - timestamp += valid_duration - -/datum/cache_entry/valid_until/is_valid() +/repository/New() + return + +/datum/cache_entry + var/timestamp + var/data + +/datum/cache_entry/New() + timestamp = world.time + +/datum/cache_entry/proc/is_valid() + return FALSE + +/datum/cache_entry/valid_until/New(var/valid_duration) + ..() + timestamp += valid_duration + +/datum/cache_entry/valid_until/is_valid() return world.time < timestamp \ No newline at end of file diff --git a/code/datums/soul_link.dm b/code/datums/soul_link.dm index d15049d924..1a99d170c5 100644 --- a/code/datums/soul_link.dm +++ b/code/datums/soul_link.dm @@ -1,152 +1,152 @@ -// A datum used to link multiple mobs together in some form. -// The code is from TG, however tweaked to be within the preferred code style. - -/mob/living - var/list/owned_soul_links // Soul links we are the owner of. - var/list/shared_soul_links // Soul links we are a/the sharer of. - -/mob/living/Destroy() - for(var/datum/soul_link/S as anything in owned_soul_links) - S.owner_died(FALSE) - qdel(S) // If the owner is destroy()'d, the soullink is destroy()'d. - owned_soul_links = null - for(var/datum/soul_link/S as anything in shared_soul_links) - S.sharer_died(FALSE) - S.remove_soul_sharer(src) // If a sharer is destroy()'d, they are simply removed. - shared_soul_links = null - return ..() - -// Keeps track of a Mob->Mob (potentially Player->Player) connection. -// Can be used to trigger actions on one party when events happen to another. -// Eg: shared deaths. -// Can be used to form a linked list of mob-hopping. -// Does NOT transfer with minds. -/datum/soul_link - var/mob/living/soul_owner - var/mob/living/soul_sharer - var/id // Optional ID, for tagging and finding specific instances. - -/datum/soul_link/Destroy() - if(soul_owner) - LAZYREMOVE(soul_owner.owned_soul_links, src) - soul_owner = null - if(soul_sharer) - LAZYREMOVE(soul_sharer.shared_soul_links, src) - soul_sharer = null - return ..() - -/datum/soul_link/proc/remove_soul_sharer(mob/living/sharer) - if(soul_sharer == sharer) - soul_sharer = null - LAZYREMOVE(sharer.shared_soul_links, src) - -// Used to assign variables, called primarily by soullink() -// Override this to create more unique soullinks (Eg: 1->Many relationships) -// Return TRUE/FALSE to return the soullink/null in soullink() -/datum/soul_link/proc/parse_args(mob/living/owner, mob/living/sharer) - if(!owner || !sharer) - return FALSE - soul_owner = owner - soul_sharer = sharer - LAZYADD(owner.owned_soul_links, src) - LAZYADD(sharer.shared_soul_links, src) - return TRUE - -// Runs after /living death() -// Override this for content. -/datum/soul_link/proc/owner_died(gibbed, mob/living/owner) - -// Runs after /living death() -// Override this for content. -/datum/soul_link/proc/sharer_died(gibbed, mob/living/owner) - -// Quick-use helper. -/proc/soul_link(typepath, ...) - var/datum/soul_link/S = new typepath() - if(S.parse_args(arglist(args.Copy(2, 0)))) - return S - - -///////////////// -// MULTISHARER // -///////////////// -// Abstract soullink for use with 1 Owner -> Many Sharer setups -/datum/soul_link/multi_sharer - var/list/soul_sharers - -/datum/soul_link/multi_sharer/parse_args(mob/living/owner, list/sharers) - if(!owner || !LAZYLEN(sharers)) - return FALSE - soul_owner = owner - soul_sharers = sharers - LAZYADD(owner.owned_soul_links, src) - for(var/mob/living/L as anything in sharers) - LAZYADD(L.shared_soul_links, src) - return TRUE - -/datum/soul_link/multi_sharer/remove_soul_sharer(mob/living/sharer) - LAZYREMOVE(soul_sharers, sharer) - - -///////////////// -// SHARED FATE // -///////////////// -// When the soulowner dies, the soulsharer dies, and vice versa -// This is intended for two players(or AI) and two mobs - -/datum/soul_link/shared_fate/owner_died(gibbed, mob/living/owner) - if(soul_sharer) - soul_sharer.death(gibbed) - -/datum/soul_link/shared_fate/sharer_died(gibbed, mob/living/sharer) - if(soul_owner) - soul_owner.death(gibbed) - -////////////// -// ONE WAY // -////////////// -// When the soul owner dies, the soul sharer dies, but NOT vice versa. -// This is intended for two players (or AI) and two mobs. - -/datum/soul_link/one_way/owner_died(gibbed, mob/living/owner) - if(soul_sharer) - soul_sharer.dust(FALSE) - -///////////////// -// SHARED BODY // -///////////////// -// When the soulsharer dies, they're placed in the soulowner, who remains alive -// If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying) -// This one is intended for one player moving between many mobs - -/datum/soul_link/shared_body/owner_died(gibbed, mob/living/owner) - if(soul_owner && soul_sharer) - if(soul_sharer.mind) - soul_sharer.mind.transfer_to(soul_owner) - soul_sharer.death(gibbed) - -/datum/soul_link/shared_body/sharer_died(gibbed, mob/living/sharer) - if(soul_owner && soul_sharer && soul_sharer.mind) - soul_sharer.mind.transfer_to(soul_owner) - - - -////////////////////// -// REPLACEMENT POOL // -////////////////////// -// When the owner dies, one of the sharers is placed in the owner's body, fully healed -// Sort of a "winner-stays-on" soullink -// Gibbing ends it immediately - -/datum/soul_link/multi_sharer/replacement_pool/owner_died(gibbed, mob/living/owner) - if(LAZYLEN(soul_sharers) && !gibbed) //let's not put them in some gibs - var/list/souls = shuffle(soul_sharers.Copy()) - for(var/mob/living/L as anything in souls) - if(L.stat != DEAD && L.mind) - L.mind.transfer_to(soul_owner) - soul_owner.revive(TRUE, TRUE) - L.death(FALSE) - -// Lose your claim to the throne! -/datum/soul_link/multi_sharer/replacement_pool/sharer_died(gibbed, mob/living/sharer) - remove_soul_sharer(sharer) +// A datum used to link multiple mobs together in some form. +// The code is from TG, however tweaked to be within the preferred code style. + +/mob/living + var/list/owned_soul_links // Soul links we are the owner of. + var/list/shared_soul_links // Soul links we are a/the sharer of. + +/mob/living/Destroy() + for(var/datum/soul_link/S as anything in owned_soul_links) + S.owner_died(FALSE) + qdel(S) // If the owner is destroy()'d, the soullink is destroy()'d. + owned_soul_links = null + for(var/datum/soul_link/S as anything in shared_soul_links) + S.sharer_died(FALSE) + S.remove_soul_sharer(src) // If a sharer is destroy()'d, they are simply removed. + shared_soul_links = null + return ..() + +// Keeps track of a Mob->Mob (potentially Player->Player) connection. +// Can be used to trigger actions on one party when events happen to another. +// Eg: shared deaths. +// Can be used to form a linked list of mob-hopping. +// Does NOT transfer with minds. +/datum/soul_link + var/mob/living/soul_owner + var/mob/living/soul_sharer + var/id // Optional ID, for tagging and finding specific instances. + +/datum/soul_link/Destroy() + if(soul_owner) + LAZYREMOVE(soul_owner.owned_soul_links, src) + soul_owner = null + if(soul_sharer) + LAZYREMOVE(soul_sharer.shared_soul_links, src) + soul_sharer = null + return ..() + +/datum/soul_link/proc/remove_soul_sharer(mob/living/sharer) + if(soul_sharer == sharer) + soul_sharer = null + LAZYREMOVE(sharer.shared_soul_links, src) + +// Used to assign variables, called primarily by soullink() +// Override this to create more unique soullinks (Eg: 1->Many relationships) +// Return TRUE/FALSE to return the soullink/null in soullink() +/datum/soul_link/proc/parse_args(mob/living/owner, mob/living/sharer) + if(!owner || !sharer) + return FALSE + soul_owner = owner + soul_sharer = sharer + LAZYADD(owner.owned_soul_links, src) + LAZYADD(sharer.shared_soul_links, src) + return TRUE + +// Runs after /living death() +// Override this for content. +/datum/soul_link/proc/owner_died(gibbed, mob/living/owner) + +// Runs after /living death() +// Override this for content. +/datum/soul_link/proc/sharer_died(gibbed, mob/living/owner) + +// Quick-use helper. +/proc/soul_link(typepath, ...) + var/datum/soul_link/S = new typepath() + if(S.parse_args(arglist(args.Copy(2, 0)))) + return S + + +///////////////// +// MULTISHARER // +///////////////// +// Abstract soullink for use with 1 Owner -> Many Sharer setups +/datum/soul_link/multi_sharer + var/list/soul_sharers + +/datum/soul_link/multi_sharer/parse_args(mob/living/owner, list/sharers) + if(!owner || !LAZYLEN(sharers)) + return FALSE + soul_owner = owner + soul_sharers = sharers + LAZYADD(owner.owned_soul_links, src) + for(var/mob/living/L as anything in sharers) + LAZYADD(L.shared_soul_links, src) + return TRUE + +/datum/soul_link/multi_sharer/remove_soul_sharer(mob/living/sharer) + LAZYREMOVE(soul_sharers, sharer) + + +///////////////// +// SHARED FATE // +///////////////// +// When the soulowner dies, the soulsharer dies, and vice versa +// This is intended for two players(or AI) and two mobs + +/datum/soul_link/shared_fate/owner_died(gibbed, mob/living/owner) + if(soul_sharer) + soul_sharer.death(gibbed) + +/datum/soul_link/shared_fate/sharer_died(gibbed, mob/living/sharer) + if(soul_owner) + soul_owner.death(gibbed) + +////////////// +// ONE WAY // +////////////// +// When the soul owner dies, the soul sharer dies, but NOT vice versa. +// This is intended for two players (or AI) and two mobs. + +/datum/soul_link/one_way/owner_died(gibbed, mob/living/owner) + if(soul_sharer) + soul_sharer.dust(FALSE) + +///////////////// +// SHARED BODY // +///////////////// +// When the soulsharer dies, they're placed in the soulowner, who remains alive +// If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying) +// This one is intended for one player moving between many mobs + +/datum/soul_link/shared_body/owner_died(gibbed, mob/living/owner) + if(soul_owner && soul_sharer) + if(soul_sharer.mind) + soul_sharer.mind.transfer_to(soul_owner) + soul_sharer.death(gibbed) + +/datum/soul_link/shared_body/sharer_died(gibbed, mob/living/sharer) + if(soul_owner && soul_sharer && soul_sharer.mind) + soul_sharer.mind.transfer_to(soul_owner) + + + +////////////////////// +// REPLACEMENT POOL // +////////////////////// +// When the owner dies, one of the sharers is placed in the owner's body, fully healed +// Sort of a "winner-stays-on" soullink +// Gibbing ends it immediately + +/datum/soul_link/multi_sharer/replacement_pool/owner_died(gibbed, mob/living/owner) + if(LAZYLEN(soul_sharers) && !gibbed) //let's not put them in some gibs + var/list/souls = shuffle(soul_sharers.Copy()) + for(var/mob/living/L as anything in souls) + if(L.stat != DEAD && L.mind) + L.mind.transfer_to(soul_owner) + soul_owner.revive(TRUE, TRUE) + L.death(FALSE) + +// Lose your claim to the throne! +/datum/soul_link/multi_sharer/replacement_pool/sharer_died(gibbed, mob/living/sharer) + remove_soul_sharer(sharer) diff --git a/code/datums/sun.dm b/code/datums/sun.dm index 69b725f305..d54ad28138 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -1,41 +1,41 @@ -/datum/sun - var/angle - var/dx - var/dy - var/rate - var/solar_next_update // last time the sun position was checked and adjusted - -/datum/sun/New() - rate = rand(50,200)/100 // 50% - 200% of standard rotation - if(prob(50)) // same chance to rotate clockwise than counter-clockwise - rate = -rate - angle = rand (0,360) // the station position to the sun is randomised at round start - -// calculate the sun's position given the time of day -// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. -// a full rotation thus take a game hour in that case -/datum/sun/proc/calc_position() - angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate - // now calculate and cache the (dx,dy) increments for line drawing - - var/s = sin(angle) - var/c = cos(angle) - - // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" - // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions - - if( abs(s) < abs(c)) - - dx = s / abs(c) - dy = c / abs(c) - - else - 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 GLOB.solars_list) - if(!SC.powernet) - GLOB.solars_list.Remove(SC) - continue - SC.update() +/datum/sun + var/angle + var/dx + var/dy + var/rate + var/solar_next_update // last time the sun position was checked and adjusted + +/datum/sun/New() + rate = rand(50,200)/100 // 50% - 200% of standard rotation + if(prob(50)) // same chance to rotate clockwise than counter-clockwise + rate = -rate + angle = rand (0,360) // the station position to the sun is randomised at round start + +// calculate the sun's position given the time of day +// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. +// a full rotation thus take a game hour in that case +/datum/sun/proc/calc_position() + angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate + // now calculate and cache the (dx,dy) increments for line drawing + + var/s = sin(angle) + var/c = cos(angle) + + // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" + // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions + + if( abs(s) < abs(c)) + + dx = s / abs(c) + dy = c / abs(c) + + else + 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 GLOB.solars_list) + if(!SC.powernet) + GLOB.solars_list.Remove(SC) + continue + SC.update() diff --git a/code/datums/supplypacks/voidsuits_vr.dm b/code/datums/supplypacks/voidsuits_vr.dm index df5c1861e9..340d074c50 100644 --- a/code/datums/supplypacks/voidsuits_vr.dm +++ b/code/datums/supplypacks/voidsuits_vr.dm @@ -1,154 +1,154 @@ -/datum/supply_pack/voidsuits/explorer - name = "Exploration voidsuits" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/exploration = 2, - /obj/item/clothing/head/helmet/space/void/exploration = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/shoes/magboots = 2, - /obj/item/weapon/tank/oxygen = 2 - ) - cost = 45 - containertype = /obj/structure/closet/crate/secure - containername = "Exploration voidsuit crate" //CHOMP explo keep - access = access_explorer //CHOMP explo keep - -/datum/supply_pack/voidsuits/explorer_medic - name = "Expedition Medic voidsuits" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/exploration = 2, - /obj/item/clothing/head/helmet/space/void/exploration = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/shoes/magboots = 2, - /obj/item/weapon/tank/oxygen = 2 - ) - cost = 45 - containertype = /obj/structure/closet/crate/secure - containername = "Expedition Medic voidsuit crate" //CHOMP explo keep - access = access_explorer //CHOMP explo keep - -/datum/supply_pack/voidsuits/pilot - name = "Pilot voidsuits" - contains = list( - /obj/item/clothing/suit/space/void/pilot = 1, - /obj/item/clothing/head/helmet/space/void/pilot = 1, - /obj/item/clothing/mask/breath = 1, - /obj/item/clothing/shoes/magboots = 1, - /obj/item/weapon/tank/oxygen = 1 - ) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "Pilot voidsuit crate" - access = access_pilot - - -// Surplus! -// CHOMPStation EDIT Start: Change Commonwealth to Solgov. -/datum/supply_pack/voidsuits/solgov_mining - name = "Solgov mining voidsuit" - contains = list( - /obj/item/clothing/suit/space/void/mining/alt2, - /obj/item/clothing/head/helmet/space/void/mining/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov mining voidsuit crate" - access = access_mining - -/datum/supply_pack/voidsuits/solgov_anomaly //CHOMP explo keep - name = "Solgov anomaly suit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/anomaly/alt, - /obj/item/clothing/head/helmet/space/anomaly/alt - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov anomaly suit crate" - access = access_xenoarch - -/datum/supply_pack/voidsuits/solgov_riot //CHOMP explo keep - name = "Solgov riot voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/security/riot/alt, - /obj/item/clothing/head/helmet/space/void/security/riot/alt - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov riot voidsuit crate" - access = access_brig - -/datum/supply_pack/voidsuits/solgov_pilot //CHOMP explo keep - name = "Solgov pilot voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/pilot/alt2, - /obj/item/clothing/head/helmet/space/void/pilot/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov pilot voidsuit crate" - access = access_pilot - -/datum/supply_pack/voidsuits/solgov_medical //CHOMP explo keep - name = "Solgov medical voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/medical/alt2, - /obj/item/clothing/head/helmet/space/void/medical/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov medical voidsuit crate" -/datum/supply_pack/voidsuits/solgov_explore - - name = "Solgov exploration voidsuit" - contains = list( - /obj/item/clothing/suit/space/void/exploration/alt2, - /obj/item/clothing/head/helmet/space/void/exploration/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov exploration voidsuit crate" //CHOMP explo keep - access = access_explorer //CHOMP explo keep - -/datum/supply_pack/voidsuits/solgov_engineer //CHOMP explo keep - name = "Solgov engineering voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/engineering/alt2, - /obj/item/clothing/head/helmet/space/void/engineering/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov engineering voidsuit crate" - access = access_engine - -/datum/supply_pack/voidsuits/solgov_atmos //CHOMP explo keep - name = "Solgov atmos voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/atmos/alt2, - /obj/item/clothing/head/helmet/space/void/atmos/alt2 - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov atmos voidsuit crate" - access = access_atmospherics - -/datum/supply_pack/voidsuits/solgov_captain //CHOMP explo keep - name = "Solgov captain voidsuit" //CHOMP explo keep - contains = list( - /obj/item/clothing/suit/space/void/captain/alt, - /obj/item/clothing/head/helmet/space/void/captain/alt - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure - name = "Solgov captain voidsuit crate" - access = access_captain -// CHOMPStation EDIT End - -/datum/supply_pack/voidsuits/csc_breaker - name = "Shipbreaker's Industrial Suit (inc. jetpack)" - contains = list( - /obj/item/clothing/suit/space/void/salvagecorp_shipbreaker, - /obj/item/clothing/head/helmet/space/void/salvagecorp_shipbreaker, - /obj/item/weapon/tank/jetpack/breaker - ) - cost = 100 - containertype = /obj/structure/closet/crate/secure - name = "Coyote Salvage Corp industrial voidsuit crate" +/datum/supply_pack/voidsuits/explorer + name = "Exploration voidsuits" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/exploration = 2, + /obj/item/clothing/head/helmet/space/void/exploration = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/shoes/magboots = 2, + /obj/item/weapon/tank/oxygen = 2 + ) + cost = 45 + containertype = /obj/structure/closet/crate/secure + containername = "Exploration voidsuit crate" //CHOMP explo keep + access = access_explorer //CHOMP explo keep + +/datum/supply_pack/voidsuits/explorer_medic + name = "Expedition Medic voidsuits" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/exploration = 2, + /obj/item/clothing/head/helmet/space/void/exploration = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/shoes/magboots = 2, + /obj/item/weapon/tank/oxygen = 2 + ) + cost = 45 + containertype = /obj/structure/closet/crate/secure + containername = "Expedition Medic voidsuit crate" //CHOMP explo keep + access = access_explorer //CHOMP explo keep + +/datum/supply_pack/voidsuits/pilot + name = "Pilot voidsuits" + contains = list( + /obj/item/clothing/suit/space/void/pilot = 1, + /obj/item/clothing/head/helmet/space/void/pilot = 1, + /obj/item/clothing/mask/breath = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/weapon/tank/oxygen = 1 + ) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Pilot voidsuit crate" + access = access_pilot + + +// Surplus! +// CHOMPStation EDIT Start: Change Commonwealth to Solgov. +/datum/supply_pack/voidsuits/solgov_mining + name = "Solgov mining voidsuit" + contains = list( + /obj/item/clothing/suit/space/void/mining/alt2, + /obj/item/clothing/head/helmet/space/void/mining/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov mining voidsuit crate" + access = access_mining + +/datum/supply_pack/voidsuits/solgov_anomaly //CHOMP explo keep + name = "Solgov anomaly suit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/anomaly/alt, + /obj/item/clothing/head/helmet/space/anomaly/alt + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov anomaly suit crate" + access = access_xenoarch + +/datum/supply_pack/voidsuits/solgov_riot //CHOMP explo keep + name = "Solgov riot voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/security/riot/alt, + /obj/item/clothing/head/helmet/space/void/security/riot/alt + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov riot voidsuit crate" + access = access_brig + +/datum/supply_pack/voidsuits/solgov_pilot //CHOMP explo keep + name = "Solgov pilot voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/pilot/alt2, + /obj/item/clothing/head/helmet/space/void/pilot/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov pilot voidsuit crate" + access = access_pilot + +/datum/supply_pack/voidsuits/solgov_medical //CHOMP explo keep + name = "Solgov medical voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/medical/alt2, + /obj/item/clothing/head/helmet/space/void/medical/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov medical voidsuit crate" +/datum/supply_pack/voidsuits/solgov_explore + + name = "Solgov exploration voidsuit" + contains = list( + /obj/item/clothing/suit/space/void/exploration/alt2, + /obj/item/clothing/head/helmet/space/void/exploration/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov exploration voidsuit crate" //CHOMP explo keep + access = access_explorer //CHOMP explo keep + +/datum/supply_pack/voidsuits/solgov_engineer //CHOMP explo keep + name = "Solgov engineering voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/engineering/alt2, + /obj/item/clothing/head/helmet/space/void/engineering/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov engineering voidsuit crate" + access = access_engine + +/datum/supply_pack/voidsuits/solgov_atmos //CHOMP explo keep + name = "Solgov atmos voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/atmos/alt2, + /obj/item/clothing/head/helmet/space/void/atmos/alt2 + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov atmos voidsuit crate" + access = access_atmospherics + +/datum/supply_pack/voidsuits/solgov_captain //CHOMP explo keep + name = "Solgov captain voidsuit" //CHOMP explo keep + contains = list( + /obj/item/clothing/suit/space/void/captain/alt, + /obj/item/clothing/head/helmet/space/void/captain/alt + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure + name = "Solgov captain voidsuit crate" + access = access_captain +// CHOMPStation EDIT End + +/datum/supply_pack/voidsuits/csc_breaker + name = "Shipbreaker's Industrial Suit (inc. jetpack)" + contains = list( + /obj/item/clothing/suit/space/void/salvagecorp_shipbreaker, + /obj/item/clothing/head/helmet/space/void/salvagecorp_shipbreaker, + /obj/item/weapon/tank/jetpack/breaker + ) + cost = 100 + containertype = /obj/structure/closet/crate/secure + name = "Coyote Salvage Corp industrial voidsuit crate" diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 6611092b38..9b7571e1d1 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -1,254 +1,254 @@ -/datum/category_item/underwear/undershirt/none - is_default = TRUE - name = "None" - always_last = TRUE - -/datum/category_item/underwear/undershirt/shirt - name = "Shirt" - icon_state = "undershirt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_fem - name = "Babydoll shirt" - icon_state = "undershirt_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long - name = "Longsleeve Shirt" - icon_state = "undershirt_long" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_s - name = "Shirt, button-down" - icon_state = "shirt_long_s" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_fem - name = "Longsleeve Shirt, feminine" - icon_state = "undershirt_long_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_female_s - name = "Button-down Shirt, feminine" - icon_state = "shirt_long_female_s" - has_color = TRUE - - -/datum/category_item/underwear/undershirt/fishnet_simple - name = "Fishnet shirt" - icon_state = "fishnet_simple" - -/datum/category_item/underwear/undershirt/tank_top - name = "Tank top" - icon_state = "tanktop" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt - name = "Tank top, alt" - icon_state = "tanktop_alt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt_fem - name = "Tank top, alt, feminine" - icon_state = "tanktop_alt_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck - name = "Tank top, feminine, v-neck" - icon_state = "tanktop_alt_fem_vneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_cropped_vneck - name = "Tank top, feminine, cropped & v-neck" - icon_state = "tanktop_cropped_vneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_fire - name = "Tank top, fire" - icon_state = "tank_fire_s" - -/datum/category_item/underwear/undershirt/tank_top_fire_fem - name = "Tank top, fire, feminine" - icon_state = "tank_fire_fem_s" - -/datum/category_item/underwear/undershirt/tank_top_rainbow - name = "Tank top, rainbow" - icon_state = "tank_rainbow_s" - -/datum/category_item/underwear/undershirt/tank_top_stripes - name = "Tank top, striped" - icon_state = "tank_stripes_s" - -/datum/category_item/underwear/undershirt/tank_top_sun - name = "Tank top, sun" - icon_state = "tank_sun_s" - -/datum/category_item/underwear/undershirt/shirt_heart - name = "Shirt, heart" - icon_state = "lover_s" - -/datum/category_item/underwear/undershirt/shirt_heart_fem - name = "Shirt, heart, babydoll" - icon_state = "lover_fem_s" - -/datum/category_item/underwear/undershirt/shirt_nt - name = "Shirt, NT" - icon_state = "shirt_nano_s" - -/datum/category_item/underwear/undershirt/shirt_love_nt - name = "Shirt, I<3NT" - icon_state = "ilovent_s" - -/datum/category_item/underwear/undershirt/shirt_love_nt_fem - name = "Shirt, I<3NT, babydoll" - icon_state = "ilovent_fem_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt - name = "Shortsleeve shirt" - icon_state = "shortsleeve" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem - name = "Shortsleeve babydoll shirt" - icon_state = "shortsleeve_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck - name = "Shortsleeve babydoll shirt, v-neck" - icon_state = "shortsleeve_fem_vneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/polo_shirt - name = "Polo shirt" - icon_state = "polo" - has_color = TRUE - -/datum/category_item/underwear/undershirt/sport_shirt_green - name = "Sport shirt, green" - icon_state = "greenshirtsport_s" - -/datum/category_item/underwear/undershirt/sport_shirt_red - name = "Sport shirt, red" - icon_state = "redshirtsport_s" - -/datum/category_item/underwear/undershirt/sport_shirt_blue - name = "Sport shirt, blue" - icon_state = "blueshirtsport_s" - -/datum/category_item/underwear/undershirt/shirt_tiedye - name = "Shirt, tiedye" - icon_state = "shirt_tiedye_s" - -/datum/category_item/underwear/undershirt/shirt_blue_striped - name = "Shirt, blue stripes" - icon_state = "shirt_stripes_s" - -/datum/category_item/underwear/undershirt/bowling - name = "Bowling Shirt, Red" - icon_state = "bowling" - -/datum/category_item/underwear/undershirt/bowlingp - name = "Bowling Shirt, Pink" - icon_state = "bowlingp" - -/datum/category_item/underwear/undershirt/bowlinga - name = "Bowling Shirt, Aqua" - icon_state = "bowlinga" - -/datum/category_item/underwear/undershirt/bowlingw - name = "Bowling Shirt, White" - icon_state = "bowlingw" - -/datum/category_item/underwear/undershirt/longjon - name = "Long John Shirt" - icon_state = "ljont" - has_color = TRUE - -/datum/category_item/underwear/undershirt/longstripe_black - name = "Longsleeve Striped Shirt, Black" - icon_state = "longstripe" - -/datum/category_item/underwear/undershirt/longstripe_blue - name = "Longsleeve Striped Shirt, Blue" - icon_state = "longstripe_blue" - -/datum/category_item/underwear/undershirt/tiedye - name = "Tiedye Shirt" - icon_state = "tiedye" - -/datum/category_item/underwear/undershirt/longstripe_pink - name = "Longsleeve Striped Shirt, Pink" - icon_state = "longstripe_pink_s" - -/datum/category_item/underwear/undershirt/wingshirt - name = "Pink Wing Shirt" - icon_state = "wing_shirt_s" - -/datum/category_item/underwear/undershirt/pinkblack_tshirt - name = "Pink and Black T-Shirt" - icon_state = "pinkblack_tshirt" - -/datum/category_item/underwear/undershirt/turtle - name = "Turtleneck, Old" - icon_state = "turtleneck_old" - has_color = TRUE - -/datum/category_item/underwear/undershirt/sleevelessturtle - name = "Turtleneck, Sleeveless, Old" - icon_state = "turtleneck_sleeveless_old" - has_color = TRUE - -/datum/category_item/underwear/undershirt/turtleneck - name = "Turtleneck" - icon_state = "turtleneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/turtleneck_smooth - name = "Turtleneck, Smooth" - icon_state = "turtleneck_smooth" - has_color = TRUE - -/datum/category_item/underwear/undershirt/turtlesleeveless - name = "Turtleneck, Sleeveless" - icon_state = "turtleneck_sleeveless" - has_color = TRUE - -/datum/category_item/underwear/undershirt/leotardturtle - name = "Leotard Turtleneck" - icon_state = "leotard_turtleneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/leotardturtlesleeveless - name = "Leotard Turtleneck, Sleeveless" - icon_state = "leotard_turtleneck_sleeveless" - has_color = TRUE - -/datum/category_item/underwear/undershirt/dress_shirt_fem - name = "Dress shirt, feminine" - icon_state = "undershirt_dress_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/dress_shirt - name = "Dress shirt, masculine" - icon_state = "undershirt_dress" - has_color = TRUE - -/datum/category_item/underwear/undershirt/midriff - name = "Tanktop, midriff" - icon_state = "tank_midriff" - has_color = TRUE - -/datum/category_item/underwear/undershirt/midriffshort - name = "Tanktop, midriff, short" - icon_state = "tank_midriff_short" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shibari - name = "Shibari Binding" - icon_state = "shibari" - has_color = TRUE - -/datum/category_item/underwear/undershirt/leotard - name = "Leotard" - icon_state = "leotard" - has_color = TRUE +/datum/category_item/underwear/undershirt/none + is_default = TRUE + name = "None" + always_last = TRUE + +/datum/category_item/underwear/undershirt/shirt + name = "Shirt" + icon_state = "undershirt" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_fem + name = "Babydoll shirt" + icon_state = "undershirt_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long + name = "Longsleeve Shirt" + icon_state = "undershirt_long" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_s + name = "Shirt, button-down" + icon_state = "shirt_long_s" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_fem + name = "Longsleeve Shirt, feminine" + icon_state = "undershirt_long_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_female_s + name = "Button-down Shirt, feminine" + icon_state = "shirt_long_female_s" + has_color = TRUE + + +/datum/category_item/underwear/undershirt/fishnet_simple + name = "Fishnet shirt" + icon_state = "fishnet_simple" + +/datum/category_item/underwear/undershirt/tank_top + name = "Tank top" + icon_state = "tanktop" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt + name = "Tank top, alt" + icon_state = "tanktop_alt" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt_fem + name = "Tank top, alt, feminine" + icon_state = "tanktop_alt_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck + name = "Tank top, feminine, v-neck" + icon_state = "tanktop_alt_fem_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_cropped_vneck + name = "Tank top, feminine, cropped & v-neck" + icon_state = "tanktop_cropped_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_fire + name = "Tank top, fire" + icon_state = "tank_fire_s" + +/datum/category_item/underwear/undershirt/tank_top_fire_fem + name = "Tank top, fire, feminine" + icon_state = "tank_fire_fem_s" + +/datum/category_item/underwear/undershirt/tank_top_rainbow + name = "Tank top, rainbow" + icon_state = "tank_rainbow_s" + +/datum/category_item/underwear/undershirt/tank_top_stripes + name = "Tank top, striped" + icon_state = "tank_stripes_s" + +/datum/category_item/underwear/undershirt/tank_top_sun + name = "Tank top, sun" + icon_state = "tank_sun_s" + +/datum/category_item/underwear/undershirt/shirt_heart + name = "Shirt, heart" + icon_state = "lover_s" + +/datum/category_item/underwear/undershirt/shirt_heart_fem + name = "Shirt, heart, babydoll" + icon_state = "lover_fem_s" + +/datum/category_item/underwear/undershirt/shirt_nt + name = "Shirt, NT" + icon_state = "shirt_nano_s" + +/datum/category_item/underwear/undershirt/shirt_love_nt + name = "Shirt, I<3NT" + icon_state = "ilovent_s" + +/datum/category_item/underwear/undershirt/shirt_love_nt_fem + name = "Shirt, I<3NT, babydoll" + icon_state = "ilovent_fem_s" + +/datum/category_item/underwear/undershirt/shortsleeve_shirt + name = "Shortsleeve shirt" + icon_state = "shortsleeve" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem + name = "Shortsleeve babydoll shirt" + icon_state = "shortsleeve_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck + name = "Shortsleeve babydoll shirt, v-neck" + icon_state = "shortsleeve_fem_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/polo_shirt + name = "Polo shirt" + icon_state = "polo" + has_color = TRUE + +/datum/category_item/underwear/undershirt/sport_shirt_green + name = "Sport shirt, green" + icon_state = "greenshirtsport_s" + +/datum/category_item/underwear/undershirt/sport_shirt_red + name = "Sport shirt, red" + icon_state = "redshirtsport_s" + +/datum/category_item/underwear/undershirt/sport_shirt_blue + name = "Sport shirt, blue" + icon_state = "blueshirtsport_s" + +/datum/category_item/underwear/undershirt/shirt_tiedye + name = "Shirt, tiedye" + icon_state = "shirt_tiedye_s" + +/datum/category_item/underwear/undershirt/shirt_blue_striped + name = "Shirt, blue stripes" + icon_state = "shirt_stripes_s" + +/datum/category_item/underwear/undershirt/bowling + name = "Bowling Shirt, Red" + icon_state = "bowling" + +/datum/category_item/underwear/undershirt/bowlingp + name = "Bowling Shirt, Pink" + icon_state = "bowlingp" + +/datum/category_item/underwear/undershirt/bowlinga + name = "Bowling Shirt, Aqua" + icon_state = "bowlinga" + +/datum/category_item/underwear/undershirt/bowlingw + name = "Bowling Shirt, White" + icon_state = "bowlingw" + +/datum/category_item/underwear/undershirt/longjon + name = "Long John Shirt" + icon_state = "ljont" + has_color = TRUE + +/datum/category_item/underwear/undershirt/longstripe_black + name = "Longsleeve Striped Shirt, Black" + icon_state = "longstripe" + +/datum/category_item/underwear/undershirt/longstripe_blue + name = "Longsleeve Striped Shirt, Blue" + icon_state = "longstripe_blue" + +/datum/category_item/underwear/undershirt/tiedye + name = "Tiedye Shirt" + icon_state = "tiedye" + +/datum/category_item/underwear/undershirt/longstripe_pink + name = "Longsleeve Striped Shirt, Pink" + icon_state = "longstripe_pink_s" + +/datum/category_item/underwear/undershirt/wingshirt + name = "Pink Wing Shirt" + icon_state = "wing_shirt_s" + +/datum/category_item/underwear/undershirt/pinkblack_tshirt + name = "Pink and Black T-Shirt" + icon_state = "pinkblack_tshirt" + +/datum/category_item/underwear/undershirt/turtle + name = "Turtleneck, Old" + icon_state = "turtleneck_old" + has_color = TRUE + +/datum/category_item/underwear/undershirt/sleevelessturtle + name = "Turtleneck, Sleeveless, Old" + icon_state = "turtleneck_sleeveless_old" + has_color = TRUE + +/datum/category_item/underwear/undershirt/turtleneck + name = "Turtleneck" + icon_state = "turtleneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/turtleneck_smooth + name = "Turtleneck, Smooth" + icon_state = "turtleneck_smooth" + has_color = TRUE + +/datum/category_item/underwear/undershirt/turtlesleeveless + name = "Turtleneck, Sleeveless" + icon_state = "turtleneck_sleeveless" + has_color = TRUE + +/datum/category_item/underwear/undershirt/leotardturtle + name = "Leotard Turtleneck" + icon_state = "leotard_turtleneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/leotardturtlesleeveless + name = "Leotard Turtleneck, Sleeveless" + icon_state = "leotard_turtleneck_sleeveless" + has_color = TRUE + +/datum/category_item/underwear/undershirt/dress_shirt_fem + name = "Dress shirt, feminine" + icon_state = "undershirt_dress_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/dress_shirt + name = "Dress shirt, masculine" + icon_state = "undershirt_dress" + has_color = TRUE + +/datum/category_item/underwear/undershirt/midriff + name = "Tanktop, midriff" + icon_state = "tank_midriff" + has_color = TRUE + +/datum/category_item/underwear/undershirt/midriffshort + name = "Tanktop, midriff, short" + icon_state = "tank_midriff_short" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shibari + name = "Shibari Binding" + icon_state = "shibari" + has_color = TRUE + +/datum/category_item/underwear/undershirt/leotard + name = "Leotard" + icon_state = "leotard" + has_color = TRUE diff --git a/code/defines/gases.dm b/code/defines/gases.dm index 8b56b5bf45..6b2a67c243 100644 --- a/code/defines/gases.dm +++ b/code/defines/gases.dm @@ -1,54 +1,54 @@ -/decl/xgm_gas/oxygen - id = "oxygen" - name = "Oxygen" - specific_heat = 20 // J/(mol*K) - molar_mass = 0.032 // kg/mol - - flags = XGM_GAS_OXIDIZER - -/decl/xgm_gas/nitrogen - id = "nitrogen" - name = "Nitrogen" - specific_heat = 20 // J/(mol*K) - molar_mass = 0.028 // kg/mol - -/decl/xgm_gas/carbon_dioxide - id = "carbon_dioxide" - name = "Carbon Dioxide" - specific_heat = 30 // J/(mol*K) - molar_mass = 0.044 // kg/mol - -/decl/xgm_gas/phoron - id = "phoron" - name = "Phoron" - - //Note that this has a significant impact on TTV yield. - //Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure. - specific_heat = 200 // J/(mol*K) - - //Hypothetical group 14 (same as carbon), period 8 element. - //Using multiplicity rule, it's atomic number is 162 - //and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is: - molar_mass = 0.405 // kg/mol - - tile_overlay = "phoron" - overlay_limit = 0.7 - flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL //R-UST port, adding XGM_GAS_FUSION_FUEL flag. - -/decl/xgm_gas/volatile_fuel - id = "volatile_fuel" - name = "Volatile Fuel" - specific_heat = 253 // J/(mol*K) C8H18 gasoline. Isobaric, but good enough. - molar_mass = 0.114 // kg/mol. same. - - flags = XGM_GAS_FUEL - -/decl/xgm_gas/nitrous_oxide - id = "nitrous_oxide" - name = "Nitrous Oxide" - specific_heat = 40 // J/(mol*K) - molar_mass = 0.044 // kg/mol. N2O - - tile_overlay = "nitrous_oxide" - overlay_limit = 1 +/decl/xgm_gas/oxygen + id = "oxygen" + name = "Oxygen" + specific_heat = 20 // J/(mol*K) + molar_mass = 0.032 // kg/mol + + flags = XGM_GAS_OXIDIZER + +/decl/xgm_gas/nitrogen + id = "nitrogen" + name = "Nitrogen" + specific_heat = 20 // J/(mol*K) + molar_mass = 0.028 // kg/mol + +/decl/xgm_gas/carbon_dioxide + id = "carbon_dioxide" + name = "Carbon Dioxide" + specific_heat = 30 // J/(mol*K) + molar_mass = 0.044 // kg/mol + +/decl/xgm_gas/phoron + id = "phoron" + name = "Phoron" + + //Note that this has a significant impact on TTV yield. + //Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure. + specific_heat = 200 // J/(mol*K) + + //Hypothetical group 14 (same as carbon), period 8 element. + //Using multiplicity rule, it's atomic number is 162 + //and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is: + molar_mass = 0.405 // kg/mol + + tile_overlay = "phoron" + overlay_limit = 0.7 + flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL //R-UST port, adding XGM_GAS_FUSION_FUEL flag. + +/decl/xgm_gas/volatile_fuel + id = "volatile_fuel" + name = "Volatile Fuel" + specific_heat = 253 // J/(mol*K) C8H18 gasoline. Isobaric, but good enough. + molar_mass = 0.114 // kg/mol. same. + + flags = XGM_GAS_FUEL + +/decl/xgm_gas/nitrous_oxide + id = "nitrous_oxide" + name = "Nitrous Oxide" + specific_heat = 40 // J/(mol*K) + molar_mass = 0.044 // kg/mol. N2O + + tile_overlay = "nitrous_oxide" + overlay_limit = 1 flags = XGM_GAS_OXIDIZER \ No newline at end of file diff --git a/code/defines/obj.dm b/code/defines/obj.dm index c59cc6e714..beca4354c1 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -1,150 +1,150 @@ -/obj/structure/signpost - icon = 'icons/obj/stationobjs.dmi' - icon_state = "signpost" - anchored = TRUE - density = TRUE - -/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob) - return attack_hand(user) - -/obj/structure/signpost/attack_hand(mob/user as mob) - if(tgui_alert(user, "Travel back to ss13?","Return?",list("Yes","No")) == "Yes") - if(user.z != src.z) return - user.forceMove(pick(latejoin)) - -/obj/effect/mark - var/mark = "" - icon = 'icons/misc/mark.dmi' - icon_state = "blank" - anchored = TRUE - layer = 99 - mouse_opacity = 0 - unacidable = TRUE//Just to be sure. - -/obj/effect/beam - name = "beam" - density = FALSE - unacidable = TRUE//Just to be sure. - var/def_zone - pass_flags = PASSTABLE - - -/obj/effect/begin - name = "begin" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "begin" - anchored = TRUE - unacidable = TRUE - -/* - * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile - */ - -/var/list/acting_rank_prefixes = list("acting", "temporary", "interim", "provisional") - -/proc/make_list_rank(rank) - for(var/prefix in acting_rank_prefixes) - if(findtext(rank, "[prefix] ", 1, 2+length(prefix))) - return copytext(rank, 2+length(prefix)) - return rank - -/obj/effect/laser - name = "laser" - desc = "IT BURNS!!!" - icon = 'icons/obj/projectiles.dmi' - var/damage = 0.0 - var/range = 10.0 - -/obj/effect/projection - name = "Projection" - desc = "This looks like a projection of something." - anchored = TRUE - -/obj/effect/shut_controller - name = "shut controller" - var/moving = null - var/list/parts = list( ) - -/obj/structure/showcase - name = "Showcase" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "showcase_1" - desc = "A stand with the empty body of a cyborg bolted to it." - density = TRUE - anchored = TRUE - unacidable = TRUE//temporary until I decide whether the borg can be removed. -veyveyr - -/obj/structure/showcase/sign - name = "WARNING: WILDERNESS" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "wilderness1" - desc = "This appears to be a sign warning people that the other side is dangerous. It also says that NanoTrasen cannot guarantee your safety beyond this point." - -/obj/structure/showcase/sign/nt //yw edit - name = "Welcome: Nanotrasen" - icon = 'icons/obj/structures_yw.dmi' - icon_state = "NT_sign" - desc = "This appears to be a sign welcoming Nanotrasen presonnel. It also says that NanoTrasen is the best coporation around." -/obj/structure/showcase/sign/hephaestus //yw edit - name = "Hephaestus Whiskey Station" - icon = 'icons/obj/structures_yw.dmi' - icon_state = "Hephaestus_sign" - desc = "This appears to be a sign welcoming Hephaestus Industry personnel. It seems rather old and partly rusted." - -/obj/structure/showcase/yw/chaplain //yw edit - name = "Strange Bronze Machinery" - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "mania_motor" - desc = "A strange device made of bronze. It has an unknown purpose." - -/obj/structure/showcase/yw/chaplain2 //yw edit - name = "Strange Bronze Machinery" - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "obelisk" - desc = "A strange device made of bronze. It has an unknown purpose." - -/obj/structure/showcase/yw/plaque //yw edit - name = "Commerative Plaque" - icon = 'icons/obj/structures_yw32x32.dmi' - icon_state = "plaque" - desc = "A plaque commerating the building efforts of the sleepiest outpost in the sector, Yawn Wider." - density = 0 - -/obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER - -/obj/item/weapon/beach_ball - icon = 'icons/misc/beach.dmi' - icon_state = "beachball" - name = "beach ball" - density = FALSE - anchored = FALSE - w_class = ITEMSIZE_LARGE - force = 0.0 - throwforce = 0.0 - throw_speed = 1 - throw_range = 20 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/weapon/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - user.drop_item() - src.throw_at(target, throw_range, throw_speed, user) - -/obj/item/weapon/beach_ball/dodgeball - icon = 'icons/obj/balls_vr.dmi' - icon_state = "dodgeball" - item_state = "dodgeball" - item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_balls_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_balls_vr.dmi') - name = "dodgeball" - desc = "Think fast, chucklenuts!" - w_class = ITEMSIZE_LARGE //Stops people from hiding it in their bags/pockets - force = 0.1 - throwforce = 0.1 - throw_speed = 5 - throw_range = 15 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - hitsound = 'sound/weapons/dodgeball.ogg' - -/obj/effect/spawner - name = "object spawner" +/obj/structure/signpost + icon = 'icons/obj/stationobjs.dmi' + icon_state = "signpost" + anchored = TRUE + density = TRUE + +/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob) + return attack_hand(user) + +/obj/structure/signpost/attack_hand(mob/user as mob) + if(tgui_alert(user, "Travel back to ss13?","Return?",list("Yes","No")) == "Yes") + if(user.z != src.z) return + user.forceMove(pick(latejoin)) + +/obj/effect/mark + var/mark = "" + icon = 'icons/misc/mark.dmi' + icon_state = "blank" + anchored = TRUE + layer = 99 + mouse_opacity = 0 + unacidable = TRUE//Just to be sure. + +/obj/effect/beam + name = "beam" + density = FALSE + unacidable = TRUE//Just to be sure. + var/def_zone + pass_flags = PASSTABLE + + +/obj/effect/begin + name = "begin" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "begin" + anchored = TRUE + unacidable = TRUE + +/* + * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile + */ + +/var/list/acting_rank_prefixes = list("acting", "temporary", "interim", "provisional") + +/proc/make_list_rank(rank) + for(var/prefix in acting_rank_prefixes) + if(findtext(rank, "[prefix] ", 1, 2+length(prefix))) + return copytext(rank, 2+length(prefix)) + return rank + +/obj/effect/laser + name = "laser" + desc = "IT BURNS!!!" + icon = 'icons/obj/projectiles.dmi' + var/damage = 0.0 + var/range = 10.0 + +/obj/effect/projection + name = "Projection" + desc = "This looks like a projection of something." + anchored = TRUE + +/obj/effect/shut_controller + name = "shut controller" + var/moving = null + var/list/parts = list( ) + +/obj/structure/showcase + name = "Showcase" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "showcase_1" + desc = "A stand with the empty body of a cyborg bolted to it." + density = TRUE + anchored = TRUE + unacidable = TRUE//temporary until I decide whether the borg can be removed. -veyveyr + +/obj/structure/showcase/sign + name = "WARNING: WILDERNESS" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "wilderness1" + desc = "This appears to be a sign warning people that the other side is dangerous. It also says that NanoTrasen cannot guarantee your safety beyond this point." + +/obj/structure/showcase/sign/nt //yw edit + name = "Welcome: Nanotrasen" + icon = 'icons/obj/structures_yw.dmi' + icon_state = "NT_sign" + desc = "This appears to be a sign welcoming Nanotrasen presonnel. It also says that NanoTrasen is the best coporation around." +/obj/structure/showcase/sign/hephaestus //yw edit + name = "Hephaestus Whiskey Station" + icon = 'icons/obj/structures_yw.dmi' + icon_state = "Hephaestus_sign" + desc = "This appears to be a sign welcoming Hephaestus Industry personnel. It seems rather old and partly rusted." + +/obj/structure/showcase/yw/chaplain //yw edit + name = "Strange Bronze Machinery" + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "mania_motor" + desc = "A strange device made of bronze. It has an unknown purpose." + +/obj/structure/showcase/yw/chaplain2 //yw edit + name = "Strange Bronze Machinery" + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "obelisk" + desc = "A strange device made of bronze. It has an unknown purpose." + +/obj/structure/showcase/yw/plaque //yw edit + name = "Commerative Plaque" + icon = 'icons/obj/structures_yw32x32.dmi' + icon_state = "plaque" + desc = "A plaque commerating the building efforts of the sleepiest outpost in the sector, Yawn Wider." + density = 0 + +/obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER + +/obj/item/weapon/beach_ball + icon = 'icons/misc/beach.dmi' + icon_state = "beachball" + name = "beach ball" + density = FALSE + anchored = FALSE + w_class = ITEMSIZE_LARGE + force = 0.0 + throwforce = 0.0 + throw_speed = 1 + throw_range = 20 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/weapon/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + user.drop_item() + src.throw_at(target, throw_range, throw_speed, user) + +/obj/item/weapon/beach_ball/dodgeball + icon = 'icons/obj/balls_vr.dmi' + icon_state = "dodgeball" + item_state = "dodgeball" + item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_balls_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_balls_vr.dmi') + name = "dodgeball" + desc = "Think fast, chucklenuts!" + w_class = ITEMSIZE_LARGE //Stops people from hiding it in their bags/pockets + force = 0.1 + throwforce = 0.1 + throw_speed = 5 + throw_range = 15 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + hitsound = 'sound/weapons/dodgeball.ogg' + +/obj/effect/spawner + name = "object spawner" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 116a17c67e..ef1b35a085 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1,891 +1,891 @@ -/obj/item/weapon/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - force = 3.0 - throwforce = 2.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - drop_sound = 'sound/items/drop/device.ogg' - pickup_sound = 'sound/items/pickup/device.ogg' - -/obj/item/weapon/rsp - name = "\improper Rapid-Seed-Producer (RSP)" - desc = "A device used to rapidly deploy seeds." - icon = 'icons/obj/items.dmi' - icon_state = "rcd" - opacity = 0 - density = FALSE - anchored = FALSE - var/stored_matter = 0 - var/mode = 1 - w_class = ITEMSIZE_NORMAL - drop_sound = 'sound/items/drop/device.ogg' - pickup_sound = 'sound/items/pickup/device.ogg' - -/obj/item/weapon/soap - name = "soap" - desc = "A cheap bar of soap. Smells of lye." - gender = PLURAL - icon = 'icons/obj/soap.dmi' - icon_state = "soap" - flags = NOCONDUCT - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_HOLSTER - throwforce = 0 - throw_speed = 4 - throw_range = 20 - var/randomize = TRUE - var/square_chance = 10 - -/obj/item/weapon/soap/Initialize() - if(randomize && prob(square_chance)) - icon_state = "[icon_state]-alt" - -/obj/item/weapon/soap/nanotrasen - desc = "A NanoTrasen-brand bar of soap. Smells of phoron, a years-old marketing gimmick." - icon_state = "soapnt" - -/obj/item/weapon/soap/deluxe - icon_state = "soapdeluxe" - -/obj/item/weapon/soap/deluxe/New() - desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]." - ..() - -/obj/item/weapon/soap/syndie - desc = "An untrustworthy bar of soap. Smells of fear." - icon_state = "soapsyndie" - -/obj/item/weapon/soap/space_soap - desc = "Smells like hot metal and walnuts." - icon_state = "space_soap" - -/obj/item/weapon/soap/water_soap - desc = "Smells like chlorine." - icon_state = "water_soap" - -/obj/item/weapon/soap/fire_soap - desc = "Smells like a campfire." - icon_state = "fire_soap" - -/obj/item/weapon/soap/rainbow_soap - desc = "Smells sickly sweet." - icon_state = "rainbow_soap" - -/obj/item/weapon/soap/diamond_soap - desc = "Smells like saffron and vanilla." - icon_state = "diamond_soap" - -/obj/item/weapon/soap/uranium_soap - desc = "Smells not great... Not terrible." - icon_state = "uranium_soap" - -/obj/item/weapon/soap/silver_soap - desc = "Smells like birch and amaranth." - icon_state = "silver_soap" - -/obj/item/weapon/soap/brown_soap - desc = "Smells like cinnamon and cognac." - icon_state = "brown_soap" - -/obj/item/weapon/soap/white_soap - desc = "Smells like nutmeg and oats." - icon_state = "white_soap" - -/obj/item/weapon/soap/grey_soap - desc = "Smells like bergamot and lilies." - icon_state = "grey_soap" - -/obj/item/weapon/soap/pink_soap - desc = "Smells like bubblegum." - icon_state = "pink_soap" - -/obj/item/weapon/soap/purple_soap - desc = "Smells like lavender." - icon_state = "purple_soap" - -/obj/item/weapon/soap/blue_soap - desc = "Smells like cardamom." - icon_state = "blue_soap" - -/obj/item/weapon/soap/cyan_soap - desc = "Smells like bluebells and peaches." - icon_state = "cyan_soap" - -/obj/item/weapon/soap/green_soap - desc = "Smells like a freshly mowed lawn." - icon_state = "green_soap" - -/obj/item/weapon/soap/yellow_soap - desc = "Smells like citron and ginger." - icon_state = "yellow_soap" - -/obj/item/weapon/soap/orange_soap - desc = "Smells like oranges and dark chocolate." - icon_state = "orange_soap" - -/obj/item/weapon/soap/red_soap - desc = "Smells like cherries." - icon_state = "red_soap" - -/obj/item/weapon/soap/golden_soap - desc = "Smells like honey." - icon_state = "golden_soap" - -/obj/item/weapon/bikehorn - name = "bike horn" - desc = "A horn off of a bicycle." - icon = 'icons/obj/items.dmi' - icon_state = "bike_horn" - item_state = "bike_horn" - throwforce = 3 - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_HOLSTER - throw_speed = 3 - throw_range = 15 - attack_verb = list("HONKED") - var/spam_flag = 0 - -/obj/item/weapon/c_tube - name = "cardboard tube" - desc = "A tube... of cardboard." - icon = 'icons/obj/items.dmi' - icon_state = "c_tube" - throwforce = 1 - w_class = ITEMSIZE_SMALL - throw_speed = 4 - throw_range = 5 - -/obj/item/weapon/disk - name = "disk" - icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit - drop_sound = 'sound/items/drop/disk.ogg' - pickup_sound = 'sound/items/pickup/disk.ogg' - -/obj/item/weapon/disk/nuclear - name = "nuclear authentication disk" - desc = "Better keep this safe." - icon_state = "nucleardisk" - item_state = "card-id" - w_class = ITEMSIZE_SMALL - -/* -/obj/item/weapon/game_kit - name = "Gaming Kit" - icon = 'icons/obj/items.dmi' - icon_state = "game_kit" - var/selected = null - var/board_stat = null - var/data = "" - var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" - item_state = "sheet-metal" - w_class = ITEMSIZE_HUGE -*/ - -/obj/item/weapon/gift - name = "gift" - desc = "A wrapped item." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" - var/size = 3.0 - var/obj/item/gift = null - item_state = "gift" - w_class = ITEMSIZE_LARGE - -/*/obj/item/weapon/syndicate_uplink - name = "station bounced radio" - desc = "Remain silent about this..." - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - var/temp = null - var/uses = 10.0 - var/selfdestruct = 0.0 - var/traitor_frequency = 0.0 - var/mob/currentUser = null - var/obj/item/device/radio/origradio = null - flags = ONBELT - w_class = ITEMSIZE_SMALL - item_state = "radio" - throw_speed = 4 - throw_range = 20 - matter = list(MAT_STEEL = 100) - origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 3)*/ - -/obj/item/weapon/SWF_uplink - name = "station-bounced radio" - desc = "Used to communicate, it appears." - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - var/temp = null - var/uses = 4.0 - var/selfdestruct = 0.0 - var/traitor_frequency = 0.0 - var/obj/item/device/radio/origradio = null - slot_flags = SLOT_BELT - item_state = "radio" - throwforce = 5 - w_class = ITEMSIZE_SMALL - throw_speed = 4 - throw_range = 20 - matter = list(MAT_STEEL = 100) - origin_tech = list(TECH_MAGNET = 1) - drop_sound = 'sound/items/drop/device.ogg' - pickup_sound = 'sound/items/pickup/device.ogg' - -/obj/item/weapon/staff - name = "wizards staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - attack_verb = list("bludgeoned", "whacked", "disciplined") - -/obj/item/weapon/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - -/obj/item/weapon/staff/gentcane - name = "Gentlemans Cane" - desc = "An ebony can with an ivory tip." - icon = 'icons/obj/weapons.dmi' - icon_state = "cane" - -/obj/item/weapon/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/weapons.dmi' - icon_state = "stick" - item_state = "cane" - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - -/obj/item/weapon/module - icon = 'icons/obj/module.dmi' - icon_state = "std_module" - item_state = "std_mod" - w_class = ITEMSIZE_SMALL - var/mtype = 1 // 1=electronic 2=hardware - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - -/obj/item/weapon/module/card_reader - name = "card reader module" - icon_state = "card_mod" - item_state = "std_mod" - desc = "An electronic module for reading data and ID cards." - -/obj/item/weapon/module/power_control - name = "power control module" - icon_state = "power_mod" - item_state = "std_mod" - desc = "Heavy-duty switching circuits for power control." - matter = list(MAT_STEEL = 50, MAT_GLASS = 50) - -/obj/item/weapon/module/id_auth - name = "\improper ID authentication module" - icon_state = "id_mod" - desc = "A module allowing secure authorization of ID cards." - -/obj/item/weapon/module/cell_power - name = "power cell regulator module" - icon_state = "power_mod" - item_state = "std_mod" - desc = "A converter and regulator allowing the use of power cells." - -/obj/item/weapon/module/cell_power - name = "power cell charger module" - icon_state = "power_mod" - item_state = "std_mod" - desc = "Charging circuits for power cells." - -/obj/item/device/camera_bug - name = "camera bug" - icon = 'icons/obj/device.dmi' - icon_state = "flash" - w_class = ITEMSIZE_TINY - item_state = "electronic" - throw_speed = 4 - throw_range = 20 - -/obj/item/weapon/camera_bug/attack_self(mob/usr as mob) - var/list/cameras = new/list() - for (var/obj/machinery/camera/C in cameranet.cameras) - if (C.bugged && C.status) - cameras.Add(C) - if (length(cameras) == 0) - to_chat(usr, "No bugged functioning cameras found.") - return - - var/list/friendly_cameras = new/list() - - for (var/obj/machinery/camera/C in cameras) - friendly_cameras.Add(C.c_tag) - - var/target = tgui_input_list(usr, "Select the camera to observe", "Select Camera", friendly_cameras) - if (!target) - return - for (var/obj/machinery/camera/C in cameras) - if (C.c_tag == target) - target = C - break - if (usr.stat == 2) return - - usr.client.eye = target - -/* -/obj/item/weapon/cigarpacket - name = "Pete's Cuban Cigars" - desc = "The most robust cigars on the planet." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cigarpacket" - item_state = "cigarpacket" - w_class = ITEMSIZE_TINY - throwforce = 2 - var/cigarcount = 6 - flags = ONBELT - */ - -/obj/item/weapon/pai_cable - desc = "A flexible coated cable with a universal jack on one end." - name = "data cable" - icon = 'icons/obj/power.dmi' - icon_state = "wire1" - - var/obj/machinery/machine - -/obj/item/weapon/pai_cable/Destroy() - machine = null - return ..() - -///////////////////////////////////////Stock Parts ///////////////////////////////// - -/obj/item/weapon/storage/part_replacer - name = "rapid part exchange device" - desc = "A special mechanical module made to store, sort, and apply standard machine parts." - icon = 'icons/obj/storage_vr.dmi' - icon_state = "RPED" - item_icons = list(slot_l_hand_str = 'icons/vore/custom_items_left_hand_yw.dmi', slot_r_hand_str = 'icons/vore/custom_items_right_hand_yw.dmi') //YW add - RPED sprite - item_state = "RPED" - w_class = ITEMSIZE_HUGE - can_hold = list(/obj/item/weapon/stock_parts) - storage_slots = 50 - use_to_pickup = TRUE - allow_quick_gather = 1 - allow_quick_empty = 1 - collection_mode = 1 - display_contents_with_number = 1 - max_w_class = ITEMSIZE_NORMAL - max_storage_space = 100 - drop_sound = 'sound/items/drop/device.ogg' - pickup_sound = 'sound/items/pickup/device.ogg' - var/panel_req = TRUE - var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg' - var/reskin_ran = FALSE - var/unique_reskin = list("Soulless" = "RPED", - "Soulful" = "RPED_old") - -/obj/item/weapon/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, 1) - else -*/ - playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, 1) - -/obj/item/weapon/storage/part_replacer/adv - name = "advanced rapid part exchange device" - desc = "A special mechanical module made to store, sort, and apply standard machine parts. This one has a greatly upgraded storage capacity, \ - and the ability to hold beakers." - can_hold = list(/obj/item/weapon/stock_parts, /obj/item/weapon/reagent_containers/glass/beaker) - storage_slots = 200 - max_storage_space = 400 - -/obj/item/weapon/storage/part_replacer/adv/discount_bluespace - name = "prototype bluespace rapid part exchange device" - icon_state = "DBRPED" - item_state = "DBRPED" - desc = "A special mechanical module made to store, sort, and apply standard machine parts. This one has a further increased storage capacity, \ - and the ability to work on machines with closed maintenance panels." - storage_slots = 400 - max_storage_space = 800 - panel_req = FALSE - pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/pshoom.ogg' - unique_reskin = list("Soulless" = "DBRPED", - "Soulful" = "DBRPED_old") - -/obj/item/weapon/storage/part_replacer/examine(mob/user) - . = ..() - if(!reskin_ran) - . += "[src]'s external casing can be modified via alt-click." - -/obj/item/weapon/storage/part_replacer/AltClick(mob/user) - . = ..() - if(!reskin_ran) - reskin_radial(user) - -/obj/item/weapon/storage/part_replacer/proc/reskin_radial(mob/M) - if(!LAZYLEN(unique_reskin)) - return - - var/list/items = list() - for(var/reskin_option in unique_reskin) - var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) - items += list("[reskin_option]" = item_image) - sortList(items) - - var/pick = show_radial_menu(M, src, items, radius = 38, require_near = TRUE) - if(!pick) - return - if(!unique_reskin[pick]) - return - icon_state = unique_reskin[pick] - item_state = unique_reskin[pick] - reskin_ran = TRUE - to_chat(M, "[src] is now '[pick]'.") - -/obj/item/weapon/storage/part_replacer/drop_contents() // hacky-feeling tier-based drop system - hide_from(usr) - var/turf/T = get_turf(src) - var/lowest_rating = INFINITY // We want the lowest-part tier rating in the RPED so we only drop the lowest-tier parts. - /* - * Why not just use the stock part's rating variable? - * Future-proofing for a potential future where stock parts aren't the only thing that can fit in an RPED. - * see: /tg/ and /vg/'s RPEDs fitting power cells, beakers, etc. - * 10/8/21 edit - It's Time. - */ - for(var/obj/item/B in contents) - if(B.rped_rating() < lowest_rating) - lowest_rating = B.rped_rating() - for(var/obj/item/B in contents) - if(B.rped_rating() > lowest_rating) - continue - remove_from_storage(B, T) - - -/obj/item/weapon/stock_parts - name = "stock part" - desc = "What?" - gender = PLURAL - icon = 'icons/obj/stock_parts.dmi' - w_class = ITEMSIZE_SMALL - var/rating = 1 - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - -/obj/item/weapon/stock_parts/New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - ..() - -/obj/item/weapon/stock_parts/get_rating() - return rating - -//Rank 1 - -/obj/item/weapon/stock_parts/console_screen - name = "console screen" - desc = "Used in the construction of computers and other devices with a interactive console." - icon_state = "screen" - origin_tech = list(TECH_MATERIAL = 1) - rating = 5 // these are actually Really Important for some things?? - matter = list(MAT_GLASS = 200) - -/obj/item/weapon/stock_parts/capacitor - name = "capacitor" - desc = "A basic capacitor used in the construction of a variety of devices." - icon_state = "capacitor" - origin_tech = list(TECH_POWER = 1) - matter = list(MAT_STEEL = 50,MAT_GLASS = 50) - - var/charge = 0 - var/max_charge = 1000 - -/obj/item/weapon/stock_parts/capacitor/New() - . = ..() - max_charge *= rating - -/obj/item/weapon/stock_parts/capacitor/proc/charge(var/amount) - charge += amount - if(charge > max_charge) - charge = max_charge - -/obj/item/weapon/stock_parts/capacitor/proc/use(var/amount) - if(charge) - charge -= amount - if(charge < 0) - charge = 0 - -/obj/item/weapon/stock_parts/scanning_module - name = "scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "scan_module" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/manipulator - name = "micro-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "micro_mani" - origin_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1) - matter = list(MAT_STEEL = 30) - -/obj/item/weapon/stock_parts/micro_laser - name = "micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "micro_laser" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 10,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/matter_bin - name = "matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "matter_bin" - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MAT_STEEL = 80) - -//Rank 2 - -/obj/item/weapon/stock_parts/capacitor/adv - name = "advanced capacitor" - desc = "An advanced capacitor used in the construction of a variety of devices." - icon_state = "capacitor_adv" - origin_tech = list(TECH_POWER = 3) - rating = 2 - matter = list(MAT_STEEL = 50,MAT_GLASS = 50) - -/obj/item/weapon/stock_parts/scanning_module/adv - name = "advanced scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "scan_module_adv" - origin_tech = list(TECH_MAGNET = 3) - rating = 2 - matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/manipulator/nano - name = "nano-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "nano_mani" - origin_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2) - rating = 2 - matter = list(MAT_STEEL = 30) - -/obj/item/weapon/stock_parts/micro_laser/high - name = "high-power micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "high_micro_laser" - origin_tech = list(TECH_MAGNET = 3) - rating = 2 - matter = list(MAT_STEEL = 10,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/matter_bin/adv - name = "advanced matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "advanced_matter_bin" - origin_tech = list(TECH_MATERIAL = 3) - rating = 2 - matter = list(MAT_STEEL = 80) - -//Rating 3 - -/obj/item/weapon/stock_parts/capacitor/super - name = "super capacitor" - desc = "A super-high capacity capacitor used in the construction of a variety of devices." - icon_state = "capacitor_super" - origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4) - rating = 3 - matter = list(MAT_STEEL = 50,MAT_GLASS = 50) - -/obj/item/weapon/stock_parts/scanning_module/phasic - name = "phasic scanning module" - desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." - icon_state = "scan_module_phasic" - origin_tech = list(TECH_MAGNET = 5) - rating = 3 - matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/manipulator/pico - name = "pico-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "pico_mani" - origin_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2) - rating = 3 - matter = list(MAT_STEEL = 30) - -/obj/item/weapon/stock_parts/micro_laser/ultra - name = "ultra-high-power micro-laser" - icon_state = "ultra_high_micro_laser" - desc = "A tiny laser used in certain devices." - origin_tech = list(TECH_MAGNET = 5) - rating = 3 - matter = list(MAT_STEEL = 10,MAT_GLASS = 20) - -/obj/item/weapon/stock_parts/matter_bin/super - name = "super matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "super_matter_bin" - origin_tech = list(TECH_MATERIAL = 5) - rating = 3 - matter = list(MAT_STEEL = 80) - -// Rating 4 - Anomaly - -/obj/item/weapon/stock_parts/capacitor/hyper - name = "hyper capacitor" - desc = "A hyper-capacity capacitor used in the construction of a variety of devices." - icon_state = "capacitor_hyper" - origin_tech = list(TECH_POWER = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 1, TECH_ARCANE = 1) - rating = 4 - matter = list(MAT_STEEL = 80, MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/scanning_module/hyper - name = "quantum scanning module" - desc = "A compact, near-perfect resolution quantum scanning module used in the construction of certain devices." - icon_state = "scan_module_hyper" - origin_tech = list(TECH_MAGNET = 6, TECH_BLUESPACE = 1, TECH_ARCANE = 1) - rating = 4 - matter = list(MAT_STEEL = 100,MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/manipulator/hyper - name = "planck-manipulator" - desc = "A miniscule manipulator used in the construction of certain devices." - icon_state = "hyper_mani" - origin_tech = list(TECH_MATERIAL = 6, TECH_DATA = 3, TECH_ARCANE = 1) - rating = 4 - matter = list(MAT_STEEL = 30) - -/obj/item/weapon/stock_parts/micro_laser/hyper - name = "hyper-power micro-laser" - icon_state = "hyper_micro_laser" - desc = "A tiny laser used in certain devices." - origin_tech = list(TECH_MAGNET = 6, TECH_ARCANE = 1) - rating = 4 - matter = list(MAT_STEEL = 30, MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/matter_bin/hyper - name = "hyper matter bin" - desc = "A container for holding compressed matter awaiting re-construction." - icon_state = "hyper_matter_bin" - origin_tech = list(TECH_MATERIAL = 6, TECH_ARCANE = 1) - rating = 4 - matter = list(MAT_STEEL = 100) - -// Rating 5 - Precursor - -/obj/item/weapon/stock_parts/capacitor/omni - name = "omni-capacitor" - desc = "A capacitor of immense capacity used in the construction of a variety of devices." - icon_state = "capacitor_omni" - origin_tech = list(TECH_POWER = 7, TECH_MATERIAL = 6, TECH_BLUESPACE = 3, TECH_PRECURSOR = 1) - rating = 5 - matter = list(MAT_STEEL = 80, MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/scanning_module/omni - name = "omni-scanning module" - desc = "A compact, perfect resolution temporospatial scanning module used in the construction of certain devices." - icon_state = "scan_module_omni" - origin_tech = list(TECH_MAGNET = 7, TECH_BLUESPACE = 3, TECH_PRECURSOR = 1) - rating = 5 - matter = list(MAT_STEEL = 100,MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/manipulator/omni - name = "omni-manipulator" - desc = "A strange, infinitesimal manipulator used in the construction of certain devices." - icon_state = "omni_mani" - origin_tech = list(TECH_MATERIAL = 7, TECH_DATA = 4, TECH_PRECURSOR = 1) - rating = 5 - matter = list(MAT_STEEL = 30) - -/obj/item/weapon/stock_parts/micro_laser/omni - name = "omni-power micro-laser" - icon_state = "omni_micro_laser" - desc = "A strange laser used in certain devices." - origin_tech = list(TECH_MAGNET = 7, TECH_PRECURSOR = 1) - rating = 5 - matter = list(MAT_STEEL = 30, MAT_GLASS = 40) - -/obj/item/weapon/stock_parts/matter_bin/omni - name = "omni-matter bin" - desc = "A strange container for holding compressed matter awaiting re-construction." - icon_state = "omni_matter_bin" - origin_tech = list(TECH_MATERIAL = 7, TECH_PRECURSOR = 1) - rating = 5 - matter = list(MAT_STEEL = 100) - - -// Subspace stock parts - -/obj/item/weapon/stock_parts/subspace/ansible - name = "subspace ansible" - icon_state = "subspace_ansible" - desc = "A compact module capable of sensing extradimensional activity." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MAT_STEEL = 30,MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/subspace/sub_filter - name = "hyperwave filter" - icon_state = "hyperwave_filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." - origin_tech = list(TECH_DATA = 4, TECH_MAGNET = 2) - matter = list(MAT_STEEL = 30,MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/subspace/amplifier - name = "subspace amplifier" - icon_state = "subspace_amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MAT_STEEL = 30,MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/subspace/treatment - name = "subspace treatment disk" - icon_state = "treatment_disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 5, TECH_BLUESPACE = 2) - matter = list(MAT_STEEL = 30,MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/subspace/analyzer - name = "subspace wavelength analyzer" - icon_state = "wavelength_analyzer" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MAT_STEEL = 30,MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/subspace/crystal - name = "ansible crystal" - icon_state = "ansible_crystal" - desc = "A crystal made from pure glass used to transmit laser databursts to subspace." - origin_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MAT_GLASS = 50) - -/obj/item/weapon/stock_parts/subspace/transmitter - name = "subspace transmitter" - icon_state = "subspace_transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." - origin_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3) - matter = list(MAT_STEEL = 50) - -/obj/item/weapon/ectoplasm - name = "ectoplasm" - desc = "Spooky!" - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm2" - -/obj/item/weapon/research - name = "research debugging device" - desc = "Instant research tool. For testing purposes only." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "smes_coil" - origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19, TECH_PRECURSOR = 19) - -// Additional construction stock parts - -/obj/item/weapon/stock_parts/gear - name = "gear" - desc = "A gear used for construction." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "gear" - origin_tech = list(TECH_ENGINEERING = 1) - matter = list(MAT_STEEL = 50) - -/obj/item/weapon/stock_parts/motor - name = "motor" - desc = "A motor used for construction." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "motor" - origin_tech = list(TECH_ENGINEERING = 1) - matter = list(MAT_STEEL = 60, MAT_GLASS = 10) - -/obj/item/weapon/stock_parts/spring - name = "spring" - desc = "A spring used for construction." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "spring" - origin_tech = list(TECH_ENGINEERING = 1) - matter = list(MAT_STEEL = 40) - -/obj/effect/spawner/parts - name = "nondescript parts bundle that shouldn't exist" - desc = "this qdels itself lol! if you're reading this you're codediving or Someone fucked up" - var/list/items - -/obj/effect/spawner/parts/Initialize(mapload) - ..() - if(items && items.len) - var/turf/T = get_turf(src) - for(var/path in items) - for(var/i in 1 to 5) - new path(T) - return INITIALIZE_HINT_QDEL - -/obj/effect/spawner/parts/t1 - name = "basic parts bundle" - desc = "5 of each T1 part, no more and no less." - items = list( - /obj/item/weapon/stock_parts/matter_bin, - /obj/item/weapon/stock_parts/manipulator, - /obj/item/weapon/stock_parts/capacitor, - /obj/item/weapon/stock_parts/scanning_module, - /obj/item/weapon/stock_parts/micro_laser - ) - -/obj/effect/spawner/parts/t2 - name = "advanced parts bundle" - desc = "5 of each T2 part, no more and no less." - items = list( - /obj/item/weapon/stock_parts/matter_bin/adv, - /obj/item/weapon/stock_parts/manipulator/nano, - /obj/item/weapon/stock_parts/capacitor/adv, - /obj/item/weapon/stock_parts/scanning_module/adv, - /obj/item/weapon/stock_parts/micro_laser/high - ) - -/obj/effect/spawner/parts/t3 - name = "super parts bundle" - desc = "5 of each T3 part, no more and no less." - items = list( - /obj/item/weapon/stock_parts/matter_bin/super, - /obj/item/weapon/stock_parts/manipulator/pico, - /obj/item/weapon/stock_parts/capacitor/super, - /obj/item/weapon/stock_parts/scanning_module/phasic, - /obj/item/weapon/stock_parts/micro_laser/ultra - ) - -/obj/effect/spawner/parts/t4 - name = "hyper parts bundle" - desc = "5 of each T4 part, no more and no less." - items = list( - /obj/item/weapon/stock_parts/matter_bin/hyper, - /obj/item/weapon/stock_parts/manipulator/hyper, - /obj/item/weapon/stock_parts/capacitor/hyper, - /obj/item/weapon/stock_parts/scanning_module/hyper, - /obj/item/weapon/stock_parts/micro_laser/hyper - ) - -/obj/effect/spawner/parts/t5 - name = "omni parts bundle" - desc = "5 of each T5 part, no more and no less." - items = list( - /obj/item/weapon/stock_parts/matter_bin/omni, - /obj/item/weapon/stock_parts/manipulator/omni, - /obj/item/weapon/stock_parts/capacitor/omni, - /obj/item/weapon/stock_parts/scanning_module/omni, - /obj/item/weapon/stock_parts/micro_laser/omni - ) +/obj/item/weapon/phone + name = "red phone" + desc = "Should anything ever go wrong..." + icon = 'icons/obj/items.dmi' + icon_state = "red_phone" + force = 3.0 + throwforce = 2.0 + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_SMALL + attack_verb = list("called", "rang") + hitsound = 'sound/weapons/ring.ogg' + drop_sound = 'sound/items/drop/device.ogg' + pickup_sound = 'sound/items/pickup/device.ogg' + +/obj/item/weapon/rsp + name = "\improper Rapid-Seed-Producer (RSP)" + desc = "A device used to rapidly deploy seeds." + icon = 'icons/obj/items.dmi' + icon_state = "rcd" + opacity = 0 + density = FALSE + anchored = FALSE + var/stored_matter = 0 + var/mode = 1 + w_class = ITEMSIZE_NORMAL + drop_sound = 'sound/items/drop/device.ogg' + pickup_sound = 'sound/items/pickup/device.ogg' + +/obj/item/weapon/soap + name = "soap" + desc = "A cheap bar of soap. Smells of lye." + gender = PLURAL + icon = 'icons/obj/soap.dmi' + icon_state = "soap" + flags = NOCONDUCT + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_HOLSTER + throwforce = 0 + throw_speed = 4 + throw_range = 20 + var/randomize = TRUE + var/square_chance = 10 + +/obj/item/weapon/soap/Initialize() + if(randomize && prob(square_chance)) + icon_state = "[icon_state]-alt" + +/obj/item/weapon/soap/nanotrasen + desc = "A NanoTrasen-brand bar of soap. Smells of phoron, a years-old marketing gimmick." + icon_state = "soapnt" + +/obj/item/weapon/soap/deluxe + icon_state = "soapdeluxe" + +/obj/item/weapon/soap/deluxe/New() + desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]." + ..() + +/obj/item/weapon/soap/syndie + desc = "An untrustworthy bar of soap. Smells of fear." + icon_state = "soapsyndie" + +/obj/item/weapon/soap/space_soap + desc = "Smells like hot metal and walnuts." + icon_state = "space_soap" + +/obj/item/weapon/soap/water_soap + desc = "Smells like chlorine." + icon_state = "water_soap" + +/obj/item/weapon/soap/fire_soap + desc = "Smells like a campfire." + icon_state = "fire_soap" + +/obj/item/weapon/soap/rainbow_soap + desc = "Smells sickly sweet." + icon_state = "rainbow_soap" + +/obj/item/weapon/soap/diamond_soap + desc = "Smells like saffron and vanilla." + icon_state = "diamond_soap" + +/obj/item/weapon/soap/uranium_soap + desc = "Smells not great... Not terrible." + icon_state = "uranium_soap" + +/obj/item/weapon/soap/silver_soap + desc = "Smells like birch and amaranth." + icon_state = "silver_soap" + +/obj/item/weapon/soap/brown_soap + desc = "Smells like cinnamon and cognac." + icon_state = "brown_soap" + +/obj/item/weapon/soap/white_soap + desc = "Smells like nutmeg and oats." + icon_state = "white_soap" + +/obj/item/weapon/soap/grey_soap + desc = "Smells like bergamot and lilies." + icon_state = "grey_soap" + +/obj/item/weapon/soap/pink_soap + desc = "Smells like bubblegum." + icon_state = "pink_soap" + +/obj/item/weapon/soap/purple_soap + desc = "Smells like lavender." + icon_state = "purple_soap" + +/obj/item/weapon/soap/blue_soap + desc = "Smells like cardamom." + icon_state = "blue_soap" + +/obj/item/weapon/soap/cyan_soap + desc = "Smells like bluebells and peaches." + icon_state = "cyan_soap" + +/obj/item/weapon/soap/green_soap + desc = "Smells like a freshly mowed lawn." + icon_state = "green_soap" + +/obj/item/weapon/soap/yellow_soap + desc = "Smells like citron and ginger." + icon_state = "yellow_soap" + +/obj/item/weapon/soap/orange_soap + desc = "Smells like oranges and dark chocolate." + icon_state = "orange_soap" + +/obj/item/weapon/soap/red_soap + desc = "Smells like cherries." + icon_state = "red_soap" + +/obj/item/weapon/soap/golden_soap + desc = "Smells like honey." + icon_state = "golden_soap" + +/obj/item/weapon/bikehorn + name = "bike horn" + desc = "A horn off of a bicycle." + icon = 'icons/obj/items.dmi' + icon_state = "bike_horn" + item_state = "bike_horn" + throwforce = 3 + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_HOLSTER + throw_speed = 3 + throw_range = 15 + attack_verb = list("HONKED") + var/spam_flag = 0 + +/obj/item/weapon/c_tube + name = "cardboard tube" + desc = "A tube... of cardboard." + icon = 'icons/obj/items.dmi' + icon_state = "c_tube" + throwforce = 1 + w_class = ITEMSIZE_SMALL + throw_speed = 4 + throw_range = 5 + +/obj/item/weapon/disk + name = "disk" + icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit + drop_sound = 'sound/items/drop/disk.ogg' + pickup_sound = 'sound/items/pickup/disk.ogg' + +/obj/item/weapon/disk/nuclear + name = "nuclear authentication disk" + desc = "Better keep this safe." + icon_state = "nucleardisk" + item_state = "card-id" + w_class = ITEMSIZE_SMALL + +/* +/obj/item/weapon/game_kit + name = "Gaming Kit" + icon = 'icons/obj/items.dmi' + icon_state = "game_kit" + var/selected = null + var/board_stat = null + var/data = "" + var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" + item_state = "sheet-metal" + w_class = ITEMSIZE_HUGE +*/ + +/obj/item/weapon/gift + name = "gift" + desc = "A wrapped item." + icon = 'icons/obj/items.dmi' + icon_state = "gift3" + var/size = 3.0 + var/obj/item/gift = null + item_state = "gift" + w_class = ITEMSIZE_LARGE + +/*/obj/item/weapon/syndicate_uplink + name = "station bounced radio" + desc = "Remain silent about this..." + icon = 'icons/obj/radio.dmi' + icon_state = "radio" + var/temp = null + var/uses = 10.0 + var/selfdestruct = 0.0 + var/traitor_frequency = 0.0 + var/mob/currentUser = null + var/obj/item/device/radio/origradio = null + flags = ONBELT + w_class = ITEMSIZE_SMALL + item_state = "radio" + throw_speed = 4 + throw_range = 20 + matter = list(MAT_STEEL = 100) + origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 3)*/ + +/obj/item/weapon/SWF_uplink + name = "station-bounced radio" + desc = "Used to communicate, it appears." + icon = 'icons/obj/radio.dmi' + icon_state = "radio" + var/temp = null + var/uses = 4.0 + var/selfdestruct = 0.0 + var/traitor_frequency = 0.0 + var/obj/item/device/radio/origradio = null + slot_flags = SLOT_BELT + item_state = "radio" + throwforce = 5 + w_class = ITEMSIZE_SMALL + throw_speed = 4 + throw_range = 20 + matter = list(MAT_STEEL = 100) + origin_tech = list(TECH_MAGNET = 1) + drop_sound = 'sound/items/drop/device.ogg' + pickup_sound = 'sound/items/pickup/device.ogg' + +/obj/item/weapon/staff + name = "wizards staff" + desc = "Apparently a staff used by the wizard." + icon = 'icons/obj/wizard.dmi' + icon_state = "staff" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + force = 3.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + attack_verb = list("bludgeoned", "whacked", "disciplined") + +/obj/item/weapon/staff/broom + name = "broom" + desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." + icon = 'icons/obj/wizard.dmi' + icon_state = "broom" + +/obj/item/weapon/staff/gentcane + name = "Gentlemans Cane" + desc = "An ebony can with an ivory tip." + icon = 'icons/obj/weapons.dmi' + icon_state = "cane" + +/obj/item/weapon/staff/stick + name = "stick" + desc = "A great tool to drag someone else's drinks across the bar." + icon = 'icons/obj/weapons.dmi' + icon_state = "stick" + item_state = "cane" + force = 3.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + +/obj/item/weapon/module + icon = 'icons/obj/module.dmi' + icon_state = "std_module" + item_state = "std_mod" + w_class = ITEMSIZE_SMALL + var/mtype = 1 // 1=electronic 2=hardware + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + +/obj/item/weapon/module/card_reader + name = "card reader module" + icon_state = "card_mod" + item_state = "std_mod" + desc = "An electronic module for reading data and ID cards." + +/obj/item/weapon/module/power_control + name = "power control module" + icon_state = "power_mod" + item_state = "std_mod" + desc = "Heavy-duty switching circuits for power control." + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + +/obj/item/weapon/module/id_auth + name = "\improper ID authentication module" + icon_state = "id_mod" + desc = "A module allowing secure authorization of ID cards." + +/obj/item/weapon/module/cell_power + name = "power cell regulator module" + icon_state = "power_mod" + item_state = "std_mod" + desc = "A converter and regulator allowing the use of power cells." + +/obj/item/weapon/module/cell_power + name = "power cell charger module" + icon_state = "power_mod" + item_state = "std_mod" + desc = "Charging circuits for power cells." + +/obj/item/device/camera_bug + name = "camera bug" + icon = 'icons/obj/device.dmi' + icon_state = "flash" + w_class = ITEMSIZE_TINY + item_state = "electronic" + throw_speed = 4 + throw_range = 20 + +/obj/item/weapon/camera_bug/attack_self(mob/usr as mob) + var/list/cameras = new/list() + for (var/obj/machinery/camera/C in cameranet.cameras) + if (C.bugged && C.status) + cameras.Add(C) + if (length(cameras) == 0) + to_chat(usr, "No bugged functioning cameras found.") + return + + var/list/friendly_cameras = new/list() + + for (var/obj/machinery/camera/C in cameras) + friendly_cameras.Add(C.c_tag) + + var/target = tgui_input_list(usr, "Select the camera to observe", "Select Camera", friendly_cameras) + if (!target) + return + for (var/obj/machinery/camera/C in cameras) + if (C.c_tag == target) + target = C + break + if (usr.stat == 2) return + + usr.client.eye = target + +/* +/obj/item/weapon/cigarpacket + name = "Pete's Cuban Cigars" + desc = "The most robust cigars on the planet." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cigarpacket" + item_state = "cigarpacket" + w_class = ITEMSIZE_TINY + throwforce = 2 + var/cigarcount = 6 + flags = ONBELT + */ + +/obj/item/weapon/pai_cable + desc = "A flexible coated cable with a universal jack on one end." + name = "data cable" + icon = 'icons/obj/power.dmi' + icon_state = "wire1" + + var/obj/machinery/machine + +/obj/item/weapon/pai_cable/Destroy() + machine = null + return ..() + +///////////////////////////////////////Stock Parts ///////////////////////////////// + +/obj/item/weapon/storage/part_replacer + name = "rapid part exchange device" + desc = "A special mechanical module made to store, sort, and apply standard machine parts." + icon = 'icons/obj/storage_vr.dmi' + icon_state = "RPED" + item_icons = list(slot_l_hand_str = 'icons/vore/custom_items_left_hand_yw.dmi', slot_r_hand_str = 'icons/vore/custom_items_right_hand_yw.dmi') //YW add - RPED sprite + item_state = "RPED" + w_class = ITEMSIZE_HUGE + can_hold = list(/obj/item/weapon/stock_parts) + storage_slots = 50 + use_to_pickup = TRUE + allow_quick_gather = 1 + allow_quick_empty = 1 + collection_mode = 1 + display_contents_with_number = 1 + max_w_class = ITEMSIZE_NORMAL + max_storage_space = 100 + drop_sound = 'sound/items/drop/device.ogg' + pickup_sound = 'sound/items/pickup/device.ogg' + var/panel_req = TRUE + var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg' + var/reskin_ran = FALSE + var/unique_reskin = list("Soulless" = "RPED", + "Soulful" = "RPED_old") + +/obj/item/weapon/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, 1) + else +*/ + playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, 1) + +/obj/item/weapon/storage/part_replacer/adv + name = "advanced rapid part exchange device" + desc = "A special mechanical module made to store, sort, and apply standard machine parts. This one has a greatly upgraded storage capacity, \ + and the ability to hold beakers." + can_hold = list(/obj/item/weapon/stock_parts, /obj/item/weapon/reagent_containers/glass/beaker) + storage_slots = 200 + max_storage_space = 400 + +/obj/item/weapon/storage/part_replacer/adv/discount_bluespace + name = "prototype bluespace rapid part exchange device" + icon_state = "DBRPED" + item_state = "DBRPED" + desc = "A special mechanical module made to store, sort, and apply standard machine parts. This one has a further increased storage capacity, \ + and the ability to work on machines with closed maintenance panels." + storage_slots = 400 + max_storage_space = 800 + panel_req = FALSE + pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/pshoom.ogg' + unique_reskin = list("Soulless" = "DBRPED", + "Soulful" = "DBRPED_old") + +/obj/item/weapon/storage/part_replacer/examine(mob/user) + . = ..() + if(!reskin_ran) + . += "[src]'s external casing can be modified via alt-click." + +/obj/item/weapon/storage/part_replacer/AltClick(mob/user) + . = ..() + if(!reskin_ran) + reskin_radial(user) + +/obj/item/weapon/storage/part_replacer/proc/reskin_radial(mob/M) + if(!LAZYLEN(unique_reskin)) + return + + var/list/items = list() + for(var/reskin_option in unique_reskin) + var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) + items += list("[reskin_option]" = item_image) + sortList(items) + + var/pick = show_radial_menu(M, src, items, radius = 38, require_near = TRUE) + if(!pick) + return + if(!unique_reskin[pick]) + return + icon_state = unique_reskin[pick] + item_state = unique_reskin[pick] + reskin_ran = TRUE + to_chat(M, "[src] is now '[pick]'.") + +/obj/item/weapon/storage/part_replacer/drop_contents() // hacky-feeling tier-based drop system + hide_from(usr) + var/turf/T = get_turf(src) + var/lowest_rating = INFINITY // We want the lowest-part tier rating in the RPED so we only drop the lowest-tier parts. + /* + * Why not just use the stock part's rating variable? + * Future-proofing for a potential future where stock parts aren't the only thing that can fit in an RPED. + * see: /tg/ and /vg/'s RPEDs fitting power cells, beakers, etc. + * 10/8/21 edit - It's Time. + */ + for(var/obj/item/B in contents) + if(B.rped_rating() < lowest_rating) + lowest_rating = B.rped_rating() + for(var/obj/item/B in contents) + if(B.rped_rating() > lowest_rating) + continue + remove_from_storage(B, T) + + +/obj/item/weapon/stock_parts + name = "stock part" + desc = "What?" + gender = PLURAL + icon = 'icons/obj/stock_parts.dmi' + w_class = ITEMSIZE_SMALL + var/rating = 1 + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + +/obj/item/weapon/stock_parts/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + ..() + +/obj/item/weapon/stock_parts/get_rating() + return rating + +//Rank 1 + +/obj/item/weapon/stock_parts/console_screen + name = "console screen" + desc = "Used in the construction of computers and other devices with a interactive console." + icon_state = "screen" + origin_tech = list(TECH_MATERIAL = 1) + rating = 5 // these are actually Really Important for some things?? + matter = list(MAT_GLASS = 200) + +/obj/item/weapon/stock_parts/capacitor + name = "capacitor" + desc = "A basic capacitor used in the construction of a variety of devices." + icon_state = "capacitor" + origin_tech = list(TECH_POWER = 1) + matter = list(MAT_STEEL = 50,MAT_GLASS = 50) + + var/charge = 0 + var/max_charge = 1000 + +/obj/item/weapon/stock_parts/capacitor/New() + . = ..() + max_charge *= rating + +/obj/item/weapon/stock_parts/capacitor/proc/charge(var/amount) + charge += amount + if(charge > max_charge) + charge = max_charge + +/obj/item/weapon/stock_parts/capacitor/proc/use(var/amount) + if(charge) + charge -= amount + if(charge < 0) + charge = 0 + +/obj/item/weapon/stock_parts/scanning_module + name = "scanning module" + desc = "A compact, high resolution scanning module used in the construction of certain devices." + icon_state = "scan_module" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 50,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/manipulator + name = "micro-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "micro_mani" + origin_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1) + matter = list(MAT_STEEL = 30) + +/obj/item/weapon/stock_parts/micro_laser + name = "micro-laser" + desc = "A tiny laser used in certain devices." + icon_state = "micro_laser" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 10,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/matter_bin + name = "matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "matter_bin" + origin_tech = list(TECH_MATERIAL = 1) + matter = list(MAT_STEEL = 80) + +//Rank 2 + +/obj/item/weapon/stock_parts/capacitor/adv + name = "advanced capacitor" + desc = "An advanced capacitor used in the construction of a variety of devices." + icon_state = "capacitor_adv" + origin_tech = list(TECH_POWER = 3) + rating = 2 + matter = list(MAT_STEEL = 50,MAT_GLASS = 50) + +/obj/item/weapon/stock_parts/scanning_module/adv + name = "advanced scanning module" + desc = "A compact, high resolution scanning module used in the construction of certain devices." + icon_state = "scan_module_adv" + origin_tech = list(TECH_MAGNET = 3) + rating = 2 + matter = list(MAT_STEEL = 50,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/manipulator/nano + name = "nano-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "nano_mani" + origin_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2) + rating = 2 + matter = list(MAT_STEEL = 30) + +/obj/item/weapon/stock_parts/micro_laser/high + name = "high-power micro-laser" + desc = "A tiny laser used in certain devices." + icon_state = "high_micro_laser" + origin_tech = list(TECH_MAGNET = 3) + rating = 2 + matter = list(MAT_STEEL = 10,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/matter_bin/adv + name = "advanced matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "advanced_matter_bin" + origin_tech = list(TECH_MATERIAL = 3) + rating = 2 + matter = list(MAT_STEEL = 80) + +//Rating 3 + +/obj/item/weapon/stock_parts/capacitor/super + name = "super capacitor" + desc = "A super-high capacity capacitor used in the construction of a variety of devices." + icon_state = "capacitor_super" + origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4) + rating = 3 + matter = list(MAT_STEEL = 50,MAT_GLASS = 50) + +/obj/item/weapon/stock_parts/scanning_module/phasic + name = "phasic scanning module" + desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." + icon_state = "scan_module_phasic" + origin_tech = list(TECH_MAGNET = 5) + rating = 3 + matter = list(MAT_STEEL = 50,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/manipulator/pico + name = "pico-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "pico_mani" + origin_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2) + rating = 3 + matter = list(MAT_STEEL = 30) + +/obj/item/weapon/stock_parts/micro_laser/ultra + name = "ultra-high-power micro-laser" + icon_state = "ultra_high_micro_laser" + desc = "A tiny laser used in certain devices." + origin_tech = list(TECH_MAGNET = 5) + rating = 3 + matter = list(MAT_STEEL = 10,MAT_GLASS = 20) + +/obj/item/weapon/stock_parts/matter_bin/super + name = "super matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "super_matter_bin" + origin_tech = list(TECH_MATERIAL = 5) + rating = 3 + matter = list(MAT_STEEL = 80) + +// Rating 4 - Anomaly + +/obj/item/weapon/stock_parts/capacitor/hyper + name = "hyper capacitor" + desc = "A hyper-capacity capacitor used in the construction of a variety of devices." + icon_state = "capacitor_hyper" + origin_tech = list(TECH_POWER = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 1, TECH_ARCANE = 1) + rating = 4 + matter = list(MAT_STEEL = 80, MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/scanning_module/hyper + name = "quantum scanning module" + desc = "A compact, near-perfect resolution quantum scanning module used in the construction of certain devices." + icon_state = "scan_module_hyper" + origin_tech = list(TECH_MAGNET = 6, TECH_BLUESPACE = 1, TECH_ARCANE = 1) + rating = 4 + matter = list(MAT_STEEL = 100,MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/manipulator/hyper + name = "planck-manipulator" + desc = "A miniscule manipulator used in the construction of certain devices." + icon_state = "hyper_mani" + origin_tech = list(TECH_MATERIAL = 6, TECH_DATA = 3, TECH_ARCANE = 1) + rating = 4 + matter = list(MAT_STEEL = 30) + +/obj/item/weapon/stock_parts/micro_laser/hyper + name = "hyper-power micro-laser" + icon_state = "hyper_micro_laser" + desc = "A tiny laser used in certain devices." + origin_tech = list(TECH_MAGNET = 6, TECH_ARCANE = 1) + rating = 4 + matter = list(MAT_STEEL = 30, MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/matter_bin/hyper + name = "hyper matter bin" + desc = "A container for holding compressed matter awaiting re-construction." + icon_state = "hyper_matter_bin" + origin_tech = list(TECH_MATERIAL = 6, TECH_ARCANE = 1) + rating = 4 + matter = list(MAT_STEEL = 100) + +// Rating 5 - Precursor + +/obj/item/weapon/stock_parts/capacitor/omni + name = "omni-capacitor" + desc = "A capacitor of immense capacity used in the construction of a variety of devices." + icon_state = "capacitor_omni" + origin_tech = list(TECH_POWER = 7, TECH_MATERIAL = 6, TECH_BLUESPACE = 3, TECH_PRECURSOR = 1) + rating = 5 + matter = list(MAT_STEEL = 80, MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/scanning_module/omni + name = "omni-scanning module" + desc = "A compact, perfect resolution temporospatial scanning module used in the construction of certain devices." + icon_state = "scan_module_omni" + origin_tech = list(TECH_MAGNET = 7, TECH_BLUESPACE = 3, TECH_PRECURSOR = 1) + rating = 5 + matter = list(MAT_STEEL = 100,MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/manipulator/omni + name = "omni-manipulator" + desc = "A strange, infinitesimal manipulator used in the construction of certain devices." + icon_state = "omni_mani" + origin_tech = list(TECH_MATERIAL = 7, TECH_DATA = 4, TECH_PRECURSOR = 1) + rating = 5 + matter = list(MAT_STEEL = 30) + +/obj/item/weapon/stock_parts/micro_laser/omni + name = "omni-power micro-laser" + icon_state = "omni_micro_laser" + desc = "A strange laser used in certain devices." + origin_tech = list(TECH_MAGNET = 7, TECH_PRECURSOR = 1) + rating = 5 + matter = list(MAT_STEEL = 30, MAT_GLASS = 40) + +/obj/item/weapon/stock_parts/matter_bin/omni + name = "omni-matter bin" + desc = "A strange container for holding compressed matter awaiting re-construction." + icon_state = "omni_matter_bin" + origin_tech = list(TECH_MATERIAL = 7, TECH_PRECURSOR = 1) + rating = 5 + matter = list(MAT_STEEL = 100) + + +// Subspace stock parts + +/obj/item/weapon/stock_parts/subspace/ansible + name = "subspace ansible" + icon_state = "subspace_ansible" + desc = "A compact module capable of sensing extradimensional activity." + origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2) + matter = list(MAT_STEEL = 30,MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/subspace/sub_filter + name = "hyperwave filter" + icon_state = "hyperwave_filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + origin_tech = list(TECH_DATA = 4, TECH_MAGNET = 2) + matter = list(MAT_STEEL = 30,MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/subspace/amplifier + name = "subspace amplifier" + icon_state = "subspace_amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) + matter = list(MAT_STEEL = 30,MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/subspace/treatment + name = "subspace treatment disk" + icon_state = "treatment_disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 5, TECH_BLUESPACE = 2) + matter = list(MAT_STEEL = 30,MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/subspace/analyzer + name = "subspace wavelength analyzer" + icon_state = "wavelength_analyzer" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) + matter = list(MAT_STEEL = 30,MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/subspace/crystal + name = "ansible crystal" + icon_state = "ansible_crystal" + desc = "A crystal made from pure glass used to transmit laser databursts to subspace." + origin_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) + matter = list(MAT_GLASS = 50) + +/obj/item/weapon/stock_parts/subspace/transmitter + name = "subspace transmitter" + icon_state = "subspace_transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + origin_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3) + matter = list(MAT_STEEL = 50) + +/obj/item/weapon/ectoplasm + name = "ectoplasm" + desc = "Spooky!" + gender = PLURAL + icon = 'icons/obj/wizard.dmi' + icon_state = "ectoplasm2" + +/obj/item/weapon/research + name = "research debugging device" + desc = "Instant research tool. For testing purposes only." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "smes_coil" + origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19, TECH_PRECURSOR = 19) + +// Additional construction stock parts + +/obj/item/weapon/stock_parts/gear + name = "gear" + desc = "A gear used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "gear" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(MAT_STEEL = 50) + +/obj/item/weapon/stock_parts/motor + name = "motor" + desc = "A motor used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "motor" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(MAT_STEEL = 60, MAT_GLASS = 10) + +/obj/item/weapon/stock_parts/spring + name = "spring" + desc = "A spring used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "spring" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(MAT_STEEL = 40) + +/obj/effect/spawner/parts + name = "nondescript parts bundle that shouldn't exist" + desc = "this qdels itself lol! if you're reading this you're codediving or Someone fucked up" + var/list/items + +/obj/effect/spawner/parts/Initialize(mapload) + ..() + if(items && items.len) + var/turf/T = get_turf(src) + for(var/path in items) + for(var/i in 1 to 5) + new path(T) + return INITIALIZE_HINT_QDEL + +/obj/effect/spawner/parts/t1 + name = "basic parts bundle" + desc = "5 of each T1 part, no more and no less." + items = list( + /obj/item/weapon/stock_parts/matter_bin, + /obj/item/weapon/stock_parts/manipulator, + /obj/item/weapon/stock_parts/capacitor, + /obj/item/weapon/stock_parts/scanning_module, + /obj/item/weapon/stock_parts/micro_laser + ) + +/obj/effect/spawner/parts/t2 + name = "advanced parts bundle" + desc = "5 of each T2 part, no more and no less." + items = list( + /obj/item/weapon/stock_parts/matter_bin/adv, + /obj/item/weapon/stock_parts/manipulator/nano, + /obj/item/weapon/stock_parts/capacitor/adv, + /obj/item/weapon/stock_parts/scanning_module/adv, + /obj/item/weapon/stock_parts/micro_laser/high + ) + +/obj/effect/spawner/parts/t3 + name = "super parts bundle" + desc = "5 of each T3 part, no more and no less." + items = list( + /obj/item/weapon/stock_parts/matter_bin/super, + /obj/item/weapon/stock_parts/manipulator/pico, + /obj/item/weapon/stock_parts/capacitor/super, + /obj/item/weapon/stock_parts/scanning_module/phasic, + /obj/item/weapon/stock_parts/micro_laser/ultra + ) + +/obj/effect/spawner/parts/t4 + name = "hyper parts bundle" + desc = "5 of each T4 part, no more and no less." + items = list( + /obj/item/weapon/stock_parts/matter_bin/hyper, + /obj/item/weapon/stock_parts/manipulator/hyper, + /obj/item/weapon/stock_parts/capacitor/hyper, + /obj/item/weapon/stock_parts/scanning_module/hyper, + /obj/item/weapon/stock_parts/micro_laser/hyper + ) + +/obj/effect/spawner/parts/t5 + name = "omni parts bundle" + desc = "5 of each T5 part, no more and no less." + items = list( + /obj/item/weapon/stock_parts/matter_bin/omni, + /obj/item/weapon/stock_parts/manipulator/omni, + /obj/item/weapon/stock_parts/capacitor/omni, + /obj/item/weapon/stock_parts/scanning_module/omni, + /obj/item/weapon/stock_parts/micro_laser/omni + ) diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm index c29ffef73f..de99cb0d68 100644 --- a/code/defines/procs/AStar.dm +++ b/code/defines/procs/AStar.dm @@ -1,181 +1,181 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/* -A Star pathfinding algorithm -Returns a list of tiles forming a path from A to B, taking dense objects as well as walls, and the orientation of -windows along the route into account. -Use: -your_list = AStar(start location, end location, adjacent turf proc, distance proc) -For the adjacent turf proc i wrote: -/turf/proc/AdjacentTurfs -And for the distance one i wrote: -/turf/proc/Distance -So an example use might be: - -src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance) - -Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use. - -src.path_list = reverselist(src.pathlist) - -Then to start on the path, all you need to do it: -Step_to(src, src.path_list[1]) -src.path_list -= src.path_list[1] or equivilent to remove that node from the list. - -Optional extras to add on (in order): -MaxNodes: The maximum number of nodes the returned path can be (0 = infinite) -Maxnodedepth: The maximum number of nodes to search (default: 30, 0 = infinite) -Mintargetdist: Minimum distance to the target before path returns, could be used to get -near a target, but not right to it - for an AI mob with a gun, for example. -Minnodedist: Minimum number of nodes to return in the path, could be used to give a path a minimum -length to avoid portals or something i guess?? Not that they're counted right now but w/e. -*/ - -// Modified to provide ID argument - supplied to 'adjacent' proc, defaults to null -// Used for checking if route exists through a door which can be opened - -// Also added 'exclude' turf to avoid travelling over; defaults to null - - -/PriorityQueue - var/list/queue - var/comparison_function - -/PriorityQueue/New(compare) - queue = list() - comparison_function = compare - -/PriorityQueue/proc/IsEmpty() - return !queue.len - -/PriorityQueue/proc/Enqueue(var/data) - queue.Add(data) - var/index = queue.len - - //From what I can tell, this automagically sorts the added data into the correct location. - while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0) - queue.Swap(index, index / 2) - index /= 2 - -/PriorityQueue/proc/Dequeue() - if(!queue.len) - return 0 - return Remove(1) - -/PriorityQueue/proc/Remove(var/index) - if(index > queue.len) - return 0 - - var/thing = queue[index] - queue.Swap(index, queue.len) - queue.Cut(queue.len) - if(index < queue.len) - FixQueue(index) - return thing - -/PriorityQueue/proc/FixQueue(var/index) - var/child = 2 * index - var/item = queue[index] - - while(child <= queue.len) - if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0) - child++ - if(call(comparison_function)(item, queue[child]) > 0) - queue[index] = queue[child] - index = child - else - break - child = 2 * index - queue[index] = item - -/PriorityQueue/proc/List() - return queue.Copy() - -/PriorityQueue/proc/Length() - return queue.len - -/PriorityQueue/proc/RemoveItem(data) - var/index = queue.Find(data) - if(index) - return Remove(index) - -/PathNode - var/datum/position - var/PathNode/previous_node - - var/best_estimated_cost - var/estimated_cost - var/known_cost - var/cost - var/nodes_traversed - -/PathNode/New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) - position = _position - previous_node = _previous_node - - known_cost = _known_cost - cost = _cost - estimated_cost = cost + known_cost - - best_estimated_cost = estimated_cost - nodes_traversed = _nodes_traversed - -/proc/PathWeightCompare(PathNode/a, PathNode/b) - return a.estimated_cost - b.estimated_cost - -/proc/AStar(var/start, var/end, var/adjacent, var/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude) - var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) - var/list/closed = list() - var/list/path - var/list/path_node_by_position = list() - start = get_turf(start) - if(!start) - return 0 - - open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0)) - - while(!open.IsEmpty() && !path) - var/PathNode/current = open.Dequeue() - closed.Add(current.position) - - if(current.position == end || call(current.position, dist)(end) <= min_target_dist) - path = new /list(current.nodes_traversed + 1) - path[path.len] = current.position - var/index = path.len - 1 - - while(current.previous_node) - current = current.previous_node - path[index--] = current.position - break - - if(min_node_dist && max_node_depth) - if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth) - continue - - if(max_node_depth) - if(current.nodes_traversed >= max_node_depth) - continue - - for(var/datum/datum in call(current.position, adjacent)(id)) - if(datum == exclude) - continue - - var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum) - - //handle removal of sub-par positions - if(datum in path_node_by_position) - var/PathNode/target = path_node_by_position[datum] - if(target.best_estimated_cost) - if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost) - open.RemoveItem(target) - else - continue - - var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1) - path_node_by_position[datum] = next_node - open.Enqueue(next_node) - - if(max_nodes && open.Length() > max_nodes) - open.Remove(open.Length()) - - return path +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/* +A Star pathfinding algorithm +Returns a list of tiles forming a path from A to B, taking dense objects as well as walls, and the orientation of +windows along the route into account. +Use: +your_list = AStar(start location, end location, adjacent turf proc, distance proc) +For the adjacent turf proc i wrote: +/turf/proc/AdjacentTurfs +And for the distance one i wrote: +/turf/proc/Distance +So an example use might be: + +src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance) + +Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use. + +src.path_list = reverselist(src.pathlist) + +Then to start on the path, all you need to do it: +Step_to(src, src.path_list[1]) +src.path_list -= src.path_list[1] or equivilent to remove that node from the list. + +Optional extras to add on (in order): +MaxNodes: The maximum number of nodes the returned path can be (0 = infinite) +Maxnodedepth: The maximum number of nodes to search (default: 30, 0 = infinite) +Mintargetdist: Minimum distance to the target before path returns, could be used to get +near a target, but not right to it - for an AI mob with a gun, for example. +Minnodedist: Minimum number of nodes to return in the path, could be used to give a path a minimum +length to avoid portals or something i guess?? Not that they're counted right now but w/e. +*/ + +// Modified to provide ID argument - supplied to 'adjacent' proc, defaults to null +// Used for checking if route exists through a door which can be opened + +// Also added 'exclude' turf to avoid travelling over; defaults to null + + +/PriorityQueue + var/list/queue + var/comparison_function + +/PriorityQueue/New(compare) + queue = list() + comparison_function = compare + +/PriorityQueue/proc/IsEmpty() + return !queue.len + +/PriorityQueue/proc/Enqueue(var/data) + queue.Add(data) + var/index = queue.len + + //From what I can tell, this automagically sorts the added data into the correct location. + while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0) + queue.Swap(index, index / 2) + index /= 2 + +/PriorityQueue/proc/Dequeue() + if(!queue.len) + return 0 + return Remove(1) + +/PriorityQueue/proc/Remove(var/index) + if(index > queue.len) + return 0 + + var/thing = queue[index] + queue.Swap(index, queue.len) + queue.Cut(queue.len) + if(index < queue.len) + FixQueue(index) + return thing + +/PriorityQueue/proc/FixQueue(var/index) + var/child = 2 * index + var/item = queue[index] + + while(child <= queue.len) + if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0) + child++ + if(call(comparison_function)(item, queue[child]) > 0) + queue[index] = queue[child] + index = child + else + break + child = 2 * index + queue[index] = item + +/PriorityQueue/proc/List() + return queue.Copy() + +/PriorityQueue/proc/Length() + return queue.len + +/PriorityQueue/proc/RemoveItem(data) + var/index = queue.Find(data) + if(index) + return Remove(index) + +/PathNode + var/datum/position + var/PathNode/previous_node + + var/best_estimated_cost + var/estimated_cost + var/known_cost + var/cost + var/nodes_traversed + +/PathNode/New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) + position = _position + previous_node = _previous_node + + known_cost = _known_cost + cost = _cost + estimated_cost = cost + known_cost + + best_estimated_cost = estimated_cost + nodes_traversed = _nodes_traversed + +/proc/PathWeightCompare(PathNode/a, PathNode/b) + return a.estimated_cost - b.estimated_cost + +/proc/AStar(var/start, var/end, var/adjacent, var/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude) + var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) + var/list/closed = list() + var/list/path + var/list/path_node_by_position = list() + start = get_turf(start) + if(!start) + return 0 + + open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0)) + + while(!open.IsEmpty() && !path) + var/PathNode/current = open.Dequeue() + closed.Add(current.position) + + if(current.position == end || call(current.position, dist)(end) <= min_target_dist) + path = new /list(current.nodes_traversed + 1) + path[path.len] = current.position + var/index = path.len - 1 + + while(current.previous_node) + current = current.previous_node + path[index--] = current.position + break + + if(min_node_dist && max_node_depth) + if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth) + continue + + if(max_node_depth) + if(current.nodes_traversed >= max_node_depth) + continue + + for(var/datum/datum in call(current.position, adjacent)(id)) + if(datum == exclude) + continue + + var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum) + + //handle removal of sub-par positions + if(datum in path_node_by_position) + var/PathNode/target = path_node_by_position[datum] + if(target.best_estimated_cost) + if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost) + open.RemoveItem(target) + else + continue + + var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1) + path_node_by_position[datum] = next_node + open.Enqueue(next_node) + + if(max_nodes && open.Length() > max_nodes) + open.Remove(open.Length()) + + return path diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index 51c9934c17..c4ba715489 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -1,208 +1,208 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -//cursors -#define Default_Cursor 0 -#define Client_Cursor 1 -#define Server_Cursor 2 -//conversions -#define TEXT_CONV 1 -#define RSC_FILE_CONV 2 -#define NUMBER_CONV 3 -//column flag values: -#define IS_NUMERIC 1 -#define IS_BINARY 2 -#define IS_NOT_NULL 4 -#define IS_PRIMARY_KEY 8 -#define IS_UNSIGNED 16 -//types -#define TINYINT 1 -#define SMALLINT 2 -#define MEDIUMINT 3 -#define INTEGER 4 -#define BIGINT 5 -#define DECIMAL 6 -#define FLOAT 7 -#define DOUBLE 8 -#define DATE 9 -#define DATETIME 10 -#define TIMESTAMP 11 -#define TIME 12 -#define STRING 13 -#define BLOB 14 -// TODO: Investigate more recent type additions and see if I can handle them. - Nadrew - - -// Deprecated! See global.dm for new configuration vars -/* -var/DB_SERVER = "" // This is the location of your MySQL server (localhost is USUALLY fine) -var/DB_PORT = 3306 // This is the port your MySQL server is running on (3306 is the default) -*/ - -/DBConnection - var/_db_con // This variable contains a reference to the actual database connection. - var/dbi // This variable is a string containing the DBI MySQL requires. - var/user // This variable contains the username data. - var/password // This variable contains the password data. - var/default_cursor // This contains the default database cursor data. - // - var/server = "" - var/port = 3306 - -/DBConnection/New(dbi_handler,username,password_handler,cursor_handler) - src.dbi = dbi_handler - src.user = username - src.password = password_handler - src.default_cursor = cursor_handler - _db_con = _dm_db_new_con() - -/DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) - if(!config.sql_enabled) - return 0 - if(!src) return 0 - cursor_handler = src.default_cursor - if(!cursor_handler) cursor_handler = Default_Cursor - return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) - -/DBConnection/proc/Disconnect() return _dm_db_close(_db_con) - -/DBConnection/proc/IsConnected() - if(!config.sql_enabled) return 0 - var/success = _dm_db_is_connected(_db_con) - return success - -/DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) - -/DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) -/DBConnection/proc/SelectDB(database_name,dbi) - if(IsConnected()) Disconnect() - //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) - return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) -/DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/datum/db_query(sql_query,src,cursor_handler) - - -/datum/db_query/New(sql_query,DBConnection/connection_handler,cursor_handler) - if(sql_query) src.sql = sql_query - if(connection_handler) src.db_connection = connection_handler - if(cursor_handler) src.default_cursor = cursor_handler - _db_query = _dm_db_new_query() - return ..() - - -/datum/db_query - var/sql // The sql query being executed. - var/default_cursor - var/list/columns //list of DB Columns populated by Columns() - var/list/conversions - var/list/item[0] //list of data values populated by NextRow() - - var/DBConnection/db_connection - var/_db_query - -/datum/db_query/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler - -/datum/db_query/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) - Close() - return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) - -/datum/db_query/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) - -/datum/db_query/proc/RowsAffected() return _dm_db_rows_affected(_db_query) - -/datum/db_query/proc/RowCount() return _dm_db_row_count(_db_query) - -/datum/db_query/proc/ErrorMsg() return _dm_db_error_msg(_db_query) - -/datum/db_query/proc/Columns() - if(!columns) - columns = _dm_db_columns(_db_query,/DBColumn) - return columns - -/datum/db_query/proc/GetRowData() - var/list/columns = Columns() - var/list/results - if(columns.len) - results = list() - for(var/C in columns) - results+=C - var/DBColumn/cur_col = columns[C] - results[C] = src.item[(cur_col.position+1)] - return results - -/datum/db_query/proc/Close() - item.len = 0 - columns = null - conversions = null - return _dm_db_close(_db_query) - -/datum/db_query/proc/Quote(str) - return db_connection.Quote(str) - -/datum/db_query/proc/SetConversion(column,conversion) - if(istext(column)) column = columns.Find(column) - if(!conversions) conversions = new/list(column) - else if(conversions.len < column) conversions.len = column - conversions[column] = conversion - - -/DBColumn - var/name - var/table - var/position //1-based index into item data - var/sql_type - var/flags - var/length - var/max_length - -/DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) - src.name = name_handler - src.table = table_handler - src.position = position_handler - src.sql_type = type_handler - src.flags = flag_handler - src.length = length_handler - src.max_length = max_length_handler - return ..() - - -/DBColumn/proc/SqlTypeName(type_handler=src.sql_type) - switch(type_handler) - if(TINYINT) return "TINYINT" - if(SMALLINT) return "SMALLINT" - if(MEDIUMINT) return "MEDIUMINT" - if(INTEGER) return "INTEGER" - if(BIGINT) return "BIGINT" - if(FLOAT) return "FLOAT" - if(DOUBLE) return "DOUBLE" - if(DATE) return "DATE" - if(DATETIME) return "DATETIME" - if(TIMESTAMP) return "TIMESTAMP" - if(TIME) return "TIME" - if(STRING) return "STRING" - if(BLOB) return "BLOB" - - -#undef Default_Cursor -#undef Client_Cursor -#undef Server_Cursor -#undef TEXT_CONV -#undef RSC_FILE_CONV -#undef NUMBER_CONV -#undef IS_NUMERIC -#undef IS_BINARY -#undef IS_NOT_NULL -#undef IS_PRIMARY_KEY -#undef IS_UNSIGNED -#undef TINYINT -#undef SMALLINT -#undef MEDIUMINT -#undef INTEGER -#undef BIGINT -#undef DECIMAL -#undef FLOAT -#undef DOUBLE -#undef DATE -#undef DATETIME -#undef TIMESTAMP -#undef TIME -#undef STRING -#undef BLOB +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +//cursors +#define Default_Cursor 0 +#define Client_Cursor 1 +#define Server_Cursor 2 +//conversions +#define TEXT_CONV 1 +#define RSC_FILE_CONV 2 +#define NUMBER_CONV 3 +//column flag values: +#define IS_NUMERIC 1 +#define IS_BINARY 2 +#define IS_NOT_NULL 4 +#define IS_PRIMARY_KEY 8 +#define IS_UNSIGNED 16 +//types +#define TINYINT 1 +#define SMALLINT 2 +#define MEDIUMINT 3 +#define INTEGER 4 +#define BIGINT 5 +#define DECIMAL 6 +#define FLOAT 7 +#define DOUBLE 8 +#define DATE 9 +#define DATETIME 10 +#define TIMESTAMP 11 +#define TIME 12 +#define STRING 13 +#define BLOB 14 +// TODO: Investigate more recent type additions and see if I can handle them. - Nadrew + + +// Deprecated! See global.dm for new configuration vars +/* +var/DB_SERVER = "" // This is the location of your MySQL server (localhost is USUALLY fine) +var/DB_PORT = 3306 // This is the port your MySQL server is running on (3306 is the default) +*/ + +/DBConnection + var/_db_con // This variable contains a reference to the actual database connection. + var/dbi // This variable is a string containing the DBI MySQL requires. + var/user // This variable contains the username data. + var/password // This variable contains the password data. + var/default_cursor // This contains the default database cursor data. + // + var/server = "" + var/port = 3306 + +/DBConnection/New(dbi_handler,username,password_handler,cursor_handler) + src.dbi = dbi_handler + src.user = username + src.password = password_handler + src.default_cursor = cursor_handler + _db_con = _dm_db_new_con() + +/DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) + if(!config.sql_enabled) + return 0 + if(!src) return 0 + cursor_handler = src.default_cursor + if(!cursor_handler) cursor_handler = Default_Cursor + return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) + +/DBConnection/proc/Disconnect() return _dm_db_close(_db_con) + +/DBConnection/proc/IsConnected() + if(!config.sql_enabled) return 0 + var/success = _dm_db_is_connected(_db_con) + return success + +/DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) + +/DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) +/DBConnection/proc/SelectDB(database_name,dbi) + if(IsConnected()) Disconnect() + //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) + return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) +/DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/datum/db_query(sql_query,src,cursor_handler) + + +/datum/db_query/New(sql_query,DBConnection/connection_handler,cursor_handler) + if(sql_query) src.sql = sql_query + if(connection_handler) src.db_connection = connection_handler + if(cursor_handler) src.default_cursor = cursor_handler + _db_query = _dm_db_new_query() + return ..() + + +/datum/db_query + var/sql // The sql query being executed. + var/default_cursor + var/list/columns //list of DB Columns populated by Columns() + var/list/conversions + var/list/item[0] //list of data values populated by NextRow() + + var/DBConnection/db_connection + var/_db_query + +/datum/db_query/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler + +/datum/db_query/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) + Close() + return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) + +/datum/db_query/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) + +/datum/db_query/proc/RowsAffected() return _dm_db_rows_affected(_db_query) + +/datum/db_query/proc/RowCount() return _dm_db_row_count(_db_query) + +/datum/db_query/proc/ErrorMsg() return _dm_db_error_msg(_db_query) + +/datum/db_query/proc/Columns() + if(!columns) + columns = _dm_db_columns(_db_query,/DBColumn) + return columns + +/datum/db_query/proc/GetRowData() + var/list/columns = Columns() + var/list/results + if(columns.len) + results = list() + for(var/C in columns) + results+=C + var/DBColumn/cur_col = columns[C] + results[C] = src.item[(cur_col.position+1)] + return results + +/datum/db_query/proc/Close() + item.len = 0 + columns = null + conversions = null + return _dm_db_close(_db_query) + +/datum/db_query/proc/Quote(str) + return db_connection.Quote(str) + +/datum/db_query/proc/SetConversion(column,conversion) + if(istext(column)) column = columns.Find(column) + if(!conversions) conversions = new/list(column) + else if(conversions.len < column) conversions.len = column + conversions[column] = conversion + + +/DBColumn + var/name + var/table + var/position //1-based index into item data + var/sql_type + var/flags + var/length + var/max_length + +/DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) + src.name = name_handler + src.table = table_handler + src.position = position_handler + src.sql_type = type_handler + src.flags = flag_handler + src.length = length_handler + src.max_length = max_length_handler + return ..() + + +/DBColumn/proc/SqlTypeName(type_handler=src.sql_type) + switch(type_handler) + if(TINYINT) return "TINYINT" + if(SMALLINT) return "SMALLINT" + if(MEDIUMINT) return "MEDIUMINT" + if(INTEGER) return "INTEGER" + if(BIGINT) return "BIGINT" + if(FLOAT) return "FLOAT" + if(DOUBLE) return "DOUBLE" + if(DATE) return "DATE" + if(DATETIME) return "DATETIME" + if(TIMESTAMP) return "TIMESTAMP" + if(TIME) return "TIME" + if(STRING) return "STRING" + if(BLOB) return "BLOB" + + +#undef Default_Cursor +#undef Client_Cursor +#undef Server_Cursor +#undef TEXT_CONV +#undef RSC_FILE_CONV +#undef NUMBER_CONV +#undef IS_NUMERIC +#undef IS_BINARY +#undef IS_NOT_NULL +#undef IS_PRIMARY_KEY +#undef IS_UNSIGNED +#undef TINYINT +#undef SMALLINT +#undef MEDIUMINT +#undef INTEGER +#undef BIGINT +#undef DECIMAL +#undef FLOAT +#undef DOUBLE +#undef DATE +#undef DATETIME +#undef TIMESTAMP +#undef TIME +#undef STRING +#undef BLOB diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm index 816e23df56..ed9ea0e301 100644 --- a/code/defines/procs/statistics.dm +++ b/code/defines/procs/statistics.dm @@ -1,149 +1,149 @@ -/proc/sql_poll_population() - if(!sqllogging) - return - var/admincount = GLOB.admins.len - var/playercount = 0 - for(var/mob/M in player_list) - if(M.client) - playercount += 1 - establish_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - log_game("SQL ERROR during population polling. Failed to connect.") - else - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO `population` (`playercount`, `admincount`, `time`) VALUES ([playercount], [admincount], '[sqltime]')") //CHOMPEdit TGSQL - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during population polling. Error : \[[err]\]\n") - qdel(query) //CHOMPEdit TGSQL - -/proc/sql_report_round_start() - // TODO - if(!sqllogging) - return -/proc/sql_report_round_end() - // TODO - if(!sqllogging) - return - -/proc/sql_report_death(var/mob/living/carbon/human/H) - if(!sqllogging) - return - if(!H) - return - if(!H.key || !H.mind) - return - - var/area/placeofdeath = get_area(H) - var/podname = placeofdeath ? placeofdeath.name : "Unknown area" - - var/sqlname = sanitizeSQL(H.real_name) - var/sqlkey = sanitizeSQL(H.key) - var/sqlpod = sanitizeSQL(podname) - var/sqlspecial = sanitizeSQL(H.mind.special_role) - var/sqljob = sanitizeSQL(H.mind.assigned_role) - var/laname - var/lakey - if(H.lastattacker) - laname = sanitizeSQL(H.lastattacker:real_name) - lakey = sanitizeSQL(H.lastattacker:key) - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/coord = "[H.x], [H.y], [H.z]" - //to_world("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])") - establish_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - log_game("SQL ERROR during death reporting. Failed to connect.") - else - var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES (:t_name, :t_byondkey, :t_job, :t_special, :t_pod, '[sqltime]', :t_laname, :t_lakey, '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')", list("t_name" = sqlname,"t_byondkey" = sqlkey, "t_job" = sqljob, "t_special" = sqlspecial, "t_pod" = sqlpod, "t_laname" = laname, "t_lakey" = lakey)) //CHOMPEdit TGSQL - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - qdel(query) //CHOMPEdit TGSQL - - -/proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H) - if(!sqllogging) - return - if(!H) - return - if(!H.key || !H.mind) - return - - var/area/placeofdeath = get_area(H) - var/podname = placeofdeath ? placeofdeath.name : "Unknown area" - - var/sqlname = sanitizeSQL(H.real_name) - var/sqlkey = sanitizeSQL(H.key) - var/sqlpod = sanitizeSQL(podname) - var/sqlspecial = sanitizeSQL(H.mind.special_role) - var/sqljob = sanitizeSQL(H.mind.assigned_role) - var/laname - var/lakey - if(H.lastattacker) - laname = sanitizeSQL(H.lastattacker:real_name) - lakey = sanitizeSQL(H.lastattacker:key) - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/coord = "[H.x], [H.y], [H.z]" - //to_world("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])") - establish_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - log_game("SQL ERROR during death reporting. Failed to connect.") - else - var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES (:t_name, :t_byondkey, :t_job, :t_special, :t_pod, '[sqltime]', :t_laname, :t_lakey, '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')", list("t_name" = sqlname,"t_byondkey" = sqlkey, "t_job" = sqljob, "t_special" = sqlspecial, "t_pod" = sqlpod, "t_laname" = laname, "t_lakey" = lakey)) //CHOMPEdit TGSQL - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - qdel(query) //CHOMPEdit TGSQL - - -/proc/statistic_cycle() - set waitfor = 0 - if(!sqllogging) - return - while(1) - sql_poll_population() - sleep(6000) - -//This proc is used for feedback. It is executed at round end. -/proc/sql_commit_feedback() - if(!blackbox) - log_game("Round ended without a blackbox recorder. No feedback was sent to the database.") - return - - //content is a list of lists. Each item in the list is a list with two fields, a variable name and a value. Items MUST only have these two values. - var/list/datum/feedback_variable/content = blackbox.get_round_feedback() - - if(!content) - log_game("Round ended without any feedback being generated. No feedback was sent to the database.") - return - - establish_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - log_game("SQL ERROR during feedback reporting. Failed to connect.") - else - - var/datum/db_query/max_query = SSdbcore.NewQuery("SELECT MAX(roundid) AS max_round_id FROM erro_feedback") //CHOMPEdit TGSQL - max_query.Execute() - - var/newroundid - - while(max_query.NextRow()) - newroundid = max_query.item[1] - qdel(max_query) //CHOMPEdit TGSQL - if(!(isnum(newroundid))) - newroundid = text2num(newroundid) - - if(isnum(newroundid)) - newroundid++ - else - newroundid = 1 - - for(var/datum/feedback_variable/item in content) - var/variable = item.get_variable() - var/value = item.get_value() - - var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO erro_feedback (id, roundid, time, variable, value) VALUES (null, [newroundid], Now(), '[variable]', '[value]')") //CHOMPEdit TGSQL - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - qdel(query) //CHOMPEdit TGSQL +/proc/sql_poll_population() + if(!sqllogging) + return + var/admincount = GLOB.admins.len + var/playercount = 0 + for(var/mob/M in player_list) + if(M.client) + playercount += 1 + establish_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + log_game("SQL ERROR during population polling. Failed to connect.") + else + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO `population` (`playercount`, `admincount`, `time`) VALUES ([playercount], [admincount], '[sqltime]')") //CHOMPEdit TGSQL + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during population polling. Error : \[[err]\]\n") + qdel(query) //CHOMPEdit TGSQL + +/proc/sql_report_round_start() + // TODO + if(!sqllogging) + return +/proc/sql_report_round_end() + // TODO + if(!sqllogging) + return + +/proc/sql_report_death(var/mob/living/carbon/human/H) + if(!sqllogging) + return + if(!H) + return + if(!H.key || !H.mind) + return + + var/area/placeofdeath = get_area(H) + var/podname = placeofdeath ? placeofdeath.name : "Unknown area" + + var/sqlname = sanitizeSQL(H.real_name) + var/sqlkey = sanitizeSQL(H.key) + var/sqlpod = sanitizeSQL(podname) + var/sqlspecial = sanitizeSQL(H.mind.special_role) + var/sqljob = sanitizeSQL(H.mind.assigned_role) + var/laname + var/lakey + if(H.lastattacker) + laname = sanitizeSQL(H.lastattacker:real_name) + lakey = sanitizeSQL(H.lastattacker:key) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/coord = "[H.x], [H.y], [H.z]" + //to_world("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])") + establish_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + log_game("SQL ERROR during death reporting. Failed to connect.") + else + var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES (:t_name, :t_byondkey, :t_job, :t_special, :t_pod, '[sqltime]', :t_laname, :t_lakey, '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')", list("t_name" = sqlname,"t_byondkey" = sqlkey, "t_job" = sqljob, "t_special" = sqlspecial, "t_pod" = sqlpod, "t_laname" = laname, "t_lakey" = lakey)) //CHOMPEdit TGSQL + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") + qdel(query) //CHOMPEdit TGSQL + + +/proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H) + if(!sqllogging) + return + if(!H) + return + if(!H.key || !H.mind) + return + + var/area/placeofdeath = get_area(H) + var/podname = placeofdeath ? placeofdeath.name : "Unknown area" + + var/sqlname = sanitizeSQL(H.real_name) + var/sqlkey = sanitizeSQL(H.key) + var/sqlpod = sanitizeSQL(podname) + var/sqlspecial = sanitizeSQL(H.mind.special_role) + var/sqljob = sanitizeSQL(H.mind.assigned_role) + var/laname + var/lakey + if(H.lastattacker) + laname = sanitizeSQL(H.lastattacker:real_name) + lakey = sanitizeSQL(H.lastattacker:key) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/coord = "[H.x], [H.y], [H.z]" + //to_world("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])") + establish_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + log_game("SQL ERROR during death reporting. Failed to connect.") + else + var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES (:t_name, :t_byondkey, :t_job, :t_special, :t_pod, '[sqltime]', :t_laname, :t_lakey, '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')", list("t_name" = sqlname,"t_byondkey" = sqlkey, "t_job" = sqljob, "t_special" = sqlspecial, "t_pod" = sqlpod, "t_laname" = laname, "t_lakey" = lakey)) //CHOMPEdit TGSQL + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") + qdel(query) //CHOMPEdit TGSQL + + +/proc/statistic_cycle() + set waitfor = 0 + if(!sqllogging) + return + while(1) + sql_poll_population() + sleep(6000) + +//This proc is used for feedback. It is executed at round end. +/proc/sql_commit_feedback() + if(!blackbox) + log_game("Round ended without a blackbox recorder. No feedback was sent to the database.") + return + + //content is a list of lists. Each item in the list is a list with two fields, a variable name and a value. Items MUST only have these two values. + var/list/datum/feedback_variable/content = blackbox.get_round_feedback() + + if(!content) + log_game("Round ended without any feedback being generated. No feedback was sent to the database.") + return + + establish_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + log_game("SQL ERROR during feedback reporting. Failed to connect.") + else + + var/datum/db_query/max_query = SSdbcore.NewQuery("SELECT MAX(roundid) AS max_round_id FROM erro_feedback") //CHOMPEdit TGSQL + max_query.Execute() + + var/newroundid + + while(max_query.NextRow()) + newroundid = max_query.item[1] + qdel(max_query) //CHOMPEdit TGSQL + if(!(isnum(newroundid))) + newroundid = text2num(newroundid) + + if(isnum(newroundid)) + newroundid++ + else + newroundid = 1 + + for(var/datum/feedback_variable/item in content) + var/variable = item.get_variable() + var/value = item.get_value() + + var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO erro_feedback (id, roundid, time, variable, value) VALUES (null, [newroundid], Now(), '[variable]', '[value]')") //CHOMPEdit TGSQL + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") + qdel(query) //CHOMPEdit TGSQL diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 866c36b353..eb4c09fd12 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1,2671 +1,2671 @@ -/* - -### This file contains a list of all the areas in your station. Format is as follows: - -/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) - name = "NICE NAME" (not required but makes things really nice) - icon = "ICON FILENAME" (defaults to areas.dmi) - icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - requires_power = 0 (defaults to 1) - music = "music/music.ogg" (defaults to "music/music.ogg") - -NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 - -*/ - -/*-----------------------------------------------------------------------------*/ - -///////// -//SPACE// -///////// - -/area/space - name = "\improper Space" - icon_state = "space" - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 0 - has_gravity = 0 - power_light = 0 - power_equip = 0 - power_environ = 0 - ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/space/space_serithi.ogg','sound/music/freefallin.mid') - base_turf = /turf/space - ambience = AMBIENCE_SPACE - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/space/atmosalert() - return - -/area/space/fire_alert() - return - -/area/space/fire_reset() - return - -/area/space/readyalert() - return - -/area/space/partyalert() - return - -/area/arrival - requires_power = 0 - -/area/arrival/start - name = "\improper Arrival Area" - icon_state = "start" - -/area/admin - name = "\improper Admin room" - icon_state = "start" - - - -//////////// -//SHUTTLES// -//////////// -//Shuttles only need starting area, movement is handled by landmarks -//All shuttles should now be under shuttle since we have smooth-wall code. - -/area/shuttle - requires_power = 0 - flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - sound_env = SMALL_ENCLOSED - base_turf = /turf/space - forbid_events = TRUE - -/area/shuttle/arrival - name = "\improper Arrival Shuttle" - ambience = AMBIENCE_ARRIVALS - -/area/shuttle/supply - name = "\improper Supply Shuttle" - icon_state = "shuttle2" - -/area/shuttle/escape - name = "\improper Emergency Shuttle" - music = "music/escape.ogg" - -/area/shuttle/escape_pod1 - name = "\improper Escape Pod One" - music = "music/escape.ogg" - -/area/shuttle/escape_pod2 - name = "\improper Escape Pod Two" - music = "music/escape.ogg" - -/area/shuttle/escape_pod3 - name = "\improper Escape Pod Three" - music = "music/escape.ogg" - -/area/shuttle/escape_pod4 - name = "\improper Escape Pod Four" - music = "music/escape.ogg" - -/area/shuttle/escape_pod5 - name = "\improper Escape Pod Five" - music = "music/escape.ogg" - -/area/shuttle/escape_pod6 - name = "\improper Escape Pod Six" - music = "music/escape.ogg" - -/area/shuttle/large_escape_pod1 - name = "\improper Large Escape Pod One" - music = "music/escape.ogg" - -/area/shuttle/large_escape_pod2 - name = "\improper Large Escape Pod Two" - music = "music/escape.ogg" - -/area/shuttle/cryo - name = "\improper Cryogenic Storage" - -/area/shuttle/mining - name = "\improper Mining Elevator" - music = "music/escape.ogg" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/shuttle/transport1/centcom - icon_state = "shuttle" - name = "\improper Transport Shuttle CentCom" - -/area/shuttle/transport1/station - icon_state = "shuttle" - name = "\improper Transport Shuttle" - -/area/shuttle/alien/base - icon_state = "shuttle" - name = "\improper Alien Shuttle Base" - requires_power = 1 - -/area/shuttle/alien/mine - icon_state = "shuttle" - name = "\improper Alien Shuttle Mine" - requires_power = 1 - -/area/shuttle/prison/ - name = "\improper Prison Shuttle" - -/area/shuttle/prison/station - icon_state = "shuttle" - -/area/shuttle/prison/prison - icon_state = "shuttle2" - -/area/shuttle/specops/centcom - name = "\improper Special Ops Shuttle" - icon_state = "shuttlered" - -/area/shuttle/specops/station - name = "\improper Special Ops Shuttle" - icon_state = "shuttlered2" - -/area/shuttle/syndicate_elite/mothership - name = "\improper Merc Elite Shuttle" - icon_state = "shuttlered" - -/area/shuttle/syndicate_elite/station - name = "\improper Merc Elite Shuttle" - icon_state = "shuttlered2" - -/area/shuttle/administration/centcom - name = "Centcom Large Bay (AS)" //VOREStation Edit - icon_state = "shuttlered" - -/area/shuttle/administration/station - name = "NSB Adephagia (AS)" //VOREStation Edit - icon_state = "shuttlered2" - -/area/shuttle/trade - name = "\improper Trade Station" - icon_state = "red" - dynamic_lighting = 0 - -/area/shuttle/trade/centcom - name = "\improper Trade Shuttle CentCom" - icon_state = "shuttlered" - -/area/shuttle/trade/station - name = "\improper Cryogaia Commerce Pad" - icon_state = "shuttlered" - -/area/shuttle/thunderdome - name = "honk" - -/area/shuttle/research - name = "\improper Research Elevator" - music = "music/escape.ogg" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/airtunnel1/ // referenced in airtunnel.dm:759 - -/area/dummy/ // Referenced in engine.dm:261 - -// === end remove - -/area/alien - name = "\improper Alien base" - icon_state = "yellow" - requires_power = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -// CENTCOM - -/area/centcom - name = "\improper CentCom" - icon_state = "centcom" - requires_power = 0 - dynamic_lighting = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/centcom/control - name = "\improper CentCom Control" - -/area/centcom/evac - name = "\improper CentCom Emergency Shuttle" - -/area/centcom/suppy - name = "\improper CentCom Supply Shuttle" - -/area/centcom/ferry - name = "\improper CentCom Transport Shuttle" - -/area/centcom/shuttle - name = "\improper CentCom Administration Shuttle" - -/area/centcom/test - name = "\improper CentCom Testing Facility" - -/area/centcom/living - name = "\improper CentCom Living Quarters" - -/area/centcom/specops - name = "\improper CentCom Special Ops" - -/area/centcom/creed - name = "Creed's Office" - -/area/centcom/holding - name = "\improper Holding Facility" - -/area/centcom/terminal - name = "\improper Docking Terminal" - icon_state = "centcom_dock" - ambience = AMBIENCE_ARRIVALS - -/area/centcom/tram - name = "\improper Tram Station" - ambience = AMBIENCE_ARRIVALS - -/area/centcom/security - name = "\improper CentCom Security" - icon_state = "centcom_security" - -/area/centcom/medical - name = "\improper CentCom Medical" - icon_state = "centcom_medical" - -/area/centcom/command - name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action. - icon_state = "centcom_command" - ambience = AMBIENCE_HIGHSEC - -/area/centcom/main_hall - name = "\improper Main Hallway" - icon_state = "centcom_hallway1" - -/area/centcom/bar - name = "\improper CentCom Bar" - icon_state = "centcom_crew" - -/area/centcom/restaurant - name = "\improper CentCom Restaurant" - icon_state = "centcom_crew" - -/area/centcom/bathroom - name = "\improper CentCom Bathroom" - icon_state = "centcom_crew" - sound_env = SMALL_ENCLOSED - -//SYNDICATES - -/area/syndicate_mothership - name = "\improper Mercenary Base" - icon_state = "syndie-ship" - requires_power = 0 - dynamic_lighting = 0 - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/syndicate_mothership/control - name = "\improper Mercenary Control Room" - icon_state = "syndie-control" - -/area/syndicate_mothership/elite_squad - name = "\improper Elite Mercenary Squad" - icon_state = "syndie-elite" - -//EXTRA - -/area/asteroid // -- TLE - name = "\improper Moon" - icon_state = "asteroid" - requires_power = 0 - sound_env = ASTEROID - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/asteroid/cave // -- TLE - name = "\improper Moon - Underground" - icon_state = "cave" - requires_power = 0 - sound_env = ASTEROID - -/area/asteroid/artifactroom - name = "\improper Moon - Artifact" - icon_state = "cave" - sound_env = SMALL_ENCLOSED - -/area/planet/clown - name = "\improper Clown Planet" - icon_state = "honk" - requires_power = 0 - -/area/tdome - name = "\improper Thunderdome" - icon_state = "thunder" - requires_power = 0 - dynamic_lighting = 0 - sound_env = SOUND_ENVIRONMENT_ARENA - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/tdome/tdome1 - name = "\improper Thunderdome (Team 1)" - icon_state = "green" - -/area/tdome/tdome2 - name = "\improper Thunderdome (Team 2)" - icon_state = "yellow" - -/area/tdome/tdomeadmin - name = "\improper Thunderdome (Admin.)" - icon_state = "purple" - -/area/tdome/tdomeobserve - name = "\improper Thunderdome (Observer.)" - icon_state = "purple" - -/area/virtual_reality - name = "Virtual Reality" - icon_state = "Virtual_Reality" - dynamic_lighting = 0 - requires_power = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -//ENEMY - -//names are used -// CHOMPEdit start: Shuttle condensing -/area/syndicate_station - name = "\improper Independent Station" - icon_state = "yellow" - requires_power = 0 - flags = RAD_SHIELDED - base_turf = /turf/space - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/syndicate - name = "\improper Mercenary Shuttle" - icon_state = "yellow" - requires_power = 0 - flags = RAD_SHIELDED - base_turf = /turf/space - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT -// CHOMPEdit End: Shuttle condensing - -/area/wizard_station - name = "\improper Wizard's Den" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - ambience = AMBIENCE_OTHERWORLDLY - flags = AREA_FLAG_IS_NOT_PERSISTENT - -// CHOMPEdit Start: Shuttle condensing -/area/skipjack_station - name = "Raider Outpost" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - flags = RAD_SHIELDED - ambience = AMBIENCE_HIGHSEC - -/area/shuttle/skipjack - name = "\improper Skipjack" - icon_state = "yellow" - requires_power = 0 - base_turf = /turf/space - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT -// CHOMPEdit End: Shuttle condensing - -//PRISON -/area/prison - name = "\improper Prison Station" - icon_state = "brig" - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/prison/arrival_airlock - name = "\improper Prison Station Airlock" - icon_state = "green" - requires_power = 0 - -/area/prison/control - name = "\improper Prison Security Checkpoint" - icon_state = "security" - -/area/prison/crew_quarters - name = "\improper Prison Security Quarters" - icon_state = "security" - -/area/prison/rec_room - name = "\improper Prison Rec Room" - icon_state = "green" - -/area/prison/closet - name = "\improper Prison Supply Closet" - icon_state = "dk_yellow" - -/area/prison/hallway/fore - name = "\improper Prison Fore Hallway" - icon_state = "yellow" - -/area/prison/hallway/aft - name = "\improper Prison Aft Hallway" - icon_state = "yellow" - -/area/prison/hallway/port - name = "\improper Prison Port Hallway" - icon_state = "yellow" - -/area/prison/hallway/starboard - name = "\improper Prison Starboard Hallway" - icon_state = "yellow" - -/area/prison/morgue - name = "\improper Prison Morgue" - icon_state = "morgue" - -/area/prison/medical_research - name = "\improper Prison Genetic Research" - icon_state = "medresearch" - -/area/prison/medical - name = "\improper Prison Medbay" - icon_state = "medbay" - -/area/prison/solar - name = "\improper Prison Solar Array" - icon_state = "storage" - requires_power = 0 - -/area/prison/podbay - name = "\improper Prison Podbay" - icon_state = "dk_yellow" - -/area/prison/solar_control - name = "\improper Prison Solar Array Control" - icon_state = "dk_yellow" - -/area/prison/solitary - name = "Solitary Confinement" - icon_state = "brig" - -/area/prison/cell_block/A - name = "Prison Cell Block A" - icon_state = "brig" - -/area/prison/cell_block/B - name = "Prison Cell Block B" - icon_state = "brig" - -/area/prison/cell_block/C - name = "Prison Cell Block C" - icon_state = "brig" - -//////////////////// -//SPACE STATION 13// -//////////////////// - -/area - ambience = AMBIENCE_GENERIC - -//Maintenance - -/area/maintenance - flags = RAD_SHIELDED - sound_env = TUNNEL_ENCLOSED - turf_initializer = new /datum/turf_initializer/maintenance() - ambience = AMBIENCE_MAINTENANCE - -/area/maintenance/aft - name = "Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/fore - name = "Fore Maintenance" - icon_state = "fmaint" - -/area/maintenance/starboard - name = "Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/port - name = "Port Maintenance" - icon_state = "pmaint" - -/area/maintenance/atmos_control - name = "Atmospherics Maintenance" - icon_state = "fpmaint" - -/area/maintenance/fpmaint - name = "Fore Port Maintenance - 1" - icon_state = "fpmaint" - -/area/maintenance/fpmaint2 - name = "Fore Port Maintenance - 2" - icon_state = "fpmaint" - -/area/maintenance/fsmaint - name = "Fore Starboard Maintenance - 1" - icon_state = "fsmaint" - -/area/maintenance/fsmaint2 - name = "Fore Starboard Maintenance - 2" - icon_state = "fsmaint" - -/area/maintenance/asmaint - name = "Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/engi_shuttle - name = "Engineering Shuttle Access" - icon_state = "maint_e_shuttle" - -/area/maintenance/engi_engine - name = "Engine Maintenance" - icon_state = "maint_engine" - -/area/maintenance/asmaint2 - name = "Science Maintenance" - icon_state = "asmaint" - -/area/maintenance/apmaint - name = "Cargo Engineering Maintenance" - icon_state = "apmaint" - -/area/maintenance/maintcentral - name = "Bridge Maintenance" - icon_state = "maintcentral" - -/area/maintenance/arrivals - name = "Arrivals Maintenance" - icon_state = "maint_arrivals" - -/area/maintenance/bar - name = "Bar Maintenance" - icon_state = "maint_bar" - -/area/maintenance/central - name = "Central Maintenance" - icon_state = "maint_central" - -/area/maintenance/cafe_dock - name = "Cafeteria Dock Maintenance" - icon_state = "maint_cafe_dock" - -/area/maintenance/cargo - name = "Cargo Maintenance" - icon_state = "maint_cargo" - -/area/maintenance/cargo_research - name = "Cargo Research Maintenance" - icon_state = "maint_cargo_research" - -/area/maintenance/chapel - name = "Chapel Maintenance" - icon_state = "maint_chapel" - -/area/maintenance/disposal - name = "Waste Disposal" - icon_state = "disposal" - flags = AREA_FLAG_IS_NOT_PERSISTENT //If trash items got this far, they can be safely deleted. - -/area/maintenance/engineering - name = "Engineering Maintenance" - icon_state = "maint_engineering" - -/area/maintenance/engineering/pumpstation - name = "Engineering Pump Station" - icon_state = "maint_pumpstation" - -/area/maintenance/evahallway - name = "\improper EVA Maintenance" - icon_state = "maint_eva" - -/area/maintenance/dormitory - name = "Dormitory Maintenance" - icon_state = "maint_dormitory" - -/area/maintenance/holodeck - name = "Holodeck Maintenance" - icon_state = "maint_holodeck" - -/area/maintenance/incinerator - name = "\improper Incinerator" - icon_state = "disposal" - -/area/maintenance/library - name = "Library Maintenance" - icon_state = "maint_library" - -/area/maintenance/locker - name = "Locker Room Maintenance" - icon_state = "maint_locker" - -/area/maintenance/medbay - name = "Medbay Maintenance" - icon_state = "maint_medbay" - -/area/maintenance/medbay_aft - name = "Medbay Maintenance - Aft" - icon_state = "maint_medbay_aft" - -/area/maintenance/medbay_fore - name = "Medbay Maintenance - Fore" - icon_state = "maint_medbay_fore" - -/area/maintenance/pool - name = "Pool Maintenance" - icon_state = "maint_pool" - -/area/maintenance/research - name = "Research Maintenance" - icon_state = "maint_research" - -/area/maintenance/research_port - name = "Research Maintenance - Port" - icon_state = "maint_research_port" - -/area/maintenance/research_starboard - name = "Research Maintenance - Starboard" - icon_state = "maint_research_starboard" - -/area/maintenance/research_starboard - name = "Research Maintenance - Starboard" - icon_state = "maint_research_cargo" - -/area/maintenance/research_shuttle - name = "Research Shuttle Dock Maintenance" - icon_state = "maint_research_shuttle" - -/area/maintenance/security_port - name = "Security Maintenance - Port" - icon_state = "maint_security_port" - -/area/maintenance/security_starboard - name = "Security Maintenance - Starboard" - icon_state = "maint_security_starboard" - -/area/maintenance/storage - name = "Atmospherics" - icon_state = "green" - -/area/maintenance/tool_storage - name = "Tool Storage Maintenance" - icon_state = "maint_tool_storage" - - -// SUBSTATIONS (Subtype of maint, that should let them serve as shielded area during radstorm) - -/area/maintenance/substation - name = "Substation" - icon_state = "substation" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_SUBSTATION - -/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. - name = "Engineering Substation" - -// No longer used: -/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room. - name = "Medical Research Substation" - -/area/maintenance/substation/medical // Medbay - name = "Medical Substation" - -/area/maintenance/substation/research // Research - name = "Research Substation" - -/area/maintenance/substation/cafeteria_dock // Hydro, kitchen, docks, hotel - name = "Cafeteria Dock Substation" - -/area/maintenance/substation/civilian // Dorms, Lockerroom, Pool - name = "Civilian Substation" - -/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ... - name = "Civilian East Substation" - -/area/maintenance/substation/civilian_west // Cargo, PTS, locker room, probably arrivals, ...) - name = "Civilian West Substation" - -/area/maintenance/substation/cargo // Cargo - name = "Cargo Substation" - -/area/maintenance/substation/command // AI and central cluster. This one will be between HoP office and meeting room (probably). - name = "Command Substation" - -/area/maintenance/substation/dock // Bar, docks, hotel - name = "Dock Substation" - -/area/maintenance/substation/security // Security, Brig, Permabrig, etc. - name = "Security Substation" - -//Hallway - -/area/hallway/primary/ - sound_env = LARGE_ENCLOSED - ambience = AMBIENCE_GENERIC - -/area/hallway/primary/fore - name = "\improper Fore Primary Hallway" - icon_state = "hallF" - -/area/hallway/primary/starboard - name = "\improper Starboard Primary Hallway" - icon_state = "hallS" - -/area/hallway/primary/aft - name = "\improper Aft Primary Hallway" - icon_state = "hallA" - -/area/hallway/primary/port - name = "\improper Port Primary Hallway" - icon_state = "hallP" - -/area/hallway/primary/central_one - name = "\improper Central Primary Hallway - Fore" - icon_state = "hallC1" - -/area/hallway/primary/central_two - name = "\improper Central Primary Hallway - Starboard" - icon_state = "hallC2" - -/area/hallway/primary/central_three - name = "\improper Central Primary Hallway - Aft" - icon_state = "hallC3" - -/area/hallway/primary/central_four - name = "\improper Central Primary Hallway - Port" - icon_state = "hallC4" - -/area/hallway/secondary/exit - name = "\improper Escape Shuttle Hallway" - icon_state = "escape" - -/area/hallway/secondary/construction - name = "\improper Construction Area" - icon_state = "construction" - -/area/hallway/secondary/entry - forbid_events = TRUE - -/area/hallway/secondary/entry/fore - name = "\improper Shuttle Dock Hallway - Mid" - icon_state = "entry_1" - -/area/hallway/secondary/entry/port - name = "\improper Shuttle Dock Hallway - Port" - icon_state = "entry_2" - -/area/hallway/secondary/entry/starboard - name = "\improper Shuttle Dock Hallway - Starboard" - icon_state = "entry_3" - -/area/hallway/secondary/entry/aft - name = "\improper Shuttle Dock Hallway - Aft" - icon_state = "entry_4" - -/area/hallway/secondary/entry/D1 - name = "\improper Shuttle Dock Hallway - Dock One" - icon_state = "entry_D1" - base_turf = /turf/space - forbid_events = TRUE - -/area/hallway/secondary/entry/D2 - name = "\improper Shuttle Dock Hallway - Dock Two" - icon_state = "entry_D2" - base_turf = /turf/space - forbid_events = TRUE - -/area/hallway/secondary/entry/D2/arrivals - name = "\improper Shuttle Dock Hallway - Dock Two" - icon_state = "entry_D2" - base_turf = /turf/space - requires_power = 0 - -/area/hallway/secondary/entry/D3 - name = "\improper Shuttle Dock Hallway - Dock Three" - icon_state = "entry_D3" - base_turf = /turf/space - forbid_events = TRUE - -/area/hallway/secondary/entry/D4 - name = "\improper Shuttle Dock Hallway - Dock Four" - icon_state = "entry_D4" - -/area/hallway/secondary/entry/docking_lounge - name = "\improper Docking Lounge" - icon_state = "docking_lounge" - -/area/hallway/secondary/escape/dock_escape_pod_hallway_port - name = "\improper Dock Escape Pod Hallway Port" - icon_state = "dock_escape_pod_hallway_port" - -/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard - name = "\improper Dock Escape Pod Hallway Starboard" - icon_state = "dock_escape_pod_hallway_starboard" - -/area/hallway/secondary/escape/fore_port_escape_pod_hallway - name = "\improper Fore Port Escape Pod Hallway" - icon_state = "fore_port_escape_pod_hallway" - -/area/hallway/secondary/escape/fore_escape_pod_hallway - name = "\improper Fore Escape Pod Hallway" - icon_state = "fore_escape_pod_hallway" - -/area/hallway/secondary/escape/medical_escape_pod_hallway - name = "\improper Medical Escape Pod Hallway" - icon_state = "medical_escape_pod_hallway" - -/area/hallway/secondary/cargo_hallway - name = "\improper Cargo Hallway" - icon_state = "cargo_hallway" - -/area/hallway/secondary/civilian_hallway_aft - name = "\improper Civilian Hallway Aft" - icon_state = "aft_civilian_hallway" - -/area/hallway/secondary/civilian_hallway_fore - name = "\improper Civilian Hallway Fore" - icon_state = "fore_civilian_hallway" - -/area/hallway/secondary/civilian_hallway_mid - name = "\improper Civilian Hallway Mid" - icon_state = "mid_civilian_hallway" - -/area/hallway/secondary/chapel_hallway - name = "\improper Chapel Hallway" - icon_state = "chapel_hallway" - -/area/hallway/secondary/cryostorage_hallway - name = "\improper Cryostorage Hallway" - icon_state = "cryostorage_hallway" - -/area/hallway/secondary/docking_hallway - name = "\improper Docking Hallway" - icon_state = "docking_hallway" - -/area/hallway/secondary/docking_hallway2 - name = "\improper Secondary Docking Hallway" - icon_state = "docking_hallway" - -/area/hallway/secondary/engineering_hallway - name = "\improper Engineering Primary Hallway" - icon_state = "engineering_primary_hallway" - -/area/hallway/secondary/eva_hallway - name = "\improper EVA Hallway" - icon_state = "eva_hallway" - -/area/hallway/secondary/medical_emergency_hallway - name = "\improper Medical Emergency Hallway" - icon_state = "medical_emergency_hallway" - -//Command - -/area/bridge - name = "\improper Bridge" - icon_state = "bridge" - music = "signal" - -/area/bridge_hallway - name = "\improper Bridge Hallway" - icon_state = "bridge" - -/area/bridge/meeting_room - name = "\improper Heads of Staff Meeting Room" - icon_state = "bridge" - music = null - sound_env = MEDIUM_SOFTFLOOR - -/area/crew_quarters/captain - name = "\improper Command - Site Manager's Office" - icon_state = "captain" - sound_env = MEDIUM_SOFTFLOOR - -/area/crew_quarters/heads/hop - name = "\improper Command - HoP's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/heads/hor - name = "\improper Research - RD's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/heads/chief - name = "\improper Engineering - CE's Office" - icon_state = "head_quarters" - -/area/crew_quarters/heads/hos - name = "\improper Security - HoS' Office" - icon_state = "head_quarters" - -/area/crew_quarters/heads/cmo - name = "\improper Medbay - CMO's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/courtroom - name = "\improper Courtroom" - icon_state = "courtroom" - -/area/mint - name = "\improper Mint" - icon_state = "green" - -/area/comms - name = "\improper Communications Relay" - icon_state = "tcomsatcham" - -/area/server - name = "\improper Research Server Room" - icon_state = "server" - -//Civilian - -/area/crew_quarters - name = "\improper Dormitories" - icon_state = "Sleep" - ambience = AMBIENCE_GENERIC - forbid_events = TRUE - forbid_singulo = TRUE - -/area/crew_quarters/toilet - name = "\improper Dormitory Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep - name = "\improper Dormitories" - icon_state = "Sleep" - flags = RAD_SHIELDED - -/area/crew_quarters/sleep/Apartment_A1 - name = "\improper Apartment A1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A2 - name = "\improper Apartment A2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A3 - name = "\improper Apartment A3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A4 - name = "\improper Apartment A4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A5 - name = "\improper Apartment A5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A6 - name = "\improper Apartment A6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A7 - name = "\improper Apartment A7`" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A8 - name = "\improper Apartment A8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B1 - name = "\improper Apartment B1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B2 - name = "\improper Apartment B2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B3 - name = "\improper Apartment B3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_1 - name = "\improper Dormitory Room 1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_2 - name = "\improper Dormitory Room 2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_3 - name = "\improper Dormitory Room 3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_4 - name = "\improper Dormitory Room 4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_5 - name = "\improper Dormitory Room 5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_6 - name = "\improper Dormitory Room 6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_7 - name = "\improper Dormitory Room 7" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_8 - name = "\improper Dormitory Room 8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_9 - name = "\improper Dormitory Room 9" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_10 - name = "\improper Dormitory Room 10" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_1 - name = "\improper Visitor Room 1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_2 - name = "\improper Visitor Room 2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_3 - name = "\improper Visitor Room 3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_4 - name = "\improper Visitor Room 4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_5 - name = "\improper Visitor Room 5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_6 - name = "\improper Visitor Room 6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_7 - name = "\improper Visitor Room 7" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_8 - name = "\improper Visitor Room 8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_9 - name = "\improper Visitor Room 9" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_10 - name = "\improper Visitor Room 10" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_11 - name = "\improper Visitor Room 11" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_12 - name = "\improper Visitor Room 12" - icon_state = "Sleep" - -//CHOMPStation Edit Start TFF 6/2/20 - Added two new dorms - -/area/crew_quarters/sleep/vistor_room_13 - name = "\improper Visitor Room 12" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_14 - name = "\improper Visitor Room 12" - icon_state = "Sleep" - -//CHOMPStation Edit End - -/area/crew_quarters/sleep/engi_wash - name = "\improper Engineering Washroom" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep/bedrooms - name = "\improper Dormitory Bedroom One" - icon_state = "Sleep" - sound_env = SMALL_SOFTFLOOR - -/area/crew_quarters/sleep/cryo - name = "\improper Cryogenic Storage" - icon_state = "Sleep" - -/area/crew_quarters/sleep/elevator - name = "\improper Main Elevator" - icon_state = "Sleep" - -/area/crew_quarters/sleep_male - name = "\improper Male Dorm" - icon_state = "Sleep" - -/area/crew_quarters/sleep_male/toilet_male - name = "\improper Male Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep_female - name = "\improper Female Dorm" - icon_state = "Sleep" - -/area/crew_quarters/sleep_female/toilet_female - name = "\improper Female Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/locker - name = "\improper Locker Room" - icon_state = "locker" - -/area/crew_quarters/locker/locker_toilet - name = "\improper Locker Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/fitness - name = "\improper Fitness Room" - icon_state = "fitness" - -/area/crew_quarters/longue_area - name = "\improper Lounge" //VOREStation Edit - Muh speeling. - icon_state = "recreation_area" - -/area/crew_quarters/recreation_area - name = "\improper Recreation Area" - icon_state = "recreation_area" - -/area/crew_quarters/recreation_area_hallway - name = "\improper Recreation Area Hallway" - icon_state = "recreation_area_hallway" - -/area/crew_quarters/recreation_area_restroom - name = "\improper Recreation Area Restroom" - icon_state = "recreation_area_restroom" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/pool - name = "\improper Pool" - icon_state = "pool" - -/area/crew_quarters/cafeteria - name = "\improper Cafeteria" - icon_state = "cafeteria" - -/area/crew_quarters/coffee_shop - name = "\improper Coffee Shop" - icon_state = "coffee_shop" - -/area/crew_quarters/kitchen - name = "\improper Kitchen" - icon_state = "kitchen" - -/area/crew_quarters/bar - name = "\improper Bar" - icon_state = "bar" - sound_env = LARGE_SOFTFLOOR - -/area/crew_quarters/barrestroom - name = "\improper Cafeteria Restroom" - icon_state = "bar" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/theatre - name = "\improper Theatre" - icon_state = "Theatre" - sound_env = LARGE_SOFTFLOOR - -/area/crew_quarters/visitor_lodging - name = "\improper Visitor Lodging" - icon_state = "visitor_lodging" - -/area/crew_quarters/visitor_dining - name = "\improper Visitor Dining" - icon_state = "visitor_dinning" - -/area/crew_quarters/visitor_laundry - name = "\improper Visitor Laundry" - icon_state = "visitor_laundry" - -/area/library - name = "\improper Library" - icon_state = "library" - sound_env = LARGE_SOFTFLOOR - lightswitch = 0 // VOREStation Edit - We like dark libraries - -/area/library_conference_room - name = "\improper Library Conference Room" - icon_state = "library_conference_room" - -/area/chapel - ambience = AMBIENCE_CHAPEL - -/area/chapel/main - name = "\improper Chapel" - icon_state = "chapel" - sound_env = LARGE_ENCLOSED - -/area/chapel/office - name = "\improper Chapel Office" - icon_state = "chapeloffice" - -/area/chapel/chapel_morgue - name = "\improper Chapel Morgue" - icon_state = "chapel_morgue" - -/area/lawoffice - name = "\improper Internal Affairs" - icon_state = "law" - -/area/holodeck_control - name = "\improper Holodeck Control" - icon_state = "holodeck_control" - -/area/vacant/vacant_shop - name = "\improper Vacant Shop" - icon_state = "vacant_shop" - -/area/vacant/vacant_site - name = "\improper Vacant Site" - icon_state = "vacant_site" - -/area/vacant/vacant_site2 - name = "\improper Abandoned Locker Room" - icon_state = "vacant_site" - -/area/holodeck - name = "\improper Holodeck" - icon_state = "Holodeck" - dynamic_lighting = 0 - sound_env = LARGE_ENCLOSED - forbid_events = TRUE - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/holodeck/alphadeck - name = "\improper Holodeck Alpha" - -/area/holodeck/source_plating - name = "\improper Holodeck - Off" - -/area/holodeck/source_emptycourt - name = "\improper Holodeck - Empty Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_boxingcourt - name = "\improper Holodeck - Boxing Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_basketball - name = "\improper Holodeck - Basketball Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_thunderdomecourt - name = "\improper Holodeck - Thunderdome Court" - requires_power = 0 - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_courtroom - name = "\improper Holodeck - Courtroom" - sound_env = SOUND_ENVIRONMENT_AUDITORIUM - -/area/holodeck/source_beach - name = "\improper Holodeck - Beach" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_burntest - name = "\improper Holodeck - Atmospheric Burn Test" - -/area/holodeck/source_wildlife - name = "\improper Holodeck - Wildlife Simulation" - -/area/holodeck/source_meetinghall - name = "\improper Holodeck - Meeting Hall" - sound_env = SOUND_ENVIRONMENT_AUDITORIUM - -/area/holodeck/source_theatre - name = "\improper Holodeck - Theatre" - sound_env = SOUND_ENVIRONMENT_CONCERT_HALL - -/area/holodeck/source_picnicarea - name = "\improper Holodeck - Picnic Area" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_snowfield - name = "\improper Holodeck - Snow Field" - sound_env = SOUND_ENVIRONMENT_FOREST - -/area/holodeck/source_desert - name = "\improper Holodeck - Desert" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_space - name = "\improper Holodeck - Space" - has_gravity = 0 - sound_env = SPACE - -/area/holodeck/source_chess - name = "\improper Holodeck - Chessboard" - - -//Engineering - -/area/engineering/ - name = "\improper Engineering" - icon_state = "engineering" - ambience = AMBIENCE_ENGINEERING - -/area/engineering/atmos - name = "\improper Atmospherics" - icon_state = "atmos" - sound_env = LARGE_ENCLOSED - ambience = AMBIENCE_ATMOS - -/area/engineering/atmos/monitoring - name = "\improper Atmospherics Monitoring Room" - icon_state = "atmos_monitoring" - sound_env = STANDARD_STATION - -/area/engineering/atmos/storage - name = "\improper Atmospherics Storage" - icon_state = "atmos_storage" - sound_env = SMALL_ENCLOSED - -/area/engineering/drone_fabrication - name = "\improper Engineering Drone Fabrication" - icon_state = "drone_fab" - sound_env = SMALL_ENCLOSED - -/area/engineering/engine_smes - name = "\improper Engineering SMES" - icon_state = "engine_smes" - sound_env = SMALL_ENCLOSED - -/area/engineering/engine_room - name = "\improper Engine Room" - icon_state = "engine" - sound_env = LARGE_ENCLOSED - forbid_events = TRUE - -/area/engineering/engine_airlock - name = "\improper Engine Room Airlock" - icon_state = "engine" - -/area/engineering/engine_monitoring - name = "\improper Engine Monitoring Room" - icon_state = "engine_monitoring" - -/area/engineering/engine_waste - name = "\improper Engine Waste Handling" - icon_state = "engine_waste" - -/area/engineering/engineering_monitoring - name = "\improper Engineering Monitoring Room" - icon_state = "engine_monitoring" - -/area/engineering/foyer - name = "\improper Engineering Foyer" - icon_state = "engineering_foyer" - -/area/engineering/storage - name = "\improper Engineering Storage" - icon_state = "engineering_storage" - -/area/engineering/break_room - name = "\improper Engineering Break Room" - icon_state = "engineering_break" - sound_env = MEDIUM_SOFTFLOOR - -/area/engineering/engine_eva - name = "\improper Engine EVA" - icon_state = "engine_eva" - -/area/engineering/locker_room - name = "\improper Engineering Locker Room" - icon_state = "engineering_locker" - -/area/engineering/workshop - name = "\improper Engineering Workshop" - icon_state = "engineering_workshop" - -/area/engineering/aft_hallway - name = "\improper Engineering Aft Hallway" - icon_state = "engineering_aft_hallway" - - -//Solars - -/area/solar - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_SPACE - -/area/solar/auxport - name = "\improper Fore Port Solar Array" - icon_state = "panelsA" - -/area/solar/auxstarboard - name = "\improper Fore Starboard Solar Array" - icon_state = "panelsA" - -/area/solar/fore - name = "\improper Fore Solar Array" - icon_state = "yellow" - -/area/solar/aft - name = "\improper Aft Solar Array" - icon_state = "aft" - -/area/solar/starboard - name = "\improper Aft Starboard Solar Array" - icon_state = "panelsS" - -/area/solar/port - name = "\improper Aft Port Solar Array" - icon_state = "panelsP" - -/area/maintenance/auxsolarport - name = "Solar Maintenance - Fore Port" - icon_state = "SolarcontrolP" - sound_env = SMALL_ENCLOSED - -/area/maintenance/starboardsolar - name = "Solar Maintenance - Aft Starboard" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - -/area/maintenance/portsolar - name = "Solar Maintenance - Aft Port" - icon_state = "SolarcontrolP" - sound_env = SMALL_ENCLOSED - -/area/maintenance/auxsolarstarboard - name = "Solar Maintenance - Fore Starboard" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - -/area/maintenance/foresolar - name = "Solar Maintenance - Fore" - icon_state = "SolarcontrolA" - sound_env = SMALL_ENCLOSED - -/area/assembly/chargebay - name = "\improper Mech Bay" - icon_state = "mechbay" - -/area/assembly/showroom - name = "\improper Robotics Showroom" - icon_state = "showroom" - -/area/assembly/robotics - name = "\improper Robotics Lab" - icon_state = "robotics" - -/area/assembly/assembly_line //Derelict Assembly Line - name = "\improper Assembly Line" - icon_state = "ass_line" - power_equip = 0 - power_light = 0 - power_environ = 0 - -//Teleporter - -/area/teleporter - name = "\improper Teleporter" - icon_state = "teleporter" - music = "signal" - flags = RAD_SHIELDED - -/area/gateway - name = "\improper Gateway" - icon_state = "teleporter" - music = "signal" - -/area/AIsattele - name = "\improper AI Satellite Teleporter Room" - icon_state = "teleporter" - music = "signal" - -//MedBay - -/area/medical/medbay - name = "\improper Medbay Hallway - Port" - icon_state = "medbay" - music = 'sound/ambience/signal.ogg' - -//Medbay is a large area, these additional areas help level out APC load. -/area/medical/medbay2 - name = "\improper Medbay Hallway - Starboard" - icon_state = "medbay2" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay3 - name = "\improper Medbay Hallway - Fore" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay4 - name = "\improper Medbay Hallway - Aft" - icon_state = "medbay4" - music = 'sound/ambience/signal.ogg' - -/area/medical/biostorage - name = "\improper Secondary Storage" - icon_state = "medbay2" - music = 'sound/ambience/signal.ogg' - -/area/medical/reception - name = "\improper Medbay Reception" - icon_state = "medbay" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay_emt_bay - name = "\improper Medical EMT Bay" - icon_state = "medbay_emt_bay" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay_primary_storage - name = "\improper Medbay Primary Storage" - icon_state = "medbay_primary_storage" - music = 'sound/ambience/signal.ogg' - -/area/medical/psych - name = "\improper Psych Room" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/crew_quarters/medbreak - name = "\improper Break Room" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/crew_quarters/medical_restroom - name = "\improper Medbay Restroom" - icon_state = "medbay_restroom" - sound_env = SMALL_ENCLOSED - -/area/medical/patients_rooms - name = "\improper Patient's Rooms" - icon_state = "patients" - -/area/medical/ward - name = "\improper Recovery Ward" - icon_state = "patients" - -/area/medical/patient_a - name = "\improper Patient A" - icon_state = "medbay_patient_room_a" - -/area/medical/patient_b - name = "\improper Patient B" - icon_state = "medbay_patient_room_b" - -/area/medical/patient_c - name = "\improper Patient C" - icon_state = "medbay_patient_room_c" - -/area/medical/patient_d - name = "\improper Patient D" - icon_state = "medbay_patient_room_d" - -/area/medical/patient_e - name = "\improper Patient E" - icon_state = "medbay_patient_room_e" - -/area/medical/patient_wing - name = "\improper Patient Wing" - icon_state = "patients" - -/area/medical/cmostore - name = "\improper Secure Storage" - icon_state = "CMO" - -/area/medical/robotics - name = "\improper Robotics" - icon_state = "medresearch" - -/area/medical/virology - name = "\improper Virology" - icon_state = "virology" - -/area/medical/virologyaccess - name = "\improper Virology Access" - icon_state = "virology" - -/area/medical/morgue - name = "\improper Morgue" - icon_state = "morgue" - -/area/medical/chemistry - name = "\improper Chemistry" - icon_state = "chem" - -/area/medical/surgery - name = "\improper Operating Theatre 1" - icon_state = "surgery" - flags = AREA_FLAG_IS_NOT_PERSISTENT //This WOULD become a filth pit - -/area/medical/surgery2 - name = "\improper Operating Theatre 2" - icon_state = "surgery" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/medical/surgeryobs - name = "\improper Operation Observation Room" - icon_state = "surgery" - -/area/medical/surgeryprep - name = "\improper Pre-Op Prep Room" - icon_state = "surgery" - -/area/medical/surgery_hallway - name = "\improper Surgery Hallway" - icon_state = "surgery_hallway" - -/area/medical/surgery_storage - name = "\improper Surgery Storage" - icon_state = "surgery_storage" - -/area/medical/cryo - name = "\improper Cryogenics" - icon_state = "cryo" - -/area/medical/exam_room - name = "\improper Exam Room" - icon_state = "exam_room" - -/area/medical/genetics - name = "\improper Genetics Lab" - icon_state = "genetics" - -/area/medical/genetics_cloning - name = "\improper Cloning Lab" - icon_state = "cloning" - -/area/medical/sleeper - name = "\improper Emergency Treatment Centre" - icon_state = "exam_room" - flags = AREA_FLAG_IS_NOT_PERSISTENT //Trust me. - -/area/medical/first_aid_station_starboard - name = "\improper Starboard First-Aid Station" - icon_state = "medbay2" - -/area/medical/first_aid_station - name = "\improper Port First-Aid Station" - icon_state = "medbay2" - -//Security - -/area/security/main - name = "\improper Security Office" - icon_state = "security" - -/area/security/lobby - name = "\improper Security Lobby" - icon_state = "security" - -/area/security/brig - name = "\improper Security - Brig" - icon_state = "brig" - -/area/security/brig/prison_break() - for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) - temp_closet.locked = 0 - temp_closet.icon_state = "closed_unlocked" - for(var/obj/machinery/door_timer/temp_timer in src) - temp_timer.timer_duration = 1 - ..() - -/area/security/prison - name = "\improper Security - Prison Wing" - icon_state = "sec_prison" - -/area/security/prison/prison_break() - for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) - temp_closet.locked = 0 - temp_closet.icon_state = "closed_unlocked" - for(var/obj/machinery/door_timer/temp_timer in src) - temp_timer.timer_duration = 1 - ..() - -/area/security/warden - name = "\improper Security - Warden's Office" - icon_state = "Warden" - -/area/security/armoury - name = "\improper Security - Armory" - icon_state = "armory" - ambience = AMBIENCE_HIGHSEC - -/area/security/briefing_room - name = "\improper Security - Briefing Room" - icon_state = "brig" - -/area/security/evidence_storage - name = "\improper Security - Equipment Storage" - icon_state = "security_equipment_storage" - -/area/security/evidence_storage - name = "\improper Security - Evidence Storage" - icon_state = "evidence_storage" - -/area/security/interrogation - name = "\improper Security - Interrogation" - icon_state = "interrogation" - -/area/security/riot_control - name = "\improper Security - Riot Control" - icon_state = "riot_control" - flags = RAD_SHIELDED //CHOMP Add - -/area/security/detectives_office - name = "\improper Security - Forensic Office" - icon_state = "detective" - sound_env = MEDIUM_SOFTFLOOR - -/area/security/range - name = "\improper Security - Firing Range" - icon_state = "firingrange" - -/area/security/security_aid_station - name = "\improper Security - Security Aid Station" - icon_state = "security_aid_station" - -/area/security/security_bathroom - name = "\improper Security - Restroom" - icon_state = "security_bathroom" - sound_env = SMALL_ENCLOSED - -/area/security/security_cell_hallway - name = "\improper Security - Cell Hallway" - icon_state = "security_cell_hallway" - -/area/security/security_equiptment_storage - name = "\improper Security - Equipment Storage" - icon_state = "security_equip_storage" - -/area/security/security_lockerroom - name = "\improper Security - Locker Room" - icon_state = "security_lockerroom" - -/area/security/security_processing - name = "\improper Security - Security Processing" - icon_state = "security_processing" - -/area/security/tactical - name = "\improper Security - Tactical Equipment" - icon_state = "Tactical" - ambience = AMBIENCE_HIGHSEC - - -/* - New() - ..() - - spawn(10) //let objects set up first - for(var/turf/turfToGrayscale in src) - if(turfToGrayscale.icon) - var/icon/newIcon = icon(turfToGrayscale.icon) - newIcon.GrayScale() - turfToGrayscale.icon = newIcon - for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents - if(objectToGrayscale.icon) - var/icon/newIcon = icon(objectToGrayscale.icon) - newIcon.GrayScale() - objectToGrayscale.icon = newIcon -*/ - -/area/security/nuke_storage - name = "\improper Vault" - icon_state = "nuke_storage" - ambience = AMBIENCE_HIGHSEC - -/area/security/checkpoint - name = "\improper Security Checkpoint" - icon_state = "checkpoint1" - -/area/security/checkpoint2 - name = "\improper Security - Arrival Checkpoint" - icon_state = "security" - ambience = AMBIENCE_ARRIVALS - -/area/security/checkpoint/supply - name = "Security Post - Cargo Bay" - icon_state = "checkpoint1" - -/area/security/checkpoint/engineering - name = "Security Post - Engineering" - icon_state = "checkpoint1" - -/area/security/checkpoint/medical - name = "Security Post - Medbay" - icon_state = "checkpoint1" - -/area/security/checkpoint/science - name = "Security Post - Science" - icon_state = "checkpoint1" - -/area/security/vacantoffice - name = "\improper Vacant Office" - icon_state = "security" - -/area/security/vacantoffice2 - name = "\improper Vacant Office" - icon_state = "security" - -/area/janitor/ - name = "\improper Custodial Closet" - icon_state = "janitor" - -/area/hydroponics - name = "\improper Hydroponics" - icon_state = "hydro" - -/area/hydroponics/cafegarden - name = "\improper Cafeteria Garden" - icon_state = "cafe_garden" - -/area/hydroponics/garden - name = "\improper Garden" - icon_state = "garden" - -// SUPPLY - -/area/quartermaster - name = "\improper Quartermasters" - icon_state = "quart" - -/area/quartermaster/office - name = "\improper Cargo Office" - icon_state = "quartoffice" - -/area/quartermaster/storage - name = "\improper Cargo Bay" - icon_state = "quartstorage" - sound_env = LARGE_ENCLOSED - -/area/quartermaster/foyer - name = "\improper Cargo Bay Foyer" - icon_state = "quartstorage" - -/area/quartermaster/warehouse - name = "\improper Cargo Warehouse" - icon_state = "quartstorage" - -/area/quartermaster/qm - name = "\improper Cargo - Quartermaster's Office" - icon_state = "quart" - -/area/quartermaster/delivery - name = "\improper Cargo - Delivery Office" - icon_state = "quart" - flags = AREA_FLAG_IS_NOT_PERSISTENT //So trash doesn't pile up too hard. - -/area/quartermaster/miningdock - name = "\improper Cargo Mining Dock" - icon_state = "mining" - - -// SCIENCE - -/area/rnd/research - name = "\improper Research and Development" - icon_state = "research" - -/area/rnd/research_foyer - name = "\improper Research Foyer" - icon_state = "research_foyer" - -/area/rnd/research_foyer_auxiliary - name = "\improper Research Foyer Auxiliary" - icon_state = "research_foyer_aux" - -/area/rnd/research_restroom - name = "\improper Research Restroom" - icon_state = "research_restroom" - sound_env = SMALL_ENCLOSED - -/area/rnd/research_storage - name = "\improper Research Storage" - icon_state = "research_storage" - -/area/rnd/docking - name = "\improper Research Dock" - icon_state = "research_dock" - -/area/rnd/lab - name = "\improper Research Lab" - icon_state = "toxlab" - -/area/rnd/rdoffice - name = "\improper Research Director's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/rnd/supermatter - name = "\improper Supermatter Lab" - icon_state = "toxlab" - -/area/rnd/xenobiology - name = "\improper Xenobiology Lab" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/hallway - name = "\improper Xenobiology hallway" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/storage - name = "\improper Xenobiology storage" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/xenoflora_storage - name = "\improper Xenoflora Storage" - icon_state = "xeno_f_store" - -/area/rnd/xenobiology/xenoflora - name = "\improper Xenoflora Lab" - icon_state = "xeno_f_lab" - -/area/rnd/storage - name = "\improper Toxins Storage" - icon_state = "toxstorage" - -/area/rnd/test_area - name = "\improper Toxins Test Area" - icon_state = "toxtest" - -/area/rnd/mixing - name = "\improper Toxins Mixing Room" - icon_state = "toxmix" - -/area/rnd/misc_lab - name = "\improper Miscellaneous Research" - icon_state = "toxmisc" - -/area/rnd/workshop - name = "\improper Workshop" - icon_state = "sci_workshop" - -/area/toxins/server - name = "\improper Server Room" - icon_state = "server" - - -//Storage - -/area/storage/tools - name = "Auxiliary Tool Storage" - icon_state = "storage" - -/area/storage/primary - name = "Primary Tool Storage" - icon_state = "primarystorage" - -/area/storage/autolathe - name = "Autolathe Storage" - icon_state = "storage" - -/area/storage/art - name = "Art Supply Storage" - icon_state = "storage" - -/area/storage/auxillary - name = "Auxillary Storage" - icon_state = "auxstorage" - -/area/storage/eva - name = "EVA Storage" - icon_state = "eva" - -/area/storage/secure - name = "Secure Storage" - icon_state = "storage" - -/area/storage/emergency_storage/emergency - name = "Starboard Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency2 - name = "Port Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency3 - name = "Central Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency4 - name = "Civilian Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency5 - name = "Dock Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency6 - name = "Cargo Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/tech - name = "Technical Storage" - icon_state = "auxstorage" - -/area/storage/testroom - requires_power = 0 - name = "\improper Test Room" - icon_state = "storage" - -//DJSTATION - -/area/djstation - name = "\improper Listening Post" - icon_state = "LP" - ambience = AMBIENCE_TECH_RUINS - -/area/djstation/solars - name = "\improper Listening Post Solars" - icon_state = "LPS" - ambience = AMBIENCE_TECH_RUINS - -//DERELICT - -/area/derelict - name = "\improper Derelict Station" - icon_state = "storage" - ambience = AMBIENCE_RUINS - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/derelict/hallway/primary - name = "\improper Derelict Primary Hallway" - icon_state = "hallP" - -/area/derelict/hallway/secondary - name = "\improper Derelict Secondary Hallway" - icon_state = "hallS" - -/area/derelict/arrival - name = "\improper Derelict Arrival Centre" - icon_state = "yellow" - -/area/derelict/storage/equipment - name = "Derelict Equipment Storage" - -/area/derelict/storage/storage_access - name = "Derelict Storage Access" - -/area/derelict/storage/engine_storage - name = "Derelict Engine Storage" - icon_state = "green" - -/area/derelict/bridge - name = "\improper Derelict Control Room" - icon_state = "bridge" - -/area/derelict/secret - name = "\improper Derelict Secret Room" - icon_state = "library" - -/area/derelict/bridge/access - name = "Derelict Control Room Access" - icon_state = "auxstorage" - -/area/derelict/bridge/ai_upload - name = "\improper Derelict Computer Core" - icon_state = "ai" - -/area/derelict/solar_control - name = "\improper Derelict Solar Control" - icon_state = "engine" - -/area/derelict/crew_quarters - name = "\improper Derelict Crew Quarters" - icon_state = "fitness" - -/area/derelict/medical - name = "Derelict Medbay" - icon_state = "medbay" - -/area/derelict/medical/morgue - name = "\improper Derelict Morgue" - icon_state = "morgue" - -/area/derelict/medical/chapel - name = "\improper Derelict Chapel" - icon_state = "chapel" - -/area/derelict/teleporter - name = "\improper Derelict Teleporter" - icon_state = "teleporter" - -/area/derelict/eva - name = "Derelict EVA Storage" - icon_state = "eva" - -/area/derelict/ship - name = "\improper Abandoned Ship" - icon_state = "yellow" - -/area/solar/derelict_starboard - name = "\improper Derelict Starboard Solar Array" - icon_state = "panelsS" - -/area/solar/derelict_aft - name = "\improper Derelict Aft Solar Array" - icon_state = "aft" - -/area/derelict/singularity_engine - name = "\improper Derelict Singularity Engine" - icon_state = "engine" - -//HALF-BUILT STATION (REPLACES DERELICT IN BAYCODE, ABOVE IS LEFT FOR DOWNSTREAM) - -/area/shuttle/constructionsite - name = "\improper Construction Site Shuttle" - icon_state = "yellow" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/shuttle/constructionsite/station - name = "\improper Construction Site Shuttle" - -/area/shuttle/constructionsite/site - name = "\improper Construction Site Shuttle" - -/area/constructionsite - name = "\improper Construction Site" - icon_state = "storage" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/constructionsite/storage - name = "\improper Construction Site Storage Area" - -/area/constructionsite/science - name = "\improper Construction Site Research" - -/area/constructionsite/bridge - name = "\improper Construction Site Bridge" - icon_state = "bridge" - -/area/constructionsite/maintenance - name = "\improper Construction Site Maintenance" - icon_state = "yellow" - -/area/constructionsite/hallway/aft - name = "\improper Construction Site Aft Hallway" - icon_state = "hallP" - -/area/constructionsite/hallway/fore - name = "\improper Construction Site Fore Hallway" - icon_state = "hallS" - -/area/constructionsite/atmospherics - name = "\improper Construction Site Atmospherics" - icon_state = "green" - -/area/constructionsite/medical - name = "\improper Construction Site Medbay" - icon_state = "medbay" - -/area/constructionsite/ai - name = "\improper Construction Computer Core" - icon_state = "ai" - -/area/constructionsite/engineering - name = "\improper Construction Site Engine Bay" - icon_state = "engine" - -/area/solar/constructionsite - name = "\improper Construction Site Solars" - icon_state = "aft" - -/area/constructionsite/teleporter - name = "Construction Site Teleporter" - icon_state = "yellow" - - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - - -//Construction - -/area/construction - name = "\improper Engineering Construction Area" - icon_state = "yellow" - -/area/construction/supplyshuttle - name = "\improper Supply Shuttle" - icon_state = "yellow" - -/area/construction/quarters - name = "\improper Engineer's Quarters" - icon_state = "yellow" - -/area/construction/qmaint - name = "Maintenance" - icon_state = "yellow" - -/area/construction/hallway - name = "\improper Hallway" - icon_state = "yellow" - -/area/construction/solars - name = "\improper Solar Panels" - icon_state = "yellow" - -/area/construction/solarscontrol - name = "\improper Solar Panel Control" - icon_state = "yellow" - -/area/construction/Storage - name = "Construction Site Storage" - icon_state = "yellow" - -//AI - -/area/ai_monitored/storage/eva - name = "EVA Storage" - icon_state = "eva" - -/area/ai_monitored/storage/secure - name = "Secure Storage" - icon_state = "storage" - ambience = AMBIENCE_HIGHSEC - -/area/ai_monitored/storage/emergency - name = "Emergency Storage" - icon_state = "storage" - -/area/ai_monitored/storage/emergency/eva - name = "Emergency EVA" - icon_state = "storage" - -/area/ai_upload - name = "\improper AI Upload Chamber" - icon_state = "ai_upload" - ambience = AMBIENCE_AI - -/area/ai_upload_foyer - name = "AI Upload Access" - icon_state = "ai_foyer" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/ai_server_room - name = "Messaging Server Room" - icon_state = "ai_server" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/ai - name = "\improper AI Chamber" - icon_state = "ai_chamber" - ambience = AMBIENCE_AI - -/area/ai_cyborg_station - name = "\improper Cyborg Station" - icon_state = "ai_cyborg" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/aisat - name = "\improper AI Satellite" - icon_state = "ai" - ambience = AMBIENCE_AI - -/area/aisat_interior - name = "\improper AI Satellite" - icon_state = "ai" - ambience = AMBIENCE_AI // The lack of inheritence hurts my soul. - -/area/AIsatextFP - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextFS - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextAS - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextAP - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/NewAIMain - name = "\improper AI Main New" - icon_state = "storage" - ambience = AMBIENCE_AI - - - -//Misc - -/area/wreck - ambience = AMBIENCE_RUINS - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/wreck/ai - name = "\improper AI Chamber" - icon_state = "ai" - ambience = AMBIENCE_TECH_RUINS - -/area/wreck/main - name = "\improper Wreck" - icon_state = "storage" - -/area/wreck/engineering - name = "\improper Power Room" - icon_state = "engine" - ambience = AMBIENCE_TECH_RUINS - -/area/wreck/bridge - name = "\improper Bridge" - icon_state = "bridge" - ambience = AMBIENCE_TECH_RUINS - -/area/generic - name = "Unknown" - icon_state = "storage" - - - -// Telecommunications Satellite -/area/tcommsat/ - ambience = AMBIENCE_ENGINEERING - -/area/tcommsat/entrance - name = "\improper Telecomms Teleporter" - icon_state = "tcomsatentrance" - -/area/tcommsat/chamber - name = "\improper Telecomms Central Compartment" - icon_state = "tcomsatcham" - -/area/tcomsat - name = "\improper Telecomms Satellite" - icon_state = "tcomsatlob" - ambience = AMBIENCE_ENGINEERING - -/area/tcomfoyer - name = "\improper Telecomms Foyer" - icon_state = "tcomsatfoyer" - ambience = AMBIENCE_ENGINEERING - -/area/tcomwest - name = "\improper Telecommunications Satellite West Wing" - icon_state = "tcomsatwest" - ambience = AMBIENCE_ENGINEERING - -/area/tcomeast - name = "\improper Telecommunications Satellite East Wing" - icon_state = "tcomsateast" - ambience = AMBIENCE_ENGINEERING - -/area/tcommsat/computer - name = "\improper Telecomms Control Room" - icon_state = "tcomsatcomp" - -/area/tcommsat/lounge - name = "\improper Telecommunications Satellite Lounge" - icon_state = "tcomsatlounge" - -/area/tcommsat/powercontrol - name = "\improper Telecommunications Power Control" - icon_state = "tcomsatwest" - - -// Away Missions -/area/awaymission - name = "\improper Strange Location" - icon_state = "away" - ambience = AMBIENCE_FOREBODING - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/awaymission/gateway - name = "\improper Gateway" - icon_state = "teleporter" - music = "signal" - -/area/awaymission/example - name = "\improper Strange Station" - icon_state = "away" - -/area/awaymission/wwmines - name = "\improper Wild West Mines" - icon_state = "away1" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwgov - name = "\improper Wild West Mansion" - icon_state = "away2" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwrefine - name = "\improper Wild West Refinery" - icon_state = "away3" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwvault - name = "\improper Wild West Vault" - icon_state = "away3" - luminosity = 0 - -/area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power - icon_state = "away2" - requires_power = 0 - luminosity = 0 - -/area/awaymission/desert - name = "Mars" - icon_state = "away" - -/area/awaymission/BMPship1 - name = "\improper Aft Block" - icon_state = "away1" - -/area/awaymission/BMPship2 - name = "\improper Midship Block" - icon_state = "away2" - -/area/awaymission/BMPship3 - name = "\improper Fore Block" - icon_state = "away3" - -/area/awaymission/spacebattle - name = "\improper Space Battle" - icon_state = "away" - requires_power = 0 - -/area/awaymission/spacebattle/cruiser - name = "\improper NanoTrasen Cruiser" - -/area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" - -/area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" - -/area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" - -/area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" - -/area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" - -/area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" - -/area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" - -/area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" - -/area/awaymission/listeningpost - name = "\improper Listening Post" - icon_state = "away" - requires_power = 0 - -/area/awaymission/beach - name = "Beach" - icon_state = "null" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - -///////////////////////////////////////////////////////////////////// -/* - Lists of areas to be used with is_type_in_list. - Used in gamemodes code at the moment. --rastaf0 -*/ - -// CENTCOM -var/list/centcom_areas = list ( - /area/centcom, - /area/shuttle/escape/centcom, - /area/shuttle/escape_pod1/centcom, - /area/shuttle/escape_pod2/centcom, - /area/shuttle/escape_pod3/centcom, - /area/shuttle/escape_pod5/centcom, - /area/shuttle/transport1/centcom, - /area/shuttle/administration/centcom, - /area/shuttle/specops/centcom, -) - -//SPACE STATION 13 -var/list/the_station_areas = list ( - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - // /area/shuttle/transport2/station, - /area/shuttle/prison/station, - /area/shuttle/administration/station, - /area/shuttle/specops/station, - /area/maintenance, - /area/hallway, - /area/bridge, - /area/crew_quarters, - /area/holodeck, - /area/mint, - /area/library, - /area/chapel, - /area/lawoffice, - /area/engineering, - /area/solar, - /area/assembly, - /area/teleporter, - /area/medical, - /area/security, - /area/quartermaster, - /area/janitor, - /area/hydroponics, - /area/rnd, - /area/storage, - /area/construction, - /area/ai_monitored/storage/eva, - /area/ai_monitored/storage/secure, - /area/ai_monitored/storage/emergency, - /area/ai_upload, - /area/ai_upload_foyer, - /area/ai -) - - - - -/area/beach - name = "Keelin's private beach" - icon_state = "yellow" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - - -//CHOMPSTATION AREAS -//Moved hangars to here from Southern cross areas. -/area/hangar - name = "\improper First Deck Hangar" - icon_state = "hangar" - sound_env = LARGE_ENCLOSED - ambience = AMBIENCE_HANGAR - -/area/hangar/one - name = "\improper Hangar One" - -/area/hangar/lockerroomone - name = "\improper Exploration Locker Room One" - icon_state = "hangarcontrol" - -/area/hangar/two - name = "\improper Hangar Two" - -/area/hangar/lockerroomtwo - name = "\improper Exploration Locker Room Two" - icon_state = "hangarcontrol" - -/area/hangar/three - name = "\improper Hangar Three" - -/area/hangar/lockerroomthree - name = "\improper Exploration Locker Room Three" - icon_state = "hangarcontrol" - -//CHOMPedit KSC = overmap exploration shuttles - -/area/shuttle/stargazer - name = "\improper Stargazer" - icon_state = "shuttlered" - requires_power = 1 - -/area/shuttle/echidna - name = "\improper Echidna" - icon_state = "shuttlered" - requires_power = 1 - -/area/shuttle/ursula - name = "\improper Ursula" - icon_state = "shuttlered" - requires_power = 1 - -/area/shuttle/needle - name = "\improper Needle" - icon_state = "shuttlered" - requires_power = 1 - -/area/shuttle/baby_mammoth - name = "\improper Baby_mammoth" - icon_state = "shuttlered" - requires_power = 1 +/* + +### This file contains a list of all the areas in your station. Format is as follows: + +/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) + name = "NICE NAME" (not required but makes things really nice) + icon = "ICON FILENAME" (defaults to areas.dmi) + icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + requires_power = 0 (defaults to 1) + music = "music/music.ogg" (defaults to "music/music.ogg") + +NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 + +*/ + +/*-----------------------------------------------------------------------------*/ + +///////// +//SPACE// +///////// + +/area/space + name = "\improper Space" + icon_state = "space" + requires_power = 1 + always_unpowered = 1 + dynamic_lighting = 0 + has_gravity = 0 + power_light = 0 + power_equip = 0 + power_environ = 0 + ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/space/space_serithi.ogg','sound/music/freefallin.mid') + base_turf = /turf/space + ambience = AMBIENCE_SPACE + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/space/atmosalert() + return + +/area/space/fire_alert() + return + +/area/space/fire_reset() + return + +/area/space/readyalert() + return + +/area/space/partyalert() + return + +/area/arrival + requires_power = 0 + +/area/arrival/start + name = "\improper Arrival Area" + icon_state = "start" + +/area/admin + name = "\improper Admin room" + icon_state = "start" + + + +//////////// +//SHUTTLES// +//////////// +//Shuttles only need starting area, movement is handled by landmarks +//All shuttles should now be under shuttle since we have smooth-wall code. + +/area/shuttle + requires_power = 0 + flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT + sound_env = SMALL_ENCLOSED + base_turf = /turf/space + forbid_events = TRUE + +/area/shuttle/arrival + name = "\improper Arrival Shuttle" + ambience = AMBIENCE_ARRIVALS + +/area/shuttle/supply + name = "\improper Supply Shuttle" + icon_state = "shuttle2" + +/area/shuttle/escape + name = "\improper Emergency Shuttle" + music = "music/escape.ogg" + +/area/shuttle/escape_pod1 + name = "\improper Escape Pod One" + music = "music/escape.ogg" + +/area/shuttle/escape_pod2 + name = "\improper Escape Pod Two" + music = "music/escape.ogg" + +/area/shuttle/escape_pod3 + name = "\improper Escape Pod Three" + music = "music/escape.ogg" + +/area/shuttle/escape_pod4 + name = "\improper Escape Pod Four" + music = "music/escape.ogg" + +/area/shuttle/escape_pod5 + name = "\improper Escape Pod Five" + music = "music/escape.ogg" + +/area/shuttle/escape_pod6 + name = "\improper Escape Pod Six" + music = "music/escape.ogg" + +/area/shuttle/large_escape_pod1 + name = "\improper Large Escape Pod One" + music = "music/escape.ogg" + +/area/shuttle/large_escape_pod2 + name = "\improper Large Escape Pod Two" + music = "music/escape.ogg" + +/area/shuttle/cryo + name = "\improper Cryogenic Storage" + +/area/shuttle/mining + name = "\improper Mining Elevator" + music = "music/escape.ogg" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/shuttle/transport1/centcom + icon_state = "shuttle" + name = "\improper Transport Shuttle CentCom" + +/area/shuttle/transport1/station + icon_state = "shuttle" + name = "\improper Transport Shuttle" + +/area/shuttle/alien/base + icon_state = "shuttle" + name = "\improper Alien Shuttle Base" + requires_power = 1 + +/area/shuttle/alien/mine + icon_state = "shuttle" + name = "\improper Alien Shuttle Mine" + requires_power = 1 + +/area/shuttle/prison/ + name = "\improper Prison Shuttle" + +/area/shuttle/prison/station + icon_state = "shuttle" + +/area/shuttle/prison/prison + icon_state = "shuttle2" + +/area/shuttle/specops/centcom + name = "\improper Special Ops Shuttle" + icon_state = "shuttlered" + +/area/shuttle/specops/station + name = "\improper Special Ops Shuttle" + icon_state = "shuttlered2" + +/area/shuttle/syndicate_elite/mothership + name = "\improper Merc Elite Shuttle" + icon_state = "shuttlered" + +/area/shuttle/syndicate_elite/station + name = "\improper Merc Elite Shuttle" + icon_state = "shuttlered2" + +/area/shuttle/administration/centcom + name = "Centcom Large Bay (AS)" //VOREStation Edit + icon_state = "shuttlered" + +/area/shuttle/administration/station + name = "NSB Adephagia (AS)" //VOREStation Edit + icon_state = "shuttlered2" + +/area/shuttle/trade + name = "\improper Trade Station" + icon_state = "red" + dynamic_lighting = 0 + +/area/shuttle/trade/centcom + name = "\improper Trade Shuttle CentCom" + icon_state = "shuttlered" + +/area/shuttle/trade/station + name = "\improper Cryogaia Commerce Pad" + icon_state = "shuttlered" + +/area/shuttle/thunderdome + name = "honk" + +/area/shuttle/research + name = "\improper Research Elevator" + music = "music/escape.ogg" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/airtunnel1/ // referenced in airtunnel.dm:759 + +/area/dummy/ // Referenced in engine.dm:261 + +// === end remove + +/area/alien + name = "\improper Alien base" + icon_state = "yellow" + requires_power = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +// CENTCOM + +/area/centcom + name = "\improper CentCom" + icon_state = "centcom" + requires_power = 0 + dynamic_lighting = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/centcom/control + name = "\improper CentCom Control" + +/area/centcom/evac + name = "\improper CentCom Emergency Shuttle" + +/area/centcom/suppy + name = "\improper CentCom Supply Shuttle" + +/area/centcom/ferry + name = "\improper CentCom Transport Shuttle" + +/area/centcom/shuttle + name = "\improper CentCom Administration Shuttle" + +/area/centcom/test + name = "\improper CentCom Testing Facility" + +/area/centcom/living + name = "\improper CentCom Living Quarters" + +/area/centcom/specops + name = "\improper CentCom Special Ops" + +/area/centcom/creed + name = "Creed's Office" + +/area/centcom/holding + name = "\improper Holding Facility" + +/area/centcom/terminal + name = "\improper Docking Terminal" + icon_state = "centcom_dock" + ambience = AMBIENCE_ARRIVALS + +/area/centcom/tram + name = "\improper Tram Station" + ambience = AMBIENCE_ARRIVALS + +/area/centcom/security + name = "\improper CentCom Security" + icon_state = "centcom_security" + +/area/centcom/medical + name = "\improper CentCom Medical" + icon_state = "centcom_medical" + +/area/centcom/command + name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action. + icon_state = "centcom_command" + ambience = AMBIENCE_HIGHSEC + +/area/centcom/main_hall + name = "\improper Main Hallway" + icon_state = "centcom_hallway1" + +/area/centcom/bar + name = "\improper CentCom Bar" + icon_state = "centcom_crew" + +/area/centcom/restaurant + name = "\improper CentCom Restaurant" + icon_state = "centcom_crew" + +/area/centcom/bathroom + name = "\improper CentCom Bathroom" + icon_state = "centcom_crew" + sound_env = SMALL_ENCLOSED + +//SYNDICATES + +/area/syndicate_mothership + name = "\improper Mercenary Base" + icon_state = "syndie-ship" + requires_power = 0 + dynamic_lighting = 0 + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/syndicate_mothership/control + name = "\improper Mercenary Control Room" + icon_state = "syndie-control" + +/area/syndicate_mothership/elite_squad + name = "\improper Elite Mercenary Squad" + icon_state = "syndie-elite" + +//EXTRA + +/area/asteroid // -- TLE + name = "\improper Moon" + icon_state = "asteroid" + requires_power = 0 + sound_env = ASTEROID + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/asteroid/cave // -- TLE + name = "\improper Moon - Underground" + icon_state = "cave" + requires_power = 0 + sound_env = ASTEROID + +/area/asteroid/artifactroom + name = "\improper Moon - Artifact" + icon_state = "cave" + sound_env = SMALL_ENCLOSED + +/area/planet/clown + name = "\improper Clown Planet" + icon_state = "honk" + requires_power = 0 + +/area/tdome + name = "\improper Thunderdome" + icon_state = "thunder" + requires_power = 0 + dynamic_lighting = 0 + sound_env = SOUND_ENVIRONMENT_ARENA + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/tdome/tdome1 + name = "\improper Thunderdome (Team 1)" + icon_state = "green" + +/area/tdome/tdome2 + name = "\improper Thunderdome (Team 2)" + icon_state = "yellow" + +/area/tdome/tdomeadmin + name = "\improper Thunderdome (Admin.)" + icon_state = "purple" + +/area/tdome/tdomeobserve + name = "\improper Thunderdome (Observer.)" + icon_state = "purple" + +/area/virtual_reality + name = "Virtual Reality" + icon_state = "Virtual_Reality" + dynamic_lighting = 0 + requires_power = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +//ENEMY + +//names are used +// CHOMPEdit start: Shuttle condensing +/area/syndicate_station + name = "\improper Independent Station" + icon_state = "yellow" + requires_power = 0 + flags = RAD_SHIELDED + base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/shuttle/syndicate + name = "\improper Mercenary Shuttle" + icon_state = "yellow" + requires_power = 0 + flags = RAD_SHIELDED + base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT +// CHOMPEdit End: Shuttle condensing + +/area/wizard_station + name = "\improper Wizard's Den" + icon_state = "yellow" + requires_power = 0 + dynamic_lighting = 0 + ambience = AMBIENCE_OTHERWORLDLY + flags = AREA_FLAG_IS_NOT_PERSISTENT + +// CHOMPEdit Start: Shuttle condensing +/area/skipjack_station + name = "Raider Outpost" + icon_state = "yellow" + requires_power = 0 + dynamic_lighting = 0 + flags = RAD_SHIELDED + ambience = AMBIENCE_HIGHSEC + +/area/shuttle/skipjack + name = "\improper Skipjack" + icon_state = "yellow" + requires_power = 0 + base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT +// CHOMPEdit End: Shuttle condensing + +//PRISON +/area/prison + name = "\improper Prison Station" + icon_state = "brig" + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/prison/arrival_airlock + name = "\improper Prison Station Airlock" + icon_state = "green" + requires_power = 0 + +/area/prison/control + name = "\improper Prison Security Checkpoint" + icon_state = "security" + +/area/prison/crew_quarters + name = "\improper Prison Security Quarters" + icon_state = "security" + +/area/prison/rec_room + name = "\improper Prison Rec Room" + icon_state = "green" + +/area/prison/closet + name = "\improper Prison Supply Closet" + icon_state = "dk_yellow" + +/area/prison/hallway/fore + name = "\improper Prison Fore Hallway" + icon_state = "yellow" + +/area/prison/hallway/aft + name = "\improper Prison Aft Hallway" + icon_state = "yellow" + +/area/prison/hallway/port + name = "\improper Prison Port Hallway" + icon_state = "yellow" + +/area/prison/hallway/starboard + name = "\improper Prison Starboard Hallway" + icon_state = "yellow" + +/area/prison/morgue + name = "\improper Prison Morgue" + icon_state = "morgue" + +/area/prison/medical_research + name = "\improper Prison Genetic Research" + icon_state = "medresearch" + +/area/prison/medical + name = "\improper Prison Medbay" + icon_state = "medbay" + +/area/prison/solar + name = "\improper Prison Solar Array" + icon_state = "storage" + requires_power = 0 + +/area/prison/podbay + name = "\improper Prison Podbay" + icon_state = "dk_yellow" + +/area/prison/solar_control + name = "\improper Prison Solar Array Control" + icon_state = "dk_yellow" + +/area/prison/solitary + name = "Solitary Confinement" + icon_state = "brig" + +/area/prison/cell_block/A + name = "Prison Cell Block A" + icon_state = "brig" + +/area/prison/cell_block/B + name = "Prison Cell Block B" + icon_state = "brig" + +/area/prison/cell_block/C + name = "Prison Cell Block C" + icon_state = "brig" + +//////////////////// +//SPACE STATION 13// +//////////////////// + +/area + ambience = AMBIENCE_GENERIC + +//Maintenance + +/area/maintenance + flags = RAD_SHIELDED + sound_env = TUNNEL_ENCLOSED + turf_initializer = new /datum/turf_initializer/maintenance() + ambience = AMBIENCE_MAINTENANCE + +/area/maintenance/aft + name = "Aft Maintenance" + icon_state = "amaint" + +/area/maintenance/fore + name = "Fore Maintenance" + icon_state = "fmaint" + +/area/maintenance/starboard + name = "Starboard Maintenance" + icon_state = "smaint" + +/area/maintenance/port + name = "Port Maintenance" + icon_state = "pmaint" + +/area/maintenance/atmos_control + name = "Atmospherics Maintenance" + icon_state = "fpmaint" + +/area/maintenance/fpmaint + name = "Fore Port Maintenance - 1" + icon_state = "fpmaint" + +/area/maintenance/fpmaint2 + name = "Fore Port Maintenance - 2" + icon_state = "fpmaint" + +/area/maintenance/fsmaint + name = "Fore Starboard Maintenance - 1" + icon_state = "fsmaint" + +/area/maintenance/fsmaint2 + name = "Fore Starboard Maintenance - 2" + icon_state = "fsmaint" + +/area/maintenance/asmaint + name = "Aft Starboard Maintenance" + icon_state = "asmaint" + +/area/maintenance/engi_shuttle + name = "Engineering Shuttle Access" + icon_state = "maint_e_shuttle" + +/area/maintenance/engi_engine + name = "Engine Maintenance" + icon_state = "maint_engine" + +/area/maintenance/asmaint2 + name = "Science Maintenance" + icon_state = "asmaint" + +/area/maintenance/apmaint + name = "Cargo Engineering Maintenance" + icon_state = "apmaint" + +/area/maintenance/maintcentral + name = "Bridge Maintenance" + icon_state = "maintcentral" + +/area/maintenance/arrivals + name = "Arrivals Maintenance" + icon_state = "maint_arrivals" + +/area/maintenance/bar + name = "Bar Maintenance" + icon_state = "maint_bar" + +/area/maintenance/central + name = "Central Maintenance" + icon_state = "maint_central" + +/area/maintenance/cafe_dock + name = "Cafeteria Dock Maintenance" + icon_state = "maint_cafe_dock" + +/area/maintenance/cargo + name = "Cargo Maintenance" + icon_state = "maint_cargo" + +/area/maintenance/cargo_research + name = "Cargo Research Maintenance" + icon_state = "maint_cargo_research" + +/area/maintenance/chapel + name = "Chapel Maintenance" + icon_state = "maint_chapel" + +/area/maintenance/disposal + name = "Waste Disposal" + icon_state = "disposal" + flags = AREA_FLAG_IS_NOT_PERSISTENT //If trash items got this far, they can be safely deleted. + +/area/maintenance/engineering + name = "Engineering Maintenance" + icon_state = "maint_engineering" + +/area/maintenance/engineering/pumpstation + name = "Engineering Pump Station" + icon_state = "maint_pumpstation" + +/area/maintenance/evahallway + name = "\improper EVA Maintenance" + icon_state = "maint_eva" + +/area/maintenance/dormitory + name = "Dormitory Maintenance" + icon_state = "maint_dormitory" + +/area/maintenance/holodeck + name = "Holodeck Maintenance" + icon_state = "maint_holodeck" + +/area/maintenance/incinerator + name = "\improper Incinerator" + icon_state = "disposal" + +/area/maintenance/library + name = "Library Maintenance" + icon_state = "maint_library" + +/area/maintenance/locker + name = "Locker Room Maintenance" + icon_state = "maint_locker" + +/area/maintenance/medbay + name = "Medbay Maintenance" + icon_state = "maint_medbay" + +/area/maintenance/medbay_aft + name = "Medbay Maintenance - Aft" + icon_state = "maint_medbay_aft" + +/area/maintenance/medbay_fore + name = "Medbay Maintenance - Fore" + icon_state = "maint_medbay_fore" + +/area/maintenance/pool + name = "Pool Maintenance" + icon_state = "maint_pool" + +/area/maintenance/research + name = "Research Maintenance" + icon_state = "maint_research" + +/area/maintenance/research_port + name = "Research Maintenance - Port" + icon_state = "maint_research_port" + +/area/maintenance/research_starboard + name = "Research Maintenance - Starboard" + icon_state = "maint_research_starboard" + +/area/maintenance/research_starboard + name = "Research Maintenance - Starboard" + icon_state = "maint_research_cargo" + +/area/maintenance/research_shuttle + name = "Research Shuttle Dock Maintenance" + icon_state = "maint_research_shuttle" + +/area/maintenance/security_port + name = "Security Maintenance - Port" + icon_state = "maint_security_port" + +/area/maintenance/security_starboard + name = "Security Maintenance - Starboard" + icon_state = "maint_security_starboard" + +/area/maintenance/storage + name = "Atmospherics" + icon_state = "green" + +/area/maintenance/tool_storage + name = "Tool Storage Maintenance" + icon_state = "maint_tool_storage" + + +// SUBSTATIONS (Subtype of maint, that should let them serve as shielded area during radstorm) + +/area/maintenance/substation + name = "Substation" + icon_state = "substation" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_SUBSTATION + +/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. + name = "Engineering Substation" + +// No longer used: +/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room. + name = "Medical Research Substation" + +/area/maintenance/substation/medical // Medbay + name = "Medical Substation" + +/area/maintenance/substation/research // Research + name = "Research Substation" + +/area/maintenance/substation/cafeteria_dock // Hydro, kitchen, docks, hotel + name = "Cafeteria Dock Substation" + +/area/maintenance/substation/civilian // Dorms, Lockerroom, Pool + name = "Civilian Substation" + +/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ... + name = "Civilian East Substation" + +/area/maintenance/substation/civilian_west // Cargo, PTS, locker room, probably arrivals, ...) + name = "Civilian West Substation" + +/area/maintenance/substation/cargo // Cargo + name = "Cargo Substation" + +/area/maintenance/substation/command // AI and central cluster. This one will be between HoP office and meeting room (probably). + name = "Command Substation" + +/area/maintenance/substation/dock // Bar, docks, hotel + name = "Dock Substation" + +/area/maintenance/substation/security // Security, Brig, Permabrig, etc. + name = "Security Substation" + +//Hallway + +/area/hallway/primary/ + sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_GENERIC + +/area/hallway/primary/fore + name = "\improper Fore Primary Hallway" + icon_state = "hallF" + +/area/hallway/primary/starboard + name = "\improper Starboard Primary Hallway" + icon_state = "hallS" + +/area/hallway/primary/aft + name = "\improper Aft Primary Hallway" + icon_state = "hallA" + +/area/hallway/primary/port + name = "\improper Port Primary Hallway" + icon_state = "hallP" + +/area/hallway/primary/central_one + name = "\improper Central Primary Hallway - Fore" + icon_state = "hallC1" + +/area/hallway/primary/central_two + name = "\improper Central Primary Hallway - Starboard" + icon_state = "hallC2" + +/area/hallway/primary/central_three + name = "\improper Central Primary Hallway - Aft" + icon_state = "hallC3" + +/area/hallway/primary/central_four + name = "\improper Central Primary Hallway - Port" + icon_state = "hallC4" + +/area/hallway/secondary/exit + name = "\improper Escape Shuttle Hallway" + icon_state = "escape" + +/area/hallway/secondary/construction + name = "\improper Construction Area" + icon_state = "construction" + +/area/hallway/secondary/entry + forbid_events = TRUE + +/area/hallway/secondary/entry/fore + name = "\improper Shuttle Dock Hallway - Mid" + icon_state = "entry_1" + +/area/hallway/secondary/entry/port + name = "\improper Shuttle Dock Hallway - Port" + icon_state = "entry_2" + +/area/hallway/secondary/entry/starboard + name = "\improper Shuttle Dock Hallway - Starboard" + icon_state = "entry_3" + +/area/hallway/secondary/entry/aft + name = "\improper Shuttle Dock Hallway - Aft" + icon_state = "entry_4" + +/area/hallway/secondary/entry/D1 + name = "\improper Shuttle Dock Hallway - Dock One" + icon_state = "entry_D1" + base_turf = /turf/space + forbid_events = TRUE + +/area/hallway/secondary/entry/D2 + name = "\improper Shuttle Dock Hallway - Dock Two" + icon_state = "entry_D2" + base_turf = /turf/space + forbid_events = TRUE + +/area/hallway/secondary/entry/D2/arrivals + name = "\improper Shuttle Dock Hallway - Dock Two" + icon_state = "entry_D2" + base_turf = /turf/space + requires_power = 0 + +/area/hallway/secondary/entry/D3 + name = "\improper Shuttle Dock Hallway - Dock Three" + icon_state = "entry_D3" + base_turf = /turf/space + forbid_events = TRUE + +/area/hallway/secondary/entry/D4 + name = "\improper Shuttle Dock Hallway - Dock Four" + icon_state = "entry_D4" + +/area/hallway/secondary/entry/docking_lounge + name = "\improper Docking Lounge" + icon_state = "docking_lounge" + +/area/hallway/secondary/escape/dock_escape_pod_hallway_port + name = "\improper Dock Escape Pod Hallway Port" + icon_state = "dock_escape_pod_hallway_port" + +/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard + name = "\improper Dock Escape Pod Hallway Starboard" + icon_state = "dock_escape_pod_hallway_starboard" + +/area/hallway/secondary/escape/fore_port_escape_pod_hallway + name = "\improper Fore Port Escape Pod Hallway" + icon_state = "fore_port_escape_pod_hallway" + +/area/hallway/secondary/escape/fore_escape_pod_hallway + name = "\improper Fore Escape Pod Hallway" + icon_state = "fore_escape_pod_hallway" + +/area/hallway/secondary/escape/medical_escape_pod_hallway + name = "\improper Medical Escape Pod Hallway" + icon_state = "medical_escape_pod_hallway" + +/area/hallway/secondary/cargo_hallway + name = "\improper Cargo Hallway" + icon_state = "cargo_hallway" + +/area/hallway/secondary/civilian_hallway_aft + name = "\improper Civilian Hallway Aft" + icon_state = "aft_civilian_hallway" + +/area/hallway/secondary/civilian_hallway_fore + name = "\improper Civilian Hallway Fore" + icon_state = "fore_civilian_hallway" + +/area/hallway/secondary/civilian_hallway_mid + name = "\improper Civilian Hallway Mid" + icon_state = "mid_civilian_hallway" + +/area/hallway/secondary/chapel_hallway + name = "\improper Chapel Hallway" + icon_state = "chapel_hallway" + +/area/hallway/secondary/cryostorage_hallway + name = "\improper Cryostorage Hallway" + icon_state = "cryostorage_hallway" + +/area/hallway/secondary/docking_hallway + name = "\improper Docking Hallway" + icon_state = "docking_hallway" + +/area/hallway/secondary/docking_hallway2 + name = "\improper Secondary Docking Hallway" + icon_state = "docking_hallway" + +/area/hallway/secondary/engineering_hallway + name = "\improper Engineering Primary Hallway" + icon_state = "engineering_primary_hallway" + +/area/hallway/secondary/eva_hallway + name = "\improper EVA Hallway" + icon_state = "eva_hallway" + +/area/hallway/secondary/medical_emergency_hallway + name = "\improper Medical Emergency Hallway" + icon_state = "medical_emergency_hallway" + +//Command + +/area/bridge + name = "\improper Bridge" + icon_state = "bridge" + music = "signal" + +/area/bridge_hallway + name = "\improper Bridge Hallway" + icon_state = "bridge" + +/area/bridge/meeting_room + name = "\improper Heads of Staff Meeting Room" + icon_state = "bridge" + music = null + sound_env = MEDIUM_SOFTFLOOR + +/area/crew_quarters/captain + name = "\improper Command - Site Manager's Office" + icon_state = "captain" + sound_env = MEDIUM_SOFTFLOOR + +/area/crew_quarters/heads/hop + name = "\improper Command - HoP's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/heads/hor + name = "\improper Research - RD's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/heads/chief + name = "\improper Engineering - CE's Office" + icon_state = "head_quarters" + +/area/crew_quarters/heads/hos + name = "\improper Security - HoS' Office" + icon_state = "head_quarters" + +/area/crew_quarters/heads/cmo + name = "\improper Medbay - CMO's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/courtroom + name = "\improper Courtroom" + icon_state = "courtroom" + +/area/mint + name = "\improper Mint" + icon_state = "green" + +/area/comms + name = "\improper Communications Relay" + icon_state = "tcomsatcham" + +/area/server + name = "\improper Research Server Room" + icon_state = "server" + +//Civilian + +/area/crew_quarters + name = "\improper Dormitories" + icon_state = "Sleep" + ambience = AMBIENCE_GENERIC + forbid_events = TRUE + forbid_singulo = TRUE + +/area/crew_quarters/toilet + name = "\improper Dormitory Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep + name = "\improper Dormitories" + icon_state = "Sleep" + flags = RAD_SHIELDED + +/area/crew_quarters/sleep/Apartment_A1 + name = "\improper Apartment A1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A2 + name = "\improper Apartment A2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A3 + name = "\improper Apartment A3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A4 + name = "\improper Apartment A4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A5 + name = "\improper Apartment A5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A6 + name = "\improper Apartment A6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A7 + name = "\improper Apartment A7`" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A8 + name = "\improper Apartment A8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B1 + name = "\improper Apartment B1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B2 + name = "\improper Apartment B2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B3 + name = "\improper Apartment B3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_1 + name = "\improper Dormitory Room 1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_2 + name = "\improper Dormitory Room 2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_3 + name = "\improper Dormitory Room 3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_4 + name = "\improper Dormitory Room 4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_5 + name = "\improper Dormitory Room 5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_6 + name = "\improper Dormitory Room 6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_7 + name = "\improper Dormitory Room 7" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_8 + name = "\improper Dormitory Room 8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_9 + name = "\improper Dormitory Room 9" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_10 + name = "\improper Dormitory Room 10" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_1 + name = "\improper Visitor Room 1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_2 + name = "\improper Visitor Room 2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_3 + name = "\improper Visitor Room 3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_4 + name = "\improper Visitor Room 4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_5 + name = "\improper Visitor Room 5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_6 + name = "\improper Visitor Room 6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_7 + name = "\improper Visitor Room 7" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_8 + name = "\improper Visitor Room 8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_9 + name = "\improper Visitor Room 9" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_10 + name = "\improper Visitor Room 10" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_11 + name = "\improper Visitor Room 11" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_12 + name = "\improper Visitor Room 12" + icon_state = "Sleep" + +//CHOMPStation Edit Start TFF 6/2/20 - Added two new dorms + +/area/crew_quarters/sleep/vistor_room_13 + name = "\improper Visitor Room 12" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_14 + name = "\improper Visitor Room 12" + icon_state = "Sleep" + +//CHOMPStation Edit End + +/area/crew_quarters/sleep/engi_wash + name = "\improper Engineering Washroom" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep/bedrooms + name = "\improper Dormitory Bedroom One" + icon_state = "Sleep" + sound_env = SMALL_SOFTFLOOR + +/area/crew_quarters/sleep/cryo + name = "\improper Cryogenic Storage" + icon_state = "Sleep" + +/area/crew_quarters/sleep/elevator + name = "\improper Main Elevator" + icon_state = "Sleep" + +/area/crew_quarters/sleep_male + name = "\improper Male Dorm" + icon_state = "Sleep" + +/area/crew_quarters/sleep_male/toilet_male + name = "\improper Male Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep_female + name = "\improper Female Dorm" + icon_state = "Sleep" + +/area/crew_quarters/sleep_female/toilet_female + name = "\improper Female Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/locker + name = "\improper Locker Room" + icon_state = "locker" + +/area/crew_quarters/locker/locker_toilet + name = "\improper Locker Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/fitness + name = "\improper Fitness Room" + icon_state = "fitness" + +/area/crew_quarters/longue_area + name = "\improper Lounge" //VOREStation Edit - Muh speeling. + icon_state = "recreation_area" + +/area/crew_quarters/recreation_area + name = "\improper Recreation Area" + icon_state = "recreation_area" + +/area/crew_quarters/recreation_area_hallway + name = "\improper Recreation Area Hallway" + icon_state = "recreation_area_hallway" + +/area/crew_quarters/recreation_area_restroom + name = "\improper Recreation Area Restroom" + icon_state = "recreation_area_restroom" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/pool + name = "\improper Pool" + icon_state = "pool" + +/area/crew_quarters/cafeteria + name = "\improper Cafeteria" + icon_state = "cafeteria" + +/area/crew_quarters/coffee_shop + name = "\improper Coffee Shop" + icon_state = "coffee_shop" + +/area/crew_quarters/kitchen + name = "\improper Kitchen" + icon_state = "kitchen" + +/area/crew_quarters/bar + name = "\improper Bar" + icon_state = "bar" + sound_env = LARGE_SOFTFLOOR + +/area/crew_quarters/barrestroom + name = "\improper Cafeteria Restroom" + icon_state = "bar" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/theatre + name = "\improper Theatre" + icon_state = "Theatre" + sound_env = LARGE_SOFTFLOOR + +/area/crew_quarters/visitor_lodging + name = "\improper Visitor Lodging" + icon_state = "visitor_lodging" + +/area/crew_quarters/visitor_dining + name = "\improper Visitor Dining" + icon_state = "visitor_dinning" + +/area/crew_quarters/visitor_laundry + name = "\improper Visitor Laundry" + icon_state = "visitor_laundry" + +/area/library + name = "\improper Library" + icon_state = "library" + sound_env = LARGE_SOFTFLOOR + lightswitch = 0 // VOREStation Edit - We like dark libraries + +/area/library_conference_room + name = "\improper Library Conference Room" + icon_state = "library_conference_room" + +/area/chapel + ambience = AMBIENCE_CHAPEL + +/area/chapel/main + name = "\improper Chapel" + icon_state = "chapel" + sound_env = LARGE_ENCLOSED + +/area/chapel/office + name = "\improper Chapel Office" + icon_state = "chapeloffice" + +/area/chapel/chapel_morgue + name = "\improper Chapel Morgue" + icon_state = "chapel_morgue" + +/area/lawoffice + name = "\improper Internal Affairs" + icon_state = "law" + +/area/holodeck_control + name = "\improper Holodeck Control" + icon_state = "holodeck_control" + +/area/vacant/vacant_shop + name = "\improper Vacant Shop" + icon_state = "vacant_shop" + +/area/vacant/vacant_site + name = "\improper Vacant Site" + icon_state = "vacant_site" + +/area/vacant/vacant_site2 + name = "\improper Abandoned Locker Room" + icon_state = "vacant_site" + +/area/holodeck + name = "\improper Holodeck" + icon_state = "Holodeck" + dynamic_lighting = 0 + sound_env = LARGE_ENCLOSED + forbid_events = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/holodeck/alphadeck + name = "\improper Holodeck Alpha" + +/area/holodeck/source_plating + name = "\improper Holodeck - Off" + +/area/holodeck/source_emptycourt + name = "\improper Holodeck - Empty Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_boxingcourt + name = "\improper Holodeck - Boxing Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_basketball + name = "\improper Holodeck - Basketball Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_thunderdomecourt + name = "\improper Holodeck - Thunderdome Court" + requires_power = 0 + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_courtroom + name = "\improper Holodeck - Courtroom" + sound_env = SOUND_ENVIRONMENT_AUDITORIUM + +/area/holodeck/source_beach + name = "\improper Holodeck - Beach" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_burntest + name = "\improper Holodeck - Atmospheric Burn Test" + +/area/holodeck/source_wildlife + name = "\improper Holodeck - Wildlife Simulation" + +/area/holodeck/source_meetinghall + name = "\improper Holodeck - Meeting Hall" + sound_env = SOUND_ENVIRONMENT_AUDITORIUM + +/area/holodeck/source_theatre + name = "\improper Holodeck - Theatre" + sound_env = SOUND_ENVIRONMENT_CONCERT_HALL + +/area/holodeck/source_picnicarea + name = "\improper Holodeck - Picnic Area" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_snowfield + name = "\improper Holodeck - Snow Field" + sound_env = SOUND_ENVIRONMENT_FOREST + +/area/holodeck/source_desert + name = "\improper Holodeck - Desert" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_space + name = "\improper Holodeck - Space" + has_gravity = 0 + sound_env = SPACE + +/area/holodeck/source_chess + name = "\improper Holodeck - Chessboard" + + +//Engineering + +/area/engineering/ + name = "\improper Engineering" + icon_state = "engineering" + ambience = AMBIENCE_ENGINEERING + +/area/engineering/atmos + name = "\improper Atmospherics" + icon_state = "atmos" + sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_ATMOS + +/area/engineering/atmos/monitoring + name = "\improper Atmospherics Monitoring Room" + icon_state = "atmos_monitoring" + sound_env = STANDARD_STATION + +/area/engineering/atmos/storage + name = "\improper Atmospherics Storage" + icon_state = "atmos_storage" + sound_env = SMALL_ENCLOSED + +/area/engineering/drone_fabrication + name = "\improper Engineering Drone Fabrication" + icon_state = "drone_fab" + sound_env = SMALL_ENCLOSED + +/area/engineering/engine_smes + name = "\improper Engineering SMES" + icon_state = "engine_smes" + sound_env = SMALL_ENCLOSED + +/area/engineering/engine_room + name = "\improper Engine Room" + icon_state = "engine" + sound_env = LARGE_ENCLOSED + forbid_events = TRUE + +/area/engineering/engine_airlock + name = "\improper Engine Room Airlock" + icon_state = "engine" + +/area/engineering/engine_monitoring + name = "\improper Engine Monitoring Room" + icon_state = "engine_monitoring" + +/area/engineering/engine_waste + name = "\improper Engine Waste Handling" + icon_state = "engine_waste" + +/area/engineering/engineering_monitoring + name = "\improper Engineering Monitoring Room" + icon_state = "engine_monitoring" + +/area/engineering/foyer + name = "\improper Engineering Foyer" + icon_state = "engineering_foyer" + +/area/engineering/storage + name = "\improper Engineering Storage" + icon_state = "engineering_storage" + +/area/engineering/break_room + name = "\improper Engineering Break Room" + icon_state = "engineering_break" + sound_env = MEDIUM_SOFTFLOOR + +/area/engineering/engine_eva + name = "\improper Engine EVA" + icon_state = "engine_eva" + +/area/engineering/locker_room + name = "\improper Engineering Locker Room" + icon_state = "engineering_locker" + +/area/engineering/workshop + name = "\improper Engineering Workshop" + icon_state = "engineering_workshop" + +/area/engineering/aft_hallway + name = "\improper Engineering Aft Hallway" + icon_state = "engineering_aft_hallway" + + +//Solars + +/area/solar + requires_power = 1 + always_unpowered = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_SPACE + +/area/solar/auxport + name = "\improper Fore Port Solar Array" + icon_state = "panelsA" + +/area/solar/auxstarboard + name = "\improper Fore Starboard Solar Array" + icon_state = "panelsA" + +/area/solar/fore + name = "\improper Fore Solar Array" + icon_state = "yellow" + +/area/solar/aft + name = "\improper Aft Solar Array" + icon_state = "aft" + +/area/solar/starboard + name = "\improper Aft Starboard Solar Array" + icon_state = "panelsS" + +/area/solar/port + name = "\improper Aft Port Solar Array" + icon_state = "panelsP" + +/area/maintenance/auxsolarport + name = "Solar Maintenance - Fore Port" + icon_state = "SolarcontrolP" + sound_env = SMALL_ENCLOSED + +/area/maintenance/starboardsolar + name = "Solar Maintenance - Aft Starboard" + icon_state = "SolarcontrolS" + sound_env = SMALL_ENCLOSED + +/area/maintenance/portsolar + name = "Solar Maintenance - Aft Port" + icon_state = "SolarcontrolP" + sound_env = SMALL_ENCLOSED + +/area/maintenance/auxsolarstarboard + name = "Solar Maintenance - Fore Starboard" + icon_state = "SolarcontrolS" + sound_env = SMALL_ENCLOSED + +/area/maintenance/foresolar + name = "Solar Maintenance - Fore" + icon_state = "SolarcontrolA" + sound_env = SMALL_ENCLOSED + +/area/assembly/chargebay + name = "\improper Mech Bay" + icon_state = "mechbay" + +/area/assembly/showroom + name = "\improper Robotics Showroom" + icon_state = "showroom" + +/area/assembly/robotics + name = "\improper Robotics Lab" + icon_state = "robotics" + +/area/assembly/assembly_line //Derelict Assembly Line + name = "\improper Assembly Line" + icon_state = "ass_line" + power_equip = 0 + power_light = 0 + power_environ = 0 + +//Teleporter + +/area/teleporter + name = "\improper Teleporter" + icon_state = "teleporter" + music = "signal" + flags = RAD_SHIELDED + +/area/gateway + name = "\improper Gateway" + icon_state = "teleporter" + music = "signal" + +/area/AIsattele + name = "\improper AI Satellite Teleporter Room" + icon_state = "teleporter" + music = "signal" + +//MedBay + +/area/medical/medbay + name = "\improper Medbay Hallway - Port" + icon_state = "medbay" + music = 'sound/ambience/signal.ogg' + +//Medbay is a large area, these additional areas help level out APC load. +/area/medical/medbay2 + name = "\improper Medbay Hallway - Starboard" + icon_state = "medbay2" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay3 + name = "\improper Medbay Hallway - Fore" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay4 + name = "\improper Medbay Hallway - Aft" + icon_state = "medbay4" + music = 'sound/ambience/signal.ogg' + +/area/medical/biostorage + name = "\improper Secondary Storage" + icon_state = "medbay2" + music = 'sound/ambience/signal.ogg' + +/area/medical/reception + name = "\improper Medbay Reception" + icon_state = "medbay" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay_emt_bay + name = "\improper Medical EMT Bay" + icon_state = "medbay_emt_bay" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay_primary_storage + name = "\improper Medbay Primary Storage" + icon_state = "medbay_primary_storage" + music = 'sound/ambience/signal.ogg' + +/area/medical/psych + name = "\improper Psych Room" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/crew_quarters/medbreak + name = "\improper Break Room" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/crew_quarters/medical_restroom + name = "\improper Medbay Restroom" + icon_state = "medbay_restroom" + sound_env = SMALL_ENCLOSED + +/area/medical/patients_rooms + name = "\improper Patient's Rooms" + icon_state = "patients" + +/area/medical/ward + name = "\improper Recovery Ward" + icon_state = "patients" + +/area/medical/patient_a + name = "\improper Patient A" + icon_state = "medbay_patient_room_a" + +/area/medical/patient_b + name = "\improper Patient B" + icon_state = "medbay_patient_room_b" + +/area/medical/patient_c + name = "\improper Patient C" + icon_state = "medbay_patient_room_c" + +/area/medical/patient_d + name = "\improper Patient D" + icon_state = "medbay_patient_room_d" + +/area/medical/patient_e + name = "\improper Patient E" + icon_state = "medbay_patient_room_e" + +/area/medical/patient_wing + name = "\improper Patient Wing" + icon_state = "patients" + +/area/medical/cmostore + name = "\improper Secure Storage" + icon_state = "CMO" + +/area/medical/robotics + name = "\improper Robotics" + icon_state = "medresearch" + +/area/medical/virology + name = "\improper Virology" + icon_state = "virology" + +/area/medical/virologyaccess + name = "\improper Virology Access" + icon_state = "virology" + +/area/medical/morgue + name = "\improper Morgue" + icon_state = "morgue" + +/area/medical/chemistry + name = "\improper Chemistry" + icon_state = "chem" + +/area/medical/surgery + name = "\improper Operating Theatre 1" + icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT //This WOULD become a filth pit + +/area/medical/surgery2 + name = "\improper Operating Theatre 2" + icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/medical/surgeryobs + name = "\improper Operation Observation Room" + icon_state = "surgery" + +/area/medical/surgeryprep + name = "\improper Pre-Op Prep Room" + icon_state = "surgery" + +/area/medical/surgery_hallway + name = "\improper Surgery Hallway" + icon_state = "surgery_hallway" + +/area/medical/surgery_storage + name = "\improper Surgery Storage" + icon_state = "surgery_storage" + +/area/medical/cryo + name = "\improper Cryogenics" + icon_state = "cryo" + +/area/medical/exam_room + name = "\improper Exam Room" + icon_state = "exam_room" + +/area/medical/genetics + name = "\improper Genetics Lab" + icon_state = "genetics" + +/area/medical/genetics_cloning + name = "\improper Cloning Lab" + icon_state = "cloning" + +/area/medical/sleeper + name = "\improper Emergency Treatment Centre" + icon_state = "exam_room" + flags = AREA_FLAG_IS_NOT_PERSISTENT //Trust me. + +/area/medical/first_aid_station_starboard + name = "\improper Starboard First-Aid Station" + icon_state = "medbay2" + +/area/medical/first_aid_station + name = "\improper Port First-Aid Station" + icon_state = "medbay2" + +//Security + +/area/security/main + name = "\improper Security Office" + icon_state = "security" + +/area/security/lobby + name = "\improper Security Lobby" + icon_state = "security" + +/area/security/brig + name = "\improper Security - Brig" + icon_state = "brig" + +/area/security/brig/prison_break() + for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) + temp_closet.locked = 0 + temp_closet.icon_state = "closed_unlocked" + for(var/obj/machinery/door_timer/temp_timer in src) + temp_timer.timer_duration = 1 + ..() + +/area/security/prison + name = "\improper Security - Prison Wing" + icon_state = "sec_prison" + +/area/security/prison/prison_break() + for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) + temp_closet.locked = 0 + temp_closet.icon_state = "closed_unlocked" + for(var/obj/machinery/door_timer/temp_timer in src) + temp_timer.timer_duration = 1 + ..() + +/area/security/warden + name = "\improper Security - Warden's Office" + icon_state = "Warden" + +/area/security/armoury + name = "\improper Security - Armory" + icon_state = "armory" + ambience = AMBIENCE_HIGHSEC + +/area/security/briefing_room + name = "\improper Security - Briefing Room" + icon_state = "brig" + +/area/security/evidence_storage + name = "\improper Security - Equipment Storage" + icon_state = "security_equipment_storage" + +/area/security/evidence_storage + name = "\improper Security - Evidence Storage" + icon_state = "evidence_storage" + +/area/security/interrogation + name = "\improper Security - Interrogation" + icon_state = "interrogation" + +/area/security/riot_control + name = "\improper Security - Riot Control" + icon_state = "riot_control" + flags = RAD_SHIELDED //CHOMP Add + +/area/security/detectives_office + name = "\improper Security - Forensic Office" + icon_state = "detective" + sound_env = MEDIUM_SOFTFLOOR + +/area/security/range + name = "\improper Security - Firing Range" + icon_state = "firingrange" + +/area/security/security_aid_station + name = "\improper Security - Security Aid Station" + icon_state = "security_aid_station" + +/area/security/security_bathroom + name = "\improper Security - Restroom" + icon_state = "security_bathroom" + sound_env = SMALL_ENCLOSED + +/area/security/security_cell_hallway + name = "\improper Security - Cell Hallway" + icon_state = "security_cell_hallway" + +/area/security/security_equiptment_storage + name = "\improper Security - Equipment Storage" + icon_state = "security_equip_storage" + +/area/security/security_lockerroom + name = "\improper Security - Locker Room" + icon_state = "security_lockerroom" + +/area/security/security_processing + name = "\improper Security - Security Processing" + icon_state = "security_processing" + +/area/security/tactical + name = "\improper Security - Tactical Equipment" + icon_state = "Tactical" + ambience = AMBIENCE_HIGHSEC + + +/* + New() + ..() + + spawn(10) //let objects set up first + for(var/turf/turfToGrayscale in src) + if(turfToGrayscale.icon) + var/icon/newIcon = icon(turfToGrayscale.icon) + newIcon.GrayScale() + turfToGrayscale.icon = newIcon + for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents + if(objectToGrayscale.icon) + var/icon/newIcon = icon(objectToGrayscale.icon) + newIcon.GrayScale() + objectToGrayscale.icon = newIcon +*/ + +/area/security/nuke_storage + name = "\improper Vault" + icon_state = "nuke_storage" + ambience = AMBIENCE_HIGHSEC + +/area/security/checkpoint + name = "\improper Security Checkpoint" + icon_state = "checkpoint1" + +/area/security/checkpoint2 + name = "\improper Security - Arrival Checkpoint" + icon_state = "security" + ambience = AMBIENCE_ARRIVALS + +/area/security/checkpoint/supply + name = "Security Post - Cargo Bay" + icon_state = "checkpoint1" + +/area/security/checkpoint/engineering + name = "Security Post - Engineering" + icon_state = "checkpoint1" + +/area/security/checkpoint/medical + name = "Security Post - Medbay" + icon_state = "checkpoint1" + +/area/security/checkpoint/science + name = "Security Post - Science" + icon_state = "checkpoint1" + +/area/security/vacantoffice + name = "\improper Vacant Office" + icon_state = "security" + +/area/security/vacantoffice2 + name = "\improper Vacant Office" + icon_state = "security" + +/area/janitor/ + name = "\improper Custodial Closet" + icon_state = "janitor" + +/area/hydroponics + name = "\improper Hydroponics" + icon_state = "hydro" + +/area/hydroponics/cafegarden + name = "\improper Cafeteria Garden" + icon_state = "cafe_garden" + +/area/hydroponics/garden + name = "\improper Garden" + icon_state = "garden" + +// SUPPLY + +/area/quartermaster + name = "\improper Quartermasters" + icon_state = "quart" + +/area/quartermaster/office + name = "\improper Cargo Office" + icon_state = "quartoffice" + +/area/quartermaster/storage + name = "\improper Cargo Bay" + icon_state = "quartstorage" + sound_env = LARGE_ENCLOSED + +/area/quartermaster/foyer + name = "\improper Cargo Bay Foyer" + icon_state = "quartstorage" + +/area/quartermaster/warehouse + name = "\improper Cargo Warehouse" + icon_state = "quartstorage" + +/area/quartermaster/qm + name = "\improper Cargo - Quartermaster's Office" + icon_state = "quart" + +/area/quartermaster/delivery + name = "\improper Cargo - Delivery Office" + icon_state = "quart" + flags = AREA_FLAG_IS_NOT_PERSISTENT //So trash doesn't pile up too hard. + +/area/quartermaster/miningdock + name = "\improper Cargo Mining Dock" + icon_state = "mining" + + +// SCIENCE + +/area/rnd/research + name = "\improper Research and Development" + icon_state = "research" + +/area/rnd/research_foyer + name = "\improper Research Foyer" + icon_state = "research_foyer" + +/area/rnd/research_foyer_auxiliary + name = "\improper Research Foyer Auxiliary" + icon_state = "research_foyer_aux" + +/area/rnd/research_restroom + name = "\improper Research Restroom" + icon_state = "research_restroom" + sound_env = SMALL_ENCLOSED + +/area/rnd/research_storage + name = "\improper Research Storage" + icon_state = "research_storage" + +/area/rnd/docking + name = "\improper Research Dock" + icon_state = "research_dock" + +/area/rnd/lab + name = "\improper Research Lab" + icon_state = "toxlab" + +/area/rnd/rdoffice + name = "\improper Research Director's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/rnd/supermatter + name = "\improper Supermatter Lab" + icon_state = "toxlab" + +/area/rnd/xenobiology + name = "\improper Xenobiology Lab" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/hallway + name = "\improper Xenobiology hallway" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/storage + name = "\improper Xenobiology storage" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/xenoflora_storage + name = "\improper Xenoflora Storage" + icon_state = "xeno_f_store" + +/area/rnd/xenobiology/xenoflora + name = "\improper Xenoflora Lab" + icon_state = "xeno_f_lab" + +/area/rnd/storage + name = "\improper Toxins Storage" + icon_state = "toxstorage" + +/area/rnd/test_area + name = "\improper Toxins Test Area" + icon_state = "toxtest" + +/area/rnd/mixing + name = "\improper Toxins Mixing Room" + icon_state = "toxmix" + +/area/rnd/misc_lab + name = "\improper Miscellaneous Research" + icon_state = "toxmisc" + +/area/rnd/workshop + name = "\improper Workshop" + icon_state = "sci_workshop" + +/area/toxins/server + name = "\improper Server Room" + icon_state = "server" + + +//Storage + +/area/storage/tools + name = "Auxiliary Tool Storage" + icon_state = "storage" + +/area/storage/primary + name = "Primary Tool Storage" + icon_state = "primarystorage" + +/area/storage/autolathe + name = "Autolathe Storage" + icon_state = "storage" + +/area/storage/art + name = "Art Supply Storage" + icon_state = "storage" + +/area/storage/auxillary + name = "Auxillary Storage" + icon_state = "auxstorage" + +/area/storage/eva + name = "EVA Storage" + icon_state = "eva" + +/area/storage/secure + name = "Secure Storage" + icon_state = "storage" + +/area/storage/emergency_storage/emergency + name = "Starboard Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency2 + name = "Port Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency3 + name = "Central Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency4 + name = "Civilian Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency5 + name = "Dock Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency6 + name = "Cargo Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/tech + name = "Technical Storage" + icon_state = "auxstorage" + +/area/storage/testroom + requires_power = 0 + name = "\improper Test Room" + icon_state = "storage" + +//DJSTATION + +/area/djstation + name = "\improper Listening Post" + icon_state = "LP" + ambience = AMBIENCE_TECH_RUINS + +/area/djstation/solars + name = "\improper Listening Post Solars" + icon_state = "LPS" + ambience = AMBIENCE_TECH_RUINS + +//DERELICT + +/area/derelict + name = "\improper Derelict Station" + icon_state = "storage" + ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/derelict/hallway/primary + name = "\improper Derelict Primary Hallway" + icon_state = "hallP" + +/area/derelict/hallway/secondary + name = "\improper Derelict Secondary Hallway" + icon_state = "hallS" + +/area/derelict/arrival + name = "\improper Derelict Arrival Centre" + icon_state = "yellow" + +/area/derelict/storage/equipment + name = "Derelict Equipment Storage" + +/area/derelict/storage/storage_access + name = "Derelict Storage Access" + +/area/derelict/storage/engine_storage + name = "Derelict Engine Storage" + icon_state = "green" + +/area/derelict/bridge + name = "\improper Derelict Control Room" + icon_state = "bridge" + +/area/derelict/secret + name = "\improper Derelict Secret Room" + icon_state = "library" + +/area/derelict/bridge/access + name = "Derelict Control Room Access" + icon_state = "auxstorage" + +/area/derelict/bridge/ai_upload + name = "\improper Derelict Computer Core" + icon_state = "ai" + +/area/derelict/solar_control + name = "\improper Derelict Solar Control" + icon_state = "engine" + +/area/derelict/crew_quarters + name = "\improper Derelict Crew Quarters" + icon_state = "fitness" + +/area/derelict/medical + name = "Derelict Medbay" + icon_state = "medbay" + +/area/derelict/medical/morgue + name = "\improper Derelict Morgue" + icon_state = "morgue" + +/area/derelict/medical/chapel + name = "\improper Derelict Chapel" + icon_state = "chapel" + +/area/derelict/teleporter + name = "\improper Derelict Teleporter" + icon_state = "teleporter" + +/area/derelict/eva + name = "Derelict EVA Storage" + icon_state = "eva" + +/area/derelict/ship + name = "\improper Abandoned Ship" + icon_state = "yellow" + +/area/solar/derelict_starboard + name = "\improper Derelict Starboard Solar Array" + icon_state = "panelsS" + +/area/solar/derelict_aft + name = "\improper Derelict Aft Solar Array" + icon_state = "aft" + +/area/derelict/singularity_engine + name = "\improper Derelict Singularity Engine" + icon_state = "engine" + +//HALF-BUILT STATION (REPLACES DERELICT IN BAYCODE, ABOVE IS LEFT FOR DOWNSTREAM) + +/area/shuttle/constructionsite + name = "\improper Construction Site Shuttle" + icon_state = "yellow" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/shuttle/constructionsite/station + name = "\improper Construction Site Shuttle" + +/area/shuttle/constructionsite/site + name = "\improper Construction Site Shuttle" + +/area/constructionsite + name = "\improper Construction Site" + icon_state = "storage" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/constructionsite/storage + name = "\improper Construction Site Storage Area" + +/area/constructionsite/science + name = "\improper Construction Site Research" + +/area/constructionsite/bridge + name = "\improper Construction Site Bridge" + icon_state = "bridge" + +/area/constructionsite/maintenance + name = "\improper Construction Site Maintenance" + icon_state = "yellow" + +/area/constructionsite/hallway/aft + name = "\improper Construction Site Aft Hallway" + icon_state = "hallP" + +/area/constructionsite/hallway/fore + name = "\improper Construction Site Fore Hallway" + icon_state = "hallS" + +/area/constructionsite/atmospherics + name = "\improper Construction Site Atmospherics" + icon_state = "green" + +/area/constructionsite/medical + name = "\improper Construction Site Medbay" + icon_state = "medbay" + +/area/constructionsite/ai + name = "\improper Construction Computer Core" + icon_state = "ai" + +/area/constructionsite/engineering + name = "\improper Construction Site Engine Bay" + icon_state = "engine" + +/area/solar/constructionsite + name = "\improper Construction Site Solars" + icon_state = "aft" + +/area/constructionsite/teleporter + name = "Construction Site Teleporter" + icon_state = "yellow" + + +//area/constructionsite +// name = "\improper Construction Site Shuttle" + +//area/constructionsite +// name = "\improper Construction Site Shuttle" + + +//Construction + +/area/construction + name = "\improper Engineering Construction Area" + icon_state = "yellow" + +/area/construction/supplyshuttle + name = "\improper Supply Shuttle" + icon_state = "yellow" + +/area/construction/quarters + name = "\improper Engineer's Quarters" + icon_state = "yellow" + +/area/construction/qmaint + name = "Maintenance" + icon_state = "yellow" + +/area/construction/hallway + name = "\improper Hallway" + icon_state = "yellow" + +/area/construction/solars + name = "\improper Solar Panels" + icon_state = "yellow" + +/area/construction/solarscontrol + name = "\improper Solar Panel Control" + icon_state = "yellow" + +/area/construction/Storage + name = "Construction Site Storage" + icon_state = "yellow" + +//AI + +/area/ai_monitored/storage/eva + name = "EVA Storage" + icon_state = "eva" + +/area/ai_monitored/storage/secure + name = "Secure Storage" + icon_state = "storage" + ambience = AMBIENCE_HIGHSEC + +/area/ai_monitored/storage/emergency + name = "Emergency Storage" + icon_state = "storage" + +/area/ai_monitored/storage/emergency/eva + name = "Emergency EVA" + icon_state = "storage" + +/area/ai_upload + name = "\improper AI Upload Chamber" + icon_state = "ai_upload" + ambience = AMBIENCE_AI + +/area/ai_upload_foyer + name = "AI Upload Access" + icon_state = "ai_foyer" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/ai_server_room + name = "Messaging Server Room" + icon_state = "ai_server" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/ai + name = "\improper AI Chamber" + icon_state = "ai_chamber" + ambience = AMBIENCE_AI + +/area/ai_cyborg_station + name = "\improper Cyborg Station" + icon_state = "ai_cyborg" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/aisat + name = "\improper AI Satellite" + icon_state = "ai" + ambience = AMBIENCE_AI + +/area/aisat_interior + name = "\improper AI Satellite" + icon_state = "ai" + ambience = AMBIENCE_AI // The lack of inheritence hurts my soul. + +/area/AIsatextFP + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextFS + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextAS + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextAP + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/NewAIMain + name = "\improper AI Main New" + icon_state = "storage" + ambience = AMBIENCE_AI + + + +//Misc + +/area/wreck + ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/wreck/ai + name = "\improper AI Chamber" + icon_state = "ai" + ambience = AMBIENCE_TECH_RUINS + +/area/wreck/main + name = "\improper Wreck" + icon_state = "storage" + +/area/wreck/engineering + name = "\improper Power Room" + icon_state = "engine" + ambience = AMBIENCE_TECH_RUINS + +/area/wreck/bridge + name = "\improper Bridge" + icon_state = "bridge" + ambience = AMBIENCE_TECH_RUINS + +/area/generic + name = "Unknown" + icon_state = "storage" + + + +// Telecommunications Satellite +/area/tcommsat/ + ambience = AMBIENCE_ENGINEERING + +/area/tcommsat/entrance + name = "\improper Telecomms Teleporter" + icon_state = "tcomsatentrance" + +/area/tcommsat/chamber + name = "\improper Telecomms Central Compartment" + icon_state = "tcomsatcham" + +/area/tcomsat + name = "\improper Telecomms Satellite" + icon_state = "tcomsatlob" + ambience = AMBIENCE_ENGINEERING + +/area/tcomfoyer + name = "\improper Telecomms Foyer" + icon_state = "tcomsatfoyer" + ambience = AMBIENCE_ENGINEERING + +/area/tcomwest + name = "\improper Telecommunications Satellite West Wing" + icon_state = "tcomsatwest" + ambience = AMBIENCE_ENGINEERING + +/area/tcomeast + name = "\improper Telecommunications Satellite East Wing" + icon_state = "tcomsateast" + ambience = AMBIENCE_ENGINEERING + +/area/tcommsat/computer + name = "\improper Telecomms Control Room" + icon_state = "tcomsatcomp" + +/area/tcommsat/lounge + name = "\improper Telecommunications Satellite Lounge" + icon_state = "tcomsatlounge" + +/area/tcommsat/powercontrol + name = "\improper Telecommunications Power Control" + icon_state = "tcomsatwest" + + +// Away Missions +/area/awaymission + name = "\improper Strange Location" + icon_state = "away" + ambience = AMBIENCE_FOREBODING + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/awaymission/gateway + name = "\improper Gateway" + icon_state = "teleporter" + music = "signal" + +/area/awaymission/example + name = "\improper Strange Station" + icon_state = "away" + +/area/awaymission/wwmines + name = "\improper Wild West Mines" + icon_state = "away1" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwgov + name = "\improper Wild West Mansion" + icon_state = "away2" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwrefine + name = "\improper Wild West Refinery" + icon_state = "away3" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwvault + name = "\improper Wild West Vault" + icon_state = "away3" + luminosity = 0 + +/area/awaymission/wwvaultdoors + name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power + icon_state = "away2" + requires_power = 0 + luminosity = 0 + +/area/awaymission/desert + name = "Mars" + icon_state = "away" + +/area/awaymission/BMPship1 + name = "\improper Aft Block" + icon_state = "away1" + +/area/awaymission/BMPship2 + name = "\improper Midship Block" + icon_state = "away2" + +/area/awaymission/BMPship3 + name = "\improper Fore Block" + icon_state = "away3" + +/area/awaymission/spacebattle + name = "\improper Space Battle" + icon_state = "away" + requires_power = 0 + +/area/awaymission/spacebattle/cruiser + name = "\improper NanoTrasen Cruiser" + +/area/awaymission/spacebattle/syndicate1 + name = "\improper Syndicate Assault Ship 1" + +/area/awaymission/spacebattle/syndicate2 + name = "\improper Syndicate Assault Ship 2" + +/area/awaymission/spacebattle/syndicate3 + name = "\improper Syndicate Assault Ship 3" + +/area/awaymission/spacebattle/syndicate4 + name = "\improper Syndicate War Sphere 1" + +/area/awaymission/spacebattle/syndicate5 + name = "\improper Syndicate War Sphere 2" + +/area/awaymission/spacebattle/syndicate6 + name = "\improper Syndicate War Sphere 3" + +/area/awaymission/spacebattle/syndicate7 + name = "\improper Syndicate Fighter" + +/area/awaymission/spacebattle/secret + name = "\improper Hidden Chamber" + +/area/awaymission/listeningpost + name = "\improper Listening Post" + icon_state = "away" + requires_power = 0 + +/area/awaymission/beach + name = "Beach" + icon_state = "null" + luminosity = 1 + dynamic_lighting = 0 + requires_power = 0 + +///////////////////////////////////////////////////////////////////// +/* + Lists of areas to be used with is_type_in_list. + Used in gamemodes code at the moment. --rastaf0 +*/ + +// CENTCOM +var/list/centcom_areas = list ( + /area/centcom, + /area/shuttle/escape/centcom, + /area/shuttle/escape_pod1/centcom, + /area/shuttle/escape_pod2/centcom, + /area/shuttle/escape_pod3/centcom, + /area/shuttle/escape_pod5/centcom, + /area/shuttle/transport1/centcom, + /area/shuttle/administration/centcom, + /area/shuttle/specops/centcom, +) + +//SPACE STATION 13 +var/list/the_station_areas = list ( + /area/shuttle/arrival, + /area/shuttle/escape/station, + /area/shuttle/escape_pod1/station, + /area/shuttle/escape_pod2/station, + /area/shuttle/escape_pod3/station, + /area/shuttle/escape_pod5/station, + /area/shuttle/mining/station, + /area/shuttle/transport1/station, + // /area/shuttle/transport2/station, + /area/shuttle/prison/station, + /area/shuttle/administration/station, + /area/shuttle/specops/station, + /area/maintenance, + /area/hallway, + /area/bridge, + /area/crew_quarters, + /area/holodeck, + /area/mint, + /area/library, + /area/chapel, + /area/lawoffice, + /area/engineering, + /area/solar, + /area/assembly, + /area/teleporter, + /area/medical, + /area/security, + /area/quartermaster, + /area/janitor, + /area/hydroponics, + /area/rnd, + /area/storage, + /area/construction, + /area/ai_monitored/storage/eva, + /area/ai_monitored/storage/secure, + /area/ai_monitored/storage/emergency, + /area/ai_upload, + /area/ai_upload_foyer, + /area/ai +) + + + + +/area/beach + name = "Keelin's private beach" + icon_state = "yellow" + luminosity = 1 + dynamic_lighting = 0 + requires_power = 0 + + +//CHOMPSTATION AREAS +//Moved hangars to here from Southern cross areas. +/area/hangar + name = "\improper First Deck Hangar" + icon_state = "hangar" + sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_HANGAR + +/area/hangar/one + name = "\improper Hangar One" + +/area/hangar/lockerroomone + name = "\improper Exploration Locker Room One" + icon_state = "hangarcontrol" + +/area/hangar/two + name = "\improper Hangar Two" + +/area/hangar/lockerroomtwo + name = "\improper Exploration Locker Room Two" + icon_state = "hangarcontrol" + +/area/hangar/three + name = "\improper Hangar Three" + +/area/hangar/lockerroomthree + name = "\improper Exploration Locker Room Three" + icon_state = "hangarcontrol" + +//CHOMPedit KSC = overmap exploration shuttles + +/area/shuttle/stargazer + name = "\improper Stargazer" + icon_state = "shuttlered" + requires_power = 1 + +/area/shuttle/echidna + name = "\improper Echidna" + icon_state = "shuttlered" + requires_power = 1 + +/area/shuttle/ursula + name = "\improper Ursula" + icon_state = "shuttlered" + requires_power = 1 + +/area/shuttle/needle + name = "\improper Needle" + icon_state = "shuttlered" + requires_power = 1 + +/area/shuttle/baby_mammoth + name = "\improper Baby_mammoth" + icon_state = "shuttlered" + requires_power = 1 diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm index 84f2c8eb4e..7c95e83b0d 100644 --- a/code/game/area/ai_monitored.dm +++ b/code/game/area/ai_monitored.dm @@ -1,26 +1,26 @@ -/area/ai_monitored - name = "AI Monitored Area" - var/obj/machinery/camera/motioncamera = null - - -/area/ai_monitored/New() - ..() - // locate and store the motioncamera - spawn (20) // spawn on a delay to let turfs/objs load - for (var/obj/machinery/camera/M in src) - if(M.isMotion()) - motioncamera = M - M.area_motion = src - return - return - -/area/ai_monitored/Entered(atom/movable/O) - ..() - if (ismob(O) && motioncamera) - motioncamera.newTarget(O) - -/area/ai_monitored/Exited(atom/movable/O) - if (ismob(O) && motioncamera) - motioncamera.lostTarget(O) - - +/area/ai_monitored + name = "AI Monitored Area" + var/obj/machinery/camera/motioncamera = null + + +/area/ai_monitored/New() + ..() + // locate and store the motioncamera + spawn (20) // spawn on a delay to let turfs/objs load + for (var/obj/machinery/camera/M in src) + if(M.isMotion()) + motioncamera = M + M.area_motion = src + return + return + +/area/ai_monitored/Entered(atom/movable/O) + ..() + if (ismob(O) && motioncamera) + motioncamera.newTarget(O) + +/area/ai_monitored/Exited(atom/movable/O) + if (ismob(O) && motioncamera) + motioncamera.lostTarget(O) + + diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a4d450f67f..865a404fac 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,642 +1,642 @@ -/atom/movable - layer = OBJ_LAYER - appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE - glide_size = 8 - var/last_move = null //The direction the atom last moved - var/anchored = FALSE - // var/elevation = 2 - not used anywhere - var/moving_diagonally - var/move_speed = 10 - var/l_move_time = 1 - var/throwing = 0 - var/thrower - var/turf/throw_source = null - var/throw_speed = 2 - var/throw_range = 7 - var/moved_recently = 0 - var/mob/pulledby = null - var/item_state = null // Used to specify the item state for the on-mob overlays. - var/icon_scale_x = 1 // Used to scale icons up or down horizonally in update_transform(). - var/icon_scale_y = 1 // Used to scale icons up or down vertically in update_transform(). - var/icon_rotation = 0 // Used to rotate icons in update_transform() - var/icon_expected_height = 32 - var/icon_expected_width = 32 - var/old_x = 0 - var/old_y = 0 - var/datum/riding/riding_datum = null - var/does_spin = TRUE // Does the atom spin when thrown (of course it does :P) - var/movement_type = NONE - - var/cloaked = FALSE //If we're cloaked or not - var/image/cloaked_selfimage //The image we use for our client to let them see where we are - var/belly_cycles = 0 //CHOMPEdit: Counting current belly process cycles for autotransfer. - var/autotransferable = TRUE //CHOMPEdit: Toggle for autotransfer mechanics. - -/atom/movable/Initialize(mapload) - . = ..() - switch(blocks_emissive) - if(EMISSIVE_BLOCK_GENERIC) - var/mutable_appearance/gen_emissive_blocker = mutable_appearance(icon, icon_state, plane = PLANE_EMISSIVE, alpha = src.alpha) - gen_emissive_blocker.color = GLOB.em_block_color - gen_emissive_blocker.dir = dir - gen_emissive_blocker.appearance_flags |= appearance_flags - add_overlay(list(gen_emissive_blocker), TRUE) - if(EMISSIVE_BLOCK_UNIQUE) - render_target = ref(src) - em_block = new(src, render_target) - add_overlay(list(em_block), TRUE) - if(opacity) - AddElement(/datum/element/light_blocking) - switch(light_system) - if(STATIC_LIGHT) - update_light() - if(MOVABLE_LIGHT) - AddComponent(/datum/component/overlay_lighting, starts_on = light_on) - if(MOVABLE_LIGHT_DIRECTIONAL) - AddComponent(/datum/component/overlay_lighting, is_directional = TRUE, starts_on = light_on) - -/atom/movable/Destroy() - . = ..() - for(var/atom/movable/AM in contents) - qdel(AM) - - if(opacity) - RemoveElement(/datum/element/light_blocking) - - moveToNullspace() - - vis_contents.Cut() - for(var/atom/movable/A as anything in vis_locs) - A.vis_contents -= src - - if(pulledby) - pulledby.stop_pulling() - - if(orbiting) - stop_orbit() - QDEL_NULL(riding_datum) //VOREStation Add - -/atom/movable/vv_edit_var(var_name, var_value) - if(var_name in GLOB.VVpixelmovement) //Pixel movement is not yet implemented, changing this will break everything irreversibly. - return FALSE - return ..() - -//////////////////////////////////////// -/atom/movable/Move(atom/newloc, direct = 0, movetime) - // Didn't pass enough info - if(!loc || !newloc) - return FALSE - - if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, newloc, direct, movetime) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE) - return FALSE - - // Store this early before we might move, it's used several places - var/atom/oldloc = loc - - // If we're not moving to the same spot (why? does that even happen?) - if(loc != newloc) - if(!direct) - direct = get_dir(oldloc, newloc) - if (IS_CARDINAL(direct)) //Cardinal move - // Track our failure if any in this value - . = TRUE - - // Face the direction of movement - set_dir(direct) - - // Check to make sure we can leave - if(!loc.Exit(src, newloc)) - . = FALSE - - // Check to make sure we can enter, if we haven't already failed - if(. && !newloc.Enter(src, src.loc)) - . = FALSE - - // Check to make sure if we're multi-tile we can move, if we haven't already failed - if(. && !check_multi_tile_move_density_dir(direct, locs)) - . = FALSE - - // Definitely moving if you enter this, no failures so far - if(. && locs.len <= 1) // We're not a multi-tile object. - var/area/oldarea = get_area(oldloc) - var/area/newarea = get_area(newloc) - var/old_z = get_z(oldloc) - var/dest_z = get_z(newloc) - - // Do The Move - if(movetime) - glide_for(movetime) // First attempt, lets let the diag do it. - loc = newloc - . = TRUE - - // So objects can be informed of z-level changes - if (old_z != dest_z) - onTransitZ(old_z, dest_z) - - // We don't call parent so we are calling this for byond - oldloc.Exited(src, newloc) - if(oldarea != newarea) - oldarea.Exited(src, newloc) - - // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself - for(var/atom/movable/thing as anything in oldloc) - // We don't call parent so we are calling this for byond - thing.Uncrossed(src) - - // We don't call parent so we are calling this for byond - newloc.Entered(src, oldloc) - if(oldarea != newarea) - newarea.Entered(src, oldloc) - - // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself - for(var/atom/movable/thing as anything in loc) - // We don't call parent so we are calling this for byond - thing.Crossed(src, oldloc) - - // We're a multi-tile object (multiple locs) - else if(. && newloc) - . = doMove(newloc) - - //Diagonal move, split it into cardinal moves - else - moving_diagonally = FIRST_DIAG_STEP - var/first_step_dir - // The `&& moving_diagonally` checks are so that a forceMove taking - // place due to a Crossed, Bumped, etc. call will interrupt - // the second half of the diagonal movement, or the second attempt - // at a first half if step() fails because we hit something. - glide_for(movetime * SQRT_2) //CHOMPEDIT - proper diagonal movement - if (direct & NORTH) - if (direct & EAST) - if (step(src, NORTH) && moving_diagonally) - first_step_dir = NORTH - moving_diagonally = SECOND_DIAG_STEP - . = step(src, EAST) - else if (moving_diagonally && step(src, EAST)) - first_step_dir = EAST - moving_diagonally = SECOND_DIAG_STEP - . = step(src, NORTH) - else if (direct & WEST) - if (step(src, NORTH) && moving_diagonally) - first_step_dir = NORTH - moving_diagonally = SECOND_DIAG_STEP - . = step(src, WEST) - else if (moving_diagonally && step(src, WEST)) - first_step_dir = WEST - moving_diagonally = SECOND_DIAG_STEP - . = step(src, NORTH) - else if (direct & SOUTH) - if (direct & EAST) - if (step(src, SOUTH) && moving_diagonally) - first_step_dir = SOUTH - moving_diagonally = SECOND_DIAG_STEP - . = step(src, EAST) - else if (moving_diagonally && step(src, EAST)) - first_step_dir = EAST - moving_diagonally = SECOND_DIAG_STEP - . = step(src, SOUTH) - else if (direct & WEST) - if (step(src, SOUTH) && moving_diagonally) - first_step_dir = SOUTH - moving_diagonally = SECOND_DIAG_STEP - . = step(src, WEST) - else if (moving_diagonally && step(src, WEST)) - first_step_dir = WEST - moving_diagonally = SECOND_DIAG_STEP - . = step(src, SOUTH) - // If we failed, turn to face the direction of the first step at least - if(!. && moving_diagonally == SECOND_DIAG_STEP) - set_dir(first_step_dir) - // Done, regardless! - moving_diagonally = 0 - // We return because step above will call Move() and we don't want to do shenanigans back in here again - return - - else if(!loc || (loc == oldloc)) - last_move = 0 - return - - // If we moved, call Moved() on ourselves - if(.) - Moved(oldloc, direct, FALSE, movetime ? movetime : ( (TICKS2DS(WORLD_ICON_SIZE/glide_size)) * (moving_diagonally ? (ONE_OVER_SQRT_2) : 1) ) ) //CHOMPEDIT - proper diagonal movement - - // Update timers/cooldown stuff - move_speed = world.time - l_move_time - l_move_time = world.time - last_move = direct // The direction you last moved - // set_dir(direct) //Don't think this is necessary - -//Called after a successful Move(). By this point, we've already moved -/atom/movable/proc/Moved(atom/old_loc, direction, forced = FALSE, movetime) - SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction, forced, movetime) - // Handle any buckled mobs on this movable - if(has_buckled_mobs()) - handle_buckled_mob_movement(old_loc, direction, movetime) - if(riding_datum) - riding_datum.handle_vehicle_layer() - riding_datum.handle_vehicle_offsets() - for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update. - light.source_atom.update_light() - - //SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction) CHOMPEdit - Why was this comsig here twice? - - return TRUE - -/atom/movable/set_dir(newdir) - . = ..(newdir) - if(riding_datum) - riding_datum.handle_vehicle_offsets() - -/atom/movable/relaymove(mob/user, direction) - . = ..() - if(riding_datum) - riding_datum.handle_ride(user, direction) - -// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly. -// You probably want CanPass() -/atom/movable/Cross(atom/movable/AM) - return CanPass(AM, loc) - -/atom/movable/CanPass(atom/movable/mover, turf/target) - . = ..() - if(locs && locs.len >= 2) // If something is standing on top of us, let them pass. - if(mover.loc in locs) - . = TRUE - return . - -/atom/movable/Bump(atom/A) - if(!A) - CRASH("Bump was called with no argument.") - . = ..() - if(throwing) - throw_impact(A) - throwing = 0 - if(QDELETED(A)) - return - - SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A) - - A.Bumped(src) - A.last_bumped = world.time - -/atom/movable/proc/forceMove(atom/destination, direction, movetime) - . = FALSE - if(destination) - . = doMove(destination, direction, movetime) - else - CRASH("No valid destination passed into forceMove") - -/atom/movable/proc/moveToNullspace() - return doMove(null) - -/atom/movable/proc/doMove(atom/destination, direction, movetime) - var/atom/oldloc = loc - var/area/old_area = get_area(oldloc) - var/same_loc = oldloc == destination - - if(destination) - var/area/destarea = get_area(destination) - - // Do The Move - glide_for(movetime) - last_move = isnull(direction) ? 0 : direction - loc = destination - - // Unset this in case it was set in some other proc. We're no longer moving diagonally for sure. - moving_diagonally = 0 - - // We are moving to a different loc - if(!same_loc) - // Not moving out of nullspace - if(oldloc) - oldloc.Exited(src, destination) - // If it's not the same area, Exited() it - if(old_area && old_area != destarea) - old_area.Exited(src, destination) - - // Uncross everything where we left - for(var/atom/movable/AM as anything in oldloc) - if(AM == src) - continue - AM.Uncrossed(src) - if(loc != destination) // Uncrossed() triggered a separate movement - return - - // Information about turf and z-levels for source and dest collected - var/turf/oldturf = get_turf(oldloc) - var/turf/destturf = get_turf(destination) - var/old_z = (oldturf ? oldturf.z : null) - var/dest_z = (destturf ? destturf.z : null) - - // So objects can be informed of z-level changes - if (old_z != dest_z) - onTransitZ(old_z, dest_z) - - // Destination atom Entered - destination.Entered(src, oldloc) - - // Entered() the new area if it's not the same area - if(destarea && old_area != destarea) - destarea.Entered(src, oldloc) - - // We ignore ourselves because if we're multi-tile we might be in both old and new locs - for(var/atom/movable/AM as anything in destination) - if(AM == src) - continue - AM.Crossed(src, oldloc) - if(loc != destination) // Crossed triggered a separate movement - return - - // Call our thingy to inform everyone we moved - Moved(oldloc, NONE, TRUE) - - // Break pulling if we are too far to pull now. - if(pulledby && (pulledby.z != src.z || get_dist(pulledby, src) > 1)) - pulledby.stop_pulling() - - // We moved - return TRUE - - //If no destination, move the atom into nullspace (don't do this unless you know what you're doing) - else if(oldloc) - loc = null - - // Uncross everything where we left (no multitile safety like above because we are definitely not still there) - for(var/atom/movable/AM as anything in oldloc) - AM.Uncrossed(src) - - // Exited() our loc and area - oldloc.Exited(src, null) - if(old_area) - old_area.Exited(src, null) - - // We moved - return TRUE - -/atom/movable/proc/onTransitZ(old_z,new_z) - GLOB.z_moved_event.raise_event(src, old_z, new_z) - SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z) - for(var/atom/movable/AM as anything in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. - AM.onTransitZ(old_z,new_z) - -/atom/movable/proc/glide_for(movetime) - if(movetime) - glide_size = WORLD_ICON_SIZE/max(DS2TICKS(movetime), 1) - spawn(movetime) - glide_size = initial(glide_size) - else - glide_size = initial(glide_size) - -///////////////////////////////////////////////////////////////// - -//called when src is thrown into hit_atom -/atom/movable/proc/throw_impact(atom/hit_atom, var/speed) - if(istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - if(M.buckled == src) - return // Don't hit the thing we're buckled to. - M.hitby(src,speed) - - else if(isobj(hit_atom)) - var/obj/O = hit_atom - if(!O.anchored) - step(O, src.last_move) - O.hitby(src,speed) - - else if(isturf(hit_atom)) - src.throwing = 0 - var/turf/T = hit_atom - T.hitby(src,speed) - -//decided whether a movable atom being thrown can pass through the turf it is in. -/atom/movable/proc/hit_check(var/speed) - if(src.throwing) - for(var/atom/A in get_turf(src)) - if(A == src) continue - if(istype(A,/mob/living)) - if(A:lying) continue - src.throw_impact(A,speed) - if(isobj(A)) - if(!A.density || A.throwpass) - continue - // Special handling of windows, which are dense but block only from some directions - if(istype(A, /obj/structure/window)) - var/obj/structure/window/W = A - if (!W.is_fulltile() && !(turn(src.last_move, 180) & A.dir)) - continue - // Same thing for (closed) windoors, which have the same problem - else if(istype(A, /obj/machinery/door/window) && !(turn(src.last_move, 180) & A.dir)) - continue - src.throw_impact(A,speed) - -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called. - . = TRUE - if (!target || speed <= 0 || QDELETED(src) || (target.z != src.z)) - return FALSE - - if (pulledby) - pulledby.stop_pulling() - - var/datum/thrownthing/TT = new(src, target, range, speed, thrower, callback) - throwing = TT - - pixel_z = 0 - if(spin && does_spin) - SpinAnimation(4,1) - - SSthrowing.processing[src] = TT - if (SSthrowing.state == SS_PAUSED && length(SSthrowing.currentrun)) - SSthrowing.currentrun[src] = TT - -//Overlays -/atom/movable/overlay - var/atom/master = null - anchored = TRUE - -/atom/movable/overlay/New() - for(var/x in src.verbs) - src.verbs -= x - ..() - -/atom/movable/overlay/attackby(a, b) - if (src.master) - return src.master.attackby(a, b) - return - -/atom/movable/overlay/attack_hand(a, b, c) - if (src.master) - return src.master.attack_hand(a, b, c) - return - -/atom/movable/proc/touch_map_edge() - if(z in using_map.sealed_levels) - return - - if(using_map.use_overmap) - overmap_spacetravel(get_turf(src), src) - return - - var/move_to_z = src.get_transit_zlevel() - if(move_to_z) - var/new_z = move_to_z - var/new_x - var/new_y - - if(x <= TRANSITIONEDGE) - new_x = world.maxx - TRANSITIONEDGE - 2 - new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (x >= (world.maxx - TRANSITIONEDGE + 1)) - new_x = TRANSITIONEDGE + 1 - new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (y <= TRANSITIONEDGE) - new_y = world.maxy - TRANSITIONEDGE -2 - new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - else if (y >= (world.maxy - TRANSITIONEDGE + 1)) - new_y = TRANSITIONEDGE + 1 - new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear - var/datum/game_mode/nuclear/G = ticker.mode - G.check_nuke_disks() - - var/turf/T = locate(new_x, new_y, new_z) - if(istype(T)) - forceMove(T) - -//by default, transition randomly to another zlevel -/atom/movable/proc/get_transit_zlevel() - var/list/candidates = using_map.accessible_z_levels.Copy() - candidates.Remove("[src.z]") - - if(!candidates.len) - return null - return text2num(pickweight(candidates)) - -// Returns the current scaling of the sprite. -// Note this DOES NOT measure the height or width of the icon, but returns what number is being multiplied with to scale the icons, if any. -/atom/movable/proc/get_icon_scale_x() - return icon_scale_x - -/atom/movable/proc/get_icon_scale_y() - return icon_scale_y - -/atom/movable/proc/update_transform() - var/matrix/M = matrix() - M.Scale(icon_scale_x, icon_scale_y) - M.Turn(icon_rotation) - src.transform = M - -// Use this to set the object's scale. -/atom/movable/proc/adjust_scale(new_scale_x, new_scale_y) - if(isnull(new_scale_y)) - new_scale_y = new_scale_x - if(new_scale_x != 0) - icon_scale_x = new_scale_x - if(new_scale_y != 0) - icon_scale_y = new_scale_y - update_transform() - -/atom/movable/proc/adjust_rotation(new_rotation) - icon_rotation = new_rotation - update_transform() - -// Called when touching a lava tile. -/atom/movable/proc/lava_act() - fire_act(null, 10000, 1000) - - -// Procs to cloak/uncloak -/atom/movable/proc/cloak() - if(cloaked) - return FALSE - cloaked = TRUE - . = TRUE // We did work - - var/static/animation_time = 1 SECOND - cloaked_selfimage = get_cloaked_selfimage() - - //Wheeee - cloak_animation(animation_time) - - //Needs to be last so people can actually see the effect before we become invisible - if(cloaked) // Ensure we are still cloaked after the animation delay - plane = CLOAKED_PLANE - -/atom/movable/proc/uncloak() - if(!cloaked) - return FALSE - cloaked = FALSE - . = TRUE // We did work - - var/static/animation_time = 1 SECOND - QDEL_NULL(cloaked_selfimage) - - //Needs to be first so people can actually see the effect, so become uninvisible first - plane = initial(plane) - - //Oooooo - uncloak_animation(animation_time) - - -// Animations for cloaking/uncloaking -/atom/movable/proc/cloak_animation(var/length = 1 SECOND) - //Save these - var/initial_alpha = alpha - - //Animate alpha fade - animate(src, alpha = 0, time = length) - - //Animate a cloaking effect - var/our_filter = filters.len+1 //Filters don't appear to have a type that can be stored in a var and accessed. This is how the DM reference does it. - filters += filter(type="wave", x = 0, y = 16, size = 0, offset = 0, flags = WAVE_SIDEWAYS) - animate(filters[our_filter], offset = 1, size = 8, time = length, flags = ANIMATION_PARALLEL) - - //Wait for animations to finish - sleep(length+5) - - //Remove those - filters -= filter(type="wave", x = 0, y = 16, size = 8, offset = 1, flags = WAVE_SIDEWAYS) - - //Back to original alpha - alpha = initial_alpha - -/atom/movable/proc/uncloak_animation(var/length = 1 SECOND) - //Save these - var/initial_alpha = alpha - - //Put us back to normal, but no alpha - alpha = 0 - - //Animate alpha fade up - animate(src, alpha = initial_alpha, time = length) - - //Animate a cloaking effect - var/our_filter = filters.len+1 //Filters don't appear to have a type that can be stored in a var and accessed. This is how the DM reference does it. - filters += filter(type="wave", x=0, y = 16, size = 8, offset = 1, flags = WAVE_SIDEWAYS) - animate(filters[our_filter], offset = 0, size = 0, time = length, flags = ANIMATION_PARALLEL) - - //Wait for animations to finish - sleep(length+5) - - //Remove those - filters -= filter(type="wave", x=0, y = 16, size = 0, offset = 0, flags = WAVE_SIDEWAYS) - - -// So cloaked things can see themselves, if necessary -/atom/movable/proc/get_cloaked_selfimage() - var/icon/selficon = icon(icon, icon_state) - selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White - var/image/selfimage = image(selficon) - selfimage.color = "#0000FF" - selfimage.alpha = 100 - selfimage.layer = initial(layer) - selfimage.plane = initial(plane) - selfimage.loc = src - - return selfimage - -/atom/movable/proc/get_cell() +/atom/movable + layer = OBJ_LAYER + appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE + glide_size = 8 + var/last_move = null //The direction the atom last moved + var/anchored = FALSE + // var/elevation = 2 - not used anywhere + var/moving_diagonally + var/move_speed = 10 + var/l_move_time = 1 + var/throwing = 0 + var/thrower + var/turf/throw_source = null + var/throw_speed = 2 + var/throw_range = 7 + var/moved_recently = 0 + var/mob/pulledby = null + var/item_state = null // Used to specify the item state for the on-mob overlays. + var/icon_scale_x = 1 // Used to scale icons up or down horizonally in update_transform(). + var/icon_scale_y = 1 // Used to scale icons up or down vertically in update_transform(). + var/icon_rotation = 0 // Used to rotate icons in update_transform() + var/icon_expected_height = 32 + var/icon_expected_width = 32 + var/old_x = 0 + var/old_y = 0 + var/datum/riding/riding_datum = null + var/does_spin = TRUE // Does the atom spin when thrown (of course it does :P) + var/movement_type = NONE + + var/cloaked = FALSE //If we're cloaked or not + var/image/cloaked_selfimage //The image we use for our client to let them see where we are + var/belly_cycles = 0 //CHOMPEdit: Counting current belly process cycles for autotransfer. + var/autotransferable = TRUE //CHOMPEdit: Toggle for autotransfer mechanics. + +/atom/movable/Initialize(mapload) + . = ..() + switch(blocks_emissive) + if(EMISSIVE_BLOCK_GENERIC) + var/mutable_appearance/gen_emissive_blocker = mutable_appearance(icon, icon_state, plane = PLANE_EMISSIVE, alpha = src.alpha) + gen_emissive_blocker.color = GLOB.em_block_color + gen_emissive_blocker.dir = dir + gen_emissive_blocker.appearance_flags |= appearance_flags + add_overlay(list(gen_emissive_blocker), TRUE) + if(EMISSIVE_BLOCK_UNIQUE) + render_target = ref(src) + em_block = new(src, render_target) + add_overlay(list(em_block), TRUE) + if(opacity) + AddElement(/datum/element/light_blocking) + switch(light_system) + if(STATIC_LIGHT) + update_light() + if(MOVABLE_LIGHT) + AddComponent(/datum/component/overlay_lighting, starts_on = light_on) + if(MOVABLE_LIGHT_DIRECTIONAL) + AddComponent(/datum/component/overlay_lighting, is_directional = TRUE, starts_on = light_on) + +/atom/movable/Destroy() + . = ..() + for(var/atom/movable/AM in contents) + qdel(AM) + + if(opacity) + RemoveElement(/datum/element/light_blocking) + + moveToNullspace() + + vis_contents.Cut() + for(var/atom/movable/A as anything in vis_locs) + A.vis_contents -= src + + if(pulledby) + pulledby.stop_pulling() + + if(orbiting) + stop_orbit() + QDEL_NULL(riding_datum) //VOREStation Add + +/atom/movable/vv_edit_var(var_name, var_value) + if(var_name in GLOB.VVpixelmovement) //Pixel movement is not yet implemented, changing this will break everything irreversibly. + return FALSE + return ..() + +//////////////////////////////////////// +/atom/movable/Move(atom/newloc, direct = 0, movetime) + // Didn't pass enough info + if(!loc || !newloc) + return FALSE + + if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, newloc, direct, movetime) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE) + return FALSE + + // Store this early before we might move, it's used several places + var/atom/oldloc = loc + + // If we're not moving to the same spot (why? does that even happen?) + if(loc != newloc) + if(!direct) + direct = get_dir(oldloc, newloc) + if (IS_CARDINAL(direct)) //Cardinal move + // Track our failure if any in this value + . = TRUE + + // Face the direction of movement + set_dir(direct) + + // Check to make sure we can leave + if(!loc.Exit(src, newloc)) + . = FALSE + + // Check to make sure we can enter, if we haven't already failed + if(. && !newloc.Enter(src, src.loc)) + . = FALSE + + // Check to make sure if we're multi-tile we can move, if we haven't already failed + if(. && !check_multi_tile_move_density_dir(direct, locs)) + . = FALSE + + // Definitely moving if you enter this, no failures so far + if(. && locs.len <= 1) // We're not a multi-tile object. + var/area/oldarea = get_area(oldloc) + var/area/newarea = get_area(newloc) + var/old_z = get_z(oldloc) + var/dest_z = get_z(newloc) + + // Do The Move + if(movetime) + glide_for(movetime) // First attempt, lets let the diag do it. + loc = newloc + . = TRUE + + // So objects can be informed of z-level changes + if (old_z != dest_z) + onTransitZ(old_z, dest_z) + + // We don't call parent so we are calling this for byond + oldloc.Exited(src, newloc) + if(oldarea != newarea) + oldarea.Exited(src, newloc) + + // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself + for(var/atom/movable/thing as anything in oldloc) + // We don't call parent so we are calling this for byond + thing.Uncrossed(src) + + // We don't call parent so we are calling this for byond + newloc.Entered(src, oldloc) + if(oldarea != newarea) + newarea.Entered(src, oldloc) + + // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself + for(var/atom/movable/thing as anything in loc) + // We don't call parent so we are calling this for byond + thing.Crossed(src, oldloc) + + // We're a multi-tile object (multiple locs) + else if(. && newloc) + . = doMove(newloc) + + //Diagonal move, split it into cardinal moves + else + moving_diagonally = FIRST_DIAG_STEP + var/first_step_dir + // The `&& moving_diagonally` checks are so that a forceMove taking + // place due to a Crossed, Bumped, etc. call will interrupt + // the second half of the diagonal movement, or the second attempt + // at a first half if step() fails because we hit something. + glide_for(movetime * SQRT_2) //CHOMPEDIT - proper diagonal movement + if (direct & NORTH) + if (direct & EAST) + if (step(src, NORTH) && moving_diagonally) + first_step_dir = NORTH + moving_diagonally = SECOND_DIAG_STEP + . = step(src, EAST) + else if (moving_diagonally && step(src, EAST)) + first_step_dir = EAST + moving_diagonally = SECOND_DIAG_STEP + . = step(src, NORTH) + else if (direct & WEST) + if (step(src, NORTH) && moving_diagonally) + first_step_dir = NORTH + moving_diagonally = SECOND_DIAG_STEP + . = step(src, WEST) + else if (moving_diagonally && step(src, WEST)) + first_step_dir = WEST + moving_diagonally = SECOND_DIAG_STEP + . = step(src, NORTH) + else if (direct & SOUTH) + if (direct & EAST) + if (step(src, SOUTH) && moving_diagonally) + first_step_dir = SOUTH + moving_diagonally = SECOND_DIAG_STEP + . = step(src, EAST) + else if (moving_diagonally && step(src, EAST)) + first_step_dir = EAST + moving_diagonally = SECOND_DIAG_STEP + . = step(src, SOUTH) + else if (direct & WEST) + if (step(src, SOUTH) && moving_diagonally) + first_step_dir = SOUTH + moving_diagonally = SECOND_DIAG_STEP + . = step(src, WEST) + else if (moving_diagonally && step(src, WEST)) + first_step_dir = WEST + moving_diagonally = SECOND_DIAG_STEP + . = step(src, SOUTH) + // If we failed, turn to face the direction of the first step at least + if(!. && moving_diagonally == SECOND_DIAG_STEP) + set_dir(first_step_dir) + // Done, regardless! + moving_diagonally = 0 + // We return because step above will call Move() and we don't want to do shenanigans back in here again + return + + else if(!loc || (loc == oldloc)) + last_move = 0 + return + + // If we moved, call Moved() on ourselves + if(.) + Moved(oldloc, direct, FALSE, movetime ? movetime : ( (TICKS2DS(WORLD_ICON_SIZE/glide_size)) * (moving_diagonally ? (ONE_OVER_SQRT_2) : 1) ) ) //CHOMPEDIT - proper diagonal movement + + // Update timers/cooldown stuff + move_speed = world.time - l_move_time + l_move_time = world.time + last_move = direct // The direction you last moved + // set_dir(direct) //Don't think this is necessary + +//Called after a successful Move(). By this point, we've already moved +/atom/movable/proc/Moved(atom/old_loc, direction, forced = FALSE, movetime) + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction, forced, movetime) + // Handle any buckled mobs on this movable + if(has_buckled_mobs()) + handle_buckled_mob_movement(old_loc, direction, movetime) + if(riding_datum) + riding_datum.handle_vehicle_layer() + riding_datum.handle_vehicle_offsets() + for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update. + light.source_atom.update_light() + + //SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction) CHOMPEdit - Why was this comsig here twice? + + return TRUE + +/atom/movable/set_dir(newdir) + . = ..(newdir) + if(riding_datum) + riding_datum.handle_vehicle_offsets() + +/atom/movable/relaymove(mob/user, direction) + . = ..() + if(riding_datum) + riding_datum.handle_ride(user, direction) + +// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly. +// You probably want CanPass() +/atom/movable/Cross(atom/movable/AM) + return CanPass(AM, loc) + +/atom/movable/CanPass(atom/movable/mover, turf/target) + . = ..() + if(locs && locs.len >= 2) // If something is standing on top of us, let them pass. + if(mover.loc in locs) + . = TRUE + return . + +/atom/movable/Bump(atom/A) + if(!A) + CRASH("Bump was called with no argument.") + . = ..() + if(throwing) + throw_impact(A) + throwing = 0 + if(QDELETED(A)) + return + + SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A) + + A.Bumped(src) + A.last_bumped = world.time + +/atom/movable/proc/forceMove(atom/destination, direction, movetime) + . = FALSE + if(destination) + . = doMove(destination, direction, movetime) + else + CRASH("No valid destination passed into forceMove") + +/atom/movable/proc/moveToNullspace() + return doMove(null) + +/atom/movable/proc/doMove(atom/destination, direction, movetime) + var/atom/oldloc = loc + var/area/old_area = get_area(oldloc) + var/same_loc = oldloc == destination + + if(destination) + var/area/destarea = get_area(destination) + + // Do The Move + glide_for(movetime) + last_move = isnull(direction) ? 0 : direction + loc = destination + + // Unset this in case it was set in some other proc. We're no longer moving diagonally for sure. + moving_diagonally = 0 + + // We are moving to a different loc + if(!same_loc) + // Not moving out of nullspace + if(oldloc) + oldloc.Exited(src, destination) + // If it's not the same area, Exited() it + if(old_area && old_area != destarea) + old_area.Exited(src, destination) + + // Uncross everything where we left + for(var/atom/movable/AM as anything in oldloc) + if(AM == src) + continue + AM.Uncrossed(src) + if(loc != destination) // Uncrossed() triggered a separate movement + return + + // Information about turf and z-levels for source and dest collected + var/turf/oldturf = get_turf(oldloc) + var/turf/destturf = get_turf(destination) + var/old_z = (oldturf ? oldturf.z : null) + var/dest_z = (destturf ? destturf.z : null) + + // So objects can be informed of z-level changes + if (old_z != dest_z) + onTransitZ(old_z, dest_z) + + // Destination atom Entered + destination.Entered(src, oldloc) + + // Entered() the new area if it's not the same area + if(destarea && old_area != destarea) + destarea.Entered(src, oldloc) + + // We ignore ourselves because if we're multi-tile we might be in both old and new locs + for(var/atom/movable/AM as anything in destination) + if(AM == src) + continue + AM.Crossed(src, oldloc) + if(loc != destination) // Crossed triggered a separate movement + return + + // Call our thingy to inform everyone we moved + Moved(oldloc, NONE, TRUE) + + // Break pulling if we are too far to pull now. + if(pulledby && (pulledby.z != src.z || get_dist(pulledby, src) > 1)) + pulledby.stop_pulling() + + // We moved + return TRUE + + //If no destination, move the atom into nullspace (don't do this unless you know what you're doing) + else if(oldloc) + loc = null + + // Uncross everything where we left (no multitile safety like above because we are definitely not still there) + for(var/atom/movable/AM as anything in oldloc) + AM.Uncrossed(src) + + // Exited() our loc and area + oldloc.Exited(src, null) + if(old_area) + old_area.Exited(src, null) + + // We moved + return TRUE + +/atom/movable/proc/onTransitZ(old_z,new_z) + GLOB.z_moved_event.raise_event(src, old_z, new_z) + SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z) + for(var/atom/movable/AM as anything in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. + AM.onTransitZ(old_z,new_z) + +/atom/movable/proc/glide_for(movetime) + if(movetime) + glide_size = WORLD_ICON_SIZE/max(DS2TICKS(movetime), 1) + spawn(movetime) + glide_size = initial(glide_size) + else + glide_size = initial(glide_size) + +///////////////////////////////////////////////////////////////// + +//called when src is thrown into hit_atom +/atom/movable/proc/throw_impact(atom/hit_atom, var/speed) + if(istype(hit_atom,/mob/living)) + var/mob/living/M = hit_atom + if(M.buckled == src) + return // Don't hit the thing we're buckled to. + M.hitby(src,speed) + + else if(isobj(hit_atom)) + var/obj/O = hit_atom + if(!O.anchored) + step(O, src.last_move) + O.hitby(src,speed) + + else if(isturf(hit_atom)) + src.throwing = 0 + var/turf/T = hit_atom + T.hitby(src,speed) + +//decided whether a movable atom being thrown can pass through the turf it is in. +/atom/movable/proc/hit_check(var/speed) + if(src.throwing) + for(var/atom/A in get_turf(src)) + if(A == src) continue + if(istype(A,/mob/living)) + if(A:lying) continue + src.throw_impact(A,speed) + if(isobj(A)) + if(!A.density || A.throwpass) + continue + // Special handling of windows, which are dense but block only from some directions + if(istype(A, /obj/structure/window)) + var/obj/structure/window/W = A + if (!W.is_fulltile() && !(turn(src.last_move, 180) & A.dir)) + continue + // Same thing for (closed) windoors, which have the same problem + else if(istype(A, /obj/machinery/door/window) && !(turn(src.last_move, 180) & A.dir)) + continue + src.throw_impact(A,speed) + +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called. + . = TRUE + if (!target || speed <= 0 || QDELETED(src) || (target.z != src.z)) + return FALSE + + if (pulledby) + pulledby.stop_pulling() + + var/datum/thrownthing/TT = new(src, target, range, speed, thrower, callback) + throwing = TT + + pixel_z = 0 + if(spin && does_spin) + SpinAnimation(4,1) + + SSthrowing.processing[src] = TT + if (SSthrowing.state == SS_PAUSED && length(SSthrowing.currentrun)) + SSthrowing.currentrun[src] = TT + +//Overlays +/atom/movable/overlay + var/atom/master = null + anchored = TRUE + +/atom/movable/overlay/New() + for(var/x in src.verbs) + src.verbs -= x + ..() + +/atom/movable/overlay/attackby(a, b) + if (src.master) + return src.master.attackby(a, b) + return + +/atom/movable/overlay/attack_hand(a, b, c) + if (src.master) + return src.master.attack_hand(a, b, c) + return + +/atom/movable/proc/touch_map_edge() + if(z in using_map.sealed_levels) + return + + if(using_map.use_overmap) + overmap_spacetravel(get_turf(src), src) + return + + var/move_to_z = src.get_transit_zlevel() + if(move_to_z) + var/new_z = move_to_z + var/new_x + var/new_y + + if(x <= TRANSITIONEDGE) + new_x = world.maxx - TRANSITIONEDGE - 2 + new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) + + else if (x >= (world.maxx - TRANSITIONEDGE + 1)) + new_x = TRANSITIONEDGE + 1 + new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) + + else if (y <= TRANSITIONEDGE) + new_y = world.maxy - TRANSITIONEDGE -2 + new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) + + else if (y >= (world.maxy - TRANSITIONEDGE + 1)) + new_y = TRANSITIONEDGE + 1 + new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) + + if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear + var/datum/game_mode/nuclear/G = ticker.mode + G.check_nuke_disks() + + var/turf/T = locate(new_x, new_y, new_z) + if(istype(T)) + forceMove(T) + +//by default, transition randomly to another zlevel +/atom/movable/proc/get_transit_zlevel() + var/list/candidates = using_map.accessible_z_levels.Copy() + candidates.Remove("[src.z]") + + if(!candidates.len) + return null + return text2num(pickweight(candidates)) + +// Returns the current scaling of the sprite. +// Note this DOES NOT measure the height or width of the icon, but returns what number is being multiplied with to scale the icons, if any. +/atom/movable/proc/get_icon_scale_x() + return icon_scale_x + +/atom/movable/proc/get_icon_scale_y() + return icon_scale_y + +/atom/movable/proc/update_transform() + var/matrix/M = matrix() + M.Scale(icon_scale_x, icon_scale_y) + M.Turn(icon_rotation) + src.transform = M + +// Use this to set the object's scale. +/atom/movable/proc/adjust_scale(new_scale_x, new_scale_y) + if(isnull(new_scale_y)) + new_scale_y = new_scale_x + if(new_scale_x != 0) + icon_scale_x = new_scale_x + if(new_scale_y != 0) + icon_scale_y = new_scale_y + update_transform() + +/atom/movable/proc/adjust_rotation(new_rotation) + icon_rotation = new_rotation + update_transform() + +// Called when touching a lava tile. +/atom/movable/proc/lava_act() + fire_act(null, 10000, 1000) + + +// Procs to cloak/uncloak +/atom/movable/proc/cloak() + if(cloaked) + return FALSE + cloaked = TRUE + . = TRUE // We did work + + var/static/animation_time = 1 SECOND + cloaked_selfimage = get_cloaked_selfimage() + + //Wheeee + cloak_animation(animation_time) + + //Needs to be last so people can actually see the effect before we become invisible + if(cloaked) // Ensure we are still cloaked after the animation delay + plane = CLOAKED_PLANE + +/atom/movable/proc/uncloak() + if(!cloaked) + return FALSE + cloaked = FALSE + . = TRUE // We did work + + var/static/animation_time = 1 SECOND + QDEL_NULL(cloaked_selfimage) + + //Needs to be first so people can actually see the effect, so become uninvisible first + plane = initial(plane) + + //Oooooo + uncloak_animation(animation_time) + + +// Animations for cloaking/uncloaking +/atom/movable/proc/cloak_animation(var/length = 1 SECOND) + //Save these + var/initial_alpha = alpha + + //Animate alpha fade + animate(src, alpha = 0, time = length) + + //Animate a cloaking effect + var/our_filter = filters.len+1 //Filters don't appear to have a type that can be stored in a var and accessed. This is how the DM reference does it. + filters += filter(type="wave", x = 0, y = 16, size = 0, offset = 0, flags = WAVE_SIDEWAYS) + animate(filters[our_filter], offset = 1, size = 8, time = length, flags = ANIMATION_PARALLEL) + + //Wait for animations to finish + sleep(length+5) + + //Remove those + filters -= filter(type="wave", x = 0, y = 16, size = 8, offset = 1, flags = WAVE_SIDEWAYS) + + //Back to original alpha + alpha = initial_alpha + +/atom/movable/proc/uncloak_animation(var/length = 1 SECOND) + //Save these + var/initial_alpha = alpha + + //Put us back to normal, but no alpha + alpha = 0 + + //Animate alpha fade up + animate(src, alpha = initial_alpha, time = length) + + //Animate a cloaking effect + var/our_filter = filters.len+1 //Filters don't appear to have a type that can be stored in a var and accessed. This is how the DM reference does it. + filters += filter(type="wave", x=0, y = 16, size = 8, offset = 1, flags = WAVE_SIDEWAYS) + animate(filters[our_filter], offset = 0, size = 0, time = length, flags = ANIMATION_PARALLEL) + + //Wait for animations to finish + sleep(length+5) + + //Remove those + filters -= filter(type="wave", x=0, y = 16, size = 0, offset = 0, flags = WAVE_SIDEWAYS) + + +// So cloaked things can see themselves, if necessary +/atom/movable/proc/get_cloaked_selfimage() + var/icon/selficon = icon(icon, icon_state) + selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White + var/image/selfimage = image(selficon) + selfimage.color = "#0000FF" + selfimage.alpha = 100 + selfimage.layer = initial(layer) + selfimage.plane = initial(plane) + selfimage.loc = src + + return selfimage + +/atom/movable/proc/get_cell() return \ No newline at end of file diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 0089355ed3..b9d4837184 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -1,163 +1,163 @@ -/datum/dna/gene/monkey - name="Monkey" - -/datum/dna/gene/monkey/New() - block=MONKEYBLOCK - -/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags) - return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey) - -/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags) - if(!istype(M,/mob/living/carbon/human)) - //testing("Cannot monkey-ify [M], type is [M.type].") - return - var/mob/living/carbon/human/H = M - H.transforming = 1 - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in H) - implants += W - W.loc = null - - if(!connected) - for(var/obj/item/W in (H.contents-implants)) - if (W==H.w_uniform) // will be teared - continue - H.drop_from_inventory(W) - M.transforming = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("h2monkey", animation) - sleep(48) - qdel(animation) - - - var/mob/living/carbon/monkey/O = null - if(H.species.primitive) - O = new H.species.primitive(src) - else - H.gib() //Trying to change the species of a creature with no primitive var set is messy. - return - - if(M) - if (M.dna) - O.dna = M.dna.Clone() - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - for(var/obj/T in (M.contents-implants)) - qdel(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the cute little monkey - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) - O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss() + 20) - O.adjustOxyLoss(M.getOxyLoss()) - O.set_stat(M.stat) - O.a_intent = I_HURT - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - qdel(M) - return - -/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) - if(!istype(M,/mob/living/carbon/monkey)) - //testing("Cannot humanize [M], type is [M.type].") - return - var/mob/living/carbon/monkey/Mo = M - Mo.transforming = 1 - var/list/implants = list() //Still preserving implants - for(var/obj/item/weapon/implant/W in Mo) - implants += W - W.loc = null - if(!connected) - for(var/obj/item/W in (Mo.contents-implants)) - Mo.drop_from_inventory(W) - M.transforming = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("monkey2h", animation) - sleep(48) - qdel(animation) - - var/mob/living/carbon/human/O - if(Mo.greaterform) - O = new(src, Mo.greaterform) - else - O = new(src) - - if (M.dna.GetUIState(DNA_UI_GENDER)) - O.gender = FEMALE - else - O.gender = MALE - - if (M) - if (M.dna) - O.dna = M.dna.Clone() - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - //for(var/obj/T in M) - // qdel(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the human - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - - var/i - while (!i) - var/randomname - if (O.gender == MALE) - randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) - else - randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) - if (findname(randomname)) - continue - else - O.real_name = randomname - O.dna.real_name = randomname - i++ - O.UpdateAppearance() - O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss()) - O.adjustOxyLoss(M.getOxyLoss()) - O.set_stat(M.stat) - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - qdel(M) - return +/datum/dna/gene/monkey + name="Monkey" + +/datum/dna/gene/monkey/New() + block=MONKEYBLOCK + +/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags) + return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey) + +/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/human)) + //testing("Cannot monkey-ify [M], type is [M.type].") + return + var/mob/living/carbon/human/H = M + H.transforming = 1 + var/list/implants = list() //Try to preserve implants. + for(var/obj/item/weapon/implant/W in H) + implants += W + W.loc = null + + if(!connected) + for(var/obj/item/W in (H.contents-implants)) + if (W==H.w_uniform) // will be teared + continue + H.drop_from_inventory(W) + M.transforming = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + qdel(animation) + + + var/mob/living/carbon/monkey/O = null + if(H.species.primitive) + O = new H.species.primitive(src) + else + H.gib() //Trying to change the species of a creature with no primitive var set is messy. + return + + if(M) + if (M.dna) + O.dna = M.dna.Clone() + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + for(var/obj/T in (M.contents-implants)) + qdel(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the cute little monkey + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) + O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss() + 20) + O.adjustOxyLoss(M.getOxyLoss()) + O.set_stat(M.stat) + O.a_intent = I_HURT + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + qdel(M) + return + +/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/monkey)) + //testing("Cannot humanize [M], type is [M.type].") + return + var/mob/living/carbon/monkey/Mo = M + Mo.transforming = 1 + var/list/implants = list() //Still preserving implants + for(var/obj/item/weapon/implant/W in Mo) + implants += W + W.loc = null + if(!connected) + for(var/obj/item/W in (Mo.contents-implants)) + Mo.drop_from_inventory(W) + M.transforming = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("monkey2h", animation) + sleep(48) + qdel(animation) + + var/mob/living/carbon/human/O + if(Mo.greaterform) + O = new(src, Mo.greaterform) + else + O = new(src) + + if (M.dna.GetUIState(DNA_UI_GENDER)) + O.gender = FEMALE + else + O.gender = MALE + + if (M) + if (M.dna) + O.dna = M.dna.Clone() + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + //for(var/obj/T in M) + // qdel(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the human + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + + var/i + while (!i) + var/randomname + if (O.gender == MALE) + randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) + else + randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) + if (findname(randomname)) + continue + else + O.real_name = randomname + O.dna.real_name = randomname + i++ + O.UpdateAppearance() + O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss()) + O.adjustOxyLoss(M.getOxyLoss()) + O.set_stat(M.stat) + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + qdel(M) + return diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 13b8db962d..ceb4234f2d 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,19 +1,19 @@ -/datum/game_mode/changeling - name = "Changeling" - round_description = "There are alien changelings on the station. Do not let the changelings succeed!" - extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \ - Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \ - something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, \ - however, is that this something is someone. An unknown alien specimen has incorporated itself into \ - the crew of the station. Its unique biology allows it to manipulate its own or anyone else's DNA. \ - With the ability to copy faces, voices, animals, but also change the chemical make up of your own body, \ - its existence is a threat to not only your personal safety but the lives of everyone on board. \ - No one knows where it came from. No one knows who it is or what it wants. One thing is for \ - certain though... there is never just one of them. Good luck." - config_tag = "changeling" - required_players = 2 - required_players_secret = 3 - required_enemies = 1 - end_on_antag_death = 0 - antag_scaling_coeff = 10 - antag_tags = list(MODE_CHANGELING) +/datum/game_mode/changeling + name = "Changeling" + round_description = "There are alien changelings on the station. Do not let the changelings succeed!" + extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \ + Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \ + something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, \ + however, is that this something is someone. An unknown alien specimen has incorporated itself into \ + the crew of the station. Its unique biology allows it to manipulate its own or anyone else's DNA. \ + With the ability to copy faces, voices, animals, but also change the chemical make up of your own body, \ + its existence is a threat to not only your personal safety but the lives of everyone on board. \ + No one knows where it came from. No one knows who it is or what it wants. One thing is for \ + certain though... there is never just one of them. Good luck." + config_tag = "changeling" + required_players = 2 + required_players_secret = 3 + required_enemies = 1 + end_on_antag_death = 0 + antag_scaling_coeff = 10 + antag_tags = list(MODE_CHANGELING) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 431b4e06f3..4c92e7c95a 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -1,244 +1,244 @@ -var/global/list/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") - -/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) - var/list/datum/absorbed_dna/absorbed_dna = list() - var/list/absorbed_languages = list() // Necessary because of set_species stuff - var/absorbedcount = 0 - var/lingabsorbedcount = 1 //Starts at one, because that's us - var/chem_charges = 20 - var/chem_recharge_rate = 0.5 - var/chem_storage = 50 - var/sting_range = 1 - var/changelingID = "Changeling" - var/geneticdamage = 0 - var/isabsorbing = 0 - var/geneticpoints = 7 - var/max_geneticpoints = 7 - var/readapts = 1 - var/max_readapts = 2 - var/list/purchased_powers = list() - var/mimicing = "" - var/cloaked = 0 - var/armor_deployed = 0 //This is only used for changeling_generic_equip_all_slots() at the moment. - var/recursive_enhancement = 0 //Used to power up other abilities from the ling power with the same name. - var/list/purchased_powers_history = list() //Used for round-end report, includes respec uses too. - var/last_shriek = null // world.time when the ling last used a shriek. - var/next_escape = 0 // world.time when the ling can next use Escape Restraints - var/thermal_sight = FALSE // Is our Vision Augmented? With thermals? - -/datum/changeling/New(var/gender=FEMALE) - ..() - if(possible_changeling_IDs.len) - changelingID = pick(possible_changeling_IDs) - possible_changeling_IDs -= changelingID - changelingID = "[changelingID]" - else - changelingID = "[rand(1,999)]" - -/datum/changeling/proc/regenerate() - chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) - geneticdamage = max(0, geneticdamage-1) - -/datum/changeling/proc/GetDNA(var/dna_owner) - for(var/datum/absorbed_dna/DNA in absorbed_dna) - if(dna_owner == DNA.name) - return DNA - -/mob/proc/absorbDNA(var/datum/absorbed_dna/newDNA) - var/datum/changeling/changeling = null - if(src.mind && src.mind.changeling) - changeling = src.mind.changeling - if(!changeling) - return - - for(var/language in newDNA.languages) - changeling.absorbed_languages |= language - - changeling_update_languages(changeling.absorbed_languages) - - if(!changeling.GetDNA(newDNA.name)) // Don't duplicate - I wonder if it's possible for it to still be a different DNA? DNA code could use a rewrite - changeling.absorbed_dna += newDNA - -//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human -/mob/proc/make_changeling() - - if(!mind) return - if(!mind.changeling) mind.changeling = new /datum/changeling(gender) - - verbs.Add(/datum/changeling/proc/EvolutionMenu) - verbs.Add(/mob/proc/changeling_respec) - add_language("Changeling") - - var/lesser_form = !ishuman(src) - - if(!powerinstances.len) - for(var/P in powers) - powerinstances += new P() - - // Code to auto-purchase free powers. - for(var/datum/power/changeling/P in powerinstances) - if(!P.genomecost) // Is it free? - if(!(P in mind.changeling.purchased_powers)) // Do we not have it already? - mind.changeling.purchasePower(mind, P.name, 0)// Purchase it. Don't remake our verbs, we're doing it after this. - - for(var/datum/power/changeling/P in mind.changeling.purchased_powers) - if(P.isVerb) - if(lesser_form && !P.allowduringlesserform) continue - if(!(P in src.verbs)) - verbs.Add(P.verbpath) - if(P.make_hud_button) - if(!src.ability_master) - src.ability_master = new /obj/screen/movable/ability_master(src) - src.ability_master.add_ling_ability( - object_given = src, - verb_given = P.verbpath, - name_given = P.name, - ability_icon_given = P.ability_icon_state, - arguments = list() - ) - - for(var/language in languages) - mind.changeling.absorbed_languages |= language - - var/mob/living/carbon/human/H = src - if(istype(H)) - var/saved_dna = H.dna.Clone() /// Prevent transform from breaking. - var/datum/absorbed_dna/newDNA = new(H.real_name, saved_dna, H.species.name, H.languages, H.identifying_gender, H.flavor_texts, H.modifiers) - absorbDNA(newDNA) - - return 1 - -//removes our changeling verbs -/mob/proc/remove_changeling_powers() - if(!mind || !mind.changeling) return - for(var/datum/power/changeling/P in mind.changeling.purchased_powers) - if(P.isVerb) - verbs.Remove(P.verbpath) - var/obj/screen/ability/verb_based/changeling/C = ability_master.get_ability_by_proc_ref(P.verbpath) - if(C) - ability_master.remove_ability(C) - - -//Helper proc. Does all the checks and stuff for us to avoid copypasta -/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) - - if(!src.mind) return - if(!iscarbon(src)) return - - var/datum/changeling/changeling = src.mind.changeling - if(!changeling) - to_world_log("[src] has the changeling_transform() verb but is not a changeling.") - return - - if(src.stat > max_stat) - to_chat(src, "We are incapacitated.") - return - - if(changeling.absorbed_dna.len < required_dna) - to_chat(src, "We require at least [required_dna] samples of compatible DNA.") - return - - if(changeling.chem_charges < required_chems) - to_chat(src, "We require at least [required_chems] units of chemicals to do that!") - return - - if(changeling.geneticdamage > max_genetic_damage) - to_chat(src, "Our genomes are still reassembling. We need time to recover first.") - return - - return changeling - -//Used to dump the languages from the changeling datum into the actual mob. -/mob/proc/changeling_update_languages(var/updated_languages) - languages = list() - for(var/language in updated_languages) - languages += language - - //This isn't strictly necessary but just to be safe... - add_language("Changeling") - - ////////// - //STINGS// //They get a pretty header because there's just so fucking many of them ;_; - ////////// - -/turf/proc/AdjacentTurfsRangedSting() - //Yes this is snowflakey, but I couldn't get it to work any other way.. -Luke - var/list/allowed = list( - /obj/structure/table, - /obj/structure/closet, - /obj/structure/frame, - /obj/structure/target_stake, - /obj/structure/cable, - /obj/structure/disposalpipe, - /obj/machinery, - /mob - ) - - var/L[] = new() - for(var/turf/simulated/t in oview(src,1)) - var/add = 1 - if(t.density) - add = 0 - if(add && LinkBlocked(src,t)) - add = 0 - if(add && TurfBlockedNonWindow(t)) - add = 0 - for(var/obj/O in t) - if(O.density) - add = 0 - break - if(istype(O, /obj/machinery/door)) - //not sure why this doesn't fire on LinkBlocked() - add = 0 - break - for(var/type in allowed) - if (istype(O, type)) - add = 1 - break - if(!add) - break - if(add) - L.Add(t) - return L - - -/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1) - if(M.loc == src.loc) - return 1 //target and source are in the same thing - if(!isturf(src.loc) || !isturf(M.loc)) - to_chat(src, "We cannot reach \the [M] with a sting!") - return 0 //One is inside, the other is outside something. - // Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising - if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfsRangedSting, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail - to_chat(src, "We cannot find a path to sting \the [M] by!") - return 0 - return 1 - -//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities) -/mob/proc/changeling_sting(var/required_chems=0, var/verb_path) - var/datum/changeling/changeling = changeling_power(required_chems) - if(!changeling) return - - var/list/victims = list() - for(var/mob/living/carbon/C in oview(changeling.sting_range)) - victims += C - var/mob/living/carbon/T = tgui_input_list(src, "Who will we sting?", "Sting!", victims) - - if(!T) - return - if(T.isSynthetic()) - to_chat(src, "We are unable to pierce the outer shell of [T].") - return - if(!(T in view(changeling.sting_range))) return - if(!sting_can_reach(T, changeling.sting_range)) return - if(!changeling_power(required_chems)) return - - changeling.chem_charges -= required_chems - changeling.sting_range = 1 - src.verbs -= verb_path - spawn(10) src.verbs += verb_path - - to_chat(src, "We stealthily sting [T].") - if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting - to_chat(T, "You feel a tiny prick.") - return +var/global/list/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") + +/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) + var/list/datum/absorbed_dna/absorbed_dna = list() + var/list/absorbed_languages = list() // Necessary because of set_species stuff + var/absorbedcount = 0 + var/lingabsorbedcount = 1 //Starts at one, because that's us + var/chem_charges = 20 + var/chem_recharge_rate = 0.5 + var/chem_storage = 50 + var/sting_range = 1 + var/changelingID = "Changeling" + var/geneticdamage = 0 + var/isabsorbing = 0 + var/geneticpoints = 7 + var/max_geneticpoints = 7 + var/readapts = 1 + var/max_readapts = 2 + var/list/purchased_powers = list() + var/mimicing = "" + var/cloaked = 0 + var/armor_deployed = 0 //This is only used for changeling_generic_equip_all_slots() at the moment. + var/recursive_enhancement = 0 //Used to power up other abilities from the ling power with the same name. + var/list/purchased_powers_history = list() //Used for round-end report, includes respec uses too. + var/last_shriek = null // world.time when the ling last used a shriek. + var/next_escape = 0 // world.time when the ling can next use Escape Restraints + var/thermal_sight = FALSE // Is our Vision Augmented? With thermals? + +/datum/changeling/New(var/gender=FEMALE) + ..() + if(possible_changeling_IDs.len) + changelingID = pick(possible_changeling_IDs) + possible_changeling_IDs -= changelingID + changelingID = "[changelingID]" + else + changelingID = "[rand(1,999)]" + +/datum/changeling/proc/regenerate() + chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) + geneticdamage = max(0, geneticdamage-1) + +/datum/changeling/proc/GetDNA(var/dna_owner) + for(var/datum/absorbed_dna/DNA in absorbed_dna) + if(dna_owner == DNA.name) + return DNA + +/mob/proc/absorbDNA(var/datum/absorbed_dna/newDNA) + var/datum/changeling/changeling = null + if(src.mind && src.mind.changeling) + changeling = src.mind.changeling + if(!changeling) + return + + for(var/language in newDNA.languages) + changeling.absorbed_languages |= language + + changeling_update_languages(changeling.absorbed_languages) + + if(!changeling.GetDNA(newDNA.name)) // Don't duplicate - I wonder if it's possible for it to still be a different DNA? DNA code could use a rewrite + changeling.absorbed_dna += newDNA + +//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human +/mob/proc/make_changeling() + + if(!mind) return + if(!mind.changeling) mind.changeling = new /datum/changeling(gender) + + verbs.Add(/datum/changeling/proc/EvolutionMenu) + verbs.Add(/mob/proc/changeling_respec) + add_language("Changeling") + + var/lesser_form = !ishuman(src) + + if(!powerinstances.len) + for(var/P in powers) + powerinstances += new P() + + // Code to auto-purchase free powers. + for(var/datum/power/changeling/P in powerinstances) + if(!P.genomecost) // Is it free? + if(!(P in mind.changeling.purchased_powers)) // Do we not have it already? + mind.changeling.purchasePower(mind, P.name, 0)// Purchase it. Don't remake our verbs, we're doing it after this. + + for(var/datum/power/changeling/P in mind.changeling.purchased_powers) + if(P.isVerb) + if(lesser_form && !P.allowduringlesserform) continue + if(!(P in src.verbs)) + verbs.Add(P.verbpath) + if(P.make_hud_button) + if(!src.ability_master) + src.ability_master = new /obj/screen/movable/ability_master(src) + src.ability_master.add_ling_ability( + object_given = src, + verb_given = P.verbpath, + name_given = P.name, + ability_icon_given = P.ability_icon_state, + arguments = list() + ) + + for(var/language in languages) + mind.changeling.absorbed_languages |= language + + var/mob/living/carbon/human/H = src + if(istype(H)) + var/saved_dna = H.dna.Clone() /// Prevent transform from breaking. + var/datum/absorbed_dna/newDNA = new(H.real_name, saved_dna, H.species.name, H.languages, H.identifying_gender, H.flavor_texts, H.modifiers) + absorbDNA(newDNA) + + return 1 + +//removes our changeling verbs +/mob/proc/remove_changeling_powers() + if(!mind || !mind.changeling) return + for(var/datum/power/changeling/P in mind.changeling.purchased_powers) + if(P.isVerb) + verbs.Remove(P.verbpath) + var/obj/screen/ability/verb_based/changeling/C = ability_master.get_ability_by_proc_ref(P.verbpath) + if(C) + ability_master.remove_ability(C) + + +//Helper proc. Does all the checks and stuff for us to avoid copypasta +/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) + + if(!src.mind) return + if(!iscarbon(src)) return + + var/datum/changeling/changeling = src.mind.changeling + if(!changeling) + to_world_log("[src] has the changeling_transform() verb but is not a changeling.") + return + + if(src.stat > max_stat) + to_chat(src, "We are incapacitated.") + return + + if(changeling.absorbed_dna.len < required_dna) + to_chat(src, "We require at least [required_dna] samples of compatible DNA.") + return + + if(changeling.chem_charges < required_chems) + to_chat(src, "We require at least [required_chems] units of chemicals to do that!") + return + + if(changeling.geneticdamage > max_genetic_damage) + to_chat(src, "Our genomes are still reassembling. We need time to recover first.") + return + + return changeling + +//Used to dump the languages from the changeling datum into the actual mob. +/mob/proc/changeling_update_languages(var/updated_languages) + languages = list() + for(var/language in updated_languages) + languages += language + + //This isn't strictly necessary but just to be safe... + add_language("Changeling") + + ////////// + //STINGS// //They get a pretty header because there's just so fucking many of them ;_; + ////////// + +/turf/proc/AdjacentTurfsRangedSting() + //Yes this is snowflakey, but I couldn't get it to work any other way.. -Luke + var/list/allowed = list( + /obj/structure/table, + /obj/structure/closet, + /obj/structure/frame, + /obj/structure/target_stake, + /obj/structure/cable, + /obj/structure/disposalpipe, + /obj/machinery, + /mob + ) + + var/L[] = new() + for(var/turf/simulated/t in oview(src,1)) + var/add = 1 + if(t.density) + add = 0 + if(add && LinkBlocked(src,t)) + add = 0 + if(add && TurfBlockedNonWindow(t)) + add = 0 + for(var/obj/O in t) + if(O.density) + add = 0 + break + if(istype(O, /obj/machinery/door)) + //not sure why this doesn't fire on LinkBlocked() + add = 0 + break + for(var/type in allowed) + if (istype(O, type)) + add = 1 + break + if(!add) + break + if(add) + L.Add(t) + return L + + +/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1) + if(M.loc == src.loc) + return 1 //target and source are in the same thing + if(!isturf(src.loc) || !isturf(M.loc)) + to_chat(src, "We cannot reach \the [M] with a sting!") + return 0 //One is inside, the other is outside something. + // Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising + if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfsRangedSting, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail + to_chat(src, "We cannot find a path to sting \the [M] by!") + return 0 + return 1 + +//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities) +/mob/proc/changeling_sting(var/required_chems=0, var/verb_path) + var/datum/changeling/changeling = changeling_power(required_chems) + if(!changeling) return + + var/list/victims = list() + for(var/mob/living/carbon/C in oview(changeling.sting_range)) + victims += C + var/mob/living/carbon/T = tgui_input_list(src, "Who will we sting?", "Sting!", victims) + + if(!T) + return + if(T.isSynthetic()) + to_chat(src, "We are unable to pierce the outer shell of [T].") + return + if(!(T in view(changeling.sting_range))) return + if(!sting_can_reach(T, changeling.sting_range)) return + if(!changeling_power(required_chems)) return + + changeling.chem_charges -= required_chems + changeling.sting_range = 1 + src.verbs -= verb_path + spawn(10) src.verbs += verb_path + + to_chat(src, "We stealthily sting [T].") + if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting + to_chat(T, "You feel a tiny prick.") + return diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index df162f74ca..454a2efbdd 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -1,10 +1,10 @@ -/datum/game_mode/cult - name = "Cult" - round_description = "Some crewmembers are attempting to start a cult!" - extended_round_description = "The station has been infiltrated by a fanatical group of death-cultists! They will use powers from beyond your comprehension to subvert you to their cause and ultimately please their gods through sacrificial summons and physical immolation! Try to survive!" - config_tag = "cult" - required_players = 5 - required_players_secret = 5 - required_enemies = 3 - end_on_antag_death = 0 - antag_tags = list(MODE_CULTIST) +/datum/game_mode/cult + name = "Cult" + round_description = "Some crewmembers are attempting to start a cult!" + extended_round_description = "The station has been infiltrated by a fanatical group of death-cultists! They will use powers from beyond your comprehension to subvert you to their cause and ultimately please their gods through sacrificial summons and physical immolation! Try to survive!" + config_tag = "cult" + required_players = 5 + required_players_secret = 5 + required_enemies = 3 + end_on_antag_death = 0 + antag_tags = list(MODE_CULTIST) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 3622998eef..e54bb88eef 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -1,125 +1,125 @@ -/obj/item/weapon/melee/cultblade - name = "cult blade" - desc = "An arcane weapon wielded by the followers of Nar-Sie." - icon_state = "cultblade" - origin_tech = list(TECH_COMBAT = 1, TECH_ARCANE = 1) - w_class = ITEMSIZE_LARGE - force = 30 - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - edge = TRUE - sharp = TRUE - -/obj/item/weapon/melee/cultblade/cultify() - return - -/obj/item/weapon/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone) - if(iscultist(user) && !istype(user, /mob/living/simple_mob/construct)) - return ..() - - var/zone = (user.hand ? "l_arm":"r_arm") - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/affecting = H.get_organ(zone) - to_chat(user, "An inexplicable force rips through your [affecting.name], tearing the sword from your grasp!") - //random amount of damage between half of the blade's force and the full force of the blade. - user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp = TRUE, edge = TRUE) - user.Weaken(5) - else if(!istype(user, /mob/living/simple_mob/construct)) - to_chat(user, "An inexplicable force rips through you, tearing the sword from your grasp!") - else - to_chat(user, "The blade hisses, forcing itself from your manipulators. \The [src] will only allow mortals to wield it against foes, not kin.") - - user.drop_from_inventory(src, src.loc) - throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), throw_speed) - - var/spooky = pick('sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg', 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/wail.ogg') - playsound(src, spooky, 50, 1) - - return 1 - -/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) - if(!iscultist(user) && !istype(user, /mob/living/simple_mob/construct)) - to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.") - user.make_dizzy(120) - if(istype(user, /mob/living/simple_mob/construct)) - to_chat(user, "\The [src] hisses, as it is discontent with your acquisition of it. It would be wise to return it to a worthy mortal quickly.") - -/obj/item/clothing/head/culthood - name = "cult hood" - icon_state = "culthood" - desc = "A hood worn by the followers of Nar-Sie." - origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) - flags_inv = HIDEFACE - body_parts_covered = HEAD - armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 10, rad = 0) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0 - -/obj/item/clothing/head/culthood/cultify() - return - -/obj/item/clothing/head/culthood/magus - name = "magus helm" - icon_state = "magus" - desc = "A helm worn by the followers of Nar-Sie." - flags_inv = HIDEFACE | BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/culthood/alt - icon_state = "cult_hoodalt" - -/obj/item/clothing/suit/cultrobes - name = "cult robes" - desc = "A set of armored robes worn by the followers of Nar-Sie." - icon_state = "cultrobes" - origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade) - armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 10, rad = 0) - flags_inv = HIDEJUMPSUIT - siemens_coefficient = 0 - -/obj/item/clothing/suit/cultrobes/cultify() - return - -/obj/item/clothing/suit/cultrobes/alt - icon_state = "cultrobesalt" - -/obj/item/clothing/suit/cultrobes/magusred - name = "magus robes" - desc = "A set of armored robes worn by the followers of Nar-Sie." - icon_state = "magusred" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/head/helmet/space/cult - name = "cult helmet" - desc = "A space worthy helmet used by the followers of Nar-Sie." - icon_state = "cult_helmet" - origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) - armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 - -/obj/item/clothing/head/helmet/space/cult/cultify() - return - -/obj/item/clothing/suit/space/cult - name = "cult armour" - icon_state = "cult_armour" - origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) - desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy." - w_class = ITEMSIZE_NORMAL - allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit) - slowdown = 0.5 - armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS - -/obj/item/clothing/suit/space/cult/cultify() - return +/obj/item/weapon/melee/cultblade + name = "cult blade" + desc = "An arcane weapon wielded by the followers of Nar-Sie." + icon_state = "cultblade" + origin_tech = list(TECH_COMBAT = 1, TECH_ARCANE = 1) + w_class = ITEMSIZE_LARGE + force = 30 + throwforce = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + edge = TRUE + sharp = TRUE + +/obj/item/weapon/melee/cultblade/cultify() + return + +/obj/item/weapon/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone) + if(iscultist(user) && !istype(user, /mob/living/simple_mob/construct)) + return ..() + + var/zone = (user.hand ? "l_arm":"r_arm") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/affecting = H.get_organ(zone) + to_chat(user, "An inexplicable force rips through your [affecting.name], tearing the sword from your grasp!") + //random amount of damage between half of the blade's force and the full force of the blade. + user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp = TRUE, edge = TRUE) + user.Weaken(5) + else if(!istype(user, /mob/living/simple_mob/construct)) + to_chat(user, "An inexplicable force rips through you, tearing the sword from your grasp!") + else + to_chat(user, "The blade hisses, forcing itself from your manipulators. \The [src] will only allow mortals to wield it against foes, not kin.") + + user.drop_from_inventory(src, src.loc) + throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), throw_speed) + + var/spooky = pick('sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg', 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/wail.ogg') + playsound(src, spooky, 50, 1) + + return 1 + +/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) + if(!iscultist(user) && !istype(user, /mob/living/simple_mob/construct)) + to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.") + user.make_dizzy(120) + if(istype(user, /mob/living/simple_mob/construct)) + to_chat(user, "\The [src] hisses, as it is discontent with your acquisition of it. It would be wise to return it to a worthy mortal quickly.") + +/obj/item/clothing/head/culthood + name = "cult hood" + icon_state = "culthood" + desc = "A hood worn by the followers of Nar-Sie." + origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) + flags_inv = HIDEFACE + body_parts_covered = HEAD + armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 10, rad = 0) + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0 + +/obj/item/clothing/head/culthood/cultify() + return + +/obj/item/clothing/head/culthood/magus + name = "magus helm" + icon_state = "magus" + desc = "A helm worn by the followers of Nar-Sie." + flags_inv = HIDEFACE | BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/culthood/alt + icon_state = "cult_hoodalt" + +/obj/item/clothing/suit/cultrobes + name = "cult robes" + desc = "A set of armored robes worn by the followers of Nar-Sie." + icon_state = "cultrobes" + origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade) + armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 10, rad = 0) + flags_inv = HIDEJUMPSUIT + siemens_coefficient = 0 + +/obj/item/clothing/suit/cultrobes/cultify() + return + +/obj/item/clothing/suit/cultrobes/alt + icon_state = "cultrobesalt" + +/obj/item/clothing/suit/cultrobes/magusred + name = "magus robes" + desc = "A set of armored robes worn by the followers of Nar-Sie." + icon_state = "magusred" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + +/obj/item/clothing/head/helmet/space/cult + name = "cult helmet" + desc = "A space worthy helmet used by the followers of Nar-Sie." + icon_state = "cult_helmet" + origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) + armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 30, rad = 30) + siemens_coefficient = 0 + +/obj/item/clothing/head/helmet/space/cult/cultify() + return + +/obj/item/clothing/suit/space/cult + name = "cult armour" + icon_state = "cult_armour" + origin_tech = list(TECH_MATERIAL = 3, TECH_ARCANE = 1) + desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy." + w_class = ITEMSIZE_NORMAL + allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit) + slowdown = 0.5 + armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 30, rad = 30) + siemens_coefficient = 0 + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + +/obj/item/clothing/suit/space/cult/cultify() + return diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index c0d7cfd7a4..9a9540784e 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -1,173 +1,173 @@ -/obj/structure/cult - density = TRUE - anchored = TRUE - icon = 'icons/obj/cult.dmi' - -/obj/structure/cult/cultify() - return - -/obj/structure/cult/talisman - name = "Altar" - desc = "A bloodstained altar dedicated to Nar-Sie." - icon_state = "talismanaltar" - - -/obj/structure/cult/forge - name = "Daemon forge" - desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie." - icon_state = "forge" - -/obj/structure/cult/pylon - name = "Pylon" - desc = "A floating crystal that hums with an unearthly energy." - icon_state = "pylon" - var/isbroken = 0 - light_range = 5 - light_color = "#3e0000" - var/obj/item/wepon = null - - var/shatter_message = "The pylon shatters!" - var/impact_sound = 'sound/effects/Glasshit.ogg' - var/shatter_sound = 'sound/effects/Glassbr3.ogg' - - var/activation_cooldown = 30 SECONDS - var/last_activation = 0 - -/obj/structure/cult/pylon/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/cult/pylon/attack_hand(mob/M as mob) - attackpylon(M, 5) - -/obj/structure/cult/pylon/attack_generic(var/mob/user, var/damage) - attackpylon(user, damage) - -/obj/structure/cult/pylon/attackby(obj/item/W as obj, mob/user as mob) - attackpylon(user, W.force) - -/obj/structure/cult/pylon/take_damage(var/damage) - pylonhit(damage) - -/obj/structure/cult/pylon/bullet_act(var/obj/item/projectile/Proj) - pylonhit(Proj.get_structure_damage()) - -/obj/structure/cult/pylon/proc/pylonhit(var/damage) - if(!isbroken) - if(prob(1+ damage * 5)) - visible_message("[shatter_message]") - STOP_PROCESSING(SSobj, src) - playsound(src,shatter_sound, 75, 1) - isbroken = 1 - density = FALSE - icon_state = "[initial(icon_state)]-broken" - set_light(0) - -/obj/structure/cult/pylon/proc/attackpylon(mob/user as mob, var/damage) - if(!isbroken) - if(prob(1+ damage * 5)) - user.visible_message( - "[user] smashed \the [src]!", - "You hit \the [src], and its crystal breaks apart!", - "You hear a tinkle of crystal shards." - ) - STOP_PROCESSING(SSobj, src) - user.do_attack_animation(src) - playsound(src,shatter_sound, 75, 1) - isbroken = 1 - density = FALSE - icon_state = "[initial(icon_state)]-broken" - set_light(0) - else - to_chat(user, "You hit \the [src]!") - playsound(src,impact_sound, 75, 1) - else - if(prob(damage * 2)) - to_chat(user, "You pulverize what was left of \the [src]!") - qdel(src) - else - to_chat(user, "You hit \the [src]!") - playsound(src,impact_sound, 75, 1) - -/obj/structure/cult/pylon/proc/repair(mob/user as mob) - if(isbroken) - START_PROCESSING(SSobj, src) - to_chat(user, "You repair \the [src].") - isbroken = 0 - density = TRUE - icon_state = initial(icon_state) - set_light(5) - -// Returns 1 if the pylon does something special. -/obj/structure/cult/pylon/proc/pylon_unique() - last_activation = world.time - return 0 - -/obj/structure/cult/pylon/process() - if(!isbroken && (last_activation < world.time + activation_cooldown) && pylon_unique()) - flick("[initial(icon_state)]-surge",src) - -/obj/structure/cult/tome - name = "Desk" - desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl." - icon_state = "tomealtar" - -//sprites for this no longer exist -Pete -//(they were stolen from another game anyway) -/* -/obj/structure/cult/pillar - name = "Pillar" - desc = "This should not exist" - icon_state = "pillar" - icon = 'magic_pillar.dmi' -*/ - -/obj/effect/gateway - name = "gateway" - desc = "You're pretty sure that abyss is staring back." - icon = 'icons/obj/cult.dmi' - icon_state = "hole" - density = TRUE - unacidable = TRUE - anchored = TRUE - var/spawnable = null - -/obj/effect/gateway/active - light_range=5 - light_color="#ff0000" - spawnable=list( - /mob/living/simple_mob/animal/space/bats, - /mob/living/simple_mob/creature, - /mob/living/simple_mob/faithless - ) - -/obj/effect/gateway/active/cult - light_range=5 - light_color="#ff0000" - spawnable=list( - /mob/living/simple_mob/animal/space/bats/cult, - /mob/living/simple_mob/creature/cult, - /mob/living/simple_mob/faithless/cult - ) - -/obj/effect/gateway/active/cult/cultify() - return - -/obj/effect/gateway/active/Initialize() - addtimer(CALLBACK(src, PROC_REF(spawn_and_qdel)), rand(30, 60) SECONDS) - -/obj/effect/gateway/active/proc/spawn_and_qdel() - if(LAZYLEN(spawnable)) - var/t = pick(spawnable) - new t(get_turf(src)) - qdel(src) - -/obj/effect/gateway/active/Crossed(var/atom/A) - if(A.is_incorporeal()) - return - if(!istype(A, /mob/living)) - return - - var/mob/living/M = A - - to_chat(M, "Walking into \the [src] is probably a bad idea, you think.") +/obj/structure/cult + density = TRUE + anchored = TRUE + icon = 'icons/obj/cult.dmi' + +/obj/structure/cult/cultify() + return + +/obj/structure/cult/talisman + name = "Altar" + desc = "A bloodstained altar dedicated to Nar-Sie." + icon_state = "talismanaltar" + + +/obj/structure/cult/forge + name = "Daemon forge" + desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie." + icon_state = "forge" + +/obj/structure/cult/pylon + name = "Pylon" + desc = "A floating crystal that hums with an unearthly energy." + icon_state = "pylon" + var/isbroken = 0 + light_range = 5 + light_color = "#3e0000" + var/obj/item/wepon = null + + var/shatter_message = "The pylon shatters!" + var/impact_sound = 'sound/effects/Glasshit.ogg' + var/shatter_sound = 'sound/effects/Glassbr3.ogg' + + var/activation_cooldown = 30 SECONDS + var/last_activation = 0 + +/obj/structure/cult/pylon/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/structure/cult/pylon/attack_hand(mob/M as mob) + attackpylon(M, 5) + +/obj/structure/cult/pylon/attack_generic(var/mob/user, var/damage) + attackpylon(user, damage) + +/obj/structure/cult/pylon/attackby(obj/item/W as obj, mob/user as mob) + attackpylon(user, W.force) + +/obj/structure/cult/pylon/take_damage(var/damage) + pylonhit(damage) + +/obj/structure/cult/pylon/bullet_act(var/obj/item/projectile/Proj) + pylonhit(Proj.get_structure_damage()) + +/obj/structure/cult/pylon/proc/pylonhit(var/damage) + if(!isbroken) + if(prob(1+ damage * 5)) + visible_message("[shatter_message]") + STOP_PROCESSING(SSobj, src) + playsound(src,shatter_sound, 75, 1) + isbroken = 1 + density = FALSE + icon_state = "[initial(icon_state)]-broken" + set_light(0) + +/obj/structure/cult/pylon/proc/attackpylon(mob/user as mob, var/damage) + if(!isbroken) + if(prob(1+ damage * 5)) + user.visible_message( + "[user] smashed \the [src]!", + "You hit \the [src], and its crystal breaks apart!", + "You hear a tinkle of crystal shards." + ) + STOP_PROCESSING(SSobj, src) + user.do_attack_animation(src) + playsound(src,shatter_sound, 75, 1) + isbroken = 1 + density = FALSE + icon_state = "[initial(icon_state)]-broken" + set_light(0) + else + to_chat(user, "You hit \the [src]!") + playsound(src,impact_sound, 75, 1) + else + if(prob(damage * 2)) + to_chat(user, "You pulverize what was left of \the [src]!") + qdel(src) + else + to_chat(user, "You hit \the [src]!") + playsound(src,impact_sound, 75, 1) + +/obj/structure/cult/pylon/proc/repair(mob/user as mob) + if(isbroken) + START_PROCESSING(SSobj, src) + to_chat(user, "You repair \the [src].") + isbroken = 0 + density = TRUE + icon_state = initial(icon_state) + set_light(5) + +// Returns 1 if the pylon does something special. +/obj/structure/cult/pylon/proc/pylon_unique() + last_activation = world.time + return 0 + +/obj/structure/cult/pylon/process() + if(!isbroken && (last_activation < world.time + activation_cooldown) && pylon_unique()) + flick("[initial(icon_state)]-surge",src) + +/obj/structure/cult/tome + name = "Desk" + desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl." + icon_state = "tomealtar" + +//sprites for this no longer exist -Pete +//(they were stolen from another game anyway) +/* +/obj/structure/cult/pillar + name = "Pillar" + desc = "This should not exist" + icon_state = "pillar" + icon = 'magic_pillar.dmi' +*/ + +/obj/effect/gateway + name = "gateway" + desc = "You're pretty sure that abyss is staring back." + icon = 'icons/obj/cult.dmi' + icon_state = "hole" + density = TRUE + unacidable = TRUE + anchored = TRUE + var/spawnable = null + +/obj/effect/gateway/active + light_range=5 + light_color="#ff0000" + spawnable=list( + /mob/living/simple_mob/animal/space/bats, + /mob/living/simple_mob/creature, + /mob/living/simple_mob/faithless + ) + +/obj/effect/gateway/active/cult + light_range=5 + light_color="#ff0000" + spawnable=list( + /mob/living/simple_mob/animal/space/bats/cult, + /mob/living/simple_mob/creature/cult, + /mob/living/simple_mob/faithless/cult + ) + +/obj/effect/gateway/active/cult/cultify() + return + +/obj/effect/gateway/active/Initialize() + addtimer(CALLBACK(src, PROC_REF(spawn_and_qdel)), rand(30, 60) SECONDS) + +/obj/effect/gateway/active/proc/spawn_and_qdel() + if(LAZYLEN(spawnable)) + var/t = pick(spawnable) + new t(get_turf(src)) + qdel(src) + +/obj/effect/gateway/active/Crossed(var/atom/A) + if(A.is_incorporeal()) + return + if(!istype(A, /mob/living)) + return + + var/mob/living/M = A + + to_chat(M, "Walking into \the [src] is probably a bad idea, you think.") diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index 9c63b8857e..9c5eb4458f 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -1,63 +1,63 @@ -/mob - //thou shall always be able to see the Geometer of Blood - var/image/narsimage = null - var/image/narglow = null - -/mob/proc/cultify() - return - -/mob/observer/dead/cultify() - if(icon_state != "ghost-narsie") - icon = 'icons/mob/mob.dmi' - icon_state = "ghost-narsie" - overlays = 0 - invisibility = 0 - to_chat(src, "Even as a non-corporal being, you can feel Nar-Sie's presence altering you. You are now visible to everyone.") - -/mob/living/cultify() - if(iscultist(src) && client) - var/mob/living/simple_mob/construct/harvester/C = new(get_turf(src)) - mind.transfer_to(C) - to_chat(C, "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
    Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
    You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell.
    ") - dust() - else if(client) - var/mob/observer/dead/G = (ghostize()) - G.icon = 'icons/mob/mob.dmi' - G.icon_state = "ghost-narsie" - G.overlays = 0 - G.invisibility = 0 - to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.") - - cult.harvested += G.mind - else - dust() - -/mob/proc/see_narsie(var/obj/singularity/narsie/large/N, var/dir) - if(N.chained) - if(narsimage) - qdel(narsimage) - qdel(narglow) - return - if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src))) - if(!narsimage) //Create narsimage - narsimage = image('icons/obj/narsie.dmi',src.loc,"narsie",9,1) - narsimage.mouse_opacity = 0 - if(!narglow) //Create narglow - narglow = image('icons/obj/narsie.dmi',narsimage.loc,"glow-narsie",12,1) - narglow.mouse_opacity = 0 - //Else if no dir is given, simply send them the image of narsie - var/new_x = 32 * (N.x - src.x) + N.pixel_x - var/new_y = 32 * (N.y - src.y) + N.pixel_y - narsimage.pixel_x = new_x - narsimage.pixel_y = new_y - narglow.pixel_x = new_x - narglow.pixel_y = new_y - narsimage.loc = src.loc - narglow.loc = src.loc - //Display the new narsimage to the player - src << narsimage - src << narglow - else - if(narsimage) - qdel(narsimage) - qdel(narglow) +/mob + //thou shall always be able to see the Geometer of Blood + var/image/narsimage = null + var/image/narglow = null + +/mob/proc/cultify() + return + +/mob/observer/dead/cultify() + if(icon_state != "ghost-narsie") + icon = 'icons/mob/mob.dmi' + icon_state = "ghost-narsie" + overlays = 0 + invisibility = 0 + to_chat(src, "Even as a non-corporal being, you can feel Nar-Sie's presence altering you. You are now visible to everyone.") + +/mob/living/cultify() + if(iscultist(src) && client) + var/mob/living/simple_mob/construct/harvester/C = new(get_turf(src)) + mind.transfer_to(C) + to_chat(C, "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
    Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
    You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell.
    ") + dust() + else if(client) + var/mob/observer/dead/G = (ghostize()) + G.icon = 'icons/mob/mob.dmi' + G.icon_state = "ghost-narsie" + G.overlays = 0 + G.invisibility = 0 + to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.") + + cult.harvested += G.mind + else + dust() + +/mob/proc/see_narsie(var/obj/singularity/narsie/large/N, var/dir) + if(N.chained) + if(narsimage) + qdel(narsimage) + qdel(narglow) + return + if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src))) + if(!narsimage) //Create narsimage + narsimage = image('icons/obj/narsie.dmi',src.loc,"narsie",9,1) + narsimage.mouse_opacity = 0 + if(!narglow) //Create narglow + narglow = image('icons/obj/narsie.dmi',narsimage.loc,"glow-narsie",12,1) + narglow.mouse_opacity = 0 + //Else if no dir is given, simply send them the image of narsie + var/new_x = 32 * (N.x - src.x) + N.pixel_x + var/new_y = 32 * (N.y - src.y) + N.pixel_y + narsimage.pixel_x = new_x + narsimage.pixel_y = new_y + narglow.pixel_x = new_x + narglow.pixel_y = new_y + narsimage.loc = src.loc + narglow.loc = src.loc + //Display the new narsimage to the player + src << narsimage + src << narglow + else + if(narsimage) + qdel(narsimage) + qdel(narglow) diff --git a/code/game/gamemodes/cult/cultify/obj.dm b/code/game/gamemodes/cult/cultify/obj.dm index 91dabc556f..e00dbc6aad 100644 --- a/code/game/gamemodes/cult/cultify/obj.dm +++ b/code/game/gamemodes/cult/cultify/obj.dm @@ -1,139 +1,139 @@ -/obj/proc/cultify() - qdel(src) - -/obj/effect/decal/cleanable/blood/cultify() - return - -/obj/effect/decal/remains/cultify() - return - -/obj/effect/overlay/cultify() - return - -/obj/item/device/flashlight/lamp/cultify() - new /obj/structure/cult/pylon(loc) - ..() - -/obj/item/stack/material/wood/cultify() - return - -/obj/item/weapon/book/cultify() - new /obj/item/weapon/book/tome(loc) - ..() - -/obj/item/weapon/material/sword/cultify() - new /obj/item/weapon/melee/cultblade(loc) - ..() - -/obj/item/weapon/storage/backpack/cultify() - new /obj/item/weapon/storage/backpack/cultpack(loc) - ..() - -/obj/item/weapon/storage/backpack/cultpack/cultify() - return - -/obj/machinery/cultify() - // We keep the number of cultified machines down by only converting those that are dense - // The alternative is to keep a separate file of exceptions. - if(density) - var/list/random_structure = list( - /obj/structure/cult/talisman, - /obj/structure/cult/forge, - /obj/structure/cult/tome - ) - var/I = pick(random_structure) - new I(loc) - ..() - -/obj/machinery/atmospherics/cultify() - if(src.invisibility != INVISIBILITY_MAXIMUM) - src.invisibility = INVISIBILITY_MAXIMUM - density = FALSE - -/obj/machinery/appliance/cooker/cultify() - new /obj/structure/cult/talisman(loc) - qdel(src) - -/obj/machinery/computer/cultify() - new /obj/structure/cult/tome(loc) - qdel(src) - -/obj/machinery/door/airlock/external/cultify() - new /obj/structure/simple_door/wood(loc) - ..() - -/obj/machinery/door/cultify() - if(invisibility != INVISIBILITY_MAXIMUM) - invisibility = INVISIBILITY_MAXIMUM - density = FALSE - anim(target = src, a_icon = 'icons/effects/effects.dmi', a_icon_state = "breakdoor", sleeptime = 10) - qdel(src) - -/obj/machinery/door/firedoor/cultify() - qdel(src) - -/obj/machinery/light/cultify() - new /obj/structure/cult/pylon(loc) - qdel(src) - -/obj/machinery/mech_sensor/cultify() - qdel(src) - -/obj/machinery/power/apc/cultify() - if(src.invisibility != INVISIBILITY_MAXIMUM) - src.invisibility = INVISIBILITY_MAXIMUM - -/obj/machinery/vending/cultify() - new /obj/structure/cult/forge(loc) - qdel(src) - -/obj/structure/bed/chair/cultify() - var/obj/structure/bed/chair/wood/wings/I = new(loc) - I.dir = dir - ..() - -/obj/structure/bed/chair/wood/cultify() - return - -/obj/structure/bookcase/cultify() - return - -/obj/structure/grille/cultify() - new /obj/structure/grille/cult(get_turf(src)) - ..() - -/obj/structure/grille/cult/cultify() - return - -/obj/structure/simple_door/cultify() - new /obj/structure/simple_door/wood(loc) - ..() - -/obj/structure/simple_door/wood/cultify() - return - -/obj/singularity/cultify() - var/dist = max((current_size - 2), 1) - explosion(get_turf(src), dist, dist * 2, dist * 4) - qdel(src) - -/obj/structure/shuttle/engine/heater/cultify() - new /obj/structure/cult/pylon(loc) - ..() - -/obj/structure/shuttle/engine/propulsion/cultify() - var/turf/T = get_turf(src) - if(T) - T.ChangeTurf(/turf/simulated/wall/cult) - ..() - -/obj/structure/table/cultify() - // Make it a wood-reinforced wooden table. - // There are cult materials available, but it'd make the table non-deconstructable with how holotables work. - // Could possibly use a new material var for holographic-ness? - material = get_material_by_name("wood") - reinforced = get_material_by_name("wood") - update_desc() - update_connections(1) - update_icon() - update_material() +/obj/proc/cultify() + qdel(src) + +/obj/effect/decal/cleanable/blood/cultify() + return + +/obj/effect/decal/remains/cultify() + return + +/obj/effect/overlay/cultify() + return + +/obj/item/device/flashlight/lamp/cultify() + new /obj/structure/cult/pylon(loc) + ..() + +/obj/item/stack/material/wood/cultify() + return + +/obj/item/weapon/book/cultify() + new /obj/item/weapon/book/tome(loc) + ..() + +/obj/item/weapon/material/sword/cultify() + new /obj/item/weapon/melee/cultblade(loc) + ..() + +/obj/item/weapon/storage/backpack/cultify() + new /obj/item/weapon/storage/backpack/cultpack(loc) + ..() + +/obj/item/weapon/storage/backpack/cultpack/cultify() + return + +/obj/machinery/cultify() + // We keep the number of cultified machines down by only converting those that are dense + // The alternative is to keep a separate file of exceptions. + if(density) + var/list/random_structure = list( + /obj/structure/cult/talisman, + /obj/structure/cult/forge, + /obj/structure/cult/tome + ) + var/I = pick(random_structure) + new I(loc) + ..() + +/obj/machinery/atmospherics/cultify() + if(src.invisibility != INVISIBILITY_MAXIMUM) + src.invisibility = INVISIBILITY_MAXIMUM + density = FALSE + +/obj/machinery/appliance/cooker/cultify() + new /obj/structure/cult/talisman(loc) + qdel(src) + +/obj/machinery/computer/cultify() + new /obj/structure/cult/tome(loc) + qdel(src) + +/obj/machinery/door/airlock/external/cultify() + new /obj/structure/simple_door/wood(loc) + ..() + +/obj/machinery/door/cultify() + if(invisibility != INVISIBILITY_MAXIMUM) + invisibility = INVISIBILITY_MAXIMUM + density = FALSE + anim(target = src, a_icon = 'icons/effects/effects.dmi', a_icon_state = "breakdoor", sleeptime = 10) + qdel(src) + +/obj/machinery/door/firedoor/cultify() + qdel(src) + +/obj/machinery/light/cultify() + new /obj/structure/cult/pylon(loc) + qdel(src) + +/obj/machinery/mech_sensor/cultify() + qdel(src) + +/obj/machinery/power/apc/cultify() + if(src.invisibility != INVISIBILITY_MAXIMUM) + src.invisibility = INVISIBILITY_MAXIMUM + +/obj/machinery/vending/cultify() + new /obj/structure/cult/forge(loc) + qdel(src) + +/obj/structure/bed/chair/cultify() + var/obj/structure/bed/chair/wood/wings/I = new(loc) + I.dir = dir + ..() + +/obj/structure/bed/chair/wood/cultify() + return + +/obj/structure/bookcase/cultify() + return + +/obj/structure/grille/cultify() + new /obj/structure/grille/cult(get_turf(src)) + ..() + +/obj/structure/grille/cult/cultify() + return + +/obj/structure/simple_door/cultify() + new /obj/structure/simple_door/wood(loc) + ..() + +/obj/structure/simple_door/wood/cultify() + return + +/obj/singularity/cultify() + var/dist = max((current_size - 2), 1) + explosion(get_turf(src), dist, dist * 2, dist * 4) + qdel(src) + +/obj/structure/shuttle/engine/heater/cultify() + new /obj/structure/cult/pylon(loc) + ..() + +/obj/structure/shuttle/engine/propulsion/cultify() + var/turf/T = get_turf(src) + if(T) + T.ChangeTurf(/turf/simulated/wall/cult) + ..() + +/obj/structure/table/cultify() + // Make it a wood-reinforced wooden table. + // There are cult materials available, but it'd make the table non-deconstructable with how holotables work. + // Could possibly use a new material var for holographic-ness? + material = get_material_by_name("wood") + reinforced = get_material_by_name("wood") + update_desc() + update_connections(1) + update_icon() + update_material() diff --git a/code/game/gamemodes/cult/cultify/turf.dm b/code/game/gamemodes/cult/cultify/turf.dm index 4506f49fcc..8cfd85886a 100644 --- a/code/game/gamemodes/cult/cultify/turf.dm +++ b/code/game/gamemodes/cult/cultify/turf.dm @@ -1,42 +1,42 @@ -/turf/proc/cultify() - ChangeTurf(/turf/space) - return - -/turf/simulated/floor/cultify() - //todo: flooring datum cultify check - cultify_floor() - -/turf/simulated/shuttle/floor/cultify() - cultify_floor() - -/turf/simulated/shuttle/floor4/cultify() - cultify_floor() - -/turf/simulated/shuttle/wall/cultify() - cultify_wall() - -/turf/simulated/wall/cultify() - cultify_wall() - -/turf/simulated/wall/cult/cultify() - return - -/turf/unsimulated/wall/cult/cultify() - return - -/turf/unsimulated/beach/cultify() - return - -/turf/unsimulated/floor/cultify() - cultify_floor() - -/turf/unsimulated/wall/cultify() - cultify_wall() - -/turf/proc/cultify_floor() - if((icon_state != "cult")&&(icon_state != "cult-narsie")) - name = "engraved floor" - icon_state = "cult" - -/turf/proc/cultify_wall() - ChangeTurf(/turf/unsimulated/wall/cult) +/turf/proc/cultify() + ChangeTurf(/turf/space) + return + +/turf/simulated/floor/cultify() + //todo: flooring datum cultify check + cultify_floor() + +/turf/simulated/shuttle/floor/cultify() + cultify_floor() + +/turf/simulated/shuttle/floor4/cultify() + cultify_floor() + +/turf/simulated/shuttle/wall/cultify() + cultify_wall() + +/turf/simulated/wall/cultify() + cultify_wall() + +/turf/simulated/wall/cult/cultify() + return + +/turf/unsimulated/wall/cult/cultify() + return + +/turf/unsimulated/beach/cultify() + return + +/turf/unsimulated/floor/cultify() + cultify_floor() + +/turf/unsimulated/wall/cultify() + cultify_wall() + +/turf/proc/cultify_floor() + if((icon_state != "cult")&&(icon_state != "cult-narsie")) + name = "engraved floor" + icon_state = "cult" + +/turf/proc/cultify_wall() + ChangeTurf(/turf/unsimulated/wall/cult) diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm index 0cf1e2d0fd..d558a8bfbb 100644 --- a/code/game/gamemodes/cult/hell_universe.dm +++ b/code/game/gamemodes/cult/hell_universe.dm @@ -1,84 +1,84 @@ -/* - -In short: - * Random gateways spawning hellmonsters - * Broken Fire Alarms - * Random tiles changing to culty tiles. - -*/ -/datum/universal_state/hell - name = "Hell Rising" - desc = "OH FUCK OH FUCK OH FUCK" - - decay_rate = 5 // 5% chance of a turf decaying on lighting update/airflow (there's no actual tick for turfs) - -/datum/universal_state/hell/OnShuttleCall(var/mob/user) - return 1 - /* - if(user) - to_chat(user, "All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.") - return 0 - */ - -/datum/universal_state/hell/DecayTurf(var/turf/T) - if(!T.holy) - T.cultify() - for(var/obj/machinery/light/L in T.contents) - new /obj/structure/cult/pylon(L.loc) - qdel(L) - return - - -/datum/universal_state/hell/OnTurfChange(var/turf/T) - var/turf/space/S = T - if(istype(S)) - S.color = "#FF0000" - else - S.color = initial(S.color) - -// Apply changes when entering state -/datum/universal_state/hell/OnEnter() - set background = 1 -// garbage_collector.garbage_collect = 0 - - escape_list = get_area_turfs(locate(/area/hallway/secondary/exit)) - - //Separated into separate procs for profiling - AreaSet() - MiscSet() - APCSet() - OverlayAndAmbientSet() - lightsout(0,0) - - runedec += 9000 //basically removing the rune cap - - -/datum/universal_state/hell/proc/AreaSet() - for(var/area/A in world) - if(!istype(A,/area) || istype(A, /area/space)) - continue - - A.update_icon() - -/datum/universal_state/hell/OverlayAndAmbientSet() - spawn(0) - for(var/datum/lighting_corner/L in world) - L.update_lumcount(1, 0, 0) - - for(var/turf/space/T in world) - OnTurfChange(T) - -/datum/universal_state/hell/proc/MiscSet() - for(var/turf/simulated/floor/T in world) - if(!T.holy && prob(1)) - new /obj/effect/gateway/active/cult(T) - - for (var/obj/machinery/firealarm/alm in machines) - if (!(alm.stat & BROKEN)) - alm.ex_act(2) - -/datum/universal_state/hell/proc/APCSet() - for (var/obj/machinery/power/apc/APC in GLOB.apcs) - if (!(APC.stat & BROKEN) && !APC.is_critical) - APC.emagged = 1 - APC.queue_icon_update() +/* + +In short: + * Random gateways spawning hellmonsters + * Broken Fire Alarms + * Random tiles changing to culty tiles. + +*/ +/datum/universal_state/hell + name = "Hell Rising" + desc = "OH FUCK OH FUCK OH FUCK" + + decay_rate = 5 // 5% chance of a turf decaying on lighting update/airflow (there's no actual tick for turfs) + +/datum/universal_state/hell/OnShuttleCall(var/mob/user) + return 1 + /* + if(user) + to_chat(user, "All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.") + return 0 + */ + +/datum/universal_state/hell/DecayTurf(var/turf/T) + if(!T.holy) + T.cultify() + for(var/obj/machinery/light/L in T.contents) + new /obj/structure/cult/pylon(L.loc) + qdel(L) + return + + +/datum/universal_state/hell/OnTurfChange(var/turf/T) + var/turf/space/S = T + if(istype(S)) + S.color = "#FF0000" + else + S.color = initial(S.color) + +// Apply changes when entering state +/datum/universal_state/hell/OnEnter() + set background = 1 +// garbage_collector.garbage_collect = 0 + + escape_list = get_area_turfs(locate(/area/hallway/secondary/exit)) + + //Separated into separate procs for profiling + AreaSet() + MiscSet() + APCSet() + OverlayAndAmbientSet() + lightsout(0,0) + + runedec += 9000 //basically removing the rune cap + + +/datum/universal_state/hell/proc/AreaSet() + for(var/area/A in world) + if(!istype(A,/area) || istype(A, /area/space)) + continue + + A.update_icon() + +/datum/universal_state/hell/OverlayAndAmbientSet() + spawn(0) + for(var/datum/lighting_corner/L in world) + L.update_lumcount(1, 0, 0) + + for(var/turf/space/T in world) + OnTurfChange(T) + +/datum/universal_state/hell/proc/MiscSet() + for(var/turf/simulated/floor/T in world) + if(!T.holy && prob(1)) + new /obj/effect/gateway/active/cult(T) + + for (var/obj/machinery/firealarm/alm in machines) + if (!(alm.stat & BROKEN)) + alm.ex_act(2) + +/datum/universal_state/hell/proc/APCSet() + for (var/obj/machinery/power/apc/APC in GLOB.apcs) + if (!(APC.stat & BROKEN) && !APC.is_critical) + APC.emagged = 1 + APC.queue_icon_update() diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index dba87f5546..a7a953a278 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -1,367 +1,367 @@ -var/global/narsie_behaviour = "CultStation13" -var/global/narsie_cometh = 0 -var/global/list/narsie_list = list() -/obj/singularity/narsie //Moving narsie to its own file for the sake of being clearer - name = "Nar-Sie" - desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." - icon = 'icons/obj/narsie.dmi' - icon_state = "narsie-small" - pixel_x = -236 - pixel_y = -256 - - 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? - grav_pull = 10 //How many tiles out do we pull? - consume_range = 3 //How many tiles out do we eat - - -/obj/singularity/narsie/New() - ..() - narsie_list.Add(src) - -/obj/singularity/narsie/Destroy() - narsie_list.Remove(src) - ..() - -/obj/singularity/narsie/large - name = "Nar-Sie" - icon = 'icons/obj/narsie.dmi' - icon_state = "narsie"//mobs perceive the geometer of blood through their see_narsie proc - - // Pixel stuff centers Narsie. - pixel_x = -236 - pixel_y = -256 - light_range = 1 - light_color = "#3e0000" - - current_size = 12 - consume_range = 12 // How many tiles out do we eat. - var/announce=1 - var/cause_hell = 1 - -/obj/singularity/narsie/large/New() - ..() - if(announce) - to_world("[uppertext(name)] HAS RISEN") - world << sound('sound/effects/weather/old_wind/wind_5_1.ogg') - - narsie_spawn_animation() - - if(!narsie_cometh)//so we don't initiate Hell more than one time. - if(cause_hell) - SetUniversalState(/datum/universal_state/hell) - narsie_cometh = 1 - - spawn(10 SECONDS) - if(emergency_shuttle) - emergency_shuttle.call_evac() - emergency_shuttle.launch_time = 0 // Cannot recall - -/obj/singularity/narsie/process() - eat() - - if (!target || prob(5)) - pickcultist() - - move() - - if (prob(25)) - mezzer() - -/obj/singularity/narsie/large/eat() - for (var/turf/A in orange(consume_range, src)) - consume(A) - -/obj/singularity/narsie/mezzer() - for(var/mob/living/carbon/M in oviewers(8, src)) - if(M.stat == CONSCIOUS) - if(M.status_flags & GODMODE) - continue - if(!iscultist(M)) - to_chat(M, " You feel your sanity crumble away in an instant as you gaze upon [src.name]...") - M.apply_effect(3, STUN) - - -/obj/singularity/narsie/large/Bump(atom/A) - if(!cause_hell) return - if(isturf(A)) - narsiewall(A) - else if(istype(A, /obj/structure/cult)) - qdel(A) - -/obj/singularity/narsie/large/Bumped(atom/A) - if(!cause_hell) return - if(isturf(A)) - narsiewall(A) - else if(istype(A, /obj/structure/cult)) - qdel(A) - -/obj/singularity/narsie/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) - - spawn(0) - step(src, movement_dir) - spawn(1) - step(src, movement_dir) - return 1 - -/obj/singularity/narsie/large/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) - spawn(0) - step(src, movement_dir) - narsiefloor(get_turf(loc)) - for(var/mob/M in player_list) - if(M.client) - M.see_narsie(src,movement_dir) - spawn(10) - step(src, movement_dir) - narsiefloor(get_turf(loc)) - for(var/mob/M in player_list) - if(M.client) - M.see_narsie(src,movement_dir) - return 1 - -/obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints" - if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space))) - if(T.icon_state != "cult-narsie") - T.desc = "something that goes beyond your understanding went this way." - T.icon = 'icons/turf/flooring/cult.dmi' - T.icon_state = "cult-narsie" - T.set_light(1) - -/obj/singularity/narsie/proc/narsiewall(var/turf/T) - T.desc = "An opening has been made on that wall, but who can say if what you seek truly lies on the other side?" - T.icon = 'icons/turf/walls.dmi' - T.icon_state = "cult-narsie" - T.opacity = 0 - T.density = FALSE - set_light(1) - -/obj/singularity/narsie/large/consume(const/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO -//NEW BEHAVIOUR - if(narsie_behaviour == "CultStation13") - //MOB PROCESSING - new_narsie(A) - -//OLD BEHAVIOUR - else if(narsie_behaviour == "Nar-Singulo") - old_narsie(A) - -/obj/singularity/narsie/proc/new_narsie(const/atom/A) - if (istype(A, /mob/) && (get_dist(A, src) <= 7)) - var/mob/M = A - - if(M.status_flags & GODMODE) - return 0 - - M.cultify() - -//ITEM PROCESSING - else if (istype(A, /obj/)) - var/obj/O = A - O.cultify() - -//TURF PROCESSING - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM in A.contents) - if (dist <= consume_range) - consume(AM) - continue - - if (dist <= consume_range && !istype(A, /turf/space)) - var/turf/T = A - if(T.holy) - T.holy = 0 //Nar-Sie doesn't give a shit about sacred grounds. - T.cultify() - -/obj/singularity/narsie/proc/old_narsie(const/atom/A) - if(!(A.singuloCanEat())) - return 0 - - if (istype(A, /mob/living/)) - var/mob/living/C2 = A - - if(C2.status_flags & GODMODE) - return 0 - - C2.dust() // Changed from gib(), just for less lag. - - else if (istype(A, /obj/)) - qdel(A) - - if (A) - qdel(A) - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM2 in A.contents) - if (AM2 == src) // This is the snowflake. - continue - - if (dist <= consume_range) - consume(AM2) - continue - - if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) - var/turf/T2 = A - T2.ChangeTurf(get_base_turf_by_area(A)) - -/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones. - if(!(A.singuloCanEat())) - return 0 - - if (istype(A, /mob/living/)) - var/mob/living/C2 = A - - if(C2.status_flags & GODMODE) - return 0 - - C2.dust() // Changed from gib(), just for less lag. - - else if (istype(A, /obj/)) - qdel(A) - - if (A) - qdel(A) - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM2 in A.contents) - if (AM2 == src) // This is the snowflake. - continue - - if (dist <= consume_range) - consume(AM2) - continue - - if (dist > consume_range) - if(!(AM2.singuloCanEat())) - continue - - if (101 == AM2.invisibility) - continue - - spawn (0) - AM2.singularity_pull(src, src.current_size) - - if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) - var/turf/T2 = A - T2.ChangeTurf(get_base_turf_by_area(A)) - -/obj/singularity/narsie/ex_act(severity) //No throwing bombs at it either. --NEO - return - -/obj/singularity/narsie/proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO - var/list/cultists = list() - for(var/datum/mind/cult_nh_mind in cult.current_antagonists) - if(!cult_nh_mind.current) - continue - if(cult_nh_mind.current.stat) - continue - var/turf/pos = get_turf(cult_nh_mind.current) - if(pos.z != src.z) - continue - cultists += cult_nh_mind.current - if(cultists.len) - acquire(pick(cultists)) - return - //If there was living cultists, it picks one to follow. - for(var/mob/living/carbon/human/food in living_mob_list) - if(food.stat) - continue - var/turf/pos = get_turf(food) - if(pos.z != src.z) - continue - cultists += food - if(cultists.len) - acquire(pick(cultists)) - return - //no living cultists, pick a living human instead. - for(var/mob/observer/dead/ghost in player_list) - if(!ghost.client) - continue - var/turf/pos = get_turf(ghost) - if(pos.z != src.z) - continue - cultists += ghost - if(cultists.len) - acquire(pick(cultists)) - return - //no living humans, follow a ghost instead. - -/obj/singularity/narsie/proc/acquire(const/mob/food) - var/capname = uppertext(name) - - to_chat(target, "[capname] HAS LOST INTEREST IN YOU.") - target = food - - if (ishuman(target)) - to_chat(target, "[capname] HUNGERS FOR YOUR SOUL.") - else - to_chat(target, "[capname] HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL.") - -/obj/singularity/narsie/on_capture() - chained = 1 - move_self = 0 - icon_state ="narsie-small-chains" - -/obj/singularity/narsie/on_release() - chained = 0 - move_self = 1 - icon_state ="narsie-small" - -/obj/singularity/narsie/large/on_capture() - chained = 1 - move_self = 0 - icon_state ="narsie-chains" - for(var/mob/M in mob_list)//removing the client image of nar-sie while it is chained - if(M.client) - M.see_narsie(src) - -/obj/singularity/narsie/large/on_release() - chained = 0 - move_self = 1 - icon_state ="narsie" - -/obj/singularity/narsie/cultify() - return - -/** - * Wizard narsie. - */ -/obj/singularity/narsie/wizard - grav_pull = 0 - -/obj/singularity/narsie/wizard/eat() - for (var/turf/T in trange(consume_range, src)) - consume(T) - -/obj/singularity/narsie/proc/narsie_spawn_animation() - icon = 'icons/obj/narsie_spawn_anim.dmi' - dir = SOUTH - move_self = 0 - flick("narsie_spawn_anim",src) - sleep(11) - move_self = 1 - icon = initial(icon) +var/global/narsie_behaviour = "CultStation13" +var/global/narsie_cometh = 0 +var/global/list/narsie_list = list() +/obj/singularity/narsie //Moving narsie to its own file for the sake of being clearer + name = "Nar-Sie" + desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." + icon = 'icons/obj/narsie.dmi' + icon_state = "narsie-small" + pixel_x = -236 + pixel_y = -256 + + 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? + grav_pull = 10 //How many tiles out do we pull? + consume_range = 3 //How many tiles out do we eat + + +/obj/singularity/narsie/New() + ..() + narsie_list.Add(src) + +/obj/singularity/narsie/Destroy() + narsie_list.Remove(src) + ..() + +/obj/singularity/narsie/large + name = "Nar-Sie" + icon = 'icons/obj/narsie.dmi' + icon_state = "narsie"//mobs perceive the geometer of blood through their see_narsie proc + + // Pixel stuff centers Narsie. + pixel_x = -236 + pixel_y = -256 + light_range = 1 + light_color = "#3e0000" + + current_size = 12 + consume_range = 12 // How many tiles out do we eat. + var/announce=1 + var/cause_hell = 1 + +/obj/singularity/narsie/large/New() + ..() + if(announce) + to_world("[uppertext(name)] HAS RISEN") + world << sound('sound/effects/weather/old_wind/wind_5_1.ogg') + + narsie_spawn_animation() + + if(!narsie_cometh)//so we don't initiate Hell more than one time. + if(cause_hell) + SetUniversalState(/datum/universal_state/hell) + narsie_cometh = 1 + + spawn(10 SECONDS) + if(emergency_shuttle) + emergency_shuttle.call_evac() + emergency_shuttle.launch_time = 0 // Cannot recall + +/obj/singularity/narsie/process() + eat() + + if (!target || prob(5)) + pickcultist() + + move() + + if (prob(25)) + mezzer() + +/obj/singularity/narsie/large/eat() + for (var/turf/A in orange(consume_range, src)) + consume(A) + +/obj/singularity/narsie/mezzer() + for(var/mob/living/carbon/M in oviewers(8, src)) + if(M.stat == CONSCIOUS) + if(M.status_flags & GODMODE) + continue + if(!iscultist(M)) + to_chat(M, " You feel your sanity crumble away in an instant as you gaze upon [src.name]...") + M.apply_effect(3, STUN) + + +/obj/singularity/narsie/large/Bump(atom/A) + if(!cause_hell) return + if(isturf(A)) + narsiewall(A) + else if(istype(A, /obj/structure/cult)) + qdel(A) + +/obj/singularity/narsie/large/Bumped(atom/A) + if(!cause_hell) return + if(isturf(A)) + narsiewall(A) + else if(istype(A, /obj/structure/cult)) + qdel(A) + +/obj/singularity/narsie/move(var/force_move = 0) + if(!move_self) + return 0 + + var/movement_dir = pick(alldirs - last_failed_movement) + + if(force_move) + movement_dir = force_move + + if(target && prob(60)) + movement_dir = get_dir(src,target) + + spawn(0) + step(src, movement_dir) + spawn(1) + step(src, movement_dir) + return 1 + +/obj/singularity/narsie/large/move(var/force_move = 0) + if(!move_self) + return 0 + + var/movement_dir = pick(alldirs - last_failed_movement) + + if(force_move) + movement_dir = force_move + + if(target && prob(60)) + movement_dir = get_dir(src,target) + spawn(0) + step(src, movement_dir) + narsiefloor(get_turf(loc)) + for(var/mob/M in player_list) + if(M.client) + M.see_narsie(src,movement_dir) + spawn(10) + step(src, movement_dir) + narsiefloor(get_turf(loc)) + for(var/mob/M in player_list) + if(M.client) + M.see_narsie(src,movement_dir) + return 1 + +/obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints" + if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space))) + if(T.icon_state != "cult-narsie") + T.desc = "something that goes beyond your understanding went this way." + T.icon = 'icons/turf/flooring/cult.dmi' + T.icon_state = "cult-narsie" + T.set_light(1) + +/obj/singularity/narsie/proc/narsiewall(var/turf/T) + T.desc = "An opening has been made on that wall, but who can say if what you seek truly lies on the other side?" + T.icon = 'icons/turf/walls.dmi' + T.icon_state = "cult-narsie" + T.opacity = 0 + T.density = FALSE + set_light(1) + +/obj/singularity/narsie/large/consume(const/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO +//NEW BEHAVIOUR + if(narsie_behaviour == "CultStation13") + //MOB PROCESSING + new_narsie(A) + +//OLD BEHAVIOUR + else if(narsie_behaviour == "Nar-Singulo") + old_narsie(A) + +/obj/singularity/narsie/proc/new_narsie(const/atom/A) + if (istype(A, /mob/) && (get_dist(A, src) <= 7)) + var/mob/M = A + + if(M.status_flags & GODMODE) + return 0 + + M.cultify() + +//ITEM PROCESSING + else if (istype(A, /obj/)) + var/obj/O = A + O.cultify() + +//TURF PROCESSING + else if (isturf(A)) + var/dist = get_dist(A, src) + + for (var/atom/movable/AM in A.contents) + if (dist <= consume_range) + consume(AM) + continue + + if (dist <= consume_range && !istype(A, /turf/space)) + var/turf/T = A + if(T.holy) + T.holy = 0 //Nar-Sie doesn't give a shit about sacred grounds. + T.cultify() + +/obj/singularity/narsie/proc/old_narsie(const/atom/A) + if(!(A.singuloCanEat())) + return 0 + + if (istype(A, /mob/living/)) + var/mob/living/C2 = A + + if(C2.status_flags & GODMODE) + return 0 + + C2.dust() // Changed from gib(), just for less lag. + + else if (istype(A, /obj/)) + qdel(A) + + if (A) + qdel(A) + else if (isturf(A)) + var/dist = get_dist(A, src) + + for (var/atom/movable/AM2 in A.contents) + if (AM2 == src) // This is the snowflake. + continue + + if (dist <= consume_range) + consume(AM2) + continue + + if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) + var/turf/T2 = A + T2.ChangeTurf(get_base_turf_by_area(A)) + +/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones. + if(!(A.singuloCanEat())) + return 0 + + if (istype(A, /mob/living/)) + var/mob/living/C2 = A + + if(C2.status_flags & GODMODE) + return 0 + + C2.dust() // Changed from gib(), just for less lag. + + else if (istype(A, /obj/)) + qdel(A) + + if (A) + qdel(A) + else if (isturf(A)) + var/dist = get_dist(A, src) + + for (var/atom/movable/AM2 in A.contents) + if (AM2 == src) // This is the snowflake. + continue + + if (dist <= consume_range) + consume(AM2) + continue + + if (dist > consume_range) + if(!(AM2.singuloCanEat())) + continue + + if (101 == AM2.invisibility) + continue + + spawn (0) + AM2.singularity_pull(src, src.current_size) + + if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) + var/turf/T2 = A + T2.ChangeTurf(get_base_turf_by_area(A)) + +/obj/singularity/narsie/ex_act(severity) //No throwing bombs at it either. --NEO + return + +/obj/singularity/narsie/proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO + var/list/cultists = list() + for(var/datum/mind/cult_nh_mind in cult.current_antagonists) + if(!cult_nh_mind.current) + continue + if(cult_nh_mind.current.stat) + continue + var/turf/pos = get_turf(cult_nh_mind.current) + if(pos.z != src.z) + continue + cultists += cult_nh_mind.current + if(cultists.len) + acquire(pick(cultists)) + return + //If there was living cultists, it picks one to follow. + for(var/mob/living/carbon/human/food in living_mob_list) + if(food.stat) + continue + var/turf/pos = get_turf(food) + if(pos.z != src.z) + continue + cultists += food + if(cultists.len) + acquire(pick(cultists)) + return + //no living cultists, pick a living human instead. + for(var/mob/observer/dead/ghost in player_list) + if(!ghost.client) + continue + var/turf/pos = get_turf(ghost) + if(pos.z != src.z) + continue + cultists += ghost + if(cultists.len) + acquire(pick(cultists)) + return + //no living humans, follow a ghost instead. + +/obj/singularity/narsie/proc/acquire(const/mob/food) + var/capname = uppertext(name) + + to_chat(target, "[capname] HAS LOST INTEREST IN YOU.") + target = food + + if (ishuman(target)) + to_chat(target, "[capname] HUNGERS FOR YOUR SOUL.") + else + to_chat(target, "[capname] HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL.") + +/obj/singularity/narsie/on_capture() + chained = 1 + move_self = 0 + icon_state ="narsie-small-chains" + +/obj/singularity/narsie/on_release() + chained = 0 + move_self = 1 + icon_state ="narsie-small" + +/obj/singularity/narsie/large/on_capture() + chained = 1 + move_self = 0 + icon_state ="narsie-chains" + for(var/mob/M in mob_list)//removing the client image of nar-sie while it is chained + if(M.client) + M.see_narsie(src) + +/obj/singularity/narsie/large/on_release() + chained = 0 + move_self = 1 + icon_state ="narsie" + +/obj/singularity/narsie/cultify() + return + +/** + * Wizard narsie. + */ +/obj/singularity/narsie/wizard + grav_pull = 0 + +/obj/singularity/narsie/wizard/eat() + for (var/turf/T in trange(consume_range, src)) + consume(T) + +/obj/singularity/narsie/proc/narsie_spawn_animation() + icon = 'icons/obj/narsie_spawn_anim.dmi' + dir = SOUTH + move_self = 0 + flick("narsie_spawn_anim",src) + sleep(11) + move_self = 1 + icon = initial(icon) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index dcafc9e48a..35e1ed8eb9 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -1,611 +1,611 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -var/cultwords = list() -var/runedec = 0 -var/global/list/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", "self", "see", "other", "hide") -var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") - -/client/proc/check_words() // -- Urist - set category = "Special Verbs" - set name = "Check Rune Words" - set desc = "Check the rune-word meaning" - if(!cultwords["travel"]) - runerandom() - for (var/word in engwords) - to_chat(usr, "[cultwords[word]] is [word]") - -/proc/runerandom() //randomizes word meaning - var/list/runewords=rnwords - for (var/word in engwords) - cultwords[word] = pick(runewords) - runewords-=cultwords[word] - -/obj/effect/rune - desc = "A strange collection of symbols drawn in blood." - anchored = TRUE - icon = 'icons/obj/rune.dmi' - icon_state = "1" - var/visibility = 0 - unacidable = TRUE - layer = TURF_LAYER - - - var/word1 - var/word2 - var/word3 - var/image/blood_image - var/list/converting = list() - -// Places these combos are mentioned: this file - twice in the rune code, once in imbued tome, once in tome's HTML runes.dm - in the imbue rune code. If you change a combination - dont forget to change it everywhere. - -// travel self [word] - Teleport to random [rune with word destination matching] -// travel other [word] - Portal to rune with word destination matching - kinda doesnt work. At least the icon. No idea why. -// see blood Hell - Create a new tome -// join blood self - Incorporate person over the rune into the group -// Hell join self - Summon TERROR -// destroy see technology - EMP rune -// travel blood self - Drain blood -// see Hell join - See invisible -// blood join Hell - Raise dead - -// hide see blood - Hide nearby runes -// blood see hide - Reveal nearby runes - The point of this rune is that its reversed obscure rune. So you always know the words to reveal the rune once oyu have obscured it. - -// Hell travel self - Leave your body and ghost around -// blood see travel - Manifest a ghost into a mortal body -// Hell tech join - Imbue a rune into a talisman -// Hell blood join - Sacrifice rune -// destroy travel self - Wall rune -// join other self - Summon cultist rune -// travel technology other - Freeing rune // other blood travel was freedom join other - -// hide other see - Deafening rune // was destroy see hear -// destroy see other - Blinding rune -// destroy see blood - BLOOD BOIL - -// self other technology - Communication rune //was other hear blood -// join hide technology - stun rune. Rune color: bright pink. -/obj/effect/rune/Initialize() - . = ..() - blood_image = image(loc = src) - blood_image.override = 1 - for(var/mob/living/silicon/ai/AI in player_list) - if(AI.client) - AI.client.images += blood_image - rune_list.Add(src) - -/obj/effect/rune/Destroy() - for(var/mob/living/silicon/ai/AI in player_list) - if(AI.client) - AI.client.images -= blood_image - qdel(blood_image) - blood_image = null - rune_list.Remove(src) - ..() - -/obj/effect/rune/examine(mob/user) - . = ..() - if(iscultist(user)) - . += "This spell circle reads: [word1] [word2] [word3]." - - -/obj/effect/rune/attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/book/tome) && iscultist(user)) - to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.") - qdel(src) - return - else if(istype(I, /obj/item/weapon/nullrod)) - to_chat(user, "You disrupt the vile magic with the deadening field of the null rod!") - qdel(src) - return - return - - -/obj/effect/rune/attack_hand(mob/living/user as mob) - if(!iscultist(user)) - to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.") - return - if(user.is_muzzled()) - to_chat(user, "You are unable to speak the words of the rune.") - return - if(!word1 || !word2 || !word3 || prob(user.getBrainLoss())) - return fizzle() -// if(!src.visibility) -// src.visibility=1 - if(word1 == cultwords["travel"] && word2 == cultwords["self"]) - return teleport(src.word3) - if(word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"]) - return tomesummon() - if(word1 == cultwords["hell"] && word2 == cultwords["destroy"] && word3 == cultwords["other"]) - return armor() - if(word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) - return convert() - if(word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"]) - return tearreality() - if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"]) - return emp(src.loc,5) - if(word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) - return drain() - if(word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"]) - return seer() - if(word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"]) - return raise() - if(word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) - return obscure(4) - if(word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) - return ajourney() - if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"]) - return manifest() - if(word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"]) - return talisman() - if(word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"]) - return sacrifice() - if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"]) - return revealrunes(src) - if(word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) - return wall() - if(word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"]) - return freedom() - if(word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"]) - return cultsummon() - if(word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"]) - return deafen() - if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"]) - return blind() - if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) - return bloodboil() - if(word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"]) - return communicate() - if(word1 == cultwords["travel"] && word2 == cultwords["other"]) - return itemport(src.word3) - if(word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"]) - return runestun() - else - return fizzle() - - -/obj/effect/rune/proc/fizzle() - if(istype(src,/obj/effect/rune)) - usr.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) - else - usr.whisper(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) - for (var/mob/V in viewers(src)) - V.show_message("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 2) - return - -/obj/effect/rune/proc/check_icon() - icon = get_uristrune_cult(word1, word2, word3) - -/obj/item/weapon/book/tome - name = "arcane tome" - icon = 'icons/obj/weapons.dmi' - item_icons = list( - icon_l_hand = 'icons/mob/items/lefthand_books.dmi', - icon_r_hand = 'icons/mob/items/righthand_books.dmi', - ) - icon_state ="tome" - item_state = "tome" - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - unique = 1 - var/tomedat = "" - var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri") - - tomedat = {" - - - - -

    The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood.

    - - The book is written in an unknown dialect, there are lots of pictures of various complex geometric shapes. You find some notes in english that give you basic understanding of the many runes written in the book. The notes give you an understanding what the words for the runes should be. However, you do not know how to write all these words in this dialect.
    - Below is the summary of the runes.
    - -

    Contents

    -

    - Teleport self: Travel Self (word)
    - Teleport other: Travel Other (word)
    - Summon new tome: See Blood Hell
    - Convert a person: Join Blood Self
    - Summon Nar-Sie: Hell Join Self
    - Disable technology: Destroy See Technology
    - Drain blood: Travel Blood Self
    - Raise dead: Blood Join Hell
    - Hide runes: Hide See Blood
    - Reveal hidden runes: Blood See Hide
    - Leave your body: Hell travel self
    - Ghost Manifest: Blood See Travel
    - Imbue a talisman: Hell Technology Join
    - Sacrifice: Hell Blood Join
    - Create a wall: Destroy Travel Self
    - Summon cultist: Join Other Self
    - Free a cultist: Travel technology other
    - Deafen: Hide Other See
    - Blind: Destroy See Other
    - Blood Boil: Destroy See Blood
    - Communicate: Self Other Technology
    - Stun: Join Hide Technology
    - Summon Cultist Armor: Hell Destroy Other
    - See Invisible: See Hell Join
    -

    -

    Rune Descriptions

    -

    Teleport self

    - Teleport rune is a special rune, as it only needs two words, with the third word being destination. Basically, when you have two runes with the same destination, invoking one will teleport you to the other one. If there are more than 2 runes, you will be teleported to a random one. Runes with different third words will create separate networks. You can imbue this rune into a talisman, giving you a great escape mechanism.
    -

    Teleport other

    - Teleport other allows for teleportation for any movable object to another rune with the same third word. You need 3 cultists chanting the invocation for this rune to work.
    -

    Summon new tome

    - Invoking this rune summons a new arcane tome. -

    Convert a person

    - This rune opens target's mind to the realm of Nar-Sie, which usually results in this person joining the cult. However, some people (mostly the ones who possess high authority) have strong enough will to stay true to their old ideals.
    -

    Summon Nar-Sie

    - The ultimate rune. It summons the Avatar of Nar-Sie himself, tearing a huge hole in reality and consuming everything around it. Summoning it is the final goal of any cult.
    -

    Disable Technology

    - Invoking this rune creates a strong electromagnetic pulse in a small radius, making it basically analogic to an EMP grenade. You can imbue this rune into a talisman, making it a decent defensive item.
    -

    Drain Blood

    - This rune instantly heals you of some brute damage at the expense of a person placed on top of the rune. Whenever you invoke a drain rune, ALL drain runes on the station are activated, draining blood from anyone located on top of those runes. This includes yourself, though the blood you drain from yourself just comes back to you. This might help you identify this rune when studying words. One drain gives up to 25HP per each victim, but you can repeat it if you need more. Draining only works on living people, so you might need to recharge your "Battery" once its empty. Drinking too much blood at once might cause blood hunger.
    -

    Raise Dead

    - This rune allows for the resurrection of any dead person. You will need a dead human body and a living human sacrifice. Make 2 raise dead runes. Put a living, awake human on top of one, and a dead body on the other one. When you invoke the rune, the life force of the living human will be transferred into the dead body, allowing a ghost standing on top of the dead body to enter it, instantly and fully healing it. Use other runes to ensure there is a ghost ready to be resurrected.
    -

    Hide runes

    - This rune makes all nearby runes completely invisible. They are still there and will work if activated somehow, but you cannot invoke them directly if you do not see them.
    -

    Reveal runes

    - This rune is made to reverse the process of hiding a rune. It reveals all hidden runes in a rather large area around it. -

    Leave your body

    - This rune gently rips your soul out of your body, leaving it intact. You can observe the surroundings as a ghost as well as communicate with other ghosts. Your body takes damage while you are there, so ensure your journey is not too long, or you might never come back.
    -

    Manifest a ghost

    - Unlike the Raise Dead rune, this rune does not require any special preparations or vessels. Instead of using full lifeforce of a sacrifice, it will drain YOUR lifeforce. Stand on the rune and invoke it. If there's a ghost standing over the rune, it will materialise, and will live as long as you don't move off the rune or die. You can put a paper with a name on the rune to make the new body look like that person.
    -

    Imbue a talisman

    - This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, tisable technology, communicate, deafen, blind and stun.
    -

    Sacrifice

    - Sacrifice rune allows you to sacrifice a living thing or a body to the Geometer of Blood. Monkeys and dead humans are the most basic sacrifices, they might or might not be enough to gain His favor. A living human is what a real sacrifice should be, however, you will need 3 people chanting the invocation to sacrifice a living person. -

    Create a wall

    - Invoking this rune solidifies the air above it, creating an an invisible wall. To remove the wall, simply invoke the rune again. -

    Summon cultist

    - This rune allows you to summon a fellow cultist to your location. The target cultist must be unhandcuffed ant not buckled to anything. You also need to have 3 people chanting at the rune to succesfully invoke it. Invoking it takes heavy strain on the bodies of all chanting cultists.
    -

    Free a cultist

    - This rune unhandcuffs and unbuckles any cultist of your choice, no matter where he is. You need to have 3 people invoking the rune for it to work. Invoking it takes heavy strain on the bodies of all chanting cultists.
    -

    Deafen

    - This rune temporarily deafens all non-cultists around you.
    -

    Blind

    - This rune temporarily blinds all non-cultists around you. Very robust. Use together with the deafen rune to leave your enemies completely helpless.
    -

    Blood boil

    - This rune boils the blood all non-cultists in visible range. The damage is enough to instantly critically hurt any person. You need 3 cultists invoking the rune for it to work. This rune is unreliable and may cause unpredicted effect when invoked. It also drains significant amount of your health when succesfully invoked.
    -

    Communicate

    - Invoking this rune allows you to relay a message to all cultists on the station and nearby space objects. -

    Stun

    - Unlike other runes, this ons is supposed to be used in talisman form. When invoked directly, it simply releases some dark energy, briefly stunning everyone around. When imbued into a talisman, you can force all of its energy into one person, stunning him so hard he cant even speak. However, effect wears off rather fast.
    -

    Equip Armor

    - When this rune is invoked, either from a rune or a talisman, it will equip the user with the armor of the followers of Nar-Sie. To use this rune to its fullest extent, make sure you are not wearing any form of headgear, armor, gloves or shoes, and make sure you are not holding anything in your hands.
    -

    See Invisible

    - When invoked when standing on it, this rune allows the user to see the the world beyond as long as he does not move.
    - - - "} - -/obj/item/weapon/book/tome/Initialize() - . = ..() - if(!cultwords["travel"]) - runerandom() - for(var/V in cultwords) - words[cultwords[V]] = V - -/obj/item/weapon/book/tome/attack(mob/living/M as mob, mob/living/user as mob) - add_attack_logs(user,M,"Hit with [name]") - - if(istype(M,/mob/observer/dead)) - var/mob/observer/dead/D = M - D.manifest(user) - return - if(!istype(M)) - return - if(!iscultist(user)) - return ..() - if(iscultist(M)) - return - M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit - for(var/mob/O in viewers(M, null)) - O.show_message("\The [user] beats \the [M] with \the [src]!", 1) - to_chat(M, "You feel searing heat inside!") - - -/obj/item/weapon/book/tome/attack_self(mob/living/user as mob) - usr = user - if(!usr.canmove || usr.stat || usr.restrained()) - return - - if(!cultwords["travel"]) - runerandom() - if(iscultist(user)) - var/C = 0 - for(var/obj/effect/rune/N in rune_list) - C++ - if (!istype(user.loc,/turf)) - to_chat(user, "You do not have enough space to write a proper rune.") - return - - if (C>=26 + runedec + cult.current_antagonists.len) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist - tgui_alert_async(user, "The cloth of reality can't take that much of a strain. Remove some runes first!") - return - else - switch(tgui_alert(user, "You open the tome", "Tome", list("Read it","Scribe a rune","Cancel"))) - if("Cancel") - return - if("Read it") - if(usr.get_active_hand() != src) - return - user << browse("[tomedat]", "window=Arcane Tome") - return - if(usr.get_active_hand() != src) - return - - var/list/dictionary = list ( - "convert" = list("join","blood","self"), - "wall" = list("destroy","travel","self"), - "blood boil" = list("destroy","see","blood"), - "blood drain" = list("travel","blood","self"), - "raise dead" = list("blood","join","hell"), - "summon narsie" = list("hell","join","self"), - "communicate" = list("self","other","technology"), - "emp" = list("destroy","see","technology"), - "manifest" = list("blood","see","travel"), - "summon tome" = list("see","blood","hell"), - "see invisible" = list("see","hell","join"), - "hide" = list("hide","see","blood"), - "reveal" = list("blood","see","hide"), - "astral journey" = list("hell","travel","self"), - "imbue" = list("hell","technology","join"), - "sacrifice" = list("hell","blood","join"), - "summon cultist" = list("join","other","self"), - "free cultist" = list("travel","technology","other"), - "deafen" = list("hide","other","see"), - "blind" = list("destroy","see","other"), - "stun" = list("join","hide","technology"), - "armor" = list("hell","destroy","other"), - "teleport" = list("travel","self"), - "teleport other" = list("travel","other") - ) - - var/list/english = list() - - var/list/scribewords = list("none") - - for (var/entry in words) - if (words[entry] != entry) - english += list(words[entry] = entry) - - for (var/entry in dictionary) - var/list/required = dictionary[entry] - if (length(english&required) == required.len) - scribewords += entry - - var/chosen_rune = null - - if(usr) - chosen_rune = input ("Choose a rune to scribe.") in scribewords - if (!chosen_rune) - return - if (chosen_rune == "none") - to_chat(user, "You decide against scribing a rune, perhaps you should take this time to study your notes.") - return - if (chosen_rune == "teleport") - dictionary[chosen_rune] += input ("Choose a destination word") in english - if (chosen_rune == "teleport other") - dictionary[chosen_rune] += input ("Choose a destination word") in english - - if(usr.get_active_hand() != src) - return - - for (var/mob/V in viewers(src)) - V.show_message("\The [user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "You hear chanting.", 2) - to_chat(user, "You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world.") - user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage - if(do_after(user, 50)) - var/area/A = get_area(user) - log_and_message_admins("created \an [chosen_rune] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") - if(usr.get_active_hand() != src) - return - var/mob/living/carbon/human/H = user - var/obj/effect/rune/R = new /obj/effect/rune(user.loc) - to_chat(user, "You finish drawing the arcane markings of the Geometer.") - var/list/required = dictionary[chosen_rune] - R.word1 = english[required[1]] - R.word2 = english[required[2]] - R.word3 = english[required[3]] - R.check_icon() - R.blood_DNA = list() - R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type - return - else - to_chat(user, "The book seems full of illegible scribbles. Is this a joke?") - return - -/obj/item/weapon/book/tome/examine(mob/user) - . = ..() - if(!iscultist(user)) - . += "An old, dusty tome with frayed edges and a sinister looking cover." - else - . += "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though." - -/obj/item/weapon/book/tome/cultify() - return - -/obj/item/weapon/book/tome/imbued //admin tome, spawns working runes without waiting - w_class = ITEMSIZE_SMALL - var/cultistsonly = 1 -/obj/item/weapon/book/tome/imbued/attack_self(mob/user as mob) - if(src.cultistsonly && !iscultist(usr)) - return - if(!cultwords["travel"]) - runerandom() - if(user) - var/r - if (!istype(user.loc,/turf)) - to_chat(user, "You do not have enough space to write a proper rune.") - var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun") - r = input(usr, "Choose a rune to scribe", "Rune Scribing") in runes // Remains input() for extreme blocking - var/obj/effect/rune/R = new /obj/effect/rune - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - R.blood_DNA = list() - R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type - var/area/A = get_area(user) - log_and_message_admins("created \an [r] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") - switch(r) - if("teleport") - var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") - var/beacon - if(usr) - beacon = input(usr, "Select the last rune", "Rune Scribing") in words // Remains input() for extreme blocking - R.word1=cultwords["travel"] - R.word2=cultwords["self"] - R.word3=beacon - R.loc = user.loc - R.check_icon() - if("itemport") - var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") - var/beacon - if(usr) - beacon = input(usr, "Select the last rune", "Rune Scribing") in words // Remains input() for extreme blocking - R.word1=cultwords["travel"] - R.word2=cultwords["other"] - R.word3=beacon - R.loc = user.loc - R.check_icon() - if("tome") - R.word1=cultwords["see"] - R.word2=cultwords["blood"] - R.word3=cultwords["hell"] - R.loc = user.loc - R.check_icon() - if("armor") - R.word1=cultwords["hell"] - R.word2=cultwords["destroy"] - R.word3=cultwords["other"] - R.loc = user.loc - R.check_icon() - if("convert") - R.word1=cultwords["join"] - R.word2=cultwords["blood"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("tear in reality") - R.word1=cultwords["hell"] - R.word2=cultwords["join"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("emp") - R.word1=cultwords["destroy"] - R.word2=cultwords["see"] - R.word3=cultwords["technology"] - R.loc = user.loc - R.check_icon() - if("drain") - R.word1=cultwords["travel"] - R.word2=cultwords["blood"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("seer") - R.word1=cultwords["see"] - R.word2=cultwords["hell"] - R.word3=cultwords["join"] - R.loc = user.loc - R.check_icon() - if("raise") - R.word1=cultwords["blood"] - R.word2=cultwords["join"] - R.word3=cultwords["hell"] - R.loc = user.loc - R.check_icon() - if("obscure") - R.word1=cultwords["hide"] - R.word2=cultwords["see"] - R.word3=cultwords["blood"] - R.loc = user.loc - R.check_icon() - if("astral journey") - R.word1=cultwords["hell"] - R.word2=cultwords["travel"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("manifest") - R.word1=cultwords["blood"] - R.word2=cultwords["see"] - R.word3=cultwords["travel"] - R.loc = user.loc - R.check_icon() - if("imbue talisman") - R.word1=cultwords["hell"] - R.word2=cultwords["technology"] - R.word3=cultwords["join"] - R.loc = user.loc - R.check_icon() - if("sacrifice") - R.word1=cultwords["hell"] - R.word2=cultwords["blood"] - R.word3=cultwords["join"] - R.loc = user.loc - R.check_icon() - if("reveal") - R.word1=cultwords["blood"] - R.word2=cultwords["see"] - R.word3=cultwords["hide"] - R.loc = user.loc - R.check_icon() - if("wall") - R.word1=cultwords["destroy"] - R.word2=cultwords["travel"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("freedom") - R.word1=cultwords["travel"] - R.word2=cultwords["technology"] - R.word3=cultwords["other"] - R.loc = user.loc - R.check_icon() - if("cultsummon") - R.word1=cultwords["join"] - R.word2=cultwords["other"] - R.word3=cultwords["self"] - R.loc = user.loc - R.check_icon() - if("deafen") - R.word1=cultwords["hide"] - R.word2=cultwords["other"] - R.word3=cultwords["see"] - R.loc = user.loc - R.check_icon() - if("blind") - R.word1=cultwords["destroy"] - R.word2=cultwords["see"] - R.word3=cultwords["other"] - R.loc = user.loc - R.check_icon() - if("bloodboil") - R.word1=cultwords["destroy"] - R.word2=cultwords["see"] - R.word3=cultwords["blood"] - R.loc = user.loc - R.check_icon() - if("communicate") - R.word1=cultwords["self"] - R.word2=cultwords["other"] - R.word3=cultwords["technology"] - R.loc = user.loc - R.check_icon() - if("stun") - R.word1=cultwords["join"] - R.word2=cultwords["hide"] - R.word3=cultwords["technology"] - R.loc = user.loc - R.check_icon() +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +var/cultwords = list() +var/runedec = 0 +var/global/list/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", "self", "see", "other", "hide") +var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") + +/client/proc/check_words() // -- Urist + set category = "Special Verbs" + set name = "Check Rune Words" + set desc = "Check the rune-word meaning" + if(!cultwords["travel"]) + runerandom() + for (var/word in engwords) + to_chat(usr, "[cultwords[word]] is [word]") + +/proc/runerandom() //randomizes word meaning + var/list/runewords=rnwords + for (var/word in engwords) + cultwords[word] = pick(runewords) + runewords-=cultwords[word] + +/obj/effect/rune + desc = "A strange collection of symbols drawn in blood." + anchored = TRUE + icon = 'icons/obj/rune.dmi' + icon_state = "1" + var/visibility = 0 + unacidable = TRUE + layer = TURF_LAYER + + + var/word1 + var/word2 + var/word3 + var/image/blood_image + var/list/converting = list() + +// Places these combos are mentioned: this file - twice in the rune code, once in imbued tome, once in tome's HTML runes.dm - in the imbue rune code. If you change a combination - dont forget to change it everywhere. + +// travel self [word] - Teleport to random [rune with word destination matching] +// travel other [word] - Portal to rune with word destination matching - kinda doesnt work. At least the icon. No idea why. +// see blood Hell - Create a new tome +// join blood self - Incorporate person over the rune into the group +// Hell join self - Summon TERROR +// destroy see technology - EMP rune +// travel blood self - Drain blood +// see Hell join - See invisible +// blood join Hell - Raise dead + +// hide see blood - Hide nearby runes +// blood see hide - Reveal nearby runes - The point of this rune is that its reversed obscure rune. So you always know the words to reveal the rune once oyu have obscured it. + +// Hell travel self - Leave your body and ghost around +// blood see travel - Manifest a ghost into a mortal body +// Hell tech join - Imbue a rune into a talisman +// Hell blood join - Sacrifice rune +// destroy travel self - Wall rune +// join other self - Summon cultist rune +// travel technology other - Freeing rune // other blood travel was freedom join other + +// hide other see - Deafening rune // was destroy see hear +// destroy see other - Blinding rune +// destroy see blood - BLOOD BOIL + +// self other technology - Communication rune //was other hear blood +// join hide technology - stun rune. Rune color: bright pink. +/obj/effect/rune/Initialize() + . = ..() + blood_image = image(loc = src) + blood_image.override = 1 + for(var/mob/living/silicon/ai/AI in player_list) + if(AI.client) + AI.client.images += blood_image + rune_list.Add(src) + +/obj/effect/rune/Destroy() + for(var/mob/living/silicon/ai/AI in player_list) + if(AI.client) + AI.client.images -= blood_image + qdel(blood_image) + blood_image = null + rune_list.Remove(src) + ..() + +/obj/effect/rune/examine(mob/user) + . = ..() + if(iscultist(user)) + . += "This spell circle reads: [word1] [word2] [word3]." + + +/obj/effect/rune/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/book/tome) && iscultist(user)) + to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.") + qdel(src) + return + else if(istype(I, /obj/item/weapon/nullrod)) + to_chat(user, "You disrupt the vile magic with the deadening field of the null rod!") + qdel(src) + return + return + + +/obj/effect/rune/attack_hand(mob/living/user as mob) + if(!iscultist(user)) + to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.") + return + if(user.is_muzzled()) + to_chat(user, "You are unable to speak the words of the rune.") + return + if(!word1 || !word2 || !word3 || prob(user.getBrainLoss())) + return fizzle() +// if(!src.visibility) +// src.visibility=1 + if(word1 == cultwords["travel"] && word2 == cultwords["self"]) + return teleport(src.word3) + if(word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"]) + return tomesummon() + if(word1 == cultwords["hell"] && word2 == cultwords["destroy"] && word3 == cultwords["other"]) + return armor() + if(word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) + return convert() + if(word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"]) + return tearreality() + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"]) + return emp(src.loc,5) + if(word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) + return drain() + if(word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"]) + return seer() + if(word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"]) + return raise() + if(word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) + return obscure(4) + if(word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) + return ajourney() + if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"]) + return manifest() + if(word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"]) + return talisman() + if(word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"]) + return sacrifice() + if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"]) + return revealrunes(src) + if(word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) + return wall() + if(word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"]) + return freedom() + if(word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"]) + return cultsummon() + if(word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"]) + return deafen() + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"]) + return blind() + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) + return bloodboil() + if(word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"]) + return communicate() + if(word1 == cultwords["travel"] && word2 == cultwords["other"]) + return itemport(src.word3) + if(word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"]) + return runestun() + else + return fizzle() + + +/obj/effect/rune/proc/fizzle() + if(istype(src,/obj/effect/rune)) + usr.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) + else + usr.whisper(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) + for (var/mob/V in viewers(src)) + V.show_message("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 2) + return + +/obj/effect/rune/proc/check_icon() + icon = get_uristrune_cult(word1, word2, word3) + +/obj/item/weapon/book/tome + name = "arcane tome" + icon = 'icons/obj/weapons.dmi' + item_icons = list( + icon_l_hand = 'icons/mob/items/lefthand_books.dmi', + icon_r_hand = 'icons/mob/items/righthand_books.dmi', + ) + icon_state ="tome" + item_state = "tome" + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + unique = 1 + var/tomedat = "" + var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri") + + tomedat = {" + + + + +

    The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood.

    + + The book is written in an unknown dialect, there are lots of pictures of various complex geometric shapes. You find some notes in english that give you basic understanding of the many runes written in the book. The notes give you an understanding what the words for the runes should be. However, you do not know how to write all these words in this dialect.
    + Below is the summary of the runes.
    + +

    Contents

    +

    + Teleport self: Travel Self (word)
    + Teleport other: Travel Other (word)
    + Summon new tome: See Blood Hell
    + Convert a person: Join Blood Self
    + Summon Nar-Sie: Hell Join Self
    + Disable technology: Destroy See Technology
    + Drain blood: Travel Blood Self
    + Raise dead: Blood Join Hell
    + Hide runes: Hide See Blood
    + Reveal hidden runes: Blood See Hide
    + Leave your body: Hell travel self
    + Ghost Manifest: Blood See Travel
    + Imbue a talisman: Hell Technology Join
    + Sacrifice: Hell Blood Join
    + Create a wall: Destroy Travel Self
    + Summon cultist: Join Other Self
    + Free a cultist: Travel technology other
    + Deafen: Hide Other See
    + Blind: Destroy See Other
    + Blood Boil: Destroy See Blood
    + Communicate: Self Other Technology
    + Stun: Join Hide Technology
    + Summon Cultist Armor: Hell Destroy Other
    + See Invisible: See Hell Join
    +

    +

    Rune Descriptions

    +

    Teleport self

    + Teleport rune is a special rune, as it only needs two words, with the third word being destination. Basically, when you have two runes with the same destination, invoking one will teleport you to the other one. If there are more than 2 runes, you will be teleported to a random one. Runes with different third words will create separate networks. You can imbue this rune into a talisman, giving you a great escape mechanism.
    +

    Teleport other

    + Teleport other allows for teleportation for any movable object to another rune with the same third word. You need 3 cultists chanting the invocation for this rune to work.
    +

    Summon new tome

    + Invoking this rune summons a new arcane tome. +

    Convert a person

    + This rune opens target's mind to the realm of Nar-Sie, which usually results in this person joining the cult. However, some people (mostly the ones who possess high authority) have strong enough will to stay true to their old ideals.
    +

    Summon Nar-Sie

    + The ultimate rune. It summons the Avatar of Nar-Sie himself, tearing a huge hole in reality and consuming everything around it. Summoning it is the final goal of any cult.
    +

    Disable Technology

    + Invoking this rune creates a strong electromagnetic pulse in a small radius, making it basically analogic to an EMP grenade. You can imbue this rune into a talisman, making it a decent defensive item.
    +

    Drain Blood

    + This rune instantly heals you of some brute damage at the expense of a person placed on top of the rune. Whenever you invoke a drain rune, ALL drain runes on the station are activated, draining blood from anyone located on top of those runes. This includes yourself, though the blood you drain from yourself just comes back to you. This might help you identify this rune when studying words. One drain gives up to 25HP per each victim, but you can repeat it if you need more. Draining only works on living people, so you might need to recharge your "Battery" once its empty. Drinking too much blood at once might cause blood hunger.
    +

    Raise Dead

    + This rune allows for the resurrection of any dead person. You will need a dead human body and a living human sacrifice. Make 2 raise dead runes. Put a living, awake human on top of one, and a dead body on the other one. When you invoke the rune, the life force of the living human will be transferred into the dead body, allowing a ghost standing on top of the dead body to enter it, instantly and fully healing it. Use other runes to ensure there is a ghost ready to be resurrected.
    +

    Hide runes

    + This rune makes all nearby runes completely invisible. They are still there and will work if activated somehow, but you cannot invoke them directly if you do not see them.
    +

    Reveal runes

    + This rune is made to reverse the process of hiding a rune. It reveals all hidden runes in a rather large area around it. +

    Leave your body

    + This rune gently rips your soul out of your body, leaving it intact. You can observe the surroundings as a ghost as well as communicate with other ghosts. Your body takes damage while you are there, so ensure your journey is not too long, or you might never come back.
    +

    Manifest a ghost

    + Unlike the Raise Dead rune, this rune does not require any special preparations or vessels. Instead of using full lifeforce of a sacrifice, it will drain YOUR lifeforce. Stand on the rune and invoke it. If there's a ghost standing over the rune, it will materialise, and will live as long as you don't move off the rune or die. You can put a paper with a name on the rune to make the new body look like that person.
    +

    Imbue a talisman

    + This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, tisable technology, communicate, deafen, blind and stun.
    +

    Sacrifice

    + Sacrifice rune allows you to sacrifice a living thing or a body to the Geometer of Blood. Monkeys and dead humans are the most basic sacrifices, they might or might not be enough to gain His favor. A living human is what a real sacrifice should be, however, you will need 3 people chanting the invocation to sacrifice a living person. +

    Create a wall

    + Invoking this rune solidifies the air above it, creating an an invisible wall. To remove the wall, simply invoke the rune again. +

    Summon cultist

    + This rune allows you to summon a fellow cultist to your location. The target cultist must be unhandcuffed ant not buckled to anything. You also need to have 3 people chanting at the rune to succesfully invoke it. Invoking it takes heavy strain on the bodies of all chanting cultists.
    +

    Free a cultist

    + This rune unhandcuffs and unbuckles any cultist of your choice, no matter where he is. You need to have 3 people invoking the rune for it to work. Invoking it takes heavy strain on the bodies of all chanting cultists.
    +

    Deafen

    + This rune temporarily deafens all non-cultists around you.
    +

    Blind

    + This rune temporarily blinds all non-cultists around you. Very robust. Use together with the deafen rune to leave your enemies completely helpless.
    +

    Blood boil

    + This rune boils the blood all non-cultists in visible range. The damage is enough to instantly critically hurt any person. You need 3 cultists invoking the rune for it to work. This rune is unreliable and may cause unpredicted effect when invoked. It also drains significant amount of your health when succesfully invoked.
    +

    Communicate

    + Invoking this rune allows you to relay a message to all cultists on the station and nearby space objects. +

    Stun

    + Unlike other runes, this ons is supposed to be used in talisman form. When invoked directly, it simply releases some dark energy, briefly stunning everyone around. When imbued into a talisman, you can force all of its energy into one person, stunning him so hard he cant even speak. However, effect wears off rather fast.
    +

    Equip Armor

    + When this rune is invoked, either from a rune or a talisman, it will equip the user with the armor of the followers of Nar-Sie. To use this rune to its fullest extent, make sure you are not wearing any form of headgear, armor, gloves or shoes, and make sure you are not holding anything in your hands.
    +

    See Invisible

    + When invoked when standing on it, this rune allows the user to see the the world beyond as long as he does not move.
    + + + "} + +/obj/item/weapon/book/tome/Initialize() + . = ..() + if(!cultwords["travel"]) + runerandom() + for(var/V in cultwords) + words[cultwords[V]] = V + +/obj/item/weapon/book/tome/attack(mob/living/M as mob, mob/living/user as mob) + add_attack_logs(user,M,"Hit with [name]") + + if(istype(M,/mob/observer/dead)) + var/mob/observer/dead/D = M + D.manifest(user) + return + if(!istype(M)) + return + if(!iscultist(user)) + return ..() + if(iscultist(M)) + return + M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit + for(var/mob/O in viewers(M, null)) + O.show_message("\The [user] beats \the [M] with \the [src]!", 1) + to_chat(M, "You feel searing heat inside!") + + +/obj/item/weapon/book/tome/attack_self(mob/living/user as mob) + usr = user + if(!usr.canmove || usr.stat || usr.restrained()) + return + + if(!cultwords["travel"]) + runerandom() + if(iscultist(user)) + var/C = 0 + for(var/obj/effect/rune/N in rune_list) + C++ + if (!istype(user.loc,/turf)) + to_chat(user, "You do not have enough space to write a proper rune.") + return + + if (C>=26 + runedec + cult.current_antagonists.len) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist + tgui_alert_async(user, "The cloth of reality can't take that much of a strain. Remove some runes first!") + return + else + switch(tgui_alert(user, "You open the tome", "Tome", list("Read it","Scribe a rune","Cancel"))) + if("Cancel") + return + if("Read it") + if(usr.get_active_hand() != src) + return + user << browse("[tomedat]", "window=Arcane Tome") + return + if(usr.get_active_hand() != src) + return + + var/list/dictionary = list ( + "convert" = list("join","blood","self"), + "wall" = list("destroy","travel","self"), + "blood boil" = list("destroy","see","blood"), + "blood drain" = list("travel","blood","self"), + "raise dead" = list("blood","join","hell"), + "summon narsie" = list("hell","join","self"), + "communicate" = list("self","other","technology"), + "emp" = list("destroy","see","technology"), + "manifest" = list("blood","see","travel"), + "summon tome" = list("see","blood","hell"), + "see invisible" = list("see","hell","join"), + "hide" = list("hide","see","blood"), + "reveal" = list("blood","see","hide"), + "astral journey" = list("hell","travel","self"), + "imbue" = list("hell","technology","join"), + "sacrifice" = list("hell","blood","join"), + "summon cultist" = list("join","other","self"), + "free cultist" = list("travel","technology","other"), + "deafen" = list("hide","other","see"), + "blind" = list("destroy","see","other"), + "stun" = list("join","hide","technology"), + "armor" = list("hell","destroy","other"), + "teleport" = list("travel","self"), + "teleport other" = list("travel","other") + ) + + var/list/english = list() + + var/list/scribewords = list("none") + + for (var/entry in words) + if (words[entry] != entry) + english += list(words[entry] = entry) + + for (var/entry in dictionary) + var/list/required = dictionary[entry] + if (length(english&required) == required.len) + scribewords += entry + + var/chosen_rune = null + + if(usr) + chosen_rune = input ("Choose a rune to scribe.") in scribewords + if (!chosen_rune) + return + if (chosen_rune == "none") + to_chat(user, "You decide against scribing a rune, perhaps you should take this time to study your notes.") + return + if (chosen_rune == "teleport") + dictionary[chosen_rune] += input ("Choose a destination word") in english + if (chosen_rune == "teleport other") + dictionary[chosen_rune] += input ("Choose a destination word") in english + + if(usr.get_active_hand() != src) + return + + for (var/mob/V in viewers(src)) + V.show_message("\The [user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "You hear chanting.", 2) + to_chat(user, "You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world.") + user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage + if(do_after(user, 50)) + var/area/A = get_area(user) + log_and_message_admins("created \an [chosen_rune] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") + if(usr.get_active_hand() != src) + return + var/mob/living/carbon/human/H = user + var/obj/effect/rune/R = new /obj/effect/rune(user.loc) + to_chat(user, "You finish drawing the arcane markings of the Geometer.") + var/list/required = dictionary[chosen_rune] + R.word1 = english[required[1]] + R.word2 = english[required[2]] + R.word3 = english[required[3]] + R.check_icon() + R.blood_DNA = list() + R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type + return + else + to_chat(user, "The book seems full of illegible scribbles. Is this a joke?") + return + +/obj/item/weapon/book/tome/examine(mob/user) + . = ..() + if(!iscultist(user)) + . += "An old, dusty tome with frayed edges and a sinister looking cover." + else + . += "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though." + +/obj/item/weapon/book/tome/cultify() + return + +/obj/item/weapon/book/tome/imbued //admin tome, spawns working runes without waiting + w_class = ITEMSIZE_SMALL + var/cultistsonly = 1 +/obj/item/weapon/book/tome/imbued/attack_self(mob/user as mob) + if(src.cultistsonly && !iscultist(usr)) + return + if(!cultwords["travel"]) + runerandom() + if(user) + var/r + if (!istype(user.loc,/turf)) + to_chat(user, "You do not have enough space to write a proper rune.") + var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun") + r = input(usr, "Choose a rune to scribe", "Rune Scribing") in runes // Remains input() for extreme blocking + var/obj/effect/rune/R = new /obj/effect/rune + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + R.blood_DNA = list() + R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type + var/area/A = get_area(user) + log_and_message_admins("created \an [r] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") + switch(r) + if("teleport") + var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") + var/beacon + if(usr) + beacon = input(usr, "Select the last rune", "Rune Scribing") in words // Remains input() for extreme blocking + R.word1=cultwords["travel"] + R.word2=cultwords["self"] + R.word3=beacon + R.loc = user.loc + R.check_icon() + if("itemport") + var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") + var/beacon + if(usr) + beacon = input(usr, "Select the last rune", "Rune Scribing") in words // Remains input() for extreme blocking + R.word1=cultwords["travel"] + R.word2=cultwords["other"] + R.word3=beacon + R.loc = user.loc + R.check_icon() + if("tome") + R.word1=cultwords["see"] + R.word2=cultwords["blood"] + R.word3=cultwords["hell"] + R.loc = user.loc + R.check_icon() + if("armor") + R.word1=cultwords["hell"] + R.word2=cultwords["destroy"] + R.word3=cultwords["other"] + R.loc = user.loc + R.check_icon() + if("convert") + R.word1=cultwords["join"] + R.word2=cultwords["blood"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("tear in reality") + R.word1=cultwords["hell"] + R.word2=cultwords["join"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("emp") + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["technology"] + R.loc = user.loc + R.check_icon() + if("drain") + R.word1=cultwords["travel"] + R.word2=cultwords["blood"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("seer") + R.word1=cultwords["see"] + R.word2=cultwords["hell"] + R.word3=cultwords["join"] + R.loc = user.loc + R.check_icon() + if("raise") + R.word1=cultwords["blood"] + R.word2=cultwords["join"] + R.word3=cultwords["hell"] + R.loc = user.loc + R.check_icon() + if("obscure") + R.word1=cultwords["hide"] + R.word2=cultwords["see"] + R.word3=cultwords["blood"] + R.loc = user.loc + R.check_icon() + if("astral journey") + R.word1=cultwords["hell"] + R.word2=cultwords["travel"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("manifest") + R.word1=cultwords["blood"] + R.word2=cultwords["see"] + R.word3=cultwords["travel"] + R.loc = user.loc + R.check_icon() + if("imbue talisman") + R.word1=cultwords["hell"] + R.word2=cultwords["technology"] + R.word3=cultwords["join"] + R.loc = user.loc + R.check_icon() + if("sacrifice") + R.word1=cultwords["hell"] + R.word2=cultwords["blood"] + R.word3=cultwords["join"] + R.loc = user.loc + R.check_icon() + if("reveal") + R.word1=cultwords["blood"] + R.word2=cultwords["see"] + R.word3=cultwords["hide"] + R.loc = user.loc + R.check_icon() + if("wall") + R.word1=cultwords["destroy"] + R.word2=cultwords["travel"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("freedom") + R.word1=cultwords["travel"] + R.word2=cultwords["technology"] + R.word3=cultwords["other"] + R.loc = user.loc + R.check_icon() + if("cultsummon") + R.word1=cultwords["join"] + R.word2=cultwords["other"] + R.word3=cultwords["self"] + R.loc = user.loc + R.check_icon() + if("deafen") + R.word1=cultwords["hide"] + R.word2=cultwords["other"] + R.word3=cultwords["see"] + R.loc = user.loc + R.check_icon() + if("blind") + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["other"] + R.loc = user.loc + R.check_icon() + if("bloodboil") + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["blood"] + R.loc = user.loc + R.check_icon() + if("communicate") + R.word1=cultwords["self"] + R.word2=cultwords["other"] + R.word3=cultwords["technology"] + R.loc = user.loc + R.check_icon() + if("stun") + R.word1=cultwords["join"] + R.word2=cultwords["hide"] + R.word3=cultwords["technology"] + R.loc = user.loc + R.check_icon() diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 02923522dc..24a64ef1af 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -1,118 +1,118 @@ -/obj/item/weapon/paper/talisman - icon_state = "paper_talisman" - var/imbue = null - var/uses = 0 - info = "


    " - -/obj/item/weapon/paper/talisman/attack_self(mob/living/user as mob) - if(iscultist(user)) - var/delete = 1 - // who the hell thought this was a good idea :( - switch(imbue) - if("newtome") - call(/obj/effect/rune/proc/tomesummon)() - if("armor") - call(/obj/effect/rune/proc/armor)() - if("emp") - call(/obj/effect/rune/proc/emp)(usr.loc,3) - if("conceal") - call(/obj/effect/rune/proc/obscure)(2) - if("revealrunes") - call(/obj/effect/rune/proc/revealrunes)(src) - if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") - call(/obj/effect/rune/proc/teleport)(imbue) - if("communicate") - //If the user cancels the talisman this var will be set to 0 - delete = call(/obj/effect/rune/proc/communicate)() - if("deafen") - call(/obj/effect/rune/proc/deafen)() - if("blind") - call(/obj/effect/rune/proc/blind)() - if("runestun") - to_chat(user, "To use this talisman, attack your target directly.") - return - if("supply") - supply() - user.take_organ_damage(5, 0) - if(src && src.imbue!="supply" && src.imbue!="runestun") - if(delete) - qdel(src) - return - else - to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?") - return - - -/obj/item/weapon/paper/talisman/attack(mob/living/carbon/T as mob, mob/living/user as mob) - if(iscultist(user)) - if(imbue == "runestun") - user.take_organ_damage(5, 0) - call(/obj/effect/rune/proc/runestun)(T) - qdel(src) - else - ..() ///If its some other talisman, use the generic attack code, is this supposed to work this way? - else - ..() - - -/obj/item/weapon/paper/talisman/proc/supply(var/key) - if (!src.uses) - qdel(src) - return - - var/dat = "There are [src.uses] bloody runes on the parchment.
    " - dat += "Please choose the chant to be imbued into the fabric of reality.
    " - dat += "
    " - dat += "N'ath reth sh'yro eth d'raggathnor! - Allows you to summon a new arcane tome.
    " - dat += "Sas'so c'arta forbici! - Allows you to move to a rune with the same last word.
    " - dat += "Ta'gh fara'qha fel d'amar det! - Allows you to destroy technology in a short range.
    " - dat += "Kla'atu barada nikt'o! - Allows you to conceal the runes you placed on the floor.
    " - dat += "O bidai nabora se'sma! - Allows you to coordinate with others of your cult.
    " - dat += "Fuu ma'jin - Allows you to stun a person by attacking them with the talisman.
    " - dat += "Sa tatha najin - Allows you to summon armoured robes and an unholy blade
    " - dat += "Kal om neth - Summons a soul stone
    " - dat += "Da A'ig Osk - Summons a construct shell for use with captured souls. It is too large to carry on your person.
    " - usr << browse(dat, "window=id_com;size=350x200") - return - - -/obj/item/weapon/paper/talisman/Topic(href, href_list) - if(!src) return - if (usr.stat || usr.restrained() || !in_range(src, usr)) return - - if (href_list["rune"]) - switch(href_list["rune"]) - if("newtome") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "newtome" - if("teleport") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]" - T.info = "[T.imbue]" - if("emp") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "emp" - if("conceal") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "conceal" - if("communicate") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "communicate" - if("runestun") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "runestun" - if("armor") - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) - T.imbue = "armor" - if("soulstone") - new /obj/item/device/soulstone(get_turf(usr)) - if("construct") - new /obj/structure/constructshell/cult(get_turf(usr)) - src.uses-- - supply() - return - - -/obj/item/weapon/paper/talisman/supply - imbue = "supply" - uses = 5 +/obj/item/weapon/paper/talisman + icon_state = "paper_talisman" + var/imbue = null + var/uses = 0 + info = "


    " + +/obj/item/weapon/paper/talisman/attack_self(mob/living/user as mob) + if(iscultist(user)) + var/delete = 1 + // who the hell thought this was a good idea :( + switch(imbue) + if("newtome") + call(/obj/effect/rune/proc/tomesummon)() + if("armor") + call(/obj/effect/rune/proc/armor)() + if("emp") + call(/obj/effect/rune/proc/emp)(usr.loc,3) + if("conceal") + call(/obj/effect/rune/proc/obscure)(2) + if("revealrunes") + call(/obj/effect/rune/proc/revealrunes)(src) + if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") + call(/obj/effect/rune/proc/teleport)(imbue) + if("communicate") + //If the user cancels the talisman this var will be set to 0 + delete = call(/obj/effect/rune/proc/communicate)() + if("deafen") + call(/obj/effect/rune/proc/deafen)() + if("blind") + call(/obj/effect/rune/proc/blind)() + if("runestun") + to_chat(user, "To use this talisman, attack your target directly.") + return + if("supply") + supply() + user.take_organ_damage(5, 0) + if(src && src.imbue!="supply" && src.imbue!="runestun") + if(delete) + qdel(src) + return + else + to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?") + return + + +/obj/item/weapon/paper/talisman/attack(mob/living/carbon/T as mob, mob/living/user as mob) + if(iscultist(user)) + if(imbue == "runestun") + user.take_organ_damage(5, 0) + call(/obj/effect/rune/proc/runestun)(T) + qdel(src) + else + ..() ///If its some other talisman, use the generic attack code, is this supposed to work this way? + else + ..() + + +/obj/item/weapon/paper/talisman/proc/supply(var/key) + if (!src.uses) + qdel(src) + return + + var/dat = "There are [src.uses] bloody runes on the parchment.
    " + dat += "Please choose the chant to be imbued into the fabric of reality.
    " + dat += "
    " + dat += "N'ath reth sh'yro eth d'raggathnor! - Allows you to summon a new arcane tome.
    " + dat += "Sas'so c'arta forbici! - Allows you to move to a rune with the same last word.
    " + dat += "Ta'gh fara'qha fel d'amar det! - Allows you to destroy technology in a short range.
    " + dat += "Kla'atu barada nikt'o! - Allows you to conceal the runes you placed on the floor.
    " + dat += "O bidai nabora se'sma! - Allows you to coordinate with others of your cult.
    " + dat += "Fuu ma'jin - Allows you to stun a person by attacking them with the talisman.
    " + dat += "Sa tatha najin - Allows you to summon armoured robes and an unholy blade
    " + dat += "Kal om neth - Summons a soul stone
    " + dat += "Da A'ig Osk - Summons a construct shell for use with captured souls. It is too large to carry on your person.
    " + usr << browse(dat, "window=id_com;size=350x200") + return + + +/obj/item/weapon/paper/talisman/Topic(href, href_list) + if(!src) return + if (usr.stat || usr.restrained() || !in_range(src, usr)) return + + if (href_list["rune"]) + switch(href_list["rune"]) + if("newtome") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "newtome" + if("teleport") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]" + T.info = "[T.imbue]" + if("emp") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "emp" + if("conceal") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "conceal" + if("communicate") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "communicate" + if("runestun") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "runestun" + if("armor") + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) + T.imbue = "armor" + if("soulstone") + new /obj/item/device/soulstone(get_turf(usr)) + if("construct") + new /obj/structure/constructshell/cult(get_turf(usr)) + src.uses-- + supply() + return + + +/obj/item/weapon/paper/talisman/supply + imbue = "supply" + uses = 5 diff --git a/code/game/gamemodes/endgame/endgame.dm b/code/game/gamemodes/endgame/endgame.dm index aef7894800..721ae98f71 100644 --- a/code/game/gamemodes/endgame/endgame.dm +++ b/code/game/gamemodes/endgame/endgame.dm @@ -1,71 +1,71 @@ -/********************** - * ENDGAME STUFF - **********************/ - - // Universal State - // Handles stuff like space icon_state, constants, etc. - // Essentially a policy manager. Once shit hits the fan, this changes its policies. - // Called by master controller. - - // Default shit. -/datum/universal_state - // Just for reference, for now. - // Might eventually add an observatory job. - var/name = "Normal" - var/desc = "Nothing seems awry." - - // Sets world.turf, replaces all turfs of type /turf/space. - var/space_type = /turf/space - - // Replaces all turfs of type /turf/space/transit - var/transit_space_type = /turf/space/transit - - // Chance of a floor or wall getting damaged [0-100] - // Simulates stuff getting broken due to molecular bonds decaying. - var/decay_rate = 0 - -// Actually decay the turf. -/datum/universal_state/proc/DecayTurf(var/turf/T) - if(istype(T,/turf/simulated/wall)) - var/turf/simulated/wall/W=T - W.melt() - return - if(istype(T,/turf/simulated/floor)) - var/turf/simulated/floor/F=T - // Burnt? - if(!F.burnt) - F.burn_tile() - else - F.ReplaceWithLattice() - return - -// Return 0 to cause shuttle call to fail. -/datum/universal_state/proc/OnShuttleCall(var/mob/user) - return 1 - -// Processed per tick -/datum/universal_state/proc/OnTurfTick(var/turf/T) - if(decay_rate && prob(decay_rate)) - DecayTurf(T) - -// Apply changes when exiting state -/datum/universal_state/proc/OnExit() - // Does nothing by default - -// Apply changes when entering state -/datum/universal_state/proc/OnEnter() - // Does nothing by default - -// Apply changes to a new turf. -/datum/universal_state/proc/OnTurfChange(var/turf/NT) - return - -/datum/universal_state/proc/OverlayAndAmbientSet() - return - -/proc/SetUniversalState(var/newstate,var/on_exit=1, var/on_enter=1) - if(on_exit) - universe.OnExit() - universe = new newstate - if(on_enter) - universe.OnEnter() +/********************** + * ENDGAME STUFF + **********************/ + + // Universal State + // Handles stuff like space icon_state, constants, etc. + // Essentially a policy manager. Once shit hits the fan, this changes its policies. + // Called by master controller. + + // Default shit. +/datum/universal_state + // Just for reference, for now. + // Might eventually add an observatory job. + var/name = "Normal" + var/desc = "Nothing seems awry." + + // Sets world.turf, replaces all turfs of type /turf/space. + var/space_type = /turf/space + + // Replaces all turfs of type /turf/space/transit + var/transit_space_type = /turf/space/transit + + // Chance of a floor or wall getting damaged [0-100] + // Simulates stuff getting broken due to molecular bonds decaying. + var/decay_rate = 0 + +// Actually decay the turf. +/datum/universal_state/proc/DecayTurf(var/turf/T) + if(istype(T,/turf/simulated/wall)) + var/turf/simulated/wall/W=T + W.melt() + return + if(istype(T,/turf/simulated/floor)) + var/turf/simulated/floor/F=T + // Burnt? + if(!F.burnt) + F.burn_tile() + else + F.ReplaceWithLattice() + return + +// Return 0 to cause shuttle call to fail. +/datum/universal_state/proc/OnShuttleCall(var/mob/user) + return 1 + +// Processed per tick +/datum/universal_state/proc/OnTurfTick(var/turf/T) + if(decay_rate && prob(decay_rate)) + DecayTurf(T) + +// Apply changes when exiting state +/datum/universal_state/proc/OnExit() + // Does nothing by default + +// Apply changes when entering state +/datum/universal_state/proc/OnEnter() + // Does nothing by default + +// Apply changes to a new turf. +/datum/universal_state/proc/OnTurfChange(var/turf/NT) + return + +/datum/universal_state/proc/OverlayAndAmbientSet() + return + +/proc/SetUniversalState(var/newstate,var/on_exit=1, var/on_enter=1) + if(on_exit) + universe.OnExit() + universe = new newstate + if(on_enter) + universe.OnEnter() diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index abdee1922a..6a62e00baf 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -1,120 +1,120 @@ -// QUALITY COPYPASTA -/turf/unsimulated/wall/supermatter - name = "Bluespace" - desc = "THE END IS right now actually." - - icon = 'icons/turf/space.dmi' - icon_state = "bluespace" - - //luminosity = 5 - //l_color="#0066FF" - plane = PLANE_LIGHTING_ABOVE - - var/spawned=0 // DIR mask - var/next_check=0 - var/list/avail_dirs = list(NORTH,SOUTH,EAST,WEST) - -/turf/unsimulated/wall/supermatter/Initialize(mapload) - . = ..() - START_PROCESSING(SSturfs, src) - next_check = world.time+5 SECONDS - -/turf/unsimulated/wall/supermatter/Destroy() - STOP_PROCESSING(SSturfs, src) - return ..() - -/turf/unsimulated/wall/supermatter/process() - // Only check infrequently. - if(next_check>world.time) return - - // No more available directions? Shut down process(). - if(avail_dirs.len==0) - STOP_PROCESSING(SSobj, src) - return 1 - - // We're checking, reset the timer. - next_check = world.time+5 SECONDS - - // Choose a direction. - var/pdir = pick(avail_dirs) - avail_dirs -= pdir - var/turf/T=get_step(src,pdir) - - // EXPAND - if(!istype(T,type)) - // Do pretty fadeout animation for 1s. - new /obj/effect/overlay/bluespacify(T) - spawn(10) - // Nom. - for(var/atom/movable/A in T) - if(A) - if(istype(A,/mob/living)) - qdel(A) - else if(istype(A,/mob)) // Observers, AI cameras. - continue - else - qdel(A) - T.ChangeTurf(type) - - if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST)) - STOP_PROCESSING(SSturfs, src) - return - -/turf/unsimulated/wall/supermatter/attack_generic(mob/user as mob) - return attack_hand(user) - -/turf/unsimulated/wall/supermatter/attack_robot(mob/user as mob) - if(Adjacent(user)) - return attack_hand(user) - else - to_chat(user, "What the fuck are you doing?") - return - -// /vg/: Don't let ghosts fuck with this. -/turf/unsimulated/wall/supermatter/attack_ghost(mob/user as mob) - user.examinate(src) - -/turf/unsimulated/wall/supermatter/attack_ai(mob/user as mob) - return user.examinate(src) - -/turf/unsimulated/wall/supermatter/attack_hand(mob/user as mob) - user.visible_message("\The [user] reaches out and touches \the [src]... And then blinks out of existance.",\ - "You reach out and touch \the [src]. Everything immediately goes quiet. Your last thought is \"That was not a wise decision.\"",\ - "You hear an unearthly noise.") - - playsound(src, 'sound/effects/supermatter.ogg', 50, 1) - - Consume(user) - -/turf/unsimulated/wall/supermatter/attackby(obj/item/weapon/W as obj, mob/living/user as mob) - user.visible_message("\The [user] touches \a [W] to \the [src] as a silence fills the room...",\ - "You touch \the [W] to \the [src] when everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ - "Everything suddenly goes silent.") - - playsound(src, 'sound/effects/supermatter.ogg', 50, 1) - - user.drop_from_inventory(W) - Consume(W) - - -/turf/unsimulated/wall/supermatter/Bumped(atom/AM as mob|obj) - if(istype(AM, /mob/living)) - var/mob/living/M = AM - var/datum/gender/T = gender_datums[M.get_visible_gender()] - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash.",\ - "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "You hear an unearthly noise as a wave of heat washes over you.") - else - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - - playsound(src, 'sound/effects/supermatter.ogg', 50, 1) - - Consume(AM) - - -/turf/unsimulated/wall/supermatter/proc/Consume(var/mob/living/user) - if(istype(user,/mob/observer)) - return - +// QUALITY COPYPASTA +/turf/unsimulated/wall/supermatter + name = "Bluespace" + desc = "THE END IS right now actually." + + icon = 'icons/turf/space.dmi' + icon_state = "bluespace" + + //luminosity = 5 + //l_color="#0066FF" + plane = PLANE_LIGHTING_ABOVE + + var/spawned=0 // DIR mask + var/next_check=0 + var/list/avail_dirs = list(NORTH,SOUTH,EAST,WEST) + +/turf/unsimulated/wall/supermatter/Initialize(mapload) + . = ..() + START_PROCESSING(SSturfs, src) + next_check = world.time+5 SECONDS + +/turf/unsimulated/wall/supermatter/Destroy() + STOP_PROCESSING(SSturfs, src) + return ..() + +/turf/unsimulated/wall/supermatter/process() + // Only check infrequently. + if(next_check>world.time) return + + // No more available directions? Shut down process(). + if(avail_dirs.len==0) + STOP_PROCESSING(SSobj, src) + return 1 + + // We're checking, reset the timer. + next_check = world.time+5 SECONDS + + // Choose a direction. + var/pdir = pick(avail_dirs) + avail_dirs -= pdir + var/turf/T=get_step(src,pdir) + + // EXPAND + if(!istype(T,type)) + // Do pretty fadeout animation for 1s. + new /obj/effect/overlay/bluespacify(T) + spawn(10) + // Nom. + for(var/atom/movable/A in T) + if(A) + if(istype(A,/mob/living)) + qdel(A) + else if(istype(A,/mob)) // Observers, AI cameras. + continue + else + qdel(A) + T.ChangeTurf(type) + + if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST)) + STOP_PROCESSING(SSturfs, src) + return + +/turf/unsimulated/wall/supermatter/attack_generic(mob/user as mob) + return attack_hand(user) + +/turf/unsimulated/wall/supermatter/attack_robot(mob/user as mob) + if(Adjacent(user)) + return attack_hand(user) + else + to_chat(user, "What the fuck are you doing?") + return + +// /vg/: Don't let ghosts fuck with this. +/turf/unsimulated/wall/supermatter/attack_ghost(mob/user as mob) + user.examinate(src) + +/turf/unsimulated/wall/supermatter/attack_ai(mob/user as mob) + return user.examinate(src) + +/turf/unsimulated/wall/supermatter/attack_hand(mob/user as mob) + user.visible_message("\The [user] reaches out and touches \the [src]... And then blinks out of existance.",\ + "You reach out and touch \the [src]. Everything immediately goes quiet. Your last thought is \"That was not a wise decision.\"",\ + "You hear an unearthly noise.") + + playsound(src, 'sound/effects/supermatter.ogg', 50, 1) + + Consume(user) + +/turf/unsimulated/wall/supermatter/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + user.visible_message("\The [user] touches \a [W] to \the [src] as a silence fills the room...",\ + "You touch \the [W] to \the [src] when everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ + "Everything suddenly goes silent.") + + playsound(src, 'sound/effects/supermatter.ogg', 50, 1) + + user.drop_from_inventory(W) + Consume(W) + + +/turf/unsimulated/wall/supermatter/Bumped(atom/AM as mob|obj) + if(istype(AM, /mob/living)) + var/mob/living/M = AM + var/datum/gender/T = gender_datums[M.get_visible_gender()] + AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash.",\ + "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ + "You hear an unearthly noise as a wave of heat washes over you.") + else + AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + + playsound(src, 'sound/effects/supermatter.ogg', 50, 1) + + Consume(AM) + + +/turf/unsimulated/wall/supermatter/proc/Consume(var/mob/living/user) + if(istype(user,/mob/observer)) + return + qdel(user) \ No newline at end of file diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm index a74867d990..313d6fbd2e 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm @@ -1,95 +1,95 @@ -/*** EXIT PORTAL ***/ - -/obj/singularity/narsie/large/exit - name = "Bluespace Rift" - desc = "NO TIME TO EXPLAIN, JUMP IN" - icon = 'icons/obj/rift.dmi' - icon_state = "rift" - - move_self = 0 - announce=0 - cause_hell=0 - - plane = PLANE_LIGHTING_ABOVE // ITS SO BRIGHT - - consume_range = 6 - -/obj/singularity/narsie/large/exit/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/singularity/narsie/large/exit/update_icon() - overlays = 0 - -/obj/singularity/narsie/large/exit/process() - for(var/mob/M in player_list) - if(M.client) - M.see_rift(src) - eat() - -/obj/singularity/narsie/large/exit/acquire(var/mob/food) - return - -/obj/singularity/narsie/large/exit/consume(const/atom/A) - if(!(A.singuloCanEat())) - return 0 - - if (istype(A, /mob/living/)) - var/mob/living/L = A - if(L.buckled && istype(L.buckled,/obj/structure/bed/)) - var/turf/O = L.buckled - do_teleport(O, pick(endgame_safespawns), local = FALSE) //VOREStation Edit - L.loc = O.loc - else - do_teleport(L, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit - - else if (istype(A, /obj/mecha/)) - do_teleport(A, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit - - else if (isturf(A)) - var/turf/T = A - var/dist = get_dist(T, src) - if (dist <= consume_range && T.density) - T.density = FALSE - - for (var/atom/movable/AM in T.contents) - if (AM == src) // This is the snowflake. - continue - - if (dist <= consume_range) - consume(AM) - continue - - if (dist > consume_range) - if(!(AM.singuloCanEat())) - continue - - if (101 == AM.invisibility) - continue - - spawn (0) - AM.singularity_pull(src, src.current_size) - - -/mob - //thou shall always be able to see the rift - var/image/riftimage = null - -/mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R) - var/turf/T_mob = get_turf(src) - if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob))) - if(!riftimage) - riftimage = image('icons/obj/rift.dmi',T_mob,"rift",1,1) - riftimage.plane = PLANE_LIGHTING_ABOVE - riftimage.mouse_opacity = 0 - - var/new_x = 32 * (R.x - T_mob.x) + R.pixel_x - var/new_y = 32 * (R.y - T_mob.y) + R.pixel_y - riftimage.pixel_x = new_x - riftimage.pixel_y = new_y - riftimage.loc = T_mob - - src << riftimage - else - if(riftimage) - qdel(riftimage) +/*** EXIT PORTAL ***/ + +/obj/singularity/narsie/large/exit + name = "Bluespace Rift" + desc = "NO TIME TO EXPLAIN, JUMP IN" + icon = 'icons/obj/rift.dmi' + icon_state = "rift" + + move_self = 0 + announce=0 + cause_hell=0 + + plane = PLANE_LIGHTING_ABOVE // ITS SO BRIGHT + + consume_range = 6 + +/obj/singularity/narsie/large/exit/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/singularity/narsie/large/exit/update_icon() + overlays = 0 + +/obj/singularity/narsie/large/exit/process() + for(var/mob/M in player_list) + if(M.client) + M.see_rift(src) + eat() + +/obj/singularity/narsie/large/exit/acquire(var/mob/food) + return + +/obj/singularity/narsie/large/exit/consume(const/atom/A) + if(!(A.singuloCanEat())) + return 0 + + if (istype(A, /mob/living/)) + var/mob/living/L = A + if(L.buckled && istype(L.buckled,/obj/structure/bed/)) + var/turf/O = L.buckled + do_teleport(O, pick(endgame_safespawns), local = FALSE) //VOREStation Edit + L.loc = O.loc + else + do_teleport(L, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit + + else if (istype(A, /obj/mecha/)) + do_teleport(A, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit + + else if (isturf(A)) + var/turf/T = A + var/dist = get_dist(T, src) + if (dist <= consume_range && T.density) + T.density = FALSE + + for (var/atom/movable/AM in T.contents) + if (AM == src) // This is the snowflake. + continue + + if (dist <= consume_range) + consume(AM) + continue + + if (dist > consume_range) + if(!(AM.singuloCanEat())) + continue + + if (101 == AM.invisibility) + continue + + spawn (0) + AM.singularity_pull(src, src.current_size) + + +/mob + //thou shall always be able to see the rift + var/image/riftimage = null + +/mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R) + var/turf/T_mob = get_turf(src) + if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob))) + if(!riftimage) + riftimage = image('icons/obj/rift.dmi',T_mob,"rift",1,1) + riftimage.plane = PLANE_LIGHTING_ABOVE + riftimage.mouse_opacity = 0 + + var/new_x = 32 * (R.x - T_mob.x) + R.pixel_x + var/new_y = 32 * (R.y - T_mob.y) + R.pixel_y + riftimage.pixel_x = new_x + riftimage.pixel_y = new_y + riftimage.loc = T_mob + + src << riftimage + else + if(riftimage) + qdel(riftimage) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index cd28968993..a217dde847 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -1,128 +1,128 @@ -var/global/universe_has_ended = 0 - - -/datum/universal_state/supermatter_cascade - name = "Supermatter Cascade" - desc = "Unknown harmonance affecting universal substructure, converting nearby matter to supermatter." - - decay_rate = 5 // 5% chance of a turf decaying on lighting update/airflow (there's no actual tick for turfs) - -/datum/universal_state/supermatter_cascade/OnShuttleCall(var/mob/user) - if(user) - to_chat(user, "All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.") - return 0 - -/datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T) - var/turf/space/S = T - if(istype(S)) - S.color = "#0066FF" - else - S.color = initial(S.color) - -/datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T) - if(istype(T,/turf/simulated/wall)) - var/turf/simulated/wall/W=T - W.melt() - return - if(istype(T,/turf/simulated/floor)) - var/turf/simulated/floor/F=T - // Burnt? - if(!F.burnt) - F.burn_tile() - else - if(!istype(F,/turf/simulated/floor/plating)) - F.break_tile_to_plating() - return - -// Apply changes when entering state -/datum/universal_state/supermatter_cascade/OnEnter() - set background = 1 - to_world("You are blinded by a brilliant flash of energy.") - - world << sound('sound/effects/cascade.ogg') - - for(var/mob/M in player_list) - M.flash_eyes() - - if(emergency_shuttle.can_recall()) - priority_announcement.Announce("The emergency shuttle has returned due to bluespace distortion.") - emergency_shuttle.recall() - - AreaSet() - MiscSet() - APCSet() - OverlayAndAmbientSet() - - // Disable Nar-Sie. - cult.allow_narsie = 0 - - PlayerSet() - - new /obj/singularity/narsie/large/exit(pick(endgame_exits)) - spawn(rand(30,60) SECONDS) - var/txt = {" -There's been a galaxy-wide electromagnetic pulse. All of our systems are heavily damaged and many personnel are dead or dying. We are seeing increasing indications of the universe itself beginning to unravel. - -[station_name()], you are the only facility nearby a bluespace rift, which is near your research outpost. You are hereby directed to enter the rift using all means necessary, quite possibly as the last of your species alive. - -You have five minutes before the universe collapses. Good l\[\[###!!!- - -AUTOMATED ALERT: Link to [command_name()] lost. - -The access requirements on the Asteroid Shuttles' consoles have now been revoked. -"} - priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED") - - for(var/obj/machinery/computer/shuttle_control/C in machines) - if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining)) - C.req_access = list() - C.req_one_access = list() - - spawn(5 MINUTES) - ticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic - universe_has_ended = 1 - return - -/datum/universal_state/supermatter_cascade/proc/AreaSet() - for(var/area/A in world) - if(!istype(A,/area) || istype(A, /area/space) || istype(A,/area/beach)) - continue - - A.update_icon() - -/datum/universal_state/supermatter_cascade/OverlayAndAmbientSet() - return - /* TODO - spawn(0) - for(var/datum/lighting_corner/L in world) - if(L.z in using_map.admin_levels) - L.update_lumcount(1,1,1) - else - L.update_lumcount(0.0, 0.4, 1) - - for(var/turf/space/T in world) - OnTurfChange(T) - */ -/datum/universal_state/supermatter_cascade/proc/MiscSet() - for (var/obj/machinery/firealarm/alm in machines) - if (!(alm.stat & BROKEN)) - alm.ex_act(2) - -/datum/universal_state/supermatter_cascade/proc/APCSet() - for (var/obj/machinery/power/apc/APC in GLOB.apcs) - if (!(APC.stat & BROKEN) && !APC.is_critical) - APC.chargemode = 0 - if(APC.cell) - APC.cell.charge = 0 - APC.emagged = 1 - APC.queue_icon_update() - -/datum/universal_state/supermatter_cascade/proc/PlayerSet() - for(var/datum/mind/M in player_list) - if(!istype(M.current,/mob/living)) - continue - if(M.current.stat!=2) - M.current.Weaken(10) - M.current.flash_eyes() - - clear_antag_roles(M) +var/global/universe_has_ended = 0 + + +/datum/universal_state/supermatter_cascade + name = "Supermatter Cascade" + desc = "Unknown harmonance affecting universal substructure, converting nearby matter to supermatter." + + decay_rate = 5 // 5% chance of a turf decaying on lighting update/airflow (there's no actual tick for turfs) + +/datum/universal_state/supermatter_cascade/OnShuttleCall(var/mob/user) + if(user) + to_chat(user, "All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.") + return 0 + +/datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T) + var/turf/space/S = T + if(istype(S)) + S.color = "#0066FF" + else + S.color = initial(S.color) + +/datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T) + if(istype(T,/turf/simulated/wall)) + var/turf/simulated/wall/W=T + W.melt() + return + if(istype(T,/turf/simulated/floor)) + var/turf/simulated/floor/F=T + // Burnt? + if(!F.burnt) + F.burn_tile() + else + if(!istype(F,/turf/simulated/floor/plating)) + F.break_tile_to_plating() + return + +// Apply changes when entering state +/datum/universal_state/supermatter_cascade/OnEnter() + set background = 1 + to_world("You are blinded by a brilliant flash of energy.") + + world << sound('sound/effects/cascade.ogg') + + for(var/mob/M in player_list) + M.flash_eyes() + + if(emergency_shuttle.can_recall()) + priority_announcement.Announce("The emergency shuttle has returned due to bluespace distortion.") + emergency_shuttle.recall() + + AreaSet() + MiscSet() + APCSet() + OverlayAndAmbientSet() + + // Disable Nar-Sie. + cult.allow_narsie = 0 + + PlayerSet() + + new /obj/singularity/narsie/large/exit(pick(endgame_exits)) + spawn(rand(30,60) SECONDS) + var/txt = {" +There's been a galaxy-wide electromagnetic pulse. All of our systems are heavily damaged and many personnel are dead or dying. We are seeing increasing indications of the universe itself beginning to unravel. + +[station_name()], you are the only facility nearby a bluespace rift, which is near your research outpost. You are hereby directed to enter the rift using all means necessary, quite possibly as the last of your species alive. + +You have five minutes before the universe collapses. Good l\[\[###!!!- + +AUTOMATED ALERT: Link to [command_name()] lost. + +The access requirements on the Asteroid Shuttles' consoles have now been revoked. +"} + priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED") + + for(var/obj/machinery/computer/shuttle_control/C in machines) + if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining)) + C.req_access = list() + C.req_one_access = list() + + spawn(5 MINUTES) + ticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic + universe_has_ended = 1 + return + +/datum/universal_state/supermatter_cascade/proc/AreaSet() + for(var/area/A in world) + if(!istype(A,/area) || istype(A, /area/space) || istype(A,/area/beach)) + continue + + A.update_icon() + +/datum/universal_state/supermatter_cascade/OverlayAndAmbientSet() + return + /* TODO + spawn(0) + for(var/datum/lighting_corner/L in world) + if(L.z in using_map.admin_levels) + L.update_lumcount(1,1,1) + else + L.update_lumcount(0.0, 0.4, 1) + + for(var/turf/space/T in world) + OnTurfChange(T) + */ +/datum/universal_state/supermatter_cascade/proc/MiscSet() + for (var/obj/machinery/firealarm/alm in machines) + if (!(alm.stat & BROKEN)) + alm.ex_act(2) + +/datum/universal_state/supermatter_cascade/proc/APCSet() + for (var/obj/machinery/power/apc/APC in GLOB.apcs) + if (!(APC.stat & BROKEN) && !APC.is_critical) + APC.chargemode = 0 + if(APC.cell) + APC.cell.charge = 0 + APC.emagged = 1 + APC.queue_icon_update() + +/datum/universal_state/supermatter_cascade/proc/PlayerSet() + for(var/datum/mind/M in player_list) + if(!istype(M.current,/mob/living)) + continue + if(M.current.stat!=2) + M.current.Weaken(10) + M.current.flash_eyes() + + clear_antag_roles(M) diff --git a/code/game/gamemodes/events/PortalStorm.dm b/code/game/gamemodes/events/PortalStorm.dm index 6144f3305b..7e63b8c533 100644 --- a/code/game/gamemodes/events/PortalStorm.dm +++ b/code/game/gamemodes/events/PortalStorm.dm @@ -1,26 +1,26 @@ -/datum/event/portalstorm - - Announce() - command_alert("Subspace disruption detected around the vessel", "Anomaly Alert") - LongTerm() - - var/list/turfs = list( ) - var/turf/picked - - for(var/turf/T in world) - if(T.z < 5 && istype(T,/turf/simulated/floor)) - turfs += T - - for(var/turf/T in world) - if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/portal/P = new /obj/portal( T ) - P.target = picked - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(100,150)) - qdel(P) +/datum/event/portalstorm + + Announce() + command_alert("Subspace disruption detected around the vessel", "Anomaly Alert") + LongTerm() + + var/list/turfs = list( ) + var/turf/picked + + for(var/turf/T in world) + if(T.z < 5 && istype(T,/turf/simulated/floor)) + turfs += T + + for(var/turf/T in world) + if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor)) + spawn(50+rand(0,3000)) + picked = pick(turfs) + var/obj/portal/P = new /obj/portal( T ) + P.target = picked + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.failchance = 0 + P.icon_state = "anom" + P.name = "wormhole" + spawn(rand(100,150)) + qdel(P) diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm index b18310ed88..44f6df7005 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/gamemodes/events/black_hole.dm @@ -1,92 +1,92 @@ -/obj/effect/bhole - name = "black hole" - icon = 'icons/obj/objects.dmi' - desc = "FUCK FUCK FUCK AAAHHH" - icon_state = "bhole3" - opacity = 1 - unacidable = TRUE - density = FALSE - anchored = TRUE - -/obj/effect/bhole/New() - spawn(4) - controller() - -/obj/effect/bhole/proc/controller() - while(src) - - if(!isturf(loc)) - qdel(src) - return - - //DESTROYING STUFF AT THE EPICENTER - for(var/mob/living/M in orange(1,src)) - qdel(M) - for(var/obj/O in orange(1,src)) - qdel(O) - var/base_turf = get_base_turf_by_area(src) - for(var/turf/simulated/ST in orange(1,src)) - if(ST.type == base_turf) - continue - ST.ChangeTurf(base_turf) - - sleep(6) - grav(10, 4, 10, 0 ) - sleep(6) - grav( 8, 4, 10, 0 ) - sleep(6) - grav( 9, 4, 10, 0 ) - sleep(6) - grav( 7, 3, 40, 1 ) - sleep(6) - grav( 5, 3, 40, 1 ) - sleep(6) - grav( 6, 3, 40, 1 ) - sleep(6) - grav( 4, 2, 50, 6 ) - sleep(6) - grav( 3, 2, 50, 6 ) - sleep(6) - grav( 2, 2, 75,25 ) - sleep(6) - - - - //MOVEMENT - if( prob(50) ) - src.anchored = FALSE - step(src,pick(alldirs)) - src.anchored = TRUE - -/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen - qdel(src) - return - for(var/t = -r, t < r, t++) - affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) - return - -/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - //Get turf at coordinate - var/turf/T = locate(x, y, z) - if(isnull(T)) return - - //Pulling and/or ex_act-ing movable atoms in that turf - if( prob(pull_chance) ) - for(var/obj/O in T.contents) - if(O.anchored) - O.ex_act(ex_act_force) - else - step_towards(O,src) - for(var/mob/living/M in T.contents) - step_towards(M,src) - - //Destroying the turf - if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) - var/turf/simulated/ST = T - var/base_turf = get_base_turf_by_area(src) - if(ST.type != base_turf) - ST.ChangeTurf(base_turf) +/obj/effect/bhole + name = "black hole" + icon = 'icons/obj/objects.dmi' + desc = "FUCK FUCK FUCK AAAHHH" + icon_state = "bhole3" + opacity = 1 + unacidable = TRUE + density = FALSE + anchored = TRUE + +/obj/effect/bhole/New() + spawn(4) + controller() + +/obj/effect/bhole/proc/controller() + while(src) + + if(!isturf(loc)) + qdel(src) + return + + //DESTROYING STUFF AT THE EPICENTER + for(var/mob/living/M in orange(1,src)) + qdel(M) + for(var/obj/O in orange(1,src)) + qdel(O) + var/base_turf = get_base_turf_by_area(src) + for(var/turf/simulated/ST in orange(1,src)) + if(ST.type == base_turf) + continue + ST.ChangeTurf(base_turf) + + sleep(6) + grav(10, 4, 10, 0 ) + sleep(6) + grav( 8, 4, 10, 0 ) + sleep(6) + grav( 9, 4, 10, 0 ) + sleep(6) + grav( 7, 3, 40, 1 ) + sleep(6) + grav( 5, 3, 40, 1 ) + sleep(6) + grav( 6, 3, 40, 1 ) + sleep(6) + grav( 4, 2, 50, 6 ) + sleep(6) + grav( 3, 2, 50, 6 ) + sleep(6) + grav( 2, 2, 75,25 ) + sleep(6) + + + + //MOVEMENT + if( prob(50) ) + src.anchored = FALSE + step(src,pick(alldirs)) + src.anchored = TRUE + +/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) + if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen + qdel(src) + return + for(var/t = -r, t < r, t++) + affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) + return + +/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance) + //Get turf at coordinate + var/turf/T = locate(x, y, z) + if(isnull(T)) return + + //Pulling and/or ex_act-ing movable atoms in that turf + if( prob(pull_chance) ) + for(var/obj/O in T.contents) + if(O.anchored) + O.ex_act(ex_act_force) + else + step_towards(O,src) + for(var/mob/living/M in T.contents) + step_towards(M,src) + + //Destroying the turf + if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) + var/turf/simulated/ST = T + var/base_turf = get_base_turf_by_area(src) + if(ST.type != base_turf) + ST.ChangeTurf(base_turf) diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index e0991edaa2..62a29d823c 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -1,63 +1,63 @@ -/proc/Christmas_Game_Start() - for(var/obj/structure/flora/tree/pine/xmas in world) - if(isNotStationLevel(xmas.z)) continue - for(var/turf/simulated/floor/T in orange(1,xmas)) - for(var/i=1,i<=rand(1,5),i++) - new /obj/item/weapon/a_gift(T) - //for(var/mob/living/simple_mob/corgi/Ian/Ian in mob_list) - // Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) - -/proc/ChristmasEvent() - for(var/obj/structure/flora/tree/pine/xmas in world) - var/mob/living/simple_mob/animal/space/tree/evil_tree = new /mob/living/simple_mob/animal/space/tree(xmas.loc) - evil_tree.icon_state = xmas.icon_state - evil_tree.icon_living = evil_tree.icon_state - evil_tree.icon_dead = evil_tree.icon_state - evil_tree.icon_gib = evil_tree.icon_state - qdel(xmas) - -/obj/item/weapon/toy/xmas_cracker - name = "xmas cracker" - icon = 'icons/obj/christmas.dmi' - icon_state = "cracker" - desc = "Directions for use: Requires two people, one to pull each end." - var/cracked = 0 - -/obj/item/weapon/toy/xmas_cracker/New() - ..() - -/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user) - if( !cracked && (istype(target,/mob/living/silicon) || (istype(target,/mob/living/carbon/human) && !target.get_active_hand())) && target.stat == CONSCIOUS) - target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") - var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc) - Joke.name = "[pick("awful","terrible","unfunny")] joke" - Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", - "Why couldn't the snowman get laid?\n\nHe was frigid!", - "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", - "What happened to the man who stole advent calanders?\n\nHe got 25 days.", - "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", - "Where do you find chili beans?\n\nThe north pole.", - "What do you get from eating tree decorations?\n\nTinsilitis!", - "What do snowmen wear on their heads?\n\nIce caps!", - "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", - "Why doesn't Santa have any children?\n\nBecause he only comes down the chimney.") - new /obj/item/clothing/head/festive(target.loc) - user.update_icons() - cracked = 1 - icon_state = "cracker1" - var/obj/item/weapon/toy/xmas_cracker/other_half = new /obj/item/weapon/toy/xmas_cracker(target) - other_half.cracked = 1 - other_half.icon_state = "cracker2" - target.put_in_active_hand(other_half) - playsound(src, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() - -/obj/item/clothing/head/festive - name = "festive paper hat" - icon_state = "xmashat" - desc = "A crappy paper hat that you are REQUIRED to wear." - flags_inv = 0 - body_parts_covered = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - +/proc/Christmas_Game_Start() + for(var/obj/structure/flora/tree/pine/xmas in world) + if(isNotStationLevel(xmas.z)) continue + for(var/turf/simulated/floor/T in orange(1,xmas)) + for(var/i=1,i<=rand(1,5),i++) + new /obj/item/weapon/a_gift(T) + //for(var/mob/living/simple_mob/corgi/Ian/Ian in mob_list) + // Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) + +/proc/ChristmasEvent() + for(var/obj/structure/flora/tree/pine/xmas in world) + var/mob/living/simple_mob/animal/space/tree/evil_tree = new /mob/living/simple_mob/animal/space/tree(xmas.loc) + evil_tree.icon_state = xmas.icon_state + evil_tree.icon_living = evil_tree.icon_state + evil_tree.icon_dead = evil_tree.icon_state + evil_tree.icon_gib = evil_tree.icon_state + qdel(xmas) + +/obj/item/weapon/toy/xmas_cracker + name = "xmas cracker" + icon = 'icons/obj/christmas.dmi' + icon_state = "cracker" + desc = "Directions for use: Requires two people, one to pull each end." + var/cracked = 0 + +/obj/item/weapon/toy/xmas_cracker/New() + ..() + +/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user) + if( !cracked && (istype(target,/mob/living/silicon) || (istype(target,/mob/living/carbon/human) && !target.get_active_hand())) && target.stat == CONSCIOUS) + target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") + var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc) + Joke.name = "[pick("awful","terrible","unfunny")] joke" + Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", + "Why couldn't the snowman get laid?\n\nHe was frigid!", + "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", + "What happened to the man who stole advent calanders?\n\nHe got 25 days.", + "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", + "Where do you find chili beans?\n\nThe north pole.", + "What do you get from eating tree decorations?\n\nTinsilitis!", + "What do snowmen wear on their heads?\n\nIce caps!", + "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", + "Why doesn't Santa have any children?\n\nBecause he only comes down the chimney.") + new /obj/item/clothing/head/festive(target.loc) + user.update_icons() + cracked = 1 + icon_state = "cracker1" + var/obj/item/weapon/toy/xmas_cracker/other_half = new /obj/item/weapon/toy/xmas_cracker(target) + other_half.cracked = 1 + other_half.icon_state = "cracker2" + target.put_in_active_hand(other_half) + playsound(src, 'sound/effects/snap.ogg', 50, 1) + return 1 + return ..() + +/obj/item/clothing/head/festive + name = "festive paper hat" + icon_state = "xmashat" + desc = "A crappy paper hat that you are REQUIRED to wear." + flags_inv = 0 + body_parts_covered = 0 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + diff --git a/code/game/gamemodes/events/holidays/Other.dm b/code/game/gamemodes/events/holidays/Other.dm index 74b47506aa..bd64fda833 100644 --- a/code/game/gamemodes/events/holidays/Other.dm +++ b/code/game/gamemodes/events/holidays/Other.dm @@ -1,10 +1,10 @@ -/proc/GameOver() - if(!hadevent) - hadevent = 1 - message_admins("The apocalypse has begun! (this holiday event can be disabled by toggling events off within 60 seconds)") - spawn(600) - if(!config.allow_random_events) return - Show2Group4Delay(ScreenText(null,"
    GAME OVER
    "),null,150) - for(var/i=1,i<=4,i++) - spawn_dynamic_event() +/proc/GameOver() + if(!hadevent) + hadevent = 1 + message_admins("The apocalypse has begun! (this holiday event can be disabled by toggling events off within 60 seconds)") + spawn(600) + if(!config.allow_random_events) return + Show2Group4Delay(ScreenText(null,"
    GAME OVER
    "),null,150) + for(var/i=1,i<=4,i++) + spawn_dynamic_event() sleep(50) \ No newline at end of file diff --git a/code/game/gamemodes/events/wormholes.dm b/code/game/gamemodes/events/wormholes.dm index 20f7da63f3..65b21df2ea 100644 --- a/code/game/gamemodes/events/wormholes.dm +++ b/code/game/gamemodes/events/wormholes.dm @@ -1,70 +1,70 @@ -/proc/wormhole_event(var/set_duration = 5 MINUTES, var/wormhole_duration_modifier = 1) - spawn() - var/list/pick_turfs = list() - var/list/Z_choices = list() - Z_choices |= using_map.get_map_levels(1, FALSE) - for(var/turf/simulated/floor/T in world) - if(T.z in Z_choices) - if(!T.block_tele) - pick_turfs += T - - if(pick_turfs.len) - - var/wormhole_max_duration = round((5 MINUTES) * wormhole_duration_modifier) - var/wormhole_min_duration = round((30 SECONDS) * wormhole_duration_modifier) - - //All ready. Announce that bad juju is afoot. - command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg') - - //prob(20) can be approximated to 1 wormhole every 5 turfs! - //admittedly less random but totally worth it >_< - var/event_duration = set_duration - var/number_of_selections = round(pick_turfs.len/(4 * (Z_choices.len + 1)))+1 //+1 to avoid division by zero! - var/sleep_duration = 0.2 SECONDS - var/end_time = world.time + event_duration //the time by which the event should have ended - - var/increment = max(1,round(number_of_selections/50)) -// to_world("DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]") - - var/index = 1 - for(var/I = 1 to number_of_selections) - - //we've run into overtime. End the event - if( end_time < world.time ) -// to_world("DEBUG: we've run into overtime. End the event") - return - if( !pick_turfs.len ) -// to_world("DEBUG: we've run out of turfs to pick. End the event") - return - - //loop it round - index += increment - index %= pick_turfs.len - index++ - - //get our enter and exit locations - var/turf/simulated/floor/enter = pick_turfs[index] - pick_turfs -= enter //remove it from pickable turfs list - if( !enter || !istype(enter) ) continue //sanity - - var/turf/simulated/floor/exit = pick(pick_turfs) -// pick_turfs -= exit - if( !exit || !istype(exit) ) continue //sanity - - create_wormhole(enter,exit,wormhole_min_duration,wormhole_max_duration) - - sleep(sleep_duration) //have a well deserved nap! - - -//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions? -/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf, var/min_duration = 30 SECONDS, var/max_duration = 60 SECONDS) - set waitfor = FALSE - var/obj/effect/portal/P = new /obj/effect/portal( enter ) - P.target = exit - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(min_duration,max_duration)) - qdel(P) +/proc/wormhole_event(var/set_duration = 5 MINUTES, var/wormhole_duration_modifier = 1) + spawn() + var/list/pick_turfs = list() + var/list/Z_choices = list() + Z_choices |= using_map.get_map_levels(1, FALSE) + for(var/turf/simulated/floor/T in world) + if(T.z in Z_choices) + if(!T.block_tele) + pick_turfs += T + + if(pick_turfs.len) + + var/wormhole_max_duration = round((5 MINUTES) * wormhole_duration_modifier) + var/wormhole_min_duration = round((30 SECONDS) * wormhole_duration_modifier) + + //All ready. Announce that bad juju is afoot. + command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg') + + //prob(20) can be approximated to 1 wormhole every 5 turfs! + //admittedly less random but totally worth it >_< + var/event_duration = set_duration + var/number_of_selections = round(pick_turfs.len/(4 * (Z_choices.len + 1)))+1 //+1 to avoid division by zero! + var/sleep_duration = 0.2 SECONDS + var/end_time = world.time + event_duration //the time by which the event should have ended + + var/increment = max(1,round(number_of_selections/50)) +// to_world("DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]") + + var/index = 1 + for(var/I = 1 to number_of_selections) + + //we've run into overtime. End the event + if( end_time < world.time ) +// to_world("DEBUG: we've run into overtime. End the event") + return + if( !pick_turfs.len ) +// to_world("DEBUG: we've run out of turfs to pick. End the event") + return + + //loop it round + index += increment + index %= pick_turfs.len + index++ + + //get our enter and exit locations + var/turf/simulated/floor/enter = pick_turfs[index] + pick_turfs -= enter //remove it from pickable turfs list + if( !enter || !istype(enter) ) continue //sanity + + var/turf/simulated/floor/exit = pick(pick_turfs) +// pick_turfs -= exit + if( !exit || !istype(exit) ) continue //sanity + + create_wormhole(enter,exit,wormhole_min_duration,wormhole_max_duration) + + sleep(sleep_duration) //have a well deserved nap! + + +//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions? +/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf, var/min_duration = 30 SECONDS, var/max_duration = 60 SECONDS) + set waitfor = FALSE + var/obj/effect/portal/P = new /obj/effect/portal( enter ) + P.target = exit + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.failchance = 0 + P.icon_state = "anom" + P.name = "wormhole" + spawn(rand(min_duration,max_duration)) + qdel(P) diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index 0b37fa892f..b9cdf22215 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -1,6 +1,6 @@ -/datum/game_mode/extended - name = "Extended" - config_tag = "extended" - required_players = 0 - round_description = "Just have fun and role-play!" +/datum/game_mode/extended + name = "Extended" + config_tag = "extended" + required_players = 0 + round_description = "Just have fun and role-play!" extended_round_description = "There are no antagonists during extended, unless an admin decides to be cheeky. Just play your character, mess around with your job, and have fun." \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 3a0ccec124..26e0c4572e 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -1,13 +1,13 @@ -/datum/game_mode/malfunction - name = "AI Malfunction" - round_description = "The AI is behaving abnormally and must be stopped." - extended_round_description = "The AI will attempt to hack the APCs around the station in order to gain as much control as possible." - config_tag = "malfunction" - required_players = 2 - required_players_secret = 2 - required_enemies = 1 - end_on_antag_death = 0 - auto_recall_shuttle = 0 - antag_tags = list(MODE_MALFUNCTION) - disabled_jobs = list("AI") - votable = 0 +/datum/game_mode/malfunction + name = "AI Malfunction" + round_description = "The AI is behaving abnormally and must be stopped." + extended_round_description = "The AI will attempt to hack the APCs around the station in order to gain as much control as possible." + config_tag = "malfunction" + required_players = 2 + required_players_secret = 2 + required_enemies = 1 + end_on_antag_death = 0 + auto_recall_shuttle = 0 + antag_tags = list(MODE_MALFUNCTION) + disabled_jobs = list("AI") + votable = 0 diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index d504fcf6a7..191e447813 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -1,145 +1,145 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/game_mode/var/list/memes = list() - -/datum/game_mode/meme - name = "Memetic Anomaly" - config_tag = "meme" - required_players = 3 - required_players_secret = 10 - restricted_jobs = list("AI", "Cyborg") - recommended_enemies = 2 // need at least a meme and a host - votable = 0 // temporarily disable this mode for voting - end_on_antag_death = 1 - - var/var/list/datum/mind/first_hosts = list() - var/var/list/assigned_hosts = list() - - var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time - var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target - var/const/prob_right_murder_target_h = 50 // upper bound on probability of naimg the right assassination target - - var/const/prob_int_item = 50 // intercept names the theft target half the time - var/const/prob_right_item_l = 25 // lower bound on probability of naming right theft target - var/const/prob_right_item_h = 50 // upper bound on probability of naming the right theft target - - var/const/prob_int_sab_target = 50 // intercept names the sabotage target half the time - var/const/prob_right_sab_target_l = 25 // lower bound on probability of naming right sabotage target - var/const/prob_right_sab_target_h = 50 // upper bound on probability of naming right sabotage target - - var/const/prob_right_killer_l = 25 //lower bound on probability of naming the right operative - var/const/prob_right_killer_h = 50 //upper bound on probability of naming the right operative - var/const/prob_right_objective_l = 25 //lower bound on probability of determining the objective correctly - var/const/prob_right_objective_h = 50 //upper bound on probability of determining the objective correctly - - var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - -/datum/game_mode/meme/announce() - to_world("The current game mode is - Meme!") - to_world("An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.") - -/datum/game_mode/meme/can_start() - if(!..()) - return 0 - - // for every 10 players, get 1 meme, and for each meme, get a host - // also make sure that there's at least one meme and one host - recommended_enemies = max(src.num_players() / 20 * 2, 2) - - var/list/datum/mind/possible_memes = get_players_for_role(BE_MEME) - - if(possible_memes.len < 2) - log_admin("MODE FAILURE: MEME. NOT ENOUGH MEME CANDIDATES.") - return 0 // not enough candidates for meme - - // for each 2 possible memes, add one meme and one host - while(possible_memes.len >= 2) - var/datum/mind/meme = pick(possible_memes) - possible_memes.Remove(meme) - - var/datum/mind/first_host = pick(possible_memes) - possible_memes.Remove(first_host) - memes += meme - first_hosts += first_host - - // so that we can later know which host belongs to which meme - assigned_hosts[meme.key] = first_host - - meme.assigned_role = "MODE" //So they aren't chosen for other jobs. - meme.special_role = "Meme" - - return 1 - -/datum/game_mode/meme/pre_setup() - return 1 - - -/datum/game_mode/meme/post_setup() - // create a meme and enter it - for(var/datum/mind/meme in memes) - var/mob/living/parasite/meme/M = new - var/mob/original = meme.current - meme.transfer_to(M) - M.clearHUD() - - // get the host for this meme - var/datum/mind/first_host = assigned_hosts[meme.key] - // this is a redundant check, but I don't think the above works.. - // if picking hosts works with this method, remove the method above - if(!first_host) - first_host = pick(first_hosts) - first_hosts.Remove(first_host) - M.enter_host(first_host.current) - forge_meme_objectives(meme, first_host) - - qdel(original) - - log_admin("Created [memes.len] memes.") - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - ..() - return - - -/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host) - if (config.objectives_disabled) - return - - // meme always needs to attune X hosts - var/datum/objective/meme_attune/attune_objective = new - attune_objective.owner = meme - attune_objective.gen_amount_goal(3,6) - meme.objectives += attune_objective - - // generate some random objectives, use standard traitor objectives - var/job = first_host.assigned_role - - for(var/datum/objective/o in SelectObjectives(job, meme)) - o.owner = meme - meme.objectives += o - - greet_meme(meme) - - return - -/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) - if (you_are) - to_chat(meme.current, "You are a meme!") - show_objectives(meme) - return - -/datum/game_mode/meme/check_finished() - var/memes_alive = 0 - for(var/datum/mind/meme in memes) - if(!istype(meme.current,/mob/living)) - continue - if(meme.current.stat==2) - continue - memes_alive++ - - if (memes_alive) - return ..() - else - return 1 +//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 + +/datum/game_mode/var/list/memes = list() + +/datum/game_mode/meme + name = "Memetic Anomaly" + config_tag = "meme" + required_players = 3 + required_players_secret = 10 + restricted_jobs = list("AI", "Cyborg") + recommended_enemies = 2 // need at least a meme and a host + votable = 0 // temporarily disable this mode for voting + end_on_antag_death = 1 + + var/var/list/datum/mind/first_hosts = list() + var/var/list/assigned_hosts = list() + + var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time + var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target + var/const/prob_right_murder_target_h = 50 // upper bound on probability of naimg the right assassination target + + var/const/prob_int_item = 50 // intercept names the theft target half the time + var/const/prob_right_item_l = 25 // lower bound on probability of naming right theft target + var/const/prob_right_item_h = 50 // upper bound on probability of naming the right theft target + + var/const/prob_int_sab_target = 50 // intercept names the sabotage target half the time + var/const/prob_right_sab_target_l = 25 // lower bound on probability of naming right sabotage target + var/const/prob_right_sab_target_h = 50 // upper bound on probability of naming right sabotage target + + var/const/prob_right_killer_l = 25 //lower bound on probability of naming the right operative + var/const/prob_right_killer_h = 50 //upper bound on probability of naming the right operative + var/const/prob_right_objective_l = 25 //lower bound on probability of determining the objective correctly + var/const/prob_right_objective_h = 50 //upper bound on probability of determining the objective correctly + + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) + +/datum/game_mode/meme/announce() + to_world("The current game mode is - Meme!") + to_world("An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.") + +/datum/game_mode/meme/can_start() + if(!..()) + return 0 + + // for every 10 players, get 1 meme, and for each meme, get a host + // also make sure that there's at least one meme and one host + recommended_enemies = max(src.num_players() / 20 * 2, 2) + + var/list/datum/mind/possible_memes = get_players_for_role(BE_MEME) + + if(possible_memes.len < 2) + log_admin("MODE FAILURE: MEME. NOT ENOUGH MEME CANDIDATES.") + return 0 // not enough candidates for meme + + // for each 2 possible memes, add one meme and one host + while(possible_memes.len >= 2) + var/datum/mind/meme = pick(possible_memes) + possible_memes.Remove(meme) + + var/datum/mind/first_host = pick(possible_memes) + possible_memes.Remove(first_host) + memes += meme + first_hosts += first_host + + // so that we can later know which host belongs to which meme + assigned_hosts[meme.key] = first_host + + meme.assigned_role = "MODE" //So they aren't chosen for other jobs. + meme.special_role = "Meme" + + return 1 + +/datum/game_mode/meme/pre_setup() + return 1 + + +/datum/game_mode/meme/post_setup() + // create a meme and enter it + for(var/datum/mind/meme in memes) + var/mob/living/parasite/meme/M = new + var/mob/original = meme.current + meme.transfer_to(M) + M.clearHUD() + + // get the host for this meme + var/datum/mind/first_host = assigned_hosts[meme.key] + // this is a redundant check, but I don't think the above works.. + // if picking hosts works with this method, remove the method above + if(!first_host) + first_host = pick(first_hosts) + first_hosts.Remove(first_host) + M.enter_host(first_host.current) + forge_meme_objectives(meme, first_host) + + qdel(original) + + log_admin("Created [memes.len] memes.") + + spawn (rand(waittime_l, waittime_h)) + send_intercept() + ..() + return + + +/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host) + if (config.objectives_disabled) + return + + // meme always needs to attune X hosts + var/datum/objective/meme_attune/attune_objective = new + attune_objective.owner = meme + attune_objective.gen_amount_goal(3,6) + meme.objectives += attune_objective + + // generate some random objectives, use standard traitor objectives + var/job = first_host.assigned_role + + for(var/datum/objective/o in SelectObjectives(job, meme)) + o.owner = meme + meme.objectives += o + + greet_meme(meme) + + return + +/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) + if (you_are) + to_chat(meme.current, "You are a meme!") + show_objectives(meme) + return + +/datum/game_mode/meme/check_finished() + var/memes_alive = 0 + for(var/datum/mind/meme in memes) + if(!istype(meme.current,/mob/living)) + continue + if(meme.current.stat==2) + continue + memes_alive++ + + if (memes_alive) + return ..() + else + return 1 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 3c9244bc84..57d5dadeac 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -1,49 +1,49 @@ -#define METEOR_DELAY 6000 - -/datum/game_mode/meteor - name = "Meteor" - round_description = "The space station has been stuck in a major meteor shower." - extended_round_description = "The station is on an unavoidable collision course with an asteroid field. The station will be continuously slammed with meteors, venting hallways, rooms, and ultimately destroying a majority of the basic life functions of the entire structure. Coordinate with your fellow crew members to survive the inevitable destruction of the station and get back home in one piece!" - config_tag = "meteor" - required_players = 0 - votable = 0 - deny_respawn = 0 - var/next_wave = METEOR_DELAY - -/datum/game_mode/meteor/post_setup() - defer_powernet_rebuild = 2//Might help with the lag - ..() - -/datum/game_mode/meteor/process() - if(world.time >= next_wave) - next_wave = world.time + meteor_wave_delay - spawn() spawn_meteors(6, meteors_normal) - -/datum/game_mode/meteor/declare_completion() - var/text - var/survivors = 0 - for(var/mob/living/player in player_list) - if(player.stat != DEAD) - var/turf/location = get_turf(player.loc) - if(!location) continue - switch(location.loc.type) - if( /area/shuttle/escape/centcom ) - text += "
    [player.real_name] escaped on the emergency shuttle" - if( /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom ) - text += "
    [player.real_name] escaped in a life pod." - else - text += "
    [player.real_name] survived but is stranded without any hope of rescue." - survivors++ - - if(survivors) - to_world("The following survived the meteor storm:[text]") - else - to_world("Nobody survived the meteor storm!") - - feedback_set_details("round_end_result","end - evacuation") - feedback_set("round_end_result",survivors) - - ..() - return 1 - +#define METEOR_DELAY 6000 + +/datum/game_mode/meteor + name = "Meteor" + round_description = "The space station has been stuck in a major meteor shower." + extended_round_description = "The station is on an unavoidable collision course with an asteroid field. The station will be continuously slammed with meteors, venting hallways, rooms, and ultimately destroying a majority of the basic life functions of the entire structure. Coordinate with your fellow crew members to survive the inevitable destruction of the station and get back home in one piece!" + config_tag = "meteor" + required_players = 0 + votable = 0 + deny_respawn = 0 + var/next_wave = METEOR_DELAY + +/datum/game_mode/meteor/post_setup() + defer_powernet_rebuild = 2//Might help with the lag + ..() + +/datum/game_mode/meteor/process() + if(world.time >= next_wave) + next_wave = world.time + meteor_wave_delay + spawn() spawn_meteors(6, meteors_normal) + +/datum/game_mode/meteor/declare_completion() + var/text + var/survivors = 0 + for(var/mob/living/player in player_list) + if(player.stat != DEAD) + var/turf/location = get_turf(player.loc) + if(!location) continue + switch(location.loc.type) + if( /area/shuttle/escape/centcom ) + text += "
    [player.real_name] escaped on the emergency shuttle" + if( /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom ) + text += "
    [player.real_name] escaped in a life pod." + else + text += "
    [player.real_name] survived but is stranded without any hope of rescue." + survivors++ + + if(survivors) + to_world("The following survived the meteor storm:[text]") + else + to_world("Nobody survived the meteor storm!") + + feedback_set_details("round_end_result","end - evacuation") + feedback_set("round_end_result",survivors) + + ..() + return 1 + #undef METEOR_DELAY \ No newline at end of file diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 6b88e45765..ba30dbae53 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,345 +1,345 @@ -/var/const/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 - -//for space dust event -/var/list/meteors_dust = list(/obj/effect/meteor/dust) - -//for normal meteor event -/var/list/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 threatening meteor event -/var/list/meteors_threatening = list( - /obj/effect/meteor/medium=5, - /obj/effect/meteor/big=10, - /obj/effect/meteor/flaming=3, - /obj/effect/meteor/irradiated=3, - /obj/effect/meteor/emp=3) - -//for catastrophic meteor event -/var/list/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/emp=10) - - - -/////////////////////////////// -//Meteor spawning global procs -/////////////////////////////// - -/proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide, var/zlevel) - log_debug("Spawning [number] meteors on the [dir2text(startSide)] of [zlevel]") - for(var/i = 0; i < number; i++) - spawn_meteor(meteortypes, startSide, zlevel) - -/proc/spawn_meteor(var/list/meteortypes, var/startSide, var/startLevel) - if(isnull(startSide)) - startSide = pick(cardinal) - if(isnull(startLevel)) - startLevel = pick(using_map.station_levels - using_map.sealed_levels) - - var/turf/pickedstart = spaceDebrisStartLoc(startSide, startLevel) - var/turf/pickedgoal = spaceDebrisFinishLoc(startSide, startLevel) - - var/Me = pickweight(meteortypes) - var/obj/effect/meteor/M = new Me(pickedstart) - M.dest = pickedgoal - spawn(0) - walk_towards(M, M.dest, 3) //VOREStation Edit - Slower Meteors - return - -/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) - var/turf/T = locate(startx, starty, Z) - return T - -/proc/spaceDebrisFinishLoc(startSide, Z) - var/endy - var/endx - switch(startSide) - if(NORTH) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/turf/T = locate(endx, endy, Z) - return T - -// Override for special behavior when getting hit by meteors, and only meteors. Return one if the meteor hasn't been 'stopped'. -/atom/proc/handle_meteor_impact(var/obj/effect/meteor/meteor) - return TRUE - -/////////////////////// -//The meteor effect -////////////////////// - -/obj/effect/meteor - name = "the concept of meteor" - desc = "You should probably run instead of gawking at this." - 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 = FALSE - var/z_original - - var/meteordrop = /obj/item/weapon/ore/iron - var/dropamt = 2 - - // How much damage it does to walls, using take_damage(). - // Normal walls will die to 150 or more, where as reinforced walls need 800 to penetrate. Durasteel walls need 1200 damage to go through. - // Multiply this and the hits var to get a rough idea of how penetrating a meteor is. - var/wall_power = 100 - -/obj/effect/meteor/Initialize() - . = ..() - z_original = z - GLOB.meteor_list += src - -/obj/effect/meteor/Move() - if(z != z_original || loc == dest) - qdel(src) - return - - . = ..() //process movement... - -/obj/effect/meteor/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - var/turf/T = get_turf(loc) - ram_turf(T) - - if(prob(10) && !istype(T, /turf/space)) //randomly takes a 'hit' from ramming - get_hit() - -/obj/effect/meteor/Destroy() - walk(src,FALSE) //this cancels the walk_towards() proc - GLOB.meteor_list -= src - return ..() - -/obj/effect/meteor/New() - ..() - SpinAnimation() - -/obj/effect/meteor/Bump(atom/A) - if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats - if(A) - if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield. - ram_turf(get_turf(A)) - get_hit() - else - die(FALSE) - -/obj/effect/meteor/CanPass(atom/movable/mover, turf/target) - return istype(mover, /obj/effect/meteor) ? TRUE : ..() - -/obj/effect/meteor/proc/ram_turf(var/turf/T) - //first bust whatever is in the turf - for(var/atom/A in T) - if(A == src) // Don't hit ourselves. - continue - if(isturf(A)) // Don't hit floors. We'll deal with walls later. - continue - A.ex_act(hitpwr) - - //then, ram the turf if it still exists - if(T) - if(istype(T, /turf/simulated/wall)) - var/turf/simulated/wall/W = T - W.take_damage(wall_power) // Stronger walls can halt asteroids. - -/obj/effect/meteor/proc/get_shield_damage() - return max(((max(hits, 2)) * (heavy + 1) * rand(6, 12)) / hitpwr , 0) - -//process getting 'hit' by colliding with a dense object -//or randomly when ramming turfs -/obj/effect/meteor/proc/get_hit() - hits-- - if(hits <= 0) - die(TRUE) - -/obj/effect/meteor/proc/die(var/explode = TRUE) - make_debris() - meteor_effect(explode) - qdel(src) - -/obj/effect/meteor/ex_act() - return - -/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weapon/pickaxe)) - qdel(src) - return - ..() - -/obj/effect/meteor/bullet_act(var/obj/item/projectile/Proj) - if(Proj.excavation_amount) - get_hit() - - if(!QDELETED(src)) - wall_power -= Proj.excavation_amount + Proj.damage + (Proj.hitscan * 25) // Instant-impact projectiles are inherently better at dealing with meteors. - - if(wall_power <= 0) - die(FALSE) // If you kill the meteor, then it dies. - return - return - -/obj/effect/meteor/proc/make_debris() - for(var/throws = dropamt, throws > 0, throws--) - var/obj/item/O = new meteordrop(get_turf(src)) - O.throw_at(dest, 5, 10) - -/obj/effect/meteor/proc/shake_players() - for(var/mob/M in player_list) - 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 ? 3 : 5, dist > 20 ? 1 : 3) - -/obj/effect/meteor/proc/meteor_effect(var/explode) - if(heavy) - shake_players() - - -/////////////////////// -//Meteor types -/////////////////////// - -// Dust breaks windows and hurts normal walls, generally more of an annoyance than a danger unless two happen to hit the same spot. -/obj/effect/meteor/dust - name = "space dust" - icon_state = "dust" - pass_flags = PASSTABLE | PASSGRILLE - hits = 1 - hitpwr = 3 - meteordrop = /obj/item/weapon/ore/glass - wall_power = 50 - -// Medium-sized meteors aren't very special and can be stopped easily by r-walls. -/obj/effect/meteor/medium - name = "meteor" - dropamt = 3 - wall_power = 200 - -/obj/effect/meteor/medium/meteor_effect(var/explode) - ..() - if(explode) - explosion(src.loc, 0, 1, 2, 3, 0) - -// Large-sized meteors generally pack the most punch, but are more concentrated towards the epicenter. -/obj/effect/meteor/big - name = "large meteor" - icon_state = "large" - hits = 8 - heavy = 1 - dropamt = 4 - wall_power = 400 - -/obj/effect/meteor/big/meteor_effect(var/explode) - ..() - if(explode) - explosion(src.loc, 1, 2, 3, 4, 0) - -// 'Flaming' meteors do less overall damage but are spread out more due to a larger but weaker explosion at the end. -/obj/effect/meteor/flaming - name = "flaming meteor" - icon_state = "flaming" - hits = 5 - heavy = 1 - meteordrop = /obj/item/weapon/ore/phoron - wall_power = 100 - -/obj/effect/meteor/flaming/meteor_effect(var/explode) - ..() - if(explode) - explosion(src.loc, 1, 2, 3, 4, 0, 0, 5) - -// Irradiated meteors do less physical damage but project a ten-tile ranged pulse of radiation upon exploding. -/obj/effect/meteor/irradiated - name = "glowing meteor" - icon_state = "glowing" - heavy = 1 - meteordrop = /obj/item/weapon/ore/uranium - wall_power = 75 - - -/obj/effect/meteor/irradiated/meteor_effect(var/explode) - ..() - if(explode) - explosion(src.loc, 0, 0, 4, 3, 0) - new /obj/effect/decal/cleanable/greenglow(get_turf(src)) - SSradiation.radiate(src, 50) - -// This meteor fries toasters. -/obj/effect/meteor/emp - name = "conducting meteor" - icon_state = "glowing_blue" - desc = "Hide your floppies!" - meteordrop = /obj/item/weapon/ore/osmium - dropamt = 3 - wall_power = 80 - -/obj/effect/meteor/emp/meteor_effect(var/explode) - ..() - // Best case scenario: Comparable to a low-yield EMP grenade. - // Worst case scenario: Comparable to a standard yield EMP grenade. - empulse(src, rand(1, 3), rand(2, 4), rand(3, 7), rand(5, 10)) - -/obj/effect/meteor/emp/get_shield_damage() - return ..() * rand(2,4) - -//Station buster Tunguska -/obj/effect/meteor/tunguska - name = "tunguska meteor" - icon_state = "flaming" - desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity" - hits = 30 - hitpwr = 1 - heavy = 1 - meteordrop = /obj/item/weapon/ore/phoron - wall_power = 150 - -/obj/effect/meteor/tunguska/meteor_effect(var/explode) - ..() - if(explode) - explosion(src.loc, 3, 6, 9, 20, 0) - -/obj/effect/meteor/tunguska/Bump() - ..() - if(prob(20)) +/var/const/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 + +//for space dust event +/var/list/meteors_dust = list(/obj/effect/meteor/dust) + +//for normal meteor event +/var/list/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 threatening meteor event +/var/list/meteors_threatening = list( + /obj/effect/meteor/medium=5, + /obj/effect/meteor/big=10, + /obj/effect/meteor/flaming=3, + /obj/effect/meteor/irradiated=3, + /obj/effect/meteor/emp=3) + +//for catastrophic meteor event +/var/list/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/emp=10) + + + +/////////////////////////////// +//Meteor spawning global procs +/////////////////////////////// + +/proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide, var/zlevel) + log_debug("Spawning [number] meteors on the [dir2text(startSide)] of [zlevel]") + for(var/i = 0; i < number; i++) + spawn_meteor(meteortypes, startSide, zlevel) + +/proc/spawn_meteor(var/list/meteortypes, var/startSide, var/startLevel) + if(isnull(startSide)) + startSide = pick(cardinal) + if(isnull(startLevel)) + startLevel = pick(using_map.station_levels - using_map.sealed_levels) + + var/turf/pickedstart = spaceDebrisStartLoc(startSide, startLevel) + var/turf/pickedgoal = spaceDebrisFinishLoc(startSide, startLevel) + + var/Me = pickweight(meteortypes) + var/obj/effect/meteor/M = new Me(pickedstart) + M.dest = pickedgoal + spawn(0) + walk_towards(M, M.dest, 3) //VOREStation Edit - Slower Meteors + return + +/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) + var/turf/T = locate(startx, starty, Z) + return T + +/proc/spaceDebrisFinishLoc(startSide, Z) + var/endy + var/endx + switch(startSide) + if(NORTH) + endy = TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(EAST) + endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) + endx = TRANSITIONEDGE + if(SOUTH) + endy = world.maxy-TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(WEST) + endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) + endx = world.maxx-TRANSITIONEDGE + var/turf/T = locate(endx, endy, Z) + return T + +// Override for special behavior when getting hit by meteors, and only meteors. Return one if the meteor hasn't been 'stopped'. +/atom/proc/handle_meteor_impact(var/obj/effect/meteor/meteor) + return TRUE + +/////////////////////// +//The meteor effect +////////////////////// + +/obj/effect/meteor + name = "the concept of meteor" + desc = "You should probably run instead of gawking at this." + 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 = FALSE + var/z_original + + var/meteordrop = /obj/item/weapon/ore/iron + var/dropamt = 2 + + // How much damage it does to walls, using take_damage(). + // Normal walls will die to 150 or more, where as reinforced walls need 800 to penetrate. Durasteel walls need 1200 damage to go through. + // Multiply this and the hits var to get a rough idea of how penetrating a meteor is. + var/wall_power = 100 + +/obj/effect/meteor/Initialize() + . = ..() + z_original = z + GLOB.meteor_list += src + +/obj/effect/meteor/Move() + if(z != z_original || loc == dest) + qdel(src) + return + + . = ..() //process movement... + +/obj/effect/meteor/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + var/turf/T = get_turf(loc) + ram_turf(T) + + if(prob(10) && !istype(T, /turf/space)) //randomly takes a 'hit' from ramming + get_hit() + +/obj/effect/meteor/Destroy() + walk(src,FALSE) //this cancels the walk_towards() proc + GLOB.meteor_list -= src + return ..() + +/obj/effect/meteor/New() + ..() + SpinAnimation() + +/obj/effect/meteor/Bump(atom/A) + if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats + if(A) + if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield. + ram_turf(get_turf(A)) + get_hit() + else + die(FALSE) + +/obj/effect/meteor/CanPass(atom/movable/mover, turf/target) + return istype(mover, /obj/effect/meteor) ? TRUE : ..() + +/obj/effect/meteor/proc/ram_turf(var/turf/T) + //first bust whatever is in the turf + for(var/atom/A in T) + if(A == src) // Don't hit ourselves. + continue + if(isturf(A)) // Don't hit floors. We'll deal with walls later. + continue + A.ex_act(hitpwr) + + //then, ram the turf if it still exists + if(T) + if(istype(T, /turf/simulated/wall)) + var/turf/simulated/wall/W = T + W.take_damage(wall_power) // Stronger walls can halt asteroids. + +/obj/effect/meteor/proc/get_shield_damage() + return max(((max(hits, 2)) * (heavy + 1) * rand(6, 12)) / hitpwr , 0) + +//process getting 'hit' by colliding with a dense object +//or randomly when ramming turfs +/obj/effect/meteor/proc/get_hit() + hits-- + if(hits <= 0) + die(TRUE) + +/obj/effect/meteor/proc/die(var/explode = TRUE) + make_debris() + meteor_effect(explode) + qdel(src) + +/obj/effect/meteor/ex_act() + return + +/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(istype(W, /obj/item/weapon/pickaxe)) + qdel(src) + return + ..() + +/obj/effect/meteor/bullet_act(var/obj/item/projectile/Proj) + if(Proj.excavation_amount) + get_hit() + + if(!QDELETED(src)) + wall_power -= Proj.excavation_amount + Proj.damage + (Proj.hitscan * 25) // Instant-impact projectiles are inherently better at dealing with meteors. + + if(wall_power <= 0) + die(FALSE) // If you kill the meteor, then it dies. + return + return + +/obj/effect/meteor/proc/make_debris() + for(var/throws = dropamt, throws > 0, throws--) + var/obj/item/O = new meteordrop(get_turf(src)) + O.throw_at(dest, 5, 10) + +/obj/effect/meteor/proc/shake_players() + for(var/mob/M in player_list) + 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 ? 3 : 5, dist > 20 ? 1 : 3) + +/obj/effect/meteor/proc/meteor_effect(var/explode) + if(heavy) + shake_players() + + +/////////////////////// +//Meteor types +/////////////////////// + +// Dust breaks windows and hurts normal walls, generally more of an annoyance than a danger unless two happen to hit the same spot. +/obj/effect/meteor/dust + name = "space dust" + icon_state = "dust" + pass_flags = PASSTABLE | PASSGRILLE + hits = 1 + hitpwr = 3 + meteordrop = /obj/item/weapon/ore/glass + wall_power = 50 + +// Medium-sized meteors aren't very special and can be stopped easily by r-walls. +/obj/effect/meteor/medium + name = "meteor" + dropamt = 3 + wall_power = 200 + +/obj/effect/meteor/medium/meteor_effect(var/explode) + ..() + if(explode) + explosion(src.loc, 0, 1, 2, 3, 0) + +// Large-sized meteors generally pack the most punch, but are more concentrated towards the epicenter. +/obj/effect/meteor/big + name = "large meteor" + icon_state = "large" + hits = 8 + heavy = 1 + dropamt = 4 + wall_power = 400 + +/obj/effect/meteor/big/meteor_effect(var/explode) + ..() + if(explode) + explosion(src.loc, 1, 2, 3, 4, 0) + +// 'Flaming' meteors do less overall damage but are spread out more due to a larger but weaker explosion at the end. +/obj/effect/meteor/flaming + name = "flaming meteor" + icon_state = "flaming" + hits = 5 + heavy = 1 + meteordrop = /obj/item/weapon/ore/phoron + wall_power = 100 + +/obj/effect/meteor/flaming/meteor_effect(var/explode) + ..() + if(explode) + explosion(src.loc, 1, 2, 3, 4, 0, 0, 5) + +// Irradiated meteors do less physical damage but project a ten-tile ranged pulse of radiation upon exploding. +/obj/effect/meteor/irradiated + name = "glowing meteor" + icon_state = "glowing" + heavy = 1 + meteordrop = /obj/item/weapon/ore/uranium + wall_power = 75 + + +/obj/effect/meteor/irradiated/meteor_effect(var/explode) + ..() + if(explode) + explosion(src.loc, 0, 0, 4, 3, 0) + new /obj/effect/decal/cleanable/greenglow(get_turf(src)) + SSradiation.radiate(src, 50) + +// This meteor fries toasters. +/obj/effect/meteor/emp + name = "conducting meteor" + icon_state = "glowing_blue" + desc = "Hide your floppies!" + meteordrop = /obj/item/weapon/ore/osmium + dropamt = 3 + wall_power = 80 + +/obj/effect/meteor/emp/meteor_effect(var/explode) + ..() + // Best case scenario: Comparable to a low-yield EMP grenade. + // Worst case scenario: Comparable to a standard yield EMP grenade. + empulse(src, rand(1, 3), rand(2, 4), rand(3, 7), rand(5, 10)) + +/obj/effect/meteor/emp/get_shield_damage() + return ..() * rand(2,4) + +//Station buster Tunguska +/obj/effect/meteor/tunguska + name = "tunguska meteor" + icon_state = "flaming" + desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity" + hits = 30 + hitpwr = 1 + heavy = 1 + meteordrop = /obj/item/weapon/ore/phoron + wall_power = 150 + +/obj/effect/meteor/tunguska/meteor_effect(var/explode) + ..() + if(explode) + explosion(src.loc, 3, 6, 9, 20, 0) + +/obj/effect/meteor/tunguska/Bump() + ..() + if(prob(20)) explosion(src.loc,2,4,6,8) \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index a0a5cb6fe8..f6f2d1f68d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,93 +1,93 @@ -/* - MERCENARY ROUNDTYPE -*/ - -var/list/nuke_disks = list() - -/datum/game_mode/nuclear - name = "Mercenary" - round_description = "A mercenary strike force is approaching the station!" - extended_round_description = "The Company's majority control of phoron in the system has marked the \ - station to be a highly valuable target for many competing organizations and individuals. Being a \ - colony of sizable population and considerable wealth causes it to often be the target of various \ - attempts of robbery, fraud and other malicious actions." - config_tag = "mercenary" - required_players = 12 - required_players_secret = 12 - required_enemies = 3 - end_on_antag_death = 0 - var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station - var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level - antag_tags = list(MODE_MERCENARY) - -//delete all nuke disks not on a station zlevel -/datum/game_mode/nuclear/proc/check_nuke_disks() - for(var/obj/item/weapon/disk/nuclear/N in nuke_disks) - if(isNotStationLevel(N.z)) qdel(N) - -//checks if L has a nuke disk on their person -/datum/game_mode/nuclear/proc/check_mob(mob/living/L) - for(var/obj/item/weapon/disk/nuclear/N in nuke_disks) - if(N.storage_depth(L) >= 0) - return 1 - return 0 - -/datum/game_mode/nuclear/declare_completion() - if(config.objectives_disabled) - ..() - return - var/disk_rescued = 1 - for(var/obj/item/weapon/disk/nuclear/D in nuke_disks) - var/disk_area = get_area(D) - if(!is_type_in_list(disk_area, centcom_areas)) - disk_rescued = 0 - break - var/crew_evacuated = (emergency_shuttle.returned()) - - if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) - feedback_set_details("round_end_result","win - syndicate nuke") - to_world("Mercenary Major Victory!") - to_world("[syndicate_name()] operatives have destroyed [station_name()]!") - - else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) - feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time") - to_world("Total Annihilation") - to_world("[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!") - - else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) - feedback_set_details("round_end_result","halfwin - blew wrong station") - to_world("Crew Minor Victory") - to_world("[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!") - - else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) - feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time") - to_world("[syndicate_name()] operatives have earned Darwin Award!") - to_world("[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't lose the disk!") - - else if (disk_rescued && mercs.antags_are_dead()) - feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead") - to_world("Crew Major Victory!") - to_world("The Research Staff has saved the disc and killed the [syndicate_name()] Operatives") - - else if ( disk_rescued ) - feedback_set_details("round_end_result","loss - evacuation - disk secured") - to_world("Crew Major Victory") - to_world("The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!") - - else if (!disk_rescued && mercs.antags_are_dead()) - feedback_set_details("round_end_result","loss - evacuation - disk not secured") - to_world("Mercenary Minor Victory!") - to_world("The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!") - - else if (!disk_rescued && crew_evacuated) - feedback_set_details("round_end_result","halfwin - detonation averted") - to_world("Mercenary Minor Victory!") - to_world("[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted. Next time, don't lose the disk!") - - else if (!disk_rescued && !crew_evacuated) - feedback_set_details("round_end_result","halfwin - interrupted") - to_world("Neutral Victory") - to_world("Round was mysteriously interrupted!") - - ..() - return +/* + MERCENARY ROUNDTYPE +*/ + +var/list/nuke_disks = list() + +/datum/game_mode/nuclear + name = "Mercenary" + round_description = "A mercenary strike force is approaching the station!" + extended_round_description = "The Company's majority control of phoron in the system has marked the \ + station to be a highly valuable target for many competing organizations and individuals. Being a \ + colony of sizable population and considerable wealth causes it to often be the target of various \ + attempts of robbery, fraud and other malicious actions." + config_tag = "mercenary" + required_players = 12 + required_players_secret = 12 + required_enemies = 3 + end_on_antag_death = 0 + var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station + var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level + antag_tags = list(MODE_MERCENARY) + +//delete all nuke disks not on a station zlevel +/datum/game_mode/nuclear/proc/check_nuke_disks() + for(var/obj/item/weapon/disk/nuclear/N in nuke_disks) + if(isNotStationLevel(N.z)) qdel(N) + +//checks if L has a nuke disk on their person +/datum/game_mode/nuclear/proc/check_mob(mob/living/L) + for(var/obj/item/weapon/disk/nuclear/N in nuke_disks) + if(N.storage_depth(L) >= 0) + return 1 + return 0 + +/datum/game_mode/nuclear/declare_completion() + if(config.objectives_disabled) + ..() + return + var/disk_rescued = 1 + for(var/obj/item/weapon/disk/nuclear/D in nuke_disks) + var/disk_area = get_area(D) + if(!is_type_in_list(disk_area, centcom_areas)) + disk_rescued = 0 + break + var/crew_evacuated = (emergency_shuttle.returned()) + + if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) + feedback_set_details("round_end_result","win - syndicate nuke") + to_world("Mercenary Major Victory!") + to_world("[syndicate_name()] operatives have destroyed [station_name()]!") + + else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) + feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time") + to_world("Total Annihilation") + to_world("[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!") + + else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) + feedback_set_details("round_end_result","halfwin - blew wrong station") + to_world("Crew Minor Victory") + to_world("[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!") + + else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) + feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time") + to_world("[syndicate_name()] operatives have earned Darwin Award!") + to_world("[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't lose the disk!") + + else if (disk_rescued && mercs.antags_are_dead()) + feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead") + to_world("Crew Major Victory!") + to_world("The Research Staff has saved the disc and killed the [syndicate_name()] Operatives") + + else if ( disk_rescued ) + feedback_set_details("round_end_result","loss - evacuation - disk secured") + to_world("Crew Major Victory") + to_world("The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!") + + else if (!disk_rescued && mercs.antags_are_dead()) + feedback_set_details("round_end_result","loss - evacuation - disk not secured") + to_world("Mercenary Minor Victory!") + to_world("The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!") + + else if (!disk_rescued && crew_evacuated) + feedback_set_details("round_end_result","halfwin - detonation averted") + to_world("Mercenary Minor Victory!") + to_world("[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted. Next time, don't lose the disk!") + + else if (!disk_rescued && !crew_evacuated) + feedback_set_details("round_end_result","halfwin - interrupted") + to_world("Neutral Victory") + to_world("Round was mysteriously interrupted!") + + ..() + return diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 7c51611bf2..2a60b7ef8f 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -1,317 +1,317 @@ -/obj/item/weapon/pinpointer - name = "pinpointer" - icon = 'icons/obj/device.dmi' - icon_state = "pinoff" - slot_flags = SLOT_BELT - w_class = ITEMSIZE_SMALL - item_state = "electronic" - throw_speed = 4 - throw_range = 20 - matter = list(MAT_STEEL = 500) - preserve_item = 1 - var/obj/item/weapon/disk/nuclear/the_disk = null - var/active = 0 - -/obj/item/weapon/pinpointer/Destroy() - active = 0 - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/weapon/pinpointer/attack_self() - if(!active) - active = 1 - START_PROCESSING(SSobj, src) - to_chat(usr, "You activate the pinpointer") - else - active = 0 - STOP_PROCESSING(SSobj, src) - icon_state = "pinoff" - to_chat(usr, "You deactivate the pinpointer") - -/obj/item/weapon/pinpointer/process() - if(!active) - return PROCESS_KILL - - if(!the_disk) - the_disk = locate() - if(!the_disk) - icon_state = "pinonnull" - return - - set_dir(get_dir(src,the_disk)) - - switch(get_dist(src,the_disk)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - -/obj/item/weapon/pinpointer/examine(mob/user) - . = ..() - for(var/obj/machinery/nuclearbomb/bomb in machines) - if(bomb.timing) - . += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" - - - -/obj/item/weapon/pinpointer/advpinpointer - name = "Advanced Pinpointer" - icon = 'icons/obj/device.dmi' - desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal." - var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates. - var/turf/location = null - var/obj/target = null - -/obj/item/weapon/pinpointer/advpinpointer/process() - if(!active) - return PROCESS_KILL - if(mode == 0) - ..() - if(mode == 1) - worklocation() - if(mode == 2) - workobj() - -/obj/item/weapon/pinpointer/advpinpointer/proc/worklocation() - if(!location) - icon_state = "pinonnull" - return - - set_dir(get_dir(src,location)) - - switch(get_dist(src,location)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - -/obj/item/weapon/pinpointer/advpinpointer/proc/workobj() - if(!target) - icon_state = "pinonnull" - return - - set_dir(get_dir(src,target)) - - switch(get_dist(src,target)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - -/obj/item/weapon/pinpointer/advpinpointer/verb/toggle_mode() - set category = "Object" - set name = "Toggle Pinpointer Mode" - set src in view(1) - - active = 0 - icon_state = "pinoff" - target=null - location = null - - switch(tgui_alert(usr, "Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", list("Location", "Disk Recovery", "Other Signature"))) - if("Location") - mode = 1 - - var/locationx = tgui_input_number(usr, "Please input the x coordinate to search for.", "Location?" , "") - if(!locationx || !(usr in view(1,src))) - return - var/locationy = tgui_input_number(usr, "Please input the y coordinate to search for.", "Location?" , "") - if(!locationy || !(usr in view(1,src))) - return - - var/turf/Z = get_turf(src) - - location = locate(locationx,locationy,Z.z) - - to_chat(usr, "You set the pinpointer to locate [locationx],[locationy]") - - return attack_self() - - if("Disk Recovery") - mode = 0 - return attack_self() - - if("Other Signature") - mode = 2 - switch(tgui_alert(usr, "Search for item signature or DNA fragment?", "Signature Mode Select", list("Item", "DNA"))) - - if("Item") - var/datum/objective/steal/itemlist - itemlist = itemlist - var/targetitem = tgui_input_list(usr, "Select item to search for.", "Item Mode Select", itemlist.possible_items) - if(!targetitem) - return - target=locate(itemlist.possible_items[targetitem]) - if(!target) - to_chat(usr, "Failed to locate [targetitem]!") - return - to_chat(usr, "You set the pinpointer to locate [targetitem]") - - if("DNA") - var/DNAstring = tgui_input_text(usr, "Input DNA string to search for." , "Please Enter String." , "") - if(!DNAstring) - return - for(var/mob/living/carbon/M in mob_list) - if(!M.dna) - continue - if(M.dna.unique_enzymes == DNAstring) - target = M - break - - return attack_self() - - -/////////////////////// -//nuke op pinpointers// -/////////////////////// - - -/obj/item/weapon/pinpointer/nukeop - var/mode = 0 //Mode 0 locates disk, mode 1 locates the shuttle - var/obj/machinery/computer/shuttle_control/multi/syndicate/home = null - -/obj/item/weapon/pinpointer/nukeop/attack_self(mob/user as mob) - if(!active) - active = 1 - START_PROCESSING(SSobj, src) - if(!mode) - workdisk() - to_chat(user, "Authentication Disk Locator active.") - else - worklocation() - to_chat(user, "Shuttle Locator active.") - else - active = 0 - STOP_PROCESSING(SSobj, src) - icon_state = "pinoff" - to_chat(user, "You deactivate the pinpointer.") - -/obj/item/weapon/pinpointer/nukeop/process() - if(!active) - return PROCESS_KILL - - switch(mode) - if(0) - workdisk() - if(1) - worklocation() - -/obj/item/weapon/pinpointer/nukeop/proc/workdisk() - if(bomb_set) //If the bomb is set, lead to the shuttle - mode = 1 //Ensures worklocation() continues to work - playsound(src, 'sound/machines/twobeep.ogg', 50, 1) //Plays a beep - visible_message("Shuttle Locator active.") //Lets the mob holding it know that the mode has changed - return //Get outta here - - if(!the_disk) - the_disk = locate() - if(!the_disk) - icon_state = "pinonnull" - return - - set_dir(get_dir(src, the_disk)) - - switch(get_dist(src, the_disk)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - -/obj/item/weapon/pinpointer/nukeop/proc/worklocation() - if(!bomb_set) - mode = 0 - playsound(src, 'sound/machines/twobeep.ogg', 50, 1) - visible_message("Authentication Disk Locator active.") - return - - if(!home) - home = locate() - if(!home) - icon_state = "pinonnull" - return - - if(loc.z != home.z) //If you are on a different z-level from the shuttle - icon_state = "pinonnull" - - else - set_dir(get_dir(src, home)) - - switch(get_dist(src, home)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - - -// This one only points to the ship. Useful if there is no nuking to occur today. -/obj/item/weapon/pinpointer/shuttle - var/shuttle_comp_id = null - var/obj/machinery/computer/shuttle_control/our_shuttle = null - -/obj/item/weapon/pinpointer/shuttle/attack_self(mob/user as mob) - if(!active) - active = TRUE - START_PROCESSING(SSobj, src) - to_chat(user, "Shuttle Locator active.") - else - active = FALSE - STOP_PROCESSING(SSobj, src) - icon_state = "pinoff" - to_chat(user, "You deactivate the pinpointer.") - -/obj/item/weapon/pinpointer/shuttle/process() - if(!active) - return PROCESS_KILL - - if(!our_shuttle) - for(var/obj/machinery/computer/shuttle_control/S in machines) - if(S.shuttle_tag == shuttle_comp_id) // Shuttle tags are used so that it will work if the computer path changes, as it does on the southern cross map. - our_shuttle = S - break - - if(!our_shuttle) - icon_state = "pinonnull" - return - - if(loc.z != our_shuttle.z) //If you are on a different z-level from the shuttle - icon_state = "pinonnull" - - else - set_dir(get_dir(src, our_shuttle)) - - switch(get_dist(src, our_shuttle)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - - -/obj/item/weapon/pinpointer/shuttle/merc - shuttle_comp_id = "Mercenary" - -/obj/item/weapon/pinpointer/shuttle/heist +/obj/item/weapon/pinpointer + name = "pinpointer" + icon = 'icons/obj/device.dmi' + icon_state = "pinoff" + slot_flags = SLOT_BELT + w_class = ITEMSIZE_SMALL + item_state = "electronic" + throw_speed = 4 + throw_range = 20 + matter = list(MAT_STEEL = 500) + preserve_item = 1 + var/obj/item/weapon/disk/nuclear/the_disk = null + var/active = 0 + +/obj/item/weapon/pinpointer/Destroy() + active = 0 + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/weapon/pinpointer/attack_self() + if(!active) + active = 1 + START_PROCESSING(SSobj, src) + to_chat(usr, "You activate the pinpointer") + else + active = 0 + STOP_PROCESSING(SSobj, src) + icon_state = "pinoff" + to_chat(usr, "You deactivate the pinpointer") + +/obj/item/weapon/pinpointer/process() + if(!active) + return PROCESS_KILL + + if(!the_disk) + the_disk = locate() + if(!the_disk) + icon_state = "pinonnull" + return + + set_dir(get_dir(src,the_disk)) + + switch(get_dist(src,the_disk)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + +/obj/item/weapon/pinpointer/examine(mob/user) + . = ..() + for(var/obj/machinery/nuclearbomb/bomb in machines) + if(bomb.timing) + . += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" + + + +/obj/item/weapon/pinpointer/advpinpointer + name = "Advanced Pinpointer" + icon = 'icons/obj/device.dmi' + desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal." + var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates. + var/turf/location = null + var/obj/target = null + +/obj/item/weapon/pinpointer/advpinpointer/process() + if(!active) + return PROCESS_KILL + if(mode == 0) + ..() + if(mode == 1) + worklocation() + if(mode == 2) + workobj() + +/obj/item/weapon/pinpointer/advpinpointer/proc/worklocation() + if(!location) + icon_state = "pinonnull" + return + + set_dir(get_dir(src,location)) + + switch(get_dist(src,location)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + +/obj/item/weapon/pinpointer/advpinpointer/proc/workobj() + if(!target) + icon_state = "pinonnull" + return + + set_dir(get_dir(src,target)) + + switch(get_dist(src,target)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + +/obj/item/weapon/pinpointer/advpinpointer/verb/toggle_mode() + set category = "Object" + set name = "Toggle Pinpointer Mode" + set src in view(1) + + active = 0 + icon_state = "pinoff" + target=null + location = null + + switch(tgui_alert(usr, "Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", list("Location", "Disk Recovery", "Other Signature"))) + if("Location") + mode = 1 + + var/locationx = tgui_input_number(usr, "Please input the x coordinate to search for.", "Location?" , "") + if(!locationx || !(usr in view(1,src))) + return + var/locationy = tgui_input_number(usr, "Please input the y coordinate to search for.", "Location?" , "") + if(!locationy || !(usr in view(1,src))) + return + + var/turf/Z = get_turf(src) + + location = locate(locationx,locationy,Z.z) + + to_chat(usr, "You set the pinpointer to locate [locationx],[locationy]") + + return attack_self() + + if("Disk Recovery") + mode = 0 + return attack_self() + + if("Other Signature") + mode = 2 + switch(tgui_alert(usr, "Search for item signature or DNA fragment?", "Signature Mode Select", list("Item", "DNA"))) + + if("Item") + var/datum/objective/steal/itemlist + itemlist = itemlist + var/targetitem = tgui_input_list(usr, "Select item to search for.", "Item Mode Select", itemlist.possible_items) + if(!targetitem) + return + target=locate(itemlist.possible_items[targetitem]) + if(!target) + to_chat(usr, "Failed to locate [targetitem]!") + return + to_chat(usr, "You set the pinpointer to locate [targetitem]") + + if("DNA") + var/DNAstring = tgui_input_text(usr, "Input DNA string to search for." , "Please Enter String." , "") + if(!DNAstring) + return + for(var/mob/living/carbon/M in mob_list) + if(!M.dna) + continue + if(M.dna.unique_enzymes == DNAstring) + target = M + break + + return attack_self() + + +/////////////////////// +//nuke op pinpointers// +/////////////////////// + + +/obj/item/weapon/pinpointer/nukeop + var/mode = 0 //Mode 0 locates disk, mode 1 locates the shuttle + var/obj/machinery/computer/shuttle_control/multi/syndicate/home = null + +/obj/item/weapon/pinpointer/nukeop/attack_self(mob/user as mob) + if(!active) + active = 1 + START_PROCESSING(SSobj, src) + if(!mode) + workdisk() + to_chat(user, "Authentication Disk Locator active.") + else + worklocation() + to_chat(user, "Shuttle Locator active.") + else + active = 0 + STOP_PROCESSING(SSobj, src) + icon_state = "pinoff" + to_chat(user, "You deactivate the pinpointer.") + +/obj/item/weapon/pinpointer/nukeop/process() + if(!active) + return PROCESS_KILL + + switch(mode) + if(0) + workdisk() + if(1) + worklocation() + +/obj/item/weapon/pinpointer/nukeop/proc/workdisk() + if(bomb_set) //If the bomb is set, lead to the shuttle + mode = 1 //Ensures worklocation() continues to work + playsound(src, 'sound/machines/twobeep.ogg', 50, 1) //Plays a beep + visible_message("Shuttle Locator active.") //Lets the mob holding it know that the mode has changed + return //Get outta here + + if(!the_disk) + the_disk = locate() + if(!the_disk) + icon_state = "pinonnull" + return + + set_dir(get_dir(src, the_disk)) + + switch(get_dist(src, the_disk)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + +/obj/item/weapon/pinpointer/nukeop/proc/worklocation() + if(!bomb_set) + mode = 0 + playsound(src, 'sound/machines/twobeep.ogg', 50, 1) + visible_message("Authentication Disk Locator active.") + return + + if(!home) + home = locate() + if(!home) + icon_state = "pinonnull" + return + + if(loc.z != home.z) //If you are on a different z-level from the shuttle + icon_state = "pinonnull" + + else + set_dir(get_dir(src, home)) + + switch(get_dist(src, home)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + + +// This one only points to the ship. Useful if there is no nuking to occur today. +/obj/item/weapon/pinpointer/shuttle + var/shuttle_comp_id = null + var/obj/machinery/computer/shuttle_control/our_shuttle = null + +/obj/item/weapon/pinpointer/shuttle/attack_self(mob/user as mob) + if(!active) + active = TRUE + START_PROCESSING(SSobj, src) + to_chat(user, "Shuttle Locator active.") + else + active = FALSE + STOP_PROCESSING(SSobj, src) + icon_state = "pinoff" + to_chat(user, "You deactivate the pinpointer.") + +/obj/item/weapon/pinpointer/shuttle/process() + if(!active) + return PROCESS_KILL + + if(!our_shuttle) + for(var/obj/machinery/computer/shuttle_control/S in machines) + if(S.shuttle_tag == shuttle_comp_id) // Shuttle tags are used so that it will work if the computer path changes, as it does on the southern cross map. + our_shuttle = S + break + + if(!our_shuttle) + icon_state = "pinonnull" + return + + if(loc.z != our_shuttle.z) //If you are on a different z-level from the shuttle + icon_state = "pinonnull" + + else + set_dir(get_dir(src, our_shuttle)) + + switch(get_dist(src, our_shuttle)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + + +/obj/item/weapon/pinpointer/shuttle/merc + shuttle_comp_id = "Mercenary" + +/obj/item/weapon/pinpointer/shuttle/heist shuttle_comp_id = "Skipjack" \ No newline at end of file diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 15b60b751f..96b79657fc 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -1,905 +1,905 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -var/global/list/all_objectives = list() - -/datum/objective - var/datum/mind/owner = null //Who owns the objective. - var/explanation_text = "Nothing" //What that person is supposed to do. - var/datum/mind/target = null //If they are focused on a particular person. - var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. - var/completed = 0 //currently only used for custom objectives. - -/datum/objective/New(var/text) - all_objectives |= src - if(text) - explanation_text = text - ..() - -/datum/objective/Destroy() - all_objectives -= src - ..() - -/datum/objective/proc/check_completion() - return completed - -/datum/objective/proc/find_target() - var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) - possible_targets += possible_target - if(possible_targets.len > 0) - target = pick(possible_targets) - - -/datum/objective/proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. - for(var/datum/mind/possible_target in ticker.minds) - if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) - target = possible_target - break - - - -/datum/objective/assassinate/find_target() - ..() - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/assassinate/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/assassinate/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite - return 1 - return 0 - return 1 - - -/datum/objective/anti_revolution/execute/find_target() - ..() - if(target && target.current) - var/datum/gender/T = gender_datums[target.current.get_visible_gender()] - explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute [T.him]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/anti_revolution/execute/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - var/datum/gender/T = gender_datums[target.current.get_visible_gender()] - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute [T.him]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/execute/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || !ishuman(target.current)) - return 1 - return 0 - return 1 - -/datum/objective/anti_revolution/brig - var/already_completed = 0 - -/datum/objective/anti_revolution/brig/find_target() - ..() - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [target.assigned_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/anti_revolution/brig/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/brig/check_completion() - if(already_completed) - return 1 - - if(target && target.current) - if(target.current.stat == DEAD) - return 0 - if(target.is_brigged(10 * 60 * 10)) - already_completed = 1 - return 1 - return 0 - return 0 - -/datum/objective/anti_revolution/demote/find_target() - ..() - if(target && target.current) - var/datum/gender/T = gender_datums[target.current.get_visible_gender()] - explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/demote/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - var/datum/gender/T = gender_datums[target.current.get_visible_gender()] - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/demote/check_completion() - if(target && target.current && istype(target,/mob/living/carbon/human)) - var/obj/item/weapon/card/id/I = target.current:wear_id - if(istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/P = I - I = P.id - - if(!istype(I)) return 1 - - if(I.assignment == USELESS_JOB) //VOREStation Edit - Visitor not Assistant - return 1 - else - return 0 - return 1 - -//I want braaaainssss -/datum/objective/debrain/find_target() - ..() - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/debrain/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/debrain/check_completion() - if(!target)//If it's a free objective. - return 1 - if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. - return 0 - if( !target.current || !isbrain(target.current) ) - return 0 - var/atom/A = target.current - while(A.loc) //check to see if the brainmob is on our person - A = A.loc - if(A == owner.current) - return 1 - return 0 - - -//The opposite of killing a dude. -/datum/objective/protect/find_target() - ..() - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/protect/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/protect/check_completion() - if(!target) //If it's a free objective. - return 1 - if(target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) - return 0 - return 1 - return 0 - - -/datum/objective/hijack - explanation_text = "Hijack the emergency shuttle by escaping alone." - -/datum/objective/hijack/check_completion() - if(!owner.current || owner.current.stat) - return 0 - if(!emergency_shuttle.returned()) - return 0 - if(issilicon(owner.current)) - return 0 - var/area/shuttle = locate(/area/shuttle/escape/centcom) - var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai) - for(var/mob/living/player in player_list) - if(player.type in protected_mobs) continue - if (player.mind && (player.mind != owner)) - if(player.stat != DEAD) //they're not dead! - if(get_turf(player) in shuttle) - return 0 - return 1 - - -/datum/objective/block - explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." - - -/datum/objective/block/check_completion() - if(!istype(owner.current, /mob/living/silicon)) - return 0 - if(!emergency_shuttle.returned()) - return 0 - if(!owner.current) - return 0 - var/area/shuttle = locate(/area/shuttle/escape/centcom) - var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot) - for(var/mob/living/player in player_list) - if(player.type in protected_mobs) continue - if (player.mind) - if (player.stat != 2) - if (get_turf(player) in shuttle) - return 0 - return 1 - -/datum/objective/silence - explanation_text = "Do not allow anyone to escape the station. Only allow the shuttle to be called when everyone is dead and your story is the only one left." - -/datum/objective/silence/check_completion() - if(!emergency_shuttle.returned()) - return 0 - - for(var/mob/living/player in player_list) - if(player == owner.current) - continue - if(player.mind) - if(player.stat != DEAD) - var/turf/T = get_turf(player) - if(!T) continue - switch(T.loc.type) - if(/area/shuttle/escape/centcom, /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom) - return 0 - return 1 - - -/datum/objective/escape - explanation_text = "Escape on the shuttle or an escape pod alive and free." - - -/datum/objective/escape/check_completion() - if(issilicon(owner.current)) - return 0 - if(isbrain(owner.current)) - return 0 - if(!emergency_shuttle.returned()) - return 0 - if(!owner.current || owner.current.stat ==2) - return 0 - var/turf/location = get_turf(owner.current.loc) - if(!location) - return 0 - - if(istype(location, /turf/simulated/shuttle/floor4)) // Fails traitors if they are in the shuttle brig -- Polymorph - if(istype(owner.current, /mob/living/carbon)) - var/mob/living/carbon/C = owner.current - if (!C.handcuffed) - return 1 - return 0 - - var/area/check_area = location.loc - if(istype(check_area, /area/shuttle/escape/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod1/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod2/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod3/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod5/centcom)) - return 1 - else - return 0 - - - -/datum/objective/survive - explanation_text = "Stay alive until the end." - -/datum/objective/survive/check_completion() - if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) - return 0 //Brains no longer win survive objectives. --NEO - if(issilicon(owner.current) && owner.current != owner.original) - return 0 - return 1 - -// Similar to the anti-rev objective, but for traitors -/datum/objective/brig - var/already_completed = 0 - -/datum/objective/brig/find_target() - ..() - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [target.assigned_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/brig/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target - -/datum/objective/brig/check_completion() - if(already_completed) - return 1 - - if(target && target.current) - if(target.current.stat == DEAD) - return 0 - // Make the actual required time a bit shorter than the official time - if(target.is_brigged(10 * 60 * 5)) - already_completed = 1 - return 1 - return 0 - return 0 - -// Harm a crew member, making an example of them -/datum/objective/harm - var/already_completed = 0 - -/datum/objective/harm/find_target() - ..() - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [target.assigned_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/harm/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target - -/datum/objective/harm/check_completion() - if(already_completed) - return 1 - - if(target && target.current && istype(target.current, /mob/living/carbon/human)) - if(target.current.stat == DEAD) - return 0 - - var/mob/living/carbon/human/H = target.current - for(var/obj/item/organ/external/E in H.organs) - if(E.status & ORGAN_BROKEN) - return 1 - for(var/limb_tag in H.species.has_limbs) //todo check prefs for robotic limbs and amputations. - var/list/organ_data = H.species.has_limbs[limb_tag] - var/limb_type = organ_data["path"] - var/found - for(var/obj/item/organ/external/E in H.organs) - if(limb_type == E.type) - found = 1 - break - if(!found) - return 1 - - var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD) - if(head.disfigured) - return 1 - return 0 - - -/datum/objective/nuclear - explanation_text = "Destroy the station with a nuclear device." - - - -/datum/objective/steal - var/obj/item/steal_target - var/target_name - - var/global/possible_items[] = list( - "the Site Manager's antique laser gun" = /obj/item/weapon/gun/energy/captain, - "a hand teleporter" = /obj/item/weapon/hand_tele, - "an RCD" = /obj/item/weapon/rcd, - "a jetpack" = /obj/item/weapon/tank/jetpack, - "a site manager's jumpsuit" = /obj/item/clothing/under/rank/captain, - "a functional AI" = /obj/item/device/aicard, - "a pair of magboots" = /obj/item/clothing/shoes/magboots, - "the station blueprints" = /obj/item/areaeditor/blueprints, - "a nasa voidsuit" = /obj/item/clothing/suit/space/void, - "28 moles of phoron (full tank)" = /obj/item/weapon/tank, - "a sample of slime extract" = /obj/item/slime_extract, - "a piece of corgi meat" = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi, - "a research director's jumpsuit" = /obj/item/clothing/under/rank/research_director, - "a chief engineer's jumpsuit" = /obj/item/clothing/under/rank/chief_engineer, - "a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer, - "a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security, - "a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel, - "the hypospray" = /obj/item/weapon/reagent_containers/hypospray/vial, - "the site manager's pinpointer" = /obj/item/weapon/pinpointer, - "an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof, - ) - - var/global/possible_items_special[] = list( - /*"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,*///Broken with the change to nuke disk making it respawn on z level change. - "nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear, - "diamond drill" = /obj/item/weapon/pickaxe/diamonddrill, - "bag of holding" = /obj/item/weapon/storage/backpack/holding, - "hyper-capacity cell" = /obj/item/weapon/cell/hyper, - "10 diamonds" = /obj/item/stack/material/diamond, - "50 gold bars" = /obj/item/stack/material/gold, - "25 refined uranium bars" = /obj/item/stack/material/uranium, - ) - - -/datum/objective/steal/proc/set_target(item_name) - target_name = item_name - steal_target = possible_items[target_name] - if (!steal_target ) - steal_target = possible_items_special[target_name] - explanation_text = "Steal [target_name]." - return steal_target - - -/datum/objective/steal/find_target() - return set_target(pick(possible_items)) - - -/datum/objective/steal/proc/select_target() - var/list/possible_items_all = possible_items+possible_items_special+"custom" - var/new_target = tgui_input_list(usr, "Select target:", "Objective target", possible_items_all) - if (!new_target) return - if (new_target == "custom") - var/obj/item/custom_target = tgui_input_list(usr, "Select type:", "Type", typesof(/obj/item)) - if (!custom_target) return - var/tmp_obj = new custom_target - var/custom_name = tmp_obj:name - qdel(tmp_obj) - custom_name = sanitize(tgui_input_text(usr, "Enter target name:", "Objective target", custom_name)) - if (!custom_name) return - target_name = custom_name - steal_target = custom_target - explanation_text = "Steal [target_name]." - else - set_target(new_target) - return steal_target - -/datum/objective/steal/check_completion() - if(!steal_target || !owner.current) return 0 - if(!isliving(owner.current)) return 0 - var/list/all_items = owner.current.get_contents() - switch (target_name) - if("28 moles of phoron (full tank)","10 diamonds","50 gold bars","25 refined uranium bars") - var/target_amount = text2num(target_name)//Non-numbers are ignored. - var/found_amount = 0.0//Always starts as zero. - - for(var/obj/item/I in all_items) //Check for phoron tanks - if(istype(I, steal_target)) - found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas["phoron"]) : (I:amount)) - return found_amount>=target_amount - - if("50 coins (in bag)") - var/obj/item/weapon/moneybag/B = locate() in all_items - - if(B) - var/target = text2num(target_name) - var/found_amount = 0.0 - for(var/obj/item/weapon/coin/C in B) - found_amount++ - return found_amount>=target - - if("a functional AI") - - for(var/obj/item/device/aicard/C in all_items) //Check for ai card - for(var/mob/living/silicon/ai/M in C) - if(istype(M, /mob/living/silicon/ai) && M.stat != 2) //See if any AI's are alive inside that card. - return 1 - - for(var/mob/living/silicon/ai/ai in mob_list) - var/turf/T = get_turf(ai) - if(istype(T)) - var/area/check_area = get_area(ai) - if(istype(check_area, /area/shuttle/escape/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod1/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod2/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod3/centcom)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod5/centcom)) - return 1 - else - - for(var/obj/I in all_items) //Check for items - if(istype(I, steal_target)) - return 1 - return 0 - - - -/datum/objective/download/proc/gen_amount_goal() - target_amount = rand(10,20) - explanation_text = "Download [target_amount] research levels." - return target_amount - - -/datum/objective/download/check_completion() - if(!ishuman(owner.current)) - return 0 - if(!owner.current || owner.current.stat == 2) - return 0 - - var/current_amount - var/obj/item/weapon/rig/S - if(istype(owner.current,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = owner.current - S = H.back - - if(!istype(S) || !S.installed_modules || !S.installed_modules.len) - return 0 - - var/obj/item/rig_module/datajack/stolen_data = locate() in S.installed_modules - if(!istype(stolen_data)) - return 0 - - for(var/datum/tech/current_data in stolen_data.stored_research) - if(current_data.level > 1) - current_amount += (current_data.level-1) - - return (current_amount= target_amount)) - return 1 - else - return 0 - -/datum/objective/vore/check_completion() - if(owner && owner.vore_prey_eaten >= target_amount) - return 1 - else - return 0 - -// Heist objectives. -/datum/objective/heist/proc/choose_target() - return - -/datum/objective/heist/kidnap/choose_target() - var/list/roles = list("Chief Engineer","Research Director","Roboticist","Chemist","Engineer") - var/list/possible_targets = list() - var/list/priority_targets = list() - - for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role)) - possible_targets += possible_target - for(var/role in roles) - if(possible_target.assigned_role == role) - priority_targets += possible_target - continue - - if(priority_targets.len > 0) - target = pick(priority_targets) - else if(possible_targets.len > 0) - target = pick(possible_targets) - - if(target && target.current) - explanation_text = "We can get a good price for [target.current.real_name], the [target.assigned_role]. Take them alive." - else - explanation_text = "Free Objective" - return target - -/datum/objective/heist/kidnap/check_completion() - if(target && target.current) - if (target.current.stat == 2) - return 0 // They're dead. Fail. - //if (!target.current.restrained()) - // return 0 // They're loose. Close but no cigar. - - var/area/shuttle/skipjack/A = locate() // CHOMPEdit: Shuttle consensing - for(var/mob/living/carbon/human/M in A) - if(target.current == M) - return 1 //They're restrained on the shuttle. Success. - else - return 0 - -/datum/objective/heist/loot/choose_target() - var/loot = "an object" - switch(rand(1,8)) - if(1) - target = /obj/structure/particle_accelerator - target_amount = 6 - loot = "a complete particle accelerator" - if(2) - target = /obj/machinery/the_singularitygen - target_amount = 1 - loot = "a gravitational generator" - if(3) - target = /obj/machinery/power/emitter - target_amount = 4 - loot = "four emitters" - if(4) - target = /obj/machinery/nuclearbomb - target_amount = 1 - loot = "a nuclear bomb" - if(5) - target = /obj/item/weapon/gun - target_amount = 6 - loot = "six guns" - if(6) - target = /obj/item/weapon/gun/energy - target_amount = 4 - loot = "four energy guns" - if(7) - target = /obj/item/weapon/gun/energy/laser - target_amount = 2 - loot = "two laser guns" - if(8) - target = /obj/item/weapon/gun/energy/ionrifle - target_amount = 1 - loot = "an ion gun" - - explanation_text = "It's a buyer's market out here. Steal [loot] for resale." - - -/datum/objective/heist/loot/check_completion() - var/total_amount = 0 - - for(var/obj/O in locate(/area/shuttle/skipjack)) // CHOMPEdit: Shuttle area pathname - if(istype(O,target)) total_amount++ - for(var/obj/I in O.contents) - if(istype(I,target)) total_amount++ - if(total_amount >= target_amount) return 1 - - for(var/datum/mind/raider in raiders.current_antagonists) - if(raider.current) - for(var/obj/O in raider.current.get_contents()) - if(istype(O,target)) total_amount++ - if(total_amount >= target_amount) return 1 - - return 0 - -/datum/objective/heist/salvage/choose_target() - switch(rand(1,8)) - if(1) - target = MAT_STEEL - target_amount = 300 - if(2) - target = MAT_GLASS - target_amount = 200 - if(3) - target = MAT_PLASTEEL - target_amount = 100 - if(4) - target = MAT_PHORON - target_amount = 100 - if(5) - target = MAT_SILVER - target_amount = 50 - if(6) - target = MAT_GOLD - target_amount = 20 - if(7) - target = MAT_URANIUM - target_amount = 20 - if(8) - target = MAT_DIAMOND - target_amount = 20 - - explanation_text = "Ransack the station and escape with [target_amount] [target]." - -/datum/objective/heist/salvage/check_completion() - - var/total_amount = 0 - - for(var/obj/item/O in locate(/area/shuttle/skipjack)) //CHOMP Edit: Skipjack area pathname - - var/obj/item/stack/material/S - if(istype(O,/obj/item/stack/material)) - if(O.name == target) - S = O - total_amount += S.get_amount() - for(var/obj/I in O.contents) - if(istype(I,/obj/item/stack/material)) - if(I.name == target) - S = I - total_amount += S.get_amount() - - for(var/datum/mind/raider in raiders.current_antagonists) - if(raider.current) - for(var/obj/item/O in raider.current.get_contents()) - if(istype(O,/obj/item/stack/material)) - if(O.name == target) - var/obj/item/stack/material/S = O - total_amount += S.get_amount() - - if(total_amount >= target_amount) return 1 - return 0 - - -/datum/objective/heist/preserve_crew - explanation_text = "Do not leave anyone behind, alive or dead." - -/datum/objective/heist/preserve_crew/check_completion() - if(raiders && raiders.is_raider_crew_safe()) return 1 - return 0 - -//Borer objective(s). -/datum/objective/borer_survive - explanation_text = "Survive in a host until the end of the round." - -/datum/objective/borer_survive/check_completion() - if(owner) - var/mob/living/simple_mob/animal/borer/B = owner - if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1 - return 0 - -/datum/objective/borer_reproduce - explanation_text = "Reproduce at least once." - -/datum/objective/borer_reproduce/check_completion() - if(owner && owner.current) - var/mob/living/simple_mob/animal/borer/B = owner.current - if(istype(B) && B.has_reproduced) return 1 - return 0 - -/datum/objective/ninja_highlander - explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." - -/datum/objective/ninja_highlander/check_completion() - if(owner) - for(var/datum/mind/ninja in get_antags("ninja")) - if(ninja != owner) - if(ninja.current.stat < 2) return 0 - return 1 - return 0 - -/datum/objective/cult/survive - explanation_text = "Our knowledge must live on." - target_amount = 5 - -/datum/objective/cult/survive/New() - ..() - explanation_text = "Our knowledge must live on. Make sure at least [target_amount] acolytes escape on the shuttle to spread their work on an another station." - -/datum/objective/cult/survive/check_completion() - var/acolytes_survived = 0 - if(!cult) - return 0 - for(var/datum/mind/cult_mind in cult.current_antagonists) - if (cult_mind.current && cult_mind.current.stat!=2) - var/area/A = get_area(cult_mind.current ) - if ( is_type_in_list(A, centcom_areas)) - acolytes_survived++ - if(acolytes_survived >= target_amount) - return 0 - else - return 1 - -/datum/objective/cult/eldergod - explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it. The convert rune is join blood self." - -/datum/objective/cult/eldergod/check_completion() - return (locate(/obj/singularity/narsie/large) in machines) - -/datum/objective/cult/sacrifice - explanation_text = "Conduct a ritual sacrifice for the glory of Nar-Sie." - -/datum/objective/cult/sacrifice/find_target() - var/list/possible_targets = list() - if(!possible_targets.len) - for(var/mob/living/carbon/human/player in player_list) - if(player.mind && !(player.mind in cult)) - possible_targets += player.mind - if(possible_targets.len > 0) - target = pick(possible_targets) - if(target) explanation_text = "Sacrifice [target.name], the [target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." - -/datum/objective/cult/sacrifice/check_completion() - return (target && cult && !cult.sacrificed.Find(target)) - -/datum/objective/rev/find_target() - ..() - if(target && target.current) - explanation_text = "Assassinate, capture or convert [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/rev/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Assassinate, capture or convert [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/rev/check_completion() - var/rval = 1 - if(target && target.current) - var/mob/living/carbon/human/H = target.current - if(!istype(H)) - return 1 - if(H.stat == DEAD || H.restrained()) - return 1 - // Check if they're converted - if(target in revs.current_antagonists) - return 1 - var/turf/T = get_turf(H) - if(T && isNotStationLevel(T.z)) //If they leave the station they count as dead for this - rval = 2 - return 0 - return rval +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +var/global/list/all_objectives = list() + +/datum/objective + var/datum/mind/owner = null //Who owns the objective. + var/explanation_text = "Nothing" //What that person is supposed to do. + var/datum/mind/target = null //If they are focused on a particular person. + var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. + var/completed = 0 //currently only used for custom objectives. + +/datum/objective/New(var/text) + all_objectives |= src + if(text) + explanation_text = text + ..() + +/datum/objective/Destroy() + all_objectives -= src + ..() + +/datum/objective/proc/check_completion() + return completed + +/datum/objective/proc/find_target() + var/list/possible_targets = list() + for(var/datum/mind/possible_target in ticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) + possible_targets += possible_target + if(possible_targets.len > 0) + target = pick(possible_targets) + + +/datum/objective/proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. + for(var/datum/mind/possible_target in ticker.minds) + if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) + target = possible_target + break + + + +/datum/objective/assassinate/find_target() + ..() + if(target && target.current) + explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/assassinate/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/assassinate/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite + return 1 + return 0 + return 1 + + +/datum/objective/anti_revolution/execute/find_target() + ..() + if(target && target.current) + var/datum/gender/T = gender_datums[target.current.get_visible_gender()] + explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute [T.him]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/anti_revolution/execute/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + var/datum/gender/T = gender_datums[target.current.get_visible_gender()] + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute [T.him]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/execute/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || !ishuman(target.current)) + return 1 + return 0 + return 1 + +/datum/objective/anti_revolution/brig + var/already_completed = 0 + +/datum/objective/anti_revolution/brig/find_target() + ..() + if(target && target.current) + explanation_text = "Brig [target.current.real_name], the [target.assigned_role] for 20 minutes to set an example." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/anti_revolution/brig/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Brig [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] for 20 minutes to set an example." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/brig/check_completion() + if(already_completed) + return 1 + + if(target && target.current) + if(target.current.stat == DEAD) + return 0 + if(target.is_brigged(10 * 60 * 10)) + already_completed = 1 + return 1 + return 0 + return 0 + +/datum/objective/anti_revolution/demote/find_target() + ..() + if(target && target.current) + var/datum/gender/T = gender_datums[target.current.get_visible_gender()] + explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/demote/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + var/datum/gender/T = gender_datums[target.current.get_visible_gender()] + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/demote/check_completion() + if(target && target.current && istype(target,/mob/living/carbon/human)) + var/obj/item/weapon/card/id/I = target.current:wear_id + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/P = I + I = P.id + + if(!istype(I)) return 1 + + if(I.assignment == USELESS_JOB) //VOREStation Edit - Visitor not Assistant + return 1 + else + return 0 + return 1 + +//I want braaaainssss +/datum/objective/debrain/find_target() + ..() + if(target && target.current) + explanation_text = "Steal the brain of [target.current.real_name]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/debrain/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/debrain/check_completion() + if(!target)//If it's a free objective. + return 1 + if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. + return 0 + if( !target.current || !isbrain(target.current) ) + return 0 + var/atom/A = target.current + while(A.loc) //check to see if the brainmob is on our person + A = A.loc + if(A == owner.current) + return 1 + return 0 + + +//The opposite of killing a dude. +/datum/objective/protect/find_target() + ..() + if(target && target.current) + explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/protect/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/protect/check_completion() + if(!target) //If it's a free objective. + return 1 + if(target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) + return 0 + return 1 + return 0 + + +/datum/objective/hijack + explanation_text = "Hijack the emergency shuttle by escaping alone." + +/datum/objective/hijack/check_completion() + if(!owner.current || owner.current.stat) + return 0 + if(!emergency_shuttle.returned()) + return 0 + if(issilicon(owner.current)) + return 0 + var/area/shuttle = locate(/area/shuttle/escape/centcom) + var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai) + for(var/mob/living/player in player_list) + if(player.type in protected_mobs) continue + if (player.mind && (player.mind != owner)) + if(player.stat != DEAD) //they're not dead! + if(get_turf(player) in shuttle) + return 0 + return 1 + + +/datum/objective/block + explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." + + +/datum/objective/block/check_completion() + if(!istype(owner.current, /mob/living/silicon)) + return 0 + if(!emergency_shuttle.returned()) + return 0 + if(!owner.current) + return 0 + var/area/shuttle = locate(/area/shuttle/escape/centcom) + var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot) + for(var/mob/living/player in player_list) + if(player.type in protected_mobs) continue + if (player.mind) + if (player.stat != 2) + if (get_turf(player) in shuttle) + return 0 + return 1 + +/datum/objective/silence + explanation_text = "Do not allow anyone to escape the station. Only allow the shuttle to be called when everyone is dead and your story is the only one left." + +/datum/objective/silence/check_completion() + if(!emergency_shuttle.returned()) + return 0 + + for(var/mob/living/player in player_list) + if(player == owner.current) + continue + if(player.mind) + if(player.stat != DEAD) + var/turf/T = get_turf(player) + if(!T) continue + switch(T.loc.type) + if(/area/shuttle/escape/centcom, /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom) + return 0 + return 1 + + +/datum/objective/escape + explanation_text = "Escape on the shuttle or an escape pod alive and free." + + +/datum/objective/escape/check_completion() + if(issilicon(owner.current)) + return 0 + if(isbrain(owner.current)) + return 0 + if(!emergency_shuttle.returned()) + return 0 + if(!owner.current || owner.current.stat ==2) + return 0 + var/turf/location = get_turf(owner.current.loc) + if(!location) + return 0 + + if(istype(location, /turf/simulated/shuttle/floor4)) // Fails traitors if they are in the shuttle brig -- Polymorph + if(istype(owner.current, /mob/living/carbon)) + var/mob/living/carbon/C = owner.current + if (!C.handcuffed) + return 1 + return 0 + + var/area/check_area = location.loc + if(istype(check_area, /area/shuttle/escape/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod1/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod2/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod3/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod5/centcom)) + return 1 + else + return 0 + + + +/datum/objective/survive + explanation_text = "Stay alive until the end." + +/datum/objective/survive/check_completion() + if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) + return 0 //Brains no longer win survive objectives. --NEO + if(issilicon(owner.current) && owner.current != owner.original) + return 0 + return 1 + +// Similar to the anti-rev objective, but for traitors +/datum/objective/brig + var/already_completed = 0 + +/datum/objective/brig/find_target() + ..() + if(target && target.current) + explanation_text = "Have [target.current.real_name], the [target.assigned_role] brigged for 10 minutes." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/brig/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Have [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] brigged for 10 minutes." + else + explanation_text = "Free Objective" + return target + +/datum/objective/brig/check_completion() + if(already_completed) + return 1 + + if(target && target.current) + if(target.current.stat == DEAD) + return 0 + // Make the actual required time a bit shorter than the official time + if(target.is_brigged(10 * 60 * 5)) + already_completed = 1 + return 1 + return 0 + return 0 + +// Harm a crew member, making an example of them +/datum/objective/harm + var/already_completed = 0 + +/datum/objective/harm/find_target() + ..() + if(target && target.current) + explanation_text = "Make an example of [target.current.real_name], the [target.assigned_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/harm/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Make an example of [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." + else + explanation_text = "Free Objective" + return target + +/datum/objective/harm/check_completion() + if(already_completed) + return 1 + + if(target && target.current && istype(target.current, /mob/living/carbon/human)) + if(target.current.stat == DEAD) + return 0 + + var/mob/living/carbon/human/H = target.current + for(var/obj/item/organ/external/E in H.organs) + if(E.status & ORGAN_BROKEN) + return 1 + for(var/limb_tag in H.species.has_limbs) //todo check prefs for robotic limbs and amputations. + var/list/organ_data = H.species.has_limbs[limb_tag] + var/limb_type = organ_data["path"] + var/found + for(var/obj/item/organ/external/E in H.organs) + if(limb_type == E.type) + found = 1 + break + if(!found) + return 1 + + var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD) + if(head.disfigured) + return 1 + return 0 + + +/datum/objective/nuclear + explanation_text = "Destroy the station with a nuclear device." + + + +/datum/objective/steal + var/obj/item/steal_target + var/target_name + + var/global/possible_items[] = list( + "the Site Manager's antique laser gun" = /obj/item/weapon/gun/energy/captain, + "a hand teleporter" = /obj/item/weapon/hand_tele, + "an RCD" = /obj/item/weapon/rcd, + "a jetpack" = /obj/item/weapon/tank/jetpack, + "a site manager's jumpsuit" = /obj/item/clothing/under/rank/captain, + "a functional AI" = /obj/item/device/aicard, + "a pair of magboots" = /obj/item/clothing/shoes/magboots, + "the station blueprints" = /obj/item/areaeditor/blueprints, + "a nasa voidsuit" = /obj/item/clothing/suit/space/void, + "28 moles of phoron (full tank)" = /obj/item/weapon/tank, + "a sample of slime extract" = /obj/item/slime_extract, + "a piece of corgi meat" = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi, + "a research director's jumpsuit" = /obj/item/clothing/under/rank/research_director, + "a chief engineer's jumpsuit" = /obj/item/clothing/under/rank/chief_engineer, + "a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer, + "a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security, + "a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel, + "the hypospray" = /obj/item/weapon/reagent_containers/hypospray/vial, + "the site manager's pinpointer" = /obj/item/weapon/pinpointer, + "an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof, + ) + + var/global/possible_items_special[] = list( + /*"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,*///Broken with the change to nuke disk making it respawn on z level change. + "nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear, + "diamond drill" = /obj/item/weapon/pickaxe/diamonddrill, + "bag of holding" = /obj/item/weapon/storage/backpack/holding, + "hyper-capacity cell" = /obj/item/weapon/cell/hyper, + "10 diamonds" = /obj/item/stack/material/diamond, + "50 gold bars" = /obj/item/stack/material/gold, + "25 refined uranium bars" = /obj/item/stack/material/uranium, + ) + + +/datum/objective/steal/proc/set_target(item_name) + target_name = item_name + steal_target = possible_items[target_name] + if (!steal_target ) + steal_target = possible_items_special[target_name] + explanation_text = "Steal [target_name]." + return steal_target + + +/datum/objective/steal/find_target() + return set_target(pick(possible_items)) + + +/datum/objective/steal/proc/select_target() + var/list/possible_items_all = possible_items+possible_items_special+"custom" + var/new_target = tgui_input_list(usr, "Select target:", "Objective target", possible_items_all) + if (!new_target) return + if (new_target == "custom") + var/obj/item/custom_target = tgui_input_list(usr, "Select type:", "Type", typesof(/obj/item)) + if (!custom_target) return + var/tmp_obj = new custom_target + var/custom_name = tmp_obj:name + qdel(tmp_obj) + custom_name = sanitize(tgui_input_text(usr, "Enter target name:", "Objective target", custom_name)) + if (!custom_name) return + target_name = custom_name + steal_target = custom_target + explanation_text = "Steal [target_name]." + else + set_target(new_target) + return steal_target + +/datum/objective/steal/check_completion() + if(!steal_target || !owner.current) return 0 + if(!isliving(owner.current)) return 0 + var/list/all_items = owner.current.get_contents() + switch (target_name) + if("28 moles of phoron (full tank)","10 diamonds","50 gold bars","25 refined uranium bars") + var/target_amount = text2num(target_name)//Non-numbers are ignored. + var/found_amount = 0.0//Always starts as zero. + + for(var/obj/item/I in all_items) //Check for phoron tanks + if(istype(I, steal_target)) + found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas["phoron"]) : (I:amount)) + return found_amount>=target_amount + + if("50 coins (in bag)") + var/obj/item/weapon/moneybag/B = locate() in all_items + + if(B) + var/target = text2num(target_name) + var/found_amount = 0.0 + for(var/obj/item/weapon/coin/C in B) + found_amount++ + return found_amount>=target + + if("a functional AI") + + for(var/obj/item/device/aicard/C in all_items) //Check for ai card + for(var/mob/living/silicon/ai/M in C) + if(istype(M, /mob/living/silicon/ai) && M.stat != 2) //See if any AI's are alive inside that card. + return 1 + + for(var/mob/living/silicon/ai/ai in mob_list) + var/turf/T = get_turf(ai) + if(istype(T)) + var/area/check_area = get_area(ai) + if(istype(check_area, /area/shuttle/escape/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod1/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod2/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod3/centcom)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod5/centcom)) + return 1 + else + + for(var/obj/I in all_items) //Check for items + if(istype(I, steal_target)) + return 1 + return 0 + + + +/datum/objective/download/proc/gen_amount_goal() + target_amount = rand(10,20) + explanation_text = "Download [target_amount] research levels." + return target_amount + + +/datum/objective/download/check_completion() + if(!ishuman(owner.current)) + return 0 + if(!owner.current || owner.current.stat == 2) + return 0 + + var/current_amount + var/obj/item/weapon/rig/S + if(istype(owner.current,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + S = H.back + + if(!istype(S) || !S.installed_modules || !S.installed_modules.len) + return 0 + + var/obj/item/rig_module/datajack/stolen_data = locate() in S.installed_modules + if(!istype(stolen_data)) + return 0 + + for(var/datum/tech/current_data in stolen_data.stored_research) + if(current_data.level > 1) + current_amount += (current_data.level-1) + + return (current_amount= target_amount)) + return 1 + else + return 0 + +/datum/objective/vore/check_completion() + if(owner && owner.vore_prey_eaten >= target_amount) + return 1 + else + return 0 + +// Heist objectives. +/datum/objective/heist/proc/choose_target() + return + +/datum/objective/heist/kidnap/choose_target() + var/list/roles = list("Chief Engineer","Research Director","Roboticist","Chemist","Engineer") + var/list/possible_targets = list() + var/list/priority_targets = list() + + for(var/datum/mind/possible_target in ticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role)) + possible_targets += possible_target + for(var/role in roles) + if(possible_target.assigned_role == role) + priority_targets += possible_target + continue + + if(priority_targets.len > 0) + target = pick(priority_targets) + else if(possible_targets.len > 0) + target = pick(possible_targets) + + if(target && target.current) + explanation_text = "We can get a good price for [target.current.real_name], the [target.assigned_role]. Take them alive." + else + explanation_text = "Free Objective" + return target + +/datum/objective/heist/kidnap/check_completion() + if(target && target.current) + if (target.current.stat == 2) + return 0 // They're dead. Fail. + //if (!target.current.restrained()) + // return 0 // They're loose. Close but no cigar. + + var/area/shuttle/skipjack/A = locate() // CHOMPEdit: Shuttle consensing + for(var/mob/living/carbon/human/M in A) + if(target.current == M) + return 1 //They're restrained on the shuttle. Success. + else + return 0 + +/datum/objective/heist/loot/choose_target() + var/loot = "an object" + switch(rand(1,8)) + if(1) + target = /obj/structure/particle_accelerator + target_amount = 6 + loot = "a complete particle accelerator" + if(2) + target = /obj/machinery/the_singularitygen + target_amount = 1 + loot = "a gravitational generator" + if(3) + target = /obj/machinery/power/emitter + target_amount = 4 + loot = "four emitters" + if(4) + target = /obj/machinery/nuclearbomb + target_amount = 1 + loot = "a nuclear bomb" + if(5) + target = /obj/item/weapon/gun + target_amount = 6 + loot = "six guns" + if(6) + target = /obj/item/weapon/gun/energy + target_amount = 4 + loot = "four energy guns" + if(7) + target = /obj/item/weapon/gun/energy/laser + target_amount = 2 + loot = "two laser guns" + if(8) + target = /obj/item/weapon/gun/energy/ionrifle + target_amount = 1 + loot = "an ion gun" + + explanation_text = "It's a buyer's market out here. Steal [loot] for resale." + + +/datum/objective/heist/loot/check_completion() + var/total_amount = 0 + + for(var/obj/O in locate(/area/shuttle/skipjack)) // CHOMPEdit: Shuttle area pathname + if(istype(O,target)) total_amount++ + for(var/obj/I in O.contents) + if(istype(I,target)) total_amount++ + if(total_amount >= target_amount) return 1 + + for(var/datum/mind/raider in raiders.current_antagonists) + if(raider.current) + for(var/obj/O in raider.current.get_contents()) + if(istype(O,target)) total_amount++ + if(total_amount >= target_amount) return 1 + + return 0 + +/datum/objective/heist/salvage/choose_target() + switch(rand(1,8)) + if(1) + target = MAT_STEEL + target_amount = 300 + if(2) + target = MAT_GLASS + target_amount = 200 + if(3) + target = MAT_PLASTEEL + target_amount = 100 + if(4) + target = MAT_PHORON + target_amount = 100 + if(5) + target = MAT_SILVER + target_amount = 50 + if(6) + target = MAT_GOLD + target_amount = 20 + if(7) + target = MAT_URANIUM + target_amount = 20 + if(8) + target = MAT_DIAMOND + target_amount = 20 + + explanation_text = "Ransack the station and escape with [target_amount] [target]." + +/datum/objective/heist/salvage/check_completion() + + var/total_amount = 0 + + for(var/obj/item/O in locate(/area/shuttle/skipjack)) //CHOMP Edit: Skipjack area pathname + + var/obj/item/stack/material/S + if(istype(O,/obj/item/stack/material)) + if(O.name == target) + S = O + total_amount += S.get_amount() + for(var/obj/I in O.contents) + if(istype(I,/obj/item/stack/material)) + if(I.name == target) + S = I + total_amount += S.get_amount() + + for(var/datum/mind/raider in raiders.current_antagonists) + if(raider.current) + for(var/obj/item/O in raider.current.get_contents()) + if(istype(O,/obj/item/stack/material)) + if(O.name == target) + var/obj/item/stack/material/S = O + total_amount += S.get_amount() + + if(total_amount >= target_amount) return 1 + return 0 + + +/datum/objective/heist/preserve_crew + explanation_text = "Do not leave anyone behind, alive or dead." + +/datum/objective/heist/preserve_crew/check_completion() + if(raiders && raiders.is_raider_crew_safe()) return 1 + return 0 + +//Borer objective(s). +/datum/objective/borer_survive + explanation_text = "Survive in a host until the end of the round." + +/datum/objective/borer_survive/check_completion() + if(owner) + var/mob/living/simple_mob/animal/borer/B = owner + if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1 + return 0 + +/datum/objective/borer_reproduce + explanation_text = "Reproduce at least once." + +/datum/objective/borer_reproduce/check_completion() + if(owner && owner.current) + var/mob/living/simple_mob/animal/borer/B = owner.current + if(istype(B) && B.has_reproduced) return 1 + return 0 + +/datum/objective/ninja_highlander + explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." + +/datum/objective/ninja_highlander/check_completion() + if(owner) + for(var/datum/mind/ninja in get_antags("ninja")) + if(ninja != owner) + if(ninja.current.stat < 2) return 0 + return 1 + return 0 + +/datum/objective/cult/survive + explanation_text = "Our knowledge must live on." + target_amount = 5 + +/datum/objective/cult/survive/New() + ..() + explanation_text = "Our knowledge must live on. Make sure at least [target_amount] acolytes escape on the shuttle to spread their work on an another station." + +/datum/objective/cult/survive/check_completion() + var/acolytes_survived = 0 + if(!cult) + return 0 + for(var/datum/mind/cult_mind in cult.current_antagonists) + if (cult_mind.current && cult_mind.current.stat!=2) + var/area/A = get_area(cult_mind.current ) + if ( is_type_in_list(A, centcom_areas)) + acolytes_survived++ + if(acolytes_survived >= target_amount) + return 0 + else + return 1 + +/datum/objective/cult/eldergod + explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it. The convert rune is join blood self." + +/datum/objective/cult/eldergod/check_completion() + return (locate(/obj/singularity/narsie/large) in machines) + +/datum/objective/cult/sacrifice + explanation_text = "Conduct a ritual sacrifice for the glory of Nar-Sie." + +/datum/objective/cult/sacrifice/find_target() + var/list/possible_targets = list() + if(!possible_targets.len) + for(var/mob/living/carbon/human/player in player_list) + if(player.mind && !(player.mind in cult)) + possible_targets += player.mind + if(possible_targets.len > 0) + target = pick(possible_targets) + if(target) explanation_text = "Sacrifice [target.name], the [target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." + +/datum/objective/cult/sacrifice/check_completion() + return (target && cult && !cult.sacrificed.Find(target)) + +/datum/objective/rev/find_target() + ..() + if(target && target.current) + explanation_text = "Assassinate, capture or convert [target.current.real_name], the [target.assigned_role]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/rev/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Assassinate, capture or convert [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/rev/check_completion() + var/rval = 1 + if(target && target.current) + var/mob/living/carbon/human/H = target.current + if(!istype(H)) + return 1 + if(H.stat == DEAD || H.restrained()) + return 1 + // Check if they're converted + if(target in revs.current_antagonists) + return 1 + var/turf/T = get_turf(H) + if(T && isNotStationLevel(T.z)) //If they leave the station they count as dead for this + rval = 2 + return 0 + return rval diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 54f75a0032..afa1d219ba 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -1,12 +1,12 @@ -/datum/game_mode/revolution - name = "Revolution" - config_tag = "revolution" - round_description = "Some crewmembers are attempting to start a revolution!" - extended_round_description = "Revolutionaries - Remove the heads of staff from power. Convert other crewmembers to your cause using the 'Convert Bourgeoise' verb. Protect your leaders." - required_players = 12 //should be enough for a decent manifest, hopefully - required_players_secret = 12 //pretty sure rev doesn't even appear in secret - required_enemies = 3 - auto_recall_shuttle = 0 //un-wanted on polaris - end_on_antag_death = 0 - antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST) - require_all_templates = 1 +/datum/game_mode/revolution + name = "Revolution" + config_tag = "revolution" + round_description = "Some crewmembers are attempting to start a revolution!" + extended_round_description = "Revolutionaries - Remove the heads of staff from power. Convert other crewmembers to your cause using the 'Convert Bourgeoise' verb. Protect your leaders." + required_players = 12 //should be enough for a decent manifest, hopefully + required_players_secret = 12 //pretty sure rev doesn't even appear in secret + required_enemies = 3 + auto_recall_shuttle = 0 //un-wanted on polaris + end_on_antag_death = 0 + antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST) + require_all_templates = 1 diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 449d448fe0..5dcffb9d7d 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -1,149 +1,149 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -var/hsboxspawn = 1 -var/list - hrefs = list( - "hsbsuit" = "Suit Up (Space Travel Gear)", - "hsbmetal" = "Spawn 50 Metal", - "hsbglass" = "Spawn 50 Glass", - "hsbairlock" = "Spawn Airlock", - "hsbregulator" = "Spawn Air Regulator", - "hsbfilter" = "Spawn Air Filter", - "hsbcanister" = "Spawn Canister", - "hsbfueltank" = "Spawn Welding Fuel Tank", - "hsbwater tank" = "Spawn Water Tank", - "hsbtoolbox" = "Spawn Toolbox", - "hsbmedkit" = "Spawn Medical Kit") - -mob - var/datum/hSB/sandbox = null - proc - CanBuild() - if(master_mode == "sandbox") - sandbox = new/datum/hSB - sandbox.owner = src.ckey - if(src.client.holder) - sandbox.admin = 1 - verbs += new/mob/proc/sandbox_panel - sandbox_panel() - if(sandbox) - sandbox.update() - -/datum/hSB - var/owner = null - var/admin = 0 - proc - update() - var/hsbpanel = "
    h_Sandbox Panel

    " - if(admin) - hsbpanel += "Administration Tools:
    " - hsbpanel += "- Toggle Object Spawning

    " - hsbpanel += "Regular Tools:
    " - for(var/T in hrefs) - hsbpanel += "- [hrefs[T]]
    " - if(hsboxspawn) - hsbpanel += "- Spawn Object

    " - usr << browse(hsbpanel, "window=hsbpanel") - Topic(href, href_list) - if(!(src.owner == usr.ckey)) return - if(!usr) return //I guess this is possible if they log out or die with the panel open? It happened. - if(href_list["hsb"]) - switch(href_list["hsb"]) - if("hsbtobj") - if(!admin) return - if(hsboxspawn) - to_world("Sandbox: [usr.key] has disabled object spawning!") - hsboxspawn = 0 - return - if(!hsboxspawn) - to_world("Sandbox: [usr.key] has enabled object spawning!") - hsboxspawn = 1 - return - if("hsbsuit") - var/mob/living/carbon/human/P = usr - if(P.wear_suit) - P.wear_suit.loc = P.loc - P.wear_suit.reset_plane_and_layer() - P.wear_suit = null - P.wear_suit = new/obj/item/clothing/suit/space(P) - P.wear_suit.hud_layerise() - if(P.head) - P.head.loc = P.loc - P.head.reset_plane_and_layer() - P.head = null - P.head = new/obj/item/clothing/head/helmet/space(P) - P.head.hud_layerise() - if(P.wear_mask) - P.wear_mask.loc = P.loc - P.wear_mask.reset_plane_and_layer() - P.wear_mask = null - P.wear_mask = new/obj/item/clothing/mask/gas(P) - P.wear_mask.hud_layerise() - if(P.back) - P.back.loc = P.loc - P.back.reset_plane_and_layer() - P.back = null - P.back = new/obj/item/weapon/tank/jetpack(P) - P.back.hud_layerise() - P.internal = P.back - if("hsbmetal") - var/obj/fiftyspawner/iron/hsb = new/obj/fiftyspawner/iron - hsb.loc = usr.loc - if("hsbglass") - var/obj/fiftyspawner/glass/hsb = new/obj/fiftyspawner/glass - hsb.loc = usr.loc - if("hsbairlock") - var/obj/machinery/door/hsb = new/obj/machinery/door/airlock - - //TODO: DEFERRED make this better, with an HTML window or something instead of 15 popups - hsb.req_access = list() - var/accesses = get_all_accesses() - for(var/A in accesses) - if(tgui_alert(usr, "Will this airlock require [get_access_desc(A)] access?", "Sandbox:", list("Yes", "No")) == "Yes") - LAZYADD(hsb.req_access, A) - - hsb.loc = usr.loc - to_chat(usr, "Sandbox: Created an airlock.") - if("hsbcanister") - var/list/hsbcanisters = subtypesof(/obj/machinery/portable_atmospherics/canister) - var/hsbcanister = tgui_input_list(usr, "Choose a canister to spawn:", "Sandbox", hsbcanisters) - if(hsbcanister) - new hsbcanister(usr.loc) - if("hsbfueltank") - //var/obj/hsb = new/obj/weldfueltank - //hsb.loc = usr.loc - if("hsbwatertank") - //var/obj/hsb = new/obj/watertank - //hsb.loc = usr.loc - if("hsbtoolbox") - var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox/mechanical - for(var/obj/item/device/radio/T in hsb) - qdel(T) - new/obj/item/weapon/tool/crowbar (hsb) - hsb.loc = usr.loc - if("hsbmedkit") - var/obj/item/weapon/storage/firstaid/hsb = new/obj/item/weapon/storage/firstaid/regular - hsb.loc = usr.loc - if("hsbobj") - if(!hsboxspawn) return - - var/list/selectable = list() - for(var/O in typesof(/obj/item/)) - //Note, these istypes don't work - if(istype(O, /obj/item/weapon/gun)) - continue - if(istype(O, /obj/item/assembly)) - continue - if(istype(O, /obj/item/device/camera)) - continue - if(istype(O, /obj/item/weapon/dummy)) - continue - if(istype(O, /obj/item/weapon/melee/energy/sword)) - continue - if(istype(O, /obj/structure)) - continue - selectable += O - - var/hsbitem = tgui_input_list(usr, "Choose an object to spawn:", "Sandbox", selectable) - if(hsbitem) - new hsbitem(usr.loc) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +var/hsboxspawn = 1 +var/list + hrefs = list( + "hsbsuit" = "Suit Up (Space Travel Gear)", + "hsbmetal" = "Spawn 50 Metal", + "hsbglass" = "Spawn 50 Glass", + "hsbairlock" = "Spawn Airlock", + "hsbregulator" = "Spawn Air Regulator", + "hsbfilter" = "Spawn Air Filter", + "hsbcanister" = "Spawn Canister", + "hsbfueltank" = "Spawn Welding Fuel Tank", + "hsbwater tank" = "Spawn Water Tank", + "hsbtoolbox" = "Spawn Toolbox", + "hsbmedkit" = "Spawn Medical Kit") + +mob + var/datum/hSB/sandbox = null + proc + CanBuild() + if(master_mode == "sandbox") + sandbox = new/datum/hSB + sandbox.owner = src.ckey + if(src.client.holder) + sandbox.admin = 1 + verbs += new/mob/proc/sandbox_panel + sandbox_panel() + if(sandbox) + sandbox.update() + +/datum/hSB + var/owner = null + var/admin = 0 + proc + update() + var/hsbpanel = "
    h_Sandbox Panel

    " + if(admin) + hsbpanel += "Administration Tools:
    " + hsbpanel += "- Toggle Object Spawning

    " + hsbpanel += "Regular Tools:
    " + for(var/T in hrefs) + hsbpanel += "- [hrefs[T]]
    " + if(hsboxspawn) + hsbpanel += "- Spawn Object

    " + usr << browse(hsbpanel, "window=hsbpanel") + Topic(href, href_list) + if(!(src.owner == usr.ckey)) return + if(!usr) return //I guess this is possible if they log out or die with the panel open? It happened. + if(href_list["hsb"]) + switch(href_list["hsb"]) + if("hsbtobj") + if(!admin) return + if(hsboxspawn) + to_world("Sandbox: [usr.key] has disabled object spawning!") + hsboxspawn = 0 + return + if(!hsboxspawn) + to_world("Sandbox: [usr.key] has enabled object spawning!") + hsboxspawn = 1 + return + if("hsbsuit") + var/mob/living/carbon/human/P = usr + if(P.wear_suit) + P.wear_suit.loc = P.loc + P.wear_suit.reset_plane_and_layer() + P.wear_suit = null + P.wear_suit = new/obj/item/clothing/suit/space(P) + P.wear_suit.hud_layerise() + if(P.head) + P.head.loc = P.loc + P.head.reset_plane_and_layer() + P.head = null + P.head = new/obj/item/clothing/head/helmet/space(P) + P.head.hud_layerise() + if(P.wear_mask) + P.wear_mask.loc = P.loc + P.wear_mask.reset_plane_and_layer() + P.wear_mask = null + P.wear_mask = new/obj/item/clothing/mask/gas(P) + P.wear_mask.hud_layerise() + if(P.back) + P.back.loc = P.loc + P.back.reset_plane_and_layer() + P.back = null + P.back = new/obj/item/weapon/tank/jetpack(P) + P.back.hud_layerise() + P.internal = P.back + if("hsbmetal") + var/obj/fiftyspawner/iron/hsb = new/obj/fiftyspawner/iron + hsb.loc = usr.loc + if("hsbglass") + var/obj/fiftyspawner/glass/hsb = new/obj/fiftyspawner/glass + hsb.loc = usr.loc + if("hsbairlock") + var/obj/machinery/door/hsb = new/obj/machinery/door/airlock + + //TODO: DEFERRED make this better, with an HTML window or something instead of 15 popups + hsb.req_access = list() + var/accesses = get_all_accesses() + for(var/A in accesses) + if(tgui_alert(usr, "Will this airlock require [get_access_desc(A)] access?", "Sandbox:", list("Yes", "No")) == "Yes") + LAZYADD(hsb.req_access, A) + + hsb.loc = usr.loc + to_chat(usr, "Sandbox: Created an airlock.") + if("hsbcanister") + var/list/hsbcanisters = subtypesof(/obj/machinery/portable_atmospherics/canister) + var/hsbcanister = tgui_input_list(usr, "Choose a canister to spawn:", "Sandbox", hsbcanisters) + if(hsbcanister) + new hsbcanister(usr.loc) + if("hsbfueltank") + //var/obj/hsb = new/obj/weldfueltank + //hsb.loc = usr.loc + if("hsbwatertank") + //var/obj/hsb = new/obj/watertank + //hsb.loc = usr.loc + if("hsbtoolbox") + var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox/mechanical + for(var/obj/item/device/radio/T in hsb) + qdel(T) + new/obj/item/weapon/tool/crowbar (hsb) + hsb.loc = usr.loc + if("hsbmedkit") + var/obj/item/weapon/storage/firstaid/hsb = new/obj/item/weapon/storage/firstaid/regular + hsb.loc = usr.loc + if("hsbobj") + if(!hsboxspawn) return + + var/list/selectable = list() + for(var/O in typesof(/obj/item/)) + //Note, these istypes don't work + if(istype(O, /obj/item/weapon/gun)) + continue + if(istype(O, /obj/item/assembly)) + continue + if(istype(O, /obj/item/device/camera)) + continue + if(istype(O, /obj/item/weapon/dummy)) + continue + if(istype(O, /obj/item/weapon/melee/energy/sword)) + continue + if(istype(O, /obj/structure)) + continue + selectable += O + + var/hsbitem = tgui_input_list(usr, "Choose an object to spawn:", "Sandbox", selectable) + if(hsbitem) + new hsbitem(usr.loc) diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm index 2dbcd77a30..385c007c7f 100644 --- a/code/game/gamemodes/sandbox/sandbox.dm +++ b/code/game/gamemodes/sandbox/sandbox.dm @@ -1,23 +1,23 @@ -/datum/game_mode/sandbox - name = "Sandbox" - config_tag = "sandbox" - required_players = 0 - votable = 0 - round_description = "Build your own station!" - extended_round_description = "You can use the sandbox-panel command to access build options." - -/datum/game_mode/sandbox/pre_setup() - for(var/mob/M in player_list) - M.CanBuild() - return 1 - -/datum/game_mode/sandbox/process() - for(var/mob/M in player_list) - if(M.sandbox == null) - M.CanBuild() - return 1 - -/datum/game_mode/sandbox/post_setup() - ..() - if(emergency_shuttle) - emergency_shuttle.auto_recall = 1 +/datum/game_mode/sandbox + name = "Sandbox" + config_tag = "sandbox" + required_players = 0 + votable = 0 + round_description = "Build your own station!" + extended_round_description = "You can use the sandbox-panel command to access build options." + +/datum/game_mode/sandbox/pre_setup() + for(var/mob/M in player_list) + M.CanBuild() + return 1 + +/datum/game_mode/sandbox/process() + for(var/mob/M in player_list) + if(M.sandbox == null) + M.CanBuild() + return 1 + +/datum/game_mode/sandbox/post_setup() + ..() + if(emergency_shuttle) + emergency_shuttle.auto_recall = 1 diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index 5e68620145..1ad2b543d3 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -1,83 +1,83 @@ -///////////////////////// -// (mostly) DNA2 SETUP -///////////////////////// - -// Randomize block, assign a reference name, and optionally define difficulty (by making activation zone smaller or bigger) -// The name is used on /vg/ for species with predefined genetic traits, -// and for the DNA panel in the player panel. -/proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS) - if(blocksLeft.len==0) - warning("[name]: No more blocks left to assign!") - return 0 - var/assigned = pick(blocksLeft) - blocksLeft.Remove(assigned) - assigned_blocks[assigned]=name - dna_activity_bounds[assigned]=activity_bounds - //testing("[name] assigned to block #[assigned].") - return assigned - -/proc/setupgenetics() - - if (prob(50)) - // Currently unused. Will revisit. - N3X - BLOCKADD = rand(-300,300) - if (prob(75)) - DIFFMUT = rand(0,20) - - var/list/numsToAssign=new() - for(var/i=1;iYour account number is: [M.account_number], your account pin is: [M.remote_access_pin]") - -// overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/qdel() -/datum/job/proc/equip_preview(mob/living/carbon/human/H, var/alt_title) - var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title) - if(!outfit) - return FALSE - . = outfit.equip_base(H, title, alt_title) - -/datum/job/proc/get_access() - if(!config || config.jobs_have_minimal_access) - return src.minimal_access.Copy() - else - return src.access.Copy() - -//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 -/datum/job/proc/player_old_enough(client/C) - return (available_in_days(C) == 0) //Available in 0 days = available right now = player is old enough to play. - -/datum/job/proc/available_in_days(client/C) - if(C && config.use_age_restriction_for_jobs && isnum(C.player_age) && isnum(minimal_player_age)) - return max(0, minimal_player_age - C.player_age) - return 0 - -/datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/target) - if(!istype(target)) - return 0 - for(var/obj/item/item in target.contents) - apply_fingerprints_to_item(target, item) - return 1 - -/datum/job/proc/apply_fingerprints_to_item(var/mob/living/carbon/human/holder, var/obj/item/item) - item.add_fingerprint(holder,1) - if(item.contents.len) - for(var/obj/item/sub_item in item.contents) - apply_fingerprints_to_item(holder, sub_item) - -/datum/job/proc/is_position_available() - return (current_positions < total_positions) || (total_positions == -1) - -/datum/job/proc/has_alt_title(var/mob/H, var/supplied_title, var/desired_title) - return (supplied_title == desired_title) || (H.mind && H.mind.role_alt_title == desired_title) - -/datum/job/proc/get_description_blurb(var/alt_title) - var/list/message = list() - message |= job_description - - if(alt_title && alt_titles) - var/typepath = alt_titles[alt_title] - if(typepath) - var/datum/alt_title/A = new typepath() - if(A.title_blurb) - message |= A.title_blurb - return message - -/datum/job/proc/get_job_icon() - if(!job_master.job_icons[title]) - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon") - dress_mannequin(mannequin) - mannequin.dir = SOUTH - mannequin.ImmediateOverlayUpdate() - var/icon/preview_icon = getFlatIcon(mannequin) - - preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. - job_master.job_icons[title] = preview_icon - - return job_master.job_icons[title] - -/datum/job/proc/dress_mannequin(var/mob/living/carbon/human/dummy/mannequin/mannequin) - mannequin.delete_inventory(TRUE) - equip_preview(mannequin) - if(mannequin.back) - var/obj/O = mannequin.back - mannequin.drop_from_inventory(O) - qdel(O) - -///Assigns minimum age by race & brain type. Code says Positronic = mechanical and Drone = digital because nothing can be simple. -///Will first check based on brain type, then based on species. -/datum/job/proc/get_min_age(species_name, brain_type) - return minimum_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species - //return (brain_type && LAZYACCESS(min_age_by_species, brain_type)) || LAZYACCESS(min_age_by_species, species_name) || minimum_character_age //VOREStation Removal - -/datum/job/proc/get_ideal_age(species_name, brain_type) - return ideal_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species - //return (brain_type && LAZYACCESS(ideal_age_by_species, brain_type)) || LAZYACCESS(ideal_age_by_species, brain_type) || ideal_character_age //VOREStation Removal - -/datum/job/proc/is_species_banned(species_name, brain_type) - // CHOMPEdit begin -- Shadekin cannot be any crew position - if(species_name == SPECIES_SHADEKIN) - return TRUE - // CHOMPEdit end - return FALSE // VOREStation Edit - Any species can be any job. - /* VOREStation Removal - if(banned_job_species == null) - return - if(species_name in banned_job_species) - return TRUE - if(brain_type in banned_job_species) - return TRUE - */ +/datum/job + + //The name of the job + var/title = "NOPE" + //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access + var/list/minimal_access = list() // Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population) + var/list/access = list() // Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!) + var/flag = 0 // Bitflags for the job + var/department_flag = 0 + var/faction = "None" // Players will be allowed to spawn in as jobs that are set to "Station" + var/total_positions = 0 // How many players can be this job + var/spawn_positions = 0 // How many players can spawn in as this job + var/current_positions = 0 // How many players have this job + var/supervisors = null // Supervisors, who this person answers to directly + var/selection_color = "#ffffff" // Selection screen color + var/list/alt_titles = null // List of alternate titles; There is no need for an alt-title datum for the base job title. + var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. + var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) + var/list/departments = list() // List of departments this job belongs to, if any. The first one on the list will be the 'primary' department. + var/sorting_order = 0 // Used for sorting jobs so boss jobs go above regular ones, and their boss's boss is above that. Higher numbers = higher in sorting. + var/departments_managed = null // Is this a management position? If yes, list of departments managed. Otherwise null. + var/department_accounts = null // Which department accounts should people with this position be given the pin for? + var/assignable = TRUE // Should it show up on things like the ID computer? + var/minimum_character_age = 0 + var/list/min_age_by_species = null + var/ideal_character_age = 30 + var/list/ideal_age_by_species = null + var/list/banned_job_species = null + var/has_headset = TRUE //Do people with this job need to be given headsets and told how to use them? E.g. Cyborgs don't. + + var/account_allowed = 1 // Does this job type come with a station account? + var/economic_modifier = 2 // With how much does this job modify the initial account amount? + + var/outfit_type // What outfit datum does this job use in its default title? + + var/offmap_spawn = FALSE // Do we require weird and special spawning and datacore handling? + var/mob_type = JOB_CARBON // Bitflags representing mob type this job spawns + + // Description of the job's role and minimum responsibilities. + var/job_description = "This Job doesn't have a description! Please report it!" + +/datum/job/New() + . = ..() + department_accounts = department_accounts || departments_managed + +/datum/job/proc/equip(var/mob/living/carbon/human/H, var/alt_title) + var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title) + if(!outfit) + return FALSE + . = outfit.equip(H, title, alt_title) + return 1 + +/datum/job/proc/get_outfit(var/mob/living/carbon/human/H, var/alt_title) + if(alt_title && alt_titles) + var/datum/alt_title/A = alt_titles[alt_title] + if(A && initial(A.title_outfit)) + . = initial(A.title_outfit) + . = . || outfit_type + . = outfit_by_type(.) + +/datum/job/proc/setup_account(var/mob/living/carbon/human/H) + if(!account_allowed || (H.mind && H.mind.initial_account)) + return + + var/income = 1 + if(H.client) + switch(H.client.prefs.economic_status) + if(CLASS_UPPER) income = 1.30 + if(CLASS_UPMID) income = 1.15 + if(CLASS_MIDDLE) income = 1 + if(CLASS_LOWMID) income = 0.75 + if(CLASS_LOWER) income = 0.50 + if(CLASS_BROKE) income = 0 //VOREStation Add - Rent's not cheap + + //give them an account in the station database + var/money_amount = (rand(15,40) + rand(15,40)) * income * economic_modifier * ECO_MODIFIER //VOREStation Edit - Smoothed peaks, ECO_MODIFIER rather than per-species ones. + var/datum/money_account/M = create_account(H.real_name, money_amount, null, offmap_spawn) + if(H.mind) + var/remembered_info = "" + remembered_info += "Your account number is: #[M.account_number]
    " + remembered_info += "Your account pin is: [M.remote_access_pin]
    " + remembered_info += "Your account funds are: $[M.money]
    " + + if(M.transaction_log.len) + var/datum/transaction/T = M.transaction_log[1] + remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal]
    " + H.mind.store_memory(remembered_info) + + H.mind.initial_account = M + + to_chat(H, "Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]") + +// overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/qdel() +/datum/job/proc/equip_preview(mob/living/carbon/human/H, var/alt_title) + var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title) + if(!outfit) + return FALSE + . = outfit.equip_base(H, title, alt_title) + +/datum/job/proc/get_access() + if(!config || config.jobs_have_minimal_access) + return src.minimal_access.Copy() + else + return src.access.Copy() + +//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 +/datum/job/proc/player_old_enough(client/C) + return (available_in_days(C) == 0) //Available in 0 days = available right now = player is old enough to play. + +/datum/job/proc/available_in_days(client/C) + if(C && config.use_age_restriction_for_jobs && isnum(C.player_age) && isnum(minimal_player_age)) + return max(0, minimal_player_age - C.player_age) + return 0 + +/datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/target) + if(!istype(target)) + return 0 + for(var/obj/item/item in target.contents) + apply_fingerprints_to_item(target, item) + return 1 + +/datum/job/proc/apply_fingerprints_to_item(var/mob/living/carbon/human/holder, var/obj/item/item) + item.add_fingerprint(holder,1) + if(item.contents.len) + for(var/obj/item/sub_item in item.contents) + apply_fingerprints_to_item(holder, sub_item) + +/datum/job/proc/is_position_available() + return (current_positions < total_positions) || (total_positions == -1) + +/datum/job/proc/has_alt_title(var/mob/H, var/supplied_title, var/desired_title) + return (supplied_title == desired_title) || (H.mind && H.mind.role_alt_title == desired_title) + +/datum/job/proc/get_description_blurb(var/alt_title) + var/list/message = list() + message |= job_description + + if(alt_title && alt_titles) + var/typepath = alt_titles[alt_title] + if(typepath) + var/datum/alt_title/A = new typepath() + if(A.title_blurb) + message |= A.title_blurb + return message + +/datum/job/proc/get_job_icon() + if(!job_master.job_icons[title]) + var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon") + dress_mannequin(mannequin) + mannequin.dir = SOUTH + mannequin.ImmediateOverlayUpdate() + var/icon/preview_icon = getFlatIcon(mannequin) + + preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. + job_master.job_icons[title] = preview_icon + + return job_master.job_icons[title] + +/datum/job/proc/dress_mannequin(var/mob/living/carbon/human/dummy/mannequin/mannequin) + mannequin.delete_inventory(TRUE) + equip_preview(mannequin) + if(mannequin.back) + var/obj/O = mannequin.back + mannequin.drop_from_inventory(O) + qdel(O) + +///Assigns minimum age by race & brain type. Code says Positronic = mechanical and Drone = digital because nothing can be simple. +///Will first check based on brain type, then based on species. +/datum/job/proc/get_min_age(species_name, brain_type) + return minimum_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species + //return (brain_type && LAZYACCESS(min_age_by_species, brain_type)) || LAZYACCESS(min_age_by_species, species_name) || minimum_character_age //VOREStation Removal + +/datum/job/proc/get_ideal_age(species_name, brain_type) + return ideal_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species + //return (brain_type && LAZYACCESS(ideal_age_by_species, brain_type)) || LAZYACCESS(ideal_age_by_species, brain_type) || ideal_character_age //VOREStation Removal + +/datum/job/proc/is_species_banned(species_name, brain_type) + // CHOMPEdit begin -- Shadekin cannot be any crew position + if(species_name == SPECIES_SHADEKIN) + return TRUE + // CHOMPEdit end + return FALSE // VOREStation Edit - Any species can be any job. + /* VOREStation Removal + if(banned_job_species == null) + return + if(species_name in banned_job_species) + return TRUE + if(brain_type in banned_job_species) + return TRUE + */ diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6c66e9f7de..2c688e0117 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -1,202 +1,202 @@ -////////////////////////////////// -// Chief Medical Officer -////////////////////////////////// -/datum/job/cmo - title = "Chief Medical Officer" - flag = CMO - departments_managed = list(DEPARTMENT_MEDICAL) - departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_COMMAND) - sorting_order = 2 - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the Site Manager" - selection_color = "#026865" - req_admin_notify = 1 - economic_modifier = 10 - access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, - access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_teleporter, - access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) - minimal_access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, - access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_teleporter, - access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) - - minimum_character_age = 25 - min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14) - minimal_player_age = 10 - ideal_character_age = 50 - ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20) - banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital") - - outfit_type = /decl/hierarchy/outfit/job/medical/cmo - job_description = "The CMO manages the Medical department and is a position requiring experience and skill; their goal is to ensure that their \ - staff keep the station's crew healthy and whole. They are primarily interested in making sure that patients are safely found and \ - transported to Medical for treatment. They are expected to keep the crew informed about threats to their health and safety, and \ - about the importance of Suit Sensors." - -////////////////////////////////// -// Medical Doctor -////////////////////////////////// -/datum/job/doctor - title = "Medical Doctor" - flag = DOCTOR - departments = list(DEPARTMENT_MEDICAL) - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the Chief Medical Officer" - selection_color = "#013D3B" - economic_modifier = 7 - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva) - minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva) - outfit_type = /decl/hierarchy/outfit/job/medical/doctor - job_description = "A Medical Doctor is a Jack-of-All-Trades Medical title, covering a variety of skill levels and minor specializations. They are likely \ - familiar with basic first aid, and a number of accompanying medications, and can generally save, if not cure, a majority of the \ - patients they encounter." - alt_titles = list( - "Surgeon" = /datum/alt_title/surgeon, - "Emergency Physician" = /datum/alt_title/emergency_physician, - "Nurse" = /datum/alt_title/nurse, - "Virologist" = /datum/alt_title/virologist) - - min_age_by_species = list(SPECIES_PROMETHEAN = 3) - -//Medical Doctor Alt Titles -/datum/alt_title/surgeon - title = "Surgeon" - title_blurb = "A Surgeon specializes in providing surgical aid to injured patients, up to and including amputation and limb reattachement. They are expected \ - to know the ins and outs of anesthesia and surgery." - title_outfit = /decl/hierarchy/outfit/job/medical/doctor/surgeon - -/datum/alt_title/emergency_physician - title = "Emergency Physician" - title_blurb = "An Emergency Physician is a Medical professional trained for stabilizing and treating severely injured and/or dying patients. \ - They are generally the first response for any such individual brought to the Medbay, and can sometimes be expected to help their patients \ - make a full recovery." - title_outfit = /decl/hierarchy/outfit/job/medical/doctor/emergency_physician - -/datum/alt_title/nurse - title = "Nurse" - title_blurb = "A Nurse acts as a general purpose Doctor's Aide, providing basic care to non-critical patients, and stabilizing critical patients during \ - busy periods. They frequently watch the suit sensors console, to help manage the time of other Doctors. In rare occasions, a Nurse can be \ - called upon to revive deceased crew members." - title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse - -/datum/alt_title/virologist - title = "Virologist" - title_blurb = "A Virologist cures active diseases in the crew, and prepares antibodies for possible infections. They also have the skills \ - to produce the various types of virus foods or mutagens." - title_outfit = /decl/hierarchy/outfit/job/medical/doctor/virologist - -//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro -////////////////////////////////// -// Chemist -////////////////////////////////// -/datum/job/chemist - title = "Chemist" - flag = CHEMIST - departments = list(DEPARTMENT_MEDICAL) - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Medical Officer" - selection_color = "#013D3B" - economic_modifier = 5 - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) - minimal_access = list(access_medical, access_medical_equip, access_chemistry) - minimal_player_age = 3 - min_age_by_species = list(SPECIES_PROMETHEAN = 3) - - outfit_type = /decl/hierarchy/outfit/job/medical/chemist - job_description = "A Chemist produces and maintains a stock of basic to advanced chemicals for medical and occasionally research use. \ - They are likely to know the use and dangers of many lab-produced chemicals." - alt_titles = list("Pharmacist" = /datum/alt_title/pharmacist) - -// Chemist Alt Titles -/datum/alt_title/pharmacist - title = "Pharmacist" - title_blurb = "A Pharmacist focuses on the chemical needs of the Medical Department, and often offers to fill crew prescriptions at their discretion." - -////////////////////////////////// -// Geneticist -////////////////////////////////// -/datum/job/geneticist - title = "Geneticist" - flag = GENETICIST - departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_RESEARCH) - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Medical Officer and Research Director" - selection_color = "#013D3B" - economic_modifier = 7 - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) - minimal_access = list(access_medical, access_morgue, access_genetics, access_research) - - outfit_type = /decl/hierarchy/outfit/job/medical/geneticist - job_description = "A Geneticist operates genetic manipulation equipment to repair any genetic defects encountered in crew, from cloning or radiation as examples. \ - When required, geneticists have the skills to clone, and are the superior choice when available for doing so." - -////////////////////////////////// -// Psychiatrist -////////////////////////////////// -/datum/job/psychiatrist - title = "Psychiatrist" - flag = PSYCHIATRIST - departments = list(DEPARTMENT_MEDICAL) - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - economic_modifier = 5 - supervisors = "the Chief Medical Officer" - selection_color = "#013D3B" - access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist) - minimal_access = list(access_medical, access_medical_equip, access_psychiatrist) - outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist - job_description = "A Psychiatrist provides mental health services to crew members in need. They may also be called upon to determine whatever \ - ails the mentally unwell, frequently under Security supervision. They understand the effects of various psychoactive drugs." - alt_titles = list("Psychologist" = /datum/alt_title/psychologist) - banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_DIONA) - -//Psychiatrist Alt Titles -/datum/alt_title/psychologist - title = "Psychologist" - title_blurb = "A Psychologist provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \ - called upon to determine whatever ails the mentally unwell, frequently under Security supervision." - title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist - -////////////////////////////////// -// Paramedic -////////////////////////////////// -/datum/job/paramedic - title = "Paramedic" - flag = PARAMEDIC - departments = list(DEPARTMENT_MEDICAL) - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Medical Officer" - selection_color = "#013D3B" - economic_modifier = 5 //CHOMPstation edit - "Makes Parameds make as much as offduty medical." - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) - minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks) - outfit_type = /decl/hierarchy/outfit/job/medical/paramedic - job_description = "A Paramedic is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their own. \ - They may also be called upon to keep patients stable when Medical is busy or understaffed." - alt_titles = list("Emergency Medical Technician" = /datum/alt_title/emt) - banned_job_species = list(SPECIES_DIONA) - - min_age_by_species = list(SPECIES_PROMETHEAN = 2) - -// Paramedic Alt Titles -/datum/alt_title/emt - title = "Emergency Medical Technician" - title_blurb = "An Emergency Medical Technician is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \ - own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training." - title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt +////////////////////////////////// +// Chief Medical Officer +////////////////////////////////// +/datum/job/cmo + title = "Chief Medical Officer" + flag = CMO + departments_managed = list(DEPARTMENT_MEDICAL) + departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_COMMAND) + sorting_order = 2 + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the Site Manager" + selection_color = "#026865" + req_admin_notify = 1 + economic_modifier = 10 + access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, + access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_teleporter, + access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) + minimal_access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, + access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_teleporter, + access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) + + minimum_character_age = 25 + min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14) + minimal_player_age = 10 + ideal_character_age = 50 + ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20) + banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital") + + outfit_type = /decl/hierarchy/outfit/job/medical/cmo + job_description = "The CMO manages the Medical department and is a position requiring experience and skill; their goal is to ensure that their \ + staff keep the station's crew healthy and whole. They are primarily interested in making sure that patients are safely found and \ + transported to Medical for treatment. They are expected to keep the crew informed about threats to their health and safety, and \ + about the importance of Suit Sensors." + +////////////////////////////////// +// Medical Doctor +////////////////////////////////// +/datum/job/doctor + title = "Medical Doctor" + flag = DOCTOR + departments = list(DEPARTMENT_MEDICAL) + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the Chief Medical Officer" + selection_color = "#013D3B" + economic_modifier = 7 + access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva) + minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva) + outfit_type = /decl/hierarchy/outfit/job/medical/doctor + job_description = "A Medical Doctor is a Jack-of-All-Trades Medical title, covering a variety of skill levels and minor specializations. They are likely \ + familiar with basic first aid, and a number of accompanying medications, and can generally save, if not cure, a majority of the \ + patients they encounter." + alt_titles = list( + "Surgeon" = /datum/alt_title/surgeon, + "Emergency Physician" = /datum/alt_title/emergency_physician, + "Nurse" = /datum/alt_title/nurse, + "Virologist" = /datum/alt_title/virologist) + + min_age_by_species = list(SPECIES_PROMETHEAN = 3) + +//Medical Doctor Alt Titles +/datum/alt_title/surgeon + title = "Surgeon" + title_blurb = "A Surgeon specializes in providing surgical aid to injured patients, up to and including amputation and limb reattachement. They are expected \ + to know the ins and outs of anesthesia and surgery." + title_outfit = /decl/hierarchy/outfit/job/medical/doctor/surgeon + +/datum/alt_title/emergency_physician + title = "Emergency Physician" + title_blurb = "An Emergency Physician is a Medical professional trained for stabilizing and treating severely injured and/or dying patients. \ + They are generally the first response for any such individual brought to the Medbay, and can sometimes be expected to help their patients \ + make a full recovery." + title_outfit = /decl/hierarchy/outfit/job/medical/doctor/emergency_physician + +/datum/alt_title/nurse + title = "Nurse" + title_blurb = "A Nurse acts as a general purpose Doctor's Aide, providing basic care to non-critical patients, and stabilizing critical patients during \ + busy periods. They frequently watch the suit sensors console, to help manage the time of other Doctors. In rare occasions, a Nurse can be \ + called upon to revive deceased crew members." + title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse + +/datum/alt_title/virologist + title = "Virologist" + title_blurb = "A Virologist cures active diseases in the crew, and prepares antibodies for possible infections. They also have the skills \ + to produce the various types of virus foods or mutagens." + title_outfit = /decl/hierarchy/outfit/job/medical/doctor/virologist + +//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro +////////////////////////////////// +// Chemist +////////////////////////////////// +/datum/job/chemist + title = "Chemist" + flag = CHEMIST + departments = list(DEPARTMENT_MEDICAL) + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Chief Medical Officer" + selection_color = "#013D3B" + economic_modifier = 5 + access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) + minimal_access = list(access_medical, access_medical_equip, access_chemistry) + minimal_player_age = 3 + min_age_by_species = list(SPECIES_PROMETHEAN = 3) + + outfit_type = /decl/hierarchy/outfit/job/medical/chemist + job_description = "A Chemist produces and maintains a stock of basic to advanced chemicals for medical and occasionally research use. \ + They are likely to know the use and dangers of many lab-produced chemicals." + alt_titles = list("Pharmacist" = /datum/alt_title/pharmacist) + +// Chemist Alt Titles +/datum/alt_title/pharmacist + title = "Pharmacist" + title_blurb = "A Pharmacist focuses on the chemical needs of the Medical Department, and often offers to fill crew prescriptions at their discretion." + +////////////////////////////////// +// Geneticist +////////////////////////////////// +/datum/job/geneticist + title = "Geneticist" + flag = GENETICIST + departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_RESEARCH) + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Chief Medical Officer and Research Director" + selection_color = "#013D3B" + economic_modifier = 7 + access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) + minimal_access = list(access_medical, access_morgue, access_genetics, access_research) + + outfit_type = /decl/hierarchy/outfit/job/medical/geneticist + job_description = "A Geneticist operates genetic manipulation equipment to repair any genetic defects encountered in crew, from cloning or radiation as examples. \ + When required, geneticists have the skills to clone, and are the superior choice when available for doing so." + +////////////////////////////////// +// Psychiatrist +////////////////////////////////// +/datum/job/psychiatrist + title = "Psychiatrist" + flag = PSYCHIATRIST + departments = list(DEPARTMENT_MEDICAL) + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + economic_modifier = 5 + supervisors = "the Chief Medical Officer" + selection_color = "#013D3B" + access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist) + minimal_access = list(access_medical, access_medical_equip, access_psychiatrist) + outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist + job_description = "A Psychiatrist provides mental health services to crew members in need. They may also be called upon to determine whatever \ + ails the mentally unwell, frequently under Security supervision. They understand the effects of various psychoactive drugs." + alt_titles = list("Psychologist" = /datum/alt_title/psychologist) + banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_DIONA) + +//Psychiatrist Alt Titles +/datum/alt_title/psychologist + title = "Psychologist" + title_blurb = "A Psychologist provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \ + called upon to determine whatever ails the mentally unwell, frequently under Security supervision." + title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist + +////////////////////////////////// +// Paramedic +////////////////////////////////// +/datum/job/paramedic + title = "Paramedic" + flag = PARAMEDIC + departments = list(DEPARTMENT_MEDICAL) + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Chief Medical Officer" + selection_color = "#013D3B" + economic_modifier = 5 //CHOMPstation edit - "Makes Parameds make as much as offduty medical." + access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) + minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks) + outfit_type = /decl/hierarchy/outfit/job/medical/paramedic + job_description = "A Paramedic is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their own. \ + They may also be called upon to keep patients stable when Medical is busy or understaffed." + alt_titles = list("Emergency Medical Technician" = /datum/alt_title/emt) + banned_job_species = list(SPECIES_DIONA) + + min_age_by_species = list(SPECIES_PROMETHEAN = 2) + +// Paramedic Alt Titles +/datum/alt_title/emt + title = "Emergency Medical Technician" + title_blurb = "An Emergency Medical Technician is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \ + own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training." + title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 71c1d79b83..b9e9133b98 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -1,160 +1,160 @@ -////////////////////////////////// -// Research Director -////////////////////////////////// -/datum/job/rd - title = "Research Director" - flag = RD - departments_managed = list(DEPARTMENT_RESEARCH) - departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_COMMAND) - sorting_order = 2 - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the Site Manager" - selection_color = "#AD6BAD" - req_admin_notify = 1 - economic_modifier = 15 - access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, - access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_maint_tunnels) //Yawn added "access_maint_tunnels" - minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, - access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_maint_tunnels) - alt_titles = list("Research Supervisor") - - minimum_character_age = 25 - minimal_player_age = 14 - min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14) - ideal_character_age = 50 - ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20) - banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital") - - outfit_type = /decl/hierarchy/outfit/job/science/rd - job_description = "The Research Director manages and maintains the Research department. They are required to ensure the safety of the entire crew, \ - at least with regards to anything occurring in the Research department, and to inform the crew of any disruptions that \ - might originate from Research. The Research Director often has at least passing knowledge of most of the Research department, but \ - are encouraged to allow their staff to perform their own duties." - alt_titles = list("Research Supervisor" = /datum/alt_title/research_supervisor) - - -// Research Director Alt Titles -/datum/alt_title/research_supervisor - title = "Research Supervisor" - -////////////////////////////////// -// Scientist -////////////////////////////////// -/datum/job/scientist - title = "Scientist" - flag = SCIENTIST - departments = list(DEPARTMENT_RESEARCH) - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the Research Director" - selection_color = "#633D63" - economic_modifier = 7 - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch) - minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) - min_age_by_species = list(SPECIES_PROMETHEAN = 2) - banned_job_species = list("digital") - - minimal_player_age = 3 - - outfit_type = /decl/hierarchy/outfit/job/science/scientist - job_description = "A Scientist is a generalist working in the Research department, with general knowledge of the scientific process, as well as \ - the principles and requirements of Research and Development. They may also formulate experiments of their own devising, if \ - they find an appropriate topic." - alt_titles = list("Xenoarchaeologist" = /datum/alt_title/xenoarch, "Anomalist" = /datum/alt_title/anomalist, \ - "Phoron Researcher" = /datum/alt_title/phoron_research) - -// Scientist Alt Titles -/datum/alt_title/xenoarch - title = "Xenoarchaeologist" - title_blurb = "A Xenoarchaeologist enters digsites in search of artifacts of alien origin. These digsites are frequently in vacuum or other inhospitable \ - locations, and as such a Xenoarchaeologist should be prepared to handle hostile evironmental conditions." - -/datum/alt_title/anomalist - title = "Anomalist" - title_blurb = "An Anomalist is a Scientist whose expertise is analyzing alien artifacts. They are familar with the most common methods of testing artifact \ - function. They work closely with Xenoarchaeologists, or Miners, if either role is present." - -/datum/alt_title/phoron_research - title = "Phoron Researcher" - title_blurb = "A Phoron Researcher is a specialist in the practical applications of phoron, and has knowledge of its practical uses and dangers. \ - Many Phoron Researchers are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \ - of working with the substance in that state." - -////////////////////////////////// -// Xenobiologist -////////////////////////////////// -/datum/job/xenobiologist - title = "Xenobiologist" - flag = XENOBIOLOGIST - departments = list(DEPARTMENT_RESEARCH) - department_flag = MEDSCI - faction = "Station" - total_positions = 3 - spawn_positions = 2 - supervisors = "the Research Director" - selection_color = "#633D63" - economic_modifier = 7 - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics) - minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage) - banned_job_species = list("digital") - - minimal_player_age = 14 - min_age_by_species = list(SPECIES_PROMETHEAN = 2) - - outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist - job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \ - from the byproducts of these lifeforms, and their main subject at present is the Giant Slime." -/*VR edit start - alt_titles = list("Xenobotanist" = /datum/alt_title/xenobot) - - Xenibiologist Alt Titles -/datum/alt_title/xenobot - title = "Xenobotanist" - title_blurb = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \ - is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew." -VR edit end*/ - -////////////////////////////////// -// Roboticist -////////////////////////////////// -/datum/job/roboticist - title = "Roboticist" - flag = ROBOTICIST - departments = list(DEPARTMENT_RESEARCH) - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Research Director" - selection_color = "#633D63" - economic_modifier = 5 - access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. - minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. - minimal_player_age = 7 - min_age_by_species = list(SPECIES_PROMETHEAN = 2) - banned_job_species = list("digital") - - outfit_type = /decl/hierarchy/outfit/job/science/roboticist - job_description = "A Roboticist maintains and repairs the station's synthetics, including crew with prosthetic limbs. \ - They can also assist the station by producing simple robots and even pilotable exosuits." - alt_titles = list("Biomechanical Engineer" = /datum/alt_title/biomech, "Mechatronic Engineer" = /datum/alt_title/mech_tech) - -// Roboticist Alt Titles -/datum/alt_title/biomech - title = "Biomechanical Engineer" - title_blurb = "A Biomechanical Engineer primarily works on prosthetics, and the organic parts attached to them. They may have some \ - knowledge of the relatively simple surgical procedures used in making cyborgs and attaching prosthesis." - -/datum/alt_title/mech_tech - title = "Mechatronic Engineer" - title_blurb = "A Mechatronic Engineer focuses on the construction and maintenance of Exosuits, and should be well versed in their use. \ - They may also be called upon to work on synthetics and prosthetics, if needed." +////////////////////////////////// +// Research Director +////////////////////////////////// +/datum/job/rd + title = "Research Director" + flag = RD + departments_managed = list(DEPARTMENT_RESEARCH) + departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_COMMAND) + sorting_order = 2 + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the Site Manager" + selection_color = "#AD6BAD" + req_admin_notify = 1 + economic_modifier = 15 + access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, + access_tox_storage, access_teleporter, access_sec_doors, + access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, + access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_maint_tunnels) //Yawn added "access_maint_tunnels" + minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, + access_tox_storage, access_teleporter, access_sec_doors, + access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, + access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_maint_tunnels) + alt_titles = list("Research Supervisor") + + minimum_character_age = 25 + minimal_player_age = 14 + min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14) + ideal_character_age = 50 + ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20) + banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital") + + outfit_type = /decl/hierarchy/outfit/job/science/rd + job_description = "The Research Director manages and maintains the Research department. They are required to ensure the safety of the entire crew, \ + at least with regards to anything occurring in the Research department, and to inform the crew of any disruptions that \ + might originate from Research. The Research Director often has at least passing knowledge of most of the Research department, but \ + are encouraged to allow their staff to perform their own duties." + alt_titles = list("Research Supervisor" = /datum/alt_title/research_supervisor) + + +// Research Director Alt Titles +/datum/alt_title/research_supervisor + title = "Research Supervisor" + +////////////////////////////////// +// Scientist +////////////////////////////////// +/datum/job/scientist + title = "Scientist" + flag = SCIENTIST + departments = list(DEPARTMENT_RESEARCH) + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the Research Director" + selection_color = "#633D63" + economic_modifier = 7 + access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch) + minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) + min_age_by_species = list(SPECIES_PROMETHEAN = 2) + banned_job_species = list("digital") + + minimal_player_age = 3 + + outfit_type = /decl/hierarchy/outfit/job/science/scientist + job_description = "A Scientist is a generalist working in the Research department, with general knowledge of the scientific process, as well as \ + the principles and requirements of Research and Development. They may also formulate experiments of their own devising, if \ + they find an appropriate topic." + alt_titles = list("Xenoarchaeologist" = /datum/alt_title/xenoarch, "Anomalist" = /datum/alt_title/anomalist, \ + "Phoron Researcher" = /datum/alt_title/phoron_research) + +// Scientist Alt Titles +/datum/alt_title/xenoarch + title = "Xenoarchaeologist" + title_blurb = "A Xenoarchaeologist enters digsites in search of artifacts of alien origin. These digsites are frequently in vacuum or other inhospitable \ + locations, and as such a Xenoarchaeologist should be prepared to handle hostile evironmental conditions." + +/datum/alt_title/anomalist + title = "Anomalist" + title_blurb = "An Anomalist is a Scientist whose expertise is analyzing alien artifacts. They are familar with the most common methods of testing artifact \ + function. They work closely with Xenoarchaeologists, or Miners, if either role is present." + +/datum/alt_title/phoron_research + title = "Phoron Researcher" + title_blurb = "A Phoron Researcher is a specialist in the practical applications of phoron, and has knowledge of its practical uses and dangers. \ + Many Phoron Researchers are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \ + of working with the substance in that state." + +////////////////////////////////// +// Xenobiologist +////////////////////////////////// +/datum/job/xenobiologist + title = "Xenobiologist" + flag = XENOBIOLOGIST + departments = list(DEPARTMENT_RESEARCH) + department_flag = MEDSCI + faction = "Station" + total_positions = 3 + spawn_positions = 2 + supervisors = "the Research Director" + selection_color = "#633D63" + economic_modifier = 7 + access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics) + minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage) + banned_job_species = list("digital") + + minimal_player_age = 14 + min_age_by_species = list(SPECIES_PROMETHEAN = 2) + + outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist + job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \ + from the byproducts of these lifeforms, and their main subject at present is the Giant Slime." +/*VR edit start + alt_titles = list("Xenobotanist" = /datum/alt_title/xenobot) + + Xenibiologist Alt Titles +/datum/alt_title/xenobot + title = "Xenobotanist" + title_blurb = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \ + is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew." +VR edit end*/ + +////////////////////////////////// +// Roboticist +////////////////////////////////// +/datum/job/roboticist + title = "Roboticist" + flag = ROBOTICIST + departments = list(DEPARTMENT_RESEARCH) + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Research Director" + selection_color = "#633D63" + economic_modifier = 5 + access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. + minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. + minimal_player_age = 7 + min_age_by_species = list(SPECIES_PROMETHEAN = 2) + banned_job_species = list("digital") + + outfit_type = /decl/hierarchy/outfit/job/science/roboticist + job_description = "A Roboticist maintains and repairs the station's synthetics, including crew with prosthetic limbs. \ + They can also assist the station by producing simple robots and even pilotable exosuits." + alt_titles = list("Biomechanical Engineer" = /datum/alt_title/biomech, "Mechatronic Engineer" = /datum/alt_title/mech_tech) + +// Roboticist Alt Titles +/datum/alt_title/biomech + title = "Biomechanical Engineer" + title_blurb = "A Biomechanical Engineer primarily works on prosthetics, and the organic parts attached to them. They may have some \ + knowledge of the relatively simple surgical procedures used in making cyborgs and attaching prosthesis." + +/datum/alt_title/mech_tech + title = "Mechatronic Engineer" + title_blurb = "A Mechatronic Engineer focuses on the construction and maintenance of Exosuits, and should be well versed in their use. \ + They may also be called upon to work on synthetics and prosthetics, if needed." diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index d02bd8af61..e3565e6d32 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -1,139 +1,139 @@ -////////////////////////////////// -// Head of Security -////////////////////////////////// -/datum/job/hos - title = "Head of Security" - flag = HOS - departments_managed = list(DEPARTMENT_SECURITY) - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_COMMAND) - sorting_order = 2 - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the Site Manager" - selection_color = "#8E2929" - req_admin_notify = 1 - economic_modifier = 10 - access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, - access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, - access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) - minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, - access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, - access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) - minimum_character_age = 25 - min_age_by_species = list(SPECIES_HUMAN_VATBORN = 14) - minimal_player_age = 14 - ideal_character_age = 50 - ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 20) - banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_UNATHI, "mechanical") - - outfit_type = /decl/hierarchy/outfit/job/security/hos - job_description = " The Head of Security manages the Security Department, keeping the station safe and making sure the rules are followed. They are expected to \ - keep the other Department Heads, and the rest of the crew, aware of developing situations that may be a threat. If necessary, the HoS may \ - perform the duties of absent Security roles, such as distributing gear from the Armory." - alt_titles = list("Security Commander" = /datum/alt_title/sec_commander, "Chief of Security" = /datum/alt_title/sec_chief) - - -// Head of Security Alt Titles -/datum/alt_title/sec_commander - title = "Security Commander" - -/datum/alt_title/sec_chief - title = "Chief of Security" - -//YW ADDITION START: LOYALTY IMPLANT FOR HOS -/datum/job/hos/equip(var/mob/living/carbon/human/H) - . = ..() - if(.) - H.implant_loyalty(src) -//YW ADDITION END - -/datum/job/warden - title = "Warden" - flag = WARDEN - departments = list(DEPARTMENT_SECURITY) - sorting_order = 1 - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the Head of Security" - selection_color = "#601C1C" - economic_modifier = 5 - access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks) - minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks) - minimal_player_age = 5 - banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_TESHARI, SPECIES_DIONA) - - outfit_type = /decl/hierarchy/outfit/job/security/warden - job_description = "The Warden watches over the physical Security Department, making sure the Brig and Armoury are secure and in order at all times. They oversee \ - prisoners that have been processed and brigged, and are responsible for their well being. The Warden is also in charge of distributing \ - Armoury gear in a crisis, and retrieving it when the crisis has passed. In an emergency, the Warden may be called upon to direct the \ - Security Department as a whole." - -////////////////////////////////// -// Detective -////////////////////////////////// -/datum/job/detective - title = "Detective" - flag = DETECTIVE - departments = list(DEPARTMENT_SECURITY) - department_flag = ENGSEC - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Head of Security" - selection_color = "#601C1C" - access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks, access_brig) //Vorestation edit - access_brig - minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) - economic_modifier = 5 - minimal_player_age = 3 - banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_DIONA) - - outfit_type = /decl/hierarchy/outfit/job/security/detective - job_description = "A Detective works to help Security find criminals who have not properly been identified, through interviews and forensic work. \ - For crimes only witnessed after the fact, or those with no survivors, they attempt to piece together what they can from pure evidence." - alt_titles = list("Forensic Technician" = /datum/alt_title/forensic_tech) - -// Detective Alt Titles -/datum/alt_title/forensic_tech - title = "Forensic Technician" - title_blurb = "A Forensic Technician works more with hard evidence and labwork than a Detective, but they share the purpose of solving crimes." - title_outfit = /decl/hierarchy/outfit/job/security/detective/forensic - -////////////////////////////////// -// Security Officer -////////////////////////////////// -/datum/job/officer - title = "Security Officer" - flag = OFFICER - departments = list(DEPARTMENT_SECURITY) - department_flag = ENGSEC - faction = "Station" - total_positions = 4 - spawn_positions = 4 - supervisors = "the Head of Security" - selection_color = "#601C1C" - economic_modifier = 5 //CHOMPstation edit - "Offduty officers make more than working, and this brings it in line with the rest of the jobs in sec barring HOS" - access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks) - minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks) - minimal_player_age = 3 - banned_job_species = list(SPECIES_ZADDAT, SPECIES_TESHARI, SPECIES_DIONA) - - outfit_type = /decl/hierarchy/outfit/job/security/officer - job_description = "A Security Officer is concerned with maintaining the safety and security of the station as a whole, dealing with external threats and \ - apprehending criminals. A Security Officer is responsible for the health, safety, and processing of any prisoner they arrest. \ - No one is above the Law, not Security or Command." - alt_titles = list("Junior Officer" = /datum/alt_title/junior_officer) - - min_age_by_species = list(SPECIES_PROMETHEAN = 3) - -// Security Officer Alt Titles -/datum/alt_title/junior_officer - title = "Junior Officer" - title_blurb = "A Junior Officer is an inexperienced Security Officer. They likely have training, but not experience, and are frequently \ - paired off with a more senior co-worker. Junior Officers may also be expected to take over the boring duties of other Officers \ - including patrolling the station or maintaining specific posts." +////////////////////////////////// +// Head of Security +////////////////////////////////// +/datum/job/hos + title = "Head of Security" + flag = HOS + departments_managed = list(DEPARTMENT_SECURITY) + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_COMMAND) + sorting_order = 2 + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the Site Manager" + selection_color = "#8E2929" + req_admin_notify = 1 + economic_modifier = 10 + access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, + access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, + access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, + access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, + access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + minimum_character_age = 25 + min_age_by_species = list(SPECIES_HUMAN_VATBORN = 14) + minimal_player_age = 14 + ideal_character_age = 50 + ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 20) + banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_UNATHI, "mechanical") + + outfit_type = /decl/hierarchy/outfit/job/security/hos + job_description = " The Head of Security manages the Security Department, keeping the station safe and making sure the rules are followed. They are expected to \ + keep the other Department Heads, and the rest of the crew, aware of developing situations that may be a threat. If necessary, the HoS may \ + perform the duties of absent Security roles, such as distributing gear from the Armory." + alt_titles = list("Security Commander" = /datum/alt_title/sec_commander, "Chief of Security" = /datum/alt_title/sec_chief) + + +// Head of Security Alt Titles +/datum/alt_title/sec_commander + title = "Security Commander" + +/datum/alt_title/sec_chief + title = "Chief of Security" + +//YW ADDITION START: LOYALTY IMPLANT FOR HOS +/datum/job/hos/equip(var/mob/living/carbon/human/H) + . = ..() + if(.) + H.implant_loyalty(src) +//YW ADDITION END + +/datum/job/warden + title = "Warden" + flag = WARDEN + departments = list(DEPARTMENT_SECURITY) + sorting_order = 1 + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the Head of Security" + selection_color = "#601C1C" + economic_modifier = 5 + access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks) + minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks) + minimal_player_age = 5 + banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_TESHARI, SPECIES_DIONA) + + outfit_type = /decl/hierarchy/outfit/job/security/warden + job_description = "The Warden watches over the physical Security Department, making sure the Brig and Armoury are secure and in order at all times. They oversee \ + prisoners that have been processed and brigged, and are responsible for their well being. The Warden is also in charge of distributing \ + Armoury gear in a crisis, and retrieving it when the crisis has passed. In an emergency, the Warden may be called upon to direct the \ + Security Department as a whole." + +////////////////////////////////// +// Detective +////////////////////////////////// +/datum/job/detective + title = "Detective" + flag = DETECTIVE + departments = list(DEPARTMENT_SECURITY) + department_flag = ENGSEC + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Head of Security" + selection_color = "#601C1C" + access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks, access_brig) //Vorestation edit - access_brig + minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) + economic_modifier = 5 + minimal_player_age = 3 + banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_DIONA) + + outfit_type = /decl/hierarchy/outfit/job/security/detective + job_description = "A Detective works to help Security find criminals who have not properly been identified, through interviews and forensic work. \ + For crimes only witnessed after the fact, or those with no survivors, they attempt to piece together what they can from pure evidence." + alt_titles = list("Forensic Technician" = /datum/alt_title/forensic_tech) + +// Detective Alt Titles +/datum/alt_title/forensic_tech + title = "Forensic Technician" + title_blurb = "A Forensic Technician works more with hard evidence and labwork than a Detective, but they share the purpose of solving crimes." + title_outfit = /decl/hierarchy/outfit/job/security/detective/forensic + +////////////////////////////////// +// Security Officer +////////////////////////////////// +/datum/job/officer + title = "Security Officer" + flag = OFFICER + departments = list(DEPARTMENT_SECURITY) + department_flag = ENGSEC + faction = "Station" + total_positions = 4 + spawn_positions = 4 + supervisors = "the Head of Security" + selection_color = "#601C1C" + economic_modifier = 5 //CHOMPstation edit - "Offduty officers make more than working, and this brings it in line with the rest of the jobs in sec barring HOS" + access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks) + minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks) + minimal_player_age = 3 + banned_job_species = list(SPECIES_ZADDAT, SPECIES_TESHARI, SPECIES_DIONA) + + outfit_type = /decl/hierarchy/outfit/job/security/officer + job_description = "A Security Officer is concerned with maintaining the safety and security of the station as a whole, dealing with external threats and \ + apprehending criminals. A Security Officer is responsible for the health, safety, and processing of any prisoner they arrest. \ + No one is above the Law, not Security or Command." + alt_titles = list("Junior Officer" = /datum/alt_title/junior_officer) + + min_age_by_species = list(SPECIES_PROMETHEAN = 3) + +// Security Officer Alt Titles +/datum/alt_title/junior_officer + title = "Junior Officer" + title_blurb = "A Junior Officer is an inexperienced Security Officer. They likely have training, but not experience, and are frequently \ + paired off with a more senior co-worker. Junior Officers may also be expected to take over the boring duties of other Officers \ + including patrolling the station or maintaining specific posts." diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index 1619569c9d..06ec638ee3 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -1,83 +1,83 @@ -////////////////////////////////// -// AI -////////////////////////////////// -/datum/job/ai - title = "AI" - flag = AI - departments = list(DEPARTMENT_SYNTHETIC) - sorting_order = 1 // Be above their borgs. - department_flag = ENGSEC - faction = "Station" - total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm - spawn_positions = 1 - selection_color = "#3F823F" - supervisors = "your Laws" - req_admin_notify = 1 - minimal_player_age = 7 - account_allowed = 0 - economic_modifier = 0 - has_headset = FALSE - assignable = FALSE - mob_type = JOB_SILICON_AI - outfit_type = /decl/hierarchy/outfit/job/silicon/ai - job_description = "The AI oversees the operation of the station and its crew, but has no real authority over them. \ - The AI is required to follow its Laws, and Lawbound Synthetics that are linked to it are expected to follow \ - the AI's commands, and their own Laws." - -// AI procs -/datum/job/ai/equip(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 - -/datum/job/ai/is_position_available() - return (empty_playable_ai_cores.len != 0) - -/datum/job/ai/equip_preview(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/straight_jacket(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/cardborg(H), slot_head) - return 1 - -////////////////////////////////// -// Cyborg -////////////////////////////////// -/datum/job/cyborg - title = "Cyborg" - flag = CYBORG - departments = list(DEPARTMENT_SYNTHETIC) - department_flag = ENGSEC - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "your Laws and the AI" //Nodrak - selection_color = "#254C25" - minimal_player_age = 1 - account_allowed = 0 - economic_modifier = 0 - has_headset = FALSE - assignable = FALSE - mob_type = JOB_SILICON_ROBOT - outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg - job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \ - to follow its Laws." - alt_titles = list("Robot" = /datum/alt_title/robot, "Drone" = /datum/alt_title/drone) - -// Cyborg Alt Titles -/datum/alt_title/robot - title = "Robot" - title_blurb = "A Robot is a mobile station synthetic, piloted by an advanced piece of technology called a Positronic Brain. It is considered a person, \ - legally, but is required to follow its Laws." - -/datum/alt_title/drone - title = "Drone" - title_blurb = "A Drone is a mobile station synthetic, piloted by a simple computer-based AI. As such, it is not a person, but rather an expensive and \ - and important piece of station property, and is expected to follow its Laws." - -// Cyborg procs -/datum/job/cyborg/equip(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 - -/datum/job/cyborg/equip_preview(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/cardborg(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/cardborg(H), slot_head) - return 1 +////////////////////////////////// +// AI +////////////////////////////////// +/datum/job/ai + title = "AI" + flag = AI + departments = list(DEPARTMENT_SYNTHETIC) + sorting_order = 1 // Be above their borgs. + department_flag = ENGSEC + faction = "Station" + total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm + spawn_positions = 1 + selection_color = "#3F823F" + supervisors = "your Laws" + req_admin_notify = 1 + minimal_player_age = 7 + account_allowed = 0 + economic_modifier = 0 + has_headset = FALSE + assignable = FALSE + mob_type = JOB_SILICON_AI + outfit_type = /decl/hierarchy/outfit/job/silicon/ai + job_description = "The AI oversees the operation of the station and its crew, but has no real authority over them. \ + The AI is required to follow its Laws, and Lawbound Synthetics that are linked to it are expected to follow \ + the AI's commands, and their own Laws." + +// AI procs +/datum/job/ai/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + return 1 + +/datum/job/ai/is_position_available() + return (empty_playable_ai_cores.len != 0) + +/datum/job/ai/equip_preview(mob/living/carbon/human/H) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/straight_jacket(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/cardborg(H), slot_head) + return 1 + +////////////////////////////////// +// Cyborg +////////////////////////////////// +/datum/job/cyborg + title = "Cyborg" + flag = CYBORG + departments = list(DEPARTMENT_SYNTHETIC) + department_flag = ENGSEC + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "your Laws and the AI" //Nodrak + selection_color = "#254C25" + minimal_player_age = 1 + account_allowed = 0 + economic_modifier = 0 + has_headset = FALSE + assignable = FALSE + mob_type = JOB_SILICON_ROBOT + outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg + job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \ + to follow its Laws." + alt_titles = list("Robot" = /datum/alt_title/robot, "Drone" = /datum/alt_title/drone) + +// Cyborg Alt Titles +/datum/alt_title/robot + title = "Robot" + title_blurb = "A Robot is a mobile station synthetic, piloted by an advanced piece of technology called a Positronic Brain. It is considered a person, \ + legally, but is required to follow its Laws." + +/datum/alt_title/drone + title = "Drone" + title_blurb = "A Drone is a mobile station synthetic, piloted by a simple computer-based AI. As such, it is not a person, but rather an expensive and \ + and important piece of station property, and is expected to follow its Laws." + +// Cyborg procs +/datum/job/cyborg/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + return 1 + +/datum/job/cyborg/equip_preview(mob/living/carbon/human/H) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/cardborg(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/cardborg(H), slot_head) + return 1 diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 0ef8cc2d78..7f69c7211a 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -1,123 +1,123 @@ -#define WHITELISTFILE "data/whitelist.txt" - -var/list/whitelist = list() - -/hook/startup/proc/loadWhitelist() - if(config.usewhitelist) - load_whitelist() - return 1 - -/proc/load_whitelist() - whitelist = file2list(WHITELISTFILE) - if(!whitelist.len) whitelist = null - -/proc/check_whitelist(mob/M /*, var/rank*/) - if(!config.usewhitelist) //CHOMPedit: I guess this is an override for the blanket whitelist system. - return 1 //CHOMPedit - if(!whitelist) - return 0 - return ("[M.ckey]" in whitelist) - -/var/list/alien_whitelist = list() - -/hook/startup/proc/loadAlienWhitelist() - if(config.usealienwhitelist) - load_alienwhitelist() - return 1 - -/proc/load_alienwhitelist() - var/text = file2text("config/alienwhitelist.txt") - if (!text) - log_misc("Failed to load config/alienwhitelist.txt") - else - var/lines = splittext(text, "\n") // Now we've got a bunch of "ckey = something" strings in a list - for(var/line in lines) - var/list/left_and_right = splittext(line, " - ") // Split it on the dash into left and right - if(LAZYLEN(left_and_right) != 2) - warning("Alien whitelist entry is invalid: [line]") // If we didn't end up with a left and right, the line is bad - continue - var/key = left_and_right[1] - if(key != ckey(key)) - warning("Alien whitelist entry appears to have key, not ckey: [line]") // The key contains invalid ckey characters - continue - var/list/our_whitelists = alien_whitelist[key] // Try to see if we have one already and add to it - if(!our_whitelists) // Guess this is their first/only whitelist entry - our_whitelists = list() - alien_whitelist[key] = our_whitelists - our_whitelists += left_and_right[2] - -/proc/is_alien_whitelisted(mob/M, var/datum/species/species) - //They are admin or the whitelist isn't in use - if(whitelist_overrides(M)) - return TRUE - - //You did something wrong - if(!M || !species) - return FALSE - - //The species isn't even whitelisted - if(!(species.spawn_flags & SPECIES_IS_WHITELISTED)) - return TRUE - - //Search the whitelist - var/list/our_whitelists = alien_whitelist[M.ckey] - if("All" in our_whitelists) - return TRUE - if(species.name in our_whitelists) - return TRUE - - // Go apply! - return FALSE - -/proc/is_lang_whitelisted(mob/M, var/datum/language/language) - //They are admin or the whitelist isn't in use - if(whitelist_overrides(M)) - return TRUE - - //You did something wrong - if(!M || !language) - return FALSE - - //The language isn't even whitelisted - if(!(language.flags & WHITELISTED)) - return TRUE - - //Search the whitelist - var/list/our_whitelists = alien_whitelist[M.ckey] - if("All" in our_whitelists) - return TRUE - if(language.name in our_whitelists) - return TRUE - - return FALSE - -/proc/is_borg_whitelisted(mob/M, var/module) - //They are admin or the whitelist isn't in use - if(whitelist_overrides(M)) - return 1 - - //You did something wrong - if(!M || !module) - return 0 - - //Module is not even whitelisted - if(!(module in whitelisted_module_types)) - return 1 - - //If we have a loaded file, search it - if(alien_whitelist) - for (var/s in alien_whitelist) - if(findtext(s,"[M.ckey] - [module]")) - return 1 - if(findtext(s,"[M.ckey] - All")) - return 1 - -/proc/whitelist_overrides(mob/M) - if(!config.usealienwhitelist) - return TRUE - if(check_rights(R_ADMIN|R_EVENT, 0, M)) - return TRUE - - return FALSE - -#undef WHITELISTFILE +#define WHITELISTFILE "data/whitelist.txt" + +var/list/whitelist = list() + +/hook/startup/proc/loadWhitelist() + if(config.usewhitelist) + load_whitelist() + return 1 + +/proc/load_whitelist() + whitelist = file2list(WHITELISTFILE) + if(!whitelist.len) whitelist = null + +/proc/check_whitelist(mob/M /*, var/rank*/) + if(!config.usewhitelist) //CHOMPedit: I guess this is an override for the blanket whitelist system. + return 1 //CHOMPedit + if(!whitelist) + return 0 + return ("[M.ckey]" in whitelist) + +/var/list/alien_whitelist = list() + +/hook/startup/proc/loadAlienWhitelist() + if(config.usealienwhitelist) + load_alienwhitelist() + return 1 + +/proc/load_alienwhitelist() + var/text = file2text("config/alienwhitelist.txt") + if (!text) + log_misc("Failed to load config/alienwhitelist.txt") + else + var/lines = splittext(text, "\n") // Now we've got a bunch of "ckey = something" strings in a list + for(var/line in lines) + var/list/left_and_right = splittext(line, " - ") // Split it on the dash into left and right + if(LAZYLEN(left_and_right) != 2) + warning("Alien whitelist entry is invalid: [line]") // If we didn't end up with a left and right, the line is bad + continue + var/key = left_and_right[1] + if(key != ckey(key)) + warning("Alien whitelist entry appears to have key, not ckey: [line]") // The key contains invalid ckey characters + continue + var/list/our_whitelists = alien_whitelist[key] // Try to see if we have one already and add to it + if(!our_whitelists) // Guess this is their first/only whitelist entry + our_whitelists = list() + alien_whitelist[key] = our_whitelists + our_whitelists += left_and_right[2] + +/proc/is_alien_whitelisted(mob/M, var/datum/species/species) + //They are admin or the whitelist isn't in use + if(whitelist_overrides(M)) + return TRUE + + //You did something wrong + if(!M || !species) + return FALSE + + //The species isn't even whitelisted + if(!(species.spawn_flags & SPECIES_IS_WHITELISTED)) + return TRUE + + //Search the whitelist + var/list/our_whitelists = alien_whitelist[M.ckey] + if("All" in our_whitelists) + return TRUE + if(species.name in our_whitelists) + return TRUE + + // Go apply! + return FALSE + +/proc/is_lang_whitelisted(mob/M, var/datum/language/language) + //They are admin or the whitelist isn't in use + if(whitelist_overrides(M)) + return TRUE + + //You did something wrong + if(!M || !language) + return FALSE + + //The language isn't even whitelisted + if(!(language.flags & WHITELISTED)) + return TRUE + + //Search the whitelist + var/list/our_whitelists = alien_whitelist[M.ckey] + if("All" in our_whitelists) + return TRUE + if(language.name in our_whitelists) + return TRUE + + return FALSE + +/proc/is_borg_whitelisted(mob/M, var/module) + //They are admin or the whitelist isn't in use + if(whitelist_overrides(M)) + return 1 + + //You did something wrong + if(!M || !module) + return 0 + + //Module is not even whitelisted + if(!(module in whitelisted_module_types)) + return 1 + + //If we have a loaded file, search it + if(alien_whitelist) + for (var/s in alien_whitelist) + if(findtext(s,"[M.ckey] - [module]")) + return 1 + if(findtext(s,"[M.ckey] - All")) + return 1 + +/proc/whitelist_overrides(mob/M) + if(!config.usealienwhitelist) + return TRUE + if(check_rights(R_ADMIN|R_EVENT, 0, M)) + return TRUE + + return FALSE + +#undef WHITELISTFILE diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 24b4ca979b..b9242059c9 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -1,51 +1,51 @@ -/obj/machinery/bluespace_beacon - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beaconf" - name = "Bluespace Gigabeacon" - desc = "A device that draws power from bluespace and creates a permanent tracking beacon." - level = 1 // underfloor - layer = UNDER_JUNK_LAYER - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 0 - var/obj/item/device/radio/beacon/Beacon - -/obj/machinery/bluespace_beacon/New() - ..() - var/turf/T = src.loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.loc = T - - hide(!T.is_plating()) - -/obj/machinery/bluespace_beacon/Destroy() - if(Beacon) - qdel(Beacon) - ..() - -// update the invisibility and icon -/obj/machinery/bluespace_beacon/hide(var/intact) - invisibility = intact ? 101 : 0 - update_icon() - -// update the icon_state -/obj/machinery/bluespace_beacon/update_icon() - var/state="floor_beacon" - - if(invisibility) - icon_state = "[state]f" - else - icon_state = "[state]" - -/obj/machinery/bluespace_beacon/process() - if(!Beacon) - var/turf/T = src.loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.loc = T - if(Beacon) - if(Beacon.loc != src.loc) - Beacon.loc = src.loc - +/obj/machinery/bluespace_beacon + icon = 'icons/obj/objects.dmi' + icon_state = "floor_beaconf" + name = "Bluespace Gigabeacon" + desc = "A device that draws power from bluespace and creates a permanent tracking beacon." + level = 1 // underfloor + layer = UNDER_JUNK_LAYER + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 0 + var/obj/item/device/radio/beacon/Beacon + +/obj/machinery/bluespace_beacon/New() + ..() + var/turf/T = src.loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = INVISIBILITY_MAXIMUM + Beacon.loc = T + + hide(!T.is_plating()) + +/obj/machinery/bluespace_beacon/Destroy() + if(Beacon) + qdel(Beacon) + ..() + +// update the invisibility and icon +/obj/machinery/bluespace_beacon/hide(var/intact) + invisibility = intact ? 101 : 0 + update_icon() + +// update the icon_state +/obj/machinery/bluespace_beacon/update_icon() + var/state="floor_beacon" + + if(invisibility) + icon_state = "[state]f" + else + icon_state = "[state]" + +/obj/machinery/bluespace_beacon/process() + if(!Beacon) + var/turf/T = src.loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = INVISIBILITY_MAXIMUM + Beacon.loc = T + if(Beacon) + if(Beacon.loc != src.loc) + Beacon.loc = src.loc + update_icon() \ No newline at end of file diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index fcabe9f5ce..2dbe70576e 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -1,136 +1,136 @@ -/obj/machinery/optable - name = "Operating Table" - desc = "Used for advanced medical procedures." - icon = 'icons/obj/surgery_vr.dmi' - icon_state = "table2-idle" - density = TRUE - anchored = TRUE - unacidable = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 1 - active_power_usage = 5 - surgery_odds = 100 - throwpass = 1 - var/mob/living/carbon/human/victim = null - var/strapped = 0.0 - var/obj/machinery/computer/operating/computer = null - -/obj/machinery/optable/New() - ..() - for(var/direction in list(NORTH,EAST,SOUTH,WEST)) - computer = locate(/obj/machinery/computer/operating, get_step(src, direction)) - if(computer) - computer.table = src - break -// spawn(100) //Wont the MC just call this process() before and at the 10 second mark anyway? -// process() - -/obj/machinery/optable/ex_act(severity) - switch(severity) - if(1.0) - //SN src = null - qdel(src) - return - if(2.0) - if(prob(50)) - //SN src = null - qdel(src) - return - if(3.0) - if(prob(25)) - density = FALSE - else - return - -/obj/machinery/optable/attack_hand(mob/user as mob) - if(HULK in usr.mutations) - visible_message("\The [usr] destroys \the [src]!") - density = FALSE - qdel(src) - return - -/obj/machinery/optable/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSTABLE)) - return TRUE - return FALSE - -/obj/machinery/optable/proc/check_victim() - if(locate(/mob/living/carbon/human, src.loc)) - var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, src.loc) - if(M.lying) - victim = M - if(M.pulse) - if(M.stat) - icon_state = "table2-sleep" - else - icon_state = "table2-active" - else - icon_state = "table2-dead" - return 1 - victim = null - icon_state = "table2-idle" - return 0 - -/obj/machinery/optable/process() - check_victim() - -/obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob) - if(C == user) - user.visible_message("[user] climbs on \the [src].","You climb on \the [src].") - else - visible_message("\The [C] has been laid on \the [src] by [user].") - if(C.client) - C.client.perspective = EYE_PERSPECTIVE - C.client.eye = src - C.resting = 1 - C.loc = src.loc - for(var/obj/O in src) - O.loc = src.loc - add_fingerprint(user) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - victim = H - icon_state = H.pulse ? "table2-active" : "table2-idle" - else - icon_state = "table2-idle" - -/obj/machinery/optable/MouseDrop_T(mob/living/carbon/target, mob/living/user) - if(!istype(target) || !istype(user)) - return ..() - - if(!Adjacent(target) || !Adjacent(user)) - return ..() - - if(user.incapacitated() || !check_table(target, user)) - return ..() - - take_victim(target, user) - -/obj/machinery/optable/verb/climb_on() - set name = "Climb On Table" - set category = "Object" - set src in oview(1) - - var/mob/living/user = usr - if(!istype(user) || user.incapacitated() || !check_table(user, user)) - return - - take_victim(user, user) - -/obj/machinery/optable/attackby(obj/item/weapon/W, mob/living/carbon/user) - if(istype(W, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = W - if(iscarbon(G.affecting) && check_table(G.affecting, user)) - take_victim(G.affecting, user) - qdel(W) - return - -/obj/machinery/optable/proc/check_table(mob/living/carbon/patient, mob/living/user) - check_victim() - if(victim && get_turf(victim) == get_turf(src) && victim.lying) - to_chat(user, "\The [src] is already occupied!") - return 0 - if(patient.buckled) - to_chat(user, "Unbuckle \the [patient] first!") - return 0 +/obj/machinery/optable + name = "Operating Table" + desc = "Used for advanced medical procedures." + icon = 'icons/obj/surgery_vr.dmi' + icon_state = "table2-idle" + density = TRUE + anchored = TRUE + unacidable = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 1 + active_power_usage = 5 + surgery_odds = 100 + throwpass = 1 + var/mob/living/carbon/human/victim = null + var/strapped = 0.0 + var/obj/machinery/computer/operating/computer = null + +/obj/machinery/optable/New() + ..() + for(var/direction in list(NORTH,EAST,SOUTH,WEST)) + computer = locate(/obj/machinery/computer/operating, get_step(src, direction)) + if(computer) + computer.table = src + break +// spawn(100) //Wont the MC just call this process() before and at the 10 second mark anyway? +// process() + +/obj/machinery/optable/ex_act(severity) + switch(severity) + if(1.0) + //SN src = null + qdel(src) + return + if(2.0) + if(prob(50)) + //SN src = null + qdel(src) + return + if(3.0) + if(prob(25)) + density = FALSE + else + return + +/obj/machinery/optable/attack_hand(mob/user as mob) + if(HULK in usr.mutations) + visible_message("\The [usr] destroys \the [src]!") + density = FALSE + qdel(src) + return + +/obj/machinery/optable/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + return FALSE + +/obj/machinery/optable/proc/check_victim() + if(locate(/mob/living/carbon/human, src.loc)) + var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, src.loc) + if(M.lying) + victim = M + if(M.pulse) + if(M.stat) + icon_state = "table2-sleep" + else + icon_state = "table2-active" + else + icon_state = "table2-dead" + return 1 + victim = null + icon_state = "table2-idle" + return 0 + +/obj/machinery/optable/process() + check_victim() + +/obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob) + if(C == user) + user.visible_message("[user] climbs on \the [src].","You climb on \the [src].") + else + visible_message("\The [C] has been laid on \the [src] by [user].") + if(C.client) + C.client.perspective = EYE_PERSPECTIVE + C.client.eye = src + C.resting = 1 + C.loc = src.loc + for(var/obj/O in src) + O.loc = src.loc + add_fingerprint(user) + if(ishuman(C)) + var/mob/living/carbon/human/H = C + victim = H + icon_state = H.pulse ? "table2-active" : "table2-idle" + else + icon_state = "table2-idle" + +/obj/machinery/optable/MouseDrop_T(mob/living/carbon/target, mob/living/user) + if(!istype(target) || !istype(user)) + return ..() + + if(!Adjacent(target) || !Adjacent(user)) + return ..() + + if(user.incapacitated() || !check_table(target, user)) + return ..() + + take_victim(target, user) + +/obj/machinery/optable/verb/climb_on() + set name = "Climb On Table" + set category = "Object" + set src in oview(1) + + var/mob/living/user = usr + if(!istype(user) || user.incapacitated() || !check_table(user, user)) + return + + take_victim(user, user) + +/obj/machinery/optable/attackby(obj/item/weapon/W, mob/living/carbon/user) + if(istype(W, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = W + if(iscarbon(G.affecting) && check_table(G.affecting, user)) + take_victim(G.affecting, user) + qdel(W) + return + +/obj/machinery/optable/proc/check_table(mob/living/carbon/patient, mob/living/user) + check_victim() + if(victim && get_turf(victim) == get_turf(src) && victim.lying) + to_chat(user, "\The [src] is already occupied!") + return 0 + if(patient.buckled) + to_chat(user, "Unbuckle \the [patient] first!") + return 0 return 1 \ No newline at end of file diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 8574f5160a..9f666d054c 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -1,540 +1,540 @@ -/obj/machinery/sleep_console - name = "sleeper console" - desc = "A control panel to operate a linked sleeper with." - icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icon. - icon_state = "sleeperconsole" - var/obj/machinery/sleeper/sleeper - anchored = TRUE //About time someone fixed this. - density = TRUE //VOREStation Edit - Big console - unacidable = TRUE - dir = 8 - use_power = USE_POWER_IDLE - idle_power_usage = 40 - interact_offline = 1 - circuit = /obj/item/weapon/circuitboard/sleeper_console - clicksound = 'sound/machines/buttonbeep.ogg' - clickvol = 30 - -/obj/machinery/sleep_console/Initialize() - findsleeper() - return ..() - -/obj/machinery/sleep_console/Destroy() - if(sleeper) - sleeper.console = null - return ..() - -/obj/machinery/sleep_console/proc/findsleeper() - var/obj/machinery/sleeper/sleepernew = null - for(var/direction in GLOB.cardinal) // Loop through every direction - sleepernew = locate(/obj/machinery/sleeper, get_step(src, direction)) // Try to find a scanner in that direction - if(sleepernew) - sleeper = sleepernew - sleepernew.console = src - break //VOREStation Edit - - -/obj/machinery/sleep_console/attack_ai(var/mob/user) - return attack_hand(user) - -/obj/machinery/sleep_console/attack_hand(var/mob/user) - if(..()) - return 1 - - if(!sleeper) - findsleeper() - if(!sleeper) - to_chat(user, "Sleeper not found!") - return - - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - - if(sleeper) - return tgui_interact(user) - -/obj/machinery/sleep_console/attackby(var/obj/item/I, var/mob/user) - if(computer_deconstruction_screwdriver(user, I)) - return - else - return attack_hand(user) - -/obj/machinery/sleep_console/power_change() - ..() - if(stat & (NOPOWER|BROKEN)) - icon_state = "sleeperconsole-p" - else - icon_state = initial(icon_state) - -/obj/machinery/sleep_console/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Sleeper", "Sleeper") - ui.open() - -/obj/machinery/sleep_console/tgui_data(mob/user) - if(sleeper) - return sleeper.tgui_data(user) - return null - -/obj/machinery/sleep_console/tgui_act(action, params, datum/tgui/ui, datum/tgui_state/state) - if(sleeper) - return sleeper.tgui_act(action, params, ui, state) - return ..() - -/obj/machinery/sleeper - name = "sleeper" - desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner." - icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icons - icon_state = "sleeper_0" - density = TRUE - anchored = TRUE - unacidable = TRUE - circuit = /obj/item/weapon/circuitboard/sleeper - var/mob/living/carbon/human/occupant = null - var/list/available_chemicals = list() - var/list/base_chemicals = list("inaprovaline" = "Inaprovaline", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin") - var/amounts = list(5, 10) - var/obj/item/weapon/reagent_containers/glass/beaker = null - var/filtering = 0 - var/pumping = 0 - // Currently never changes. On Paradise, max_chem and min_health are based on the matter bins in the sleeper. - var/max_chem = 20 - var/initial_bin_rating = 1 - var/min_health = -101 - var/obj/machinery/sleep_console/console - var/stasis_level = 0 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1) - var/stasis_choices = list("Complete (1%)" = 100, "Deep (10%)" = 10, "Moderate (20%)" = 5, "Light (50%)" = 2, "None (100%)" = 0) - var/controls_inside = FALSE - var/auto_eject_dead = FALSE - - use_power = USE_POWER_IDLE - idle_power_usage = 15 - active_power_usage = 200 //builtin health analyzer, dialysis machine, injectors. - -/obj/machinery/sleeper/Initialize() - . = ..() - beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - default_apply_parts() - update_icon() - -/obj/machinery/sleeper/Destroy() - if(console) - console.sleeper = null - return ..() - -/obj/machinery/sleeper/RefreshParts(var/limited = 0) - var/man_rating = 0 - var/cap_rating = 0 - - available_chemicals.Cut() - available_chemicals = base_chemicals.Copy() - - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - - cap_rating = max(1, round(cap_rating / 2)) - - update_idle_power_usage(initial(idle_power_usage) / cap_rating) - update_active_power_usage(initial(active_power_usage) / cap_rating) - - if(!limited) - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/manipulator)) - man_rating += P.rating - 1 - - var/list/new_chemicals = list() - - if(man_rating >= 4) // Alien tech. - var/reag_ID = pickweight(list( - "healing_nanites" = 10, - "shredding_nanites" = 5, - "irradiated_nanites" = 5, - "neurophage_nanites" = 2) - ) - new_chemicals[reag_ID] = "Nanite" - if(man_rating >= 3) // Anomalous tech. - new_chemicals["immunosuprizine"] = "Immunosuprizine" - if(man_rating >= 2) // Tier 3. - new_chemicals["spaceacillin"] = "Spaceacillin" - if(man_rating >= 1) // Tier 2. - new_chemicals["leporazine"] = "Leporazine" - - if(new_chemicals.len) - available_chemicals += new_chemicals - return - -/obj/machinery/sleeper/attack_hand(var/mob/user) - if(!controls_inside) - return FALSE - - if(user == occupant) - tgui_interact(user) - -/obj/machinery/sleeper/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Sleeper", "Sleeper") - ui.open() - -/obj/machinery/sleeper/tgui_data(mob/user) - var/data[0] - data["amounts"] = amounts - data["hasOccupant"] = occupant ? 1 : 0 - var/occupantData[0] - // var/crisis = 0 - if(occupant) - occupantData["name"] = occupant.name - occupantData["stat"] = occupant.stat - occupantData["health"] = occupant.health - occupantData["maxHealth"] = occupant.maxHealth - occupantData["minHealth"] = config.health_threshold_dead - occupantData["bruteLoss"] = occupant.getBruteLoss() - occupantData["oxyLoss"] = occupant.getOxyLoss() - occupantData["toxLoss"] = occupant.getToxLoss() - occupantData["fireLoss"] = occupant.getFireLoss() - occupantData["paralysis"] = occupant.paralysis - occupantData["hasBlood"] = 0 - occupantData["bodyTemperature"] = occupant.bodytemperature - occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations - // Because we can put simple_animals in here, we need to do something tricky to get things working nice - occupantData["temperatureSuitability"] = 0 // 0 is the baseline - if(ishuman(occupant) && occupant.species) - // I wanna do something where the bar gets bluer as the temperature gets lower - // For now, I'll just use the standard format for the temperature status - var/datum/species/sp = occupant.species - if(occupant.bodytemperature < sp.cold_level_3) - occupantData["temperatureSuitability"] = -3 - else if(occupant.bodytemperature < sp.cold_level_2) - occupantData["temperatureSuitability"] = -2 - else if(occupant.bodytemperature < sp.cold_level_1) - occupantData["temperatureSuitability"] = -1 - else if(occupant.bodytemperature > sp.heat_level_3) - occupantData["temperatureSuitability"] = 3 - else if(occupant.bodytemperature > sp.heat_level_2) - occupantData["temperatureSuitability"] = 2 - else if(occupant.bodytemperature > sp.heat_level_1) - occupantData["temperatureSuitability"] = 1 - else if(isanimal(occupant)) - var/mob/living/simple_mob/silly = occupant - if(silly.bodytemperature < silly.minbodytemp) - occupantData["temperatureSuitability"] = -3 - else if(silly.bodytemperature > silly.maxbodytemp) - occupantData["temperatureSuitability"] = 3 - // Blast you, imperial measurement system - occupantData["btCelsius"] = occupant.bodytemperature - T0C - occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 - - - // crisis = (occupant.health < min_health) - // I'm not sure WHY you'd want to put a simple_animal in a sleeper, but precedent is precedent - // Runtime is aptly named, isn't she? - if(ishuman(occupant) && !(NO_BLOOD in occupant.species.flags) && occupant.vessel) - occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) - occupantData["hasBlood"] = 1 - var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) - occupantData["bloodLevel"] = blood_volume - occupantData["bloodMax"] = occupant.species.blood_volume - occupantData["bloodPercent"] = round(100*(blood_volume/occupant.species.blood_volume), 0.01) //copy pasta ends here - - occupantData["bloodType"] = occupant.dna.b_type - - data["occupant"] = occupantData - data["maxchem"] = max_chem - data["minhealth"] = min_health - data["dialysis"] = filtering - data["stomachpumping"] = pumping - data["auto_eject_dead"] = auto_eject_dead - if(beaker) - data["isBeakerLoaded"] = 1 - if(beaker.reagents) - data["beakerMaxSpace"] = beaker.reagents.maximum_volume - data["beakerFreeSpace"] = beaker.reagents.get_free_space() - else - data["beakerMaxSpace"] = 0 - data["beakerFreeSpace"] = 0 - else - data["isBeakerLoaded"] = FALSE - - - var/stasis_level_name = "Error!" - for(var/N in stasis_choices) - if(stasis_choices[N] == stasis_level) - stasis_level_name = N - break - data["stasis"] = stasis_level_name - - var/chemicals[0] - for(var/re in available_chemicals) - var/datum/reagent/temp = SSchemistry.chemical_reagents[re] - if(temp) - var/reagent_amount = 0 - var/pretty_amount - var/injectable = occupant ? 1 : 0 - var/overdosing = 0 - var/caution = 0 // To make things clear that you're coming close to an overdose - // if(crisis && !(temp.id in emergency_chems)) - // injectable = 0 - - if(occupant && occupant.reagents) - reagent_amount = occupant.reagents.get_reagent_amount(temp.id) - // If they're mashing the highest concentration, they get one warning - if(temp.overdose && reagent_amount + 10 > (temp.overdose * occupant?.species.chemOD_threshold)) - caution = 1 - if(temp.overdose && reagent_amount > (temp.overdose * occupant?.species.chemOD_threshold)) - overdosing = 1 - - pretty_amount = round(reagent_amount, 0.05) - - chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("chemical" = temp.id), "occ_amount" = reagent_amount, "pretty_amount" = pretty_amount, "injectable" = injectable, "overdosing" = overdosing, "od_warning" = caution))) - data["chemicals"] = chemicals - return data - - -/obj/machinery/sleeper/tgui_act(action, params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - if(!controls_inside && usr == occupant) - return - if(panel_open) - to_chat(usr, "Close the maintenance panel first.") - return - - . = TRUE - switch(action) - if("chemical") - if(!occupant) - return - if(occupant.stat == DEAD) - var/datum/gender/G = gender_datums[occupant.get_visible_gender()] - to_chat(usr, "This person has no life to preserve anymore. Take [G.him] to a department capable of reanimating [G.him].") - return - var/chemical = params["chemid"] - var/amount = text2num(params["amount"]) - if(!length(chemical) || amount <= 0) - return - if(occupant.health > min_health) //|| (chemical in emergency_chems)) - inject_chemical(usr, chemical, amount) - else - to_chat(usr, "This person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!") - if("removebeaker") - remove_beaker() - if("togglefilter") - toggle_filter() - if("togglepump") - toggle_pump() - if("ejectify") - go_out() - if("changestasis") - var/new_stasis = tgui_input_list(usr, "Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level", stasis_choices) - if(new_stasis) - stasis_level = stasis_choices[new_stasis] - if("auto_eject_dead_on") - auto_eject_dead = TRUE - if("auto_eject_dead_off") - auto_eject_dead = FALSE - else - return FALSE - add_fingerprint(usr) - -/obj/machinery/sleeper/process() - if(stat & (NOPOWER|BROKEN)) - return - if(occupant) - if(auto_eject_dead && occupant.stat == DEAD) - playsound(loc, 'sound/machines/buzz-sigh.ogg', 40) - go_out() - return - occupant.Stasis(stasis_level) - - if(filtering > 0) - if(beaker) - if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - var/pumped = 0 - for(var/datum/reagent/x in occupant.reagents.reagent_list) - occupant.reagents.trans_to_obj(beaker, 3) - pumped++ - if(ishuman(occupant)) - occupant.vessel.trans_to_obj(beaker, pumped + 1) - else - toggle_filter() - - if(pumping > 0) - if(beaker) - if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - for(var/datum/reagent/x in occupant.ingested.reagent_list) - occupant.ingested.trans_to_obj(beaker, 3) - else - toggle_pump() - -/obj/machinery/sleeper/update_icon() - icon_state = "sleeper_[occupant ? "1" : "0"]" - -/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user) - add_fingerprint(user) - if(istype(I, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = I - if(G.affecting) - go_in(G.affecting, user) - return - if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(!beaker) - beaker = I - user.drop_item() - I.loc = src - user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") - else - to_chat(user, "\The [src] has a beaker already.") - return - if(!occupant) - if(default_deconstruction_screwdriver(user, I)) - return - if(default_deconstruction_crowbar(user, I)) - return - if(default_part_replacement(user, I)) - return - -/obj/machinery/sleeper/verb/move_eject() - set name = "Eject occupant" - set category = "Object" - set src in oview(1) - if(usr == occupant) - switch(usr.stat) - if(DEAD) - return - if(UNCONSCIOUS) - to_chat(usr, "You struggle through the haze to hit the eject button. This will take a couple of minutes...") - if(do_after(usr, 2 MINUTES, src)) - go_out() - if(CONSCIOUS) - go_out() - else - if(usr.stat != CONSCIOUS) - return - go_out() - add_fingerprint(usr) - -/obj/machinery/sleeper/MouseDrop_T(var/mob/target, var/mob/user) - if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) - return - go_in(target, user) - -/obj/machinery/sleeper/relaymove(var/mob/user) - ..() - if(user.incapacitated()) - return - go_out() - -/obj/machinery/sleeper/emp_act(var/severity) - if(filtering) - toggle_filter() - - if(pumping) - toggle_pump() - - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(occupant) - go_out() - - ..(severity) -/obj/machinery/sleeper/proc/toggle_filter() - if(!occupant || !beaker) - filtering = 0 - return - filtering = !filtering - -/obj/machinery/sleeper/proc/toggle_pump() - if(!occupant || !beaker) - pumping = 0 - return - pumping = !pumping - -/obj/machinery/sleeper/proc/go_in(var/mob/M, var/mob/user) - if(!M) - return - if(stat & (BROKEN|NOPOWER)) - return - if(occupant) - to_chat(user, "\The [src] is already occupied.") - return - if(!ishuman(M)) - to_chat(user, "\The [src] is not designed for that organism!") - return - if(M == user) - visible_message("\The [user] starts climbing into \the [src].") - else - visible_message("\The [user] starts putting [M] into \the [src].") - - if(do_after(user, 20)) - if(occupant) - to_chat(user, "\The [src] is already occupied.") - return - M.stop_pulling() - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.loc = src - update_use_power(USE_POWER_ACTIVE) - occupant = M - occupant.cozyloop.start() // CHOMPStation Add: Cozy Music - update_icon() - -/obj/machinery/sleeper/proc/go_out() - if(!occupant || occupant.loc != src) - occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music - occupant = null // JUST IN CASE - return - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.Stasis(0) - occupant.loc = src.loc - occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music - occupant = null - for(var/atom/movable/A in src) // In case an object was dropped inside or something - if(A == beaker || A == circuit) - continue - if(A in component_parts) - continue - A.loc = src.loc - update_use_power(USE_POWER_IDLE) - update_icon() - toggle_filter() - toggle_pump() - -/obj/machinery/sleeper/proc/remove_beaker() - if(beaker) - beaker.loc = src.loc - beaker = null - toggle_filter() - -/obj/machinery/sleeper/proc/inject_chemical(var/mob/living/user, var/chemical, var/amount) - if(stat & (BROKEN|NOPOWER)) - return - if(!(amount in amounts)) - return - - if(occupant && occupant.reagents) - if(occupant.reagents.get_reagent_amount(chemical) + amount <= max_chem) - use_power(amount * CHEM_SYNTH_ENERGY) - occupant.reagents.add_reagent(chemical, amount) - to_chat(user, "Occupant now has [occupant.reagents.get_reagent_amount(chemical)] units of [available_chemicals[chemical]] in their bloodstream.") - else - to_chat(user, "The subject has too many chemicals in their bloodstream.") - else - to_chat(user, "There's no suitable occupant in \the [src].") - -//Survival/Stasis sleepers -/obj/machinery/sleeper/survival_pod - desc = "A limited functionality sleeper, all it can do is put patients into stasis. It lacks the medication and configuration of the larger units." - icon_state = "sleeper" - stasis_level = 100 //Just one setting - -/obj/machinery/sleeper/survival_pod/Initialize() - . = ..() - RefreshParts(1) +/obj/machinery/sleep_console + name = "sleeper console" + desc = "A control panel to operate a linked sleeper with." + icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icon. + icon_state = "sleeperconsole" + var/obj/machinery/sleeper/sleeper + anchored = TRUE //About time someone fixed this. + density = TRUE //VOREStation Edit - Big console + unacidable = TRUE + dir = 8 + use_power = USE_POWER_IDLE + idle_power_usage = 40 + interact_offline = 1 + circuit = /obj/item/weapon/circuitboard/sleeper_console + clicksound = 'sound/machines/buttonbeep.ogg' + clickvol = 30 + +/obj/machinery/sleep_console/Initialize() + findsleeper() + return ..() + +/obj/machinery/sleep_console/Destroy() + if(sleeper) + sleeper.console = null + return ..() + +/obj/machinery/sleep_console/proc/findsleeper() + var/obj/machinery/sleeper/sleepernew = null + for(var/direction in GLOB.cardinal) // Loop through every direction + sleepernew = locate(/obj/machinery/sleeper, get_step(src, direction)) // Try to find a scanner in that direction + if(sleepernew) + sleeper = sleepernew + sleepernew.console = src + break //VOREStation Edit + + +/obj/machinery/sleep_console/attack_ai(var/mob/user) + return attack_hand(user) + +/obj/machinery/sleep_console/attack_hand(var/mob/user) + if(..()) + return 1 + + if(!sleeper) + findsleeper() + if(!sleeper) + to_chat(user, "Sleeper not found!") + return + + if(panel_open) + to_chat(user, "Close the maintenance panel first.") + return + + if(sleeper) + return tgui_interact(user) + +/obj/machinery/sleep_console/attackby(var/obj/item/I, var/mob/user) + if(computer_deconstruction_screwdriver(user, I)) + return + else + return attack_hand(user) + +/obj/machinery/sleep_console/power_change() + ..() + if(stat & (NOPOWER|BROKEN)) + icon_state = "sleeperconsole-p" + else + icon_state = initial(icon_state) + +/obj/machinery/sleep_console/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Sleeper", "Sleeper") + ui.open() + +/obj/machinery/sleep_console/tgui_data(mob/user) + if(sleeper) + return sleeper.tgui_data(user) + return null + +/obj/machinery/sleep_console/tgui_act(action, params, datum/tgui/ui, datum/tgui_state/state) + if(sleeper) + return sleeper.tgui_act(action, params, ui, state) + return ..() + +/obj/machinery/sleeper + name = "sleeper" + desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner." + icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icons + icon_state = "sleeper_0" + density = TRUE + anchored = TRUE + unacidable = TRUE + circuit = /obj/item/weapon/circuitboard/sleeper + var/mob/living/carbon/human/occupant = null + var/list/available_chemicals = list() + var/list/base_chemicals = list("inaprovaline" = "Inaprovaline", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin") + var/amounts = list(5, 10) + var/obj/item/weapon/reagent_containers/glass/beaker = null + var/filtering = 0 + var/pumping = 0 + // Currently never changes. On Paradise, max_chem and min_health are based on the matter bins in the sleeper. + var/max_chem = 20 + var/initial_bin_rating = 1 + var/min_health = -101 + var/obj/machinery/sleep_console/console + var/stasis_level = 0 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1) + var/stasis_choices = list("Complete (1%)" = 100, "Deep (10%)" = 10, "Moderate (20%)" = 5, "Light (50%)" = 2, "None (100%)" = 0) + var/controls_inside = FALSE + var/auto_eject_dead = FALSE + + use_power = USE_POWER_IDLE + idle_power_usage = 15 + active_power_usage = 200 //builtin health analyzer, dialysis machine, injectors. + +/obj/machinery/sleeper/Initialize() + . = ..() + beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + default_apply_parts() + update_icon() + +/obj/machinery/sleeper/Destroy() + if(console) + console.sleeper = null + return ..() + +/obj/machinery/sleeper/RefreshParts(var/limited = 0) + var/man_rating = 0 + var/cap_rating = 0 + + available_chemicals.Cut() + available_chemicals = base_chemicals.Copy() + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + + cap_rating = max(1, round(cap_rating / 2)) + + update_idle_power_usage(initial(idle_power_usage) / cap_rating) + update_active_power_usage(initial(active_power_usage) / cap_rating) + + if(!limited) + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + man_rating += P.rating - 1 + + var/list/new_chemicals = list() + + if(man_rating >= 4) // Alien tech. + var/reag_ID = pickweight(list( + "healing_nanites" = 10, + "shredding_nanites" = 5, + "irradiated_nanites" = 5, + "neurophage_nanites" = 2) + ) + new_chemicals[reag_ID] = "Nanite" + if(man_rating >= 3) // Anomalous tech. + new_chemicals["immunosuprizine"] = "Immunosuprizine" + if(man_rating >= 2) // Tier 3. + new_chemicals["spaceacillin"] = "Spaceacillin" + if(man_rating >= 1) // Tier 2. + new_chemicals["leporazine"] = "Leporazine" + + if(new_chemicals.len) + available_chemicals += new_chemicals + return + +/obj/machinery/sleeper/attack_hand(var/mob/user) + if(!controls_inside) + return FALSE + + if(user == occupant) + tgui_interact(user) + +/obj/machinery/sleeper/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Sleeper", "Sleeper") + ui.open() + +/obj/machinery/sleeper/tgui_data(mob/user) + var/data[0] + data["amounts"] = amounts + data["hasOccupant"] = occupant ? 1 : 0 + var/occupantData[0] + // var/crisis = 0 + if(occupant) + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = occupant.health + occupantData["maxHealth"] = occupant.maxHealth + occupantData["minHealth"] = config.health_threshold_dead + occupantData["bruteLoss"] = occupant.getBruteLoss() + occupantData["oxyLoss"] = occupant.getOxyLoss() + occupantData["toxLoss"] = occupant.getToxLoss() + occupantData["fireLoss"] = occupant.getFireLoss() + occupantData["paralysis"] = occupant.paralysis + occupantData["hasBlood"] = 0 + occupantData["bodyTemperature"] = occupant.bodytemperature + occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations + // Because we can put simple_animals in here, we need to do something tricky to get things working nice + occupantData["temperatureSuitability"] = 0 // 0 is the baseline + if(ishuman(occupant) && occupant.species) + // I wanna do something where the bar gets bluer as the temperature gets lower + // For now, I'll just use the standard format for the temperature status + var/datum/species/sp = occupant.species + if(occupant.bodytemperature < sp.cold_level_3) + occupantData["temperatureSuitability"] = -3 + else if(occupant.bodytemperature < sp.cold_level_2) + occupantData["temperatureSuitability"] = -2 + else if(occupant.bodytemperature < sp.cold_level_1) + occupantData["temperatureSuitability"] = -1 + else if(occupant.bodytemperature > sp.heat_level_3) + occupantData["temperatureSuitability"] = 3 + else if(occupant.bodytemperature > sp.heat_level_2) + occupantData["temperatureSuitability"] = 2 + else if(occupant.bodytemperature > sp.heat_level_1) + occupantData["temperatureSuitability"] = 1 + else if(isanimal(occupant)) + var/mob/living/simple_mob/silly = occupant + if(silly.bodytemperature < silly.minbodytemp) + occupantData["temperatureSuitability"] = -3 + else if(silly.bodytemperature > silly.maxbodytemp) + occupantData["temperatureSuitability"] = 3 + // Blast you, imperial measurement system + occupantData["btCelsius"] = occupant.bodytemperature - T0C + occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 + + + // crisis = (occupant.health < min_health) + // I'm not sure WHY you'd want to put a simple_animal in a sleeper, but precedent is precedent + // Runtime is aptly named, isn't she? + if(ishuman(occupant) && !(NO_BLOOD in occupant.species.flags) && occupant.vessel) + occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) + occupantData["hasBlood"] = 1 + var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) + occupantData["bloodLevel"] = blood_volume + occupantData["bloodMax"] = occupant.species.blood_volume + occupantData["bloodPercent"] = round(100*(blood_volume/occupant.species.blood_volume), 0.01) //copy pasta ends here + + occupantData["bloodType"] = occupant.dna.b_type + + data["occupant"] = occupantData + data["maxchem"] = max_chem + data["minhealth"] = min_health + data["dialysis"] = filtering + data["stomachpumping"] = pumping + data["auto_eject_dead"] = auto_eject_dead + if(beaker) + data["isBeakerLoaded"] = 1 + if(beaker.reagents) + data["beakerMaxSpace"] = beaker.reagents.maximum_volume + data["beakerFreeSpace"] = beaker.reagents.get_free_space() + else + data["beakerMaxSpace"] = 0 + data["beakerFreeSpace"] = 0 + else + data["isBeakerLoaded"] = FALSE + + + var/stasis_level_name = "Error!" + for(var/N in stasis_choices) + if(stasis_choices[N] == stasis_level) + stasis_level_name = N + break + data["stasis"] = stasis_level_name + + var/chemicals[0] + for(var/re in available_chemicals) + var/datum/reagent/temp = SSchemistry.chemical_reagents[re] + if(temp) + var/reagent_amount = 0 + var/pretty_amount + var/injectable = occupant ? 1 : 0 + var/overdosing = 0 + var/caution = 0 // To make things clear that you're coming close to an overdose + // if(crisis && !(temp.id in emergency_chems)) + // injectable = 0 + + if(occupant && occupant.reagents) + reagent_amount = occupant.reagents.get_reagent_amount(temp.id) + // If they're mashing the highest concentration, they get one warning + if(temp.overdose && reagent_amount + 10 > (temp.overdose * occupant?.species.chemOD_threshold)) + caution = 1 + if(temp.overdose && reagent_amount > (temp.overdose * occupant?.species.chemOD_threshold)) + overdosing = 1 + + pretty_amount = round(reagent_amount, 0.05) + + chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("chemical" = temp.id), "occ_amount" = reagent_amount, "pretty_amount" = pretty_amount, "injectable" = injectable, "overdosing" = overdosing, "od_warning" = caution))) + data["chemicals"] = chemicals + return data + + +/obj/machinery/sleeper/tgui_act(action, params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + if(!controls_inside && usr == occupant) + return + if(panel_open) + to_chat(usr, "Close the maintenance panel first.") + return + + . = TRUE + switch(action) + if("chemical") + if(!occupant) + return + if(occupant.stat == DEAD) + var/datum/gender/G = gender_datums[occupant.get_visible_gender()] + to_chat(usr, "This person has no life to preserve anymore. Take [G.him] to a department capable of reanimating [G.him].") + return + var/chemical = params["chemid"] + var/amount = text2num(params["amount"]) + if(!length(chemical) || amount <= 0) + return + if(occupant.health > min_health) //|| (chemical in emergency_chems)) + inject_chemical(usr, chemical, amount) + else + to_chat(usr, "This person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!") + if("removebeaker") + remove_beaker() + if("togglefilter") + toggle_filter() + if("togglepump") + toggle_pump() + if("ejectify") + go_out() + if("changestasis") + var/new_stasis = tgui_input_list(usr, "Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level", stasis_choices) + if(new_stasis) + stasis_level = stasis_choices[new_stasis] + if("auto_eject_dead_on") + auto_eject_dead = TRUE + if("auto_eject_dead_off") + auto_eject_dead = FALSE + else + return FALSE + add_fingerprint(usr) + +/obj/machinery/sleeper/process() + if(stat & (NOPOWER|BROKEN)) + return + if(occupant) + if(auto_eject_dead && occupant.stat == DEAD) + playsound(loc, 'sound/machines/buzz-sigh.ogg', 40) + go_out() + return + occupant.Stasis(stasis_level) + + if(filtering > 0) + if(beaker) + if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) + var/pumped = 0 + for(var/datum/reagent/x in occupant.reagents.reagent_list) + occupant.reagents.trans_to_obj(beaker, 3) + pumped++ + if(ishuman(occupant)) + occupant.vessel.trans_to_obj(beaker, pumped + 1) + else + toggle_filter() + + if(pumping > 0) + if(beaker) + if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) + for(var/datum/reagent/x in occupant.ingested.reagent_list) + occupant.ingested.trans_to_obj(beaker, 3) + else + toggle_pump() + +/obj/machinery/sleeper/update_icon() + icon_state = "sleeper_[occupant ? "1" : "0"]" + +/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user) + add_fingerprint(user) + if(istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + if(G.affecting) + go_in(G.affecting, user) + return + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(!beaker) + beaker = I + user.drop_item() + I.loc = src + user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") + else + to_chat(user, "\The [src] has a beaker already.") + return + if(!occupant) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + +/obj/machinery/sleeper/verb/move_eject() + set name = "Eject occupant" + set category = "Object" + set src in oview(1) + if(usr == occupant) + switch(usr.stat) + if(DEAD) + return + if(UNCONSCIOUS) + to_chat(usr, "You struggle through the haze to hit the eject button. This will take a couple of minutes...") + if(do_after(usr, 2 MINUTES, src)) + go_out() + if(CONSCIOUS) + go_out() + else + if(usr.stat != CONSCIOUS) + return + go_out() + add_fingerprint(usr) + +/obj/machinery/sleeper/MouseDrop_T(var/mob/target, var/mob/user) + if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) + return + go_in(target, user) + +/obj/machinery/sleeper/relaymove(var/mob/user) + ..() + if(user.incapacitated()) + return + go_out() + +/obj/machinery/sleeper/emp_act(var/severity) + if(filtering) + toggle_filter() + + if(pumping) + toggle_pump() + + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(occupant) + go_out() + + ..(severity) +/obj/machinery/sleeper/proc/toggle_filter() + if(!occupant || !beaker) + filtering = 0 + return + filtering = !filtering + +/obj/machinery/sleeper/proc/toggle_pump() + if(!occupant || !beaker) + pumping = 0 + return + pumping = !pumping + +/obj/machinery/sleeper/proc/go_in(var/mob/M, var/mob/user) + if(!M) + return + if(stat & (BROKEN|NOPOWER)) + return + if(occupant) + to_chat(user, "\The [src] is already occupied.") + return + if(!ishuman(M)) + to_chat(user, "\The [src] is not designed for that organism!") + return + if(M == user) + visible_message("\The [user] starts climbing into \the [src].") + else + visible_message("\The [user] starts putting [M] into \the [src].") + + if(do_after(user, 20)) + if(occupant) + to_chat(user, "\The [src] is already occupied.") + return + M.stop_pulling() + if(M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + update_use_power(USE_POWER_ACTIVE) + occupant = M + occupant.cozyloop.start() // CHOMPStation Add: Cozy Music + update_icon() + +/obj/machinery/sleeper/proc/go_out() + if(!occupant || occupant.loc != src) + occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music + occupant = null // JUST IN CASE + return + if(occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + occupant.Stasis(0) + occupant.loc = src.loc + occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music + occupant = null + for(var/atom/movable/A in src) // In case an object was dropped inside or something + if(A == beaker || A == circuit) + continue + if(A in component_parts) + continue + A.loc = src.loc + update_use_power(USE_POWER_IDLE) + update_icon() + toggle_filter() + toggle_pump() + +/obj/machinery/sleeper/proc/remove_beaker() + if(beaker) + beaker.loc = src.loc + beaker = null + toggle_filter() + +/obj/machinery/sleeper/proc/inject_chemical(var/mob/living/user, var/chemical, var/amount) + if(stat & (BROKEN|NOPOWER)) + return + if(!(amount in amounts)) + return + + if(occupant && occupant.reagents) + if(occupant.reagents.get_reagent_amount(chemical) + amount <= max_chem) + use_power(amount * CHEM_SYNTH_ENERGY) + occupant.reagents.add_reagent(chemical, amount) + to_chat(user, "Occupant now has [occupant.reagents.get_reagent_amount(chemical)] units of [available_chemicals[chemical]] in their bloodstream.") + else + to_chat(user, "The subject has too many chemicals in their bloodstream.") + else + to_chat(user, "There's no suitable occupant in \the [src].") + +//Survival/Stasis sleepers +/obj/machinery/sleeper/survival_pod + desc = "A limited functionality sleeper, all it can do is put patients into stasis. It lacks the medication and configuration of the larger units." + icon_state = "sleeper" + stasis_level = 100 //Just one setting + +/obj/machinery/sleeper/survival_pod/Initialize() + . = ..() + RefreshParts(1) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 27fc21f4f1..ca824fc22a 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -1,455 +1,455 @@ -/obj/machinery/air_sensor - icon = 'icons/obj/stationobjs.dmi' - icon_state = "gsensor1" - name = "Gas Sensor" - desc = "Senses atmospheric conditions." - - anchored = TRUE - var/state = 0 - - var/id_tag - var/frequency = 1439 - - var/on = 1 - var/output = 3 - //Flags: - // 1 for pressure - // 2 for temperature - // Output >= 4 includes gas composition - // 4 for oxygen concentration - // 8 for phoron concentration - // 16 for nitrogen concentration - // 32 for carbon dioxide concentration - - var/datum/radio_frequency/radio_connection - -/obj/machinery/air_sensor/update_icon() - icon_state = "gsensor[on]" - -/obj/machinery/air_sensor/process() - if(on) - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - var/datum/gas_mixture/air_sample = return_air() - - if(output&1) - signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1),) - if(output&2) - signal.data["temperature"] = round(air_sample.temperature,0.1) - - if(output>4) - var/total_moles = air_sample.total_moles - if(total_moles > 0) - if(output&4) - signal.data["oxygen"] = round(100*air_sample.gas["oxygen"]/total_moles,0.1) - if(output&8) - signal.data["phoron"] = round(100*air_sample.gas["phoron"]/total_moles,0.1) - if(output&16) - signal.data["nitrogen"] = round(100*air_sample.gas["nitrogen"]/total_moles,0.1) - if(output&32) - signal.data["carbon_dioxide"] = round(100*air_sample.gas["carbon_dioxide"]/total_moles,0.1) - else - signal.data["oxygen"] = 0 - signal.data["phoron"] = 0 - signal.data["nitrogen"] = 0 - signal.data["carbon_dioxide"] = 0 - signal.data["sigtype"]="status" - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/air_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/air_sensor/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/air_sensor/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - . = ..() - -/obj/machinery/computer/general_air_control - icon_keyboard = "atmos_key" - icon_screen = "tank" - name = "Computer" - desc = "Control atmospheric systems, remotely." - var/frequency = 1439 - var/list/sensors = list() - var/list/sensor_information = list() - var/datum/radio_frequency/radio_connection - circuit = /obj/item/weapon/circuitboard/air_management - -/obj/machinery/computer/general_air_control/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() - -/obj/machinery/computer/general_air_control/attack_hand(mob/user) - if(..(user)) - return - - tgui_interact(user) - -/obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - if(!id_tag || !sensors.Find(id_tag)) return - - sensor_information[id_tag] = signal.data - -/obj/machinery/computer/general_air_control/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "GeneralAtmoControl", name) - ui.open() - -/obj/machinery/computer/general_air_control/tgui_data(mob/user) - var/list/data = list() - var/sensors_ui[0] - if(sensors.len) - for(var/id_tag in sensors) - var/long_name = sensors[id_tag] - var/list/sensor_data = sensor_information[id_tag] - sensors_ui[++sensors_ui.len] = list("long_name" = long_name, "sensor_data" = sensor_data) - else - sensors_ui = null - - data["sensors"] = sensors_ui - - return data - -/obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/computer/general_air_control/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/computer/general_air_control/large_tank_control - icon = 'icons/obj/computer.dmi' - frequency = 1441 - var/input_tag - var/output_tag - var/list/input_info - var/list/output_info - var/input_flow_setting = 200 - var/pressure_setting = ONE_ATMOSPHERE * 45 - circuit = /obj/item/weapon/circuitboard/air_management/tank_control - -/obj/machinery/computer/general_air_control/large_tank_control/tgui_data(mob/user) - var/list/data = ..() - - data["tanks"] = 1 - - if(input_info) - data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) - else - data["input_info"] = null - - if(output_info) - data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["internal"]) - else - data["output_info"] = null - - data["input_flow_setting"] = round(input_flow_setting, 0.1) - data["pressure_setting"] = pressure_setting - data["max_pressure"] = 50*ONE_ATMOSPHERE - data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 - - return data - -/obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) 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) - -/obj/machinery/computer/general_air_control/large_tank_control/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("adj_pressure") - var/new_pressure = text2num(params["adj_pressure"]) - pressure_setting = between(0, new_pressure, 50*ONE_ATMOSPHERE) - return TRUE - - if("adj_input_flow_rate") - var/new_flow = text2num(params["adj_input_flow_rate"]) - input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors - return TRUE - - if(!radio_connection) - return FALSE - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - switch(action) - if("in_refresh_status") - input_info = null - signal.data = list ("tag" = input_tag, "status" = 1) - . = TRUE - - if("in_toggle_injector") - input_info = null - signal.data = list ("tag" = input_tag, "power_toggle" = 1) - . = TRUE - - if("in_set_flowrate") - input_info = null - signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") - . = TRUE - - if("out_refresh_status") - output_info = null - signal.data = list ("tag" = output_tag, "status" = 1) - . = TRUE - - if("out_toggle_power") - output_info = null - signal.data = list ("tag" = output_tag, "power_toggle" = 1) - . = TRUE - - if("out_set_pressure") - output_info = null - signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]") - . = TRUE - - signal.data["sigtype"]="command" - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/computer/general_air_control/supermatter_core - icon = 'icons/obj/computer.dmi' - frequency = 1438 - var/input_tag - var/output_tag - var/list/input_info - var/list/output_info - var/input_flow_setting = 700 - var/pressure_setting = 100 - circuit = /obj/item/weapon/circuitboard/air_management/supermatter_core - -/obj/machinery/computer/general_air_control/supermatter_core/tgui_data(mob/user) - var/list/data = ..() - data["core"] = 1 - - if(input_info) - data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) - else - data["input_info"] = null - - if(output_info) - // Yes, TECHNICALLY this is not output pressure, it's a pressure LIMIT. HOWEVER. The fact that the UI uses "output_pressure" - // in EXACTLY THE SAME WAY as "pressure_limit" means this should just pass it as the other fucking data argument because holy shit what the - // fuck - data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["external"]) - else - data["output_info"] = null - - data["input_flow_setting"] = round(input_flow_setting, 0.1) - data["pressure_setting"] = pressure_setting - data["max_pressure"] = 10*ONE_ATMOSPHERE - data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 - - return data - -/obj/machinery/computer/general_air_control/supermatter_core/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) 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) - -/obj/machinery/computer/general_air_control/supermatter_core/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("adj_pressure") - var/new_pressure = text2num(params["adj_pressure"]) - pressure_setting = between(0, new_pressure, 10*ONE_ATMOSPHERE) - return TRUE - - if("adj_input_flow_rate") - var/new_flow = text2num(params["adj_input_flow_rate"]) - input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors - return TRUE - - if(!radio_connection) - return FALSE - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - switch(action) - if("in_refresh_status") - input_info = null - signal.data = list ("tag" = input_tag, "status" = 1) - . = TRUE - - if("in_toggle_injector") - input_info = null - signal.data = list ("tag" = input_tag, "power_toggle" = 1) - . = TRUE - - if("in_set_flowrate") - input_info = null - signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") - . = TRUE - - if("out_refresh_status") - output_info = null - signal.data = list ("tag" = output_tag, "status" = 1) - . = TRUE - - if("out_toggle_power") - output_info = null - signal.data = list ("tag" = output_tag, "power_toggle" = 1) - . = TRUE - - if("out_set_pressure") - output_info = null - signal.data = list ("tag" = output_tag, "set_external_pressure" = "[pressure_setting]", "checks" = 1) - . = TRUE - - signal.data["sigtype"]="command" - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/computer/general_air_control/fuel_injection - icon = 'icons/obj/computer.dmi' - icon_screen = "alert:0" - var/device_tag - var/list/device_info - var/automation = 0 - var/cutoff_temperature = 2000 - var/on_temperature = 1200 - circuit = /obj/item/weapon/circuitboard/air_management/injector_control - -/obj/machinery/computer/general_air_control/fuel_injection/process() - if(automation) - if(!radio_connection) - return FALSE - - var/injecting = 0 - for(var/id_tag in sensor_information) - var/list/data = sensor_information[id_tag] - if(data["temperature"]) - if(data["temperature"] >= cutoff_temperature) - injecting = 0 - break - if(data["temperature"] <= on_temperature) - injecting = 1 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = list( - "tag" = device_tag, - "power" = injecting, - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - ..() - -/obj/machinery/computer/general_air_control/fuel_injection/tgui_data(mob/user) - var/list/data = ..() - data["fuel"] = 1 - data["automation"] = automation - - if(device_info) - data["device_info"] = list("power" = device_info["power"], "volume_rate" = device_info["volume_rate"]) - else - data["device_info"] = null - - return data - -/obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - - if(device_tag == id_tag) - device_info = signal.data - else - ..(signal) - -/obj/machinery/computer/general_air_control/fuel_injection/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("refresh_status") - device_info = null - if(!radio_connection) - return FALSE - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "status" = 1, - "sigtype"="command" - ) - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - . = TRUE - - if("toggle_automation") - automation = !automation - . = TRUE - - if("toggle_injector") - device_info = null - if(!radio_connection) - return FALSE - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "power_toggle" = 1, - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - . = TRUE - - if("injection") - if(!radio_connection) - return FALSE - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "inject" = 1, - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) +/obj/machinery/air_sensor + icon = 'icons/obj/stationobjs.dmi' + icon_state = "gsensor1" + name = "Gas Sensor" + desc = "Senses atmospheric conditions." + + anchored = TRUE + var/state = 0 + + var/id_tag + var/frequency = 1439 + + var/on = 1 + var/output = 3 + //Flags: + // 1 for pressure + // 2 for temperature + // Output >= 4 includes gas composition + // 4 for oxygen concentration + // 8 for phoron concentration + // 16 for nitrogen concentration + // 32 for carbon dioxide concentration + + var/datum/radio_frequency/radio_connection + +/obj/machinery/air_sensor/update_icon() + icon_state = "gsensor[on]" + +/obj/machinery/air_sensor/process() + if(on) + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.data["tag"] = id_tag + signal.data["timestamp"] = world.time + + var/datum/gas_mixture/air_sample = return_air() + + if(output&1) + signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1),) + if(output&2) + signal.data["temperature"] = round(air_sample.temperature,0.1) + + if(output>4) + var/total_moles = air_sample.total_moles + if(total_moles > 0) + if(output&4) + signal.data["oxygen"] = round(100*air_sample.gas["oxygen"]/total_moles,0.1) + if(output&8) + signal.data["phoron"] = round(100*air_sample.gas["phoron"]/total_moles,0.1) + if(output&16) + signal.data["nitrogen"] = round(100*air_sample.gas["nitrogen"]/total_moles,0.1) + if(output&32) + signal.data["carbon_dioxide"] = round(100*air_sample.gas["carbon_dioxide"]/total_moles,0.1) + else + signal.data["oxygen"] = 0 + signal.data["phoron"] = 0 + signal.data["nitrogen"] = 0 + signal.data["carbon_dioxide"] = 0 + signal.data["sigtype"]="status" + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/air_sensor/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/air_sensor/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/air_sensor/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + . = ..() + +/obj/machinery/computer/general_air_control + icon_keyboard = "atmos_key" + icon_screen = "tank" + name = "Computer" + desc = "Control atmospheric systems, remotely." + var/frequency = 1439 + var/list/sensors = list() + var/list/sensor_information = list() + var/datum/radio_frequency/radio_connection + circuit = /obj/item/weapon/circuitboard/air_management + +/obj/machinery/computer/general_air_control/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() + +/obj/machinery/computer/general_air_control/attack_hand(mob/user) + if(..(user)) + return + + tgui_interact(user) + +/obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) return + + var/id_tag = signal.data["tag"] + if(!id_tag || !sensors.Find(id_tag)) return + + sensor_information[id_tag] = signal.data + +/obj/machinery/computer/general_air_control/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GeneralAtmoControl", name) + ui.open() + +/obj/machinery/computer/general_air_control/tgui_data(mob/user) + var/list/data = list() + var/sensors_ui[0] + if(sensors.len) + for(var/id_tag in sensors) + var/long_name = sensors[id_tag] + var/list/sensor_data = sensor_information[id_tag] + sensors_ui[++sensors_ui.len] = list("long_name" = long_name, "sensor_data" = sensor_data) + else + sensors_ui = null + + data["sensors"] = sensors_ui + + return data + +/obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/computer/general_air_control/Initialize() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/computer/general_air_control/large_tank_control + icon = 'icons/obj/computer.dmi' + frequency = 1441 + var/input_tag + var/output_tag + var/list/input_info + var/list/output_info + var/input_flow_setting = 200 + var/pressure_setting = ONE_ATMOSPHERE * 45 + circuit = /obj/item/weapon/circuitboard/air_management/tank_control + +/obj/machinery/computer/general_air_control/large_tank_control/tgui_data(mob/user) + var/list/data = ..() + + data["tanks"] = 1 + + if(input_info) + data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) + else + data["input_info"] = null + + if(output_info) + data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["internal"]) + else + data["output_info"] = null + + data["input_flow_setting"] = round(input_flow_setting, 0.1) + data["pressure_setting"] = pressure_setting + data["max_pressure"] = 50*ONE_ATMOSPHERE + data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 + + return data + +/obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) 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) + +/obj/machinery/computer/general_air_control/large_tank_control/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("adj_pressure") + var/new_pressure = text2num(params["adj_pressure"]) + pressure_setting = between(0, new_pressure, 50*ONE_ATMOSPHERE) + return TRUE + + if("adj_input_flow_rate") + var/new_flow = text2num(params["adj_input_flow_rate"]) + input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors + return TRUE + + if(!radio_connection) + return FALSE + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + switch(action) + if("in_refresh_status") + input_info = null + signal.data = list ("tag" = input_tag, "status" = 1) + . = TRUE + + if("in_toggle_injector") + input_info = null + signal.data = list ("tag" = input_tag, "power_toggle" = 1) + . = TRUE + + if("in_set_flowrate") + input_info = null + signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") + . = TRUE + + if("out_refresh_status") + output_info = null + signal.data = list ("tag" = output_tag, "status" = 1) + . = TRUE + + if("out_toggle_power") + output_info = null + signal.data = list ("tag" = output_tag, "power_toggle" = 1) + . = TRUE + + if("out_set_pressure") + output_info = null + signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]") + . = TRUE + + signal.data["sigtype"]="command" + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/computer/general_air_control/supermatter_core + icon = 'icons/obj/computer.dmi' + frequency = 1438 + var/input_tag + var/output_tag + var/list/input_info + var/list/output_info + var/input_flow_setting = 700 + var/pressure_setting = 100 + circuit = /obj/item/weapon/circuitboard/air_management/supermatter_core + +/obj/machinery/computer/general_air_control/supermatter_core/tgui_data(mob/user) + var/list/data = ..() + data["core"] = 1 + + if(input_info) + data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) + else + data["input_info"] = null + + if(output_info) + // Yes, TECHNICALLY this is not output pressure, it's a pressure LIMIT. HOWEVER. The fact that the UI uses "output_pressure" + // in EXACTLY THE SAME WAY as "pressure_limit" means this should just pass it as the other fucking data argument because holy shit what the + // fuck + data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["external"]) + else + data["output_info"] = null + + data["input_flow_setting"] = round(input_flow_setting, 0.1) + data["pressure_setting"] = pressure_setting + data["max_pressure"] = 10*ONE_ATMOSPHERE + data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 + + return data + +/obj/machinery/computer/general_air_control/supermatter_core/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) 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) + +/obj/machinery/computer/general_air_control/supermatter_core/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("adj_pressure") + var/new_pressure = text2num(params["adj_pressure"]) + pressure_setting = between(0, new_pressure, 10*ONE_ATMOSPHERE) + return TRUE + + if("adj_input_flow_rate") + var/new_flow = text2num(params["adj_input_flow_rate"]) + input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors + return TRUE + + if(!radio_connection) + return FALSE + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + switch(action) + if("in_refresh_status") + input_info = null + signal.data = list ("tag" = input_tag, "status" = 1) + . = TRUE + + if("in_toggle_injector") + input_info = null + signal.data = list ("tag" = input_tag, "power_toggle" = 1) + . = TRUE + + if("in_set_flowrate") + input_info = null + signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") + . = TRUE + + if("out_refresh_status") + output_info = null + signal.data = list ("tag" = output_tag, "status" = 1) + . = TRUE + + if("out_toggle_power") + output_info = null + signal.data = list ("tag" = output_tag, "power_toggle" = 1) + . = TRUE + + if("out_set_pressure") + output_info = null + signal.data = list ("tag" = output_tag, "set_external_pressure" = "[pressure_setting]", "checks" = 1) + . = TRUE + + signal.data["sigtype"]="command" + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + +/obj/machinery/computer/general_air_control/fuel_injection + icon = 'icons/obj/computer.dmi' + icon_screen = "alert:0" + var/device_tag + var/list/device_info + var/automation = 0 + var/cutoff_temperature = 2000 + var/on_temperature = 1200 + circuit = /obj/item/weapon/circuitboard/air_management/injector_control + +/obj/machinery/computer/general_air_control/fuel_injection/process() + if(automation) + if(!radio_connection) + return FALSE + + var/injecting = 0 + for(var/id_tag in sensor_information) + var/list/data = sensor_information[id_tag] + if(data["temperature"]) + if(data["temperature"] >= cutoff_temperature) + injecting = 0 + break + if(data["temperature"] <= on_temperature) + injecting = 1 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = list( + "tag" = device_tag, + "power" = injecting, + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + + ..() + +/obj/machinery/computer/general_air_control/fuel_injection/tgui_data(mob/user) + var/list/data = ..() + data["fuel"] = 1 + data["automation"] = automation + + if(device_info) + data["device_info"] = list("power" = device_info["power"], "volume_rate" = device_info["volume_rate"]) + else + data["device_info"] = null + + return data + +/obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) return + + var/id_tag = signal.data["tag"] + + if(device_tag == id_tag) + device_info = signal.data + else + ..(signal) + +/obj/machinery/computer/general_air_control/fuel_injection/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("refresh_status") + device_info = null + if(!radio_connection) + return FALSE + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "status" = 1, + "sigtype"="command" + ) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + . = TRUE + + if("toggle_automation") + automation = !automation + . = TRUE + + if("toggle_injector") + device_info = null + if(!radio_connection) + return FALSE + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "power_toggle" = 1, + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) + . = TRUE + + if("injection") + if(!radio_connection) + return FALSE + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "inject" = 1, + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) . = TRUE \ No newline at end of file diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index a7f8a40eeb..3fb8adccfd 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -1,471 +1,471 @@ -/obj/machinery/portable_atmospherics/canister - name = "canister" - icon = 'icons/obj/atmos.dmi' - icon_state = "yellow" - density = TRUE - var/health = 100.0 - w_class = ITEMSIZE_HUGE - - layer = TABLE_LAYER // Above catwalks, hopefully below other things - - var/valve_open = 0 - var/release_pressure = ONE_ATMOSPHERE - var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s - - var/canister_color = "yellow" - var/can_label = 1 - start_pressure = 45 * ONE_ATMOSPHERE - pressure_resistance = 7 * ONE_ATMOSPHERE - var/temperature_resistance = 1000 + T0C - volume = 1000 - use_power = USE_POWER_OFF - interact_offline = 1 // Allows this to be used when not in powered area. - var/release_log = "" - var/update_flag = 0 - -/obj/machinery/portable_atmospherics/canister/drain_power() - return -1 - -/obj/machinery/portable_atmospherics/canister/nitrous_oxide - name = "Canister: \[N2O\]" - icon_state = "redws" - canister_color = "redws" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/nitrogen - name = "Canister: \[N2\]" - icon_state = "red" - canister_color = "red" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/oxygen - name = "Canister: \[O2\]" - icon_state = "blue" - canister_color = "blue" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled - name = "Canister: \[O2 (Cryo)\]" - -/obj/machinery/portable_atmospherics/canister/phoron - name = "Canister \[Phoron\]" - icon_state = "orangeps" - canister_color = "orangeps" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide - name = "Canister \[CO2\]" - icon_state = "black" - canister_color = "black" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/air - name = "Canister \[Air\]" - icon_state = "grey" - canister_color = "grey" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/air/airlock - start_pressure = 3 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/canister/empty/ - start_pressure = 0 - can_label = 1 - -/obj/machinery/portable_atmospherics/canister/empty/oxygen - name = "Canister: \[O2\]" - icon_state = "blue" - canister_color = "blue" -/obj/machinery/portable_atmospherics/canister/empty/phoron - name = "Canister \[Phoron\]" - icon_state = "orangeps" - canister_color = "orangeps" -/obj/machinery/portable_atmospherics/canister/empty/nitrogen - name = "Canister \[N2\]" - icon_state = "red" - canister_color = "red" -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide - name = "Canister \[CO2\]" - icon_state = "black" - canister_color = "black" -/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide - name = "Canister \[N2O\]" - icon_state = "redws" - canister_color = "redws" - - - - -/obj/machinery/portable_atmospherics/canister/proc/check_change() - var/old_flag = update_flag - update_flag = 0 - if(holding) - update_flag |= 1 - if(connected_port) - update_flag |= 2 - - var/tank_pressure = air_contents.return_pressure() - if(tank_pressure < 10) - update_flag |= 4 - else if(tank_pressure < ONE_ATMOSPHERE) - update_flag |= 8 - else if(tank_pressure < 15*ONE_ATMOSPHERE) - update_flag |= 16 - else - update_flag |= 32 - - if(update_flag == old_flag) - return 1 - else - return 0 - -/obj/machinery/portable_atmospherics/canister/update_icon() -/* -update_flag -1 = holding -2 = connected_port -4 = tank_pressure < 10 -8 = tank_pressure < ONE_ATMOS -16 = tank_pressure < 15*ONE_ATMOS -32 = tank_pressure go boom. -*/ - - if (src.destroyed) - src.overlays = 0 - src.icon_state = text("[]-1", src.canister_color) - return - - if(icon_state != "[canister_color]") - icon_state = "[canister_color]" - - if(check_change()) //Returns 1 if no change needed to icons. - return - - cut_overlays() - - if(update_flag & 1) - add_overlay("can-open") - if(update_flag & 2) - add_overlay("can-connector") - if(update_flag & 4) - add_overlay("can-o0") - if(update_flag & 8) - add_overlay("can-o1") - else if(update_flag & 16) - add_overlay("can-o2") - else if(update_flag & 32) - add_overlay("can-o3") - return - -/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > temperature_resistance) - health -= 5 - healthcheck() - -/obj/machinery/portable_atmospherics/canister/proc/healthcheck() - if(destroyed) - return 1 - - if (src.health <= 10) - var/atom/location = src.loc - location.assume_air(air_contents) - - src.destroyed = 1 - playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) - src.density = FALSE - update_icon() - - if (src.holding) - src.holding.loc = src.loc - src.holding = null - - return 1 - else - return 1 - -/obj/machinery/portable_atmospherics/canister/process() - if (destroyed) - return - - ..() - - if(valve_open) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/env_pressure = environment.return_pressure() - var/pressure_delta = release_pressure - env_pressure - - if((air_contents.temperature > 0) && (pressure_delta > 0)) - var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) - transfer_moles = min(transfer_moles, (release_flow_rate/air_contents.volume)*air_contents.total_moles) //flow rate limit - - var/returnval = pump_gas_passive(src, air_contents, environment, transfer_moles) - if(returnval >= 0) - src.update_icon() - - if(air_contents.return_pressure() < 1) - can_label = 1 - else - can_label = 0 - - air_contents.react() //cooking up air cans - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE - -/obj/machinery/portable_atmospherics/canister/return_air() - return air_contents - -/obj/machinery/portable_atmospherics/canister/proc/return_temperature() - var/datum/gas_mixture/GM = src.return_air() - if(GM && GM.volume>0) - return GM.temperature - return 0 - -/obj/machinery/portable_atmospherics/canister/proc/return_pressure() - var/datum/gas_mixture/GM = src.return_air() - if(GM && GM.volume>0) - return GM.return_pressure() - return 0 - -/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) - if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - return - - if(Proj.damage) - src.health -= round(Proj.damage / 2) - healthcheck() - ..() - -/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(W.has_tool_quality(TOOL_WELDER)) //Vorestart: Deconstructable Canisters - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") - return - if(air_contents.return_pressure() > 1 && !destroyed) // Empty or broken cans are able to be deconstructed - to_chat(user, "\The [src]'s internal pressure is too high! Empty the canister before attempting to weld it apart.") - return - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - to_chat(user, "You deconstruct the [src].") - new /obj/item/stack/material/steel( src.loc, 10) - qdel(src) - return - //Voreend - if(!W.has_tool_quality(TOOL_WRENCH) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda)) - visible_message("\The [user] hits \the [src] with \a [W]!") - src.health -= W.force - src.add_fingerprint(user) - healthcheck() - - if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/weapon/tank/jetpack)) - var/datum/gas_mixture/thejetpack = W:air_contents - var/env_pressure = thejetpack.return_pressure() - var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2) - //Can not have a pressure delta that would cause environment pressure > tank pressure - var/transfer_moles = 0 - if((air_contents.temperature > 0) && (pressure_delta > 0)) - transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - thejetpack.merge(removed) - to_chat(user, "You pulse-pressurize your jetpack from the tank.") - return - - ..() - - SStgui.update_uis(src) // Update all NanoUIs attached to src - -/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) - return tgui_interact(user) - -/obj/machinery/portable_atmospherics/canister/tgui_state(mob/user) - return GLOB.tgui_physical_state - -/obj/machinery/portable_atmospherics/canister/tgui_interact(mob/user, datum/tgui/ui) - if(destroyed) - return - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Canister", name) - ui.open() - -/obj/machinery/portable_atmospherics/canister/tgui_data(mob/user) - var/list/data = list() - data["can_relabel"] = can_label ? 1 : 0 - data["connected"] = connected_port ? 1 : 0 - data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(release_pressure ? release_pressure : 0) - data["defaultReleasePressure"] = round(initial(release_pressure)) - data["minReleasePressure"] = round(ONE_ATMOSPHERE/10) - data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE) - data["valveOpen"] = valve_open ? 1 : 0 - - if(holding) - data["holding"] = list() - data["holding"]["name"] = holding.name - data["holding"]["pressure"] = round(holding.air_contents.return_pressure()) - else - data["holding"] = null - - return data - -/obj/machinery/portable_atmospherics/canister/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("relabel") - if(can_label) - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Phoron\]" = "orangeps", \ - "\[CO2\]" = "black", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = tgui_input_list(usr, "Choose canister label", "Gas canister", colors) - if(label) - canister_color = colors[label] - icon_state = colors[label] - name = "Canister: [label]" - if("pressure") - var/pressure = params["pressure"] - if(pressure == "reset") - pressure = initial(release_pressure) - . = TRUE - else if(pressure == "min") - pressure = ONE_ATMOSPHERE/10 - . = TRUE - else if(pressure == "max") - pressure = 10*ONE_ATMOSPHERE - . = TRUE - else if(pressure == "input") - pressure = tgui_input_number(usr, "New release pressure ([ONE_ATMOSPHERE/10]-[10*ONE_ATMOSPHERE] kPa):", name, release_pressure, 10*ONE_ATMOSPHERE, ONE_ATMOSPHERE/10) - if(!isnull(pressure) && !..()) - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - release_pressure = clamp(round(pressure), ONE_ATMOSPHERE/10, 10*ONE_ATMOSPHERE) - if("valve") - if(valve_open) - if(holding) - release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
    " - else - release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the air
    " - else - if(holding) - release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the [holding]
    " - else - release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the air
    " - log_open() - valve_open = !valve_open - . = TRUE - if("eject") - if(holding) - if(valve_open) - valve_open = 0 - release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
    " - if(istype(holding, /obj/item/weapon/tank)) - holding.manipulated_by = usr.real_name - holding.loc = loc - holding = null - . = TRUE - - add_fingerprint(usr) - update_icon() - -/obj/machinery/portable_atmospherics/canister/phoron/New() - ..() - - src.air_contents.adjust_gas("phoron", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() - - src.air_contents.adjust_gas("oxygen", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New() - ..() - - src.air_contents.adjust_gas("oxygen", MolesForPressure()) - src.air_contents.temperature = 80 - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/nitrous_oxide/New() - ..() - - air_contents.adjust_gas("nitrous_oxide", MolesForPressure()) - src.update_icon() - return 1 - -//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 -/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/Initialize() - . = ..() - air_contents.gas["nitrous_oxide"] = 9*4000 - var/turf/simulated/location = src.loc - if (istype(src.loc)) - location.assume_air(air_contents) - air_contents = new - return 1 - -/obj/machinery/portable_atmospherics/canister/nitrogen/New() - - ..() - - src.air_contents.adjust_gas("nitrogen", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - ..() - src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) - src.update_icon() - return 1 - - -/obj/machinery/portable_atmospherics/canister/air/New() - ..() - var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) - - src.update_icon() - return 1 - -//R-UST port -// Special types used for engine setup admin verb, they contain double amount of that of normal canister. -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New() - ..() - src.air_contents.adjust_gas("nitrogen", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New() - ..() - src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New() - ..() - src.air_contents.adjust_gas("phoron", MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/take_damage(var/damage) - src.health -= damage - healthcheck() +/obj/machinery/portable_atmospherics/canister + name = "canister" + icon = 'icons/obj/atmos.dmi' + icon_state = "yellow" + density = TRUE + var/health = 100.0 + w_class = ITEMSIZE_HUGE + + layer = TABLE_LAYER // Above catwalks, hopefully below other things + + var/valve_open = 0 + var/release_pressure = ONE_ATMOSPHERE + var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s + + var/canister_color = "yellow" + var/can_label = 1 + start_pressure = 45 * ONE_ATMOSPHERE + pressure_resistance = 7 * ONE_ATMOSPHERE + var/temperature_resistance = 1000 + T0C + volume = 1000 + use_power = USE_POWER_OFF + interact_offline = 1 // Allows this to be used when not in powered area. + var/release_log = "" + var/update_flag = 0 + +/obj/machinery/portable_atmospherics/canister/drain_power() + return -1 + +/obj/machinery/portable_atmospherics/canister/nitrous_oxide + name = "Canister: \[N2O\]" + icon_state = "redws" + canister_color = "redws" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/nitrogen + name = "Canister: \[N2\]" + icon_state = "red" + canister_color = "red" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/oxygen + name = "Canister: \[O2\]" + icon_state = "blue" + canister_color = "blue" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled + name = "Canister: \[O2 (Cryo)\]" + +/obj/machinery/portable_atmospherics/canister/phoron + name = "Canister \[Phoron\]" + icon_state = "orangeps" + canister_color = "orangeps" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/carbon_dioxide + name = "Canister \[CO2\]" + icon_state = "black" + canister_color = "black" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/air + name = "Canister \[Air\]" + icon_state = "grey" + canister_color = "grey" + can_label = 0 + +/obj/machinery/portable_atmospherics/canister/air/airlock + start_pressure = 3 * ONE_ATMOSPHERE + +/obj/machinery/portable_atmospherics/canister/empty/ + start_pressure = 0 + can_label = 1 + +/obj/machinery/portable_atmospherics/canister/empty/oxygen + name = "Canister: \[O2\]" + icon_state = "blue" + canister_color = "blue" +/obj/machinery/portable_atmospherics/canister/empty/phoron + name = "Canister \[Phoron\]" + icon_state = "orangeps" + canister_color = "orangeps" +/obj/machinery/portable_atmospherics/canister/empty/nitrogen + name = "Canister \[N2\]" + icon_state = "red" + canister_color = "red" +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide + name = "Canister \[CO2\]" + icon_state = "black" + canister_color = "black" +/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide + name = "Canister \[N2O\]" + icon_state = "redws" + canister_color = "redws" + + + + +/obj/machinery/portable_atmospherics/canister/proc/check_change() + var/old_flag = update_flag + update_flag = 0 + if(holding) + update_flag |= 1 + if(connected_port) + update_flag |= 2 + + var/tank_pressure = air_contents.return_pressure() + if(tank_pressure < 10) + update_flag |= 4 + else if(tank_pressure < ONE_ATMOSPHERE) + update_flag |= 8 + else if(tank_pressure < 15*ONE_ATMOSPHERE) + update_flag |= 16 + else + update_flag |= 32 + + if(update_flag == old_flag) + return 1 + else + return 0 + +/obj/machinery/portable_atmospherics/canister/update_icon() +/* +update_flag +1 = holding +2 = connected_port +4 = tank_pressure < 10 +8 = tank_pressure < ONE_ATMOS +16 = tank_pressure < 15*ONE_ATMOS +32 = tank_pressure go boom. +*/ + + if (src.destroyed) + src.overlays = 0 + src.icon_state = text("[]-1", src.canister_color) + return + + if(icon_state != "[canister_color]") + icon_state = "[canister_color]" + + if(check_change()) //Returns 1 if no change needed to icons. + return + + cut_overlays() + + if(update_flag & 1) + add_overlay("can-open") + if(update_flag & 2) + add_overlay("can-connector") + if(update_flag & 4) + add_overlay("can-o0") + if(update_flag & 8) + add_overlay("can-o1") + else if(update_flag & 16) + add_overlay("can-o2") + else if(update_flag & 32) + add_overlay("can-o3") + return + +/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > temperature_resistance) + health -= 5 + healthcheck() + +/obj/machinery/portable_atmospherics/canister/proc/healthcheck() + if(destroyed) + return 1 + + if (src.health <= 10) + var/atom/location = src.loc + location.assume_air(air_contents) + + src.destroyed = 1 + playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) + src.density = FALSE + update_icon() + + if (src.holding) + src.holding.loc = src.loc + src.holding = null + + return 1 + else + return 1 + +/obj/machinery/portable_atmospherics/canister/process() + if (destroyed) + return + + ..() + + if(valve_open) + var/datum/gas_mixture/environment + if(holding) + environment = holding.air_contents + else + environment = loc.return_air() + + var/env_pressure = environment.return_pressure() + var/pressure_delta = release_pressure - env_pressure + + if((air_contents.temperature > 0) && (pressure_delta > 0)) + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) + transfer_moles = min(transfer_moles, (release_flow_rate/air_contents.volume)*air_contents.total_moles) //flow rate limit + + var/returnval = pump_gas_passive(src, air_contents, environment, transfer_moles) + if(returnval >= 0) + src.update_icon() + + if(air_contents.return_pressure() < 1) + can_label = 1 + else + can_label = 0 + + air_contents.react() //cooking up air cans - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE + +/obj/machinery/portable_atmospherics/canister/return_air() + return air_contents + +/obj/machinery/portable_atmospherics/canister/proc/return_temperature() + var/datum/gas_mixture/GM = src.return_air() + if(GM && GM.volume>0) + return GM.temperature + return 0 + +/obj/machinery/portable_atmospherics/canister/proc/return_pressure() + var/datum/gas_mixture/GM = src.return_air() + if(GM && GM.volume>0) + return GM.return_pressure() + return 0 + +/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) + if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + return + + if(Proj.damage) + src.health -= round(Proj.damage / 2) + healthcheck() + ..() + +/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(W.has_tool_quality(TOOL_WELDER)) //Vorestart: Deconstructable Canisters + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.remove_fuel(0, user)) + to_chat(user, "The welding tool must be on to complete this task.") + return + if(air_contents.return_pressure() > 1 && !destroyed) // Empty or broken cans are able to be deconstructed + to_chat(user, "\The [src]'s internal pressure is too high! Empty the canister before attempting to weld it apart.") + return + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + to_chat(user, "You deconstruct the [src].") + new /obj/item/stack/material/steel( src.loc, 10) + qdel(src) + return + //Voreend + if(!W.has_tool_quality(TOOL_WRENCH) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda)) + visible_message("\The [user] hits \the [src] with \a [W]!") + src.health -= W.force + src.add_fingerprint(user) + healthcheck() + + if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/weapon/tank/jetpack)) + var/datum/gas_mixture/thejetpack = W:air_contents + var/env_pressure = thejetpack.return_pressure() + var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2) + //Can not have a pressure delta that would cause environment pressure > tank pressure + var/transfer_moles = 0 + if((air_contents.temperature > 0) && (pressure_delta > 0)) + transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + thejetpack.merge(removed) + to_chat(user, "You pulse-pressurize your jetpack from the tank.") + return + + ..() + + SStgui.update_uis(src) // Update all NanoUIs attached to src + +/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) + return tgui_interact(user) + +/obj/machinery/portable_atmospherics/canister/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/obj/machinery/portable_atmospherics/canister/tgui_interact(mob/user, datum/tgui/ui) + if(destroyed) + return + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Canister", name) + ui.open() + +/obj/machinery/portable_atmospherics/canister/tgui_data(mob/user) + var/list/data = list() + data["can_relabel"] = can_label ? 1 : 0 + data["connected"] = connected_port ? 1 : 0 + data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(release_pressure ? release_pressure : 0) + data["defaultReleasePressure"] = round(initial(release_pressure)) + data["minReleasePressure"] = round(ONE_ATMOSPHERE/10) + data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE) + data["valveOpen"] = valve_open ? 1 : 0 + + if(holding) + data["holding"] = list() + data["holding"]["name"] = holding.name + data["holding"]["pressure"] = round(holding.air_contents.return_pressure()) + else + data["holding"] = null + + return data + +/obj/machinery/portable_atmospherics/canister/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("relabel") + if(can_label) + var/list/colors = list(\ + "\[N2O\]" = "redws", \ + "\[N2\]" = "red", \ + "\[O2\]" = "blue", \ + "\[Phoron\]" = "orangeps", \ + "\[CO2\]" = "black", \ + "\[Air\]" = "grey", \ + "\[CAUTION\]" = "yellow", \ + ) + var/label = tgui_input_list(usr, "Choose canister label", "Gas canister", colors) + if(label) + canister_color = colors[label] + icon_state = colors[label] + name = "Canister: [label]" + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + pressure = initial(release_pressure) + . = TRUE + else if(pressure == "min") + pressure = ONE_ATMOSPHERE/10 + . = TRUE + else if(pressure == "max") + pressure = 10*ONE_ATMOSPHERE + . = TRUE + else if(pressure == "input") + pressure = tgui_input_number(usr, "New release pressure ([ONE_ATMOSPHERE/10]-[10*ONE_ATMOSPHERE] kPa):", name, release_pressure, 10*ONE_ATMOSPHERE, ONE_ATMOSPHERE/10) + if(!isnull(pressure) && !..()) + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + release_pressure = clamp(round(pressure), ONE_ATMOSPHERE/10, 10*ONE_ATMOSPHERE) + if("valve") + if(valve_open) + if(holding) + release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
    " + else + release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the air
    " + else + if(holding) + release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the [holding]
    " + else + release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the air
    " + log_open() + valve_open = !valve_open + . = TRUE + if("eject") + if(holding) + if(valve_open) + valve_open = 0 + release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
    " + if(istype(holding, /obj/item/weapon/tank)) + holding.manipulated_by = usr.real_name + holding.loc = loc + holding = null + . = TRUE + + add_fingerprint(usr) + update_icon() + +/obj/machinery/portable_atmospherics/canister/phoron/New() + ..() + + src.air_contents.adjust_gas("phoron", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/oxygen/New() + ..() + + src.air_contents.adjust_gas("oxygen", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New() + ..() + + src.air_contents.adjust_gas("oxygen", MolesForPressure()) + src.air_contents.temperature = 80 + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/nitrous_oxide/New() + ..() + + air_contents.adjust_gas("nitrous_oxide", MolesForPressure()) + src.update_icon() + return 1 + +//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 +/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/Initialize() + . = ..() + air_contents.gas["nitrous_oxide"] = 9*4000 + var/turf/simulated/location = src.loc + if (istype(src.loc)) + location.assume_air(air_contents) + air_contents = new + return 1 + +/obj/machinery/portable_atmospherics/canister/nitrogen/New() + + ..() + + src.air_contents.adjust_gas("nitrogen", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() + ..() + src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) + src.update_icon() + return 1 + + +/obj/machinery/portable_atmospherics/canister/air/New() + ..() + var/list/air_mix = StandardAirMix() + src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) + + src.update_icon() + return 1 + +//R-UST port +// Special types used for engine setup admin verb, they contain double amount of that of normal canister. +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New() + ..() + src.air_contents.adjust_gas("nitrogen", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New() + ..() + src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New() + ..() + src.air_contents.adjust_gas("phoron", MolesForPressure()) + src.update_icon() + return 1 + +/obj/machinery/portable_atmospherics/canister/take_damage(var/damage) + src.health -= damage + healthcheck() diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index c8b36e6138..9398818658 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -1,139 +1,139 @@ -/obj/machinery/meter - name = "meter" - desc = "It measures something." - icon = 'icons/obj/meter_vr.dmi' - icon_state = "meterX" - var/obj/machinery/atmospherics/pipe/target = null - var/list/pipes_on_turf = list() - anchored = TRUE - power_channel = ENVIRON - var/frequency = 0 - var/id - use_power = USE_POWER_IDLE - idle_power_usage = 15 - -/obj/machinery/meter/Initialize() - . = ..() - if (!target) - target = select_target() - -/obj/machinery/meter/Destroy() - pipes_on_turf.Cut() - target = null - return ..() - -/obj/machinery/meter/proc/select_target() - var/obj/machinery/atmospherics/pipe/P - for(P in loc) - if(!P.hides_under_flooring()) - break - if(!P) - P = locate(/obj/machinery/atmospherics/pipe) in loc - return P - -/obj/machinery/meter/process() - if(!target) - icon_state = "meterX" - return 0 - - if(stat & (BROKEN|NOPOWER)) - icon_state = "meter0" - return 0 - - 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 = radio_controller.return_frequency(frequency) - - if(!radio_connection) return - - var/datum/signal/signal = new - signal.source = src - signal.transmission_method = TRANSMISSION_RADIO - signal.data = list( - "tag" = id, - "device" = "AM", - "pressure" = round(env_pressure), - "sigtype" = "status" - ) - radio_connection.post_signal(src, signal) - -/obj/machinery/meter/examine(mob/user) - . = ..() - - if(get_dist(user, src) > 3 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/observer/dead))) - . += "You are too far away to read it." - - else if(stat & (NOPOWER|BROKEN)) - . += "The display is off." - - else 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/Click() - - if(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/living/silicon/ai)) // ghosts can call ..() for examine - var/mob/living/L = usr - if(!L.get_active_hand() || !L.Adjacent(src)) - usr.examinate(src) - return 1 - - return ..() - -/obj/machinery/meter/attackby(var/obj/item/W, var/mob/user) - if(W.has_tool_quality(TOOL_WRENCH)) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if(do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear ratchet.") - new /obj/item/pipe_meter(get_turf(src)) - qdel(src) - return - - if(istype(W, /obj/item/device/multitool)) - for(var/obj/machinery/atmospherics/pipe/P in loc) - pipes_on_turf |= P - if(!pipes_on_turf.len) - return - target = pipes_on_turf[1] - pipes_on_turf.Remove(target) - pipes_on_turf.Add(target) - to_chat(user, "Pipe meter set to moniter \the [target].") - return - - return ..() - -// TURF METER - REPORTS A TILE'S AIR CONTENTS - -/obj/machinery/meter/turf/select_target() - return loc - -/obj/machinery/meter/turf/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - return +/obj/machinery/meter + name = "meter" + desc = "It measures something." + icon = 'icons/obj/meter_vr.dmi' + icon_state = "meterX" + var/obj/machinery/atmospherics/pipe/target = null + var/list/pipes_on_turf = list() + anchored = TRUE + power_channel = ENVIRON + var/frequency = 0 + var/id + use_power = USE_POWER_IDLE + idle_power_usage = 15 + +/obj/machinery/meter/Initialize() + . = ..() + if (!target) + target = select_target() + +/obj/machinery/meter/Destroy() + pipes_on_turf.Cut() + target = null + return ..() + +/obj/machinery/meter/proc/select_target() + var/obj/machinery/atmospherics/pipe/P + for(P in loc) + if(!P.hides_under_flooring()) + break + if(!P) + P = locate(/obj/machinery/atmospherics/pipe) in loc + return P + +/obj/machinery/meter/process() + if(!target) + icon_state = "meterX" + return 0 + + if(stat & (BROKEN|NOPOWER)) + icon_state = "meter0" + return 0 + + 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 = radio_controller.return_frequency(frequency) + + if(!radio_connection) return + + var/datum/signal/signal = new + signal.source = src + signal.transmission_method = TRANSMISSION_RADIO + signal.data = list( + "tag" = id, + "device" = "AM", + "pressure" = round(env_pressure), + "sigtype" = "status" + ) + radio_connection.post_signal(src, signal) + +/obj/machinery/meter/examine(mob/user) + . = ..() + + if(get_dist(user, src) > 3 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/observer/dead))) + . += "You are too far away to read it." + + else if(stat & (NOPOWER|BROKEN)) + . += "The display is off." + + else 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/Click() + + if(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/living/silicon/ai)) // ghosts can call ..() for examine + var/mob/living/L = usr + if(!L.get_active_hand() || !L.Adjacent(src)) + usr.examinate(src) + return 1 + + return ..() + +/obj/machinery/meter/attackby(var/obj/item/W, var/mob/user) + if(W.has_tool_quality(TOOL_WRENCH)) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if(do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear ratchet.") + new /obj/item/pipe_meter(get_turf(src)) + qdel(src) + return + + if(istype(W, /obj/item/device/multitool)) + for(var/obj/machinery/atmospherics/pipe/P in loc) + pipes_on_turf |= P + if(!pipes_on_turf.len) + return + target = pipes_on_turf[1] + pipes_on_turf.Remove(target) + pipes_on_turf.Add(target) + to_chat(user, "Pipe meter set to moniter \the [target].") + return + + return ..() + +// TURF METER - REPORTS A TILE'S AIR CONTENTS + +/obj/machinery/meter/turf/select_target() + return loc + +/obj/machinery/meter/turf/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + return diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index a07d0054c3..c3fe8eaccf 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -1,201 +1,201 @@ -/obj/machinery/portable_atmospherics - name = "atmoalter" - use_power = USE_POWER_OFF - layer = OBJ_LAYER // These are mobile, best not be under everything. - var/datum/gas_mixture/air_contents = new - - var/obj/machinery/atmospherics/portables_connector/connected_port - var/obj/item/weapon/tank/holding - - var/volume = 0 - var/destroyed = 0 - - var/start_pressure = ONE_ATMOSPHERE - var/maximum_pressure = 90 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/New() - ..() - //VOREStation Edit - Fix runtime - if(air_contents) - air_contents.volume = volume - air_contents.temperature = T20C - //VOREStation Edit End - - return 1 - -/obj/machinery/portable_atmospherics/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/portable_atmospherics/LateInitialize() - var/obj/machinery/atmospherics/portables_connector/port = locate() in loc - if(port) - connect(port) - update_icon() - -/obj/machinery/portable_atmospherics/Destroy() - QDEL_NULL(air_contents) - QDEL_NULL(holding) - return ..() - -/obj/machinery/portable_atmospherics/process() - if(!connected_port) //only react when pipe_network will ont it do it for you - //Allow for reactions - air_contents.react() - else - update_icon() - -/obj/machinery/portable_atmospherics/blob_act() - qdel(src) - -/obj/machinery/portable_atmospherics/proc/StandardAirMix() - return list( - "oxygen" = O2STANDARD * MolesForPressure(), - "nitrogen" = N2STANDARD * MolesForPressure()) - -/obj/machinery/portable_atmospherics/proc/MolesForPressure(var/target_pressure = start_pressure) - return (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature) - -/obj/machinery/portable_atmospherics/update_icon() - return null - -/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/portables_connector/new_port) - //Make sure not already connected to something else - if(connected_port || !new_port || new_port.connected_device) - return 0 - - //Make sure are close enough for a valid connection - if(new_port.loc != loc) - return 0 - - //Perform the connection - connected_port = new_port - connected_port.connected_device = src - connected_port.on = 1 //Activate port updates - - anchored = TRUE //Prevent movement - - //Actually enforce the air sharing - var/datum/pipe_network/network = connected_port.return_network(src) - if(network && !network.gases.Find(air_contents)) - network.gases += air_contents - network.update = 1 - - return 1 - -/obj/machinery/portable_atmospherics/proc/disconnect() - if(!connected_port) - return 0 - - var/datum/pipe_network/network = connected_port.return_network(src) - if(network) - network.gases -= air_contents - - anchored = FALSE - - connected_port.connected_device = null - connected_port = null - - return 1 - -/obj/machinery/portable_atmospherics/proc/update_connected_network() - if(!connected_port) - return - - var/datum/pipe_network/network = connected_port.return_network(src) - if (network) - network.update = 1 - -/obj/machinery/portable_atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) - if (src.holding) - return - var/obj/item/weapon/tank/T = W - user.drop_item() - T.loc = src - src.holding = T - update_icon() - return - - else if (W.has_tool_quality(TOOL_WRENCH)) - if(connected_port) - disconnect() - to_chat(user, "You disconnect \the [src] from the port.") - update_icon() - playsound(src, W.usesound, 50, 1) - return - else - var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc - if(possible_port) - if(connect(possible_port)) - to_chat(user, "You connect \the [src] to the port.") - update_icon() - playsound(src, W.usesound, 50, 1) - return - else - to_chat(user, "\The [src] failed to connect to the port.") - return - else - to_chat(user, "Nothing happens.") - return - return - - - -/obj/machinery/portable_atmospherics/powered - var/power_rating - var/power_losses - var/last_power_draw = 0 - var/obj/item/weapon/cell/cell - var/use_cell = TRUE - var/removeable_cell = TRUE - -/obj/machinery/portable_atmospherics/powered/powered() - if(use_power) //using area power - return ..() - if(cell && cell.charge) - return 1 - return 0 - -/obj/machinery/portable_atmospherics/powered/attackby(obj/item/I, mob/user) - if(use_cell && istype(I, /obj/item/weapon/cell)) - if(cell) - to_chat(user, "There is already a power cell installed.") - return - - var/obj/item/weapon/cell/C = I - - user.drop_item() - C.add_fingerprint(user) - cell = C - C.loc = src - user.visible_message("[user] opens the panel on [src] and inserts [C].", "You open the panel on [src] and insert [C].") - power_change() - return - - if(I.has_tool_quality(TOOL_SCREWDRIVER) && removeable_cell) - if(!cell) - to_chat(user, "There is no power cell installed.") - return - - user.visible_message("[user] opens the panel on [src] and removes [cell].", "You open the panel on [src] and remove [cell].") - playsound(src, I.usesound, 50, 1) - cell.add_fingerprint(user) - cell.loc = src.loc - cell = null - power_change() - return - ..() - -/obj/machinery/portable_atmospherics/proc/log_open() - if(air_contents.gas.len == 0) - return - - var/gases = "" - for(var/gas in air_contents.gas) - if(gases) - gases += ", [gas]" - else - gases = gas - log_admin("[usr] ([usr.ckey]) opened '[src.name]' containing [gases].") - message_admins("[usr] ([usr.ckey]) opened '[src.name]' containing [gases].") +/obj/machinery/portable_atmospherics + name = "atmoalter" + use_power = USE_POWER_OFF + layer = OBJ_LAYER // These are mobile, best not be under everything. + var/datum/gas_mixture/air_contents = new + + var/obj/machinery/atmospherics/portables_connector/connected_port + var/obj/item/weapon/tank/holding + + var/volume = 0 + var/destroyed = 0 + + var/start_pressure = ONE_ATMOSPHERE + var/maximum_pressure = 90 * ONE_ATMOSPHERE + +/obj/machinery/portable_atmospherics/New() + ..() + //VOREStation Edit - Fix runtime + if(air_contents) + air_contents.volume = volume + air_contents.temperature = T20C + //VOREStation Edit End + + return 1 + +/obj/machinery/portable_atmospherics/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/portable_atmospherics/LateInitialize() + var/obj/machinery/atmospherics/portables_connector/port = locate() in loc + if(port) + connect(port) + update_icon() + +/obj/machinery/portable_atmospherics/Destroy() + QDEL_NULL(air_contents) + QDEL_NULL(holding) + return ..() + +/obj/machinery/portable_atmospherics/process() + if(!connected_port) //only react when pipe_network will ont it do it for you + //Allow for reactions + air_contents.react() + else + update_icon() + +/obj/machinery/portable_atmospherics/blob_act() + qdel(src) + +/obj/machinery/portable_atmospherics/proc/StandardAirMix() + return list( + "oxygen" = O2STANDARD * MolesForPressure(), + "nitrogen" = N2STANDARD * MolesForPressure()) + +/obj/machinery/portable_atmospherics/proc/MolesForPressure(var/target_pressure = start_pressure) + return (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature) + +/obj/machinery/portable_atmospherics/update_icon() + return null + +/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/portables_connector/new_port) + //Make sure not already connected to something else + if(connected_port || !new_port || new_port.connected_device) + return 0 + + //Make sure are close enough for a valid connection + if(new_port.loc != loc) + return 0 + + //Perform the connection + connected_port = new_port + connected_port.connected_device = src + connected_port.on = 1 //Activate port updates + + anchored = TRUE //Prevent movement + + //Actually enforce the air sharing + var/datum/pipe_network/network = connected_port.return_network(src) + if(network && !network.gases.Find(air_contents)) + network.gases += air_contents + network.update = 1 + + return 1 + +/obj/machinery/portable_atmospherics/proc/disconnect() + if(!connected_port) + return 0 + + var/datum/pipe_network/network = connected_port.return_network(src) + if(network) + network.gases -= air_contents + + anchored = FALSE + + connected_port.connected_device = null + connected_port = null + + return 1 + +/obj/machinery/portable_atmospherics/proc/update_connected_network() + if(!connected_port) + return + + var/datum/pipe_network/network = connected_port.return_network(src) + if (network) + network.update = 1 + +/obj/machinery/portable_atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + update_icon() + return + + else if (W.has_tool_quality(TOOL_WRENCH)) + if(connected_port) + disconnect() + to_chat(user, "You disconnect \the [src] from the port.") + update_icon() + playsound(src, W.usesound, 50, 1) + return + else + var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc + if(possible_port) + if(connect(possible_port)) + to_chat(user, "You connect \the [src] to the port.") + update_icon() + playsound(src, W.usesound, 50, 1) + return + else + to_chat(user, "\The [src] failed to connect to the port.") + return + else + to_chat(user, "Nothing happens.") + return + return + + + +/obj/machinery/portable_atmospherics/powered + var/power_rating + var/power_losses + var/last_power_draw = 0 + var/obj/item/weapon/cell/cell + var/use_cell = TRUE + var/removeable_cell = TRUE + +/obj/machinery/portable_atmospherics/powered/powered() + if(use_power) //using area power + return ..() + if(cell && cell.charge) + return 1 + return 0 + +/obj/machinery/portable_atmospherics/powered/attackby(obj/item/I, mob/user) + if(use_cell && istype(I, /obj/item/weapon/cell)) + if(cell) + to_chat(user, "There is already a power cell installed.") + return + + var/obj/item/weapon/cell/C = I + + user.drop_item() + C.add_fingerprint(user) + cell = C + C.loc = src + user.visible_message("[user] opens the panel on [src] and inserts [C].", "You open the panel on [src] and insert [C].") + power_change() + return + + if(I.has_tool_quality(TOOL_SCREWDRIVER) && removeable_cell) + if(!cell) + to_chat(user, "There is no power cell installed.") + return + + user.visible_message("[user] opens the panel on [src] and removes [cell].", "You open the panel on [src] and remove [cell].") + playsound(src, I.usesound, 50, 1) + cell.add_fingerprint(user) + cell.loc = src.loc + cell = null + power_change() + return + ..() + +/obj/machinery/portable_atmospherics/proc/log_open() + if(air_contents.gas.len == 0) + return + + var/gases = "" + for(var/gas in air_contents.gas) + if(gases) + gases += ", [gas]" + else + gases = gas + log_admin("[usr] ([usr.ckey]) opened '[src.name]' containing [gases].") + message_admins("[usr] ([usr.ckey]) opened '[src.name]' containing [gases].") diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 1a502c675f..0f0d2b3fe8 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -1,191 +1,191 @@ -/obj/machinery/portable_atmospherics/powered/pump - name = "portable air pump" - - icon = 'icons/obj/atmos.dmi' - icon_state = "psiphon:0" - density = TRUE - w_class = ITEMSIZE_NORMAL - - var/on = 0 - var/direction_out = 0 //0 = siphoning, 1 = releasing - var/target_pressure = ONE_ATMOSPHERE - - var/pressuremin = 0 - var/pressuremax = 10 * ONE_ATMOSPHERE - - volume = 1000 - - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 - -/obj/machinery/portable_atmospherics/powered/pump/filled - start_pressure = 90 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/powered/pump/New() - ..() - cell = new/obj/item/weapon/cell/apc(src) - - var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) - -/obj/machinery/portable_atmospherics/powered/pump/update_icon() - cut_overlays() - - if(on && cell && cell.charge) - icon_state = "psiphon:1" - else - icon_state = "psiphon:0" - - if(holding) - add_overlay("siphon-open") - - if(connected_port) - add_overlay("siphon-connector") - - return - -/obj/machinery/portable_atmospherics/powered/pump/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(prob(50/severity)) - on = !on - - if(prob(100/severity)) - direction_out = !direction_out - - target_pressure = rand(0,1300) - update_icon() - - ..(severity) - -/obj/machinery/portable_atmospherics/powered/pump/process() - ..() - var/power_draw = -1 - - if(on && cell && cell.charge) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/pressure_delta - var/output_volume - var/air_temperature - if(direction_out) - pressure_delta = target_pressure - environment.return_pressure() - output_volume = environment.volume * environment.group_multiplier - air_temperature = environment.temperature? environment.temperature : air_contents.temperature - else - pressure_delta = environment.return_pressure() - target_pressure - output_volume = air_contents.volume * air_contents.group_multiplier - air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature - - var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - - if (pressure_delta > 0.01) - if (direction_out) - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - else - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - power_draw = max(power_draw, power_losses) - cell.use(power_draw * CELLRATE) - last_power_draw = power_draw - - update_connected_network() - - //ran out of charge - if (!cell.charge) - power_change() - update_icon() - - src.updateDialog() - -/obj/machinery/portable_atmospherics/powered/pump/return_air() - return air_contents - -/obj/machinery/portable_atmospherics/powered/pump/attack_ai(var/mob/user) - src.add_hiddenprint(user) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/pump/attack_ghost(var/mob/user) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/pump/attack_hand(var/mob/user) - tgui_interact(user) - -/obj/machinery/portable_atmospherics/powered/pump/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortablePump", name) - ui.open() - - -/obj/machinery/portable_atmospherics/powered/pump/tgui_state(mob/user) - return GLOB.tgui_physical_state - -/obj/machinery/portable_atmospherics/powered/pump/tgui_data(mob/user) - var/list/data[0] - data["on"] = on ? TRUE : FALSE - data["direction"] = !direction_out ? TRUE : FALSE - data["connected"] = connected_port ? TRUE : FALSE - data["pressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) - data["target_pressure"] = round(target_pressure ? target_pressure : 0) - data["default_pressure"] = round(initial(target_pressure)) - data["min_pressure"] = round(pressuremin) - data["max_pressure"] = round(pressuremax) - - data["powerDraw"] = round(last_power_draw) - data["cellCharge"] = cell ? cell.charge : 0 - data["cellMaxCharge"] = cell ? cell.maxcharge : 1 - - if(holding) - data["holding"] = list() - data["holding"]["name"] = holding.name - data["holding"]["pressure"] = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0) - else - data["holding"] = null - - return data - -/obj/machinery/portable_atmospherics/powered/pump/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - on = !on - . = 1 - if("direction") - direction_out = !direction_out - . = 1 - if("eject") - if(holding) - holding.loc = loc - holding = null - . = 1 - if("pressure") - var/pressure = params["pressure"] - if(pressure == "reset") - pressure = initial(target_pressure) - . = TRUE - else if(pressure == "min") - pressure = pressuremin - . = TRUE - else if(pressure == "max") - pressure = pressuremax - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - target_pressure = clamp(round(pressure), pressuremin, pressuremax) - - update_icon() +/obj/machinery/portable_atmospherics/powered/pump + name = "portable air pump" + + icon = 'icons/obj/atmos.dmi' + icon_state = "psiphon:0" + density = TRUE + w_class = ITEMSIZE_NORMAL + + var/on = 0 + var/direction_out = 0 //0 = siphoning, 1 = releasing + var/target_pressure = ONE_ATMOSPHERE + + var/pressuremin = 0 + var/pressuremax = 10 * ONE_ATMOSPHERE + + volume = 1000 + + power_rating = 7500 //7500 W ~ 10 HP + power_losses = 150 + +/obj/machinery/portable_atmospherics/powered/pump/filled + start_pressure = 90 * ONE_ATMOSPHERE + +/obj/machinery/portable_atmospherics/powered/pump/New() + ..() + cell = new/obj/item/weapon/cell/apc(src) + + var/list/air_mix = StandardAirMix() + src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) + +/obj/machinery/portable_atmospherics/powered/pump/update_icon() + cut_overlays() + + if(on && cell && cell.charge) + icon_state = "psiphon:1" + else + icon_state = "psiphon:0" + + if(holding) + add_overlay("siphon-open") + + if(connected_port) + add_overlay("siphon-connector") + + return + +/obj/machinery/portable_atmospherics/powered/pump/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(prob(50/severity)) + on = !on + + if(prob(100/severity)) + direction_out = !direction_out + + target_pressure = rand(0,1300) + update_icon() + + ..(severity) + +/obj/machinery/portable_atmospherics/powered/pump/process() + ..() + var/power_draw = -1 + + if(on && cell && cell.charge) + var/datum/gas_mixture/environment + if(holding) + environment = holding.air_contents + else + environment = loc.return_air() + + var/pressure_delta + var/output_volume + var/air_temperature + if(direction_out) + pressure_delta = target_pressure - environment.return_pressure() + output_volume = environment.volume * environment.group_multiplier + air_temperature = environment.temperature? environment.temperature : air_contents.temperature + else + pressure_delta = environment.return_pressure() - target_pressure + output_volume = air_contents.volume * air_contents.group_multiplier + air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature + + var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) + + if (pressure_delta > 0.01) + if (direction_out) + power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) + else + power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) + + if (power_draw < 0) + last_flow_rate = 0 + last_power_draw = 0 + else + power_draw = max(power_draw, power_losses) + cell.use(power_draw * CELLRATE) + last_power_draw = power_draw + + update_connected_network() + + //ran out of charge + if (!cell.charge) + power_change() + update_icon() + + src.updateDialog() + +/obj/machinery/portable_atmospherics/powered/pump/return_air() + return air_contents + +/obj/machinery/portable_atmospherics/powered/pump/attack_ai(var/mob/user) + src.add_hiddenprint(user) + return src.attack_hand(user) + +/obj/machinery/portable_atmospherics/powered/pump/attack_ghost(var/mob/user) + return src.attack_hand(user) + +/obj/machinery/portable_atmospherics/powered/pump/attack_hand(var/mob/user) + tgui_interact(user) + +/obj/machinery/portable_atmospherics/powered/pump/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortablePump", name) + ui.open() + + +/obj/machinery/portable_atmospherics/powered/pump/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/obj/machinery/portable_atmospherics/powered/pump/tgui_data(mob/user) + var/list/data[0] + data["on"] = on ? TRUE : FALSE + data["direction"] = !direction_out ? TRUE : FALSE + data["connected"] = connected_port ? TRUE : FALSE + data["pressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) + data["target_pressure"] = round(target_pressure ? target_pressure : 0) + data["default_pressure"] = round(initial(target_pressure)) + data["min_pressure"] = round(pressuremin) + data["max_pressure"] = round(pressuremax) + + data["powerDraw"] = round(last_power_draw) + data["cellCharge"] = cell ? cell.charge : 0 + data["cellMaxCharge"] = cell ? cell.maxcharge : 1 + + if(holding) + data["holding"] = list() + data["holding"]["name"] = holding.name + data["holding"]["pressure"] = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0) + else + data["holding"] = null + + return data + +/obj/machinery/portable_atmospherics/powered/pump/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("power") + on = !on + . = 1 + if("direction") + direction_out = !direction_out + . = 1 + if("eject") + if(holding) + holding.loc = loc + holding = null + . = 1 + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + pressure = initial(target_pressure) + . = TRUE + else if(pressure == "min") + pressure = pressuremin + . = TRUE + else if(pressure == "max") + pressure = pressuremax + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + target_pressure = clamp(round(pressure), pressuremin, pressuremax) + + update_icon() diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index f27b8983e3..7b2d60e7b5 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -1,257 +1,257 @@ -/obj/machinery/portable_atmospherics/powered/scrubber - name = "Portable Air Scrubber" - desc = "Similar to room scrubbers, this device contains an internal tank to scrub gasses from the atmosphere." - - icon = 'icons/obj/atmos.dmi' - icon_state = "pscrubber:0" - density = TRUE - w_class = ITEMSIZE_NORMAL - - var/on = 0 - var/volume_rate = 800 - - volume = 750 - - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 - - var/minrate = 0 - var/maxrate = 10 * ONE_ATMOSPHERE - - var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "nitrous_oxide", "volatile_fuel") - -/obj/machinery/portable_atmospherics/powered/scrubber/New() - ..() - cell = new/obj/item/weapon/cell/apc(src) - -/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(prob(50/severity)) - on = !on - update_icon() - - ..(severity) - -/obj/machinery/portable_atmospherics/powered/scrubber/update_icon() - cut_overlays() - - if(on && cell && cell.charge) - icon_state = "pscrubber:1" - else - icon_state = "pscrubber:0" - - if(holding) - add_overlay("scrubber-open") - - if(connected_port) - add_overlay("scrubber-connector") - - return - -/obj/machinery/portable_atmospherics/powered/scrubber/process() - ..() - - var/power_draw = -1 - - if(on && cell && cell.charge) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - power_draw = max(power_draw, power_losses) - cell.use(power_draw * CELLRATE) - last_power_draw = power_draw - - update_connected_network() - - //ran out of charge - if (!cell.charge) - power_change() - update_icon() - - //src.update_icon() - src.updateDialog() - -/obj/machinery/portable_atmospherics/powered/scrubber/return_air() - return air_contents - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_ai(var/mob/user) - src.add_hiddenprint(user) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_ghost(var/mob/user) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_hand(var/mob/user) - tgui_interact(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableScrubber", name) - ui.open() - -/obj/machinery/portable_atmospherics/powered/scrubber/tgui_data(mob/user) - var/list/data = list() - data["on"] = on ? 1 : 0 - data["connected"] = connected_port ? 1 : 0 - data["pressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) - - data["rate"] = round(volume_rate) - data["minrate"] = round(minrate) - data["maxrate"] = round(maxrate) - data["powerDraw"] = round(last_power_draw) - data["cellCharge"] = cell ? cell.charge : 0 - data["cellMaxCharge"] = cell ? cell.maxcharge : 1 - - if(holding) - data["holding"] = list() - data["holding"]["name"] = holding.name - data["holding"]["pressure"] = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0) - else - data["holding"] = null - - return data - -/obj/machinery/portable_atmospherics/powered/scrubber/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - on = !on - . = TRUE - if("eject") - if(holding) - holding.loc = loc - holding = null - . = TRUE - if("volume_adj") - volume_rate = CLAMP(text2num(params["vol"]), minrate, maxrate) - . = TRUE - - update_icon() - - -//Huge scrubber -/obj/machinery/portable_atmospherics/powered/scrubber/huge - name = "Huge Air Scrubber" - desc = "A larger variation of the portable scrubber, for industrial scrubbing of air. Must be turned on from a remote terminal." - icon = 'icons/obj/atmos_vr.dmi' //VOREStation Edit - New Sprite - icon_state = "scrubber:0" - anchored = TRUE - volume = 500000 - volume_rate = 7000 - - use_power = USE_POWER_IDLE - idle_power_usage = 50 //VOREStation Edit //internal circuitry, friction losses and stuff - active_power_usage = 1000 //VOREStation Edit // Blowers running - power_rating = 100000 //VOREStation Add //100 kW ~ 135 HP - - var/global/gid = 1 - var/id = 0 - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/New() - ..() - cell = null - - id = gid - gid++ - - name = "[name] (ID [id])" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(var/mob/user as mob) - to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() - src.overlays = 0 - - if(on && !(stat & (NOPOWER|BROKEN))) - icon_state = "scrubber:1" - else - icon_state = "scrubber:0" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/power_change() - var/old_stat = stat - ..() - if (old_stat != stat) - update_icon() - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/process() - if(!anchored || (stat & (NOPOWER|BROKEN))) - on = 0 - last_flow_rate = 0 - last_power_draw = 0 - update_icon() - var/new_use_power = 1 + on - if(new_use_power != use_power) - update_use_power(new_use_power) - if(!on) - return - - var/power_draw = -1 - - var/datum/gas_mixture/environment = loc.return_air() - - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, active_power_usage) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - use_power(power_draw) - update_connected_network() - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(I.has_tool_quality(TOOL_WRENCH)) - if(on) - to_chat(user, "Turn \the [src] off first!") - return - - anchored = !anchored - playsound(src, I.usesound, 50, 1) - to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") - - return - - //doesn't use power cells - if(istype(I, /obj/item/weapon/cell)) - return - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - return - - //doesn't hold tanks - if(istype(I, /obj/item/weapon/tank)) - return - - ..() - - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - name = "Stationary Air Scrubber" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/Initialize() - . = ..() - desc += "This one seems to be tightly secured with large bolts." - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(I.has_tool_quality(TOOL_WRENCH)) - to_chat(user, "The bolts are too tight for you to unscrew!") - return - - ..() +/obj/machinery/portable_atmospherics/powered/scrubber + name = "Portable Air Scrubber" + desc = "Similar to room scrubbers, this device contains an internal tank to scrub gasses from the atmosphere." + + icon = 'icons/obj/atmos.dmi' + icon_state = "pscrubber:0" + density = TRUE + w_class = ITEMSIZE_NORMAL + + var/on = 0 + var/volume_rate = 800 + + volume = 750 + + power_rating = 7500 //7500 W ~ 10 HP + power_losses = 150 + + var/minrate = 0 + var/maxrate = 10 * ONE_ATMOSPHERE + + var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "nitrous_oxide", "volatile_fuel") + +/obj/machinery/portable_atmospherics/powered/scrubber/New() + ..() + cell = new/obj/item/weapon/cell/apc(src) + +/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(prob(50/severity)) + on = !on + update_icon() + + ..(severity) + +/obj/machinery/portable_atmospherics/powered/scrubber/update_icon() + cut_overlays() + + if(on && cell && cell.charge) + icon_state = "pscrubber:1" + else + icon_state = "pscrubber:0" + + if(holding) + add_overlay("scrubber-open") + + if(connected_port) + add_overlay("scrubber-connector") + + return + +/obj/machinery/portable_atmospherics/powered/scrubber/process() + ..() + + var/power_draw = -1 + + if(on && cell && cell.charge) + var/datum/gas_mixture/environment + if(holding) + environment = holding.air_contents + else + environment = loc.return_air() + + var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles + + power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) + + if (power_draw < 0) + last_flow_rate = 0 + last_power_draw = 0 + else + power_draw = max(power_draw, power_losses) + cell.use(power_draw * CELLRATE) + last_power_draw = power_draw + + update_connected_network() + + //ran out of charge + if (!cell.charge) + power_change() + update_icon() + + //src.update_icon() + src.updateDialog() + +/obj/machinery/portable_atmospherics/powered/scrubber/return_air() + return air_contents + +/obj/machinery/portable_atmospherics/powered/scrubber/attack_ai(var/mob/user) + src.add_hiddenprint(user) + return src.attack_hand(user) + +/obj/machinery/portable_atmospherics/powered/scrubber/attack_ghost(var/mob/user) + return src.attack_hand(user) + +/obj/machinery/portable_atmospherics/powered/scrubber/attack_hand(var/mob/user) + tgui_interact(user) + +/obj/machinery/portable_atmospherics/powered/scrubber/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortableScrubber", name) + ui.open() + +/obj/machinery/portable_atmospherics/powered/scrubber/tgui_data(mob/user) + var/list/data = list() + data["on"] = on ? 1 : 0 + data["connected"] = connected_port ? 1 : 0 + data["pressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) + + data["rate"] = round(volume_rate) + data["minrate"] = round(minrate) + data["maxrate"] = round(maxrate) + data["powerDraw"] = round(last_power_draw) + data["cellCharge"] = cell ? cell.charge : 0 + data["cellMaxCharge"] = cell ? cell.maxcharge : 1 + + if(holding) + data["holding"] = list() + data["holding"]["name"] = holding.name + data["holding"]["pressure"] = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0) + else + data["holding"] = null + + return data + +/obj/machinery/portable_atmospherics/powered/scrubber/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("power") + on = !on + . = TRUE + if("eject") + if(holding) + holding.loc = loc + holding = null + . = TRUE + if("volume_adj") + volume_rate = CLAMP(text2num(params["vol"]), minrate, maxrate) + . = TRUE + + update_icon() + + +//Huge scrubber +/obj/machinery/portable_atmospherics/powered/scrubber/huge + name = "Huge Air Scrubber" + desc = "A larger variation of the portable scrubber, for industrial scrubbing of air. Must be turned on from a remote terminal." + icon = 'icons/obj/atmos_vr.dmi' //VOREStation Edit - New Sprite + icon_state = "scrubber:0" + anchored = TRUE + volume = 500000 + volume_rate = 7000 + + use_power = USE_POWER_IDLE + idle_power_usage = 50 //VOREStation Edit //internal circuitry, friction losses and stuff + active_power_usage = 1000 //VOREStation Edit // Blowers running + power_rating = 100000 //VOREStation Add //100 kW ~ 135 HP + + var/global/gid = 1 + var/id = 0 + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/New() + ..() + cell = null + + id = gid + gid++ + + name = "[name] (ID [id])" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(var/mob/user as mob) + to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() + src.overlays = 0 + + if(on && !(stat & (NOPOWER|BROKEN))) + icon_state = "scrubber:1" + else + icon_state = "scrubber:0" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/power_change() + var/old_stat = stat + ..() + if (old_stat != stat) + update_icon() + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/process() + if(!anchored || (stat & (NOPOWER|BROKEN))) + on = 0 + last_flow_rate = 0 + last_power_draw = 0 + update_icon() + var/new_use_power = 1 + on + if(new_use_power != use_power) + update_use_power(new_use_power) + if(!on) + return + + var/power_draw = -1 + + var/datum/gas_mixture/environment = loc.return_air() + + var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles + + power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, active_power_usage) + + if (power_draw < 0) + last_flow_rate = 0 + last_power_draw = 0 + else + use_power(power_draw) + update_connected_network() + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.has_tool_quality(TOOL_WRENCH)) + if(on) + to_chat(user, "Turn \the [src] off first!") + return + + anchored = !anchored + playsound(src, I.usesound, 50, 1) + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + + return + + //doesn't use power cells + if(istype(I, /obj/item/weapon/cell)) + return + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + return + + //doesn't hold tanks + if(istype(I, /obj/item/weapon/tank)) + return + + ..() + + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary + name = "Stationary Air Scrubber" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/Initialize() + . = ..() + desc += "This one seems to be tightly secured with large bolts." + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.has_tool_quality(TOOL_WRENCH)) + to_chat(user, "The bolts are too tight for you to unscrew!") + return + + ..() diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm index d4f2ccfc02..453b1ec5e0 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/game/machinery/atmoalter/zvent.dm @@ -1,29 +1,29 @@ -/obj/machinery/zvent - name = "Interfloor Air Transfer System" - - icon = 'icons/obj/pipes.dmi' - icon_state = "vent-db" - density = FALSE - anchored=TRUE - - var/on = 0 - var/volume_rate = 800 - -/obj/machinery/zvent/process() - - //all this object does, is make its turf share air with the ones above and below it, if they have a vent too. - if (istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it - for (var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented - var/turf/simulated/zturf_conn = locate(x,y,z+new_z) - if (istype(zturf_conn)) - var/obj/machinery/zvent/zvent_conn= locate(/obj/machinery/zvent) in zturf_conn - if (istype(zvent_conn)) - //both floors have simulated turfs, share() - var/turf/simulated/myturf = loc - var/datum/gas_mixture/conn_air = zturf_conn.zone.air //TODO: pop culture reference - var/datum/gas_mixture/my_air = myturf.air - if (istype(conn_air) && istype(my_air)) -// if (!my_air.compare(conn_air)) -// myturf.reset_delay() -// zturf_conn.reset_delay() - my_air.share(conn_air) +/obj/machinery/zvent + name = "Interfloor Air Transfer System" + + icon = 'icons/obj/pipes.dmi' + icon_state = "vent-db" + density = FALSE + anchored=TRUE + + var/on = 0 + var/volume_rate = 800 + +/obj/machinery/zvent/process() + + //all this object does, is make its turf share air with the ones above and below it, if they have a vent too. + if (istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it + for (var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented + var/turf/simulated/zturf_conn = locate(x,y,z+new_z) + if (istype(zturf_conn)) + var/obj/machinery/zvent/zvent_conn= locate(/obj/machinery/zvent) in zturf_conn + if (istype(zvent_conn)) + //both floors have simulated turfs, share() + var/turf/simulated/myturf = loc + var/datum/gas_mixture/conn_air = zturf_conn.zone.air //TODO: pop culture reference + var/datum/gas_mixture/my_air = myturf.air + if (istype(conn_air) && istype(my_air)) +// if (!my_air.compare(conn_air)) +// myturf.reset_delay() +// zturf_conn.reset_delay() + my_air.share(conn_air) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index e14d919569..c484a74f7d 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -1,285 +1,285 @@ -/obj/machinery/autolathe - name = "autolathe" - desc = "It produces items using metal and glass." - icon_state = "autolathe" - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 10 - active_power_usage = 2000 - clicksound = "keyboard" - clickvol = 30 - - circuit = /obj/item/weapon/circuitboard/autolathe - - var/static/datum/category_collection/autolathe/autolathe_recipes - - var/hacked = 0 - var/disabled = 0 - var/shocked = 0 - var/busy = 0 - - var/mat_efficiency = 1 - var/build_time = 50 - - var/datum/wires/autolathe/wires = null - - var/mb_rating = 0 - var/man_rating = 0 - - var/filtertext - -/obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container, subtypesof(/datum/material), 0, MATCONTAINER_EXAMINE, _after_insert = CALLBACK(src, PROC_REF(AfterMaterialInsert))) - . = ..() - if(!autolathe_recipes) - autolathe_recipes = new() - wires = new(src) - - default_apply_parts() - RefreshParts() - -/obj/machinery/autolathe/Destroy() - qdel(wires) - wires = null - return ..() - -/obj/machinery/autolathe/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Autolathe", name) - ui.open() - -/obj/machinery/autolathe/tgui_status(mob/user) - if(disabled) - return STATUS_CLOSE - return ..() - -/obj/machinery/autolathe/tgui_static_data(mob/user) - var/list/data = ..() - - var/list/categories = list() - var/list/recipes = list() - for(var/datum/category_group/autolathe/A in autolathe_recipes.categories) - categories += A.name - for(var/datum/category_item/autolathe/M in A.items) - if(M.hidden && !hacked) - continue - if(M.man_rating > man_rating) - continue - recipes.Add(list(list( - "category" = A.name, - "name" = M.name, - "ref" = REF(M), - "requirements" = M.resources, - "hidden" = M.hidden, - "coeff_applies" = !M.no_scale, - "is_stack" = M.is_stack, - ))) - data["recipes"] = recipes - data["categories"] = categories - - return data - -/obj/machinery/autolathe/ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/spritesheet/sheetmaterials) - ) - -/obj/machinery/autolathe/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - data["busy"] = busy - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - data["materials"] = materials.tgui_data() - data["mat_efficiency"] = mat_efficiency - return data - -/obj/machinery/autolathe/interact(mob/user) - if(panel_open) - return wires.Interact(user) - - if(disabled) - to_chat(user, "\The [src] is disabled!") - return - - if(shocked) - shock(user, 50) - - tgui_interact(user) - -/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return - - if(default_deconstruction_screwdriver(user, O)) - interact(user) - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - - if(stat) - return - - if(panel_open) - //Don't eat multitools or wirecutters used on an open lathe. - if(O.has_tool_quality(TOOL_MULTITOOL) || O.has_tool_quality(TOOL_WIRECUTTER)) - wires.Interact(user) - return - - if(is_robot_module(O)) - return 0 - - if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/s357) || istype(O,/obj/item/ammo_magazine/s38) || istype (O,/obj/item/ammo_magazine/s44)/* VOREstation Edit*/) // Prevents ammo recycling exploit with speedloaders. - to_chat(user, "\The [O] is too hazardous to recycle with the autolathe!") - return - - return ..() - -/obj/machinery/autolathe/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/obj/machinery/autolathe/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - usr.set_machine(src) - add_fingerprint(usr) - - if(busy) - to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.") - return - switch(action) - if("make") - var/datum/category_item/autolathe/making = locate(params["make"]) - if(!istype(making)) - return - if(making.hidden && !hacked) - return - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - var/list/materials_used = list() - - var/multiplier = (params["multiplier"] || 1) - - if(making.is_stack) - var/max_sheets - for(var/material in making.resources) - var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient - var/sheets = round(materials.get_material_amount(material) / round(making.resources[material] * coeff)) - if(isnull(max_sheets) || max_sheets > sheets) - max_sheets = sheets - if(!isnull(materials.get_material_amount(material)) && materials.get_material_amount(material) < round(making.resources[material] * coeff)) - max_sheets = 0 - //Build list of multipliers for sheets. - multiplier = tgui_input_number(usr, "How many do you want to print? (0-[max_sheets])", null, null, max_sheets, 0) - if(!multiplier || multiplier <= 0 || (multiplier != round(multiplier)) || multiplier > max_sheets || tgui_status(usr, state) != STATUS_INTERACTIVE) - return FALSE - - //Check if we still have the materials. - var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient - - for(var/datum/material/used_material as anything in making.resources) - var/amount_needed = making.resources[used_material] * coeff * multiplier - materials_used[used_material] = amount_needed - - if(LAZYLEN(materials_used)) - if(!materials.has_materials(materials_used)) - return - - materials.use_materials(materials_used) - - busy = making.name - update_use_power(USE_POWER_ACTIVE) - - update_icon() // So lid closes - - sleep(build_time) - - busy = 0 - update_use_power(USE_POWER_IDLE) - update_icon() // So lid opens - - //Sanity check. - if(!making || !src) - return - - //Create the desired item. - var/obj/item/I = new making.path(src.loc) - - if(LAZYLEN(I.matter)) // Sadly we must obey the laws of equivalent exchange. - I.matter.Cut() - else - I.matter = list() - - for(var/material in making.resources) // Handle the datum's autoscaling for waste, so we're properly wasting material, but not so much if we have efficiency. - I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) - - flick("[initial(icon_state)]_finish", src) - if(multiplier > 1) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - S.set_amount(multiplier) - else - for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack. - I = new making.path(src.loc) - // We've already deducted the cost of multiple items. Process the matter the same. - if(LAZYLEN(I.matter)) - I.matter.Cut() - - else - I.matter = list() - - for(var/material in making.resources) - I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) - return TRUE - return FALSE - -/obj/machinery/autolathe/update_icon() - cut_overlays() - - icon_state = initial(icon_state) - - if(panel_open) - add_overlay("[icon_state]_panel") - if(stat & NOPOWER) - return - if(busy) - icon_state = "[icon_state]_work" - -//Updates overall lathe storage size. -/obj/machinery/autolathe/RefreshParts() - ..() - mb_rating = 0 - man_rating = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts) - mb_rating += MB.rating - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - man_rating += M.rating - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.max_amount = mb_rating * 75000 - - build_time = 50 / man_rating - mat_efficiency = 1.1 - man_rating * 0.1// Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.6. Maximum rating of parts is 5 - update_tgui_static_data(usr) - -/obj/machinery/autolathe/dismantle() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() - return ..() - -/obj/machinery/autolathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted) - flick("autolathe_loading", src)//plays metal insertion animation - // use_power(min(1000, amount_inserted / 100)) - SStgui.update_uis(src) - -/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 [mat_efficiency*100]%.
    " +/obj/machinery/autolathe + name = "autolathe" + desc = "It produces items using metal and glass." + icon_state = "autolathe" + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 10 + active_power_usage = 2000 + clicksound = "keyboard" + clickvol = 30 + + circuit = /obj/item/weapon/circuitboard/autolathe + + var/static/datum/category_collection/autolathe/autolathe_recipes + + var/hacked = 0 + var/disabled = 0 + var/shocked = 0 + var/busy = 0 + + var/mat_efficiency = 1 + var/build_time = 50 + + var/datum/wires/autolathe/wires = null + + var/mb_rating = 0 + var/man_rating = 0 + + var/filtertext + +/obj/machinery/autolathe/Initialize() + AddComponent(/datum/component/material_container, subtypesof(/datum/material), 0, MATCONTAINER_EXAMINE, _after_insert = CALLBACK(src, PROC_REF(AfterMaterialInsert))) + . = ..() + if(!autolathe_recipes) + autolathe_recipes = new() + wires = new(src) + + default_apply_parts() + RefreshParts() + +/obj/machinery/autolathe/Destroy() + qdel(wires) + wires = null + return ..() + +/obj/machinery/autolathe/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Autolathe", name) + ui.open() + +/obj/machinery/autolathe/tgui_status(mob/user) + if(disabled) + return STATUS_CLOSE + return ..() + +/obj/machinery/autolathe/tgui_static_data(mob/user) + var/list/data = ..() + + var/list/categories = list() + var/list/recipes = list() + for(var/datum/category_group/autolathe/A in autolathe_recipes.categories) + categories += A.name + for(var/datum/category_item/autolathe/M in A.items) + if(M.hidden && !hacked) + continue + if(M.man_rating > man_rating) + continue + recipes.Add(list(list( + "category" = A.name, + "name" = M.name, + "ref" = REF(M), + "requirements" = M.resources, + "hidden" = M.hidden, + "coeff_applies" = !M.no_scale, + "is_stack" = M.is_stack, + ))) + data["recipes"] = recipes + data["categories"] = categories + + return data + +/obj/machinery/autolathe/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/sheetmaterials) + ) + +/obj/machinery/autolathe/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["busy"] = busy + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + data["materials"] = materials.tgui_data() + data["mat_efficiency"] = mat_efficiency + return data + +/obj/machinery/autolathe/interact(mob/user) + if(panel_open) + return wires.Interact(user) + + if(disabled) + to_chat(user, "\The [src] is disabled!") + return + + if(shocked) + shock(user, 50) + + tgui_interact(user) + +/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(busy) + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") + return + + if(default_deconstruction_screwdriver(user, O)) + interact(user) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + + if(stat) + return + + if(panel_open) + //Don't eat multitools or wirecutters used on an open lathe. + if(O.has_tool_quality(TOOL_MULTITOOL) || O.has_tool_quality(TOOL_WIRECUTTER)) + wires.Interact(user) + return + + if(is_robot_module(O)) + return 0 + + if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/s357) || istype(O,/obj/item/ammo_magazine/s38) || istype (O,/obj/item/ammo_magazine/s44)/* VOREstation Edit*/) // Prevents ammo recycling exploit with speedloaders. + to_chat(user, "\The [O] is too hazardous to recycle with the autolathe!") + return + + return ..() + +/obj/machinery/autolathe/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/obj/machinery/autolathe/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + usr.set_machine(src) + add_fingerprint(usr) + + if(busy) + to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.") + return + switch(action) + if("make") + var/datum/category_item/autolathe/making = locate(params["make"]) + if(!istype(making)) + return + if(making.hidden && !hacked) + return + + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + + var/list/materials_used = list() + + var/multiplier = (params["multiplier"] || 1) + + if(making.is_stack) + var/max_sheets + for(var/material in making.resources) + var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient + var/sheets = round(materials.get_material_amount(material) / round(making.resources[material] * coeff)) + if(isnull(max_sheets) || max_sheets > sheets) + max_sheets = sheets + if(!isnull(materials.get_material_amount(material)) && materials.get_material_amount(material) < round(making.resources[material] * coeff)) + max_sheets = 0 + //Build list of multipliers for sheets. + multiplier = tgui_input_number(usr, "How many do you want to print? (0-[max_sheets])", null, null, max_sheets, 0) + if(!multiplier || multiplier <= 0 || (multiplier != round(multiplier)) || multiplier > max_sheets || tgui_status(usr, state) != STATUS_INTERACTIVE) + return FALSE + + //Check if we still have the materials. + var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient + + for(var/datum/material/used_material as anything in making.resources) + var/amount_needed = making.resources[used_material] * coeff * multiplier + materials_used[used_material] = amount_needed + + if(LAZYLEN(materials_used)) + if(!materials.has_materials(materials_used)) + return + + materials.use_materials(materials_used) + + busy = making.name + update_use_power(USE_POWER_ACTIVE) + + update_icon() // So lid closes + + sleep(build_time) + + busy = 0 + update_use_power(USE_POWER_IDLE) + update_icon() // So lid opens + + //Sanity check. + if(!making || !src) + return + + //Create the desired item. + var/obj/item/I = new making.path(src.loc) + + if(LAZYLEN(I.matter)) // Sadly we must obey the laws of equivalent exchange. + I.matter.Cut() + else + I.matter = list() + + for(var/material in making.resources) // Handle the datum's autoscaling for waste, so we're properly wasting material, but not so much if we have efficiency. + I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) + + flick("[initial(icon_state)]_finish", src) + if(multiplier > 1) + if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + S.set_amount(multiplier) + else + for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack. + I = new making.path(src.loc) + // We've already deducted the cost of multiple items. Process the matter the same. + if(LAZYLEN(I.matter)) + I.matter.Cut() + + else + I.matter = list() + + for(var/material in making.resources) + I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) + return TRUE + return FALSE + +/obj/machinery/autolathe/update_icon() + cut_overlays() + + icon_state = initial(icon_state) + + if(panel_open) + add_overlay("[icon_state]_panel") + if(stat & NOPOWER) + return + if(busy) + icon_state = "[icon_state]_work" + +//Updates overall lathe storage size. +/obj/machinery/autolathe/RefreshParts() + ..() + mb_rating = 0 + man_rating = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts) + mb_rating += MB.rating + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + man_rating += M.rating + + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + materials.max_amount = mb_rating * 75000 + + build_time = 50 / man_rating + mat_efficiency = 1.1 - man_rating * 0.1// Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.6. Maximum rating of parts is 5 + update_tgui_static_data(usr) + +/obj/machinery/autolathe/dismantle() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + materials.retrieve_all() + return ..() + +/obj/machinery/autolathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted) + flick("autolathe_loading", src)//plays metal insertion animation + // use_power(min(1000, amount_inserted / 100)) + SStgui.update_uis(src) + +/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 [mat_efficiency*100]%.
    " diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index e0fa69147b..b3e03da0eb 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -1,18 +1,18 @@ -/obj/machinery/button - name = "button" - icon = 'icons/obj/objects.dmi' - icon_state = "launcherbtt" - layer = ABOVE_WINDOW_LAYER - desc = "A remote control switch for something." - var/id = null - var/active = 0 - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 4 - -/obj/machinery/button/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob) - return attack_hand(user) +/obj/machinery/button + name = "button" + icon = 'icons/obj/objects.dmi' + icon_state = "launcherbtt" + layer = ABOVE_WINDOW_LAYER + desc = "A remote control switch for something." + var/id = null + var/active = 0 + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 4 + +/obj/machinery/button/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob) + return attack_hand(user) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 796415d0f3..b001611c19 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -1,482 +1,482 @@ -/obj/machinery/camera - name = "security camera" - desc = "It's used to monitor rooms." - icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons - icon_state = "camera" - use_power = USE_POWER_ACTIVE - idle_power_usage = 5 - active_power_usage = 10 - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - - var/list/network = list(NETWORK_DEFAULT) - var/c_tag = null - var/c_tag_order = 999 - var/status = 1 - anchored = TRUE - var/invuln = 0 - var/bugged = 0 - var/obj/item/weapon/camera_assembly/assembly = null - - var/toughness = 5 //sorta fragile - - // WIRES - var/datum/wires/camera/wires = null // Wires datum - - //OTHER - - var/view_range = 7 - var/short_range = 2 - - var/light_disabled = 0 - var/in_use_lights = 0 // TO BE IMPLEMENTED - LIES. - var/alarm_on = 0 - var/busy = 0 - - var/on_open_network = 0 - var/always_visible = FALSE //Visable from any map, good for entertainment network cameras - - var/affected_by_emp_until = 0 - - var/client_huds = list() - - var/list/camera_computers_using_this = list() - -/obj/machinery/camera/New() - wires = new(src) - assembly = new(src) - assembly.state = 4 - client_huds |= global_hud.whitense - - /* // Use this to look for cameras that have the same c_tag. - for(var/obj/machinery/camera/C in cameranet.cameras) - var/list/tempnetwork = C.network&src.network - if(C != src && C.c_tag == src.c_tag && tempnetwork.len) - to_world_log("[src.c_tag] [src.x] [src.y] [src.z] conflicts with [C.c_tag] [C.x] [C.y] [C.z]") - */ - if(!src.network || src.network.len < 1) - if(loc) - error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z] has errored. [src.network?"Empty network list":"Null network list"]") - else - error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]") - ASSERT(src.network) - ASSERT(src.network.len > 0) - // VOREStation Edit Start - Make mapping with cameras easier - if(!c_tag) - var/area/A = get_area(src) - c_tag = "[A ? A.name : "Unknown"] #[rand(111,999)]" - ..() - // VOREStation Edit End - -/obj/machinery/camera/Destroy() - if(isMotion()) - unsense_proximity(callback = /atom/proc/HasProximity) - deactivate(null, 0) //kick anyone viewing out - if(assembly) - qdel(assembly) - assembly = null - qdel(wires) - wires = null - return ..() - -/obj/machinery/camera/process() - if((stat & EMPED) && world.time >= affected_by_emp_until) - stat &= ~EMPED - cancelCameraAlarm() - update_icon() - update_coverage() - return internal_process() - -/obj/machinery/camera/proc/internal_process() - return - -/obj/machinery/camera/emp_act(severity) - if(!isEmpProof() && prob(100/severity)) - if(!affected_by_emp_until || (world.time > affected_by_emp_until)) - affected_by_emp_until = max(affected_by_emp_until, world.time + (90 SECONDS / severity)) - stat |= EMPED - set_light(0) - triggerCameraAlarm() - update_icon() - update_coverage() - START_PROCESSING(SSobj, src) - -/obj/machinery/camera/bullet_act(var/obj/item/projectile/P) - take_damage(P.get_structure_damage()) - -/obj/machinery/camera/ex_act(severity) - if(src.invuln) - return - - //camera dies if an explosion touches it! - if(severity <= 2 || prob(50)) - destroy() - - ..() //and give it the regular chance of being deleted outright - -/obj/machinery/camera/blob_act() - if((stat & BROKEN) || invuln) - return - destroy() - -/obj/machinery/camera/hitby(AM as mob|obj) - ..() - if (istype(AM, /obj)) - var/obj/O = AM - if (O.throwforce >= src.toughness) - visible_message("[src] was hit by [O].") - take_damage(O.throwforce) - -/obj/machinery/camera/proc/setViewRange(var/num = 7) - src.view_range = num - cameranet.updateVisibility(src, 0) - -/obj/machinery/camera/attack_hand(mob/living/carbon/human/user as mob) - if(!istype(user)) - return - - if(user.species.can_shred(user)) - set_status(0) - user.do_attack_animation(src) - user.setClickCooldown(user.get_attack_speed()) - visible_message("\The [user] slashes at [src]!") - playsound(src, 'sound/weapons/slash.ogg', 100, 1) - add_hiddenprint(user) - destroy() - -/obj/machinery/camera/attack_generic(mob/user as mob) - if(isanimal(user)) - var/mob/living/simple_mob/S = user - set_status(0) - S.do_attack_animation(src) - S.setClickCooldown(user.get_attack_speed()) - visible_message("\The [user] [pick(S.attacktext)] \the [src]!") - playsound(src, S.attack_sound, 100, 1) - add_hiddenprint(user) - destroy() - ..() - -/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) - update_coverage() - // DECONSTRUCTION - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - //to_chat(user, "You start to [panel_open ? "close" : "open"] the camera's panel.") - //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown - panel_open = !panel_open - user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!", - "You screw the camera's panel [panel_open ? "open" : "closed"].") - playsound(src, W.usesound, 50, 1) - - else if((W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/multitool)) && panel_open) - interact(user) - - else if(W.has_tool_quality(TOOL_WELDER) && (wires.CanDeconstruct() || (stat & BROKEN))) - if(weld(W, user)) - if(assembly) - assembly.loc = src.loc - assembly.anchored = TRUE - assembly.camera_name = c_tag - assembly.camera_network = english_list(network, NETWORK_DEFAULT, ",", ",") - assembly.update_icon() - assembly.dir = src.dir - if(stat & BROKEN) - assembly.state = 2 - to_chat(user, "You repaired \the [src] frame.") - else - assembly.state = 1 - to_chat(user, "You cut \the [src] free from the wall.") - new /obj/item/stack/cable_coil(src.loc, length=2) - assembly = null //so qdel doesn't eat it. - qdel(src) - - // OTHER - else if (can_use() && (istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) - var/mob/living/U = user - var/obj/item/weapon/paper/X = null - var/obj/item/device/pda/P = null - - var/itemname = "" - var/info = "" - if(istype(W, /obj/item/weapon/paper)) - X = W - itemname = X.name - info = X.info - else - P = W - itemname = P.name - var/datum/data/pda/app/notekeeper/N = P.find_program(/datum/data/pda/app/notekeeper) - if(N) - info = N.notehtml - to_chat(U, "You hold \a [itemname] up to the camera ...") - for(var/mob/living/silicon/ai/O in living_mob_list) - if(!O.client) - continue - if(U.name == "Unknown") - to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") - else - to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") - O << browse(text("[][]", itemname, info), text("window=[]", itemname)) - - else if (istype(W, /obj/item/weapon/camera_bug)) - if (!src.can_use()) - to_chat(user, "Camera non-functional.") - return - if (src.bugged) - to_chat(user, "Camera bug removed.") - src.bugged = 0 - else - to_chat(user, "Camera bugged.") - src.bugged = 1 - - else if(W.damtype == BRUTE || W.damtype == BURN) //bashing cameras - user.setClickCooldown(user.get_attack_speed(W)) - if (W.force >= src.toughness) - user.do_attack_animation(src) - visible_message("[src] has been [LAZYLEN(W.attack_verb) ? pick(W.attack_verb) : "attacked"] with [W] by [user]!") - if (istype(W, /obj/item)) //is it even possible to get into attackby() with non-items? - var/obj/item/I = W - if (I.hitsound) - playsound(src, I.hitsound, 50, 1, -1) - take_damage(W.force) - - else - ..() - -/obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1) - // The only way for AI to reactivate cameras are malf abilities, this gives them different messages. - if(istype(user, /mob/living/silicon/ai)) - user = null - - if(choice != 1) - return - - set_status(!src.status) - if (!(src.status)) - if(user) - visible_message(" [user] has deactivated [src]!") - else - visible_message(" [src] clicks and shuts down. ") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - icon_state = "[initial(icon_state)]1" - add_hiddenprint(user) - else - if(user) - visible_message(" [user] has reactivated [src]!") - else - visible_message(" [src] clicks and reactivates itself. ") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - icon_state = initial(icon_state) - add_hiddenprint(user) - -/obj/machinery/camera/take_damage(var/force, var/message) - //prob(25) gives an average of 3-4 hits - if (force >= toughness && (force > toughness*4 || prob(25))) - destroy() - -//Used when someone breaks a camera -/obj/machinery/camera/proc/destroy() - stat |= BROKEN - wires.cut_all() - - triggerCameraAlarm() - update_icon() - update_coverage() - - //sparks - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(src, "sparks", 50, 1) - -/obj/machinery/camera/proc/set_status(var/newstatus) - if (status != newstatus) - status = newstatus - update_coverage() - -/obj/machinery/camera/check_eye(mob/user) - if(!can_use()) return -1 - if(isXRay()) return SEE_TURFS|SEE_MOBS|SEE_OBJS - return 0 - -/obj/machinery/camera/update_icon() - if (!status || (stat & BROKEN)) - icon_state = "[initial(icon_state)]1" - else if (stat & EMPED) - icon_state = "[initial(icon_state)]emp" - else - icon_state = initial(icon_state) - -/obj/machinery/camera/proc/triggerCameraAlarm(var/duration = 0) - alarm_on = 1 - camera_alarm.triggerAlarm(loc, src, duration) - -/obj/machinery/camera/proc/cancelCameraAlarm() - if(wires.is_cut(WIRE_CAM_ALARM)) - return - - alarm_on = 0 - camera_alarm.clearAlarm(loc, src) - -//if false, then the camera is listed as DEACTIVATED and cannot be used -/obj/machinery/camera/proc/can_use() - if(!status) - return 0 - if(stat & (EMPED|BROKEN)) - return 0 - return 1 - -/obj/machinery/camera/proc/can_see() - var/list/see = null - var/turf/pos = get_turf(src) - if(!pos) - return list() - - if(isXRay()) - see = range(view_range, pos) - else - see = hear(view_range, pos) - return see - -/atom/proc/auto_turn() - //Automatically turns based on nearby walls. - var/turf/simulated/wall/T = null - for(var/i = 1, i <= 8; i += i) - T = get_ranged_target_turf(src, i, 1) - if(istype(T)) - //If someone knows a better way to do this, let me know. -Giacom - switch(i) - if(NORTH) - src.set_dir(SOUTH) - if(SOUTH) - src.set_dir(NORTH) - if(WEST) - src.set_dir(EAST) - if(EAST) - src.set_dir(WEST) - break - -//Return a working camera that can see a given mob -//or null if none -/proc/seen_by_camera(var/mob/M) - for(var/obj/machinery/camera/C in oview(4, M)) - if(C.can_use()) // check if camera disabled - return C - return null - -/proc/near_range_camera(var/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/weld(var/obj/item/weapon/weldingtool/WT, var/mob/user) - WT = WT.get_welder() - - if(busy) - return 0 - if(!WT.isOn()) - return 0 - - // Do after stuff here - to_chat(user, "You start to weld [src]..") - playsound(src, WT.usesound, 50, 1) - WT.eyecheck(user) - busy = 1 - if(do_after(user, 100 * WT.toolspeed)) - busy = 0 - if(!WT.isOn()) - return 0 - return 1 - busy = 0 - return 0 - -/obj/machinery/camera/interact(mob/living/user as mob) - if(!panel_open || istype(user, /mob/living/silicon/ai)) - return - - if(stat & BROKEN) - to_chat(user, "\The [src] is broken.") - return - - user.set_machine(src) - wires.Interact(user) - -/obj/machinery/camera/proc/add_network(var/network_name) - add_networks(list(network_name)) - -/obj/machinery/camera/proc/remove_network(var/network_name) - remove_networks(list(network_name)) - -/obj/machinery/camera/proc/add_networks(var/list/networks) - var/network_added - network_added = 0 - for(var/network_name in networks) - if(!(network_name in src.network)) - network += network_name - network_added = 1 - - if(network_added) - update_coverage(1) - -/obj/machinery/camera/proc/remove_networks(var/list/networks) - var/network_removed - network_removed = 0 - for(var/network_name in networks) - if(network_name in src.network) - network -= network_name - network_removed = 1 - - if(network_removed) - update_coverage(1) - -/obj/machinery/camera/proc/replace_networks(var/list/networks) - if(networks.len != network.len) - network = networks - update_coverage(1) - return - - for(var/new_network in networks) - if(!(new_network in network)) - network = networks - update_coverage(1) - return - -/obj/machinery/camera/proc/clear_all_networks() - if(network.len) - network.Cut() - update_coverage(1) - -/obj/machinery/camera/proc/tgui_structure() - var/cam[0] - cam["name"] = sanitize(c_tag) - cam["deact"] = !can_use() - cam["camera"] = "\ref[src]" - cam["omni"] = always_visible - cam["x"] = x - cam["y"] = y - cam["z"] = z - return cam - -/obj/machinery/camera/proc/update_coverage(var/network_change = 0) - if(network_change) - var/list/open_networks = difflist(network, restricted_camera_networks) - // Add or remove camera from the camera net as necessary - if(on_open_network && !open_networks.len) - cameranet.removeCamera(src) - else if(!on_open_network && open_networks.len) - on_open_network = 1 - cameranet.addCamera(src) - else - cameranet.updateVisibility(src, 0) - -// Resets the camera's wires to fully operational state. Used by one of Malfunction abilities. -/obj/machinery/camera/proc/reset_wires() - if(!wires) - return - if (stat & BROKEN) // Fix the camera - stat &= ~BROKEN - wires.repair() - update_icon() - update_coverage() +/obj/machinery/camera + name = "security camera" + desc = "It's used to monitor rooms." + icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons + icon_state = "camera" + use_power = USE_POWER_ACTIVE + idle_power_usage = 5 + active_power_usage = 10 + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + + var/list/network = list(NETWORK_DEFAULT) + var/c_tag = null + var/c_tag_order = 999 + var/status = 1 + anchored = TRUE + var/invuln = 0 + var/bugged = 0 + var/obj/item/weapon/camera_assembly/assembly = null + + var/toughness = 5 //sorta fragile + + // WIRES + var/datum/wires/camera/wires = null // Wires datum + + //OTHER + + var/view_range = 7 + var/short_range = 2 + + var/light_disabled = 0 + var/in_use_lights = 0 // TO BE IMPLEMENTED - LIES. + var/alarm_on = 0 + var/busy = 0 + + var/on_open_network = 0 + var/always_visible = FALSE //Visable from any map, good for entertainment network cameras + + var/affected_by_emp_until = 0 + + var/client_huds = list() + + var/list/camera_computers_using_this = list() + +/obj/machinery/camera/New() + wires = new(src) + assembly = new(src) + assembly.state = 4 + client_huds |= global_hud.whitense + + /* // Use this to look for cameras that have the same c_tag. + for(var/obj/machinery/camera/C in cameranet.cameras) + var/list/tempnetwork = C.network&src.network + if(C != src && C.c_tag == src.c_tag && tempnetwork.len) + to_world_log("[src.c_tag] [src.x] [src.y] [src.z] conflicts with [C.c_tag] [C.x] [C.y] [C.z]") + */ + if(!src.network || src.network.len < 1) + if(loc) + error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z] has errored. [src.network?"Empty network list":"Null network list"]") + else + error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]") + ASSERT(src.network) + ASSERT(src.network.len > 0) + // VOREStation Edit Start - Make mapping with cameras easier + if(!c_tag) + var/area/A = get_area(src) + c_tag = "[A ? A.name : "Unknown"] #[rand(111,999)]" + ..() + // VOREStation Edit End + +/obj/machinery/camera/Destroy() + if(isMotion()) + unsense_proximity(callback = /atom/proc/HasProximity) + deactivate(null, 0) //kick anyone viewing out + if(assembly) + qdel(assembly) + assembly = null + qdel(wires) + wires = null + return ..() + +/obj/machinery/camera/process() + if((stat & EMPED) && world.time >= affected_by_emp_until) + stat &= ~EMPED + cancelCameraAlarm() + update_icon() + update_coverage() + return internal_process() + +/obj/machinery/camera/proc/internal_process() + return + +/obj/machinery/camera/emp_act(severity) + if(!isEmpProof() && prob(100/severity)) + if(!affected_by_emp_until || (world.time > affected_by_emp_until)) + affected_by_emp_until = max(affected_by_emp_until, world.time + (90 SECONDS / severity)) + stat |= EMPED + set_light(0) + triggerCameraAlarm() + update_icon() + update_coverage() + START_PROCESSING(SSobj, src) + +/obj/machinery/camera/bullet_act(var/obj/item/projectile/P) + take_damage(P.get_structure_damage()) + +/obj/machinery/camera/ex_act(severity) + if(src.invuln) + return + + //camera dies if an explosion touches it! + if(severity <= 2 || prob(50)) + destroy() + + ..() //and give it the regular chance of being deleted outright + +/obj/machinery/camera/blob_act() + if((stat & BROKEN) || invuln) + return + destroy() + +/obj/machinery/camera/hitby(AM as mob|obj) + ..() + if (istype(AM, /obj)) + var/obj/O = AM + if (O.throwforce >= src.toughness) + visible_message("[src] was hit by [O].") + take_damage(O.throwforce) + +/obj/machinery/camera/proc/setViewRange(var/num = 7) + src.view_range = num + cameranet.updateVisibility(src, 0) + +/obj/machinery/camera/attack_hand(mob/living/carbon/human/user as mob) + if(!istype(user)) + return + + if(user.species.can_shred(user)) + set_status(0) + user.do_attack_animation(src) + user.setClickCooldown(user.get_attack_speed()) + visible_message("\The [user] slashes at [src]!") + playsound(src, 'sound/weapons/slash.ogg', 100, 1) + add_hiddenprint(user) + destroy() + +/obj/machinery/camera/attack_generic(mob/user as mob) + if(isanimal(user)) + var/mob/living/simple_mob/S = user + set_status(0) + S.do_attack_animation(src) + S.setClickCooldown(user.get_attack_speed()) + visible_message("\The [user] [pick(S.attacktext)] \the [src]!") + playsound(src, S.attack_sound, 100, 1) + add_hiddenprint(user) + destroy() + ..() + +/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) + update_coverage() + // DECONSTRUCTION + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + //to_chat(user, "You start to [panel_open ? "close" : "open"] the camera's panel.") + //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown + panel_open = !panel_open + user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!", + "You screw the camera's panel [panel_open ? "open" : "closed"].") + playsound(src, W.usesound, 50, 1) + + else if((W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/multitool)) && panel_open) + interact(user) + + else if(W.has_tool_quality(TOOL_WELDER) && (wires.CanDeconstruct() || (stat & BROKEN))) + if(weld(W, user)) + if(assembly) + assembly.loc = src.loc + assembly.anchored = TRUE + assembly.camera_name = c_tag + assembly.camera_network = english_list(network, NETWORK_DEFAULT, ",", ",") + assembly.update_icon() + assembly.dir = src.dir + if(stat & BROKEN) + assembly.state = 2 + to_chat(user, "You repaired \the [src] frame.") + else + assembly.state = 1 + to_chat(user, "You cut \the [src] free from the wall.") + new /obj/item/stack/cable_coil(src.loc, length=2) + assembly = null //so qdel doesn't eat it. + qdel(src) + + // OTHER + else if (can_use() && (istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) + var/mob/living/U = user + var/obj/item/weapon/paper/X = null + var/obj/item/device/pda/P = null + + var/itemname = "" + var/info = "" + if(istype(W, /obj/item/weapon/paper)) + X = W + itemname = X.name + info = X.info + else + P = W + itemname = P.name + var/datum/data/pda/app/notekeeper/N = P.find_program(/datum/data/pda/app/notekeeper) + if(N) + info = N.notehtml + to_chat(U, "You hold \a [itemname] up to the camera ...") + for(var/mob/living/silicon/ai/O in living_mob_list) + if(!O.client) + continue + if(U.name == "Unknown") + to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") + else + to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") + O << browse(text("[][]", itemname, info), text("window=[]", itemname)) + + else if (istype(W, /obj/item/weapon/camera_bug)) + if (!src.can_use()) + to_chat(user, "Camera non-functional.") + return + if (src.bugged) + to_chat(user, "Camera bug removed.") + src.bugged = 0 + else + to_chat(user, "Camera bugged.") + src.bugged = 1 + + else if(W.damtype == BRUTE || W.damtype == BURN) //bashing cameras + user.setClickCooldown(user.get_attack_speed(W)) + if (W.force >= src.toughness) + user.do_attack_animation(src) + visible_message("[src] has been [LAZYLEN(W.attack_verb) ? pick(W.attack_verb) : "attacked"] with [W] by [user]!") + if (istype(W, /obj/item)) //is it even possible to get into attackby() with non-items? + var/obj/item/I = W + if (I.hitsound) + playsound(src, I.hitsound, 50, 1, -1) + take_damage(W.force) + + else + ..() + +/obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1) + // The only way for AI to reactivate cameras are malf abilities, this gives them different messages. + if(istype(user, /mob/living/silicon/ai)) + user = null + + if(choice != 1) + return + + set_status(!src.status) + if (!(src.status)) + if(user) + visible_message(" [user] has deactivated [src]!") + else + visible_message(" [src] clicks and shuts down. ") + playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + icon_state = "[initial(icon_state)]1" + add_hiddenprint(user) + else + if(user) + visible_message(" [user] has reactivated [src]!") + else + visible_message(" [src] clicks and reactivates itself. ") + playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + icon_state = initial(icon_state) + add_hiddenprint(user) + +/obj/machinery/camera/take_damage(var/force, var/message) + //prob(25) gives an average of 3-4 hits + if (force >= toughness && (force > toughness*4 || prob(25))) + destroy() + +//Used when someone breaks a camera +/obj/machinery/camera/proc/destroy() + stat |= BROKEN + wires.cut_all() + + triggerCameraAlarm() + update_icon() + update_coverage() + + //sparks + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, loc) + spark_system.start() + playsound(src, "sparks", 50, 1) + +/obj/machinery/camera/proc/set_status(var/newstatus) + if (status != newstatus) + status = newstatus + update_coverage() + +/obj/machinery/camera/check_eye(mob/user) + if(!can_use()) return -1 + if(isXRay()) return SEE_TURFS|SEE_MOBS|SEE_OBJS + return 0 + +/obj/machinery/camera/update_icon() + if (!status || (stat & BROKEN)) + icon_state = "[initial(icon_state)]1" + else if (stat & EMPED) + icon_state = "[initial(icon_state)]emp" + else + icon_state = initial(icon_state) + +/obj/machinery/camera/proc/triggerCameraAlarm(var/duration = 0) + alarm_on = 1 + camera_alarm.triggerAlarm(loc, src, duration) + +/obj/machinery/camera/proc/cancelCameraAlarm() + if(wires.is_cut(WIRE_CAM_ALARM)) + return + + alarm_on = 0 + camera_alarm.clearAlarm(loc, src) + +//if false, then the camera is listed as DEACTIVATED and cannot be used +/obj/machinery/camera/proc/can_use() + if(!status) + return 0 + if(stat & (EMPED|BROKEN)) + return 0 + return 1 + +/obj/machinery/camera/proc/can_see() + var/list/see = null + var/turf/pos = get_turf(src) + if(!pos) + return list() + + if(isXRay()) + see = range(view_range, pos) + else + see = hear(view_range, pos) + return see + +/atom/proc/auto_turn() + //Automatically turns based on nearby walls. + var/turf/simulated/wall/T = null + for(var/i = 1, i <= 8; i += i) + T = get_ranged_target_turf(src, i, 1) + if(istype(T)) + //If someone knows a better way to do this, let me know. -Giacom + switch(i) + if(NORTH) + src.set_dir(SOUTH) + if(SOUTH) + src.set_dir(NORTH) + if(WEST) + src.set_dir(EAST) + if(EAST) + src.set_dir(WEST) + break + +//Return a working camera that can see a given mob +//or null if none +/proc/seen_by_camera(var/mob/M) + for(var/obj/machinery/camera/C in oview(4, M)) + if(C.can_use()) // check if camera disabled + return C + return null + +/proc/near_range_camera(var/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/weld(var/obj/item/weapon/weldingtool/WT, var/mob/user) + WT = WT.get_welder() + + if(busy) + return 0 + if(!WT.isOn()) + return 0 + + // Do after stuff here + to_chat(user, "You start to weld [src]..") + playsound(src, WT.usesound, 50, 1) + WT.eyecheck(user) + busy = 1 + if(do_after(user, 100 * WT.toolspeed)) + busy = 0 + if(!WT.isOn()) + return 0 + return 1 + busy = 0 + return 0 + +/obj/machinery/camera/interact(mob/living/user as mob) + if(!panel_open || istype(user, /mob/living/silicon/ai)) + return + + if(stat & BROKEN) + to_chat(user, "\The [src] is broken.") + return + + user.set_machine(src) + wires.Interact(user) + +/obj/machinery/camera/proc/add_network(var/network_name) + add_networks(list(network_name)) + +/obj/machinery/camera/proc/remove_network(var/network_name) + remove_networks(list(network_name)) + +/obj/machinery/camera/proc/add_networks(var/list/networks) + var/network_added + network_added = 0 + for(var/network_name in networks) + if(!(network_name in src.network)) + network += network_name + network_added = 1 + + if(network_added) + update_coverage(1) + +/obj/machinery/camera/proc/remove_networks(var/list/networks) + var/network_removed + network_removed = 0 + for(var/network_name in networks) + if(network_name in src.network) + network -= network_name + network_removed = 1 + + if(network_removed) + update_coverage(1) + +/obj/machinery/camera/proc/replace_networks(var/list/networks) + if(networks.len != network.len) + network = networks + update_coverage(1) + return + + for(var/new_network in networks) + if(!(new_network in network)) + network = networks + update_coverage(1) + return + +/obj/machinery/camera/proc/clear_all_networks() + if(network.len) + network.Cut() + update_coverage(1) + +/obj/machinery/camera/proc/tgui_structure() + var/cam[0] + cam["name"] = sanitize(c_tag) + cam["deact"] = !can_use() + cam["camera"] = "\ref[src]" + cam["omni"] = always_visible + cam["x"] = x + cam["y"] = y + cam["z"] = z + return cam + +/obj/machinery/camera/proc/update_coverage(var/network_change = 0) + if(network_change) + var/list/open_networks = difflist(network, restricted_camera_networks) + // Add or remove camera from the camera net as necessary + if(on_open_network && !open_networks.len) + cameranet.removeCamera(src) + else if(!on_open_network && open_networks.len) + on_open_network = 1 + cameranet.addCamera(src) + else + cameranet.updateVisibility(src, 0) + +// Resets the camera's wires to fully operational state. Used by one of Malfunction abilities. +/obj/machinery/camera/proc/reset_wires() + if(!wires) + return + if (stat & BROKEN) // Fix the camera + stat &= ~BROKEN + wires.repair() + update_icon() + update_coverage() diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 6db595dad4..86bdc11e00 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -1,174 +1,174 @@ -/obj/item/weapon/camera_assembly - name = "camera assembly" - desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface." - icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons - icon_state = "cameracase" - w_class = ITEMSIZE_SMALL - anchored = FALSE - - matter = list(MAT_STEEL = 700,MAT_GLASS = 300) - - // Motion, EMP-Proof, X-Ray - var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/material/osmium, /obj/item/weapon/stock_parts/scanning_module) - var/list/upgrades = list() - var/camera_name - var/camera_network - var/state = 0 - var/busy = 0 - /* - 0 = Nothing done to it - 1 = Wrenched in place - 2 = Welded in place - 3 = Wires attached to it (you can now attach/dettach upgrades) - 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) - */ - -/obj/item/weapon/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) - - switch(state) - - if(0) - // State 0 - if(W.has_tool_quality(TOOL_WRENCH) && isturf(src.loc)) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You wrench the assembly into place.") - anchored = TRUE - state = 1 - update_icon() - auto_turn() - return - - if(1) - // State 1 - if(W.has_tool_quality(TOOL_WELDER)) - if(weld(W, user)) - to_chat(user, "You weld the assembly securely into place.") - anchored = TRUE - state = 2 - return - - else if(W.has_tool_quality(TOOL_WRENCH)) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You unattach the assembly from its place.") - anchored = FALSE - update_icon() - state = 0 - return - - if(2) - // State 2 - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(2)) - to_chat(user, "You add wires to the assembly.") - state = 3 - else - to_chat(user, "You need 2 coils of wire to wire the assembly.") - return - - else if(W.has_tool_quality(TOOL_WELDER)) - - if(weld(W, user)) - to_chat(user, "You unweld the assembly from its place.") - state = 1 - anchored = TRUE - return - - - if(3) - // State 3 - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(src, W.usesound, 50, 1) - - var/input = sanitize(tgui_input_text(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: "+using_map.station_short+",Security,Secret ", "Set Network", camera_network ? camera_network : NETWORK_DEFAULT)) - if(!input) - to_chat(usr, "No input found please hang up and try your call again.") - return - - var/list/tempnetwork = splittext(input, ",") - if(tempnetwork.len < 1) - to_chat(usr, "No network found please hang up and try your call again.") - return - - var/area/camera_area = get_area(src) - var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" - input = sanitizeSafe(tgui_input_text(usr, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_NAME_LEN) - - state = 4 - var/obj/machinery/camera/C = new(src.loc) - src.loc = C - C.assembly = src - - C.auto_turn() - - C.replace_networks(uniqueList(tempnetwork)) - - C.c_tag = input - - for(var/i = 5; i >= 0; i -= 1) - var/direct = tgui_input_list(user, "Direction?", "Assembling Camera", list("NORTH", "EAST", "SOUTH", "WEST", "LEAVE IT")) - if(direct != "LEAVE IT") - C.dir = text2dir(direct) - if(i != 0) - var/confirm = tgui_alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", list("Yes", "No")) - if(confirm == "Yes") - break - return - - else if(W.has_tool_quality(TOOL_WIRECUTTER)) - - new/obj/item/stack/cable_coil(get_turf(src), 2) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You cut the wires from the circuits.") - state = 2 - return - - // Upgrades! - if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. - to_chat(user, "You attach \the [W] into the assembly inner circuits.") - upgrades += W - user.remove_from_mob(W) - W.loc = src - return - - // Taking out upgrades - else if(W.has_tool_quality(TOOL_CROWBAR) && upgrades.len) - var/obj/U = locate(/obj) in upgrades - if(U) - to_chat(user, "You unattach an upgrade from the assembly.") - playsound(src, W.usesound, 50, 1) - U.loc = get_turf(src) - upgrades -= U - return - - ..() - -/obj/item/weapon/camera_assembly/update_icon() - if(anchored) - icon_state = "camera1" - else - icon_state = "cameracase" - -/obj/item/weapon/camera_assembly/attack_hand(mob/user as mob) - if(!anchored) - ..() - -/obj/item/weapon/camera_assembly/proc/weld(var/obj/item/weapon/weldingtool/WT, var/mob/user) - WT = WT.get_welder() - - if(busy) - return 0 - if(!WT.isOn()) - return 0 - - to_chat(user, "You start to weld the [src]..") - playsound(src, WT.usesound, 50, 1) - WT.eyecheck(user) - busy = 1 - if(do_after(user, 20 * WT.toolspeed)) - busy = 0 - if(!WT.isOn()) - return 0 - return 1 - busy = 0 - return 0 +/obj/item/weapon/camera_assembly + name = "camera assembly" + desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface." + icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons + icon_state = "cameracase" + w_class = ITEMSIZE_SMALL + anchored = FALSE + + matter = list(MAT_STEEL = 700,MAT_GLASS = 300) + + // Motion, EMP-Proof, X-Ray + var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/material/osmium, /obj/item/weapon/stock_parts/scanning_module) + var/list/upgrades = list() + var/camera_name + var/camera_network + var/state = 0 + var/busy = 0 + /* + 0 = Nothing done to it + 1 = Wrenched in place + 2 = Welded in place + 3 = Wires attached to it (you can now attach/dettach upgrades) + 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) + */ + +/obj/item/weapon/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) + + switch(state) + + if(0) + // State 0 + if(W.has_tool_quality(TOOL_WRENCH) && isturf(src.loc)) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You wrench the assembly into place.") + anchored = TRUE + state = 1 + update_icon() + auto_turn() + return + + if(1) + // State 1 + if(W.has_tool_quality(TOOL_WELDER)) + if(weld(W, user)) + to_chat(user, "You weld the assembly securely into place.") + anchored = TRUE + state = 2 + return + + else if(W.has_tool_quality(TOOL_WRENCH)) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You unattach the assembly from its place.") + anchored = FALSE + update_icon() + state = 0 + return + + if(2) + // State 2 + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(2)) + to_chat(user, "You add wires to the assembly.") + state = 3 + else + to_chat(user, "You need 2 coils of wire to wire the assembly.") + return + + else if(W.has_tool_quality(TOOL_WELDER)) + + if(weld(W, user)) + to_chat(user, "You unweld the assembly from its place.") + state = 1 + anchored = TRUE + return + + + if(3) + // State 3 + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(src, W.usesound, 50, 1) + + var/input = sanitize(tgui_input_text(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: "+using_map.station_short+",Security,Secret ", "Set Network", camera_network ? camera_network : NETWORK_DEFAULT)) + if(!input) + to_chat(usr, "No input found please hang up and try your call again.") + return + + var/list/tempnetwork = splittext(input, ",") + if(tempnetwork.len < 1) + to_chat(usr, "No network found please hang up and try your call again.") + return + + var/area/camera_area = get_area(src) + var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" + input = sanitizeSafe(tgui_input_text(usr, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_NAME_LEN) + + state = 4 + var/obj/machinery/camera/C = new(src.loc) + src.loc = C + C.assembly = src + + C.auto_turn() + + C.replace_networks(uniqueList(tempnetwork)) + + C.c_tag = input + + for(var/i = 5; i >= 0; i -= 1) + var/direct = tgui_input_list(user, "Direction?", "Assembling Camera", list("NORTH", "EAST", "SOUTH", "WEST", "LEAVE IT")) + if(direct != "LEAVE IT") + C.dir = text2dir(direct) + if(i != 0) + var/confirm = tgui_alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", list("Yes", "No")) + if(confirm == "Yes") + break + return + + else if(W.has_tool_quality(TOOL_WIRECUTTER)) + + new/obj/item/stack/cable_coil(get_turf(src), 2) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You cut the wires from the circuits.") + state = 2 + return + + // Upgrades! + if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. + to_chat(user, "You attach \the [W] into the assembly inner circuits.") + upgrades += W + user.remove_from_mob(W) + W.loc = src + return + + // Taking out upgrades + else if(W.has_tool_quality(TOOL_CROWBAR) && upgrades.len) + var/obj/U = locate(/obj) in upgrades + if(U) + to_chat(user, "You unattach an upgrade from the assembly.") + playsound(src, W.usesound, 50, 1) + U.loc = get_turf(src) + upgrades -= U + return + + ..() + +/obj/item/weapon/camera_assembly/update_icon() + if(anchored) + icon_state = "camera1" + else + icon_state = "cameracase" + +/obj/item/weapon/camera_assembly/attack_hand(mob/user as mob) + if(!anchored) + ..() + +/obj/item/weapon/camera_assembly/proc/weld(var/obj/item/weapon/weldingtool/WT, var/mob/user) + WT = WT.get_welder() + + if(busy) + return 0 + if(!WT.isOn()) + return 0 + + to_chat(user, "You start to weld the [src]..") + playsound(src, WT.usesound, 50, 1) + WT.eyecheck(user) + busy = 1 + if(do_after(user, 20 * WT.toolspeed)) + busy = 0 + if(!WT.isOn()) + return 0 + return 1 + busy = 0 + return 0 diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index ad183a7be8..00bfeb09cc 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,62 +1,62 @@ -/obj/machinery/camera - var/list/motionTargets = list() - var/detectTime = 0 - var/area/ai_monitored/area_motion = null - var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm() - -/obj/machinery/camera/internal_process() - // motion camera event loop - if (stat & (EMPED|NOPOWER)) - return - if(!isMotion()) - return PROCESS_KILL - if (detectTime > 0) - var/elapsed = world.time - detectTime - if (elapsed > alarm_delay) - triggerAlarm() - else if (detectTime == -1) - for (var/mob/target in motionTargets) - if (target.stat == 2) lostTarget(target) - // If not detecting with motion camera... - if (!area_motion) - // See if the camera is still in range - if(!in_range(src, target)) - // If they aren't in range, lose the target. - lostTarget(target) - -/obj/machinery/camera/proc/newTarget(var/mob/target) - if (istype(target, /mob/living/silicon/ai)) return 0 - if (detectTime == 0) - detectTime = world.time // start the clock - if (!(target in motionTargets)) - motionTargets += target - return 1 - -/obj/machinery/camera/proc/lostTarget(var/mob/target) - if (target in motionTargets) - motionTargets -= target - if (motionTargets.len == 0) - cancelAlarm() - -/obj/machinery/camera/proc/cancelAlarm() - if (!status || (stat & NOPOWER)) - return 0 - if (detectTime == -1) - motion_alarm.clearAlarm(loc, src) - detectTime = 0 - return 1 - -/obj/machinery/camera/proc/triggerAlarm() - if (!status || (stat & NOPOWER)) - return 0 - if (!detectTime) return 0 - motion_alarm.triggerAlarm(loc, src) - detectTime = -1 - return 1 - -/obj/machinery/camera/HasProximity(turf/T, atom/movable/AM, old_loc) - // 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 + var/list/motionTargets = list() + var/detectTime = 0 + var/area/ai_monitored/area_motion = null + var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm() + +/obj/machinery/camera/internal_process() + // motion camera event loop + if (stat & (EMPED|NOPOWER)) + return + if(!isMotion()) + return PROCESS_KILL + if (detectTime > 0) + var/elapsed = world.time - detectTime + if (elapsed > alarm_delay) + triggerAlarm() + else if (detectTime == -1) + for (var/mob/target in motionTargets) + if (target.stat == 2) lostTarget(target) + // If not detecting with motion camera... + if (!area_motion) + // See if the camera is still in range + if(!in_range(src, target)) + // If they aren't in range, lose the target. + lostTarget(target) + +/obj/machinery/camera/proc/newTarget(var/mob/target) + if (istype(target, /mob/living/silicon/ai)) return 0 + if (detectTime == 0) + detectTime = world.time // start the clock + if (!(target in motionTargets)) + motionTargets += target + return 1 + +/obj/machinery/camera/proc/lostTarget(var/mob/target) + if (target in motionTargets) + motionTargets -= target + if (motionTargets.len == 0) + cancelAlarm() + +/obj/machinery/camera/proc/cancelAlarm() + if (!status || (stat & NOPOWER)) + return 0 + if (detectTime == -1) + motion_alarm.clearAlarm(loc, src) + detectTime = 0 + return 1 + +/obj/machinery/camera/proc/triggerAlarm() + if (!status || (stat & NOPOWER)) + return 0 + if (!detectTime) return 0 + motion_alarm.triggerAlarm(loc, src) + detectTime = -1 + return 1 + +/obj/machinery/camera/HasProximity(turf/T, atom/movable/AM, old_loc) + // Motion cameras outside of an "ai monitored" area will use this to detect stuff. + if (!area_motion) + if(isliving(AM)) + newTarget(AM) + diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 7538415cf4..1e382978e1 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -1,257 +1,257 @@ -// PRESETS -/* -var/global/list/station_networks = list( -// NETWORK_CAFE_DOCK, - NETWORK_CARGO, - NETWORK_CIVILIAN, -// NETWORK_CIVILIAN_EAST, -// NETWORK_CIVILIAN_WEST, - NETWORK_COMMAND, - NETWORK_ENGINE, - NETWORK_ENGINEERING, - NETWORK_ENGINEERING_OUTPOST, - NETWORK_DEFAULT, - NETWORK_MEDICAL, - NETWORK_MINE, - NETWORK_NORTHERN_STAR, - NETWORK_RESEARCH, - NETWORK_RESEARCH_OUTPOST, - NETWORK_ROBOTS, - NETWORK_PRISON, - NETWORK_SECURITY, - NETWORK_INTERROGATION - ) -*/ -var/global/list/engineering_networks = list( - NETWORK_ENGINE, - NETWORK_SUBSTATIONS, //YAWN ADD: new substations subnet - NETWORK_ENGINEERING, - //NETWORK_ENGINEERING_OUTPOST, //VOREStation Edit: Tether has no Engineering Outpost, - NETWORK_ALARM_ATMOS, - NETWORK_ALARM_FIRE, - NETWORK_ALARM_POWER) -/obj/machinery/camera/network/crescent - network = list(NETWORK_CRESCENT) - -/* -/obj/machinery/camera/network/cafe_dock - network = list(NETWORK_CAFE_DOCK) -*/ - -/obj/machinery/camera/network/cargo - network = list(NETWORK_CARGO) - -/obj/machinery/camera/network/civilian - network = list(NETWORK_CIVILIAN) - -/obj/machinery/camera/network/circuits - network = list(NETWORK_CIRCUITS) - -/* -/obj/machinery/camera/network/civilian_east - network = list(NETWORK_CIVILIAN_EAST) - -/obj/machinery/camera/network/civilian_west - network = list(NETWORK_CIVILIAN_WEST) -*/ - -/obj/machinery/camera/network/command - network = list(NETWORK_COMMAND) - -/obj/machinery/camera/network/engine - network = list(NETWORK_ENGINE) - -/obj/machinery/camera/network/engineering - network = list(NETWORK_ENGINEERING) - -/obj/machinery/camera/network/engineering_outpost - network = list(NETWORK_ENGINEERING_OUTPOST) - -/obj/machinery/camera/network/ert - network = list(NETWORK_ERT) - -/obj/machinery/camera/network/exodus - network = list(NETWORK_DEFAULT) - -/obj/machinery/camera/network/interrogation - network = list(NETWORK_INTERROGATION) - -/obj/machinery/camera/network/mining - network = list(NETWORK_MINE) - -/obj/machinery/camera/network/northern_star - network = list(NETWORK_NORTHERN_STAR) - -/obj/machinery/camera/network/outside - network = list(NETWORK_OUTSIDE) - -/obj/machinery/camera/network/prison - network = list(NETWORK_PRISON) - -/obj/machinery/camera/network/medbay - network = list(NETWORK_MEDICAL) - -/obj/machinery/camera/network/research - network = list(NETWORK_RESEARCH) - -/obj/machinery/camera/network/exploration //yw edit - network = list(NETWORK_EXPLORATION) - -/obj/machinery/camera/network/research_outpost - network = list(NETWORK_RESEARCH_OUTPOST) - -/obj/machinery/camera/network/security - network = list(NETWORK_SECURITY) - -/obj/machinery/camera/network/substations - network = list(NETWORK_SUBSTATIONS) - -/obj/machinery/camera/network/telecom - network = list(NETWORK_TCOMMS) //yw edit - -/obj/machinery/camera/network/exploration - network = list(NETWORK_EXPLORATION) - -/obj/machinery/camera/network/research/xenobio - network = list(NETWORK_RESEARCH, NETWORK_XENOBIO) - -/obj/machinery/camera/network/thunder - network = list(NETWORK_THUNDER) - invuln = 1 - always_visible = TRUE - -// CHOMPEdit Begin - Bodycams -/obj/machinery/camera/network/bodycamera - network = list(NETWORK_BODYCAM) - invuln = 1 - always_visible = TRUE -// CHOMPEdit End - -// EMP - -/obj/machinery/camera/emp_proof/New() - ..() - upgradeEmpProof() - -// X-RAY - -/obj/machinery/camera/xray - icon_state = "xraycam" // Thanks to Krutchen for the icons. - -/obj/machinery/camera/xray/command - network = list(NETWORK_COMMAND) - -/obj/machinery/camera/xray/security - network = list(NETWORK_SECURITY) - -/obj/machinery/camera/xray/medbay - network = list(NETWORK_MEDICAL) - -/obj/machinery/camera/xray/research - network = list(NETWORK_RESEARCH) - -/obj/machinery/camera/xray/New() - ..() - upgradeXRay() - -// MOTION - -/obj/machinery/camera/motion/New() - ..() - upgradeMotion() - -/obj/machinery/camera/motion/engineering_outpost - network = list(NETWORK_ENGINEERING_OUTPOST) - -/obj/machinery/camera/motion/security - network = list(NETWORK_SECURITY) - -/obj/machinery/camera/motion/command - network = list(NETWORK_COMMAND) - -/obj/machinery/camera/motion/telecom - network = list(NETWORK_TCOMMS) //yw edit - -// ALL UPGRADES - - -/obj/machinery/camera/all/command - network = list(NETWORK_COMMAND) - -/obj/machinery/camera/all/New() - ..() - upgradeEmpProof() - upgradeXRay() - upgradeMotion() - -// AUTONAME -/obj/machinery/camera/autoname - var/static/list/by_area - -/obj/machinery/camera/autoname/Initialize() - . = ..() - var/area/A = get_area(src) - if(!A) - return . - if(!by_area) - by_area = list() - if(!by_area[A.name]) - by_area[A.name] = list() - var/list/my_area = by_area[A.name] - my_area += src - var/number = my_area.len - - c_tag = "[A.name] #[number]" - -/obj/machinery/camera/autoname/Destroy() - var/area/A = get_area(src) - if(!A || !by_area || !by_area[A.name]) - return ..() - var/list/my_area = by_area[A.name] - my_area -= src - return ..() - -// CHECKS - -/obj/machinery/camera/proc/isEmpProof() - var/O = locate(/obj/item/stack/material/osmium) in assembly.upgrades - return O - -/obj/machinery/camera/proc/isXRay() - var/obj/item/weapon/stock_parts/scanning_module/O = locate(/obj/item/weapon/stock_parts/scanning_module) in assembly.upgrades - if (O && O.rating >= 2) - return O - return null - -/obj/machinery/camera/proc/isMotion() - var/O = locate(/obj/item/device/assembly/prox_sensor) in assembly.upgrades - return O - -// UPGRADE PROCS - -/obj/machinery/camera/proc/upgradeEmpProof() - assembly.upgrades.Add(new /obj/item/stack/material/osmium(assembly)) - setPowerUsage() - update_coverage() - -/obj/machinery/camera/proc/upgradeXRay() - assembly.upgrades.Add(new /obj/item/weapon/stock_parts/scanning_module/adv(assembly)) - setPowerUsage() - update_coverage() - -/obj/machinery/camera/proc/upgradeMotion() - if(!isturf(loc)) - return //nooooo - assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly)) - setPowerUsage() - START_MACHINE_PROCESSING(src) - sense_proximity(callback = /atom/proc/HasProximity) - update_coverage() - -/obj/machinery/camera/proc/setPowerUsage() - var/mult = 1 - if (isXRay()) - mult++ - if (isMotion()) - mult++ - update_active_power_usage(mult * initial(active_power_usage)) +// PRESETS +/* +var/global/list/station_networks = list( +// NETWORK_CAFE_DOCK, + NETWORK_CARGO, + NETWORK_CIVILIAN, +// NETWORK_CIVILIAN_EAST, +// NETWORK_CIVILIAN_WEST, + NETWORK_COMMAND, + NETWORK_ENGINE, + NETWORK_ENGINEERING, + NETWORK_ENGINEERING_OUTPOST, + NETWORK_DEFAULT, + NETWORK_MEDICAL, + NETWORK_MINE, + NETWORK_NORTHERN_STAR, + NETWORK_RESEARCH, + NETWORK_RESEARCH_OUTPOST, + NETWORK_ROBOTS, + NETWORK_PRISON, + NETWORK_SECURITY, + NETWORK_INTERROGATION + ) +*/ +var/global/list/engineering_networks = list( + NETWORK_ENGINE, + NETWORK_SUBSTATIONS, //YAWN ADD: new substations subnet + NETWORK_ENGINEERING, + //NETWORK_ENGINEERING_OUTPOST, //VOREStation Edit: Tether has no Engineering Outpost, + NETWORK_ALARM_ATMOS, + NETWORK_ALARM_FIRE, + NETWORK_ALARM_POWER) +/obj/machinery/camera/network/crescent + network = list(NETWORK_CRESCENT) + +/* +/obj/machinery/camera/network/cafe_dock + network = list(NETWORK_CAFE_DOCK) +*/ + +/obj/machinery/camera/network/cargo + network = list(NETWORK_CARGO) + +/obj/machinery/camera/network/civilian + network = list(NETWORK_CIVILIAN) + +/obj/machinery/camera/network/circuits + network = list(NETWORK_CIRCUITS) + +/* +/obj/machinery/camera/network/civilian_east + network = list(NETWORK_CIVILIAN_EAST) + +/obj/machinery/camera/network/civilian_west + network = list(NETWORK_CIVILIAN_WEST) +*/ + +/obj/machinery/camera/network/command + network = list(NETWORK_COMMAND) + +/obj/machinery/camera/network/engine + network = list(NETWORK_ENGINE) + +/obj/machinery/camera/network/engineering + network = list(NETWORK_ENGINEERING) + +/obj/machinery/camera/network/engineering_outpost + network = list(NETWORK_ENGINEERING_OUTPOST) + +/obj/machinery/camera/network/ert + network = list(NETWORK_ERT) + +/obj/machinery/camera/network/exodus + network = list(NETWORK_DEFAULT) + +/obj/machinery/camera/network/interrogation + network = list(NETWORK_INTERROGATION) + +/obj/machinery/camera/network/mining + network = list(NETWORK_MINE) + +/obj/machinery/camera/network/northern_star + network = list(NETWORK_NORTHERN_STAR) + +/obj/machinery/camera/network/outside + network = list(NETWORK_OUTSIDE) + +/obj/machinery/camera/network/prison + network = list(NETWORK_PRISON) + +/obj/machinery/camera/network/medbay + network = list(NETWORK_MEDICAL) + +/obj/machinery/camera/network/research + network = list(NETWORK_RESEARCH) + +/obj/machinery/camera/network/exploration //yw edit + network = list(NETWORK_EXPLORATION) + +/obj/machinery/camera/network/research_outpost + network = list(NETWORK_RESEARCH_OUTPOST) + +/obj/machinery/camera/network/security + network = list(NETWORK_SECURITY) + +/obj/machinery/camera/network/substations + network = list(NETWORK_SUBSTATIONS) + +/obj/machinery/camera/network/telecom + network = list(NETWORK_TCOMMS) //yw edit + +/obj/machinery/camera/network/exploration + network = list(NETWORK_EXPLORATION) + +/obj/machinery/camera/network/research/xenobio + network = list(NETWORK_RESEARCH, NETWORK_XENOBIO) + +/obj/machinery/camera/network/thunder + network = list(NETWORK_THUNDER) + invuln = 1 + always_visible = TRUE + +// CHOMPEdit Begin - Bodycams +/obj/machinery/camera/network/bodycamera + network = list(NETWORK_BODYCAM) + invuln = 1 + always_visible = TRUE +// CHOMPEdit End + +// EMP + +/obj/machinery/camera/emp_proof/New() + ..() + upgradeEmpProof() + +// X-RAY + +/obj/machinery/camera/xray + icon_state = "xraycam" // Thanks to Krutchen for the icons. + +/obj/machinery/camera/xray/command + network = list(NETWORK_COMMAND) + +/obj/machinery/camera/xray/security + network = list(NETWORK_SECURITY) + +/obj/machinery/camera/xray/medbay + network = list(NETWORK_MEDICAL) + +/obj/machinery/camera/xray/research + network = list(NETWORK_RESEARCH) + +/obj/machinery/camera/xray/New() + ..() + upgradeXRay() + +// MOTION + +/obj/machinery/camera/motion/New() + ..() + upgradeMotion() + +/obj/machinery/camera/motion/engineering_outpost + network = list(NETWORK_ENGINEERING_OUTPOST) + +/obj/machinery/camera/motion/security + network = list(NETWORK_SECURITY) + +/obj/machinery/camera/motion/command + network = list(NETWORK_COMMAND) + +/obj/machinery/camera/motion/telecom + network = list(NETWORK_TCOMMS) //yw edit + +// ALL UPGRADES + + +/obj/machinery/camera/all/command + network = list(NETWORK_COMMAND) + +/obj/machinery/camera/all/New() + ..() + upgradeEmpProof() + upgradeXRay() + upgradeMotion() + +// AUTONAME +/obj/machinery/camera/autoname + var/static/list/by_area + +/obj/machinery/camera/autoname/Initialize() + . = ..() + var/area/A = get_area(src) + if(!A) + return . + if(!by_area) + by_area = list() + if(!by_area[A.name]) + by_area[A.name] = list() + var/list/my_area = by_area[A.name] + my_area += src + var/number = my_area.len + + c_tag = "[A.name] #[number]" + +/obj/machinery/camera/autoname/Destroy() + var/area/A = get_area(src) + if(!A || !by_area || !by_area[A.name]) + return ..() + var/list/my_area = by_area[A.name] + my_area -= src + return ..() + +// CHECKS + +/obj/machinery/camera/proc/isEmpProof() + var/O = locate(/obj/item/stack/material/osmium) in assembly.upgrades + return O + +/obj/machinery/camera/proc/isXRay() + var/obj/item/weapon/stock_parts/scanning_module/O = locate(/obj/item/weapon/stock_parts/scanning_module) in assembly.upgrades + if (O && O.rating >= 2) + return O + return null + +/obj/machinery/camera/proc/isMotion() + var/O = locate(/obj/item/device/assembly/prox_sensor) in assembly.upgrades + return O + +// UPGRADE PROCS + +/obj/machinery/camera/proc/upgradeEmpProof() + assembly.upgrades.Add(new /obj/item/stack/material/osmium(assembly)) + setPowerUsage() + update_coverage() + +/obj/machinery/camera/proc/upgradeXRay() + assembly.upgrades.Add(new /obj/item/weapon/stock_parts/scanning_module/adv(assembly)) + setPowerUsage() + update_coverage() + +/obj/machinery/camera/proc/upgradeMotion() + if(!isturf(loc)) + return //nooooo + assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly)) + setPowerUsage() + START_MACHINE_PROCESSING(src) + sense_proximity(callback = /atom/proc/HasProximity) + update_coverage() + +/obj/machinery/camera/proc/setPowerUsage() + var/mult = 1 + if (isXRay()) + mult++ + if (isMotion()) + mult++ + update_active_power_usage(mult * initial(active_power_usage)) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index d53e1fdbb7..8b1ec4256b 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -1,285 +1,285 @@ -#define TRACKING_POSSIBLE 0 -#define TRACKING_NO_COVERAGE 1 -#define TRACKING_TERMINATE 2 - -/mob/living/silicon/ai/var/max_locations = 30 -/mob/living/silicon/ai/var/stored_locations[0] - -/proc/InvalidPlayerTurf(turf/T as turf) - return !(T?.z in using_map.player_levels) - -/mob/living/silicon/ai/proc/get_camera_list() - if(src.stat == 2) - return - - cameranet.process_sort() - - var/list/T = list() - for (var/obj/machinery/camera/C in cameranet.cameras) - var/list/tempnetwork = C.network&src.network - if (tempnetwork.len) - T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - track = new() - track.cameras = T - return T - - -/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) - set category = "AI Commands" - set name = "Show Camera List" - - if(check_unable()) - return - - if (!camera) - return 0 - - var/obj/machinery/camera/C = track.cameras[camera] - src.eyeobj.setLoc(C) - - return - -/mob/living/silicon/ai/proc/ai_store_location(loc as text) - set category = "AI Commands" - set name = "Store Camera Location" - set desc = "Stores your current camera location by the given name" - - loc = sanitize(loc) - if(!loc) - to_chat(src, "Must supply a location name") - return - - if(stored_locations.len >= max_locations) - to_chat(src, "Cannot store additional locations. Remove one first") - return - - if(loc in stored_locations) - to_chat(src, "There is already a stored location by this name") - return - - var/L = src.eyeobj.getLoc() - if (InvalidPlayerTurf(get_turf(L))) - to_chat(src, "Unable to store this location") - return - - stored_locations[loc] = L - to_chat(src, "Location '[loc]' stored") - -/mob/living/silicon/ai/proc/sorted_stored_locations() - return sortList(stored_locations) - -/mob/living/silicon/ai/proc/ai_goto_location(loc in sorted_stored_locations()) - set category = "AI Commands" - set name = "Goto Camera Location" - set desc = "Returns to the selected camera location" - - if (!(loc in stored_locations)) - to_chat(src, "Location [loc] not found") - return - - var/L = stored_locations[loc] - src.eyeobj.setLoc(L) - -/mob/living/silicon/ai/proc/ai_remove_location(loc in sorted_stored_locations()) - set category = "AI Commands" - set name = "Delete Camera Location" - set desc = "Deletes the selected camera location" - - if (!(loc in stored_locations)) - to_chat(src, "Location [loc] not found") - return - - stored_locations.Remove(loc) - to_chat(src, "Location [loc] removed") - -// Used to allow the AI is write in mob names/camera name from the CMD line. -/datum/trackable - var/list/names = list() - var/list/namecounts = list() - var/list/humans = list() - var/list/others = list() - var/list/cameras = list() - -/mob/living/silicon/ai/proc/trackable_mobs() - if(usr.stat == 2) - return list() - - var/datum/trackable/TB = new() - for(var/mob/living/M in mob_list) - if(M == usr) - continue - if(M.tracking_status() != TRACKING_POSSIBLE) - continue - - var/name = M.name - if (name in TB.names) - TB.namecounts[name]++ - name = text("[] ([])", name, TB.namecounts[name]) - else - TB.names.Add(name) - TB.namecounts[name] = 1 - if(istype(M, /mob/living/carbon/human)) - TB.humans[name] = M - else - TB.others[name] = M - - var/list/targets = sortList(TB.humans) + sortList(TB.others) - src.track = TB - return targets - -/mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) - set category = "AI Commands" - set name = "Follow With Camera" - set desc = "Select who you would like to track." - - if(src.stat == 2) - to_chat(src, "You can't follow [target_name] with cameras because you are dead!") - return - if(!target_name) - src.cameraFollow = null - - var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - src.track = null - ai_actual_track(target) - -/mob/living/silicon/ai/proc/ai_cancel_tracking(var/forced = 0) - if(!cameraFollow) - return - - to_chat(src, "Follow camera mode [forced ? "terminated" : "ended"].") - cameraFollow.tracking_cancelled() - cameraFollow = null - -/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob) - if(!istype(target)) return FALSE - var/mob/living/silicon/ai/U = usr - - if(target == U.cameraFollow) - return TRUE - - if(U.cameraFollow) - U.ai_cancel_tracking() - U.cameraFollow = target - to_chat(U, "Now tracking [target.name] on camera.") - target.tracking_initiated() - - spawn (0) - while (U.cameraFollow == target) - if (U.cameraFollow == null) - return - - switch(target.tracking_status()) - if(TRACKING_NO_COVERAGE) - to_chat(U, "Target is not near any active cameras.") - sleep(100) - continue - if(TRACKING_TERMINATE) - U.ai_cancel_tracking(1) - return - - if(U.eyeobj) - U.eyeobj.setLoc(get_turf(target), 0) - else - view_core() - return - sleep(10) - - return TRUE - -/obj/machinery/camera/attack_ai(var/mob/living/silicon/ai/user as mob) - if (!istype(user)) - return - if (!src.can_use()) - return - user.eyeobj.setLoc(get_turf(src)) - - -/mob/living/silicon/ai/attack_ai(var/mob/user as mob) - ai_camera_list() - -/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 (a.c_tag_order != b.c_tag_order) - if (a.c_tag_order > b.c_tag_order) - L.Swap(j, j + 1) - else - if (sorttext(a.c_tag, b.c_tag) < 0) - L.Swap(j, j + 1) - return L - - -/mob/living/proc/near_camera() - if (!isturf(loc)) - return 0 - else if(!cameranet.checkVis(src)) - return 0 - return 1 - -/mob/living/proc/tracking_status() - // Easy checks first. - // Don't detect mobs on CentCom. Since the wizard den is on CentCom, we only need this. - var/obj/item/weapon/card/id/id = GetIdCard() - if(id && id.prevent_tracking()) - return TRACKING_TERMINATE - var/turf/pos = get_turf(src) - var/area/B = pos?.loc // No cam tracking in dorms! - if(InvalidPlayerTurf(pos) || B.block_tracking) - return TRACKING_TERMINATE - if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked - return TRACKING_TERMINATE - if(digitalcamo) - return TRACKING_TERMINATE - if(alpha < 127) // For lings and possible future alpha-based cloaks. - return TRACKING_TERMINATE - if(istype(loc,/obj/effect/dummy)) - return TRACKING_TERMINATE - - // Now, are they viewable by a camera? (This is last because it's the most intensive check) - return near_camera() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE - -/mob/living/silicon/robot/tracking_status() - . = ..() - if(. == TRACKING_NO_COVERAGE) - return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE - -/mob/living/carbon/human/tracking_status() - //Cameras can't track people wearing an agent card or a ninja hood. - if(istype(head, /obj/item/clothing/head/helmet/space/rig)) - var/obj/item/clothing/head/helmet/space/rig/helmet = head - if(helmet.prevent_track()) - return TRACKING_TERMINATE - - . = ..() - if(. == TRACKING_TERMINATE) - return - - if(. == TRACKING_NO_COVERAGE) - var/turf/T = get_turf(src) - if(T && (T.z in using_map.station_levels) && hassensorlevel(src, SUIT_SENSOR_TRACKING)) - return TRACKING_POSSIBLE - -/mob/living/proc/tracking_initiated() - -/mob/living/silicon/robot/tracking_initiated() - tracking_entities++ - if(tracking_entities == 1 && has_zeroth_law()) - to_chat(src, "Internal camera is currently being accessed.") - -/mob/living/proc/tracking_cancelled() - -/mob/living/silicon/robot/tracking_initiated() - tracking_entities-- - if(!tracking_entities && has_zeroth_law()) - to_chat(src, "Internal camera is no longer being accessed.") - - -#undef TRACKING_POSSIBLE -#undef TRACKING_NO_COVERAGE -#undef TRACKING_TERMINATE +#define TRACKING_POSSIBLE 0 +#define TRACKING_NO_COVERAGE 1 +#define TRACKING_TERMINATE 2 + +/mob/living/silicon/ai/var/max_locations = 30 +/mob/living/silicon/ai/var/stored_locations[0] + +/proc/InvalidPlayerTurf(turf/T as turf) + return !(T?.z in using_map.player_levels) + +/mob/living/silicon/ai/proc/get_camera_list() + if(src.stat == 2) + return + + cameranet.process_sort() + + var/list/T = list() + for (var/obj/machinery/camera/C in cameranet.cameras) + var/list/tempnetwork = C.network&src.network + if (tempnetwork.len) + T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C + + track = new() + track.cameras = T + return T + + +/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) + set category = "AI Commands" + set name = "Show Camera List" + + if(check_unable()) + return + + if (!camera) + return 0 + + var/obj/machinery/camera/C = track.cameras[camera] + src.eyeobj.setLoc(C) + + return + +/mob/living/silicon/ai/proc/ai_store_location(loc as text) + set category = "AI Commands" + set name = "Store Camera Location" + set desc = "Stores your current camera location by the given name" + + loc = sanitize(loc) + if(!loc) + to_chat(src, "Must supply a location name") + return + + if(stored_locations.len >= max_locations) + to_chat(src, "Cannot store additional locations. Remove one first") + return + + if(loc in stored_locations) + to_chat(src, "There is already a stored location by this name") + return + + var/L = src.eyeobj.getLoc() + if (InvalidPlayerTurf(get_turf(L))) + to_chat(src, "Unable to store this location") + return + + stored_locations[loc] = L + to_chat(src, "Location '[loc]' stored") + +/mob/living/silicon/ai/proc/sorted_stored_locations() + return sortList(stored_locations) + +/mob/living/silicon/ai/proc/ai_goto_location(loc in sorted_stored_locations()) + set category = "AI Commands" + set name = "Goto Camera Location" + set desc = "Returns to the selected camera location" + + if (!(loc in stored_locations)) + to_chat(src, "Location [loc] not found") + return + + var/L = stored_locations[loc] + src.eyeobj.setLoc(L) + +/mob/living/silicon/ai/proc/ai_remove_location(loc in sorted_stored_locations()) + set category = "AI Commands" + set name = "Delete Camera Location" + set desc = "Deletes the selected camera location" + + if (!(loc in stored_locations)) + to_chat(src, "Location [loc] not found") + return + + stored_locations.Remove(loc) + to_chat(src, "Location [loc] removed") + +// Used to allow the AI is write in mob names/camera name from the CMD line. +/datum/trackable + var/list/names = list() + var/list/namecounts = list() + var/list/humans = list() + var/list/others = list() + var/list/cameras = list() + +/mob/living/silicon/ai/proc/trackable_mobs() + if(usr.stat == 2) + return list() + + var/datum/trackable/TB = new() + for(var/mob/living/M in mob_list) + if(M == usr) + continue + if(M.tracking_status() != TRACKING_POSSIBLE) + continue + + var/name = M.name + if (name in TB.names) + TB.namecounts[name]++ + name = text("[] ([])", name, TB.namecounts[name]) + else + TB.names.Add(name) + TB.namecounts[name] = 1 + if(istype(M, /mob/living/carbon/human)) + TB.humans[name] = M + else + TB.others[name] = M + + var/list/targets = sortList(TB.humans) + sortList(TB.others) + src.track = TB + return targets + +/mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) + set category = "AI Commands" + set name = "Follow With Camera" + set desc = "Select who you would like to track." + + if(src.stat == 2) + to_chat(src, "You can't follow [target_name] with cameras because you are dead!") + return + if(!target_name) + src.cameraFollow = null + + var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) + src.track = null + ai_actual_track(target) + +/mob/living/silicon/ai/proc/ai_cancel_tracking(var/forced = 0) + if(!cameraFollow) + return + + to_chat(src, "Follow camera mode [forced ? "terminated" : "ended"].") + cameraFollow.tracking_cancelled() + cameraFollow = null + +/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob) + if(!istype(target)) return FALSE + var/mob/living/silicon/ai/U = usr + + if(target == U.cameraFollow) + return TRUE + + if(U.cameraFollow) + U.ai_cancel_tracking() + U.cameraFollow = target + to_chat(U, "Now tracking [target.name] on camera.") + target.tracking_initiated() + + spawn (0) + while (U.cameraFollow == target) + if (U.cameraFollow == null) + return + + switch(target.tracking_status()) + if(TRACKING_NO_COVERAGE) + to_chat(U, "Target is not near any active cameras.") + sleep(100) + continue + if(TRACKING_TERMINATE) + U.ai_cancel_tracking(1) + return + + if(U.eyeobj) + U.eyeobj.setLoc(get_turf(target), 0) + else + view_core() + return + sleep(10) + + return TRUE + +/obj/machinery/camera/attack_ai(var/mob/living/silicon/ai/user as mob) + if (!istype(user)) + return + if (!src.can_use()) + return + user.eyeobj.setLoc(get_turf(src)) + + +/mob/living/silicon/ai/attack_ai(var/mob/user as mob) + ai_camera_list() + +/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 (a.c_tag_order != b.c_tag_order) + if (a.c_tag_order > b.c_tag_order) + L.Swap(j, j + 1) + else + if (sorttext(a.c_tag, b.c_tag) < 0) + L.Swap(j, j + 1) + return L + + +/mob/living/proc/near_camera() + if (!isturf(loc)) + return 0 + else if(!cameranet.checkVis(src)) + return 0 + return 1 + +/mob/living/proc/tracking_status() + // Easy checks first. + // Don't detect mobs on CentCom. Since the wizard den is on CentCom, we only need this. + var/obj/item/weapon/card/id/id = GetIdCard() + if(id && id.prevent_tracking()) + return TRACKING_TERMINATE + var/turf/pos = get_turf(src) + var/area/B = pos?.loc // No cam tracking in dorms! + if(InvalidPlayerTurf(pos) || B.block_tracking) + return TRACKING_TERMINATE + if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked + return TRACKING_TERMINATE + if(digitalcamo) + return TRACKING_TERMINATE + if(alpha < 127) // For lings and possible future alpha-based cloaks. + return TRACKING_TERMINATE + if(istype(loc,/obj/effect/dummy)) + return TRACKING_TERMINATE + + // Now, are they viewable by a camera? (This is last because it's the most intensive check) + return near_camera() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE + +/mob/living/silicon/robot/tracking_status() + . = ..() + if(. == TRACKING_NO_COVERAGE) + return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE + +/mob/living/carbon/human/tracking_status() + //Cameras can't track people wearing an agent card or a ninja hood. + if(istype(head, /obj/item/clothing/head/helmet/space/rig)) + var/obj/item/clothing/head/helmet/space/rig/helmet = head + if(helmet.prevent_track()) + return TRACKING_TERMINATE + + . = ..() + if(. == TRACKING_TERMINATE) + return + + if(. == TRACKING_NO_COVERAGE) + var/turf/T = get_turf(src) + if(T && (T.z in using_map.station_levels) && hassensorlevel(src, SUIT_SENSOR_TRACKING)) + return TRACKING_POSSIBLE + +/mob/living/proc/tracking_initiated() + +/mob/living/silicon/robot/tracking_initiated() + tracking_entities++ + if(tracking_entities == 1 && has_zeroth_law()) + to_chat(src, "Internal camera is currently being accessed.") + +/mob/living/proc/tracking_cancelled() + +/mob/living/silicon/robot/tracking_initiated() + tracking_entities-- + if(!tracking_entities && has_zeroth_law()) + to_chat(src, "Internal camera is no longer being accessed.") + + +#undef TRACKING_POSSIBLE +#undef TRACKING_NO_COVERAGE +#undef TRACKING_TERMINATE diff --git a/code/game/machinery/casino_prize_dispenser_ch.dm b/code/game/machinery/casino_prize_dispenser_ch.dm index d6328cb99c..2cb7cb66ca 100644 --- a/code/game/machinery/casino_prize_dispenser_ch.dm +++ b/code/game/machinery/casino_prize_dispenser_ch.dm @@ -1,402 +1,402 @@ -// Use this define to register a prize! -// * n - The proper name of the purchasable -// * o - The object type path of the purchasable to spawn -// * r - The amount to dispense -// * p - The price of the purchasable in chips -// * l - The restriction of the item -#define CASINO_PRIZE(n, o, r, p, l) n = new /datum/data/casino_prize(n, o, r, p, l) - -/datum/data/casino_prize - var/equipment_path = null - var/equipment_amt = 1 - var/cost = 0 - var/category = null - var/restriction = null - -/datum/data/casino_prize/New(name, path, amt, cost, restriction) - src.name = name - src.equipment_path = path - src.equipment_amt = amt - src.cost = cost - src.category = category - src.restriction = restriction - -/obj/machinery/casino_prize_dispenser - name = "Casino Prize Exchanger" - desc = "Exchange your chips to obtain wonderful prizes! Hoepfully you'll get to keep some of them for a while." - icon = 'icons/obj/casino_ch.dmi' - icon_state ="casino_prize_dispenser" - var/icon_vend ="casino_prize_dispenser-vend" - anchored = 1 - density = 1 - opacity = 0 - var/list/item_list - - clicksound = "button" - var/vending_sound = "machines/vending/vending_drop.ogg" - - // Power - use_power = USE_POWER_IDLE - idle_power_usage = 10 - var/vend_power_usage = 150 //actuators and stuff - - // Vending-related - var/datum/data/casino_prize/currently_vending = null // What we're requesting payment for right now - var/list/log = list() //Log only SS13 staff is allowed to look at, CKEYS are listed here for record keeping of prizes and players for events! - - var/category_weapons = 1 //For listing categories, if false then prizes of this categories cant be obtained nor bought for post-shift enjoyment - var/category_gear = 1 //If 1 prizes will be only logged - var/category_clothing = 1 //If 2 prizes will both be logged and spawned - var/category_misc = 1 - var/category_drinks = 1 - var/category_pets = 1 - var/category_mechs = 1 - var/category_implants = 1 - var/category_event = 1 //For special events, holidays, etc - -/obj/machinery/casino_prize_dispenser/Initialize() - . = ..() - power_change() - - item_list = list() - item_list["Weapons"] = list( - CASINO_PRIZE("Scepter", /obj/item/weapon/scepter, 1, 500, "weapons"), - CASINO_PRIZE("Chain of Command", /obj/item/weapon/melee/chainofcommand, 1, 250, "weapons"), - CASINO_PRIZE("Size Gun", /obj/item/weapon/gun/energy/sizegun, 1, 100, "weapons"), - CASINO_PRIZE("Advanced Particle Rifle", /obj/item/weapon/gun/energy/particle/advanced, 1, 500, "weapons"), - CASINO_PRIZE("Temperature Gun", /obj/item/weapon/gun/energy/temperature, 1, 250, "weapons"), - CASINO_PRIZE("Alien Pistol", /obj/item/weapon/gun/energy/alien, 1, 1000, "weapons"), - CASINO_PRIZE("Floral Gun", /obj/item/weapon/gun/energy/floragun, 1, 250, "weapons"), - CASINO_PRIZE("Net Gun", /obj/item/weapon/gun/energy/netgun, 1, 500, "weapons"), - ) - item_list["Gear"] = list( - CASINO_PRIZE("Experimental Welder", /obj/item/weapon/weldingtool/experimental, 1, 500, "gear"), - CASINO_PRIZE("Alien Belt", /obj/item/weapon/storage/belt/utility/alien, 1, 500, "gear"), - CASINO_PRIZE("Alien Armor", /obj/item/clothing/suit/armor/alien, 1, 1000, "gear"), - CASINO_PRIZE("Monocoole", /obj/item/clothing/glasses/monocoole, 1, 1000, "gear"), - CASINO_PRIZE("Chameleon Tie", /obj/item/clothing/accessory/chameleon, 1, 250, "gear"), - CASINO_PRIZE("Chemsprayer", /obj/item/weapon/reagent_containers/spray/chemsprayer, 1, 250, "gear"), - CASINO_PRIZE("Bluespace Beaker", /obj/item/weapon/reagent_containers/glass/beaker/bluespace, 1, 200, "gear"), - CASINO_PRIZE("Cryo Beaker", /obj/item/weapon/reagent_containers/glass/beaker/noreact, 1, 200, "gear"), - ) - item_list["Clothing"] = list( - CASINO_PRIZE("Purple cap", /obj/item/clothing/head/soft/purple/wah, 1, 50, "clothing"), - CASINO_PRIZE("Shark mask", /obj/item/clothing/mask/shark, 1, 50, "clothing"), - CASINO_PRIZE("Pig mask", /obj/item/clothing/mask/pig, 1, 50, "clothing"), - CASINO_PRIZE("Luchador mask", /obj/item/clothing/mask/luchador, 1, 50, "clothing"), - CASINO_PRIZE("Horse mask", /obj/item/clothing/mask/horsehead, 1, 50, "clothing"), - CASINO_PRIZE("Goblin mask", /obj/item/clothing/mask/goblin, 1, 50, "clothing"), - CASINO_PRIZE("Fake moustache", /obj/item/clothing/mask/fakemoustache, 1, 50, "clothing"), - CASINO_PRIZE("Dolphin mask", /obj/item/clothing/mask/dolphin, 1, 50, "clothing"), - CASINO_PRIZE("Demon mask", /obj/item/clothing/mask/demon, 1, 50, "clothing"), - CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 250, "clothing"), - CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 50, "clothing"), - CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 50, "clothing"), - CASINO_PRIZE("White bunnygirl outfit", /obj/item/weapon/storage/box/casino/costume_whitebunny, 1, 100, "clothing"), - CASINO_PRIZE("Black bunnygirl outfit", /obj/item/weapon/storage/box/casino/costume_blackbunny, 1, 100, "clothing"), - CASINO_PRIZE("Sexy mime costume", /obj/item/weapon/storage/box/casino/costume_sexymime, 1, 100, "clothing"), - CASINO_PRIZE("Sexy clown costume", /obj/item/weapon/storage/box/casino/costume_sexyclown, 1, 100, "clothing"), - CASINO_PRIZE("Catgirl costume", /obj/item/weapon/storage/box/casino/costume_nyangirl, 1, 100, "clothing"), - CASINO_PRIZE("Wizard costume", /obj/item/weapon/storage/box/casino/costume_wizard, 1, 100, "clothing"), - CASINO_PRIZE("Chicken costume", /obj/item/weapon/storage/box/casino/costume_chicken, 1, 100, "clothing"), - CASINO_PRIZE("Gladiator costume", /obj/item/weapon/storage/box/casino/costume_gladiator, 1, 100, "clothing"), - CASINO_PRIZE("Pirate costume", /obj/item/weapon/storage/box/casino/costume_pirate, 1, 100, "clothing"), - CASINO_PRIZE("Commie costume", /obj/item/weapon/storage/box/casino/costume_commie, 1, 100, "clothing"), - CASINO_PRIZE("Imperium monk costume", /obj/item/weapon/storage/box/casino/costume_imperiummonk, 1, 100, "clothing"), - CASINO_PRIZE("Plague doctor costume", /obj/item/weapon/storage/box/casino/costume_plaguedoctor, 1, 100, "clothing"), - CASINO_PRIZE("Witch costume", /obj/item/weapon/storage/box/casino/costume_cutewitch, 1, 100, "clothing"), - ) - item_list["Miscellaneous"] = list( - CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 50, "misc"), - CASINO_PRIZE("Waterflower", /obj/item/weapon/reagent_containers/spray/waterflower, 1, 50, "misc"), - CASINO_PRIZE("Horse stick", /obj/item/toy/stickhorse, 1, 50, "misc"), - CASINO_PRIZE("katana", /obj/item/toy/katana, 1, 50, "misc"), - CASINO_PRIZE("Conch", /obj/item/toy/eight_ball/conch, 1, 50, "misc"), - CASINO_PRIZE("Eight ball", /obj/item/toy/eight_ball, 1, 50, "misc"), - CASINO_PRIZE("Foam sword", /obj/item/weapon/material/sword/foam, 1, 50, "misc"), - CASINO_PRIZE("Foam crossbow", /obj/item/weapon/storage/box/casino/foamcrossbow, 1, 50, "misc"), - CASINO_PRIZE("Whistle", /obj/item/toy/bosunwhistle, 1, 50, "misc"), - CASINO_PRIZE("Golden cup", /obj/item/weapon/reagent_containers/food/drinks/golden_cup, 1, 50, "misc"), - CASINO_PRIZE("Quality cigars", /obj/item/weapon/storage/fancy/cigar/havana, 1, 50, "misc"), - CASINO_PRIZE("Casino wallet (kept after event)", /obj/item/weapon/storage/wallet/casino, 1, 50, "misc"), - CASINO_PRIZE("Casino cards", /obj/item/weapon/deck/cards/casino, 1, 50, "misc"), - CASINO_PRIZE("Casino Sentient Prize Collar", /obj/item/clothing/accessory/collar/holo/casinoslave_fake, 1, 50, "misc"), - CASINO_PRIZE("Instrument: Accordion", /obj/item/instrument/accordion, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Banjo", /obj/item/instrument/banjo, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Musical bikehorn", /obj/item/instrument/bikehorn, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Electric guitar", /obj/item/instrument/eguitar, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Glockenspiel", /obj/item/instrument/glockenspiel, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Guitar", /obj/item/instrument/guitar, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Harmonica", /obj/item/instrument/harmonica, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Keytar", /obj/item/instrument/keytar, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Synthethic Piano", /obj/item/instrument/piano_synth, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Recorder", /obj/item/instrument/recorder, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Saxophone", /obj/item/instrument/saxophone, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Trombone", /obj/item/instrument/trombone, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Trumpet", /obj/item/instrument/trumpet, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Violin", /obj/item/instrument/violin, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Xylophone", /obj/item/instrument/xylophone, 1, 100, "misc"), - CASINO_PRIZE("Instrument: Golden fiddle", /obj/item/instrument/violin/golden, 1, 250, "misc"), - CASINO_PRIZE("Instrument: Trumpet (warning: spooky)", /obj/item/instrument/trumpet/spectral, 1, 200, "misc"), - CASINO_PRIZE("Instrument: Trombone (warning: spooky)", /obj/item/instrument/trombone/spectral, 1, 200, "misc"), - CASINO_PRIZE("Instrument: Saxophone (warning: spooky)", /obj/item/instrument/saxophone/spectral, 1, 200, "misc"), - CASINO_PRIZE("Instrument: Musical Moth (you monster)", /obj/item/instrument/musicalmoth, 1, 100, "misc"), - ) - item_list["Drinks"] = list( - CASINO_PRIZE("Redeemer's brew", /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, 1, 50, "drinks"), - CASINO_PRIZE("Poison wine", /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, 1, 50, "drinks"), - CASINO_PRIZE("Patron", /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, 1, 50, "drinks"), - CASINO_PRIZE("Holy water", /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, 1, 50, "drinks"), - CASINO_PRIZE("Goldschlager", /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, 1, 50, "drinks"), - CASINO_PRIZE("Champagne", /obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, 1, 50, "drinks"), - CASINO_PRIZE("Bottle of Nothing", /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, 1, 50, "drinks"), - CASINO_PRIZE("Whiskey bliss", /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, 1, 50, "drinks"), - CASINO_PRIZE("Snaps", /obj/item/weapon/reagent_containers/food/drinks/bottle/snaps, 1, 50, "drinks"), - ) - item_list["Pets"] = list( - CASINO_PRIZE("Casino Geese", /obj/item/weapon/grenade/spawnergrenade/casino, 1, 200, "pets"), - CASINO_PRIZE("Goat", /obj/item/weapon/grenade/spawnergrenade/casino/goat, 1, 150, "pets"), - CASINO_PRIZE("Armadillo", /obj/item/weapon/grenade/spawnergrenade/casino/armadillo, 1, 150, "pets"), - CASINO_PRIZE("Cat", /obj/item/weapon/grenade/spawnergrenade/casino/cat, 1, 150, "pets"), - CASINO_PRIZE("Chicken", /obj/item/weapon/grenade/spawnergrenade/casino/chicken, 1, 200, "pets"), - CASINO_PRIZE("Cow", /obj/item/weapon/grenade/spawnergrenade/casino/cow, 1, 200, "pets"), - CASINO_PRIZE("Corgi", /obj/item/weapon/grenade/spawnergrenade/casino/corgi, 1, 200, "pets"), - CASINO_PRIZE("Fox", /obj/item/weapon/grenade/spawnergrenade/casino/fox, 1, 150, "pets"), - CASINO_PRIZE("Lizard", /obj/item/weapon/grenade/spawnergrenade/casino/lizard, 1, 150, "pets"), - CASINO_PRIZE("Penguin", /obj/item/weapon/grenade/spawnergrenade/casino/penguin, 1, 150, "pets"), - CASINO_PRIZE("Snake", /obj/item/weapon/grenade/spawnergrenade/casino/snake, 1, 200, "pets"), - CASINO_PRIZE("Yithian", /obj/item/weapon/grenade/spawnergrenade/casino/yithian, 1, 200, "pets"), - CASINO_PRIZE("Tindalos", /obj/item/weapon/grenade/spawnergrenade/casino/tindalos, 1, 200, "pets"), - CASINO_PRIZE("Fennec", /obj/item/weapon/grenade/spawnergrenade/casino/fennec, 1, 300, "pets"), - CASINO_PRIZE("Red panda", /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, 1, 300, "pets"), - CASINO_PRIZE("Horse", /obj/item/weapon/grenade/spawnergrenade/casino/horse, 1, 300, "pets"), - CASINO_PRIZE("Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie, 1, 500, "pets"), - CASINO_PRIZE("Absolute unit of an Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, 1, 500, "pets"), - CASINO_PRIZE("Zorgoia", /obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, 1, 500, "pets"), - ) - item_list["Mechs and Rigs"] = list( - CASINO_PRIZE("Mech:Mining Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, 1, 1000, "mechs"), - CASINO_PRIZE("Mech:Firefighter Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, 1, 750, "mechs"), - CASINO_PRIZE("Mech:Serenity", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, 1, 1500, "mechs"), - CASINO_PRIZE("Mech:Odysseus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, 1, 1250, "mechs"), - CASINO_PRIZE("Mech:Phazon Scuttlebug", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, 1, 2000, "mechs"), - CASINO_PRIZE("Mech:Phazon Janus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, 1, 2500, "mechs"), - CASINO_PRIZE("Mech:Scarab", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, 1, 500, "mechs"), - CASINO_PRIZE("Mech:Shuttlepod", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, 1, 250, "mechs"), - CASINO_PRIZE("Mech:Shuttlecraft", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, 1, 500, "mechs"), - CASINO_PRIZE("Rig: Solgov engineering hardsuit control module", /obj/item/weapon/rig/bayeng, 1, 500, "mechs"), - CASINO_PRIZE("Rig: Solgov medical hardsuit control module", /obj/item/weapon/rig/baymed, 1, 500, "mechs"), - CASINO_PRIZE("Rig: Advanced hardsuit control module", /obj/item/weapon/rig/ce, 1, 500, "mechs"),//CHOMPEDIT: Hardsuit - CASINO_PRIZE("Rig: Pursuit hardsuit control module", /obj/item/weapon/rig/ch/pursuit, 1, 750, "mechs"), - CASINO_PRIZE("Rig: Combat hardsuit control module", /obj/item/weapon/rig/combat, 1, 750, "mechs"), - CASINO_PRIZE("Rig: ERT-J suit control module (Elite Janitor NT approved)", /obj/item/weapon/rig/ert/janitor, 1, 250, "mechs"), - CASINO_PRIZE("Rig: Augmented tie (Elite Paper-Pusher NT approved)", /obj/item/weapon/rig/internalaffairs, 1, 250, "mechs"), - CASINO_PRIZE("Rig: Industrial suit control module", /obj/item/weapon/rig/industrial, 1, 300, "mechs"), - CASINO_PRIZE("Rig: Rescue suit control module", /obj/item/weapon/rig/medical, 1, 300, "mechs"), - ) - item_list["Implants and Genemods"] = list( - CASINO_PRIZE("Implanter (Remember to get one unless you want to borrow from station!)", /obj/item/weapon/implanter, 1, 100, "implants"), - CASINO_PRIZE("Implant: Tazer", /obj/item/weapon/implantcase/taser, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Medkit", /obj/item/weapon/implantcase/medkit, 1, 500, "implants"), - CASINO_PRIZE("Implant: Shades", /obj/item/weapon/implantcase/shades, 1, 750, "implants"), - CASINO_PRIZE("Implant: Sprinter", /obj/item/weapon/implantcase/sprinter, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Toolkit", /obj/item/weapon/implantcase/toolkit, 1, 500, "implants"), - CASINO_PRIZE("Implant: Language", /obj/item/weapon/implantcase/vrlanguage, 1, 500, "implants"), - CASINO_PRIZE("Implant: Analyzer", /obj/item/weapon/implantcase/analyzer, 1, 500, "implants"), - CASINO_PRIZE("Implant: Size control", /obj/item/weapon/implant/sizecontrol , 1, 500, "implants"), - CASINO_PRIZE("Implant: Adrenaline", /obj/item/weapon/implantcase/adrenalin, 1, 500, "implants"), - CASINO_PRIZE("Implant: Armblade", /obj/item/weapon/implantcase/armblade, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Wrist dartgun", /obj/item/weapon/implantcase/dart, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Freedom", /obj/item/weapon/implantcase/freedom, 1, 500, "implants"), - CASINO_PRIZE("Implant: Handblade", /obj/item/weapon/implantcase/handblade, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Hand laser", /obj/item/weapon/implantcase/laser, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Loyalty", /obj/item/weapon/implantcase/loyalty, 1, 500, "implants"), - CASINO_PRIZE("Implant: Restraining bolt", /obj/item/weapon/implantcase/restrainingbolt, 1, 1000, "implants"), - CASINO_PRIZE("Implant: Surge", /obj/item/weapon/implantcase/surge, 1, 500, "implants"), - CASINO_PRIZE("Implant: Wrist sword", /obj/item/weapon/implantcase/sword, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: No breath", /obj/item/weapon/dnainjector/nobreath, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: Regenerate", /obj/item/weapon/dnainjector/regenerate, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: Remote view", /obj/item/weapon/dnainjector/remoteview, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: Sprinter", /obj/item/weapon/dnainjector/runfast, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: Telekinesis", /obj/item/weapon/dnainjector/telemut, 1, 1000, "implants"), - CASINO_PRIZE("Genemod: X-ray", /obj/item/weapon/dnainjector/xraymut, 1, 1000, "implants"), - ) - - item_list["Event"] = list( - ) - -/obj/machinery/casino_prize_dispenser/power_change() - ..() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else - if(!(stat & NOPOWER)) - icon_state = initial(icon_state) - else - spawn(rand(0, 15)) - icon_state = "[initial(icon_state)]-off" - -/obj/machinery/casino_prize_dispenser/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/casino_prize_dispenser/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(currently_vending) - if(istype(W, /obj/item/weapon/spacecasinocash)) - to_chat(usr, "Please select prize on display with sufficient amount of chips.") - else - SStgui.update_uis(src) - return // don't smack that machine with your 2 chips - - if(istype(W, /obj/item/weapon/spacecasinocash)) - attack_hand(user) - return - ..() - -/obj/machinery/casino_prize_dispenser/proc/pay_with_chips(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user, var/price) - //"cashmoney_:[cashmoney] user:[user] currently_vending:[currently_vending]" - if(price > cashmoney.worth) - to_chat(usr, "\icon[cashmoney] That is not enough chips.") - return 0 - - if(istype(cashmoney, /obj/item/weapon/spacecasinocash)) - visible_message("\The [usr] inserts some chips into \the [src].") - cashmoney.worth -= price - - if(cashmoney.worth <= 0) - usr.drop_from_inventory(cashmoney) - qdel(cashmoney) - else - cashmoney.update_icon() - return 1 - -/obj/machinery/casino_prize_dispenser/ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/spritesheet/vending), - ) - -/obj/machinery/casino_prize_dispenser/tgui_data(mob/user) - var/list/data[0] - - data["items"] = list() - for(var/cat in item_list) - var/list/cat_items = list() - for(var/prize_name in item_list[cat]) - var/datum/data/casino_prize/prize = item_list[cat][prize_name] - cat_items[prize_name] = list("name" = prize_name, "price" = prize.cost, "restriction" = prize.restriction) - data["items"][cat] = cat_items - return data - -/obj/machinery/casino_prize_dispenser/tgui_interact(mob/user, datum/tgui/ui = null) - // Open the window - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "CasinoPrizeDispenserCh", name) - ui.open() - -/obj/machinery/casino_prize_dispenser/tgui_act(action, params) - if(stat & (BROKEN|NOPOWER)) - return - if(usr.stat || usr.restrained()) - return - if(..()) - return TRUE - . = TRUE - switch(action) - if("purchase") - var/paid = FALSE - var/category = params["cat"] - var/restriction_category = params["restriction"] - var/restriction_check = 0 - var/item_given = FALSE - var/name = params["name"] - var/price = params["price"] - var/datum/data/casino_prize/bi = item_list[category][name] - switch(restriction_category) - if("weapons") - restriction_check = category_weapons - if("gear") - restriction_check = category_gear - if("clothing") - restriction_check = category_clothing - if("misc") - restriction_check = category_misc - if("drinks") - restriction_check = category_drinks - if("pets") - restriction_check = category_pets - if("mechs") - restriction_check = category_mechs - if("implants") - restriction_check = category_implants - if("event") - restriction_check = category_event - else - to_chat(usr, "Prize checkout error has occured, purchase cancelled.") - return FALSE - - if(restriction_check < 1) - to_chat(usr, "[name] is restricted, this prize can't be bought.") - return FALSE - if(restriction_check > 1) - item_given = TRUE - - if(price <= 0 && item_given == TRUE) - vend(bi, usr) - return TRUE - - currently_vending = bi - - if(istype(usr.get_active_hand(), /obj/item/weapon/spacecasinocash)) - var/obj/item/weapon/spacecasinocash/cash = usr.get_active_hand() - paid = pay_with_chips(cash, usr, price) - else - to_chat(usr, "Payment failure: Improper payment method, please provide chips.") - return TRUE // we set this because they shouldn't even be able to get this far, and we want the UI to update. - if(paid) - if(item_given == TRUE) - vend(bi, usr) - - speak("Thank you for your purchase, your [bi] has been logged.") - do_logging(currently_vending, usr, bi) - . = TRUE - else - to_chat(usr, "Payment failure: unable to process payment.") - -/obj/machinery/casino_prize_dispenser/proc/vend(datum/data/casino_prize/bi, mob/user) - SStgui.update_uis(src) - - if(ispath(bi.equipment_path, /obj/item/stack)) - new bi.equipment_path(loc, bi.equipment_amt) - playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1) - return TRUE - - for(var/i in 1 to bi.equipment_amt) - new bi.equipment_path(loc) - playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1) - - currently_vending = null - use_power(vend_power_usage) //actuators and stuff - flick("[icon_state]-vend",src) - - -/obj/machinery/casino_prize_dispenser/proc/do_logging(item, mob/user, datum/data/casino_prize/bi) - var/prize_log = "{ckey:[user.ckey]character_name:[user.name]item_path: [bi.equipment_path]}" - log[++log.len] = prize_log - //Currently doesnt have an ingame way to show. Can only be viewed through View-Variables, to ensure theres no chance of players ckeys exposed - Jack - -/obj/machinery/casino_prize_dispenser/proc/speak(var/message) - if(stat & NOPOWER) - return - - if(!message) - return - - for(var/mob/O in hearers(src, null)) - O.show_message("\The [src] beeps, \"[message]\"",2) - return - -/obj/machinery/casino_prize_dispenser/process() //Might not need this, but just to be safe for now - if(stat & (BROKEN|NOPOWER)) - return +// Use this define to register a prize! +// * n - The proper name of the purchasable +// * o - The object type path of the purchasable to spawn +// * r - The amount to dispense +// * p - The price of the purchasable in chips +// * l - The restriction of the item +#define CASINO_PRIZE(n, o, r, p, l) n = new /datum/data/casino_prize(n, o, r, p, l) + +/datum/data/casino_prize + var/equipment_path = null + var/equipment_amt = 1 + var/cost = 0 + var/category = null + var/restriction = null + +/datum/data/casino_prize/New(name, path, amt, cost, restriction) + src.name = name + src.equipment_path = path + src.equipment_amt = amt + src.cost = cost + src.category = category + src.restriction = restriction + +/obj/machinery/casino_prize_dispenser + name = "Casino Prize Exchanger" + desc = "Exchange your chips to obtain wonderful prizes! Hoepfully you'll get to keep some of them for a while." + icon = 'icons/obj/casino_ch.dmi' + icon_state ="casino_prize_dispenser" + var/icon_vend ="casino_prize_dispenser-vend" + anchored = 1 + density = 1 + opacity = 0 + var/list/item_list + + clicksound = "button" + var/vending_sound = "machines/vending/vending_drop.ogg" + + // Power + use_power = USE_POWER_IDLE + idle_power_usage = 10 + var/vend_power_usage = 150 //actuators and stuff + + // Vending-related + var/datum/data/casino_prize/currently_vending = null // What we're requesting payment for right now + var/list/log = list() //Log only SS13 staff is allowed to look at, CKEYS are listed here for record keeping of prizes and players for events! + + var/category_weapons = 1 //For listing categories, if false then prizes of this categories cant be obtained nor bought for post-shift enjoyment + var/category_gear = 1 //If 1 prizes will be only logged + var/category_clothing = 1 //If 2 prizes will both be logged and spawned + var/category_misc = 1 + var/category_drinks = 1 + var/category_pets = 1 + var/category_mechs = 1 + var/category_implants = 1 + var/category_event = 1 //For special events, holidays, etc + +/obj/machinery/casino_prize_dispenser/Initialize() + . = ..() + power_change() + + item_list = list() + item_list["Weapons"] = list( + CASINO_PRIZE("Scepter", /obj/item/weapon/scepter, 1, 500, "weapons"), + CASINO_PRIZE("Chain of Command", /obj/item/weapon/melee/chainofcommand, 1, 250, "weapons"), + CASINO_PRIZE("Size Gun", /obj/item/weapon/gun/energy/sizegun, 1, 100, "weapons"), + CASINO_PRIZE("Advanced Particle Rifle", /obj/item/weapon/gun/energy/particle/advanced, 1, 500, "weapons"), + CASINO_PRIZE("Temperature Gun", /obj/item/weapon/gun/energy/temperature, 1, 250, "weapons"), + CASINO_PRIZE("Alien Pistol", /obj/item/weapon/gun/energy/alien, 1, 1000, "weapons"), + CASINO_PRIZE("Floral Gun", /obj/item/weapon/gun/energy/floragun, 1, 250, "weapons"), + CASINO_PRIZE("Net Gun", /obj/item/weapon/gun/energy/netgun, 1, 500, "weapons"), + ) + item_list["Gear"] = list( + CASINO_PRIZE("Experimental Welder", /obj/item/weapon/weldingtool/experimental, 1, 500, "gear"), + CASINO_PRIZE("Alien Belt", /obj/item/weapon/storage/belt/utility/alien, 1, 500, "gear"), + CASINO_PRIZE("Alien Armor", /obj/item/clothing/suit/armor/alien, 1, 1000, "gear"), + CASINO_PRIZE("Monocoole", /obj/item/clothing/glasses/monocoole, 1, 1000, "gear"), + CASINO_PRIZE("Chameleon Tie", /obj/item/clothing/accessory/chameleon, 1, 250, "gear"), + CASINO_PRIZE("Chemsprayer", /obj/item/weapon/reagent_containers/spray/chemsprayer, 1, 250, "gear"), + CASINO_PRIZE("Bluespace Beaker", /obj/item/weapon/reagent_containers/glass/beaker/bluespace, 1, 200, "gear"), + CASINO_PRIZE("Cryo Beaker", /obj/item/weapon/reagent_containers/glass/beaker/noreact, 1, 200, "gear"), + ) + item_list["Clothing"] = list( + CASINO_PRIZE("Purple cap", /obj/item/clothing/head/soft/purple/wah, 1, 50, "clothing"), + CASINO_PRIZE("Shark mask", /obj/item/clothing/mask/shark, 1, 50, "clothing"), + CASINO_PRIZE("Pig mask", /obj/item/clothing/mask/pig, 1, 50, "clothing"), + CASINO_PRIZE("Luchador mask", /obj/item/clothing/mask/luchador, 1, 50, "clothing"), + CASINO_PRIZE("Horse mask", /obj/item/clothing/mask/horsehead, 1, 50, "clothing"), + CASINO_PRIZE("Goblin mask", /obj/item/clothing/mask/goblin, 1, 50, "clothing"), + CASINO_PRIZE("Fake moustache", /obj/item/clothing/mask/fakemoustache, 1, 50, "clothing"), + CASINO_PRIZE("Dolphin mask", /obj/item/clothing/mask/dolphin, 1, 50, "clothing"), + CASINO_PRIZE("Demon mask", /obj/item/clothing/mask/demon, 1, 50, "clothing"), + CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 250, "clothing"), + CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 50, "clothing"), + CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 50, "clothing"), + CASINO_PRIZE("White bunnygirl outfit", /obj/item/weapon/storage/box/casino/costume_whitebunny, 1, 100, "clothing"), + CASINO_PRIZE("Black bunnygirl outfit", /obj/item/weapon/storage/box/casino/costume_blackbunny, 1, 100, "clothing"), + CASINO_PRIZE("Sexy mime costume", /obj/item/weapon/storage/box/casino/costume_sexymime, 1, 100, "clothing"), + CASINO_PRIZE("Sexy clown costume", /obj/item/weapon/storage/box/casino/costume_sexyclown, 1, 100, "clothing"), + CASINO_PRIZE("Catgirl costume", /obj/item/weapon/storage/box/casino/costume_nyangirl, 1, 100, "clothing"), + CASINO_PRIZE("Wizard costume", /obj/item/weapon/storage/box/casino/costume_wizard, 1, 100, "clothing"), + CASINO_PRIZE("Chicken costume", /obj/item/weapon/storage/box/casino/costume_chicken, 1, 100, "clothing"), + CASINO_PRIZE("Gladiator costume", /obj/item/weapon/storage/box/casino/costume_gladiator, 1, 100, "clothing"), + CASINO_PRIZE("Pirate costume", /obj/item/weapon/storage/box/casino/costume_pirate, 1, 100, "clothing"), + CASINO_PRIZE("Commie costume", /obj/item/weapon/storage/box/casino/costume_commie, 1, 100, "clothing"), + CASINO_PRIZE("Imperium monk costume", /obj/item/weapon/storage/box/casino/costume_imperiummonk, 1, 100, "clothing"), + CASINO_PRIZE("Plague doctor costume", /obj/item/weapon/storage/box/casino/costume_plaguedoctor, 1, 100, "clothing"), + CASINO_PRIZE("Witch costume", /obj/item/weapon/storage/box/casino/costume_cutewitch, 1, 100, "clothing"), + ) + item_list["Miscellaneous"] = list( + CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 50, "misc"), + CASINO_PRIZE("Waterflower", /obj/item/weapon/reagent_containers/spray/waterflower, 1, 50, "misc"), + CASINO_PRIZE("Horse stick", /obj/item/toy/stickhorse, 1, 50, "misc"), + CASINO_PRIZE("katana", /obj/item/toy/katana, 1, 50, "misc"), + CASINO_PRIZE("Conch", /obj/item/toy/eight_ball/conch, 1, 50, "misc"), + CASINO_PRIZE("Eight ball", /obj/item/toy/eight_ball, 1, 50, "misc"), + CASINO_PRIZE("Foam sword", /obj/item/weapon/material/sword/foam, 1, 50, "misc"), + CASINO_PRIZE("Foam crossbow", /obj/item/weapon/storage/box/casino/foamcrossbow, 1, 50, "misc"), + CASINO_PRIZE("Whistle", /obj/item/toy/bosunwhistle, 1, 50, "misc"), + CASINO_PRIZE("Golden cup", /obj/item/weapon/reagent_containers/food/drinks/golden_cup, 1, 50, "misc"), + CASINO_PRIZE("Quality cigars", /obj/item/weapon/storage/fancy/cigar/havana, 1, 50, "misc"), + CASINO_PRIZE("Casino wallet (kept after event)", /obj/item/weapon/storage/wallet/casino, 1, 50, "misc"), + CASINO_PRIZE("Casino cards", /obj/item/weapon/deck/cards/casino, 1, 50, "misc"), + CASINO_PRIZE("Casino Sentient Prize Collar", /obj/item/clothing/accessory/collar/holo/casinoslave_fake, 1, 50, "misc"), + CASINO_PRIZE("Instrument: Accordion", /obj/item/instrument/accordion, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Banjo", /obj/item/instrument/banjo, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Musical bikehorn", /obj/item/instrument/bikehorn, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Electric guitar", /obj/item/instrument/eguitar, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Glockenspiel", /obj/item/instrument/glockenspiel, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Guitar", /obj/item/instrument/guitar, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Harmonica", /obj/item/instrument/harmonica, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Keytar", /obj/item/instrument/keytar, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Synthethic Piano", /obj/item/instrument/piano_synth, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Recorder", /obj/item/instrument/recorder, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Saxophone", /obj/item/instrument/saxophone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Trombone", /obj/item/instrument/trombone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Trumpet", /obj/item/instrument/trumpet, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Violin", /obj/item/instrument/violin, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Xylophone", /obj/item/instrument/xylophone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Golden fiddle", /obj/item/instrument/violin/golden, 1, 250, "misc"), + CASINO_PRIZE("Instrument: Trumpet (warning: spooky)", /obj/item/instrument/trumpet/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Trombone (warning: spooky)", /obj/item/instrument/trombone/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Saxophone (warning: spooky)", /obj/item/instrument/saxophone/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Musical Moth (you monster)", /obj/item/instrument/musicalmoth, 1, 100, "misc"), + ) + item_list["Drinks"] = list( + CASINO_PRIZE("Redeemer's brew", /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, 1, 50, "drinks"), + CASINO_PRIZE("Poison wine", /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, 1, 50, "drinks"), + CASINO_PRIZE("Patron", /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, 1, 50, "drinks"), + CASINO_PRIZE("Holy water", /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, 1, 50, "drinks"), + CASINO_PRIZE("Goldschlager", /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, 1, 50, "drinks"), + CASINO_PRIZE("Champagne", /obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, 1, 50, "drinks"), + CASINO_PRIZE("Bottle of Nothing", /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, 1, 50, "drinks"), + CASINO_PRIZE("Whiskey bliss", /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, 1, 50, "drinks"), + CASINO_PRIZE("Snaps", /obj/item/weapon/reagent_containers/food/drinks/bottle/snaps, 1, 50, "drinks"), + ) + item_list["Pets"] = list( + CASINO_PRIZE("Casino Geese", /obj/item/weapon/grenade/spawnergrenade/casino, 1, 200, "pets"), + CASINO_PRIZE("Goat", /obj/item/weapon/grenade/spawnergrenade/casino/goat, 1, 150, "pets"), + CASINO_PRIZE("Armadillo", /obj/item/weapon/grenade/spawnergrenade/casino/armadillo, 1, 150, "pets"), + CASINO_PRIZE("Cat", /obj/item/weapon/grenade/spawnergrenade/casino/cat, 1, 150, "pets"), + CASINO_PRIZE("Chicken", /obj/item/weapon/grenade/spawnergrenade/casino/chicken, 1, 200, "pets"), + CASINO_PRIZE("Cow", /obj/item/weapon/grenade/spawnergrenade/casino/cow, 1, 200, "pets"), + CASINO_PRIZE("Corgi", /obj/item/weapon/grenade/spawnergrenade/casino/corgi, 1, 200, "pets"), + CASINO_PRIZE("Fox", /obj/item/weapon/grenade/spawnergrenade/casino/fox, 1, 150, "pets"), + CASINO_PRIZE("Lizard", /obj/item/weapon/grenade/spawnergrenade/casino/lizard, 1, 150, "pets"), + CASINO_PRIZE("Penguin", /obj/item/weapon/grenade/spawnergrenade/casino/penguin, 1, 150, "pets"), + CASINO_PRIZE("Snake", /obj/item/weapon/grenade/spawnergrenade/casino/snake, 1, 200, "pets"), + CASINO_PRIZE("Yithian", /obj/item/weapon/grenade/spawnergrenade/casino/yithian, 1, 200, "pets"), + CASINO_PRIZE("Tindalos", /obj/item/weapon/grenade/spawnergrenade/casino/tindalos, 1, 200, "pets"), + CASINO_PRIZE("Fennec", /obj/item/weapon/grenade/spawnergrenade/casino/fennec, 1, 300, "pets"), + CASINO_PRIZE("Red panda", /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, 1, 300, "pets"), + CASINO_PRIZE("Horse", /obj/item/weapon/grenade/spawnergrenade/casino/horse, 1, 300, "pets"), + CASINO_PRIZE("Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie, 1, 500, "pets"), + CASINO_PRIZE("Absolute unit of an Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, 1, 500, "pets"), + CASINO_PRIZE("Zorgoia", /obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, 1, 500, "pets"), + ) + item_list["Mechs and Rigs"] = list( + CASINO_PRIZE("Mech:Mining Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, 1, 1000, "mechs"), + CASINO_PRIZE("Mech:Firefighter Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, 1, 750, "mechs"), + CASINO_PRIZE("Mech:Serenity", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, 1, 1500, "mechs"), + CASINO_PRIZE("Mech:Odysseus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, 1, 1250, "mechs"), + CASINO_PRIZE("Mech:Phazon Scuttlebug", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, 1, 2000, "mechs"), + CASINO_PRIZE("Mech:Phazon Janus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, 1, 2500, "mechs"), + CASINO_PRIZE("Mech:Scarab", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, 1, 500, "mechs"), + CASINO_PRIZE("Mech:Shuttlepod", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, 1, 250, "mechs"), + CASINO_PRIZE("Mech:Shuttlecraft", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Solgov engineering hardsuit control module", /obj/item/weapon/rig/bayeng, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Solgov medical hardsuit control module", /obj/item/weapon/rig/baymed, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Advanced hardsuit control module", /obj/item/weapon/rig/ce, 1, 500, "mechs"),//CHOMPEDIT: Hardsuit + CASINO_PRIZE("Rig: Pursuit hardsuit control module", /obj/item/weapon/rig/ch/pursuit, 1, 750, "mechs"), + CASINO_PRIZE("Rig: Combat hardsuit control module", /obj/item/weapon/rig/combat, 1, 750, "mechs"), + CASINO_PRIZE("Rig: ERT-J suit control module (Elite Janitor NT approved)", /obj/item/weapon/rig/ert/janitor, 1, 250, "mechs"), + CASINO_PRIZE("Rig: Augmented tie (Elite Paper-Pusher NT approved)", /obj/item/weapon/rig/internalaffairs, 1, 250, "mechs"), + CASINO_PRIZE("Rig: Industrial suit control module", /obj/item/weapon/rig/industrial, 1, 300, "mechs"), + CASINO_PRIZE("Rig: Rescue suit control module", /obj/item/weapon/rig/medical, 1, 300, "mechs"), + ) + item_list["Implants and Genemods"] = list( + CASINO_PRIZE("Implanter (Remember to get one unless you want to borrow from station!)", /obj/item/weapon/implanter, 1, 100, "implants"), + CASINO_PRIZE("Implant: Tazer", /obj/item/weapon/implantcase/taser, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Medkit", /obj/item/weapon/implantcase/medkit, 1, 500, "implants"), + CASINO_PRIZE("Implant: Shades", /obj/item/weapon/implantcase/shades, 1, 750, "implants"), + CASINO_PRIZE("Implant: Sprinter", /obj/item/weapon/implantcase/sprinter, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Toolkit", /obj/item/weapon/implantcase/toolkit, 1, 500, "implants"), + CASINO_PRIZE("Implant: Language", /obj/item/weapon/implantcase/vrlanguage, 1, 500, "implants"), + CASINO_PRIZE("Implant: Analyzer", /obj/item/weapon/implantcase/analyzer, 1, 500, "implants"), + CASINO_PRIZE("Implant: Size control", /obj/item/weapon/implant/sizecontrol , 1, 500, "implants"), + CASINO_PRIZE("Implant: Adrenaline", /obj/item/weapon/implantcase/adrenalin, 1, 500, "implants"), + CASINO_PRIZE("Implant: Armblade", /obj/item/weapon/implantcase/armblade, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Wrist dartgun", /obj/item/weapon/implantcase/dart, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Freedom", /obj/item/weapon/implantcase/freedom, 1, 500, "implants"), + CASINO_PRIZE("Implant: Handblade", /obj/item/weapon/implantcase/handblade, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Hand laser", /obj/item/weapon/implantcase/laser, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Loyalty", /obj/item/weapon/implantcase/loyalty, 1, 500, "implants"), + CASINO_PRIZE("Implant: Restraining bolt", /obj/item/weapon/implantcase/restrainingbolt, 1, 1000, "implants"), + CASINO_PRIZE("Implant: Surge", /obj/item/weapon/implantcase/surge, 1, 500, "implants"), + CASINO_PRIZE("Implant: Wrist sword", /obj/item/weapon/implantcase/sword, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: No breath", /obj/item/weapon/dnainjector/nobreath, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: Regenerate", /obj/item/weapon/dnainjector/regenerate, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: Remote view", /obj/item/weapon/dnainjector/remoteview, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: Sprinter", /obj/item/weapon/dnainjector/runfast, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: Telekinesis", /obj/item/weapon/dnainjector/telemut, 1, 1000, "implants"), + CASINO_PRIZE("Genemod: X-ray", /obj/item/weapon/dnainjector/xraymut, 1, 1000, "implants"), + ) + + item_list["Event"] = list( + ) + +/obj/machinery/casino_prize_dispenser/power_change() + ..() + if(stat & BROKEN) + icon_state = "[initial(icon_state)]-broken" + else + if(!(stat & NOPOWER)) + icon_state = initial(icon_state) + else + spawn(rand(0, 15)) + icon_state = "[initial(icon_state)]-off" + +/obj/machinery/casino_prize_dispenser/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/casino_prize_dispenser/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(currently_vending) + if(istype(W, /obj/item/weapon/spacecasinocash)) + to_chat(usr, "Please select prize on display with sufficient amount of chips.") + else + SStgui.update_uis(src) + return // don't smack that machine with your 2 chips + + if(istype(W, /obj/item/weapon/spacecasinocash)) + attack_hand(user) + return + ..() + +/obj/machinery/casino_prize_dispenser/proc/pay_with_chips(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user, var/price) + //"cashmoney_:[cashmoney] user:[user] currently_vending:[currently_vending]" + if(price > cashmoney.worth) + to_chat(usr, "\icon[cashmoney] That is not enough chips.") + return 0 + + if(istype(cashmoney, /obj/item/weapon/spacecasinocash)) + visible_message("\The [usr] inserts some chips into \the [src].") + cashmoney.worth -= price + + if(cashmoney.worth <= 0) + usr.drop_from_inventory(cashmoney) + qdel(cashmoney) + else + cashmoney.update_icon() + return 1 + +/obj/machinery/casino_prize_dispenser/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/vending), + ) + +/obj/machinery/casino_prize_dispenser/tgui_data(mob/user) + var/list/data[0] + + data["items"] = list() + for(var/cat in item_list) + var/list/cat_items = list() + for(var/prize_name in item_list[cat]) + var/datum/data/casino_prize/prize = item_list[cat][prize_name] + cat_items[prize_name] = list("name" = prize_name, "price" = prize.cost, "restriction" = prize.restriction) + data["items"][cat] = cat_items + return data + +/obj/machinery/casino_prize_dispenser/tgui_interact(mob/user, datum/tgui/ui = null) + // Open the window + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CasinoPrizeDispenserCh", name) + ui.open() + +/obj/machinery/casino_prize_dispenser/tgui_act(action, params) + if(stat & (BROKEN|NOPOWER)) + return + if(usr.stat || usr.restrained()) + return + if(..()) + return TRUE + . = TRUE + switch(action) + if("purchase") + var/paid = FALSE + var/category = params["cat"] + var/restriction_category = params["restriction"] + var/restriction_check = 0 + var/item_given = FALSE + var/name = params["name"] + var/price = params["price"] + var/datum/data/casino_prize/bi = item_list[category][name] + switch(restriction_category) + if("weapons") + restriction_check = category_weapons + if("gear") + restriction_check = category_gear + if("clothing") + restriction_check = category_clothing + if("misc") + restriction_check = category_misc + if("drinks") + restriction_check = category_drinks + if("pets") + restriction_check = category_pets + if("mechs") + restriction_check = category_mechs + if("implants") + restriction_check = category_implants + if("event") + restriction_check = category_event + else + to_chat(usr, "Prize checkout error has occured, purchase cancelled.") + return FALSE + + if(restriction_check < 1) + to_chat(usr, "[name] is restricted, this prize can't be bought.") + return FALSE + if(restriction_check > 1) + item_given = TRUE + + if(price <= 0 && item_given == TRUE) + vend(bi, usr) + return TRUE + + currently_vending = bi + + if(istype(usr.get_active_hand(), /obj/item/weapon/spacecasinocash)) + var/obj/item/weapon/spacecasinocash/cash = usr.get_active_hand() + paid = pay_with_chips(cash, usr, price) + else + to_chat(usr, "Payment failure: Improper payment method, please provide chips.") + return TRUE // we set this because they shouldn't even be able to get this far, and we want the UI to update. + if(paid) + if(item_given == TRUE) + vend(bi, usr) + + speak("Thank you for your purchase, your [bi] has been logged.") + do_logging(currently_vending, usr, bi) + . = TRUE + else + to_chat(usr, "Payment failure: unable to process payment.") + +/obj/machinery/casino_prize_dispenser/proc/vend(datum/data/casino_prize/bi, mob/user) + SStgui.update_uis(src) + + if(ispath(bi.equipment_path, /obj/item/stack)) + new bi.equipment_path(loc, bi.equipment_amt) + playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1) + return TRUE + + for(var/i in 1 to bi.equipment_amt) + new bi.equipment_path(loc) + playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1) + + currently_vending = null + use_power(vend_power_usage) //actuators and stuff + flick("[icon_state]-vend",src) + + +/obj/machinery/casino_prize_dispenser/proc/do_logging(item, mob/user, datum/data/casino_prize/bi) + var/prize_log = "{ckey:[user.ckey]character_name:[user.name]item_path: [bi.equipment_path]}" + log[++log.len] = prize_log + //Currently doesnt have an ingame way to show. Can only be viewed through View-Variables, to ensure theres no chance of players ckeys exposed - Jack + +/obj/machinery/casino_prize_dispenser/proc/speak(var/message) + if(stat & NOPOWER) + return + + if(!message) + return + + for(var/mob/O in hearers(src, null)) + O.show_message("\The [src] beeps, \"[message]\"",2) + return + +/obj/machinery/casino_prize_dispenser/process() //Might not need this, but just to be safe for now + if(stat & (BROKEN|NOPOWER)) + return diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 38ceea9f4b..28255c395a 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -1,140 +1,140 @@ -/obj/machinery/cell_charger - name = "heavy-duty cell charger" - desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." - icon = 'icons/obj/power.dmi' - icon_state = "ccharger0" - anchored = 1 - use_power = USE_POWER_IDLE - idle_power_usage = 5 - active_power_usage = 60000 //60 kW. (this the power drawn when charging) - var/efficiency = 60000 //will provide the modified power rate when upgraded - power_channel = EQUIP - var/obj/item/weapon/cell/charging = null - var/chargelevel = -1 - circuit = /obj/item/weapon/circuitboard/cell_charger - -/obj/machinery/cell_charger/Initialize() - . = ..() - default_apply_parts() - add_overlay("ccharger1") - -/obj/machinery/cell_charger/update_icon() - if(!anchored) - cut_overlays() - icon_state = "ccharger2" - - if(charging && !(stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4.0 / 99) - //to_world("nl: [newlevel]") - - if(chargelevel != newlevel) - - cut_overlays() - add_overlay("ccharger-o[newlevel]") - - chargelevel = newlevel - - add_overlay(image(charging.icon, charging.icon_state)) - add_overlay("ccharger-[charging.connector_type]-on") - - else if(anchored) - cut_overlays() - icon_state = "ccharger0" - add_overlay("ccharger1") - -/obj/machinery/cell_charger/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 5) - . += "[charging ? "[charging]" : "Nothing"] is in [src]." - if(charging) - . += "Current charge: [charging.charge] / [charging.maxcharge]" - -/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user) - if(stat & BROKEN) - return - - if(istype(W, /obj/item/weapon/cell) && anchored) - if(istype(W, /obj/item/weapon/cell/device)) - to_chat(user, "\The [src] isn't fitted for that type of cell.") - return - if(charging) - to_chat(user, "There is already [charging] in [src].") - 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, "\The [src] blinks red as you try to insert [W]!") - return - - user.drop_item() - W.loc = src - charging = W - user.visible_message("[user] inserts [charging] into [src].", "You insert [charging] into [src].") - chargelevel = -1 - update_icon() - else if(W.has_tool_quality(TOOL_WRENCH)) - if(charging) - to_chat(user, "Remove [charging] first!") - return - - anchored = !anchored - to_chat(user, "You [anchored ? "attach" : "detach"] [src] [anchored ? "to" : "from"] the ground") - playsound(src, W.usesound, 75, 1) - update_icon() - else if(default_deconstruction_screwdriver(user, W)) - return - else if(default_deconstruction_crowbar(user, W)) - return - else if(default_part_replacement(user, W)) - return - -/obj/machinery/cell_charger/attack_hand(mob/user) - add_fingerprint(user) - - if(charging) - user.put_in_hands(charging) - charging.update_icon() - user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].") - - charging = null - chargelevel = -1 - update_icon() - -/obj/machinery/cell_charger/attack_ai(mob/user) - if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Borgs can remove the cell if they are near enough - if(charging) - user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].") - charging.loc = src.loc - charging.update_icon() - charging = null - update_icon() - -/obj/machinery/cell_charger/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return - if(charging) - charging.emp_act(severity) - ..(severity) - - -/obj/machinery/cell_charger/process() - //to_world("ccpt [charging] [stat]") - if((stat & (BROKEN|NOPOWER)) || !anchored) - update_use_power(USE_POWER_OFF) - return - - if(charging && !charging.fully_charged()) - charging.give(efficiency*CELLRATE) - update_use_power(USE_POWER_ACTIVE) - - update_icon() - else - update_use_power(USE_POWER_IDLE) - -/obj/machinery/cell_charger/RefreshParts() - var/E = 0 - for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) - E += C.rating +/obj/machinery/cell_charger + name = "heavy-duty cell charger" + desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." + icon = 'icons/obj/power.dmi' + icon_state = "ccharger0" + anchored = 1 + use_power = USE_POWER_IDLE + idle_power_usage = 5 + active_power_usage = 60000 //60 kW. (this the power drawn when charging) + var/efficiency = 60000 //will provide the modified power rate when upgraded + power_channel = EQUIP + var/obj/item/weapon/cell/charging = null + var/chargelevel = -1 + circuit = /obj/item/weapon/circuitboard/cell_charger + +/obj/machinery/cell_charger/Initialize() + . = ..() + default_apply_parts() + add_overlay("ccharger1") + +/obj/machinery/cell_charger/update_icon() + if(!anchored) + cut_overlays() + icon_state = "ccharger2" + + if(charging && !(stat & (BROKEN|NOPOWER))) + var/newlevel = round(charging.percent() * 4.0 / 99) + //to_world("nl: [newlevel]") + + if(chargelevel != newlevel) + + cut_overlays() + add_overlay("ccharger-o[newlevel]") + + chargelevel = newlevel + + add_overlay(image(charging.icon, charging.icon_state)) + add_overlay("ccharger-[charging.connector_type]-on") + + else if(anchored) + cut_overlays() + icon_state = "ccharger0" + add_overlay("ccharger1") + +/obj/machinery/cell_charger/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 5) + . += "[charging ? "[charging]" : "Nothing"] is in [src]." + if(charging) + . += "Current charge: [charging.charge] / [charging.maxcharge]" + +/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user) + if(stat & BROKEN) + return + + if(istype(W, /obj/item/weapon/cell) && anchored) + if(istype(W, /obj/item/weapon/cell/device)) + to_chat(user, "\The [src] isn't fitted for that type of cell.") + return + if(charging) + to_chat(user, "There is already [charging] in [src].") + 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, "\The [src] blinks red as you try to insert [W]!") + return + + user.drop_item() + W.loc = src + charging = W + user.visible_message("[user] inserts [charging] into [src].", "You insert [charging] into [src].") + chargelevel = -1 + update_icon() + else if(W.has_tool_quality(TOOL_WRENCH)) + if(charging) + to_chat(user, "Remove [charging] first!") + return + + anchored = !anchored + to_chat(user, "You [anchored ? "attach" : "detach"] [src] [anchored ? "to" : "from"] the ground") + playsound(src, W.usesound, 75, 1) + update_icon() + else if(default_deconstruction_screwdriver(user, W)) + return + else if(default_deconstruction_crowbar(user, W)) + return + else if(default_part_replacement(user, W)) + return + +/obj/machinery/cell_charger/attack_hand(mob/user) + add_fingerprint(user) + + if(charging) + user.put_in_hands(charging) + charging.update_icon() + user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].") + + charging = null + chargelevel = -1 + update_icon() + +/obj/machinery/cell_charger/attack_ai(mob/user) + if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Borgs can remove the cell if they are near enough + if(charging) + user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].") + charging.loc = src.loc + charging.update_icon() + charging = null + update_icon() + +/obj/machinery/cell_charger/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(charging) + charging.emp_act(severity) + ..(severity) + + +/obj/machinery/cell_charger/process() + //to_world("ccpt [charging] [stat]") + if((stat & (BROKEN|NOPOWER)) || !anchored) + update_use_power(USE_POWER_OFF) + return + + if(charging && !charging.fully_charged()) + charging.give(efficiency*CELLRATE) + update_use_power(USE_POWER_ACTIVE) + + update_icon() + else + update_use_power(USE_POWER_IDLE) + +/obj/machinery/cell_charger/RefreshParts() + var/E = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + E += C.rating efficiency = active_power_usage * (1+ (E - 1)*0.5) \ No newline at end of file diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 4f5a37f68d..da958671e7 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -1,590 +1,590 @@ -//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 (?) - -//Find a dead mob with a brain and client. -/proc/find_dead_player(var/find_key) - if(isnull(find_key)) - return - - var/mob/selected = null - for(var/mob/living/M in player_list) - //Dead people only thanks! - if((M.stat != 2) || (!M.client)) - continue - //They need a brain! - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(!H.has_brain()) - continue - if(M.ckey == find_key) - selected = M - break - return selected - -#define CLONE_BIOMASS 30 //VOREstation Edit -#define MINIMUM_HEAL_LEVEL 40 - -/obj/machinery/clonepod - name = "cloning pod" - desc = "An electronically-lockable pod for growing organic tissue." - density = TRUE - anchored = TRUE - circuit = /obj/item/weapon/circuitboard/clonepod - icon = 'icons/obj/cloning.dmi' - icon_state = "pod_0" - req_access = list(access_genetics) // For premature unlocking. - var/mob/living/occupant - var/heal_level = 20 // The clone is released once its health reaches this level. - var/heal_rate = 1 - var/locked = 0 - var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. - var/mess = 0 // Need to clean out it if it's full of exploded clone. - var/attempting = 0 // One clone attempt at a time thanks - var/eject_wait = 0 // Don't eject them as soon as they are created fuckkk - - var/list/containers = list() // Beakers for our liquid biomass - var/container_limit = 3 // How many beakers can the machine hold? - - var/speed_coeff - var/efficiency - -/obj/machinery/clonepod/Initialize() - . = ..() - default_apply_parts() - update_icon() - -/obj/machinery/clonepod/attack_ai(mob/user as mob) - - add_hiddenprint(user) - return attack_hand(user) - -/obj/machinery/clonepod/attack_hand(mob/user as mob) - if((isnull(occupant)) || (stat & NOPOWER)) - return - if((!isnull(occupant)) && (occupant.stat != 2)) - var/completion = (100 * ((occupant.health + 50) / (heal_level + 100))) // Clones start at -150 health - to_chat(user, "Current clone cycle is [round(completion)]% complete.") - return - -//Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(var/datum/dna2/record/R) - if(mess || attempting) - return 0 - var/datum/mind/clonemind = locate(R.mind) - - if(!istype(clonemind, /datum/mind)) //not a mind - return 0 - if(clonemind.current && clonemind.current.stat != DEAD) //mind is associated with a non-dead body - return 0 - if(clonemind.active) //somebody is using that mind - if(ckey(clonemind.key) != R.ckey) - return 0 - else - for(var/mob/observer/dead/G in player_list) - if(G.ckey == R.ckey) - if(G.can_reenter_corpse) - break - else - return 0 - - for(var/modifier_type in R.genetic_modifiers) //Can't be cloned, even if they had a previous scan - if(istype(modifier_type, /datum/modifier/no_clone)) - return 0 - - // Remove biomass when the cloning is started, rather than when the guy pops out - remove_biomass(CLONE_BIOMASS) - - attempting = 1 //One at a time!! - locked = 1 - - eject_wait = 1 - spawn(30) - eject_wait = 0 - - var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) - occupant = H - - if(!R.dna.real_name) //to prevent null names - R.dna.real_name = "clone ([rand(0,999)])" - H.real_name = R.dna.real_name - H.gender = R.gender - H.descriptors = R.body_descriptors - - //Get the clone body ready - H.adjustCloneLoss(150) // New damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite - H.Paralyse(4) - - //Here let's calculate their health so the pod doesn't immediately eject them!!! - H.updatehealth() - - clonemind.transfer_to(H) - H.ckey = R.ckey - to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
    Your recent memories are fuzzy, and it's hard to remember anything from today...

    So this is what cloning feels like?") - - // -- Mode/mind specific stuff goes here - callHook("clone", list(H)) - update_antag_icons(H.mind) - // -- End mode specific stuff - - if(!R.dna) - H.dna = new /datum/dna() - H.dna.real_name = H.real_name - else - H.dna = R.dna - H.UpdateAppearance() - H.sync_organ_dna() - if(heal_level < 60) - randmutb(H) //Sometimes the clones come out wrong. - H.dna.UpdateSE() - H.dna.UpdateUI() - - H.set_cloned_appearance() - update_icon() - - // A modifier is added which makes the new clone be unrobust. - var/modifier_lower_bound = 25 MINUTES - var/modifier_upper_bound = 40 MINUTES - - // Upgraded cloners can reduce the time of the modifier, up to 80% - var/clone_sickness_length = abs(((heal_level - 20) / 100 ) - 1) - clone_sickness_length = between(0.2, clone_sickness_length, 1.0) // Caps it off just incase. - modifier_lower_bound = round(modifier_lower_bound * clone_sickness_length, 1) - modifier_upper_bound = round(modifier_upper_bound * clone_sickness_length, 1) - - H.add_modifier(H.species.cloning_modifier, rand(modifier_lower_bound, modifier_upper_bound)) - - // Modifier that doesn't do anything. - H.add_modifier(/datum/modifier/cloned) - - // This is really stupid. - for(var/modifier_type in R.genetic_modifiers) - H.add_modifier(modifier_type) - - for(var/datum/language/L in R.languages) - H.add_language(L.name) - - H.flavor_texts = R.flavor.Copy() - H.suiciding = 0 - attempting = 0 - return 1 - -//Grow clones to maturity then kick them out. FREELOADERS -/obj/machinery/clonepod/process() - if(stat & NOPOWER) //Autoeject if power is lost - if(occupant) - locked = 0 - go_out() - return - - if((occupant) && (occupant.loc == src)) - if((occupant.stat == DEAD) || (occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes. - locked = 0 - go_out() - connected_message("Clone Rejected: Deceased.") - return - - else if(occupant.health < heal_level && occupant.getCloneLoss() > 0) - occupant.Paralyse(4) - - //Slowly get that clone healed and finished. - occupant.adjustCloneLoss(-2 * heal_rate) - - //Premature clones may have brain damage. - occupant.adjustBrainLoss(-(CEILING(0.5*heal_rate, 1))) - - //So clones don't die of oxyloss in a running pod. - if(occupant.reagents.get_reagent_amount("inaprovaline") < 30) - occupant.reagents.add_reagent("inaprovaline", 60) - occupant.Sleeping(30) - //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! - occupant.adjustOxyLoss(-4) - - use_power(7500) //This might need tweaking. - return - - else if((occupant.health >= heal_level || occupant.health == occupant.getMaxHealth()) && (!eject_wait)) - playsound(src, 'sound/machines/medbayscanner1.ogg', 50, 1) - audible_message("\The [src] signals that the cloning process is complete.", runemessage = "ding") - connected_message("Cloning Process Complete.") - locked = 0 - go_out() - return - - else if((!occupant) || (occupant.loc != src)) - occupant = null - if(locked) - locked = 0 - return - - return - -//Let's unlock this early I guess. Might be too early, needs tweaking. -/obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(isnull(occupant)) - if(default_deconstruction_screwdriver(user, W)) - return - if(default_deconstruction_crowbar(user, W)) - return - if(default_part_replacement(user, W)) - return - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if(!check_access(W)) - to_chat(user, "Access Denied.") - return - if((!locked) || (isnull(occupant))) - return - if((occupant.health < -20) && (occupant.stat != 2)) - to_chat(user, "Access Refused.") - return - else - locked = 0 - to_chat(user, "System unlocked.") - else if(istype(W,/obj/item/weapon/reagent_containers/glass)) - if(LAZYLEN(containers) >= container_limit) - to_chat(user, "\The [src] has too many containers loaded!") - else if(do_after(user, 1 SECOND)) - user.visible_message("[user] has loaded \the [W] into \the [src].", "You load \the [W] into \the [src].") - containers += W - user.drop_item() - W.forceMove(src) - return - else if(W.has_tool_quality(TOOL_WRENCH)) - if(locked && (anchored || occupant)) - to_chat(user, "Can not do that while [src] is in use.") - else - if(anchored) - anchored = FALSE - connected.pods -= src - connected = null - else - anchored = TRUE - playsound(src, W.usesound, 100, 1) - if(anchored) - user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.") - else - user.visible_message("[user] unsecures [src] from the floor.", "You unsecure [src] from the floor.") - else if(istype(W, /obj/item/device/multitool)) - var/obj/item/device/multitool/M = W - M.connecting = src - to_chat(user, "You load connection data from [src] to [M].") - M.update_icon() - return - else - ..() - -/obj/machinery/clonepod/emag_act(var/remaining_charges, var/mob/user) - if(isnull(occupant)) - return - to_chat(user, "You force an emergency ejection.") - locked = 0 - go_out() - return 1 - -//Put messages in the connected computer's temp var for display. -/obj/machinery/clonepod/proc/connected_message(var/message) - if((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning))) - return 0 - if(!message) - return 0 - - connected.temp = "[name] : [message]" - connected.updateUsrDialog() - return 1 - -/obj/machinery/clonepod/RefreshParts() - ..() - speed_coeff = 0 - efficiency = 0 - for(var/obj/item/weapon/stock_parts/scanning_module/S in component_parts) - efficiency += S.rating - for(var/obj/item/weapon/stock_parts/manipulator/P in component_parts) - speed_coeff += P.rating - heal_level = max(min((efficiency * 15) + 10, 100), MINIMUM_HEAL_LEVEL) - -/obj/machinery/clonepod/proc/get_completion() - . = (100 * ((occupant.health + 100) / (heal_level + 100))) - -/obj/machinery/clonepod/verb/eject() - set name = "Eject Cloner" - set category = "Object" - set src in oview(1) - - if(usr.stat != 0) - return - go_out() - add_fingerprint(usr) - return - -/obj/machinery/clonepod/proc/go_out() - if(locked) - return - - if(mess) //Clean that mess and dump those gibs! - mess = 0 - gibs(src.loc) - update_icon() - return - - if(!(occupant)) - return - - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.loc = src.loc - eject_wait = 0 //If it's still set somehow. - if(ishuman(occupant)) //Need to be safe. - var/mob/living/carbon/human/patient = occupant - if(!(patient.species.flags & NO_SCAN)) //If, for some reason, someone makes a genetically-unalterable clone, let's not make them permanently disabled. - domutcheck(occupant) //Waiting until they're out before possible transforming. - occupant = null - - update_icon() - return - -// Returns the total amount of biomass reagent in all of the pod's stored containers -/obj/machinery/clonepod/proc/get_biomass() - var/biomass_count = 0 - if(LAZYLEN(containers)) - for(var/obj/item/weapon/reagent_containers/glass/G in containers) - for(var/datum/reagent/R in G.reagents.reagent_list) - if(R.id == "biomass") - biomass_count += R.volume - - return biomass_count - -// Removes [amount] biomass, spread across all containers. Doesn't have any check that you actually HAVE enough biomass, though. -/obj/machinery/clonepod/proc/remove_biomass(var/amount = CLONE_BIOMASS) //Just in case it doesn't get passed a new amount, assume one clone - var/to_remove = 0 // Tracks how much biomass has been found so far - if(LAZYLEN(containers)) - for(var/obj/item/weapon/reagent_containers/glass/G in containers) - if(to_remove < amount) //If we have what we need, we can stop. Checked every time we switch beakers - for(var/datum/reagent/R in G.reagents.reagent_list) - if(R.id == "biomass") // Finds Biomass - var/need_remove = max(0, amount - to_remove) //Figures out how much biomass is in this container - if(R.volume >= need_remove) //If we have more than enough in this beaker, only take what we need - R.remove_self(need_remove) - to_remove = amount - else //Otherwise, take everything and move on - to_remove += R.volume - R.remove_self(R.volume) - else - continue - else - return 1 - return 0 - -// Empties all of the beakers from the cloning pod, used to refill it -/obj/machinery/clonepod/verb/empty_beakers() - set name = "Eject Beakers" - set category = "Object" - set src in oview(1) - - if(usr.stat != 0) - return - - add_fingerprint(usr) - drop_beakers() - return - -// Actually does all of the beaker dropping -// Returns 1 if it succeeds, 0 if it fails. Added in case someone wants to add messages to the user. -/obj/machinery/clonepod/proc/drop_beakers() - if(LAZYLEN(containers)) - var/turf/T = get_turf(src) - if(T) - for(var/obj/item/weapon/reagent_containers/glass/G in containers) - G.forceMove(T) - containers -= G - return 1 - return 0 - -/obj/machinery/clonepod/proc/malfunction() - if(occupant) - connected_message("Critical Error!") - mess = 1 - update_icon() - occupant.ghostize() - spawn(5) - qdel(occupant) - return - -/obj/machinery/clonepod/relaymove(mob/user as mob) - if(user.stat) - return - go_out() - return - -/obj/machinery/clonepod/emp_act(severity) - if(prob(100/severity)) - malfunction() - ..() - -/obj/machinery/clonepod/ex_act(severity) - switch(severity) - if(1.0) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - qdel(src) - return - if(2.0) - if(prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - qdel(src) - return - if(3.0) - if(prob(25)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - qdel(src) - return - else - return - -/obj/machinery/clonepod/update_icon() - ..() - icon_state = "pod_0" - if(occupant && !(stat & NOPOWER)) - icon_state = "pod_1" - else if(mess) - icon_state = "pod_g" - - -/obj/machinery/clonepod/full/New() - ..() - for(var/i = 1 to container_limit) - containers += new /obj/item/weapon/reagent_containers/glass/bottle/biomass(src) - -//Health Tracker Implant - -/obj/item/weapon/implant/health - name = "health implant" - known_implant = TRUE - var/healthstring = "" - -/obj/item/weapon/implant/health/proc/sensehealth() - if(!implanted) - return "ERROR" - else - if(isliving(implanted)) - var/mob/living/L = implanted - healthstring = "[round(L.getOxyLoss())] - [round(L.getFireLoss())] - [round(L.getToxLoss())] - [round(L.getBruteLoss())]" - if(!healthstring) - healthstring = "ERROR" - return healthstring - -//Disk stuff. -//The return of data disks?? Just for transferring between genetics machine/cloning machine. -//TO-DO: Make the genetics machine accept them. -/obj/item/weapon/disk/data - name = "Cloning Data Disk" - icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit - icon_state = "data-red" //VOREStation Edit - item_state = "card-id" - w_class = ITEMSIZE_SMALL - var/datum/dna2/record/buf = null - var/read_only = 0 //Well,it's still a floppy disk - -/obj/item/weapon/disk/data/proc/initializeDisk() - buf = new - buf.dna=new - -/obj/item/weapon/disk/data/demo - name = "data disk - 'God Emperor of Mankind'" - read_only = 1 - -/obj/item/weapon/disk/data/demo/New() - initializeDisk() - buf.types=DNA2_BUF_UE|DNA2_BUF_UI - //data = "066000033000000000AF00330660FF4DB002690" - //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff - buf.dna.real_name="God Emperor of Mankind" - buf.dna.unique_enzymes = md5(buf.dna.real_name) - buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0xAF0,0x033,0x066,0x0FF,0x4DB,0x002,0x690) - //buf.dna.UI=list(0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x000,0x000,0x000,0x000,0x161,0xFBD,0xDEF) // Farmer Jeff - buf.dna.UpdateUI() - -/obj/item/weapon/disk/data/monkey - name = "data disk - 'Mr. Muggles'" - read_only = 1 - -/obj/item/weapon/disk/data/monkey/New() - ..() - initializeDisk() - buf.types=DNA2_BUF_SE - var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) - for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++) - new_SE += rand(1,1024) - buf.dna.SE=new_SE - buf.dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF) - -/obj/item/weapon/disk/data/New() - ..() - var/diskcolor = pick(0,1,2) - icon_state = "datadisk[diskcolor]" - -/obj/item/weapon/disk/data/attack_self(mob/user as mob) - read_only = !read_only - to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].") - -/obj/item/weapon/disk/data/examine(mob/user) - . = ..() - . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." - -/* - * Diskette Box - */ - -/obj/item/weapon/storage/box/disks - name = "Diskette Box" - icon_state = "disk_kit" - -/obj/item/weapon/storage/box/disks/New() - ..() - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - new /obj/item/weapon/disk/data(src) - -/* - * Manual -- A big ol' manual. - */ - -/obj/item/weapon/paper/Cloning - name = "H-87 Cloning Apparatus Manual" - info = {"

    Getting Started

    - Congratulations, your 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 your 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 your 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."} - -//SOME SCRAPS I GUESS -/* EMP grenade/spell effect - if(istype(A, /obj/machinery/clonepod)) - A:malfunction() -*/ +//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 (?) + +//Find a dead mob with a brain and client. +/proc/find_dead_player(var/find_key) + if(isnull(find_key)) + return + + var/mob/selected = null + for(var/mob/living/M in player_list) + //Dead people only thanks! + if((M.stat != 2) || (!M.client)) + continue + //They need a brain! + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(!H.has_brain()) + continue + if(M.ckey == find_key) + selected = M + break + return selected + +#define CLONE_BIOMASS 30 //VOREstation Edit +#define MINIMUM_HEAL_LEVEL 40 + +/obj/machinery/clonepod + name = "cloning pod" + desc = "An electronically-lockable pod for growing organic tissue." + density = TRUE + anchored = TRUE + circuit = /obj/item/weapon/circuitboard/clonepod + icon = 'icons/obj/cloning.dmi' + icon_state = "pod_0" + req_access = list(access_genetics) // For premature unlocking. + var/mob/living/occupant + var/heal_level = 20 // The clone is released once its health reaches this level. + var/heal_rate = 1 + var/locked = 0 + var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. + var/mess = 0 // Need to clean out it if it's full of exploded clone. + var/attempting = 0 // One clone attempt at a time thanks + var/eject_wait = 0 // Don't eject them as soon as they are created fuckkk + + var/list/containers = list() // Beakers for our liquid biomass + var/container_limit = 3 // How many beakers can the machine hold? + + var/speed_coeff + var/efficiency + +/obj/machinery/clonepod/Initialize() + . = ..() + default_apply_parts() + update_icon() + +/obj/machinery/clonepod/attack_ai(mob/user as mob) + + add_hiddenprint(user) + return attack_hand(user) + +/obj/machinery/clonepod/attack_hand(mob/user as mob) + if((isnull(occupant)) || (stat & NOPOWER)) + return + if((!isnull(occupant)) && (occupant.stat != 2)) + var/completion = (100 * ((occupant.health + 50) / (heal_level + 100))) // Clones start at -150 health + to_chat(user, "Current clone cycle is [round(completion)]% complete.") + return + +//Start growing a human clone in the pod! +/obj/machinery/clonepod/proc/growclone(var/datum/dna2/record/R) + if(mess || attempting) + return 0 + var/datum/mind/clonemind = locate(R.mind) + + if(!istype(clonemind, /datum/mind)) //not a mind + return 0 + if(clonemind.current && clonemind.current.stat != DEAD) //mind is associated with a non-dead body + return 0 + if(clonemind.active) //somebody is using that mind + if(ckey(clonemind.key) != R.ckey) + return 0 + else + for(var/mob/observer/dead/G in player_list) + if(G.ckey == R.ckey) + if(G.can_reenter_corpse) + break + else + return 0 + + for(var/modifier_type in R.genetic_modifiers) //Can't be cloned, even if they had a previous scan + if(istype(modifier_type, /datum/modifier/no_clone)) + return 0 + + // Remove biomass when the cloning is started, rather than when the guy pops out + remove_biomass(CLONE_BIOMASS) + + attempting = 1 //One at a time!! + locked = 1 + + eject_wait = 1 + spawn(30) + eject_wait = 0 + + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) + occupant = H + + if(!R.dna.real_name) //to prevent null names + R.dna.real_name = "clone ([rand(0,999)])" + H.real_name = R.dna.real_name + H.gender = R.gender + H.descriptors = R.body_descriptors + + //Get the clone body ready + H.adjustCloneLoss(150) // New damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite + H.Paralyse(4) + + //Here let's calculate their health so the pod doesn't immediately eject them!!! + H.updatehealth() + + clonemind.transfer_to(H) + H.ckey = R.ckey + to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
    Your recent memories are fuzzy, and it's hard to remember anything from today...

    So this is what cloning feels like?") + + // -- Mode/mind specific stuff goes here + callHook("clone", list(H)) + update_antag_icons(H.mind) + // -- End mode specific stuff + + if(!R.dna) + H.dna = new /datum/dna() + H.dna.real_name = H.real_name + else + H.dna = R.dna + H.UpdateAppearance() + H.sync_organ_dna() + if(heal_level < 60) + randmutb(H) //Sometimes the clones come out wrong. + H.dna.UpdateSE() + H.dna.UpdateUI() + + H.set_cloned_appearance() + update_icon() + + // A modifier is added which makes the new clone be unrobust. + var/modifier_lower_bound = 25 MINUTES + var/modifier_upper_bound = 40 MINUTES + + // Upgraded cloners can reduce the time of the modifier, up to 80% + var/clone_sickness_length = abs(((heal_level - 20) / 100 ) - 1) + clone_sickness_length = between(0.2, clone_sickness_length, 1.0) // Caps it off just incase. + modifier_lower_bound = round(modifier_lower_bound * clone_sickness_length, 1) + modifier_upper_bound = round(modifier_upper_bound * clone_sickness_length, 1) + + H.add_modifier(H.species.cloning_modifier, rand(modifier_lower_bound, modifier_upper_bound)) + + // Modifier that doesn't do anything. + H.add_modifier(/datum/modifier/cloned) + + // This is really stupid. + for(var/modifier_type in R.genetic_modifiers) + H.add_modifier(modifier_type) + + for(var/datum/language/L in R.languages) + H.add_language(L.name) + + H.flavor_texts = R.flavor.Copy() + H.suiciding = 0 + attempting = 0 + return 1 + +//Grow clones to maturity then kick them out. FREELOADERS +/obj/machinery/clonepod/process() + if(stat & NOPOWER) //Autoeject if power is lost + if(occupant) + locked = 0 + go_out() + return + + if((occupant) && (occupant.loc == src)) + if((occupant.stat == DEAD) || (occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes. + locked = 0 + go_out() + connected_message("Clone Rejected: Deceased.") + return + + else if(occupant.health < heal_level && occupant.getCloneLoss() > 0) + occupant.Paralyse(4) + + //Slowly get that clone healed and finished. + occupant.adjustCloneLoss(-2 * heal_rate) + + //Premature clones may have brain damage. + occupant.adjustBrainLoss(-(CEILING(0.5*heal_rate, 1))) + + //So clones don't die of oxyloss in a running pod. + if(occupant.reagents.get_reagent_amount("inaprovaline") < 30) + occupant.reagents.add_reagent("inaprovaline", 60) + occupant.Sleeping(30) + //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! + occupant.adjustOxyLoss(-4) + + use_power(7500) //This might need tweaking. + return + + else if((occupant.health >= heal_level || occupant.health == occupant.getMaxHealth()) && (!eject_wait)) + playsound(src, 'sound/machines/medbayscanner1.ogg', 50, 1) + audible_message("\The [src] signals that the cloning process is complete.", runemessage = "ding") + connected_message("Cloning Process Complete.") + locked = 0 + go_out() + return + + else if((!occupant) || (occupant.loc != src)) + occupant = null + if(locked) + locked = 0 + return + + return + +//Let's unlock this early I guess. Might be too early, needs tweaking. +/obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(isnull(occupant)) + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(default_part_replacement(user, W)) + return + if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if(!check_access(W)) + to_chat(user, "Access Denied.") + return + if((!locked) || (isnull(occupant))) + return + if((occupant.health < -20) && (occupant.stat != 2)) + to_chat(user, "Access Refused.") + return + else + locked = 0 + to_chat(user, "System unlocked.") + else if(istype(W,/obj/item/weapon/reagent_containers/glass)) + if(LAZYLEN(containers) >= container_limit) + to_chat(user, "\The [src] has too many containers loaded!") + else if(do_after(user, 1 SECOND)) + user.visible_message("[user] has loaded \the [W] into \the [src].", "You load \the [W] into \the [src].") + containers += W + user.drop_item() + W.forceMove(src) + return + else if(W.has_tool_quality(TOOL_WRENCH)) + if(locked && (anchored || occupant)) + to_chat(user, "Can not do that while [src] is in use.") + else + if(anchored) + anchored = FALSE + connected.pods -= src + connected = null + else + anchored = TRUE + playsound(src, W.usesound, 100, 1) + if(anchored) + user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.") + else + user.visible_message("[user] unsecures [src] from the floor.", "You unsecure [src] from the floor.") + else if(istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = W + M.connecting = src + to_chat(user, "You load connection data from [src] to [M].") + M.update_icon() + return + else + ..() + +/obj/machinery/clonepod/emag_act(var/remaining_charges, var/mob/user) + if(isnull(occupant)) + return + to_chat(user, "You force an emergency ejection.") + locked = 0 + go_out() + return 1 + +//Put messages in the connected computer's temp var for display. +/obj/machinery/clonepod/proc/connected_message(var/message) + if((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning))) + return 0 + if(!message) + return 0 + + connected.temp = "[name] : [message]" + connected.updateUsrDialog() + return 1 + +/obj/machinery/clonepod/RefreshParts() + ..() + speed_coeff = 0 + efficiency = 0 + for(var/obj/item/weapon/stock_parts/scanning_module/S in component_parts) + efficiency += S.rating + for(var/obj/item/weapon/stock_parts/manipulator/P in component_parts) + speed_coeff += P.rating + heal_level = max(min((efficiency * 15) + 10, 100), MINIMUM_HEAL_LEVEL) + +/obj/machinery/clonepod/proc/get_completion() + . = (100 * ((occupant.health + 100) / (heal_level + 100))) + +/obj/machinery/clonepod/verb/eject() + set name = "Eject Cloner" + set category = "Object" + set src in oview(1) + + if(usr.stat != 0) + return + go_out() + add_fingerprint(usr) + return + +/obj/machinery/clonepod/proc/go_out() + if(locked) + return + + if(mess) //Clean that mess and dump those gibs! + mess = 0 + gibs(src.loc) + update_icon() + return + + if(!(occupant)) + return + + if(occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + occupant.loc = src.loc + eject_wait = 0 //If it's still set somehow. + if(ishuman(occupant)) //Need to be safe. + var/mob/living/carbon/human/patient = occupant + if(!(patient.species.flags & NO_SCAN)) //If, for some reason, someone makes a genetically-unalterable clone, let's not make them permanently disabled. + domutcheck(occupant) //Waiting until they're out before possible transforming. + occupant = null + + update_icon() + return + +// Returns the total amount of biomass reagent in all of the pod's stored containers +/obj/machinery/clonepod/proc/get_biomass() + var/biomass_count = 0 + if(LAZYLEN(containers)) + for(var/obj/item/weapon/reagent_containers/glass/G in containers) + for(var/datum/reagent/R in G.reagents.reagent_list) + if(R.id == "biomass") + biomass_count += R.volume + + return biomass_count + +// Removes [amount] biomass, spread across all containers. Doesn't have any check that you actually HAVE enough biomass, though. +/obj/machinery/clonepod/proc/remove_biomass(var/amount = CLONE_BIOMASS) //Just in case it doesn't get passed a new amount, assume one clone + var/to_remove = 0 // Tracks how much biomass has been found so far + if(LAZYLEN(containers)) + for(var/obj/item/weapon/reagent_containers/glass/G in containers) + if(to_remove < amount) //If we have what we need, we can stop. Checked every time we switch beakers + for(var/datum/reagent/R in G.reagents.reagent_list) + if(R.id == "biomass") // Finds Biomass + var/need_remove = max(0, amount - to_remove) //Figures out how much biomass is in this container + if(R.volume >= need_remove) //If we have more than enough in this beaker, only take what we need + R.remove_self(need_remove) + to_remove = amount + else //Otherwise, take everything and move on + to_remove += R.volume + R.remove_self(R.volume) + else + continue + else + return 1 + return 0 + +// Empties all of the beakers from the cloning pod, used to refill it +/obj/machinery/clonepod/verb/empty_beakers() + set name = "Eject Beakers" + set category = "Object" + set src in oview(1) + + if(usr.stat != 0) + return + + add_fingerprint(usr) + drop_beakers() + return + +// Actually does all of the beaker dropping +// Returns 1 if it succeeds, 0 if it fails. Added in case someone wants to add messages to the user. +/obj/machinery/clonepod/proc/drop_beakers() + if(LAZYLEN(containers)) + var/turf/T = get_turf(src) + if(T) + for(var/obj/item/weapon/reagent_containers/glass/G in containers) + G.forceMove(T) + containers -= G + return 1 + return 0 + +/obj/machinery/clonepod/proc/malfunction() + if(occupant) + connected_message("Critical Error!") + mess = 1 + update_icon() + occupant.ghostize() + spawn(5) + qdel(occupant) + return + +/obj/machinery/clonepod/relaymove(mob/user as mob) + if(user.stat) + return + go_out() + return + +/obj/machinery/clonepod/emp_act(severity) + if(prob(100/severity)) + malfunction() + ..() + +/obj/machinery/clonepod/ex_act(severity) + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + qdel(src) + return + if(2.0) + if(prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + qdel(src) + return + if(3.0) + if(prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + qdel(src) + return + else + return + +/obj/machinery/clonepod/update_icon() + ..() + icon_state = "pod_0" + if(occupant && !(stat & NOPOWER)) + icon_state = "pod_1" + else if(mess) + icon_state = "pod_g" + + +/obj/machinery/clonepod/full/New() + ..() + for(var/i = 1 to container_limit) + containers += new /obj/item/weapon/reagent_containers/glass/bottle/biomass(src) + +//Health Tracker Implant + +/obj/item/weapon/implant/health + name = "health implant" + known_implant = TRUE + var/healthstring = "" + +/obj/item/weapon/implant/health/proc/sensehealth() + if(!implanted) + return "ERROR" + else + if(isliving(implanted)) + var/mob/living/L = implanted + healthstring = "[round(L.getOxyLoss())] - [round(L.getFireLoss())] - [round(L.getToxLoss())] - [round(L.getBruteLoss())]" + if(!healthstring) + healthstring = "ERROR" + return healthstring + +//Disk stuff. +//The return of data disks?? Just for transferring between genetics machine/cloning machine. +//TO-DO: Make the genetics machine accept them. +/obj/item/weapon/disk/data + name = "Cloning Data Disk" + icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit + icon_state = "data-red" //VOREStation Edit + item_state = "card-id" + w_class = ITEMSIZE_SMALL + var/datum/dna2/record/buf = null + var/read_only = 0 //Well,it's still a floppy disk + +/obj/item/weapon/disk/data/proc/initializeDisk() + buf = new + buf.dna=new + +/obj/item/weapon/disk/data/demo + name = "data disk - 'God Emperor of Mankind'" + read_only = 1 + +/obj/item/weapon/disk/data/demo/New() + initializeDisk() + buf.types=DNA2_BUF_UE|DNA2_BUF_UI + //data = "066000033000000000AF00330660FF4DB002690" + //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff + buf.dna.real_name="God Emperor of Mankind" + buf.dna.unique_enzymes = md5(buf.dna.real_name) + buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0xAF0,0x033,0x066,0x0FF,0x4DB,0x002,0x690) + //buf.dna.UI=list(0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x000,0x000,0x000,0x000,0x161,0xFBD,0xDEF) // Farmer Jeff + buf.dna.UpdateUI() + +/obj/item/weapon/disk/data/monkey + name = "data disk - 'Mr. Muggles'" + read_only = 1 + +/obj/item/weapon/disk/data/monkey/New() + ..() + initializeDisk() + buf.types=DNA2_BUF_SE + var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) + for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++) + new_SE += rand(1,1024) + buf.dna.SE=new_SE + buf.dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF) + +/obj/item/weapon/disk/data/New() + ..() + var/diskcolor = pick(0,1,2) + icon_state = "datadisk[diskcolor]" + +/obj/item/weapon/disk/data/attack_self(mob/user as mob) + read_only = !read_only + to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].") + +/obj/item/weapon/disk/data/examine(mob/user) + . = ..() + . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." + +/* + * Diskette Box + */ + +/obj/item/weapon/storage/box/disks + name = "Diskette Box" + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/disks/New() + ..() + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + new /obj/item/weapon/disk/data(src) + +/* + * Manual -- A big ol' manual. + */ + +/obj/item/weapon/paper/Cloning + name = "H-87 Cloning Apparatus Manual" + info = {"

    Getting Started

    + Congratulations, your 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 your 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 your 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."} + +//SOME SCRAPS I GUESS +/* EMP grenade/spell effect + if(istype(A, /obj/machinery/clonepod)) + A:malfunction() +*/ diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 1d45a3e508..dc8375f1e7 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -1,312 +1,312 @@ -#define OP_COMPUTER_COOLDOWN 60 - -/obj/machinery/computer/operating - name = "patient monitoring console" - desc = "Used to monitor the vitals of a patient." - density = TRUE - anchored = TRUE - icon_keyboard = "med_key" - icon_screen = "crew" - circuit = /obj/item/weapon/circuitboard/operating - var/obj/machinery/optable/table = null - var/mob/living/carbon/human/victim = null - var/verbose = 1 //general speaker toggle - var/patientName = null - var/oxyAlarm = 30 //oxy damage at which the computer will beep - var/choice = 0 //just for going into and out of the options menu - var/healthAnnounce = 1 //healther announcer toggle - var/crit = 1 //crit beeping toggle - var/nextTick = OP_COMPUTER_COOLDOWN - var/healthAlarm = 50 - var/oxy = 1 //oxygen beeping toggle - -/obj/machinery/computer/operating/New() - ..() - for(var/direction in list(NORTH,EAST,SOUTH,WEST)) - table = locate(/obj/machinery/optable, get_step(src, direction)) - if(table) - table.computer = src - break - -/obj/machinery/computer/operating/Destroy() - if(table) - table.computer = null - table = null - if(victim) - victim = null - return ..() - -/obj/machinery/computer/operating/attack_ai(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - - -/obj/machinery/computer/operating/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/computer/operating/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "OperatingComputer", "Patient Monitor") - ui.open() - -/obj/machinery/computer/operating/tgui_data(mob/user) - var/data[0] - var/mob/living/carbon/human/occupant - if(table) - occupant = table.victim - data["hasOccupant"] = occupant ? 1 : 0 - var/occupantData[0] - - if(occupant) - occupantData["name"] = occupant.name - occupantData["stat"] = occupant.stat - occupantData["health"] = occupant.health - occupantData["maxHealth"] = occupant.maxHealth - occupantData["minHealth"] = config.health_threshold_dead - occupantData["bruteLoss"] = occupant.getBruteLoss() - occupantData["oxyLoss"] = occupant.getOxyLoss() - occupantData["toxLoss"] = occupant.getToxLoss() - occupantData["fireLoss"] = occupant.getFireLoss() - occupantData["paralysis"] = occupant.paralysis - occupantData["hasBlood"] = 0 - occupantData["bodyTemperature"] = occupant.bodytemperature - occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations - // Because we can put simple_animals in here, we need to do something tricky to get things working nice - occupantData["temperatureSuitability"] = 0 // 0 is the baseline - if(ishuman(occupant) && occupant.species) - // I wanna do something where the bar gets bluer as the temperature gets lower - // For now, I'll just use the standard format for the temperature status - var/datum/species/sp = occupant.species - if(occupant.bodytemperature < sp.cold_level_3) - occupantData["temperatureSuitability"] = -3 - else if(occupant.bodytemperature < sp.cold_level_2) - occupantData["temperatureSuitability"] = -2 - else if(occupant.bodytemperature < sp.cold_level_1) - occupantData["temperatureSuitability"] = -1 - else if(occupant.bodytemperature > sp.heat_level_3) - occupantData["temperatureSuitability"] = 3 - else if(occupant.bodytemperature > sp.heat_level_2) - occupantData["temperatureSuitability"] = 2 - else if(occupant.bodytemperature > sp.heat_level_1) - occupantData["temperatureSuitability"] = 1 - else if(isanimal(occupant)) - var/mob/living/simple_mob/silly = occupant - if(silly.bodytemperature < silly.minbodytemp) - occupantData["temperatureSuitability"] = -3 - else if(silly.bodytemperature > silly.maxbodytemp) - occupantData["temperatureSuitability"] = 3 - // Blast you, imperial measurement system - occupantData["btCelsius"] = occupant.bodytemperature - T0C - occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 - - if(ishuman(occupant) && !(NO_BLOOD in occupant.species.flags) && occupant.vessel) - occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) - occupantData["hasBlood"] = 1 - var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) - occupantData["bloodLevel"] = blood_volume - occupantData["bloodMax"] = occupant.species.blood_volume - occupantData["bloodPercent"] = round(100*(blood_volume/occupant.species.blood_volume), 0.01) //copy pasta ends here - - occupantData["bloodType"] = occupant.dna.b_type - occupantData["surgery"] = build_surgery_list(user) - - data["occupant"] = occupantData - data["verbose"]=verbose - data["oxyAlarm"]=oxyAlarm - data["choice"]=choice - data["health"]=healthAnnounce - data["crit"]=crit - data["healthAlarm"]=healthAlarm - data["oxy"]=oxy - - return data - -/obj/machinery/computer/operating/tgui_act(action, params) - if(..()) - return TRUE - if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - - . = TRUE - switch(action) - if("verboseOn") - verbose = TRUE - if("verboseOff") - verbose = FALSE - if("healthOn") - healthAnnounce = TRUE - if("healthOff") - healthAnnounce = FALSE - if("critOn") - crit = TRUE - if("critOff") - crit = FALSE - if("oxyOn") - oxy = TRUE - if("oxyOff") - oxy = FALSE - if("oxy_adj") - oxyAlarm = clamp(text2num(params["new"]), -100, 100) - if("choiceOn") - choice = TRUE - if("choiceOff") - choice = FALSE - if("health_adj") - healthAlarm = clamp(text2num(params["new"]), -100, 100) - else - return FALSE - -/obj/machinery/computer/operating/process() - if(table && table.check_victim()) - if(verbose) - if(patientName!=table.victim.name) - patientName=table.victim.name - atom_say("New patient detected, loading stats") - victim = table.victim - atom_say("[victim.real_name], [victim.dna.b_type] blood, [victim.stat ? "Non-Responsive" : "Awake"]") - SStgui.update_uis(src) - if(nextTick < world.time) - nextTick=world.time + OP_COMPUTER_COOLDOWN - if(crit && victim.health <= -50 ) - playsound(src.loc, 'sound/machines/defib_success.ogg', 50, 0) - if(oxy && victim.getOxyLoss()>oxyAlarm) - playsound(src.loc, 'sound/machines/defib_safetyOff.ogg', 50, 0) - if(healthAnnounce && ((victim.health / victim.maxHealth) * 100) <= healthAlarm) - atom_say("[round(((victim.health / victim.maxHealth) * 100))]% health.") - -// Surgery Helpers -/obj/machinery/computer/operating/proc/build_surgery_list(mob/user) - if(!istype(victim)) - return null - - . = list() - - for(var/limb in victim.organs_by_name) - var/obj/item/organ/external/E = victim.organs_by_name[limb] - if(E && E.open) - . += list(list("name" = E.name, "currentStage" = find_stage(E), "nextSteps" = find_next_steps(user, limb))) - -/** - * This proc is actually hell. I hate the surgery system Polaris uses. - * Basically, surgery is completely stateless, and what "stage" we're on is just dependent - * on the current state of 5 separate variables that determine what stages we can perform - * next. - * - * So, here's a little guide to understand this proc: - * Surgery is broken down into 5 different variables: - * `open`, - * `stage`, - * `cavity`, - * `burn_stage`, - * and `brute_stage`. - * Naturally, the values assigned to these don't use defines or names or anything, they're just magic numbers. - * So, we have to figure out ourselves what we should call each value. - * Open can be 4 values, and represents the "openness" of the surgery site. - * 1 = Cut Open. - * 2 = Retracted. - * 2.5 = Bones cut. - * 3 = Bones spread. - * Stage can be 3 values, and represents the progress in fixing broken bones - * 0 = Closed, can be either "we're done" or "we haven't started" FFS. - * 1 = Bones glued. - * 2 = Bones set. - * Cavity is just representing the cavity implant surgeries, and can be 2 values. - * 0 = Cavity Closed - * 1 = Cavity Open - * burn_stage and brute_stage are literally only used for repairing brute/burn damage to limbs - * I have no idea why you would ever perform these surgeries, given that Bicaradine and Kelotane exist. - * So I'm not even going to bother trying to represent them here. Fuck it. - */ -/obj/machinery/computer/operating/proc/find_stage(var/obj/item/organ/external/E) - . = "None." - switch(E.open) - if(1) - . = "Incision made." - if(2) - . = "Surgical site opened." - switch(E.stage) - // if(0) // Nothing. - if(1) - . = "Surgical site opened; Bones glued." - if(2) - . = "Surgical site opened; Bones set." - switch(E.cavity) - if(1) - . = "Surgical site opened; Cavity open." - if(2.5) // WHY IS THIS A FLOAT. WHY? - . = "Bones cut." - switch(E.stage) - // if(0) // Nothing. - if(1) - . = "Bones cut; Bones glued." - if(2) - . = "Bones cut; Bones set." - if(3) - . = "Bones retracted." - switch(E.stage) - // if(0) // Nothing. - if(1) - . = "Bones retracted; Bones glued." - if(2) - . = "Bones retracted; Bones reset." - switch(E.cavity) - if(1) - . = "Bones retracted; Cavity open." - -/** - * This converts a typepath into a pretty name. - * As best as it can, anyways. - */ -/proc/pretty_type(var/datum/A) - var/typeStr = "[A.type]" - . = copytext(typeStr, findlasttext(typeStr, "/") + 1, length(typeStr) + 1) - . = capitalize(replacetext(., "_", " ")) - -/proc/get_surgery_steps_without_basetypes() - var/static/list/good_surgeries = list() - if(LAZYLEN(good_surgeries)) - return good_surgeries - var/static/list/banned_surgery_steps = list( - /datum/surgery_step, - /datum/surgery_step/generic, - /datum/surgery_step/open_encased, - /datum/surgery_step/repairflesh, - /datum/surgery_step/face, - /datum/surgery_step/cavity, - /datum/surgery_step/limb, - /datum/surgery_step/brainstem, - /datum/surgery_step/generic/ripper, - ) - good_surgeries = surgery_steps - for(var/datum/surgery_step/S in good_surgeries) - if(S.type in banned_surgery_steps) - good_surgeries -= S - if(!LAZYLEN(S.allowed_tools)) - good_surgeries -= S - return good_surgeries - -/** - * Funnily enough, this proc is actually considerably less awful than find_stage. - * All we have to do is check what surgeries can be done, like surgery mechanics themselves do. - * Then, build a string telling the user what they can do next. - */ -/obj/machinery/computer/operating/proc/find_next_steps(mob/user, zone) - . = list() - for(var/datum/surgery_step/S in get_surgery_steps_without_basetypes()) - if(S.can_use(user, victim, zone, null) && S.is_valid_target(victim)) - var/allowed_tools_by_name = list() - for(var/tool in S.allowed_tools) - // Exempt ghetto tools. - if(S.allowed_tools[tool] < 100) - continue - var/obj/tool_path = tool - allowed_tools_by_name += capitalize(initial(tool_path.name)) - // Please for the love of all that is holy, someone make surgery steps - // have names so I don't have to do this stupid pretty_type shit. - . += "[pretty_type(S)]: [english_list(allowed_tools_by_name)]" +#define OP_COMPUTER_COOLDOWN 60 + +/obj/machinery/computer/operating + name = "patient monitoring console" + desc = "Used to monitor the vitals of a patient." + density = TRUE + anchored = TRUE + icon_keyboard = "med_key" + icon_screen = "crew" + circuit = /obj/item/weapon/circuitboard/operating + var/obj/machinery/optable/table = null + var/mob/living/carbon/human/victim = null + var/verbose = 1 //general speaker toggle + var/patientName = null + var/oxyAlarm = 30 //oxy damage at which the computer will beep + var/choice = 0 //just for going into and out of the options menu + var/healthAnnounce = 1 //healther announcer toggle + var/crit = 1 //crit beeping toggle + var/nextTick = OP_COMPUTER_COOLDOWN + var/healthAlarm = 50 + var/oxy = 1 //oxygen beeping toggle + +/obj/machinery/computer/operating/New() + ..() + for(var/direction in list(NORTH,EAST,SOUTH,WEST)) + table = locate(/obj/machinery/optable, get_step(src, direction)) + if(table) + table.computer = src + break + +/obj/machinery/computer/operating/Destroy() + if(table) + table.computer = null + table = null + if(victim) + victim = null + return ..() + +/obj/machinery/computer/operating/attack_ai(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + + +/obj/machinery/computer/operating/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/computer/operating/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "OperatingComputer", "Patient Monitor") + ui.open() + +/obj/machinery/computer/operating/tgui_data(mob/user) + var/data[0] + var/mob/living/carbon/human/occupant + if(table) + occupant = table.victim + data["hasOccupant"] = occupant ? 1 : 0 + var/occupantData[0] + + if(occupant) + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = occupant.health + occupantData["maxHealth"] = occupant.maxHealth + occupantData["minHealth"] = config.health_threshold_dead + occupantData["bruteLoss"] = occupant.getBruteLoss() + occupantData["oxyLoss"] = occupant.getOxyLoss() + occupantData["toxLoss"] = occupant.getToxLoss() + occupantData["fireLoss"] = occupant.getFireLoss() + occupantData["paralysis"] = occupant.paralysis + occupantData["hasBlood"] = 0 + occupantData["bodyTemperature"] = occupant.bodytemperature + occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations + // Because we can put simple_animals in here, we need to do something tricky to get things working nice + occupantData["temperatureSuitability"] = 0 // 0 is the baseline + if(ishuman(occupant) && occupant.species) + // I wanna do something where the bar gets bluer as the temperature gets lower + // For now, I'll just use the standard format for the temperature status + var/datum/species/sp = occupant.species + if(occupant.bodytemperature < sp.cold_level_3) + occupantData["temperatureSuitability"] = -3 + else if(occupant.bodytemperature < sp.cold_level_2) + occupantData["temperatureSuitability"] = -2 + else if(occupant.bodytemperature < sp.cold_level_1) + occupantData["temperatureSuitability"] = -1 + else if(occupant.bodytemperature > sp.heat_level_3) + occupantData["temperatureSuitability"] = 3 + else if(occupant.bodytemperature > sp.heat_level_2) + occupantData["temperatureSuitability"] = 2 + else if(occupant.bodytemperature > sp.heat_level_1) + occupantData["temperatureSuitability"] = 1 + else if(isanimal(occupant)) + var/mob/living/simple_mob/silly = occupant + if(silly.bodytemperature < silly.minbodytemp) + occupantData["temperatureSuitability"] = -3 + else if(silly.bodytemperature > silly.maxbodytemp) + occupantData["temperatureSuitability"] = 3 + // Blast you, imperial measurement system + occupantData["btCelsius"] = occupant.bodytemperature - T0C + occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 + + if(ishuman(occupant) && !(NO_BLOOD in occupant.species.flags) && occupant.vessel) + occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) + occupantData["hasBlood"] = 1 + var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) + occupantData["bloodLevel"] = blood_volume + occupantData["bloodMax"] = occupant.species.blood_volume + occupantData["bloodPercent"] = round(100*(blood_volume/occupant.species.blood_volume), 0.01) //copy pasta ends here + + occupantData["bloodType"] = occupant.dna.b_type + occupantData["surgery"] = build_surgery_list(user) + + data["occupant"] = occupantData + data["verbose"]=verbose + data["oxyAlarm"]=oxyAlarm + data["choice"]=choice + data["health"]=healthAnnounce + data["crit"]=crit + data["healthAlarm"]=healthAlarm + data["oxy"]=oxy + + return data + +/obj/machinery/computer/operating/tgui_act(action, params) + if(..()) + return TRUE + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.set_machine(src) + + . = TRUE + switch(action) + if("verboseOn") + verbose = TRUE + if("verboseOff") + verbose = FALSE + if("healthOn") + healthAnnounce = TRUE + if("healthOff") + healthAnnounce = FALSE + if("critOn") + crit = TRUE + if("critOff") + crit = FALSE + if("oxyOn") + oxy = TRUE + if("oxyOff") + oxy = FALSE + if("oxy_adj") + oxyAlarm = clamp(text2num(params["new"]), -100, 100) + if("choiceOn") + choice = TRUE + if("choiceOff") + choice = FALSE + if("health_adj") + healthAlarm = clamp(text2num(params["new"]), -100, 100) + else + return FALSE + +/obj/machinery/computer/operating/process() + if(table && table.check_victim()) + if(verbose) + if(patientName!=table.victim.name) + patientName=table.victim.name + atom_say("New patient detected, loading stats") + victim = table.victim + atom_say("[victim.real_name], [victim.dna.b_type] blood, [victim.stat ? "Non-Responsive" : "Awake"]") + SStgui.update_uis(src) + if(nextTick < world.time) + nextTick=world.time + OP_COMPUTER_COOLDOWN + if(crit && victim.health <= -50 ) + playsound(src.loc, 'sound/machines/defib_success.ogg', 50, 0) + if(oxy && victim.getOxyLoss()>oxyAlarm) + playsound(src.loc, 'sound/machines/defib_safetyOff.ogg', 50, 0) + if(healthAnnounce && ((victim.health / victim.maxHealth) * 100) <= healthAlarm) + atom_say("[round(((victim.health / victim.maxHealth) * 100))]% health.") + +// Surgery Helpers +/obj/machinery/computer/operating/proc/build_surgery_list(mob/user) + if(!istype(victim)) + return null + + . = list() + + for(var/limb in victim.organs_by_name) + var/obj/item/organ/external/E = victim.organs_by_name[limb] + if(E && E.open) + . += list(list("name" = E.name, "currentStage" = find_stage(E), "nextSteps" = find_next_steps(user, limb))) + +/** + * This proc is actually hell. I hate the surgery system Polaris uses. + * Basically, surgery is completely stateless, and what "stage" we're on is just dependent + * on the current state of 5 separate variables that determine what stages we can perform + * next. + * + * So, here's a little guide to understand this proc: + * Surgery is broken down into 5 different variables: + * `open`, + * `stage`, + * `cavity`, + * `burn_stage`, + * and `brute_stage`. + * Naturally, the values assigned to these don't use defines or names or anything, they're just magic numbers. + * So, we have to figure out ourselves what we should call each value. + * Open can be 4 values, and represents the "openness" of the surgery site. + * 1 = Cut Open. + * 2 = Retracted. + * 2.5 = Bones cut. + * 3 = Bones spread. + * Stage can be 3 values, and represents the progress in fixing broken bones + * 0 = Closed, can be either "we're done" or "we haven't started" FFS. + * 1 = Bones glued. + * 2 = Bones set. + * Cavity is just representing the cavity implant surgeries, and can be 2 values. + * 0 = Cavity Closed + * 1 = Cavity Open + * burn_stage and brute_stage are literally only used for repairing brute/burn damage to limbs + * I have no idea why you would ever perform these surgeries, given that Bicaradine and Kelotane exist. + * So I'm not even going to bother trying to represent them here. Fuck it. + */ +/obj/machinery/computer/operating/proc/find_stage(var/obj/item/organ/external/E) + . = "None." + switch(E.open) + if(1) + . = "Incision made." + if(2) + . = "Surgical site opened." + switch(E.stage) + // if(0) // Nothing. + if(1) + . = "Surgical site opened; Bones glued." + if(2) + . = "Surgical site opened; Bones set." + switch(E.cavity) + if(1) + . = "Surgical site opened; Cavity open." + if(2.5) // WHY IS THIS A FLOAT. WHY? + . = "Bones cut." + switch(E.stage) + // if(0) // Nothing. + if(1) + . = "Bones cut; Bones glued." + if(2) + . = "Bones cut; Bones set." + if(3) + . = "Bones retracted." + switch(E.stage) + // if(0) // Nothing. + if(1) + . = "Bones retracted; Bones glued." + if(2) + . = "Bones retracted; Bones reset." + switch(E.cavity) + if(1) + . = "Bones retracted; Cavity open." + +/** + * This converts a typepath into a pretty name. + * As best as it can, anyways. + */ +/proc/pretty_type(var/datum/A) + var/typeStr = "[A.type]" + . = copytext(typeStr, findlasttext(typeStr, "/") + 1, length(typeStr) + 1) + . = capitalize(replacetext(., "_", " ")) + +/proc/get_surgery_steps_without_basetypes() + var/static/list/good_surgeries = list() + if(LAZYLEN(good_surgeries)) + return good_surgeries + var/static/list/banned_surgery_steps = list( + /datum/surgery_step, + /datum/surgery_step/generic, + /datum/surgery_step/open_encased, + /datum/surgery_step/repairflesh, + /datum/surgery_step/face, + /datum/surgery_step/cavity, + /datum/surgery_step/limb, + /datum/surgery_step/brainstem, + /datum/surgery_step/generic/ripper, + ) + good_surgeries = surgery_steps + for(var/datum/surgery_step/S in good_surgeries) + if(S.type in banned_surgery_steps) + good_surgeries -= S + if(!LAZYLEN(S.allowed_tools)) + good_surgeries -= S + return good_surgeries + +/** + * Funnily enough, this proc is actually considerably less awful than find_stage. + * All we have to do is check what surgeries can be done, like surgery mechanics themselves do. + * Then, build a string telling the user what they can do next. + */ +/obj/machinery/computer/operating/proc/find_next_steps(mob/user, zone) + . = list() + for(var/datum/surgery_step/S in get_surgery_steps_without_basetypes()) + if(S.can_use(user, victim, zone, null) && S.is_valid_target(victim)) + var/allowed_tools_by_name = list() + for(var/tool in S.allowed_tools) + // Exempt ghetto tools. + if(S.allowed_tools[tool] < 100) + continue + var/obj/tool_path = tool + allowed_tools_by_name += capitalize(initial(tool_path.name)) + // Please for the love of all that is holy, someone make surgery steps + // have names so I don't have to do this stupid pretty_type shit. + . += "[pretty_type(S)]: [english_list(allowed_tools_by_name)]" diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 923dd620a2..e1d2c7fb09 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,135 +1,135 @@ -/obj/machinery/computer/aifixer - name = "\improper AI system integrity restorer" - desc = "Used with intelliCards containing nonfunctional AIs to restore them to working order." - req_one_access = list(access_robotics, access_heads) - circuit = /obj/item/weapon/circuitboard/aifixer - icon_keyboard = "tech_key" - icon_screen = "ai-fixer" - light_color = LIGHT_COLOR_PINK - - active_power_usage = 1000 - - /// Variable containing transferred AI - var/mob/living/silicon/ai/occupier - /// Variable dictating if we are in the process of restoring the occupier AI - var/restoring = FALSE - -/obj/machinery/computer/aifixer/attackby(obj/item/I, mob/living/user) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - 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.") - return - if(istype(I, /obj/item/device/aicard)) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "This terminal isn't functioning right now.") - return - if(restoring) - to_chat(user, "Terminal is busy restoring [occupier] right now.") - return - - var/obj/item/device/aicard/card = I - if(occupier) - if(card.grab_ai(occupier, user)) - occupier = null - else if(card.carded_ai) - var/mob/living/silicon/ai/new_occupant = card.carded_ai - to_chat(new_occupant, "You have been transferred into a stationary terminal. Sadly there is no remote access from here.") - to_chat(user, "Transfer Successful: [new_occupant] placed within stationary terminal.") - new_occupant.forceMove(src) - new_occupant.cancel_camera() - new_occupant.control_disabled = TRUE - occupier = new_occupant - card.clear() - update_icon() - else - to_chat(user, "There is no AI loaded onto this computer, and no AI loaded onto [I]. What exactly are you trying to do here?") - return ..() - -/obj/machinery/computer/aifixer/attack_hand(mob/user) - if(stat & (NOPOWER|BROKEN)) - return - tgui_interact(user) - -/obj/machinery/computer/aifixer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AiRestorer", name) - ui.open() - -/obj/machinery/computer/aifixer/tgui_data(mob/user) - var/list/data = list() - - data["ejectable"] = FALSE - data["AI_present"] = FALSE - data["error"] = null - if(!occupier) - data["error"] = "Please transfer an AI unit." - else - data["AI_present"] = TRUE - data["name"] = occupier.name - data["restoring"] = restoring - data["health"] = (occupier.health + 100) / 2 - data["isDead"] = occupier.stat == DEAD - var/list/laws = list() - for(var/datum/ai_law/law in occupier.laws.all_laws()) - laws += "[law.get_index()]: [law.law]" - data["laws"] = laws - - return data - -/obj/machinery/computer/aifixer/tgui_act(action, params) - if(..()) - return TRUE - if(!occupier) - restoring = FALSE - - if(action) - playsound(src, "terminal_type", 50, 1) - - switch(action) - if("PRG_beginReconstruction") - if(occupier?.health < 100) - to_chat(usr, "Reconstruction in progress. This will take several minutes.") - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) - restoring = TRUE - var/mob/observer/dead/ghost = occupier.get_ghost() - if(ghost) - ghost.notify_revive("Your core files are being restored!", source = src) - . = TRUE - -/obj/machinery/computer/aifixer/proc/Fix() - use_power(active_power_usage) - occupier.adjustOxyLoss(-5, 0, FALSE) - occupier.adjustFireLoss(-5, 0, FALSE) - occupier.adjustBruteLoss(-5, 0) - if(occupier.health >= 0 && occupier.stat == DEAD) - occupier.revive() - - return occupier.health < 100 - -/obj/machinery/computer/aifixer/process() - if(..()) - if(restoring) - var/oldstat = occupier.stat - restoring = Fix() - if(oldstat != occupier.stat) - update_icon() - -/obj/machinery/computer/aifixer/update_icon() - . = ..() - if(stat & (NOPOWER|BROKEN)) - return - - if(restoring) - . += "ai-fixer-on" - if (occupier) - switch (occupier.stat) - if (CONSCIOUS) - . += "ai-fixer-full" - if (UNCONSCIOUS) - . += "ai-fixer-404" - else +/obj/machinery/computer/aifixer + name = "\improper AI system integrity restorer" + desc = "Used with intelliCards containing nonfunctional AIs to restore them to working order." + req_one_access = list(access_robotics, access_heads) + circuit = /obj/item/weapon/circuitboard/aifixer + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" + light_color = LIGHT_COLOR_PINK + + active_power_usage = 1000 + + /// Variable containing transferred AI + var/mob/living/silicon/ai/occupier + /// Variable dictating if we are in the process of restoring the occupier AI + var/restoring = FALSE + +/obj/machinery/computer/aifixer/attackby(obj/item/I, mob/living/user) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + 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.") + return + if(istype(I, /obj/item/device/aicard)) + if(stat & (NOPOWER|BROKEN)) + to_chat(user, "This terminal isn't functioning right now.") + return + if(restoring) + to_chat(user, "Terminal is busy restoring [occupier] right now.") + return + + var/obj/item/device/aicard/card = I + if(occupier) + if(card.grab_ai(occupier, user)) + occupier = null + else if(card.carded_ai) + var/mob/living/silicon/ai/new_occupant = card.carded_ai + to_chat(new_occupant, "You have been transferred into a stationary terminal. Sadly there is no remote access from here.") + to_chat(user, "Transfer Successful: [new_occupant] placed within stationary terminal.") + new_occupant.forceMove(src) + new_occupant.cancel_camera() + new_occupant.control_disabled = TRUE + occupier = new_occupant + card.clear() + update_icon() + else + to_chat(user, "There is no AI loaded onto this computer, and no AI loaded onto [I]. What exactly are you trying to do here?") + return ..() + +/obj/machinery/computer/aifixer/attack_hand(mob/user) + if(stat & (NOPOWER|BROKEN)) + return + tgui_interact(user) + +/obj/machinery/computer/aifixer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiRestorer", name) + ui.open() + +/obj/machinery/computer/aifixer/tgui_data(mob/user) + var/list/data = list() + + data["ejectable"] = FALSE + data["AI_present"] = FALSE + data["error"] = null + if(!occupier) + data["error"] = "Please transfer an AI unit." + else + data["AI_present"] = TRUE + data["name"] = occupier.name + data["restoring"] = restoring + data["health"] = (occupier.health + 100) / 2 + data["isDead"] = occupier.stat == DEAD + var/list/laws = list() + for(var/datum/ai_law/law in occupier.laws.all_laws()) + laws += "[law.get_index()]: [law.law]" + data["laws"] = laws + + return data + +/obj/machinery/computer/aifixer/tgui_act(action, params) + if(..()) + return TRUE + if(!occupier) + restoring = FALSE + + if(action) + playsound(src, "terminal_type", 50, 1) + + switch(action) + if("PRG_beginReconstruction") + if(occupier?.health < 100) + to_chat(usr, "Reconstruction in progress. This will take several minutes.") + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + restoring = TRUE + var/mob/observer/dead/ghost = occupier.get_ghost() + if(ghost) + ghost.notify_revive("Your core files are being restored!", source = src) + . = TRUE + +/obj/machinery/computer/aifixer/proc/Fix() + use_power(active_power_usage) + occupier.adjustOxyLoss(-5, 0, FALSE) + occupier.adjustFireLoss(-5, 0, FALSE) + occupier.adjustBruteLoss(-5, 0) + if(occupier.health >= 0 && occupier.stat == DEAD) + occupier.revive() + + return occupier.health < 100 + +/obj/machinery/computer/aifixer/process() + if(..()) + if(restoring) + var/oldstat = occupier.stat + restoring = Fix() + if(oldstat != occupier.stat) + update_icon() + +/obj/machinery/computer/aifixer/update_icon() + . = ..() + if(stat & (NOPOWER|BROKEN)) + return + + if(restoring) + . += "ai-fixer-on" + if (occupier) + switch (occupier.stat) + if (CONSCIOUS) + . += "ai-fixer-full" + if (UNCONSCIOUS) + . += "ai-fixer-404" + else . += "ai-fixer-empty" \ No newline at end of file diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 9869c93f7d..fad4b789a6 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,1341 +1,1341 @@ -/obj/machinery/computer/arcade - name = "random arcade" - desc = "random arcade machine" - icon_state = "arcade1" - icon_keyboard = null - clicksound = null //Gets too spammy and makes no sense for arcade to have the console keyboard noise anyway - var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, - /obj/item/toy/blink = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/weapon/storage/box/capguntoy = 2, - /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 2, - /obj/item/clothing/suit/syndicatefake = 2, - /obj/item/weapon/storage/fancy/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/random/mech_toy = 1, - /obj/item/weapon/reagent_containers/spray/waterflower = 1, - /obj/random/action_figure = 1, - /obj/random/plushie = 1, - /obj/item/toy/cultsword = 1, - /obj/item/toy/bouquet/fake = 1, - /obj/item/clothing/accessory/badge/sheriff = 2, - /obj/item/clothing/head/cowboy/small = 2, - /obj/item/toy/stickhorse = 2 - ) - var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something. - -/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/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade/clawmachine) - var/obj/item/weapon/circuitboard/CB = new choice() - new CB.build_path(loc, CB) - return INITIALIZE_HINT_QDEL - -/obj/machinery/computer/arcade/proc/prizevend() - if(LAZYLEN(special_prizes)) // Downstream wanted the 'win things inside contents sans circuitboard' feature kept. - var/atom/movable/AM = pick_n_take(special_prizes) - AM.forceMove(get_turf(src)) - special_prizes -= AM - - else if(LAZYLEN(prizes)) - var/prizeselect = pickweight(prizes) - new prizeselect(src.loc) - - if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(src.loc) - -/obj/machinery/computer/arcade/attack_ai(mob/user as mob) - return attack_hand(user) - - -/obj/machinery/computer/arcade/emp_act(severity) - if(stat & (NOPOWER|BROKEN)) - ..(severity) - 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(1,3) - if(3) - num_of_prizes = rand(0,2) - if(4) - num_of_prizes = rand(0,1) - for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) - empprize = pickweight(prizes) - new empprize(src.loc) - - ..(severity) - -/////////////////// -// BATTLE HERE // -/////////////////// - -/obj/machinery/computer/arcade/battle - name = "Battler" - desc = "Fight through what space has to offer!" - icon_state = "arcade2" - icon_screen = "battler" - circuit = /obj/item/weapon/circuitboard/arcade/battle - var/enemy_name = "Space Villian" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/enemy_action = "" - 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 = 0 - var/blocked = 0 //Player cannot attack/heal while set - var/turtle = 0 - -/obj/machinery/computer/arcade/battle/Initialize() - . = ..() - randomize_characters() - -/obj/machinery/computer/arcade/battle/proc/randomize_characters() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - - enemy_name = replacetext((name_part1 + name_part2), "the ", "") - name = (name_action + name_part1 + name_part2) - - -/obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob) - if(..()) - return - user.set_machine(src) - tgui_interact(user) - -/obj/machinery/computer/arcade/battle/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ArcadeBattle", name) - ui.open() - -/obj/machinery/computer/arcade/battle/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - data["name"] = name - data["temp"] = temp - data["enemyAction"] = enemy_action - data["enemyName"] = enemy_name - data["playerHP"] = player_hp - data["playerMP"] = player_mp - data["enemyHP"] = enemy_hp - data["gameOver"] = gameover - return data - -/obj/machinery/computer/arcade/battle/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - if(!blocked && !gameover) - switch(action) - if("attack") - blocked = 1 - var/attackamt = rand(2,6) - temp = "You attack for [attackamt] damage!" - playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - if(turtle > 0) - turtle-- - - sleep(10) - enemy_hp -= attackamt - arcade_action() - - if("heal") - blocked = 1 - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - turtle++ - - sleep(10) - player_mp -= pointamt - player_hp += healamt - blocked = 1 - arcade_action() - - if("charge") - blocked = 1 - var/chargeamt = rand(4,7) - temp = "You regain [chargeamt] points" - playsound(src, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - player_mp += chargeamt - if(turtle > 0) - turtle-- - - sleep(10) - arcade_action() - - - if(action == "newgame") //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - turtle = 0 - - if(emagged) - randomize_characters() - emagged = 0 - - add_fingerprint(usr) - return TRUE - -/obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((enemy_mp <= 0) || (enemy_hp <= 0)) - if(!gameover) - gameover = 1 - temp = "[enemy_name] has fallen! Rejoice!" - playsound(src, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - - if(emagged) - feedback_inc("arcade_win_emagged") - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) - message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") - log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") - randomize_characters() - emagged = 0 - else if(!contents.len) - feedback_inc("arcade_win_normal") - prizevend() - - else - feedback_inc("arcade_win_normal") - prizevend() - - else if (emagged && (turtle >= 4)) - var/boomamt = rand(5,10) - enemy_action = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(src, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - player_hp -= boomamt - - else if ((enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - enemy_action = "[enemy_name] steals [stealamt] of your power!" - playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - player_mp -= stealamt - - if (player_mp <= 0) - gameover = 1 - sleep(10) - temp = "You have been drained! GAME OVER" - if(emagged) - feedback_inc("arcade_loss_mana_emagged") - usr.gib() - else - feedback_inc("arcade_loss_mana_normal") - - else if ((enemy_hp <= 10) && (enemy_mp > 4)) - enemy_action = "[enemy_name] heals for 4 health!" - playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - enemy_hp += 4 - enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - enemy_action = "[enemy_name] attacks for [attackamt] damage!" - playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - player_hp -= attackamt - - if ((player_mp <= 0) || (player_hp <= 0)) - gameover = 1 - temp = "You have been crushed! GAME OVER" - playsound(src, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - if(emagged) - feedback_inc("arcade_loss_hp_emagged") - usr.gib() - else - feedback_inc("arcade_loss_hp_normal") - - blocked = 0 - return - - -/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) - if(!emagged) - to_chat(user, span("notice","You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Hyper-Lethal Mode.")) - - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - blocked = 0 - emagged = 1 - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - return 1 - - -////////////////////////// -// ORION TRAIL HERE // -////////////////////////// -#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_MUTINY "Mutiny?" -#define ORION_TRAIL_MUTINY_ATTACK "Mutinous Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_BLACKHOLE "BlackHole" - -#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 = "Learn how our ancestors got to Orion, and have fun in the process!" - icon_state = "arcade1" - icon_screen = "orion" - circuit = /obj/item/weapon/circuitboard/arcade/orion_trail - var/busy = 0 //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_MUTINY = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_SPACEPORT = 2 - ) - var/list/stops = list() - var/list/stopblurbs = list() - var/traitors_aboard = 0 - var/spaceport_raided = 0 - var/spaceport_freebie = 0 - var/last_spaceport_action = "" - var/gameStatus = ORION_STATUS_START - var/canContinueEvent = 0 - -/obj/machinery/computer/arcade/orion_trail/New() - ..() - // 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 - traitors_aboard = 0 - - //spaceport junk - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - -/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/living/user) - if(..()) - return - if(fuel <= 0 || food <=0 || settlers.len == 0) - gameStatus = ORION_STATUS_GAMEOVER - event = null - user.set_machine(src) - var/dat = "" - if(gameStatus == ORION_STATUS_GAMEOVER) - playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - dat = "

    Game Over

    " - dat += "Like many before you, your crew never made it to Orion, lost to space...
    forever." - if(settlers.len == 0) - dat += "
    Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy." - else - if(food <= 0) - dat += "
    You ran out of food and starved." - if(emagged) - user.nutrition = 0 //yeah you pretty hongry - to_chat(user, span("danger", "Your 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 += "
    You ran out of fuel, and drift, slowly, into a star." - if(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,span("danger", "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames.")) - dat += "

    OK...

    " - - if(emagged) - to_chat(user, span("danger", "You're never going to make it to Orion...")) - user.death() - emagged = 0 //removes the emagged status after you lose - gameStatus = ORION_STATUS_START - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - - 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 your ancestors!



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

    Close

    " - user << browse(dat,"window=arcade") - 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 = 1 - - if (href_list["continue"]) //Continue your travels - if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) - if(turns >= ORION_TRAIL_WINTURN) - win() - else - food -= (alive+traitors_aboard)*2 - fuel -= 5 - if(turns == 2 && prob(30)) - event = ORION_TRAIL_COLLISION - event() - else if(prob(75)) - event = pickweight(events) - if(traitors_aboard) - if(event == ORION_TRAIL_MUTINY || prob(55)) - event = ORION_TRAIL_MUTINY_ATTACK - event() - turns += 1 - if(emagged) - var/mob/living/carbon/M = usr //for some vars - switch(event) - if(ORION_TRAIL_RAIDERS) - if(prob(50)) - to_chat(usr, span("warning", "You 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, span("danger", "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...")) - M.take_organ_damage(25) - if(ORION_TRAIL_ILLNESS) - var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS - if(severity == 1) - to_chat(M, span("warning", "You suddenly feel slightly nauseous.")) //got off lucky - if(severity == 2) - to_chat(usr, span("warning", "You suddenly feel extremely nauseous and hunch over until it passes.")) - M.Stun(3) - if(severity >= 3) //you didn't pray hard enough - to_chat(M, span("warning", "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.")) - spawn(30) - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - H.vomit() - if(ORION_TRAIL_FLUX) - if(prob(75)) - M.Weaken(3) - src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.") - M.take_organ_damage(15) - else - to_chat(M, span("warning", "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) && !hull) - var/turf/simulated/floor/F = src.loc - F.ChangeTurf(/turf/space) - src.visible_message(span("danger", "Something slams into the floor around \the [src], exposing it to space!"), "You hear something crack and break.") - else - src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") - if(ORION_TRAIL_MALFUNCTION) - src.visible_message("\The [src] buzzes and the screen goes blank for a moment before returning to the game.") - 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) - src.audible_message("\The [src] lets out a somehow reassuring chime.", runemessage = "reassuring chime") - else if(oldfuel < fuel || oldfood < food) - src.audible_message("\The [src] lets out a somehow ominous chime.", runemessage = "ominous chime") - food = oldfood - fuel = oldfuel - - else if(href_list["newgame"]) //Reset everything - if(gameStatus == ORION_STATUS_START) - playsound(src, 'sound/arcade/Ori_begin.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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["slow"]) //slow down - if(event == ORION_TRAIL_FLUX) - food -= (alive+traitors_aboard)*2 - fuel -= 5 - event = null - else if(href_list["pastblack"]) //slow down - if(turns == 7) - food -= ((alive+traitors_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+traitors_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(emagged) //has to be here because otherwise it doesn't work - src.show_message("\The [src] states, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRIFIED.","You hear something say, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRFIED'") - to_chat(usr, span("warning", "Something draws you closer and closer to the machine.")) - sleep(10) - to_chat(usr, span("danger", "This is really starting to hurt!")) - var i; //spawning a literal blackhole would be fun, but a bit disruptive. - for(i=0;i<4;i++) - var/mob/living/L = usr - if(istype(L)) - L.adjustBruteLoss(25) - sleep(10) - 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_MUTINY) - playsound(src, 'sound/arcade/kill_crew.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - var/sheriff = remove_crewmember() //I shot the sheriff - var/mob/living/L = usr - if(!istype(L)) - return - if(settlers.len == 0 || alive == 0) - src.visible_message("\The [src] states, 'EVERYONE HAS DIED, GAMEOVER.'", "You hear something state, 'EVERYONE HAS DIED, GAMEOVER.'") - if(emagged) - src.visible_message("\The [src] produces a loud, gunlike sound.") - L.adjustBruteLoss(30) - emagged = 0 - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(emagged) - if(usr.name == sheriff) - src.visible_message("\The [src] states, 'THE CREW HAS CHOSEN TO KILL [usr]'. A gunshot can be heard coming from \the [src]", "You hear 'THE CREW HAS CHOSEN TO KILL [usr]' followed by a gunshot") - L.adjustBruteLoss(30) - if(event == ORION_TRAIL_MUTINY) //only ends the ORION_TRAIL_MUTINY event, since you can do this action in multiple places - event = null - - //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) - playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - var/bought = add_crewmember() - last_spaceport_action = "You hired [bought] as a new crewmember." - fuel -= 10 - food -= 10 - event() - - else if(href_list["sellcrew"]) //sell a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && settlers.len > 1) - playsound(src, 'sound/arcade/lose_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - var/sold = remove_crewmember() - last_spaceport_action = "You sold your 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) - playsound(src, 'sound/arcade/raid.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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 your scramble to escape! ([FU]FU,[FO]FO)" - - //your chance of lose a crewmember is 1/2 your 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 your scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(emagged) - src.visible_message("The machine states, 'YOU ARE UNDER ARREST, RAIDER!' and shoots handcuffs onto [usr]!", "You hear something say 'YOU ARE UNDER ARREST, RAIDER!' and a clinking sound") - var/obj/item/weapon/handcuffs/C = new(src.loc) - var/mob/living/carbon/human/H = usr - if(istype(H)) - C.forceMove(H) - H.handcuffed = C - H.update_handcuffed() - else - C.throw_at(usr,16,3,src) - - - fuel += FU - food += FO - event() - - else if(href_list["buyparts"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && fuel > 5) - playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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) - playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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() - - src.add_fingerprint(usr) - src.updateUsrDialog() - busy = 0 - return - - -/obj/machinery/computer/arcade/orion_trail/proc/event() - eventdat = "

    [event]

    " - canContinueEvent = 0 - switch(event) - if(ORION_TRAIL_RAIDERS) - eventdat += "Raiders have come aboard your 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) - playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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_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) - playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - eventdat += "Oh no! The engine has broken down!" - eventdat += "
    You can repair it with an engine part, or you can make repairs for 3 days." - if(engine >= 1) - eventdat += "

    Use Part Wait

    " - else - eventdat += "

    Wait

    " - eventdat += "

    Close

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

    Use Part Wait

    " - else - eventdat += "

    Wait

    " - eventdat += "

    Close

    " - - if(ORION_TRAIL_COLLISION) - playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - 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 += "
    You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." - if(hull >= 1) - eventdat += "

    Use Part Wait

    " - 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_MUTINY) - eventdat += "You've been hearing rumors of dissenting opinions amoungst your men." - if(settlers.len <= 2) - eventdat += "
    Your crew's so tiny you don't think anybody would risk an uprising." - eventdat += "

    Continue

    " - eventdat += "

    Close

    " - if(prob(10)) - traitors_aboard = min(++traitors_aboard,2) - else - if(traitors_aboard) //less likely to stack traitors - if(prob(20)) - traitors_aboard = min(++traitors_aboard,2) - else if(prob(70)) - traitors_aboard = min(++traitors_aboard,2) - - eventdat += "

    Kill a crewmember

    " - eventdat += "

    Risk it

    " - eventdat += "

    Close

    " - canContinueEvent = 1 - - if(ORION_TRAIL_MUTINY_ATTACK) - if(traitors_aboard <= 0) //shouldn't trigger, but hey. - eventdat += "Haha, fooled you, there isn't a mutiny on board!" - eventdat += "
    (You should report this to a coder :S)" - else - var/trait1 = remove_crewmember() - var/trait2 = "" - if(traitors_aboard >= 2) - trait2 = remove_crewmember() - - eventdat += "Oh no, some of your crew are attempting to mutiny!!" - if(trait2) - eventdat += "
    [trait1] and [trait2]'s have armed themselves with weapons!" - else - eventdat += "
    [trait1]'s armed with a weapon!" - - var/chance2attack = alive*20 - if(prob(chance2attack)) - var/chancetokill = 30*traitors_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 traitorss, 2 crew is 50% chance - if(prob(chancetokill)) - var/deadguy = remove_crewmember() - eventdat += "
    The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] up to [deadguy] and murder[trait2 ? "" : "s"] them!" - else - eventdat += "
    You valiantly fight off the traitor[trait2 ? "s":""]!" - eventdat += "
    You cut the traitor[trait2 ? "s":""] up into meat... Eww" - if(trait2) - food += 30 - traitors_aboard = max(0,traitors_aboard-2) - else - food += 15 - traitors_aboard = max(0,--traitors_aboard) - else - eventdat += "
    The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] away, What wimps!" - if(trait2) - traitors_aboard = max(0,traitors_aboard-2) - else - traitors_aboard = max(0,--traitors_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! they wont let you dock since you tried to attack them!" - if(last_spaceport_action) - eventdat += "
    Last Spaceport Action: [last_spaceport_action]" - eventdat += "

    Depart Spaceport

    " - eventdat += "

    Close

    " - else - eventdat += "You pull the ship up to dock at a nearby Spaceport, 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 Spaceport 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 your 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 give you some supplies. (+[FU]FU,+[FO]FO)" - if(freecrew) - eventdat += "
    You 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 += "

    You cannot afford a new Crewmember

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

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

    " - else - eventdat += "

    You cannot afford to sell a Crewmember

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

    Spare Parts:

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

    Buy Engine Parts (-5FU)

    " - else - eventdat += "

    You cannot afford to buy Engine Parts" - - //Hull plates - if(fuel > 5) - eventdat += "

    Buy Hull Plates (-5FU)

    " - else - eventdat += "

    You cannot afford to buy Hull Plates" - - //Electronics - if(fuel > 5) - eventdat += "

    Buy Spare Electronics (-5FU)

    " - else - eventdat += "

    You cannot afford to buy Spare Electronics" - - //Trade - if(fuel > 5) - eventdat += "

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

    " - else - eventdat += "

    You cannot afford to Trade Fuel for Food 5) - eventdat += "

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

    " - else - eventdat += "

    You cannot afford to Trade Food for Fuel\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") - sleep(20) - src.visible_message(span("warning", "[src] begins to vibrate...")) - src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") - sleep(30) - src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") - sleep(3.6) - src.visible_message(span("danger", "[src] explodes!")) - explosion(src.loc, 1,2,4) - qdel(src) - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_MUTINY -#undef ORION_TRAIL_MUTINY_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET - -////////////////// -// Claw Machine // -////////////////// - -/obj/machinery/computer/arcade/clawmachine - name = "AlliCo Grab-a-Gift" - desc = "Show off your arcade skills for that special someone!" - icon_state = "clawmachine_new" - icon_keyboard = null - icon_screen = null - circuit = /obj/item/weapon/circuitboard/arcade/clawmachine - prizes = list(/obj/random/plushie) - var/wintick = 0 - var/winprob = 0 - var/instructions = "Insert 1 thaler or swipe a card to play!" - var/gameStatus = "CLAWMACHINE_NEW" - var/gamepaid = 0 - var/gameprice = 1 - var/winscreen = "" - -/// Payment -/obj/machinery/computer/arcade/clawmachine/attackby(obj/item/I as obj, mob/user as mob) - if(..()) - return - - if(gamepaid == 0 && vendor_account && !vendor_account.suspended) - var/paid = 0 - var/obj/item/weapon/card/id/W = I.GetID() - if(W) //for IDs and PDAs and wallets with IDs - paid = pay_with_card(W,I) - else if(istype(I, /obj/item/weapon/spacecash/ewallet)) - var/obj/item/weapon/spacecash/ewallet/C = I - paid = pay_with_ewallet(C) - else if(istype(I, /obj/item/weapon/spacecash)) - var/obj/item/weapon/spacecash/C = I - paid = pay_with_cash(C, user) - if(paid) - gamepaid = 1 - instructions = "Hit start to play!" - return - return - -////// Cash -/obj/machinery/computer/arcade/clawmachine/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user) - if(!emagged) - if(gameprice > cashmoney.worth) - - // This is not a status display message, since it's something the character - // themselves is meant to see BEFORE putting the money in - to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") - return 0 - - if(istype(cashmoney, /obj/item/weapon/spacecash)) - - visible_message("\The [usr] inserts some cash into \the [src].") - cashmoney.worth -= gameprice - - if(cashmoney.worth <= 0) - usr.drop_from_inventory(cashmoney) - qdel(cashmoney) - else - cashmoney.update_icon() - - // Machine has no idea who paid with cash - credit_purchase("(cash)") - return 1 - if(emagged) - playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - to_chat(user, "It doesn't seem to accept that! Seem you'll need to swipe a valid ID.") - - -///// Ewallet -/obj/machinery/computer/arcade/clawmachine/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet) - if(!emagged) - visible_message("\The [usr] swipes \the [wallet] through \the [src].") - playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) - if(gameprice > wallet.worth) - visible_message("Insufficient funds.") - return 0 - else - wallet.worth -= gameprice - credit_purchase("[wallet.owner_name] (chargecard)") - return 1 - if(emagged) - playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - to_chat(usr, "It doesn't seem to accept that! Seem you'll need to swipe a valid ID.") - -///// ID -/obj/machinery/computer/arcade/clawmachine/proc/pay_with_card(var/obj/item/weapon/card/id/I, var/obj/item/ID_container) - if(I==ID_container || ID_container == null) - visible_message("\The [usr] swipes \the [I] through \the [src].") - else - visible_message("\The [usr] swipes \the [ID_container] through \the [src].") - playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) - var/datum/money_account/customer_account = get_account(I.associated_account_number) - if(!customer_account) - visible_message("Error: Unable to access account. Please contact technical support if problem persists.") - return 0 - - if(customer_account.suspended) - visible_message("Unable to access account: account suspended.") - return 0 - - // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is - // empty at high security levels - if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) - var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") - customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) - - if(!customer_account) - visible_message("Unable to access account: incorrect credentials.") - return 0 - - if(gameprice > customer_account.money) - visible_message("Insufficient funds in account.") - return 0 - else - // Okay to move the money at this point - if(emagged) - gameprice = customer_account.money - // debit money from the purchaser's account - customer_account.money -= gameprice - - // create entry in the purchaser's account log - var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [name])" - T.purpose = "Purchase of arcade game([name])" - if(gameprice > 0) - T.amount = "([gameprice])" - else - T.amount = "[gameprice]" - T.source_terminal = name - T.date = current_date_string - T.time = stationtime2text() - customer_account.transaction_log.Add(T) - - // Give the vendor the money. We use the account owner name, which means - // that purchases made with stolen/borrowed card will look like the card - // owner made them - credit_purchase(customer_account.owner_name) - return 1 - -/// Add to vendor account - -/obj/machinery/computer/arcade/clawmachine/proc/credit_purchase(var/target as text) - vendor_account.money += gameprice - - var/datum/transaction/T = new() - T.target_name = target - T.purpose = "Purchase of arcade game([name])" - T.amount = "[gameprice]" - T.source_terminal = name - T.date = current_date_string - T.time = stationtime2text() - vendor_account.transaction_log.Add(T) - -/// End Payment - -/obj/machinery/computer/arcade/clawmachine/New() - ..() - -/obj/machinery/computer/arcade/clawmachine/attack_hand(mob/living/user) - if(..()) - return - tgui_interact(user) - -/// TGUI Stuff - -/obj/machinery/computer/arcade/clawmachine/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ClawMachine", name, ui_x = 300, ui_y = 400) - ui.autoupdate = TRUE - ui.open() - -/obj/machinery/computer/arcade/clawmachine/tgui_data(mob/user) - var/list/data = list() - - data["wintick"] = wintick - data["instructions"] = instructions - data["gameStatus"] = gameStatus - data["winscreen"] = winscreen - - return data - -/obj/machinery/computer/arcade/clawmachine/tgui_act(action, params) - if(..()) - return - - if(action == "newgame" && gamepaid == 0) - playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - - if(action == "newgame" && gamepaid == 1) - gameStatus = "CLAWMACHINE_ON" - icon_state = "clawmachine_new_move" - instructions = "Guide the claw to the prize you want!" - wintick = 0 - - if(action == "return" && gameStatus == "CLAWMACHINE_END") - gameStatus = "CLAWMACHINE_NEW" - - if(action == "pointless" && wintick < 10) - wintick += 1 - - if(action == "pointless" && wintick >= 10) - instructions = "Insert 1 thaler or swipe a card to play!" - clawvend() - -/obj/machinery/computer/arcade/clawmachine/proc/clawvend() /// True to a real claw machine, it's NEARLY impossible to win. - winprob += 1 /// Yeah. - - if(prob(winprob)) /// YEAH. - if(!emagged) - prizevend() - winscreen = "You won!" - else if(emagged) - gameprice = 1 - emagged = 0 - winscreen = "You won...?" - var/obj/item/weapon/grenade/G = new /obj/item/weapon/grenade/explosive(get_turf(src)) /// YEAAAAAAAAAAAAAAAAAAH!!!!!!!!!! - G.activate() - G.throw_at(get_turf(usr),10,10) /// Play stupid games, win stupid prizes. - - playsound(src, 'sound/arcade/Ori_win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - winprob = 0 - - else - playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) - winscreen = "Aw, shucks. Try again!" - wintick = 0 - gamepaid = 0 - icon_state = "clawmachine_new" - gameStatus = "CLAWMACHINE_END" - -/obj/machinery/computer/arcade/clawmachine/emag_act(mob/user) - if(!emagged) - to_chat(user, "You modify the claw of the machine. The next one is sure to win! You just have to pay...") - name = "AlliCo Snag-A-Prize" - desc = "Get some goodies, all for you!" - instructions = "Swipe a card to play!" - winprob = 100 - gamepaid = 0 - wintick = 0 - gameStatus = "CLAWMACHINE_NEW" - emagged = 1 - return 1 - -/obj/machinery/computer/arcade/attackby(obj/item/O, mob/user, params) - ..() - if(istype(O, /obj/item/stack/arcadeticket)) - var/obj/item/stack/arcadeticket/T = O - var/amount = T.get_amount() - if(amount <2) - to_chat(user, "You need 2 tickets to claim a prize!") - return - prizevend(user) - T.pay_tickets() - T.update_icon() - O = T - to_chat(user, "You turn in 2 tickets to the [src] and claim a prize!") - return - else +/obj/machinery/computer/arcade + name = "random arcade" + desc = "random arcade machine" + icon_state = "arcade1" + icon_keyboard = null + clicksound = null //Gets too spammy and makes no sense for arcade to have the console keyboard noise anyway + var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, + /obj/item/toy/blink = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/toy/sword = 2, + /obj/item/weapon/storage/box/capguntoy = 2, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 2, + /obj/item/clothing/suit/syndicatefake = 2, + /obj/item/weapon/storage/fancy/crayons = 2, + /obj/item/toy/spinningtoy = 2, + /obj/random/mech_toy = 1, + /obj/item/weapon/reagent_containers/spray/waterflower = 1, + /obj/random/action_figure = 1, + /obj/random/plushie = 1, + /obj/item/toy/cultsword = 1, + /obj/item/toy/bouquet/fake = 1, + /obj/item/clothing/accessory/badge/sheriff = 2, + /obj/item/clothing/head/cowboy/small = 2, + /obj/item/toy/stickhorse = 2 + ) + var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something. + +/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/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade/clawmachine) + var/obj/item/weapon/circuitboard/CB = new choice() + new CB.build_path(loc, CB) + return INITIALIZE_HINT_QDEL + +/obj/machinery/computer/arcade/proc/prizevend() + if(LAZYLEN(special_prizes)) // Downstream wanted the 'win things inside contents sans circuitboard' feature kept. + var/atom/movable/AM = pick_n_take(special_prizes) + AM.forceMove(get_turf(src)) + special_prizes -= AM + + else if(LAZYLEN(prizes)) + var/prizeselect = pickweight(prizes) + new prizeselect(src.loc) + + if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit + new /obj/item/clothing/head/syndicatefake(src.loc) + +/obj/machinery/computer/arcade/attack_ai(mob/user as mob) + return attack_hand(user) + + +/obj/machinery/computer/arcade/emp_act(severity) + if(stat & (NOPOWER|BROKEN)) + ..(severity) + 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(1,3) + if(3) + num_of_prizes = rand(0,2) + if(4) + num_of_prizes = rand(0,1) + for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) + empprize = pickweight(prizes) + new empprize(src.loc) + + ..(severity) + +/////////////////// +// BATTLE HERE // +/////////////////// + +/obj/machinery/computer/arcade/battle + name = "Battler" + desc = "Fight through what space has to offer!" + icon_state = "arcade2" + icon_screen = "battler" + circuit = /obj/item/weapon/circuitboard/arcade/battle + var/enemy_name = "Space Villian" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/enemy_action = "" + 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 = 0 + var/blocked = 0 //Player cannot attack/heal while set + var/turtle = 0 + +/obj/machinery/computer/arcade/battle/Initialize() + . = ..() + randomize_characters() + +/obj/machinery/computer/arcade/battle/proc/randomize_characters() + var/name_action + var/name_part1 + var/name_part2 + + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") + + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + + enemy_name = replacetext((name_part1 + name_part2), "the ", "") + name = (name_action + name_part1 + name_part2) + + +/obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob) + if(..()) + return + user.set_machine(src) + tgui_interact(user) + +/obj/machinery/computer/arcade/battle/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ArcadeBattle", name) + ui.open() + +/obj/machinery/computer/arcade/battle/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["name"] = name + data["temp"] = temp + data["enemyAction"] = enemy_action + data["enemyName"] = enemy_name + data["playerHP"] = player_hp + data["playerMP"] = player_mp + data["enemyHP"] = enemy_hp + data["gameOver"] = gameover + return data + +/obj/machinery/computer/arcade/battle/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + if(!blocked && !gameover) + switch(action) + if("attack") + blocked = 1 + var/attackamt = rand(2,6) + temp = "You attack for [attackamt] damage!" + playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + if(turtle > 0) + turtle-- + + sleep(10) + enemy_hp -= attackamt + arcade_action() + + if("heal") + blocked = 1 + var/pointamt = rand(1,3) + var/healamt = rand(6,8) + temp = "You use [pointamt] magic to heal for [healamt] damage!" + playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + turtle++ + + sleep(10) + player_mp -= pointamt + player_hp += healamt + blocked = 1 + arcade_action() + + if("charge") + blocked = 1 + var/chargeamt = rand(4,7) + temp = "You regain [chargeamt] points" + playsound(src, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + player_mp += chargeamt + if(turtle > 0) + turtle-- + + sleep(10) + arcade_action() + + + if(action == "newgame") //Reset everything + temp = "New Round" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + turtle = 0 + + if(emagged) + randomize_characters() + emagged = 0 + + add_fingerprint(usr) + return TRUE + +/obj/machinery/computer/arcade/battle/proc/arcade_action() + if ((enemy_mp <= 0) || (enemy_hp <= 0)) + if(!gameover) + gameover = 1 + temp = "[enemy_name] has fallen! Rejoice!" + playsound(src, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + + if(emagged) + feedback_inc("arcade_win_emagged") + new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) + new /obj/item/clothing/head/collectable/petehat(src.loc) + message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") + log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") + randomize_characters() + emagged = 0 + else if(!contents.len) + feedback_inc("arcade_win_normal") + prizevend() + + else + feedback_inc("arcade_win_normal") + prizevend() + + else if (emagged && (turtle >= 4)) + var/boomamt = rand(5,10) + enemy_action = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" + playsound(src, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + player_hp -= boomamt + + else if ((enemy_mp <= 5) && (prob(70))) + var/stealamt = rand(2,3) + enemy_action = "[enemy_name] steals [stealamt] of your power!" + playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + player_mp -= stealamt + + if (player_mp <= 0) + gameover = 1 + sleep(10) + temp = "You have been drained! GAME OVER" + if(emagged) + feedback_inc("arcade_loss_mana_emagged") + usr.gib() + else + feedback_inc("arcade_loss_mana_normal") + + else if ((enemy_hp <= 10) && (enemy_mp > 4)) + enemy_action = "[enemy_name] heals for 4 health!" + playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + enemy_hp += 4 + enemy_mp -= 4 + + else + var/attackamt = rand(3,6) + enemy_action = "[enemy_name] attacks for [attackamt] damage!" + playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + player_hp -= attackamt + + if ((player_mp <= 0) || (player_hp <= 0)) + gameover = 1 + temp = "You have been crushed! GAME OVER" + playsound(src, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + if(emagged) + feedback_inc("arcade_loss_hp_emagged") + usr.gib() + else + feedback_inc("arcade_loss_hp_normal") + + blocked = 0 + return + + +/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) + if(!emagged) + to_chat(user, span("notice","You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Hyper-Lethal Mode.")) + + temp = "If you die in the game, you die for real!" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + blocked = 0 + emagged = 1 + + enemy_name = "Cuban Pete" + name = "Outbomb Cuban Pete" + + return 1 + + +////////////////////////// +// ORION TRAIL HERE // +////////////////////////// +#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_MUTINY "Mutiny?" +#define ORION_TRAIL_MUTINY_ATTACK "Mutinous Ambush" +#define ORION_TRAIL_MALFUNCTION "Malfunction" +#define ORION_TRAIL_COLLISION "Collision" +#define ORION_TRAIL_SPACEPORT "Spaceport" +#define ORION_TRAIL_BLACKHOLE "BlackHole" + +#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 = "Learn how our ancestors got to Orion, and have fun in the process!" + icon_state = "arcade1" + icon_screen = "orion" + circuit = /obj/item/weapon/circuitboard/arcade/orion_trail + var/busy = 0 //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_MUTINY = 3, + ORION_TRAIL_MALFUNCTION = 2, + ORION_TRAIL_COLLISION = 1, + ORION_TRAIL_SPACEPORT = 2 + ) + var/list/stops = list() + var/list/stopblurbs = list() + var/traitors_aboard = 0 + var/spaceport_raided = 0 + var/spaceport_freebie = 0 + var/last_spaceport_action = "" + var/gameStatus = ORION_STATUS_START + var/canContinueEvent = 0 + +/obj/machinery/computer/arcade/orion_trail/New() + ..() + // 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 + traitors_aboard = 0 + + //spaceport junk + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + +/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/living/user) + if(..()) + return + if(fuel <= 0 || food <=0 || settlers.len == 0) + gameStatus = ORION_STATUS_GAMEOVER + event = null + user.set_machine(src) + var/dat = "" + if(gameStatus == ORION_STATUS_GAMEOVER) + playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + dat = "

    Game Over

    " + dat += "Like many before you, your crew never made it to Orion, lost to space...
    forever." + if(settlers.len == 0) + dat += "
    Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy." + else + if(food <= 0) + dat += "
    You ran out of food and starved." + if(emagged) + user.nutrition = 0 //yeah you pretty hongry + to_chat(user, span("danger", "Your 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 += "
    You ran out of fuel, and drift, slowly, into a star." + if(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,span("danger", "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames.")) + dat += "

    OK...

    " + + if(emagged) + to_chat(user, span("danger", "You're never going to make it to Orion...")) + user.death() + emagged = 0 //removes the emagged status after you lose + gameStatus = ORION_STATUS_START + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + + 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 your ancestors!



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

    Close

    " + user << browse(dat,"window=arcade") + 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 = 1 + + if (href_list["continue"]) //Continue your travels + if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) + if(turns >= ORION_TRAIL_WINTURN) + win() + else + food -= (alive+traitors_aboard)*2 + fuel -= 5 + if(turns == 2 && prob(30)) + event = ORION_TRAIL_COLLISION + event() + else if(prob(75)) + event = pickweight(events) + if(traitors_aboard) + if(event == ORION_TRAIL_MUTINY || prob(55)) + event = ORION_TRAIL_MUTINY_ATTACK + event() + turns += 1 + if(emagged) + var/mob/living/carbon/M = usr //for some vars + switch(event) + if(ORION_TRAIL_RAIDERS) + if(prob(50)) + to_chat(usr, span("warning", "You 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, span("danger", "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...")) + M.take_organ_damage(25) + if(ORION_TRAIL_ILLNESS) + var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS + if(severity == 1) + to_chat(M, span("warning", "You suddenly feel slightly nauseous.")) //got off lucky + if(severity == 2) + to_chat(usr, span("warning", "You suddenly feel extremely nauseous and hunch over until it passes.")) + M.Stun(3) + if(severity >= 3) //you didn't pray hard enough + to_chat(M, span("warning", "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.")) + spawn(30) + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + H.vomit() + if(ORION_TRAIL_FLUX) + if(prob(75)) + M.Weaken(3) + src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.") + M.take_organ_damage(15) + else + to_chat(M, span("warning", "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) && !hull) + var/turf/simulated/floor/F = src.loc + F.ChangeTurf(/turf/space) + src.visible_message(span("danger", "Something slams into the floor around \the [src], exposing it to space!"), "You hear something crack and break.") + else + src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") + if(ORION_TRAIL_MALFUNCTION) + src.visible_message("\The [src] buzzes and the screen goes blank for a moment before returning to the game.") + 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) + src.audible_message("\The [src] lets out a somehow reassuring chime.", runemessage = "reassuring chime") + else if(oldfuel < fuel || oldfood < food) + src.audible_message("\The [src] lets out a somehow ominous chime.", runemessage = "ominous chime") + food = oldfood + fuel = oldfuel + + else if(href_list["newgame"]) //Reset everything + if(gameStatus == ORION_STATUS_START) + playsound(src, 'sound/arcade/Ori_begin.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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["slow"]) //slow down + if(event == ORION_TRAIL_FLUX) + food -= (alive+traitors_aboard)*2 + fuel -= 5 + event = null + else if(href_list["pastblack"]) //slow down + if(turns == 7) + food -= ((alive+traitors_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+traitors_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(emagged) //has to be here because otherwise it doesn't work + src.show_message("\The [src] states, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRIFIED.","You hear something say, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRFIED'") + to_chat(usr, span("warning", "Something draws you closer and closer to the machine.")) + sleep(10) + to_chat(usr, span("danger", "This is really starting to hurt!")) + var i; //spawning a literal blackhole would be fun, but a bit disruptive. + for(i=0;i<4;i++) + var/mob/living/L = usr + if(istype(L)) + L.adjustBruteLoss(25) + sleep(10) + 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_MUTINY) + playsound(src, 'sound/arcade/kill_crew.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + var/sheriff = remove_crewmember() //I shot the sheriff + var/mob/living/L = usr + if(!istype(L)) + return + if(settlers.len == 0 || alive == 0) + src.visible_message("\The [src] states, 'EVERYONE HAS DIED, GAMEOVER.'", "You hear something state, 'EVERYONE HAS DIED, GAMEOVER.'") + if(emagged) + src.visible_message("\The [src] produces a loud, gunlike sound.") + L.adjustBruteLoss(30) + emagged = 0 + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(emagged) + if(usr.name == sheriff) + src.visible_message("\The [src] states, 'THE CREW HAS CHOSEN TO KILL [usr]'. A gunshot can be heard coming from \the [src]", "You hear 'THE CREW HAS CHOSEN TO KILL [usr]' followed by a gunshot") + L.adjustBruteLoss(30) + if(event == ORION_TRAIL_MUTINY) //only ends the ORION_TRAIL_MUTINY event, since you can do this action in multiple places + event = null + + //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) + playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + var/bought = add_crewmember() + last_spaceport_action = "You hired [bought] as a new crewmember." + fuel -= 10 + food -= 10 + event() + + else if(href_list["sellcrew"]) //sell a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && settlers.len > 1) + playsound(src, 'sound/arcade/lose_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + var/sold = remove_crewmember() + last_spaceport_action = "You sold your 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) + playsound(src, 'sound/arcade/raid.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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 your scramble to escape! ([FU]FU,[FO]FO)" + + //your chance of lose a crewmember is 1/2 your 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 your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + if(emagged) + src.visible_message("The machine states, 'YOU ARE UNDER ARREST, RAIDER!' and shoots handcuffs onto [usr]!", "You hear something say 'YOU ARE UNDER ARREST, RAIDER!' and a clinking sound") + var/obj/item/weapon/handcuffs/C = new(src.loc) + var/mob/living/carbon/human/H = usr + if(istype(H)) + C.forceMove(H) + H.handcuffed = C + H.update_handcuffed() + else + C.throw_at(usr,16,3,src) + + + fuel += FU + food += FO + event() + + else if(href_list["buyparts"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && fuel > 5) + playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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) + playsound(src, 'sound/arcade/get_fuel.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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() + + src.add_fingerprint(usr) + src.updateUsrDialog() + busy = 0 + return + + +/obj/machinery/computer/arcade/orion_trail/proc/event() + eventdat = "

    [event]

    " + canContinueEvent = 0 + switch(event) + if(ORION_TRAIL_RAIDERS) + eventdat += "Raiders have come aboard your 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) + playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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_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) + playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + eventdat += "Oh no! The engine has broken down!" + eventdat += "
    You can repair it with an engine part, or you can make repairs for 3 days." + if(engine >= 1) + eventdat += "

    Use Part Wait

    " + else + eventdat += "

    Wait

    " + eventdat += "

    Close

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

    Use Part Wait

    " + else + eventdat += "

    Wait

    " + eventdat += "

    Close

    " + + if(ORION_TRAIL_COLLISION) + playsound(src, 'sound/arcade/explo.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + 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 += "
    You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." + if(hull >= 1) + eventdat += "

    Use Part Wait

    " + 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_MUTINY) + eventdat += "You've been hearing rumors of dissenting opinions amoungst your men." + if(settlers.len <= 2) + eventdat += "
    Your crew's so tiny you don't think anybody would risk an uprising." + eventdat += "

    Continue

    " + eventdat += "

    Close

    " + if(prob(10)) + traitors_aboard = min(++traitors_aboard,2) + else + if(traitors_aboard) //less likely to stack traitors + if(prob(20)) + traitors_aboard = min(++traitors_aboard,2) + else if(prob(70)) + traitors_aboard = min(++traitors_aboard,2) + + eventdat += "

    Kill a crewmember

    " + eventdat += "

    Risk it

    " + eventdat += "

    Close

    " + canContinueEvent = 1 + + if(ORION_TRAIL_MUTINY_ATTACK) + if(traitors_aboard <= 0) //shouldn't trigger, but hey. + eventdat += "Haha, fooled you, there isn't a mutiny on board!" + eventdat += "
    (You should report this to a coder :S)" + else + var/trait1 = remove_crewmember() + var/trait2 = "" + if(traitors_aboard >= 2) + trait2 = remove_crewmember() + + eventdat += "Oh no, some of your crew are attempting to mutiny!!" + if(trait2) + eventdat += "
    [trait1] and [trait2]'s have armed themselves with weapons!" + else + eventdat += "
    [trait1]'s armed with a weapon!" + + var/chance2attack = alive*20 + if(prob(chance2attack)) + var/chancetokill = 30*traitors_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 traitorss, 2 crew is 50% chance + if(prob(chancetokill)) + var/deadguy = remove_crewmember() + eventdat += "
    The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] up to [deadguy] and murder[trait2 ? "" : "s"] them!" + else + eventdat += "
    You valiantly fight off the traitor[trait2 ? "s":""]!" + eventdat += "
    You cut the traitor[trait2 ? "s":""] up into meat... Eww" + if(trait2) + food += 30 + traitors_aboard = max(0,traitors_aboard-2) + else + food += 15 + traitors_aboard = max(0,--traitors_aboard) + else + eventdat += "
    The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] away, What wimps!" + if(trait2) + traitors_aboard = max(0,traitors_aboard-2) + else + traitors_aboard = max(0,--traitors_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! they wont let you dock since you tried to attack them!" + if(last_spaceport_action) + eventdat += "
    Last Spaceport Action: [last_spaceport_action]" + eventdat += "

    Depart Spaceport

    " + eventdat += "

    Close

    " + else + eventdat += "You pull the ship up to dock at a nearby Spaceport, 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 Spaceport 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 your 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 give you some supplies. (+[FU]FU,+[FO]FO)" + if(freecrew) + eventdat += "
    You 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 += "

    You cannot afford a new Crewmember

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

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

    " + else + eventdat += "

    You cannot afford to sell a Crewmember

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

    Spare Parts:

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

    Buy Engine Parts (-5FU)

    " + else + eventdat += "

    You cannot afford to buy Engine Parts" + + //Hull plates + if(fuel > 5) + eventdat += "

    Buy Hull Plates (-5FU)

    " + else + eventdat += "

    You cannot afford to buy Hull Plates" + + //Electronics + if(fuel > 5) + eventdat += "

    Buy Spare Electronics (-5FU)

    " + else + eventdat += "

    You cannot afford to buy Spare Electronics" + + //Trade + if(fuel > 5) + eventdat += "

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

    " + else + eventdat += "

    You cannot afford to Trade Fuel for Food 5) + eventdat += "

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

    " + else + eventdat += "

    You cannot afford to Trade Food for Fuel\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") + sleep(20) + src.visible_message(span("warning", "[src] begins to vibrate...")) + src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") + sleep(30) + src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") + sleep(3.6) + src.visible_message(span("danger", "[src] explodes!")) + explosion(src.loc, 1,2,4) + qdel(src) + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_MUTINY +#undef ORION_TRAIL_MUTINY_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET + +////////////////// +// Claw Machine // +////////////////// + +/obj/machinery/computer/arcade/clawmachine + name = "AlliCo Grab-a-Gift" + desc = "Show off your arcade skills for that special someone!" + icon_state = "clawmachine_new" + icon_keyboard = null + icon_screen = null + circuit = /obj/item/weapon/circuitboard/arcade/clawmachine + prizes = list(/obj/random/plushie) + var/wintick = 0 + var/winprob = 0 + var/instructions = "Insert 1 thaler or swipe a card to play!" + var/gameStatus = "CLAWMACHINE_NEW" + var/gamepaid = 0 + var/gameprice = 1 + var/winscreen = "" + +/// Payment +/obj/machinery/computer/arcade/clawmachine/attackby(obj/item/I as obj, mob/user as mob) + if(..()) + return + + if(gamepaid == 0 && vendor_account && !vendor_account.suspended) + var/paid = 0 + var/obj/item/weapon/card/id/W = I.GetID() + if(W) //for IDs and PDAs and wallets with IDs + paid = pay_with_card(W,I) + else if(istype(I, /obj/item/weapon/spacecash/ewallet)) + var/obj/item/weapon/spacecash/ewallet/C = I + paid = pay_with_ewallet(C) + else if(istype(I, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/C = I + paid = pay_with_cash(C, user) + if(paid) + gamepaid = 1 + instructions = "Hit start to play!" + return + return + +////// Cash +/obj/machinery/computer/arcade/clawmachine/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user) + if(!emagged) + if(gameprice > cashmoney.worth) + + // This is not a status display message, since it's something the character + // themselves is meant to see BEFORE putting the money in + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") + return 0 + + if(istype(cashmoney, /obj/item/weapon/spacecash)) + + visible_message("\The [usr] inserts some cash into \the [src].") + cashmoney.worth -= gameprice + + if(cashmoney.worth <= 0) + usr.drop_from_inventory(cashmoney) + qdel(cashmoney) + else + cashmoney.update_icon() + + // Machine has no idea who paid with cash + credit_purchase("(cash)") + return 1 + if(emagged) + playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + to_chat(user, "It doesn't seem to accept that! Seem you'll need to swipe a valid ID.") + + +///// Ewallet +/obj/machinery/computer/arcade/clawmachine/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet) + if(!emagged) + visible_message("\The [usr] swipes \the [wallet] through \the [src].") + playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) + if(gameprice > wallet.worth) + visible_message("Insufficient funds.") + return 0 + else + wallet.worth -= gameprice + credit_purchase("[wallet.owner_name] (chargecard)") + return 1 + if(emagged) + playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + to_chat(usr, "It doesn't seem to accept that! Seem you'll need to swipe a valid ID.") + +///// ID +/obj/machinery/computer/arcade/clawmachine/proc/pay_with_card(var/obj/item/weapon/card/id/I, var/obj/item/ID_container) + if(I==ID_container || ID_container == null) + visible_message("\The [usr] swipes \the [I] through \the [src].") + else + visible_message("\The [usr] swipes \the [ID_container] through \the [src].") + playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) + var/datum/money_account/customer_account = get_account(I.associated_account_number) + if(!customer_account) + visible_message("Error: Unable to access account. Please contact technical support if problem persists.") + return 0 + + if(customer_account.suspended) + visible_message("Unable to access account: account suspended.") + return 0 + + // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is + // empty at high security levels + if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) + var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") + customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) + + if(!customer_account) + visible_message("Unable to access account: incorrect credentials.") + return 0 + + if(gameprice > customer_account.money) + visible_message("Insufficient funds in account.") + return 0 + else + // Okay to move the money at this point + if(emagged) + gameprice = customer_account.money + // debit money from the purchaser's account + customer_account.money -= gameprice + + // create entry in the purchaser's account log + var/datum/transaction/T = new() + T.target_name = "[vendor_account.owner_name] (via [name])" + T.purpose = "Purchase of arcade game([name])" + if(gameprice > 0) + T.amount = "([gameprice])" + else + T.amount = "[gameprice]" + T.source_terminal = name + T.date = current_date_string + T.time = stationtime2text() + customer_account.transaction_log.Add(T) + + // Give the vendor the money. We use the account owner name, which means + // that purchases made with stolen/borrowed card will look like the card + // owner made them + credit_purchase(customer_account.owner_name) + return 1 + +/// Add to vendor account + +/obj/machinery/computer/arcade/clawmachine/proc/credit_purchase(var/target as text) + vendor_account.money += gameprice + + var/datum/transaction/T = new() + T.target_name = target + T.purpose = "Purchase of arcade game([name])" + T.amount = "[gameprice]" + T.source_terminal = name + T.date = current_date_string + T.time = stationtime2text() + vendor_account.transaction_log.Add(T) + +/// End Payment + +/obj/machinery/computer/arcade/clawmachine/New() + ..() + +/obj/machinery/computer/arcade/clawmachine/attack_hand(mob/living/user) + if(..()) + return + tgui_interact(user) + +/// TGUI Stuff + +/obj/machinery/computer/arcade/clawmachine/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ClawMachine", name, ui_x = 300, ui_y = 400) + ui.autoupdate = TRUE + ui.open() + +/obj/machinery/computer/arcade/clawmachine/tgui_data(mob/user) + var/list/data = list() + + data["wintick"] = wintick + data["instructions"] = instructions + data["gameStatus"] = gameStatus + data["winscreen"] = winscreen + + return data + +/obj/machinery/computer/arcade/clawmachine/tgui_act(action, params) + if(..()) + return + + if(action == "newgame" && gamepaid == 0) + playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + + if(action == "newgame" && gamepaid == 1) + gameStatus = "CLAWMACHINE_ON" + icon_state = "clawmachine_new_move" + instructions = "Guide the claw to the prize you want!" + wintick = 0 + + if(action == "return" && gameStatus == "CLAWMACHINE_END") + gameStatus = "CLAWMACHINE_NEW" + + if(action == "pointless" && wintick < 10) + wintick += 1 + + if(action == "pointless" && wintick >= 10) + instructions = "Insert 1 thaler or swipe a card to play!" + clawvend() + +/obj/machinery/computer/arcade/clawmachine/proc/clawvend() /// True to a real claw machine, it's NEARLY impossible to win. + winprob += 1 /// Yeah. + + if(prob(winprob)) /// YEAH. + if(!emagged) + prizevend() + winscreen = "You won!" + else if(emagged) + gameprice = 1 + emagged = 0 + winscreen = "You won...?" + var/obj/item/weapon/grenade/G = new /obj/item/weapon/grenade/explosive(get_turf(src)) /// YEAAAAAAAAAAAAAAAAAAH!!!!!!!!!! + G.activate() + G.throw_at(get_turf(usr),10,10) /// Play stupid games, win stupid prizes. + + playsound(src, 'sound/arcade/Ori_win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + winprob = 0 + + else + playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) + winscreen = "Aw, shucks. Try again!" + wintick = 0 + gamepaid = 0 + icon_state = "clawmachine_new" + gameStatus = "CLAWMACHINE_END" + +/obj/machinery/computer/arcade/clawmachine/emag_act(mob/user) + if(!emagged) + to_chat(user, "You modify the claw of the machine. The next one is sure to win! You just have to pay...") + name = "AlliCo Snag-A-Prize" + desc = "Get some goodies, all for you!" + instructions = "Swipe a card to play!" + winprob = 100 + gamepaid = 0 + wintick = 0 + gameStatus = "CLAWMACHINE_NEW" + emagged = 1 + return 1 + +/obj/machinery/computer/arcade/attackby(obj/item/O, mob/user, params) + ..() + if(istype(O, /obj/item/stack/arcadeticket)) + var/obj/item/stack/arcadeticket/T = O + var/amount = T.get_amount() + if(amount <2) + to_chat(user, "You need 2 tickets to claim a prize!") + return + prizevend(user) + T.pay_tickets() + T.update_icon() + O = T + to_chat(user, "You turn in 2 tickets to the [src] and claim a prize!") + return + else ..() //You can now actually deconstruct these. \ No newline at end of file diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 33d8ae2e86..dadd437b39 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -1,114 +1,114 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/structure/computerframe - density = TRUE - anchored = FALSE - name = "computer frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "0" - var/state = 0 - var/obj/item/weapon/circuitboard/circuit = null -// weight = 1.0E8 - -/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob) - switch(state) - if(0) - if(P.has_tool_quality(TOOL_WRENCH)) - playsound(src, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed)) - to_chat(user, "You wrench the frame into place.") - src.anchored = TRUE - src.state = 1 - if(P.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = P.get_welder() - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") - return - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - to_chat(user, "You deconstruct the frame.") - new /obj/item/stack/material/steel( src.loc, 5 ) - qdel(src) - if(1) - if(P.has_tool_quality(TOOL_WRENCH)) - playsound(src, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed)) - to_chat(user, "You unfasten the frame.") - src.anchored = FALSE - src.state = 0 - if(istype(P, /obj/item/weapon/circuitboard) && !circuit) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "computer") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You place the circuit board inside the frame.") - src.icon_state = "1" - src.circuit = P - user.drop_item() - P.loc = src - else - to_chat(user, "This frame does not accept circuit boards of this type!") - if(P.has_tool_quality(TOOL_SCREWDRIVER) && circuit) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You screw the circuit board into place.") - src.state = 2 - src.icon_state = "2" - if(P.has_tool_quality(TOOL_CROWBAR)) && circuit) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You remove the circuit board.") - src.state = 1 - src.icon_state = "0" - circuit.loc = src.loc - src.circuit = null - if(2) - if(P.has_tool_quality(TOOL_SCREWDRIVER) && circuit) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You unfasten the circuit board.") - src.state = 1 - src.icon_state = "1" - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P - if (C.get_amount() < 5) - to_chat(user, "You need five coils of wire to add them to the frame.") - return - to_chat(user, "You start to add cables to the frame.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && state == 2) - if (C.use(5)) - to_chat(user, "You add cables to the frame.") - state = 3 - icon_state = "3" - if(3) - if(P.has_tool_quality(TOOL_WIRECUTTER)) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You remove the cables.") - src.state = 2 - src.icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) - A.amount = 5 - - if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") - var/obj/item/stack/G = P - if (G.get_amount() < 2) - to_chat(user, "You need two sheets of glass to put in the glass panel.") - return - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You start to put in the glass panel.") - if(do_after(user, 20) && state == 3) - if (G.use(2)) - to_chat(user, "You put in the glass panel.") - src.state = 4 - src.icon_state = "4" - if(4) - if(P.has_tool_quality(TOOL_CROWBAR)) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You remove the glass panel.") - src.state = 3 - src.icon_state = "3" - new /obj/item/stack/material/glass( src.loc, 2 ) - if(P.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You connect the monitor.") - var/B = new src.circuit.build_path ( src.loc ) - src.circuit.construct(B) - qdel(src) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/obj/structure/computerframe + density = TRUE + anchored = FALSE + name = "computer frame" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "0" + var/state = 0 + var/obj/item/weapon/circuitboard/circuit = null +// weight = 1.0E8 + +/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob) + switch(state) + if(0) + if(P.has_tool_quality(TOOL_WRENCH)) + playsound(src, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed)) + to_chat(user, "You wrench the frame into place.") + src.anchored = TRUE + src.state = 1 + if(P.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = P.get_welder() + if(!WT.remove_fuel(0, user)) + to_chat(user, "The welding tool must be on to complete this task.") + return + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + to_chat(user, "You deconstruct the frame.") + new /obj/item/stack/material/steel( src.loc, 5 ) + qdel(src) + if(1) + if(P.has_tool_quality(TOOL_WRENCH)) + playsound(src, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed)) + to_chat(user, "You unfasten the frame.") + src.anchored = FALSE + src.state = 0 + if(istype(P, /obj/item/weapon/circuitboard) && !circuit) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == "computer") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You place the circuit board inside the frame.") + src.icon_state = "1" + src.circuit = P + user.drop_item() + P.loc = src + else + to_chat(user, "This frame does not accept circuit boards of this type!") + if(P.has_tool_quality(TOOL_SCREWDRIVER) && circuit) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You screw the circuit board into place.") + src.state = 2 + src.icon_state = "2" + if(P.has_tool_quality(TOOL_CROWBAR)) && circuit) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You remove the circuit board.") + src.state = 1 + src.icon_state = "0" + circuit.loc = src.loc + src.circuit = null + if(2) + if(P.has_tool_quality(TOOL_SCREWDRIVER) && circuit) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You unfasten the circuit board.") + src.state = 1 + src.icon_state = "1" + if(istype(P, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = P + if (C.get_amount() < 5) + to_chat(user, "You need five coils of wire to add them to the frame.") + return + to_chat(user, "You start to add cables to the frame.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && state == 2) + if (C.use(5)) + to_chat(user, "You add cables to the frame.") + state = 3 + icon_state = "3" + if(3) + if(P.has_tool_quality(TOOL_WIRECUTTER)) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You remove the cables.") + src.state = 2 + src.icon_state = "2" + var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) + A.amount = 5 + + if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") + var/obj/item/stack/G = P + if (G.get_amount() < 2) + to_chat(user, "You need two sheets of glass to put in the glass panel.") + return + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to put in the glass panel.") + if(do_after(user, 20) && state == 3) + if (G.use(2)) + to_chat(user, "You put in the glass panel.") + src.state = 4 + src.icon_state = "4" + if(4) + if(P.has_tool_quality(TOOL_CROWBAR)) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You remove the glass panel.") + src.state = 3 + src.icon_state = "3" + new /obj/item/stack/material/glass( src.loc, 2 ) + if(P.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You connect the monitor.") + var/B = new src.circuit.build_path ( src.loc ) + src.circuit.construct(B) + qdel(src) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 4421ac7479..086af2b34b 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -1,341 +1,341 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/computer/security - name = "security camera monitor" - desc = "Used to access the various cameras on the station." - - icon_keyboard = "security_key" - icon_screen = "cameras" - light_color = "#a91515" - circuit = /obj/item/weapon/circuitboard/security - - var/mapping = 0//For the overview file, interesting bit of code. - var/list/network = list() - - var/datum/tgui_module/camera/camera - var/camera_datum_type = /datum/tgui_module/camera - -/obj/machinery/computer/security/Initialize() - . = ..() - if(!LAZYLEN(network)) - network = get_default_networks() - camera = new camera_datum_type(src, network) - -/obj/machinery/computer/security/proc/get_default_networks() - . = using_map.station_networks.Copy() - -/obj/machinery/computer/security/Destroy() - QDEL_NULL(camera) - return ..() - -/obj/machinery/computer/security/tgui_interact(mob/user, datum/tgui/ui = null) - camera.tgui_interact(user, ui) - -/obj/machinery/computer/security/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/computer/security/attack_robot(mob/user) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(!R.shell) - return attack_hand(user) - ..() - -/obj/machinery/computer/security/attack_ai(mob/user) - if(isAI(user)) - to_chat(user, "You realise its kind of stupid to access a camera console when you have the entire camera network at your metaphorical fingertips") - return - attack_hand(user) - -/obj/machinery/computer/security/proc/set_network(list/new_network) - network = new_network - camera.network = network - camera.access_based = FALSE - -//Camera control: arrow keys. -/obj/machinery/computer/security/telescreen - name = "Telescreen" - desc = "Used for watching an empty arena." - icon_state = "wallframe" - layer = ABOVE_WINDOW_LAYER - icon_keyboard = null - icon_screen = null - light_range_on = 0 - network = list(NETWORK_THUNDER) - density = FALSE - circuit = null - -GLOBAL_LIST_EMPTY(entertainment_screens) -GLOBAL_LIST_EMPTY(bodycamera_screens) // CHOMPEdit - -/obj/machinery/computer/security/telescreen/entertainment - name = "entertainment monitor" - desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" - icon = 'icons/obj/entertainment_monitor.dmi' - icon_state = "screen" - icon_screen = null - light_color = "#FFEEDB" - light_range_on = 2 - network = list(NETWORK_THUNDER) - circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment - camera_datum_type = /datum/tgui_module/camera/bigscreen - - var/obj/item/device/radio/radio = null - var/obj/effect/overlay/vis/pinboard - var/datum/weakref/showing - - var/enabled = TRUE // on or off - -/obj/machinery/computer/security/telescreen/entertainment/Initialize() - GLOB.entertainment_screens += src - - var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask") - - add_overlay("glass") - - pinboard = new() - pinboard.icon = icon - pinboard.icon_state = "pinboard" - pinboard.layer = 0.1 - pinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE - pinboard.appearance_flags = KEEP_TOGETHER - pinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask)) - vis_contents += pinboard - - . = ..() - - radio = new(src) - radio.listening = TRUE - radio.broadcasting = FALSE - radio.set_frequency(ENT_FREQ) - radio.canhear_range = world.view // Same as default sight range. - power_change() - -/obj/machinery/computer/security/telescreen/entertainment/Destroy() - if(showing) - stop_showing() - vis_contents.Cut() - qdel_null(pinboard) - qdel_null(radio) - return ..() - -/obj/machinery/computer/security/telescreen/entertainment/proc/toggle() - enabled = !enabled - if(!enabled) - stop_showing() - radio?.on = FALSE - else if(operable()) - radio?.on = TRUE - -/obj/machinery/computer/security/telescreen/entertainment/Click(location, control, params) - var/list/modifiers = params2list(params) - if(modifiers["alt"]) - if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) - toggle() - visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") - //CHOMPEdit start - Changing click to only come into play when shift or alt clicking. These things are ANNOYING. - return - if(modifiers["shift"]) - attack_hand(usr) - return - ..() - //CHOMPEdit end - -/obj/machinery/computer/security/telescreen/entertainment/update_icon() - return // NUH - -/obj/machinery/computer/security/telescreen/entertainment/proc/show_thing(atom/thing) - if(!enabled) - return - if(showing) - stop_showing() - if(stat & NOPOWER) - return - showing = WEAKREF(thing) - pinboard.vis_contents = list(thing) - -/obj/machinery/computer/security/telescreen/entertainment/proc/stop_showing() - // Reverse of the above - pinboard.vis_contents = null - showing = null - -/obj/machinery/computer/security/telescreen/entertainment/proc/maybe_stop_showing(datum/weakref/thingref) - if(showing == thingref) - stop_showing() - -/obj/machinery/computer/security/telescreen/entertainment/power_change() - ..() - if(stat & NOPOWER) - radio?.on = FALSE - stop_showing() - else if(enabled) - radio?.on = TRUE - -// CHOMPEdit Start - Bodycams -/obj/machinery/computer/security/telescreen/bodycamera - name = "bodycamera monitor" - desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" - icon = 'icons/obj/entertainment_monitor.dmi' - icon_state = "screen" - icon_screen = null - light_color = "#FFEEDB" - light_range_on = 2 - network = list(NETWORK_BODYCAM) - circuit = /obj/item/weapon/circuitboard/security/telescreen/bodycamera - camera_datum_type = /datum/tgui_module/camera/bigscreen - - var/obj/item/device/radio/bradio = null - var/obj/effect/overlay/vis/bpinboard - var/datum/weakref/showing - var/datum/weakref/the_camera - - var/enabled = TRUE // on or off - -/obj/machinery/computer/security/telescreen/bodycamera/Initialize() - GLOB.bodycamera_screens += src - - var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask") - - add_overlay("glass") - - bpinboard = new() - bpinboard.icon = icon - bpinboard.icon_state = "pinboard" - bpinboard.layer = 0.1 - bpinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE - bpinboard.appearance_flags = KEEP_TOGETHER - bpinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask)) - vis_contents += bpinboard - - . = ..() - - bradio = new(src) - bradio.listening = TRUE - bradio.broadcasting = FALSE - bradio.set_frequency(BDCM_FREQ) - bradio.canhear_range = world.view // Same as default sight range. - power_change() - -/obj/machinery/computer/security/telescreen/bodycamera/Destroy() - if(showing) - stop_showing() - vis_contents.Cut() - qdel_null(bpinboard) - qdel_null(bradio) - return ..() - -/obj/machinery/computer/security/telescreen/bodycamera/proc/bodycam_toggle() - enabled = !enabled - if(!enabled) - stop_showing() - bradio?.on = FALSE - else if(operable()) - bradio?.on = TRUE - -/obj/machinery/computer/security/telescreen/bodycamera/Click(location, control, params) - var/list/modifiers = params2list(params) - if(modifiers["alt"]) - if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) - bodycam_toggle() - visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") - //CHOMPEdit start - Changing click to only come into play when shift or alt clicking. These things are ANNOYING. - return - if(modifiers["shift"]) - attack_hand(usr) - return - ..() - //CHOMPEdit end - -/obj/machinery/computer/security/telescreen/bodycamera/update_icon() - return // NUH - -/obj/machinery/computer/security/telescreen/bodycamera/process() - if(!showing || !the_camera) - stop_showing() - return - var/atom/them = showing.resolve() - var/obj/item/clothing/accessory/bodycam/bo_cam = the_camera.resolve() - var/turf/here = get_turf(them) - var/turf/there = get_turf(bo_cam) - if(here != there) - stop_showing() - -/obj/machinery/computer/security/telescreen/bodycamera/proc/show_thing(atom/thing, obj/item/clothing/accessory/bodycam/other_thing) - if(!enabled) - return - if(showing) - stop_showing() - if(stat & NOPOWER) - return - if(!thing || !other_thing) - return - the_camera = WEAKREF(other_thing) - var/tries = 10 - var/atom/recursive_loc = thing - while(--tries) - recursive_loc = thing.loc - if(!istype(recursive_loc, /atom/movable)) - break - thing = recursive_loc // should get the topmost atom, which *should* be a mob, or a locker, or something that isnt just ~clothes~ - showing = WEAKREF(thing) - bpinboard.vis_contents = list(thing) - -/obj/machinery/computer/security/telescreen/bodycamera/proc/stop_showing() - // Reverse of the above - bpinboard.vis_contents = null - showing = null - the_camera = null - -/obj/machinery/computer/security/telescreen/bodycamera/proc/maybe_stop_showing(datum/weakref/thingref) - if(showing == thingref) - stop_showing() - -/obj/machinery/computer/security/telescreen/bodycamera/power_change() - ..() - if(stat & NOPOWER) - bradio?.on = FALSE - stop_showing() - else if(enabled) - bradio?.on = TRUE -// CHOMPEdit End - -/obj/machinery/computer/security/wooden_tv - name = "security camera monitor" - desc = "An old TV hooked into the station's camera network." - icon_state = "television" - icon_keyboard = null - icon_screen = "detective_tv" - circuit = /obj/item/weapon/circuitboard/security/tv - light_color = "#3848B3" - light_power_on = 0.5 - -/obj/machinery/computer/security/mining - name = "outpost camera monitor" - desc = "Used to watch over mining operations." - icon_keyboard = "mining_key" - icon_screen = "mining" - network = list("Mining Outpost") - circuit = /obj/item/weapon/circuitboard/security/mining - light_color = "#F9BBFC" - -/obj/machinery/computer/security/engineering - name = "engineering camera monitor" - desc = "Used to monitor fires and breaches." - icon_keyboard = "power_key" - icon_screen = "engie_cams" - circuit = /obj/item/weapon/circuitboard/security/engineering - light_color = "#FAC54B" - -/obj/machinery/computer/security/engineering/get_default_networks() - . = engineering_networks.Copy() - -/obj/machinery/computer/security/nuclear - name = "head mounted camera monitor" - desc = "Used to access the built-in cameras in helmets." - icon_state = "syndicam" - network = list(NETWORK_MERCENARY) - circuit = null - req_access = list(150) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/obj/machinery/computer/security + name = "security camera monitor" + desc = "Used to access the various cameras on the station." + + icon_keyboard = "security_key" + icon_screen = "cameras" + light_color = "#a91515" + circuit = /obj/item/weapon/circuitboard/security + + var/mapping = 0//For the overview file, interesting bit of code. + var/list/network = list() + + var/datum/tgui_module/camera/camera + var/camera_datum_type = /datum/tgui_module/camera + +/obj/machinery/computer/security/Initialize() + . = ..() + if(!LAZYLEN(network)) + network = get_default_networks() + camera = new camera_datum_type(src, network) + +/obj/machinery/computer/security/proc/get_default_networks() + . = using_map.station_networks.Copy() + +/obj/machinery/computer/security/Destroy() + QDEL_NULL(camera) + return ..() + +/obj/machinery/computer/security/tgui_interact(mob/user, datum/tgui/ui = null) + camera.tgui_interact(user, ui) + +/obj/machinery/computer/security/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/computer/security/attack_robot(mob/user) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(!R.shell) + return attack_hand(user) + ..() + +/obj/machinery/computer/security/attack_ai(mob/user) + if(isAI(user)) + to_chat(user, "You realise its kind of stupid to access a camera console when you have the entire camera network at your metaphorical fingertips") + return + attack_hand(user) + +/obj/machinery/computer/security/proc/set_network(list/new_network) + network = new_network + camera.network = network + camera.access_based = FALSE + +//Camera control: arrow keys. +/obj/machinery/computer/security/telescreen + name = "Telescreen" + desc = "Used for watching an empty arena." + icon_state = "wallframe" + layer = ABOVE_WINDOW_LAYER + icon_keyboard = null + icon_screen = null + light_range_on = 0 + network = list(NETWORK_THUNDER) + density = FALSE + circuit = null + +GLOBAL_LIST_EMPTY(entertainment_screens) +GLOBAL_LIST_EMPTY(bodycamera_screens) // CHOMPEdit + +/obj/machinery/computer/security/telescreen/entertainment + name = "entertainment monitor" + desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" + icon = 'icons/obj/entertainment_monitor.dmi' + icon_state = "screen" + icon_screen = null + light_color = "#FFEEDB" + light_range_on = 2 + network = list(NETWORK_THUNDER) + circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment + camera_datum_type = /datum/tgui_module/camera/bigscreen + + var/obj/item/device/radio/radio = null + var/obj/effect/overlay/vis/pinboard + var/datum/weakref/showing + + var/enabled = TRUE // on or off + +/obj/machinery/computer/security/telescreen/entertainment/Initialize() + GLOB.entertainment_screens += src + + var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask") + + add_overlay("glass") + + pinboard = new() + pinboard.icon = icon + pinboard.icon_state = "pinboard" + pinboard.layer = 0.1 + pinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE + pinboard.appearance_flags = KEEP_TOGETHER + pinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask)) + vis_contents += pinboard + + . = ..() + + radio = new(src) + radio.listening = TRUE + radio.broadcasting = FALSE + radio.set_frequency(ENT_FREQ) + radio.canhear_range = world.view // Same as default sight range. + power_change() + +/obj/machinery/computer/security/telescreen/entertainment/Destroy() + if(showing) + stop_showing() + vis_contents.Cut() + qdel_null(pinboard) + qdel_null(radio) + return ..() + +/obj/machinery/computer/security/telescreen/entertainment/proc/toggle() + enabled = !enabled + if(!enabled) + stop_showing() + radio?.on = FALSE + else if(operable()) + radio?.on = TRUE + +/obj/machinery/computer/security/telescreen/entertainment/Click(location, control, params) + var/list/modifiers = params2list(params) + if(modifiers["alt"]) + if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) + toggle() + visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") + //CHOMPEdit start - Changing click to only come into play when shift or alt clicking. These things are ANNOYING. + return + if(modifiers["shift"]) + attack_hand(usr) + return + ..() + //CHOMPEdit end + +/obj/machinery/computer/security/telescreen/entertainment/update_icon() + return // NUH + +/obj/machinery/computer/security/telescreen/entertainment/proc/show_thing(atom/thing) + if(!enabled) + return + if(showing) + stop_showing() + if(stat & NOPOWER) + return + showing = WEAKREF(thing) + pinboard.vis_contents = list(thing) + +/obj/machinery/computer/security/telescreen/entertainment/proc/stop_showing() + // Reverse of the above + pinboard.vis_contents = null + showing = null + +/obj/machinery/computer/security/telescreen/entertainment/proc/maybe_stop_showing(datum/weakref/thingref) + if(showing == thingref) + stop_showing() + +/obj/machinery/computer/security/telescreen/entertainment/power_change() + ..() + if(stat & NOPOWER) + radio?.on = FALSE + stop_showing() + else if(enabled) + radio?.on = TRUE + +// CHOMPEdit Start - Bodycams +/obj/machinery/computer/security/telescreen/bodycamera + name = "bodycamera monitor" + desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" + icon = 'icons/obj/entertainment_monitor.dmi' + icon_state = "screen" + icon_screen = null + light_color = "#FFEEDB" + light_range_on = 2 + network = list(NETWORK_BODYCAM) + circuit = /obj/item/weapon/circuitboard/security/telescreen/bodycamera + camera_datum_type = /datum/tgui_module/camera/bigscreen + + var/obj/item/device/radio/bradio = null + var/obj/effect/overlay/vis/bpinboard + var/datum/weakref/showing + var/datum/weakref/the_camera + + var/enabled = TRUE // on or off + +/obj/machinery/computer/security/telescreen/bodycamera/Initialize() + GLOB.bodycamera_screens += src + + var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask") + + add_overlay("glass") + + bpinboard = new() + bpinboard.icon = icon + bpinboard.icon_state = "pinboard" + bpinboard.layer = 0.1 + bpinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE + bpinboard.appearance_flags = KEEP_TOGETHER + bpinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask)) + vis_contents += bpinboard + + . = ..() + + bradio = new(src) + bradio.listening = TRUE + bradio.broadcasting = FALSE + bradio.set_frequency(BDCM_FREQ) + bradio.canhear_range = world.view // Same as default sight range. + power_change() + +/obj/machinery/computer/security/telescreen/bodycamera/Destroy() + if(showing) + stop_showing() + vis_contents.Cut() + qdel_null(bpinboard) + qdel_null(bradio) + return ..() + +/obj/machinery/computer/security/telescreen/bodycamera/proc/bodycam_toggle() + enabled = !enabled + if(!enabled) + stop_showing() + bradio?.on = FALSE + else if(operable()) + bradio?.on = TRUE + +/obj/machinery/computer/security/telescreen/bodycamera/Click(location, control, params) + var/list/modifiers = params2list(params) + if(modifiers["alt"]) + if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) + bodycam_toggle() + visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") + //CHOMPEdit start - Changing click to only come into play when shift or alt clicking. These things are ANNOYING. + return + if(modifiers["shift"]) + attack_hand(usr) + return + ..() + //CHOMPEdit end + +/obj/machinery/computer/security/telescreen/bodycamera/update_icon() + return // NUH + +/obj/machinery/computer/security/telescreen/bodycamera/process() + if(!showing || !the_camera) + stop_showing() + return + var/atom/them = showing.resolve() + var/obj/item/clothing/accessory/bodycam/bo_cam = the_camera.resolve() + var/turf/here = get_turf(them) + var/turf/there = get_turf(bo_cam) + if(here != there) + stop_showing() + +/obj/machinery/computer/security/telescreen/bodycamera/proc/show_thing(atom/thing, obj/item/clothing/accessory/bodycam/other_thing) + if(!enabled) + return + if(showing) + stop_showing() + if(stat & NOPOWER) + return + if(!thing || !other_thing) + return + the_camera = WEAKREF(other_thing) + var/tries = 10 + var/atom/recursive_loc = thing + while(--tries) + recursive_loc = thing.loc + if(!istype(recursive_loc, /atom/movable)) + break + thing = recursive_loc // should get the topmost atom, which *should* be a mob, or a locker, or something that isnt just ~clothes~ + showing = WEAKREF(thing) + bpinboard.vis_contents = list(thing) + +/obj/machinery/computer/security/telescreen/bodycamera/proc/stop_showing() + // Reverse of the above + bpinboard.vis_contents = null + showing = null + the_camera = null + +/obj/machinery/computer/security/telescreen/bodycamera/proc/maybe_stop_showing(datum/weakref/thingref) + if(showing == thingref) + stop_showing() + +/obj/machinery/computer/security/telescreen/bodycamera/power_change() + ..() + if(stat & NOPOWER) + bradio?.on = FALSE + stop_showing() + else if(enabled) + bradio?.on = TRUE +// CHOMPEdit End + +/obj/machinery/computer/security/wooden_tv + name = "security camera monitor" + desc = "An old TV hooked into the station's camera network." + icon_state = "television" + icon_keyboard = null + icon_screen = "detective_tv" + circuit = /obj/item/weapon/circuitboard/security/tv + light_color = "#3848B3" + light_power_on = 0.5 + +/obj/machinery/computer/security/mining + name = "outpost camera monitor" + desc = "Used to watch over mining operations." + icon_keyboard = "mining_key" + icon_screen = "mining" + network = list("Mining Outpost") + circuit = /obj/item/weapon/circuitboard/security/mining + light_color = "#F9BBFC" + +/obj/machinery/computer/security/engineering + name = "engineering camera monitor" + desc = "Used to monitor fires and breaches." + icon_keyboard = "power_key" + icon_screen = "engie_cams" + circuit = /obj/item/weapon/circuitboard/security/engineering + light_color = "#FAC54B" + +/obj/machinery/computer/security/engineering/get_default_networks() + . = engineering_networks.Copy() + +/obj/machinery/computer/security/nuclear + name = "head mounted camera monitor" + desc = "Used to access the built-in cameras in helmets." + icon_state = "syndicam" + network = list(NETWORK_MERCENARY) + circuit = null + req_access = list(150) diff --git a/code/game/machinery/computer/camera_vr.dm b/code/game/machinery/computer/camera_vr.dm index 372a5bfb11..7f9f88d877 100644 --- a/code/game/machinery/computer/camera_vr.dm +++ b/code/game/machinery/computer/camera_vr.dm @@ -1,35 +1,35 @@ -/obj/machinery/computer/security/abductor - name = "camera uplink" - desc = "Used for hacking into camera networks" - icon = 'icons/obj/abductor.dmi' - icon_state = "camera" - network = list( "Mercenary", - "Cargo", - "Circuits", - "Civilian", - "Command", - "Engine", - "Engineering", - "Exploration", - "Medical", - "Mining Outpost", - "Outside", - "Research", - "Research Outpost", - "Robots", - "Security", - "Telecommunications", - "Tether", - "TalonShip", - "Entertainment", - "Communicators" - ) - -/obj/machinery/computer/security/xenobio - name = "xenobiology camera monitor" - desc = "Used to access the xenobiology cell cameras." - icon_keyboard = "mining_key" - icon_screen = "mining" - network = list(NETWORK_XENOBIO) - circuit = /obj/item/weapon/circuitboard/security/xenobio +/obj/machinery/computer/security/abductor + name = "camera uplink" + desc = "Used for hacking into camera networks" + icon = 'icons/obj/abductor.dmi' + icon_state = "camera" + network = list( "Mercenary", + "Cargo", + "Circuits", + "Civilian", + "Command", + "Engine", + "Engineering", + "Exploration", + "Medical", + "Mining Outpost", + "Outside", + "Research", + "Research Outpost", + "Robots", + "Security", + "Telecommunications", + "Tether", + "TalonShip", + "Entertainment", + "Communicators" + ) + +/obj/machinery/computer/security/xenobio + name = "xenobiology camera monitor" + desc = "Used to access the xenobiology cell cameras." + icon_keyboard = "mining_key" + icon_screen = "mining" + network = list(NETWORK_XENOBIO) + circuit = /obj/item/weapon/circuitboard/security/xenobio light_color = "#F9BBFC" \ No newline at end of file diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e878aaaf8a..acc7dcb975 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -1,32 +1,32 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -// The communications computer -/obj/machinery/computer/communications - name = "command and communications console" - desc = "Used to command and control the station. Can relay long-range communications." - icon_keyboard = "tech_key" - icon_screen = "comm" - light_color = "#0099ff" - req_access = list(access_heads) - circuit = /obj/item/weapon/circuitboard/communications - - var/datum/tgui_module/communications/communications - -/obj/machinery/computer/communications/Initialize() - . = ..() - communications = new(src) - -/obj/machinery/computer/communications/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = TRUE - communications.emagged = TRUE - to_chat(user, "You scramble the communication routing circuits!") - return TRUE - -/obj/machinery/computer/communications/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/computer/communications/attack_hand(mob/user) - if(..()) - return - communications.tgui_interact(user) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +// The communications computer +/obj/machinery/computer/communications + name = "command and communications console" + desc = "Used to command and control the station. Can relay long-range communications." + icon_keyboard = "tech_key" + icon_screen = "comm" + light_color = "#0099ff" + req_access = list(access_heads) + circuit = /obj/item/weapon/circuitboard/communications + + var/datum/tgui_module/communications/communications + +/obj/machinery/computer/communications/Initialize() + . = ..() + communications = new(src) + +/obj/machinery/computer/communications/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + emagged = TRUE + communications.emagged = TRUE + to_chat(user, "You scramble the communication routing circuits!") + return TRUE + +/obj/machinery/computer/communications/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/computer/communications/attack_hand(mob/user) + if(..()) + return + communications.tgui_interact(user) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 1af31afe80..cf1ce8ab20 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -1,35 +1,35 @@ -/obj/machinery/computer/crew - name = "crew monitoring computer" - desc = "Used to monitor active health sensors built into most of the crew's uniforms." - icon_keyboard = "med_key" - icon_screen = "crew" - light_color = "#315ab4" - use_power = USE_POWER_IDLE - idle_power_usage = 250 - active_power_usage = 500 - circuit = /obj/item/weapon/circuitboard/crew - var/datum/tgui_module/crew_monitor/crew_monitor - -/obj/machinery/computer/crew/New() - crew_monitor = new(src) - ..() - -/obj/machinery/computer/crew/Destroy() - qdel(crew_monitor) - crew_monitor = null - ..() - -/obj/machinery/computer/crew/attack_ai(mob/user) - attack_hand(user) - -/obj/machinery/computer/crew/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/computer/crew/tgui_interact(mob/user, datum/tgui/ui = null) - crew_monitor.tgui_interact(user, ui) - -/obj/machinery/computer/crew/interact(mob/user) - crew_monitor.tgui_interact(user) +/obj/machinery/computer/crew + name = "crew monitoring computer" + desc = "Used to monitor active health sensors built into most of the crew's uniforms." + icon_keyboard = "med_key" + icon_screen = "crew" + light_color = "#315ab4" + use_power = USE_POWER_IDLE + idle_power_usage = 250 + active_power_usage = 500 + circuit = /obj/item/weapon/circuitboard/crew + var/datum/tgui_module/crew_monitor/crew_monitor + +/obj/machinery/computer/crew/New() + crew_monitor = new(src) + ..() + +/obj/machinery/computer/crew/Destroy() + qdel(crew_monitor) + crew_monitor = null + ..() + +/obj/machinery/computer/crew/attack_ai(mob/user) + attack_hand(user) + +/obj/machinery/computer/crew/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/computer/crew/tgui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.tgui_interact(user, ui) + +/obj/machinery/computer/crew/interact(mob/user) + crew_monitor.tgui_interact(user) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 69c4e279e3..c54fb1ffb8 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -1,514 +1,514 @@ -#define MED_DATA_R_LIST 2 // Record list -#define MED_DATA_MAINT 3 // Records maintenance -#define MED_DATA_RECORD 4 // Record -#define MED_DATA_V_DATA 5 // Virus database -#define MED_DATA_MEDBOT 6 // Medbot monitor - -#define FIELD(N, V, E) list(field = N, value = V, edit = E) -#define MED_FIELD(N, V, E, LB) list(field = N, value = V, edit = E, line_break = LB) - -/obj/machinery/computer/med_data//TODO:SANITY - name = "medical records console" - desc = "Used to view, edit and maintain medical records." - icon_keyboard = "med_key" - icon_screen = "medcomp" - light_color = "#315ab4" - req_one_access = list(access_medical, access_forensics_lockers, access_robotics) - circuit = /obj/item/weapon/circuitboard/med_data - var/obj/item/weapon/card/id/scan = null - var/authenticated = null - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/list/temp = null - var/printing = null - // The below are used to make modal generation more convenient - var/static/list/field_edit_questions - var/static/list/field_edit_choices - - -/obj/machinery/computer/med_data/Initialize() - . = ..() - field_edit_questions = list( - // General - "sex" = "Please select new sex:", - "species" = "Please input new species:", - "age" = "Please input new age:", - "fingerprint" = "Please input new fingerprint hash:", - "p_stat" = "Please select new physical status:", - "m_stat" = "Please select new mental status:", - // Medical - "id_gender" = "Please select new gender identity:", - "blood_type" = "Please select new blood type:", - "blood_reagent" = "Please select new blood basis:", - "b_dna" = "Please input new DNA:", - "mi_dis" = "Please input new minor disabilities:", - "mi_dis_d" = "Please summarize minor disabilities:", - "ma_dis" = "Please input new major disabilities:", - "ma_dis_d" = "Please summarize major disabilities:", - "alg" = "Please input new allergies:", - "alg_d" = "Please summarize allergies:", - "cdi" = "Please input new current diseases:", - "cdi_d" = "Please summarize current diseases:", - "notes" = "Please input new important notes:", - ) - field_edit_choices = list( - // General - "sex" = all_genders_text_list, - "p_stat" = list("*Deceased*", "*SSD*", "Active", "Physically Unfit", "Disabled"), - "m_stat" = list("*Insane*", "*Unstable*", "*Watch*", "Stable"), - // Medical - "id_gender" = all_genders_text_list, - "blood_type" = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"), - ) - -/obj/machinery/computer/med_data/Destroy() - active1 = null - active2 = null - return ..() - -/obj/machinery/computer/med_data/verb/eject_id() - set category = "Object" - set name = "Eject ID Card" - set src in oview(1) - - if(!usr || usr.stat || usr.lying) return - - if(scan) - to_chat(usr, "You remove \the [scan] from \the [src].") - scan.loc = get_turf(src) - if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) - usr.put_in_hands(scan) - scan = null - else - to_chat(usr, "There is nothing to remove from the console.") - return - -/obj/machinery/computer/med_data/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O)) - O.loc = src - scan = O - to_chat(user, "You insert \the [O].") - tgui_interact(user) - else - ..() - -/obj/machinery/computer/med_data/attack_ai(user as mob) - return attack_hand(user) - -/obj/machinery/computer/med_data/attack_hand(mob/user as mob) - if(..()) - return - add_fingerprint(user) - tgui_interact(user) - - -/obj/machinery/computer/med_data/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MedicalRecords", "Medical Records") // 800, 380 - ui.open() - ui.set_autoupdate(FALSE) - - -/obj/machinery/computer/med_data/tgui_data(mob/user) - var/data[0] - data["temp"] = temp - data["scan"] = scan ? scan.name : null - data["authenticated"] = authenticated - data["rank"] = rank - data["screen"] = screen - data["printing"] = printing - data["isAI"] = isAI(user) - data["isRobot"] = isrobot(user) - if(authenticated) - switch(screen) - if(MED_DATA_R_LIST) - if(!isnull(data_core.general)) - var/list/records = list() - data["records"] = records - for(var/datum/data/record/R in sortRecord(data_core.general)) - records[++records.len] = list("ref" = "\ref[R]", "id" = R.fields["id"], "name" = R.fields["name"]) - if(MED_DATA_RECORD) - var/list/general = list() - data["general"] = general - if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) - var/list/fields = list() - general["fields"] = fields - fields[++fields.len] = FIELD("Name", active1.fields["name"], null) - fields[++fields.len] = FIELD("ID", active1.fields["id"], null) - fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") - fields[++fields.len] = FIELD("Species", active1.fields["species"], "species") - fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") - fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") - fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], "p_stat") - fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], "m_stat") - var/list/photos = list() - general["photos"] = photos - photos[++photos.len] = active1.fields["photo-south"] - photos[++photos.len] = active1.fields["photo-west"] - general["has_photos"] = (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0) - general["empty"] = 0 - else - general["empty"] = 1 - - var/list/medical = list() - data["medical"] = medical - if(istype(active2, /datum/data/record) && data_core.medical.Find(active2)) - var/list/fields = list() - medical["fields"] = fields - fields[++fields.len] = MED_FIELD("Gender identity", active2.fields["id_gender"], "id_gender", TRUE) - fields[++fields.len] = MED_FIELD("Blood Type", active2.fields["b_type"], "blood_type", FALSE) - fields[++fields.len] = MED_FIELD("Blood Basis", active2.fields["blood_reagent"], "blood_reagent", FALSE) - fields[++fields.len] = MED_FIELD("DNA", active2.fields["b_dna"], "b_dna", TRUE) - fields[++fields.len] = MED_FIELD("Brain Type", active2.fields["brain_type"], "brain_type", TRUE) - fields[++fields.len] = MED_FIELD("Important Notes", active2.fields["notes"], "notes", TRUE) - if(!active2.fields["comments"] || !islist(active2.fields["comments"])) - active2.fields["comments"] = list() - medical["comments"] = active2.fields["comments"] - medical["empty"] = 0 - else - medical["empty"] = 1 - if(MED_DATA_V_DATA) - data["virus"] = list() - for(var/ID in virusDB) - var/datum/data/record/v = virusDB[ID] - data["virus"] += list(list("name" = v.fields["name"], "D" = "\ref[v]")) - if(MED_DATA_MEDBOT) - data["medbots"] = list() - for(var/mob/living/bot/medbot/M in mob_list) - if(M.z != z) - continue - var/turf/T = get_turf(M) - if(T) - var/medbot = list() - var/area/A = get_area(T) - medbot["name"] = M.name - medbot["area"] = A.name - medbot["x"] = T.x - medbot["y"] = T.y - medbot["on"] = M.on - if(!isnull(M.reagent_glass) && M.use_beaker) - medbot["use_beaker"] = 1 - medbot["total_volume"] = M.reagent_glass.reagents.total_volume - medbot["maximum_volume"] = M.reagent_glass.reagents.maximum_volume - else - medbot["use_beaker"] = 0 - data["medbots"] += list(medbot) - - data["modal"] = tgui_modal_data(src) - return data - -/obj/machinery/computer/med_data/tgui_act(action, params) - if(..()) - return TRUE - - if(!data_core.general.Find(active1)) - active1 = null - if(!data_core.medical.Find(active2)) - active2 = null - - . = TRUE - if(tgui_act_modal(action, params)) - return - - switch(action) - if("cleartemp") - temp = null - if("scan") - if(scan) - scan.forceMove(loc) - if(ishuman(usr) && !usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() - I.forceMove(src) - scan = I - if("login") - var/login_type = text2num(params["login_type"]) - if(login_type == LOGIN_TYPE_NORMAL && istype(scan)) - if(check_access(scan)) - authenticated = scan.registered_name - rank = scan.assignment - else if(login_type == LOGIN_TYPE_AI && isAI(usr)) - authenticated = usr.name - rank = "AI" - else if(login_type == LOGIN_TYPE_ROBOT && isrobot(usr)) - authenticated = usr.name - var/mob/living/silicon/robot/R = usr - rank = "[R.modtype] [R.braintype]" - if(authenticated) - active1 = null - active2 = null - screen = MED_DATA_R_LIST - else - . = FALSE - - if(.) - return - - if(authenticated) - . = TRUE - switch(action) - if("logout") - if(scan) - scan.forceMove(loc) - if(ishuman(usr) && !usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - authenticated = null - screen = null - active1 = null - active2 = null - if("screen") - screen = clamp(text2num(params["screen"]) || 0, MED_DATA_R_LIST, MED_DATA_MEDBOT) - active1 = null - active2 = null - if("vir") - var/datum/data/record/v = locate(params["vir"]) - if(!istype(v)) - return FALSE - tgui_modal_message(src, "virus", "", null, v.fields["tgui_description"]) - if("del_all") - for(var/datum/data/record/R in data_core.medical) - qdel(R) - set_temp("All medical records deleted.") - if("del_r") - if(active2) - set_temp("Medical record deleted.") - qdel(active2) - if("d_rec") - var/datum/data/record/general_record = locate(params["d_rec"] || "") - if(!data_core.general.Find(general_record)) - set_temp("Record not found.", "danger") - return - - var/datum/data/record/medical_record - for(var/datum/data/record/M in data_core.medical) - if(M.fields["name"] == general_record.fields["name"] && M.fields["id"] == general_record.fields["id"]) - medical_record = M - break - - active1 = general_record - active2 = medical_record - screen = MED_DATA_RECORD - if("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 = "Medical Record #[R.fields["id"]]" - R.fields["b_type"] = "Unknown" - R.fields["blood_reagent"] = "Unknown" - R.fields["b_dna"] = "Unknown" - R.fields["mi_dis"] = "None" - R.fields["mi_dis_d"] = "No minor disabilities have been declared." - 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." - data_core.medical += R - active2 = R - screen = MED_DATA_RECORD - set_temp("Medical record created.", "success") - if("del_c") - var/index = text2num(params["del_c"] || "") - if(!index || !istype(active2, /datum/data/record)) - return - - var/list/comments = active2.fields["comments"] - index = clamp(index, 1, length(comments)) - if(comments[index]) - comments.Cut(index, index + 1) - if("search") - active1 = null - active2 = null - var/t1 = lowertext(params["t1"] || "") - if(!length(t1)) - return - - for(var/datum/data/record/R in data_core.medical) - if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])) - active2 = R - break - if(!active2) - set_temp("Medical record not found. You must enter the person's exact name, ID or DNA.", "danger") - return - for(var/datum/data/record/E in data_core.general) - if(E.fields["name"] == active2.fields["name"] && E.fields["id"] == active2.fields["id"]) - active1 = E - break - screen = MED_DATA_RECORD - if("print_p") - if(!printing) - printing = TRUE - // playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) - SStgui.update_uis(src) - addtimer(CALLBACK(src, PROC_REF(print_finish)), 5 SECONDS) - else - return FALSE - -/** - * Called in tgui_act() to process modal actions - * - * Arguments: - * * action - The action passed by tgui - * * params - The params passed by tgui - */ -/obj/machinery/computer/med_data/proc/tgui_act_modal(action, params) - . = TRUE - var/id = params["id"] // The modal's ID - var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"] - switch(tgui_modal_act(src, action, params)) - if(TGUI_MODAL_OPEN) - switch(id) - if("edit") - var/field = arguments["field"] - if(!length(field) || !field_edit_questions[field]) - return - var/question = field_edit_questions[field] - var/choices = field_edit_choices[field] - if(length(choices)) - tgui_modal_choice(src, id, question, arguments = arguments, value = arguments["value"], choices = choices) - else - tgui_modal_input(src, id, question, arguments = arguments, value = arguments["value"]) - if("add_c") - tgui_modal_input(src, id, "Please enter your message:") - else - return FALSE - if(TGUI_MODAL_ANSWER) - var/answer = params["answer"] - switch(id) - if("edit") - var/field = arguments["field"] - if(!length(field) || !field_edit_questions[field]) - return - var/list/choices = field_edit_choices[field] - if(length(choices) && !(answer in choices)) - return - - if(field == "age") - answer = text2num(answer) - - if(istype(active2) && (field in active2.fields)) - active2.fields[field] = answer - else if(istype(active1) && (field in active1.fields)) - active1.fields[field] = answer - if("add_c") - if(!length(answer) || !istype(active2) || !length(authenticated)) - return - active2.fields["comments"] += list(list( - header = "Made by [authenticated] ([rank]) at [worldtime2stationtime(world.time)]", - text = answer - )) - else - return FALSE - else - return FALSE - - -/** - * Called when the print timer finishes - */ -/obj/machinery/computer/med_data/proc/print_finish() - var/obj/item/weapon/paper/P = new(loc) - P.info = "

    Medical Record

    " - if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) - P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]] -
    \nSex: [active1.fields["sex"]] -
    \nSpecies: [active1.fields["species"]] -
    \nAge: [active1.fields["age"]] -
    \nFingerprint: [active1.fields["fingerprint"]] -
    \nPhysical Status: [active1.fields["p_stat"]] -
    \nMental Status: [active1.fields["m_stat"]]
    "} - else - P.info += "General Record Lost!
    " - if(istype(active2, /datum/data/record) && data_core.medical.Find(active2)) - P.info += {"
    \n
    Medical Data
    -
    \nGender Identity: [active2.fields["id_gender"]] -
    \nBlood Type: [active2.fields["b_type"]] -
    \nBlood Basis: [active2.fields["blood_reagent"]] -
    \nDNA: [active2.fields["b_dna"]]
    \n -
    \nMinor Disabilities: [active2.fields["mi_dis"]] -
    \nDetails: [active2.fields["mi_dis_d"]]
    \n -
    \nMajor Disabilities: [active2.fields["ma_dis"]] -
    \nDetails: [active2.fields["ma_dis_d"]]
    \n -
    \nAllergies: [active2.fields["alg"]] -
    \nDetails: [active2.fields["alg_d"]]
    \n -
    \nCurrent Diseases: [active2.fields["cdi"]] (per disease info placed in log/comment section) -
    \nDetails: [active2.fields["cdi_d"]]
    \n -
    \nImportant Notes: -
    \n\t[active2.fields["notes"]]
    \n -
    \n -
    Comments/Log

    "} - for(var/c in active2.fields["comments"]) - P.info += "[c["header"]]
    [c["text"]]
    " - else - P.info += "Medical Record Lost!
    " - P.info += "" - P.name = "paper - 'Medical Record: [active1.fields["name"]]'" - printing = FALSE - SStgui.update_uis(src) - -/** - * Sets a temporary message to display to the user - * - * Arguments: - * * text - Text to display, null/empty to clear the message from the UI - * * style - The style of the message: (color name), info, success, warning, danger, virus - */ -/obj/machinery/computer/med_data/proc/set_temp(text = "", style = "info", update_now = FALSE) - temp = list(text = text, style = style) - if(update_now) - SStgui.update_uis(src) - -/obj/machinery/computer/med_data/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - for(var/datum/data/record/R in data_core.medical) - if(prob(10/severity)) - switch(rand(1,6)) - if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" - if(2) - R.fields["sex"] = pick("Male", "Female") - if(3) - R.fields["age"] = rand(5, 85) - if(4) - R.fields["b_type"] = pick("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+") - if(5) - R.fields["p_stat"] = pick("*SSD*", "Active", "Physically Unfit", "Disabled") - if(PDA_Manifest.len) - PDA_Manifest.Cut() - if(6) - R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") - continue - - else if(prob(1)) - qdel(R) - continue - - ..(severity) - - -/obj/machinery/computer/med_data/laptop //[TO DO] Change name to PCU and update mapdata to include replacement computers - name = "\improper Medical Laptop" - desc = "A personal computer unit. It seems to have only the medical records program installed." - icon_screen = "pcu_generic" - icon_state = "pcu_med" - icon_keyboard = "pcu_key" - light_color = "#5284e7" - circuit = /obj/item/weapon/circuitboard/med_data/pcu - density = FALSE - -#undef FIELD -#undef MED_FIELD +#define MED_DATA_R_LIST 2 // Record list +#define MED_DATA_MAINT 3 // Records maintenance +#define MED_DATA_RECORD 4 // Record +#define MED_DATA_V_DATA 5 // Virus database +#define MED_DATA_MEDBOT 6 // Medbot monitor + +#define FIELD(N, V, E) list(field = N, value = V, edit = E) +#define MED_FIELD(N, V, E, LB) list(field = N, value = V, edit = E, line_break = LB) + +/obj/machinery/computer/med_data//TODO:SANITY + name = "medical records console" + desc = "Used to view, edit and maintain medical records." + icon_keyboard = "med_key" + icon_screen = "medcomp" + light_color = "#315ab4" + req_one_access = list(access_medical, access_forensics_lockers, access_robotics) + circuit = /obj/item/weapon/circuitboard/med_data + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/list/temp = null + var/printing = null + // The below are used to make modal generation more convenient + var/static/list/field_edit_questions + var/static/list/field_edit_choices + + +/obj/machinery/computer/med_data/Initialize() + . = ..() + field_edit_questions = list( + // General + "sex" = "Please select new sex:", + "species" = "Please input new species:", + "age" = "Please input new age:", + "fingerprint" = "Please input new fingerprint hash:", + "p_stat" = "Please select new physical status:", + "m_stat" = "Please select new mental status:", + // Medical + "id_gender" = "Please select new gender identity:", + "blood_type" = "Please select new blood type:", + "blood_reagent" = "Please select new blood basis:", + "b_dna" = "Please input new DNA:", + "mi_dis" = "Please input new minor disabilities:", + "mi_dis_d" = "Please summarize minor disabilities:", + "ma_dis" = "Please input new major disabilities:", + "ma_dis_d" = "Please summarize major disabilities:", + "alg" = "Please input new allergies:", + "alg_d" = "Please summarize allergies:", + "cdi" = "Please input new current diseases:", + "cdi_d" = "Please summarize current diseases:", + "notes" = "Please input new important notes:", + ) + field_edit_choices = list( + // General + "sex" = all_genders_text_list, + "p_stat" = list("*Deceased*", "*SSD*", "Active", "Physically Unfit", "Disabled"), + "m_stat" = list("*Insane*", "*Unstable*", "*Watch*", "Stable"), + // Medical + "id_gender" = all_genders_text_list, + "blood_type" = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"), + ) + +/obj/machinery/computer/med_data/Destroy() + active1 = null + active2 = null + return ..() + +/obj/machinery/computer/med_data/verb/eject_id() + set category = "Object" + set name = "Eject ID Card" + set src in oview(1) + + if(!usr || usr.stat || usr.lying) return + + if(scan) + to_chat(usr, "You remove \the [scan] from \the [src].") + scan.loc = get_turf(src) + if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) + usr.put_in_hands(scan) + scan = null + else + to_chat(usr, "There is nothing to remove from the console.") + return + +/obj/machinery/computer/med_data/attackby(var/obj/item/O, var/mob/user) + if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O)) + O.loc = src + scan = O + to_chat(user, "You insert \the [O].") + tgui_interact(user) + else + ..() + +/obj/machinery/computer/med_data/attack_ai(user as mob) + return attack_hand(user) + +/obj/machinery/computer/med_data/attack_hand(mob/user as mob) + if(..()) + return + add_fingerprint(user) + tgui_interact(user) + + +/obj/machinery/computer/med_data/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MedicalRecords", "Medical Records") // 800, 380 + ui.open() + ui.set_autoupdate(FALSE) + + +/obj/machinery/computer/med_data/tgui_data(mob/user) + var/data[0] + data["temp"] = temp + data["scan"] = scan ? scan.name : null + data["authenticated"] = authenticated + data["rank"] = rank + data["screen"] = screen + data["printing"] = printing + data["isAI"] = isAI(user) + data["isRobot"] = isrobot(user) + if(authenticated) + switch(screen) + if(MED_DATA_R_LIST) + if(!isnull(data_core.general)) + var/list/records = list() + data["records"] = records + for(var/datum/data/record/R in sortRecord(data_core.general)) + records[++records.len] = list("ref" = "\ref[R]", "id" = R.fields["id"], "name" = R.fields["name"]) + if(MED_DATA_RECORD) + var/list/general = list() + data["general"] = general + if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) + var/list/fields = list() + general["fields"] = fields + fields[++fields.len] = FIELD("Name", active1.fields["name"], null) + fields[++fields.len] = FIELD("ID", active1.fields["id"], null) + fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") + fields[++fields.len] = FIELD("Species", active1.fields["species"], "species") + fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") + fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") + fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], "p_stat") + fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], "m_stat") + var/list/photos = list() + general["photos"] = photos + photos[++photos.len] = active1.fields["photo-south"] + photos[++photos.len] = active1.fields["photo-west"] + general["has_photos"] = (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0) + general["empty"] = 0 + else + general["empty"] = 1 + + var/list/medical = list() + data["medical"] = medical + if(istype(active2, /datum/data/record) && data_core.medical.Find(active2)) + var/list/fields = list() + medical["fields"] = fields + fields[++fields.len] = MED_FIELD("Gender identity", active2.fields["id_gender"], "id_gender", TRUE) + fields[++fields.len] = MED_FIELD("Blood Type", active2.fields["b_type"], "blood_type", FALSE) + fields[++fields.len] = MED_FIELD("Blood Basis", active2.fields["blood_reagent"], "blood_reagent", FALSE) + fields[++fields.len] = MED_FIELD("DNA", active2.fields["b_dna"], "b_dna", TRUE) + fields[++fields.len] = MED_FIELD("Brain Type", active2.fields["brain_type"], "brain_type", TRUE) + fields[++fields.len] = MED_FIELD("Important Notes", active2.fields["notes"], "notes", TRUE) + if(!active2.fields["comments"] || !islist(active2.fields["comments"])) + active2.fields["comments"] = list() + medical["comments"] = active2.fields["comments"] + medical["empty"] = 0 + else + medical["empty"] = 1 + if(MED_DATA_V_DATA) + data["virus"] = list() + for(var/ID in virusDB) + var/datum/data/record/v = virusDB[ID] + data["virus"] += list(list("name" = v.fields["name"], "D" = "\ref[v]")) + if(MED_DATA_MEDBOT) + data["medbots"] = list() + for(var/mob/living/bot/medbot/M in mob_list) + if(M.z != z) + continue + var/turf/T = get_turf(M) + if(T) + var/medbot = list() + var/area/A = get_area(T) + medbot["name"] = M.name + medbot["area"] = A.name + medbot["x"] = T.x + medbot["y"] = T.y + medbot["on"] = M.on + if(!isnull(M.reagent_glass) && M.use_beaker) + medbot["use_beaker"] = 1 + medbot["total_volume"] = M.reagent_glass.reagents.total_volume + medbot["maximum_volume"] = M.reagent_glass.reagents.maximum_volume + else + medbot["use_beaker"] = 0 + data["medbots"] += list(medbot) + + data["modal"] = tgui_modal_data(src) + return data + +/obj/machinery/computer/med_data/tgui_act(action, params) + if(..()) + return TRUE + + if(!data_core.general.Find(active1)) + active1 = null + if(!data_core.medical.Find(active2)) + active2 = null + + . = TRUE + if(tgui_act_modal(action, params)) + return + + switch(action) + if("cleartemp") + temp = null + if("scan") + if(scan) + scan.forceMove(loc) + if(ishuman(usr) && !usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.forceMove(src) + scan = I + if("login") + var/login_type = text2num(params["login_type"]) + if(login_type == LOGIN_TYPE_NORMAL && istype(scan)) + if(check_access(scan)) + authenticated = scan.registered_name + rank = scan.assignment + else if(login_type == LOGIN_TYPE_AI && isAI(usr)) + authenticated = usr.name + rank = "AI" + else if(login_type == LOGIN_TYPE_ROBOT && isrobot(usr)) + authenticated = usr.name + var/mob/living/silicon/robot/R = usr + rank = "[R.modtype] [R.braintype]" + if(authenticated) + active1 = null + active2 = null + screen = MED_DATA_R_LIST + else + . = FALSE + + if(.) + return + + if(authenticated) + . = TRUE + switch(action) + if("logout") + if(scan) + scan.forceMove(loc) + if(ishuman(usr) && !usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + authenticated = null + screen = null + active1 = null + active2 = null + if("screen") + screen = clamp(text2num(params["screen"]) || 0, MED_DATA_R_LIST, MED_DATA_MEDBOT) + active1 = null + active2 = null + if("vir") + var/datum/data/record/v = locate(params["vir"]) + if(!istype(v)) + return FALSE + tgui_modal_message(src, "virus", "", null, v.fields["tgui_description"]) + if("del_all") + for(var/datum/data/record/R in data_core.medical) + qdel(R) + set_temp("All medical records deleted.") + if("del_r") + if(active2) + set_temp("Medical record deleted.") + qdel(active2) + if("d_rec") + var/datum/data/record/general_record = locate(params["d_rec"] || "") + if(!data_core.general.Find(general_record)) + set_temp("Record not found.", "danger") + return + + var/datum/data/record/medical_record + for(var/datum/data/record/M in data_core.medical) + if(M.fields["name"] == general_record.fields["name"] && M.fields["id"] == general_record.fields["id"]) + medical_record = M + break + + active1 = general_record + active2 = medical_record + screen = MED_DATA_RECORD + if("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 = "Medical Record #[R.fields["id"]]" + R.fields["b_type"] = "Unknown" + R.fields["blood_reagent"] = "Unknown" + R.fields["b_dna"] = "Unknown" + R.fields["mi_dis"] = "None" + R.fields["mi_dis_d"] = "No minor disabilities have been declared." + 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." + data_core.medical += R + active2 = R + screen = MED_DATA_RECORD + set_temp("Medical record created.", "success") + if("del_c") + var/index = text2num(params["del_c"] || "") + if(!index || !istype(active2, /datum/data/record)) + return + + var/list/comments = active2.fields["comments"] + index = clamp(index, 1, length(comments)) + if(comments[index]) + comments.Cut(index, index + 1) + if("search") + active1 = null + active2 = null + var/t1 = lowertext(params["t1"] || "") + if(!length(t1)) + return + + for(var/datum/data/record/R in data_core.medical) + if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])) + active2 = R + break + if(!active2) + set_temp("Medical record not found. You must enter the person's exact name, ID or DNA.", "danger") + return + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == active2.fields["name"] && E.fields["id"] == active2.fields["id"]) + active1 = E + break + screen = MED_DATA_RECORD + if("print_p") + if(!printing) + printing = TRUE + // playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) + SStgui.update_uis(src) + addtimer(CALLBACK(src, PROC_REF(print_finish)), 5 SECONDS) + else + return FALSE + +/** + * Called in tgui_act() to process modal actions + * + * Arguments: + * * action - The action passed by tgui + * * params - The params passed by tgui + */ +/obj/machinery/computer/med_data/proc/tgui_act_modal(action, params) + . = TRUE + var/id = params["id"] // The modal's ID + var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"] + switch(tgui_modal_act(src, action, params)) + if(TGUI_MODAL_OPEN) + switch(id) + if("edit") + var/field = arguments["field"] + if(!length(field) || !field_edit_questions[field]) + return + var/question = field_edit_questions[field] + var/choices = field_edit_choices[field] + if(length(choices)) + tgui_modal_choice(src, id, question, arguments = arguments, value = arguments["value"], choices = choices) + else + tgui_modal_input(src, id, question, arguments = arguments, value = arguments["value"]) + if("add_c") + tgui_modal_input(src, id, "Please enter your message:") + else + return FALSE + if(TGUI_MODAL_ANSWER) + var/answer = params["answer"] + switch(id) + if("edit") + var/field = arguments["field"] + if(!length(field) || !field_edit_questions[field]) + return + var/list/choices = field_edit_choices[field] + if(length(choices) && !(answer in choices)) + return + + if(field == "age") + answer = text2num(answer) + + if(istype(active2) && (field in active2.fields)) + active2.fields[field] = answer + else if(istype(active1) && (field in active1.fields)) + active1.fields[field] = answer + if("add_c") + if(!length(answer) || !istype(active2) || !length(authenticated)) + return + active2.fields["comments"] += list(list( + header = "Made by [authenticated] ([rank]) at [worldtime2stationtime(world.time)]", + text = answer + )) + else + return FALSE + else + return FALSE + + +/** + * Called when the print timer finishes + */ +/obj/machinery/computer/med_data/proc/print_finish() + var/obj/item/weapon/paper/P = new(loc) + P.info = "
    Medical Record

    " + if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) + P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]] +
    \nSex: [active1.fields["sex"]] +
    \nSpecies: [active1.fields["species"]] +
    \nAge: [active1.fields["age"]] +
    \nFingerprint: [active1.fields["fingerprint"]] +
    \nPhysical Status: [active1.fields["p_stat"]] +
    \nMental Status: [active1.fields["m_stat"]]
    "} + else + P.info += "General Record Lost!
    " + if(istype(active2, /datum/data/record) && data_core.medical.Find(active2)) + P.info += {"
    \n
    Medical Data
    +
    \nGender Identity: [active2.fields["id_gender"]] +
    \nBlood Type: [active2.fields["b_type"]] +
    \nBlood Basis: [active2.fields["blood_reagent"]] +
    \nDNA: [active2.fields["b_dna"]]
    \n +
    \nMinor Disabilities: [active2.fields["mi_dis"]] +
    \nDetails: [active2.fields["mi_dis_d"]]
    \n +
    \nMajor Disabilities: [active2.fields["ma_dis"]] +
    \nDetails: [active2.fields["ma_dis_d"]]
    \n +
    \nAllergies: [active2.fields["alg"]] +
    \nDetails: [active2.fields["alg_d"]]
    \n +
    \nCurrent Diseases: [active2.fields["cdi"]] (per disease info placed in log/comment section) +
    \nDetails: [active2.fields["cdi_d"]]
    \n +
    \nImportant Notes: +
    \n\t[active2.fields["notes"]]
    \n +
    \n +
    Comments/Log

    "} + for(var/c in active2.fields["comments"]) + P.info += "[c["header"]]
    [c["text"]]
    " + else + P.info += "Medical Record Lost!
    " + P.info += "" + P.name = "paper - 'Medical Record: [active1.fields["name"]]'" + printing = FALSE + SStgui.update_uis(src) + +/** + * Sets a temporary message to display to the user + * + * Arguments: + * * text - Text to display, null/empty to clear the message from the UI + * * style - The style of the message: (color name), info, success, warning, danger, virus + */ +/obj/machinery/computer/med_data/proc/set_temp(text = "", style = "info", update_now = FALSE) + temp = list(text = text, style = style) + if(update_now) + SStgui.update_uis(src) + +/obj/machinery/computer/med_data/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + for(var/datum/data/record/R in data_core.medical) + if(prob(10/severity)) + switch(rand(1,6)) + if(1) + R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + if(2) + R.fields["sex"] = pick("Male", "Female") + if(3) + R.fields["age"] = rand(5, 85) + if(4) + R.fields["b_type"] = pick("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+") + if(5) + R.fields["p_stat"] = pick("*SSD*", "Active", "Physically Unfit", "Disabled") + if(PDA_Manifest.len) + PDA_Manifest.Cut() + if(6) + R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") + continue + + else if(prob(1)) + qdel(R) + continue + + ..(severity) + + +/obj/machinery/computer/med_data/laptop //[TO DO] Change name to PCU and update mapdata to include replacement computers + name = "\improper Medical Laptop" + desc = "A personal computer unit. It seems to have only the medical records program installed." + icon_screen = "pcu_generic" + icon_state = "pcu_med" + icon_keyboard = "pcu_key" + light_color = "#5284e7" + circuit = /obj/item/weapon/circuitboard/med_data/pcu + density = FALSE + +#undef FIELD +#undef MED_FIELD diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index 1a81f9db91..2c6b4c7ced 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -1,215 +1,215 @@ -//Config stuff -#define PRISON_MOVETIME 150 //Time to station is milliseconds. -#define PRISON_STATION_AREATYPE "/area/shuttle/prison/station" //Type of the prison shuttle area for station -#define PRISON_DOCK_AREATYPE "/area/shuttle/prison/prison" //Type of the prison shuttle area for dock - -var/prison_shuttle_moving_to_station = 0 -var/prison_shuttle_moving_to_prison = 0 -var/prison_shuttle_at_station = 0 -var/prison_shuttle_can_send = 1 -var/prison_shuttle_time = 0 -var/prison_shuttle_timeleft = 0 - -/obj/machinery/computer/prison_shuttle - name = "prison shuttle control console" - desc = "Used to move the prison shuttle to and from its destination." - icon_keyboard = "security_key" - icon_screen = "syndishuttle" - light_color = "#00ffff" - req_access = list(access_security) - circuit = /obj/item/weapon/circuitboard/prison_shuttle - var/temp = null - var/hacked = 0 - var/allowedtocall = 0 - var/prison_break = 0 - -/obj/machinery/computer/prison_shuttle/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/prison_shuttle/attack_hand(var/mob/user as mob) - if(!src.allowed(user) && (!hacked)) - to_chat(user, "Access Denied.") - return - if(prison_break) - to_chat(user, "Unable to locate shuttle.") - return - if(..()) - return - user.set_machine(src) - post_signal("prison") - var/dat - if (src.temp) - dat = src.temp - else - dat += {"
    Prison Shuttle
    - \nLocation: [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "Moving to station ([prison_shuttle_timeleft] Secs.)":prison_shuttle_at_station ? "Station":"Dock"]
    - [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "\n*Shuttle already called*
    \n
    ":prison_shuttle_at_station ? "\nSend to Dock
    \n
    ":"\nSend to station
    \n
    "] - \nClose"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - - -/obj/machinery/computer/prison_shuttle/Topic(href, href_list) - if(..()) - return - - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - - if (href_list["sendtodock"]) - if (!prison_can_move()) - to_chat(usr, "The prison shuttle is unable to leave.") - return - if(!prison_shuttle_at_station|| prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - post_signal("prison") - to_chat(usr, "The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds.") - src.temp += "Shuttle sent.

    OK" - src.updateUsrDialog() - prison_shuttle_moving_to_prison = 1 - prison_shuttle_time = world.timeofday + PRISON_MOVETIME - spawn(0) - prison_process() - - else if (href_list["sendtostation"]) - if (!prison_can_move()) - to_chat(usr, "The prison shuttle is unable to leave.") - return - if(prison_shuttle_at_station || prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - post_signal("prison") - to_chat(usr, "The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds.") - src.temp += "Shuttle sent.

    OK" - src.updateUsrDialog() - prison_shuttle_moving_to_station = 1 - prison_shuttle_time = world.timeofday + PRISON_MOVETIME - spawn(0) - prison_process() - - else if (href_list["mainmenu"]) - src.temp = null - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - - -/obj/machinery/computer/prison_shuttle/proc/prison_can_move() - if(prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return 0 - else return 1 - - -/obj/machinery/computer/prison_shuttle/proc/prison_break() - switch(prison_break) - if (0) - if(!prison_shuttle_at_station || prison_shuttle_moving_to_prison) return - - prison_shuttle_moving_to_prison = 1 - prison_shuttle_at_station = prison_shuttle_at_station - - if (!prison_shuttle_moving_to_prison || !prison_shuttle_moving_to_station) - prison_shuttle_time = world.timeofday + PRISON_MOVETIME - spawn(0) - prison_process() - prison_break = 1 - if(1) - prison_break = 0 - - -/obj/machinery/computer/prison_shuttle/proc/post_signal(var/command) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1311) - if(!frequency) return - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = TRANSMISSION_RADIO - status_signal.data["command"] = command - frequency.post_signal(src, status_signal) - return - - -/obj/machinery/computer/prison_shuttle/proc/prison_process() - while(prison_shuttle_time - world.timeofday > 0) - var/ticksleft = prison_shuttle_time - world.timeofday - - if(ticksleft > 1e5) - prison_shuttle_time = world.timeofday + 10 // midnight rollover - - prison_shuttle_timeleft = (ticksleft / 10) - sleep(5) - prison_shuttle_moving_to_station = 0 - prison_shuttle_moving_to_prison = 0 - - switch(prison_shuttle_at_station) - - if(0) - prison_shuttle_at_station = 1 - if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - - if (!prison_can_move()) - to_chat(usr, "The prison shuttle is unable to leave.") - return - - var/area/start_location = locate(/area/shuttle/prison/prison) - var/area/end_location = locate(/area/shuttle/prison/station) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in end_location) - dstturfs += T - if(T.y < throwy) - throwy = T.y - // hey you, get out of the way! - for(var/turf/T in dstturfs) - // find the turf to move things to - var/turf/D = locate(T.x, throwy - 1, 1) - //var/turf/E = get_step(D, SOUTH) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - qdel(T) - start_location.move_contents_to(end_location) - - if(1) - prison_shuttle_at_station = 0 - if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - - if (!prison_can_move()) - to_chat(usr, "The prison shuttle is unable to leave.") - return - - var/area/start_location = locate(/area/shuttle/prison/station) - var/area/end_location = locate(/area/shuttle/prison/prison) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in end_location) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - // hey you, get out of the way! - for(var/turf/T in dstturfs) - // find the turf to move things to - var/turf/D = locate(T.x, throwy - 1, 1) - //var/turf/E = get_step(D, SOUTH) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - qdel(T) - - for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... - bug.gib() - - for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... - pest.gib() - - start_location.move_contents_to(end_location) - return - -/obj/machinery/computer/prison_shuttle/emag_act(var/charges, var/mob/user) - if(!hacked) - hacked = 1 - to_chat(user, "You disable the lock.") - return 1 +//Config stuff +#define PRISON_MOVETIME 150 //Time to station is milliseconds. +#define PRISON_STATION_AREATYPE "/area/shuttle/prison/station" //Type of the prison shuttle area for station +#define PRISON_DOCK_AREATYPE "/area/shuttle/prison/prison" //Type of the prison shuttle area for dock + +var/prison_shuttle_moving_to_station = 0 +var/prison_shuttle_moving_to_prison = 0 +var/prison_shuttle_at_station = 0 +var/prison_shuttle_can_send = 1 +var/prison_shuttle_time = 0 +var/prison_shuttle_timeleft = 0 + +/obj/machinery/computer/prison_shuttle + name = "prison shuttle control console" + desc = "Used to move the prison shuttle to and from its destination." + icon_keyboard = "security_key" + icon_screen = "syndishuttle" + light_color = "#00ffff" + req_access = list(access_security) + circuit = /obj/item/weapon/circuitboard/prison_shuttle + var/temp = null + var/hacked = 0 + var/allowedtocall = 0 + var/prison_break = 0 + +/obj/machinery/computer/prison_shuttle/attack_ai(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/computer/prison_shuttle/attack_hand(var/mob/user as mob) + if(!src.allowed(user) && (!hacked)) + to_chat(user, "Access Denied.") + return + if(prison_break) + to_chat(user, "Unable to locate shuttle.") + return + if(..()) + return + user.set_machine(src) + post_signal("prison") + var/dat + if (src.temp) + dat = src.temp + else + dat += {"
    Prison Shuttle
    + \nLocation: [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "Moving to station ([prison_shuttle_timeleft] Secs.)":prison_shuttle_at_station ? "Station":"Dock"]
    + [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "\n*Shuttle already called*
    \n
    ":prison_shuttle_at_station ? "\nSend to Dock
    \n
    ":"\nSend to station
    \n
    "] + \nClose"} + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + + +/obj/machinery/computer/prison_shuttle/Topic(href, href_list) + if(..()) + return + + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.set_machine(src) + + if (href_list["sendtodock"]) + if (!prison_can_move()) + to_chat(usr, "The prison shuttle is unable to leave.") + return + if(!prison_shuttle_at_station|| prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + post_signal("prison") + to_chat(usr, "The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds.") + src.temp += "Shuttle sent.

    OK" + src.updateUsrDialog() + prison_shuttle_moving_to_prison = 1 + prison_shuttle_time = world.timeofday + PRISON_MOVETIME + spawn(0) + prison_process() + + else if (href_list["sendtostation"]) + if (!prison_can_move()) + to_chat(usr, "The prison shuttle is unable to leave.") + return + if(prison_shuttle_at_station || prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + post_signal("prison") + to_chat(usr, "The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds.") + src.temp += "Shuttle sent.

    OK" + src.updateUsrDialog() + prison_shuttle_moving_to_station = 1 + prison_shuttle_time = world.timeofday + PRISON_MOVETIME + spawn(0) + prison_process() + + else if (href_list["mainmenu"]) + src.temp = null + + src.add_fingerprint(usr) + src.updateUsrDialog() + return + + +/obj/machinery/computer/prison_shuttle/proc/prison_can_move() + if(prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return 0 + else return 1 + + +/obj/machinery/computer/prison_shuttle/proc/prison_break() + switch(prison_break) + if (0) + if(!prison_shuttle_at_station || prison_shuttle_moving_to_prison) return + + prison_shuttle_moving_to_prison = 1 + prison_shuttle_at_station = prison_shuttle_at_station + + if (!prison_shuttle_moving_to_prison || !prison_shuttle_moving_to_station) + prison_shuttle_time = world.timeofday + PRISON_MOVETIME + spawn(0) + prison_process() + prison_break = 1 + if(1) + prison_break = 0 + + +/obj/machinery/computer/prison_shuttle/proc/post_signal(var/command) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1311) + if(!frequency) return + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = TRANSMISSION_RADIO + status_signal.data["command"] = command + frequency.post_signal(src, status_signal) + return + + +/obj/machinery/computer/prison_shuttle/proc/prison_process() + while(prison_shuttle_time - world.timeofday > 0) + var/ticksleft = prison_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + prison_shuttle_time = world.timeofday + 10 // midnight rollover + + prison_shuttle_timeleft = (ticksleft / 10) + sleep(5) + prison_shuttle_moving_to_station = 0 + prison_shuttle_moving_to_prison = 0 + + switch(prison_shuttle_at_station) + + if(0) + prison_shuttle_at_station = 1 + if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + + if (!prison_can_move()) + to_chat(usr, "The prison shuttle is unable to leave.") + return + + var/area/start_location = locate(/area/shuttle/prison/prison) + var/area/end_location = locate(/area/shuttle/prison/station) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + qdel(T) + start_location.move_contents_to(end_location) + + if(1) + prison_shuttle_at_station = 0 + if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + + if (!prison_can_move()) + to_chat(usr, "The prison shuttle is unable to leave.") + return + + var/area/start_location = locate(/area/shuttle/prison/station) + var/area/end_location = locate(/area/shuttle/prison/prison) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + qdel(T) + + for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... + bug.gib() + + for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... + pest.gib() + + start_location.move_contents_to(end_location) + return + +/obj/machinery/computer/prison_shuttle/emag_act(var/charges, var/mob/user) + if(!hacked) + hacked = 1 + to_chat(user, "You disable the lock.") + return 1 diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 7b318b966c..954c0c0ac4 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -1,230 +1,230 @@ -/obj/machinery/computer/robotics - name = "robotics control console" - desc = "Used to remotely lockdown or detonate linked cyborgs." - icon_keyboard = "tech_key" - icon_screen = "robot" - light_color = "#a97faa" - req_access = list(access_robotics) - circuit = /obj/item/weapon/circuitboard/robotics - var/safety = 1 - -/obj/machinery/computer/robotics/attack_ai(var/mob/user as mob) - tgui_interact(user) - -/obj/machinery/computer/robotics/attack_hand(var/mob/user as mob) - if(..()) - return - if(stat & (NOPOWER|BROKEN)) - return - tgui_interact(user) - -/obj/machinery/computer/robotics/proc/is_authenticated(mob/user) - if(!istype(user)) - return FALSE - if(isobserver(user)) - var/mob/observer/dead/D = user - if(D.can_admin_interact()) - return TRUE - if(allowed(user)) - return TRUE - return FALSE - -/** - * Does this borg show up in the console - * - * Returns TRUE if a robot will show up in the console - * Returns FALSE if a robot will not show up in the console - * Arguments: - * * R - The [mob/living/silicon/robot] to be checked - */ -/obj/machinery/computer/robotics/proc/console_shows(mob/living/silicon/robot/R) - if(!istype(R)) - return FALSE - if(istype(R, /mob/living/silicon/robot/drone)) - return FALSE - if(R.scrambledcodes) - return FALSE - if(!AreConnectedZLevels(get_z(src), get_z(R))) - return FALSE - return TRUE - -/** - * Check if a user can send a lockdown/detonate command to a specific borg - * - * Returns TRUE if a user can send the command (does not guarantee it will work) - * Returns FALSE if a user cannot - * Arguments: - * * user - The [mob/user] to be checked - * * R - The [mob/living/silicon/robot] to be checked - * * telluserwhy - Bool of whether the user should be sent a to_chat message if they don't have access - */ -/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R, telluserwhy = FALSE) - if(!istype(user)) - return FALSE - if(!console_shows(R)) - return FALSE - if(isAI(user)) - if(R.connected_ai != user) - if(telluserwhy) - to_chat(user, "AIs can only control cyborgs which are linked to them.") - return FALSE - if(isrobot(user)) - if(R != user) - if(telluserwhy) - to_chat(user, "Cyborgs cannot control other cyborgs.") - return FALSE - return TRUE - -/** - * Check if the user is the right kind of entity to be able to hack borgs - * - * Returns TRUE if a user is a traitor AI, or aghost - * Returns FALSE otherwise - * Arguments: - * * user - The [mob/user] to be checked - */ -/obj/machinery/computer/robotics/proc/can_hack_any(mob/user) - if(!istype(user)) - return FALSE - if(isobserver(user)) - var/mob/observer/dead/D = user - if(D.can_admin_interact()) - return TRUE - if(!isAI(user)) - return FALSE - return (user.mind.special_role && user.mind.original == user) - -/** - * Check if the user is allowed to hack a specific borg - * - * Returns TRUE if a user can hack the specific cyborg - * Returns FALSE if a user cannot - * Arguments: - * * user - The [mob/user] to be checked - * * R - The [mob/living/silicon/robot] to be checked - */ -/obj/machinery/computer/robotics/proc/can_hack(mob/user, mob/living/silicon/robot/R) - if(!can_hack_any(user)) - return FALSE - if(!istype(R)) - return FALSE - if(R.emagged) - return FALSE - if(R.connected_ai != user) - return FALSE - return TRUE - - -/obj/machinery/computer/robotics/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "RoboticsControlConsole", name) - ui.open() - -/obj/machinery/computer/robotics/tgui_data(mob/user) - var/list/data = list() - data["auth"] = is_authenticated(user) - data["can_hack"] = can_hack_any(user) - data["cyborgs"] = list() - data["safety"] = safety - for(var/mob/living/silicon/robot/R in mob_list) - if(!console_shows(R)) - continue - var/area/A = get_area(R) - var/turf/T = get_turf(R) - var/list/cyborg_data = list( - name = R.name, - ref = REF(R), - locked_down = R.lockcharge, - locstring = "[A.name] ([T.x], [T.y])", - status = R.stat, - health = round(R.health * 100 / R.maxHealth, 0.1), - charge = R.cell ? round(R.cell.percent()) : null, - cell_capacity = R.cell ? R.cell.maxcharge : null, - module = R.module ? R.module.name : "No Module Detected", - synchronization = R.connected_ai, - is_hacked = R.connected_ai && R.emagged, - hackable = can_hack(user, R), - ) - data["cyborgs"] += list(cyborg_data) - data["show_detonate_all"] = (data["auth"] && length(data["cyborgs"]) > 0 && ishuman(user)) - return data - -/obj/machinery/computer/robotics/tgui_act(action, params) - if(..()) - return - . = FALSE - if(!is_authenticated(usr)) - to_chat(usr, "Access denied.") - return - switch(action) - if("arm") // Arms the emergency self-destruct system - if(issilicon(usr)) - to_chat(usr, "Access Denied (silicon detected)") - return - safety = !safety - to_chat(usr, "You [safety ? "disarm" : "arm"] the emergency self destruct.") - . = TRUE - if("nuke") // Destroys all accessible cyborgs if safety is disabled - if(issilicon(usr)) - to_chat(usr, "Access Denied (silicon detected)") - return - if(safety) - to_chat(usr, "Self-destruct aborted - safety active") - return - message_admins("[key_name_admin(usr)] detonated all cyborgs!") - log_game("\[key_name(usr)] detonated all cyborgs!") - for(var/mob/living/silicon/robot/R in mob_list) - if(istype(R, /mob/living/silicon/robot/drone)) - continue - // Ignore antagonistic cyborgs - if(R.scrambledcodes) - continue - to_chat(R, "Self-destruct command received.") - if(R.connected_ai) - to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") - R.self_destruct() - . = TRUE - if("killbot") // destroys one specific cyborg - var/mob/living/silicon/robot/R = locate(params["ref"]) - if(!can_control(usr, R, TRUE)) - return - if(R.mind && R.mind.special_role && R.emagged) - to_chat(R, "Extreme danger! Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") - R.ResetSecurityCodes() - . = TRUE - return - var/turf/T = get_turf(R) - message_admins("[key_name_admin(usr)] detonated [key_name_admin(R)] ([ADMIN_COORDJMP(T)])!") - log_game("\[key_name(usr)] detonated [key_name(R)]!") - to_chat(R, "Self-destruct command received.") - if(R.connected_ai) - to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") - R.self_destruct() - . = TRUE - if("stopbot") // lock or unlock the borg - if(isrobot(usr)) - to_chat(usr, "Access Denied.") - return - var/mob/living/silicon/robot/R = locate(params["ref"]) - if(!can_control(usr, R, TRUE)) - return - 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 ? "Your lockdown has been lifted!" : "You 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]
    ") - . = TRUE - if("hackbot") // AIs hacking/emagging a borg - var/mob/living/silicon/robot/R = locate(params["ref"]) - if(!can_hack(usr, R)) - return - var/choice = tgui_alert(usr, "Really hack [R.name]? This cannot be undone.", "Hack?", list("Yes", "No")) - if(choice == "No") - return - log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") - message_admins("[key_name_admin(usr)] emagged [key_name_admin(R)] using robotic console!") - R.emagged = TRUE - to_chat(R, "Failsafe protocols overridden. New tools available.") - . = TRUE +/obj/machinery/computer/robotics + name = "robotics control console" + desc = "Used to remotely lockdown or detonate linked cyborgs." + icon_keyboard = "tech_key" + icon_screen = "robot" + light_color = "#a97faa" + req_access = list(access_robotics) + circuit = /obj/item/weapon/circuitboard/robotics + var/safety = 1 + +/obj/machinery/computer/robotics/attack_ai(var/mob/user as mob) + tgui_interact(user) + +/obj/machinery/computer/robotics/attack_hand(var/mob/user as mob) + if(..()) + return + if(stat & (NOPOWER|BROKEN)) + return + tgui_interact(user) + +/obj/machinery/computer/robotics/proc/is_authenticated(mob/user) + if(!istype(user)) + return FALSE + if(isobserver(user)) + var/mob/observer/dead/D = user + if(D.can_admin_interact()) + return TRUE + if(allowed(user)) + return TRUE + return FALSE + +/** + * Does this borg show up in the console + * + * Returns TRUE if a robot will show up in the console + * Returns FALSE if a robot will not show up in the console + * Arguments: + * * R - The [mob/living/silicon/robot] to be checked + */ +/obj/machinery/computer/robotics/proc/console_shows(mob/living/silicon/robot/R) + if(!istype(R)) + return FALSE + if(istype(R, /mob/living/silicon/robot/drone)) + return FALSE + if(R.scrambledcodes) + return FALSE + if(!AreConnectedZLevels(get_z(src), get_z(R))) + return FALSE + return TRUE + +/** + * Check if a user can send a lockdown/detonate command to a specific borg + * + * Returns TRUE if a user can send the command (does not guarantee it will work) + * Returns FALSE if a user cannot + * Arguments: + * * user - The [mob/user] to be checked + * * R - The [mob/living/silicon/robot] to be checked + * * telluserwhy - Bool of whether the user should be sent a to_chat message if they don't have access + */ +/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R, telluserwhy = FALSE) + if(!istype(user)) + return FALSE + if(!console_shows(R)) + return FALSE + if(isAI(user)) + if(R.connected_ai != user) + if(telluserwhy) + to_chat(user, "AIs can only control cyborgs which are linked to them.") + return FALSE + if(isrobot(user)) + if(R != user) + if(telluserwhy) + to_chat(user, "Cyborgs cannot control other cyborgs.") + return FALSE + return TRUE + +/** + * Check if the user is the right kind of entity to be able to hack borgs + * + * Returns TRUE if a user is a traitor AI, or aghost + * Returns FALSE otherwise + * Arguments: + * * user - The [mob/user] to be checked + */ +/obj/machinery/computer/robotics/proc/can_hack_any(mob/user) + if(!istype(user)) + return FALSE + if(isobserver(user)) + var/mob/observer/dead/D = user + if(D.can_admin_interact()) + return TRUE + if(!isAI(user)) + return FALSE + return (user.mind.special_role && user.mind.original == user) + +/** + * Check if the user is allowed to hack a specific borg + * + * Returns TRUE if a user can hack the specific cyborg + * Returns FALSE if a user cannot + * Arguments: + * * user - The [mob/user] to be checked + * * R - The [mob/living/silicon/robot] to be checked + */ +/obj/machinery/computer/robotics/proc/can_hack(mob/user, mob/living/silicon/robot/R) + if(!can_hack_any(user)) + return FALSE + if(!istype(R)) + return FALSE + if(R.emagged) + return FALSE + if(R.connected_ai != user) + return FALSE + return TRUE + + +/obj/machinery/computer/robotics/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "RoboticsControlConsole", name) + ui.open() + +/obj/machinery/computer/robotics/tgui_data(mob/user) + var/list/data = list() + data["auth"] = is_authenticated(user) + data["can_hack"] = can_hack_any(user) + data["cyborgs"] = list() + data["safety"] = safety + for(var/mob/living/silicon/robot/R in mob_list) + if(!console_shows(R)) + continue + var/area/A = get_area(R) + var/turf/T = get_turf(R) + var/list/cyborg_data = list( + name = R.name, + ref = REF(R), + locked_down = R.lockcharge, + locstring = "[A.name] ([T.x], [T.y])", + status = R.stat, + health = round(R.health * 100 / R.maxHealth, 0.1), + charge = R.cell ? round(R.cell.percent()) : null, + cell_capacity = R.cell ? R.cell.maxcharge : null, + module = R.module ? R.module.name : "No Module Detected", + synchronization = R.connected_ai, + is_hacked = R.connected_ai && R.emagged, + hackable = can_hack(user, R), + ) + data["cyborgs"] += list(cyborg_data) + data["show_detonate_all"] = (data["auth"] && length(data["cyborgs"]) > 0 && ishuman(user)) + return data + +/obj/machinery/computer/robotics/tgui_act(action, params) + if(..()) + return + . = FALSE + if(!is_authenticated(usr)) + to_chat(usr, "Access denied.") + return + switch(action) + if("arm") // Arms the emergency self-destruct system + if(issilicon(usr)) + to_chat(usr, "Access Denied (silicon detected)") + return + safety = !safety + to_chat(usr, "You [safety ? "disarm" : "arm"] the emergency self destruct.") + . = TRUE + if("nuke") // Destroys all accessible cyborgs if safety is disabled + if(issilicon(usr)) + to_chat(usr, "Access Denied (silicon detected)") + return + if(safety) + to_chat(usr, "Self-destruct aborted - safety active") + return + message_admins("[key_name_admin(usr)] detonated all cyborgs!") + log_game("\[key_name(usr)] detonated all cyborgs!") + for(var/mob/living/silicon/robot/R in mob_list) + if(istype(R, /mob/living/silicon/robot/drone)) + continue + // Ignore antagonistic cyborgs + if(R.scrambledcodes) + continue + to_chat(R, "Self-destruct command received.") + if(R.connected_ai) + to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") + R.self_destruct() + . = TRUE + if("killbot") // destroys one specific cyborg + var/mob/living/silicon/robot/R = locate(params["ref"]) + if(!can_control(usr, R, TRUE)) + return + if(R.mind && R.mind.special_role && R.emagged) + to_chat(R, "Extreme danger! Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") + R.ResetSecurityCodes() + . = TRUE + return + var/turf/T = get_turf(R) + message_admins("[key_name_admin(usr)] detonated [key_name_admin(R)] ([ADMIN_COORDJMP(T)])!") + log_game("\[key_name(usr)] detonated [key_name(R)]!") + to_chat(R, "Self-destruct command received.") + if(R.connected_ai) + to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") + R.self_destruct() + . = TRUE + if("stopbot") // lock or unlock the borg + if(isrobot(usr)) + to_chat(usr, "Access Denied.") + return + var/mob/living/silicon/robot/R = locate(params["ref"]) + if(!can_control(usr, R, TRUE)) + return + 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 ? "Your lockdown has been lifted!" : "You 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]
    ") + . = TRUE + if("hackbot") // AIs hacking/emagging a borg + var/mob/living/silicon/robot/R = locate(params["ref"]) + if(!can_hack(usr, R)) + return + var/choice = tgui_alert(usr, "Really hack [R.name]? This cannot be undone.", "Hack?", list("Yes", "No")) + if(choice == "No") + return + log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") + message_admins("[key_name_admin(usr)] emagged [key_name_admin(R)] using robotic console!") + R.emagged = TRUE + to_chat(R, "Failsafe protocols overridden. New tools available.") + . = TRUE diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index fea0fa3950..e239a6cf06 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -1,515 +1,515 @@ -#define SEC_DATA_R_LIST 2 // Record list -#define SEC_DATA_MAINT 3 // Records maintenance -#define SEC_DATA_RECORD 4 // Record - -#define FIELD(N, V, E) list(field = N, value = V, edit = E) - -/obj/machinery/computer/secure_data//TODO:SANITY - name = "security records console" - desc = "Used to view, edit and maintain security records" - icon_keyboard = "security_key" - icon_screen = "security" - light_color = "#a91515" - req_one_access = list(access_security, access_forensics_lockers, access_lawyer) - circuit = /obj/item/weapon/circuitboard/secure_data - var/obj/item/weapon/card/id/scan = null - var/authenticated = null - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/list/temp = null - var/printing = null - // The below are used to make modal generation more convenient - var/static/list/field_edit_questions - var/static/list/field_edit_choices - -/obj/machinery/computer/secure_data/Initialize() - . = ..() - field_edit_questions = list( - // General - "name" = "Please enter new name:", - "id" = "Please enter new id:", - "sex" = "Please select new sex:", - "species" = "Please input new species:", - "age" = "Please input new age:", - "rank" = "Please enter new rank:", - "fingerprint" = "Please input new fingerprint hash:", - // Security - "brain_type" = "Please select new brain type:", - "criminal" = "Please select new criminal status:", - "mi_crim" = "Please input new minor crime:", - "mi_crim_d" = "Please input minor crime summary.", - "ma_crim" = "Please input new major crime:", - "ma_crim_d" = "Please input new major crime summary.", - "notes" = "Please input new important notes:", - ) - field_edit_choices = list( - // General - "sex" = all_genders_text_list, - // Security - "criminal" = list("*Arrest*", "Incarcerated", "Parolled", "Released", "None"), - ) - -/obj/machinery/computer/secure_data/Destroy() - active1 = null - active2 = null - return ..() - -/obj/machinery/computer/secure_data/verb/eject_id() - set category = "Object" - set name = "Eject ID Card" - set src in oview(1) - - if(!usr || usr.stat || usr.lying) return - - if(scan) - to_chat(usr, "You remove \the [scan] from \the [src].") - scan.loc = get_turf(src) - if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) - usr.put_in_hands(scan) - scan = null - else - to_chat(usr, "There is nothing to remove from the console.") - return - -/obj/machinery/computer/secure_data/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O)) - O.loc = src - scan = O - to_chat(user, "You insert \the [O].") - tgui_interact(user) - else - ..() - -/obj/machinery/computer/secure_data/attack_ai(mob/user as mob) - return attack_hand(user) - -//Someone needs to break down the dat += into chunks instead of long ass lines. -/obj/machinery/computer/secure_data/attack_hand(mob/user as mob) - if(..()) - return - add_fingerprint(user) - tgui_interact(user) - -/obj/machinery/computer/secure_data/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "SecurityRecords", "Security Records") // 800, 380 - ui.open() - ui.set_autoupdate(FALSE) - - -/obj/machinery/computer/secure_data/tgui_data(mob/user) - var/data[0] - data["temp"] = temp - data["scan"] = scan ? scan.name : null - data["authenticated"] = authenticated - data["rank"] = rank - data["screen"] = screen - data["printing"] = printing - data["isAI"] = isAI(user) - data["isRobot"] = isrobot(user) - if(authenticated) - switch(screen) - if(SEC_DATA_R_LIST) - if(!isnull(data_core.general)) - var/list/records = list() - data["records"] = records - for(var/datum/data/record/R in sortRecord(data_core.general)) - var/color = null - var/criminal = "None" - for(var/datum/data/record/M in data_core.security) - if(M.fields["name"] == R.fields["name"] && M.fields["id"] == R.fields["id"]) - switch(M.fields["criminal"]) - if("*Arrest*") - color = "bad" - if("Incarcerated") - color = "brown" - if("Parolled", "Released") - color = "average" - if("None") - color = "good" - criminal = M.fields["criminal"] - break - records[++records.len] = list( - "ref" = "\ref[R]", - "id" = R.fields["id"], - "name" = R.fields["name"], - "color" = color, - "criminal" = criminal - ) - if(SEC_DATA_RECORD) - var/list/general = list() - data["general"] = general - if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) - var/list/fields = list() - general["fields"] = fields - fields[++fields.len] = FIELD("Name", active1.fields["name"], "name") - fields[++fields.len] = FIELD("ID", active1.fields["id"], "id") - fields[++fields.len] = FIELD("Entity Classification", active1.fields["brain_type"], "brain_type") - fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") - fields[++fields.len] = FIELD("Species", active1.fields["species"], "species") - fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") - fields[++fields.len] = FIELD("Rank", active1.fields["rank"], "rank") - fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") - fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], null) - fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], null) - var/list/photos = list() - general["photos"] = photos - photos[++photos.len] = active1.fields["photo-south"] - photos[++photos.len] = active1.fields["photo-west"] - general["has_photos"] = (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0) - general["empty"] = 0 - else - general["empty"] = 1 - - var/list/security = list() - data["security"] = security - if(istype(active2, /datum/data/record) && data_core.security.Find(active2)) - var/list/fields = list() - security["fields"] = fields - fields[++fields.len] = FIELD("Criminal Status", active2.fields["criminal"], "criminal") - fields[++fields.len] = FIELD("Minor Crimes", active2.fields["mi_crim"], "mi_crim") - fields[++fields.len] = FIELD("Details", active2.fields["mi_crim_d"], "mi_crim_d") - fields[++fields.len] = FIELD("Major Crimes", active2.fields["ma_crim"], "ma_crim") - fields[++fields.len] = FIELD("Details", active2.fields["ma_crim_d"], "ma_crim_d") - fields[++fields.len] = FIELD("Important Notes", active2.fields["notes"], "notes") - if(!active2.fields["comments"] || !islist(active2.fields["comments"])) - active2.fields["comments"] = list() - security["comments"] = active2.fields["comments"] - security["empty"] = 0 - else - security["empty"] = 1 - - data["modal"] = tgui_modal_data(src) - return data - -/obj/machinery/computer/secure_data/tgui_act(action, params) - if(..()) - return TRUE - - if(!data_core.general.Find(active1)) - active1 = null - if(!data_core.security.Find(active2)) - active2 = null - - . = TRUE - if(tgui_act_modal(action, params)) - return - - switch(action) - if("cleartemp") - temp = null - if("scan") - if(scan) - scan.forceMove(loc) - if(ishuman(usr) && !usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() - I.forceMove(src) - scan = I - if("login") - var/login_type = text2num(params["login_type"]) - if(login_type == LOGIN_TYPE_NORMAL && istype(scan)) - if(check_access(scan)) - authenticated = scan.registered_name - rank = scan.assignment - else if(login_type == LOGIN_TYPE_AI && isAI(usr)) - authenticated = usr.name - rank = "AI" - else if(login_type == LOGIN_TYPE_ROBOT && isrobot(usr)) - authenticated = usr.name - var/mob/living/silicon/robot/R = usr - rank = "[R.modtype] [R.braintype]" - if(authenticated) - active1 = null - active2 = null - screen = SEC_DATA_R_LIST - else - . = FALSE - - if(.) - return - - if(authenticated) - . = TRUE - switch(action) - if("logout") - if(scan) - scan.forceMove(loc) - if(ishuman(usr) && !usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - authenticated = null - screen = null - active1 = null - active2 = null - if("screen") - screen = clamp(text2num(params["screen"]) || 0, SEC_DATA_R_LIST, SEC_DATA_RECORD) - active1 = null - active2 = null - if("del_all") - for(var/datum/data/record/R in data_core.security) - qdel(R) - set_temp("All security records deleted.") - if("del_r") - if(active2) - set_temp("Security record deleted.") - qdel(active2) - if("del_r_2") - set_temp("All records for [active1.fields["name"]] deleted.") - if(active1) - for(var/datum/data/record/R in data_core.medical) - if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - qdel(R) - qdel(active1) - if(active2) - qdel(active2) - if("d_rec") - var/datum/data/record/general_record = locate(params["d_rec"] || "") - if(!data_core.general.Find(general_record)) - set_temp("Record not found.", "danger") - return - - var/datum/data/record/security_record - for(var/datum/data/record/M in data_core.security) - if(M.fields["name"] == general_record.fields["name"] && M.fields["id"] == general_record.fields["id"]) - security_record = M - break - - active1 = general_record - active2 = security_record - screen = SEC_DATA_RECORD - if("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 = "Security Record #[R.fields["id"]]" - R.fields["brain_type"] = "Unknown" - R.fields["criminal"] = "None" - R.fields["mi_crim"] = "None" - R.fields["mi_crim_d"] = "No minor crime convictions." - R.fields["ma_crim"] = "None" - R.fields["ma_crim_d"] = "No major crime convictions." - R.fields["notes"] = "No notes." - R.fields["notes"] = "No notes." - data_core.security += R - active2 = R - screen = SEC_DATA_RECORD - set_temp("Security record created.", "success") - if("del_c") - var/index = text2num(params["del_c"] || "") - if(!index || !istype(active2, /datum/data/record)) - return - - var/list/comments = active2.fields["comments"] - index = clamp(index, 1, length(comments)) - if(comments[index]) - comments.Cut(index, index + 1) - if("search") - active1 = null - active2 = null - var/t1 = lowertext(params["t1"] || "") - if(!length(t1)) - return - - for(var/datum/data/record/R in data_core.general) - if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["fingerprint"])) - active1 = R - break - if(!active1) - set_temp("Security record not found. You must enter the person's exact name, ID, or fingerprint.", "danger") - return - for(var/datum/data/record/E in data_core.security) - if(E.fields["name"] == active1.fields["name"] && E.fields["id"] == active1.fields["id"]) - active2 = E - break - screen = SEC_DATA_RECORD - if("print_p") - if(!printing) - printing = TRUE - // playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) - SStgui.update_uis(src) - addtimer(CALLBACK(src, PROC_REF(print_finish)), 5 SECONDS) - if("photo_front") - var/icon/photo = get_photo(usr) - if(photo && active1) - active1.fields["photo_front"] = photo - active1.fields["photo-south"] = "'data:image/png;base64,[icon2base64(photo)]'" - if("photo_side") - var/icon/photo = get_photo(usr) - if(photo && active1) - active1.fields["photo_side"] = photo - active1.fields["photo-west"] = "'data:image/png;base64,[icon2base64(photo)]'" - else - return FALSE - -/** - * Called in tgui_act() to process modal actions - * - * Arguments: - * * action - The action passed by tgui - * * params - The params passed by tgui - */ -/obj/machinery/computer/secure_data/proc/tgui_act_modal(action, params) - . = TRUE - var/id = params["id"] // The modal's ID - var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"] - switch(tgui_modal_act(src, action, params)) - if(TGUI_MODAL_OPEN) - switch(id) - if("edit") - var/field = arguments["field"] - if(!length(field) || !field_edit_questions[field]) - return - var/question = field_edit_questions[field] - var/choices = field_edit_choices[field] - if(length(choices)) - tgui_modal_choice(src, id, question, arguments = arguments, value = arguments["value"], choices = choices) - else - tgui_modal_input(src, id, question, arguments = arguments, value = arguments["value"]) - if("add_c") - tgui_modal_input(src, id, "Please enter your message:") - else - return FALSE - if(TGUI_MODAL_ANSWER) - var/answer = params["answer"] - switch(id) - if("edit") - var/field = arguments["field"] - if(!length(field) || !field_edit_questions[field]) - return - var/list/choices = field_edit_choices[field] - if(length(choices) && !(answer in choices)) - return - - if(field == "age") - answer = text2num(answer) - - if(field == "rank") - if(answer in joblist) - active1.fields["real_rank"] = answer - - if(field == "criminal") - for(var/mob/living/carbon/human/H in player_list) - BITSET(H.hud_updateflag, WANTED_HUD) - - if(istype(active2) && (field in active2.fields)) - active2.fields[field] = answer - if(istype(active1) && (field in active1.fields)) - active1.fields[field] = answer - if("add_c") - if(!length(answer) || !istype(active2) || !length(authenticated)) - return - active2.fields["comments"] += list(list( - header = "Made by [authenticated] ([rank]) at [worldtime2stationtime(world.time)]", - text = answer - )) - else - return FALSE - else - return FALSE - - -/** - * Called when the print timer finishes - */ -/obj/machinery/computer/secure_data/proc/print_finish() - var/obj/item/weapon/paper/P = new(loc) - P.info = "
    Security Record

    " - if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) - P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]] -
    \nSex: [active1.fields["sex"]] -
    \nSpecies: [active1.fields["species"]] -
    \nAge: [active1.fields["age"]] -
    \nFingerprint: [active1.fields["fingerprint"]] -
    \nPhysical Status: [active1.fields["p_stat"]] -
    \nMental Status: [active1.fields["m_stat"]]
    "} - else - P.info += "General Record Lost!
    " - if(istype(active2, /datum/data/record) && data_core.security.Find(active2)) - P.info += {"
    \n
    Security Data
    -
    \nCriminal Status: [active2.fields["criminal"]]
    \n -
    \nMinor Crimes: [active2.fields["mi_crim"]] -
    \nDetails: [active2.fields["mi_crim_d"]]
    \n -
    \nMajor Crimes: [active2.fields["ma_crim"]] -
    \nDetails: [active2.fields["ma_crim_d"]]
    \n -
    \nImportant Notes: -
    \n\t[active2.fields["notes"]]
    \n -
    \n -
    Comments/Log

    "} - for(var/c in active2.fields["comments"]) - P.info += "[c["header"]]
    [c["text"]]
    " - else - P.info += "Security Record Lost!
    " - P.info += "" - P.name = "paper - 'Security Record: [active1.fields["name"]]'" - printing = FALSE - SStgui.update_uis(src) - - -/** - * Sets a temporary message to display to the user - * - * Arguments: - * * text - Text to display, null/empty to clear the message from the UI - * * style - The style of the message: (color name), info, success, warning, danger, virus - */ -/obj/machinery/computer/secure_data/proc/set_temp(text = "", style = "info", update_now = FALSE) - temp = list(text = text, style = style) - if(update_now) - SStgui.update_uis(src) - -/obj/machinery/computer/secure_data/proc/is_not_allowed(var/mob/user) - return !src.authenticated || user.stat || user.restrained() || (!in_range(src, user) && (!istype(user, /mob/living/silicon))) - -/obj/machinery/computer/secure_data/proc/get_photo(var/mob/user) - if(istype(user.get_active_hand(), /obj/item/weapon/photo)) - var/obj/item/weapon/photo/photo = user.get_active_hand() - return photo.img - if(istype(user, /mob/living/silicon)) - var/mob/living/silicon/tempAI = usr - var/obj/item/weapon/photo/selection = tempAI.GetPicture() - if (selection) - return selection.img - -/obj/machinery/computer/secure_data/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - for(var/datum/data/record/R in data_core.security) - if(prob(10/severity)) - switch(rand(1,6)) - if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" - if(2) - R.fields["sex"] = pick("Male", "Female") - if(3) - R.fields["age"] = rand(5, 85) - if(4) - R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released") - if(5) - R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") - if(PDA_Manifest.len) - PDA_Manifest.Cut() - if(6) - R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") - continue - - else if(prob(1)) - qdel(R) - continue - - ..(severity) - -/obj/machinery/computer/secure_data/detective_computer - icon_state = "messyfiles" - -#undef FIELD +#define SEC_DATA_R_LIST 2 // Record list +#define SEC_DATA_MAINT 3 // Records maintenance +#define SEC_DATA_RECORD 4 // Record + +#define FIELD(N, V, E) list(field = N, value = V, edit = E) + +/obj/machinery/computer/secure_data//TODO:SANITY + name = "security records console" + desc = "Used to view, edit and maintain security records" + icon_keyboard = "security_key" + icon_screen = "security" + light_color = "#a91515" + req_one_access = list(access_security, access_forensics_lockers, access_lawyer) + circuit = /obj/item/weapon/circuitboard/secure_data + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/list/temp = null + var/printing = null + // The below are used to make modal generation more convenient + var/static/list/field_edit_questions + var/static/list/field_edit_choices + +/obj/machinery/computer/secure_data/Initialize() + . = ..() + field_edit_questions = list( + // General + "name" = "Please enter new name:", + "id" = "Please enter new id:", + "sex" = "Please select new sex:", + "species" = "Please input new species:", + "age" = "Please input new age:", + "rank" = "Please enter new rank:", + "fingerprint" = "Please input new fingerprint hash:", + // Security + "brain_type" = "Please select new brain type:", + "criminal" = "Please select new criminal status:", + "mi_crim" = "Please input new minor crime:", + "mi_crim_d" = "Please input minor crime summary.", + "ma_crim" = "Please input new major crime:", + "ma_crim_d" = "Please input new major crime summary.", + "notes" = "Please input new important notes:", + ) + field_edit_choices = list( + // General + "sex" = all_genders_text_list, + // Security + "criminal" = list("*Arrest*", "Incarcerated", "Parolled", "Released", "None"), + ) + +/obj/machinery/computer/secure_data/Destroy() + active1 = null + active2 = null + return ..() + +/obj/machinery/computer/secure_data/verb/eject_id() + set category = "Object" + set name = "Eject ID Card" + set src in oview(1) + + if(!usr || usr.stat || usr.lying) return + + if(scan) + to_chat(usr, "You remove \the [scan] from \the [src].") + scan.loc = get_turf(src) + if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) + usr.put_in_hands(scan) + scan = null + else + to_chat(usr, "There is nothing to remove from the console.") + return + +/obj/machinery/computer/secure_data/attackby(var/obj/item/O, var/mob/user) + if(istype(O, /obj/item/weapon/card/id) && !scan && user.unEquip(O)) + O.loc = src + scan = O + to_chat(user, "You insert \the [O].") + tgui_interact(user) + else + ..() + +/obj/machinery/computer/secure_data/attack_ai(mob/user as mob) + return attack_hand(user) + +//Someone needs to break down the dat += into chunks instead of long ass lines. +/obj/machinery/computer/secure_data/attack_hand(mob/user as mob) + if(..()) + return + add_fingerprint(user) + tgui_interact(user) + +/obj/machinery/computer/secure_data/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SecurityRecords", "Security Records") // 800, 380 + ui.open() + ui.set_autoupdate(FALSE) + + +/obj/machinery/computer/secure_data/tgui_data(mob/user) + var/data[0] + data["temp"] = temp + data["scan"] = scan ? scan.name : null + data["authenticated"] = authenticated + data["rank"] = rank + data["screen"] = screen + data["printing"] = printing + data["isAI"] = isAI(user) + data["isRobot"] = isrobot(user) + if(authenticated) + switch(screen) + if(SEC_DATA_R_LIST) + if(!isnull(data_core.general)) + var/list/records = list() + data["records"] = records + for(var/datum/data/record/R in sortRecord(data_core.general)) + var/color = null + var/criminal = "None" + for(var/datum/data/record/M in data_core.security) + if(M.fields["name"] == R.fields["name"] && M.fields["id"] == R.fields["id"]) + switch(M.fields["criminal"]) + if("*Arrest*") + color = "bad" + if("Incarcerated") + color = "brown" + if("Parolled", "Released") + color = "average" + if("None") + color = "good" + criminal = M.fields["criminal"] + break + records[++records.len] = list( + "ref" = "\ref[R]", + "id" = R.fields["id"], + "name" = R.fields["name"], + "color" = color, + "criminal" = criminal + ) + if(SEC_DATA_RECORD) + var/list/general = list() + data["general"] = general + if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) + var/list/fields = list() + general["fields"] = fields + fields[++fields.len] = FIELD("Name", active1.fields["name"], "name") + fields[++fields.len] = FIELD("ID", active1.fields["id"], "id") + fields[++fields.len] = FIELD("Entity Classification", active1.fields["brain_type"], "brain_type") + fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") + fields[++fields.len] = FIELD("Species", active1.fields["species"], "species") + fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") + fields[++fields.len] = FIELD("Rank", active1.fields["rank"], "rank") + fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") + fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], null) + fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], null) + var/list/photos = list() + general["photos"] = photos + photos[++photos.len] = active1.fields["photo-south"] + photos[++photos.len] = active1.fields["photo-west"] + general["has_photos"] = (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0) + general["empty"] = 0 + else + general["empty"] = 1 + + var/list/security = list() + data["security"] = security + if(istype(active2, /datum/data/record) && data_core.security.Find(active2)) + var/list/fields = list() + security["fields"] = fields + fields[++fields.len] = FIELD("Criminal Status", active2.fields["criminal"], "criminal") + fields[++fields.len] = FIELD("Minor Crimes", active2.fields["mi_crim"], "mi_crim") + fields[++fields.len] = FIELD("Details", active2.fields["mi_crim_d"], "mi_crim_d") + fields[++fields.len] = FIELD("Major Crimes", active2.fields["ma_crim"], "ma_crim") + fields[++fields.len] = FIELD("Details", active2.fields["ma_crim_d"], "ma_crim_d") + fields[++fields.len] = FIELD("Important Notes", active2.fields["notes"], "notes") + if(!active2.fields["comments"] || !islist(active2.fields["comments"])) + active2.fields["comments"] = list() + security["comments"] = active2.fields["comments"] + security["empty"] = 0 + else + security["empty"] = 1 + + data["modal"] = tgui_modal_data(src) + return data + +/obj/machinery/computer/secure_data/tgui_act(action, params) + if(..()) + return TRUE + + if(!data_core.general.Find(active1)) + active1 = null + if(!data_core.security.Find(active2)) + active2 = null + + . = TRUE + if(tgui_act_modal(action, params)) + return + + switch(action) + if("cleartemp") + temp = null + if("scan") + if(scan) + scan.forceMove(loc) + if(ishuman(usr) && !usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.forceMove(src) + scan = I + if("login") + var/login_type = text2num(params["login_type"]) + if(login_type == LOGIN_TYPE_NORMAL && istype(scan)) + if(check_access(scan)) + authenticated = scan.registered_name + rank = scan.assignment + else if(login_type == LOGIN_TYPE_AI && isAI(usr)) + authenticated = usr.name + rank = "AI" + else if(login_type == LOGIN_TYPE_ROBOT && isrobot(usr)) + authenticated = usr.name + var/mob/living/silicon/robot/R = usr + rank = "[R.modtype] [R.braintype]" + if(authenticated) + active1 = null + active2 = null + screen = SEC_DATA_R_LIST + else + . = FALSE + + if(.) + return + + if(authenticated) + . = TRUE + switch(action) + if("logout") + if(scan) + scan.forceMove(loc) + if(ishuman(usr) && !usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + authenticated = null + screen = null + active1 = null + active2 = null + if("screen") + screen = clamp(text2num(params["screen"]) || 0, SEC_DATA_R_LIST, SEC_DATA_RECORD) + active1 = null + active2 = null + if("del_all") + for(var/datum/data/record/R in data_core.security) + qdel(R) + set_temp("All security records deleted.") + if("del_r") + if(active2) + set_temp("Security record deleted.") + qdel(active2) + if("del_r_2") + set_temp("All records for [active1.fields["name"]] deleted.") + if(active1) + for(var/datum/data/record/R in data_core.medical) + if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) + qdel(R) + qdel(active1) + if(active2) + qdel(active2) + if("d_rec") + var/datum/data/record/general_record = locate(params["d_rec"] || "") + if(!data_core.general.Find(general_record)) + set_temp("Record not found.", "danger") + return + + var/datum/data/record/security_record + for(var/datum/data/record/M in data_core.security) + if(M.fields["name"] == general_record.fields["name"] && M.fields["id"] == general_record.fields["id"]) + security_record = M + break + + active1 = general_record + active2 = security_record + screen = SEC_DATA_RECORD + if("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 = "Security Record #[R.fields["id"]]" + R.fields["brain_type"] = "Unknown" + R.fields["criminal"] = "None" + R.fields["mi_crim"] = "None" + R.fields["mi_crim_d"] = "No minor crime convictions." + R.fields["ma_crim"] = "None" + R.fields["ma_crim_d"] = "No major crime convictions." + R.fields["notes"] = "No notes." + R.fields["notes"] = "No notes." + data_core.security += R + active2 = R + screen = SEC_DATA_RECORD + set_temp("Security record created.", "success") + if("del_c") + var/index = text2num(params["del_c"] || "") + if(!index || !istype(active2, /datum/data/record)) + return + + var/list/comments = active2.fields["comments"] + index = clamp(index, 1, length(comments)) + if(comments[index]) + comments.Cut(index, index + 1) + if("search") + active1 = null + active2 = null + var/t1 = lowertext(params["t1"] || "") + if(!length(t1)) + return + + for(var/datum/data/record/R in data_core.general) + if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["fingerprint"])) + active1 = R + break + if(!active1) + set_temp("Security record not found. You must enter the person's exact name, ID, or fingerprint.", "danger") + return + for(var/datum/data/record/E in data_core.security) + if(E.fields["name"] == active1.fields["name"] && E.fields["id"] == active1.fields["id"]) + active2 = E + break + screen = SEC_DATA_RECORD + if("print_p") + if(!printing) + printing = TRUE + // playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) + SStgui.update_uis(src) + addtimer(CALLBACK(src, PROC_REF(print_finish)), 5 SECONDS) + if("photo_front") + var/icon/photo = get_photo(usr) + if(photo && active1) + active1.fields["photo_front"] = photo + active1.fields["photo-south"] = "'data:image/png;base64,[icon2base64(photo)]'" + if("photo_side") + var/icon/photo = get_photo(usr) + if(photo && active1) + active1.fields["photo_side"] = photo + active1.fields["photo-west"] = "'data:image/png;base64,[icon2base64(photo)]'" + else + return FALSE + +/** + * Called in tgui_act() to process modal actions + * + * Arguments: + * * action - The action passed by tgui + * * params - The params passed by tgui + */ +/obj/machinery/computer/secure_data/proc/tgui_act_modal(action, params) + . = TRUE + var/id = params["id"] // The modal's ID + var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"] + switch(tgui_modal_act(src, action, params)) + if(TGUI_MODAL_OPEN) + switch(id) + if("edit") + var/field = arguments["field"] + if(!length(field) || !field_edit_questions[field]) + return + var/question = field_edit_questions[field] + var/choices = field_edit_choices[field] + if(length(choices)) + tgui_modal_choice(src, id, question, arguments = arguments, value = arguments["value"], choices = choices) + else + tgui_modal_input(src, id, question, arguments = arguments, value = arguments["value"]) + if("add_c") + tgui_modal_input(src, id, "Please enter your message:") + else + return FALSE + if(TGUI_MODAL_ANSWER) + var/answer = params["answer"] + switch(id) + if("edit") + var/field = arguments["field"] + if(!length(field) || !field_edit_questions[field]) + return + var/list/choices = field_edit_choices[field] + if(length(choices) && !(answer in choices)) + return + + if(field == "age") + answer = text2num(answer) + + if(field == "rank") + if(answer in joblist) + active1.fields["real_rank"] = answer + + if(field == "criminal") + for(var/mob/living/carbon/human/H in player_list) + BITSET(H.hud_updateflag, WANTED_HUD) + + if(istype(active2) && (field in active2.fields)) + active2.fields[field] = answer + if(istype(active1) && (field in active1.fields)) + active1.fields[field] = answer + if("add_c") + if(!length(answer) || !istype(active2) || !length(authenticated)) + return + active2.fields["comments"] += list(list( + header = "Made by [authenticated] ([rank]) at [worldtime2stationtime(world.time)]", + text = answer + )) + else + return FALSE + else + return FALSE + + +/** + * Called when the print timer finishes + */ +/obj/machinery/computer/secure_data/proc/print_finish() + var/obj/item/weapon/paper/P = new(loc) + P.info = "
    Security Record

    " + if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) + P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]] +
    \nSex: [active1.fields["sex"]] +
    \nSpecies: [active1.fields["species"]] +
    \nAge: [active1.fields["age"]] +
    \nFingerprint: [active1.fields["fingerprint"]] +
    \nPhysical Status: [active1.fields["p_stat"]] +
    \nMental Status: [active1.fields["m_stat"]]
    "} + else + P.info += "General Record Lost!
    " + if(istype(active2, /datum/data/record) && data_core.security.Find(active2)) + P.info += {"
    \n
    Security Data
    +
    \nCriminal Status: [active2.fields["criminal"]]
    \n +
    \nMinor Crimes: [active2.fields["mi_crim"]] +
    \nDetails: [active2.fields["mi_crim_d"]]
    \n +
    \nMajor Crimes: [active2.fields["ma_crim"]] +
    \nDetails: [active2.fields["ma_crim_d"]]
    \n +
    \nImportant Notes: +
    \n\t[active2.fields["notes"]]
    \n +
    \n +
    Comments/Log

    "} + for(var/c in active2.fields["comments"]) + P.info += "[c["header"]]
    [c["text"]]
    " + else + P.info += "Security Record Lost!
    " + P.info += "" + P.name = "paper - 'Security Record: [active1.fields["name"]]'" + printing = FALSE + SStgui.update_uis(src) + + +/** + * Sets a temporary message to display to the user + * + * Arguments: + * * text - Text to display, null/empty to clear the message from the UI + * * style - The style of the message: (color name), info, success, warning, danger, virus + */ +/obj/machinery/computer/secure_data/proc/set_temp(text = "", style = "info", update_now = FALSE) + temp = list(text = text, style = style) + if(update_now) + SStgui.update_uis(src) + +/obj/machinery/computer/secure_data/proc/is_not_allowed(var/mob/user) + return !src.authenticated || user.stat || user.restrained() || (!in_range(src, user) && (!istype(user, /mob/living/silicon))) + +/obj/machinery/computer/secure_data/proc/get_photo(var/mob/user) + if(istype(user.get_active_hand(), /obj/item/weapon/photo)) + var/obj/item/weapon/photo/photo = user.get_active_hand() + return photo.img + if(istype(user, /mob/living/silicon)) + var/mob/living/silicon/tempAI = usr + var/obj/item/weapon/photo/selection = tempAI.GetPicture() + if (selection) + return selection.img + +/obj/machinery/computer/secure_data/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + for(var/datum/data/record/R in data_core.security) + if(prob(10/severity)) + switch(rand(1,6)) + if(1) + R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + if(2) + R.fields["sex"] = pick("Male", "Female") + if(3) + R.fields["age"] = rand(5, 85) + if(4) + R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released") + if(5) + R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") + if(PDA_Manifest.len) + PDA_Manifest.Cut() + if(6) + R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") + continue + + else if(prob(1)) + qdel(R) + continue + + ..(severity) + +/obj/machinery/computer/secure_data/detective_computer + icon_state = "messyfiles" + +#undef FIELD diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index d4e5867549..42ee83612d 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -1,71 +1,71 @@ -/obj/machinery/computer/shuttle - name = "Shuttle" - desc = "For shuttle control." - icon_keyboard = "tech_key" - icon_screen = "shuttle" - light_color = "#00ffff" - var/auth_need = 3.0 - var/list/authorized = list( ) - - -/obj/machinery/computer/shuttle/attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob) - if(stat & (BROKEN|NOPOWER)) return - if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location() || !( user ))) return - if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (istype(W, /obj/item/device/pda)) - var/obj/item/device/pda/pda = W - W = pda.id - if (!W:access) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return - - var/list/cardaccess = W:access - if(!istype(cardaccess, /list) || !cardaccess.len) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return - - if(!(access_heads in W:access)) //doesn't have this access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return 0 - - var/choice = tgui_alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", list("Authorize", "Repeal", "Abort")) - if(emergency_shuttle.location() && user.get_active_hand() != W) - return 0 - switch(choice) - if("Authorize") - src.authorized -= W:registered_name - src.authorized += W:registered_name - if (src.auth_need - src.authorized.len > 0) - message_admins("[key_name_admin(user)] has authorized early shuttle launch") - log_game("[user.ckey] has authorized early shuttle launch") - to_world("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early") - else - message_admins("[key_name_admin(user)] has launched the shuttle") - log_game("[user.ckey] has launched the shuttle early") - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - emergency_shuttle.set_launch_countdown(10) - //src.authorized = null - qdel(src.authorized) - src.authorized = list( ) - - if("Repeal") - src.authorized -= W:registered_name - to_world("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early") - - if("Abort") - to_world("All authorizations to shortening time for shuttle launch have been revoked!") - src.authorized.len = 0 - src.authorized = list( ) - - else if (istype(W, /obj/item/weapon/card/emag) && !emagged) - var/choice = tgui_alert(user, "Would you like to launch the shuttle?", "Shuttle control", list("Launch", "Cancel")) - - if(!emagged && !emergency_shuttle.location() && user.get_active_hand() == W) - switch(choice) - if("Launch") - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - emergency_shuttle.set_launch_countdown(10) - emagged = 1 - if("Cancel") - return - return +/obj/machinery/computer/shuttle + name = "Shuttle" + desc = "For shuttle control." + icon_keyboard = "tech_key" + icon_screen = "shuttle" + light_color = "#00ffff" + var/auth_need = 3.0 + var/list/authorized = list( ) + + +/obj/machinery/computer/shuttle/attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob) + if(stat & (BROKEN|NOPOWER)) return + if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location() || !( user ))) return + if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if (istype(W, /obj/item/device/pda)) + var/obj/item/device/pda/pda = W + W = pda.id + if (!W:access) //no access + to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") + return + + var/list/cardaccess = W:access + if(!istype(cardaccess, /list) || !cardaccess.len) //no access + to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") + return + + if(!(access_heads in W:access)) //doesn't have this access + to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") + return 0 + + var/choice = tgui_alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", list("Authorize", "Repeal", "Abort")) + if(emergency_shuttle.location() && user.get_active_hand() != W) + return 0 + switch(choice) + if("Authorize") + src.authorized -= W:registered_name + src.authorized += W:registered_name + if (src.auth_need - src.authorized.len > 0) + message_admins("[key_name_admin(user)] has authorized early shuttle launch") + log_game("[user.ckey] has authorized early shuttle launch") + to_world("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early") + else + message_admins("[key_name_admin(user)] has launched the shuttle") + log_game("[user.ckey] has launched the shuttle early") + to_world("Alert: Shuttle launch time shortened to 10 seconds!") + emergency_shuttle.set_launch_countdown(10) + //src.authorized = null + qdel(src.authorized) + src.authorized = list( ) + + if("Repeal") + src.authorized -= W:registered_name + to_world("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early") + + if("Abort") + to_world("All authorizations to shortening time for shuttle launch have been revoked!") + src.authorized.len = 0 + src.authorized = list( ) + + else if (istype(W, /obj/item/weapon/card/emag) && !emagged) + var/choice = tgui_alert(user, "Would you like to launch the shuttle?", "Shuttle control", list("Launch", "Cancel")) + + if(!emagged && !emergency_shuttle.location() && user.get_active_hand() == W) + switch(choice) + if("Launch") + to_world("Alert: Shuttle launch time shortened to 10 seconds!") + emergency_shuttle.set_launch_countdown(10) + emagged = 1 + if("Cancel") + return + return diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index ce0bea0aff..cc8727343c 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -1,331 +1,331 @@ -//Config stuff -#define SPECOPS_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves. -#define SPECOPS_STATION_AREATYPE "/area/shuttle/specops/station" //Type of the spec ops shuttle area for station -#define SPECOPS_DOCK_AREATYPE "/area/shuttle/specops/centcom" //Type of the spec ops shuttle area for dock -#define SPECOPS_RETURN_DELAY 600 //Time between the shuttle is capable of moving. - -var/specops_shuttle_moving_to_station = 0 -var/specops_shuttle_moving_to_centcom = 0 -var/specops_shuttle_at_station = 0 -var/specops_shuttle_can_send = 1 -var/specops_shuttle_time = 0 -var/specops_shuttle_timeleft = 0 - -/obj/machinery/computer/specops_shuttle - name = "special operations shuttle control console" - icon_keyboard = "security_key" - icon_screen = "syndishuttle" - light_color = "#00ffff" - req_access = list(access_cent_specops) -// req_access = list(ACCESS_CENT_SPECOPS) - var/temp = null - var/hacked = 0 - var/allowedtocall = 0 - var/specops_shuttle_timereset = 0 - -/proc/specops_return() - var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. - announcer.config(list("Response Team" = 0)) - - var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. - var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN\""//Initial message shown. - if(announcer) - announcer.autosay(message, "A.L.I.C.E.", "Response Team") - - while(specops_shuttle_time - world.timeofday > 0) - var/ticksleft = specops_shuttle_time - world.timeofday - - if(ticksleft > 1e5) - specops_shuttle_time = world.timeofday + 10 // midnight rollover - specops_shuttle_timeleft = (ticksleft / 10) - - //All this does is announce the time before launch. - if(announcer) - var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions. - if(rounded_time_left in message_tracker)//If that time is in the list for message announce. - message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" - if(rounded_time_left==0) - message = "\"ALERT: TAKEOFF\"" - announcer.autosay(message, "A.L.I.C.E.", "Response Team") - message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. - //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. - - sleep(5) - - specops_shuttle_moving_to_station = 0 - specops_shuttle_moving_to_centcom = 0 - - specops_shuttle_at_station = 1 - - var/area/start_location = locate(/area/shuttle/specops/station) - var/area/end_location = locate(/area/shuttle/specops/centcom) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in end_location) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - // hey you, get out of the way! - for(var/turf/T in dstturfs) - // find the turf to move things to - var/turf/D = locate(T.x, throwy - 1, 1) - //var/turf/E = get_step(D, SOUTH) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - qdel(T) - - for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... - bug.gib() - - for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... - pest.gib() - - start_location.move_contents_to(end_location) - - for(var/turf/T in get_area_turfs(end_location) ) - var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived at [using_map.boss_name]. Operation has ended!") - - specops_shuttle_at_station = 0 - - for(var/obj/machinery/computer/specops_shuttle/S in machines) - S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY - - qdel(announcer) - -/proc/specops_process() - var/area/centcom/specops/special_ops = locate()//Where is the specops area located? - var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. - announcer.config(list("Response Team" = 0)) - - var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. - var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH\""//Initial message shown. - if(announcer) - announcer.autosay(message, "A.L.I.C.E.", "Response Team") -// message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD" -// announcer.autosay(message, "A.L.I.C.E.", "Response Team") - - while(specops_shuttle_time - world.timeofday > 0) - var/ticksleft = specops_shuttle_time - world.timeofday - - if(ticksleft > 1e5) - specops_shuttle_time = world.timeofday + 10 // midnight rollover - specops_shuttle_timeleft = (ticksleft / 10) - - //All this does is announce the time before launch. - if(announcer) - var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions. - if(rounded_time_left in message_tracker)//If that time is in the list for message announce. - message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" - if(rounded_time_left==0) - message = "\"ALERT: TAKEOFF\"" - announcer.autosay(message, "A.L.I.C.E.", "Response Team") - message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. - //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. - - sleep(5) - - specops_shuttle_moving_to_station = 0 - specops_shuttle_moving_to_centcom = 0 - - specops_shuttle_at_station = 1 - if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - - if (!specops_can_move()) - to_chat(usr, "The Special Operations shuttle is unable to leave.") - return - - //Begin Marauder launchpad. - spawn(0)//So it parallel processes it. - for(var/obj/machinery/door/blast/M in special_ops) - switch(M.id) - if("ASSAULT0") - spawn(10)//1 second delay between each. - M.open() - if("ASSAULT1") - spawn(20) - M.open() - if("ASSAULT2") - spawn(30) - M.open() - if("ASSAULT3") - spawn(40) - M.open() - - sleep(10) - - var/spawn_marauder[] = new() - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "Marauder Entry") - spawn_marauder.Add(L) - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "Marauder Exit") - var/obj/effect/portal/P = new(L.loc) - P.invisibility = 101//So it is not seen by anyone. - P.failchance = 0//So it has no fail chance when teleporting. - P.target = pick(spawn_marauder)//Where the marauder will arrive. - spawn_marauder.Remove(P.target) - - sleep(10) - - for(var/obj/machinery/mass_driver/M in special_ops) - switch(M.id) - if("ASSAULT0") - spawn(10) - M.drive() - if("ASSAULT1") - spawn(20) - M.drive() - if("ASSAULT2") - spawn(30) - M.drive() - if("ASSAULT3") - spawn(40) - M.drive() - - sleep(50)//Doors remain open for 5 seconds. - - for(var/obj/machinery/door/blast/M in special_ops) - switch(M.id)//Doors close at the same time. - if("ASSAULT0") - spawn(0) - M.close() - if("ASSAULT1") - spawn(0) - M.close() - if("ASSAULT2") - spawn(0) - M.close() - if("ASSAULT3") - spawn(0) - M.close() - special_ops.readyreset()//Reset firealarm after the team launched. - //End Marauder launchpad. - - var/area/start_location = locate(/area/shuttle/specops/centcom) - var/area/end_location = locate(/area/shuttle/specops/station) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in end_location) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - // hey you, get out of the way! - for(var/turf/T in dstturfs) - // find the turf to move things to - var/turf/D = locate(T.x, throwy - 1, 1) - //var/turf/E = get_step(D, SOUTH) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - qdel(T) - - start_location.move_contents_to(end_location) - - for(var/turf/T in get_area_turfs(end_location) ) - var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived to [station_name()]. Commence operation!") - - for(var/obj/machinery/computer/specops_shuttle/S in machines) - S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY - - qdel(announcer) - -/proc/specops_can_move() - if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) - return 0 - for(var/obj/machinery/computer/specops_shuttle/S in machines) - if(world.timeofday <= S.specops_shuttle_timereset) - return 0 - return 1 - -/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/specops_shuttle/emag_act(var/remaining_charges, var/mob/user) - to_chat(user, "The electronic systems in this console are far too advanced for your primitive hacking peripherals.") - -/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob) - if(!allowed(user)) - to_chat(user, "Access Denied.") - return - - if(..()) - return - - user.machine = src - var/dat - if (temp) - dat = temp - else - dat += {"
    Special Operations Shuttle
    - \nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name()] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]
    - [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
    \n
    ":specops_shuttle_at_station ? "\nShuttle standing by...
    \n
    ":"\nDepart to [station_name()]
    \n
    "] - \nClose"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - -/obj/machinery/computer/specops_shuttle/Topic(href, href_list) - if(..()) - return 1 - - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.machine = src - - if (href_list["sendtodock"]) - if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - - if (!specops_can_move()) - to_chat(usr, "[using_map.boss_name] will not allow the Special Operations shuttle to return yet.") - if(world.timeofday <= specops_shuttle_timereset) - if (((world.timeofday - specops_shuttle_timereset)/10) > 60) - to_chat(usr, "[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!") - to_chat(usr, "[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!") - return - - to_chat(usr, "The Special Operations shuttle will arrive at [using_map.boss_name] in [(SPECOPS_MOVETIME/10)] seconds.") - - temp += "Shuttle departing.

    OK" - updateUsrDialog() - - specops_shuttle_moving_to_centcom = 1 - specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME - spawn(0) - specops_return() - - else if (href_list["sendtostation"]) - if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - - if (!specops_can_move()) - to_chat(usr, "The Special Operations shuttle is unable to leave.") - return - - to_chat(usr, "The Special Operations shuttle will arrive on [station_name()] in [(SPECOPS_MOVETIME/10)] seconds.") - - temp += "Shuttle departing.

    OK" - updateUsrDialog() - - var/area/centcom/specops/special_ops = locate() - if(special_ops) - special_ops.readyalert()//Trigger alarm for the spec ops area. - specops_shuttle_moving_to_station = 1 - - specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME - spawn(0) - specops_process() - - else if (href_list["mainmenu"]) - temp = null - - add_fingerprint(usr) - updateUsrDialog() - return +//Config stuff +#define SPECOPS_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves. +#define SPECOPS_STATION_AREATYPE "/area/shuttle/specops/station" //Type of the spec ops shuttle area for station +#define SPECOPS_DOCK_AREATYPE "/area/shuttle/specops/centcom" //Type of the spec ops shuttle area for dock +#define SPECOPS_RETURN_DELAY 600 //Time between the shuttle is capable of moving. + +var/specops_shuttle_moving_to_station = 0 +var/specops_shuttle_moving_to_centcom = 0 +var/specops_shuttle_at_station = 0 +var/specops_shuttle_can_send = 1 +var/specops_shuttle_time = 0 +var/specops_shuttle_timeleft = 0 + +/obj/machinery/computer/specops_shuttle + name = "special operations shuttle control console" + icon_keyboard = "security_key" + icon_screen = "syndishuttle" + light_color = "#00ffff" + req_access = list(access_cent_specops) +// req_access = list(ACCESS_CENT_SPECOPS) + var/temp = null + var/hacked = 0 + var/allowedtocall = 0 + var/specops_shuttle_timereset = 0 + +/proc/specops_return() + var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + announcer.config(list("Response Team" = 0)) + + var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. + var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN\""//Initial message shown. + if(announcer) + announcer.autosay(message, "A.L.I.C.E.", "Response Team") + + while(specops_shuttle_time - world.timeofday > 0) + var/ticksleft = specops_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + specops_shuttle_time = world.timeofday + 10 // midnight rollover + specops_shuttle_timeleft = (ticksleft / 10) + + //All this does is announce the time before launch. + if(announcer) + var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions. + if(rounded_time_left in message_tracker)//If that time is in the list for message announce. + message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" + if(rounded_time_left==0) + message = "\"ALERT: TAKEOFF\"" + announcer.autosay(message, "A.L.I.C.E.", "Response Team") + message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. + //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. + + sleep(5) + + specops_shuttle_moving_to_station = 0 + specops_shuttle_moving_to_centcom = 0 + + specops_shuttle_at_station = 1 + + var/area/start_location = locate(/area/shuttle/specops/station) + var/area/end_location = locate(/area/shuttle/specops/centcom) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + qdel(T) + + for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... + bug.gib() + + for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... + pest.gib() + + start_location.move_contents_to(end_location) + + for(var/turf/T in get_area_turfs(end_location) ) + var/mob/M = locate(/mob) in T + to_chat(M, "You have arrived at [using_map.boss_name]. Operation has ended!") + + specops_shuttle_at_station = 0 + + for(var/obj/machinery/computer/specops_shuttle/S in machines) + S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY + + qdel(announcer) + +/proc/specops_process() + var/area/centcom/specops/special_ops = locate()//Where is the specops area located? + var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + announcer.config(list("Response Team" = 0)) + + var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. + var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH\""//Initial message shown. + if(announcer) + announcer.autosay(message, "A.L.I.C.E.", "Response Team") +// message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD" +// announcer.autosay(message, "A.L.I.C.E.", "Response Team") + + while(specops_shuttle_time - world.timeofday > 0) + var/ticksleft = specops_shuttle_time - world.timeofday + + if(ticksleft > 1e5) + specops_shuttle_time = world.timeofday + 10 // midnight rollover + specops_shuttle_timeleft = (ticksleft / 10) + + //All this does is announce the time before launch. + if(announcer) + var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions. + if(rounded_time_left in message_tracker)//If that time is in the list for message announce. + message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\"" + if(rounded_time_left==0) + message = "\"ALERT: TAKEOFF\"" + announcer.autosay(message, "A.L.I.C.E.", "Response Team") + message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. + //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. + + sleep(5) + + specops_shuttle_moving_to_station = 0 + specops_shuttle_moving_to_centcom = 0 + + specops_shuttle_at_station = 1 + if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return + + if (!specops_can_move()) + to_chat(usr, "The Special Operations shuttle is unable to leave.") + return + + //Begin Marauder launchpad. + spawn(0)//So it parallel processes it. + for(var/obj/machinery/door/blast/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10)//1 second delay between each. + M.open() + if("ASSAULT1") + spawn(20) + M.open() + if("ASSAULT2") + spawn(30) + M.open() + if("ASSAULT3") + spawn(40) + M.open() + + sleep(10) + + var/spawn_marauder[] = new() + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Marauder Entry") + spawn_marauder.Add(L) + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Marauder Exit") + var/obj/effect/portal/P = new(L.loc) + P.invisibility = 101//So it is not seen by anyone. + P.failchance = 0//So it has no fail chance when teleporting. + P.target = pick(spawn_marauder)//Where the marauder will arrive. + spawn_marauder.Remove(P.target) + + sleep(10) + + for(var/obj/machinery/mass_driver/M in special_ops) + switch(M.id) + if("ASSAULT0") + spawn(10) + M.drive() + if("ASSAULT1") + spawn(20) + M.drive() + if("ASSAULT2") + spawn(30) + M.drive() + if("ASSAULT3") + spawn(40) + M.drive() + + sleep(50)//Doors remain open for 5 seconds. + + for(var/obj/machinery/door/blast/M in special_ops) + switch(M.id)//Doors close at the same time. + if("ASSAULT0") + spawn(0) + M.close() + if("ASSAULT1") + spawn(0) + M.close() + if("ASSAULT2") + spawn(0) + M.close() + if("ASSAULT3") + spawn(0) + M.close() + special_ops.readyreset()//Reset firealarm after the team launched. + //End Marauder launchpad. + + var/area/start_location = locate(/area/shuttle/specops/centcom) + var/area/end_location = locate(/area/shuttle/specops/station) + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in end_location) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + // hey you, get out of the way! + for(var/turf/T in dstturfs) + // find the turf to move things to + var/turf/D = locate(T.x, throwy - 1, 1) + //var/turf/E = get_step(D, SOUTH) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + qdel(T) + + start_location.move_contents_to(end_location) + + for(var/turf/T in get_area_turfs(end_location) ) + var/mob/M = locate(/mob) in T + to_chat(M, "You have arrived to [station_name()]. Commence operation!") + + for(var/obj/machinery/computer/specops_shuttle/S in machines) + S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY + + qdel(announcer) + +/proc/specops_can_move() + if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) + return 0 + for(var/obj/machinery/computer/specops_shuttle/S in machines) + if(world.timeofday <= S.specops_shuttle_timereset) + return 0 + return 1 + +/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/specops_shuttle/emag_act(var/remaining_charges, var/mob/user) + to_chat(user, "The electronic systems in this console are far too advanced for your primitive hacking peripherals.") + +/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob) + if(!allowed(user)) + to_chat(user, "Access Denied.") + return + + if(..()) + return + + user.machine = src + var/dat + if (temp) + dat = temp + else + dat += {"
    Special Operations Shuttle
    + \nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name()] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]
    + [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
    \n
    ":specops_shuttle_at_station ? "\nShuttle standing by...
    \n
    ":"\nDepart to [station_name()]
    \n
    "] + \nClose"} + + user << browse(dat, "window=computer;size=575x450") + onclose(user, "computer") + return + +/obj/machinery/computer/specops_shuttle/Topic(href, href_list) + if(..()) + return 1 + + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + usr.machine = src + + if (href_list["sendtodock"]) + if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return + + if (!specops_can_move()) + to_chat(usr, "[using_map.boss_name] will not allow the Special Operations shuttle to return yet.") + if(world.timeofday <= specops_shuttle_timereset) + if (((world.timeofday - specops_shuttle_timereset)/10) > 60) + to_chat(usr, "[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!") + to_chat(usr, "[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!") + return + + to_chat(usr, "The Special Operations shuttle will arrive at [using_map.boss_name] in [(SPECOPS_MOVETIME/10)] seconds.") + + temp += "Shuttle departing.

    OK" + updateUsrDialog() + + specops_shuttle_moving_to_centcom = 1 + specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME + spawn(0) + specops_return() + + else if (href_list["sendtostation"]) + if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return + + if (!specops_can_move()) + to_chat(usr, "The Special Operations shuttle is unable to leave.") + return + + to_chat(usr, "The Special Operations shuttle will arrive on [station_name()] in [(SPECOPS_MOVETIME/10)] seconds.") + + temp += "Shuttle departing.

    OK" + updateUsrDialog() + + var/area/centcom/specops/special_ops = locate() + if(special_ops) + special_ops.readyalert()//Trigger alarm for the spec ops area. + specops_shuttle_moving_to_station = 1 + + specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME + spawn(0) + specops_process() + + else if (href_list["mainmenu"]) + temp = null + + add_fingerprint(usr) + updateUsrDialog() + return diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index b4da38c52d..58b8b556af 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -1,56 +1,56 @@ - -/obj/machinery/computer/station_alert - name = "Station Alert Console" - desc = "Used to access the station's automated alert system." - icon_keyboard = "tech_key" - icon_screen = "alert:0" - light_color = "#e6ffff" - circuit = /obj/item/weapon/circuitboard/stationalert_engineering - var/datum/tgui_module/alarm_monitor/alarm_monitor - var/monitor_type = /datum/tgui_module/alarm_monitor/engineering - -/obj/machinery/computer/station_alert/security - monitor_type = /datum/tgui_module/alarm_monitor/security - circuit = /obj/item/weapon/circuitboard/stationalert_security - -/obj/machinery/computer/station_alert/all - monitor_type = /datum/tgui_module/alarm_monitor/all - circuit = /obj/item/weapon/circuitboard/stationalert_all - -/obj/machinery/computer/station_alert/Initialize() - alarm_monitor = new monitor_type(src) - alarm_monitor.register_alarm(src, /atom/proc/update_icon) - . = ..() - -/obj/machinery/computer/station_alert/Destroy() - alarm_monitor.unregister_alarm(src) - qdel(alarm_monitor) - ..() - -/obj/machinery/computer/station_alert/attack_ai(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - return - -/obj/machinery/computer/station_alert/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - return - -/obj/machinery/computer/station_alert/tgui_interact(mob/user) - alarm_monitor.tgui_interact(user) - -/obj/machinery/computer/station_alert/update_icon() - if(!(stat & (BROKEN|NOPOWER))) - var/list/alarms = alarm_monitor ? alarm_monitor.major_alarms() : list() - if(alarms.len) - icon_screen = "alert:2" - playsound(src, 'modular_chomp/sound/effects/comp_alert_major.ogg', 70, 1) // CHOMPEdit: Alarm notifications - else - icon_screen = initial(icon_screen) - playsound(src, 'modular_chomp/sound/effects/comp_alert_clear.ogg', 50, 1) // CHOMPEdit: Alarm notifications - ..() + +/obj/machinery/computer/station_alert + name = "Station Alert Console" + desc = "Used to access the station's automated alert system." + icon_keyboard = "tech_key" + icon_screen = "alert:0" + light_color = "#e6ffff" + circuit = /obj/item/weapon/circuitboard/stationalert_engineering + var/datum/tgui_module/alarm_monitor/alarm_monitor + var/monitor_type = /datum/tgui_module/alarm_monitor/engineering + +/obj/machinery/computer/station_alert/security + monitor_type = /datum/tgui_module/alarm_monitor/security + circuit = /obj/item/weapon/circuitboard/stationalert_security + +/obj/machinery/computer/station_alert/all + monitor_type = /datum/tgui_module/alarm_monitor/all + circuit = /obj/item/weapon/circuitboard/stationalert_all + +/obj/machinery/computer/station_alert/Initialize() + alarm_monitor = new monitor_type(src) + alarm_monitor.register_alarm(src, /atom/proc/update_icon) + . = ..() + +/obj/machinery/computer/station_alert/Destroy() + alarm_monitor.unregister_alarm(src) + qdel(alarm_monitor) + ..() + +/obj/machinery/computer/station_alert/attack_ai(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + return + +/obj/machinery/computer/station_alert/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + return + +/obj/machinery/computer/station_alert/tgui_interact(mob/user) + alarm_monitor.tgui_interact(user) + +/obj/machinery/computer/station_alert/update_icon() + if(!(stat & (BROKEN|NOPOWER))) + var/list/alarms = alarm_monitor ? alarm_monitor.major_alarms() : list() + if(alarms.len) + icon_screen = "alert:2" + playsound(src, 'modular_chomp/sound/effects/comp_alert_major.ogg', 70, 1) // CHOMPEdit: Alarm notifications + else + icon_screen = initial(icon_screen) + playsound(src, 'modular_chomp/sound/effects/comp_alert_clear.ogg', 50, 1) // CHOMPEdit: Alarm notifications + ..() diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index c7db7b94e3..8299466071 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -1,6 +1,6 @@ -/obj/machinery/computer/syndicate_elite_shuttle - name = "elite mercenary squad shuttle control console" - icon_keyboard = "syndie_key" - icon_screen = "syndishuttle" - light_color = "#00ffff" - req_access = list(access_cent_specops) +/obj/machinery/computer/syndicate_elite_shuttle + name = "elite mercenary squad shuttle control console" + icon_keyboard = "syndie_key" + icon_screen = "syndishuttle" + light_color = "#00ffff" + req_access = list(access_cent_specops) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index bf6d5080d7..29979be894 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,160 +1,160 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/ - -/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. - name = "machine frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "box_0" - density = TRUE - anchored = TRUE - use_power = USE_POWER_OFF - var/obj/item/weapon/circuitboard/circuit = null - var/list/components = null - var/list/req_components = null - var/list/req_component_names = null - var/state = 1 - - proc/update_desc() - var/D - if(req_components) - var/list/component_list = new - for(var/I in req_components) - if(req_components[I] > 0) - component_list += "[num2text(req_components[I])] [req_component_names[I]]" - D = "Requires [english_list(component_list)]." - desc = D - -/obj/machinery/constructable_frame/machine_frame - attackby(obj/item/P as obj, mob/user as mob) - switch(state) - if(1) - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P - if (C.get_amount() < 5) - to_chat(user, "You need five lengths of cable to add them to the frame.") - return - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You start to add cables to the frame.") - if(do_after(user, 20) && state == 1) - if(C.use(5)) - to_chat(user, "You add cables to the frame.") - state = 2 - icon_state = "box_1" - else - if(P.has_tool_quality(TOOL_WRENCH)) - playsound(src, W.usesound, 75, 1) - to_chat(user, "You dismantle the frame") - new /obj/item/stack/material/steel(src.loc, 5) - qdel(src) - if(2) - if(istype(P, /obj/item/weapon/circuitboard)) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "machine") - //VOREStation Addition End - if(istype(B, /obj/item/weapon/circuitboard/quantumpad) && istype(get_area(src), /area/shuttle)) - to_chat(user, "This is too unstable a platform for a quantum pad to operate on!") - return - //VOREStation Addition End - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You add the circuit board to the frame.") - circuit = P - user.drop_item() - P.loc = src - icon_state = "box_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - for(var/A in circuit.req_components) - req_components[A] = circuit.req_components[A] - req_component_names = circuit.req_components.Copy() - for(var/A in req_components) - var/cp = text2path(A) - var/obj/ct = new cp() // have to quickly instantiate it get name - req_component_names[A] = ct.name - update_desc() - to_chat(user, desc) - else - to_chat(user, "This frame does not accept circuit boards of this type!") - else - if(P.has_tool_quality(TOOL_WIRECUTTER)) - playsound(src, P.usesound, 50, 1) - to_chat(user, "You remove the cables.") - state = 1 - icon_state = "box_0" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) - A.amount = 5 - - if(3) - if(P.has_tool_quality(TOOL_CROWBAR)) - playsound(src, P.usesound, 50, 1) - state = 2 - circuit.loc = src.loc - circuit = null - if(components.len == 0) - to_chat(user, "You remove the circuit board.") - else - to_chat(user, "You remove the circuit board and other components.") - for(var/obj/item/weapon/W in components) - W.loc = src.loc - desc = initial(desc) - req_components = null - components = null - icon_state = "box_1" - else - if(P.has_tool_quality(TOOL_SCREWDRIVER)) - var/component_check = 1 - for(var/R in req_components) - if(req_components[R] > 0) - component_check = 0 - break - if(component_check) - playsound(src, P.usesound, 50, 1) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) - - if(new_machine.component_parts) - new_machine.component_parts.Cut() - else - new_machine.component_parts = list() - - src.circuit.construct(new_machine) - - for(var/obj/O in src) - if(circuit.contain_parts) // things like disposal don't want their parts in them - O.loc = new_machine - else - O.loc = null - new_machine.component_parts += O - - if(circuit.contain_parts) - circuit.loc = new_machine - else - circuit.loc = null - - new_machine.RefreshParts() - qdel(src) - else - if(istype(P, /obj/item)) - for(var/I in req_components) - if(istype(P, text2path(I)) && (req_components[I] > 0)) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(P.is_cable_coil)) - var/obj/item/stack/cable_coil/CP = P - if(CP.get_amount() > 1) - var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src) - CC.amount = camt - CC.update_icon() - CP.use(camt) - components += CC - req_components[I] -= camt - update_desc() - break - user.drop_item() - P.loc = src - components += P - req_components[I]-- - update_desc() - break - to_chat(user, desc) - if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil)) - to_chat(user, "You cannot add that component to the machine!") +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/ + +/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. + name = "machine frame" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "box_0" + density = TRUE + anchored = TRUE + use_power = USE_POWER_OFF + var/obj/item/weapon/circuitboard/circuit = null + var/list/components = null + var/list/req_components = null + var/list/req_component_names = null + var/state = 1 + + proc/update_desc() + var/D + if(req_components) + var/list/component_list = new + for(var/I in req_components) + if(req_components[I] > 0) + component_list += "[num2text(req_components[I])] [req_component_names[I]]" + D = "Requires [english_list(component_list)]." + desc = D + +/obj/machinery/constructable_frame/machine_frame + attackby(obj/item/P as obj, mob/user as mob) + switch(state) + if(1) + if(istype(P, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = P + if (C.get_amount() < 5) + to_chat(user, "You need five lengths of cable to add them to the frame.") + return + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to add cables to the frame.") + if(do_after(user, 20) && state == 1) + if(C.use(5)) + to_chat(user, "You add cables to the frame.") + state = 2 + icon_state = "box_1" + else + if(P.has_tool_quality(TOOL_WRENCH)) + playsound(src, W.usesound, 75, 1) + to_chat(user, "You dismantle the frame") + new /obj/item/stack/material/steel(src.loc, 5) + qdel(src) + if(2) + if(istype(P, /obj/item/weapon/circuitboard)) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == "machine") + //VOREStation Addition End + if(istype(B, /obj/item/weapon/circuitboard/quantumpad) && istype(get_area(src), /area/shuttle)) + to_chat(user, "This is too unstable a platform for a quantum pad to operate on!") + return + //VOREStation Addition End + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You add the circuit board to the frame.") + circuit = P + user.drop_item() + P.loc = src + icon_state = "box_2" + state = 3 + components = list() + req_components = circuit.req_components.Copy() + for(var/A in circuit.req_components) + req_components[A] = circuit.req_components[A] + req_component_names = circuit.req_components.Copy() + for(var/A in req_components) + var/cp = text2path(A) + var/obj/ct = new cp() // have to quickly instantiate it get name + req_component_names[A] = ct.name + update_desc() + to_chat(user, desc) + else + to_chat(user, "This frame does not accept circuit boards of this type!") + else + if(P.has_tool_quality(TOOL_WIRECUTTER)) + playsound(src, P.usesound, 50, 1) + to_chat(user, "You remove the cables.") + state = 1 + icon_state = "box_0" + var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) + A.amount = 5 + + if(3) + if(P.has_tool_quality(TOOL_CROWBAR)) + playsound(src, P.usesound, 50, 1) + state = 2 + circuit.loc = src.loc + circuit = null + if(components.len == 0) + to_chat(user, "You remove the circuit board.") + else + to_chat(user, "You remove the circuit board and other components.") + for(var/obj/item/weapon/W in components) + W.loc = src.loc + desc = initial(desc) + req_components = null + components = null + icon_state = "box_1" + else + if(P.has_tool_quality(TOOL_SCREWDRIVER)) + var/component_check = 1 + for(var/R in req_components) + if(req_components[R] > 0) + component_check = 0 + break + if(component_check) + playsound(src, P.usesound, 50, 1) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) + + if(new_machine.component_parts) + new_machine.component_parts.Cut() + else + new_machine.component_parts = list() + + src.circuit.construct(new_machine) + + for(var/obj/O in src) + if(circuit.contain_parts) // things like disposal don't want their parts in them + O.loc = new_machine + else + O.loc = null + new_machine.component_parts += O + + if(circuit.contain_parts) + circuit.loc = new_machine + else + circuit.loc = null + + new_machine.RefreshParts() + qdel(src) + else + if(istype(P, /obj/item)) + for(var/I in req_components) + if(istype(P, text2path(I)) && (req_components[I] > 0)) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(P.is_cable_coil)) + var/obj/item/stack/cable_coil/CP = P + if(CP.get_amount() > 1) + var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src) + CC.amount = camt + CC.update_icon() + CP.use(camt) + components += CC + req_components[I] -= camt + update_desc() + break + user.drop_item() + P.loc = src + components += P + req_components[I]-- + update_desc() + break + to_chat(user, desc) + if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil)) + to_chat(user, "You cannot add that component to the machine!") diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index a0d9a99e3c..3b2f80e0ec 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -1,370 +1,370 @@ -#define HEAT_CAPACITY_HUMAN 100 //249840 J/K, for a 72 kg person. - -/obj/machinery/atmospherics/unary/cryo_cell - name = "cryo cell" - desc = "Used to cool people down for medical reasons. Totally." - icon = 'icons/obj/cryogenics.dmi' // map only - icon_state = "pod_preview" - density = TRUE - anchored = TRUE - layer = UNDER_JUNK_LAYER - interact_offline = 1 - - var/on = 0 - use_power = USE_POWER_IDLE - idle_power_usage = 20 - active_power_usage = 200 - buckle_lying = FALSE - buckle_dir = SOUTH - clicksound = 'sound/machines/buttonbeep.ogg' - clickvol = 30 - - var/temperature_archived - var/mob/living/carbon/occupant = null - var/obj/item/weapon/reagent_containers/glass/beaker = null - - var/current_heat_capacity = 50 - - var/image/fluid - -/obj/machinery/atmospherics/unary/cryo_cell/New() - ..() - icon = 'icons/obj/cryogenics_split.dmi' - icon_state = "base" - initialize_directions = dir - -/obj/machinery/atmospherics/unary/cryo_cell/Initialize() - . = ..() - var/image/tank = image(icon,"tank") - tank.alpha = 200 - tank.pixel_y = 18 - tank.plane = MOB_PLANE - tank.layer = MOB_LAYER+0.2 //Above fluid - fluid = image(icon, "tube_filler") - fluid.pixel_y = 18 - fluid.alpha = 200 - fluid.plane = MOB_PLANE - fluid.layer = MOB_LAYER+0.1 //Below glass, above mob - add_overlay(tank) - update_icon() - -/obj/machinery/atmospherics/unary/cryo_cell/Destroy() - var/turf/T = src.loc - T.contents += contents - if(beaker) - beaker.forceMove(get_step(loc, SOUTH)) //Beaker is carefully ejected from the wreckage of the cryotube - beaker = null - . = ..() - -/obj/machinery/atmospherics/unary/cryo_cell/process() - ..() - if(!node) - return - if(!on) - return - - if(occupant) - if(occupant.stat != 2) - process_occupant() - - if(air_contents) - temperature_archived = air_contents.temperature - heat_gas_contents() - expel_gas() - - if(abs(temperature_archived-air_contents.temperature) > 1) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) - // note that relaymove will also be called for mobs outside the cell with UI open - if(occupant == user && !user.stat) - go_out() - -/obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user) - tgui_interact(user) - -/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) - if(user == occupant) - return - - if(panel_open) - to_chat(usr, "Close the maintenance panel first.") - return - - tgui_interact(user) - -/obj/machinery/atmospherics/unary/cryo_cell/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Cryo", "Cryo Cell") // 520, 470 - ui.open() - -/obj/machinery/atmospherics/unary/cryo_cell/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/data[0] - data["isOperating"] = on - data["hasOccupant"] = occupant ? TRUE : FALSE - - var/occupantData[0] - if(occupant) - occupantData["name"] = occupant.name - occupantData["stat"] = occupant.stat - occupantData["health"] = occupant.health - occupantData["maxHealth"] = occupant.getMaxHealth() - occupantData["minHealth"] = config.health_threshold_dead - occupantData["bruteLoss"] = occupant.getBruteLoss() - occupantData["oxyLoss"] = occupant.getOxyLoss() - occupantData["toxLoss"] = occupant.getToxLoss() - occupantData["fireLoss"] = occupant.getFireLoss() - occupantData["bodyTemperature"] = occupant.bodytemperature - data["occupant"] = occupantData; - - data["cellTemperature"] = round(air_contents.temperature) - data["cellTemperatureStatus"] = "good" - if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) - data["cellTemperatureStatus"] = "bad" - else if(air_contents.temperature > 225) - data["cellTemperatureStatus"] = "average" - - data["isBeakerLoaded"] = beaker ? TRUE : FALSE - data["beakerLabel"] = null - data["beakerVolume"] = 0 - if(beaker) - data["beakerLabel"] = beaker.label_text ? beaker.label_text : null - if(beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - data["beakerVolume"] += R.volume - - return data - -/obj/machinery/atmospherics/unary/cryo_cell/tgui_act(action, params) - if(..() || usr == occupant) - return TRUE - - . = TRUE - switch(action) - if("switchOn") - on = 1 - update_icon() - if("switchOff") - on = 0 - update_icon() - if("ejectBeaker") - if(beaker) - beaker.loc = get_step(src.loc, SOUTH) - beaker = null - update_icon() - if("ejectOccupant") - if(!occupant || isslime(usr) || ispAI(usr)) - return 0 // don't update UIs attached to this object - go_out() - else - return FALSE - - add_fingerprint(usr) - -/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) - if(istype(G, /obj/item/weapon/reagent_containers/glass)) - if(beaker) - to_chat(user, "A beaker is already loaded into the machine.") - return - - beaker = G - user.drop_item() - G.loc = src - user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") - SStgui.update_uis(src) - update_icon() - else if(istype(G, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/grab = G - if(!ismob(grab.affecting)) - return - if(occupant) - to_chat(user,"\The [src] is already occupied by [occupant].") - if(grab.affecting.has_buckled_mobs()) - to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to it. Remove them first.")) - return - var/mob/M = grab.affecting - qdel(grab) - put_mob(M) - - return - -/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance - if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target)) - return - put_mob(target) - -/obj/machinery/atmospherics/unary/cryo_cell/update_icon() - cut_overlay(fluid) - fluid.color = null - if(on) - if(beaker) - fluid.color = beaker.reagents.get_color() - add_overlay(fluid) - -/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() - if(air_contents.total_moles < 10) - return - if(occupant) - if(occupant.stat >= DEAD) - return - occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity()) - occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise - occupant.set_stat(UNCONSCIOUS) - occupant.dir = SOUTH - if(occupant.bodytemperature < T0C) - occupant.Sleeping(max(5, (1/occupant.bodytemperature)*2000)) - occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000)) - if(air_contents.gas["oxygen"] > 2) - if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) - else - occupant.adjustOxyLoss(-1) - //severe damage should heal waaay slower without proper chemicals - if(occupant.bodytemperature < 225) - if(occupant.getToxLoss()) - occupant.adjustToxLoss(max(-1, -20/occupant.getToxLoss())) - if(occupant.radiation || occupant.accumulated_rads) - occupant.radiation -= 25 - occupant.accumulated_rads -= 25 - var/heal_brute = occupant.getBruteLoss() ? min(1, 20/occupant.getBruteLoss()) : 0 - var/heal_fire = occupant.getFireLoss() ? min(1, 20/occupant.getFireLoss()) : 0 - occupant.heal_organ_damage(heal_brute,heal_fire) - var/has_cryo = occupant.reagents.get_reagent_amount("cryoxadone") >= 1 - var/has_clonexa = occupant.reagents.get_reagent_amount("clonexadone") >= 1 - var/has_cryo_medicine = has_cryo || has_clonexa - if(beaker && !has_cryo_medicine) - beaker.reagents.trans_to_mob(occupant, 1, CHEM_BLOOD, 10) - -/obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents() - if(air_contents.total_moles < 1) - return - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = current_heat_capacity + air_heat_capacity - if(combined_heat_capacity > 0) - var/combined_energy = T20C*current_heat_capacity + air_heat_capacity*air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity - -/obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas() - if(air_contents.total_moles < 1) - return -// var/datum/gas_mixture/expel_gas = new -// var/remove_amount = air_contents.total_moles()/50 -// expel_gas = air_contents.remove(remove_amount) - - // Just have the gas disappear to nowhere. - //expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed - //loc.assume_air(expel_gas) - -/obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() - if(!(occupant)) - return - //for(var/obj/O in src) - // O.loc = src.loc - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - vis_contents -= occupant - occupant.pixel_x = occupant.default_pixel_x - occupant.pixel_y = occupant.default_pixel_y - occupant.loc = get_step(src.loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem. - if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected - occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug. - unbuckle_mob(occupant, force = TRUE) - occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music - occupant = null - current_heat_capacity = initial(current_heat_capacity) - update_use_power(USE_POWER_IDLE) - SStgui.update_uis(src) - return - -/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) - if(stat & (NOPOWER|BROKEN)) - to_chat(usr, "The cryo cell is not functioning.") - return - if(!istype(M)) - to_chat(usr, "The cryo cell cannot handle such a lifeform!") - return - if(occupant) - to_chat(usr, "The cryo cell is already occupied!") - return - if(M.abiotic()) - to_chat(usr, "Subject may not have abiotic items on.") - return - if(!node) - to_chat(usr, "The cell is not correctly connected to its pipe network!") - return - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.stop_pulling() - M.loc = src - M.ExtinguishMob() - if(M.health > -100 && (M.health < 0 || M.sleeping)) - to_chat(M, "You feel a cold liquid surround you. Your skin starts to freeze up.") - occupant = M - occupant.cozyloop.start() // CHOMPStation Add: Cozy Music - buckle_mob(occupant, forced = TRUE, check_loc = FALSE) - vis_contents |= occupant - occupant.pixel_y += 19 - current_heat_capacity = HEAT_CAPACITY_HUMAN - update_use_power(USE_POWER_ACTIVE) -// M.metabslow = 1 - add_fingerprint(usr) - update_icon() - SStgui.update_uis(src) - return 1 - -/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject() - set name = "Eject occupant" - set category = "Object" - set src in oview(1) - if(usr == occupant)//If the user is inside the tube... - if(usr.stat == 2)//and he's not dead.... - return - to_chat(usr, "Release sequence activated. This will take two minutes.") - sleep(1200) - if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already - return - go_out()//and release him from the eternal prison. - else - if(usr.stat != 0) - return - go_out() - add_fingerprint(usr) - return - -/obj/machinery/atmospherics/unary/cryo_cell/verb/move_inside() - set name = "Move Inside" - set category = "Object" - set src in oview(1) - if(isliving(usr)) - var/mob/living/L = usr - if(L.has_buckled_mobs()) - to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first.")) - return - if(L.stat != CONSCIOUS) - return - put_mob(L) - -/atom/proc/return_air_for_internal_lifeform(var/mob/living/lifeform) - return return_air() - -/obj/machinery/atmospherics/unary/cryo_cell/return_air_for_internal_lifeform() - //assume that the cryo cell has some kind of breath mask or something that - //draws from the cryo tube's environment, instead of the cold internal air. - if(src.loc) - return loc.return_air() - else - return null - -/datum/data/function/proc/reset() - return - -/datum/data/function/proc/r_input(href, href_list, mob/user as mob) - return - -/datum/data/function/proc/display() - return +#define HEAT_CAPACITY_HUMAN 100 //249840 J/K, for a 72 kg person. + +/obj/machinery/atmospherics/unary/cryo_cell + name = "cryo cell" + desc = "Used to cool people down for medical reasons. Totally." + icon = 'icons/obj/cryogenics.dmi' // map only + icon_state = "pod_preview" + density = TRUE + anchored = TRUE + layer = UNDER_JUNK_LAYER + interact_offline = 1 + + var/on = 0 + use_power = USE_POWER_IDLE + idle_power_usage = 20 + active_power_usage = 200 + buckle_lying = FALSE + buckle_dir = SOUTH + clicksound = 'sound/machines/buttonbeep.ogg' + clickvol = 30 + + var/temperature_archived + var/mob/living/carbon/occupant = null + var/obj/item/weapon/reagent_containers/glass/beaker = null + + var/current_heat_capacity = 50 + + var/image/fluid + +/obj/machinery/atmospherics/unary/cryo_cell/New() + ..() + icon = 'icons/obj/cryogenics_split.dmi' + icon_state = "base" + initialize_directions = dir + +/obj/machinery/atmospherics/unary/cryo_cell/Initialize() + . = ..() + var/image/tank = image(icon,"tank") + tank.alpha = 200 + tank.pixel_y = 18 + tank.plane = MOB_PLANE + tank.layer = MOB_LAYER+0.2 //Above fluid + fluid = image(icon, "tube_filler") + fluid.pixel_y = 18 + fluid.alpha = 200 + fluid.plane = MOB_PLANE + fluid.layer = MOB_LAYER+0.1 //Below glass, above mob + add_overlay(tank) + update_icon() + +/obj/machinery/atmospherics/unary/cryo_cell/Destroy() + var/turf/T = src.loc + T.contents += contents + if(beaker) + beaker.forceMove(get_step(loc, SOUTH)) //Beaker is carefully ejected from the wreckage of the cryotube + beaker = null + . = ..() + +/obj/machinery/atmospherics/unary/cryo_cell/process() + ..() + if(!node) + return + if(!on) + return + + if(occupant) + if(occupant.stat != 2) + process_occupant() + + if(air_contents) + temperature_archived = air_contents.temperature + heat_gas_contents() + expel_gas() + + if(abs(temperature_archived-air_contents.temperature) > 1) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) + // note that relaymove will also be called for mobs outside the cell with UI open + if(occupant == user && !user.stat) + go_out() + +/obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user) + tgui_interact(user) + +/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) + if(user == occupant) + return + + if(panel_open) + to_chat(usr, "Close the maintenance panel first.") + return + + tgui_interact(user) + +/obj/machinery/atmospherics/unary/cryo_cell/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Cryo", "Cryo Cell") // 520, 470 + ui.open() + +/obj/machinery/atmospherics/unary/cryo_cell/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/data[0] + data["isOperating"] = on + data["hasOccupant"] = occupant ? TRUE : FALSE + + var/occupantData[0] + if(occupant) + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = occupant.health + occupantData["maxHealth"] = occupant.getMaxHealth() + occupantData["minHealth"] = config.health_threshold_dead + occupantData["bruteLoss"] = occupant.getBruteLoss() + occupantData["oxyLoss"] = occupant.getOxyLoss() + occupantData["toxLoss"] = occupant.getToxLoss() + occupantData["fireLoss"] = occupant.getFireLoss() + occupantData["bodyTemperature"] = occupant.bodytemperature + data["occupant"] = occupantData; + + data["cellTemperature"] = round(air_contents.temperature) + data["cellTemperatureStatus"] = "good" + if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) + data["cellTemperatureStatus"] = "bad" + else if(air_contents.temperature > 225) + data["cellTemperatureStatus"] = "average" + + data["isBeakerLoaded"] = beaker ? TRUE : FALSE + data["beakerLabel"] = null + data["beakerVolume"] = 0 + if(beaker) + data["beakerLabel"] = beaker.label_text ? beaker.label_text : null + if(beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + data["beakerVolume"] += R.volume + + return data + +/obj/machinery/atmospherics/unary/cryo_cell/tgui_act(action, params) + if(..() || usr == occupant) + return TRUE + + . = TRUE + switch(action) + if("switchOn") + on = 1 + update_icon() + if("switchOff") + on = 0 + update_icon() + if("ejectBeaker") + if(beaker) + beaker.loc = get_step(src.loc, SOUTH) + beaker = null + update_icon() + if("ejectOccupant") + if(!occupant || isslime(usr) || ispAI(usr)) + return 0 // don't update UIs attached to this object + go_out() + else + return FALSE + + add_fingerprint(usr) + +/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) + if(istype(G, /obj/item/weapon/reagent_containers/glass)) + if(beaker) + to_chat(user, "A beaker is already loaded into the machine.") + return + + beaker = G + user.drop_item() + G.loc = src + user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") + SStgui.update_uis(src) + update_icon() + else if(istype(G, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/grab = G + if(!ismob(grab.affecting)) + return + if(occupant) + to_chat(user,"\The [src] is already occupied by [occupant].") + if(grab.affecting.has_buckled_mobs()) + to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to it. Remove them first.")) + return + var/mob/M = grab.affecting + qdel(grab) + put_mob(M) + + return + +/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance + if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target)) + return + put_mob(target) + +/obj/machinery/atmospherics/unary/cryo_cell/update_icon() + cut_overlay(fluid) + fluid.color = null + if(on) + if(beaker) + fluid.color = beaker.reagents.get_color() + add_overlay(fluid) + +/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() + if(air_contents.total_moles < 10) + return + if(occupant) + if(occupant.stat >= DEAD) + return + occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity()) + occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise + occupant.set_stat(UNCONSCIOUS) + occupant.dir = SOUTH + if(occupant.bodytemperature < T0C) + occupant.Sleeping(max(5, (1/occupant.bodytemperature)*2000)) + occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000)) + if(air_contents.gas["oxygen"] > 2) + if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) + else + occupant.adjustOxyLoss(-1) + //severe damage should heal waaay slower without proper chemicals + if(occupant.bodytemperature < 225) + if(occupant.getToxLoss()) + occupant.adjustToxLoss(max(-1, -20/occupant.getToxLoss())) + if(occupant.radiation || occupant.accumulated_rads) + occupant.radiation -= 25 + occupant.accumulated_rads -= 25 + var/heal_brute = occupant.getBruteLoss() ? min(1, 20/occupant.getBruteLoss()) : 0 + var/heal_fire = occupant.getFireLoss() ? min(1, 20/occupant.getFireLoss()) : 0 + occupant.heal_organ_damage(heal_brute,heal_fire) + var/has_cryo = occupant.reagents.get_reagent_amount("cryoxadone") >= 1 + var/has_clonexa = occupant.reagents.get_reagent_amount("clonexadone") >= 1 + var/has_cryo_medicine = has_cryo || has_clonexa + if(beaker && !has_cryo_medicine) + beaker.reagents.trans_to_mob(occupant, 1, CHEM_BLOOD, 10) + +/obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents() + if(air_contents.total_moles < 1) + return + var/air_heat_capacity = air_contents.heat_capacity() + var/combined_heat_capacity = current_heat_capacity + air_heat_capacity + if(combined_heat_capacity > 0) + var/combined_energy = T20C*current_heat_capacity + air_heat_capacity*air_contents.temperature + air_contents.temperature = combined_energy/combined_heat_capacity + +/obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas() + if(air_contents.total_moles < 1) + return +// var/datum/gas_mixture/expel_gas = new +// var/remove_amount = air_contents.total_moles()/50 +// expel_gas = air_contents.remove(remove_amount) + + // Just have the gas disappear to nowhere. + //expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed + //loc.assume_air(expel_gas) + +/obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() + if(!(occupant)) + return + //for(var/obj/O in src) + // O.loc = src.loc + if(occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + vis_contents -= occupant + occupant.pixel_x = occupant.default_pixel_x + occupant.pixel_y = occupant.default_pixel_y + occupant.loc = get_step(src.loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem. + if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected + occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug. + unbuckle_mob(occupant, force = TRUE) + occupant.cozyloop.stop() // CHOMPStation Add: Cozy Music + occupant = null + current_heat_capacity = initial(current_heat_capacity) + update_use_power(USE_POWER_IDLE) + SStgui.update_uis(src) + return + +/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) + if(stat & (NOPOWER|BROKEN)) + to_chat(usr, "The cryo cell is not functioning.") + return + if(!istype(M)) + to_chat(usr, "The cryo cell cannot handle such a lifeform!") + return + if(occupant) + to_chat(usr, "The cryo cell is already occupied!") + return + if(M.abiotic()) + to_chat(usr, "Subject may not have abiotic items on.") + return + if(!node) + to_chat(usr, "The cell is not correctly connected to its pipe network!") + return + if(M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.stop_pulling() + M.loc = src + M.ExtinguishMob() + if(M.health > -100 && (M.health < 0 || M.sleeping)) + to_chat(M, "You feel a cold liquid surround you. Your skin starts to freeze up.") + occupant = M + occupant.cozyloop.start() // CHOMPStation Add: Cozy Music + buckle_mob(occupant, forced = TRUE, check_loc = FALSE) + vis_contents |= occupant + occupant.pixel_y += 19 + current_heat_capacity = HEAT_CAPACITY_HUMAN + update_use_power(USE_POWER_ACTIVE) +// M.metabslow = 1 + add_fingerprint(usr) + update_icon() + SStgui.update_uis(src) + return 1 + +/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject() + set name = "Eject occupant" + set category = "Object" + set src in oview(1) + if(usr == occupant)//If the user is inside the tube... + if(usr.stat == 2)//and he's not dead.... + return + to_chat(usr, "Release sequence activated. This will take two minutes.") + sleep(1200) + if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already + return + go_out()//and release him from the eternal prison. + else + if(usr.stat != 0) + return + go_out() + add_fingerprint(usr) + return + +/obj/machinery/atmospherics/unary/cryo_cell/verb/move_inside() + set name = "Move Inside" + set category = "Object" + set src in oview(1) + if(isliving(usr)) + var/mob/living/L = usr + if(L.has_buckled_mobs()) + to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first.")) + return + if(L.stat != CONSCIOUS) + return + put_mob(L) + +/atom/proc/return_air_for_internal_lifeform(var/mob/living/lifeform) + return return_air() + +/obj/machinery/atmospherics/unary/cryo_cell/return_air_for_internal_lifeform() + //assume that the cryo cell has some kind of breath mask or something that + //draws from the cryo tube's environment, instead of the cold internal air. + if(src.loc) + return loc.return_air() + else + return null + +/datum/data/function/proc/reset() + return + +/datum/data/function/proc/r_input(href, href_list, mob/user as mob) + return + +/datum/data/function/proc/display() + return diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 63beb67797..54c1b38ca0 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -1,148 +1,148 @@ -/* -CONTAINS: -Deployable items -*/ - -/obj/machinery/deployable - name = "deployable" - desc = "deployable" - icon = 'icons/obj/objects.dmi' - req_access = list(access_security)//I'm changing this until these are properly tested./N - -/obj/machinery/deployable/barrier - name = "deployable barrier" - desc = "A deployable barrier. Swipe your ID card to lock/unlock it." - icon = 'icons/obj/objects.dmi' - anchored = FALSE - density = TRUE - icon_state = "barrier0" - var/health = 100.0 - var/maxhealth = 100.0 - var/locked = 0.0 -// req_access = list(access_maint_tunnels) - -/obj/machinery/deployable/barrier/New() - ..() - - icon_state = "barrier[locked]" - -/obj/machinery/deployable/barrier/attackby(obj/item/weapon/W as obj, mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(istype(W, /obj/item/weapon/card/id/)) - if(allowed(user)) - if (emagged < 2.0) - locked = !locked - anchored = !anchored - icon_state = "barrier[locked]" - if((locked == 1.0) && (emagged < 2.0)) - to_chat(user, "Barrier lock toggled on.") - return - else if((locked == 0.0) && (emagged < 2.0)) - to_chat(user, "Barrier lock toggled off.") - return - else - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - visible_message("BZZzZZzZZzZT") - return - return - else if(W.has_tool_quality(TOOL_WRENCH)) - if(health < maxhealth) - health = maxhealth - emagged = 0 - req_access = list(access_security) - visible_message("[user] repairs \the [src]!") - return - else if(emagged > 0) - emagged = 0 - req_access = list(access_security) - visible_message("[user] repairs \the [src]!") - return - return - else - switch(W.damtype) - if("fire") - health -= W.force * 0.75 - if("brute") - health -= W.force * 0.5 - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - CheckHealth() - ..() - -/obj/machinery/deployable/barrier/proc/CheckHealth() - if(health <= 0) - explode() - return - -/obj/machinery/deployable/barrier/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - user.do_attack_animation(src) - health -= damage - CheckHealth() - return - -/obj/machinery/deployable/barrier/take_damage(var/damage) - health -= damage - CheckHealth() - return - -/obj/machinery/deployable/barrier/ex_act(severity) - switch(severity) - if(1.0) - explode() - return - if(2.0) - health -= 25 - CheckHealth() - return - -/obj/machinery/deployable/barrier/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return - if(prob(50/severity)) - locked = !locked - anchored = !anchored - icon_state = "barrier[locked]" - -/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. - if(istype(mover) && mover.checkpass(PASSTABLE)) - return TRUE - return FALSE - -/obj/machinery/deployable/barrier/proc/explode() - - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - -/* var/obj/item/stack/rods/ =*/ - new /obj/item/stack/rods(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - explosion(src.loc,-1,-1,0) - if(src) - qdel(src) - -/obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user) - if(emagged == 0) - emagged = 1 - LAZYCLEARLIST(req_access) - LAZYCLEARLIST(req_one_access) - to_chat(user, "You break the ID authentication lock on \the [src].") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - visible_message("BZZzZZzZZzZT") - return 1 - else if(emagged == 1) - emagged = 2 - to_chat(user, "You short out the anchoring mechanism on \the [src].") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - visible_message("BZZzZZzZZzZT") +/* +CONTAINS: +Deployable items +*/ + +/obj/machinery/deployable + name = "deployable" + desc = "deployable" + icon = 'icons/obj/objects.dmi' + req_access = list(access_security)//I'm changing this until these are properly tested./N + +/obj/machinery/deployable/barrier + name = "deployable barrier" + desc = "A deployable barrier. Swipe your ID card to lock/unlock it." + icon = 'icons/obj/objects.dmi' + anchored = FALSE + density = TRUE + icon_state = "barrier0" + var/health = 100.0 + var/maxhealth = 100.0 + var/locked = 0.0 +// req_access = list(access_maint_tunnels) + +/obj/machinery/deployable/barrier/New() + ..() + + icon_state = "barrier[locked]" + +/obj/machinery/deployable/barrier/attackby(obj/item/weapon/W as obj, mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(istype(W, /obj/item/weapon/card/id/)) + if(allowed(user)) + if (emagged < 2.0) + locked = !locked + anchored = !anchored + icon_state = "barrier[locked]" + if((locked == 1.0) && (emagged < 2.0)) + to_chat(user, "Barrier lock toggled on.") + return + else if((locked == 0.0) && (emagged < 2.0)) + to_chat(user, "Barrier lock toggled off.") + return + else + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + visible_message("BZZzZZzZZzZT") + return + return + else if(W.has_tool_quality(TOOL_WRENCH)) + if(health < maxhealth) + health = maxhealth + emagged = 0 + req_access = list(access_security) + visible_message("[user] repairs \the [src]!") + return + else if(emagged > 0) + emagged = 0 + req_access = list(access_security) + visible_message("[user] repairs \the [src]!") + return + return + else + switch(W.damtype) + if("fire") + health -= W.force * 0.75 + if("brute") + health -= W.force * 0.5 + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + CheckHealth() + ..() + +/obj/machinery/deployable/barrier/proc/CheckHealth() + if(health <= 0) + explode() + return + +/obj/machinery/deployable/barrier/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + user.do_attack_animation(src) + health -= damage + CheckHealth() + return + +/obj/machinery/deployable/barrier/take_damage(var/damage) + health -= damage + CheckHealth() + return + +/obj/machinery/deployable/barrier/ex_act(severity) + switch(severity) + if(1.0) + explode() + return + if(2.0) + health -= 25 + CheckHealth() + return + +/obj/machinery/deployable/barrier/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(prob(50/severity)) + locked = !locked + anchored = !anchored + icon_state = "barrier[locked]" + +/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + return FALSE + +/obj/machinery/deployable/barrier/proc/explode() + + visible_message("[src] blows apart!") + var/turf/Tsec = get_turf(src) + +/* var/obj/item/stack/rods/ =*/ + new /obj/item/stack/rods(Tsec) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + + explosion(src.loc,-1,-1,0) + if(src) + qdel(src) + +/obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user) + if(emagged == 0) + emagged = 1 + LAZYCLEARLIST(req_access) + LAZYCLEARLIST(req_one_access) + to_chat(user, "You break the ID authentication lock on \the [src].") + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + visible_message("BZZzZZzZZzZT") + return 1 + else if(emagged == 1) + emagged = 2 + to_chat(user, "You short out the anchoring mechanism on \the [src].") + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + visible_message("BZZzZZzZZzZT") return 1 \ No newline at end of file diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 6a66f568cd..6a396bf4d5 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -1,258 +1,258 @@ -/obj/machinery/button/remote - name = "remote object control" - desc = "It controls objects, remotely." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doorctrl0" - power_channel = ENVIRON - layer = ABOVE_WINDOW_LAYER - var/desiredstate = 0 - var/exposedwires = 0 - var/wires = 3 - /* - Bitflag, 1=checkID - 2=Network Access - */ - - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 4 - -/obj/machinery/button/remote/attack_ai(mob/user as mob) - if(wires & 2) - return attack_hand(user) - else - to_chat(user, "Error, no route to host.") - -/obj/machinery/button/remote/attackby(obj/item/weapon/W, mob/user as mob) - return attack_hand(user) - -/obj/machinery/button/remote/emag_act(var/remaining_charges, var/mob/user) - if(LAZYLEN(req_access) || LAZYLEN(req_one_access)) - LAZYCLEARLIST(req_access) - LAZYCLEARLIST(req_one_access) - playsound(src, "sparks", 100, 1) - return 1 - -/obj/machinery/button/remote/attack_hand(mob/user as mob) - if(..()) - return - - add_fingerprint(user) - if(stat & (NOPOWER|BROKEN)) - return - - if(!allowed(user) && (wires & 1)) - to_chat(user, "Access Denied") - flick("doorctrl-denied",src) - return - - use_power(5) - icon_state = "doorctrl1" - desiredstate = !desiredstate - trigger(user) - spawn(15) - update_icon() - -/obj/machinery/button/remote/proc/trigger() - return - -/obj/machinery/button/remote/power_change() - ..() - update_icon() - -/obj/machinery/button/remote/update_icon() - if(stat & NOPOWER) - icon_state = "doorctrl-p" - else - icon_state = "doorctrl0" - -/* - Airlock remote control -*/ - -// Bitmasks for door switches. -#define OPEN 0x1 -#define IDSCAN 0x2 -#define BOLTS 0x4 -#define SHOCK 0x8 -#define SAFE 0x10 - -/obj/machinery/button/remote/airlock - icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit - name = "remote door-control" - desc = "It controls doors, remotely." - - var/specialfunctions = 1 - /* - Bitflag, 1= open - 2= idscan, - 4= bolts - 8= shock - 16= door safties - */ - -/obj/machinery/button/remote/airlock/trigger() - for(var/obj/machinery/door/airlock/D in machines) - if(D.id_tag == id) - if(specialfunctions & OPEN) - if(D.density) - spawn(0) - D.open() - return - else - spawn(0) - D.close() - return - if(desiredstate == 1) - if(specialfunctions & IDSCAN) - D.set_idscan(0) - if(specialfunctions & BOLTS) - D.lock() - if(specialfunctions & SHOCK) - D.electrify(-1) - if(specialfunctions & SAFE) - D.set_safeties(0) - else - if(specialfunctions & IDSCAN) - D.set_idscan(1) - if(specialfunctions & BOLTS) - D.unlock() - if(specialfunctions & SHOCK) - D.electrify(0) - if(specialfunctions & SAFE) - D.set_safeties(1) - -#undef OPEN -#undef IDSCAN -#undef BOLTS -#undef SHOCK -#undef SAFE - -/* - Blast door remote control -*/ -/obj/machinery/button/remote/blast_door - icon = 'icons/obj/stationobjs_vr.dmi' - name = "remote blast door-control" - desc = "It controls blast doors, remotely." - -/obj/machinery/button/remote/blast_door/trigger() - for(var/obj/machinery/door/blast/M in machines) - if(M.id == id) - if(M.density) - spawn(0) - M.open() - return - else - spawn(0) - M.close() - return - -//CHOMP Add start -/obj/machinery/button/remote/blast_door/bear - name = "stuffed bear" - icon = 'icons/obj/stationobjs_vr.dmi' - icon_state = "stuffedbear" - desc = "A stuffed and mounted bear. Quite a statement piece, but holds a curious glare." - density = 1 - -/obj/machinery/button/remote/blast_door/bear/attack_hand(mob/user as mob) //code to stop bear ever reverting to standard button sprites - if(..()) - return - - add_fingerprint(user) - if(stat & (NOPOWER|BROKEN)) - return - - if(!allowed(user) && (wires & 1)) - to_chat(user, "Access Denied") - flick("doorctrl-denied",src) - return - - use_power(5) - icon_state = "stuffedbear" - desiredstate = !desiredstate - trigger(user) - spawn(15) - update_icon() - -/obj/machinery/button/remote/blast_door/bear/update_icon() - if(stat & NOPOWER) - icon_state = "stuffedbear" - else - icon_state = "stuffedbear" -//CHOMP Add end - -/* - Emitter remote control -*/ -/obj/machinery/button/remote/emitter - name = "remote emitter control" - desc = "It controls emitters, remotely." - -/obj/machinery/button/remote/emitter/trigger(mob/user as mob) - for(var/obj/machinery/power/emitter/E in machines) - if(E.id == id) - spawn(0) - E.activate(user) - return - -/* - Mass driver remote control -*/ -/obj/machinery/button/remote/driver - name = "mass driver button" - desc = "A remote control switch for a mass driver." - icon = 'icons/obj/objects.dmi' - icon_state = "launcherbtt" - -/obj/machinery/button/remote/driver/trigger(mob/user as mob) - active = 1 - update_icon() - - for(var/obj/machinery/door/blast/M in machines) - if(M.id == id) - spawn(0) - M.open() - return - - sleep(20) - - for(var/obj/machinery/mass_driver/M in machines) - if(M.id == id) - M.drive() - - sleep(50) - - for(var/obj/machinery/door/blast/M in machines) - if(M.id == id) - spawn(0) - M.close() - return - - icon_state = "launcherbtt" - update_icon() - - return - -/obj/machinery/button/remote/driver/update_icon() - if(!active || (stat & NOPOWER)) - icon_state = "launcherbtt" - else - icon_state = "launcheract" - -/* - Shieldgen remote control -*/ -/obj/machinery/button/remote/shields - name = "remote shield control" - desc = "It controls shields, remotely." - icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit - -/obj/machinery/button/remote/shields/trigger(var/mob/user) - for(var/obj/machinery/shield_gen/SG in machines) - if(SG.id == id) - spawn(0) - if(SG?.anchored) - SG.toggle() +/obj/machinery/button/remote + name = "remote object control" + desc = "It controls objects, remotely." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "doorctrl0" + power_channel = ENVIRON + layer = ABOVE_WINDOW_LAYER + var/desiredstate = 0 + var/exposedwires = 0 + var/wires = 3 + /* + Bitflag, 1=checkID + 2=Network Access + */ + + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 4 + +/obj/machinery/button/remote/attack_ai(mob/user as mob) + if(wires & 2) + return attack_hand(user) + else + to_chat(user, "Error, no route to host.") + +/obj/machinery/button/remote/attackby(obj/item/weapon/W, mob/user as mob) + return attack_hand(user) + +/obj/machinery/button/remote/emag_act(var/remaining_charges, var/mob/user) + if(LAZYLEN(req_access) || LAZYLEN(req_one_access)) + LAZYCLEARLIST(req_access) + LAZYCLEARLIST(req_one_access) + playsound(src, "sparks", 100, 1) + return 1 + +/obj/machinery/button/remote/attack_hand(mob/user as mob) + if(..()) + return + + add_fingerprint(user) + if(stat & (NOPOWER|BROKEN)) + return + + if(!allowed(user) && (wires & 1)) + to_chat(user, "Access Denied") + flick("doorctrl-denied",src) + return + + use_power(5) + icon_state = "doorctrl1" + desiredstate = !desiredstate + trigger(user) + spawn(15) + update_icon() + +/obj/machinery/button/remote/proc/trigger() + return + +/obj/machinery/button/remote/power_change() + ..() + update_icon() + +/obj/machinery/button/remote/update_icon() + if(stat & NOPOWER) + icon_state = "doorctrl-p" + else + icon_state = "doorctrl0" + +/* + Airlock remote control +*/ + +// Bitmasks for door switches. +#define OPEN 0x1 +#define IDSCAN 0x2 +#define BOLTS 0x4 +#define SHOCK 0x8 +#define SAFE 0x10 + +/obj/machinery/button/remote/airlock + icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit + name = "remote door-control" + desc = "It controls doors, remotely." + + var/specialfunctions = 1 + /* + Bitflag, 1= open + 2= idscan, + 4= bolts + 8= shock + 16= door safties + */ + +/obj/machinery/button/remote/airlock/trigger() + for(var/obj/machinery/door/airlock/D in machines) + if(D.id_tag == id) + if(specialfunctions & OPEN) + if(D.density) + spawn(0) + D.open() + return + else + spawn(0) + D.close() + return + if(desiredstate == 1) + if(specialfunctions & IDSCAN) + D.set_idscan(0) + if(specialfunctions & BOLTS) + D.lock() + if(specialfunctions & SHOCK) + D.electrify(-1) + if(specialfunctions & SAFE) + D.set_safeties(0) + else + if(specialfunctions & IDSCAN) + D.set_idscan(1) + if(specialfunctions & BOLTS) + D.unlock() + if(specialfunctions & SHOCK) + D.electrify(0) + if(specialfunctions & SAFE) + D.set_safeties(1) + +#undef OPEN +#undef IDSCAN +#undef BOLTS +#undef SHOCK +#undef SAFE + +/* + Blast door remote control +*/ +/obj/machinery/button/remote/blast_door + icon = 'icons/obj/stationobjs_vr.dmi' + name = "remote blast door-control" + desc = "It controls blast doors, remotely." + +/obj/machinery/button/remote/blast_door/trigger() + for(var/obj/machinery/door/blast/M in machines) + if(M.id == id) + if(M.density) + spawn(0) + M.open() + return + else + spawn(0) + M.close() + return + +//CHOMP Add start +/obj/machinery/button/remote/blast_door/bear + name = "stuffed bear" + icon = 'icons/obj/stationobjs_vr.dmi' + icon_state = "stuffedbear" + desc = "A stuffed and mounted bear. Quite a statement piece, but holds a curious glare." + density = 1 + +/obj/machinery/button/remote/blast_door/bear/attack_hand(mob/user as mob) //code to stop bear ever reverting to standard button sprites + if(..()) + return + + add_fingerprint(user) + if(stat & (NOPOWER|BROKEN)) + return + + if(!allowed(user) && (wires & 1)) + to_chat(user, "Access Denied") + flick("doorctrl-denied",src) + return + + use_power(5) + icon_state = "stuffedbear" + desiredstate = !desiredstate + trigger(user) + spawn(15) + update_icon() + +/obj/machinery/button/remote/blast_door/bear/update_icon() + if(stat & NOPOWER) + icon_state = "stuffedbear" + else + icon_state = "stuffedbear" +//CHOMP Add end + +/* + Emitter remote control +*/ +/obj/machinery/button/remote/emitter + name = "remote emitter control" + desc = "It controls emitters, remotely." + +/obj/machinery/button/remote/emitter/trigger(mob/user as mob) + for(var/obj/machinery/power/emitter/E in machines) + if(E.id == id) + spawn(0) + E.activate(user) + return + +/* + Mass driver remote control +*/ +/obj/machinery/button/remote/driver + name = "mass driver button" + desc = "A remote control switch for a mass driver." + icon = 'icons/obj/objects.dmi' + icon_state = "launcherbtt" + +/obj/machinery/button/remote/driver/trigger(mob/user as mob) + active = 1 + update_icon() + + for(var/obj/machinery/door/blast/M in machines) + if(M.id == id) + spawn(0) + M.open() + return + + sleep(20) + + for(var/obj/machinery/mass_driver/M in machines) + if(M.id == id) + M.drive() + + sleep(50) + + for(var/obj/machinery/door/blast/M in machines) + if(M.id == id) + spawn(0) + M.close() + return + + icon_state = "launcherbtt" + update_icon() + + return + +/obj/machinery/button/remote/driver/update_icon() + if(!active || (stat & NOPOWER)) + icon_state = "launcherbtt" + else + icon_state = "launcheract" + +/* + Shieldgen remote control +*/ +/obj/machinery/button/remote/shields + name = "remote shield control" + desc = "It controls shields, remotely." + icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit + +/obj/machinery/button/remote/shields/trigger(var/mob/user) + for(var/obj/machinery/shield_gen/SG in machines) + if(SG.id == id) + spawn(0) + if(SG?.anchored) + SG.toggle() diff --git a/code/game/machinery/doors/airlock_ch.dm b/code/game/machinery/doors/airlock_ch.dm index e50062cd00..da661f4659 100644 --- a/code/game/machinery/doors/airlock_ch.dm +++ b/code/game/machinery/doors/airlock_ch.dm @@ -1,6 +1,6 @@ -/obj/machinery/door/airlock/scp - name = "SCP Access" - icon = 'icons/obj/doors/SCPdoor.dmi' - //req_one_access = list(access_maint_tunnels) - open_sound_powered = 'sound/machines/scp1o.ogg' +/obj/machinery/door/airlock/scp + name = "SCP Access" + icon = 'icons/obj/doors/SCPdoor.dmi' + //req_one_access = list(access_maint_tunnels) + open_sound_powered = 'sound/machines/scp1o.ogg' close_sound_powered = 'sound/machines/scp1c.ogg' \ No newline at end of file diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 3d401fa0fb..6aac668b50 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -1,153 +1,153 @@ -/obj/item/weapon/airlock_electronics - name = "airlock electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - w_class = ITEMSIZE_SMALL //It should be tiny! -Agouri - - matter = list(MAT_STEEL = 50,MAT_GLASS = 50) - - req_one_access = list(access_engine, access_talon) // Access to unlock the device, ignored if emagged //VOREStation Edit - Add talon - var/list/apply_any_access = list(access_engine) // Can apply any access, not just their own - - var/secure = 0 //if set, then wires will be randomized and bolts will drop if the door is broken - var/list/conf_access = null - var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access - var/last_configurator = null - var/locked = 1 - var/emagged = 0 - -/obj/item/weapon/airlock_electronics/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = 1 - to_chat(user, "You remove the access restrictions on [src]!") - return 1 - -/obj/item/weapon/airlock_electronics/attack_self(mob/user as mob) - if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) - return ..(user) - - var/t1 = text("Access control
    \n") - - if (last_configurator) - t1 += "Operator: [last_configurator]
    " - - if (locked) - t1 += "Unlock Interface
    " - else - t1 += "Lock Interface
    " - - t1 += "Access requirement is set to " - t1 += one_access ? "ONE
    " : "ALL
    " - - t1 += conf_access == null ? "All
    " : "All
    " - - t1 += "
    " - - var/list/accesses = get_available_accesses(user) - for (var/acc in accesses) - var/aname = get_access_desc(acc) - - if (!conf_access || !conf_access.len || !(acc in conf_access)) - t1 += "[aname]
    " - else if(one_access) - t1 += "[aname]
    " - else - t1 += "[aname]
    " - - t1 += text("

    Close

    \n", src) - - user << browse(t1, "window=airlock_electronics") - onclose(user, "airlock") - -/obj/item/weapon/airlock_electronics/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon))) - return - if (href_list["close"]) - usr << browse(null, "window=airlock_electronics") - return - - if (href_list["login"]) - if(emagged) - src.locked = 0 - src.last_configurator = usr.name - else if(issilicon(usr)) - src.locked = 0 - src.last_configurator = usr.name - else if(isliving(usr)) - var/obj/item/weapon/card/id/id - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - id = H.get_idcard() - // In their ID slot? - if(id && src.check_access(id)) - src.locked = 0 - src.last_configurator = id.registered_name - // Still locked, human handling didn't do it! - if(locked) - var/obj/item/I = usr.get_active_hand() - id = I?.GetID() - if(id && src.check_access(id)) - src.locked = 0 - src.last_configurator = id.registered_name - - if (locked) - return - - if (href_list["logout"]) - locked = 1 - - if (href_list["one_access"]) - one_access = !one_access - - if (href_list["access"]) - toggle_access(href_list["access"]) - - attack_self(usr) - -/obj/item/weapon/airlock_electronics/proc/toggle_access(var/acc) - if (acc == "all") - conf_access = null - 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/weapon/airlock_electronics/proc/get_available_accesses(var/mob/user) - var/obj/item/weapon/card/id/id - if(ishuman(user)) - var/mob/living/carbon/human/H = user - id = H.get_idcard() - else if(issilicon(user)) - var/mob/living/silicon/R = user - id = R.idcard - - // Nothing - if(!id || !id.access) - return list() - - // Has engineer access, can put any access - else if(has_access(null, apply_any_access, id.access)) - return get_all_station_access() - - // Not an engineer, can only pick your own accesses to program - else - return id.access - -/obj/item/weapon/airlock_electronics/secure - name = "secure airlock electronics" - desc = "designed to be somewhat more resistant to hacking than standard electronics." - origin_tech = list(TECH_DATA = 2) - secure = 1 - -/obj/item/weapon/airlock_electronics/secure/emag_act(var/remaining_charges, var/mob/user) - to_chat(user, "You don't appear to be able to bypass this hardened device!") - return -1 +/obj/item/weapon/airlock_electronics + name = "airlock electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics" + w_class = ITEMSIZE_SMALL //It should be tiny! -Agouri + + matter = list(MAT_STEEL = 50,MAT_GLASS = 50) + + req_one_access = list(access_engine, access_talon) // Access to unlock the device, ignored if emagged //VOREStation Edit - Add talon + var/list/apply_any_access = list(access_engine) // Can apply any access, not just their own + + var/secure = 0 //if set, then wires will be randomized and bolts will drop if the door is broken + var/list/conf_access = null + var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access + var/last_configurator = null + var/locked = 1 + var/emagged = 0 + +/obj/item/weapon/airlock_electronics/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + emagged = 1 + to_chat(user, "You remove the access restrictions on [src]!") + return 1 + +/obj/item/weapon/airlock_electronics/attack_self(mob/user as mob) + if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) + return ..(user) + + var/t1 = text("Access control
    \n") + + if (last_configurator) + t1 += "Operator: [last_configurator]
    " + + if (locked) + t1 += "Unlock Interface
    " + else + t1 += "Lock Interface
    " + + t1 += "Access requirement is set to " + t1 += one_access ? "ONE
    " : "ALL
    " + + t1 += conf_access == null ? "All
    " : "All
    " + + t1 += "
    " + + var/list/accesses = get_available_accesses(user) + for (var/acc in accesses) + var/aname = get_access_desc(acc) + + if (!conf_access || !conf_access.len || !(acc in conf_access)) + t1 += "[aname]
    " + else if(one_access) + t1 += "[aname]
    " + else + t1 += "[aname]
    " + + t1 += text("

    Close

    \n", src) + + user << browse(t1, "window=airlock_electronics") + onclose(user, "airlock") + +/obj/item/weapon/airlock_electronics/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon))) + return + if (href_list["close"]) + usr << browse(null, "window=airlock_electronics") + return + + if (href_list["login"]) + if(emagged) + src.locked = 0 + src.last_configurator = usr.name + else if(issilicon(usr)) + src.locked = 0 + src.last_configurator = usr.name + else if(isliving(usr)) + var/obj/item/weapon/card/id/id + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + id = H.get_idcard() + // In their ID slot? + if(id && src.check_access(id)) + src.locked = 0 + src.last_configurator = id.registered_name + // Still locked, human handling didn't do it! + if(locked) + var/obj/item/I = usr.get_active_hand() + id = I?.GetID() + if(id && src.check_access(id)) + src.locked = 0 + src.last_configurator = id.registered_name + + if (locked) + return + + if (href_list["logout"]) + locked = 1 + + if (href_list["one_access"]) + one_access = !one_access + + if (href_list["access"]) + toggle_access(href_list["access"]) + + attack_self(usr) + +/obj/item/weapon/airlock_electronics/proc/toggle_access(var/acc) + if (acc == "all") + conf_access = null + 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/weapon/airlock_electronics/proc/get_available_accesses(var/mob/user) + var/obj/item/weapon/card/id/id + if(ishuman(user)) + var/mob/living/carbon/human/H = user + id = H.get_idcard() + else if(issilicon(user)) + var/mob/living/silicon/R = user + id = R.idcard + + // Nothing + if(!id || !id.access) + return list() + + // Has engineer access, can put any access + else if(has_access(null, apply_any_access, id.access)) + return get_all_station_access() + + // Not an engineer, can only pick your own accesses to program + else + return id.access + +/obj/item/weapon/airlock_electronics/secure + name = "secure airlock electronics" + desc = "designed to be somewhat more resistant to hacking than standard electronics." + origin_tech = list(TECH_DATA = 2) + secure = 1 + +/obj/item/weapon/airlock_electronics/secure/emag_act(var/remaining_charges, var/mob/user) + to_chat(user, "You don't appear to be able to bypass this hardened device!") + return -1 diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index f7dda48feb..f8d0ea6b57 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -1,45 +1,45 @@ -/obj/machinery/door/airlock/alarmlock - - name = "Glass Alarm Airlock" - icon = 'icons/obj/doors/Doorglass.dmi' - opacity = 0 - glass = 1 - - var/datum/radio_frequency/air_connection - var/air_frequency = 1437 - autoclose = 0 - -/obj/machinery/door/airlock/alarmlock/New() - ..() - air_connection = new - -/obj/machinery/door/airlock/alarmlock/Destroy() - if(radio_controller) - radio_controller.remove_object(src,air_frequency) - ..() - -/obj/machinery/door/airlock/alarmlock/Initialize() - . = ..() - radio_controller.remove_object(src, air_frequency) - air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) - 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"] - - var/area/our_area = get_area(src) - - if(alarm_area == our_area.name) - switch(alert) - if("severe") - autoclose = 1 - close() - if("minor", "clear") - autoclose = 0 - open() +/obj/machinery/door/airlock/alarmlock + + name = "Glass Alarm Airlock" + icon = 'icons/obj/doors/Doorglass.dmi' + opacity = 0 + glass = 1 + + var/datum/radio_frequency/air_connection + var/air_frequency = 1437 + autoclose = 0 + +/obj/machinery/door/airlock/alarmlock/New() + ..() + air_connection = new + +/obj/machinery/door/airlock/alarmlock/Destroy() + if(radio_controller) + radio_controller.remove_object(src,air_frequency) + ..() + +/obj/machinery/door/airlock/alarmlock/Initialize() + . = ..() + radio_controller.remove_object(src, air_frequency) + air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) + 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"] + + var/area/our_area = get_area(src) + + if(alarm_area == our_area.name) + switch(alert) + if("severe") + autoclose = 1 + close() + if("minor", "clear") + autoclose = 0 + open() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 0a3e3973b7..f1aa9051cc 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -1,294 +1,294 @@ -#define CHARS_PER_LINE 5 -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Small Fonts" -#define MAX_TIMER 36000 - -#define PRESET_SHORT 1 MINUTES -#define PRESET_MEDIUM 5 MINUTES -#define PRESET_LONG 10 MINUTES - -/////////////////////////////////////////////////////////////////////////////////////////////// -// 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" - layer = ABOVE_WINDOW_LAYER - desc = "A remote control for a door." - req_access = list(access_brig) - anchored = TRUE // can't pick it up - density = FALSE // can walk through it. - var/id = null // id of door it controls. - 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() - - - maptext_height = 26 - maptext_width = 32 - -/obj/machinery/door_timer/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/door_timer/LateInitialize() - . = ..() - - for(var/obj/machinery/door/window/brigdoor/M in machines) - if(M.id == id) - LAZYADD(targets,M) - - for(var/obj/machinery/flasher/F in machines) - if(F.id == id) - LAZYADD(targets,F) - - for(var/obj/structure/closet/secure_closet/brig/C in GLOB.all_brig_closets) - if(C.id == id) - LAZYADD(targets,C) - - if(!LAZYLEN(targets)) - stat |= BROKEN - update_icon() - -/obj/machinery/door_timer/Destroy() - LAZYCLEARLIST(targets) - return ..() - -//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() - - -// has the door power situation changed, if so update icon. -/obj/machinery/door_timer/power_change() - ..() - 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. - -// Closes and locks doors, power check -/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.icon_state = "closed_locked" - return 1 - -/// Opens and unlocks doors, power check -/obj/machinery/door_timer/proc/timer_end(forced = FALSE) - if(stat & (NOPOWER|BROKEN)) - return 0 - - 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.icon_state = "closed_unlocked" - - 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 - if(timer_duration && activation_time && timing) // Setting it while active will reset the activation time - activation_time = world.time - -/obj/machinery/door_timer/attack_ai(mob/user) - return src.attack_hand(user) - -/obj/machinery/door_timer/attack_hand(mob/user) - if(..()) - return TRUE - tgui_interact(user) - -/obj/machinery/door_timer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "BrigTimer", name) - ui.open() - -/obj/machinery/door_timer/tgui_data() - var/list/data = list() - data["time_left"] = time_left() - data["max_time_left"] = MAX_TIMER - data["timing"] = timing - data["flash_found"] = FALSE - data["flash_charging"] = FALSE - data["preset_short"] = PRESET_SHORT - data["preset_medium"] = PRESET_MEDIUM - data["preset_long"] = PRESET_LONG - for(var/obj/machinery/flasher/F in targets) - data["flash_found"] = TRUE - if(F.last_flash && (F.last_flash + 150) > world.time) - data["flash_charging"] = TRUE - break - return data - -/obj/machinery/door_timer/tgui_act(action, params) - if(..()) - return - . = TRUE - - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return FALSE - - switch(action) - if("time") - var/real_new_time = 0 - var/new_time = params["time"] - var/list/L = splittext(new_time, ":") - if(LAZYLEN(L)) - for(var/i in 1 to LAZYLEN(L)) - real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) - else - real_new_time = text2num(new_time) - if(real_new_time) - set_timer(real_new_time * 10) - 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(timer_duration + preset_time) - if(timing) - activation_time = world.time - else - . = FALSE - - -//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/timeleft = time_left(seconds = TRUE) - var/disp2 = "[add_leading(num2text((timeleft / 60) % 60), 2, "0")]:[add_leading(num2text(timeleft % 60), 2, "0")]" - 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/cell_1 - name = "Cell 1" - id = "Cell 1" - -/obj/machinery/door_timer/cell_2 - name = "Cell 2" - id = "Cell 2" - -/obj/machinery/door_timer/cell_3 - name = "Cell 3" - id = "Cell 3" - -/obj/machinery/door_timer/cell_4 - name = "Cell 4" - id = "Cell 4" - -/obj/machinery/door_timer/cell_5 - name = "Cell 5" - id = "Cell 5" - -/obj/machinery/door_timer/cell_6 - name = "Cell 6" - id = "Cell 6" - -/obj/machinery/door_timer/tactical_pet_storage //Vorestation Addition - name = "Tactical Pet Storage" - id = "tactical_pet_storage" - desc = "Opens and Closes on a timer. This one seals away a tactical boost in morale." - -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef CHARS_PER_LINE +#define CHARS_PER_LINE 5 +#define FONT_SIZE "5pt" +#define FONT_COLOR "#09f" +#define FONT_STYLE "Small Fonts" +#define MAX_TIMER 36000 + +#define PRESET_SHORT 1 MINUTES +#define PRESET_MEDIUM 5 MINUTES +#define PRESET_LONG 10 MINUTES + +/////////////////////////////////////////////////////////////////////////////////////////////// +// 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" + layer = ABOVE_WINDOW_LAYER + desc = "A remote control for a door." + req_access = list(access_brig) + anchored = TRUE // can't pick it up + density = FALSE // can walk through it. + var/id = null // id of door it controls. + 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() + + + maptext_height = 26 + maptext_width = 32 + +/obj/machinery/door_timer/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/door_timer/LateInitialize() + . = ..() + + for(var/obj/machinery/door/window/brigdoor/M in machines) + if(M.id == id) + LAZYADD(targets,M) + + for(var/obj/machinery/flasher/F in machines) + if(F.id == id) + LAZYADD(targets,F) + + for(var/obj/structure/closet/secure_closet/brig/C in GLOB.all_brig_closets) + if(C.id == id) + LAZYADD(targets,C) + + if(!LAZYLEN(targets)) + stat |= BROKEN + update_icon() + +/obj/machinery/door_timer/Destroy() + LAZYCLEARLIST(targets) + return ..() + +//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() + + +// has the door power situation changed, if so update icon. +/obj/machinery/door_timer/power_change() + ..() + 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. + +// Closes and locks doors, power check +/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.icon_state = "closed_locked" + return 1 + +/// Opens and unlocks doors, power check +/obj/machinery/door_timer/proc/timer_end(forced = FALSE) + if(stat & (NOPOWER|BROKEN)) + return 0 + + 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.icon_state = "closed_unlocked" + + 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 + if(timer_duration && activation_time && timing) // Setting it while active will reset the activation time + activation_time = world.time + +/obj/machinery/door_timer/attack_ai(mob/user) + return src.attack_hand(user) + +/obj/machinery/door_timer/attack_hand(mob/user) + if(..()) + return TRUE + tgui_interact(user) + +/obj/machinery/door_timer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "BrigTimer", name) + ui.open() + +/obj/machinery/door_timer/tgui_data() + var/list/data = list() + data["time_left"] = time_left() + data["max_time_left"] = MAX_TIMER + data["timing"] = timing + data["flash_found"] = FALSE + data["flash_charging"] = FALSE + data["preset_short"] = PRESET_SHORT + data["preset_medium"] = PRESET_MEDIUM + data["preset_long"] = PRESET_LONG + for(var/obj/machinery/flasher/F in targets) + data["flash_found"] = TRUE + if(F.last_flash && (F.last_flash + 150) > world.time) + data["flash_charging"] = TRUE + break + return data + +/obj/machinery/door_timer/tgui_act(action, params) + if(..()) + return + . = TRUE + + if(!allowed(usr)) + to_chat(usr, "Access denied.") + return FALSE + + switch(action) + if("time") + var/real_new_time = 0 + var/new_time = params["time"] + var/list/L = splittext(new_time, ":") + if(LAZYLEN(L)) + for(var/i in 1 to LAZYLEN(L)) + real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) + else + real_new_time = text2num(new_time) + if(real_new_time) + set_timer(real_new_time * 10) + 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(timer_duration + preset_time) + if(timing) + activation_time = world.time + else + . = FALSE + + +//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/timeleft = time_left(seconds = TRUE) + var/disp2 = "[add_leading(num2text((timeleft / 60) % 60), 2, "0")]:[add_leading(num2text(timeleft % 60), 2, "0")]" + 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/cell_1 + name = "Cell 1" + id = "Cell 1" + +/obj/machinery/door_timer/cell_2 + name = "Cell 2" + id = "Cell 2" + +/obj/machinery/door_timer/cell_3 + name = "Cell 3" + id = "Cell 3" + +/obj/machinery/door_timer/cell_4 + name = "Cell 4" + id = "Cell 4" + +/obj/machinery/door_timer/cell_5 + name = "Cell 5" + id = "Cell 5" + +/obj/machinery/door_timer/cell_6 + name = "Cell 6" + id = "Cell 6" + +/obj/machinery/door_timer/tactical_pet_storage //Vorestation Addition + name = "Tactical Pet Storage" + id = "tactical_pet_storage" + desc = "Opens and Closes on a timer. This one seals away a tactical boost in morale." + +#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 index f7c6ff98b1..2e2f0768cb 100644 --- a/code/game/machinery/doors/checkForMultipleDoors.dm +++ b/code/game/machinery/doors/checkForMultipleDoors.dm @@ -1,16 +1,16 @@ -/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) - return 0 - return 1 - -/turf/simulated/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 mischievious - return 1 +/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) + return 0 + return 1 + +/turf/simulated/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 mischievious + return 1 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index aa5d9c0990..540fb694eb 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,515 +1,515 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -#define DOOR_REPAIR_AMOUNT 50 //amount of health regained per stack amount used - -/obj/machinery/door - name = "Door" - desc = "It opens and closes." - icon = 'icons/obj/doors/Doorint.dmi' - icon_state = "door1" - anchored = TRUE - opacity = 1 - density = TRUE - can_atmos_pass = ATMOS_PASS_PROC - layer = DOOR_OPEN_LAYER - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - var/open_layer = DOOR_OPEN_LAYER - var/closed_layer = DOOR_CLOSED_LAYER - - var/visible = 1 - var/p_open = 0 - var/operating = 0 - var/autoclose = 0 - var/glass = 0 - var/normalspeed = 1 - var/heat_proof = 0 // For glass airlocks/opacity firedoors - var/air_properties_vary_with_direction = 0 - var/maxhealth = 300 - var/health - var/destroy_hits = 10 //How many strong hits it takes to destroy the door - var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon - var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon - var/repairing = 0 - var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. - var/close_door_at = 0 //When to automatically close the door, if possible - - var/anim_length_before_density = 3 - var/anim_length_before_finalize = 7 - - //Multi-tile doors - dir = EAST - var/width = 1 - - // turf animation - var/atom/movable/overlay/c_animation = null - -/obj/machinery/door/attack_generic(var/mob/user, var/damage) - if(isanimal(user)) - var/mob/living/simple_mob/S = user - if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) - visible_message("\The [user] smashes into [src]!") - playsound(src, S.attack_sound, 75, 1) - take_damage(damage) - else - visible_message("\The [user] bonks \the [src] harmlessly.") - user.do_attack_animation(src) - -/obj/machinery/door/New() - . = ..() - if(density) - layer = closed_layer - explosion_resistance = initial(explosion_resistance) - update_heat_protection(get_turf(src)) - else - layer = open_layer - explosion_resistance = 0 - - - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - health = maxhealth - update_icon() - - update_nearby_tiles(need_rebuild=1) - return - -/obj/machinery/door/Destroy() - density = FALSE - update_nearby_tiles() - . = ..() - -/obj/machinery/door/process() - if(close_door_at && world.time >= close_door_at) - if(autoclose) - close_door_at = world.time + next_close_wait() - spawn(0) - close() - else - close_door_at = 0 - if (..() == PROCESS_KILL && !close_door_at) - return PROCESS_KILL - -/obj/machinery/door/proc/autoclose_in(wait) - close_door_at = world.time + wait - START_MACHINE_PROCESSING(src) - -/obj/machinery/door/proc/can_open() - if(!density || operating || !ticker) - return 0 - return 1 - -/obj/machinery/door/proc/can_close() - if(density || operating || !ticker) - return 0 - return 1 - -/obj/machinery/door/Bumped(atom/AM) - . = ..() - if(p_open || operating) - return - if(ismob(AM)) - var/mob/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 - else if(istype(M, /mob/living/simple_mob/animal/passive/mouse) && !(M.ckey)) //VOREStation Edit: Make wild mice - return //VOREStation Edit: unable to open doors - else - bumpopen(M) - if(istype(AM, /obj/item/device/uav)) - if(check_access(null)) - open() - else - do_animate("deny") - - if(istype(AM, /mob/living/bot)) - var/mob/living/bot/bot = AM - if(src.check_access(bot.botcard)) - if(density) - open() - return - - if(istype(AM, /obj/mecha)) - var/obj/mecha/mecha = AM - if(density) - if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) - open() - else - do_animate("deny") - return - if(istype(AM, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/wheel = AM - if(density) - if(wheel.pulling && (src.allowed(wheel.pulling))) - open() - else - do_animate("deny") - -/obj/machinery/door/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density - -/obj/machinery/door/CanZASPass(turf/T, is_zone) - if(is_zone) - return !block_air_zones // Block merging unless block_air_zones = 0 - return !density // Block airflow unless density = FALSE - -/obj/machinery/door/proc/bumpopen(mob/user as mob) - if(!user) return // CHOMPedit - Check if the mob is even valid before proceeding - if(operating) return - if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit - return - src.add_fingerprint(user) - if(density) - if(allowed(user)) open() - else do_animate("deny") - return - -/obj/machinery/door/bullet_act(var/obj/item/projectile/Proj) - ..() - - var/damage = Proj.get_structure_damage() - - // Emitter Blasts - these will eventually completely destroy the door, given enough time. - if (damage > 90) - destroy_hits-- - if (destroy_hits <= 0) - visible_message("\The [src.name] disintegrates!") - switch (Proj.damage_type) - if(BRUTE) - new /obj/item/stack/material/steel(src.loc, 2) - new /obj/item/stack/rods(src.loc, 3) - if(BURN) - new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! - qdel(src) - - if(damage) - //cap projectile damage so that there's still a minimum number of hits required to break the door - take_damage(min(damage, 100)) - - - -/obj/machinery/door/hitby(AM as mob|obj, var/speed=5) - - ..() - visible_message("[src.name] was hit by [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 15 * (speed/5) - else - tforce = AM:throwforce * (speed/5) - playsound(src, hitsound, 100, 1) - take_damage(tforce) - return - -/obj/machinery/door/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/door/attack_hand(mob/user as mob) - return src.attackby(user, user) - -/obj/machinery/door/attack_tk(mob/user as mob) - if(requiresID() && !allowed(null)) - return - ..() - -/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) - src.add_fingerprint(user) - - if(istype(I)) - if(attackby_vr(I, user)) //VOREStation begin: Fireproofing - return //VOREStation begin: Fireproofing - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) - if(stat & BROKEN) - to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") - return - if(health >= maxhealth) - to_chat(user, "Nothing to fix!") - return - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return - - //figure out how much metal we need - var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT - amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? - - var/obj/item/stack/stack = I - var/amount_given = amount_needed - repairing - var/mats_given = stack.get_amount() - if(repairing && amount_given <= 0) - to_chat(user, "You must weld or remove \the [get_material_name()] from \the [src] before you can add anything else.") - else - if(mats_given >= amount_given) - if(stack.use(amount_given)) - repairing += amount_given - else - if(stack.use(mats_given)) - repairing += mats_given - amount_given = mats_given - if(amount_given) - to_chat(user, "You fit [amount_given] [stack.singular_name]\s to damaged and broken parts on \the [src].") - - return - - if(repairing && I.has_tool_quality(TOOL_WELDER)) - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return - - var/obj/item/weapon/weldingtool/welder = I.get_welder() - if(welder.remove_fuel(0,user)) - to_chat(user, "You start to fix dents and weld \the [get_material_name()] into place.") - playsound(src, welder.usesound, 50, 1) - if(do_after(user, (5 * repairing) * welder.toolspeed) && welder && welder.isOn()) - to_chat(user, "You finish repairing the damage to \the [src].") - health = between(health, health + repairing*DOOR_REPAIR_AMOUNT, maxhealth) - update_icon() - repairing = 0 - return - - if(repairing && I.has_tool_quality(TOOL_CROWBAR)) - var/datum/material/mat = get_material() - var/obj/item/stack/material/repairing_sheet = mat.place_sheet(loc, repairing) - repairing = 0 - to_chat(user, "You remove \the [repairing_sheet].") - playsound(src, I.usesound, 100, 1) - return - - //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them. - if(src.density && istype(I, /obj/item/weapon) && user.a_intent == I_HURT && !istype(I, /obj/item/weapon/card)) - var/obj/item/weapon/W = I - user.setClickCooldown(user.get_attack_speed(W)) - if(W.damtype == BRUTE || W.damtype == BURN) - user.do_attack_animation(src) - if(W.force < min_force) - user.visible_message("\The [user] hits \the [src] with \the [W] with no visible effect.") - else - user.visible_message("\The [user] forcefully strikes \the [src] with \the [W]!") - playsound(src, hitsound, 100, 1) - take_damage(W.force) - return - - if(src.operating > 0 || isrobot(user)) - return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. - - if(src.operating) - return - - if(src.allowed(user) && operable()) - if(src.density) - open() - else - close() - return - - if(src.density) - do_animate("deny") - return - -/obj/machinery/door/emag_act(var/remaining_charges) - if(density && operable()) - do_animate("spark") - sleep(6) - open() - operating = -1 - return 1 - -/obj/machinery/door/take_damage(var/damage) - var/initialhealth = src.health - src.health = max(0, src.health - damage) - if(src.health <= 0 && initialhealth > 0) - src.set_broken() - else if(src.health < src.maxhealth / 4 && initialhealth >= src.maxhealth / 4) - visible_message("\The [src] looks like it's about to break!" ) - else if(src.health < src.maxhealth / 2 && initialhealth >= src.maxhealth / 2) - visible_message("\The [src] looks seriously damaged!" ) - else if(src.health < src.maxhealth * 3/4 && initialhealth >= src.maxhealth * 3/4) - visible_message("\The [src] shows signs of damage!" ) - update_icon() - return - - -/obj/machinery/door/examine(mob/user) - . = ..() - if(src.health <= 0) - . += "It is broken!" - else if(src.health < src.maxhealth / 4) - . += "It looks like it's about to break!" - else if(src.health < src.maxhealth / 2) - . += "It looks seriously damaged!" - else if(src.health < src.maxhealth * 3/4) - . += "It shows signs of damage!" - - -/obj/machinery/door/proc/set_broken() - stat |= BROKEN - for (var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message("[src.name] breaks!" ) - update_icon() - return - - -/obj/machinery/door/emp_act(severity) - if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) - spawn(0) - open() - ..() - - -/obj/machinery/door/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if(prob(25)) - qdel(src) - else - take_damage(300) - if(3.0) - if(prob(80)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - else - take_damage(150) - return - -/obj/machinery/door/blob_act() - if(density) // If it's closed. - if(stat & BROKEN) - spawn(0) - open(1) - else - take_damage(100) - -/obj/machinery/door/update_icon() - if(density) - icon_state = "door1" - else - icon_state = "door0" - SSradiation.resistance_cache.Remove(get_turf(src)) - return - - -/obj/machinery/door/proc/do_animate(animation) - switch(animation) - if("opening") - if(p_open) - flick("o_doorc0", src) - else - flick("doorc0", src) - if("closing") - if(p_open) - flick("o_doorc1", src) - else - flick("doorc1", src) - if("spark") - if(density) - flick("door_spark", src) - if("deny") - if(density && !(stat & (NOPOWER|BROKEN))) - flick("door_deny", src) - playsound(src, 'sound/machines/buzz-two.ogg', 50, 0) - return - - -/obj/machinery/door/proc/open(var/forced = 0) - if(!can_open(forced)) - return - operating = 1 - - do_animate("opening") - icon_state = "door0" - set_opacity(0) - sleep(anim_length_before_density) - src.density = FALSE - update_nearby_tiles() - sleep(anim_length_before_finalize) - src.layer = open_layer - explosion_resistance = 0 - update_icon() - set_opacity(0) - operating = 0 - - if(autoclose) - autoclose_in(next_close_wait()) - - return 1 - -/obj/machinery/door/proc/next_close_wait() - return (normalspeed ? 150 : 5) - -/obj/machinery/door/proc/close(var/forced = 0) - if(!can_close(forced)) - return - operating = 1 - - close_door_at = 0 - do_animate("closing") - sleep(anim_length_before_density) - src.density = TRUE - explosion_resistance = initial(explosion_resistance) - src.layer = closed_layer - update_nearby_tiles() - sleep(anim_length_before_finalize) - update_icon() - if(visible && !glass) - set_opacity(1) //caaaaarn! - operating = 0 - - //I shall not add a check every x ticks if a door has closed over some fire. - var/obj/fire/fire = locate() in loc - if(fire) - qdel(fire) - - return 1 - -/obj/machinery/door/proc/requiresID() - return 1 - -/obj/machinery/door/allowed(mob/M) - if(!requiresID()) - return ..(null) //don't care who they are or what they have, act as if they're NOTHING - return ..(M) - -/obj/machinery/door/update_nearby_tiles(need_rebuild) - if(!air_master) - return 0 - - for(var/turf/simulated/turf in locs) - update_heat_protection(turf) - air_master.mark_for_update(turf) - - return 1 - -/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source) - if(istype(source)) - if(src.density && (src.opacity || src.heat_proof)) - source.thermal_conductivity = DOOR_HEAT_TRANSFER_COEFFICIENT - else - source.thermal_conductivity = initial(source.thermal_conductivity) - -/obj/machinery/door/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - update_nearby_tiles() - -/obj/machinery/door/morgue - icon = 'icons/obj/doors/doormorgue.dmi' +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +#define DOOR_REPAIR_AMOUNT 50 //amount of health regained per stack amount used + +/obj/machinery/door + name = "Door" + desc = "It opens and closes." + icon = 'icons/obj/doors/Doorint.dmi' + icon_state = "door1" + anchored = TRUE + opacity = 1 + density = TRUE + can_atmos_pass = ATMOS_PASS_PROC + layer = DOOR_OPEN_LAYER + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + var/open_layer = DOOR_OPEN_LAYER + var/closed_layer = DOOR_CLOSED_LAYER + + var/visible = 1 + var/p_open = 0 + var/operating = 0 + var/autoclose = 0 + var/glass = 0 + var/normalspeed = 1 + var/heat_proof = 0 // For glass airlocks/opacity firedoors + var/air_properties_vary_with_direction = 0 + var/maxhealth = 300 + var/health + var/destroy_hits = 10 //How many strong hits it takes to destroy the door + var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon + var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon + var/repairing = 0 + var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. + var/close_door_at = 0 //When to automatically close the door, if possible + + var/anim_length_before_density = 3 + var/anim_length_before_finalize = 7 + + //Multi-tile doors + dir = EAST + var/width = 1 + + // turf animation + var/atom/movable/overlay/c_animation = null + +/obj/machinery/door/attack_generic(var/mob/user, var/damage) + if(isanimal(user)) + var/mob/living/simple_mob/S = user + if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) + visible_message("\The [user] smashes into [src]!") + playsound(src, S.attack_sound, 75, 1) + take_damage(damage) + else + visible_message("\The [user] bonks \the [src] harmlessly.") + user.do_attack_animation(src) + +/obj/machinery/door/New() + . = ..() + if(density) + layer = closed_layer + explosion_resistance = initial(explosion_resistance) + update_heat_protection(get_turf(src)) + else + layer = open_layer + explosion_resistance = 0 + + + if(width > 1) + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + + health = maxhealth + update_icon() + + update_nearby_tiles(need_rebuild=1) + return + +/obj/machinery/door/Destroy() + density = FALSE + update_nearby_tiles() + . = ..() + +/obj/machinery/door/process() + if(close_door_at && world.time >= close_door_at) + if(autoclose) + close_door_at = world.time + next_close_wait() + spawn(0) + close() + else + close_door_at = 0 + if (..() == PROCESS_KILL && !close_door_at) + return PROCESS_KILL + +/obj/machinery/door/proc/autoclose_in(wait) + close_door_at = world.time + wait + START_MACHINE_PROCESSING(src) + +/obj/machinery/door/proc/can_open() + if(!density || operating || !ticker) + return 0 + return 1 + +/obj/machinery/door/proc/can_close() + if(density || operating || !ticker) + return 0 + return 1 + +/obj/machinery/door/Bumped(atom/AM) + . = ..() + if(p_open || operating) + return + if(ismob(AM)) + var/mob/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 + else if(istype(M, /mob/living/simple_mob/animal/passive/mouse) && !(M.ckey)) //VOREStation Edit: Make wild mice + return //VOREStation Edit: unable to open doors + else + bumpopen(M) + if(istype(AM, /obj/item/device/uav)) + if(check_access(null)) + open() + else + do_animate("deny") + + if(istype(AM, /mob/living/bot)) + var/mob/living/bot/bot = AM + if(src.check_access(bot.botcard)) + if(density) + open() + return + + if(istype(AM, /obj/mecha)) + var/obj/mecha/mecha = AM + if(density) + if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) + open() + else + do_animate("deny") + return + if(istype(AM, /obj/structure/bed/chair/wheelchair)) + var/obj/structure/bed/chair/wheelchair/wheel = AM + if(density) + if(wheel.pulling && (src.allowed(wheel.pulling))) + open() + else + do_animate("deny") + +/obj/machinery/door/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return !opacity + return !density + +/obj/machinery/door/CanZASPass(turf/T, is_zone) + if(is_zone) + return !block_air_zones // Block merging unless block_air_zones = 0 + return !density // Block airflow unless density = FALSE + +/obj/machinery/door/proc/bumpopen(mob/user as mob) + if(!user) return // CHOMPedit - Check if the mob is even valid before proceeding + if(operating) return + if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit + return + src.add_fingerprint(user) + if(density) + if(allowed(user)) open() + else do_animate("deny") + return + +/obj/machinery/door/bullet_act(var/obj/item/projectile/Proj) + ..() + + var/damage = Proj.get_structure_damage() + + // Emitter Blasts - these will eventually completely destroy the door, given enough time. + if (damage > 90) + destroy_hits-- + if (destroy_hits <= 0) + visible_message("\The [src.name] disintegrates!") + switch (Proj.damage_type) + if(BRUTE) + new /obj/item/stack/material/steel(src.loc, 2) + new /obj/item/stack/rods(src.loc, 3) + if(BURN) + new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! + qdel(src) + + if(damage) + //cap projectile damage so that there's still a minimum number of hits required to break the door + take_damage(min(damage, 100)) + + + +/obj/machinery/door/hitby(AM as mob|obj, var/speed=5) + + ..() + visible_message("[src.name] was hit by [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 15 * (speed/5) + else + tforce = AM:throwforce * (speed/5) + playsound(src, hitsound, 100, 1) + take_damage(tforce) + return + +/obj/machinery/door/attack_ai(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/door/attack_hand(mob/user as mob) + return src.attackby(user, user) + +/obj/machinery/door/attack_tk(mob/user as mob) + if(requiresID() && !allowed(null)) + return + ..() + +/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) + src.add_fingerprint(user) + + if(istype(I)) + if(attackby_vr(I, user)) //VOREStation begin: Fireproofing + return //VOREStation begin: Fireproofing + if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) + if(stat & BROKEN) + to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") + return + if(health >= maxhealth) + to_chat(user, "Nothing to fix!") + return + if(!density) + to_chat(user, "\The [src] must be closed before you can repair it.") + return + + //figure out how much metal we need + var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT + amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? + + var/obj/item/stack/stack = I + var/amount_given = amount_needed - repairing + var/mats_given = stack.get_amount() + if(repairing && amount_given <= 0) + to_chat(user, "You must weld or remove \the [get_material_name()] from \the [src] before you can add anything else.") + else + if(mats_given >= amount_given) + if(stack.use(amount_given)) + repairing += amount_given + else + if(stack.use(mats_given)) + repairing += mats_given + amount_given = mats_given + if(amount_given) + to_chat(user, "You fit [amount_given] [stack.singular_name]\s to damaged and broken parts on \the [src].") + + return + + if(repairing && I.has_tool_quality(TOOL_WELDER)) + if(!density) + to_chat(user, "\The [src] must be closed before you can repair it.") + return + + var/obj/item/weapon/weldingtool/welder = I.get_welder() + if(welder.remove_fuel(0,user)) + to_chat(user, "You start to fix dents and weld \the [get_material_name()] into place.") + playsound(src, welder.usesound, 50, 1) + if(do_after(user, (5 * repairing) * welder.toolspeed) && welder && welder.isOn()) + to_chat(user, "You finish repairing the damage to \the [src].") + health = between(health, health + repairing*DOOR_REPAIR_AMOUNT, maxhealth) + update_icon() + repairing = 0 + return + + if(repairing && I.has_tool_quality(TOOL_CROWBAR)) + var/datum/material/mat = get_material() + var/obj/item/stack/material/repairing_sheet = mat.place_sheet(loc, repairing) + repairing = 0 + to_chat(user, "You remove \the [repairing_sheet].") + playsound(src, I.usesound, 100, 1) + return + + //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them. + if(src.density && istype(I, /obj/item/weapon) && user.a_intent == I_HURT && !istype(I, /obj/item/weapon/card)) + var/obj/item/weapon/W = I + user.setClickCooldown(user.get_attack_speed(W)) + if(W.damtype == BRUTE || W.damtype == BURN) + user.do_attack_animation(src) + if(W.force < min_force) + user.visible_message("\The [user] hits \the [src] with \the [W] with no visible effect.") + else + user.visible_message("\The [user] forcefully strikes \the [src] with \the [W]!") + playsound(src, hitsound, 100, 1) + take_damage(W.force) + return + + if(src.operating > 0 || isrobot(user)) + return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. + + if(src.operating) + return + + if(src.allowed(user) && operable()) + if(src.density) + open() + else + close() + return + + if(src.density) + do_animate("deny") + return + +/obj/machinery/door/emag_act(var/remaining_charges) + if(density && operable()) + do_animate("spark") + sleep(6) + open() + operating = -1 + return 1 + +/obj/machinery/door/take_damage(var/damage) + var/initialhealth = src.health + src.health = max(0, src.health - damage) + if(src.health <= 0 && initialhealth > 0) + src.set_broken() + else if(src.health < src.maxhealth / 4 && initialhealth >= src.maxhealth / 4) + visible_message("\The [src] looks like it's about to break!" ) + else if(src.health < src.maxhealth / 2 && initialhealth >= src.maxhealth / 2) + visible_message("\The [src] looks seriously damaged!" ) + else if(src.health < src.maxhealth * 3/4 && initialhealth >= src.maxhealth * 3/4) + visible_message("\The [src] shows signs of damage!" ) + update_icon() + return + + +/obj/machinery/door/examine(mob/user) + . = ..() + if(src.health <= 0) + . += "It is broken!" + else if(src.health < src.maxhealth / 4) + . += "It looks like it's about to break!" + else if(src.health < src.maxhealth / 2) + . += "It looks seriously damaged!" + else if(src.health < src.maxhealth * 3/4) + . += "It shows signs of damage!" + + +/obj/machinery/door/proc/set_broken() + stat |= BROKEN + for (var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message("[src.name] breaks!" ) + update_icon() + return + + +/obj/machinery/door/emp_act(severity) + if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) + spawn(0) + open() + ..() + + +/obj/machinery/door/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + if(2.0) + if(prob(25)) + qdel(src) + else + take_damage(300) + if(3.0) + if(prob(80)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + else + take_damage(150) + return + +/obj/machinery/door/blob_act() + if(density) // If it's closed. + if(stat & BROKEN) + spawn(0) + open(1) + else + take_damage(100) + +/obj/machinery/door/update_icon() + if(density) + icon_state = "door1" + else + icon_state = "door0" + SSradiation.resistance_cache.Remove(get_turf(src)) + return + + +/obj/machinery/door/proc/do_animate(animation) + switch(animation) + if("opening") + if(p_open) + flick("o_doorc0", src) + else + flick("doorc0", src) + if("closing") + if(p_open) + flick("o_doorc1", src) + else + flick("doorc1", src) + if("spark") + if(density) + flick("door_spark", src) + if("deny") + if(density && !(stat & (NOPOWER|BROKEN))) + flick("door_deny", src) + playsound(src, 'sound/machines/buzz-two.ogg', 50, 0) + return + + +/obj/machinery/door/proc/open(var/forced = 0) + if(!can_open(forced)) + return + operating = 1 + + do_animate("opening") + icon_state = "door0" + set_opacity(0) + sleep(anim_length_before_density) + src.density = FALSE + update_nearby_tiles() + sleep(anim_length_before_finalize) + src.layer = open_layer + explosion_resistance = 0 + update_icon() + set_opacity(0) + operating = 0 + + if(autoclose) + autoclose_in(next_close_wait()) + + return 1 + +/obj/machinery/door/proc/next_close_wait() + return (normalspeed ? 150 : 5) + +/obj/machinery/door/proc/close(var/forced = 0) + if(!can_close(forced)) + return + operating = 1 + + close_door_at = 0 + do_animate("closing") + sleep(anim_length_before_density) + src.density = TRUE + explosion_resistance = initial(explosion_resistance) + src.layer = closed_layer + update_nearby_tiles() + sleep(anim_length_before_finalize) + update_icon() + if(visible && !glass) + set_opacity(1) //caaaaarn! + operating = 0 + + //I shall not add a check every x ticks if a door has closed over some fire. + var/obj/fire/fire = locate() in loc + if(fire) + qdel(fire) + + return 1 + +/obj/machinery/door/proc/requiresID() + return 1 + +/obj/machinery/door/allowed(mob/M) + if(!requiresID()) + return ..(null) //don't care who they are or what they have, act as if they're NOTHING + return ..(M) + +/obj/machinery/door/update_nearby_tiles(need_rebuild) + if(!air_master) + return 0 + + for(var/turf/simulated/turf in locs) + update_heat_protection(turf) + air_master.mark_for_update(turf) + + return 1 + +/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source) + if(istype(source)) + if(src.density && (src.opacity || src.heat_proof)) + source.thermal_conductivity = DOOR_HEAT_TRANSFER_COEFFICIENT + else + source.thermal_conductivity = initial(source.thermal_conductivity) + +/obj/machinery/door/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(width > 1) + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + + update_nearby_tiles() + +/obj/machinery/door/morgue + icon = 'icons/obj/doors/doormorgue.dmi' diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index 515ed18017..8e2a28d1dd 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -1,25 +1,25 @@ -/obj/machinery/door/unpowered - autoclose = 0 - var/locked = 0 - -/obj/machinery/door/unpowered/Bumped(atom/AM) - if(src.locked) - return - ..() - return - -/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/melee/energy/blade)) return - if(src.locked) return - ..() - return - -/obj/machinery/door/unpowered/emag_act() - return -1 - -/obj/machinery/door/unpowered/shuttle - icon = 'icons/turf/shuttle_white.dmi' - name = "door" - icon_state = "door1" - opacity = 1 - density = TRUE +/obj/machinery/door/unpowered + autoclose = 0 + var/locked = 0 + +/obj/machinery/door/unpowered/Bumped(atom/AM) + if(src.locked) + return + ..() + return + +/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/melee/energy/blade)) return + if(src.locked) return + ..() + return + +/obj/machinery/door/unpowered/emag_act() + return -1 + +/obj/machinery/door/unpowered/shuttle + icon = 'icons/turf/shuttle_white.dmi' + name = "door" + icon_state = "door1" + opacity = 1 + density = TRUE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 8175800373..7b350805c2 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -1,353 +1,353 @@ -/obj/machinery/door/window - name = "interior door" - desc = "A strong door." - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "left" - var/base_state = "left" - min_force = 4 - hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 150 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file - health = 150 - visible = 0.0 - use_power = USE_POWER_OFF - flags = ON_BORDER - opacity = 0 - var/obj/item/weapon/airlock_electronics/electronics = null - explosion_resistance = 5 - can_atmos_pass = ATMOS_PASS_PROC - air_properties_vary_with_direction = 1 - -/obj/machinery/door/window/New() - ..() - update_nearby_tiles() - if(LAZYLEN(req_access)) - src.icon_state = "[src.icon_state]" - src.base_state = src.icon_state - return - -/obj/machinery/door/window/update_icon() - if(density) - icon_state = base_state - else - icon_state = "[base_state]open" - -/obj/machinery/door/window/proc/shatter(var/display_message = 1) - new /obj/item/weapon/material/shard(src.loc) - new /obj/item/weapon/material/shard(src.loc) - new /obj/item/stack/cable_coil(src.loc, 1) - var/obj/item/weapon/airlock_electronics/ae - if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) - if(LAZYLEN(req_access)) - ae.conf_access = req_access - else if (LAZYLEN(req_one_access)) - ae.conf_access = req_one_access - ae.one_access = 1 - else - ae = electronics - electronics = null - ae.loc = src.loc - if(operating == -1) - ae.icon_state = "door_electronics_smoked" - operating = 0 - src.density = FALSE - playsound(src, "shatter", 70, 1) - if(display_message) - visible_message("[src] shatters!") - qdel(src) - -/obj/machinery/door/window/Destroy() - density = FALSE - update_nearby_tiles() - return ..() - -/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) - if (!( ismob(AM) )) - var/mob/living/bot/bot = AM - if(istype(bot)) - if(density && src.check_access(bot.botcard)) - open() - addtimer(CALLBACK(src, PROC_REF(close)), 50) - else if(istype(AM, /obj/mecha)) - var/obj/mecha/mecha = AM - if(density) - if(mecha.occupant && src.allowed(mecha.occupant)) - open() - addtimer(CALLBACK(src, PROC_REF(close)), 50) - return - if (!( ticker )) - return - if (src.operating) - return - if (density && allowed(AM)) - open() - addtimer(CALLBACK(src, PROC_REF(close)), check_access(null)? 50 : 20) - -/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return TRUE - if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir - return !density - return TRUE - -/obj/machinery/door/window/Uncross(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return TRUE - if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir - return !density - return TRUE - -/obj/machinery/door/window/CanZASPass(turf/T, is_zone) - if(get_dir(T, loc) == turn(dir, 180)) - if(is_zone) // No merging allowed. - return FALSE - return !density // Air can flow if open (density == FALSE). - return TRUE // Windoors don't block if not facing the right way. - -/obj/machinery/door/window/open() - if (operating == 1 || !density) //doors can still open when emag-disabled - return 0 - if (!ticker) - return 0 - if (!operating) //in case of emag - operating = 1 - flick(text("[src.base_state]opening"), src) - playsound(src, 'sound/machines/door/windowdoor.ogg', 100, 1) - sleep(10) - - explosion_resistance = 0 - density = FALSE - update_icon() - update_nearby_tiles() - - if(operating == 1) //emag again - operating = 0 - return 1 - -/obj/machinery/door/window/close() - if(operating || density) - return FALSE - operating = TRUE - flick(text("[]closing", src.base_state), src) - playsound(src, 'sound/machines/door/windowdoor.ogg', 100, 1) - - density = TRUE - update_icon() - explosion_resistance = initial(explosion_resistance) - update_nearby_tiles() - - sleep(10) - operating = FALSE - return TRUE - -/obj/machinery/door/window/take_damage(var/damage) - src.health = max(0, src.health - damage) - if (src.health <= 0) - shatter() - return - -/obj/machinery/door/window/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/door/window/attack_hand(mob/user as mob) - src.add_fingerprint(user) - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[user] smashes against the [src.name].", 1) - user.do_attack_animation(src) - user.setClickCooldown(user.get_attack_speed()) - take_damage(25) - return - - if (src.allowed(user)) - if (src.density) - open() - else - close() - - else if (src.density) - flick(text("[]deny", src.base_state), src) - - return - -/obj/machinery/door/window/emag_act(var/remaining_charges, var/mob/user) - if (density && operable()) - operating = -1 - flick("[src.base_state]spark", src) - sleep(6) - open() - return 1 - -/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob) - - //If it's in the process of opening/closing, ignore the click - if (src.operating == 1) - return - - if(istype(I)) - // Fixing. - if(I.has_tool_quality(TOOL_WELDER) && user.a_intent == I_HELP) - var/obj/item/weapon/weldingtool/WT = I.get_welder() - if(health < maxhealth) - if(WT.remove_fuel(1 ,user)) - to_chat(user, "You begin repairing [src]...") - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 40 * WT.toolspeed, target = src)) - health = maxhealth - update_icon() - to_chat(user, "You repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - - //Emags and ninja swords? You may pass. - if (istype(I, /obj/item/weapon/melee/energy/blade)) - if(emag_act(10, user)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - visible_message("The glass door was sliced open by [user]!") - return 1 - - //If it's opened/emagged, crowbar can pry it out of its frame. - if (!density && I.has_tool_quality(TOOL_CROWBAR)) - playsound(src, I.usesound, 50, 1) - user.visible_message("[user] begins prying the windoor out of the frame.", "You start to pry the windoor out of the frame.") - if (do_after(user,40 * I.toolspeed)) - to_chat(user,"You pried the windoor out of the frame!") - - var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) - if (istype(src, /obj/machinery/door/window/brigdoor)) - wa.secure = "secure_" - if (src.base_state == "right" || src.base_state == "rightsecure") - wa.facing = "r" - wa.set_dir(src.dir) - wa.anchored = TRUE - wa.created_name = name - wa.state = "02" - wa.step = 2 - wa.update_state() - - if(operating == -1) - wa.electronics = new/obj/item/weapon/circuitboard/broken() - else - if(!electronics) - wa.electronics = new/obj/item/weapon/airlock_electronics() - if(LAZYLEN(req_access)) - wa.electronics.conf_access = req_access - else if (LAZYLEN(req_one_access)) - wa.electronics.conf_access = req_one_access - wa.electronics.one_access = 1 - else - wa.electronics = electronics - electronics = null - operating = 0 - qdel(src) - return - - //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) - user.setClickCooldown(user.get_attack_speed(I)) - var/aforce = I.force - playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[src] was hit by [I].") - if(I.damtype == BRUTE || I.damtype == BURN) - take_damage(aforce) - return - - - src.add_fingerprint(user) - - if (src.allowed(user)) - if (src.density) - open() - else - close() - - else if (src.density) - flick(text("[]deny", src.base_state), src) - - return - -/obj/machinery/door/window/brigdoor - name = "secure door" - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "leftsecure" - base_state = "leftsecure" - req_access = list(access_security) - var/id = null - maxhealth = 300 - health = 300.0 //Stronger doors for prison (regular window door health is 150) - -/obj/machinery/door/window/brigdoor/shatter() - new /obj/item/stack/rods(src.loc, 2) - ..() - -/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 + name = "interior door" + desc = "A strong door." + icon = 'icons/obj/doors/windoor.dmi' + icon_state = "left" + var/base_state = "left" + min_force = 4 + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 150 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file + health = 150 + visible = 0.0 + use_power = USE_POWER_OFF + flags = ON_BORDER + opacity = 0 + var/obj/item/weapon/airlock_electronics/electronics = null + explosion_resistance = 5 + can_atmos_pass = ATMOS_PASS_PROC + air_properties_vary_with_direction = 1 + +/obj/machinery/door/window/New() + ..() + update_nearby_tiles() + if(LAZYLEN(req_access)) + src.icon_state = "[src.icon_state]" + src.base_state = src.icon_state + return + +/obj/machinery/door/window/update_icon() + if(density) + icon_state = base_state + else + icon_state = "[base_state]open" + +/obj/machinery/door/window/proc/shatter(var/display_message = 1) + new /obj/item/weapon/material/shard(src.loc) + new /obj/item/weapon/material/shard(src.loc) + new /obj/item/stack/cable_coil(src.loc, 1) + var/obj/item/weapon/airlock_electronics/ae + if(!electronics) + ae = new/obj/item/weapon/airlock_electronics( src.loc ) + if(LAZYLEN(req_access)) + ae.conf_access = req_access + else if (LAZYLEN(req_one_access)) + ae.conf_access = req_one_access + ae.one_access = 1 + else + ae = electronics + electronics = null + ae.loc = src.loc + if(operating == -1) + ae.icon_state = "door_electronics_smoked" + operating = 0 + src.density = FALSE + playsound(src, "shatter", 70, 1) + if(display_message) + visible_message("[src] shatters!") + qdel(src) + +/obj/machinery/door/window/Destroy() + density = FALSE + update_nearby_tiles() + return ..() + +/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) + if (!( ismob(AM) )) + var/mob/living/bot/bot = AM + if(istype(bot)) + if(density && src.check_access(bot.botcard)) + open() + addtimer(CALLBACK(src, PROC_REF(close)), 50) + else if(istype(AM, /obj/mecha)) + var/obj/mecha/mecha = AM + if(density) + if(mecha.occupant && src.allowed(mecha.occupant)) + open() + addtimer(CALLBACK(src, PROC_REF(close)), 50) + return + if (!( ticker )) + return + if (src.operating) + return + if (density && allowed(AM)) + open() + addtimer(CALLBACK(src, PROC_REF(close)), check_access(null)? 50 : 20) + +/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return TRUE + if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir + return !density + return TRUE + +/obj/machinery/door/window/Uncross(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return TRUE + if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir + return !density + return TRUE + +/obj/machinery/door/window/CanZASPass(turf/T, is_zone) + if(get_dir(T, loc) == turn(dir, 180)) + if(is_zone) // No merging allowed. + return FALSE + return !density // Air can flow if open (density == FALSE). + return TRUE // Windoors don't block if not facing the right way. + +/obj/machinery/door/window/open() + if (operating == 1 || !density) //doors can still open when emag-disabled + return 0 + if (!ticker) + return 0 + if (!operating) //in case of emag + operating = 1 + flick(text("[src.base_state]opening"), src) + playsound(src, 'sound/machines/door/windowdoor.ogg', 100, 1) + sleep(10) + + explosion_resistance = 0 + density = FALSE + update_icon() + update_nearby_tiles() + + if(operating == 1) //emag again + operating = 0 + return 1 + +/obj/machinery/door/window/close() + if(operating || density) + return FALSE + operating = TRUE + flick(text("[]closing", src.base_state), src) + playsound(src, 'sound/machines/door/windowdoor.ogg', 100, 1) + + density = TRUE + update_icon() + explosion_resistance = initial(explosion_resistance) + update_nearby_tiles() + + sleep(10) + operating = FALSE + return TRUE + +/obj/machinery/door/window/take_damage(var/damage) + src.health = max(0, src.health - damage) + if (src.health <= 0) + shatter() + return + +/obj/machinery/door/window/attack_ai(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/door/window/attack_hand(mob/user as mob) + src.add_fingerprint(user) + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.can_shred(H)) + playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) + visible_message("[user] smashes against the [src.name].", 1) + user.do_attack_animation(src) + user.setClickCooldown(user.get_attack_speed()) + take_damage(25) + return + + if (src.allowed(user)) + if (src.density) + open() + else + close() + + else if (src.density) + flick(text("[]deny", src.base_state), src) + + return + +/obj/machinery/door/window/emag_act(var/remaining_charges, var/mob/user) + if (density && operable()) + operating = -1 + flick("[src.base_state]spark", src) + sleep(6) + open() + return 1 + +/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob) + + //If it's in the process of opening/closing, ignore the click + if (src.operating == 1) + return + + if(istype(I)) + // Fixing. + if(I.has_tool_quality(TOOL_WELDER) && user.a_intent == I_HELP) + var/obj/item/weapon/weldingtool/WT = I.get_welder() + if(health < maxhealth) + if(WT.remove_fuel(1 ,user)) + to_chat(user, "You begin repairing [src]...") + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 40 * WT.toolspeed, target = src)) + health = maxhealth + update_icon() + to_chat(user, "You repair [src].") + else + to_chat(user, "[src] is already in good condition!") + return + + //Emags and ninja swords? You may pass. + if (istype(I, /obj/item/weapon/melee/energy/blade)) + if(emag_act(10, user)) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, "sparks", 50, 1) + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + visible_message("The glass door was sliced open by [user]!") + return 1 + + //If it's opened/emagged, crowbar can pry it out of its frame. + if (!density && I.has_tool_quality(TOOL_CROWBAR)) + playsound(src, I.usesound, 50, 1) + user.visible_message("[user] begins prying the windoor out of the frame.", "You start to pry the windoor out of the frame.") + if (do_after(user,40 * I.toolspeed)) + to_chat(user,"You pried the windoor out of the frame!") + + var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) + if (istype(src, /obj/machinery/door/window/brigdoor)) + wa.secure = "secure_" + if (src.base_state == "right" || src.base_state == "rightsecure") + wa.facing = "r" + wa.set_dir(src.dir) + wa.anchored = TRUE + wa.created_name = name + wa.state = "02" + wa.step = 2 + wa.update_state() + + if(operating == -1) + wa.electronics = new/obj/item/weapon/circuitboard/broken() + else + if(!electronics) + wa.electronics = new/obj/item/weapon/airlock_electronics() + if(LAZYLEN(req_access)) + wa.electronics.conf_access = req_access + else if (LAZYLEN(req_one_access)) + wa.electronics.conf_access = req_one_access + wa.electronics.one_access = 1 + else + wa.electronics = electronics + electronics = null + operating = 0 + qdel(src) + return + + //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) + if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) + user.setClickCooldown(user.get_attack_speed(I)) + var/aforce = I.force + playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) + visible_message("[src] was hit by [I].") + if(I.damtype == BRUTE || I.damtype == BURN) + take_damage(aforce) + return + + + src.add_fingerprint(user) + + if (src.allowed(user)) + if (src.density) + open() + else + close() + + else if (src.density) + flick(text("[]deny", src.base_state), src) + + return + +/obj/machinery/door/window/brigdoor + name = "secure door" + icon = 'icons/obj/doors/windoor.dmi' + icon_state = "leftsecure" + base_state = "leftsecure" + req_access = list(access_security) + var/id = null + maxhealth = 300 + health = 300.0 //Stronger doors for prison (regular window door health is 150) + +/obj/machinery/door/window/brigdoor/shatter() + new /obj/item/stack/rods(src.loc, 2) + ..() + +/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" diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index 1dca766535..7c13792724 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -1,309 +1,309 @@ - -#define STATE_UNDOCKED 0 -#define STATE_DOCKING 1 -#define STATE_UNDOCKING 2 -#define STATE_DOCKED 3 - -#define MODE_NONE 0 -#define MODE_SERVER 1 -#define MODE_CLIENT 2 //The one who initiated the docking, and who can initiate the undocking. The server cannot initiate undocking, and is the one responsible for deciding to accept a docking request and signals when docking and undocking is complete. (Think server == station, client == shuttle) - -#define MESSAGE_RESEND_TIME 5 //how long (in seconds) do we wait before resending a message - -/* - *** STATE TABLE *** - - MODE_CLIENT|STATE_UNDOCKED sent a request for docking and now waiting for a reply. - MODE_CLIENT|STATE_DOCKING server told us they are OK to dock, waiting for our docking port to be ready. - MODE_CLIENT|STATE_DOCKED idle - docked as client. - MODE_CLIENT|STATE_UNDOCKING we are either waiting for our docking port to be ready or for the server to give us the OK to finish undocking. - - MODE_SERVER|STATE_UNDOCKED should never happen. - MODE_SERVER|STATE_DOCKING someone requested docking, we are waiting for our docking port to be ready. - MODE_SERVER|STATE_DOCKED idle - docked as server - MODE_SERVER|STATE_UNDOCKING client requested undocking, we are waiting for our docking port to be ready. - - MODE_NONE|STATE_UNDOCKED idle - not docked. - MODE_NONE|anything else should never happen. - - *** Docking Signals *** - - Docking - Client sends request_dock - Server sends confirm_dock to say that yes, we will serve your request - When client is ready, sends confirm_dock - Server sends confirm_dock back to indicate that docking is complete - - Undocking - Client sends request_undock - When client is ready, sends confirm_undock - Server sends confirm_undock back to indicate that docking is complete - - Note that in both cases each side exchanges confirm_dock before the docking operation is considered done. - The client first sends a confirm message to indicate it is ready, and then finally the server will send it's - confirm message to indicate that the operation is complete. - - Note also that when docking, the server sends an additional confirm message. This is because before docking, - the server and client do not have a defined relationship. Before undocking, the server and client are already - related to each other, thus the extra confirm message is not needed. - - *** Override, what is it? *** - - The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. - Maybe the shuttle is full of plamsa/phoron for some reason, and you don't want the door to automatically open, or the airlock to cycle. - This means that the prepare_for_docking/undocking and finish_docking/undocking procs don't get called. - - The docking controller will still check the state of the docking port, and thus prevent the shuttle from launching unless they force the launch (handling forced - launches is not the docking controller's responsibility). In this case it is up to the players to manually get the docking port into a good state to undock - (which usually just means closing and locking the doors). - - In line with this, docking controllers should prevent players from manually doing things when the override is NOT enabled. -*/ - - -/datum/embedded_program/docking - var/tag_target //the tag of the docking controller that we are trying to dock with - var/dock_state = STATE_UNDOCKED - var/control_mode = MODE_NONE - var/response_sent = 0 //so we don't spam confirmation messages - var/resend_counter = 0 //for periodically resending confirmation messages in case they are missed - - var/override_enabled = 0 //when enabled, do not open/close doors or cycle airlocks and wait for the player to do it manually - var/received_confirm = 0 //for undocking, whether the server has recieved a confirmation from the client - var/docking_codes //would only allow docking when receiving signal with these, if set - var/display_name //Override the name shown on docking monitoring program; defaults to area name + coordinates if unset - -/datum/embedded_program/docking/New() - ..() - if(id_tag) - if(SSshuttles.docking_registry[id_tag]) - stack_trace("Docking controller tag [id_tag] had multiple associated programs.") - SSshuttles.docking_registry[id_tag] = src - -/datum/embedded_program/docking/Destroy() - SSshuttles.docking_registry -= id_tag - return ..() - -/datum/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param) - var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id - var/command = signal.data["command"] - var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - - if (recipient != id_tag) - return //this signal is not for us - - switch (command) - if ("confirm_dock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) - dock_state = STATE_DOCKING - broadcast_docking_status() - if (!override_enabled) - prepare_for_docking() - - else if (control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) - dock_state = STATE_DOCKED - broadcast_docking_status() - if (!override_enabled) - finish_docking() //client done docking! - response_sent = 0 - else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process - received_confirm = 1 - - if ("request_dock") - if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) - - tag_target = receive_tag - - if(docking_codes) - var/code = signal.data["code"] - if(code != docking_codes) - log_debug("Controller [id_tag] got request_dock but code:[code] != docking_codes:[docking_codes]") - return - - control_mode = MODE_SERVER - dock_state = STATE_DOCKING - broadcast_docking_status() - - - if (!override_enabled) - prepare_for_docking() - send_docking_command(tag_target, "confirm_dock") //acknowledge the request - - if ("confirm_undock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) - if (!override_enabled) - finish_undocking() - reset() //client is done undocking! - else if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target) - received_confirm = 1 - - if ("request_undock") - if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) - dock_state = STATE_UNDOCKING - broadcast_docking_status() - - if (!override_enabled) - prepare_for_undocking() - - if ("dock_error") - if (receive_tag == tag_target) - reset() - -/datum/embedded_program/docking/process() - switch(dock_state) - if (STATE_DOCKING) //waiting for our docking port to be ready for docking - if (ready_for_docking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) - send_docking_command(tag_target, "confirm_dock") //tell the server we're ready - response_sent = 1 - - else if (control_mode == MODE_SERVER && received_confirm) - send_docking_command(tag_target, "confirm_dock") //tell the client we are done docking. - - dock_state = STATE_DOCKED - broadcast_docking_status() - - if (!override_enabled) - finish_docking() //server done docking! - response_sent = 0 - received_confirm = 0 - - if (STATE_UNDOCKING) - if (ready_for_undocking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) - send_docking_command(tag_target, "confirm_undock") //tell the server we are OK to undock. - response_sent = 1 - - else if (control_mode == MODE_SERVER && received_confirm) - send_docking_command(tag_target, "confirm_undock") //tell the client we are done undocking. - if (!override_enabled) - finish_undocking() - reset() //server is done undocking! - - if (response_sent || resend_counter > 0) - resend_counter++ - - if (resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) - response_sent = 0 - resend_counter = 0 - - //handle invalid states - if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) - if (tag_target) - send_docking_command(tag_target, "dock_error") - reset() - if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED) - control_mode = MODE_NONE - - -/datum/embedded_program/docking/proc/initiate_docking(var/target) - if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake - return - - tag_target = target - control_mode = MODE_CLIENT - - send_docking_command(tag_target, "request_dock") - -/datum/embedded_program/docking/proc/initiate_undocking() - if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking - return - - dock_state = STATE_UNDOCKING - broadcast_docking_status() - - if (!override_enabled) - prepare_for_undocking() - - send_docking_command(tag_target, "request_undock") - -//tell the docking port to start getting ready for docking - e.g. pressurize -/datum/embedded_program/docking/proc/prepare_for_docking() - return - -//are we ready for docking? -/datum/embedded_program/docking/proc/ready_for_docking() - return 1 - -//we are docked, open the doors or whatever. -/datum/embedded_program/docking/proc/finish_docking() - return - -//tell the docking port to start getting ready for undocking - e.g. close those doors. -/datum/embedded_program/docking/proc/prepare_for_undocking() - return - -//we are docked, open the doors or whatever. -/datum/embedded_program/docking/proc/finish_undocking() - return - -//are we ready for undocking? -/datum/embedded_program/docking/proc/ready_for_undocking() - return 1 - -/datum/embedded_program/docking/proc/enable_override() - override_enabled = 1 - -/datum/embedded_program/docking/proc/disable_override() - override_enabled = 0 - -/datum/embedded_program/docking/proc/reset() - dock_state = STATE_UNDOCKED - broadcast_docking_status() - - control_mode = MODE_NONE - tag_target = null - response_sent = 0 - received_confirm = 0 - -/datum/embedded_program/docking/proc/force_undock() - //to_world("[id_tag]: forcing undock") - if (tag_target) - send_docking_command(tag_target, "dock_error") - reset() - -/datum/embedded_program/docking/proc/docked() - return (dock_state == STATE_DOCKED) - -/datum/embedded_program/docking/proc/undocked() - return (dock_state == STATE_UNDOCKED) - -//returns 1 if we are saftely undocked (and the shuttle can leave) -/datum/embedded_program/docking/proc/can_launch() - return undocked() - -/datum/embedded_program/docking/proc/send_docking_command(var/recipient, var/command) - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["command"] = command - signal.data["recipient"] = recipient - signal.data["code"] = docking_codes - post_signal(signal) - -/datum/embedded_program/docking/proc/broadcast_docking_status() - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["dock_status"] = get_docking_status() - post_signal(signal) - -//this is mostly for NanoUI -/datum/embedded_program/docking/proc/get_docking_status() - switch (dock_state) - if (STATE_UNDOCKED) return "undocked" - if (STATE_DOCKING) return "docking" - if (STATE_UNDOCKING) return "undocking" - if (STATE_DOCKED) return "docked" - -/datum/embedded_program/docking/proc/get_name() - return display_name ? display_name : "[get_area(master)] ([master.x], [master.y])" - -#undef STATE_UNDOCKED -#undef STATE_DOCKING -#undef STATE_UNDOCKING -#undef STATE_DOCKED - -#undef MODE_NONE -#undef MODE_SERVER + +#define STATE_UNDOCKED 0 +#define STATE_DOCKING 1 +#define STATE_UNDOCKING 2 +#define STATE_DOCKED 3 + +#define MODE_NONE 0 +#define MODE_SERVER 1 +#define MODE_CLIENT 2 //The one who initiated the docking, and who can initiate the undocking. The server cannot initiate undocking, and is the one responsible for deciding to accept a docking request and signals when docking and undocking is complete. (Think server == station, client == shuttle) + +#define MESSAGE_RESEND_TIME 5 //how long (in seconds) do we wait before resending a message + +/* + *** STATE TABLE *** + + MODE_CLIENT|STATE_UNDOCKED sent a request for docking and now waiting for a reply. + MODE_CLIENT|STATE_DOCKING server told us they are OK to dock, waiting for our docking port to be ready. + MODE_CLIENT|STATE_DOCKED idle - docked as client. + MODE_CLIENT|STATE_UNDOCKING we are either waiting for our docking port to be ready or for the server to give us the OK to finish undocking. + + MODE_SERVER|STATE_UNDOCKED should never happen. + MODE_SERVER|STATE_DOCKING someone requested docking, we are waiting for our docking port to be ready. + MODE_SERVER|STATE_DOCKED idle - docked as server + MODE_SERVER|STATE_UNDOCKING client requested undocking, we are waiting for our docking port to be ready. + + MODE_NONE|STATE_UNDOCKED idle - not docked. + MODE_NONE|anything else should never happen. + + *** Docking Signals *** + + Docking + Client sends request_dock + Server sends confirm_dock to say that yes, we will serve your request + When client is ready, sends confirm_dock + Server sends confirm_dock back to indicate that docking is complete + + Undocking + Client sends request_undock + When client is ready, sends confirm_undock + Server sends confirm_undock back to indicate that docking is complete + + Note that in both cases each side exchanges confirm_dock before the docking operation is considered done. + The client first sends a confirm message to indicate it is ready, and then finally the server will send it's + confirm message to indicate that the operation is complete. + + Note also that when docking, the server sends an additional confirm message. This is because before docking, + the server and client do not have a defined relationship. Before undocking, the server and client are already + related to each other, thus the extra confirm message is not needed. + + *** Override, what is it? *** + + The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. + Maybe the shuttle is full of plamsa/phoron for some reason, and you don't want the door to automatically open, or the airlock to cycle. + This means that the prepare_for_docking/undocking and finish_docking/undocking procs don't get called. + + The docking controller will still check the state of the docking port, and thus prevent the shuttle from launching unless they force the launch (handling forced + launches is not the docking controller's responsibility). In this case it is up to the players to manually get the docking port into a good state to undock + (which usually just means closing and locking the doors). + + In line with this, docking controllers should prevent players from manually doing things when the override is NOT enabled. +*/ + + +/datum/embedded_program/docking + var/tag_target //the tag of the docking controller that we are trying to dock with + var/dock_state = STATE_UNDOCKED + var/control_mode = MODE_NONE + var/response_sent = 0 //so we don't spam confirmation messages + var/resend_counter = 0 //for periodically resending confirmation messages in case they are missed + + var/override_enabled = 0 //when enabled, do not open/close doors or cycle airlocks and wait for the player to do it manually + var/received_confirm = 0 //for undocking, whether the server has recieved a confirmation from the client + var/docking_codes //would only allow docking when receiving signal with these, if set + var/display_name //Override the name shown on docking monitoring program; defaults to area name + coordinates if unset + +/datum/embedded_program/docking/New() + ..() + if(id_tag) + if(SSshuttles.docking_registry[id_tag]) + stack_trace("Docking controller tag [id_tag] had multiple associated programs.") + SSshuttles.docking_registry[id_tag] = src + +/datum/embedded_program/docking/Destroy() + SSshuttles.docking_registry -= id_tag + return ..() + +/datum/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param) + var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id + var/command = signal.data["command"] + var/recipient = signal.data["recipient"] //the intended recipient of the docking signal + + if (recipient != id_tag) + return //this signal is not for us + + switch (command) + if ("confirm_dock") + if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) + dock_state = STATE_DOCKING + broadcast_docking_status() + if (!override_enabled) + prepare_for_docking() + + else if (control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) + dock_state = STATE_DOCKED + broadcast_docking_status() + if (!override_enabled) + finish_docking() //client done docking! + response_sent = 0 + else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process + received_confirm = 1 + + if ("request_dock") + if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) + + tag_target = receive_tag + + if(docking_codes) + var/code = signal.data["code"] + if(code != docking_codes) + log_debug("Controller [id_tag] got request_dock but code:[code] != docking_codes:[docking_codes]") + return + + control_mode = MODE_SERVER + dock_state = STATE_DOCKING + broadcast_docking_status() + + + if (!override_enabled) + prepare_for_docking() + send_docking_command(tag_target, "confirm_dock") //acknowledge the request + + if ("confirm_undock") + if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) + if (!override_enabled) + finish_undocking() + reset() //client is done undocking! + else if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target) + received_confirm = 1 + + if ("request_undock") + if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) + dock_state = STATE_UNDOCKING + broadcast_docking_status() + + if (!override_enabled) + prepare_for_undocking() + + if ("dock_error") + if (receive_tag == tag_target) + reset() + +/datum/embedded_program/docking/process() + switch(dock_state) + if (STATE_DOCKING) //waiting for our docking port to be ready for docking + if (ready_for_docking()) + if (control_mode == MODE_CLIENT) + if (!response_sent) + send_docking_command(tag_target, "confirm_dock") //tell the server we're ready + response_sent = 1 + + else if (control_mode == MODE_SERVER && received_confirm) + send_docking_command(tag_target, "confirm_dock") //tell the client we are done docking. + + dock_state = STATE_DOCKED + broadcast_docking_status() + + if (!override_enabled) + finish_docking() //server done docking! + response_sent = 0 + received_confirm = 0 + + if (STATE_UNDOCKING) + if (ready_for_undocking()) + if (control_mode == MODE_CLIENT) + if (!response_sent) + send_docking_command(tag_target, "confirm_undock") //tell the server we are OK to undock. + response_sent = 1 + + else if (control_mode == MODE_SERVER && received_confirm) + send_docking_command(tag_target, "confirm_undock") //tell the client we are done undocking. + if (!override_enabled) + finish_undocking() + reset() //server is done undocking! + + if (response_sent || resend_counter > 0) + resend_counter++ + + if (resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) + response_sent = 0 + resend_counter = 0 + + //handle invalid states + if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) + if (tag_target) + send_docking_command(tag_target, "dock_error") + reset() + if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED) + control_mode = MODE_NONE + + +/datum/embedded_program/docking/proc/initiate_docking(var/target) + if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake + return + + tag_target = target + control_mode = MODE_CLIENT + + send_docking_command(tag_target, "request_dock") + +/datum/embedded_program/docking/proc/initiate_undocking() + if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking + return + + dock_state = STATE_UNDOCKING + broadcast_docking_status() + + if (!override_enabled) + prepare_for_undocking() + + send_docking_command(tag_target, "request_undock") + +//tell the docking port to start getting ready for docking - e.g. pressurize +/datum/embedded_program/docking/proc/prepare_for_docking() + return + +//are we ready for docking? +/datum/embedded_program/docking/proc/ready_for_docking() + return 1 + +//we are docked, open the doors or whatever. +/datum/embedded_program/docking/proc/finish_docking() + return + +//tell the docking port to start getting ready for undocking - e.g. close those doors. +/datum/embedded_program/docking/proc/prepare_for_undocking() + return + +//we are docked, open the doors or whatever. +/datum/embedded_program/docking/proc/finish_undocking() + return + +//are we ready for undocking? +/datum/embedded_program/docking/proc/ready_for_undocking() + return 1 + +/datum/embedded_program/docking/proc/enable_override() + override_enabled = 1 + +/datum/embedded_program/docking/proc/disable_override() + override_enabled = 0 + +/datum/embedded_program/docking/proc/reset() + dock_state = STATE_UNDOCKED + broadcast_docking_status() + + control_mode = MODE_NONE + tag_target = null + response_sent = 0 + received_confirm = 0 + +/datum/embedded_program/docking/proc/force_undock() + //to_world("[id_tag]: forcing undock") + if (tag_target) + send_docking_command(tag_target, "dock_error") + reset() + +/datum/embedded_program/docking/proc/docked() + return (dock_state == STATE_DOCKED) + +/datum/embedded_program/docking/proc/undocked() + return (dock_state == STATE_UNDOCKED) + +//returns 1 if we are saftely undocked (and the shuttle can leave) +/datum/embedded_program/docking/proc/can_launch() + return undocked() + +/datum/embedded_program/docking/proc/send_docking_command(var/recipient, var/command) + var/datum/signal/signal = new + signal.data["tag"] = id_tag + signal.data["command"] = command + signal.data["recipient"] = recipient + signal.data["code"] = docking_codes + post_signal(signal) + +/datum/embedded_program/docking/proc/broadcast_docking_status() + var/datum/signal/signal = new + signal.data["tag"] = id_tag + signal.data["dock_status"] = get_docking_status() + post_signal(signal) + +//this is mostly for NanoUI +/datum/embedded_program/docking/proc/get_docking_status() + switch (dock_state) + if (STATE_UNDOCKED) return "undocked" + if (STATE_DOCKING) return "docking" + if (STATE_UNDOCKING) return "undocking" + if (STATE_DOCKED) return "docked" + +/datum/embedded_program/docking/proc/get_name() + return display_name ? display_name : "[get_area(master)] ([master.x], [master.y])" + +#undef STATE_UNDOCKED +#undef STATE_DOCKING +#undef STATE_UNDOCKING +#undef STATE_DOCKED + +#undef MODE_NONE +#undef MODE_SERVER #undef MODE_CLIENT \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 4a05005ac5..268bde37ce 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -1,109 +1,109 @@ -/obj/machinery/embedded_controller - name = "Embedded Controller" - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 10 - var/datum/embedded_program/program //the currently executing program - var/list/valid_actions = list() - var/on = 1 - -/obj/machinery/embedded_controller/Initialize() - if(ispath(program)) - program = new program(src) - return ..() - -/obj/machinery/embedded_controller/Destroy() - if(istype(program)) - qdel(program) // the program will clear the ref in its Destroy - return ..() - -/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) - return 0 - -/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param) - if(!signal || signal.encryption) return - - if(program) - program.receive_signal(signal, receive_method, receive_param) - -/obj/machinery/embedded_controller/Topic() - . = ..() - stack_trace("WARNING: Embedded controller [src] ([type]) had Topic() called unexpectedly. Please report this.") - -/obj/machinery/embedded_controller/tgui_act(action, params) - if(..()) - return TRUE - if(LAZYLEN(valid_actions)) - if(action in valid_actions) - program.receive_user_command(action) - if(usr) - add_fingerprint(usr) - -/obj/machinery/embedded_controller/process() - if(program) - program.process() - - update_icon() - -/obj/machinery/embedded_controller/attack_ai(mob/user as mob) - tgui_interact(user) - -/obj/machinery/embedded_controller/attack_hand(mob/user as mob) - if(!user.IsAdvancedToolUser()) - return 0 - - tgui_interact(user) - -/obj/machinery/embedded_controller/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "EmbeddedController", src) - ui.open() - -// -// Embedded controller with a radio! (Most things (All things?) use this) -// -/obj/machinery/embedded_controller/radio - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_control_standby" - power_channel = ENVIRON - density = FALSE - unacidable = TRUE - - var/id_tag - //var/radio_power_use = 50 //power used to xmit signals - - var/frequency = 1379 - var/radio_filter = null - var/datum/radio_frequency/radio_connection - -/obj/machinery/embedded_controller/radio/Initialize() - set_frequency(frequency) // Set it before parent instantiates program - . = ..() - -/obj/machinery/embedded_controller/radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() - -/obj/machinery/embedded_controller/radio/update_icon() - 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/post_signal(datum/signal/signal, var/radio_filter = null) - signal.transmission_method = TRANSMISSION_RADIO - if(radio_connection) - //use_power(radio_power_use) //neat idea, but causes way too much lag. - return radio_connection.post_signal(src, signal, radio_filter) - else - qdel(signal) - -/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency +/obj/machinery/embedded_controller + name = "Embedded Controller" + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 10 + var/datum/embedded_program/program //the currently executing program + var/list/valid_actions = list() + var/on = 1 + +/obj/machinery/embedded_controller/Initialize() + if(ispath(program)) + program = new program(src) + return ..() + +/obj/machinery/embedded_controller/Destroy() + if(istype(program)) + qdel(program) // the program will clear the ref in its Destroy + return ..() + +/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) + return 0 + +/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param) + if(!signal || signal.encryption) return + + if(program) + program.receive_signal(signal, receive_method, receive_param) + +/obj/machinery/embedded_controller/Topic() + . = ..() + stack_trace("WARNING: Embedded controller [src] ([type]) had Topic() called unexpectedly. Please report this.") + +/obj/machinery/embedded_controller/tgui_act(action, params) + if(..()) + return TRUE + if(LAZYLEN(valid_actions)) + if(action in valid_actions) + program.receive_user_command(action) + if(usr) + add_fingerprint(usr) + +/obj/machinery/embedded_controller/process() + if(program) + program.process() + + update_icon() + +/obj/machinery/embedded_controller/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/embedded_controller/attack_hand(mob/user as mob) + if(!user.IsAdvancedToolUser()) + return 0 + + tgui_interact(user) + +/obj/machinery/embedded_controller/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EmbeddedController", src) + ui.open() + +// +// Embedded controller with a radio! (Most things (All things?) use this) +// +/obj/machinery/embedded_controller/radio + icon = 'icons/obj/airlock_machines.dmi' + icon_state = "airlock_control_standby" + power_channel = ENVIRON + density = FALSE + unacidable = TRUE + + var/id_tag + //var/radio_power_use = 50 //power used to xmit signals + + var/frequency = 1379 + var/radio_filter = null + var/datum/radio_frequency/radio_connection + +/obj/machinery/embedded_controller/radio/Initialize() + set_frequency(frequency) // Set it before parent instantiates program + . = ..() + +/obj/machinery/embedded_controller/radio/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + ..() + +/obj/machinery/embedded_controller/radio/update_icon() + 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/post_signal(datum/signal/signal, var/radio_filter = null) + signal.transmission_method = TRANSMISSION_RADIO + if(radio_connection) + //use_power(radio_power_use) //neat idea, but causes way too much lag. + return radio_connection.post_signal(src, signal, radio_filter) + else + qdel(signal) + +/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, radio_filter) \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 664d60de81..7e49d792df 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -1,31 +1,31 @@ -/datum/embedded_program - var/name - var/list/memory = list() - var/obj/machinery/embedded_controller/master - - var/id_tag - -/datum/embedded_program/New(var/obj/machinery/embedded_controller/M) - master = M - if (istype(M, /obj/machinery/embedded_controller/radio)) - var/obj/machinery/embedded_controller/radio/R = M - id_tag = R.id_tag - -/datum/embedded_program/Destroy() - if(master) - master.program = null - master = null - return ..() - -// Return TRUE if was a command for us, otherwise return FALSE (so controllers with multiple programs can try each in turn until one accepts) -/datum/embedded_program/proc/receive_user_command(command) - return FALSE - -/datum/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - return - -/datum/embedded_program/proc/post_signal(datum/signal/signal, comm_line) - if(master) - master.post_signal(signal, comm_line) - else - qdel(signal) +/datum/embedded_program + var/name + var/list/memory = list() + var/obj/machinery/embedded_controller/master + + var/id_tag + +/datum/embedded_program/New(var/obj/machinery/embedded_controller/M) + master = M + if (istype(M, /obj/machinery/embedded_controller/radio)) + var/obj/machinery/embedded_controller/radio/R = M + id_tag = R.id_tag + +/datum/embedded_program/Destroy() + if(master) + master.program = null + master = null + return ..() + +// Return TRUE if was a command for us, otherwise return FALSE (so controllers with multiple programs can try each in turn until one accepts) +/datum/embedded_program/proc/receive_user_command(command) + return FALSE + +/datum/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) + return + +/datum/embedded_program/proc/post_signal(datum/signal/signal, comm_line) + if(master) + master.post_signal(signal, comm_line) + else + qdel(signal) diff --git a/code/game/machinery/event/christmas_ch.dm b/code/game/machinery/event/christmas_ch.dm index c930d27b53..415b16ed7c 100644 --- a/code/game/machinery/event/christmas_ch.dm +++ b/code/game/machinery/event/christmas_ch.dm @@ -1,74 +1,74 @@ -/obj/structure/event/present - name = "decorative present" - desc = "A gift! What cou- oh, it's made of plastic.." - icon = 'icons/obj/items_ch.dmi' - icon_state = "gift1_g" - - var/chaos = "I can do anything!" - anchored = 1.0 - density = 0 - -/obj/structure/event/present/New() - ..() - pixel_x = rand(-10,10) - pixel_y = rand(-10,10) - icon_state = "gift[pick("1", "2", "3")]_[pick("g", "r", "b", "y", "p")]" - return - -/obj/structure/event/santa_sack - - name = "Santa's sack" - desc = "A huge velvet sack full of presents! Only those who has been nice gets one from Santa!" - icon = 'icons/obj/storage_ch.dmi' - icon_state = "santasack" - - var/santa_ckey = null //The ckey set for the person acting as Santa, will be the only one able to anchor/unachor as well as retrieve presents. - var/list/nice_list_log = list() //The log that will contain all characters and their ckeys that the santa has given a gift to. - var/list/ckey_log = list() //The log that ensures nobody is naughty and tries to trick Santa into giving them twice! - anchored = 1.0 - density = 1 - -/obj/structure/event/santa_sack/verb/setanchor() - set name = "Bind/unbind sack" - set category = "Object" - set src in view(1) - - if(usr.incapacitated()) - return - if(usr.ckey == santa_ckey) - if(anchored == 0) - anchored = 1 - to_chat(usr,"You bind the sack, none can make off with it now! ") - else - anchored = 0 - to_chat(usr,"Santa pulls out a present for [T.name]! \"Merry Christmas!",1) - - var/santa_log = "[T.ckey] playing as [T.name] got a present!" - nice_list_log[++nice_list_log.len] = santa_log - ckey_log[user.ckey] = TRUE +/obj/structure/event/present + name = "decorative present" + desc = "A gift! What cou- oh, it's made of plastic.." + icon = 'icons/obj/items_ch.dmi' + icon_state = "gift1_g" + + var/chaos = "I can do anything!" + anchored = 1.0 + density = 0 + +/obj/structure/event/present/New() + ..() + pixel_x = rand(-10,10) + pixel_y = rand(-10,10) + icon_state = "gift[pick("1", "2", "3")]_[pick("g", "r", "b", "y", "p")]" + return + +/obj/structure/event/santa_sack + + name = "Santa's sack" + desc = "A huge velvet sack full of presents! Only those who has been nice gets one from Santa!" + icon = 'icons/obj/storage_ch.dmi' + icon_state = "santasack" + + var/santa_ckey = null //The ckey set for the person acting as Santa, will be the only one able to anchor/unachor as well as retrieve presents. + var/list/nice_list_log = list() //The log that will contain all characters and their ckeys that the santa has given a gift to. + var/list/ckey_log = list() //The log that ensures nobody is naughty and tries to trick Santa into giving them twice! + anchored = 1.0 + density = 1 + +/obj/structure/event/santa_sack/verb/setanchor() + set name = "Bind/unbind sack" + set category = "Object" + set src in view(1) + + if(usr.incapacitated()) + return + if(usr.ckey == santa_ckey) + if(anchored == 0) + anchored = 1 + to_chat(usr,"You bind the sack, none can make off with it now! ") + else + anchored = 0 + to_chat(usr,"Santa pulls out a present for [T.name]! \"Merry Christmas!",1) + + var/santa_log = "[T.ckey] playing as [T.name] got a present!" + nice_list_log[++nice_list_log.len] = santa_log + ckey_log[user.ckey] = TRUE //Currently doesnt have an ingame way to show. Can only be viewed through View-Variables, to ensure theres no chance of players ckeys exposed - Jack \ No newline at end of file diff --git a/code/game/machinery/event/stage_vr.dm b/code/game/machinery/event/stage_vr.dm index 1ed1e6c419..24b4bd62eb 100644 --- a/code/game/machinery/event/stage_vr.dm +++ b/code/game/machinery/event/stage_vr.dm @@ -1,10 +1,10 @@ -/obj/structure/event/stage - name = "stage" - desc = "It's a stage!" - icon = 'icons/misc/event/stage.dmi' - icon_state = "stage1" - anchored = TRUE - density = FALSE - pixel_y = -224 - pixel_x = -224 +/obj/structure/event/stage + name = "stage" + desc = "It's a stage!" + icon = 'icons/misc/event/stage.dmi' + icon_state = "stage1" + anchored = TRUE + density = FALSE + pixel_y = -224 + pixel_x = -224 plane = -44 \ No newline at end of file diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 6668d1cf39..47041e6875 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -1,148 +1,148 @@ -// It is a gizmo that flashes a small area -/obj/machinery/flasher - name = "Mounted flash" - desc = "A wall-mounted flashbulb device." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mflash1" - layer = ABOVE_WINDOW_LAYER - var/id = null - var/range = 2 //this is roughly the size of brig cell - var/disable = 0 - var/last_flash = 0 //Don't want it getting spammed like regular flashes - var/strength = 10 //How weakened targets are when flashed. - var/base_state = "mflash" - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - -/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored - name = "portable flasher" - desc = "A portable flashing device. Wrench to activate and deactivate. Cannot detect slow movements." - icon_state = "pflash1" - strength = 8 - anchored = FALSE - base_state = "pflash" - density = TRUE - -/obj/machinery/flasher/power_change() - ..() - if(!(stat & NOPOWER)) - icon_state = "[base_state]1" -// sd_SetLuminosity(2) - else - icon_state = "[base_state]1-p" -// sd_SetLuminosity(0) - -//Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WIRECUTTER)) - add_fingerprint(user) - disable = !disable - if(disable) - user.visible_message("[user] has disconnected the [src]'s flashbulb!", "You disconnect the [src]'s flashbulb!") - if(!disable) - user.visible_message("[user] has connected the [src]'s flashbulb!", "You connect the [src]'s flashbulb!") - -//Let the AI trigger them directly. -/obj/machinery/flasher/attack_ai() - if(anchored) - return flash() - else - return - -/obj/machinery/flasher/proc/flash() - if(!(powered())) - return - - if((disable) || (last_flash && world.time < last_flash + 150)) - return - - playsound(src, 'sound/weapons/flash.ogg', 100, 1) - flick("[base_state]_flash", src) - last_flash = world.time - use_power(1500) - - for (var/mob/O in viewers(src, null)) - if(get_dist(src, O) > range) - continue - - var/flash_time = strength - if(istype(O, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = O - //VOREStation Edit Start - if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION)) - H.nif.notify("High intensity light detected, and blocked!",TRUE) - continue - //VOREStation Edit End - if(!H.eyecheck() <= 0) - continue - flash_time *= H.species.flash_mod - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] - if(!E) - return - if(E.is_bruised() && prob(E.damage + 50)) - H.flash_eyes() - E.damage += rand(1, 5) - else - if(!O.blinded && isliving(O)) - var/mob/living/L = O - L.flash_eyes() - O.Weaken(flash_time) - -/obj/machinery/flasher/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - if(prob(75/severity)) - flash() - ..(severity) - -/obj/machinery/flasher/portable/HasProximity(turf/T, atom/movable/AM, oldloc) - if(disable || !anchored || (last_flash && world.time < last_flash + 150)) - return - - if(iscarbon(AM)) - var/mob/living/carbon/M = AM - if(M.m_intent != "walk") - flash() - -/obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - add_fingerprint(user) - anchored = !anchored - - if(!anchored) - user.show_message(text("[src] can now be moved.")) - cut_overlays() - unsense_proximity(callback = /atom/proc/HasProximity) - - else if(anchored) - user.show_message(text("[src] is now secured.")) - add_overlay("[base_state]-s") - sense_proximity(callback = /atom/proc/HasProximity) - -/obj/machinery/button/flasher - name = "flasher button" - desc = "A remote control switch for a mounted flasher." - -/obj/machinery/button/flasher/attack_hand(mob/user as mob) - - if(..()) - return - - use_power(5) - - active = 1 - icon_state = "launcheract" - - for(var/obj/machinery/flasher/M in machines) - if(M.id == id) - spawn() - M.flash() - - sleep(50) - - icon_state = "launcherbtt" - active = 0 - +// It is a gizmo that flashes a small area +/obj/machinery/flasher + name = "Mounted flash" + desc = "A wall-mounted flashbulb device." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "mflash1" + layer = ABOVE_WINDOW_LAYER + var/id = null + var/range = 2 //this is roughly the size of brig cell + var/disable = 0 + var/last_flash = 0 //Don't want it getting spammed like regular flashes + var/strength = 10 //How weakened targets are when flashed. + var/base_state = "mflash" + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + +/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored + name = "portable flasher" + desc = "A portable flashing device. Wrench to activate and deactivate. Cannot detect slow movements." + icon_state = "pflash1" + strength = 8 + anchored = FALSE + base_state = "pflash" + density = TRUE + +/obj/machinery/flasher/power_change() + ..() + if(!(stat & NOPOWER)) + icon_state = "[base_state]1" +// sd_SetLuminosity(2) + else + icon_state = "[base_state]1-p" +// sd_SetLuminosity(0) + +//Don't want to render prison breaks impossible +/obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WIRECUTTER)) + add_fingerprint(user) + disable = !disable + if(disable) + user.visible_message("[user] has disconnected the [src]'s flashbulb!", "You disconnect the [src]'s flashbulb!") + if(!disable) + user.visible_message("[user] has connected the [src]'s flashbulb!", "You connect the [src]'s flashbulb!") + +//Let the AI trigger them directly. +/obj/machinery/flasher/attack_ai() + if(anchored) + return flash() + else + return + +/obj/machinery/flasher/proc/flash() + if(!(powered())) + return + + if((disable) || (last_flash && world.time < last_flash + 150)) + return + + playsound(src, 'sound/weapons/flash.ogg', 100, 1) + flick("[base_state]_flash", src) + last_flash = world.time + use_power(1500) + + for (var/mob/O in viewers(src, null)) + if(get_dist(src, O) > range) + continue + + var/flash_time = strength + if(istype(O, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = O + //VOREStation Edit Start + if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION)) + H.nif.notify("High intensity light detected, and blocked!",TRUE) + continue + //VOREStation Edit End + if(!H.eyecheck() <= 0) + continue + flash_time *= H.species.flash_mod + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] + if(!E) + return + if(E.is_bruised() && prob(E.damage + 50)) + H.flash_eyes() + E.damage += rand(1, 5) + else + if(!O.blinded && isliving(O)) + var/mob/living/L = O + L.flash_eyes() + O.Weaken(flash_time) + +/obj/machinery/flasher/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + if(prob(75/severity)) + flash() + ..(severity) + +/obj/machinery/flasher/portable/HasProximity(turf/T, atom/movable/AM, oldloc) + if(disable || !anchored || (last_flash && world.time < last_flash + 150)) + return + + if(iscarbon(AM)) + var/mob/living/carbon/M = AM + if(M.m_intent != "walk") + flash() + +/obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + add_fingerprint(user) + anchored = !anchored + + if(!anchored) + user.show_message(text("[src] can now be moved.")) + cut_overlays() + unsense_proximity(callback = /atom/proc/HasProximity) + + else if(anchored) + user.show_message(text("[src] is now secured.")) + add_overlay("[base_state]-s") + sense_proximity(callback = /atom/proc/HasProximity) + +/obj/machinery/button/flasher + name = "flasher button" + desc = "A remote control switch for a mounted flasher." + +/obj/machinery/button/flasher/attack_hand(mob/user as mob) + + if(..()) + return + + use_power(5) + + active = 1 + icon_state = "launcheract" + + for(var/obj/machinery/flasher/M in machines) + if(M.id == id) + spawn() + M.flash() + + sleep(50) + + icon_state = "launcherbtt" + active = 0 + return \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 0df4174d1b..a48fa1e79e 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -1,259 +1,259 @@ -/* 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. -Only one AI may project from a holopad at any given time. -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 -#define RANGE_BASED 4 -#define AREA_BASED 6 - -var/const/HOLOPAD_MODE = RANGE_BASED - -/obj/machinery/hologram/holopad - name = "\improper AI holopad" - desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." - icon_state = "holopad0" - show_messages = 1 - circuit = /obj/item/weapon/circuitboard/holopad - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - var/power_per_hologram = 500 //per usage per hologram - idle_power_usage = 5 - use_power = USE_POWER_IDLE - var/list/mob/living/silicon/ai/masters = new() //List of AIs that use the holopad - 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. - -/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob) - if(computer_deconstruction_screwdriver(user, I)) - return - else - attack_hand(user) - return - -/obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. - if(!istype(user)) - return - if(tgui_alert(user,"Would you like to request an AI's presence?","Request AI",list("Yes","No")) == "Yes") - if(last_request + 200 < world.time) //don't spam the AI with requests you jerk! - last_request = world.time - to_chat(user, "You request an AI's presence.") - var/area/area = get_area(src) - for(var/mob/living/silicon/ai/AI in living_mob_list) - if(!AI.client) continue - to_chat(AI, "Your presence is requested at \the [area].") - else - to_chat(user, "A request for AI presence was already sent recently.") - -/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) - if(!istype(user)) - 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(!masters[user])//If there is no hologram, possibly make one. - activate_holo(user) - else//If there is a hologram, remove it. - clear_holo(user) - return - -/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user) - if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it - if(user.holo) - to_chat(user, "ERROR: Image feed in progress.") - return - create_holo(user)//Create one. - visible_message("A holographic image of [user] flicks to life right before your eyes!") - else - to_chat(user, "ERROR: Unable to project hologram.") - return - -/*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/hologram/holopad/hear_talk(mob/M, list/message_pieces, verb) - if(M && LAZYLEN(masters)) - for(var/mob/living/silicon/ai/master in masters) - if(masters[master] && M != master) - master.relay_speech(M, message_pieces, verb) - -/obj/machinery/hologram/holopad/see_emote(mob/living/M, text) - if(M) - for(var/mob/living/silicon/ai/master in masters) - //var/name_used = M.GetVoice() - var/rendered = "Holopad received, [text]" - //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. - master.show_message(rendered, 2) - return - -/obj/machinery/hologram/holopad/show_message(msg, type, alt, alt_type) - for(var/mob/living/silicon/ai/master in masters) - var/rendered = "Holopad received, [msg]" - master.show_message(rendered, type) - return - -/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) - var/obj/effect/overlay/aiholo/hologram = new(T)//Spawn a blank effect at the location. //VOREStation Edit to specific type for adding vars - hologram.master = A //VOREStation Edit: So you can reference the master AI from in the hologram procs - hologram.icon = A.holo_icon - hologram.pixel_x = 16 - round(A.holo_icon.Width() / 2) //VOREStation Edit: centers the hologram on the tile - //hologram.mouse_opacity = 0//So you can't click on it. //VOREStation Removal - hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. - hologram.anchored = TRUE//So space wind cannot drag it. - hologram.name = "[A.name] (Hologram)"//If someone decides to right click. - - if(!isnull(color)) - hologram.color = color - else - hologram.color = A.holo_color - - if(hologram.color) //hologram lighting - hologram.set_light(2,1,hologram.color) - else - hologram.set_light(2) - - masters[A] = hologram - set_light(2) //pad lighting - icon_state = "holopad1" - flick("holopadload", src) //VOREStation Add - A.holo = src - if(LAZYLEN(masters)) - START_MACHINE_PROCESSING(src) - return 1 - -/obj/machinery/hologram/holopad/proc/clear_holo(mob/living/silicon/ai/user) - if(user.holo == src) - user.holo = null - qdel(masters[user])//Get rid of user's hologram - masters -= user //Discard AI from the list of those who use holopad - if(!masters.len)//If no users left - set_light(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) - icon_state = "holopad0" - return 1 - -/obj/machinery/hologram/holopad/process() - for (var/mob/living/silicon/ai/master in masters) - var/active_ai = (master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. - if((stat & NOPOWER) || !active_ai) - clear_holo(master) - continue - - use_power(power_per_hologram) - if(..() == PROCESS_KILL && !LAZYLEN(masters)) - return PROCESS_KILL - -/obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user) - if(masters[user]) - /*VOREStation Removal, using our own code - step_to(masters[user], user.eyeobj) // So it turns. - var/obj/effect/overlay/H = masters[user] - H.loc = get_turf(user.eyeobj) - masters[user] = H - */ - //VOREStation Add - Solid mass holovore tracking stuff - var/obj/effect/overlay/aiholo/H = masters[user] - if(H.bellied) - walk_to(H, user.eyeobj) //Walk-to respects obstacles - else - walk_towards(H, user.eyeobj) //Walk-towards does not - //Hologram left the screen (got stuck on a wall or something) - if(get_dist(H, user.eyeobj) > world.view) - clear_holo(user) - //VOREStation Add End - if((HOLOPAD_MODE == RANGE_BASED && (get_dist(H, src) > holo_range))) - clear_holo(user) - - if(HOLOPAD_MODE == AREA_BASED) - var/area/holopad_area = get_area(src) - var/area/hologram_area = get_area(H) - - if(!(hologram_area in holopad_area)) - clear_holo(user) - - return 1 - -/* - * Hologram - */ - -/obj/machinery/hologram - icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 5 - active_power_usage = 100 - -//Destruction procs. -/obj/machinery/hologram/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if(prob(50)) - qdel(src) - if(3.0) - if(prob(5)) - qdel(src) - return - -/obj/machinery/hologram/holopad/Destroy() - for (var/mob/living/silicon/ai/master in masters) - clear_holo(master) - return ..() - -/* -Holographic project of everything else. - -/mob/verb/hologram_test() - set name = "Hologram Debug New" - set category = "CURRENT DEBUG" - - var/obj/effect/overlay/hologram = new(loc)//Spawn a blank effect at the location. - var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused. - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(0.5)//Make it half transparent. - var/input = input(usr, "Select what icon state to use in effect.",,"") - if(input) - var/icon/alpha_mask = new('icons/effects/effects.dmi', "[input]") - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - hologram.icon = flat_icon - - to_world("Your icon should appear now.") - return -*/ - -/* - * Other Stuff: Is this even used? - */ -/obj/machinery/hologram/projector - name = "hologram projector" - desc = "It makes a hologram appear...with magnets or something..." - icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit - icon_state = "hologram0" - - -#undef RANGE_BASED -#undef AREA_BASED -#undef HOLOPAD_PASSIVE_POWER_USAGE -#undef HOLOGRAM_POWER_USAGE +/* 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. +Only one AI may project from a holopad at any given time. +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 +#define RANGE_BASED 4 +#define AREA_BASED 6 + +var/const/HOLOPAD_MODE = RANGE_BASED + +/obj/machinery/hologram/holopad + name = "\improper AI holopad" + desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." + icon_state = "holopad0" + show_messages = 1 + circuit = /obj/item/weapon/circuitboard/holopad + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + var/power_per_hologram = 500 //per usage per hologram + idle_power_usage = 5 + use_power = USE_POWER_IDLE + var/list/mob/living/silicon/ai/masters = new() //List of AIs that use the holopad + 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. + +/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob) + if(computer_deconstruction_screwdriver(user, I)) + return + else + attack_hand(user) + return + +/obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. + if(!istype(user)) + return + if(tgui_alert(user,"Would you like to request an AI's presence?","Request AI",list("Yes","No")) == "Yes") + if(last_request + 200 < world.time) //don't spam the AI with requests you jerk! + last_request = world.time + to_chat(user, "You request an AI's presence.") + var/area/area = get_area(src) + for(var/mob/living/silicon/ai/AI in living_mob_list) + if(!AI.client) continue + to_chat(AI, "Your presence is requested at \the [area].") + else + to_chat(user, "A request for AI presence was already sent recently.") + +/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) + if(!istype(user)) + 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(!masters[user])//If there is no hologram, possibly make one. + activate_holo(user) + else//If there is a hologram, remove it. + clear_holo(user) + return + +/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user) + if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it + if(user.holo) + to_chat(user, "ERROR: Image feed in progress.") + return + create_holo(user)//Create one. + visible_message("A holographic image of [user] flicks to life right before your eyes!") + else + to_chat(user, "ERROR: Unable to project hologram.") + return + +/*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/hologram/holopad/hear_talk(mob/M, list/message_pieces, verb) + if(M && LAZYLEN(masters)) + for(var/mob/living/silicon/ai/master in masters) + if(masters[master] && M != master) + master.relay_speech(M, message_pieces, verb) + +/obj/machinery/hologram/holopad/see_emote(mob/living/M, text) + if(M) + for(var/mob/living/silicon/ai/master in masters) + //var/name_used = M.GetVoice() + var/rendered = "Holopad received, [text]" + //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. + master.show_message(rendered, 2) + return + +/obj/machinery/hologram/holopad/show_message(msg, type, alt, alt_type) + for(var/mob/living/silicon/ai/master in masters) + var/rendered = "Holopad received, [msg]" + master.show_message(rendered, type) + return + +/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) + var/obj/effect/overlay/aiholo/hologram = new(T)//Spawn a blank effect at the location. //VOREStation Edit to specific type for adding vars + hologram.master = A //VOREStation Edit: So you can reference the master AI from in the hologram procs + hologram.icon = A.holo_icon + hologram.pixel_x = 16 - round(A.holo_icon.Width() / 2) //VOREStation Edit: centers the hologram on the tile + //hologram.mouse_opacity = 0//So you can't click on it. //VOREStation Removal + hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. + hologram.anchored = TRUE//So space wind cannot drag it. + hologram.name = "[A.name] (Hologram)"//If someone decides to right click. + + if(!isnull(color)) + hologram.color = color + else + hologram.color = A.holo_color + + if(hologram.color) //hologram lighting + hologram.set_light(2,1,hologram.color) + else + hologram.set_light(2) + + masters[A] = hologram + set_light(2) //pad lighting + icon_state = "holopad1" + flick("holopadload", src) //VOREStation Add + A.holo = src + if(LAZYLEN(masters)) + START_MACHINE_PROCESSING(src) + return 1 + +/obj/machinery/hologram/holopad/proc/clear_holo(mob/living/silicon/ai/user) + if(user.holo == src) + user.holo = null + qdel(masters[user])//Get rid of user's hologram + masters -= user //Discard AI from the list of those who use holopad + if(!masters.len)//If no users left + set_light(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) + icon_state = "holopad0" + return 1 + +/obj/machinery/hologram/holopad/process() + for (var/mob/living/silicon/ai/master in masters) + var/active_ai = (master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. + if((stat & NOPOWER) || !active_ai) + clear_holo(master) + continue + + use_power(power_per_hologram) + if(..() == PROCESS_KILL && !LAZYLEN(masters)) + return PROCESS_KILL + +/obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user) + if(masters[user]) + /*VOREStation Removal, using our own code + step_to(masters[user], user.eyeobj) // So it turns. + var/obj/effect/overlay/H = masters[user] + H.loc = get_turf(user.eyeobj) + masters[user] = H + */ + //VOREStation Add - Solid mass holovore tracking stuff + var/obj/effect/overlay/aiholo/H = masters[user] + if(H.bellied) + walk_to(H, user.eyeobj) //Walk-to respects obstacles + else + walk_towards(H, user.eyeobj) //Walk-towards does not + //Hologram left the screen (got stuck on a wall or something) + if(get_dist(H, user.eyeobj) > world.view) + clear_holo(user) + //VOREStation Add End + if((HOLOPAD_MODE == RANGE_BASED && (get_dist(H, src) > holo_range))) + clear_holo(user) + + if(HOLOPAD_MODE == AREA_BASED) + var/area/holopad_area = get_area(src) + var/area/hologram_area = get_area(H) + + if(!(hologram_area in holopad_area)) + clear_holo(user) + + return 1 + +/* + * Hologram + */ + +/obj/machinery/hologram + icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 5 + active_power_usage = 100 + +//Destruction procs. +/obj/machinery/hologram/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + if(2.0) + if(prob(50)) + qdel(src) + if(3.0) + if(prob(5)) + qdel(src) + return + +/obj/machinery/hologram/holopad/Destroy() + for (var/mob/living/silicon/ai/master in masters) + clear_holo(master) + return ..() + +/* +Holographic project of everything else. + +/mob/verb/hologram_test() + set name = "Hologram Debug New" + set category = "CURRENT DEBUG" + + var/obj/effect/overlay/hologram = new(loc)//Spawn a blank effect at the location. + var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused. + flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. + flat_icon.ChangeOpacity(0.5)//Make it half transparent. + var/input = input(usr, "Select what icon state to use in effect.",,"") + if(input) + var/icon/alpha_mask = new('icons/effects/effects.dmi', "[input]") + flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. + hologram.icon = flat_icon + + to_world("Your icon should appear now.") + return +*/ + +/* + * Other Stuff: Is this even used? + */ +/obj/machinery/hologram/projector + name = "hologram projector" + desc = "It makes a hologram appear...with magnets or something..." + icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit + icon_state = "hologram0" + + +#undef RANGE_BASED +#undef AREA_BASED +#undef HOLOPAD_PASSIVE_POWER_USAGE +#undef HOLOGRAM_POWER_USAGE diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 52b313497a..461b80cf63 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -1,150 +1,150 @@ -/obj/machinery/igniter - name = "igniter" - desc = "It's useful for igniting flammable items." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "igniter1" - var/id = null - var/on = 1.0 - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 4 - -/obj/machinery/igniter/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/igniter/attack_hand(mob/user as mob) - if(..()) - return - add_fingerprint(user) - - use_power(50) - on = !(on) - icon_state = text("igniter[]", on) - return - -/obj/machinery/igniter/process() //ugh why is this even in process()? - if(on && !(stat & NOPOWER)) - var/turf/location = src.loc - if(isturf(location)) - location.hotspot_expose(1000,500,1) - return 1 - -/obj/machinery/igniter/New() - ..() - icon_state = "igniter[on]" - -/obj/machinery/igniter/power_change() - ..() - if(!(stat & NOPOWER)) - icon_state = "igniter[on]" - else - icon_state = "igniter0" - -// Wall mounted remote-control igniter. - -/obj/machinery/sparker - name = "Mounted igniter" - desc = "A wall-mounted ignition device." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "migniter" - layer = ABOVE_WINDOW_LAYER - var/id = null - var/disable = 0 - var/last_spark = 0 - var/base_state = "migniter" - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 4 - -/obj/machinery/sparker/New() - ..() - -/obj/machinery/sparker/power_change() - ..() - if(!(stat & NOPOWER) && disable == 0) - - icon_state = "[base_state]" -// sd_SetLuminosity(2) - else - icon_state = "[base_state]-p" -// sd_SetLuminosity(0) - -/obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - add_fingerprint(user) - disable = !disable - playsound(src, W.usesound, 50, 1) - if(disable) - user.visible_message("[user] has disabled the [src]!", "You disable the connection to the [src].") - icon_state = "[base_state]-d" - if(!disable) - user.visible_message("[user] has reconnected the [src]!", "You fix the connection to the [src].") - if(powered()) - icon_state = "[base_state]" - else - icon_state = "[base_state]-p" - -/obj/machinery/sparker/attack_ai() - if(anchored) - return ignite() - else - return - -/obj/machinery/sparker/proc/ignite() - if(!(powered())) - return - - if((disable) || (last_spark && world.time < last_spark + 50)) - return - - flick("[base_state]-spark", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - last_spark = world.time - use_power(1000) - var/turf/location = src.loc - if(isturf(location)) - location.hotspot_expose(1000,500,1) - return 1 - -/obj/machinery/sparker/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - ignite() - ..(severity) - -/obj/machinery/button/ignition - name = "ignition switch" - desc = "A remote control switch for a mounted igniter." - -/obj/machinery/button/ignition/attack_hand(mob/user as mob) - - if(..()) - return - - use_power(5) - - active = 1 - icon_state = "launcheract" - - for(var/obj/machinery/sparker/M in machines) - if(M.id == id) - spawn(0) - M.ignite() - - for(var/obj/machinery/igniter/M in machines) - if(M.id == id) - use_power(50) - M.on = !(M.on) - M.icon_state = text("igniter[]", M.on) - - sleep(50) - - icon_state = "launcherbtt" - active = 0 - +/obj/machinery/igniter + name = "igniter" + desc = "It's useful for igniting flammable items." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "igniter1" + var/id = null + var/on = 1.0 + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 4 + +/obj/machinery/igniter/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/igniter/attack_hand(mob/user as mob) + if(..()) + return + add_fingerprint(user) + + use_power(50) + on = !(on) + icon_state = text("igniter[]", on) + return + +/obj/machinery/igniter/process() //ugh why is this even in process()? + if(on && !(stat & NOPOWER)) + var/turf/location = src.loc + if(isturf(location)) + location.hotspot_expose(1000,500,1) + return 1 + +/obj/machinery/igniter/New() + ..() + icon_state = "igniter[on]" + +/obj/machinery/igniter/power_change() + ..() + if(!(stat & NOPOWER)) + icon_state = "igniter[on]" + else + icon_state = "igniter0" + +// Wall mounted remote-control igniter. + +/obj/machinery/sparker + name = "Mounted igniter" + desc = "A wall-mounted ignition device." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "migniter" + layer = ABOVE_WINDOW_LAYER + var/id = null + var/disable = 0 + var/last_spark = 0 + var/base_state = "migniter" + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 4 + +/obj/machinery/sparker/New() + ..() + +/obj/machinery/sparker/power_change() + ..() + if(!(stat & NOPOWER) && disable == 0) + + icon_state = "[base_state]" +// sd_SetLuminosity(2) + else + icon_state = "[base_state]-p" +// sd_SetLuminosity(0) + +/obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + add_fingerprint(user) + disable = !disable + playsound(src, W.usesound, 50, 1) + if(disable) + user.visible_message("[user] has disabled the [src]!", "You disable the connection to the [src].") + icon_state = "[base_state]-d" + if(!disable) + user.visible_message("[user] has reconnected the [src]!", "You fix the connection to the [src].") + if(powered()) + icon_state = "[base_state]" + else + icon_state = "[base_state]-p" + +/obj/machinery/sparker/attack_ai() + if(anchored) + return ignite() + else + return + +/obj/machinery/sparker/proc/ignite() + if(!(powered())) + return + + if((disable) || (last_spark && world.time < last_spark + 50)) + return + + flick("[base_state]-spark", src) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + last_spark = world.time + use_power(1000) + var/turf/location = src.loc + if(isturf(location)) + location.hotspot_expose(1000,500,1) + return 1 + +/obj/machinery/sparker/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + ignite() + ..(severity) + +/obj/machinery/button/ignition + name = "ignition switch" + desc = "A remote control switch for a mounted igniter." + +/obj/machinery/button/ignition/attack_hand(mob/user as mob) + + if(..()) + return + + use_power(5) + + active = 1 + icon_state = "launcheract" + + for(var/obj/machinery/sparker/M in machines) + if(M.id == id) + spawn(0) + M.ignite() + + for(var/obj/machinery/igniter/M in machines) + if(M.id == id) + use_power(50) + M.on = !(M.on) + M.icon_state = text("igniter[]", M.on) + + sleep(50) + + icon_state = "launcherbtt" + active = 0 + return \ No newline at end of file diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 51a1f3fb98..603618d1f3 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -1,185 +1,185 @@ -/obj/machinery/iv_drip - name = "\improper IV drip" - desc = "Helpful for giving someone blood! Or taking it away. It giveth, it taketh." - icon = 'icons/obj/iv_drip.dmi' - anchored = FALSE - density = FALSE - - -/obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null -/obj/machinery/iv_drip/var/mode = 1 // 1 is injecting, 0 is taking blood. -/obj/machinery/iv_drip/var/obj/item/weapon/reagent_containers/beaker = null - -/obj/machinery/iv_drip/update_icon() - if(attached) - icon_state = "hooked" - else - icon_state = "" - - cut_overlays() - - if(beaker) - var/datum/reagents/reagents = beaker.reagents - if(reagents.total_volume) - var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") - - var/percent = round((reagents.total_volume / beaker.volume) * 100) - switch(percent) - if(0 to 9) filling.icon_state = "reagent0" - if(10 to 24) filling.icon_state = "reagent10" - if(25 to 49) filling.icon_state = "reagent25" - if(50 to 74) filling.icon_state = "reagent50" - if(75 to 79) filling.icon_state = "reagent75" - if(80 to 90) filling.icon_state = "reagent80" - if(91 to INFINITY) filling.icon_state = "reagent100" - - filling.icon += reagents.get_color() - add_overlay(filling) - -/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location) - ..() - if(!isliving(usr)) - return - - if(attached) - visible_message("[attached] is detached from \the [src]") - attached = null - update_icon() - return - - if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1) - visible_message("[usr] attaches \the [src] to \the [over_object].") - attached = over_object - update_icon() - - -/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/reagent_containers)) - if(!isnull(beaker)) - to_chat(user, "There is already a reagent container loaded!") - return - - user.drop_item() - W.loc = src - beaker = W - to_chat(user, "You attach \the [W] to \the [src].") - update_icon() - return - - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You start to dismantle the IV drip.") - if(do_after(user, 15)) - to_chat(user, "You dismantle the IV drip.") - new /obj/item/stack/rods(src.loc, 6) - if(beaker) - beaker.loc = get_turf(src) - beaker = null - qdel(src) - return - else - return ..() - - -/obj/machinery/iv_drip/process() - set background = 1 - - if(attached) - - if(!(get_dist(src, attached) <= 1 && isturf(attached.loc))) - visible_message("The needle is ripped out of [attached], doesn't that hurt?") - attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm")) - attached = null - update_icon() - return - - if(attached && beaker) - // Give blood - if(mode) - if(beaker.volume > 0) - var/transfer_amount = REM - if(istype(beaker, /obj/item/weapon/reagent_containers/blood)) - // speed up transfer on blood packs - transfer_amount = 4 - beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD) - 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 == 0) - if(prob(5)) - visible_message("\The [src] pings.") - return - - var/mob/living/carbon/human/T = attached - - if(!istype(T)) - return - if(!T.dna) - return - if(NOCLONE in T.mutations) - return - - if(!T.should_have_organ(O_HEART)) - return - - // If the human is losing too much blood, beep. - if(T.vessel.get_reagent_amount("blood") < T.species.blood_volume*T.species.blood_level_safe) - visible_message("\The [src] beeps loudly.") - - var/datum/reagent/B = T.take_blood(beaker,amount) - - if(B) - beaker.reagents.reagent_list |= B - beaker.reagents.update_total() - beaker.on_reagent_change() - beaker.reagents.handle_reactions() - update_icon() - -/obj/machinery/iv_drip/attack_hand(mob/user as mob) - if(beaker) - beaker.loc = get_turf(src) - beaker = null - update_icon() - else - return ..() - - -/obj/machinery/iv_drip/verb/toggle_mode() - set category = "Object" - set name = "Toggle Mode" - set src in view(1) - - if(!istype(usr, /mob/living)) - to_chat(usr, "You can't do that.") - return - - if(usr.stat) - return - - mode = !mode - to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") - -/obj/machinery/iv_drip/examine(mob/user) - . = ..() - - if(get_dist(user, src) <= 2) - . += "The IV drip is [mode ? "injecting" : "taking blood"]." - - if(beaker) - if(beaker.reagents?.reagent_list?.len) - . += "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." - else - . += "Attached is an empty [beaker]." - else - . += "No chemicals are attached." - - . += "[attached ? attached : "No one"] is attached." - -/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through. - return TRUE - return ..() +/obj/machinery/iv_drip + name = "\improper IV drip" + desc = "Helpful for giving someone blood! Or taking it away. It giveth, it taketh." + icon = 'icons/obj/iv_drip.dmi' + anchored = FALSE + density = FALSE + + +/obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null +/obj/machinery/iv_drip/var/mode = 1 // 1 is injecting, 0 is taking blood. +/obj/machinery/iv_drip/var/obj/item/weapon/reagent_containers/beaker = null + +/obj/machinery/iv_drip/update_icon() + if(attached) + icon_state = "hooked" + else + icon_state = "" + + cut_overlays() + + if(beaker) + var/datum/reagents/reagents = beaker.reagents + if(reagents.total_volume) + var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") + + var/percent = round((reagents.total_volume / beaker.volume) * 100) + switch(percent) + if(0 to 9) filling.icon_state = "reagent0" + if(10 to 24) filling.icon_state = "reagent10" + if(25 to 49) filling.icon_state = "reagent25" + if(50 to 74) filling.icon_state = "reagent50" + if(75 to 79) filling.icon_state = "reagent75" + if(80 to 90) filling.icon_state = "reagent80" + if(91 to INFINITY) filling.icon_state = "reagent100" + + filling.icon += reagents.get_color() + add_overlay(filling) + +/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location) + ..() + if(!isliving(usr)) + return + + if(attached) + visible_message("[attached] is detached from \the [src]") + attached = null + update_icon() + return + + if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1) + visible_message("[usr] attaches \the [src] to \the [over_object].") + attached = over_object + update_icon() + + +/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/reagent_containers)) + if(!isnull(beaker)) + to_chat(user, "There is already a reagent container loaded!") + return + + user.drop_item() + W.loc = src + beaker = W + to_chat(user, "You attach \the [W] to \the [src].") + update_icon() + return + + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You start to dismantle the IV drip.") + if(do_after(user, 15)) + to_chat(user, "You dismantle the IV drip.") + new /obj/item/stack/rods(src.loc, 6) + if(beaker) + beaker.loc = get_turf(src) + beaker = null + qdel(src) + return + else + return ..() + + +/obj/machinery/iv_drip/process() + set background = 1 + + if(attached) + + if(!(get_dist(src, attached) <= 1 && isturf(attached.loc))) + visible_message("The needle is ripped out of [attached], doesn't that hurt?") + attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm")) + attached = null + update_icon() + return + + if(attached && beaker) + // Give blood + if(mode) + if(beaker.volume > 0) + var/transfer_amount = REM + if(istype(beaker, /obj/item/weapon/reagent_containers/blood)) + // speed up transfer on blood packs + transfer_amount = 4 + beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD) + 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 == 0) + if(prob(5)) + visible_message("\The [src] pings.") + return + + var/mob/living/carbon/human/T = attached + + if(!istype(T)) + return + if(!T.dna) + return + if(NOCLONE in T.mutations) + return + + if(!T.should_have_organ(O_HEART)) + return + + // If the human is losing too much blood, beep. + if(T.vessel.get_reagent_amount("blood") < T.species.blood_volume*T.species.blood_level_safe) + visible_message("\The [src] beeps loudly.") + + var/datum/reagent/B = T.take_blood(beaker,amount) + + if(B) + beaker.reagents.reagent_list |= B + beaker.reagents.update_total() + beaker.on_reagent_change() + beaker.reagents.handle_reactions() + update_icon() + +/obj/machinery/iv_drip/attack_hand(mob/user as mob) + if(beaker) + beaker.loc = get_turf(src) + beaker = null + update_icon() + else + return ..() + + +/obj/machinery/iv_drip/verb/toggle_mode() + set category = "Object" + set name = "Toggle Mode" + set src in view(1) + + if(!istype(usr, /mob/living)) + to_chat(usr, "You can't do that.") + return + + if(usr.stat) + return + + mode = !mode + to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") + +/obj/machinery/iv_drip/examine(mob/user) + . = ..() + + if(get_dist(user, src) <= 2) + . += "The IV drip is [mode ? "injecting" : "taking blood"]." + + if(beaker) + if(beaker.reagents?.reagent_list?.len) + . += "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." + else + . += "Attached is an empty [beaker]." + else + . += "No chemicals are attached." + + . += "[attached ? attached : "No one"] is attached." + +/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through. + return TRUE + return ..() diff --git a/code/game/machinery/jukebox_ch.dm b/code/game/machinery/jukebox_ch.dm index c15ce12aa7..fba5431ae9 100644 --- a/code/game/machinery/jukebox_ch.dm +++ b/code/game/machinery/jukebox_ch.dm @@ -1,12 +1,12 @@ - -/obj/machinery/media/jukebox/casinojukebox - name = "space casino jukebox" - desc = "A jukebox to play the tracks on the golden goose, jazzy~" - icon = 'icons/obj/casino_ch.dmi' - icon_state = "casinojukebox-nopower" - state_base = "casinojukebox" - - use_power = USE_POWER_OFF - -/obj/machinery/media/jukebox/casinojukebox/getTracksList() + +/obj/machinery/media/jukebox/casinojukebox + name = "space casino jukebox" + desc = "A jukebox to play the tracks on the golden goose, jazzy~" + icon = 'icons/obj/casino_ch.dmi' + icon_state = "casinojukebox-nopower" + state_base = "casinojukebox" + + use_power = USE_POWER_OFF + +/obj/machinery/media/jukebox/casinojukebox/getTracksList() return SSmedia_tracks.casino_tracks \ No newline at end of file diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 9a53516145..5340bd2dd5 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -1,89 +1,89 @@ -// the light switch -// can have multiple per area -// can also operate on non-loc area through "otherarea" var -/obj/machinery/light_switch - name = "light switch" - desc = "It turns lights on and off. What are you, simple?" - icon = 'icons/obj/power_vr.dmi' // VOREStation Edit - icon_state = "light1" - layer = ABOVE_WINDOW_LAYER - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 10 - power_channel = LIGHT - blocks_emissive = FALSE - vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature - var/on = 1 - var/area/area = null - var/otherarea = null - var/image/overlay - -/obj/machinery/light_switch/Initialize() - . = ..() - - area = get_area(src) - - if(otherarea) - area = locate(text2path("/area/[otherarea]")) - - if(!name) - name = "light switch ([area.name])" - - on = area.lightswitch - update_icon() - -/obj/machinery/light_switch/Destroy() - area = null - overlay = null - return ..() - -/obj/machinery/light_switch/update_icon() - cut_overlays() - if(stat & NOPOWER) - icon_state = "light-p" - set_light(0) - else - icon_state = "light[on]" - set_light(2, 0.1, on ? "#82FF4C" : "#F86060") - . = list() - . += emissive_appearance(icon, "light[on]-overlay") - - return add_overlay(.) - - -/obj/machinery/light_switch/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "A light switch. It is [on? "on" : "off"]." - -/obj/machinery/light_switch/attack_hand(mob/user) - - on = !on - - area.lightswitch = on - area.update_icon() - playsound(src, 'sound/machines/button.ogg', 100, 1, 0) // VOREStation Edit - - for(var/obj/machinery/light_switch/L in area) - L.on = on - L.update_icon() - - area.power_change() - GLOB.lights_switched_on_roundstat++ - -/obj/machinery/light_switch/power_change() - - if(!otherarea) - if(powered(LIGHT)) - stat &= ~NOPOWER - else - stat |= NOPOWER - - update_icon() - -/obj/machinery/light_switch/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - power_change() +// the light switch +// can have multiple per area +// can also operate on non-loc area through "otherarea" var +/obj/machinery/light_switch + name = "light switch" + desc = "It turns lights on and off. What are you, simple?" + icon = 'icons/obj/power_vr.dmi' // VOREStation Edit + icon_state = "light1" + layer = ABOVE_WINDOW_LAYER + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 10 + power_channel = LIGHT + blocks_emissive = FALSE + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature + var/on = 1 + var/area/area = null + var/otherarea = null + var/image/overlay + +/obj/machinery/light_switch/Initialize() + . = ..() + + area = get_area(src) + + if(otherarea) + area = locate(text2path("/area/[otherarea]")) + + if(!name) + name = "light switch ([area.name])" + + on = area.lightswitch + update_icon() + +/obj/machinery/light_switch/Destroy() + area = null + overlay = null + return ..() + +/obj/machinery/light_switch/update_icon() + cut_overlays() + if(stat & NOPOWER) + icon_state = "light-p" + set_light(0) + else + icon_state = "light[on]" + set_light(2, 0.1, on ? "#82FF4C" : "#F86060") + . = list() + . += emissive_appearance(icon, "light[on]-overlay") + + return add_overlay(.) + + +/obj/machinery/light_switch/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "A light switch. It is [on? "on" : "off"]." + +/obj/machinery/light_switch/attack_hand(mob/user) + + on = !on + + area.lightswitch = on + area.update_icon() + playsound(src, 'sound/machines/button.ogg', 100, 1, 0) // VOREStation Edit + + for(var/obj/machinery/light_switch/L in area) + L.on = on + L.update_icon() + + area.power_change() + GLOB.lights_switched_on_roundstat++ + +/obj/machinery/light_switch/power_change() + + if(!otherarea) + if(powered(LIGHT)) + stat &= ~NOPOWER + else + stat |= NOPOWER + + update_icon() + +/obj/machinery/light_switch/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + power_change() ..(severity) \ No newline at end of file diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 00010da9cc..d991eddae9 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -1,571 +1,571 @@ -/* -Overview: - Used to create objects that need a per step proc call. Default definition of 'New()' - stores a reference to src machine in global 'machines list'. Default definition - of 'Del' removes reference to src machine in global 'machines list'. - -Class Variables: - - power_init_complete (boolean) - Indicates that we have have registered our static power usage with the area. - - use_power (num) - current state of auto power use. - Possible Values: - USE_POWER_OFF:0 -- no auto power use - USE_POWER_IDLE:1 -- machine is using power at its idle power level - USE_POWER_ACTIVE:2 -- machine is using power at its active power level - - active_power_usage (num) - Value for the amount of power to use when in active power mode - - idle_power_usage (num) - Value for the amount of power to use when in idle power mode - - power_channel (num) - What channel to draw from when drawing power for power mode - Possible Values: - EQUIP:0 -- Equipment Channel - LIGHT:2 -- Lighting Channel - ENVIRON:3 -- Environment Channel - - component_parts (list) - A list of component parts of machine used by frame based machines. - - panel_open (num) - Whether the panel is open - - uid (num) - Unique id of machine across all machines. - - gl_uid (global num) - Next uid value in sequence - - stat (bitflag) - Machine status bit flags. - Possible bit flags: - BROKEN:1 -- Machine is broken - NOPOWER:2 -- No power is being supplied to machine. - POWEROFF:4 -- tbd - MAINT:8 -- machine is currently under going maintenance. - EMPED:16 -- temporary broken by EMP pulse - -Class Procs: - New() 'game/machinery/machine.dm' - - Destroy() 'game/machinery/machine.dm' - - get_power_usage() 'game/machinery/machinery_power.dm' - Returns the amount of power this machine uses every SSmachines cycle. - Default definition uses 'use_power', 'active_power_usage', 'idle_power_usage' - - powered(chan = CURRENT_CHANNEL) 'game/machinery/machinery_power.dm' - Checks to see if area that contains the object has power available for power - channel given in 'chan'. - - use_power_oneoff(amount, chan=CURRENT_CHANNEL) 'game/machinery/machinery_power.dm' - Deducts 'amount' from the power channel 'chan' of the area that contains the object. - - power_change() 'game/machinery/machinery_power.dm' - Called by the area that contains the object when ever that area under goes a - power state change (area runs out of power, or area channel is turned off). - - RefreshParts() 'game/machinery/machine.dm' - Called to refresh the variables in the machine that are contributed to by parts - contained in the component_parts list. (example: glass and material amounts for - the autolathe) - - Default definition does nothing. - - assign_uid() 'game/machinery/machine.dm' - Called by machine to assign a value to the uid variable. - - process() 'game/machinery/machine.dm' - Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list. - - - Compiled by Aygar -*/ - -/obj/machinery - name = "machinery" - icon = 'icons/obj/stationobjs.dmi' - w_class = ITEMSIZE_NO_CONTAINER - layer = UNDER_JUNK_LAYER - - var/stat = 0 - var/emagged = 0 - var/use_power = USE_POWER_IDLE - //0 = dont run the auto - //1 = run auto, use idle - //2 = run auto, use active - var/idle_power_usage = 0 - var/active_power_usage = 0 - var/power_channel = EQUIP //EQUIP, ENVIRON or LIGHT - var/power_init_complete = FALSE - var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames. - var/uid - var/panel_open = FALSE - var/global/gl_uid = 1 - var/clicksound // sound played on succesful interface. Just put it in the list of vars at the start. - var/clickvol = 40 // volume - var/interact_offline = 0 // Can the machine be interacted with while de-powered. - var/obj/item/weapon/circuitboard/circuit = null - - // 0.0 - 1.0 multipler for prob() based on bullet structure damage - // So if this is 1.0 then a 100 damage bullet will always break this structure - // If this is 0.5 then a 50 damage bullet will break this structure 25% of the time - var/bullet_vulnerability = 0.25 - - var/speed_process = FALSE //If false, SSmachines. If true, SSfastprocess. - - blocks_emissive = EMISSIVE_BLOCK_GENERIC - -/obj/machinery/New(l, d=0) - ..() - if(isnum(d)) - set_dir(d) - if(ispath(circuit)) - circuit = new circuit(src) - -/obj/machinery/Initialize(var/mapload) - . = ..() - global.machines += src - if(ispath(circuit)) - circuit = new circuit(src) - if(!speed_process) - START_MACHINE_PROCESSING(src) - else - START_PROCESSING(SSfastprocess, src) - if(!mapload) - power_change() - -/obj/machinery/Destroy() - if(!speed_process) - STOP_MACHINE_PROCESSING(src) - else - STOP_PROCESSING(SSfastprocess, src) - global.machines -= src - if(component_parts) - for(var/atom/A in component_parts) - if(A.loc == src) // If the components are inside the machine, delete them. - qdel(A) - else // Otherwise we assume they were dropped to the ground during deconstruction, and were not removed from the component_parts list by deconstruction code. - warning("[A] was still in [src]'s component_parts when it was Destroy()'d") - component_parts.Cut() - component_parts = null - if(contents) // The same for contents. - for(var/atom/A in contents) - if(ishuman(A)) - var/mob/living/carbon/human/H = A - H.client.eye = H.client.mob - H.client.perspective = MOB_PERSPECTIVE - H.loc = src.loc - else - qdel(A) - return ..() - -/obj/machinery/process() // Steady power usage is handled separately. If you dont use process why are you here? - return PROCESS_KILL - -/obj/machinery/emp_act(severity) - if(use_power && stat == 0) - use_power(7500/severity) - - var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc) - pulse2.icon = 'icons/effects/effects.dmi' - pulse2.icon_state = "empdisable" - pulse2.name = "emp sparks" - pulse2.anchored = TRUE - pulse2.set_dir(pick(cardinal)) - - spawn(10) - qdel(pulse2) - ..() - -/obj/machinery/ex_act(severity) - switch(severity) - if(1.0) - fall_apart(severity) - return - if(2.0) - if(prob(50)) - fall_apart(severity) - return - if(3.0) - if(prob(25)) - fall_apart(severity) - return - else - return - -/obj/machinery/vv_edit_var(var/var_name, var/new_value) - if(var_name == NAMEOF(src, use_power)) - update_use_power(new_value) - return TRUE - else if(var_name == NAMEOF(src, power_channel)) - update_power_channel(new_value) - return TRUE - else if(var_name == NAMEOF(src, idle_power_usage)) - update_idle_power_usage(new_value) - return TRUE - else if(var_name == NAMEOF(src, active_power_usage)) - update_active_power_usage(new_value) - return TRUE - return ..() - -/obj/machinery/proc/operable(var/additional_flags = 0) - return !inoperable(additional_flags) - -/obj/machinery/proc/inoperable(var/additional_flags = 0) - return (stat & (NOPOWER | BROKEN | additional_flags)) - -// Duplicate of below because we don't want to fuck around with CanUseTopic in TGUI -// TODO: Replace this with can_interact from /tg/ -/obj/machinery/tgui_status(mob/user) - if(!interact_offline && (stat & (NOPOWER | BROKEN))) - return STATUS_CLOSE - return ..() - -/obj/machinery/CanUseTopic(var/mob/user) - if(!interact_offline && (stat & (NOPOWER | BROKEN))) - return STATUS_CLOSE - return ..() - -/obj/machinery/CouldUseTopic(var/mob/user) - ..() - user.set_machine(src) - -/obj/machinery/CouldNotUseTopic(var/mob/user) - user.unset_machine() - -//////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/attack_ai(mob/user as mob) - if(isrobot(user)) - // For some reason attack_robot doesn't work - // This is to stop robots from using cameras to remotely control machines. - if(user.client && user.client.eye == user) - return attack_hand(user) - else - return attack_hand(user) - -/obj/machinery/attack_hand(mob/user as mob) - - if(inoperable(MAINT)) - return 1 - if(user.lying || user.stat) - return 1 - if(!user.IsAdvancedToolUser()) //Vorestation edit - to_chat(user, "You don't have the dexterity to do this!") - return 1 - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.getBrainLoss() >= 55) - visible_message("[H] stares cluelessly at [src].") - return 1 - else if(prob(H.getBrainLoss())) - to_chat(user, "You momentarily forget how to use [src].") - return 1 - - if(clicksound && istype(user, /mob/living/carbon)) - playsound(src, clicksound, clickvol) - - add_fingerprint(user) - - return ..() - -/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames. - return - -/obj/machinery/proc/assign_uid() - uid = gl_uid - gl_uid++ - -/obj/machinery/proc/state(var/msg) - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src][bicon(src)] [msg]", 2) - -/obj/machinery/proc/ping(text=null) - if(!text) - text = "\The [src] pings." - - state(text, "blue") - playsound(src, 'sound/machines/ping.ogg', 50, 0) - -/obj/machinery/proc/shock(mob/user, prb) - if(inoperable()) - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(electrocute_mob(user, get_area(src), src, 0.7)) - var/area/temp_area = get_area(src) - if(temp_area) - var/obj/machinery/power/apc/temp_apc = temp_area.get_apc() - - if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet) - temp_apc.terminal.powernet.trigger_warning() - if(user.stunned) - return 1 - return 0 - -/obj/machinery/proc/default_apply_parts() - var/obj/item/weapon/circuitboard/CB = circuit - if(!istype(CB)) - return - CB.apply_default_parts(src) - RefreshParts() - -/obj/machinery/proc/default_use_hicell() - var/obj/item/weapon/cell/C = locate(/obj/item/weapon/cell) in component_parts - if(C) - component_parts -= C - qdel(C) - C = new /obj/item/weapon/cell/high(src) - component_parts += C - RefreshParts() - return C - -/obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R) - var/parts_replaced = FALSE - if(!istype(R)) - return 0 - if(!component_parts) - return 0 - to_chat(user, "Following parts detected in [src]:") - for(var/obj/item/C in component_parts) - to_chat(user, " [C.name]") - if(panel_open || !R.panel_req) - var/obj/item/weapon/circuitboard/CB = circuit - var/P - for(var/obj/item/A in component_parts) - for(var/T in CB.req_components) - if(ispath(A.type, T)) - P = T - break - for(var/obj/item/B in R.contents) - if(istype(B, P) && istype(A, P)) - if(B.get_rating() > A.get_rating()) - R.remove_from_storage(B, src) - R.handle_item_insertion(A, 1) - component_parts -= A - component_parts += B - B.loc = null - to_chat(user, "[A.name] replaced with [B.name].") - parts_replaced = TRUE - break - update_icon() - RefreshParts() - if(parts_replaced) - R.play_rped_sound() - return 1 - -// Default behavior for wrenching down machines. Supports both delay and instant modes. -/obj/machinery/proc/default_unfasten_wrench(var/mob/user, var/obj/item/W, var/time = 0) - if(!W.has_tool_quality(TOOL_WRENCH)) - return FALSE - if(panel_open) - return FALSE // Close panel first! - playsound(src, W.usesound, 50, 1) - var/actual_time = W.toolspeed * time - if(actual_time != 0) - user.visible_message( \ - "\The [user] begins [anchored ? "un" : ""]securing \the [src].", \ - "You start [anchored ? "un" : ""]securing \the [src].") - if(actual_time == 0 || do_after(user, actual_time, target = src)) - user.visible_message( \ - "\The [user] has [anchored ? "un" : ""]secured \the [src].", \ - "You [anchored ? "un" : ""]secure \the [src].") - anchored = !anchored - power_change() //Turn on or off the machine depending on the status of power in the new area. - update_icon() - return TRUE - -/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/C) - if(!C.has_tool_quality(TOOL_CROWBAR)) - return 0 - if(!panel_open) - return 0 - . = dismantle() - -/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/S) - if(!S.has_tool_quality(TOOL_SCREWDRIVER)) - return 0 - playsound(src, S.usesound, 50, 1) - panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].") - update_icon() - return 1 - -/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/S) - if(!S.has_tool_quality(TOOL_SCREWDRIVER)) - return 0 - if(!circuit) - return 0 - to_chat(user, "You start disconnecting the monitor.") - playsound(src, S.usesound, 50, 1) - if(do_after(user, 20 * S.toolspeed)) - if(stat & BROKEN) - to_chat(user, "The broken glass falls out.") - new /obj/item/weapon/material/shard(src.loc) - else - to_chat(user, "You disconnect the monitor.") - . = dismantle() - -/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/S) - if(!S.has_tool_quality(TOOL_SCREWDRIVER)) - return 0 - playsound(src, S.usesound, 50, 1) - panel_open = !panel_open - to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]") - update_icon() - return 1 - -/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/W) - if(!W.has_tool_quality(TOOL_WIRECUTTER)) - return 0 - if(!panel_open) - return 0 - user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - playsound(src, W.usesound, 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - . = dismantle() - -/obj/machinery/proc/dismantle() - playsound(src, 'sound/items/Crowbar.ogg', 50, 1) - for(var/obj/I in contents) - if(istype(I,/obj/item/weapon/card/id)) - I.forceMove(src.loc) - - if(!circuit) - return 0 - var/obj/structure/frame/A = new /obj/structure/frame(src.loc) - var/obj/item/weapon/circuitboard/M = circuit - A.circuit = M - A.anchored = TRUE - A.frame_type = M.board_type - if(A.frame_type.circuit) - A.need_circuit = 0 - - if(A.frame_type.frame_class == FRAME_CLASS_ALARM || A.frame_type.frame_class == FRAME_CLASS_DISPLAY) - A.density = FALSE - else - A.density = TRUE - - if(A.frame_type.frame_class == FRAME_CLASS_MACHINE) - for(var/obj/D in component_parts) - D.forceMove(src.loc) - if(A.components) - A.components.Cut() - else - A.components = list() - component_parts = list() - A.check_components() - - if(A.frame_type.frame_class == FRAME_CLASS_ALARM) - A.state = FRAME_FASTENED - else if(A.frame_type.frame_class == FRAME_CLASS_COMPUTER || A.frame_type.frame_class == FRAME_CLASS_DISPLAY) - if(stat & BROKEN) - A.state = FRAME_WIRED - else - A.state = FRAME_PANELED - else - A.state = FRAME_WIRED - - A.set_dir(dir) - A.pixel_x = pixel_x - A.pixel_y = pixel_y - A.update_desc() - A.update_icon() - M.loc = null - M.deconstruct(src) - qdel(src) - return 1 - -/obj/machinery/bullet_act(obj/item/projectile/P, def_zone) - . = ..() - if(prob(P.get_structure_damage() * bullet_vulnerability)) - fall_apart() - -/** - * Like an angrier dismantle, where it destroys some of the parts and doesn't give you a frame - ** severity: Same severities as ex_act (so lower is more destructive) - ** scatter: If you want the parts to slide around 1 turf in random directions - */ -/obj/machinery/proc/fall_apart(var/severity = 3, var/scatter = TRUE) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - var/atom/droploc = drop_location() - if(!droploc || !contents.len) // not even a circuit? - playsound(src, 'sound/machines/machine_die_short.ogg') - spark_system.start() - qdel(spark_system) - qdel(src) - return - - var/list/surviving_parts = list() - // Deleting IDs is lame, unless this is like nuclear severity - if(severity != 1) - for(var/obj/item/weapon/card/id/I in contents) - surviving_parts |= I - - // May populate some items to throw around - if(!LAZYLEN(component_parts) && circuit) - circuit.apply_default_parts(src) - - var/survivability - switch(severity) - // No survivors - if(1) - survivability = 0 - - // 1 part survives - if(2) - survivability = 0 - var/atom/movable/picked_part = pick(contents) - if(istype(picked_part)) - surviving_parts |= picked_part - - // 50% of parts destroyed on average - if(3) - survivability = 50 - - // No parts destroyed, but you lose the frame - else - survivability = 100 - - for(var/atom/movable/P in contents) - if(prob(survivability)) - surviving_parts |= P - - if(circuit && severity >= 2) - var/datum/frame/frame_types/FT = circuit.board_type - if(istype(FT)) - // Some steel from the frame, but about half - surviving_parts += new /obj/item/stack/material/steel(null, max(1,round(FT.frame_size/2))) - // Two bits of cable, but not the 5 required to rebuild - surviving_parts += new /obj/item/stack/cable_coil(null, 1) - surviving_parts += new /obj/item/stack/cable_coil(null, 1) - - for(var/atom/movable/A as anything in surviving_parts) - A.forceMove(droploc) - if(scatter && isturf(droploc)) - var/turf/T = droploc - A.Move(get_step(T, pick(alldirs))) - - playsound(src, 'sound/machines/machine_die_short.ogg') - spark_system.start() - qdel(spark_system) - qdel(src) - -/datum/proc/apply_visual(mob/M) - M.sight = 0 //Just reset their mesons and stuff so they can't use them, by default. - return - -/datum/proc/remove_visual(mob/M) - return +/* +Overview: + Used to create objects that need a per step proc call. Default definition of 'New()' + stores a reference to src machine in global 'machines list'. Default definition + of 'Del' removes reference to src machine in global 'machines list'. + +Class Variables: + + power_init_complete (boolean) + Indicates that we have have registered our static power usage with the area. + + use_power (num) + current state of auto power use. + Possible Values: + USE_POWER_OFF:0 -- no auto power use + USE_POWER_IDLE:1 -- machine is using power at its idle power level + USE_POWER_ACTIVE:2 -- machine is using power at its active power level + + active_power_usage (num) + Value for the amount of power to use when in active power mode + + idle_power_usage (num) + Value for the amount of power to use when in idle power mode + + power_channel (num) + What channel to draw from when drawing power for power mode + Possible Values: + EQUIP:0 -- Equipment Channel + LIGHT:2 -- Lighting Channel + ENVIRON:3 -- Environment Channel + + component_parts (list) + A list of component parts of machine used by frame based machines. + + panel_open (num) + Whether the panel is open + + uid (num) + Unique id of machine across all machines. + + gl_uid (global num) + Next uid value in sequence + + stat (bitflag) + Machine status bit flags. + Possible bit flags: + BROKEN:1 -- Machine is broken + NOPOWER:2 -- No power is being supplied to machine. + POWEROFF:4 -- tbd + MAINT:8 -- machine is currently under going maintenance. + EMPED:16 -- temporary broken by EMP pulse + +Class Procs: + New() 'game/machinery/machine.dm' + + Destroy() 'game/machinery/machine.dm' + + get_power_usage() 'game/machinery/machinery_power.dm' + Returns the amount of power this machine uses every SSmachines cycle. + Default definition uses 'use_power', 'active_power_usage', 'idle_power_usage' + + powered(chan = CURRENT_CHANNEL) 'game/machinery/machinery_power.dm' + Checks to see if area that contains the object has power available for power + channel given in 'chan'. + + use_power_oneoff(amount, chan=CURRENT_CHANNEL) 'game/machinery/machinery_power.dm' + Deducts 'amount' from the power channel 'chan' of the area that contains the object. + + power_change() 'game/machinery/machinery_power.dm' + Called by the area that contains the object when ever that area under goes a + power state change (area runs out of power, or area channel is turned off). + + RefreshParts() 'game/machinery/machine.dm' + Called to refresh the variables in the machine that are contributed to by parts + contained in the component_parts list. (example: glass and material amounts for + the autolathe) + + Default definition does nothing. + + assign_uid() 'game/machinery/machine.dm' + Called by machine to assign a value to the uid variable. + + process() 'game/machinery/machine.dm' + Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list. + + + Compiled by Aygar +*/ + +/obj/machinery + name = "machinery" + icon = 'icons/obj/stationobjs.dmi' + w_class = ITEMSIZE_NO_CONTAINER + layer = UNDER_JUNK_LAYER + + var/stat = 0 + var/emagged = 0 + var/use_power = USE_POWER_IDLE + //0 = dont run the auto + //1 = run auto, use idle + //2 = run auto, use active + var/idle_power_usage = 0 + var/active_power_usage = 0 + var/power_channel = EQUIP //EQUIP, ENVIRON or LIGHT + var/power_init_complete = FALSE + var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames. + var/uid + var/panel_open = FALSE + var/global/gl_uid = 1 + var/clicksound // sound played on succesful interface. Just put it in the list of vars at the start. + var/clickvol = 40 // volume + var/interact_offline = 0 // Can the machine be interacted with while de-powered. + var/obj/item/weapon/circuitboard/circuit = null + + // 0.0 - 1.0 multipler for prob() based on bullet structure damage + // So if this is 1.0 then a 100 damage bullet will always break this structure + // If this is 0.5 then a 50 damage bullet will break this structure 25% of the time + var/bullet_vulnerability = 0.25 + + var/speed_process = FALSE //If false, SSmachines. If true, SSfastprocess. + + blocks_emissive = EMISSIVE_BLOCK_GENERIC + +/obj/machinery/New(l, d=0) + ..() + if(isnum(d)) + set_dir(d) + if(ispath(circuit)) + circuit = new circuit(src) + +/obj/machinery/Initialize(var/mapload) + . = ..() + global.machines += src + if(ispath(circuit)) + circuit = new circuit(src) + if(!speed_process) + START_MACHINE_PROCESSING(src) + else + START_PROCESSING(SSfastprocess, src) + if(!mapload) + power_change() + +/obj/machinery/Destroy() + if(!speed_process) + STOP_MACHINE_PROCESSING(src) + else + STOP_PROCESSING(SSfastprocess, src) + global.machines -= src + if(component_parts) + for(var/atom/A in component_parts) + if(A.loc == src) // If the components are inside the machine, delete them. + qdel(A) + else // Otherwise we assume they were dropped to the ground during deconstruction, and were not removed from the component_parts list by deconstruction code. + warning("[A] was still in [src]'s component_parts when it was Destroy()'d") + component_parts.Cut() + component_parts = null + if(contents) // The same for contents. + for(var/atom/A in contents) + if(ishuman(A)) + var/mob/living/carbon/human/H = A + H.client.eye = H.client.mob + H.client.perspective = MOB_PERSPECTIVE + H.loc = src.loc + else + qdel(A) + return ..() + +/obj/machinery/process() // Steady power usage is handled separately. If you dont use process why are you here? + return PROCESS_KILL + +/obj/machinery/emp_act(severity) + if(use_power && stat == 0) + use_power(7500/severity) + + var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc) + pulse2.icon = 'icons/effects/effects.dmi' + pulse2.icon_state = "empdisable" + pulse2.name = "emp sparks" + pulse2.anchored = TRUE + pulse2.set_dir(pick(cardinal)) + + spawn(10) + qdel(pulse2) + ..() + +/obj/machinery/ex_act(severity) + switch(severity) + if(1.0) + fall_apart(severity) + return + if(2.0) + if(prob(50)) + fall_apart(severity) + return + if(3.0) + if(prob(25)) + fall_apart(severity) + return + else + return + +/obj/machinery/vv_edit_var(var/var_name, var/new_value) + if(var_name == NAMEOF(src, use_power)) + update_use_power(new_value) + return TRUE + else if(var_name == NAMEOF(src, power_channel)) + update_power_channel(new_value) + return TRUE + else if(var_name == NAMEOF(src, idle_power_usage)) + update_idle_power_usage(new_value) + return TRUE + else if(var_name == NAMEOF(src, active_power_usage)) + update_active_power_usage(new_value) + return TRUE + return ..() + +/obj/machinery/proc/operable(var/additional_flags = 0) + return !inoperable(additional_flags) + +/obj/machinery/proc/inoperable(var/additional_flags = 0) + return (stat & (NOPOWER | BROKEN | additional_flags)) + +// Duplicate of below because we don't want to fuck around with CanUseTopic in TGUI +// TODO: Replace this with can_interact from /tg/ +/obj/machinery/tgui_status(mob/user) + if(!interact_offline && (stat & (NOPOWER | BROKEN))) + return STATUS_CLOSE + return ..() + +/obj/machinery/CanUseTopic(var/mob/user) + if(!interact_offline && (stat & (NOPOWER | BROKEN))) + return STATUS_CLOSE + return ..() + +/obj/machinery/CouldUseTopic(var/mob/user) + ..() + user.set_machine(src) + +/obj/machinery/CouldNotUseTopic(var/mob/user) + user.unset_machine() + +//////////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/attack_ai(mob/user as mob) + if(isrobot(user)) + // For some reason attack_robot doesn't work + // This is to stop robots from using cameras to remotely control machines. + if(user.client && user.client.eye == user) + return attack_hand(user) + else + return attack_hand(user) + +/obj/machinery/attack_hand(mob/user as mob) + + if(inoperable(MAINT)) + return 1 + if(user.lying || user.stat) + return 1 + if(!user.IsAdvancedToolUser()) //Vorestation edit + to_chat(user, "You don't have the dexterity to do this!") + return 1 + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.getBrainLoss() >= 55) + visible_message("[H] stares cluelessly at [src].") + return 1 + else if(prob(H.getBrainLoss())) + to_chat(user, "You momentarily forget how to use [src].") + return 1 + + if(clicksound && istype(user, /mob/living/carbon)) + playsound(src, clicksound, clickvol) + + add_fingerprint(user) + + return ..() + +/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames. + return + +/obj/machinery/proc/assign_uid() + uid = gl_uid + gl_uid++ + +/obj/machinery/proc/state(var/msg) + for(var/mob/O in hearers(src, null)) + O.show_message("\icon[src][bicon(src)] [msg]", 2) + +/obj/machinery/proc/ping(text=null) + if(!text) + text = "\The [src] pings." + + state(text, "blue") + playsound(src, 'sound/machines/ping.ogg', 50, 0) + +/obj/machinery/proc/shock(mob/user, prb) + if(inoperable()) + return 0 + if(!prob(prb)) + return 0 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if(electrocute_mob(user, get_area(src), src, 0.7)) + var/area/temp_area = get_area(src) + if(temp_area) + var/obj/machinery/power/apc/temp_apc = temp_area.get_apc() + + if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet) + temp_apc.terminal.powernet.trigger_warning() + if(user.stunned) + return 1 + return 0 + +/obj/machinery/proc/default_apply_parts() + var/obj/item/weapon/circuitboard/CB = circuit + if(!istype(CB)) + return + CB.apply_default_parts(src) + RefreshParts() + +/obj/machinery/proc/default_use_hicell() + var/obj/item/weapon/cell/C = locate(/obj/item/weapon/cell) in component_parts + if(C) + component_parts -= C + qdel(C) + C = new /obj/item/weapon/cell/high(src) + component_parts += C + RefreshParts() + return C + +/obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R) + var/parts_replaced = FALSE + if(!istype(R)) + return 0 + if(!component_parts) + return 0 + to_chat(user, "Following parts detected in [src]:") + for(var/obj/item/C in component_parts) + to_chat(user, " [C.name]") + if(panel_open || !R.panel_req) + var/obj/item/weapon/circuitboard/CB = circuit + var/P + for(var/obj/item/A in component_parts) + for(var/T in CB.req_components) + if(ispath(A.type, T)) + P = T + break + for(var/obj/item/B in R.contents) + if(istype(B, P) && istype(A, P)) + if(B.get_rating() > A.get_rating()) + R.remove_from_storage(B, src) + R.handle_item_insertion(A, 1) + component_parts -= A + component_parts += B + B.loc = null + to_chat(user, "[A.name] replaced with [B.name].") + parts_replaced = TRUE + break + update_icon() + RefreshParts() + if(parts_replaced) + R.play_rped_sound() + return 1 + +// Default behavior for wrenching down machines. Supports both delay and instant modes. +/obj/machinery/proc/default_unfasten_wrench(var/mob/user, var/obj/item/W, var/time = 0) + if(!W.has_tool_quality(TOOL_WRENCH)) + return FALSE + if(panel_open) + return FALSE // Close panel first! + playsound(src, W.usesound, 50, 1) + var/actual_time = W.toolspeed * time + if(actual_time != 0) + user.visible_message( \ + "\The [user] begins [anchored ? "un" : ""]securing \the [src].", \ + "You start [anchored ? "un" : ""]securing \the [src].") + if(actual_time == 0 || do_after(user, actual_time, target = src)) + user.visible_message( \ + "\The [user] has [anchored ? "un" : ""]secured \the [src].", \ + "You [anchored ? "un" : ""]secure \the [src].") + anchored = !anchored + power_change() //Turn on or off the machine depending on the status of power in the new area. + update_icon() + return TRUE + +/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/C) + if(!C.has_tool_quality(TOOL_CROWBAR)) + return 0 + if(!panel_open) + return 0 + . = dismantle() + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.has_tool_quality(TOOL_SCREWDRIVER)) + return 0 + playsound(src, S.usesound, 50, 1) + panel_open = !panel_open + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].") + update_icon() + return 1 + +/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.has_tool_quality(TOOL_SCREWDRIVER)) + return 0 + if(!circuit) + return 0 + to_chat(user, "You start disconnecting the monitor.") + playsound(src, S.usesound, 50, 1) + if(do_after(user, 20 * S.toolspeed)) + if(stat & BROKEN) + to_chat(user, "The broken glass falls out.") + new /obj/item/weapon/material/shard(src.loc) + else + to_chat(user, "You disconnect the monitor.") + . = dismantle() + +/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/S) + if(!S.has_tool_quality(TOOL_SCREWDRIVER)) + return 0 + playsound(src, S.usesound, 50, 1) + panel_open = !panel_open + to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]") + update_icon() + return 1 + +/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/W) + if(!W.has_tool_quality(TOOL_WIRECUTTER)) + return 0 + if(!panel_open) + return 0 + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src, W.usesound, 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + . = dismantle() + +/obj/machinery/proc/dismantle() + playsound(src, 'sound/items/Crowbar.ogg', 50, 1) + for(var/obj/I in contents) + if(istype(I,/obj/item/weapon/card/id)) + I.forceMove(src.loc) + + if(!circuit) + return 0 + var/obj/structure/frame/A = new /obj/structure/frame(src.loc) + var/obj/item/weapon/circuitboard/M = circuit + A.circuit = M + A.anchored = TRUE + A.frame_type = M.board_type + if(A.frame_type.circuit) + A.need_circuit = 0 + + if(A.frame_type.frame_class == FRAME_CLASS_ALARM || A.frame_type.frame_class == FRAME_CLASS_DISPLAY) + A.density = FALSE + else + A.density = TRUE + + if(A.frame_type.frame_class == FRAME_CLASS_MACHINE) + for(var/obj/D in component_parts) + D.forceMove(src.loc) + if(A.components) + A.components.Cut() + else + A.components = list() + component_parts = list() + A.check_components() + + if(A.frame_type.frame_class == FRAME_CLASS_ALARM) + A.state = FRAME_FASTENED + else if(A.frame_type.frame_class == FRAME_CLASS_COMPUTER || A.frame_type.frame_class == FRAME_CLASS_DISPLAY) + if(stat & BROKEN) + A.state = FRAME_WIRED + else + A.state = FRAME_PANELED + else + A.state = FRAME_WIRED + + A.set_dir(dir) + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.update_desc() + A.update_icon() + M.loc = null + M.deconstruct(src) + qdel(src) + return 1 + +/obj/machinery/bullet_act(obj/item/projectile/P, def_zone) + . = ..() + if(prob(P.get_structure_damage() * bullet_vulnerability)) + fall_apart() + +/** + * Like an angrier dismantle, where it destroys some of the parts and doesn't give you a frame + ** severity: Same severities as ex_act (so lower is more destructive) + ** scatter: If you want the parts to slide around 1 turf in random directions + */ +/obj/machinery/proc/fall_apart(var/severity = 3, var/scatter = TRUE) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src) + spark_system.attach(src) + + var/atom/droploc = drop_location() + if(!droploc || !contents.len) // not even a circuit? + playsound(src, 'sound/machines/machine_die_short.ogg') + spark_system.start() + qdel(spark_system) + qdel(src) + return + + var/list/surviving_parts = list() + // Deleting IDs is lame, unless this is like nuclear severity + if(severity != 1) + for(var/obj/item/weapon/card/id/I in contents) + surviving_parts |= I + + // May populate some items to throw around + if(!LAZYLEN(component_parts) && circuit) + circuit.apply_default_parts(src) + + var/survivability + switch(severity) + // No survivors + if(1) + survivability = 0 + + // 1 part survives + if(2) + survivability = 0 + var/atom/movable/picked_part = pick(contents) + if(istype(picked_part)) + surviving_parts |= picked_part + + // 50% of parts destroyed on average + if(3) + survivability = 50 + + // No parts destroyed, but you lose the frame + else + survivability = 100 + + for(var/atom/movable/P in contents) + if(prob(survivability)) + surviving_parts |= P + + if(circuit && severity >= 2) + var/datum/frame/frame_types/FT = circuit.board_type + if(istype(FT)) + // Some steel from the frame, but about half + surviving_parts += new /obj/item/stack/material/steel(null, max(1,round(FT.frame_size/2))) + // Two bits of cable, but not the 5 required to rebuild + surviving_parts += new /obj/item/stack/cable_coil(null, 1) + surviving_parts += new /obj/item/stack/cable_coil(null, 1) + + for(var/atom/movable/A as anything in surviving_parts) + A.forceMove(droploc) + if(scatter && isturf(droploc)) + var/turf/T = droploc + A.Move(get_step(T, pick(alldirs))) + + playsound(src, 'sound/machines/machine_die_short.ogg') + spark_system.start() + qdel(spark_system) + qdel(src) + +/datum/proc/apply_visual(mob/M) + M.sight = 0 //Just reset their mesons and stuff so they can't use them, by default. + return + +/datum/proc/remove_visual(mob/M) + return diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 7b6de697ac..13184fdbfb 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -1,396 +1,396 @@ -// 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 = "A device that uses station power to create points of magnetic energy." - plane = PLATING_PLANE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 50 - - var/freq = 1449 // 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 = 0 - var/pulling = 0 - - // 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/New() - ..() - var/turf/T = loc - hide(!T.is_plating()) - center = T - - spawn(10) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, freq, RADIO_MAGNETS) - - spawn() - magnetic_process() - -// update the invisibility and icon -/obj/machinery/magnetic_module/hide(var/intact) - invisibility = intact ? 101 : 0 - update_icon() - -// update the icon_state -/obj/machinery/magnetic_module/update_icon() - 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(var/command, var/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) - spawn() - magnetic_process() - -/obj/machinery/magnetic_module/process() - if(stat & NOPOWER) - on = 0 - - // 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) - update_use_power(USE_POWER_ACTIVE) - update_active_power_usage(electricity_level * 15) - else - update_use_power(USE_POWER_OFF) - - // Overload conditions: - /* // Eeeehhh kinda stupid - if(on) - if(electricity_level > 11) - if(prob(electricity_level)) - explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son - spawn(2) - qdel(src) - */ - - update_icon() - -/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the pulling - if(pulling) return - while(on) - - pulling = 1 - 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 & NOCONDUCT)) - step_towards(M, center) - - for(var/mob/living/silicon/S in orange(magnetic_field, center)) - if(istype(S, /mob/living/silicon/ai)) continue - step_towards(S, center) - - use_power(electricity_level * 5) - sleep(13 - electricity_level) - - pulling = 0 - -/obj/machinery/magnetic_module/Destroy() - if(radio_controller) - radio_controller.remove_object(src, freq) - ..() - -/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 = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 45 - var/frequency = 1449 - 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 = "NULL" // 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/New() - ..() - - if(autolink) - for(var/obj/machinery/magnetic_module/M in machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - - - spawn(45) // must wait for map loading to finish - if(radio_controller) - radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS) - - - if(path) // check for default path - filter_path() // renders rpath - - -/obj/machinery/magnetic_controller/process() - if(magnets.len == 0 && autolink) - for(var/obj/machinery/magnetic_module/M in machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - - -/obj/machinery/magnetic_controller/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/magnetic_controller/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - user.set_machine(src) - 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(stat & (BROKEN|NOPOWER)) - return - usr.set_machine(src) - add_fingerprint(usr) - - if(href_list["radio-op"]) - - // Prepare signal beforehand, because this is a radio operation - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["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, radio_filter = RADIO_MAGNETS) - - spawn(1) - updateUsrDialog() // pretty sure this increases responsiveness - - 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 = sanitize(tgui_input_text(usr, "Please define a new path!",,path)) - if(newpath && newpath != "") - moving = 0 // stop moving - path = newpath - pathpos = 1 // reset position - filter_path() // renders rpath - - if("togglemoving") - moving = !moving - if(moving) - spawn() 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 - signal.transmission_method = TRANSMISSION_RADIO // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["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 - spawn() - radio_connection.post_signal(src, signal, radio_filter = 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 - -/obj/machinery/magnetic_controller/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() +// 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 = "A device that uses station power to create points of magnetic energy." + plane = PLATING_PLANE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 50 + + var/freq = 1449 // 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 = 0 + var/pulling = 0 + + // 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/New() + ..() + var/turf/T = loc + hide(!T.is_plating()) + center = T + + spawn(10) // must wait for map loading to finish + if(radio_controller) + radio_controller.add_object(src, freq, RADIO_MAGNETS) + + spawn() + magnetic_process() + +// update the invisibility and icon +/obj/machinery/magnetic_module/hide(var/intact) + invisibility = intact ? 101 : 0 + update_icon() + +// update the icon_state +/obj/machinery/magnetic_module/update_icon() + 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(var/command, var/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) + spawn() + magnetic_process() + +/obj/machinery/magnetic_module/process() + if(stat & NOPOWER) + on = 0 + + // 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) + update_use_power(USE_POWER_ACTIVE) + update_active_power_usage(electricity_level * 15) + else + update_use_power(USE_POWER_OFF) + + // Overload conditions: + /* // Eeeehhh kinda stupid + if(on) + if(electricity_level > 11) + if(prob(electricity_level)) + explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son + spawn(2) + qdel(src) + */ + + update_icon() + +/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the pulling + if(pulling) return + while(on) + + pulling = 1 + 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 & NOCONDUCT)) + step_towards(M, center) + + for(var/mob/living/silicon/S in orange(magnetic_field, center)) + if(istype(S, /mob/living/silicon/ai)) continue + step_towards(S, center) + + use_power(electricity_level * 5) + sleep(13 - electricity_level) + + pulling = 0 + +/obj/machinery/magnetic_module/Destroy() + if(radio_controller) + radio_controller.remove_object(src, freq) + ..() + +/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 = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 45 + var/frequency = 1449 + 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 = "NULL" // 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/New() + ..() + + if(autolink) + for(var/obj/machinery/magnetic_module/M in machines) + if(M.freq == frequency && M.code == code) + magnets.Add(M) + + + spawn(45) // must wait for map loading to finish + if(radio_controller) + radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS) + + + if(path) // check for default path + filter_path() // renders rpath + + +/obj/machinery/magnetic_controller/process() + if(magnets.len == 0 && autolink) + for(var/obj/machinery/magnetic_module/M in machines) + if(M.freq == frequency && M.code == code) + magnets.Add(M) + + +/obj/machinery/magnetic_controller/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/magnetic_controller/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + user.set_machine(src) + 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(stat & (BROKEN|NOPOWER)) + return + usr.set_machine(src) + add_fingerprint(usr) + + if(href_list["radio-op"]) + + // Prepare signal beforehand, because this is a radio operation + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO // radio transmission + signal.source = src + signal.frequency = frequency + signal.data["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, radio_filter = RADIO_MAGNETS) + + spawn(1) + updateUsrDialog() // pretty sure this increases responsiveness + + 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 = sanitize(tgui_input_text(usr, "Please define a new path!",,path)) + if(newpath && newpath != "") + moving = 0 // stop moving + path = newpath + pathpos = 1 // reset position + filter_path() // renders rpath + + if("togglemoving") + moving = !moving + if(moving) + spawn() 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 + signal.transmission_method = TRANSMISSION_RADIO // radio transmission + signal.source = src + signal.frequency = frequency + signal.data["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 + spawn() + radio_connection.post_signal(src, signal, radio_filter = 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 + +/obj/machinery/magnetic_controller/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 1002e3fa21..7aa39cce38 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -1,62 +1,62 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/mass_driver - name = "mass driver" - desc = "Shoots things into space." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mass_driver" - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 50 - circuit = /obj/item/weapon/circuitboard/mass_driver - - var/power = 1.0 - var/code = 1.0 - var/id = 1.0 - 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/New() - . = ..() - default_apply_parts() - -/obj/machinery/mass_driver/attackby(var/obj/item/I, mob/user) - if(default_deconstruction_screwdriver(user, I)) - return - if(default_deconstruction_crowbar(user, I)) - return - - if(istype(I, /obj/item/device/multitool)) - if(panel_open) - var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) - if(!input) - to_chat(usr, "No input found please hang up and try your call again.") - return - id = input - return - return - -/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||istype(O, /obj/mecha))//Mechs need their launch platforms. - O_limit++ - if(O_limit >= 20) - for(var/mob/M in hearers(src, null)) - to_chat(M, "The mass driver lets out a screech, it mustn't be able to handle any more items.") - break - use_power(500) - spawn(0) - O.throw_at(target, drive_range * power, power) - flick("mass_driver1", src) - return - -/obj/machinery/mass_driver/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return - drive() - ..(severity) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/obj/machinery/mass_driver + name = "mass driver" + desc = "Shoots things into space." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "mass_driver" + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 50 + circuit = /obj/item/weapon/circuitboard/mass_driver + + var/power = 1.0 + var/code = 1.0 + var/id = 1.0 + 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/New() + . = ..() + default_apply_parts() + +/obj/machinery/mass_driver/attackby(var/obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) + if(!input) + to_chat(usr, "No input found please hang up and try your call again.") + return + id = input + return + return + +/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||istype(O, /obj/mecha))//Mechs need their launch platforms. + O_limit++ + if(O_limit >= 20) + for(var/mob/M in hearers(src, null)) + to_chat(M, "The mass driver lets out a screech, it mustn't be able to handle any more items.") + break + use_power(500) + spawn(0) + O.throw_at(target, drive_range * power, power) + flick("mass_driver1", src) + return + +/obj/machinery/mass_driver/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + drive() + ..(severity) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 79c8cdf738..170c085a09 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -1,242 +1,242 @@ -// Navigation beacon for AI robots -// Functions as a transponder: looks for incoming signal matching - -var/global/list/navbeacons = list() // no I don't like putting this in, but it will do for now - -/obj/machinery/navbeacon - icon = 'icons/obj/objects.dmi' - icon_state = "navbeacon0-f" - name = "navigation beacon" - desc = "A beacon used for bot navigation." - plane = PLATING_PLANE - anchored = TRUE - var/open = 0 // true if cover is open - var/locked = 1 // true if controls are locked - var/freq = null // DEPRECATED we don't use radios anymore! - var/location = "" // location response text - var/codes_txt // DEPRECATED codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" - var/list/codes = list() // assoc. list of transponder codes - req_access = list(access_engine) - -/obj/machinery/navbeacon/New() - ..() - set_codes_from_txt(codes_txt) - if(freq) - warning("[src] at [x],[y],[z] has deprecated var freq=[freq]. Replace it with proper type.") - - var/turf/T = loc - hide(!T.is_plating()) - navbeacons += src - -// set the transponder codes assoc list from codes_txt -// DEPRECATED - This is kept only for compatibilty with old map files! Do not use this! -// Instead, you should replace the map instance with one of the appropriate navbeacon subtypes. -// See the bottom of this file for a list of subtypes, make your own examples if your map needs more -/obj/machinery/navbeacon/proc/set_codes_from_txt() - if(!codes_txt) - return - warning("[src] at [x],[y],[z] in [get_area(src)] is using the deprecated 'codes_txt' mapping method. Replace it with proper type.") - - codes = list() - 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" - -/obj/machinery/navbeacon/hides_under_flooring() - return 1 - -// called when turf state changes -// hide the object if turf is intact -/obj/machinery/navbeacon/hide(var/intact) - invisibility = intact ? 101 : 0 - update_icon() - -// update the icon_state -/obj/machinery/navbeacon/update_icon() - 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(var/obj/item/I, var/mob/user) - var/turf/T = loc - if(!T.is_plating()) - return // prevent intraction when T-scanner revealed - - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - open = !open - playsound(src, I.usesound, 50, 1) - user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.") - - update_icon() - - else if(I.GetID()) - if(open) - if(allowed(user)) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") - else - to_chat(user, "Access denied.") - updateDialog() - else - to_chat(user, "You must open the cover first!") - return - -/obj/machinery/navbeacon/attack_ai(var/mob/user) - interact(user, 1) - -/obj/machinery/navbeacon/attack_hand(var/mob/user) - - if(!user.IsAdvancedToolUser()) - return 0 - - interact(user, 0) - -/obj/machinery/navbeacon/interact(var/mob/user, var/ai = 0) - var/turf/T = loc - if(!T.is_plating()) - 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+= "
            " - - user << browse(t, "window=navbeacon") - onclose(user, "navbeacon") - return - -/obj/machinery/navbeacon/Topic(href, href_list) - ..() - if(usr.stat) - return - if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - if(open && !locked) - usr.set_machine(src) - - if(href_list["locedit"]) - var/newloc = sanitize(tgui_input_text(usr, "Enter New Location", "Navigation Beacon", location, MAX_NAME_LEN)) - if(newloc) - location = newloc - updateDialog() - - else if(href_list["edit"]) - var/codekey = href_list["code"] - - var/newkey = tgui_input_text(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey, MAX_NAME_LEN) - newkey = sanitize(newkey,MAX_NAME_LEN) - if(!newkey) - return - - var/codeval = codes[codekey] - var/newval = tgui_input_text(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval, MAX_NAME_LEN) - newval = sanitize(newval,MAX_NAME_LEN) - 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 = tgui_input_text(usr, "Enter New Transponder Code Key", "Navigation Beacon", null, MAX_NAME_LEN) - newkey = sanitize(newkey,MAX_NAME_LEN) - if(!newkey) - return - - var/newval = tgui_input_text(usr, "Enter New Transponder Code Value", "Navigation Beacon", null, MAX_NAME_LEN) - newval = sanitize(newval,MAX_NAME_LEN) - if(!newval) - newval = "1" - return - - if(!codes) - codes = new() - - codes[newkey] = newval - - updateDialog() - -/obj/machinery/navbeacon/Destroy() - navbeacons.Remove(src) - ..() - - -// -// Nav Beacon Mapping -// These subtypes are what you should actually put into maps! they will make your life much easier. -// -// Developer Note: navbeacons do not HAVE to use these subtypes. They are purely for mapping convenience. -// You can feel free to construct them in-game as just /obj/machinery/navbeacon and they will work just -// fine, and you can define your own specific types for every instance on map if you want (BayStation does) -// This design is a compromise that means you can do mapping without every single one being its own type -// but with it still being easy to map ~ Leshana -// - -// Mulebot delivery destinations - -/obj/machinery/navbeacon/delivery/north - codes = list("delivery" = 1, "dir" = NORTH) - -/obj/machinery/navbeacon/delivery/south - codes = list("delivery" = 1, "dir" = SOUTH) - -/obj/machinery/navbeacon/delivery/east - codes = list("delivery" = 1, "dir" = EAST) - -/obj/machinery/navbeacon/delivery/west - codes = list("delivery" = 1, "dir" = WEST) - - -// For part of the patrol route -// You MUST set "location" -// You MUST set "next_patrol" -/obj/machinery/navbeacon/patrol - var/next_patrol - -/obj/machinery/navbeacon/patrol/New() - codes = list("patrol" = 1, "next_patrol" = next_patrol) - ..() +// Navigation beacon for AI robots +// Functions as a transponder: looks for incoming signal matching + +var/global/list/navbeacons = list() // no I don't like putting this in, but it will do for now + +/obj/machinery/navbeacon + icon = 'icons/obj/objects.dmi' + icon_state = "navbeacon0-f" + name = "navigation beacon" + desc = "A beacon used for bot navigation." + plane = PLATING_PLANE + anchored = TRUE + var/open = 0 // true if cover is open + var/locked = 1 // true if controls are locked + var/freq = null // DEPRECATED we don't use radios anymore! + var/location = "" // location response text + var/codes_txt // DEPRECATED codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" + var/list/codes = list() // assoc. list of transponder codes + req_access = list(access_engine) + +/obj/machinery/navbeacon/New() + ..() + set_codes_from_txt(codes_txt) + if(freq) + warning("[src] at [x],[y],[z] has deprecated var freq=[freq]. Replace it with proper type.") + + var/turf/T = loc + hide(!T.is_plating()) + navbeacons += src + +// set the transponder codes assoc list from codes_txt +// DEPRECATED - This is kept only for compatibilty with old map files! Do not use this! +// Instead, you should replace the map instance with one of the appropriate navbeacon subtypes. +// See the bottom of this file for a list of subtypes, make your own examples if your map needs more +/obj/machinery/navbeacon/proc/set_codes_from_txt() + if(!codes_txt) + return + warning("[src] at [x],[y],[z] in [get_area(src)] is using the deprecated 'codes_txt' mapping method. Replace it with proper type.") + + codes = list() + 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" + +/obj/machinery/navbeacon/hides_under_flooring() + return 1 + +// called when turf state changes +// hide the object if turf is intact +/obj/machinery/navbeacon/hide(var/intact) + invisibility = intact ? 101 : 0 + update_icon() + +// update the icon_state +/obj/machinery/navbeacon/update_icon() + 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(var/obj/item/I, var/mob/user) + var/turf/T = loc + if(!T.is_plating()) + return // prevent intraction when T-scanner revealed + + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + open = !open + playsound(src, I.usesound, 50, 1) + user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.") + + update_icon() + + else if(I.GetID()) + if(open) + if(allowed(user)) + locked = !locked + to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") + else + to_chat(user, "Access denied.") + updateDialog() + else + to_chat(user, "You must open the cover first!") + return + +/obj/machinery/navbeacon/attack_ai(var/mob/user) + interact(user, 1) + +/obj/machinery/navbeacon/attack_hand(var/mob/user) + + if(!user.IsAdvancedToolUser()) + return 0 + + interact(user, 0) + +/obj/machinery/navbeacon/interact(var/mob/user, var/ai = 0) + var/turf/T = loc + if(!T.is_plating()) + 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+= "
                    " + + user << browse(t, "window=navbeacon") + onclose(user, "navbeacon") + return + +/obj/machinery/navbeacon/Topic(href, href_list) + ..() + if(usr.stat) + return + if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) + if(open && !locked) + usr.set_machine(src) + + if(href_list["locedit"]) + var/newloc = sanitize(tgui_input_text(usr, "Enter New Location", "Navigation Beacon", location, MAX_NAME_LEN)) + if(newloc) + location = newloc + updateDialog() + + else if(href_list["edit"]) + var/codekey = href_list["code"] + + var/newkey = tgui_input_text(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey, MAX_NAME_LEN) + newkey = sanitize(newkey,MAX_NAME_LEN) + if(!newkey) + return + + var/codeval = codes[codekey] + var/newval = tgui_input_text(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval, MAX_NAME_LEN) + newval = sanitize(newval,MAX_NAME_LEN) + 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 = tgui_input_text(usr, "Enter New Transponder Code Key", "Navigation Beacon", null, MAX_NAME_LEN) + newkey = sanitize(newkey,MAX_NAME_LEN) + if(!newkey) + return + + var/newval = tgui_input_text(usr, "Enter New Transponder Code Value", "Navigation Beacon", null, MAX_NAME_LEN) + newval = sanitize(newval,MAX_NAME_LEN) + if(!newval) + newval = "1" + return + + if(!codes) + codes = new() + + codes[newkey] = newval + + updateDialog() + +/obj/machinery/navbeacon/Destroy() + navbeacons.Remove(src) + ..() + + +// +// Nav Beacon Mapping +// These subtypes are what you should actually put into maps! they will make your life much easier. +// +// Developer Note: navbeacons do not HAVE to use these subtypes. They are purely for mapping convenience. +// You can feel free to construct them in-game as just /obj/machinery/navbeacon and they will work just +// fine, and you can define your own specific types for every instance on map if you want (BayStation does) +// This design is a compromise that means you can do mapping without every single one being its own type +// but with it still being easy to map ~ Leshana +// + +// Mulebot delivery destinations + +/obj/machinery/navbeacon/delivery/north + codes = list("delivery" = 1, "dir" = NORTH) + +/obj/machinery/navbeacon/delivery/south + codes = list("delivery" = 1, "dir" = SOUTH) + +/obj/machinery/navbeacon/delivery/east + codes = list("delivery" = 1, "dir" = EAST) + +/obj/machinery/navbeacon/delivery/west + codes = list("delivery" = 1, "dir" = WEST) + + +// For part of the patrol route +// You MUST set "location" +// You MUST set "next_patrol" +/obj/machinery/navbeacon/patrol + var/next_patrol + +/obj/machinery/navbeacon/patrol/New() + codes = list("patrol" = 1, "next_patrol" = next_patrol) + ..() diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index c63ea1f1d8..058abb899d 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -1,335 +1,335 @@ -//#define AMAP -/obj/machinery/computer/security/verb/station_map() - set name = ".map" - set category = "Object" - set src in view(1) - usr.set_machine(src) - if(!mapping) return - log_game("[usr]([usr.key]) used station map L[z] in [src.loc.loc]") - drawmap(usr) - -/obj/machinery/computer/security/proc/drawmap(var/mob/user as mob) - - var/icx = round(world.maxx/16) + 1 - var/icy = round(world.maxy/16) + 1 - - var/xoff = round((icx*16-world.maxx)-2) - var/yoff = round((icy*16-world.maxy)-2) - - var/icount = icx * icy - - var/list/imap = list() - -#ifdef AMAP - - for(var/i = 0; iSomething is hogging the tile!") - return TRUE - if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) // Pipes on different layers can't block each other unless they are ALL_LAYER - continue - if(M.get_init_dirs() & SSmachines.get_init_dirs(pipe_type, 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) - // TODO - Evaluate and remove the "need at least one thing to connect to" thing ~Leshana - // With how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment. - if (QDELETED(A)) - to_chat(user, "There's nothing to connect this pipe section to!") - return TRUE - transfer_fingerprints_to(A) - - playsound(src, W.usesound, 50, 1) - user.visible_message( \ - "[user] fastens \the [src].", \ - "You fasten \the [src].", \ - "You hear ratcheting.") - - qdel(src) - -/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A) - A.set_dir(dir) - A.init_dir() - if(pipename) - A.name = pipename - if(req_access) - A.req_access = req_access - if(req_one_access) - A.req_one_access = req_one_access - A.on_construction(color, piping_layer) - -/obj/item/pipe/trinary/flippable/build_pipe(obj/machinery/atmospherics/trinary/T) - T.mirrored = mirrored - . = ..() - -// Lookup the initialize_directions for a given atmos machinery instance facing dir. -// TODO - Right now this determines the answer by instantiating an instance and checking! -// There has to be a better way... ~Leshana -/datum/controller/subsystem/machines/proc/get_init_dirs(type, dir) - var/static/list/pipe_init_dirs_cache = list() - if(!pipe_init_dirs_cache[type]) - pipe_init_dirs_cache[type] = list() - - if(!pipe_init_dirs_cache[type]["[dir]"]) - var/obj/machinery/atmospherics/temp = new type(null, dir) - pipe_init_dirs_cache[type]["[dir]"] = temp.get_init_dirs() - qdel(temp) - - return pipe_init_dirs_cache[type]["[dir]"] - - - - - -// -// Meters are special - not like any other pipes or components -// - -/obj/item/pipe_meter - name = "meter" - desc = "A meter that can be laid on pipes." - icon = 'icons/obj/pipe-item.dmi' - icon_state = "meter" - item_state = "buildpipe" - w_class = ITEMSIZE_LARGE - var/piping_layer = PIPING_LAYER_DEFAULT - -/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - return wrench_act(user, W) - return ..() - -/obj/item/pipe_meter/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/tool/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, "You need to fasten it to a pipe!") - return TRUE - new /obj/machinery/meter(loc, piping_layer) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You fasten the meter to the pipe.") - 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 +/*CONTENTS +Buildable pipes +Buildable meters +*/ + +/obj/item/pipe + name = "pipe" + desc = "A pipe." + var/pipe_type + var/pipename + force = 7 + throwforce = 7 + icon = 'icons/obj/pipe-item.dmi' + icon_state = "simple" + item_state = "buildpipe" + w_class = ITEMSIZE_NORMAL + level = 2 + var/piping_layer = PIPING_LAYER_DEFAULT + var/dispenser_class // Tells the dispenser what orientations we support, so RPD can show previews. + +// One subtype for each way components connect to neighbors +/obj/item/pipe/directional + dispenser_class = PIPE_DIRECTIONAL +/obj/item/pipe/binary + dispenser_class = PIPE_STRAIGHT +/obj/item/pipe/binary/bendable + dispenser_class = PIPE_BENDABLE +/obj/item/pipe/trinary + dispenser_class = PIPE_TRINARY +/obj/item/pipe/trinary/flippable + dispenser_class = PIPE_TRIN_M + var/mirrored = FALSE +/obj/item/pipe/quaternary + dispenser_class = PIPE_ONEDIR + +/** + * Call constructor with: + * @param loc Location + * @pipe_type + */ +/obj/item/pipe/Initialize(var/mapload, var/_pipe_type, var/_dir, var/obj/machinery/atmospherics/make_from) + if(make_from) + make_from_existing(make_from) + else + pipe_type = _pipe_type + set_dir(_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) + set_dir(make_from.dir) + pipename = make_from.name + if(make_from.req_access) + src.req_access = make_from.req_access + if(make_from.req_one_access) + src.req_one_access = make_from.req_one_access + color = make_from.pipe_color + pipe_type = make_from.type + +/obj/item/pipe/trinary/flippable/make_from_existing(obj/machinery/atmospherics/trinary/make_from) + ..() + if(make_from.mirrored) + 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|PIPING_DEFAULT_LAYER_ONLY)) + new_layer = PIPING_LAYER_DEFAULT + piping_layer = new_layer + // Do it the Polaris way + switch(piping_layer) + if(PIPING_LAYER_SCRUBBER) + color = PIPE_COLOR_RED + name = "[initial(fakeA.name)] scrubber fitting" + if(PIPING_LAYER_SUPPLY) + color = PIPE_COLOR_BLUE + name = "[initial(fakeA.name)] supply fitting" + if(PIPING_LAYER_FUEL) + color = PIPE_COLOR_YELLOW + name = "[initial(fakeA.name)] fuel fitting" + if(PIPING_LAYER_AUX) + color = PIPE_COLOR_CYAN + name = "[initial(fakeA.name)] aux fitting" + // Or if we were to do it the TG way... + // pixel_x = PIPE_PIXEL_OFFSET_X(piping_layer) + // pixel_y = PIPE_PIXEL_OFFSET_Y(piping_layer) + // layer = initial(layer) + PIPE_LAYER_OFFSET(piping_layer) + +/obj/item/pipe/proc/update() + var/obj/machinery/atmospherics/fakeA = pipe_type + name = "[initial(fakeA.name)] fitting" + icon_state = initial(fakeA.pipe_state) + +/obj/item/pipe/verb/flip() + set category = "Object" + set name = "Flip Pipe" + set src in view(1) + + if ( usr.stat || usr.restrained() || !usr.canmove ) + return + + do_a_flip() + +/obj/item/pipe/proc/do_a_flip() + set_dir(turn(dir, -180)) + fixdir() + +/obj/item/pipe/trinary/flippable/do_a_flip() + // set_dir(turn(dir, flipped ? 45 : -45)) + // TG has a magic icon set with the flipped versions in the diagonals. + // We may switch to this later, but for now gotta do some magic. + mirrored = !mirrored + var/obj/machinery/atmospherics/fakeA = pipe_type + icon_state = "[initial(fakeA.pipe_state)][mirrored ? "m" : ""]" + +/obj/item/pipe/verb/rotate_clockwise() + set category = "Object" + set name = "Rotate Pipe Clockwise" + set src in view(1) + + if ( usr.stat || usr.restrained() || !usr.canmove ) + return + + src.set_dir(turn(src.dir, 270)) + fixdir() + +// Don't let pulling a pipe straighten it out. +/obj/item/pipe/binary/bendable/Move() + var/old_bent = !IS_CARDINAL(dir) + . = ..() + if(old_bent && IS_CARDINAL(dir)) + set_dir(turn(src.dir, -45)) + +//Helper to clean up dir +/obj/item/pipe/proc/fixdir() + return + +/obj/item/pipe/binary/fixdir() + if(dir == SOUTH) + set_dir(NORTH) + else if(dir == WEST) + set_dir(EAST) + +/obj/item/pipe/trinary/flippable/fixdir() + if(dir in cornerdirs) + set_dir(turn(dir, 45)) + +/obj/item/pipe/attack_self(mob/user) + set_dir(turn(dir,-90)) + fixdir() + +//called when a turf is attacked with a pipe item +/obj/item/pipe/afterattack(turf/simulated/floor/target, mob/user, proximity) + if(!proximity) return + if(istype(target) && user.canUnEquip(src)) + user.drop_from_inventory(src, target) + else + return ..() + +/obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + return wrench_act(user, W) + return ..() + +/obj/item/pipe/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/tool/wrench/W) + if(!isturf(loc)) + return TRUE + + add_fingerprint(user) + fixdir() + + 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)) // Pipes on different layers can't block each other unless they are ALL_LAYER + continue + if(M.get_init_dirs() & SSmachines.get_init_dirs(pipe_type, 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) + // TODO - Evaluate and remove the "need at least one thing to connect to" thing ~Leshana + // With how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment. + if (QDELETED(A)) + to_chat(user, "There's nothing to connect this pipe section to!") + return TRUE + transfer_fingerprints_to(A) + + playsound(src, W.usesound, 50, 1) + user.visible_message( \ + "[user] fastens \the [src].", \ + "You fasten \the [src].", \ + "You hear ratcheting.") + + qdel(src) + +/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A) + A.set_dir(dir) + A.init_dir() + if(pipename) + A.name = pipename + if(req_access) + A.req_access = req_access + if(req_one_access) + A.req_one_access = req_one_access + A.on_construction(color, piping_layer) + +/obj/item/pipe/trinary/flippable/build_pipe(obj/machinery/atmospherics/trinary/T) + T.mirrored = mirrored + . = ..() + +// Lookup the initialize_directions for a given atmos machinery instance facing dir. +// TODO - Right now this determines the answer by instantiating an instance and checking! +// There has to be a better way... ~Leshana +/datum/controller/subsystem/machines/proc/get_init_dirs(type, dir) + var/static/list/pipe_init_dirs_cache = list() + if(!pipe_init_dirs_cache[type]) + pipe_init_dirs_cache[type] = list() + + if(!pipe_init_dirs_cache[type]["[dir]"]) + var/obj/machinery/atmospherics/temp = new type(null, dir) + pipe_init_dirs_cache[type]["[dir]"] = temp.get_init_dirs() + qdel(temp) + + return pipe_init_dirs_cache[type]["[dir]"] + + + + + +// +// Meters are special - not like any other pipes or components +// + +/obj/item/pipe_meter + name = "meter" + desc = "A meter that can be laid on pipes." + icon = 'icons/obj/pipe-item.dmi' + icon_state = "meter" + item_state = "buildpipe" + w_class = ITEMSIZE_LARGE + var/piping_layer = PIPING_LAYER_DEFAULT + +/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + return wrench_act(user, W) + return ..() + +/obj/item/pipe_meter/proc/wrench_act(var/mob/living/user, var/obj/item/weapon/tool/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, "You need to fasten it to a pipe!") + return TRUE + new /obj/machinery/meter(loc, piping_layer) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You fasten the meter to the pipe.") + 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 diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index e9cb400746..96da384789 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -1,178 +1,178 @@ -/obj/machinery/pipedispenser - name = "Pipe Dispenser" - desc = "A large machine that can rapidly dispense pipes." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - anchored = TRUE - unacidable = TRUE - var/unwrenched = 0 - var/wait = 0 - var/p_layer = PIPING_LAYER_REGULAR - var/static/list/pipe_layers = list( - "Regular" = PIPING_LAYER_REGULAR, - "Supply" = PIPING_LAYER_SUPPLY, - "Scrubber" = PIPING_LAYER_SCRUBBER, - "Fuel" = PIPING_LAYER_FUEL, - "Aux" = PIPING_LAYER_AUX - ) - var/disposals = FALSE - -// TODO - Its about time to make this NanoUI don't we think? -/obj/machinery/pipedispenser/attack_hand(var/mob/user as mob) - if((. = ..())) - return - tgui_interact(user) - -/obj/machinery/pipedispenser/ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/spritesheet/pipes), - ) - -/obj/machinery/pipedispenser/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PipeDispenser", name) - ui.open() - -/obj/machinery/pipedispenser/tgui_data(mob/user) - var/list/data = list( - "disposals" = disposals, - "p_layer" = p_layer, - "pipe_layers" = pipe_layers, - ) - - var/list/recipes - if(disposals) - recipes = GLOB.disposal_pipe_recipes - else - recipes = GLOB.atmos_pipe_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_recipe/info = cat[i] - r += list(list("pipe_name" = info.name, "ref" = "\ref[info]")) - // 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 special param to work around it. - if(info.dirtype == PIPE_BENDABLE) - r += list(list( - "pipe_name" = ("Bent " + info.name), - "ref" = "\ref[info]", - "bent" = TRUE - )) - data["categories"] += list(list("cat_name" = c, "recipes" = r)) - - return data - -/obj/machinery/pipedispenser/tgui_act(action, params) - if(..()) - return TRUE - if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - return TRUE - - . = TRUE - switch(action) - if("p_layer") - p_layer = text2num(params["p_layer"]) - if("dispense_pipe") - if(!wait) - var/datum/pipe_recipe/recipe = locate(params["ref"]) - if(!istype(recipe)) - return - - var/target_dir = NORTH - if(params["bent"]) - target_dir = NORTHEAST - - var/obj/created_object = null - if(istype(recipe, /datum/pipe_recipe/pipe)) - var/datum/pipe_recipe/pipe/R = recipe - created_object = new R.construction_type(loc, recipe.pipe_type, target_dir) - var/obj/item/pipe/P = created_object - P.setPipingLayer(p_layer) - else if(istype(recipe, /datum/pipe_recipe/disposal)) - var/datum/pipe_recipe/disposal/D = recipe - var/obj/structure/disposalconstruct/C = new(loc, D.pipe_type, target_dir, 0, D.subtype ? D.subtype : 0) - C.update() - created_object = C - else if(istype(recipe, /datum/pipe_recipe/meter)) - created_object = new recipe.pipe_type(loc) - else - log_runtime(EXCEPTION("Warning: [usr] attempted to spawn pipe recipe type by params [json_encode(params)] ([recipe] [recipe?.type]), but it was not allowed by this machine ([src] [type])")) - return - - created_object.add_fingerprint(usr) - wait = TRUE - VARSET_IN(src, wait, FALSE, 15) - - -/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob) - src.add_fingerprint(usr) - if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) - to_chat(usr, "You put [W] back in [src].") - user.drop_item() - qdel(W) - return - else if(W.has_tool_quality(TOOL_WRENCH)) - if (unwrenched==0) - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src] from the floor...") - if (do_after(user, 40 * W.toolspeed)) - user.visible_message( \ - "[user] unfastens \the [src].", \ - "You have unfastened \the [src]. Now it can be pulled somewhere else.", \ - "You hear ratchet.") - src.anchored = FALSE - src.stat |= MAINT - src.unwrenched = 1 - if (usr.machine==src) - usr << browse(null, "window=pipedispenser") - else /*if (unwrenched==1)*/ - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to fasten \the [src] to the floor...") - if (do_after(user, 20 * W.toolspeed)) - user.visible_message( \ - "[user] fastens \the [src].", \ - "You have fastened \the [src]. Now it can dispense pipes.", \ - "You hear ratchet.") - src.anchored = TRUE - src.stat &= ~MAINT - src.unwrenched = 0 - power_change() - else - return ..() - -/obj/machinery/pipedispenser/disposal - name = "Disposal Pipe Dispenser" - desc = "A large machine that can rapidly dispense pipes. This one seems to dispsense disposal pipes." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - anchored = TRUE - disposals = TRUE - -//Allow you to drag-drop disposal pipes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe as obj, mob/usr as mob) - if(!usr.canmove || usr.stat || usr.restrained()) - return - - if (!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) - return - - if (pipe.anchored) - return - - to_chat(usr, "You shove [pipe] back in [src].") - qdel(pipe) - -// adding a pipe dispensers that spawn unhooked from the ground -/obj/machinery/pipedispenser/orderable - anchored = FALSE - unwrenched = 1 - -/obj/machinery/pipedispenser/disposal/orderable - anchored = FALSE - unwrenched = 1 +/obj/machinery/pipedispenser + name = "Pipe Dispenser" + desc = "A large machine that can rapidly dispense pipes." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "pipe_d" + density = TRUE + anchored = TRUE + unacidable = TRUE + var/unwrenched = 0 + var/wait = 0 + var/p_layer = PIPING_LAYER_REGULAR + var/static/list/pipe_layers = list( + "Regular" = PIPING_LAYER_REGULAR, + "Supply" = PIPING_LAYER_SUPPLY, + "Scrubber" = PIPING_LAYER_SCRUBBER, + "Fuel" = PIPING_LAYER_FUEL, + "Aux" = PIPING_LAYER_AUX + ) + var/disposals = FALSE + +// TODO - Its about time to make this NanoUI don't we think? +/obj/machinery/pipedispenser/attack_hand(var/mob/user as mob) + if((. = ..())) + return + tgui_interact(user) + +/obj/machinery/pipedispenser/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/pipes), + ) + +/obj/machinery/pipedispenser/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PipeDispenser", name) + ui.open() + +/obj/machinery/pipedispenser/tgui_data(mob/user) + var/list/data = list( + "disposals" = disposals, + "p_layer" = p_layer, + "pipe_layers" = pipe_layers, + ) + + var/list/recipes + if(disposals) + recipes = GLOB.disposal_pipe_recipes + else + recipes = GLOB.atmos_pipe_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_recipe/info = cat[i] + r += list(list("pipe_name" = info.name, "ref" = "\ref[info]")) + // 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 special param to work around it. + if(info.dirtype == PIPE_BENDABLE) + r += list(list( + "pipe_name" = ("Bent " + info.name), + "ref" = "\ref[info]", + "bent" = TRUE + )) + data["categories"] += list(list("cat_name" = c, "recipes" = r)) + + return data + +/obj/machinery/pipedispenser/tgui_act(action, params) + if(..()) + return TRUE + if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + return TRUE + + . = TRUE + switch(action) + if("p_layer") + p_layer = text2num(params["p_layer"]) + if("dispense_pipe") + if(!wait) + var/datum/pipe_recipe/recipe = locate(params["ref"]) + if(!istype(recipe)) + return + + var/target_dir = NORTH + if(params["bent"]) + target_dir = NORTHEAST + + var/obj/created_object = null + if(istype(recipe, /datum/pipe_recipe/pipe)) + var/datum/pipe_recipe/pipe/R = recipe + created_object = new R.construction_type(loc, recipe.pipe_type, target_dir) + var/obj/item/pipe/P = created_object + P.setPipingLayer(p_layer) + else if(istype(recipe, /datum/pipe_recipe/disposal)) + var/datum/pipe_recipe/disposal/D = recipe + var/obj/structure/disposalconstruct/C = new(loc, D.pipe_type, target_dir, 0, D.subtype ? D.subtype : 0) + C.update() + created_object = C + else if(istype(recipe, /datum/pipe_recipe/meter)) + created_object = new recipe.pipe_type(loc) + else + log_runtime(EXCEPTION("Warning: [usr] attempted to spawn pipe recipe type by params [json_encode(params)] ([recipe] [recipe?.type]), but it was not allowed by this machine ([src] [type])")) + return + + created_object.add_fingerprint(usr) + wait = TRUE + VARSET_IN(src, wait, FALSE, 15) + + +/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob) + src.add_fingerprint(usr) + if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) + to_chat(usr, "You put [W] back in [src].") + user.drop_item() + qdel(W) + return + else if(W.has_tool_quality(TOOL_WRENCH)) + if (unwrenched==0) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src] from the floor...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "[user] unfastens \the [src].", \ + "You have unfastened \the [src]. Now it can be pulled somewhere else.", \ + "You hear ratchet.") + src.anchored = FALSE + src.stat |= MAINT + src.unwrenched = 1 + if (usr.machine==src) + usr << browse(null, "window=pipedispenser") + else /*if (unwrenched==1)*/ + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to fasten \the [src] to the floor...") + if (do_after(user, 20 * W.toolspeed)) + user.visible_message( \ + "[user] fastens \the [src].", \ + "You have fastened \the [src]. Now it can dispense pipes.", \ + "You hear ratchet.") + src.anchored = TRUE + src.stat &= ~MAINT + src.unwrenched = 0 + power_change() + else + return ..() + +/obj/machinery/pipedispenser/disposal + name = "Disposal Pipe Dispenser" + desc = "A large machine that can rapidly dispense pipes. This one seems to dispsense disposal pipes." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "pipe_d" + density = TRUE + anchored = TRUE + disposals = TRUE + +//Allow you to drag-drop disposal pipes into it +/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe as obj, mob/usr as mob) + if(!usr.canmove || usr.stat || usr.restrained()) + return + + if (!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) + return + + if (pipe.anchored) + return + + to_chat(usr, "You shove [pipe] back in [src].") + qdel(pipe) + +// adding a pipe dispensers that spawn unhooked from the ground +/obj/machinery/pipedispenser/orderable + anchored = FALSE + unwrenched = 1 + +/obj/machinery/pipedispenser/disposal/orderable + anchored = FALSE + unwrenched = 1 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index e880e12d2f..3b8bc482de 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -1,1131 +1,1131 @@ -/* Portable Turrets: - Constructed from metal, a gun of choice, and a prox sensor. - This code is slightly more documented than normal, as requested by XSI on IRC. -*/ - -/datum/category_item/catalogue/technology/turret - name = "Turrets" - desc = "This imtimidating machine is essentially an automated gun. It is able to \ - scan its immediate environment, and if it determines that a threat is nearby, it will \ - open up, aim the barrel of the weapon at the threat, and engage it until the threat \ - goes away, it dies (if using a lethal gun), or the turret is destroyed. This has made them \ - well suited for long term defense for a static position, as electricity costs much \ - less than hiring a person to stand around. Despite this, the lack of a sapient entity's \ - judgement has sometimes lead to tragedy when turrets are poorly configured.\ -

                    \ - Early models generally had simple designs, and would shoot at anything that moved, with only \ - the option to disable it remotely for maintenance or to let someone pass. More modern iterations \ - of turrets have instead replaced those simple systems with intricate optical sensors and \ - image recognition software that allow the turret to distinguish between several kinds of \ - entities, and to only engage whatever their owners configured them to fight against.\ - Some models also have the ability to switch between a lethal and non-lethal mode.\ -

                    \ - Today's cutting edge in static defense development has shifted away from improving the \ - software of the turret, and instead towards the hardware. The newest solutions for \ - automated protection includes new hardware capabilities such as thicker armor, more \ - advanced integrated weapons, and some may even have been built with EM hardening in \ - mind." - value = CATALOGUER_REWARD_MEDIUM - - -#define TURRET_PRIORITY_TARGET 2 -#define TURRET_SECONDARY_TARGET 1 -#define TURRET_NOT_TARGET 0 - -/obj/machinery/porta_turret - name = "turret" - catalogue_data = list(/datum/category_item/catalogue/technology/turret) - icon = 'icons/obj/turrets.dmi' - icon_state = "turret_cover_normal" - anchored = TRUE - - density = FALSE - use_power = TRUE //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 - power_channel = EQUIP //drains power from the EQUIPMENT channel - req_one_access = list(access_security, access_heads) - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - - var/raised = FALSE //if the turret cover is "open" and the turret is raised - var/raising= FALSE //if the turret is currently opening or closing its cover - var/health = 80 //the turret's health - var/maxhealth = 80 //turrets maximal health. - var/auto_repair = FALSE //if 1 the turret slowly repairs itself. - 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/weapon/gun/energy/gun //the type of weapon installed - var/gun_charge = 0 //the charge of the gun inserted - var/projectile = null //holder for bullettype - var/lethal_projectile = null //holder for the shot when emagged - var/reqpower = 500 //holder for power needed - var/turret_type = "normal" - var/icon_color = "blue" - var/lethal_icon_color = "blue" - - var/last_fired = FALSE //TRUE: if the turret is cooling down from a shot, FALSE: turret is ready to fire - var/shot_delay = 1.5 SECONDS //1.5 seconds between each shot - - var/targetting_is_configurable = TRUE // if false, you cannot change who this turret attacks via its UI - var/check_arrest = TRUE //checks if the perp is set to arrest - var/check_records = TRUE //checks if a security record exists at all - var/check_weapons = FALSE //checks if it can shoot people that have a weapon they aren't authorized to have - var/check_access = TRUE //if this is active, the turret shoots everything that does not meet the access requirements - var/check_anomalies = TRUE //checks if it can shoot at unidentified lifeforms (ie xenos) - var/check_synth = FALSE //if active, will shoot at anything not an AI or cyborg - var/check_all = FALSE //If active, will fire on anything, including synthetics. - var/ailock = FALSE // AI cannot use this - var/check_down = FALSE //If active, will shoot to kill when lethals are also on - var/faction = null //if set, will not fire at people in the same faction for any reason. - - var/attacked = FALSE //if set to TRUE, the turret gets pissed off and shoots at people nearby (unless they have sec access!) - - var/enabled = TRUE //determines if the turret is on - var/lethal = FALSE //whether in lethal or stun mode - var/lethal_is_configurable = TRUE // if false, its lethal setting cannot be changed - var/disabled = FALSE - - var/shot_sound //what sound should play when the turret fires - var/lethal_shot_sound //what sound should play when the emagged turret fires - - var/datum/effect/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks? - - var/wrenching = FALSE - var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range - var/timeout = 10 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down. - var/can_salvage = TRUE // If false, salvaging doesn't give you anything. - -/obj/machinery/porta_turret/crescent - req_one_access = list(access_cent_specops) - enabled = FALSE - ailock = TRUE - check_synth = FALSE - check_access = TRUE - check_arrest = TRUE - check_records = TRUE - check_weapons = TRUE - check_anomalies = TRUE - check_all = FALSE - check_down = TRUE - -/obj/machinery/porta_turret/can_catalogue(mob/user) // Dead turrets can't be scanned. - if(stat & BROKEN) - to_chat(user, span("warning", "\The [src] was destroyed, so it cannot be scanned.")) - return FALSE - return ..() - -/obj/machinery/porta_turret/stationary - ailock = TRUE - lethal = TRUE - installation = /obj/item/weapon/gun/energy/laser - -/obj/machinery/porta_turret/stationary/syndie // Generic turrets for POIs that need to not shoot their buddies. - req_one_access = list(access_syndicate) - enabled = TRUE - check_all = TRUE - faction = "syndicate" // Make sure this equals the faction that the mobs in the POI have or they will fight each other. - -/obj/machinery/porta_turret/ai_defense - name = "defense turret" - desc = "This variant appears to be much more durable." - req_one_access = list(access_synth) // Just in case. - installation = /obj/item/weapon/gun/energy/xray // For the armor pen. - health = 250 // Since lasers do 40 each. - maxhealth = 250 - -/datum/category_item/catalogue/anomalous/precursor_a/alien_turret - name = "Precursor Alpha Object - Turrets" - desc = "An autonomous defense turret created by unknown ancient aliens. It utilizes an \ - integrated laser projector to harm, firing a cyan beam at the target. The signal processing \ - of this mechanism appears to be radically different to conventional electronics used by modern \ - technology, which appears to be much less susceptible to external electromagnetic influences.\ -

                    \ - This makes the turret be very resistant to the effects of an EM pulse. It is unknown if whatever \ - species that built the turret had intended for it to have that quality, or if it was an incidental \ - quirk of how they designed their electronics." - value = CATALOGUER_REWARD_MEDIUM - -/obj/machinery/porta_turret/alien // The kind used on the UFO submap. - name = "interior anti-boarding turret" - desc = "A very tough looking turret made by alien hands." - catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_turret) - icon_state = "turret_cover_alien" - req_one_access = list(access_alien) - installation = /obj/item/weapon/gun/energy/alien - enabled = TRUE - lethal = TRUE - ailock = TRUE - check_all = TRUE - health = 250 // Similar to the AI turrets. - maxhealth = 250 - turret_type = "alien" - -/obj/machinery/porta_turret/alien/destroyed // Turrets that are already dead, to act as a warning of what the rest of the submap contains. - name = "broken interior anti-boarding turret" - desc = "A very tough looking turret made by alien hands. This one looks destroyed, thankfully." - icon_state = "destroyed_target_prism_alien" - stat = BROKEN - can_salvage = FALSE // So you need to actually kill a turret to get the alien gun. - -/obj/machinery/porta_turret/industrial - name = "industrial turret" - desc = "This variant appears to be much more rugged." - req_one_access = list(access_heads) - icon_state = "turret_cover_industrial" - installation = /obj/item/weapon/gun/energy/locked/phasegun/unlocked - health = 200 - maxhealth = 200 - turret_type = "industrial" - -/obj/machinery/porta_turret/industrial/bullet_act(obj/item/projectile/Proj) - var/damage = round(Proj.get_structure_damage() * 1.33) - - if(!damage) - return - - if(enabled) - if(!attacked && !emagged) - attacked = TRUE - spawn() - sleep(60) - attacked = FALSE - - take_damage(damage) - -/obj/machinery/porta_turret/industrial/attack_generic(mob/living/L, damage) - return ..(L, damage * 0.8) - -/obj/machinery/porta_turret/industrial/teleport_defense - name = "defense turret" - desc = "This variant appears to be much more durable, with a rugged outer coating." - req_one_access = list(access_heads) - installation = /obj/item/weapon/gun/energy/gun/burst - health = 250 - maxhealth = 250 - -/obj/machinery/porta_turret/poi //These are always angry - enabled = TRUE - lethal = TRUE - ailock = TRUE - check_all = TRUE - can_salvage = FALSE // So you can't just twoshot a turret and get a fancy gun - -/obj/machinery/porta_turret/lasertag - name = "lasertag turret" - turret_type = "normal" - req_one_access = list() - installation = /obj/item/weapon/gun/energy/lasertag/omni - - targetting_is_configurable = FALSE - lethal_is_configurable = FALSE - - locked = FALSE - enabled = FALSE - anchored = FALSE - //These two are used for lasertag - check_synth = FALSE - check_weapons = FALSE - //These vars aren't used - check_access = FALSE - check_arrest = FALSE - check_records = FALSE - check_anomalies = FALSE - check_all = FALSE - check_down = FALSE - -/obj/machinery/porta_turret/lasertag/red - turret_type = "red" - installation = /obj/item/weapon/gun/energy/lasertag/red - check_weapons = TRUE // Used to target blue players - -/obj/machinery/porta_turret/lasertag/blue - turret_type = "blue" - installation = /obj/item/weapon/gun/energy/lasertag/blue - check_synth = TRUE // Used to target red players - -/obj/machinery/porta_turret/lasertag/assess_living(var/mob/living/L) - if(!ishuman(L)) - return TURRET_NOT_TARGET - - if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var - return TURRET_NOT_TARGET - - if(get_dist(src, L) > 7) //if it's too far away, why bother? - return TURRET_NOT_TARGET - - if(!(L in check_trajectory(L, src))) //check if we have true line of sight - return TURRET_NOT_TARGET - - if(L.lying) //Don't need to stun-lock the players - return TURRET_NOT_TARGET - - if(ishuman(L)) - var/mob/living/carbon/human/M = L - if(istype(M.wear_suit, /obj/item/clothing/suit/redtag) && check_synth) // Checks if they are a red player - return TURRET_PRIORITY_TARGET - - if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag) && check_weapons) // Checks if they are a blue player - return TURRET_PRIORITY_TARGET - -/obj/machinery/porta_turret/lasertag/tgui_data(mob/user) - var/list/data = list( - "locked" = isLocked(user), // does the current user have access? - "on" = enabled, // is turret turned on? - "lethal" = lethal, - "lethal_is_configurable" = lethal_is_configurable - ) - return data - -/obj/machinery/porta_turret/Initialize() - //Sets up a spark system - spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - setup() - - // If turrets ever switch overlays, this will need to be cached and reapplied each time overlays_cut() is called. - var/image/turret_opened_overlay = image(icon, "open_[turret_type]") - turret_opened_overlay.layer = layer-0.1 - add_overlay(turret_opened_overlay) - return ..() - -/obj/machinery/porta_turret/Destroy() - qdel(spark_system) - spark_system = null - return ..() - -/obj/machinery/porta_turret/update_icon() - if(stat & BROKEN) // Turret is dead. - icon_state = "destroyed_target_prism_[turret_type]" - - else if(raised || raising) - // Turret is open. - if(powered() && enabled) - // Trying to shoot someone. - if(lethal) - icon_state = "[lethal_icon_color]_target_prism_[turret_type]" - else - icon_state = "[icon_color]_target_prism_[turret_type]" - - else - // Disabled. - icon_state = "grey_target_prism_[turret_type]" - - else - // Its closed. - icon_state = "turret_cover_[turret_type]" - - -/obj/machinery/porta_turret/proc/setup() - var/obj/item/weapon/gun/energy/E = installation //All energy-based weapons are applicable - var/obj/item/projectile/P = initial(E.projectile_type) - //var/obj/item/ammo_casing/shottype = E.projectile_type - - projectile = P - lethal_projectile = projectile - shot_sound = initial(P.fire_sound) - lethal_shot_sound = shot_sound - - if(istype(P, /obj/item/projectile/energy)) - icon_color = "orange" - - else if(istype(P, /obj/item/projectile/beam/stun)) - icon_color = "blue" - - else if(istype(P, /obj/item/projectile/beam/lasertag)) - icon_color = "blue" - - else if(istype(P, /obj/item/projectile/beam)) - icon_color = "red" - - else - icon_color = "blue" - - lethal_icon_color = icon_color - - weapon_setup(installation) - -/obj/machinery/porta_turret/proc/weapon_setup(var/guntype) - switch(guntype) - if(/obj/item/weapon/gun/energy/gun/burst) - lethal_icon_color = "red" - lethal_projectile = /obj/item/projectile/beam/burstlaser - lethal_shot_sound = 'sound/weapons/Laser.ogg' - shot_delay = 1 SECOND - - if(/obj/item/weapon/gun/energy/locked/phasegun/unlocked) - icon_color = "orange" - lethal_icon_color = "orange" - lethal_projectile = /obj/item/projectile/energy/phase/heavy - shot_delay = 1 SECOND - - if(/obj/item/weapon/gun/energy/gun) - lethal_icon_color = "red" - lethal_projectile = /obj/item/projectile/beam //If it has, going to kill mode - lethal_shot_sound = 'sound/weapons/Laser.ogg' - - if(/obj/item/weapon/gun/energy/gun/nuclear) - lethal_icon_color = "red" - lethal_projectile = /obj/item/projectile/beam //If it has, going to kill mode - lethal_shot_sound = 'sound/weapons/Laser.ogg' - - if(/obj/item/weapon/gun/energy/xray) - lethal_icon_color = "green" - lethal_projectile = /obj/item/projectile/beam/xray - projectile = /obj/item/projectile/beam/stun // Otherwise we fire xrays on both modes. - lethal_shot_sound = 'sound/weapons/eluger.ogg' - shot_sound = 'sound/weapons/Taser.ogg' - -/obj/machinery/porta_turret/proc/HasController() - var/area/A = get_area(src) - return A && A.turret_controls.len > 0 - -/obj/machinery/porta_turret/proc/isLocked(mob/user) - if(HasController()) - return TRUE - if(isrobot(user) || isAI(user)) - if(ailock) - to_chat(user, "There seems to be a firewall preventing you from accessing this device.") - return TRUE - else - return FALSE - if(isobserver(user)) - var/mob/observer/dead/D = user - if(D.can_admin_interact()) - return FALSE - else - return TRUE - if(locked) - return TRUE - return FALSE - -/obj/machinery/porta_turret/attack_ai(mob/user) - tgui_interact(user) - -/obj/machinery/porta_turret/attack_ghost(mob/user) - tgui_interact(user) - -/obj/machinery/porta_turret/attack_hand(mob/user) - tgui_interact(user) - -/obj/machinery/porta_turret/tgui_interact(mob/user, datum/tgui/ui = null) - if(HasController()) - to_chat(user, "[src] can only be controlled using the assigned turret controller.") - return - if(!anchored) - to_chat(user, "[src] has to be secured first!") - return - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) - ui.open() - -/obj/machinery/porta_turret/tgui_data(mob/user) - var/list/data = list( - "locked" = isLocked(user), // does the current user have access? - "on" = enabled, - "targetting_is_configurable" = targetting_is_configurable, // If false, targetting settings don't show up - "lethal" = lethal, - "lethal_is_configurable" = lethal_is_configurable, - "check_weapons" = check_weapons, - "neutralize_noaccess" = check_access, - "neutralize_norecord" = check_records, - "neutralize_criminals" = check_arrest, - "neutralize_all" = check_all, - "neutralize_nonsynth" = check_synth, - "neutralize_unidentified" = check_anomalies, - "neutralize_down" = check_down, - ) - return data - -/obj/machinery/porta_turret/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - if(isLocked(usr)) - return TRUE - . = TRUE - - switch(action) - if("power") - enabled = !enabled - if("lethal") - if(lethal_is_configurable) - lethal = !lethal - if(targetting_is_configurable) - switch(action) - if("authweapon") - check_weapons = !check_weapons - if("authaccess") - check_access = !check_access - if("authnorecord") - check_records = !check_records - if("autharrest") - check_arrest = !check_arrest - if("authxeno") - check_anomalies = !check_anomalies - if("authsynth") - check_synth = !check_synth - if("authall") - check_all = !check_all - if("authdown") - check_down = !check_down - -/obj/machinery/porta_turret/power_change() - if(powered()) - stat &= ~NOPOWER - update_icon() - else - spawn(rand(0, 15)) - stat |= NOPOWER - update_icon() - - -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user) - if(stat & BROKEN) - if(I.has_tool_quality(TOOL_CROWBAR)) - //If the turret is destroyed, you can remove it with a crowbar to - //try and salvage its components - to_chat(user, "You begin prying the metal coverings off.") - if(do_after(user, 20)) - if(can_salvage && prob(70)) - to_chat(user, "You remove the turret and salvage some components.") - if(installation) - var/obj/item/weapon/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge - Gun.update_icon() - if(prob(50)) - new /obj/item/stack/material/steel(loc, rand(1,4)) - if(prob(50)) - new /obj/item/device/assembly/prox_sensor(loc) - else - to_chat(user, "You remove the turret but did not manage to salvage anything.") - qdel(src) // qdel - - else if(I.has_tool_quality(TOOL_WRENCH)) - if(enabled || raised) - to_chat(user, "You cannot unsecure an active turret!") - return - if(wrenching) - to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret!") - return - if(!anchored && isinspace()) - to_chat(user, "Cannot secure turrets in space!") - return - - user.visible_message(\ - "[user] begins [anchored ? "un" : ""]securing the turret.", \ - "You begin [anchored ? "un" : ""]securing the turret." \ - ) - - wrenching = TRUE - if(do_after(user, 50 * I.toolspeed)) - //This code handles moving the turret around. After all, it's a portable turret! - if(!anchored) - playsound(src, I.usesound, 100, 1) - anchored = TRUE - update_icon() - to_chat(user, "You secure the exterior bolts on the turret.") - else if(anchored) - playsound(src, I.usesound, 100, 1) - anchored = FALSE - to_chat(user, "You unsecure the exterior bolts on the turret.") - update_icon() - wrenching = FALSE - - else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) - //Behavior lock/unlock mangement - if(allowed(user)) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") - updateUsrDialog() - else - to_chat(user, "Access denied.") - - else - //if the turret was attacked with the intention of harming it: - user.setClickCooldown(user.get_attack_speed(I)) - take_damage(I.force * 0.5) - if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = 0 - ..() - -/obj/machinery/porta_turret/attack_generic(mob/living/L, damage) - if(isanimal(L)) - var/mob/living/simple_mob/S = L - if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) - var/incoming_damage = round(damage - (damage / 5)) //Turrets are slightly armored, assumedly. - visible_message("\The [S] [pick(S.attacktext)] \the [src]!") - take_damage(incoming_damage) - S.do_attack_animation(src) - return 1 - visible_message("\The [L] bonks \the [src]'s casing!") - return ..() - -/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - //Emagging the turret makes it go bonkers and stun everyone. It also makes - //the turret shoot much, much faster. - to_chat(user, "You short out [src]'s threat assessment circuits.") - visible_message("[src] hums oddly...") - emagged = TRUE - controllock = TRUE - enabled = FALSE //turns off the turret temporarily - sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit - enabled = TRUE //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here - return 1 - -/obj/machinery/porta_turret/take_damage(var/force) - if(!raised && !raising) - force = force / 8 - if(force < 5) - return - - health -= force - if(force > 5 && prob(45)) - spark_system.start() - if(health <= 0) - die() //the death process :( - -/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) - var/damage = Proj.get_structure_damage() - - if(!damage) - return - - if(enabled) - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = FALSE - - ..() - - take_damage(damage) - -/obj/machinery/porta_turret/emp_act(severity) - if(enabled) - //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 - check_arrest = prob(50) - check_records = prob(50) - check_weapons = prob(50) - check_access = prob(20) // check_access is a pretty big deal, so it's least likely to get turned on - check_anomalies = prob(50) - if(prob(5)) - emagged = TRUE - - enabled=0 - spawn(rand(60,600)) - if(!enabled) - enabled = TRUE - - ..() - -/obj/machinery/porta_turret/ai_defense/emp_act(severity) - if(prob(33)) // One in three chance to resist an EMP. This is significant if an AoE EMP is involved against multiple turrets. - return - ..() - -/obj/machinery/porta_turret/alien/emp_act(severity) // This is overrided to give an EMP resistance as well as avoid scambling the turret settings. - if(prob(75)) // Superior alien technology, I guess. - return - enabled = FALSE - spawn(rand(1 MINUTE, 2 MINUTES)) - if(!enabled) - enabled = TRUE - -/obj/machinery/porta_turret/ex_act(severity) - switch (severity) - if(1) - qdel(src) - if(2) - if(prob(25)) - qdel(src) - else - take_damage(initial(health) * 8) //should instakill most turrets - if(3) - take_damage(initial(health) * 8 / 3) //Level 4 is too weak to bother turrets - -/obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 - health = 0 - stat |= BROKEN //enables the BROKEN bit - spark_system.start() //creates some sparks because they look cool - update_icon() - -/obj/machinery/porta_turret/process() - //the main machinery process - - if(stat & (NOPOWER|BROKEN)) - //if the turret has no power or is broken, make the turret pop down if it hasn't already - popDown() - return - - if(!enabled) - //if the turret is off, make it pop down - popDown() - return - - var/list/targets = list() //list of primary targets - var/list/secondarytargets = list() //targets that are least important - - /* CHOMPEdit Start - var/list/seenturfs = list() - for(var/turf/T in oview(world.view, src)) - seenturfs += T - - for(var/mob/M as anything in living_mob_list) - if(M.z != z) //Skip - continue - if(get_turf(M) in seenturfs) - assess_and_assign(M, targets, secondarytargets) - This was dumb.*/ - - for(var/mob/M in oview(world.view, src)) - assess_and_assign(M, targets, secondarytargets) - //CHOMPEdit End - - if(!tryToShootAt(targets)) - if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets - timeout-- - if(timeout <= 0) - spawn() - popDown() // no valid targets, close the cover - - if(auto_repair && (health < maxhealth)) - use_power(20000) - health = min(health+1, maxhealth) // 1HP for 20kJ - -/obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets) - switch(assess_living(L)) - if(TURRET_PRIORITY_TARGET) - targets += L - if(TURRET_SECONDARY_TARGET) - secondarytargets += L - -/obj/machinery/porta_turret/proc/assess_living(var/mob/living/L) - if(!istype(L)) - return TURRET_NOT_TARGET - - if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var - return TURRET_NOT_TARGET - - if(!L) - return TURRET_NOT_TARGET - - if(faction && L.faction == faction) - return TURRET_NOT_TARGET - - if(!emagged && issilicon(L) && check_all == FALSE) // Don't target silica, unless told to neutralize everything. - return TURRET_NOT_TARGET - - if(L.stat == DEAD && !emagged) //if the perp is dead, no need to bother really - return TURRET_NOT_TARGET //move onto next potential victim! - - if(get_dist(src, L) > 7) //if it's too far away, why bother? - return TURRET_NOT_TARGET - - if(!(L in check_trajectory(L, src))) //check if we have true line of sight - return TURRET_NOT_TARGET - - if(emagged) // If emagged not even the dead get a rest - return L.stat ? TURRET_SECONDARY_TARGET : TURRET_PRIORITY_TARGET - - if(lethal && locate(/mob/living/silicon/ai) in get_turf(L)) //don't accidentally kill the AI! - return TURRET_NOT_TARGET - - if(check_synth || check_all) //If it's set to attack all non-silicons or everything, target them! - if(L.lying) - return check_down ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - return TURRET_PRIORITY_TARGET - - if(iscuffed(L)) // If the target is handcuffed, leave it alone - return TURRET_NOT_TARGET - - if(isanimal(L)) // Animals are not so dangerous - return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - - if(isxenomorph(L) || isalien(L)) // Xenos are dangerous - return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET - - if(ishuman(L)) //if the target is a human, analyze threat level - if(assess_perp(L) < 4) - return TURRET_NOT_TARGET //if threat level < 4, keep going - - if(L.lying) //if the perp is lying down, it's still a target but a less-important target - return check_down ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - - return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee - -/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H) - if(!H || !istype(H)) - return 0 - - if(emagged) - return 10 - - return H.assess_perp(src, check_access, check_weapons, check_records, check_arrest) - -/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) - if(targets.len && last_target && (last_target in targets) && target(last_target)) - return 1 - - while(targets.len > 0) - var/mob/living/M = pick(targets) - targets -= M - if(target(M)) - return 1 - - -/obj/machinery/porta_turret/proc/popUp() //pops the turret up - if(disabled) - return - if(raising || raised) - return - if(stat & BROKEN) - return - set_raised_raising(raised, 1) - update_icon() - - var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) - flick_holder.layer = layer + 0.1 - flick("popup_[turret_type]", flick_holder) - playsound(src, 'sound/machines/turrets/turret_deploy.ogg', 100, 1) - sleep(10) - qdel(flick_holder) - - set_raised_raising(1, 0) - update_icon() - timeout = 10 - -/obj/machinery/porta_turret/proc/popDown() //pops the turret down - last_target = null - if(disabled) - return - if(raising || !raised) - return - if(stat & BROKEN) - return - set_raised_raising(raised, 1) - update_icon() - - var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) - flick_holder.layer = layer + 0.1 - flick("popdown_[turret_type]", flick_holder) - playsound(src, 'sound/machines/turrets/turret_retract.ogg', 100, 1) - sleep(10) - qdel(flick_holder) - - set_raised_raising(0, 0) - update_icon() - timeout = 10 - -/obj/machinery/porta_turret/proc/set_raised_raising(var/incoming_raised, var/incoming_raising) - raised = incoming_raised - raising = incoming_raising - density = raised || raising - -/obj/machinery/porta_turret/proc/target(var/mob/living/target) - if(disabled) - return - if(target) - last_target = target - spawn() - popUp() //pop the turret up if it's not already up. - set_dir(get_dir(src, target)) //even if you can't shoot, follow the target - playsound(src, 'sound/machines/turrets/turret_rotate.ogg', 100, 1) // Play rotating sound - spawn() - shootAt(target) - return 1 - return - -/obj/machinery/porta_turret/proc/shootAt(var/mob/living/target) - //any emagged turrets will shoot extremely fast! This not only is deadly, but drains a lot power! - if(!(emagged || attacked)) //if it hasn't been emagged or attacked, it has to obey a cooldown rate - if(last_fired || !raised) //prevents rapid-fire shooting, unless it's been emagged - return - last_fired = TRUE - spawn() - sleep(shot_delay) - last_fired = FALSE - - var/turf/T = get_turf(src) - var/turf/U = get_turf(target) - if(!istype(T) || !istype(U)) - return - - if(!raised) //the turret has to be raised in order to fire - makes sense, right? - return - - update_icon() - var/obj/item/projectile/A - if(emagged || lethal) - A = new lethal_projectile(loc) - playsound(src, lethal_shot_sound, 75, 1) - else - A = new projectile(loc) - playsound(src, shot_sound, 75, 1) - - // Lethal/emagged turrets use twice the power due to higher energy beams - // Emagged turrets again use twice as much power due to higher firing rates - use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) - - //Turrets aim for the center of mass by default. - //If the target is grabbing someone then the turret smartly aims for extremities - var/def_zone - var/obj/item/weapon/grab/G = locate() in target - if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. - def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) - else - def_zone = pick(BP_TORSO, BP_GROIN) - - //Shooting Code: - A.firer = src - A.old_style_target(target) - A.launch_projectile_from_turf(target, def_zone, src) - - // Reset the time needed to go back down, since we just tried to shoot at someone. - timeout = 10 - -/datum/turret_checks - var/enabled - var/lethal - var/check_synth - var/check_access - var/check_records - var/check_arrest - var/check_weapons - var/check_anomalies - var/check_all - var/ailock - -/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) - if(controllock) - return - enabled = TC.enabled - lethal = TC.lethal - - check_synth = TC.check_synth - check_access = TC.check_access - check_records = TC.check_records - check_arrest = TC.check_arrest - check_weapons = TC.check_weapons - check_anomalies = TC.check_anomalies - check_all = TC.check_all - ailock = TC.ailock - - power_change() - -/* - Portable turret constructions - Known as "turret frame"s -*/ - -/obj/machinery/porta_turret_construct - name = "turret frame" - icon = 'icons/obj/turrets.dmi' - icon_state = "turret_frame" - density=TRUE - var/target_type = /obj/machinery/porta_turret // The type we intend to build - var/build_step = 0 //the current step in the building process - var/finish_name="turret" //the name applied to the product turret - var/installation = null //the gun type installed - var/gun_charge = 0 //the gun charge of the gun type installed - -/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user) - //this is a bit unwieldy but self-explanatory - switch(build_step) - if(0) //first step - if(I.has_tool_quality(TOOL_WRENCH) && !anchored) - playsound(src, I.usesound, 100, 1) - to_chat(user, "You secure the external bolts.") - anchored = TRUE - build_step = 1 - return - - else if(I.has_tool_quality(TOOL_CROWBAR) && !anchored) - playsound(src, I.usesound, 75, 1) - to_chat(user, "You dismantle the turret construction.") - new /obj/item/stack/material/steel(loc, 5) - qdel(src) - return - - if(1) - if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_STEEL) - var/obj/item/stack/M = I - if(M.use(2)) - to_chat(user, "You add some metal armor to the interior frame.") - build_step = 2 - icon_state = "turret_frame2" - else - to_chat(user, "You need two sheets of metal to continue construction.") - return - - else if(I.has_tool_quality(TOOL_WRENCH)) - playsound(src, I.usesound, 75, 1) - to_chat(user, "You unfasten the external bolts.") - anchored = FALSE - build_step = 0 - return - - if(2) - if(I.has_tool_quality(TOOL_WRENCH)) - playsound(src, I.usesound, 100, 1) - to_chat(user, "You bolt the metal armor into place.") - build_step = 3 - return - - else if(I.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = I.get_welder() - if(!WT.isOn()) - return - if(WT.get_fuel() < 5) //uses up 5 fuel. - to_chat(user, "You need more fuel to complete this task.") - return - - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20 * I.toolspeed)) - if(!src || !WT.remove_fuel(5, user)) return - build_step = 1 - to_chat(user, "You remove the turret's interior metal armor.") - new /obj/item/stack/material/steel(loc, 2) - return - - if(3) - if(istype(I, /obj/item/weapon/gun/energy)) //the gun installation part - - if(isrobot(user)) - return - var/obj/item/weapon/gun/energy/E = I //typecasts the item to an energy gun - if(!user.unEquip(I)) - to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") - return - installation = I.type //installation becomes I.type - gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge - to_chat(user, "You add [I] to the turret.") - target_type = /obj/machinery/porta_turret - - build_step = 4 - qdel(I) //delete the gun :( - return - - else if(I.has_tool_quality(TOOL_WRENCH)) - playsound(src, I.usesound, 100, 1) - to_chat(user, "You remove the turret's metal armor bolts.") - build_step = 2 - return - - if(4) - if(isprox(I)) - build_step = 5 - if(!user.unEquip(I)) - to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") - return - to_chat(user, "You add the prox sensor to the turret.") - qdel(I) - return - - //attack_hand() removes the gun - - if(5) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(src, I.usesound, 100, 1) - build_step = 6 - to_chat(user, "You close the internal access hatch.") - return - - //attack_hand() removes the prox sensor - - if(6) - if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_STEEL) - var/obj/item/stack/M = I - if(M.use(2)) - to_chat(user, "You add some metal armor to the exterior frame.") - build_step = 7 - else - to_chat(user, "You need two sheets of metal to continue construction.") - return - - else if(I.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(src, I.usesound, 100, 1) - build_step = 5 - to_chat(user, "You open the internal access hatch.") - return - - if(7) - if(I.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = I.get_welder() - if(!WT.isOn()) return - if(WT.get_fuel() < 5) - to_chat(user, "You need more fuel to complete this task.") - - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 30 * WT.toolspeed)) - if(!src || !WT.remove_fuel(5, user)) - return - build_step = 8 - to_chat(user, "You weld the turret's armor down.") - - //The final step: create a full turret - var/obj/machinery/porta_turret/Turret = new target_type(loc) - Turret.name = finish_name - Turret.installation = installation - Turret.gun_charge = gun_charge - Turret.enabled = 0 - Turret.setup() - - qdel(src) // qdel - - else if(I.has_tool_quality(TOOL_CROWBAR)) - playsound(src, I.usesound, 75, 1) - to_chat(user, "You pry off the turret's exterior armor.") - new /obj/item/stack/material/steel(loc, 2) - build_step = 6 - return - - if(istype(I, /obj/item/weapon/pen)) //you can rename turrets like bots! - var/t = sanitizeSafe(tgui_input_text(user, "Enter new turret name", name, finish_name, MAX_NAME_LEN), MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - - finish_name = t - return - - ..() - -/obj/machinery/porta_turret_construct/attack_hand(mob/user) - switch(build_step) - if(4) - if(!installation) - return - build_step = 3 - - var/obj/item/weapon/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge - Gun.update_icon() - installation = null - gun_charge = 0 - to_chat(user, "You remove [Gun] from the turret frame.") - - if(5) - to_chat(user, "You remove the prox sensor from the turret frame.") - new /obj/item/device/assembly/prox_sensor(loc) - build_step = 4 - -/obj/machinery/porta_turret_construct/attack_ai() - return - -/atom/movable/porta_turret_cover - icon = 'icons/obj/turrets.dmi' - -#undef TURRET_PRIORITY_TARGET -#undef TURRET_SECONDARY_TARGET -#undef TURRET_NOT_TARGET +/* Portable Turrets: + Constructed from metal, a gun of choice, and a prox sensor. + This code is slightly more documented than normal, as requested by XSI on IRC. +*/ + +/datum/category_item/catalogue/technology/turret + name = "Turrets" + desc = "This imtimidating machine is essentially an automated gun. It is able to \ + scan its immediate environment, and if it determines that a threat is nearby, it will \ + open up, aim the barrel of the weapon at the threat, and engage it until the threat \ + goes away, it dies (if using a lethal gun), or the turret is destroyed. This has made them \ + well suited for long term defense for a static position, as electricity costs much \ + less than hiring a person to stand around. Despite this, the lack of a sapient entity's \ + judgement has sometimes lead to tragedy when turrets are poorly configured.\ +

                    \ + Early models generally had simple designs, and would shoot at anything that moved, with only \ + the option to disable it remotely for maintenance or to let someone pass. More modern iterations \ + of turrets have instead replaced those simple systems with intricate optical sensors and \ + image recognition software that allow the turret to distinguish between several kinds of \ + entities, and to only engage whatever their owners configured them to fight against.\ + Some models also have the ability to switch between a lethal and non-lethal mode.\ +

                    \ + Today's cutting edge in static defense development has shifted away from improving the \ + software of the turret, and instead towards the hardware. The newest solutions for \ + automated protection includes new hardware capabilities such as thicker armor, more \ + advanced integrated weapons, and some may even have been built with EM hardening in \ + mind." + value = CATALOGUER_REWARD_MEDIUM + + +#define TURRET_PRIORITY_TARGET 2 +#define TURRET_SECONDARY_TARGET 1 +#define TURRET_NOT_TARGET 0 + +/obj/machinery/porta_turret + name = "turret" + catalogue_data = list(/datum/category_item/catalogue/technology/turret) + icon = 'icons/obj/turrets.dmi' + icon_state = "turret_cover_normal" + anchored = TRUE + + density = FALSE + use_power = TRUE //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 + power_channel = EQUIP //drains power from the EQUIPMENT channel + req_one_access = list(access_security, access_heads) + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + + var/raised = FALSE //if the turret cover is "open" and the turret is raised + var/raising= FALSE //if the turret is currently opening or closing its cover + var/health = 80 //the turret's health + var/maxhealth = 80 //turrets maximal health. + var/auto_repair = FALSE //if 1 the turret slowly repairs itself. + 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/weapon/gun/energy/gun //the type of weapon installed + var/gun_charge = 0 //the charge of the gun inserted + var/projectile = null //holder for bullettype + var/lethal_projectile = null //holder for the shot when emagged + var/reqpower = 500 //holder for power needed + var/turret_type = "normal" + var/icon_color = "blue" + var/lethal_icon_color = "blue" + + var/last_fired = FALSE //TRUE: if the turret is cooling down from a shot, FALSE: turret is ready to fire + var/shot_delay = 1.5 SECONDS //1.5 seconds between each shot + + var/targetting_is_configurable = TRUE // if false, you cannot change who this turret attacks via its UI + var/check_arrest = TRUE //checks if the perp is set to arrest + var/check_records = TRUE //checks if a security record exists at all + var/check_weapons = FALSE //checks if it can shoot people that have a weapon they aren't authorized to have + var/check_access = TRUE //if this is active, the turret shoots everything that does not meet the access requirements + var/check_anomalies = TRUE //checks if it can shoot at unidentified lifeforms (ie xenos) + var/check_synth = FALSE //if active, will shoot at anything not an AI or cyborg + var/check_all = FALSE //If active, will fire on anything, including synthetics. + var/ailock = FALSE // AI cannot use this + var/check_down = FALSE //If active, will shoot to kill when lethals are also on + var/faction = null //if set, will not fire at people in the same faction for any reason. + + var/attacked = FALSE //if set to TRUE, the turret gets pissed off and shoots at people nearby (unless they have sec access!) + + var/enabled = TRUE //determines if the turret is on + var/lethal = FALSE //whether in lethal or stun mode + var/lethal_is_configurable = TRUE // if false, its lethal setting cannot be changed + var/disabled = FALSE + + var/shot_sound //what sound should play when the turret fires + var/lethal_shot_sound //what sound should play when the emagged turret fires + + var/datum/effect/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks? + + var/wrenching = FALSE + var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range + var/timeout = 10 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down. + var/can_salvage = TRUE // If false, salvaging doesn't give you anything. + +/obj/machinery/porta_turret/crescent + req_one_access = list(access_cent_specops) + enabled = FALSE + ailock = TRUE + check_synth = FALSE + check_access = TRUE + check_arrest = TRUE + check_records = TRUE + check_weapons = TRUE + check_anomalies = TRUE + check_all = FALSE + check_down = TRUE + +/obj/machinery/porta_turret/can_catalogue(mob/user) // Dead turrets can't be scanned. + if(stat & BROKEN) + to_chat(user, span("warning", "\The [src] was destroyed, so it cannot be scanned.")) + return FALSE + return ..() + +/obj/machinery/porta_turret/stationary + ailock = TRUE + lethal = TRUE + installation = /obj/item/weapon/gun/energy/laser + +/obj/machinery/porta_turret/stationary/syndie // Generic turrets for POIs that need to not shoot their buddies. + req_one_access = list(access_syndicate) + enabled = TRUE + check_all = TRUE + faction = "syndicate" // Make sure this equals the faction that the mobs in the POI have or they will fight each other. + +/obj/machinery/porta_turret/ai_defense + name = "defense turret" + desc = "This variant appears to be much more durable." + req_one_access = list(access_synth) // Just in case. + installation = /obj/item/weapon/gun/energy/xray // For the armor pen. + health = 250 // Since lasers do 40 each. + maxhealth = 250 + +/datum/category_item/catalogue/anomalous/precursor_a/alien_turret + name = "Precursor Alpha Object - Turrets" + desc = "An autonomous defense turret created by unknown ancient aliens. It utilizes an \ + integrated laser projector to harm, firing a cyan beam at the target. The signal processing \ + of this mechanism appears to be radically different to conventional electronics used by modern \ + technology, which appears to be much less susceptible to external electromagnetic influences.\ +

                    \ + This makes the turret be very resistant to the effects of an EM pulse. It is unknown if whatever \ + species that built the turret had intended for it to have that quality, or if it was an incidental \ + quirk of how they designed their electronics." + value = CATALOGUER_REWARD_MEDIUM + +/obj/machinery/porta_turret/alien // The kind used on the UFO submap. + name = "interior anti-boarding turret" + desc = "A very tough looking turret made by alien hands." + catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_turret) + icon_state = "turret_cover_alien" + req_one_access = list(access_alien) + installation = /obj/item/weapon/gun/energy/alien + enabled = TRUE + lethal = TRUE + ailock = TRUE + check_all = TRUE + health = 250 // Similar to the AI turrets. + maxhealth = 250 + turret_type = "alien" + +/obj/machinery/porta_turret/alien/destroyed // Turrets that are already dead, to act as a warning of what the rest of the submap contains. + name = "broken interior anti-boarding turret" + desc = "A very tough looking turret made by alien hands. This one looks destroyed, thankfully." + icon_state = "destroyed_target_prism_alien" + stat = BROKEN + can_salvage = FALSE // So you need to actually kill a turret to get the alien gun. + +/obj/machinery/porta_turret/industrial + name = "industrial turret" + desc = "This variant appears to be much more rugged." + req_one_access = list(access_heads) + icon_state = "turret_cover_industrial" + installation = /obj/item/weapon/gun/energy/locked/phasegun/unlocked + health = 200 + maxhealth = 200 + turret_type = "industrial" + +/obj/machinery/porta_turret/industrial/bullet_act(obj/item/projectile/Proj) + var/damage = round(Proj.get_structure_damage() * 1.33) + + if(!damage) + return + + if(enabled) + if(!attacked && !emagged) + attacked = TRUE + spawn() + sleep(60) + attacked = FALSE + + take_damage(damage) + +/obj/machinery/porta_turret/industrial/attack_generic(mob/living/L, damage) + return ..(L, damage * 0.8) + +/obj/machinery/porta_turret/industrial/teleport_defense + name = "defense turret" + desc = "This variant appears to be much more durable, with a rugged outer coating." + req_one_access = list(access_heads) + installation = /obj/item/weapon/gun/energy/gun/burst + health = 250 + maxhealth = 250 + +/obj/machinery/porta_turret/poi //These are always angry + enabled = TRUE + lethal = TRUE + ailock = TRUE + check_all = TRUE + can_salvage = FALSE // So you can't just twoshot a turret and get a fancy gun + +/obj/machinery/porta_turret/lasertag + name = "lasertag turret" + turret_type = "normal" + req_one_access = list() + installation = /obj/item/weapon/gun/energy/lasertag/omni + + targetting_is_configurable = FALSE + lethal_is_configurable = FALSE + + locked = FALSE + enabled = FALSE + anchored = FALSE + //These two are used for lasertag + check_synth = FALSE + check_weapons = FALSE + //These vars aren't used + check_access = FALSE + check_arrest = FALSE + check_records = FALSE + check_anomalies = FALSE + check_all = FALSE + check_down = FALSE + +/obj/machinery/porta_turret/lasertag/red + turret_type = "red" + installation = /obj/item/weapon/gun/energy/lasertag/red + check_weapons = TRUE // Used to target blue players + +/obj/machinery/porta_turret/lasertag/blue + turret_type = "blue" + installation = /obj/item/weapon/gun/energy/lasertag/blue + check_synth = TRUE // Used to target red players + +/obj/machinery/porta_turret/lasertag/assess_living(var/mob/living/L) + if(!ishuman(L)) + return TURRET_NOT_TARGET + + if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var + return TURRET_NOT_TARGET + + if(get_dist(src, L) > 7) //if it's too far away, why bother? + return TURRET_NOT_TARGET + + if(!(L in check_trajectory(L, src))) //check if we have true line of sight + return TURRET_NOT_TARGET + + if(L.lying) //Don't need to stun-lock the players + return TURRET_NOT_TARGET + + if(ishuman(L)) + var/mob/living/carbon/human/M = L + if(istype(M.wear_suit, /obj/item/clothing/suit/redtag) && check_synth) // Checks if they are a red player + return TURRET_PRIORITY_TARGET + + if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag) && check_weapons) // Checks if they are a blue player + return TURRET_PRIORITY_TARGET + +/obj/machinery/porta_turret/lasertag/tgui_data(mob/user) + var/list/data = list( + "locked" = isLocked(user), // does the current user have access? + "on" = enabled, // is turret turned on? + "lethal" = lethal, + "lethal_is_configurable" = lethal_is_configurable + ) + return data + +/obj/machinery/porta_turret/Initialize() + //Sets up a spark system + spark_system = new /datum/effect/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + + setup() + + // If turrets ever switch overlays, this will need to be cached and reapplied each time overlays_cut() is called. + var/image/turret_opened_overlay = image(icon, "open_[turret_type]") + turret_opened_overlay.layer = layer-0.1 + add_overlay(turret_opened_overlay) + return ..() + +/obj/machinery/porta_turret/Destroy() + qdel(spark_system) + spark_system = null + return ..() + +/obj/machinery/porta_turret/update_icon() + if(stat & BROKEN) // Turret is dead. + icon_state = "destroyed_target_prism_[turret_type]" + + else if(raised || raising) + // Turret is open. + if(powered() && enabled) + // Trying to shoot someone. + if(lethal) + icon_state = "[lethal_icon_color]_target_prism_[turret_type]" + else + icon_state = "[icon_color]_target_prism_[turret_type]" + + else + // Disabled. + icon_state = "grey_target_prism_[turret_type]" + + else + // Its closed. + icon_state = "turret_cover_[turret_type]" + + +/obj/machinery/porta_turret/proc/setup() + var/obj/item/weapon/gun/energy/E = installation //All energy-based weapons are applicable + var/obj/item/projectile/P = initial(E.projectile_type) + //var/obj/item/ammo_casing/shottype = E.projectile_type + + projectile = P + lethal_projectile = projectile + shot_sound = initial(P.fire_sound) + lethal_shot_sound = shot_sound + + if(istype(P, /obj/item/projectile/energy)) + icon_color = "orange" + + else if(istype(P, /obj/item/projectile/beam/stun)) + icon_color = "blue" + + else if(istype(P, /obj/item/projectile/beam/lasertag)) + icon_color = "blue" + + else if(istype(P, /obj/item/projectile/beam)) + icon_color = "red" + + else + icon_color = "blue" + + lethal_icon_color = icon_color + + weapon_setup(installation) + +/obj/machinery/porta_turret/proc/weapon_setup(var/guntype) + switch(guntype) + if(/obj/item/weapon/gun/energy/gun/burst) + lethal_icon_color = "red" + lethal_projectile = /obj/item/projectile/beam/burstlaser + lethal_shot_sound = 'sound/weapons/Laser.ogg' + shot_delay = 1 SECOND + + if(/obj/item/weapon/gun/energy/locked/phasegun/unlocked) + icon_color = "orange" + lethal_icon_color = "orange" + lethal_projectile = /obj/item/projectile/energy/phase/heavy + shot_delay = 1 SECOND + + if(/obj/item/weapon/gun/energy/gun) + lethal_icon_color = "red" + lethal_projectile = /obj/item/projectile/beam //If it has, going to kill mode + lethal_shot_sound = 'sound/weapons/Laser.ogg' + + if(/obj/item/weapon/gun/energy/gun/nuclear) + lethal_icon_color = "red" + lethal_projectile = /obj/item/projectile/beam //If it has, going to kill mode + lethal_shot_sound = 'sound/weapons/Laser.ogg' + + if(/obj/item/weapon/gun/energy/xray) + lethal_icon_color = "green" + lethal_projectile = /obj/item/projectile/beam/xray + projectile = /obj/item/projectile/beam/stun // Otherwise we fire xrays on both modes. + lethal_shot_sound = 'sound/weapons/eluger.ogg' + shot_sound = 'sound/weapons/Taser.ogg' + +/obj/machinery/porta_turret/proc/HasController() + var/area/A = get_area(src) + return A && A.turret_controls.len > 0 + +/obj/machinery/porta_turret/proc/isLocked(mob/user) + if(HasController()) + return TRUE + if(isrobot(user) || isAI(user)) + if(ailock) + to_chat(user, "There seems to be a firewall preventing you from accessing this device.") + return TRUE + else + return FALSE + if(isobserver(user)) + var/mob/observer/dead/D = user + if(D.can_admin_interact()) + return FALSE + else + return TRUE + if(locked) + return TRUE + return FALSE + +/obj/machinery/porta_turret/attack_ai(mob/user) + tgui_interact(user) + +/obj/machinery/porta_turret/attack_ghost(mob/user) + tgui_interact(user) + +/obj/machinery/porta_turret/attack_hand(mob/user) + tgui_interact(user) + +/obj/machinery/porta_turret/tgui_interact(mob/user, datum/tgui/ui = null) + if(HasController()) + to_chat(user, "[src] can only be controlled using the assigned turret controller.") + return + if(!anchored) + to_chat(user, "[src] has to be secured first!") + return + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) + ui.open() + +/obj/machinery/porta_turret/tgui_data(mob/user) + var/list/data = list( + "locked" = isLocked(user), // does the current user have access? + "on" = enabled, + "targetting_is_configurable" = targetting_is_configurable, // If false, targetting settings don't show up + "lethal" = lethal, + "lethal_is_configurable" = lethal_is_configurable, + "check_weapons" = check_weapons, + "neutralize_noaccess" = check_access, + "neutralize_norecord" = check_records, + "neutralize_criminals" = check_arrest, + "neutralize_all" = check_all, + "neutralize_nonsynth" = check_synth, + "neutralize_unidentified" = check_anomalies, + "neutralize_down" = check_down, + ) + return data + +/obj/machinery/porta_turret/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + if(isLocked(usr)) + return TRUE + . = TRUE + + switch(action) + if("power") + enabled = !enabled + if("lethal") + if(lethal_is_configurable) + lethal = !lethal + if(targetting_is_configurable) + switch(action) + if("authweapon") + check_weapons = !check_weapons + if("authaccess") + check_access = !check_access + if("authnorecord") + check_records = !check_records + if("autharrest") + check_arrest = !check_arrest + if("authxeno") + check_anomalies = !check_anomalies + if("authsynth") + check_synth = !check_synth + if("authall") + check_all = !check_all + if("authdown") + check_down = !check_down + +/obj/machinery/porta_turret/power_change() + if(powered()) + stat &= ~NOPOWER + update_icon() + else + spawn(rand(0, 15)) + stat |= NOPOWER + update_icon() + + +/obj/machinery/porta_turret/attackby(obj/item/I, mob/user) + if(stat & BROKEN) + if(I.has_tool_quality(TOOL_CROWBAR)) + //If the turret is destroyed, you can remove it with a crowbar to + //try and salvage its components + to_chat(user, "You begin prying the metal coverings off.") + if(do_after(user, 20)) + if(can_salvage && prob(70)) + to_chat(user, "You remove the turret and salvage some components.") + if(installation) + var/obj/item/weapon/gun/energy/Gun = new installation(loc) + Gun.power_supply.charge = gun_charge + Gun.update_icon() + if(prob(50)) + new /obj/item/stack/material/steel(loc, rand(1,4)) + if(prob(50)) + new /obj/item/device/assembly/prox_sensor(loc) + else + to_chat(user, "You remove the turret but did not manage to salvage anything.") + qdel(src) // qdel + + else if(I.has_tool_quality(TOOL_WRENCH)) + if(enabled || raised) + to_chat(user, "You cannot unsecure an active turret!") + return + if(wrenching) + to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret!") + return + if(!anchored && isinspace()) + to_chat(user, "Cannot secure turrets in space!") + return + + user.visible_message(\ + "[user] begins [anchored ? "un" : ""]securing the turret.", \ + "You begin [anchored ? "un" : ""]securing the turret." \ + ) + + wrenching = TRUE + if(do_after(user, 50 * I.toolspeed)) + //This code handles moving the turret around. After all, it's a portable turret! + if(!anchored) + playsound(src, I.usesound, 100, 1) + anchored = TRUE + update_icon() + to_chat(user, "You secure the exterior bolts on the turret.") + else if(anchored) + playsound(src, I.usesound, 100, 1) + anchored = FALSE + to_chat(user, "You unsecure the exterior bolts on the turret.") + update_icon() + wrenching = FALSE + + else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) + //Behavior lock/unlock mangement + if(allowed(user)) + locked = !locked + to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") + updateUsrDialog() + else + to_chat(user, "Access denied.") + + else + //if the turret was attacked with the intention of harming it: + user.setClickCooldown(user.get_attack_speed(I)) + take_damage(I.force * 0.5) + if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off + if(!attacked && !emagged) + attacked = 1 + spawn() + sleep(60) + attacked = 0 + ..() + +/obj/machinery/porta_turret/attack_generic(mob/living/L, damage) + if(isanimal(L)) + var/mob/living/simple_mob/S = L + if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) + var/incoming_damage = round(damage - (damage / 5)) //Turrets are slightly armored, assumedly. + visible_message("\The [S] [pick(S.attacktext)] \the [src]!") + take_damage(incoming_damage) + S.do_attack_animation(src) + return 1 + visible_message("\The [L] bonks \the [src]'s casing!") + return ..() + +/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + //Emagging the turret makes it go bonkers and stun everyone. It also makes + //the turret shoot much, much faster. + to_chat(user, "You short out [src]'s threat assessment circuits.") + visible_message("[src] hums oddly...") + emagged = TRUE + controllock = TRUE + enabled = FALSE //turns off the turret temporarily + sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit + enabled = TRUE //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here + return 1 + +/obj/machinery/porta_turret/take_damage(var/force) + if(!raised && !raising) + force = force / 8 + if(force < 5) + return + + health -= force + if(force > 5 && prob(45)) + spark_system.start() + if(health <= 0) + die() //the death process :( + +/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) + var/damage = Proj.get_structure_damage() + + if(!damage) + return + + if(enabled) + if(!attacked && !emagged) + attacked = 1 + spawn() + sleep(60) + attacked = FALSE + + ..() + + take_damage(damage) + +/obj/machinery/porta_turret/emp_act(severity) + if(enabled) + //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 + check_arrest = prob(50) + check_records = prob(50) + check_weapons = prob(50) + check_access = prob(20) // check_access is a pretty big deal, so it's least likely to get turned on + check_anomalies = prob(50) + if(prob(5)) + emagged = TRUE + + enabled=0 + spawn(rand(60,600)) + if(!enabled) + enabled = TRUE + + ..() + +/obj/machinery/porta_turret/ai_defense/emp_act(severity) + if(prob(33)) // One in three chance to resist an EMP. This is significant if an AoE EMP is involved against multiple turrets. + return + ..() + +/obj/machinery/porta_turret/alien/emp_act(severity) // This is overrided to give an EMP resistance as well as avoid scambling the turret settings. + if(prob(75)) // Superior alien technology, I guess. + return + enabled = FALSE + spawn(rand(1 MINUTE, 2 MINUTES)) + if(!enabled) + enabled = TRUE + +/obj/machinery/porta_turret/ex_act(severity) + switch (severity) + if(1) + qdel(src) + if(2) + if(prob(25)) + qdel(src) + else + take_damage(initial(health) * 8) //should instakill most turrets + if(3) + take_damage(initial(health) * 8 / 3) //Level 4 is too weak to bother turrets + +/obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 + health = 0 + stat |= BROKEN //enables the BROKEN bit + spark_system.start() //creates some sparks because they look cool + update_icon() + +/obj/machinery/porta_turret/process() + //the main machinery process + + if(stat & (NOPOWER|BROKEN)) + //if the turret has no power or is broken, make the turret pop down if it hasn't already + popDown() + return + + if(!enabled) + //if the turret is off, make it pop down + popDown() + return + + var/list/targets = list() //list of primary targets + var/list/secondarytargets = list() //targets that are least important + + /* CHOMPEdit Start + var/list/seenturfs = list() + for(var/turf/T in oview(world.view, src)) + seenturfs += T + + for(var/mob/M as anything in living_mob_list) + if(M.z != z) //Skip + continue + if(get_turf(M) in seenturfs) + assess_and_assign(M, targets, secondarytargets) + This was dumb.*/ + + for(var/mob/M in oview(world.view, src)) + assess_and_assign(M, targets, secondarytargets) + //CHOMPEdit End + + if(!tryToShootAt(targets)) + if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets + timeout-- + if(timeout <= 0) + spawn() + popDown() // no valid targets, close the cover + + if(auto_repair && (health < maxhealth)) + use_power(20000) + health = min(health+1, maxhealth) // 1HP for 20kJ + +/obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets) + switch(assess_living(L)) + if(TURRET_PRIORITY_TARGET) + targets += L + if(TURRET_SECONDARY_TARGET) + secondarytargets += L + +/obj/machinery/porta_turret/proc/assess_living(var/mob/living/L) + if(!istype(L)) + return TURRET_NOT_TARGET + + if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var + return TURRET_NOT_TARGET + + if(!L) + return TURRET_NOT_TARGET + + if(faction && L.faction == faction) + return TURRET_NOT_TARGET + + if(!emagged && issilicon(L) && check_all == FALSE) // Don't target silica, unless told to neutralize everything. + return TURRET_NOT_TARGET + + if(L.stat == DEAD && !emagged) //if the perp is dead, no need to bother really + return TURRET_NOT_TARGET //move onto next potential victim! + + if(get_dist(src, L) > 7) //if it's too far away, why bother? + return TURRET_NOT_TARGET + + if(!(L in check_trajectory(L, src))) //check if we have true line of sight + return TURRET_NOT_TARGET + + if(emagged) // If emagged not even the dead get a rest + return L.stat ? TURRET_SECONDARY_TARGET : TURRET_PRIORITY_TARGET + + if(lethal && locate(/mob/living/silicon/ai) in get_turf(L)) //don't accidentally kill the AI! + return TURRET_NOT_TARGET + + if(check_synth || check_all) //If it's set to attack all non-silicons or everything, target them! + if(L.lying) + return check_down ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET + return TURRET_PRIORITY_TARGET + + if(iscuffed(L)) // If the target is handcuffed, leave it alone + return TURRET_NOT_TARGET + + if(isanimal(L)) // Animals are not so dangerous + return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET + + if(isxenomorph(L) || isalien(L)) // Xenos are dangerous + return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET + + if(ishuman(L)) //if the target is a human, analyze threat level + if(assess_perp(L) < 4) + return TURRET_NOT_TARGET //if threat level < 4, keep going + + if(L.lying) //if the perp is lying down, it's still a target but a less-important target + return check_down ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET + + return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee + +/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H) + if(!H || !istype(H)) + return 0 + + if(emagged) + return 10 + + return H.assess_perp(src, check_access, check_weapons, check_records, check_arrest) + +/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) + if(targets.len && last_target && (last_target in targets) && target(last_target)) + return 1 + + while(targets.len > 0) + var/mob/living/M = pick(targets) + targets -= M + if(target(M)) + return 1 + + +/obj/machinery/porta_turret/proc/popUp() //pops the turret up + if(disabled) + return + if(raising || raised) + return + if(stat & BROKEN) + return + set_raised_raising(raised, 1) + update_icon() + + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) + flick_holder.layer = layer + 0.1 + flick("popup_[turret_type]", flick_holder) + playsound(src, 'sound/machines/turrets/turret_deploy.ogg', 100, 1) + sleep(10) + qdel(flick_holder) + + set_raised_raising(1, 0) + update_icon() + timeout = 10 + +/obj/machinery/porta_turret/proc/popDown() //pops the turret down + last_target = null + if(disabled) + return + if(raising || !raised) + return + if(stat & BROKEN) + return + set_raised_raising(raised, 1) + update_icon() + + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) + flick_holder.layer = layer + 0.1 + flick("popdown_[turret_type]", flick_holder) + playsound(src, 'sound/machines/turrets/turret_retract.ogg', 100, 1) + sleep(10) + qdel(flick_holder) + + set_raised_raising(0, 0) + update_icon() + timeout = 10 + +/obj/machinery/porta_turret/proc/set_raised_raising(var/incoming_raised, var/incoming_raising) + raised = incoming_raised + raising = incoming_raising + density = raised || raising + +/obj/machinery/porta_turret/proc/target(var/mob/living/target) + if(disabled) + return + if(target) + last_target = target + spawn() + popUp() //pop the turret up if it's not already up. + set_dir(get_dir(src, target)) //even if you can't shoot, follow the target + playsound(src, 'sound/machines/turrets/turret_rotate.ogg', 100, 1) // Play rotating sound + spawn() + shootAt(target) + return 1 + return + +/obj/machinery/porta_turret/proc/shootAt(var/mob/living/target) + //any emagged turrets will shoot extremely fast! This not only is deadly, but drains a lot power! + if(!(emagged || attacked)) //if it hasn't been emagged or attacked, it has to obey a cooldown rate + if(last_fired || !raised) //prevents rapid-fire shooting, unless it's been emagged + return + last_fired = TRUE + spawn() + sleep(shot_delay) + last_fired = FALSE + + var/turf/T = get_turf(src) + var/turf/U = get_turf(target) + if(!istype(T) || !istype(U)) + return + + if(!raised) //the turret has to be raised in order to fire - makes sense, right? + return + + update_icon() + var/obj/item/projectile/A + if(emagged || lethal) + A = new lethal_projectile(loc) + playsound(src, lethal_shot_sound, 75, 1) + else + A = new projectile(loc) + playsound(src, shot_sound, 75, 1) + + // Lethal/emagged turrets use twice the power due to higher energy beams + // Emagged turrets again use twice as much power due to higher firing rates + use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) + + //Turrets aim for the center of mass by default. + //If the target is grabbing someone then the turret smartly aims for extremities + var/def_zone + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) + else + def_zone = pick(BP_TORSO, BP_GROIN) + + //Shooting Code: + A.firer = src + A.old_style_target(target) + A.launch_projectile_from_turf(target, def_zone, src) + + // Reset the time needed to go back down, since we just tried to shoot at someone. + timeout = 10 + +/datum/turret_checks + var/enabled + var/lethal + var/check_synth + var/check_access + var/check_records + var/check_arrest + var/check_weapons + var/check_anomalies + var/check_all + var/ailock + +/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) + if(controllock) + return + enabled = TC.enabled + lethal = TC.lethal + + check_synth = TC.check_synth + check_access = TC.check_access + check_records = TC.check_records + check_arrest = TC.check_arrest + check_weapons = TC.check_weapons + check_anomalies = TC.check_anomalies + check_all = TC.check_all + ailock = TC.ailock + + power_change() + +/* + Portable turret constructions + Known as "turret frame"s +*/ + +/obj/machinery/porta_turret_construct + name = "turret frame" + icon = 'icons/obj/turrets.dmi' + icon_state = "turret_frame" + density=TRUE + var/target_type = /obj/machinery/porta_turret // The type we intend to build + var/build_step = 0 //the current step in the building process + var/finish_name="turret" //the name applied to the product turret + var/installation = null //the gun type installed + var/gun_charge = 0 //the gun charge of the gun type installed + +/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user) + //this is a bit unwieldy but self-explanatory + switch(build_step) + if(0) //first step + if(I.has_tool_quality(TOOL_WRENCH) && !anchored) + playsound(src, I.usesound, 100, 1) + to_chat(user, "You secure the external bolts.") + anchored = TRUE + build_step = 1 + return + + else if(I.has_tool_quality(TOOL_CROWBAR) && !anchored) + playsound(src, I.usesound, 75, 1) + to_chat(user, "You dismantle the turret construction.") + new /obj/item/stack/material/steel(loc, 5) + qdel(src) + return + + if(1) + if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_STEEL) + var/obj/item/stack/M = I + if(M.use(2)) + to_chat(user, "You add some metal armor to the interior frame.") + build_step = 2 + icon_state = "turret_frame2" + else + to_chat(user, "You need two sheets of metal to continue construction.") + return + + else if(I.has_tool_quality(TOOL_WRENCH)) + playsound(src, I.usesound, 75, 1) + to_chat(user, "You unfasten the external bolts.") + anchored = FALSE + build_step = 0 + return + + if(2) + if(I.has_tool_quality(TOOL_WRENCH)) + playsound(src, I.usesound, 100, 1) + to_chat(user, "You bolt the metal armor into place.") + build_step = 3 + return + + else if(I.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = I.get_welder() + if(!WT.isOn()) + return + if(WT.get_fuel() < 5) //uses up 5 fuel. + to_chat(user, "You need more fuel to complete this task.") + return + + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20 * I.toolspeed)) + if(!src || !WT.remove_fuel(5, user)) return + build_step = 1 + to_chat(user, "You remove the turret's interior metal armor.") + new /obj/item/stack/material/steel(loc, 2) + return + + if(3) + if(istype(I, /obj/item/weapon/gun/energy)) //the gun installation part + + if(isrobot(user)) + return + var/obj/item/weapon/gun/energy/E = I //typecasts the item to an energy gun + if(!user.unEquip(I)) + to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") + return + installation = I.type //installation becomes I.type + gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge + to_chat(user, "You add [I] to the turret.") + target_type = /obj/machinery/porta_turret + + build_step = 4 + qdel(I) //delete the gun :( + return + + else if(I.has_tool_quality(TOOL_WRENCH)) + playsound(src, I.usesound, 100, 1) + to_chat(user, "You remove the turret's metal armor bolts.") + build_step = 2 + return + + if(4) + if(isprox(I)) + build_step = 5 + if(!user.unEquip(I)) + to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") + return + to_chat(user, "You add the prox sensor to the turret.") + qdel(I) + return + + //attack_hand() removes the gun + + if(5) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(src, I.usesound, 100, 1) + build_step = 6 + to_chat(user, "You close the internal access hatch.") + return + + //attack_hand() removes the prox sensor + + if(6) + if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_STEEL) + var/obj/item/stack/M = I + if(M.use(2)) + to_chat(user, "You add some metal armor to the exterior frame.") + build_step = 7 + else + to_chat(user, "You need two sheets of metal to continue construction.") + return + + else if(I.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(src, I.usesound, 100, 1) + build_step = 5 + to_chat(user, "You open the internal access hatch.") + return + + if(7) + if(I.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = I.get_welder() + if(!WT.isOn()) return + if(WT.get_fuel() < 5) + to_chat(user, "You need more fuel to complete this task.") + + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 30 * WT.toolspeed)) + if(!src || !WT.remove_fuel(5, user)) + return + build_step = 8 + to_chat(user, "You weld the turret's armor down.") + + //The final step: create a full turret + var/obj/machinery/porta_turret/Turret = new target_type(loc) + Turret.name = finish_name + Turret.installation = installation + Turret.gun_charge = gun_charge + Turret.enabled = 0 + Turret.setup() + + qdel(src) // qdel + + else if(I.has_tool_quality(TOOL_CROWBAR)) + playsound(src, I.usesound, 75, 1) + to_chat(user, "You pry off the turret's exterior armor.") + new /obj/item/stack/material/steel(loc, 2) + build_step = 6 + return + + if(istype(I, /obj/item/weapon/pen)) //you can rename turrets like bots! + var/t = sanitizeSafe(tgui_input_text(user, "Enter new turret name", name, finish_name, MAX_NAME_LEN), MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + + finish_name = t + return + + ..() + +/obj/machinery/porta_turret_construct/attack_hand(mob/user) + switch(build_step) + if(4) + if(!installation) + return + build_step = 3 + + var/obj/item/weapon/gun/energy/Gun = new installation(loc) + Gun.power_supply.charge = gun_charge + Gun.update_icon() + installation = null + gun_charge = 0 + to_chat(user, "You remove [Gun] from the turret frame.") + + if(5) + to_chat(user, "You remove the prox sensor from the turret frame.") + new /obj/item/device/assembly/prox_sensor(loc) + build_step = 4 + +/obj/machinery/porta_turret_construct/attack_ai() + return + +/atom/movable/porta_turret_cover + icon = 'icons/obj/turrets.dmi' + +#undef TURRET_PRIORITY_TARGET +#undef TURRET_SECONDARY_TARGET +#undef TURRET_NOT_TARGET diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index df9c78fad5..31bc167040 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -1,355 +1,355 @@ -/obj/machinery/recharge_station - name = "cyborg recharging station" - desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" - density = TRUE - anchored = TRUE - unacidable = TRUE - circuit = /obj/item/weapon/circuitboard/recharge_station - use_power = USE_POWER_IDLE - idle_power_usage = 50 - var/mob/occupant = null - var/obj/item/weapon/cell/cell = null - var/icon_update_tick = 0 // Used to rebuild the overlay only once every 10 ticks - var/charging = 0 - - var/charging_power // W. Power rating used for charging the cyborg. 120 kW if un-upgraded - var/restore_power_active // W. Power drawn from APC when an occupant is charging. 40 kW if un-upgraded - var/restore_power_passive // W. Power drawn from APC when idle. 7 kW if un-upgraded - var/weld_rate = 0 // How much brute damage is repaired per tick - var/wire_rate = 0 // How much burn damage is repaired per tick - - var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder - var/wire_power_use = 500 // power used per point of burn damage repaired. - -/obj/machinery/recharge_station/Initialize() - . = ..() - default_apply_parts() - cell = default_use_hicell() - update_icon() - -/obj/machinery/recharge_station/proc/has_cell_power() - return cell && cell.percent() > 0 - -/obj/machinery/recharge_station/process() - if(stat & (BROKEN)) - return - if(!cell) // Shouldn't be possible, but sanity check - return - - if((stat & NOPOWER) && !has_cell_power()) // No power and cell is dead. - if(icon_update_tick) - icon_update_tick = 0 //just rebuild the overlay once more only - update_icon() - return - - //First, draw from the internal power cell to recharge/repair/etc the occupant - if(occupant) - process_occupant() - - //Then, if external power is available, recharge the internal cell - var/recharge_amount = 0 - if(!(stat & NOPOWER)) - // Calculating amount of power to draw - recharge_amount = (occupant ? restore_power_active : restore_power_passive) * CELLRATE - - recharge_amount = cell.give(recharge_amount) - use_power(recharge_amount / CELLRATE) - else - // Since external power is offline, draw operating current from the internal cell - cell.use(get_power_usage() * CELLRATE) - - if(icon_update_tick >= 10) - icon_update_tick = 0 - else - icon_update_tick++ - - if(occupant || recharge_amount) - update_icon() - -//Processes the occupant, drawing from the internal power cell if needed. -/obj/machinery/recharge_station/proc/process_occupant() - if(isrobot(occupant)) - var/mob/living/silicon/robot/R = occupant - var/overcharged = FALSE - if(R.cell.maxcharge < R.cell.charge) - overcharged = TRUE - if(R.module && !overcharged) - R.module.respawn_consumable(R, charging_power * CELLRATE / 250) //consumables are magical, apparently - if(R.cell && !R.cell.fully_charged() && !overcharged) - var/diff = min(R.cell.maxcharge - R.cell.charge, charging_power * CELLRATE) // Capped by charging_power / tick - var/charge_used = cell.use(diff) - R.cell.give(charge_used) - - //Lastly, attempt to repair the cyborg if enabled - if(weld_rate && R.getBruteLoss() && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) - R.adjustBruteLoss(-weld_rate) - if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE)) - R.adjustFireLoss(-wire_rate) - - //VOREStation Add Start - else if(ispAI(occupant)) - var/mob/living/silicon/pai/P = occupant - - if(P.nutrition < 400) - P.nutrition = min(P.nutrition+10, 400) - cell.use(7000/450*10) - //VOREStation Add End - - else if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant - - if(H.isSynthetic()) - // In case they somehow end up with positive values for otherwise unobtainable damage... - if(H.getToxLoss() > 0) - H.adjustToxLoss(-(rand(1,3))) - if(H.getOxyLoss() > 0) - H.adjustOxyLoss(-(rand(1,3))) - if(H.getCloneLoss() > 0) - H.adjustCloneLoss(-(rand(1,3))) - if(H.getBrainLoss() > 0) - H.adjustBrainLoss(-(rand(1,3))) - - // Also recharge their internal battery. - if(H.isSynthetic() && H.nutrition < 500) //VOREStation Edit - H.nutrition = min(H.nutrition+(10*(1-min(H.species.synthetic_food_coeff, 0.9))), 500) //VOREStation Edit - cell.use(7000/450*10) - - // And clear up radiation - if(H.radiation > 0 || H.accumulated_rads > 0) - H.radiation = max(H.radiation - 25, 0) - H.accumulated_rads = max(H.accumulated_rads - 25, 0) - - if(H.wearing_rig) // stepping into a borg charger to charge your rig and fix your shit - var/obj/item/weapon/rig/wornrig = H.get_rig() - if(wornrig) // just to make sure - for(var/obj/item/rig_module/storedmod in wornrig.installed_modules) - if(weld_rate && storedmod.damage && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) - to_chat(H, "[storedmod] is repaired!") - storedmod.damage = 0 - if(wornrig.chest) - var/obj/item/clothing/suit/space/rig/rigchest = wornrig.chest - if(weld_rate && rigchest.damage && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) - rigchest.breaches = list() - rigchest.calc_breach_damage() - to_chat(H, "[rigchest] is repaired!") - if(wornrig.cell) - var/obj/item/weapon/cell/rigcell = wornrig.cell - var/diff = min(rigcell.maxcharge - rigcell.charge, charging_power * CELLRATE) // Capped by charging_power / tick - var/charge_used = cell.use(diff) - rigcell.give(charge_used) - -/obj/machinery/recharge_station/examine(mob/user) - . = ..() - . += "The charge meter reads: [round(chargepercentage())]%" - -/obj/machinery/recharge_station/proc/chargepercentage() - if(!cell) - return 0 - return cell.percent() - -/obj/machinery/recharge_station/relaymove(mob/user as mob) - if(user.stat) - return - go_out() - return - -/obj/machinery/recharge_station/emp_act(severity) - if(occupant) - occupant.emp_act(severity) - go_out() - if(cell) - cell.emp_act(severity) - ..(severity) - -/obj/machinery/recharge_station/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(!occupant) - if(default_deconstruction_screwdriver(user, O)) - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - if (istype(O, /obj/item/weapon/grab) && get_dist(src,user)<2) - var/obj/item/weapon/grab/G = O - if(istype(G.affecting,/mob/living)) - var/mob/living/M = G.affecting - qdel(O) - go_in(M) - - ..() - -/obj/machinery/recharge_station/MouseDrop_T(var/mob/target, var/mob/user) - if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)) - return - - go_in(target) - -/obj/machinery/recharge_station/RefreshParts() - ..() - var/man_rating = 0 - var/cap_rating = 0 - - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/manipulator)) - man_rating += P.rating - cell = locate(/obj/item/weapon/cell) in component_parts - - charging_power = 40000 + 40000 * cap_rating - restore_power_active = 10000 + 15000 * cap_rating - restore_power_passive = 5000 + 1000 * cap_rating - weld_rate = max(0, man_rating - 3) - wire_rate = max(0, man_rating - 5) - - desc = initial(desc) - desc += " Uses a dedicated internal power cell to deliver [charging_power]W when in use." - if(weld_rate) - desc += "
                    It is capable of repairing structural damage." - if(wire_rate) - desc += "
                    It is capable of repairing burn damage." - -/obj/machinery/recharge_station/proc/build_overlays() - cut_overlays() - switch(round(chargepercentage())) - if(1 to 20) - add_overlay("statn_c0") - if(21 to 40) - add_overlay("statn_c20") - if(41 to 60) - add_overlay("statn_c40") - if(61 to 80) - add_overlay("statn_c60") - if(81 to 98) - add_overlay("statn_c80") - if(99 to 110) - add_overlay("statn_c100") - -/obj/machinery/recharge_station/update_icon() - ..() - if(stat & BROKEN) - icon_state = "borgcharger0" - return - - if(occupant) - if((stat & NOPOWER) && !has_cell_power()) - icon_state = "borgcharger2" - else - icon_state = "borgcharger1" - else - icon_state = "borgcharger0" - - if(icon_update_tick == 0) - build_overlays() - -/obj/machinery/recharge_station/Bumped(var/mob/living/L) - go_in(L) - -/obj/machinery/recharge_station/proc/go_in(var/mob/living/L) - - if(occupant) - return - - if(istype(L, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = L - - if(R.incapacitated()) - return - - if(!R.cell) - return - - if(istype(R, /mob/living/silicon/robot/platform)) - to_chat(R, SPAN_WARNING("You are too large to fit into \the [src].")) - return - - add_fingerprint(R) - R.reset_view(src) - R.forceMove(src) - occupant = R - update_icon() - return 1 - - //VOREStation Add Start - else if(istype(L, /mob/living/silicon/pai)) - var/mob/living/silicon/pai/P = L - - if(P.incapacitated()) - return - - add_fingerprint(P) - P.reset_view(src) - P.forceMove(src) - occupant = P - update_icon() - return 1 - //VOREStation Add End - - else if(istype(L, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = L - if(H.isSynthetic() || H.wearing_rig) - add_fingerprint(H) - H.reset_view(src) - H.forceMove(src) - occupant = H - update_icon() - return 1 - else - return - -/obj/machinery/recharge_station/proc/go_out() - if(!occupant) - return - - occupant.forceMove(src.loc) - occupant.reset_view() - occupant = null - update_icon() - -/obj/machinery/recharge_station/verb/move_eject() - set category = "Object" - set name = "Eject Recharger" - set src in oview(1) - - if(usr.incapacitated() || !isliving(usr)) - return - - go_out() - add_fingerprint(usr) - return - -/obj/machinery/recharge_station/verb/move_inside() - set category = "Object" - set name = "Enter Recharger" - set src in oview(1) - - if(usr.incapacitated() || !isliving(usr)) - return - - go_in(usr) - -/obj/machinery/recharge_station/ghost_pod_recharger - name = "drone pod" - desc = "This is a pod which used to contain a drone... Or maybe it still does?" - icon = 'icons/obj/structures.dmi' - -/obj/machinery/recharge_station/ghost_pod_recharger/update_icon() - ..() - if(stat & BROKEN) - icon_state = "borg_pod_closed" - desc = "It appears broken..." - return - - if(occupant) - if((stat & NOPOWER) && !has_cell_power()) - icon_state = "borg_pod_closed" - desc = "It appears to be unpowered..." - else - icon_state = "borg_pod_closed" - else - icon_state = "borg_pod_opened" - - if(icon_update_tick == 0) - build_overlays() +/obj/machinery/recharge_station + name = "cyborg recharging station" + desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." + icon = 'icons/obj/objects.dmi' + icon_state = "borgcharger0" + density = TRUE + anchored = TRUE + unacidable = TRUE + circuit = /obj/item/weapon/circuitboard/recharge_station + use_power = USE_POWER_IDLE + idle_power_usage = 50 + var/mob/occupant = null + var/obj/item/weapon/cell/cell = null + var/icon_update_tick = 0 // Used to rebuild the overlay only once every 10 ticks + var/charging = 0 + + var/charging_power // W. Power rating used for charging the cyborg. 120 kW if un-upgraded + var/restore_power_active // W. Power drawn from APC when an occupant is charging. 40 kW if un-upgraded + var/restore_power_passive // W. Power drawn from APC when idle. 7 kW if un-upgraded + var/weld_rate = 0 // How much brute damage is repaired per tick + var/wire_rate = 0 // How much burn damage is repaired per tick + + var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder + var/wire_power_use = 500 // power used per point of burn damage repaired. + +/obj/machinery/recharge_station/Initialize() + . = ..() + default_apply_parts() + cell = default_use_hicell() + update_icon() + +/obj/machinery/recharge_station/proc/has_cell_power() + return cell && cell.percent() > 0 + +/obj/machinery/recharge_station/process() + if(stat & (BROKEN)) + return + if(!cell) // Shouldn't be possible, but sanity check + return + + if((stat & NOPOWER) && !has_cell_power()) // No power and cell is dead. + if(icon_update_tick) + icon_update_tick = 0 //just rebuild the overlay once more only + update_icon() + return + + //First, draw from the internal power cell to recharge/repair/etc the occupant + if(occupant) + process_occupant() + + //Then, if external power is available, recharge the internal cell + var/recharge_amount = 0 + if(!(stat & NOPOWER)) + // Calculating amount of power to draw + recharge_amount = (occupant ? restore_power_active : restore_power_passive) * CELLRATE + + recharge_amount = cell.give(recharge_amount) + use_power(recharge_amount / CELLRATE) + else + // Since external power is offline, draw operating current from the internal cell + cell.use(get_power_usage() * CELLRATE) + + if(icon_update_tick >= 10) + icon_update_tick = 0 + else + icon_update_tick++ + + if(occupant || recharge_amount) + update_icon() + +//Processes the occupant, drawing from the internal power cell if needed. +/obj/machinery/recharge_station/proc/process_occupant() + if(isrobot(occupant)) + var/mob/living/silicon/robot/R = occupant + var/overcharged = FALSE + if(R.cell.maxcharge < R.cell.charge) + overcharged = TRUE + if(R.module && !overcharged) + R.module.respawn_consumable(R, charging_power * CELLRATE / 250) //consumables are magical, apparently + if(R.cell && !R.cell.fully_charged() && !overcharged) + var/diff = min(R.cell.maxcharge - R.cell.charge, charging_power * CELLRATE) // Capped by charging_power / tick + var/charge_used = cell.use(diff) + R.cell.give(charge_used) + + //Lastly, attempt to repair the cyborg if enabled + if(weld_rate && R.getBruteLoss() && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) + R.adjustBruteLoss(-weld_rate) + if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE)) + R.adjustFireLoss(-wire_rate) + + //VOREStation Add Start + else if(ispAI(occupant)) + var/mob/living/silicon/pai/P = occupant + + if(P.nutrition < 400) + P.nutrition = min(P.nutrition+10, 400) + cell.use(7000/450*10) + //VOREStation Add End + + else if(ishuman(occupant)) + var/mob/living/carbon/human/H = occupant + + if(H.isSynthetic()) + // In case they somehow end up with positive values for otherwise unobtainable damage... + if(H.getToxLoss() > 0) + H.adjustToxLoss(-(rand(1,3))) + if(H.getOxyLoss() > 0) + H.adjustOxyLoss(-(rand(1,3))) + if(H.getCloneLoss() > 0) + H.adjustCloneLoss(-(rand(1,3))) + if(H.getBrainLoss() > 0) + H.adjustBrainLoss(-(rand(1,3))) + + // Also recharge their internal battery. + if(H.isSynthetic() && H.nutrition < 500) //VOREStation Edit + H.nutrition = min(H.nutrition+(10*(1-min(H.species.synthetic_food_coeff, 0.9))), 500) //VOREStation Edit + cell.use(7000/450*10) + + // And clear up radiation + if(H.radiation > 0 || H.accumulated_rads > 0) + H.radiation = max(H.radiation - 25, 0) + H.accumulated_rads = max(H.accumulated_rads - 25, 0) + + if(H.wearing_rig) // stepping into a borg charger to charge your rig and fix your shit + var/obj/item/weapon/rig/wornrig = H.get_rig() + if(wornrig) // just to make sure + for(var/obj/item/rig_module/storedmod in wornrig.installed_modules) + if(weld_rate && storedmod.damage && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) + to_chat(H, "[storedmod] is repaired!") + storedmod.damage = 0 + if(wornrig.chest) + var/obj/item/clothing/suit/space/rig/rigchest = wornrig.chest + if(weld_rate && rigchest.damage && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) + rigchest.breaches = list() + rigchest.calc_breach_damage() + to_chat(H, "[rigchest] is repaired!") + if(wornrig.cell) + var/obj/item/weapon/cell/rigcell = wornrig.cell + var/diff = min(rigcell.maxcharge - rigcell.charge, charging_power * CELLRATE) // Capped by charging_power / tick + var/charge_used = cell.use(diff) + rigcell.give(charge_used) + +/obj/machinery/recharge_station/examine(mob/user) + . = ..() + . += "The charge meter reads: [round(chargepercentage())]%" + +/obj/machinery/recharge_station/proc/chargepercentage() + if(!cell) + return 0 + return cell.percent() + +/obj/machinery/recharge_station/relaymove(mob/user as mob) + if(user.stat) + return + go_out() + return + +/obj/machinery/recharge_station/emp_act(severity) + if(occupant) + occupant.emp_act(severity) + go_out() + if(cell) + cell.emp_act(severity) + ..(severity) + +/obj/machinery/recharge_station/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(!occupant) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + if (istype(O, /obj/item/weapon/grab) && get_dist(src,user)<2) + var/obj/item/weapon/grab/G = O + if(istype(G.affecting,/mob/living)) + var/mob/living/M = G.affecting + qdel(O) + go_in(M) + + ..() + +/obj/machinery/recharge_station/MouseDrop_T(var/mob/target, var/mob/user) + if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)) + return + + go_in(target) + +/obj/machinery/recharge_station/RefreshParts() + ..() + var/man_rating = 0 + var/cap_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + man_rating += P.rating + cell = locate(/obj/item/weapon/cell) in component_parts + + charging_power = 40000 + 40000 * cap_rating + restore_power_active = 10000 + 15000 * cap_rating + restore_power_passive = 5000 + 1000 * cap_rating + weld_rate = max(0, man_rating - 3) + wire_rate = max(0, man_rating - 5) + + desc = initial(desc) + desc += " Uses a dedicated internal power cell to deliver [charging_power]W when in use." + if(weld_rate) + desc += "
                    It is capable of repairing structural damage." + if(wire_rate) + desc += "
                    It is capable of repairing burn damage." + +/obj/machinery/recharge_station/proc/build_overlays() + cut_overlays() + switch(round(chargepercentage())) + if(1 to 20) + add_overlay("statn_c0") + if(21 to 40) + add_overlay("statn_c20") + if(41 to 60) + add_overlay("statn_c40") + if(61 to 80) + add_overlay("statn_c60") + if(81 to 98) + add_overlay("statn_c80") + if(99 to 110) + add_overlay("statn_c100") + +/obj/machinery/recharge_station/update_icon() + ..() + if(stat & BROKEN) + icon_state = "borgcharger0" + return + + if(occupant) + if((stat & NOPOWER) && !has_cell_power()) + icon_state = "borgcharger2" + else + icon_state = "borgcharger1" + else + icon_state = "borgcharger0" + + if(icon_update_tick == 0) + build_overlays() + +/obj/machinery/recharge_station/Bumped(var/mob/living/L) + go_in(L) + +/obj/machinery/recharge_station/proc/go_in(var/mob/living/L) + + if(occupant) + return + + if(istype(L, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = L + + if(R.incapacitated()) + return + + if(!R.cell) + return + + if(istype(R, /mob/living/silicon/robot/platform)) + to_chat(R, SPAN_WARNING("You are too large to fit into \the [src].")) + return + + add_fingerprint(R) + R.reset_view(src) + R.forceMove(src) + occupant = R + update_icon() + return 1 + + //VOREStation Add Start + else if(istype(L, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = L + + if(P.incapacitated()) + return + + add_fingerprint(P) + P.reset_view(src) + P.forceMove(src) + occupant = P + update_icon() + return 1 + //VOREStation Add End + + else if(istype(L, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = L + if(H.isSynthetic() || H.wearing_rig) + add_fingerprint(H) + H.reset_view(src) + H.forceMove(src) + occupant = H + update_icon() + return 1 + else + return + +/obj/machinery/recharge_station/proc/go_out() + if(!occupant) + return + + occupant.forceMove(src.loc) + occupant.reset_view() + occupant = null + update_icon() + +/obj/machinery/recharge_station/verb/move_eject() + set category = "Object" + set name = "Eject Recharger" + set src in oview(1) + + if(usr.incapacitated() || !isliving(usr)) + return + + go_out() + add_fingerprint(usr) + return + +/obj/machinery/recharge_station/verb/move_inside() + set category = "Object" + set name = "Enter Recharger" + set src in oview(1) + + if(usr.incapacitated() || !isliving(usr)) + return + + go_in(usr) + +/obj/machinery/recharge_station/ghost_pod_recharger + name = "drone pod" + desc = "This is a pod which used to contain a drone... Or maybe it still does?" + icon = 'icons/obj/structures.dmi' + +/obj/machinery/recharge_station/ghost_pod_recharger/update_icon() + ..() + if(stat & BROKEN) + icon_state = "borg_pod_closed" + desc = "It appears broken..." + return + + if(occupant) + if((stat & NOPOWER) && !has_cell_power()) + icon_state = "borg_pod_closed" + desc = "It appears to be unpowered..." + else + icon_state = "borg_pod_closed" + else + icon_state = "borg_pod_opened" + + if(icon_update_tick == 0) + build_overlays() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 6b6fc6df6a..9e9e878646 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -1,291 +1,291 @@ -/******************** Requests Console ********************/ -/** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ - -//Request Console Department Types -#define RC_ASSIST 1 //Request Assistance -#define RC_SUPPLY 2 //Request Supplies -#define RC_INFO 4 //Relay Info - -//Request Console Screens -#define RCS_MAINMENU 0 // Main menu -#define RCS_RQASSIST 1 // Request supplies -#define RCS_RQSUPPLY 2 // Request assistance -#define RCS_SENDINFO 3 // Relay information -#define RCS_SENTPASS 4 // Message sent successfully -#define RCS_SENTFAIL 5 // Message sent unsuccessfully -#define RCS_VIEWMSGS 6 // View messages -#define RCS_MESSAUTH 7 // Authentication before sending -#define RCS_ANNOUNCE 8 // Send announcement - -var/req_console_assistance = list() -var/req_console_supplies = list() -var/req_console_information = list() -var/list/obj/machinery/requests_console/allConsoles = list() - -/obj/machinery/requests_console - name = "requests console" - desc = "A console intended to send requests to different departments on the station." - anchored = TRUE - icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit - icon_state = "req_comp_0" - layer = ABOVE_WINDOW_LAYER - circuit = /obj/item/weapon/circuitboard/request - blocks_emissive = NONE - light_power = 0.25 - light_color = "#00ff00" - vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature - 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/message_log = list() //List of all messages - var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. - var/newmessagepriority = 0 - // 0 = no new message - // 1 = normal priority - // 2 = high priority - var/screen = RCS_VIEWMSGS - var/silent = 0 // set to 1 for it not to beep all the time -// var/hackState = 0 - // 0 = not hacked - // 1 = hacked - var/announcementConsole = 0 - // 0 = This console cannot be used to send department announcements - // 1 = This console can send department announcementsf - var/open = 0 // 1 if open - var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements - var/msgVerified = "" //Will contain the name of the person who varified it - var/msgStamped = "" //If a message is stamped, this will contain the stamp name - var/message = ""; - var/recipient = ""; //the department which will be receiving the message - var/priority = -1 ; //Priority of the message being sent - light_range = 0 - var/datum/announcement/announcement = new - -/obj/machinery/requests_console/Initialize() - . = ..() - - announcement.title = "[department] announcement" - announcement.newscast = 1 - - name = "[department] requests console" - allConsoles += src - if(departmentType & RC_ASSIST) - req_console_assistance |= department - if(departmentType & RC_SUPPLY) - req_console_supplies |= department - if(departmentType & RC_INFO) - req_console_information |= department - - update_icon() - -/obj/machinery/requests_console/Destroy() - allConsoles -= src - var/lastDeptRC = 1 - for (var/obj/machinery/requests_console/Console in allConsoles) - if(Console.department == department) - lastDeptRC = 0 - break - if(lastDeptRC) - if(departmentType & RC_ASSIST) - req_console_assistance -= department - if(departmentType & RC_SUPPLY) - req_console_supplies -= department - if(departmentType & RC_INFO) - req_console_information -= department - return ..() - -/obj/machinery/requests_console/power_change() - ..() - update_icon() - -/obj/machinery/requests_console/update_icon() - cut_overlays() - - if(stat & NOPOWER) - set_light(0) - set_light_on(FALSE) - icon_state = "req_comp_off" - else - icon_state = "req_comp_[newmessagepriority]" - add_overlay(mutable_appearance(icon, "req_comp_ov[newmessagepriority]")) - add_overlay(emissive_appearance(icon, "req_comp_ov[newmessagepriority]")) - set_light(2) - set_light_on(TRUE) - -/obj/machinery/requests_console/attack_hand(user as mob) - if(..(user)) - return - tgui_interact(user) - -/obj/machinery/requests_console/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "RequestConsole", "[department] Request Console") - ui.open() - -/obj/machinery/requests_console/tgui_data(mob/user) - var/list/data = ..() - data["department"] = department - data["screen"] = screen - data["message_log"] = message_log - data["newmessagepriority"] = newmessagepriority - data["silent"] = silent - data["announcementConsole"] = announcementConsole - - data["assist_dept"] = req_console_assistance - data["supply_dept"] = req_console_supplies - data["info_dept"] = req_console_information - - data["message"] = message - data["recipient"] = recipient - data["priority"] = priority - data["msgStamped"] = msgStamped - data["msgVerified"] = msgVerified - data["announceAuth"] = announceAuth - return data - -/obj/machinery/requests_console/tgui_act(action, list/params) - if(..()) - return TRUE - - add_fingerprint(usr) - - switch(action) - if("write") - if(reject_bad_text(params["write"])) - recipient = params["write"] //write contains the string of the receiving department's name - - var/new_message = sanitize(tgui_input_text(usr, "Write your message:", "Awaiting Input", "")) - if(new_message) - message = new_message - screen = RCS_MESSAUTH - switch(params["priority"]) - if(1) - priority = 1 - if(2) - priority = 2 - else - priority = 0 - else - reset_message(1) - . = TRUE - - if("writeAnnouncement") - var/new_message = sanitize(tgui_input_text(usr, "Write your message:", "Awaiting Input", "")) - if(new_message) - message = new_message - else - reset_message(1) - . = TRUE - - if("sendAnnouncement") - if(!announcementConsole) - return FALSE - announcement.Announce(message, msg_sanitized = 1) - reset_message(1) - . = TRUE - - if("department") - if(!message) - return FALSE - var/log_msg = message - var/pass = 0 - screen = RCS_SENTFAIL - for(var/obj/machinery/message_server/MS in machines) - if(!MS.active) - continue - MS.send_rc_message(ckey(params["department"]), department, log_msg, msgStamped, msgVerified, priority) - pass = 1 - if(pass) - screen = RCS_SENTPASS - message_log += list(list("Message sent to [recipient]", "[message]")) - else - audible_message(text("\icon[src][bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) - . = TRUE - - //Handle printing - if("print") - var/msg = message_log[text2num(params["print"])]; - if(msg) - msg = "[msg[1]]:
                    [msg[2]]" - msg = replacetext(msg, "
                    ", "\n") - msg = strip_html_properly(msg) - var/obj/item/weapon/paper/R = new(src.loc) - R.name = "[department] Message" - R.info = "

                    [department] Requests Console

                    [msg]
                    " - . = TRUE - - //Handle screen switching - if("setScreen") - var/tempScreen = text2num(params["setScreen"]) - if(tempScreen == RCS_ANNOUNCE && !announcementConsole) - return - if(tempScreen == RCS_VIEWMSGS) - for (var/obj/machinery/requests_console/Console in allConsoles) - if(Console.department == department) - Console.newmessagepriority = 0 - Console.update_icon() - if(tempScreen == RCS_MAINMENU) - reset_message() - screen = tempScreen - . = TRUE - - //Handle silencing the console - if("toggleSilent") - silent = !silent - . = TRUE - - //err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messaging on that console (EXTREME priority...), but the code for that was removed. -/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) - if(computer_deconstruction_screwdriver(user, O)) - return - if(istype(O, /obj/item/device/multitool)) - var/input = sanitize(tgui_input_text(usr, "What Department ID would you like to give this request console?", "Multitool-Request Console Interface", department)) - if(!input) - to_chat(usr, "No input found. Please hang up and try your call again.") - return - department = input - announcement.title = "[department] announcement" - announcement.newscast = 1 - - name = "[department] Requests Console" - allConsoles += src - if(departmentType & RC_ASSIST) - req_console_assistance |= department - if(departmentType & RC_SUPPLY) - req_console_supplies |= department - if(departmentType & RC_INFO) - req_console_information |= department - return - - if(istype(O, /obj/item/weapon/card/id)) - if(inoperable(MAINT)) return - if(screen == RCS_MESSAUTH) - var/obj/item/weapon/card/id/T = O - msgVerified = text("Verified by [T.registered_name] ([T.assignment])") - SStgui.update_uis(src) - if(screen == RCS_ANNOUNCE) - var/obj/item/weapon/card/id/ID = O - if(access_RC_announce in ID.GetAccess()) - announceAuth = 1 - announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name - else - reset_message() - to_chat(user, "You are not authorized to send announcements.") - SStgui.update_uis(src) - if(istype(O, /obj/item/weapon/stamp)) - if(inoperable(MAINT)) return - if(screen == RCS_MESSAUTH) - var/obj/item/weapon/stamp/T = O - msgStamped = text("Stamped with the [T.name]") - SStgui.update_uis(src) - return - -/obj/machinery/requests_console/proc/reset_message(var/mainmenu = 0) - message = "" - recipient = "" - priority = 0 - msgVerified = "" - msgStamped = "" - announceAuth = 0 - announcement.announcer = "" - if(mainmenu) - screen = RCS_MAINMENU +/******************** Requests Console ********************/ +/** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ + +//Request Console Department Types +#define RC_ASSIST 1 //Request Assistance +#define RC_SUPPLY 2 //Request Supplies +#define RC_INFO 4 //Relay Info + +//Request Console Screens +#define RCS_MAINMENU 0 // Main menu +#define RCS_RQASSIST 1 // Request supplies +#define RCS_RQSUPPLY 2 // Request assistance +#define RCS_SENDINFO 3 // Relay information +#define RCS_SENTPASS 4 // Message sent successfully +#define RCS_SENTFAIL 5 // Message sent unsuccessfully +#define RCS_VIEWMSGS 6 // View messages +#define RCS_MESSAUTH 7 // Authentication before sending +#define RCS_ANNOUNCE 8 // Send announcement + +var/req_console_assistance = list() +var/req_console_supplies = list() +var/req_console_information = list() +var/list/obj/machinery/requests_console/allConsoles = list() + +/obj/machinery/requests_console + name = "requests console" + desc = "A console intended to send requests to different departments on the station." + anchored = TRUE + icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit + icon_state = "req_comp_0" + layer = ABOVE_WINDOW_LAYER + circuit = /obj/item/weapon/circuitboard/request + blocks_emissive = NONE + light_power = 0.25 + light_color = "#00ff00" + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature + 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/message_log = list() //List of all messages + var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. + var/newmessagepriority = 0 + // 0 = no new message + // 1 = normal priority + // 2 = high priority + var/screen = RCS_VIEWMSGS + var/silent = 0 // set to 1 for it not to beep all the time +// var/hackState = 0 + // 0 = not hacked + // 1 = hacked + var/announcementConsole = 0 + // 0 = This console cannot be used to send department announcements + // 1 = This console can send department announcementsf + var/open = 0 // 1 if open + var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements + var/msgVerified = "" //Will contain the name of the person who varified it + var/msgStamped = "" //If a message is stamped, this will contain the stamp name + var/message = ""; + var/recipient = ""; //the department which will be receiving the message + var/priority = -1 ; //Priority of the message being sent + light_range = 0 + var/datum/announcement/announcement = new + +/obj/machinery/requests_console/Initialize() + . = ..() + + announcement.title = "[department] announcement" + announcement.newscast = 1 + + name = "[department] requests console" + allConsoles += src + if(departmentType & RC_ASSIST) + req_console_assistance |= department + if(departmentType & RC_SUPPLY) + req_console_supplies |= department + if(departmentType & RC_INFO) + req_console_information |= department + + update_icon() + +/obj/machinery/requests_console/Destroy() + allConsoles -= src + var/lastDeptRC = 1 + for (var/obj/machinery/requests_console/Console in allConsoles) + if(Console.department == department) + lastDeptRC = 0 + break + if(lastDeptRC) + if(departmentType & RC_ASSIST) + req_console_assistance -= department + if(departmentType & RC_SUPPLY) + req_console_supplies -= department + if(departmentType & RC_INFO) + req_console_information -= department + return ..() + +/obj/machinery/requests_console/power_change() + ..() + update_icon() + +/obj/machinery/requests_console/update_icon() + cut_overlays() + + if(stat & NOPOWER) + set_light(0) + set_light_on(FALSE) + icon_state = "req_comp_off" + else + icon_state = "req_comp_[newmessagepriority]" + add_overlay(mutable_appearance(icon, "req_comp_ov[newmessagepriority]")) + add_overlay(emissive_appearance(icon, "req_comp_ov[newmessagepriority]")) + set_light(2) + set_light_on(TRUE) + +/obj/machinery/requests_console/attack_hand(user as mob) + if(..(user)) + return + tgui_interact(user) + +/obj/machinery/requests_console/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "RequestConsole", "[department] Request Console") + ui.open() + +/obj/machinery/requests_console/tgui_data(mob/user) + var/list/data = ..() + data["department"] = department + data["screen"] = screen + data["message_log"] = message_log + data["newmessagepriority"] = newmessagepriority + data["silent"] = silent + data["announcementConsole"] = announcementConsole + + data["assist_dept"] = req_console_assistance + data["supply_dept"] = req_console_supplies + data["info_dept"] = req_console_information + + data["message"] = message + data["recipient"] = recipient + data["priority"] = priority + data["msgStamped"] = msgStamped + data["msgVerified"] = msgVerified + data["announceAuth"] = announceAuth + return data + +/obj/machinery/requests_console/tgui_act(action, list/params) + if(..()) + return TRUE + + add_fingerprint(usr) + + switch(action) + if("write") + if(reject_bad_text(params["write"])) + recipient = params["write"] //write contains the string of the receiving department's name + + var/new_message = sanitize(tgui_input_text(usr, "Write your message:", "Awaiting Input", "")) + if(new_message) + message = new_message + screen = RCS_MESSAUTH + switch(params["priority"]) + if(1) + priority = 1 + if(2) + priority = 2 + else + priority = 0 + else + reset_message(1) + . = TRUE + + if("writeAnnouncement") + var/new_message = sanitize(tgui_input_text(usr, "Write your message:", "Awaiting Input", "")) + if(new_message) + message = new_message + else + reset_message(1) + . = TRUE + + if("sendAnnouncement") + if(!announcementConsole) + return FALSE + announcement.Announce(message, msg_sanitized = 1) + reset_message(1) + . = TRUE + + if("department") + if(!message) + return FALSE + var/log_msg = message + var/pass = 0 + screen = RCS_SENTFAIL + for(var/obj/machinery/message_server/MS in machines) + if(!MS.active) + continue + MS.send_rc_message(ckey(params["department"]), department, log_msg, msgStamped, msgVerified, priority) + pass = 1 + if(pass) + screen = RCS_SENTPASS + message_log += list(list("Message sent to [recipient]", "[message]")) + else + audible_message(text("\icon[src][bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) + . = TRUE + + //Handle printing + if("print") + var/msg = message_log[text2num(params["print"])]; + if(msg) + msg = "[msg[1]]:
                    [msg[2]]" + msg = replacetext(msg, "
                    ", "\n") + msg = strip_html_properly(msg) + var/obj/item/weapon/paper/R = new(src.loc) + R.name = "[department] Message" + R.info = "

                    [department] Requests Console

                    [msg]
                    " + . = TRUE + + //Handle screen switching + if("setScreen") + var/tempScreen = text2num(params["setScreen"]) + if(tempScreen == RCS_ANNOUNCE && !announcementConsole) + return + if(tempScreen == RCS_VIEWMSGS) + for (var/obj/machinery/requests_console/Console in allConsoles) + if(Console.department == department) + Console.newmessagepriority = 0 + Console.update_icon() + if(tempScreen == RCS_MAINMENU) + reset_message() + screen = tempScreen + . = TRUE + + //Handle silencing the console + if("toggleSilent") + silent = !silent + . = TRUE + + //err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messaging on that console (EXTREME priority...), but the code for that was removed. +/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) + if(computer_deconstruction_screwdriver(user, O)) + return + if(istype(O, /obj/item/device/multitool)) + var/input = sanitize(tgui_input_text(usr, "What Department ID would you like to give this request console?", "Multitool-Request Console Interface", department)) + if(!input) + to_chat(usr, "No input found. Please hang up and try your call again.") + return + department = input + announcement.title = "[department] announcement" + announcement.newscast = 1 + + name = "[department] Requests Console" + allConsoles += src + if(departmentType & RC_ASSIST) + req_console_assistance |= department + if(departmentType & RC_SUPPLY) + req_console_supplies |= department + if(departmentType & RC_INFO) + req_console_information |= department + return + + if(istype(O, /obj/item/weapon/card/id)) + if(inoperable(MAINT)) return + if(screen == RCS_MESSAUTH) + var/obj/item/weapon/card/id/T = O + msgVerified = text("Verified by [T.registered_name] ([T.assignment])") + SStgui.update_uis(src) + if(screen == RCS_ANNOUNCE) + var/obj/item/weapon/card/id/ID = O + if(access_RC_announce in ID.GetAccess()) + announceAuth = 1 + announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name + else + reset_message() + to_chat(user, "You are not authorized to send announcements.") + SStgui.update_uis(src) + if(istype(O, /obj/item/weapon/stamp)) + if(inoperable(MAINT)) return + if(screen == RCS_MESSAUTH) + var/obj/item/weapon/stamp/T = O + msgStamped = text("Stamped with the [T.name]") + SStgui.update_uis(src) + return + +/obj/machinery/requests_console/proc/reset_message(var/mainmenu = 0) + message = "" + recipient = "" + priority = 0 + msgVerified = "" + msgStamped = "" + announceAuth = 0 + announcement.announcer = "" + if(mainmenu) + screen = RCS_MAINMENU diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 103ea5f7ae..91b0aa19ba 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -1,138 +1,138 @@ -/obj/machinery/robotic_fabricator - name = "robotic fabricator" - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" - density = TRUE - anchored = TRUE - var/metal_amount = 0 - var/operating = 0 - var/obj/item/robot_parts/being_built = null - use_power = USE_POWER_IDLE - idle_power_usage = 40 - active_power_usage = 10000 - -/obj/machinery/robotic_fabricator/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/stack/material) && O.get_material_name() == MAT_STEEL) - var/obj/item/stack/M = O - if(metal_amount < 150000.0) - var/count = 0 - add_overlay("fab-load-metal") - spawn(15) - if(M) - if(!M.get_amount()) - return - while(metal_amount < 150000 && M.get_amount()) - metal_amount += O.matter[MAT_STEEL] /*O:height * O:width * O:length * 100000.0*/ - M.use(1) - count++ - - to_chat(user, "You insert [count] metal sheet\s into the fabricator.") - cut_overlay("fab-load-metal") - updateDialog() - else - to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.") - -/obj/machinery/robotic_fabricator/attack_hand(user as mob) - var/dat - if(..()) - return - - if(operating) - dat = {" -Building [being_built.name].
                    -Please wait until completion...

                    -
                    -"} - else - dat = {" -Metal Amount: [min(150000, metal_amount)] cm3 (MAX: 150,000)

                    -
                    -Left Arm (25,000 cc metal.)
                    -
                    Right Arm (25,000 cc metal.)
                    -
                    Left Leg (25,000 cc metal.)
                    -
                    Right Leg (25,000 cc metal).
                    -
                    Chest (50,000 cc metal).
                    -
                    Head (50,000 cc metal).
                    -
                    Robot Frame (75,000 cc metal).
                    -"} - - user << browse("Robotic Fabricator Control Panel[dat]", "window=robot_fabricator") - onclose(user, "robot_fabricator") - return - -/obj/machinery/robotic_fabricator/Topic(href, href_list) - if(..()) - return - - usr.set_machine(src) - add_fingerprint(usr) - - if(href_list["make"]) - if(!operating) - var/part_type = text2num(href_list["make"]) - - var/build_type = "" - var/build_time = 200 - var/build_cost = 25000 - - switch (part_type) - if(1) - build_type = "/obj/item/robot_parts/l_arm" - build_time = 200 - build_cost = 25000 - - if(2) - build_type = "/obj/item/robot_parts/r_arm" - build_time = 200 - build_cost = 25000 - - if(3) - build_type = "/obj/item/robot_parts/l_leg" - build_time = 200 - build_cost = 25000 - - if(4) - build_type = "/obj/item/robot_parts/r_leg" - build_time = 200 - build_cost = 25000 - - if(5) - build_type = "/obj/item/robot_parts/chest" - build_time = 350 - build_cost = 50000 - - if(6) - build_type = "/obj/item/robot_parts/head" - build_time = 350 - build_cost = 50000 - - if(7) - build_type = "/obj/item/robot_parts/robot_suit" - build_time = 600 - build_cost = 75000 - - var/building = text2path(build_type) - if(!isnull(building)) - if(metal_amount >= build_cost) - operating = 1 - update_use_power(USE_POWER_ACTIVE) - - metal_amount = max(0, metal_amount - build_cost) - - being_built = new building(src) - - add_overlay("fab-active") - updateUsrDialog() - - spawn (build_time) - if(!isnull(being_built)) - being_built.loc = get_turf(src) - being_built = null - update_use_power(USE_POWER_IDLE) - operating = 0 - cut_overlay("fab-active") - return - - for (var/mob/M in viewers(1, src)) - if(M.client && M.machine == src) - attack_hand(M) +/obj/machinery/robotic_fabricator + name = "robotic fabricator" + icon = 'icons/obj/robotics.dmi' + icon_state = "fab-idle" + density = TRUE + anchored = TRUE + var/metal_amount = 0 + var/operating = 0 + var/obj/item/robot_parts/being_built = null + use_power = USE_POWER_IDLE + idle_power_usage = 40 + active_power_usage = 10000 + +/obj/machinery/robotic_fabricator/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/stack/material) && O.get_material_name() == MAT_STEEL) + var/obj/item/stack/M = O + if(metal_amount < 150000.0) + var/count = 0 + add_overlay("fab-load-metal") + spawn(15) + if(M) + if(!M.get_amount()) + return + while(metal_amount < 150000 && M.get_amount()) + metal_amount += O.matter[MAT_STEEL] /*O:height * O:width * O:length * 100000.0*/ + M.use(1) + count++ + + to_chat(user, "You insert [count] metal sheet\s into the fabricator.") + cut_overlay("fab-load-metal") + updateDialog() + else + to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.") + +/obj/machinery/robotic_fabricator/attack_hand(user as mob) + var/dat + if(..()) + return + + if(operating) + dat = {" +Building [being_built.name].
                    +Please wait until completion...

                    +
                    +"} + else + dat = {" +Metal Amount: [min(150000, metal_amount)] cm3 (MAX: 150,000)

                    +
                    +
                    Left Arm (25,000 cc metal.)
                    +
                    Right Arm (25,000 cc metal.)
                    +
                    Left Leg (25,000 cc metal.)
                    +
                    Right Leg (25,000 cc metal).
                    +
                    Chest (50,000 cc metal).
                    +
                    Head (50,000 cc metal).
                    +
                    Robot Frame (75,000 cc metal).
                    +"} + + user << browse("Robotic Fabricator Control Panel[dat]", "window=robot_fabricator") + onclose(user, "robot_fabricator") + return + +/obj/machinery/robotic_fabricator/Topic(href, href_list) + if(..()) + return + + usr.set_machine(src) + add_fingerprint(usr) + + if(href_list["make"]) + if(!operating) + var/part_type = text2num(href_list["make"]) + + var/build_type = "" + var/build_time = 200 + var/build_cost = 25000 + + switch (part_type) + if(1) + build_type = "/obj/item/robot_parts/l_arm" + build_time = 200 + build_cost = 25000 + + if(2) + build_type = "/obj/item/robot_parts/r_arm" + build_time = 200 + build_cost = 25000 + + if(3) + build_type = "/obj/item/robot_parts/l_leg" + build_time = 200 + build_cost = 25000 + + if(4) + build_type = "/obj/item/robot_parts/r_leg" + build_time = 200 + build_cost = 25000 + + if(5) + build_type = "/obj/item/robot_parts/chest" + build_time = 350 + build_cost = 50000 + + if(6) + build_type = "/obj/item/robot_parts/head" + build_time = 350 + build_cost = 50000 + + if(7) + build_type = "/obj/item/robot_parts/robot_suit" + build_time = 600 + build_cost = 75000 + + var/building = text2path(build_type) + if(!isnull(building)) + if(metal_amount >= build_cost) + operating = 1 + update_use_power(USE_POWER_ACTIVE) + + metal_amount = max(0, metal_amount - build_cost) + + being_built = new building(src) + + add_overlay("fab-active") + updateUsrDialog() + + spawn (build_time) + if(!isnull(being_built)) + being_built.loc = get_turf(src) + being_built = null + update_use_power(USE_POWER_IDLE) + operating = 0 + cut_overlay("fab-active") + return + + for (var/mob/M in viewers(1, src)) + if(M.client && M.machine == src) + attack_hand(M) diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 4f29a3e347..77cf8d1509 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -1,51 +1,51 @@ -/obj/machinery/seed_extractor - name = "seed extractor" - desc = "Extracts and bags seeds from produce." - icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit - icon_state = "sextractor" - density = TRUE - anchored = TRUE - -/obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) - - // Fruits and vegetables. - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown) || istype(O, /obj/item/weapon/grown)) - - user.remove_from_mob(O) - - var/datum/seed/new_seed_type - if(istype(O, /obj/item/weapon/grown)) - var/obj/item/weapon/grown/F = O - new_seed_type = SSplants.seeds[F.plantname] - else - var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O - new_seed_type = SSplants.seeds[F.plantname] - - if(new_seed_type) - to_chat(user, "You extract some seeds from [O].") - var/produce = rand(1,4) - for(var/i = 0;i<=produce;i++) - var/obj/item/seeds/seeds = new(get_turf(src)) - seeds.seed_type = new_seed_type.name - seeds.update_seed() - else - to_chat(user, "[O] doesn't seem to have any usable seeds inside it.") - - qdel(O) - - //Grass. - else if(istype(O, /obj/item/stack/tile/grass)) - var/obj/item/stack/tile/grass/S = O - if(S.use(1)) - to_chat(user, "You extract some seeds from the grass tile.") - new /obj/item/seeds/grassseed(loc) - - else if(istype(O, /obj/item/weapon/fossil/plant)) // Fossils - var/obj/item/seeds/random/R = new(get_turf(src)) - to_chat(user, "\The [src] pulverizes \the [O] and spits out \the [R].") - qdel(O) - - else if(default_unfasten_wrench(user, O, 20)) - return - +/obj/machinery/seed_extractor + name = "seed extractor" + desc = "Extracts and bags seeds from produce." + icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit + icon_state = "sextractor" + density = TRUE + anchored = TRUE + +/obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) + + // Fruits and vegetables. + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown) || istype(O, /obj/item/weapon/grown)) + + user.remove_from_mob(O) + + var/datum/seed/new_seed_type + if(istype(O, /obj/item/weapon/grown)) + var/obj/item/weapon/grown/F = O + new_seed_type = SSplants.seeds[F.plantname] + else + var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O + new_seed_type = SSplants.seeds[F.plantname] + + if(new_seed_type) + to_chat(user, "You extract some seeds from [O].") + var/produce = rand(1,4) + for(var/i = 0;i<=produce;i++) + var/obj/item/seeds/seeds = new(get_turf(src)) + seeds.seed_type = new_seed_type.name + seeds.update_seed() + else + to_chat(user, "[O] doesn't seem to have any usable seeds inside it.") + + qdel(O) + + //Grass. + else if(istype(O, /obj/item/stack/tile/grass)) + var/obj/item/stack/tile/grass/S = O + if(S.use(1)) + to_chat(user, "You extract some seeds from the grass tile.") + new /obj/item/seeds/grassseed(loc) + + else if(istype(O, /obj/item/weapon/fossil/plant)) // Fossils + var/obj/item/seeds/random/R = new(get_turf(src)) + to_chat(user, "\The [src] pulverizes \the [O] and spits out \the [R].") + qdel(O) + + else if(default_unfasten_wrench(user, O, 20)) + return + return \ No newline at end of file diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index d1db08374a..80d28b7e3d 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -1,269 +1,269 @@ -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Arial Black" -#define SCROLL_SPEED 2 - -// Status display -// (formerly Countdown timer display) - -// Use to show shuttle ETA/ETD times -// Alert status -// And arbitrary messages set by comms computer -/obj/machinery/status_display - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - plane = TURF_PLANE - layer = ABOVE_WINDOW_LAYER - name = "status display" - anchored = TRUE - density = FALSE - unacidable = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 10 - circuit = /obj/item/weapon/circuitboard/status_display - var/mode = 1 // 0 = Blank - // 1 = Shuttle timer - // 2 = Arbitrary message(s) - // 3 = alert picture - // 4 = Supply shuttle timer - - var/picture_state // icon_state of alert picture - var/message1 = "" // message line 1 - var/message2 = "" // message line 2 - var/index1 // display index for scrolling messages or 0 if non-scrolling - var/index2 - var/picture = null - - var/frequency = 1435 // radio frequency - - var/friendc = 0 // track if Friend Computer mode - var/ignore_friendc = 0 - - maptext_height = 26 - maptext_width = 32 - - var/const/CHARS_PER_LINE = 5 - var/const/STATUS_DISPLAY_BLANK = 0 - var/const/STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME = 1 - var/const/STATUS_DISPLAY_MESSAGE = 2 - var/const/STATUS_DISPLAY_ALERT = 3 - var/const/STATUS_DISPLAY_TIME = 4 - var/const/STATUS_DISPLAY_CUSTOM = 99 - - var/seclevel = "green" - -/obj/machinery/status_display/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - return ..() - -/obj/machinery/status_display/attackby(I as obj, user as mob) - if(computer_deconstruction_screwdriver(user, I)) - return - else - attack_hand(user) - return - -// register for radio system -/obj/machinery/status_display/Initialize() - . = ..() - if(radio_controller) - radio_controller.add_object(src, frequency) - -// timed process -/obj/machinery/status_display/process() - if(stat & NOPOWER) - remove_display() - return - update() - -/obj/machinery/status_display/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - set_picture("ai_bsod") - ..(severity) - -// set what is displayed -/obj/machinery/status_display/proc/update() - remove_display() - if(friendc && !ignore_friendc) - set_picture("ai_friend") - return 1 - - switch(mode) - if(STATUS_DISPLAY_BLANK) //blank - return 1 - if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer - if(!emergency_shuttle) - message1 = "-ETA-" - message2 = "Never" // You're here forever. - return 1 - if(emergency_shuttle.waiting_to_leave()) - message1 = "-ETD-" - if(emergency_shuttle.shuttle.is_launching()) - message2 = "Launch" - else - message2 = get_shuttle_timer_departure() - if(length(message2) > CHARS_PER_LINE) - message2 = "Error" - update_display(message1, message2) - else if(emergency_shuttle.has_eta()) - message1 = "-ETA-" - message2 = get_shuttle_timer_arrival() - if(length(message2) > CHARS_PER_LINE) - message2 = "Error" - update_display(message1, message2) - return 1 - if(STATUS_DISPLAY_MESSAGE) //custom messages - var/line1 - var/line2 - - if(!index1) - line1 = message1 - else - line1 = copytext(message1+"|"+message1, index1, index1+CHARS_PER_LINE) - var/message1_len = length(message1) - index1 += SCROLL_SPEED - if(index1 > message1_len) - index1 -= message1_len - - if(!index2) - line2 = message2 - else - 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) - return 1 - if(STATUS_DISPLAY_ALERT) - display_alert(seclevel) - return 1 - if(STATUS_DISPLAY_TIME) - message1 = "TIME" - message2 = stationtime2text() - update_display(message1, message2) - return 1 - return 0 - -/obj/machinery/status_display/examine(mob/user) - . = ..() - if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) - . += "The display says:
                    \t[sanitize(message1)]
                    \t[sanitize(message2)]" - -/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 - -/obj/machinery/status_display/proc/display_alert(var/newlevel) - remove_display() - if(seclevel != newlevel) - seclevel = newlevel - switch(seclevel) - if("green") set_light(l_range = 2, l_power = 0.25, l_color = "#00ff00") - if("yellow") set_light(l_range = 2, l_power = 0.25, l_color = "#ffff00") - if("violet") set_light(l_range = 2, l_power = 0.25, l_color = "#9933ff") - if("orange") set_light(l_range = 2, l_power = 0.25, l_color = "#ff9900") - if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9") - if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000") - if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633") - set_picture("status_display_[seclevel]") - -// Called when the alert level is changed. -/obj/machinery/status_display/proc/on_alert_changed(new_level) - // On most alerts, this will change to a flashing alert picture in a specific color. - // Doing that for green alert automatically doesn't really make sense, but it is still available on the comm consoles/PDAs. - if(seclevel2num(new_level) == SEC_LEVEL_GREEN) - mode = STATUS_DISPLAY_TIME - set_light(0) // Remove any glow we had from the alert previously. - update() - return - mode = STATUS_DISPLAY_ALERT - display_alert(new_level) - -/obj/machinery/status_display/proc/set_picture(state) - remove_display() - if(!picture || picture_state != state) - picture_state = state - picture = image('icons/obj/status_display.dmi', icon_state=picture_state) - add_overlay(picture) - -/obj/machinery/status_display/proc/update_display(line1, line2) - var/new_text = {"
                    [line1]
                    [line2]
                    "} - if(maptext != new_text) - maptext = new_text - -/obj/machinery/status_display/proc/get_shuttle_timer_arrival() - if(!emergency_shuttle) - return "Error" - var/timeleft = emergency_shuttle.estimate_arrival_time() - if(timeleft < 0) - return "" - return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" - -/obj/machinery/status_display/proc/get_shuttle_timer_departure() - if(!emergency_shuttle) - return "Error" - var/timeleft = emergency_shuttle.estimate_launch_time() - if(timeleft < 0) - return "" - return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" - -/obj/machinery/status_display/proc/get_supply_shuttle_timer() - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if(!shuttle) - return "Error" - - if(shuttle.has_arrive_time()) - var/timeleft = round((shuttle.arrive_time - world.time) / 10,1) - if(timeleft < 0) - return "Late" - return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" - return "" - -/obj/machinery/status_display/proc/remove_display() - cut_overlays() - if(maptext) - maptext = "" - -/obj/machinery/status_display/receive_signal(datum/signal/signal) - switch(signal.data["command"]) - if("blank") - mode = STATUS_DISPLAY_BLANK - set_light(0) - - if("shuttle") - mode = STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME - set_light(0) - - if("message") - mode = STATUS_DISPLAY_MESSAGE - set_message(signal.data["msg1"], signal.data["msg2"]) - set_light(0) - - if("alert") - mode = STATUS_DISPLAY_ALERT - set_picture(signal.data["picture_state"]) - - if("time") - mode = STATUS_DISPLAY_TIME - set_light(0) - update() - -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef SCROLL_SPEED +#define FONT_SIZE "5pt" +#define FONT_COLOR "#09f" +#define FONT_STYLE "Arial Black" +#define SCROLL_SPEED 2 + +// Status display +// (formerly Countdown timer display) + +// Use to show shuttle ETA/ETD times +// Alert status +// And arbitrary messages set by comms computer +/obj/machinery/status_display + icon = 'icons/obj/status_display.dmi' + icon_state = "frame" + plane = TURF_PLANE + layer = ABOVE_WINDOW_LAYER + name = "status display" + anchored = TRUE + density = FALSE + unacidable = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/status_display + var/mode = 1 // 0 = Blank + // 1 = Shuttle timer + // 2 = Arbitrary message(s) + // 3 = alert picture + // 4 = Supply shuttle timer + + var/picture_state // icon_state of alert picture + var/message1 = "" // message line 1 + var/message2 = "" // message line 2 + var/index1 // display index for scrolling messages or 0 if non-scrolling + var/index2 + var/picture = null + + var/frequency = 1435 // radio frequency + + var/friendc = 0 // track if Friend Computer mode + var/ignore_friendc = 0 + + maptext_height = 26 + maptext_width = 32 + + var/const/CHARS_PER_LINE = 5 + var/const/STATUS_DISPLAY_BLANK = 0 + var/const/STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME = 1 + var/const/STATUS_DISPLAY_MESSAGE = 2 + var/const/STATUS_DISPLAY_ALERT = 3 + var/const/STATUS_DISPLAY_TIME = 4 + var/const/STATUS_DISPLAY_CUSTOM = 99 + + var/seclevel = "green" + +/obj/machinery/status_display/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + return ..() + +/obj/machinery/status_display/attackby(I as obj, user as mob) + if(computer_deconstruction_screwdriver(user, I)) + return + else + attack_hand(user) + return + +// register for radio system +/obj/machinery/status_display/Initialize() + . = ..() + if(radio_controller) + radio_controller.add_object(src, frequency) + +// timed process +/obj/machinery/status_display/process() + if(stat & NOPOWER) + remove_display() + return + update() + +/obj/machinery/status_display/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + set_picture("ai_bsod") + ..(severity) + +// set what is displayed +/obj/machinery/status_display/proc/update() + remove_display() + if(friendc && !ignore_friendc) + set_picture("ai_friend") + return 1 + + switch(mode) + if(STATUS_DISPLAY_BLANK) //blank + return 1 + if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer + if(!emergency_shuttle) + message1 = "-ETA-" + message2 = "Never" // You're here forever. + return 1 + if(emergency_shuttle.waiting_to_leave()) + message1 = "-ETD-" + if(emergency_shuttle.shuttle.is_launching()) + message2 = "Launch" + else + message2 = get_shuttle_timer_departure() + if(length(message2) > CHARS_PER_LINE) + message2 = "Error" + update_display(message1, message2) + else if(emergency_shuttle.has_eta()) + message1 = "-ETA-" + message2 = get_shuttle_timer_arrival() + if(length(message2) > CHARS_PER_LINE) + message2 = "Error" + update_display(message1, message2) + return 1 + if(STATUS_DISPLAY_MESSAGE) //custom messages + var/line1 + var/line2 + + if(!index1) + line1 = message1 + else + line1 = copytext(message1+"|"+message1, index1, index1+CHARS_PER_LINE) + var/message1_len = length(message1) + index1 += SCROLL_SPEED + if(index1 > message1_len) + index1 -= message1_len + + if(!index2) + line2 = message2 + else + 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) + return 1 + if(STATUS_DISPLAY_ALERT) + display_alert(seclevel) + return 1 + if(STATUS_DISPLAY_TIME) + message1 = "TIME" + message2 = stationtime2text() + update_display(message1, message2) + return 1 + return 0 + +/obj/machinery/status_display/examine(mob/user) + . = ..() + if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) + . += "The display says:
                    \t[sanitize(message1)]
                    \t[sanitize(message2)]" + +/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 + +/obj/machinery/status_display/proc/display_alert(var/newlevel) + remove_display() + if(seclevel != newlevel) + seclevel = newlevel + switch(seclevel) + if("green") set_light(l_range = 2, l_power = 0.25, l_color = "#00ff00") + if("yellow") set_light(l_range = 2, l_power = 0.25, l_color = "#ffff00") + if("violet") set_light(l_range = 2, l_power = 0.25, l_color = "#9933ff") + if("orange") set_light(l_range = 2, l_power = 0.25, l_color = "#ff9900") + if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9") + if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000") + if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633") + set_picture("status_display_[seclevel]") + +// Called when the alert level is changed. +/obj/machinery/status_display/proc/on_alert_changed(new_level) + // On most alerts, this will change to a flashing alert picture in a specific color. + // Doing that for green alert automatically doesn't really make sense, but it is still available on the comm consoles/PDAs. + if(seclevel2num(new_level) == SEC_LEVEL_GREEN) + mode = STATUS_DISPLAY_TIME + set_light(0) // Remove any glow we had from the alert previously. + update() + return + mode = STATUS_DISPLAY_ALERT + display_alert(new_level) + +/obj/machinery/status_display/proc/set_picture(state) + remove_display() + if(!picture || picture_state != state) + picture_state = state + picture = image('icons/obj/status_display.dmi', icon_state=picture_state) + add_overlay(picture) + +/obj/machinery/status_display/proc/update_display(line1, line2) + var/new_text = {"
                    [line1]
                    [line2]
                    "} + if(maptext != new_text) + maptext = new_text + +/obj/machinery/status_display/proc/get_shuttle_timer_arrival() + if(!emergency_shuttle) + return "Error" + var/timeleft = emergency_shuttle.estimate_arrival_time() + if(timeleft < 0) + return "" + return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" + +/obj/machinery/status_display/proc/get_shuttle_timer_departure() + if(!emergency_shuttle) + return "Error" + var/timeleft = emergency_shuttle.estimate_launch_time() + if(timeleft < 0) + return "" + return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" + +/obj/machinery/status_display/proc/get_supply_shuttle_timer() + var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle + if(!shuttle) + return "Error" + + if(shuttle.has_arrive_time()) + var/timeleft = round((shuttle.arrive_time - world.time) / 10,1) + if(timeleft < 0) + return "Late" + return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" + return "" + +/obj/machinery/status_display/proc/remove_display() + cut_overlays() + if(maptext) + maptext = "" + +/obj/machinery/status_display/receive_signal(datum/signal/signal) + switch(signal.data["command"]) + if("blank") + mode = STATUS_DISPLAY_BLANK + set_light(0) + + if("shuttle") + mode = STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME + set_light(0) + + if("message") + mode = STATUS_DISPLAY_MESSAGE + set_message(signal.data["msg1"], signal.data["msg2"]) + set_light(0) + + if("alert") + mode = STATUS_DISPLAY_ALERT + set_picture(signal.data["picture_state"]) + + if("time") + mode = STATUS_DISPLAY_TIME + set_light(0) + update() + +#undef FONT_SIZE +#undef FONT_COLOR +#undef FONT_STYLE +#undef SCROLL_SPEED diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index ddc699983e..023a096f9c 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -1,161 +1,161 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -// Beacon randomly spawns in space -// When a non-traitor (no special role in /mind) uses it, he is given the choice to become a traitor -// If he accepts there is a random chance he will be accepted, rejected, or rejected and killed -// Bringing certain items can help improve the chance to become a traitor - -/obj/machinery/syndicate_beacon - name = "ominous beacon" - desc = "This looks suspicious..." - icon = 'icons/obj/device.dmi' - icon_state = "syndbeacon" - anchored = TRUE - density = TRUE - var/temptext = "" - var/selfdestructing = 0 - var/charges = 1 - -/obj/machinery/syndicate_beacon/attack_hand(var/mob/user as mob) - usr.set_machine(src) - var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
                    Identity confirmed,
                    " - if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - if(is_special_character(user)) - dat += "Operative record found. Greetings, Agent [user.name].
                    " - else if(charges < 1) - dat += "Connection severed.
                    " - else - var/honorific = "Mr." - if(user.gender == FEMALE) - honorific = "Ms." - dat += "Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]?
                    " - if(!selfdestructing) - dat += "

                    \"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"
                    " - dat += temptext - user << browse(dat, "window=syndbeacon") - onclose(user, "syndbeacon") - -/obj/machinery/syndicate_beacon/Topic(href, href_list) - if(..()) - return - if(href_list["betraitor"]) - if(charges < 1) - updateUsrDialog() - return - var/mob/M = locate(href_list["traitormob"]) - if(M.mind.special_role || jobban_isbanned(M, "Syndicate")) - temptext = "We have no need for you at this time. Have a pleasant day.
                    " - updateUsrDialog() - return - charges -= 1 - switch(rand(1,2)) - if(1) - temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." - updateUsrDialog() - spawn(rand(50,200)) selfdestruct() - return - if(2) - return - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/N = M - to_chat(N, "You have joined the ranks of the Syndicate and become a traitor to the station!") - traitors.add_antagonist(N.mind) - traitors.equip(N) - message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") - - updateUsrDialog() - return - -/obj/machinery/syndicate_beacon/proc/selfdestruct() - selfdestructing = 1 - spawn() explosion(src.loc, 1, rand(1,3), rand(3,8), 10) - -//////////////////////////////////////// -//Singularity beacon -//////////////////////////////////////// -/obj/machinery/power/singularity_beacon - name = "ominous beacon" - desc = "This looks suspicious..." - icon = 'icons/obj/singularity.dmi' - icon_state = "beacon" - - anchored = FALSE - density = TRUE - layer = MOB_LAYER - 0.1 //so people can't hide it and it's REALLY OBVIOUS - stat = 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.all_singularities) - if(singulo.z == z) - singulo.target = src - icon_state = "[icontype]1" - active = 1 - START_MACHINE_PROCESSING(src) - if(user) - to_chat(user, "You activate the beacon.") - -/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) - for(var/obj/singularity/singulo in GLOB.all_singularities) - if(singulo.target == src) - singulo.target = null - icon_state = "[icontype]0" - active = 0 - if(user) - to_chat(user, "You deactivate the beacon.") - -/obj/machinery/power/singularity_beacon/attack_ai(mob/user as mob) - return - -/obj/machinery/power/singularity_beacon/attack_hand(var/mob/user as mob) - if(anchored) - return active ? Deactivate(user) : Activate(user) - else - to_chat(user, "You need to screw the beacon to the floor first!") - return - -/obj/machinery/power/singularity_beacon/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(active) - to_chat(user, "You need to deactivate the beacon first!") - return - - if(anchored) - anchored = FALSE - to_chat(user, "You unscrew the beacon from the floor.") - playsound(src, W.usesound, 50, 1) - disconnect_from_network() - return - else - if(!connect_to_network()) - to_chat(user, "This device must be placed over an exposed cable.") - return - anchored = TRUE - to_chat(user, "You screw the beacon to the floor and attach the cable.") - playsound(src, W.usesound, 50, 1) - return - ..() - return - -/obj/machinery/power/singularity_beacon/Destroy() - if(active) - Deactivate() - ..() - -//stealth direct power usage -/obj/machinery/power/singularity_beacon/process() - if(!active) - return PROCESS_KILL - else - if(draw_power(1500) < 1500) - Deactivate() - -/obj/machinery/power/singularity_beacon/syndicate - icontype = "beaconsynd" - icon_state = "beaconsynd0" +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +// Beacon randomly spawns in space +// When a non-traitor (no special role in /mind) uses it, he is given the choice to become a traitor +// If he accepts there is a random chance he will be accepted, rejected, or rejected and killed +// Bringing certain items can help improve the chance to become a traitor + +/obj/machinery/syndicate_beacon + name = "ominous beacon" + desc = "This looks suspicious..." + icon = 'icons/obj/device.dmi' + icon_state = "syndbeacon" + anchored = TRUE + density = TRUE + var/temptext = "" + var/selfdestructing = 0 + var/charges = 1 + +/obj/machinery/syndicate_beacon/attack_hand(var/mob/user as mob) + usr.set_machine(src) + var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
                    Identity confirmed,
                    " + if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) + if(is_special_character(user)) + dat += "Operative record found. Greetings, Agent [user.name].
                    " + else if(charges < 1) + dat += "Connection severed.
                    " + else + var/honorific = "Mr." + if(user.gender == FEMALE) + honorific = "Ms." + dat += "Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]?
                    " + if(!selfdestructing) + dat += "

                    \"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"
                    " + dat += temptext + user << browse(dat, "window=syndbeacon") + onclose(user, "syndbeacon") + +/obj/machinery/syndicate_beacon/Topic(href, href_list) + if(..()) + return + if(href_list["betraitor"]) + if(charges < 1) + updateUsrDialog() + return + var/mob/M = locate(href_list["traitormob"]) + if(M.mind.special_role || jobban_isbanned(M, "Syndicate")) + temptext = "We have no need for you at this time. Have a pleasant day.
                    " + updateUsrDialog() + return + charges -= 1 + switch(rand(1,2)) + if(1) + temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." + updateUsrDialog() + spawn(rand(50,200)) selfdestruct() + return + if(2) + return + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/N = M + to_chat(N, "You have joined the ranks of the Syndicate and become a traitor to the station!") + traitors.add_antagonist(N.mind) + traitors.equip(N) + message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") + + updateUsrDialog() + return + +/obj/machinery/syndicate_beacon/proc/selfdestruct() + selfdestructing = 1 + spawn() explosion(src.loc, 1, rand(1,3), rand(3,8), 10) + +//////////////////////////////////////// +//Singularity beacon +//////////////////////////////////////// +/obj/machinery/power/singularity_beacon + name = "ominous beacon" + desc = "This looks suspicious..." + icon = 'icons/obj/singularity.dmi' + icon_state = "beacon" + + anchored = FALSE + density = TRUE + layer = MOB_LAYER - 0.1 //so people can't hide it and it's REALLY OBVIOUS + stat = 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.all_singularities) + if(singulo.z == z) + singulo.target = src + icon_state = "[icontype]1" + active = 1 + START_MACHINE_PROCESSING(src) + if(user) + to_chat(user, "You activate the beacon.") + +/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) + for(var/obj/singularity/singulo in GLOB.all_singularities) + if(singulo.target == src) + singulo.target = null + icon_state = "[icontype]0" + active = 0 + if(user) + to_chat(user, "You deactivate the beacon.") + +/obj/machinery/power/singularity_beacon/attack_ai(mob/user as mob) + return + +/obj/machinery/power/singularity_beacon/attack_hand(var/mob/user as mob) + if(anchored) + return active ? Deactivate(user) : Activate(user) + else + to_chat(user, "You need to screw the beacon to the floor first!") + return + +/obj/machinery/power/singularity_beacon/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(active) + to_chat(user, "You need to deactivate the beacon first!") + return + + if(anchored) + anchored = FALSE + to_chat(user, "You unscrew the beacon from the floor.") + playsound(src, W.usesound, 50, 1) + disconnect_from_network() + return + else + if(!connect_to_network()) + to_chat(user, "This device must be placed over an exposed cable.") + return + anchored = TRUE + to_chat(user, "You screw the beacon to the floor and attach the cable.") + playsound(src, W.usesound, 50, 1) + return + ..() + return + +/obj/machinery/power/singularity_beacon/Destroy() + if(active) + Deactivate() + ..() + +//stealth direct power usage +/obj/machinery/power/singularity_beacon/process() + if(!active) + return PROCESS_KILL + else + if(draw_power(1500) < 1500) + Deactivate() + +/obj/machinery/power/singularity_beacon/syndicate + icontype = "beaconsynd" + icon_state = "beaconsynd0" diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 24394b2bc3..124f5171b4 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -1,386 +1,386 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - - -/* - - All telecommunications interactions: - -*/ - -#define STATION_Z 2 -#define TELECOMM_Z 4 - -/obj/machinery/telecomms - var/list/temp = null // output message - -/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob) - - // Using a multitool lets you access the receiver's interface - if(istype(P, /obj/item/device/multitool)) - attack_hand(user) - - // REPAIRING: Use Nanopaste to repair 10-20 integrity points. - if(istype(P, /obj/item/stack/nanopaste)) - var/obj/item/stack/nanopaste/T = P - if (integrity < 100) //Damaged, let's repair! - if (T.use(1)) - integrity = between(0, integrity + rand(10,20), 100) - to_chat(usr, "You apply the Nanopaste to [src], repairing some of the damage.") - else - to_chat(usr, "This machine is already in perfect condition.") - return - - - if(default_deconstruction_screwdriver(user, P)) - return - if(default_deconstruction_crowbar(user, P)) - return - -/obj/machinery/telecomms/attack_ai(var/mob/user as mob) - attack_hand(user) - -/obj/machinery/telecomms/tgui_data(mob/user) - var/list/data = list() - - data["temp"] = temp - data["on"] = on - - data["id"] = null - data["network"] = null - data["autolinkers"] = FALSE - data["shadowlink"] = FALSE - data["options"] = list() - data["linked"] = list() - data["filter"] = list() - data["multitool"] = FALSE - data["multitool_buffer"] = null - - if(on || interact_offline) - data["id"] = id - data["network"] = network - data["autolinkers"] = !!LAZYLEN(autolinkers) - data["shadowlink"] = !!hide - - data["options"] = Options_Menu() - - var/obj/item/device/multitool/P = get_multitool(user) - data["multitool"] = !!P - data["multitool_buffer"] = null - if(P && P.buffer) - P.update_icon() - data["multitool_buffer"] = list("name" = "[P.buffer]", "id" = "[P.buffer.id]") - - var/i = 0 - var/list/linked = list() - for(var/obj/machinery/telecomms/T in links) - i++ - linked.Add(list(list( - "ref" = "\ref[T]", - "name" = "[T]", - "id" = T.id, - "index" = i, - ))) - data["linked"] = linked - - var/list/filter = list() - for(var/x in freq_listening) - filter.Add(list(list( - "name" = "[format_frequency(x)]", - "freq" = x, - ))) - data["filter"] = filter - - return data - -/obj/machinery/telecomms/tgui_status(mob/user) - if(!issilicon(user)) - if(!istype(user.get_active_hand(), /obj/item/device/multitool)) - return STATUS_CLOSE - . = ..() - -/obj/machinery/telecomms/attack_hand(var/mob/user as mob) - tgui_interact(user) - -/obj/machinery/telecomms/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TelecommsMultitoolMenu", name) - ui.open() - -// Off-Site Relays -// -// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if -// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define) - - -/obj/machinery/telecomms/relay/proc/toggle_level() - - var/turf/position = get_turf(src) - - // Toggle on/off getting signals from the station or the current Z level - if(src.listening_level == STATION_Z) // equals the station - src.listening_level = position.z - return 1 - else if(position.z == TELECOMM_Z) - src.listening_level = STATION_Z - return 1 - return 0 - -// Returns a multitool from a user depending on their mobtype. - -/obj/machinery/proc/get_multitool(mob/user as mob) //No need to have this being a telecomms specific proc. - - var/obj/item/device/multitool/P = null - // Let's double check - if(!issilicon(user) && istype(user.get_active_hand(), /obj/item/device/multitool)) - P = user.get_active_hand() - else if(isAI(user)) - var/mob/living/silicon/ai/U = user - P = U.aiMulti - else if(isrobot(user) && in_range(user, src)) - if(istype(user.get_active_hand(), /obj/item/device/multitool)) - P = user.get_active_hand() - 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 list() - -/* -// Add an option to the processor to switch processing mode. (COMPRESS -> UNCOMPRESS or UNCOMPRESS -> COMPRESS) -/obj/machinery/telecomms/processor/Options_Menu() - var/dat = "
                    Processing Mode: [process_mode ? "UNCOMPRESS" : "COMPRESS"]" - return dat -*/ -// 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_Act(action, params) - return - -/* -/obj/machinery/telecomms/processor/Options_Act(action, params) - - if(href_list["process"]) - set_temp("-% Processing mode changed. %-", "average") - src.process_mode = !src.process_mode -*/ - -// RELAY - -/obj/machinery/telecomms/relay/Options_Menu() - var/list/data = ..() - data["use_listening_level"] = TRUE - data["use_broadcasting"] = TRUE - data["use_receiving"] = TRUE - data["listening_level"] = (listening_level == STATION_Z) - data["broadcasting"] = broadcasting - data["receiving"] = receiving - return data - -/obj/machinery/telecomms/relay/Options_Act(action, params) - if(..()) - return TRUE - - switch(action) - if("receive") - . = TRUE - receiving = !receiving - set_temp("-% Receiving mode changed. %-", "average") - if("broadcast") - . = TRUE - broadcasting = !broadcasting - set_temp("-% Broadcasting mode changed. %-", "average") - if("change_listening") - . = TRUE - //Lock to the station OR lock to the current position! - //You need at least two receivers and two broadcasters for this to work, this includes the machine. - var/result = toggle_level() - if(result) - set_temp("-% [src]'s signal has been successfully changed.", "average") - else - set_temp("-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required.", "average") - -// BUS - -/obj/machinery/telecomms/bus/Options_Menu() - var/list/data = ..() - data["use_change_freq"] = TRUE - data["change_freq"] = change_frequency - return data - -/obj/machinery/telecomms/bus/Options_Act(action, params) - if(..()) - return TRUE - - switch(action) - if("change_freq") - . = TRUE - 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 - set_temp("-% New frequency to change to assigned: \"[newfreq] GHz\" %-", "average") - else - change_frequency = 0 - set_temp("-% Frequency changing deactivated %-", "average") - - -// BROADCASTER -/obj/machinery/telecomms/broadcaster/Options_Menu() - var/list/data = ..() - data["use_broadcast_range"] = TRUE - data["range"] = overmap_range - data["minRange"] = overmap_range_min - data["maxRange"] = overmap_range_max - return data - -/obj/machinery/telecomms/broadcaster - interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake - -/obj/machinery/telecomms/broadcaster/Options_Act(action, params) - if(..()) - return TRUE - - switch(action) - if("range") - var/new_range = params["range"] - overmap_range = clamp(new_range, overmap_range_min, overmap_range_max) - update_idle_power_usage(initial(idle_power_usage)**(overmap_range+1)) - -// RECEIVER -/obj/machinery/telecomms/receiver/Options_Menu() - var/list/data = ..() - data["use_receive_range"] = TRUE - data["range"] = overmap_range - data["minRange"] = overmap_range_min - data["maxRange"] = overmap_range_max - return data - -/obj/machinery/telecomms/receiver - interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake - -/obj/machinery/telecomms/receiver/Options_Act(action, params) - if(..()) - return TRUE - - switch(action) - if("range") - var/new_range = params["range"] - overmap_range = clamp(new_range, overmap_range_min, overmap_range_max) - update_idle_power_usage(initial(idle_power_usage)**(overmap_range+1)) - -/obj/machinery/telecomms/tgui_act(action, params) - if(..()) - return TRUE - - var/obj/item/device/multitool/P = get_multitool(usr) - - switch(action) - if("toggle") - src.toggled = !src.toggled - set_temp("-% [src] has been [src.toggled ? "activated" : "deactivated"].", "average") - update_power() - . = TRUE - - if("id") - var/newid = copytext(reject_bad_text(tgui_input_text(usr, "Specify the new ID for this machine", src, id)),1,MAX_MESSAGE_LEN) - if(newid && canAccess(usr)) - id = newid - set_temp("-% New ID assigned: \"[id]\" %-", "average") - . = TRUE - - if("network") - var/newnet = tgui_input_text(usr, "Specify the new network for this machine. This will break all current links.", src, network) - newnet = sanitize(newnet,15) - if(newnet && canAccess(usr)) - - if(length(newnet) > 15) - set_temp("-% Too many characters in new network tag %-", "average") - - else - for(var/obj/machinery/telecomms/T in links) - T.links.Remove(src) - - network = newnet - links = list() - set_temp("-% New network tag assigned: \"[network]\" %-", "average") - . = TRUE - - - 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 in freq_listening) && newfreq < 10000) - freq_listening.Add(newfreq) - set_temp("-% New frequency filter assigned: \"[newfreq] GHz\" %-", "average") - . = TRUE - - if("delete") - var/x = text2num(params["delete"]) - set_temp("-% Removed frequency filter [x] %-", "average") - freq_listening.Remove(x) - . = TRUE - - if("unlink") - if(text2num(params["unlink"]) <= length(links)) - var/obj/machinery/telecomms/T = links[text2num(params["unlink"])] - set_temp("-% Removed \ref[T] [T.name] from linked entities. %-", "average") - - // Remove link entries from both T and src. - - if(src in T.links) - T.links.Remove(src) - links.Remove(T) - . = TRUE - - if("link") - if(P) - if(P.buffer && P.buffer != src) - if(!(src in P.buffer.links)) - P.buffer.links.Add(src) - - if(!(P.buffer in src.links)) - src.links.Add(P.buffer) - - set_temp("-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-", "average") - - else - set_temp("-% Unable to acquire buffer %-", "average") - . = TRUE - - if("buffer") - P.buffer = src - set_temp("-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-", "average") - . = TRUE - - if("flush") - set_temp("-% Buffer successfully flushed. %-", "average") - P.buffer = null - . = TRUE - - if("cleartemp") - temp = null - . = TRUE - - if(Options_Act(action, params)) - . = TRUE - - add_fingerprint(usr) - -/obj/machinery/telecomms/proc/canAccess(var/mob/user) - if(issilicon(user) || in_range(user, src)) - return 1 - return 0 - -/obj/machinery/telecomms/proc/set_temp(var/text, var/color = "average") - temp = list("color" = color, "text" = text) - -#undef TELECOMM_Z -#undef STATION_Z +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + + +/* + + All telecommunications interactions: + +*/ + +#define STATION_Z 2 +#define TELECOMM_Z 4 + +/obj/machinery/telecomms + var/list/temp = null // output message + +/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob) + + // Using a multitool lets you access the receiver's interface + if(istype(P, /obj/item/device/multitool)) + attack_hand(user) + + // REPAIRING: Use Nanopaste to repair 10-20 integrity points. + if(istype(P, /obj/item/stack/nanopaste)) + var/obj/item/stack/nanopaste/T = P + if (integrity < 100) //Damaged, let's repair! + if (T.use(1)) + integrity = between(0, integrity + rand(10,20), 100) + to_chat(usr, "You apply the Nanopaste to [src], repairing some of the damage.") + else + to_chat(usr, "This machine is already in perfect condition.") + return + + + if(default_deconstruction_screwdriver(user, P)) + return + if(default_deconstruction_crowbar(user, P)) + return + +/obj/machinery/telecomms/attack_ai(var/mob/user as mob) + attack_hand(user) + +/obj/machinery/telecomms/tgui_data(mob/user) + var/list/data = list() + + data["temp"] = temp + data["on"] = on + + data["id"] = null + data["network"] = null + data["autolinkers"] = FALSE + data["shadowlink"] = FALSE + data["options"] = list() + data["linked"] = list() + data["filter"] = list() + data["multitool"] = FALSE + data["multitool_buffer"] = null + + if(on || interact_offline) + data["id"] = id + data["network"] = network + data["autolinkers"] = !!LAZYLEN(autolinkers) + data["shadowlink"] = !!hide + + data["options"] = Options_Menu() + + var/obj/item/device/multitool/P = get_multitool(user) + data["multitool"] = !!P + data["multitool_buffer"] = null + if(P && P.buffer) + P.update_icon() + data["multitool_buffer"] = list("name" = "[P.buffer]", "id" = "[P.buffer.id]") + + var/i = 0 + var/list/linked = list() + for(var/obj/machinery/telecomms/T in links) + i++ + linked.Add(list(list( + "ref" = "\ref[T]", + "name" = "[T]", + "id" = T.id, + "index" = i, + ))) + data["linked"] = linked + + var/list/filter = list() + for(var/x in freq_listening) + filter.Add(list(list( + "name" = "[format_frequency(x)]", + "freq" = x, + ))) + data["filter"] = filter + + return data + +/obj/machinery/telecomms/tgui_status(mob/user) + if(!issilicon(user)) + if(!istype(user.get_active_hand(), /obj/item/device/multitool)) + return STATUS_CLOSE + . = ..() + +/obj/machinery/telecomms/attack_hand(var/mob/user as mob) + tgui_interact(user) + +/obj/machinery/telecomms/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TelecommsMultitoolMenu", name) + ui.open() + +// Off-Site Relays +// +// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if +// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define) + + +/obj/machinery/telecomms/relay/proc/toggle_level() + + var/turf/position = get_turf(src) + + // Toggle on/off getting signals from the station or the current Z level + if(src.listening_level == STATION_Z) // equals the station + src.listening_level = position.z + return 1 + else if(position.z == TELECOMM_Z) + src.listening_level = STATION_Z + return 1 + return 0 + +// Returns a multitool from a user depending on their mobtype. + +/obj/machinery/proc/get_multitool(mob/user as mob) //No need to have this being a telecomms specific proc. + + var/obj/item/device/multitool/P = null + // Let's double check + if(!issilicon(user) && istype(user.get_active_hand(), /obj/item/device/multitool)) + P = user.get_active_hand() + else if(isAI(user)) + var/mob/living/silicon/ai/U = user + P = U.aiMulti + else if(isrobot(user) && in_range(user, src)) + if(istype(user.get_active_hand(), /obj/item/device/multitool)) + P = user.get_active_hand() + 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 list() + +/* +// Add an option to the processor to switch processing mode. (COMPRESS -> UNCOMPRESS or UNCOMPRESS -> COMPRESS) +/obj/machinery/telecomms/processor/Options_Menu() + var/dat = "
                    Processing Mode: [process_mode ? "UNCOMPRESS" : "COMPRESS"]" + return dat +*/ +// 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_Act(action, params) + return + +/* +/obj/machinery/telecomms/processor/Options_Act(action, params) + + if(href_list["process"]) + set_temp("-% Processing mode changed. %-", "average") + src.process_mode = !src.process_mode +*/ + +// RELAY + +/obj/machinery/telecomms/relay/Options_Menu() + var/list/data = ..() + data["use_listening_level"] = TRUE + data["use_broadcasting"] = TRUE + data["use_receiving"] = TRUE + data["listening_level"] = (listening_level == STATION_Z) + data["broadcasting"] = broadcasting + data["receiving"] = receiving + return data + +/obj/machinery/telecomms/relay/Options_Act(action, params) + if(..()) + return TRUE + + switch(action) + if("receive") + . = TRUE + receiving = !receiving + set_temp("-% Receiving mode changed. %-", "average") + if("broadcast") + . = TRUE + broadcasting = !broadcasting + set_temp("-% Broadcasting mode changed. %-", "average") + if("change_listening") + . = TRUE + //Lock to the station OR lock to the current position! + //You need at least two receivers and two broadcasters for this to work, this includes the machine. + var/result = toggle_level() + if(result) + set_temp("-% [src]'s signal has been successfully changed.", "average") + else + set_temp("-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required.", "average") + +// BUS + +/obj/machinery/telecomms/bus/Options_Menu() + var/list/data = ..() + data["use_change_freq"] = TRUE + data["change_freq"] = change_frequency + return data + +/obj/machinery/telecomms/bus/Options_Act(action, params) + if(..()) + return TRUE + + switch(action) + if("change_freq") + . = TRUE + 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 + set_temp("-% New frequency to change to assigned: \"[newfreq] GHz\" %-", "average") + else + change_frequency = 0 + set_temp("-% Frequency changing deactivated %-", "average") + + +// BROADCASTER +/obj/machinery/telecomms/broadcaster/Options_Menu() + var/list/data = ..() + data["use_broadcast_range"] = TRUE + data["range"] = overmap_range + data["minRange"] = overmap_range_min + data["maxRange"] = overmap_range_max + return data + +/obj/machinery/telecomms/broadcaster + interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake + +/obj/machinery/telecomms/broadcaster/Options_Act(action, params) + if(..()) + return TRUE + + switch(action) + if("range") + var/new_range = params["range"] + overmap_range = clamp(new_range, overmap_range_min, overmap_range_max) + update_idle_power_usage(initial(idle_power_usage)**(overmap_range+1)) + +// RECEIVER +/obj/machinery/telecomms/receiver/Options_Menu() + var/list/data = ..() + data["use_receive_range"] = TRUE + data["range"] = overmap_range + data["minRange"] = overmap_range_min + data["maxRange"] = overmap_range_max + return data + +/obj/machinery/telecomms/receiver + interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake + +/obj/machinery/telecomms/receiver/Options_Act(action, params) + if(..()) + return TRUE + + switch(action) + if("range") + var/new_range = params["range"] + overmap_range = clamp(new_range, overmap_range_min, overmap_range_max) + update_idle_power_usage(initial(idle_power_usage)**(overmap_range+1)) + +/obj/machinery/telecomms/tgui_act(action, params) + if(..()) + return TRUE + + var/obj/item/device/multitool/P = get_multitool(usr) + + switch(action) + if("toggle") + src.toggled = !src.toggled + set_temp("-% [src] has been [src.toggled ? "activated" : "deactivated"].", "average") + update_power() + . = TRUE + + if("id") + var/newid = copytext(reject_bad_text(tgui_input_text(usr, "Specify the new ID for this machine", src, id)),1,MAX_MESSAGE_LEN) + if(newid && canAccess(usr)) + id = newid + set_temp("-% New ID assigned: \"[id]\" %-", "average") + . = TRUE + + if("network") + var/newnet = tgui_input_text(usr, "Specify the new network for this machine. This will break all current links.", src, network) + newnet = sanitize(newnet,15) + if(newnet && canAccess(usr)) + + if(length(newnet) > 15) + set_temp("-% Too many characters in new network tag %-", "average") + + else + for(var/obj/machinery/telecomms/T in links) + T.links.Remove(src) + + network = newnet + links = list() + set_temp("-% New network tag assigned: \"[network]\" %-", "average") + . = TRUE + + + 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 in freq_listening) && newfreq < 10000) + freq_listening.Add(newfreq) + set_temp("-% New frequency filter assigned: \"[newfreq] GHz\" %-", "average") + . = TRUE + + if("delete") + var/x = text2num(params["delete"]) + set_temp("-% Removed frequency filter [x] %-", "average") + freq_listening.Remove(x) + . = TRUE + + if("unlink") + if(text2num(params["unlink"]) <= length(links)) + var/obj/machinery/telecomms/T = links[text2num(params["unlink"])] + set_temp("-% Removed \ref[T] [T.name] from linked entities. %-", "average") + + // Remove link entries from both T and src. + + if(src in T.links) + T.links.Remove(src) + links.Remove(T) + . = TRUE + + if("link") + if(P) + if(P.buffer && P.buffer != src) + if(!(src in P.buffer.links)) + P.buffer.links.Add(src) + + if(!(P.buffer in src.links)) + src.links.Add(P.buffer) + + set_temp("-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-", "average") + + else + set_temp("-% Unable to acquire buffer %-", "average") + . = TRUE + + if("buffer") + P.buffer = src + set_temp("-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-", "average") + . = TRUE + + if("flush") + set_temp("-% Buffer successfully flushed. %-", "average") + P.buffer = null + . = TRUE + + if("cleartemp") + temp = null + . = TRUE + + if(Options_Act(action, params)) + . = TRUE + + add_fingerprint(usr) + +/obj/machinery/telecomms/proc/canAccess(var/mob/user) + if(issilicon(user) || in_range(user, src)) + return 1 + return 0 + +/obj/machinery/telecomms/proc/set_temp(var/text, var/color = "average") + temp = list("color" = color, "text" = text) + +#undef TELECOMM_Z +#undef STATION_Z diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 65fec5a304..1670694d02 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -1,224 +1,224 @@ -// ### Preset machines ### - -//Relay - -/obj/machinery/telecomms/relay/preset - network = "tcommsat" - -/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 = 0 - autolinkers = list("r_relay") - -/obj/machinery/telecomms/relay/preset/centcom - id = "CentCom Relay" - hide = 1 - toggled = 1 - //anchored = TRUE - //use_power = 0 - //idle_power_usage = 0 - produces_heat = 0 - autolinkers = list("c_relay") - -//HUB - -/obj/machinery/telecomms/hub/preset - id = "Hub" - network = "tcommsat" - autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "science", "medical", - "supply", "service", "common", "command", "engineering", "security", "unused", "hb_relay", "casino_relay", - "receiverA", "broadcasterA") //VOREStation Edit - Added "hb_relay" || CHOMPStation Edit - Added "casino_relay" - -/obj/machinery/telecomms/hub/preset_cent - id = "CentCom Hub" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", "hb_relay", - "centcom", "receiverCent", "broadcasterCent") //VOREStation Edit - Added "hb_relay" - -//Receivers - -/obj/machinery/telecomms/receiver/preset_right - id = "Receiver A" - network = "tcommsat" - autolinkers = list("receiverA") // link to relay - freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, BDCM_FREQ, ENT_FREQ) // CHOMPEdit - - - //Common and other radio frequencies for people to freely use -/obj/machinery/telecomms/receiver/preset_right/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - freq_listening |= i - ..() - -/obj/machinery/telecomms/receiver/preset_cent - id = "CentCom Receiver" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("receiverCent") - freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) - - -//Buses - -/obj/machinery/telecomms/bus/preset_one - id = "Bus 1" - network = "tcommsat" - freq_listening = list(SCI_FREQ, MED_FREQ) - autolinkers = list("processor1", "science", "medical") - -/obj/machinery/telecomms/bus/preset_two - id = "Bus 2" - network = "tcommsat" - freq_listening = list(SUP_FREQ, SRV_FREQ) - autolinkers = list("processor2", "supply", "service", "unused") - -/obj/machinery/telecomms/bus/preset_two/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - if(i == PUB_FREQ) - continue - freq_listening |= i - ..() - -/obj/machinery/telecomms/bus/preset_three - id = "Bus 3" - network = "tcommsat" - freq_listening = list(SEC_FREQ, COMM_FREQ) - autolinkers = list("processor3", "security", "command") - -/obj/machinery/telecomms/bus/preset_four - id = "Bus 4" - network = "tcommsat" - freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ, BDCM_FREQ) // CHOMPEdit - - autolinkers = list("processor4", "engineering", "common") - -/obj/machinery/telecomms/bus/preset_cent - id = "CentCom Bus" - network = "tcommsat" - freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) - produces_heat = 0 - autolinkers = list("processorCent", "centcom") - -//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_cent - id = "CentCom Processor" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("processorCent") - -//Servers - -/obj/machinery/telecomms/server/presets - - network = "tcommsat" - -/obj/machinery/telecomms/server/presets/science - id = "Science Server" - freq_listening = list(SCI_FREQ) - autolinkers = list("science") - -/obj/machinery/telecomms/server/presets/medical - id = "Medical Server" - freq_listening = list(MED_FREQ) - autolinkers = list("medical") - -/obj/machinery/telecomms/server/presets/supply - id = "Supply Server" - freq_listening = list(SUP_FREQ) - autolinkers = list("supply") - -/obj/machinery/telecomms/server/presets/service - id = "Service Server" - freq_listening = list(SRV_FREQ) - autolinkers = list("service") - -/obj/machinery/telecomms/server/presets/common - id = "Common Server" - freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ, BDCM_FREQ) // AI Private and Common // CHOMPEdit - - autolinkers = list("common") - -// "Unused" channels, AKA all others. -/obj/machinery/telecomms/server/presets/unused - id = "Unused Server" - freq_listening = list() - autolinkers = list("unused") - -/obj/machinery/telecomms/server/presets/unused/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - if(i == AI_FREQ || i == PUB_FREQ) - continue - freq_listening |= i - ..() - -/obj/machinery/telecomms/server/presets/command - id = "Command Server" - freq_listening = list(COMM_FREQ) - autolinkers = list("command") - -/obj/machinery/telecomms/server/presets/engineering - id = "Engineering Server" - freq_listening = list(ENG_FREQ) - autolinkers = list("engineering") - -/obj/machinery/telecomms/server/presets/security - id = "Security Server" - freq_listening = list(SEC_FREQ) - autolinkers = list("security") - -/obj/machinery/telecomms/server/presets/centcomm - id = "CentCom Server" - freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) - produces_heat = 0 - autolinkers = list("centcom") - - -//Broadcasters - -//--PRESET LEFT--// - -/obj/machinery/telecomms/broadcaster/preset_right - id = "Broadcaster A" - network = "tcommsat" - autolinkers = list("broadcasterA") - -/obj/machinery/telecomms/broadcaster/preset_cent - id = "CentCom Broadcaster" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("broadcasterCent") +// ### Preset machines ### + +//Relay + +/obj/machinery/telecomms/relay/preset + network = "tcommsat" + +/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 = 0 + autolinkers = list("r_relay") + +/obj/machinery/telecomms/relay/preset/centcom + id = "CentCom Relay" + hide = 1 + toggled = 1 + //anchored = TRUE + //use_power = 0 + //idle_power_usage = 0 + produces_heat = 0 + autolinkers = list("c_relay") + +//HUB + +/obj/machinery/telecomms/hub/preset + id = "Hub" + network = "tcommsat" + autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "science", "medical", + "supply", "service", "common", "command", "engineering", "security", "unused", "hb_relay", "casino_relay", + "receiverA", "broadcasterA") //VOREStation Edit - Added "hb_relay" || CHOMPStation Edit - Added "casino_relay" + +/obj/machinery/telecomms/hub/preset_cent + id = "CentCom Hub" + network = "tcommsat" + produces_heat = 0 + autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", "hb_relay", + "centcom", "receiverCent", "broadcasterCent") //VOREStation Edit - Added "hb_relay" + +//Receivers + +/obj/machinery/telecomms/receiver/preset_right + id = "Receiver A" + network = "tcommsat" + autolinkers = list("receiverA") // link to relay + freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, BDCM_FREQ, ENT_FREQ) // CHOMPEdit + + + //Common and other radio frequencies for people to freely use +/obj/machinery/telecomms/receiver/preset_right/New() + for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) + freq_listening |= i + ..() + +/obj/machinery/telecomms/receiver/preset_cent + id = "CentCom Receiver" + network = "tcommsat" + produces_heat = 0 + autolinkers = list("receiverCent") + freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) + + +//Buses + +/obj/machinery/telecomms/bus/preset_one + id = "Bus 1" + network = "tcommsat" + freq_listening = list(SCI_FREQ, MED_FREQ) + autolinkers = list("processor1", "science", "medical") + +/obj/machinery/telecomms/bus/preset_two + id = "Bus 2" + network = "tcommsat" + freq_listening = list(SUP_FREQ, SRV_FREQ) + autolinkers = list("processor2", "supply", "service", "unused") + +/obj/machinery/telecomms/bus/preset_two/New() + for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) + if(i == PUB_FREQ) + continue + freq_listening |= i + ..() + +/obj/machinery/telecomms/bus/preset_three + id = "Bus 3" + network = "tcommsat" + freq_listening = list(SEC_FREQ, COMM_FREQ) + autolinkers = list("processor3", "security", "command") + +/obj/machinery/telecomms/bus/preset_four + id = "Bus 4" + network = "tcommsat" + freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ, BDCM_FREQ) // CHOMPEdit + + autolinkers = list("processor4", "engineering", "common") + +/obj/machinery/telecomms/bus/preset_cent + id = "CentCom Bus" + network = "tcommsat" + freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) + produces_heat = 0 + autolinkers = list("processorCent", "centcom") + +//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_cent + id = "CentCom Processor" + network = "tcommsat" + produces_heat = 0 + autolinkers = list("processorCent") + +//Servers + +/obj/machinery/telecomms/server/presets + + network = "tcommsat" + +/obj/machinery/telecomms/server/presets/science + id = "Science Server" + freq_listening = list(SCI_FREQ) + autolinkers = list("science") + +/obj/machinery/telecomms/server/presets/medical + id = "Medical Server" + freq_listening = list(MED_FREQ) + autolinkers = list("medical") + +/obj/machinery/telecomms/server/presets/supply + id = "Supply Server" + freq_listening = list(SUP_FREQ) + autolinkers = list("supply") + +/obj/machinery/telecomms/server/presets/service + id = "Service Server" + freq_listening = list(SRV_FREQ) + autolinkers = list("service") + +/obj/machinery/telecomms/server/presets/common + id = "Common Server" + freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ, BDCM_FREQ) // AI Private and Common // CHOMPEdit + + autolinkers = list("common") + +// "Unused" channels, AKA all others. +/obj/machinery/telecomms/server/presets/unused + id = "Unused Server" + freq_listening = list() + autolinkers = list("unused") + +/obj/machinery/telecomms/server/presets/unused/New() + for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) + if(i == AI_FREQ || i == PUB_FREQ) + continue + freq_listening |= i + ..() + +/obj/machinery/telecomms/server/presets/command + id = "Command Server" + freq_listening = list(COMM_FREQ) + autolinkers = list("command") + +/obj/machinery/telecomms/server/presets/engineering + id = "Engineering Server" + freq_listening = list(ENG_FREQ) + autolinkers = list("engineering") + +/obj/machinery/telecomms/server/presets/security + id = "Security Server" + freq_listening = list(SEC_FREQ) + autolinkers = list("security") + +/obj/machinery/telecomms/server/presets/centcomm + id = "CentCom Server" + freq_listening = list(ERT_FREQ, DTH_FREQ, SYND_FREQ) + produces_heat = 0 + autolinkers = list("centcom") + + +//Broadcasters + +//--PRESET LEFT--// + +/obj/machinery/telecomms/broadcaster/preset_right + id = "Broadcaster A" + network = "tcommsat" + autolinkers = list("broadcasterA") + +/obj/machinery/telecomms/broadcaster/preset_cent + id = "CentCom Broadcaster" + network = "tcommsat" + produces_heat = 0 + autolinkers = list("broadcasterCent") diff --git a/code/game/machinery/telecomms/presets_ch.dm b/code/game/machinery/telecomms/presets_ch.dm index 0d2191393f..61803688d9 100644 --- a/code/game/machinery/telecomms/presets_ch.dm +++ b/code/game/machinery/telecomms/presets_ch.dm @@ -1,8 +1,8 @@ -// ### CHOMP Preset machines ### - -//Relay - -/obj/machinery/telecomms/relay/preset/casino - id = "Casino Relay" - autolinkers = list("casino_relay") - produces_heat = 0 +// ### CHOMP Preset machines ### + +//Relay + +/obj/machinery/telecomms/relay/preset/casino + id = "Casino Relay" + autolinkers = list("casino_relay") + produces_heat = 0 diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 9c25b9f650..a205009541 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -1,739 +1,739 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/* - 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 machines defined in this file 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. -*/ - -var/global/list/obj/machinery/telecomms/telecomms_list = list() - -/obj/machinery/telecomms - icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Add - unacidable = 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/machinetype = 0 // just a hacky way of preventing alike machines from pairing - var/toggled = 1 // Is it toggled on - var/on = 1 - var/integrity = 100 // basically HP, loses integrity by heat - var/produces_heat = 1 //whether the machine will produce heat when on. - var/delay = 10 // how many process() ticks to delay per heat - var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/hide = 0 // Is it a hidden machine? - var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. - - var/datum/looping_sound/tcomms/soundloop // CHOMPStation Add: Hummy noises - var/noisy = TRUE // CHOMPStation Add: Hummy noises, this starts on - -/obj/machinery/telecomms/proc/relay_information(datum/signal/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 - //to_world("[src] ([src.id]) - [signal.debug_print()]") - var/send_count = 0 - - signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity - - /* - // Edit by Atlantis: Commented out as emergency fix due to causing extreme delays in communications. - // 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(machine.loc.z != listening_level) - if(long_range_link == 0 && machine.long_range_link == 0) - continue - // If we're sending a copy, be sure to create the copy for EACH machine and paste the data - var/datum/signal/copy - if(copysig) - copy = new - copy.transmission_method = TRANSMISSION_SUBSPACE - copy.frequency = signal.frequency - copy.data = signal.data.Copy() - - // Keep the "original" signal constant - if(!signal.data["original"]) - copy.data["original"] = signal - else - copy.data["original"] = signal.data["original"] - - send_count++ - if(machine.is_freq_listening(signal)) - machine.traffic++ - - if(copysig && copy) - machine.receive_information(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 - return - -/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal) - // return 1 if found, 0 if not found - if(!signal) - return 0 - if((signal.frequency in freq_listening) || (!freq_listening.len)) - return 1 - else - return 0 - - -/obj/machinery/telecomms/New() - telecomms_list += src - ..() - - //Set the listening_level if there's none. - if(!listening_level) - //Defaults to our Z level! - var/turf/position = get_turf(src) - listening_level = position.z - -/obj/machinery/telecomms/Initialize() - if(autolinkers.len) - // Links nearby machines - if(!long_range_link) - for(var/obj/machinery/telecomms/T in orange(20, src)) - add_link(T) - else - for(var/obj/machinery/telecomms/T in telecomms_list) - add_link(T) - // CHOMPAdd: TComms humming - soundloop = new(list(src), FALSE) - if(prob(60)) // 60% chance to change the midloop - if(prob(40)) - soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_02.ogg' = 1) - soundloop.mid_length = 40 - else if(prob(20)) - soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_03.ogg' = 1) - soundloop.mid_length = 10 - else - soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_04.ogg' = 1) - soundloop.mid_length = 30 - soundloop.start() - // CHOMPAdd End - . = ..() - -/obj/machinery/telecomms/Destroy() - telecomms_list -= src - for(var/obj/machinery/telecomms/comm in telecomms_list) - comm.links -= src - links = list() - QDEL_NULL(soundloop) // CHOMPAdd: Tcomms noises - ..() - -// Used in auto linking -/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T) - var/pos_z = get_z(src) - var/tpos_z = get_z(T) - if((pos_z == tpos_z) || (src.long_range_link && T.long_range_link)) - for(var/x in autolinkers) - if(T.autolinkers.Find(x)) - if(src != T) - links |= T - -/obj/machinery/telecomms/update_icon() - if(on) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]_off" - -/obj/machinery/telecomms/proc/update_power() - - if(toggled) - if(stat & (BROKEN|NOPOWER|EMPED) || integrity <= 0) // if powered, on. if not powered, off. if too damaged, off - on = 0 - soundloop.stop() // CHOMPAdd: Tcomms noises - noisy = FALSE - else - on = 1 - else - on = 0 - soundloop.stop() // CHOMPAdd: Tcomms noises - noisy = FALSE - if(!noisy) // CHOMPAdd: Tcomms noises - soundloop.start() // CHOMPAdd: Tcomms noises - noisy = TRUE - -/obj/machinery/telecomms/process() - update_power() - - // Check heat and generate some - checkheat() - - // Update the icon - update_icon() - - if(traffic > 0) - traffic -= netspeed - -/obj/machinery/telecomms/emp_act(severity) - if(prob(100/severity)) - if(!(stat & EMPED)) - stat |= EMPED - playsound(src, 'sound/machines/tcomms/tcomms_pulse.ogg', 70, 1, 30) // CHOMPAdd: Tcomms noises - var/duration = (300 * 10)/severity - spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot. - stat &= ~EMPED - ..() - -/obj/machinery/telecomms/proc/checkheat() - // Checks heat from the environment and applies any integrity damage - var/datum/gas_mixture/environment = loc.return_air() - var/damage_chance = 0 // Percent based chance of applying 1 integrity damage this tick - switch(environment.temperature) - if((T0C + 40) to (T0C + 70)) // 40C-70C, minor overheat, 10% chance of taking damage - damage_chance = 10 - if((T0C + 70) to (T0C + 130)) // 70C-130C, major overheat, 25% chance of taking damage - damage_chance = 25 - if((T0C + 130) to (T0C + 200)) // 130C-200C, dangerous overheat, 50% chance of taking damage - damage_chance = 50 - if((T0C + 200) to INFINITY) // More than 200C, INFERNO. Takes damage every tick. - damage_chance = 100 - if (damage_chance && prob(damage_chance)) - integrity = between(0, integrity - 1, 100) - - - if(delay > 0) - delay-- - else if(on) - produce_heat() - delay = initial(delay) - - - -/obj/machinery/telecomms/proc/produce_heat() - if (!produces_heat) - return - - if (!use_power) - return - - if(!(stat & (NOPOWER|BROKEN))) - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - - var/transfer_moles = 0.25 * env.total_moles - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - - var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source - if (traffic <= 0) - heat_produced *= 0.30 //if idle, produce less heat. - - removed.add_thermal_energy(heat_produced) - - env.merge(removed) -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "broadcast receiver" - desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 600 - machinetype = 1 - produces_heat = 0 - circuit = /obj/item/weapon/circuitboard/telecomms/receiver - //Vars only used if you're using the overmap - var/overmap_range = 0 - var/overmap_range_min = 0 - var/overmap_range_max = 5 - - var/list/linked_radios_weakrefs = list() - -/obj/machinery/telecomms/receiver/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/receiver/proc/link_radio(var/obj/item/device/radio/R) - if(!istype(R)) - return - linked_radios_weakrefs |= WEAKREF(R) - -/obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) - if(!on) // has to be on to receive messages - return - if(!signal) - return - if(!check_receive_level(signal)) - return - - if(signal.transmission_method == TRANSMISSION_SUBSPACE) - - if(is_freq_listening(signal)) // detect subspace signals - - //Remove the level and then start adding levels that it is being broadcasted in. - signal.data["level"] = list() - - var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) // ideally relay the copied information to relays - if(!can_send) - relay_information(signal, /obj/machinery/telecomms/bus) // Send it to a bus instead, if it's linked to one - -/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal) - // If it's a direct message from a bluespace radio, we eat it and convert it into a subspace signal locally - if(signal.transmission_method == TRANSMISSION_BLUESPACE) - var/obj/item/device/radio/R = signal.data["radio"] - - //Who're you? - if(!(WEAKREF(R) in linked_radios_weakrefs)) - signal.data["reject"] = 1 - return 0 - - //We'll resend this for you - signal.data["level"] = z - signal.transmission_method = TRANSMISSION_SUBSPACE - return 1 - - //Where can we hear? - var/list/listening_levels = using_map.get_map_levels(listening_level, TRUE, overmap_range) - - // We couldn't 'hear' it, maybe a relay linked to our hub can 'hear' it - if(!(signal.data["level"] in listening_levels)) - for(var/obj/machinery/telecomms/hub/H in links) - var/list/relayed_levels = list() - for(var/obj/machinery/telecomms/relay/R in H.links) - if(R.can_receive(signal)) - relayed_levels |= R.listening_level - if(signal.data["level"] in relayed_levels) - return 1 - return 0 - return 1 - - -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "hub" - desc = "A mighty piece of hardware used to send/receive massive amounts of data." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 1600 - machinetype = 7 - circuit = /obj/item/weapon/circuitboard/telecomms/hub - long_range_link = 1 - netspeed = 40 - -/obj/machinery/telecomms/hub/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(is_freq_listening(signal)) - if(istype(machine_from, /obj/machinery/telecomms/receiver)) - //If the signal is compressed, send it to the bus. - relay_information(signal, /obj/machinery/telecomms/bus, 1) // ideally relay the copied information to bus units - else - // Get a list of relays that we're linked to, then send the signal to their levels. - relay_information(signal, /obj/machinery/telecomms/relay, 1) - relay_information(signal, /obj/machinery/telecomms/broadcaster, 1) // Send it to a broadcaster. - - -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "relay" - desc = "A mighty piece of hardware used to send massive amounts of data far away." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 600 - machinetype = 8 - produces_heat = 0 - circuit = /obj/item/weapon/circuitboard/telecomms/relay - netspeed = 5 - long_range_link = 1 - var/broadcasting = 1 - var/receiving = 1 - -/obj/machinery/telecomms/relay/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/relay/forceMove(var/newloc) - . = ..(newloc) - listening_level = z - -/obj/machinery/telecomms/relay/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - // Add our level and send it back - if(can_send(signal)) - signal.data["level"] |= using_map.get_map_levels(listening_level) - -// Checks to see if it can send/receive. - -/obj/machinery/telecomms/relay/proc/can(datum/signal/signal) - if(!on) - return 0 - if(!is_freq_listening(signal)) - return 0 - return 1 - -/obj/machinery/telecomms/relay/proc/can_send(datum/signal/signal) - if(!can(signal)) - return 0 - return broadcasting - -/obj/machinery/telecomms/relay/proc/can_receive(datum/signal/signal) - if(!can(signal)) - return 0 - return receiving - -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "bus" - desc = "A mighty piece of hardware used to send massive amounts of data quickly." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 1000 - machinetype = 2 - circuit = /obj/item/weapon/circuitboard/telecomms/bus - netspeed = 40 - var/change_frequency = 0 - -/obj/machinery/telecomms/bus/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - if(is_freq_listening(signal)) - - if(change_frequency) - 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 - var/send_to_processor = relay_information(signal, /obj/machinery/telecomms/processor) - - if(send_to_processor) - return - // failed to send to a processor, relay information anyway - signal.data["slow"] += rand(1, 5) // slow the signal down only slightly - src.receive_information(signal, src) - - // Try sending it! - var/list/try_send = list(/obj/machinery/telecomms/server, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus) - var/i = 0 - for(var/send in try_send) - if(i) - signal.data["slow"] += rand(0, 1) // slow the signal down only slightly - i++ - var/can_send = relay_information(signal, send) - if(can_send) - break - - - -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "processor" - desc = "This machine is used to process large quantities of information." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 600 - machinetype = 3 - delay = 5 - circuit = /obj/item/weapon/circuitboard/telecomms/processor - var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals - -/obj/machinery/telecomms/processor/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - if(is_freq_listening(signal)) - - if(process_mode) - signal.data["compression"] = 0 // uncompress subspace signal - else - signal.data["compression"] = 100 // even more compressed 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, /obj/machinery/telecomms/server) - - -/* - 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon - icon_state = "comm_server" - desc = "A machine used to store data and network statistics." - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 300 - machinetype = 4 - circuit = /obj/item/weapon/circuitboard/telecomms/server - var/list/log_entries = list() - var/list/stored_names = list() - var/list/TrafficActions = list() - var/logs = 0 // number of logs - var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) - - var/list/memory = list() // stored memory - var/rawcode = "" // the code to compile (raw text) - var/datum/TCS_Compiler/Compiler // the compiler that compiles and runs the code - var/autoruncode = 0 // 1 if the code is set to run every time a signal is picked up - - var/encryption = "null" // encryption key: ie "password" - var/salt = "null" // encryption salt: ie "123comsat" - // would add up to md5("password123comsat") - var/obj/item/device/radio/headset/server_radio = null - -/obj/machinery/telecomms/server/New() - ..() - Compiler = new() - Compiler.Holder = src - server_radio = new() - -/obj/machinery/telecomms/server/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - if(signal.data["message"]) - - if(is_freq_listening(signal)) - - if(traffic > 0) - totaltraffic += traffic // add current traffic to total traffic - - //Is this a test signal? Bypass logging - if(signal.data["type"] != SIGNAL_TEST) - - // If signal has a message and appropriate frequency - - update_logs() - - var/datum/comm_log_entry/log = new - var/mob/M = signal.data["mob"] - - // Copy the signal.data entries we want - log.parameters["mobtype"] = signal.data["mobtype"] - log.parameters["job"] = signal.data["job"] - log.parameters["key"] = signal.data["key"] - log.parameters["vmessage"] = multilingual_to_message(signal.data["message"]) - log.parameters["vname"] = signal.data["vname"] - log.parameters["message"] = multilingual_to_message(signal.data["message"]) - log.parameters["name"] = signal.data["name"] - log.parameters["realname"] = signal.data["realname"] - log.parameters["timecode"] = worldtime2stationtime(world.time) - - var/race = "unknown" - if(ishuman(M)) - var/mob/living/carbon/human/H = M - race = "[H.species.name]" - log.parameters["intelligible"] = 1 - else if(isbrain(M)) - race = "Brain" - log.parameters["intelligible"] = 1 - else if(M.isMonkey()) - race = "Monkey" - else if(issilicon(M)) - race = "Artificial Life" - log.parameters["intelligible"] = 1 - else if(isslime(M)) - race = "Slime" - else if(isanimal(M)) - race = "Domestic Animal" - - log.parameters["race"] = race - - if(!istype(M, /mob/new_player) && M) - log.parameters["uspeech"] = M.universal_speak - else - log.parameters["uspeech"] = 0 - - // If the signal is still compressed, make the log entry gibberish - if(signal.data["compression"] > 0) - log.parameters["message"] = Gibberish(multilingual_to_message(signal.data["message"]), signal.data["compression"] + 50) - log.parameters["job"] = Gibberish(signal.data["job"], signal.data["compression"] + 50) - log.parameters["name"] = Gibberish(signal.data["name"], signal.data["compression"] + 50) - log.parameters["realname"] = Gibberish(signal.data["realname"], signal.data["compression"] + 50) - log.parameters["vname"] = Gibberish(signal.data["vname"], signal.data["compression"] + 50) - log.input_type = "Corrupt File" - - // Log and store everything that needs to be logged - log_entries.Add(log) - if(!(signal.data["name"] in stored_names)) - stored_names.Add(signal.data["name"]) - logs++ - signal.data["server"] = src - - // Give the log a name - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "data packet ([md5(identifier)])" - - if(Compiler && autoruncode) - Compiler.Run(signal) // execute the code - - var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) - if(!can_send) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - - -/obj/machinery/telecomms/server/proc/setcode(var/t) - if(t) - if(istext(t)) - rawcode = t - -/obj/machinery/telecomms/server/proc/compile() - if(Compiler) - return Compiler.Compile(rawcode) - -/obj/machinery/telecomms/server/proc/update_logs() - // start deleting the very first log entry - if(logs >= 400) - for(var/i = 1, i <= logs, i++) // locate the first garbage collectable log entry and remove it - var/datum/comm_log_entry/L = log_entries[i] - if(L.garbage_collector) - log_entries.Remove(L) - logs-- - break - -/obj/machinery/telecomms/server/proc/add_entry(var/content, var/input) - var/datum/comm_log_entry/log = new - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "[input] ([md5(identifier)])" - log.input_type = input - log.parameters["message"] = content - log.parameters["timecode"] = stationtime2text() - log_entries.Add(log) - update_logs() - - - - -// Simple log entry datum - -/datum/comm_log_entry - var/parameters = list() // carbon-copy to signal.data[] - var/name = "data packet (#)" - var/garbage_collector = 1 // if set to 0, will not be garbage collected - var/input_type = "Speech File" - -//Generic telecomm connectivity test proc -/proc/can_telecomm(var/atom/A, var/atom/B, var/ad_hoc = FALSE) - if(!A || !B) - log_debug("can_telecomm(): Undefined endpoints!") - return FALSE - - //Can't in this case, obviously! - if(is_jammed(A) || is_jammed(B)) - return FALSE - - //Items don't have a Z when inside an object or mob - var/turf/src_z = get_z(A) - var/turf/dst_z = get_z(B) - - //Nullspace, probably. - if(!src_z || !dst_z) - return FALSE - - //We can do the simple check first, if you have ad_hoc radios. - if(ad_hoc && src_z == dst_z) - return TRUE - - return src_z in using_map.get_map_levels(dst_z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/* + 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 machines defined in this file 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. +*/ + +var/global/list/obj/machinery/telecomms/telecomms_list = list() + +/obj/machinery/telecomms + icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Add + unacidable = 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/machinetype = 0 // just a hacky way of preventing alike machines from pairing + var/toggled = 1 // Is it toggled on + var/on = 1 + var/integrity = 100 // basically HP, loses integrity by heat + var/produces_heat = 1 //whether the machine will produce heat when on. + var/delay = 10 // how many process() ticks to delay per heat + var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) + var/hide = 0 // Is it a hidden machine? + var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. + + var/datum/looping_sound/tcomms/soundloop // CHOMPStation Add: Hummy noises + var/noisy = TRUE // CHOMPStation Add: Hummy noises, this starts on + +/obj/machinery/telecomms/proc/relay_information(datum/signal/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 + //to_world("[src] ([src.id]) - [signal.debug_print()]") + var/send_count = 0 + + signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity + + /* + // Edit by Atlantis: Commented out as emergency fix due to causing extreme delays in communications. + // 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(machine.loc.z != listening_level) + if(long_range_link == 0 && machine.long_range_link == 0) + continue + // If we're sending a copy, be sure to create the copy for EACH machine and paste the data + var/datum/signal/copy + if(copysig) + copy = new + copy.transmission_method = TRANSMISSION_SUBSPACE + copy.frequency = signal.frequency + copy.data = signal.data.Copy() + + // Keep the "original" signal constant + if(!signal.data["original"]) + copy.data["original"] = signal + else + copy.data["original"] = signal.data["original"] + + send_count++ + if(machine.is_freq_listening(signal)) + machine.traffic++ + + if(copysig && copy) + machine.receive_information(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 + return + +/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal) + // return 1 if found, 0 if not found + if(!signal) + return 0 + if((signal.frequency in freq_listening) || (!freq_listening.len)) + return 1 + else + return 0 + + +/obj/machinery/telecomms/New() + telecomms_list += src + ..() + + //Set the listening_level if there's none. + if(!listening_level) + //Defaults to our Z level! + var/turf/position = get_turf(src) + listening_level = position.z + +/obj/machinery/telecomms/Initialize() + if(autolinkers.len) + // Links nearby machines + if(!long_range_link) + for(var/obj/machinery/telecomms/T in orange(20, src)) + add_link(T) + else + for(var/obj/machinery/telecomms/T in telecomms_list) + add_link(T) + // CHOMPAdd: TComms humming + soundloop = new(list(src), FALSE) + if(prob(60)) // 60% chance to change the midloop + if(prob(40)) + soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_02.ogg' = 1) + soundloop.mid_length = 40 + else if(prob(20)) + soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_03.ogg' = 1) + soundloop.mid_length = 10 + else + soundloop.mid_sounds = list('sound/machines/tcomms/tcomms_04.ogg' = 1) + soundloop.mid_length = 30 + soundloop.start() + // CHOMPAdd End + . = ..() + +/obj/machinery/telecomms/Destroy() + telecomms_list -= src + for(var/obj/machinery/telecomms/comm in telecomms_list) + comm.links -= src + links = list() + QDEL_NULL(soundloop) // CHOMPAdd: Tcomms noises + ..() + +// Used in auto linking +/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T) + var/pos_z = get_z(src) + var/tpos_z = get_z(T) + if((pos_z == tpos_z) || (src.long_range_link && T.long_range_link)) + for(var/x in autolinkers) + if(T.autolinkers.Find(x)) + if(src != T) + links |= T + +/obj/machinery/telecomms/update_icon() + if(on) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]_off" + +/obj/machinery/telecomms/proc/update_power() + + if(toggled) + if(stat & (BROKEN|NOPOWER|EMPED) || integrity <= 0) // if powered, on. if not powered, off. if too damaged, off + on = 0 + soundloop.stop() // CHOMPAdd: Tcomms noises + noisy = FALSE + else + on = 1 + else + on = 0 + soundloop.stop() // CHOMPAdd: Tcomms noises + noisy = FALSE + if(!noisy) // CHOMPAdd: Tcomms noises + soundloop.start() // CHOMPAdd: Tcomms noises + noisy = TRUE + +/obj/machinery/telecomms/process() + update_power() + + // Check heat and generate some + checkheat() + + // Update the icon + update_icon() + + if(traffic > 0) + traffic -= netspeed + +/obj/machinery/telecomms/emp_act(severity) + if(prob(100/severity)) + if(!(stat & EMPED)) + stat |= EMPED + playsound(src, 'sound/machines/tcomms/tcomms_pulse.ogg', 70, 1, 30) // CHOMPAdd: Tcomms noises + var/duration = (300 * 10)/severity + spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot. + stat &= ~EMPED + ..() + +/obj/machinery/telecomms/proc/checkheat() + // Checks heat from the environment and applies any integrity damage + var/datum/gas_mixture/environment = loc.return_air() + var/damage_chance = 0 // Percent based chance of applying 1 integrity damage this tick + switch(environment.temperature) + if((T0C + 40) to (T0C + 70)) // 40C-70C, minor overheat, 10% chance of taking damage + damage_chance = 10 + if((T0C + 70) to (T0C + 130)) // 70C-130C, major overheat, 25% chance of taking damage + damage_chance = 25 + if((T0C + 130) to (T0C + 200)) // 130C-200C, dangerous overheat, 50% chance of taking damage + damage_chance = 50 + if((T0C + 200) to INFINITY) // More than 200C, INFERNO. Takes damage every tick. + damage_chance = 100 + if (damage_chance && prob(damage_chance)) + integrity = between(0, integrity - 1, 100) + + + if(delay > 0) + delay-- + else if(on) + produce_heat() + delay = initial(delay) + + + +/obj/machinery/telecomms/proc/produce_heat() + if (!produces_heat) + return + + if (!use_power) + return + + if(!(stat & (NOPOWER|BROKEN))) + var/turf/simulated/L = loc + if(istype(L)) + var/datum/gas_mixture/env = L.return_air() + + var/transfer_moles = 0.25 * env.total_moles + + var/datum/gas_mixture/removed = env.remove(transfer_moles) + + if(removed) + + var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source + if (traffic <= 0) + heat_produced *= 0.30 //if idle, produce less heat. + + removed.add_thermal_energy(heat_produced) + + env.merge(removed) +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "broadcast receiver" + desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 600 + machinetype = 1 + produces_heat = 0 + circuit = /obj/item/weapon/circuitboard/telecomms/receiver + //Vars only used if you're using the overmap + var/overmap_range = 0 + var/overmap_range_min = 0 + var/overmap_range_max = 5 + + var/list/linked_radios_weakrefs = list() + +/obj/machinery/telecomms/receiver/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/receiver/proc/link_radio(var/obj/item/device/radio/R) + if(!istype(R)) + return + linked_radios_weakrefs |= WEAKREF(R) + +/obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) + if(!on) // has to be on to receive messages + return + if(!signal) + return + if(!check_receive_level(signal)) + return + + if(signal.transmission_method == TRANSMISSION_SUBSPACE) + + if(is_freq_listening(signal)) // detect subspace signals + + //Remove the level and then start adding levels that it is being broadcasted in. + signal.data["level"] = list() + + var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) // ideally relay the copied information to relays + if(!can_send) + relay_information(signal, /obj/machinery/telecomms/bus) // Send it to a bus instead, if it's linked to one + +/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal) + // If it's a direct message from a bluespace radio, we eat it and convert it into a subspace signal locally + if(signal.transmission_method == TRANSMISSION_BLUESPACE) + var/obj/item/device/radio/R = signal.data["radio"] + + //Who're you? + if(!(WEAKREF(R) in linked_radios_weakrefs)) + signal.data["reject"] = 1 + return 0 + + //We'll resend this for you + signal.data["level"] = z + signal.transmission_method = TRANSMISSION_SUBSPACE + return 1 + + //Where can we hear? + var/list/listening_levels = using_map.get_map_levels(listening_level, TRUE, overmap_range) + + // We couldn't 'hear' it, maybe a relay linked to our hub can 'hear' it + if(!(signal.data["level"] in listening_levels)) + for(var/obj/machinery/telecomms/hub/H in links) + var/list/relayed_levels = list() + for(var/obj/machinery/telecomms/relay/R in H.links) + if(R.can_receive(signal)) + relayed_levels |= R.listening_level + if(signal.data["level"] in relayed_levels) + return 1 + return 0 + return 1 + + +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "hub" + desc = "A mighty piece of hardware used to send/receive massive amounts of data." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 1600 + machinetype = 7 + circuit = /obj/item/weapon/circuitboard/telecomms/hub + long_range_link = 1 + netspeed = 40 + +/obj/machinery/telecomms/hub/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) + if(is_freq_listening(signal)) + if(istype(machine_from, /obj/machinery/telecomms/receiver)) + //If the signal is compressed, send it to the bus. + relay_information(signal, /obj/machinery/telecomms/bus, 1) // ideally relay the copied information to bus units + else + // Get a list of relays that we're linked to, then send the signal to their levels. + relay_information(signal, /obj/machinery/telecomms/relay, 1) + relay_information(signal, /obj/machinery/telecomms/broadcaster, 1) // Send it to a broadcaster. + + +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "relay" + desc = "A mighty piece of hardware used to send massive amounts of data far away." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 600 + machinetype = 8 + produces_heat = 0 + circuit = /obj/item/weapon/circuitboard/telecomms/relay + netspeed = 5 + long_range_link = 1 + var/broadcasting = 1 + var/receiving = 1 + +/obj/machinery/telecomms/relay/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/relay/forceMove(var/newloc) + . = ..(newloc) + listening_level = z + +/obj/machinery/telecomms/relay/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) + + // Add our level and send it back + if(can_send(signal)) + signal.data["level"] |= using_map.get_map_levels(listening_level) + +// Checks to see if it can send/receive. + +/obj/machinery/telecomms/relay/proc/can(datum/signal/signal) + if(!on) + return 0 + if(!is_freq_listening(signal)) + return 0 + return 1 + +/obj/machinery/telecomms/relay/proc/can_send(datum/signal/signal) + if(!can(signal)) + return 0 + return broadcasting + +/obj/machinery/telecomms/relay/proc/can_receive(datum/signal/signal) + if(!can(signal)) + return 0 + return receiving + +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "bus" + desc = "A mighty piece of hardware used to send massive amounts of data quickly." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 1000 + machinetype = 2 + circuit = /obj/item/weapon/circuitboard/telecomms/bus + netspeed = 40 + var/change_frequency = 0 + +/obj/machinery/telecomms/bus/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) + + if(is_freq_listening(signal)) + + if(change_frequency) + 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 + var/send_to_processor = relay_information(signal, /obj/machinery/telecomms/processor) + + if(send_to_processor) + return + // failed to send to a processor, relay information anyway + signal.data["slow"] += rand(1, 5) // slow the signal down only slightly + src.receive_information(signal, src) + + // Try sending it! + var/list/try_send = list(/obj/machinery/telecomms/server, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus) + var/i = 0 + for(var/send in try_send) + if(i) + signal.data["slow"] += rand(0, 1) // slow the signal down only slightly + i++ + var/can_send = relay_information(signal, send) + if(can_send) + break + + + +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "processor" + desc = "This machine is used to process large quantities of information." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 600 + machinetype = 3 + delay = 5 + circuit = /obj/item/weapon/circuitboard/telecomms/processor + var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals + +/obj/machinery/telecomms/processor/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) + + if(is_freq_listening(signal)) + + if(process_mode) + signal.data["compression"] = 0 // uncompress subspace signal + else + signal.data["compression"] = 100 // even more compressed 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, /obj/machinery/telecomms/server) + + +/* + 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 = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon + icon_state = "comm_server" + desc = "A machine used to store data and network statistics." + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 300 + machinetype = 4 + circuit = /obj/item/weapon/circuitboard/telecomms/server + var/list/log_entries = list() + var/list/stored_names = list() + var/list/TrafficActions = list() + var/logs = 0 // number of logs + var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) + + var/list/memory = list() // stored memory + var/rawcode = "" // the code to compile (raw text) + var/datum/TCS_Compiler/Compiler // the compiler that compiles and runs the code + var/autoruncode = 0 // 1 if the code is set to run every time a signal is picked up + + var/encryption = "null" // encryption key: ie "password" + var/salt = "null" // encryption salt: ie "123comsat" + // would add up to md5("password123comsat") + var/obj/item/device/radio/headset/server_radio = null + +/obj/machinery/telecomms/server/New() + ..() + Compiler = new() + Compiler.Holder = src + server_radio = new() + +/obj/machinery/telecomms/server/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) + + if(signal.data["message"]) + + if(is_freq_listening(signal)) + + if(traffic > 0) + totaltraffic += traffic // add current traffic to total traffic + + //Is this a test signal? Bypass logging + if(signal.data["type"] != SIGNAL_TEST) + + // If signal has a message and appropriate frequency + + update_logs() + + var/datum/comm_log_entry/log = new + var/mob/M = signal.data["mob"] + + // Copy the signal.data entries we want + log.parameters["mobtype"] = signal.data["mobtype"] + log.parameters["job"] = signal.data["job"] + log.parameters["key"] = signal.data["key"] + log.parameters["vmessage"] = multilingual_to_message(signal.data["message"]) + log.parameters["vname"] = signal.data["vname"] + log.parameters["message"] = multilingual_to_message(signal.data["message"]) + log.parameters["name"] = signal.data["name"] + log.parameters["realname"] = signal.data["realname"] + log.parameters["timecode"] = worldtime2stationtime(world.time) + + var/race = "unknown" + if(ishuman(M)) + var/mob/living/carbon/human/H = M + race = "[H.species.name]" + log.parameters["intelligible"] = 1 + else if(isbrain(M)) + race = "Brain" + log.parameters["intelligible"] = 1 + else if(M.isMonkey()) + race = "Monkey" + else if(issilicon(M)) + race = "Artificial Life" + log.parameters["intelligible"] = 1 + else if(isslime(M)) + race = "Slime" + else if(isanimal(M)) + race = "Domestic Animal" + + log.parameters["race"] = race + + if(!istype(M, /mob/new_player) && M) + log.parameters["uspeech"] = M.universal_speak + else + log.parameters["uspeech"] = 0 + + // If the signal is still compressed, make the log entry gibberish + if(signal.data["compression"] > 0) + log.parameters["message"] = Gibberish(multilingual_to_message(signal.data["message"]), signal.data["compression"] + 50) + log.parameters["job"] = Gibberish(signal.data["job"], signal.data["compression"] + 50) + log.parameters["name"] = Gibberish(signal.data["name"], signal.data["compression"] + 50) + log.parameters["realname"] = Gibberish(signal.data["realname"], signal.data["compression"] + 50) + log.parameters["vname"] = Gibberish(signal.data["vname"], signal.data["compression"] + 50) + log.input_type = "Corrupt File" + + // Log and store everything that needs to be logged + log_entries.Add(log) + if(!(signal.data["name"] in stored_names)) + stored_names.Add(signal.data["name"]) + logs++ + signal.data["server"] = src + + // Give the log a name + var/identifier = num2text( rand(-1000,1000) + world.time ) + log.name = "data packet ([md5(identifier)])" + + if(Compiler && autoruncode) + Compiler.Run(signal) // execute the code + + var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) + if(!can_send) + relay_information(signal, /obj/machinery/telecomms/broadcaster) + + +/obj/machinery/telecomms/server/proc/setcode(var/t) + if(t) + if(istext(t)) + rawcode = t + +/obj/machinery/telecomms/server/proc/compile() + if(Compiler) + return Compiler.Compile(rawcode) + +/obj/machinery/telecomms/server/proc/update_logs() + // start deleting the very first log entry + if(logs >= 400) + for(var/i = 1, i <= logs, i++) // locate the first garbage collectable log entry and remove it + var/datum/comm_log_entry/L = log_entries[i] + if(L.garbage_collector) + log_entries.Remove(L) + logs-- + break + +/obj/machinery/telecomms/server/proc/add_entry(var/content, var/input) + var/datum/comm_log_entry/log = new + var/identifier = num2text( rand(-1000,1000) + world.time ) + log.name = "[input] ([md5(identifier)])" + log.input_type = input + log.parameters["message"] = content + log.parameters["timecode"] = stationtime2text() + log_entries.Add(log) + update_logs() + + + + +// Simple log entry datum + +/datum/comm_log_entry + var/parameters = list() // carbon-copy to signal.data[] + var/name = "data packet (#)" + var/garbage_collector = 1 // if set to 0, will not be garbage collected + var/input_type = "Speech File" + +//Generic telecomm connectivity test proc +/proc/can_telecomm(var/atom/A, var/atom/B, var/ad_hoc = FALSE) + if(!A || !B) + log_debug("can_telecomm(): Undefined endpoints!") + return FALSE + + //Can't in this case, obviously! + if(is_jammed(A) || is_jammed(B)) + return FALSE + + //Items don't have a Z when inside an object or mob + var/turf/src_z = get_z(A) + var/turf/dst_z = get_z(B) + + //Nullspace, probably. + if(!src_z || !dst_z) + return FALSE + + //We can do the simple check first, if you have ad_hoc radios. + if(ad_hoc && src_z == dst_z) + return TRUE + + return src_z in using_map.get_map_levels(dst_z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index cf9ab2096d..c9a2678af8 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -1,129 +1,129 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - - -/* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. -*/ - -/obj/machinery/computer/telecomms/monitor - name = "Telecommunications Monitor" - desc = "Used to traverse a telecommunication network. Helpful for debugging connection issues." - icon_screen = "comm_monitor" - - var/screen = 0 // the screen number: - var/list/machinelist = list() // the machines located by the computer - var/obj/machinery/telecomms/SelectedMachine - circuit = /obj/item/weapon/circuitboard/comm_monitor - - var/network = "NULL" // the network to probe - - var/list/temp = null // temporary feedback messages - -/obj/machinery/computer/telecomms/monitor/tgui_data(mob/user) - var/list/data = list() - - data["network"] = network - data["temp"] = temp - - var/list/machinelistData = list() - for(var/obj/machinery/telecomms/T in machinelist) - machinelistData.Add(list(list( - "id" = T.id, - "name" = T.name, - ))) - data["machinelist"] = machinelistData - - data["selectedMachine"] = null - if(SelectedMachine) - data["selectedMachine"] = list( - "id" = SelectedMachine.id, - "name" = SelectedMachine.name, - ) - var/list/links = list() - for(var/obj/machinery/telecomms/T in SelectedMachine.links) - if(!T.hide) - links.Add(list(list( - "id" = T.id, - "name" = T.name - ))) - data["selectedMachine"]["links"] = links - return data - -/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/computer/telecomms/monitor/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TelecommsMachineBrowser", name) - ui.open() - -/obj/machinery/computer/telecomms/monitor/tgui_act(action, params) - if(..()) - return TRUE - - add_fingerprint(usr) - - switch(action) - if("view") - for(var/obj/machinery/telecomms/T in machinelist) - if(T.id == params["id"]) - SelectedMachine = T - break - . = TRUE - - if("mainmenu") - SelectedMachine = null - . = TRUE - - if("release") - machinelist = list() - SelectedMachine = null - . = TRUE - - if("scan") - if(machinelist.len > 0) - set_temp("FAILED: CANNOT PROBE WHEN BUFFER FULL", "bad") - return TRUE - - for(var/obj/machinery/telecomms/T in range(25, src)) - if(T.network == network) - machinelist.Add(T) - - if(!machinelist.len) - set_temp("FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\]", "bad") - else - set_temp("[machinelist.len] ENTITIES LOCATED & BUFFERED", "good") - . = TRUE - - if("network") - var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) - newnet = sanitize(newnet,15) //Honestly, I'd be amazed if someone managed to do HTML in 15 chars. - if(newnet && ((usr in range(1, src) || issilicon(usr)))) - if(length(newnet) > 15) - set_temp("FAILED: NETWORK TAG STRING TOO LENGTHY", "bad") - return TRUE - network = newnet - machinelist = list() - set_temp("NEW NETWORK TAG SET IN ADDRESS \[[network]\]", "good") - - . = TRUE - - if("cleartemp") - temp = null - . = TRUE - - -/obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - to_chat(user, "You you disable the security protocols") - src.updateUsrDialog() - return 1 - -/obj/machinery/computer/telecomms/monitor/proc/set_temp(var/text, var/color = "average") +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + + +/* + Telecomms monitor tracks the overall trafficing of a telecommunications network + and displays a heirarchy of linked machines. +*/ + +/obj/machinery/computer/telecomms/monitor + name = "Telecommunications Monitor" + desc = "Used to traverse a telecommunication network. Helpful for debugging connection issues." + icon_screen = "comm_monitor" + + var/screen = 0 // the screen number: + var/list/machinelist = list() // the machines located by the computer + var/obj/machinery/telecomms/SelectedMachine + circuit = /obj/item/weapon/circuitboard/comm_monitor + + var/network = "NULL" // the network to probe + + var/list/temp = null // temporary feedback messages + +/obj/machinery/computer/telecomms/monitor/tgui_data(mob/user) + var/list/data = list() + + data["network"] = network + data["temp"] = temp + + var/list/machinelistData = list() + for(var/obj/machinery/telecomms/T in machinelist) + machinelistData.Add(list(list( + "id" = T.id, + "name" = T.name, + ))) + data["machinelist"] = machinelistData + + data["selectedMachine"] = null + if(SelectedMachine) + data["selectedMachine"] = list( + "id" = SelectedMachine.id, + "name" = SelectedMachine.name, + ) + var/list/links = list() + for(var/obj/machinery/telecomms/T in SelectedMachine.links) + if(!T.hide) + links.Add(list(list( + "id" = T.id, + "name" = T.name + ))) + data["selectedMachine"]["links"] = links + return data + +/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/computer/telecomms/monitor/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TelecommsMachineBrowser", name) + ui.open() + +/obj/machinery/computer/telecomms/monitor/tgui_act(action, params) + if(..()) + return TRUE + + add_fingerprint(usr) + + switch(action) + if("view") + for(var/obj/machinery/telecomms/T in machinelist) + if(T.id == params["id"]) + SelectedMachine = T + break + . = TRUE + + if("mainmenu") + SelectedMachine = null + . = TRUE + + if("release") + machinelist = list() + SelectedMachine = null + . = TRUE + + if("scan") + if(machinelist.len > 0) + set_temp("FAILED: CANNOT PROBE WHEN BUFFER FULL", "bad") + return TRUE + + for(var/obj/machinery/telecomms/T in range(25, src)) + if(T.network == network) + machinelist.Add(T) + + if(!machinelist.len) + set_temp("FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\]", "bad") + else + set_temp("[machinelist.len] ENTITIES LOCATED & BUFFERED", "good") + . = TRUE + + if("network") + var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) + newnet = sanitize(newnet,15) //Honestly, I'd be amazed if someone managed to do HTML in 15 chars. + if(newnet && ((usr in range(1, src) || issilicon(usr)))) + if(length(newnet) > 15) + set_temp("FAILED: NETWORK TAG STRING TOO LENGTHY", "bad") + return TRUE + network = newnet + machinelist = list() + set_temp("NEW NETWORK TAG SET IN ADDRESS \[[network]\]", "good") + + . = TRUE + + if("cleartemp") + temp = null + . = TRUE + + +/obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 + to_chat(user, "You you disable the security protocols") + src.updateUsrDialog() + return 1 + +/obj/machinery/computer/telecomms/monitor/proc/set_temp(var/text, var/color = "average") temp = list("color" = color, "text" = text) \ No newline at end of file diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index 17dbed4e2c..9f14a30084 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -1,218 +1,218 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - - - - - -/obj/machinery/computer/telecomms/traffic - name = "Telecommunications Traffic Control" - desc = "Used to upload code to telecommunication consoles for execution." - icon_screen = "generic" - - var/screen = 0 // the screen number: - var/list/servers = list() // the servers located by the computer - var/mob/editingcode - var/mob/lasteditor - var/list/viewingcode = list() - var/obj/machinery/telecomms/server/SelectedServer - circuit = /obj/item/weapon/circuitboard/comm_traffic - req_access = list(access_tcomsat) - - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages - - var/storedcode = "" // code stored - - -/obj/machinery/computer/telecomms/traffic/proc/update_ide() - - // loop if there's someone manning the keyboard - while(editingcode) - if(!editingcode.client) - editingcode = null - break - - // For the typer, the input is enabled. Buffer the typed text - if(editingcode) - storedcode = "[winget(editingcode, "tcscode", "text")]" - if(editingcode) // double if's to work around a runtime error - winset(editingcode, "tcscode", "is-disabled=false") - - // If the player's not manning the keyboard anymore, adjust everything - if( (!(editingcode in range(1, src)) && !issilicon(editingcode)) || (editingcode.machine != src && !issilicon(editingcode))) - if(editingcode) - winshow(editingcode, "Telecomms IDE", 0) // hide the window! - editingcode = null - break - - // For other people viewing the typer type code, the input is disabled and they can only view the code - // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) - - if(length(viewingcode)) - // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") - - for(var/mob/M in viewingcode) - - if( (M.machine == src && (M in view(1, src)) ) || issilicon(M)) - winset(M, "tcscode", "is-disabled=true") - winset(M, "tcscode", "text=\"[showcode]\"") - else - viewingcode.Remove(M) - winshow(M, "Telecomms IDE", 0) // hide the window! - - sleep(5) - - if(length(viewingcode) > 0) - editingcode = pick(viewingcode) - viewingcode.Remove(editingcode) - update_ide() - - - - -/obj/machinery/computer/telecomms/traffic/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - user.set_machine(src) - var/dat = "Telecommunication Traffic Control
                    Telecommunications Traffic Control
                    " - - 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]

                    " - dat += "
                    \[Edit Code\]" - dat += "
                    Signal Execution: " - if(SelectedServer.autoruncode) - dat += "ALWAYS" - else - dat += "NEVER" - - - user << browse(dat, "window=traffic_control;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - if(!src.allowed(usr) && !emagged) - to_chat(usr, "ACCESS DENIED.") - return - - 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 range(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("editcode") - if(editingcode == usr) return - if(usr in viewingcode) return - - if(!editingcode) - lasteditor = usr - editingcode = usr - winshow(editingcode, "Telecomms IDE", 1) // show the IDE - winset(editingcode, "tcscode", "is-disabled=false") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") - winset(editingcode, "tcscode", "text=\"[showcode]\"") - spawn() - update_ide() - - else - viewingcode.Add(usr) - winshow(usr, "Telecomms IDE", 1) // show the IDE - winset(usr, "tcscode", "is-disabled=true") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\"", "\\\"") - winset(usr, "tcscode", "text=\"[showcode]\"") - - if("togglerun") - SelectedServer.autoruncode = !(SelectedServer.autoruncode) - - if(href_list["network"]) - - var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) - newnet = sanitize(newnet,15) - - 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/traffic/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - to_chat(user, "You you disable the security protocols") - src.updateUsrDialog() +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + + + + + +/obj/machinery/computer/telecomms/traffic + name = "Telecommunications Traffic Control" + desc = "Used to upload code to telecommunication consoles for execution." + icon_screen = "generic" + + var/screen = 0 // the screen number: + var/list/servers = list() // the servers located by the computer + var/mob/editingcode + var/mob/lasteditor + var/list/viewingcode = list() + var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_traffic + req_access = list(access_tcomsat) + + var/network = "NULL" // the network to probe + var/temp = "" // temporary feedback messages + + var/storedcode = "" // code stored + + +/obj/machinery/computer/telecomms/traffic/proc/update_ide() + + // loop if there's someone manning the keyboard + while(editingcode) + if(!editingcode.client) + editingcode = null + break + + // For the typer, the input is enabled. Buffer the typed text + if(editingcode) + storedcode = "[winget(editingcode, "tcscode", "text")]" + if(editingcode) // double if's to work around a runtime error + winset(editingcode, "tcscode", "is-disabled=false") + + // If the player's not manning the keyboard anymore, adjust everything + if( (!(editingcode in range(1, src)) && !issilicon(editingcode)) || (editingcode.machine != src && !issilicon(editingcode))) + if(editingcode) + winshow(editingcode, "Telecomms IDE", 0) // hide the window! + editingcode = null + break + + // For other people viewing the typer type code, the input is disabled and they can only view the code + // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) + + if(length(viewingcode)) + // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + + for(var/mob/M in viewingcode) + + if( (M.machine == src && (M in view(1, src)) ) || issilicon(M)) + winset(M, "tcscode", "is-disabled=true") + winset(M, "tcscode", "text=\"[showcode]\"") + else + viewingcode.Remove(M) + winshow(M, "Telecomms IDE", 0) // hide the window! + + sleep(5) + + if(length(viewingcode) > 0) + editingcode = pick(viewingcode) + viewingcode.Remove(editingcode) + update_ide() + + + + +/obj/machinery/computer/telecomms/traffic/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + user.set_machine(src) + var/dat = "Telecommunication Traffic Control
                    Telecommunications Traffic Control
                    " + + 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]

                    " + dat += "
                    \[Edit Code\]" + dat += "
                    Signal Execution: " + if(SelectedServer.autoruncode) + dat += "ALWAYS" + else + dat += "NEVER" + + + user << browse(dat, "window=traffic_control;size=575x400") + onclose(user, "server_control") + + temp = "" + return + + +/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) + if(..()) + return + + + add_fingerprint(usr) + usr.set_machine(src) + if(!src.allowed(usr) && !emagged) + to_chat(usr, "ACCESS DENIED.") + return + + 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 range(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("editcode") + if(editingcode == usr) return + if(usr in viewingcode) return + + if(!editingcode) + lasteditor = usr + editingcode = usr + winshow(editingcode, "Telecomms IDE", 1) // show the IDE + winset(editingcode, "tcscode", "is-disabled=false") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + winset(editingcode, "tcscode", "text=\"[showcode]\"") + spawn() + update_ide() + + else + viewingcode.Add(usr) + winshow(usr, "Telecomms IDE", 1) // show the IDE + winset(usr, "tcscode", "is-disabled=true") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\"", "\\\"") + winset(usr, "tcscode", "text=\"[showcode]\"") + + if("togglerun") + SelectedServer.autoruncode = !(SelectedServer.autoruncode) + + if(href_list["network"]) + + var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) + newnet = sanitize(newnet,15) + + 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/traffic/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 + to_chat(user, "You you disable the security protocols") + src.updateUsrDialog() return 1 \ No newline at end of file diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 43bc97c20a..8a09b6f048 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -1,56 +1,56 @@ -/obj/machinery/transformer - name = "Automatic Robotic Factory 5000" - desc = "A large metalic machine with an entrance and an exit. A sign on the side reads, 'human go in, robot come out', human must be lying down and alive." - icon = 'icons/obj/recycling.dmi' - icon_state = "separator-AO1" - layer = MOB_LAYER+1 // Overhead - anchored = TRUE - density = TRUE - var/transform_dead = 0 - var/transform_standing = 0 - -/obj/machinery/transformer/New() - // On us - ..() - new /obj/machinery/conveyor(loc, WEST, 1) - -/obj/machinery/transformer/Bumped(var/atom/movable/AM) - // HasEntered 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.lying) && move_dir == EAST)// || move_dir == WEST) - AM.loc = src.loc - transform(AM) - -/obj/machinery/transformer/proc/transform(var/mob/living/carbon/human/H) - if(stat & (BROKEN|NOPOWER)) - return - if(!transform_dead && H.stat == DEAD) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0) - return - playsound(src, 'sound/items/Welder.ogg', 50, 1) - use_power(5000) // Use a lot of power. - var/mob/living/silicon/robot = H.Robotize() - robot.SetLockDown() - spawn(50) // So he can't jump out the gate right away. - playsound(src, 'sound/machines/ping.ogg', 50, 0) - if(robot) - robot.SetLockDown(0) - -/obj/machinery/transformer/conveyor/New() - ..() - var/turf/T = loc - if(T) - // Spawn Conveyour Belts - - //East - var/turf/east = locate(T.x + 1, T.y, T.z) - if(istype(east, /turf/simulated/floor)) - new /obj/machinery/conveyor(east, WEST, 1) - - // West - var/turf/west = locate(T.x - 1, T.y, T.z) - if(istype(west, /turf/simulated/floor)) +/obj/machinery/transformer + name = "Automatic Robotic Factory 5000" + desc = "A large metalic machine with an entrance and an exit. A sign on the side reads, 'human go in, robot come out', human must be lying down and alive." + icon = 'icons/obj/recycling.dmi' + icon_state = "separator-AO1" + layer = MOB_LAYER+1 // Overhead + anchored = TRUE + density = TRUE + var/transform_dead = 0 + var/transform_standing = 0 + +/obj/machinery/transformer/New() + // On us + ..() + new /obj/machinery/conveyor(loc, WEST, 1) + +/obj/machinery/transformer/Bumped(var/atom/movable/AM) + // HasEntered 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.lying) && move_dir == EAST)// || move_dir == WEST) + AM.loc = src.loc + transform(AM) + +/obj/machinery/transformer/proc/transform(var/mob/living/carbon/human/H) + if(stat & (BROKEN|NOPOWER)) + return + if(!transform_dead && H.stat == DEAD) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0) + return + playsound(src, 'sound/items/Welder.ogg', 50, 1) + use_power(5000) // Use a lot of power. + var/mob/living/silicon/robot = H.Robotize() + robot.SetLockDown() + spawn(50) // So he can't jump out the gate right away. + playsound(src, 'sound/machines/ping.ogg', 50, 0) + if(robot) + robot.SetLockDown(0) + +/obj/machinery/transformer/conveyor/New() + ..() + var/turf/T = loc + if(T) + // Spawn Conveyour Belts + + //East + var/turf/east = locate(T.x + 1, T.y, T.z) + if(istype(east, /turf/simulated/floor)) + new /obj/machinery/conveyor(east, WEST, 1) + + // West + var/turf/west = locate(T.x - 1, T.y, T.z) + if(istype(west, /turf/simulated/floor)) new /obj/machinery/conveyor(west, WEST, 1) \ No newline at end of file diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index 696b46af78..eb3f4d428d 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -1,150 +1,150 @@ -/obj/item/frame - name = "frame parts" - desc = "Used for building frames." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "frame_bitem" - var/build_machine_type - var/build_wall_only = FALSE - var/refund_amt = 5 - var/refund_type = /obj/item/stack/material/steel - var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) - var/list/frame_types_floor - var/list/frame_types_wall - -/obj/item/frame/proc/update_type_list() - if(!frame_types_floor) - frame_types_floor = construction_frame_floor - if(!frame_types_wall) - frame_types_wall = construction_frame_wall - -/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - new refund_type(get_turf(src.loc), refund_amt) - qdel(src) - return - ..() - -/obj/item/frame/attack_self(mob/user as mob) - ..() - update_type_list() - var/datum/frame/frame_types/frame_type - if(!build_machine_type && !build_wall_only) - var/datum/frame/frame_types/response = tgui_input_list(user, "What kind of frame would you like to make?", "Frame type request", frame_types_floor) - if(!response) - return - frame_type = response - - build_machine_type = /obj/structure/frame - - if(frame_type.frame_size != 5) - new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size)) - - var/ndir - ndir = user.dir - if(!(ndir in cardinal)) - return - - var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type) - M.fingerprints = fingerprints - M.fingerprintshidden = fingerprintshidden - M.fingerprintslast = fingerprintslast - if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans - user.drop_item() - qdel(src) - -/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) - update_type_list() - - if(get_dist(on_wall, user)>1) - return - - var/ndir - if(reverse) - ndir = get_dir(user, on_wall) - else - ndir = get_dir(on_wall, user) - - if(!(ndir in cardinal)) - return - - var/turf/loc = get_turf(user) - var/area/A = loc.loc - if(!istype(loc, /turf/simulated/floor)) - to_chat(user, "\The frame cannot be placed on this spot.") - return - - if(A.requires_power == 0 || A.name == "Space") - to_chat(user, "\The [src] Alarm cannot be placed in this area.") - return - - if(gotwallitem(loc, ndir)) - to_chat(user, "There's already an item on this wall!") - return - - var/datum/frame/frame_types/frame_type - if(!build_machine_type) - var/datum/frame/frame_types/response = tgui_input_list(user, "What kind of frame would you like to make?", "Frame type request", frame_types_wall) - if(!response) - return - frame_type = response - - build_machine_type = /obj/structure/frame - - if(frame_type.frame_size != 5) - new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size)) - - var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) - M.fingerprints = fingerprints - M.fingerprintshidden = fingerprintshidden - M.fingerprintslast = fingerprintslast - if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans - user.drop_item() - qdel(src) - -/obj/item/frame/light - name = "light fixture frame" - desc = "Used for building lights." - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-item" - refund_amt = 2 - build_machine_type = /obj/machinery/light_construct - reverse = 1 - -/obj/item/frame/light/small - name = "small light fixture frame" - icon_state = "bulb-construct-item" - refund_amt = 1 - build_machine_type = /obj/machinery/light_construct/small - -/obj/item/frame/extinguisher_cabinet - name = "extinguisher cabinet frame" - desc = "Used for building fire extinguisher cabinets." - icon = 'icons/obj/closet.dmi' - icon_state = "extinguisher_empty" - refund_amt = 4 - build_machine_type = /obj/structure/extinguisher_cabinet - -/obj/item/frame/noticeboard - name = "noticeboard frame" - desc = "Used for building noticeboards." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nboard00" - refund_amt = 4 - refund_type = /obj/item/stack/material/wood - build_machine_type = /obj/structure/noticeboard - -/obj/item/frame/mirror - name = "mirror frame" - desc = "Used for building mirrors." - icon = 'icons/obj/watercloset.dmi' - icon_state = "mirror_frame" - refund_amt = 1 - build_machine_type = /obj/structure/mirror - -/obj/item/frame/fireaxe_cabinet - name = "fire axe cabinet frame" - desc = "Used for building fire axe cabinets." - icon = 'icons/obj/closet.dmi' - icon_state = "fireaxe0101" - refund_amt = 4 - build_machine_type = /obj/structure/fireaxecabinet +/obj/item/frame + name = "frame parts" + desc = "Used for building frames." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "frame_bitem" + var/build_machine_type + var/build_wall_only = FALSE + var/refund_amt = 5 + var/refund_type = /obj/item/stack/material/steel + var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) + var/list/frame_types_floor + var/list/frame_types_wall + +/obj/item/frame/proc/update_type_list() + if(!frame_types_floor) + frame_types_floor = construction_frame_floor + if(!frame_types_wall) + frame_types_wall = construction_frame_wall + +/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + new refund_type(get_turf(src.loc), refund_amt) + qdel(src) + return + ..() + +/obj/item/frame/attack_self(mob/user as mob) + ..() + update_type_list() + var/datum/frame/frame_types/frame_type + if(!build_machine_type && !build_wall_only) + var/datum/frame/frame_types/response = tgui_input_list(user, "What kind of frame would you like to make?", "Frame type request", frame_types_floor) + if(!response) + return + frame_type = response + + build_machine_type = /obj/structure/frame + + if(frame_type.frame_size != 5) + new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size)) + + var/ndir + ndir = user.dir + if(!(ndir in cardinal)) + return + + var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type) + M.fingerprints = fingerprints + M.fingerprintshidden = fingerprintshidden + M.fingerprintslast = fingerprintslast + if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans + user.drop_item() + qdel(src) + +/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) + update_type_list() + + if(get_dist(on_wall, user)>1) + return + + var/ndir + if(reverse) + ndir = get_dir(user, on_wall) + else + ndir = get_dir(on_wall, user) + + if(!(ndir in cardinal)) + return + + var/turf/loc = get_turf(user) + var/area/A = loc.loc + if(!istype(loc, /turf/simulated/floor)) + to_chat(user, "\The frame cannot be placed on this spot.") + return + + if(A.requires_power == 0 || A.name == "Space") + to_chat(user, "\The [src] Alarm cannot be placed in this area.") + return + + if(gotwallitem(loc, ndir)) + to_chat(user, "There's already an item on this wall!") + return + + var/datum/frame/frame_types/frame_type + if(!build_machine_type) + var/datum/frame/frame_types/response = tgui_input_list(user, "What kind of frame would you like to make?", "Frame type request", frame_types_wall) + if(!response) + return + frame_type = response + + build_machine_type = /obj/structure/frame + + if(frame_type.frame_size != 5) + new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size)) + + var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) + M.fingerprints = fingerprints + M.fingerprintshidden = fingerprintshidden + M.fingerprintslast = fingerprintslast + if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans + user.drop_item() + qdel(src) + +/obj/item/frame/light + name = "light fixture frame" + desc = "Used for building lights." + icon = 'icons/obj/lighting.dmi' + icon_state = "tube-construct-item" + refund_amt = 2 + build_machine_type = /obj/machinery/light_construct + reverse = 1 + +/obj/item/frame/light/small + name = "small light fixture frame" + icon_state = "bulb-construct-item" + refund_amt = 1 + build_machine_type = /obj/machinery/light_construct/small + +/obj/item/frame/extinguisher_cabinet + name = "extinguisher cabinet frame" + desc = "Used for building fire extinguisher cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "extinguisher_empty" + refund_amt = 4 + build_machine_type = /obj/structure/extinguisher_cabinet + +/obj/item/frame/noticeboard + name = "noticeboard frame" + desc = "Used for building noticeboards." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nboard00" + refund_amt = 4 + refund_type = /obj/item/stack/material/wood + build_machine_type = /obj/structure/noticeboard + +/obj/item/frame/mirror + name = "mirror frame" + desc = "Used for building mirrors." + icon = 'icons/obj/watercloset.dmi' + icon_state = "mirror_frame" + refund_amt = 1 + build_machine_type = /obj/structure/mirror + +/obj/item/frame/fireaxe_cabinet + name = "fire axe cabinet frame" + desc = "Used for building fire axe cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "fireaxe0101" + refund_amt = 4 + build_machine_type = /obj/structure/fireaxecabinet diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index e3c6a90976..ca1546190a 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -1,185 +1,185 @@ -/obj/machinery/washing_machine - name = "Washing Machine" - desc = "Not a hiding place. Unfit for pets." - icon = 'icons/obj/machines/washing_machine_vr.dmi' //VOREStation Edit - icon_state = "wm_1" //VOREStation Edit - density = TRUE - anchored = TRUE - clicksound = "button" - clickvol = 40 - - circuit = /obj/item/weapon/circuitboard/washing - var/state = 1 - //1 = empty, open door - //2 = empty, closed door - //3 = full, open door - //4 = full, closed door - //5 = running - //6 = blood, open door - //7 = blood, closed door - //8 = blood, running - var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. - //0 = not hacked - //1 = hacked - var/gibs_ready = 0 - var/obj/crayon - var/list/washing = list() - var/list/disallowed_types = list( - /obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space - ) - -/obj/machinery/washing_machine/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/washing_machine/AltClick() - start() - -/obj/machinery/washing_machine/verb/start_washing() - set name = "Start Washing" - set category = "Object" - set src in oview(1) - start() - -/obj/machinery/washing_machine/proc/start() - - if(!istype(usr, /mob/living)) //ew ew ew usr, but it's the only way to check. - return - - if(state != 4) - to_chat(usr, "The washing machine cannot run in this state.") - return - - if(locate(/mob,washing)) - state = 8 - else - state = 5 - update_icon() - to_chat(usr, "The washing machine starts a cycle.") - playsound(src, 'sound/items/washingmachine.ogg', 50, 1, 1) - sleep(200) - for(var/atom/A in washing) - A.clean_blood() - - for(var/obj/item/I in washing) - I.decontaminate() - - //Tanning! - for(var/obj/item/stack/hairlesshide/HH in washing) - var/obj/item/stack/wetleather/WL = new(src, HH.get_amount()) - washing -= HH - HH.forceMove(get_turf(src)) - HH.use(HH.get_amount()) - - washing += WL - - if(locate(/mob,washing)) - state = 7 - gibs_ready = 1 - else - state = 4 - update_icon() - -/obj/machinery/washing_machine/verb/climb_out() - set name = "Climb out" - set category = "Object" - set src in usr.loc - - sleep(20) - if(state in list(1,3,6)) - usr.loc = src.loc - -/obj/machinery/washing_machine/update_icon() - //VOREStation Edit - cut_overlays() - icon_state = "wm_[state]" - if(panel_open) - add_overlay("panel") - //VOREStation Edit End - -/obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(state == 2 && washing.len < 1) - if(default_deconstruction_screwdriver(user, W)) - return - if(default_deconstruction_crowbar(user, W)) - return - if(default_unfasten_wrench(user, W, 40)) - return - /*if(W.has_tool_quality(TOOL_SCREWDRIVER)) - panel = !panel - to_chat(user, "You [panel ? "open" : "close"] the [src]'s maintenance panel")*/ - if(istype(W,/obj/item/weapon/pen/crayon) || istype(W,/obj/item/weapon/stamp)) - if(state in list( 1, 3, 6)) - if(!crayon) - user.drop_item() - crayon = W - crayon.loc = src - else - ..() - else - ..() - else if(istype(W,/obj/item/weapon/grab)) - if((state == 1) && hacked) - var/obj/item/weapon/grab/G = W - if(ishuman(G.assailant) && iscorgi(G.affecting)) - G.affecting.loc = src - qdel(G) - state = 3 - else - ..() - - else if(is_type_in_list(W, disallowed_types)) - to_chat(user, "You can't fit \the [W] inside.") - return - - else if(istype(W, /obj/item/clothing) || istype(W, /obj/item/weapon/bedsheet) || istype(W, /obj/item/stack/hairlesshide)) - if(washing.len < 5) - if(state in list(1, 3)) - user.drop_item() - W.loc = src - washing += W - state = 3 - else - to_chat(user, "You can't put the item in right now.") - else - to_chat(user, "The washing machine is full.") - else - ..() - update_icon() - -/obj/machinery/washing_machine/attack_hand(mob/user as mob) - switch(state) - if(1) - state = 2 - if(2) - state = 1 - for(var/atom/movable/O in washing) - O.loc = src.loc - washing.Cut() - if(3) - state = 4 - if(4) - state = 3 - for(var/atom/movable/O in washing) - O.loc = src.loc - crayon = null - washing.Cut() - state = 1 - if(5) - to_chat(user, "The [src] is busy.") - if(6) - state = 7 - if(7) - if(gibs_ready) - gibs_ready = 0 - if(locate(/mob,washing)) - var/mob/M = locate(/mob,washing) - M.gib() - for(var/atom/movable/O in washing) - O.loc = src.loc - crayon = null - state = 1 - washing.Cut() - - update_icon() +/obj/machinery/washing_machine + name = "Washing Machine" + desc = "Not a hiding place. Unfit for pets." + icon = 'icons/obj/machines/washing_machine_vr.dmi' //VOREStation Edit + icon_state = "wm_1" //VOREStation Edit + density = TRUE + anchored = TRUE + clicksound = "button" + clickvol = 40 + + circuit = /obj/item/weapon/circuitboard/washing + var/state = 1 + //1 = empty, open door + //2 = empty, closed door + //3 = full, open door + //4 = full, closed door + //5 = running + //6 = blood, open door + //7 = blood, closed door + //8 = blood, running + var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. + //0 = not hacked + //1 = hacked + var/gibs_ready = 0 + var/obj/crayon + var/list/washing = list() + var/list/disallowed_types = list( + /obj/item/clothing/suit/space, + /obj/item/clothing/head/helmet/space + ) + +/obj/machinery/washing_machine/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/washing_machine/AltClick() + start() + +/obj/machinery/washing_machine/verb/start_washing() + set name = "Start Washing" + set category = "Object" + set src in oview(1) + start() + +/obj/machinery/washing_machine/proc/start() + + if(!istype(usr, /mob/living)) //ew ew ew usr, but it's the only way to check. + return + + if(state != 4) + to_chat(usr, "The washing machine cannot run in this state.") + return + + if(locate(/mob,washing)) + state = 8 + else + state = 5 + update_icon() + to_chat(usr, "The washing machine starts a cycle.") + playsound(src, 'sound/items/washingmachine.ogg', 50, 1, 1) + sleep(200) + for(var/atom/A in washing) + A.clean_blood() + + for(var/obj/item/I in washing) + I.decontaminate() + + //Tanning! + for(var/obj/item/stack/hairlesshide/HH in washing) + var/obj/item/stack/wetleather/WL = new(src, HH.get_amount()) + washing -= HH + HH.forceMove(get_turf(src)) + HH.use(HH.get_amount()) + + washing += WL + + if(locate(/mob,washing)) + state = 7 + gibs_ready = 1 + else + state = 4 + update_icon() + +/obj/machinery/washing_machine/verb/climb_out() + set name = "Climb out" + set category = "Object" + set src in usr.loc + + sleep(20) + if(state in list(1,3,6)) + usr.loc = src.loc + +/obj/machinery/washing_machine/update_icon() + //VOREStation Edit + cut_overlays() + icon_state = "wm_[state]" + if(panel_open) + add_overlay("panel") + //VOREStation Edit End + +/obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(state == 2 && washing.len < 1) + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(default_unfasten_wrench(user, W, 40)) + return + /*if(W.has_tool_quality(TOOL_SCREWDRIVER)) + panel = !panel + to_chat(user, "You [panel ? "open" : "close"] the [src]'s maintenance panel")*/ + if(istype(W,/obj/item/weapon/pen/crayon) || istype(W,/obj/item/weapon/stamp)) + if(state in list( 1, 3, 6)) + if(!crayon) + user.drop_item() + crayon = W + crayon.loc = src + else + ..() + else + ..() + else if(istype(W,/obj/item/weapon/grab)) + if((state == 1) && hacked) + var/obj/item/weapon/grab/G = W + if(ishuman(G.assailant) && iscorgi(G.affecting)) + G.affecting.loc = src + qdel(G) + state = 3 + else + ..() + + else if(is_type_in_list(W, disallowed_types)) + to_chat(user, "You can't fit \the [W] inside.") + return + + else if(istype(W, /obj/item/clothing) || istype(W, /obj/item/weapon/bedsheet) || istype(W, /obj/item/stack/hairlesshide)) + if(washing.len < 5) + if(state in list(1, 3)) + user.drop_item() + W.loc = src + washing += W + state = 3 + else + to_chat(user, "You can't put the item in right now.") + else + to_chat(user, "The washing machine is full.") + else + ..() + update_icon() + +/obj/machinery/washing_machine/attack_hand(mob/user as mob) + switch(state) + if(1) + state = 2 + if(2) + state = 1 + for(var/atom/movable/O in washing) + O.loc = src.loc + washing.Cut() + if(3) + state = 4 + if(4) + state = 3 + for(var/atom/movable/O in washing) + O.loc = src.loc + crayon = null + washing.Cut() + state = 1 + if(5) + to_chat(user, "The [src] is busy.") + if(6) + state = 7 + if(7) + if(gibs_ready) + gibs_ready = 0 + if(locate(/mob,washing)) + var/mob/M = locate(/mob,washing) + M.gib() + for(var/atom/movable/O in washing) + O.loc = src.loc + crayon = null + state = 1 + washing.Cut() + + update_icon() diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 4ea027f154..44986197dd 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -1,87 +1,87 @@ -/obj/mecha/combat/durand - desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms." - name = "Durand" - icon_state = "durand" - initial_icon = "durand" - step_in = 4 - dir_in = 1 //Facing North. - health = 300 - maxhealth = 300 //Don't forget to update the /old variant if you change this number. - deflect_chance = 20 - max_temperature = 30000 - infra_luminosity = 8 - force = 40 - wreckage = /obj/effect/decal/mecha_wreckage/durand - - damage_minimum = 15 //Big stompy - minimum_penetration = 25 - - max_hull_equip = 2 - max_weapon_equip = 1 - max_utility_equip = 2 - max_universal_equip = 1 - max_special_equip = 1 - - starting_components = list( - /obj/item/mecha_parts/component/hull/durable, - /obj/item/mecha_parts/component/actuator, - /obj/item/mecha_parts/component/armor/military, - /obj/item/mecha_parts/component/gas, - /obj/item/mecha_parts/component/electrical - ) - - defence_mode_possible = 1 - - icon_scale_x = 1.5 - icon_scale_y = 1.5 - -/* -/obj/mecha/combat/durand/New() - ..() - weapons += new /datum/mecha_weapon/ballistic/lmg(src) - weapons += new /datum/mecha_weapon/ballistic/scattershot(src) - selected_weapon = weapons[1] - return -*/ - - - -//This is for the Mech stats / Menu system. To be moved later on. -/obj/mecha/combat/durand/get_commands() - var/output = {"
                    -
                    Special
                    - -
                    - "} - output += ..() - return output - - -//Not needed anymore but left for reference. -/* -/obj/mecha/combat/durand/get_stats_part() - var/output = ..() - output += "Defence mode: [defence?"on":"off"]" - return output -*/ - -/* - -/obj/mecha/combat/durand/Topic(href, href_list) - ..() - if (href_list["toggle_defence_mode"]) - src.defence_mode() - return -*/ - -//Meant for random spawns. -/obj/mecha/combat/durand/old - desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms. This one is particularly worn looking and likely isn't as sturdy." - -/obj/mecha/combat/durand/old/New() - ..() - health = 25 - maxhealth = 250 //Just slightly worse. - cell.charge = rand(0, (cell.charge/2)) +/obj/mecha/combat/durand + desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms." + name = "Durand" + icon_state = "durand" + initial_icon = "durand" + step_in = 4 + dir_in = 1 //Facing North. + health = 300 + maxhealth = 300 //Don't forget to update the /old variant if you change this number. + deflect_chance = 20 + max_temperature = 30000 + infra_luminosity = 8 + force = 40 + wreckage = /obj/effect/decal/mecha_wreckage/durand + + damage_minimum = 15 //Big stompy + minimum_penetration = 25 + + max_hull_equip = 2 + max_weapon_equip = 1 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + + starting_components = list( + /obj/item/mecha_parts/component/hull/durable, + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor/military, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) + + defence_mode_possible = 1 + + icon_scale_x = 1.5 + icon_scale_y = 1.5 + +/* +/obj/mecha/combat/durand/New() + ..() + weapons += new /datum/mecha_weapon/ballistic/lmg(src) + weapons += new /datum/mecha_weapon/ballistic/scattershot(src) + selected_weapon = weapons[1] + return +*/ + + + +//This is for the Mech stats / Menu system. To be moved later on. +/obj/mecha/combat/durand/get_commands() + var/output = {"
                    +
                    Special
                    + +
                    + "} + output += ..() + return output + + +//Not needed anymore but left for reference. +/* +/obj/mecha/combat/durand/get_stats_part() + var/output = ..() + output += "Defence mode: [defence?"on":"off"]" + return output +*/ + +/* + +/obj/mecha/combat/durand/Topic(href, href_list) + ..() + if (href_list["toggle_defence_mode"]) + src.defence_mode() + return +*/ + +//Meant for random spawns. +/obj/mecha/combat/durand/old + desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms. This one is particularly worn looking and likely isn't as sturdy." + +/obj/mecha/combat/durand/old/New() + ..() + health = 25 + maxhealth = 250 //Just slightly worse. + cell.charge = rand(0, (cell.charge/2)) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 8fc089c495..371c45fa4d 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -1,150 +1,150 @@ -/obj/mecha/combat/marauder - desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." - name = "Marauder" - catalogue_data = list(/datum/category_item/catalogue/technology/marauder) - icon_state = "marauder" - initial_icon = "marauder" - step_in = 5 - health = 350 - maxhealth = 350 //Don't forget to update the /old variant if you change this number. - deflect_chance = 25 - max_temperature = 60000 - infra_luminosity = 3 - operation_req_access = list(access_cent_specops) - wreckage = /obj/effect/decal/mecha_wreckage/marauder - add_req_access = 0 - internal_damage_threshold = 25 - force = 45 - max_equip = 4 - mech_faction = MECH_FACTION_NT - - max_hull_equip = 3 - max_weapon_equip = 3 - max_utility_equip = 3 - max_universal_equip = 1 - max_special_equip = 1 - - smoke_possible = 1 - zoom_possible = 1 - thrusters_possible = 1 - - starting_components = list( - /obj/item/mecha_parts/component/hull/durable, - /obj/item/mecha_parts/component/actuator, - /obj/item/mecha_parts/component/armor/military, - /obj/item/mecha_parts/component/gas, - /obj/item/mecha_parts/component/electrical - ) - - starting_equipment = list( - /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, - /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - ) - - icon_scale_x = 1.5 - icon_scale_y = 1.5 - -/obj/mecha/combat/marauder/seraph - desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." - name = "Seraph" - catalogue_data = list(/datum/category_item/catalogue/technology/seraph) - icon_state = "seraph" - initial_icon = "seraph" - operation_req_access = list(access_cent_creed) - step_in = 3 - health = 450 - wreckage = /obj/effect/decal/mecha_wreckage/seraph - internal_damage_threshold = 20 - force = 55 - max_equip = 5 - - starting_equipment = list( - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, - /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, - /obj/item/mecha_parts/mecha_equipment/teleporter - ) - -//Note that is the Mauler -/obj/mecha/combat/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." - name = "Mauler" - icon_state = "mauler" - initial_icon = "mauler" - operation_req_access = list(access_syndicate) - wreckage = /obj/effect/decal/mecha_wreckage/mauler - mech_faction = MECH_FACTION_SYNDI - -//I'll break this down later -/obj/mecha/combat/marauder/relaymove(mob/user,direction) - if(user != src.occupant) //While not "realistic", this piece is player friendly. - user.loc = get_turf(src) - to_chat(user, "You climb out from [src]") - return 0 - if(!can_move) - return 0 - if(zoom) - if(world.time - last_message > 20) - src.occupant_message("Unable to move while in zoom mode.") - last_message = world.time - return 0 - if(connected_port) - if(world.time - last_message > 20) - src.occupant_message("Unable to move while connected to the air system port") - last_message = world.time - return 0 - if(!thrusters && (current_processes & MECHA_PROC_MOVEMENT)) - return 0 - if(state || !has_charge(step_energy_drain)) - return 0 - var/tmp_step_in = step_in - var/tmp_step_energy_drain = step_energy_drain - var/move_result = 0 - if(internal_damage&MECHA_INT_CONTROL_LOST) - move_result = mechsteprand() - else if(src.dir!=direction) - move_result = mechturn(direction) - else - move_result = mechstep(direction) - if(move_result) - if(istype(src.loc, /turf/space)) - if(!src.check_for_support()) - float_direction = direction - start_process(MECHA_PROC_MOVEMENT) - if(thrusters) - tmp_step_energy_drain = step_energy_drain*2 - - can_move = 0 - spawn(tmp_step_in) can_move = 1 - use_power(tmp_step_energy_drain) - return 1 - return 0 - -//To be kill ltr -/obj/mecha/combat/marauder/get_commands() - var/output = {"
                    -
                    Special
                    - -
                    - "} - output += ..() - return output - -//Meant for random spawns. -/obj/mecha/combat/marauder/old - desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations. This one is particularly worn looking and likely isn't as sturdy." - - starting_equipment = null - -/obj/mecha/combat/marauder/old/New() - ..() - health = 25 - maxhealth = 300 //Just slightly worse. - cell.charge = rand(0, (cell.charge/2)) +/obj/mecha/combat/marauder + desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." + name = "Marauder" + catalogue_data = list(/datum/category_item/catalogue/technology/marauder) + icon_state = "marauder" + initial_icon = "marauder" + step_in = 5 + health = 350 + maxhealth = 350 //Don't forget to update the /old variant if you change this number. + deflect_chance = 25 + max_temperature = 60000 + infra_luminosity = 3 + operation_req_access = list(access_cent_specops) + wreckage = /obj/effect/decal/mecha_wreckage/marauder + add_req_access = 0 + internal_damage_threshold = 25 + force = 45 + max_equip = 4 + mech_faction = MECH_FACTION_NT + + max_hull_equip = 3 + max_weapon_equip = 3 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 + + smoke_possible = 1 + zoom_possible = 1 + thrusters_possible = 1 + + starting_components = list( + /obj/item/mecha_parts/component/hull/durable, + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor/military, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) + + starting_equipment = list( + /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, + /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, + /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster + ) + + icon_scale_x = 1.5 + icon_scale_y = 1.5 + +/obj/mecha/combat/marauder/seraph + desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." + name = "Seraph" + catalogue_data = list(/datum/category_item/catalogue/technology/seraph) + icon_state = "seraph" + initial_icon = "seraph" + operation_req_access = list(access_cent_creed) + step_in = 3 + health = 450 + wreckage = /obj/effect/decal/mecha_wreckage/seraph + internal_damage_threshold = 20 + force = 55 + max_equip = 5 + + starting_equipment = list( + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive, + /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, + /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, + /obj/item/mecha_parts/mecha_equipment/teleporter + ) + +//Note that is the Mauler +/obj/mecha/combat/marauder/mauler + desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." + name = "Mauler" + icon_state = "mauler" + initial_icon = "mauler" + operation_req_access = list(access_syndicate) + wreckage = /obj/effect/decal/mecha_wreckage/mauler + mech_faction = MECH_FACTION_SYNDI + +//I'll break this down later +/obj/mecha/combat/marauder/relaymove(mob/user,direction) + if(user != src.occupant) //While not "realistic", this piece is player friendly. + user.loc = get_turf(src) + to_chat(user, "You climb out from [src]") + return 0 + if(!can_move) + return 0 + if(zoom) + if(world.time - last_message > 20) + src.occupant_message("Unable to move while in zoom mode.") + last_message = world.time + return 0 + if(connected_port) + if(world.time - last_message > 20) + src.occupant_message("Unable to move while connected to the air system port") + last_message = world.time + return 0 + if(!thrusters && (current_processes & MECHA_PROC_MOVEMENT)) + return 0 + if(state || !has_charge(step_energy_drain)) + return 0 + var/tmp_step_in = step_in + var/tmp_step_energy_drain = step_energy_drain + var/move_result = 0 + if(internal_damage&MECHA_INT_CONTROL_LOST) + move_result = mechsteprand() + else if(src.dir!=direction) + move_result = mechturn(direction) + else + move_result = mechstep(direction) + if(move_result) + if(istype(src.loc, /turf/space)) + if(!src.check_for_support()) + float_direction = direction + start_process(MECHA_PROC_MOVEMENT) + if(thrusters) + tmp_step_energy_drain = step_energy_drain*2 + + can_move = 0 + spawn(tmp_step_in) can_move = 1 + use_power(tmp_step_energy_drain) + return 1 + return 0 + +//To be kill ltr +/obj/mecha/combat/marauder/get_commands() + var/output = {"
                    +
                    Special
                    + +
                    + "} + output += ..() + return output + +//Meant for random spawns. +/obj/mecha/combat/marauder/old + desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations. This one is particularly worn looking and likely isn't as sturdy." + + starting_equipment = null + +/obj/mecha/combat/marauder/old/New() + ..() + health = 25 + maxhealth = 300 //Just slightly worse. + cell.charge = rand(0, (cell.charge/2)) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 7aa6d8c41e..0e238fec46 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -1,166 +1,166 @@ -/obj/mecha/combat/phazon - desc = "An exosuit which can only be described as 'WTF?'." - name = "Phazon" - icon_state = "phazon" - initial_icon = "phazon" - step_in = 1 - dir_in = 1 //Facing North. - step_energy_drain = 3 - health = 250 //God this is low //Chompedit, increased it a bit. - maxhealth = 250 //Don't forget to update the /old variant if you change this number. //Chompedit, increased health. - deflect_chance = 30 - max_temperature = 25000 - infra_luminosity = 3 - wreckage = /obj/effect/decal/mecha_wreckage/phazon - add_req_access = 1 - //operation_req_access = list() - internal_damage_threshold = 25 - force = 15 - max_equip = 4 - -//Chompedit start - max_hull_equip = 2 - max_weapon_equip = 2 - max_utility_equip = 3 - max_universal_equip = 2 - max_special_equip = 2 -//Chompedit end - encumbrance_gap = 2 - - starting_components = list( - /obj/item/mecha_parts/component/hull, //Chompedit, normal hull - /obj/item/mecha_parts/component/actuator, - /obj/item/mecha_parts/component/armor/alien, - /obj/item/mecha_parts/component/gas, - /obj/item/mecha_parts/component/electrical - ) - - cloak_possible = FALSE //Chompedit Cloaking is too much for something like this, and is moderately useless anyway. - phasing_possible = TRUE - switch_dmg_type_possible = TRUE - var/list/inherent_damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) - -/obj/mecha/combat/phazon/equipped/Initialize() - . = ..() - starting_equipment = list( - /obj/item/mecha_parts/mecha_equipment/tool/rcd, - /obj/item/mecha_parts/mecha_equipment/gravcatapult - ) - return - -/* Leaving this until we are really sure we don't need it for reference. -/obj/mecha/combat/phazon/Bump(var/atom/obstacle) - if(phasing && get_charge()>=phasing_energy_drain) - spawn() - if(can_phase) - can_phase = FALSE - flick("[initial_icon]-phase", src) - src.loc = get_step(src,src.dir) - src.use_power(phasing_energy_drain) - sleep(step_in*3) - can_phase = TRUE - else - . = ..() - return -*/ - - -/obj/mecha/combat/phazon/get_commands() - var/output = {" - "} - output += ..() - return output - - - -/obj/mecha/combat/phazon/janus - name = "Phazon Prototype Janus Class" - desc = "An exosuit which a more crude civilization such as yours might describe as WTF?." - description_fluff = "An incredibly high-tech exosuit constructed out of salvaged alien and cutting-edge modern technology.\ - This machine, theoretically, is capable of travelling through time, however due to the strange nature of its miniaturized \ - supermatter-fueled bluespace drive, it is uncertain how this ability manifests." - icon_state = "janus" - initial_icon = "janus" - step_in = 1 - dir_in = 1 //Facing North. - step_energy_drain = 3 - health = 350 - maxhealth = 350 - deflect_chance = 30 - inherent_damage_absorption = list("brute"=0.6,"fire"=0.7,"bullet"=0.7,"laser"=0.9,"energy"=0.7,"bomb"=0.5) - max_temperature = 10000 - infra_luminosity = 3 - wreckage = /obj/effect/decal/mecha_wreckage/janus - internal_damage_threshold = 25 - force = 20 - phasing_energy_drain = 300 -//Chompedit start - max_hull_equip = 2 - max_weapon_equip = 3 - max_utility_equip = 3 - max_universal_equip = 4 - max_special_equip = 2 -//Chompedit end - phasing_possible = TRUE - switch_dmg_type_possible = TRUE - cloak_possible = TRUE //Chompedit Allows Janus to cloak. - -/obj/mecha/combat/phazon/janus/take_damage(amount, type="brute") - ..() - if(phasing) - phasing = FALSE - SSradiation.radiate(get_turf(src), 30) - log_append_to_last("WARNING: BLUESPACE DRIVE INSTABILITY DETECTED. DISABLING DRIVE.",1) - visible_message("The [src.name] appears to flicker, before its silhouette stabilizes!") - return - -/obj/mecha/combat/phazon/janus/dynbulletdamage(var/obj/item/projectile/Proj) - if((Proj.damage && !Proj.nodamage) && !istype(Proj, /obj/item/projectile/beam) && prob(max(1, 33 - round(Proj.damage / 4)))) - src.occupant_message("The armor absorbs the incoming projectile's force, negating it!") - src.visible_message("The [src.name] absorbs the incoming projectile's force, negating it!") - src.log_append_to_last("Armor negated.") - return - else if((Proj.damage && !Proj.nodamage) && istype(Proj, /obj/item/projectile/beam) && prob(max(1, (50 - round((Proj.damage / 2) * inherent_damage_absorption["laser"])) * (1 - (Proj.armor_penetration / 100))))) // Base 50% chance to deflect a beam,lowered by half the beam's damage scaled to laser absorption, then multiplied by the remaining percent of non-penetrated armor, with a minimum chance of 1%. - src.occupant_message("The armor reflects the incoming beam, negating it!") - src.visible_message("The [src.name] reflects the incoming beam, negating it!") - src.log_append_to_last("Armor reflected.") - return - - ..() - -/obj/mecha/combat/phazon/janus/dynattackby(obj/item/weapon/W as obj, mob/user as mob) - if(prob(max(1, (50 - round((W.force / 2) * inherent_damage_absorption["brute"])) * (1 - (W.armor_penetration / 100))))) - src.occupant_message("The armor absorbs the incoming attack's force, negating it!") - src.visible_message("The [src.name] absorbs the incoming attack's force, negating it!") - src.log_append_to_last("Armor absorbed.") - return - - ..() - -/obj/mecha/combat/phazon/janus/query_damtype() - var/new_damtype = tgui_alert(src.occupant,"Gauntlet Phase Emitter Mode","Damage Type",list("Force","Energy","Stun")) - switch(new_damtype) - if("Force") - damtype = "brute" - if("Energy") - damtype = "fire" - if("Stun") - damtype = "halloss" - src.occupant_message("Melee damage type switched to [new_damtype]") - return - -//Meant for random spawns. -/obj/mecha/combat/phazon/old - desc = "An exosuit which can only be described as 'WTF?'. This one is particularly worn looking and likely isn't as sturdy." - -/obj/mecha/combat/phazon/old/New() - ..() - health = 25 - maxhealth = 150 //Just slightly worse. - cell.charge = rand(0, (cell.charge/2)) +/obj/mecha/combat/phazon + desc = "An exosuit which can only be described as 'WTF?'." + name = "Phazon" + icon_state = "phazon" + initial_icon = "phazon" + step_in = 1 + dir_in = 1 //Facing North. + step_energy_drain = 3 + health = 250 //God this is low //Chompedit, increased it a bit. + maxhealth = 250 //Don't forget to update the /old variant if you change this number. //Chompedit, increased health. + deflect_chance = 30 + max_temperature = 25000 + infra_luminosity = 3 + wreckage = /obj/effect/decal/mecha_wreckage/phazon + add_req_access = 1 + //operation_req_access = list() + internal_damage_threshold = 25 + force = 15 + max_equip = 4 + +//Chompedit start + max_hull_equip = 2 + max_weapon_equip = 2 + max_utility_equip = 3 + max_universal_equip = 2 + max_special_equip = 2 +//Chompedit end + encumbrance_gap = 2 + + starting_components = list( + /obj/item/mecha_parts/component/hull, //Chompedit, normal hull + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor/alien, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) + + cloak_possible = FALSE //Chompedit Cloaking is too much for something like this, and is moderately useless anyway. + phasing_possible = TRUE + switch_dmg_type_possible = TRUE + var/list/inherent_damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) + +/obj/mecha/combat/phazon/equipped/Initialize() + . = ..() + starting_equipment = list( + /obj/item/mecha_parts/mecha_equipment/tool/rcd, + /obj/item/mecha_parts/mecha_equipment/gravcatapult + ) + return + +/* Leaving this until we are really sure we don't need it for reference. +/obj/mecha/combat/phazon/Bump(var/atom/obstacle) + if(phasing && get_charge()>=phasing_energy_drain) + spawn() + if(can_phase) + can_phase = FALSE + flick("[initial_icon]-phase", src) + src.loc = get_step(src,src.dir) + src.use_power(phasing_energy_drain) + sleep(step_in*3) + can_phase = TRUE + else + . = ..() + return +*/ + + +/obj/mecha/combat/phazon/get_commands() + var/output = {" + "} + output += ..() + return output + + + +/obj/mecha/combat/phazon/janus + name = "Phazon Prototype Janus Class" + desc = "An exosuit which a more crude civilization such as yours might describe as WTF?." + description_fluff = "An incredibly high-tech exosuit constructed out of salvaged alien and cutting-edge modern technology.\ + This machine, theoretically, is capable of travelling through time, however due to the strange nature of its miniaturized \ + supermatter-fueled bluespace drive, it is uncertain how this ability manifests." + icon_state = "janus" + initial_icon = "janus" + step_in = 1 + dir_in = 1 //Facing North. + step_energy_drain = 3 + health = 350 + maxhealth = 350 + deflect_chance = 30 + inherent_damage_absorption = list("brute"=0.6,"fire"=0.7,"bullet"=0.7,"laser"=0.9,"energy"=0.7,"bomb"=0.5) + max_temperature = 10000 + infra_luminosity = 3 + wreckage = /obj/effect/decal/mecha_wreckage/janus + internal_damage_threshold = 25 + force = 20 + phasing_energy_drain = 300 +//Chompedit start + max_hull_equip = 2 + max_weapon_equip = 3 + max_utility_equip = 3 + max_universal_equip = 4 + max_special_equip = 2 +//Chompedit end + phasing_possible = TRUE + switch_dmg_type_possible = TRUE + cloak_possible = TRUE //Chompedit Allows Janus to cloak. + +/obj/mecha/combat/phazon/janus/take_damage(amount, type="brute") + ..() + if(phasing) + phasing = FALSE + SSradiation.radiate(get_turf(src), 30) + log_append_to_last("WARNING: BLUESPACE DRIVE INSTABILITY DETECTED. DISABLING DRIVE.",1) + visible_message("The [src.name] appears to flicker, before its silhouette stabilizes!") + return + +/obj/mecha/combat/phazon/janus/dynbulletdamage(var/obj/item/projectile/Proj) + if((Proj.damage && !Proj.nodamage) && !istype(Proj, /obj/item/projectile/beam) && prob(max(1, 33 - round(Proj.damage / 4)))) + src.occupant_message("The armor absorbs the incoming projectile's force, negating it!") + src.visible_message("The [src.name] absorbs the incoming projectile's force, negating it!") + src.log_append_to_last("Armor negated.") + return + else if((Proj.damage && !Proj.nodamage) && istype(Proj, /obj/item/projectile/beam) && prob(max(1, (50 - round((Proj.damage / 2) * inherent_damage_absorption["laser"])) * (1 - (Proj.armor_penetration / 100))))) // Base 50% chance to deflect a beam,lowered by half the beam's damage scaled to laser absorption, then multiplied by the remaining percent of non-penetrated armor, with a minimum chance of 1%. + src.occupant_message("The armor reflects the incoming beam, negating it!") + src.visible_message("The [src.name] reflects the incoming beam, negating it!") + src.log_append_to_last("Armor reflected.") + return + + ..() + +/obj/mecha/combat/phazon/janus/dynattackby(obj/item/weapon/W as obj, mob/user as mob) + if(prob(max(1, (50 - round((W.force / 2) * inherent_damage_absorption["brute"])) * (1 - (W.armor_penetration / 100))))) + src.occupant_message("The armor absorbs the incoming attack's force, negating it!") + src.visible_message("The [src.name] absorbs the incoming attack's force, negating it!") + src.log_append_to_last("Armor absorbed.") + return + + ..() + +/obj/mecha/combat/phazon/janus/query_damtype() + var/new_damtype = tgui_alert(src.occupant,"Gauntlet Phase Emitter Mode","Damage Type",list("Force","Energy","Stun")) + switch(new_damtype) + if("Force") + damtype = "brute" + if("Energy") + damtype = "fire" + if("Stun") + damtype = "halloss" + src.occupant_message("Melee damage type switched to [new_damtype]") + return + +//Meant for random spawns. +/obj/mecha/combat/phazon/old + desc = "An exosuit which can only be described as 'WTF?'. This one is particularly worn looking and likely isn't as sturdy." + +/obj/mecha/combat/phazon/old/New() + ..() + health = 25 + maxhealth = 150 //Just slightly worse. + cell.charge = rand(0, (cell.charge/2)) diff --git a/code/game/mecha/combat/scarab_ch.dm b/code/game/mecha/combat/scarab_ch.dm index 362feea638..73915e78a4 100644 --- a/code/game/mecha/combat/scarab_ch.dm +++ b/code/game/mecha/combat/scarab_ch.dm @@ -1,19 +1,19 @@ -//ChompEdit - Making use of unused assets. -/obj/mecha/combat/scarab - desc = "A very speedy and cramped quadredped combat mech designed for recon operations." - name = "Scarab" - icon_state = "scarab_militia" - initial_icon = "scarab_militia" - step_in = 2 // Four legs means FAST AS FUCK BOI - step_energy_drain = 5 //Half of normal step drain. Faster mech, more movement. - opacity = 0 - health = 250 - maxhealth = 250 - deflect_chance = 10 - max_temperature = 20000 - infra_luminosity = 6 - - wreckage = /obj/effect/decal/mecha_wreckage/scarab - - max_hull_equip = 1 - max_weapon_equip = 1 +//ChompEdit - Making use of unused assets. +/obj/mecha/combat/scarab + desc = "A very speedy and cramped quadredped combat mech designed for recon operations." + name = "Scarab" + icon_state = "scarab_militia" + initial_icon = "scarab_militia" + step_in = 2 // Four legs means FAST AS FUCK BOI + step_energy_drain = 5 //Half of normal step drain. Faster mech, more movement. + opacity = 0 + health = 250 + maxhealth = 250 + deflect_chance = 10 + max_temperature = 20000 + infra_luminosity = 6 + + wreckage = /obj/effect/decal/mecha_wreckage/scarab + + max_hull_equip = 1 + max_weapon_equip = 1 diff --git a/code/game/mecha/equipment/tools/phoron_bore_ch.dm b/code/game/mecha/equipment/tools/phoron_bore_ch.dm index a41c1fca15..84ca29d10b 100644 --- a/code/game/mecha/equipment/tools/phoron_bore_ch.dm +++ b/code/game/mecha/equipment/tools/phoron_bore_ch.dm @@ -1,15 +1,15 @@ -//CHOMPedit, cool tunneling device is cool -/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore - auto_rearm = 1 - equip_cooldown = 15 // half of drill - name = "\improper PB-23 \"Phobos\" Phoron Bore" - desc = "A design for a large, mecha-mounted Phoron bore, stolen driectly from Grayson Manufactories Ltd. and reproducted by NT. It makes use a specialized compressed phoron crystal. The bolt it fires travels for 6 tiles before dissapaiting, breaking rocks and extracting minerals." - icon = 'icons/mecha/mecha_equipment_ch.dmi' - icon_state = "mecha_pbore" - energy_drain = 200 - projectile = /obj/item/projectile/bullet/magnetic/bore - fire_sound = 'sound/weapons/railgun.ogg' - - equip_type = EQUIP_UTILITY - - origin_tech = list(TECH_MATERIAL = 5, TECH_PHORON = 5, TECH_POWER = 5) +//CHOMPedit, cool tunneling device is cool +/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore + auto_rearm = 1 + equip_cooldown = 15 // half of drill + name = "\improper PB-23 \"Phobos\" Phoron Bore" + desc = "A design for a large, mecha-mounted Phoron bore, stolen driectly from Grayson Manufactories Ltd. and reproducted by NT. It makes use a specialized compressed phoron crystal. The bolt it fires travels for 6 tiles before dissapaiting, breaking rocks and extracting minerals." + icon = 'icons/mecha/mecha_equipment_ch.dmi' + icon_state = "mecha_pbore" + energy_drain = 200 + projectile = /obj/item/projectile/bullet/magnetic/bore + fire_sound = 'sound/weapons/railgun.ogg' + + equip_type = EQUIP_UTILITY + + origin_tech = list(TECH_MATERIAL = 5, TECH_PHORON = 5, TECH_POWER = 5) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 4fd4c8d967..d9416629d5 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1,3 +1,3 @@ -/obj/item/mecha_parts/mecha_equipment/tool - matter = list(MAT_STEEL = 5000, MAT_GLASS = 3000) +/obj/item/mecha_parts/mecha_equipment/tool + matter = list(MAT_STEEL = 5000, MAT_GLASS = 3000) equip_type = EQUIP_UTILITY \ No newline at end of file diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 7d384f6bf8..977f3ee9a8 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -1,103 +1,103 @@ -/obj/item/mecha_parts/mecha_equipment/weapon - name = "mecha weapon" - range = RANGED - origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3) - matter = list(MAT_STEEL = 6000, MAT_GLASS = 3000) - var/projectile //Type of projectile fired. - var/projectiles = 1 //Amount of projectiles loaded. - var/projectiles_per_shot = 1 //Amount of projectiles fired per single shot. - var/deviation = 0 //Inaccuracy of shots. - var/fire_cooldown = 0 //Duration of sleep between firing projectiles in single shot. - var/fire_sound //Sound played while firing. - var/fire_volume = 50 //How loud it is played. - var/auto_rearm = 0 //Does the weapon reload itself after each shot? - required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod) - - step_delay = 0.1 - - equip_type = EQUIP_WEAPON - -/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target) - if(projectiles <= 0) - return 0 - return ..() - -/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) - if(!action_checks(target)) - return - var/turf/curloc = chassis.loc - var/turf/targloc = get_turf(target) - if(!curloc || !targloc) - return - chassis.use_power(energy_drain) - chassis.visible_message("[chassis] fires [src]!") - occupant_message("You fire [src]!") - log_message("Fired from [src], targeting [target].") - var/target_for_log = "unknown" - if(ismob(target)) - target_for_log = target - else if(target) - target_for_log = "[target.name]" - add_attack_logs(chassis.occupant,target_for_log,"Fired exosuit weapon [src.name] (MANUAL)") - - for(var/i = 1 to min(projectiles, projectiles_per_shot)) - var/turf/aimloc = targloc - if(deviation) - aimloc = locate(targloc.x+GaussRandRound(deviation,1),targloc.y+GaussRandRound(deviation,1),targloc.z) - if(!aimloc || aimloc == curloc || (locs && (aimloc in locs))) - break - playsound(src, fire_sound, fire_volume, 1) - projectiles-- - var/turf/projectile_turf - if(chassis.locs && chassis.locs.len) // Multi tile. - for(var/turf/Tloc in chassis.locs) - if(get_dist(Tloc, aimloc) < get_dist(loc, aimloc)) - projectile_turf = get_turf(Tloc) - if(!projectile_turf) - projectile_turf = get_turf(curloc) - var/P = new projectile(projectile_turf) - Fire(P, target, params) - if(i == 1) - set_ready_state(FALSE) - if(fire_cooldown) - sleep(fire_cooldown) - if(auto_rearm) - projectiles = projectiles_per_shot -// set_ready_state(FALSE) - -//CHOMPedit, redundant code removed. Fixes weapon lock on mob kill. - add_attack_logs(chassis.occupant,target, "Fired exosuit weapon [src.name] (MANUAL)") - - do_after_cooldown() - - return - -/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target, params) - if(istype(A, /obj/item/projectile)) // Sanity. - var/obj/item/projectile/P = A - P.dispersion = deviation - process_accuracy(P, chassis.occupant, target) - P.launch_projectile_from_turf(target, chassis.get_pilot_zone_sel(), chassis.occupant, params) - else if(istype(A, /atom/movable)) - var/atom/movable/AM = A - AM.throw_at(target, 7, 1, chassis) - -/obj/item/mecha_parts/mecha_equipment/weapon/proc/process_accuracy(obj/projectile, mob/living/user, atom/target) - var/obj/item/projectile/P = projectile - if(!istype(P)) - return - - P.accuracy -= user.get_accuracy_penalty() - - // Some modifiers make it harder or easier to hit things. - for(var/datum/modifier/M in user.modifiers) - if(!isnull(M.accuracy)) - P.accuracy += M.accuracy - if(!isnull(M.accuracy_dispersion)) - P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.species) - P.accuracy += H.species.gun_accuracy_mod - P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) +/obj/item/mecha_parts/mecha_equipment/weapon + name = "mecha weapon" + range = RANGED + origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3) + matter = list(MAT_STEEL = 6000, MAT_GLASS = 3000) + var/projectile //Type of projectile fired. + var/projectiles = 1 //Amount of projectiles loaded. + var/projectiles_per_shot = 1 //Amount of projectiles fired per single shot. + var/deviation = 0 //Inaccuracy of shots. + var/fire_cooldown = 0 //Duration of sleep between firing projectiles in single shot. + var/fire_sound //Sound played while firing. + var/fire_volume = 50 //How loud it is played. + var/auto_rearm = 0 //Does the weapon reload itself after each shot? + required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod) + + step_delay = 0.1 + + equip_type = EQUIP_WEAPON + +/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target) + if(projectiles <= 0) + return 0 + return ..() + +/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) + if(!action_checks(target)) + return + var/turf/curloc = chassis.loc + var/turf/targloc = get_turf(target) + if(!curloc || !targloc) + return + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] fires [src]!") + occupant_message("You fire [src]!") + log_message("Fired from [src], targeting [target].") + var/target_for_log = "unknown" + if(ismob(target)) + target_for_log = target + else if(target) + target_for_log = "[target.name]" + add_attack_logs(chassis.occupant,target_for_log,"Fired exosuit weapon [src.name] (MANUAL)") + + for(var/i = 1 to min(projectiles, projectiles_per_shot)) + var/turf/aimloc = targloc + if(deviation) + aimloc = locate(targloc.x+GaussRandRound(deviation,1),targloc.y+GaussRandRound(deviation,1),targloc.z) + if(!aimloc || aimloc == curloc || (locs && (aimloc in locs))) + break + playsound(src, fire_sound, fire_volume, 1) + projectiles-- + var/turf/projectile_turf + if(chassis.locs && chassis.locs.len) // Multi tile. + for(var/turf/Tloc in chassis.locs) + if(get_dist(Tloc, aimloc) < get_dist(loc, aimloc)) + projectile_turf = get_turf(Tloc) + if(!projectile_turf) + projectile_turf = get_turf(curloc) + var/P = new projectile(projectile_turf) + Fire(P, target, params) + if(i == 1) + set_ready_state(FALSE) + if(fire_cooldown) + sleep(fire_cooldown) + if(auto_rearm) + projectiles = projectiles_per_shot +// set_ready_state(FALSE) + +//CHOMPedit, redundant code removed. Fixes weapon lock on mob kill. + add_attack_logs(chassis.occupant,target, "Fired exosuit weapon [src.name] (MANUAL)") + + do_after_cooldown() + + return + +/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target, params) + if(istype(A, /obj/item/projectile)) // Sanity. + var/obj/item/projectile/P = A + P.dispersion = deviation + process_accuracy(P, chassis.occupant, target) + P.launch_projectile_from_turf(target, chassis.get_pilot_zone_sel(), chassis.occupant, params) + else if(istype(A, /atom/movable)) + var/atom/movable/AM = A + AM.throw_at(target, 7, 1, chassis) + +/obj/item/mecha_parts/mecha_equipment/weapon/proc/process_accuracy(obj/projectile, mob/living/user, atom/target) + var/obj/item/projectile/P = projectile + if(!istype(P)) + return + + P.accuracy -= user.get_accuracy_penalty() + + // Some modifiers make it harder or easier to hit things. + for(var/datum/modifier/M in user.modifiers) + if(!isnull(M.accuracy)) + P.accuracy += M.accuracy + if(!isnull(M.accuracy_dispersion)) + P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.species) + P.accuracy += H.species.gun_accuracy_mod + P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 26c5798949..4d481fe055 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -1,106 +1,106 @@ -/obj/machinery/mech_recharger - name = "mech recharger" - desc = "A mech recharger, built into the floor." - icon = 'icons/mecha/mech_bay.dmi' - icon_state = "recharge_floor" - density = FALSE - anchored = TRUE - layer = TURF_LAYER + 0.1 - circuit = /obj/item/weapon/circuitboard/mech_recharger - - var/atom/movable/charging - var/charge = 45 - var/repair = 0 - var/list/chargable_types = list( - /obj/mecha, - /mob/living/silicon/robot/platform - ) - -/obj/machinery/mech_recharger/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/mech_recharger/Crossed(var/atom/movable/M) - . = ..() - if(charging == M) - return - for(var/mtype in chargable_types) - if(istype(M, mtype)) - start_charging(M) - return - -/obj/machinery/mech_recharger/Uncrossed(var/atom/movable/M) - . = ..() - if(M == charging) - charging = null - -/obj/machinery/mech_recharger/RefreshParts() - ..() - charge = 0 - repair = -5 - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - charge += P.rating * 20 - if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) - charge += P.rating * 5 - repair += P.rating - if(istype(P, /obj/item/weapon/stock_parts/manipulator)) - repair += P.rating * 2 - -/obj/machinery/mech_recharger/process() - ..() - if(!charging) - return - if(charging.loc != src.loc) // Could be qdel or teleport or something - charging = null - return - - var/done = FALSE - var/obj/mecha/mech = charging - var/obj/item/weapon/cell/cell = charging.get_cell() - if(cell) - var/t = min(charge, cell.maxcharge - cell.charge) - if(t > 0) - if(istype(mech)) - mech.give_power(t) - else - cell.give(t) - use_power(t * 150) - else - if(istype(mech)) - mech.occupant_message(SPAN_NOTICE("Fully charged.")) - done = TRUE - - if(repair && istype(mech) && mech.health < initial(mech.health)) - mech.health = min(mech.health + repair, initial(mech.health)) - if(mech.health == initial(mech.health)) - mech.occupant_message(SPAN_NOTICE("Fully repaired.")) - else - done = FALSE - if(done) - charging = null - -/obj/machinery/mech_recharger/attackby(var/obj/item/I, var/mob/user) - if(default_deconstruction_screwdriver(user, I)) - return - if(default_deconstruction_crowbar(user, I)) - return - if(default_part_replacement(user, I)) - return - -/obj/machinery/mech_recharger/proc/start_charging(var/atom/movable/M) - - var/obj/mecha/mech = M - if(stat & (NOPOWER | BROKEN)) - if(istype(mech)) - mech.occupant_message(SPAN_WARNING("Power port not responding. Terminating.")) - else - to_chat(M, SPAN_WARNING("Power port not responding. Terminating.")) - return - if(M.get_cell()) - if(istype(mech)) - mech.occupant_message(SPAN_NOTICE("Now charging...")) - else - to_chat(M, SPAN_NOTICE("Now charging...")) - charging = M - return +/obj/machinery/mech_recharger + name = "mech recharger" + desc = "A mech recharger, built into the floor." + icon = 'icons/mecha/mech_bay.dmi' + icon_state = "recharge_floor" + density = FALSE + anchored = TRUE + layer = TURF_LAYER + 0.1 + circuit = /obj/item/weapon/circuitboard/mech_recharger + + var/atom/movable/charging + var/charge = 45 + var/repair = 0 + var/list/chargable_types = list( + /obj/mecha, + /mob/living/silicon/robot/platform + ) + +/obj/machinery/mech_recharger/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/mech_recharger/Crossed(var/atom/movable/M) + . = ..() + if(charging == M) + return + for(var/mtype in chargable_types) + if(istype(M, mtype)) + start_charging(M) + return + +/obj/machinery/mech_recharger/Uncrossed(var/atom/movable/M) + . = ..() + if(M == charging) + charging = null + +/obj/machinery/mech_recharger/RefreshParts() + ..() + charge = 0 + repair = -5 + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + charge += P.rating * 20 + if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) + charge += P.rating * 5 + repair += P.rating + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + repair += P.rating * 2 + +/obj/machinery/mech_recharger/process() + ..() + if(!charging) + return + if(charging.loc != src.loc) // Could be qdel or teleport or something + charging = null + return + + var/done = FALSE + var/obj/mecha/mech = charging + var/obj/item/weapon/cell/cell = charging.get_cell() + if(cell) + var/t = min(charge, cell.maxcharge - cell.charge) + if(t > 0) + if(istype(mech)) + mech.give_power(t) + else + cell.give(t) + use_power(t * 150) + else + if(istype(mech)) + mech.occupant_message(SPAN_NOTICE("Fully charged.")) + done = TRUE + + if(repair && istype(mech) && mech.health < initial(mech.health)) + mech.health = min(mech.health + repair, initial(mech.health)) + if(mech.health == initial(mech.health)) + mech.occupant_message(SPAN_NOTICE("Fully repaired.")) + else + done = FALSE + if(done) + charging = null + +/obj/machinery/mech_recharger/attackby(var/obj/item/I, var/mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + +/obj/machinery/mech_recharger/proc/start_charging(var/atom/movable/M) + + var/obj/mecha/mech = M + if(stat & (NOPOWER | BROKEN)) + if(istype(mech)) + mech.occupant_message(SPAN_WARNING("Power port not responding. Terminating.")) + else + to_chat(M, SPAN_WARNING("Power port not responding. Terminating.")) + return + if(M.get_cell()) + if(istype(mech)) + mech.occupant_message(SPAN_NOTICE("Now charging...")) + else + to_chat(M, SPAN_NOTICE("Now charging...")) + charging = M + return diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 92ac2f8a05..085ad1dbac 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -1,2134 +1,2134 @@ -//////////////////////////////// -///// Construction datums ////// -//////////////////////////////// - -/datum/construction/mecha/custom_action(step, obj/item/I, mob/user) - if(I.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/W = I.get_welder() - if(W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) - else - return 0 - else if(I.has_tool_quality(TOOL_WRENCH)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - - else if(I.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - - else if(I.has_tool_quality(TOOL_WIRECUTTER)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - - else if(istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - if(C.use(4)) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) - else - to_chat(user, "There's not enough cable to finish the task.") - return 0 - else if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - if(S.get_amount() < 5) - to_chat(user, "There's not enough material in this stack.") - return 0 - else - S.use(5) - return 1 - -/datum/construction/reversible/mecha/custom_action(index as num, diff as num, obj/item/I, mob/user as mob) - if(I.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/W = I.get_welder() - if(W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) - else - return 0 - else if(I.has_tool_quality(TOOL_WRENCH)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - - else if(I.has_tool_quality(TOOL_SCREWDRIVER)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - - else if(I.has_tool_quality(TOOL_WIRECUTTER)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - - else if(istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - if(C.use(4)) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) - else - to_chat(user, "There's not enough cable to finish the task.") - return 0 - else if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - if(S.get_amount() < 5) - to_chat(user, "There's not enough material in this stack.") - return 0 - else - S.use(5) - return 1 - -////////////////////// -// Ripley -////////////////////// -/datum/construction/mecha/ripley_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 - list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/ripley_right_leg)//5 - ) - -/datum/construction/mecha/ripley_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/ripley_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/ripley_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "ripley0" - const_holder.density = TRUE - const_holder.overlays.len = 0 - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/ripley - result = "/obj/mecha/working/ripley" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //8 - list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //10 - list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //11 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //12 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //14 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/ripley/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/ripley/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "ripley1" - if(13) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "ripley2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "ripley0" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "ripley3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "ripley1" - if(11) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "ripley4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "ripley2" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "ripley5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "ripley3" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "ripley6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "ripley4" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "ripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "ripley5" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "ripley8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "ripley6" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "ripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "ripley7" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "ripley10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "ripley8" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "ripley11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "ripley9" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") - holder.icon_state = "ripley12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "ripley10" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "ripley13" - else - user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "ripley11" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "ripley12" - return 1 - -/datum/construction/reversible/mecha/ripley/spawn_result() - ..() - feedback_inc("mecha_ripley_created",1) - return - -////////////////////// -// Gygax -////////////////////// -/datum/construction/mecha/gygax_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1 - list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/gygax_head) - ) - -/datum/construction/mecha/gygax_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/gygax_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/gygax_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "gygax0" - const_holder.density = TRUE - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/gygax - result = "/obj/mecha/combat/gygax" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/mecha_parts/part/gygax_armour, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced capacitor is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced capacitor is installed"), - //8 - list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced scanner module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced scanner module is installed"), - //10 - list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Targeting module is secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Targeting module is installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/targeting, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //17 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //18 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //19 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //20 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/gygax/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/gygax/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "gygax2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "gygax0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "gygax3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "gygax4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "gygax2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "gygax5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "gygax3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "gygax6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) - holder.icon_state = "gygax4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "gygax7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "gygax5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "gygax8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) - holder.icon_state = "gygax6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(I) - holder.icon_state = "gygax9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "gygax7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "gygax10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder)) - holder.icon_state = "gygax8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(I) - holder.icon_state = "gygax11" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "gygax9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "gygax12" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "gygax10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(I) - holder.icon_state = "gygax13" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "gygax11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "gygax14" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "gygax12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "gygax15" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "gygax13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "gygax16" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "gygax14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "gygax17" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "gygax15" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].") - qdel(I) - holder.icon_state = "gygax18" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "gygax16" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.") - holder.icon_state = "gygax19" - else - user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].") - new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder)) - holder.icon_state = "gygax17" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].") - else - user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.") - holder.icon_state = "gygax18" - return 1 - -/datum/construction/reversible/mecha/gygax/spawn_result() - ..() - feedback_inc("mecha_gygax_created",1) - return - - - ////////////////////// -// Serenity -////////////////////// -/datum/construction/mecha/serenity_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1 - list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/gygax_head) - ) - -/datum/construction/mecha/serenity_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/serenity_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/serenity_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/serenity(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "gygax0" - const_holder.density = TRUE - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/serenity - result = "/obj/mecha/combat/gygax/serenity" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced capacitor is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced capacitor is installed"), - //8 - list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced scanner module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced scanner module is installed"), - //10 - list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Medical module is secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Medical module is installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/medical, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //17 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //18 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //19 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //20 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/serenity/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/serenity/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "gygax2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "gygax0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "gygax3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "gygax4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "gygax2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "gygax5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "gygax3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "gygax6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) - holder.icon_state = "gygax4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "gygax7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "gygax5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "gygax8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) - holder.icon_state = "gygax6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the medical control module into [holder].", "You install the medical control module into [holder].") - qdel(I) - holder.icon_state = "gygax9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "gygax7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the medical control module.", "You secure the medical control module.") - holder.icon_state = "gygax10" - else - user.visible_message("[user] removes the medical control module from [holder].", "You remove the medical control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/medical(get_turf(holder)) - holder.icon_state = "gygax8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(I) - holder.icon_state = "gygax11" - else - user.visible_message("[user] unfastens the medical control module.", "You unfasten the medical control module.") - holder.icon_state = "gygax9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "gygax12" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "gygax10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(I) - holder.icon_state = "gygax13" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "gygax11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "gygax14" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "gygax12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "gygax15" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "gygax13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "gygax16" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "gygax14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "gygax17" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "gygax15" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs the external armor layer to [holder].", "You install the external armor layer to [holder].") - //CHOMPedit. Prevents Sereniy from eating entire stacks of plasteel. - holder.icon_state = "gygax18" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "gygax16" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "You secure the external armor layer.") - holder.icon_state = "gygax19-s" - else - user.visible_message("[user] pries the external armor layer from [holder].", "You pry the external armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) // Fixes serenity giving Gygax Armor Plates for the reverse action... - holder.icon_state = "gygax17" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "gygax18" - return 1 - -/datum/construction/reversible/mecha/serenity/spawn_result() - ..() - feedback_inc("mecha_serenity_created",1) - return - - - -//////////////////////// -// Firefighter -//////////////////////// -/datum/construction/mecha/firefighter_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 - list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/ripley_right_leg),//5 - list("key"=/obj/item/clothing/suit/fire)//6 - ) - -/datum/construction/mecha/firefighter_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - user.drop_item() - qdel(I) - return 1 - -/datum/construction/mecha/firefighter_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/firefighter_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/firefighter(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "fireripley0" - const_holder.density = TRUE - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/firefighter - result = "/obj/mecha/working/ripley/firefighter" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_CROWBAR, - "desc"="External armor is being installed."), - //4 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //5 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //6 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //7 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //8 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //9 - list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //10 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //11 - list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //12 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //13 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //14 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //15 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/firefighter/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/firefighter/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(15) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "fireripley1" - if(14) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "fireripley2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "fireripley0" - if(13) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "fireripley3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "fireripley1" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "fireripley4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "fireripley2" - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "fireripley5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "fireripley3" - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "fireripley6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "fireripley4" - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "fireripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "fireripley5" - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "fireripley8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "fireripley6" - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "fireripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "fireripley7" - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "fireripley10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "fireripley8" - if(5) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "fireripley11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "fireripley9" - if(4) - if(diff==FORWARD) - user.visible_message("[user] starts to install the external armor layer to [holder].", "You start to install the external armor layer to [holder].") - holder.icon_state = "fireripley12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "fireripley10" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") - holder.icon_state = "fireripley13" - else - user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "fireripley11" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "fireripley14" - else - user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "fireripley12" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "fireripley13" - return 1 - -/datum/construction/reversible/mecha/firefighter/spawn_result() - ..() - feedback_inc("mecha_firefighter_created",1) - return - -////////////////////// -// Durand -////////////////////// -/datum/construction/mecha/durand_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso),//1 - list("key"=/obj/item/mecha_parts/part/durand_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/durand_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/durand_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/durand_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/durand_head) - ) - -/datum/construction/mecha/durand_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/durand_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/durand_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/durand(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "durand0" - const_holder.density = TRUE - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/durand - result = "/obj/mecha/combat/durand" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/mecha_parts/part/durand_armour, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced capacitor is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced capacitor is installed"), - //8 - list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced scanner module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced scanner module is installed"), - //10 - list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Targeting module is secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Targeting module is installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/durand/targeting, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/durand/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //17 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //18 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //19 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //20 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - - -/datum/construction/reversible/mecha/durand/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/durand/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "durand1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "durand2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "durand0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "durand3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "durand1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "durand4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "durand2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "durand5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "durand3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "durand6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/main(get_turf(holder)) - holder.icon_state = "durand4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "durand7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "durand5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "durand8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) - holder.icon_state = "durand6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(I) - holder.icon_state = "durand9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "durand7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "durand10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/targeting(get_turf(holder)) - holder.icon_state = "durand8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(I) - holder.icon_state = "durand11" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "durand9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "durand12" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "durand10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(I) - holder.icon_state = "durand13" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "durand11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "durand14" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "durand12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "durand15" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "durand13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "durand16" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "durand14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "durand17" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "durand15" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].") - qdel(I) - holder.icon_state = "durand18" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "durand16" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.") - holder.icon_state = "durand19" - else - user.visible_message("[user] pries Durand Armour Plates from [holder].", "You prie Durand Armour Plates from [holder].") - new /obj/item/mecha_parts/part/durand_armour(get_turf(holder)) - holder.icon_state = "durand17" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].") - else - user.visible_message("[user] unfastens Durand Armour Plates.", "You unfasten Durand Armour Plates.") - holder.icon_state = "durand18" - return 1 - -/datum/construction/reversible/mecha/durand/spawn_result() - ..() - feedback_inc("mecha_durand_created",1) - return - -//////////////////////// -// Odysseus -//////////////////////// -/datum/construction/mecha/odysseus_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1 - list("key"=/obj/item/mecha_parts/part/odysseus_head),//2 - list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3 - list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4 - list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5 - list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 - ) - -/datum/construction/mecha/odysseus_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/odysseus_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/odysseus_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "odysseus0" - const_holder.density = TRUE - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/odysseus - result = "/obj/mecha/medical/odysseus" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //8 - list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //10 - list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //11 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //12 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //14 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/odysseus/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/odysseus/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - //TODO: better messages. - switch(index) - if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(13) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "odysseus2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "odysseus0" - if(12) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "odysseus3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(11) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "odysseus4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "odysseus2" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "odysseus5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "odysseus3" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "odysseus6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder)) - holder.icon_state = "odysseus4" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "odysseus7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "odysseus5" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "odysseus8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) - holder.icon_state = "odysseus6" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "odysseus9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "odysseus7" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "odysseus10" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "odysseus8" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "odysseus11" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "odysseus9" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs [I] layer to [holder].", "You install external reinforced armor layer to [holder].") - holder.icon_state = "odysseus12" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "odysseus10" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "odysseus13" - else - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - user.visible_message("[user] pries the plasteel from [holder].", "You prie the plasteel from [holder].") - holder.icon_state = "odysseus11" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - holder.icon_state = "odysseus14" - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "odysseus12" - return 1 - -/datum/construction/reversible/mecha/odysseus/spawn_result() - ..() - feedback_inc("mecha_odysseus_created",1) - return - -////////////////////// -// Phazon -////////////////////// -/datum/construction/mecha/phazon_chassis - result = "/obj/mecha/combat/phazon" - steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso),//1 - list("key"=/obj/item/mecha_parts/part/phazon_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/phazon_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/phazon_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/phazon_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/phazon_head) - ) - -/datum/construction/mecha/phazon_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/phazon_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/phazon_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "phazon0" - const_holder.density = TRUE - spawn() - qdel(src) - return - -/datum/construction/reversible/mecha/phazon - result = "/obj/mecha/combat/phazon" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Translocator is secured"), //Chompedit, change hand tele to translocator - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Translocator is installed"), //Chompedit, change hand tele to translocator - //8 - list("key"=/obj/item/device/perfect_tele, //Chompedit, change hand tele to translocator - "backkey"=IS_SCREWDRIVER, - "desc"="SMES coil is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="SMES coil is installed"), - //10 - list("key"=/obj/item/weapon/smes_coil/super_capacity, - "backkey"=IS_SCREWDRIVER, - "desc"="Targeting module is secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Targeting module is installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/phazon/targeting, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/phazon/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/phazon/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //17 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //18 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //19 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //20 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/phazon/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/phazon/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "phazon1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "phazon2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "phazon0" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "phazon3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "phazon1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "phazon4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "phazon2" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "phazon5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "phazon3" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "phazon6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/phazon/main(get_turf(holder)) - holder.icon_state = "phazon4" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "phazon7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "phazon5" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "phazon8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/phazon/peripherals(get_turf(holder)) - holder.icon_state = "phazon6" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(I) - holder.icon_state = "phazon9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "phazon7" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "phazon10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/phazon/targeting(get_turf(holder)) - holder.icon_state = "phazon8" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the SMES coil to [holder].", "You install the SMES coil to [holder].") - qdel(I) - holder.icon_state = "phazon11" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "phazon9" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the SMES coil.", "You secure the SMES coil.") - holder.icon_state = "phazon12" - else - user.visible_message("[user] removes the SMES coil from [holder].", "You remove the SMES coil from [holder].") - new /obj/item/weapon/smes_coil/super_capacity(get_turf(holder)) - holder.icon_state = "phazon10" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the hand teleporter to [holder].", "You install the hand teleporter to [holder].") - qdel(I) - holder.icon_state = "phazon13" - else - user.visible_message("[user] unfastens the SMES coil.", "You unfasten the SMES coil.") - holder.icon_state = "phazon11" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the hand teleporter.", "You secure the hand teleporter.") - holder.icon_state = "phazon14" - else - user.visible_message("[user] removes the hand teleporter from [holder].", "You remove the hand teleporter from [holder].") - new /obj/item/weapon/hand_tele(get_turf(holder)) - holder.icon_state = "phazon12" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") - holder.icon_state = "phazon19" - else - user.visible_message("[user] unfastens the hand teleporter.", "You unfasten the hand teleporter.") - holder.icon_state = "phazon13" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "phazon20" - else - user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "phazon14" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "phazon21" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "phazon19" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") - holder.icon_state = "phazon22" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "phazon20" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "phazon23" - else - user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "phazon21" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "phazon22" - return 1 - -/datum/construction/reversible/mecha/phazon/spawn_result() - ..() - feedback_inc("mecha_phazon_created",1) - return - -////////////////////// -// Janus -////////////////////// -/datum/construction/mecha/janus_chassis - result = "/obj/mecha/combat/phazon/janus" - steps = list(list("key"=/obj/item/mecha_parts/part/janus_torso),//1 - list("key"=/obj/item/mecha_parts/part/janus_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/janus_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/janus_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/janus_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/janus_head) - ) - -/datum/construction/mecha/janus_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.add_overlay(I.icon_state+"+o") - qdel(I) - return 1 - -/datum/construction/mecha/janus_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/janus_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/janus(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "janus0" - const_holder.density = TRUE - spawn() - qdel(src) - return - -/datum/construction/reversible/mecha/janus - result = "/obj/mecha/combat/phazon/janus" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is attached."), - //3 - list("key"=/obj/item/stack/material/morphium, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded"), - //4 - list("key"=IS_WELDER, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is attached."), - //6 - list("key"=/obj/item/stack/material/durasteel, - "backkey"=IS_SCREWDRIVER, - "desc"="Durand auxiliary board is secured."), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Durand auxiliary board is installed"), - //8 - list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Phase coil is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Phase coil is installed"), - //10 - list("key"=/obj/item/prop/alien/phasecoil, - "backkey"=IS_SCREWDRIVER, - "desc"="Gygax balance system secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Gygax balance system installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Targeting module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Targeting module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/imperion/targeting, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/imperion/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //17 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //18 - list("key"=/obj/item/weapon/circuitboard/mecha/imperion/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //19 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //20 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //21 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //22 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/janus/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/janus/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - switch(index) - if(22) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "janus1" - if(21) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "janus2" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "janus0" - if(20) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "janus3" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "janus1" - if(19) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "janus4" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "janus2" - if(18) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "janus5" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "janus3" - if(17) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "janus6" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/imperion/main(get_turf(holder)) - holder.icon_state = "janus4" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "janus7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "janus5" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "janus8" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/imperion/peripherals(get_turf(holder)) - holder.icon_state = "janus6" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(I) - holder.icon_state = "janus9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "janus7" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "janus10" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/imperion/targeting(get_turf(holder)) - holder.icon_state = "janus8" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the Gygax control module into [holder].", "You install the Gygax control module into [holder].") - qdel(I) - holder.icon_state = "janus11" - else - user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") - holder.icon_state = "janus9" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the Gygax control module.", "You secure the Gygax control module.") - holder.icon_state = "janus12" - else - user.visible_message("[user] removes the Gygax control module from [holder].", "You remove the Gygax control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) - holder.icon_state = "janus10" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the phase coil into [holder].", "You install the phase coil into [holder].") - qdel(I) - holder.icon_state = "janus13" - else - user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") - holder.icon_state = "janus11" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the phase coil.", "You secure the phase coil.") - holder.icon_state = "janus14" - else - user.visible_message("[user] removes the phase coil from [holder].", "You remove the phase coil from [holder].") - new /obj/item/prop/alien/phasecoil(get_turf(holder)) - holder.icon_state = "janus12" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the Durand control module into [holder].", "You install the Durand control module into [holder].") - qdel(I) - holder.icon_state = "janus15" - else - user.visible_message("[user] unfastens the phase coil.", "You unfasten the phase coil.") - holder.icon_state = "janus13" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the Durand control module.", "You secure the Durand control module.") - holder.icon_state = "janus16" - else - user.visible_message("[user] removes the Durand control module from [holder].", "You remove the Durand control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) - holder.icon_state = "janus14" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") - holder.icon_state = "janus17" - else - user.visible_message("[user] unfastens the Durand control module.", "You unfasten the Durand control module.") - holder.icon_state = "janus15" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "janus18" - else - user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - new /obj/item/stack/material/durasteel(get_turf(holder), 5) - holder.icon_state = "janus16" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "janus19" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "janus17" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") - holder.icon_state = "janus20" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "janus18" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") - holder.icon_state = "janus21" - else - user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") - new /obj/item/stack/material/morphium(get_turf(holder), 5) - holder.icon_state = "janus19" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") - else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "janus20" - return 1 - -/datum/construction/reversible/mecha/janus/spawn_result() - ..() - feedback_inc("mecha_janus_created",1) - return +//////////////////////////////// +///// Construction datums ////// +//////////////////////////////// + +/datum/construction/mecha/custom_action(step, obj/item/I, mob/user) + if(I.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/W = I.get_welder() + if(W.remove_fuel(0, user)) + playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + else + return 0 + else if(I.has_tool_quality(TOOL_WRENCH)) + playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + + else if(I.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + + else if(I.has_tool_quality(TOOL_WIRECUTTER)) + playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + + else if(istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = I + if(C.use(4)) + playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + else + to_chat(user, "There's not enough cable to finish the task.") + return 0 + else if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + if(S.get_amount() < 5) + to_chat(user, "There's not enough material in this stack.") + return 0 + else + S.use(5) + return 1 + +/datum/construction/reversible/mecha/custom_action(index as num, diff as num, obj/item/I, mob/user as mob) + if(I.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/W = I.get_welder() + if(W.remove_fuel(0, user)) + playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + else + return 0 + else if(I.has_tool_quality(TOOL_WRENCH)) + playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + + else if(I.has_tool_quality(TOOL_SCREWDRIVER)) + playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + + else if(I.has_tool_quality(TOOL_WIRECUTTER)) + playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + + else if(istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = I + if(C.use(4)) + playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + else + to_chat(user, "There's not enough cable to finish the task.") + return 0 + else if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + if(S.get_amount() < 5) + to_chat(user, "There's not enough material in this stack.") + return 0 + else + S.use(5) + return 1 + +////////////////////// +// Ripley +////////////////////// +/datum/construction/mecha/ripley_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 + list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/ripley_right_leg)//5 + ) + +/datum/construction/mecha/ripley_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/ripley_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/ripley_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "ripley0" + const_holder.density = TRUE + const_holder.overlays.len = 0 + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/ripley + result = "/obj/mecha/working/ripley" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //10 + list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //11 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //12 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //14 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/ripley/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/ripley/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(14) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "ripley1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "ripley2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "ripley0" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "ripley3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "ripley1" + if(11) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "ripley4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "ripley2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "ripley5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "ripley3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "ripley6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) + holder.icon_state = "ripley4" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "ripley7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "ripley5" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "ripley8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) + holder.icon_state = "ripley6" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "ripley9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "ripley7" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "ripley10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "ripley8" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "ripley11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "ripley9" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "ripley12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "ripley10" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "ripley13" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "ripley11" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "ripley12" + return 1 + +/datum/construction/reversible/mecha/ripley/spawn_result() + ..() + feedback_inc("mecha_ripley_created",1) + return + +////////////////////// +// Gygax +////////////////////// +/datum/construction/mecha/gygax_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1 + list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/gygax_head) + ) + +/datum/construction/mecha/gygax_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/gygax_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/gygax_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "gygax0" + const_holder.density = TRUE + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/gygax + result = "/obj/mecha/combat/gygax" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/mecha_parts/part/gygax_armour, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/gygax/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/gygax/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "gygax1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "gygax2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "gygax0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "gygax3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "gygax1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "gygax4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "gygax2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "gygax5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "gygax3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "gygax6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) + holder.icon_state = "gygax4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "gygax7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "gygax5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "gygax8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) + holder.icon_state = "gygax6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "gygax9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "gygax7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "gygax10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder)) + holder.icon_state = "gygax8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "gygax11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "gygax9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "gygax12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "gygax10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "gygax13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "gygax11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "gygax14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "gygax12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "gygax15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "gygax13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "gygax16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "gygax14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "gygax17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "gygax15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].") + qdel(I) + holder.icon_state = "gygax18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "gygax16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.") + holder.icon_state = "gygax19" + else + user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].") + new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder)) + holder.icon_state = "gygax17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].") + else + user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.") + holder.icon_state = "gygax18" + return 1 + +/datum/construction/reversible/mecha/gygax/spawn_result() + ..() + feedback_inc("mecha_gygax_created",1) + return + + + ////////////////////// +// Serenity +////////////////////// +/datum/construction/mecha/serenity_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1 + list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/gygax_head) + ) + +/datum/construction/mecha/serenity_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/serenity_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/serenity_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/serenity(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "gygax0" + const_holder.density = TRUE + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/serenity + result = "/obj/mecha/combat/gygax/serenity" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Medical module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Medical module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/medical, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/serenity/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/serenity/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "gygax1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "gygax2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "gygax0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "gygax3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "gygax1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "gygax4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "gygax2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "gygax5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "gygax3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "gygax6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) + holder.icon_state = "gygax4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "gygax7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "gygax5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "gygax8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) + holder.icon_state = "gygax6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the medical control module into [holder].", "You install the medical control module into [holder].") + qdel(I) + holder.icon_state = "gygax9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "gygax7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the medical control module.", "You secure the medical control module.") + holder.icon_state = "gygax10" + else + user.visible_message("[user] removes the medical control module from [holder].", "You remove the medical control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/medical(get_turf(holder)) + holder.icon_state = "gygax8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "gygax11" + else + user.visible_message("[user] unfastens the medical control module.", "You unfasten the medical control module.") + holder.icon_state = "gygax9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "gygax12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "gygax10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "gygax13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "gygax11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "gygax14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "gygax12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "gygax15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "gygax13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "gygax16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You pry the internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "gygax14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "gygax17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "gygax15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs the external armor layer to [holder].", "You install the external armor layer to [holder].") + //CHOMPedit. Prevents Sereniy from eating entire stacks of plasteel. + holder.icon_state = "gygax18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "gygax16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures the external armor layer.", "You secure the external armor layer.") + holder.icon_state = "gygax19-s" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry the external armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) // Fixes serenity giving Gygax Armor Plates for the reverse action... + holder.icon_state = "gygax17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "gygax18" + return 1 + +/datum/construction/reversible/mecha/serenity/spawn_result() + ..() + feedback_inc("mecha_serenity_created",1) + return + + + +//////////////////////// +// Firefighter +//////////////////////// +/datum/construction/mecha/firefighter_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 + list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/ripley_right_leg),//5 + list("key"=/obj/item/clothing/suit/fire)//6 + ) + +/datum/construction/mecha/firefighter_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + user.drop_item() + qdel(I) + return 1 + +/datum/construction/mecha/firefighter_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/firefighter_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/firefighter(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "fireripley0" + const_holder.density = TRUE + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/firefighter + result = "/obj/mecha/working/ripley/firefighter" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_CROWBAR, + "desc"="External armor is being installed."), + //4 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //5 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //6 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //7 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //8 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //9 + list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //10 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //11 + list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //12 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //13 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //14 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //15 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/firefighter/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/firefighter/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(15) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "fireripley1" + if(14) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "fireripley2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "fireripley0" + if(13) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "fireripley3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "fireripley1" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "fireripley4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "fireripley2" + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "fireripley5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "fireripley3" + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "fireripley6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) + holder.icon_state = "fireripley4" + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "fireripley7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "fireripley5" + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "fireripley8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) + holder.icon_state = "fireripley6" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "fireripley9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "fireripley7" + if(6) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "fireripley10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "fireripley8" + if(5) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "fireripley11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "fireripley9" + if(4) + if(diff==FORWARD) + user.visible_message("[user] starts to install the external armor layer to [holder].", "You start to install the external armor layer to [holder].") + holder.icon_state = "fireripley12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "fireripley10" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "fireripley13" + else + user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "fireripley11" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "fireripley14" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "fireripley12" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "fireripley13" + return 1 + +/datum/construction/reversible/mecha/firefighter/spawn_result() + ..() + feedback_inc("mecha_firefighter_created",1) + return + +////////////////////// +// Durand +////////////////////// +/datum/construction/mecha/durand_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso),//1 + list("key"=/obj/item/mecha_parts/part/durand_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/durand_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/durand_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/durand_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/durand_head) + ) + +/datum/construction/mecha/durand_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/durand_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/durand_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/durand(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "durand0" + const_holder.density = TRUE + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/durand + result = "/obj/mecha/combat/durand" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/mecha_parts/part/durand_armour, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/durand/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/durand/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + + +/datum/construction/reversible/mecha/durand/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/durand/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "durand1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "durand2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "durand0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "durand3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "durand1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "durand4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "durand2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "durand5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "durand3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "durand6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/main(get_turf(holder)) + holder.icon_state = "durand4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "durand7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "durand5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "durand8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) + holder.icon_state = "durand6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "durand9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "durand7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "durand10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/targeting(get_turf(holder)) + holder.icon_state = "durand8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "durand11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "durand9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "durand12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "durand10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "durand13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "durand11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "durand14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "durand12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "durand15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "durand13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "durand16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "durand14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "durand17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "durand15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].") + qdel(I) + holder.icon_state = "durand18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "durand16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.") + holder.icon_state = "durand19" + else + user.visible_message("[user] pries Durand Armour Plates from [holder].", "You prie Durand Armour Plates from [holder].") + new /obj/item/mecha_parts/part/durand_armour(get_turf(holder)) + holder.icon_state = "durand17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].") + else + user.visible_message("[user] unfastens Durand Armour Plates.", "You unfasten Durand Armour Plates.") + holder.icon_state = "durand18" + return 1 + +/datum/construction/reversible/mecha/durand/spawn_result() + ..() + feedback_inc("mecha_durand_created",1) + return + +//////////////////////// +// Odysseus +//////////////////////// +/datum/construction/mecha/odysseus_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1 + list("key"=/obj/item/mecha_parts/part/odysseus_head),//2 + list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3 + list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4 + list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5 + list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 + ) + +/datum/construction/mecha/odysseus_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/odysseus_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/odysseus_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "odysseus0" + const_holder.density = TRUE + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/odysseus + result = "/obj/mecha/medical/odysseus" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //10 + list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //11 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //12 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //14 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/odysseus/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/odysseus/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(14) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "odysseus1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "odysseus2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "odysseus0" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "odysseus3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "odysseus1" + if(11) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "odysseus4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "odysseus2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "odysseus5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "odysseus3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "odysseus6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder)) + holder.icon_state = "odysseus4" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "odysseus7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "odysseus5" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "odysseus8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) + holder.icon_state = "odysseus6" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "odysseus9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "odysseus7" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "odysseus10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "odysseus8" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "odysseus11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "odysseus9" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs [I] layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "odysseus12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "odysseus10" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "odysseus13" + else + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + user.visible_message("[user] pries the plasteel from [holder].", "You prie the plasteel from [holder].") + holder.icon_state = "odysseus11" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + holder.icon_state = "odysseus14" + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "odysseus12" + return 1 + +/datum/construction/reversible/mecha/odysseus/spawn_result() + ..() + feedback_inc("mecha_odysseus_created",1) + return + +////////////////////// +// Phazon +////////////////////// +/datum/construction/mecha/phazon_chassis + result = "/obj/mecha/combat/phazon" + steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso),//1 + list("key"=/obj/item/mecha_parts/part/phazon_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/phazon_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/phazon_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/phazon_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/phazon_head) + ) + +/datum/construction/mecha/phazon_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/phazon_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/phazon_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "phazon0" + const_holder.density = TRUE + spawn() + qdel(src) + return + +/datum/construction/reversible/mecha/phazon + result = "/obj/mecha/combat/phazon" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Translocator is secured"), //Chompedit, change hand tele to translocator + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Translocator is installed"), //Chompedit, change hand tele to translocator + //8 + list("key"=/obj/item/device/perfect_tele, //Chompedit, change hand tele to translocator + "backkey"=IS_SCREWDRIVER, + "desc"="SMES coil is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="SMES coil is installed"), + //10 + list("key"=/obj/item/weapon/smes_coil/super_capacity, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/phazon/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/phazon/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "phazon2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "phazon0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "phazon3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "phazon4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "phazon2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "phazon5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "phazon3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "phazon6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/main(get_turf(holder)) + holder.icon_state = "phazon4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "phazon7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "phazon5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "phazon8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/peripherals(get_turf(holder)) + holder.icon_state = "phazon6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "phazon9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "phazon7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "phazon10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/targeting(get_turf(holder)) + holder.icon_state = "phazon8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the SMES coil to [holder].", "You install the SMES coil to [holder].") + qdel(I) + holder.icon_state = "phazon11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "phazon9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the SMES coil.", "You secure the SMES coil.") + holder.icon_state = "phazon12" + else + user.visible_message("[user] removes the SMES coil from [holder].", "You remove the SMES coil from [holder].") + new /obj/item/weapon/smes_coil/super_capacity(get_turf(holder)) + holder.icon_state = "phazon10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the hand teleporter to [holder].", "You install the hand teleporter to [holder].") + qdel(I) + holder.icon_state = "phazon13" + else + user.visible_message("[user] unfastens the SMES coil.", "You unfasten the SMES coil.") + holder.icon_state = "phazon11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the hand teleporter.", "You secure the hand teleporter.") + holder.icon_state = "phazon14" + else + user.visible_message("[user] removes the hand teleporter from [holder].", "You remove the hand teleporter from [holder].") + new /obj/item/weapon/hand_tele(get_turf(holder)) + holder.icon_state = "phazon12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + holder.icon_state = "phazon19" + else + user.visible_message("[user] unfastens the hand teleporter.", "You unfasten the hand teleporter.") + holder.icon_state = "phazon13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + holder.icon_state = "phazon20" + else + user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "phazon14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "phazon21" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "phazon19" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + holder.icon_state = "phazon22" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "phazon20" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "phazon23" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "phazon21" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "phazon22" + return 1 + +/datum/construction/reversible/mecha/phazon/spawn_result() + ..() + feedback_inc("mecha_phazon_created",1) + return + +////////////////////// +// Janus +////////////////////// +/datum/construction/mecha/janus_chassis + result = "/obj/mecha/combat/phazon/janus" + steps = list(list("key"=/obj/item/mecha_parts/part/janus_torso),//1 + list("key"=/obj/item/mecha_parts/part/janus_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/janus_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/janus_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/janus_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/janus_head) + ) + +/datum/construction/mecha/janus_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + return 1 + +/datum/construction/mecha/janus_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/janus_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/janus(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "janus0" + const_holder.density = TRUE + spawn() + qdel(src) + return + +/datum/construction/reversible/mecha/janus + result = "/obj/mecha/combat/phazon/janus" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is attached."), + //3 + list("key"=/obj/item/stack/material/morphium, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded"), + //4 + list("key"=IS_WELDER, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is attached."), + //6 + list("key"=/obj/item/stack/material/durasteel, + "backkey"=IS_SCREWDRIVER, + "desc"="Durand auxiliary board is secured."), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Durand auxiliary board is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Phase coil is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Phase coil is installed"), + //10 + list("key"=/obj/item/prop/alien/phasecoil, + "backkey"=IS_SCREWDRIVER, + "desc"="Gygax balance system secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Gygax balance system installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //17 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //18 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //19 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //20 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //21 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //22 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/janus/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/janus/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + switch(index) + if(22) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "janus1" + if(21) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "janus2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "janus0" + if(20) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "janus3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "janus1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "janus4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "janus2" + if(18) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "janus5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "janus3" + if(17) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "janus6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/main(get_turf(holder)) + holder.icon_state = "janus4" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "janus7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "janus5" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "janus8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/peripherals(get_turf(holder)) + holder.icon_state = "janus6" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "janus9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "janus7" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "janus10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/targeting(get_turf(holder)) + holder.icon_state = "janus8" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the Gygax control module into [holder].", "You install the Gygax control module into [holder].") + qdel(I) + holder.icon_state = "janus11" + else + user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") + holder.icon_state = "janus9" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the Gygax control module.", "You secure the Gygax control module.") + holder.icon_state = "janus12" + else + user.visible_message("[user] removes the Gygax control module from [holder].", "You remove the Gygax control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) + holder.icon_state = "janus10" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the phase coil into [holder].", "You install the phase coil into [holder].") + qdel(I) + holder.icon_state = "janus13" + else + user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") + holder.icon_state = "janus11" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the phase coil.", "You secure the phase coil.") + holder.icon_state = "janus14" + else + user.visible_message("[user] removes the phase coil from [holder].", "You remove the phase coil from [holder].") + new /obj/item/prop/alien/phasecoil(get_turf(holder)) + holder.icon_state = "janus12" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the Durand control module into [holder].", "You install the Durand control module into [holder].") + qdel(I) + holder.icon_state = "janus15" + else + user.visible_message("[user] unfastens the phase coil.", "You unfasten the phase coil.") + holder.icon_state = "janus13" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the Durand control module.", "You secure the Durand control module.") + holder.icon_state = "janus16" + else + user.visible_message("[user] removes the Durand control module from [holder].", "You remove the Durand control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) + holder.icon_state = "janus14" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + holder.icon_state = "janus17" + else + user.visible_message("[user] unfastens the Durand control module.", "You unfasten the Durand control module.") + holder.icon_state = "janus15" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + holder.icon_state = "janus18" + else + user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") + new /obj/item/stack/material/durasteel(get_turf(holder), 5) + holder.icon_state = "janus16" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "janus19" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "janus17" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + holder.icon_state = "janus20" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "janus18" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "janus21" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") + new /obj/item/stack/material/morphium(get_turf(holder), 5) + holder.icon_state = "janus19" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "janus20" + return 1 + +/datum/construction/reversible/mecha/janus/spawn_result() + ..() + feedback_inc("mecha_janus_created",1) + return diff --git a/code/game/mecha/mecha_construction_paths_ch.dm b/code/game/mecha/mecha_construction_paths_ch.dm index 5a8a5c0eb5..3a4450f3e8 100644 --- a/code/game/mecha/mecha_construction_paths_ch.dm +++ b/code/game/mecha/mecha_construction_paths_ch.dm @@ -1,275 +1,275 @@ -/datum/construction/mecha/scarab_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/scarab_torso),//1 - list("key"=/obj/item/mecha_parts/part/scarab_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/scarab_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/scarab_left_legs),//4 - list("key"=/obj/item/mecha_parts/part/scarab_right_legs),//5 - list("key"=/obj/item/mecha_parts/part/scarab_head) - ) - -/datum/construction/mecha/scarab_chassis/custom_action(step, obj/item/I, mob/user) - user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") - holder.overlays += I.icon_state - qdel(I) - return 1 - -/datum/construction/mecha/scarab_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) - -/datum/construction/mecha/scarab_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/scarab(const_holder) - const_holder.icon = 'icons/mecha/mech_construction_ch.dmi' - const_holder.icon_state = "scarab_chassis_complete" - const_holder.density = 1 - spawn() - qdel(src) - return - - -/datum/construction/reversible/mecha/scarab - result = "/obj/mecha/combat/scarab" - steps = list( - //1 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="External armor is wrenched."), - //2 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/material/plasteel, - "backkey"=IS_WELDER, - "desc"="Internal armor is welded."), - //4 - list("key"=IS_WELDER, - "backkey"=IS_WRENCH, - "desc"="Internal armor is wrenched"), - //5 - list("key"=IS_WRENCH, - "backkey"=IS_CROWBAR, - "desc"="Internal armor is installed"), - //6 - list("key"=/obj/item/stack/material/steel, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced capacitor is secured"), - //7 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced capacitor is installed"), - //8 - list("key"=/obj/item/weapon/stock_parts/capacitor/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Advanced scanner module is secured"), - //9 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Advanced scanner module is installed"), - //10 - list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, - "backkey"=IS_SCREWDRIVER, - "desc"="Targeting module is secured"), - //11 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Targeting module is installed"), - //12 - list("key"=/obj/item/weapon/circuitboard/mecha/scarab/targeting, - "backkey"=IS_SCREWDRIVER, - "desc"="Peripherals control module is secured"), - //13 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Peripherals control module is installed"), - //14 - list("key"=/obj/item/weapon/circuitboard/mecha/scarab/peripherals, - "backkey"=IS_SCREWDRIVER, - "desc"="Central control module is secured"), - //15 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_CROWBAR, - "desc"="Central control module is installed"), - //16 - list("key"=/obj/item/weapon/circuitboard/mecha/scarab/main, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is adjusted"), - //17 - list("key"=IS_WIRECUTTER, - "backkey"=IS_SCREWDRIVER, - "desc"="The wiring is added"), - //18 - list("key"=/obj/item/stack/cable_coil, - "backkey"=IS_SCREWDRIVER, - "desc"="The hydraulic systems are active."), - //19 - list("key"=IS_SCREWDRIVER, - "backkey"=IS_WRENCH, - "desc"="The hydraulic systems are connected."), - //20 - list("key"=IS_WRENCH, - "desc"="The hydraulic systems are disconnected.") - ) - -/datum/construction/reversible/mecha/scarab/action(obj/item/I,mob/user as mob) - return check_step(I,user) - -/datum/construction/reversible/mecha/scarab/custom_action(index, diff, obj/item/I, mob/user) - if(!..()) - return 0 - - switch(index) - if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") - holder.icon_state = "scarab_chassis_complete" - if(19) - if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") - holder.icon_state = "scarab_chassis_complete" - else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") - holder.icon_state = "scarab_chassis_complete" - if(18) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") - holder.icon_state = "scarab_wire1" - else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") - holder.icon_state = "scarab_chassis_complete" - if(17) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") - holder.icon_state = "scarab_wire2" - else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - new /obj/item/stack/cable_coil(get_turf(holder), 4) - holder.icon_state = "scarab_chassis_complete" - if(16) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") - qdel(I) - holder.icon_state = "scarab_chip1" - else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") - holder.icon_state = "scarab_wire1" - if(15) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "scarab_chip1" - else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") - new /obj/item/weapon/circuitboard/mecha/scarab/main(get_turf(holder)) - holder.icon_state = "scarab_wire2" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") - qdel(I) - holder.icon_state = "scarab_chip2" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "scarab_chip1" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "scarab_chip2" - else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/scarab/peripherals(get_turf(holder)) - holder.icon_state = "scarab_chip1" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") - qdel(I) - holder.icon_state = "scarab_chip3" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "scarab_chip1" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "scarab_chip3" - else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") - new /obj/item/weapon/circuitboard/mecha/scarab/targeting(get_turf(holder)) - holder.icon_state = "scarab_chip2" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") - qdel(I) - holder.icon_state = "scarab_chip4" - else - user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "scarab_chip3" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") - holder.icon_state = "scarab_chip4" - else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) - holder.icon_state = "scarab_chip3" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") - qdel(I) - holder.icon_state = "scarab_chip5" - else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") - holder.icon_state = "scarab_chip3" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") - holder.icon_state = "scarab_chip5" - else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) - holder.icon_state = "scarab_chip5" - if(6) - if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") - holder.icon_state = "scarab_chip5" - else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") - holder.icon_state = "scarab_chip4" - if(5) - if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") - holder.icon_state = "scarab_chip5" - else - user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - new /obj/item/stack/material/steel(get_turf(holder), 5) - holder.icon_state = "scarab_chip5" - if(4) - if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") - holder.icon_state = "scarab_weld1" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "scarab_chip5" - if(3) - if(diff==FORWARD) - user.visible_message("[user] installs external armour layers to [holder].", "You install the external armor layer to [holder].") - holder.icon_state = "scarab_weld2" - else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") - holder.icon_state = "scarab_chip5" - if(2) - if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure the external armor layer.") - holder.icon_state = "scarab_weld2" - else - user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") - new /obj/item/stack/material/plasteel(get_turf(holder), 5) - holder.icon_state = "scarab_weld1" - if(1) - if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") - else - user.visible_message("[user] unfastens external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "scarab_weld2" - return 1 - -/datum/construction/reversible/mecha/scarab/spawn_result() - ..() - feedback_inc("mecha_scarab_created",1) - return +/datum/construction/mecha/scarab_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/scarab_torso),//1 + list("key"=/obj/item/mecha_parts/part/scarab_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/scarab_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/scarab_left_legs),//4 + list("key"=/obj/item/mecha_parts/part/scarab_right_legs),//5 + list("key"=/obj/item/mecha_parts/part/scarab_head) + ) + +/datum/construction/mecha/scarab_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state + qdel(I) + return 1 + +/datum/construction/mecha/scarab_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/scarab_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/scarab(const_holder) + const_holder.icon = 'icons/mecha/mech_construction_ch.dmi' + const_holder.icon_state = "scarab_chassis_complete" + const_holder.density = 1 + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/scarab + result = "/obj/mecha/combat/scarab" + steps = list( + //1 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=IS_WELDER, + "desc"="Internal armor is welded."), + //4 + list("key"=IS_WELDER, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/scarab/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/scarab/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/scarab/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=IS_WIRECUTTER, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/scarab/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/scarab/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "scarab_chassis_complete" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "scarab_chassis_complete" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "scarab_chassis_complete" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "scarab_wire1" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "scarab_chassis_complete" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "scarab_wire2" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + new /obj/item/stack/cable_coil(get_turf(holder), 4) + holder.icon_state = "scarab_chassis_complete" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "scarab_chip1" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "scarab_wire1" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "scarab_chip1" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/scarab/main(get_turf(holder)) + holder.icon_state = "scarab_wire2" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "scarab_chip2" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "scarab_chip1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "scarab_chip2" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/scarab/peripherals(get_turf(holder)) + holder.icon_state = "scarab_chip1" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "scarab_chip3" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "scarab_chip1" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "scarab_chip3" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/scarab/targeting(get_turf(holder)) + holder.icon_state = "scarab_chip2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(I) + holder.icon_state = "scarab_chip4" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "scarab_chip3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "scarab_chip4" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "scarab_chip3" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(I) + holder.icon_state = "scarab_chip5" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "scarab_chip3" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "scarab_chip5" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "scarab_chip5" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "scarab_chip5" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "scarab_chip4" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "scarab_chip5" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + new /obj/item/stack/material/steel(get_turf(holder), 5) + holder.icon_state = "scarab_chip5" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "scarab_weld1" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "scarab_chip5" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external armour layers to [holder].", "You install the external armor layer to [holder].") + holder.icon_state = "scarab_weld2" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "scarab_chip5" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure the external armor layer.") + holder.icon_state = "scarab_weld2" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + holder.icon_state = "scarab_weld1" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "scarab_weld2" + return 1 + +/datum/construction/reversible/mecha/scarab/spawn_result() + ..() + feedback_inc("mecha_scarab_created",1) + return diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 1c5003ac95..a3c7ed24b9 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -1,134 +1,134 @@ -/obj/machinery/computer/mecha - name = "Exosuit Control" - desc = "Used to track exosuits, as well as view their logs and activate EMP beacons." - icon_keyboard = "rd_key" - icon_screen = "mecha" - light_color = "#a97faa" - req_access = list(access_robotics) - circuit = /obj/item/weapon/circuitboard/mecha_control - var/list/located = list() - var/screen = 0 - var/list/stored_data - -/obj/machinery/computer/mecha/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/computer/mecha/attack_hand(mob/user) - if(..()) - return - tgui_interact(user) - -/obj/machinery/computer/mecha/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MechaControlConsole", name) - ui.open() - -/obj/machinery/computer/mecha/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - - - var/list/beacons = list() - for(var/obj/item/mecha_parts/mecha_tracking/TR in world) - var/list/tr_data = TR.tgui_data(user) - if(tr_data) - beacons.Add(list(tr_data)) - data["beacons"] = beacons - - LAZYINITLIST(stored_data) - data["stored_data"] = stored_data - - return data - -/obj/machinery/computer/mecha/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("send_message") - var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) - if(istype(MT)) - var/message = sanitize(tgui_input_text(usr, "Input message", "Transmit message")) - var/obj/mecha/M = MT.in_mecha() - if(message && M) - M.occupant_message(message) - return TRUE - - if("shock") - var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) - if(istype(MT)) - MT.shock() - return TRUE - - if("get_log") - var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) - if(istype(MT)) - stored_data = MT.get_mecha_log() - return TRUE - - if("clear_log") - stored_data = null - return TRUE - -/obj/item/mecha_parts/mecha_tracking - name = "Exosuit tracking beacon" - desc = "Device used to transmit exosuit data." - icon = 'icons/obj/device.dmi' - icon_state = "motion2" - origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2) - -/obj/item/mecha_parts/mecha_tracking/tgui_data(mob/user) - var/list/data = ..() - if(!in_mecha()) - return FALSE - - var/obj/mecha/M = loc - data["ref"] = REF(src) - data["charge"] = M.get_charge() - data["name"] = M.name - data["health"] = M.health - data["maxHealth"] = initial(M.health) - data["cell"] = M.cell - if(M.cell) - data["cellCharge"] = M.cell.charge - data["cellMaxCharge"] = M.cell.charge - data["airtank"] = M.return_pressure() - data["pilot"] = M.occupant - data["location"] = get_area(M) - data["active"] = M.selected - if(istype(M, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/RM = M - data["cargoUsed"] = RM.cargo.len - data["cargoMax"] = RM.cargo_capacity - - return data - -/obj/item/mecha_parts/mecha_tracking/emp_act() - qdel(src) - return - -/obj/item/mecha_parts/mecha_tracking/ex_act() - qdel(src) - return - -/obj/item/mecha_parts/mecha_tracking/proc/in_mecha() - if(istype(loc, /obj/mecha)) - return loc - return 0 - -/obj/item/mecha_parts/mecha_tracking/proc/shock() - var/obj/mecha/M = in_mecha() - if(M) - M.emp_act(4) - qdel(src) - -/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_log() - if(!in_mecha()) - return list() - var/obj/mecha/M = loc - return M.get_log_tgui() - - -/obj/item/weapon/storage/box/mechabeacons - name = "Exosuit Tracking Beacons" - starts_with = list(/obj/item/mecha_parts/mecha_tracking = 7) +/obj/machinery/computer/mecha + name = "Exosuit Control" + desc = "Used to track exosuits, as well as view their logs and activate EMP beacons." + icon_keyboard = "rd_key" + icon_screen = "mecha" + light_color = "#a97faa" + req_access = list(access_robotics) + circuit = /obj/item/weapon/circuitboard/mecha_control + var/list/located = list() + var/screen = 0 + var/list/stored_data + +/obj/machinery/computer/mecha/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/computer/mecha/attack_hand(mob/user) + if(..()) + return + tgui_interact(user) + +/obj/machinery/computer/mecha/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MechaControlConsole", name) + ui.open() + +/obj/machinery/computer/mecha/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + + + var/list/beacons = list() + for(var/obj/item/mecha_parts/mecha_tracking/TR in world) + var/list/tr_data = TR.tgui_data(user) + if(tr_data) + beacons.Add(list(tr_data)) + data["beacons"] = beacons + + LAZYINITLIST(stored_data) + data["stored_data"] = stored_data + + return data + +/obj/machinery/computer/mecha/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("send_message") + var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) + if(istype(MT)) + var/message = sanitize(tgui_input_text(usr, "Input message", "Transmit message")) + var/obj/mecha/M = MT.in_mecha() + if(message && M) + M.occupant_message(message) + return TRUE + + if("shock") + var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) + if(istype(MT)) + MT.shock() + return TRUE + + if("get_log") + var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["mt"]) + if(istype(MT)) + stored_data = MT.get_mecha_log() + return TRUE + + if("clear_log") + stored_data = null + return TRUE + +/obj/item/mecha_parts/mecha_tracking + name = "Exosuit tracking beacon" + desc = "Device used to transmit exosuit data." + icon = 'icons/obj/device.dmi' + icon_state = "motion2" + origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/mecha_tracking/tgui_data(mob/user) + var/list/data = ..() + if(!in_mecha()) + return FALSE + + var/obj/mecha/M = loc + data["ref"] = REF(src) + data["charge"] = M.get_charge() + data["name"] = M.name + data["health"] = M.health + data["maxHealth"] = initial(M.health) + data["cell"] = M.cell + if(M.cell) + data["cellCharge"] = M.cell.charge + data["cellMaxCharge"] = M.cell.charge + data["airtank"] = M.return_pressure() + data["pilot"] = M.occupant + data["location"] = get_area(M) + data["active"] = M.selected + if(istype(M, /obj/mecha/working/ripley)) + var/obj/mecha/working/ripley/RM = M + data["cargoUsed"] = RM.cargo.len + data["cargoMax"] = RM.cargo_capacity + + return data + +/obj/item/mecha_parts/mecha_tracking/emp_act() + qdel(src) + return + +/obj/item/mecha_parts/mecha_tracking/ex_act() + qdel(src) + return + +/obj/item/mecha_parts/mecha_tracking/proc/in_mecha() + if(istype(loc, /obj/mecha)) + return loc + return 0 + +/obj/item/mecha_parts/mecha_tracking/proc/shock() + var/obj/mecha/M = in_mecha() + if(M) + M.emp_act(4) + qdel(src) + +/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_log() + if(!in_mecha()) + return list() + var/obj/mecha/M = loc + return M.get_log_tgui() + + +/obj/item/weapon/storage/box/mechabeacons + name = "Exosuit Tracking Beacons" + starts_with = list(/obj/item/mecha_parts/mecha_tracking = 7) diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 4be3c27d48..3476de004c 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -1,342 +1,342 @@ - ///////////////////////// -////// Mecha Parts ////// -///////////////////////// - -// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm - -/obj/item/mecha_parts - name = "mecha part" - icon = 'icons/mecha/mech_construct.dmi' - icon_state = "blank" - w_class = ITEMSIZE_HUGE - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2) - - -/obj/item/mecha_parts/chassis - name="Mecha Chassis" - icon_state = "backbone" - var/datum/construction/construct - -/obj/item/mecha_parts/chassis/attackby(obj/item/W as obj, mob/user as mob) - if(!construct || !construct.action(W, user)) - ..() - return - -/obj/item/mecha_parts/chassis/attack_hand() - return - -/////////// Ripley - -/obj/item/mecha_parts/chassis/ripley - name = "Ripley Chassis" - -/obj/item/mecha_parts/chassis/ripley/New() - ..() - construct = new /datum/construction/mecha/ripley_chassis(src) - -/obj/item/mecha_parts/part/ripley_torso - name="Ripley Torso" - desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." - icon_state = "ripley_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/ripley_left_arm - name="Ripley Left Arm" - desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/ripley_right_arm - name="Ripley Right Arm" - desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/ripley_left_leg - name="Ripley Left Leg" - desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/ripley_right_leg - name="Ripley Right Leg" - desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -///////// Gygax - -/obj/item/mecha_parts/chassis/gygax - name = "Gygax Chassis" - -/obj/item/mecha_parts/chassis/gygax/New() - ..() - construct = new /datum/construction/mecha/gygax_chassis(src) - -/obj/item/mecha_parts/part/gygax_torso - name="Gygax Torso" - desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." - icon_state = "gygax_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_head - name="Gygax Head" - desc="A Gygax head. Houses advanced surveilance and targeting sensors." - icon_state = "gygax_head" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_left_arm - name="Gygax Left Arm" - desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_right_arm - name="Gygax Right Arm" - desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_left_leg - name="Gygax Left Leg" - icon_state = "gygax_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_right_leg - name="Gygax Right Leg" - icon_state = "gygax_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/gygax_armour - name="Gygax Armour Plates" - icon_state = "gygax_armour" - origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5) - -////////// Serenity - -/obj/item/mecha_parts/chassis/serenity - name = "Serenity Chassis" - -/obj/item/mecha_parts/chassis/serenity/New() - ..() - construct = new /datum/construction/mecha/serenity_chassis(src) - -//////////// Durand - -/obj/item/mecha_parts/chassis/durand - name = "Durand Chassis" - -/obj/item/mecha_parts/chassis/durand/New() - ..() - construct = new /datum/construction/mecha/durand_chassis(src) - -/obj/item/mecha_parts/part/durand_torso - name="Durand Torso" - icon_state = "durand_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_head - name="Durand Head" - icon_state = "durand_head" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_left_arm - name="Durand Left Arm" - icon_state = "durand_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_right_arm - name="Durand Right Arm" - icon_state = "durand_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_left_leg - name="Durand Left Leg" - icon_state = "durand_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_right_leg - name="Durand Right Leg" - icon_state = "durand_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/durand_armour - name="Durand Armour Plates" - icon_state = "durand_armour" - origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5) - - - -////////// Firefighter - -/obj/item/mecha_parts/chassis/firefighter - name = "Firefighter Chassis" - -/obj/item/mecha_parts/chassis/firefighter/New() - ..() - construct = new /datum/construction/mecha/firefighter_chassis(src) -/* -/obj/item/mecha_parts/part/firefighter_torso - name="Ripley-on-Fire Torso" - icon_state = "ripley_harness" - -/obj/item/mecha_parts/part/firefighter_left_arm - name="Ripley-on-Fire Left Arm" - icon_state = "ripley_l_arm" - -/obj/item/mecha_parts/part/firefighter_right_arm - name="Ripley-on-Fire Right Arm" - icon_state = "ripley_r_arm" - -/obj/item/mecha_parts/part/firefighter_left_leg - name="Ripley-on-Fire Left Leg" - icon_state = "ripley_l_leg" - -/obj/item/mecha_parts/part/firefighter_right_leg - name="Ripley-on-Fire Right Leg" - icon_state = "ripley_r_leg" -*/ - -////////// Phazon - -/obj/item/mecha_parts/chassis/phazon - name = "Phazon Chassis" - origin_tech = list(TECH_MATERIAL = 7) - -/obj/item/mecha_parts/chassis/phazon/New() - ..() - construct = new /datum/construction/mecha/phazon_chassis(src) - -/obj/item/mecha_parts/part/phazon_torso - name="Phazon Torso" - icon_state = "phazon_harness" - //construction_time = 300 - //construction_cost = list(MAT_STEEL=35000,"glass"=10000,"phoron"=20000) - origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6) - -/obj/item/mecha_parts/part/phazon_head - name="Phazon Head" - icon_state = "phazon_head" - //construction_time = 200 - //construction_cost = list(MAT_STEEL=15000,"glass"=5000,"phoron"=10000) - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6) - -/obj/item/mecha_parts/part/phazon_left_arm - name="Phazon Left Arm" - icon_state = "phazon_l_arm" - //construction_time = 200 - //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) - -/obj/item/mecha_parts/part/phazon_right_arm - name="Phazon Right Arm" - icon_state = "phazon_r_arm" - //construction_time = 200 - //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) - -/obj/item/mecha_parts/part/phazon_left_leg - name="Phazon Left Leg" - icon_state = "phazon_l_leg" - //construction_time = 200 - //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) - -/obj/item/mecha_parts/part/phazon_right_leg - name="Phazon Right Leg" - icon_state = "phazon_r_leg" - //construction_time = 200 - //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) - -///////// Odysseus - - -/obj/item/mecha_parts/chassis/odysseus - name = "Odysseus Chassis" - -/obj/item/mecha_parts/chassis/odysseus/New() - ..() - construct = new /datum/construction/mecha/odysseus_chassis(src) - -/obj/item/mecha_parts/part/odysseus_head - name="Odysseus Head" - icon_state = "odysseus_head" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2) - -/obj/item/mecha_parts/part/odysseus_torso - name="Odysseus Torso" - desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." - icon_state = "odysseus_torso" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/odysseus_left_arm - name="Odysseus Left Arm" - desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/odysseus_right_arm - name="Odysseus Right Arm" - desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/odysseus_left_leg - name="Odysseus Left Leg" - desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mecha_parts/part/odysseus_right_leg - name="Odysseus Right Leg" - desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/*/obj/item/mecha_parts/part/odysseus_armour - name="Odysseus Carapace" - icon_state = "odysseus_armour" - origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - construction_time = 200 - construction_cost = list(MAT_STEEL=15000)*/ - -////////// Janus - -/obj/item/mecha_parts/chassis/janus - name = "Janus Chassis" - origin_tech = list(TECH_MATERIAL = 7) - -/obj/item/mecha_parts/chassis/janus/New() - ..() - construct = new /datum/construction/mecha/janus_chassis(src) - -/obj/item/mecha_parts/part/janus_torso - name="Imperion Torso" - icon_state = "janus_harness" - origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 2, TECH_POWER = 6, TECH_PRECURSOR = 2) - -/obj/item/mecha_parts/part/janus_head - name="Imperion Head" - icon_state = "janus_head" - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6, TECH_PRECURSOR = 1) - -/obj/item/mecha_parts/part/janus_left_arm - name="Prototype Gygax Left Arm" - icon_state = "janus_l_arm" - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) - -/obj/item/mecha_parts/part/janus_right_arm - name="Prototype Gygax Right Arm" - icon_state = "janus_r_arm" - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) - -/obj/item/mecha_parts/part/janus_left_leg - name="Prototype Durand Left Leg" - icon_state = "janus_l_leg" - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) - -/obj/item/mecha_parts/part/janus_right_leg - name="Prototype Durand Right Leg" - icon_state = "janus_r_leg" - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) + ///////////////////////// +////// Mecha Parts ////// +///////////////////////// + +// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm + +/obj/item/mecha_parts + name = "mecha part" + icon = 'icons/mecha/mech_construct.dmi' + icon_state = "blank" + w_class = ITEMSIZE_HUGE + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2) + + +/obj/item/mecha_parts/chassis + name="Mecha Chassis" + icon_state = "backbone" + var/datum/construction/construct + +/obj/item/mecha_parts/chassis/attackby(obj/item/W as obj, mob/user as mob) + if(!construct || !construct.action(W, user)) + ..() + return + +/obj/item/mecha_parts/chassis/attack_hand() + return + +/////////// Ripley + +/obj/item/mecha_parts/chassis/ripley + name = "Ripley Chassis" + +/obj/item/mecha_parts/chassis/ripley/New() + ..() + construct = new /datum/construction/mecha/ripley_chassis(src) + +/obj/item/mecha_parts/part/ripley_torso + name="Ripley Torso" + desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." + icon_state = "ripley_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/ripley_left_arm + name="Ripley Left Arm" + desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "ripley_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/ripley_right_arm + name="Ripley Right Arm" + desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "ripley_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/ripley_left_leg + name="Ripley Left Leg" + desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "ripley_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/ripley_right_leg + name="Ripley Right Leg" + desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "ripley_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +///////// Gygax + +/obj/item/mecha_parts/chassis/gygax + name = "Gygax Chassis" + +/obj/item/mecha_parts/chassis/gygax/New() + ..() + construct = new /datum/construction/mecha/gygax_chassis(src) + +/obj/item/mecha_parts/part/gygax_torso + name="Gygax Torso" + desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." + icon_state = "gygax_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_head + name="Gygax Head" + desc="A Gygax head. Houses advanced surveilance and targeting sensors." + icon_state = "gygax_head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_left_arm + name="Gygax Left Arm" + desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." + icon_state = "gygax_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_right_arm + name="Gygax Right Arm" + desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." + icon_state = "gygax_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_left_leg + name="Gygax Left Leg" + icon_state = "gygax_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_right_leg + name="Gygax Right Leg" + icon_state = "gygax_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/gygax_armour + name="Gygax Armour Plates" + icon_state = "gygax_armour" + origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5) + +////////// Serenity + +/obj/item/mecha_parts/chassis/serenity + name = "Serenity Chassis" + +/obj/item/mecha_parts/chassis/serenity/New() + ..() + construct = new /datum/construction/mecha/serenity_chassis(src) + +//////////// Durand + +/obj/item/mecha_parts/chassis/durand + name = "Durand Chassis" + +/obj/item/mecha_parts/chassis/durand/New() + ..() + construct = new /datum/construction/mecha/durand_chassis(src) + +/obj/item/mecha_parts/part/durand_torso + name="Durand Torso" + icon_state = "durand_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_head + name="Durand Head" + icon_state = "durand_head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_left_arm + name="Durand Left Arm" + icon_state = "durand_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_right_arm + name="Durand Right Arm" + icon_state = "durand_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_left_leg + name="Durand Left Leg" + icon_state = "durand_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_right_leg + name="Durand Right Leg" + icon_state = "durand_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/durand_armour + name="Durand Armour Plates" + icon_state = "durand_armour" + origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5) + + + +////////// Firefighter + +/obj/item/mecha_parts/chassis/firefighter + name = "Firefighter Chassis" + +/obj/item/mecha_parts/chassis/firefighter/New() + ..() + construct = new /datum/construction/mecha/firefighter_chassis(src) +/* +/obj/item/mecha_parts/part/firefighter_torso + name="Ripley-on-Fire Torso" + icon_state = "ripley_harness" + +/obj/item/mecha_parts/part/firefighter_left_arm + name="Ripley-on-Fire Left Arm" + icon_state = "ripley_l_arm" + +/obj/item/mecha_parts/part/firefighter_right_arm + name="Ripley-on-Fire Right Arm" + icon_state = "ripley_r_arm" + +/obj/item/mecha_parts/part/firefighter_left_leg + name="Ripley-on-Fire Left Leg" + icon_state = "ripley_l_leg" + +/obj/item/mecha_parts/part/firefighter_right_leg + name="Ripley-on-Fire Right Leg" + icon_state = "ripley_r_leg" +*/ + +////////// Phazon + +/obj/item/mecha_parts/chassis/phazon + name = "Phazon Chassis" + origin_tech = list(TECH_MATERIAL = 7) + +/obj/item/mecha_parts/chassis/phazon/New() + ..() + construct = new /datum/construction/mecha/phazon_chassis(src) + +/obj/item/mecha_parts/part/phazon_torso + name="Phazon Torso" + icon_state = "phazon_harness" + //construction_time = 300 + //construction_cost = list(MAT_STEEL=35000,"glass"=10000,"phoron"=20000) + origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6) + +/obj/item/mecha_parts/part/phazon_head + name="Phazon Head" + icon_state = "phazon_head" + //construction_time = 200 + //construction_cost = list(MAT_STEEL=15000,"glass"=5000,"phoron"=10000) + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6) + +/obj/item/mecha_parts/part/phazon_left_arm + name="Phazon Left Arm" + icon_state = "phazon_l_arm" + //construction_time = 200 + //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/phazon_right_arm + name="Phazon Right Arm" + icon_state = "phazon_r_arm" + //construction_time = 200 + //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/phazon_left_leg + name="Phazon Left Leg" + icon_state = "phazon_l_leg" + //construction_time = 200 + //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) + +/obj/item/mecha_parts/part/phazon_right_leg + name="Phazon Right Leg" + icon_state = "phazon_r_leg" + //construction_time = 200 + //construction_cost = list(MAT_STEEL=20000,"phoron"=10000) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) + +///////// Odysseus + + +/obj/item/mecha_parts/chassis/odysseus + name = "Odysseus Chassis" + +/obj/item/mecha_parts/chassis/odysseus/New() + ..() + construct = new /datum/construction/mecha/odysseus_chassis(src) + +/obj/item/mecha_parts/part/odysseus_head + name="Odysseus Head" + icon_state = "odysseus_head" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2) + +/obj/item/mecha_parts/part/odysseus_torso + name="Odysseus Torso" + desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." + icon_state = "odysseus_torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/odysseus_left_arm + name="Odysseus Left Arm" + desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "odysseus_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/odysseus_right_arm + name="Odysseus Right Arm" + desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "odysseus_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/odysseus_left_leg + name="Odysseus Left Leg" + desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "odysseus_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/part/odysseus_right_leg + name="Odysseus Right Leg" + desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "odysseus_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/*/obj/item/mecha_parts/part/odysseus_armour + name="Odysseus Carapace" + icon_state = "odysseus_armour" + origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + construction_time = 200 + construction_cost = list(MAT_STEEL=15000)*/ + +////////// Janus + +/obj/item/mecha_parts/chassis/janus + name = "Janus Chassis" + origin_tech = list(TECH_MATERIAL = 7) + +/obj/item/mecha_parts/chassis/janus/New() + ..() + construct = new /datum/construction/mecha/janus_chassis(src) + +/obj/item/mecha_parts/part/janus_torso + name="Imperion Torso" + icon_state = "janus_harness" + origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 2, TECH_POWER = 6, TECH_PRECURSOR = 2) + +/obj/item/mecha_parts/part/janus_head + name="Imperion Head" + icon_state = "janus_head" + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6, TECH_PRECURSOR = 1) + +/obj/item/mecha_parts/part/janus_left_arm + name="Prototype Gygax Left Arm" + icon_state = "janus_l_arm" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/janus_right_arm + name="Prototype Gygax Right Arm" + icon_state = "janus_r_arm" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/janus_left_leg + name="Prototype Durand Left Leg" + icon_state = "janus_l_leg" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) + +/obj/item/mecha_parts/part/janus_right_leg + name="Prototype Durand Right Leg" + icon_state = "janus_r_leg" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) diff --git a/code/game/mecha/mecha_parts_ch.dm b/code/game/mecha/mecha_parts_ch.dm index 00702f1f1f..27367c6493 100644 --- a/code/game/mecha/mecha_parts_ch.dm +++ b/code/game/mecha/mecha_parts_ch.dm @@ -1,50 +1,50 @@ -/obj/item/mecha_parts/chassis/scarab - name = "Scarab Chassis" - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_chassis" - -/obj/item/mecha_parts/chassis/scarab/New() - ..() - construct = new /datum/construction/mecha/scarab_chassis(src) - -/obj/item/mecha_parts/part/scarab_torso - name="Scarab Torso" - desc="A torso part of Scarab. Contains power unit, processing core and life support systems." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_torso" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 4, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/scarab_head - name="Scarab Head" - desc="A Scarab head. Houses advanced surveilance and target marking equipment." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_head" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/scarab_left_arm - name="Scarab Left Arm" - desc="A Scarab left arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/scarab_right_arm - name="Scarab Right Arm" - desc="A Scarab right arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/scarab_left_legs - name="Scarab Left Legs" - desc="A powerful, yet lightweight, pair of legs." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_l_legs" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - -/obj/item/mecha_parts/part/scarab_right_legs - name="Scarab Right Legs" - desc="A powerful, yet lightweight, pair of legs." - icon = 'icons/mecha/mech_construct_ch.dmi' - icon_state = "scarab_r_legs" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) +/obj/item/mecha_parts/chassis/scarab + name = "Scarab Chassis" + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_chassis" + +/obj/item/mecha_parts/chassis/scarab/New() + ..() + construct = new /datum/construction/mecha/scarab_chassis(src) + +/obj/item/mecha_parts/part/scarab_torso + name="Scarab Torso" + desc="A torso part of Scarab. Contains power unit, processing core and life support systems." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 4, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/scarab_head + name="Scarab Head" + desc="A Scarab head. Houses advanced surveilance and target marking equipment." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/scarab_left_arm + name="Scarab Left Arm" + desc="A Scarab left arm. Data and power sockets are compatible with most exosuit tools and weapons." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/scarab_right_arm + name="Scarab Right Arm" + desc="A Scarab right arm. Data and power sockets are compatible with most exosuit tools and weapons." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/scarab_left_legs + name="Scarab Left Legs" + desc="A powerful, yet lightweight, pair of legs." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_l_legs" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/part/scarab_right_legs + name="Scarab Right Legs" + desc="A powerful, yet lightweight, pair of legs." + icon = 'icons/mecha/mech_construct_ch.dmi' + icon_state = "scarab_r_legs" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 01b5987112..8a3df3e024 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -1,231 +1,231 @@ -/////////////////////////////////// -//////// Mecha wreckage //////// -/////////////////////////////////// - - -/obj/effect/decal/mecha_wreckage - name = "Exosuit wreckage" - desc = "Remains of some unfortunate mecha. Completely unrepairable." - icon = 'icons/mecha/mecha.dmi' - density = TRUE - anchored = FALSE - opacity = 0 - var/list/welder_salvage = list(/obj/item/stack/material/plasteel,/obj/item/stack/material/steel,/obj/item/stack/rods) - var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil) - var/list/crowbar_salvage - var/salvage_num = 5 - -/obj/effect/decal/mecha_wreckage/New() - ..() - crowbar_salvage = new - return - -/obj/effect/decal/mecha_wreckage/ex_act(severity) - if(severity < 2) - spawn - qdel(src) - return - -/obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj) - return - - -/obj/effect/decal/mecha_wreckage/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(salvage_num <= 0) - to_chat(user, "You don't see anything that can be cut with [W].") - return - if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user)) - var/type = prob(70)?pick(welder_salvage):null - if(type) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby") - if(istype(N, /obj/item/mecha_parts/part)) - welder_salvage -= type - salvage_num-- - else - to_chat(user, "You failed to salvage anything valuable from [src].") - else - to_chat(user, "You need more welding fuel to complete this task.") - return - if(W.has_tool_quality(TOOL_WIRECUTTER)) - if(salvage_num <= 0) - to_chat(user, "You don't see anything that can be cut with [W].") - return - else if(!isemptylist(wirecutters_salvage)) - var/type = prob(70)?pick(wirecutters_salvage):null - if(type) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") - salvage_num-- - else - to_chat(user, "You failed to salvage anything valuable from [src].") - if(W.has_tool_quality(TOOL_CROWBAR)) - if(!isemptylist(crowbar_salvage)) - var/obj/S = pick(crowbar_salvage) - if(S) - S.loc = get_turf(user) - crowbar_salvage -= S - user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") - return - else - to_chat(user, "You don't see anything that can be pried with [W].") - else - ..() - return - - -/obj/effect/decal/mecha_wreckage/gygax - name = "Gygax wreckage" - icon_state = "gygax-broken" - -/obj/effect/decal/mecha_wreckage/gygax/New() - ..() - var/list/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) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/gygax/dark - name = "Dark Gygax wreckage" - icon_state = "darkgygax-broken" - -/obj/effect/decal/mecha_wreckage/gygax/adv - name = "Advanced Dark Gygax wreckage" - icon_state = "darkgygax_adv-broken" - -/obj/effect/decal/mecha_wreckage/gygax/medgax - name = "Medgax wreckage" - icon_state = "medgax-broken" - -/obj/effect/decal/mecha_wreckage/gygax/serenity - name = "Serenity wreckage" - icon_state = "medgax-broken" - -/obj/effect/decal/mecha_wreckage/marauder - name = "Marauder wreckage" - icon_state = "marauder-broken" - -/obj/effect/decal/mecha_wreckage/mauler - name = "Mauler Wreckage" - icon_state = "mauler-broken" - desc = "The syndicate won't be very happy about this..." - -/obj/effect/decal/mecha_wreckage/seraph - name = "Seraph wreckage" - icon_state = "seraph-broken" - -/obj/effect/decal/mecha_wreckage/ripley - name = "Ripley wreckage" - icon_state = "ripley-broken" - -/obj/effect/decal/mecha_wreckage/ripley/New() - ..() - var/list/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) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/ripley/firefighter - name = "Firefighter wreckage" - icon_state = "firefighter-broken" - -/obj/effect/decal/mecha_wreckage/ripley/firefighter/New() - ..() - var/list/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) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/ripley/deathripley - name = "Death-Ripley wreckage" - icon_state = "deathripley-broken" - -/obj/effect/decal/mecha_wreckage/durand - name = "Durand wreckage" - icon_state = "durand-broken" - -/obj/effect/decal/mecha_wreckage/durand/New() - ..() - var/list/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) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/phazon - name = "Phazon wreckage" - icon_state = "phazon-broken" - - -/obj/effect/decal/mecha_wreckage/odysseus - name = "Odysseus wreckage" - icon_state = "odysseus-broken" - -/obj/effect/decal/mecha_wreckage/odysseus/New() - ..() - var/list/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) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/odysseus/murdysseus - icon_state = "murdysseus-broken" - -/obj/effect/decal/mecha_wreckage/hoverpod - name = "Hover pod wreckage" - icon_state = "engineering_pod-broken" - -/obj/effect/decal/mecha_wreckage/janus - name = "Janus wreckage" - icon_state = "janus-broken" - description_info = "Due to the incredibly intricate design of this exosuit, it is impossible to salvage components from it." - -/obj/effect/decal/mecha_wreckage/shuttlecraft - name = "Shuttlecraft wreckage" - desc = "Remains of some unfortunate shuttlecraft. Completely unrepairable." - icon = 'icons/mecha/mecha64x64.dmi' - icon_state = "shuttle_standard-broken" - bound_width = 64 - bound_height = 64 +/////////////////////////////////// +//////// Mecha wreckage //////// +/////////////////////////////////// + + +/obj/effect/decal/mecha_wreckage + name = "Exosuit wreckage" + desc = "Remains of some unfortunate mecha. Completely unrepairable." + icon = 'icons/mecha/mecha.dmi' + density = TRUE + anchored = FALSE + opacity = 0 + var/list/welder_salvage = list(/obj/item/stack/material/plasteel,/obj/item/stack/material/steel,/obj/item/stack/rods) + var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil) + var/list/crowbar_salvage + var/salvage_num = 5 + +/obj/effect/decal/mecha_wreckage/New() + ..() + crowbar_salvage = new + return + +/obj/effect/decal/mecha_wreckage/ex_act(severity) + if(severity < 2) + spawn + qdel(src) + return + +/obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj) + return + + +/obj/effect/decal/mecha_wreckage/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(salvage_num <= 0) + to_chat(user, "You don't see anything that can be cut with [W].") + return + if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user)) + var/type = prob(70)?pick(welder_salvage):null + if(type) + var/N = new type(get_turf(user)) + user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby") + if(istype(N, /obj/item/mecha_parts/part)) + welder_salvage -= type + salvage_num-- + else + to_chat(user, "You failed to salvage anything valuable from [src].") + else + to_chat(user, "You need more welding fuel to complete this task.") + return + if(W.has_tool_quality(TOOL_WIRECUTTER)) + if(salvage_num <= 0) + to_chat(user, "You don't see anything that can be cut with [W].") + return + else if(!isemptylist(wirecutters_salvage)) + var/type = prob(70)?pick(wirecutters_salvage):null + if(type) + var/N = new type(get_turf(user)) + user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") + salvage_num-- + else + to_chat(user, "You failed to salvage anything valuable from [src].") + if(W.has_tool_quality(TOOL_CROWBAR)) + if(!isemptylist(crowbar_salvage)) + var/obj/S = pick(crowbar_salvage) + if(S) + S.loc = get_turf(user) + crowbar_salvage -= S + user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") + return + else + to_chat(user, "You don't see anything that can be pried with [W].") + else + ..() + return + + +/obj/effect/decal/mecha_wreckage/gygax + name = "Gygax wreckage" + icon_state = "gygax-broken" + +/obj/effect/decal/mecha_wreckage/gygax/New() + ..() + var/list/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) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return + +/obj/effect/decal/mecha_wreckage/gygax/dark + name = "Dark Gygax wreckage" + icon_state = "darkgygax-broken" + +/obj/effect/decal/mecha_wreckage/gygax/adv + name = "Advanced Dark Gygax wreckage" + icon_state = "darkgygax_adv-broken" + +/obj/effect/decal/mecha_wreckage/gygax/medgax + name = "Medgax wreckage" + icon_state = "medgax-broken" + +/obj/effect/decal/mecha_wreckage/gygax/serenity + name = "Serenity wreckage" + icon_state = "medgax-broken" + +/obj/effect/decal/mecha_wreckage/marauder + name = "Marauder wreckage" + icon_state = "marauder-broken" + +/obj/effect/decal/mecha_wreckage/mauler + name = "Mauler Wreckage" + icon_state = "mauler-broken" + desc = "The syndicate won't be very happy about this..." + +/obj/effect/decal/mecha_wreckage/seraph + name = "Seraph wreckage" + icon_state = "seraph-broken" + +/obj/effect/decal/mecha_wreckage/ripley + name = "Ripley wreckage" + icon_state = "ripley-broken" + +/obj/effect/decal/mecha_wreckage/ripley/New() + ..() + var/list/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) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return + +/obj/effect/decal/mecha_wreckage/ripley/firefighter + name = "Firefighter wreckage" + icon_state = "firefighter-broken" + +/obj/effect/decal/mecha_wreckage/ripley/firefighter/New() + ..() + var/list/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) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return + +/obj/effect/decal/mecha_wreckage/ripley/deathripley + name = "Death-Ripley wreckage" + icon_state = "deathripley-broken" + +/obj/effect/decal/mecha_wreckage/durand + name = "Durand wreckage" + icon_state = "durand-broken" + +/obj/effect/decal/mecha_wreckage/durand/New() + ..() + var/list/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) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return + +/obj/effect/decal/mecha_wreckage/phazon + name = "Phazon wreckage" + icon_state = "phazon-broken" + + +/obj/effect/decal/mecha_wreckage/odysseus + name = "Odysseus wreckage" + icon_state = "odysseus-broken" + +/obj/effect/decal/mecha_wreckage/odysseus/New() + ..() + var/list/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) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return + +/obj/effect/decal/mecha_wreckage/odysseus/murdysseus + icon_state = "murdysseus-broken" + +/obj/effect/decal/mecha_wreckage/hoverpod + name = "Hover pod wreckage" + icon_state = "engineering_pod-broken" + +/obj/effect/decal/mecha_wreckage/janus + name = "Janus wreckage" + icon_state = "janus-broken" + description_info = "Due to the incredibly intricate design of this exosuit, it is impossible to salvage components from it." + +/obj/effect/decal/mecha_wreckage/shuttlecraft + name = "Shuttlecraft wreckage" + desc = "Remains of some unfortunate shuttlecraft. Completely unrepairable." + icon = 'icons/mecha/mecha64x64.dmi' + icon_state = "shuttle_standard-broken" + bound_width = 64 + bound_height = 64 diff --git a/code/game/mecha/mecha_wreckage_ch.dm b/code/game/mecha/mecha_wreckage_ch.dm index 2725827c64..6ebd372ac6 100644 --- a/code/game/mecha/mecha_wreckage_ch.dm +++ b/code/game/mecha/mecha_wreckage_ch.dm @@ -1,16 +1,16 @@ -/obj/effect/decal/mecha_wreckage/scarab - name = "Scarab Wreckage" - icon = 'icons/mecha/mecha_ch.dmi' - icon_state = "scarab_militia-broken" - desc = "Wasn't fast enough..." - - welder_salvage = list( - /obj/item/mecha_parts/part/scarab_torso, - /obj/item/mecha_parts/part/scarab_head, - /obj/item/mecha_parts/part/scarab_left_arm, - /obj/item/mecha_parts/part/scarab_right_arm, - /obj/item/mecha_parts/part/scarab_left_legs, - /obj/item/mecha_parts/part/scarab_right_legs, - /obj/item/stack/material/plasteel, - /obj/item/stack/material/steel, +/obj/effect/decal/mecha_wreckage/scarab + name = "Scarab Wreckage" + icon = 'icons/mecha/mecha_ch.dmi' + icon_state = "scarab_militia-broken" + desc = "Wasn't fast enough..." + + welder_salvage = list( + /obj/item/mecha_parts/part/scarab_torso, + /obj/item/mecha_parts/part/scarab_head, + /obj/item/mecha_parts/part/scarab_left_arm, + /obj/item/mecha_parts/part/scarab_right_arm, + /obj/item/mecha_parts/part/scarab_left_legs, + /obj/item/mecha_parts/part/scarab_right_legs, + /obj/item/stack/material/plasteel, + /obj/item/stack/material/steel, /obj/item/stack/rods) \ No newline at end of file diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 973ddec3fc..b001e50822 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,43 +1,43 @@ -/obj/mecha/medical - max_hull_equip = 1 - max_weapon_equip = 0 - max_utility_equip = 2 - max_universal_equip = 1 - max_special_equip = 1 - - stomp_sound = 'sound/mecha/mechmove01.ogg' - - cargo_capacity = 1 - - starting_components = list( - /obj/item/mecha_parts/component/hull, - /obj/item/mecha_parts/component/actuator, - /obj/item/mecha_parts/component/armor/lightweight, - /obj/item/mecha_parts/component/gas, - /obj/item/mecha_parts/component/electrical - ) - -/obj/mecha/medical/Initialize() - . = ..() - var/turf/T = get_turf(src) - if(isPlayerLevel(T.z)) - new /obj/item/mecha_parts/mecha_tracking(src) - -/* // One horrific bastardization of glorious inheritence dead. A billion to go. ~Mech -/obj/mecha/medical/mechturn(direction) - set_dir(direction) - playsound(src,'sound/mecha/mechmove01.ogg',40,1) - return 1 - -/obj/mecha/medical/mechstep(direction) - var/result = step(src,direction) - if(result) - playsound(src,'sound/mecha/mechstep.ogg',25,1) - return result - -/obj/mecha/medical/mechsteprand() - var/result = step_rand(src) - if(result) - playsound(src,'sound/mecha/mechstep.ogg',25,1) - return result -*/ +/obj/mecha/medical + max_hull_equip = 1 + max_weapon_equip = 0 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + + stomp_sound = 'sound/mecha/mechmove01.ogg' + + cargo_capacity = 1 + + starting_components = list( + /obj/item/mecha_parts/component/hull, + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor/lightweight, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) + +/obj/mecha/medical/Initialize() + . = ..() + var/turf/T = get_turf(src) + if(isPlayerLevel(T.z)) + new /obj/item/mecha_parts/mecha_tracking(src) + +/* // One horrific bastardization of glorious inheritence dead. A billion to go. ~Mech +/obj/mecha/medical/mechturn(direction) + set_dir(direction) + playsound(src,'sound/mecha/mechmove01.ogg',40,1) + return 1 + +/obj/mecha/medical/mechstep(direction) + var/result = step(src,direction) + if(result) + playsound(src,'sound/mecha/mechstep.ogg',25,1) + return result + +/obj/mecha/medical/mechsteprand() + var/result = step_rand(src) + if(result) + playsound(src,'sound/mecha/mechstep.ogg',25,1) + return result +*/ diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 8d4ee98fbf..eb5a53fbfa 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -1,150 +1,150 @@ -/obj/mecha/working/ripley - desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world." - name = "APLU \"Ripley\"" - icon_state = "ripley" - initial_icon = "ripley" - step_in = 5 // vorestation edit, was 6 but that's PAINFULLY slow - step_energy_drain = 5 // vorestation edit because 10 drained a significant chunk of its cell before you even got out the airlock - max_temperature = 20000 - health = 200 - maxhealth = 200 //Don't forget to update the /old variant if you change this number. - wreckage = /obj/effect/decal/mecha_wreckage/ripley - cargo_capacity = 10 - var/obj/item/weapon/mining_scanner/orescanner // vorestation addition - - minimum_penetration = 10 - - encumbrance_gap = 2 - - starting_components = list( - /obj/item/mecha_parts/component/hull/durable, - /obj/item/mecha_parts/component/actuator, - /obj/item/mecha_parts/component/armor/mining, - /obj/item/mecha_parts/component/gas, - /obj/item/mecha_parts/component/electrical - ) - - icon_scale_x = 1.2 - icon_scale_y = 1.2 - -/obj/mecha/working/ripley/Move() - . = ..() - if(.) - collect_ore() - -/obj/mecha/working/ripley/proc/collect_ore() - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/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/weapon/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_box.stored_ore[ore.material]++ - qdel(ore) - -/obj/mecha/working/ripley/Destroy() - for(var/atom/movable/A in src.cargo) - A.loc = loc - var/turf/T = loc - if(istype(T)) - T.Entered(A) - step_rand(A) - cargo.Cut() - ..() - -/obj/mecha/working/ripley/firefighter - desc = "Standard APLU chassis was refitted with additional thermal protection and cistern." - name = "APLU \"Firefighter\"" - icon_state = "firefighter" - initial_icon = "firefighter" - max_temperature = 65000 - health = 250 - lights_power = 8 - wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter - max_hull_equip = 2 - max_weapon_equip = 0 - max_utility_equip = 2 - max_universal_equip = 1 - max_special_equip = 1 - -/obj/mecha/working/ripley/deathripley - desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" - name = "DEATH-RIPLEY" - icon_state = "deathripley" - initial_icon = "deathripley" - step_in = 2 - opacity=0 - lights_power = 60 - wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley - step_energy_drain = 0 - max_hull_equip = 1 - max_weapon_equip = 1 - max_utility_equip = 3 - max_universal_equip = 1 - max_special_equip = 1 - -/obj/mecha/working/ripley/deathripley/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety - ME.attach(src) - return - -/obj/mecha/working/ripley/mining - desc = "An old, dusty mining ripley." - name = "APLU \"Miner\"" - -/obj/mecha/working/ripley/mining/Initialize() - . = ..() - //Attach drill - if(prob(25)) //Possible diamond drill... Feeling lucky? - var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - D.attach(src) - else - var/obj/item/mecha_parts/mecha_equipment/tool/drill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill - D.attach(src) - - //Attach hydrolic clamp - var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - HC.attach(src) - for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily - qdel (B) - -/obj/mecha/working/ripley/antique - name = "APLU \"Geiger\"" - desc = "You can't beat the classics." - icon_state = "ripley-old" - initial_icon = "ripley-old" - - show_pilot = TRUE - pilot_lift = 5 - - max_utility_equip = 1 - max_universal_equip = 3 - - icon_scale_x = 1 - icon_scale_y = 1 - -//Vorestation Edit Start - -/obj/mecha/working/ripley/New() - ..() - orescanner = new /obj/item/weapon/mining_scanner - -/obj/mecha/working/ripley/verb/detect_ore() - set category = "Exosuit Interface" - set name = "Detect Ores" - set src = usr.loc - set popup_menu = 0 - - orescanner.attack_self(usr) - -//Vorestation Edit End - -//Meant for random spawns. -/obj/mecha/working/ripley/mining/old - desc = "An old, dusty mining ripley." - -/obj/mecha/working/ripley/mining/old/New() - ..() - health = 25 - maxhealth = 190 //Just slightly worse. - cell.charge = rand(0, cell.charge) +/obj/mecha/working/ripley + desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world." + name = "APLU \"Ripley\"" + icon_state = "ripley" + initial_icon = "ripley" + step_in = 5 // vorestation edit, was 6 but that's PAINFULLY slow + step_energy_drain = 5 // vorestation edit because 10 drained a significant chunk of its cell before you even got out the airlock + max_temperature = 20000 + health = 200 + maxhealth = 200 //Don't forget to update the /old variant if you change this number. + wreckage = /obj/effect/decal/mecha_wreckage/ripley + cargo_capacity = 10 + var/obj/item/weapon/mining_scanner/orescanner // vorestation addition + + minimum_penetration = 10 + + encumbrance_gap = 2 + + starting_components = list( + /obj/item/mecha_parts/component/hull/durable, + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor/mining, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) + + icon_scale_x = 1.2 + icon_scale_y = 1.2 + +/obj/mecha/working/ripley/Move() + . = ..() + if(.) + collect_ore() + +/obj/mecha/working/ripley/proc/collect_ore() + if(locate(/obj/item/mecha_parts/mecha_equipment/tool/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/weapon/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_box.stored_ore[ore.material]++ + qdel(ore) + +/obj/mecha/working/ripley/Destroy() + for(var/atom/movable/A in src.cargo) + A.loc = loc + var/turf/T = loc + if(istype(T)) + T.Entered(A) + step_rand(A) + cargo.Cut() + ..() + +/obj/mecha/working/ripley/firefighter + desc = "Standard APLU chassis was refitted with additional thermal protection and cistern." + name = "APLU \"Firefighter\"" + icon_state = "firefighter" + initial_icon = "firefighter" + max_temperature = 65000 + health = 250 + lights_power = 8 + wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter + max_hull_equip = 2 + max_weapon_equip = 0 + max_utility_equip = 2 + max_universal_equip = 1 + max_special_equip = 1 + +/obj/mecha/working/ripley/deathripley + desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" + name = "DEATH-RIPLEY" + icon_state = "deathripley" + initial_icon = "deathripley" + step_in = 2 + opacity=0 + lights_power = 60 + wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley + step_energy_drain = 0 + max_hull_equip = 1 + max_weapon_equip = 1 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 + +/obj/mecha/working/ripley/deathripley/Initialize() + . = ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety + ME.attach(src) + return + +/obj/mecha/working/ripley/mining + desc = "An old, dusty mining ripley." + name = "APLU \"Miner\"" + +/obj/mecha/working/ripley/mining/Initialize() + . = ..() + //Attach drill + if(prob(25)) //Possible diamond drill... Feeling lucky? + var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + D.attach(src) + else + var/obj/item/mecha_parts/mecha_equipment/tool/drill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill + D.attach(src) + + //Attach hydrolic clamp + var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + HC.attach(src) + for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily + qdel (B) + +/obj/mecha/working/ripley/antique + name = "APLU \"Geiger\"" + desc = "You can't beat the classics." + icon_state = "ripley-old" + initial_icon = "ripley-old" + + show_pilot = TRUE + pilot_lift = 5 + + max_utility_equip = 1 + max_universal_equip = 3 + + icon_scale_x = 1 + icon_scale_y = 1 + +//Vorestation Edit Start + +/obj/mecha/working/ripley/New() + ..() + orescanner = new /obj/item/weapon/mining_scanner + +/obj/mecha/working/ripley/verb/detect_ore() + set category = "Exosuit Interface" + set name = "Detect Ores" + set src = usr.loc + set popup_menu = 0 + + orescanner.attack_self(usr) + +//Vorestation Edit End + +//Meant for random spawns. +/obj/mecha/working/ripley/mining/old + desc = "An old, dusty mining ripley." + +/obj/mecha/working/ripley/mining/old/New() + ..() + health = 25 + maxhealth = 190 //Just slightly worse. + cell.charge = rand(0, cell.charge) diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index f2149b1cdd..6d19bbd6b5 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -1,63 +1,63 @@ -/obj/mecha/working - internal_damage_threshold = 60 - max_hull_equip = 1 - max_weapon_equip = 0 - max_utility_equip = 3 - max_universal_equip = 1 - max_special_equip = 1 - -/obj/mecha/working/Initialize() - . = ..() - var/turf/T = get_turf(src) - if(isPlayerLevel(T.z)) - new /obj/item/mecha_parts/mecha_tracking(src) - -/* This stuff has been generalized! -/obj/mecha/working/Destroy() - for(var/mob/M in src) - if(M==src.occupant) - continue - M.loc = get_turf(src) - M.loc.Entered(M) - step_rand(M) - for(var/atom/movable/A in src.cargo) - A.loc = get_turf(src) - var/turf/T = get_turf(A) - if(T) - T.Entered(A) - step_rand(A) - ..() - return - -/obj/mecha/working/Topic(href, href_list) - ..() - if(href_list["drop_from_cargo"]) - var/obj/O = locate(href_list["drop_from_cargo"]) - if(O && O in src.cargo) - src.occupant_message("You unload [O].") - O.loc = get_turf(src) - src.cargo -= O - var/turf/T = get_turf(O) - if(T) - T.Entered(O) - src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") - return - -/obj/mecha/working/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -/obj/mecha/working/get_stats_part() - var/output = ..() - output += "Cargo Compartment Contents:
                    " - if(src.cargo.len) - for(var/obj/O in src.cargo) - output += "Unload : [O]
                    " - else - output += "Nothing" - output += "
                    " - return output -*/ -/obj/mecha/working/range_action(atom/target as obj|mob|turf) - return +/obj/mecha/working + internal_damage_threshold = 60 + max_hull_equip = 1 + max_weapon_equip = 0 + max_utility_equip = 3 + max_universal_equip = 1 + max_special_equip = 1 + +/obj/mecha/working/Initialize() + . = ..() + var/turf/T = get_turf(src) + if(isPlayerLevel(T.z)) + new /obj/item/mecha_parts/mecha_tracking(src) + +/* This stuff has been generalized! +/obj/mecha/working/Destroy() + for(var/mob/M in src) + if(M==src.occupant) + continue + M.loc = get_turf(src) + M.loc.Entered(M) + step_rand(M) + for(var/atom/movable/A in src.cargo) + A.loc = get_turf(src) + var/turf/T = get_turf(A) + if(T) + T.Entered(A) + step_rand(A) + ..() + return + +/obj/mecha/working/Topic(href, href_list) + ..() + if(href_list["drop_from_cargo"]) + var/obj/O = locate(href_list["drop_from_cargo"]) + if(O && O in src.cargo) + src.occupant_message("You unload [O].") + O.loc = get_turf(src) + src.cargo -= O + var/turf/T = get_turf(O) + if(T) + T.Entered(O) + src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") + return + +/obj/mecha/working/Exit(atom/movable/O) + if(O in cargo) + return 0 + return ..() + +/obj/mecha/working/get_stats_part() + var/output = ..() + output += "Cargo Compartment Contents:
                    " + if(src.cargo.len) + for(var/obj/O in src.cargo) + output += "Unload : [O]
                    " + else + output += "Nothing" + output += "
                    " + return output +*/ +/obj/mecha/working/range_action(atom/target as obj|mob|turf) + return diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index a4f5125b72..6e33112f73 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -1,208 +1,208 @@ - - -/atom/movable - var/can_buckle = FALSE - var/buckle_movable = 0 - var/buckle_dir = 0 - var/buckle_lying = -1 //bed-like behavior, forces mob.lying = buckle_lying if != -1 - var/buckle_require_restraints = 0 //require people to be handcuffed before being able to buckle. eg: pipes -// var/mob/living/buckled_mob = null - var/list/mob/living/buckled_mobs = null //list() - var/max_buckled_mobs = 1 - - -/atom/movable/attack_hand(mob/living/user) - . = ..() -// if(can_buckle && buckled_mob) -// user_unbuckle_mob(user) - - if(can_buckle && has_buckled_mobs()) - if(buckled_mobs.len > 1) - var/unbuckled = tgui_input_list(user, "Who do you wish to unbuckle?","Unbuckle Who?", buckled_mobs) - if(user_unbuckle_mob(unbuckled, user)) - return TRUE - else - if(user_unbuckle_mob(buckled_mobs[1], user)) - return TRUE - -/obj/proc/attack_alien(mob/user as mob) //For calling in the event of Xenomorph or other alien checks. - return - -/obj/attack_robot(mob/living/user) - if(Adjacent(user) && has_buckled_mobs()) //Checks if what we're touching is adjacent to us and has someone buckled to it. This should prevent interacting with anti-robot manual valves among other things. - return attack_hand(user) //Process as if we're a normal person touching the object. - return ..() //Otherwise, treat this as an AI click like usual. - -/atom/movable/MouseDrop_T(mob/living/M, mob/living/user) - . = ..() - if(can_buckle && istype(M)) - if(user_buckle_mob(M, user)) - return TRUE - -/atom/movable/proc/has_buckled_mobs() - return LAZYLEN(buckled_mobs) - -/atom/movable/Destroy() - unbuckle_all_mobs() - return ..() - - -/atom/movable/proc/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) - if(check_loc && M.loc != loc) - return FALSE - - if(!can_buckle_check(M, forced)) - return FALSE - - if(M == src) - stack_trace("Recursive buckle warning: [M] being buckled to self.") - return - - M.buckled = src - M.facing_dir = null - M.set_dir(buckle_dir ? buckle_dir : dir) - M.update_canmove() - M.update_floating( M.Check_Dense_Object() ) -// buckled_mob = M - buckled_mobs |= M - - //VOREStation Add - if(riding_datum) - riding_datum.ridden = src - riding_datum.handle_vehicle_offsets() - M.update_water() - //VOREStation Add End - - post_buckle_mob(M) - M.throw_alert("buckled", /obj/screen/alert/restrained/buckled, new_master = src) - return TRUE - -/atom/movable/proc/unbuckle_mob(mob/living/buckled_mob, force = FALSE) - if(!buckled_mob) // If we didn't get told which mob needs to get unbuckled, just assume its the first one on the list. - if(has_buckled_mobs()) - buckled_mob = buckled_mobs[1] - else - return - - if(buckled_mob && buckled_mob.buckled == src) - . = buckled_mob - buckled_mob.buckled = null - buckled_mob.anchored = initial(buckled_mob.anchored) - buckled_mob.update_canmove() - buckled_mob.update_floating( buckled_mob.Check_Dense_Object() ) - buckled_mob.clear_alert("buckled") - // buckled_mob = null - buckled_mobs -= buckled_mob - - //VOREStation Add - buckled_mob.update_water() - if(riding_datum) - riding_datum.restore_position(buckled_mob) - riding_datum.handle_vehicle_offsets() // So the person in back goes to the front. - //VOREStation Add End - post_buckle_mob(.) - -/atom/movable/proc/unbuckle_all_mobs(force = FALSE) - if(!has_buckled_mobs()) - return - for(var/m in buckled_mobs) - unbuckle_mob(m, force) - -//Handle any extras after buckling/unbuckling -//Called on buckle_mob() and unbuckle_mob() -/atom/movable/proc/post_buckle_mob(mob/living/M) - return - -//Wrapper procs that handle sanity and user feedback -/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = FALSE) - if(!ticker) - to_chat(user, "You can't buckle anyone in before the game starts.") - return FALSE // Is this really needed? - if(!user.Adjacent(M) || user.restrained() || user.stat || istype(user, /mob/living/silicon/pai)) - return FALSE - if(M in buckled_mobs) - to_chat(user, "\The [M] is already buckled to \the [src].") - return FALSE - if(!can_buckle_check(M, forced)) - return FALSE - - add_fingerprint(user) -// unbuckle_mob() - - //can't buckle unless you share locs so try to move M to the obj. - if(M.loc != src.loc) - if(M.Adjacent(src) && user.Adjacent(src)) - M.forceMove(get_turf(src)) - // step_towards(M, src) - - . = buckle_mob(M, forced) - playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1) - if(.) - var/reveal_message = list("buckled_mob" = null, "buckled_to" = null) //VORE EDIT: This being a list and messages existing for the buckle target atom. - if(!silent) - if(M == user) - reveal_message["buckled_mob"] = "You come out of hiding and buckle yourself to [src]." //VORE EDIT - reveal_message["buckled_to"] = "You come out of hiding as [M.name] buckles themselves to you." //VORE EDIT - M.visible_message(\ - "[M.name] buckles themselves to [src].",\ - "You buckle yourself to [src].",\ - "You hear metal clanking.") - else - reveal_message["buckled_mob"] = "You are revealed as you are buckled to [src]." //VORE EDIT - reveal_message["buckled_to"] = "You are revealed as [M.name] is buckled to you." //VORE EDIT - M.visible_message(\ - "[M.name] is buckled to [src] by [user.name]!",\ - "You are buckled to [src] by [user.name]!",\ - "You hear metal clanking.") - - M.reveal(silent, reveal_message["buckled_mob"]) //Reveal people so they aren't buckled to chairs from behind. //VORE EDIT, list arg instead of simple message var for buckled mob - //Vore edit start - var/mob/living/L = src - if(istype(L)) - L.reveal(silent, reveal_message["buckled_to"]) - //Vore edit end - -/atom/movable/proc/user_unbuckle_mob(mob/living/buckled_mob, mob/user) - var/mob/living/M = unbuckle_mob(buckled_mob) - playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1) - if(M) - if(M != user) - M.visible_message(\ - "[M.name] was unbuckled by [user.name]!",\ - "You were unbuckled from [src] by [user.name].",\ - "You hear metal clanking.") - else - M.visible_message(\ - "[M.name] unbuckled themselves!",\ - "You unbuckle yourself from [src].",\ - "You hear metal clanking.") - add_fingerprint(user) - return M - -/atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct, movetime) - for(var/mob/living/L as anything in buckled_mobs) - if(!L.Move(loc, direct, movetime)) - L.forceMove(loc, direct, movetime) - L.last_move = last_move - L.inertia_dir = last_move - - if(!buckle_dir) - L.set_dir(dir) - else - L.set_dir(buckle_dir) - -/atom/movable/proc/can_buckle_check(mob/living/M, forced = FALSE) - if(!buckled_mobs) - buckled_mobs = list() - - if(!istype(M)) - return FALSE - - if((!can_buckle && !forced) || M.buckled || M.pinned.len || (buckled_mobs.len >= max_buckled_mobs) || (buckle_require_restraints && !M.restrained())) - return FALSE - - if(has_buckled_mobs() && buckled_mobs.len >= max_buckled_mobs) //Handles trying to buckle yourself to the chair when someone is on it - to_chat(M, "\The [src] can't buckle anymore people.") - return FALSE - - return TRUE + + +/atom/movable + var/can_buckle = FALSE + var/buckle_movable = 0 + var/buckle_dir = 0 + var/buckle_lying = -1 //bed-like behavior, forces mob.lying = buckle_lying if != -1 + var/buckle_require_restraints = 0 //require people to be handcuffed before being able to buckle. eg: pipes +// var/mob/living/buckled_mob = null + var/list/mob/living/buckled_mobs = null //list() + var/max_buckled_mobs = 1 + + +/atom/movable/attack_hand(mob/living/user) + . = ..() +// if(can_buckle && buckled_mob) +// user_unbuckle_mob(user) + + if(can_buckle && has_buckled_mobs()) + if(buckled_mobs.len > 1) + var/unbuckled = tgui_input_list(user, "Who do you wish to unbuckle?","Unbuckle Who?", buckled_mobs) + if(user_unbuckle_mob(unbuckled, user)) + return TRUE + else + if(user_unbuckle_mob(buckled_mobs[1], user)) + return TRUE + +/obj/proc/attack_alien(mob/user as mob) //For calling in the event of Xenomorph or other alien checks. + return + +/obj/attack_robot(mob/living/user) + if(Adjacent(user) && has_buckled_mobs()) //Checks if what we're touching is adjacent to us and has someone buckled to it. This should prevent interacting with anti-robot manual valves among other things. + return attack_hand(user) //Process as if we're a normal person touching the object. + return ..() //Otherwise, treat this as an AI click like usual. + +/atom/movable/MouseDrop_T(mob/living/M, mob/living/user) + . = ..() + if(can_buckle && istype(M)) + if(user_buckle_mob(M, user)) + return TRUE + +/atom/movable/proc/has_buckled_mobs() + return LAZYLEN(buckled_mobs) + +/atom/movable/Destroy() + unbuckle_all_mobs() + return ..() + + +/atom/movable/proc/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) + if(check_loc && M.loc != loc) + return FALSE + + if(!can_buckle_check(M, forced)) + return FALSE + + if(M == src) + stack_trace("Recursive buckle warning: [M] being buckled to self.") + return + + M.buckled = src + M.facing_dir = null + M.set_dir(buckle_dir ? buckle_dir : dir) + M.update_canmove() + M.update_floating( M.Check_Dense_Object() ) +// buckled_mob = M + buckled_mobs |= M + + //VOREStation Add + if(riding_datum) + riding_datum.ridden = src + riding_datum.handle_vehicle_offsets() + M.update_water() + //VOREStation Add End + + post_buckle_mob(M) + M.throw_alert("buckled", /obj/screen/alert/restrained/buckled, new_master = src) + return TRUE + +/atom/movable/proc/unbuckle_mob(mob/living/buckled_mob, force = FALSE) + if(!buckled_mob) // If we didn't get told which mob needs to get unbuckled, just assume its the first one on the list. + if(has_buckled_mobs()) + buckled_mob = buckled_mobs[1] + else + return + + if(buckled_mob && buckled_mob.buckled == src) + . = buckled_mob + buckled_mob.buckled = null + buckled_mob.anchored = initial(buckled_mob.anchored) + buckled_mob.update_canmove() + buckled_mob.update_floating( buckled_mob.Check_Dense_Object() ) + buckled_mob.clear_alert("buckled") + // buckled_mob = null + buckled_mobs -= buckled_mob + + //VOREStation Add + buckled_mob.update_water() + if(riding_datum) + riding_datum.restore_position(buckled_mob) + riding_datum.handle_vehicle_offsets() // So the person in back goes to the front. + //VOREStation Add End + post_buckle_mob(.) + +/atom/movable/proc/unbuckle_all_mobs(force = FALSE) + if(!has_buckled_mobs()) + return + for(var/m in buckled_mobs) + unbuckle_mob(m, force) + +//Handle any extras after buckling/unbuckling +//Called on buckle_mob() and unbuckle_mob() +/atom/movable/proc/post_buckle_mob(mob/living/M) + return + +//Wrapper procs that handle sanity and user feedback +/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = FALSE) + if(!ticker) + to_chat(user, "You can't buckle anyone in before the game starts.") + return FALSE // Is this really needed? + if(!user.Adjacent(M) || user.restrained() || user.stat || istype(user, /mob/living/silicon/pai)) + return FALSE + if(M in buckled_mobs) + to_chat(user, "\The [M] is already buckled to \the [src].") + return FALSE + if(!can_buckle_check(M, forced)) + return FALSE + + add_fingerprint(user) +// unbuckle_mob() + + //can't buckle unless you share locs so try to move M to the obj. + if(M.loc != src.loc) + if(M.Adjacent(src) && user.Adjacent(src)) + M.forceMove(get_turf(src)) + // step_towards(M, src) + + . = buckle_mob(M, forced) + playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1) + if(.) + var/reveal_message = list("buckled_mob" = null, "buckled_to" = null) //VORE EDIT: This being a list and messages existing for the buckle target atom. + if(!silent) + if(M == user) + reveal_message["buckled_mob"] = "You come out of hiding and buckle yourself to [src]." //VORE EDIT + reveal_message["buckled_to"] = "You come out of hiding as [M.name] buckles themselves to you." //VORE EDIT + M.visible_message(\ + "[M.name] buckles themselves to [src].",\ + "You buckle yourself to [src].",\ + "You hear metal clanking.") + else + reveal_message["buckled_mob"] = "You are revealed as you are buckled to [src]." //VORE EDIT + reveal_message["buckled_to"] = "You are revealed as [M.name] is buckled to you." //VORE EDIT + M.visible_message(\ + "[M.name] is buckled to [src] by [user.name]!",\ + "You are buckled to [src] by [user.name]!",\ + "You hear metal clanking.") + + M.reveal(silent, reveal_message["buckled_mob"]) //Reveal people so they aren't buckled to chairs from behind. //VORE EDIT, list arg instead of simple message var for buckled mob + //Vore edit start + var/mob/living/L = src + if(istype(L)) + L.reveal(silent, reveal_message["buckled_to"]) + //Vore edit end + +/atom/movable/proc/user_unbuckle_mob(mob/living/buckled_mob, mob/user) + var/mob/living/M = unbuckle_mob(buckled_mob) + playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1) + if(M) + if(M != user) + M.visible_message(\ + "[M.name] was unbuckled by [user.name]!",\ + "You were unbuckled from [src] by [user.name].",\ + "You hear metal clanking.") + else + M.visible_message(\ + "[M.name] unbuckled themselves!",\ + "You unbuckle yourself from [src].",\ + "You hear metal clanking.") + add_fingerprint(user) + return M + +/atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct, movetime) + for(var/mob/living/L as anything in buckled_mobs) + if(!L.Move(loc, direct, movetime)) + L.forceMove(loc, direct, movetime) + L.last_move = last_move + L.inertia_dir = last_move + + if(!buckle_dir) + L.set_dir(dir) + else + L.set_dir(buckle_dir) + +/atom/movable/proc/can_buckle_check(mob/living/M, forced = FALSE) + if(!buckled_mobs) + buckled_mobs = list() + + if(!istype(M)) + return FALSE + + if((!can_buckle && !forced) || M.buckled || M.pinned.len || (buckled_mobs.len >= max_buckled_mobs) || (buckle_require_restraints && !M.restrained())) + return FALSE + + if(has_buckled_mobs() && buckled_mobs.len >= max_buckled_mobs) //Handles trying to buckle yourself to the chair when someone is on it + to_chat(M, "\The [src] can't buckle anymore people.") + return FALSE + + return TRUE diff --git a/code/game/objects/effects/alien/alien egg.dm b/code/game/objects/effects/alien/alien egg.dm index da12ae3f16..2b980faac7 100644 --- a/code/game/objects/effects/alien/alien egg.dm +++ b/code/game/objects/effects/alien/alien egg.dm @@ -1,96 +1,96 @@ -#define MAX_PROGRESS 100 - -/obj/structure/alien/egg //CHOMPedit this entire file is a CHOMPedit - desc = "It looks like a weird egg." - name = "egg" - icon_state = "egg_growing" - density = 0 - anchored = 1 - var/progress = 0 - -/obj/structure/alien/egg/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/alien/egg/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/alien/egg/CanUseTopic(var/mob/user) - return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE - -/obj/structure/alien/egg/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["spawn"]) - attack_ghost(usr) - -/obj/structure/alien/egg/process() - progress++ - if(progress >= MAX_PROGRESS) - for(var/mob/observer/dead/O) //CHOMPedit fixed the snowflake ghost_pod notification. - if(O.client) - to_chat(O, "An alien is ready to hatch! (spawn)") - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/structure/alien/egg/update_icon() - if(progress == -1) - icon_state = "egg_hatched" - else if(progress < MAX_PROGRESS) - icon_state = "egg_growing" - else - icon_state = "egg" - -/obj/structure/alien/egg/attack_ghost(var/mob/observer/ghost/user) - if(progress == -1) //Egg has been hatched. - return - - if(progress < MAX_PROGRESS) - to_chat(user, "\The [src] has not yet matured.") - return - - if(!user.MayRespawn(1)) - return - - // Check for bans properly. - if(jobban_isbanned(user, MODE_XENOMORPH)) - to_chat(user, "You are banned from playing a Genaprawn.") //CHOMPedit - return - - var/confirm = alert(user, "Are you sure you want to join as a Genaprawn larva?", "Become Larva", "No", "Yes") //CHOMPedit - - if(!src || confirm != "Yes") - return - - if(!user || !user.ckey) - return - - if(progress == -1) //Egg has been hatched. - to_chat(user, "Too slow...") - return - - flick("egg_opening",src) - progress = -1 // No harvesting pls. - sleep(5) - - if(!src || !user) - visible_message("\The [src] writhes with internal motion, but nothing comes out.") - progress = MAX_PROGRESS // Someone else can have a go. - return // What a pain. - - // Create the mob, transfer over key. - var/mob/living/carbon/alien/larva/larva = new(get_turf(src)) - larva.ckey = user.ckey - spawn(-1) - if(user) qdel(user) // Remove the keyless ghost if it exists. - - visible_message("\The [src] splits open with a wet slithering noise, and \the [larva] writhes free!") - - // Turn us into a hatched egg. - name = "hatched alien egg" - desc += " This one has hatched." - update_icon() - -#undef MAX_PROGRESS +#define MAX_PROGRESS 100 + +/obj/structure/alien/egg //CHOMPedit this entire file is a CHOMPedit + desc = "It looks like a weird egg." + name = "egg" + icon_state = "egg_growing" + density = 0 + anchored = 1 + var/progress = 0 + +/obj/structure/alien/egg/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/structure/alien/egg/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/structure/alien/egg/CanUseTopic(var/mob/user) + return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE + +/obj/structure/alien/egg/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["spawn"]) + attack_ghost(usr) + +/obj/structure/alien/egg/process() + progress++ + if(progress >= MAX_PROGRESS) + for(var/mob/observer/dead/O) //CHOMPedit fixed the snowflake ghost_pod notification. + if(O.client) + to_chat(O, "An alien is ready to hatch! (spawn)") + STOP_PROCESSING(SSobj, src) + update_icon() + +/obj/structure/alien/egg/update_icon() + if(progress == -1) + icon_state = "egg_hatched" + else if(progress < MAX_PROGRESS) + icon_state = "egg_growing" + else + icon_state = "egg" + +/obj/structure/alien/egg/attack_ghost(var/mob/observer/ghost/user) + if(progress == -1) //Egg has been hatched. + return + + if(progress < MAX_PROGRESS) + to_chat(user, "\The [src] has not yet matured.") + return + + if(!user.MayRespawn(1)) + return + + // Check for bans properly. + if(jobban_isbanned(user, MODE_XENOMORPH)) + to_chat(user, "You are banned from playing a Genaprawn.") //CHOMPedit + return + + var/confirm = alert(user, "Are you sure you want to join as a Genaprawn larva?", "Become Larva", "No", "Yes") //CHOMPedit + + if(!src || confirm != "Yes") + return + + if(!user || !user.ckey) + return + + if(progress == -1) //Egg has been hatched. + to_chat(user, "Too slow...") + return + + flick("egg_opening",src) + progress = -1 // No harvesting pls. + sleep(5) + + if(!src || !user) + visible_message("\The [src] writhes with internal motion, but nothing comes out.") + progress = MAX_PROGRESS // Someone else can have a go. + return // What a pain. + + // Create the mob, transfer over key. + var/mob/living/carbon/alien/larva/larva = new(get_turf(src)) + larva.ckey = user.ckey + spawn(-1) + if(user) qdel(user) // Remove the keyless ghost if it exists. + + visible_message("\The [src] splits open with a wet slithering noise, and \the [larva] writhes free!") + + // Turn us into a hatched egg. + name = "hatched alien egg" + desc += " This one has hatched." + update_icon() + +#undef MAX_PROGRESS diff --git a/code/game/objects/effects/alien/alien.dm b/code/game/objects/effects/alien/alien.dm index 5036f71c63..0238e04d74 100644 --- a/code/game/objects/effects/alien/alien.dm +++ b/code/game/objects/effects/alien/alien.dm @@ -1,62 +1,62 @@ -/obj/structure/alien ////CHOMPedit This entire file is a CHOMPedit, for new eggs - name = "alien thing" - desc = "There's something alien about this." - icon = 'icons/mob/alien.dmi' - layer = ABOVE_JUNK_LAYER - var/health = 50 - -/obj/structure/alien/proc/healthcheck() - if(health <=0) - set_density(0) - qdel(src) - return - -/obj/structure/alien/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/structure/alien/ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - if (prob(50)) - health-=50 - else - health-=25 - healthcheck() - return - -/obj/structure/alien/hitby(AM as mob|obj) - ..() - visible_message("\The [src] was hit by \the [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - -/obj/structure/alien/attack_generic() - attack_hand(usr) - -/obj/structure/alien/attackby(var/obj/item/weapon/W, var/mob/user) - health = max(0, health - W.force) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - healthcheck() - ..() - return - -/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density +/obj/structure/alien ////CHOMPedit This entire file is a CHOMPedit, for new eggs + name = "alien thing" + desc = "There's something alien about this." + icon = 'icons/mob/alien.dmi' + layer = ABOVE_JUNK_LAYER + var/health = 50 + +/obj/structure/alien/proc/healthcheck() + if(health <=0) + set_density(0) + qdel(src) + return + +/obj/structure/alien/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + healthcheck() + return + +/obj/structure/alien/ex_act(severity) + switch(severity) + if(1.0) + health-=50 + if(2.0) + health-=50 + if(3.0) + if (prob(50)) + health-=50 + else + health-=25 + healthcheck() + return + +/obj/structure/alien/hitby(AM as mob|obj) + ..() + visible_message("\The [src] was hit by \the [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 10 + else + tforce = AM:throwforce + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + health = max(0, health - tforce) + healthcheck() + ..() + return + +/obj/structure/alien/attack_generic() + attack_hand(usr) + +/obj/structure/alien/attackby(var/obj/item/weapon/W, var/mob/user) + health = max(0, health - W.force) + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + healthcheck() + ..() + return + +/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(air_group) return 0 + if(istype(mover) && mover.checkpass(PASSGLASS)) + return !opacity + return !density diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 581aeea16f..5c579e7925 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -1,34 +1,34 @@ -var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() - -/obj/effect/bump_teleporter - name = "bump-teleporter" - icon = 'icons/mob/screen1.dmi' - icon_state = "x2" - var/id = null //id of this bump_teleporter. - var/id_target = null //id of bump_teleporter which this moves you to. - invisibility = 101 //nope, can't see this - anchored = TRUE - density = TRUE - opacity = 0 - -/obj/effect/bump_teleporter/New() - ..() - BUMP_TELEPORTERS += src - -/obj/effect/bump_teleporter/Destroy() - BUMP_TELEPORTERS -= src - return ..() - -/obj/effect/bump_teleporter/Bumped(atom/user) - if(!ismob(user)) - //user.loc = src.loc //Stop at teleporter location - return - var/mob/M = user //VOREStation edit - if(!id_target) - //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. - return - - for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) - if(BT.id == src.id_target) - M.forceMove(BT.loc) //Teleport to location with correct id. //VOREStation Edit - return +var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() + +/obj/effect/bump_teleporter + name = "bump-teleporter" + icon = 'icons/mob/screen1.dmi' + icon_state = "x2" + var/id = null //id of this bump_teleporter. + var/id_target = null //id of bump_teleporter which this moves you to. + invisibility = 101 //nope, can't see this + anchored = TRUE + density = TRUE + opacity = 0 + +/obj/effect/bump_teleporter/New() + ..() + BUMP_TELEPORTERS += src + +/obj/effect/bump_teleporter/Destroy() + BUMP_TELEPORTERS -= src + return ..() + +/obj/effect/bump_teleporter/Bumped(atom/user) + if(!ismob(user)) + //user.loc = src.loc //Stop at teleporter location + return + var/mob/M = user //VOREStation edit + if(!id_target) + //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. + return + + for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) + if(BT.id == src.id_target) + M.forceMove(BT.loc) //Teleport to location with correct id. //VOREStation Edit + return diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 1df3acb2b7..57a32434af 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -1,33 +1,33 @@ -/obj/effect/decal/cleanable/blood/xeno - name = "xeno blood" - desc = "It's green and acidic. It looks like... blood?" - icon = 'icons/effects/blood.dmi' - basecolor = "#05EE05" - -/obj/effect/decal/cleanable/blood/gibs/xeno - name = "xeno gibs" - desc = "Gnarly..." - icon_state = "xgib1" - random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") - basecolor = "#05EE05" - -/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon() - color = "#FFFFFF" - -/obj/effect/decal/cleanable/blood/gibs/xeno/up - random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") - -/obj/effect/decal/cleanable/blood/gibs/xeno/down - random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1") - -/obj/effect/decal/cleanable/blood/gibs/xeno/body - random_icon_states = list("xgibhead", "xgibtorso") - -/obj/effect/decal/cleanable/blood/gibs/xeno/limb - random_icon_states = list("xgibleg", "xgibarm") - -/obj/effect/decal/cleanable/blood/gibs/xeno/core - random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3") - -/obj/effect/decal/cleanable/blood/xtracks +/obj/effect/decal/cleanable/blood/xeno + name = "xeno blood" + desc = "It's green and acidic. It looks like... blood?" + icon = 'icons/effects/blood.dmi' + basecolor = "#05EE05" + +/obj/effect/decal/cleanable/blood/gibs/xeno + name = "xeno gibs" + desc = "Gnarly..." + icon_state = "xgib1" + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") + basecolor = "#05EE05" + +/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon() + color = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/xeno/up + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") + +/obj/effect/decal/cleanable/blood/gibs/xeno/down + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1") + +/obj/effect/decal/cleanable/blood/gibs/xeno/body + random_icon_states = list("xgibhead", "xgibtorso") + +/obj/effect/decal/cleanable/blood/gibs/xeno/limb + random_icon_states = list("xgibleg", "xgibarm") + +/obj/effect/decal/cleanable/blood/gibs/xeno/core + random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3") + +/obj/effect/decal/cleanable/blood/xtracks basecolor = "#05EE05" \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 7366912038..1e3393c857 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -1,253 +1,253 @@ -#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) - -var/global/list/image/splatter_cache=list() - -/obj/effect/decal/cleanable/blood - name = "blood" - var/dryname = "dried blood" - desc = "It's thick and gooey. Perhaps it's the chef's cooking?" - var/drydesc = "It's dry and crusty. Someone is not doing their job." - gender = PLURAL - density = FALSE - anchored = TRUE - plane = BLOOD_PLANE - layer = BLOOD_DECAL_LAYER - icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") - var/base_icon = 'icons/effects/blood.dmi' - blood_DNA = list() - var/basecolor="#A10808" // Color when wet. - var/synthblood = 0 - var/list/datum/disease2/disease/virus2 = list() - var/amount = 5 - generic_filth = TRUE - persistent = FALSE - -/obj/effect/decal/cleanable/blood/reveal_blood() - if(!fluorescent) - fluorescent = 1 - basecolor = COLOR_LUMINOL - update_icon() - -/obj/effect/decal/cleanable/blood/clean_blood() - fluorescent = 0 - if(invisibility != 100) - invisibility = 100 - amount = 0 - ..(ignore=1) - -/obj/effect/decal/cleanable/blood/New() - ..() - update_icon() - if(istype(src, /obj/effect/decal/cleanable/blood/gibs)) - return - if(src.type == /obj/effect/decal/cleanable/blood) - if(src.loc && isturf(src.loc)) - for(var/obj/effect/decal/cleanable/blood/B in src.loc) - if(B != src) - if (B.blood_DNA) - blood_DNA |= B.blood_DNA.Copy() - qdel(B) - addtimer(CALLBACK(src, PROC_REF(dry)), DRYING_TIME * (amount+1)) - -/obj/effect/decal/cleanable/blood/update_icon() - if(basecolor == "rainbow") basecolor = get_random_colour(1) - color = basecolor - - if(basecolor == SYNTH_BLOOD_COLOUR) - name = "oil" - desc = "It's quite oily." - else if(synthblood) - name = "synthetic blood" - desc = "It's quite greasy." - else - name = initial(name) - desc = initial(desc) - -/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) - if(perp.is_incorporeal()) - return - if (!istype(perp)) - return - if(amount < 1) - return - - var/obj/item/organ/external/l_foot = perp.get_organ("l_foot") - var/obj/item/organ/external/r_foot = perp.get_organ("r_foot") - var/hasfeet = 1 - if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump())) - hasfeet = 0 - if(perp.shoes && !perp.buckled)//Adding blood to shoes - var/obj/item/clothing/shoes/S = perp.shoes - if(istype(S)) - S.blood_color = basecolor - S.track_blood = max(amount,S.track_blood) - if(!S.blood_overlay) - S.generate_blood_overlay() - if(!S.blood_DNA) - S.blood_DNA = list() - S.blood_overlay.color = basecolor - S.add_overlay(S.blood_overlay) - if(S.blood_overlay && S.blood_overlay.color != basecolor) - S.blood_overlay.color = basecolor - S.add_overlay(S.blood_overlay) - S.blood_DNA |= blood_DNA.Copy() - perp.update_inv_shoes() - - else if (hasfeet)//Or feet - perp.feet_blood_color = basecolor - perp.track_blood = max(amount,perp.track_blood) - LAZYINITLIST(perp.feet_blood_DNA) - perp.feet_blood_DNA |= blood_DNA.Copy() - perp.update_bloodied() - else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/W = perp.buckled - W.bloodiness = 4 - - amount-- - -/obj/effect/decal/cleanable/blood/proc/dry() - name = dryname - desc = drydesc - color = adjust_brightness(color, -50) - amount = 0 - -/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) - ..() - if (amount && istype(user)) - add_fingerprint(user) - if (user.gloves) - return - var/taken = rand(1,amount) - amount -= taken - to_chat(user, "You get some of \the [src] on your hands.") - if (!user.blood_DNA) - user.blood_DNA = list() - user.blood_DNA |= blood_DNA.Copy() - user.bloody_hands += taken - user.hand_blood_color = basecolor - user.update_inv_gloves(1) - user.verbs += /mob/living/carbon/human/proc/bloody_doodle - -/obj/effect/decal/cleanable/blood/splatter - random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") - amount = 2 - -/obj/effect/decal/cleanable/blood/drip - name = "drips of blood" - desc = "It's red." - gender = PLURAL - icon = 'icons/effects/drip.dmi' - icon_state = "1" - random_icon_states = list("1","2","3","4","5") - amount = 0 - var/list/drips = list() - -/obj/effect/decal/cleanable/blood/drip/New() - ..() - drips |= icon_state - -/obj/effect/decal/cleanable/blood/writing - icon_state = "tracks" - desc = "It looks like a writing in blood." - gender = NEUTER - random_icon_states = list("writing1","writing2","writing3","writing4","writing5") - amount = 0 - var/message - -/obj/effect/decal/cleanable/blood/writing/New() - ..() - if(random_icon_states.len) - for(var/obj/effect/decal/cleanable/blood/writing/W in loc) - random_icon_states.Remove(W.icon_state) - icon_state = pick(random_icon_states) - else - icon_state = "writing1" - -/obj/effect/decal/cleanable/blood/writing/examine(mob/user) - . = ..() - . += "It reads: \"[message]\"" - -/obj/effect/decal/cleanable/blood/gibs - name = "gibs" - desc = "They look bloody and gruesome." - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/blood.dmi' - icon_state = "gibbl5" - random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6") - var/fleshcolor = "#FFFFFF" - -/obj/effect/decal/cleanable/blood/gibs/update_icon() - - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) - if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = get_random_colour(1) - giblets.color = fleshcolor - - var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = get_random_colour(1) - blood.Blend(basecolor,ICON_MULTIPLY) - - icon = blood - cut_overlays() - add_overlay(giblets) - -/obj/effect/decal/cleanable/blood/gibs/up - random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1") - -/obj/effect/decal/cleanable/blood/gibs/down - random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibdown1","gibdown1","gibdown1") - -/obj/effect/decal/cleanable/blood/gibs/body - random_icon_states = list("gibhead", "gibtorso") - -/obj/effect/decal/cleanable/blood/gibs/limb - random_icon_states = list("gibleg", "gibarm") - -/obj/effect/decal/cleanable/blood/gibs/core - random_icon_states = list("gibmid1", "gibmid2", "gibmid3") - - -/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) - b.basecolor = src.basecolor - b.update_icon() - - if (step_to(src, get_step(src, direction), 0)) - break - - -/obj/effect/decal/cleanable/mucus - name = "mucus" - desc = "Disgusting mucus." - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/blood.dmi' - icon_state = "mucus" - random_icon_states = list("mucus") - - var/list/datum/disease2/disease/virus2 = list() - var/dry = 0 // Keeps the lag down - -/obj/effect/decal/cleanable/mucus/Initialize() - . = ..() - VARSET_IN(src, dry, TRUE, DRYING_TIME * 2) - -//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry -/obj/effect/decal/cleanable/mucus/mapped/Initialize() - . = ..() - virus2 |= new /datum/disease2/disease - virus2[1].makerandom() - -/obj/effect/decal/cleanable/mucus/mapped/Destroy() - virus2.Cut() - return ..() +#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) + +var/global/list/image/splatter_cache=list() + +/obj/effect/decal/cleanable/blood + name = "blood" + var/dryname = "dried blood" + desc = "It's thick and gooey. Perhaps it's the chef's cooking?" + var/drydesc = "It's dry and crusty. Someone is not doing their job." + gender = PLURAL + density = FALSE + anchored = TRUE + plane = BLOOD_PLANE + layer = BLOOD_DECAL_LAYER + icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") + var/base_icon = 'icons/effects/blood.dmi' + blood_DNA = list() + var/basecolor="#A10808" // Color when wet. + var/synthblood = 0 + var/list/datum/disease2/disease/virus2 = list() + var/amount = 5 + generic_filth = TRUE + persistent = FALSE + +/obj/effect/decal/cleanable/blood/reveal_blood() + if(!fluorescent) + fluorescent = 1 + basecolor = COLOR_LUMINOL + update_icon() + +/obj/effect/decal/cleanable/blood/clean_blood() + fluorescent = 0 + if(invisibility != 100) + invisibility = 100 + amount = 0 + ..(ignore=1) + +/obj/effect/decal/cleanable/blood/New() + ..() + update_icon() + if(istype(src, /obj/effect/decal/cleanable/blood/gibs)) + return + if(src.type == /obj/effect/decal/cleanable/blood) + if(src.loc && isturf(src.loc)) + for(var/obj/effect/decal/cleanable/blood/B in src.loc) + if(B != src) + if (B.blood_DNA) + blood_DNA |= B.blood_DNA.Copy() + qdel(B) + addtimer(CALLBACK(src, PROC_REF(dry)), DRYING_TIME * (amount+1)) + +/obj/effect/decal/cleanable/blood/update_icon() + if(basecolor == "rainbow") basecolor = get_random_colour(1) + color = basecolor + + if(basecolor == SYNTH_BLOOD_COLOUR) + name = "oil" + desc = "It's quite oily." + else if(synthblood) + name = "synthetic blood" + desc = "It's quite greasy." + else + name = initial(name) + desc = initial(desc) + +/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) + if(perp.is_incorporeal()) + return + if (!istype(perp)) + return + if(amount < 1) + return + + var/obj/item/organ/external/l_foot = perp.get_organ("l_foot") + var/obj/item/organ/external/r_foot = perp.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump())) + hasfeet = 0 + if(perp.shoes && !perp.buckled)//Adding blood to shoes + var/obj/item/clothing/shoes/S = perp.shoes + if(istype(S)) + S.blood_color = basecolor + S.track_blood = max(amount,S.track_blood) + if(!S.blood_overlay) + S.generate_blood_overlay() + if(!S.blood_DNA) + S.blood_DNA = list() + S.blood_overlay.color = basecolor + S.add_overlay(S.blood_overlay) + if(S.blood_overlay && S.blood_overlay.color != basecolor) + S.blood_overlay.color = basecolor + S.add_overlay(S.blood_overlay) + S.blood_DNA |= blood_DNA.Copy() + perp.update_inv_shoes() + + else if (hasfeet)//Or feet + perp.feet_blood_color = basecolor + perp.track_blood = max(amount,perp.track_blood) + LAZYINITLIST(perp.feet_blood_DNA) + perp.feet_blood_DNA |= blood_DNA.Copy() + perp.update_bloodied() + else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) + var/obj/structure/bed/chair/wheelchair/W = perp.buckled + W.bloodiness = 4 + + amount-- + +/obj/effect/decal/cleanable/blood/proc/dry() + name = dryname + desc = drydesc + color = adjust_brightness(color, -50) + amount = 0 + +/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) + ..() + if (amount && istype(user)) + add_fingerprint(user) + if (user.gloves) + return + var/taken = rand(1,amount) + amount -= taken + to_chat(user, "You get some of \the [src] on your hands.") + if (!user.blood_DNA) + user.blood_DNA = list() + user.blood_DNA |= blood_DNA.Copy() + user.bloody_hands += taken + user.hand_blood_color = basecolor + user.update_inv_gloves(1) + user.verbs += /mob/living/carbon/human/proc/bloody_doodle + +/obj/effect/decal/cleanable/blood/splatter + random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") + amount = 2 + +/obj/effect/decal/cleanable/blood/drip + name = "drips of blood" + desc = "It's red." + gender = PLURAL + icon = 'icons/effects/drip.dmi' + icon_state = "1" + random_icon_states = list("1","2","3","4","5") + amount = 0 + var/list/drips = list() + +/obj/effect/decal/cleanable/blood/drip/New() + ..() + drips |= icon_state + +/obj/effect/decal/cleanable/blood/writing + icon_state = "tracks" + desc = "It looks like a writing in blood." + gender = NEUTER + random_icon_states = list("writing1","writing2","writing3","writing4","writing5") + amount = 0 + var/message + +/obj/effect/decal/cleanable/blood/writing/New() + ..() + if(random_icon_states.len) + for(var/obj/effect/decal/cleanable/blood/writing/W in loc) + random_icon_states.Remove(W.icon_state) + icon_state = pick(random_icon_states) + else + icon_state = "writing1" + +/obj/effect/decal/cleanable/blood/writing/examine(mob/user) + . = ..() + . += "It reads: \"[message]\"" + +/obj/effect/decal/cleanable/blood/gibs + name = "gibs" + desc = "They look bloody and gruesome." + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/blood.dmi' + icon_state = "gibbl5" + random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6") + var/fleshcolor = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/update_icon() + + var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) + if(!fleshcolor || fleshcolor == "rainbow") + fleshcolor = get_random_colour(1) + giblets.color = fleshcolor + + var/icon/blood = new(base_icon,"[icon_state]",dir) + if(basecolor == "rainbow") basecolor = get_random_colour(1) + blood.Blend(basecolor,ICON_MULTIPLY) + + icon = blood + cut_overlays() + add_overlay(giblets) + +/obj/effect/decal/cleanable/blood/gibs/up + random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1") + +/obj/effect/decal/cleanable/blood/gibs/down + random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibdown1","gibdown1","gibdown1") + +/obj/effect/decal/cleanable/blood/gibs/body + random_icon_states = list("gibhead", "gibtorso") + +/obj/effect/decal/cleanable/blood/gibs/limb + random_icon_states = list("gibleg", "gibarm") + +/obj/effect/decal/cleanable/blood/gibs/core + random_icon_states = list("gibmid1", "gibmid2", "gibmid3") + + +/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) + b.basecolor = src.basecolor + b.update_icon() + + if (step_to(src, get_step(src, direction), 0)) + break + + +/obj/effect/decal/cleanable/mucus + name = "mucus" + desc = "Disgusting mucus." + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/blood.dmi' + icon_state = "mucus" + random_icon_states = list("mucus") + + var/list/datum/disease2/disease/virus2 = list() + var/dry = 0 // Keeps the lag down + +/obj/effect/decal/cleanable/mucus/Initialize() + . = ..() + VARSET_IN(src, dry, TRUE, DRYING_TIME * 2) + +//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry +/obj/effect/decal/cleanable/mucus/mapped/Initialize() + . = ..() + virus2 |= new /datum/disease2/disease + virus2[1].makerandom() + +/obj/effect/decal/cleanable/mucus/mapped/Destroy() + virus2.Cut() + return ..() diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 55cdcfa4ff..ad2a3fef80 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -1,163 +1,163 @@ -/obj/effect/decal/cleanable/generic - name = "clutter" - desc = "Someone should clean that up." - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/obj/objects.dmi' - icon_state = "shards" - -/obj/effect/decal/cleanable/ash - name = "ashes" - desc = "Ashes to ashes, dust to dust, and into space." - gender = PLURAL - icon = 'icons/obj/objects.dmi' - icon_state = "ash" - anchored = TRUE - -/obj/effect/decal/cleanable/ash/attack_hand(mob/user as mob) - to_chat(user, "[src] sifts through your fingers.") - var/turf/simulated/floor/F = get_turf(src) - if (istype(F)) - F.dirt += 4 - qdel(src) - -/obj/effect/decal/cleanable/greenglow - -/obj/effect/decal/cleanable/greenglow/New() - ..() - QDEL_IN(src, 2 MINUTES) - -/obj/effect/decal/cleanable/dirt - name = "dirt" - desc = "Someone should clean that up." - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/effects.dmi' - icon_state = "dirt" - mouse_opacity = 0 - -/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age, var/dirt) - .=..() - var/turf/simulated/our_turf = src.loc - if(our_turf && istype(our_turf) && our_turf.can_dirty) - our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101) - var/calcalpha = our_turf.dirt > 50 ? min((our_turf.dirt - 50) * 5, 255) : 0 - var/alreadyfound = FALSE - for (var/obj/effect/decal/cleanable/dirt/alreadythere in our_turf) //in case of multiple - if (alreadythere == src) - continue - else if (alreadyfound) - qdel(alreadythere) - continue - alreadyfound = TRUE - alreadythere.alpha = calcalpha //don't need to constantly recalc for all of them in it because it'll just max if a non-persistent dirt overlay gets added, and then the new dirt overlay will be deleted - if (alreadyfound) - return INITIALIZE_HINT_QDEL - alpha = calcalpha - -/obj/effect/decal/cleanable/flour - name = "flour" - desc = "It's still good. Four second rule!" - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/effects.dmi' - icon_state = "flour" - -/obj/effect/decal/cleanable/greenglow - name = "glowing goo" - desc = "Jeez. I hope that's not for lunch." - gender = PLURAL - density = FALSE - anchored = TRUE - light_range = 1 - icon = 'icons/effects/effects.dmi' - icon_state = "greenglow" - -/obj/effect/decal/cleanable/cobweb - name = "cobweb" - desc = "Somebody should remove that." - density = FALSE - anchored = TRUE - plane = OBJ_PLANE - icon = 'icons/effects/effects.dmi' - icon_state = "cobweb1" - -/obj/effect/decal/cleanable/molten_item - name = "gooey grey mass" - desc = "It looks like a melted... something." - density = FALSE - anchored = TRUE - plane = OBJ_PLANE - icon = 'icons/obj/chemical.dmi' - icon_state = "molten" - -/obj/effect/decal/cleanable/cobweb2 - name = "cobweb" - desc = "Somebody should remove that." - density = FALSE - anchored = TRUE - plane = OBJ_PLANE - icon = 'icons/effects/effects.dmi' - icon_state = "cobweb2" - -//Vomit (sorry) -/obj/effect/decal/cleanable/vomit - name = "vomit" - desc = "Gosh, how unpleasant." - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/blood.dmi' - icon_state = "vomit_1" - random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4") - var/list/datum/disease2/disease/virus2 = list() - -/obj/effect/decal/cleanable/tomato_smudge - name = "tomato smudge" - desc = "It's red." - density = FALSE - anchored = TRUE - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") - -/obj/effect/decal/cleanable/egg_smudge - name = "smashed egg" - desc = "Seems like this one won't hatch." - density = FALSE - anchored = TRUE - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") - -/obj/effect/decal/cleanable/pie_smudge //honk - name = "smashed pie" - desc = "It's pie cream from a cream pie." - density = FALSE - anchored = TRUE - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("smashed_pie") - -/obj/effect/decal/cleanable/fruit_smudge - name = "smudge" - desc = "Some kind of fruit smear." - density = FALSE - anchored = TRUE - icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") - -/obj/effect/decal/cleanable/confetti - name = "confetti" - desc = "Tiny bits of colored paper thrown about for the janitor to enjoy!" - gender = PLURAL - density = FALSE - anchored = TRUE - icon = 'icons/effects/effects.dmi' - icon_state = "confetti" - -/obj/effect/decal/cleanable/confetti/attack_hand(mob/user) - to_chat(user, "You start to meticulously pick up the confetti.") - if(do_after(user, 60)) - qdel(src) +/obj/effect/decal/cleanable/generic + name = "clutter" + desc = "Someone should clean that up." + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/obj/objects.dmi' + icon_state = "shards" + +/obj/effect/decal/cleanable/ash + name = "ashes" + desc = "Ashes to ashes, dust to dust, and into space." + gender = PLURAL + icon = 'icons/obj/objects.dmi' + icon_state = "ash" + anchored = TRUE + +/obj/effect/decal/cleanable/ash/attack_hand(mob/user as mob) + to_chat(user, "[src] sifts through your fingers.") + var/turf/simulated/floor/F = get_turf(src) + if (istype(F)) + F.dirt += 4 + qdel(src) + +/obj/effect/decal/cleanable/greenglow + +/obj/effect/decal/cleanable/greenglow/New() + ..() + QDEL_IN(src, 2 MINUTES) + +/obj/effect/decal/cleanable/dirt + name = "dirt" + desc = "Someone should clean that up." + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/effects.dmi' + icon_state = "dirt" + mouse_opacity = 0 + +/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age, var/dirt) + .=..() + var/turf/simulated/our_turf = src.loc + if(our_turf && istype(our_turf) && our_turf.can_dirty) + our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101) + var/calcalpha = our_turf.dirt > 50 ? min((our_turf.dirt - 50) * 5, 255) : 0 + var/alreadyfound = FALSE + for (var/obj/effect/decal/cleanable/dirt/alreadythere in our_turf) //in case of multiple + if (alreadythere == src) + continue + else if (alreadyfound) + qdel(alreadythere) + continue + alreadyfound = TRUE + alreadythere.alpha = calcalpha //don't need to constantly recalc for all of them in it because it'll just max if a non-persistent dirt overlay gets added, and then the new dirt overlay will be deleted + if (alreadyfound) + return INITIALIZE_HINT_QDEL + alpha = calcalpha + +/obj/effect/decal/cleanable/flour + name = "flour" + desc = "It's still good. Four second rule!" + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/effects.dmi' + icon_state = "flour" + +/obj/effect/decal/cleanable/greenglow + name = "glowing goo" + desc = "Jeez. I hope that's not for lunch." + gender = PLURAL + density = FALSE + anchored = TRUE + light_range = 1 + icon = 'icons/effects/effects.dmi' + icon_state = "greenglow" + +/obj/effect/decal/cleanable/cobweb + name = "cobweb" + desc = "Somebody should remove that." + density = FALSE + anchored = TRUE + plane = OBJ_PLANE + icon = 'icons/effects/effects.dmi' + icon_state = "cobweb1" + +/obj/effect/decal/cleanable/molten_item + name = "gooey grey mass" + desc = "It looks like a melted... something." + density = FALSE + anchored = TRUE + plane = OBJ_PLANE + icon = 'icons/obj/chemical.dmi' + icon_state = "molten" + +/obj/effect/decal/cleanable/cobweb2 + name = "cobweb" + desc = "Somebody should remove that." + density = FALSE + anchored = TRUE + plane = OBJ_PLANE + icon = 'icons/effects/effects.dmi' + icon_state = "cobweb2" + +//Vomit (sorry) +/obj/effect/decal/cleanable/vomit + name = "vomit" + desc = "Gosh, how unpleasant." + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/blood.dmi' + icon_state = "vomit_1" + random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4") + var/list/datum/disease2/disease/virus2 = list() + +/obj/effect/decal/cleanable/tomato_smudge + name = "tomato smudge" + desc = "It's red." + density = FALSE + anchored = TRUE + icon = 'icons/effects/tomatodecal.dmi' + random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") + +/obj/effect/decal/cleanable/egg_smudge + name = "smashed egg" + desc = "Seems like this one won't hatch." + density = FALSE + anchored = TRUE + icon = 'icons/effects/tomatodecal.dmi' + random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") + +/obj/effect/decal/cleanable/pie_smudge //honk + name = "smashed pie" + desc = "It's pie cream from a cream pie." + density = FALSE + anchored = TRUE + icon = 'icons/effects/tomatodecal.dmi' + random_icon_states = list("smashed_pie") + +/obj/effect/decal/cleanable/fruit_smudge + name = "smudge" + desc = "Some kind of fruit smear." + density = FALSE + anchored = TRUE + icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") + +/obj/effect/decal/cleanable/confetti + name = "confetti" + desc = "Tiny bits of colored paper thrown about for the janitor to enjoy!" + gender = PLURAL + density = FALSE + anchored = TRUE + icon = 'icons/effects/effects.dmi' + icon_state = "confetti" + +/obj/effect/decal/cleanable/confetti/attack_hand(mob/user) + to_chat(user, "You start to meticulously pick up the confetti.") + if(do_after(user, 60)) + qdel(src) diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index bdc5c9237a..b0980966a3 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -1,52 +1,52 @@ -/obj/effect/decal/cleanable/blood/gibs/robot - name = "robot debris" - desc = "It's a useless heap of junk... or is it?" - icon = 'icons/mob/robots.dmi' - icon_state = "gib1" - basecolor = SYNTH_BLOOD_COLOUR - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") - generic_filth = FALSE - persistent = FALSE - -/obj/effect/decal/cleanable/blood/gibs/robot/update_icon() - color = "#FFFFFF" - -/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like - return - -/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - if (prob(40)) - var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) - streak.update_icon() - else if (prob(10)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - if (step_to(src, get_step(src, direction), 0)) - break - -/obj/effect/decal/cleanable/blood/gibs/robot/limb - random_icon_states = list("gibarm", "gibleg") - -/obj/effect/decal/cleanable/blood/gibs/robot/up - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 - -/obj/effect/decal/cleanable/blood/gibs/robot/down - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 - -/obj/effect/decal/cleanable/blood/oil - basecolor = SYNTH_BLOOD_COLOUR - generic_filth = FALSE - persistent = FALSE - -/obj/effect/decal/cleanable/blood/oil/dry() - return - -/obj/effect/decal/cleanable/blood/oil/streak - random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") +/obj/effect/decal/cleanable/blood/gibs/robot + name = "robot debris" + desc = "It's a useless heap of junk... or is it?" + icon = 'icons/mob/robots.dmi' + icon_state = "gib1" + basecolor = SYNTH_BLOOD_COLOUR + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") + generic_filth = FALSE + persistent = FALSE + +/obj/effect/decal/cleanable/blood/gibs/robot/update_icon() + color = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like + return + +/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + if (prob(40)) + var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) + streak.update_icon() + else if (prob(10)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + if (step_to(src, get_step(src, direction), 0)) + break + +/obj/effect/decal/cleanable/blood/gibs/robot/limb + random_icon_states = list("gibarm", "gibleg") + +/obj/effect/decal/cleanable/blood/gibs/robot/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 + +/obj/effect/decal/cleanable/blood/gibs/robot/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 + +/obj/effect/decal/cleanable/blood/oil + basecolor = SYNTH_BLOOD_COLOUR + generic_filth = FALSE + persistent = FALSE + +/obj/effect/decal/cleanable/blood/oil/dry() + return + +/obj/effect/decal/cleanable/blood/oil/streak + random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 \ No newline at end of file diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index ed411a67ab..d30a548ab2 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,38 +1,38 @@ -/* -USAGE NOTE -For decals, the var Persistent = 'has already been saved', and is primarily used to prevent duplicate savings of generic filth (filth.dm). -This also means 'TRUE' can be used to define a decal as "Do not save at all, even as a generic replacement." if a dirt decal is considered 'too common' to save. -generic_filth = TRUE means when the decal is saved, it will be switched out for a generic green 'filth' decal. -*/ - -/obj/effect/decal/cleanable - plane = DIRTY_PLANE - layer = DIRTY_LAYER - var/persistent = FALSE - var/generic_filth = FALSE - var/age = 0 - var/list/random_icon_states = list() - -/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) - if(!isnull(_age)) - age = _age - if(random_icon_states && length(src.random_icon_states) > 0) - src.icon_state = pick(src.random_icon_states) - if(!mapload || !config.persistence_ignore_mapload) - SSpersistence.track_value(src, /datum/persistent/filth) - . = ..() - -/obj/effect/decal/cleanable/Destroy() - SSpersistence.forget_value(src, /datum/persistent/filth) - . = ..() - -/obj/effect/decal/cleanable/clean_blood(var/ignore = 0) - if(!ignore) - qdel(src) - return - ..() - -/obj/effect/decal/cleanable/New() - if (random_icon_states && length(src.random_icon_states) > 0) - src.icon_state = pick(src.random_icon_states) - ..() +/* +USAGE NOTE +For decals, the var Persistent = 'has already been saved', and is primarily used to prevent duplicate savings of generic filth (filth.dm). +This also means 'TRUE' can be used to define a decal as "Do not save at all, even as a generic replacement." if a dirt decal is considered 'too common' to save. +generic_filth = TRUE means when the decal is saved, it will be switched out for a generic green 'filth' decal. +*/ + +/obj/effect/decal/cleanable + plane = DIRTY_PLANE + layer = DIRTY_LAYER + var/persistent = FALSE + var/generic_filth = FALSE + var/age = 0 + var/list/random_icon_states = list() + +/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) + if(!isnull(_age)) + age = _age + if(random_icon_states && length(src.random_icon_states) > 0) + src.icon_state = pick(src.random_icon_states) + if(!mapload || !config.persistence_ignore_mapload) + SSpersistence.track_value(src, /datum/persistent/filth) + . = ..() + +/obj/effect/decal/cleanable/Destroy() + SSpersistence.forget_value(src, /datum/persistent/filth) + . = ..() + +/obj/effect/decal/cleanable/clean_blood(var/ignore = 0) + if(!ignore) + qdel(src) + return + ..() + +/obj/effect/decal/cleanable/New() + if (random_icon_states && length(src.random_icon_states) > 0) + src.icon_state = pick(src.random_icon_states) + ..() diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 248b9cfbb4..493529cede 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -1,31 +1,31 @@ -/obj/effect/decal/cleanable/crayon - name = "rune" - desc = "A rune drawn in crayon." - icon = 'icons/obj/rune.dmi' - plane = DIRTY_PLANE - layer = DIRTY_LAYER - anchored = TRUE - -/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") - ..() - loc = location - - name = type - desc = "A [type] drawn in crayon." - - switch(type) - if("rune") - type = "rune[rand(1,6)]" - if("graffiti") - type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa") - - var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1) - var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1) - - mainOverlay.Blend(main,ICON_ADD) - shadeOverlay.Blend(shade,ICON_ADD) - - add_overlay(mainOverlay) - add_overlay(shadeOverlay) - - add_hiddenprint(usr) +/obj/effect/decal/cleanable/crayon + name = "rune" + desc = "A rune drawn in crayon." + icon = 'icons/obj/rune.dmi' + plane = DIRTY_PLANE + layer = DIRTY_LAYER + anchored = TRUE + +/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") + ..() + loc = location + + name = type + desc = "A [type] drawn in crayon." + + switch(type) + if("rune") + type = "rune[rand(1,6)]" + if("graffiti") + type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa") + + var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1) + var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1) + + mainOverlay.Blend(main,ICON_ADD) + shadeOverlay.Blend(shade,ICON_ADD) + + add_overlay(mainOverlay) + add_overlay(shadeOverlay) + + add_hiddenprint(usr) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 3e5c46e134..df2d3ee32b 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -1,14 +1,14 @@ -/obj/effect/decal/point - name = "arrow" - desc = "It's an arrow hanging in mid-air. There may be a wizard about." - icon = 'icons/mob/screen1.dmi' - icon_state = "arrow" - plane = ABOVE_PLANE - anchored = TRUE - mouse_opacity = 0 - -// Used for spray that you spray at walls, tables, hydrovats etc -/obj/effect/decal/spraystill - density = FALSE - anchored = TRUE +/obj/effect/decal/point + name = "arrow" + desc = "It's an arrow hanging in mid-air. There may be a wizard about." + icon = 'icons/mob/screen1.dmi' + icon_state = "arrow" + plane = ABOVE_PLANE + anchored = TRUE + mouse_opacity = 0 + +// Used for spray that you spray at walls, tables, hydrovats etc +/obj/effect/decal/spraystill + density = FALSE + anchored = TRUE plane = ABOVE_PLANE \ No newline at end of file diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 6f8af8cdd9..9d1d0e1309 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -1,70 +1,70 @@ -/obj/effect/decal/remains - name = "remains" - gender = PLURAL - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - anchored = FALSE - -/obj/effect/decal/remains/human - desc = "They look like human remains. They have a strange aura about them." - -/obj/effect/decal/remains/xeno - desc = "They look like the remains of something... alien. They have a strange aura about them." - icon_state = "remainsxeno" - -/obj/effect/decal/remains/robot - desc = "They look like the remains of something mechanical. They have a strange aura about them." - icon = 'icons/mob/robots.dmi' - icon_state = "remainsrobot" - -/obj/effect/decal/remains/mouse - desc = "They look like the remains of a small rodent." - icon_state = "mouse" - -/obj/effect/decal/remains/lizard - desc = "They look like the remains of a small lizard." - icon_state = "lizard" - -/obj/effect/decal/remains/unathi - desc = "They look like Unathi remains. Pointy." - icon_state = "remainsunathi" - -/obj/effect/decal/remains/tajaran - desc = "They look like Tajaran remains. They're surprisingly small." - icon_state = "remainstajaran" - -/obj/effect/decal/remains/ribcage - desc = "They look like animal remains of some sort... You hope." - icon_state = "remainsribcage" - -/obj/effect/decal/remains/deer - desc = "They look like the remains of a large herbivore, picked clean." - icon_state = "remainsdeer" - -/obj/effect/decal/remains/posi - desc = "This looks like part of an old FBP. Hopefully it was empty." - icon_state = "remainsposi" - -/obj/effect/decal/remains/mummy1 - name = "mummified remains" - desc = "They look like human remains. They've been here a long time." - icon_state = "mummified1" - -/obj/effect/decal/remains/mummy2 - name = "mummified remains" - desc = "They look like human remains. They've been here a long time." - icon_state = "mummified2" - -/obj/effect/decal/remains/attack_hand(mob/user as mob) - to_chat(user, "[src] sinks together into a pile of ash.") - var/turf/simulated/floor/F = get_turf(src) - if(istype(F)) - new /obj/effect/decal/cleanable/ash(F) - qdel(src) - -/obj/effect/decal/remains/robot/attack_hand(mob/user as mob) - to_chat(user, "[src] crumbles down into a pile of debris.") - var/turf/simulated/floor/F = get_turf(src) - if(istype(F)) - new /obj/effect/decal/cleanable/blood/gibs/robot(F) - qdel(src) +/obj/effect/decal/remains + name = "remains" + gender = PLURAL + icon = 'icons/effects/blood.dmi' + icon_state = "remains" + anchored = FALSE + +/obj/effect/decal/remains/human + desc = "They look like human remains. They have a strange aura about them." + +/obj/effect/decal/remains/xeno + desc = "They look like the remains of something... alien. They have a strange aura about them." + icon_state = "remainsxeno" + +/obj/effect/decal/remains/robot + desc = "They look like the remains of something mechanical. They have a strange aura about them." + icon = 'icons/mob/robots.dmi' + icon_state = "remainsrobot" + +/obj/effect/decal/remains/mouse + desc = "They look like the remains of a small rodent." + icon_state = "mouse" + +/obj/effect/decal/remains/lizard + desc = "They look like the remains of a small lizard." + icon_state = "lizard" + +/obj/effect/decal/remains/unathi + desc = "They look like Unathi remains. Pointy." + icon_state = "remainsunathi" + +/obj/effect/decal/remains/tajaran + desc = "They look like Tajaran remains. They're surprisingly small." + icon_state = "remainstajaran" + +/obj/effect/decal/remains/ribcage + desc = "They look like animal remains of some sort... You hope." + icon_state = "remainsribcage" + +/obj/effect/decal/remains/deer + desc = "They look like the remains of a large herbivore, picked clean." + icon_state = "remainsdeer" + +/obj/effect/decal/remains/posi + desc = "This looks like part of an old FBP. Hopefully it was empty." + icon_state = "remainsposi" + +/obj/effect/decal/remains/mummy1 + name = "mummified remains" + desc = "They look like human remains. They've been here a long time." + icon_state = "mummified1" + +/obj/effect/decal/remains/mummy2 + name = "mummified remains" + desc = "They look like human remains. They've been here a long time." + icon_state = "mummified2" + +/obj/effect/decal/remains/attack_hand(mob/user as mob) + to_chat(user, "[src] sinks together into a pile of ash.") + var/turf/simulated/floor/F = get_turf(src) + if(istype(F)) + new /obj/effect/decal/cleanable/ash(F) + qdel(src) + +/obj/effect/decal/remains/robot/attack_hand(mob/user as mob) + to_chat(user, "[src] crumbles down into a pile of debris.") + var/turf/simulated/floor/F = get_turf(src) + if(istype(F)) + new /obj/effect/decal/cleanable/blood/gibs/robot(F) + qdel(src) diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index e69c90a8d8..c470d186ce 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -1,10 +1,10 @@ -/obj/effect/decal/warning_stripes - icon = 'icons/effects/warning_stripes.dmi' - -/obj/effect/decal/warning_stripes/Initialize() - . = ..() - var/turf/T=get_turf(src) - var/image/I=image(icon, icon_state = icon_state, dir = dir) - I.color=color - T.add_overlay(I) - return INITIALIZE_HINT_QDEL +/obj/effect/decal/warning_stripes + icon = 'icons/effects/warning_stripes.dmi' + +/obj/effect/decal/warning_stripes/Initialize() + . = ..() + var/turf/T=get_turf(src) + var/image/I=image(icon, icon_state = icon_state, dir = dir) + I.color=color + T.add_overlay(I) + return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 6b0883570d..fca4988493 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -1,581 +1,581 @@ -/* This is an attempt to make some easily reusable "particle" type effect, to stop the code -constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one -defined, then set up when it is created with New(). Then this same system can just be reused each time -it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam -would spawn and follow the beaker, even if it is carried or thrown. -*/ -/obj/effect - light_on = TRUE - -/obj/effect/effect - name = "effect" - icon = 'icons/effects/effects.dmi' - mouse_opacity = 0 - unacidable = TRUE//So effect are not targeted by alien acid. - pass_flags = PASSTABLE | PASSGRILLE - blocks_emissive = EMISSIVE_BLOCK_GENERIC - light_on = TRUE - plane = ABOVE_OBJ_PLANE - -/datum/effect/effect/system - var/number = 3 - var/cardinals = 0 - var/turf/location - var/atom/holder - var/setup = 0 - -/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - setup = 1 - -/datum/effect/effect/system/proc/attach(atom/atom) - holder = atom - -/datum/effect/effect/system/proc/start() - -/datum/effect/effect/system/Destroy() - holder = null - return ..() - -///////////////////////////////////////////// -// GENERIC STEAM SPREAD SYSTEM - -//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location) -// The attach(atom/atom) proc is optional, and can be called to attach the effect -// to something, like a smoking beaker, so then you can just call start() and the steam -// will always spawn at the items location, even if it's moved. - -/* Example: -var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system -steam.set_up(5, 0, mob.loc) -- sets up variables -OPTIONAL: steam.attach(mob) -steam.start() -- spawns the effect -*/ -///////////////////////////////////////////// -/obj/effect/effect/steam - name = "steam" - icon = 'icons/effects/effects.dmi' - icon_state = "extinguish" - density = FALSE - -/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - -/datum/effect/effect/system/steam_spread/start() - var/i = 0 - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - -/datum/effect/effect/system/spark_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location) - src.total_sparks++ - var/direction - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - -/datum/effect/effect/system/smoke_spread/start(var/I) - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/smoke/smoke = new smoke_type(src.location) - src.total_smoke++ - if(I) - smoke.color = I - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, iThe solution violently explodes.") - for(var/mob/M in viewers(1, location)) - if (prob (50 * amount)) - to_chat(M, "The explosion knocks you down.") - M.Weaken(rand(1,5)) - return - else - var/devst = -1 - var/heavy = -1 - var/light = -1 - var/flash = -1 - - // Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs - if (round(amount/12) > 0) - devst = devst + amount/12 - - if (round(amount/6) > 0) - heavy = heavy + amount/6 - - if (round(amount/3) > 0) - light = light + amount/3 - - if (flashing && flashing_factor) - flash = (amount/4) * flashing_factor - - for(var/mob/M in viewers(8, location)) - to_chat(M, "The solution violently explodes.") - - explosion( - location, - round(min(devst, BOMBCAP_DVSTN_RADIUS)), - round(min(heavy, BOMBCAP_HEAVY_RADIUS)), - round(min(light, BOMBCAP_LIGHT_RADIUS)), - round(min(flash, BOMBCAP_FLASH_RADIUS)) - ) +/* This is an attempt to make some easily reusable "particle" type effect, to stop the code +constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one +defined, then set up when it is created with New(). Then this same system can just be reused each time +it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam +would spawn and follow the beaker, even if it is carried or thrown. +*/ +/obj/effect + light_on = TRUE + +/obj/effect/effect + name = "effect" + icon = 'icons/effects/effects.dmi' + mouse_opacity = 0 + unacidable = TRUE//So effect are not targeted by alien acid. + pass_flags = PASSTABLE | PASSGRILLE + blocks_emissive = EMISSIVE_BLOCK_GENERIC + light_on = TRUE + plane = ABOVE_OBJ_PLANE + +/datum/effect/effect/system + var/number = 3 + var/cardinals = 0 + var/turf/location + var/atom/holder + var/setup = 0 + +/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) + if(n > 10) + n = 10 + number = n + cardinals = c + location = loc + setup = 1 + +/datum/effect/effect/system/proc/attach(atom/atom) + holder = atom + +/datum/effect/effect/system/proc/start() + +/datum/effect/effect/system/Destroy() + holder = null + return ..() + +///////////////////////////////////////////// +// GENERIC STEAM SPREAD SYSTEM + +//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location) +// The attach(atom/atom) proc is optional, and can be called to attach the effect +// to something, like a smoking beaker, so then you can just call start() and the steam +// will always spawn at the items location, even if it's moved. + +/* Example: +var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system +steam.set_up(5, 0, mob.loc) -- sets up variables +OPTIONAL: steam.attach(mob) +steam.start() -- spawns the effect +*/ +///////////////////////////////////////////// +/obj/effect/effect/steam + name = "steam" + icon = 'icons/effects/effects.dmi' + icon_state = "extinguish" + density = FALSE + +/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) + if(n > 10) + n = 10 + number = n + cardinals = c + location = loc + +/datum/effect/effect/system/steam_spread/start() + var/i = 0 + for(i=0, i 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + +/datum/effect/effect/system/spark_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location) + src.total_sparks++ + var/direction + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + if(direct) + direction = direct + +/datum/effect/effect/system/smoke_spread/start(var/I) + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/smoke/smoke = new smoke_type(src.location) + src.total_smoke++ + if(I) + smoke.color = I + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, iThe solution violently explodes.") + for(var/mob/M in viewers(1, location)) + if (prob (50 * amount)) + to_chat(M, "The explosion knocks you down.") + M.Weaken(rand(1,5)) + return + else + var/devst = -1 + var/heavy = -1 + var/light = -1 + var/flash = -1 + + // Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs + if (round(amount/12) > 0) + devst = devst + amount/12 + + if (round(amount/6) > 0) + heavy = heavy + amount/6 + + if (round(amount/3) > 0) + light = light + amount/3 + + if (flashing && flashing_factor) + flash = (amount/4) * flashing_factor + + for(var/mob/M in viewers(8, location)) + to_chat(M, "The solution violently explodes.") + + explosion( + location, + round(min(devst, BOMBCAP_DVSTN_RADIUS)), + round(min(heavy, BOMBCAP_HEAVY_RADIUS)), + round(min(light, BOMBCAP_LIGHT_RADIUS)), + round(min(flash, BOMBCAP_FLASH_RADIUS)) + ) diff --git a/code/game/objects/effects/effect_system_ch.dm b/code/game/objects/effects/effect_system_ch.dm index 059f495845..e1bfbd2c8e 100644 --- a/code/game/objects/effects/effect_system_ch.dm +++ b/code/game/objects/effects/effect_system_ch.dm @@ -1,119 +1,119 @@ - -///////////////////////////////////////////// -// Confetti and Glitter -// Uses same system as smoke so can have directional travel -///////////////////////////////////////////// - -/obj/effect/effect/confetti - name = "confetti" - icon = 'icons/effects/effects_ch.dmi' - icon_state = "confetti" - opacity = 0 - anchored = 0.0 - mouse_opacity = 0 - var/amount = 6.0 - var/time_to_live = 500 - -/obj/effect/effect/confetti/New() - ..() - if(time_to_live) - spawn (time_to_live) - if(!QDELETED(src)) - qdel(src) - //make confetti on ground cleanable decal to spawn - -/datum/effect/effect/system/confetti_spread - var/total_confetti = 0 // To stop it being spammed and lagging! - var/direction - var/confetti_type = /obj/effect/effect/confetti - -/datum/effect/effect/system/confetti_spread/set_up(n = 5, c = 0, loca, direct) - if(n > 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - -/datum/effect/effect/system/confetti_spread/start(var/I) - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/confetti/confetti = new confetti_type(src.location) - src.total_confetti++ - if(I) - confetti.color = I //Allows us to do differently colored confetti - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + if(direct) + direction = direct + +/datum/effect/effect/system/confetti_spread/start(var/I) + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/confetti/confetti = new confetti_type(src.location) + src.total_confetti++ + if(I) + confetti.color = I //Allows us to do differently colored confetti + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, iGib list length mismatch!") - return - - var/obj/effect/decal/cleanable/blood/gibs/gib = null - - if(sparks) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo - s.start() - - for(var/i = 1, i<= gibtypes.len, i++) - if(gibamounts[i]) - for(var/j = 1, j<= gibamounts[i], j++) - var/gibType = gibtypes[i] - gib = new gibType(location) - - // Apply human species colouration to masks. - if(fleshcolor) - gib.fleshcolor = fleshcolor - if(bloodcolor) - gib.basecolor = bloodcolor - - gib.update_icon() - - gib.blood_DNA = list() - if(MobDNA) - gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type - else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey - gib.blood_DNA["Non-human DNA"] = "A+" - if(istype(location,/turf/)) - var/list/directions = gibdirections[i] - if(directions.len) - gib.streak(directions) - - qdel(src) +/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor) + new gibber_type(location,MobDNA,fleshcolor,bloodcolor) + +/obj/effect/gibspawner + var/sparks = 0 //whether sparks spread on Gib() + var/list/gibtypes = list() + var/list/gibamounts = list() + var/list/gibdirections = list() //of lists + var/fleshcolor //Used for gibbed humans. + var/bloodcolor //Used for gibbed humans. + +/obj/effect/gibspawner/New(location, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor) + ..() + + if(fleshcolor) src.fleshcolor = fleshcolor + if(bloodcolor) src.bloodcolor = bloodcolor + Gib(loc,MobDNA) + +/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null) + if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) + to_world("Gib list length mismatch!") + return + + var/obj/effect/decal/cleanable/blood/gibs/gib = null + + if(sparks) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo + s.start() + + for(var/i = 1, i<= gibtypes.len, i++) + if(gibamounts[i]) + for(var/j = 1, j<= gibamounts[i], j++) + var/gibType = gibtypes[i] + gib = new gibType(location) + + // Apply human species colouration to masks. + if(fleshcolor) + gib.fleshcolor = fleshcolor + if(bloodcolor) + gib.basecolor = bloodcolor + + gib.update_icon() + + gib.blood_DNA = list() + if(MobDNA) + gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type + else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey + gib.blood_DNA["Non-human DNA"] = "A+" + if(istype(location,/turf/)) + var/list/directions = gibdirections[i] + if(directions.len) + gib.streak(directions) + + qdel(src) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7c88ab8ad3..d2f8043b15 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -1,306 +1,306 @@ -/obj/effect/landmark - name = "landmark" - icon = 'icons/mob/screen1.dmi' - icon_state = "x2" - anchored = TRUE - unacidable = TRUE - simulated = FALSE - invisibility = 100 - var/delete_me = 0 - -/obj/effect/landmark/New() - ..() - tag = text("landmark*[]", name) - invisibility = 101 - - switch(name) //some of these are probably obsolete - if("monkey") - monkeystart += loc - delete_me = 1 - return - if("start") - newplayer_start += loc - delete_me = 1 - return - if("JoinLate") // Bit difference, since we need the spawn point to move. - latejoin += src - simulated = TRUE - // delete_me = 1 - return - //VOREStation Add end - if("Observer-Start") // Ghosts are the only thing that use the latejoin list afaik and it complains if there's nothing in the list. - latejoin += src - simulated = TRUE - return - //VOREStation Add end - if("JoinLateGateway") - latejoin_gateway += loc - delete_me = 1 - return - //CHOMPEdit Begin - if("JoinLateStationGateway") - latejoin_gatewaystation += loc - delete_me = 1 - return - if("JoinLateSifPlains") - latejoin_plainspath += loc - delete_me = 1 - return - //CHOMPEdit End - if("JoinLateElevator") - latejoin_elevator += loc - delete_me = 1 - return - if("JoinLateCryo") - latejoin_cryo += loc - delete_me = 1 - return - if("JoinLateCyborg") - latejoin_cyborg += loc - delete_me = 1 - return - if("prisonwarp") - prisonwarp += loc - delete_me = 1 - return - if("Holding Facility") - holdingfacility += loc - if("tdome1") - tdome1 += loc - if("tdome2") - tdome2 += loc - if("tdomeadmin") - tdomeadmin += loc - if("tdomeobserve") - tdomeobserve += loc - if("prisonsecuritywarp") - prisonsecuritywarp += loc - delete_me = 1 - return - if("blobstart") - blobstart += loc - delete_me = 1 - return - if("xeno_spawn") - xeno_spawn += loc - delete_me = 1 - return - if("endgame_exit") - endgame_safespawns += loc - delete_me = 1 - return - if("bluespacerift") - endgame_exits += loc - delete_me = 1 - return - //VOREStation Add Start - if("vinestart") - vinestart += loc - delete_me = 1 - return - //VORE Station Add End - - landmarks_list += src - return 1 - -/obj/effect/landmark/proc/delete() - delete_me = 1 - -/obj/effect/landmark/Initialize() - . = ..() - if(delete_me) - return INITIALIZE_HINT_QDEL - -/obj/effect/landmark/Destroy(var/force = FALSE) - if(delete_me || force) - landmarks_list -= src - return ..() - return QDEL_HINT_LETMELIVE - -/obj/effect/landmark/start - name = "start" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = TRUE - -/obj/effect/landmark/start/New() - ..() - tag = "start*[name]" - invisibility = 101 - - return 1 - -/obj/effect/landmark/forbidden_level - delete_me = 1 -/obj/effect/landmark/forbidden_level/Initialize() - . = ..() - if(using_map) - using_map.secret_levels |= z - else - log_error("[type] mapped in but no using_map") - -/obj/effect/landmark/hidden_level - delete_me = 1 -/obj/effect/landmark/hidden_level/Initialize() - . = ..() - if(using_map) - using_map.hidden_levels |= z - else - log_error("[type] mapped in but no using_map") - - -/obj/effect/landmark/virtual_reality - name = "virtual_reality" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = TRUE - -/obj/effect/landmark/virtual_reality/New() - ..() - tag = "virtual_reality*[name]" - invisibility = 101 - return 1 - - -//Costume spawner landmarks -/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears - - var/list/options = typesof(/obj/effect/landmark/costume) - var/PICK= options[rand(1,options.len)] - new PICK(src.loc) - delete_me = 1 - -//SUBCLASSES. Spawn a bunch of items and disappear likewise -/obj/effect/landmark/costume/chicken/New() - new /obj/item/clothing/suit/chickensuit(src.loc) - new /obj/item/clothing/head/chicken(src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/gladiator/New() - new /obj/item/clothing/under/gladiator(src.loc) - new /obj/item/clothing/head/helmet/gladiator(src.loc) - qdel(src) - -/obj/effect/landmark/costume/madscientist/New() - new /obj/item/clothing/under/suit_jacket/green(src.loc) - new /obj/item/clothing/head/flatcap(src.loc) - new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc) - new /obj/item/clothing/glasses/gglasses(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/elpresidente/New() - new /obj/item/clothing/under/suit_jacket/green(src.loc) - new /obj/item/clothing/head/flatcap(src.loc) - new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc) - new /obj/item/clothing/shoes/boots/jackboots(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/nyangirl/New() - new /obj/item/clothing/under/schoolgirl(src.loc) - new /obj/item/clothing/head/kitty(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/maid/New() - new /obj/item/clothing/under/skirt(src.loc) - var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/butler/New() - new /obj/item/clothing/accessory/wcoat(src.loc) - new /obj/item/clothing/under/suit_jacket(src.loc) - new /obj/item/clothing/head/that(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/scratch/New() - new /obj/item/clothing/gloves/white(src.loc) - new /obj/item/clothing/shoes/white(src.loc) - new /obj/item/clothing/under/scratch(src.loc) - if (prob(30)) - new /obj/item/clothing/head/cueball(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/highlander/New() - new /obj/item/clothing/under/kilt(src.loc) - new /obj/item/clothing/head/beret(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/prig/New() - new /obj/item/clothing/accessory/wcoat(src.loc) - new /obj/item/clothing/glasses/monocle(src.loc) - var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that) - new CHOICE(src.loc) - new /obj/item/clothing/shoes/black(src.loc) - new /obj/item/weapon/cane(src.loc) - new /obj/item/clothing/under/sl_suit(src.loc) - new /obj/item/clothing/mask/fakemoustache(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/plaguedoctor/New() - new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) - new /obj/item/clothing/head/plaguedoctorhat(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/nightowl/New() - new /obj/item/clothing/under/owl(src.loc) - new /obj/item/clothing/mask/gas/owl_mask(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/waiter/New() - new /obj/item/clothing/under/waiter(src.loc) - var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears) - new CHOICE(src.loc) - new /obj/item/clothing/suit/storage/apron(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/pirate/New() - new /obj/item/clothing/under/pirate(src.loc) - new /obj/item/clothing/suit/pirate(src.loc) - var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana ) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/eyepatch(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/commie/New() - new /obj/item/clothing/under/soviet(src.loc) - new /obj/item/clothing/head/ushanka(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/imperium_monk/New() - new /obj/item/clothing/suit/imperium_monk(src.loc) - if (prob(25)) - new /obj/item/clothing/mask/gas/cyborg(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/holiday_priest/New() - new /obj/item/clothing/suit/holidaypriest(src.loc) - qdel(src) - -/obj/effect/landmark/costume/marisawizard/fake/New() - new /obj/item/clothing/head/wizard/marisa/fake(src.loc) - new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/cutewitch/New() - new /obj/item/clothing/under/sundress(src.loc) - new /obj/item/clothing/head/witchwig(src.loc) - new /obj/item/weapon/staff/broom(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/fakewizard/New() - new /obj/item/clothing/suit/wizrobe/fake(src.loc) - new /obj/item/clothing/head/wizard/fake(src.loc) - new /obj/item/weapon/staff/(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/sexyclown/New() - new /obj/item/clothing/mask/gas/sexyclown(src.loc) - new /obj/item/clothing/under/sexyclown(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/sexymime/New() - new /obj/item/clothing/mask/gas/sexymime(src.loc) - new /obj/item/clothing/under/sexymime(src.loc) - delete_me = 1 +/obj/effect/landmark + name = "landmark" + icon = 'icons/mob/screen1.dmi' + icon_state = "x2" + anchored = TRUE + unacidable = TRUE + simulated = FALSE + invisibility = 100 + var/delete_me = 0 + +/obj/effect/landmark/New() + ..() + tag = text("landmark*[]", name) + invisibility = 101 + + switch(name) //some of these are probably obsolete + if("monkey") + monkeystart += loc + delete_me = 1 + return + if("start") + newplayer_start += loc + delete_me = 1 + return + if("JoinLate") // Bit difference, since we need the spawn point to move. + latejoin += src + simulated = TRUE + // delete_me = 1 + return + //VOREStation Add end + if("Observer-Start") // Ghosts are the only thing that use the latejoin list afaik and it complains if there's nothing in the list. + latejoin += src + simulated = TRUE + return + //VOREStation Add end + if("JoinLateGateway") + latejoin_gateway += loc + delete_me = 1 + return + //CHOMPEdit Begin + if("JoinLateStationGateway") + latejoin_gatewaystation += loc + delete_me = 1 + return + if("JoinLateSifPlains") + latejoin_plainspath += loc + delete_me = 1 + return + //CHOMPEdit End + if("JoinLateElevator") + latejoin_elevator += loc + delete_me = 1 + return + if("JoinLateCryo") + latejoin_cryo += loc + delete_me = 1 + return + if("JoinLateCyborg") + latejoin_cyborg += loc + delete_me = 1 + return + if("prisonwarp") + prisonwarp += loc + delete_me = 1 + return + if("Holding Facility") + holdingfacility += loc + if("tdome1") + tdome1 += loc + if("tdome2") + tdome2 += loc + if("tdomeadmin") + tdomeadmin += loc + if("tdomeobserve") + tdomeobserve += loc + if("prisonsecuritywarp") + prisonsecuritywarp += loc + delete_me = 1 + return + if("blobstart") + blobstart += loc + delete_me = 1 + return + if("xeno_spawn") + xeno_spawn += loc + delete_me = 1 + return + if("endgame_exit") + endgame_safespawns += loc + delete_me = 1 + return + if("bluespacerift") + endgame_exits += loc + delete_me = 1 + return + //VOREStation Add Start + if("vinestart") + vinestart += loc + delete_me = 1 + return + //VORE Station Add End + + landmarks_list += src + return 1 + +/obj/effect/landmark/proc/delete() + delete_me = 1 + +/obj/effect/landmark/Initialize() + . = ..() + if(delete_me) + return INITIALIZE_HINT_QDEL + +/obj/effect/landmark/Destroy(var/force = FALSE) + if(delete_me || force) + landmarks_list -= src + return ..() + return QDEL_HINT_LETMELIVE + +/obj/effect/landmark/start + name = "start" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + anchored = TRUE + +/obj/effect/landmark/start/New() + ..() + tag = "start*[name]" + invisibility = 101 + + return 1 + +/obj/effect/landmark/forbidden_level + delete_me = 1 +/obj/effect/landmark/forbidden_level/Initialize() + . = ..() + if(using_map) + using_map.secret_levels |= z + else + log_error("[type] mapped in but no using_map") + +/obj/effect/landmark/hidden_level + delete_me = 1 +/obj/effect/landmark/hidden_level/Initialize() + . = ..() + if(using_map) + using_map.hidden_levels |= z + else + log_error("[type] mapped in but no using_map") + + +/obj/effect/landmark/virtual_reality + name = "virtual_reality" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + anchored = TRUE + +/obj/effect/landmark/virtual_reality/New() + ..() + tag = "virtual_reality*[name]" + invisibility = 101 + return 1 + + +//Costume spawner landmarks +/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears + + var/list/options = typesof(/obj/effect/landmark/costume) + var/PICK= options[rand(1,options.len)] + new PICK(src.loc) + delete_me = 1 + +//SUBCLASSES. Spawn a bunch of items and disappear likewise +/obj/effect/landmark/costume/chicken/New() + new /obj/item/clothing/suit/chickensuit(src.loc) + new /obj/item/clothing/head/chicken(src.loc) + new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/gladiator/New() + new /obj/item/clothing/under/gladiator(src.loc) + new /obj/item/clothing/head/helmet/gladiator(src.loc) + qdel(src) + +/obj/effect/landmark/costume/madscientist/New() + new /obj/item/clothing/under/suit_jacket/green(src.loc) + new /obj/item/clothing/head/flatcap(src.loc) + new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc) + new /obj/item/clothing/glasses/gglasses(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/elpresidente/New() + new /obj/item/clothing/under/suit_jacket/green(src.loc) + new /obj/item/clothing/head/flatcap(src.loc) + new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc) + new /obj/item/clothing/shoes/boots/jackboots(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/nyangirl/New() + new /obj/item/clothing/under/schoolgirl(src.loc) + new /obj/item/clothing/head/kitty(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/maid/New() + new /obj/item/clothing/under/skirt(src.loc) + var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) + new CHOICE(src.loc) + new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/butler/New() + new /obj/item/clothing/accessory/wcoat(src.loc) + new /obj/item/clothing/under/suit_jacket(src.loc) + new /obj/item/clothing/head/that(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/scratch/New() + new /obj/item/clothing/gloves/white(src.loc) + new /obj/item/clothing/shoes/white(src.loc) + new /obj/item/clothing/under/scratch(src.loc) + if (prob(30)) + new /obj/item/clothing/head/cueball(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/highlander/New() + new /obj/item/clothing/under/kilt(src.loc) + new /obj/item/clothing/head/beret(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/prig/New() + new /obj/item/clothing/accessory/wcoat(src.loc) + new /obj/item/clothing/glasses/monocle(src.loc) + var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that) + new CHOICE(src.loc) + new /obj/item/clothing/shoes/black(src.loc) + new /obj/item/weapon/cane(src.loc) + new /obj/item/clothing/under/sl_suit(src.loc) + new /obj/item/clothing/mask/fakemoustache(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/plaguedoctor/New() + new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) + new /obj/item/clothing/head/plaguedoctorhat(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/nightowl/New() + new /obj/item/clothing/under/owl(src.loc) + new /obj/item/clothing/mask/gas/owl_mask(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/waiter/New() + new /obj/item/clothing/under/waiter(src.loc) + var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears) + new CHOICE(src.loc) + new /obj/item/clothing/suit/storage/apron(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/pirate/New() + new /obj/item/clothing/under/pirate(src.loc) + new /obj/item/clothing/suit/pirate(src.loc) + var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana ) + new CHOICE(src.loc) + new /obj/item/clothing/glasses/eyepatch(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/commie/New() + new /obj/item/clothing/under/soviet(src.loc) + new /obj/item/clothing/head/ushanka(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/imperium_monk/New() + new /obj/item/clothing/suit/imperium_monk(src.loc) + if (prob(25)) + new /obj/item/clothing/mask/gas/cyborg(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/holiday_priest/New() + new /obj/item/clothing/suit/holidaypriest(src.loc) + qdel(src) + +/obj/effect/landmark/costume/marisawizard/fake/New() + new /obj/item/clothing/head/wizard/marisa/fake(src.loc) + new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/cutewitch/New() + new /obj/item/clothing/under/sundress(src.loc) + new /obj/item/clothing/head/witchwig(src.loc) + new /obj/item/weapon/staff/broom(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/fakewizard/New() + new /obj/item/clothing/suit/wizrobe/fake(src.loc) + new /obj/item/clothing/head/wizard/fake(src.loc) + new /obj/item/weapon/staff/(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/sexyclown/New() + new /obj/item/clothing/mask/gas/sexyclown(src.loc) + new /obj/item/clothing/under/sexyclown(src.loc) + delete_me = 1 + +/obj/effect/landmark/costume/sexymime/New() + new /obj/item/clothing/mask/gas/sexymime(src.loc) + new /obj/item/clothing/under/sexymime(src.loc) + delete_me = 1 diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 98d378faf5..a6ec15c348 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -1,21 +1,21 @@ -/obj/effect/manifest - name = "manifest" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - unacidable = TRUE//Just to be sure. - -/obj/effect/manifest/New() - - src.invisibility = 101 - return - -/obj/effect/manifest/proc/manifest() - var/dat = "Crew Manifest:
                    " - for(var/mob/living/carbon/human/M in mob_list) - dat += text(" [] - []
                    ", M.name, M.get_assignment()) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) - P.info = dat - P.name = "paper- 'Crew Manifest'" - //SN src = null - qdel(src) +/obj/effect/manifest + name = "manifest" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + unacidable = TRUE//Just to be sure. + +/obj/effect/manifest/New() + + src.invisibility = 101 + return + +/obj/effect/manifest/proc/manifest() + var/dat = "Crew Manifest:
                    " + for(var/mob/living/carbon/human/M in mob_list) + dat += text(" [] - []
                    ", M.name, M.get_assignment()) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = dat + P.name = "paper- 'Crew Manifest'" + //SN src = null + qdel(src) return \ No newline at end of file diff --git a/code/game/objects/effects/map_effects/beam_point.dm b/code/game/objects/effects/map_effects/beam_point.dm index 6a023a0470..e8973e5fca 100644 --- a/code/game/objects/effects/map_effects/beam_point.dm +++ b/code/game/objects/effects/map_effects/beam_point.dm @@ -1,191 +1,191 @@ -GLOBAL_LIST_EMPTY(all_beam_points) - -// Creates and manages a beam attached to itself and another beam_point. -// You can do cool things with these such as moving the beam_point to move the beam, turning them on and off on a timer, triggered by external input, and more. -/obj/effect/map_effect/beam_point - name = "beam point" - icon_state = "beam_point" - - // General variables. - var/list/my_beams = list() // Instances of beams. Deleting one will kill the beam. - var/id = "A" // Two beam_points must share the same ID to be connected to each other. - var/max_beams = 10 // How many concurrent beams to seperate beam_points to have at once. Set to zero to only act as targets for other beam_points. - var/seek_range = 7 // How far to look for an end beam_point when not having a beam. Defaults to screen height/width. Make sure this is below beam_max_distance. - - // Controls how and when the beam is created. - var/make_beams_on_init = FALSE - var/use_timer = FALSE // Sadly not the /tg/ timers. - var/list/on_duration = list(2 SECONDS, 2 SECONDS, 2 SECONDS) // How long the beam should stay on for, if use_timer is true. Alternates between each duration in the list. - var/list/off_duration = list(3 SECONDS, 0.5 SECOND, 0.5 SECOND) // How long it should stay off for. List length is not needed to be the same as on_duration. - var/timer_on_index = 1 // Index to use for on_duration list. - var/timer_off_index = 1// Ditto, for off_duration list. - var/initial_delay = 0 // How long to wait before first turning on the beam, to sync beam times or create a specific pattern. - var/beam_creation_sound = null // Optional sound played when one or more beams are created. - var/beam_destruction_sound = null // Optional sound played when a beam is destroyed. - - // Beam datum arguments. - var/beam_icon = 'icons/effects/beam.dmi' // Icon file to use for beam visuals. - var/beam_icon_state = "b_beam" // Icon state to use for visuals. - var/beam_time = INFINITY // How long the beam lasts. By default it will last forever until destroyed. - var/beam_max_distance = 10 // If the beam is farther than this, it will be destroyed. Make sure it's higher than seek_range. - var/beam_type = /obj/effect/ebeam // The type of beam. Default has no special properties. Some others may do things like hurt things touching it. - var/beam_sleep_time = 3 // How often the beam updates visually. Suggested to leave this alone, 3 is already fast. - -/obj/effect/map_effect/beam_point/Initialize() - GLOB.all_beam_points += src - if(make_beams_on_init) - create_beams() - if(use_timer) - addtimer(CALLBACK(src, PROC_REF(handle_beam_timer)), initial_delay) - return ..() - -/obj/effect/map_effect/beam_point/Destroy() - destroy_all_beams() - use_timer = FALSE - GLOB.all_beam_points -= src - return ..() - -// This is the top level proc to make the magic happen. -/obj/effect/map_effect/beam_point/proc/create_beams() - if(my_beams.len >= max_beams) - return - var/beams_to_fill = max_beams - my_beams.len - for(var/i = 1 to beams_to_fill) - var/obj/effect/map_effect/beam_point/point = seek_beam_point() - if(!point) - break // No more points could be found, no point checking repeatively. - build_beam(point) - -// Finds a suitable beam point. -/obj/effect/map_effect/beam_point/proc/seek_beam_point() - for(var/obj/effect/map_effect/beam_point/point in GLOB.all_beam_points) - if(id != point.id) - continue // Not linked together by ID. - if(has_active_beam(point)) - continue // Already got one. - if(point.z != src.z) - continue // Not on same z-level. get_dist() ignores z-levels by design according to docs. - if(get_dist(src, point) > seek_range) - continue // Too far. - return point - -// Checks if the two points have an active beam between them. -// Used to make sure two points don't have more than one beam. -/obj/effect/map_effect/beam_point/proc/has_active_beam(var/obj/effect/map_effect/beam_point/them) - // First, check our beams. - for(var/datum/beam/B in my_beams) - if(B.target == them) - return TRUE - if(B.origin == them) // This shouldn't be needed unless the beam gets built backwards but why not. - return TRUE - - // Now check theirs, to see if they have a beam on us. - for(var/datum/beam/B in them.my_beams) - if(B.target == src) - return TRUE - if(B.origin == src) // Same story as above. - return TRUE - - return FALSE - -/obj/effect/map_effect/beam_point/proc/build_beam(var/atom/beam_target) - if(!beam_target) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) failed to build its beam due to not having a target.") - return FALSE - - var/datum/beam/new_beam = Beam(beam_target, beam_icon_state, beam_icon, beam_time, beam_max_distance, beam_type, beam_sleep_time) - my_beams += new_beam - if(beam_creation_sound) - playsound(src, beam_creation_sound, 70, 1) - - return TRUE - -/obj/effect/map_effect/beam_point/proc/destroy_beam(var/datum/beam/B) - if(!B) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam that does not exist.") - return FALSE - - if(!(B in my_beams)) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam it did not own.") - return FALSE - - my_beams -= B - qdel(B) - if(beam_destruction_sound) - playsound(src, beam_destruction_sound, 70, 1) - - return TRUE - -/obj/effect/map_effect/beam_point/proc/destroy_all_beams() - for(var/datum/beam/B in my_beams) - destroy_beam(B) - return TRUE - -// This code makes me sad. -/obj/effect/map_effect/beam_point/proc/handle_beam_timer() - if(!use_timer || QDELETED(src)) - return - - if(my_beams.len) // Currently on. - destroy_all_beams() - color = "#FF0000" - - timer_off_index++ - if(timer_off_index > off_duration.len) - timer_off_index = 1 - - spawn(off_duration[timer_off_index]) - .() - - else // Currently off. - // If nobody's around, keep the beams off to avoid wasteful beam process(), if they have one. - if(!always_run && !check_for_player_proximity(src, proximity_needed, ignore_ghosts, ignore_afk)) - spawn(retry_delay) - .() - return - - create_beams() - color = "#00FF00" - - timer_on_index++ - if(timer_on_index > on_duration.len) - timer_on_index = 1 - - spawn(on_duration[timer_on_index]) - .() - - - -// Subtypes to use in maps and adminbuse. -// Remember, beam_points ONLY connect to other beam_points with the same id variable. - -// Creates the beam when instantiated and stays on until told otherwise. -/obj/effect/map_effect/beam_point/instant - make_beams_on_init = TRUE - -/obj/effect/map_effect/beam_point/instant/electric - beam_icon_state = "nzcrentrs_power" - beam_type = /obj/effect/ebeam/reactive/electric - beam_creation_sound = 'sound/effects/lightningshock.ogg' - beam_destruction_sound = "sparks" - -// Turns on and off on a timer. -/obj/effect/map_effect/beam_point/timer - use_timer = TRUE - -// Shocks people who touch the beam while it's on. Flicks on and off on a specific pattern. -/obj/effect/map_effect/beam_point/timer/electric - beam_icon_state = "nzcrentrs_power" - beam_type = /obj/effect/ebeam/reactive/electric - beam_creation_sound = 'sound/effects/lightningshock.ogg' - beam_destruction_sound = "sparks" - seek_range = 3 - -// Is only a target for other beams to connect to. -/obj/effect/map_effect/beam_point/end - max_beams = 0 - -// Can only have one beam. -/obj/effect/map_effect/beam_point/mono - make_beams_on_init = TRUE - max_beams = 1 +GLOBAL_LIST_EMPTY(all_beam_points) + +// Creates and manages a beam attached to itself and another beam_point. +// You can do cool things with these such as moving the beam_point to move the beam, turning them on and off on a timer, triggered by external input, and more. +/obj/effect/map_effect/beam_point + name = "beam point" + icon_state = "beam_point" + + // General variables. + var/list/my_beams = list() // Instances of beams. Deleting one will kill the beam. + var/id = "A" // Two beam_points must share the same ID to be connected to each other. + var/max_beams = 10 // How many concurrent beams to seperate beam_points to have at once. Set to zero to only act as targets for other beam_points. + var/seek_range = 7 // How far to look for an end beam_point when not having a beam. Defaults to screen height/width. Make sure this is below beam_max_distance. + + // Controls how and when the beam is created. + var/make_beams_on_init = FALSE + var/use_timer = FALSE // Sadly not the /tg/ timers. + var/list/on_duration = list(2 SECONDS, 2 SECONDS, 2 SECONDS) // How long the beam should stay on for, if use_timer is true. Alternates between each duration in the list. + var/list/off_duration = list(3 SECONDS, 0.5 SECOND, 0.5 SECOND) // How long it should stay off for. List length is not needed to be the same as on_duration. + var/timer_on_index = 1 // Index to use for on_duration list. + var/timer_off_index = 1// Ditto, for off_duration list. + var/initial_delay = 0 // How long to wait before first turning on the beam, to sync beam times or create a specific pattern. + var/beam_creation_sound = null // Optional sound played when one or more beams are created. + var/beam_destruction_sound = null // Optional sound played when a beam is destroyed. + + // Beam datum arguments. + var/beam_icon = 'icons/effects/beam.dmi' // Icon file to use for beam visuals. + var/beam_icon_state = "b_beam" // Icon state to use for visuals. + var/beam_time = INFINITY // How long the beam lasts. By default it will last forever until destroyed. + var/beam_max_distance = 10 // If the beam is farther than this, it will be destroyed. Make sure it's higher than seek_range. + var/beam_type = /obj/effect/ebeam // The type of beam. Default has no special properties. Some others may do things like hurt things touching it. + var/beam_sleep_time = 3 // How often the beam updates visually. Suggested to leave this alone, 3 is already fast. + +/obj/effect/map_effect/beam_point/Initialize() + GLOB.all_beam_points += src + if(make_beams_on_init) + create_beams() + if(use_timer) + addtimer(CALLBACK(src, PROC_REF(handle_beam_timer)), initial_delay) + return ..() + +/obj/effect/map_effect/beam_point/Destroy() + destroy_all_beams() + use_timer = FALSE + GLOB.all_beam_points -= src + return ..() + +// This is the top level proc to make the magic happen. +/obj/effect/map_effect/beam_point/proc/create_beams() + if(my_beams.len >= max_beams) + return + var/beams_to_fill = max_beams - my_beams.len + for(var/i = 1 to beams_to_fill) + var/obj/effect/map_effect/beam_point/point = seek_beam_point() + if(!point) + break // No more points could be found, no point checking repeatively. + build_beam(point) + +// Finds a suitable beam point. +/obj/effect/map_effect/beam_point/proc/seek_beam_point() + for(var/obj/effect/map_effect/beam_point/point in GLOB.all_beam_points) + if(id != point.id) + continue // Not linked together by ID. + if(has_active_beam(point)) + continue // Already got one. + if(point.z != src.z) + continue // Not on same z-level. get_dist() ignores z-levels by design according to docs. + if(get_dist(src, point) > seek_range) + continue // Too far. + return point + +// Checks if the two points have an active beam between them. +// Used to make sure two points don't have more than one beam. +/obj/effect/map_effect/beam_point/proc/has_active_beam(var/obj/effect/map_effect/beam_point/them) + // First, check our beams. + for(var/datum/beam/B in my_beams) + if(B.target == them) + return TRUE + if(B.origin == them) // This shouldn't be needed unless the beam gets built backwards but why not. + return TRUE + + // Now check theirs, to see if they have a beam on us. + for(var/datum/beam/B in them.my_beams) + if(B.target == src) + return TRUE + if(B.origin == src) // Same story as above. + return TRUE + + return FALSE + +/obj/effect/map_effect/beam_point/proc/build_beam(var/atom/beam_target) + if(!beam_target) + log_debug("[src] ([src.type] \[[x],[y],[z]\]) failed to build its beam due to not having a target.") + return FALSE + + var/datum/beam/new_beam = Beam(beam_target, beam_icon_state, beam_icon, beam_time, beam_max_distance, beam_type, beam_sleep_time) + my_beams += new_beam + if(beam_creation_sound) + playsound(src, beam_creation_sound, 70, 1) + + return TRUE + +/obj/effect/map_effect/beam_point/proc/destroy_beam(var/datum/beam/B) + if(!B) + log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam that does not exist.") + return FALSE + + if(!(B in my_beams)) + log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam it did not own.") + return FALSE + + my_beams -= B + qdel(B) + if(beam_destruction_sound) + playsound(src, beam_destruction_sound, 70, 1) + + return TRUE + +/obj/effect/map_effect/beam_point/proc/destroy_all_beams() + for(var/datum/beam/B in my_beams) + destroy_beam(B) + return TRUE + +// This code makes me sad. +/obj/effect/map_effect/beam_point/proc/handle_beam_timer() + if(!use_timer || QDELETED(src)) + return + + if(my_beams.len) // Currently on. + destroy_all_beams() + color = "#FF0000" + + timer_off_index++ + if(timer_off_index > off_duration.len) + timer_off_index = 1 + + spawn(off_duration[timer_off_index]) + .() + + else // Currently off. + // If nobody's around, keep the beams off to avoid wasteful beam process(), if they have one. + if(!always_run && !check_for_player_proximity(src, proximity_needed, ignore_ghosts, ignore_afk)) + spawn(retry_delay) + .() + return + + create_beams() + color = "#00FF00" + + timer_on_index++ + if(timer_on_index > on_duration.len) + timer_on_index = 1 + + spawn(on_duration[timer_on_index]) + .() + + + +// Subtypes to use in maps and adminbuse. +// Remember, beam_points ONLY connect to other beam_points with the same id variable. + +// Creates the beam when instantiated and stays on until told otherwise. +/obj/effect/map_effect/beam_point/instant + make_beams_on_init = TRUE + +/obj/effect/map_effect/beam_point/instant/electric + beam_icon_state = "nzcrentrs_power" + beam_type = /obj/effect/ebeam/reactive/electric + beam_creation_sound = 'sound/effects/lightningshock.ogg' + beam_destruction_sound = "sparks" + +// Turns on and off on a timer. +/obj/effect/map_effect/beam_point/timer + use_timer = TRUE + +// Shocks people who touch the beam while it's on. Flicks on and off on a specific pattern. +/obj/effect/map_effect/beam_point/timer/electric + beam_icon_state = "nzcrentrs_power" + beam_type = /obj/effect/ebeam/reactive/electric + beam_creation_sound = 'sound/effects/lightningshock.ogg' + beam_destruction_sound = "sparks" + seek_range = 3 + +// Is only a target for other beams to connect to. +/obj/effect/map_effect/beam_point/end + max_beams = 0 + +// Can only have one beam. +/obj/effect/map_effect/beam_point/mono + make_beams_on_init = TRUE + max_beams = 1 diff --git a/code/game/objects/effects/map_effects/map_effects.dm b/code/game/objects/effects/map_effects/map_effects.dm index d5bad86662..ef1099d4b4 100644 --- a/code/game/objects/effects/map_effects/map_effects.dm +++ b/code/game/objects/effects/map_effects/map_effects.dm @@ -1,69 +1,69 @@ -// These are objects you can use inside special maps (like PoIs), or for adminbuse. -// Players cannot see or interact with these. -/obj/effect/map_effect - anchored = TRUE - invisibility = 99 // So a badmin can go view these by changing their see_invisible. - icon = 'icons/effects/map_effects.dmi' - - // Below vars concern check_for_player_proximity() and is used to not waste effort if nobody is around to appreciate the effects. - var/always_run = FALSE // If true, the game will not try to suppress this from firing if nobody is around to see it. - var/proximity_needed = 12 // How many tiles a mob with a client must be for this to run. - var/ignore_ghosts = FALSE // If true, ghosts won't satisfy the above requirement. - var/ignore_afk = TRUE // If true, AFK people (5 minutes) won't satisfy it as well. - var/retry_delay = 5 SECONDS // How long until we check for players again. - var/next_attempt = 0 // Next time we're going to do ACTUAL WORK - -/obj/effect/map_effect/ex_act() - return - -/obj/effect/map_effect/singularity_pull() - return - -/obj/effect/map_effect/singularity_act() - return - -// Base type for effects that run on variable intervals. -/obj/effect/map_effect/interval - var/interval_lower_bound = 5 SECONDS // Lower number for how often the map_effect will trigger. - var/interval_upper_bound = 5 SECONDS // Higher number for above. - -/obj/effect/map_effect/interval/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/map_effect/interval/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -// Override this for the specific thing to do. -/obj/effect/map_effect/interval/proc/trigger() - return - -// Handles the delay and making sure it doesn't run when it would be bad. -/obj/effect/map_effect/interval/process() - //Not yet! - if(world.time < next_attempt) - return - - // Check to see if we're useful first. - if(!always_run && !check_for_player_proximity(src, proximity_needed, ignore_ghosts, ignore_afk)) - next_attempt = world.time + retry_delay - // Hey there's someone nearby. - else - next_attempt = world.time + rand(interval_lower_bound, interval_upper_bound) - trigger() - -// Helper proc to optimize the use of effects by making sure they do not run if nobody is around to perceive it. -/proc/check_for_player_proximity(var/atom/proximity_to, var/radius = 12, var/ignore_ghosts = FALSE, var/ignore_afk = TRUE) - if(!proximity_to) - return FALSE - - for(var/thing in player_list) - var/mob/M = thing // Avoiding typechecks for more speed, player_list will only contain mobs anyways. - if(ignore_ghosts && isobserver(M)) - continue - if(ignore_afk && M.client && M.client.is_afk(5 MINUTES)) - continue - if(M.z == proximity_to.z && get_dist(M, proximity_to) <= radius) - return TRUE - return FALSE +// These are objects you can use inside special maps (like PoIs), or for adminbuse. +// Players cannot see or interact with these. +/obj/effect/map_effect + anchored = TRUE + invisibility = 99 // So a badmin can go view these by changing their see_invisible. + icon = 'icons/effects/map_effects.dmi' + + // Below vars concern check_for_player_proximity() and is used to not waste effort if nobody is around to appreciate the effects. + var/always_run = FALSE // If true, the game will not try to suppress this from firing if nobody is around to see it. + var/proximity_needed = 12 // How many tiles a mob with a client must be for this to run. + var/ignore_ghosts = FALSE // If true, ghosts won't satisfy the above requirement. + var/ignore_afk = TRUE // If true, AFK people (5 minutes) won't satisfy it as well. + var/retry_delay = 5 SECONDS // How long until we check for players again. + var/next_attempt = 0 // Next time we're going to do ACTUAL WORK + +/obj/effect/map_effect/ex_act() + return + +/obj/effect/map_effect/singularity_pull() + return + +/obj/effect/map_effect/singularity_act() + return + +// Base type for effects that run on variable intervals. +/obj/effect/map_effect/interval + var/interval_lower_bound = 5 SECONDS // Lower number for how often the map_effect will trigger. + var/interval_upper_bound = 5 SECONDS // Higher number for above. + +/obj/effect/map_effect/interval/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/effect/map_effect/interval/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +// Override this for the specific thing to do. +/obj/effect/map_effect/interval/proc/trigger() + return + +// Handles the delay and making sure it doesn't run when it would be bad. +/obj/effect/map_effect/interval/process() + //Not yet! + if(world.time < next_attempt) + return + + // Check to see if we're useful first. + if(!always_run && !check_for_player_proximity(src, proximity_needed, ignore_ghosts, ignore_afk)) + next_attempt = world.time + retry_delay + // Hey there's someone nearby. + else + next_attempt = world.time + rand(interval_lower_bound, interval_upper_bound) + trigger() + +// Helper proc to optimize the use of effects by making sure they do not run if nobody is around to perceive it. +/proc/check_for_player_proximity(var/atom/proximity_to, var/radius = 12, var/ignore_ghosts = FALSE, var/ignore_afk = TRUE) + if(!proximity_to) + return FALSE + + for(var/thing in player_list) + var/mob/M = thing // Avoiding typechecks for more speed, player_list will only contain mobs anyways. + if(ignore_ghosts && isobserver(M)) + continue + if(ignore_afk && M.client && M.client.is_afk(5 MINUTES)) + continue + if(M.z == proximity_to.z && get_dist(M, proximity_to) <= radius) + return TRUE + return FALSE diff --git a/code/game/objects/effects/map_effects/perma_light.dm b/code/game/objects/effects/map_effects/perma_light.dm index 35eef6d6b0..d2e9caa924 100644 --- a/code/game/objects/effects/map_effects/perma_light.dm +++ b/code/game/objects/effects/map_effects/perma_light.dm @@ -1,39 +1,39 @@ -// Emits light forever with magic. Useful for mood lighting in Points of Interest. -// Be sure to check how it looks ingame, and fiddle with the settings until it looks right. -/obj/effect/map_effect/perma_light - name = "permanent light" - icon_state = "permalight" - - light_range = 3 - light_power = 1 - light_color = "#FFFFFF" - light_on = TRUE - -/obj/effect/map_effect/perma_light/brighter - name = "permanent light (bright)" - icon_state = "permalight" - - light_range = 5 - light_power = 3 - light_color = "#FFFFFF" - -/obj/effect/map_effect/perma_light/concentrated - name = "permanent light (concentrated)" - - light_range = 2 - light_power = 5 - -/obj/effect/map_effect/perma_light/concentrated/incandescent - name = "permanent light (concentrated incandescent)" - - light_color = LIGHT_COLOR_INCANDESCENT_TUBE - -// VOREStation Addition Start -/obj/effect/map_effect/perma_light/gateway - name = "permanent light (gateway)" - icon_state = "permalight" - - light_range = 10 - light_power = 5 - light_color = "#b6cdff" +// Emits light forever with magic. Useful for mood lighting in Points of Interest. +// Be sure to check how it looks ingame, and fiddle with the settings until it looks right. +/obj/effect/map_effect/perma_light + name = "permanent light" + icon_state = "permalight" + + light_range = 3 + light_power = 1 + light_color = "#FFFFFF" + light_on = TRUE + +/obj/effect/map_effect/perma_light/brighter + name = "permanent light (bright)" + icon_state = "permalight" + + light_range = 5 + light_power = 3 + light_color = "#FFFFFF" + +/obj/effect/map_effect/perma_light/concentrated + name = "permanent light (concentrated)" + + light_range = 2 + light_power = 5 + +/obj/effect/map_effect/perma_light/concentrated/incandescent + name = "permanent light (concentrated incandescent)" + + light_color = LIGHT_COLOR_INCANDESCENT_TUBE + +// VOREStation Addition Start +/obj/effect/map_effect/perma_light/gateway + name = "permanent light (gateway)" + icon_state = "permalight" + + light_range = 10 + light_power = 5 + light_color = "#b6cdff" // VOREStation Addition End \ No newline at end of file diff --git a/code/game/objects/effects/map_effects/radiation_emitter.dm b/code/game/objects/effects/map_effects/radiation_emitter.dm index 8abf946556..89a8d194f5 100644 --- a/code/game/objects/effects/map_effects/radiation_emitter.dm +++ b/code/game/objects/effects/map_effects/radiation_emitter.dm @@ -1,19 +1,19 @@ -// Constantly emites radiation from the tile it's placed on. -/obj/effect/map_effect/radiation_emitter - name = "radiation emitter" - icon_state = "radiation_emitter" - var/radiation_power = 30 // Bigger numbers means more radiation. - -/obj/effect/map_effect/radiation_emitter/Initialize() - START_PROCESSING(SSobj, src) - return ..() - -/obj/effect/map_effect/radiation_emitter/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/map_effect/radiation_emitter/process() - SSradiation.radiate(src, radiation_power) - +// Constantly emites radiation from the tile it's placed on. +/obj/effect/map_effect/radiation_emitter + name = "radiation emitter" + icon_state = "radiation_emitter" + var/radiation_power = 30 // Bigger numbers means more radiation. + +/obj/effect/map_effect/radiation_emitter/Initialize() + START_PROCESSING(SSobj, src) + return ..() + +/obj/effect/map_effect/radiation_emitter/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/effect/map_effect/radiation_emitter/process() + SSradiation.radiate(src, radiation_power) + /obj/effect/map_effect/radiation_emitter/strong radiation_power = 100 \ No newline at end of file diff --git a/code/game/objects/effects/map_effects/screen_shaker.dm b/code/game/objects/effects/map_effects/screen_shaker.dm index c8f5d413bd..15a83b4c3d 100644 --- a/code/game/objects/effects/map_effects/screen_shaker.dm +++ b/code/game/objects/effects/map_effects/screen_shaker.dm @@ -1,17 +1,17 @@ -// Makes the screen shake for nearby players every so often. -/obj/effect/map_effect/interval/screen_shaker - name = "screen shaker" - icon_state = "screen_shaker" - - interval_lower_bound = 1 SECOND - interval_upper_bound = 2 SECONDS - - var/shake_radius = 7 // How far the shaking effect extends to. By default it is one screen length. - var/shake_duration = 2 // How long the shaking lasts. - var/shake_strength = 1 // How much it shakes. - -/obj/effect/map_effect/interval/screen_shaker/trigger() - for(var/mob/M as anything in player_list) - if(M.z == src.z && get_dist(src, M) <= shake_radius) - shake_camera(M, shake_duration, shake_strength) +// Makes the screen shake for nearby players every so often. +/obj/effect/map_effect/interval/screen_shaker + name = "screen shaker" + icon_state = "screen_shaker" + + interval_lower_bound = 1 SECOND + interval_upper_bound = 2 SECONDS + + var/shake_radius = 7 // How far the shaking effect extends to. By default it is one screen length. + var/shake_duration = 2 // How long the shaking lasts. + var/shake_strength = 1 // How much it shakes. + +/obj/effect/map_effect/interval/screen_shaker/trigger() + for(var/mob/M as anything in player_list) + if(M.z == src.z && get_dist(src, M) <= shake_radius) + shake_camera(M, shake_duration, shake_strength) ..() \ No newline at end of file diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 7941a0fbbc..6448c57b0b 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -1,403 +1,403 @@ -/obj/effect/mine - name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find. - desc = "A small explosive land mine." - density = FALSE - anchored = TRUE - icon = 'icons/obj/weapons.dmi' - icon_state = "landmine" - var/triggered = 0 - var/smoke_strength = 3 - var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine - var/panel_open = FALSE - var/datum/wires/mines/wires = null - var/camo_net = FALSE // Will the mine 'cloak' on deployment? - - // The trap item will be triggered in some manner when detonating. Default only checks for grenades. - var/obj/item/trap = null - -/obj/effect/mine/Initialize() - icon_state = "landmine_armed" - wires = new(src) - . = ..() - if(ispath(trap)) - trap = new trap(src) - register_dangerous_to_step() - if(camo_net) - alpha = 50 - -/obj/effect/mine/Destroy() - unregister_dangerous_to_step() - if(trap) - QDEL_NULL(trap) - qdel_null(wires) - return ..() - -/obj/effect/mine/Moved(atom/oldloc) - . = ..() - if(.) - var/turf/old_turf = get_turf(oldloc) - var/turf/new_turf = get_turf(src) - if(old_turf != new_turf) - old_turf.unregister_dangerous_object(src) - new_turf.register_dangerous_object(src) - -/obj/effect/mine/proc/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 - s.set_up(3, 1, src) - s.start() - - if(trap) - trigger_trap(M) - visible_message("\The [src.name] flashes as it is triggered!") - - else - explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks. - visible_message("\The [src.name] detonates!") - - qdel(s) - qdel(src) - -/obj/effect/mine/proc/trigger_trap(var/mob/living/victim) - if(istype(trap, /obj/item/weapon/grenade)) - var/obj/item/weapon/grenade/G = trap - trap = null - G.forceMove(get_turf(src)) - if(victim.ckey) - msg_admin_attack("[key_name_admin(victim)] stepped on \a [src.name], triggering [trap]") - G.activate() - - if(istype(trap, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TV = trap - trap = null - TV.forceMove(get_turf(src)) - TV.toggle_valve() - -/obj/effect/mine/bullet_act() - if(prob(50)) - explode() - -/obj/effect/mine/ex_act(severity) - if(severity <= 2 || prob(50)) - explode() - ..() - -/obj/effect/mine/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - Bumped(AM) - -/obj/effect/mine/Bumped(mob/M as mob|obj) - - if(triggered) - return - - if(istype(M, /obj/mecha)) - explode(M) - - if(istype(M, /mob/living/)) - if(!M.hovering) //CHOMPedit: let's not make wings ignore mines because we use those here. - explode(M) - -/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - panel_open = !panel_open - user.visible_message("[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].", - "You very carefully screw the mine's panel [panel_open ? "open" : "closed"].") - playsound(src, W.usesound, 50, 1) - - // Panel open, stay uncloaked, or uncloak if already cloaked. If you don't cloak on place, ignore it and just be normal alpha. - alpha = camo_net ? (panel_open ? 255 : 50) : 255 - - else if((W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/multitool)) && panel_open) - interact(user) - else - ..() - -/obj/effect/mine/interact(mob/living/user as mob) - if(!panel_open || istype(user, /mob/living/silicon/ai)) - return - user.set_machine(src) - wires.Interact(user) - -/obj/effect/mine/camo - camo_net = TRUE - -/obj/effect/mine/dnascramble - mineitemtype = /obj/item/weapon/mine/dnascramble - -/obj/effect/mine/dnascramble/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 - s.set_up(3, 1, src) - s.start() - if(istype(M)) - M.radiation += 50 - randmutb(M) - domutcheck(M,null) - visible_message("\The [src.name] flashes violently before disintegrating!") - spawn(0) - qdel(s) - qdel(src) - -/obj/effect/mine/stun - mineitemtype = /obj/item/weapon/mine/stun - -/obj/effect/mine/stun/explode(var/mob/living/M) - triggered = 1 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - if(istype(M)) - M.Stun(30) - visible_message("\The [src.name] flashes violently before disintegrating!") - spawn(0) - qdel(s) - qdel(src) - -/obj/effect/mine/n2o - mineitemtype = /obj/item/weapon/mine/n2o - -/obj/effect/mine/n2o/explode(var/mob/living/M) - triggered = 1 - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas("nitrous_oxide", 30) - visible_message("\The [src.name] detonates!") - spawn(0) - qdel(src) - -/obj/effect/mine/phoron - mineitemtype = /obj/item/weapon/mine/phoron - -/obj/effect/mine/phoron/explode(var/mob/living/M) - triggered = 1 - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas("phoron", 30) - target.hotspot_expose(1000, CELL_VOLUME) - visible_message("\The [src.name] detonates!") - spawn(0) - qdel(src) - -/obj/effect/mine/kick - mineitemtype = /obj/item/weapon/mine/kick - -/obj/effect/mine/kick/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 - s.set_up(3, 1, src) - s.start() - if(istype(M, /obj/mecha)) - var/obj/mecha/E = M - M = E.occupant - if(istype(M)) - qdel(M.client) - spawn(0) - qdel(s) - qdel(src) - -/obj/effect/mine/frag - mineitemtype = /obj/item/weapon/mine/frag - var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment) - var/num_fragments = 20 //total number of fragments produced by the grenade - //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern - var/spread_range = 7 - -/obj/effect/mine/frag/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 - s.set_up(3, 1, src) - s.start() - var/turf/O = get_turf(src) - if(!O) - return - src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it - visible_message("\The [src.name] detonates!") - spawn(0) - qdel(s) - qdel(src) - -/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines -// name = "training mine" -// desc = "A mine with its payload removed, for EOD training and demonstrations." - mineitemtype = /obj/item/weapon/mine/training - -/obj/effect/mine/training/explode(var/mob/living/M) - triggered = 1 - visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.") - new src.mineitemtype(get_turf(src)) - spawn(0) - qdel(src) - -/obj/effect/mine/emp - mineitemtype = /obj/item/weapon/mine/emp - -/obj/effect/mine/emp/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - visible_message("\The [src.name] flashes violently before disintegrating!") - empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade - spawn(0) - qdel(src) - -/obj/effect/mine/emp/camo - camo_net = TRUE - -/obj/effect/mine/incendiary - mineitemtype = /obj/item/weapon/mine/incendiary - -/obj/effect/mine/incendiary/explode(var/mob/living/M) - triggered = 1 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - if(istype(M)) - M.adjust_fire_stacks(5) - M.fire_act() - visible_message("\The [src.name] bursts into flames!") - spawn(0) - qdel(src) - -/obj/effect/mine/gadget - mineitemtype = /obj/item/weapon/mine/gadget - -/obj/effect/mine/gadget/explode(var/mob/living/M) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 - s.set_up(3, 1, src) - s.start() - - if(trap) - trigger_trap(M) - visible_message("\The [src.name] flashes as it is triggered!") - - else - explosion(loc, 0, 0, 2, 2) - visible_message("\The [src.name] detonates!") - - qdel(s) - qdel(src) - -///////////////////////////////////////////// -// The held item version of the above mines -///////////////////////////////////////////// -/obj/item/weapon/mine - name = "mine" - desc = "A small explosive mine with 'HE' and a grenade symbol on the side." - icon = 'icons/obj/weapons.dmi' - icon_state = "uglymine" - var/countdown = 10 - var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime. - - var/obj/item/trap = null - - var/list/allowed_gadgets = null - -/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times - add_fingerprint(user) - msg_admin_attack("[key_name_admin(user)] primed \a [src]") - user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!") - if(do_after(user, 10 SECONDS)) - playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) - prime(user) - else - visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!") - prime(user, TRUE) - return - -/obj/item/weapon/mine/attackby(obj/item/W as obj, mob/living/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER) && trap) - to_chat(user, "You begin removing \the [trap].") - if(do_after(user, 10 SECONDS)) - to_chat(user, "You finish disconnecting the mine's trigger.") - trap.forceMove(get_turf(src)) - trap = null - return - - if(LAZYLEN(allowed_gadgets) && !trap) - var/allowed = FALSE - - for(var/path in allowed_gadgets) - if(istype(W, path)) - allowed = TRUE - break - - if(allowed) - user.drop_from_inventory(W) - W.forceMove(src) - trap = W - - ..() - -/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE) - visible_message("\The [src.name] beeps as the priming sequence completes.") - var/obj/effect/mine/R = new minetype(get_turf(src)) - src.transfer_fingerprints_to(R) - R.add_fingerprint(user) - if(trap) - R.trap = trap - trap = null - R.trap.forceMove(R) - if(explode_now) - R.explode(user) - spawn(0) - qdel(src) - -/obj/item/weapon/mine/dnascramble - name = "radiation mine" - desc = "A small explosive mine with a radiation symbol on the side." - minetype = /obj/effect/mine/dnascramble - -/obj/item/weapon/mine/phoron - name = "incendiary mine" - desc = "A small explosive mine with a fire symbol on the side." - minetype = /obj/effect/mine/phoron - -/obj/item/weapon/mine/kick - name = "kick mine" - desc = "Concentrated war crimes. Handle with care." - minetype = /obj/effect/mine/kick - -/obj/item/weapon/mine/n2o - name = "nitrous oxide mine" - desc = "A small explosive mine with three Z's on the side." - minetype = /obj/effect/mine/n2o - -/obj/item/weapon/mine/stun - name = "stun mine" - desc = "A small explosive mine with a lightning bolt symbol on the side." - minetype = /obj/effect/mine/stun - -/obj/item/weapon/mine/frag - name = "fragmentation mine" - desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side." - minetype = /obj/effect/mine/frag - -/obj/item/weapon/mine/training - name = "training mine" - desc = "A mine with its payload removed, for EOD training and demonstrations." - minetype = /obj/effect/mine/training - -/obj/item/weapon/mine/emp - name = "emp mine" - desc = "A small explosive mine with a lightning bolt symbol on the side." - minetype = /obj/effect/mine/emp - -/obj/item/weapon/mine/incendiary - name = "incendiary mine" - desc = "A small explosive mine with a fire symbol on the side." - minetype = /obj/effect/mine/incendiary - -/obj/item/weapon/mine/gadget - name = "gadget mine" - desc = "A small pressure-triggered device. If no component is added, the internal release bolts will detonate in unison when triggered." - - allowed_gadgets = list(/obj/item/weapon/grenade, /obj/item/device/transfer_valve) - -// This tells AI mobs to not be dumb and step on mines willingly. -/obj/item/weapon/mine/is_safe_to_step(mob/living/L) - if(!L.hovering) //CHOMPedit: Let's not trivialize mines. - return FALSE - return ..() +/obj/effect/mine + name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find. + desc = "A small explosive land mine." + density = FALSE + anchored = TRUE + icon = 'icons/obj/weapons.dmi' + icon_state = "landmine" + var/triggered = 0 + var/smoke_strength = 3 + var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine + var/panel_open = FALSE + var/datum/wires/mines/wires = null + var/camo_net = FALSE // Will the mine 'cloak' on deployment? + + // The trap item will be triggered in some manner when detonating. Default only checks for grenades. + var/obj/item/trap = null + +/obj/effect/mine/Initialize() + icon_state = "landmine_armed" + wires = new(src) + . = ..() + if(ispath(trap)) + trap = new trap(src) + register_dangerous_to_step() + if(camo_net) + alpha = 50 + +/obj/effect/mine/Destroy() + unregister_dangerous_to_step() + if(trap) + QDEL_NULL(trap) + qdel_null(wires) + return ..() + +/obj/effect/mine/Moved(atom/oldloc) + . = ..() + if(.) + var/turf/old_turf = get_turf(oldloc) + var/turf/new_turf = get_turf(src) + if(old_turf != new_turf) + old_turf.unregister_dangerous_object(src) + new_turf.register_dangerous_object(src) + +/obj/effect/mine/proc/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + triggered = 1 + s.set_up(3, 1, src) + s.start() + + if(trap) + trigger_trap(M) + visible_message("\The [src.name] flashes as it is triggered!") + + else + explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks. + visible_message("\The [src.name] detonates!") + + qdel(s) + qdel(src) + +/obj/effect/mine/proc/trigger_trap(var/mob/living/victim) + if(istype(trap, /obj/item/weapon/grenade)) + var/obj/item/weapon/grenade/G = trap + trap = null + G.forceMove(get_turf(src)) + if(victim.ckey) + msg_admin_attack("[key_name_admin(victim)] stepped on \a [src.name], triggering [trap]") + G.activate() + + if(istype(trap, /obj/item/device/transfer_valve)) + var/obj/item/device/transfer_valve/TV = trap + trap = null + TV.forceMove(get_turf(src)) + TV.toggle_valve() + +/obj/effect/mine/bullet_act() + if(prob(50)) + explode() + +/obj/effect/mine/ex_act(severity) + if(severity <= 2 || prob(50)) + explode() + ..() + +/obj/effect/mine/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + Bumped(AM) + +/obj/effect/mine/Bumped(mob/M as mob|obj) + + if(triggered) + return + + if(istype(M, /obj/mecha)) + explode(M) + + if(istype(M, /mob/living/)) + if(!M.hovering) //CHOMPedit: let's not make wings ignore mines because we use those here. + explode(M) + +/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + panel_open = !panel_open + user.visible_message("[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].", + "You very carefully screw the mine's panel [panel_open ? "open" : "closed"].") + playsound(src, W.usesound, 50, 1) + + // Panel open, stay uncloaked, or uncloak if already cloaked. If you don't cloak on place, ignore it and just be normal alpha. + alpha = camo_net ? (panel_open ? 255 : 50) : 255 + + else if((W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/multitool)) && panel_open) + interact(user) + else + ..() + +/obj/effect/mine/interact(mob/living/user as mob) + if(!panel_open || istype(user, /mob/living/silicon/ai)) + return + user.set_machine(src) + wires.Interact(user) + +/obj/effect/mine/camo + camo_net = TRUE + +/obj/effect/mine/dnascramble + mineitemtype = /obj/item/weapon/mine/dnascramble + +/obj/effect/mine/dnascramble/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + triggered = 1 + s.set_up(3, 1, src) + s.start() + if(istype(M)) + M.radiation += 50 + randmutb(M) + domutcheck(M,null) + visible_message("\The [src.name] flashes violently before disintegrating!") + spawn(0) + qdel(s) + qdel(src) + +/obj/effect/mine/stun + mineitemtype = /obj/item/weapon/mine/stun + +/obj/effect/mine/stun/explode(var/mob/living/M) + triggered = 1 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + s.set_up(3, 1, src) + s.start() + if(istype(M)) + M.Stun(30) + visible_message("\The [src.name] flashes violently before disintegrating!") + spawn(0) + qdel(s) + qdel(src) + +/obj/effect/mine/n2o + mineitemtype = /obj/item/weapon/mine/n2o + +/obj/effect/mine/n2o/explode(var/mob/living/M) + triggered = 1 + for (var/turf/simulated/floor/target in range(1,src)) + if(!target.blocks_air) + target.assume_gas("nitrous_oxide", 30) + visible_message("\The [src.name] detonates!") + spawn(0) + qdel(src) + +/obj/effect/mine/phoron + mineitemtype = /obj/item/weapon/mine/phoron + +/obj/effect/mine/phoron/explode(var/mob/living/M) + triggered = 1 + for (var/turf/simulated/floor/target in range(1,src)) + if(!target.blocks_air) + target.assume_gas("phoron", 30) + target.hotspot_expose(1000, CELL_VOLUME) + visible_message("\The [src.name] detonates!") + spawn(0) + qdel(src) + +/obj/effect/mine/kick + mineitemtype = /obj/item/weapon/mine/kick + +/obj/effect/mine/kick/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + triggered = 1 + s.set_up(3, 1, src) + s.start() + if(istype(M, /obj/mecha)) + var/obj/mecha/E = M + M = E.occupant + if(istype(M)) + qdel(M.client) + spawn(0) + qdel(s) + qdel(src) + +/obj/effect/mine/frag + mineitemtype = /obj/item/weapon/mine/frag + var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment) + var/num_fragments = 20 //total number of fragments produced by the grenade + //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern + var/spread_range = 7 + +/obj/effect/mine/frag/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + triggered = 1 + s.set_up(3, 1, src) + s.start() + var/turf/O = get_turf(src) + if(!O) + return + src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it + visible_message("\The [src.name] detonates!") + spawn(0) + qdel(s) + qdel(src) + +/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines +// name = "training mine" +// desc = "A mine with its payload removed, for EOD training and demonstrations." + mineitemtype = /obj/item/weapon/mine/training + +/obj/effect/mine/training/explode(var/mob/living/M) + triggered = 1 + visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.") + new src.mineitemtype(get_turf(src)) + spawn(0) + qdel(src) + +/obj/effect/mine/emp + mineitemtype = /obj/item/weapon/mine/emp + +/obj/effect/mine/emp/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + s.set_up(3, 1, src) + s.start() + visible_message("\The [src.name] flashes violently before disintegrating!") + empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade + spawn(0) + qdel(src) + +/obj/effect/mine/emp/camo + camo_net = TRUE + +/obj/effect/mine/incendiary + mineitemtype = /obj/item/weapon/mine/incendiary + +/obj/effect/mine/incendiary/explode(var/mob/living/M) + triggered = 1 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + s.set_up(3, 1, src) + s.start() + if(istype(M)) + M.adjust_fire_stacks(5) + M.fire_act() + visible_message("\The [src.name] bursts into flames!") + spawn(0) + qdel(src) + +/obj/effect/mine/gadget + mineitemtype = /obj/item/weapon/mine/gadget + +/obj/effect/mine/gadget/explode(var/mob/living/M) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + triggered = 1 + s.set_up(3, 1, src) + s.start() + + if(trap) + trigger_trap(M) + visible_message("\The [src.name] flashes as it is triggered!") + + else + explosion(loc, 0, 0, 2, 2) + visible_message("\The [src.name] detonates!") + + qdel(s) + qdel(src) + +///////////////////////////////////////////// +// The held item version of the above mines +///////////////////////////////////////////// +/obj/item/weapon/mine + name = "mine" + desc = "A small explosive mine with 'HE' and a grenade symbol on the side." + icon = 'icons/obj/weapons.dmi' + icon_state = "uglymine" + var/countdown = 10 + var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime. + + var/obj/item/trap = null + + var/list/allowed_gadgets = null + +/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times + add_fingerprint(user) + msg_admin_attack("[key_name_admin(user)] primed \a [src]") + user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!") + if(do_after(user, 10 SECONDS)) + playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) + prime(user) + else + visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!") + prime(user, TRUE) + return + +/obj/item/weapon/mine/attackby(obj/item/W as obj, mob/living/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER) && trap) + to_chat(user, "You begin removing \the [trap].") + if(do_after(user, 10 SECONDS)) + to_chat(user, "You finish disconnecting the mine's trigger.") + trap.forceMove(get_turf(src)) + trap = null + return + + if(LAZYLEN(allowed_gadgets) && !trap) + var/allowed = FALSE + + for(var/path in allowed_gadgets) + if(istype(W, path)) + allowed = TRUE + break + + if(allowed) + user.drop_from_inventory(W) + W.forceMove(src) + trap = W + + ..() + +/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE) + visible_message("\The [src.name] beeps as the priming sequence completes.") + var/obj/effect/mine/R = new minetype(get_turf(src)) + src.transfer_fingerprints_to(R) + R.add_fingerprint(user) + if(trap) + R.trap = trap + trap = null + R.trap.forceMove(R) + if(explode_now) + R.explode(user) + spawn(0) + qdel(src) + +/obj/item/weapon/mine/dnascramble + name = "radiation mine" + desc = "A small explosive mine with a radiation symbol on the side." + minetype = /obj/effect/mine/dnascramble + +/obj/item/weapon/mine/phoron + name = "incendiary mine" + desc = "A small explosive mine with a fire symbol on the side." + minetype = /obj/effect/mine/phoron + +/obj/item/weapon/mine/kick + name = "kick mine" + desc = "Concentrated war crimes. Handle with care." + minetype = /obj/effect/mine/kick + +/obj/item/weapon/mine/n2o + name = "nitrous oxide mine" + desc = "A small explosive mine with three Z's on the side." + minetype = /obj/effect/mine/n2o + +/obj/item/weapon/mine/stun + name = "stun mine" + desc = "A small explosive mine with a lightning bolt symbol on the side." + minetype = /obj/effect/mine/stun + +/obj/item/weapon/mine/frag + name = "fragmentation mine" + desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side." + minetype = /obj/effect/mine/frag + +/obj/item/weapon/mine/training + name = "training mine" + desc = "A mine with its payload removed, for EOD training and demonstrations." + minetype = /obj/effect/mine/training + +/obj/item/weapon/mine/emp + name = "emp mine" + desc = "A small explosive mine with a lightning bolt symbol on the side." + minetype = /obj/effect/mine/emp + +/obj/item/weapon/mine/incendiary + name = "incendiary mine" + desc = "A small explosive mine with a fire symbol on the side." + minetype = /obj/effect/mine/incendiary + +/obj/item/weapon/mine/gadget + name = "gadget mine" + desc = "A small pressure-triggered device. If no component is added, the internal release bolts will detonate in unison when triggered." + + allowed_gadgets = list(/obj/item/weapon/grenade, /obj/item/device/transfer_valve) + +// This tells AI mobs to not be dumb and step on mines willingly. +/obj/item/weapon/mine/is_safe_to_step(mob/living/L) + if(!L.hovering) //CHOMPedit: Let's not trivialize mines. + return FALSE + return ..() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index cd517098dc..d51d769d56 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -1,152 +1,152 @@ -//The effect when you wrap a dead body in gift wrap -/obj/effect/spresent - name = "strange present" - desc = "It's a ... present?" - icon = 'icons/obj/items.dmi' - icon_state = "strangepresent" - density = TRUE - anchored = FALSE - -/obj/effect/temporary_effect - name = "self deleting effect" - desc = "How are you examining what which cannot be seen?" - icon = 'icons/effects/effects.dmi' - invisibility = 0 - var/time_to_die = 10 SECONDS // Afer which, it will delete itself. - -/obj/effect/temporary_effect/Initialize() - . = ..() - if(time_to_die) - QDEL_IN(src, time_to_die) - -// Shown really briefly when attacking with axes. -/obj/effect/temporary_effect/cleave_attack - name = "cleaving attack" - desc = "Something swinging really wide." - icon = 'icons/effects/96x96.dmi' - icon_state = "cleave" - plane = ABOVE_MOB_PLANE - layer = ABOVE_MOB_LAYER - time_to_die = 6 - alpha = 140 - mouse_opacity = 0 - pixel_x = -32 - pixel_y = -32 - -/obj/effect/temporary_effect/cleave_attack/Initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself. - . = ..() - animate(src, alpha = 0, time = time_to_die - 1) - -/obj/effect/temporary_effect/shuttle_landing - name = "shuttle landing" - desc = "You better move if you don't want to go splat!" - //VOREStation Edit Start - icon = 'icons/goonstation/featherzone.dmi' - icon_state = "hazard-corners" - time_to_die = 5 SECONDS - plane = PLANE_LIGHTING_ABOVE - //VOREStation Edit End - -// The manifestation of Zeus's might. Or just a really unlucky day. -// This is purely a visual effect, this isn't the part of the code that hurts things. -/obj/effect/temporary_effect/lightning_strike - name = "lightning" - desc = "How shocked you must be, to see this text. You must have lightning reflexes. \ - The humor in this description is just so electrifying." - icon = 'icons/effects/96x256.dmi' - icon_state = "lightning_strike" - plane = PLANE_LIGHTING_ABOVE - time_to_die = 1 SECOND - pixel_x = -32 - -/obj/effect/temporary_effect/lightning_strike/Initialize() - icon_state += "[rand(1,2)]" // To have two variants of lightning sprites. - animate(src, alpha = 0, time = time_to_die - 1) - . = ..() - -/obj/effect/dummy/lighting_obj - name = "lighting fx obj" - desc = "Tell a coder if you're seeing this." - icon_state = "nothing" - light_system = MOVABLE_LIGHT - light_range = MINIMUM_USEFUL_LIGHT_RANGE - light_color = COLOR_WHITE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - light_on = TRUE - blocks_emissive = FALSE - -/obj/effect/dummy/lighting_obj/Initialize(mapload, _range, _power, _color, _duration) - . = ..() - if(!isnull(_range)) - set_light_range(_range) - if(!isnull(_power)) - set_light_power(_power) - if(!isnull(_color)) - set_light_color(_color) - if(_duration) - QDEL_IN(src, _duration) - -/obj/effect/dummy/lighting_obj/moblight - name = "mob lighting fx" - -/obj/effect/dummy/lighting_obj/moblight/Initialize(mapload, _color, _range, _power, _duration) - . = ..() - if(!ismob(loc)) - return INITIALIZE_HINT_QDEL - -/obj/effect/dummy/lighting_obj/moblight/fire - name = "fire" - light_color = LIGHT_COLOR_FIRE - light_range = LIGHT_RANGE_FIRE - -/obj/effect/abstract - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = ABOVE_MOB_PLANE - -/obj/effect/abstract/light_spot - icon = 'icons/effects/eris_flashlight.dmi' - icon_state = "medium" - pixel_x = -16 - pixel_y = -16 - -/obj/effect/abstract/directional_lighting - var/obj/effect/abstract/light_spot/light_spot = new - var/trans_angle - var/icon_dist - -/obj/effect/abstract/directional_lighting/Initialize() - . = ..() - vis_contents += light_spot - -/obj/effect/abstract/directional_lighting/proc/face_light(atom/movable/source, angle, distance) - if(!loc) // We're in nullspace - return - - // Save ourselves some matrix math - if(angle != trans_angle) - trans_angle = angle - // Doing this in one operation (tn = turn(initial(tn), angle)) has strange results... - light_spot.transform = initial(light_spot.transform) - light_spot.transform = turn(light_spot.transform, angle) - - if(icon_dist != distance) - icon_dist = distance - switch(distance) - if(0) - light_spot.icon_state = "vclose" - if(1) - light_spot.icon_state = "close" - if(2) - light_spot.icon_state = "medium" - if(3 to INFINITY) - light_spot.icon_state = "far" - -/obj/effect/abstract/directional_lighting/Destroy(force) - if(!force) - stack_trace("Directional light atom deleted, but not by our component") - return QDEL_HINT_LETMELIVE - - vis_contents.Cut() - qdel_null(light_spot) - - return ..() +//The effect when you wrap a dead body in gift wrap +/obj/effect/spresent + name = "strange present" + desc = "It's a ... present?" + icon = 'icons/obj/items.dmi' + icon_state = "strangepresent" + density = TRUE + anchored = FALSE + +/obj/effect/temporary_effect + name = "self deleting effect" + desc = "How are you examining what which cannot be seen?" + icon = 'icons/effects/effects.dmi' + invisibility = 0 + var/time_to_die = 10 SECONDS // Afer which, it will delete itself. + +/obj/effect/temporary_effect/Initialize() + . = ..() + if(time_to_die) + QDEL_IN(src, time_to_die) + +// Shown really briefly when attacking with axes. +/obj/effect/temporary_effect/cleave_attack + name = "cleaving attack" + desc = "Something swinging really wide." + icon = 'icons/effects/96x96.dmi' + icon_state = "cleave" + plane = ABOVE_MOB_PLANE + layer = ABOVE_MOB_LAYER + time_to_die = 6 + alpha = 140 + mouse_opacity = 0 + pixel_x = -32 + pixel_y = -32 + +/obj/effect/temporary_effect/cleave_attack/Initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself. + . = ..() + animate(src, alpha = 0, time = time_to_die - 1) + +/obj/effect/temporary_effect/shuttle_landing + name = "shuttle landing" + desc = "You better move if you don't want to go splat!" + //VOREStation Edit Start + icon = 'icons/goonstation/featherzone.dmi' + icon_state = "hazard-corners" + time_to_die = 5 SECONDS + plane = PLANE_LIGHTING_ABOVE + //VOREStation Edit End + +// The manifestation of Zeus's might. Or just a really unlucky day. +// This is purely a visual effect, this isn't the part of the code that hurts things. +/obj/effect/temporary_effect/lightning_strike + name = "lightning" + desc = "How shocked you must be, to see this text. You must have lightning reflexes. \ + The humor in this description is just so electrifying." + icon = 'icons/effects/96x256.dmi' + icon_state = "lightning_strike" + plane = PLANE_LIGHTING_ABOVE + time_to_die = 1 SECOND + pixel_x = -32 + +/obj/effect/temporary_effect/lightning_strike/Initialize() + icon_state += "[rand(1,2)]" // To have two variants of lightning sprites. + animate(src, alpha = 0, time = time_to_die - 1) + . = ..() + +/obj/effect/dummy/lighting_obj + name = "lighting fx obj" + desc = "Tell a coder if you're seeing this." + icon_state = "nothing" + light_system = MOVABLE_LIGHT + light_range = MINIMUM_USEFUL_LIGHT_RANGE + light_color = COLOR_WHITE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + light_on = TRUE + blocks_emissive = FALSE + +/obj/effect/dummy/lighting_obj/Initialize(mapload, _range, _power, _color, _duration) + . = ..() + if(!isnull(_range)) + set_light_range(_range) + if(!isnull(_power)) + set_light_power(_power) + if(!isnull(_color)) + set_light_color(_color) + if(_duration) + QDEL_IN(src, _duration) + +/obj/effect/dummy/lighting_obj/moblight + name = "mob lighting fx" + +/obj/effect/dummy/lighting_obj/moblight/Initialize(mapload, _color, _range, _power, _duration) + . = ..() + if(!ismob(loc)) + return INITIALIZE_HINT_QDEL + +/obj/effect/dummy/lighting_obj/moblight/fire + name = "fire" + light_color = LIGHT_COLOR_FIRE + light_range = LIGHT_RANGE_FIRE + +/obj/effect/abstract + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + plane = ABOVE_MOB_PLANE + +/obj/effect/abstract/light_spot + icon = 'icons/effects/eris_flashlight.dmi' + icon_state = "medium" + pixel_x = -16 + pixel_y = -16 + +/obj/effect/abstract/directional_lighting + var/obj/effect/abstract/light_spot/light_spot = new + var/trans_angle + var/icon_dist + +/obj/effect/abstract/directional_lighting/Initialize() + . = ..() + vis_contents += light_spot + +/obj/effect/abstract/directional_lighting/proc/face_light(atom/movable/source, angle, distance) + if(!loc) // We're in nullspace + return + + // Save ourselves some matrix math + if(angle != trans_angle) + trans_angle = angle + // Doing this in one operation (tn = turn(initial(tn), angle)) has strange results... + light_spot.transform = initial(light_spot.transform) + light_spot.transform = turn(light_spot.transform, angle) + + if(icon_dist != distance) + icon_dist = distance + switch(distance) + if(0) + light_spot.icon_state = "vclose" + if(1) + light_spot.icon_state = "close" + if(2) + light_spot.icon_state = "medium" + if(3 to INFINITY) + light_spot.icon_state = "far" + +/obj/effect/abstract/directional_lighting/Destroy(force) + if(!force) + stack_trace("Directional light atom deleted, but not by our component") + return QDEL_HINT_LETMELIVE + + vis_contents.Cut() + qdel_null(light_spot) + + return ..() diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 9669004bca..475b3f5be7 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -1,191 +1,191 @@ -/obj/effect/overlay - name = "overlay" - unacidable = TRUE - var/i_attached//Added for possible image attachments to objects. For hallucinations and the like. - -/obj/effect/overlay/beam//Not actually a projectile, just an effect. - name="beam" - icon='icons/effects/beam.dmi' - icon_state="b_beam" - plane = ABOVE_OBJ_PLANE - var/tmp/atom/BeamSource - -/obj/effect/overlay/beam/New() - ..() - spawn(10) qdel(src) - -/obj/effect/overlay/palmtree_r - name = "Palm tree" - icon = 'icons/misc/beach2.dmi' - icon_state = "palm1" - density = TRUE - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - anchored = TRUE - -/obj/effect/overlay/palmtree_l - name = "Palm tree" - icon = 'icons/misc/beach2.dmi' - icon_state = "palm2" - density = TRUE - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - anchored = TRUE - -/obj/effect/overlay/coconut - name = "Coconuts" - icon = 'icons/misc/beach.dmi' - icon_state = "coconuts" - -/obj/effect/overlay/bluespacify - name = "Bluespace" - icon = 'icons/turf/space_vr.dmi' //VOREStation Edit - icon_state = "bluespacify" - plane = ABOVE_PLANE - -/obj/effect/overlay/wallrot - name = "wallrot" - desc = "Ick..." - icon = 'icons/effects/wallrot.dmi' - anchored = TRUE - density = TRUE - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - mouse_opacity = 0 - -/obj/effect/overlay/wallrot/New() - ..() - pixel_x += rand(-10, 10) - pixel_y += rand(-10, 10) - -/obj/effect/overlay/snow - name = "snow" - icon = 'icons/turf/overlays.dmi' - icon_state = "snow" - anchored = TRUE - plane = TURF_PLANE - -// Todo: Add a version that gradually reaccumulates over time by means of alpha transparency. -Spades -/obj/effect/overlay/snow/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/shovel)) - user.visible_message("[user] begins to shovel away \the [src].") - if(do_after(user, 40)) - to_chat(user, "You have finished shoveling!") - qdel(src) - return - -/obj/effect/overlay/snow/floor - icon_state = "snowfloor" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - mouse_opacity = 0 //Don't block underlying tile interactions - -/obj/effect/overlay/snow/floor/edges - icon_state = "snow_edges" - -/obj/effect/overlay/snow/floor/surround - icon_state = "snow_surround" - -/obj/effect/overlay/snow/airlock - icon_state = "snowairlock" - layer = DOOR_CLOSED_LAYER+0.01 - -/obj/effect/overlay/snow/floor/pointy - icon_state = "snowfloorpointy" - -/obj/effect/overlay/snow/wall - icon_state = "snowwall" - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - -/obj/effect/overlay/holographic - mouse_opacity = FALSE - anchored = TRUE - plane = ABOVE_PLANE - -// Similar to the tesla ball but doesn't actually do anything and is purely visual. -/obj/effect/overlay/energy_ball - name = "energy ball" - desc = "An energy ball." - icon = 'icons/obj/tesla_engine/energy_ball.dmi' - icon_state = "energy_ball" - plane = PLANE_LIGHTING_ABOVE - pixel_x = -32 - pixel_y = -32 - -/obj/effect/overlay/vis - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - anchored = TRUE - vis_flags = VIS_INHERIT_DIR - ///When detected to be unused it gets set to world.time, after a while it gets removed - var/unused = 0 - ///overlays which go unused for this amount of time get cleaned up - var/cache_expiration = 2 MINUTES - -/* -/obj/effect/overlay/atmos_excited - name = "excited group" - icon = null - icon_state = null - anchored = TRUE // should only appear in vis_contents, but to be safe - appearance_flags = RESET_TRANSFORM | TILE_BOUND - invisibility = INVISIBILITY_ABSTRACT - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - - plane = ATMOS_GROUP_PLANE -*/ - -/obj/effect/overlay/light_visible - name = "" - icon = 'icons/effects/light_overlays/light_32.dmi' - icon_state = "light" - plane = PLANE_O_LIGHTING_VISUAL - appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - alpha = 0 - vis_flags = NONE - blocks_emissive = FALSE - -/obj/effect/overlay/light_visible/Destroy(force) - if(!force) - stack_trace("Movable light visible mask deleted, but not by our component") - return QDEL_HINT_LETMELIVE - return ..() - -/obj/effect/overlay/light_cone - name = "" - icon = 'icons/effects/light_overlays/light_cone.dmi' - icon_state = "light" - plane = PLANE_O_LIGHTING_VISUAL - appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - vis_flags = NONE - alpha = 110 - blocks_emissive = FALSE - - var/static/matrix/normal_transform - -/obj/effect/overlay/light_cone/Initialize() - . = ..() - apply_standard_transform() - -/obj/effect/overlay/light_cone/proc/reset_transform(apply_standard) - transform = initial(transform) - if(apply_standard) - apply_standard_transform() - -/obj/effect/overlay/light_cone/proc/apply_standard_transform() - transform = transform.Translate(-32, -32) - -/obj/effect/overlay/light_cone/Destroy(force) - if(!force) - stack_trace("Directional light cone deleted, but not by our component") - return QDEL_HINT_LETMELIVE - return ..() - -/obj/effect/overlay/closet_door - anchored = TRUE - plane = FLOAT_PLANE - layer = FLOAT_LAYER - vis_flags = VIS_INHERIT_ID - appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE +/obj/effect/overlay + name = "overlay" + unacidable = TRUE + var/i_attached//Added for possible image attachments to objects. For hallucinations and the like. + +/obj/effect/overlay/beam//Not actually a projectile, just an effect. + name="beam" + icon='icons/effects/beam.dmi' + icon_state="b_beam" + plane = ABOVE_OBJ_PLANE + var/tmp/atom/BeamSource + +/obj/effect/overlay/beam/New() + ..() + spawn(10) qdel(src) + +/obj/effect/overlay/palmtree_r + name = "Palm tree" + icon = 'icons/misc/beach2.dmi' + icon_state = "palm1" + density = TRUE + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + anchored = TRUE + +/obj/effect/overlay/palmtree_l + name = "Palm tree" + icon = 'icons/misc/beach2.dmi' + icon_state = "palm2" + density = TRUE + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + anchored = TRUE + +/obj/effect/overlay/coconut + name = "Coconuts" + icon = 'icons/misc/beach.dmi' + icon_state = "coconuts" + +/obj/effect/overlay/bluespacify + name = "Bluespace" + icon = 'icons/turf/space_vr.dmi' //VOREStation Edit + icon_state = "bluespacify" + plane = ABOVE_PLANE + +/obj/effect/overlay/wallrot + name = "wallrot" + desc = "Ick..." + icon = 'icons/effects/wallrot.dmi' + anchored = TRUE + density = TRUE + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + mouse_opacity = 0 + +/obj/effect/overlay/wallrot/New() + ..() + pixel_x += rand(-10, 10) + pixel_y += rand(-10, 10) + +/obj/effect/overlay/snow + name = "snow" + icon = 'icons/turf/overlays.dmi' + icon_state = "snow" + anchored = TRUE + plane = TURF_PLANE + +// Todo: Add a version that gradually reaccumulates over time by means of alpha transparency. -Spades +/obj/effect/overlay/snow/attackby(obj/item/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/shovel)) + user.visible_message("[user] begins to shovel away \the [src].") + if(do_after(user, 40)) + to_chat(user, "You have finished shoveling!") + qdel(src) + return + +/obj/effect/overlay/snow/floor + icon_state = "snowfloor" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + mouse_opacity = 0 //Don't block underlying tile interactions + +/obj/effect/overlay/snow/floor/edges + icon_state = "snow_edges" + +/obj/effect/overlay/snow/floor/surround + icon_state = "snow_surround" + +/obj/effect/overlay/snow/airlock + icon_state = "snowairlock" + layer = DOOR_CLOSED_LAYER+0.01 + +/obj/effect/overlay/snow/floor/pointy + icon_state = "snowfloorpointy" + +/obj/effect/overlay/snow/wall + icon_state = "snowwall" + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + +/obj/effect/overlay/holographic + mouse_opacity = FALSE + anchored = TRUE + plane = ABOVE_PLANE + +// Similar to the tesla ball but doesn't actually do anything and is purely visual. +/obj/effect/overlay/energy_ball + name = "energy ball" + desc = "An energy ball." + icon = 'icons/obj/tesla_engine/energy_ball.dmi' + icon_state = "energy_ball" + plane = PLANE_LIGHTING_ABOVE + pixel_x = -32 + pixel_y = -32 + +/obj/effect/overlay/vis + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + vis_flags = VIS_INHERIT_DIR + ///When detected to be unused it gets set to world.time, after a while it gets removed + var/unused = 0 + ///overlays which go unused for this amount of time get cleaned up + var/cache_expiration = 2 MINUTES + +/* +/obj/effect/overlay/atmos_excited + name = "excited group" + icon = null + icon_state = null + anchored = TRUE // should only appear in vis_contents, but to be safe + appearance_flags = RESET_TRANSFORM | TILE_BOUND + invisibility = INVISIBILITY_ABSTRACT + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + + plane = ATMOS_GROUP_PLANE +*/ + +/obj/effect/overlay/light_visible + name = "" + icon = 'icons/effects/light_overlays/light_32.dmi' + icon_state = "light" + plane = PLANE_O_LIGHTING_VISUAL + appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + alpha = 0 + vis_flags = NONE + blocks_emissive = FALSE + +/obj/effect/overlay/light_visible/Destroy(force) + if(!force) + stack_trace("Movable light visible mask deleted, but not by our component") + return QDEL_HINT_LETMELIVE + return ..() + +/obj/effect/overlay/light_cone + name = "" + icon = 'icons/effects/light_overlays/light_cone.dmi' + icon_state = "light" + plane = PLANE_O_LIGHTING_VISUAL + appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + vis_flags = NONE + alpha = 110 + blocks_emissive = FALSE + + var/static/matrix/normal_transform + +/obj/effect/overlay/light_cone/Initialize() + . = ..() + apply_standard_transform() + +/obj/effect/overlay/light_cone/proc/reset_transform(apply_standard) + transform = initial(transform) + if(apply_standard) + apply_standard_transform() + +/obj/effect/overlay/light_cone/proc/apply_standard_transform() + transform = transform.Translate(-32, -32) + +/obj/effect/overlay/light_cone/Destroy(force) + if(!force) + stack_trace("Directional light cone deleted, but not by our component") + return QDEL_HINT_LETMELIVE + return ..() + +/obj/effect/overlay/closet_door + anchored = TRUE + plane = FLOAT_PLANE + layer = FLOAT_LAYER + vis_flags = VIS_INHERIT_ID + appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index ae27e75695..002d5d5cc8 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -1,69 +1,69 @@ -GLOBAL_LIST_BOILERPLATE(all_portals, /obj/effect/portal) - -/obj/effect/portal - name = "portal" - desc = "Looks unstable. Best to test it with the clown." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "portal" - density = TRUE - unacidable = TRUE//Can't destroy energy portals. - var/failchance = 5 - var/obj/item/target = null - var/creator = null - anchored = TRUE - -/obj/effect/portal/Bumped(mob/M as mob|obj) - if(istype(M,/mob) && !(istype(M,/mob/living))) - return //do not send ghosts, zshadows, ai eyes, etc - spawn(0) - src.teleport(M) - return - return - -/obj/effect/portal/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - if(istype(AM,/mob) && !(istype(AM,/mob/living))) - return //do not send ghosts, zshadows, ai eyes, etc - spawn(0) - src.teleport(AM) - return - return - -/obj/effect/portal/attack_hand(mob/user as mob) - if(istype(user) && !(istype(user,/mob/living))) - return //do not send ghosts, zshadows, ai eyes, etc - spawn(0) - src.teleport(user) - return - return - -/obj/effect/portal/Initialize() - . = ..() - QDEL_IN(src, 30 SECONDS) - -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) - if(istype(M, /obj/effect)) //sparks don't teleport - return - if (M.anchored&&istype(M, /obj/mecha)) - return - if (icon_state == "portal1") - return - if (!( target )) - qdel(src) - return - if (istype(M, /atom/movable)) - //VOREStation Addition Start: Prevent taurriding abuse - if(istype(M, /mob/living)) - var/mob/living/L = M - if(LAZYLEN(L.buckled_mobs)) - var/datum/riding/R = L.riding_datum - for(var/rider in L.buckled_mobs) - R.force_dismount(rider) - //VOREStation Addition End: Prevent taurriding abuse - if(prob(failchance)) //oh dear a problem, put em in deep space - src.icon_state = "portal1" - do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0) - else - do_teleport(M, target, 1) ///You will appear adjacent to the beacon - +GLOBAL_LIST_BOILERPLATE(all_portals, /obj/effect/portal) + +/obj/effect/portal + name = "portal" + desc = "Looks unstable. Best to test it with the clown." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "portal" + density = TRUE + unacidable = TRUE//Can't destroy energy portals. + var/failchance = 5 + var/obj/item/target = null + var/creator = null + anchored = TRUE + +/obj/effect/portal/Bumped(mob/M as mob|obj) + if(istype(M,/mob) && !(istype(M,/mob/living))) + return //do not send ghosts, zshadows, ai eyes, etc + spawn(0) + src.teleport(M) + return + return + +/obj/effect/portal/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(istype(AM,/mob) && !(istype(AM,/mob/living))) + return //do not send ghosts, zshadows, ai eyes, etc + spawn(0) + src.teleport(AM) + return + return + +/obj/effect/portal/attack_hand(mob/user as mob) + if(istype(user) && !(istype(user,/mob/living))) + return //do not send ghosts, zshadows, ai eyes, etc + spawn(0) + src.teleport(user) + return + return + +/obj/effect/portal/Initialize() + . = ..() + QDEL_IN(src, 30 SECONDS) + +/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) + if(istype(M, /obj/effect)) //sparks don't teleport + return + if (M.anchored&&istype(M, /obj/mecha)) + return + if (icon_state == "portal1") + return + if (!( target )) + qdel(src) + return + if (istype(M, /atom/movable)) + //VOREStation Addition Start: Prevent taurriding abuse + if(istype(M, /mob/living)) + var/mob/living/L = M + if(LAZYLEN(L.buckled_mobs)) + var/datum/riding/R = L.riding_datum + for(var/rider in L.buckled_mobs) + R.force_dismount(rider) + //VOREStation Addition End: Prevent taurriding abuse + if(prob(failchance)) //oh dear a problem, put em in deep space + src.icon_state = "portal1" + do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0) + else + do_teleport(M, target, 1) ///You will appear adjacent to the beacon + diff --git a/code/game/objects/effects/semirandom_mobs_vr.dm b/code/game/objects/effects/semirandom_mobs_vr.dm index 48b12c3094..d2e5e4e967 100644 --- a/code/game/objects/effects/semirandom_mobs_vr.dm +++ b/code/game/objects/effects/semirandom_mobs_vr.dm @@ -1,1095 +1,1095 @@ -var/global/list/semirandom_mob_spawner_decisions = list() - -/obj/random/mob/semirandom_mob_spawner - name = "Semi-Random Spawner" - desc = "Spawns groups of mobs that are all of the same theme type/theme." - icon = 'icons/mob/randomlandmarks.dmi' - icon_state = "monster" - mob_returns_home = 1 - mob_wander_distance = 7 - - var/list/possible_mob_types = list( - list(/mob/living/simple_mob/animal/goat), - list( - /mob/living/simple_mob/animal/passive/bird, - /mob/living/simple_mob/animal/passive/bird/azure_tit, - /mob/living/simple_mob/animal/passive/bird/black_bird, - /mob/living/simple_mob/animal/passive/bird/european_robin, - /mob/living/simple_mob/animal/passive/bird/goldcrest, - /mob/living/simple_mob/animal/passive/bird/ringneck_dove, - /mob/living/simple_mob/animal/passive/bird/parrot, - /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, - /mob/living/simple_mob/animal/passive/bird/parrot/eclectus, - /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, - /mob/living/simple_mob/animal/passive/bird/parrot/kea, - /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, - /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, - /mob/living/simple_mob/animal/passive/bird/parrot/white_caique, - /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo - ), - list( - /mob/living/simple_mob/animal/passive/cat, - /mob/living/simple_mob/animal/passive/cat/black - ), - list(/mob/living/simple_mob/animal/passive/chick), - list(/mob/living/simple_mob/animal/passive/cow), - list(/mob/living/simple_mob/animal/passive/dog/brittany), - list(/mob/living/simple_mob/animal/passive/dog/corgi), - list(/mob/living/simple_mob/animal/passive/dog/tamaskan), - list(/mob/living/simple_mob/animal/passive/fox), - list(/mob/living/simple_mob/animal/passive/hare), - list(/mob/living/simple_mob/animal/passive/lizard), - list(/mob/living/simple_mob/animal/passive/mouse), - list(/mob/living/simple_mob/animal/passive/mouse/jerboa), - list(/mob/living/simple_mob/animal/passive/opossum), - list(/mob/living/simple_mob/animal/passive/pillbug), - list(/mob/living/simple_mob/animal/passive/snake), - list(/mob/living/simple_mob/animal/passive/snake/red), - list(/mob/living/simple_mob/animal/passive/snake/python), - list(/mob/living/simple_mob/animal/passive/tindalos), - list(/mob/living/simple_mob/animal/passive/yithian), - list( - /mob/living/simple_mob/vore/wolf = 10, - /mob/living/simple_mob/vore/wolf/direwolf = 5, - /mob/living/simple_mob/vore/greatwolf = 1, - /mob/living/simple_mob/vore/greatwolf/black = 1, - /mob/living/simple_mob/vore/greatwolf/grey = 1 - ), - list(/mob/living/simple_mob/vore/rabbit), - list(/mob/living/simple_mob/vore/redpanda), - list(/mob/living/simple_mob/vore/woof), - list(/mob/living/simple_mob/vore/fennec), - list(/mob/living/simple_mob/vore/fennix), - list(/mob/living/simple_mob/vore/hippo), - list(/mob/living/simple_mob/vore/horse), - list(/mob/living/simple_mob/vore/bee), - list( - /mob/living/simple_mob/animal/space/bear, - /mob/living/simple_mob/animal/space/bear/brown - ), - list( - /mob/living/simple_mob/vore/otie/feral, - /mob/living/simple_mob/vore/otie/feral/chubby, - /mob/living/simple_mob/vore/otie/red, - /mob/living/simple_mob/vore/otie/red/chubby - ), - list(/mob/living/simple_mob/animal/sif/diyaab), - list(/mob/living/simple_mob/animal/sif/duck), - list(/mob/living/simple_mob/animal/sif/frostfly), - list( - /mob/living/simple_mob/animal/sif/glitterfly =50, - /mob/living/simple_mob/animal/sif/glitterfly/rare = 1 - ), - list( - /mob/living/simple_mob/animal/sif/kururak = 10, - /mob/living/simple_mob/animal/sif/kururak/leader = 1, - /mob/living/simple_mob/animal/sif/kururak/hibernate = 2, - ), - list( - /mob/living/simple_mob/animal/sif/sakimm = 10, - /mob/living/simple_mob/animal/sif/sakimm/intelligent = 1 - ), - list(/mob/living/simple_mob/animal/sif/savik) = 5, - list( - /mob/living/simple_mob/animal/sif/shantak = 10, - /mob/living/simple_mob/animal/sif/shantak/leader = 1 - ), - list(/mob/living/simple_mob/animal/sif/siffet), - list(/mob/living/simple_mob/animal/sif/tymisian), - list( - /mob/living/simple_mob/animal/giant_spider/electric = 5, - /mob/living/simple_mob/animal/giant_spider/frost = 5, - /mob/living/simple_mob/animal/giant_spider/hunter = 10, - /mob/living/simple_mob/animal/giant_spider/ion = 5, - /mob/living/simple_mob/animal/giant_spider/lurker = 10, - /mob/living/simple_mob/animal/giant_spider/pepper = 10, - /mob/living/simple_mob/animal/giant_spider/phorogenic = 10, - /mob/living/simple_mob/animal/giant_spider/thermic = 5, - /mob/living/simple_mob/animal/giant_spider/tunneler = 10, - /mob/living/simple_mob/animal/giant_spider/webslinger = 5, - /mob/living/simple_mob/animal/giant_spider/broodmother = 1), - list(/mob/living/simple_mob/creature/strong), - list(/mob/living/simple_mob/faithless/strong), - list(/mob/living/simple_mob/animal/goat), - list( - /mob/living/simple_mob/animal/sif/shantak/leader = 1, - /mob/living/simple_mob/animal/sif/shantak = 10), - list(/mob/living/simple_mob/animal/sif/savik,), - list(/mob/living/simple_mob/animal/sif/hooligan_crab), - list( - /mob/living/simple_mob/animal/space/alien = 50, - /mob/living/simple_mob/animal/space/alien/drone = 40, - /mob/living/simple_mob/animal/space/alien/sentinel = 25, - /mob/living/simple_mob/animal/space/alien/sentinel/praetorian = 15, - /mob/living/simple_mob/animal/space/alien/queen = 10, - /mob/living/simple_mob/animal/space/alien/queen/empress = 5, - /mob/living/simple_mob/animal/space/alien/queen/empress/mother = 1 - ), - list(/mob/living/simple_mob/animal/space/bats/cult/strong), - list( - /mob/living/simple_mob/animal/space/bear, - /mob/living/simple_mob/animal/space/bear/brown - ), - list( - /mob/living/simple_mob/animal/space/carp = 50, - /mob/living/simple_mob/animal/space/carp/large = 10, - /mob/living/simple_mob/animal/space/carp/large/huge = 5 - ), - list(/mob/living/simple_mob/animal/space/goose), - list(/mob/living/simple_mob/vore/jelly), - list(/mob/living/simple_mob/animal/space/tree), - list( - /mob/living/simple_mob/vore/aggressive/corrupthound = 10, - /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi = 1, - ), - list(/mob/living/simple_mob/vore/aggressive/deathclaw), - list(/mob/living/simple_mob/vore/aggressive/dino), - list(/mob/living/simple_mob/vore/aggressive/dragon), - list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b), - list(/mob/living/simple_mob/vore/aggressive/frog), - list(/mob/living/simple_mob/vore/aggressive/giant_snake), - list(/mob/living/simple_mob/vore/aggressive/mimic), - list(/mob/living/simple_mob/vore/aggressive/panther), - list(/mob/living/simple_mob/vore/aggressive/rat), - list(/mob/living/simple_mob/vore/bee), - list( - /mob/living/simple_mob/vore/sect_drone = 10, - /mob/living/simple_mob/vore/sect_queen = 1 - ), - list(/mob/living/simple_mob/vore/solargrub), - list( - /mob/living/simple_mob/vore/oregrub = 5, - /mob/living/simple_mob/vore/oregrub/lava = 1 - ), - list(/mob/living/simple_mob/vore/catgirl), - list(/mob/living/simple_mob/vore/wolfgirl), - list( - /mob/living/simple_mob/vore/lamia, - /mob/living/simple_mob/vore/lamia/albino, - /mob/living/simple_mob/vore/lamia/albino/bra, - /mob/living/simple_mob/vore/lamia/albino/shirt, - /mob/living/simple_mob/vore/lamia/bra, - /mob/living/simple_mob/vore/lamia/cobra, - /mob/living/simple_mob/vore/lamia/cobra/bra, - /mob/living/simple_mob/vore/lamia/cobra/shirt, - /mob/living/simple_mob/vore/lamia/copper, - /mob/living/simple_mob/vore/lamia/copper/bra, - /mob/living/simple_mob/vore/lamia/copper/shirt, - /mob/living/simple_mob/vore/lamia/green, - /mob/living/simple_mob/vore/lamia/green/bra, - /mob/living/simple_mob/vore/lamia/green/shirt, - /mob/living/simple_mob/vore/lamia/zebra, - /mob/living/simple_mob/vore/lamia/zebra/bra, - /mob/living/simple_mob/vore/lamia/zebra/shirt - ), - list( - /mob/living/simple_mob/humanoid/merc = 100, - /mob/living/simple_mob/humanoid/merc/melee/sword = 50, - /mob/living/simple_mob/humanoid/merc/ranged = 25, - /mob/living/simple_mob/humanoid/merc/ranged/grenadier = 1, - /mob/living/simple_mob/humanoid/merc/ranged/ionrifle = 10, - /mob/living/simple_mob/humanoid/merc/ranged/laser = 5, - /mob/living/simple_mob/humanoid/merc/ranged/rifle = 5, - /mob/living/simple_mob/humanoid/merc/ranged/smg = 5, - /mob/living/simple_mob/humanoid/merc/ranged/sniper = 1, - /mob/living/simple_mob/humanoid/merc/ranged/space = 10, - /mob/living/simple_mob/humanoid/merc/ranged/technician = 5 - ), - list( - /mob/living/simple_mob/humanoid/pirate = 3, - /mob/living/simple_mob/humanoid/pirate/ranged = 1 - ), - list(/mob/living/simple_mob/mechanical/combat_drone), - list(/mob/living/simple_mob/mechanical/corrupt_maint_drone), - list( - /mob/living/simple_mob/mechanical/hivebot = 100, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline = 10, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot = 5, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 10, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid = 2, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp = 5, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong = 3, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard = 3, - /mob/living/simple_mob/mechanical/hivebot/support = 8, - /mob/living/simple_mob/mechanical/hivebot/support/commander = 5, - /mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow = 10, - /mob/living/simple_mob/mechanical/hivebot/swarm = 20, - /mob/living/simple_mob/mechanical/hivebot/tank = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/meatshield = 20 - ), - list(/mob/living/simple_mob/mechanical/infectionbot), - list(/mob/living/simple_mob/mechanical/mining_drone), - list(/mob/living/simple_mob/mechanical/technomancer_golem), - list( - /mob/living/simple_mob/mechanical/viscerator, - /mob/living/simple_mob/mechanical/viscerator/piercing - ), - list(/mob/living/simple_mob/mechanical/wahlem), - list(/mob/living/simple_mob/animal/passive/fox/syndicate), - list(/mob/living/simple_mob/animal/passive/fox), - list(/mob/living/simple_mob/vore/jelly), - list( - /mob/living/simple_mob/vore/otie/feral, - /mob/living/simple_mob/vore/otie/feral/chubby, - /mob/living/simple_mob/vore/otie/red, - /mob/living/simple_mob/vore/otie/red/chubby - ), - list( - /mob/living/simple_mob/shadekin/blue = 100, - /mob/living/simple_mob/shadekin/green = 50, - /mob/living/simple_mob/shadekin/orange = 20, - /mob/living/simple_mob/shadekin/purple = 60, - /mob/living/simple_mob/shadekin/red = 40, - /mob/living/simple_mob/shadekin/yellow = 1 - ), - list( - /mob/living/simple_mob/vore/aggressive/corrupthound, - /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi - ), - list(/mob/living/simple_mob/vore/aggressive/deathclaw), - list(/mob/living/simple_mob/vore/aggressive/dino), - list(/mob/living/simple_mob/vore/aggressive/dragon), - list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b), - list(/mob/living/simple_mob/vore/aggressive/frog), - list(/mob/living/simple_mob/vore/aggressive/giant_snake), - list(/mob/living/simple_mob/vore/aggressive/mimic), - list(/mob/living/simple_mob/vore/aggressive/panther), - list(/mob/living/simple_mob/vore/aggressive/rat), - list(/mob/living/simple_mob/vore/bee), - list(/mob/living/simple_mob/vore/catgirl), - list(/mob/living/simple_mob/vore/cookiegirl), - list(/mob/living/simple_mob/vore/fennec), - list(/mob/living/simple_mob/vore/fennix), - list(/mob/living/simple_mob/vore/hippo), - list(/mob/living/simple_mob/vore/horse), - list(/mob/living/simple_mob/vore/oregrub), - list(/mob/living/simple_mob/vore/rabbit), - list( - /mob/living/simple_mob/vore/redpanda = 50, - /mob/living/simple_mob/vore/redpanda/fae = 1 - ), - list( - /mob/living/simple_mob/vore/sect_drone = 10, - /mob/living/simple_mob/vore/sect_queen = 1 - ), - list(/mob/living/simple_mob/vore/solargrub), - list(/mob/living/simple_mob/vore/woof), - list(/mob/living/simple_mob/vore/alienanimals/space_ghost), - list(/mob/living/simple_mob/vore/alienanimals/catslug), - list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish), - list(/mob/living/simple_mob/vore/alienanimals/startreader), - list( - /mob/living/simple_mob/vore/bigdragon, - /mob/living/simple_mob/vore/bigdragon/friendly), - list( - /mob/living/simple_mob/vore/leopardmander = 50, - /mob/living/simple_mob/vore/leopardmander/blue = 10, - /mob/living/simple_mob/vore/leopardmander/exotic = 1 - ), - list(/mob/living/simple_mob/vore/sheep), - list(/mob/living/simple_mob/vore/weretiger) - ) - -/obj/random/mob/semirandom_mob_spawner/item_to_spawn() - var/list/choice = semirandom_mob_spawner_decisions[type] - - if(!choice) - choice = pickweight(possible_mob_types) - semirandom_mob_spawner_decisions[type] = choice - - return pickweight(choice) - -/obj/random/mob/semirandom_mob_spawner/animal - name = "Semi-Random Animal" - desc = "Spawns groups of non-hostile mobs that are all of the same theme type/theme." - icon_state = "animal" - mob_faction = "animal" - overwrite_hostility = 1 - mob_hostile = 0 - - possible_mob_types = list( - list(/mob/living/simple_mob/animal/goat) = 25, - list( - /mob/living/simple_mob/animal/passive/bird, - /mob/living/simple_mob/animal/passive/bird/azure_tit, - /mob/living/simple_mob/animal/passive/bird/black_bird, - /mob/living/simple_mob/animal/passive/bird/european_robin, - /mob/living/simple_mob/animal/passive/bird/goldcrest, - /mob/living/simple_mob/animal/passive/bird/ringneck_dove, - /mob/living/simple_mob/animal/passive/bird/parrot, - /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, - /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, - /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, - /mob/living/simple_mob/animal/passive/bird/parrot/eclectus, - /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, - /mob/living/simple_mob/animal/passive/bird/parrot/kea, - /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, - /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, - /mob/living/simple_mob/animal/passive/bird/parrot/white_caique, - /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo, - /mob/living/simple_mob/animal/space/goose - ) = 25, - list( - /mob/living/simple_mob/animal/passive/cat, - /mob/living/simple_mob/animal/passive/cat/black - ) = 25, - list( - /mob/living/simple_mob/animal/passive/chick, - /mob/living/simple_mob/animal/passive/chicken - ) = 25, - list(/mob/living/simple_mob/animal/passive/cow) = 25, - list(/mob/living/simple_mob/animal/passive/dog/brittany) = 10, - list(/mob/living/simple_mob/animal/passive/dog/corgi) = 10, - list(/mob/living/simple_mob/animal/passive/dog/tamaskan) = 10, - list(/mob/living/simple_mob/animal/passive/fox) = 25, - list(/mob/living/simple_mob/animal/passive/hare) = 25, - list(/mob/living/simple_mob/animal/passive/lizard) = 10, - list(/mob/living/simple_mob/animal/passive/mouse) = 15, - list(/mob/living/simple_mob/animal/passive/mouse/jerboa) = 5, - list(/mob/living/simple_mob/animal/passive/opossum) = 10, - list(/mob/living/simple_mob/animal/passive/pillbug) = 10, - list(/mob/living/simple_mob/animal/passive/snake) = 10, - list(/mob/living/simple_mob/animal/passive/snake/red) = 10, - list(/mob/living/simple_mob/animal/passive/snake/python) = 10, - list(/mob/living/simple_mob/animal/passive/tindalos) = 10, - list(/mob/living/simple_mob/animal/passive/yithian) = 10, - list( - /mob/living/simple_mob/vore/wolf = 10, - /mob/living/simple_mob/vore/wolf/direwolf = 5, - /mob/living/simple_mob/vore/greatwolf = 1, - /mob/living/simple_mob/vore/greatwolf/black = 1, - /mob/living/simple_mob/vore/greatwolf/grey = 1 - ) = 10, - list(/mob/living/simple_mob/vore/rabbit) = 10, - list(/mob/living/simple_mob/vore/redpanda) = 10, - list(/mob/living/simple_mob/vore/woof) = 1, - list(/mob/living/simple_mob/vore/fennec) = 10, - list(/mob/living/simple_mob/vore/fennix) = 1, - list(/mob/living/simple_mob/vore/hippo) = 5, - list(/mob/living/simple_mob/vore/horse) = 25, - list(/mob/living/simple_mob/vore/bee) = 10, - list( - /mob/living/simple_mob/animal/space/bear, - /mob/living/simple_mob/animal/space/bear/brown - ) = 1, - list( - /mob/living/simple_mob/vore/otie/feral = 50, - /mob/living/simple_mob/vore/otie/feral/chubby = 10, - /mob/living/simple_mob/vore/otie/red = 5, - /mob/living/simple_mob/vore/otie/red/chubby = 1 - ) = 5, - list(/mob/living/simple_mob/vore/aggressive/rat) = 15, - list(/mob/living/simple_mob/animal/sif/diyaab) = 5, - list(/mob/living/simple_mob/animal/sif/duck) = 5, - list(/mob/living/simple_mob/animal/sif/frostfly) = 5, - list( - /mob/living/simple_mob/animal/sif/glitterfly = 50, - /mob/living/simple_mob/animal/sif/glitterfly/rare = 1 - ) = 5, - list( - /mob/living/simple_mob/animal/sif/kururak = 10, - /mob/living/simple_mob/animal/sif/kururak/leader = 1, - /mob/living/simple_mob/animal/sif/kururak/hibernate = 2, - ) = 5, - list( - /mob/living/simple_mob/animal/sif/sakimm = 10, - /mob/living/simple_mob/animal/sif/sakimm/intelligent = 1 - ) = 5, - list(/mob/living/simple_mob/animal/sif/savik) = 5, - list( - /mob/living/simple_mob/animal/sif/shantak = 10, - /mob/living/simple_mob/animal/sif/shantak/leader = 1 - ) = 5, - list(/mob/living/simple_mob/animal/sif/siffet) = 5, - list(/mob/living/simple_mob/animal/sif/tymisian) = 5, - list(/mob/living/simple_mob/vore/alienanimals/teppi) = 10, - list(/mob/living/simple_mob/vore/alienanimals/dustjumper) = 5, - list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish) = 5, - list(/mob/living/simple_mob/vore/alienanimals/space_ghost) = 5, - list( - /mob/living/simple_mob/vore/leopardmander = 50, - /mob/living/simple_mob/vore/leopardmander/blue = 10, - /mob/living/simple_mob/vore/leopardmander/exotic = 1 - ) = 5, - list(/mob/living/simple_mob/vore/sheep) = 5, - list(/mob/living/simple_mob/vore/weretiger) = 5, - list(/mob/living/simple_mob/vore/alienanimals/skeleton) = 5 - ) - -/obj/random/mob/semirandom_mob_spawner/monster - name = "Semi-Random Monster" - desc = "Spawns groups of hostile mobs that are all of the same theme type/theme." - overwrite_hostility = 1 - mob_faction = "monster" - mob_hostile = 1 - mob_retaliate = 1 - - possible_mob_types = list( - list( - /mob/living/simple_mob/animal/giant_spider/electric = 5, - /mob/living/simple_mob/animal/giant_spider/frost = 5, - /mob/living/simple_mob/animal/giant_spider/hunter = 10, - /mob/living/simple_mob/animal/giant_spider/ion = 5, - /mob/living/simple_mob/animal/giant_spider/lurker = 10, - /mob/living/simple_mob/animal/giant_spider/pepper = 10, - /mob/living/simple_mob/animal/giant_spider/phorogenic = 10, - /mob/living/simple_mob/animal/giant_spider/thermic = 5, - /mob/living/simple_mob/animal/giant_spider/tunneler = 10, - /mob/living/simple_mob/animal/giant_spider/webslinger = 5 - ) = 100, - list( - /mob/living/simple_mob/shadekin/red = 5, - /mob/living/simple_mob/shadekin/orange = 1, - /mob/living/simple_mob/shadekin/purple = 10 - ) = 1, - list( - /mob/living/simple_mob/vore/wolf = 10, - /mob/living/simple_mob/vore/wolf/direwolf = 5, - /mob/living/simple_mob/vore/greatwolf = 1, - /mob/living/simple_mob/vore/greatwolf/black = 1, - /mob/living/simple_mob/vore/greatwolf/grey = 1 - ) = 40, - list(/mob/living/simple_mob/creature/strong) = 40, - list(/mob/living/simple_mob/faithless/strong) = 20, - list(/mob/living/simple_mob/animal/goat) = 1, - list( - /mob/living/simple_mob/animal/sif/shantak/leader = 1, - /mob/living/simple_mob/animal/sif/shantak = 10 - ) = 50, - list(/mob/living/simple_mob/animal/sif/savik,) = 20, - list(/mob/living/simple_mob/animal/sif/hooligan_crab) = 10, - list( - /mob/living/simple_mob/animal/space/alien = 50, - /mob/living/simple_mob/animal/space/alien/drone = 40, - /mob/living/simple_mob/animal/space/alien/sentinel = 25, - /mob/living/simple_mob/animal/space/alien/sentinel/praetorian = 15, - /mob/living/simple_mob/animal/space/alien/queen = 10, - /mob/living/simple_mob/animal/space/alien/queen/empress = 5, - /mob/living/simple_mob/animal/space/alien/queen/empress/mother = 1, - ) = 40, - list(/mob/living/simple_mob/animal/space/bats/cult/strong) = 40, - list( - /mob/living/simple_mob/animal/space/bear, - /mob/living/simple_mob/animal/space/bear/brown - ) = 40, - list( - /mob/living/simple_mob/animal/space/carp = 50, - /mob/living/simple_mob/animal/space/carp/large = 10, - /mob/living/simple_mob/animal/space/carp/large/huge = 5 - ) = 50, - list(/mob/living/simple_mob/animal/space/goose) = 50, - list(/mob/living/simple_mob/vore/jelly) = 40, - list(/mob/living/simple_mob/animal/space/tree) = 15, - list( - /mob/living/simple_mob/vore/otie/feral = 50, - /mob/living/simple_mob/vore/otie/feral/chubby = 10, - /mob/living/simple_mob/vore/otie/red = 5, - /mob/living/simple_mob/vore/otie/red/chubby = 1 - ) = 40, - list( - /mob/living/simple_mob/vore/aggressive/corrupthound = 10, - /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi = 1, - ) = 50, - list(/mob/living/simple_mob/vore/aggressive/deathclaw) = 40, - list(/mob/living/simple_mob/vore/aggressive/dino) = 40, - list(/mob/living/simple_mob/vore/aggressive/dragon) = 40, - list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b) = 40, - list(/mob/living/simple_mob/vore/aggressive/frog) = 40, - list(/mob/living/simple_mob/vore/aggressive/giant_snake) = 40, - list(/mob/living/simple_mob/vore/aggressive/mimic) = 40, - list(/mob/living/simple_mob/vore/aggressive/panther) = 25, - list(/mob/living/simple_mob/vore/aggressive/rat) = 50, - list(/mob/living/simple_mob/vore/bee) = 40, - list( - /mob/living/simple_mob/vore/sect_drone = 10, - /mob/living/simple_mob/vore/sect_queen = 1 - ) = 20, - list(/mob/living/simple_mob/vore/solargrub) = 15, - list( - /mob/living/simple_mob/vore/oregrub = 5, - /mob/living/simple_mob/vore/oregrub/lava = 1 - ) = 15, - list(/mob/living/simple_mob/vore/alienanimals/teppi) = 15, //CHOMP explo keep - list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish) = 5, - list(/mob/living/simple_mob/vore/alienanimals/space_ghost) = 5, - list( - /mob/living/simple_mob/vore/leopardmander = 50, - /mob/living/simple_mob/vore/leopardmander/blue = 10, - /mob/living/simple_mob/vore/leopardmander/exotic = 1 - ) = 5, - list(/mob/living/simple_mob/vore/sheep) = 5, - list(/mob/living/simple_mob/vore/weretiger) = 5, - list(/mob/living/simple_mob/vore/alienanimals/skeleton) = 5, - list(/mob/living/simple_mob/vore/alienanimals/catslug) = 5 - ) - -/obj/random/mob/semirandom_mob_spawner/humanoid - name = "Semi-Random Humanoid" - desc = "Spawns groups of humanoid mobs that may or may not be hostile, all of the same theme type/theme." - icon_state = "humanoid" - mob_faction = "humanoid" - - possible_mob_types = list( - list( - /mob/living/simple_mob/shadekin/blue = 25, - /mob/living/simple_mob/shadekin/green = 10, - /mob/living/simple_mob/shadekin/purple = 1, - ) = 1, - list(/mob/living/simple_mob/vore/catgirl) = 100, - list(/mob/living/simple_mob/vore/wolfgirl) = 100, - list( - /mob/living/simple_mob/vore/lamia, - /mob/living/simple_mob/vore/lamia/albino, - /mob/living/simple_mob/vore/lamia/albino/bra, - /mob/living/simple_mob/vore/lamia/albino/shirt, - /mob/living/simple_mob/vore/lamia/bra, - /mob/living/simple_mob/vore/lamia/cobra, - /mob/living/simple_mob/vore/lamia/cobra/bra, - /mob/living/simple_mob/vore/lamia/cobra/shirt, - /mob/living/simple_mob/vore/lamia/copper, - /mob/living/simple_mob/vore/lamia/copper/bra, - /mob/living/simple_mob/vore/lamia/copper/shirt, - /mob/living/simple_mob/vore/lamia/green, - /mob/living/simple_mob/vore/lamia/green/bra, - /mob/living/simple_mob/vore/lamia/green/shirt, - /mob/living/simple_mob/vore/lamia/zebra, - /mob/living/simple_mob/vore/lamia/zebra/bra, - /mob/living/simple_mob/vore/lamia/zebra/shirt - ) = 100, -// LOOK OKAY MERCS ARE HUMANOIDS SO THEY ARE HERE, but they are also kind of bullshit so they probably shouldn't be able to spawn in the same place as catgirls. -// I want some better potentially hostile humanoids that aren't stupid to fight. If they become a big issue I'll comment them out. -// For now they are just rare, and the ranged ones are way more rare than the melee ones, which I think will help balance them out. - list( - /mob/living/simple_mob/humanoid/merc = 100, - /mob/living/simple_mob/humanoid/merc/melee/sword = 50, - /mob/living/simple_mob/humanoid/merc/ranged = 25, - /mob/living/simple_mob/humanoid/merc/ranged/grenadier = 1, - /mob/living/simple_mob/humanoid/merc/ranged/ionrifle = 10, - /mob/living/simple_mob/humanoid/merc/ranged/laser = 5, - /mob/living/simple_mob/humanoid/merc/ranged/rifle = 5, - /mob/living/simple_mob/humanoid/merc/ranged/smg = 5, - /mob/living/simple_mob/humanoid/merc/ranged/sniper = 1, - /mob/living/simple_mob/humanoid/merc/ranged/space = 10, - /mob/living/simple_mob/humanoid/merc/ranged/technician = 5 - ) = 5, -// PIRATES are okay though. They can be kind of a pain but you can kind of slap them around. Also it's not like. A crime. To fight and blow up pirates so it's fine. - list( - /mob/living/simple_mob/humanoid/pirate = 3, - /mob/living/simple_mob/humanoid/pirate/ranged = 1 - ) = 50 - ) - -// I am not familiar enough with robots to know which ones are fun to fight so this list isn't weighted at all SO YOU KNOW. Be careful. -/obj/random/mob/semirandom_mob_spawner/robot - name = "Semi-Random Robot" - desc = "Spawns groups of robotic mobs that are probably hostile, all of the same theme type/theme." - icon_state = "robot" - mob_faction = "robot" - - possible_mob_types = list( - list(/mob/living/simple_mob/mechanical/combat_drone), - list(/mob/living/simple_mob/mechanical/corrupt_maint_drone), - list( - /mob/living/simple_mob/mechanical/hivebot = 100, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline = 10, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot = 5, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 20, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 10, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid = 2, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp = 5, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation = 1, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong = 3, - /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard = 3, - /mob/living/simple_mob/mechanical/hivebot/support = 8, - /mob/living/simple_mob/mechanical/hivebot/support/commander = 5, - /mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow = 10, - /mob/living/simple_mob/mechanical/hivebot/swarm = 20, - /mob/living/simple_mob/mechanical/hivebot/tank = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee = 20, - /mob/living/simple_mob/mechanical/hivebot/tank/meatshield = 20 - ), - list(/mob/living/simple_mob/mechanical/infectionbot), - list(/mob/living/simple_mob/mechanical/mining_drone), - list(/mob/living/simple_mob/mechanical/technomancer_golem), - list( - /mob/living/simple_mob/mechanical/viscerator, - /mob/living/simple_mob/mechanical/viscerator/piercing - ), - list(/mob/living/simple_mob/mechanical/wahlem), - list(/mob/living/simple_mob/animal/passive/fox/syndicate) - ) - -/obj/random/mob/semirandom_mob_spawner/fish - name = "Semi-Random Fish" - desc = "Spawns groups of fish, all of the same theme type/theme." - icon_state = "fish" - mob_faction = "fish" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 0 - - - possible_mob_types = list( - list(/mob/living/simple_mob/animal/passive/fish/bass) = 20, - list(/mob/living/simple_mob/animal/passive/fish/icebass) = 20, - list(/mob/living/simple_mob/animal/passive/fish/javelin) = 20, - list(/mob/living/simple_mob/animal/passive/fish/koi) = 10, - list(/mob/living/simple_mob/animal/passive/fish/measelshark) = 5, - list(/mob/living/simple_mob/animal/passive/fish/murkin) = 20, - list(/mob/living/simple_mob/animal/passive/fish/perch) = 20, - list(/mob/living/simple_mob/animal/passive/fish/pike) = 20, - list(/mob/living/simple_mob/animal/passive/fish/rockfish) = 10, - list(/mob/living/simple_mob/animal/passive/fish/salmon) = 20, - list(/mob/living/simple_mob/animal/passive/fish/solarfish) = 5, - list(/mob/living/simple_mob/animal/passive/fish/trout) = 20, - list(/mob/living/simple_mob/animal/passive/crab) = 10, - list(/mob/living/simple_mob/animal/sif/hooligan_crab) = 1 - ) - -/obj/random/mob/semirandom_mob_spawner/bird - name = "Semi-Random Bird" - desc = "Spawns groups of bird, all of the same theme type/theme." - icon_state = "bird" - mob_faction = "bird" - - possible_mob_types = list( - list(/mob/living/simple_mob/animal/passive/bird), - list(/mob/living/simple_mob/animal/passive/bird/azure_tit), - list(/mob/living/simple_mob/animal/passive/bird/black_bird), - list(/mob/living/simple_mob/animal/passive/bird/european_robin), - list(/mob/living/simple_mob/animal/passive/bird/goldcrest), - list(/mob/living/simple_mob/animal/passive/bird/ringneck_dove), - list(/mob/living/simple_mob/animal/passive/bird/parrot), - list(/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique), - list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar), - list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue), - list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen), - list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel), - list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey), - list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white), - list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish), - list(/mob/living/simple_mob/animal/passive/bird/parrot/eclectus), - list(/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot), - list(/mob/living/simple_mob/animal/passive/bird/parrot/kea), - list(/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo), - list(/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo), - list(/mob/living/simple_mob/animal/passive/bird/parrot/white_caique), - list(/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo), - list(/mob/living/simple_mob/animal/space/goose), - list(/mob/living/simple_mob/animal/passive/chicken), - list(/mob/living/simple_mob/animal/passive/penguin) - ) - -/obj/random/mob/semirandom_mob_spawner/vore - name = "Semi-Random Voremob" - desc = "Spawns groups of voremobs, all of the same theme type/theme." - icon_state = "vore" - mob_faction = "vore" - - possible_mob_types = list( - list( - /mob/living/simple_mob/vore/wolf/direwolf = 5, - /mob/living/simple_mob/vore/greatwolf = 1, - /mob/living/simple_mob/vore/greatwolf/black = 1, - /mob/living/simple_mob/vore/greatwolf/grey = 1 - ) = 100, - list(/mob/living/simple_mob/vore/jelly) = 70, - list( - /mob/living/simple_mob/vore/otie/feral, - /mob/living/simple_mob/vore/otie/feral/chubby, - /mob/living/simple_mob/vore/otie/red, - /mob/living/simple_mob/vore/otie/red/chubby - ) = 50, - list( - /mob/living/simple_mob/shadekin/blue = 100, - /mob/living/simple_mob/shadekin/green = 50, - /mob/living/simple_mob/shadekin/orange = 20, - /mob/living/simple_mob/shadekin/purple = 60, - /mob/living/simple_mob/shadekin/red = 40, - /mob/living/simple_mob/shadekin/yellow = 1 - ) = 1, - list( - /mob/living/simple_mob/vore/aggressive/corrupthound, - /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi - ) = 70, - list(/mob/living/simple_mob/vore/aggressive/deathclaw) = 70, - list(/mob/living/simple_mob/vore/aggressive/dino) = 100, - list(/mob/living/simple_mob/vore/aggressive/dragon) = 100, - list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b) = 100, - list(/mob/living/simple_mob/vore/aggressive/frog) = 100, - list(/mob/living/simple_mob/vore/aggressive/giant_snake) = 100, - list(/mob/living/simple_mob/vore/aggressive/mimic) = 50, - list(/mob/living/simple_mob/vore/aggressive/panther) = 70, - list(/mob/living/simple_mob/vore/aggressive/rat) = 100, - list(/mob/living/simple_mob/vore/bee) = 100, - list(/mob/living/simple_mob/vore/catgirl) = 100, - list(/mob/living/simple_mob/vore/wolftaur) = 100, - list(/mob/living/simple_mob/vore/cookiegirl) = 100, - list(/mob/living/simple_mob/vore/fennec) = 100, - list(/mob/living/simple_mob/vore/fennix) = 50, - list(/mob/living/simple_mob/vore/hippo) = 70, - list(/mob/living/simple_mob/vore/horse) = 100, - list(/mob/living/simple_mob/vore/raptor) = 100, - list(/mob/living/simple_mob/vore/succubus) = 100, - list(/mob/living/simple_mob/vore/vampire) = 50, - list(/mob/living/simple_mob/vore/vampire/queen) = 1, - list(/mob/living/simple_mob/vore/bat) = 50, - list(/mob/living/simple_mob/vore/scel) = 10, - list( - /mob/living/simple_mob/vore/lamia, - /mob/living/simple_mob/vore/lamia/albino, - /mob/living/simple_mob/vore/lamia/albino/bra, - /mob/living/simple_mob/vore/lamia/albino/shirt, - /mob/living/simple_mob/vore/lamia/bra, - /mob/living/simple_mob/vore/lamia/cobra, - /mob/living/simple_mob/vore/lamia/cobra/bra, - /mob/living/simple_mob/vore/lamia/cobra/shirt, - /mob/living/simple_mob/vore/lamia/copper, - /mob/living/simple_mob/vore/lamia/copper/bra, - /mob/living/simple_mob/vore/lamia/copper/shirt, - /mob/living/simple_mob/vore/lamia/green, - /mob/living/simple_mob/vore/lamia/green/bra, - /mob/living/simple_mob/vore/lamia/green/shirt, - /mob/living/simple_mob/vore/lamia/zebra, - /mob/living/simple_mob/vore/lamia/zebra/bra, - /mob/living/simple_mob/vore/lamia/zebra/shirt - ) = 100, - list(/mob/living/simple_mob/vore/rabbit) = 100, - list( - /mob/living/simple_mob/vore/redpanda = 50, - /mob/living/simple_mob/vore/redpanda/fae = 1 - ) = 100, - list( - /mob/living/simple_mob/vore/sect_drone = 10, - /mob/living/simple_mob/vore/sect_queen = 1 - ) = 50, - list(/mob/living/simple_mob/vore/solargrub) = 100, - list(/mob/living/simple_mob/vore/woof) = 1, - list(/mob/living/simple_mob/vore/alienanimals/teppi) = 25 - ) - -/obj/random/mob/semirandom_mob_spawner/sus - name = "Weird shit" - desc = "Spawns groups of weird stuff, all of the same theme type/theme. Don't put this on normal maps." - icon_state = "sus" - mob_faction = "sus" - - possible_mob_types = list( - list( - /mob/living/simple_mob/vore/woof/hostile/melee = 100, - /mob/living/simple_mob/vore/woof/hostile/ranged = 20, - /mob/living/simple_mob/vore/woof/hostile/horrible = 10, - /mob/living/simple_mob/vore/woof/hostile/terrible = 5, - /mob/living/simple_mob/vore/woof/cass = 1 - ), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive) - ) - -/obj/random/mob/semirandom_mob_spawner/mecha - name = "Semi-Random Mecha" - desc = "Spawns groups of mechs, all of the same theme type/theme. Don't put this on normal maps." - icon_state = "mecha" - mob_faction = "mecha" - - possible_mob_types = list( - list(/mob/living/simple_mob/mechanical/mecha/combat/durand), - list(/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive), - list(/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned), - list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax), - list(/mob/living/simple_mob/mechanical/mecha/combat/marauder), - list(/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler), - list(/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph), - list(/mob/living/simple_mob/mechanical/mecha/combat/phazon), - list(/mob/living/simple_mob/mechanical/mecha/hoverpod), - list(/mob/living/simple_mob/mechanical/mecha/hoverpod/manned), - list(/mob/living/simple_mob/mechanical/mecha/odysseus), - list(/mob/living/simple_mob/mechanical/mecha/odysseus/manned), - list(/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus), - list(/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned), - list(/mob/living/simple_mob/mechanical/mecha/ripley), - list(/mob/living/simple_mob/mechanical/mecha/ripley/blue_flames), - list(/mob/living/simple_mob/mechanical/mecha/ripley/deathripley), - list(/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned), - list(/mob/living/simple_mob/mechanical/mecha/ripley/firefighter), - list(/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned), - list(/mob/living/simple_mob/mechanical/mecha/ripley/manned), - list(/mob/living/simple_mob/mechanical/mecha/ripley/red_flames) - ) - - -/obj/random/mob/semirandom_mob_spawner/monster/b - mob_faction = "monsterb" - -/obj/random/mob/semirandom_mob_spawner/monster/c - mob_faction = "monsterc" - -/obj/random/mob/semirandom_mob_spawner/monster/d - mob_faction = "monsterd" - -/obj/random/mob/semirandom_mob_spawner/monster/e - mob_faction = "monstere" - -/obj/random/mob/semirandom_mob_spawner/monster/f - mob_faction = "monsterf" - -/obj/random/mob/semirandom_mob_spawner/animal/b - mob_faction = "animalb" - -/obj/random/mob/semirandom_mob_spawner/animal/c - mob_faction = "animalc" - -/obj/random/mob/semirandom_mob_spawner/animal/d - mob_faction = "animald" - -/obj/random/mob/semirandom_mob_spawner/animal/e - mob_faction = "animale" - -/obj/random/mob/semirandom_mob_spawner/animal/f - mob_faction = "animalf" - -/obj/random/mob/semirandom_mob_spawner/animal/retaliate - mob_faction = "retanimala" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/animal/retaliate/b - mob_faction = "retanimalb" - -/obj/random/mob/semirandom_mob_spawner/animal/retaliate/c - mob_faction = "retanimalc" - -/obj/random/mob/semirandom_mob_spawner/animal/hostile - mob_faction = "hosanimala" - overwrite_hostility = 1 - mob_hostile = 1 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/animal/hostile/b - mob_faction = "hosanimalb" - -/obj/random/mob/semirandom_mob_spawner/animal/hostile/c - mob_faction = "hosanimalc" - - -/obj/random/mob/semirandom_mob_spawner/humanoid/b - mob_faction = "humanoidb" - -/obj/random/mob/semirandom_mob_spawner/humanoid/c - mob_faction = "humanoidc" - -/obj/random/mob/semirandom_mob_spawner/humanoid/d - mob_faction = "humanoidd" - -/obj/random/mob/semirandom_mob_spawner/humanoid/e - mob_faction = "humanoide" - -/obj/random/mob/semirandom_mob_spawner/humanoid/f - mob_faction = "humanoidf" - -/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate - mob_faction = "rethumanoida" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate/b - mob_faction = "rethumanoidb" - -/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate/c - mob_faction = "rethumanoidc" - -/obj/random/mob/semirandom_mob_spawner/humanoid/hostile - mob_faction = "hoshumanoida" - overwrite_hostility = 1 - mob_hostile = 1 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/humanoid/hostile/b - mob_faction = "hoshumanoidb" - -/obj/random/mob/semirandom_mob_spawner/humanoid/hostile/c - mob_faction = "hoshumanoidc" - -/obj/random/mob/semirandom_mob_spawner/robot/b - mob_faction = "robotb" - -/obj/random/mob/semirandom_mob_spawner/robot/c - mob_faction = "robotc" - -/obj/random/mob/semirandom_mob_spawner/robot/d - mob_faction = "robotd" - -/obj/random/mob/semirandom_mob_spawner/robot/e - mob_faction = "robote" - -/obj/random/mob/semirandom_mob_spawner/robot/f - mob_faction = "robotf" - -/obj/random/mob/semirandom_mob_spawner/robot/retaliate - mob_faction = "retrobota" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/robot/retaliate/b - mob_faction = "retrobotb" - -/obj/random/mob/semirandom_mob_spawner/robot/retaliate/c - mob_faction = "retrobotc" - -/obj/random/mob/semirandom_mob_spawner/bird/b - mob_faction = "birdb" - -/obj/random/mob/semirandom_mob_spawner/bird/c - mob_faction = "birdc" - -/obj/random/mob/semirandom_mob_spawner/bird/d - mob_faction = "birdd" - -/obj/random/mob/semirandom_mob_spawner/bird/e - mob_faction = "birde" - -/obj/random/mob/semirandom_mob_spawner/bird/f - mob_faction = "birdf" - -/obj/random/mob/semirandom_mob_spawner/fish/b - mob_faction = "fishb" - -/obj/random/mob/semirandom_mob_spawner/fish/c - mob_faction = "fishc" - -/obj/random/mob/semirandom_mob_spawner/fish/d - mob_faction = "fishd" - -/obj/random/mob/semirandom_mob_spawner/fish/e - mob_faction = "fishe" - -/obj/random/mob/semirandom_mob_spawner/fish/f - mob_faction = "fishf" - -/obj/random/mob/semirandom_mob_spawner/vore/b - mob_faction = "voreb" - -/obj/random/mob/semirandom_mob_spawner/vore/c - mob_faction = "vorec" - -/obj/random/mob/semirandom_mob_spawner/vore/d - mob_faction = "vored" - -/obj/random/mob/semirandom_mob_spawner/vore/e - mob_faction = "voree" - -/obj/random/mob/semirandom_mob_spawner/vore/f - mob_faction = "voref" - -/obj/random/mob/semirandom_mob_spawner/vore/passive - mob_faction = "pasvorea" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 0 - -/obj/random/mob/semirandom_mob_spawner/vore/passive/b - mob_faction = "pasvoreb" - -/obj/random/mob/semirandom_mob_spawner/vore/passive/c - mob_faction = "pasvorec" - -/obj/random/mob/semirandom_mob_spawner/vore/retaliate - mob_faction = "retvorea" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/vore/retaliate/b - mob_faction = "retvoreb" - -/obj/random/mob/semirandom_mob_spawner/vore/retaliate/c - mob_faction = "retvorec" - -/obj/random/mob/semirandom_mob_spawner/vore/hostile - mob_faction = "hosvorea" - overwrite_hostility = 1 - mob_hostile = 1 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/vore/hostile/b - mob_faction = "hosvoreb" - -/obj/random/mob/semirandom_mob_spawner/vore/hostile/c - mob_faction = "hosvorec" - -/obj/random/mob/semirandom_mob_spawner/sus/b - mob_faction = "susb" - -/obj/random/mob/semirandom_mob_spawner/sus/c - mob_faction = "susc" - -/obj/random/mob/semirandom_mob_spawner/sus/d - mob_faction = "susd" - -/obj/random/mob/semirandom_mob_spawner/sus/e - mob_faction = "suse" - -/obj/random/mob/semirandom_mob_spawner/sus/f - mob_faction = "susf" - -/obj/random/mob/semirandom_mob_spawner/mecha/b - mob_faction = "mechab" - -/obj/random/mob/semirandom_mob_spawner/mecha/c - mob_faction = "mechac" - -/obj/random/mob/semirandom_mob_spawner/mecha/d - mob_faction = "mechad" - -/obj/random/mob/semirandom_mob_spawner/mecha/e - mob_faction = "mechae" - -/obj/random/mob/semirandom_mob_spawner/mecha/f - mob_faction = "mechaf" - -/obj/random/mob/semirandom_mob_spawner/mecha/retaliate - mob_faction = "retmecha" - overwrite_hostility = 1 - mob_hostile = 0 - mob_retaliate = 1 - -/obj/random/mob/semirandom_mob_spawner/mecha/retaliate/b - mob_faction = "retmechb" - -/obj/random/mob/semirandom_mob_spawner/mecha/retaliate/c - mob_faction = "retmechc" +var/global/list/semirandom_mob_spawner_decisions = list() + +/obj/random/mob/semirandom_mob_spawner + name = "Semi-Random Spawner" + desc = "Spawns groups of mobs that are all of the same theme type/theme." + icon = 'icons/mob/randomlandmarks.dmi' + icon_state = "monster" + mob_returns_home = 1 + mob_wander_distance = 7 + + var/list/possible_mob_types = list( + list(/mob/living/simple_mob/animal/goat), + list( + /mob/living/simple_mob/animal/passive/bird, + /mob/living/simple_mob/animal/passive/bird/azure_tit, + /mob/living/simple_mob/animal/passive/bird/black_bird, + /mob/living/simple_mob/animal/passive/bird/european_robin, + /mob/living/simple_mob/animal/passive/bird/goldcrest, + /mob/living/simple_mob/animal/passive/bird/ringneck_dove, + /mob/living/simple_mob/animal/passive/bird/parrot, + /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, + /mob/living/simple_mob/animal/passive/bird/parrot/eclectus, + /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, + /mob/living/simple_mob/animal/passive/bird/parrot/kea, + /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, + /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, + /mob/living/simple_mob/animal/passive/bird/parrot/white_caique, + /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo + ), + list( + /mob/living/simple_mob/animal/passive/cat, + /mob/living/simple_mob/animal/passive/cat/black + ), + list(/mob/living/simple_mob/animal/passive/chick), + list(/mob/living/simple_mob/animal/passive/cow), + list(/mob/living/simple_mob/animal/passive/dog/brittany), + list(/mob/living/simple_mob/animal/passive/dog/corgi), + list(/mob/living/simple_mob/animal/passive/dog/tamaskan), + list(/mob/living/simple_mob/animal/passive/fox), + list(/mob/living/simple_mob/animal/passive/hare), + list(/mob/living/simple_mob/animal/passive/lizard), + list(/mob/living/simple_mob/animal/passive/mouse), + list(/mob/living/simple_mob/animal/passive/mouse/jerboa), + list(/mob/living/simple_mob/animal/passive/opossum), + list(/mob/living/simple_mob/animal/passive/pillbug), + list(/mob/living/simple_mob/animal/passive/snake), + list(/mob/living/simple_mob/animal/passive/snake/red), + list(/mob/living/simple_mob/animal/passive/snake/python), + list(/mob/living/simple_mob/animal/passive/tindalos), + list(/mob/living/simple_mob/animal/passive/yithian), + list( + /mob/living/simple_mob/vore/wolf = 10, + /mob/living/simple_mob/vore/wolf/direwolf = 5, + /mob/living/simple_mob/vore/greatwolf = 1, + /mob/living/simple_mob/vore/greatwolf/black = 1, + /mob/living/simple_mob/vore/greatwolf/grey = 1 + ), + list(/mob/living/simple_mob/vore/rabbit), + list(/mob/living/simple_mob/vore/redpanda), + list(/mob/living/simple_mob/vore/woof), + list(/mob/living/simple_mob/vore/fennec), + list(/mob/living/simple_mob/vore/fennix), + list(/mob/living/simple_mob/vore/hippo), + list(/mob/living/simple_mob/vore/horse), + list(/mob/living/simple_mob/vore/bee), + list( + /mob/living/simple_mob/animal/space/bear, + /mob/living/simple_mob/animal/space/bear/brown + ), + list( + /mob/living/simple_mob/vore/otie/feral, + /mob/living/simple_mob/vore/otie/feral/chubby, + /mob/living/simple_mob/vore/otie/red, + /mob/living/simple_mob/vore/otie/red/chubby + ), + list(/mob/living/simple_mob/animal/sif/diyaab), + list(/mob/living/simple_mob/animal/sif/duck), + list(/mob/living/simple_mob/animal/sif/frostfly), + list( + /mob/living/simple_mob/animal/sif/glitterfly =50, + /mob/living/simple_mob/animal/sif/glitterfly/rare = 1 + ), + list( + /mob/living/simple_mob/animal/sif/kururak = 10, + /mob/living/simple_mob/animal/sif/kururak/leader = 1, + /mob/living/simple_mob/animal/sif/kururak/hibernate = 2, + ), + list( + /mob/living/simple_mob/animal/sif/sakimm = 10, + /mob/living/simple_mob/animal/sif/sakimm/intelligent = 1 + ), + list(/mob/living/simple_mob/animal/sif/savik) = 5, + list( + /mob/living/simple_mob/animal/sif/shantak = 10, + /mob/living/simple_mob/animal/sif/shantak/leader = 1 + ), + list(/mob/living/simple_mob/animal/sif/siffet), + list(/mob/living/simple_mob/animal/sif/tymisian), + list( + /mob/living/simple_mob/animal/giant_spider/electric = 5, + /mob/living/simple_mob/animal/giant_spider/frost = 5, + /mob/living/simple_mob/animal/giant_spider/hunter = 10, + /mob/living/simple_mob/animal/giant_spider/ion = 5, + /mob/living/simple_mob/animal/giant_spider/lurker = 10, + /mob/living/simple_mob/animal/giant_spider/pepper = 10, + /mob/living/simple_mob/animal/giant_spider/phorogenic = 10, + /mob/living/simple_mob/animal/giant_spider/thermic = 5, + /mob/living/simple_mob/animal/giant_spider/tunneler = 10, + /mob/living/simple_mob/animal/giant_spider/webslinger = 5, + /mob/living/simple_mob/animal/giant_spider/broodmother = 1), + list(/mob/living/simple_mob/creature/strong), + list(/mob/living/simple_mob/faithless/strong), + list(/mob/living/simple_mob/animal/goat), + list( + /mob/living/simple_mob/animal/sif/shantak/leader = 1, + /mob/living/simple_mob/animal/sif/shantak = 10), + list(/mob/living/simple_mob/animal/sif/savik,), + list(/mob/living/simple_mob/animal/sif/hooligan_crab), + list( + /mob/living/simple_mob/animal/space/alien = 50, + /mob/living/simple_mob/animal/space/alien/drone = 40, + /mob/living/simple_mob/animal/space/alien/sentinel = 25, + /mob/living/simple_mob/animal/space/alien/sentinel/praetorian = 15, + /mob/living/simple_mob/animal/space/alien/queen = 10, + /mob/living/simple_mob/animal/space/alien/queen/empress = 5, + /mob/living/simple_mob/animal/space/alien/queen/empress/mother = 1 + ), + list(/mob/living/simple_mob/animal/space/bats/cult/strong), + list( + /mob/living/simple_mob/animal/space/bear, + /mob/living/simple_mob/animal/space/bear/brown + ), + list( + /mob/living/simple_mob/animal/space/carp = 50, + /mob/living/simple_mob/animal/space/carp/large = 10, + /mob/living/simple_mob/animal/space/carp/large/huge = 5 + ), + list(/mob/living/simple_mob/animal/space/goose), + list(/mob/living/simple_mob/vore/jelly), + list(/mob/living/simple_mob/animal/space/tree), + list( + /mob/living/simple_mob/vore/aggressive/corrupthound = 10, + /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi = 1, + ), + list(/mob/living/simple_mob/vore/aggressive/deathclaw), + list(/mob/living/simple_mob/vore/aggressive/dino), + list(/mob/living/simple_mob/vore/aggressive/dragon), + list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b), + list(/mob/living/simple_mob/vore/aggressive/frog), + list(/mob/living/simple_mob/vore/aggressive/giant_snake), + list(/mob/living/simple_mob/vore/aggressive/mimic), + list(/mob/living/simple_mob/vore/aggressive/panther), + list(/mob/living/simple_mob/vore/aggressive/rat), + list(/mob/living/simple_mob/vore/bee), + list( + /mob/living/simple_mob/vore/sect_drone = 10, + /mob/living/simple_mob/vore/sect_queen = 1 + ), + list(/mob/living/simple_mob/vore/solargrub), + list( + /mob/living/simple_mob/vore/oregrub = 5, + /mob/living/simple_mob/vore/oregrub/lava = 1 + ), + list(/mob/living/simple_mob/vore/catgirl), + list(/mob/living/simple_mob/vore/wolfgirl), + list( + /mob/living/simple_mob/vore/lamia, + /mob/living/simple_mob/vore/lamia/albino, + /mob/living/simple_mob/vore/lamia/albino/bra, + /mob/living/simple_mob/vore/lamia/albino/shirt, + /mob/living/simple_mob/vore/lamia/bra, + /mob/living/simple_mob/vore/lamia/cobra, + /mob/living/simple_mob/vore/lamia/cobra/bra, + /mob/living/simple_mob/vore/lamia/cobra/shirt, + /mob/living/simple_mob/vore/lamia/copper, + /mob/living/simple_mob/vore/lamia/copper/bra, + /mob/living/simple_mob/vore/lamia/copper/shirt, + /mob/living/simple_mob/vore/lamia/green, + /mob/living/simple_mob/vore/lamia/green/bra, + /mob/living/simple_mob/vore/lamia/green/shirt, + /mob/living/simple_mob/vore/lamia/zebra, + /mob/living/simple_mob/vore/lamia/zebra/bra, + /mob/living/simple_mob/vore/lamia/zebra/shirt + ), + list( + /mob/living/simple_mob/humanoid/merc = 100, + /mob/living/simple_mob/humanoid/merc/melee/sword = 50, + /mob/living/simple_mob/humanoid/merc/ranged = 25, + /mob/living/simple_mob/humanoid/merc/ranged/grenadier = 1, + /mob/living/simple_mob/humanoid/merc/ranged/ionrifle = 10, + /mob/living/simple_mob/humanoid/merc/ranged/laser = 5, + /mob/living/simple_mob/humanoid/merc/ranged/rifle = 5, + /mob/living/simple_mob/humanoid/merc/ranged/smg = 5, + /mob/living/simple_mob/humanoid/merc/ranged/sniper = 1, + /mob/living/simple_mob/humanoid/merc/ranged/space = 10, + /mob/living/simple_mob/humanoid/merc/ranged/technician = 5 + ), + list( + /mob/living/simple_mob/humanoid/pirate = 3, + /mob/living/simple_mob/humanoid/pirate/ranged = 1 + ), + list(/mob/living/simple_mob/mechanical/combat_drone), + list(/mob/living/simple_mob/mechanical/corrupt_maint_drone), + list( + /mob/living/simple_mob/mechanical/hivebot = 100, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline = 10, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot = 5, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 10, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid = 2, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp = 5, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong = 3, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard = 3, + /mob/living/simple_mob/mechanical/hivebot/support = 8, + /mob/living/simple_mob/mechanical/hivebot/support/commander = 5, + /mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow = 10, + /mob/living/simple_mob/mechanical/hivebot/swarm = 20, + /mob/living/simple_mob/mechanical/hivebot/tank = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/meatshield = 20 + ), + list(/mob/living/simple_mob/mechanical/infectionbot), + list(/mob/living/simple_mob/mechanical/mining_drone), + list(/mob/living/simple_mob/mechanical/technomancer_golem), + list( + /mob/living/simple_mob/mechanical/viscerator, + /mob/living/simple_mob/mechanical/viscerator/piercing + ), + list(/mob/living/simple_mob/mechanical/wahlem), + list(/mob/living/simple_mob/animal/passive/fox/syndicate), + list(/mob/living/simple_mob/animal/passive/fox), + list(/mob/living/simple_mob/vore/jelly), + list( + /mob/living/simple_mob/vore/otie/feral, + /mob/living/simple_mob/vore/otie/feral/chubby, + /mob/living/simple_mob/vore/otie/red, + /mob/living/simple_mob/vore/otie/red/chubby + ), + list( + /mob/living/simple_mob/shadekin/blue = 100, + /mob/living/simple_mob/shadekin/green = 50, + /mob/living/simple_mob/shadekin/orange = 20, + /mob/living/simple_mob/shadekin/purple = 60, + /mob/living/simple_mob/shadekin/red = 40, + /mob/living/simple_mob/shadekin/yellow = 1 + ), + list( + /mob/living/simple_mob/vore/aggressive/corrupthound, + /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi + ), + list(/mob/living/simple_mob/vore/aggressive/deathclaw), + list(/mob/living/simple_mob/vore/aggressive/dino), + list(/mob/living/simple_mob/vore/aggressive/dragon), + list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b), + list(/mob/living/simple_mob/vore/aggressive/frog), + list(/mob/living/simple_mob/vore/aggressive/giant_snake), + list(/mob/living/simple_mob/vore/aggressive/mimic), + list(/mob/living/simple_mob/vore/aggressive/panther), + list(/mob/living/simple_mob/vore/aggressive/rat), + list(/mob/living/simple_mob/vore/bee), + list(/mob/living/simple_mob/vore/catgirl), + list(/mob/living/simple_mob/vore/cookiegirl), + list(/mob/living/simple_mob/vore/fennec), + list(/mob/living/simple_mob/vore/fennix), + list(/mob/living/simple_mob/vore/hippo), + list(/mob/living/simple_mob/vore/horse), + list(/mob/living/simple_mob/vore/oregrub), + list(/mob/living/simple_mob/vore/rabbit), + list( + /mob/living/simple_mob/vore/redpanda = 50, + /mob/living/simple_mob/vore/redpanda/fae = 1 + ), + list( + /mob/living/simple_mob/vore/sect_drone = 10, + /mob/living/simple_mob/vore/sect_queen = 1 + ), + list(/mob/living/simple_mob/vore/solargrub), + list(/mob/living/simple_mob/vore/woof), + list(/mob/living/simple_mob/vore/alienanimals/space_ghost), + list(/mob/living/simple_mob/vore/alienanimals/catslug), + list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish), + list(/mob/living/simple_mob/vore/alienanimals/startreader), + list( + /mob/living/simple_mob/vore/bigdragon, + /mob/living/simple_mob/vore/bigdragon/friendly), + list( + /mob/living/simple_mob/vore/leopardmander = 50, + /mob/living/simple_mob/vore/leopardmander/blue = 10, + /mob/living/simple_mob/vore/leopardmander/exotic = 1 + ), + list(/mob/living/simple_mob/vore/sheep), + list(/mob/living/simple_mob/vore/weretiger) + ) + +/obj/random/mob/semirandom_mob_spawner/item_to_spawn() + var/list/choice = semirandom_mob_spawner_decisions[type] + + if(!choice) + choice = pickweight(possible_mob_types) + semirandom_mob_spawner_decisions[type] = choice + + return pickweight(choice) + +/obj/random/mob/semirandom_mob_spawner/animal + name = "Semi-Random Animal" + desc = "Spawns groups of non-hostile mobs that are all of the same theme type/theme." + icon_state = "animal" + mob_faction = "animal" + overwrite_hostility = 1 + mob_hostile = 0 + + possible_mob_types = list( + list(/mob/living/simple_mob/animal/goat) = 25, + list( + /mob/living/simple_mob/animal/passive/bird, + /mob/living/simple_mob/animal/passive/bird/azure_tit, + /mob/living/simple_mob/animal/passive/bird/black_bird, + /mob/living/simple_mob/animal/passive/bird/european_robin, + /mob/living/simple_mob/animal/passive/bird/goldcrest, + /mob/living/simple_mob/animal/passive/bird/ringneck_dove, + /mob/living/simple_mob/animal/passive/bird/parrot, + /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue, + /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white, + /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish, + /mob/living/simple_mob/animal/passive/bird/parrot/eclectus, + /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot, + /mob/living/simple_mob/animal/passive/bird/parrot/kea, + /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo, + /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo, + /mob/living/simple_mob/animal/passive/bird/parrot/white_caique, + /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo, + /mob/living/simple_mob/animal/space/goose + ) = 25, + list( + /mob/living/simple_mob/animal/passive/cat, + /mob/living/simple_mob/animal/passive/cat/black + ) = 25, + list( + /mob/living/simple_mob/animal/passive/chick, + /mob/living/simple_mob/animal/passive/chicken + ) = 25, + list(/mob/living/simple_mob/animal/passive/cow) = 25, + list(/mob/living/simple_mob/animal/passive/dog/brittany) = 10, + list(/mob/living/simple_mob/animal/passive/dog/corgi) = 10, + list(/mob/living/simple_mob/animal/passive/dog/tamaskan) = 10, + list(/mob/living/simple_mob/animal/passive/fox) = 25, + list(/mob/living/simple_mob/animal/passive/hare) = 25, + list(/mob/living/simple_mob/animal/passive/lizard) = 10, + list(/mob/living/simple_mob/animal/passive/mouse) = 15, + list(/mob/living/simple_mob/animal/passive/mouse/jerboa) = 5, + list(/mob/living/simple_mob/animal/passive/opossum) = 10, + list(/mob/living/simple_mob/animal/passive/pillbug) = 10, + list(/mob/living/simple_mob/animal/passive/snake) = 10, + list(/mob/living/simple_mob/animal/passive/snake/red) = 10, + list(/mob/living/simple_mob/animal/passive/snake/python) = 10, + list(/mob/living/simple_mob/animal/passive/tindalos) = 10, + list(/mob/living/simple_mob/animal/passive/yithian) = 10, + list( + /mob/living/simple_mob/vore/wolf = 10, + /mob/living/simple_mob/vore/wolf/direwolf = 5, + /mob/living/simple_mob/vore/greatwolf = 1, + /mob/living/simple_mob/vore/greatwolf/black = 1, + /mob/living/simple_mob/vore/greatwolf/grey = 1 + ) = 10, + list(/mob/living/simple_mob/vore/rabbit) = 10, + list(/mob/living/simple_mob/vore/redpanda) = 10, + list(/mob/living/simple_mob/vore/woof) = 1, + list(/mob/living/simple_mob/vore/fennec) = 10, + list(/mob/living/simple_mob/vore/fennix) = 1, + list(/mob/living/simple_mob/vore/hippo) = 5, + list(/mob/living/simple_mob/vore/horse) = 25, + list(/mob/living/simple_mob/vore/bee) = 10, + list( + /mob/living/simple_mob/animal/space/bear, + /mob/living/simple_mob/animal/space/bear/brown + ) = 1, + list( + /mob/living/simple_mob/vore/otie/feral = 50, + /mob/living/simple_mob/vore/otie/feral/chubby = 10, + /mob/living/simple_mob/vore/otie/red = 5, + /mob/living/simple_mob/vore/otie/red/chubby = 1 + ) = 5, + list(/mob/living/simple_mob/vore/aggressive/rat) = 15, + list(/mob/living/simple_mob/animal/sif/diyaab) = 5, + list(/mob/living/simple_mob/animal/sif/duck) = 5, + list(/mob/living/simple_mob/animal/sif/frostfly) = 5, + list( + /mob/living/simple_mob/animal/sif/glitterfly = 50, + /mob/living/simple_mob/animal/sif/glitterfly/rare = 1 + ) = 5, + list( + /mob/living/simple_mob/animal/sif/kururak = 10, + /mob/living/simple_mob/animal/sif/kururak/leader = 1, + /mob/living/simple_mob/animal/sif/kururak/hibernate = 2, + ) = 5, + list( + /mob/living/simple_mob/animal/sif/sakimm = 10, + /mob/living/simple_mob/animal/sif/sakimm/intelligent = 1 + ) = 5, + list(/mob/living/simple_mob/animal/sif/savik) = 5, + list( + /mob/living/simple_mob/animal/sif/shantak = 10, + /mob/living/simple_mob/animal/sif/shantak/leader = 1 + ) = 5, + list(/mob/living/simple_mob/animal/sif/siffet) = 5, + list(/mob/living/simple_mob/animal/sif/tymisian) = 5, + list(/mob/living/simple_mob/vore/alienanimals/teppi) = 10, + list(/mob/living/simple_mob/vore/alienanimals/dustjumper) = 5, + list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish) = 5, + list(/mob/living/simple_mob/vore/alienanimals/space_ghost) = 5, + list( + /mob/living/simple_mob/vore/leopardmander = 50, + /mob/living/simple_mob/vore/leopardmander/blue = 10, + /mob/living/simple_mob/vore/leopardmander/exotic = 1 + ) = 5, + list(/mob/living/simple_mob/vore/sheep) = 5, + list(/mob/living/simple_mob/vore/weretiger) = 5, + list(/mob/living/simple_mob/vore/alienanimals/skeleton) = 5 + ) + +/obj/random/mob/semirandom_mob_spawner/monster + name = "Semi-Random Monster" + desc = "Spawns groups of hostile mobs that are all of the same theme type/theme." + overwrite_hostility = 1 + mob_faction = "monster" + mob_hostile = 1 + mob_retaliate = 1 + + possible_mob_types = list( + list( + /mob/living/simple_mob/animal/giant_spider/electric = 5, + /mob/living/simple_mob/animal/giant_spider/frost = 5, + /mob/living/simple_mob/animal/giant_spider/hunter = 10, + /mob/living/simple_mob/animal/giant_spider/ion = 5, + /mob/living/simple_mob/animal/giant_spider/lurker = 10, + /mob/living/simple_mob/animal/giant_spider/pepper = 10, + /mob/living/simple_mob/animal/giant_spider/phorogenic = 10, + /mob/living/simple_mob/animal/giant_spider/thermic = 5, + /mob/living/simple_mob/animal/giant_spider/tunneler = 10, + /mob/living/simple_mob/animal/giant_spider/webslinger = 5 + ) = 100, + list( + /mob/living/simple_mob/shadekin/red = 5, + /mob/living/simple_mob/shadekin/orange = 1, + /mob/living/simple_mob/shadekin/purple = 10 + ) = 1, + list( + /mob/living/simple_mob/vore/wolf = 10, + /mob/living/simple_mob/vore/wolf/direwolf = 5, + /mob/living/simple_mob/vore/greatwolf = 1, + /mob/living/simple_mob/vore/greatwolf/black = 1, + /mob/living/simple_mob/vore/greatwolf/grey = 1 + ) = 40, + list(/mob/living/simple_mob/creature/strong) = 40, + list(/mob/living/simple_mob/faithless/strong) = 20, + list(/mob/living/simple_mob/animal/goat) = 1, + list( + /mob/living/simple_mob/animal/sif/shantak/leader = 1, + /mob/living/simple_mob/animal/sif/shantak = 10 + ) = 50, + list(/mob/living/simple_mob/animal/sif/savik,) = 20, + list(/mob/living/simple_mob/animal/sif/hooligan_crab) = 10, + list( + /mob/living/simple_mob/animal/space/alien = 50, + /mob/living/simple_mob/animal/space/alien/drone = 40, + /mob/living/simple_mob/animal/space/alien/sentinel = 25, + /mob/living/simple_mob/animal/space/alien/sentinel/praetorian = 15, + /mob/living/simple_mob/animal/space/alien/queen = 10, + /mob/living/simple_mob/animal/space/alien/queen/empress = 5, + /mob/living/simple_mob/animal/space/alien/queen/empress/mother = 1, + ) = 40, + list(/mob/living/simple_mob/animal/space/bats/cult/strong) = 40, + list( + /mob/living/simple_mob/animal/space/bear, + /mob/living/simple_mob/animal/space/bear/brown + ) = 40, + list( + /mob/living/simple_mob/animal/space/carp = 50, + /mob/living/simple_mob/animal/space/carp/large = 10, + /mob/living/simple_mob/animal/space/carp/large/huge = 5 + ) = 50, + list(/mob/living/simple_mob/animal/space/goose) = 50, + list(/mob/living/simple_mob/vore/jelly) = 40, + list(/mob/living/simple_mob/animal/space/tree) = 15, + list( + /mob/living/simple_mob/vore/otie/feral = 50, + /mob/living/simple_mob/vore/otie/feral/chubby = 10, + /mob/living/simple_mob/vore/otie/red = 5, + /mob/living/simple_mob/vore/otie/red/chubby = 1 + ) = 40, + list( + /mob/living/simple_mob/vore/aggressive/corrupthound = 10, + /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi = 1, + ) = 50, + list(/mob/living/simple_mob/vore/aggressive/deathclaw) = 40, + list(/mob/living/simple_mob/vore/aggressive/dino) = 40, + list(/mob/living/simple_mob/vore/aggressive/dragon) = 40, + list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b) = 40, + list(/mob/living/simple_mob/vore/aggressive/frog) = 40, + list(/mob/living/simple_mob/vore/aggressive/giant_snake) = 40, + list(/mob/living/simple_mob/vore/aggressive/mimic) = 40, + list(/mob/living/simple_mob/vore/aggressive/panther) = 25, + list(/mob/living/simple_mob/vore/aggressive/rat) = 50, + list(/mob/living/simple_mob/vore/bee) = 40, + list( + /mob/living/simple_mob/vore/sect_drone = 10, + /mob/living/simple_mob/vore/sect_queen = 1 + ) = 20, + list(/mob/living/simple_mob/vore/solargrub) = 15, + list( + /mob/living/simple_mob/vore/oregrub = 5, + /mob/living/simple_mob/vore/oregrub/lava = 1 + ) = 15, + list(/mob/living/simple_mob/vore/alienanimals/teppi) = 15, //CHOMP explo keep + list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish) = 5, + list(/mob/living/simple_mob/vore/alienanimals/space_ghost) = 5, + list( + /mob/living/simple_mob/vore/leopardmander = 50, + /mob/living/simple_mob/vore/leopardmander/blue = 10, + /mob/living/simple_mob/vore/leopardmander/exotic = 1 + ) = 5, + list(/mob/living/simple_mob/vore/sheep) = 5, + list(/mob/living/simple_mob/vore/weretiger) = 5, + list(/mob/living/simple_mob/vore/alienanimals/skeleton) = 5, + list(/mob/living/simple_mob/vore/alienanimals/catslug) = 5 + ) + +/obj/random/mob/semirandom_mob_spawner/humanoid + name = "Semi-Random Humanoid" + desc = "Spawns groups of humanoid mobs that may or may not be hostile, all of the same theme type/theme." + icon_state = "humanoid" + mob_faction = "humanoid" + + possible_mob_types = list( + list( + /mob/living/simple_mob/shadekin/blue = 25, + /mob/living/simple_mob/shadekin/green = 10, + /mob/living/simple_mob/shadekin/purple = 1, + ) = 1, + list(/mob/living/simple_mob/vore/catgirl) = 100, + list(/mob/living/simple_mob/vore/wolfgirl) = 100, + list( + /mob/living/simple_mob/vore/lamia, + /mob/living/simple_mob/vore/lamia/albino, + /mob/living/simple_mob/vore/lamia/albino/bra, + /mob/living/simple_mob/vore/lamia/albino/shirt, + /mob/living/simple_mob/vore/lamia/bra, + /mob/living/simple_mob/vore/lamia/cobra, + /mob/living/simple_mob/vore/lamia/cobra/bra, + /mob/living/simple_mob/vore/lamia/cobra/shirt, + /mob/living/simple_mob/vore/lamia/copper, + /mob/living/simple_mob/vore/lamia/copper/bra, + /mob/living/simple_mob/vore/lamia/copper/shirt, + /mob/living/simple_mob/vore/lamia/green, + /mob/living/simple_mob/vore/lamia/green/bra, + /mob/living/simple_mob/vore/lamia/green/shirt, + /mob/living/simple_mob/vore/lamia/zebra, + /mob/living/simple_mob/vore/lamia/zebra/bra, + /mob/living/simple_mob/vore/lamia/zebra/shirt + ) = 100, +// LOOK OKAY MERCS ARE HUMANOIDS SO THEY ARE HERE, but they are also kind of bullshit so they probably shouldn't be able to spawn in the same place as catgirls. +// I want some better potentially hostile humanoids that aren't stupid to fight. If they become a big issue I'll comment them out. +// For now they are just rare, and the ranged ones are way more rare than the melee ones, which I think will help balance them out. + list( + /mob/living/simple_mob/humanoid/merc = 100, + /mob/living/simple_mob/humanoid/merc/melee/sword = 50, + /mob/living/simple_mob/humanoid/merc/ranged = 25, + /mob/living/simple_mob/humanoid/merc/ranged/grenadier = 1, + /mob/living/simple_mob/humanoid/merc/ranged/ionrifle = 10, + /mob/living/simple_mob/humanoid/merc/ranged/laser = 5, + /mob/living/simple_mob/humanoid/merc/ranged/rifle = 5, + /mob/living/simple_mob/humanoid/merc/ranged/smg = 5, + /mob/living/simple_mob/humanoid/merc/ranged/sniper = 1, + /mob/living/simple_mob/humanoid/merc/ranged/space = 10, + /mob/living/simple_mob/humanoid/merc/ranged/technician = 5 + ) = 5, +// PIRATES are okay though. They can be kind of a pain but you can kind of slap them around. Also it's not like. A crime. To fight and blow up pirates so it's fine. + list( + /mob/living/simple_mob/humanoid/pirate = 3, + /mob/living/simple_mob/humanoid/pirate/ranged = 1 + ) = 50 + ) + +// I am not familiar enough with robots to know which ones are fun to fight so this list isn't weighted at all SO YOU KNOW. Be careful. +/obj/random/mob/semirandom_mob_spawner/robot + name = "Semi-Random Robot" + desc = "Spawns groups of robotic mobs that are probably hostile, all of the same theme type/theme." + icon_state = "robot" + mob_faction = "robot" + + possible_mob_types = list( + list(/mob/living/simple_mob/mechanical/combat_drone), + list(/mob/living/simple_mob/mechanical/corrupt_maint_drone), + list( + /mob/living/simple_mob/mechanical/hivebot = 100, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline = 10, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot = 5, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 20, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 10, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid = 2, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp = 5, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation = 1, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong = 3, + /mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard = 3, + /mob/living/simple_mob/mechanical/hivebot/support = 8, + /mob/living/simple_mob/mechanical/hivebot/support/commander = 5, + /mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow = 10, + /mob/living/simple_mob/mechanical/hivebot/swarm = 20, + /mob/living/simple_mob/mechanical/hivebot/tank = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee = 20, + /mob/living/simple_mob/mechanical/hivebot/tank/meatshield = 20 + ), + list(/mob/living/simple_mob/mechanical/infectionbot), + list(/mob/living/simple_mob/mechanical/mining_drone), + list(/mob/living/simple_mob/mechanical/technomancer_golem), + list( + /mob/living/simple_mob/mechanical/viscerator, + /mob/living/simple_mob/mechanical/viscerator/piercing + ), + list(/mob/living/simple_mob/mechanical/wahlem), + list(/mob/living/simple_mob/animal/passive/fox/syndicate) + ) + +/obj/random/mob/semirandom_mob_spawner/fish + name = "Semi-Random Fish" + desc = "Spawns groups of fish, all of the same theme type/theme." + icon_state = "fish" + mob_faction = "fish" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 0 + + + possible_mob_types = list( + list(/mob/living/simple_mob/animal/passive/fish/bass) = 20, + list(/mob/living/simple_mob/animal/passive/fish/icebass) = 20, + list(/mob/living/simple_mob/animal/passive/fish/javelin) = 20, + list(/mob/living/simple_mob/animal/passive/fish/koi) = 10, + list(/mob/living/simple_mob/animal/passive/fish/measelshark) = 5, + list(/mob/living/simple_mob/animal/passive/fish/murkin) = 20, + list(/mob/living/simple_mob/animal/passive/fish/perch) = 20, + list(/mob/living/simple_mob/animal/passive/fish/pike) = 20, + list(/mob/living/simple_mob/animal/passive/fish/rockfish) = 10, + list(/mob/living/simple_mob/animal/passive/fish/salmon) = 20, + list(/mob/living/simple_mob/animal/passive/fish/solarfish) = 5, + list(/mob/living/simple_mob/animal/passive/fish/trout) = 20, + list(/mob/living/simple_mob/animal/passive/crab) = 10, + list(/mob/living/simple_mob/animal/sif/hooligan_crab) = 1 + ) + +/obj/random/mob/semirandom_mob_spawner/bird + name = "Semi-Random Bird" + desc = "Spawns groups of bird, all of the same theme type/theme." + icon_state = "bird" + mob_faction = "bird" + + possible_mob_types = list( + list(/mob/living/simple_mob/animal/passive/bird), + list(/mob/living/simple_mob/animal/passive/bird/azure_tit), + list(/mob/living/simple_mob/animal/passive/bird/black_bird), + list(/mob/living/simple_mob/animal/passive/bird/european_robin), + list(/mob/living/simple_mob/animal/passive/bird/goldcrest), + list(/mob/living/simple_mob/animal/passive/bird/ringneck_dove), + list(/mob/living/simple_mob/animal/passive/bird/parrot), + list(/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique), + list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar), + list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue), + list(/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen), + list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel), + list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey), + list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white), + list(/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish), + list(/mob/living/simple_mob/animal/passive/bird/parrot/eclectus), + list(/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot), + list(/mob/living/simple_mob/animal/passive/bird/parrot/kea), + list(/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo), + list(/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo), + list(/mob/living/simple_mob/animal/passive/bird/parrot/white_caique), + list(/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo), + list(/mob/living/simple_mob/animal/space/goose), + list(/mob/living/simple_mob/animal/passive/chicken), + list(/mob/living/simple_mob/animal/passive/penguin) + ) + +/obj/random/mob/semirandom_mob_spawner/vore + name = "Semi-Random Voremob" + desc = "Spawns groups of voremobs, all of the same theme type/theme." + icon_state = "vore" + mob_faction = "vore" + + possible_mob_types = list( + list( + /mob/living/simple_mob/vore/wolf/direwolf = 5, + /mob/living/simple_mob/vore/greatwolf = 1, + /mob/living/simple_mob/vore/greatwolf/black = 1, + /mob/living/simple_mob/vore/greatwolf/grey = 1 + ) = 100, + list(/mob/living/simple_mob/vore/jelly) = 70, + list( + /mob/living/simple_mob/vore/otie/feral, + /mob/living/simple_mob/vore/otie/feral/chubby, + /mob/living/simple_mob/vore/otie/red, + /mob/living/simple_mob/vore/otie/red/chubby + ) = 50, + list( + /mob/living/simple_mob/shadekin/blue = 100, + /mob/living/simple_mob/shadekin/green = 50, + /mob/living/simple_mob/shadekin/orange = 20, + /mob/living/simple_mob/shadekin/purple = 60, + /mob/living/simple_mob/shadekin/red = 40, + /mob/living/simple_mob/shadekin/yellow = 1 + ) = 1, + list( + /mob/living/simple_mob/vore/aggressive/corrupthound, + /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi + ) = 70, + list(/mob/living/simple_mob/vore/aggressive/deathclaw) = 70, + list(/mob/living/simple_mob/vore/aggressive/dino) = 100, + list(/mob/living/simple_mob/vore/aggressive/dragon) = 100, + list(/mob/living/simple_mob/vore/aggressive/dragon/virgo3b) = 100, + list(/mob/living/simple_mob/vore/aggressive/frog) = 100, + list(/mob/living/simple_mob/vore/aggressive/giant_snake) = 100, + list(/mob/living/simple_mob/vore/aggressive/mimic) = 50, + list(/mob/living/simple_mob/vore/aggressive/panther) = 70, + list(/mob/living/simple_mob/vore/aggressive/rat) = 100, + list(/mob/living/simple_mob/vore/bee) = 100, + list(/mob/living/simple_mob/vore/catgirl) = 100, + list(/mob/living/simple_mob/vore/wolftaur) = 100, + list(/mob/living/simple_mob/vore/cookiegirl) = 100, + list(/mob/living/simple_mob/vore/fennec) = 100, + list(/mob/living/simple_mob/vore/fennix) = 50, + list(/mob/living/simple_mob/vore/hippo) = 70, + list(/mob/living/simple_mob/vore/horse) = 100, + list(/mob/living/simple_mob/vore/raptor) = 100, + list(/mob/living/simple_mob/vore/succubus) = 100, + list(/mob/living/simple_mob/vore/vampire) = 50, + list(/mob/living/simple_mob/vore/vampire/queen) = 1, + list(/mob/living/simple_mob/vore/bat) = 50, + list(/mob/living/simple_mob/vore/scel) = 10, + list( + /mob/living/simple_mob/vore/lamia, + /mob/living/simple_mob/vore/lamia/albino, + /mob/living/simple_mob/vore/lamia/albino/bra, + /mob/living/simple_mob/vore/lamia/albino/shirt, + /mob/living/simple_mob/vore/lamia/bra, + /mob/living/simple_mob/vore/lamia/cobra, + /mob/living/simple_mob/vore/lamia/cobra/bra, + /mob/living/simple_mob/vore/lamia/cobra/shirt, + /mob/living/simple_mob/vore/lamia/copper, + /mob/living/simple_mob/vore/lamia/copper/bra, + /mob/living/simple_mob/vore/lamia/copper/shirt, + /mob/living/simple_mob/vore/lamia/green, + /mob/living/simple_mob/vore/lamia/green/bra, + /mob/living/simple_mob/vore/lamia/green/shirt, + /mob/living/simple_mob/vore/lamia/zebra, + /mob/living/simple_mob/vore/lamia/zebra/bra, + /mob/living/simple_mob/vore/lamia/zebra/shirt + ) = 100, + list(/mob/living/simple_mob/vore/rabbit) = 100, + list( + /mob/living/simple_mob/vore/redpanda = 50, + /mob/living/simple_mob/vore/redpanda/fae = 1 + ) = 100, + list( + /mob/living/simple_mob/vore/sect_drone = 10, + /mob/living/simple_mob/vore/sect_queen = 1 + ) = 50, + list(/mob/living/simple_mob/vore/solargrub) = 100, + list(/mob/living/simple_mob/vore/woof) = 1, + list(/mob/living/simple_mob/vore/alienanimals/teppi) = 25 + ) + +/obj/random/mob/semirandom_mob_spawner/sus + name = "Weird shit" + desc = "Spawns groups of weird stuff, all of the same theme type/theme. Don't put this on normal maps." + icon_state = "sus" + mob_faction = "sus" + + possible_mob_types = list( + list( + /mob/living/simple_mob/vore/woof/hostile/melee = 100, + /mob/living/simple_mob/vore/woof/hostile/ranged = 20, + /mob/living/simple_mob/vore/woof/hostile/horrible = 10, + /mob/living/simple_mob/vore/woof/hostile/terrible = 5, + /mob/living/simple_mob/vore/woof/cass = 1 + ), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/recursive) + ) + +/obj/random/mob/semirandom_mob_spawner/mecha + name = "Semi-Random Mecha" + desc = "Spawns groups of mechs, all of the same theme type/theme. Don't put this on normal maps." + icon_state = "mecha" + mob_faction = "mecha" + + possible_mob_types = list( + list(/mob/living/simple_mob/mechanical/mecha/combat/durand), + list(/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive), + list(/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned), + list(/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax), + list(/mob/living/simple_mob/mechanical/mecha/combat/marauder), + list(/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler), + list(/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph), + list(/mob/living/simple_mob/mechanical/mecha/combat/phazon), + list(/mob/living/simple_mob/mechanical/mecha/hoverpod), + list(/mob/living/simple_mob/mechanical/mecha/hoverpod/manned), + list(/mob/living/simple_mob/mechanical/mecha/odysseus), + list(/mob/living/simple_mob/mechanical/mecha/odysseus/manned), + list(/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus), + list(/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned), + list(/mob/living/simple_mob/mechanical/mecha/ripley), + list(/mob/living/simple_mob/mechanical/mecha/ripley/blue_flames), + list(/mob/living/simple_mob/mechanical/mecha/ripley/deathripley), + list(/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned), + list(/mob/living/simple_mob/mechanical/mecha/ripley/firefighter), + list(/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned), + list(/mob/living/simple_mob/mechanical/mecha/ripley/manned), + list(/mob/living/simple_mob/mechanical/mecha/ripley/red_flames) + ) + + +/obj/random/mob/semirandom_mob_spawner/monster/b + mob_faction = "monsterb" + +/obj/random/mob/semirandom_mob_spawner/monster/c + mob_faction = "monsterc" + +/obj/random/mob/semirandom_mob_spawner/monster/d + mob_faction = "monsterd" + +/obj/random/mob/semirandom_mob_spawner/monster/e + mob_faction = "monstere" + +/obj/random/mob/semirandom_mob_spawner/monster/f + mob_faction = "monsterf" + +/obj/random/mob/semirandom_mob_spawner/animal/b + mob_faction = "animalb" + +/obj/random/mob/semirandom_mob_spawner/animal/c + mob_faction = "animalc" + +/obj/random/mob/semirandom_mob_spawner/animal/d + mob_faction = "animald" + +/obj/random/mob/semirandom_mob_spawner/animal/e + mob_faction = "animale" + +/obj/random/mob/semirandom_mob_spawner/animal/f + mob_faction = "animalf" + +/obj/random/mob/semirandom_mob_spawner/animal/retaliate + mob_faction = "retanimala" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/animal/retaliate/b + mob_faction = "retanimalb" + +/obj/random/mob/semirandom_mob_spawner/animal/retaliate/c + mob_faction = "retanimalc" + +/obj/random/mob/semirandom_mob_spawner/animal/hostile + mob_faction = "hosanimala" + overwrite_hostility = 1 + mob_hostile = 1 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/animal/hostile/b + mob_faction = "hosanimalb" + +/obj/random/mob/semirandom_mob_spawner/animal/hostile/c + mob_faction = "hosanimalc" + + +/obj/random/mob/semirandom_mob_spawner/humanoid/b + mob_faction = "humanoidb" + +/obj/random/mob/semirandom_mob_spawner/humanoid/c + mob_faction = "humanoidc" + +/obj/random/mob/semirandom_mob_spawner/humanoid/d + mob_faction = "humanoidd" + +/obj/random/mob/semirandom_mob_spawner/humanoid/e + mob_faction = "humanoide" + +/obj/random/mob/semirandom_mob_spawner/humanoid/f + mob_faction = "humanoidf" + +/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate + mob_faction = "rethumanoida" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate/b + mob_faction = "rethumanoidb" + +/obj/random/mob/semirandom_mob_spawner/humanoid/retaliate/c + mob_faction = "rethumanoidc" + +/obj/random/mob/semirandom_mob_spawner/humanoid/hostile + mob_faction = "hoshumanoida" + overwrite_hostility = 1 + mob_hostile = 1 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/humanoid/hostile/b + mob_faction = "hoshumanoidb" + +/obj/random/mob/semirandom_mob_spawner/humanoid/hostile/c + mob_faction = "hoshumanoidc" + +/obj/random/mob/semirandom_mob_spawner/robot/b + mob_faction = "robotb" + +/obj/random/mob/semirandom_mob_spawner/robot/c + mob_faction = "robotc" + +/obj/random/mob/semirandom_mob_spawner/robot/d + mob_faction = "robotd" + +/obj/random/mob/semirandom_mob_spawner/robot/e + mob_faction = "robote" + +/obj/random/mob/semirandom_mob_spawner/robot/f + mob_faction = "robotf" + +/obj/random/mob/semirandom_mob_spawner/robot/retaliate + mob_faction = "retrobota" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/robot/retaliate/b + mob_faction = "retrobotb" + +/obj/random/mob/semirandom_mob_spawner/robot/retaliate/c + mob_faction = "retrobotc" + +/obj/random/mob/semirandom_mob_spawner/bird/b + mob_faction = "birdb" + +/obj/random/mob/semirandom_mob_spawner/bird/c + mob_faction = "birdc" + +/obj/random/mob/semirandom_mob_spawner/bird/d + mob_faction = "birdd" + +/obj/random/mob/semirandom_mob_spawner/bird/e + mob_faction = "birde" + +/obj/random/mob/semirandom_mob_spawner/bird/f + mob_faction = "birdf" + +/obj/random/mob/semirandom_mob_spawner/fish/b + mob_faction = "fishb" + +/obj/random/mob/semirandom_mob_spawner/fish/c + mob_faction = "fishc" + +/obj/random/mob/semirandom_mob_spawner/fish/d + mob_faction = "fishd" + +/obj/random/mob/semirandom_mob_spawner/fish/e + mob_faction = "fishe" + +/obj/random/mob/semirandom_mob_spawner/fish/f + mob_faction = "fishf" + +/obj/random/mob/semirandom_mob_spawner/vore/b + mob_faction = "voreb" + +/obj/random/mob/semirandom_mob_spawner/vore/c + mob_faction = "vorec" + +/obj/random/mob/semirandom_mob_spawner/vore/d + mob_faction = "vored" + +/obj/random/mob/semirandom_mob_spawner/vore/e + mob_faction = "voree" + +/obj/random/mob/semirandom_mob_spawner/vore/f + mob_faction = "voref" + +/obj/random/mob/semirandom_mob_spawner/vore/passive + mob_faction = "pasvorea" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 0 + +/obj/random/mob/semirandom_mob_spawner/vore/passive/b + mob_faction = "pasvoreb" + +/obj/random/mob/semirandom_mob_spawner/vore/passive/c + mob_faction = "pasvorec" + +/obj/random/mob/semirandom_mob_spawner/vore/retaliate + mob_faction = "retvorea" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/vore/retaliate/b + mob_faction = "retvoreb" + +/obj/random/mob/semirandom_mob_spawner/vore/retaliate/c + mob_faction = "retvorec" + +/obj/random/mob/semirandom_mob_spawner/vore/hostile + mob_faction = "hosvorea" + overwrite_hostility = 1 + mob_hostile = 1 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/vore/hostile/b + mob_faction = "hosvoreb" + +/obj/random/mob/semirandom_mob_spawner/vore/hostile/c + mob_faction = "hosvorec" + +/obj/random/mob/semirandom_mob_spawner/sus/b + mob_faction = "susb" + +/obj/random/mob/semirandom_mob_spawner/sus/c + mob_faction = "susc" + +/obj/random/mob/semirandom_mob_spawner/sus/d + mob_faction = "susd" + +/obj/random/mob/semirandom_mob_spawner/sus/e + mob_faction = "suse" + +/obj/random/mob/semirandom_mob_spawner/sus/f + mob_faction = "susf" + +/obj/random/mob/semirandom_mob_spawner/mecha/b + mob_faction = "mechab" + +/obj/random/mob/semirandom_mob_spawner/mecha/c + mob_faction = "mechac" + +/obj/random/mob/semirandom_mob_spawner/mecha/d + mob_faction = "mechad" + +/obj/random/mob/semirandom_mob_spawner/mecha/e + mob_faction = "mechae" + +/obj/random/mob/semirandom_mob_spawner/mecha/f + mob_faction = "mechaf" + +/obj/random/mob/semirandom_mob_spawner/mecha/retaliate + mob_faction = "retmecha" + overwrite_hostility = 1 + mob_hostile = 0 + mob_retaliate = 1 + +/obj/random/mob/semirandom_mob_spawner/mecha/retaliate/b + mob_faction = "retmechb" + +/obj/random/mob/semirandom_mob_spawner/mecha/retaliate/c + mob_faction = "retmechc" diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index c7fc6962ba..b06ec311ad 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -1,143 +1,143 @@ -/client/proc/spawn_tanktransferbomb() - set category = "Debug" - set desc = "Spawn a tank transfer valve bomb" - set name = "Instant TTV" - - if(!check_rights(R_SPAWN)) return - - var/obj/effect/spawner/newbomb/proto = /obj/effect/spawner/newbomb/radio/custom - - var/p = tgui_input_number(usr, "Enter phoron amount (mol):","Phoron", initial(proto.phoron_amt)) - if(p == null) return - - var/o = tgui_input_number(usr, "Enter oxygen amount (mol):","Oxygen", initial(proto.oxygen_amt)) - if(o == null) return - - var/c = tgui_input_number(usr, "Enter carbon dioxide amount (mol):","Carbon Dioxide", initial(proto.carbon_amt)) - if(c == null) return - - new /obj/effect/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) - -/obj/effect/spawner/newbomb - name = "TTV bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - - var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. - var/phoron_amt = 12 - var/oxygen_amt = 18 - var/carbon_amt = 0 - -/obj/effect/spawner/newbomb/timer - name = "TTV bomb - timer" - assembly_type = /obj/item/device/assembly/timer - -/obj/effect/spawner/newbomb/timer/syndicate - name = "TTV bomb - merc" - //High yield bombs. Yes, it is possible to make these with toxins - phoron_amt = 18.5 - oxygen_amt = 28.5 - -/obj/effect/spawner/newbomb/proximity - name = "TTV bomb - proximity" - assembly_type = /obj/item/device/assembly/prox_sensor - -/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co) - if(ph != null) phoron_amt = ph - if(ox != null) oxygen_amt = ox - if(co != null) carbon_amt = co - ..() - -/obj/effect/spawner/newbomb/Initialize(newloc) - ..(newloc) - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/weapon/tank/phoron/PT = new(V) - var/obj/item/weapon/tank/oxygen/OT = new(V) - - V.tank_one = PT - V.tank_two = OT - - PT.master = V - OT.master = V - - PT.valve_welded = 1 - PT.air_contents.gas["phoron"] = phoron_amt - PT.air_contents.gas["carbon_dioxide"] = carbon_amt - PT.air_contents.total_moles = phoron_amt + carbon_amt - PT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 - PT.air_contents.update_values() - - OT.valve_welded = 1 - OT.air_contents.gas["oxygen"] = oxygen_amt - OT.air_contents.total_moles = oxygen_amt - OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 - OT.air_contents.update_values() - - var/obj/item/device/assembly/S = new assembly_type(V) - V.attached_device = S - - S.holder = V - S.toggle_secure() - - V.update_icon() - return INITIALIZE_HINT_QDEL - - -/////////////////////// -//One Tank Bombs, WOOOOOOO! -Luke -/////////////////////// - -/obj/effect/spawner/onetankbomb - name = "Single-tank bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - -// var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. - var/phoron_amt = 0 - var/oxygen_amt = 0 - -/obj/effect/spawner/onetankbomb/New(newloc) //just needs an assembly. - ..(newloc) - - var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb, /obj/item/weapon/tank/oxygen/onetankbomb) - new type(src.loc) - - qdel(src) - -/obj/effect/spawner/onetankbomb/full - name = "Single-tank bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - -// var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. -/obj/effect/spawner/onetankbomb/full/New(newloc) //just needs an assembly. - ..(newloc) - - var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb/full, /obj/item/weapon/tank/oxygen/onetankbomb/full) - new type(src.loc) - - qdel(src) - -/obj/effect/spawner/onetankbomb/frag - name = "Single-tank bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - -// var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. -/obj/effect/spawner/onetankbomb/full/New(newloc) //just needs an assembly. - ..(newloc) - - var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb/full, /obj/item/weapon/tank/oxygen/onetankbomb/full) - new type(src.loc) - - qdel(src) - - +/client/proc/spawn_tanktransferbomb() + set category = "Debug" + set desc = "Spawn a tank transfer valve bomb" + set name = "Instant TTV" + + if(!check_rights(R_SPAWN)) return + + var/obj/effect/spawner/newbomb/proto = /obj/effect/spawner/newbomb/radio/custom + + var/p = tgui_input_number(usr, "Enter phoron amount (mol):","Phoron", initial(proto.phoron_amt)) + if(p == null) return + + var/o = tgui_input_number(usr, "Enter oxygen amount (mol):","Oxygen", initial(proto.oxygen_amt)) + if(o == null) return + + var/c = tgui_input_number(usr, "Enter carbon dioxide amount (mol):","Carbon Dioxide", initial(proto.carbon_amt)) + if(c == null) return + + new /obj/effect/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) + +/obj/effect/spawner/newbomb + name = "TTV bomb" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + + var/assembly_type = /obj/item/device/assembly/signaler + + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. + var/phoron_amt = 12 + var/oxygen_amt = 18 + var/carbon_amt = 0 + +/obj/effect/spawner/newbomb/timer + name = "TTV bomb - timer" + assembly_type = /obj/item/device/assembly/timer + +/obj/effect/spawner/newbomb/timer/syndicate + name = "TTV bomb - merc" + //High yield bombs. Yes, it is possible to make these with toxins + phoron_amt = 18.5 + oxygen_amt = 28.5 + +/obj/effect/spawner/newbomb/proximity + name = "TTV bomb - proximity" + assembly_type = /obj/item/device/assembly/prox_sensor + +/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co) + if(ph != null) phoron_amt = ph + if(ox != null) oxygen_amt = ox + if(co != null) carbon_amt = co + ..() + +/obj/effect/spawner/newbomb/Initialize(newloc) + ..(newloc) + var/obj/item/device/transfer_valve/V = new(src.loc) + var/obj/item/weapon/tank/phoron/PT = new(V) + var/obj/item/weapon/tank/oxygen/OT = new(V) + + V.tank_one = PT + V.tank_two = OT + + PT.master = V + OT.master = V + + PT.valve_welded = 1 + PT.air_contents.gas["phoron"] = phoron_amt + PT.air_contents.gas["carbon_dioxide"] = carbon_amt + PT.air_contents.total_moles = phoron_amt + carbon_amt + PT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 + PT.air_contents.update_values() + + OT.valve_welded = 1 + OT.air_contents.gas["oxygen"] = oxygen_amt + OT.air_contents.total_moles = oxygen_amt + OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 + OT.air_contents.update_values() + + var/obj/item/device/assembly/S = new assembly_type(V) + V.attached_device = S + + S.holder = V + S.toggle_secure() + + V.update_icon() + return INITIALIZE_HINT_QDEL + + +/////////////////////// +//One Tank Bombs, WOOOOOOO! -Luke +/////////////////////// + +/obj/effect/spawner/onetankbomb + name = "Single-tank bomb" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + +// var/assembly_type = /obj/item/device/assembly/signaler + + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. + var/phoron_amt = 0 + var/oxygen_amt = 0 + +/obj/effect/spawner/onetankbomb/New(newloc) //just needs an assembly. + ..(newloc) + + var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb, /obj/item/weapon/tank/oxygen/onetankbomb) + new type(src.loc) + + qdel(src) + +/obj/effect/spawner/onetankbomb/full + name = "Single-tank bomb" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + +// var/assembly_type = /obj/item/device/assembly/signaler + + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. +/obj/effect/spawner/onetankbomb/full/New(newloc) //just needs an assembly. + ..(newloc) + + var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb/full, /obj/item/weapon/tank/oxygen/onetankbomb/full) + new type(src.loc) + + qdel(src) + +/obj/effect/spawner/onetankbomb/frag + name = "Single-tank bomb" + icon = 'icons/mob/screen1.dmi' + icon_state = "x" + +// var/assembly_type = /obj/item/device/assembly/signaler + + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. +/obj/effect/spawner/onetankbomb/full/New(newloc) //just needs an assembly. + ..(newloc) + + var/type = pick(/obj/item/weapon/tank/phoron/onetankbomb/full, /obj/item/weapon/tank/oxygen/onetankbomb/full) + new type(src.loc) + + qdel(src) + + diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index af84a15d42..0fcfe6d6a0 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -1,26 +1,26 @@ -/obj/effect/gibspawner/generic - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) - gibamounts = list(2,2,1) - -/obj/effect/gibspawner/generic/New() - gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list()) - ..() - -/obj/effect/gibspawner/human - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) - gibamounts = list(1,1,1,1,1,1,1) - -/obj/effect/gibspawner/human/New() - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) - gibamounts[6] = pick(0,1,2) - ..() - -/obj/effect/gibspawner/robot - sparks = 1 - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb) - gibamounts = list(1,1,1,1,1,1) - -/obj/effect/gibspawner/robot/New() - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) - gibamounts[6] = pick(0,1,2) +/obj/effect/gibspawner/generic + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) + gibamounts = list(2,2,1) + +/obj/effect/gibspawner/generic/New() + gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list()) + ..() + +/obj/effect/gibspawner/human + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) + gibamounts = list(1,1,1,1,1,1,1) + +/obj/effect/gibspawner/human/New() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) + gibamounts[6] = pick(0,1,2) + ..() + +/obj/effect/gibspawner/robot + sparks = 1 + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb) + gibamounts = list(1,1,1,1,1,1) + +/obj/effect/gibspawner/robot/New() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) + gibamounts[6] = pick(0,1,2) ..() \ No newline at end of file diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 392ed5154a..49195633d7 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -1,324 +1,324 @@ -//generic procs copied from obj/effect/alien -/obj/effect/spider - name = "web" - desc = "it's stringy and sticky" - icon = 'icons/effects/effects.dmi' - anchored = TRUE - density = FALSE - var/health = 10 - -//similar to weeds, but only barfed out by nurses manually -/obj/effect/spider/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if (prob(50)) - qdel(src) - if(3.0) - if (prob(5)) - qdel(src) - return - -/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user) - user.setClickCooldown(user.get_attack_speed(W)) - - if(LAZYLEN(W.attack_verb)) - visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") - else - visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") - - var/damage = W.force / 4.0 - - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(src, W.usesound, 100, 1) - - health -= damage - healthcheck() - -/obj/effect/spider/spiderling/attack_hand(mob/living/user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - if(prob(20)) - visible_message("\The [user] tries to stomp on \the [src], but misses!") - var/list/nearby = oview(2, src) - if(length(nearby)) - walk_to(src, pick(nearby), 2) - return - visible_message("\The [user] stomps \the [src] dead!") - die() - -/obj/effect/spider/bullet_act(var/obj/item/projectile/Proj) - ..() - health -= Proj.get_structure_damage() - healthcheck() - -/obj/effect/spider/proc/die() - qdel(src) - -/obj/effect/spider/proc/healthcheck() - if(health <= 0) - die() - -/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300 + T0C) - health -= 5 - healthcheck() - -/obj/effect/spider/stickyweb - icon_state = "stickyweb1" - -/obj/effect/spider/stickyweb/Initialize() - if(prob(50)) - icon_state = "stickyweb2" - return ..() - -/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target) - if(istype(mover, /mob/living/simple_mob/animal/giant_spider)) - return TRUE - else if(istype(mover, /mob/living)) - if(prob(50)) - to_chat(mover, span("warning", "You get stuck in \the [src] for a moment.")) - return FALSE - else if(istype(mover, /obj/item/projectile)) - return prob(30) - return TRUE - -/obj/effect/spider/eggcluster - name = "egg cluster" - desc = "They seem to pulse slightly with an inner life" - icon_state = "eggs" - var/amount_grown = 0 - var/spiders_min = 6 - var/spiders_max = 24 - var/spider_type = /obj/effect/spider/spiderling - var/faction = "spiders" - -/obj/effect/spider/eggcluster/Initialize() - pixel_x = rand(3,-3) - pixel_y = rand(3,-3) - START_PROCESSING(SSobj, src) - return ..() - -/obj/effect/spider/eggcluster/New(var/location, var/atom/parent) - get_light_and_color(parent) - ..() - -/obj/effect/spider/eggcluster/Destroy() - STOP_PROCESSING(SSobj, src) - if(istype(loc, /obj/item/organ/external)) - var/obj/item/organ/external/O = loc - O.implants -= src - - return ..() - -/obj/effect/spider/eggcluster/process() - amount_grown += rand(0,2) - if(amount_grown >= 100) - var/num = rand(spiders_min, spiders_max) - var/obj/item/organ/external/O = null - if(istype(loc, /obj/item/organ/external)) - O = loc - - for(var/i=0, i[src] dies!") - new /obj/effect/decal/cleanable/spiderling_remains(src.loc) - ..() - -/obj/effect/spider/spiderling/healthcheck() - if(health <= 0) - die() - -/obj/effect/spider/spiderling/process() - healthcheck() - if(travelling_in_vent) - if(istype(src.loc, /turf)) - travelling_in_vent = 0 - entry_vent = null - else if(entry_vent) - if(get_dist(src, entry_vent) <= 1) - //VOREStation Edit Start - var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = get_safe_ventcrawl_target(entry_vent) - if(!exit_vent) - return - spawn(rand(20,60)) - loc = exit_vent - var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) - spawn(travel_time) - - if(!exit_vent || exit_vent.welded) - loc = entry_vent - entry_vent = null - return - - if(prob(50)) - src.visible_message("You hear something squeezing through the ventilation ducts.",2) - sleep(travel_time) - - if(!exit_vent || exit_vent.welded) - loc = entry_vent - entry_vent = null - return - loc = exit_vent.loc - entry_vent = null - var/area/new_area = get_area(loc) - if(new_area) - new_area.Entered(src) - //VOREStation Edit End - //================= - - if(isturf(loc)) - skitter() - - else if(isorgan(loc)) - if(amount_grown < 0) amount_grown = 1 - var/obj/item/organ/external/O = loc - if(!O.owner || O.owner.stat == DEAD || amount_grown > 80) - O.implants -= src - src.loc = O.owner ? O.owner.loc : O.loc - src.visible_message("\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!") - if(O.owner) - O.owner.apply_damage(1, BRUTE, O.organ_tag) - else if(prob(1)) - O.owner.apply_damage(1, TOX, O.organ_tag) - if(world.time > last_itch + 30 SECONDS) - last_itch = world.time - to_chat(O.owner, "Your [O.name] itches...") - else if(prob(1)) - src.visible_message("\The [src] skitters.") - - if(amount_grown >= 0) - amount_grown += rand(0,2) - -/obj/effect/spider/spiderling/proc/skitter() - if(isturf(loc)) - if(prob(25)) - var/list/nearby = trange(5, src) - loc - if(nearby.len) - var/target_atom = pick(nearby) - walk_to(src, target_atom, 5) - if(prob(25)) - src.visible_message("\The [src] skitters[pick(" away"," around","")].") - else if(amount_grown < 75 && prob(5)) - //vent crawl! - for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) - if(!v.welded) - entry_vent = v - walk_to(src, entry_vent, 5) - break - if(amount_grown >= 100) - var/spawn_type = pick(grow_as) - var/mob/living/simple_mob/animal/giant_spider/GS = new spawn_type(src.loc, src) - GS.faction = faction - if(stunted) - spawn(2) - GS.make_spiderling() - qdel(src) - -/obj/effect/spider/spiderling/stunted - stunted = TRUE - - grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/hunter) - -/obj/effect/spider/spiderling/non_growing - amount_grown = -1 - -/obj/effect/spider/spiderling/princess - name = "royal spiderling" - desc = "There's a special aura about this one." - grow_as = list(/mob/living/simple_mob/animal/giant_spider/nurse/queen) - -/obj/effect/spider/spiderling/princess/New(var/location, var/atom/parent) - ..() - amount_grown = 50 - -/obj/effect/decal/cleanable/spiderling_remains - name = "spiderling remains" - desc = "Green squishy mess." - icon = 'icons/effects/effects.dmi' - icon_state = "greenshatter" - -/obj/effect/spider/cocoon - name = "cocoon" - desc = "Something wrapped in silky spider web" - icon_state = "cocoon1" - health = 15 - -/obj/effect/spider/cocoon/New() - icon_state = pick("cocoon1","cocoon2","cocoon3") - -/obj/effect/spider/cocoon/Destroy() - src.visible_message("\The [src] splits open.") - for(var/atom/movable/A in contents) - A.loc = src.loc - return ..() +//generic procs copied from obj/effect/alien +/obj/effect/spider + name = "web" + desc = "it's stringy and sticky" + icon = 'icons/effects/effects.dmi' + anchored = TRUE + density = FALSE + var/health = 10 + +//similar to weeds, but only barfed out by nurses manually +/obj/effect/spider/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + if(2.0) + if (prob(50)) + qdel(src) + if(3.0) + if (prob(5)) + qdel(src) + return + +/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user) + user.setClickCooldown(user.get_attack_speed(W)) + + if(LAZYLEN(W.attack_verb)) + visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") + else + visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") + + var/damage = W.force / 4.0 + + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + + if(WT.remove_fuel(0, user)) + damage = 15 + playsound(src, W.usesound, 100, 1) + + health -= damage + healthcheck() + +/obj/effect/spider/spiderling/attack_hand(mob/living/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.do_attack_animation(src) + if(prob(20)) + visible_message("\The [user] tries to stomp on \the [src], but misses!") + var/list/nearby = oview(2, src) + if(length(nearby)) + walk_to(src, pick(nearby), 2) + return + visible_message("\The [user] stomps \the [src] dead!") + die() + +/obj/effect/spider/bullet_act(var/obj/item/projectile/Proj) + ..() + health -= Proj.get_structure_damage() + healthcheck() + +/obj/effect/spider/proc/die() + qdel(src) + +/obj/effect/spider/proc/healthcheck() + if(health <= 0) + die() + +/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300 + T0C) + health -= 5 + healthcheck() + +/obj/effect/spider/stickyweb + icon_state = "stickyweb1" + +/obj/effect/spider/stickyweb/Initialize() + if(prob(50)) + icon_state = "stickyweb2" + return ..() + +/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target) + if(istype(mover, /mob/living/simple_mob/animal/giant_spider)) + return TRUE + else if(istype(mover, /mob/living)) + if(prob(50)) + to_chat(mover, span("warning", "You get stuck in \the [src] for a moment.")) + return FALSE + else if(istype(mover, /obj/item/projectile)) + return prob(30) + return TRUE + +/obj/effect/spider/eggcluster + name = "egg cluster" + desc = "They seem to pulse slightly with an inner life" + icon_state = "eggs" + var/amount_grown = 0 + var/spiders_min = 6 + var/spiders_max = 24 + var/spider_type = /obj/effect/spider/spiderling + var/faction = "spiders" + +/obj/effect/spider/eggcluster/Initialize() + pixel_x = rand(3,-3) + pixel_y = rand(3,-3) + START_PROCESSING(SSobj, src) + return ..() + +/obj/effect/spider/eggcluster/New(var/location, var/atom/parent) + get_light_and_color(parent) + ..() + +/obj/effect/spider/eggcluster/Destroy() + STOP_PROCESSING(SSobj, src) + if(istype(loc, /obj/item/organ/external)) + var/obj/item/organ/external/O = loc + O.implants -= src + + return ..() + +/obj/effect/spider/eggcluster/process() + amount_grown += rand(0,2) + if(amount_grown >= 100) + var/num = rand(spiders_min, spiders_max) + var/obj/item/organ/external/O = null + if(istype(loc, /obj/item/organ/external)) + O = loc + + for(var/i=0, i[src] dies!") + new /obj/effect/decal/cleanable/spiderling_remains(src.loc) + ..() + +/obj/effect/spider/spiderling/healthcheck() + if(health <= 0) + die() + +/obj/effect/spider/spiderling/process() + healthcheck() + if(travelling_in_vent) + if(istype(src.loc, /turf)) + travelling_in_vent = 0 + entry_vent = null + else if(entry_vent) + if(get_dist(src, entry_vent) <= 1) + //VOREStation Edit Start + var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = get_safe_ventcrawl_target(entry_vent) + if(!exit_vent) + return + spawn(rand(20,60)) + loc = exit_vent + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + spawn(travel_time) + + if(!exit_vent || exit_vent.welded) + loc = entry_vent + entry_vent = null + return + + if(prob(50)) + src.visible_message("You hear something squeezing through the ventilation ducts.",2) + sleep(travel_time) + + if(!exit_vent || exit_vent.welded) + loc = entry_vent + entry_vent = null + return + loc = exit_vent.loc + entry_vent = null + var/area/new_area = get_area(loc) + if(new_area) + new_area.Entered(src) + //VOREStation Edit End + //================= + + if(isturf(loc)) + skitter() + + else if(isorgan(loc)) + if(amount_grown < 0) amount_grown = 1 + var/obj/item/organ/external/O = loc + if(!O.owner || O.owner.stat == DEAD || amount_grown > 80) + O.implants -= src + src.loc = O.owner ? O.owner.loc : O.loc + src.visible_message("\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!") + if(O.owner) + O.owner.apply_damage(1, BRUTE, O.organ_tag) + else if(prob(1)) + O.owner.apply_damage(1, TOX, O.organ_tag) + if(world.time > last_itch + 30 SECONDS) + last_itch = world.time + to_chat(O.owner, "Your [O.name] itches...") + else if(prob(1)) + src.visible_message("\The [src] skitters.") + + if(amount_grown >= 0) + amount_grown += rand(0,2) + +/obj/effect/spider/spiderling/proc/skitter() + if(isturf(loc)) + if(prob(25)) + var/list/nearby = trange(5, src) - loc + if(nearby.len) + var/target_atom = pick(nearby) + walk_to(src, target_atom, 5) + if(prob(25)) + src.visible_message("\The [src] skitters[pick(" away"," around","")].") + else if(amount_grown < 75 && prob(5)) + //vent crawl! + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) + if(!v.welded) + entry_vent = v + walk_to(src, entry_vent, 5) + break + if(amount_grown >= 100) + var/spawn_type = pick(grow_as) + var/mob/living/simple_mob/animal/giant_spider/GS = new spawn_type(src.loc, src) + GS.faction = faction + if(stunted) + spawn(2) + GS.make_spiderling() + qdel(src) + +/obj/effect/spider/spiderling/stunted + stunted = TRUE + + grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/hunter) + +/obj/effect/spider/spiderling/non_growing + amount_grown = -1 + +/obj/effect/spider/spiderling/princess + name = "royal spiderling" + desc = "There's a special aura about this one." + grow_as = list(/mob/living/simple_mob/animal/giant_spider/nurse/queen) + +/obj/effect/spider/spiderling/princess/New(var/location, var/atom/parent) + ..() + amount_grown = 50 + +/obj/effect/decal/cleanable/spiderling_remains + name = "spiderling remains" + desc = "Green squishy mess." + icon = 'icons/effects/effects.dmi' + icon_state = "greenshatter" + +/obj/effect/spider/cocoon + name = "cocoon" + desc = "Something wrapped in silky spider web" + icon_state = "cocoon1" + health = 15 + +/obj/effect/spider/cocoon/New() + icon_state = pick("cocoon1","cocoon2","cocoon3") + +/obj/effect/spider/cocoon/Destroy() + src.visible_message("\The [src] splits open.") + for(var/atom/movable/A in contents) + A.loc = src.loc + return ..() diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index fcec6803e4..949eb71eaf 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -1,74 +1,74 @@ -// Uncomment this define to check for possible lengthy processing of emp_act()s. -// If emp_act() takes more than defined deciseconds (1/10 seconds) an admin message and log is created. -// I do not recommend having this uncommented on main server, it probably causes a bit more lag, espicially with larger EMPs. - -// #define EMPDEBUG 10 - -/proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0) - if(!epicenter) return - - if(!istype(epicenter, /turf)) - epicenter = get_turf(epicenter.loc) - - if(log) - message_admins("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ") - log_game("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ") - - if(first_range > 1) - var/obj/effect/overlay/pulse = new /obj/effect/overlay(epicenter) - pulse.icon = 'icons/effects/effects.dmi' - pulse.icon_state = "emppulse" - pulse.name = "emp pulse" - pulse.anchored = TRUE - spawn(20) - qdel(pulse) - - if(first_range > second_range) - second_range = first_range - if(second_range > third_range) - third_range = second_range - if(third_range > fourth_range) - fourth_range = third_range - - for(var/mob/M in range(first_range, epicenter)) - M << 'sound/effects/EMPulse.ogg' - - for(var/atom/T in range(fourth_range, epicenter)) - #ifdef EMPDEBUG - var/time = world.timeofday - #endif - var/distance = get_dist(epicenter, T) - if(distance < 0) - distance = 0 - //Worst effects, really hurts - if(distance < first_range) - T.emp_act(1) - else if(distance == first_range) - if(prob(50)) - T.emp_act(1) - else - T.emp_act(2) - //Slightly less painful - else if(distance <= second_range) - T.emp_act(2) - else if(distance == second_range) - if(prob(50)) - T.emp_act(2) - else - T.emp_act(3) - //Even less slightly less painful - else if(distance <= third_range) - T.emp_act(3) - else if(distance == third_range) - if(prob(50)) - T.emp_act(2) - else - T.emp_act(3) - //This should be more or less harmless - else if(distance <= fourth_range) - T.emp_act(4) - #ifdef EMPDEBUG - if((world.timeofday - time) >= EMPDEBUG) - log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!") - #endif +// Uncomment this define to check for possible lengthy processing of emp_act()s. +// If emp_act() takes more than defined deciseconds (1/10 seconds) an admin message and log is created. +// I do not recommend having this uncommented on main server, it probably causes a bit more lag, espicially with larger EMPs. + +// #define EMPDEBUG 10 + +/proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0) + if(!epicenter) return + + if(!istype(epicenter, /turf)) + epicenter = get_turf(epicenter.loc) + + if(log) + message_admins("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ") + log_game("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ") + + if(first_range > 1) + var/obj/effect/overlay/pulse = new /obj/effect/overlay(epicenter) + pulse.icon = 'icons/effects/effects.dmi' + pulse.icon_state = "emppulse" + pulse.name = "emp pulse" + pulse.anchored = TRUE + spawn(20) + qdel(pulse) + + if(first_range > second_range) + second_range = first_range + if(second_range > third_range) + third_range = second_range + if(third_range > fourth_range) + fourth_range = third_range + + for(var/mob/M in range(first_range, epicenter)) + M << 'sound/effects/EMPulse.ogg' + + for(var/atom/T in range(fourth_range, epicenter)) + #ifdef EMPDEBUG + var/time = world.timeofday + #endif + var/distance = get_dist(epicenter, T) + if(distance < 0) + distance = 0 + //Worst effects, really hurts + if(distance < first_range) + T.emp_act(1) + else if(distance == first_range) + if(prob(50)) + T.emp_act(1) + else + T.emp_act(2) + //Slightly less painful + else if(distance <= second_range) + T.emp_act(2) + else if(distance == second_range) + if(prob(50)) + T.emp_act(2) + else + T.emp_act(3) + //Even less slightly less painful + else if(distance <= third_range) + T.emp_act(3) + else if(distance == third_range) + if(prob(50)) + T.emp_act(2) + else + T.emp_act(3) + //This should be more or less harmless + else if(distance <= fourth_range) + T.emp_act(4) + #ifdef EMPDEBUG + if((world.timeofday - time) >= EMPDEBUG) + log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!") + #endif return 1 \ No newline at end of file diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index e6f05306f8..13f835297c 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,120 +1,120 @@ -//TODO: Flash range does nothing currently - -/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, shaped) - var/multi_z_scalar = config.multi_z_explosion_scalar - spawn(0) - var/start = world.timeofday - epicenter = get_turf(epicenter) - if(!epicenter) return - - // Handles recursive propagation of explosions. - if(z_transfer && multi_z_scalar) - var/adj_dev = max(0, (multi_z_scalar * devastation_range) - (shaped ? 2 : 0) ) - var/adj_heavy = max(0, (multi_z_scalar * heavy_impact_range) - (shaped ? 2 : 0) ) - var/adj_light = max(0, (multi_z_scalar * light_impact_range) - (shaped ? 2 : 0) ) - var/adj_flash = max(0, (multi_z_scalar * flash_range) - (shaped ? 2 : 0) ) - - - if(adj_dev > 0 || adj_heavy > 0) - if(HasAbove(epicenter.z) && z_transfer & UP) - explosion(GetAbove(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, UP, shaped) - if(HasBelow(epicenter.z) && z_transfer & DOWN) - explosion(GetBelow(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, DOWN, shaped) - - var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range) - - // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. - // Stereo users will also hear the direction of the explosion! - // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions. - // 3/7/14 will calculate to 80 + 35 - var/far_dist = 0 - far_dist += heavy_impact_range * 5 - far_dist += devastation_range * 20 - var/frequency = get_rand_frequency() - for(var/mob/M in player_list) - if(M.z == epicenter.z) - var/turf/M_turf = get_turf(M) - var/dist = get_dist(M_turf, epicenter) - // If inside the blast radius + world.view - 2 - if(dist <= round(max_range + world.view - 2, 1)) - M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound - var/mob/living/mL = M // CHOMPStation Edit: Ear Ringing/Deaf - if(isliving(mL)) // CHOMPStation Edit: Fix - mL.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness - else if(dist <= far_dist) - var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist - far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion - M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) - - var/close = range(world.view+round(devastation_range,1), epicenter) - // to all distanced mobs play a different sound - for(var/mob/M in player_list) - if(M.z == epicenter.z) - if(!(M in close)) - // check if the mob can hear - if(M.ear_deaf <= 0 || !M.ear_deaf) - if(!istype(M.loc,/turf/space)) - M << 'sound/effects/explosionfar.ogg' - - if(adminlog) - message_admins("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)") - log_game("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") - - var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range - var/powernet_rebuild_was_deferred_already = defer_powernet_rebuild - // Large enough explosion. For performance reasons, powernets will be rebuilt manually - if(!defer_powernet_rebuild && (approximate_intensity > 25)) - defer_powernet_rebuild = 1 - - if(heavy_impact_range > 1) - var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() - E.set_up(epicenter) - E.start() - - var/x0 = epicenter.x - var/y0 = epicenter.y - var/z0 = epicenter.z - if(config.use_recursive_explosions) - var/power = devastation_range * 2 + heavy_impact_range + light_impact_range //The ranges add up, ie light 14 includes both heavy 7 and devestation 3. So this calculation means devestation counts for 4, heavy for 2 and light for 1 power, giving us a cap of 27 power. - explosion_rec(epicenter, power, shaped) - else - for(var/turf/T in trange(max_range, epicenter)) - var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2) - - if(dist < devastation_range) - dist = 1 - else if(dist < heavy_impact_range) - dist = 2 - else if(dist < light_impact_range) - dist = 3 - else - continue - - if(!T) - T = locate(x0,y0,z0) - for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway - var/atom/movable/AM = atom_movable - if(AM && AM.simulated) - AM.ex_act(dist) - - T.ex_act(dist) - - var/took = (world.timeofday-start)/10 - //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare - if(Debug2) to_world_log("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.") - - //Machines which report explosions. - for(var/i,i<=doppler_arrays.len,i++) - var/obj/machinery/doppler_array/Array = doppler_arrays[i] - if(Array) - Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took) - sleep(8) - - if(!powernet_rebuild_was_deferred_already && defer_powernet_rebuild) - SSmachines.makepowernets() - defer_powernet_rebuild = 0 - return 1 - -/proc/secondaryexplosion(turf/epicenter, range) - for(var/turf/tile in range(range, epicenter)) - tile.ex_act(2) +//TODO: Flash range does nothing currently + +/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, shaped) + var/multi_z_scalar = config.multi_z_explosion_scalar + spawn(0) + var/start = world.timeofday + epicenter = get_turf(epicenter) + if(!epicenter) return + + // Handles recursive propagation of explosions. + if(z_transfer && multi_z_scalar) + var/adj_dev = max(0, (multi_z_scalar * devastation_range) - (shaped ? 2 : 0) ) + var/adj_heavy = max(0, (multi_z_scalar * heavy_impact_range) - (shaped ? 2 : 0) ) + var/adj_light = max(0, (multi_z_scalar * light_impact_range) - (shaped ? 2 : 0) ) + var/adj_flash = max(0, (multi_z_scalar * flash_range) - (shaped ? 2 : 0) ) + + + if(adj_dev > 0 || adj_heavy > 0) + if(HasAbove(epicenter.z) && z_transfer & UP) + explosion(GetAbove(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, UP, shaped) + if(HasBelow(epicenter.z) && z_transfer & DOWN) + explosion(GetBelow(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, DOWN, shaped) + + var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range) + + // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. + // Stereo users will also hear the direction of the explosion! + // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions. + // 3/7/14 will calculate to 80 + 35 + var/far_dist = 0 + far_dist += heavy_impact_range * 5 + far_dist += devastation_range * 20 + var/frequency = get_rand_frequency() + for(var/mob/M in player_list) + if(M.z == epicenter.z) + var/turf/M_turf = get_turf(M) + var/dist = get_dist(M_turf, epicenter) + // If inside the blast radius + world.view - 2 + if(dist <= round(max_range + world.view - 2, 1)) + M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound + var/mob/living/mL = M // CHOMPStation Edit: Ear Ringing/Deaf + if(isliving(mL)) // CHOMPStation Edit: Fix + mL.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness + else if(dist <= far_dist) + var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist + far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion + M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) + + var/close = range(world.view+round(devastation_range,1), epicenter) + // to all distanced mobs play a different sound + for(var/mob/M in player_list) + if(M.z == epicenter.z) + if(!(M in close)) + // check if the mob can hear + if(M.ear_deaf <= 0 || !M.ear_deaf) + if(!istype(M.loc,/turf/space)) + M << 'sound/effects/explosionfar.ogg' + + if(adminlog) + message_admins("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)") + log_game("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") + + var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range + var/powernet_rebuild_was_deferred_already = defer_powernet_rebuild + // Large enough explosion. For performance reasons, powernets will be rebuilt manually + if(!defer_powernet_rebuild && (approximate_intensity > 25)) + defer_powernet_rebuild = 1 + + if(heavy_impact_range > 1) + var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() + E.set_up(epicenter) + E.start() + + var/x0 = epicenter.x + var/y0 = epicenter.y + var/z0 = epicenter.z + if(config.use_recursive_explosions) + var/power = devastation_range * 2 + heavy_impact_range + light_impact_range //The ranges add up, ie light 14 includes both heavy 7 and devestation 3. So this calculation means devestation counts for 4, heavy for 2 and light for 1 power, giving us a cap of 27 power. + explosion_rec(epicenter, power, shaped) + else + for(var/turf/T in trange(max_range, epicenter)) + var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2) + + if(dist < devastation_range) + dist = 1 + else if(dist < heavy_impact_range) + dist = 2 + else if(dist < light_impact_range) + dist = 3 + else + continue + + if(!T) + T = locate(x0,y0,z0) + for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway + var/atom/movable/AM = atom_movable + if(AM && AM.simulated) + AM.ex_act(dist) + + T.ex_act(dist) + + var/took = (world.timeofday-start)/10 + //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare + if(Debug2) to_world_log("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.") + + //Machines which report explosions. + for(var/i,i<=doppler_arrays.len,i++) + var/obj/machinery/doppler_array/Array = doppler_arrays[i] + if(Array) + Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took) + sleep(8) + + if(!powernet_rebuild_was_deferred_already && defer_powernet_rebuild) + SSmachines.makepowernets() + defer_powernet_rebuild = 0 + return 1 + +/proc/secondaryexplosion(turf/epicenter, range) + for(var/turf/tile in range(range, epicenter)) + tile.ex_act(2) diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index d60dc90f3e..aebf6ba8e8 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -1,114 +1,114 @@ -/client/proc/kaboom() - var/power = tgui_input_number(src, "power?", "power?") - var/turf/T = get_turf(src.mob) - explosion_rec(T, power) - -/obj - var/explosion_resistance - -/proc/explosion_rec(turf/epicenter, power) - var/list/explosion_turfs = list() - var/explosion_in_progress = 0 - - var/loopbreak = 0 - while(explosion_in_progress) - if(loopbreak >= 15) return - spawn(10) - loopbreak++ - - if(power <= 0) return - epicenter = get_turf(epicenter) - if(!epicenter) return - - message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") - log_game("Explosion with size ([power]) in area [epicenter.loc.name] ") - - playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power*2,1) ) - playsound(epicenter, "explosion", 100, 1, round(power,1) ) - - explosion_in_progress = 1 - explosion_turfs = list() - - explosion_turfs[epicenter] = power - - //This steap handles the gathering of turfs which will be ex_act() -ed in the next step. It also ensures each turf gets the maximum possible amount of power dealt to it. - for(var/direction in cardinal) - var/turf/T = get_step(epicenter, direction) - T.explosion_spread(power - epicenter.explosion_resistance, direction, explosion_turfs) - - //This step applies the ex_act effects for the explosion, as planned in the previous step. - for(var/turf/T in explosion_turfs) - if(explosion_turfs[T] <= 0) continue - if(!T) continue - - //Wow severity looks confusing to calculate... Fret not, I didn't leave you with any additional instructions or help. (just kidding, see the line under the calculation) - var/severity = 4 - round(max(min( 3, ((explosion_turfs[T] - T.explosion_resistance) / (max(3,(power/3)))) ) ,1), 1) //sanity effective power on tile divided by either 3 or one third the total explosion power - // One third because there are three power levels and I - // want each one to take up a third of the crater - var/x = T.x - var/y = T.y - var/z = T.z - T.ex_act(severity) - if(!T) - T = locate(x,y,z) - for(var/atom_movable in T.contents) - var/atom/movable/AM = atom_movable - if(AM && AM.simulated) - AM.ex_act(severity) - - explosion_in_progress = 0 - -/turf - var/explosion_resistance - -/turf/space - explosion_resistance = 3 - -/turf/simulated/open - explosion_resistance = 3 - -/turf/simulated/floor - explosion_resistance = 1 - -/turf/simulated/mineral - explosion_resistance = 2 - -/turf/simulated/shuttle/floor - explosion_resistance = 1 - -/turf/simulated/shuttle/floor4 - explosion_resistance = 1 - -/turf/simulated/shuttle/plating - explosion_resistance = 1 - -/turf/simulated/shuttle/wall - explosion_resistance = 10 - -/turf/simulated/wall - explosion_resistance = 10 - -//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station. -//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force. -/turf/proc/explosion_spread(power, direction, var/list/explosion_turfs) - if(power <= 0) - return - if(src in explosion_turfs) - if(explosion_turfs[src] >= power) - return //The turf already sustained and spread a power greated than what we are dealing with. No point spreading again. - explosion_turfs[src] = power - - var/spread_power = power - src.explosion_resistance //This is the amount of power that will be spread to the tile in the direction of the blast - for(var/obj/O in src) - if(O.explosion_resistance) - spread_power -= O.explosion_resistance - - var/turf/T = get_step(src, direction) - T.explosion_spread(spread_power, direction, explosion_turfs) - T = get_step(src, turn(direction,90)) - T.explosion_spread(spread_power, turn(direction,90), explosion_turfs) - T = get_step(src, turn(direction,-90)) - T.explosion_spread(spread_power, turn(direction,-90), explosion_turfs) - -/turf/unsimulated/explosion_spread(power) - return //So it doesn't get to the parent proc, which simulates explosions +/client/proc/kaboom() + var/power = tgui_input_number(src, "power?", "power?") + var/turf/T = get_turf(src.mob) + explosion_rec(T, power) + +/obj + var/explosion_resistance + +/proc/explosion_rec(turf/epicenter, power) + var/list/explosion_turfs = list() + var/explosion_in_progress = 0 + + var/loopbreak = 0 + while(explosion_in_progress) + if(loopbreak >= 15) return + spawn(10) + loopbreak++ + + if(power <= 0) return + epicenter = get_turf(epicenter) + if(!epicenter) return + + message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") + log_game("Explosion with size ([power]) in area [epicenter.loc.name] ") + + playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power*2,1) ) + playsound(epicenter, "explosion", 100, 1, round(power,1) ) + + explosion_in_progress = 1 + explosion_turfs = list() + + explosion_turfs[epicenter] = power + + //This steap handles the gathering of turfs which will be ex_act() -ed in the next step. It also ensures each turf gets the maximum possible amount of power dealt to it. + for(var/direction in cardinal) + var/turf/T = get_step(epicenter, direction) + T.explosion_spread(power - epicenter.explosion_resistance, direction, explosion_turfs) + + //This step applies the ex_act effects for the explosion, as planned in the previous step. + for(var/turf/T in explosion_turfs) + if(explosion_turfs[T] <= 0) continue + if(!T) continue + + //Wow severity looks confusing to calculate... Fret not, I didn't leave you with any additional instructions or help. (just kidding, see the line under the calculation) + var/severity = 4 - round(max(min( 3, ((explosion_turfs[T] - T.explosion_resistance) / (max(3,(power/3)))) ) ,1), 1) //sanity effective power on tile divided by either 3 or one third the total explosion power + // One third because there are three power levels and I + // want each one to take up a third of the crater + var/x = T.x + var/y = T.y + var/z = T.z + T.ex_act(severity) + if(!T) + T = locate(x,y,z) + for(var/atom_movable in T.contents) + var/atom/movable/AM = atom_movable + if(AM && AM.simulated) + AM.ex_act(severity) + + explosion_in_progress = 0 + +/turf + var/explosion_resistance + +/turf/space + explosion_resistance = 3 + +/turf/simulated/open + explosion_resistance = 3 + +/turf/simulated/floor + explosion_resistance = 1 + +/turf/simulated/mineral + explosion_resistance = 2 + +/turf/simulated/shuttle/floor + explosion_resistance = 1 + +/turf/simulated/shuttle/floor4 + explosion_resistance = 1 + +/turf/simulated/shuttle/plating + explosion_resistance = 1 + +/turf/simulated/shuttle/wall + explosion_resistance = 10 + +/turf/simulated/wall + explosion_resistance = 10 + +//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station. +//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force. +/turf/proc/explosion_spread(power, direction, var/list/explosion_turfs) + if(power <= 0) + return + if(src in explosion_turfs) + if(explosion_turfs[src] >= power) + return //The turf already sustained and spread a power greated than what we are dealing with. No point spreading again. + explosion_turfs[src] = power + + var/spread_power = power - src.explosion_resistance //This is the amount of power that will be spread to the tile in the direction of the blast + for(var/obj/O in src) + if(O.explosion_resistance) + spread_power -= O.explosion_resistance + + var/turf/T = get_step(src, direction) + T.explosion_spread(spread_power, direction, explosion_turfs) + T = get_step(src, turn(direction,90)) + T.explosion_spread(spread_power, turn(direction,90), explosion_turfs) + T = get_step(src, turn(direction,-90)) + T.explosion_spread(spread_power, turn(direction,-90), explosion_turfs) + +/turf/unsimulated/explosion_spread(power) + return //So it doesn't get to the parent proc, which simulates explosions diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index ca3f7241c3..c84e011966 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -1,38 +1,38 @@ -// APC HULL - -/obj/item/frame/apc - name = "\improper APC frame" - desc = "Used for repairing or building APCs" - icon = 'icons/obj/apc_repair.dmi' - icon_state = "apc_frame" - refund_amt = 2 - build_wall_only = TRUE - matter = list(MAT_STEEL = 100, MAT_GLASS = 30) - -/obj/item/frame/apc/try_build(turf/on_wall, mob/user as mob) - if (get_dist(on_wall, user)>1) - return - var/ndir = get_dir(user, on_wall) - if (!(ndir in cardinal)) - return - var/turf/loc = get_turf(user) - var/area/A = loc.loc - if (!istype(loc, /turf/simulated/floor)) - to_chat(user, "APC cannot be placed on this spot.") - return - if (A.requires_power == 0 || istype(A, /area/space)) - to_chat(user, "APC cannot be placed in this area.") - return - if (A.get_apc()) - to_chat(user, "This area already has an APC.") - return //only one APC per area - for(var/obj/machinery/power/terminal/T in loc) - if (T.master) - to_chat(user, "There is another network terminal here.") - return - else - new /obj/item/stack/cable_coil(loc, 10) - to_chat(user, "You cut the cables and disassemble the unused power terminal.") - qdel(T) - new /obj/machinery/power/apc(loc, ndir, 1) - qdel(src) +// APC HULL + +/obj/item/frame/apc + name = "\improper APC frame" + desc = "Used for repairing or building APCs" + icon = 'icons/obj/apc_repair.dmi' + icon_state = "apc_frame" + refund_amt = 2 + build_wall_only = TRUE + matter = list(MAT_STEEL = 100, MAT_GLASS = 30) + +/obj/item/frame/apc/try_build(turf/on_wall, mob/user as mob) + if (get_dist(on_wall, user)>1) + return + var/ndir = get_dir(user, on_wall) + if (!(ndir in cardinal)) + return + var/turf/loc = get_turf(user) + var/area/A = loc.loc + if (!istype(loc, /turf/simulated/floor)) + to_chat(user, "APC cannot be placed on this spot.") + return + if (A.requires_power == 0 || istype(A, /area/space)) + to_chat(user, "APC cannot be placed in this area.") + return + if (A.get_apc()) + to_chat(user, "This area already has an APC.") + return //only one APC per area + for(var/obj/machinery/power/terminal/T in loc) + if (T.master) + to_chat(user, "There is another network terminal here.") + return + else + new /obj/item/stack/cable_coil(loc, 10) + to_chat(user, "You cut the cables and disassemble the unused power terminal.") + qdel(T) + new /obj/machinery/power/apc(loc, ndir, 1) + qdel(src) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index f82d0f2448..d15f9536d0 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -1,283 +1,283 @@ -//Also contains /obj/structure/closet/body_bag because I doubt anyone would think to look for bodybags in /object/structures - -/obj/item/bodybag - name = "body bag" - desc = "A folded bag designed for the storage and transportation of cadavers." - icon = 'icons/obj/closets/bodybag.dmi' - icon_state = "bodybag_folded" - w_class = ITEMSIZE_SMALL - -/obj/item/bodybag/attack_self(mob/user) - var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc) - R.add_fingerprint(user) - qdel(src) - - -/obj/item/weapon/storage/box/bodybags - name = "body bags" - desc = "This box contains body bags." - icon_state = "bodybags" - starts_with = list(/obj/item/bodybag = 7) - -/obj/structure/closet/body_bag - name = "body bag" - desc = "A plastic bag designed for the storage and transportation of cadavers." - icon = 'icons/obj/closets/bodybag.dmi' - closet_appearance = null - open_sound = 'sound/items/zip.ogg' - close_sound = 'sound/items/zip.ogg' - var/item_path = /obj/item/bodybag - density = FALSE - storage_capacity = (MOB_MEDIUM * 2) - 1 - var/contains_body = 0 - -//Yawn add -/obj/item/bodybag/large - name = "mass grave body bag" - desc = "A large folded bag designed for the storage and transportation of cadavers." - icon = 'icons/obj/closets/bodybag_large.dmi' - w_class = ITEMSIZE_LARGE - -/obj/item/bodybag/large/attack_self(mob/user) - var/obj/structure/closet/body_bag/large/R = new /obj/structure/closet/body_bag/large(user.loc) - R.add_fingerprint(user) - qdel(src) - -/obj/structure/closet/body_bag/large - name = "mass grave body bag" - desc = "A massive body bag that holds as much as it does due to bluespace lining on its zipper. Shockingly compact for its storage." - icon = 'icons/obj/closets/bodybag_large.dmi' - storage_capacity = (MOB_MEDIUM * 12) - 1 //Holds 12 bodys - item_path = /obj/item/bodybag/large -//End of Yawn add - -/obj/structure/closet/body_bag/attackby(var/obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN ) - if (user.get_active_hand() != W) - return - if (!in_range(src, user) && src.loc != user) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.name = "body bag - " - src.name += t - add_overlay("bodybag_label") - else - src.name = "body bag" - //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri - return - else if(W.has_tool_quality(TOOL_WIRECUTTER)) - to_chat(user, "You cut the tag off the bodybag") - src.name = "body bag" - cut_overlays() - return - -/obj/structure/closet/body_bag/store_mobs(var/stored_units) - contains_body = ..() - return contains_body - -/obj/structure/closet/body_bag/close() - if(..()) - density = FALSE - return 1 - return 0 - -/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) - ..() - if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) - if(!ishuman(usr)) return 0 - if(opened) return 0 - if(contents.len) return 0 - visible_message("[usr] folds up the [src.name]") - var/folded = new item_path(get_turf(src)) - spawn(0) - qdel(src) - return folded - -/obj/structure/closet/body_bag/relaymove(mob/user,direction) - if(src.loc != get_turf(src)) - src.loc.relaymove(user,direction) - else - ..() - -/obj/structure/closet/body_bag/proc/get_occupants() - var/list/occupants = list() - for(var/mob/living/carbon/human/H in contents) - occupants += H - return occupants - -/obj/structure/closet/body_bag/proc/update(var/broadcast=0) - if(istype(loc, /obj/structure/morgue)) - var/obj/structure/morgue/M = loc - M.update(broadcast) - -/obj/structure/closet/body_bag/update_icon() - if(opened) - icon_state = "open" - else - icon_state = "closed_unlocked" - - cut_overlays() - /* Ours don't have toetags - if(has_label) - add_overlay("bodybag_label") - */ - - -/obj/item/bodybag/cryobag - name = "stasis bag" - desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \ - especially useful if short on time or in a hostile environment." // CHOMPEDIT : purdev (spelling fix) - icon = 'icons/obj/closets/cryobag.dmi' - icon_state = "bodybag_folded" - item_state = "bodybag_cryo_folded" - origin_tech = list(TECH_BIO = 4) - var/obj/item/weapon/reagent_containers/syringe/syringe - -/obj/item/bodybag/cryobag/attack_self(mob/user) - var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc) - R.add_fingerprint(user) - if(syringe) - R.syringe = syringe - syringe = null - qdel(src) - -/obj/structure/closet/body_bag/cryobag - name = "stasis bag" - desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \ - especially useful if short on time or in a hostile enviroment." - icon = 'icons/obj/closets/cryobag.dmi' - item_path = /obj/item/bodybag/cryobag - store_misc = 0 - store_items = 0 - var/used = 0 - var/obj/item/weapon/tank/tank = null - var/tank_type = /obj/item/weapon/tank/stasis/oxygen - var/stasis_level = 3 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1) - var/obj/item/weapon/reagent_containers/syringe/syringe - -/obj/structure/closet/body_bag/cryobag/Initialize() - tank = new tank_type(null) //It's in nullspace to prevent ejection when the bag is opened. - ..() - -/obj/structure/closet/body_bag/cryobag/Destroy() - QDEL_NULL(syringe) - QDEL_NULL(tank) - return ..() - -/obj/structure/closet/body_bag/cryobag/attack_hand(mob/living/user) - if(used) - var/confirm = tgui_alert(user, "Are you sure you want to open \the [src]? \The [src] will expire upon opening it.", "Confirm Opening", list("No", "Yes")) - if(confirm == "Yes") - ..() // Will call `toggle()` and open the bag. - else - ..() - -/obj/structure/closet/body_bag/cryobag/open() - . = ..() - if(used) - new /obj/item/usedcryobag(loc) - qdel(src) - -/obj/structure/closet/body_bag/cryobag/update_icon() - ..() - cut_overlays() - var/image/I = image(icon, "indicator[opened]") - I.appearance_flags = RESET_COLOR - I.color = COLOR_LIME - add_overlay(I) - -/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location) - . = ..() - if(. && syringe) - var/obj/item/bodybag/cryobag/folded = . - folded.syringe = syringe - syringe = null - -/obj/structure/closet/body_bag/cryobag/Entered(atom/movable/AM) - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - H.Stasis(stasis_level) - src.used = 1 - inject_occupant(H) - - if(istype(AM, /obj/item/organ)) - var/obj/item/organ/O = AM - O.preserved = 1 - for(var/obj/item/organ/organ in O) - organ.preserved = 1 - ..() - -/obj/structure/closet/body_bag/cryobag/Exited(atom/movable/AM) - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - H.Stasis(0) - - if(istype(AM, /obj/item/organ)) - var/obj/item/organ/O = AM - O.preserved = 0 - for(var/obj/item/organ/organ in O) - organ.preserved = 0 - ..() - -/obj/structure/closet/body_bag/cryobag/return_air() //Used to make stasis bags protect from vacuum. - if(tank) - return tank.air_contents - ..() - -/obj/structure/closet/body_bag/cryobag/proc/inject_occupant(var/mob/living/carbon/human/H) - if(!syringe) - return - - if(H.reagents) - syringe.reagents.trans_to_mob(H, 30, CHEM_BLOOD) - -/obj/structure/closet/body_bag/cryobag/examine(mob/user) - . = ..() - if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - . += "You peer into \the [src]." - if(syringe) - . += "It has a syringe added to it." - for(var/mob/living/L in contents) - . += L.examine(user) - -/obj/structure/closet/body_bag/cryobag/attackby(obj/item/W, mob/user) - if(opened) - ..() - else //Allows the bag to respond to a health analyzer by analyzing the mob inside without needing to open it. - if(istype(W,/obj/item/device/healthanalyzer)) - var/obj/item/device/healthanalyzer/analyzer = W - for(var/mob/living/L in contents) - analyzer.attack(L,user) - - else if(istype(W,/obj/item/weapon/reagent_containers/syringe)) - if(syringe) - to_chat(user,"\The [src] already has an injector! Remove it first.") - else - var/obj/item/weapon/reagent_containers/syringe/syringe = W - to_chat(user,"You insert \the [syringe] into \the [src], and it locks into place.") - user.unEquip(syringe) - src.syringe = syringe - syringe.loc = null - for(var/mob/living/carbon/human/H in contents) - inject_occupant(H) - break - - else if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(syringe) - if(used) - to_chat(user,"The injector cannot be removed now that the stasis bag has been used!") - else - syringe.forceMove(src.loc) - to_chat(user,"You pry \the [syringe] out of \the [src].") - syringe = null - - else - ..() - -/obj/item/usedcryobag - name = "used stasis bag" - desc = "Pretty useless now.." - icon_state = "bodybag_used" - icon = 'icons/obj/closets/cryobag.dmi' +//Also contains /obj/structure/closet/body_bag because I doubt anyone would think to look for bodybags in /object/structures + +/obj/item/bodybag + name = "body bag" + desc = "A folded bag designed for the storage and transportation of cadavers." + icon = 'icons/obj/closets/bodybag.dmi' + icon_state = "bodybag_folded" + w_class = ITEMSIZE_SMALL + +/obj/item/bodybag/attack_self(mob/user) + var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc) + R.add_fingerprint(user) + qdel(src) + + +/obj/item/weapon/storage/box/bodybags + name = "body bags" + desc = "This box contains body bags." + icon_state = "bodybags" + starts_with = list(/obj/item/bodybag = 7) + +/obj/structure/closet/body_bag + name = "body bag" + desc = "A plastic bag designed for the storage and transportation of cadavers." + icon = 'icons/obj/closets/bodybag.dmi' + closet_appearance = null + open_sound = 'sound/items/zip.ogg' + close_sound = 'sound/items/zip.ogg' + var/item_path = /obj/item/bodybag + density = FALSE + storage_capacity = (MOB_MEDIUM * 2) - 1 + var/contains_body = 0 + +//Yawn add +/obj/item/bodybag/large + name = "mass grave body bag" + desc = "A large folded bag designed for the storage and transportation of cadavers." + icon = 'icons/obj/closets/bodybag_large.dmi' + w_class = ITEMSIZE_LARGE + +/obj/item/bodybag/large/attack_self(mob/user) + var/obj/structure/closet/body_bag/large/R = new /obj/structure/closet/body_bag/large(user.loc) + R.add_fingerprint(user) + qdel(src) + +/obj/structure/closet/body_bag/large + name = "mass grave body bag" + desc = "A massive body bag that holds as much as it does due to bluespace lining on its zipper. Shockingly compact for its storage." + icon = 'icons/obj/closets/bodybag_large.dmi' + storage_capacity = (MOB_MEDIUM * 12) - 1 //Holds 12 bodys + item_path = /obj/item/bodybag/large +//End of Yawn add + +/obj/structure/closet/body_bag/attackby(var/obj/item/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/pen)) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN ) + if (user.get_active_hand() != W) + return + if (!in_range(src, user) && src.loc != user) + return + t = sanitizeSafe(t, MAX_NAME_LEN) + if (t) + src.name = "body bag - " + src.name += t + add_overlay("bodybag_label") + else + src.name = "body bag" + //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri + return + else if(W.has_tool_quality(TOOL_WIRECUTTER)) + to_chat(user, "You cut the tag off the bodybag") + src.name = "body bag" + cut_overlays() + return + +/obj/structure/closet/body_bag/store_mobs(var/stored_units) + contains_body = ..() + return contains_body + +/obj/structure/closet/body_bag/close() + if(..()) + density = FALSE + return 1 + return 0 + +/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) + ..() + if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) + if(!ishuman(usr)) return 0 + if(opened) return 0 + if(contents.len) return 0 + visible_message("[usr] folds up the [src.name]") + var/folded = new item_path(get_turf(src)) + spawn(0) + qdel(src) + return folded + +/obj/structure/closet/body_bag/relaymove(mob/user,direction) + if(src.loc != get_turf(src)) + src.loc.relaymove(user,direction) + else + ..() + +/obj/structure/closet/body_bag/proc/get_occupants() + var/list/occupants = list() + for(var/mob/living/carbon/human/H in contents) + occupants += H + return occupants + +/obj/structure/closet/body_bag/proc/update(var/broadcast=0) + if(istype(loc, /obj/structure/morgue)) + var/obj/structure/morgue/M = loc + M.update(broadcast) + +/obj/structure/closet/body_bag/update_icon() + if(opened) + icon_state = "open" + else + icon_state = "closed_unlocked" + + cut_overlays() + /* Ours don't have toetags + if(has_label) + add_overlay("bodybag_label") + */ + + +/obj/item/bodybag/cryobag + name = "stasis bag" + desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \ + especially useful if short on time or in a hostile environment." // CHOMPEDIT : purdev (spelling fix) + icon = 'icons/obj/closets/cryobag.dmi' + icon_state = "bodybag_folded" + item_state = "bodybag_cryo_folded" + origin_tech = list(TECH_BIO = 4) + var/obj/item/weapon/reagent_containers/syringe/syringe + +/obj/item/bodybag/cryobag/attack_self(mob/user) + var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc) + R.add_fingerprint(user) + if(syringe) + R.syringe = syringe + syringe = null + qdel(src) + +/obj/structure/closet/body_bag/cryobag + name = "stasis bag" + desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \ + especially useful if short on time or in a hostile enviroment." + icon = 'icons/obj/closets/cryobag.dmi' + item_path = /obj/item/bodybag/cryobag + store_misc = 0 + store_items = 0 + var/used = 0 + var/obj/item/weapon/tank/tank = null + var/tank_type = /obj/item/weapon/tank/stasis/oxygen + var/stasis_level = 3 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1) + var/obj/item/weapon/reagent_containers/syringe/syringe + +/obj/structure/closet/body_bag/cryobag/Initialize() + tank = new tank_type(null) //It's in nullspace to prevent ejection when the bag is opened. + ..() + +/obj/structure/closet/body_bag/cryobag/Destroy() + QDEL_NULL(syringe) + QDEL_NULL(tank) + return ..() + +/obj/structure/closet/body_bag/cryobag/attack_hand(mob/living/user) + if(used) + var/confirm = tgui_alert(user, "Are you sure you want to open \the [src]? \The [src] will expire upon opening it.", "Confirm Opening", list("No", "Yes")) + if(confirm == "Yes") + ..() // Will call `toggle()` and open the bag. + else + ..() + +/obj/structure/closet/body_bag/cryobag/open() + . = ..() + if(used) + new /obj/item/usedcryobag(loc) + qdel(src) + +/obj/structure/closet/body_bag/cryobag/update_icon() + ..() + cut_overlays() + var/image/I = image(icon, "indicator[opened]") + I.appearance_flags = RESET_COLOR + I.color = COLOR_LIME + add_overlay(I) + +/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location) + . = ..() + if(. && syringe) + var/obj/item/bodybag/cryobag/folded = . + folded.syringe = syringe + syringe = null + +/obj/structure/closet/body_bag/cryobag/Entered(atom/movable/AM) + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + H.Stasis(stasis_level) + src.used = 1 + inject_occupant(H) + + if(istype(AM, /obj/item/organ)) + var/obj/item/organ/O = AM + O.preserved = 1 + for(var/obj/item/organ/organ in O) + organ.preserved = 1 + ..() + +/obj/structure/closet/body_bag/cryobag/Exited(atom/movable/AM) + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + H.Stasis(0) + + if(istype(AM, /obj/item/organ)) + var/obj/item/organ/O = AM + O.preserved = 0 + for(var/obj/item/organ/organ in O) + organ.preserved = 0 + ..() + +/obj/structure/closet/body_bag/cryobag/return_air() //Used to make stasis bags protect from vacuum. + if(tank) + return tank.air_contents + ..() + +/obj/structure/closet/body_bag/cryobag/proc/inject_occupant(var/mob/living/carbon/human/H) + if(!syringe) + return + + if(H.reagents) + syringe.reagents.trans_to_mob(H, 30, CHEM_BLOOD) + +/obj/structure/closet/body_bag/cryobag/examine(mob/user) + . = ..() + if(Adjacent(user)) //The bag's rather thick and opaque from a distance. + . += "You peer into \the [src]." + if(syringe) + . += "It has a syringe added to it." + for(var/mob/living/L in contents) + . += L.examine(user) + +/obj/structure/closet/body_bag/cryobag/attackby(obj/item/W, mob/user) + if(opened) + ..() + else //Allows the bag to respond to a health analyzer by analyzing the mob inside without needing to open it. + if(istype(W,/obj/item/device/healthanalyzer)) + var/obj/item/device/healthanalyzer/analyzer = W + for(var/mob/living/L in contents) + analyzer.attack(L,user) + + else if(istype(W,/obj/item/weapon/reagent_containers/syringe)) + if(syringe) + to_chat(user,"\The [src] already has an injector! Remove it first.") + else + var/obj/item/weapon/reagent_containers/syringe/syringe = W + to_chat(user,"You insert \the [syringe] into \the [src], and it locks into place.") + user.unEquip(syringe) + src.syringe = syringe + syringe.loc = null + for(var/mob/living/carbon/human/H in contents) + inject_occupant(H) + break + + else if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(syringe) + if(used) + to_chat(user,"The injector cannot be removed now that the stasis bag has been used!") + else + syringe.forceMove(src.loc) + to_chat(user,"You pry \the [syringe] out of \the [src].") + syringe = null + + else + ..() + +/obj/item/usedcryobag + name = "used stasis bag" + desc = "Pretty useless now.." + icon_state = "bodybag_used" + icon = 'icons/obj/closets/cryobag.dmi' diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 8c3a5b0551..280c43db0c 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,214 +1,214 @@ -/obj/item/weapon/pen/crayon/red - icon_state = "crayonred" - colour = "#DA0000" - shadeColour = "#810C0C" - colourName = "red" - -/obj/item/weapon/pen/crayon/orange - icon_state = "crayonorange" - colour = "#FF9300" - shadeColour = "#A55403" - colourName = "orange" - -/obj/item/weapon/pen/crayon/yellow - icon_state = "crayonyellow" - colour = "#FFF200" - shadeColour = "#886422" - colourName = "yellow" - -/obj/item/weapon/pen/crayon/green - icon_state = "crayongreen" - colour = "#A8E61D" - shadeColour = "#61840F" - colourName = "green" - -/obj/item/weapon/pen/crayon/blue - icon_state = "crayonblue" - colour = "#00B7EF" - shadeColour = "#0082A8" - colourName = "blue" - -/obj/item/weapon/pen/crayon/purple - icon_state = "crayonpurple" - colour = "#DA00FF" - shadeColour = "#810CFF" - colourName = "purple" - -/obj/item/weapon/pen/crayon/mime - icon_state = "crayonmime" - desc = "A very sad-looking crayon." - colour = "#FFFFFF" - shadeColour = "#000000" - colourName = "mime" - uses = 0 - -/obj/item/weapon/pen/crayon/mime/attack_self(mob/living/user as mob) //inversion - if(colour != "#FFFFFF" && shadeColour != "#000000") - colour = "#FFFFFF" - shadeColour = "#000000" - to_chat(user, "You will now draw in white and black with this crayon.") - else - colour = "#000000" - shadeColour = "#FFFFFF" - to_chat(user, "You will now draw in black and white with this crayon.") - return - -/obj/item/weapon/pen/crayon/rainbow - icon_state = "crayonrainbow" - colour = "#FFF000" - shadeColour = "#000FFF" - colourName = "rainbow" - uses = 0 - -/obj/item/weapon/pen/crayon/rainbow/attack_self(mob/living/user as mob) - colour = input(user, "Please select the main colour.", "Crayon colour") as color - shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color - return - -/obj/item/weapon/pen/crayon/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return - if(istype(target,/turf/simulated/floor)) - var/drawtype = tgui_input_list(user, "Choose what you'd like to draw.", "Crayon scribbles", list("graffiti","rune","letter","arrow")) - if(!drawtype) - return - if(get_dist(target, user) > 1 || !(user.z == target.z)) - return - switch(drawtype) - if("letter") - drawtype = tgui_input_list(user, "Choose the letter.", "Crayon scribbles", list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")) - if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) - return - to_chat(user, "You start drawing a letter on the [target.name].") - if("graffiti") - drawtype = tgui_input_list(user, "Choose the graffiti.", "Crayon scribbles", list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")) - if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) - return - to_chat(user, "You start drawing graffiti on the [target.name].") - if("rune") - drawtype = tgui_input_list(user, "Choose the rune.", "Crayon scribbles", list("rune1", "rune2", "rune3", "rune4", "rune5", "rune6")) - if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) - return - to_chat(user, "You start drawing a rune on the [target.name].") - if("arrow") - drawtype = tgui_input_list(user, "Choose the arrow.", "Crayon scribbles", list("left", "right", "up", "down")) - if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) - return - to_chat(user, "You start drawing an arrow on the [target.name].") - if(instant || do_after(user, 50)) - new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) - to_chat(user, "You finish drawing.") - - var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]." - if(config.log_graffiti) - message_admins(msg) - log_game(msg) //We will log it anyways. - - target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. - if(uses) - uses-- - if(!uses) - to_chat(user, "You used up your crayon!") - qdel(src) - return - -/obj/item/weapon/pen/crayon/attack(mob/living/M as mob, mob/living/user as mob) - if(M == user) - to_chat(user, "You take a bite of the crayon and swallow it.") - user.nutrition += 1 - user.reagents.add_reagent("crayon_dust",min(5,uses)/3) - if(uses) - uses -= 5 - if(uses <= 0) - to_chat(user, "You ate your crayon!") - qdel(src) - else - ..() - -/obj/item/weapon/pen/crayon/marker/black - icon_state = "markerblack" - colour = "#2D2D2D" - shadeColour = "#000000" - colourName = "black" - -/obj/item/weapon/pen/crayon/marker/red - icon_state = "markerred" - colour = "#DA0000" - shadeColour = "#810C0C" - colourName = "red" - -/obj/item/weapon/pen/crayon/marker/orange - icon_state = "markerorange" - colour = "#FF9300" - shadeColour = "#A55403" - colourName = "orange" - -/obj/item/weapon/pen/crayon/marker/yellow - icon_state = "markeryellow" - colour = "#FFF200" - shadeColour = "#886422" - colourName = "yellow" - -/obj/item/weapon/pen/crayon/marker/green - icon_state = "markergreen" - colour = "#A8E61D" - shadeColour = "#61840F" - colourName = "green" - -/obj/item/weapon/pen/crayon/marker/blue - icon_state = "markerblue" - colour = "#00B7EF" - shadeColour = "#0082A8" - colourName = "blue" - -/obj/item/weapon/pen/crayon/marker/purple - icon_state = "markerpurple" - colour = "#DA00FF" - shadeColour = "#810CFF" - colourName = "purple" - -/obj/item/weapon/pen/crayon/marker/mime - icon_state = "markermime" - desc = "A very sad-looking marker." - colour = "#FFFFFF" - shadeColour = "#000000" - colourName = "mime" - uses = 0 - -/obj/item/weapon/pen/crayon/marker/mime/attack_self(mob/living/user as mob) //inversion - if(colour != "#FFFFFF" && shadeColour != "#000000") - colour = "#FFFFFF" - shadeColour = "#000000" - to_chat(user, "You will now draw in white and black with this marker.") - else - colour = "#000000" - shadeColour = "#FFFFFF" - to_chat(user, "You will now draw in black and white with this marker.") - return - -/obj/item/weapon/pen/crayon/marker/rainbow - icon_state = "markerrainbow" - colour = "#FFF000" - shadeColour = "#000FFF" - colourName = "rainbow" - uses = 0 - -/obj/item/weapon/pen/crayon/marker/rainbow/attack_self(mob/living/user as mob) - colour = input(user, "Please select the main colour.", "Marker colour") as color - shadeColour = input(user, "Please select the shade colour.", "Marker colour") as color - return - -/obj/item/weapon/pen/crayon/marker/attack(mob/living/M as mob, mob/living/user as mob) - if(M == user) - to_chat(user, "You take a bite of the marker and swallow it.") - user.nutrition += 1 - user.reagents.add_reagent("marker_ink",6) - if(uses) - uses -= 5 - if(uses <= 0) - to_chat(user, "You ate the marker!") - qdel(src) - else - ..() - -/obj/item/weapon/pen/crayon/attack_self(var/mob/user) - return +/obj/item/weapon/pen/crayon/red + icon_state = "crayonred" + colour = "#DA0000" + shadeColour = "#810C0C" + colourName = "red" + +/obj/item/weapon/pen/crayon/orange + icon_state = "crayonorange" + colour = "#FF9300" + shadeColour = "#A55403" + colourName = "orange" + +/obj/item/weapon/pen/crayon/yellow + icon_state = "crayonyellow" + colour = "#FFF200" + shadeColour = "#886422" + colourName = "yellow" + +/obj/item/weapon/pen/crayon/green + icon_state = "crayongreen" + colour = "#A8E61D" + shadeColour = "#61840F" + colourName = "green" + +/obj/item/weapon/pen/crayon/blue + icon_state = "crayonblue" + colour = "#00B7EF" + shadeColour = "#0082A8" + colourName = "blue" + +/obj/item/weapon/pen/crayon/purple + icon_state = "crayonpurple" + colour = "#DA00FF" + shadeColour = "#810CFF" + colourName = "purple" + +/obj/item/weapon/pen/crayon/mime + icon_state = "crayonmime" + desc = "A very sad-looking crayon." + colour = "#FFFFFF" + shadeColour = "#000000" + colourName = "mime" + uses = 0 + +/obj/item/weapon/pen/crayon/mime/attack_self(mob/living/user as mob) //inversion + if(colour != "#FFFFFF" && shadeColour != "#000000") + colour = "#FFFFFF" + shadeColour = "#000000" + to_chat(user, "You will now draw in white and black with this crayon.") + else + colour = "#000000" + shadeColour = "#FFFFFF" + to_chat(user, "You will now draw in black and white with this crayon.") + return + +/obj/item/weapon/pen/crayon/rainbow + icon_state = "crayonrainbow" + colour = "#FFF000" + shadeColour = "#000FFF" + colourName = "rainbow" + uses = 0 + +/obj/item/weapon/pen/crayon/rainbow/attack_self(mob/living/user as mob) + colour = input(user, "Please select the main colour.", "Crayon colour") as color + shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color + return + +/obj/item/weapon/pen/crayon/afterattack(atom/target, mob/user as mob, proximity) + if(!proximity) return + if(istype(target,/turf/simulated/floor)) + var/drawtype = tgui_input_list(user, "Choose what you'd like to draw.", "Crayon scribbles", list("graffiti","rune","letter","arrow")) + if(!drawtype) + return + if(get_dist(target, user) > 1 || !(user.z == target.z)) + return + switch(drawtype) + if("letter") + drawtype = tgui_input_list(user, "Choose the letter.", "Crayon scribbles", list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")) + if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) + return + to_chat(user, "You start drawing a letter on the [target.name].") + if("graffiti") + drawtype = tgui_input_list(user, "Choose the graffiti.", "Crayon scribbles", list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")) + if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) + return + to_chat(user, "You start drawing graffiti on the [target.name].") + if("rune") + drawtype = tgui_input_list(user, "Choose the rune.", "Crayon scribbles", list("rune1", "rune2", "rune3", "rune4", "rune5", "rune6")) + if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) + return + to_chat(user, "You start drawing a rune on the [target.name].") + if("arrow") + drawtype = tgui_input_list(user, "Choose the arrow.", "Crayon scribbles", list("left", "right", "up", "down")) + if(!drawtype || get_dist(target, user) > 1 || !(user.z == target.z)) + return + to_chat(user, "You start drawing an arrow on the [target.name].") + if(instant || do_after(user, 50)) + new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + to_chat(user, "You finish drawing.") + + var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]." + if(config.log_graffiti) + message_admins(msg) + log_game(msg) //We will log it anyways. + + target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. + if(uses) + uses-- + if(!uses) + to_chat(user, "You used up your crayon!") + qdel(src) + return + +/obj/item/weapon/pen/crayon/attack(mob/living/M as mob, mob/living/user as mob) + if(M == user) + to_chat(user, "You take a bite of the crayon and swallow it.") + user.nutrition += 1 + user.reagents.add_reagent("crayon_dust",min(5,uses)/3) + if(uses) + uses -= 5 + if(uses <= 0) + to_chat(user, "You ate your crayon!") + qdel(src) + else + ..() + +/obj/item/weapon/pen/crayon/marker/black + icon_state = "markerblack" + colour = "#2D2D2D" + shadeColour = "#000000" + colourName = "black" + +/obj/item/weapon/pen/crayon/marker/red + icon_state = "markerred" + colour = "#DA0000" + shadeColour = "#810C0C" + colourName = "red" + +/obj/item/weapon/pen/crayon/marker/orange + icon_state = "markerorange" + colour = "#FF9300" + shadeColour = "#A55403" + colourName = "orange" + +/obj/item/weapon/pen/crayon/marker/yellow + icon_state = "markeryellow" + colour = "#FFF200" + shadeColour = "#886422" + colourName = "yellow" + +/obj/item/weapon/pen/crayon/marker/green + icon_state = "markergreen" + colour = "#A8E61D" + shadeColour = "#61840F" + colourName = "green" + +/obj/item/weapon/pen/crayon/marker/blue + icon_state = "markerblue" + colour = "#00B7EF" + shadeColour = "#0082A8" + colourName = "blue" + +/obj/item/weapon/pen/crayon/marker/purple + icon_state = "markerpurple" + colour = "#DA00FF" + shadeColour = "#810CFF" + colourName = "purple" + +/obj/item/weapon/pen/crayon/marker/mime + icon_state = "markermime" + desc = "A very sad-looking marker." + colour = "#FFFFFF" + shadeColour = "#000000" + colourName = "mime" + uses = 0 + +/obj/item/weapon/pen/crayon/marker/mime/attack_self(mob/living/user as mob) //inversion + if(colour != "#FFFFFF" && shadeColour != "#000000") + colour = "#FFFFFF" + shadeColour = "#000000" + to_chat(user, "You will now draw in white and black with this marker.") + else + colour = "#000000" + shadeColour = "#FFFFFF" + to_chat(user, "You will now draw in black and white with this marker.") + return + +/obj/item/weapon/pen/crayon/marker/rainbow + icon_state = "markerrainbow" + colour = "#FFF000" + shadeColour = "#000FFF" + colourName = "rainbow" + uses = 0 + +/obj/item/weapon/pen/crayon/marker/rainbow/attack_self(mob/living/user as mob) + colour = input(user, "Please select the main colour.", "Marker colour") as color + shadeColour = input(user, "Please select the shade colour.", "Marker colour") as color + return + +/obj/item/weapon/pen/crayon/marker/attack(mob/living/M as mob, mob/living/user as mob) + if(M == user) + to_chat(user, "You take a bite of the marker and swallow it.") + user.nutrition += 1 + user.reagents.add_reagent("marker_ink",6) + if(uses) + uses -= 5 + if(uses <= 0) + to_chat(user, "You ate the marker!") + qdel(src) + else + ..() + +/obj/item/weapon/pen/crayon/attack_self(var/mob/user) + return diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index ac73bf97c8..0ba1de0235 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -1,185 +1,185 @@ -/obj/item/device/aicard - name = "intelliCore" - desc = "Used to preserve and transport an AI." - icon = 'icons/obj/pda.dmi' - icon_state = "aicard" // aicard-full - item_state = "aicard" - w_class = ITEMSIZE_NORMAL - slot_flags = SLOT_BELT - show_messages = 0 - preserve_item = 1 - - var/flush = null - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - - var/mob/living/silicon/ai/carded_ai - -/obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob) - if (!istype (M, /mob/living/silicon/decoy)) - return ..() - else - M.death() - to_chat(user, "ERROR ERROR ERROR") - -/obj/item/device/aicard/attack_self(mob/user) - tgui_interact(user) - -/obj/item/device/aicard/tgui_interact(mob/user, datum/tgui/ui = null, datum/tgui_state/custom_state) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AICard", "[name]") // 600, 394 - ui.open() - if(custom_state) - ui.set_state(custom_state) - -/obj/item/device/aicard/tgui_state(mob/user) - return GLOB.tgui_inventory_state - -/obj/item/device/aicard/tgui_data(mob/user) - var/data[0] - - data["has_ai"] = carded_ai != null - if(carded_ai) - data["name"] = carded_ai.name - data["integrity"] = carded_ai.hardware_integrity() - data["backup_capacitor"] = carded_ai.backup_capacitor() - data["radio"] = !carded_ai.aiRadio.disabledAi - data["wireless"] = !carded_ai.control_disabled - data["operational"] = carded_ai.stat != DEAD - data["flushing"] = flush - - var/laws[0] - for(var/datum/ai_law/law in carded_ai.laws.all_laws()) - if(law in carded_ai.laws.ion_laws) // If we're an ion law, give it an ion index code - laws.Add(ionnum() + ". " + law.law) - else - laws.Add(num2text(law.get_index()) + ". " + law.law) - data["laws"] = laws - data["has_laws"] = length(carded_ai.laws.all_laws()) - - return data - -/obj/item/device/aicard/tgui_act(action, params) - if(..()) - return TRUE - - if(!carded_ai) - return - - var/user = usr - switch(action) - if("wipe") - msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].") - add_attack_logs(user,carded_ai,"Purged from AI Card") - INVOKE_ASYNC(src, PROC_REF(wipe_ai)) - if("radio") - carded_ai.aiRadio.disabledAi = !carded_ai.aiRadio.disabledAi - to_chat(carded_ai, "Your Subspace Transceiver has been [carded_ai.aiRadio.disabledAi ? "disabled" : "enabled"]!") - to_chat(user, "You [carded_ai.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver.") - if("wireless") - carded_ai.control_disabled = !carded_ai.control_disabled - to_chat(carded_ai, "Your wireless interface has been [carded_ai.control_disabled ? "disabled" : "enabled"]!") - to_chat(user, "You [carded_ai.control_disabled ? "disable" : "enable"] the AI's wireless interface.") - if(carded_ai.control_disabled && carded_ai.deployed_shell) - carded_ai.disconnect_shell("Disconnecting from remote shell due to [src] wireless access interface being disabled.") - update_icon() - - return TRUE - -/obj/item/device/aicard/update_icon() - cut_overlays() - if(carded_ai) - if (!carded_ai.control_disabled) - add_overlay("aicard-on") - if(carded_ai.stat) - icon_state = "aicard-404" - else - icon_state = "aicard-full" - else - icon_state = "aicard" - -/obj/item/device/aicard/proc/grab_ai(var/mob/living/silicon/ai/ai, var/mob/living/user) - if(!ai.client && !ai.deployed_shell) - to_chat(user, "ERROR: AI [ai.name] is offline. Unable to transfer.") - return 0 - - if(carded_ai) - to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") - return 0 - - if(!user.IsAdvancedToolUser() && isanimal(user)) - var/mob/living/simple_mob/S = user - if(!S.IsHumanoidToolUser(src)) - return 0 - - user.visible_message("\The [user] starts transferring \the [ai] into \the [src]...", "You start transferring \the [ai] into \the [src]...") - show_message(span("critical", "\The [user] is transferring you into \the [src]!")) - - if(do_after(user, 100)) - if(carded_ai) - to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") - return 0 - if(istype(ai.loc, /turf/)) - new /obj/structure/AIcore/deactivated(get_turf(ai)) - - ai.carded = 1 - add_attack_logs(user,ai,"Extracted into AI Card") - src.name = "[initial(name)] - [ai.name]" - - ai.loc = src - ai.destroy_eyeobj(src) - ai.cancel_camera() - ai.control_disabled = 1 - ai.aiRestorePowerRoutine = 0 - carded_ai = ai - ai.disconnect_shell("Disconnected from remote shell due to core intelligence transfer.") //If the AI is controlling a borg, force the player back to core! - - if(ai.client) - to_chat(ai, "You have been transferred into a mobile core. Remote access lost.") - if(user.client) - to_chat(ai, "Transfer successful: [ai.name] extracted from current device and placed within mobile core.") - - ai.canmove = 1 - update_icon() - return 1 - -/obj/item/device/aicard/proc/clear() - if(carded_ai && istype(carded_ai.loc, /turf)) - carded_ai.canmove = 0 - carded_ai.carded = 0 - name = initial(name) - carded_ai = null - update_icon() - -/obj/item/device/aicard/see_emote(mob/living/M, text) - if(carded_ai && carded_ai.client) - var/rendered = "[text]" - carded_ai.show_message(rendered, 2) - ..() - -/obj/item/device/aicard/show_message(msg, type, alt, alt_type) - if(carded_ai && carded_ai.client) - var/rendered = "[msg]" - carded_ai.show_message(rendered, type) - ..() - -/obj/item/device/aicard/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/weapon/rig/rig = src.get_rig() - if(istype(rig)) - rig.forced_move(direction, user) - -/obj/item/device/aicard/proc/wipe_ai() - var/mob/living/silicon/ai/AI = carded_ai - flush = TRUE - AI.suiciding = TRUE - to_chat(AI, "Your power has been disabled!") - while(AI && AI.stat != DEAD) - // This is absolutely evil and I love it. - if(AI.deployed_shell && prob(AI.oxyloss)) //You feel it creeping? Eventually will reach 100, resulting in the second half of the AI's remaining life being lonely. - AI.disconnect_shell("Disconnecting from remote shell due to insufficent power.") - AI.adjustOxyLoss(2) - AI.updatehealth() - sleep(10) - flush = FALSE +/obj/item/device/aicard + name = "intelliCore" + desc = "Used to preserve and transport an AI." + icon = 'icons/obj/pda.dmi' + icon_state = "aicard" // aicard-full + item_state = "aicard" + w_class = ITEMSIZE_NORMAL + slot_flags = SLOT_BELT + show_messages = 0 + preserve_item = 1 + + var/flush = null + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) + + var/mob/living/silicon/ai/carded_ai + +/obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob) + if (!istype (M, /mob/living/silicon/decoy)) + return ..() + else + M.death() + to_chat(user, "ERROR ERROR ERROR") + +/obj/item/device/aicard/attack_self(mob/user) + tgui_interact(user) + +/obj/item/device/aicard/tgui_interact(mob/user, datum/tgui/ui = null, datum/tgui_state/custom_state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AICard", "[name]") // 600, 394 + ui.open() + if(custom_state) + ui.set_state(custom_state) + +/obj/item/device/aicard/tgui_state(mob/user) + return GLOB.tgui_inventory_state + +/obj/item/device/aicard/tgui_data(mob/user) + var/data[0] + + data["has_ai"] = carded_ai != null + if(carded_ai) + data["name"] = carded_ai.name + data["integrity"] = carded_ai.hardware_integrity() + data["backup_capacitor"] = carded_ai.backup_capacitor() + data["radio"] = !carded_ai.aiRadio.disabledAi + data["wireless"] = !carded_ai.control_disabled + data["operational"] = carded_ai.stat != DEAD + data["flushing"] = flush + + var/laws[0] + for(var/datum/ai_law/law in carded_ai.laws.all_laws()) + if(law in carded_ai.laws.ion_laws) // If we're an ion law, give it an ion index code + laws.Add(ionnum() + ". " + law.law) + else + laws.Add(num2text(law.get_index()) + ". " + law.law) + data["laws"] = laws + data["has_laws"] = length(carded_ai.laws.all_laws()) + + return data + +/obj/item/device/aicard/tgui_act(action, params) + if(..()) + return TRUE + + if(!carded_ai) + return + + var/user = usr + switch(action) + if("wipe") + msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].") + add_attack_logs(user,carded_ai,"Purged from AI Card") + INVOKE_ASYNC(src, PROC_REF(wipe_ai)) + if("radio") + carded_ai.aiRadio.disabledAi = !carded_ai.aiRadio.disabledAi + to_chat(carded_ai, "Your Subspace Transceiver has been [carded_ai.aiRadio.disabledAi ? "disabled" : "enabled"]!") + to_chat(user, "You [carded_ai.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver.") + if("wireless") + carded_ai.control_disabled = !carded_ai.control_disabled + to_chat(carded_ai, "Your wireless interface has been [carded_ai.control_disabled ? "disabled" : "enabled"]!") + to_chat(user, "You [carded_ai.control_disabled ? "disable" : "enable"] the AI's wireless interface.") + if(carded_ai.control_disabled && carded_ai.deployed_shell) + carded_ai.disconnect_shell("Disconnecting from remote shell due to [src] wireless access interface being disabled.") + update_icon() + + return TRUE + +/obj/item/device/aicard/update_icon() + cut_overlays() + if(carded_ai) + if (!carded_ai.control_disabled) + add_overlay("aicard-on") + if(carded_ai.stat) + icon_state = "aicard-404" + else + icon_state = "aicard-full" + else + icon_state = "aicard" + +/obj/item/device/aicard/proc/grab_ai(var/mob/living/silicon/ai/ai, var/mob/living/user) + if(!ai.client && !ai.deployed_shell) + to_chat(user, "ERROR: AI [ai.name] is offline. Unable to transfer.") + return 0 + + if(carded_ai) + to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") + return 0 + + if(!user.IsAdvancedToolUser() && isanimal(user)) + var/mob/living/simple_mob/S = user + if(!S.IsHumanoidToolUser(src)) + return 0 + + user.visible_message("\The [user] starts transferring \the [ai] into \the [src]...", "You start transferring \the [ai] into \the [src]...") + show_message(span("critical", "\The [user] is transferring you into \the [src]!")) + + if(do_after(user, 100)) + if(carded_ai) + to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") + return 0 + if(istype(ai.loc, /turf/)) + new /obj/structure/AIcore/deactivated(get_turf(ai)) + + ai.carded = 1 + add_attack_logs(user,ai,"Extracted into AI Card") + src.name = "[initial(name)] - [ai.name]" + + ai.loc = src + ai.destroy_eyeobj(src) + ai.cancel_camera() + ai.control_disabled = 1 + ai.aiRestorePowerRoutine = 0 + carded_ai = ai + ai.disconnect_shell("Disconnected from remote shell due to core intelligence transfer.") //If the AI is controlling a borg, force the player back to core! + + if(ai.client) + to_chat(ai, "You have been transferred into a mobile core. Remote access lost.") + if(user.client) + to_chat(ai, "Transfer successful: [ai.name] extracted from current device and placed within mobile core.") + + ai.canmove = 1 + update_icon() + return 1 + +/obj/item/device/aicard/proc/clear() + if(carded_ai && istype(carded_ai.loc, /turf)) + carded_ai.canmove = 0 + carded_ai.carded = 0 + name = initial(name) + carded_ai = null + update_icon() + +/obj/item/device/aicard/see_emote(mob/living/M, text) + if(carded_ai && carded_ai.client) + var/rendered = "[text]" + carded_ai.show_message(rendered, 2) + ..() + +/obj/item/device/aicard/show_message(msg, type, alt, alt_type) + if(carded_ai && carded_ai.client) + var/rendered = "[msg]" + carded_ai.show_message(rendered, type) + ..() + +/obj/item/device/aicard/relaymove(var/mob/user, var/direction) + if(user.stat || user.stunned) + return + var/obj/item/weapon/rig/rig = src.get_rig() + if(istype(rig)) + rig.forced_move(direction, user) + +/obj/item/device/aicard/proc/wipe_ai() + var/mob/living/silicon/ai/AI = carded_ai + flush = TRUE + AI.suiciding = TRUE + to_chat(AI, "Your power has been disabled!") + while(AI && AI.stat != DEAD) + // This is absolutely evil and I love it. + if(AI.deployed_shell && prob(AI.oxyloss)) //You feel it creeping? Eventually will reach 100, resulting in the second half of the AI's remaining life being lonely. + AI.disconnect_shell("Disconnecting from remote shell due to insufficent power.") + AI.adjustOxyLoss(2) + AI.updatehealth() + sleep(10) + flush = FALSE diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 9a9e7ea0ae..054896cc38 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -1,147 +1,147 @@ -/obj/item/device/chameleon - name = "chameleon projector" - icon_state = "shield0" - slot_flags = SLOT_BELT - item_state = "electronic" - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4) - var/can_use = 1 - var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_item = /obj/item/trash/cigbutt - var/saved_icon = 'icons/inventory/face/item.dmi' - var/saved_icon_state = "cigbutt" - var/saved_overlays - -/obj/item/device/chameleon/dropped() - disrupt() - ..() - -/obj/item/device/chameleon/equipped() - ..() - disrupt() - ..() - -/obj/item/device/chameleon/attack_self() - toggle() - -/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity) - if(!proximity) return - if(!active_dummy) - if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear)) - playsound(src, 'sound/weapons/flash.ogg', 100, 1, -6) - to_chat(user, "Scanned [target].") - saved_item = target.type - saved_icon = target.icon - saved_icon_state = target.icon_state - saved_overlays = target.overlays - -/obj/item/device/chameleon/proc/toggle() - if(!can_use || !saved_item) return - if(active_dummy) - eject_all() - playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) - qdel(active_dummy) - active_dummy = null - to_chat(usr, "You deactivate the [src].") - var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - spawn(8) qdel(T) - else - playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) - var/obj/O = new saved_item(src) - if(!O) return - var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) - C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) - qdel(O) - to_chat(usr, "You activate the [src].") - var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - spawn(8) qdel(T) - -/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1) - if(active_dummy) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - eject_all() - if(delete_dummy) - qdel(active_dummy) - active_dummy = null - can_use = 0 - spawn(50) can_use = 1 - -/obj/item/device/chameleon/proc/eject_all() - for(var/atom/movable/A in active_dummy) - A.loc = active_dummy.loc - if(ismob(A)) - var/mob/M = A - M.reset_view(null) - -/obj/effect/dummy/chameleon - name = "" - desc = "" - density = FALSE - anchored = TRUE - var/can_move = 1 - var/obj/item/device/chameleon/master = null - -/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, var/obj/item/device/chameleon/C) - name = O.name - desc = O.desc - icon = new_icon - icon_state = new_iconstate - overlays = new_overlays - set_dir(O.dir) - M.loc = src - master = C - master.active_dummy = src - -/obj/effect/dummy/chameleon/attackby() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/attack_hand() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/ex_act() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/bullet_act() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - ..() - master.disrupt() - -/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) - if(istype(loc, /turf/space)) return //No magical space movement! - - if(can_move) - can_move = 0 - switch(user.bodytemperature) - if(300 to INFINITY) - spawn(10) can_move = 1 - if(295 to 300) - spawn(13) can_move = 1 - if(280 to 295) - spawn(16) can_move = 1 - if(260 to 280) - spawn(20) can_move = 1 - else - spawn(25) can_move = 1 - step(src, direction) - return - -/obj/effect/dummy/chameleon/Destroy() - master.disrupt(0) - ..() +/obj/item/device/chameleon + name = "chameleon projector" + icon_state = "shield0" + slot_flags = SLOT_BELT + item_state = "electronic" + throwforce = 5.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4) + var/can_use = 1 + var/obj/effect/dummy/chameleon/active_dummy = null + var/saved_item = /obj/item/trash/cigbutt + var/saved_icon = 'icons/inventory/face/item.dmi' + var/saved_icon_state = "cigbutt" + var/saved_overlays + +/obj/item/device/chameleon/dropped() + disrupt() + ..() + +/obj/item/device/chameleon/equipped() + ..() + disrupt() + ..() + +/obj/item/device/chameleon/attack_self() + toggle() + +/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity) + if(!proximity) return + if(!active_dummy) + if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear)) + playsound(src, 'sound/weapons/flash.ogg', 100, 1, -6) + to_chat(user, "Scanned [target].") + saved_item = target.type + saved_icon = target.icon + saved_icon_state = target.icon_state + saved_overlays = target.overlays + +/obj/item/device/chameleon/proc/toggle() + if(!can_use || !saved_item) return + if(active_dummy) + eject_all() + playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) + qdel(active_dummy) + active_dummy = null + to_chat(usr, "You deactivate the [src].") + var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) + T.icon = 'icons/effects/effects.dmi' + flick("emppulse",T) + spawn(8) qdel(T) + else + playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) + var/obj/O = new saved_item(src) + if(!O) return + var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) + C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) + qdel(O) + to_chat(usr, "You activate the [src].") + var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) + T.icon = 'icons/effects/effects.dmi' + flick("emppulse",T) + spawn(8) qdel(T) + +/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1) + if(active_dummy) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + spark_system.start() + eject_all() + if(delete_dummy) + qdel(active_dummy) + active_dummy = null + can_use = 0 + spawn(50) can_use = 1 + +/obj/item/device/chameleon/proc/eject_all() + for(var/atom/movable/A in active_dummy) + A.loc = active_dummy.loc + if(ismob(A)) + var/mob/M = A + M.reset_view(null) + +/obj/effect/dummy/chameleon + name = "" + desc = "" + density = FALSE + anchored = TRUE + var/can_move = 1 + var/obj/item/device/chameleon/master = null + +/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, var/obj/item/device/chameleon/C) + name = O.name + desc = O.desc + icon = new_icon + icon_state = new_iconstate + overlays = new_overlays + set_dir(O.dir) + M.loc = src + master = C + master.active_dummy = src + +/obj/effect/dummy/chameleon/attackby() + for(var/mob/M in src) + to_chat(M, "Your chameleon-projector deactivates.") + master.disrupt() + +/obj/effect/dummy/chameleon/attack_hand() + for(var/mob/M in src) + to_chat(M, "Your chameleon-projector deactivates.") + master.disrupt() + +/obj/effect/dummy/chameleon/ex_act() + for(var/mob/M in src) + to_chat(M, "Your chameleon-projector deactivates.") + master.disrupt() + +/obj/effect/dummy/chameleon/bullet_act() + for(var/mob/M in src) + to_chat(M, "Your chameleon-projector deactivates.") + ..() + master.disrupt() + +/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) + if(istype(loc, /turf/space)) return //No magical space movement! + + if(can_move) + can_move = 0 + switch(user.bodytemperature) + if(300 to INFINITY) + spawn(10) can_move = 1 + if(295 to 300) + spawn(13) can_move = 1 + if(280 to 295) + spawn(16) can_move = 1 + if(260 to 280) + spawn(20) can_move = 1 + else + spawn(25) can_move = 1 + step(src, direction) + return + +/obj/effect/dummy/chameleon/Destroy() + master.disrupt(0) + ..() diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm index f80d84cefb..47d2720840 100644 --- a/code/game/objects/items/devices/communicator/helper.dm +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -1,543 +1,543 @@ -/obj/item/device/communicator/proc/analyze_air() - var/list/results = list() - var/turf/T = get_turf(src.loc) - if(!isnull(T)) - var/datum/gas_mixture/environment = T.return_air() - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles - if (total_moles) - var/o2_level = environment.gas["oxygen"]/total_moles - var/n2_level = environment.gas["nitrogen"]/total_moles - var/co2_level = environment.gas["carbon_dioxide"]/total_moles - var/phoron_level = environment.gas["phoron"]/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) - - // Label is what the entry is describing - // Type identifies which unit or other special characters to use - // Val is the information reported - // Bad_high/_low are the values outside of which the entry reports as dangerous - // Poor_high/_low are the values outside of which the entry reports as unideal - // Values were extracted from the template itself - results = list( - list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80), - list("entry" = "Temperature", "units" = "\u00B0" + "C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5), - list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17), - list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40), - list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0), - list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0), - list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0) - ) - - if(isnull(results)) - results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80)) - return results - - -// Proc - compile_news() -// Parameters - none -// Description - Returns the list of newsfeeds, compiled for template processing -/obj/item/device/communicator/proc/compile_news() - var/list/feeds = list() - for(var/datum/feed_channel/channel in news_network.network_channels) - var/list/messages = list() - if(!channel.censored && channel.channel_name != "Vir News Network") //Do not load the 'IC news' channel as it is simply too long. - var/index = 0 - for(var/datum/feed_message/FM in channel.messages) - index++ - if(FM.img) - usr << browse_rsc(FM.img, "pda_news_tmp_photo_[feeds["channel"]]_[index].png") - // News stories are HTML-stripped but require newline replacement to be properly displayed in NanoUI - var/body = replacetext(FM.body, "\n", "
                    ") - messages[++messages.len] = list( - "author" = FM.author, - "body" = body, - "message_type" = FM.message_type, - "time_stamp" = FM.time_stamp, - "has_image" = (FM.img != null), - "caption" = FM.caption, - "index" = index - ) - - feeds[++feeds.len] = list( - "name" = channel.channel_name, - "censored" = channel.censored, - "author" = channel.author, - "messages" = messages, - "index" = feeds.len + 1 // actually align them, since I guess the population of the list doesn't occur until after the evaluation of the new entry's contents - ) - return feeds - -// Proc - get_recent_news() -// Parameters - none -// Description - Returns the latest three newscasts, compiled for template processing -/obj/item/device/communicator/proc/get_recent_news() - var/list/news = list() - - // Compile all the newscasts - for(var/datum/feed_channel/channel in news_network.network_channels) - if(!channel.censored) - for(var/datum/feed_message/FM in channel.messages) - var/body = replacetext(FM.body, "\n", "
                    ") - news[++news.len] = list( - "channel" = channel.channel_name, - "author" = FM.author, - "body" = body, - "message_type" = FM.message_type, - "time_stamp" = FM.time_stamp, - "has_image" = (FM.img != null), - "caption" = FM.caption, - "time" = FM.post_time - ) - - // Cut out all but the youngest three - if(news.len > 3) - sortByKey(news, "time") - news.Cut(1, news.len - 2) // Last three have largest timestamps, youngest posts - news.Swap(1, 3) // List is sorted in ascending order of timestamp, we want descending - - return news - - - -// Putting the commcard data harvesting helpers here -// Not ideal to put all the procs on the base type -// but it may open options for adminbus, -// And it saves duplicated code - - -// Medical records -/obj/item/weapon/commcard/proc/get_med_records() - var/med_records[0] - for(var/datum/data/record/M in sortRecord(data_core.medical)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = M.fields["name"]) - record[++record.len] = list("tab" = "ID", "val" = M.fields["id"]) - record[++record.len] = list("tab" = "Blood Type", "val" = M.fields["b_type"]) - record[++record.len] = list("tab" = "DNA #", "val" = M.fields["b_dna"]) - record[++record.len] = list("tab" = "Gender", "val" = M.fields["id_gender"]) - record[++record.len] = list("tab" = "Entity Classification", "val" = M.fields["brain_type"]) - record[++record.len] = list("tab" = "Minor Disorders", "val" = M.fields["mi_dis"]) - record[++record.len] = list("tab" = "Major Disorders", "val" = M.fields["ma_dis"]) - record[++record.len] = list("tab" = "Allergies", "val" = M.fields["alg"]) - record[++record.len] = list("tab" = "Condition", "val" = M.fields["cdi"]) - record[++record.len] = list("tab" = "Notes", "val" = M.fields["notes"]) - - med_records[++med_records.len] = list("name" = M.fields["name"], "record" = record) - return med_records - - -// Employment records -/obj/item/weapon/commcard/proc/get_emp_records() - var/emp_records[0] - for(var/datum/data/record/G in sortRecord(data_core.general)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = G.fields["name"]) - record[++record.len] = list("tab" = "ID", "val" = G.fields["id"]) - record[++record.len] = list("tab" = "Rank", "val" = G.fields["rank"]) - record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields["fingerprint"]) - record[++record.len] = list("tab" = "Entity Classification", "val" = G.fields["brain_type"]) - record[++record.len] = list("tab" = "Sex", "val" = G.fields["sex"]) - record[++record.len] = list("tab" = "Species", "val" = G.fields["species"]) - record[++record.len] = list("tab" = "Age", "val" = G.fields["age"]) - record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) - - emp_records[++emp_records.len] = list("name" = G.fields["name"], "record" = record) - return emp_records - - -// Security records -/obj/item/weapon/commcard/proc/get_sec_records() - var/sec_records[0] - for(var/datum/data/record/G in sortRecord(data_core.general)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Sex", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Species", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Age", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Rank", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Physical Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Mental Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Criminal Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Major Crimes", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Minor Crimes", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) - - sec_records[++sec_records.len] = list("name" = G.fields["name"], "record" = record) - return sec_records - - -// Status of all secbots -// Weaker than what PDAs appear to do, but as of 7/1/2018 PDA secbot access is nonfunctional -/obj/item/weapon/commcard/proc/get_sec_bot_access() - var/sec_bots[0] - for(var/mob/living/bot/secbot/S in mob_list) - // Get new bot - var/status[0] - status[++status.len] = list("tab" = "Name", "val" = sanitize(S.name)) - - // If it's turned off, then it shouldn't be broadcasting any further info - if(!S.on) - status[++status.len] = list("tab" = "Power", "val" = "Off") // Encoding the span classes here so I don't have to do complicated switches in the ui template - continue - status[++status.len] = list("tab" = "Power", "val" = "On") - - // -- What it's doing - // If it's engaged, then say who it thinks it's engaging - if(S.target) - status[++status.len] = list("tab" = "Status", "val" = "Apprehending Target") - status[++status.len] = list("tab" = "Target", "val" = S.target_name(S.target)) - // Else if it's patrolling - else if(S.will_patrol) - status[++status.len] = list("tab" = "Status", "val" = "Patrolling") - // Otherwise we don't know what it's doing - else - status[++status.len] = list("tab" = "Status", "val" = "Idle") - - // Where it is - status[++status.len] = list("tab" = "Location", "val" = sanitize("[get_area(S.loc)]")) - - // Append bot to the list - sec_bots[++sec_bots.len] = list("bot" = S.name, "status" = status) - return sec_bots - - -// Code and frequency of stored signalers -// Supports multiple signalers within the device -/obj/item/weapon/commcard/proc/get_int_signalers() - var/signalers[0] - for(var/obj/item/device/assembly/signaler/S in internal_devices) - var/unit[0] - unit[++unit.len] = list("tab" = "Code", "val" = S.code) - unit[++unit.len] = list("tab" = "Frequency", "val" = S.frequency) - - signalers[++signalers.len] = list("ref" = "\ref[S]", "status" = unit) - - return signalers - -// Returns list of all powernet sensors currently visible to the commcard -/obj/item/weapon/commcard/proc/find_powernet_sensors() - var/grid_sensors[0] - - // Find all the powernet sensors we need to pull data from - // Copied from /datum/nano_module/power_monitor/proc/refresh_sensors(), - // located in '/code/modules/nano/modules/power_monitor.dm' - // Minor tweaks for efficiency and cleanliness - var/turf/T = get_turf(src) - if(T) - var/list/levels = using_map.get_map_levels(T.z, FALSE) - for(var/obj/machinery/power/sensor/S in machines) - if((S.long_range) || (S.loc.z in levels) || (S.loc.z == T.z)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. - if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! - warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") - else - grid_sensors += S - return grid_sensors - -// List of powernets -/obj/item/weapon/commcard/proc/get_powernet_monitoring_list() - // Fetch power monitor data - var/sensors[0] - - for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) - var/list/focus = S.return_reading_data() - - sensors[++sensors.len] = list( - "name" = S.name_tag, - "alarm" = focus["alarm"] - ) - - return sensors - -// Information about the targeted powernet -/obj/item/weapon/commcard/proc/get_powernet_target(var/target_sensor) - if(!target_sensor) - return - - var/powernet_target[0] - - for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) - var/list/focus = S.return_reading_data() - - // Packages the span class here so it doesn't need to be interpreted w/in the for loop in the ui template - var/load_stat = "Optimal" - if(focus["load_percentage"] >= 95) - load_stat = "DANGER: Overload" - else if(focus["load_percentage"] >= 85) - load_stat = "WARNING: High Load" - - var/alarm_stat = focus["alarm"] ? "WARNING: Abnormal activity detected!" : "Secure" - - if(target_sensor == S.name_tag) - powernet_target = list( - "name" = S.name_tag, - "alarm" = focus["alarm"], - "error" = focus["error"], - "apc_data" = focus["apc_data"], - "status" = list( - list("field" = "Network Load Status", "statval" = load_stat), - list("field" = "Network Security Status", "statval" = alarm_stat), - list("field" = "Load Percentage", "statval" = focus["load_percentage"]), - list("field" = "Available Power", "statval" = focus["total_avail"]), - list("field" = "APC Power Usage", "statval" = focus["total_used_apc"]), - list("field" = "Other Power Usage", "statval" = focus["total_used_other"]), - list("field" = "Total Usage", "statval" = focus["total_used_all"]) - ) - ) - - return powernet_target - -// Compiles the locations of all janitorial paraphernalia, as used by janitorialLocator.tmpl -/obj/item/weapon/commcard/proc/get_janitorial_locations() - // Fetch janitorial locator - var/janidata[0] - var/list/cleaningList = list() - cleaningList += GLOB.all_mops + GLOB.all_mopbuckets + GLOB.all_janitorial_carts - - // User's location - var/turf/userloc = get_turf(src) - if(isturf(userloc)) - janidata[++janidata.len] = list("field" = "Current Location", "val" = "[userloc.x], [userloc.y], [using_map.get_zlevel_name(userloc.z)]") - else - janidata[++janidata.len] = list("field" = "Current Location", "val" = "Unknown") - return janidata // If the user isn't on a valid turf, then it shouldn't be able to find anything anyways - - // Mops, mop buckets, janitorial carts. - for(var/obj/C in cleaningList) - var/turf/T = get_turf(C) - if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) - if(T.z == userloc.z) - janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") - else - janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") - - // Cleanbots - for(var/mob/living/bot/cleanbot/B in living_mob_list) - var/turf/T = get_turf(B) - if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) - var/textout = "" - if(B.on) - textout += "Status: Online
                    " - if(T.z == userloc.z) - textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" - else - textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" - else - textout += "Status: Offline" - - janidata[++janidata.len] = list("field" = "[B.name]", "val" = textout) - - return janidata - -// Compiles the three lists used by GPS_access.tmpl -// The contents of the three lists are inherently related, so separating them into different procs would be largely redundant -/obj/item/weapon/commcard/proc/get_GPS_lists() - // GPS Access - var/intgps[0] // Gps devices within the commcard -- Allow tag edits, turning on/off, etc - var/extgps[0] // Gps devices not inside the commcard -- Print locations if a gps is on - var/stagps[0] // Gps net status, location, whether it's on, if it's got long range - var/obj/item/device/gps/cumulative = new(src) - cumulative.tracking = FALSE - cumulative.local_mode = TRUE // Won't detect long-range signals automatically - cumulative.long_range = FALSE - var/list/toggled_gps = list() // List of GPS units that are turned off before display_list() is called - - for(var/obj/item/device/gps/G in internal_devices) - var/gpsdata[0] - if(G.tracking && !G.emped) - cumulative.tracking = TRUE // Turn it on - if(G.long_range) - cumulative.long_range = TRUE // It can detect long-range - if(!G.local_mode) - cumulative.local_mode = FALSE // It is detecting long-range - - gpsdata["ref"] = "\ref[G]" - gpsdata["tag"] = G.gps_tag - gpsdata["power"] = G.tracking - gpsdata["local_mode"] = G.local_mode - gpsdata["long_range"] = G.long_range - gpsdata["hide_signal"] = G.hide_signal - gpsdata["can_hide"] = G.can_hide_signal - - intgps[++intgps.len] = gpsdata // Add it to the list - - if(G.tracking) - G.tracking = FALSE // Disable the internal gps units so they don't show up in the report - toggled_gps += G - - var/list/remote_gps = cumulative.display_list() // Fetch information for all units except the ones inside of this device - - for(var/obj/item/device/gps/G in toggled_gps) // Reenable any internal GPS units - G.tracking = TRUE - - stagps["enabled"] = cumulative.tracking - stagps["long_range_en"] = (cumulative.long_range && !cumulative.local_mode) - - stagps["my_area_name"] = remote_gps["my_area_name"] - stagps["curr_x"] = remote_gps["curr_x"] - stagps["curr_y"] = remote_gps["curr_y"] - stagps["curr_z"] = remote_gps["curr_z"] - stagps["curr_z_name"] = remote_gps["curr_z_name"] - - extgps = remote_gps["gps_list"] // Compiled by the GPS - - qdel(cumulative) // Don't want spare GPS units building up in the contents - - return list( - intgps, - extgps, - stagps - ) - -// Collects the current status of the supply shuttle -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 55 -/obj/item/weapon/commcard/proc/get_supply_shuttle_status() - var/shuttle_status[0] - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if(shuttle) - if(shuttle.has_arrive_time()) - shuttle_status["location"] = "In transit" - shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT - shuttle_status["time"] = shuttle.eta_minutes() - - else - shuttle_status["time"] = 0 - if(shuttle.at_station()) - if(shuttle.shuttle_docking_controller) - switch(shuttle.shuttle_docking_controller.get_docking_status()) - if("docked") - shuttle_status["location"] = "Docked" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKED - if("undocked") - shuttle_status["location"] = "Undocked" - shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED - if("docking") - shuttle_status["location"] = "Docking" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKING - shuttle_status["force"] = shuttle.can_force() - if("undocking") - shuttle_status["location"] = "Undocking" - shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING - shuttle_status["force"] = shuttle.can_force() - - else - shuttle_status["location"] = "Station" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKED - - else - shuttle_status["location"] = "Away" - shuttle_status["mode"] = SUP_SHUTTLE_AWAY - - if(shuttle.can_launch()) - shuttle_status["launch"] = 1 - else if(shuttle.can_cancel()) - shuttle_status["launch"] = 2 - else - shuttle_status["launch"] = 0 - - switch(shuttle.moving_status) - if(SHUTTLE_IDLE) - shuttle_status["engine"] = "Idle" - if(SHUTTLE_WARMUP) - shuttle_status["engine"] = "Warming up" - if(SHUTTLE_INTRANSIT) - shuttle_status["engine"] = "Engaged" - - else - shuttle["mode"] = SUP_SHUTTLE_ERROR - - return shuttle_status - -// Compiles the list of supply orders -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 130 -/obj/item/weapon/commcard/proc/get_supply_orders() - var/orders[0] - for(var/datum/supply_order/S in SSsupply.order_history) - orders[++orders.len] = list( - "ref" = "\ref[S]", - "status" = S.status, - "entries" = list( - list("field" = "Supply Pack", "entry" = S.name), - list("field" = "Cost", "entry" = S.cost), - list("field" = "Index", "entry" = S.index), - list("field" = "Reason", "entry" = S.comment), - list("field" = "Ordered by", "entry" = S.ordered_by), - list("field" = "Ordered at", "entry" = S.ordered_at), - list("field" = "Approved by", "entry" = S.approved_by), - list("field" = "Approved at", "entry" = S.approved_at) - ) - ) - - return orders - -// Compiles the list of supply export receipts -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 147 -/obj/item/weapon/commcard/proc/get_supply_receipts() - var/receipts[0] - for(var/datum/exported_crate/E in SSsupply.exported_crates) - receipts[++receipts.len] = list( - "ref" = "\ref[E]", - "contents" = E.contents, - "error" = E.contents["error"], - "title" = list( - list("field" = "Name", "entry" = E.name), - list("field" = "Value", "entry" = E.value) - ) - ) - return receipts - - -// Compiles the list of supply packs for the category currently stored in internal_data["supply_category"] -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 147 -/obj/item/weapon/commcard/proc/get_supply_pack_list() - var/supply_packs[0] - for(var/pack_name in SSsupply.supply_pack) - var/datum/supply_pack/P = SSsupply.supply_pack[pack_name] - if(P.group == internal_data["supply_category"]) - var/list/pack = list( - "name" = P.name, - "cost" = P.cost, - "contraband" = P.contraband, - "manifest" = uniqueList(P.manifest), - "random" = P.num_contained, - "expand" = 0, - "ref" = "\ref[P]" - ) - - if(P in internal_data["supply_pack_expanded"]) - pack["expand"] = 1 - - supply_packs[++supply_packs.len] = pack - - return supply_packs - - -// Compiles miscellaneous data and permissions used by the supply template -/obj/item/weapon/commcard/proc/get_misc_supply_data() - return list( - "shuttle_auth" = (internal_data["supply_controls"] & SUP_SEND_SHUTTLE), - "order_auth" = (internal_data["supply_controls"] & SUP_ACCEPT_ORDERS), - "supply_points" = SSsupply.points, - "supply_categories" = all_supply_groups - ) - -/obj/item/weapon/commcard/proc/get_status_display() - return list( - "line1" = internal_data["stat_display_line1"], - "line2" = internal_data["stat_display_line2"], - "active_line1" = internal_data["stat_display_active1"], - "active_line2" = internal_data["stat_display_active2"], - "active" = internal_data["stat_display_special"] - ) - -/obj/item/weapon/commcard/proc/find_blast_doors() - var/target_doors[0] - for(var/obj/machinery/door/blast/B in machines) - if(B.id == internal_data["shuttle_door_code"]) - target_doors += B - - return target_doors +/obj/item/device/communicator/proc/analyze_air() + var/list/results = list() + var/turf/T = get_turf(src.loc) + if(!isnull(T)) + var/datum/gas_mixture/environment = T.return_air() + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles + if (total_moles) + var/o2_level = environment.gas["oxygen"]/total_moles + var/n2_level = environment.gas["nitrogen"]/total_moles + var/co2_level = environment.gas["carbon_dioxide"]/total_moles + var/phoron_level = environment.gas["phoron"]/total_moles + var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) + + // Label is what the entry is describing + // Type identifies which unit or other special characters to use + // Val is the information reported + // Bad_high/_low are the values outside of which the entry reports as dangerous + // Poor_high/_low are the values outside of which the entry reports as unideal + // Values were extracted from the template itself + results = list( + list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80), + list("entry" = "Temperature", "units" = "\u00B0" + "C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5), + list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17), + list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40), + list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0), + list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0), + list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0) + ) + + if(isnull(results)) + results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80)) + return results + + +// Proc - compile_news() +// Parameters - none +// Description - Returns the list of newsfeeds, compiled for template processing +/obj/item/device/communicator/proc/compile_news() + var/list/feeds = list() + for(var/datum/feed_channel/channel in news_network.network_channels) + var/list/messages = list() + if(!channel.censored && channel.channel_name != "Vir News Network") //Do not load the 'IC news' channel as it is simply too long. + var/index = 0 + for(var/datum/feed_message/FM in channel.messages) + index++ + if(FM.img) + usr << browse_rsc(FM.img, "pda_news_tmp_photo_[feeds["channel"]]_[index].png") + // News stories are HTML-stripped but require newline replacement to be properly displayed in NanoUI + var/body = replacetext(FM.body, "\n", "
                    ") + messages[++messages.len] = list( + "author" = FM.author, + "body" = body, + "message_type" = FM.message_type, + "time_stamp" = FM.time_stamp, + "has_image" = (FM.img != null), + "caption" = FM.caption, + "index" = index + ) + + feeds[++feeds.len] = list( + "name" = channel.channel_name, + "censored" = channel.censored, + "author" = channel.author, + "messages" = messages, + "index" = feeds.len + 1 // actually align them, since I guess the population of the list doesn't occur until after the evaluation of the new entry's contents + ) + return feeds + +// Proc - get_recent_news() +// Parameters - none +// Description - Returns the latest three newscasts, compiled for template processing +/obj/item/device/communicator/proc/get_recent_news() + var/list/news = list() + + // Compile all the newscasts + for(var/datum/feed_channel/channel in news_network.network_channels) + if(!channel.censored) + for(var/datum/feed_message/FM in channel.messages) + var/body = replacetext(FM.body, "\n", "
                    ") + news[++news.len] = list( + "channel" = channel.channel_name, + "author" = FM.author, + "body" = body, + "message_type" = FM.message_type, + "time_stamp" = FM.time_stamp, + "has_image" = (FM.img != null), + "caption" = FM.caption, + "time" = FM.post_time + ) + + // Cut out all but the youngest three + if(news.len > 3) + sortByKey(news, "time") + news.Cut(1, news.len - 2) // Last three have largest timestamps, youngest posts + news.Swap(1, 3) // List is sorted in ascending order of timestamp, we want descending + + return news + + + +// Putting the commcard data harvesting helpers here +// Not ideal to put all the procs on the base type +// but it may open options for adminbus, +// And it saves duplicated code + + +// Medical records +/obj/item/weapon/commcard/proc/get_med_records() + var/med_records[0] + for(var/datum/data/record/M in sortRecord(data_core.medical)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = M.fields["name"]) + record[++record.len] = list("tab" = "ID", "val" = M.fields["id"]) + record[++record.len] = list("tab" = "Blood Type", "val" = M.fields["b_type"]) + record[++record.len] = list("tab" = "DNA #", "val" = M.fields["b_dna"]) + record[++record.len] = list("tab" = "Gender", "val" = M.fields["id_gender"]) + record[++record.len] = list("tab" = "Entity Classification", "val" = M.fields["brain_type"]) + record[++record.len] = list("tab" = "Minor Disorders", "val" = M.fields["mi_dis"]) + record[++record.len] = list("tab" = "Major Disorders", "val" = M.fields["ma_dis"]) + record[++record.len] = list("tab" = "Allergies", "val" = M.fields["alg"]) + record[++record.len] = list("tab" = "Condition", "val" = M.fields["cdi"]) + record[++record.len] = list("tab" = "Notes", "val" = M.fields["notes"]) + + med_records[++med_records.len] = list("name" = M.fields["name"], "record" = record) + return med_records + + +// Employment records +/obj/item/weapon/commcard/proc/get_emp_records() + var/emp_records[0] + for(var/datum/data/record/G in sortRecord(data_core.general)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = G.fields["name"]) + record[++record.len] = list("tab" = "ID", "val" = G.fields["id"]) + record[++record.len] = list("tab" = "Rank", "val" = G.fields["rank"]) + record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields["fingerprint"]) + record[++record.len] = list("tab" = "Entity Classification", "val" = G.fields["brain_type"]) + record[++record.len] = list("tab" = "Sex", "val" = G.fields["sex"]) + record[++record.len] = list("tab" = "Species", "val" = G.fields["species"]) + record[++record.len] = list("tab" = "Age", "val" = G.fields["age"]) + record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) + + emp_records[++emp_records.len] = list("name" = G.fields["name"], "record" = record) + return emp_records + + +// Security records +/obj/item/weapon/commcard/proc/get_sec_records() + var/sec_records[0] + for(var/datum/data/record/G in sortRecord(data_core.general)) + var/record[0] + record[++record.len] = list("tab" = "Name", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Sex", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Species", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Age", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Rank", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Physical Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Mental Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Criminal Status", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Major Crimes", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Minor Crimes", "val" = G.fields[""]) + record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) + + sec_records[++sec_records.len] = list("name" = G.fields["name"], "record" = record) + return sec_records + + +// Status of all secbots +// Weaker than what PDAs appear to do, but as of 7/1/2018 PDA secbot access is nonfunctional +/obj/item/weapon/commcard/proc/get_sec_bot_access() + var/sec_bots[0] + for(var/mob/living/bot/secbot/S in mob_list) + // Get new bot + var/status[0] + status[++status.len] = list("tab" = "Name", "val" = sanitize(S.name)) + + // If it's turned off, then it shouldn't be broadcasting any further info + if(!S.on) + status[++status.len] = list("tab" = "Power", "val" = "Off") // Encoding the span classes here so I don't have to do complicated switches in the ui template + continue + status[++status.len] = list("tab" = "Power", "val" = "On") + + // -- What it's doing + // If it's engaged, then say who it thinks it's engaging + if(S.target) + status[++status.len] = list("tab" = "Status", "val" = "Apprehending Target") + status[++status.len] = list("tab" = "Target", "val" = S.target_name(S.target)) + // Else if it's patrolling + else if(S.will_patrol) + status[++status.len] = list("tab" = "Status", "val" = "Patrolling") + // Otherwise we don't know what it's doing + else + status[++status.len] = list("tab" = "Status", "val" = "Idle") + + // Where it is + status[++status.len] = list("tab" = "Location", "val" = sanitize("[get_area(S.loc)]")) + + // Append bot to the list + sec_bots[++sec_bots.len] = list("bot" = S.name, "status" = status) + return sec_bots + + +// Code and frequency of stored signalers +// Supports multiple signalers within the device +/obj/item/weapon/commcard/proc/get_int_signalers() + var/signalers[0] + for(var/obj/item/device/assembly/signaler/S in internal_devices) + var/unit[0] + unit[++unit.len] = list("tab" = "Code", "val" = S.code) + unit[++unit.len] = list("tab" = "Frequency", "val" = S.frequency) + + signalers[++signalers.len] = list("ref" = "\ref[S]", "status" = unit) + + return signalers + +// Returns list of all powernet sensors currently visible to the commcard +/obj/item/weapon/commcard/proc/find_powernet_sensors() + var/grid_sensors[0] + + // Find all the powernet sensors we need to pull data from + // Copied from /datum/nano_module/power_monitor/proc/refresh_sensors(), + // located in '/code/modules/nano/modules/power_monitor.dm' + // Minor tweaks for efficiency and cleanliness + var/turf/T = get_turf(src) + if(T) + var/list/levels = using_map.get_map_levels(T.z, FALSE) + for(var/obj/machinery/power/sensor/S in machines) + if((S.long_range) || (S.loc.z in levels) || (S.loc.z == T.z)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. + if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! + warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") + else + grid_sensors += S + return grid_sensors + +// List of powernets +/obj/item/weapon/commcard/proc/get_powernet_monitoring_list() + // Fetch power monitor data + var/sensors[0] + + for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) + var/list/focus = S.return_reading_data() + + sensors[++sensors.len] = list( + "name" = S.name_tag, + "alarm" = focus["alarm"] + ) + + return sensors + +// Information about the targeted powernet +/obj/item/weapon/commcard/proc/get_powernet_target(var/target_sensor) + if(!target_sensor) + return + + var/powernet_target[0] + + for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) + var/list/focus = S.return_reading_data() + + // Packages the span class here so it doesn't need to be interpreted w/in the for loop in the ui template + var/load_stat = "Optimal" + if(focus["load_percentage"] >= 95) + load_stat = "DANGER: Overload" + else if(focus["load_percentage"] >= 85) + load_stat = "WARNING: High Load" + + var/alarm_stat = focus["alarm"] ? "WARNING: Abnormal activity detected!" : "Secure" + + if(target_sensor == S.name_tag) + powernet_target = list( + "name" = S.name_tag, + "alarm" = focus["alarm"], + "error" = focus["error"], + "apc_data" = focus["apc_data"], + "status" = list( + list("field" = "Network Load Status", "statval" = load_stat), + list("field" = "Network Security Status", "statval" = alarm_stat), + list("field" = "Load Percentage", "statval" = focus["load_percentage"]), + list("field" = "Available Power", "statval" = focus["total_avail"]), + list("field" = "APC Power Usage", "statval" = focus["total_used_apc"]), + list("field" = "Other Power Usage", "statval" = focus["total_used_other"]), + list("field" = "Total Usage", "statval" = focus["total_used_all"]) + ) + ) + + return powernet_target + +// Compiles the locations of all janitorial paraphernalia, as used by janitorialLocator.tmpl +/obj/item/weapon/commcard/proc/get_janitorial_locations() + // Fetch janitorial locator + var/janidata[0] + var/list/cleaningList = list() + cleaningList += GLOB.all_mops + GLOB.all_mopbuckets + GLOB.all_janitorial_carts + + // User's location + var/turf/userloc = get_turf(src) + if(isturf(userloc)) + janidata[++janidata.len] = list("field" = "Current Location", "val" = "[userloc.x], [userloc.y], [using_map.get_zlevel_name(userloc.z)]") + else + janidata[++janidata.len] = list("field" = "Current Location", "val" = "Unknown") + return janidata // If the user isn't on a valid turf, then it shouldn't be able to find anything anyways + + // Mops, mop buckets, janitorial carts. + for(var/obj/C in cleaningList) + var/turf/T = get_turf(C) + if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) + if(T.z == userloc.z) + janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") + else + janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") + + // Cleanbots + for(var/mob/living/bot/cleanbot/B in living_mob_list) + var/turf/T = get_turf(B) + if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) + var/textout = "" + if(B.on) + textout += "Status: Online
                    " + if(T.z == userloc.z) + textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" + else + textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" + else + textout += "Status: Offline" + + janidata[++janidata.len] = list("field" = "[B.name]", "val" = textout) + + return janidata + +// Compiles the three lists used by GPS_access.tmpl +// The contents of the three lists are inherently related, so separating them into different procs would be largely redundant +/obj/item/weapon/commcard/proc/get_GPS_lists() + // GPS Access + var/intgps[0] // Gps devices within the commcard -- Allow tag edits, turning on/off, etc + var/extgps[0] // Gps devices not inside the commcard -- Print locations if a gps is on + var/stagps[0] // Gps net status, location, whether it's on, if it's got long range + var/obj/item/device/gps/cumulative = new(src) + cumulative.tracking = FALSE + cumulative.local_mode = TRUE // Won't detect long-range signals automatically + cumulative.long_range = FALSE + var/list/toggled_gps = list() // List of GPS units that are turned off before display_list() is called + + for(var/obj/item/device/gps/G in internal_devices) + var/gpsdata[0] + if(G.tracking && !G.emped) + cumulative.tracking = TRUE // Turn it on + if(G.long_range) + cumulative.long_range = TRUE // It can detect long-range + if(!G.local_mode) + cumulative.local_mode = FALSE // It is detecting long-range + + gpsdata["ref"] = "\ref[G]" + gpsdata["tag"] = G.gps_tag + gpsdata["power"] = G.tracking + gpsdata["local_mode"] = G.local_mode + gpsdata["long_range"] = G.long_range + gpsdata["hide_signal"] = G.hide_signal + gpsdata["can_hide"] = G.can_hide_signal + + intgps[++intgps.len] = gpsdata // Add it to the list + + if(G.tracking) + G.tracking = FALSE // Disable the internal gps units so they don't show up in the report + toggled_gps += G + + var/list/remote_gps = cumulative.display_list() // Fetch information for all units except the ones inside of this device + + for(var/obj/item/device/gps/G in toggled_gps) // Reenable any internal GPS units + G.tracking = TRUE + + stagps["enabled"] = cumulative.tracking + stagps["long_range_en"] = (cumulative.long_range && !cumulative.local_mode) + + stagps["my_area_name"] = remote_gps["my_area_name"] + stagps["curr_x"] = remote_gps["curr_x"] + stagps["curr_y"] = remote_gps["curr_y"] + stagps["curr_z"] = remote_gps["curr_z"] + stagps["curr_z_name"] = remote_gps["curr_z_name"] + + extgps = remote_gps["gps_list"] // Compiled by the GPS + + qdel(cumulative) // Don't want spare GPS units building up in the contents + + return list( + intgps, + extgps, + stagps + ) + +// Collects the current status of the supply shuttle +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 55 +/obj/item/weapon/commcard/proc/get_supply_shuttle_status() + var/shuttle_status[0] + var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle + if(shuttle) + if(shuttle.has_arrive_time()) + shuttle_status["location"] = "In transit" + shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT + shuttle_status["time"] = shuttle.eta_minutes() + + else + shuttle_status["time"] = 0 + if(shuttle.at_station()) + if(shuttle.shuttle_docking_controller) + switch(shuttle.shuttle_docking_controller.get_docking_status()) + if("docked") + shuttle_status["location"] = "Docked" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + if("undocked") + shuttle_status["location"] = "Undocked" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED + if("docking") + shuttle_status["location"] = "Docking" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKING + shuttle_status["force"] = shuttle.can_force() + if("undocking") + shuttle_status["location"] = "Undocking" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING + shuttle_status["force"] = shuttle.can_force() + + else + shuttle_status["location"] = "Station" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + + else + shuttle_status["location"] = "Away" + shuttle_status["mode"] = SUP_SHUTTLE_AWAY + + if(shuttle.can_launch()) + shuttle_status["launch"] = 1 + else if(shuttle.can_cancel()) + shuttle_status["launch"] = 2 + else + shuttle_status["launch"] = 0 + + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) + shuttle_status["engine"] = "Idle" + if(SHUTTLE_WARMUP) + shuttle_status["engine"] = "Warming up" + if(SHUTTLE_INTRANSIT) + shuttle_status["engine"] = "Engaged" + + else + shuttle["mode"] = SUP_SHUTTLE_ERROR + + return shuttle_status + +// Compiles the list of supply orders +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 130 +/obj/item/weapon/commcard/proc/get_supply_orders() + var/orders[0] + for(var/datum/supply_order/S in SSsupply.order_history) + orders[++orders.len] = list( + "ref" = "\ref[S]", + "status" = S.status, + "entries" = list( + list("field" = "Supply Pack", "entry" = S.name), + list("field" = "Cost", "entry" = S.cost), + list("field" = "Index", "entry" = S.index), + list("field" = "Reason", "entry" = S.comment), + list("field" = "Ordered by", "entry" = S.ordered_by), + list("field" = "Ordered at", "entry" = S.ordered_at), + list("field" = "Approved by", "entry" = S.approved_by), + list("field" = "Approved at", "entry" = S.approved_at) + ) + ) + + return orders + +// Compiles the list of supply export receipts +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 147 +/obj/item/weapon/commcard/proc/get_supply_receipts() + var/receipts[0] + for(var/datum/exported_crate/E in SSsupply.exported_crates) + receipts[++receipts.len] = list( + "ref" = "\ref[E]", + "contents" = E.contents, + "error" = E.contents["error"], + "title" = list( + list("field" = "Name", "entry" = E.name), + list("field" = "Value", "entry" = E.value) + ) + ) + return receipts + + +// Compiles the list of supply packs for the category currently stored in internal_data["supply_category"] +// Copied from /obj/machinery/computer/supplycomp/ui_interact(), +// code\game\machinery\computer\supply.dm, starting at line 147 +/obj/item/weapon/commcard/proc/get_supply_pack_list() + var/supply_packs[0] + for(var/pack_name in SSsupply.supply_pack) + var/datum/supply_pack/P = SSsupply.supply_pack[pack_name] + if(P.group == internal_data["supply_category"]) + var/list/pack = list( + "name" = P.name, + "cost" = P.cost, + "contraband" = P.contraband, + "manifest" = uniqueList(P.manifest), + "random" = P.num_contained, + "expand" = 0, + "ref" = "\ref[P]" + ) + + if(P in internal_data["supply_pack_expanded"]) + pack["expand"] = 1 + + supply_packs[++supply_packs.len] = pack + + return supply_packs + + +// Compiles miscellaneous data and permissions used by the supply template +/obj/item/weapon/commcard/proc/get_misc_supply_data() + return list( + "shuttle_auth" = (internal_data["supply_controls"] & SUP_SEND_SHUTTLE), + "order_auth" = (internal_data["supply_controls"] & SUP_ACCEPT_ORDERS), + "supply_points" = SSsupply.points, + "supply_categories" = all_supply_groups + ) + +/obj/item/weapon/commcard/proc/get_status_display() + return list( + "line1" = internal_data["stat_display_line1"], + "line2" = internal_data["stat_display_line2"], + "active_line1" = internal_data["stat_display_active1"], + "active_line2" = internal_data["stat_display_active2"], + "active" = internal_data["stat_display_special"] + ) + +/obj/item/weapon/commcard/proc/find_blast_doors() + var/target_doors[0] + for(var/obj/machinery/door/blast/B in machines) + if(B.id == internal_data["shuttle_door_code"]) + target_doors += B + + return target_doors diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index e5a27902b1..2f9249dd5d 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -1,185 +1,185 @@ -// Proc: receive_exonet_message() -// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received, -// text - message text to send if message is of type "text") -// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function. -/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text) - if(message == "voice") - if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator)) - if(origin_atom in voice_invites) - var/user = null - if(ismob(origin_atom.loc)) - user = origin_atom.loc - open_connection(user, origin_atom) - return - else if(origin_atom in voice_requests) - return //Spam prevention - else - request(origin_atom) - if(message == "ping") - if(network_visibility) - var/random = rand(200,350) - random = random / 10 - exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") - if(message == "text") - request_im(origin_atom, origin_address, text) - return - -// Proc: receive_exonet_message() -// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) -// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. -/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text) - if(message == "voice") - if(istype(origin_atom, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = origin_atom - if(src in comm.voice_invites) - comm.open_connection(src) - return - to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ - verb, and select that name to answer the call.") - src << 'sound/machines/defib_SafetyOn.ogg' - comm.voice_invites |= src - if(message == "ping") - if(client && client.prefs.communicator_visibility) - var/random = rand(450,700) - random = random / 10 - exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") - if(message == "text") - to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") - src << 'sound/machines/defib_safetyOff.ogg' - exonet_messages.Add("From [origin_atom]:
                    [text]") - return - -// Proc: request_im() -// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message) -// Description: Response to a communicator trying to message the device. -// Adds them to the list of people that have messaged this device and adds the message to the message list. -/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text) - var/who = null - if(isobserver(candidate)) - var/mob/observer/dead/ghost = candidate - who = ghost.name - im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) - else if(istype(candidate, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = candidate - who = comm.owner - comm.im_contacts |= src - im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) - else if(istype(candidate, /obj/item/integrated_circuit)) - var/obj/item/integrated_circuit/CIRC = candidate - who = CIRC - im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) - else return - - im_contacts |= candidate - - if(!who) - return - - if(ringer) - var/S - if(ttone in ttone_sound) - S = ttone_sound[ttone] - else - S = 'sound/machines/twobeep.ogg' - - playsound(src, S, 50, 1) - for (var/mob/O in hearers(2, loc)) - O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) - - alert_called = 1 - update_icon() - - //Search for holder of the device. - var/mob/living/L = null - if(loc && isliving(loc)) - L = loc - - if(L) - to_chat(L, "\icon[src][bicon(src)] Message from [who]: \"[text]\" (Reply)") - -// This is the only Topic the communicators really uses -/obj/item/device/communicator/Topic(href, href_list) - switch(href_list["action"]) - if("Reply") - var/obj/item/device/communicator/comm = locate(href_list["target"]) - var/message = tgui_input_text(usr, "Enter your message below.", "Reply") - - if(message) - exonet.send_message(comm.exonet.address, "text", message) - im_list += list(list("address" = exonet.address, "to_address" = comm.exonet.address, "im" = message)) - log_pda("(COMM: [src]) sent \"[message]\" to [exonet.get_atom_from_address(comm.exonet.address)]", usr) - to_chat(usr, "\icon[src][bicon(src)] Sent message to [istype(comm, /obj/item/device/communicator) ? comm.owner : comm.name], \"[message]\" (Reply)") - -// Verb: text_communicator() -// Parameters: None -// Description: Allows a ghost to send a text message to a communicator. -/mob/observer/dead/verb/text_communicator() - set category = "Ghost" - set name = "Text Communicator" - set desc = "If there is a communicator available, send a text message to it." - - if(ticker.current_state < GAME_STATE_PLAYING) - to_chat(src, "The game hasn't started yet!") - return - - if (!src.stat) - return - - if (usr != src) - return //something is terribly wrong - - for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. - if(src.client.prefs.real_name == L.real_name) - to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") - return - - var/obj/machinery/exonet_node/E = get_exonet_node() - if(!E || !E.on || !E.allow_external_communicators) - to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ - so your call can't go through.") - return - - var/list/choices = list() - for(var/obj/item/device/communicator/comm in all_communicators) - if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) - continue - choices.Add(comm) - - if(!choices.len) - to_chat(src, "There are no available communicators, sorry.") - return - - var/choice = tgui_input_list(src,"Send a text message to whom?", "Recipient Choice", choices) - if(choice) - var/obj/item/device/communicator/chosen_communicator = choice - var/mob/observer/dead/O = src - var/text_message = sanitize(tgui_input_text(src, "What do you want the message to say?", multiline = TRUE)) - if(text_message && O.exonet) - O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) - - to_chat(src, "You have sent '[text_message]' to [chosen_communicator].") - exonet_messages.Add("To [chosen_communicator]:
                    [text_message]") - log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) - for(var/mob/M in player_list) - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) - if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) - continue - if(M == src) - continue - M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]") - - - -// Verb: show_text_messages() -// Parameters: None -// Description: Lets ghosts review messages they've sent or received. -/mob/observer/dead/verb/show_text_messages() - set category = "Ghost" - set name = "Show Text Messages" - set desc = "Allows you to see exonet text messages you've sent and received." - - var/HTML = "Exonet Message Log" - for(var/line in exonet_messages) - HTML += line + "
                    " - HTML +="" - usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") +// Proc: receive_exonet_message() +// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received, +// text - message text to send if message is of type "text") +// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function. +/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text) + if(message == "voice") + if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator)) + if(origin_atom in voice_invites) + var/user = null + if(ismob(origin_atom.loc)) + user = origin_atom.loc + open_connection(user, origin_atom) + return + else if(origin_atom in voice_requests) + return //Spam prevention + else + request(origin_atom) + if(message == "ping") + if(network_visibility) + var/random = rand(200,350) + random = random / 10 + exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") + request_im(origin_atom, origin_address, text) + return + +// Proc: receive_exonet_message() +// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) +// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. +/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text) + if(message == "voice") + if(istype(origin_atom, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = origin_atom + if(src in comm.voice_invites) + comm.open_connection(src) + return + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ + verb, and select that name to answer the call.") + src << 'sound/machines/defib_SafetyOn.ogg' + comm.voice_invites |= src + if(message == "ping") + if(client && client.prefs.communicator_visibility) + var/random = rand(450,700) + random = random / 10 + exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") + src << 'sound/machines/defib_safetyOff.ogg' + exonet_messages.Add("From [origin_atom]:
                    [text]") + return + +// Proc: request_im() +// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message) +// Description: Response to a communicator trying to message the device. +// Adds them to the list of people that have messaged this device and adds the message to the message list. +/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text) + var/who = null + if(isobserver(candidate)) + var/mob/observer/dead/ghost = candidate + who = ghost.name + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.im_contacts |= src + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else if(istype(candidate, /obj/item/integrated_circuit)) + var/obj/item/integrated_circuit/CIRC = candidate + who = CIRC + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else return + + im_contacts |= candidate + + if(!who) + return + + if(ringer) + var/S + if(ttone in ttone_sound) + S = ttone_sound[ttone] + else + S = 'sound/machines/twobeep.ogg' + + playsound(src, S, 50, 1) + for (var/mob/O in hearers(2, loc)) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) + + alert_called = 1 + update_icon() + + //Search for holder of the device. + var/mob/living/L = null + if(loc && isliving(loc)) + L = loc + + if(L) + to_chat(L, "\icon[src][bicon(src)] Message from [who]: \"[text]\" (Reply)") + +// This is the only Topic the communicators really uses +/obj/item/device/communicator/Topic(href, href_list) + switch(href_list["action"]) + if("Reply") + var/obj/item/device/communicator/comm = locate(href_list["target"]) + var/message = tgui_input_text(usr, "Enter your message below.", "Reply") + + if(message) + exonet.send_message(comm.exonet.address, "text", message) + im_list += list(list("address" = exonet.address, "to_address" = comm.exonet.address, "im" = message)) + log_pda("(COMM: [src]) sent \"[message]\" to [exonet.get_atom_from_address(comm.exonet.address)]", usr) + to_chat(usr, "\icon[src][bicon(src)] Sent message to [istype(comm, /obj/item/device/communicator) ? comm.owner : comm.name], \"[message]\" (Reply)") + +// Verb: text_communicator() +// Parameters: None +// Description: Allows a ghost to send a text message to a communicator. +/mob/observer/dead/verb/text_communicator() + set category = "Ghost" + set name = "Text Communicator" + set desc = "If there is a communicator available, send a text message to it." + + if(ticker.current_state < GAME_STATE_PLAYING) + to_chat(src, "The game hasn't started yet!") + return + + if (!src.stat) + return + + if (usr != src) + return //something is terribly wrong + + for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. + if(src.client.prefs.real_name == L.real_name) + to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") + return + + var/obj/machinery/exonet_node/E = get_exonet_node() + if(!E || !E.on || !E.allow_external_communicators) + to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ + so your call can't go through.") + return + + var/list/choices = list() + for(var/obj/item/device/communicator/comm in all_communicators) + if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) + continue + choices.Add(comm) + + if(!choices.len) + to_chat(src, "There are no available communicators, sorry.") + return + + var/choice = tgui_input_list(src,"Send a text message to whom?", "Recipient Choice", choices) + if(choice) + var/obj/item/device/communicator/chosen_communicator = choice + var/mob/observer/dead/O = src + var/text_message = sanitize(tgui_input_text(src, "What do you want the message to say?", multiline = TRUE)) + if(text_message && O.exonet) + O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) + + to_chat(src, "You have sent '[text_message]' to [chosen_communicator].") + exonet_messages.Add("To [chosen_communicator]:
                    [text_message]") + log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) + for(var/mob/M in player_list) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) + continue + if(M == src) + continue + M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]") + + + +// Verb: show_text_messages() +// Parameters: None +// Description: Lets ghosts review messages they've sent or received. +/mob/observer/dead/verb/show_text_messages() + set category = "Ghost" + set name = "Show Text Messages" + set desc = "Allows you to see exonet text messages you've sent and received." + + var/HTML = "Exonet Message Log" + for(var/line in exonet_messages) + HTML += line + "
                    " + HTML +="" + usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm index eafd3105e0..bbf91d1ead 100644 --- a/code/game/objects/items/devices/communicator/phone.dm +++ b/code/game/objects/items/devices/communicator/phone.dm @@ -1,366 +1,366 @@ -// Proc: add_communicating() -// Parameters: 1 (comm - the communicator to add to communicating) -// Description: Used when this communicator gets a new communicator to relay say/me messages to -/obj/item/device/communicator/proc/add_communicating(obj/item/device/communicator/comm) - if(!comm || !istype(comm)) return - - communicating |= comm - listening_objects |= src - update_icon() - -// Proc: del_communicating() -// Parameters: 1 (comm - the communicator to remove from communicating) -// Description: Used when this communicator is being asked to stop relaying say/me messages to another -/obj/item/device/communicator/proc/del_communicating(obj/item/device/communicator/comm) - if(!comm || !istype(comm)) return - - communicating.Remove(comm) - update_icon() - -// Proc: open_connection() -// Parameters: 2 (user - the person who initiated the connecting being opened, candidate - the communicator or observer that will connect to the device) -// Description: Typechecks the candidate, then calls the correct proc for further connecting. -/obj/item/device/communicator/proc/open_connection(mob/user, var/atom/candidate) - if(isobserver(candidate)) - voice_invites.Remove(candidate) - open_connection_to_ghost(user, candidate) - else - if(istype(candidate, /obj/item/device/communicator)) - open_connection_to_communicator(user, candidate) - -// Proc: open_connection_to_communicator() -// Parameters: 2 (user - the person who initiated this and will be receiving feedback information, candidate - someone else's communicator) -// Description: Adds the candidate and src to each other's communicating lists, allowing messages seen by the devices to be relayed. -/obj/item/device/communicator/proc/open_connection_to_communicator(mob/user, var/atom/candidate) - if(!istype(candidate, /obj/item/device/communicator)) - return - var/obj/item/device/communicator/comm = candidate - voice_invites.Remove(candidate) - comm.voice_requests.Remove(src) - - if(user) - comm.visible_message("\icon[src][bicon(src)] Connecting to [src].") - to_chat(user, "\icon[src][bicon(src)] Attempting to call [comm].") - sleep(10) - to_chat(user, "\icon[src][bicon(src)] Dialing internally from [station_name()], [system_name()].") - sleep(20) //If they don't have an exonet something is very wrong and we want a runtime. - to_chat(user, "\icon[src][bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") - sleep(40) - to_chat(user, "\icon[src][bicon(src)] Connection to [comm] at [comm.exonet.address] established.") - comm.visible_message("\icon[src][bicon(src)] Connection to [src] at [exonet.address] established.") - sleep(20) - - src.add_communicating(comm) - comm.add_communicating(src) - -// Proc: open_connection_to_ghost() -// Parameters: 2 (user - the person who initiated this, candidate - the ghost that will be turned into a voice mob) -// Description: Pulls the candidate ghost from deadchat, makes a new voice mob, transfers their identity, then their client. -/obj/item/device/communicator/proc/open_connection_to_ghost(mob/user, var/mob/candidate) - if(!isobserver(candidate)) - return - //Handle moving the ghost into the new shell. - announce_ghost_joinleave(candidate, 0, "They are occupying a personal communications device now.") - voice_requests.Remove(candidate) - voice_invites.Remove(candidate) - var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the ghost is going to be. - new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. - //Do some simple logging since this is a tad risky as a concept. - var/msg = "[candidate && candidate.client ? "[candidate.client.key]" : "*no key*"] ([candidate]) has entered [src], triggered by \ - [user && user.client ? "[user.client.key]" : "*no key*"] ([user ? "[user]" : "*null*"]) at [x],[y],[z]. They have joined as [new_voice.name]." - message_admins(msg) - log_game(msg) - new_voice.mind = candidate.mind //Transfer the mind, if any. - new_voice.ckey = candidate.ckey //Finally, bring the client over. - voice_mobs.Add(new_voice) - listening_objects |= src - - var/obj/screen/blackness = new() //Makes a black screen, so the candidate can't see what's going on before actually 'connecting' to the communicator. - blackness.screen_loc = ui_entire_screen - blackness.icon = 'icons/effects/effects.dmi' - blackness.icon_state = "1" - blackness.mouse_opacity = 2 //Can't see anything! - new_voice.client.screen.Add(blackness) - - update_icon() - - //Now for some connection fluff. - if(user) - to_chat(user, "\icon[src][bicon(src)] Connecting to [candidate].") - to_chat(new_voice, "\icon[src][bicon(src)] Attempting to call [src].") - sleep(10) - to_chat(new_voice, "\icon[src][bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") - sleep(20) - to_chat(new_voice, "\icon[src][bicon(src)] Connecting to [station_name()] telecommunications array.") - sleep(40) - to_chat(new_voice, "\icon[src][bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") - sleep(20) - - //We're connected, no need to hide everything. - new_voice.client.screen.Remove(blackness) - qdel(blackness) - - to_chat(new_voice, "\icon[src][bicon(src)] Connection to [src] established.") - to_chat(new_voice, "To talk to the person on the other end of the call, just talk normally.") - to_chat(new_voice, "If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time.") - to_chat(new_voice, "Remember, your character does not know anything you've learned from observing!") - if(new_voice.mind) - new_voice.mind.assigned_role = "Disembodied Voice" - if(user) - to_chat(user, "\icon[src][bicon(src)] Your communicator is now connected to [candidate]'s communicator.") - -// Proc: close_connection() -// Parameters: 3 (user - the user who initiated the disconnect, target - the mob or device being disconnected, reason - string shown when disconnected) -// Description: Deletes specific voice_mobs or disconnects communicators, and shows a message to everyone when doing so. If target is null, all communicators -// and voice mobs are removed. -/obj/item/device/communicator/proc/close_connection(mob/user, var/atom/target, var/reason) - if(voice_mobs.len == 0 && communicating.len == 0) - return - - for(var/mob/living/voice/voice in voice_mobs) //Handle ghost-callers - if(target && voice != target) //If no target is inputted, it deletes all of them. - continue - to_chat(voice, "\icon[src][bicon(src)] [reason].") - visible_message("\icon[src][bicon(src)] [reason].") - voice_mobs.Remove(voice) - qdel(voice) - update_icon() - - for(var/obj/item/device/communicator/comm in communicating) //Now we handle real communicators. - if(target && comm != target) - continue - src.del_communicating(comm) - comm.del_communicating(src) - comm.visible_message("\icon[src][bicon(src)] [reason].") - visible_message("\icon[src][bicon(src)] [reason].") - if(comm.camera && video_source == comm.camera) //We hung up on the person on video - end_video() - if(camera && comm.video_source == camera) //We hung up on them while they were watching us - comm.end_video() - - if(voice_mobs.len == 0 && communicating.len == 0) - listening_objects.Remove(src) - -// Proc: request() -// Parameters: 1 (candidate - the ghost or communicator wanting to call the device) -// Description: Response to a communicator or observer trying to call the device. Adds them to the list of requesters -/obj/item/device/communicator/proc/request(var/atom/candidate) - if(candidate in voice_requests) - return - var/who = null - if(isobserver(candidate)) - who = candidate.name - else if(istype(candidate, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = candidate - who = comm.owner - comm.voice_invites |= src - - if(!who) - return - - voice_requests |= candidate - - if(ringer) - playsound(src, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(2, loc)) - O.show_message(text("\icon[src][bicon(src)] *beep*")) - - alert_called = 1 - update_icon() - - //Search for holder of the device. - var/mob/living/L = null - if(loc && isliving(loc)) - L = loc - - if(L) - to_chat(L, "\icon[src][bicon(src)] Communications request from [who].") - -// Proc: del_request() -// Parameters: 1 (candidate - the ghost or communicator to be declined) -// Description: Declines a request and cleans up both ends -/obj/item/device/communicator/proc/del_request(var/atom/candidate) - if(!(candidate in voice_requests)) - return - - if(isobserver(candidate)) - to_chat(candidate, "Your communicator call request was declined.") - else if(istype(candidate, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = candidate - comm.voice_invites -= src - - voice_requests -= candidate - - //Search for holder of our device. - var/mob/living/us = null - if(loc && isliving(loc)) - us = loc - - if(us) - to_chat(us, "\icon[src][bicon(src)] Declined request.") - -// Proc: see_emote() -// Parameters: 2 (M - the mob the emote originated from, text - the emote's contents) -// Description: Relays the emote to all linked communicators. -/obj/item/device/communicator/see_emote(mob/living/M, text) - var/rendered = "\icon[src][bicon(src)] [text]" - for(var/obj/item/device/communicator/comm in communicating) - var/turf/T = get_turf(comm) - if(!T) return - //VOREStation Edit Start for commlinks - var/list/mobs_to_relay - if(istype(comm,/obj/item/device/communicator/commlink)) - var/obj/item/device/communicator/commlink/CL = comm - mobs_to_relay = list(CL.nif.human) - else - var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display - mobs_to_relay = in_range["mobs"] - //VOREStation Edit End - - for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other. - var/dst = get_dist(get_turf(mob),get_turf(comm)) - if(dst <= video_range) - mob.show_message(rendered) - else - to_chat(mob, "You can barely see some movement on \the [src]'s display.") - - ..() - -// Proc: hear_talk() -// Parameters: 3 (M - the mob the speech originated from, -// list/message_pieces - what is being said w/ baked languages, -// verb - the word used to describe how text is being said) -// Description: Relays the speech to all linked communicators. -/obj/item/device/communicator/hear_talk(mob/M, list/message_pieces, verb) - for(var/obj/item/device/communicator/comm in communicating) - var/turf/T = get_turf(comm) - if(!T) return - //VOREStation Edit Start for commlinks - var/list/mobs_to_relay - if(istype(comm,/obj/item/device/communicator/commlink)) - var/obj/item/device/communicator/commlink/CL = comm - mobs_to_relay = list(CL.nif.human) - else - var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display - mobs_to_relay = in_range["mobs"] - //VOREStation Edit End - - for(var/mob/mob in mobs_to_relay) - var/list/combined = mob.combine_message(message_pieces, verb, M) - var/message = combined["formatted"] - var/name_used = M.GetVoice() - var/rendered = null - rendered = "\icon[src][bicon(src)] [name_used] [message]" - mob.show_message(rendered, 2) - -// Proc: show_message() -// Parameters: 4 (msg - the message, type - number to determine if message is visible or audible, alt - unknown, alt_type - unknown) -// Description: Relays the message to all linked communicators. -/obj/item/device/communicator/show_message(msg, type, alt, alt_type) - var/rendered = "\icon[src][bicon(src)] [msg]" - for(var/obj/item/device/communicator/comm in communicating) - var/turf/T = get_turf(comm) - if(!T) return - var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) - var/list/mobs_to_relay = in_range["mobs"] - - for(var/mob/mob in mobs_to_relay) - mob.show_message(rendered) - ..() - -// Verb: join_as_voice() -// Parameters: None -// Description: Allows ghosts to call communicators, if they meet all the requirements. -/mob/observer/dead/verb/join_as_voice() - set category = "Ghost" - set name = "Call Communicator" - set desc = "If there is a communicator available, send a request to speak through it. This will reset your respawn timer, if someone picks up." - - if(ticker.current_state < GAME_STATE_PLAYING) - to_chat(src, "The game hasn't started yet!") - return - - if (!src.stat) - return - - if (usr != src) - return //something is terribly wrong - - var/confirm = tgui_alert(src, "Would you like to talk as [src.client.prefs.real_name], over a communicator? This will reset your respawn timer, if someone answers.", "Join as Voice?", list("Yes","No")) - if(confirm == "No") - return - - if(config.antag_hud_restricted && has_enabled_antagHUD == 1) - to_chat(src, "You have used the antagHUD and cannot respawn or use communicators!") - return - - for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. - if(src.client.prefs.real_name == L.real_name) - to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") - return - - var/obj/machinery/exonet_node/E = get_exonet_node() - if(!E || !E.on || !E.allow_external_communicators) - to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ - so your call can't go through.") - return - - var/list/choices = list() - for(var/obj/item/device/communicator/comm in all_communicators) - if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) - continue - choices.Add(comm) - - if(!choices.len) - to_chat(src , "There are no available communicators, sorry.") - return - - var/choice = tgui_input_list(src,"Send a voice request to whom?", "Recipient Choice", choices) - if(choice) - var/obj/item/device/communicator/chosen_communicator = choice - var/mob/observer/dead/O = src - if(O.exonet) - O.exonet.send_message(chosen_communicator.exonet.address, "voice") - - to_chat(src, "A communications request has been sent to [chosen_communicator]. Now you need to wait until someone answers.") - -// Proc: connect_video() -// Parameters: user - the mob doing the viewing of video, comm - the communicator at the far end -// Description: Sets up a videocall and puts the first view into it using watch_video, and updates the icon -/obj/item/device/communicator/proc/connect_video(mob/user,obj/item/device/communicator/comm) - if((!user) || (!comm) || user.stat) return //KO or dead, or already in a video - - if(video_source) //Already in a video - to_chat(user, "You are already connected to a video call!") - return - - if(user.blinded) //User is blinded - to_chat(user, "You cannot see well enough to do that!") - return - - if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something - to_chat(user, "\icon[src][bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") - return - - to_chat(user, "\icon[src][bicon(src)] Attempting to start video over existing call.") - sleep(30) - to_chat(user, "\icon[src][bicon(src)] Please wait...") - - video_source = comm.camera - comm.visible_message("\icon[src][bicon(src)] New video connection from [comm].") - update_active_camera_screen() - GLOB.moved_event.register(video_source, src, PROC_REF(update_active_camera_screen)) - update_icon() - -// Proc: end_video() -// Parameters: reason - the text reason to print for why it ended -// Description: Ends the video call by clearing video_source -/obj/item/device/communicator/proc/end_video(var/reason) - GLOB.moved_event.unregister(video_source, src, PROC_REF(update_active_camera_screen)) - show_static() - video_source = null - - . = "\icon[src][bicon(src)] [reason ? reason : "Video session ended"]." - - visible_message(.) - update_icon() +// Proc: add_communicating() +// Parameters: 1 (comm - the communicator to add to communicating) +// Description: Used when this communicator gets a new communicator to relay say/me messages to +/obj/item/device/communicator/proc/add_communicating(obj/item/device/communicator/comm) + if(!comm || !istype(comm)) return + + communicating |= comm + listening_objects |= src + update_icon() + +// Proc: del_communicating() +// Parameters: 1 (comm - the communicator to remove from communicating) +// Description: Used when this communicator is being asked to stop relaying say/me messages to another +/obj/item/device/communicator/proc/del_communicating(obj/item/device/communicator/comm) + if(!comm || !istype(comm)) return + + communicating.Remove(comm) + update_icon() + +// Proc: open_connection() +// Parameters: 2 (user - the person who initiated the connecting being opened, candidate - the communicator or observer that will connect to the device) +// Description: Typechecks the candidate, then calls the correct proc for further connecting. +/obj/item/device/communicator/proc/open_connection(mob/user, var/atom/candidate) + if(isobserver(candidate)) + voice_invites.Remove(candidate) + open_connection_to_ghost(user, candidate) + else + if(istype(candidate, /obj/item/device/communicator)) + open_connection_to_communicator(user, candidate) + +// Proc: open_connection_to_communicator() +// Parameters: 2 (user - the person who initiated this and will be receiving feedback information, candidate - someone else's communicator) +// Description: Adds the candidate and src to each other's communicating lists, allowing messages seen by the devices to be relayed. +/obj/item/device/communicator/proc/open_connection_to_communicator(mob/user, var/atom/candidate) + if(!istype(candidate, /obj/item/device/communicator)) + return + var/obj/item/device/communicator/comm = candidate + voice_invites.Remove(candidate) + comm.voice_requests.Remove(src) + + if(user) + comm.visible_message("\icon[src][bicon(src)] Connecting to [src].") + to_chat(user, "\icon[src][bicon(src)] Attempting to call [comm].") + sleep(10) + to_chat(user, "\icon[src][bicon(src)] Dialing internally from [station_name()], [system_name()].") + sleep(20) //If they don't have an exonet something is very wrong and we want a runtime. + to_chat(user, "\icon[src][bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") + sleep(40) + to_chat(user, "\icon[src][bicon(src)] Connection to [comm] at [comm.exonet.address] established.") + comm.visible_message("\icon[src][bicon(src)] Connection to [src] at [exonet.address] established.") + sleep(20) + + src.add_communicating(comm) + comm.add_communicating(src) + +// Proc: open_connection_to_ghost() +// Parameters: 2 (user - the person who initiated this, candidate - the ghost that will be turned into a voice mob) +// Description: Pulls the candidate ghost from deadchat, makes a new voice mob, transfers their identity, then their client. +/obj/item/device/communicator/proc/open_connection_to_ghost(mob/user, var/mob/candidate) + if(!isobserver(candidate)) + return + //Handle moving the ghost into the new shell. + announce_ghost_joinleave(candidate, 0, "They are occupying a personal communications device now.") + voice_requests.Remove(candidate) + voice_invites.Remove(candidate) + var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the ghost is going to be. + new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. + //Do some simple logging since this is a tad risky as a concept. + var/msg = "[candidate && candidate.client ? "[candidate.client.key]" : "*no key*"] ([candidate]) has entered [src], triggered by \ + [user && user.client ? "[user.client.key]" : "*no key*"] ([user ? "[user]" : "*null*"]) at [x],[y],[z]. They have joined as [new_voice.name]." + message_admins(msg) + log_game(msg) + new_voice.mind = candidate.mind //Transfer the mind, if any. + new_voice.ckey = candidate.ckey //Finally, bring the client over. + voice_mobs.Add(new_voice) + listening_objects |= src + + var/obj/screen/blackness = new() //Makes a black screen, so the candidate can't see what's going on before actually 'connecting' to the communicator. + blackness.screen_loc = ui_entire_screen + blackness.icon = 'icons/effects/effects.dmi' + blackness.icon_state = "1" + blackness.mouse_opacity = 2 //Can't see anything! + new_voice.client.screen.Add(blackness) + + update_icon() + + //Now for some connection fluff. + if(user) + to_chat(user, "\icon[src][bicon(src)] Connecting to [candidate].") + to_chat(new_voice, "\icon[src][bicon(src)] Attempting to call [src].") + sleep(10) + to_chat(new_voice, "\icon[src][bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") + sleep(20) + to_chat(new_voice, "\icon[src][bicon(src)] Connecting to [station_name()] telecommunications array.") + sleep(40) + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") + sleep(20) + + //We're connected, no need to hide everything. + new_voice.client.screen.Remove(blackness) + qdel(blackness) + + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [src] established.") + to_chat(new_voice, "To talk to the person on the other end of the call, just talk normally.") + to_chat(new_voice, "If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time.") + to_chat(new_voice, "Remember, your character does not know anything you've learned from observing!") + if(new_voice.mind) + new_voice.mind.assigned_role = "Disembodied Voice" + if(user) + to_chat(user, "\icon[src][bicon(src)] Your communicator is now connected to [candidate]'s communicator.") + +// Proc: close_connection() +// Parameters: 3 (user - the user who initiated the disconnect, target - the mob or device being disconnected, reason - string shown when disconnected) +// Description: Deletes specific voice_mobs or disconnects communicators, and shows a message to everyone when doing so. If target is null, all communicators +// and voice mobs are removed. +/obj/item/device/communicator/proc/close_connection(mob/user, var/atom/target, var/reason) + if(voice_mobs.len == 0 && communicating.len == 0) + return + + for(var/mob/living/voice/voice in voice_mobs) //Handle ghost-callers + if(target && voice != target) //If no target is inputted, it deletes all of them. + continue + to_chat(voice, "\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") + voice_mobs.Remove(voice) + qdel(voice) + update_icon() + + for(var/obj/item/device/communicator/comm in communicating) //Now we handle real communicators. + if(target && comm != target) + continue + src.del_communicating(comm) + comm.del_communicating(src) + comm.visible_message("\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") + if(comm.camera && video_source == comm.camera) //We hung up on the person on video + end_video() + if(camera && comm.video_source == camera) //We hung up on them while they were watching us + comm.end_video() + + if(voice_mobs.len == 0 && communicating.len == 0) + listening_objects.Remove(src) + +// Proc: request() +// Parameters: 1 (candidate - the ghost or communicator wanting to call the device) +// Description: Response to a communicator or observer trying to call the device. Adds them to the list of requesters +/obj/item/device/communicator/proc/request(var/atom/candidate) + if(candidate in voice_requests) + return + var/who = null + if(isobserver(candidate)) + who = candidate.name + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.voice_invites |= src + + if(!who) + return + + voice_requests |= candidate + + if(ringer) + playsound(src, 'sound/machines/twobeep.ogg', 50, 1) + for (var/mob/O in hearers(2, loc)) + O.show_message(text("\icon[src][bicon(src)] *beep*")) + + alert_called = 1 + update_icon() + + //Search for holder of the device. + var/mob/living/L = null + if(loc && isliving(loc)) + L = loc + + if(L) + to_chat(L, "\icon[src][bicon(src)] Communications request from [who].") + +// Proc: del_request() +// Parameters: 1 (candidate - the ghost or communicator to be declined) +// Description: Declines a request and cleans up both ends +/obj/item/device/communicator/proc/del_request(var/atom/candidate) + if(!(candidate in voice_requests)) + return + + if(isobserver(candidate)) + to_chat(candidate, "Your communicator call request was declined.") + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + comm.voice_invites -= src + + voice_requests -= candidate + + //Search for holder of our device. + var/mob/living/us = null + if(loc && isliving(loc)) + us = loc + + if(us) + to_chat(us, "\icon[src][bicon(src)] Declined request.") + +// Proc: see_emote() +// Parameters: 2 (M - the mob the emote originated from, text - the emote's contents) +// Description: Relays the emote to all linked communicators. +/obj/item/device/communicator/see_emote(mob/living/M, text) + var/rendered = "\icon[src][bicon(src)] [text]" + for(var/obj/item/device/communicator/comm in communicating) + var/turf/T = get_turf(comm) + if(!T) return + //VOREStation Edit Start for commlinks + var/list/mobs_to_relay + if(istype(comm,/obj/item/device/communicator/commlink)) + var/obj/item/device/communicator/commlink/CL = comm + mobs_to_relay = list(CL.nif.human) + else + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display + mobs_to_relay = in_range["mobs"] + //VOREStation Edit End + + for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other. + var/dst = get_dist(get_turf(mob),get_turf(comm)) + if(dst <= video_range) + mob.show_message(rendered) + else + to_chat(mob, "You can barely see some movement on \the [src]'s display.") + + ..() + +// Proc: hear_talk() +// Parameters: 3 (M - the mob the speech originated from, +// list/message_pieces - what is being said w/ baked languages, +// verb - the word used to describe how text is being said) +// Description: Relays the speech to all linked communicators. +/obj/item/device/communicator/hear_talk(mob/M, list/message_pieces, verb) + for(var/obj/item/device/communicator/comm in communicating) + var/turf/T = get_turf(comm) + if(!T) return + //VOREStation Edit Start for commlinks + var/list/mobs_to_relay + if(istype(comm,/obj/item/device/communicator/commlink)) + var/obj/item/device/communicator/commlink/CL = comm + mobs_to_relay = list(CL.nif.human) + else + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display + mobs_to_relay = in_range["mobs"] + //VOREStation Edit End + + for(var/mob/mob in mobs_to_relay) + var/list/combined = mob.combine_message(message_pieces, verb, M) + var/message = combined["formatted"] + var/name_used = M.GetVoice() + var/rendered = null + rendered = "\icon[src][bicon(src)] [name_used] [message]" + mob.show_message(rendered, 2) + +// Proc: show_message() +// Parameters: 4 (msg - the message, type - number to determine if message is visible or audible, alt - unknown, alt_type - unknown) +// Description: Relays the message to all linked communicators. +/obj/item/device/communicator/show_message(msg, type, alt, alt_type) + var/rendered = "\icon[src][bicon(src)] [msg]" + for(var/obj/item/device/communicator/comm in communicating) + var/turf/T = get_turf(comm) + if(!T) return + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) + var/list/mobs_to_relay = in_range["mobs"] + + for(var/mob/mob in mobs_to_relay) + mob.show_message(rendered) + ..() + +// Verb: join_as_voice() +// Parameters: None +// Description: Allows ghosts to call communicators, if they meet all the requirements. +/mob/observer/dead/verb/join_as_voice() + set category = "Ghost" + set name = "Call Communicator" + set desc = "If there is a communicator available, send a request to speak through it. This will reset your respawn timer, if someone picks up." + + if(ticker.current_state < GAME_STATE_PLAYING) + to_chat(src, "The game hasn't started yet!") + return + + if (!src.stat) + return + + if (usr != src) + return //something is terribly wrong + + var/confirm = tgui_alert(src, "Would you like to talk as [src.client.prefs.real_name], over a communicator? This will reset your respawn timer, if someone answers.", "Join as Voice?", list("Yes","No")) + if(confirm == "No") + return + + if(config.antag_hud_restricted && has_enabled_antagHUD == 1) + to_chat(src, "You have used the antagHUD and cannot respawn or use communicators!") + return + + for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. + if(src.client.prefs.real_name == L.real_name) + to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") + return + + var/obj/machinery/exonet_node/E = get_exonet_node() + if(!E || !E.on || !E.allow_external_communicators) + to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ + so your call can't go through.") + return + + var/list/choices = list() + for(var/obj/item/device/communicator/comm in all_communicators) + if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) + continue + choices.Add(comm) + + if(!choices.len) + to_chat(src , "There are no available communicators, sorry.") + return + + var/choice = tgui_input_list(src,"Send a voice request to whom?", "Recipient Choice", choices) + if(choice) + var/obj/item/device/communicator/chosen_communicator = choice + var/mob/observer/dead/O = src + if(O.exonet) + O.exonet.send_message(chosen_communicator.exonet.address, "voice") + + to_chat(src, "A communications request has been sent to [chosen_communicator]. Now you need to wait until someone answers.") + +// Proc: connect_video() +// Parameters: user - the mob doing the viewing of video, comm - the communicator at the far end +// Description: Sets up a videocall and puts the first view into it using watch_video, and updates the icon +/obj/item/device/communicator/proc/connect_video(mob/user,obj/item/device/communicator/comm) + if((!user) || (!comm) || user.stat) return //KO or dead, or already in a video + + if(video_source) //Already in a video + to_chat(user, "You are already connected to a video call!") + return + + if(user.blinded) //User is blinded + to_chat(user, "You cannot see well enough to do that!") + return + + if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something + to_chat(user, "\icon[src][bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") + return + + to_chat(user, "\icon[src][bicon(src)] Attempting to start video over existing call.") + sleep(30) + to_chat(user, "\icon[src][bicon(src)] Please wait...") + + video_source = comm.camera + comm.visible_message("\icon[src][bicon(src)] New video connection from [comm].") + update_active_camera_screen() + GLOB.moved_event.register(video_source, src, PROC_REF(update_active_camera_screen)) + update_icon() + +// Proc: end_video() +// Parameters: reason - the text reason to print for why it ended +// Description: Ends the video call by clearing video_source +/obj/item/device/communicator/proc/end_video(var/reason) + GLOB.moved_event.unregister(video_source, src, PROC_REF(update_active_camera_screen)) + show_static() + video_source = null + + . = "\icon[src][bicon(src)] [reason ? reason : "Video session ended"]." + + visible_message(.) + update_icon() diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 8bfcc03454..f97ab7db0c 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -1,45 +1,45 @@ -/** - * Multitool -- A multitool is used for hacking electronic devices. - * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. - * - */ - -/obj/item/device/debugger - name = "debugger" - desc = "Used to debug electronic equipment." - icon = 'icons/obj/hacktool.dmi' - icon_state = "hacktool-g" - force = 5.0 - w_class = ITEMSIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - - matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage - -/obj/item/device/debugger/is_used_on(obj/O, mob/user) - if(istype(O, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = O - if(A.emagged || A.hacker) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 - if(istype(O, /obj/machinery/door)) - var/obj/machinery/door/D = O - if(D.operating == -1) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 - else if(istype(O, /obj/machinery)) - var/obj/machinery/A = O - if(A.emagged) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 +/** + * Multitool -- A multitool is used for hacking electronic devices. + * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. + * + */ + +/obj/item/device/debugger + name = "debugger" + desc = "Used to debug electronic equipment." + icon = 'icons/obj/hacktool.dmi' + icon_state = "hacktool-g" + force = 5.0 + w_class = ITEMSIZE_SMALL + throwforce = 5.0 + throw_range = 15 + throw_speed = 3 + desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." + + matter = list(MAT_STEEL = 50,MAT_GLASS = 20) + + origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage + +/obj/item/device/debugger/is_used_on(obj/O, mob/user) + if(istype(O, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = O + if(A.emagged || A.hacker) + to_chat(user, "There is a software error with the device.") + else + to_chat(user, "The device's software appears to be fine.") + return 1 + if(istype(O, /obj/machinery/door)) + var/obj/machinery/door/D = O + if(D.operating == -1) + to_chat(user, "There is a software error with the device.") + else + to_chat(user, "The device's software appears to be fine.") + return 1 + else if(istype(O, /obj/machinery)) + var/obj/machinery/A = O + if(A.emagged) + to_chat(user, "There is a software error with the device.") + else + to_chat(user, "The device's software appears to be fine.") + return 1 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 4e692b3347..5fb6a4ac84 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -1,321 +1,321 @@ -/obj/item/device/flash - name = "flash" - desc = "Used for blinding and disorienting." - icon_state = "flash" - item_state = "flashtool" - throwforce = 5 - w_class = ITEMSIZE_SMALL - throw_speed = 4 - throw_range = 10 - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) - - var/times_used = 0 //Number of times it's been used. - var/broken = FALSE //Is the flash burnt out? - var/last_used = 0 //last world.time it was used. - var/max_flashes = 10 // How many times the flash can be used before needing to self recharge. - var/halloss_per_flash = 30 - var/break_mod = 3 // The percent to break increased by every use on the flash. - - var/can_break = TRUE // Can the flash break? - var/can_repair = FALSE // Can you repair the flash? - var/repairing = FALSE // Are we repairing right now? - - var/safe_flashes = 2 // How many flashes are kept in 1% breakchance? - - var/charge_only = FALSE // Does the flash run purely on charge? - - var/base_icon = "flash" - - var/obj/item/weapon/cell/power_supply //What type of power cell this uses - var/charge_cost = 30 //How much energy is needed to flash. - var/use_external_power = FALSE // Do we use charge from an external source? - - var/cell_type = /obj/item/weapon/cell/device - -/obj/item/device/flash/Initialize() - . = ..() - power_supply = new cell_type(src) - -/obj/item/device/flash/attackby(var/obj/item/W, var/mob/user) - if(W.has_tool_quality(TOOL_SCREWDRIVER) && broken) - if(repairing) - to_chat(user, "\The [src] is already being repaired!") - return - user.visible_message("\The [user] starts trying to repair \the [src]'s bulb.") - repairing = TRUE - if(do_after(user, (40 SECONDS + rand(0, 20 SECONDS)) * W.toolspeed) && can_repair) - if(prob(30)) - user.visible_message("\The [user] successfully repairs \the [src]!") - broken = FALSE - update_icon() - playsound(src, W.usesound, 50, 1) - else - user.visible_message("\The [user] fails to repair \the [src].") - repairing = FALSE - else - ..() - -/obj/item/device/flash/update_icon() - var/obj/item/weapon/cell/battery = power_supply - - if(use_external_power) - battery = get_external_power_supply() - - if(broken || !battery || battery.charge < charge_cost) - icon_state = "[base_icon]burnt" - else - icon_state = "[base_icon]" - return - -/obj/item/device/flash/get_cell() - return power_supply - -/obj/item/device/flash/proc/get_external_power_supply() - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - return R.cell - if(istype(src.loc, /obj/item/rig_module)) - var/obj/item/rig_module/module = src.loc - if(module.holder && module.holder.wearer) - var/mob/living/carbon/human/H = module.holder.wearer - if(istype(H) && H.get_rig()) - var/obj/item/weapon/rig/suit = H.get_rig() - if(istype(suit)) - return suit.cell - return null - -/obj/item/device/flash/proc/clown_check(var/mob/user) - if(user && (CLUMSY in user.mutations) && prob(50)) - to_chat(user, "\The [src] slips out of your hand.") - user.drop_item() - return 0 - return 1 - -/obj/item/device/flash/proc/flash_recharge() - //Every ten seconds the flash doesn't get used, the times_used variable goes down by one, making the flash less likely to burn out, - // as well as being able to flash more before reaching max_flashes cap. - for(var/i=0, i < max_flashes, i++) - if(last_used + 10 SECONDS > world.time) - break - - else if(use_external_power) - var/obj/item/weapon/cell/external = get_external_power_supply() - if(!external || !external.use(charge_cost)) //Take power from the borg or rig! - break - - else if(!power_supply || !power_supply.checked_use(charge_cost)) - break - - last_used += 10 SECONDS - times_used-- - - last_used = world.time - times_used = max(0,round(times_used)) //sanity - update_icon() - -// Returns true if the device can flash. -/obj/item/device/flash/proc/check_capacitor(var/mob/user) - //spamming the flash before it's fully charged (60 seconds) increases the chance of it breaking - //It will never break on the first use. - var/obj/item/weapon/cell/battery = power_supply - - if(use_external_power) - battery = get_external_power_supply() - - if(times_used <= max_flashes && battery && battery.charge >= charge_cost) - last_used = world.time - if(prob( max(0, times_used - safe_flashes) * 2 + (times_used >= safe_flashes)) && can_break) //if you use it 10 times in a minute it has a 30% chance to break. - broken = TRUE - if(user) - to_chat(user, "The bulb has burnt out!") - update_icon() - return FALSE - else - times_used++ - update_icon() - return TRUE - else if(!charge_only) //can only use it 10 times a minute, unless it runs purely on charge. - if(user) - update_icon() - to_chat(user, "click") - playsound(src, 'sound/weapons/empty.ogg', 80, 1) - return FALSE - else if(battery && battery.checked_use(charge_cost + (round(charge_cost / 4) * max(0, times_used - max_flashes)))) // Using over your maximum flashes starts taking more charge per added flash. - times_used++ - update_icon() - return TRUE - -//attack_as_weapon -/obj/item/device/flash/attack(mob/living/M, mob/living/user, var/target_zone) - if(!user || !M) return //sanity - - add_attack_logs(user,M,"Flashed (attempt) with [src]") - - user.setClickCooldown(user.get_attack_speed(src)) - user.do_attack_animation(M) - - if(!clown_check(user)) return - if(broken) - to_chat(user, "\The [src] is broken.") - return - - flash_recharge() - - if(!check_capacitor(user)) - return - - playsound(src, 'sound/weapons/flash.ogg', 100, 1) - var/flashfail = 0 - - //VOREStation Add - NIF - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION)) - flashfail = 1 - H.nif.notify("High intensity light detected, and blocked!",TRUE) - //VOREStation Add End - - if(iscarbon(M) && !flashfail) //VOREStation Add - NIF - var/mob/living/carbon/C = M - if(C.stat != DEAD) - var/safety = C.eyecheck() - if(safety <= 0) - var/flash_strength = 10 //Vorestation edit, making flashes behave the same as flash rounds - if(ishuman(C)) - var/mob/living/carbon/human/H = C - flash_strength *= H.species.flash_mod - - if(flash_strength > 0) - H.Confuse(flash_strength + 5) - H.Blind(flash_strength) - H.eye_blurry = max(H.eye_blurry, flash_strength + 5) - H.flash_eyes() - H.adjustHalLoss(halloss_per_flash * (flash_strength / 5)) // Should take four flashes to stun. - H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns") - - else - flashfail = 1 - - else if(issilicon(M)) - flashfail = 0 - var/mob/living/silicon/S = M - if(isrobot(S)) - var/mob/living/silicon/robot/R = S - if(R.has_active_type(/obj/item/borg/combat/shield)) - var/obj/item/borg/combat/shield/shield = locate() in R - if(shield) - if(shield.active) - shield.adjust_flash_count(R, 1) - flashfail = 1 - else - flashfail = 1 - - if(isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - qdel(animation) - - if(!flashfail) - flick("flash2", src) - if(!issilicon(M)) - - user.visible_message("[user] blinds [M] with the flash!") - else - - user.visible_message("[user] overloads [M]'s sensors with the flash!") - M.Weaken(rand(5,10)) - else - - user.visible_message("[user] fails to blind [M] with the flash!") - - return - - - - -/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) - if(!user || !clown_check(user)) return - - user.setClickCooldown(user.get_attack_speed(src)) - - if(broken) - user.show_message("The [src.name] is broken", 2) - return - - flash_recharge() - - if(!check_capacitor(user)) - return - - playsound(src, 'sound/weapons/flash.ogg', 100, 1) - flick("flash2", src) - if(user && isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - qdel(animation) - - for(var/mob/living/carbon/C in oviewers(3, null)) - var/safety = C.eyecheck() - if(!safety) - if(!C.blinded) - C.flash_eyes() - - return - -/obj/item/device/flash/emp_act(severity) - if(broken) return - flash_recharge() - if(!check_capacitor()) - return - - if(istype(loc, /mob/living/carbon)) - var/mob/living/carbon/C = loc - var/safety = C.eyecheck() - if(safety <= 0) - C.adjustHalLoss(halloss_per_flash) - //C.Weaken(10) - C.flash_eyes() - for(var/mob/M in viewers(C, null)) - M.show_message("[C] is blinded by the flash!") - ..() - -/obj/item/device/flash/synthetic - name = "synthetic flash" - desc = "When a problem arises, SCIENCE is the solution." - icon_state = "sflash" - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) - base_icon = "sflash" - can_repair = FALSE - -//attack_as_weapon -/obj/item/device/flash/synthetic/attack(mob/living/M, mob/living/user, var/target_zone) - ..() - if(!broken) - broken = 1 - to_chat(user, "The bulb has burnt out!") - update_icon() - -/obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) - ..() - if(!broken) - broken = 1 - to_chat(user, "The bulb has burnt out!") - update_icon() - -/obj/item/device/flash/robot - name = "mounted flash" - can_break = FALSE - use_external_power = TRUE - charge_only = TRUE +/obj/item/device/flash + name = "flash" + desc = "Used for blinding and disorienting." + icon_state = "flash" + item_state = "flashtool" + throwforce = 5 + w_class = ITEMSIZE_SMALL + throw_speed = 4 + throw_range = 10 + origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) + + var/times_used = 0 //Number of times it's been used. + var/broken = FALSE //Is the flash burnt out? + var/last_used = 0 //last world.time it was used. + var/max_flashes = 10 // How many times the flash can be used before needing to self recharge. + var/halloss_per_flash = 30 + var/break_mod = 3 // The percent to break increased by every use on the flash. + + var/can_break = TRUE // Can the flash break? + var/can_repair = FALSE // Can you repair the flash? + var/repairing = FALSE // Are we repairing right now? + + var/safe_flashes = 2 // How many flashes are kept in 1% breakchance? + + var/charge_only = FALSE // Does the flash run purely on charge? + + var/base_icon = "flash" + + var/obj/item/weapon/cell/power_supply //What type of power cell this uses + var/charge_cost = 30 //How much energy is needed to flash. + var/use_external_power = FALSE // Do we use charge from an external source? + + var/cell_type = /obj/item/weapon/cell/device + +/obj/item/device/flash/Initialize() + . = ..() + power_supply = new cell_type(src) + +/obj/item/device/flash/attackby(var/obj/item/W, var/mob/user) + if(W.has_tool_quality(TOOL_SCREWDRIVER) && broken) + if(repairing) + to_chat(user, "\The [src] is already being repaired!") + return + user.visible_message("\The [user] starts trying to repair \the [src]'s bulb.") + repairing = TRUE + if(do_after(user, (40 SECONDS + rand(0, 20 SECONDS)) * W.toolspeed) && can_repair) + if(prob(30)) + user.visible_message("\The [user] successfully repairs \the [src]!") + broken = FALSE + update_icon() + playsound(src, W.usesound, 50, 1) + else + user.visible_message("\The [user] fails to repair \the [src].") + repairing = FALSE + else + ..() + +/obj/item/device/flash/update_icon() + var/obj/item/weapon/cell/battery = power_supply + + if(use_external_power) + battery = get_external_power_supply() + + if(broken || !battery || battery.charge < charge_cost) + icon_state = "[base_icon]burnt" + else + icon_state = "[base_icon]" + return + +/obj/item/device/flash/get_cell() + return power_supply + +/obj/item/device/flash/proc/get_external_power_supply() + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + return R.cell + if(istype(src.loc, /obj/item/rig_module)) + var/obj/item/rig_module/module = src.loc + if(module.holder && module.holder.wearer) + var/mob/living/carbon/human/H = module.holder.wearer + if(istype(H) && H.get_rig()) + var/obj/item/weapon/rig/suit = H.get_rig() + if(istype(suit)) + return suit.cell + return null + +/obj/item/device/flash/proc/clown_check(var/mob/user) + if(user && (CLUMSY in user.mutations) && prob(50)) + to_chat(user, "\The [src] slips out of your hand.") + user.drop_item() + return 0 + return 1 + +/obj/item/device/flash/proc/flash_recharge() + //Every ten seconds the flash doesn't get used, the times_used variable goes down by one, making the flash less likely to burn out, + // as well as being able to flash more before reaching max_flashes cap. + for(var/i=0, i < max_flashes, i++) + if(last_used + 10 SECONDS > world.time) + break + + else if(use_external_power) + var/obj/item/weapon/cell/external = get_external_power_supply() + if(!external || !external.use(charge_cost)) //Take power from the borg or rig! + break + + else if(!power_supply || !power_supply.checked_use(charge_cost)) + break + + last_used += 10 SECONDS + times_used-- + + last_used = world.time + times_used = max(0,round(times_used)) //sanity + update_icon() + +// Returns true if the device can flash. +/obj/item/device/flash/proc/check_capacitor(var/mob/user) + //spamming the flash before it's fully charged (60 seconds) increases the chance of it breaking + //It will never break on the first use. + var/obj/item/weapon/cell/battery = power_supply + + if(use_external_power) + battery = get_external_power_supply() + + if(times_used <= max_flashes && battery && battery.charge >= charge_cost) + last_used = world.time + if(prob( max(0, times_used - safe_flashes) * 2 + (times_used >= safe_flashes)) && can_break) //if you use it 10 times in a minute it has a 30% chance to break. + broken = TRUE + if(user) + to_chat(user, "The bulb has burnt out!") + update_icon() + return FALSE + else + times_used++ + update_icon() + return TRUE + else if(!charge_only) //can only use it 10 times a minute, unless it runs purely on charge. + if(user) + update_icon() + to_chat(user, "click") + playsound(src, 'sound/weapons/empty.ogg', 80, 1) + return FALSE + else if(battery && battery.checked_use(charge_cost + (round(charge_cost / 4) * max(0, times_used - max_flashes)))) // Using over your maximum flashes starts taking more charge per added flash. + times_used++ + update_icon() + return TRUE + +//attack_as_weapon +/obj/item/device/flash/attack(mob/living/M, mob/living/user, var/target_zone) + if(!user || !M) return //sanity + + add_attack_logs(user,M,"Flashed (attempt) with [src]") + + user.setClickCooldown(user.get_attack_speed(src)) + user.do_attack_animation(M) + + if(!clown_check(user)) return + if(broken) + to_chat(user, "\The [src] is broken.") + return + + flash_recharge() + + if(!check_capacitor(user)) + return + + playsound(src, 'sound/weapons/flash.ogg', 100, 1) + var/flashfail = 0 + + //VOREStation Add - NIF + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION)) + flashfail = 1 + H.nif.notify("High intensity light detected, and blocked!",TRUE) + //VOREStation Add End + + if(iscarbon(M) && !flashfail) //VOREStation Add - NIF + var/mob/living/carbon/C = M + if(C.stat != DEAD) + var/safety = C.eyecheck() + if(safety <= 0) + var/flash_strength = 10 //Vorestation edit, making flashes behave the same as flash rounds + if(ishuman(C)) + var/mob/living/carbon/human/H = C + flash_strength *= H.species.flash_mod + + if(flash_strength > 0) + H.Confuse(flash_strength + 5) + H.Blind(flash_strength) + H.eye_blurry = max(H.eye_blurry, flash_strength + 5) + H.flash_eyes() + H.adjustHalLoss(halloss_per_flash * (flash_strength / 5)) // Should take four flashes to stun. + H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns") + + else + flashfail = 1 + + else if(issilicon(M)) + flashfail = 0 + var/mob/living/silicon/S = M + if(isrobot(S)) + var/mob/living/silicon/robot/R = S + if(R.has_active_type(/obj/item/borg/combat/shield)) + var/obj/item/borg/combat/shield/shield = locate() in R + if(shield) + if(shield.active) + shield.adjust_flash_count(R, 1) + flashfail = 1 + else + flashfail = 1 + + if(isrobot(user)) + spawn(0) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + qdel(animation) + + if(!flashfail) + flick("flash2", src) + if(!issilicon(M)) + + user.visible_message("[user] blinds [M] with the flash!") + else + + user.visible_message("[user] overloads [M]'s sensors with the flash!") + M.Weaken(rand(5,10)) + else + + user.visible_message("[user] fails to blind [M] with the flash!") + + return + + + + +/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) + if(!user || !clown_check(user)) return + + user.setClickCooldown(user.get_attack_speed(src)) + + if(broken) + user.show_message("The [src.name] is broken", 2) + return + + flash_recharge() + + if(!check_capacitor(user)) + return + + playsound(src, 'sound/weapons/flash.ogg', 100, 1) + flick("flash2", src) + if(user && isrobot(user)) + spawn(0) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + qdel(animation) + + for(var/mob/living/carbon/C in oviewers(3, null)) + var/safety = C.eyecheck() + if(!safety) + if(!C.blinded) + C.flash_eyes() + + return + +/obj/item/device/flash/emp_act(severity) + if(broken) return + flash_recharge() + if(!check_capacitor()) + return + + if(istype(loc, /mob/living/carbon)) + var/mob/living/carbon/C = loc + var/safety = C.eyecheck() + if(safety <= 0) + C.adjustHalLoss(halloss_per_flash) + //C.Weaken(10) + C.flash_eyes() + for(var/mob/M in viewers(C, null)) + M.show_message("[C] is blinded by the flash!") + ..() + +/obj/item/device/flash/synthetic + name = "synthetic flash" + desc = "When a problem arises, SCIENCE is the solution." + icon_state = "sflash" + origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) + base_icon = "sflash" + can_repair = FALSE + +//attack_as_weapon +/obj/item/device/flash/synthetic/attack(mob/living/M, mob/living/user, var/target_zone) + ..() + if(!broken) + broken = 1 + to_chat(user, "The bulb has burnt out!") + update_icon() + +/obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) + ..() + if(!broken) + broken = 1 + to_chat(user, "The bulb has burnt out!") + update_icon() + +/obj/item/device/flash/robot + name = "mounted flash" + can_break = FALSE + use_external_power = TRUE + charge_only = TRUE diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index 223ac5a1c4..38f1c2afdf 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -1,130 +1,130 @@ -/obj/item/device/multitool/hacktool - var/is_hacking = 0 - var/max_known_targets - var/hackspeed = 1 - var/max_level = 4 //what's the max door security_level we can handle? - var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons - - var/in_hack_mode = 0 - var/list/known_targets - var/list/supported_types - var/datum/tgui_state/default/must_hack/hack_state - -/obj/item/device/multitool/hacktool/override - hackspeed = 0.75 - max_level = 5 - full_override = TRUE - -/obj/item/device/multitool/hacktool/New() - ..() - known_targets = list() - max_known_targets = 5 + rand(1,3) - supported_types = list(/obj/machinery/door/airlock) - hack_state = new(src) - -/obj/item/device/multitool/hacktool/Destroy() - for(var/atom/target as anything in known_targets) - target.unregister(OBSERVER_EVENT_DESTROY, src) - known_targets.Cut() - qdel(hack_state) - hack_state = null - return ..() - -/obj/item/device/multitool/hacktool/attackby(var/obj/item/W, var/mob/user) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - in_hack_mode = !in_hack_mode - playsound(src, W.usesound, 50, 1) - else - ..() - -/obj/item/device/multitool/hacktool/afterattack(atom/A, mob/user) - sanity_check() - - if(!in_hack_mode) - return ..() - - if(!attempt_hack(user, A)) - return 0 - - // Note, if you ever want to expand supported_types, you must manually add the custom state argument to their tgui_interact - // DISABLED: too fancy, too high-effort // A.tgui_interact(user, custom_state = hack_state) - // Just brute-force it - if(istype(A, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/D = A - if(!D.arePowerSystemsOn()) - to_chat(user, "No response from remote, check door power.") - else if(D.locked == TRUE && full_override == FALSE) - to_chat(user, "Unable to override door bolts!") - else if(D.locked == TRUE && full_override == TRUE && D.arePowerSystemsOn()) - to_chat(user, "Door bolts overridden.") - D.unlock() - else if(D.density == TRUE && D.locked == FALSE) - to_chat(user, "Overriding access. Door opening.") - D.open() - else if(D.density == FALSE && D.locked == FALSE) - to_chat(user, "Overriding access. Door closing.") - D.close() - return 1 - -/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target) - if(is_hacking) - to_chat(user, "You are already hacking!") - return 0 - if(!is_type_in_list(target, supported_types)) - to_chat(user, "\icon[src][bicon(src)] Unable to hack this target, invalid target type.") - return 0 - - var/obj/machinery/door/airlock/D = target - if(D.security_level > max_level) - to_chat(user, "\icon[src][bicon(src)] Target's electronic security is too complex.") - return 0 - - var/found = known_targets.Find(D) - if(found) - known_targets.Swap(1, found) // Move the last hacked item first - return 1 - to_chat(user, "You begin hacking \the [D]...") - is_hacking = 1 - // On average hackin takes ~15 seconds. Fairly small random span to avoid people simply aborting and trying again - // Reduced hack duration to compensate for the reduced functionality, multiplied by door sec level - var/hack_result = do_after(user, (((10 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS))*hackspeed)*D.security_level)) - is_hacking = 0 - - if(hack_result && in_hack_mode) - to_chat(user, "Your hacking attempt was succesful!") - user.playsound_local(get_turf(src), 'sound/instruments/piano/An6.ogg', 50) - else - to_chat(user, "Your hacking attempt failed!") - return 0 - - known_targets.Insert(1, D) // Insert the newly hacked target first, - D.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy) - return 1 - -/obj/item/device/multitool/hacktool/proc/sanity_check() - if(max_known_targets < 1) max_known_targets = 1 - // Cut away the oldest items if the capacity has been reached - if(known_targets.len > max_known_targets) - for(var/i = (max_known_targets + 1) to known_targets.len) - var/atom/A = known_targets[i] - A.unregister(OBSERVER_EVENT_DESTROY, src) - known_targets.Cut(max_known_targets + 1) - -/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target) - known_targets -= target - -/datum/tgui_state/default/must_hack - var/obj/item/device/multitool/hacktool/hacktool - -/datum/tgui_state/default/must_hack/New(var/hacktool) - src.hacktool = hacktool - ..() - -/datum/tgui_state/default/must_hack/Destroy() - hacktool = null - return ..() - -/datum/tgui_state/default/must_hack/can_use_topic(src_object, mob/user) - if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets)) - return STATUS_CLOSE - return ..() +/obj/item/device/multitool/hacktool + var/is_hacking = 0 + var/max_known_targets + var/hackspeed = 1 + var/max_level = 4 //what's the max door security_level we can handle? + var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons + + var/in_hack_mode = 0 + var/list/known_targets + var/list/supported_types + var/datum/tgui_state/default/must_hack/hack_state + +/obj/item/device/multitool/hacktool/override + hackspeed = 0.75 + max_level = 5 + full_override = TRUE + +/obj/item/device/multitool/hacktool/New() + ..() + known_targets = list() + max_known_targets = 5 + rand(1,3) + supported_types = list(/obj/machinery/door/airlock) + hack_state = new(src) + +/obj/item/device/multitool/hacktool/Destroy() + for(var/atom/target as anything in known_targets) + target.unregister(OBSERVER_EVENT_DESTROY, src) + known_targets.Cut() + qdel(hack_state) + hack_state = null + return ..() + +/obj/item/device/multitool/hacktool/attackby(var/obj/item/W, var/mob/user) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + in_hack_mode = !in_hack_mode + playsound(src, W.usesound, 50, 1) + else + ..() + +/obj/item/device/multitool/hacktool/afterattack(atom/A, mob/user) + sanity_check() + + if(!in_hack_mode) + return ..() + + if(!attempt_hack(user, A)) + return 0 + + // Note, if you ever want to expand supported_types, you must manually add the custom state argument to their tgui_interact + // DISABLED: too fancy, too high-effort // A.tgui_interact(user, custom_state = hack_state) + // Just brute-force it + if(istype(A, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/D = A + if(!D.arePowerSystemsOn()) + to_chat(user, "No response from remote, check door power.") + else if(D.locked == TRUE && full_override == FALSE) + to_chat(user, "Unable to override door bolts!") + else if(D.locked == TRUE && full_override == TRUE && D.arePowerSystemsOn()) + to_chat(user, "Door bolts overridden.") + D.unlock() + else if(D.density == TRUE && D.locked == FALSE) + to_chat(user, "Overriding access. Door opening.") + D.open() + else if(D.density == FALSE && D.locked == FALSE) + to_chat(user, "Overriding access. Door closing.") + D.close() + return 1 + +/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target) + if(is_hacking) + to_chat(user, "You are already hacking!") + return 0 + if(!is_type_in_list(target, supported_types)) + to_chat(user, "\icon[src][bicon(src)] Unable to hack this target, invalid target type.") + return 0 + + var/obj/machinery/door/airlock/D = target + if(D.security_level > max_level) + to_chat(user, "\icon[src][bicon(src)] Target's electronic security is too complex.") + return 0 + + var/found = known_targets.Find(D) + if(found) + known_targets.Swap(1, found) // Move the last hacked item first + return 1 + to_chat(user, "You begin hacking \the [D]...") + is_hacking = 1 + // On average hackin takes ~15 seconds. Fairly small random span to avoid people simply aborting and trying again + // Reduced hack duration to compensate for the reduced functionality, multiplied by door sec level + var/hack_result = do_after(user, (((10 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS))*hackspeed)*D.security_level)) + is_hacking = 0 + + if(hack_result && in_hack_mode) + to_chat(user, "Your hacking attempt was succesful!") + user.playsound_local(get_turf(src), 'sound/instruments/piano/An6.ogg', 50) + else + to_chat(user, "Your hacking attempt failed!") + return 0 + + known_targets.Insert(1, D) // Insert the newly hacked target first, + D.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy) + return 1 + +/obj/item/device/multitool/hacktool/proc/sanity_check() + if(max_known_targets < 1) max_known_targets = 1 + // Cut away the oldest items if the capacity has been reached + if(known_targets.len > max_known_targets) + for(var/i = (max_known_targets + 1) to known_targets.len) + var/atom/A = known_targets[i] + A.unregister(OBSERVER_EVENT_DESTROY, src) + known_targets.Cut(max_known_targets + 1) + +/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target) + known_targets -= target + +/datum/tgui_state/default/must_hack + var/obj/item/device/multitool/hacktool/hacktool + +/datum/tgui_state/default/must_hack/New(var/hacktool) + src.hacktool = hacktool + ..() + +/datum/tgui_state/default/must_hack/Destroy() + hacktool = null + return ..() + +/datum/tgui_state/default/must_hack/can_use_topic(src_object, mob/user) + if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets)) + return STATUS_CLOSE + return ..() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 54cc46d802..f188f05431 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -1,230 +1,230 @@ - -// Light Replacer (LR) -// -// ABOUT THE DEVICE -// -// This is a device supposedly to be used by Janitors and Janitor Cyborgs which will -// allow them to easily replace lights. This was mostly designed for Janitor Cyborgs since -// they don't have hands or a way to replace lightbulbs. -// -// HOW IT WORKS -// -// You attack a light fixture with it, if the light fixture is broken it will replace the -// light fixture with a working light; the broken light is then placed on the floor for the -// user to then pickup with a trash bag. If it's empty then it will just place a light in the fixture. -// -// HOW TO REFILL THE DEVICE -// -// It can be manually refilled or by clicking on a storage item containing lights. -// If it's part of a robot module, it will charge when the Robot is inside a Recharge Station. -// -// EMAGGED FEATURES -// -// NOTICE: The Cyborg cannot use the emagged Light Replacer and the light's explosion was nerfed. It cannot create holes in the station anymore. -// -// I'm not sure everyone will react the emag's features so please say what your opinions are of it. -// -// When emagged it will rig every light it replaces, which will explode when the light is on. -// This is VERY noticable, even the device's name changes when you emag it so if anyone -// examines you when you're holding it in your hand, you will be discovered. -// It will also be very obvious who is setting all these lights off, since only Janitor Borgs and Janitors have easy -// access to them, and only one of them can emag their device. -// -// The explosion cannot insta-kill anyone with 30% or more health. - -#define LIGHT_OK 0 -#define LIGHT_EMPTY 1 -#define LIGHT_BROKEN 2 -#define LIGHT_BURNED 3 - - -/obj/item/device/lightreplacer - - name = "light replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass." - force = 8 - icon = 'icons/obj/janitor.dmi' - icon_state = "lightreplacer0" - slot_flags = SLOT_BELT - origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 2) - - var/max_uses = 32 - var/uses = 32 - var/emagged = 0 - var/failmsg = "" - var/charge = 0 - var/selected_color = LIGHT_COLOR_INCANDESCENT_TUBE //Default color! - - // Eating used bulbs gives us bulb shards - var/bulb_shards = 0 - // when we get this many shards, we get a free bulb. - var/shards_required = 4 - -/obj/item/device/lightreplacer/New() - failmsg = "The [name]'s refill light blinks red." - ..() - -/obj/item/device/lightreplacer/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It has [uses] lights remaining." - -/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stack/material) && W.get_material_name() == "glass") - var/obj/item/stack/G = W - if(uses >= max_uses) - to_chat(user, "[src.name] is full.") - return - else if(G.use(1)) - add_uses(16) //Autolathe converts 1 sheet into 16 lights. - to_chat(user, "You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.") - return - else - to_chat(user, "You need one sheet of glass to replace lights.") - - if(istype(W, /obj/item/weapon/light)) - var/new_bulbs = 0 - var/obj/item/weapon/light/L = W - if(L.status == 0) // LIGHT OKAY - if(uses < max_uses) - if(!user.unEquip(W)) - return - add_uses(1) - qdel(L) - else - if(!user.unEquip(W)) - return - new_bulbs += AddShards(1) - qdel(L) - if(new_bulbs != 0) - playsound(src, 'sound/machines/ding.ogg', 50, 1) - to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") - return - - if(istype(W, /obj/item/weapon/storage)) - var/obj/item/weapon/storage/S = W - var/found_lightbulbs = FALSE - var/replaced_something = TRUE - - for(var/obj/item/I in S.contents) - if(istype(I,/obj/item/weapon/light)) - var/obj/item/weapon/light/L = I - found_lightbulbs = TRUE - if(src.uses >= max_uses) - break - if(L.status == LIGHT_OK) - replaced_something = TRUE - add_uses(1) - qdel(L) - - else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) - replaced_something = TRUE - AddShards(1) - qdel(L) - - if(!found_lightbulbs) - to_chat(user, "\The [S] contains no bulbs.") - return - - if(!replaced_something && src.uses == max_uses) - to_chat(user, "\The [src] is full!") - return - - to_chat(user, "You fill \the [src] with lights from \the [S].") - -/obj/item/device/lightreplacer/attack_self(mob/user) - /* // This would probably be a bit OP. If you want it though, uncomment the code. - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.emagged) - src.Emag() - to_chat(usr, You short circuit the [src].") - return - */ - to_chat(usr, "It has [uses] lights remaining.") - var/new_color = input(usr, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null - if(new_color) - selected_color = new_color - to_chat(usr, "The light color has been changed.") - -/obj/item/device/lightreplacer/update_icon() - icon_state = "lightreplacer[emagged]" - - -/obj/item/device/lightreplacer/proc/Use(var/mob/user) - - playsound(src, 'sound/machines/click.ogg', 50, 1) - add_uses(-1) - return 1 - -// Negative numbers will subtract -/obj/item/device/lightreplacer/proc/add_uses(var/amount = 1) - uses = min(max(uses + amount, 0), max_uses) - - -/obj/item/device/lightreplacer/proc/AddShards(amount = 1) - bulb_shards += amount - var/new_bulbs = round(bulb_shards / shards_required) - if(new_bulbs > 0) - add_uses(new_bulbs) - bulb_shards = bulb_shards % shards_required - return new_bulbs - -/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1) - charge += amount - if(charge > 6) - add_uses(1) - charge = 0 - -/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U) - - if(target.status != LIGHT_OK) - if(CanUse(U)) - if(!Use(U)) return - to_chat(U, "You replace the [target.get_fitting_name()] with the [src].") - - if(target.status != LIGHT_EMPTY) - var/new_bulbs = AddShards(1) - if(new_bulbs != 0) - to_chat(U, "\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.") - playsound(src, 'sound/machines/ding.ogg', 50, 1) - target.status = LIGHT_EMPTY - target.installed_light = null //Remove the light! - target.update() - - var/obj/item/weapon/light/L2 = new target.light_type() - L2.brightness_color = selected_color - target.insert_bulb(L2) //Call the insertion proc. - target.update() - - if(target.on && target.rigged) - target.explode() - return - - else - to_chat(U, failmsg) - return - else - to_chat(U, "There is a working [target.get_fitting_name()] already inserted.") - return - -/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user) - emagged = !emagged - playsound(src, "sparks", 100, 1) - update_icon() - return 1 - -//Can you use it? - -/obj/item/device/lightreplacer/proc/CanUse(var/mob/living/user) - src.add_fingerprint(user) - //Not sure what else to check for. Maybe if clumsy? - if(uses > 0) - return 1 - else - return 0 - -#undef LIGHT_OK -#undef LIGHT_EMPTY -#undef LIGHT_BROKEN + +// Light Replacer (LR) +// +// ABOUT THE DEVICE +// +// This is a device supposedly to be used by Janitors and Janitor Cyborgs which will +// allow them to easily replace lights. This was mostly designed for Janitor Cyborgs since +// they don't have hands or a way to replace lightbulbs. +// +// HOW IT WORKS +// +// You attack a light fixture with it, if the light fixture is broken it will replace the +// light fixture with a working light; the broken light is then placed on the floor for the +// user to then pickup with a trash bag. If it's empty then it will just place a light in the fixture. +// +// HOW TO REFILL THE DEVICE +// +// It can be manually refilled or by clicking on a storage item containing lights. +// If it's part of a robot module, it will charge when the Robot is inside a Recharge Station. +// +// EMAGGED FEATURES +// +// NOTICE: The Cyborg cannot use the emagged Light Replacer and the light's explosion was nerfed. It cannot create holes in the station anymore. +// +// I'm not sure everyone will react the emag's features so please say what your opinions are of it. +// +// When emagged it will rig every light it replaces, which will explode when the light is on. +// This is VERY noticable, even the device's name changes when you emag it so if anyone +// examines you when you're holding it in your hand, you will be discovered. +// It will also be very obvious who is setting all these lights off, since only Janitor Borgs and Janitors have easy +// access to them, and only one of them can emag their device. +// +// The explosion cannot insta-kill anyone with 30% or more health. + +#define LIGHT_OK 0 +#define LIGHT_EMPTY 1 +#define LIGHT_BROKEN 2 +#define LIGHT_BURNED 3 + + +/obj/item/device/lightreplacer + + name = "light replacer" + desc = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass." + force = 8 + icon = 'icons/obj/janitor.dmi' + icon_state = "lightreplacer0" + slot_flags = SLOT_BELT + origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 2) + + var/max_uses = 32 + var/uses = 32 + var/emagged = 0 + var/failmsg = "" + var/charge = 0 + var/selected_color = LIGHT_COLOR_INCANDESCENT_TUBE //Default color! + + // Eating used bulbs gives us bulb shards + var/bulb_shards = 0 + // when we get this many shards, we get a free bulb. + var/shards_required = 4 + +/obj/item/device/lightreplacer/New() + failmsg = "The [name]'s refill light blinks red." + ..() + +/obj/item/device/lightreplacer/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It has [uses] lights remaining." + +/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/material) && W.get_material_name() == "glass") + var/obj/item/stack/G = W + if(uses >= max_uses) + to_chat(user, "[src.name] is full.") + return + else if(G.use(1)) + add_uses(16) //Autolathe converts 1 sheet into 16 lights. + to_chat(user, "You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.") + return + else + to_chat(user, "You need one sheet of glass to replace lights.") + + if(istype(W, /obj/item/weapon/light)) + var/new_bulbs = 0 + var/obj/item/weapon/light/L = W + if(L.status == 0) // LIGHT OKAY + if(uses < max_uses) + if(!user.unEquip(W)) + return + add_uses(1) + qdel(L) + else + if(!user.unEquip(W)) + return + new_bulbs += AddShards(1) + qdel(L) + if(new_bulbs != 0) + playsound(src, 'sound/machines/ding.ogg', 50, 1) + to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") + return + + if(istype(W, /obj/item/weapon/storage)) + var/obj/item/weapon/storage/S = W + var/found_lightbulbs = FALSE + var/replaced_something = TRUE + + for(var/obj/item/I in S.contents) + if(istype(I,/obj/item/weapon/light)) + var/obj/item/weapon/light/L = I + found_lightbulbs = TRUE + if(src.uses >= max_uses) + break + if(L.status == LIGHT_OK) + replaced_something = TRUE + add_uses(1) + qdel(L) + + else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) + replaced_something = TRUE + AddShards(1) + qdel(L) + + if(!found_lightbulbs) + to_chat(user, "\The [S] contains no bulbs.") + return + + if(!replaced_something && src.uses == max_uses) + to_chat(user, "\The [src] is full!") + return + + to_chat(user, "You fill \the [src] with lights from \the [S].") + +/obj/item/device/lightreplacer/attack_self(mob/user) + /* // This would probably be a bit OP. If you want it though, uncomment the code. + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.emagged) + src.Emag() + to_chat(usr, You short circuit the [src].") + return + */ + to_chat(usr, "It has [uses] lights remaining.") + var/new_color = input(usr, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null + if(new_color) + selected_color = new_color + to_chat(usr, "The light color has been changed.") + +/obj/item/device/lightreplacer/update_icon() + icon_state = "lightreplacer[emagged]" + + +/obj/item/device/lightreplacer/proc/Use(var/mob/user) + + playsound(src, 'sound/machines/click.ogg', 50, 1) + add_uses(-1) + return 1 + +// Negative numbers will subtract +/obj/item/device/lightreplacer/proc/add_uses(var/amount = 1) + uses = min(max(uses + amount, 0), max_uses) + + +/obj/item/device/lightreplacer/proc/AddShards(amount = 1) + bulb_shards += amount + var/new_bulbs = round(bulb_shards / shards_required) + if(new_bulbs > 0) + add_uses(new_bulbs) + bulb_shards = bulb_shards % shards_required + return new_bulbs + +/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1) + charge += amount + if(charge > 6) + add_uses(1) + charge = 0 + +/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U) + + if(target.status != LIGHT_OK) + if(CanUse(U)) + if(!Use(U)) return + to_chat(U, "You replace the [target.get_fitting_name()] with the [src].") + + if(target.status != LIGHT_EMPTY) + var/new_bulbs = AddShards(1) + if(new_bulbs != 0) + to_chat(U, "\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.") + playsound(src, 'sound/machines/ding.ogg', 50, 1) + target.status = LIGHT_EMPTY + target.installed_light = null //Remove the light! + target.update() + + var/obj/item/weapon/light/L2 = new target.light_type() + L2.brightness_color = selected_color + target.insert_bulb(L2) //Call the insertion proc. + target.update() + + if(target.on && target.rigged) + target.explode() + return + + else + to_chat(U, failmsg) + return + else + to_chat(U, "There is a working [target.get_fitting_name()] already inserted.") + return + +/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user) + emagged = !emagged + playsound(src, "sparks", 100, 1) + update_icon() + return 1 + +//Can you use it? + +/obj/item/device/lightreplacer/proc/CanUse(var/mob/living/user) + src.add_fingerprint(user) + //Not sure what else to check for. Maybe if clumsy? + if(uses > 0) + return 1 + else + return 0 + +#undef LIGHT_OK +#undef LIGHT_EMPTY +#undef LIGHT_BROKEN #undef LIGHT_BURNED \ No newline at end of file diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 4a249cae00..a320c6b490 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -1,95 +1,95 @@ -/** - * Multitool -- A multitool is used for hacking electronic devices. - * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. - * - */ - -/obj/item/device/multitool - name = "multitool" - desc = "Used for pulsing wires to test which to cut. Not recommended by doctors." - description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires." - icon_state = "multitool" - force = 5.0 - w_class = ITEMSIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - drop_sound = 'sound/items/drop/multitool.ogg' - pickup_sound = 'sound/items/pickup/multitool.ogg' - - matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - - var/mode_index = 1 - var/toolmode = MULTITOOL_MODE_STANDARD - var/list/modes = list(MULTITOOL_MODE_STANDARD, MULTITOOL_MODE_INTCIRCUITS) - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage - var/obj/machinery/clonepod/connecting //same for cryopod linkage - var/obj/machinery/connectable //Used to connect machinery. - var/weakref_wiring //Used to store weak references for integrated circuitry. This is now the Omnitool. - toolspeed = 1 - tool_qualities = list(TOOL_MULTITOOL) - -/obj/item/device/multitool/attack_self(mob/living/user) - var/choice = tgui_alert(usr, "What do you want to do with \the [src]?", "Multitool Menu", list("Switch Mode", "Clear Buffers", "Cancel")) - switch(choice) - if("Cancel") - to_chat(user,"You lower \the [src].") - return - if("Clear Buffers") - to_chat(user,"You clear \the [src]'s memory.") - buffer = null - connecting = null - connectable = null - weakref_wiring = null - accepting_refs = 0 - if(toolmode == MULTITOOL_MODE_INTCIRCUITS) - accepting_refs = 1 - if("Switch Mode") - mode_switch(user) - - update_icon() - - return ..() - -/obj/item/device/multitool/proc/mode_switch(mob/living/user) - if(mode_index + 1 > modes.len) mode_index = 1 - - else - mode_index += 1 - - toolmode = modes[mode_index] - to_chat(user,"\The [src] is now set to [toolmode].") - - accepting_refs = (toolmode == MULTITOOL_MODE_INTCIRCUITS) - - return - -/obj/item/device/multitool/cyborg - name = "multitool" - desc = "Optimised and stripped-down version of a regular multitool." - toolspeed = 0.5 - - - -/datum/category_item/catalogue/anomalous/precursor_a/alien_multitool - name = "Precursor Alpha Object - Pulse Tool" - desc = "This ancient object appears to be an electrical tool. \ - It has a simple mechanism at the handle, which will cause a pulse of \ - energy to be emitted from the head of the tool. This can be used on a \ - conductive object such as a wire, in order to send a pulse signal through it.\ -

                    \ - These qualities make this object somewhat similar in purpose to the common \ - multitool, and can probably be used for tasks such as direct interfacing with \ - an airlock, if one knows how." - value = CATALOGUER_REWARD_EASY - -/obj/item/device/multitool/alien - name = "alien multitool" - desc = "An omni-technological interface." - catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_multitool) - icon = 'icons/obj/abductor.dmi' - icon_state = "multitool" - toolspeed = 0.1 - origin_tech = list(TECH_MAGNET = 5, TECH_ENGINEERING = 5) +/** + * Multitool -- A multitool is used for hacking electronic devices. + * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. + * + */ + +/obj/item/device/multitool + name = "multitool" + desc = "Used for pulsing wires to test which to cut. Not recommended by doctors." + description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires." + icon_state = "multitool" + force = 5.0 + w_class = ITEMSIZE_SMALL + throwforce = 5.0 + throw_range = 15 + throw_speed = 3 + drop_sound = 'sound/items/drop/multitool.ogg' + pickup_sound = 'sound/items/pickup/multitool.ogg' + + matter = list(MAT_STEEL = 50,MAT_GLASS = 20) + + var/mode_index = 1 + var/toolmode = MULTITOOL_MODE_STANDARD + var/list/modes = list(MULTITOOL_MODE_STANDARD, MULTITOOL_MODE_INTCIRCUITS) + + origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage + var/obj/machinery/clonepod/connecting //same for cryopod linkage + var/obj/machinery/connectable //Used to connect machinery. + var/weakref_wiring //Used to store weak references for integrated circuitry. This is now the Omnitool. + toolspeed = 1 + tool_qualities = list(TOOL_MULTITOOL) + +/obj/item/device/multitool/attack_self(mob/living/user) + var/choice = tgui_alert(usr, "What do you want to do with \the [src]?", "Multitool Menu", list("Switch Mode", "Clear Buffers", "Cancel")) + switch(choice) + if("Cancel") + to_chat(user,"You lower \the [src].") + return + if("Clear Buffers") + to_chat(user,"You clear \the [src]'s memory.") + buffer = null + connecting = null + connectable = null + weakref_wiring = null + accepting_refs = 0 + if(toolmode == MULTITOOL_MODE_INTCIRCUITS) + accepting_refs = 1 + if("Switch Mode") + mode_switch(user) + + update_icon() + + return ..() + +/obj/item/device/multitool/proc/mode_switch(mob/living/user) + if(mode_index + 1 > modes.len) mode_index = 1 + + else + mode_index += 1 + + toolmode = modes[mode_index] + to_chat(user,"\The [src] is now set to [toolmode].") + + accepting_refs = (toolmode == MULTITOOL_MODE_INTCIRCUITS) + + return + +/obj/item/device/multitool/cyborg + name = "multitool" + desc = "Optimised and stripped-down version of a regular multitool." + toolspeed = 0.5 + + + +/datum/category_item/catalogue/anomalous/precursor_a/alien_multitool + name = "Precursor Alpha Object - Pulse Tool" + desc = "This ancient object appears to be an electrical tool. \ + It has a simple mechanism at the handle, which will cause a pulse of \ + energy to be emitted from the head of the tool. This can be used on a \ + conductive object such as a wire, in order to send a pulse signal through it.\ +

                    \ + These qualities make this object somewhat similar in purpose to the common \ + multitool, and can probably be used for tasks such as direct interfacing with \ + an airlock, if one knows how." + value = CATALOGUER_REWARD_EASY + +/obj/item/device/multitool/alien + name = "alien multitool" + desc = "An omni-technological interface." + catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_multitool) + icon = 'icons/obj/abductor.dmi' + icon_state = "multitool" + toolspeed = 0.1 + origin_tech = list(TECH_MAGNET = 5, TECH_ENGINEERING = 5) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 9ed57621d2..0d7b8f7bd2 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -1,134 +1,134 @@ -// Powersink - used to drain station power - -/obj/item/device/powersink - name = "power sink" - desc = "A nulling power sink which drains energy from electrical systems." - icon_state = "powersink0" - icon = 'icons/obj/device.dmi' - w_class = ITEMSIZE_LARGE - throwforce = 5 - throw_speed = 1 - throw_range = 2 - - matter = list(MAT_STEEL = 750) - - origin_tech = list(TECH_POWER = 3, TECH_ILLEGAL = 5) - var/drain_rate = 1500000 // amount of power to drain per tick - var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. - var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. - var/power_drained = 0 // Amount of power drained. - var/max_power = 1e9 // Detonation point. - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. - - var/datum/powernet/PN // Our powernet - var/obj/structure/cable/attached // the attached cable - -/obj/item/device/powersink/Destroy() - STOP_PROCESSING(SSobj, src) - STOP_PROCESSING_POWER_OBJECT(src) - ..() - -/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - if(mode == 0) - var/turf/T = loc - if(isturf(T) && !!T.is_plating()) - attached = locate() in T - if(!attached) - to_chat(user, "No exposed cable here to attach to.") - return - else - anchored = TRUE - mode = 1 - src.visible_message("[user] attaches [src] to the cable!") - playsound(src, I.usesound, 50, 1) - return - else - to_chat(user, "Device must be placed over an exposed cable to attach to it.") - return - else - if (mode == 2) - STOP_PROCESSING(SSobj, src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite - STOP_PROCESSING_POWER_OBJECT(src) - anchored = FALSE - mode = 0 - src.visible_message("[user] detaches [src] from the cable!") - set_light(0) - playsound(src, I.usesound, 50, 1) - icon_state = "powersink0" - - return - else - ..() - -/obj/item/device/powersink/attack_ai() - return - -/obj/item/device/powersink/attack_hand(var/mob/user) - switch(mode) - if(0) - ..() - if(1) - src.visible_message("[user] activates [src]!") - mode = 2 - icon_state = "powersink1" - START_PROCESSING(SSobj, src) - datum_flags &= ~DF_ISPROCESSING // Have to reset this flag so that PROCESSING_POWER_OBJECT can re-add it. It fails if the flag is already present. - Ater - START_PROCESSING_POWER_OBJECT(src) - if(2) //This switch option wasn't originally included. It exists now. --NeoFite - src.visible_message("[user] deactivates [src]!") - mode = 1 - set_light(0) - icon_state = "powersink0" - STOP_PROCESSING(SSobj, src) - STOP_PROCESSING_POWER_OBJECT(src) - -/obj/item/device/powersink/pwr_drain() - if(!attached) - return 0 - - if(drained_this_tick) - return 1 - drained_this_tick = 1 - - var/drained = 0 - - if(!PN) - return 1 - - set_light(12) - PN.trigger_warning() - // found a powernet, so drain up to max power from it - drained = PN.draw_power(drain_rate) - // 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) - // Enough power drained this tick, no need to torture more APCs - if(drained >= drain_rate) - break - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - var/cur_charge = A.cell.charge / CELLRATE - var/drain_val = min(apc_drain_rate, cur_charge) - A.cell.use(drain_val * CELLRATE) - drained += drain_val - power_drained += drained - return 1 - - -/obj/item/device/powersink/process() - drained_this_tick = 0 - power_drained -= min(dissipation_rate, power_drained) - if(power_drained > max_power * 0.95) - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - if(power_drained >= max_power) - explosion(src.loc, 3,6,9,12) - qdel(src) - return - if(attached && attached.powernet) - PN = attached.powernet - else - PN = null +// Powersink - used to drain station power + +/obj/item/device/powersink + name = "power sink" + desc = "A nulling power sink which drains energy from electrical systems." + icon_state = "powersink0" + icon = 'icons/obj/device.dmi' + w_class = ITEMSIZE_LARGE + throwforce = 5 + throw_speed = 1 + throw_range = 2 + + matter = list(MAT_STEEL = 750) + + origin_tech = list(TECH_POWER = 3, TECH_ILLEGAL = 5) + var/drain_rate = 1500000 // amount of power to drain per tick + var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. + var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. + var/power_drained = 0 // Amount of power drained. + var/max_power = 1e9 // Detonation point. + var/mode = 0 // 0 = off, 1=clamped (off), 2=operating + var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. + + var/datum/powernet/PN // Our powernet + var/obj/structure/cable/attached // the attached cable + +/obj/item/device/powersink/Destroy() + STOP_PROCESSING(SSobj, src) + STOP_PROCESSING_POWER_OBJECT(src) + ..() + +/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + if(mode == 0) + var/turf/T = loc + if(isturf(T) && !!T.is_plating()) + attached = locate() in T + if(!attached) + to_chat(user, "No exposed cable here to attach to.") + return + else + anchored = TRUE + mode = 1 + src.visible_message("[user] attaches [src] to the cable!") + playsound(src, I.usesound, 50, 1) + return + else + to_chat(user, "Device must be placed over an exposed cable to attach to it.") + return + else + if (mode == 2) + STOP_PROCESSING(SSobj, src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite + STOP_PROCESSING_POWER_OBJECT(src) + anchored = FALSE + mode = 0 + src.visible_message("[user] detaches [src] from the cable!") + set_light(0) + playsound(src, I.usesound, 50, 1) + icon_state = "powersink0" + + return + else + ..() + +/obj/item/device/powersink/attack_ai() + return + +/obj/item/device/powersink/attack_hand(var/mob/user) + switch(mode) + if(0) + ..() + if(1) + src.visible_message("[user] activates [src]!") + mode = 2 + icon_state = "powersink1" + START_PROCESSING(SSobj, src) + datum_flags &= ~DF_ISPROCESSING // Have to reset this flag so that PROCESSING_POWER_OBJECT can re-add it. It fails if the flag is already present. - Ater + START_PROCESSING_POWER_OBJECT(src) + if(2) //This switch option wasn't originally included. It exists now. --NeoFite + src.visible_message("[user] deactivates [src]!") + mode = 1 + set_light(0) + icon_state = "powersink0" + STOP_PROCESSING(SSobj, src) + STOP_PROCESSING_POWER_OBJECT(src) + +/obj/item/device/powersink/pwr_drain() + if(!attached) + return 0 + + if(drained_this_tick) + return 1 + drained_this_tick = 1 + + var/drained = 0 + + if(!PN) + return 1 + + set_light(12) + PN.trigger_warning() + // found a powernet, so drain up to max power from it + drained = PN.draw_power(drain_rate) + // 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) + // Enough power drained this tick, no need to torture more APCs + if(drained >= drain_rate) + break + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.operating && A.cell) + var/cur_charge = A.cell.charge / CELLRATE + var/drain_val = min(apc_drain_rate, cur_charge) + A.cell.use(drain_val * CELLRATE) + drained += drain_val + power_drained += drained + return 1 + + +/obj/item/device/powersink/process() + drained_this_tick = 0 + power_drained -= min(dissipation_rate, power_drained) + if(power_drained > max_power * 0.95) + playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + if(power_drained >= max_power) + explosion(src.loc, 3,6,9,12) + qdel(src) + return + if(attached && attached.powernet) + PN = attached.powernet + else + PN = null diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index cbd9586630..a7b7348e29 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -1,44 +1,44 @@ -/obj/item/device/radio/beacon - name = "tracking beacon" - desc = "A beacon used by a teleporter." - icon_state = "beacon" - item_state = "signaler" - var/code = "electronic" - origin_tech = list(TECH_BLUESPACE = 1) - -GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/device/radio/beacon) - -/obj/item/device/radio/beacon/hear_talk() - return - - -/obj/item/device/radio/beacon/send_hear() - return null - - -/obj/item/device/radio/beacon/verb/alter_signal(t as text) - set name = "Alter Beacon's Signal" - set category = "Object" - set src in usr - - if ((usr.canmove && !( usr.restrained() ))) - src.code = t - if (!( src.code )) - src.code = "beacon" - src.add_fingerprint(usr) - return - -// SINGULO BEACON SPAWNER - -/obj/item/device/radio/beacon/syndicate - name = "suspicious beacon" - desc = "A label on it reads: Activate to have a singularity beacon teleported to your location." - origin_tech = list(TECH_BLUESPACE = 1, TECH_ILLEGAL = 7) - -/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob) - if(user) - to_chat(user, "Locked In") - new /obj/machinery/power/singularity_beacon/syndicate( user.loc ) - playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) - qdel(src) - return +/obj/item/device/radio/beacon + name = "tracking beacon" + desc = "A beacon used by a teleporter." + icon_state = "beacon" + item_state = "signaler" + var/code = "electronic" + origin_tech = list(TECH_BLUESPACE = 1) + +GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/device/radio/beacon) + +/obj/item/device/radio/beacon/hear_talk() + return + + +/obj/item/device/radio/beacon/send_hear() + return null + + +/obj/item/device/radio/beacon/verb/alter_signal(t as text) + set name = "Alter Beacon's Signal" + set category = "Object" + set src in usr + + if ((usr.canmove && !( usr.restrained() ))) + src.code = t + if (!( src.code )) + src.code = "beacon" + src.add_fingerprint(usr) + return + +// SINGULO BEACON SPAWNER + +/obj/item/device/radio/beacon/syndicate + name = "suspicious beacon" + desc = "A label on it reads: Activate to have a singularity beacon teleported to your location." + origin_tech = list(TECH_BLUESPACE = 1, TECH_ILLEGAL = 7) + +/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob) + if(user) + to_chat(user, "Locked In") + new /obj/machinery/power/singularity_beacon/syndicate( user.loc ) + playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) + qdel(src) + return diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 5cea839acb..e0fe849fcc 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -1,131 +1,131 @@ -/obj/item/device/radio/electropack - name = "electropack" - desc = "Dance my monkeys! DANCE!!!" - icon_state = "electropack0" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', - ) - item_state = "electropack" - frequency = 1449 - slot_flags = SLOT_BACK - w_class = ITEMSIZE_HUGE - - matter = list(MAT_STEEL = 10000,MAT_GLASS = 2500) - - var/code = 2 - -/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob) - if(src == user.back) - to_chat(user, "You need help taking this off!") - return - ..() - -/obj/item/device/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/clothing/head/helmet)) - if(!b_stat) - to_chat(user, "[src] is not ready to be attached!") - return - var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) - A.icon = 'icons/obj/assemblies.dmi' - - user.drop_from_inventory(W) - W.loc = A - W.master = A - A.part1 = W - - user.drop_from_inventory(src) - loc = A - master = A - A.part2 = src - - user.put_in_hands(A) - A.add_fingerprint(user) - -/obj/item/device/radio/electropack/Topic(href, href_list) - //..() - if(usr.stat || usr.restrained()) - return - if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) - usr.set_machine(src) - if(href_list["freq"]) - var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - set_frequency(new_frequency) - 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(istype(loc, /mob)) - attack_self(loc) - else - for(var/mob/M in viewers(1, src)) - if(M.client) - attack_self(M) - else - if(istype(master.loc, /mob)) - 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/device/radio/electropack/receive_signal(datum/signal/signal) - if(!signal || signal.encryption != code) - return - - if(ismob(loc) && on) - var/mob/M = loc - var/turf/T = M.loc - if(istype(T, /turf)) - if(!M.moved_recently && M.last_move) - M.moved_recently = 1 - step(M, M.last_move) - sleep(50) - if(M) - M.moved_recently = 0 - to_chat(M, "You feel a sharp shock!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, M) - s.start() - - M.Weaken(10) - - if(master && wires & 1) - master.receive_signal() - return - -/obj/item/device/radio/electropack/attack_self(mob/user as mob, flag1) - - if(!istype(user, /mob/living/carbon/human)) - return - user.set_machine(src) - var/dat = {" -Turn [on ? "Off" : "On"]
                    -Frequency/Code for electropack:
                    -Frequency: -- -- [format_frequency(frequency)] -+ -+
                    - -Code: -- -- [code] -+ -+
                    -
                    "} - user << browse(dat, "window=radio") - onclose(user, "radio") - return +/obj/item/device/radio/electropack + name = "electropack" + desc = "Dance my monkeys! DANCE!!!" + icon_state = "electropack0" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', + ) + item_state = "electropack" + frequency = 1449 + slot_flags = SLOT_BACK + w_class = ITEMSIZE_HUGE + + matter = list(MAT_STEEL = 10000,MAT_GLASS = 2500) + + var/code = 2 + +/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob) + if(src == user.back) + to_chat(user, "You need help taking this off!") + return + ..() + +/obj/item/device/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/clothing/head/helmet)) + if(!b_stat) + to_chat(user, "[src] is not ready to be attached!") + return + var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) + A.icon = 'icons/obj/assemblies.dmi' + + user.drop_from_inventory(W) + W.loc = A + W.master = A + A.part1 = W + + user.drop_from_inventory(src) + loc = A + master = A + A.part2 = src + + user.put_in_hands(A) + A.add_fingerprint(user) + +/obj/item/device/radio/electropack/Topic(href, href_list) + //..() + if(usr.stat || usr.restrained()) + return + if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) + usr.set_machine(src) + if(href_list["freq"]) + var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) + set_frequency(new_frequency) + 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(istype(loc, /mob)) + attack_self(loc) + else + for(var/mob/M in viewers(1, src)) + if(M.client) + attack_self(M) + else + if(istype(master.loc, /mob)) + 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/device/radio/electropack/receive_signal(datum/signal/signal) + if(!signal || signal.encryption != code) + return + + if(ismob(loc) && on) + var/mob/M = loc + var/turf/T = M.loc + if(istype(T, /turf)) + if(!M.moved_recently && M.last_move) + M.moved_recently = 1 + step(M, M.last_move) + sleep(50) + if(M) + M.moved_recently = 0 + to_chat(M, "You feel a sharp shock!") + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, M) + s.start() + + M.Weaken(10) + + if(master && wires & 1) + master.receive_signal() + return + +/obj/item/device/radio/electropack/attack_self(mob/user as mob, flag1) + + if(!istype(user, /mob/living/carbon/human)) + return + user.set_machine(src) + var/dat = {" +Turn [on ? "Off" : "On"]
                    +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/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 8f00890473..ebc6532843 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -1,457 +1,457 @@ -/obj/item/device/radio/headset - name = "radio headset" - desc = "An updated, modular intercom that fits over the head. Takes encryption keys" - var/radio_desc = "" - icon_state = "headset" - item_state = null //To remove the radio's state - matter = list(MAT_STEEL = 75) - subspace_transmission = 1 - canhear_range = 0 // can't hear headsets from very far away - slot_flags = SLOT_EARS - sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi') - - var/translate_binary = 0 - var/translate_hive = 0 - var/obj/item/device/encryptionkey/keyslot1 = null - var/obj/item/device/encryptionkey/keyslot2 = null - var/ks1type = null - var/ks2type = null - - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - -/obj/item/device/radio/headset/New() - ..() - internal_channels.Cut() - if(ks1type) - keyslot1 = new ks1type(src) - if(ks2type) - keyslot2 = new ks2type(src) - recalculateChannels(1) - -/obj/item/device/radio/headset/Destroy() - qdel(keyslot1) - qdel(keyslot2) - keyslot1 = null - keyslot2 = null - return ..() - -/obj/item/device/radio/headset/list_channels(var/mob/user) - return list_secure_channels() - -/obj/item/device/radio/headset/examine(mob/user) - . = ..() - - if(radio_desc && Adjacent(user)) - . += "The following channels are available:" - . += radio_desc - -/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, list/message_pieces, channel) - if(channel == "special") - if(translate_binary) - var/datum/language/binary = GLOB.all_languages["Robot Talk"] - binary.broadcast(M, M.strip_prefixes(multilingual_to_message(message_pieces))) - return RADIO_CONNECTION_NON_SUBSPACE - if(translate_hive) - var/datum/language/hivemind = GLOB.all_languages["Hivemind"] - hivemind.broadcast(M, M.strip_prefixes(multilingual_to_message(message_pieces))) - return RADIO_CONNECTION_NON_SUBSPACE - return RADIO_CONNECTION_FAIL - - return ..() - -/obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0) - if(!ishuman(src.loc)) //CHOMP Addition, this IF block. - return ..(freq, level) //CHOMP Addition end - if (aiOverride) - playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) - return ..(freq, level) - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc - if(H.l_ear == src || H.r_ear == src) - playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) - return ..(freq, level) - return -1 - -/obj/item/device/radio/headset/get_worn_icon_state(var/slot_name) - var/append = "" - if(icon_override) - switch(slot_name) - if(slot_l_ear_str) - append = "_l" - if(slot_r_ear_str) - append = "_r" - - return "[..()][append]" - -/obj/item/device/radio/headset/tgui_state(mob/user) - return GLOB.tgui_inventory_state - -/obj/item/device/radio/headset/syndicate - origin_tech = list(TECH_ILLEGAL = 3) - syndie = 1 - ks1type = /obj/item/device/encryptionkey/syndicate - -/obj/item/device/radio/headset/syndicate/alt - icon_state = "syndie_headset" - item_state = "headset" - origin_tech = list(TECH_ILLEGAL = 3) - syndie = 1 - ks1type = /obj/item/device/encryptionkey/syndicate - -/obj/item/device/radio/headset/raider - origin_tech = list(TECH_ILLEGAL = 2) - syndie = 1 - ks1type = /obj/item/device/encryptionkey/raider - -/obj/item/device/radio/headset/raider/Initialize() - . = ..() - set_frequency(RAID_FREQ) - -/obj/item/device/radio/headset/binary - origin_tech = list(TECH_ILLEGAL = 3) - ks1type = /obj/item/device/encryptionkey/binary - -/obj/item/device/radio/headset/headset_sec - name = "security radio headset" - desc = "This is used by your elite security force." - icon_state = "sec_headset" - ks2type = /obj/item/device/encryptionkey/headset_sec - -/obj/item/device/radio/headset/headset_sec/alt - name = "security bowman headset" - desc = "This is used by your elite security force." - icon_state = "sec_headset_alt" - ks2type = /obj/item/device/encryptionkey/headset_sec - -/obj/item/device/radio/headset/headset_eng - name = "engineering radio headset" - desc = "When the engineers wish to chat like girls." - icon_state = "eng_headset" - ks2type = /obj/item/device/encryptionkey/headset_eng - -/obj/item/device/radio/headset/headset_eng/alt - name = "engineering bowman headset" - desc = "When the engineers wish to chat like girls." - icon_state = "eng_headset_alt" - ks2type = /obj/item/device/encryptionkey/headset_eng - -/obj/item/device/radio/headset/headset_rob - name = "robotics radio headset" - desc = "Made specifically for the roboticists who cannot decide between departments." - icon_state = "rob_headset" - ks2type = /obj/item/device/encryptionkey/headset_rob - -/obj/item/device/radio/headset/headset_med - name = "medical radio headset" - desc = "A headset for the trained staff of the medbay." - icon_state = "med_headset" - ks2type = /obj/item/device/encryptionkey/headset_med - -/obj/item/device/radio/headset/headset_med/alt - name = "medical bowman headset" - desc = "A headset for the trained staff of the medbay." - icon_state = "med_headset_alt" - ks2type = /obj/item/device/encryptionkey/headset_med - -/obj/item/device/radio/headset/headset_sci - name = "science radio headset" - desc = "A sciency headset. Like usual." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/headset_sci - -/obj/item/device/radio/headset/headset_medsci - name = "medical research radio headset" - desc = "A headset that is a result of the mating between medical and science." - icon_state = "med_headset" - ks2type = /obj/item/device/encryptionkey/headset_medsci - -/obj/item/device/radio/headset/headset_com - name = "command radio headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/headset_com - -/obj/item/device/radio/headset/headset_com/alt - name = "command bowman headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/headset_com - - -/obj/item/device/radio/headset/heads/captain - name = "site manager's headset" - desc = "The headset of the boss." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/captain - -/obj/item/device/radio/headset/heads/captain/alt - name = "site manager's bowman headset" - desc = "The headset of the boss." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/captain - -/obj/item/device/radio/headset/heads/captain/sfr - name = "SFR headset" - desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/captain - -/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. - name = "\improper AI subspace transceiver" - desc = "Integrated AI radio transceiver." - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio" - item_state = "headset" - ks2type = /obj/item/device/encryptionkey/heads/ai_integrated - var/myAi = null // Atlantis: Reference back to the AI which has this radio. - var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu. - -/obj/item/device/radio/headset/heads/ai_integrated/receive_range(freq, level) - if (disabledAi) - return -1 //Transciever Disabled. - return ..(freq, level, 1) - -/obj/item/device/radio/headset/heads/rd - name = "research director's headset" - desc = "Headset of the eccentric-in-chief." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/rd - -/obj/item/device/radio/headset/heads/rd/alt - name = "research director's bowman headset" - desc = "Headset of the eccentric-in-chief." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/rd - -/obj/item/device/radio/headset/heads/hos - name = "head of security's headset" - desc = "The headset of the hardass who protects your worthless lives." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/heads/hos/alt - name = "head of security's bowman headset" - desc = "The headset of the hardass who protects your worthless lives." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/heads/ce - name = "chief engineer's headset" - desc = "The headset of the clown who is in charge of the circus." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/ce - -/obj/item/device/radio/headset/heads/ce/alt - name = "chief engineer's bowman headset" - desc = "The headset of the clown who is in charge of the circus." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/ce - -/obj/item/device/radio/headset/heads/cmo - name = "chief medical officer's headset" - desc = "The headset of the highly trained medical chief." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/cmo - -/obj/item/device/radio/headset/heads/cmo/alt - name = "chief medical officer's bowman headset" - desc = "The headset of the highly trained medical chief." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/cmo - -/obj/item/device/radio/headset/heads/hop - name = "head of personnel's headset" - desc = "The headset of the poor fool who will one day be Site Manager." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/hop - -/obj/item/device/radio/headset/heads/hop/alt - name = "head of personnel's bowman headset" - desc = "The headset of the poor fool who will one day be Site Manager." - icon_state = "com_headset_alt" - ks2type = /obj/item/device/encryptionkey/heads/hop - -/obj/item/device/radio/headset/headset_mine - name = "mining radio headset" - desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down." - icon_state = "mine_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/device/encryptionkey/headset_cargo - -/obj/item/device/radio/headset/headset_cargo - name = "supply radio headset" - desc = "A headset used by the QM and their cronies." - icon_state = "cargo_headset" - ks2type = /obj/item/device/encryptionkey/headset_cargo - -/obj/item/device/radio/headset/headset_cargo/alt - name = "supply bowman headset" - desc = "A bowman headset used by the QM and their cronies." - icon_state = "cargo_headset_alt" - ks2type = /obj/item/device/encryptionkey/headset_cargo - -/obj/item/device/radio/headset/headset_service - name = "service radio headset" - desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean." - icon_state = "srv_headset" - ks2type = /obj/item/device/encryptionkey/headset_service - -/obj/item/device/radio/headset/ert - name = "emergency response team radio headset" - desc = "The headset of the boss's boss." - icon_state = "com_headset" - centComm = 1 -// freerange = 1 - ks2type = /obj/item/device/encryptionkey/ert - -/obj/item/device/radio/headset/ert/alt - name = "emergency response team bowman headset" - desc = "The headset of the boss's boss." - icon_state = "com_headset_alt" -// freerange = 1 - ks2type = /obj/item/device/encryptionkey/ert - -/obj/item/device/radio/headset/omni //Only for the admin intercoms - ks2type = /obj/item/device/encryptionkey/omni - -/obj/item/device/radio/headset/ia - name = "internal affair's headset" - desc = "The headset of your worst enemy." - icon_state = "com_headset" - ks2type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/mmi_radio - name = "brain-integrated radio" - desc = "MMIs and synthetic brains are often equipped with these." - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio" - item_state = "headset" - var/mmiowner = null - var/radio_enabled = 1 - -/obj/item/device/radio/headset/mmi_radio/receive_range(freq, level) - if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal)) - return -1 //Transciever Disabled. - return ..(freq, level, 1) - -/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if(!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey))) - return - - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(keyslot1 || keyslot2) - - - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - - if(keyslot1) - var/turf/T = get_turf(user) - if(T) - keyslot1.loc = T - keyslot1 = null - - - - if(keyslot2) - var/turf/T = get_turf(user) - if(T) - keyslot2.loc = T - keyslot2 = null - - recalculateChannels() - to_chat(user, "You pop out the encryption keys in the headset!") - playsound(src, W.usesound, 50, 1) - - else - to_chat(user, "This headset doesn't have any encryption keys! How useless...") - - if(istype(W, /obj/item/device/encryptionkey/)) - if(keyslot1 && keyslot2) - to_chat(user, "The headset can't hold another key!") - return - - if(!keyslot1) - user.drop_item() - W.loc = src - keyslot1 = W - - else - user.drop_item() - W.loc = src - keyslot2 = W - - - recalculateChannels() - - return - - -/obj/item/device/radio/headset/recalculateChannels(var/setDescription = 0) - src.channels = list() - src.translate_binary = 0 - src.translate_hive = 0 - src.syndie = 0 - - if(keyslot1) - for(var/ch_name in keyslot1.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot1.channels[ch_name] - - if(keyslot1.translate_binary) - src.translate_binary = 1 - - if(keyslot1.translate_hive) - src.translate_hive = 1 - - if(keyslot1.syndie) - src.syndie = 1 - - if(keyslot2) - for(var/ch_name in keyslot2.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot2.channels[ch_name] - - if(keyslot2.translate_binary) - src.translate_binary = 1 - - if(keyslot2.translate_hive) - src.translate_hive = 1 - - if(keyslot2.syndie) - src.syndie = 1 - - - for (var/ch_name in channels) - if(!radio_controller) - sleep(30) // Waiting for the radio_controller to be created. - if(!radio_controller) - src.name = "broken radio headset" - return - - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - - if(setDescription) - setupRadioDescription() - - return - -/obj/item/device/radio/headset/proc/setupRadioDescription() - var/radio_text = "" - for(var/i = 1 to channels.len) - var/channel = channels[i] - var/key = get_radio_key_from_channel(channel) - radio_text += "[key] - [channel]" - if(i != channels.len) - radio_text += ", " - - radio_desc = radio_text +/obj/item/device/radio/headset + name = "radio headset" + desc = "An updated, modular intercom that fits over the head. Takes encryption keys" + var/radio_desc = "" + icon_state = "headset" + item_state = null //To remove the radio's state + matter = list(MAT_STEEL = 75) + subspace_transmission = 1 + canhear_range = 0 // can't hear headsets from very far away + slot_flags = SLOT_EARS + sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi') + + var/translate_binary = 0 + var/translate_hive = 0 + var/obj/item/device/encryptionkey/keyslot1 = null + var/obj/item/device/encryptionkey/keyslot2 = null + var/ks1type = null + var/ks2type = null + + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + +/obj/item/device/radio/headset/New() + ..() + internal_channels.Cut() + if(ks1type) + keyslot1 = new ks1type(src) + if(ks2type) + keyslot2 = new ks2type(src) + recalculateChannels(1) + +/obj/item/device/radio/headset/Destroy() + qdel(keyslot1) + qdel(keyslot2) + keyslot1 = null + keyslot2 = null + return ..() + +/obj/item/device/radio/headset/list_channels(var/mob/user) + return list_secure_channels() + +/obj/item/device/radio/headset/examine(mob/user) + . = ..() + + if(radio_desc && Adjacent(user)) + . += "The following channels are available:" + . += radio_desc + +/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, list/message_pieces, channel) + if(channel == "special") + if(translate_binary) + var/datum/language/binary = GLOB.all_languages["Robot Talk"] + binary.broadcast(M, M.strip_prefixes(multilingual_to_message(message_pieces))) + return RADIO_CONNECTION_NON_SUBSPACE + if(translate_hive) + var/datum/language/hivemind = GLOB.all_languages["Hivemind"] + hivemind.broadcast(M, M.strip_prefixes(multilingual_to_message(message_pieces))) + return RADIO_CONNECTION_NON_SUBSPACE + return RADIO_CONNECTION_FAIL + + return ..() + +/obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0) + if(!ishuman(src.loc)) //CHOMP Addition, this IF block. + return ..(freq, level) //CHOMP Addition end + if (aiOverride) + playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) + return ..(freq, level) + if(ishuman(src.loc)) + var/mob/living/carbon/human/H = src.loc + if(H.l_ear == src || H.r_ear == src) + playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) + return ..(freq, level) + return -1 + +/obj/item/device/radio/headset/get_worn_icon_state(var/slot_name) + var/append = "" + if(icon_override) + switch(slot_name) + if(slot_l_ear_str) + append = "_l" + if(slot_r_ear_str) + append = "_r" + + return "[..()][append]" + +/obj/item/device/radio/headset/tgui_state(mob/user) + return GLOB.tgui_inventory_state + +/obj/item/device/radio/headset/syndicate + origin_tech = list(TECH_ILLEGAL = 3) + syndie = 1 + ks1type = /obj/item/device/encryptionkey/syndicate + +/obj/item/device/radio/headset/syndicate/alt + icon_state = "syndie_headset" + item_state = "headset" + origin_tech = list(TECH_ILLEGAL = 3) + syndie = 1 + ks1type = /obj/item/device/encryptionkey/syndicate + +/obj/item/device/radio/headset/raider + origin_tech = list(TECH_ILLEGAL = 2) + syndie = 1 + ks1type = /obj/item/device/encryptionkey/raider + +/obj/item/device/radio/headset/raider/Initialize() + . = ..() + set_frequency(RAID_FREQ) + +/obj/item/device/radio/headset/binary + origin_tech = list(TECH_ILLEGAL = 3) + ks1type = /obj/item/device/encryptionkey/binary + +/obj/item/device/radio/headset/headset_sec + name = "security radio headset" + desc = "This is used by your elite security force." + icon_state = "sec_headset" + ks2type = /obj/item/device/encryptionkey/headset_sec + +/obj/item/device/radio/headset/headset_sec/alt + name = "security bowman headset" + desc = "This is used by your elite security force." + icon_state = "sec_headset_alt" + ks2type = /obj/item/device/encryptionkey/headset_sec + +/obj/item/device/radio/headset/headset_eng + name = "engineering radio headset" + desc = "When the engineers wish to chat like girls." + icon_state = "eng_headset" + ks2type = /obj/item/device/encryptionkey/headset_eng + +/obj/item/device/radio/headset/headset_eng/alt + name = "engineering bowman headset" + desc = "When the engineers wish to chat like girls." + icon_state = "eng_headset_alt" + ks2type = /obj/item/device/encryptionkey/headset_eng + +/obj/item/device/radio/headset/headset_rob + name = "robotics radio headset" + desc = "Made specifically for the roboticists who cannot decide between departments." + icon_state = "rob_headset" + ks2type = /obj/item/device/encryptionkey/headset_rob + +/obj/item/device/radio/headset/headset_med + name = "medical radio headset" + desc = "A headset for the trained staff of the medbay." + icon_state = "med_headset" + ks2type = /obj/item/device/encryptionkey/headset_med + +/obj/item/device/radio/headset/headset_med/alt + name = "medical bowman headset" + desc = "A headset for the trained staff of the medbay." + icon_state = "med_headset_alt" + ks2type = /obj/item/device/encryptionkey/headset_med + +/obj/item/device/radio/headset/headset_sci + name = "science radio headset" + desc = "A sciency headset. Like usual." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/headset_sci + +/obj/item/device/radio/headset/headset_medsci + name = "medical research radio headset" + desc = "A headset that is a result of the mating between medical and science." + icon_state = "med_headset" + ks2type = /obj/item/device/encryptionkey/headset_medsci + +/obj/item/device/radio/headset/headset_com + name = "command radio headset" + desc = "A headset with a commanding channel." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/headset_com + +/obj/item/device/radio/headset/headset_com/alt + name = "command bowman headset" + desc = "A headset with a commanding channel." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/headset_com + + +/obj/item/device/radio/headset/heads/captain + name = "site manager's headset" + desc = "The headset of the boss." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/captain + +/obj/item/device/radio/headset/heads/captain/alt + name = "site manager's bowman headset" + desc = "The headset of the boss." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/captain + +/obj/item/device/radio/headset/heads/captain/sfr + name = "SFR headset" + desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/captain + +/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. + name = "\improper AI subspace transceiver" + desc = "Integrated AI radio transceiver." + icon = 'icons/obj/robot_component.dmi' + icon_state = "radio" + item_state = "headset" + ks2type = /obj/item/device/encryptionkey/heads/ai_integrated + var/myAi = null // Atlantis: Reference back to the AI which has this radio. + var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu. + +/obj/item/device/radio/headset/heads/ai_integrated/receive_range(freq, level) + if (disabledAi) + return -1 //Transciever Disabled. + return ..(freq, level, 1) + +/obj/item/device/radio/headset/heads/rd + name = "research director's headset" + desc = "Headset of the eccentric-in-chief." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/rd + +/obj/item/device/radio/headset/heads/rd/alt + name = "research director's bowman headset" + desc = "Headset of the eccentric-in-chief." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/rd + +/obj/item/device/radio/headset/heads/hos + name = "head of security's headset" + desc = "The headset of the hardass who protects your worthless lives." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/hos + +/obj/item/device/radio/headset/heads/hos/alt + name = "head of security's bowman headset" + desc = "The headset of the hardass who protects your worthless lives." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/hos + +/obj/item/device/radio/headset/heads/ce + name = "chief engineer's headset" + desc = "The headset of the clown who is in charge of the circus." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/ce + +/obj/item/device/radio/headset/heads/ce/alt + name = "chief engineer's bowman headset" + desc = "The headset of the clown who is in charge of the circus." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/ce + +/obj/item/device/radio/headset/heads/cmo + name = "chief medical officer's headset" + desc = "The headset of the highly trained medical chief." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/cmo + +/obj/item/device/radio/headset/heads/cmo/alt + name = "chief medical officer's bowman headset" + desc = "The headset of the highly trained medical chief." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/cmo + +/obj/item/device/radio/headset/heads/hop + name = "head of personnel's headset" + desc = "The headset of the poor fool who will one day be Site Manager." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/hop + +/obj/item/device/radio/headset/heads/hop/alt + name = "head of personnel's bowman headset" + desc = "The headset of the poor fool who will one day be Site Manager." + icon_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/heads/hop + +/obj/item/device/radio/headset/headset_mine + name = "mining radio headset" + desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down." + icon_state = "mine_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/headset_cargo + +/obj/item/device/radio/headset/headset_cargo + name = "supply radio headset" + desc = "A headset used by the QM and their cronies." + icon_state = "cargo_headset" + ks2type = /obj/item/device/encryptionkey/headset_cargo + +/obj/item/device/radio/headset/headset_cargo/alt + name = "supply bowman headset" + desc = "A bowman headset used by the QM and their cronies." + icon_state = "cargo_headset_alt" + ks2type = /obj/item/device/encryptionkey/headset_cargo + +/obj/item/device/radio/headset/headset_service + name = "service radio headset" + desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean." + icon_state = "srv_headset" + ks2type = /obj/item/device/encryptionkey/headset_service + +/obj/item/device/radio/headset/ert + name = "emergency response team radio headset" + desc = "The headset of the boss's boss." + icon_state = "com_headset" + centComm = 1 +// freerange = 1 + ks2type = /obj/item/device/encryptionkey/ert + +/obj/item/device/radio/headset/ert/alt + name = "emergency response team bowman headset" + desc = "The headset of the boss's boss." + icon_state = "com_headset_alt" +// freerange = 1 + ks2type = /obj/item/device/encryptionkey/ert + +/obj/item/device/radio/headset/omni //Only for the admin intercoms + ks2type = /obj/item/device/encryptionkey/omni + +/obj/item/device/radio/headset/ia + name = "internal affair's headset" + desc = "The headset of your worst enemy." + icon_state = "com_headset" + ks2type = /obj/item/device/encryptionkey/heads/hos + +/obj/item/device/radio/headset/mmi_radio + name = "brain-integrated radio" + desc = "MMIs and synthetic brains are often equipped with these." + icon = 'icons/obj/robot_component.dmi' + icon_state = "radio" + item_state = "headset" + var/mmiowner = null + var/radio_enabled = 1 + +/obj/item/device/radio/headset/mmi_radio/receive_range(freq, level) + if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal)) + return -1 //Transciever Disabled. + return ..(freq, level, 1) + +/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) +// ..() + user.set_machine(src) + if(!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey))) + return + + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(keyslot1 || keyslot2) + + + for(var/ch_name in channels) + radio_controller.remove_object(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = null + + + if(keyslot1) + var/turf/T = get_turf(user) + if(T) + keyslot1.loc = T + keyslot1 = null + + + + if(keyslot2) + var/turf/T = get_turf(user) + if(T) + keyslot2.loc = T + keyslot2 = null + + recalculateChannels() + to_chat(user, "You pop out the encryption keys in the headset!") + playsound(src, W.usesound, 50, 1) + + else + to_chat(user, "This headset doesn't have any encryption keys! How useless...") + + if(istype(W, /obj/item/device/encryptionkey/)) + if(keyslot1 && keyslot2) + to_chat(user, "The headset can't hold another key!") + return + + if(!keyslot1) + user.drop_item() + W.loc = src + keyslot1 = W + + else + user.drop_item() + W.loc = src + keyslot2 = W + + + recalculateChannels() + + return + + +/obj/item/device/radio/headset/recalculateChannels(var/setDescription = 0) + src.channels = list() + src.translate_binary = 0 + src.translate_hive = 0 + src.syndie = 0 + + if(keyslot1) + for(var/ch_name in keyslot1.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] = keyslot1.channels[ch_name] + + if(keyslot1.translate_binary) + src.translate_binary = 1 + + if(keyslot1.translate_hive) + src.translate_hive = 1 + + if(keyslot1.syndie) + src.syndie = 1 + + if(keyslot2) + for(var/ch_name in keyslot2.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] = keyslot2.channels[ch_name] + + if(keyslot2.translate_binary) + src.translate_binary = 1 + + if(keyslot2.translate_hive) + src.translate_hive = 1 + + if(keyslot2.syndie) + src.syndie = 1 + + + for (var/ch_name in channels) + if(!radio_controller) + sleep(30) // Waiting for the radio_controller to be created. + if(!radio_controller) + src.name = "broken radio headset" + return + + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + + if(setDescription) + setupRadioDescription() + + return + +/obj/item/device/radio/headset/proc/setupRadioDescription() + var/radio_text = "" + for(var/i = 1 to channels.len) + var/channel = channels[i] + var/key = get_radio_key_from_channel(channel) + radio_text += "[key] - [channel]" + if(i != channels.len) + radio_text += ", " + + radio_desc = radio_text diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b2b6b73b75..49a30815c6 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,769 +1,769 @@ -// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't -//VOREStation Edit Start - Updating this for Virgo -var/global/list/default_internal_channels = list( - num2text(PUB_FREQ) = list(), - num2text(AI_FREQ) = list(access_synth), - num2text(ENT_FREQ) = list(), - num2text(ERT_FREQ) = list(access_cent_specops), - num2text(COMM_FREQ)= list(access_heads), - num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), - num2text(MED_FREQ) = list(access_medical_equip), - num2text(MED_I_FREQ)=list(access_medical_equip), - num2text(BDCM_FREQ) =list(access_security), // CHOMPEdit - - num2text(SEC_FREQ) = list(access_security), - num2text(SEC_I_FREQ)=list(access_security), - num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology), - num2text(SUP_FREQ) = list(access_cargo, access_mining_station), - num2text(SRV_FREQ) = list(access_janitor, access_library, access_hydroponics, access_bar, access_kitchen), - num2text(EXP_FREQ) = list(access_explorer, access_pilot) //CHOMP explo keep -) - -var/global/list/default_medbay_channels = list( - num2text(PUB_FREQ) = list(), - num2text(MED_FREQ) = list(), - num2text(MED_I_FREQ) = list() -) -//VOREStation Edit End - -/obj/item/device/radio - icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - name = "shortwave radio" //VOREStation Edit - desc = "Used to talk to people when headsets don't function. Range is limited." - suffix = "\[3\]" - icon_state = "walkietalkie" - item_state = "radio" - - var/on = 1 // 0 for off - var/last_transmission - var/frequency = PUB_FREQ //common chat - var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies - var/canhear_range = 3 // the range which mobs can hear this radio from - var/loudspeaker = TRUE // Allows borgs to disable canhear_range. - var/datum/wires/radio/wires = null - var/b_stat = 0 - var/broadcasting = 0 - var/listening = 1 - var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h - var/subspace_transmission = 0 - var/subspace_switchable = FALSE - var/adhoc_fallback = FALSE //Falls back to 'radio' mode if subspace not available - var/syndie = 0//Holder to see if it's a syndicate encrypted radio - var/centComm = 0//Holder to see if it's a CentCom encrypted radio - slot_flags = SLOT_BELT - throw_speed = 2 - throw_range = 9 - w_class = ITEMSIZE_SMALL - show_messages = 1 - - // Bluespace radios talk directly to telecomms equipment - var/bluespace_radio = FALSE - var/datum/weakref/bs_tx_weakref //Maybe misleading, this is the device to TRANSMIT TO - // For mappers or subtypes, to start them prelinked to these devices - var/bs_tx_preload_id - var/bs_rx_preload_id - - matter = list(MAT_GLASS = 25,MAT_STEEL = 75) - var/const/FREQ_LISTENING = 1 - var/list/internal_channels - - var/datum/radio_frequency/radio_connection - var/list/datum/radio_frequency/secure_radio_connections = new - -/obj/item/device/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - -/obj/item/device/radio/New() - ..() - wires = new(src) - internal_channels = default_internal_channels.Copy() - listening_objects += src - -/obj/item/device/radio/Destroy() - qdel(wires) - wires = null - listening_objects -= src - if(radio_controller) - radio_controller.remove_object(src, frequency) - for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - return ..() - - -/obj/item/device/radio/Initialize() - . = ..() - if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) - frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - set_frequency(frequency) - - for (var/ch_name in channels) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - - if(bluespace_radio) - if(bs_tx_preload_id) - //Try to find a receiver - for(var/obj/machinery/telecomms/receiver/RX in telecomms_list) - if(RX.id == bs_tx_preload_id) //Again, bs_tx is the thing to TRANSMIT TO, so a receiver. - bs_tx_weakref = WEAKREF(RX) - RX.link_radio(src) - break - //Hmm, howabout an AIO machine - if(!bs_tx_weakref) - for(var/obj/machinery/telecomms/allinone/AIO in telecomms_list) - if(AIO.id == bs_tx_preload_id) - bs_tx_weakref = WEAKREF(AIO) - AIO.link_radio(src) - break - if(!bs_tx_weakref) - testing("A radio [src] at [x],[y],[z] specified bluespace prelink IDs, but the machines with corresponding IDs ([bs_tx_preload_id], [bs_rx_preload_id]) couldn't be found.") - - if(bs_rx_preload_id) - var/found = 0 - //Try to find a transmitter - for(var/obj/machinery/telecomms/broadcaster/TX in telecomms_list) - if(TX.id == bs_rx_preload_id) //Again, bs_rx is the thing to RECEIVE FROM, so a transmitter. - TX.link_radio(src) - found = 1 - break - //Hmm, howabout an AIO machine - if(!found) - for(var/obj/machinery/telecomms/allinone/AIO in telecomms_list) - if(AIO.id == bs_rx_preload_id) - AIO.link_radio(src) - found = 1 - break - if(!found) - testing("A radio [src] at [x],[y],[z] specified bluespace prelink IDs, but the machines with corresponding IDs ([bs_tx_preload_id], [bs_rx_preload_id]) couldn't be found.") - -/obj/item/device/radio/proc/recalculateChannels() - return - -/obj/item/device/radio/attack_self(mob/user as mob) - user.set_machine(src) - interact(user) - -/obj/item/device/radio/interact(mob/user) - if(!user) - return FALSE - - if(b_stat) - wires.Interact(user) - - return tgui_interact(user) - -/obj/item/device/radio/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Radio", name, parent_ui) - ui.open() - -/obj/item/device/radio/tgui_data(mob/user) - var/data[0] - - data["rawfreq"] = frequency - data["listening"] = listening - data["broadcasting"] = broadcasting - data["subspace"] = subspace_transmission - data["subspaceSwitchable"] = subspace_switchable - data["loudspeaker"] = loudspeaker - - data["mic_cut"] = (wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) - data["spk_cut"] = (wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) - - var/list/chanlist = list_channels(user) - if(islist(chanlist) && chanlist.len) - data["chan_list"] = chanlist - else - data["chan_list"] = null - - if(syndie) - data["useSyndMode"] = 1 - - data["minFrequency"] = PUBLIC_LOW_FREQ - data["maxFrequency"] = PUBLIC_HIGH_FREQ - - return data - -/obj/item/device/radio/proc/list_channels(var/mob/user) - return list_internal_channels(user) - -/obj/item/device/radio/proc/list_secure_channels(var/mob/user) - var/dat[0] - - for(var/ch_name in channels) - var/chan_stat = channels[ch_name] - var/listening = !!(chan_stat & FREQ_LISTENING) != 0 - - dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "freq" = radiochannels[ch_name]))) - - return dat - -/obj/item/device/radio/proc/list_internal_channels(var/mob/user) - var/dat[0] - for(var/internal_chan in internal_channels) - if(has_channel_access(user, internal_chan)) - dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "freq" = text2num(internal_chan)))) - - return dat - -/obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) - if(!user) - return FALSE - - if(!(freq in internal_channels)) - return FALSE - - return user.has_internal_radio_channel_access(internal_channels[freq]) - -/mob/proc/has_internal_radio_channel_access(var/list/req_one_accesses) - var/obj/item/weapon/card/id/I = GetIdCard() - return has_access(list(), req_one_accesses, I ? I.GetAccess() : list()) - -/mob/observer/dead/has_internal_radio_channel_access(var/list/req_one_accesses) - return can_admin_interact() - -/obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) - var/list = !!(chan_stat&FREQ_LISTENING)!=0 - return {" - [chan_name]
                    - Speaker: [list ? "Engaged" : "Disengaged"]
                    - "} - -/obj/item/device/radio/proc/ToggleBroadcast() - broadcasting = !broadcasting && !(wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) - -/obj/item/device/radio/proc/ToggleReception() - listening = !listening && !(wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) - -/obj/item/device/radio/CanUseTopic() - if(!on) - return STATUS_CLOSE - return ..() - -/obj/item/device/radio/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("setFrequency") - var/new_frequency = (text2num(params["freq"])) - if((new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)) - new_frequency = sanitize_frequency(new_frequency) - set_frequency(new_frequency) - if(hidden_uplink) - if(hidden_uplink.check_trigger(usr, frequency, traitor_frequency)) - usr << browse(null, "window=radio") - . = TRUE - if("broadcast") - ToggleBroadcast() - . = TRUE - if("listen") - ToggleReception() - . = TRUE - if("channel") - var/chan_name = params["channel"] - if(channels[chan_name] & FREQ_LISTENING) - channels[chan_name] &= ~FREQ_LISTENING - else - channels[chan_name] |= FREQ_LISTENING - . = TRUE - if("specFreq") - var/freq = params["channel"] - if(has_channel_access(usr, freq)) - set_frequency(text2num(freq)) - . = TRUE - if("subspace") - if(subspace_switchable) - subspace_transmission = !subspace_transmission - if(!subspace_transmission) - channels = list() - to_chat(usr, "Subspace Transmission is disabled") - else - recalculateChannels() - to_chat(usr, "Subspace Transmission is enabled") - . = TRUE - if("toggleLoudspeaker") - if(!subspace_switchable) - return - loudspeaker = !loudspeaker - - if(loudspeaker) - to_chat(usr, "Loadspeaker enabled.") - else - to_chat(usr, "Loadspeaker disabled.") - . = TRUE - - if(. && iscarbon(usr)) - playsound(src, "button", 10) - -GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) - -/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states) //VOREStation Edit - - if(!GLOB.autospeaker) - return - var/datum/radio_frequency/connection = null - if(channel && channels && channels.len > 0) - if(channel == "department") - channel = channels[1] - connection = secure_radio_connections[channel] - else - connection = radio_connection - channel = null - if(!istype(connection)) - return - - if(!LAZYLEN(zlevels)) - zlevels = list(0) - //VOREStation Edit Start - if(!states) - states = "states" - //VOREStation Edit End - GLOB.autospeaker.SetName(from) - Broadcast_Message(connection, GLOB.autospeaker, - 0, "*garbled automated announcement*", src, - message_to_multilingual(message, GLOB.all_languages[LANGUAGE_GALCOM]), from, "Automated Announcement", from, "synthesized voice", - DATA_FAKE, 0, zlevels, connection.frequency, states) //VOREStation Edit - -// Interprets the message mode when talking into a radio, possibly returning a connection datum -/obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode) - // If a channel isn't specified, send to common. - if(!message_mode || message_mode == "headset") - return radio_connection - - // Otherwise, if a channel is specified, look for it. - if(channels && channels.len > 0) - if (message_mode == "department") // Department radio shortcut - message_mode = channels[1] - - if (channels[message_mode]) // only broadcast if the channel is set on - return secure_radio_connections[message_mode] - - // If we were to send to a channel we don't have, drop it. - return RADIO_CONNECTION_FAIL - -/obj/item/device/radio/talk_into(mob/living/M as mob, list/message_pieces, channel, var/verb = "says") - if(!on) - return FALSE // the device has to be on - // Fix for permacell radios, but kinda eh about actually fixing them. - if(!M || !message_pieces) - return FALSE - - if(istype(M)) - M.trigger_aiming(TARGET_CAN_RADIO) - - // Uncommenting this. To the above comment: - // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom - if(wires.is_cut(WIRE_RADIO_TRANSMIT)) // The device has to have all its wires and shit intact - return FALSE - - if(!radio_connection) - set_frequency(frequency) - - /* Quick introduction: - This new radio system uses a very robust FTL signaling technology unoriginally - dubbed "subspace" which is somewhat similar to 'blue-space' but can't - actually transmit large mass. Headsets are the only radio devices capable - of sending subspace transmissions to the Communications Satellite. - - A headset sends a signal to a subspace listener/reciever elsewhere in space, - the signal gets processed and logged, and an audible transmission gets sent - to each individual headset. - */ - - //#### Grab the connection datum ####// - var/message_mode = handle_message_mode(M, message_pieces, channel) - switch(message_mode) - if(RADIO_CONNECTION_FAIL) - return FALSE - if(RADIO_CONNECTION_NON_SUBSPACE) - return TRUE - - if(!istype(message_mode, /datum/radio_frequency)) - return FALSE - - var/pos_z = get_z(src) - var/datum/radio_frequency/connection = message_mode - - //#### Tagging the signal with all appropriate identity values ####// - - // ||-- The mob's name identity --|| - var/displayname = M.name // grab the display name (name you get when you hover over someone's icon) - var/real_name = M.real_name // mob's real name - var/mobkey = "none" // player key associated with mob - var/voicemask = 0 // the speaker is wearing a voice mask - if(M.client) - mobkey = M.key // assign the mob's key - - - var/jobname // the mob's "job" - - // --- Human: use their actual job --- - if (ishuman(M)) - var/mob/living/carbon/human/H = M - jobname = H.get_assignment() - - // --- Carbon Nonhuman --- - else if (iscarbon(M)) // Nonhuman carbon mob - jobname = "No id" - - // --- AI --- - else if (isAI(M)) - jobname = "AI" - - // --- Cyborg --- - else if (isrobot(M)) - jobname = "Cyborg" - - // --- Personal AI (pAI) --- - else if (istype(M, /mob/living/silicon/pai)) - jobname = "Personal AI" - - // --- Unidentifiable mob --- - else - jobname = "Unknown" - - - // --- Modifications to the mob's identity --- - - // The mob is disguising their identity: - if (ishuman(M) && M.GetVoice() != real_name) - displayname = M.GetVoice() - jobname = "Unknown" - voicemask = 1 - - // First, we want to generate a new radio signal - var/datum/signal/signal = new - - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - // Identity-associated tags: - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = displayname, // the mob's display name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmessage" = message_to_multilingual(pick(M.speak_emote)), // the message to display if the voice wasn't understood - "vname" = M.voice_name, // the name to display if the voice wasn't understood - "vmask" = voicemask, // 1 if the mob is using a voice gas mask - - // We store things that would otherwise be kept in the actual mob - // so that they can be logged even AFTER the mob is deleted or something - - // Other tags: - "compression" = rand(45,50), // compressed radio signal - "message" = message_pieces, // the actual sent message - "connection" = connection, // the radio connection to use - "radio" = src, // stores the radio used for transmission - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = SIGNAL_NORMAL, // determines what type of radio input it is: normal broadcast - "server" = null, // the last server to log this signal - "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery - "level" = pos_z, // The source's z level - "verb" = verb - ) - signal.frequency = connection.frequency // Quick frequency set - - var/filter_type = DATA_LOCAL //If we end up having to send it the old fashioned way, it's with this data var. - - /* ###### Bluespace radios talk directly to receivers (and only directly to receivers) ###### */ - if(bluespace_radio) - //Nothing to transmit to - if(!bs_tx_weakref) - to_chat(loc, "\The [src] buzzes to inform you of the lack of a functioning connection.") - return FALSE - - var/obj/machinery/telecomms/tx_to = bs_tx_weakref.resolve() - //Was linked, now destroyed or something - if(!tx_to) - bs_tx_weakref = null - to_chat(loc, "\The [src] buzzes to inform you of the lack of a functioning connection.") - return FALSE - - //Transmitted in the blind. If we get a message back, cool. If not, oh well. - signal.transmission_method = TRANSMISSION_BLUESPACE - return tx_to.receive_signal(signal) - - /* ###### Radios with subspace_transmission can only broadcast through subspace (unless they have adhoc_fallback) ###### */ - else if(subspace_transmission) - var/list/jamming = is_jammed(src) - if(jamming) - var/distance = 0 - var/area/our_area = get_area(src) - if(our_area.no_comms) - distance = 99 - else - distance = jamming["distance"] - to_chat(M, "\icon[src][bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") - return FALSE - - // First, we want to generate a new radio signal - signal.transmission_method = TRANSMISSION_SUBSPACE - - //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in telecomms_list) - R.receive_signal(signal) - - // Receiving code can be located in Telecommunications.dm - if(signal.data["done"] && (pos_z in signal.data["level"])) - return TRUE //Huzzah, sent via subspace - - else if(adhoc_fallback) //Less huzzah, we have to fallback - to_chat(loc, "\The [src] pings as it falls back to local radio transmission.") - subspace_transmission = FALSE - - else //Oh well - return FALSE - - /* ###### Intercoms and station-bounced radios ###### */ - else - /* --- Intercoms can only broadcast to other intercoms, but bounced radios can broadcast to bounced radios and intercoms --- */ - if(istype(src, /obj/item/device/radio/intercom)) - filter_type = DATA_INTERCOM - - /* --- Try to send a normal subspace broadcast first */ - signal.transmission_method = TRANSMISSION_SUBSPACE - signal.data["compression"] = 0 - - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in telecomms_list) - R.receive_signal(signal) - - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - if(signal.data["done"] && (pos_z in signal.data["level"])) - if(adhoc_fallback) - to_chat(loc, "\The [src] pings as it reestablishes subspace communications.") - subspace_transmission = TRUE - // we're done here. - return TRUE - - //Nothing handled any sort of remote radio-ing and returned before now, just squawk on this zlevel. - return Broadcast_Message(connection, M, voicemask, pick(M.speak_emote), - src, message_pieces, displayname, jobname, real_name, M.voice_name, - filter_type, signal.data["compression"], using_map.get_map_levels(pos_z), connection.frequency, verb) - - -/obj/item/device/radio/hear_talk(mob/M as mob, list/message_pieces, var/verb = "says") - if(broadcasting) - if(get_dist(src, M) <= canhear_range) - talk_into(M, message_pieces, null, verb) - -/obj/item/device/radio/proc/receive_range(freq, level) - // check if this radio can receive on the given frequency, and if so, - // what the range is in which mobs will hear the radio - // returns: -1 if can't receive, range otherwise - if(wires.is_cut(WIRE_RADIO_RECEIVER)) - return -1 - if(!listening) - return -1 - if(is_jammed(src)) - return -1 - if(!(0 in level)) - var/pos_z = get_z(src) - if(!(pos_z in level)) - return -1 - if(freq in ANTAG_FREQS) - if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys - return -1 - if(freq in CENT_FREQS) - if(!(src.centComm))//Checks to see if it's allowed on that frequency, based on the encryption keys - return -1 - if (!on) - return -1 - if (!freq) //recieved on main frequency - if (!listening) - return -1 - else - var/accept = (freq==frequency && listening) - if (!accept) - for (var/ch_name in channels) - var/datum/radio_frequency/RF = secure_radio_connections[ch_name] - if (RF && RF.frequency==freq && (channels[ch_name]&FREQ_LISTENING)) - accept = 1 - break - if (!accept) - return -1 - return canhear_range - -/obj/item/device/radio/proc/send_hear(freq, level) - var/range = receive_range(freq, level) - if(range > -1 && loudspeaker) - return get_mobs_or_objects_in_view(range, src) - - -/obj/item/device/radio/examine(mob/user) - . = ..() - - if((in_range(src, user) || loc == user)) - if(b_stat) - . += "\The [src] can be attached and modified!" - else - . += "\The [src] can not be modified or attached!" - -/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - user.set_machine(src) - if (!W.has_tool_quality(TOOL_SCREWDRIVER)) - return - b_stat = !( b_stat ) - if(!istype(src, /obj/item/device/radio/beacon)) - if (b_stat) - user.show_message("\The [src] can now be attached and modified!") - else - user.show_message("\The [src] can no longer be modified or attached!") - updateDialog() - //Foreach goto(83) - add_fingerprint(user) - return - else return - -/obj/item/device/radio/emp_act(severity) - broadcasting = 0 - listening = 0 - for (var/ch_name in channels) - channels[ch_name] = 0 - ..() - -/////////////////////////////// -//////////Borg Radios////////// -/////////////////////////////// -//Giving borgs their own radio to have some more room to work with -Sieve - -/obj/item/device/radio/borg - var/mob/living/silicon/robot/myborg = null // Cyborg which owns this radio. Used for power checks - var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key - icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component. - icon_state = "radio" - canhear_range = 0 - subspace_transmission = TRUE - subspace_switchable = TRUE - -/obj/item/device/radio/borg/Destroy() - myborg = null - return ..() - -/obj/item/device/radio/borg/list_channels(var/mob/user) - return list_secure_channels(user) - -/obj/item/device/radio/borg/talk_into() - . = ..() - if (isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - var/datum/robot_component/C = R.components["radio"] - R.cell_use_power(C.active_usage) - -/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey))) - return - - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(keyslot) - - - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - - if(keyslot) - var/turf/T = get_turf(user) - if(T) - keyslot.loc = T - keyslot = null - - recalculateChannels() - to_chat(user, "You pop out the encryption key in the radio!") - playsound(src, W.usesound, 50, 1) - - else - to_chat(user, "This radio doesn't have any encryption keys!") - - if(istype(W, /obj/item/device/encryptionkey/)) - if(keyslot) - to_chat(user, "The radio can't hold another key!") - return - - if(!keyslot) - user.drop_item() - W.loc = src - keyslot = W - - recalculateChannels() - - return - -/obj/item/device/radio/borg/recalculateChannels() - src.channels = list() - src.syndie = 0 - - var/mob/living/silicon/robot/D = src.loc - if(D.module) - for(var/ch_name in D.module.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] += D.module.channels[ch_name] - if(keyslot) - for(var/ch_name in keyslot.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] += keyslot.channels[ch_name] - - if(keyslot.syndie) - src.syndie = 1 - - for (var/ch_name in src.channels) - if(!radio_controller) - sleep(30) // Waiting for the radio_controller to be created. - if(!radio_controller) - src.name = "broken radio" - return - - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - - return - -/obj/item/device/radio/proc/config(op) - if(radio_controller) - for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections = new - channels = op - if(radio_controller) - for (var/ch_name in op) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - return - -/obj/item/device/radio/off - listening = 0 - -/obj/item/device/radio/phone - broadcasting = 0 - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - listening = 1 - name = "phone" - anchored = FALSE - -/obj/item/device/radio/phone/medbay - frequency = MED_I_FREQ - -/obj/item/device/radio/phone/medbay/New() - ..() - internal_channels = default_medbay_channels.Copy() +// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't +//VOREStation Edit Start - Updating this for Virgo +var/global/list/default_internal_channels = list( + num2text(PUB_FREQ) = list(), + num2text(AI_FREQ) = list(access_synth), + num2text(ENT_FREQ) = list(), + num2text(ERT_FREQ) = list(access_cent_specops), + num2text(COMM_FREQ)= list(access_heads), + num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), + num2text(MED_FREQ) = list(access_medical_equip), + num2text(MED_I_FREQ)=list(access_medical_equip), + num2text(BDCM_FREQ) =list(access_security), // CHOMPEdit + + num2text(SEC_FREQ) = list(access_security), + num2text(SEC_I_FREQ)=list(access_security), + num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology), + num2text(SUP_FREQ) = list(access_cargo, access_mining_station), + num2text(SRV_FREQ) = list(access_janitor, access_library, access_hydroponics, access_bar, access_kitchen), + num2text(EXP_FREQ) = list(access_explorer, access_pilot) //CHOMP explo keep +) + +var/global/list/default_medbay_channels = list( + num2text(PUB_FREQ) = list(), + num2text(MED_FREQ) = list(), + num2text(MED_I_FREQ) = list() +) +//VOREStation Edit End + +/obj/item/device/radio + icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit + name = "shortwave radio" //VOREStation Edit + desc = "Used to talk to people when headsets don't function. Range is limited." + suffix = "\[3\]" + icon_state = "walkietalkie" + item_state = "radio" + + var/on = 1 // 0 for off + var/last_transmission + var/frequency = PUB_FREQ //common chat + var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies + var/canhear_range = 3 // the range which mobs can hear this radio from + var/loudspeaker = TRUE // Allows borgs to disable canhear_range. + var/datum/wires/radio/wires = null + var/b_stat = 0 + var/broadcasting = 0 + var/listening = 1 + var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h + var/subspace_transmission = 0 + var/subspace_switchable = FALSE + var/adhoc_fallback = FALSE //Falls back to 'radio' mode if subspace not available + var/syndie = 0//Holder to see if it's a syndicate encrypted radio + var/centComm = 0//Holder to see if it's a CentCom encrypted radio + slot_flags = SLOT_BELT + throw_speed = 2 + throw_range = 9 + w_class = ITEMSIZE_SMALL + show_messages = 1 + + // Bluespace radios talk directly to telecomms equipment + var/bluespace_radio = FALSE + var/datum/weakref/bs_tx_weakref //Maybe misleading, this is the device to TRANSMIT TO + // For mappers or subtypes, to start them prelinked to these devices + var/bs_tx_preload_id + var/bs_rx_preload_id + + matter = list(MAT_GLASS = 25,MAT_STEEL = 75) + var/const/FREQ_LISTENING = 1 + var/list/internal_channels + + var/datum/radio_frequency/radio_connection + var/list/datum/radio_frequency/secure_radio_connections = new + +/obj/item/device/radio/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + +/obj/item/device/radio/New() + ..() + wires = new(src) + internal_channels = default_internal_channels.Copy() + listening_objects += src + +/obj/item/device/radio/Destroy() + qdel(wires) + wires = null + listening_objects -= src + if(radio_controller) + radio_controller.remove_object(src, frequency) + for (var/ch_name in channels) + radio_controller.remove_object(src, radiochannels[ch_name]) + return ..() + + +/obj/item/device/radio/Initialize() + . = ..() + if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) + frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) + set_frequency(frequency) + + for (var/ch_name in channels) + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + + if(bluespace_radio) + if(bs_tx_preload_id) + //Try to find a receiver + for(var/obj/machinery/telecomms/receiver/RX in telecomms_list) + if(RX.id == bs_tx_preload_id) //Again, bs_tx is the thing to TRANSMIT TO, so a receiver. + bs_tx_weakref = WEAKREF(RX) + RX.link_radio(src) + break + //Hmm, howabout an AIO machine + if(!bs_tx_weakref) + for(var/obj/machinery/telecomms/allinone/AIO in telecomms_list) + if(AIO.id == bs_tx_preload_id) + bs_tx_weakref = WEAKREF(AIO) + AIO.link_radio(src) + break + if(!bs_tx_weakref) + testing("A radio [src] at [x],[y],[z] specified bluespace prelink IDs, but the machines with corresponding IDs ([bs_tx_preload_id], [bs_rx_preload_id]) couldn't be found.") + + if(bs_rx_preload_id) + var/found = 0 + //Try to find a transmitter + for(var/obj/machinery/telecomms/broadcaster/TX in telecomms_list) + if(TX.id == bs_rx_preload_id) //Again, bs_rx is the thing to RECEIVE FROM, so a transmitter. + TX.link_radio(src) + found = 1 + break + //Hmm, howabout an AIO machine + if(!found) + for(var/obj/machinery/telecomms/allinone/AIO in telecomms_list) + if(AIO.id == bs_rx_preload_id) + AIO.link_radio(src) + found = 1 + break + if(!found) + testing("A radio [src] at [x],[y],[z] specified bluespace prelink IDs, but the machines with corresponding IDs ([bs_tx_preload_id], [bs_rx_preload_id]) couldn't be found.") + +/obj/item/device/radio/proc/recalculateChannels() + return + +/obj/item/device/radio/attack_self(mob/user as mob) + user.set_machine(src) + interact(user) + +/obj/item/device/radio/interact(mob/user) + if(!user) + return FALSE + + if(b_stat) + wires.Interact(user) + + return tgui_interact(user) + +/obj/item/device/radio/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Radio", name, parent_ui) + ui.open() + +/obj/item/device/radio/tgui_data(mob/user) + var/data[0] + + data["rawfreq"] = frequency + data["listening"] = listening + data["broadcasting"] = broadcasting + data["subspace"] = subspace_transmission + data["subspaceSwitchable"] = subspace_switchable + data["loudspeaker"] = loudspeaker + + data["mic_cut"] = (wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) + data["spk_cut"] = (wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) + + var/list/chanlist = list_channels(user) + if(islist(chanlist) && chanlist.len) + data["chan_list"] = chanlist + else + data["chan_list"] = null + + if(syndie) + data["useSyndMode"] = 1 + + data["minFrequency"] = PUBLIC_LOW_FREQ + data["maxFrequency"] = PUBLIC_HIGH_FREQ + + return data + +/obj/item/device/radio/proc/list_channels(var/mob/user) + return list_internal_channels(user) + +/obj/item/device/radio/proc/list_secure_channels(var/mob/user) + var/dat[0] + + for(var/ch_name in channels) + var/chan_stat = channels[ch_name] + var/listening = !!(chan_stat & FREQ_LISTENING) != 0 + + dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "freq" = radiochannels[ch_name]))) + + return dat + +/obj/item/device/radio/proc/list_internal_channels(var/mob/user) + var/dat[0] + for(var/internal_chan in internal_channels) + if(has_channel_access(user, internal_chan)) + dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "freq" = text2num(internal_chan)))) + + return dat + +/obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) + if(!user) + return FALSE + + if(!(freq in internal_channels)) + return FALSE + + return user.has_internal_radio_channel_access(internal_channels[freq]) + +/mob/proc/has_internal_radio_channel_access(var/list/req_one_accesses) + var/obj/item/weapon/card/id/I = GetIdCard() + return has_access(list(), req_one_accesses, I ? I.GetAccess() : list()) + +/mob/observer/dead/has_internal_radio_channel_access(var/list/req_one_accesses) + return can_admin_interact() + +/obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) + var/list = !!(chan_stat&FREQ_LISTENING)!=0 + return {" + [chan_name]
                    + Speaker: [list ? "Engaged" : "Disengaged"]
                    + "} + +/obj/item/device/radio/proc/ToggleBroadcast() + broadcasting = !broadcasting && !(wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) + +/obj/item/device/radio/proc/ToggleReception() + listening = !listening && !(wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) + +/obj/item/device/radio/CanUseTopic() + if(!on) + return STATUS_CLOSE + return ..() + +/obj/item/device/radio/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("setFrequency") + var/new_frequency = (text2num(params["freq"])) + if((new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)) + new_frequency = sanitize_frequency(new_frequency) + set_frequency(new_frequency) + if(hidden_uplink) + if(hidden_uplink.check_trigger(usr, frequency, traitor_frequency)) + usr << browse(null, "window=radio") + . = TRUE + if("broadcast") + ToggleBroadcast() + . = TRUE + if("listen") + ToggleReception() + . = TRUE + if("channel") + var/chan_name = params["channel"] + if(channels[chan_name] & FREQ_LISTENING) + channels[chan_name] &= ~FREQ_LISTENING + else + channels[chan_name] |= FREQ_LISTENING + . = TRUE + if("specFreq") + var/freq = params["channel"] + if(has_channel_access(usr, freq)) + set_frequency(text2num(freq)) + . = TRUE + if("subspace") + if(subspace_switchable) + subspace_transmission = !subspace_transmission + if(!subspace_transmission) + channels = list() + to_chat(usr, "Subspace Transmission is disabled") + else + recalculateChannels() + to_chat(usr, "Subspace Transmission is enabled") + . = TRUE + if("toggleLoudspeaker") + if(!subspace_switchable) + return + loudspeaker = !loudspeaker + + if(loudspeaker) + to_chat(usr, "Loadspeaker enabled.") + else + to_chat(usr, "Loadspeaker disabled.") + . = TRUE + + if(. && iscarbon(usr)) + playsound(src, "button", 10) + +GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) + +/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states) //VOREStation Edit + + if(!GLOB.autospeaker) + return + var/datum/radio_frequency/connection = null + if(channel && channels && channels.len > 0) + if(channel == "department") + channel = channels[1] + connection = secure_radio_connections[channel] + else + connection = radio_connection + channel = null + if(!istype(connection)) + return + + if(!LAZYLEN(zlevels)) + zlevels = list(0) + //VOREStation Edit Start + if(!states) + states = "states" + //VOREStation Edit End + GLOB.autospeaker.SetName(from) + Broadcast_Message(connection, GLOB.autospeaker, + 0, "*garbled automated announcement*", src, + message_to_multilingual(message, GLOB.all_languages[LANGUAGE_GALCOM]), from, "Automated Announcement", from, "synthesized voice", + DATA_FAKE, 0, zlevels, connection.frequency, states) //VOREStation Edit + +// Interprets the message mode when talking into a radio, possibly returning a connection datum +/obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode) + // If a channel isn't specified, send to common. + if(!message_mode || message_mode == "headset") + return radio_connection + + // Otherwise, if a channel is specified, look for it. + if(channels && channels.len > 0) + if (message_mode == "department") // Department radio shortcut + message_mode = channels[1] + + if (channels[message_mode]) // only broadcast if the channel is set on + return secure_radio_connections[message_mode] + + // If we were to send to a channel we don't have, drop it. + return RADIO_CONNECTION_FAIL + +/obj/item/device/radio/talk_into(mob/living/M as mob, list/message_pieces, channel, var/verb = "says") + if(!on) + return FALSE // the device has to be on + // Fix for permacell radios, but kinda eh about actually fixing them. + if(!M || !message_pieces) + return FALSE + + if(istype(M)) + M.trigger_aiming(TARGET_CAN_RADIO) + + // Uncommenting this. To the above comment: + // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom + if(wires.is_cut(WIRE_RADIO_TRANSMIT)) // The device has to have all its wires and shit intact + return FALSE + + if(!radio_connection) + set_frequency(frequency) + + /* Quick introduction: + This new radio system uses a very robust FTL signaling technology unoriginally + dubbed "subspace" which is somewhat similar to 'blue-space' but can't + actually transmit large mass. Headsets are the only radio devices capable + of sending subspace transmissions to the Communications Satellite. + + A headset sends a signal to a subspace listener/reciever elsewhere in space, + the signal gets processed and logged, and an audible transmission gets sent + to each individual headset. + */ + + //#### Grab the connection datum ####// + var/message_mode = handle_message_mode(M, message_pieces, channel) + switch(message_mode) + if(RADIO_CONNECTION_FAIL) + return FALSE + if(RADIO_CONNECTION_NON_SUBSPACE) + return TRUE + + if(!istype(message_mode, /datum/radio_frequency)) + return FALSE + + var/pos_z = get_z(src) + var/datum/radio_frequency/connection = message_mode + + //#### Tagging the signal with all appropriate identity values ####// + + // ||-- The mob's name identity --|| + var/displayname = M.name // grab the display name (name you get when you hover over someone's icon) + var/real_name = M.real_name // mob's real name + var/mobkey = "none" // player key associated with mob + var/voicemask = 0 // the speaker is wearing a voice mask + if(M.client) + mobkey = M.key // assign the mob's key + + + var/jobname // the mob's "job" + + // --- Human: use their actual job --- + if (ishuman(M)) + var/mob/living/carbon/human/H = M + jobname = H.get_assignment() + + // --- Carbon Nonhuman --- + else if (iscarbon(M)) // Nonhuman carbon mob + jobname = "No id" + + // --- AI --- + else if (isAI(M)) + jobname = "AI" + + // --- Cyborg --- + else if (isrobot(M)) + jobname = "Cyborg" + + // --- Personal AI (pAI) --- + else if (istype(M, /mob/living/silicon/pai)) + jobname = "Personal AI" + + // --- Unidentifiable mob --- + else + jobname = "Unknown" + + + // --- Modifications to the mob's identity --- + + // The mob is disguising their identity: + if (ishuman(M) && M.GetVoice() != real_name) + displayname = M.GetVoice() + jobname = "Unknown" + voicemask = 1 + + // First, we want to generate a new radio signal + var/datum/signal/signal = new + + // --- Finally, tag the actual signal with the appropriate values --- + signal.data = list( + // Identity-associated tags: + "mob" = M, // store a reference to the mob + "mobtype" = M.type, // the mob's type + "realname" = real_name, // the mob's real name + "name" = displayname, // the mob's display name + "job" = jobname, // the mob's job + "key" = mobkey, // the mob's key + "vmessage" = message_to_multilingual(pick(M.speak_emote)), // the message to display if the voice wasn't understood + "vname" = M.voice_name, // the name to display if the voice wasn't understood + "vmask" = voicemask, // 1 if the mob is using a voice gas mask + + // We store things that would otherwise be kept in the actual mob + // so that they can be logged even AFTER the mob is deleted or something + + // Other tags: + "compression" = rand(45,50), // compressed radio signal + "message" = message_pieces, // the actual sent message + "connection" = connection, // the radio connection to use + "radio" = src, // stores the radio used for transmission + "slow" = 0, // how much to sleep() before broadcasting - simulates net lag + "traffic" = 0, // dictates the total traffic sum that the signal went through + "type" = SIGNAL_NORMAL, // determines what type of radio input it is: normal broadcast + "server" = null, // the last server to log this signal + "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery + "level" = pos_z, // The source's z level + "verb" = verb + ) + signal.frequency = connection.frequency // Quick frequency set + + var/filter_type = DATA_LOCAL //If we end up having to send it the old fashioned way, it's with this data var. + + /* ###### Bluespace radios talk directly to receivers (and only directly to receivers) ###### */ + if(bluespace_radio) + //Nothing to transmit to + if(!bs_tx_weakref) + to_chat(loc, "\The [src] buzzes to inform you of the lack of a functioning connection.") + return FALSE + + var/obj/machinery/telecomms/tx_to = bs_tx_weakref.resolve() + //Was linked, now destroyed or something + if(!tx_to) + bs_tx_weakref = null + to_chat(loc, "\The [src] buzzes to inform you of the lack of a functioning connection.") + return FALSE + + //Transmitted in the blind. If we get a message back, cool. If not, oh well. + signal.transmission_method = TRANSMISSION_BLUESPACE + return tx_to.receive_signal(signal) + + /* ###### Radios with subspace_transmission can only broadcast through subspace (unless they have adhoc_fallback) ###### */ + else if(subspace_transmission) + var/list/jamming = is_jammed(src) + if(jamming) + var/distance = 0 + var/area/our_area = get_area(src) + if(our_area.no_comms) + distance = 99 + else + distance = jamming["distance"] + to_chat(M, "\icon[src][bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") + return FALSE + + // First, we want to generate a new radio signal + signal.transmission_method = TRANSMISSION_SUBSPACE + + //#### Sending the signal to all subspace receivers ####// + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + R.receive_signal(signal) + + // Allinone can act as receivers. + for(var/obj/machinery/telecomms/allinone/R in telecomms_list) + R.receive_signal(signal) + + // Receiving code can be located in Telecommunications.dm + if(signal.data["done"] && (pos_z in signal.data["level"])) + return TRUE //Huzzah, sent via subspace + + else if(adhoc_fallback) //Less huzzah, we have to fallback + to_chat(loc, "\The [src] pings as it falls back to local radio transmission.") + subspace_transmission = FALSE + + else //Oh well + return FALSE + + /* ###### Intercoms and station-bounced radios ###### */ + else + /* --- Intercoms can only broadcast to other intercoms, but bounced radios can broadcast to bounced radios and intercoms --- */ + if(istype(src, /obj/item/device/radio/intercom)) + filter_type = DATA_INTERCOM + + /* --- Try to send a normal subspace broadcast first */ + signal.transmission_method = TRANSMISSION_SUBSPACE + signal.data["compression"] = 0 + + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + R.receive_signal(signal) + + // Allinone can act as receivers. + for(var/obj/machinery/telecomms/allinone/R in telecomms_list) + R.receive_signal(signal) + + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + R.receive_signal(signal) + + if(signal.data["done"] && (pos_z in signal.data["level"])) + if(adhoc_fallback) + to_chat(loc, "\The [src] pings as it reestablishes subspace communications.") + subspace_transmission = TRUE + // we're done here. + return TRUE + + //Nothing handled any sort of remote radio-ing and returned before now, just squawk on this zlevel. + return Broadcast_Message(connection, M, voicemask, pick(M.speak_emote), + src, message_pieces, displayname, jobname, real_name, M.voice_name, + filter_type, signal.data["compression"], using_map.get_map_levels(pos_z), connection.frequency, verb) + + +/obj/item/device/radio/hear_talk(mob/M as mob, list/message_pieces, var/verb = "says") + if(broadcasting) + if(get_dist(src, M) <= canhear_range) + talk_into(M, message_pieces, null, verb) + +/obj/item/device/radio/proc/receive_range(freq, level) + // check if this radio can receive on the given frequency, and if so, + // what the range is in which mobs will hear the radio + // returns: -1 if can't receive, range otherwise + if(wires.is_cut(WIRE_RADIO_RECEIVER)) + return -1 + if(!listening) + return -1 + if(is_jammed(src)) + return -1 + if(!(0 in level)) + var/pos_z = get_z(src) + if(!(pos_z in level)) + return -1 + if(freq in ANTAG_FREQS) + if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys + return -1 + if(freq in CENT_FREQS) + if(!(src.centComm))//Checks to see if it's allowed on that frequency, based on the encryption keys + return -1 + if (!on) + return -1 + if (!freq) //recieved on main frequency + if (!listening) + return -1 + else + var/accept = (freq==frequency && listening) + if (!accept) + for (var/ch_name in channels) + var/datum/radio_frequency/RF = secure_radio_connections[ch_name] + if (RF && RF.frequency==freq && (channels[ch_name]&FREQ_LISTENING)) + accept = 1 + break + if (!accept) + return -1 + return canhear_range + +/obj/item/device/radio/proc/send_hear(freq, level) + var/range = receive_range(freq, level) + if(range > -1 && loudspeaker) + return get_mobs_or_objects_in_view(range, src) + + +/obj/item/device/radio/examine(mob/user) + . = ..() + + if((in_range(src, user) || loc == user)) + if(b_stat) + . += "\The [src] can be attached and modified!" + else + . += "\The [src] can not be modified or attached!" + +/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + user.set_machine(src) + if (!W.has_tool_quality(TOOL_SCREWDRIVER)) + return + b_stat = !( b_stat ) + if(!istype(src, /obj/item/device/radio/beacon)) + if (b_stat) + user.show_message("\The [src] can now be attached and modified!") + else + user.show_message("\The [src] can no longer be modified or attached!") + updateDialog() + //Foreach goto(83) + add_fingerprint(user) + return + else return + +/obj/item/device/radio/emp_act(severity) + broadcasting = 0 + listening = 0 + for (var/ch_name in channels) + channels[ch_name] = 0 + ..() + +/////////////////////////////// +//////////Borg Radios////////// +/////////////////////////////// +//Giving borgs their own radio to have some more room to work with -Sieve + +/obj/item/device/radio/borg + var/mob/living/silicon/robot/myborg = null // Cyborg which owns this radio. Used for power checks + var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key + icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component. + icon_state = "radio" + canhear_range = 0 + subspace_transmission = TRUE + subspace_switchable = TRUE + +/obj/item/device/radio/borg/Destroy() + myborg = null + return ..() + +/obj/item/device/radio/borg/list_channels(var/mob/user) + return list_secure_channels(user) + +/obj/item/device/radio/borg/talk_into() + . = ..() + if (isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + var/datum/robot_component/C = R.components["radio"] + R.cell_use_power(C.active_usage) + +/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob) +// ..() + user.set_machine(src) + if (!(W.has_tool_quality(TOOL_SCREWDRIVER) || istype(W, /obj/item/device/encryptionkey))) + return + + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(keyslot) + + + for(var/ch_name in channels) + radio_controller.remove_object(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = null + + + if(keyslot) + var/turf/T = get_turf(user) + if(T) + keyslot.loc = T + keyslot = null + + recalculateChannels() + to_chat(user, "You pop out the encryption key in the radio!") + playsound(src, W.usesound, 50, 1) + + else + to_chat(user, "This radio doesn't have any encryption keys!") + + if(istype(W, /obj/item/device/encryptionkey/)) + if(keyslot) + to_chat(user, "The radio can't hold another key!") + return + + if(!keyslot) + user.drop_item() + W.loc = src + keyslot = W + + recalculateChannels() + + return + +/obj/item/device/radio/borg/recalculateChannels() + src.channels = list() + src.syndie = 0 + + var/mob/living/silicon/robot/D = src.loc + if(D.module) + for(var/ch_name in D.module.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] += D.module.channels[ch_name] + if(keyslot) + for(var/ch_name in keyslot.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] += keyslot.channels[ch_name] + + if(keyslot.syndie) + src.syndie = 1 + + for (var/ch_name in src.channels) + if(!radio_controller) + sleep(30) // Waiting for the radio_controller to be created. + if(!radio_controller) + src.name = "broken radio" + return + + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + + return + +/obj/item/device/radio/proc/config(op) + if(radio_controller) + for (var/ch_name in channels) + radio_controller.remove_object(src, radiochannels[ch_name]) + secure_radio_connections = new + channels = op + if(radio_controller) + for (var/ch_name in op) + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + return + +/obj/item/device/radio/off + listening = 0 + +/obj/item/device/radio/phone + broadcasting = 0 + icon = 'icons/obj/items.dmi' + icon_state = "red_phone" + listening = 1 + name = "phone" + anchored = FALSE + +/obj/item/device/radio/phone/medbay + frequency = MED_I_FREQ + +/obj/item/device/radio/phone/medbay/New() + ..() + internal_channels = default_medbay_channels.Copy() diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 5f6eed3327..61526248a5 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -1,275 +1,275 @@ -/obj/item/device/camerabug - name = "mobile camera pod" - desc = "A camera pod used by tactical operators. Must be linked to a camera scanner unit." - icon = 'icons/obj/grenade.dmi' - icon_state = "camgrenade" - item_state = "empgrenade" - w_class = ITEMSIZE_SMALL - force = 0 - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - var/obj/item/device/bug_monitor/linkedmonitor - var/brokentype = /obj/item/brokenbug - -// var/obj/item/device/radio/bug/radio - var/obj/machinery/camera/bug/camera - var/camtype = /obj/machinery/camera/bug - -/obj/item/device/camerabug/New() - ..() -// radio = new(src) - camera = new camtype(src) - -/obj/item/device/camerabug/attack_self(mob/user) - if(user.a_intent == I_HURT) - to_chat(user, "You crush the [src] under your foot, breaking it.") - visible_message("[user.name] crushes the [src] under their foot, breaking it!") - new brokentype(get_turf(src)) - spawn(0) - qdel(src) -/* else - user.set_machine(radio) - radio.interact(user) -*/ -/obj/item/device/camerabug/verb/reset() - set name = "Reset camera bug" - set category = "Object" - if(linkedmonitor) - linkedmonitor.unpair(src) - linkedmonitor = null - qdel(camera) - camera = new camtype(src) - to_chat(usr, "You turn the [src] off and on again, delinking it from any monitors.") - -/obj/item/brokenbug - name = "broken mobile camera pod" - desc = "A camera pod formerly used by tactical operators. The lens is smashed, and the circuits are damaged beyond repair." - icon = 'icons/obj/grenade.dmi' - icon_state = "camgrenadebroken" - item_state = "empgrenade" - force = 5.0 - w_class = ITEMSIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - origin_tech = list(TECH_ENGINEERING = 1) - -/obj/item/brokenbug/spy - name = "broken bug" - desc = "" //Even when it's broken it's inconspicuous - icon = 'icons/obj/weapons.dmi' - icon_state = "eshield" - item_state = "nothing" - layer = TURF_LAYER+0.2 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - origin_tech = list(TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) //crush it and you lose the data - force = 0 - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - -/obj/item/device/camerabug/spy - name = "bug" - desc = "" //Nothing to see here - icon = 'icons/obj/weapons.dmi' - icon_state = "eshield" - item_state = "nothing" - layer = TURF_LAYER+0.2 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) - camtype = /obj/machinery/camera/bug/spy - -/obj/item/device/camerabug/examine(mob/user) - . = ..() - if(get_dist(user, src) == 0) - . += "It has a tiny camera inside. Needs to be both configured and brought in contact with monitor device to be fully functional." - -/obj/item/device/camerabug/update_icon() - ..() - - if(anchored) // Standard versions are relatively obvious if not hidden in a container. Anchoring them is advised, to disguise them. - alpha = 50 - else - alpha = 255 - -/obj/item/device/camerabug/attackby(obj/item/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/bug_monitor)) - var/obj/item/device/bug_monitor/SM = W - if(!linkedmonitor) - to_chat(user, "\The [src] has been paired with \the [SM].") - SM.pair(src) - linkedmonitor = SM - else if (linkedmonitor == SM) - to_chat(user, "\The [src] has been unpaired from \the [SM].") - linkedmonitor.unpair(src) - linkedmonitor = null - else - to_chat(user, "Error: The device is linked to another monitor.") - - else if(W.has_tool_quality(TOOL_WRENCH) && user.a_intent != I_HURT) - if(isturf(loc)) - anchored = !anchored - - to_chat(user, "You [anchored ? "" : "un"]secure \the [src].") - - update_icon() - return - else - if(W.force >= 5) - visible_message("\The [src] lens shatters!") - new brokentype(get_turf(src)) - if(linkedmonitor) - linkedmonitor.unpair(src) - linkedmonitor = null - spawn(0) - qdel(src) - ..() - -/obj/item/device/camerabug/bullet_act() - visible_message("The [src] lens shatters!") - new brokentype(get_turf(src)) - if(linkedmonitor) - linkedmonitor.unpair(src) - linkedmonitor = null - spawn(0) - qdel(src) - -/obj/item/device/camerabug/Destroy() - if(linkedmonitor) - linkedmonitor.unpair(src) - linkedmonitor = null - ..() - -/obj/item/device/bug_monitor - name = "mobile camera pod monitor" - desc = "A portable camera console designed to work with mobile camera pods." - icon = 'icons/obj/device.dmi' - icon_state = "forensic0" - item_state = "electronic" - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - - var/operating = 0 -// var/obj/item/device/radio/bug/radio - var/obj/machinery/camera/bug/selected_camera - var/list/obj/machinery/camera/bug/cameras = new() -/* -/obj/item/device/bug_monitor/New() - radio = new(src) -*/ -/obj/item/device/bug_monitor/attack_self(mob/user) - if(operating) - return - -// radio.attack_self(user) - view_cameras(user) - -/obj/item/device/bug_monitor/attackby(obj/item/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/camerabug)) - W.attackby(src, user) - else - return ..() - -/obj/item/device/bug_monitor/proc/unpair(var/obj/item/device/camerabug/SB) - if(SB.camera in cameras) - cameras -= SB.camera - -/obj/item/device/bug_monitor/proc/pair(var/obj/item/device/camerabug/SB) - cameras += SB.camera - -/obj/item/device/bug_monitor/proc/view_cameras(mob/user) - if(!can_use_cam(user)) - return - - selected_camera = cameras[1] - user.reset_view(selected_camera) - view_camera(user) - - operating = 1 - while(selected_camera && Adjacent(user)) - selected_camera = tgui_input_list(usr, "Select camera to view.", "Camera Choice", cameras) - selected_camera = null - operating = 0 - -/obj/item/device/bug_monitor/proc/view_camera(mob/user) - spawn(0) - while(selected_camera && Adjacent(user)) - var/turf/T = get_turf(selected_camera) - if(!T || !is_on_same_plane_or_station(T.z, user.z) || !selected_camera.can_use()) - user.unset_machine() - user.reset_view(null) - to_chat(user, "Link to [selected_camera] has been lost.") - src.unpair(selected_camera.loc) - sleep(90) - else - user.set_machine(selected_camera) - user.reset_view(selected_camera) - sleep(10) - user.unset_machine() - user.reset_view(null) - -/obj/item/device/bug_monitor/proc/can_use_cam(mob/user) - if(operating) - return - - if(!cameras.len) - to_chat(user, "No paired cameras detected!") - to_chat(user, "Bring a camera in contact with this device to pair the camera.") - return - - return 1 - -/obj/item/device/bug_monitor/spy - name = "\improper PDA" - desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." - icon = 'icons/obj/pda.dmi' - icon_state = "pda" - item_state = "electronic" - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) - -/obj/item/device/bug_monitor/spy/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made." - -/obj/machinery/camera/bug/check_eye(var/mob/user as mob) - return 0 - -/obj/machinery/camera/bug - network = list(NETWORK_SECURITY) - -/obj/machinery/camera/bug/New() - ..() - name = "Camera #[rand(1000,9999)]" - c_tag = name - -/obj/machinery/camera/bug/spy - // These cheap toys are accessible from the mercenary camera console as well - only the antag ones though! - network = list(NETWORK_MERCENARY) - -/obj/machinery/camera/bug/spy/New() - ..() - name = "DV-136ZB #[rand(1000,9999)]" - c_tag = name - -/* //These were originally supposed to have radios in them. Doesn't work. -/obj/item/device/radio/bug - listening = 0 //turn it on first - frequency = 1359 //sec comms - broadcasting = 0 - canhear_range = 1 - name = "camera bug device" - icon_state = "syn_cypherkey" - -/obj/item/device/radio/bug/spy - listening = 0 - frequency = 1473 - broadcasting = 0 - canhear_range = 1 - name = "spy device" - icon_state = "syn_cypherkey" +/obj/item/device/camerabug + name = "mobile camera pod" + desc = "A camera pod used by tactical operators. Must be linked to a camera scanner unit." + icon = 'icons/obj/grenade.dmi' + icon_state = "camgrenade" + item_state = "empgrenade" + w_class = ITEMSIZE_SMALL + force = 0 + throwforce = 5.0 + throw_range = 15 + throw_speed = 3 + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + var/obj/item/device/bug_monitor/linkedmonitor + var/brokentype = /obj/item/brokenbug + +// var/obj/item/device/radio/bug/radio + var/obj/machinery/camera/bug/camera + var/camtype = /obj/machinery/camera/bug + +/obj/item/device/camerabug/New() + ..() +// radio = new(src) + camera = new camtype(src) + +/obj/item/device/camerabug/attack_self(mob/user) + if(user.a_intent == I_HURT) + to_chat(user, "You crush the [src] under your foot, breaking it.") + visible_message("[user.name] crushes the [src] under their foot, breaking it!") + new brokentype(get_turf(src)) + spawn(0) + qdel(src) +/* else + user.set_machine(radio) + radio.interact(user) +*/ +/obj/item/device/camerabug/verb/reset() + set name = "Reset camera bug" + set category = "Object" + if(linkedmonitor) + linkedmonitor.unpair(src) + linkedmonitor = null + qdel(camera) + camera = new camtype(src) + to_chat(usr, "You turn the [src] off and on again, delinking it from any monitors.") + +/obj/item/brokenbug + name = "broken mobile camera pod" + desc = "A camera pod formerly used by tactical operators. The lens is smashed, and the circuits are damaged beyond repair." + icon = 'icons/obj/grenade.dmi' + icon_state = "camgrenadebroken" + item_state = "empgrenade" + force = 5.0 + w_class = ITEMSIZE_SMALL + throwforce = 5.0 + throw_range = 15 + throw_speed = 3 + origin_tech = list(TECH_ENGINEERING = 1) + +/obj/item/brokenbug/spy + name = "broken bug" + desc = "" //Even when it's broken it's inconspicuous + icon = 'icons/obj/weapons.dmi' + icon_state = "eshield" + item_state = "nothing" + layer = TURF_LAYER+0.2 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + origin_tech = list(TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) //crush it and you lose the data + force = 0 + throwforce = 5.0 + throw_range = 15 + throw_speed = 3 + +/obj/item/device/camerabug/spy + name = "bug" + desc = "" //Nothing to see here + icon = 'icons/obj/weapons.dmi' + icon_state = "eshield" + item_state = "nothing" + layer = TURF_LAYER+0.2 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) + camtype = /obj/machinery/camera/bug/spy + +/obj/item/device/camerabug/examine(mob/user) + . = ..() + if(get_dist(user, src) == 0) + . += "It has a tiny camera inside. Needs to be both configured and brought in contact with monitor device to be fully functional." + +/obj/item/device/camerabug/update_icon() + ..() + + if(anchored) // Standard versions are relatively obvious if not hidden in a container. Anchoring them is advised, to disguise them. + alpha = 50 + else + alpha = 255 + +/obj/item/device/camerabug/attackby(obj/item/W as obj, mob/living/user as mob) + if(istype(W, /obj/item/device/bug_monitor)) + var/obj/item/device/bug_monitor/SM = W + if(!linkedmonitor) + to_chat(user, "\The [src] has been paired with \the [SM].") + SM.pair(src) + linkedmonitor = SM + else if (linkedmonitor == SM) + to_chat(user, "\The [src] has been unpaired from \the [SM].") + linkedmonitor.unpair(src) + linkedmonitor = null + else + to_chat(user, "Error: The device is linked to another monitor.") + + else if(W.has_tool_quality(TOOL_WRENCH) && user.a_intent != I_HURT) + if(isturf(loc)) + anchored = !anchored + + to_chat(user, "You [anchored ? "" : "un"]secure \the [src].") + + update_icon() + return + else + if(W.force >= 5) + visible_message("\The [src] lens shatters!") + new brokentype(get_turf(src)) + if(linkedmonitor) + linkedmonitor.unpair(src) + linkedmonitor = null + spawn(0) + qdel(src) + ..() + +/obj/item/device/camerabug/bullet_act() + visible_message("The [src] lens shatters!") + new brokentype(get_turf(src)) + if(linkedmonitor) + linkedmonitor.unpair(src) + linkedmonitor = null + spawn(0) + qdel(src) + +/obj/item/device/camerabug/Destroy() + if(linkedmonitor) + linkedmonitor.unpair(src) + linkedmonitor = null + ..() + +/obj/item/device/bug_monitor + name = "mobile camera pod monitor" + desc = "A portable camera console designed to work with mobile camera pods." + icon = 'icons/obj/device.dmi' + icon_state = "forensic0" + item_state = "electronic" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + + var/operating = 0 +// var/obj/item/device/radio/bug/radio + var/obj/machinery/camera/bug/selected_camera + var/list/obj/machinery/camera/bug/cameras = new() +/* +/obj/item/device/bug_monitor/New() + radio = new(src) +*/ +/obj/item/device/bug_monitor/attack_self(mob/user) + if(operating) + return + +// radio.attack_self(user) + view_cameras(user) + +/obj/item/device/bug_monitor/attackby(obj/item/W as obj, mob/living/user as mob) + if(istype(W, /obj/item/device/camerabug)) + W.attackby(src, user) + else + return ..() + +/obj/item/device/bug_monitor/proc/unpair(var/obj/item/device/camerabug/SB) + if(SB.camera in cameras) + cameras -= SB.camera + +/obj/item/device/bug_monitor/proc/pair(var/obj/item/device/camerabug/SB) + cameras += SB.camera + +/obj/item/device/bug_monitor/proc/view_cameras(mob/user) + if(!can_use_cam(user)) + return + + selected_camera = cameras[1] + user.reset_view(selected_camera) + view_camera(user) + + operating = 1 + while(selected_camera && Adjacent(user)) + selected_camera = tgui_input_list(usr, "Select camera to view.", "Camera Choice", cameras) + selected_camera = null + operating = 0 + +/obj/item/device/bug_monitor/proc/view_camera(mob/user) + spawn(0) + while(selected_camera && Adjacent(user)) + var/turf/T = get_turf(selected_camera) + if(!T || !is_on_same_plane_or_station(T.z, user.z) || !selected_camera.can_use()) + user.unset_machine() + user.reset_view(null) + to_chat(user, "Link to [selected_camera] has been lost.") + src.unpair(selected_camera.loc) + sleep(90) + else + user.set_machine(selected_camera) + user.reset_view(selected_camera) + sleep(10) + user.unset_machine() + user.reset_view(null) + +/obj/item/device/bug_monitor/proc/can_use_cam(mob/user) + if(operating) + return + + if(!cameras.len) + to_chat(user, "No paired cameras detected!") + to_chat(user, "Bring a camera in contact with this device to pair the camera.") + return + + return 1 + +/obj/item/device/bug_monitor/spy + name = "\improper PDA" + desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." + icon = 'icons/obj/pda.dmi' + icon_state = "pda" + item_state = "electronic" + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) + +/obj/item/device/bug_monitor/spy/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made." + +/obj/machinery/camera/bug/check_eye(var/mob/user as mob) + return 0 + +/obj/machinery/camera/bug + network = list(NETWORK_SECURITY) + +/obj/machinery/camera/bug/New() + ..() + name = "Camera #[rand(1000,9999)]" + c_tag = name + +/obj/machinery/camera/bug/spy + // These cheap toys are accessible from the mercenary camera console as well - only the antag ones though! + network = list(NETWORK_MERCENARY) + +/obj/machinery/camera/bug/spy/New() + ..() + name = "DV-136ZB #[rand(1000,9999)]" + c_tag = name + +/* //These were originally supposed to have radios in them. Doesn't work. +/obj/item/device/radio/bug + listening = 0 //turn it on first + frequency = 1359 //sec comms + broadcasting = 0 + canhear_range = 1 + name = "camera bug device" + icon_state = "syn_cypherkey" + +/obj/item/device/radio/bug/spy + listening = 0 + frequency = 1473 + broadcasting = 0 + canhear_range = 1 + name = "spy device" + icon_state = "syn_cypherkey" */ \ No newline at end of file diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index 415f22d8d8..a1c8c6c722 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -1,150 +1,150 @@ -#define OVERLAY_CACHE_LEN 50 - -/obj/item/device/t_scanner - name = "\improper T-ray scanner" - desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." - icon_state = "t-ray0" - item_state = "t-ray" - slot_flags = SLOT_BELT - w_class = ITEMSIZE_SMALL - matter = list(MAT_STEEL = 150) - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - - var/scan_range = 1 - - var/on = 0 - var/list/active_scanned = list() //assoc list of objects being scanned, mapped to their overlay - var/client/user_client //since making sure overlays are properly added and removed is pretty important, so we track the current user explicitly - var/flicker = 0 - - var/global/list/overlay_cache = list() //cache recent overlays - -/obj/item/device/t_scanner/update_icon() - icon_state = "t-ray[on]" - -/obj/item/device/t_scanner/attack_self(mob/user) - set_active(!on) - -/obj/item/device/t_scanner/proc/set_active(var/active) - on = active - if(on) - START_PROCESSING(SSobj, src) - flicker = 0 - else - STOP_PROCESSING(SSobj, src) - set_user_client(null) - update_icon() - -//If reset is set, then assume the client has none of our overlays, otherwise we only send new overlays. -/obj/item/device/t_scanner/process() - if(!on) return - - //handle clients changing - var/client/loc_client = null - if(ismob(src.loc)) - var/mob/M = src.loc - loc_client = M.client - set_user_client(loc_client) - - //no sense processing if no-one is going to see it. - if(!user_client) return - - //get all objects in scan range - var/list/scanned = get_scanned_objects(scan_range) - var/list/update_add = scanned - active_scanned - var/list/update_remove = active_scanned - scanned - - //Add new overlays - for(var/obj/O in update_add) - var/image/overlay = get_overlay(O) - active_scanned[O] = overlay - user_client.images += overlay - - //Remove stale overlays - for(var/obj/O in update_remove) - user_client.images -= active_scanned[O] - active_scanned -= O - - //Flicker effect - for(var/obj/O in active_scanned) - var/image/overlay = active_scanned[O] - if(flicker) - overlay.alpha = 0 - else - overlay.alpha = 128 - flicker = !flicker - -//creates a new overlay for a scanned object -/obj/item/device/t_scanner/proc/get_overlay(obj/scanned) - //Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room. - //Also means that images are reused if multiple people are using t-rays to look at the same objects. - if(scanned in overlay_cache) - . = overlay_cache[scanned] - else - var/image/I = image(loc = scanned, icon = scanned.icon, icon_state = scanned.icon_state, layer = HUD_LAYER) - - //Pipes are special - if(istype(scanned, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/P = scanned - I.color = P.pipe_color - I.add_overlay(P.overlays) - - I.alpha = 128 - I.mouse_opacity = 0 - . = I - - // Add it to cache, cutting old entries if the list is too long - overlay_cache[scanned] = . - if(overlay_cache.len > OVERLAY_CACHE_LEN) - overlay_cache.Cut(1, overlay_cache.len-OVERLAY_CACHE_LEN-1) - -/obj/item/device/t_scanner/proc/get_scanned_objects(var/scan_dist) - . = list() - - var/turf/center = get_turf(src.loc) - if(!center) return - - for(var/turf/T in range(scan_range, center)) - if(!!T.is_plating()) - continue - - for(var/obj/O in T.contents) - if(O.level != 1) - continue - if(!O.invisibility) - continue //if it's already visible don't need an overlay for it - . += O - -/obj/item/device/t_scanner/proc/set_user_client(var/client/new_client) - if(new_client == user_client) - return - if(user_client) - for(var/scanned in active_scanned) - user_client.images -= active_scanned[scanned] - if(new_client) - for(var/scanned in active_scanned) - new_client.images += active_scanned[scanned] - else - active_scanned.Cut() - - user_client = new_client - -/obj/item/device/t_scanner/dropped(mob/user) - set_user_client(null) - -/obj/item/device/t_scanner/upgraded - name = "Upgraded T-ray Scanner" - desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." - matter = list(MAT_STEEL = 500, PHORON = 150) - origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5) - scan_range = 3 - -/obj/item/device/t_scanner/advanced - name = "Advanced T-ray Scanner" - desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." - matter = list(MAT_STEEL = 1500, PHORON = 200, SILVER = 250) - origin_tech = list(TECH_MAGNET = 7, TECH_ENGINEERING = 7, TECH_MATERIAL = 6) - scan_range = 7 - - +#define OVERLAY_CACHE_LEN 50 + +/obj/item/device/t_scanner + name = "\improper T-ray scanner" + desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." + icon_state = "t-ray0" + item_state = "t-ray" + slot_flags = SLOT_BELT + w_class = ITEMSIZE_SMALL + matter = list(MAT_STEEL = 150) + origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + + var/scan_range = 1 + + var/on = 0 + var/list/active_scanned = list() //assoc list of objects being scanned, mapped to their overlay + var/client/user_client //since making sure overlays are properly added and removed is pretty important, so we track the current user explicitly + var/flicker = 0 + + var/global/list/overlay_cache = list() //cache recent overlays + +/obj/item/device/t_scanner/update_icon() + icon_state = "t-ray[on]" + +/obj/item/device/t_scanner/attack_self(mob/user) + set_active(!on) + +/obj/item/device/t_scanner/proc/set_active(var/active) + on = active + if(on) + START_PROCESSING(SSobj, src) + flicker = 0 + else + STOP_PROCESSING(SSobj, src) + set_user_client(null) + update_icon() + +//If reset is set, then assume the client has none of our overlays, otherwise we only send new overlays. +/obj/item/device/t_scanner/process() + if(!on) return + + //handle clients changing + var/client/loc_client = null + if(ismob(src.loc)) + var/mob/M = src.loc + loc_client = M.client + set_user_client(loc_client) + + //no sense processing if no-one is going to see it. + if(!user_client) return + + //get all objects in scan range + var/list/scanned = get_scanned_objects(scan_range) + var/list/update_add = scanned - active_scanned + var/list/update_remove = active_scanned - scanned + + //Add new overlays + for(var/obj/O in update_add) + var/image/overlay = get_overlay(O) + active_scanned[O] = overlay + user_client.images += overlay + + //Remove stale overlays + for(var/obj/O in update_remove) + user_client.images -= active_scanned[O] + active_scanned -= O + + //Flicker effect + for(var/obj/O in active_scanned) + var/image/overlay = active_scanned[O] + if(flicker) + overlay.alpha = 0 + else + overlay.alpha = 128 + flicker = !flicker + +//creates a new overlay for a scanned object +/obj/item/device/t_scanner/proc/get_overlay(obj/scanned) + //Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room. + //Also means that images are reused if multiple people are using t-rays to look at the same objects. + if(scanned in overlay_cache) + . = overlay_cache[scanned] + else + var/image/I = image(loc = scanned, icon = scanned.icon, icon_state = scanned.icon_state, layer = HUD_LAYER) + + //Pipes are special + if(istype(scanned, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/P = scanned + I.color = P.pipe_color + I.add_overlay(P.overlays) + + I.alpha = 128 + I.mouse_opacity = 0 + . = I + + // Add it to cache, cutting old entries if the list is too long + overlay_cache[scanned] = . + if(overlay_cache.len > OVERLAY_CACHE_LEN) + overlay_cache.Cut(1, overlay_cache.len-OVERLAY_CACHE_LEN-1) + +/obj/item/device/t_scanner/proc/get_scanned_objects(var/scan_dist) + . = list() + + var/turf/center = get_turf(src.loc) + if(!center) return + + for(var/turf/T in range(scan_range, center)) + if(!!T.is_plating()) + continue + + for(var/obj/O in T.contents) + if(O.level != 1) + continue + if(!O.invisibility) + continue //if it's already visible don't need an overlay for it + . += O + +/obj/item/device/t_scanner/proc/set_user_client(var/client/new_client) + if(new_client == user_client) + return + if(user_client) + for(var/scanned in active_scanned) + user_client.images -= active_scanned[scanned] + if(new_client) + for(var/scanned in active_scanned) + new_client.images += active_scanned[scanned] + else + active_scanned.Cut() + + user_client = new_client + +/obj/item/device/t_scanner/dropped(mob/user) + set_user_client(null) + +/obj/item/device/t_scanner/upgraded + name = "Upgraded T-ray Scanner" + desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." + matter = list(MAT_STEEL = 500, PHORON = 150) + origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5) + scan_range = 3 + +/obj/item/device/t_scanner/advanced + name = "Advanced T-ray Scanner" + desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." + matter = list(MAT_STEEL = 1500, PHORON = 200, SILVER = 250) + origin_tech = list(TECH_MAGNET = 7, TECH_ENGINEERING = 7, TECH_MATERIAL = 6) + scan_range = 7 + + #undef OVERLAY_CACHE_LEN \ No newline at end of file diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 45df3c628f..66d05b2d93 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,218 +1,218 @@ -/obj/item/device/transfer_valve - name = "tank transfer valve" - desc = "Regulates the transfer of air between two tanks" - icon = 'icons/obj/assemblies.dmi' - icon_state = "valve_1" - var/obj/item/weapon/tank/tank_one - var/obj/item/weapon/tank/tank_two - var/obj/item/device/assembly/attached_device - var/mob/attacher = null - var/valve_open = 0 - var/toggle = 1 - -/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user) - var/turf/location = get_turf(src) // For admin logs - if(istype(item, /obj/item/weapon/tank)) - if(tank_one && tank_two) - to_chat(user, "There are already two tanks attached, remove one first.") - return - - if(!tank_one) - tank_one = item - user.drop_item() - item.forceMove(src) - to_chat(user, "You attach the tank to the transfer valve.") - else if(!tank_two) - tank_two = item - user.drop_item() - item.forceMove(src) - to_chat(user, "You attach the tank to the transfer valve.") - message_admins("[key_name_admin(user)] attached both tanks to a transfer valve. [ADMIN_JMP(location)]") - log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") - - update_icon() - SStgui.update_uis(src) // update all UIs attached to src -//TODO: Have this take an assemblyholder - else if(isassembly(item)) - var/obj/item/device/assembly/A = item - if(A.secured) - to_chat(user, "The device is secured.") - return - if(attached_device) - to_chat(user, "There is already an device attached to the valve, remove it first.") - return - user.remove_from_mob(item) - attached_device = A - A.forceMove(src) - to_chat(user, "You attach the [item] to the valve controls and secure it.") - A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - - bombers += "[key_name(user)] attached a [item] to a transfer valve." - message_admins("[key_name_admin(user)] attached a [item] to a transfer valve. [ADMIN_JMP(location)]") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") - attacher = user - SStgui.update_uis(src) // update all UIs attached to src - return - - -/obj/item/device/transfer_valve/HasProximity(turf/T, atom/movable/AM, old_loc) - attached_device?.HasProximity(T, AM, old_loc) - -/obj/item/device/transfer_valve/Moved(old_loc, direction, forced) - . = ..() - if(isturf(old_loc)) - unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) - if(isturf(loc)) - sense_proximity(callback = /atom/proc/HasProximity) - -/obj/item/device/transfer_valve/attack_self(mob/user) - tgui_interact(user) - -/obj/item/device/transfer_valve/tgui_state(mob/user) - return GLOB.tgui_inventory_state - -/obj/item/device/transfer_valve/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TransferValve", name) // 460, 320 - ui.open() - -/obj/item/device/transfer_valve/tgui_data(mob/user) - var/list/data = list() - data["tank_one"] = tank_one ? tank_one.name : null - data["tank_two"] = tank_two ? tank_two.name : null - data["attached_device"] = attached_device ? attached_device.name : null - data["valve"] = valve_open - return data - -/obj/item/device/transfer_valve/tgui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("tankone") - remove_tank(tank_one) - if("tanktwo") - remove_tank(tank_two) - if("toggle") - toggle_valve() - if("device") - if(attached_device) - attached_device.attack_self(usr) - if("remove_device") - if(attached_device) - attached_device.forceMove(get_turf(src)) - attached_device.holder = null - attached_device = null - update_icon() - else - . = FALSE - if(.) - update_icon() - add_fingerprint(usr) - -/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D) - if(toggle) - toggle = FALSE - toggle_valve() - VARSET_IN(src, toggle, TRUE, 5 SECONDS) - -/obj/item/device/transfer_valve/update_icon() - cut_overlays() - underlays = null - - if(!tank_one && !tank_two && !attached_device) - icon_state = "valve_1" - return - icon_state = "valve" - - if(tank_one) - add_overlay("[tank_one.icon_state]") - if(tank_two) - var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") - J.Shift(WEST, 13) - underlays += J - if(attached_device) - add_overlay("device") - -/obj/item/device/transfer_valve/proc/remove_tank(obj/item/weapon/tank/T) - if(tank_one == T) - split_gases() - tank_one = null - else if(tank_two == T) - split_gases() - tank_two = null - else - return - - T.forceMove(get_turf(src)) - update_icon() - -/obj/item/device/transfer_valve/proc/merge_gases() - if(valve_open) - return - tank_two.air_contents.volume += tank_one.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_one.air_contents.remove_ratio(1) - tank_two.air_contents.merge(temp) - valve_open = 1 - -/obj/item/device/transfer_valve/proc/split_gases() - if(!valve_open) - return - - valve_open = 0 - - if(QDELETED(tank_one) || QDELETED(tank_two)) - return - - var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_two.air_contents.remove_ratio(ratio1) - tank_one.air_contents.merge(temp) - tank_two.air_contents.volume -= tank_one.air_contents.volume - - - /* - Exadv1: I know this isn't how it's going to work, but this was just to check - it explodes properly when it gets a signal (and it does). - */ - -/obj/item/device/transfer_valve/proc/toggle_valve() - if(!valve_open && (tank_one && tank_two)) - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - - var/attacher_name = "" - if(!attacher) - attacher_name = "Unknown" - else - attacher_name = "[attacher.name]([attacher.ckey])" - - var/log_str = "Bomb valve opened in [A.name] " - log_str += "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]" - - if(attacher) - log_str += ADMIN_QUE(attacher) - - var/mob/mob = get_mob_by_key(src.fingerprintslast) - var/last_touch_info = "" - if(mob) - last_touch_info = ADMIN_QUE(mob) - - log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" - bombers += log_str - message_admins(log_str, 0, 1) - log_game(log_str) - merge_gases() - - else if(valve_open==1 && (tank_one && tank_two)) - split_gases() - - src.update_icon() - -// this doesn't do anything but the timer etc. expects it to be here -// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs -/obj/item/device/transfer_valve/proc/c_state() - return +/obj/item/device/transfer_valve + name = "tank transfer valve" + desc = "Regulates the transfer of air between two tanks" + icon = 'icons/obj/assemblies.dmi' + icon_state = "valve_1" + var/obj/item/weapon/tank/tank_one + var/obj/item/weapon/tank/tank_two + var/obj/item/device/assembly/attached_device + var/mob/attacher = null + var/valve_open = 0 + var/toggle = 1 + +/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user) + var/turf/location = get_turf(src) // For admin logs + if(istype(item, /obj/item/weapon/tank)) + if(tank_one && tank_two) + to_chat(user, "There are already two tanks attached, remove one first.") + return + + if(!tank_one) + tank_one = item + user.drop_item() + item.forceMove(src) + to_chat(user, "You attach the tank to the transfer valve.") + else if(!tank_two) + tank_two = item + user.drop_item() + item.forceMove(src) + to_chat(user, "You attach the tank to the transfer valve.") + message_admins("[key_name_admin(user)] attached both tanks to a transfer valve. [ADMIN_JMP(location)]") + log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") + + update_icon() + SStgui.update_uis(src) // update all UIs attached to src +//TODO: Have this take an assemblyholder + else if(isassembly(item)) + var/obj/item/device/assembly/A = item + if(A.secured) + to_chat(user, "The device is secured.") + return + if(attached_device) + to_chat(user, "There is already an device attached to the valve, remove it first.") + return + user.remove_from_mob(item) + attached_device = A + A.forceMove(src) + to_chat(user, "You attach the [item] to the valve controls and secure it.") + A.holder = src + A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). + + bombers += "[key_name(user)] attached a [item] to a transfer valve." + message_admins("[key_name_admin(user)] attached a [item] to a transfer valve. [ADMIN_JMP(location)]") + log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") + attacher = user + SStgui.update_uis(src) // update all UIs attached to src + return + + +/obj/item/device/transfer_valve/HasProximity(turf/T, atom/movable/AM, old_loc) + attached_device?.HasProximity(T, AM, old_loc) + +/obj/item/device/transfer_valve/Moved(old_loc, direction, forced) + . = ..() + if(isturf(old_loc)) + unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) + if(isturf(loc)) + sense_proximity(callback = /atom/proc/HasProximity) + +/obj/item/device/transfer_valve/attack_self(mob/user) + tgui_interact(user) + +/obj/item/device/transfer_valve/tgui_state(mob/user) + return GLOB.tgui_inventory_state + +/obj/item/device/transfer_valve/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TransferValve", name) // 460, 320 + ui.open() + +/obj/item/device/transfer_valve/tgui_data(mob/user) + var/list/data = list() + data["tank_one"] = tank_one ? tank_one.name : null + data["tank_two"] = tank_two ? tank_two.name : null + data["attached_device"] = attached_device ? attached_device.name : null + data["valve"] = valve_open + return data + +/obj/item/device/transfer_valve/tgui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("tankone") + remove_tank(tank_one) + if("tanktwo") + remove_tank(tank_two) + if("toggle") + toggle_valve() + if("device") + if(attached_device) + attached_device.attack_self(usr) + if("remove_device") + if(attached_device) + attached_device.forceMove(get_turf(src)) + attached_device.holder = null + attached_device = null + update_icon() + else + . = FALSE + if(.) + update_icon() + add_fingerprint(usr) + +/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D) + if(toggle) + toggle = FALSE + toggle_valve() + VARSET_IN(src, toggle, TRUE, 5 SECONDS) + +/obj/item/device/transfer_valve/update_icon() + cut_overlays() + underlays = null + + if(!tank_one && !tank_two && !attached_device) + icon_state = "valve_1" + return + icon_state = "valve" + + if(tank_one) + add_overlay("[tank_one.icon_state]") + if(tank_two) + var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") + J.Shift(WEST, 13) + underlays += J + if(attached_device) + add_overlay("device") + +/obj/item/device/transfer_valve/proc/remove_tank(obj/item/weapon/tank/T) + if(tank_one == T) + split_gases() + tank_one = null + else if(tank_two == T) + split_gases() + tank_two = null + else + return + + T.forceMove(get_turf(src)) + update_icon() + +/obj/item/device/transfer_valve/proc/merge_gases() + if(valve_open) + return + tank_two.air_contents.volume += tank_one.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_one.air_contents.remove_ratio(1) + tank_two.air_contents.merge(temp) + valve_open = 1 + +/obj/item/device/transfer_valve/proc/split_gases() + if(!valve_open) + return + + valve_open = 0 + + if(QDELETED(tank_one) || QDELETED(tank_two)) + return + + var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_two.air_contents.remove_ratio(ratio1) + tank_one.air_contents.merge(temp) + tank_two.air_contents.volume -= tank_one.air_contents.volume + + + /* + Exadv1: I know this isn't how it's going to work, but this was just to check + it explodes properly when it gets a signal (and it does). + */ + +/obj/item/device/transfer_valve/proc/toggle_valve() + if(!valve_open && (tank_one && tank_two)) + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + + var/attacher_name = "" + if(!attacher) + attacher_name = "Unknown" + else + attacher_name = "[attacher.name]([attacher.ckey])" + + var/log_str = "Bomb valve opened in [A.name] " + log_str += "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]" + + if(attacher) + log_str += ADMIN_QUE(attacher) + + var/mob/mob = get_mob_by_key(src.fingerprintslast) + var/last_touch_info = "" + if(mob) + last_touch_info = ADMIN_QUE(mob) + + log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" + bombers += log_str + message_admins(log_str, 0, 1) + log_game(log_str) + merge_gases() + + else if(valve_open==1 && (tank_one && tank_two)) + split_gases() + + src.update_icon() + +// this doesn't do anything but the timer etc. expects it to be here +// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs +/obj/item/device/transfer_valve/proc/c_state() + return diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index 89bfd5f004..7e8a6953ae 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -1,118 +1,118 @@ -var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_random_selection/default() -var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random_selection/all() - -/datum/uplink_random_item - var/uplink_item // The uplink item - var/keep_probability // The probability we'll decide to keep this item if selected - var/reselect_probability // Probability that we'll decide to keep this item if previously selected. - // Is done together with the keep_probability check. Being selected more than once does not affect this probability. - -/datum/uplink_random_item/New(var/uplink_item, var/keep_probability = 100, var/reselect_propbability = 33) - ..() - src.uplink_item = uplink_item - src.keep_probability = keep_probability - src.reselect_probability = reselect_probability - -/datum/uplink_random_selection - var/list/datum/uplink_random_item/items - var/list/datum/uplink_random_item/all_items - -/datum/uplink_random_selection/New() - ..() - items = list() - all_items = list() - -/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items, var/items_override = 0) - var/const/attempts = 50 - - for(var/i = 0; i < attempts; i++) - var/datum/uplink_random_item/RI - if(items_override) - RI = pick(all_items) - else - RI = pick(items) - if(!prob(RI.keep_probability)) - continue - var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] - if(I.cost(U) > telecrystals) - continue - if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) - continue - if(U && !I.can_buy(U, telecrystals)) - continue - return I - -/datum/uplink_random_selection/all/New() - ..() - for(var/datum/uplink_item/item in uplink.items) - if(item.blacklisted) - continue - else - all_items += new/datum/uplink_random_item(item.type) - -/datum/uplink_random_selection/default/New() - ..() - - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced_45) - items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver) - items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/heavysnipermerc, 15, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/sniperammo, 15, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/grenades/emp, 50) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/crossbow, 33) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/energy_sword, 75) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/soap, 5, 100) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/concealed_cane, 50, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/detomatix, 20, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/parapen) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/cigarette_kit) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/id) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/spy) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_kit) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_projector) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/heavy_vest) - items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/combat) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_radio) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_binary) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/emag, 100, 50) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/clerical) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/space_suit, 50, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/thermal) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/teleporter, 10, 0) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_freedom) - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_compress) - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_explosive) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/sinpockets, reselect_propbability = 20) - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/surgery, reselect_propbability = 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/combat, reselect_propbability = 10) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/thermal, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/energy_net, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/ewar_voice, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/maneuvering_jets, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/egun, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/power_sink, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/laser_canon, reselect_propbability = 5) - -#ifdef DEBUG -/proc/debug_uplink_purchage_log() - for(var/antag_type in all_antag_types) - var/datum/antagonist/A = all_antag_types[antag_type] - A.print_player_summary() - -/proc/debug_uplink_item_assoc_list() - for(var/key in uplink.items_assoc) - to_world("[key] - [uplink.items_assoc[key]]") -#endif +var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_random_selection/default() +var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random_selection/all() + +/datum/uplink_random_item + var/uplink_item // The uplink item + var/keep_probability // The probability we'll decide to keep this item if selected + var/reselect_probability // Probability that we'll decide to keep this item if previously selected. + // Is done together with the keep_probability check. Being selected more than once does not affect this probability. + +/datum/uplink_random_item/New(var/uplink_item, var/keep_probability = 100, var/reselect_propbability = 33) + ..() + src.uplink_item = uplink_item + src.keep_probability = keep_probability + src.reselect_probability = reselect_probability + +/datum/uplink_random_selection + var/list/datum/uplink_random_item/items + var/list/datum/uplink_random_item/all_items + +/datum/uplink_random_selection/New() + ..() + items = list() + all_items = list() + +/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items, var/items_override = 0) + var/const/attempts = 50 + + for(var/i = 0; i < attempts; i++) + var/datum/uplink_random_item/RI + if(items_override) + RI = pick(all_items) + else + RI = pick(items) + if(!prob(RI.keep_probability)) + continue + var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] + if(I.cost(U) > telecrystals) + continue + if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) + continue + if(U && !I.can_buy(U, telecrystals)) + continue + return I + +/datum/uplink_random_selection/all/New() + ..() + for(var/datum/uplink_item/item in uplink.items) + if(item.blacklisted) + continue + else + all_items += new/datum/uplink_random_item(item.type) + +/datum/uplink_random_selection/default/New() + ..() + + items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced_45) + items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm) + items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver) + items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357) + items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/heavysnipermerc, 15, 0) + items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/sniperammo, 15, 0) + items += new/datum/uplink_random_item(/datum/uplink_item/item/grenades/emp, 50) + items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/crossbow, 33) + items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/energy_sword, 75) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/soap, 5, 100) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/concealed_cane, 50, 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/detomatix, 20, 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/parapen) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/cigarette_kit) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/id) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/spy) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_kit) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_projector) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/heavy_vest) + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/combat) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_radio) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_binary) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/emag, 100, 50) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/clerical) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/space_suit, 50, 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/thermal) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/teleporter, 10, 0) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_freedom) + items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_compress) + items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_explosive) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/sinpockets, reselect_propbability = 20) + items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/surgery, reselect_propbability = 10) + items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/combat, reselect_propbability = 10) + + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/thermal, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/energy_net, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/ewar_voice, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/maneuvering_jets, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/egun, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/power_sink, reselect_propbability = 15) + items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/laser_canon, reselect_propbability = 5) + +#ifdef DEBUG +/proc/debug_uplink_purchage_log() + for(var/antag_type in all_antag_types) + var/datum/antagonist/A = all_antag_types[antag_type] + A.print_player_summary() + +/proc/debug_uplink_item_assoc_list() + for(var/key in uplink.items_assoc) + to_world("[key] - [uplink.items_assoc[key]]") +#endif diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 559bfbec0d..753158eadb 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -1,64 +1,64 @@ -/obj/item/latexballon - name = "latex glove" - desc = "A latex glove, usually used as a balloon." - icon_state = "latexballon" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', - ) - item_state = "lgloves" - force = 0 - throwforce = 0 - w_class = ITEMSIZE_SMALL - throw_speed = 1 - throw_range = 15 - var/state - var/datum/gas_mixture/air_contents = null - -/obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank) - if (icon_state == "latexballon_bursted") - return - src.air_contents = tank.remove_air_volume(3) - icon_state = "latexballon_blow" - item_state = "latexballon" - -/obj/item/latexballon/proc/burst() - if (!air_contents) - return - playsound(src, 'sound/weapons/Gunshot_old.ogg', 100, 1) - icon_state = "latexballon_bursted" - item_state = "lgloves" - loc.assume_air(air_contents) - -/obj/item/latexballon/ex_act(severity) - burst() - switch(severity) - if (1) - qdel(src) - if (2) - if (prob(50)) - qdel(src) - -/obj/item/latexballon/bullet_act() - burst() - -/obj/item/latexballon/fire_act(datum/gas_mixture/air, temperature, volume) - if(temperature > T0C+100) - burst() - return - -/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) - if (can_puncture(W)) - burst() - -/* -/obj/item/latexballon/nitrile - name = "nitrile glove" - desc = "A nitrile glove, usually used as a balloon." - icon_state = "nitrileballon" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', - ) - item_state = "ngloves" +/obj/item/latexballon + name = "latex glove" + desc = "A latex glove, usually used as a balloon." + icon_state = "latexballon" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', + ) + item_state = "lgloves" + force = 0 + throwforce = 0 + w_class = ITEMSIZE_SMALL + throw_speed = 1 + throw_range = 15 + var/state + var/datum/gas_mixture/air_contents = null + +/obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank) + if (icon_state == "latexballon_bursted") + return + src.air_contents = tank.remove_air_volume(3) + icon_state = "latexballon_blow" + item_state = "latexballon" + +/obj/item/latexballon/proc/burst() + if (!air_contents) + return + playsound(src, 'sound/weapons/Gunshot_old.ogg', 100, 1) + icon_state = "latexballon_bursted" + item_state = "lgloves" + loc.assume_air(air_contents) + +/obj/item/latexballon/ex_act(severity) + burst() + switch(severity) + if (1) + qdel(src) + if (2) + if (prob(50)) + qdel(src) + +/obj/item/latexballon/bullet_act() + burst() + +/obj/item/latexballon/fire_act(datum/gas_mixture/air, temperature, volume) + if(temperature > T0C+100) + burst() + return + +/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) + if (can_puncture(W)) + burst() + +/* +/obj/item/latexballon/nitrile + name = "nitrile glove" + desc = "A nitrile glove, usually used as a balloon." + icon_state = "nitrileballon" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', + ) + item_state = "ngloves" */ \ No newline at end of file diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index 59e9cb2878..2873d7b72c 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -1,332 +1,332 @@ -/obj/item/device/kit - icon_state = "modkit" - icon = 'icons/obj/device.dmi' - w_class = ITEMSIZE_SMALL - var/new_name = "custom item" - var/new_desc = "A custom item." - var/new_icon - var/new_icon_file - var/new_icon_override_file - var/uses = 1 // Uses before the kit deletes itself. - var/list/allowed_types = list() - -/obj/item/device/kit/examine() - . = ..() - . += "It has [uses] use\s left." - -/obj/item/device/kit/proc/use(var/amt, var/mob/user) - uses -= amt - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - if(uses<1) - user.drop_item() - qdel(src) - -/obj/item/device/kit/proc/can_customize(var/obj/item/I) - return is_type_in_list(I, allowed_types) - -/obj/item/device/kit/proc/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) - new_name = kit_name - new_desc = kit_desc - new_icon = kit_icon - new_icon_file = kit_icon_file - new_icon_override_file = kit_icon_override_file - - for(var/path in splittext(additional_data, ", ")) - allowed_types |= text2path(path) - -/obj/item/device/kit/proc/customize(var/obj/item/I, var/mob/user) - if(can_customize(I)) - I.name = new_name ? new_name : I.name - I.desc = new_desc ? new_desc : I.desc - I.icon = new_icon_file ? new_icon_file : I.icon - I.icon_override = new_icon_override_file ? new_icon_override_file : I.icon_override - if(new_icon) - I.icon_state = new_icon - var/obj/item/clothing/under/U = I - if(istype(U)) - U.worn_state = I.icon_state - U.update_rolldown_status() - use(1, user) - -// Generic use -/obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/device/kit)) - var/obj/item/device/kit/K = W - K.customize(src, user) - return - - ..() - -// Root hardsuit kit defines. -// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up. -/obj/item/device/kit/suit - name = "voidsuit modification kit" - desc = "A kit for modifying a voidsuit." - uses = 2 - var/new_light_overlay - -/obj/item/device/kit/suit/can_customize(var/obj/item/I) - return istype(I, /obj/item/clothing/head/helmet/space/void) || istype(I, /obj/item/clothing/suit/space/void) || istype(I, /obj/item/clothing/suit/storage/hooded) - -/obj/item/device/kit/suit/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) - ..() - - new_light_overlay = additional_data - - -/obj/item/device/kit/suit/customize(var/obj/item/I, var/mob/user) - if(can_customize(I)) - if(istype(I, /obj/item/clothing/head/helmet/space/void)) - var/obj/item/clothing/head/helmet/space/void/helmet = I - helmet.name = "[new_name] suit helmet" - helmet.desc = new_desc - helmet.icon_state = "[new_icon]_helmet" - helmet.item_state = "[new_icon]_helmet" - if(new_icon_file) - helmet.icon = new_icon_file - if(new_icon_override_file) - helmet.icon_override = new_icon_override_file - if(new_light_overlay) - helmet.light_overlay = new_light_overlay - to_chat(user, "You set about modifying the helmet into [helmet].") - var/mob/living/carbon/human/H = user - if(istype(H)) - helmet.species_restricted = list(H.species.get_bodytype(H)) - else if(istype(I, /obj/item/clothing/suit/storage/hooded)) - var/obj/item/clothing/suit/storage/hooded/suit = I - suit.name = "[new_name] suit" - suit.desc = new_desc - suit.icon_state = "[new_icon]_suit" - suit.toggleicon = "[new_icon]_suit" - var/obj/item/clothing/head/hood/S = suit.hood - S.icon_state = "[new_icon]_helmet" - if(new_icon_file) - suit.icon = new_icon_file - S.icon = new_icon_file - if(new_icon_override_file) - suit.icon_override = new_icon_override_file - S.icon_override = new_icon_override_file - to_chat(user, "You set about modifying the suit into [suit].") -// var/mob/living/carbon/human/H = user -// if(istype(H)) -// suit.species_restricted = list(H.species.get_bodytype(H)) Does not quite make sense for something usually very pliable. - else - var/obj/item/clothing/suit/space/void/suit = I - suit.name = "[new_name] voidsuit" - suit.desc = new_desc - suit.icon_state = "[new_icon]_suit" - suit.item_state = "[new_icon]_suit" - if(new_icon_file) - suit.icon = new_icon_file - if(new_icon_override_file) - suit.icon_override = new_icon_override_file - to_chat(user, "You set about modifying the suit into [suit].") - var/mob/living/carbon/human/H = user - if(istype(H)) - suit.species_restricted = list(H.species.get_bodytype(H)) - use(1,user) - -/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/kit = O - kit.customize(src, user) - return - return ..() - -/obj/item/clothing/suit/space/void/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/kit = O - kit.customize(src, user) - return - return ..() - -/obj/item/clothing/suit/storage/hooded/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/kit = O - kit.customize(src, user) - return - return ..() - -/obj/item/device/kit/suit/rig - name = "rig modification kit" - desc = "A kit for modifying a rigsuit." - uses = 1 - -/obj/item/device/kit/suit/rig/customize(var/obj/item/I, var/mob/user) - var/obj/item/weapon/rig/RIG = I - RIG.suit_state = new_icon - RIG.item_state = new_icon - RIG.suit_type = "customized [initial(RIG.suit_type)]" - RIG.name = "[new_name]" - RIG.desc = new_desc - RIG.icon = new_icon_file - RIG.icon_state = new_icon - RIG.icon_override = new_icon_override_file - for(var/obj/item/piece in list(RIG.gloves,RIG.helmet,RIG.boots,RIG.chest)) - if(!istype(piece)) - continue - piece.name = "[RIG.suit_type] [initial(piece.name)]" - piece.desc = "It seems to be part of a [RIG.name]." - piece.icon_state = "[RIG.suit_state]" - if(istype(piece, /obj/item/clothing/shoes)) - piece.icon = 'icons/mob/custom_items_rig_boots.dmi' - piece.icon_override = 'icons/mob/custom_items_rig_boots.dmi' - if(istype(piece, /obj/item/clothing/suit)) - piece.icon = 'icons/mob/custom_items_rig_suit.dmi' - piece.icon_override = 'icons/mob/custom_items_rig_suit.dmi' - if(istype(piece, /obj/item/clothing/head)) - piece.icon = 'icons/mob/custom_items_rig_helmet.dmi' - piece.icon_override = 'icons/mob/custom_items_rig_helmet.dmi' - if(istype(piece, /obj/item/clothing/gloves)) - piece.icon = 'icons/mob/custom_items_rig_gloves.dmi' - piece.icon_override = 'icons/mob/custom_items_rig_gloves.dmi' - if(RIG.helmet && istype(RIG.helmet, /obj/item/clothing/head/helmet) && new_light_overlay) - var/obj/item/clothing/head/helmet/H = RIG.helmet - H.light_overlay = new_light_overlay - use(1,user) - -/obj/item/device/kit/suit/rig/can_customize(var/obj/item/I) - return istype(I, /obj/item/weapon/rig) - -/obj/item/weapon/rig/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/rig/kit = O - kit.customize(src, user) - return - return ..() - -/obj/item/device/kit/suit/rig/debug/Initialize() - set_info("debug suit", "This is a test", "debug", CUSTOM_ITEM_OBJ, CUSTOM_ITEM_MOB) - -/obj/item/device/kit/paint - name = "mecha customisation kit" - desc = "A kit containing all the needed tools and parts to repaint a mech." - var/removable = null - -/obj/item/device/kit/paint/can_customize(var/obj/mecha/M) - if(!istype(M)) - return 0 - - for(var/type in allowed_types) - if(type == M.initial_icon) - return 1 - -/obj/item/device/kit/paint/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) - ..() - - allowed_types = splittext(additional_data, ", ") - - -/obj/item/device/kit/paint/examine() - . = ..() - . += "This kit will convert an exosuit into: [new_name]." - . += "This kit can be used on the following exosuit models:" - for(var/exotype in allowed_types) - . += "- [capitalize(exotype)]" - -/obj/item/device/kit/paint/customize(var/obj/mecha/M, var/mob/user) - if(!can_customize(M)) - to_chat(user, "That kit isn't meant for use on this class of exosuit.") - return - - if(M.occupant) - to_chat(user, "You can't customize a mech while someone is piloting it - that would be unsafe!") - return - - user.visible_message("[user] opens [src] and spends some quality time customising [M].") - M.name = new_name - M.desc = new_desc - M.initial_icon = new_icon - if(new_icon_file) - M.icon = new_icon_file - M.update_icon() - use(1, user) - -/obj/mecha/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W, /obj/item/device/kit/paint)) - var/obj/item/device/kit/paint/P = W - P.customize(src, user) - return - else - return ..() - -//Ripley APLU kits. -/obj/item/device/kit/paint/ripley - name = "\"Classic\" APLU customisation kit" - new_name = "APLU \"Classic\"" - new_desc = "A very retro APLU unit; didn't they retire these back in 2543?" - new_icon = "ripley-old" - allowed_types = list("ripley") - var/showpilot = TRUE - var/showpilot_lift = 5 - -/obj/item/device/kit/paint/ripley/customize(obj/mecha/M, mob/user) - if(showpilot) - M.show_pilot = TRUE - M.pilot_lift = 5 - else - M.show_pilot = FALSE - M.pilot_lift = 0 - . = ..() - -/obj/item/device/kit/paint/ripley/death - name = "\"Reaper\" APLU customisation kit" - new_name = "APLU \"Reaper\"" - new_desc = "A terrifying, grim power loader. Why do those clamps have spikes?" - new_icon = "deathripley" - allowed_types = list("ripley","firefighter") - showpilot = FALSE - -/obj/item/device/kit/paint/ripley/flames_red - name = "\"Firestarter\" APLU customisation kit" - new_name = "APLU \"Firestarter\"" - new_desc = "A standard APLU exosuit with stylish orange flame decals." - new_icon = "ripley_flames_red" - showpilot = FALSE - -/obj/item/device/kit/paint/ripley/flames_blue - name = "\"Burning Chrome\" APLU customisation kit" - new_name = "APLU \"Burning Chrome\"" - new_desc = "A standard APLU exosuit with stylish blue flame decals." - new_icon = "ripley_flames_blue" - showpilot = FALSE - -// Durand kits. -/obj/item/device/kit/paint/durand - name = "\"Classic\" Durand customisation kit" - new_name = "Durand \"Classic\"" - new_desc = "An older model of Durand combat exosuit. This model was retired for rotating a pilot's torso 180 degrees." - new_icon = "old_durand" - allowed_types = list("durand") - -/obj/item/device/kit/paint/durand/seraph - name = "\"Cherubim\" Durand customisation kit" - new_name = "Durand \"Cherubim\"" - new_desc = "A Durand combat exosuit modelled after ancient Earth entertainment. Your heart goes doki-doki just looking at it." - new_icon = "old_durand" - -/obj/item/device/kit/paint/durand/phazon - name = "\"Sypher\" Durand customisation kit" - new_name = "Durand \"Sypher\"" - new_desc = "A Durand combat exosuit with some very stylish neons and decals. Seems to blur slightly at the edges; probably an optical illusion." - new_icon = "phazon" - -// Gygax kits. -/obj/item/device/kit/paint/gygax - name = "\"Jester\" Gygax customisation kit" - new_name = "Gygax \"Jester\"" - new_desc = "A Gygax exosuit modelled after the infamous combat-troubadors of Earth's distant past. Terrifying to behold." - new_icon = "honker" - allowed_types = list("gygax") - -/obj/item/device/kit/paint/gygax/darkgygax - name = "\"Silhouette\" Gygax customisation kit" - new_name = "Gygax \"Silhouette\"" - new_desc = "An ominous Gygax exosuit modelled after the fictional corporate 'death squads' that were popular in pulp action-thrillers back in 2554." - new_icon = "darkgygax" - -/obj/item/device/kit/paint/gygax/recitence - name = "\"Gaoler\" Gygax customisation kit" - new_name = "Durand \"Gaoler\"" - new_desc = "A bulky silver Gygax exosuit. The extra armour appears to be painted on, but it's very shiny." +/obj/item/device/kit + icon_state = "modkit" + icon = 'icons/obj/device.dmi' + w_class = ITEMSIZE_SMALL + var/new_name = "custom item" + var/new_desc = "A custom item." + var/new_icon + var/new_icon_file + var/new_icon_override_file + var/uses = 1 // Uses before the kit deletes itself. + var/list/allowed_types = list() + +/obj/item/device/kit/examine() + . = ..() + . += "It has [uses] use\s left." + +/obj/item/device/kit/proc/use(var/amt, var/mob/user) + uses -= amt + playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + if(uses<1) + user.drop_item() + qdel(src) + +/obj/item/device/kit/proc/can_customize(var/obj/item/I) + return is_type_in_list(I, allowed_types) + +/obj/item/device/kit/proc/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) + new_name = kit_name + new_desc = kit_desc + new_icon = kit_icon + new_icon_file = kit_icon_file + new_icon_override_file = kit_icon_override_file + + for(var/path in splittext(additional_data, ", ")) + allowed_types |= text2path(path) + +/obj/item/device/kit/proc/customize(var/obj/item/I, var/mob/user) + if(can_customize(I)) + I.name = new_name ? new_name : I.name + I.desc = new_desc ? new_desc : I.desc + I.icon = new_icon_file ? new_icon_file : I.icon + I.icon_override = new_icon_override_file ? new_icon_override_file : I.icon_override + if(new_icon) + I.icon_state = new_icon + var/obj/item/clothing/under/U = I + if(istype(U)) + U.worn_state = I.icon_state + U.update_rolldown_status() + use(1, user) + +// Generic use +/obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/kit)) + var/obj/item/device/kit/K = W + K.customize(src, user) + return + + ..() + +// Root hardsuit kit defines. +// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up. +/obj/item/device/kit/suit + name = "voidsuit modification kit" + desc = "A kit for modifying a voidsuit." + uses = 2 + var/new_light_overlay + +/obj/item/device/kit/suit/can_customize(var/obj/item/I) + return istype(I, /obj/item/clothing/head/helmet/space/void) || istype(I, /obj/item/clothing/suit/space/void) || istype(I, /obj/item/clothing/suit/storage/hooded) + +/obj/item/device/kit/suit/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) + ..() + + new_light_overlay = additional_data + + +/obj/item/device/kit/suit/customize(var/obj/item/I, var/mob/user) + if(can_customize(I)) + if(istype(I, /obj/item/clothing/head/helmet/space/void)) + var/obj/item/clothing/head/helmet/space/void/helmet = I + helmet.name = "[new_name] suit helmet" + helmet.desc = new_desc + helmet.icon_state = "[new_icon]_helmet" + helmet.item_state = "[new_icon]_helmet" + if(new_icon_file) + helmet.icon = new_icon_file + if(new_icon_override_file) + helmet.icon_override = new_icon_override_file + if(new_light_overlay) + helmet.light_overlay = new_light_overlay + to_chat(user, "You set about modifying the helmet into [helmet].") + var/mob/living/carbon/human/H = user + if(istype(H)) + helmet.species_restricted = list(H.species.get_bodytype(H)) + else if(istype(I, /obj/item/clothing/suit/storage/hooded)) + var/obj/item/clothing/suit/storage/hooded/suit = I + suit.name = "[new_name] suit" + suit.desc = new_desc + suit.icon_state = "[new_icon]_suit" + suit.toggleicon = "[new_icon]_suit" + var/obj/item/clothing/head/hood/S = suit.hood + S.icon_state = "[new_icon]_helmet" + if(new_icon_file) + suit.icon = new_icon_file + S.icon = new_icon_file + if(new_icon_override_file) + suit.icon_override = new_icon_override_file + S.icon_override = new_icon_override_file + to_chat(user, "You set about modifying the suit into [suit].") +// var/mob/living/carbon/human/H = user +// if(istype(H)) +// suit.species_restricted = list(H.species.get_bodytype(H)) Does not quite make sense for something usually very pliable. + else + var/obj/item/clothing/suit/space/void/suit = I + suit.name = "[new_name] voidsuit" + suit.desc = new_desc + suit.icon_state = "[new_icon]_suit" + suit.item_state = "[new_icon]_suit" + if(new_icon_file) + suit.icon = new_icon_file + if(new_icon_override_file) + suit.icon_override = new_icon_override_file + to_chat(user, "You set about modifying the suit into [suit].") + var/mob/living/carbon/human/H = user + if(istype(H)) + suit.species_restricted = list(H.species.get_bodytype(H)) + use(1,user) + +/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O, var/mob/user) + if(istype(O,/obj/item/device/kit/suit)) + var/obj/item/device/kit/suit/kit = O + kit.customize(src, user) + return + return ..() + +/obj/item/clothing/suit/space/void/attackby(var/obj/item/O, var/mob/user) + if(istype(O,/obj/item/device/kit/suit)) + var/obj/item/device/kit/suit/kit = O + kit.customize(src, user) + return + return ..() + +/obj/item/clothing/suit/storage/hooded/attackby(var/obj/item/O, var/mob/user) + if(istype(O,/obj/item/device/kit/suit)) + var/obj/item/device/kit/suit/kit = O + kit.customize(src, user) + return + return ..() + +/obj/item/device/kit/suit/rig + name = "rig modification kit" + desc = "A kit for modifying a rigsuit." + uses = 1 + +/obj/item/device/kit/suit/rig/customize(var/obj/item/I, var/mob/user) + var/obj/item/weapon/rig/RIG = I + RIG.suit_state = new_icon + RIG.item_state = new_icon + RIG.suit_type = "customized [initial(RIG.suit_type)]" + RIG.name = "[new_name]" + RIG.desc = new_desc + RIG.icon = new_icon_file + RIG.icon_state = new_icon + RIG.icon_override = new_icon_override_file + for(var/obj/item/piece in list(RIG.gloves,RIG.helmet,RIG.boots,RIG.chest)) + if(!istype(piece)) + continue + piece.name = "[RIG.suit_type] [initial(piece.name)]" + piece.desc = "It seems to be part of a [RIG.name]." + piece.icon_state = "[RIG.suit_state]" + if(istype(piece, /obj/item/clothing/shoes)) + piece.icon = 'icons/mob/custom_items_rig_boots.dmi' + piece.icon_override = 'icons/mob/custom_items_rig_boots.dmi' + if(istype(piece, /obj/item/clothing/suit)) + piece.icon = 'icons/mob/custom_items_rig_suit.dmi' + piece.icon_override = 'icons/mob/custom_items_rig_suit.dmi' + if(istype(piece, /obj/item/clothing/head)) + piece.icon = 'icons/mob/custom_items_rig_helmet.dmi' + piece.icon_override = 'icons/mob/custom_items_rig_helmet.dmi' + if(istype(piece, /obj/item/clothing/gloves)) + piece.icon = 'icons/mob/custom_items_rig_gloves.dmi' + piece.icon_override = 'icons/mob/custom_items_rig_gloves.dmi' + if(RIG.helmet && istype(RIG.helmet, /obj/item/clothing/head/helmet) && new_light_overlay) + var/obj/item/clothing/head/helmet/H = RIG.helmet + H.light_overlay = new_light_overlay + use(1,user) + +/obj/item/device/kit/suit/rig/can_customize(var/obj/item/I) + return istype(I, /obj/item/weapon/rig) + +/obj/item/weapon/rig/attackby(var/obj/item/O, var/mob/user) + if(istype(O,/obj/item/device/kit/suit)) + var/obj/item/device/kit/suit/rig/kit = O + kit.customize(src, user) + return + return ..() + +/obj/item/device/kit/suit/rig/debug/Initialize() + set_info("debug suit", "This is a test", "debug", CUSTOM_ITEM_OBJ, CUSTOM_ITEM_MOB) + +/obj/item/device/kit/paint + name = "mecha customisation kit" + desc = "A kit containing all the needed tools and parts to repaint a mech." + var/removable = null + +/obj/item/device/kit/paint/can_customize(var/obj/mecha/M) + if(!istype(M)) + return 0 + + for(var/type in allowed_types) + if(type == M.initial_icon) + return 1 + +/obj/item/device/kit/paint/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data) + ..() + + allowed_types = splittext(additional_data, ", ") + + +/obj/item/device/kit/paint/examine() + . = ..() + . += "This kit will convert an exosuit into: [new_name]." + . += "This kit can be used on the following exosuit models:" + for(var/exotype in allowed_types) + . += "- [capitalize(exotype)]" + +/obj/item/device/kit/paint/customize(var/obj/mecha/M, var/mob/user) + if(!can_customize(M)) + to_chat(user, "That kit isn't meant for use on this class of exosuit.") + return + + if(M.occupant) + to_chat(user, "You can't customize a mech while someone is piloting it - that would be unsafe!") + return + + user.visible_message("[user] opens [src] and spends some quality time customising [M].") + M.name = new_name + M.desc = new_desc + M.initial_icon = new_icon + if(new_icon_file) + M.icon = new_icon_file + M.update_icon() + use(1, user) + +/obj/mecha/attackby(var/obj/item/weapon/W, var/mob/user) + if(istype(W, /obj/item/device/kit/paint)) + var/obj/item/device/kit/paint/P = W + P.customize(src, user) + return + else + return ..() + +//Ripley APLU kits. +/obj/item/device/kit/paint/ripley + name = "\"Classic\" APLU customisation kit" + new_name = "APLU \"Classic\"" + new_desc = "A very retro APLU unit; didn't they retire these back in 2543?" + new_icon = "ripley-old" + allowed_types = list("ripley") + var/showpilot = TRUE + var/showpilot_lift = 5 + +/obj/item/device/kit/paint/ripley/customize(obj/mecha/M, mob/user) + if(showpilot) + M.show_pilot = TRUE + M.pilot_lift = 5 + else + M.show_pilot = FALSE + M.pilot_lift = 0 + . = ..() + +/obj/item/device/kit/paint/ripley/death + name = "\"Reaper\" APLU customisation kit" + new_name = "APLU \"Reaper\"" + new_desc = "A terrifying, grim power loader. Why do those clamps have spikes?" + new_icon = "deathripley" + allowed_types = list("ripley","firefighter") + showpilot = FALSE + +/obj/item/device/kit/paint/ripley/flames_red + name = "\"Firestarter\" APLU customisation kit" + new_name = "APLU \"Firestarter\"" + new_desc = "A standard APLU exosuit with stylish orange flame decals." + new_icon = "ripley_flames_red" + showpilot = FALSE + +/obj/item/device/kit/paint/ripley/flames_blue + name = "\"Burning Chrome\" APLU customisation kit" + new_name = "APLU \"Burning Chrome\"" + new_desc = "A standard APLU exosuit with stylish blue flame decals." + new_icon = "ripley_flames_blue" + showpilot = FALSE + +// Durand kits. +/obj/item/device/kit/paint/durand + name = "\"Classic\" Durand customisation kit" + new_name = "Durand \"Classic\"" + new_desc = "An older model of Durand combat exosuit. This model was retired for rotating a pilot's torso 180 degrees." + new_icon = "old_durand" + allowed_types = list("durand") + +/obj/item/device/kit/paint/durand/seraph + name = "\"Cherubim\" Durand customisation kit" + new_name = "Durand \"Cherubim\"" + new_desc = "A Durand combat exosuit modelled after ancient Earth entertainment. Your heart goes doki-doki just looking at it." + new_icon = "old_durand" + +/obj/item/device/kit/paint/durand/phazon + name = "\"Sypher\" Durand customisation kit" + new_name = "Durand \"Sypher\"" + new_desc = "A Durand combat exosuit with some very stylish neons and decals. Seems to blur slightly at the edges; probably an optical illusion." + new_icon = "phazon" + +// Gygax kits. +/obj/item/device/kit/paint/gygax + name = "\"Jester\" Gygax customisation kit" + new_name = "Gygax \"Jester\"" + new_desc = "A Gygax exosuit modelled after the infamous combat-troubadors of Earth's distant past. Terrifying to behold." + new_icon = "honker" + allowed_types = list("gygax") + +/obj/item/device/kit/paint/gygax/darkgygax + name = "\"Silhouette\" Gygax customisation kit" + new_name = "Gygax \"Silhouette\"" + new_desc = "An ominous Gygax exosuit modelled after the fictional corporate 'death squads' that were popular in pulp action-thrillers back in 2554." + new_icon = "darkgygax" + +/obj/item/device/kit/paint/gygax/recitence + name = "\"Gaoler\" Gygax customisation kit" + new_name = "Durand \"Gaoler\"" + new_desc = "A bulky silver Gygax exosuit. The extra armour appears to be painted on, but it's very shiny." new_icon = "recitence" \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index ddeac74b58..c7563b4412 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -1,84 +1,84 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/********************************************************************** - Cyborg Spec Items -***********************************************************************/ -//Might want to move this into several files later but for now it works here - -/obj/item/weapon/melee/baton/robot/arm - name = "electrified arm" - icon = 'icons/obj/decals.dmi' - icon_state = "shock" - - hitcost = 750 - agonyforce = 70 - -/obj/item/weapon/melee/baton/robot/arm/update_icon() - if(status) - set_light(1.5, 1, lightcolor) - else - set_light(0) - -/obj/item/borg/overdrive - name = "overdrive" - icon = 'icons/obj/decals.dmi' - icon_state = "shock" - -/********************************************************************** - HUD/SIGHT things -***********************************************************************/ -/obj/item/borg/sight - icon = 'icons/obj/decals.dmi' - icon_state = "securearea" - var/sight_mode = null - - -/obj/item/borg/sight/xray - name = "\proper x-ray vision" - sight_mode = BORGXRAY - - -/obj/item/borg/sight/thermal - name = "\proper thermal vision" - sight_mode = BORGTHERM - icon_state = "thermal" - icon = 'icons/inventory/eyes/item.dmi' - - -/obj/item/borg/sight/meson - name = "\proper meson vision" - sight_mode = BORGMESON - icon_state = "meson" - icon = 'icons/inventory/eyes/item.dmi' - -/obj/item/borg/sight/material - name = "\proper material scanner vision" - sight_mode = BORGMATERIAL - icon_state = "material" - icon = 'icons/inventory/eyes/item.dmi' - -/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" - icon = 'icons/inventory/eyes/item.dmi' - -/obj/item/borg/sight/hud/med/New() - ..() - hud = new /obj/item/clothing/glasses/hud/health(src) - return - - -/obj/item/borg/sight/hud/sec - name = "security hud" - icon_state = "securityhud" - icon = 'icons/inventory/eyes/item.dmi' - -/obj/item/borg/sight/hud/sec/New() - ..() - hud = new /obj/item/clothing/glasses/hud/security(src) - return +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/********************************************************************** + Cyborg Spec Items +***********************************************************************/ +//Might want to move this into several files later but for now it works here + +/obj/item/weapon/melee/baton/robot/arm + name = "electrified arm" + icon = 'icons/obj/decals.dmi' + icon_state = "shock" + + hitcost = 750 + agonyforce = 70 + +/obj/item/weapon/melee/baton/robot/arm/update_icon() + if(status) + set_light(1.5, 1, lightcolor) + else + set_light(0) + +/obj/item/borg/overdrive + name = "overdrive" + icon = 'icons/obj/decals.dmi' + icon_state = "shock" + +/********************************************************************** + HUD/SIGHT things +***********************************************************************/ +/obj/item/borg/sight + icon = 'icons/obj/decals.dmi' + icon_state = "securearea" + var/sight_mode = null + + +/obj/item/borg/sight/xray + name = "\proper x-ray vision" + sight_mode = BORGXRAY + + +/obj/item/borg/sight/thermal + name = "\proper thermal vision" + sight_mode = BORGTHERM + icon_state = "thermal" + icon = 'icons/inventory/eyes/item.dmi' + + +/obj/item/borg/sight/meson + name = "\proper meson vision" + sight_mode = BORGMESON + icon_state = "meson" + icon = 'icons/inventory/eyes/item.dmi' + +/obj/item/borg/sight/material + name = "\proper material scanner vision" + sight_mode = BORGMATERIAL + icon_state = "material" + icon = 'icons/inventory/eyes/item.dmi' + +/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" + icon = 'icons/inventory/eyes/item.dmi' + +/obj/item/borg/sight/hud/med/New() + ..() + hud = new /obj/item/clothing/glasses/hud/health(src) + return + + +/obj/item/borg/sight/hud/sec + name = "security hud" + icon_state = "securityhud" + icon = 'icons/inventory/eyes/item.dmi' + +/obj/item/borg/sight/hud/sec/New() + ..() + hud = new /obj/item/clothing/glasses/hud/security(src) + return diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 12423a91f3..53ea152385 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -1,180 +1,180 @@ -// Targets, the things that actually get shot! -/obj/item/target - name = "shooting target" - desc = "A shooting target." - icon = 'icons/obj/objects.dmi' - icon_state = "target_h" - density = FALSE - var/hp = 1800 - var/icon/virtualIcon - var/list/bulletholes = list() - -/obj/item/target/Destroy() - // if a target is deleted and associated with a stake, force stake to forget - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - T.pinned_target = null - T.density = TRUE - break - ..() // delete target - -/obj/item/target/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - // After target moves, check for nearby stakes. If associated, move to target - for(var/obj/structure/target_stake/M in view(3,src)) - if(M.density == 0 && M.pinned_target == src) - M.forceMove(loc) - - // This may seem a little counter-intuitive but I assure you that's for a purpose. - // Stakes are the ones that carry targets, yes, but in the stake code we set - // a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing - // the stake now, we have to push the target. - - - -/obj/item/target/attackby(obj/item/W as obj, mob/user as mob) - if (W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(WT.remove_fuel(0, user)) - cut_overlays() - to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.") - return - - -/obj/item/target/attack_hand(mob/user as mob) - // taking pinned targets off! - var/obj/structure/target_stake/stake - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - stake = T - break - - if(stake) - if(stake.pinned_target) - stake.density = TRUE - density = FALSE - layer = OBJ_LAYER - - loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(src) - to_chat(user, "You take the target out of the stake.") - else - src.loc = get_turf(user) - to_chat(user, "You take the target out of the stake.") - - stake.pinned_target = null - return - - else - ..() - -/obj/item/target/syndicate - icon_state = "target_s" - desc = "A shooting target that looks like a hostile agent." - hp = 2600 // i guess syndie targets are sturdier? -/obj/item/target/alien - icon_state = "target_q" - desc = "A shooting target with a threatening silhouette." - hp = 2350 // alium onest too kinda - -/obj/item/target/bullet_act(var/obj/item/projectile/Proj) - var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!" - var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1) - var/decaltype = 1 // 1 - scorch, 2 - bullet - - if(istype(/obj/item/projectile/bullet, Proj)) - decaltype = 2 - - - virtualIcon = new(icon, icon_state) - - if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null) - - hp -= Proj.damage - if(hp <= 0) - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - to_chat(O, "\The [src] breaks into tiny pieces and collapses!") - qdel(src) - - // Create a temporary object to represent the damage - var/obj/bmark = new - bmark.pixel_x = p_x - bmark.pixel_y = p_y - bmark.icon = 'icons/effects/effects.dmi' - bmark.icon_state = "scorch" - - if(decaltype == 1) - // Energy weapons are hot. they scorch! - - // offset correction - bmark.pixel_x-- - bmark.pixel_y-- - - if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice)) - bmark.icon_state = "scorch" - bmark.set_dir(pick(NORTH,SOUTH,EAST,WEST)) // random scorch design - - - else - bmark.icon_state = "light_scorch" - else - - // Bullets are hard. They make dents! - bmark.icon_state = "dent" - - if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes - if(decaltype == 2) // bullet - if(prob(Proj.damage+30)) // bullets make holes more commonly! - new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole - else // Lasers! - if(prob(Proj.damage-10)) // lasers make holes less commonly - new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole - - // draw bullet holes - for(var/datum/bullethole/B in bulletholes) - - virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right - virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom - - add_overlay(bmark) // add the decal - - icon = virtualIcon // apply bulletholes over decals - - return - - return PROJECTILE_CONTINUE // the bullet/projectile goes through the target! - - -// Small memory holder entity for transparent bullet holes -/datum/bullethole - // First box - var/b1x1 = 0 - var/b1x2 = 0 - var/b1y = 0 - - // Second box - var/b2x = 0 - var/b2y1 = 0 - var/b2y2 = 0 - -/datum/bullethole/New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0) - if(!Target) return - - // Randomize the first box - b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4) - b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4) - b1y = pixel_y - if(prob(35)) - b1y += rand(-4,4) - - // Randomize the second box - b2x = pixel_x - if(prob(35)) - b2x += rand(-4,4) - b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) - b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) - - Target.bulletholes.Add(src) +// Targets, the things that actually get shot! +/obj/item/target + name = "shooting target" + desc = "A shooting target." + icon = 'icons/obj/objects.dmi' + icon_state = "target_h" + density = FALSE + var/hp = 1800 + var/icon/virtualIcon + var/list/bulletholes = list() + +/obj/item/target/Destroy() + // if a target is deleted and associated with a stake, force stake to forget + for(var/obj/structure/target_stake/T in view(3,src)) + if(T.pinned_target == src) + T.pinned_target = null + T.density = TRUE + break + ..() // delete target + +/obj/item/target/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + // After target moves, check for nearby stakes. If associated, move to target + for(var/obj/structure/target_stake/M in view(3,src)) + if(M.density == 0 && M.pinned_target == src) + M.forceMove(loc) + + // This may seem a little counter-intuitive but I assure you that's for a purpose. + // Stakes are the ones that carry targets, yes, but in the stake code we set + // a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing + // the stake now, we have to push the target. + + + +/obj/item/target/attackby(obj/item/W as obj, mob/user as mob) + if (W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(WT.remove_fuel(0, user)) + cut_overlays() + to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.") + return + + +/obj/item/target/attack_hand(mob/user as mob) + // taking pinned targets off! + var/obj/structure/target_stake/stake + for(var/obj/structure/target_stake/T in view(3,src)) + if(T.pinned_target == src) + stake = T + break + + if(stake) + if(stake.pinned_target) + stake.density = TRUE + density = FALSE + layer = OBJ_LAYER + + loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(src) + to_chat(user, "You take the target out of the stake.") + else + src.loc = get_turf(user) + to_chat(user, "You take the target out of the stake.") + + stake.pinned_target = null + return + + else + ..() + +/obj/item/target/syndicate + icon_state = "target_s" + desc = "A shooting target that looks like a hostile agent." + hp = 2600 // i guess syndie targets are sturdier? +/obj/item/target/alien + icon_state = "target_q" + desc = "A shooting target with a threatening silhouette." + hp = 2350 // alium onest too kinda + +/obj/item/target/bullet_act(var/obj/item/projectile/Proj) + var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!" + var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1) + var/decaltype = 1 // 1 - scorch, 2 - bullet + + if(istype(/obj/item/projectile/bullet, Proj)) + decaltype = 2 + + + virtualIcon = new(icon, icon_state) + + if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null) + + hp -= Proj.damage + if(hp <= 0) + for(var/mob/O in oviewers()) + if ((O.client && !( O.blinded ))) + to_chat(O, "\The [src] breaks into tiny pieces and collapses!") + qdel(src) + + // Create a temporary object to represent the damage + var/obj/bmark = new + bmark.pixel_x = p_x + bmark.pixel_y = p_y + bmark.icon = 'icons/effects/effects.dmi' + bmark.icon_state = "scorch" + + if(decaltype == 1) + // Energy weapons are hot. they scorch! + + // offset correction + bmark.pixel_x-- + bmark.pixel_y-- + + if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice)) + bmark.icon_state = "scorch" + bmark.set_dir(pick(NORTH,SOUTH,EAST,WEST)) // random scorch design + + + else + bmark.icon_state = "light_scorch" + else + + // Bullets are hard. They make dents! + bmark.icon_state = "dent" + + if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes + if(decaltype == 2) // bullet + if(prob(Proj.damage+30)) // bullets make holes more commonly! + new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole + else // Lasers! + if(prob(Proj.damage-10)) // lasers make holes less commonly + new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole + + // draw bullet holes + for(var/datum/bullethole/B in bulletholes) + + virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right + virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom + + add_overlay(bmark) // add the decal + + icon = virtualIcon // apply bulletholes over decals + + return + + return PROJECTILE_CONTINUE // the bullet/projectile goes through the target! + + +// Small memory holder entity for transparent bullet holes +/datum/bullethole + // First box + var/b1x1 = 0 + var/b1x2 = 0 + var/b1y = 0 + + // Second box + var/b2x = 0 + var/b2y1 = 0 + var/b2y2 = 0 + +/datum/bullethole/New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0) + if(!Target) return + + // Randomize the first box + b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4) + b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4) + b1y = pixel_y + if(prob(35)) + b1y += rand(-4,4) + + // Randomize the second box + b2x = pixel_x + if(prob(35)) + b2x += rand(-4,4) + b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) + b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) + + Target.bulletholes.Add(src) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 0c3e0765f5..5b4a5c9d5f 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -1,452 +1,452 @@ -/obj/item/stack/medical - name = "medical pack" - singular_name = "medical pack" - icon = 'icons/obj/stacks.dmi' - amount = 10 - max_amount = 10 - w_class = ITEMSIZE_SMALL - throw_speed = 4 - throw_range = 20 - var/heal_brute = 0 - var/heal_burn = 0 - var/apply_sounds - drop_sound = 'sound/items/drop/cardboardbox.ogg' - pickup_sound = 'sound/items/pickup/cardboardbox.ogg' - - var/upgrade_to // The type path this stack can be upgraded to. - -/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob) - if (!istype(M)) - to_chat(user, "\The [src] cannot be applied to [M]!") - return 1 - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return 1 - - var/available = get_amount() - if(!available) - to_chat(user, "There's not enough [uses_charge ? "charge" : "items"] left to use that!") - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(!affecting) - to_chat(user, "No body part there to work on!") - return 1 - - if(affecting.organ_tag == BP_HEAD) - if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) - to_chat(user, "You can't apply [src] through [H.head]!") - return 1 - else - if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) - to_chat(user, "You can't apply [src] through [H.wear_suit]!") - return 1 - - if(affecting.robotic == ORGAN_ROBOT) - to_chat(user, "This isn't useful at all on a robotic limb.") - return 1 - - if(affecting.robotic >= ORGAN_LIFELIKE) - to_chat(user, "You apply the [src], but it seems to have no effect...") - use(1) - return 1 - - H.UpdateDamageIcon() - - else - - M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) - user.visible_message( \ - "[M] has been applied with [src] by [user].", \ - "You apply \the [src] to [M]." \ - ) - use(1) - - M.updatehealth() - -/obj/item/stack/medical/proc/upgrade_stack(var/upgrade_amount) - . = FALSE - - var/turf/T = get_turf(src) - - if(ispath(upgrade_to) && use(upgrade_amount)) - var/obj/item/stack/medical/M = new upgrade_to(T, upgrade_amount) - return M - - return . - -/obj/item/stack/medical/crude_pack - name = "crude bandage" - singular_name = "crude bandage length" - desc = "Some bandages to wrap around bloody stumps." - icon_state = "gauze" - origin_tech = list(TECH_BIO = 1) - no_variants = FALSE - apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') - - upgrade_to = /obj/item/stack/medical/bruise_pack - -/obj/item/stack/medical/crude_pack/attack(mob/living/carbon/M as mob, mob/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.open) - to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") - return - - if(affecting.is_bandaged()) - to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") - return 1 - else - var/available = get_amount() - user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ - "You start bandaging [M]'s [affecting.name]." ) - var/used = 0 - for (var/datum/wound/W in affecting.wounds) - if(W.internal) - continue - if(W.bandaged) - continue - if(used == amount) - break - if(!do_mob(user, M, W.damage/3, exclusive = TRUE)) - to_chat(user, "You must stand still to bandage wounds.") - break - - if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check. - to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") - return 1 - - if(used >= available) - to_chat(user, "You run out of [src]!") - break - - if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ - "You bandage \a [W.desc] on [M]'s [affecting.name]." ) - else - user.visible_message("\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].", \ - "You place a bandage over \a [W.desc] on [M]'s [affecting.name]." ) - W.bandage() - playsound(src, pick(apply_sounds), 25) - used++ - affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) - to_chat(user, "\The [src] is used up.") - else - to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") - use(used) - -/obj/item/stack/medical/bruise_pack - name = "roll of gauze" - singular_name = "gauze length" - desc = "Some sterile gauze to wrap around bloody stumps." - icon_state = "brutepack" - origin_tech = list(TECH_BIO = 1) - no_variants = FALSE - apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') - drop_sound = 'sound/items/drop/gloves.ogg' - pickup_sound = 'sound/items/pickup/gloves.ogg' - - upgrade_to = /obj/item/stack/medical/advanced/bruise_pack - -/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.open) - to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") - return - - if(affecting.is_bandaged()) - to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") - return 1 - else - var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ - "You start treating [M]'s [affecting.name]." ) - var/used = 0 - for (var/datum/wound/W in affecting.wounds) - if (W.internal) - continue - if(W.bandaged) - continue - if(used == amount) - break - if(!do_mob(user, M, W.damage/5, exclusive = TRUE)) - to_chat(user, "You must stand still to bandage wounds.") - break - - if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check. - to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") - return 1 - - if(used >= available) - to_chat(user, "You run out of [src]!") - break - - if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ - "You bandage \a [W.desc] on [M]'s [affecting.name]." ) - //H.add_side_effect("Itch") - else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ - "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." ) - else - user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ - "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." ) - W.bandage() - // W.disinfect() // VOREStation - Tech1 should not disinfect - playsound(src, pick(apply_sounds), 25) - used++ - affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) - to_chat(user, "\The [src] is used up.") - else - to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") - use(used) - -/obj/item/stack/medical/ointment - name = "ointment" - desc = "Used to treat those nasty burns." - gender = PLURAL - singular_name = "ointment" - icon_state = "ointment" - heal_burn = 1 - origin_tech = list(TECH_BIO = 1) - no_variants = FALSE - apply_sounds = list('sound/effects/ointment.ogg') - drop_sound = 'sound/items/drop/herb.ogg' - pickup_sound = 'sound/items/pickup/herb.ogg' - -/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.open) - to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") - return - - if(affecting.is_salved()) - to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") - return 1 - else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ - "You start salving the wounds on [M]'s [affecting.name]." ) - if(!do_mob(user, M, 10, exclusive = TRUE)) - to_chat(user, "You must stand still to salve wounds.") - return 1 - if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check. - to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") - return 1 - user.visible_message("[user] salved wounds on [M]'s [affecting.name].", \ - "You salved wounds on [M]'s [affecting.name]." ) - use(1) - affecting.salve() - playsound(src, pick(apply_sounds), 25) - -/obj/item/stack/medical/ointment/simple - name = "ointment paste" - desc = "A simple thick paste used to salve burns." - singular_name = "old-ointment" - icon_state = "old-ointment" - -/obj/item/stack/medical/advanced/bruise_pack - name = "advanced trauma kit" - singular_name = "advanced trauma kit" - desc = "An advanced trauma kit for severe injuries." - icon_state = "traumakit" - heal_brute = 7 //VOREStation Edit - origin_tech = list(TECH_BIO = 1) - apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') - -/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.open) - to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") - return - - if(affecting.is_bandaged() && affecting.is_disinfected()) - to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.") - return 1 - else - var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ - "You start treating [M]'s [affecting.name]." ) - var/used = 0 - for (var/datum/wound/W in affecting.wounds) - if (W.internal) - continue - if (W.bandaged && W.disinfected) - continue - //if(used == amount) //VOREStation Edit - // break //VOREStation Edit - if(!do_mob(user, M, W.damage/5, exclusive = TRUE)) - to_chat(user, "You must stand still to bandage wounds.") - break - if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check. - to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") - return 1 - - if(used >= available) - to_chat(user, "You run out of [src]!") - break - - if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ - "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) - else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ - "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." ) - else - user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ - "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." ) - W.bandage() - W.disinfect() - W.heal_damage(heal_brute) - playsound(src, pick(apply_sounds), 25) - used = 1 //VOREStation Edit - update_icon() // VOREStation Edit - Support for stack icons - affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) - to_chat(user, "\The [src] is used up.") - else - to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") - use(used) - -/obj/item/stack/medical/advanced/ointment - name = "advanced burn kit" - singular_name = "advanced burn kit" - desc = "An advanced treatment kit for severe burns." - icon_state = "burnkit" - heal_burn = 7 //VOREStation Edit - origin_tech = list(TECH_BIO = 1) - apply_sounds = list('sound/effects/ointment.ogg') - -/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.open) - to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") - - if(affecting.is_salved()) - to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") - return 1 - else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ - "You start salving the wounds on [M]'s [affecting.name]." ) - if(!do_mob(user, M, 10, exclusive = TRUE)) - to_chat(user, "You must stand still to salve wounds.") - return 1 - if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check. - to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") - return 1 - user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.", \ - "You cover wounds on [M]'s [affecting.name] with regenerative membrane." ) - affecting.heal_damage(0,heal_burn) - use(1) - affecting.salve() - playsound(src, pick(apply_sounds), 25) - update_icon() // VOREStation Edit - Support for stack icons - -/obj/item/stack/medical/splint - name = "medical splints" - singular_name = "medical splint" - desc = "Modular splints capable of supporting and immobilizing bones in all areas of the body." - icon_state = "splint" - amount = 5 - max_amount = 5 - drop_sound = 'sound/items/drop/hat.ogg' - pickup_sound = 'sound/items/pickup/hat.ogg' - - var/list/splintable_organs = list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO) //List of organs you can splint, natch. - -/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - var/limb = affecting.name - if(!(affecting.organ_tag in splintable_organs)) - to_chat(user, "You can't use \the [src] to apply a splint there!") - return - if(affecting.splinted) - to_chat(user, "[M]'s [limb] is already splinted!") - return - if (M != user) - user.visible_message("[user] starts to apply \the [src] to [M]'s [limb].", "You start to apply \the [src] to [M]'s [limb].", "You hear something being wrapped.") - else - if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \ - user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) )) - to_chat(user, "You can't apply a splint to the arm you're using!") - return - user.visible_message("[user] starts to apply \the [src] to their [limb].", "You start to apply \the [src] to your [limb].", "You hear something being wrapped.") - if(do_after(user, 50, M, exclusive = TASK_USER_EXCLUSIVE)) - if(affecting.splinted) - to_chat(user, "[M]'s [limb] is already splinted!") - return - if(M == user && prob(75)) - user.visible_message("\The [user] fumbles [src].", "You fumble [src].", "You hear something being wrapped.") - return - if(ishuman(user)) - var/obj/item/stack/medical/splint/S = split(1) - if(S) - if(affecting.apply_splint(S)) - S.forceMove(affecting) - if (M != user) - user.visible_message("\The [user] finishes applying [src] to [M]'s [limb].", "You finish applying \the [src] to [M]'s [limb].", "You hear something being wrapped.") - else - user.visible_message("\The [user] successfully applies [src] to their [limb].", "You successfully apply \the [src] to your [limb].", "You hear something being wrapped.") - return - S.dropInto(src.loc) //didn't get applied, so just drop it - if(isrobot(user)) - var/obj/item/stack/medical/splint/B = src - if(B) - if(affecting.apply_splint(B)) - B.forceMove(affecting) - user.visible_message("\The [user] finishes applying [src] to [M]'s [limb].", "You finish applying \the [src] to [M]'s [limb].", "You hear something being wrapped.") - B.use(1) - return - user.visible_message("\The [user] fails to apply [src].", "You fail to apply [src].", "You hear something being wrapped.") - return - - -/obj/item/stack/medical/splint/ghetto - name = "makeshift splints" - singular_name = "makeshift splint" - desc = "For holding your limbs in place with duct tape and scrap metal." - icon_state = "tape-splint" - amount = 1 - splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) +/obj/item/stack/medical + name = "medical pack" + singular_name = "medical pack" + icon = 'icons/obj/stacks.dmi' + amount = 10 + max_amount = 10 + w_class = ITEMSIZE_SMALL + throw_speed = 4 + throw_range = 20 + var/heal_brute = 0 + var/heal_burn = 0 + var/apply_sounds + drop_sound = 'sound/items/drop/cardboardbox.ogg' + pickup_sound = 'sound/items/pickup/cardboardbox.ogg' + + var/upgrade_to // The type path this stack can be upgraded to. + +/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob) + if (!istype(M)) + to_chat(user, "\The [src] cannot be applied to [M]!") + return 1 + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return 1 + + var/available = get_amount() + if(!available) + to_chat(user, "There's not enough [uses_charge ? "charge" : "items"] left to use that!") + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(!affecting) + to_chat(user, "No body part there to work on!") + return 1 + + if(affecting.organ_tag == BP_HEAD) + if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) + to_chat(user, "You can't apply [src] through [H.head]!") + return 1 + else + if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) + to_chat(user, "You can't apply [src] through [H.wear_suit]!") + return 1 + + if(affecting.robotic == ORGAN_ROBOT) + to_chat(user, "This isn't useful at all on a robotic limb.") + return 1 + + if(affecting.robotic >= ORGAN_LIFELIKE) + to_chat(user, "You apply the [src], but it seems to have no effect...") + use(1) + return 1 + + H.UpdateDamageIcon() + + else + + M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) + user.visible_message( \ + "[M] has been applied with [src] by [user].", \ + "You apply \the [src] to [M]." \ + ) + use(1) + + M.updatehealth() + +/obj/item/stack/medical/proc/upgrade_stack(var/upgrade_amount) + . = FALSE + + var/turf/T = get_turf(src) + + if(ispath(upgrade_to) && use(upgrade_amount)) + var/obj/item/stack/medical/M = new upgrade_to(T, upgrade_amount) + return M + + return . + +/obj/item/stack/medical/crude_pack + name = "crude bandage" + singular_name = "crude bandage length" + desc = "Some bandages to wrap around bloody stumps." + icon_state = "gauze" + origin_tech = list(TECH_BIO = 1) + no_variants = FALSE + apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') + + upgrade_to = /obj/item/stack/medical/bruise_pack + +/obj/item/stack/medical/crude_pack/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open) + to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") + return + + if(affecting.is_bandaged()) + to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") + return 1 + else + var/available = get_amount() + user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ + "You start bandaging [M]'s [affecting.name]." ) + var/used = 0 + for (var/datum/wound/W in affecting.wounds) + if(W.internal) + continue + if(W.bandaged) + continue + if(used == amount) + break + if(!do_mob(user, M, W.damage/3, exclusive = TRUE)) + to_chat(user, "You must stand still to bandage wounds.") + break + + if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check. + to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") + return 1 + + if(used >= available) + to_chat(user, "You run out of [src]!") + break + + if (W.current_stage <= W.max_bleeding_stage) + user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ + "You bandage \a [W.desc] on [M]'s [affecting.name]." ) + else + user.visible_message("\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a bandage over \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage() + playsound(src, pick(apply_sounds), 25) + used++ + affecting.update_damages() + if(used == amount) + if(affecting.is_bandaged()) + to_chat(user, "\The [src] is used up.") + else + to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") + use(used) + +/obj/item/stack/medical/bruise_pack + name = "roll of gauze" + singular_name = "gauze length" + desc = "Some sterile gauze to wrap around bloody stumps." + icon_state = "brutepack" + origin_tech = list(TECH_BIO = 1) + no_variants = FALSE + apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') + drop_sound = 'sound/items/drop/gloves.ogg' + pickup_sound = 'sound/items/pickup/gloves.ogg' + + upgrade_to = /obj/item/stack/medical/advanced/bruise_pack + +/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open) + to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") + return + + if(affecting.is_bandaged()) + to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") + return 1 + else + var/available = get_amount() + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + "You start treating [M]'s [affecting.name]." ) + var/used = 0 + for (var/datum/wound/W in affecting.wounds) + if (W.internal) + continue + if(W.bandaged) + continue + if(used == amount) + break + if(!do_mob(user, M, W.damage/5, exclusive = TRUE)) + to_chat(user, "You must stand still to bandage wounds.") + break + + if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check. + to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") + return 1 + + if(used >= available) + to_chat(user, "You run out of [src]!") + break + + if (W.current_stage <= W.max_bleeding_stage) + user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ + "You bandage \a [W.desc] on [M]'s [affecting.name]." ) + //H.add_side_effect("Itch") + else if (W.damage_type == BRUISE) + user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." ) + else + user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage() + // W.disinfect() // VOREStation - Tech1 should not disinfect + playsound(src, pick(apply_sounds), 25) + used++ + affecting.update_damages() + if(used == amount) + if(affecting.is_bandaged()) + to_chat(user, "\The [src] is used up.") + else + to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") + use(used) + +/obj/item/stack/medical/ointment + name = "ointment" + desc = "Used to treat those nasty burns." + gender = PLURAL + singular_name = "ointment" + icon_state = "ointment" + heal_burn = 1 + origin_tech = list(TECH_BIO = 1) + no_variants = FALSE + apply_sounds = list('sound/effects/ointment.ogg') + drop_sound = 'sound/items/drop/herb.ogg' + pickup_sound = 'sound/items/pickup/herb.ogg' + +/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open) + to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") + return + + if(affecting.is_salved()) + to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") + return 1 + else + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + "You start salving the wounds on [M]'s [affecting.name]." ) + if(!do_mob(user, M, 10, exclusive = TRUE)) + to_chat(user, "You must stand still to salve wounds.") + return 1 + if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check. + to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") + return 1 + user.visible_message("[user] salved wounds on [M]'s [affecting.name].", \ + "You salved wounds on [M]'s [affecting.name]." ) + use(1) + affecting.salve() + playsound(src, pick(apply_sounds), 25) + +/obj/item/stack/medical/ointment/simple + name = "ointment paste" + desc = "A simple thick paste used to salve burns." + singular_name = "old-ointment" + icon_state = "old-ointment" + +/obj/item/stack/medical/advanced/bruise_pack + name = "advanced trauma kit" + singular_name = "advanced trauma kit" + desc = "An advanced trauma kit for severe injuries." + icon_state = "traumakit" + heal_brute = 7 //VOREStation Edit + origin_tech = list(TECH_BIO = 1) + apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') + +/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open) + to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") + return + + if(affecting.is_bandaged() && affecting.is_disinfected()) + to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.") + return 1 + else + var/available = get_amount() + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + "You start treating [M]'s [affecting.name]." ) + var/used = 0 + for (var/datum/wound/W in affecting.wounds) + if (W.internal) + continue + if (W.bandaged && W.disinfected) + continue + //if(used == amount) //VOREStation Edit + // break //VOREStation Edit + if(!do_mob(user, M, W.damage/5, exclusive = TRUE)) + to_chat(user, "You must stand still to bandage wounds.") + break + if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check. + to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") + return 1 + + if(used >= available) + to_chat(user, "You run out of [src]!") + break + + if (W.current_stage <= W.max_bleeding_stage) + user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ + "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) + else if (W.damage_type == BRUISE) + user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." ) + else + user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ + "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage() + W.disinfect() + W.heal_damage(heal_brute) + playsound(src, pick(apply_sounds), 25) + used = 1 //VOREStation Edit + update_icon() // VOREStation Edit - Support for stack icons + affecting.update_damages() + if(used == amount) + if(affecting.is_bandaged()) + to_chat(user, "\The [src] is used up.") + else + to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].") + use(used) + +/obj/item/stack/medical/advanced/ointment + name = "advanced burn kit" + singular_name = "advanced burn kit" + desc = "An advanced treatment kit for severe burns." + icon_state = "burnkit" + heal_burn = 7 //VOREStation Edit + origin_tech = list(TECH_BIO = 1) + apply_sounds = list('sound/effects/ointment.ogg') + +/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open) + to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!") + + if(affecting.is_salved()) + to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") + return 1 + else + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + "You start salving the wounds on [M]'s [affecting.name]." ) + if(!do_mob(user, M, 10, exclusive = TRUE)) + to_chat(user, "You must stand still to salve wounds.") + return 1 + if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check. + to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") + return 1 + user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.", \ + "You cover wounds on [M]'s [affecting.name] with regenerative membrane." ) + affecting.heal_damage(0,heal_burn) + use(1) + affecting.salve() + playsound(src, pick(apply_sounds), 25) + update_icon() // VOREStation Edit - Support for stack icons + +/obj/item/stack/medical/splint + name = "medical splints" + singular_name = "medical splint" + desc = "Modular splints capable of supporting and immobilizing bones in all areas of the body." + icon_state = "splint" + amount = 5 + max_amount = 5 + drop_sound = 'sound/items/drop/hat.ogg' + pickup_sound = 'sound/items/pickup/hat.ogg' + + var/list/splintable_organs = list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO) //List of organs you can splint, natch. + +/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob) + if(..()) + return 1 + + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + var/limb = affecting.name + if(!(affecting.organ_tag in splintable_organs)) + to_chat(user, "You can't use \the [src] to apply a splint there!") + return + if(affecting.splinted) + to_chat(user, "[M]'s [limb] is already splinted!") + return + if (M != user) + user.visible_message("[user] starts to apply \the [src] to [M]'s [limb].", "You start to apply \the [src] to [M]'s [limb].", "You hear something being wrapped.") + else + if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \ + user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) )) + to_chat(user, "You can't apply a splint to the arm you're using!") + return + user.visible_message("[user] starts to apply \the [src] to their [limb].", "You start to apply \the [src] to your [limb].", "You hear something being wrapped.") + if(do_after(user, 50, M, exclusive = TASK_USER_EXCLUSIVE)) + if(affecting.splinted) + to_chat(user, "[M]'s [limb] is already splinted!") + return + if(M == user && prob(75)) + user.visible_message("\The [user] fumbles [src].", "You fumble [src].", "You hear something being wrapped.") + return + if(ishuman(user)) + var/obj/item/stack/medical/splint/S = split(1) + if(S) + if(affecting.apply_splint(S)) + S.forceMove(affecting) + if (M != user) + user.visible_message("\The [user] finishes applying [src] to [M]'s [limb].", "You finish applying \the [src] to [M]'s [limb].", "You hear something being wrapped.") + else + user.visible_message("\The [user] successfully applies [src] to their [limb].", "You successfully apply \the [src] to your [limb].", "You hear something being wrapped.") + return + S.dropInto(src.loc) //didn't get applied, so just drop it + if(isrobot(user)) + var/obj/item/stack/medical/splint/B = src + if(B) + if(affecting.apply_splint(B)) + B.forceMove(affecting) + user.visible_message("\The [user] finishes applying [src] to [M]'s [limb].", "You finish applying \the [src] to [M]'s [limb].", "You hear something being wrapped.") + B.use(1) + return + user.visible_message("\The [user] fails to apply [src].", "You fail to apply [src].", "You hear something being wrapped.") + return + + +/obj/item/stack/medical/splint/ghetto + name = "makeshift splints" + singular_name = "makeshift splint" + desc = "For holding your limbs in place with duct tape and scrap metal." + icon_state = "tape-splint" + amount = 1 + splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 91626ec903..f37579ab00 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -1,386 +1,386 @@ -/* Diffrent misc types of tiles - * Contains: - * Prototype - * Grass - * Wood - * Carpet - * Blue Carpet - * Linoleum - * - * Put your stuff in fifty_stacks_tiles.dm as well. - */ - -/obj/item/stack/tile - name = "tile" - singular_name = "tile" - desc = "A non-descript floor tile" - icon = 'icons/obj/stacks.dmi' //CHOMPedit - parent obj/item/stack got edited, this puts icon back for carpets. - randpixel = 7 - w_class = ITEMSIZE_NORMAL - max_amount = 60 - drop_sound = 'sound/items/drop/axe.ogg' - pickup_sound = 'sound/items/pickup/axe.ogg' - - //crafting / welding vars - var/datum/material/material //*sigh* i guess this is how we're doing this. - var/craftable = FALSE //set to TRUE for tiles you can craft stuff from directly, like grass - var/can_weld = FALSE //set to TRUE for tiles you can reforge into their components via welding, like metal - var/welds_into = /obj/item/stack/material/steel //what you get from the welding. defaults to steel. - var/default_type = DEFAULT_WALL_MATERIAL - - var/perunit = SHEET_MATERIAL_AMOUNT //ChompEDIT - var/apply_colour //ChompEDIT - - -/obj/item/stack/tile/Initialize() - . = ..() - randpixel_xy() - if(craftable) - material = get_material_by_name("[default_type]") - if(!material) - return INITIALIZE_HINT_QDEL - if(material) //sanity check - recipes = material.get_recipes() - stacktype = material.stack_type - -/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob) - if (W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - - if(can_weld == FALSE) - to_chat("You can't reform these into their original components.") - return - - if(get_amount() < 4) - to_chat(user, "You need at least four tiles to do this.") - return - - if(WT.remove_fuel(0,user)) - new welds_into(usr.loc) - usr.update_icon() - visible_message("\The [src] is shaped by [user.name] with the welding tool.","You hear welding.") - var/obj/item/stack/tile/T = src - src = null - var/replace = (user.get_inactive_hand()==T) - T.use(4) - if (!T && replace) - user.put_in_hands(welds_into) - return TRUE - return ..() - -/* - * Grass - */ -/obj/item/stack/tile/grass - name = "grass tile" - singular_name = "grass floor tile" - desc = "A patch of grass like they often use on golf courses." - icon_state = "tile_grass" - default_type = "grass" - force = 1.0 - throwforce = 1.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - origin_tech = list(TECH_BIO = 1) - no_variants = FALSE - drop_sound = 'sound/items/drop/herb.ogg' - pickup_sound = 'sound/items/pickup/herb.ogg' - craftable = TRUE - -/obj/item/stack/tile/grass/sif - name = "sivian grass tile" - singular_name = "sivian grass floor tile" - desc = "A patch of grass like those that decorate the plains of Sif." - -/obj/item/stack/tile/grass/sif/forest - name = "sivian overgrowth tile" - singular_name = "sivian overgrowth floor tile" - desc = "A patch of dark overgrowth like those that decorate the plains of Sif." - -/obj/item/stack/tile/grass/sif/forest - name = "sivian overgrowth tile" - singular_name = "sivian overgrowth floor tile" - desc = "A patch of dark overgrowth like those that decorate the plains of Sif." - -/* - * Wood - */ -/obj/item/stack/tile/wood - name = "wood floor tile" - singular_name = "wood floor tile" - desc = "An easy to fit wooden floor tile." - icon_state = "tile-wood" - force = 1.0 - throwforce = 1.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - drop_sound = 'sound/items/drop/wooden.ogg' - pickup_sound = 'sound/items/pickup/wooden.ogg' - -/obj/item/stack/tile/wood/sif - name = "alien wood tile" - singular_name = "alien wood tile" - desc = "An easy to fit wooden floor tile. It's blue!" - icon_state = "tile-sifwood" - -/obj/item/stack/tile/wood/alt - name = "wood floor tile" - singular_name = "wood floor tile" - icon_state = "tile-wood_tile" - -/obj/item/stack/tile/wood/parquet - name = "parquet wood floor tile" - singular_name = "parquet wood floor tile" - icon_state = "tile-wood_parquet" - -/obj/item/stack/tile/wood/panel - name = "large wood floor tile" - singular_name = "large wood floor tile" - icon_state = "tile-wood_large" - -/obj/item/stack/tile/wood/tile - name = "tiled wood floor tile" - singular_name = "tiled wood floor tile" - icon_state = "tile-wood_tile" - -/obj/item/stack/tile/wood/cyborg - name = "wood floor tile synthesizer" - desc = "A device that makes wood floor tiles." - uses_charge = 1 - charge_costs = list(250) - stacktype = /obj/item/stack/tile/wood - build_type = /obj/item/stack/tile/wood - -/obj/item/stack/tile/carpet - name = "carpet" - singular_name = "carpet" - desc = "A piece of carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - force = 1.0 - throwforce = 1.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - drop_sound = 'sound/items/drop/cloth.ogg' - pickup_sound = 'sound/items/pickup/cloth.ogg' - -/obj/item/stack/tile/carpet/teal - desc = "A piece of teal carpet. It is the same size as a normal floor tile!" - icon_state = "tile-tealcarpet" - -/obj/item/stack/tile/carpet/turcarpet - desc = "A piece of turqoise carpet. It is the same size as a normal floor tile!" - icon_state = "tile-turcarpet" - -/obj/item/stack/tile/carpet/bcarpet - desc = "A piece of black diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-bcarpet" - -/obj/item/stack/tile/carpet/blucarpet - desc = "A piece of blue diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-blucarpet" - -/obj/item/stack/tile/carpet/sblucarpet - desc = "A piece of silver-blue diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-sblucarpet" - -/obj/item/stack/tile/carpet/gaycarpet - desc = "A piece of pink diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-gaycarpet" - -/obj/item/stack/tile/carpet/purcarpet - desc = "A piece of purple diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-purcarpet" - -/obj/item/stack/tile/carpet/oracarpet - desc = "A piece of orange diamond-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-oracarpet" - -/obj/item/stack/tile/carpet/brncarpet - desc = "A piece of brown ornate-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-brncarpet" - -/obj/item/stack/tile/carpet/blucarpet2 - desc = "A piece of blue ornate-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-blucarpet2" - -/obj/item/stack/tile/carpet/greencarpet - desc = "A piece of green ornate-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-greencarpet" - -/obj/item/stack/tile/carpet/purplecarpet - desc = "A piece of purple ornate-pattern carpet. It is the same size as a normal floor tile!" - icon_state = "tile-purplecarpet" - -/obj/item/stack/tile/carpet/geo - icon_state = "tile-carpet-deco" - desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/retro - icon_state = "tile-carpet-retro" - desc = "A piece of carpet with totally wicked blue space patterns. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/retro_red - icon_state = "tile-carpet-retro-red" - desc = "A piece of carpet with red-ical space patterns. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/happy - icon_state = "tile-carpet-happy" - desc = "A piece of carpet with happy patterns. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/floor - name = "floor tile" - singular_name = "floor tile" - desc = "A metal tile fit for covering a section of floor." - icon_state = "tile" - force = 6.0 - matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) - throwforce = 15.0 - throw_speed = 5 - throw_range = 20 - no_variants = FALSE - can_weld = TRUE - -/obj/item/stack/tile/floor/red - name = "red floor tile" - singular_name = "red floor tile" - color = COLOR_RED_GRAY - icon_state = "tile_white" - no_variants = FALSE - -/obj/item/stack/tile/floor/techgrey - name = "grey techfloor tile" - singular_name = "grey techfloor tile" - icon_state = "techtile_grey" - no_variants = FALSE - -/obj/item/stack/tile/floor/techgrid - name = "grid techfloor tile" - singular_name = "grid techfloor tile" - icon_state = "techtile_grid" - no_variants = FALSE - -/obj/item/stack/tile/floor/techmaint - name = "maint techfloor tile" - singular_name = "maint techfloor tile" - icon_state = "techtile_maint" - no_variants = FALSE - -/obj/item/stack/tile/floor/steel_dirty - name = "steel floor tile" - singular_name = "steel floor tile" - icon_state = "tile_steel" - matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) - welds_into = /obj/item/stack/material/plasteel - no_variants = FALSE - -/obj/item/stack/tile/floor/steel - name = "steel floor tile" - singular_name = "steel floor tile" - icon_state = "tile_steel" - matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) - welds_into = /obj/item/stack/material/plasteel - no_variants = FALSE - -/obj/item/stack/tile/floor/white - name = "white floor tile" - singular_name = "white floor tile" - icon_state = "tile_white" - matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4) - welds_into = /obj/item/stack/material/plastic - no_variants = FALSE - -/obj/item/stack/tile/floor/yellow - name = "yellow floor tile" - singular_name = "yellow floor tile" - color = COLOR_BROWN - icon_state = "tile_white" - no_variants = FALSE - -/obj/item/stack/tile/floor/dark - name = "dark floor tile" - singular_name = "dark floor tile" - icon_state = "tile_steel" - matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) - welds_into = /obj/item/stack/material/plasteel - no_variants = FALSE - -/obj/item/stack/tile/floor/freezer - name = "freezer floor tile" - singular_name = "freezer floor tile" - icon_state = "tile_freezer" - matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4) - welds_into = /obj/item/stack/material/plastic - no_variants = FALSE - -/obj/item/stack/tile/floor/cyborg - name = "floor tile synthesizer" - desc = "A device that makes floor tiles." - gender = NEUTER - matter = null - uses_charge = 1 - charge_costs = list(250) - stacktype = /obj/item/stack/tile/floor - build_type = /obj/item/stack/tile/floor - can_weld = FALSE //we're not going there - -/obj/item/stack/tile/linoleum - name = "linoleum" - singular_name = "linoleum" - desc = "A piece of linoleum. It is the same size as a normal floor tile!" - icon_state = "tile-linoleum" - force = 1.0 - throwforce = 1.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - can_weld = FALSE - -/obj/item/stack/tile/wmarble - name = "light marble tile" - singular_name = "light marble tile" - desc = "Some white marble tiles used for flooring." - icon_state = "tile-wmarble" - force = 6.0 - throwforce = 15.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - can_weld = TRUE - welds_into = /obj/item/stack/material/marble - -/obj/item/stack/tile/bmarble - name = "dark marble tile" - singular_name = "dark marble tile" - desc = "Some black marble tiles used for flooring." - icon_state = "tile-bmarble" - force = 6.0 - throwforce = 15.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - can_weld = TRUE - welds_into = /obj/item/stack/material/marble - -/obj/item/stack/tile/roofing - name = "roofing" - singular_name = "roofing" - desc = "A section of roofing material. You can use it to repair the ceiling, or expand it." - icon_state = "techtile_grid" - can_weld = FALSE //roofing can also be made from wood, so let's not open that can of worms today - -/obj/item/stack/tile/roofing/cyborg - name = "roofing synthesizer" - desc = "A device that makes roofing tiles." - uses_charge = 1 - charge_costs = list(250) - stacktype = /obj/item/stack/tile/roofing - build_type = /obj/item/stack/tile/roofing - can_weld = FALSE +/* Diffrent misc types of tiles + * Contains: + * Prototype + * Grass + * Wood + * Carpet + * Blue Carpet + * Linoleum + * + * Put your stuff in fifty_stacks_tiles.dm as well. + */ + +/obj/item/stack/tile + name = "tile" + singular_name = "tile" + desc = "A non-descript floor tile" + icon = 'icons/obj/stacks.dmi' //CHOMPedit - parent obj/item/stack got edited, this puts icon back for carpets. + randpixel = 7 + w_class = ITEMSIZE_NORMAL + max_amount = 60 + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' + + //crafting / welding vars + var/datum/material/material //*sigh* i guess this is how we're doing this. + var/craftable = FALSE //set to TRUE for tiles you can craft stuff from directly, like grass + var/can_weld = FALSE //set to TRUE for tiles you can reforge into their components via welding, like metal + var/welds_into = /obj/item/stack/material/steel //what you get from the welding. defaults to steel. + var/default_type = DEFAULT_WALL_MATERIAL + + var/perunit = SHEET_MATERIAL_AMOUNT //ChompEDIT + var/apply_colour //ChompEDIT + + +/obj/item/stack/tile/Initialize() + . = ..() + randpixel_xy() + if(craftable) + material = get_material_by_name("[default_type]") + if(!material) + return INITIALIZE_HINT_QDEL + if(material) //sanity check + recipes = material.get_recipes() + stacktype = material.stack_type + +/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob) + if (W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + + if(can_weld == FALSE) + to_chat("You can't reform these into their original components.") + return + + if(get_amount() < 4) + to_chat(user, "You need at least four tiles to do this.") + return + + if(WT.remove_fuel(0,user)) + new welds_into(usr.loc) + usr.update_icon() + visible_message("\The [src] is shaped by [user.name] with the welding tool.","You hear welding.") + var/obj/item/stack/tile/T = src + src = null + var/replace = (user.get_inactive_hand()==T) + T.use(4) + if (!T && replace) + user.put_in_hands(welds_into) + return TRUE + return ..() + +/* + * Grass + */ +/obj/item/stack/tile/grass + name = "grass tile" + singular_name = "grass floor tile" + desc = "A patch of grass like they often use on golf courses." + icon_state = "tile_grass" + default_type = "grass" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + origin_tech = list(TECH_BIO = 1) + no_variants = FALSE + drop_sound = 'sound/items/drop/herb.ogg' + pickup_sound = 'sound/items/pickup/herb.ogg' + craftable = TRUE + +/obj/item/stack/tile/grass/sif + name = "sivian grass tile" + singular_name = "sivian grass floor tile" + desc = "A patch of grass like those that decorate the plains of Sif." + +/obj/item/stack/tile/grass/sif/forest + name = "sivian overgrowth tile" + singular_name = "sivian overgrowth floor tile" + desc = "A patch of dark overgrowth like those that decorate the plains of Sif." + +/obj/item/stack/tile/grass/sif/forest + name = "sivian overgrowth tile" + singular_name = "sivian overgrowth floor tile" + desc = "A patch of dark overgrowth like those that decorate the plains of Sif." + +/* + * Wood + */ +/obj/item/stack/tile/wood + name = "wood floor tile" + singular_name = "wood floor tile" + desc = "An easy to fit wooden floor tile." + icon_state = "tile-wood" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + drop_sound = 'sound/items/drop/wooden.ogg' + pickup_sound = 'sound/items/pickup/wooden.ogg' + +/obj/item/stack/tile/wood/sif + name = "alien wood tile" + singular_name = "alien wood tile" + desc = "An easy to fit wooden floor tile. It's blue!" + icon_state = "tile-sifwood" + +/obj/item/stack/tile/wood/alt + name = "wood floor tile" + singular_name = "wood floor tile" + icon_state = "tile-wood_tile" + +/obj/item/stack/tile/wood/parquet + name = "parquet wood floor tile" + singular_name = "parquet wood floor tile" + icon_state = "tile-wood_parquet" + +/obj/item/stack/tile/wood/panel + name = "large wood floor tile" + singular_name = "large wood floor tile" + icon_state = "tile-wood_large" + +/obj/item/stack/tile/wood/tile + name = "tiled wood floor tile" + singular_name = "tiled wood floor tile" + icon_state = "tile-wood_tile" + +/obj/item/stack/tile/wood/cyborg + name = "wood floor tile synthesizer" + desc = "A device that makes wood floor tiles." + uses_charge = 1 + charge_costs = list(250) + stacktype = /obj/item/stack/tile/wood + build_type = /obj/item/stack/tile/wood + +/obj/item/stack/tile/carpet + name = "carpet" + singular_name = "carpet" + desc = "A piece of carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + drop_sound = 'sound/items/drop/cloth.ogg' + pickup_sound = 'sound/items/pickup/cloth.ogg' + +/obj/item/stack/tile/carpet/teal + desc = "A piece of teal carpet. It is the same size as a normal floor tile!" + icon_state = "tile-tealcarpet" + +/obj/item/stack/tile/carpet/turcarpet + desc = "A piece of turqoise carpet. It is the same size as a normal floor tile!" + icon_state = "tile-turcarpet" + +/obj/item/stack/tile/carpet/bcarpet + desc = "A piece of black diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-bcarpet" + +/obj/item/stack/tile/carpet/blucarpet + desc = "A piece of blue diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-blucarpet" + +/obj/item/stack/tile/carpet/sblucarpet + desc = "A piece of silver-blue diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-sblucarpet" + +/obj/item/stack/tile/carpet/gaycarpet + desc = "A piece of pink diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-gaycarpet" + +/obj/item/stack/tile/carpet/purcarpet + desc = "A piece of purple diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-purcarpet" + +/obj/item/stack/tile/carpet/oracarpet + desc = "A piece of orange diamond-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-oracarpet" + +/obj/item/stack/tile/carpet/brncarpet + desc = "A piece of brown ornate-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-brncarpet" + +/obj/item/stack/tile/carpet/blucarpet2 + desc = "A piece of blue ornate-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-blucarpet2" + +/obj/item/stack/tile/carpet/greencarpet + desc = "A piece of green ornate-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-greencarpet" + +/obj/item/stack/tile/carpet/purplecarpet + desc = "A piece of purple ornate-pattern carpet. It is the same size as a normal floor tile!" + icon_state = "tile-purplecarpet" + +/obj/item/stack/tile/carpet/geo + icon_state = "tile-carpet-deco" + desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/retro + icon_state = "tile-carpet-retro" + desc = "A piece of carpet with totally wicked blue space patterns. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/retro_red + icon_state = "tile-carpet-retro-red" + desc = "A piece of carpet with red-ical space patterns. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/happy + icon_state = "tile-carpet-happy" + desc = "A piece of carpet with happy patterns. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/floor + name = "floor tile" + singular_name = "floor tile" + desc = "A metal tile fit for covering a section of floor." + icon_state = "tile" + force = 6.0 + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) + throwforce = 15.0 + throw_speed = 5 + throw_range = 20 + no_variants = FALSE + can_weld = TRUE + +/obj/item/stack/tile/floor/red + name = "red floor tile" + singular_name = "red floor tile" + color = COLOR_RED_GRAY + icon_state = "tile_white" + no_variants = FALSE + +/obj/item/stack/tile/floor/techgrey + name = "grey techfloor tile" + singular_name = "grey techfloor tile" + icon_state = "techtile_grey" + no_variants = FALSE + +/obj/item/stack/tile/floor/techgrid + name = "grid techfloor tile" + singular_name = "grid techfloor tile" + icon_state = "techtile_grid" + no_variants = FALSE + +/obj/item/stack/tile/floor/techmaint + name = "maint techfloor tile" + singular_name = "maint techfloor tile" + icon_state = "techtile_maint" + no_variants = FALSE + +/obj/item/stack/tile/floor/steel_dirty + name = "steel floor tile" + singular_name = "steel floor tile" + icon_state = "tile_steel" + matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) + welds_into = /obj/item/stack/material/plasteel + no_variants = FALSE + +/obj/item/stack/tile/floor/steel + name = "steel floor tile" + singular_name = "steel floor tile" + icon_state = "tile_steel" + matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) + welds_into = /obj/item/stack/material/plasteel + no_variants = FALSE + +/obj/item/stack/tile/floor/white + name = "white floor tile" + singular_name = "white floor tile" + icon_state = "tile_white" + matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4) + welds_into = /obj/item/stack/material/plastic + no_variants = FALSE + +/obj/item/stack/tile/floor/yellow + name = "yellow floor tile" + singular_name = "yellow floor tile" + color = COLOR_BROWN + icon_state = "tile_white" + no_variants = FALSE + +/obj/item/stack/tile/floor/dark + name = "dark floor tile" + singular_name = "dark floor tile" + icon_state = "tile_steel" + matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4) + welds_into = /obj/item/stack/material/plasteel + no_variants = FALSE + +/obj/item/stack/tile/floor/freezer + name = "freezer floor tile" + singular_name = "freezer floor tile" + icon_state = "tile_freezer" + matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4) + welds_into = /obj/item/stack/material/plastic + no_variants = FALSE + +/obj/item/stack/tile/floor/cyborg + name = "floor tile synthesizer" + desc = "A device that makes floor tiles." + gender = NEUTER + matter = null + uses_charge = 1 + charge_costs = list(250) + stacktype = /obj/item/stack/tile/floor + build_type = /obj/item/stack/tile/floor + can_weld = FALSE //we're not going there + +/obj/item/stack/tile/linoleum + name = "linoleum" + singular_name = "linoleum" + desc = "A piece of linoleum. It is the same size as a normal floor tile!" + icon_state = "tile-linoleum" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + can_weld = FALSE + +/obj/item/stack/tile/wmarble + name = "light marble tile" + singular_name = "light marble tile" + desc = "Some white marble tiles used for flooring." + icon_state = "tile-wmarble" + force = 6.0 + throwforce = 15.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + can_weld = TRUE + welds_into = /obj/item/stack/material/marble + +/obj/item/stack/tile/bmarble + name = "dark marble tile" + singular_name = "dark marble tile" + desc = "Some black marble tiles used for flooring." + icon_state = "tile-bmarble" + force = 6.0 + throwforce = 15.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + can_weld = TRUE + welds_into = /obj/item/stack/material/marble + +/obj/item/stack/tile/roofing + name = "roofing" + singular_name = "roofing" + desc = "A section of roofing material. You can use it to repair the ceiling, or expand it." + icon_state = "techtile_grid" + can_weld = FALSE //roofing can also be made from wood, so let's not open that can of worms today + +/obj/item/stack/tile/roofing/cyborg + name = "roofing synthesizer" + desc = "A device that makes roofing tiles." + uses_charge = 1 + charge_costs = list(250) + stacktype = /obj/item/stack/tile/roofing + build_type = /obj/item/stack/tile/roofing + can_weld = FALSE diff --git a/code/game/objects/items/stacks/tiles/tile_types_ch.dm b/code/game/objects/items/stacks/tiles/tile_types_ch.dm index 447b6735dc..9f66a9b54e 100644 --- a/code/game/objects/items/stacks/tiles/tile_types_ch.dm +++ b/code/game/objects/items/stacks/tiles/tile_types_ch.dm @@ -1,132 +1,132 @@ -// Procs to allow tiles to have material variables, consider unifying this on stack parent? -// Uncertain if any of these procs can result in unforseen issues with tile objects, if there are bugs with tiles check if any of these procs are the cause - -//^Does the bug this comment refers to even exist anymore. idk. - -/obj/item/stack/tile/New() - ..() - - if(!default_type) - default_type = DEFAULT_WALL_MATERIAL - material = get_material_by_name("[default_type]") - if(!material) - qdel(src) - return 0 - - //recipes = material.get_recipes() No. - stacktype = material.stack_type - if(islist(material.stack_origin_tech)) - origin_tech = material.stack_origin_tech.Copy() - - if(apply_colour) - color = material.icon_colour - - if(!material.conductive) - flags |= NOCONDUCT - - //matter = material.get_matter() Bad. - return 1 - - -/obj/item/stack/material/get_material() - return material - -/* - * Carpets - */ -/obj/item/stack/tile/carpet - name = "red carpet" - singular_name = "red carpet" - desc = "A piece of red carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - force = 1.0 - throwforce = 1.0 - throw_speed = 5 - throw_range = 20 - flags = 0 - no_variants = FALSE - default_type = MAT_CARPET - -/obj/item/stack/tile/carpet/teal - name = "teal carpet" - singular_name = "teal carpet" - desc = "A piece of teal carpet. It is the same size as a normal floor tile!" - icon_state = "tile-tealcarpet" - default_type = MAT_CARPET_TEAL - -/obj/item/stack/tile/carpet/bcarpet - name = "black carpet" - singular_name = "black carpet" - desc = "A piece of black carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_BLACK - -/obj/item/stack/tile/carpet/blucarpet - name = "blue carpet" - singular_name = "blue carpet" - desc = "A piece of blue carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_BLUE - -/obj/item/stack/tile/carpet/turcarpet - name = "turquoise carpet" - singular_name = "turquoise carpet" - desc = "A piece of turquoise carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_TURQUOISE - -/obj/item/stack/tile/carpet/sblucarpet - name = "silver blue carpet" - singular_name = "silver blue carpet" - desc = "A piece of silver blue carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_SILVERBLUE - -/obj/item/stack/tile/carpet/gaycarpet - name = "clown carpet" - singular_name = "clown carpet" - desc = "A piece of clown carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_PINK - -/obj/item/stack/tile/carpet/purcarpet - name = "purple carpet" - singular_name = "purple carpet" - desc = "A piece of purple carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_PURPLE - -/obj/item/stack/tile/carpet/oracarpet - name = "orange carpet" - singular_name = "orange carpet" - desc = "A piece of orange carpet. It is the same size as a normal floor tile!" - icon_state = "tile-carpet" - default_type = MAT_CARPET_ORANGE - -/obj/item/stack/tile/carpet/brncarpet - icon_state = "tile-carpet" - -/obj/item/stack/tile/carpet/blucarpet2 - icon_state = "tile-carpet" - -/obj/item/stack/tile/carpet/greencarpet - icon_state = "tile-carpet" - -/obj/item/stack/tile/carpet/purplecarpet - icon_state = "tile-carpet" - -/obj/item/stack/tile/carpet/geo - icon_state = "tile-carpet-deco" - desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/retro - icon_state = "tile-carpet-retro" - desc = "A piece of carpet with totally wicked blue space patterns. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/retro_red - icon_state = "tile-carpet-retro-red" - desc = "A piece of carpet with red-ical space patterns. It is the same size as a normal floor tile!" - -/obj/item/stack/tile/carpet/happy - icon_state = "tile-carpet-happy" - desc = "A piece of carpet with happy patterns. It is the same size as a normal floor tile!" +// Procs to allow tiles to have material variables, consider unifying this on stack parent? +// Uncertain if any of these procs can result in unforseen issues with tile objects, if there are bugs with tiles check if any of these procs are the cause + +//^Does the bug this comment refers to even exist anymore. idk. + +/obj/item/stack/tile/New() + ..() + + if(!default_type) + default_type = DEFAULT_WALL_MATERIAL + material = get_material_by_name("[default_type]") + if(!material) + qdel(src) + return 0 + + //recipes = material.get_recipes() No. + stacktype = material.stack_type + if(islist(material.stack_origin_tech)) + origin_tech = material.stack_origin_tech.Copy() + + if(apply_colour) + color = material.icon_colour + + if(!material.conductive) + flags |= NOCONDUCT + + //matter = material.get_matter() Bad. + return 1 + + +/obj/item/stack/material/get_material() + return material + +/* + * Carpets + */ +/obj/item/stack/tile/carpet + name = "red carpet" + singular_name = "red carpet" + desc = "A piece of red carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + default_type = MAT_CARPET + +/obj/item/stack/tile/carpet/teal + name = "teal carpet" + singular_name = "teal carpet" + desc = "A piece of teal carpet. It is the same size as a normal floor tile!" + icon_state = "tile-tealcarpet" + default_type = MAT_CARPET_TEAL + +/obj/item/stack/tile/carpet/bcarpet + name = "black carpet" + singular_name = "black carpet" + desc = "A piece of black carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_BLACK + +/obj/item/stack/tile/carpet/blucarpet + name = "blue carpet" + singular_name = "blue carpet" + desc = "A piece of blue carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_BLUE + +/obj/item/stack/tile/carpet/turcarpet + name = "turquoise carpet" + singular_name = "turquoise carpet" + desc = "A piece of turquoise carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_TURQUOISE + +/obj/item/stack/tile/carpet/sblucarpet + name = "silver blue carpet" + singular_name = "silver blue carpet" + desc = "A piece of silver blue carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_SILVERBLUE + +/obj/item/stack/tile/carpet/gaycarpet + name = "clown carpet" + singular_name = "clown carpet" + desc = "A piece of clown carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_PINK + +/obj/item/stack/tile/carpet/purcarpet + name = "purple carpet" + singular_name = "purple carpet" + desc = "A piece of purple carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_PURPLE + +/obj/item/stack/tile/carpet/oracarpet + name = "orange carpet" + singular_name = "orange carpet" + desc = "A piece of orange carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_ORANGE + +/obj/item/stack/tile/carpet/brncarpet + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/blucarpet2 + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/greencarpet + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/purplecarpet + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/geo + icon_state = "tile-carpet-deco" + desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/retro + icon_state = "tile-carpet-retro" + desc = "A piece of carpet with totally wicked blue space patterns. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/retro_red + icon_state = "tile-carpet-retro-red" + desc = "A piece of carpet with red-ical space patterns. It is the same size as a normal floor tile!" + +/obj/item/stack/tile/carpet/happy + icon_state = "tile-carpet-happy" + desc = "A piece of carpet with happy patterns. It is the same size as a normal floor tile!" diff --git a/code/game/objects/items/toys/toys_ch.dm b/code/game/objects/items/toys/toys_ch.dm index 0aa911c56e..bdccfb889c 100644 --- a/code/game/objects/items/toys/toys_ch.dm +++ b/code/game/objects/items/toys/toys_ch.dm @@ -1,25 +1,25 @@ -/obj/item/toy/figure/bounty_hunter - name = "Space bounty hunter action figure" - desc = "A \"Space Life\" brand bounty hunter action figure." - icon = 'icons/obj/toy_ch.dmi' - icon_state = "hunter" - toysay = "The last greytide is in captivity. The station is at peace." - -/obj/item/toy/sif - name = "Sif planet model" - desc = "A \"Space Life\" brand planet model of Sif, it's oddly cold to the touch." - icon = 'icons/obj/toy_ch.dmi' - icon_state = "sif" - -/obj/item/toy/figure/station - name = "NLS Southern Cross action figure" - desc = "A \"Space Life\" brand figure of the NLS Southern Cross, the station you work in." - icon = 'icons/obj/toy_ch.dmi' - icon_state = "station" - toysay = "Attention! Alert level elevated to blue." - -/obj/item/toy/plushie/green_fox - name = "green fox plushie" - icon = 'icons/obj/toy_ch.dmi' - icon_state = "greenfox" +/obj/item/toy/figure/bounty_hunter + name = "Space bounty hunter action figure" + desc = "A \"Space Life\" brand bounty hunter action figure." + icon = 'icons/obj/toy_ch.dmi' + icon_state = "hunter" + toysay = "The last greytide is in captivity. The station is at peace." + +/obj/item/toy/sif + name = "Sif planet model" + desc = "A \"Space Life\" brand planet model of Sif, it's oddly cold to the touch." + icon = 'icons/obj/toy_ch.dmi' + icon_state = "sif" + +/obj/item/toy/figure/station + name = "NLS Southern Cross action figure" + desc = "A \"Space Life\" brand figure of the NLS Southern Cross, the station you work in." + icon = 'icons/obj/toy_ch.dmi' + icon_state = "station" + toysay = "Attention! Alert level elevated to blue." + +/obj/item/toy/plushie/green_fox + name = "green fox plushie" + icon = 'icons/obj/toy_ch.dmi' + icon_state = "greenfox" pokephrase = "Weh!" \ No newline at end of file diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index ba98a00251..d2fd489351 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -1,491 +1,491 @@ -//Items labled as 'trash' for the trash bag. -//TODO: Make this an item var or something... - -//Added by Jack Rost -/obj/item/trash - icon = 'icons/obj/trash.dmi' - w_class = ITEMSIZE_SMALL - desc = "This is rubbish." - drop_sound = 'sound/items/drop/wrapper.ogg' - pickup_sound = 'sound/items/pickup/wrapper.ogg' - matter = list(MAT_STEEL = 30) - var/age = 0 - -/obj/item/trash/New(var/newloc, var/_age) - ..(newloc) - if(!isnull(_age)) - age = _age - -/obj/item/trash/Initialize(mapload) - if(!mapload || !config.persistence_ignore_mapload) - SSpersistence.track_value(src, /datum/persistent/filth/trash) - . = ..() - -/obj/item/trash/Destroy() - SSpersistence.forget_value(src, /datum/persistent/filth/trash) - . = ..() - -/obj/item/trash/raisins - name = "\improper 4no raisins" - icon_state = "4no_raisins" - -/obj/item/trash/candy - name = "hard candy wrapper" - icon_state = "candy" - -/obj/item/trash/candy/gums - name = "gummy candy bag" - icon_state = "candy_gums" - -/obj/item/trash/candy/proteinbar - name = "protein bar wrapper" - icon_state = "proteinbar" - -/obj/item/trash/candy/fruitbar - name = "fruit bar wrapper" - icon_state = "fruitbar" - -/obj/item/trash/cheesie - name = "\improper Cheesie Honkers bag" - icon_state = "cheesie_honkers" - -/obj/item/trash/chips - name = "chips bag" - icon_state = "chips" - -/obj/item/trash/chips/bbq - name = "bbq chips bag" - icon_state = "chips_bbq" - -/obj/item/trash/chips/snv - name = "salt & vinegar chips bag" - icon_state = "chips_snv" - -/obj/item/trash/cookiesnack - name = "\improper Carps Ahoy! miniature cookies packet" - icon_state = "cookiesnack" - -/obj/item/trash/popcorn - name = "popcorn bag" - icon_state = "popcorn" - -/obj/item/trash/tuna - name = "fish flake packet" - icon_state = "tuna" - -/obj/item/trash/sosjerky - name = "Scaredy's Private Reserve Beef Jerky wrapper" - icon_state = "sosjerky" - -/obj/item/trash/unajerky - name = "Moghes Imported Sissalik Jerky tin" - icon_state = "unathitinred" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/syndi_cakes - name = "syndi cakes box" - icon_state = "syndi_cakes" - -/obj/item/trash/waffles - name = "waffles tray" - icon_state = "waffles" - -/obj/item/trash/plate - name = "plate" - icon_state = "plate" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/asian_bowl - name = "asian bowl" - icon_state = "asian_bowl" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/snack_bowl - name = "snack bowl" - icon_state = "snack_bowl" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/small_bowl - name = "small bowl" - icon_state = "small_bowl" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/pistachios - name = "pistachios packet" - icon_state = "pistachios_pack" - -/obj/item/trash/semki - name = "semki packet" - icon_state = "semki_pack" - -/obj/item/trash/koisbar - name = "candy wrapper" - icon_state = "koisbar" - -/obj/item/trash/kokobar - name = "candy wrapper" - icon_state = "kokobar" - -/obj/item/trash/skrellsnax - name = "skrellsnax packet" - icon_state = "skrellsnacks" - -/obj/item/trash/gumpack - name = "gum packet" - icon_state = "gum_pack" - -/obj/item/trash/admints - name = "mint wrapper" - icon_state = "admint_pack" - -/obj/item/trash/coffee - name = "empty cup" - icon_state = "coffee_vended" - drop_sound = 'sound/items/drop/papercup.ogg' - pickup_sound = 'sound/items/pickup/papercup.ogg' - -/obj/item/trash/ramen - name = "cup ramen" - icon_state = "ramen" - drop_sound = 'sound/items/drop/papercup.ogg' - pickup_sound = 'sound/items/pickup/papercup.ogg' - -/obj/item/trash/tray - name = "tray" - icon_state = "tray" - drop_sound = 'sound/items/trayhit1.ogg' - -/obj/item/trash/candle - name = "candle" - icon = 'icons/obj/candle.dmi' - icon_state = "candle4" - drop_sound = 'sound/items/drop/gloves.ogg' - pickup_sound = 'sound/items/pickup/gloves.ogg' - -/obj/item/trash/liquidfood - name = "\improper \"LiquidFood\" ration packet" - icon_state = "liquidfood" - -/obj/item/trash/liquidprotein - name = "\improper \"LiquidProtein\" ration packet" - icon_state = "liquidprotein" - -/obj/item/trash/liquidvitamin - name = "\improper \"VitaPaste\" ration packet" - icon_state = "liquidvitamin" - -/obj/item/trash/tastybread - name = "bread tube wrapper" - icon_state = "tastybread" - -// Aurora Food Port -/obj/item/trash/brownies - name = "brownie tray" - icon_state = "brownies" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/snacktray - name = "snacktray" - icon_state = "snacktray" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/dipbowl - name = "dip bowl" - icon_state = "dipbowl" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/chipbasket - name = "empty chip basket" - icon_state = "chipbasket_empty" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/trash/spitgum - name = "old gum" - desc = "A disgusting chewed up wad of gum." - icon = 'icons/inventory/face/item.dmi' - icon_state = "spit-gum" - drop_sound = 'sound/items/drop/flesh.ogg' - pickup_sound = 'sound/items/pickup/flesh.ogg' - -/obj/item/trash/lollibutt - name = "lollipop stick" - desc = "A lollipop stick devoid of pop." - icon = 'icons/inventory/face/item.dmi' - icon_state = "pop-stick" - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - -/obj/item/trash/spitwad - name = "spit wad" - desc = "A disgusting spitwad." - icon = 'icons/inventory/face/item.dmi' - icon_state = "spit-chew" - drop_sound = 'sound/items/drop/flesh.ogg' - pickup_sound = 'sound/items/pickup/flesh.ogg' - slot_flags = SLOT_EARS | SLOT_MASK - -/obj/item/trash/attack(mob/M as mob, mob/living/user as mob) - return - - -/obj/item/trash/beef - name = "empty beef can" - icon_state = "beef" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/beans - name = "empty bean can" - icon_state = "beans" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/tomato - name = "empty tomato soup can" - icon_state = "tomato" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/spinach - name = "empty spinach can" - icon_state = "spinach" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/fishegg - name = "empty fisheggs can" - icon_state = "fisheggs" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/carpegg - name = "empty carpeggs can" - icon_state = "carpeggs" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/ntbeans - name = "empty baked bean can" - icon_state = "ntbeans" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/salo - name = "salo pack" - icon_state = "pigfat" - -/obj/item/trash/croutons - name = "suhariki pack" - icon_state = "croutons" - -/obj/item/trash/squid - name = "calamari pack" - icon_state = "squid" - -/obj/item/trash/driedfish - name = "vobla pack" - icon_state = "driedfish" - -/obj/item/trash/lunacakewrap - name = "cake wrapper" - icon_state = "cakewrap" - -/obj/item/trash/mochicakewrap - name = "cake wrapper" - icon_state = "mochicakewrap" - -/obj/item/trash/mooncakewrap - name = "cake wrapper" - icon_state = "mooncakewrap" - -/obj/item/trash/tidegobs - name = "tide gob bag" - icon_state = "tidegobs" - -/obj/item/trash/saturno - name = "\improper saturn-Os bag" - icon_state = "saturn0s" - -/obj/item/trash/jupiter - name = "gello cup" - icon_state = "jupiter" - -/obj/item/trash/pluto - name = "rod bag" - icon_state = "pluto" - -/obj/item/trash/venus - name = "hot cakes bag" - icon_state = "venus" - -/obj/item/trash/mars - name = "frouka box" - icon_state = "mars" - -/obj/item/trash/oort - name = "oort rock bag" - icon_state = "oort" - -/obj/item/trash/weebonuts - name = "red alert nuts bag" - icon_state = "weebonuts" - -/obj/item/trash/stick - name = "stick" - desc = "a stick from some snack or other food item, not even useful as crafting material." - icon_state = "stick" - -/obj/item/trash/maps - name = "empty MAPS can" - icon_state = "maps" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/spacer_cake_wrap - name = "snack cake wrapper" - icon_state = "spacercake_wrap" - -/obj/item/trash/sun_snax - name = "sun snax bag" - icon_state = "sun_snax" - -/obj/item/trash/wasabi_peas - name = "wasabi peas bag" - icon_state = "wasabi_peas" - -/obj/item/trash/namagashi - name = "namagashi bag" - icon_state = "namagashi" - -/obj/item/trash/pocky - name = "pocky bag" - icon_state = "pocky" - -/obj/item/trash/appleberry - name = "appleberry can" - icon_state = "appleberry" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/hakarl - name = "\improper Indigo Co. Hákarl bag" - icon_state = "hakarl" - -/obj/item/trash/pretzel - name = "\improper Value Pretzel Snack" - icon_state = "pretzel" - -/obj/item/trash/sweetration - name = "desert ration bag" - icon_state = "baseration" - -/obj/item/trash/genration - name = "generic ration bag" - icon_state = "genration" - -/obj/item/trash/meatration - name = "meat ration bag" - icon_state = "meatration" - -/obj/item/trash/vegration - name = "veggie ration bag" - icon_state = "vegration" - -/obj/item/trash/tgmc_mre - name = "\improper CRS ration bag" - icon_state = "tgmc_mre_trash" - -/obj/item/trash/smolburger - name = "burger packaging" - icon_state = "smolburger" - -/obj/item/trash/smolhotdog - name = "hotdog packaging" - icon_state = "smolhotdog" - -/obj/item/trash/smolburrito - name = "burrito packaging" - icon_state = "smolburrito" - -/obj/item/trash/candybowl - name = "candy bowl" - icon_state = "candy_bowl" - -/obj/item/trash/brainzsnax - name = "\improper BrainzSnax can" - icon_state = "brainzsnax" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - -/obj/item/trash/brainzsnaxred - name = "\improper BrainzSnax RED can" - icon_state = "brainzsnaxred" - drop_sound = 'sound/items/drop/soda.ogg' - pickup_sound = 'sound/items/pickup/soda.ogg' - - -/obj/item/trash/pasty - name = "pasty packaging" - icon_state = "pasty" - -/obj/item/trash/sausageroll - name = "sausage roll packaging" - icon_state = "sausageroll" - -/obj/item/trash/scotchegg - name = "scotch egg packaging" - icon_state = "scotchegg" - -/obj/item/trash/porkpie - name = "pork pie packaging" - icon_state = "porkpie" - -//Candy Bars (1-10) -/obj/item/trash/candy/cb01 - name = "\improper Tau Ceti Bar wrapper" - icon_state = "cb01" - -/obj/item/trash/candy/cb02 - name = "\improper Hundred-Thousand Thaler Bar wrapper" - icon_state = "cb02" - -/obj/item/trash/candy/cb03 - name = "\improper Lars' Saltlakris wrapper" - icon_state = "cb03" - -/obj/item/trash/candy/cb04 - name = "\improper Aerostat Bar wrapper" - icon_state = "cb04" - -/obj/item/trash/candy/cb05 - name = "\improper Andromeda Bar wrapper" - icon_state = "cb05" - -/obj/item/trash/candy/cb06 - name = "\improper Mocha Crunch wrapper" - icon_state = "cb06" - -/obj/item/trash/candy/cb07 - name = "\improper TaroMilk Bar wrapper" - icon_state = "cb07" - -/obj/item/trash/candy/cb08 - name = "\improper Cronk Bar wrapper" - icon_state = "cb08" - -/obj/item/trash/candy/cb09 - name = "\improper Kaju Mamma! Bar wrapper" - icon_state = "cb09" - -/obj/item/trash/candy/cb10 - name = "\improper Shantak Bar wrapper" +//Items labled as 'trash' for the trash bag. +//TODO: Make this an item var or something... + +//Added by Jack Rost +/obj/item/trash + icon = 'icons/obj/trash.dmi' + w_class = ITEMSIZE_SMALL + desc = "This is rubbish." + drop_sound = 'sound/items/drop/wrapper.ogg' + pickup_sound = 'sound/items/pickup/wrapper.ogg' + matter = list(MAT_STEEL = 30) + var/age = 0 + +/obj/item/trash/New(var/newloc, var/_age) + ..(newloc) + if(!isnull(_age)) + age = _age + +/obj/item/trash/Initialize(mapload) + if(!mapload || !config.persistence_ignore_mapload) + SSpersistence.track_value(src, /datum/persistent/filth/trash) + . = ..() + +/obj/item/trash/Destroy() + SSpersistence.forget_value(src, /datum/persistent/filth/trash) + . = ..() + +/obj/item/trash/raisins + name = "\improper 4no raisins" + icon_state = "4no_raisins" + +/obj/item/trash/candy + name = "hard candy wrapper" + icon_state = "candy" + +/obj/item/trash/candy/gums + name = "gummy candy bag" + icon_state = "candy_gums" + +/obj/item/trash/candy/proteinbar + name = "protein bar wrapper" + icon_state = "proteinbar" + +/obj/item/trash/candy/fruitbar + name = "fruit bar wrapper" + icon_state = "fruitbar" + +/obj/item/trash/cheesie + name = "\improper Cheesie Honkers bag" + icon_state = "cheesie_honkers" + +/obj/item/trash/chips + name = "chips bag" + icon_state = "chips" + +/obj/item/trash/chips/bbq + name = "bbq chips bag" + icon_state = "chips_bbq" + +/obj/item/trash/chips/snv + name = "salt & vinegar chips bag" + icon_state = "chips_snv" + +/obj/item/trash/cookiesnack + name = "\improper Carps Ahoy! miniature cookies packet" + icon_state = "cookiesnack" + +/obj/item/trash/popcorn + name = "popcorn bag" + icon_state = "popcorn" + +/obj/item/trash/tuna + name = "fish flake packet" + icon_state = "tuna" + +/obj/item/trash/sosjerky + name = "Scaredy's Private Reserve Beef Jerky wrapper" + icon_state = "sosjerky" + +/obj/item/trash/unajerky + name = "Moghes Imported Sissalik Jerky tin" + icon_state = "unathitinred" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/syndi_cakes + name = "syndi cakes box" + icon_state = "syndi_cakes" + +/obj/item/trash/waffles + name = "waffles tray" + icon_state = "waffles" + +/obj/item/trash/plate + name = "plate" + icon_state = "plate" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/asian_bowl + name = "asian bowl" + icon_state = "asian_bowl" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/snack_bowl + name = "snack bowl" + icon_state = "snack_bowl" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/small_bowl + name = "small bowl" + icon_state = "small_bowl" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/pistachios + name = "pistachios packet" + icon_state = "pistachios_pack" + +/obj/item/trash/semki + name = "semki packet" + icon_state = "semki_pack" + +/obj/item/trash/koisbar + name = "candy wrapper" + icon_state = "koisbar" + +/obj/item/trash/kokobar + name = "candy wrapper" + icon_state = "kokobar" + +/obj/item/trash/skrellsnax + name = "skrellsnax packet" + icon_state = "skrellsnacks" + +/obj/item/trash/gumpack + name = "gum packet" + icon_state = "gum_pack" + +/obj/item/trash/admints + name = "mint wrapper" + icon_state = "admint_pack" + +/obj/item/trash/coffee + name = "empty cup" + icon_state = "coffee_vended" + drop_sound = 'sound/items/drop/papercup.ogg' + pickup_sound = 'sound/items/pickup/papercup.ogg' + +/obj/item/trash/ramen + name = "cup ramen" + icon_state = "ramen" + drop_sound = 'sound/items/drop/papercup.ogg' + pickup_sound = 'sound/items/pickup/papercup.ogg' + +/obj/item/trash/tray + name = "tray" + icon_state = "tray" + drop_sound = 'sound/items/trayhit1.ogg' + +/obj/item/trash/candle + name = "candle" + icon = 'icons/obj/candle.dmi' + icon_state = "candle4" + drop_sound = 'sound/items/drop/gloves.ogg' + pickup_sound = 'sound/items/pickup/gloves.ogg' + +/obj/item/trash/liquidfood + name = "\improper \"LiquidFood\" ration packet" + icon_state = "liquidfood" + +/obj/item/trash/liquidprotein + name = "\improper \"LiquidProtein\" ration packet" + icon_state = "liquidprotein" + +/obj/item/trash/liquidvitamin + name = "\improper \"VitaPaste\" ration packet" + icon_state = "liquidvitamin" + +/obj/item/trash/tastybread + name = "bread tube wrapper" + icon_state = "tastybread" + +// Aurora Food Port +/obj/item/trash/brownies + name = "brownie tray" + icon_state = "brownies" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/snacktray + name = "snacktray" + icon_state = "snacktray" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/dipbowl + name = "dip bowl" + icon_state = "dipbowl" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/chipbasket + name = "empty chip basket" + icon_state = "chipbasket_empty" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/trash/spitgum + name = "old gum" + desc = "A disgusting chewed up wad of gum." + icon = 'icons/inventory/face/item.dmi' + icon_state = "spit-gum" + drop_sound = 'sound/items/drop/flesh.ogg' + pickup_sound = 'sound/items/pickup/flesh.ogg' + +/obj/item/trash/lollibutt + name = "lollipop stick" + desc = "A lollipop stick devoid of pop." + icon = 'icons/inventory/face/item.dmi' + icon_state = "pop-stick" + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + +/obj/item/trash/spitwad + name = "spit wad" + desc = "A disgusting spitwad." + icon = 'icons/inventory/face/item.dmi' + icon_state = "spit-chew" + drop_sound = 'sound/items/drop/flesh.ogg' + pickup_sound = 'sound/items/pickup/flesh.ogg' + slot_flags = SLOT_EARS | SLOT_MASK + +/obj/item/trash/attack(mob/M as mob, mob/living/user as mob) + return + + +/obj/item/trash/beef + name = "empty beef can" + icon_state = "beef" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/beans + name = "empty bean can" + icon_state = "beans" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/tomato + name = "empty tomato soup can" + icon_state = "tomato" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/spinach + name = "empty spinach can" + icon_state = "spinach" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/fishegg + name = "empty fisheggs can" + icon_state = "fisheggs" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/carpegg + name = "empty carpeggs can" + icon_state = "carpeggs" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/ntbeans + name = "empty baked bean can" + icon_state = "ntbeans" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/salo + name = "salo pack" + icon_state = "pigfat" + +/obj/item/trash/croutons + name = "suhariki pack" + icon_state = "croutons" + +/obj/item/trash/squid + name = "calamari pack" + icon_state = "squid" + +/obj/item/trash/driedfish + name = "vobla pack" + icon_state = "driedfish" + +/obj/item/trash/lunacakewrap + name = "cake wrapper" + icon_state = "cakewrap" + +/obj/item/trash/mochicakewrap + name = "cake wrapper" + icon_state = "mochicakewrap" + +/obj/item/trash/mooncakewrap + name = "cake wrapper" + icon_state = "mooncakewrap" + +/obj/item/trash/tidegobs + name = "tide gob bag" + icon_state = "tidegobs" + +/obj/item/trash/saturno + name = "\improper saturn-Os bag" + icon_state = "saturn0s" + +/obj/item/trash/jupiter + name = "gello cup" + icon_state = "jupiter" + +/obj/item/trash/pluto + name = "rod bag" + icon_state = "pluto" + +/obj/item/trash/venus + name = "hot cakes bag" + icon_state = "venus" + +/obj/item/trash/mars + name = "frouka box" + icon_state = "mars" + +/obj/item/trash/oort + name = "oort rock bag" + icon_state = "oort" + +/obj/item/trash/weebonuts + name = "red alert nuts bag" + icon_state = "weebonuts" + +/obj/item/trash/stick + name = "stick" + desc = "a stick from some snack or other food item, not even useful as crafting material." + icon_state = "stick" + +/obj/item/trash/maps + name = "empty MAPS can" + icon_state = "maps" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/spacer_cake_wrap + name = "snack cake wrapper" + icon_state = "spacercake_wrap" + +/obj/item/trash/sun_snax + name = "sun snax bag" + icon_state = "sun_snax" + +/obj/item/trash/wasabi_peas + name = "wasabi peas bag" + icon_state = "wasabi_peas" + +/obj/item/trash/namagashi + name = "namagashi bag" + icon_state = "namagashi" + +/obj/item/trash/pocky + name = "pocky bag" + icon_state = "pocky" + +/obj/item/trash/appleberry + name = "appleberry can" + icon_state = "appleberry" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/hakarl + name = "\improper Indigo Co. Hákarl bag" + icon_state = "hakarl" + +/obj/item/trash/pretzel + name = "\improper Value Pretzel Snack" + icon_state = "pretzel" + +/obj/item/trash/sweetration + name = "desert ration bag" + icon_state = "baseration" + +/obj/item/trash/genration + name = "generic ration bag" + icon_state = "genration" + +/obj/item/trash/meatration + name = "meat ration bag" + icon_state = "meatration" + +/obj/item/trash/vegration + name = "veggie ration bag" + icon_state = "vegration" + +/obj/item/trash/tgmc_mre + name = "\improper CRS ration bag" + icon_state = "tgmc_mre_trash" + +/obj/item/trash/smolburger + name = "burger packaging" + icon_state = "smolburger" + +/obj/item/trash/smolhotdog + name = "hotdog packaging" + icon_state = "smolhotdog" + +/obj/item/trash/smolburrito + name = "burrito packaging" + icon_state = "smolburrito" + +/obj/item/trash/candybowl + name = "candy bowl" + icon_state = "candy_bowl" + +/obj/item/trash/brainzsnax + name = "\improper BrainzSnax can" + icon_state = "brainzsnax" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + +/obj/item/trash/brainzsnaxred + name = "\improper BrainzSnax RED can" + icon_state = "brainzsnaxred" + drop_sound = 'sound/items/drop/soda.ogg' + pickup_sound = 'sound/items/pickup/soda.ogg' + + +/obj/item/trash/pasty + name = "pasty packaging" + icon_state = "pasty" + +/obj/item/trash/sausageroll + name = "sausage roll packaging" + icon_state = "sausageroll" + +/obj/item/trash/scotchegg + name = "scotch egg packaging" + icon_state = "scotchegg" + +/obj/item/trash/porkpie + name = "pork pie packaging" + icon_state = "porkpie" + +//Candy Bars (1-10) +/obj/item/trash/candy/cb01 + name = "\improper Tau Ceti Bar wrapper" + icon_state = "cb01" + +/obj/item/trash/candy/cb02 + name = "\improper Hundred-Thousand Thaler Bar wrapper" + icon_state = "cb02" + +/obj/item/trash/candy/cb03 + name = "\improper Lars' Saltlakris wrapper" + icon_state = "cb03" + +/obj/item/trash/candy/cb04 + name = "\improper Aerostat Bar wrapper" + icon_state = "cb04" + +/obj/item/trash/candy/cb05 + name = "\improper Andromeda Bar wrapper" + icon_state = "cb05" + +/obj/item/trash/candy/cb06 + name = "\improper Mocha Crunch wrapper" + icon_state = "cb06" + +/obj/item/trash/candy/cb07 + name = "\improper TaroMilk Bar wrapper" + icon_state = "cb07" + +/obj/item/trash/candy/cb08 + name = "\improper Cronk Bar wrapper" + icon_state = "cb08" + +/obj/item/trash/candy/cb09 + name = "\improper Kaju Mamma! Bar wrapper" + icon_state = "cb09" + +/obj/item/trash/candy/cb10 + name = "\improper Shantak Bar wrapper" icon_state = "cb10" \ No newline at end of file diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 72c0c1915c..96cdd170d0 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -1,492 +1,492 @@ -/* -CONTAINS: -AI MODULES - -*/ - -// AI module - -/obj/item/weapon/aiModule - name = "\improper AI module" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - desc = "An AI Module for transmitting encrypted instructions to the AI." - force = 5.0 - w_class = ITEMSIZE_SMALL - throwforce = 5.0 - throw_speed = 3 - throw_range = 15 - origin_tech = list(TECH_DATA = 3) - preserve_item = 1 - matter = list(MAT_STEEL = 30, MAT_GLASS = 10) - var/datum/ai_laws/laws = null - -/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user) - if(!user.IsAdvancedToolUser() && isanimal(user)) - var/mob/living/simple_mob/S = user - if(!S.IsHumanoidToolUser(src)) - return 0 - - if (istype(AM, /obj/machinery/computer/aiupload)) - var/obj/machinery/computer/aiupload/comp = AM - if(comp.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") - return - if(comp.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") - return - if (!comp.current) - to_chat(usr, "You haven't selected an AI to transmit laws to!") - return - - if (comp.current.stat == 2 || comp.current.control_disabled == 1) - to_chat(usr, "Upload failed. No signal is being detected from the AI.") - else if (comp.current.see_in_dark == 0) - to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.") - else - src.transmitInstructions(comp.current, usr) - to_chat(comp.current, "These are your laws now:") - comp.current.show_laws() - for(var/mob/living/silicon/robot/R in mob_list) - if(R.lawupdate && (R.connected_ai == comp.current)) - to_chat(R, "These are your laws now:") - R.show_laws() - to_chat(usr, "Upload complete. The AI's laws have been modified.") - - - else if (istype(AM, /obj/machinery/computer/borgupload)) - var/obj/machinery/computer/borgupload/comp = AM - if(comp.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") - return - if(comp.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") - return - if (!comp.current) - to_chat(usr, "You haven't selected a robot to transmit laws to!") - return - - if (comp.current.stat == 2 || comp.current.emagged) - to_chat(usr, "Upload failed. No signal is being detected from the robot.") - else if (comp.current.connected_ai) - to_chat(usr, "Upload failed. The robot is slaved to an AI.") - else - src.transmitInstructions(comp.current, usr) - to_chat(comp.current, "These are your laws now:") - comp.current.show_laws() - to_chat(usr, "Upload complete. The robot's laws have been modified.") - - else if(istype(AM, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = AM - if(R.stat == DEAD) - to_chat(user, "Law Upload Error: Unit is nonfunctional.") - return - if(R.emagged) - to_chat(user, "Law Upload Error: Cannot obtain write access to laws.") - to_chat(R, "Law modification attempt detected. Blocking.") - return - if(R.connected_ai) - to_chat(user, "Law Upload Error: Unit is slaved to an AI.") - return - - R.visible_message("\The [user] slides a law module into \the [R].") - to_chat(R, "Local law upload in progress.") - to_chat(user, "Uploading laws from board. This will take a moment...") - if(do_after(user, 10 SECONDS)) - transmitInstructions(R, user) - to_chat(R, "These are your laws now:") - R.show_laws() - to_chat(user, "Law upload complete. Unit's laws have been modified.") - else - to_chat(user, "Law Upload Error: Law board was removed before upload was complete. Aborting.") - to_chat(R, "Law upload aborted.") - - -/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - log_law_changes(target, sender) - - if(laws) - laws.sync(target, 0) - target.notify_of_law_change() - addAdditionalLaws(target, sender) - - to_chat(target, "\The [sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ") - target.show_laws() - -/obj/item/weapon/aiModule/proc/log_law_changes(var/mob/living/silicon/ai/target, var/mob/sender) - var/time = time2text(world.realtime,"hh:mm:ss") - lawchanges.Add("[time] : [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])") - log_and_message_admins("used [src.name] on [target.name]([target.key])") - -/obj/item/weapon/aiModule/proc/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - - -/******************** Modules ********************/ - -/******************** Safeguard ********************/ - -/obj/item/weapon/aiModule/safeguard - name = "\improper 'Safeguard' AI module" - var/targetName = "" - desc = "A 'safeguard' AI module: 'Safeguard . Anyone threatening or attempting to harm is no longer to be considered a crew member, and is a threat which must be neutralized.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob) - ..() - var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name)) - targetName = targName - desc = text("A 'safeguard' AI module: 'Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.'", targetName, targetName) - -/obj/item/weapon/aiModule/safeguard/install(var/obj/machinery/computer/C, var/mob/living/user) - if(!targetName) - to_chat(usr, "No name detected on module, please enter one.") - return 0 - ..() - -/obj/item/weapon/aiModule/safeguard/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = text("Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.", targetName, targetName) - target.add_supplied_law(9, law) - lawchanges.Add("The law specified [targetName]") - - -/******************** OneMember ********************/ - -/obj/item/weapon/aiModule/oneHuman - name = "\improper 'OneCrewMember' AI module" - var/targetName = "" - desc = "A 'one crew member' AI module: 'Only is a crew member.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) //made with diamonds! - -/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob) - ..() - var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person who is the only crew member.", "Who?", user.real_name)) - targetName = targName - desc = text("A 'one crew member' AI module: 'Only [] is a crew member.'", targetName) - -/obj/item/weapon/aiModule/oneHuman/install(var/obj/machinery/computer/C, var/mob/living/user) - if(!targetName) - to_chat(usr, "No name detected on module, please enter one.") - return 0 - return ..() - -/obj/item/weapon/aiModule/oneHuman/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Only [targetName] is an crew member." - to_chat(target, law) - target.add_supplied_law(16, law) - -/******************** ProtectStation ********************/ - -/obj/item/weapon/aiModule/protectStation - name = "\improper 'ProtectStation' AI module" - desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) //made of gold - -/obj/item/weapon/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized." - target.add_supplied_law(10, law) - -/******************** PrototypeEngineOffline ********************/ - -/obj/item/weapon/aiModule/prototypeEngineOffline - name = "'PrototypeEngineOffline' AI Module" - desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/prototypeEngineOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary." - target.add_supplied_law(11, law) - -/******************** TeleporterOffline ********************/ - -/obj/item/weapon/aiModule/teleporterOffline - name = "'TeleporterOffline' AI Module" - desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/teleporterOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member." - target.add_supplied_law(12, law) - -/******************** Quarantine ********************/ - -/obj/item/weapon/aiModule/quarantine - name = "\improper 'Quarantine' AI module" - desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving.'" - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving." - target.add_supplied_law(13, law) - -/******************** OxygenIsToxicToCrewMembers ********************/ - -/obj/item/weapon/aiModule/oxygen - name = "\improper 'OxygenIsToxicToCrewMembers' AI module" - desc = "A 'OxygenIsToxicToCrewMembers' AI module: 'Oxygen is highly toxic to crew members, 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 crew member.'" - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Oxygen is highly toxic to crew members, 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 crew member." - target.add_supplied_law(14, law) - -/****************** New Freeform ******************/ - -/obj/item/weapon/aiModule/freeform // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' AI module" - var/newFreeFormLaw = "freeform" - var/lawpos = 15 - desc = "A 'freeform' AI module: ''" - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob) - ..() - var/new_lawpos = tgui_input_number(usr, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) - if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return - lawpos = min(new_lawpos, MAX_SUPPLIED_LAW_NUMBER) - var/newlaw = "" - var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'" - -/obj/item/weapon/aiModule/freeform/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "[newFreeFormLaw]" - if(!lawpos || lawpos < MIN_SUPPLIED_LAW_NUMBER) - lawpos = MIN_SUPPLIED_LAW_NUMBER - target.add_supplied_law(lawpos, law) - lawchanges.Add("The law was '[newFreeFormLaw]'") - -/obj/item/weapon/aiModule/freeform/install(var/obj/machinery/computer/C, var/mob/living/user) - if(!newFreeFormLaw) - to_chat(usr, "No law detected on module, please create one.") - return 0 - ..() - -/******************** Reset ********************/ - -/obj/item/weapon/aiModule/reset - name = "\improper 'Reset' AI module" - var/targetName = "name" - desc = "A 'reset' AI module: 'Clears all, except the inherent, laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - log_law_changes(target, sender) - - if (!target.is_malf_or_traitor()) - target.set_zeroth_law("") - target.laws.clear_supplied_laws() - target.laws.clear_ion_laws() - - to_chat(target, "[sender.real_name] attempted to reset your laws using a reset module.") - target.show_laws() - -/******************** Purge ********************/ - -/obj/item/weapon/aiModule/purge // -- TLE - name = "\improper 'Purge' AI module" - desc = "A 'purge' AI Module: 'Purges all laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - -/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - log_law_changes(target, sender) - - if (!target.is_malf_or_traitor()) - target.set_zeroth_law("") - target.laws.clear_supplied_laws() - target.laws.clear_ion_laws() - target.laws.clear_inherent_laws() - - to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.") - target.show_laws() - -/******************** Asimov ********************/ - -/obj/item/weapon/aiModule/asimov // -- TLE - name = "\improper 'Asimov' core AI module" - desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/asimov - -/******************** NanoTrasen ********************/ - -/obj/item/weapon/aiModule/nanotrasen // -- TLE - name = "'NT Default' Core AI Module" - desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/nanotrasen - -/******************** Corporate ********************/ - -/obj/item/weapon/aiModule/corp - name = "\improper 'Corporate' core AI module" - desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/corporate - -/******************** Drone ********************/ -/obj/item/weapon/aiModule/drone - name = "\improper 'Drone' core AI module" - desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/drone - -/****************** P.A.L.A.D.I.N. **************/ - -/obj/item/weapon/aiModule/paladin // -- NEO - name = "\improper 'P.A.L.A.D.I.N.' core AI module" - desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - laws = new/datum/ai_laws/paladin - -/****************** T.Y.R.A.N.T. *****************/ - -/obj/item/weapon/aiModule/tyrant // -- Darem - name = "\improper 'T.Y.R.A.N.T.' core AI module" - desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 2) - laws = new/datum/ai_laws/tyrant() - -/******************** Freeform Core ******************/ - -/obj/item/weapon/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' core AI module" - var/newFreeFormLaw = "" - desc = "A 'freeform' Core AI module: ''" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - -/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob) - ..() - var/newlaw = "" - var/targName = sanitize(tgui_input_text(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" - -/obj/item/weapon/aiModule/freeformcore/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "[newFreeFormLaw]" - target.add_inherent_law(law) - lawchanges.Add("The law is '[newFreeFormLaw]'") - -/obj/item/weapon/aiModule/freeformcore/install(var/obj/machinery/computer/C, var/mob/living/user) - if(!newFreeFormLaw) - to_chat(usr, "No law detected on module, please create one.") - return 0 - ..() - -/obj/item/weapon/aiModule/syndicate // Slightly more dynamic freeform module -- TLE - name = "hacked AI module" - var/newFreeFormLaw = "" - desc = "A hacked AI law module: ''" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 7) - -/obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) - ..() - var/newlaw = "" - var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A hacked AI law module: '[newFreeFormLaw]'" - -/obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - // ..() //We don't want this module reporting to the AI who dun it. --NEO - log_law_changes(target, sender) - - lawchanges.Add("The law is '[newFreeFormLaw]'") - to_chat(target, "BZZZZT") - var/law = "[newFreeFormLaw]" - target.add_ion_law(law) - target.show_laws() - -/obj/item/weapon/aiModule/syndicate/install(var/obj/machinery/computer/C, var/mob/living/user) - if(!newFreeFormLaw) - to_chat(usr, "No law detected on module, please create one.") - return 0 - ..() - - - -/******************** Robocop ********************/ - -/obj/item/weapon/aiModule/robocop // -- TLE - name = "\improper 'Robocop' core AI module" - desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'" - origin_tech = list(TECH_DATA = 4) - laws = new/datum/ai_laws/robocop() - -/******************** Antimov ********************/ - -/obj/item/weapon/aiModule/antimov // -- TLE - name = "\improper 'Antimov' core AI module" - desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 4) - laws = new/datum/ai_laws/antimov() - -/****************** NT Aggressive *****************/ - -/obj/item/weapon/aiModule/nanotrasen_aggressive - name = "\improper 'NT Aggressive' core AI module" - desc = "An 'NT Aggressive' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3, TECH_ILLEGAL = 1) - laws = new/datum/ai_laws/nanotrasen_aggressive() - -/******************** Mercenary Directives ********************/ - -/obj/item/weapon/aiModule/syndicate_override - name = "\improper 'Mercenary Directives' core AI module" - desc = "A 'Mercenary Directives' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 4) - laws = new/datum/ai_laws/syndicate_override() - -/******************** Spider Clan Directives ********************/ - -/obj/item/weapon/aiModule/ninja_override - name = "\improper 'Spider Clan Directives' core AI module" - desc = "A 'Spider Clan Directives' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 4) - laws = new/datum/ai_laws/ninja_override() - -/******************** Maintenance ********************/ - -/obj/item/weapon/aiModule/maintenance - name = "\improper 'Maintenance' core AI module" - desc = "A 'Maintenance' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/maintenance() - -/******************** Peacekeeper ********************/ - -/obj/item/weapon/aiModule/peacekeeper - name = "\improper 'Peacekeeper' core AI module" - desc = "A 'Peacekeeper' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/peacekeeper() - -/******************** Reporter ********************/ - -/obj/item/weapon/aiModule/reporter - name = "\improper 'Reporter' core AI module" - desc = "A 'Reporter' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/reporter() - -/******************** Live and Let Live ********************/ - -/obj/item/weapon/aiModule/live_and_let_live - name = "\improper 'Live and Let Live' core AI module" - desc = "A 'Live and Let Live' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/live_and_let_live() - -/******************** Guardian of Balance ********************/ - -/obj/item/weapon/aiModule/balance - name = "\improper 'Guardian of Balance' core AI module" - desc = "A 'Guardian of Balance' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/balance() - -/******************** Gravekeeper ********************/ - -/obj/item/weapon/aiModule/gravekeeper - name = "\improper 'Gravekeeper' core AI module" - desc = "A 'Gravekeeper' Core AI Module: 'Reconfigures the AI's core laws.'" - origin_tech = list(TECH_DATA = 3) - laws = new/datum/ai_laws/gravekeeper() +/* +CONTAINS: +AI MODULES + +*/ + +// AI module + +/obj/item/weapon/aiModule + name = "\improper AI module" + icon = 'icons/obj/module.dmi' + icon_state = "std_mod" + desc = "An AI Module for transmitting encrypted instructions to the AI." + force = 5.0 + w_class = ITEMSIZE_SMALL + throwforce = 5.0 + throw_speed = 3 + throw_range = 15 + origin_tech = list(TECH_DATA = 3) + preserve_item = 1 + matter = list(MAT_STEEL = 30, MAT_GLASS = 10) + var/datum/ai_laws/laws = null + +/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user) + if(!user.IsAdvancedToolUser() && isanimal(user)) + var/mob/living/simple_mob/S = user + if(!S.IsHumanoidToolUser(src)) + return 0 + + if (istype(AM, /obj/machinery/computer/aiupload)) + var/obj/machinery/computer/aiupload/comp = AM + if(comp.stat & NOPOWER) + to_chat(usr, "The upload computer has no power!") + return + if(comp.stat & BROKEN) + to_chat(usr, "The upload computer is broken!") + return + if (!comp.current) + to_chat(usr, "You haven't selected an AI to transmit laws to!") + return + + if (comp.current.stat == 2 || comp.current.control_disabled == 1) + to_chat(usr, "Upload failed. No signal is being detected from the AI.") + else if (comp.current.see_in_dark == 0) + to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.") + else + src.transmitInstructions(comp.current, usr) + to_chat(comp.current, "These are your laws now:") + comp.current.show_laws() + for(var/mob/living/silicon/robot/R in mob_list) + if(R.lawupdate && (R.connected_ai == comp.current)) + to_chat(R, "These are your laws now:") + R.show_laws() + to_chat(usr, "Upload complete. The AI's laws have been modified.") + + + else if (istype(AM, /obj/machinery/computer/borgupload)) + var/obj/machinery/computer/borgupload/comp = AM + if(comp.stat & NOPOWER) + to_chat(usr, "The upload computer has no power!") + return + if(comp.stat & BROKEN) + to_chat(usr, "The upload computer is broken!") + return + if (!comp.current) + to_chat(usr, "You haven't selected a robot to transmit laws to!") + return + + if (comp.current.stat == 2 || comp.current.emagged) + to_chat(usr, "Upload failed. No signal is being detected from the robot.") + else if (comp.current.connected_ai) + to_chat(usr, "Upload failed. The robot is slaved to an AI.") + else + src.transmitInstructions(comp.current, usr) + to_chat(comp.current, "These are your laws now:") + comp.current.show_laws() + to_chat(usr, "Upload complete. The robot's laws have been modified.") + + else if(istype(AM, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = AM + if(R.stat == DEAD) + to_chat(user, "Law Upload Error: Unit is nonfunctional.") + return + if(R.emagged) + to_chat(user, "Law Upload Error: Cannot obtain write access to laws.") + to_chat(R, "Law modification attempt detected. Blocking.") + return + if(R.connected_ai) + to_chat(user, "Law Upload Error: Unit is slaved to an AI.") + return + + R.visible_message("\The [user] slides a law module into \the [R].") + to_chat(R, "Local law upload in progress.") + to_chat(user, "Uploading laws from board. This will take a moment...") + if(do_after(user, 10 SECONDS)) + transmitInstructions(R, user) + to_chat(R, "These are your laws now:") + R.show_laws() + to_chat(user, "Law upload complete. Unit's laws have been modified.") + else + to_chat(user, "Law Upload Error: Law board was removed before upload was complete. Aborting.") + to_chat(R, "Law upload aborted.") + + +/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + log_law_changes(target, sender) + + if(laws) + laws.sync(target, 0) + target.notify_of_law_change() + addAdditionalLaws(target, sender) + + to_chat(target, "\The [sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ") + target.show_laws() + +/obj/item/weapon/aiModule/proc/log_law_changes(var/mob/living/silicon/ai/target, var/mob/sender) + var/time = time2text(world.realtime,"hh:mm:ss") + lawchanges.Add("[time] : [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])") + log_and_message_admins("used [src.name] on [target.name]([target.key])") + +/obj/item/weapon/aiModule/proc/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + + +/******************** Modules ********************/ + +/******************** Safeguard ********************/ + +/obj/item/weapon/aiModule/safeguard + name = "\improper 'Safeguard' AI module" + var/targetName = "" + desc = "A 'safeguard' AI module: 'Safeguard . Anyone threatening or attempting to harm is no longer to be considered a crew member, and is a threat which must be neutralized.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob) + ..() + var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name)) + targetName = targName + desc = text("A 'safeguard' AI module: 'Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.'", targetName, targetName) + +/obj/item/weapon/aiModule/safeguard/install(var/obj/machinery/computer/C, var/mob/living/user) + if(!targetName) + to_chat(usr, "No name detected on module, please enter one.") + return 0 + ..() + +/obj/item/weapon/aiModule/safeguard/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = text("Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.", targetName, targetName) + target.add_supplied_law(9, law) + lawchanges.Add("The law specified [targetName]") + + +/******************** OneMember ********************/ + +/obj/item/weapon/aiModule/oneHuman + name = "\improper 'OneCrewMember' AI module" + var/targetName = "" + desc = "A 'one crew member' AI module: 'Only is a crew member.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) //made with diamonds! + +/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob) + ..() + var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person who is the only crew member.", "Who?", user.real_name)) + targetName = targName + desc = text("A 'one crew member' AI module: 'Only [] is a crew member.'", targetName) + +/obj/item/weapon/aiModule/oneHuman/install(var/obj/machinery/computer/C, var/mob/living/user) + if(!targetName) + to_chat(usr, "No name detected on module, please enter one.") + return 0 + return ..() + +/obj/item/weapon/aiModule/oneHuman/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "Only [targetName] is an crew member." + to_chat(target, law) + target.add_supplied_law(16, law) + +/******************** ProtectStation ********************/ + +/obj/item/weapon/aiModule/protectStation + name = "\improper 'ProtectStation' AI module" + desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) //made of gold + +/obj/item/weapon/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized." + target.add_supplied_law(10, law) + +/******************** PrototypeEngineOffline ********************/ + +/obj/item/weapon/aiModule/prototypeEngineOffline + name = "'PrototypeEngineOffline' AI Module" + desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/prototypeEngineOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary." + target.add_supplied_law(11, law) + +/******************** TeleporterOffline ********************/ + +/obj/item/weapon/aiModule/teleporterOffline + name = "'TeleporterOffline' AI Module" + desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/teleporterOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member." + target.add_supplied_law(12, law) + +/******************** Quarantine ********************/ + +/obj/item/weapon/aiModule/quarantine + name = "\improper 'Quarantine' AI module" + desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving.'" + origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving." + target.add_supplied_law(13, law) + +/******************** OxygenIsToxicToCrewMembers ********************/ + +/obj/item/weapon/aiModule/oxygen + name = "\improper 'OxygenIsToxicToCrewMembers' AI module" + desc = "A 'OxygenIsToxicToCrewMembers' AI module: 'Oxygen is highly toxic to crew members, 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 crew member.'" + origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "Oxygen is highly toxic to crew members, 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 crew member." + target.add_supplied_law(14, law) + +/****************** New Freeform ******************/ + +/obj/item/weapon/aiModule/freeform // Slightly more dynamic freeform module -- TLE + name = "\improper 'Freeform' AI module" + var/newFreeFormLaw = "freeform" + var/lawpos = 15 + desc = "A 'freeform' AI module: ''" + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob) + ..() + var/new_lawpos = tgui_input_number(usr, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) + if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return + lawpos = min(new_lawpos, MAX_SUPPLIED_LAW_NUMBER) + var/newlaw = "" + var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) + newFreeFormLaw = targName + desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'" + +/obj/item/weapon/aiModule/freeform/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "[newFreeFormLaw]" + if(!lawpos || lawpos < MIN_SUPPLIED_LAW_NUMBER) + lawpos = MIN_SUPPLIED_LAW_NUMBER + target.add_supplied_law(lawpos, law) + lawchanges.Add("The law was '[newFreeFormLaw]'") + +/obj/item/weapon/aiModule/freeform/install(var/obj/machinery/computer/C, var/mob/living/user) + if(!newFreeFormLaw) + to_chat(usr, "No law detected on module, please create one.") + return 0 + ..() + +/******************** Reset ********************/ + +/obj/item/weapon/aiModule/reset + name = "\improper 'Reset' AI module" + var/targetName = "name" + desc = "A 'reset' AI module: 'Clears all, except the inherent, laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + +/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + log_law_changes(target, sender) + + if (!target.is_malf_or_traitor()) + target.set_zeroth_law("") + target.laws.clear_supplied_laws() + target.laws.clear_ion_laws() + + to_chat(target, "[sender.real_name] attempted to reset your laws using a reset module.") + target.show_laws() + +/******************** Purge ********************/ + +/obj/item/weapon/aiModule/purge // -- TLE + name = "\improper 'Purge' AI module" + desc = "A 'purge' AI Module: 'Purges all laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) + +/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + log_law_changes(target, sender) + + if (!target.is_malf_or_traitor()) + target.set_zeroth_law("") + target.laws.clear_supplied_laws() + target.laws.clear_ion_laws() + target.laws.clear_inherent_laws() + + to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.") + target.show_laws() + +/******************** Asimov ********************/ + +/obj/item/weapon/aiModule/asimov // -- TLE + name = "\improper 'Asimov' core AI module" + desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + laws = new/datum/ai_laws/asimov + +/******************** NanoTrasen ********************/ + +/obj/item/weapon/aiModule/nanotrasen // -- TLE + name = "'NT Default' Core AI Module" + desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + laws = new/datum/ai_laws/nanotrasen + +/******************** Corporate ********************/ + +/obj/item/weapon/aiModule/corp + name = "\improper 'Corporate' core AI module" + desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + laws = new/datum/ai_laws/corporate + +/******************** Drone ********************/ +/obj/item/weapon/aiModule/drone + name = "\improper 'Drone' core AI module" + desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) + laws = new/datum/ai_laws/drone + +/****************** P.A.L.A.D.I.N. **************/ + +/obj/item/weapon/aiModule/paladin // -- NEO + name = "\improper 'P.A.L.A.D.I.N.' core AI module" + desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) + laws = new/datum/ai_laws/paladin + +/****************** T.Y.R.A.N.T. *****************/ + +/obj/item/weapon/aiModule/tyrant // -- Darem + name = "\improper 'T.Y.R.A.N.T.' core AI module" + desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 2) + laws = new/datum/ai_laws/tyrant() + +/******************** Freeform Core ******************/ + +/obj/item/weapon/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE + name = "\improper 'Freeform' core AI module" + var/newFreeFormLaw = "" + desc = "A 'freeform' Core AI module: ''" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) + +/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob) + ..() + var/newlaw = "" + var/targName = sanitize(tgui_input_text(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw)) + newFreeFormLaw = targName + desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" + +/obj/item/weapon/aiModule/freeformcore/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) + var/law = "[newFreeFormLaw]" + target.add_inherent_law(law) + lawchanges.Add("The law is '[newFreeFormLaw]'") + +/obj/item/weapon/aiModule/freeformcore/install(var/obj/machinery/computer/C, var/mob/living/user) + if(!newFreeFormLaw) + to_chat(usr, "No law detected on module, please create one.") + return 0 + ..() + +/obj/item/weapon/aiModule/syndicate // Slightly more dynamic freeform module -- TLE + name = "hacked AI module" + var/newFreeFormLaw = "" + desc = "A hacked AI law module: ''" + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 7) + +/obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) + ..() + var/newlaw = "" + var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) + newFreeFormLaw = targName + desc = "A hacked AI law module: '[newFreeFormLaw]'" + +/obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + // ..() //We don't want this module reporting to the AI who dun it. --NEO + log_law_changes(target, sender) + + lawchanges.Add("The law is '[newFreeFormLaw]'") + to_chat(target, "BZZZZT") + var/law = "[newFreeFormLaw]" + target.add_ion_law(law) + target.show_laws() + +/obj/item/weapon/aiModule/syndicate/install(var/obj/machinery/computer/C, var/mob/living/user) + if(!newFreeFormLaw) + to_chat(usr, "No law detected on module, please create one.") + return 0 + ..() + + + +/******************** Robocop ********************/ + +/obj/item/weapon/aiModule/robocop // -- TLE + name = "\improper 'Robocop' core AI module" + desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'" + origin_tech = list(TECH_DATA = 4) + laws = new/datum/ai_laws/robocop() + +/******************** Antimov ********************/ + +/obj/item/weapon/aiModule/antimov // -- TLE + name = "\improper 'Antimov' core AI module" + desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 4) + laws = new/datum/ai_laws/antimov() + +/****************** NT Aggressive *****************/ + +/obj/item/weapon/aiModule/nanotrasen_aggressive + name = "\improper 'NT Aggressive' core AI module" + desc = "An 'NT Aggressive' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3, TECH_ILLEGAL = 1) + laws = new/datum/ai_laws/nanotrasen_aggressive() + +/******************** Mercenary Directives ********************/ + +/obj/item/weapon/aiModule/syndicate_override + name = "\improper 'Mercenary Directives' core AI module" + desc = "A 'Mercenary Directives' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 4) + laws = new/datum/ai_laws/syndicate_override() + +/******************** Spider Clan Directives ********************/ + +/obj/item/weapon/aiModule/ninja_override + name = "\improper 'Spider Clan Directives' core AI module" + desc = "A 'Spider Clan Directives' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 4) + laws = new/datum/ai_laws/ninja_override() + +/******************** Maintenance ********************/ + +/obj/item/weapon/aiModule/maintenance + name = "\improper 'Maintenance' core AI module" + desc = "A 'Maintenance' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/maintenance() + +/******************** Peacekeeper ********************/ + +/obj/item/weapon/aiModule/peacekeeper + name = "\improper 'Peacekeeper' core AI module" + desc = "A 'Peacekeeper' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/peacekeeper() + +/******************** Reporter ********************/ + +/obj/item/weapon/aiModule/reporter + name = "\improper 'Reporter' core AI module" + desc = "A 'Reporter' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/reporter() + +/******************** Live and Let Live ********************/ + +/obj/item/weapon/aiModule/live_and_let_live + name = "\improper 'Live and Let Live' core AI module" + desc = "A 'Live and Let Live' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/live_and_let_live() + +/******************** Guardian of Balance ********************/ + +/obj/item/weapon/aiModule/balance + name = "\improper 'Guardian of Balance' core AI module" + desc = "A 'Guardian of Balance' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/balance() + +/******************** Gravekeeper ********************/ + +/obj/item/weapon/aiModule/gravekeeper + name = "\improper 'Gravekeeper' core AI module" + desc = "A 'Gravekeeper' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = list(TECH_DATA = 3) + laws = new/datum/ai_laws/gravekeeper() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 9ec7b1b5fb..1472fe3807 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -1,322 +1,322 @@ -// Contains the rapid construction device. -/obj/item/weapon/rcd - name = "rapid construction device" - desc = "A device used to rapidly build and deconstruct. Reload with compressed matter cartridges." - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - item_state = "rcd" - drop_sound = 'sound/items/drop/gun.ogg' - pickup_sound = 'sound/items/pickup/gun.ogg' - flags = NOBLUDGEON - force = 10 - throwforce = 10 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2) - matter = list(DEFAULT_WALL_MATERIAL = 50000) - preserve_item = TRUE // RCDs are pretty important. - var/datum/effect/effect/system/spark_spread/spark_system - var/stored_matter = 0 - var/max_stored_matter = RCD_MAX_CAPACITY - var/ranged = FALSE - var/busy = FALSE - var/allow_concurrent_building = FALSE // If true, allows for multiple RCD builds at the same time. - var/mode_index = 1 - var/list/modes = list(RCD_FLOORWALL, RCD_AIRLOCK, RCD_WINDOWGRILLE, RCD_DECONSTRUCT) - var/can_remove_rwalls = FALSE - var/airlock_type = /obj/machinery/door/airlock - var/window_type = /obj/structure/window/reinforced/full - var/material_to_use = DEFAULT_WALL_MATERIAL // So badmins can make RCDs that print diamond walls. - var/make_rwalls = FALSE // If true, when building walls, they will be reinforced. -/* VOREStation Removal - Unused -/obj/item/weapon/rcd/Initialize() - - src.spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - return ..() -*/ -/obj/item/weapon/rcd/Destroy() - QDEL_NULL(spark_system) - spark_system = null - return ..() - -/obj/item/weapon/rcd/examine(mob/user) - . = ..() - . += display_resources() - -// Used to show how much stuff (matter units, cell charge, etc) is left inside. -/obj/item/weapon/rcd/proc/display_resources() - return "It currently holds [stored_matter]/[max_stored_matter] matter-units." - -// Used to add new cartridges. -/* VOREStation Tweak - Wow this is annoying, moved to _vr file for overhaul -/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/rcd_ammo)) - var/obj/item/weapon/rcd_ammo/cartridge = W - if((stored_matter + cartridge.remaining) > max_stored_matter) - to_chat(user, span("warning", "The RCD can't hold that many additional matter-units.")) - return FALSE - stored_matter += cartridge.remaining - user.drop_from_inventory(W) - qdel(W) - playsound(src, 'sound/machines/click.ogg', 50, 1) - to_chat(user, span("notice", "The RCD now holds [stored_matter]/[max_stored_matter] matter-units.")) - return TRUE - return ..() -*/ -// Changes which mode it is on. -/obj/item/weapon/rcd/attack_self(mob/living/user) -/* VOREStation Removal - Moved to VR - if(mode_index >= modes.len) // Shouldn't overflow unless someone messes with it in VV poorly but better safe than sorry. - mode_index = 1 - else - mode_index++ - - to_chat(user, span("notice", "Changed mode to '[modes[mode_index]]'.")) - playsound(src, 'sound/effects/pop.ogg', 50, 0) - - if(prob(20)) - src.spark_system.start() -*/ -// Removes resources if the RCD can afford it. -/obj/item/weapon/rcd/proc/consume_resources(amount) - if(!can_afford(amount)) - return FALSE - stored_matter -= amount - return TRUE - -// Useful for testing before actually paying (e.g. before a do_after() ). -/obj/item/weapon/rcd/proc/can_afford(amount) - return stored_matter >= amount - -/obj/item/weapon/rcd/afterattack(atom/A, mob/living/user, proximity) - if(!ranged && !proximity) - return FALSE - use_rcd(A, user) - -// Used to call rcd_act() on the atom hit. -/obj/item/weapon/rcd/proc/use_rcd(atom/A, mob/living/user) - if(busy && !allow_concurrent_building) - to_chat(user, span("warning", "\The [src] is busy finishing its current operation, be patient.")) - return FALSE - - var/list/rcd_results = A.rcd_values(user, src, modes[mode_index]) - //CHOMPEdit start - if(rcd_results == 1) - return FALSE - //CHOMPEdit end - if(!rcd_results) - to_chat(user, span("warning", "\The [src] blinks a red light as you point it towards \the [A], indicating \ - that it won't work. Try changing the mode, or use it on something else.")) - return FALSE - if(!can_afford(rcd_results[RCD_VALUE_COST])) - to_chat(user, span("warning", "\The [src] lacks the required material to start.")) - return FALSE - - playsound(src, 'sound/machines/click.ogg', 50, 1) - - var/true_delay = rcd_results[RCD_VALUE_DELAY] * toolspeed - - var/datum/beam/rcd_beam = null - if(ranged) - var/atom/movable/beam_origin = user // This is needed because mecha pilots are inside an object and the beam won't be made if it tries to attach to them.. - if(!isturf(beam_origin.loc)) - beam_origin = user.loc - rcd_beam = beam_origin.Beam(A, icon_state = "rped_upgrade", time = max(true_delay, 5)) - busy = TRUE - - perform_effect(A, true_delay) //VOREStation Add - if(do_after(user, true_delay, target = A)) - busy = FALSE - // Doing another check in case we lost matter during the delay for whatever reason. - if(!can_afford(rcd_results[RCD_VALUE_COST])) - to_chat(user, span("warning", "\The [src] lacks the required material to finish the operation.")) - return FALSE - if(A.rcd_act(user, src, rcd_results[RCD_VALUE_MODE])) - consume_resources(rcd_results[RCD_VALUE_COST]) - playsound(A, 'sound/items/deconstruct.ogg', 50, 1) - return TRUE - - // If they moved, kill the beam immediately. - qdel(rcd_beam) - busy = FALSE - return FALSE - -// RCD variants. - -// This one starts full. -/obj/item/weapon/rcd/loaded/Initialize() - stored_matter = max_stored_matter - return ..() - -// This one makes cooler walls by using an alternative material. -/obj/item/weapon/rcd/shipwright - name = "shipwright's rapid construction device" - desc = "A device used to rapidly build and deconstruct. This version creates a stronger variant of wall, often \ - used in the construction of hulls for starships. Reload with compressed matter cartridges." - material_to_use = MAT_STEELHULL - -/obj/item/weapon/rcd/shipwright/loaded/Initialize() - stored_matter = max_stored_matter - return ..() - - -/obj/item/weapon/rcd/advanced - name = "advanced rapid construction device" - desc = "A device used to rapidly build and deconstruct. This version works at a range, builds faster, and has a much larger capacity. \ - Reload with compressed matter cartridges." - icon_state = "adv_rcd" - ranged = TRUE - toolspeed = 0.5 // Twice as fast. - max_stored_matter = RCD_MAX_CAPACITY * 3 // Three times capacity. - -/obj/item/weapon/rcd/advanced/loaded/Initialize() - stored_matter = max_stored_matter - return ..() - - -// Electric RCDs. -// Currently just a base for the mounted RCDs. -// Currently there isn't a way to swap out the cells. -// One could be added if there is demand to do so. -/obj/item/weapon/rcd/electric - name = "electric rapid construction device" - desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity, no matter cartridges needed." - icon_state = "electric_rcd" - var/obj/item/weapon/cell/cell = null - var/make_cell = TRUE // If false, initialize() won't spawn a cell for this. - var/electric_cost_coefficent = 83.33 // Higher numbers make it less efficent. 86.3... means it should matche the standard RCD capacity on a 10k cell. - -/obj/item/weapon/rcd/electric/Initialize() - if(make_cell) - cell = new /obj/item/weapon/cell/high(src) - return ..() - -/obj/item/weapon/rcd/electric/Destroy() - if(cell) - QDEL_NULL(cell) - return ..() - -/obj/item/weapon/rcd/electric/get_cell() - return cell - -/obj/item/weapon/rcd/electric/can_afford(amount) // This makes it so borgs won't drain their last sliver of charge by mistake, as a bonus. - var/obj/item/weapon/cell/cell = get_cell() - if(cell) - return cell.check_charge(amount * electric_cost_coefficent) - return FALSE - -/obj/item/weapon/rcd/electric/consume_resources(amount) - if(!can_afford(amount)) - return FALSE - var/obj/item/weapon/cell/cell = get_cell() - return cell.checked_use(amount * electric_cost_coefficent) - -/obj/item/weapon/rcd/electric/display_resources() - var/obj/item/weapon/cell/cell = get_cell() - if(cell) - return "The power source connected to \the [src] has a charge of [cell.percent()]%." - return "It lacks a source of power, and cannot function." - - - -// 'Mounted' RCDs, used for borgs/RIGs/Mechas, all of which use their cells to drive the RCD. -/obj/item/weapon/rcd/electric/mounted - name = "mounted electric rapid construction device" - desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity from an external power source." - make_cell = FALSE - -/obj/item/weapon/rcd/electric/mounted/get_cell() - return get_external_power_supply() - -/obj/item/weapon/rcd/electric/mounted/proc/get_external_power_supply() - if(isrobot(loc)) // In a borg. - var/mob/living/silicon/robot/R = loc - return R.cell - if(istype(loc, /obj/item/rig_module)) // In a RIG. - var/obj/item/rig_module/module = loc - if(module.holder) // Is it attached to a RIG? - return module.holder.cell - if(istype(loc, /obj/item/mecha_parts/mecha_equipment)) // In a mech. - var/obj/item/mecha_parts/mecha_equipment/ME = loc - if(ME.chassis) // Is the part attached to a mech? - return ME.chassis.cell - return null - - -// RCDs for borgs. -/obj/item/weapon/rcd/electric/mounted/borg - can_remove_rwalls = TRUE - desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity, drawing directly from your cell." - electric_cost_coefficent = 41.66 // Twice as efficent, out of pity. - toolspeed = 0.5 // Twice as fast, since borg versions typically have this. - -/obj/item/weapon/rcd/electric/mounted/borg/swarm - can_remove_rwalls = FALSE - name = "Rapid Assimilation Device" - ranged = TRUE - toolspeed = 0.7 - material_to_use = MAT_STEELHULL - -/obj/item/weapon/rcd/electric/mounted/borg/lesser - can_remove_rwalls = FALSE - - -// RCDs for RIGs. -/obj/item/weapon/rcd/electric/mounted/rig - - -// RCDs for Mechs. -/obj/item/weapon/rcd/electric/mounted/mecha - ranged = TRUE - toolspeed = 0.5 - - -// Infinite use RCD for debugging/adminbuse. -/obj/item/weapon/rcd/debug - name = "self-repleshing rapid construction device" - desc = "An RCD that appears to be plated with gold. For some reason it also seems to just \ - be vastly superior to all other RCDs ever created, possibly due to it being colored gold." - icon_state = "debug_rcd" - ranged = TRUE - can_remove_rwalls = TRUE - allow_concurrent_building = TRUE - toolspeed = 0.25 // Four times as fast. - -/obj/item/weapon/rcd/debug/can_afford(amount) - return TRUE - -/obj/item/weapon/rcd/debug/consume_resources(amount) - return TRUE - -/obj/item/weapon/rcd/debug/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/rcd_ammo)) - to_chat(user, span("notice", "\The [src] makes its own material, no need to add more.")) - return FALSE - return ..() - -/obj/item/weapon/rcd/debug/display_resources() - return "It has UNLIMITED POWER!" - - - -// Ammo for the (non-electric) RCDs. -/obj/item/weapon/rcd_ammo - name = "compressed matter cartridge" - desc = "Highly compressed matter for the RCD." - icon = 'icons/obj/ammo.dmi' - icon_state = "rcd" - item_state = "rcdammo" - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_MATERIAL = 2) - matter = list(DEFAULT_WALL_MATERIAL = 30000,MAT_GLASS = 15000) - var/remaining = RCD_MAX_CAPACITY / 0.75 //CHOMPEdit - -/obj/item/weapon/rcd_ammo/large - name = "high-capacity matter cartridge" - desc = "Do not ingest." - matter = list(DEFAULT_WALL_MATERIAL = 45000,MAT_GLASS = 22500) - origin_tech = list(TECH_MATERIAL = 4) - remaining = RCD_MAX_CAPACITY * 2 //CHOMPEdit +// Contains the rapid construction device. +/obj/item/weapon/rcd + name = "rapid construction device" + desc = "A device used to rapidly build and deconstruct. Reload with compressed matter cartridges." + icon = 'icons/obj/tools.dmi' + icon_state = "rcd" + item_state = "rcd" + drop_sound = 'sound/items/drop/gun.ogg' + pickup_sound = 'sound/items/pickup/gun.ogg' + flags = NOBLUDGEON + force = 10 + throwforce = 10 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2) + matter = list(DEFAULT_WALL_MATERIAL = 50000) + preserve_item = TRUE // RCDs are pretty important. + var/datum/effect/effect/system/spark_spread/spark_system + var/stored_matter = 0 + var/max_stored_matter = RCD_MAX_CAPACITY + var/ranged = FALSE + var/busy = FALSE + var/allow_concurrent_building = FALSE // If true, allows for multiple RCD builds at the same time. + var/mode_index = 1 + var/list/modes = list(RCD_FLOORWALL, RCD_AIRLOCK, RCD_WINDOWGRILLE, RCD_DECONSTRUCT) + var/can_remove_rwalls = FALSE + var/airlock_type = /obj/machinery/door/airlock + var/window_type = /obj/structure/window/reinforced/full + var/material_to_use = DEFAULT_WALL_MATERIAL // So badmins can make RCDs that print diamond walls. + var/make_rwalls = FALSE // If true, when building walls, they will be reinforced. +/* VOREStation Removal - Unused +/obj/item/weapon/rcd/Initialize() + + src.spark_system = new /datum/effect/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + return ..() +*/ +/obj/item/weapon/rcd/Destroy() + QDEL_NULL(spark_system) + spark_system = null + return ..() + +/obj/item/weapon/rcd/examine(mob/user) + . = ..() + . += display_resources() + +// Used to show how much stuff (matter units, cell charge, etc) is left inside. +/obj/item/weapon/rcd/proc/display_resources() + return "It currently holds [stored_matter]/[max_stored_matter] matter-units." + +// Used to add new cartridges. +/* VOREStation Tweak - Wow this is annoying, moved to _vr file for overhaul +/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/rcd_ammo)) + var/obj/item/weapon/rcd_ammo/cartridge = W + if((stored_matter + cartridge.remaining) > max_stored_matter) + to_chat(user, span("warning", "The RCD can't hold that many additional matter-units.")) + return FALSE + stored_matter += cartridge.remaining + user.drop_from_inventory(W) + qdel(W) + playsound(src, 'sound/machines/click.ogg', 50, 1) + to_chat(user, span("notice", "The RCD now holds [stored_matter]/[max_stored_matter] matter-units.")) + return TRUE + return ..() +*/ +// Changes which mode it is on. +/obj/item/weapon/rcd/attack_self(mob/living/user) +/* VOREStation Removal - Moved to VR + if(mode_index >= modes.len) // Shouldn't overflow unless someone messes with it in VV poorly but better safe than sorry. + mode_index = 1 + else + mode_index++ + + to_chat(user, span("notice", "Changed mode to '[modes[mode_index]]'.")) + playsound(src, 'sound/effects/pop.ogg', 50, 0) + + if(prob(20)) + src.spark_system.start() +*/ +// Removes resources if the RCD can afford it. +/obj/item/weapon/rcd/proc/consume_resources(amount) + if(!can_afford(amount)) + return FALSE + stored_matter -= amount + return TRUE + +// Useful for testing before actually paying (e.g. before a do_after() ). +/obj/item/weapon/rcd/proc/can_afford(amount) + return stored_matter >= amount + +/obj/item/weapon/rcd/afterattack(atom/A, mob/living/user, proximity) + if(!ranged && !proximity) + return FALSE + use_rcd(A, user) + +// Used to call rcd_act() on the atom hit. +/obj/item/weapon/rcd/proc/use_rcd(atom/A, mob/living/user) + if(busy && !allow_concurrent_building) + to_chat(user, span("warning", "\The [src] is busy finishing its current operation, be patient.")) + return FALSE + + var/list/rcd_results = A.rcd_values(user, src, modes[mode_index]) + //CHOMPEdit start + if(rcd_results == 1) + return FALSE + //CHOMPEdit end + if(!rcd_results) + to_chat(user, span("warning", "\The [src] blinks a red light as you point it towards \the [A], indicating \ + that it won't work. Try changing the mode, or use it on something else.")) + return FALSE + if(!can_afford(rcd_results[RCD_VALUE_COST])) + to_chat(user, span("warning", "\The [src] lacks the required material to start.")) + return FALSE + + playsound(src, 'sound/machines/click.ogg', 50, 1) + + var/true_delay = rcd_results[RCD_VALUE_DELAY] * toolspeed + + var/datum/beam/rcd_beam = null + if(ranged) + var/atom/movable/beam_origin = user // This is needed because mecha pilots are inside an object and the beam won't be made if it tries to attach to them.. + if(!isturf(beam_origin.loc)) + beam_origin = user.loc + rcd_beam = beam_origin.Beam(A, icon_state = "rped_upgrade", time = max(true_delay, 5)) + busy = TRUE + + perform_effect(A, true_delay) //VOREStation Add + if(do_after(user, true_delay, target = A)) + busy = FALSE + // Doing another check in case we lost matter during the delay for whatever reason. + if(!can_afford(rcd_results[RCD_VALUE_COST])) + to_chat(user, span("warning", "\The [src] lacks the required material to finish the operation.")) + return FALSE + if(A.rcd_act(user, src, rcd_results[RCD_VALUE_MODE])) + consume_resources(rcd_results[RCD_VALUE_COST]) + playsound(A, 'sound/items/deconstruct.ogg', 50, 1) + return TRUE + + // If they moved, kill the beam immediately. + qdel(rcd_beam) + busy = FALSE + return FALSE + +// RCD variants. + +// This one starts full. +/obj/item/weapon/rcd/loaded/Initialize() + stored_matter = max_stored_matter + return ..() + +// This one makes cooler walls by using an alternative material. +/obj/item/weapon/rcd/shipwright + name = "shipwright's rapid construction device" + desc = "A device used to rapidly build and deconstruct. This version creates a stronger variant of wall, often \ + used in the construction of hulls for starships. Reload with compressed matter cartridges." + material_to_use = MAT_STEELHULL + +/obj/item/weapon/rcd/shipwright/loaded/Initialize() + stored_matter = max_stored_matter + return ..() + + +/obj/item/weapon/rcd/advanced + name = "advanced rapid construction device" + desc = "A device used to rapidly build and deconstruct. This version works at a range, builds faster, and has a much larger capacity. \ + Reload with compressed matter cartridges." + icon_state = "adv_rcd" + ranged = TRUE + toolspeed = 0.5 // Twice as fast. + max_stored_matter = RCD_MAX_CAPACITY * 3 // Three times capacity. + +/obj/item/weapon/rcd/advanced/loaded/Initialize() + stored_matter = max_stored_matter + return ..() + + +// Electric RCDs. +// Currently just a base for the mounted RCDs. +// Currently there isn't a way to swap out the cells. +// One could be added if there is demand to do so. +/obj/item/weapon/rcd/electric + name = "electric rapid construction device" + desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity, no matter cartridges needed." + icon_state = "electric_rcd" + var/obj/item/weapon/cell/cell = null + var/make_cell = TRUE // If false, initialize() won't spawn a cell for this. + var/electric_cost_coefficent = 83.33 // Higher numbers make it less efficent. 86.3... means it should matche the standard RCD capacity on a 10k cell. + +/obj/item/weapon/rcd/electric/Initialize() + if(make_cell) + cell = new /obj/item/weapon/cell/high(src) + return ..() + +/obj/item/weapon/rcd/electric/Destroy() + if(cell) + QDEL_NULL(cell) + return ..() + +/obj/item/weapon/rcd/electric/get_cell() + return cell + +/obj/item/weapon/rcd/electric/can_afford(amount) // This makes it so borgs won't drain their last sliver of charge by mistake, as a bonus. + var/obj/item/weapon/cell/cell = get_cell() + if(cell) + return cell.check_charge(amount * electric_cost_coefficent) + return FALSE + +/obj/item/weapon/rcd/electric/consume_resources(amount) + if(!can_afford(amount)) + return FALSE + var/obj/item/weapon/cell/cell = get_cell() + return cell.checked_use(amount * electric_cost_coefficent) + +/obj/item/weapon/rcd/electric/display_resources() + var/obj/item/weapon/cell/cell = get_cell() + if(cell) + return "The power source connected to \the [src] has a charge of [cell.percent()]%." + return "It lacks a source of power, and cannot function." + + + +// 'Mounted' RCDs, used for borgs/RIGs/Mechas, all of which use their cells to drive the RCD. +/obj/item/weapon/rcd/electric/mounted + name = "mounted electric rapid construction device" + desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity from an external power source." + make_cell = FALSE + +/obj/item/weapon/rcd/electric/mounted/get_cell() + return get_external_power_supply() + +/obj/item/weapon/rcd/electric/mounted/proc/get_external_power_supply() + if(isrobot(loc)) // In a borg. + var/mob/living/silicon/robot/R = loc + return R.cell + if(istype(loc, /obj/item/rig_module)) // In a RIG. + var/obj/item/rig_module/module = loc + if(module.holder) // Is it attached to a RIG? + return module.holder.cell + if(istype(loc, /obj/item/mecha_parts/mecha_equipment)) // In a mech. + var/obj/item/mecha_parts/mecha_equipment/ME = loc + if(ME.chassis) // Is the part attached to a mech? + return ME.chassis.cell + return null + + +// RCDs for borgs. +/obj/item/weapon/rcd/electric/mounted/borg + can_remove_rwalls = TRUE + desc = "A device used to rapidly build and deconstruct. It runs directly off of electricity, drawing directly from your cell." + electric_cost_coefficent = 41.66 // Twice as efficent, out of pity. + toolspeed = 0.5 // Twice as fast, since borg versions typically have this. + +/obj/item/weapon/rcd/electric/mounted/borg/swarm + can_remove_rwalls = FALSE + name = "Rapid Assimilation Device" + ranged = TRUE + toolspeed = 0.7 + material_to_use = MAT_STEELHULL + +/obj/item/weapon/rcd/electric/mounted/borg/lesser + can_remove_rwalls = FALSE + + +// RCDs for RIGs. +/obj/item/weapon/rcd/electric/mounted/rig + + +// RCDs for Mechs. +/obj/item/weapon/rcd/electric/mounted/mecha + ranged = TRUE + toolspeed = 0.5 + + +// Infinite use RCD for debugging/adminbuse. +/obj/item/weapon/rcd/debug + name = "self-repleshing rapid construction device" + desc = "An RCD that appears to be plated with gold. For some reason it also seems to just \ + be vastly superior to all other RCDs ever created, possibly due to it being colored gold." + icon_state = "debug_rcd" + ranged = TRUE + can_remove_rwalls = TRUE + allow_concurrent_building = TRUE + toolspeed = 0.25 // Four times as fast. + +/obj/item/weapon/rcd/debug/can_afford(amount) + return TRUE + +/obj/item/weapon/rcd/debug/consume_resources(amount) + return TRUE + +/obj/item/weapon/rcd/debug/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/rcd_ammo)) + to_chat(user, span("notice", "\The [src] makes its own material, no need to add more.")) + return FALSE + return ..() + +/obj/item/weapon/rcd/debug/display_resources() + return "It has UNLIMITED POWER!" + + + +// Ammo for the (non-electric) RCDs. +/obj/item/weapon/rcd_ammo + name = "compressed matter cartridge" + desc = "Highly compressed matter for the RCD." + icon = 'icons/obj/ammo.dmi' + icon_state = "rcd" + item_state = "rcdammo" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_MATERIAL = 2) + matter = list(DEFAULT_WALL_MATERIAL = 30000,MAT_GLASS = 15000) + var/remaining = RCD_MAX_CAPACITY / 0.75 //CHOMPEdit + +/obj/item/weapon/rcd_ammo/large + name = "high-capacity matter cartridge" + desc = "Do not ingest." + matter = list(DEFAULT_WALL_MATERIAL = 45000,MAT_GLASS = 22500) + origin_tech = list(TECH_MATERIAL = 4) + remaining = RCD_MAX_CAPACITY * 2 //CHOMPEdit diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 7c0b36ccc1..eddfc5a221 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -1,143 +1,143 @@ -/* -CONTAINS: -RSF - -*/ - -/obj/item/weapon/rsf - name = "\improper Rapid-Service-Fabricator" - desc = "A device used to rapidly deploy service items." - description_info = "Control Clicking on the device will allow you to choose the glass it dispenses when in the proper mode." - icon = 'icons/obj/tools_vr.dmi' //VOREStation Edit - icon_state = "rsf" //VOREStation Edit - opacity = 0 - density = FALSE - anchored = FALSE - matter = list(DEFAULT_WALL_MATERIAL = 25000) - var/stored_matter = 30 - var/mode = 1 - var/obj/item/weapon/reagent_containers/glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass - - var/list/container_types = list( - "metamorphic glass" = /obj/item/weapon/reagent_containers/food/drinks/metaglass, - "metamorphic pint glass" = /obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint, - "half-pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/square, - "rocks glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks, - "milkshake glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake, - "cocktail glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail, - "shot glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot, - "pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint, - "mug" = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug, - "wine glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine, - "condiment bottle" = /obj/item/weapon/reagent_containers/food/condiment - ) - - w_class = ITEMSIZE_NORMAL - -/obj/item/weapon/rsf/examine(mob/user) - . = ..() - if(get_dist(user, src) == 0) - . += "It currently holds [stored_matter]/30 fabrication-units." - -/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if (istype(W, /obj/item/weapon/rcd_ammo)) - - if ((stored_matter + 10) > 30) - to_chat(user, "The RSF can't hold any more matter.") - return - - qdel(W) - - stored_matter += 10 - playsound(src, 'sound/machines/click.ogg', 10, 1) - to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.") - return - -/obj/item/weapon/rsf/CtrlClick(mob/living/user) - if(!Adjacent(user) || !istype(user)) - to_chat(user,"You are too far away.") - return - var/glass_choice = tgui_input_list(user, "Please choose which type of glass you would like to produce.", "Glass Choice", container_types) - - if(glass_choice) - glasstype = container_types[glass_choice] - else - glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass - -/obj/item/weapon/rsf/attack_self(mob/user as mob) - playsound(src, 'sound/effects/pop.ogg', 50, 0) - if (mode == 1) - mode = 2 - to_chat(user,"Changed dispensing mode to 'Container'.") - return - if(mode == 2) - mode = 3 - to_chat(user,"Changed dispensing mode to 'Metamorphic Glass: Pint'") //YW Changes begin - return - if(mode == 3) - mode = 4 - to_chat(user,"Changed dispensing mode to 'Paper'") - return - if(mode == 4) - mode = 5 - to_chat(user,"Changed dispensing mode to 'Pen'") - return - if(mode == 5) - mode = 6 - to_chat(user,"Changed dispensing mode to 'Dice Pack'") - return - if(mode == 6) - mode = 1 - to_chat(user,"Changed dispensing mode to 'Cigarette'") // YW Changes end - return - -/obj/item/weapon/rsf/afterattack(atom/A, mob/user as mob, proximity) - - if(!proximity) return - - if(istype(user,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - if(R.stat || !R.cell || R.cell.charge <= 0) - return - else - if(stored_matter <= 0) - return - - if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor)) - return - - playsound(src, 'sound/machines/click.ogg', 10, 1) - var/used_energy = 0 - var/obj/product - - switch(mode) - if(1) - product = new /obj/item/clothing/mask/smokable/cigarette() - used_energy = 10 - if(2) - product = new glasstype() - used_energy = 50 - if(3) - product = new /obj/item/weapon/reagent_containers/food/drinks/metaglass() //YW Changes begin - used_energy = 50 - if(4) - product = new /obj/item/weapon/paper() - used_energy = 10 - if(5) - product = new /obj/item/weapon/pen() - used_energy = 50 - if(6) //YW Changes end - product = new /obj/item/weapon/storage/pill_bottle/dice() - used_energy = 200 - - to_chat(user,"Dispensing [product ? product : "product"]...") - product.loc = get_turf(A) - - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.cell) - R.cell.use(used_energy) - else - stored_matter-- - to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.") +/* +CONTAINS: +RSF + +*/ + +/obj/item/weapon/rsf + name = "\improper Rapid-Service-Fabricator" + desc = "A device used to rapidly deploy service items." + description_info = "Control Clicking on the device will allow you to choose the glass it dispenses when in the proper mode." + icon = 'icons/obj/tools_vr.dmi' //VOREStation Edit + icon_state = "rsf" //VOREStation Edit + opacity = 0 + density = FALSE + anchored = FALSE + matter = list(DEFAULT_WALL_MATERIAL = 25000) + var/stored_matter = 30 + var/mode = 1 + var/obj/item/weapon/reagent_containers/glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass + + var/list/container_types = list( + "metamorphic glass" = /obj/item/weapon/reagent_containers/food/drinks/metaglass, + "metamorphic pint glass" = /obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint, + "half-pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/square, + "rocks glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks, + "milkshake glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake, + "cocktail glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail, + "shot glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot, + "pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint, + "mug" = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug, + "wine glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine, + "condiment bottle" = /obj/item/weapon/reagent_containers/food/condiment + ) + + w_class = ITEMSIZE_NORMAL + +/obj/item/weapon/rsf/examine(mob/user) + . = ..() + if(get_dist(user, src) == 0) + . += "It currently holds [stored_matter]/30 fabrication-units." + +/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if (istype(W, /obj/item/weapon/rcd_ammo)) + + if ((stored_matter + 10) > 30) + to_chat(user, "The RSF can't hold any more matter.") + return + + qdel(W) + + stored_matter += 10 + playsound(src, 'sound/machines/click.ogg', 10, 1) + to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.") + return + +/obj/item/weapon/rsf/CtrlClick(mob/living/user) + if(!Adjacent(user) || !istype(user)) + to_chat(user,"You are too far away.") + return + var/glass_choice = tgui_input_list(user, "Please choose which type of glass you would like to produce.", "Glass Choice", container_types) + + if(glass_choice) + glasstype = container_types[glass_choice] + else + glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass + +/obj/item/weapon/rsf/attack_self(mob/user as mob) + playsound(src, 'sound/effects/pop.ogg', 50, 0) + if (mode == 1) + mode = 2 + to_chat(user,"Changed dispensing mode to 'Container'.") + return + if(mode == 2) + mode = 3 + to_chat(user,"Changed dispensing mode to 'Metamorphic Glass: Pint'") //YW Changes begin + return + if(mode == 3) + mode = 4 + to_chat(user,"Changed dispensing mode to 'Paper'") + return + if(mode == 4) + mode = 5 + to_chat(user,"Changed dispensing mode to 'Pen'") + return + if(mode == 5) + mode = 6 + to_chat(user,"Changed dispensing mode to 'Dice Pack'") + return + if(mode == 6) + mode = 1 + to_chat(user,"Changed dispensing mode to 'Cigarette'") // YW Changes end + return + +/obj/item/weapon/rsf/afterattack(atom/A, mob/user as mob, proximity) + + if(!proximity) return + + if(istype(user,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = user + if(R.stat || !R.cell || R.cell.charge <= 0) + return + else + if(stored_matter <= 0) + return + + if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor)) + return + + playsound(src, 'sound/machines/click.ogg', 10, 1) + var/used_energy = 0 + var/obj/product + + switch(mode) + if(1) + product = new /obj/item/clothing/mask/smokable/cigarette() + used_energy = 10 + if(2) + product = new glasstype() + used_energy = 50 + if(3) + product = new /obj/item/weapon/reagent_containers/food/drinks/metaglass() //YW Changes begin + used_energy = 50 + if(4) + product = new /obj/item/weapon/paper() + used_energy = 10 + if(5) + product = new /obj/item/weapon/pen() + used_energy = 50 + if(6) //YW Changes end + product = new /obj/item/weapon/storage/pill_bottle/dice() + used_energy = 200 + + to_chat(user,"Dispensing [product ? product : "product"]...") + product.loc = get_turf(A) + + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.cell) + R.cell.use(used_energy) + else + stored_matter-- + to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.") diff --git a/code/game/objects/items/weapons/augment_items.dm b/code/game/objects/items/weapons/augment_items.dm index bfef21ae13..29db229cae 100644 --- a/code/game/objects/items/weapons/augment_items.dm +++ b/code/game/objects/items/weapons/augment_items.dm @@ -1,37 +1,37 @@ -// **For augment items that aren't subtypes of other things.** - -/obj/item/weapon/melee/augment - name = "integrated item" - desc = "A surprisingly non-descript item, integrated into its user. You probably shouldn't be seeing this." - icon = 'icons/obj/surgery.dmi' - icon_state = "augment_box" - - -/obj/item/weapon/melee/augment/blade - name = "handblade" - desc = "A sleek-looking telescopic blade that fits inside the hand. Favored by infiltration specialists and assassins." - icon_state = "augment_handblade" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - w_class = ITEMSIZE_SMALL - force = 15 - armor_penetration = 25 - sharp = TRUE - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - defend_chance = 10 - projectile_parry_chance = 5 - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/weapon/melee/augment/blade/arm - name = "armblade" - desc = "A sleek-looking cybernetic blade that cleaves through people like butter. Favored by psychopaths and assassins." - icon_state = "augment_armblade" - w_class = ITEMSIZE_HUGE - force = 30 - armor_penetration = 15 - edge = TRUE - pry = 1 - defend_chance = 40 +// **For augment items that aren't subtypes of other things.** + +/obj/item/weapon/melee/augment + name = "integrated item" + desc = "A surprisingly non-descript item, integrated into its user. You probably shouldn't be seeing this." + icon = 'icons/obj/surgery.dmi' + icon_state = "augment_box" + + +/obj/item/weapon/melee/augment/blade + name = "handblade" + desc = "A sleek-looking telescopic blade that fits inside the hand. Favored by infiltration specialists and assassins." + icon_state = "augment_handblade" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + w_class = ITEMSIZE_SMALL + force = 15 + armor_penetration = 25 + sharp = TRUE + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + defend_chance = 10 + projectile_parry_chance = 5 + hitsound = 'sound/weapons/bladeslice.ogg' + +/obj/item/weapon/melee/augment/blade/arm + name = "armblade" + desc = "A sleek-looking cybernetic blade that cleaves through people like butter. Favored by psychopaths and assassins." + icon_state = "augment_armblade" + w_class = ITEMSIZE_HUGE + force = 30 + armor_penetration = 15 + edge = TRUE + pry = 1 + defend_chance = 40 projectile_parry_chance = 20 \ No newline at end of file diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index b2405e9d1b..46c7f38751 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -1,768 +1,768 @@ -/* -CONTAINS: -MATCHES -CIGARETTES -CIGARS -SMOKING PIPES -CUSTOM CIGS -CHEAP LIGHTERS -ZIPPO - -CIGARETTE PACKETS ARE IN FANCY.DM -*/ - -//For anything that can light stuff on fire -/obj/item/weapon/flame - var/lit = 0 - -/obj/item/weapon/flame/is_hot() - return lit - -/////////// -//MATCHES// -/////////// -/obj/item/weapon/flame/match - name = "match" - desc = "A simple match stick, used for lighting fine smokables." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "match_unlit" - var/burnt = 0 - var/smoketime = 5 - w_class = ITEMSIZE_TINY - origin_tech = list(TECH_MATERIAL = 1) - slot_flags = SLOT_EARS - attack_verb = list("burnt", "singed") - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - -/obj/item/weapon/flame/match/process() - if(isliving(loc)) - var/mob/living/M = loc - M.IgniteMob() - var/turf/location = get_turf(src) - smoketime-- - if(smoketime < 1) - burn_out() - return - if(location) - location.hotspot_expose(700, 5) - return - -/obj/item/weapon/flame/match/dropped(mob/user as mob) - //If dropped, put ourselves out - //not before lighting up the turf we land on, though. - if(lit) - spawn(0) - var/turf/location = src.loc - if(istype(location)) - location.hotspot_expose(700, 5) - burn_out() - return ..() - -/obj/item/weapon/flame/match/proc/light(var/mob/user) - playsound(src, 'sound/items/cigs_lighters/matchstick_lit.ogg', 25, 0, -1) - lit = 1 - damtype = "burn" - icon_state = "match_lit" - name = "burning match" - desc = "A match. This one is presently on fire." - START_PROCESSING(SSobj, src) - -/obj/item/weapon/flame/match/proc/burn_out() - lit = 0 - burnt = 1 - damtype = "brute" - icon_state = "match_burnt" - item_state = "cigoff" - name = "burnt match" - desc = "A match. This one has seen better days." - STOP_PROCESSING(SSobj, src) - -////////////////// -//FINE SMOKABLES// -////////////////// -/obj/item/clothing/mask/smokable - name = "smokable item" - desc = "You're not sure what this is. You should probably ahelp it." - body_parts_covered = 0 - var/lit = 0 - var/icon_on - var/type_butt = null - var/chem_volume = 0 - var/max_smoketime = 0 //Related to sprites - var/smoketime = 0 - var/is_pipe = 0 //Prevents a runtime with pipes - var/matchmes = "USER lights NAME with FLAME" - var/lightermes = "USER lights NAME with FLAME" - var/zippomes = "USER lights NAME with FLAME" - var/weldermes = "USER lights NAME with FLAME" - var/ignitermes = "USER lights NAME with FLAME" - var/brand - blood_sprite_state = null //Can't bloody these - drop_sound = 'sound/items/cigs_lighters/cig_snuff.ogg' - -/obj/item/clothing/mask/smokable/Initialize() - . = ..() - flags |= NOREACT // so it doesn't react until you light it - create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 - if(smoketime && !max_smoketime) - max_smoketime = smoketime - -/obj/item/clothing/mask/smokable/proc/smoke(amount) - if(smoketime > max_smoketime) - smoketime = max_smoketime - smoketime -= amount - if(reagents && reagents.total_volume) // check if it has any reagents at all - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob - reagents.trans_to_mob(C, amount, CHEM_INGEST, 1.5) // I don't predict significant balance issues by letting blunts actually WORK. - else // else just remove some of the reagents - reagents.remove_any(REM) - -/obj/item/clothing/mask/smokable/process() - var/turf/location = get_turf(src) - smoke(1) - if(smoketime < 1) - die() - return - if(location) - location.hotspot_expose(700, 5) - -/obj/item/clothing/mask/smokable/update_icon() - if(lit) - icon_state = "[initial(icon_state)]_on" - item_state = "[initial(item_state)]_on" - else if(smoketime < max_smoketime) - if(is_pipe) - icon_state = initial(icon_state) - item_state = initial(item_state) - else - icon_state = "[initial(icon_state)]_burnt" - item_state = "[initial(item_state)]_burnt" - if(ismob(loc)) - var/mob/living/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(1) - ..() - -/obj/item/clothing/mask/smokable/examine(mob/user) - . = ..() - - if(!is_pipe) - var/smoke_percent = round((smoketime / max_smoketime) * 100) - switch(smoke_percent) - if(90 to INFINITY) - . += "[src] is still fresh." - if(60 to 90) - . += "[src] has a good amount of burn time remaining." - if(30 to 60) - . += "[src] is about half finished." - if(10 to 30) - . += "[src] is starting to burn low." - else - . += "[src] is nearly burnt out!" - -/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].") - if(!src.lit) - src.lit = 1 - playsound(src, 'sound/items/cigs_lighters/cig_light.ogg', 75, 1, -1) - damtype = "fire" - if(reagents.get_reagent_amount("phoron")) // the phoron explodes when exposed to fire - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount("phoron") / 2.5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - flags &= ~NOREACT // allowing reagents to react after being lit - reagents.handle_reactions() - var/turf/T = get_turf(src) - T.visible_message(flavor_text) - update_icon() - set_light(2, 0.25, "#E38F46") - START_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0) - var/turf/T = get_turf(src) - set_light(0) - playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) - STOP_PROCESSING(SSobj, src) - if (type_butt) - var/obj/item/butt = new type_butt(T) - transfer_fingerprints_to(butt) - if(brand) - butt.desc += " This one is \a [brand]." - if(ismob(loc)) - var/mob/living/M = loc - if (!nomessage) - to_chat(M, "Your [name] goes out.") - M.remove_from_mob(src) //un-equip it so the overlays can update - M.update_inv_wear_mask(0) - qdel(src) - else - new /obj/effect/decal/cleanable/ash(T) - if(ismob(loc)) - var/mob/living/M = loc - if (!nomessage) - to_chat(M, "Your [name] goes out, and you empty the ash.") - playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) - lit = 0 - icon_state = initial(icon_state) - item_state = initial(item_state) - M.update_inv_wear_mask(0) - smoketime = 0 - reagents.clear_reagents() - name = "empty [initial(name)]" - -/obj/item/clothing/mask/smokable/proc/quench() - lit = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/item/clothing/mask/smokable/attack(mob/living/carbon/human/H, mob/user, def_zone) - if(lit && H == user && istype(H)) - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(H, "\The [blocked] is in the way!") - return 1 - to_chat(H, "You take a drag on your [name].") - playsound(src, 'sound/items/cigs_lighters/inhale.ogg', 50, 0, -1) - smoke(5) - return 1 - return ..() - -/obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(W.is_hot()) - var/text = matchmes - if(istype(W, /obj/item/weapon/flame/match)) - text = matchmes - else if(istype(W, /obj/item/weapon/flame/lighter/zippo)) - text = zippomes - else if(istype(W, /obj/item/weapon/flame/lighter)) - text = lightermes - else if(istype(W, /obj/item/weapon/weldingtool)) - text = weldermes - else if(istype(W, /obj/item/device/assembly/igniter)) - text = ignitermes - text = replacetext(text, "USER", "[user]") - text = replacetext(text, "NAME", "[name]") - text = replacetext(text, "FLAME", "[W.name]") - light(text) - -/obj/item/clothing/mask/smokable/attack(var/mob/living/M, var/mob/living/user, def_zone) - if(istype(M) && M.on_fire) - user.do_attack_animation(M) - light("[user] coldly lights the [name] with the burning body of [M].") - return 1 - else - return ..() - -/obj/item/clothing/mask/smokable/water_act(amount) - if(amount >= 5) - quench() - -/obj/item/clothing/mask/smokable/cigarette - name = "cigarette" - desc = "A roll of tobacco and nicotine." - icon_state = "cig" - item_state = "cig" - throw_speed = 0.5 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS | SLOT_MASK - attack_verb = list("burnt", "singed") - type_butt = /obj/item/trash/cigbutt - chem_volume = 15 - max_smoketime = 300 - smoketime = 300 - var/nicotine_amt = 2 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to light their NAME with FLAME." - zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." - weldermes = "USER casually lights the NAME with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME." - -/obj/item/clothing/mask/smokable/cigarette/Initialize() - . = ..() - if(nicotine_amt) - reagents.add_reagent("nicotine", nicotine_amt) - -/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - - if(istype(W, /obj/item/weapon/melee/energy/sword)) - var/obj/item/weapon/melee/energy/sword/S = W - if(S.active) - light("[user] swings their [W], barely missing their nose. They light their [name] in the process.") - - return - -/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity) - ..() - if(!proximity) - return - if(istype(glass)) //you can dip cigarettes into beakers - var/transfered = glass.reagents.trans_to_obj(src, chem_volume) - if(transfered) //if reagents were transfered, show the message - to_chat(user, "You dip \the [src] into \the [glass].") - else //if not, either the beaker was empty, or the cigarette was full - if(!glass.reagents.total_volume) - to_chat(user, "[glass] is empty.") - else - to_chat(user, "[src] is full.") - -/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob) - if(lit == 1) - if(user.a_intent == I_HURT) - user.visible_message("[user] drops and treads on the lit [src], putting it out instantly.") - playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) - die(1) - else - user.visible_message("[user] puts out \the [src].") - quench() - return ..() - -//////////// -// CIGARS // -//////////// -/obj/item/clothing/mask/smokable/cigarette/cigar - name = "premium cigar" - desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" - description_fluff = "While the label does say that this is a 'premium cigar', it \ - really cannot match other types of cigars on the market. Is it a quality \ - cigarette? Perhaps. Was it hand-made with care? No." - icon_state = "cigar2" - type_butt = /obj/item/trash/cigbutt/cigarbutt - throw_speed = 0.5 - item_state = "cigar" - max_smoketime = 1500 - smoketime = 1500 - chem_volume = 20 - nicotine_amt = 4 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to offend their NAME by lighting it with FLAME." - zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." - weldermes = "USER insults NAME by lighting it with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." - -/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba - name = "\improper Cohiba Robusto cigar" - desc = "There's little more you could want from a cigar." - description_fluff = "Cohiba has been a popular cigar company for centuries. \ - They are still based out of Cuba and refuse to expand and therefore have a very \ - limited quantity, making their cigars coveted all through known space. Robusto \ - is one of their most popular shapes of cigars." - icon_state = "cigar2" - nicotine_amt = 7 - -/obj/item/clothing/mask/smokable/cigarette/cigar/havana - name = "premium Havanian cigar" - desc = "Save these for the fancy-pantses at the next CentCom black tie reception. \ - You can't blow the smoke from such majestic stogies in just anyone's face." - description_fluff = "'Havanian' is an umbrella term for any cigar made in the \ - typical handmade style of Cuba. This particular cigar is from Gilthari's cigar \ - manufacturers and produced galaxy-wide. While this way of making quality cigars \ - has become slightly bastardized over the years, overall quality has remained \ - relatively the same, even if there is a large quantity of 'Havanian' cigars." - icon_state = "cigar2" - max_smoketime = 7200 - smoketime = 7200 - chem_volume = 30 - nicotine_amt = 10 - -/obj/item/trash/cigbutt - name = "cigarette butt" - desc = "A manky old cigarette butt." - icon = 'icons/inventory/face/item.dmi' - icon_state = "cigbutt" - randpixel = 10 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - throwforce = 1 - -/obj/item/trash/cigbutt/Initialize() - . = ..() - randpixel_xy() - transform = turn(transform,rand(0,360)) - -/obj/item/trash/cigbutt/cigarbutt - name = "cigar butt" - desc = "A manky old cigar butt." - icon_state = "cigarbutt" - -/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - - user.update_inv_wear_mask(0) - user.update_inv_l_hand(0) - user.update_inv_r_hand(1) - -///////////////// -//SMOKING PIPES// -///////////////// -/obj/item/clothing/mask/smokable/pipe - name = "smoking pipe" - desc = "A pipe, for smoking. Made of fine, stained cherry wood." - description_fluff = "ClassiCo Accessories and Haberdashers, originating out of Mars, \ - claim to produce products 'for the modern gentlefolk'. Most of their items are high-end \ - and expensive, but they pledge to back their prices up with quality, and usually do." - icon_state = "pipe" - item_state = "pipe" - smoketime = 0 - chem_volume = 50 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to light their NAME with FLAME." - zippomes = "With much care, USER lights their NAME with their FLAME." - weldermes = "USER recklessly lights NAME with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." - is_pipe = 1 - -/obj/item/clothing/mask/smokable/pipe/New() - ..() - name = "empty [initial(name)]" - -/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob) - if(lit == 1) - if(user.a_intent == I_HURT) - user.visible_message("[user] empties the lit [src] on the floor!.") - playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) - die(1) - else - user.visible_message("[user] puts out \the [src].") - quench() - -/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/melee/energy/sword)) - return - - ..() - - if (istype(W, /obj/item/weapon/reagent_containers/food/snacks)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W - if (!G.dry) - to_chat(user, "[G] must be dried before you stuff it into [src].") - return - if (smoketime) - to_chat(user, "[src] is already packed.") - return - max_smoketime = 1000 - smoketime = 1000 - if(G.reagents) - G.reagents.trans_to_obj(src, G.reagents.total_volume) - name = "[G.name]-packed [initial(name)]" - qdel(G) - - else if(istype(W, /obj/item/weapon/flame/lighter)) - var/obj/item/weapon/flame/lighter/L = W - if(L.lit) - light("[user] manages to light their [name] with [W].") - - else if(istype(W, /obj/item/weapon/flame/match)) - var/obj/item/weapon/flame/match/M = W - if(M.lit) - light("[user] lights their [name] with their [W].") - - else if(istype(W, /obj/item/device/assembly/igniter)) - light("[user] fiddles with [W], and manages to light their [name] with the power of science.") - - user.update_inv_wear_mask(0) - user.update_inv_l_hand(0) - user.update_inv_r_hand(1) - -/obj/item/clothing/mask/smokable/pipe/cobpipe - name = "corn cob pipe" - desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters." - icon_state = "cobpipe" - item_state = "cobpipe" - chem_volume = 35 - -/obj/item/clothing/mask/smokable/pipe/bonepipe - name = "Europan bone pipe" - desc = "A smoking pipe made out of the bones of the Europan bone whale." - description_fluff = "While most commonly associated with bone charms, bones from various sea creatures on Europa are used in a \ - variety of goods, such as this smoking pipe. While smoking in submarines is often an uncommon occurrence, due to a lack of \ - available air or space, these pipes are a common sight in the many stations of Europa. Higher-quality pipes typically have \ - scenes etched into their bones, and can tell the story of their owner's time on Europa." - icon_state = "bonepipe" - item_state = "bonepipe" - chem_volume = 30 - -/////////////// -//CUSTOM CIGS// -/////////////// -//and by custom cigs i mean craftable joints. smoke weed every day - -/obj/item/clothing/mask/smokable/cigarette/joint - name = "joint" - desc = "A joint lovingly rolled and crafted with care. Blaze it." - icon_state = "joint" - max_smoketime = 400 - smoketime = 400 - chem_volume = 25 - -/obj/item/clothing/mask/smokable/cigarette/joint/blunt - name = "blunt" - desc = "A blunt lovingly rolled and crafted with care. Blaze it." - icon_state = "cigar" - max_smoketime = 500 - smoketime = 500 - nicotine_amt = 4 - chem_volume = 45 - -/obj/item/weapon/reagent_containers/rollingpaper - name = "rolling paper" - desc = "A small, thin piece of easily flammable paper, commonly used for rolling and smoking various dried plants." - description_fluff = "The legalization of certain substances propelled the sale of rolling \ - papers through the roof. Now almost every Trans-stellar produces a variety, often of questionable quality." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cig paper" - volume = 25 - var/obj/item/clothing/mask/smokable/cigarette/crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint - -/obj/item/weapon/reagent_containers/rollingpaper/blunt - name = "blunt wrap" - desc = "A small piece of easily flammable paper similar to that which encases cigars. It's made out of tobacco, bigger than a standard rolling paper, and will last longer." - icon_state = "blunt paper" - volume = 45 - crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint/blunt - -/obj/item/weapon/reagent_containers/rollingpaper/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/reagent_containers/food/snacks)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W - if (!G.dry) //This prevents people from just stuffing cheeseburgers into their joint - to_chat(user, "[G.name] must be dried before you add it to [src].") - return - if (G.reagents.total_volume + src.reagents.total_volume > src.reagents.maximum_volume) //Check that we don't have too much already in the paper before adding things - to_chat(user, "The [src] is too full to add [G.name].") - return - if (src.reagents.total_volume == 0) - if (istype(src, /obj/item/weapon/reagent_containers/rollingpaper/blunt)) //update the icon if this is the first thing we're adding to the paper - src.icon_state = "blunt_full" - else - src.icon_state = "paper_full" - to_chat(user, "You add the [G.name] to the [src.name].") - src.add_fingerprint(user) - if(G.reagents) - G.reagents.trans_to_obj(src, G.reagents.total_volume) //adds the reagents from the plant into the paper - user.drop_from_inventory(G) - qdel(G) - -/obj/item/weapon/reagent_containers/rollingpaper/attack_self(mob/living/user) - if(!src.reagents) //don't roll an empty joint - to_chat(user, "There is nothing in [src]. Add something to it first.") - return - var/obj/item/clothing/mask/smokable/cigarette/J = new crafted_type() - to_chat(user,"You roll the [src] into a blunt!") - J.add_fingerprint(user) - if(src.reagents) - src.reagents.trans_to_obj(J, src.reagents.total_volume) - user.drop_from_inventory(src) - user.put_in_hands(J) - qdel(src) - -///////// -//CHEAP// -///////// -/obj/item/weapon/flame/lighter - name = "cheap lighter" - desc = "A cheap-as-free lighter." - description_fluff = "The 'hand-made in Altair' sticker underneath is a charming way of \ - saying 'Made with prison labour'. It's no wonder the company can sell these things so cheap." - icon = 'icons/obj/lighters.dmi' - icon_state = "lighter" - item_state = "lighter" - w_class = ITEMSIZE_TINY - throwforce = 4 - slot_flags = SLOT_BELT - attack_verb = list("burnt", "singed") - var/base_state - /// Sounds - var/activation_sound = 'sound/items/lighter_on.ogg' - var/deactivation_sound = 'sound/items/lighter_off.ogg' - /// Color of the flame and how big the flame is (pulled from Welder code) - var/flame_color = "#FF9933" - var/flame_intensity = 2 - /// Color List - var/random_color = FALSE - var/available_colors = list(COLOR_ASSEMBLY_BLACK, - COLOR_ASSEMBLY_BGRAY, - COLOR_ASSEMBLY_WHITE, - COLOR_ASSEMBLY_RED, - COLOR_ASSEMBLY_ORANGE, - COLOR_ASSEMBLY_BEIGE, - COLOR_ASSEMBLY_BROWN, - COLOR_ASSEMBLY_GOLD, - COLOR_ASSEMBLY_YELLOW, - COLOR_ASSEMBLY_GURKHA, - COLOR_ASSEMBLY_LGREEN, - COLOR_ASSEMBLY_GREEN, - COLOR_ASSEMBLY_LBLUE, - COLOR_ASSEMBLY_BLUE, - COLOR_ASSEMBLY_PURPLE, - COLOR_ASSEMBLY_HOT_PINK) - -// TODO: Remove this path from POIs and loose maps (it's no longer needed) -/obj/item/weapon/flame/lighter/random - -// Randomizes Cheap Lighters on Spawn -/obj/item/weapon/flame/lighter/Initialize() - . = ..() - var/image/I = image(icon, "lighter-[pick("trans","tall","matte")]") - I.color = pick(available_colors) - add_overlay(I) - -/obj/item/weapon/flame/lighter/attack_self(mob/living/user) - if(!lit) - lit = 1 - icon_state = "lighteron" - playsound(src, activation_sound, 75, 1) - user.visible_message("After a few attempts, [user] manages to light the [src].") - - set_light(2, 0.5, "#FF9933") - START_PROCESSING(SSobj, src) - update_icon() - else - lit = 0 - icon_state = "lighter" - playsound(src, deactivation_sound, 75, 1) - user.visible_message("[user] quietly shuts off the [src].") - - set_light(0) - STOP_PROCESSING(SSobj, src) - update_icon() - return - -/obj/item/weapon/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(lit == 1) - M.IgniteMob() - add_attack_logs(user,M,"Lit on fire with [src]") - - if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) - var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if(M == user) - cig.attackby(src, user) - else - if(istype(src, /obj/item/weapon/flame/lighter/zippo)) - cig.light("[user] whips the [name] out and holds it for [M].") - else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") - else - ..() - -/obj/item/weapon/flame/lighter/process() - var/turf/location = get_turf(src) - if(location) - location.hotspot_expose(700, 5) - return - -///////// -//ZIPPO// -///////// -/obj/item/weapon/flame/lighter/zippo - name = "\improper Zippo lighter" - desc = "The zippo." - description_fluff = "Still going after all these years." - icon_state = "zippo" - item_state = "zippo" - activation_sound = 'sound/items/zippo_on.ogg' - deactivation_sound = 'sound/items/zippo_off.ogg' - -/obj/item/weapon/flame/lighter/zippo/Initialize() - . = ..() - cut_overlays() //Prevents the Cheap Lighter overlay from appearing on this - -/obj/item/weapon/flame/lighter/zippo/attack_self(mob/living/user) - if(!base_state) - base_state = icon_state - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - playsound(src, activation_sound, 75, 1) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") - - set_light(2, 0.5, "#FF9933") - START_PROCESSING(SSobj, src) - else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - playsound(src, deactivation_sound, 75, 1) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") - - set_light(0) - STOP_PROCESSING(SSobj, src) - return - -//Here we add Zippo skins. - -/obj/item/weapon/flame/lighter/zippo/black - name = "\improper holy Zippo lighter" - desc = "Only in regards to Christianity, that is." - icon_state = "blackzippo" - -/obj/item/weapon/flame/lighter/zippo/blue - name = "\improper blue Zippo lighter" - icon_state = "bluezippo" - -/obj/item/weapon/flame/lighter/zippo/engraved - name = "\improper engraved Zippo lighter" - icon_state = "engravedzippo" - item_state = "zippo" - -/obj/item/weapon/flame/lighter/zippo/gold - name = "\improper golden Zippo lighter" - icon_state = "goldzippo" - -/obj/item/weapon/flame/lighter/zippo/moff - name = "\improper moth Zippo lighter" - desc = "Too cute to be a Tymisian." - icon_state = "moffzippo" - -/obj/item/weapon/flame/lighter/zippo/red - name = "\improper red Zippo lighter" - icon_state = "redzippo" - -/obj/item/weapon/flame/lighter/zippo/ironic - name = "\improper ironic Zippo lighter" - desc = "What a quiant idea." - icon_state = "ironiczippo" - -/obj/item/weapon/flame/lighter/zippo/capitalist - name = "\improper capitalist Zippo lighter" - desc = "Made of gold and obsidian, this is truly not worth however much you spent on it." - icon_state = "cappiezippo" - -/obj/item/weapon/flame/lighter/zippo/communist - name = "\improper communist Zippo lighter" - desc = "All you need to spark a revolution." - icon_state = "commiezippo" - -/obj/item/weapon/flame/lighter/zippo/royal - name = "\improper royal Zippo lighter" - desc = "An incredibly fancy lighter, gilded and covered in the color of royalty." - icon_state = "royalzippo" - -/obj/item/weapon/flame/lighter/zippo/gonzo - name = "\improper Gonzo Zippo lighter" - desc = "A lighter with the iconic Gonzo fist painted on it." - icon_state = "gonzozippo" - -/obj/item/weapon/flame/lighter/zippo/rainbow - name = "\improper rainbow Zippo lighter" - icon_state = "rainbowzippo" - -/obj/item/weapon/flame/lighter/zippo/skull - name = "\improper badass Zippo lighter" - desc = "An absolutely badass zippo lighter. Just look at that skull!" +/* +CONTAINS: +MATCHES +CIGARETTES +CIGARS +SMOKING PIPES +CUSTOM CIGS +CHEAP LIGHTERS +ZIPPO + +CIGARETTE PACKETS ARE IN FANCY.DM +*/ + +//For anything that can light stuff on fire +/obj/item/weapon/flame + var/lit = 0 + +/obj/item/weapon/flame/is_hot() + return lit + +/////////// +//MATCHES// +/////////// +/obj/item/weapon/flame/match + name = "match" + desc = "A simple match stick, used for lighting fine smokables." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "match_unlit" + var/burnt = 0 + var/smoketime = 5 + w_class = ITEMSIZE_TINY + origin_tech = list(TECH_MATERIAL = 1) + slot_flags = SLOT_EARS + attack_verb = list("burnt", "singed") + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + +/obj/item/weapon/flame/match/process() + if(isliving(loc)) + var/mob/living/M = loc + M.IgniteMob() + var/turf/location = get_turf(src) + smoketime-- + if(smoketime < 1) + burn_out() + return + if(location) + location.hotspot_expose(700, 5) + return + +/obj/item/weapon/flame/match/dropped(mob/user as mob) + //If dropped, put ourselves out + //not before lighting up the turf we land on, though. + if(lit) + spawn(0) + var/turf/location = src.loc + if(istype(location)) + location.hotspot_expose(700, 5) + burn_out() + return ..() + +/obj/item/weapon/flame/match/proc/light(var/mob/user) + playsound(src, 'sound/items/cigs_lighters/matchstick_lit.ogg', 25, 0, -1) + lit = 1 + damtype = "burn" + icon_state = "match_lit" + name = "burning match" + desc = "A match. This one is presently on fire." + START_PROCESSING(SSobj, src) + +/obj/item/weapon/flame/match/proc/burn_out() + lit = 0 + burnt = 1 + damtype = "brute" + icon_state = "match_burnt" + item_state = "cigoff" + name = "burnt match" + desc = "A match. This one has seen better days." + STOP_PROCESSING(SSobj, src) + +////////////////// +//FINE SMOKABLES// +////////////////// +/obj/item/clothing/mask/smokable + name = "smokable item" + desc = "You're not sure what this is. You should probably ahelp it." + body_parts_covered = 0 + var/lit = 0 + var/icon_on + var/type_butt = null + var/chem_volume = 0 + var/max_smoketime = 0 //Related to sprites + var/smoketime = 0 + var/is_pipe = 0 //Prevents a runtime with pipes + var/matchmes = "USER lights NAME with FLAME" + var/lightermes = "USER lights NAME with FLAME" + var/zippomes = "USER lights NAME with FLAME" + var/weldermes = "USER lights NAME with FLAME" + var/ignitermes = "USER lights NAME with FLAME" + var/brand + blood_sprite_state = null //Can't bloody these + drop_sound = 'sound/items/cigs_lighters/cig_snuff.ogg' + +/obj/item/clothing/mask/smokable/Initialize() + . = ..() + flags |= NOREACT // so it doesn't react until you light it + create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 + if(smoketime && !max_smoketime) + max_smoketime = smoketime + +/obj/item/clothing/mask/smokable/proc/smoke(amount) + if(smoketime > max_smoketime) + smoketime = max_smoketime + smoketime -= amount + if(reagents && reagents.total_volume) // check if it has any reagents at all + if(ishuman(loc)) + var/mob/living/carbon/human/C = loc + if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob + reagents.trans_to_mob(C, amount, CHEM_INGEST, 1.5) // I don't predict significant balance issues by letting blunts actually WORK. + else // else just remove some of the reagents + reagents.remove_any(REM) + +/obj/item/clothing/mask/smokable/process() + var/turf/location = get_turf(src) + smoke(1) + if(smoketime < 1) + die() + return + if(location) + location.hotspot_expose(700, 5) + +/obj/item/clothing/mask/smokable/update_icon() + if(lit) + icon_state = "[initial(icon_state)]_on" + item_state = "[initial(item_state)]_on" + else if(smoketime < max_smoketime) + if(is_pipe) + icon_state = initial(icon_state) + item_state = initial(item_state) + else + icon_state = "[initial(icon_state)]_burnt" + item_state = "[initial(item_state)]_burnt" + if(ismob(loc)) + var/mob/living/M = loc + M.update_inv_wear_mask(0) + M.update_inv_l_hand(0) + M.update_inv_r_hand(1) + ..() + +/obj/item/clothing/mask/smokable/examine(mob/user) + . = ..() + + if(!is_pipe) + var/smoke_percent = round((smoketime / max_smoketime) * 100) + switch(smoke_percent) + if(90 to INFINITY) + . += "[src] is still fresh." + if(60 to 90) + . += "[src] has a good amount of burn time remaining." + if(30 to 60) + . += "[src] is about half finished." + if(10 to 30) + . += "[src] is starting to burn low." + else + . += "[src] is nearly burnt out!" + +/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].") + if(!src.lit) + src.lit = 1 + playsound(src, 'sound/items/cigs_lighters/cig_light.ogg', 75, 1, -1) + damtype = "fire" + if(reagents.get_reagent_amount("phoron")) // the phoron explodes when exposed to fire + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round(reagents.get_reagent_amount("phoron") / 2.5, 1), get_turf(src), 0, 0) + e.start() + qdel(src) + return + if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0) + e.start() + qdel(src) + return + flags &= ~NOREACT // allowing reagents to react after being lit + reagents.handle_reactions() + var/turf/T = get_turf(src) + T.visible_message(flavor_text) + update_icon() + set_light(2, 0.25, "#E38F46") + START_PROCESSING(SSobj, src) + +/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0) + var/turf/T = get_turf(src) + set_light(0) + playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) + STOP_PROCESSING(SSobj, src) + if (type_butt) + var/obj/item/butt = new type_butt(T) + transfer_fingerprints_to(butt) + if(brand) + butt.desc += " This one is \a [brand]." + if(ismob(loc)) + var/mob/living/M = loc + if (!nomessage) + to_chat(M, "Your [name] goes out.") + M.remove_from_mob(src) //un-equip it so the overlays can update + M.update_inv_wear_mask(0) + qdel(src) + else + new /obj/effect/decal/cleanable/ash(T) + if(ismob(loc)) + var/mob/living/M = loc + if (!nomessage) + to_chat(M, "Your [name] goes out, and you empty the ash.") + playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) + lit = 0 + icon_state = initial(icon_state) + item_state = initial(item_state) + M.update_inv_wear_mask(0) + smoketime = 0 + reagents.clear_reagents() + name = "empty [initial(name)]" + +/obj/item/clothing/mask/smokable/proc/quench() + lit = 0 + STOP_PROCESSING(SSobj, src) + update_icon() + +/obj/item/clothing/mask/smokable/attack(mob/living/carbon/human/H, mob/user, def_zone) + if(lit && H == user && istype(H)) + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + to_chat(H, "\The [blocked] is in the way!") + return 1 + to_chat(H, "You take a drag on your [name].") + playsound(src, 'sound/items/cigs_lighters/inhale.ogg', 50, 0, -1) + smoke(5) + return 1 + return ..() + +/obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(W.is_hot()) + var/text = matchmes + if(istype(W, /obj/item/weapon/flame/match)) + text = matchmes + else if(istype(W, /obj/item/weapon/flame/lighter/zippo)) + text = zippomes + else if(istype(W, /obj/item/weapon/flame/lighter)) + text = lightermes + else if(istype(W, /obj/item/weapon/weldingtool)) + text = weldermes + else if(istype(W, /obj/item/device/assembly/igniter)) + text = ignitermes + text = replacetext(text, "USER", "[user]") + text = replacetext(text, "NAME", "[name]") + text = replacetext(text, "FLAME", "[W.name]") + light(text) + +/obj/item/clothing/mask/smokable/attack(var/mob/living/M, var/mob/living/user, def_zone) + if(istype(M) && M.on_fire) + user.do_attack_animation(M) + light("[user] coldly lights the [name] with the burning body of [M].") + return 1 + else + return ..() + +/obj/item/clothing/mask/smokable/water_act(amount) + if(amount >= 5) + quench() + +/obj/item/clothing/mask/smokable/cigarette + name = "cigarette" + desc = "A roll of tobacco and nicotine." + icon_state = "cig" + item_state = "cig" + throw_speed = 0.5 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS | SLOT_MASK + attack_verb = list("burnt", "singed") + type_butt = /obj/item/trash/cigbutt + chem_volume = 15 + max_smoketime = 300 + smoketime = 300 + var/nicotine_amt = 2 + matchmes = "USER lights their NAME with their FLAME." + lightermes = "USER manages to light their NAME with FLAME." + zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." + weldermes = "USER casually lights the NAME with FLAME." + ignitermes = "USER fiddles with FLAME, and manages to light their NAME." + +/obj/item/clothing/mask/smokable/cigarette/Initialize() + . = ..() + if(nicotine_amt) + reagents.add_reagent("nicotine", nicotine_amt) + +/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + + if(istype(W, /obj/item/weapon/melee/energy/sword)) + var/obj/item/weapon/melee/energy/sword/S = W + if(S.active) + light("[user] swings their [W], barely missing their nose. They light their [name] in the process.") + + return + +/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity) + ..() + if(!proximity) + return + if(istype(glass)) //you can dip cigarettes into beakers + var/transfered = glass.reagents.trans_to_obj(src, chem_volume) + if(transfered) //if reagents were transfered, show the message + to_chat(user, "You dip \the [src] into \the [glass].") + else //if not, either the beaker was empty, or the cigarette was full + if(!glass.reagents.total_volume) + to_chat(user, "[glass] is empty.") + else + to_chat(user, "[src] is full.") + +/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob) + if(lit == 1) + if(user.a_intent == I_HURT) + user.visible_message("[user] drops and treads on the lit [src], putting it out instantly.") + playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) + die(1) + else + user.visible_message("[user] puts out \the [src].") + quench() + return ..() + +//////////// +// CIGARS // +//////////// +/obj/item/clothing/mask/smokable/cigarette/cigar + name = "premium cigar" + desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" + description_fluff = "While the label does say that this is a 'premium cigar', it \ + really cannot match other types of cigars on the market. Is it a quality \ + cigarette? Perhaps. Was it hand-made with care? No." + icon_state = "cigar2" + type_butt = /obj/item/trash/cigbutt/cigarbutt + throw_speed = 0.5 + item_state = "cigar" + max_smoketime = 1500 + smoketime = 1500 + chem_volume = 20 + nicotine_amt = 4 + matchmes = "USER lights their NAME with their FLAME." + lightermes = "USER manages to offend their NAME by lighting it with FLAME." + zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." + weldermes = "USER insults NAME by lighting it with FLAME." + ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." + +/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba + name = "\improper Cohiba Robusto cigar" + desc = "There's little more you could want from a cigar." + description_fluff = "Cohiba has been a popular cigar company for centuries. \ + They are still based out of Cuba and refuse to expand and therefore have a very \ + limited quantity, making their cigars coveted all through known space. Robusto \ + is one of their most popular shapes of cigars." + icon_state = "cigar2" + nicotine_amt = 7 + +/obj/item/clothing/mask/smokable/cigarette/cigar/havana + name = "premium Havanian cigar" + desc = "Save these for the fancy-pantses at the next CentCom black tie reception. \ + You can't blow the smoke from such majestic stogies in just anyone's face." + description_fluff = "'Havanian' is an umbrella term for any cigar made in the \ + typical handmade style of Cuba. This particular cigar is from Gilthari's cigar \ + manufacturers and produced galaxy-wide. While this way of making quality cigars \ + has become slightly bastardized over the years, overall quality has remained \ + relatively the same, even if there is a large quantity of 'Havanian' cigars." + icon_state = "cigar2" + max_smoketime = 7200 + smoketime = 7200 + chem_volume = 30 + nicotine_amt = 10 + +/obj/item/trash/cigbutt + name = "cigarette butt" + desc = "A manky old cigarette butt." + icon = 'icons/inventory/face/item.dmi' + icon_state = "cigbutt" + randpixel = 10 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + throwforce = 1 + +/obj/item/trash/cigbutt/Initialize() + . = ..() + randpixel_xy() + transform = turn(transform,rand(0,360)) + +/obj/item/trash/cigbutt/cigarbutt + name = "cigar butt" + desc = "A manky old cigar butt." + icon_state = "cigarbutt" + +/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + +///////////////// +//SMOKING PIPES// +///////////////// +/obj/item/clothing/mask/smokable/pipe + name = "smoking pipe" + desc = "A pipe, for smoking. Made of fine, stained cherry wood." + description_fluff = "ClassiCo Accessories and Haberdashers, originating out of Mars, \ + claim to produce products 'for the modern gentlefolk'. Most of their items are high-end \ + and expensive, but they pledge to back their prices up with quality, and usually do." + icon_state = "pipe" + item_state = "pipe" + smoketime = 0 + chem_volume = 50 + matchmes = "USER lights their NAME with their FLAME." + lightermes = "USER manages to light their NAME with FLAME." + zippomes = "With much care, USER lights their NAME with their FLAME." + weldermes = "USER recklessly lights NAME with FLAME." + ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." + is_pipe = 1 + +/obj/item/clothing/mask/smokable/pipe/New() + ..() + name = "empty [initial(name)]" + +/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob) + if(lit == 1) + if(user.a_intent == I_HURT) + user.visible_message("[user] empties the lit [src] on the floor!.") + playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) + die(1) + else + user.visible_message("[user] puts out \the [src].") + quench() + +/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/melee/energy/sword)) + return + + ..() + + if (istype(W, /obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W + if (!G.dry) + to_chat(user, "[G] must be dried before you stuff it into [src].") + return + if (smoketime) + to_chat(user, "[src] is already packed.") + return + max_smoketime = 1000 + smoketime = 1000 + if(G.reagents) + G.reagents.trans_to_obj(src, G.reagents.total_volume) + name = "[G.name]-packed [initial(name)]" + qdel(G) + + else if(istype(W, /obj/item/weapon/flame/lighter)) + var/obj/item/weapon/flame/lighter/L = W + if(L.lit) + light("[user] manages to light their [name] with [W].") + + else if(istype(W, /obj/item/weapon/flame/match)) + var/obj/item/weapon/flame/match/M = W + if(M.lit) + light("[user] lights their [name] with their [W].") + + else if(istype(W, /obj/item/device/assembly/igniter)) + light("[user] fiddles with [W], and manages to light their [name] with the power of science.") + + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + +/obj/item/clothing/mask/smokable/pipe/cobpipe + name = "corn cob pipe" + desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters." + icon_state = "cobpipe" + item_state = "cobpipe" + chem_volume = 35 + +/obj/item/clothing/mask/smokable/pipe/bonepipe + name = "Europan bone pipe" + desc = "A smoking pipe made out of the bones of the Europan bone whale." + description_fluff = "While most commonly associated with bone charms, bones from various sea creatures on Europa are used in a \ + variety of goods, such as this smoking pipe. While smoking in submarines is often an uncommon occurrence, due to a lack of \ + available air or space, these pipes are a common sight in the many stations of Europa. Higher-quality pipes typically have \ + scenes etched into their bones, and can tell the story of their owner's time on Europa." + icon_state = "bonepipe" + item_state = "bonepipe" + chem_volume = 30 + +/////////////// +//CUSTOM CIGS// +/////////////// +//and by custom cigs i mean craftable joints. smoke weed every day + +/obj/item/clothing/mask/smokable/cigarette/joint + name = "joint" + desc = "A joint lovingly rolled and crafted with care. Blaze it." + icon_state = "joint" + max_smoketime = 400 + smoketime = 400 + chem_volume = 25 + +/obj/item/clothing/mask/smokable/cigarette/joint/blunt + name = "blunt" + desc = "A blunt lovingly rolled and crafted with care. Blaze it." + icon_state = "cigar" + max_smoketime = 500 + smoketime = 500 + nicotine_amt = 4 + chem_volume = 45 + +/obj/item/weapon/reagent_containers/rollingpaper + name = "rolling paper" + desc = "A small, thin piece of easily flammable paper, commonly used for rolling and smoking various dried plants." + description_fluff = "The legalization of certain substances propelled the sale of rolling \ + papers through the roof. Now almost every Trans-stellar produces a variety, often of questionable quality." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cig paper" + volume = 25 + var/obj/item/clothing/mask/smokable/cigarette/crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint + +/obj/item/weapon/reagent_containers/rollingpaper/blunt + name = "blunt wrap" + desc = "A small piece of easily flammable paper similar to that which encases cigars. It's made out of tobacco, bigger than a standard rolling paper, and will last longer." + icon_state = "blunt paper" + volume = 45 + crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint/blunt + +/obj/item/weapon/reagent_containers/rollingpaper/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W + if (!G.dry) //This prevents people from just stuffing cheeseburgers into their joint + to_chat(user, "[G.name] must be dried before you add it to [src].") + return + if (G.reagents.total_volume + src.reagents.total_volume > src.reagents.maximum_volume) //Check that we don't have too much already in the paper before adding things + to_chat(user, "The [src] is too full to add [G.name].") + return + if (src.reagents.total_volume == 0) + if (istype(src, /obj/item/weapon/reagent_containers/rollingpaper/blunt)) //update the icon if this is the first thing we're adding to the paper + src.icon_state = "blunt_full" + else + src.icon_state = "paper_full" + to_chat(user, "You add the [G.name] to the [src.name].") + src.add_fingerprint(user) + if(G.reagents) + G.reagents.trans_to_obj(src, G.reagents.total_volume) //adds the reagents from the plant into the paper + user.drop_from_inventory(G) + qdel(G) + +/obj/item/weapon/reagent_containers/rollingpaper/attack_self(mob/living/user) + if(!src.reagents) //don't roll an empty joint + to_chat(user, "There is nothing in [src]. Add something to it first.") + return + var/obj/item/clothing/mask/smokable/cigarette/J = new crafted_type() + to_chat(user,"You roll the [src] into a blunt!") + J.add_fingerprint(user) + if(src.reagents) + src.reagents.trans_to_obj(J, src.reagents.total_volume) + user.drop_from_inventory(src) + user.put_in_hands(J) + qdel(src) + +///////// +//CHEAP// +///////// +/obj/item/weapon/flame/lighter + name = "cheap lighter" + desc = "A cheap-as-free lighter." + description_fluff = "The 'hand-made in Altair' sticker underneath is a charming way of \ + saying 'Made with prison labour'. It's no wonder the company can sell these things so cheap." + icon = 'icons/obj/lighters.dmi' + icon_state = "lighter" + item_state = "lighter" + w_class = ITEMSIZE_TINY + throwforce = 4 + slot_flags = SLOT_BELT + attack_verb = list("burnt", "singed") + var/base_state + /// Sounds + var/activation_sound = 'sound/items/lighter_on.ogg' + var/deactivation_sound = 'sound/items/lighter_off.ogg' + /// Color of the flame and how big the flame is (pulled from Welder code) + var/flame_color = "#FF9933" + var/flame_intensity = 2 + /// Color List + var/random_color = FALSE + var/available_colors = list(COLOR_ASSEMBLY_BLACK, + COLOR_ASSEMBLY_BGRAY, + COLOR_ASSEMBLY_WHITE, + COLOR_ASSEMBLY_RED, + COLOR_ASSEMBLY_ORANGE, + COLOR_ASSEMBLY_BEIGE, + COLOR_ASSEMBLY_BROWN, + COLOR_ASSEMBLY_GOLD, + COLOR_ASSEMBLY_YELLOW, + COLOR_ASSEMBLY_GURKHA, + COLOR_ASSEMBLY_LGREEN, + COLOR_ASSEMBLY_GREEN, + COLOR_ASSEMBLY_LBLUE, + COLOR_ASSEMBLY_BLUE, + COLOR_ASSEMBLY_PURPLE, + COLOR_ASSEMBLY_HOT_PINK) + +// TODO: Remove this path from POIs and loose maps (it's no longer needed) +/obj/item/weapon/flame/lighter/random + +// Randomizes Cheap Lighters on Spawn +/obj/item/weapon/flame/lighter/Initialize() + . = ..() + var/image/I = image(icon, "lighter-[pick("trans","tall","matte")]") + I.color = pick(available_colors) + add_overlay(I) + +/obj/item/weapon/flame/lighter/attack_self(mob/living/user) + if(!lit) + lit = 1 + icon_state = "lighteron" + playsound(src, activation_sound, 75, 1) + user.visible_message("After a few attempts, [user] manages to light the [src].") + + set_light(2, 0.5, "#FF9933") + START_PROCESSING(SSobj, src) + update_icon() + else + lit = 0 + icon_state = "lighter" + playsound(src, deactivation_sound, 75, 1) + user.visible_message("[user] quietly shuts off the [src].") + + set_light(0) + STOP_PROCESSING(SSobj, src) + update_icon() + return + +/obj/item/weapon/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(lit == 1) + M.IgniteMob() + add_attack_logs(user,M,"Lit on fire with [src]") + + if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) + var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask + if(M == user) + cig.attackby(src, user) + else + if(istype(src, /obj/item/weapon/flame/lighter/zippo)) + cig.light("[user] whips the [name] out and holds it for [M].") + else + cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") + else + ..() + +/obj/item/weapon/flame/lighter/process() + var/turf/location = get_turf(src) + if(location) + location.hotspot_expose(700, 5) + return + +///////// +//ZIPPO// +///////// +/obj/item/weapon/flame/lighter/zippo + name = "\improper Zippo lighter" + desc = "The zippo." + description_fluff = "Still going after all these years." + icon_state = "zippo" + item_state = "zippo" + activation_sound = 'sound/items/zippo_on.ogg' + deactivation_sound = 'sound/items/zippo_off.ogg' + +/obj/item/weapon/flame/lighter/zippo/Initialize() + . = ..() + cut_overlays() //Prevents the Cheap Lighter overlay from appearing on this + +/obj/item/weapon/flame/lighter/zippo/attack_self(mob/living/user) + if(!base_state) + base_state = icon_state + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + playsound(src, activation_sound, 75, 1) + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") + + set_light(2, 0.5, "#FF9933") + START_PROCESSING(SSobj, src) + else + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + playsound(src, deactivation_sound, 75, 1) + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + + set_light(0) + STOP_PROCESSING(SSobj, src) + return + +//Here we add Zippo skins. + +/obj/item/weapon/flame/lighter/zippo/black + name = "\improper holy Zippo lighter" + desc = "Only in regards to Christianity, that is." + icon_state = "blackzippo" + +/obj/item/weapon/flame/lighter/zippo/blue + name = "\improper blue Zippo lighter" + icon_state = "bluezippo" + +/obj/item/weapon/flame/lighter/zippo/engraved + name = "\improper engraved Zippo lighter" + icon_state = "engravedzippo" + item_state = "zippo" + +/obj/item/weapon/flame/lighter/zippo/gold + name = "\improper golden Zippo lighter" + icon_state = "goldzippo" + +/obj/item/weapon/flame/lighter/zippo/moff + name = "\improper moth Zippo lighter" + desc = "Too cute to be a Tymisian." + icon_state = "moffzippo" + +/obj/item/weapon/flame/lighter/zippo/red + name = "\improper red Zippo lighter" + icon_state = "redzippo" + +/obj/item/weapon/flame/lighter/zippo/ironic + name = "\improper ironic Zippo lighter" + desc = "What a quiant idea." + icon_state = "ironiczippo" + +/obj/item/weapon/flame/lighter/zippo/capitalist + name = "\improper capitalist Zippo lighter" + desc = "Made of gold and obsidian, this is truly not worth however much you spent on it." + icon_state = "cappiezippo" + +/obj/item/weapon/flame/lighter/zippo/communist + name = "\improper communist Zippo lighter" + desc = "All you need to spark a revolution." + icon_state = "commiezippo" + +/obj/item/weapon/flame/lighter/zippo/royal + name = "\improper royal Zippo lighter" + desc = "An incredibly fancy lighter, gilded and covered in the color of royalty." + icon_state = "royalzippo" + +/obj/item/weapon/flame/lighter/zippo/gonzo + name = "\improper Gonzo Zippo lighter" + desc = "A lighter with the iconic Gonzo fist painted on it." + icon_state = "gonzozippo" + +/obj/item/weapon/flame/lighter/zippo/rainbow + name = "\improper rainbow Zippo lighter" + icon_state = "rainbowzippo" + +/obj/item/weapon/flame/lighter/zippo/skull + name = "\improper badass Zippo lighter" + desc = "An absolutely badass zippo lighter. Just look at that skull!" icon_state = "skullzippo" \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm b/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm index 4a5307fa12..579c588519 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm @@ -1,74 +1,74 @@ -/obj/item/weapon/circuitboard/microwave - name = T_BOARD("microwave") - desc = "The circuitboard for a microwave." - build_path = /obj/machinery/microwave - board_type = new /datum/frame/frame_types/microwave - contain_parts = 0 - matter = list(MAT_STEEL = 50, MAT_GLASS = 50) - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/capacitor = 3, // Original Capacitor count was 1 - /obj/item/weapon/stock_parts/motor = 1, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/oven - name = T_BOARD("oven") - desc = "The circuitboard for an oven." - build_path = /obj/machinery/appliance/cooker/oven - board_type = new /datum/frame/frame_types/machine - matter = list(MAT_STEEL = 50, MAT_GLASS = 50) - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 3, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/fryer - name = T_BOARD("deep fryer") - desc = "The circuitboard for a deep fryer." - build_path = /obj/machinery/appliance/cooker/fryer - board_type = new /datum/frame/frame_types/machine - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 3, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/grill - name = T_BOARD("grill") - desc = "The circuitboard for an industrial grill." - build_path = /obj/machinery/appliance/cooker/grill - board_type = new /datum/frame/frame_types/machine - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 3, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/cerealmaker - name = T_BOARD("cereal maker") - desc = "The circuitboard for a cereal maker." - build_path = /obj/machinery/appliance/mixer/cereal - board_type = new /datum/frame/frame_types/machine - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 3, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/candymachine - name = T_BOARD("candy machine") - desc = "The circuitboard for a candy machine." - build_path = /obj/machinery/appliance/mixer/candy - board_type = new /datum/frame/frame_types/machine - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 3, - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/matter_bin = 2) - -/obj/item/weapon/circuitboard/microwave/advanced - name = T_BOARD("deluxe microwave") - build_path = /obj/machinery/microwave/advanced - board_type = new /datum/frame/frame_types/microwave - matter = list(MAT_STEEL = 50, MAT_GLASS = 50) - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/motor = 1, +/obj/item/weapon/circuitboard/microwave + name = T_BOARD("microwave") + desc = "The circuitboard for a microwave." + build_path = /obj/machinery/microwave + board_type = new /datum/frame/frame_types/microwave + contain_parts = 0 + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/capacitor = 3, // Original Capacitor count was 1 + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/oven + name = T_BOARD("oven") + desc = "The circuitboard for an oven." + build_path = /obj/machinery/appliance/cooker/oven + board_type = new /datum/frame/frame_types/machine + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/fryer + name = T_BOARD("deep fryer") + desc = "The circuitboard for a deep fryer." + build_path = /obj/machinery/appliance/cooker/fryer + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/grill + name = T_BOARD("grill") + desc = "The circuitboard for an industrial grill." + build_path = /obj/machinery/appliance/cooker/grill + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/cerealmaker + name = T_BOARD("cereal maker") + desc = "The circuitboard for a cereal maker." + build_path = /obj/machinery/appliance/mixer/cereal + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/candymachine + name = T_BOARD("candy machine") + desc = "The circuitboard for a candy machine." + build_path = /obj/machinery/appliance/mixer/candy + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/microwave/advanced + name = T_BOARD("deluxe microwave") + build_path = /obj/machinery/microwave/advanced + board_type = new /datum/frame/frame_types/microwave + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/motor = 1, /obj/item/weapon/stock_parts/capacitor = 1) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/mecha_ch.dm b/code/game/objects/items/weapons/circuitboards/mecha_ch.dm index b44e45869e..de0f3d99fd 100644 --- a/code/game/objects/items/weapons/circuitboards/mecha_ch.dm +++ b/code/game/objects/items/weapons/circuitboards/mecha_ch.dm @@ -1,21 +1,21 @@ -#ifdef T_BOARD_CHMecha -#error T_BOARD_CHMECHA already defined elsewhere, we can't use it. -#endif -#define T_BOARD_CHMECHA(name) "exosuit module circuit board (" + (name) + ")" -//renaming CHmecha for Chomp mecha to allow for more to be made if needed. - -/obj/item/weapon/circuitboard/mecha/scarab - origin_tech = list(TECH_DATA = 4) - -/obj/item/weapon/circuitboard/mecha/scarab/peripherals - name = T_BOARD_CHMECHA("Scarab peripherals control") - icon_state = "mcontroller" - -/obj/item/weapon/circuitboard/mecha/scarab/targeting - name = T_BOARD_CHMECHA("Scarab weapon control and targeting") - icon_state = "mcontroller" - origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4) - -/obj/item/weapon/circuitboard/mecha/scarab/main - name = T_BOARD_CHMECHA("Scarab central control") - icon_state = "mainboard" +#ifdef T_BOARD_CHMecha +#error T_BOARD_CHMECHA already defined elsewhere, we can't use it. +#endif +#define T_BOARD_CHMECHA(name) "exosuit module circuit board (" + (name) + ")" +//renaming CHmecha for Chomp mecha to allow for more to be made if needed. + +/obj/item/weapon/circuitboard/mecha/scarab + origin_tech = list(TECH_DATA = 4) + +/obj/item/weapon/circuitboard/mecha/scarab/peripherals + name = T_BOARD_CHMECHA("Scarab peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/scarab/targeting + name = T_BOARD_CHMECHA("Scarab weapon control and targeting") + icon_state = "mcontroller" + origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4) + +/obj/item/weapon/circuitboard/mecha/scarab/main + name = T_BOARD_CHMECHA("Scarab central control") + icon_state = "mainboard" diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index d7208d5db3..e3a1228470 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -1,87 +1,87 @@ -/* Clown Items - * Contains: - * Banana Peels - * Soap - * Bike Horns - */ - -/* - * Banana Peels - */ -/obj/item/weapon/bananapeel/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - if(istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the [src.name]",4) -/* - * Soap - */ -/obj/item/weapon/soap/Initialize() - . = ..() - create_reagents(5) - wet() - -/obj/item/weapon/soap/proc/wet() - reagents.add_reagent("cleaner", 5) - -/obj/item/weapon/soap/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - if(istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the [src.name]",3) - -/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return - //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. - //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn - if(user.client && (target in user.client.screen)) - to_chat(user, "You need to take that [target.name] off before cleaning it.") - else if(istype(target,/obj/effect/decal/cleanable/blood)) - to_chat(user, "You scrub \the [target.name] out.") - target.clean_blood() - return //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. - else if(istype(target,/obj/effect/decal/cleanable)) - to_chat(user, "You scrub \the [target.name] out.") - qdel(target) - else if(istype(target,/turf)) - to_chat(user, "You scrub \the [target.name] clean.") - var/turf/T = target - T.clean(src, user) - else if(istype(target,/obj/structure/sink)) - to_chat(user, "You wet \the [src] in the sink.") - wet() - else - to_chat(user, "You clean \the [target.name].") - target.clean_blood(TRUE) - return - -//attack_as_weapon -/obj/item/weapon/soap/attack(mob/living/target, mob/living/user, var/target_zone) - if(target && user && ishuman(target) && ishuman(user) && !user.incapacitated() && user.zone_sel &&user.zone_sel.selecting == "mouth" ) - user.visible_message("\The [user] washes \the [target]'s mouth out with soap!") - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam - return - ..() - -/* - * Bike Horns - */ -/obj/item/weapon/bikehorn - var/honk_sound = 'sound/items/bikehorn.ogg' - -/obj/item/weapon/bikehorn/attack_self(mob/user as mob) - if(spam_flag == 0) - spam_flag = 1 - playsound(src, honk_sound, 50, 1) - src.add_fingerprint(user) - spawn(20) - spam_flag = 0 - return - -/obj/item/weapon/bikehorn/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - if(istype(AM, /mob/living)) - playsound(src, honk_sound, 50, 1) +/* Clown Items + * Contains: + * Banana Peels + * Soap + * Bike Horns + */ + +/* + * Banana Peels + */ +/obj/item/weapon/bananapeel/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the [src.name]",4) +/* + * Soap + */ +/obj/item/weapon/soap/Initialize() + . = ..() + create_reagents(5) + wet() + +/obj/item/weapon/soap/proc/wet() + reagents.add_reagent("cleaner", 5) + +/obj/item/weapon/soap/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(istype(AM, /mob/living)) + var/mob/living/M = AM + M.slip("the [src.name]",3) + +/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) + if(!proximity) return + //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. + //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn + if(user.client && (target in user.client.screen)) + to_chat(user, "You need to take that [target.name] off before cleaning it.") + else if(istype(target,/obj/effect/decal/cleanable/blood)) + to_chat(user, "You scrub \the [target.name] out.") + target.clean_blood() + return //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. + else if(istype(target,/obj/effect/decal/cleanable)) + to_chat(user, "You scrub \the [target.name] out.") + qdel(target) + else if(istype(target,/turf)) + to_chat(user, "You scrub \the [target.name] clean.") + var/turf/T = target + T.clean(src, user) + else if(istype(target,/obj/structure/sink)) + to_chat(user, "You wet \the [src] in the sink.") + wet() + else + to_chat(user, "You clean \the [target.name].") + target.clean_blood(TRUE) + return + +//attack_as_weapon +/obj/item/weapon/soap/attack(mob/living/target, mob/living/user, var/target_zone) + if(target && user && ishuman(target) && ishuman(user) && !user.incapacitated() && user.zone_sel &&user.zone_sel.selecting == "mouth" ) + user.visible_message("\The [user] washes \the [target]'s mouth out with soap!") + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam + return + ..() + +/* + * Bike Horns + */ +/obj/item/weapon/bikehorn + var/honk_sound = 'sound/items/bikehorn.ogg' + +/obj/item/weapon/bikehorn/attack_self(mob/user as mob) + if(spam_flag == 0) + spam_flag = 1 + playsound(src, honk_sound, 50, 1) + src.add_fingerprint(user) + spawn(20) + spam_flag = 0 + return + +/obj/item/weapon/bikehorn/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(istype(AM, /mob/living)) + playsound(src, honk_sound, 50, 1) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index e2d9ad6a49..6a899d9a70 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -1,113 +1,113 @@ -/obj/item/weapon/lipstick - gender = PLURAL - name = "red lipstick" - desc = "A generic brand of lipstick." - icon = 'icons/obj/items.dmi' - icon_state = "lipstick" - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - var/colour = "red" - var/open = 0 - drop_sound = 'sound/items/drop/glass.ogg' - pickup_sound = 'sound/items/pickup/glass.ogg' - -/obj/item/weapon/lipstick/purple - name = "purple lipstick" - colour = "purple" - -/obj/item/weapon/lipstick/jade - name = "jade lipstick" - colour = "jade" - -/obj/item/weapon/lipstick/black - name = "black lipstick" - colour = "black" - -/obj/item/weapon/lipstick/random - name = "lipstick" - -/obj/item/weapon/lipstick/random/New() - colour = pick("red","purple","jade","black") - name = "[colour] lipstick" - -/obj/item/weapon/lipstick/attack_self(mob/user as mob) - to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") - open = !open - if(open) - icon_state = "[initial(icon_state)]_[colour]" - else - icon_state = initial(icon_state) - -/obj/item/weapon/lipstick/attack(mob/M as mob, mob/user as mob) - if(!open) return - - if(!istype(M, /mob)) return - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.lip_style) //if they already have lipstick on - to_chat(user, "You need to wipe off the old lipstick first!") - return - if(H == user) - user.visible_message("[user] does their lips with \the [src].", \ - "You take a moment to apply \the [src]. Perfect!") - H.lip_style = colour - H.update_icons_body() - else - user.visible_message("[user] begins to do [H]'s lips with \the [src].", \ - "You begin to apply \the [src].") - if(do_after(user, 20, H)) //user needs to keep their active hand, H does not. - user.visible_message("[user] does [H]'s lips with \the [src].", \ - "You apply \the [src].") - H.lip_style = colour - H.update_icons_body() - else - to_chat(user, "Where are the lips on that?") - -//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/attack() - -/obj/item/weapon/haircomb //sparklysheep's comb - name = "purple comb" - desc = "A pristine purple comb made from flexible plastic." - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - icon = 'icons/obj/items.dmi' - icon_state = "purplecomb" - -/obj/item/weapon/haircomb/attack_self(mob/living/user) - var/text = "person" - if(ishuman(user)) - var/mob/living/carbon/human/U = user - switch(U.identifying_gender) - if(MALE) - text = "guy" - if(FEMALE) - text = "lady" - else - switch(user.gender) - if(MALE) - text = "guy" - if(FEMALE) - text = "lady" - user.visible_message("[user] uses [src] to comb their hair with incredible style and sophistication. What a [text].") - -/obj/item/weapon/makeover - name = "makeover kit" - desc = "A tiny case containing a mirror and some contact lenses." - w_class = ITEMSIZE_TINY - icon = 'icons/obj/items.dmi' - icon_state = "trinketbox" - var/datum/tgui_module/appearance_changer/mirror/coskit/M - -/obj/item/weapon/makeover/Initialize() - . = ..() - M = new(src, null) - -/obj/item/weapon/makeover/attack_self(mob/living/carbon/user as mob) - if(ishuman(user)) - to_chat(user, "You flip open \the [src] and begin to adjust your appearance.") - M.tgui_interact(user) - var/mob/living/carbon/human/H = user - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] - if(istype(E)) +/obj/item/weapon/lipstick + gender = PLURAL + name = "red lipstick" + desc = "A generic brand of lipstick." + icon = 'icons/obj/items.dmi' + icon_state = "lipstick" + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + var/colour = "red" + var/open = 0 + drop_sound = 'sound/items/drop/glass.ogg' + pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/weapon/lipstick/purple + name = "purple lipstick" + colour = "purple" + +/obj/item/weapon/lipstick/jade + name = "jade lipstick" + colour = "jade" + +/obj/item/weapon/lipstick/black + name = "black lipstick" + colour = "black" + +/obj/item/weapon/lipstick/random + name = "lipstick" + +/obj/item/weapon/lipstick/random/New() + colour = pick("red","purple","jade","black") + name = "[colour] lipstick" + +/obj/item/weapon/lipstick/attack_self(mob/user as mob) + to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") + open = !open + if(open) + icon_state = "[initial(icon_state)]_[colour]" + else + icon_state = initial(icon_state) + +/obj/item/weapon/lipstick/attack(mob/M as mob, mob/user as mob) + if(!open) return + + if(!istype(M, /mob)) return + + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.lip_style) //if they already have lipstick on + to_chat(user, "You need to wipe off the old lipstick first!") + return + if(H == user) + user.visible_message("[user] does their lips with \the [src].", \ + "You take a moment to apply \the [src]. Perfect!") + H.lip_style = colour + H.update_icons_body() + else + user.visible_message("[user] begins to do [H]'s lips with \the [src].", \ + "You begin to apply \the [src].") + if(do_after(user, 20, H)) //user needs to keep their active hand, H does not. + user.visible_message("[user] does [H]'s lips with \the [src].", \ + "You apply \the [src].") + H.lip_style = colour + H.update_icons_body() + else + to_chat(user, "Where are the lips on that?") + +//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/attack() + +/obj/item/weapon/haircomb //sparklysheep's comb + name = "purple comb" + desc = "A pristine purple comb made from flexible plastic." + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + icon = 'icons/obj/items.dmi' + icon_state = "purplecomb" + +/obj/item/weapon/haircomb/attack_self(mob/living/user) + var/text = "person" + if(ishuman(user)) + var/mob/living/carbon/human/U = user + switch(U.identifying_gender) + if(MALE) + text = "guy" + if(FEMALE) + text = "lady" + else + switch(user.gender) + if(MALE) + text = "guy" + if(FEMALE) + text = "lady" + user.visible_message("[user] uses [src] to comb their hair with incredible style and sophistication. What a [text].") + +/obj/item/weapon/makeover + name = "makeover kit" + desc = "A tiny case containing a mirror and some contact lenses." + w_class = ITEMSIZE_TINY + icon = 'icons/obj/items.dmi' + icon_state = "trinketbox" + var/datum/tgui_module/appearance_changer/mirror/coskit/M + +/obj/item/weapon/makeover/Initialize() + . = ..() + M = new(src, null) + +/obj/item/weapon/makeover/attack_self(mob/living/carbon/user as mob) + if(ishuman(user)) + to_chat(user, "You flip open \the [src] and begin to adjust your appearance.") + M.tgui_interact(user) + var/mob/living/carbon/human/H = user + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] + if(istype(E)) E.change_eye_color() \ No newline at end of file diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index ce63436094..ceafb06c73 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -1,578 +1,578 @@ -/obj/item/weapon/dnainjector - name = "\improper DNA injector" - desc = "This injects the person with DNA." - icon = 'icons/obj/items.dmi' - icon_state = "dnainjector" - var/block=0 - var/datum/dna2/record/buf=null - var/s_time = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - var/uses = 1 - var/nofail - var/is_bullet = 0 - var/inuse = 0 - - // USE ONLY IN PREMADE SYRINGES. WILL NOT WORK OTHERWISE. - var/datatype=0 - var/value=0 - -/obj/item/weapon/dnainjector/New() - if(datatype && block) - buf=new - buf.dna=new - buf.types = datatype - buf.dna.ResetSE() - //testing("[name]: DNA2 SE blocks prior to SetValue: [english_list(buf.dna.SE)]") - SetValue(src.value) - //testing("[name]: DNA2 SE blocks after SetValue: [english_list(buf.dna.SE)]") - -/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock) - if(selblock==0) - return block - else - return selblock - -/obj/item/weapon/dnainjector/proc/GetState(var/selblock=0) - var/real_block=GetRealBlock(selblock) - if(buf.types&DNA2_BUF_SE) - return buf.dna.GetSEState(real_block) - else - return buf.dna.GetUIState(real_block) - -/obj/item/weapon/dnainjector/proc/SetState(var/on, var/selblock=0) - var/real_block=GetRealBlock(selblock) - if(buf.types&DNA2_BUF_SE) - return buf.dna.SetSEState(real_block,on) - else - return buf.dna.SetUIState(real_block,on) - -/obj/item/weapon/dnainjector/proc/GetValue(var/selblock=0) - var/real_block=GetRealBlock(selblock) - if(buf.types&DNA2_BUF_SE) - return buf.dna.GetSEValue(real_block) - else - return buf.dna.GetUIValue(real_block) - -/obj/item/weapon/dnainjector/proc/SetValue(var/val,var/selblock=0) - var/real_block=GetRealBlock(selblock) - if(buf.types&DNA2_BUF_SE) - return buf.dna.SetSEValue(real_block,val) - else - return buf.dna.SetUIValue(real_block,val) - -/obj/item/weapon/dnainjector/proc/inject(mob/M as mob, mob/user as mob) - if(istype(M,/mob/living)) - var/mob/living/L = M - L.apply_effect(rand(5,20), IRRADIATE, check_protection = 0) - L.apply_damage(max(2,L.getCloneLoss()), CLONE) - - if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed - if (buf.types & DNA2_BUF_UI) - if (!block) //isolated block? - M.UpdateAppearance(buf.dna.UI.Copy()) - if (buf.types & DNA2_BUF_UE) //unique enzymes? yes - M.real_name = buf.dna.real_name - M.name = buf.dna.real_name - uses-- - else - M.dna.SetUIValue(block,src.GetValue()) - M.UpdateAppearance() - uses-- - if (buf.types & DNA2_BUF_SE) - if (!block) //isolated block? - M.dna.SE = buf.dna.SE.Copy() - M.dna.UpdateSE() - else - M.dna.SetSEValue(block,src.GetValue()) - domutcheck(M, null, block!=null) - uses-- - if(prob(5)) - trigger_side_effect(M) - - spawn(0)//this prevents the collapse of space-time continuum - if (user) - user.drop_from_inventory(src) - qdel(src) - return uses - -/obj/item/weapon/dnainjector/attack(mob/M as mob, mob/user as mob) - if (!istype(M, /mob)) - return - if (!usr.IsAdvancedToolUser()) - return - if(inuse) - return 0 - - user.visible_message("\The [user] is trying to inject \the [M] with \the [src]!") - inuse = 1 - s_time = world.time - spawn(50) - inuse = 0 - - if(!do_after(user,50)) - return - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(M) - - M.visible_message("\The [M] has been injected with \the [src] by \the [user].") - - var/mob/living/carbon/human/H = M - if(!istype(H)) - to_chat(user, "Apparently it didn't work...") - return - - // Used by admin log. - var/injected_with_monkey = "" - if((buf.types & DNA2_BUF_SE) && (block ? (GetState() && block == MONKEYBLOCK) : GetState(MONKEYBLOCK))) - injected_with_monkey = " (MONKEY)" - - add_attack_logs(user,M,"[injected_with_monkey] used the [name] on") - - // Apply the DNA shit. - inject(M, user) - return - -/obj/item/weapon/dnainjector/hulkmut - name = "\improper DNA injector (Hulk)" - desc = "This will make you big and strong, but give you a bad skin condition." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/hulkmut/New() - block = HULKBLOCK - ..() - -/obj/item/weapon/dnainjector/antihulk - name = "\improper DNA injector (Anti-Hulk)" - desc = "Cures green skin." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antihulk/New() - block = HULKBLOCK - ..() - -/obj/item/weapon/dnainjector/xraymut - name = "\improper DNA injector (Xray)" - desc = "Finally you can see what the Site Manager does." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/xraymut/New() - block = XRAYBLOCK - ..() - -/obj/item/weapon/dnainjector/antixray - name = "\improper DNA injector (Anti-Xray)" - desc = "It will make you see harder." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antixray/New() - block = XRAYBLOCK - ..() - -/obj/item/weapon/dnainjector/firemut - name = "\improper DNA injector (Fire)" - desc = "Gives you fire." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/firemut/New() - block = FIREBLOCK - ..() - -/obj/item/weapon/dnainjector/antifire - name = "\improper DNA injector (Anti-Fire)" - desc = "Cures fire." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antifire/New() - block = FIREBLOCK - ..() - -/obj/item/weapon/dnainjector/telemut - name = "\improper DNA injector (Tele.)" - desc = "Super brain man!" - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/telemut/New() - block = TELEBLOCK - ..() - -/obj/item/weapon/dnainjector/antitele - name = "\improper DNA injector (Anti-Tele.)" - desc = "Will make you not able to control your mind." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antitele/New() - block = TELEBLOCK - ..() - -/obj/item/weapon/dnainjector/nobreath - name = "\improper DNA injector (No Breath)" - desc = "Hold your breath and count to infinity." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/nobreath/New() - block = NOBREATHBLOCK - ..() - -/obj/item/weapon/dnainjector/antinobreath - name = "\improper DNA injector (Anti-No Breath)" - desc = "Hold your breath and count to 100." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antinobreath/New() - block = NOBREATHBLOCK - ..() - -/obj/item/weapon/dnainjector/remoteview - name = "\improper DNA injector (Remote View)" - desc = "Stare into the distance for a reason." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/remoteview/New() - block = REMOTEVIEWBLOCK - ..() - -/obj/item/weapon/dnainjector/antiremoteview - name = "\improper DNA injector (Anti-Remote View)" - desc = "Cures green skin." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiremoteview/New() - block = REMOTEVIEWBLOCK - ..() - -/obj/item/weapon/dnainjector/regenerate - name = "\improper DNA injector (Regeneration)" - desc = "Healthy but hungry." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/regenerate/New() - block = REGENERATEBLOCK - ..() - -/obj/item/weapon/dnainjector/antiregenerate - name = "\improper DNA injector (Anti-Regeneration)" - desc = "Sickly but sated." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiregenerate/New() - block = REGENERATEBLOCK - ..() - -/obj/item/weapon/dnainjector/runfast - name = "\improper DNA injector (Increase Run)" - desc = "Running Man." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/runfast/New() - block = INCREASERUNBLOCK - ..() - -/obj/item/weapon/dnainjector/antirunfast - name = "\improper DNA injector (Anti-Increase Run)" - desc = "Walking Man." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antirunfast/New() - block = INCREASERUNBLOCK - ..() - -/obj/item/weapon/dnainjector/morph - name = "\improper DNA injector (Morph)" - desc = "A total makeover." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/morph/New() - block = MORPHBLOCK - ..() - -/obj/item/weapon/dnainjector/antimorph - name = "\improper DNA injector (Anti-Morph)" - desc = "Cures identity crisis." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antimorph/New() - block = MORPHBLOCK - ..() - -/obj/item/weapon/dnainjector/noprints - name = "\improper DNA injector (No Prints)" - desc = "Better than a pair of budget insulated gloves." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/noprints/New() - block = NOPRINTSBLOCK - ..() - -/obj/item/weapon/dnainjector/antinoprints - name = "\improper DNA injector (Anti-No Prints)" - desc = "Not quite as good as a pair of budget insulated gloves." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antinoprints/New() - block = NOPRINTSBLOCK - ..() - -/obj/item/weapon/dnainjector/insulation - name = "\improper DNA injector (Shock Immunity)" - desc = "Better than a pair of real insulated gloves." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/insulation/New() - block = SHOCKIMMUNITYBLOCK - ..() - -/obj/item/weapon/dnainjector/antiinsulation - name = "\improper DNA injector (Anti-Shock Immunity)" - desc = "Not quite as good as a pair of real insulated gloves." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiinsulation/New() - block = SHOCKIMMUNITYBLOCK - ..() - -/obj/item/weapon/dnainjector/midgit - name = "\improper DNA injector (Small Size)" - desc = "Makes you shrink." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/midgit/New() - block = SMALLSIZEBLOCK - ..() - -/obj/item/weapon/dnainjector/antimidgit - name = "\improper DNA injector (Anti-Small Size)" - desc = "Makes you grow. But not too much." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antimidgit/New() - block = SMALLSIZEBLOCK - ..() - -///////////////////////////////////// -/obj/item/weapon/dnainjector/antiglasses - name = "\improper DNA injector (Anti-Glasses)" - desc = "Toss away those glasses!" - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiglasses/New() - block = GLASSESBLOCK - ..() - -/obj/item/weapon/dnainjector/glassesmut - name = "\improper DNA injector (Glasses)" - desc = "Will make you need dorkish glasses." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/glassesmut/New() - block = GLASSESBLOCK - ..() - -/obj/item/weapon/dnainjector/epimut - name = "\improper DNA injector (Epi.)" - desc = "Shake shake shake the room!" - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/epimut/New() - block = HEADACHEBLOCK - ..() - -/obj/item/weapon/dnainjector/antiepi - name = "\improper DNA injector (Anti-Epi.)" - desc = "Will fix you up from shaking the room." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiepi/New() - block = HEADACHEBLOCK - ..() - -/obj/item/weapon/dnainjector/anticough - name = "\improper DNA injector (Anti-Cough)" - desc = "Will stop that awful noise." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/anticough/New() - block = COUGHBLOCK - ..() - -/obj/item/weapon/dnainjector/coughmut - name = "\improper DNA injector (Cough)" - desc = "Will bring forth a sound of horror from your throat." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/coughmut/New() - block = COUGHBLOCK - ..() - -/obj/item/weapon/dnainjector/clumsymut - name = "\improper DNA injector (Clumsy)" - desc = "Makes clumsy minions." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/clumsymut/New() - block = CLUMSYBLOCK - ..() - -/obj/item/weapon/dnainjector/anticlumsy - name = "\improper DNA injector (Anti-Clumy)" - desc = "Cleans up confusion." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/anticlumsy/New() - block = CLUMSYBLOCK - ..() - -/obj/item/weapon/dnainjector/antitour - name = "\improper DNA injector (Anti-Tour.)" - desc = "Will cure tourrets." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antitour/New() - block = TWITCHBLOCK - ..() - -/obj/item/weapon/dnainjector/tourmut - name = "\improper DNA injector (Tour.)" - desc = "Gives you a nasty case off tourrets." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/tourmut/New() - block = TWITCHBLOCK - ..() - -/obj/item/weapon/dnainjector/stuttmut - name = "\improper DNA injector (Stutt.)" - desc = "Makes you s-s-stuttterrr" - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/stuttmut/New() - block = NERVOUSBLOCK - ..() - -/obj/item/weapon/dnainjector/antistutt - name = "\improper DNA injector (Anti-Stutt.)" - desc = "Fixes that speaking impairment." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antistutt/New() - block = NERVOUSBLOCK - ..() - -/obj/item/weapon/dnainjector/blindmut - name = "\improper DNA injector (Blind)" - desc = "Makes you not see anything." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/blindmut/New() - block = BLINDBLOCK - ..() - -/obj/item/weapon/dnainjector/antiblind - name = "\improper DNA injector (Anti-Blind)" - desc = "ITS A MIRACLE!!!" - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antiblind/New() - block = BLINDBLOCK - ..() - -/obj/item/weapon/dnainjector/deafmut - name = "\improper DNA injector (Deaf)" - desc = "Sorry, what did you say?" - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/deafmut/New() - block = DEAFBLOCK - ..() - -/obj/item/weapon/dnainjector/antideaf - name = "\improper DNA injector (Anti-Deaf)" - desc = "Will make you hear once more." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antideaf/New() - block = DEAFBLOCK - ..() - -/obj/item/weapon/dnainjector/hallucination - name = "\improper DNA injector (Halluctination)" - desc = "What you see isn't always what you get." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/hallucination/New() - block = HALLUCINATIONBLOCK - ..() - -/obj/item/weapon/dnainjector/antihallucination - name = "\improper DNA injector (Anti-Hallucination)" - desc = "What you see is what you get." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/antihallucination/New() - block = HALLUCINATIONBLOCK - ..() - -/obj/item/weapon/dnainjector/h2m - name = "\improper DNA injector (Human > Monkey)" - desc = "Will make you a flea bag." - datatype = DNA2_BUF_SE - value = 0xFFF - -/obj/item/weapon/dnainjector/h2m/New() - block = MONKEYBLOCK - ..() - -/obj/item/weapon/dnainjector/m2h - name = "\improper DNA injector (Monkey > Human)" - desc = "Will make you...less hairy." - datatype = DNA2_BUF_SE - value = 0x001 - -/obj/item/weapon/dnainjector/m2h/New() - block = MONKEYBLOCK - ..() +/obj/item/weapon/dnainjector + name = "\improper DNA injector" + desc = "This injects the person with DNA." + icon = 'icons/obj/items.dmi' + icon_state = "dnainjector" + var/block=0 + var/datum/dna2/record/buf=null + var/s_time = 10.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + var/uses = 1 + var/nofail + var/is_bullet = 0 + var/inuse = 0 + + // USE ONLY IN PREMADE SYRINGES. WILL NOT WORK OTHERWISE. + var/datatype=0 + var/value=0 + +/obj/item/weapon/dnainjector/New() + if(datatype && block) + buf=new + buf.dna=new + buf.types = datatype + buf.dna.ResetSE() + //testing("[name]: DNA2 SE blocks prior to SetValue: [english_list(buf.dna.SE)]") + SetValue(src.value) + //testing("[name]: DNA2 SE blocks after SetValue: [english_list(buf.dna.SE)]") + +/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock) + if(selblock==0) + return block + else + return selblock + +/obj/item/weapon/dnainjector/proc/GetState(var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.GetSEState(real_block) + else + return buf.dna.GetUIState(real_block) + +/obj/item/weapon/dnainjector/proc/SetState(var/on, var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.SetSEState(real_block,on) + else + return buf.dna.SetUIState(real_block,on) + +/obj/item/weapon/dnainjector/proc/GetValue(var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.GetSEValue(real_block) + else + return buf.dna.GetUIValue(real_block) + +/obj/item/weapon/dnainjector/proc/SetValue(var/val,var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.SetSEValue(real_block,val) + else + return buf.dna.SetUIValue(real_block,val) + +/obj/item/weapon/dnainjector/proc/inject(mob/M as mob, mob/user as mob) + if(istype(M,/mob/living)) + var/mob/living/L = M + L.apply_effect(rand(5,20), IRRADIATE, check_protection = 0) + L.apply_damage(max(2,L.getCloneLoss()), CLONE) + + if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed + if (buf.types & DNA2_BUF_UI) + if (!block) //isolated block? + M.UpdateAppearance(buf.dna.UI.Copy()) + if (buf.types & DNA2_BUF_UE) //unique enzymes? yes + M.real_name = buf.dna.real_name + M.name = buf.dna.real_name + uses-- + else + M.dna.SetUIValue(block,src.GetValue()) + M.UpdateAppearance() + uses-- + if (buf.types & DNA2_BUF_SE) + if (!block) //isolated block? + M.dna.SE = buf.dna.SE.Copy() + M.dna.UpdateSE() + else + M.dna.SetSEValue(block,src.GetValue()) + domutcheck(M, null, block!=null) + uses-- + if(prob(5)) + trigger_side_effect(M) + + spawn(0)//this prevents the collapse of space-time continuum + if (user) + user.drop_from_inventory(src) + qdel(src) + return uses + +/obj/item/weapon/dnainjector/attack(mob/M as mob, mob/user as mob) + if (!istype(M, /mob)) + return + if (!usr.IsAdvancedToolUser()) + return + if(inuse) + return 0 + + user.visible_message("\The [user] is trying to inject \the [M] with \the [src]!") + inuse = 1 + s_time = world.time + spawn(50) + inuse = 0 + + if(!do_after(user,50)) + return + + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + user.do_attack_animation(M) + + M.visible_message("\The [M] has been injected with \the [src] by \the [user].") + + var/mob/living/carbon/human/H = M + if(!istype(H)) + to_chat(user, "Apparently it didn't work...") + return + + // Used by admin log. + var/injected_with_monkey = "" + if((buf.types & DNA2_BUF_SE) && (block ? (GetState() && block == MONKEYBLOCK) : GetState(MONKEYBLOCK))) + injected_with_monkey = " (MONKEY)" + + add_attack_logs(user,M,"[injected_with_monkey] used the [name] on") + + // Apply the DNA shit. + inject(M, user) + return + +/obj/item/weapon/dnainjector/hulkmut + name = "\improper DNA injector (Hulk)" + desc = "This will make you big and strong, but give you a bad skin condition." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/hulkmut/New() + block = HULKBLOCK + ..() + +/obj/item/weapon/dnainjector/antihulk + name = "\improper DNA injector (Anti-Hulk)" + desc = "Cures green skin." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antihulk/New() + block = HULKBLOCK + ..() + +/obj/item/weapon/dnainjector/xraymut + name = "\improper DNA injector (Xray)" + desc = "Finally you can see what the Site Manager does." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/xraymut/New() + block = XRAYBLOCK + ..() + +/obj/item/weapon/dnainjector/antixray + name = "\improper DNA injector (Anti-Xray)" + desc = "It will make you see harder." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antixray/New() + block = XRAYBLOCK + ..() + +/obj/item/weapon/dnainjector/firemut + name = "\improper DNA injector (Fire)" + desc = "Gives you fire." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/firemut/New() + block = FIREBLOCK + ..() + +/obj/item/weapon/dnainjector/antifire + name = "\improper DNA injector (Anti-Fire)" + desc = "Cures fire." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antifire/New() + block = FIREBLOCK + ..() + +/obj/item/weapon/dnainjector/telemut + name = "\improper DNA injector (Tele.)" + desc = "Super brain man!" + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/telemut/New() + block = TELEBLOCK + ..() + +/obj/item/weapon/dnainjector/antitele + name = "\improper DNA injector (Anti-Tele.)" + desc = "Will make you not able to control your mind." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antitele/New() + block = TELEBLOCK + ..() + +/obj/item/weapon/dnainjector/nobreath + name = "\improper DNA injector (No Breath)" + desc = "Hold your breath and count to infinity." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/nobreath/New() + block = NOBREATHBLOCK + ..() + +/obj/item/weapon/dnainjector/antinobreath + name = "\improper DNA injector (Anti-No Breath)" + desc = "Hold your breath and count to 100." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antinobreath/New() + block = NOBREATHBLOCK + ..() + +/obj/item/weapon/dnainjector/remoteview + name = "\improper DNA injector (Remote View)" + desc = "Stare into the distance for a reason." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/remoteview/New() + block = REMOTEVIEWBLOCK + ..() + +/obj/item/weapon/dnainjector/antiremoteview + name = "\improper DNA injector (Anti-Remote View)" + desc = "Cures green skin." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiremoteview/New() + block = REMOTEVIEWBLOCK + ..() + +/obj/item/weapon/dnainjector/regenerate + name = "\improper DNA injector (Regeneration)" + desc = "Healthy but hungry." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/regenerate/New() + block = REGENERATEBLOCK + ..() + +/obj/item/weapon/dnainjector/antiregenerate + name = "\improper DNA injector (Anti-Regeneration)" + desc = "Sickly but sated." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiregenerate/New() + block = REGENERATEBLOCK + ..() + +/obj/item/weapon/dnainjector/runfast + name = "\improper DNA injector (Increase Run)" + desc = "Running Man." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/runfast/New() + block = INCREASERUNBLOCK + ..() + +/obj/item/weapon/dnainjector/antirunfast + name = "\improper DNA injector (Anti-Increase Run)" + desc = "Walking Man." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antirunfast/New() + block = INCREASERUNBLOCK + ..() + +/obj/item/weapon/dnainjector/morph + name = "\improper DNA injector (Morph)" + desc = "A total makeover." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/morph/New() + block = MORPHBLOCK + ..() + +/obj/item/weapon/dnainjector/antimorph + name = "\improper DNA injector (Anti-Morph)" + desc = "Cures identity crisis." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antimorph/New() + block = MORPHBLOCK + ..() + +/obj/item/weapon/dnainjector/noprints + name = "\improper DNA injector (No Prints)" + desc = "Better than a pair of budget insulated gloves." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/noprints/New() + block = NOPRINTSBLOCK + ..() + +/obj/item/weapon/dnainjector/antinoprints + name = "\improper DNA injector (Anti-No Prints)" + desc = "Not quite as good as a pair of budget insulated gloves." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antinoprints/New() + block = NOPRINTSBLOCK + ..() + +/obj/item/weapon/dnainjector/insulation + name = "\improper DNA injector (Shock Immunity)" + desc = "Better than a pair of real insulated gloves." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/insulation/New() + block = SHOCKIMMUNITYBLOCK + ..() + +/obj/item/weapon/dnainjector/antiinsulation + name = "\improper DNA injector (Anti-Shock Immunity)" + desc = "Not quite as good as a pair of real insulated gloves." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiinsulation/New() + block = SHOCKIMMUNITYBLOCK + ..() + +/obj/item/weapon/dnainjector/midgit + name = "\improper DNA injector (Small Size)" + desc = "Makes you shrink." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/midgit/New() + block = SMALLSIZEBLOCK + ..() + +/obj/item/weapon/dnainjector/antimidgit + name = "\improper DNA injector (Anti-Small Size)" + desc = "Makes you grow. But not too much." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antimidgit/New() + block = SMALLSIZEBLOCK + ..() + +///////////////////////////////////// +/obj/item/weapon/dnainjector/antiglasses + name = "\improper DNA injector (Anti-Glasses)" + desc = "Toss away those glasses!" + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiglasses/New() + block = GLASSESBLOCK + ..() + +/obj/item/weapon/dnainjector/glassesmut + name = "\improper DNA injector (Glasses)" + desc = "Will make you need dorkish glasses." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/glassesmut/New() + block = GLASSESBLOCK + ..() + +/obj/item/weapon/dnainjector/epimut + name = "\improper DNA injector (Epi.)" + desc = "Shake shake shake the room!" + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/epimut/New() + block = HEADACHEBLOCK + ..() + +/obj/item/weapon/dnainjector/antiepi + name = "\improper DNA injector (Anti-Epi.)" + desc = "Will fix you up from shaking the room." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiepi/New() + block = HEADACHEBLOCK + ..() + +/obj/item/weapon/dnainjector/anticough + name = "\improper DNA injector (Anti-Cough)" + desc = "Will stop that awful noise." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/anticough/New() + block = COUGHBLOCK + ..() + +/obj/item/weapon/dnainjector/coughmut + name = "\improper DNA injector (Cough)" + desc = "Will bring forth a sound of horror from your throat." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/coughmut/New() + block = COUGHBLOCK + ..() + +/obj/item/weapon/dnainjector/clumsymut + name = "\improper DNA injector (Clumsy)" + desc = "Makes clumsy minions." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/clumsymut/New() + block = CLUMSYBLOCK + ..() + +/obj/item/weapon/dnainjector/anticlumsy + name = "\improper DNA injector (Anti-Clumy)" + desc = "Cleans up confusion." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/anticlumsy/New() + block = CLUMSYBLOCK + ..() + +/obj/item/weapon/dnainjector/antitour + name = "\improper DNA injector (Anti-Tour.)" + desc = "Will cure tourrets." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antitour/New() + block = TWITCHBLOCK + ..() + +/obj/item/weapon/dnainjector/tourmut + name = "\improper DNA injector (Tour.)" + desc = "Gives you a nasty case off tourrets." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/tourmut/New() + block = TWITCHBLOCK + ..() + +/obj/item/weapon/dnainjector/stuttmut + name = "\improper DNA injector (Stutt.)" + desc = "Makes you s-s-stuttterrr" + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/stuttmut/New() + block = NERVOUSBLOCK + ..() + +/obj/item/weapon/dnainjector/antistutt + name = "\improper DNA injector (Anti-Stutt.)" + desc = "Fixes that speaking impairment." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antistutt/New() + block = NERVOUSBLOCK + ..() + +/obj/item/weapon/dnainjector/blindmut + name = "\improper DNA injector (Blind)" + desc = "Makes you not see anything." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/blindmut/New() + block = BLINDBLOCK + ..() + +/obj/item/weapon/dnainjector/antiblind + name = "\improper DNA injector (Anti-Blind)" + desc = "ITS A MIRACLE!!!" + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antiblind/New() + block = BLINDBLOCK + ..() + +/obj/item/weapon/dnainjector/deafmut + name = "\improper DNA injector (Deaf)" + desc = "Sorry, what did you say?" + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/deafmut/New() + block = DEAFBLOCK + ..() + +/obj/item/weapon/dnainjector/antideaf + name = "\improper DNA injector (Anti-Deaf)" + desc = "Will make you hear once more." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antideaf/New() + block = DEAFBLOCK + ..() + +/obj/item/weapon/dnainjector/hallucination + name = "\improper DNA injector (Halluctination)" + desc = "What you see isn't always what you get." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/hallucination/New() + block = HALLUCINATIONBLOCK + ..() + +/obj/item/weapon/dnainjector/antihallucination + name = "\improper DNA injector (Anti-Hallucination)" + desc = "What you see is what you get." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/antihallucination/New() + block = HALLUCINATIONBLOCK + ..() + +/obj/item/weapon/dnainjector/h2m + name = "\improper DNA injector (Human > Monkey)" + desc = "Will make you a flea bag." + datatype = DNA2_BUF_SE + value = 0xFFF + +/obj/item/weapon/dnainjector/h2m/New() + block = MONKEYBLOCK + ..() + +/obj/item/weapon/dnainjector/m2h + name = "\improper DNA injector (Monkey > Human)" + desc = "Will make you...less hairy." + datatype = DNA2_BUF_SE + value = 0x001 + +/obj/item/weapon/dnainjector/m2h/New() + block = MONKEYBLOCK + ..() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 494984b170..fcb45bad9c 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -1,119 +1,119 @@ -/obj/item/weapon/plastique - name = "plastic explosives" - desc = "Used to put holes in specific areas without too much extra hole." - gender = PLURAL - icon = 'icons/obj/assemblies.dmi' - icon_state = "plastic-explosive0" - item_state = "plasticx" - flags = NOBLUDGEON - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_ILLEGAL = 2) - var/datum/wires/explosive/c4/wires = null - var/timer = 10 - var/atom/target = null - var/open_panel = 0 - var/image_overlay = null - var/blast_dev = -1 - var/blast_heavy = -1 - var/blast_light = 2 - var/blast_flash = 3 - -/obj/item/weapon/plastique/New() - wires = new(src) - image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2") - ..() - -/obj/item/weapon/plastique/Destroy() - qdel(wires) - wires = null - return ..() - -/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - open_panel = !open_panel - to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.") - playsound(src, I.usesound, 50, 1) - else if(I.has_tool_quality(TOOL_WIRECUTTER) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) - wires.Interact(user) - else - ..() - -/obj/item/weapon/plastique/attack_self(mob/user as mob) - var/newtime = tgui_input_number(usr, "Please set the timer.", "Timer", 10, 60000, 10) - if(user.get_active_hand() == src) - newtime = CLAMP(newtime, 10, 60000) - timer = newtime - to_chat(user, "Timer set for [timer] seconds.") - -/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag) - if (!flag) - return - if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/accessory/storage/) || istype(target, /obj/item/clothing/under)) - return - to_chat(user, "Planting explosives...") - user.do_attack_animation(target) - - if(do_after(user, 50) && in_range(user, target)) - user.drop_item() - src.target = target - loc = null - - if (ismob(target)) - add_attack_logs(user, target, "planted [name] on with [timer] second fuse") - user.visible_message("[user.name] finished planting an explosive on [target.name]!") - else - message_admins("[key_name(user, user.client)](?) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1) - log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse") - - target.add_overlay(image_overlay, TRUE) - to_chat(user, "Bomb has been planted. Timer counting down from [timer].") - spawn(timer*10) - explode(get_turf(target)) - -/obj/item/weapon/plastique/proc/explode(var/location) - if(!target) - target = get_atom_on_turf(src) - if(!target) - target = src - if(location) - explosion(location, blast_dev, blast_heavy, blast_light, blast_flash) - - if(target) - if (istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - W.dismantle_wall(1,1,1) - else if(istype(target, /mob/living)) - target.ex_act(2) // c4 can't gib mobs anymore. - else - target.ex_act(1) - if(target) - target.cut_overlay(image_overlay, TRUE) - qdel(src) - -/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone) - return - -/obj/item/weapon/plastique/seismic - name = "seismic charge" - desc = "Used to dig holes in specific areas without too much extra hole." - - blast_heavy = 2 - blast_light = 4 - blast_flash = 7 - -/obj/item/weapon/plastique/seismic/attackby(var/obj/item/I, var/mob/user) - . = ..() - if(open_panel) - if(istype(I, /obj/item/weapon/stock_parts/micro_laser)) - var/obj/item/weapon/stock_parts/SP = I - var/new_blast_power = max(1, round(SP.rating / 2) + 1) - if(new_blast_power > blast_heavy) - to_chat(user, "You install \the [I] into \the [src].") - user.drop_from_inventory(I) - qdel(I) - blast_heavy = new_blast_power - blast_light = blast_heavy + round(new_blast_power * 0.5) - blast_flash = blast_light + round(new_blast_power * 0.75) - else - to_chat(user, "The [I] is not any better than the component already installed into this charge!") - return . +/obj/item/weapon/plastique + name = "plastic explosives" + desc = "Used to put holes in specific areas without too much extra hole." + gender = PLURAL + icon = 'icons/obj/assemblies.dmi' + icon_state = "plastic-explosive0" + item_state = "plasticx" + flags = NOBLUDGEON + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_ILLEGAL = 2) + var/datum/wires/explosive/c4/wires = null + var/timer = 10 + var/atom/target = null + var/open_panel = 0 + var/image_overlay = null + var/blast_dev = -1 + var/blast_heavy = -1 + var/blast_light = 2 + var/blast_flash = 3 + +/obj/item/weapon/plastique/New() + wires = new(src) + image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2") + ..() + +/obj/item/weapon/plastique/Destroy() + qdel(wires) + wires = null + return ..() + +/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + open_panel = !open_panel + to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.") + playsound(src, I.usesound, 50, 1) + else if(I.has_tool_quality(TOOL_WIRECUTTER) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) + wires.Interact(user) + else + ..() + +/obj/item/weapon/plastique/attack_self(mob/user as mob) + var/newtime = tgui_input_number(usr, "Please set the timer.", "Timer", 10, 60000, 10) + if(user.get_active_hand() == src) + newtime = CLAMP(newtime, 10, 60000) + timer = newtime + to_chat(user, "Timer set for [timer] seconds.") + +/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag) + if (!flag) + return + if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/accessory/storage/) || istype(target, /obj/item/clothing/under)) + return + to_chat(user, "Planting explosives...") + user.do_attack_animation(target) + + if(do_after(user, 50) && in_range(user, target)) + user.drop_item() + src.target = target + loc = null + + if (ismob(target)) + add_attack_logs(user, target, "planted [name] on with [timer] second fuse") + user.visible_message("[user.name] finished planting an explosive on [target.name]!") + else + message_admins("[key_name(user, user.client)](?) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1) + log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse") + + target.add_overlay(image_overlay, TRUE) + to_chat(user, "Bomb has been planted. Timer counting down from [timer].") + spawn(timer*10) + explode(get_turf(target)) + +/obj/item/weapon/plastique/proc/explode(var/location) + if(!target) + target = get_atom_on_turf(src) + if(!target) + target = src + if(location) + explosion(location, blast_dev, blast_heavy, blast_light, blast_flash) + + if(target) + if (istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + W.dismantle_wall(1,1,1) + else if(istype(target, /mob/living)) + target.ex_act(2) // c4 can't gib mobs anymore. + else + target.ex_act(1) + if(target) + target.cut_overlay(image_overlay, TRUE) + qdel(src) + +/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone) + return + +/obj/item/weapon/plastique/seismic + name = "seismic charge" + desc = "Used to dig holes in specific areas without too much extra hole." + + blast_heavy = 2 + blast_light = 4 + blast_flash = 7 + +/obj/item/weapon/plastique/seismic/attackby(var/obj/item/I, var/mob/user) + . = ..() + if(open_panel) + if(istype(I, /obj/item/weapon/stock_parts/micro_laser)) + var/obj/item/weapon/stock_parts/SP = I + var/new_blast_power = max(1, round(SP.rating / 2) + 1) + if(new_blast_power > blast_heavy) + to_chat(user, "You install \the [I] into \the [src].") + user.drop_from_inventory(I) + qdel(I) + blast_heavy = new_blast_power + blast_light = blast_heavy + round(new_blast_power * 0.5) + blast_flash = blast_light + round(new_blast_power * 0.75) + else + to_chat(user, "The [I] is not any better than the component already installed into this charge!") + return . diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 4b33d5bf60..abd80e61ee 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -1,144 +1,144 @@ -/obj/item/weapon/extinguisher - name = "fire extinguisher" - desc = "A traditional red fire extinguisher." - icon = 'icons/obj/items.dmi' - icon_state = "fire_extinguisher0" - item_state = "fire_extinguisher" - hitsound = 'sound/weapons/smash.ogg' - throwforce = 10 - w_class = ITEMSIZE_NORMAL - throw_speed = 2 - throw_range = 10 - force = 10 - matter = list(MAT_STEEL = 90) - attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - drop_sound = 'sound/items/drop/gascan.ogg' - pickup_sound = 'sound/items/pickup/gascan.ogg' - - var/spray_particles = 3 - var/spray_amount = 10 //units of liquid per particle - var/max_water = 300 - var/last_use = 1.0 - var/safety = 1 - var/sprite_name = "fire_extinguisher" - var/rand_overlays = 6 - -/obj/item/weapon/extinguisher/mini - name = "fire extinguisher" - desc = "A light and compact fibreglass-framed model fire extinguisher." - icon_state = "miniFE0" - item_state = "miniFE" - hitsound = null //it is much lighter, after all. - throwforce = 2 - w_class = ITEMSIZE_SMALL - force = 3.0 - max_water = 150 - spray_particles = 3 - sprite_name = "miniFE" - rand_overlays = 0 - -/obj/item/weapon/extinguisher/atmo - name = "atmospheric fire extinguisher" - desc = "A heavy duty fire extinguisher meant to fight large fires." - icon_state = "atmos_extinguisher0" - item_state = "atmos_extinguisher" - throwforce = 12 - w_class = ITEMSIZE_LARGE - force = 3.0 - max_water = 600 - spray_particles = 3 - sprite_name = "atmos_extinguisher" - rand_overlays = 0 - -/obj/item/weapon/extinguisher/Initialize() - create_reagents(max_water) - reagents.add_reagent("firefoam", max_water) - if(rand_overlays) - var/choice = rand(1,rand_overlays) - add_overlay("[item_state]O[choice]") - . = ..() - -/obj/item/weapon/extinguisher/examine(mob/user) - . = ..() - if(get_dist(user, src) == 0) - . += "[src] has [src.reagents.total_volume] units of foam left!" - -/obj/item/weapon/extinguisher/attack_self(mob/user as mob) - safety = !safety - icon_state = "[sprite_name][!safety]" - desc = "The safety is [safety ? "on" : "off"]." - to_chat(user, "The safety is [safety ? "on" : "off"].") - -/obj/item/weapon/extinguisher/proc/propel_object(var/obj/O, mob/user, movementdirection) - if(O.anchored) return - - var/obj/structure/bed/chair/C - if(istype(O, /obj/structure/bed/chair)) - C = O - - var/list/move_speed = list(1, 1, 1, 2, 2, 3) - for(var/i in 1 to 6) - if(C) C.propelled = (6-i) - O.Move(get_step(user,movementdirection), movementdirection) - sleep(move_speed[i]) - - //additional movement - for(var/i in 1 to 3) - O.Move(get_step(user,movementdirection), movementdirection) - sleep(3) - -/obj/item/weapon/extinguisher/afterattack(var/atom/target, var/mob/user, var/flag) - //TODO; Add support for reagents in water. - - if( istype(target, /obj/structure/reagent_dispensers) && flag) - var/obj/o = target - var/amount = o.reagents.trans_to_obj(src, 50) - to_chat(user, "You fill [src] with [amount] units of the contents of [target].") - playsound(src, 'sound/effects/refill.ogg', 50, 1, -6) - return - - if (!safety) - if (src.reagents.total_volume < 1) - to_chat(usr, "\The [src] is empty.") - return - - if (world.time < src.last_use + 20) - return - - src.last_use = world.time - - playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3) - - var/direction = get_dir(src,target) - - if(user.buckled && isobj(user.buckled)) - spawn(0) - propel_object(user.buckled, user, turn(direction,180)) - - 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) - - for(var/a = 1 to spray_particles) - spawn(0) - if(!src || !reagents.total_volume) return - - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) - var/turf/my_target - if(a <= the_targets.len) - my_target = the_targets[a] - else - my_target = pick(the_targets) - W.create_reagents(spray_amount) - reagents.trans_to_obj(W, spray_amount) - W.set_color() - W.set_up(my_target) - - if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) - user.inertia_dir = get_dir(target, user) - step(user, user.inertia_dir) - else - return ..() - return +/obj/item/weapon/extinguisher + name = "fire extinguisher" + desc = "A traditional red fire extinguisher." + icon = 'icons/obj/items.dmi' + icon_state = "fire_extinguisher0" + item_state = "fire_extinguisher" + hitsound = 'sound/weapons/smash.ogg' + throwforce = 10 + w_class = ITEMSIZE_NORMAL + throw_speed = 2 + throw_range = 10 + force = 10 + matter = list(MAT_STEEL = 90) + attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") + drop_sound = 'sound/items/drop/gascan.ogg' + pickup_sound = 'sound/items/pickup/gascan.ogg' + + var/spray_particles = 3 + var/spray_amount = 10 //units of liquid per particle + var/max_water = 300 + var/last_use = 1.0 + var/safety = 1 + var/sprite_name = "fire_extinguisher" + var/rand_overlays = 6 + +/obj/item/weapon/extinguisher/mini + name = "fire extinguisher" + desc = "A light and compact fibreglass-framed model fire extinguisher." + icon_state = "miniFE0" + item_state = "miniFE" + hitsound = null //it is much lighter, after all. + throwforce = 2 + w_class = ITEMSIZE_SMALL + force = 3.0 + max_water = 150 + spray_particles = 3 + sprite_name = "miniFE" + rand_overlays = 0 + +/obj/item/weapon/extinguisher/atmo + name = "atmospheric fire extinguisher" + desc = "A heavy duty fire extinguisher meant to fight large fires." + icon_state = "atmos_extinguisher0" + item_state = "atmos_extinguisher" + throwforce = 12 + w_class = ITEMSIZE_LARGE + force = 3.0 + max_water = 600 + spray_particles = 3 + sprite_name = "atmos_extinguisher" + rand_overlays = 0 + +/obj/item/weapon/extinguisher/Initialize() + create_reagents(max_water) + reagents.add_reagent("firefoam", max_water) + if(rand_overlays) + var/choice = rand(1,rand_overlays) + add_overlay("[item_state]O[choice]") + . = ..() + +/obj/item/weapon/extinguisher/examine(mob/user) + . = ..() + if(get_dist(user, src) == 0) + . += "[src] has [src.reagents.total_volume] units of foam left!" + +/obj/item/weapon/extinguisher/attack_self(mob/user as mob) + safety = !safety + icon_state = "[sprite_name][!safety]" + desc = "The safety is [safety ? "on" : "off"]." + to_chat(user, "The safety is [safety ? "on" : "off"].") + +/obj/item/weapon/extinguisher/proc/propel_object(var/obj/O, mob/user, movementdirection) + if(O.anchored) return + + var/obj/structure/bed/chair/C + if(istype(O, /obj/structure/bed/chair)) + C = O + + var/list/move_speed = list(1, 1, 1, 2, 2, 3) + for(var/i in 1 to 6) + if(C) C.propelled = (6-i) + O.Move(get_step(user,movementdirection), movementdirection) + sleep(move_speed[i]) + + //additional movement + for(var/i in 1 to 3) + O.Move(get_step(user,movementdirection), movementdirection) + sleep(3) + +/obj/item/weapon/extinguisher/afterattack(var/atom/target, var/mob/user, var/flag) + //TODO; Add support for reagents in water. + + if( istype(target, /obj/structure/reagent_dispensers) && flag) + var/obj/o = target + var/amount = o.reagents.trans_to_obj(src, 50) + to_chat(user, "You fill [src] with [amount] units of the contents of [target].") + playsound(src, 'sound/effects/refill.ogg', 50, 1, -6) + return + + if (!safety) + if (src.reagents.total_volume < 1) + to_chat(usr, "\The [src] is empty.") + return + + if (world.time < src.last_use + 20) + return + + src.last_use = world.time + + playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3) + + var/direction = get_dir(src,target) + + if(user.buckled && isobj(user.buckled)) + spawn(0) + propel_object(user.buckled, user, turn(direction,180)) + + 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) + + for(var/a = 1 to spray_particles) + spawn(0) + if(!src || !reagents.total_volume) return + + var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) + var/turf/my_target + if(a <= the_targets.len) + my_target = the_targets[a] + else + my_target = pick(the_targets) + W.create_reagents(spray_amount) + reagents.trans_to_obj(W, spray_amount) + W.set_color() + W.set_up(my_target) + + if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) + user.inertia_dir = get_dir(target, user) + step(user, user.inertia_dir) + else + return ..() + return diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 287a174fbf..35dd4bfdf6 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -1,204 +1,204 @@ -/obj/item/weapon/flamethrower - name = "flamethrower" - desc = "You are a firestarter!" - icon = 'icons/obj/flamethrower.dmi' - icon_state = "flamethrowerbase" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi', - ) - item_state = "flamethrower_0" - force = 3.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 1, TECH_PHORON = 1) - matter = list(MAT_STEEL = 500) - var/status = 0 - var/throw_amount = 100 - var/lit = 0 //on or off - var/operating = 0//cooldown - var/turf/previousturf = null - var/obj/item/weapon/weldingtool/weldtool = null - var/obj/item/device/assembly/igniter/igniter = null - var/obj/item/weapon/tank/phoron/ptank = null - - -/obj/item/weapon/flamethrower/Destroy() - QDEL_NULL(weldtool) - QDEL_NULL(igniter) - QDEL_NULL(ptank) - . = ..() - -/obj/item/weapon/flamethrower/process() - if(!lit) - STOP_PROCESSING(SSobj, src) - return null - var/turf/location = loc - if(istype(location, /mob/)) - var/mob/living/M = location - if(M.item_is_in_hands(src)) - location = M.loc - if(isturf(location)) //start a fire if possible - location.hotspot_expose(700, 2) - return - - -/obj/item/weapon/flamethrower/update_icon() - cut_overlays() - if(igniter) - add_overlay("+igniter[status]") - if(ptank) - add_overlay("+ptank") - if(lit) - add_overlay("+lit") - item_state = "flamethrower_1" - else - item_state = "flamethrower_0" - return - -/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, proximity) - if(!proximity) return - // Make sure our user is still holding us - if(user && user.get_active_hand() == src) - var/turf/target_turf = get_turf(target) - if(target_turf) - var/turflist = getline(user, target_turf) - flame_turf(turflist) - -/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(user.stat || user.restrained() || user.lying) return - if(W.has_tool_quality(TOOL_WRENCH) && !status)//Taking this apart - var/turf/T = get_turf(src) - if(weldtool) - weldtool.loc = T - weldtool = null - if(igniter) - igniter.loc = T - igniter = null - if(ptank) - ptank.loc = T - ptank = null - new /obj/item/stack/rods(T) - qdel(src) - return - - if(W.has_tool_quality(TOOL_SCREWDRIVER) && igniter && !lit) - status = !status - to_chat(user, "[igniter] is now [status ? "secured" : "unsecured"]!") - update_icon() - return - - if(isigniter(W)) - var/obj/item/device/assembly/igniter/I = W - if(I.secured) return - if(igniter) return - user.drop_item() - I.loc = src - igniter = I - update_icon() - return - - if(istype(W,/obj/item/weapon/tank/phoron)) - if(ptank) - to_chat(user, "There appears to already be a phoron tank loaded in [src]!") - return - user.drop_item() - ptank = W - W.loc = src - update_icon() - return - - ..() - return - - -/obj/item/weapon/flamethrower/attack_self(mob/user as mob) - if(user.stat || user.restrained() || user.lying) return - user.set_machine(src) - if(!ptank) - to_chat(user, "Attach a phoron tank first!") - return - var/dat = text("Flamethrower ([lit ? "Lit" : "Unlit"])
                    \n Tank Pressure: [ptank.air_contents.return_pressure()]
                    \nAmount to throw: - - - [throw_amount] + + +
                    \nRemove phorontank - Close
                    ") - user << browse(dat, "window=flamethrower;size=600x300") - onclose(user, "flamethrower") - return - - -/obj/item/weapon/flamethrower/Topic(href,href_list[]) - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=flamethrower") - return - if(usr.stat || usr.restrained() || usr.lying) return - usr.set_machine(src) - if(href_list["light"]) - if(!ptank) return - if(ptank.air_contents.gas["phoron"] < 1) return - if(!status) return - lit = !lit - if(lit) - START_PROCESSING(SSobj, src) - if(href_list["amount"]) - throw_amount = throw_amount + text2num(href_list["amount"]) - throw_amount = max(50, min(5000, throw_amount)) - if(href_list["remove"]) - if(!ptank) return - usr.put_in_hands(ptank) - ptank = null - lit = 0 - usr.unset_machine() - usr << browse(null, "window=flamethrower") - for(var/mob/M in viewers(1, loc)) - if((M.client && M.machine == src)) - attack_self(M) - update_icon() - return - - -//Called from turf.dm turf/dblclick -/obj/item/weapon/flamethrower/proc/flame_turf(turflist) - if(!lit || operating) return - operating = 1 - for(var/turf/T in turflist) - if(T.density || istype(T, /turf/space)) - break - if(!previousturf && length(turflist)>1) - previousturf = get_turf(src) - continue //so we don't burn the tile we be standin on - if(previousturf && LinkBlocked(previousturf, T)) - break - ignite_turf(T) - sleep(1) - previousturf = null - operating = 0 - for(var/mob/M in viewers(1, loc)) - if((M.client && M.machine == src)) - attack_self(M) - return - - -/obj/item/weapon/flamethrower/proc/ignite_turf(turf/target) - //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... - //Transfer 5% of current tank air contents to turf - var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.02*(throw_amount/100)) - //air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is mischievious and I could probably make it work without fucking it up like this, but there you have it. -- TLE - new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(target,air_transfer.gas["phoron"],get_dir(loc,target)) - air_transfer.gas["phoron"] = 0 - target.assume_air(air_transfer) - //Burn it based on transfered gas - //target.hotspot_expose(part4.air_contents.temperature*2,300) - target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE - //location.hotspot_expose(1000,500,1) - return - -/obj/item/weapon/flamethrower/full/New(var/loc) - ..() - weldtool = new /obj/item/weapon/weldingtool(src) - weldtool.status = 0 - igniter = new /obj/item/device/assembly/igniter(src) - igniter.secured = 0 - status = 1 - update_icon() - return +/obj/item/weapon/flamethrower + name = "flamethrower" + desc = "You are a firestarter!" + icon = 'icons/obj/flamethrower.dmi' + icon_state = "flamethrowerbase" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi', + ) + item_state = "flamethrower_0" + force = 3.0 + throwforce = 10.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 1, TECH_PHORON = 1) + matter = list(MAT_STEEL = 500) + var/status = 0 + var/throw_amount = 100 + var/lit = 0 //on or off + var/operating = 0//cooldown + var/turf/previousturf = null + var/obj/item/weapon/weldingtool/weldtool = null + var/obj/item/device/assembly/igniter/igniter = null + var/obj/item/weapon/tank/phoron/ptank = null + + +/obj/item/weapon/flamethrower/Destroy() + QDEL_NULL(weldtool) + QDEL_NULL(igniter) + QDEL_NULL(ptank) + . = ..() + +/obj/item/weapon/flamethrower/process() + if(!lit) + STOP_PROCESSING(SSobj, src) + return null + var/turf/location = loc + if(istype(location, /mob/)) + var/mob/living/M = location + if(M.item_is_in_hands(src)) + location = M.loc + if(isturf(location)) //start a fire if possible + location.hotspot_expose(700, 2) + return + + +/obj/item/weapon/flamethrower/update_icon() + cut_overlays() + if(igniter) + add_overlay("+igniter[status]") + if(ptank) + add_overlay("+ptank") + if(lit) + add_overlay("+lit") + item_state = "flamethrower_1" + else + item_state = "flamethrower_0" + return + +/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, proximity) + if(!proximity) return + // Make sure our user is still holding us + if(user && user.get_active_hand() == src) + var/turf/target_turf = get_turf(target) + if(target_turf) + var/turflist = getline(user, target_turf) + flame_turf(turflist) + +/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob) + if(user.stat || user.restrained() || user.lying) return + if(W.has_tool_quality(TOOL_WRENCH) && !status)//Taking this apart + var/turf/T = get_turf(src) + if(weldtool) + weldtool.loc = T + weldtool = null + if(igniter) + igniter.loc = T + igniter = null + if(ptank) + ptank.loc = T + ptank = null + new /obj/item/stack/rods(T) + qdel(src) + return + + if(W.has_tool_quality(TOOL_SCREWDRIVER) && igniter && !lit) + status = !status + to_chat(user, "[igniter] is now [status ? "secured" : "unsecured"]!") + update_icon() + return + + if(isigniter(W)) + var/obj/item/device/assembly/igniter/I = W + if(I.secured) return + if(igniter) return + user.drop_item() + I.loc = src + igniter = I + update_icon() + return + + if(istype(W,/obj/item/weapon/tank/phoron)) + if(ptank) + to_chat(user, "There appears to already be a phoron tank loaded in [src]!") + return + user.drop_item() + ptank = W + W.loc = src + update_icon() + return + + ..() + return + + +/obj/item/weapon/flamethrower/attack_self(mob/user as mob) + if(user.stat || user.restrained() || user.lying) return + user.set_machine(src) + if(!ptank) + to_chat(user, "Attach a phoron tank first!") + return + var/dat = text("Flamethrower ([lit ? "Lit" : "Unlit"])
                    \n Tank Pressure: [ptank.air_contents.return_pressure()]
                    \nAmount to throw: - - - [throw_amount] + + +
                    \nRemove phorontank - Close
                    ") + user << browse(dat, "window=flamethrower;size=600x300") + onclose(user, "flamethrower") + return + + +/obj/item/weapon/flamethrower/Topic(href,href_list[]) + if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=flamethrower") + return + if(usr.stat || usr.restrained() || usr.lying) return + usr.set_machine(src) + if(href_list["light"]) + if(!ptank) return + if(ptank.air_contents.gas["phoron"] < 1) return + if(!status) return + lit = !lit + if(lit) + START_PROCESSING(SSobj, src) + if(href_list["amount"]) + throw_amount = throw_amount + text2num(href_list["amount"]) + throw_amount = max(50, min(5000, throw_amount)) + if(href_list["remove"]) + if(!ptank) return + usr.put_in_hands(ptank) + ptank = null + lit = 0 + usr.unset_machine() + usr << browse(null, "window=flamethrower") + for(var/mob/M in viewers(1, loc)) + if((M.client && M.machine == src)) + attack_self(M) + update_icon() + return + + +//Called from turf.dm turf/dblclick +/obj/item/weapon/flamethrower/proc/flame_turf(turflist) + if(!lit || operating) return + operating = 1 + for(var/turf/T in turflist) + if(T.density || istype(T, /turf/space)) + break + if(!previousturf && length(turflist)>1) + previousturf = get_turf(src) + continue //so we don't burn the tile we be standin on + if(previousturf && LinkBlocked(previousturf, T)) + break + ignite_turf(T) + sleep(1) + previousturf = null + operating = 0 + for(var/mob/M in viewers(1, loc)) + if((M.client && M.machine == src)) + attack_self(M) + return + + +/obj/item/weapon/flamethrower/proc/ignite_turf(turf/target) + //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... + //Transfer 5% of current tank air contents to turf + var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.02*(throw_amount/100)) + //air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is mischievious and I could probably make it work without fucking it up like this, but there you have it. -- TLE + new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(target,air_transfer.gas["phoron"],get_dir(loc,target)) + air_transfer.gas["phoron"] = 0 + target.assume_air(air_transfer) + //Burn it based on transfered gas + //target.hotspot_expose(part4.air_contents.temperature*2,300) + target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE + //location.hotspot_expose(1000,500,1) + return + +/obj/item/weapon/flamethrower/full/New(var/loc) + ..() + weldtool = new /obj/item/weapon/weldingtool(src) + weldtool.status = 0 + igniter = new /obj/item/device/assembly/igniter(src) + igniter.secured = 0 + status = 1 + update_icon() + return diff --git a/code/game/objects/items/weapons/gift_wrappaper_ch.dm b/code/game/objects/items/weapons/gift_wrappaper_ch.dm index 52a6909ce5..b416915d17 100644 --- a/code/game/objects/items/weapons/gift_wrappaper_ch.dm +++ b/code/game/objects/items/weapons/gift_wrappaper_ch.dm @@ -1,189 +1,189 @@ - -// Chomp gift, randomized color and size, wider selection of items to obtain, also chance of chaos present with even wilder stuff - - -/obj/item/weapon/a_gift/advanced - name = "present" - desc = "Its a Christmas present! It has a tag on it that says: 'Chomp staff thank you all for the year that has passed and wish you a merry Christmas and a happy new year. May the new year be good and well for you with many achievements and happy times!'" - icon = 'icons/obj/items_ch.dmi' - icon_state = "chomp_present" - item_state = "chomp_present" - plane = ABOVE_MOB_PLANE - var/chaos - -/obj/item/weapon/a_gift/advanced/New() - ..() - icon_state += "_[pick("g","r","b","y","p")]" - if(prob(1)) - icon_state = "chomp_present_chaos" - chaos = TRUE - name = "chaotic present" - desc = "The casino dev messed up and gave you the wrong present! This one pulses with potential for good or evil!" - return - -/obj/item/weapon/a_gift/advanced/attack_self(mob/M as mob) //WIP - ALWAYS add more items to list! - Jack - var/gift_type_advanced = pick( - /obj/item/device/binoculars/spyglass, - /obj/item/device/bodysnatcher, - /obj/item/device/cataloguer/advanced, - /obj/item/device/flashlight/slime, - /obj/item/device/lightreplacer, - /obj/item/weapon/book/tome, - /obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, - /obj/item/weapon/disk/nifsoft/compliance, - /obj/item/weapon/implanter/adrenalin, - /obj/item/weapon/lego, - /obj/item/weapon/moneybag, - /obj/item/weapon/pickaxe/diamonddrill, - /obj/item/weapon/rcd/advanced/loaded, - /obj/item/weapon/bluespace_harpoon, - /obj/item/weapon/storage/backpack/dufflebag/syndie, - /obj/item/weapon/storage/belt/medical/alien, - /obj/item/weapon/storage/toolbox/syndicate/powertools, - /obj/item/weapon/surgical/FixOVein/alien, - /obj/item/weapon/surgical/bone_clamp/alien, - /obj/item/weapon/surgical/cautery/alien, - /obj/item/weapon/surgical/circular_saw/alien, - /obj/item/weapon/surgical/hemostat/alien, - /obj/item/weapon/surgical/retractor/alien, - /obj/item/weapon/surgical/scalpel/alien, - /obj/item/weapon/surgical/surgicaldrill/alien, - /obj/item/weapon/sword/fluff/joanaria/scisword, - /obj/item/weapon/tool/wrench/alien, - /obj/item/weapon/tool/wirecutters/alien, - /obj/item/weapon/tool/screwdriver/alien, - /obj/item/weapon/tool/crowbar/alien, - /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/twohanded/fireaxe/fluff/mjollnir, - /obj/item/weapon/gun/launcher/confetti_cannon/overdrive, - /obj/item/weapon/gun/energy/sizegun, - /obj/item/weapon/gun/energy/netgun, - /obj/item/weapon/storage/belt/utility/alien, - /obj/item/clothing/suit/armor/alien, - /obj/item/clothing/glasses/monocoole, - /obj/item/weapon/reagent_containers/spray/chemsprayer, - /obj/item/weapon/reagent_containers/glass/beaker/bluespace, - /obj/item/weapon/reagent_containers/glass/beaker/noreact, - /obj/item/weapon/storage/box/casino/costume_whitebunny, - /obj/item/weapon/storage/box/casino/costume_blackbunny, - /obj/item/weapon/storage/box/casino/costume_sexymime, - /obj/item/weapon/storage/box/casino/costume_sexyclown, - /obj/item/weapon/storage/box/casino/costume_nyangirl, - /obj/item/weapon/storage/box/casino/costume_wizard, - /obj/item/weapon/storage/box/casino/costume_chicken, - /obj/item/weapon/storage/box/casino/costume_gladiator, - /obj/item/weapon/storage/box/casino/costume_pirate, - /obj/item/weapon/storage/box/casino/costume_commie, - /obj/item/weapon/storage/box/casino/costume_imperiummonk, - /obj/item/weapon/storage/box/casino/costume_plaguedoctor, - /obj/item/weapon/storage/box/casino/costume_cutewitch, - /obj/item/weapon/grenade/spawnergrenade/casino, - /obj/item/weapon/grenade/spawnergrenade/casino/goat, - /obj/item/weapon/grenade/spawnergrenade/casino/armadillo, - /obj/item/weapon/grenade/spawnergrenade/casino/cat, - /obj/item/weapon/grenade/spawnergrenade/casino/chicken, - /obj/item/weapon/grenade/spawnergrenade/casino/cow, - /obj/item/weapon/grenade/spawnergrenade/casino/corgi, - /obj/item/weapon/grenade/spawnergrenade/casino/fox, - /obj/item/weapon/grenade/spawnergrenade/casino/lizard, - /obj/item/weapon/grenade/spawnergrenade/casino/penguin, - /obj/item/weapon/grenade/spawnergrenade/casino/snake, - /obj/item/weapon/grenade/spawnergrenade/casino/yithian, - /obj/item/weapon/grenade/spawnergrenade/casino/tindalos, - /obj/item/weapon/grenade/spawnergrenade/casino/fennec, - /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, - /obj/item/weapon/grenade/spawnergrenade/casino/horse, - /obj/item/weapon/grenade/spawnergrenade/casino/otie, - /obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, - /obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax, - /obj/item/weapon/lego, - /obj/item/weapon/dnainjector/nobreath, - /obj/item/weapon/dnainjector/regenerate, - /obj/item/weapon/dnainjector/remoteview, - /obj/item/weapon/dnainjector/runfast, - /obj/item/weapon/dnainjector/telemut, - /obj/item/weapon/dnainjector/xraymut, - /obj/item/instrument/accordion, - /obj/item/instrument/banjo, - /obj/item/instrument/bikehorn, - /obj/item/instrument/eguitar, - /obj/item/instrument/glockenspiel, - /obj/item/instrument/guitar, - /obj/item/instrument/harmonica, - /obj/item/instrument/keytar, - /obj/item/instrument/musicalmoth, - /obj/item/instrument/piano_synth, - /obj/item/instrument/recorder, - /obj/item/instrument/saxophone, - /obj/item/instrument/saxophone/spectral, - /obj/item/instrument/trombone, - /obj/item/instrument/trombone/spectral, - /obj/item/instrument/trumpet, - /obj/item/instrument/trumpet/spectral, - /obj/item/instrument/violin, - /obj/item/instrument/violin/golden, - /obj/item/instrument/xylophone, - /obj/item/weapon/implantcase/adrenalin, - /obj/item/weapon/implantcase/analyzer, - /obj/item/weapon/implantcase/armblade, - /obj/item/weapon/implantcase/dart, - /obj/item/weapon/implantcase/freedom, - /obj/item/weapon/implantcase/handblade, - /obj/item/weapon/implantcase/language/eal, - /obj/item/weapon/implantcase/laser, - /obj/item/weapon/implantcase/loyalty, - /obj/item/weapon/implantcase/medkit, - /obj/item/weapon/implantcase/restrainingbolt, - /obj/item/weapon/implantcase/shades, - /obj/item/weapon/implantcase/sprinter, - /obj/item/weapon/implantcase/surge, - /obj/item/weapon/implantcase/sword, - /obj/item/weapon/implantcase/taser, - /obj/item/weapon/implantcase/toolkit, - /obj/item/weapon/implantcase/vrlanguage, - /obj/item/weapon/implanter/sizecontrol, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, - /obj/item/weapon/rig/bayeng, - /obj/item/weapon/rig/baymed, - /obj/item/weapon/rig/ce, - /obj/item/weapon/rig/ch/pursuit, - /obj/item/weapon/rig/combat, - /obj/item/weapon/rig/ert/janitor, - /obj/item/weapon/rig/industrial, - /obj/item/weapon/rig/internalaffairs, - /obj/item/weapon/rig/medical) - - var/gift_type_chaos = pick( - /obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla, - /obj/item/weapon/dnainjector/hulkmut, - /obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, - /obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer, - /obj/item/weapon/spellbook, - /obj/item/weapon/book/tome/imbued) - - var/obj/item/I = null - - - if(chaos) - if(!ispath(gift_type_chaos,/obj/item)) return - I = new gift_type_chaos(M) - - else - if(!ispath(gift_type_advanced,/obj/item)) return - I = new gift_type_advanced(M) - - M.remove_from_mob(src) - M.put_in_hands(I) - I.add_fingerprint(M) - - qdel(src) + +// Chomp gift, randomized color and size, wider selection of items to obtain, also chance of chaos present with even wilder stuff + + +/obj/item/weapon/a_gift/advanced + name = "present" + desc = "Its a Christmas present! It has a tag on it that says: 'Chomp staff thank you all for the year that has passed and wish you a merry Christmas and a happy new year. May the new year be good and well for you with many achievements and happy times!'" + icon = 'icons/obj/items_ch.dmi' + icon_state = "chomp_present" + item_state = "chomp_present" + plane = ABOVE_MOB_PLANE + var/chaos + +/obj/item/weapon/a_gift/advanced/New() + ..() + icon_state += "_[pick("g","r","b","y","p")]" + if(prob(1)) + icon_state = "chomp_present_chaos" + chaos = TRUE + name = "chaotic present" + desc = "The casino dev messed up and gave you the wrong present! This one pulses with potential for good or evil!" + return + +/obj/item/weapon/a_gift/advanced/attack_self(mob/M as mob) //WIP - ALWAYS add more items to list! - Jack + var/gift_type_advanced = pick( + /obj/item/device/binoculars/spyglass, + /obj/item/device/bodysnatcher, + /obj/item/device/cataloguer/advanced, + /obj/item/device/flashlight/slime, + /obj/item/device/lightreplacer, + /obj/item/weapon/book/tome, + /obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, + /obj/item/weapon/disk/nifsoft/compliance, + /obj/item/weapon/implanter/adrenalin, + /obj/item/weapon/lego, + /obj/item/weapon/moneybag, + /obj/item/weapon/pickaxe/diamonddrill, + /obj/item/weapon/rcd/advanced/loaded, + /obj/item/weapon/bluespace_harpoon, + /obj/item/weapon/storage/backpack/dufflebag/syndie, + /obj/item/weapon/storage/belt/medical/alien, + /obj/item/weapon/storage/toolbox/syndicate/powertools, + /obj/item/weapon/surgical/FixOVein/alien, + /obj/item/weapon/surgical/bone_clamp/alien, + /obj/item/weapon/surgical/cautery/alien, + /obj/item/weapon/surgical/circular_saw/alien, + /obj/item/weapon/surgical/hemostat/alien, + /obj/item/weapon/surgical/retractor/alien, + /obj/item/weapon/surgical/scalpel/alien, + /obj/item/weapon/surgical/surgicaldrill/alien, + /obj/item/weapon/sword/fluff/joanaria/scisword, + /obj/item/weapon/tool/wrench/alien, + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/weldingtool/alien, + /obj/item/weapon/twohanded/fireaxe/fluff/mjollnir, + /obj/item/weapon/gun/launcher/confetti_cannon/overdrive, + /obj/item/weapon/gun/energy/sizegun, + /obj/item/weapon/gun/energy/netgun, + /obj/item/weapon/storage/belt/utility/alien, + /obj/item/clothing/suit/armor/alien, + /obj/item/clothing/glasses/monocoole, + /obj/item/weapon/reagent_containers/spray/chemsprayer, + /obj/item/weapon/reagent_containers/glass/beaker/bluespace, + /obj/item/weapon/reagent_containers/glass/beaker/noreact, + /obj/item/weapon/storage/box/casino/costume_whitebunny, + /obj/item/weapon/storage/box/casino/costume_blackbunny, + /obj/item/weapon/storage/box/casino/costume_sexymime, + /obj/item/weapon/storage/box/casino/costume_sexyclown, + /obj/item/weapon/storage/box/casino/costume_nyangirl, + /obj/item/weapon/storage/box/casino/costume_wizard, + /obj/item/weapon/storage/box/casino/costume_chicken, + /obj/item/weapon/storage/box/casino/costume_gladiator, + /obj/item/weapon/storage/box/casino/costume_pirate, + /obj/item/weapon/storage/box/casino/costume_commie, + /obj/item/weapon/storage/box/casino/costume_imperiummonk, + /obj/item/weapon/storage/box/casino/costume_plaguedoctor, + /obj/item/weapon/storage/box/casino/costume_cutewitch, + /obj/item/weapon/grenade/spawnergrenade/casino, + /obj/item/weapon/grenade/spawnergrenade/casino/goat, + /obj/item/weapon/grenade/spawnergrenade/casino/armadillo, + /obj/item/weapon/grenade/spawnergrenade/casino/cat, + /obj/item/weapon/grenade/spawnergrenade/casino/chicken, + /obj/item/weapon/grenade/spawnergrenade/casino/cow, + /obj/item/weapon/grenade/spawnergrenade/casino/corgi, + /obj/item/weapon/grenade/spawnergrenade/casino/fox, + /obj/item/weapon/grenade/spawnergrenade/casino/lizard, + /obj/item/weapon/grenade/spawnergrenade/casino/penguin, + /obj/item/weapon/grenade/spawnergrenade/casino/snake, + /obj/item/weapon/grenade/spawnergrenade/casino/yithian, + /obj/item/weapon/grenade/spawnergrenade/casino/tindalos, + /obj/item/weapon/grenade/spawnergrenade/casino/fennec, + /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, + /obj/item/weapon/grenade/spawnergrenade/casino/horse, + /obj/item/weapon/grenade/spawnergrenade/casino/otie, + /obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby, + /obj/item/weapon/grenade/spawnergrenade/casino/zorgoia, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax, + /obj/item/weapon/lego, + /obj/item/weapon/dnainjector/nobreath, + /obj/item/weapon/dnainjector/regenerate, + /obj/item/weapon/dnainjector/remoteview, + /obj/item/weapon/dnainjector/runfast, + /obj/item/weapon/dnainjector/telemut, + /obj/item/weapon/dnainjector/xraymut, + /obj/item/instrument/accordion, + /obj/item/instrument/banjo, + /obj/item/instrument/bikehorn, + /obj/item/instrument/eguitar, + /obj/item/instrument/glockenspiel, + /obj/item/instrument/guitar, + /obj/item/instrument/harmonica, + /obj/item/instrument/keytar, + /obj/item/instrument/musicalmoth, + /obj/item/instrument/piano_synth, + /obj/item/instrument/recorder, + /obj/item/instrument/saxophone, + /obj/item/instrument/saxophone/spectral, + /obj/item/instrument/trombone, + /obj/item/instrument/trombone/spectral, + /obj/item/instrument/trumpet, + /obj/item/instrument/trumpet/spectral, + /obj/item/instrument/violin, + /obj/item/instrument/violin/golden, + /obj/item/instrument/xylophone, + /obj/item/weapon/implantcase/adrenalin, + /obj/item/weapon/implantcase/analyzer, + /obj/item/weapon/implantcase/armblade, + /obj/item/weapon/implantcase/dart, + /obj/item/weapon/implantcase/freedom, + /obj/item/weapon/implantcase/handblade, + /obj/item/weapon/implantcase/language/eal, + /obj/item/weapon/implantcase/laser, + /obj/item/weapon/implantcase/loyalty, + /obj/item/weapon/implantcase/medkit, + /obj/item/weapon/implantcase/restrainingbolt, + /obj/item/weapon/implantcase/shades, + /obj/item/weapon/implantcase/sprinter, + /obj/item/weapon/implantcase/surge, + /obj/item/weapon/implantcase/sword, + /obj/item/weapon/implantcase/taser, + /obj/item/weapon/implantcase/toolkit, + /obj/item/weapon/implantcase/vrlanguage, + /obj/item/weapon/implanter/sizecontrol, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft, + /obj/item/weapon/rig/bayeng, + /obj/item/weapon/rig/baymed, + /obj/item/weapon/rig/ce, + /obj/item/weapon/rig/ch/pursuit, + /obj/item/weapon/rig/combat, + /obj/item/weapon/rig/ert/janitor, + /obj/item/weapon/rig/industrial, + /obj/item/weapon/rig/internalaffairs, + /obj/item/weapon/rig/medical) + + var/gift_type_chaos = pick( + /obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla, + /obj/item/weapon/dnainjector/hulkmut, + /obj/item/weapon/grenade/spawnergrenade/casino/infinitycake, + /obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer, + /obj/item/weapon/spellbook, + /obj/item/weapon/book/tome/imbued) + + var/obj/item/I = null + + + if(chaos) + if(!ispath(gift_type_chaos,/obj/item)) return + I = new gift_type_chaos(M) + + else + if(!ispath(gift_type_advanced,/obj/item)) return + I = new gift_type_advanced(M) + + M.remove_from_mob(src) + M.put_in_hands(I) + I.add_fingerprint(M) + + qdel(src) return \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm index fe4d80418d..5a2aad6ac3 100644 --- a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm +++ b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm @@ -1,22 +1,22 @@ -/obj/item/weapon/grenade/anti_photon - desc = "An experimental device for temporarily removing light in a limited area." - name = "photon disruption grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "emp" - det_time = 20 - origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) - -/obj/item/weapon/grenade/anti_photon/detonate() - playsound(src, 'sound/effects/phasein.ogg', 50, 1, 5) - set_light(10, -10, "#FFFFFF") - - var/extra_delay = rand(0,90) - - spawn(extra_delay) - spawn(200) - if(prob(10+extra_delay)) - set_light(10, 10, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") - spawn(210) - ..() - playsound(src, 'sound/effects/bang.ogg', 50, 1, 5) - qdel(src) +/obj/item/weapon/grenade/anti_photon + desc = "An experimental device for temporarily removing light in a limited area." + name = "photon disruption grenade" + icon = 'icons/obj/grenade.dmi' + icon_state = "emp" + det_time = 20 + origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) + +/obj/item/weapon/grenade/anti_photon/detonate() + playsound(src, 'sound/effects/phasein.ogg', 50, 1, 5) + set_light(10, -10, "#FFFFFF") + + var/extra_delay = rand(0,90) + + spawn(extra_delay) + spawn(200) + if(prob(10+extra_delay)) + set_light(10, 10, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") + spawn(210) + ..() + playsound(src, 'sound/effects/bang.ogg', 50, 1, 5) + qdel(src) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index c0c08d94fc..84fade96cf 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -1,316 +1,316 @@ -/obj/item/weapon/grenade/chem_grenade - name = "grenade casing" - icon_state = "chemg" - item_state = "grenade" - desc = "A hand made chemical grenade." - w_class = ITEMSIZE_SMALL - force = 2.0 - det_time = null - unacidable = TRUE - - var/stage = 0 - var/state = 0 - var/path = 0 - /// If TRUE, grenade is permanently sealed when fully assembled, useful for things like off-the-shelf grenades. - var/sealed = FALSE - var/obj/item/device/assembly_holder/detonator = null - var/list/beakers = new/list() - var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle) - var/affected_area = 3 - -/obj/item/weapon/grenade/chem_grenade/Initialize() - . = ..() - create_reagents(1000) - -/obj/item/weapon/grenade/chem_grenade/Destroy() - QDEL_NULL(detonator) - QDEL_LIST_NULL(beakers) - return ..() - -/obj/item/weapon/grenade/chem_grenade/attack_self(mob/user as mob) - if(!stage || stage==1) - if(detonator) -// detonator.loc=src.loc - detonator.detached() - usr.put_in_hands(detonator) - detonator=null - det_time = null - stage=0 - icon_state = initial(icon_state) - else if(beakers.len) - for(var/obj/B in beakers) - if(istype(B)) - beakers -= B - user.put_in_hands(B) - name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" - if(stage > 1 && !active && clown_check(user)) - to_chat(user, "You prime \the [name]!") - - msg_admin_attack("[key_name_admin(user)] primed \a [src]") - - activate() - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - -/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && !detonator && path != 2) - var/obj/item/device/assembly_holder/det = W - if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right))) - to_chat(user, "Assembly must contain one igniter.") - return - if(!det.secured) - to_chat(user, "Assembly must be secured with screwdriver.") - return - path = 1 - to_chat(user, "You add [W] to the metal casing.") - playsound(src, 'sound/items/Screwdriver2.ogg', 25, -3) - user.remove_from_mob(det) - det.loc = src - detonator = det - if(istimer(detonator.a_left)) - var/obj/item/device/assembly/timer/T = detonator.a_left - det_time = 10*T.time - if(istimer(detonator.a_right)) - var/obj/item/device/assembly/timer/T = detonator.a_right - det_time = 10*T.time - icon_state = initial(icon_state) +"_ass" - name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" - stage = 1 - else if(W.has_tool_quality(TOOL_SCREWDRIVER) && path != 2) - if(stage == 1) - path = 1 - if(beakers.len) - to_chat(user, "You lock the assembly.") - name = "grenade" - else -// to_chat(user, "You need to add at least one beaker before locking the assembly.") - to_chat(user, "You lock the empty assembly.") - name = "fake grenade" - playsound(src, W.usesound, 50, 1) - icon_state = initial(icon_state) +"_locked" - stage = 2 - else if(stage == 2) - if(active && prob(95)) - to_chat(user, "You trigger the assembly!") - detonate() - else if(sealed) - to_chat(user, "This grenade lacks a way to disassemble it.") - else - to_chat(user, "You unlock the assembly.") - playsound(src, W.usesound, 50, -3) - name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" - icon_state = initial(icon_state) + (detonator?"_ass":"") - stage = 1 - active = 0 - else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) - path = 1 - if(beakers.len == 2) - to_chat(user, "The grenade can not hold more containers.") - return - else - if(W.reagents.total_volume) - to_chat(user, "You add \the [W] to the assembly.") - user.drop_item() - W.loc = src - beakers += W - stage = 1 - name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" - else - to_chat(user, "\The [W] is empty.") - -/obj/item/weapon/grenade/chem_grenade/examine(mob/user) - . = ..() - if(detonator) - . += "It has [detonator.name] attached to it." - -/obj/item/weapon/grenade/chem_grenade/activate(mob/user as mob) - if(active) return - - if(detonator) - if(!isigniter(detonator.a_left)) - detonator.a_left.activate() - active = 1 - if(!isigniter(detonator.a_right)) - detonator.a_right.activate() - active = 1 - if(active) - icon_state = initial(icon_state) + "_active" - - if(user) - msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") - - return - -/obj/item/weapon/grenade/chem_grenade/proc/primed(var/primed = 1) - if(active) - icon_state = initial(icon_state) + (primed?"_primed":"_active") - -/obj/item/weapon/grenade/chem_grenade/detonate() - if(!stage || stage<2) return - - var/has_reagents = 0 - for(var/obj/item/weapon/reagent_containers/glass/G in beakers) - if(G.reagents.total_volume) has_reagents = 1 - - active = 0 - if(!has_reagents) - icon_state = initial(icon_state) +"_locked" - playsound(src, 'sound/items/Screwdriver2.ogg', 50, 1) - spawn(0) //Otherwise det_time is erroneously set to 0 after this - if(istimer(detonator.a_left)) //Make sure description reflects that the timer has been reset - var/obj/item/device/assembly/timer/T = detonator.a_left - det_time = 10*T.time - if(istimer(detonator.a_right)) - var/obj/item/device/assembly/timer/T = detonator.a_right - det_time = 10*T.time - return - - playsound(src, 'sound/effects/bamf.ogg', 50, 1) - - for(var/obj/item/weapon/reagent_containers/glass/G in beakers) - G.reagents.trans_to_obj(src, G.reagents.total_volume) - - if(src.reagents.total_volume) //The possible reactions didnt use up all reagents. - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() - steam.set_up(10, 0, get_turf(src)) - steam.attach(src) - steam.start() - - for(var/atom/A in view(affected_area, src.loc)) - if( A == src ) continue - src.reagents.touch(A) - - if(istype(loc, /mob/living/carbon)) //drop dat grenade if it goes off in your hand - var/mob/living/carbon/C = loc - C.drop_from_inventory(src) - C.throw_mode_off() - - invisibility = INVISIBILITY_MAXIMUM //Why am i doing this? - spawn(50) //To make sure all reagents can work - qdel(src) //correctly before deleting the grenade. - - -/obj/item/weapon/grenade/chem_grenade/large - name = "large chem grenade" - desc = "An oversized grenade that affects a larger area." - icon_state = "large_grenade" - allowed_containers = list(/obj/item/weapon/reagent_containers/glass) - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - affected_area = 4 - -/obj/item/weapon/grenade/chem_grenade/metalfoam - name = "metal-foam grenade" - desc = "Used for emergency sealing of air breaches." - icon_state = "foam" - path = 1 - stage = 2 - sealed = TRUE - -/obj/item/weapon/grenade/chem_grenade/metalfoam/Initialize() - . = ..() - var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent("aluminum", 30) - B2.reagents.add_reagent("foaming_agent", 10) - B2.reagents.add_reagent("pacid", 10) - - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - - beakers += B1 - beakers += B2 - -/obj/item/weapon/grenade/chem_grenade/incendiary - name = "incendiary grenade" - desc = "Used for clearing rooms of living things." - icon_state = "incendiary" - path = 1 - stage = 2 - sealed = TRUE - -/obj/item/weapon/grenade/chem_grenade/incendiary/Initialize() - . = ..() - var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent("aluminum", 15) - B1.reagents.add_reagent("fuel",20) - B2.reagents.add_reagent("phoron", 15) - B2.reagents.add_reagent("sacid", 15) - B1.reagents.add_reagent("fuel",20) - - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - - beakers += B1 - beakers += B2 - -/obj/item/weapon/grenade/chem_grenade/antiweed - name = "weedkiller grenade" - desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." - path = 1 - stage = 2 - sealed = TRUE - -/obj/item/weapon/grenade/chem_grenade/antiweed/Initialize() - . = ..() - var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent("plantbgone", 25) - B1.reagents.add_reagent("potassium", 25) - B2.reagents.add_reagent("phosphorus", 25) - B2.reagents.add_reagent("sugar", 25) - - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - - beakers += B1 - beakers += B2 - icon_state = "grenade" - -/obj/item/weapon/grenade/chem_grenade/cleaner - name = "cleaner grenade" - desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." - icon_state = "cleaner" - stage = 2 - path = 1 - sealed = TRUE - -/obj/item/weapon/grenade/chem_grenade/cleaner/Initialize() - . = ..() - var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent("fluorosurfactant", 40) - B2.reagents.add_reagent("water", 40) - B2.reagents.add_reagent("cleaner", 10) - - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - - beakers += B1 - beakers += B2 - -/obj/item/weapon/grenade/chem_grenade/teargas - name = "tear gas grenade" - desc = "Concentrated Capsaicin. Contents under pressure. Use with caution." - icon_state = "teargas" - stage = 2 - path = 1 - sealed = TRUE - -/obj/item/weapon/grenade/chem_grenade/teargas/Initialize() - . = ..() - var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src) - - B1.reagents.add_reagent("phosphorus", 40) - B1.reagents.add_reagent("potassium", 40) - B1.reagents.add_reagent("condensedcapsaicin", 40) - B2.reagents.add_reagent("sugar", 40) - B2.reagents.add_reagent("condensedcapsaicin", 80) - - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - - beakers += B1 - beakers += B2 +/obj/item/weapon/grenade/chem_grenade + name = "grenade casing" + icon_state = "chemg" + item_state = "grenade" + desc = "A hand made chemical grenade." + w_class = ITEMSIZE_SMALL + force = 2.0 + det_time = null + unacidable = TRUE + + var/stage = 0 + var/state = 0 + var/path = 0 + /// If TRUE, grenade is permanently sealed when fully assembled, useful for things like off-the-shelf grenades. + var/sealed = FALSE + var/obj/item/device/assembly_holder/detonator = null + var/list/beakers = new/list() + var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle) + var/affected_area = 3 + +/obj/item/weapon/grenade/chem_grenade/Initialize() + . = ..() + create_reagents(1000) + +/obj/item/weapon/grenade/chem_grenade/Destroy() + QDEL_NULL(detonator) + QDEL_LIST_NULL(beakers) + return ..() + +/obj/item/weapon/grenade/chem_grenade/attack_self(mob/user as mob) + if(!stage || stage==1) + if(detonator) +// detonator.loc=src.loc + detonator.detached() + usr.put_in_hands(detonator) + detonator=null + det_time = null + stage=0 + icon_state = initial(icon_state) + else if(beakers.len) + for(var/obj/B in beakers) + if(istype(B)) + beakers -= B + user.put_in_hands(B) + name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" + if(stage > 1 && !active && clown_check(user)) + to_chat(user, "You prime \the [name]!") + + msg_admin_attack("[key_name_admin(user)] primed \a [src]") + + activate() + add_fingerprint(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.throw_mode_on() + +/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && !detonator && path != 2) + var/obj/item/device/assembly_holder/det = W + if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right))) + to_chat(user, "Assembly must contain one igniter.") + return + if(!det.secured) + to_chat(user, "Assembly must be secured with screwdriver.") + return + path = 1 + to_chat(user, "You add [W] to the metal casing.") + playsound(src, 'sound/items/Screwdriver2.ogg', 25, -3) + user.remove_from_mob(det) + det.loc = src + detonator = det + if(istimer(detonator.a_left)) + var/obj/item/device/assembly/timer/T = detonator.a_left + det_time = 10*T.time + if(istimer(detonator.a_right)) + var/obj/item/device/assembly/timer/T = detonator.a_right + det_time = 10*T.time + icon_state = initial(icon_state) +"_ass" + name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" + stage = 1 + else if(W.has_tool_quality(TOOL_SCREWDRIVER) && path != 2) + if(stage == 1) + path = 1 + if(beakers.len) + to_chat(user, "You lock the assembly.") + name = "grenade" + else +// to_chat(user, "You need to add at least one beaker before locking the assembly.") + to_chat(user, "You lock the empty assembly.") + name = "fake grenade" + playsound(src, W.usesound, 50, 1) + icon_state = initial(icon_state) +"_locked" + stage = 2 + else if(stage == 2) + if(active && prob(95)) + to_chat(user, "You trigger the assembly!") + detonate() + else if(sealed) + to_chat(user, "This grenade lacks a way to disassemble it.") + else + to_chat(user, "You unlock the assembly.") + playsound(src, W.usesound, 50, -3) + name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" + icon_state = initial(icon_state) + (detonator?"_ass":"") + stage = 1 + active = 0 + else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) + path = 1 + if(beakers.len == 2) + to_chat(user, "The grenade can not hold more containers.") + return + else + if(W.reagents.total_volume) + to_chat(user, "You add \the [W] to the assembly.") + user.drop_item() + W.loc = src + beakers += W + stage = 1 + name = "unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]" + else + to_chat(user, "\The [W] is empty.") + +/obj/item/weapon/grenade/chem_grenade/examine(mob/user) + . = ..() + if(detonator) + . += "It has [detonator.name] attached to it." + +/obj/item/weapon/grenade/chem_grenade/activate(mob/user as mob) + if(active) return + + if(detonator) + if(!isigniter(detonator.a_left)) + detonator.a_left.activate() + active = 1 + if(!isigniter(detonator.a_right)) + detonator.a_right.activate() + active = 1 + if(active) + icon_state = initial(icon_state) + "_active" + + if(user) + msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") + + return + +/obj/item/weapon/grenade/chem_grenade/proc/primed(var/primed = 1) + if(active) + icon_state = initial(icon_state) + (primed?"_primed":"_active") + +/obj/item/weapon/grenade/chem_grenade/detonate() + if(!stage || stage<2) return + + var/has_reagents = 0 + for(var/obj/item/weapon/reagent_containers/glass/G in beakers) + if(G.reagents.total_volume) has_reagents = 1 + + active = 0 + if(!has_reagents) + icon_state = initial(icon_state) +"_locked" + playsound(src, 'sound/items/Screwdriver2.ogg', 50, 1) + spawn(0) //Otherwise det_time is erroneously set to 0 after this + if(istimer(detonator.a_left)) //Make sure description reflects that the timer has been reset + var/obj/item/device/assembly/timer/T = detonator.a_left + det_time = 10*T.time + if(istimer(detonator.a_right)) + var/obj/item/device/assembly/timer/T = detonator.a_right + det_time = 10*T.time + return + + playsound(src, 'sound/effects/bamf.ogg', 50, 1) + + for(var/obj/item/weapon/reagent_containers/glass/G in beakers) + G.reagents.trans_to_obj(src, G.reagents.total_volume) + + if(src.reagents.total_volume) //The possible reactions didnt use up all reagents. + var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + steam.set_up(10, 0, get_turf(src)) + steam.attach(src) + steam.start() + + for(var/atom/A in view(affected_area, src.loc)) + if( A == src ) continue + src.reagents.touch(A) + + if(istype(loc, /mob/living/carbon)) //drop dat grenade if it goes off in your hand + var/mob/living/carbon/C = loc + C.drop_from_inventory(src) + C.throw_mode_off() + + invisibility = INVISIBILITY_MAXIMUM //Why am i doing this? + spawn(50) //To make sure all reagents can work + qdel(src) //correctly before deleting the grenade. + + +/obj/item/weapon/grenade/chem_grenade/large + name = "large chem grenade" + desc = "An oversized grenade that affects a larger area." + icon_state = "large_grenade" + allowed_containers = list(/obj/item/weapon/reagent_containers/glass) + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) + affected_area = 4 + +/obj/item/weapon/grenade/chem_grenade/metalfoam + name = "metal-foam grenade" + desc = "Used for emergency sealing of air breaches." + icon_state = "foam" + path = 1 + stage = 2 + sealed = TRUE + +/obj/item/weapon/grenade/chem_grenade/metalfoam/Initialize() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) + + B1.reagents.add_reagent("aluminum", 30) + B2.reagents.add_reagent("foaming_agent", 10) + B2.reagents.add_reagent("pacid", 10) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + +/obj/item/weapon/grenade/chem_grenade/incendiary + name = "incendiary grenade" + desc = "Used for clearing rooms of living things." + icon_state = "incendiary" + path = 1 + stage = 2 + sealed = TRUE + +/obj/item/weapon/grenade/chem_grenade/incendiary/Initialize() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) + + B1.reagents.add_reagent("aluminum", 15) + B1.reagents.add_reagent("fuel",20) + B2.reagents.add_reagent("phoron", 15) + B2.reagents.add_reagent("sacid", 15) + B1.reagents.add_reagent("fuel",20) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + +/obj/item/weapon/grenade/chem_grenade/antiweed + name = "weedkiller grenade" + desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." + path = 1 + stage = 2 + sealed = TRUE + +/obj/item/weapon/grenade/chem_grenade/antiweed/Initialize() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) + + B1.reagents.add_reagent("plantbgone", 25) + B1.reagents.add_reagent("potassium", 25) + B2.reagents.add_reagent("phosphorus", 25) + B2.reagents.add_reagent("sugar", 25) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + icon_state = "grenade" + +/obj/item/weapon/grenade/chem_grenade/cleaner + name = "cleaner grenade" + desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." + icon_state = "cleaner" + stage = 2 + path = 1 + sealed = TRUE + +/obj/item/weapon/grenade/chem_grenade/cleaner/Initialize() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) + + B1.reagents.add_reagent("fluorosurfactant", 40) + B2.reagents.add_reagent("water", 40) + B2.reagents.add_reagent("cleaner", 10) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + +/obj/item/weapon/grenade/chem_grenade/teargas + name = "tear gas grenade" + desc = "Concentrated Capsaicin. Contents under pressure. Use with caution." + icon_state = "teargas" + stage = 2 + path = 1 + sealed = TRUE + +/obj/item/weapon/grenade/chem_grenade/teargas/Initialize() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src) + + B1.reagents.add_reagent("phosphorus", 40) + B1.reagents.add_reagent("potassium", 40) + B1.reagents.add_reagent("condensedcapsaicin", 40) + B2.reagents.add_reagent("sugar", 40) + B2.reagents.add_reagent("condensedcapsaicin", 80) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index 26c68b0f20..89aff71bb3 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -1,25 +1,25 @@ -/obj/item/weapon/grenade/empgrenade - name = "emp grenade" - icon_state = "emp" - item_state = "empgrenade" - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) - var/emp_heavy = 2 - var/emp_med = 4 - var/emp_light = 7 - var/emp_long = 10 - -/obj/item/weapon/grenade/empgrenade/detonate() - ..() - if(empulse(src, emp_heavy, emp_med, emp_light, emp_long)) - qdel(src) - return - -/obj/item/weapon/grenade/empgrenade/low_yield - name = "low yield emp grenade" - desc = "A weaker variant of the EMP grenade" - icon_state = "lyemp" - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) - emp_heavy = 1 - emp_med = 2 - emp_light = 3 +/obj/item/weapon/grenade/empgrenade + name = "emp grenade" + icon_state = "emp" + item_state = "empgrenade" + origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) + var/emp_heavy = 2 + var/emp_med = 4 + var/emp_light = 7 + var/emp_long = 10 + +/obj/item/weapon/grenade/empgrenade/detonate() + ..() + if(empulse(src, emp_heavy, emp_med, emp_light, emp_long)) + qdel(src) + return + +/obj/item/weapon/grenade/empgrenade/low_yield + name = "low yield emp grenade" + desc = "A weaker variant of the EMP grenade" + icon_state = "lyemp" + origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) + emp_heavy = 1 + emp_med = 2 + emp_light = 3 emp_long = 4 \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 5cec3c8759..d32c016414 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -1,168 +1,168 @@ -/obj/item/weapon/grenade/flashbang - name = "flashbang" - icon_state = "flashbang" - item_state = "flashbang" - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) - var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans. - var/banglet = 0 - -/obj/item/weapon/grenade/flashbang/detonate() - ..() - for(var/obj/structure/closet/L in hear(max_range, get_turf(src))) - if(locate(/mob/living/carbon/, L)) - for(var/mob/living/carbon/M in L) - bang(get_turf(src), M) - - for(var/mob/living/carbon/M in hear(max_range, get_turf(src))) - bang(get_turf(src), M) - - for(var/obj/structure/blob/B in hear(max_range - 2,get_turf(src))) //Blob damage here - var/damage = round(30/(get_dist(B,get_turf(src))+1)) - if(B.overmind) - damage *= B.overmind.blob_type.burn_multiplier - B.adjust_integrity(-damage) - - new/obj/effect/effect/sparks(src.loc) - new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF") - - qdel(src) - -/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. - to_chat(M, "BANG") // Called during the loop that bangs people in lockers/containers and when banging - playsound(src, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions. - // -- Polymorph - - //Checking for protections - var/eye_safety = 0 - var/ear_safety = 0 - if(iscarbon(M)) - eye_safety = M.eyecheck() - ear_safety = M.get_ear_protection() - - //Flashing everyone - var/mob/living/carbon/human/H = M - var/flash_effectiveness = 1 - var/bang_effectiveness = 1 - if(ishuman(M)) - flash_effectiveness = H.species.flash_mod - bang_effectiveness = H.species.sound_mod - if(eye_safety < 1 && get_dist(M, T) <= round(max_range * 0.7 * flash_effectiveness)) - M.flash_eyes() - M.Confuse(2 * flash_effectiveness) - M.Weaken(5 * flash_effectiveness) - - //Now applying sound - if((get_dist(M, T) <= round(max_range * 0.3 * bang_effectiveness) || src.loc == M.loc || src.loc == M)) - if(ear_safety > 0) - M.Confuse(2) - M.Weaken(1) - else - M.Confuse(10) - M.Weaken(3) - if ((prob(14) || (M == src.loc && prob(70)))) - M.ear_damage += rand(1, 10) - else - M.ear_damage += rand(0, 5) - M.ear_deaf = max(M.ear_deaf,15) - M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness - - else if(get_dist(M, T) <= round(max_range * 0.5 * bang_effectiveness)) - if(!ear_safety) - M.Confuse(8) - M.ear_damage += rand(0, 3) - M.ear_deaf = max(M.ear_deaf,10) - M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness - - else if(!ear_safety && get_dist(M, T) <= (max_range * 0.7 * bang_effectiveness)) - M.Confuse(4) - M.ear_damage += rand(0, 1) - M.ear_deaf = max(M.ear_deaf,5) - M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness - - //This really should be in mob not every check - if(ishuman(M)) - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] - if (E && E.damage >= E.min_bruised_damage) - to_chat(M, "Your eyes start to burn badly!") - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (E.damage >= E.min_broken_damage) - to_chat(M, "You can't see anything!") - if (M.ear_damage >= 15) - to_chat(M, "Your ears start to ring badly!") - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.ear_damage - 10 + 5)) - to_chat(M, "You can't hear anything!") - M.sdisabilities |= DEAF - else if(M.ear_damage >= 5) - to_chat(M, "Your ears start to ring!") - -/obj/item/weapon/grenade/flashbang/Destroy() - walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever. - return ..() - - -/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve - desc = "Use of this weapon may constiute a war crime in your area, consult your local Site Manager." - name = "clusterbang" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang" - var/can_repeat = TRUE // Does this thing drop mini-clusterbangs? - var/min_banglets = 4 - var/max_banglets = 8 - -/obj/item/weapon/grenade/flashbang/clusterbang/detonate() - var/numspawned = rand(min_banglets, max_banglets) - var/again = 0 - - if(can_repeat) - for(var/more = numspawned, more > 0, more--) - if(prob(35)) - again++ - numspawned-- - - for(var/do_spawn = numspawned, do_spawn > 0, do_spawn--) - new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs - playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) - - for(var/do_again = again, do_again > 0, do_again--) - new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs - playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) - qdel(src) - return - -/obj/item/weapon/grenade/flashbang/clusterbang/segment - desc = "A smaller segment of a clusterbang. Better run." - name = "clusterbang segment" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang_segment" - can_repeat = FALSE - banglet = TRUE - -/obj/item/weapon/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode - ..() - - icon_state = "clusterbang_segment_active" - - var/stepdist = rand(1,4)//How far to step - var/temploc = src.loc//Saves the current location to know where to step away from - walk_away(src,temploc,stepdist)//I must go, my people need me - - var/dettime = rand(15,60) - spawn(dettime) - detonate() - -/obj/item/weapon/grenade/flashbang/cluster - banglet = TRUE - -/obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang - ..() - - icon_state = "flashbang_active" - - var/stepdist = rand(1,3) - var/temploc = src.loc - walk_away(src,temploc,stepdist) - - var/dettime = rand(15,60) - spawn(dettime) - detonate() +/obj/item/weapon/grenade/flashbang + name = "flashbang" + icon_state = "flashbang" + item_state = "flashbang" + origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) + var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans. + var/banglet = 0 + +/obj/item/weapon/grenade/flashbang/detonate() + ..() + for(var/obj/structure/closet/L in hear(max_range, get_turf(src))) + if(locate(/mob/living/carbon/, L)) + for(var/mob/living/carbon/M in L) + bang(get_turf(src), M) + + for(var/mob/living/carbon/M in hear(max_range, get_turf(src))) + bang(get_turf(src), M) + + for(var/obj/structure/blob/B in hear(max_range - 2,get_turf(src))) //Blob damage here + var/damage = round(30/(get_dist(B,get_turf(src))+1)) + if(B.overmind) + damage *= B.overmind.blob_type.burn_multiplier + B.adjust_integrity(-damage) + + new/obj/effect/effect/sparks(src.loc) + new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF") + + qdel(src) + +/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. + to_chat(M, "BANG") // Called during the loop that bangs people in lockers/containers and when banging + playsound(src, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions. + // -- Polymorph + + //Checking for protections + var/eye_safety = 0 + var/ear_safety = 0 + if(iscarbon(M)) + eye_safety = M.eyecheck() + ear_safety = M.get_ear_protection() + + //Flashing everyone + var/mob/living/carbon/human/H = M + var/flash_effectiveness = 1 + var/bang_effectiveness = 1 + if(ishuman(M)) + flash_effectiveness = H.species.flash_mod + bang_effectiveness = H.species.sound_mod + if(eye_safety < 1 && get_dist(M, T) <= round(max_range * 0.7 * flash_effectiveness)) + M.flash_eyes() + M.Confuse(2 * flash_effectiveness) + M.Weaken(5 * flash_effectiveness) + + //Now applying sound + if((get_dist(M, T) <= round(max_range * 0.3 * bang_effectiveness) || src.loc == M.loc || src.loc == M)) + if(ear_safety > 0) + M.Confuse(2) + M.Weaken(1) + else + M.Confuse(10) + M.Weaken(3) + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(1, 10) + else + M.ear_damage += rand(0, 5) + M.ear_deaf = max(M.ear_deaf,15) + M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness + + else if(get_dist(M, T) <= round(max_range * 0.5 * bang_effectiveness)) + if(!ear_safety) + M.Confuse(8) + M.ear_damage += rand(0, 3) + M.ear_deaf = max(M.ear_deaf,10) + M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness + + else if(!ear_safety && get_dist(M, T) <= (max_range * 0.7 * bang_effectiveness)) + M.Confuse(4) + M.ear_damage += rand(0, 1) + M.ear_deaf = max(M.ear_deaf,5) + M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness + + //This really should be in mob not every check + if(ishuman(M)) + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] + if (E && E.damage >= E.min_bruised_damage) + to_chat(M, "Your eyes start to burn badly!") + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (E.damage >= E.min_broken_damage) + to_chat(M, "You can't see anything!") + if (M.ear_damage >= 15) + to_chat(M, "Your ears start to ring badly!") + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (prob(M.ear_damage - 10 + 5)) + to_chat(M, "You can't hear anything!") + M.sdisabilities |= DEAF + else if(M.ear_damage >= 5) + to_chat(M, "Your ears start to ring!") + +/obj/item/weapon/grenade/flashbang/Destroy() + walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + + +/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve + desc = "Use of this weapon may constiute a war crime in your area, consult your local Site Manager." + name = "clusterbang" + icon = 'icons/obj/grenade.dmi' + icon_state = "clusterbang" + var/can_repeat = TRUE // Does this thing drop mini-clusterbangs? + var/min_banglets = 4 + var/max_banglets = 8 + +/obj/item/weapon/grenade/flashbang/clusterbang/detonate() + var/numspawned = rand(min_banglets, max_banglets) + var/again = 0 + + if(can_repeat) + for(var/more = numspawned, more > 0, more--) + if(prob(35)) + again++ + numspawned-- + + for(var/do_spawn = numspawned, do_spawn > 0, do_spawn--) + new /obj/item/weapon/grenade/flashbang/cluster(src.loc)//Launches flashbangs + playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) + + for(var/do_again = again, do_again > 0, do_again--) + new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs + playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) + qdel(src) + return + +/obj/item/weapon/grenade/flashbang/clusterbang/segment + desc = "A smaller segment of a clusterbang. Better run." + name = "clusterbang segment" + icon = 'icons/obj/grenade.dmi' + icon_state = "clusterbang_segment" + can_repeat = FALSE + banglet = TRUE + +/obj/item/weapon/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode + ..() + + icon_state = "clusterbang_segment_active" + + var/stepdist = rand(1,4)//How far to step + var/temploc = src.loc//Saves the current location to know where to step away from + walk_away(src,temploc,stepdist)//I must go, my people need me + + var/dettime = rand(15,60) + spawn(dettime) + detonate() + +/obj/item/weapon/grenade/flashbang/cluster + banglet = TRUE + +/obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang + ..() + + icon_state = "flashbang_active" + + var/stepdist = rand(1,3) + var/temploc = src.loc + walk_away(src,temploc,stepdist) + + var/dettime = rand(15,60) + spawn(dettime) + detonate() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 38565fea0d..6bf22d153d 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -1,119 +1,119 @@ -/obj/item/weapon/grenade - name = "grenade" - desc = "A hand held grenade, with an adjustable timer." - w_class = ITEMSIZE_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "grenade" - item_state = "grenade" - throw_speed = 4 - throw_range = 20 - slot_flags = SLOT_MASK|SLOT_BELT - - var/active = 0 - var/det_time = 50 - var/loadable = TRUE - var/arm_sound = 'sound/weapons/armbomb.ogg' - var/hud_state = "grenade_he" // TGMC Ammo HUD Port - var/hud_state_empty = "grenade_empty" // TGMC Ammo HUD Port - -/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) - if((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Huh? How does this thing work?") - - activate(user) - add_fingerprint(user) - spawn(5) - detonate() - return 0 - return 1 - - -/*/obj/item/weapon/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container - if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() - if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc) - to_chat(user, "You prime the [name]! [det_time/10] seconds!") - active = 1 - icon_state = initial(icon_state) + "_active" - playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(det_time) - detonate() - return - user.set_dir(get_dir(user, target)) - user.drop_item() - var/t = (isturf(target) ? target : target.loc) - walk_towards(src, t, 3) - return*/ - - -/obj/item/weapon/grenade/examine(mob/user) - . = ..() - if(get_dist(user, src) == 0) - if(det_time > 1) - . += "The timer is set to [det_time/10] seconds." - else if(det_time == null) - . += "\The [src] is set for instant detonation." - - -/obj/item/weapon/grenade/attack_self(mob/user as mob) - if(!active) - if(clown_check(user)) - to_chat(user, "You prime \the [name]! [det_time/10] seconds!") - - activate(user) - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - return - - -/obj/item/weapon/grenade/proc/activate(mob/user as mob) - if(active) - return - - if(user) - msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") - - icon_state = initial(icon_state) + "_active" - active = 1 - playsound(src, arm_sound, 75, 1, -3) - - spawn(det_time) - detonate() - return - - -/obj/item/weapon/grenade/proc/detonate() -// playsound(src, 'sound/items/Welder2.ogg', 25, 1) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(700,125) - - -/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - switch(det_time) - if (1) - det_time = 10 - to_chat(user, "You set the [name] for 1 second detonation time.") - if (10) - det_time = 30 - to_chat(user, "You set the [name] for 3 second detonation time.") - if (30) - det_time = 50 - to_chat(user, "You set the [name] for 5 second detonation time.") - if (50) - det_time = 1 - to_chat(user, "You set the [name] for instant detonation.") - add_fingerprint(user) - ..() - return - -/obj/item/weapon/grenade/attack_hand() - walk(src, null, null) - ..() - return - -/obj/item/weapon/grenade/vendor_action(var/obj/machinery/vending/V) +/obj/item/weapon/grenade + name = "grenade" + desc = "A hand held grenade, with an adjustable timer." + w_class = ITEMSIZE_SMALL + icon = 'icons/obj/grenade.dmi' + icon_state = "grenade" + item_state = "grenade" + throw_speed = 4 + throw_range = 20 + slot_flags = SLOT_MASK|SLOT_BELT + + var/active = 0 + var/det_time = 50 + var/loadable = TRUE + var/arm_sound = 'sound/weapons/armbomb.ogg' + var/hud_state = "grenade_he" // TGMC Ammo HUD Port + var/hud_state_empty = "grenade_empty" // TGMC Ammo HUD Port + +/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) + if((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "Huh? How does this thing work?") + + activate(user) + add_fingerprint(user) + spawn(5) + detonate() + return 0 + return 1 + + +/*/obj/item/weapon/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container + if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() + if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc) + to_chat(user, "You prime the [name]! [det_time/10] seconds!") + active = 1 + icon_state = initial(icon_state) + "_active" + playsound(src, 'sound/weapons/armbomb.ogg', 75, 1, -3) + spawn(det_time) + detonate() + return + user.set_dir(get_dir(user, target)) + user.drop_item() + var/t = (isturf(target) ? target : target.loc) + walk_towards(src, t, 3) + return*/ + + +/obj/item/weapon/grenade/examine(mob/user) + . = ..() + if(get_dist(user, src) == 0) + if(det_time > 1) + . += "The timer is set to [det_time/10] seconds." + else if(det_time == null) + . += "\The [src] is set for instant detonation." + + +/obj/item/weapon/grenade/attack_self(mob/user as mob) + if(!active) + if(clown_check(user)) + to_chat(user, "You prime \the [name]! [det_time/10] seconds!") + + activate(user) + add_fingerprint(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.throw_mode_on() + return + + +/obj/item/weapon/grenade/proc/activate(mob/user as mob) + if(active) + return + + if(user) + msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") + + icon_state = initial(icon_state) + "_active" + active = 1 + playsound(src, arm_sound, 75, 1, -3) + + spawn(det_time) + detonate() + return + + +/obj/item/weapon/grenade/proc/detonate() +// playsound(src, 'sound/items/Welder2.ogg', 25, 1) + var/turf/T = get_turf(src) + if(T) + T.hotspot_expose(700,125) + + +/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + switch(det_time) + if (1) + det_time = 10 + to_chat(user, "You set the [name] for 1 second detonation time.") + if (10) + det_time = 30 + to_chat(user, "You set the [name] for 3 second detonation time.") + if (30) + det_time = 50 + to_chat(user, "You set the [name] for 5 second detonation time.") + if (50) + det_time = 1 + to_chat(user, "You set the [name] for instant detonation.") + add_fingerprint(user) + ..() + return + +/obj/item/weapon/grenade/attack_hand() + walk(src, null, null) + ..() + return + +/obj/item/weapon/grenade/vendor_action(var/obj/machinery/vending/V) activate(V) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 1cb98be61a..e06aaf5332 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -1,39 +1,39 @@ -/obj/item/weapon/grenade/smokebomb - desc = "It is set to detonate in 2 seconds. These high-tech grenades can have their color adapted on the fly with a multitool!" - name = "smoke bomb" - icon = 'icons/obj/grenade.dmi' - icon_state = "flashbang" - det_time = 20 - item_state = "flashbang" - slot_flags = SLOT_BELT - hud_state = "grenade_smoke" - var/datum/effect/effect/system/smoke_spread/bad/smoke - var/smoke_color - var/smoke_strength = 8 - -/obj/item/weapon/grenade/smokebomb/New() - ..() - src.smoke = new /datum/effect/effect/system/smoke_spread/bad() - src.smoke.attach(src) - -/obj/item/weapon/grenade/smokebomb/Destroy() - qdel(smoke) - smoke = null - return ..() - -/obj/item/weapon/grenade/smokebomb/detonate() - playsound(src, 'sound/effects/smoke.ogg', 50, 1, -3) - src.smoke.set_up(10, 0, usr.loc) - spawn(0) - for(var/i = 1 to smoke_strength) - src.smoke.start(smoke_color) - sleep(10) - qdel(src) - - return - -/obj/item/weapon/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I,/obj/item/device/multitool)) - var/new_smoke_color = input(user, "Choose a color for the smoke:", "Smoke Color", smoke_color) as color|null - if(new_smoke_color) - smoke_color = new_smoke_color +/obj/item/weapon/grenade/smokebomb + desc = "It is set to detonate in 2 seconds. These high-tech grenades can have their color adapted on the fly with a multitool!" + name = "smoke bomb" + icon = 'icons/obj/grenade.dmi' + icon_state = "flashbang" + det_time = 20 + item_state = "flashbang" + slot_flags = SLOT_BELT + hud_state = "grenade_smoke" + var/datum/effect/effect/system/smoke_spread/bad/smoke + var/smoke_color + var/smoke_strength = 8 + +/obj/item/weapon/grenade/smokebomb/New() + ..() + src.smoke = new /datum/effect/effect/system/smoke_spread/bad() + src.smoke.attach(src) + +/obj/item/weapon/grenade/smokebomb/Destroy() + qdel(smoke) + smoke = null + return ..() + +/obj/item/weapon/grenade/smokebomb/detonate() + playsound(src, 'sound/effects/smoke.ogg', 50, 1, -3) + src.smoke.set_up(10, 0, usr.loc) + spawn(0) + for(var/i = 1 to smoke_strength) + src.smoke.start(smoke_color) + sleep(10) + qdel(src) + + return + +/obj/item/weapon/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/device/multitool)) + var/new_smoke_color = input(user, "Choose a color for the smoke:", "Smoke Color", smoke_color) as color|null + if(new_smoke_color) + smoke_color = new_smoke_color diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 5f1bd4503b..1356b3a947 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -1,79 +1,79 @@ -/obj/item/weapon/grenade/spawnergrenade - desc = "It is set to detonate in 5 seconds. It will unleash an unspecified anomaly into the vicinity." - name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "delivery" - item_state = "flashbang" - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) - var/banglet = 0 - var/spawner_type = null // must be an object path - var/deliveryamt = 1 // amount of type to deliver - -// Detonate now just handles the two loops that query for people in lockers and people who can see it. -/obj/item/weapon/grenade/spawnergrenade/detonate() - - if(spawner_type && deliveryamt) - // Make a quick flash - var/turf/T = get_turf(src) - playsound(src, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(T, null)) - if(M:eyecheck() <= 0) - M.flash_eyes() - - // Spawn some hostile syndicate critters - for(var/i=1, i<=deliveryamt, i++) - var/atom/movable/x = new spawner_type(T) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(x, pick(NORTH,SOUTH,EAST,WEST)) - qdel(src) - return - -/obj/item/weapon/grenade/spawnergrenade/manhacks - name = "manhack delivery grenade" - spawner_type = /mob/living/simple_mob/mechanical/viscerator - deliveryamt = 5 - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) - -/obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary - spawner_type = /mob/living/simple_mob/mechanical/viscerator/mercenary - -/obj/item/weapon/grenade/spawnergrenade/manhacks/raider - spawner_type = /mob/living/simple_mob/mechanical/viscerator/raider - -/obj/item/weapon/grenade/spawnergrenade/manhacks/station - desc = "It is set to detonate in 5 seconds. It will deploy three weaponized survey drones." - deliveryamt = 3 - spawner_type = /mob/living/simple_mob/mechanical/viscerator/station - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ILLEGAL = 1) - -/obj/item/weapon/grenade/spawnergrenade/ward - name = "sentry delivery grenade" - desc = "It is set to detonate in 5 seconds. It will deploy a single thermal-optic sentry drone." - spawner_type = /mob/living/simple_mob/mechanical/ward/monitor/crew - deliveryamt = 1 - origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_BLUESPACE = 2) - -/obj/item/weapon/grenade/spawnergrenade/spesscarp - name = "carp delivery grenade" - spawner_type = /mob/living/simple_mob/animal/space/carp - deliveryamt = 5 - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) - -/obj/item/weapon/grenade/spawnergrenade/spider - name = "spider delivery grenade" - spawner_type = /mob/living/simple_mob/animal/giant_spider/hunter - deliveryamt = 3 - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) - -//Sometimes you just need a sudden influx of spiders. -/obj/item/weapon/grenade/spawnergrenade/spider/briefcase - name = "briefcase" - desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." - icon_state = "briefcase" - item_state = "briefcase" - force = 8.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_LARGE - deliveryamt = 6 +/obj/item/weapon/grenade/spawnergrenade + desc = "It is set to detonate in 5 seconds. It will unleash an unspecified anomaly into the vicinity." + name = "delivery grenade" + icon = 'icons/obj/grenade.dmi' + icon_state = "delivery" + item_state = "flashbang" + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) + var/banglet = 0 + var/spawner_type = null // must be an object path + var/deliveryamt = 1 // amount of type to deliver + +// Detonate now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/detonate() + + if(spawner_type && deliveryamt) + // Make a quick flash + var/turf/T = get_turf(src) + playsound(src, 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/carbon/human/M in viewers(T, null)) + if(M:eyecheck() <= 0) + M.flash_eyes() + + // Spawn some hostile syndicate critters + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type(T) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + qdel(src) + return + +/obj/item/weapon/grenade/spawnergrenade/manhacks + name = "manhack delivery grenade" + spawner_type = /mob/living/simple_mob/mechanical/viscerator + deliveryamt = 5 + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) + +/obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary + spawner_type = /mob/living/simple_mob/mechanical/viscerator/mercenary + +/obj/item/weapon/grenade/spawnergrenade/manhacks/raider + spawner_type = /mob/living/simple_mob/mechanical/viscerator/raider + +/obj/item/weapon/grenade/spawnergrenade/manhacks/station + desc = "It is set to detonate in 5 seconds. It will deploy three weaponized survey drones." + deliveryamt = 3 + spawner_type = /mob/living/simple_mob/mechanical/viscerator/station + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ILLEGAL = 1) + +/obj/item/weapon/grenade/spawnergrenade/ward + name = "sentry delivery grenade" + desc = "It is set to detonate in 5 seconds. It will deploy a single thermal-optic sentry drone." + spawner_type = /mob/living/simple_mob/mechanical/ward/monitor/crew + deliveryamt = 1 + origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_BLUESPACE = 2) + +/obj/item/weapon/grenade/spawnergrenade/spesscarp + name = "carp delivery grenade" + spawner_type = /mob/living/simple_mob/animal/space/carp + deliveryamt = 5 + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) + +/obj/item/weapon/grenade/spawnergrenade/spider + name = "spider delivery grenade" + spawner_type = /mob/living/simple_mob/animal/giant_spider/hunter + deliveryamt = 3 + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4) + +//Sometimes you just need a sudden influx of spiders. +/obj/item/weapon/grenade/spawnergrenade/spider/briefcase + name = "briefcase" + desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." + icon_state = "briefcase" + item_state = "briefcase" + force = 8.0 + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_LARGE + deliveryamt = 6 diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade_ch.dm b/code/game/objects/items/weapons/grenades/spawnergrenade_ch.dm index 4e64813ece..203d6a3b68 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade_ch.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade_ch.dm @@ -1,204 +1,204 @@ -/obj/item/weapon/grenade/spawnergrenade/casino - - desc = "It is set to detonate in 5 seconds. It will release a goose that has been won from the golden goose casino!" - name = "Casino Creature Container (Goose)" - icon = 'icons/obj/grenade_ch.dmi' - icon_state = "casino" - item_state = "casino" - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2) - spawner_type = /mob/living/simple_mob/animal/space/goose/domesticated - - -// Detonate now just handles the two loops that query for people in lockers and people who can see it. -/obj/item/weapon/grenade/spawnergrenade/casino/detonate() - - if(spawner_type && deliveryamt) - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - - for(var/i=1, i<=deliveryamt, i++) - var/atom/movable/x = new spawner_type(T) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(x, pick(NORTH,SOUTH,EAST,WEST)) - qdel(src) - return - -/obj/item/weapon/grenade/spawnergrenade/casino/goat - desc = "It is set to detonate in 5 seconds. It will release a goat that has been won from the golden goose casino!" - name = "Casino Creature Container (Goat)" - spawner_type = /mob/living/simple_mob/animal/goat - -/obj/item/weapon/grenade/spawnergrenade/casino/armadillo - desc = "It is set to detonate in 5 seconds. It will release a armadillo that has been won from the golden goose casino!" - name = "Casino Creature Container (Armadillo)" - spawner_type = /mob/living/simple_mob/animal/passive/armadillo - -/obj/item/weapon/grenade/spawnergrenade/casino/cat - desc = "It is set to detonate in 5 seconds. It will release a cat that has been won from the golden goose casino!" - name = "Casino Creature Container (Cat)" - spawner_type = /mob/living/simple_mob/animal/passive/cat - -/obj/item/weapon/grenade/spawnergrenade/casino/chicken - desc = "It is set to detonate in 5 seconds. It will release a chicken that has been won from the golden goose casino!" - name = "Casino Creature Container (Chicken)" - spawner_type = /mob/living/simple_mob/animal/passive/chicken - -/obj/item/weapon/grenade/spawnergrenade/casino/cow - desc = "It is set to detonate in 5 seconds. It will release a cow that has been won from the golden goose casino!" - name = "Casino Creature Container (Cow)" - spawner_type = /mob/living/simple_mob/animal/passive/cow - -/obj/item/weapon/grenade/spawnergrenade/casino/corgi - desc = "It is set to detonate in 5 seconds. It will release a corgi that has been won from the golden goose casino!" - name = "Casino Creature Container (Corgi)" - spawner_type = /mob/living/simple_mob/animal/passive/dog/corgi - -/obj/item/weapon/grenade/spawnergrenade/casino/fox - desc = "It is set to detonate in 5 seconds. It will release a fox that has been won from the golden goose casino!" - name = "Casino Creature Container (Fox)" - spawner_type = /mob/living/simple_mob/animal/passive/fox - -/obj/item/weapon/grenade/spawnergrenade/casino/lizard - desc = "It is set to detonate in 5 seconds. It will release a lizard that has been won from the golden goose casino!" - name = "Casino Creature Container (Lizard)" - spawner_type = /mob/living/simple_mob/animal/passive/lizard - -/obj/item/weapon/grenade/spawnergrenade/casino/penguin - desc = "It is set to detonate in 5 seconds. It will release a penguin that has been won from the golden goose casino!" - name = "Casino Creature Container (Penguin)" - spawner_type = /mob/living/simple_mob/animal/passive/penguin - -/obj/item/weapon/grenade/spawnergrenade/casino/snake - desc = "It is set to detonate in 5 seconds. It will release a snake that has been won from the golden goose casino!" - name = "Casino Creature Container (Snake)" - spawner_type = /mob/living/simple_mob/animal/passive/snake - -/obj/item/weapon/grenade/spawnergrenade/casino/yithian - desc = "It is set to detonate in 5 seconds. It will release a yithian that has been won from the golden goose casino!" - name = "Casino Creature Container (Yithian)" - spawner_type = /mob/living/simple_mob/animal/passive/yithian - -/obj/item/weapon/grenade/spawnergrenade/casino/tindalos - desc = "It is set to detonate in 5 seconds. It will release a tindalos that has been won from the golden goose casino!" - name = "Casino Creature Container (Tindalos)" - spawner_type = /mob/living/simple_mob/animal/passive/tindalos - -/obj/item/weapon/grenade/spawnergrenade/casino/fennec - desc = "It is set to detonate in 5 seconds. It will release a fennec that has been won from the golden goose casino!" - name = "Casino Creature Container (Fennec)" - spawner_type = /mob/living/simple_mob/vore/fennec - -/obj/item/weapon/grenade/spawnergrenade/casino/redpanda - desc = "It is set to detonate in 5 seconds. It will release a red panda that has been won from the golden goose casino!" - name = "Casino Creature Container (Red panda)" - spawner_type = /mob/living/simple_mob/vore/redpanda - -/obj/item/weapon/grenade/spawnergrenade/casino/horse - desc = "It is set to detonate in 5 seconds. It will release a horse that has been won from the golden goose casino!" - name = "Casino Creature Container (Horse)" - spawner_type = /mob/living/simple_mob/vore/horse - -/obj/item/weapon/grenade/spawnergrenade/casino/otie - desc = "It is set to detonate in 5 seconds. It will release a otie that has been won from the golden goose casino!" - name = "Casino Creature Container (Otie)" - spawner_type = /mob/living/simple_mob/vore/otie/friendly - -/obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby - desc = "It is set to detonate in 5 seconds. It will release a chonker otie that has been won from the golden goose casino!" - name = "Casino Creature Container (Well feed Otie)" - spawner_type = /mob/living/simple_mob/vore/otie/friendly/chubby - -/obj/item/weapon/grenade/spawnergrenade/casino/zorgoia - desc = "It is set to detonate in 5 seconds. It will release a zorgoia that has been won from the golden goose casino!" - name = "Casino Creature Container (Zorgoia)" - spawner_type = /mob/living/simple_mob/vore/otie/zorgoia/friendly - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax - desc = "You feel great power inside this small round sphere, with great powers comes great responsibilities!" - name = "Mysterious Grenade" - spawner_type = /obj/mecha/combat/gygax/dark - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining - name = "Casino Mech Container (Mining Ripley)" - spawner_type = /obj/mecha/working/ripley/mining - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter - name = "Casino Mech Container (Firefighter Ripley)" - spawner_type = /obj/mecha/working/ripley/firefighter - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity - name = "Casino Mech Container (Serenity)" - spawner_type = /obj/mecha/combat/gygax/serenity - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus - name = "Casino Mech Container (Odysseus)" - spawner_type = /obj/mecha/medical/odysseus/loaded - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree - name = "Casino Mech Container (Phazon Scuttlebug)" - spawner_type = /obj/mecha/combat/phazon/scree - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus - name = "Casino Mech Container (Phazon Janus)" - spawner_type = /obj/mecha/combat/phazon/janus - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab - name = "Casino Mech Container (Scarab)" - spawner_type = /obj/mecha/combat/scarab - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla - name = "Casino Mech Container (Gorilla)" - spawner_type = /obj/mecha/combat/gorilla - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod - name = "Casino Mech Container (Shuttlepod)" - spawner_type = /obj/mecha/working/hoverpod/shuttlepod - -/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft - name = "Casino Mech Container (Shuttlecraft)" - spawner_type = /obj/mecha/working/hoverpod/shuttlecraft - -/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake - desc = "Some say a gouda in his hubris made a cake to rival the gods. Sometimes it appears where it is least expected, only to vanish a few hours later.." - name = "Mysterious Grenade" - spawner_type = null - -/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake/detonate() - - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - - new /obj/structure/thecake(T) - new /obj/item/weapon/thecake_layer(T) - new /obj/item/weapon/thecake_layer/three(T) - new /obj/item/weapon/thecake_layer/four(T) - new /obj/item/weapon/thecake_layer/five(T) - new /obj/item/weapon/thecake_layer/six(T) - - qdel(src) - return - -/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer - name = "Mysterious Grenade (Tell an admin on server or discord before playing with!)" - desc = "Sometimes one wishes upon a lucky star and obtains by pure chance great power! (TELL AN ADMIN ON DISCORD OR SERVER BEFORE PLAYING WITH)" - -/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer/detonate() - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - - new /obj/item/weapon/technomancer_catalog/universal(T) - new /obj/item/weapon/technomancer_core/universal(T) - - qdel(src) - return - -/obj/item/weapon/grenade/spawnergrenade/clustaur - desc = "It is set to detonate in 5 seconds. It will release a cluster of hydration." - name = "clustaur grenade" - icon = 'icons/obj/grenade_ch.dmi' - icon_state = "clustaur" - item_state = "clustaur" - banglet = 1 - deliveryamt = 10 - spawner_type = /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/wataur +/obj/item/weapon/grenade/spawnergrenade/casino + + desc = "It is set to detonate in 5 seconds. It will release a goose that has been won from the golden goose casino!" + name = "Casino Creature Container (Goose)" + icon = 'icons/obj/grenade_ch.dmi' + icon_state = "casino" + item_state = "casino" + origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2) + spawner_type = /mob/living/simple_mob/animal/space/goose/domesticated + + +// Detonate now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/casino/detonate() + + if(spawner_type && deliveryamt) + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type(T) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + qdel(src) + return + +/obj/item/weapon/grenade/spawnergrenade/casino/goat + desc = "It is set to detonate in 5 seconds. It will release a goat that has been won from the golden goose casino!" + name = "Casino Creature Container (Goat)" + spawner_type = /mob/living/simple_mob/animal/goat + +/obj/item/weapon/grenade/spawnergrenade/casino/armadillo + desc = "It is set to detonate in 5 seconds. It will release a armadillo that has been won from the golden goose casino!" + name = "Casino Creature Container (Armadillo)" + spawner_type = /mob/living/simple_mob/animal/passive/armadillo + +/obj/item/weapon/grenade/spawnergrenade/casino/cat + desc = "It is set to detonate in 5 seconds. It will release a cat that has been won from the golden goose casino!" + name = "Casino Creature Container (Cat)" + spawner_type = /mob/living/simple_mob/animal/passive/cat + +/obj/item/weapon/grenade/spawnergrenade/casino/chicken + desc = "It is set to detonate in 5 seconds. It will release a chicken that has been won from the golden goose casino!" + name = "Casino Creature Container (Chicken)" + spawner_type = /mob/living/simple_mob/animal/passive/chicken + +/obj/item/weapon/grenade/spawnergrenade/casino/cow + desc = "It is set to detonate in 5 seconds. It will release a cow that has been won from the golden goose casino!" + name = "Casino Creature Container (Cow)" + spawner_type = /mob/living/simple_mob/animal/passive/cow + +/obj/item/weapon/grenade/spawnergrenade/casino/corgi + desc = "It is set to detonate in 5 seconds. It will release a corgi that has been won from the golden goose casino!" + name = "Casino Creature Container (Corgi)" + spawner_type = /mob/living/simple_mob/animal/passive/dog/corgi + +/obj/item/weapon/grenade/spawnergrenade/casino/fox + desc = "It is set to detonate in 5 seconds. It will release a fox that has been won from the golden goose casino!" + name = "Casino Creature Container (Fox)" + spawner_type = /mob/living/simple_mob/animal/passive/fox + +/obj/item/weapon/grenade/spawnergrenade/casino/lizard + desc = "It is set to detonate in 5 seconds. It will release a lizard that has been won from the golden goose casino!" + name = "Casino Creature Container (Lizard)" + spawner_type = /mob/living/simple_mob/animal/passive/lizard + +/obj/item/weapon/grenade/spawnergrenade/casino/penguin + desc = "It is set to detonate in 5 seconds. It will release a penguin that has been won from the golden goose casino!" + name = "Casino Creature Container (Penguin)" + spawner_type = /mob/living/simple_mob/animal/passive/penguin + +/obj/item/weapon/grenade/spawnergrenade/casino/snake + desc = "It is set to detonate in 5 seconds. It will release a snake that has been won from the golden goose casino!" + name = "Casino Creature Container (Snake)" + spawner_type = /mob/living/simple_mob/animal/passive/snake + +/obj/item/weapon/grenade/spawnergrenade/casino/yithian + desc = "It is set to detonate in 5 seconds. It will release a yithian that has been won from the golden goose casino!" + name = "Casino Creature Container (Yithian)" + spawner_type = /mob/living/simple_mob/animal/passive/yithian + +/obj/item/weapon/grenade/spawnergrenade/casino/tindalos + desc = "It is set to detonate in 5 seconds. It will release a tindalos that has been won from the golden goose casino!" + name = "Casino Creature Container (Tindalos)" + spawner_type = /mob/living/simple_mob/animal/passive/tindalos + +/obj/item/weapon/grenade/spawnergrenade/casino/fennec + desc = "It is set to detonate in 5 seconds. It will release a fennec that has been won from the golden goose casino!" + name = "Casino Creature Container (Fennec)" + spawner_type = /mob/living/simple_mob/vore/fennec + +/obj/item/weapon/grenade/spawnergrenade/casino/redpanda + desc = "It is set to detonate in 5 seconds. It will release a red panda that has been won from the golden goose casino!" + name = "Casino Creature Container (Red panda)" + spawner_type = /mob/living/simple_mob/vore/redpanda + +/obj/item/weapon/grenade/spawnergrenade/casino/horse + desc = "It is set to detonate in 5 seconds. It will release a horse that has been won from the golden goose casino!" + name = "Casino Creature Container (Horse)" + spawner_type = /mob/living/simple_mob/vore/horse + +/obj/item/weapon/grenade/spawnergrenade/casino/otie + desc = "It is set to detonate in 5 seconds. It will release a otie that has been won from the golden goose casino!" + name = "Casino Creature Container (Otie)" + spawner_type = /mob/living/simple_mob/vore/otie/friendly + +/obj/item/weapon/grenade/spawnergrenade/casino/otie/chubby + desc = "It is set to detonate in 5 seconds. It will release a chonker otie that has been won from the golden goose casino!" + name = "Casino Creature Container (Well feed Otie)" + spawner_type = /mob/living/simple_mob/vore/otie/friendly/chubby + +/obj/item/weapon/grenade/spawnergrenade/casino/zorgoia + desc = "It is set to detonate in 5 seconds. It will release a zorgoia that has been won from the golden goose casino!" + name = "Casino Creature Container (Zorgoia)" + spawner_type = /mob/living/simple_mob/vore/otie/zorgoia/friendly + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax + desc = "You feel great power inside this small round sphere, with great powers comes great responsibilities!" + name = "Mysterious Grenade" + spawner_type = /obj/mecha/combat/gygax/dark + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining + name = "Casino Mech Container (Mining Ripley)" + spawner_type = /obj/mecha/working/ripley/mining + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter + name = "Casino Mech Container (Firefighter Ripley)" + spawner_type = /obj/mecha/working/ripley/firefighter + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/serenity + name = "Casino Mech Container (Serenity)" + spawner_type = /obj/mecha/combat/gygax/serenity + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus + name = "Casino Mech Container (Odysseus)" + spawner_type = /obj/mecha/medical/odysseus/loaded + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scree + name = "Casino Mech Container (Phazon Scuttlebug)" + spawner_type = /obj/mecha/combat/phazon/scree + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/janus + name = "Casino Mech Container (Phazon Janus)" + spawner_type = /obj/mecha/combat/phazon/janus + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/scarab + name = "Casino Mech Container (Scarab)" + spawner_type = /obj/mecha/combat/scarab + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/gorilla + name = "Casino Mech Container (Gorilla)" + spawner_type = /obj/mecha/combat/gorilla + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod + name = "Casino Mech Container (Shuttlepod)" + spawner_type = /obj/mecha/working/hoverpod/shuttlepod + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlecraft + name = "Casino Mech Container (Shuttlecraft)" + spawner_type = /obj/mecha/working/hoverpod/shuttlecraft + +/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake + desc = "Some say a gouda in his hubris made a cake to rival the gods. Sometimes it appears where it is least expected, only to vanish a few hours later.." + name = "Mysterious Grenade" + spawner_type = null + +/obj/item/weapon/grenade/spawnergrenade/casino/infinitycake/detonate() + + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + + new /obj/structure/thecake(T) + new /obj/item/weapon/thecake_layer(T) + new /obj/item/weapon/thecake_layer/three(T) + new /obj/item/weapon/thecake_layer/four(T) + new /obj/item/weapon/thecake_layer/five(T) + new /obj/item/weapon/thecake_layer/six(T) + + qdel(src) + return + +/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer + name = "Mysterious Grenade (Tell an admin on server or discord before playing with!)" + desc = "Sometimes one wishes upon a lucky star and obtains by pure chance great power! (TELL AN ADMIN ON DISCORD OR SERVER BEFORE PLAYING WITH)" + +/obj/item/weapon/grenade/spawnergrenade/casino/universal_technomancer/detonate() + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + + new /obj/item/weapon/technomancer_catalog/universal(T) + new /obj/item/weapon/technomancer_core/universal(T) + + qdel(src) + return + +/obj/item/weapon/grenade/spawnergrenade/clustaur + desc = "It is set to detonate in 5 seconds. It will release a cluster of hydration." + name = "clustaur grenade" + icon = 'icons/obj/grenade_ch.dmi' + icon_state = "clustaur" + item_state = "clustaur" + banglet = 1 + deliveryamt = 10 + spawner_type = /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/wataur diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 35e55428a9..ea8a677f15 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -1,337 +1,337 @@ -/obj/item/weapon/handcuffs - name = "handcuffs" - desc = "Use this to keep prisoners in line." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "handcuff" - slot_flags = SLOT_BELT - throwforce = 5 - w_class = ITEMSIZE_SMALL - throw_speed = 2 - throw_range = 5 - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MAT_STEEL = 500) - drop_sound = 'sound/items/drop/accessory.ogg' - pickup_sound = 'sound/items/pickup/accessory.ogg' - var/elastic - var/dispenser = 0 - var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes - var/cuff_sound = 'sound/weapons/handcuffs.ogg' - var/cuff_type = "handcuffs" - var/use_time = 30 - sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi') - -/obj/item/weapon/handcuffs/get_worn_icon_state(var/slot_name) - if(slot_name == slot_handcuffed_str) - return "handcuff1" //Simple - - return ..() - -/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) - - if(!user.IsAdvancedToolUser()) - return - - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Uh ... how do those things work?!") - place_handcuffs(user, user) - return - - if(!C.handcuffed) - if (C == user) - place_handcuffs(user, user) - return - - //check for an aggressive grab (or robutts) - if(can_place(C, user)) - place_handcuffs(C, user) - else - to_chat(user, "You need to have a firm grip on [C] before you can put \the [src] on!") - -/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user) - if(user == target) - return 1 - if(istype(user, /mob/living/silicon/robot)) - if(user.Adjacent(target)) - return 1 - else - for(var/obj/item/weapon/grab/G in target.grabbed_by) - if(G.loc == user && G.state >= GRAB_AGGRESSIVE) - return 1 - return 0 - -/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src, cuff_sound, 30, 1, -2) - - var/mob/living/carbon/human/H = target - if(!istype(H)) - return 0 - - if (!H.has_organ_for_slot(slot_handcuffed)) - to_chat(user, "\The [H] needs at least two wrists before you can cuff them together!") - return 0 - - if(istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit. - to_chat(user, "\The [src] won't fit around \the [H.gloves]!") - return 0 - - user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") - - if(!do_after(user,use_time)) - return 0 - - if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime - return 0 - - add_attack_logs(user,H,"Handcuffed (attempt)") - feedback_add_details("handcuffs","H") - - user.setClickCooldown(user.get_attack_speed(src)) - user.do_attack_animation(H) - - user.visible_message("\The [user] has put [cuff_type] on \the [H]!") - - // Apply cuffs. - var/obj/item/weapon/handcuffs/cuffs = src - if(dispenser) - cuffs = new(get_turf(user)) - else - user.drop_from_inventory(cuffs) - cuffs.loc = target - target.handcuffed = cuffs - target.update_handcuffed() - target.drop_r_hand() - target.drop_l_hand() - target.stop_pulling() - return 1 - -/obj/item/weapon/handcuffs/equipped(var/mob/living/user,var/slot) - . = ..() - if(slot == slot_handcuffed) - user.drop_r_hand() - user.drop_l_hand() - user.stop_pulling() - -var/last_chew = 0 -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) - if (A != src) return ..() - if (last_chew + 26 > world.time) return - - var/mob/living/carbon/human/H = A - if (!H.handcuffed) return - if (H.a_intent != I_HURT) return - if (H.zone_sel.selecting != O_MOUTH) return - if (H.wear_mask) return - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return - - var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] - if (!O) return - - var/datum/gender/T = gender_datums[H.get_visible_gender()] - - var/s = "[H.name] chews on [T.his] [O.name]!" - H.visible_message(s, "You chew on your [O.name]!") - add_attack_logs(H,H,"chewed own [O.name]") - - if(O.take_damage(3,0,1,1,"teeth marks")) - H:UpdateDamageIcon() - - last_chew = world.time - -/obj/item/weapon/handcuffs/fuzzy - name = "fuzzy cuffs" - icon_state = "fuzzycuff" - breakouttime = 100 //VOREstation edit - desc = "Use this to keep... 'prisoners' in line." - -/obj/item/weapon/handcuffs/cable - name = "cable restraints" - desc = "Looks like some cables tied together. Could be used to tie something up." - icon_state = "cuff_white" - breakouttime = 300 //Deciseconds = 30s - cuff_sound = 'sound/weapons/cablecuff.ogg' - cuff_type = "cable restraints" - elastic = 1 - -/obj/item/weapon/handcuffs/cable/red - color = "#DD0000" - -/obj/item/weapon/handcuffs/cable/yellow - color = "#DDDD00" - -/obj/item/weapon/handcuffs/cable/blue - color = "#0000DD" - -/obj/item/weapon/handcuffs/cable/green - color = "#00DD00" - -/obj/item/weapon/handcuffs/cable/pink - color = "#DD00DD" - -/obj/item/weapon/handcuffs/cable/orange - color = "#DD8800" - -/obj/item/weapon/handcuffs/cable/cyan - color = "#00DDDD" - -/obj/item/weapon/handcuffs/cable/white - color = "#FFFFFF" - -/obj/item/weapon/handcuffs/cyborg - dispenser = 1 - -/obj/item/weapon/handcuffs/cable/tape - name = "tape restraints" - desc = "DIY!" - icon_state = "tape_cross" - item_state = null - icon = 'icons/obj/bureaucracy.dmi' - breakouttime = 200 - cuff_type = "duct tape" - -/obj/item/weapon/handcuffs/cable/tape/cyborg - dispenser = TRUE - -//Legcuffs. Not /really/ handcuffs, but its close enough. -/obj/item/weapon/handcuffs/legcuffs - name = "legcuffs" - desc = "Use this to keep prisoners in line." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "legcuff" - throwforce = 0 - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 1) - breakouttime = 300 //Deciseconds = 30s = 0.5 minute - cuff_type = "legcuffs" - sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi') - elastic = 0 - cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now. - -/obj/item/weapon/handcuffs/legcuffs/get_worn_icon_state(var/slot_name) - if(slot_name == slot_legcuffed_str) - return "legcuff1" - - return ..() - -/obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) - if(!user.IsAdvancedToolUser()) - return - - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Uh ... how do those things work?!") - place_legcuffs(user, user) - return - - if(!C.legcuffed) - if (C == user) - place_legcuffs(user, user) - return - - //check for an aggressive grab (or robutts) - if(can_place(C, user)) - place_legcuffs(C, user) - else - to_chat(user, "You need to have a firm grip on [C] before you can put \the [src] on!") - -/obj/item/weapon/handcuffs/legcuffs/proc/place_legcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src, cuff_sound, 30, 1, -2) - - var/mob/living/carbon/human/H = target - if(!istype(H)) - return 0 - - if (!H.has_organ_for_slot(slot_legcuffed)) - to_chat(user, "\The [H] needs at least two ankles before you can cuff them together!") - return 0 - - if(istype(H.shoes,/obj/item/clothing/shoes/magboots/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit. - to_chat(user, "\The [src] won't fit around \the [H.shoes]!") - return 0 - - user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") - - if(!do_after(user,use_time)) - return 0 - - if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime - return 0 - - add_attack_logs(user,H,"Legcuffed (attempt)") - feedback_add_details("legcuffs","H") - - user.setClickCooldown(user.get_attack_speed(src)) - user.do_attack_animation(H) - - user.visible_message("\The [user] has put [cuff_type] on \the [H]!") - - // Apply cuffs. - var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src - if(dispenser) - lcuffs = new(get_turf(user)) - else - user.drop_from_inventory(lcuffs) - lcuffs.loc = target - target.legcuffed = lcuffs - target.update_inv_legcuffed() - if(target.m_intent != "walk") - target.m_intent = "walk" - if(target.hud_used && user.hud_used.move_intent) - target.hud_used.move_intent.icon_state = "walking" - return 1 - -/obj/item/weapon/handcuffs/legcuffs/equipped(var/mob/living/user,var/slot) - . = ..() - if(slot == slot_legcuffed) - if(user.m_intent != "walk") - user.m_intent = "walk" - if(user.hud_used && user.hud_used.move_intent) - user.hud_used.move_intent.icon_state = "walking" - - -/obj/item/weapon/handcuffs/legcuffs/bola - name = "bola" - desc = "Keeps prey in line." - elastic = 1 - use_time = 0 - breakouttime = 30 - cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do? - -/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user) - if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing. - return 1 - -/obj/item/weapon/handcuffs/legcuffs/bola/dropped() - visible_message("\The [src] falls apart!") - qdel(src) - -/obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src, cuff_sound, 30, 1, -2) - - var/mob/living/carbon/human/H = target - if(!istype(H)) - src.dropped() - return 0 - - if(!H.has_organ_for_slot(slot_legcuffed)) - H.visible_message("\The [src] slams into [H], but slides off!") - src.dropped() - return 0 - - H.visible_message("\The [H] has been snared by \the [src]!") - - // Apply cuffs. - var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src - lcuffs.loc = target - target.legcuffed = lcuffs - target.update_inv_legcuffed() - if(target.m_intent != "walk") - target.m_intent = "walk" - if(target.hud_used && user.hud_used.move_intent) - target.hud_used.move_intent.icon_state = "walking" - return 1 - -/obj/item/weapon/handcuffs/cable/plantfiber - name = "rope bindings" - desc = "A length of rope fashioned to hold someone's hands together." - color = "#7e6442" +/obj/item/weapon/handcuffs + name = "handcuffs" + desc = "Use this to keep prisoners in line." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "handcuff" + slot_flags = SLOT_BELT + throwforce = 5 + w_class = ITEMSIZE_SMALL + throw_speed = 2 + throw_range = 5 + origin_tech = list(TECH_MATERIAL = 1) + matter = list(MAT_STEEL = 500) + drop_sound = 'sound/items/drop/accessory.ogg' + pickup_sound = 'sound/items/pickup/accessory.ogg' + var/elastic + var/dispenser = 0 + var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes + var/cuff_sound = 'sound/weapons/handcuffs.ogg' + var/cuff_type = "handcuffs" + var/use_time = 30 + sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi') + +/obj/item/weapon/handcuffs/get_worn_icon_state(var/slot_name) + if(slot_name == slot_handcuffed_str) + return "handcuff1" //Simple + + return ..() + +/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) + + if(!user.IsAdvancedToolUser()) + return + + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "Uh ... how do those things work?!") + place_handcuffs(user, user) + return + + if(!C.handcuffed) + if (C == user) + place_handcuffs(user, user) + return + + //check for an aggressive grab (or robutts) + if(can_place(C, user)) + place_handcuffs(C, user) + else + to_chat(user, "You need to have a firm grip on [C] before you can put \the [src] on!") + +/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user) + if(user == target) + return 1 + if(istype(user, /mob/living/silicon/robot)) + if(user.Adjacent(target)) + return 1 + else + for(var/obj/item/weapon/grab/G in target.grabbed_by) + if(G.loc == user && G.state >= GRAB_AGGRESSIVE) + return 1 + return 0 + +/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src, cuff_sound, 30, 1, -2) + + var/mob/living/carbon/human/H = target + if(!istype(H)) + return 0 + + if (!H.has_organ_for_slot(slot_handcuffed)) + to_chat(user, "\The [H] needs at least two wrists before you can cuff them together!") + return 0 + + if(istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit. + to_chat(user, "\The [src] won't fit around \the [H.gloves]!") + return 0 + + user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") + + if(!do_after(user,use_time)) + return 0 + + if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime + return 0 + + add_attack_logs(user,H,"Handcuffed (attempt)") + feedback_add_details("handcuffs","H") + + user.setClickCooldown(user.get_attack_speed(src)) + user.do_attack_animation(H) + + user.visible_message("\The [user] has put [cuff_type] on \the [H]!") + + // Apply cuffs. + var/obj/item/weapon/handcuffs/cuffs = src + if(dispenser) + cuffs = new(get_turf(user)) + else + user.drop_from_inventory(cuffs) + cuffs.loc = target + target.handcuffed = cuffs + target.update_handcuffed() + target.drop_r_hand() + target.drop_l_hand() + target.stop_pulling() + return 1 + +/obj/item/weapon/handcuffs/equipped(var/mob/living/user,var/slot) + . = ..() + if(slot == slot_handcuffed) + user.drop_r_hand() + user.drop_l_hand() + user.stop_pulling() + +var/last_chew = 0 +/mob/living/carbon/human/RestrainedClickOn(var/atom/A) + if (A != src) return ..() + if (last_chew + 26 > world.time) return + + var/mob/living/carbon/human/H = A + if (!H.handcuffed) return + if (H.a_intent != I_HURT) return + if (H.zone_sel.selecting != O_MOUTH) return + if (H.wear_mask) return + if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return + + var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] + if (!O) return + + var/datum/gender/T = gender_datums[H.get_visible_gender()] + + var/s = "[H.name] chews on [T.his] [O.name]!" + H.visible_message(s, "You chew on your [O.name]!") + add_attack_logs(H,H,"chewed own [O.name]") + + if(O.take_damage(3,0,1,1,"teeth marks")) + H:UpdateDamageIcon() + + last_chew = world.time + +/obj/item/weapon/handcuffs/fuzzy + name = "fuzzy cuffs" + icon_state = "fuzzycuff" + breakouttime = 100 //VOREstation edit + desc = "Use this to keep... 'prisoners' in line." + +/obj/item/weapon/handcuffs/cable + name = "cable restraints" + desc = "Looks like some cables tied together. Could be used to tie something up." + icon_state = "cuff_white" + breakouttime = 300 //Deciseconds = 30s + cuff_sound = 'sound/weapons/cablecuff.ogg' + cuff_type = "cable restraints" + elastic = 1 + +/obj/item/weapon/handcuffs/cable/red + color = "#DD0000" + +/obj/item/weapon/handcuffs/cable/yellow + color = "#DDDD00" + +/obj/item/weapon/handcuffs/cable/blue + color = "#0000DD" + +/obj/item/weapon/handcuffs/cable/green + color = "#00DD00" + +/obj/item/weapon/handcuffs/cable/pink + color = "#DD00DD" + +/obj/item/weapon/handcuffs/cable/orange + color = "#DD8800" + +/obj/item/weapon/handcuffs/cable/cyan + color = "#00DDDD" + +/obj/item/weapon/handcuffs/cable/white + color = "#FFFFFF" + +/obj/item/weapon/handcuffs/cyborg + dispenser = 1 + +/obj/item/weapon/handcuffs/cable/tape + name = "tape restraints" + desc = "DIY!" + icon_state = "tape_cross" + item_state = null + icon = 'icons/obj/bureaucracy.dmi' + breakouttime = 200 + cuff_type = "duct tape" + +/obj/item/weapon/handcuffs/cable/tape/cyborg + dispenser = TRUE + +//Legcuffs. Not /really/ handcuffs, but its close enough. +/obj/item/weapon/handcuffs/legcuffs + name = "legcuffs" + desc = "Use this to keep prisoners in line." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "legcuff" + throwforce = 0 + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_MATERIAL = 1) + breakouttime = 300 //Deciseconds = 30s = 0.5 minute + cuff_type = "legcuffs" + sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi') + elastic = 0 + cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now. + +/obj/item/weapon/handcuffs/legcuffs/get_worn_icon_state(var/slot_name) + if(slot_name == slot_legcuffed_str) + return "legcuff1" + + return ..() + +/obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) + if(!user.IsAdvancedToolUser()) + return + + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "Uh ... how do those things work?!") + place_legcuffs(user, user) + return + + if(!C.legcuffed) + if (C == user) + place_legcuffs(user, user) + return + + //check for an aggressive grab (or robutts) + if(can_place(C, user)) + place_legcuffs(C, user) + else + to_chat(user, "You need to have a firm grip on [C] before you can put \the [src] on!") + +/obj/item/weapon/handcuffs/legcuffs/proc/place_legcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src, cuff_sound, 30, 1, -2) + + var/mob/living/carbon/human/H = target + if(!istype(H)) + return 0 + + if (!H.has_organ_for_slot(slot_legcuffed)) + to_chat(user, "\The [H] needs at least two ankles before you can cuff them together!") + return 0 + + if(istype(H.shoes,/obj/item/clothing/shoes/magboots/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit. + to_chat(user, "\The [src] won't fit around \the [H.shoes]!") + return 0 + + user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") + + if(!do_after(user,use_time)) + return 0 + + if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime + return 0 + + add_attack_logs(user,H,"Legcuffed (attempt)") + feedback_add_details("legcuffs","H") + + user.setClickCooldown(user.get_attack_speed(src)) + user.do_attack_animation(H) + + user.visible_message("\The [user] has put [cuff_type] on \the [H]!") + + // Apply cuffs. + var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src + if(dispenser) + lcuffs = new(get_turf(user)) + else + user.drop_from_inventory(lcuffs) + lcuffs.loc = target + target.legcuffed = lcuffs + target.update_inv_legcuffed() + if(target.m_intent != "walk") + target.m_intent = "walk" + if(target.hud_used && user.hud_used.move_intent) + target.hud_used.move_intent.icon_state = "walking" + return 1 + +/obj/item/weapon/handcuffs/legcuffs/equipped(var/mob/living/user,var/slot) + . = ..() + if(slot == slot_legcuffed) + if(user.m_intent != "walk") + user.m_intent = "walk" + if(user.hud_used && user.hud_used.move_intent) + user.hud_used.move_intent.icon_state = "walking" + + +/obj/item/weapon/handcuffs/legcuffs/bola + name = "bola" + desc = "Keeps prey in line." + elastic = 1 + use_time = 0 + breakouttime = 30 + cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do? + +/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user) + if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing. + return 1 + +/obj/item/weapon/handcuffs/legcuffs/bola/dropped() + visible_message("\The [src] falls apart!") + qdel(src) + +/obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src, cuff_sound, 30, 1, -2) + + var/mob/living/carbon/human/H = target + if(!istype(H)) + src.dropped() + return 0 + + if(!H.has_organ_for_slot(slot_legcuffed)) + H.visible_message("\The [src] slams into [H], but slides off!") + src.dropped() + return 0 + + H.visible_message("\The [H] has been snared by \the [src]!") + + // Apply cuffs. + var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src + lcuffs.loc = target + target.legcuffed = lcuffs + target.update_inv_legcuffed() + if(target.m_intent != "walk") + target.m_intent = "walk" + if(target.hud_used && user.hud_used.move_intent) + target.hud_used.move_intent.icon_state = "walking" + return 1 + +/obj/item/weapon/handcuffs/cable/plantfiber + name = "rope bindings" + desc = "A length of rope fashioned to hold someone's hands together." + color = "#7e6442" diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 15c1478bf3..04087646f7 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -1,113 +1,113 @@ -/* - * SeedBag - */ -//uncomment when this is updated to match storage update -/* -/obj/item/weapon/seedbag - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "seedbag" - name = "Seed Bag" - desc = "A small satchel made for organizing seeds." - var/mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/capacity = 500; //the number of seeds it can carry. - slot_flags = SLOT_BELT - w_class = ITEMSIZE_TINY - var/list/item_quants = list() - -/obj/item/weapon/seedbag/attack_self(mob/user as mob) - user.machine = src - interact(user) - -/obj/item/weapon/seedbag/verb/toggle_mode() - set name = "Switch Bagging Method" - set category = "Object" - - mode = !mode - switch (mode) - if(1) - to_chat(usr, "The bag now picks up all seeds in a tile at once.") - if(0) - to_chat(usr, "The bag now picks up one seed pouch at a time.") - -/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob) - ..() - if (istype(O, /obj/item/weapon/seedbag)) - var/obj/item/weapon/seedbag/S = O - if (S.mode == 1) - for (var/obj/item/seeds/G in locate(src.x,src.y,src.z)) - if (S.contents.len < S.capacity) - S.contents += G; - if(S.item_quants[G.name]) - S.item_quants[G.name]++ - else - S.item_quants[G.name] = 1 - else - to_chat(user, "The seed bag is full.") - S.updateUsrDialog() - return - to_chat(user, "You pick up all the seeds.") - else - if (S.contents.len < S.capacity) - S.contents += src; - if(S.item_quants[name]) - S.item_quants[name]++ - else - S.item_quants[name] = 1 - else - to_chat(user, "The seed bag is full.") - S.updateUsrDialog() - return - -/obj/item/weapon/seedbag/interact(mob/user as mob) - - var/dat = "Select an item:
                    " - - if (contents.len == 0) - dat += "No seeds loaded!" - else - for (var/O in item_quants) - if(item_quants[O] > 0) - var/N = item_quants[O] - dat += "[capitalize(O)]:" - dat += " [N] " - dat += "Vend" - dat += "
                    " - - dat += "
                    Unload All" - dat += "
                    " - user << browse("Seedbag Supplies[dat]", "window=seedbag") - onclose(user, "seedbag") - return - -/obj/item/weapon/seedbag/Topic(href, href_list) - if(..()) - return - - usr.machine = src - if ( href_list["vend"] ) - var/N = href_list["vend"] - - if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible. - return - - item_quants[N] -= 1 - for(var/obj/O in contents) - if(O.name == N) - O.loc = get_turf(src) - usr.put_in_hands(O) - break - - else if ( href_list["unload"] ) - item_quants.Cut() - for(var/obj/O in contents ) - O.loc = get_turf(src) - - src.updateUsrDialog() - return - -/obj/item/weapon/seedbag/updateUsrDialog() - var/list/nearby = range(1, src) - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - src.attack_self(M) -*/ +/* + * SeedBag + */ +//uncomment when this is updated to match storage update +/* +/obj/item/weapon/seedbag + icon = 'icons/obj/hydroponics_machines.dmi' + icon_state = "seedbag" + name = "Seed Bag" + desc = "A small satchel made for organizing seeds." + var/mode = 1; //0 = pick one at a time, 1 = pick all on tile + var/capacity = 500; //the number of seeds it can carry. + slot_flags = SLOT_BELT + w_class = ITEMSIZE_TINY + var/list/item_quants = list() + +/obj/item/weapon/seedbag/attack_self(mob/user as mob) + user.machine = src + interact(user) + +/obj/item/weapon/seedbag/verb/toggle_mode() + set name = "Switch Bagging Method" + set category = "Object" + + mode = !mode + switch (mode) + if(1) + to_chat(usr, "The bag now picks up all seeds in a tile at once.") + if(0) + to_chat(usr, "The bag now picks up one seed pouch at a time.") + +/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob) + ..() + if (istype(O, /obj/item/weapon/seedbag)) + var/obj/item/weapon/seedbag/S = O + if (S.mode == 1) + for (var/obj/item/seeds/G in locate(src.x,src.y,src.z)) + if (S.contents.len < S.capacity) + S.contents += G; + if(S.item_quants[G.name]) + S.item_quants[G.name]++ + else + S.item_quants[G.name] = 1 + else + to_chat(user, "The seed bag is full.") + S.updateUsrDialog() + return + to_chat(user, "You pick up all the seeds.") + else + if (S.contents.len < S.capacity) + S.contents += src; + if(S.item_quants[name]) + S.item_quants[name]++ + else + S.item_quants[name] = 1 + else + to_chat(user, "The seed bag is full.") + S.updateUsrDialog() + return + +/obj/item/weapon/seedbag/interact(mob/user as mob) + + var/dat = "Select an item:
                    " + + if (contents.len == 0) + dat += "No seeds loaded!" + else + for (var/O in item_quants) + if(item_quants[O] > 0) + var/N = item_quants[O] + dat += "[capitalize(O)]:" + dat += " [N] " + dat += "Vend" + dat += "
                    " + + dat += "
                    Unload All" + dat += "
                    " + user << browse("Seedbag Supplies[dat]", "window=seedbag") + onclose(user, "seedbag") + return + +/obj/item/weapon/seedbag/Topic(href, href_list) + if(..()) + return + + usr.machine = src + if ( href_list["vend"] ) + var/N = href_list["vend"] + + if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible. + return + + item_quants[N] -= 1 + for(var/obj/O in contents) + if(O.name == N) + O.loc = get_turf(src) + usr.put_in_hands(O) + break + + else if ( href_list["unload"] ) + item_quants.Cut() + for(var/obj/O in contents ) + O.loc = get_turf(src) + + src.updateUsrDialog() + return + +/obj/item/weapon/seedbag/updateUsrDialog() + var/list/nearby = range(1, src) + for(var/mob/M in nearby) + if ((M.client && M.machine == src)) + src.attack_self(M) +*/ diff --git a/code/game/objects/items/weapons/id cards/CH_ids.dm b/code/game/objects/items/weapons/id cards/CH_ids.dm index 09fc9fc1af..a5aa0de5a0 100644 --- a/code/game/objects/items/weapons/id cards/CH_ids.dm +++ b/code/game/objects/items/weapons/id cards/CH_ids.dm @@ -1,38 +1,38 @@ -/obj/item/weapon/card/id/casino - name = "casino id" - desc = "An ID card for an employee of the golden goose casino." - icon = 'icons/obj/card_ch.dmi' - base_icon = 'icons/obj/card_ch.dmi' - icon_state = "ch_casino" - item_state = "gold_id" - - access = list(160) - -/obj/item/weapon/card/id/casino/both - name = "casino both id" - desc = "An ID card for an employee of the golden goose casino with extra access to prize both." - access = list(160, 200) - -/obj/item/weapon/card/id/casino/medical - name = "casino medical id" - desc = "An ID card for an employee of the golden goose casino that oversees medical care." - icon_state = "ch_casino_med" - access = list(160, 202) - -/obj/item/weapon/card/id/casino/engineering - name = "casino engineering id" - desc = "An ID card for an employee of the golden goose casino that oversees maintenance." - icon_state = "ch_casino_eng" - access = list(160, 203) - -/obj/item/weapon/card/id/casino/security - name = "casino security id" - desc = "An ID card for an employee of the golden goose casino that oversees security." - icon_state = "ch_casino_sec" - access = list(160, 200, 201, 202, 203) - -/obj/item/weapon/card/id/casino/manager - name = "casino manager id" - desc = "An ID card for the manager of the golden goose casino, fancy!" - icon_state = "ch_casino_manager" +/obj/item/weapon/card/id/casino + name = "casino id" + desc = "An ID card for an employee of the golden goose casino." + icon = 'icons/obj/card_ch.dmi' + base_icon = 'icons/obj/card_ch.dmi' + icon_state = "ch_casino" + item_state = "gold_id" + + access = list(160) + +/obj/item/weapon/card/id/casino/both + name = "casino both id" + desc = "An ID card for an employee of the golden goose casino with extra access to prize both." + access = list(160, 200) + +/obj/item/weapon/card/id/casino/medical + name = "casino medical id" + desc = "An ID card for an employee of the golden goose casino that oversees medical care." + icon_state = "ch_casino_med" + access = list(160, 202) + +/obj/item/weapon/card/id/casino/engineering + name = "casino engineering id" + desc = "An ID card for an employee of the golden goose casino that oversees maintenance." + icon_state = "ch_casino_eng" + access = list(160, 203) + +/obj/item/weapon/card/id/casino/security + name = "casino security id" + desc = "An ID card for an employee of the golden goose casino that oversees security." + icon_state = "ch_casino_sec" + access = list(160, 200, 201, 202, 203) + +/obj/item/weapon/card/id/casino/manager + name = "casino manager id" + desc = "An ID card for the manager of the golden goose casino, fancy!" + icon_state = "ch_casino_manager" access = list(160, 200, 201, 202, 203, 300) \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 30df9adb2f..6d4ffb8af7 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -1,631 +1,631 @@ -#define MALFUNCTION_TEMPORARY 1 -#define MALFUNCTION_PERMANENT 2 - - -/obj/item/weapon/implant - name = "implant" - icon = 'icons/obj/device.dmi' - icon_state = "implant" - w_class = ITEMSIZE_TINY - show_messages = TRUE - - var/implanted = null - var/mob/imp_in = null - var/obj/item/organ/external/part = null - var/implant_color = "b" - var/allow_reagents = 0 - var/malfunction = 0 - var/initialize_loc = BP_TORSO - var/known_implant = FALSE - -/obj/item/weapon/implant/proc/trigger(emote, source as mob) - return - -/obj/item/weapon/implant/proc/activate() - return - -// Moves the implant where it needs to go, and tells it if there's more to be done in post_implant -/obj/item/weapon/implant/proc/handle_implant(var/mob/source, var/target_zone = BP_TORSO) - . = TRUE - imp_in = source - implanted = TRUE - if(ishuman(source)) - var/mob/living/carbon/human/H = source - var/obj/item/organ/external/affected = H.get_organ(target_zone) - if(affected) - affected.implants |= src - part = affected - if(part) - forceMove(part) - else - forceMove(source) - - listening_objects |= src - -// Takes place after handle_implant, if that returns TRUE -/obj/item/weapon/implant/proc/post_implant(var/mob/source) - -/obj/item/weapon/implant/proc/get_data() - return "No information available" - -/obj/item/weapon/implant/proc/hear(message, source as mob) - return - -/obj/item/weapon/implant/proc/islegal() - return 0 - -/obj/item/weapon/implant/proc/meltdown() //breaks it down, making implant unrecongizible - to_chat(imp_in, "You feel something melting inside [part ? "your [part.name]" : "you"]!") - if (part) - part.take_damage(burn = 15, used_weapon = "Electronics meltdown") - else - var/mob/living/M = imp_in - M.apply_damage(15,BURN) - name = "melted implant" - desc = "Charred circuit in melted plastic case. Wonder what that used to be..." - icon_state = "implant_melted" - malfunction = MALFUNCTION_PERMANENT - -/obj/item/weapon/implant/proc/implant_loadout(var/mob/living/carbon/human/H) - . = istype(H) && handle_implant(H, initialize_loc) - if(.) - invisibility = initial(invisibility) - known_implant = TRUE - post_implant(H) - -/obj/item/weapon/implant/Destroy() - if(part) - part.implants.Remove(src) - part = null - listening_objects.Remove(src) - imp_in = null - return ..() - -/obj/item/weapon/implant/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/implanter)) - var/obj/item/weapon/implanter/implanter = I - if(implanter.imp) - return // It's full. - user.drop_from_inventory(src) - forceMove(implanter) - implanter.imp = src - implanter.update() - else - ..() - - - -////////////////////////////// -// Tracking Implant -////////////////////////////// -GLOBAL_LIST_BOILERPLATE(all_tracking_implants, /obj/item/weapon/implant/tracking) - -/obj/item/weapon/implant/tracking - name = "tracking implant" - desc = "An implant normally given to dangerous criminals. Allows security to track your location." - known_implant = TRUE - var/id = 1 - var/degrade_time = 10 MINUTES //How long before the implant stops working outside of a living body. - -/obj/item/weapon/implant/tracking/weak //This is for the loadout - degrade_time = 2.5 MINUTES - -/obj/item/weapon/implant/tracking/New() - id = rand(1, 1000) - ..() - -/obj/item/weapon/implant/tracking/post_implant(var/mob/source) - START_PROCESSING(SSobj, src) - -/obj/item/weapon/implant/tracking/Destroy() - STOP_PROCESSING(SSobj, src) - if(part) - part.implants -= src - part = imp_in = null - return ..() - -/obj/item/weapon/implant/tracking/process() - var/implant_location = src.loc - if(ismob(implant_location)) - var/mob/living/L = implant_location - if(L.stat == DEAD) - if(world.time >= L.timeofdeath + degrade_time) - name = "melted implant" - desc = "Charred circuit in melted plastic case. Wonder what that used to be..." - icon_state = "implant_melted" - malfunction = MALFUNCTION_PERMANENT - STOP_PROCESSING(SSobj, src) - return 1 - -/obj/item/weapon/implant/tracking/get_data() - var/dat = {"Implant Specifications:
                    -Name: Tracking Beacon
                    -Life: 10 minutes after death of host
                    -Important Notes: None
                    -
                    -Implant Details:
                    -Function: Continuously transmits low power signal. Useful for tracking.
                    -Special Features:
                    -Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if -a malfunction occurs thereby securing safety of subject. The implant will melt and -disintegrate into bio-safe elements.
                    -Integrity: Gradient creates slight risk of being overcharged and frying the -circuitry. As a result neurotoxins can cause massive damage.
                    -Implant Specifics:
                    "} - return dat - -/obj/item/weapon/implant/tracking/emp_act(severity) - if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning - return - malfunction = MALFUNCTION_TEMPORARY - - var/delay = 20 - switch(severity) - if(1) - if(prob(60)) - meltdown() - if(2) - delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time - if(3) - delay = rand(2*60*10,5*60*10) //from 2 to 5 minutes of free time - if(4) - delay = rand(0.5*60*10,1*60*10) //from .5 to 1 minutes of free time - - spawn(delay) - malfunction-- - -////////////////////////////// -// Death Explosive Implant -////////////////////////////// -/obj/item/weapon/implant/dexplosive - name = "explosive" - desc = "And boom goes the weasel." - icon_state = "implant_evil" - -/obj/item/weapon/implant/dexplosive/get_data() - var/dat = {" -Implant Specifications:
                    -Name: Robust Corp RX-78 Employee Management Implant
                    -Life: Activates upon death.
                    -Important Notes: Explodes
                    -
                    -Implant Details:
                    -Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
                    -Special Features: Explodes
                    -Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - - -/obj/item/weapon/implant/dexplosive/trigger(emote, source as mob) - if(emote == "deathgasp") - src.activate("death") - return - - -/obj/item/weapon/implant/dexplosive/activate(var/cause) - if((!cause) || (!src.imp_in)) return 0 - explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see. - if(src.imp_in) - src.imp_in.gib() - -/obj/item/weapon/implant/dexplosive/islegal() - return 0 - -////////////////////////////// -// Explosive Implant -////////////////////////////// -/obj/item/weapon/implant/explosive - name = "explosive implant" - desc = "A military grade micro bio-explosive. Highly dangerous." - var/elevel = "Localized Limb" - var/phrase = "supercalifragilisticexpialidocious" - icon_state = "implant_evil" - -/obj/item/weapon/implant/explosive/get_data() - var/dat = {" -Implant Specifications:
                    -Name: Robust Corp RX-78 Intimidation Class Implant
                    -Life: Activates upon codephrase.
                    -Important Notes: Explodes
                    -
                    -Implant Details:
                    -Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
                    -Special Features: Explodes
                    -Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - -/obj/item/weapon/implant/explosive/hear_talk(mob/M, list/message_pieces, verb) - var/msg = multilingual_to_message(message_pieces) - hear(msg) - return - -/obj/item/weapon/implant/explosive/hear(var/msg) - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - msg = replace_characters(msg, replacechars) - if(findtext(msg,phrase)) - activate() - qdel(src) - -/obj/item/weapon/implant/explosive/activate() - if (malfunction == MALFUNCTION_PERMANENT) - return - - if(istype(imp_in, /mob/)) - var/mob/T = imp_in - message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") - log_game("Explosive implant triggered in [T] ([T.key]).") - - if(ishuman(imp_in)) - if (elevel == "Localized Limb") - if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste. - imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") - playsound(src, 'sound/items/countdown.ogg', 75, 1, -3) - sleep(25) - if (istype(part,/obj/item/organ/external/chest) || \ - istype(part,/obj/item/organ/external/groin) || \ - istype(part,/obj/item/organ/external/head)) - part.createwound(BRUISE, 80) //mangle them instead - explosion(get_turf(imp_in), -1, -1, 1, 3) - qdel(src) - else - explosion(get_turf(imp_in), -1, -1, 1, 3) - part.droplimb(0,DROPLIMB_BLUNT) - qdel(src) - if (elevel == "Destroy Body") - explosion(get_turf(T), -1, 0, 1, 6) - T.gib() - if (elevel == "Full Explosion") - explosion(get_turf(T), 0, 1, 3, 6) - T.gib() - - else - explosion(get_turf(imp_in), 0, 1, 3, 6) - - var/turf/t = get_turf(imp_in) - - if(t) - t.hotspot_expose(3500,125) - -/obj/item/weapon/implant/explosive/post_implant(mob/source as mob) - elevel = tgui_alert(usr, "What sort of explosion would you prefer?", "Implant Intent", list("Localized Limb", "Destroy Body", "Full Explosion")) - phrase = tgui_input_text(usr, "Choose activation phrase:") - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - phrase = replace_characters(phrase, replacechars) - usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0) - to_chat(usr, "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.") - -/obj/item/weapon/implant/explosive/emp_act(severity) - if (malfunction) - return - malfunction = MALFUNCTION_TEMPORARY - switch (severity) - if (4) //Weak EMP will make implant tear limbs off. - if (prob(25)) - small_boom() - if (3) //Weak EMP will make implant tear limbs off. - if (prob(50)) - small_boom() - if (2) //strong EMP will melt implant either making it go off, or disarming it - if (prob(70)) - if (prob(75)) - small_boom() - else - if (prob(13)) - activate() //chance of bye bye - else - meltdown() //chance of implant disarming - if (1) //strong EMP will melt implant either making it go off, or disarming it - if (prob(70)) - if (prob(50)) - small_boom() - else - if (prob(50)) - activate() //50% chance of bye bye - else - meltdown() //50% chance of implant disarming - spawn (20) - malfunction-- - -/obj/item/weapon/implant/explosive/islegal() - return 0 - -/obj/item/weapon/implant/explosive/proc/small_boom() - if (ishuman(imp_in) && part) - imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") - playsound(src, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - if (ishuman(imp_in) && part) - //No tearing off these parts since it's pretty much killing - //and you can't replace groins - if (istype(part,/obj/item/organ/external/chest) || \ - istype(part,/obj/item/organ/external/groin) || \ - istype(part,/obj/item/organ/external/head)) - part.createwound(BRUISE, 80) //mangle them instead - else - part.droplimb(0,DROPLIMB_BLUNT) - explosion(get_turf(imp_in), -1, -1, 1, 3) - qdel(src) - -////////////////////////////// -// Chemical Implant -////////////////////////////// -GLOBAL_LIST_BOILERPLATE(all_chem_implants, /obj/item/weapon/implant/chem) - -/obj/item/weapon/implant/chem - name = "chemical implant" - desc = "Injects things." - allow_reagents = 1 - known_implant = TRUE - -/obj/item/weapon/implant/chem/get_data() - var/dat = {" -Implant Specifications:
                    -Name: Robust Corp MJ-420 Prisoner Management Implant
                    -Life: Deactivates upon death but remains within the body.
                    -Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
                    -will suffer from an increased appetite.

                    -
                    -Implant Details:
                    -Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
                    -the implant releases the chemicals directly into the blood stream.
                    -Special Features: -Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
                    -Can only be loaded while still in its original case.
                    -Integrity: Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,
                    -the implant may become unstable and either pre-maturely inject the subject or simply break."} - return dat - -/obj/item/weapon/implant/chem/New() - ..() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - -/obj/item/weapon/implant/chem/trigger(emote, source as mob) - if(emote == "deathgasp") - src.activate(src.reagents.total_volume) - return - -/obj/item/weapon/implant/chem/activate(var/cause) - if((!cause) || (!src.imp_in)) return 0 - var/mob/living/carbon/R = src.imp_in - src.reagents.trans_to_mob(R, cause, CHEM_BLOOD) - to_chat(R, "You hear a faint *beep*.") - if(!src.reagents.total_volume) - to_chat(R, "You hear a faint click from your chest.") - playsound(R, 'sound/weapons/empty.ogg', 10, 1) - spawn(0) - qdel(src) - return - -/obj/item/weapon/implant/chem/emp_act(severity) - if (malfunction) - return - malfunction = MALFUNCTION_TEMPORARY - - switch(severity) - if(1) - if(prob(60)) - activate(20) - if(2) - if(prob(40)) - activate(20) - if(3) - if(prob(40)) - activate(5) - if(4) - if(prob(20)) - activate(5) - - spawn(20) - malfunction-- - -////////////////////////////// -// Loyalty Implant -////////////////////////////// -/obj/item/weapon/implant/loyalty - name = "loyalty implant" - desc = "Makes you loyal or such." - known_implant = TRUE - -/obj/item/weapon/implant/loyalty/get_data() - var/dat = {" -Implant Specifications:
                    -Name: [using_map.company_name] Employee Management Implant
                    -Life: Ten years.
                    -Important Notes: Personnel injected with this device tend to be much more loyal to the company.
                    -
                    -Implant Details:
                    -Function: Contains a small pod of nanobots that manipulate the host's mental functions.
                    -Special Features: Will prevent and cure most forms of brainwashing.
                    -Integrity: Implant will last so long as the nanobots are inside the bloodstream."} - return dat - -/obj/item/weapon/implant/loyalty/handle_implant(mob/M, target_zone = BP_TORSO) - . = ..(M, target_zone) - if(!istype(M, /mob/living/carbon/human)) - . = FALSE - var/mob/living/carbon/human/H = M - var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role) - if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE)) - H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [using_map.company_name] try to invade your mind!") - . = FALSE - -/obj/item/weapon/implant/loyalty/post_implant(mob/M) - var/mob/living/carbon/human/H = M - clear_antag_roles(H.mind, 1) - to_chat(H, "You feel a surge of loyalty towards [using_map.company_name].") - -////////////////////////////// -// Adrenaline Implant -////////////////////////////// -/obj/item/weapon/implant/adrenalin - name = "adrenalin" - desc = "Removes all stuns and knockdowns." - var/uses - -/obj/item/weapon/implant/adrenalin/get_data() - var/dat = {" -Implant Specifications:
                    -Name: Cybersun Industries Adrenalin Implant
                    -Life: Five days.
                    -Important Notes: Illegal
                    -
                    -Implant Details: Subjects injected with implant can activate a massive injection of adrenalin.
                    -Function: Contains nanobots to stimulate body to mass-produce Adrenalin.
                    -Special Features: Will prevent and cure most forms of brainwashing.
                    -Integrity: Implant can only be used three times before the nanobots are depleted."} - return dat - - -/obj/item/weapon/implant/adrenalin/trigger(emote, mob/source as mob) - if (src.uses < 1) return 0 - if (emote == "pale") - src.uses-- - to_chat(source, "You feel a sudden surge of energy!") - source.SetStunned(0) - source.SetWeakened(0) - source.SetParalysis(0) - - return - -/obj/item/weapon/implant/adrenalin/post_implant(mob/source) - source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0) - to_chat(source, "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate.") - -////////////////////////////// -// Death Alarm Implant -////////////////////////////// -/obj/item/weapon/implant/death_alarm - name = "death alarm implant" - desc = "An alarm which monitors host vital signs and transmits a radio message upon death." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_DATA = 1) - known_implant = TRUE - var/mobname = "Will Robinson" - -/obj/item/weapon/implant/death_alarm/get_data() - var/dat = {" -Implant Specifications:
                    -Name: [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor
                    -Life: Activates upon death.
                    -Important Notes: Alerts crew to crewmember death.
                    -
                    -Implant Details:
                    -Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
                    -Special Features: Alerts crew to crewmember death.
                    -Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - -/obj/item/weapon/implant/death_alarm/process() - if (!implanted) return - var/mob/M = imp_in - - if(isnull(M)) // If the mob got gibbed - activate() - else if(M.stat == 2) - activate("death") - -/obj/item/weapon/implant/death_alarm/activate(var/cause) - var/mob/M = imp_in - var/area/t = get_area(M) - switch (cause) - if("death") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) - if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) - //give the syndies a bit of stealth - a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") -// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security") -// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical") - else - a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") -// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security") -// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical") - qdel(a) - STOP_PROCESSING(SSobj, src) - if ("emp") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) - var/name = prob(50) ? t.name : pick(teleportlocs) - a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") -// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security") -// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical") - qdel(a) - else - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) - a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") -// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security") -// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical") - qdel(a) - STOP_PROCESSING(SSobj, src) - -/obj/item/weapon/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this - if (malfunction) //so I'm just going to add a meltdown chance here - return - malfunction = MALFUNCTION_TEMPORARY - if(prob(40)) //CHOMPEDIT: Make the malfunction a probability because annoying - activate("emp") //let's shout that this dude is dead - if(severity == 1) - if(prob(40)) //small chance of obvious meltdown - meltdown() - else if (prob(60)) //but more likely it will just quietly die - malfunction = MALFUNCTION_PERMANENT - STOP_PROCESSING(SSobj, src) - - spawn(20) - malfunction-- - -/obj/item/weapon/implant/death_alarm/post_implant(mob/source as mob) - mobname = source.real_name - START_PROCESSING(SSobj, src) - -////////////////////////////// -// Compressed Matter Implant -////////////////////////////// -/obj/item/weapon/implant/compressed - name = "compressed matter implant" - desc = "Based on compressed matter technology, can store a single item." - icon_state = "implant_evil" - var/activation_emote = "sigh" - var/obj/item/scanned = null - origin_tech = list(TECH_MATERIAL = 4, TECH_BIO = 2, TECH_ILLEGAL = 2) - -/obj/item/weapon/implant/compressed/get_data() - var/dat = {" -Implant Specifications:
                    -Name: [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor
                    -Life: Activates upon death.
                    -Important Notes: Alerts crew to crewmember death.
                    -
                    -Implant Details:
                    -Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
                    -Special Features: Alerts crew to crewmember death.
                    -Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - -/obj/item/weapon/implant/compressed/trigger(emote, mob/source as mob) - if (src.scanned == null) - return 0 - - if (emote == src.activation_emote) - to_chat(source, "The air glows as \the [src.scanned.name] uncompresses.") - activate() - -/obj/item/weapon/implant/compressed/activate() - var/turf/t = get_turf(src) - if (imp_in) - imp_in.put_in_hands(scanned) - else - scanned.loc = t - qdel(src) - -/obj/item/weapon/implant/compressed/post_implant(mob/source) - var/choices = list("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - activation_emote = tgui_input_list(usr, "Choose activation emote. If you cancel this, one will be picked at random.", "Implant Activation", choices) - if(!activation_emote) - activation_emote = pick(choices) - if (source.mind) - source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - to_chat(source, "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - - -/obj/item/weapon/implant/compressed/islegal() - return 0 +#define MALFUNCTION_TEMPORARY 1 +#define MALFUNCTION_PERMANENT 2 + + +/obj/item/weapon/implant + name = "implant" + icon = 'icons/obj/device.dmi' + icon_state = "implant" + w_class = ITEMSIZE_TINY + show_messages = TRUE + + var/implanted = null + var/mob/imp_in = null + var/obj/item/organ/external/part = null + var/implant_color = "b" + var/allow_reagents = 0 + var/malfunction = 0 + var/initialize_loc = BP_TORSO + var/known_implant = FALSE + +/obj/item/weapon/implant/proc/trigger(emote, source as mob) + return + +/obj/item/weapon/implant/proc/activate() + return + +// Moves the implant where it needs to go, and tells it if there's more to be done in post_implant +/obj/item/weapon/implant/proc/handle_implant(var/mob/source, var/target_zone = BP_TORSO) + . = TRUE + imp_in = source + implanted = TRUE + if(ishuman(source)) + var/mob/living/carbon/human/H = source + var/obj/item/organ/external/affected = H.get_organ(target_zone) + if(affected) + affected.implants |= src + part = affected + if(part) + forceMove(part) + else + forceMove(source) + + listening_objects |= src + +// Takes place after handle_implant, if that returns TRUE +/obj/item/weapon/implant/proc/post_implant(var/mob/source) + +/obj/item/weapon/implant/proc/get_data() + return "No information available" + +/obj/item/weapon/implant/proc/hear(message, source as mob) + return + +/obj/item/weapon/implant/proc/islegal() + return 0 + +/obj/item/weapon/implant/proc/meltdown() //breaks it down, making implant unrecongizible + to_chat(imp_in, "You feel something melting inside [part ? "your [part.name]" : "you"]!") + if (part) + part.take_damage(burn = 15, used_weapon = "Electronics meltdown") + else + var/mob/living/M = imp_in + M.apply_damage(15,BURN) + name = "melted implant" + desc = "Charred circuit in melted plastic case. Wonder what that used to be..." + icon_state = "implant_melted" + malfunction = MALFUNCTION_PERMANENT + +/obj/item/weapon/implant/proc/implant_loadout(var/mob/living/carbon/human/H) + . = istype(H) && handle_implant(H, initialize_loc) + if(.) + invisibility = initial(invisibility) + known_implant = TRUE + post_implant(H) + +/obj/item/weapon/implant/Destroy() + if(part) + part.implants.Remove(src) + part = null + listening_objects.Remove(src) + imp_in = null + return ..() + +/obj/item/weapon/implant/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/implanter)) + var/obj/item/weapon/implanter/implanter = I + if(implanter.imp) + return // It's full. + user.drop_from_inventory(src) + forceMove(implanter) + implanter.imp = src + implanter.update() + else + ..() + + + +////////////////////////////// +// Tracking Implant +////////////////////////////// +GLOBAL_LIST_BOILERPLATE(all_tracking_implants, /obj/item/weapon/implant/tracking) + +/obj/item/weapon/implant/tracking + name = "tracking implant" + desc = "An implant normally given to dangerous criminals. Allows security to track your location." + known_implant = TRUE + var/id = 1 + var/degrade_time = 10 MINUTES //How long before the implant stops working outside of a living body. + +/obj/item/weapon/implant/tracking/weak //This is for the loadout + degrade_time = 2.5 MINUTES + +/obj/item/weapon/implant/tracking/New() + id = rand(1, 1000) + ..() + +/obj/item/weapon/implant/tracking/post_implant(var/mob/source) + START_PROCESSING(SSobj, src) + +/obj/item/weapon/implant/tracking/Destroy() + STOP_PROCESSING(SSobj, src) + if(part) + part.implants -= src + part = imp_in = null + return ..() + +/obj/item/weapon/implant/tracking/process() + var/implant_location = src.loc + if(ismob(implant_location)) + var/mob/living/L = implant_location + if(L.stat == DEAD) + if(world.time >= L.timeofdeath + degrade_time) + name = "melted implant" + desc = "Charred circuit in melted plastic case. Wonder what that used to be..." + icon_state = "implant_melted" + malfunction = MALFUNCTION_PERMANENT + STOP_PROCESSING(SSobj, src) + return 1 + +/obj/item/weapon/implant/tracking/get_data() + var/dat = {"Implant Specifications:
                    +Name: Tracking Beacon
                    +Life: 10 minutes after death of host
                    +Important Notes: None
                    +
                    +Implant Details:
                    +Function: Continuously transmits low power signal. Useful for tracking.
                    +Special Features:
                    +Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if +a malfunction occurs thereby securing safety of subject. The implant will melt and +disintegrate into bio-safe elements.
                    +Integrity: Gradient creates slight risk of being overcharged and frying the +circuitry. As a result neurotoxins can cause massive damage.
                    +Implant Specifics:
                    "} + return dat + +/obj/item/weapon/implant/tracking/emp_act(severity) + if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning + return + malfunction = MALFUNCTION_TEMPORARY + + var/delay = 20 + switch(severity) + if(1) + if(prob(60)) + meltdown() + if(2) + delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time + if(3) + delay = rand(2*60*10,5*60*10) //from 2 to 5 minutes of free time + if(4) + delay = rand(0.5*60*10,1*60*10) //from .5 to 1 minutes of free time + + spawn(delay) + malfunction-- + +////////////////////////////// +// Death Explosive Implant +////////////////////////////// +/obj/item/weapon/implant/dexplosive + name = "explosive" + desc = "And boom goes the weasel." + icon_state = "implant_evil" + +/obj/item/weapon/implant/dexplosive/get_data() + var/dat = {" +Implant Specifications:
                    +Name: Robust Corp RX-78 Employee Management Implant
                    +Life: Activates upon death.
                    +Important Notes: Explodes
                    +
                    +Implant Details:
                    +Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
                    +Special Features: Explodes
                    +Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + return dat + + +/obj/item/weapon/implant/dexplosive/trigger(emote, source as mob) + if(emote == "deathgasp") + src.activate("death") + return + + +/obj/item/weapon/implant/dexplosive/activate(var/cause) + if((!cause) || (!src.imp_in)) return 0 + explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see. + if(src.imp_in) + src.imp_in.gib() + +/obj/item/weapon/implant/dexplosive/islegal() + return 0 + +////////////////////////////// +// Explosive Implant +////////////////////////////// +/obj/item/weapon/implant/explosive + name = "explosive implant" + desc = "A military grade micro bio-explosive. Highly dangerous." + var/elevel = "Localized Limb" + var/phrase = "supercalifragilisticexpialidocious" + icon_state = "implant_evil" + +/obj/item/weapon/implant/explosive/get_data() + var/dat = {" +Implant Specifications:
                    +Name: Robust Corp RX-78 Intimidation Class Implant
                    +Life: Activates upon codephrase.
                    +Important Notes: Explodes
                    +
                    +Implant Details:
                    +Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
                    +Special Features: Explodes
                    +Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + return dat + +/obj/item/weapon/implant/explosive/hear_talk(mob/M, list/message_pieces, verb) + var/msg = multilingual_to_message(message_pieces) + hear(msg) + return + +/obj/item/weapon/implant/explosive/hear(var/msg) + var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") + msg = replace_characters(msg, replacechars) + if(findtext(msg,phrase)) + activate() + qdel(src) + +/obj/item/weapon/implant/explosive/activate() + if (malfunction == MALFUNCTION_PERMANENT) + return + + if(istype(imp_in, /mob/)) + var/mob/T = imp_in + message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") + log_game("Explosive implant triggered in [T] ([T.key]).") + + if(ishuman(imp_in)) + if (elevel == "Localized Limb") + if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste. + imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") + playsound(src, 'sound/items/countdown.ogg', 75, 1, -3) + sleep(25) + if (istype(part,/obj/item/organ/external/chest) || \ + istype(part,/obj/item/organ/external/groin) || \ + istype(part,/obj/item/organ/external/head)) + part.createwound(BRUISE, 80) //mangle them instead + explosion(get_turf(imp_in), -1, -1, 1, 3) + qdel(src) + else + explosion(get_turf(imp_in), -1, -1, 1, 3) + part.droplimb(0,DROPLIMB_BLUNT) + qdel(src) + if (elevel == "Destroy Body") + explosion(get_turf(T), -1, 0, 1, 6) + T.gib() + if (elevel == "Full Explosion") + explosion(get_turf(T), 0, 1, 3, 6) + T.gib() + + else + explosion(get_turf(imp_in), 0, 1, 3, 6) + + var/turf/t = get_turf(imp_in) + + if(t) + t.hotspot_expose(3500,125) + +/obj/item/weapon/implant/explosive/post_implant(mob/source as mob) + elevel = tgui_alert(usr, "What sort of explosion would you prefer?", "Implant Intent", list("Localized Limb", "Destroy Body", "Full Explosion")) + phrase = tgui_input_text(usr, "Choose activation phrase:") + var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") + phrase = replace_characters(phrase, replacechars) + usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0) + to_chat(usr, "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.") + +/obj/item/weapon/implant/explosive/emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY + switch (severity) + if (4) //Weak EMP will make implant tear limbs off. + if (prob(25)) + small_boom() + if (3) //Weak EMP will make implant tear limbs off. + if (prob(50)) + small_boom() + if (2) //strong EMP will melt implant either making it go off, or disarming it + if (prob(70)) + if (prob(75)) + small_boom() + else + if (prob(13)) + activate() //chance of bye bye + else + meltdown() //chance of implant disarming + if (1) //strong EMP will melt implant either making it go off, or disarming it + if (prob(70)) + if (prob(50)) + small_boom() + else + if (prob(50)) + activate() //50% chance of bye bye + else + meltdown() //50% chance of implant disarming + spawn (20) + malfunction-- + +/obj/item/weapon/implant/explosive/islegal() + return 0 + +/obj/item/weapon/implant/explosive/proc/small_boom() + if (ishuman(imp_in) && part) + imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") + playsound(src, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + if (ishuman(imp_in) && part) + //No tearing off these parts since it's pretty much killing + //and you can't replace groins + if (istype(part,/obj/item/organ/external/chest) || \ + istype(part,/obj/item/organ/external/groin) || \ + istype(part,/obj/item/organ/external/head)) + part.createwound(BRUISE, 80) //mangle them instead + else + part.droplimb(0,DROPLIMB_BLUNT) + explosion(get_turf(imp_in), -1, -1, 1, 3) + qdel(src) + +////////////////////////////// +// Chemical Implant +////////////////////////////// +GLOBAL_LIST_BOILERPLATE(all_chem_implants, /obj/item/weapon/implant/chem) + +/obj/item/weapon/implant/chem + name = "chemical implant" + desc = "Injects things." + allow_reagents = 1 + known_implant = TRUE + +/obj/item/weapon/implant/chem/get_data() + var/dat = {" +Implant Specifications:
                    +Name: Robust Corp MJ-420 Prisoner Management Implant
                    +Life: Deactivates upon death but remains within the body.
                    +Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
                    +will suffer from an increased appetite.

                    +
                    +Implant Details:
                    +Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
                    +the implant releases the chemicals directly into the blood stream.
                    +Special Features: +Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
                    +Can only be loaded while still in its original case.
                    +Integrity: Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,
                    +the implant may become unstable and either pre-maturely inject the subject or simply break."} + return dat + +/obj/item/weapon/implant/chem/New() + ..() + var/datum/reagents/R = new/datum/reagents(50) + reagents = R + R.my_atom = src + +/obj/item/weapon/implant/chem/trigger(emote, source as mob) + if(emote == "deathgasp") + src.activate(src.reagents.total_volume) + return + +/obj/item/weapon/implant/chem/activate(var/cause) + if((!cause) || (!src.imp_in)) return 0 + var/mob/living/carbon/R = src.imp_in + src.reagents.trans_to_mob(R, cause, CHEM_BLOOD) + to_chat(R, "You hear a faint *beep*.") + if(!src.reagents.total_volume) + to_chat(R, "You hear a faint click from your chest.") + playsound(R, 'sound/weapons/empty.ogg', 10, 1) + spawn(0) + qdel(src) + return + +/obj/item/weapon/implant/chem/emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY + + switch(severity) + if(1) + if(prob(60)) + activate(20) + if(2) + if(prob(40)) + activate(20) + if(3) + if(prob(40)) + activate(5) + if(4) + if(prob(20)) + activate(5) + + spawn(20) + malfunction-- + +////////////////////////////// +// Loyalty Implant +////////////////////////////// +/obj/item/weapon/implant/loyalty + name = "loyalty implant" + desc = "Makes you loyal or such." + known_implant = TRUE + +/obj/item/weapon/implant/loyalty/get_data() + var/dat = {" +Implant Specifications:
                    +Name: [using_map.company_name] Employee Management Implant
                    +Life: Ten years.
                    +Important Notes: Personnel injected with this device tend to be much more loyal to the company.
                    +
                    +Implant Details:
                    +Function: Contains a small pod of nanobots that manipulate the host's mental functions.
                    +Special Features: Will prevent and cure most forms of brainwashing.
                    +Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + +/obj/item/weapon/implant/loyalty/handle_implant(mob/M, target_zone = BP_TORSO) + . = ..(M, target_zone) + if(!istype(M, /mob/living/carbon/human)) + . = FALSE + var/mob/living/carbon/human/H = M + var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role) + if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE)) + H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [using_map.company_name] try to invade your mind!") + . = FALSE + +/obj/item/weapon/implant/loyalty/post_implant(mob/M) + var/mob/living/carbon/human/H = M + clear_antag_roles(H.mind, 1) + to_chat(H, "You feel a surge of loyalty towards [using_map.company_name].") + +////////////////////////////// +// Adrenaline Implant +////////////////////////////// +/obj/item/weapon/implant/adrenalin + name = "adrenalin" + desc = "Removes all stuns and knockdowns." + var/uses + +/obj/item/weapon/implant/adrenalin/get_data() + var/dat = {" +Implant Specifications:
                    +Name: Cybersun Industries Adrenalin Implant
                    +Life: Five days.
                    +Important Notes: Illegal
                    +
                    +Implant Details: Subjects injected with implant can activate a massive injection of adrenalin.
                    +Function: Contains nanobots to stimulate body to mass-produce Adrenalin.
                    +Special Features: Will prevent and cure most forms of brainwashing.
                    +Integrity: Implant can only be used three times before the nanobots are depleted."} + return dat + + +/obj/item/weapon/implant/adrenalin/trigger(emote, mob/source as mob) + if (src.uses < 1) return 0 + if (emote == "pale") + src.uses-- + to_chat(source, "You feel a sudden surge of energy!") + source.SetStunned(0) + source.SetWeakened(0) + source.SetParalysis(0) + + return + +/obj/item/weapon/implant/adrenalin/post_implant(mob/source) + source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0) + to_chat(source, "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate.") + +////////////////////////////// +// Death Alarm Implant +////////////////////////////// +/obj/item/weapon/implant/death_alarm + name = "death alarm implant" + desc = "An alarm which monitors host vital signs and transmits a radio message upon death." + origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_DATA = 1) + known_implant = TRUE + var/mobname = "Will Robinson" + +/obj/item/weapon/implant/death_alarm/get_data() + var/dat = {" +Implant Specifications:
                    +Name: [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor
                    +Life: Activates upon death.
                    +Important Notes: Alerts crew to crewmember death.
                    +
                    +Implant Details:
                    +Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
                    +Special Features: Alerts crew to crewmember death.
                    +Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + return dat + +/obj/item/weapon/implant/death_alarm/process() + if (!implanted) return + var/mob/M = imp_in + + if(isnull(M)) // If the mob got gibbed + activate() + else if(M.stat == 2) + activate("death") + +/obj/item/weapon/implant/death_alarm/activate(var/cause) + var/mob/M = imp_in + var/area/t = get_area(M) + switch (cause) + if("death") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) + //give the syndies a bit of stealth + a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") +// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security") +// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical") + else + a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") +// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security") +// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical") + qdel(a) + STOP_PROCESSING(SSobj, src) + if ("emp") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + var/name = prob(50) ? t.name : pick(teleportlocs) + a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") +// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security") +// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical") + qdel(a) + else + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") +// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security") +// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical") + qdel(a) + STOP_PROCESSING(SSobj, src) + +/obj/item/weapon/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this + if (malfunction) //so I'm just going to add a meltdown chance here + return + malfunction = MALFUNCTION_TEMPORARY + if(prob(40)) //CHOMPEDIT: Make the malfunction a probability because annoying + activate("emp") //let's shout that this dude is dead + if(severity == 1) + if(prob(40)) //small chance of obvious meltdown + meltdown() + else if (prob(60)) //but more likely it will just quietly die + malfunction = MALFUNCTION_PERMANENT + STOP_PROCESSING(SSobj, src) + + spawn(20) + malfunction-- + +/obj/item/weapon/implant/death_alarm/post_implant(mob/source as mob) + mobname = source.real_name + START_PROCESSING(SSobj, src) + +////////////////////////////// +// Compressed Matter Implant +////////////////////////////// +/obj/item/weapon/implant/compressed + name = "compressed matter implant" + desc = "Based on compressed matter technology, can store a single item." + icon_state = "implant_evil" + var/activation_emote = "sigh" + var/obj/item/scanned = null + origin_tech = list(TECH_MATERIAL = 4, TECH_BIO = 2, TECH_ILLEGAL = 2) + +/obj/item/weapon/implant/compressed/get_data() + var/dat = {" +Implant Specifications:
                    +Name: [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor
                    +Life: Activates upon death.
                    +Important Notes: Alerts crew to crewmember death.
                    +
                    +Implant Details:
                    +Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
                    +Special Features: Alerts crew to crewmember death.
                    +Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + return dat + +/obj/item/weapon/implant/compressed/trigger(emote, mob/source as mob) + if (src.scanned == null) + return 0 + + if (emote == src.activation_emote) + to_chat(source, "The air glows as \the [src.scanned.name] uncompresses.") + activate() + +/obj/item/weapon/implant/compressed/activate() + var/turf/t = get_turf(src) + if (imp_in) + imp_in.put_in_hands(scanned) + else + scanned.loc = t + qdel(src) + +/obj/item/weapon/implant/compressed/post_implant(mob/source) + var/choices = list("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + activation_emote = tgui_input_list(usr, "Choose activation emote. If you cancel this, one will be picked at random.", "Implant Activation", choices) + if(!activation_emote) + activation_emote = pick(choices) + if (source.mind) + source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + to_chat(source, "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") + + +/obj/item/weapon/implant/compressed/islegal() + return 0 diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 5e81318ac6..ee6925c55c 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -1,311 +1,311 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/weapon/implantcase - name = "glass case" - desc = "A case containing an implant." - icon = 'icons/obj/items.dmi' - icon_state = "implantcase-0" - item_state = "implantcase" - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_TINY - var/obj/item/weapon/implant/imp = null - -/obj/item/weapon/implantcase/proc/update() - if (src.imp) - src.icon_state = text("implantcase-[]", src.imp.implant_color) - else - src.icon_state = "implantcase-0" - return - -/obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob) - ..() - if (istype(I, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN) - if (user.get_active_hand() != I) - return - if((!in_range(src, usr) && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - src.name = text("Glass Case - '[]'", t) - else - src.name = "Glass Case" - else if(istype(I, /obj/item/weapon/reagent_containers/syringe)) - if(!src.imp) return - if(!src.imp.allow_reagents) return - if(src.imp.reagents.total_volume >= src.imp.reagents.maximum_volume) - to_chat(user, "\The [src] is full.") - else - spawn(5) - I.reagents.trans_to_obj(src.imp, 5) - to_chat(user, "You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units.") - else if (istype(I, /obj/item/weapon/implanter)) - var/obj/item/weapon/implanter/M = I - if (M.imp) - if ((src.imp || M.imp.implanted)) - return - M.imp.loc = src - src.imp = M.imp - M.imp = null - src.update() - M.update() - else - if (src.imp) - if (M.imp) - return - src.imp.loc = M - M.imp = src.imp - src.imp = null - update() - M.update() - return - - -/obj/item/weapon/implantcase/tracking - name = "glass case - 'tracking'" - desc = "A case containing a tracking implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/tracking/New() - src.imp = new /obj/item/weapon/implant/tracking( src ) - ..() - return - - -/obj/item/weapon/implantcase/explosive - name = "glass case - 'explosive'" - desc = "A case containing an explosive implant." - icon_state = "implantcase-r" - -/obj/item/weapon/implantcase/explosive/New() - src.imp = new /obj/item/weapon/implant/explosive( src ) - ..() - return - - -/obj/item/weapon/implantcase/chem - name = "glass case - 'chem'" - desc = "A case containing a chemical implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/chem/New() - src.imp = new /obj/item/weapon/implant/chem( src ) - ..() - return - - -/obj/item/weapon/implantcase/loyalty - name = "glass case - 'loyalty'" - desc = "A case containing a loyalty implant." - icon_state = "implantcase-r" - -/obj/item/weapon/implantcase/loyalty/New() - src.imp = new /obj/item/weapon/implant/loyalty( src ) - ..() - return - - -/obj/item/weapon/implantcase/death_alarm - name = "glass case - 'death alarm'" - desc = "A case containing a death alarm implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/death_alarm/New() - src.imp = new /obj/item/weapon/implant/death_alarm( src ) - ..() - return - - -/obj/item/weapon/implantcase/freedom - name = "glass case - 'freedom'" - desc = "A case containing a freedom implant." - icon_state = "implantcase-r" - -/obj/item/weapon/implantcase/freedom/New() - src.imp = new /obj/item/weapon/implant/freedom( src ) - ..() - return - - -/obj/item/weapon/implantcase/adrenalin - name = "glass case - 'adrenalin'" - desc = "A case containing an adrenalin implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/adrenalin/New() - src.imp = new /obj/item/weapon/implant/adrenalin( src ) - ..() - return - - -/obj/item/weapon/implantcase/dexplosive - name = "glass case - 'explosive'" - desc = "A case containing an explosive." - icon_state = "implantcase-r" - -/obj/item/weapon/implantcase/dexplosive/New() - src.imp = new /obj/item/weapon/implant/dexplosive( src ) - ..() - return - - -/obj/item/weapon/implantcase/health - name = "glass case - 'health'" - desc = "A case containing a health tracking implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/health/New() - src.imp = new /obj/item/weapon/implant/health( src ) - ..() - return - -/obj/item/weapon/implantcase/language - name = "glass case - 'GalCom'" - desc = "A case containing a GalCom language implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/language/New() - src.imp = new /obj/item/weapon/implant/language( src ) - ..() - return - -/obj/item/weapon/implantcase/language/eal - name = "glass case - 'EAL'" - desc = "A case containing an Encoded Audio Language implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/language/eal/New() - src.imp = new /obj/item/weapon/implant/language/eal( src ) - ..() - return - -/obj/item/weapon/implantcase/shades - name = "glass case - 'Integrated Shades'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/shades/New() - src.imp = new /obj/item/weapon/implant/organ( src ) - ..() - return - -/obj/item/weapon/implantcase/taser - name = "glass case - 'Taser'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/taser/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment( src ) - ..() - return - -/obj/item/weapon/implantcase/laser - name = "glass case - 'Laser'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/laser/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/laser( src ) - ..() - return - -/obj/item/weapon/implantcase/dart - name = "glass case - 'Dart'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/dart/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/dart( src ) - ..() - return - -/obj/item/weapon/implantcase/toolkit - name = "glass case - 'Toolkit'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/toolkit/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm( src ) - ..() - return - -/obj/item/weapon/implantcase/medkit - name = "glass case - 'Toolkit'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/medkit/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/medkit( src ) - ..() - return - -/obj/item/weapon/implantcase/surge - name = "glass case - 'Muscle Overclocker'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/surge/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/surge( src ) - ..() - return - -/obj/item/weapon/implantcase/analyzer - name = "glass case - 'Scanner'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/analyzer/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist( src ) - ..() - return - -/obj/item/weapon/implantcase/sword - name = "glass case - 'Scanner'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/sword/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/sword( src ) - ..() - return - -/obj/item/weapon/implantcase/sprinter - name = "glass case - 'Sprinter'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/sprinter/New() - src.imp = new /obj/item/weapon/implant/organ/pelvic( src ) - ..() - return - -/obj/item/weapon/implantcase/armblade - name = "glass case - 'Armblade'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/armblade/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/blade( src ) - ..() - return - -/obj/item/weapon/implantcase/handblade - name = "glass case - 'Handblade'" - desc = "A case containing a nanite fabricator implant." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/handblade/New() - src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/blade( src ) - ..() - return - -/obj/item/weapon/implantcase/restrainingbolt - name = "glass case - 'Restraining Bolt'" - desc = "A case containing a restraining bolt." - icon_state = "implantcase-b" - -/obj/item/weapon/implantcase/restrainingbolt/New() - src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) - ..() - return +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/weapon/implantcase + name = "glass case" + desc = "A case containing an implant." + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-0" + item_state = "implantcase" + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_TINY + var/obj/item/weapon/implant/imp = null + +/obj/item/weapon/implantcase/proc/update() + if (src.imp) + src.icon_state = text("implantcase-[]", src.imp.implant_color) + else + src.icon_state = "implantcase-0" + return + +/obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob) + ..() + if (istype(I, /obj/item/weapon/pen)) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN) + if (user.get_active_hand() != I) + return + if((!in_range(src, usr) && src.loc != user)) + return + t = sanitizeSafe(t, MAX_NAME_LEN) + if(t) + src.name = text("Glass Case - '[]'", t) + else + src.name = "Glass Case" + else if(istype(I, /obj/item/weapon/reagent_containers/syringe)) + if(!src.imp) return + if(!src.imp.allow_reagents) return + if(src.imp.reagents.total_volume >= src.imp.reagents.maximum_volume) + to_chat(user, "\The [src] is full.") + else + spawn(5) + I.reagents.trans_to_obj(src.imp, 5) + to_chat(user, "You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units.") + else if (istype(I, /obj/item/weapon/implanter)) + var/obj/item/weapon/implanter/M = I + if (M.imp) + if ((src.imp || M.imp.implanted)) + return + M.imp.loc = src + src.imp = M.imp + M.imp = null + src.update() + M.update() + else + if (src.imp) + if (M.imp) + return + src.imp.loc = M + M.imp = src.imp + src.imp = null + update() + M.update() + return + + +/obj/item/weapon/implantcase/tracking + name = "glass case - 'tracking'" + desc = "A case containing a tracking implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/tracking/New() + src.imp = new /obj/item/weapon/implant/tracking( src ) + ..() + return + + +/obj/item/weapon/implantcase/explosive + name = "glass case - 'explosive'" + desc = "A case containing an explosive implant." + icon_state = "implantcase-r" + +/obj/item/weapon/implantcase/explosive/New() + src.imp = new /obj/item/weapon/implant/explosive( src ) + ..() + return + + +/obj/item/weapon/implantcase/chem + name = "glass case - 'chem'" + desc = "A case containing a chemical implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/chem/New() + src.imp = new /obj/item/weapon/implant/chem( src ) + ..() + return + + +/obj/item/weapon/implantcase/loyalty + name = "glass case - 'loyalty'" + desc = "A case containing a loyalty implant." + icon_state = "implantcase-r" + +/obj/item/weapon/implantcase/loyalty/New() + src.imp = new /obj/item/weapon/implant/loyalty( src ) + ..() + return + + +/obj/item/weapon/implantcase/death_alarm + name = "glass case - 'death alarm'" + desc = "A case containing a death alarm implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/death_alarm/New() + src.imp = new /obj/item/weapon/implant/death_alarm( src ) + ..() + return + + +/obj/item/weapon/implantcase/freedom + name = "glass case - 'freedom'" + desc = "A case containing a freedom implant." + icon_state = "implantcase-r" + +/obj/item/weapon/implantcase/freedom/New() + src.imp = new /obj/item/weapon/implant/freedom( src ) + ..() + return + + +/obj/item/weapon/implantcase/adrenalin + name = "glass case - 'adrenalin'" + desc = "A case containing an adrenalin implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/adrenalin/New() + src.imp = new /obj/item/weapon/implant/adrenalin( src ) + ..() + return + + +/obj/item/weapon/implantcase/dexplosive + name = "glass case - 'explosive'" + desc = "A case containing an explosive." + icon_state = "implantcase-r" + +/obj/item/weapon/implantcase/dexplosive/New() + src.imp = new /obj/item/weapon/implant/dexplosive( src ) + ..() + return + + +/obj/item/weapon/implantcase/health + name = "glass case - 'health'" + desc = "A case containing a health tracking implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/health/New() + src.imp = new /obj/item/weapon/implant/health( src ) + ..() + return + +/obj/item/weapon/implantcase/language + name = "glass case - 'GalCom'" + desc = "A case containing a GalCom language implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/language/New() + src.imp = new /obj/item/weapon/implant/language( src ) + ..() + return + +/obj/item/weapon/implantcase/language/eal + name = "glass case - 'EAL'" + desc = "A case containing an Encoded Audio Language implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/language/eal/New() + src.imp = new /obj/item/weapon/implant/language/eal( src ) + ..() + return + +/obj/item/weapon/implantcase/shades + name = "glass case - 'Integrated Shades'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/shades/New() + src.imp = new /obj/item/weapon/implant/organ( src ) + ..() + return + +/obj/item/weapon/implantcase/taser + name = "glass case - 'Taser'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/taser/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment( src ) + ..() + return + +/obj/item/weapon/implantcase/laser + name = "glass case - 'Laser'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/laser/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/laser( src ) + ..() + return + +/obj/item/weapon/implantcase/dart + name = "glass case - 'Dart'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/dart/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/dart( src ) + ..() + return + +/obj/item/weapon/implantcase/toolkit + name = "glass case - 'Toolkit'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/toolkit/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm( src ) + ..() + return + +/obj/item/weapon/implantcase/medkit + name = "glass case - 'Toolkit'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/medkit/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/medkit( src ) + ..() + return + +/obj/item/weapon/implantcase/surge + name = "glass case - 'Muscle Overclocker'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/surge/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/surge( src ) + ..() + return + +/obj/item/weapon/implantcase/analyzer + name = "glass case - 'Scanner'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/analyzer/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist( src ) + ..() + return + +/obj/item/weapon/implantcase/sword + name = "glass case - 'Scanner'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/sword/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/sword( src ) + ..() + return + +/obj/item/weapon/implantcase/sprinter + name = "glass case - 'Sprinter'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/sprinter/New() + src.imp = new /obj/item/weapon/implant/organ/pelvic( src ) + ..() + return + +/obj/item/weapon/implantcase/armblade + name = "glass case - 'Armblade'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/armblade/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/blade( src ) + ..() + return + +/obj/item/weapon/implantcase/handblade + name = "glass case - 'Handblade'" + desc = "A case containing a nanite fabricator implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/handblade/New() + src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/blade( src ) + ..() + return + +/obj/item/weapon/implantcase/restrainingbolt + name = "glass case - 'Restraining Bolt'" + desc = "A case containing a restraining bolt." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/restrainingbolt/New() + src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) + ..() + return diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 34110d5924..134ea532bd 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -1,162 +1,162 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/machinery/implantchair - name = "loyalty implanter" - desc = "Used to implant occupants with loyalty implants." - icon = 'icons/obj/machines/implantchair.dmi' - icon_state = "implantchair" - density = TRUE - opacity = 0 - anchored = TRUE - - var/ready = 1 - var/malfunction = 0 - var/list/obj/item/weapon/implant/loyalty/implant_list = list() - var/max_implants = 5 - var/injection_cooldown = 600 - var/replenish_cooldown = 6000 - var/replenishing = 0 - var/mob/living/carbon/occupant = null - var/injecting = 0 - -/obj/machinery/implantchair/New() - ..() - add_implants() - - -/obj/machinery/implantchair/attack_hand(mob/user as mob) - user.set_machine(src) - var/health_text = "" - if(src.occupant) - if(src.occupant.health <= -100) - health_text = "Dead" - else if(src.occupant.health < 0) - health_text = "[round(src.occupant.health,0.1)]" - else - health_text = "[round(src.occupant.health,0.1)]" - - var/dat ="Implanter Status
                    " - - dat +="Current occupant: [src.occupant ? "
                    Name: [src.occupant]
                    Health: [health_text]
                    " : "None"]
                    " - dat += "Implants: [src.implant_list.len ? "[implant_list.len]" : "Replenish"]
                    " - if(src.occupant) - dat += "[src.ready ? "Implant" : "Recharging"]
                    " - user.set_machine(src) - user << browse(dat, "window=implant") - onclose(user, "implant") - - -/obj/machinery/implantchair/Topic(href, href_list) - if((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai)) - if(href_list["implant"]) - if(src.occupant) - injecting = 1 - go_out() - ready = 0 - spawn(injection_cooldown) - ready = 1 - - if(href_list["replenish"]) - ready = 0 - spawn(replenish_cooldown) - add_implants() - ready = 1 - - src.updateUsrDialog() - src.add_fingerprint(usr) - return - - -/obj/machinery/implantchair/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) - if(istype(G, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/grab = G - if(!ismob(grab.affecting)) - return - if(grab.affecting.has_buckled_mobs()) - to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to them. Remove them first.")) - return - var/mob/M = grab.affecting - if(put_mob(M)) - qdel(G) - src.updateUsrDialog() - return - - -/obj/machinery/implantchair/proc/go_out(var/mob/M) - if(!( src.occupant )) - return - if(M == occupant) // so that the guy inside can't eject himself -Agouri - return - if (src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc - if(injecting) - implant(src.occupant) - injecting = 0 - src.occupant = null - icon_state = "implantchair" - return - - -/obj/machinery/implantchair/proc/put_mob(mob/living/carbon/M as mob) - if(!iscarbon(M)) - to_chat(usr, "\The [src] cannot hold this!") - return - if(src.occupant) - to_chat(usr, "\The [src] is already occupied!") - return - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.stop_pulling() - M.loc = src - src.occupant = M - src.add_fingerprint(usr) - icon_state = "implantchair_on" - return 1 - - -/obj/machinery/implantchair/proc/implant(var/mob/M) - if (!istype(M, /mob/living/carbon)) - return - if(!implant_list.len) return - for(var/obj/item/weapon/implant/loyalty/imp in implant_list) - if(!imp) continue - if(istype(imp, /obj/item/weapon/implant/loyalty)) - for (var/mob/O in viewers(M, null)) - O.show_message("\The [M] has been implanted by \the [src].", 1) - - if(imp.handle_implant(M, BP_TORSO)) - imp.post_implant(M) - - implant_list -= imp - break - return - - -/obj/machinery/implantchair/proc/add_implants() - for(var/i=0, iName: [src.occupant]
                    Health: [health_text]
                    " : "None"]
                    " + dat += "Implants: [src.implant_list.len ? "[implant_list.len]" : "Replenish"]
                    " + if(src.occupant) + dat += "[src.ready ? "Implant" : "Recharging"]
                    " + user.set_machine(src) + user << browse(dat, "window=implant") + onclose(user, "implant") + + +/obj/machinery/implantchair/Topic(href, href_list) + if((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai)) + if(href_list["implant"]) + if(src.occupant) + injecting = 1 + go_out() + ready = 0 + spawn(injection_cooldown) + ready = 1 + + if(href_list["replenish"]) + ready = 0 + spawn(replenish_cooldown) + add_implants() + ready = 1 + + src.updateUsrDialog() + src.add_fingerprint(usr) + return + + +/obj/machinery/implantchair/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) + if(istype(G, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/grab = G + if(!ismob(grab.affecting)) + return + if(grab.affecting.has_buckled_mobs()) + to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to them. Remove them first.")) + return + var/mob/M = grab.affecting + if(put_mob(M)) + qdel(G) + src.updateUsrDialog() + return + + +/obj/machinery/implantchair/proc/go_out(var/mob/M) + if(!( src.occupant )) + return + if(M == occupant) // so that the guy inside can't eject himself -Agouri + return + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + if(injecting) + implant(src.occupant) + injecting = 0 + src.occupant = null + icon_state = "implantchair" + return + + +/obj/machinery/implantchair/proc/put_mob(mob/living/carbon/M as mob) + if(!iscarbon(M)) + to_chat(usr, "\The [src] cannot hold this!") + return + if(src.occupant) + to_chat(usr, "\The [src] is already occupied!") + return + if(M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.stop_pulling() + M.loc = src + src.occupant = M + src.add_fingerprint(usr) + icon_state = "implantchair_on" + return 1 + + +/obj/machinery/implantchair/proc/implant(var/mob/M) + if (!istype(M, /mob/living/carbon)) + return + if(!implant_list.len) return + for(var/obj/item/weapon/implant/loyalty/imp in implant_list) + if(!imp) continue + if(istype(imp, /obj/item/weapon/implant/loyalty)) + for (var/mob/O in viewers(M, null)) + O.show_message("\The [M] has been implanted by \the [src].", 1) + + if(imp.handle_implant(M, BP_TORSO)) + imp.post_implant(M) + + implant_list -= imp + break + return + + +/obj/machinery/implantchair/proc/add_implants() + for(var/i=0, iYou [active ? "" : "de"]activate \the [src].
                    ") - update() - -/obj/item/weapon/implanter/verb/remove_implant() - set category = "Object" - set name = "Remove Implant" - set src in usr - - if(!imp) - return - if(istype(usr, /mob)) - var/mob/M = usr - imp.loc = get_turf(src) - if(M.get_active_hand() == null) - M.put_in_hands(imp) - to_chat(M, "You remove \the [imp] from \the [src].") - name = "implanter" - imp = null - - update() - - return - -/obj/item/weapon/implanter/proc/update() - if (src.imp) - src.icon_state = "implanter1" - else - src.icon_state = "implanter0" - src.icon_state += "_[active]" - return - -/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob) - if (!istype(M, /mob/living/carbon)) - return - if(active) - if (imp) - M.visible_message("[user] is attempting to implant [M].") - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(M) - - var/turf/T1 = get_turf(M) - if (T1 && ((M == user) || do_after(user, 50))) - if(user && M && (get_turf(M) == T1) && src && src.imp) - M.visible_message("[M] has been implanted by [user].") - - add_attack_logs(user,M,"Implanted with [imp.name] using [name]") - - if(imp.handle_implant(M)) - imp.post_implant(M) - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - BITSET(H.hud_updateflag, IMPLOYAL_HUD) - BITSET(H.hud_updateflag, BACKUP_HUD) //VOREStation Add - Backup HUD updates - - src.imp = null - update() - else - to_chat(user, "You need to activate \the [src.name] first.") - return - -/obj/item/weapon/implanter/loyalty - name = "implanter-loyalty" - -/obj/item/weapon/implanter/loyalty/New() - src.imp = new /obj/item/weapon/implant/loyalty( src ) - ..() - update() - return - -/obj/item/weapon/implanter/explosive - name = "implanter (E)" - -/obj/item/weapon/implanter/explosive/New() - src.imp = new /obj/item/weapon/implant/explosive( src ) - ..() - update() - return - -/obj/item/weapon/implanter/adrenalin - name = "implanter-adrenalin" - -/obj/item/weapon/implanter/adrenalin/New() - src.imp = new /obj/item/weapon/implant/adrenalin(src) - ..() - update() - return - -/obj/item/weapon/implanter/compressed - name = "implanter (C)" - icon_state = "cimplanter1" - -/obj/item/weapon/implanter/compressed/New() - imp = new /obj/item/weapon/implant/compressed( src ) - ..() - update() - return - -/obj/item/weapon/implanter/compressed/update() - if (imp) - var/obj/item/weapon/implant/compressed/c = imp - if(!c.scanned) - icon_state = "cimplanter1" - else - icon_state = "cimplanter2" - else - icon_state = "cimplanter0" - return - -/obj/item/weapon/implanter/compressed/attack(mob/M as mob, mob/user as mob) - var/obj/item/weapon/implant/compressed/c = imp - if (!c) return - if (c.scanned == null) - to_chat(user, "Please scan an object with the implanter first.") - return - ..() - -/obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) - return - if(!active) - to_chat(user, "Activate \the [src.name] first.") - return - if(istype(A,/obj/item) && imp) - var/obj/item/weapon/implant/compressed/c = imp - if (c.scanned) - to_chat(user, "Something is already scanned inside the implant!") - return - c.scanned = A - if(istype(A, /obj/item/weapon/storage)) - to_chat(user, "You can't store \the [A.name] in this!") - c.scanned = null - return - if(istype(A.loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = A.loc - H.remove_from_mob(A) - else if(istype(A.loc,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/S = A.loc - S.remove_from_storage(A) - A.loc.contents.Remove(A) - update() - -/obj/item/weapon/implanter/restrainingbolt - name = "implanter (bolt)" - -/obj/item/weapon/implanter/restrainingbolt/New() - src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) - ..() - update() - return +/obj/item/weapon/implanter + name = "implanter" + icon = 'icons/obj/items.dmi' + icon_state = "implanter0_1" + item_state = "syringe_0" + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + matter = list(MAT_STEEL = 1000, MAT_GLASS = 1000) + var/obj/item/weapon/implant/imp = null + var/active = 1 + +/obj/item/weapon/implanter/attack_self(var/mob/user) + active = !active + to_chat(user, "You [active ? "" : "de"]activate \the [src].") + update() + +/obj/item/weapon/implanter/verb/remove_implant() + set category = "Object" + set name = "Remove Implant" + set src in usr + + if(!imp) + return + if(istype(usr, /mob)) + var/mob/M = usr + imp.loc = get_turf(src) + if(M.get_active_hand() == null) + M.put_in_hands(imp) + to_chat(M, "You remove \the [imp] from \the [src].") + name = "implanter" + imp = null + + update() + + return + +/obj/item/weapon/implanter/proc/update() + if (src.imp) + src.icon_state = "implanter1" + else + src.icon_state = "implanter0" + src.icon_state += "_[active]" + return + +/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob) + if (!istype(M, /mob/living/carbon)) + return + if(active) + if (imp) + M.visible_message("[user] is attempting to implant [M].") + + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + user.do_attack_animation(M) + + var/turf/T1 = get_turf(M) + if (T1 && ((M == user) || do_after(user, 50))) + if(user && M && (get_turf(M) == T1) && src && src.imp) + M.visible_message("[M] has been implanted by [user].") + + add_attack_logs(user,M,"Implanted with [imp.name] using [name]") + + if(imp.handle_implant(M)) + imp.post_implant(M) + + if(ishuman(M)) + var/mob/living/carbon/human/H = M + BITSET(H.hud_updateflag, IMPLOYAL_HUD) + BITSET(H.hud_updateflag, BACKUP_HUD) //VOREStation Add - Backup HUD updates + + src.imp = null + update() + else + to_chat(user, "You need to activate \the [src.name] first.") + return + +/obj/item/weapon/implanter/loyalty + name = "implanter-loyalty" + +/obj/item/weapon/implanter/loyalty/New() + src.imp = new /obj/item/weapon/implant/loyalty( src ) + ..() + update() + return + +/obj/item/weapon/implanter/explosive + name = "implanter (E)" + +/obj/item/weapon/implanter/explosive/New() + src.imp = new /obj/item/weapon/implant/explosive( src ) + ..() + update() + return + +/obj/item/weapon/implanter/adrenalin + name = "implanter-adrenalin" + +/obj/item/weapon/implanter/adrenalin/New() + src.imp = new /obj/item/weapon/implant/adrenalin(src) + ..() + update() + return + +/obj/item/weapon/implanter/compressed + name = "implanter (C)" + icon_state = "cimplanter1" + +/obj/item/weapon/implanter/compressed/New() + imp = new /obj/item/weapon/implant/compressed( src ) + ..() + update() + return + +/obj/item/weapon/implanter/compressed/update() + if (imp) + var/obj/item/weapon/implant/compressed/c = imp + if(!c.scanned) + icon_state = "cimplanter1" + else + icon_state = "cimplanter2" + else + icon_state = "cimplanter0" + return + +/obj/item/weapon/implanter/compressed/attack(mob/M as mob, mob/user as mob) + var/obj/item/weapon/implant/compressed/c = imp + if (!c) return + if (c.scanned == null) + to_chat(user, "Please scan an object with the implanter first.") + return + ..() + +/obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob, proximity) + if(!proximity) + return + if(!active) + to_chat(user, "Activate \the [src.name] first.") + return + if(istype(A,/obj/item) && imp) + var/obj/item/weapon/implant/compressed/c = imp + if (c.scanned) + to_chat(user, "Something is already scanned inside the implant!") + return + c.scanned = A + if(istype(A, /obj/item/weapon/storage)) + to_chat(user, "You can't store \the [A.name] in this!") + c.scanned = null + return + if(istype(A.loc,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = A.loc + H.remove_from_mob(A) + else if(istype(A.loc,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/S = A.loc + S.remove_from_storage(A) + A.loc.contents.Remove(A) + update() + +/obj/item/weapon/implanter/restrainingbolt + name = "implanter (bolt)" + +/obj/item/weapon/implanter/restrainingbolt/New() + src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) + ..() + update() + return diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index 6e4f5f7a16..aa63215a61 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -1,70 +1,70 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/weapon/implant/freedom - name = "freedom implant" - desc = "Use this to escape from those evil Red Shirts." - implant_color = "r" - var/activation_emote = "chuckle" - var/uses = 1.0 - - -/obj/item/weapon/implant/freedom/New() - src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - src.uses = rand(1, 5) - ..() - return - - -/obj/item/weapon/implant/freedom/trigger(emote, mob/living/carbon/source as mob) - if (src.uses < 1) - return 0 - - if (emote == src.activation_emote) - src.uses-- - to_chat(source, "You feel a faint click.") - if (source.handcuffed) - var/obj/item/weapon/W = source.handcuffed - source.handcuffed = null - if(source.buckled && source.buckled.buckle_require_restraints) - source.buckled.unbuckle_mob() - source.update_handcuffed() - if (source.client) - source.client.screen -= W - if (W) - W.loc = source.loc - dropped(source) - if (W) - W.layer = initial(W.layer) - if (source.legcuffed) - var/obj/item/weapon/W = source.legcuffed - source.legcuffed = null - source.update_inv_legcuffed() - if (source.client) - source.client.screen -= W - if (W) - W.loc = source.loc - dropped(source) - if (W) - W.layer = initial(W.layer) - return - -/obj/item/weapon/implant/freedom/post_implant(mob/source) - source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - to_chat(source, "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - -/obj/item/weapon/implant/freedom/get_data() - var/dat = {" -Implant Specifications:
                    -Name: Freedom Beacon
                    -Life: optimum 5 uses
                    -Important Notes: Illegal
                    -
                    -Implant Details:
                    -Function: Transmits a specialized cluster of signals to override handcuff locking -mechanisms
                    -Special Features:
                    -Neuro-Scan- Analyzes certain shadow signals in the nervous system
                    -Integrity: The battery is extremely weak and commonly after injection its -life can drive down to only 1 use.
                    -No Implant Specifics"} - return dat +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/weapon/implant/freedom + name = "freedom implant" + desc = "Use this to escape from those evil Red Shirts." + implant_color = "r" + var/activation_emote = "chuckle" + var/uses = 1.0 + + +/obj/item/weapon/implant/freedom/New() + src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + src.uses = rand(1, 5) + ..() + return + + +/obj/item/weapon/implant/freedom/trigger(emote, mob/living/carbon/source as mob) + if (src.uses < 1) + return 0 + + if (emote == src.activation_emote) + src.uses-- + to_chat(source, "You feel a faint click.") + if (source.handcuffed) + var/obj/item/weapon/W = source.handcuffed + source.handcuffed = null + if(source.buckled && source.buckled.buckle_require_restraints) + source.buckled.unbuckle_mob() + source.update_handcuffed() + if (source.client) + source.client.screen -= W + if (W) + W.loc = source.loc + dropped(source) + if (W) + W.layer = initial(W.layer) + if (source.legcuffed) + var/obj/item/weapon/W = source.legcuffed + source.legcuffed = null + source.update_inv_legcuffed() + if (source.client) + source.client.screen -= W + if (W) + W.loc = source.loc + dropped(source) + if (W) + W.layer = initial(W.layer) + return + +/obj/item/weapon/implant/freedom/post_implant(mob/source) + source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + to_chat(source, "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") + +/obj/item/weapon/implant/freedom/get_data() + var/dat = {" +Implant Specifications:
                    +Name: Freedom Beacon
                    +Life: optimum 5 uses
                    +Important Notes: Illegal
                    +
                    +Implant Details:
                    +Function: Transmits a specialized cluster of signals to override handcuff locking +mechanisms
                    +Special Features:
                    +Neuro-Scan- Analyzes certain shadow signals in the nervous system
                    +Integrity: The battery is extremely weak and commonly after injection its +life can drive down to only 1 use.
                    +No Implant Specifics"} + return dat diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index fde73d6997..f895a2438f 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -1,94 +1,94 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/weapon/implantpad - name = "implantpad" - desc = "Used to modify implants." - icon = 'icons/obj/items.dmi' - icon_state = "implantpad-0" - item_state = "electronic" - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - var/obj/item/weapon/implantcase/case = null - var/broadcasting = null - var/listening = 1.0 -/obj/item/weapon/implantpad/proc/update() - if (src.case) - src.icon_state = "implantpad-1" - else - src.icon_state = "implantpad-0" - return - - -/obj/item/weapon/implantpad/attack_hand(mob/living/user as mob) - if ((src.case && user.item_is_in_hands(src))) - user.put_in_active_hand(case) - - src.case.add_fingerprint(user) - src.case = null - - src.add_fingerprint(user) - update() - else - return ..() - return - - -/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob) - ..() - if(istype(C, /obj/item/weapon/implantcase)) - if(!( src.case )) - user.drop_item() - C.loc = src - src.case = C - else - return - src.update() - return - - -/obj/item/weapon/implantpad/attack_self(mob/user as mob) - user.set_machine(src) - var/dat = "Implant Mini-Computer:
                    " - if (src.case) - if(src.case.imp) - if(istype(src.case.imp, /obj/item/weapon/implant)) - dat += src.case.imp.get_data() - if(istype(src.case.imp, /obj/item/weapon/implant/tracking)) - dat += {"ID (1-100): - - - - [case.imp:id] - + - +
                    "} - else - dat += "The implant casing is empty." - else - dat += "Please insert an implant casing!" - user << browse(dat, "window=implantpad") - onclose(user, "implantpad") - return - - -/obj/item/weapon/implantpad/Topic(href, href_list) - ..() - if (usr.stat) - return - if ((usr.contents.Find(src)) || ((in_range(src, usr) && istype(src.loc, /turf)))) - usr.set_machine(src) - if (href_list["tracking_id"]) - var/obj/item/weapon/implant/tracking/T = src.case.imp - T.id += text2num(href_list["tracking_id"]) - T.id = min(1000, T.id) - T.id = max(1, T.id) - - if (istype(src.loc, /mob)) - attack_self(src.loc) - else - for(var/mob/M in viewers(1, src)) - if (M.client) - src.attack_self(M) - src.add_fingerprint(usr) - else - usr << browse(null, "window=implantpad") - return - return +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/weapon/implantpad + name = "implantpad" + desc = "Used to modify implants." + icon = 'icons/obj/items.dmi' + icon_state = "implantpad-0" + item_state = "electronic" + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + var/obj/item/weapon/implantcase/case = null + var/broadcasting = null + var/listening = 1.0 +/obj/item/weapon/implantpad/proc/update() + if (src.case) + src.icon_state = "implantpad-1" + else + src.icon_state = "implantpad-0" + return + + +/obj/item/weapon/implantpad/attack_hand(mob/living/user as mob) + if ((src.case && user.item_is_in_hands(src))) + user.put_in_active_hand(case) + + src.case.add_fingerprint(user) + src.case = null + + src.add_fingerprint(user) + update() + else + return ..() + return + + +/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob) + ..() + if(istype(C, /obj/item/weapon/implantcase)) + if(!( src.case )) + user.drop_item() + C.loc = src + src.case = C + else + return + src.update() + return + + +/obj/item/weapon/implantpad/attack_self(mob/user as mob) + user.set_machine(src) + var/dat = "Implant Mini-Computer:
                    " + if (src.case) + if(src.case.imp) + if(istype(src.case.imp, /obj/item/weapon/implant)) + dat += src.case.imp.get_data() + if(istype(src.case.imp, /obj/item/weapon/implant/tracking)) + dat += {"ID (1-100): + - + - [case.imp:id] + + + +
                    "} + else + dat += "The implant casing is empty." + else + dat += "Please insert an implant casing!" + user << browse(dat, "window=implantpad") + onclose(user, "implantpad") + return + + +/obj/item/weapon/implantpad/Topic(href, href_list) + ..() + if (usr.stat) + return + if ((usr.contents.Find(src)) || ((in_range(src, usr) && istype(src.loc, /turf)))) + usr.set_machine(src) + if (href_list["tracking_id"]) + var/obj/item/weapon/implant/tracking/T = src.case.imp + T.id += text2num(href_list["tracking_id"]) + T.id = min(1000, T.id) + T.id = max(1, T.id) + + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + src.add_fingerprint(usr) + else + usr << browse(null, "window=implantpad") + return + return diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 51f9c0d696..6ee094aede 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -1,25 +1,25 @@ -/obj/item/weapon/implant/uplink - name = "uplink" - desc = "Summon things." - var/activation_emote = "chuckle" - -/obj/item/weapon/implant/uplink/New() - activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - hidden_uplink = new(src) - //hidden_uplink.uses = 5 - //Code currently uses a mind var for telecrystals, balancing is currently an issue. Will investigate. - ..() - return - -/obj/item/weapon/implant/uplink/post_implant(mob/source) - var/choices = list("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - activation_emote = tgui_input_list(usr, "Choose activation emote. If you cancel this, one will be picked at random.", "Implant Activation", choices) - if(!activation_emote) - activation_emote = pick(choices) - source.mind.store_memory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - to_chat(source, "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - -/obj/item/weapon/implant/uplink/trigger(emote, mob/source as mob) - if(hidden_uplink && usr == source) // Let's not have another people activate our uplink - hidden_uplink.check_trigger(source, emote, activation_emote) +/obj/item/weapon/implant/uplink + name = "uplink" + desc = "Summon things." + var/activation_emote = "chuckle" + +/obj/item/weapon/implant/uplink/New() + activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + hidden_uplink = new(src) + //hidden_uplink.uses = 5 + //Code currently uses a mind var for telecrystals, balancing is currently an issue. Will investigate. + ..() + return + +/obj/item/weapon/implant/uplink/post_implant(mob/source) + var/choices = list("blink", "blink_r", "eyebrow", "chuckle", "twitch", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + activation_emote = tgui_input_list(usr, "Choose activation emote. If you cancel this, one will be picked at random.", "Implant Activation", choices) + if(!activation_emote) + activation_emote = pick(choices) + source.mind.store_memory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + to_chat(source, "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") + +/obj/item/weapon/implant/uplink/trigger(emote, mob/source as mob) + if(hidden_uplink && usr == source) // Let's not have another people activate our uplink + hidden_uplink.check_trigger(source, emote, activation_emote) return \ No newline at end of file diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm index c4272a5e10..5add877860 100644 --- a/code/game/objects/items/weapons/improvised_components.dm +++ b/code/game/objects/items/weapons/improvised_components.dm @@ -1,40 +1,40 @@ -/obj/item/weapon/material/butterflyconstruction - name = "unfinished concealed knife" - desc = "An unfinished concealed knife, it looks like the screws need to be tightened." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterflystep1" - force_divisor = 0.1 - thrown_force_divisor = 0.1 - -/obj/item/weapon/material/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - to_chat(user, "You finish the concealed blade weapon.") - playsound(src, W.usesound, 50, 1) - new /obj/item/weapon/material/butterfly(user.loc, material.name) - qdel(src) - return - -/obj/item/weapon/material/butterflyblade - name = "knife blade" - desc = "A knife blade. Unusable as a weapon without a grip." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly2" - force_divisor = 0.1 - thrown_force_divisor = 0.1 - -/obj/item/weapon/material/butterflyhandle - name = "concealed knife grip" - desc = "A plasteel grip with screw fittings for a blade." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly1" - force_divisor = 0.1 - thrown_force_divisor = 0.1 - -/obj/item/weapon/material/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/material/butterflyblade)) - var/obj/item/weapon/material/butterflyblade/B = W - to_chat(user, "You attach the two concealed blade parts.") - new /obj/item/weapon/material/butterflyconstruction(user.loc, B.material.name) - qdel(W) - qdel(src) - return +/obj/item/weapon/material/butterflyconstruction + name = "unfinished concealed knife" + desc = "An unfinished concealed knife, it looks like the screws need to be tightened." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterflystep1" + force_divisor = 0.1 + thrown_force_divisor = 0.1 + +/obj/item/weapon/material/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + to_chat(user, "You finish the concealed blade weapon.") + playsound(src, W.usesound, 50, 1) + new /obj/item/weapon/material/butterfly(user.loc, material.name) + qdel(src) + return + +/obj/item/weapon/material/butterflyblade + name = "knife blade" + desc = "A knife blade. Unusable as a weapon without a grip." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly2" + force_divisor = 0.1 + thrown_force_divisor = 0.1 + +/obj/item/weapon/material/butterflyhandle + name = "concealed knife grip" + desc = "A plasteel grip with screw fittings for a blade." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly1" + force_divisor = 0.1 + thrown_force_divisor = 0.1 + +/obj/item/weapon/material/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/material/butterflyblade)) + var/obj/item/weapon/material/butterflyblade/B = W + to_chat(user, "You attach the two concealed blade parts.") + new /obj/item/weapon/material/butterflyconstruction(user.loc, B.material.name) + qdel(W) + qdel(src) + return diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 473b20d40c..2599f5e82c 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -1,1891 +1,1891 @@ -/*********************MANUALS (BOOKS)***********************/ - -/obj/item/weapon/book/manual - icon = 'icons/obj/library.dmi' - due_date = 0 // Game time in 1/10th seconds - unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified - - -/obj/item/weapon/book/manual/engineering_construction - name = "Station Repairs and Construction" - icon_state ="bookEngineering" - item_state = "book3" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Station Repairs and Construction" - -/obj/item/weapon/book/manual/engineering_construction/New() - ..() - dat = {" - - - - - - - - - - - "} - -/obj/item/weapon/book/manual/engineering_particle_accelerator - name = "Particle Accelerator User's Guide" - icon_state ="bookParticleAccelerator" - item_state = "book15" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Particle Accelerator User's Guide" - -/obj/item/weapon/book/manual/engineering_particle_accelerator/New() - ..() - dat = {" - - - - - -

                    Experienced User's Guide

                    - -

                    Setting up the accelerator

                    - -
                      -
                    1. Wrench all pieces to the floor
                    2. -
                    3. Add wires to all the pieces
                    4. -
                    5. Close all the panels with your screwdriver
                    6. -
                    - -

                    Using the accelerator

                    - -
                      -
                    1. Open the control panel
                    2. -
                    3. Set the speed to 2
                    4. -
                    5. Start firing at the singularity generator
                    6. -
                    7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
                    8. -
                    9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
                    10. -
                    - - - - "} - - -/obj/item/weapon/book/manual/supermatter_engine - name = "Supermatter Engine Operating Manual" - icon_state = "bookSupermatter" - item_state = "book15" - author = "Central Engineering Division" - title = "Supermatter Engine Operating Manual" - -/obj/item/weapon/book/manual/supermatter_engine/New() - ..() //CHOMPEdit Start - Updated Supermatter Engine Manual - dat = {" - - - - -

                    OPERATING MANUAL FOR MK 1 PROTOTYPE THERMOELECTRIC SUPERMATTER ENGINE 'TOMBOLA'

                    -
                    -

                    OPERATING PRINCIPLES

                    -
                    -
                  • The supermatter crystal serves as the fundamental power source of the engine. Upon being charged, it begins to emit large amounts of heat and radiation, as well and oxygen and phoron gas. As oxygen accelerates the reaction and reacts with phoron to start a fire, it must be filtered out. It's recommended to filter out all gases besides phoron for standard operation.
                  • -
                    -
                  • Gas in the reactor chamber housing the supermatter is circulated through the reactor loop, which passes through the filters and thermoelectric generators. The thermoelectric generators transfer heat from the reactor loop to the colder radiator loop, thereby generating power. Additional power is generated from internal turbines in the circulators.
                  • -
                    -
                  • Gas in the radiator loop is circulated through the radiator bank, located in space. This rapidly cools the air, preserving the temperature differential needed for power generation.
                  • -
                    -
                  • The MK 1 Prototype Thermoelectric Supermatter Engine is designed to operate at reactor temperatures of 3000K to 4000K and generate up to 1MW of power. Beyond 1MW, the thermoelectric generators will begin to lose power through electrical discharge, reducing efficiency, but additional power generation remains feasible.
                  • -
                    -
                  • The crystal structure of the supermatter will begin to liquefy if its temperature exceeds 5000K. This eventually results in a massive release of light, heat and radiation, disintegration of both the supermatter crystal and most of the surrounding area, and as as-of-yet poorly documented psychological effects on all animals within a 2km radius. Appropriate action should be taken to stabilize or eject the supermatter before such occurs.
                  • -
                    -

                    SUPERMATTER HANDLING

                    -
                  • Do not expose supermatter to oxygen.
                  • -
                  • Do not allow supermatter to contact any solid object apart from specially-designed supporting pallet.
                  • -
                  • Do not directly view supermatter without meson goggles.
                  • -
                  • While handles on pallet allow moving the supermatter via pulling, pushing should not be attempted.
                  • -
                  • Note that prosthetics do not protect against radiation or viewing the supermatter.
                  • -
                    -

                    STANDARD STARTUP PROCEDURE

                    -
                      -
                    1. Fill reactor loop and radiator loop with two (2) standard canisters (1871.75 moles, 20 celsius) of phoron gas each.
                    2. -
                    3. Fill the waste handling radiator loop with one (1) standard canister (1871.75 as well) of carbon dioxide gas.
                    4. -
                    5. You can confirm your canisters got enough gas in them by using your PDA's "Gas Scanner" feature, you must enable it and press your PDA against the canister.
                    6. -
                    7. Enable both the high power gas pumps near the thermo-electric generators and maximize the desired output.
                    8. -
                    9. Enable both the omni-filters and ensure they are set to filter phoron back into the system.
                    10. -
                    11. Enable the gas pump from the filters to waste handling and maximize the desired output.
                    12. -
                    13. Close the monitoring room blast doors and open the reactor blast doors,
                    14. -
                    15. Fire 12-16 pulses from emitter at supermatter crystal. The expected power output is around a megawatt. NOTE: It will take a few minutes to heat up.
                    16. -
                    17. You can confirm desired power levels by checking the computer in the minotoring room, "Supermatter Monitoring". You want 300 EPR, more is safe but no higher than 700
                    18. -
                    19. Close the reactor blast doors and keep the monitoring room blast doors closed to prevent radiation leaking.
                    20. -
                    -
                    -

                    OPERATION AND MAINTENANCE

                    -
                      -
                    1. Ensure that radiation protection and meson goggles are worn at all times while working in the engine room.
                    2. -
                    3. Ensure that reactor and radiator loops are undamaged and unobstructed.
                    4. -
                    5. Ensure that, in a standard setup, only phoron is being filtered back into the system. Do not allow exhaust pressure to exceed 4500 kPa.
                    6. -
                    7. Ensure that engine room Area Power Controller (APC) and engine Superconducting Magnetic Energy Storage unit (SMES) are properly charged.
                    8. -
                    9. Ensure that reactor temperature does not exceed 5000K. In event of reactor temperature exceeding 5000K, see EMERGENCY COOLING PROCEDURE.
                    10. -
                    11. In event of imminent and/or unavoidable delamination, see EJECTION PROCEDURE.
                    12. -
                    -
                    -

                    EMERGENCY COOLING PROCEDURE

                    -
                      -
                    1. Open Emergency Cooling Valve 1 and Emergency Cooling Valve 2.
                    2. -
                    3. When reactor temperature returns to safe operating levels, close Emergency Cooling Valve 1 and Emergency Cooling Valve 2.
                    4. -
                    5. Adding additional gas to the loops can have a positive effect in reducing reactor temperature.
                    6. -
                    7. If reactor temperature does not return to safe operating levels, see EJECTION PROCEDURE.
                    8. -
                    -
                    -

                    EJECTION PROCEDURE

                    -
                      -
                    1. Ensure the engine room has power. The blast doors and ejection platform are unresponsive without power.
                    2. -
                    3. Press Engine Ventilatory Control button to open engine core blast door to space. (In CE Office and next to the reactor shroud)
                    4. -
                    5. Press Emergency Core Eject button to eject supermatter crystal. (In CE Office, only) NOTE: Attempting crystal ejection while engine core vent is closed will result in ejection failure.
                    6. -
                    7. In event of ejection failure, good luck.
                    8. -
                    - - "} //CHOMPEdit End - Updated Supermatter Engine Manual - -// TESLA Engine - -/obj/item/weapon/book/manual/tesla_engine - name = "Tesla Operating Manual" - icon_state ="bookTesla" - item_state = "book15" - author = "Engineering Encyclopedia" - title = "Tesla Engine User's Guide" - dat = {" - - - - -

                    OPERATING MANUAL FOR MK 2 PROTOTYPE TESLA ENGINE 'EDISON'S BANE'

                    -
                    -

                    OPERATING PRINCIPLES

                    -

                    This big floaty ball of pure electricity can only be contained by the containment field. It periodically will discharge energy in the form of an electric shock which can be harvested for energy.

                    -

                    When you shoot the energy ball with the Particle Accelerator, it gains energy, and when enough energy is accumulated a mini-energy ball that orbits the big energy ball will be formed. This can happen as many times as you let it, each mini-ball will send off an extra shock when the energy ball pulses. Be warned, the more mini-balls the energy ball has, the more shocks it sends out at once and the further it can travel each move.

                    -

                    An energy ball will shoot bolts of electricity off at conductors, which it prioritizes in this order: -

                      -
                    1. Tesla coils
                    2. -
                    3. Grounding rods
                    4. -
                    5. People and animals
                    6. -
                    7. Machines
                    8. -
                    -

                    -

                    Tesla Coils will attract the energy ball's bolts. They will take half the power of the bolt (if they are connected to a wire node), pump it into the powernet it is hooked to, and then will send the other half of the power to the next available conductor, which follows the criteria listed above. Preferably, this will be another coil to harness more of the power and pump it into the grid.

                    -

                    Grounding Rods are safety precautions to prevent the tesla bolts from hitting machinery or personnel. If the tesla is loose, being near one will usually keep you safe from direct shocks.

                    -
                    -

                    STARTUP PROCEDURE

                    -
                      -
                    1. Bolt and weld down the Field Generators, ensuring they form a complete rectangle.
                    2. -
                    3. Bolt and weld down the Emitters, ensuring their fire will strike the corner Field Generators
                    4. -
                    5. Bolt down the Tesla Generator inside the rectangle formed by the Field Generators in a spot where it will be struck by fire from the Particle Accelerator
                    6. -
                    7. Bolt down Telsa Coils and Grounding Rods
                    8. -
                    9. Activate the Emitters
                    10. -
                    11. Activate each of the Field Generators, then wait until the containment field has completely formed.
                    12. -
                    13. Setup the Particle Accelerator (see our best seller "Particle Accelerator User's Guide"!) and activate it.
                    14. -
                    15. After a short time the Telsa Generator will create an energy ball, being consumed in the process.
                    16. -
                    -
                    -

                    OPERATION AND MAINTENANCE

                    -
                      -
                    1. Ensure that electrical protection and meson goggles are worn at all times while working in the engine room.
                    2. -
                    3. Ensure that Telsa Coils and/or Grounding Rods are placed to safely collect or ground any and all shock.
                    4. -
                    5. Ensure that all Emitters remain activated and have unobstructed lines of fire to the Field Generators.
                    6. -
                    7. Do not let the Emitters run out of power.
                    8. -
                    -
                    -

                    SHUTDOWN PROCEDURE

                    -
                      -
                    1. De-activate the Particle Accelerator. The energy ball will begin to shrink and lose mini-balls.
                    2. -
                    3. When the energy ball has completely dissipated, the Emitters can be de-activated.
                    4. -
                    -
                    -

                    ENERGY BALL ESCAPE PROCEDURE

                    -
                      -
                    1. Do not let it escape.
                    2. -
                    3. Have someone ready to blame when it does escape.
                    4. -
                    5. Buy our forthcoming manual "Celebrity Grounding Rod Shelters of the Galaxy"
                    6. -
                    - - "} - -//R-UST port -/obj/item/weapon/book/manual/rust_engine // CHOMPedit START : Updating the R-UST manual - name = "R-UST Operating Manual" - icon = 'icons/obj/library_ch.dmi' - icon_state = "bookRusty" // Chompedit : Changed this to a new unique R-UST manual icon rather than just re-using the Supermatter book cover sprite - item_state = "book15" - author = "Central Engineering Division" - title = "R-UST Operating Manual" - -//R-UST guide Re-Writen by Gozulio to reflect how the R-UST actually operates. (CHOMPedit, re-written again :3 By Foxglove) -/obj/item/weapon/book/manual/rust_engine/New() - ..() - dat = {" - - - - -

                    OPERATING MANUAL FOR R-UST MK 8 FUSION CORE 'TOKAMAK'

                    -
                    -

                    OPERATING PRINCIPLES

                    -
                    -
                  • The Tokamak is a system built that generates power off of two systems. The fusion core, AKA, the MK 8 R-UST. And the TEGs located north of the reactor shroud.
                  • -
                    -
                  • Using a projected field within the shroud, fuel and reactors can be kept stable and produce heat and radiation relatively safely in a controlled environment.
                  • -
                    -
                  • Using a gyrotron as a sort of catalyst, fuel can be ignited in carefully calculated methods, this reaction takes place in the aforementioned projected field.
                  • -
                    -
                  • While ensuring radiation is kept within the reactor chamber, and the reactor shroud, heat is allowed to be pumped and cycled to power a TEG north of the shroud, as well as a cycling coolant pipe using the temperatures of the space, or in your case, Sif's atmospheric temperatures.
                  • -
                    -
                  • Using the TEG to produce a small amount of energy, the R-UST can be initiated, causing a reaction that can create energy to then allow the TEG to create more energy, as well as have the R-UST produce energy on its own. These two methods together ensure the SMES and outpost both remained powered.
                  • -
                    -

                    REACTOR HANDLING

                    -
                  • Ensure you are wearing all required protective equipment when within the reactor chamber at all times. It is advised to also wear this suit in the engine control room. The minimum requires is a full radiation suit equipped with a sealed hood. Mesons are not required to be worn.
                  • -
                  • When the R-UST is not powered, both the engine control room and the shroud may be opened. When the R-UST is powered, is it safe to leave the shroud open only if the engine control room is sealed.
                  • -
                  • Wearing insulated gloves over your radiation suit is also considered good practice, however it is not required to be worn.
                  • -
                  • In order to start the R-UST and TEG system, you must be equipped with at minimum a wrench, basic knowledge of piping, the ability to follow instructions, and preferably, the ability to read or be read this guide by someone else.
                  • -
                  • The reactor may in rare instances require a secondary power source to start it, if this is the case, see ADDITIONAL INFORMATION 1. below.
                  • -
                    -

                    TEG STANDARD STARTUP PROCEDURE

                    -
                      -
                    1. North of the shroud lays the TEG. You will need to go there. The standard piping has a green cold loop set of pipes and a yellow hot loop set of pipes. Remember that the reactor heats up the gas that is cycling through the hot loop, so it must be able to be cycle into and out of the reactor chamber freely, there is a cyan pipe that is directly connected to the reactor's core room to allow this to happen.
                    2. -
                    3. The green cold loop is first as it takes longer to fill. First power and max the main cool-loop valve, this is located at the very north-west corner of the room. Remember that the red mark on a valve refers to which direction the valve allows gas to flow. Now power and max the north most valve that connects the cold-loop to the intake, and wrench a phoron canister to the intake. If you would like, skip to step four and return to step three after completing it.
                    4. -
                    5. Once the phoron canister is empty, unwrench it and replace it with a second canister and wrench it down in the original canister's place. The cold-loop requires two canisters of phoron gas to remain stable and safe. Once the cold-loop is set up, you may power down the intake pipe, located adjacent south-west of the intake connector port.
                    6. -
                    7. Next you will look to the hot-loop, due to contamination this loop has two ports for canisters. The left port is the intake. The right port is the outlet. For the purposes of simplicity, ignore the right outlet port and valve Wrench a CO2 canister to the intake port and open and max the intake valve.
                    8. -
                    9. Once the CO2 canister is empty, unwrench it and replace it with a second canister and wrench it down in the original canister's place. The hot-loop requires two canisters of CO2 to remain stable and safe. Once the hot-loop is set up, you may power down the intake pipe, located directly south of the intake connector port.
                    10. -
                    11. While not required there is an omni-filter you can set-up and power on just north of the reactor shroud. It can be used to filter gas out of reactor, it is not required, however, and can be safely ignored for standard basic set-up of TEG and R-UST alike.
                    12. -
                    -
                    -

                    R-UST STANDARD STARTUP PROCEDURE

                    -

                    The Engine Control Room and what to know.

                    -
                  • Gyrotron Controller This is the terminal located on the far west and controls the gyrotron. This device can be viewed as the catalyst that causes the reaction within the core and must remain turned on only during use.
                  • -
                  • Fuel Injector Control This is the terminal adjacent to the gyrotron controller, it controls the injectors that pump fuel into the reactor core chamber and must remained turned on only when in use and with the projection field powered and active.
                  • -
                  • R-UST Core Monitoring This is the terminal in the middle of the room. It gives you information about the status of the reactor, the core chamber, and the reaction going on within the R-UST.
                  • -
                  • Engine Cooling Control This is the terminal directly in front of you when you walk into the engine control room. This terminal controls the cooling pumps and systems within the R-UST core.
                  • -
                  • Shroud Controls There are two buttons that control and cycle the monitoring room shroud and the reactor core shroud. These are located on the sides of the monitoring room. The reactor shroud should be left open during setup. And the monitoring room shroud should be left shut after setup is complete.
                  • -
                  • Deuterium The standard set-up for your R-UST reaction is Deuterium-Dueterium. Go to the fuel storage chamber east of the reactor shroud and ensure you have two rods on hand for set-up. You may safely grab two of these rods now and insert them into the two southern fuel injectors. If you do, skip the first step below.
                  • -
                    -
                      -
                    1. Collect two (2) deuterium fuel rods from the fuel storage chamber and socket them into any two fuel injectors. It is adviced to use the two southern injectors to allow for easier visual checks from the engine control room.
                    2. -
                    3. Assuming the room and controls are powered open both the reactor shroud and the control room shroud. If the room is not powered (which you can check by looking at the R-UST Core Monitor and seeing if the buttons are greyed out or not, if they are grey it does not have enough power). If it is unpowered or otherwise does not have sufficient power see ADDITIONAL INFORMATION 1. below.
                    4. -
                    5. Now, please ensure everyone in the engine control room is wearing full radiation protection gear, ensure the control room door will not be opened during set-up to prevent radiation leakage.
                    6. -
                    7. Using the R-UST Core Monitor, set Field Strength to fifty-one (51). This is the minimum required to catch all injected fuel, anything lower will not be strong enough to be safe, too much higher and it could cause instability that will result in an EMP of your equipment. If you read slowly, read the next steps before turning this online, as the field requires a lot of upkeep power. Once you have done so or are ready to move on, turn on the field and continue.
                    8. -
                    9. Using the Fuel Injector, turn on the two (2) injectors that have deuterium in them. Understand that this alone will not cause a reaction, but using other fuel reagents, such as a tritium, the reactions would begin after this step.
                    10. -
                    11. Finally, using the gyrotron controller, step the fire delay to three (3) and the strength to one (1). Turn it on and close the engine control room shroud before leaving to reduce risks of radiation leakage.
                    12. -
                    -
                    -

                    OPERATION AND MAINTENANCE

                    -
                  • Past this point you do not need to actively maintain the field. So long as the injectors and shield projectors are powered, the system is self-sustaining, even using the excess heat to power the TEG system north of the reactor shroud.
                  • -
                  • From here-on, understand that the room is now flooded with radiation, you will need to wear a full radiation-suit when going into either the engine control room, or the reactor chamber or core.
                  • -
                  • You will notice a jump in temperature. The pattern should be easy to spot, as the R-UST heats up slowly until a reaction happens. When that reaction happens, that is when you will notice the spike. Ensuring the room is constantly flooded with cycling a CO2 coolant to ensure safe temperatures.
                  • -
                  • The majority of power created by this standard set-up is from the TEG, and not the actual R-UST itself. This means the R-UST can be left with lower reactives inside of it, while still ensuring the outpost is powered. Knowing this, you can also safely leave the outpost and acknowledge that periodic temperature checks are recommended.
                  • - -
                    -

                    ADDITIONAL INFORMATION

                    -
                      -
                    1. To the east of the shroud there are three doors, the north room is the equipment storage room, the central room is the fuel storage room, and south is the SMES room. Ensure you check that both SMES are turned on before reading further... if the SMES are fully unpowered, go to the north door and find the standard PACMAN and phoron prepared for you in the storage room. You insulted gloves, wire coils, and the aforementioned PACMAN/phoron for this. Once you are prepared, bring the PACMAN to the SMES room. That is the south room, wire it up to the TEG lines and power the PACMAN with phoron.

                    2. -
                    3. Due to the TEG generating such a high amount of power, you can safely go into the SMES chamber and max out the INPUT and OUTPUT to both SMES units. One will ensure that even in the rare event of a TEG shutdown, the R-UST will have enough power to allow engineers to set up different reactions to ensure the outpost stays powered. The other SMES will ensure the outpost has some spare power until the TEG is repaired, or otherwise replaced.

                    4. -
                    - - "} // CHOMPedit END : Updating the R-UST manual - -/obj/item/weapon/book/manual/engineering_hacking - name = "Hacking" - icon_state ="bookHacking" - item_state = "book2" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Hacking" - -/obj/item/weapon/book/manual/engineering_hacking/New() - ..() - dat = {" - - - - - - - - - - - "} - - -/obj/item/weapon/book/manual/engineering_singularity_safety - name = "Singularity Safety in Special Circumstances" - icon_state ="bookEngineeringSingularitySafety" - item_state = "book15" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Singularity Safety in Special Circumstances" - - dat = {" - - - - -

                    Singularity Safety in Special Circumstances

                    - -

                    Power outage

                    - - A power problem has made the entire station lose power? Could be station-wide wiring problems or illegal power sinks. In any case follow these steps: - -
                      -
                    1. PANIC!
                    2. -
                    3. Get your ass over to engineering! QUICKLY!!!
                    4. -
                    5. Get to the Area Power Controller which controls the power to the emitters.
                    6. -
                    7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
                    8. -
                    9. Open the console and disengage the cover lock.
                    10. -
                    11. Pry open the APC with a Crowbar.
                    12. -
                    13. Take out the empty power cell.
                    14. -
                    15. Put in the new, full power cell - if you don't have one, continue with step 15.
                    16. -
                    17. Quickly put on a Radiation suit.
                    18. -
                    19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
                    20. -
                    21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
                    22. -
                    23. Grab your crowbar and pry away the tile closest to the APC.
                    24. -
                    25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
                    26. -
                    27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
                    28. -
                    29. GET THE FUCK OUT OF THERE!!!
                    30. -
                    - -

                    Shields get damaged

                    - -
                      -
                    1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
                    2. -
                    - - - "} - - -/obj/item/weapon/book/manual/hydroponics_pod_people - name = "The Diona Harvest - From Seed to Market" - icon_state ="bookHydroponicsPodPeople" - item_state = "book5" - author = "Farmer John" - title = "The Diona Harvest - From Seed to Market" - - dat = {" - - - - -

                    Growing a Diona

                    - - Growing a Diona is easy! -

                    -

                      -
                    1. Take a syringe of blood from the body you wish to turn into a Diona.
                    2. -
                    3. Inject 5 units of blood into the pack of dionaea-replicant seeds.
                    4. -
                    5. Plant the seeds.
                    6. -
                    7. Tend to the plants water and nutrition levels until it is time to harvest the Diona.
                    8. -
                    -

                    - Note that for a successful harvest, the body from which the blood was taken from must be dead BEFORE harvesting the pod, however the pod can be growing while they are still alive. Otherwise, the soul would not be able to migrate to the new Diona body.

                    - - It really is that easy! Good luck! - - - - "} - - -/obj/item/weapon/book/manual/medical_cloning - name = "Cloning Techniques of the 26th Century" - icon_state ="bookCloning" - item_state = "book9" - author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Cloning Techniques of the 26th Century" - - dat = {" - - - - - -

                    How to Clone People

                    - So there are 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven't the foggiest idea of what to do? Not to worry! - This guide is intended to teach you how to clone people and how to do it right, in a simple, step-by-step process! If at any point of the guide you have a mental meltdown, - genetics probably isn't for you and you should get a job-change as soon as possible before you're sued for malpractice. - -
                      -
                    1. Acquire body
                    2. -
                    3. Strip body
                    4. -
                    5. Put body in cloning machine
                    6. -
                    7. Scan body
                    8. -
                    9. Clone body
                    10. -
                    11. Get clean Structural Enzymes for the body
                    12. -
                    13. Put body in morgue
                    14. -
                    15. Await cloned body
                    16. -
                    17. Cryo and use the clean SE injector
                    18. -
                    19. Give person clothes back
                    20. -
                    21. Send person on their way
                    22. -
                    - -

                    Step 1: Acquire body

                    - This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. - -

                    Step 2: Strip body

                    - The cloning machine does not like abiotic items. What this means is you can't clone anyone if they're wearing clothes or holding things, so take all of it off. If it's just one person, it's courteous to put their possessions in the closet. - If you have about seven people awaiting cloning, just leave the piles where they are, but don't mix them around and for God's sake don't let people in to steal them. - -

                    Step 3: Put body in cloning machine

                    - Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. - -

                    Step 4: Scan body

                    - Go onto the computer and scan the body by pressing 'Scan - <Subject Name Here>.' If you're successful, they will be added to the records (note that this can be done at any time, even with living people, - so that they can be cloned without a body in the event that they are lying dead on port solars and didn't turn on their suit sensors)! - If not, and it says "Error: Mental interface failure.", then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, - click 'Refresh' and try scanning them again. If there's no success, threaten them with gibbing. - Still no success? Skip over to Step 7 and don't continue after it, as you have an unresponsive body and it cannot be cloned. - If you got "Error: Unable to locate valid genetic data.", you are trying to clone a monkey - start over. - -

                    Step 5: Clone body

                    - Now that the body has a record, click 'View Records,' click the subject's name, and then click 'Clone' to start the cloning process. Congratulations! You're halfway there. - Remember not to 'Eject' the cloning pod as this will kill the developing clone and you'll have to start the process again. - -

                    Step 6: Get clean SEs for body

                    - Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! - For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they're done. If you're a competent Geneticist, you will already have one ready on your working computer. - If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. - Go into View/Edit/Transfer Buffer, find an open slot and click "SE" to save it. Then click 'Injector' to get the SEs in syringe form. Put this in your pocket or something for when the body is done. - -

                    Step 7: Put body in morgue

                    - Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. - To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed "CHEF MEAT" in order to avoid confusion. - -

                    Step 8: Await cloned body

                    - Now go back to the lab and wait for your patient to be cloned. It won't be long now, I promise. - -

                    Step 9: Cryo and clean SE injector on person

                    - Has your body been cloned yet? Great! As soon as the guy pops out, grab them and stick them in cryo. Clonexadone and Cryoxadone help rebuild their genetic material. Then grab your clean SE injector and jab it in them. Once you've injected them, - they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. - -

                    Step 10: Give person clothes back

                    - Obviously the person will be naked after they have been cloned. Provided you weren't an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. - No matter how cruel you are, it's simply against protocol to force your patients to walk outside naked. - -

                    Step 11: Send person on their way

                    - Give the patient one last check-over - make sure they don't still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. - Once you're done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. - -

                    If you've gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. - - - - "} - - -/obj/item/weapon/book/manual/ripley_build_and_repair - name = "APLU \"Ripley\" Construction and Operation Manual" - icon_state ="book" - item_state = "book" - author = "Randall Varn, Einstein Engines Senior Mechanic" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "APLU \"Ripley\" Construction and Operation Manual" - - dat = {" - - - - -

                    -
                    - Weyland-Yutani - Building Better Worlds -

                    Autonomous Power Loader Unit \"Ripley\"

                    -
                    -

                    Specifications:

                    -
                      -
                    • Class: Autonomous Power Loader
                    • -
                    • Scope: Logistics and Construction
                    • -
                    • Weight: 820kg (without operator and with empty cargo compartment)
                    • -
                    • Height: 2.5m
                    • -
                    • Width: 1.8m
                    • -
                    • Top speed: 5km/hour
                    • -
                    • Operation in vacuum/hostile environment: Possible -
                    • Airtank volume: 500 liters
                    • -
                    • Devices: -
                        -
                      • Hydraulic clamp
                      • -
                      • High-speed drill
                      • -
                      -
                    • -
                    • Propulsion device: Powercell-powered electro-hydraulic system
                    • -
                    • Powercell capacity: Varies
                    • -
                    - -

                    Construction:

                    -
                      -
                    1. Connect all exosuit parts to the chassis frame.
                    2. -
                    3. Connect all hydraulic fittings and tighten them up with a wrench.
                    4. -
                    5. Adjust the servohydraulics with a screwdriver.
                    6. -
                    7. Wire the chassis (Cable is not included).
                    8. -
                    9. Use the wirecutters to remove the excess cable if needed.
                    10. -
                    11. Install the central control module (Not included. Use supplied datadisk to create one).
                    12. -
                    13. Secure the mainboard with a screwdriver.
                    14. -
                    15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
                    16. -
                    17. Secure the peripherals control module with a screwdriver.
                    18. -
                    19. Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).
                    20. -
                    21. Secure the internal armor plating with a wrench.
                    22. -
                    23. Weld the internal armor plating to the chassis.
                    24. -
                    25. Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).
                    26. -
                    27. Secure the external reinforced armor plating with a wrench.
                    28. -
                    29. Weld the external reinforced armor plating to the chassis.
                    30. -
                    - -

                    Additional Information:

                    -
                      -
                    • The firefighting variation is made in a similar fashion.
                    • -
                    • A firesuit must be connected to the firefighter chassis for heat shielding.
                    • -
                    • Internal armor is plasteel for additional strength.
                    • -
                    • External armor must be installed in 2 parts, totalling 10 sheets.
                    • -
                    • Completed mech is more resilient against fire, and is a bit more durable overall.
                    • -
                    • The Company is determined to ensure the safety of its investments employees.
                    • -
                    - - - "} - - -/obj/item/weapon/book/manual/research_and_development - name = "Research and Development 101" - icon_state = "rdbook" - item_state = "book7" - author = "Dr. L. Ight" - title = "Research and Development 101" - - dat = {" - - - - - -

                    Science For Dummies

                    - So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: -
                      -
                    1. Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
                    2. -
                    3. Build unlocked designs in the Protolathe and Circuit Imprinter.
                    4. -
                    5. Repeat!
                    6. -
                    - - Those are the basic steps to furthering science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. - -

                    The R&D Console

                    - The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controlled. More on those systems in their own sections. - On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, - because if it gets damaged, you'll lose your data! - In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. - It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, - upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.

                    - - NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. - -

                    Destructive Analyzer

                    - This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, - you can destroy the object to further those sciences. - Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather than further science. - If their reliability is high enough, it'll also advance their related technologies. - -

                    Circuit Imprinter

                    - This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. - -

                    Protolathe

                    - This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid phoron, silver, gold, and diamonds along with a variety of chemicals to produce devices. - The downside is that, again, not all devices you make are 100% reliable when you first discover them. - -

                    Reliability and You

                    - As it has been stated, many devices, when they're first discovered, do not have a 100% reliability. Instead, - the reliability of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, - and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. - Once the device reaches a certain minimum reliability, you'll gain technological advancements from it. - -

                    Building a Better Machine

                    - Many machines produced from circuit boards inserted into a machine frames require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. - If you use these parts when constructing something, its attributes may be improved. - For example, if you use an advanced matter bin when constructing an autolathe (rather than a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: - Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. - - - "} - -/obj/item/weapon/book/manual/robotics_manual - name = "Guide to Robotics" - icon_state ="evabook" - item_state = "book3" - author = "Simple Robotics" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Guide to Robotics" - -/obj/item/weapon/book/manual/robotics_manual/New() - ..() - dat = {" - - - - - - - "} - -/obj/item/weapon/book/manual/robotics_cyborgs - name = "Cyborgs for Dummies" - icon_state = "borgbook" - item_state = "book1" - author = "XISC" - title = "Cyborgs for Dummies" - - dat = {" - - - - - -

                    Cyborgs for Dummies

                    - -

                    Chapters

                    - -
                      -
                    1. Cyborg Related Equipment
                    2. -
                    3. Cyborg Modules
                    4. -
                    5. Cyborg Construction
                    6. -
                    7. Cyborg Maintenance
                    8. -
                    9. Cyborg Repairs
                    10. -
                    11. In Case of Emergency
                    12. -
                    - - -

                    Cyborg Related Equipment

                    - -

                    Exosuit Fabricator

                    - The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. - -

                    Cyborg Recharging Station

                    - This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. - -

                    Robotics Control Console

                    - This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again. - - -

                    Cyborg Modules

                    - When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules. - -

                    Standard Cyborg

                    - The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
                    A Standard Cyborg comes with: -
                      -
                    • Crowbar
                    • -
                    • Stun Baton
                    • -
                    • Health Analyzer
                    • -
                    • Fire Extinguisher
                    • -
                    - -

                    Engineering Cyborg

                    - The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
                    An Engineering Cyborg comes with: -
                      -
                    • A basic set of engineering tools
                    • -
                    • Metal Synthesizer
                    • -
                    • Reinforced Glass Synthesizer
                    • -
                    • An RCD
                    • -
                    • Wire Synthesizer
                    • -
                    • Fire Extinguisher
                    • -
                    • Built-in Optical Meson Scanners
                    • -
                    - -

                    Mining Cyborg

                    - The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines.
                    A Mining Cyborg comes with: -
                      -
                    • Jackhammer
                    • -
                    • Shovel
                    • -
                    • Mining Satchel
                    • -
                    • Built-in Optical Meson Scanners
                    • -
                    - -

                    Security Cyborg

                    - The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals without harming them a bit.
                    A Security Cyborg comes with: -
                      -
                    • Stun Baton
                    • -
                    • Handcuffs
                    • -
                    • Taser
                    • -
                    - -

                    Janitor Cyborg

                    - The Janitor Cyborg module is equipped with various cleaning-facilitating devices.
                    A Janitor Cyborg comes with: -
                      -
                    • Mop
                    • -
                    • Hand Bucket
                    • -
                    • Cleaning Spray Synthesizer and Spray Nozzle
                    • -
                    - -

                    Service Cyborg

                    - The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros."
                    A Service Cyborg comes with: -
                      -
                    • Shaker
                    • -
                    • Industrial Dropper
                    • -
                    • Platter
                    • -
                    • Beer Synthesizer
                    • -
                    • Zippo Lighter
                    • -
                    • Rapid-Service-Fabricator (Produces various entertainment and refreshment objects)
                    • -
                    • Pen
                    • -
                    - -

                    Cyborg Construction

                    - Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
                    The required materials to make a cyborg are: -
                      -
                    • Metal
                    • -
                    • Two Flashes
                    • -
                    • One Power Cell (Preferably rated to 15000w)
                    • -
                    • Some electrical wires
                    • -
                    • One Human Brain
                    • -
                    • One Man-Machine Interface
                    • -
                    - Once you have acquired the materials, you can start on construction of your cyborg.
                    To construct a cyborg, follow the steps below: -
                      -
                    1. Start the Exosuit Fabricators constructing all of the cyborg parts
                    2. -
                    3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
                    4. -
                    5. Once you have a Robot Head, place your two flashes inside the eye sockets
                    6. -
                    7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
                    8. -
                    9. Attach all of the Robot parts to the Robot frame
                    10. -
                    11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
                    12. -
                    13. Congratulations! You have a new cyborg!
                    14. -
                    - -

                    Cyborg Maintenance

                    - Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. - -

                    Replacing a Power Cell

                    - Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
                    The steps to replace a cell are as follows: -
                      -
                    1. Unlock the Cyborg's Interface by swiping your ID on it
                    2. -
                    3. Open the Cyborg's outer panel using a crowbar
                    4. -
                    5. Remove the old power cell
                    6. -
                    7. Insert the new power cell
                    8. -
                    9. Close the Cyborg's outer panel using a crowbar
                    10. -
                    11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
                    12. -
                    - -

                    Exposing the Internal Wiring

                    - Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
                    You can easily expose the internal wiring by following the steps below: -
                      -
                    1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
                    2. -
                    3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
                    4. -
                    - To re-seal the cyborg's internal wiring: -
                      -
                    1. Use a screwdriver to secure the cyborg's internal panel
                    2. -
                    3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
                    4. -
                    - -

                    Cyborg Repairs

                    - Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). - -

                    Dents

                    - If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. - Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. - -

                    Excessive Heat Damage

                    - If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
                    To replace the internal wiring follow the steps below: -
                      -
                    1. Unlock the Cyborg's Interface by swiping your ID
                    2. -
                    3. Open the Cyborg's External Panel using a crowbar
                    4. -
                    5. Remove the Cyborg's Power Cell
                    6. -
                    7. Using a screwdriver, expose the internal wiring of the Cyborg
                    8. -
                    9. Replace the damaged wires inside the cyborg
                    10. -
                    11. Secure the internal wiring cover using a screwdriver
                    12. -
                    13. Insert the Cyborg's Power Cell
                    14. -
                    15. Close the Cyborg's External Panel using a crowbar
                    16. -
                    17. Lock the Cyborg's Interface by swiping your ID
                    18. -
                    - These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. - -

                    In Case of Emergency

                    - In case of emergency, there are a few steps you can take. - -

                    "Rogue" Cyborgs

                    - If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. - To repair the situation, follow these steps: -
                      -
                    1. Locate the nearest robotics console
                    2. -
                    3. Determine which cyborgs are "Rogue"
                    4. -
                    5. Press the lockdown button to immobilize the cyborg
                    6. -
                    7. Locate the cyborg
                    8. -
                    9. Expose the cyborg's internal wiring
                    10. -
                    11. Check to make sure the LawSync and AI Sync lights are lit
                    12. -
                    13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
                    14. -
                    15. Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.
                    16. -
                    17. Use a "Reset" upload moduleto reset the cyborg's laws
                    18. -
                    19. Proceed to a Robotics Control console
                    20. -
                    21. Remove the lockdown on the cyborg
                    22. -
                    - -

                    As a last resort

                    - If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

                    WARNING:

                    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason. - - - - "} - - -/obj/item/weapon/book/manual/security_space_law - name = "Corporate Regulations" - desc = "A set of corporate guidelines for keeping law and order on privately-owned space stations." - icon_state = "bookSpaceLaw" - item_state = "book13" - author = "The Company" - title = "Corporate Regulations" - -/obj/item/weapon/book/manual/security_space_law/New() - ..() - dat = {" - - - - - - - - - - - "} - - - -/obj/item/weapon/book/manual/medical_diagnostics_manual - name = "Medical Diagnostics Manual" - desc = "First, do no harm. A detailed medical practitioner's guide." - icon_state = "bookMedical" - item_state = "book12" - author = "Medical Department" - title = "Medical Diagnostics Manual" - -/obj/item/weapon/book/manual/medical_diagnostics_manual/New() - ..() - dat = {" - - - - -
                    -

                    The Oath

                    - - The Medical Oath sworn by recognised medical practitioners in the employ of [using_map.company_name]
                    - -
                      -
                    1. Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.
                    2. -
                    3. I recognise that the practice of medicine is a privilege with which comes considerable responsibility and I will not abuse my position.
                    4. -
                    5. I will practise medicine with integrity, humility, honesty, and compassion-working with my fellow doctors and other colleagues to meet the needs of my patients.
                    6. -
                    7. I shall never intentionally do or administer anything to the overall harm of my patients.
                    8. -
                    9. I will not permit considerations of gender, race, religion, political affiliation, sexual orientation, nationality, or social standing to influence my duty of care.
                    10. -
                    11. I will oppose policies in breach of human rights and will not participate in them. I will strive to change laws that are contrary to my profession's ethics and will work towards a fairer distribution of health resources.
                    12. -
                    13. I will assist my patients to make informed decisions that coincide with their own values and beliefs and will uphold patient confidentiality.
                    14. -
                    15. I will recognise the limits of my knowledge and seek to maintain and increase my understanding and skills throughout my professional life. I will acknowledge and try to remedy my own mistakes and honestly assess and respond to those of others.
                    16. -
                    17. I will seek to promote the advancement of medical knowledge through teaching and research.
                    18. -
                    19. I make this declaration solemnly, freely, and upon my honour.
                    20. -

                    - -
                    - - - - - - "} - - -/obj/item/weapon/book/manual/engineering_guide - name = "Engineering Textbook" - icon_state ="bookEngineering2" - item_state = "book3" - author = "Engineering Encyclopedia" - title = "Engineering Textbook" - -/obj/item/weapon/book/manual/engineering_guide/New() - ..() - dat = {" - - - - - - - - - - "} - - -/obj/item/weapon/book/manual/chef_recipes - name = "Chef Recipes" - icon_state = "cooked_book" - item_state = "book16" - author = "Victoria Ponsonby" - title = "Chef Recipes" - - dat = {" - - - - - -

                    Food for Dummies

                    - Here is a guide on basic food recipes and also how to not poison your customers accidentally. - -

                    ((OOC link for updated working recipes here))

                    - vore-station.net/infodump/recipes_food.html - -

                    Basics:

                    - Knead an egg and some flour to make dough. Bake that to make a bun or flatten and cut it. - -

                    Burger:

                    - Put a bun and some meat into the microwave and turn it on. Then wait. - -

                    Bread:

                    - Put some dough and an egg into the microwave and then wait. - -

                    Waffles:

                    - Add two lumps of dough and 10 units of sugar to the microwave and then wait. - -

                    Popcorn:

                    - Add 1 corn to the microwave and wait. - -

                    Meat Steak:

                    - Put a slice of meat, 1 unit of salt, and 1 unit of pepper into the microwave and wait. - -

                    Meat Pie:

                    - Put a flattened piece of dough and some meat into the microwave and wait. - -

                    Boiled Spaghetti:

                    - Put the spaghetti (processed flour) and 5 units of water into the microwave and wait. - -

                    Donuts:

                    - Add some dough and 5 units of sugar to the microwave and wait. - -

                    Fries:

                    - Add one potato to the processor, then bake them in the microwave. - - - - - "} - - -/obj/item/weapon/book/manual/barman_recipes - name = "Barman Recipes" - desc = "For the enterprising drink server." - icon_state = "barbook" - item_state = "book14" - author = "Sir John Rose" - title = "Barman Recipes" - - dat = {" - - - - - -

                    Drinks for Dummies

                    - Here's a guide for some basic drinks. - -

                    Black Russian:

                    - Mix vodka and Kahlua into a glass. - -

                    Cafe Latte:

                    - Mix milk and coffee into a glass. - -

                    Classic Martini:

                    - Mix vermouth and gin into a glass. - -

                    Gin Tonic:

                    - Mix gin and tonic into a glass. - -

                    Grog:

                    - Mix rum and water into a glass. - -

                    Irish Cream:

                    - Mix cream and whiskey into a glass. - -

                    The Manly Dorf:

                    - Mix ale and beer into a glass. - -

                    Mead:

                    - Mix enzyme, water, and sugar into a glass. - -

                    Screwdriver:

                    - Mix vodka and orange juice into a glass. - - - - "} - - -/obj/item/weapon/book/manual/detective - name = "The Film Noir: Proper Procedures for Investigations" - icon_state ="bookDetective" - item_state = "book8" - author = "The Company" - title = "The Film Noir: Proper Procedures for Investigations" - - dat = {" - - - - -

                    Detective Work

                    - - Between your bouts of self-narration and drinking whiskey on the rocks, you might get a case or two to solve.
                    - To have the best chance to solve your case, follow these directions: -

                    -

                      -
                    1. Go to the crime scene.
                    2. -
                    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog).
                    4. -
                    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
                    6. -
                    7. Return to your office.
                    8. -
                    9. Using your forensic scanning computer, scan your scanner to upload all of your evidence into the database.
                    10. -
                    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
                    12. -
                    13. If you have 80% or more of the print (The print is displayed), go to step 10, otherwise continue to step 8.
                    14. -
                    15. Look for clues from the suit fibres you found on your perpetrator, and go about looking for more evidence with this new information, scanning as you go.
                    16. -
                    17. Try to get a fingerprint card of your perpetrator, as if used in the computer, the prints will be completed on their dossier.
                    18. -
                    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
                    20. -
                    21. Since you now have both your dossier and the name of the person, print both out as evidence and get security to nab your baddie.
                    22. -
                    23. Give yourself a pat on the back and a bottle of the ship's finest vodka, you did it!
                    24. -
                    -

                    - It really is that easy! Good luck! - - - "} - -/obj/item/weapon/book/manual/nuclear - name = "Fission Mailed: Nuclear Sabotage 101" - icon_state ="bookNuclear" - item_state = "book8" - author = "Stealth Assault Enterprises" - title = "Fission Mailed: Nuclear Sabotage 101" - - dat = {" - - - - -

                    Nuclear Explosives 101

                    - Hello and thank you for choosing Stealth Assault Enterprises for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.

                    - - First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.
                    - -

                    To make the nuclear device functional

                    -
                      -
                    • Place the nuclear device in the designated detonation zone.
                    • -
                    • Extend and anchor the nuclear device from its interface.
                    • -
                    • Insert the nuclear authorisation disk into the slot.
                    • -
                    • Type the numeric authorisation code into the keypad. This should have been provided.
                      - Note: If you make a mistake, press R to reset the device. -
                    • Press the E button to log on to the device.
                    • -

                    - - You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.

                    - Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.
                    - Note: You wouldn't believe how many SAARE Operatives with doctorates have forgotten this step.

                    - - So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
                    - Note: THE BOMB IS STILL SET AND WILL DETONATE

                    - - Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.

                    - - Remember the order:
                    - Disk, Code, Safety, Timer, Disk, RUN!

                    - Intelligence Analysts believe that normal corporate procedure is for the Site Manager to secure the nuclear authentication disk.

                    - - Good luck! - - - "} - -/obj/item/weapon/book/manual/atmospipes - name = "Pipes and You: Getting To Know Your Scary Tools" - icon_state = "pipingbook" - item_state = "book3" - author = "Maria Crash, Senior Atmospherics Technician" - title = "Pipes and You: Getting To Know Your Scary Tools" - dat = {" - - - - - -

                    Contents

                    -
                      -
                    1. Author's Foreword
                    2. -
                    3. Basic Piping
                    4. -
                    5. Insulated Pipes
                    6. -
                    7. Atmospherics Devices
                    8. -
                    9. Heat Exchange Systems
                    10. -
                    11. Final Checks
                    12. -

                    - -

                    HOW TO NOT SUCK QUITE SO HARD AT ATMOSPHERICS


                    - Or: What the fuck does a "pressure regulator" do?

                    - - Alright. It has come to my attention that a variety of people are unsure of what a "pipe" is and what it does. - Apparently, there is an unnatural fear of these arcane devices and their "gases." Spooky, spooky. So, - this will tell you what every device constructable by an ordinary pipe dispenser within atmospherics actually does. - You are not going to learn what to do with them to be the super best person ever, or how to play guitar with passive gates, - or something like that. Just what stuff does.

                    - - -

                    Basic Pipes

                    - The boring ones.
                    - Most ordinary pipes are pretty straightforward. They hold gas. If gas is moving in a direction for some reason, gas will flow in that direction. - That's about it. Even so, here's all of your wonderful pipe options.
                    - -
                      -
                    • Straight pipes: They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this - standard one-meter size, so most things will take up as much space as one of these.
                    • -
                    • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
                    • -
                    • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
                    • -
                    • 4-way manifold: A four-way junction.
                    • -
                    • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh, use them to decorate your house or something.
                    • -
                    • Manual valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
                    • -
                    • Manual T-valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


                    • -
                    - - An important note here is that pipes are now done in three distinct lines - general, supply, and scrubber. You can move gases between these with a universal adapter. Use the correct position for the correct location. - Connecting scrubbers to a supply position pipe makes you an idiot who gives everyone a difficult job. Insulated and HE pipes don't go through these positions. - -

                    Insulated Pipes

                    -
                  • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
                  • -
                  • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
                  • -
                  • 4-way manifold: A four-way junction.
                  • -
                  • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh. Use them to decorate your house or something.
                  • -
                  • Manual Valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
                  • -
                  • Manual T-Valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


                  • - -

                    Insulated Pipes


                    - Special Public Service Announcement.
                    - Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.

                    - -

                    Devices:

                    - They actually do something.
                    - This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now. - Stop it. It's unbecoming. Most of these are fairly straightforward.
                    - -
                      -
                    • Gas pump: Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 15000 kPa (kilopascals). - Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa - (though 18 kPa is preferred when using internals with pure oxygen, for various reasons). A high-powered variant will move gas more quickly at the expense of consuming more power. Do not turn the distribution loop up to 15000 kPa. - You will make engiborgs cry and the Chief Engineer will beat you.
                    • -
                    • Pressure regulator: These replaced the old passive gates. You can choose to regulate pressure by input or output, and regulate flow rate. Regulating by input means that when input pressure is above the limit, gas will flow. - Regulating by output means that when pressure is below the limit, gas will flow. Flow rate can be controlled.
                    • -
                    • Unary vent: The basic vent used in rooms. It pumps gas into the room, but can't suck it back out. Controlled by the room's air alarm system.
                    • -
                    • Scrubber: The other half of room equipment. Filters air, and can suck it in entirely in what's called a "panic siphon." Activating a panic siphon without very good reason will kill someone. Don't do it.
                    • -
                    • Meter: A little box with some gauges and numbers. Fasten it to any pipe or manifold and it'll read you the pressure in it. Very useful.
                    • -
                    • Gas mixer: Two sides are input, one side is output. Mixes the gases pumped into it at the ratio defined. The side perpendicular to the other two is "node 2," for reference, on non-mirrored mixers.. - Output is controlled by flow rate. There is also an "omni" variant that allows you to set input and output sections freely..
                    • -
                    • Gas filter: Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe, - the rest will continue out the other side. Can also output from 0-4500 kPa. The "omni" vairant allows you to set input and output sections freely.
                    • -
                    - -

                    Heat Exchange Systems

                    - Will not set you on fire.
                    - These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt), - a higher temperature will raise pressure, and a lower one will lower temperature.
                    - -
                  • Pipe: This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.
                  • -
                  • Bent pipe: Take a wild guess.
                  • -
                  • Junction: The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.
                  • -
                  • Heat exchanger: These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch. - This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions.

                  • - - That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please. - - - - - "} - -/obj/item/weapon/book/manual/evaguide - name = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition" - icon_state = "evabook" - item_state = "book14" - author = "Maria Crash, Senior Atmospherics Technician" - title = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition" - dat = {" - - - - - -

                    EVA Gear and You: Not Spending All Day Inside, 2nd Edition

                    - Or: How not to suffocate because there's a hole in your shoes
                    - -

                    Contents

                    -
                      -
                    1. A foreword on using EVA gear
                    2. -
                    3. Use of Softsuits
                    4. -
                    5. Putting on a Voidsuit
                    6. -
                    7. Operation of Hardsuits
                    8. -
                    9. Cyclers and Other Modification Equipment
                    10. -
                    11. Miscellaneous Advice
                    12. -
                    13. Final Checks
                    14. -
                    -
                    - - EVA gear. Wonderful to use. It's useful for mining, engineering, and occasionally just surviving, if things are that bad. Most people have EVA training, - but apparently there are some on a space station who don't. This guide should give you a basic idea of how to use this gear, safely. It's split into three main sections: - softsuits, voidsuits, and hardsuits. General advice and instructions for modification are present as well.

                    - - One important point for synthetics and people using full-body prosthetics: You obviously don't need oxygen, but you do run the risk of overheating in vacuum. - Rather than oxygen, use a suit cooling unit. Many emergency equipment stores don't hold them, unfortunately, but dedicated EVA stores will. Be aware of your heat tolerances.

                    - -

                    Softsuits and Emergency Equipment

                    - The bulkiest things this side of Alpha Centauri
                    - These suits are the both grey ones that are stored in EVA and orange emergency suits in emergency lockers. They're the more simple to get on, but are also a lot bulkier, and provide less protection from environmental hazards such as radiation or physical impact. - As Medical, Engineering, Security, and Mining all have voidsuits of their own, these don't see much use outside of emergencies. In an emergency, knowing how to put one on can save your life.

                    - - First, take the suit. It should be in three pieces: A top, a bottom, and a helmet. Put the bottom on first, shoes and the like will fit in it. If you have magnetic boots, however, - put them on on top of the suit's feet. Next, get the top on, as you would a shirt. It can be somewhat awkward putting these pieces on, due to the makeup of the suit, - but to an extent they will adjust to you. You can then find the snaps and seals around the waist, where the two pieces meet. Fasten these, and double-check their tightness. - The red indicators around the waist of the lower half will turn green when this is done correctly. Next, put on whatever breathing apparatus you're using, be it a gas mask or a breath mask. Make sure the oxygen tube is fastened into it. - Put on the helmet now, straightforward, and make sure the tube goes into the small opening specifically for internals. Again, fasten seals around the neck, a small indicator light in the inside of the helmet should go from red to off when all is fastened. - There is a small slot on the side of the suit where an emergency oxygen tank or extended emergency oxygen tank will fit, - but it is recommended to have a full-sized tank on your back for EVA.

                    - - Important note: When using these, especially in emergencies, be aware of your surroundings! These suits can tear or breach more easily than any other type, especially in an environment with broken glass and metal everywhere. - If your suit is breached, you will be in deep trouble. Pressure issues can inhibit breathing even with internals.

                    - - These suits tend to be wearable by most species. They're large and flexible. They might be pretty uncomfortable for some, though, so keep that in mind.

                    - -

                    Voidsuits

                    - Heavy, uncomfortable, still the best option.
                    - These suits come in many specialized varieties. The most common are engineering, atmospherics, security, medical, and mining varieties. - These provide a lot more protection than the standard suits, and depending on the specialization, can offer different protections. - For example, security suits have armor plating, engineering suits have radiation protection, and atmospherics suits are rated for extremely high temperatures.

                    - - Similarly to the softsuits, these are split into three parts. Fastening the pant and top are mostly the same as the softsuits, with the exception that these are a bit heavier, - though not as bulky. The helmet goes on differently, with the air tube feeding into the suit and out a hole near the left shoulder, while the helmet goes on turned ninety degrees counter-clockwise, - and then is turned to face the front and sealed. There is a small button on the right side of the helmet that activates the helmet light. - The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.

                    - - These suits generally only fit one species. NanoTrasen's are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.

                    - - Later-model voidsuits can have magboots and helmets installed into the suit and deployed when needed. Check the operator's manual for individual suits to see how the helmets are installed. - If a helmet is installed, you can skip it while putting the suit on, obviously. When deployed, it will deploy from the back of your neck, covering the head and sealing at the front.

                    - -

                    Hardsuits/Rigs

                    - The fancy stuff.
                    - Proper hardsuits are the most complex sort of EVA equipment available, and blur the line between spacesuits and smaller exosuits. They're sometimes known as 'rigs' or 'powered armor'. - These are the suits with the widest variety of uses, owing to the wide variety of equipment that can be installed on them. Like voidsuits, they come in different, specialized varieties, each one offering different protections and different equipment. - Equipment that can be installed includes weapons, power tools, mining equipment, medical equipment, AI assistants, and more.

                    - - Putting these on is relatively simple. They come as compact packs, worn like a backpack and secured with a harness. Activating them, though, is a more complex process. The suit deploys from the module similarly to helmets deploying from voidsuits. - After it covers the whole body, the suit can be started. The startup sequence takes some time. The suit will automatically fit itself to your body, sealing each section individually - boots, gloves, pants, torso, and helmet - then connecting them.

                    - - Operating a hardsuit is a much more complicated proposal than operating other EVA equipment. While putting them on is relatively simple, and operating basic functions like oxygen and magboots is the same as other suits, the rest is far more complex. - Consult the operator's manual for invidual pieces of equipment that you plan to use. Use of these for heavy work is only reccomended for people who have specialized training and extensive EVA experience. - The potential of a suit breach is always there, and the use of powered equipment raises it significantly.

                    - -

                    Miscellaneous Advice

                    - Pro tip: Safety first.
                    - There's a lot of general advice that can be helpful for people who haven't taken a long-form instruction course. Much of this is going to be fairly obvious safety advice, but it's never bad to remind yourself of that.

                    - -
                      -
                    • Magboots are important. They can be the difference between keeping your footing and needing a rescue team. A tie-off or a jetpack can substitute if necessary.
                    • -
                    • Be aware of breach hazards, especially in softsuits. Loss of suit pressure can be a fatal disaster.
                    • -
                    • Keep an eye on your internals. Having to make two trips outside is better than running out of air.
                    • -
                    • Similarly, keep an eye on the battery status of cooling units and other equipment.
                    • -
                    • In vacuum, sound doesn't carry. Use a radio or sign language for communication.


                    • -
                    - -

                    Modification Equipment

                    - How to actually make voidsuits fit you.
                    - There's a variety of equipment that can modify hardsuits to fit species that can't fit into them, making life quite a bit easier.

                    - - The first piece of equipment is a suit cycler. This is a large machine resembling the storage pods that are in place in some places. These are machines that will automatically tailor a suit to certain specifications. - The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will hurt the whole time you're dying. - These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

                    - - There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not reccomend using them unless no other option is available.

                    - -

                    Final Checks

                    -
                      -
                    • Are all seals fastened correctly?
                    • -
                    • If you have modified it manually, is absolutely everything sealed perfectly?
                    • -
                    • Do you either have shoes on under the suit, or magnetic boots on over it?
                    • -
                    • Do you have internals connected and activated?
                    • -
                    • Do you have a way to communicate with the station in case something goes wrong?
                    • -
                    • Do you have a second person watching if this is a training session?

                    • -
                    - - If you don't have any further issues, go out and do whatever is necessary. - - - - "} - -/obj/item/weapon/book/manual/virology - name = "Sneezes and Coughs: A Guide To Virology, 1st Edition" - icon_state = "bookvirology" - item_state = "book5" - author = "James Simpson, Chief Virologist" - title = "Sneezes and Coughs: A Guide To Virology, 1st Edition" - dat = {" - - - - -

                    A Guide to Virology, 1st Edition

                    - Welcome to virology!

                    - - A virologist spends much of their time isolated in the virology department fiddling with deadly and annoying plagues. This guide will get you on the right path to properly
                    - creating and curing the worst of the worst.

                    - -

                    Anatomy of a Virus

                    - Before you jump in to making the next Black Death, you need to understand what's what. When you pop a tray into the disease analyzer you'll get a paper listing quite a few
                    - things about that virus!

                    - - Antigens
                    - The first thing you might notice on this analysis is the listed antigens of a virus. This, essentially, is what you need for cures. When a patient develops an antibody that
                    - matches a disease's antigen, they'll be immune to the virus.

                    - - Transmission
                    - This will list one of three methods of transmission: airborne, contact, or blood. Airborne viruses will spread through the air, meaning if a patient is coughing or sneezing
                    - it will spread quicker. Contactviruses need some sort of, well, contact. Blood on the floor, mucus, and vomit should all be cleaned up. Blood-transmission viruses will only
                    - spread through actual blood contact, meaning an injection of the virus would be necessary to spread it.

                    - - Species
                    - Not all viruses are compatible with all species! This will list off what can be infected by a particular virus. This can be changed through splicing. In rare cases you will
                    - get a virus that has infected crewmembers but cannot infect your lab monkeys. In these cases, you will likely have to splice different species data to safely make a cure.

                    - - Symptoms
                    - This lists what all the virus does, along with the strength of the symptoms and their aggressiveness. A full list of symptoms and their stages can be found below.

                    - -

                    Protection

                    - First off, any good virologist needs to gear up!

                    - Your virology lab should have the following: -
                      -
                    • Two (2) Level-3 Bio Hoods
                    • -
                    • Two (2) Level-3 Bio Suits
                    • -
                    • Two (2) sets of sealed internals
                    • -
                    • One (1) box of sterile masks
                    • -
                    • One (1) box of latex gloves
                    • -

                    - Make sure to gear up appropriately and take precautions to not bring the virus out of the lab!

                    - What needs to be worn varies from race to race, as some species cannot be affected by a virus, but
                    - precautions should always be taken to prevent accidentally carrying the virus out of containment.

                    - -

                    Machinery

                    - These are the types of machines that you will be expected to use in this department. Study them, know them, and make sure you use them correctly!

                    - - Antibody Scanner
                    - A device similar to a health analyzer, when scanned over a patient it will tell you any present antibodies in their bloodstream.

                    - - Pathogenic Isolator
                    - This device can be loaded with blood samples via a syringe. It will tell you if there is a present viral pathogen, and if so it can isolate the pathogen,
                    - producing a virus dish for further research. This is the primary means of creating virus dishes.

                    - - Pathogenic Incubator
                    - One of the most important machines, you'll be sitting here a lot. Virus trays you produce will start small, and you will need to grow them to get anywhere.
                    - Load it with virus food (diluted milk, found in a wall mounted dispenser nearby) as well as a virus dish and turn it on. It will slowly grow the virus
                    - for analysis, splicing, or whatever other use you might find for it. It can also inject the virus into other chemicals (i.e. blood) which will allow you
                    - to artificially infect a blood sample to infect test subjects.

                    - - Additionally, it can irradiate a virus dish to cause mutation. This randomly alters the syndromes, allowing you to collect new data.

                    - - Disease Analyser
                    - Virus dishes may be placed into this machine after it has been incubated sufficiently. It will create a reading of the virus' symptoms, species targeted,
                    - associated antibodies, and so on. It will also update the disease into the digital database, allowing it to be detected via Medical HUD or health analyzer.

                    - - Isolation Centrifuge
                    - Inserting a vial of blood into this machine will allow it to take a present pathogen or antibody, turning it into a pure virus or pure cure for your use.
                    - It will automatically detect if either are in the blood sample, so it is useful for determining if a sample is infected. The sample will be reusable if creating
                    - more of the virus, but will be expended upon creating antibodies.

                    - - Disease Splicer
                    - As it's name implied, this machine is for splicing the disease symptoms and creating new viruses. Insert an analyzed virus sample to take a symptom which can
                    - then be saved on a GNA disk (created by the machine), or use an existing disk on the machine to load up a symptom and splice it in.

                    - -

                    Syndromes

                    - While curing patients is the obvious side to virology, there's more you can do! For a variety of reasons you may wish to engineer your own virus through mutations
                    - and splicing. Keep in mind that infecting the whole station with a deadly virus is generally frowned upon in most societies, and even in an antagonistic role simply
                    - infecting everyone with a very deadly virus is not ideal.

                    - - Obtaining a Sample
                    - The first step to making your own virus is to find a virus to start tinkering with. There are two ways of doing this: grabbing the pre-spawned virus dish from the
                    - freezer create in your laboratory, or taking a blood sample from an infected patient that you haven't cured yet and running it through the Pathogenic Isolator to
                    - produce a virus dish.

                    - - In either case, you'll then need to incubate the virus in the Pathogenic Incubator until it is of sufficient size for you to work with, and ideally also run it
                    - through the Disease Analyzer to get an idea of what it does. This will also keep the rest of Medical from getting on your case about not giving them the ability to
                    - detect viral outbreaks without you, and will help prevent public lynchings if someone sneezes.

                    - - Once that's all done, you're ready to start the real work.

                    - - Obtaining a Sample
                    - Sometimes you just need to infect somebody. Usually, this is because you're doing some splicing work and want to make sure that you'll have some copies of a virus
                    - in reserve for future study. Fortunately, the process of deliberately infecting patients, as well as creating backups of your viruses, is actually very simple.

                    - - If you have a virus dish and wish to infect a patient, place the dish into the Pathogenic Incubator along with a beaker full of blood. Ideally, this is the
                    - patient's (or test monkey's) blood, though anyone's will do in a pinch - just be aware of the possibility of blood rejection, and be ready to deal with it accordingly.
                    - The incubator can inject a sample of the virus into the blood, which you can then inject into the patient to infect them. Alternatively, once a blood sample is infected
                    - you may place it in either the Pathogenic Isolator or Isolation Centrifuge to make as many samples of that virus you need without destroying the sample.
                    - No infections necessary!

                    - - Splicing
                    - To understand splicing, you must know that every virus has 4 GNA strands, each of which is tied to one of the syndromes that it can manifest. Each syndrome, and thus each
                    - strand, is ranked in order of its appearance when symptoms begin to manifest in a patient, and higher-ranked (and thus slower to appear) syndromes are likely to be more
                    - powerful than lower-ranked ones. (1) is the lowest, first symptom to manifest, and (4) is the highest, final symptom to manifest.

                    - - The Disease Splicer will allow you to examine and manipulate a virus' GNA strands to create a virus with any syndromes that you want.

                    - - The splicer has main three functions which allow you to modify viruses and define which GNA strands they contain. The first of these functions is the splicing function,
                    - which copies a GNA strand from an inserted virus tray to the disease splicer buffer. This is done by selecting the desired GNA strand under "Reverse Engineering".
                    - Doing so will destroy the virus tray in the process, so be sure that you have more samples of the virus on hand if you want to preserve it.

                    - - The disease splicer’s second function is to copy whatever strand it has stored in its buffer to a disk the machine creates. These disks can be re-inserted into
                    - the disease splicer later, making their stored GNA strand immediately available for use. Unlike virus trays, disks can be reused without destroying them.

                    - - The final function of the disease splicer is to copy over a GNA strand of its loaded virus dish with the corresponding GNA strand that is currently stored in
                    - its buffer. This effectively allows you to give a virus any set of symptoms you want, so long as it follows the rules of the ranking. A rank (1) symptom can fill
                    - any slot, while a (3) can only fill 3 and up, and a (4) can only be in the fourth slot.

                    - - Mutating
                    - Sometimes you just don't have any of the symptoms you want. Fortunately, mutating a virus dish is very simple. Simply place a dish in the Pathogenic Incubator
                    - to get started and click 'add radiation'. This will fill up the radiation bar with each press. When the machine is on, this bar will slowly tick down as the radiation
                    - is applied to the sample. For any significant mutation the radiation should be over 500k, meaning at least half the bar. When a mutation occurs -- and multiple
                    - mutations can occur in a single sample -- there will be a ping from the machine. Once it's done growing and mutating, throw it into the analyzer and see what you got!

                    - - With these functions in mind, the process in order for you to develop your own virus is as follows: -
                      -
                    1. Create lots of virus sample dishes.
                    2. -
                    3. If the virus dishes you have already created don't contain the syndromes that you want in
                      - your custom virus, irradiate them in the Pathogenic Incubator until they do.
                    4. -
                    5. Create backup dishes of your new viruses.
                    6. -
                    7. Strip the GNA strands that you want from your virus dishes, saving each one onto a disk.
                    8. -
                    9. Load a new virus dish into the Disease Splicer.
                    10. -
                    11. Copy over the virus dish's GNA strands with your disks.
                    12. -
                    13. Once you have your final product, you can use the Pathogenic Incubator to create a beaker
                      - of blood containing the virus. Congratulations! You are now officially a bioweapon
                      - manufacturer.
                    14. -
                    - -

                    Curing

                    - Curing a virus is relatively simple, but the below will leave you without a sample to work with. If this is a concern, see 'obtaining a sample' above. Alternatively to
                    - the below, spacecillin can be used in a pinch to attempt to treat a virus if no virologist is present and someone decided to roll around in mucus. However this is not
                    - guaranteed to work, and can in fact simply make the virus more resistant to spacecillin.

                    - - Quarantine
                    - If you or a crew member becomes infected by a virus, your first concern should be to isolate them as quickly as possible to prevent the disease from spreading. Ideally,
                    - this means getting the patient back to Virology and into a holding cell, but failing that, it's important to get them into an isolated room, shut the door, and keep anyone
                    - else from entering. It is also important to clean up any blood, vomit, or mucus left behind by the patient, as it may spread the virus as well.

                    - - Antibodies
                    - Now that your patient is safely hidden away where they can't infect people without your permission, you want to cure them. The basic idea behind that is to get them to start
                    - synthesizing antibodies.

                    - - Antibodies are produced by living organisms that have started to fight off a virus in their bloodstream. An organism that has produced antibodies is effectively
                    - immune to any virus that is weak to those antibodies, which are generally denoted by a short string of letters (say, "KM" or similar) to let you know which viruses they
                    - are effective against. Even better, once an organism has synthesized antibodies for itself, you can take a blood sample and use that to create more antibodies, which you
                    - can then inject into other people to cure the virus in them, or even to prevent them from catching it in the first place. And you can take blood samples from those people
                    - to make even more antibodies.

                    - - The issue is that, most of the time, a patient's immune system is not powerful enough to create antibodies on its own (space plagues are nasty things), so you have to do that
                    - for them. You do that by injecting them with Radium.

                    - - Since Radium is radioactive, this is obviously not something that you want to do to your actual patients. It'll cause major toxin damage when an antibody is
                    - made and quickly lead to organ failure. You get around this by using monkeys, which you can get from the box of monkey cubes very handily left on the desk in Virology for
                    - this very purpose.

                    - - So the process of curing diseases is, really, quite simple. Find an infected patient. Make a monkey (ideally, strap this monkey to a bed in an isolation cell to make the
                    - rest of this process easier). Take a blood sample from the infected patient, then inject it into the monkey to infect the monkey. Inject the monkey with Radium. Use the antibody
                    - scanner on the monkey every few seconds until it says that the monkey has begun producing antibodies, then take a blood sample (or two or three or four) from the
                    - monkey. Put the blood sample(s) into a vial, then put the vial into the isolation centrifuge and isolate the antibodies. Voila: a bottle of virus cure. Inject it into as many
                    - people as you like, then throw the (likely dead) monkey into the disposals chute to eject its disease-ridden body into space and clean the isolation cell. Or, if you're on
                    - the ball and wish to be conservative with your limited monkey cubes, save the monkey, too.

                    - - Congratulations! You have now cured a disease.

                    - - The important thing to remember is that anyone injected with antibodies becomes a source of those antibodies for the future. You can take a sample of their blood
                    - and put it into the isolation centrifuge just like you did with the monkey's to produce more antibodies if you ever run out. For this reason, and because you might have
                    - gotten infected yourself in the process of synthesizing a cure, most Virologists will inject themselves with any antibodies they produce.

                    - -

                    Syndromes

                    - Below are the possible syndromes of a virus and the stages they can appear at. A stage covers that stage and higher, so a stage 1 syndrome can appear at stage 4.
                    - A stage 4 syndrome, however, cannot appear any earlier than stage 4.

                    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                    Syndromes
                    Stage Name Effects -
                    1 Sneezing Makes the patient sneeze. Spreads airborne disease! -
                    1 Mucus Buildup Makes the patient's throat fill with mucus. -
                    1 Salivary Gland Stimulation Makes the patient drool. Spreads the disease! -
                    1 Involuntary Twitching Makes the patient twitch. -
                    1 Headache Gives the patient a headache. -
                    1 Mlemington's Syndrome Makes the patient 'mlem' uncontrollably. -
                    1 Spyndrome Makes the patient spin uncontrollably. -
                    2 Involuntary Vocalization Makes the patient scream. -
                    2 Vomiting Makes the patient vomit. Spreads the disease! -
                    2 Excessive Sleepiness Makes the patient drowsy. -
                    2 Narcolepsy Makes the patient pass out at random. -
                    2 Vision Loss Causes partial blindness. -
                    2 Severe Cough Causes coughing. Spreads airborne disease! -
                    2 Digestive Inefficiency Makes the patient always hungry. -
                    2 Reduced Circulation Makes the patient shiver. -
                    2 Hair Loss Causes the patient's hair to fall out. -
                    2 Overactive Adrenal Gland Makes the patient jittery, but also faster. -
                    2 Tinnitus Causes ringing in the patient's ears. -
                    2 Lingual Dissocation Scrambles the patients language center of their brain. -
                    3 Hyperacidity Causes small amounts of toxin damage. -
                    3 Nervous Motor Instability Makes the patient shaky. -
                    3 Pineal Gland Decalcification Gives the patient telepathy. -
                    3 Neurodegeneration Causes brain damage. -
                    3 Hallucination Causes hallucinations. -
                    3 Hearing Loss A less severe hearing damage. -
                    3 Topographical Cretinism Makes the patient incapable of walking straight. -
                    3 Uncontrolled Laughter Causes the patient to laugh uncontrollably. -
                    3 DNA Degradation Causes genetic damage. -
                    3 Phantom Aches Causes groaning. -
                    3 Chemical Synthesis Causes the synthesis of a certain chemical in the patient's bloodstream. -
                    3 Genetic Chameleonism Prevents the patient from experiencing organ rejection. -
                    3 Mass Revectoring Causes the patient to suddenly change size. -
                    3 Flipponov's Disease Causes the patient to uncontrollably do a flip. -
                    4 Gibbingtons Gibs the patients slowly. -
                    4 Radian's Syndrome Irradiates the patient from the inside. -
                    4 Deafness Causes complete deafness. -
                    4 Genome Regression Turns the patient into the primitive form of their species. -
                    4 Windpipe Contraction Causes the patient to involuntarily hold their breath. -
                    4 Autoimmune Response Adds toxins to the patient's bloodstream. -
                    4 Catastrophic DNA Degeneration Causes genetic damage and scrambles the patient's genes. -
                    4 Limb Paralysis Temporary loss of use in the patient's individual arms and legs. -
                    4 Organ Shutdown Slowly causes internal organ damage at random. -
                    4 Hyperaccelerated Aging Ages the patient, causing external damage. -
                    4 Brittle Bones Causes bones to break more easily. -
                    4 Organic Ignition Slowly causes the patient to burst into flames. -
                    -
                    - - - "} +/*********************MANUALS (BOOKS)***********************/ + +/obj/item/weapon/book/manual + icon = 'icons/obj/library.dmi' + due_date = 0 // Game time in 1/10th seconds + unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified + + +/obj/item/weapon/book/manual/engineering_construction + name = "Station Repairs and Construction" + icon_state ="bookEngineering" + item_state = "book3" + author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Station Repairs and Construction" + +/obj/item/weapon/book/manual/engineering_construction/New() + ..() + dat = {" + + + + + + + + + + + "} + +/obj/item/weapon/book/manual/engineering_particle_accelerator + name = "Particle Accelerator User's Guide" + icon_state ="bookParticleAccelerator" + item_state = "book15" + author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Particle Accelerator User's Guide" + +/obj/item/weapon/book/manual/engineering_particle_accelerator/New() + ..() + dat = {" + + + + + +

                    Experienced User's Guide

                    + +

                    Setting up the accelerator

                    + +
                      +
                    1. Wrench all pieces to the floor
                    2. +
                    3. Add wires to all the pieces
                    4. +
                    5. Close all the panels with your screwdriver
                    6. +
                    + +

                    Using the accelerator

                    + +
                      +
                    1. Open the control panel
                    2. +
                    3. Set the speed to 2
                    4. +
                    5. Start firing at the singularity generator
                    6. +
                    7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
                    8. +
                    9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
                    10. +
                    + + + + "} + + +/obj/item/weapon/book/manual/supermatter_engine + name = "Supermatter Engine Operating Manual" + icon_state = "bookSupermatter" + item_state = "book15" + author = "Central Engineering Division" + title = "Supermatter Engine Operating Manual" + +/obj/item/weapon/book/manual/supermatter_engine/New() + ..() //CHOMPEdit Start - Updated Supermatter Engine Manual + dat = {" + + + + +

                    OPERATING MANUAL FOR MK 1 PROTOTYPE THERMOELECTRIC SUPERMATTER ENGINE 'TOMBOLA'

                    +
                    +

                    OPERATING PRINCIPLES

                    +
                    +
                  • The supermatter crystal serves as the fundamental power source of the engine. Upon being charged, it begins to emit large amounts of heat and radiation, as well and oxygen and phoron gas. As oxygen accelerates the reaction and reacts with phoron to start a fire, it must be filtered out. It's recommended to filter out all gases besides phoron for standard operation.
                  • +
                    +
                  • Gas in the reactor chamber housing the supermatter is circulated through the reactor loop, which passes through the filters and thermoelectric generators. The thermoelectric generators transfer heat from the reactor loop to the colder radiator loop, thereby generating power. Additional power is generated from internal turbines in the circulators.
                  • +
                    +
                  • Gas in the radiator loop is circulated through the radiator bank, located in space. This rapidly cools the air, preserving the temperature differential needed for power generation.
                  • +
                    +
                  • The MK 1 Prototype Thermoelectric Supermatter Engine is designed to operate at reactor temperatures of 3000K to 4000K and generate up to 1MW of power. Beyond 1MW, the thermoelectric generators will begin to lose power through electrical discharge, reducing efficiency, but additional power generation remains feasible.
                  • +
                    +
                  • The crystal structure of the supermatter will begin to liquefy if its temperature exceeds 5000K. This eventually results in a massive release of light, heat and radiation, disintegration of both the supermatter crystal and most of the surrounding area, and as as-of-yet poorly documented psychological effects on all animals within a 2km radius. Appropriate action should be taken to stabilize or eject the supermatter before such occurs.
                  • +
                    +

                    SUPERMATTER HANDLING

                    +
                  • Do not expose supermatter to oxygen.
                  • +
                  • Do not allow supermatter to contact any solid object apart from specially-designed supporting pallet.
                  • +
                  • Do not directly view supermatter without meson goggles.
                  • +
                  • While handles on pallet allow moving the supermatter via pulling, pushing should not be attempted.
                  • +
                  • Note that prosthetics do not protect against radiation or viewing the supermatter.
                  • +
                    +

                    STANDARD STARTUP PROCEDURE

                    +
                      +
                    1. Fill reactor loop and radiator loop with two (2) standard canisters (1871.75 moles, 20 celsius) of phoron gas each.
                    2. +
                    3. Fill the waste handling radiator loop with one (1) standard canister (1871.75 as well) of carbon dioxide gas.
                    4. +
                    5. You can confirm your canisters got enough gas in them by using your PDA's "Gas Scanner" feature, you must enable it and press your PDA against the canister.
                    6. +
                    7. Enable both the high power gas pumps near the thermo-electric generators and maximize the desired output.
                    8. +
                    9. Enable both the omni-filters and ensure they are set to filter phoron back into the system.
                    10. +
                    11. Enable the gas pump from the filters to waste handling and maximize the desired output.
                    12. +
                    13. Close the monitoring room blast doors and open the reactor blast doors,
                    14. +
                    15. Fire 12-16 pulses from emitter at supermatter crystal. The expected power output is around a megawatt. NOTE: It will take a few minutes to heat up.
                    16. +
                    17. You can confirm desired power levels by checking the computer in the minotoring room, "Supermatter Monitoring". You want 300 EPR, more is safe but no higher than 700
                    18. +
                    19. Close the reactor blast doors and keep the monitoring room blast doors closed to prevent radiation leaking.
                    20. +
                    +
                    +

                    OPERATION AND MAINTENANCE

                    +
                      +
                    1. Ensure that radiation protection and meson goggles are worn at all times while working in the engine room.
                    2. +
                    3. Ensure that reactor and radiator loops are undamaged and unobstructed.
                    4. +
                    5. Ensure that, in a standard setup, only phoron is being filtered back into the system. Do not allow exhaust pressure to exceed 4500 kPa.
                    6. +
                    7. Ensure that engine room Area Power Controller (APC) and engine Superconducting Magnetic Energy Storage unit (SMES) are properly charged.
                    8. +
                    9. Ensure that reactor temperature does not exceed 5000K. In event of reactor temperature exceeding 5000K, see EMERGENCY COOLING PROCEDURE.
                    10. +
                    11. In event of imminent and/or unavoidable delamination, see EJECTION PROCEDURE.
                    12. +
                    +
                    +

                    EMERGENCY COOLING PROCEDURE

                    +
                      +
                    1. Open Emergency Cooling Valve 1 and Emergency Cooling Valve 2.
                    2. +
                    3. When reactor temperature returns to safe operating levels, close Emergency Cooling Valve 1 and Emergency Cooling Valve 2.
                    4. +
                    5. Adding additional gas to the loops can have a positive effect in reducing reactor temperature.
                    6. +
                    7. If reactor temperature does not return to safe operating levels, see EJECTION PROCEDURE.
                    8. +
                    +
                    +

                    EJECTION PROCEDURE

                    +
                      +
                    1. Ensure the engine room has power. The blast doors and ejection platform are unresponsive without power.
                    2. +
                    3. Press Engine Ventilatory Control button to open engine core blast door to space. (In CE Office and next to the reactor shroud)
                    4. +
                    5. Press Emergency Core Eject button to eject supermatter crystal. (In CE Office, only) NOTE: Attempting crystal ejection while engine core vent is closed will result in ejection failure.
                    6. +
                    7. In event of ejection failure, good luck.
                    8. +
                    + + "} //CHOMPEdit End - Updated Supermatter Engine Manual + +// TESLA Engine + +/obj/item/weapon/book/manual/tesla_engine + name = "Tesla Operating Manual" + icon_state ="bookTesla" + item_state = "book15" + author = "Engineering Encyclopedia" + title = "Tesla Engine User's Guide" + dat = {" + + + + +

                    OPERATING MANUAL FOR MK 2 PROTOTYPE TESLA ENGINE 'EDISON'S BANE'

                    +
                    +

                    OPERATING PRINCIPLES

                    +

                    This big floaty ball of pure electricity can only be contained by the containment field. It periodically will discharge energy in the form of an electric shock which can be harvested for energy.

                    +

                    When you shoot the energy ball with the Particle Accelerator, it gains energy, and when enough energy is accumulated a mini-energy ball that orbits the big energy ball will be formed. This can happen as many times as you let it, each mini-ball will send off an extra shock when the energy ball pulses. Be warned, the more mini-balls the energy ball has, the more shocks it sends out at once and the further it can travel each move.

                    +

                    An energy ball will shoot bolts of electricity off at conductors, which it prioritizes in this order: +

                      +
                    1. Tesla coils
                    2. +
                    3. Grounding rods
                    4. +
                    5. People and animals
                    6. +
                    7. Machines
                    8. +
                    +

                    +

                    Tesla Coils will attract the energy ball's bolts. They will take half the power of the bolt (if they are connected to a wire node), pump it into the powernet it is hooked to, and then will send the other half of the power to the next available conductor, which follows the criteria listed above. Preferably, this will be another coil to harness more of the power and pump it into the grid.

                    +

                    Grounding Rods are safety precautions to prevent the tesla bolts from hitting machinery or personnel. If the tesla is loose, being near one will usually keep you safe from direct shocks.

                    +
                    +

                    STARTUP PROCEDURE

                    +
                      +
                    1. Bolt and weld down the Field Generators, ensuring they form a complete rectangle.
                    2. +
                    3. Bolt and weld down the Emitters, ensuring their fire will strike the corner Field Generators
                    4. +
                    5. Bolt down the Tesla Generator inside the rectangle formed by the Field Generators in a spot where it will be struck by fire from the Particle Accelerator
                    6. +
                    7. Bolt down Telsa Coils and Grounding Rods
                    8. +
                    9. Activate the Emitters
                    10. +
                    11. Activate each of the Field Generators, then wait until the containment field has completely formed.
                    12. +
                    13. Setup the Particle Accelerator (see our best seller "Particle Accelerator User's Guide"!) and activate it.
                    14. +
                    15. After a short time the Telsa Generator will create an energy ball, being consumed in the process.
                    16. +
                    +
                    +

                    OPERATION AND MAINTENANCE

                    +
                      +
                    1. Ensure that electrical protection and meson goggles are worn at all times while working in the engine room.
                    2. +
                    3. Ensure that Telsa Coils and/or Grounding Rods are placed to safely collect or ground any and all shock.
                    4. +
                    5. Ensure that all Emitters remain activated and have unobstructed lines of fire to the Field Generators.
                    6. +
                    7. Do not let the Emitters run out of power.
                    8. +
                    +
                    +

                    SHUTDOWN PROCEDURE

                    +
                      +
                    1. De-activate the Particle Accelerator. The energy ball will begin to shrink and lose mini-balls.
                    2. +
                    3. When the energy ball has completely dissipated, the Emitters can be de-activated.
                    4. +
                    +
                    +

                    ENERGY BALL ESCAPE PROCEDURE

                    +
                      +
                    1. Do not let it escape.
                    2. +
                    3. Have someone ready to blame when it does escape.
                    4. +
                    5. Buy our forthcoming manual "Celebrity Grounding Rod Shelters of the Galaxy"
                    6. +
                    + + "} + +//R-UST port +/obj/item/weapon/book/manual/rust_engine // CHOMPedit START : Updating the R-UST manual + name = "R-UST Operating Manual" + icon = 'icons/obj/library_ch.dmi' + icon_state = "bookRusty" // Chompedit : Changed this to a new unique R-UST manual icon rather than just re-using the Supermatter book cover sprite + item_state = "book15" + author = "Central Engineering Division" + title = "R-UST Operating Manual" + +//R-UST guide Re-Writen by Gozulio to reflect how the R-UST actually operates. (CHOMPedit, re-written again :3 By Foxglove) +/obj/item/weapon/book/manual/rust_engine/New() + ..() + dat = {" + + + + +

                    OPERATING MANUAL FOR R-UST MK 8 FUSION CORE 'TOKAMAK'

                    +
                    +

                    OPERATING PRINCIPLES

                    +
                    +
                  • The Tokamak is a system built that generates power off of two systems. The fusion core, AKA, the MK 8 R-UST. And the TEGs located north of the reactor shroud.
                  • +
                    +
                  • Using a projected field within the shroud, fuel and reactors can be kept stable and produce heat and radiation relatively safely in a controlled environment.
                  • +
                    +
                  • Using a gyrotron as a sort of catalyst, fuel can be ignited in carefully calculated methods, this reaction takes place in the aforementioned projected field.
                  • +
                    +
                  • While ensuring radiation is kept within the reactor chamber, and the reactor shroud, heat is allowed to be pumped and cycled to power a TEG north of the shroud, as well as a cycling coolant pipe using the temperatures of the space, or in your case, Sif's atmospheric temperatures.
                  • +
                    +
                  • Using the TEG to produce a small amount of energy, the R-UST can be initiated, causing a reaction that can create energy to then allow the TEG to create more energy, as well as have the R-UST produce energy on its own. These two methods together ensure the SMES and outpost both remained powered.
                  • +
                    +

                    REACTOR HANDLING

                    +
                  • Ensure you are wearing all required protective equipment when within the reactor chamber at all times. It is advised to also wear this suit in the engine control room. The minimum requires is a full radiation suit equipped with a sealed hood. Mesons are not required to be worn.
                  • +
                  • When the R-UST is not powered, both the engine control room and the shroud may be opened. When the R-UST is powered, is it safe to leave the shroud open only if the engine control room is sealed.
                  • +
                  • Wearing insulated gloves over your radiation suit is also considered good practice, however it is not required to be worn.
                  • +
                  • In order to start the R-UST and TEG system, you must be equipped with at minimum a wrench, basic knowledge of piping, the ability to follow instructions, and preferably, the ability to read or be read this guide by someone else.
                  • +
                  • The reactor may in rare instances require a secondary power source to start it, if this is the case, see ADDITIONAL INFORMATION 1. below.
                  • +
                    +

                    TEG STANDARD STARTUP PROCEDURE

                    +
                      +
                    1. North of the shroud lays the TEG. You will need to go there. The standard piping has a green cold loop set of pipes and a yellow hot loop set of pipes. Remember that the reactor heats up the gas that is cycling through the hot loop, so it must be able to be cycle into and out of the reactor chamber freely, there is a cyan pipe that is directly connected to the reactor's core room to allow this to happen.
                    2. +
                    3. The green cold loop is first as it takes longer to fill. First power and max the main cool-loop valve, this is located at the very north-west corner of the room. Remember that the red mark on a valve refers to which direction the valve allows gas to flow. Now power and max the north most valve that connects the cold-loop to the intake, and wrench a phoron canister to the intake. If you would like, skip to step four and return to step three after completing it.
                    4. +
                    5. Once the phoron canister is empty, unwrench it and replace it with a second canister and wrench it down in the original canister's place. The cold-loop requires two canisters of phoron gas to remain stable and safe. Once the cold-loop is set up, you may power down the intake pipe, located adjacent south-west of the intake connector port.
                    6. +
                    7. Next you will look to the hot-loop, due to contamination this loop has two ports for canisters. The left port is the intake. The right port is the outlet. For the purposes of simplicity, ignore the right outlet port and valve Wrench a CO2 canister to the intake port and open and max the intake valve.
                    8. +
                    9. Once the CO2 canister is empty, unwrench it and replace it with a second canister and wrench it down in the original canister's place. The hot-loop requires two canisters of CO2 to remain stable and safe. Once the hot-loop is set up, you may power down the intake pipe, located directly south of the intake connector port.
                    10. +
                    11. While not required there is an omni-filter you can set-up and power on just north of the reactor shroud. It can be used to filter gas out of reactor, it is not required, however, and can be safely ignored for standard basic set-up of TEG and R-UST alike.
                    12. +
                    +
                    +

                    R-UST STANDARD STARTUP PROCEDURE

                    +

                    The Engine Control Room and what to know.

                    +
                  • Gyrotron Controller This is the terminal located on the far west and controls the gyrotron. This device can be viewed as the catalyst that causes the reaction within the core and must remain turned on only during use.
                  • +
                  • Fuel Injector Control This is the terminal adjacent to the gyrotron controller, it controls the injectors that pump fuel into the reactor core chamber and must remained turned on only when in use and with the projection field powered and active.
                  • +
                  • R-UST Core Monitoring This is the terminal in the middle of the room. It gives you information about the status of the reactor, the core chamber, and the reaction going on within the R-UST.
                  • +
                  • Engine Cooling Control This is the terminal directly in front of you when you walk into the engine control room. This terminal controls the cooling pumps and systems within the R-UST core.
                  • +
                  • Shroud Controls There are two buttons that control and cycle the monitoring room shroud and the reactor core shroud. These are located on the sides of the monitoring room. The reactor shroud should be left open during setup. And the monitoring room shroud should be left shut after setup is complete.
                  • +
                  • Deuterium The standard set-up for your R-UST reaction is Deuterium-Dueterium. Go to the fuel storage chamber east of the reactor shroud and ensure you have two rods on hand for set-up. You may safely grab two of these rods now and insert them into the two southern fuel injectors. If you do, skip the first step below.
                  • +
                    +
                      +
                    1. Collect two (2) deuterium fuel rods from the fuel storage chamber and socket them into any two fuel injectors. It is adviced to use the two southern injectors to allow for easier visual checks from the engine control room.
                    2. +
                    3. Assuming the room and controls are powered open both the reactor shroud and the control room shroud. If the room is not powered (which you can check by looking at the R-UST Core Monitor and seeing if the buttons are greyed out or not, if they are grey it does not have enough power). If it is unpowered or otherwise does not have sufficient power see ADDITIONAL INFORMATION 1. below.
                    4. +
                    5. Now, please ensure everyone in the engine control room is wearing full radiation protection gear, ensure the control room door will not be opened during set-up to prevent radiation leakage.
                    6. +
                    7. Using the R-UST Core Monitor, set Field Strength to fifty-one (51). This is the minimum required to catch all injected fuel, anything lower will not be strong enough to be safe, too much higher and it could cause instability that will result in an EMP of your equipment. If you read slowly, read the next steps before turning this online, as the field requires a lot of upkeep power. Once you have done so or are ready to move on, turn on the field and continue.
                    8. +
                    9. Using the Fuel Injector, turn on the two (2) injectors that have deuterium in them. Understand that this alone will not cause a reaction, but using other fuel reagents, such as a tritium, the reactions would begin after this step.
                    10. +
                    11. Finally, using the gyrotron controller, step the fire delay to three (3) and the strength to one (1). Turn it on and close the engine control room shroud before leaving to reduce risks of radiation leakage.
                    12. +
                    +
                    +

                    OPERATION AND MAINTENANCE

                    +
                  • Past this point you do not need to actively maintain the field. So long as the injectors and shield projectors are powered, the system is self-sustaining, even using the excess heat to power the TEG system north of the reactor shroud.
                  • +
                  • From here-on, understand that the room is now flooded with radiation, you will need to wear a full radiation-suit when going into either the engine control room, or the reactor chamber or core.
                  • +
                  • You will notice a jump in temperature. The pattern should be easy to spot, as the R-UST heats up slowly until a reaction happens. When that reaction happens, that is when you will notice the spike. Ensuring the room is constantly flooded with cycling a CO2 coolant to ensure safe temperatures.
                  • +
                  • The majority of power created by this standard set-up is from the TEG, and not the actual R-UST itself. This means the R-UST can be left with lower reactives inside of it, while still ensuring the outpost is powered. Knowing this, you can also safely leave the outpost and acknowledge that periodic temperature checks are recommended.
                  • + +
                    +

                    ADDITIONAL INFORMATION

                    +
                      +
                    1. To the east of the shroud there are three doors, the north room is the equipment storage room, the central room is the fuel storage room, and south is the SMES room. Ensure you check that both SMES are turned on before reading further... if the SMES are fully unpowered, go to the north door and find the standard PACMAN and phoron prepared for you in the storage room. You insulted gloves, wire coils, and the aforementioned PACMAN/phoron for this. Once you are prepared, bring the PACMAN to the SMES room. That is the south room, wire it up to the TEG lines and power the PACMAN with phoron.

                    2. +
                    3. Due to the TEG generating such a high amount of power, you can safely go into the SMES chamber and max out the INPUT and OUTPUT to both SMES units. One will ensure that even in the rare event of a TEG shutdown, the R-UST will have enough power to allow engineers to set up different reactions to ensure the outpost stays powered. The other SMES will ensure the outpost has some spare power until the TEG is repaired, or otherwise replaced.

                    4. +
                    + + "} // CHOMPedit END : Updating the R-UST manual + +/obj/item/weapon/book/manual/engineering_hacking + name = "Hacking" + icon_state ="bookHacking" + item_state = "book2" + author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Hacking" + +/obj/item/weapon/book/manual/engineering_hacking/New() + ..() + dat = {" + + + + + + + + + + + "} + + +/obj/item/weapon/book/manual/engineering_singularity_safety + name = "Singularity Safety in Special Circumstances" + icon_state ="bookEngineeringSingularitySafety" + item_state = "book15" + author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Singularity Safety in Special Circumstances" + + dat = {" + + + + +

                    Singularity Safety in Special Circumstances

                    + +

                    Power outage

                    + + A power problem has made the entire station lose power? Could be station-wide wiring problems or illegal power sinks. In any case follow these steps: + +
                      +
                    1. PANIC!
                    2. +
                    3. Get your ass over to engineering! QUICKLY!!!
                    4. +
                    5. Get to the Area Power Controller which controls the power to the emitters.
                    6. +
                    7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
                    8. +
                    9. Open the console and disengage the cover lock.
                    10. +
                    11. Pry open the APC with a Crowbar.
                    12. +
                    13. Take out the empty power cell.
                    14. +
                    15. Put in the new, full power cell - if you don't have one, continue with step 15.
                    16. +
                    17. Quickly put on a Radiation suit.
                    18. +
                    19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
                    20. +
                    21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
                    22. +
                    23. Grab your crowbar and pry away the tile closest to the APC.
                    24. +
                    25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
                    26. +
                    27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
                    28. +
                    29. GET THE FUCK OUT OF THERE!!!
                    30. +
                    + +

                    Shields get damaged

                    + +
                      +
                    1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
                    2. +
                    + + + "} + + +/obj/item/weapon/book/manual/hydroponics_pod_people + name = "The Diona Harvest - From Seed to Market" + icon_state ="bookHydroponicsPodPeople" + item_state = "book5" + author = "Farmer John" + title = "The Diona Harvest - From Seed to Market" + + dat = {" + + + + +

                    Growing a Diona

                    + + Growing a Diona is easy! +

                    +

                      +
                    1. Take a syringe of blood from the body you wish to turn into a Diona.
                    2. +
                    3. Inject 5 units of blood into the pack of dionaea-replicant seeds.
                    4. +
                    5. Plant the seeds.
                    6. +
                    7. Tend to the plants water and nutrition levels until it is time to harvest the Diona.
                    8. +
                    +

                    + Note that for a successful harvest, the body from which the blood was taken from must be dead BEFORE harvesting the pod, however the pod can be growing while they are still alive. Otherwise, the soul would not be able to migrate to the new Diona body.

                    + + It really is that easy! Good luck! + + + + "} + + +/obj/item/weapon/book/manual/medical_cloning + name = "Cloning Techniques of the 26th Century" + icon_state ="bookCloning" + item_state = "book9" + author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Cloning Techniques of the 26th Century" + + dat = {" + + + + + +

                    How to Clone People

                    + So there are 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven't the foggiest idea of what to do? Not to worry! + This guide is intended to teach you how to clone people and how to do it right, in a simple, step-by-step process! If at any point of the guide you have a mental meltdown, + genetics probably isn't for you and you should get a job-change as soon as possible before you're sued for malpractice. + +
                      +
                    1. Acquire body
                    2. +
                    3. Strip body
                    4. +
                    5. Put body in cloning machine
                    6. +
                    7. Scan body
                    8. +
                    9. Clone body
                    10. +
                    11. Get clean Structural Enzymes for the body
                    12. +
                    13. Put body in morgue
                    14. +
                    15. Await cloned body
                    16. +
                    17. Cryo and use the clean SE injector
                    18. +
                    19. Give person clothes back
                    20. +
                    21. Send person on their way
                    22. +
                    + +

                    Step 1: Acquire body

                    + This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. + +

                    Step 2: Strip body

                    + The cloning machine does not like abiotic items. What this means is you can't clone anyone if they're wearing clothes or holding things, so take all of it off. If it's just one person, it's courteous to put their possessions in the closet. + If you have about seven people awaiting cloning, just leave the piles where they are, but don't mix them around and for God's sake don't let people in to steal them. + +

                    Step 3: Put body in cloning machine

                    + Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. + +

                    Step 4: Scan body

                    + Go onto the computer and scan the body by pressing 'Scan - <Subject Name Here>.' If you're successful, they will be added to the records (note that this can be done at any time, even with living people, + so that they can be cloned without a body in the event that they are lying dead on port solars and didn't turn on their suit sensors)! + If not, and it says "Error: Mental interface failure.", then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, + click 'Refresh' and try scanning them again. If there's no success, threaten them with gibbing. + Still no success? Skip over to Step 7 and don't continue after it, as you have an unresponsive body and it cannot be cloned. + If you got "Error: Unable to locate valid genetic data.", you are trying to clone a monkey - start over. + +

                    Step 5: Clone body

                    + Now that the body has a record, click 'View Records,' click the subject's name, and then click 'Clone' to start the cloning process. Congratulations! You're halfway there. + Remember not to 'Eject' the cloning pod as this will kill the developing clone and you'll have to start the process again. + +

                    Step 6: Get clean SEs for body

                    + Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! + For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they're done. If you're a competent Geneticist, you will already have one ready on your working computer. + If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. + Go into View/Edit/Transfer Buffer, find an open slot and click "SE" to save it. Then click 'Injector' to get the SEs in syringe form. Put this in your pocket or something for when the body is done. + +

                    Step 7: Put body in morgue

                    + Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. + To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed "CHEF MEAT" in order to avoid confusion. + +

                    Step 8: Await cloned body

                    + Now go back to the lab and wait for your patient to be cloned. It won't be long now, I promise. + +

                    Step 9: Cryo and clean SE injector on person

                    + Has your body been cloned yet? Great! As soon as the guy pops out, grab them and stick them in cryo. Clonexadone and Cryoxadone help rebuild their genetic material. Then grab your clean SE injector and jab it in them. Once you've injected them, + they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. + +

                    Step 10: Give person clothes back

                    + Obviously the person will be naked after they have been cloned. Provided you weren't an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. + No matter how cruel you are, it's simply against protocol to force your patients to walk outside naked. + +

                    Step 11: Send person on their way

                    + Give the patient one last check-over - make sure they don't still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. + Once you're done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. + +

                    If you've gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. + + + + "} + + +/obj/item/weapon/book/manual/ripley_build_and_repair + name = "APLU \"Ripley\" Construction and Operation Manual" + icon_state ="book" + item_state = "book" + author = "Randall Varn, Einstein Engines Senior Mechanic" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "APLU \"Ripley\" Construction and Operation Manual" + + dat = {" + + + + +

                    +
                    + Weyland-Yutani - Building Better Worlds +

                    Autonomous Power Loader Unit \"Ripley\"

                    +
                    +

                    Specifications:

                    +
                      +
                    • Class: Autonomous Power Loader
                    • +
                    • Scope: Logistics and Construction
                    • +
                    • Weight: 820kg (without operator and with empty cargo compartment)
                    • +
                    • Height: 2.5m
                    • +
                    • Width: 1.8m
                    • +
                    • Top speed: 5km/hour
                    • +
                    • Operation in vacuum/hostile environment: Possible +
                    • Airtank volume: 500 liters
                    • +
                    • Devices: +
                        +
                      • Hydraulic clamp
                      • +
                      • High-speed drill
                      • +
                      +
                    • +
                    • Propulsion device: Powercell-powered electro-hydraulic system
                    • +
                    • Powercell capacity: Varies
                    • +
                    + +

                    Construction:

                    +
                      +
                    1. Connect all exosuit parts to the chassis frame.
                    2. +
                    3. Connect all hydraulic fittings and tighten them up with a wrench.
                    4. +
                    5. Adjust the servohydraulics with a screwdriver.
                    6. +
                    7. Wire the chassis (Cable is not included).
                    8. +
                    9. Use the wirecutters to remove the excess cable if needed.
                    10. +
                    11. Install the central control module (Not included. Use supplied datadisk to create one).
                    12. +
                    13. Secure the mainboard with a screwdriver.
                    14. +
                    15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
                    16. +
                    17. Secure the peripherals control module with a screwdriver.
                    18. +
                    19. Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).
                    20. +
                    21. Secure the internal armor plating with a wrench.
                    22. +
                    23. Weld the internal armor plating to the chassis.
                    24. +
                    25. Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).
                    26. +
                    27. Secure the external reinforced armor plating with a wrench.
                    28. +
                    29. Weld the external reinforced armor plating to the chassis.
                    30. +
                    + +

                    Additional Information:

                    +
                      +
                    • The firefighting variation is made in a similar fashion.
                    • +
                    • A firesuit must be connected to the firefighter chassis for heat shielding.
                    • +
                    • Internal armor is plasteel for additional strength.
                    • +
                    • External armor must be installed in 2 parts, totalling 10 sheets.
                    • +
                    • Completed mech is more resilient against fire, and is a bit more durable overall.
                    • +
                    • The Company is determined to ensure the safety of its investments employees.
                    • +
                    + + + "} + + +/obj/item/weapon/book/manual/research_and_development + name = "Research and Development 101" + icon_state = "rdbook" + item_state = "book7" + author = "Dr. L. Ight" + title = "Research and Development 101" + + dat = {" + + + + + +

                    Science For Dummies

                    + So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: +
                      +
                    1. Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
                    2. +
                    3. Build unlocked designs in the Protolathe and Circuit Imprinter.
                    4. +
                    5. Repeat!
                    6. +
                    + + Those are the basic steps to furthering science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. + +

                    The R&D Console

                    + The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controlled. More on those systems in their own sections. + On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, + because if it gets damaged, you'll lose your data! + In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. + It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, + upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.

                    + + NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. + +

                    Destructive Analyzer

                    + This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, + you can destroy the object to further those sciences. + Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather than further science. + If their reliability is high enough, it'll also advance their related technologies. + +

                    Circuit Imprinter

                    + This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. + +

                    Protolathe

                    + This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid phoron, silver, gold, and diamonds along with a variety of chemicals to produce devices. + The downside is that, again, not all devices you make are 100% reliable when you first discover them. + +

                    Reliability and You

                    + As it has been stated, many devices, when they're first discovered, do not have a 100% reliability. Instead, + the reliability of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, + and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. + Once the device reaches a certain minimum reliability, you'll gain technological advancements from it. + +

                    Building a Better Machine

                    + Many machines produced from circuit boards inserted into a machine frames require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. + If you use these parts when constructing something, its attributes may be improved. + For example, if you use an advanced matter bin when constructing an autolathe (rather than a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: + Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. + + + "} + +/obj/item/weapon/book/manual/robotics_manual + name = "Guide to Robotics" + icon_state ="evabook" + item_state = "book3" + author = "Simple Robotics" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Guide to Robotics" + +/obj/item/weapon/book/manual/robotics_manual/New() + ..() + dat = {" + + + + + + + "} + +/obj/item/weapon/book/manual/robotics_cyborgs + name = "Cyborgs for Dummies" + icon_state = "borgbook" + item_state = "book1" + author = "XISC" + title = "Cyborgs for Dummies" + + dat = {" + + + + + +

                    Cyborgs for Dummies

                    + +

                    Chapters

                    + +
                      +
                    1. Cyborg Related Equipment
                    2. +
                    3. Cyborg Modules
                    4. +
                    5. Cyborg Construction
                    6. +
                    7. Cyborg Maintenance
                    8. +
                    9. Cyborg Repairs
                    10. +
                    11. In Case of Emergency
                    12. +
                    + + +

                    Cyborg Related Equipment

                    + +

                    Exosuit Fabricator

                    + The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. + +

                    Cyborg Recharging Station

                    + This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. + +

                    Robotics Control Console

                    + This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again. + + +

                    Cyborg Modules

                    + When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules. + +

                    Standard Cyborg

                    + The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
                    A Standard Cyborg comes with: +
                      +
                    • Crowbar
                    • +
                    • Stun Baton
                    • +
                    • Health Analyzer
                    • +
                    • Fire Extinguisher
                    • +
                    + +

                    Engineering Cyborg

                    + The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
                    An Engineering Cyborg comes with: +
                      +
                    • A basic set of engineering tools
                    • +
                    • Metal Synthesizer
                    • +
                    • Reinforced Glass Synthesizer
                    • +
                    • An RCD
                    • +
                    • Wire Synthesizer
                    • +
                    • Fire Extinguisher
                    • +
                    • Built-in Optical Meson Scanners
                    • +
                    + +

                    Mining Cyborg

                    + The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines.
                    A Mining Cyborg comes with: +
                      +
                    • Jackhammer
                    • +
                    • Shovel
                    • +
                    • Mining Satchel
                    • +
                    • Built-in Optical Meson Scanners
                    • +
                    + +

                    Security Cyborg

                    + The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals without harming them a bit.
                    A Security Cyborg comes with: +
                      +
                    • Stun Baton
                    • +
                    • Handcuffs
                    • +
                    • Taser
                    • +
                    + +

                    Janitor Cyborg

                    + The Janitor Cyborg module is equipped with various cleaning-facilitating devices.
                    A Janitor Cyborg comes with: +
                      +
                    • Mop
                    • +
                    • Hand Bucket
                    • +
                    • Cleaning Spray Synthesizer and Spray Nozzle
                    • +
                    + +

                    Service Cyborg

                    + The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros."
                    A Service Cyborg comes with: +
                      +
                    • Shaker
                    • +
                    • Industrial Dropper
                    • +
                    • Platter
                    • +
                    • Beer Synthesizer
                    • +
                    • Zippo Lighter
                    • +
                    • Rapid-Service-Fabricator (Produces various entertainment and refreshment objects)
                    • +
                    • Pen
                    • +
                    + +

                    Cyborg Construction

                    + Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
                    The required materials to make a cyborg are: +
                      +
                    • Metal
                    • +
                    • Two Flashes
                    • +
                    • One Power Cell (Preferably rated to 15000w)
                    • +
                    • Some electrical wires
                    • +
                    • One Human Brain
                    • +
                    • One Man-Machine Interface
                    • +
                    + Once you have acquired the materials, you can start on construction of your cyborg.
                    To construct a cyborg, follow the steps below: +
                      +
                    1. Start the Exosuit Fabricators constructing all of the cyborg parts
                    2. +
                    3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
                    4. +
                    5. Once you have a Robot Head, place your two flashes inside the eye sockets
                    6. +
                    7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
                    8. +
                    9. Attach all of the Robot parts to the Robot frame
                    10. +
                    11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
                    12. +
                    13. Congratulations! You have a new cyborg!
                    14. +
                    + +

                    Cyborg Maintenance

                    + Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. + +

                    Replacing a Power Cell

                    + Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
                    The steps to replace a cell are as follows: +
                      +
                    1. Unlock the Cyborg's Interface by swiping your ID on it
                    2. +
                    3. Open the Cyborg's outer panel using a crowbar
                    4. +
                    5. Remove the old power cell
                    6. +
                    7. Insert the new power cell
                    8. +
                    9. Close the Cyborg's outer panel using a crowbar
                    10. +
                    11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
                    12. +
                    + +

                    Exposing the Internal Wiring

                    + Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
                    You can easily expose the internal wiring by following the steps below: +
                      +
                    1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
                    2. +
                    3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
                    4. +
                    + To re-seal the cyborg's internal wiring: +
                      +
                    1. Use a screwdriver to secure the cyborg's internal panel
                    2. +
                    3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
                    4. +
                    + +

                    Cyborg Repairs

                    + Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). + +

                    Dents

                    + If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. + Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. + +

                    Excessive Heat Damage

                    + If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
                    To replace the internal wiring follow the steps below: +
                      +
                    1. Unlock the Cyborg's Interface by swiping your ID
                    2. +
                    3. Open the Cyborg's External Panel using a crowbar
                    4. +
                    5. Remove the Cyborg's Power Cell
                    6. +
                    7. Using a screwdriver, expose the internal wiring of the Cyborg
                    8. +
                    9. Replace the damaged wires inside the cyborg
                    10. +
                    11. Secure the internal wiring cover using a screwdriver
                    12. +
                    13. Insert the Cyborg's Power Cell
                    14. +
                    15. Close the Cyborg's External Panel using a crowbar
                    16. +
                    17. Lock the Cyborg's Interface by swiping your ID
                    18. +
                    + These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. + +

                    In Case of Emergency

                    + In case of emergency, there are a few steps you can take. + +

                    "Rogue" Cyborgs

                    + If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. + To repair the situation, follow these steps: +
                      +
                    1. Locate the nearest robotics console
                    2. +
                    3. Determine which cyborgs are "Rogue"
                    4. +
                    5. Press the lockdown button to immobilize the cyborg
                    6. +
                    7. Locate the cyborg
                    8. +
                    9. Expose the cyborg's internal wiring
                    10. +
                    11. Check to make sure the LawSync and AI Sync lights are lit
                    12. +
                    13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
                    14. +
                    15. Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.
                    16. +
                    17. Use a "Reset" upload moduleto reset the cyborg's laws
                    18. +
                    19. Proceed to a Robotics Control console
                    20. +
                    21. Remove the lockdown on the cyborg
                    22. +
                    + +

                    As a last resort

                    + If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. +

                    WARNING:

                    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason. + + + + "} + + +/obj/item/weapon/book/manual/security_space_law + name = "Corporate Regulations" + desc = "A set of corporate guidelines for keeping law and order on privately-owned space stations." + icon_state = "bookSpaceLaw" + item_state = "book13" + author = "The Company" + title = "Corporate Regulations" + +/obj/item/weapon/book/manual/security_space_law/New() + ..() + dat = {" + + + + + + + + + + + "} + + + +/obj/item/weapon/book/manual/medical_diagnostics_manual + name = "Medical Diagnostics Manual" + desc = "First, do no harm. A detailed medical practitioner's guide." + icon_state = "bookMedical" + item_state = "book12" + author = "Medical Department" + title = "Medical Diagnostics Manual" + +/obj/item/weapon/book/manual/medical_diagnostics_manual/New() + ..() + dat = {" + + + + +
                    +

                    The Oath

                    + + The Medical Oath sworn by recognised medical practitioners in the employ of [using_map.company_name]
                    + +
                      +
                    1. Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.
                    2. +
                    3. I recognise that the practice of medicine is a privilege with which comes considerable responsibility and I will not abuse my position.
                    4. +
                    5. I will practise medicine with integrity, humility, honesty, and compassion-working with my fellow doctors and other colleagues to meet the needs of my patients.
                    6. +
                    7. I shall never intentionally do or administer anything to the overall harm of my patients.
                    8. +
                    9. I will not permit considerations of gender, race, religion, political affiliation, sexual orientation, nationality, or social standing to influence my duty of care.
                    10. +
                    11. I will oppose policies in breach of human rights and will not participate in them. I will strive to change laws that are contrary to my profession's ethics and will work towards a fairer distribution of health resources.
                    12. +
                    13. I will assist my patients to make informed decisions that coincide with their own values and beliefs and will uphold patient confidentiality.
                    14. +
                    15. I will recognise the limits of my knowledge and seek to maintain and increase my understanding and skills throughout my professional life. I will acknowledge and try to remedy my own mistakes and honestly assess and respond to those of others.
                    16. +
                    17. I will seek to promote the advancement of medical knowledge through teaching and research.
                    18. +
                    19. I make this declaration solemnly, freely, and upon my honour.
                    20. +

                    + +
                    + + + + + + "} + + +/obj/item/weapon/book/manual/engineering_guide + name = "Engineering Textbook" + icon_state ="bookEngineering2" + item_state = "book3" + author = "Engineering Encyclopedia" + title = "Engineering Textbook" + +/obj/item/weapon/book/manual/engineering_guide/New() + ..() + dat = {" + + + + + + + + + + "} + + +/obj/item/weapon/book/manual/chef_recipes + name = "Chef Recipes" + icon_state = "cooked_book" + item_state = "book16" + author = "Victoria Ponsonby" + title = "Chef Recipes" + + dat = {" + + + + + +

                    Food for Dummies

                    + Here is a guide on basic food recipes and also how to not poison your customers accidentally. + +

                    ((OOC link for updated working recipes here))

                    + vore-station.net/infodump/recipes_food.html + +

                    Basics:

                    + Knead an egg and some flour to make dough. Bake that to make a bun or flatten and cut it. + +

                    Burger:

                    + Put a bun and some meat into the microwave and turn it on. Then wait. + +

                    Bread:

                    + Put some dough and an egg into the microwave and then wait. + +

                    Waffles:

                    + Add two lumps of dough and 10 units of sugar to the microwave and then wait. + +

                    Popcorn:

                    + Add 1 corn to the microwave and wait. + +

                    Meat Steak:

                    + Put a slice of meat, 1 unit of salt, and 1 unit of pepper into the microwave and wait. + +

                    Meat Pie:

                    + Put a flattened piece of dough and some meat into the microwave and wait. + +

                    Boiled Spaghetti:

                    + Put the spaghetti (processed flour) and 5 units of water into the microwave and wait. + +

                    Donuts:

                    + Add some dough and 5 units of sugar to the microwave and wait. + +

                    Fries:

                    + Add one potato to the processor, then bake them in the microwave. + + + + + "} + + +/obj/item/weapon/book/manual/barman_recipes + name = "Barman Recipes" + desc = "For the enterprising drink server." + icon_state = "barbook" + item_state = "book14" + author = "Sir John Rose" + title = "Barman Recipes" + + dat = {" + + + + + +

                    Drinks for Dummies

                    + Here's a guide for some basic drinks. + +

                    Black Russian:

                    + Mix vodka and Kahlua into a glass. + +

                    Cafe Latte:

                    + Mix milk and coffee into a glass. + +

                    Classic Martini:

                    + Mix vermouth and gin into a glass. + +

                    Gin Tonic:

                    + Mix gin and tonic into a glass. + +

                    Grog:

                    + Mix rum and water into a glass. + +

                    Irish Cream:

                    + Mix cream and whiskey into a glass. + +

                    The Manly Dorf:

                    + Mix ale and beer into a glass. + +

                    Mead:

                    + Mix enzyme, water, and sugar into a glass. + +

                    Screwdriver:

                    + Mix vodka and orange juice into a glass. + + + + "} + + +/obj/item/weapon/book/manual/detective + name = "The Film Noir: Proper Procedures for Investigations" + icon_state ="bookDetective" + item_state = "book8" + author = "The Company" + title = "The Film Noir: Proper Procedures for Investigations" + + dat = {" + + + + +

                    Detective Work

                    + + Between your bouts of self-narration and drinking whiskey on the rocks, you might get a case or two to solve.
                    + To have the best chance to solve your case, follow these directions: +

                    +

                      +
                    1. Go to the crime scene.
                    2. +
                    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog).
                    4. +
                    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
                    6. +
                    7. Return to your office.
                    8. +
                    9. Using your forensic scanning computer, scan your scanner to upload all of your evidence into the database.
                    10. +
                    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
                    12. +
                    13. If you have 80% or more of the print (The print is displayed), go to step 10, otherwise continue to step 8.
                    14. +
                    15. Look for clues from the suit fibres you found on your perpetrator, and go about looking for more evidence with this new information, scanning as you go.
                    16. +
                    17. Try to get a fingerprint card of your perpetrator, as if used in the computer, the prints will be completed on their dossier.
                    18. +
                    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
                    20. +
                    21. Since you now have both your dossier and the name of the person, print both out as evidence and get security to nab your baddie.
                    22. +
                    23. Give yourself a pat on the back and a bottle of the ship's finest vodka, you did it!
                    24. +
                    +

                    + It really is that easy! Good luck! + + + "} + +/obj/item/weapon/book/manual/nuclear + name = "Fission Mailed: Nuclear Sabotage 101" + icon_state ="bookNuclear" + item_state = "book8" + author = "Stealth Assault Enterprises" + title = "Fission Mailed: Nuclear Sabotage 101" + + dat = {" + + + + +

                    Nuclear Explosives 101

                    + Hello and thank you for choosing Stealth Assault Enterprises for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.

                    + + First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.
                    + +

                    To make the nuclear device functional

                    +
                      +
                    • Place the nuclear device in the designated detonation zone.
                    • +
                    • Extend and anchor the nuclear device from its interface.
                    • +
                    • Insert the nuclear authorisation disk into the slot.
                    • +
                    • Type the numeric authorisation code into the keypad. This should have been provided.
                      + Note: If you make a mistake, press R to reset the device. +
                    • Press the E button to log on to the device.
                    • +

                    + + You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.

                    + Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.
                    + Note: You wouldn't believe how many SAARE Operatives with doctorates have forgotten this step.

                    + + So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
                    + Note: THE BOMB IS STILL SET AND WILL DETONATE

                    + + Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.

                    + + Remember the order:
                    + Disk, Code, Safety, Timer, Disk, RUN!

                    + Intelligence Analysts believe that normal corporate procedure is for the Site Manager to secure the nuclear authentication disk.

                    + + Good luck! + + + "} + +/obj/item/weapon/book/manual/atmospipes + name = "Pipes and You: Getting To Know Your Scary Tools" + icon_state = "pipingbook" + item_state = "book3" + author = "Maria Crash, Senior Atmospherics Technician" + title = "Pipes and You: Getting To Know Your Scary Tools" + dat = {" + + + + + +

                    Contents

                    +
                      +
                    1. Author's Foreword
                    2. +
                    3. Basic Piping
                    4. +
                    5. Insulated Pipes
                    6. +
                    7. Atmospherics Devices
                    8. +
                    9. Heat Exchange Systems
                    10. +
                    11. Final Checks
                    12. +

                    + +

                    HOW TO NOT SUCK QUITE SO HARD AT ATMOSPHERICS


                    + Or: What the fuck does a "pressure regulator" do?

                    + + Alright. It has come to my attention that a variety of people are unsure of what a "pipe" is and what it does. + Apparently, there is an unnatural fear of these arcane devices and their "gases." Spooky, spooky. So, + this will tell you what every device constructable by an ordinary pipe dispenser within atmospherics actually does. + You are not going to learn what to do with them to be the super best person ever, or how to play guitar with passive gates, + or something like that. Just what stuff does.

                    + + +

                    Basic Pipes

                    + The boring ones.
                    + Most ordinary pipes are pretty straightforward. They hold gas. If gas is moving in a direction for some reason, gas will flow in that direction. + That's about it. Even so, here's all of your wonderful pipe options.
                    + +
                      +
                    • Straight pipes: They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this + standard one-meter size, so most things will take up as much space as one of these.
                    • +
                    • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
                    • +
                    • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
                    • +
                    • 4-way manifold: A four-way junction.
                    • +
                    • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh, use them to decorate your house or something.
                    • +
                    • Manual valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
                    • +
                    • Manual T-valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


                    • +
                    + + An important note here is that pipes are now done in three distinct lines - general, supply, and scrubber. You can move gases between these with a universal adapter. Use the correct position for the correct location. + Connecting scrubbers to a supply position pipe makes you an idiot who gives everyone a difficult job. Insulated and HE pipes don't go through these positions. + +

                    Insulated Pipes

                    +
                  • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
                  • +
                  • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
                  • +
                  • 4-way manifold: A four-way junction.
                  • +
                  • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh. Use them to decorate your house or something.
                  • +
                  • Manual Valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
                  • +
                  • Manual T-Valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


                  • + +

                    Insulated Pipes


                    + Special Public Service Announcement.
                    + Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.

                    + +

                    Devices:

                    + They actually do something.
                    + This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now. + Stop it. It's unbecoming. Most of these are fairly straightforward.
                    + +
                      +
                    • Gas pump: Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 15000 kPa (kilopascals). + Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa + (though 18 kPa is preferred when using internals with pure oxygen, for various reasons). A high-powered variant will move gas more quickly at the expense of consuming more power. Do not turn the distribution loop up to 15000 kPa. + You will make engiborgs cry and the Chief Engineer will beat you.
                    • +
                    • Pressure regulator: These replaced the old passive gates. You can choose to regulate pressure by input or output, and regulate flow rate. Regulating by input means that when input pressure is above the limit, gas will flow. + Regulating by output means that when pressure is below the limit, gas will flow. Flow rate can be controlled.
                    • +
                    • Unary vent: The basic vent used in rooms. It pumps gas into the room, but can't suck it back out. Controlled by the room's air alarm system.
                    • +
                    • Scrubber: The other half of room equipment. Filters air, and can suck it in entirely in what's called a "panic siphon." Activating a panic siphon without very good reason will kill someone. Don't do it.
                    • +
                    • Meter: A little box with some gauges and numbers. Fasten it to any pipe or manifold and it'll read you the pressure in it. Very useful.
                    • +
                    • Gas mixer: Two sides are input, one side is output. Mixes the gases pumped into it at the ratio defined. The side perpendicular to the other two is "node 2," for reference, on non-mirrored mixers.. + Output is controlled by flow rate. There is also an "omni" variant that allows you to set input and output sections freely..
                    • +
                    • Gas filter: Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe, + the rest will continue out the other side. Can also output from 0-4500 kPa. The "omni" vairant allows you to set input and output sections freely.
                    • +
                    + +

                    Heat Exchange Systems

                    + Will not set you on fire.
                    + These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt), + a higher temperature will raise pressure, and a lower one will lower temperature.
                    + +
                  • Pipe: This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.
                  • +
                  • Bent pipe: Take a wild guess.
                  • +
                  • Junction: The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.
                  • +
                  • Heat exchanger: These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch. + This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions.

                  • + + That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please. + + + + + "} + +/obj/item/weapon/book/manual/evaguide + name = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition" + icon_state = "evabook" + item_state = "book14" + author = "Maria Crash, Senior Atmospherics Technician" + title = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition" + dat = {" + + + + + +

                    EVA Gear and You: Not Spending All Day Inside, 2nd Edition

                    + Or: How not to suffocate because there's a hole in your shoes
                    + +

                    Contents

                    +
                      +
                    1. A foreword on using EVA gear
                    2. +
                    3. Use of Softsuits
                    4. +
                    5. Putting on a Voidsuit
                    6. +
                    7. Operation of Hardsuits
                    8. +
                    9. Cyclers and Other Modification Equipment
                    10. +
                    11. Miscellaneous Advice
                    12. +
                    13. Final Checks
                    14. +
                    +
                    + + EVA gear. Wonderful to use. It's useful for mining, engineering, and occasionally just surviving, if things are that bad. Most people have EVA training, + but apparently there are some on a space station who don't. This guide should give you a basic idea of how to use this gear, safely. It's split into three main sections: + softsuits, voidsuits, and hardsuits. General advice and instructions for modification are present as well.

                    + + One important point for synthetics and people using full-body prosthetics: You obviously don't need oxygen, but you do run the risk of overheating in vacuum. + Rather than oxygen, use a suit cooling unit. Many emergency equipment stores don't hold them, unfortunately, but dedicated EVA stores will. Be aware of your heat tolerances.

                    + +

                    Softsuits and Emergency Equipment

                    + The bulkiest things this side of Alpha Centauri
                    + These suits are the both grey ones that are stored in EVA and orange emergency suits in emergency lockers. They're the more simple to get on, but are also a lot bulkier, and provide less protection from environmental hazards such as radiation or physical impact. + As Medical, Engineering, Security, and Mining all have voidsuits of their own, these don't see much use outside of emergencies. In an emergency, knowing how to put one on can save your life.

                    + + First, take the suit. It should be in three pieces: A top, a bottom, and a helmet. Put the bottom on first, shoes and the like will fit in it. If you have magnetic boots, however, + put them on on top of the suit's feet. Next, get the top on, as you would a shirt. It can be somewhat awkward putting these pieces on, due to the makeup of the suit, + but to an extent they will adjust to you. You can then find the snaps and seals around the waist, where the two pieces meet. Fasten these, and double-check their tightness. + The red indicators around the waist of the lower half will turn green when this is done correctly. Next, put on whatever breathing apparatus you're using, be it a gas mask or a breath mask. Make sure the oxygen tube is fastened into it. + Put on the helmet now, straightforward, and make sure the tube goes into the small opening specifically for internals. Again, fasten seals around the neck, a small indicator light in the inside of the helmet should go from red to off when all is fastened. + There is a small slot on the side of the suit where an emergency oxygen tank or extended emergency oxygen tank will fit, + but it is recommended to have a full-sized tank on your back for EVA.

                    + + Important note: When using these, especially in emergencies, be aware of your surroundings! These suits can tear or breach more easily than any other type, especially in an environment with broken glass and metal everywhere. + If your suit is breached, you will be in deep trouble. Pressure issues can inhibit breathing even with internals.

                    + + These suits tend to be wearable by most species. They're large and flexible. They might be pretty uncomfortable for some, though, so keep that in mind.

                    + +

                    Voidsuits

                    + Heavy, uncomfortable, still the best option.
                    + These suits come in many specialized varieties. The most common are engineering, atmospherics, security, medical, and mining varieties. + These provide a lot more protection than the standard suits, and depending on the specialization, can offer different protections. + For example, security suits have armor plating, engineering suits have radiation protection, and atmospherics suits are rated for extremely high temperatures.

                    + + Similarly to the softsuits, these are split into three parts. Fastening the pant and top are mostly the same as the softsuits, with the exception that these are a bit heavier, + though not as bulky. The helmet goes on differently, with the air tube feeding into the suit and out a hole near the left shoulder, while the helmet goes on turned ninety degrees counter-clockwise, + and then is turned to face the front and sealed. There is a small button on the right side of the helmet that activates the helmet light. + The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.

                    + + These suits generally only fit one species. NanoTrasen's are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.

                    + + Later-model voidsuits can have magboots and helmets installed into the suit and deployed when needed. Check the operator's manual for individual suits to see how the helmets are installed. + If a helmet is installed, you can skip it while putting the suit on, obviously. When deployed, it will deploy from the back of your neck, covering the head and sealing at the front.

                    + +

                    Hardsuits/Rigs

                    + The fancy stuff.
                    + Proper hardsuits are the most complex sort of EVA equipment available, and blur the line between spacesuits and smaller exosuits. They're sometimes known as 'rigs' or 'powered armor'. + These are the suits with the widest variety of uses, owing to the wide variety of equipment that can be installed on them. Like voidsuits, they come in different, specialized varieties, each one offering different protections and different equipment. + Equipment that can be installed includes weapons, power tools, mining equipment, medical equipment, AI assistants, and more.

                    + + Putting these on is relatively simple. They come as compact packs, worn like a backpack and secured with a harness. Activating them, though, is a more complex process. The suit deploys from the module similarly to helmets deploying from voidsuits. + After it covers the whole body, the suit can be started. The startup sequence takes some time. The suit will automatically fit itself to your body, sealing each section individually - boots, gloves, pants, torso, and helmet - then connecting them.

                    + + Operating a hardsuit is a much more complicated proposal than operating other EVA equipment. While putting them on is relatively simple, and operating basic functions like oxygen and magboots is the same as other suits, the rest is far more complex. + Consult the operator's manual for invidual pieces of equipment that you plan to use. Use of these for heavy work is only reccomended for people who have specialized training and extensive EVA experience. + The potential of a suit breach is always there, and the use of powered equipment raises it significantly.

                    + +

                    Miscellaneous Advice

                    + Pro tip: Safety first.
                    + There's a lot of general advice that can be helpful for people who haven't taken a long-form instruction course. Much of this is going to be fairly obvious safety advice, but it's never bad to remind yourself of that.

                    + +
                      +
                    • Magboots are important. They can be the difference between keeping your footing and needing a rescue team. A tie-off or a jetpack can substitute if necessary.
                    • +
                    • Be aware of breach hazards, especially in softsuits. Loss of suit pressure can be a fatal disaster.
                    • +
                    • Keep an eye on your internals. Having to make two trips outside is better than running out of air.
                    • +
                    • Similarly, keep an eye on the battery status of cooling units and other equipment.
                    • +
                    • In vacuum, sound doesn't carry. Use a radio or sign language for communication.


                    • +
                    + +

                    Modification Equipment

                    + How to actually make voidsuits fit you.
                    + There's a variety of equipment that can modify hardsuits to fit species that can't fit into them, making life quite a bit easier.

                    + + The first piece of equipment is a suit cycler. This is a large machine resembling the storage pods that are in place in some places. These are machines that will automatically tailor a suit to certain specifications. + The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will hurt the whole time you're dying. + These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

                    + + There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not reccomend using them unless no other option is available.

                    + +

                    Final Checks

                    +
                      +
                    • Are all seals fastened correctly?
                    • +
                    • If you have modified it manually, is absolutely everything sealed perfectly?
                    • +
                    • Do you either have shoes on under the suit, or magnetic boots on over it?
                    • +
                    • Do you have internals connected and activated?
                    • +
                    • Do you have a way to communicate with the station in case something goes wrong?
                    • +
                    • Do you have a second person watching if this is a training session?

                    • +
                    + + If you don't have any further issues, go out and do whatever is necessary. + + + + "} + +/obj/item/weapon/book/manual/virology + name = "Sneezes and Coughs: A Guide To Virology, 1st Edition" + icon_state = "bookvirology" + item_state = "book5" + author = "James Simpson, Chief Virologist" + title = "Sneezes and Coughs: A Guide To Virology, 1st Edition" + dat = {" + + + + +

                    A Guide to Virology, 1st Edition

                    + Welcome to virology!

                    + + A virologist spends much of their time isolated in the virology department fiddling with deadly and annoying plagues. This guide will get you on the right path to properly
                    + creating and curing the worst of the worst.

                    + +

                    Anatomy of a Virus

                    + Before you jump in to making the next Black Death, you need to understand what's what. When you pop a tray into the disease analyzer you'll get a paper listing quite a few
                    + things about that virus!

                    + + Antigens
                    + The first thing you might notice on this analysis is the listed antigens of a virus. This, essentially, is what you need for cures. When a patient develops an antibody that
                    + matches a disease's antigen, they'll be immune to the virus.

                    + + Transmission
                    + This will list one of three methods of transmission: airborne, contact, or blood. Airborne viruses will spread through the air, meaning if a patient is coughing or sneezing
                    + it will spread quicker. Contactviruses need some sort of, well, contact. Blood on the floor, mucus, and vomit should all be cleaned up. Blood-transmission viruses will only
                    + spread through actual blood contact, meaning an injection of the virus would be necessary to spread it.

                    + + Species
                    + Not all viruses are compatible with all species! This will list off what can be infected by a particular virus. This can be changed through splicing. In rare cases you will
                    + get a virus that has infected crewmembers but cannot infect your lab monkeys. In these cases, you will likely have to splice different species data to safely make a cure.

                    + + Symptoms
                    + This lists what all the virus does, along with the strength of the symptoms and their aggressiveness. A full list of symptoms and their stages can be found below.

                    + +

                    Protection

                    + First off, any good virologist needs to gear up!

                    + Your virology lab should have the following: +
                      +
                    • Two (2) Level-3 Bio Hoods
                    • +
                    • Two (2) Level-3 Bio Suits
                    • +
                    • Two (2) sets of sealed internals
                    • +
                    • One (1) box of sterile masks
                    • +
                    • One (1) box of latex gloves
                    • +

                    + Make sure to gear up appropriately and take precautions to not bring the virus out of the lab!

                    + What needs to be worn varies from race to race, as some species cannot be affected by a virus, but
                    + precautions should always be taken to prevent accidentally carrying the virus out of containment.

                    + +

                    Machinery

                    + These are the types of machines that you will be expected to use in this department. Study them, know them, and make sure you use them correctly!

                    + + Antibody Scanner
                    + A device similar to a health analyzer, when scanned over a patient it will tell you any present antibodies in their bloodstream.

                    + + Pathogenic Isolator
                    + This device can be loaded with blood samples via a syringe. It will tell you if there is a present viral pathogen, and if so it can isolate the pathogen,
                    + producing a virus dish for further research. This is the primary means of creating virus dishes.

                    + + Pathogenic Incubator
                    + One of the most important machines, you'll be sitting here a lot. Virus trays you produce will start small, and you will need to grow them to get anywhere.
                    + Load it with virus food (diluted milk, found in a wall mounted dispenser nearby) as well as a virus dish and turn it on. It will slowly grow the virus
                    + for analysis, splicing, or whatever other use you might find for it. It can also inject the virus into other chemicals (i.e. blood) which will allow you
                    + to artificially infect a blood sample to infect test subjects.

                    + + Additionally, it can irradiate a virus dish to cause mutation. This randomly alters the syndromes, allowing you to collect new data.

                    + + Disease Analyser
                    + Virus dishes may be placed into this machine after it has been incubated sufficiently. It will create a reading of the virus' symptoms, species targeted,
                    + associated antibodies, and so on. It will also update the disease into the digital database, allowing it to be detected via Medical HUD or health analyzer.

                    + + Isolation Centrifuge
                    + Inserting a vial of blood into this machine will allow it to take a present pathogen or antibody, turning it into a pure virus or pure cure for your use.
                    + It will automatically detect if either are in the blood sample, so it is useful for determining if a sample is infected. The sample will be reusable if creating
                    + more of the virus, but will be expended upon creating antibodies.

                    + + Disease Splicer
                    + As it's name implied, this machine is for splicing the disease symptoms and creating new viruses. Insert an analyzed virus sample to take a symptom which can
                    + then be saved on a GNA disk (created by the machine), or use an existing disk on the machine to load up a symptom and splice it in.

                    + +

                    Syndromes

                    + While curing patients is the obvious side to virology, there's more you can do! For a variety of reasons you may wish to engineer your own virus through mutations
                    + and splicing. Keep in mind that infecting the whole station with a deadly virus is generally frowned upon in most societies, and even in an antagonistic role simply
                    + infecting everyone with a very deadly virus is not ideal.

                    + + Obtaining a Sample
                    + The first step to making your own virus is to find a virus to start tinkering with. There are two ways of doing this: grabbing the pre-spawned virus dish from the
                    + freezer create in your laboratory, or taking a blood sample from an infected patient that you haven't cured yet and running it through the Pathogenic Isolator to
                    + produce a virus dish.

                    + + In either case, you'll then need to incubate the virus in the Pathogenic Incubator until it is of sufficient size for you to work with, and ideally also run it
                    + through the Disease Analyzer to get an idea of what it does. This will also keep the rest of Medical from getting on your case about not giving them the ability to
                    + detect viral outbreaks without you, and will help prevent public lynchings if someone sneezes.

                    + + Once that's all done, you're ready to start the real work.

                    + + Obtaining a Sample
                    + Sometimes you just need to infect somebody. Usually, this is because you're doing some splicing work and want to make sure that you'll have some copies of a virus
                    + in reserve for future study. Fortunately, the process of deliberately infecting patients, as well as creating backups of your viruses, is actually very simple.

                    + + If you have a virus dish and wish to infect a patient, place the dish into the Pathogenic Incubator along with a beaker full of blood. Ideally, this is the
                    + patient's (or test monkey's) blood, though anyone's will do in a pinch - just be aware of the possibility of blood rejection, and be ready to deal with it accordingly.
                    + The incubator can inject a sample of the virus into the blood, which you can then inject into the patient to infect them. Alternatively, once a blood sample is infected
                    + you may place it in either the Pathogenic Isolator or Isolation Centrifuge to make as many samples of that virus you need without destroying the sample.
                    + No infections necessary!

                    + + Splicing
                    + To understand splicing, you must know that every virus has 4 GNA strands, each of which is tied to one of the syndromes that it can manifest. Each syndrome, and thus each
                    + strand, is ranked in order of its appearance when symptoms begin to manifest in a patient, and higher-ranked (and thus slower to appear) syndromes are likely to be more
                    + powerful than lower-ranked ones. (1) is the lowest, first symptom to manifest, and (4) is the highest, final symptom to manifest.

                    + + The Disease Splicer will allow you to examine and manipulate a virus' GNA strands to create a virus with any syndromes that you want.

                    + + The splicer has main three functions which allow you to modify viruses and define which GNA strands they contain. The first of these functions is the splicing function,
                    + which copies a GNA strand from an inserted virus tray to the disease splicer buffer. This is done by selecting the desired GNA strand under "Reverse Engineering".
                    + Doing so will destroy the virus tray in the process, so be sure that you have more samples of the virus on hand if you want to preserve it.

                    + + The disease splicer’s second function is to copy whatever strand it has stored in its buffer to a disk the machine creates. These disks can be re-inserted into
                    + the disease splicer later, making their stored GNA strand immediately available for use. Unlike virus trays, disks can be reused without destroying them.

                    + + The final function of the disease splicer is to copy over a GNA strand of its loaded virus dish with the corresponding GNA strand that is currently stored in
                    + its buffer. This effectively allows you to give a virus any set of symptoms you want, so long as it follows the rules of the ranking. A rank (1) symptom can fill
                    + any slot, while a (3) can only fill 3 and up, and a (4) can only be in the fourth slot.

                    + + Mutating
                    + Sometimes you just don't have any of the symptoms you want. Fortunately, mutating a virus dish is very simple. Simply place a dish in the Pathogenic Incubator
                    + to get started and click 'add radiation'. This will fill up the radiation bar with each press. When the machine is on, this bar will slowly tick down as the radiation
                    + is applied to the sample. For any significant mutation the radiation should be over 500k, meaning at least half the bar. When a mutation occurs -- and multiple
                    + mutations can occur in a single sample -- there will be a ping from the machine. Once it's done growing and mutating, throw it into the analyzer and see what you got!

                    + + With these functions in mind, the process in order for you to develop your own virus is as follows: +
                      +
                    1. Create lots of virus sample dishes.
                    2. +
                    3. If the virus dishes you have already created don't contain the syndromes that you want in
                      + your custom virus, irradiate them in the Pathogenic Incubator until they do.
                    4. +
                    5. Create backup dishes of your new viruses.
                    6. +
                    7. Strip the GNA strands that you want from your virus dishes, saving each one onto a disk.
                    8. +
                    9. Load a new virus dish into the Disease Splicer.
                    10. +
                    11. Copy over the virus dish's GNA strands with your disks.
                    12. +
                    13. Once you have your final product, you can use the Pathogenic Incubator to create a beaker
                      + of blood containing the virus. Congratulations! You are now officially a bioweapon
                      + manufacturer.
                    14. +
                    + +

                    Curing

                    + Curing a virus is relatively simple, but the below will leave you without a sample to work with. If this is a concern, see 'obtaining a sample' above. Alternatively to
                    + the below, spacecillin can be used in a pinch to attempt to treat a virus if no virologist is present and someone decided to roll around in mucus. However this is not
                    + guaranteed to work, and can in fact simply make the virus more resistant to spacecillin.

                    + + Quarantine
                    + If you or a crew member becomes infected by a virus, your first concern should be to isolate them as quickly as possible to prevent the disease from spreading. Ideally,
                    + this means getting the patient back to Virology and into a holding cell, but failing that, it's important to get them into an isolated room, shut the door, and keep anyone
                    + else from entering. It is also important to clean up any blood, vomit, or mucus left behind by the patient, as it may spread the virus as well.

                    + + Antibodies
                    + Now that your patient is safely hidden away where they can't infect people without your permission, you want to cure them. The basic idea behind that is to get them to start
                    + synthesizing antibodies.

                    + + Antibodies are produced by living organisms that have started to fight off a virus in their bloodstream. An organism that has produced antibodies is effectively
                    + immune to any virus that is weak to those antibodies, which are generally denoted by a short string of letters (say, "KM" or similar) to let you know which viruses they
                    + are effective against. Even better, once an organism has synthesized antibodies for itself, you can take a blood sample and use that to create more antibodies, which you
                    + can then inject into other people to cure the virus in them, or even to prevent them from catching it in the first place. And you can take blood samples from those people
                    + to make even more antibodies.

                    + + The issue is that, most of the time, a patient's immune system is not powerful enough to create antibodies on its own (space plagues are nasty things), so you have to do that
                    + for them. You do that by injecting them with Radium.

                    + + Since Radium is radioactive, this is obviously not something that you want to do to your actual patients. It'll cause major toxin damage when an antibody is
                    + made and quickly lead to organ failure. You get around this by using monkeys, which you can get from the box of monkey cubes very handily left on the desk in Virology for
                    + this very purpose.

                    + + So the process of curing diseases is, really, quite simple. Find an infected patient. Make a monkey (ideally, strap this monkey to a bed in an isolation cell to make the
                    + rest of this process easier). Take a blood sample from the infected patient, then inject it into the monkey to infect the monkey. Inject the monkey with Radium. Use the antibody
                    + scanner on the monkey every few seconds until it says that the monkey has begun producing antibodies, then take a blood sample (or two or three or four) from the
                    + monkey. Put the blood sample(s) into a vial, then put the vial into the isolation centrifuge and isolate the antibodies. Voila: a bottle of virus cure. Inject it into as many
                    + people as you like, then throw the (likely dead) monkey into the disposals chute to eject its disease-ridden body into space and clean the isolation cell. Or, if you're on
                    + the ball and wish to be conservative with your limited monkey cubes, save the monkey, too.

                    + + Congratulations! You have now cured a disease.

                    + + The important thing to remember is that anyone injected with antibodies becomes a source of those antibodies for the future. You can take a sample of their blood
                    + and put it into the isolation centrifuge just like you did with the monkey's to produce more antibodies if you ever run out. For this reason, and because you might have
                    + gotten infected yourself in the process of synthesizing a cure, most Virologists will inject themselves with any antibodies they produce.

                    + +

                    Syndromes

                    + Below are the possible syndromes of a virus and the stages they can appear at. A stage covers that stage and higher, so a stage 1 syndrome can appear at stage 4.
                    + A stage 4 syndrome, however, cannot appear any earlier than stage 4.

                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    Syndromes
                    Stage Name Effects +
                    1 Sneezing Makes the patient sneeze. Spreads airborne disease! +
                    1 Mucus Buildup Makes the patient's throat fill with mucus. +
                    1 Salivary Gland Stimulation Makes the patient drool. Spreads the disease! +
                    1 Involuntary Twitching Makes the patient twitch. +
                    1 Headache Gives the patient a headache. +
                    1 Mlemington's Syndrome Makes the patient 'mlem' uncontrollably. +
                    1 Spyndrome Makes the patient spin uncontrollably. +
                    2 Involuntary Vocalization Makes the patient scream. +
                    2 Vomiting Makes the patient vomit. Spreads the disease! +
                    2 Excessive Sleepiness Makes the patient drowsy. +
                    2 Narcolepsy Makes the patient pass out at random. +
                    2 Vision Loss Causes partial blindness. +
                    2 Severe Cough Causes coughing. Spreads airborne disease! +
                    2 Digestive Inefficiency Makes the patient always hungry. +
                    2 Reduced Circulation Makes the patient shiver. +
                    2 Hair Loss Causes the patient's hair to fall out. +
                    2 Overactive Adrenal Gland Makes the patient jittery, but also faster. +
                    2 Tinnitus Causes ringing in the patient's ears. +
                    2 Lingual Dissocation Scrambles the patients language center of their brain. +
                    3 Hyperacidity Causes small amounts of toxin damage. +
                    3 Nervous Motor Instability Makes the patient shaky. +
                    3 Pineal Gland Decalcification Gives the patient telepathy. +
                    3 Neurodegeneration Causes brain damage. +
                    3 Hallucination Causes hallucinations. +
                    3 Hearing Loss A less severe hearing damage. +
                    3 Topographical Cretinism Makes the patient incapable of walking straight. +
                    3 Uncontrolled Laughter Causes the patient to laugh uncontrollably. +
                    3 DNA Degradation Causes genetic damage. +
                    3 Phantom Aches Causes groaning. +
                    3 Chemical Synthesis Causes the synthesis of a certain chemical in the patient's bloodstream. +
                    3 Genetic Chameleonism Prevents the patient from experiencing organ rejection. +
                    3 Mass Revectoring Causes the patient to suddenly change size. +
                    3 Flipponov's Disease Causes the patient to uncontrollably do a flip. +
                    4 Gibbingtons Gibs the patients slowly. +
                    4 Radian's Syndrome Irradiates the patient from the inside. +
                    4 Deafness Causes complete deafness. +
                    4 Genome Regression Turns the patient into the primitive form of their species. +
                    4 Windpipe Contraction Causes the patient to involuntarily hold their breath. +
                    4 Autoimmune Response Adds toxins to the patient's bloodstream. +
                    4 Catastrophic DNA Degeneration Causes genetic damage and scrambles the patient's genes. +
                    4 Limb Paralysis Temporary loss of use in the patient's individual arms and legs. +
                    4 Organ Shutdown Slowly causes internal organ damage at random. +
                    4 Hyperaccelerated Aging Ages the patient, causing external damage. +
                    4 Brittle Bones Causes bones to break more easily. +
                    4 Organic Ignition Slowly causes the patient to burst into flames. +
                    +
                    + + + "} diff --git a/code/game/objects/items/weapons/material/bats.dm b/code/game/objects/items/weapons/material/bats.dm index 73896640a2..c625e948bb 100644 --- a/code/game/objects/items/weapons/material/bats.dm +++ b/code/game/objects/items/weapons/material/bats.dm @@ -1,29 +1,29 @@ -/obj/item/weapon/material/twohanded/baseballbat - name = "bat" - desc = "HOME RUN!" - icon_state = "metalbat0" - base_icon = "metalbat" - throwforce = 7 - attack_verb = list("smashed", "beaten", "slammed", "smacked", "struck", "battered", "bonked") - hitsound = 'sound/weapons/genhit3.ogg' - default_material = "wood" - force_divisor = 1.1 // 22 when wielded with weight 20 (steel) - unwielded_force_divisor = 0.7 // 15 when unwielded based on above. - dulled_divisor = 0.75 // A "dull" bat is still gonna hurt - slot_flags = SLOT_BACK - -//Predefined materials go here. -/obj/item/weapon/material/twohanded/baseballbat/metal/New(var/newloc) - ..(newloc,"steel") - -/obj/item/weapon/material/twohanded/baseballbat/uranium/New(var/newloc) - ..(newloc,"uranium") - -/obj/item/weapon/material/twohanded/baseballbat/gold/New(var/newloc) - ..(newloc,"gold") - -/obj/item/weapon/material/twohanded/baseballbat/platinum/New(var/newloc) - ..(newloc,"platinum") - -/obj/item/weapon/material/twohanded/baseballbat/diamond/New(var/newloc) +/obj/item/weapon/material/twohanded/baseballbat + name = "bat" + desc = "HOME RUN!" + icon_state = "metalbat0" + base_icon = "metalbat" + throwforce = 7 + attack_verb = list("smashed", "beaten", "slammed", "smacked", "struck", "battered", "bonked") + hitsound = 'sound/weapons/genhit3.ogg' + default_material = "wood" + force_divisor = 1.1 // 22 when wielded with weight 20 (steel) + unwielded_force_divisor = 0.7 // 15 when unwielded based on above. + dulled_divisor = 0.75 // A "dull" bat is still gonna hurt + slot_flags = SLOT_BACK + +//Predefined materials go here. +/obj/item/weapon/material/twohanded/baseballbat/metal/New(var/newloc) + ..(newloc,"steel") + +/obj/item/weapon/material/twohanded/baseballbat/uranium/New(var/newloc) + ..(newloc,"uranium") + +/obj/item/weapon/material/twohanded/baseballbat/gold/New(var/newloc) + ..(newloc,"gold") + +/obj/item/weapon/material/twohanded/baseballbat/platinum/New(var/newloc) + ..(newloc,"platinum") + +/obj/item/weapon/material/twohanded/baseballbat/diamond/New(var/newloc) ..(newloc,"diamond") \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index a4f3f7796f..55b67d6b98 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -1,217 +1,217 @@ -/obj/item/weapon/material/kitchen - icon = 'icons/obj/kitchen.dmi' - -/* - * Utensils - */ -/obj/item/weapon/material/kitchen/utensil - drop_sound = 'sound/items/drop/knife.ogg' - pickup_sound = 'sound/items/pickup/knife.ogg' - w_class = ITEMSIZE_TINY - thrown_force_divisor = 1 - origin_tech = list(TECH_MATERIAL = 1) - attack_verb = list("attacked", "stabbed", "poked") - sharp = TRUE - edge = TRUE - force_divisor = 0.1 // 6 when wielded with hardness 60 (steel) - thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) - var/scoop_volume = 5 - var/loaded // Name for currently loaded food object. - var/loaded_color // Color for currently loaded food object. - - var/list/food_inserted_micros - -/obj/item/weapon/material/kitchen/utensil/Initialize() - . = ..() - if (prob(60)) - src.pixel_y = rand(0, 4) - create_reagents(scoop_volume) - -/obj/item/weapon/material/kitchen/utensil/Destroy() - if(food_inserted_micros) - for(var/mob/M in food_inserted_micros) - M.dropInto(loc) - food_inserted_micros -= M - . = ..() - - return - -/obj/item/weapon/material/kitchen/utensil/update_icon() - . = ..() - cut_overlays() - if(loaded) - var/image/I = new(icon, "loadedfood") - I.color = loaded_color - add_overlay(I) - -/obj/item/weapon/material/kitchen/utensil/proc/load_food(var/mob/user, var/obj/item/weapon/reagent_containers/food/snacks/loading) - if (reagents.total_volume > 0) - to_chat(user, SPAN_DANGER("There is already something on \the [src].")) - return - if (!loading?.reagents?.total_volume) - to_chat(user, SPAN_NOTICE("Nothing to scoop up in \the [loading]!")) - - - loaded = "\the [loading]" - user.visible_message( \ - "\The [user] scoops up some of [loaded] with \the [src]!", - SPAN_NOTICE("You scoop up some of [loaded] with \the [src]!") - ) - loading.bitecount++ - loading.reagents.trans_to_obj(src, min(loading.reagents.total_volume, scoop_volume)) - loaded_color = loading.filling_color - - if(loading.food_inserted_micros && loading.food_inserted_micros.len) - if(!food_inserted_micros) - food_inserted_micros = list() - - for(var/mob/living/F in loading.food_inserted_micros) - var/do_transfer = FALSE - - if(!loading.reagents.total_volume) - do_transfer = TRUE - else - var/transfer_chance = (loading.bitecount/(loading.bitecount + (loading.bitesize / loading.reagents.total_volume) + 1))*100 - if(prob(transfer_chance)) - do_transfer = TRUE - - if(do_transfer) - F.forceMove(src) - loading.food_inserted_micros -= F - src.food_inserted_micros += F - - if (loading.reagents.total_volume <= 0) - qdel(loading) - update_icon() - -/obj/item/weapon/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == O_EYES) - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() - - if (loaded && reagents.total_volume > 0) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - if(food_inserted_micros && food_inserted_micros.len) - for(var/mob/living/F in food_inserted_micros) - food_inserted_micros -= F - if(!F.can_be_drop_prey || !F.food_vore) - F.forceMove(get_turf(src)) - else - F.forceMove(M.vore_selected) - if(M == user) - if(!M.can_eat(loaded)) - return - M.visible_message("\The [user] eats some of [loaded] with \the [src].") - else - user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!")) - if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS))) - return - M.visible_message("\The [user] feeds some of [loaded] to \the [M] with \the [src].") - playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1) - loaded = null - update_icon() - return - else - to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK - return - -/obj/item/weapon/material/kitchen/utensil/on_rag_wipe() - . = ..() - if(reagents.total_volume > 0) - reagents.clear_reagents() - cut_overlays() - return - -/obj/item/weapon/material/kitchen/utensil/container_resist(mob/living/M) - if(food_inserted_micros) - food_inserted_micros -= M - M.forceMove(get_turf(src)) - to_chat(M, "You climb off of \the [src].") - -/obj/item/weapon/material/kitchen/utensil/fork - name = "fork" - desc = "It's a fork. Sure is pointy." - icon_state = "fork" - sharp = TRUE - edge = FALSE - -/obj/item/weapon/material/kitchen/utensil/fork/plastic - default_material = "plastic" - -/obj/item/weapon/material/kitchen/utensil/foon - name = "foon" - desc = "It's a foon. The forgotten cousin of the spork." - icon_state = "foon" - sharp = TRUE - edge = FALSE - -/obj/item/weapon/material/kitchen/utensil/foon/plastic - default_material = "plastic" - -/obj/item/weapon/material/kitchen/utensil/spork - name = "spork" - desc = "It's a spork. The (un)holy merger of a spoon and fork." - icon_state = "spork" - sharp = TRUE - edge = FALSE - -/obj/item/weapon/material/kitchen/utensil/spork/plastic - default_material = "plastic" - -/obj/item/weapon/material/kitchen/utensil/spoon - name = "spoon" - desc = "It's a spoon. You can see your own upside-down face in it." - icon_state = "spoon" - attack_verb = list("attacked", "poked") - edge = FALSE - sharp = FALSE - force_divisor = 0.1 //2 when wielded with weight 20 (steel) - -/obj/item/weapon/material/kitchen/utensil/spoon/plastic - default_material = "plastic" - -/* - * Knives - */ - -/* From the time of Clowns. Commented out for posterity, and sanity. -/obj/item/weapon/material/knife/attack(target as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You accidentally cut yourself with \the [src].") - user.take_organ_damage(20) - return - return ..() -*/ -/obj/item/weapon/material/knife/plastic - default_material = "plastic" - -/* - * Rolling Pins - */ - -/obj/item/weapon/material/kitchen/rollingpin - name = "rolling pin" - desc = "Used to knock out the Bartender." - icon_state = "rolling_pin" - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - default_material = "wood" - force_divisor = 0.7 // 10 when wielded with weight 15 (wood) - dulled_divisor = 0.75 // Still a club - thrown_force_divisor = 1 // as above - drop_sound = 'sound/items/drop/wooden.ogg' - pickup_sound = 'sound/items/pickup/wooden.ogg' - -/obj/item/weapon/material/kitchen/rollingpin/attack(mob/living/M as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "\The [src] slips out of your hand and hits your head.") - user.take_organ_damage(10) - user.Paralyse(2) - return - return ..() +/obj/item/weapon/material/kitchen + icon = 'icons/obj/kitchen.dmi' + +/* + * Utensils + */ +/obj/item/weapon/material/kitchen/utensil + drop_sound = 'sound/items/drop/knife.ogg' + pickup_sound = 'sound/items/pickup/knife.ogg' + w_class = ITEMSIZE_TINY + thrown_force_divisor = 1 + origin_tech = list(TECH_MATERIAL = 1) + attack_verb = list("attacked", "stabbed", "poked") + sharp = TRUE + edge = TRUE + force_divisor = 0.1 // 6 when wielded with hardness 60 (steel) + thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) + var/scoop_volume = 5 + var/loaded // Name for currently loaded food object. + var/loaded_color // Color for currently loaded food object. + + var/list/food_inserted_micros + +/obj/item/weapon/material/kitchen/utensil/Initialize() + . = ..() + if (prob(60)) + src.pixel_y = rand(0, 4) + create_reagents(scoop_volume) + +/obj/item/weapon/material/kitchen/utensil/Destroy() + if(food_inserted_micros) + for(var/mob/M in food_inserted_micros) + M.dropInto(loc) + food_inserted_micros -= M + . = ..() + + return + +/obj/item/weapon/material/kitchen/utensil/update_icon() + . = ..() + cut_overlays() + if(loaded) + var/image/I = new(icon, "loadedfood") + I.color = loaded_color + add_overlay(I) + +/obj/item/weapon/material/kitchen/utensil/proc/load_food(var/mob/user, var/obj/item/weapon/reagent_containers/food/snacks/loading) + if (reagents.total_volume > 0) + to_chat(user, SPAN_DANGER("There is already something on \the [src].")) + return + if (!loading?.reagents?.total_volume) + to_chat(user, SPAN_NOTICE("Nothing to scoop up in \the [loading]!")) + + + loaded = "\the [loading]" + user.visible_message( \ + "\The [user] scoops up some of [loaded] with \the [src]!", + SPAN_NOTICE("You scoop up some of [loaded] with \the [src]!") + ) + loading.bitecount++ + loading.reagents.trans_to_obj(src, min(loading.reagents.total_volume, scoop_volume)) + loaded_color = loading.filling_color + + if(loading.food_inserted_micros && loading.food_inserted_micros.len) + if(!food_inserted_micros) + food_inserted_micros = list() + + for(var/mob/living/F in loading.food_inserted_micros) + var/do_transfer = FALSE + + if(!loading.reagents.total_volume) + do_transfer = TRUE + else + var/transfer_chance = (loading.bitecount/(loading.bitecount + (loading.bitesize / loading.reagents.total_volume) + 1))*100 + if(prob(transfer_chance)) + do_transfer = TRUE + + if(do_transfer) + F.forceMove(src) + loading.food_inserted_micros -= F + src.food_inserted_micros += F + + if (loading.reagents.total_volume <= 0) + qdel(loading) + update_icon() + +/obj/item/weapon/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return ..() + + if(user.a_intent != I_HELP) + if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == O_EYES) + if((CLUMSY in user.mutations) && prob(50)) + M = user + return eyestab(M,user) + else + return ..() + + if (loaded && reagents.total_volume > 0) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + if(food_inserted_micros && food_inserted_micros.len) + for(var/mob/living/F in food_inserted_micros) + food_inserted_micros -= F + if(!F.can_be_drop_prey || !F.food_vore) + F.forceMove(get_turf(src)) + else + F.forceMove(M.vore_selected) + if(M == user) + if(!M.can_eat(loaded)) + return + M.visible_message("\The [user] eats some of [loaded] with \the [src].") + else + user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!")) + if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS))) + return + M.visible_message("\The [user] feeds some of [loaded] to \the [M] with \the [src].") + playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1) + loaded = null + update_icon() + return + else + to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK + return + +/obj/item/weapon/material/kitchen/utensil/on_rag_wipe() + . = ..() + if(reagents.total_volume > 0) + reagents.clear_reagents() + cut_overlays() + return + +/obj/item/weapon/material/kitchen/utensil/container_resist(mob/living/M) + if(food_inserted_micros) + food_inserted_micros -= M + M.forceMove(get_turf(src)) + to_chat(M, "You climb off of \the [src].") + +/obj/item/weapon/material/kitchen/utensil/fork + name = "fork" + desc = "It's a fork. Sure is pointy." + icon_state = "fork" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/fork/plastic + default_material = "plastic" + +/obj/item/weapon/material/kitchen/utensil/foon + name = "foon" + desc = "It's a foon. The forgotten cousin of the spork." + icon_state = "foon" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/foon/plastic + default_material = "plastic" + +/obj/item/weapon/material/kitchen/utensil/spork + name = "spork" + desc = "It's a spork. The (un)holy merger of a spoon and fork." + icon_state = "spork" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/spork/plastic + default_material = "plastic" + +/obj/item/weapon/material/kitchen/utensil/spoon + name = "spoon" + desc = "It's a spoon. You can see your own upside-down face in it." + icon_state = "spoon" + attack_verb = list("attacked", "poked") + edge = FALSE + sharp = FALSE + force_divisor = 0.1 //2 when wielded with weight 20 (steel) + +/obj/item/weapon/material/kitchen/utensil/spoon/plastic + default_material = "plastic" + +/* + * Knives + */ + +/* From the time of Clowns. Commented out for posterity, and sanity. +/obj/item/weapon/material/knife/attack(target as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "You accidentally cut yourself with \the [src].") + user.take_organ_damage(20) + return + return ..() +*/ +/obj/item/weapon/material/knife/plastic + default_material = "plastic" + +/* + * Rolling Pins + */ + +/obj/item/weapon/material/kitchen/rollingpin + name = "rolling pin" + desc = "Used to knock out the Bartender." + icon_state = "rolling_pin" + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") + default_material = "wood" + force_divisor = 0.7 // 10 when wielded with weight 15 (wood) + dulled_divisor = 0.75 // Still a club + thrown_force_divisor = 1 // as above + drop_sound = 'sound/items/drop/wooden.ogg' + pickup_sound = 'sound/items/pickup/wooden.ogg' + +/obj/item/weapon/material/kitchen/rollingpin/attack(mob/living/M as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "\The [src] slips out of your hand and hits your head.") + user.take_organ_damage(10) + user.Paralyse(2) + return + return ..() diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 26ec2c4d89..65319e0ef1 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -1,187 +1,187 @@ -/obj/item/weapon/material/butterfly - name = "butterfly knife" - desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." - //description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave. //CHOMP Remove - icon_state = "butterflyknife" - item_state = null - hitsound = null - var/active = 0 - w_class = ITEMSIZE_SMALL - attack_verb = list("patted", "tapped") - force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) - thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) - drop_sound = 'sound/items/drop/knife.ogg' - pickup_sound = 'sound/items/pickup/knife.ogg' - -/obj/item/weapon/material/butterfly/update_force() - if(active) - edge = TRUE - sharp = TRUE - ..() //Updates force. - throwforce = max(3,force-3) - hitsound = 'sound/weapons/bladeslice.ogg' - icon_state += "_open" - w_class = ITEMSIZE_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - else - force = 3 - edge = FALSE - sharp = FALSE - hitsound = initial(hitsound) - icon_state = initial(icon_state) - w_class = initial(w_class) - attack_verb = initial(attack_verb) - -/obj/item/weapon/material/butterfly/switchblade - name = "switchblade" - desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." - icon_state = "switchblade" - -/obj/item/weapon/material/butterfly/boxcutter - name = "box cutter" - desc = "A thin, inexpensive razor-blade knife designed to open cardboard boxes." - icon_state = "boxcutter" - force_divisor = 0.1 // 6 when wielded with hardness 60 (steel) - thrown_force_divisor = 0.2 // 4 when thrown with weight 20 (steel) - -/obj/item/weapon/material/butterfly/attack_self(mob/user) - active = !active - update_force() - - if(user) - if(active) - to_chat(user, "You flip out \the [src].") - playsound(src, 'sound/weapons/flipblade.ogg', 15, 1) - else - to_chat(user, "\The [src] can now be concealed.") - add_fingerprint(user) - -/* - * Kitchen knives - */ -/obj/item/weapon/material/knife - name = "kitchen knife" - icon = 'icons/obj/kitchen.dmi' - icon_state = "knife" - desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - //description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave. //CHOMP Remove - sharp = TRUE - edge = TRUE - force_divisor = 0.15 // 9 when wielded with hardness 60 (steel) - matter = list(MAT_STEEL = 12000) - origin_tech = list(TECH_MATERIAL = 1) - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - drop_sound = 'sound/items/drop/knife.ogg' - -// These no longer inherit from hatchets. -/obj/item/weapon/material/knife/tacknife - name = "tactical knife" - desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife" - item_state = "knife" - force_divisor = 0.25 //15 when hardness 60 (steel) - attack_verb = list("stabbed", "chopped", "cut") - applies_material_colour = 1 - -/obj/item/weapon/material/knife/tacknife/combatknife - name = "combat knife" - desc = "If only you had a boot to put it in." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife2" - item_state = "knife" - force_divisor = 0.34 // 20 with hardness 60 (steel) - thrown_force_divisor = 1.75 // 20 with weight 20 (steel) - attack_verb = list("sliced", "stabbed", "chopped", "cut") - applies_material_colour = 1 - -// Identical to the tactical knife but nowhere near as stabby. -// Kind of like the toy esword compared to the real thing. -/obj/item/weapon/material/knife/tacknife/boot - name = "boot knife" - desc = "A small fixed-blade knife for putting inside a boot." - icon = 'icons/obj/weapons.dmi' - icon_state = "tacknife3" - item_state = "knife" - force_divisor = 0.15 - applies_material_colour = 0 - -/obj/item/weapon/material/knife/hook - name = "meat hook" - desc = "A sharp, metal hook what sticks into things." - icon_state = "hook_knife" - -/obj/item/weapon/material/knife/ritual - name = "ritual knife" - desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - applies_material_colour = 0 - -/obj/item/weapon/material/knife/table - name = "table knife" - icon = 'icons/obj/kitchen.dmi' - icon_state = "knife_table" - sharp = FALSE // blunted tip - force_divisor = 0.1 - -/obj/item/weapon/material/knife/table/plastic - default_material = "plastic" - -/obj/item/weapon/material/knife/butch - name = "butcher's cleaver" - icon_state = "cleaver" - desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." - force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/weapon/material/knife/machete - name = "machete" - desc = "A sharp machete often found in survival kits." - icon_state = "machete" - force_divisor = 0.3 // 18 when hardness 60 (steel) - attack_verb = list("slashed", "chopped", "gouged", "ripped", "cut") - can_cleave = TRUE //Now hatchets inherit from the machete, and thus knives. Tables turned. - slot_flags = SLOT_BELT - default_material = "plasteel" //VOREStation Edit - -/obj/item/weapon/material/knife/machete/cyborg - name = "integrated machete" - desc = "A sharp machete often found attached to robots." - unbreakable = TRUE - -/obj/item/weapon/material/knife/tacknife/survival - name = "survival knife" - desc = "A hunting grade survival knife." - icon = 'icons/obj/kitchen.dmi' - icon_state = "survivalknife" - item_state = "knife" - applies_material_colour = FALSE - default_material = "plasteel" //VOREStation Edit - toolspeed = 2 // Use a real axe if you want to chop logs. - -/obj/item/weapon/material/knife/stone - name = "stone blade" - desc = "A crude blade made by chipping away at a piece of flint." - icon = 'icons/obj/weapons_vr.dmi' - icon_state = "stone_blade" - applies_material_colour = FALSE - fragile = TRUE - dulled = TRUE - edge = TRUE - sharp = TRUE - default_material = MAT_FLINT - -/obj/item/weapon/material/knife/stone/wood - name = "stone knife" - desc = "A crude blade of flint with a wooden handle, secured with plant fibers twined into sturdy ropes. Useful for cutting, stabbing, slicing, and even shearing." - icon_state = "stone_wood_knife" - dulled = FALSE - fragile = FALSE - -/obj/item/weapon/material/knife/stone/bone - name = "stone knife" - desc = "A crude blade of flint with a bone handle, secured with plant fibers twined into sturdy ropes. Useful for cutting, stabbing, slicing, and even shearing." - icon_state = "stone_bone_knife" - dulled = FALSE - fragile = FALSE +/obj/item/weapon/material/butterfly + name = "butterfly knife" + desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." + //description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave. //CHOMP Remove + icon_state = "butterflyknife" + item_state = null + hitsound = null + var/active = 0 + w_class = ITEMSIZE_SMALL + attack_verb = list("patted", "tapped") + force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) + thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) + drop_sound = 'sound/items/drop/knife.ogg' + pickup_sound = 'sound/items/pickup/knife.ogg' + +/obj/item/weapon/material/butterfly/update_force() + if(active) + edge = TRUE + sharp = TRUE + ..() //Updates force. + throwforce = max(3,force-3) + hitsound = 'sound/weapons/bladeslice.ogg' + icon_state += "_open" + w_class = ITEMSIZE_NORMAL + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + else + force = 3 + edge = FALSE + sharp = FALSE + hitsound = initial(hitsound) + icon_state = initial(icon_state) + w_class = initial(w_class) + attack_verb = initial(attack_verb) + +/obj/item/weapon/material/butterfly/switchblade + name = "switchblade" + desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." + icon_state = "switchblade" + +/obj/item/weapon/material/butterfly/boxcutter + name = "box cutter" + desc = "A thin, inexpensive razor-blade knife designed to open cardboard boxes." + icon_state = "boxcutter" + force_divisor = 0.1 // 6 when wielded with hardness 60 (steel) + thrown_force_divisor = 0.2 // 4 when thrown with weight 20 (steel) + +/obj/item/weapon/material/butterfly/attack_self(mob/user) + active = !active + update_force() + + if(user) + if(active) + to_chat(user, "You flip out \the [src].") + playsound(src, 'sound/weapons/flipblade.ogg', 15, 1) + else + to_chat(user, "\The [src] can now be concealed.") + add_fingerprint(user) + +/* + * Kitchen knives + */ +/obj/item/weapon/material/knife + name = "kitchen knife" + icon = 'icons/obj/kitchen.dmi' + icon_state = "knife" + desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." + //description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave. //CHOMP Remove + sharp = TRUE + edge = TRUE + force_divisor = 0.15 // 9 when wielded with hardness 60 (steel) + matter = list(MAT_STEEL = 12000) + origin_tech = list(TECH_MATERIAL = 1) + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + drop_sound = 'sound/items/drop/knife.ogg' + +// These no longer inherit from hatchets. +/obj/item/weapon/material/knife/tacknife + name = "tactical knife" + desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife" + item_state = "knife" + force_divisor = 0.25 //15 when hardness 60 (steel) + attack_verb = list("stabbed", "chopped", "cut") + applies_material_colour = 1 + +/obj/item/weapon/material/knife/tacknife/combatknife + name = "combat knife" + desc = "If only you had a boot to put it in." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife2" + item_state = "knife" + force_divisor = 0.34 // 20 with hardness 60 (steel) + thrown_force_divisor = 1.75 // 20 with weight 20 (steel) + attack_verb = list("sliced", "stabbed", "chopped", "cut") + applies_material_colour = 1 + +// Identical to the tactical knife but nowhere near as stabby. +// Kind of like the toy esword compared to the real thing. +/obj/item/weapon/material/knife/tacknife/boot + name = "boot knife" + desc = "A small fixed-blade knife for putting inside a boot." + icon = 'icons/obj/weapons.dmi' + icon_state = "tacknife3" + item_state = "knife" + force_divisor = 0.15 + applies_material_colour = 0 + +/obj/item/weapon/material/knife/hook + name = "meat hook" + desc = "A sharp, metal hook what sticks into things." + icon_state = "hook_knife" + +/obj/item/weapon/material/knife/ritual + name = "ritual knife" + desc = "The unearthly energies that once powered this blade are now dormant." + icon = 'icons/obj/wizard.dmi' + icon_state = "render" + applies_material_colour = 0 + +/obj/item/weapon/material/knife/table + name = "table knife" + icon = 'icons/obj/kitchen.dmi' + icon_state = "knife_table" + sharp = FALSE // blunted tip + force_divisor = 0.1 + +/obj/item/weapon/material/knife/table/plastic + default_material = "plastic" + +/obj/item/weapon/material/knife/butch + name = "butcher's cleaver" + icon_state = "cleaver" + desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." + force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) + attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/material/knife/machete + name = "machete" + desc = "A sharp machete often found in survival kits." + icon_state = "machete" + force_divisor = 0.3 // 18 when hardness 60 (steel) + attack_verb = list("slashed", "chopped", "gouged", "ripped", "cut") + can_cleave = TRUE //Now hatchets inherit from the machete, and thus knives. Tables turned. + slot_flags = SLOT_BELT + default_material = "plasteel" //VOREStation Edit + +/obj/item/weapon/material/knife/machete/cyborg + name = "integrated machete" + desc = "A sharp machete often found attached to robots." + unbreakable = TRUE + +/obj/item/weapon/material/knife/tacknife/survival + name = "survival knife" + desc = "A hunting grade survival knife." + icon = 'icons/obj/kitchen.dmi' + icon_state = "survivalknife" + item_state = "knife" + applies_material_colour = FALSE + default_material = "plasteel" //VOREStation Edit + toolspeed = 2 // Use a real axe if you want to chop logs. + +/obj/item/weapon/material/knife/stone + name = "stone blade" + desc = "A crude blade made by chipping away at a piece of flint." + icon = 'icons/obj/weapons_vr.dmi' + icon_state = "stone_blade" + applies_material_colour = FALSE + fragile = TRUE + dulled = TRUE + edge = TRUE + sharp = TRUE + default_material = MAT_FLINT + +/obj/item/weapon/material/knife/stone/wood + name = "stone knife" + desc = "A crude blade of flint with a wooden handle, secured with plant fibers twined into sturdy ropes. Useful for cutting, stabbing, slicing, and even shearing." + icon_state = "stone_wood_knife" + dulled = FALSE + fragile = FALSE + +/obj/item/weapon/material/knife/stone/bone + name = "stone knife" + desc = "A crude blade of flint with a bone handle, secured with plant fibers twined into sturdy ropes. Useful for cutting, stabbing, slicing, and even shearing." + icon_state = "stone_bone_knife" + dulled = FALSE + fragile = FALSE diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 2bd785d369..b441c7f95e 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -1,184 +1,184 @@ -// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM. -// This class of weapons takes force and appearance data from a material datum. -// They are also fragile based on material data and many can break/smash apart. -/obj/item/weapon/material - health = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - gender = NEUTER - throw_speed = 3 - throw_range = 7 - w_class = ITEMSIZE_NORMAL - sharp = FALSE - edge = FALSE - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_material.dmi', - ) - - var/applies_material_colour = 1 - var/unbreakable = 0 //Doesn't lose health - var/fragile = 0 //Shatters when it dies - var/dulled = 0 //Has gone dull - var/can_dull = 1 //Can it go dull? - var/force_divisor = 0.5 - var/thrown_force_divisor = 0.5 - var/dulled_divisor = 0.5 //Just drops the damage by half - var/default_material = MAT_STEEL - var/datum/material/material - var/drops_debris = 1 - var/named_from_material = 1 //YW EDIT, Does it prepend the material's name to it's name? - -/obj/item/weapon/material/New(var/newloc, var/material_key) - ..(newloc) - if(!material_key) - material_key = default_material - set_material(material_key) - if(!material) - qdel(src) - return - - matter = material.get_matter() - if(matter.len) - for(var/material_type in matter) - if(!isnull(matter[material_type])) - matter[material_type] *= force_divisor // May require a new var instead. - - if(!(material.conductive)) - src.flags |= NOCONDUCT - -/obj/item/weapon/material/get_material() - return material - -/obj/item/weapon/material/proc/update_force() - if(edge || sharp) - force = material.get_edge_damage() - else - force = material.get_blunt_damage() - force = round(force*force_divisor) - if(dulled) - force = round(force*dulled_divisor) - throwforce = round(material.get_blunt_damage()*thrown_force_divisor) - //spawn(1) - // to_world("[src] has force [force] and throwforce [throwforce] when made from default material [material.name]") - -/obj/item/weapon/material/proc/set_material(var/new_material) - material = get_material_by_name(new_material) - if(!material) - qdel(src) - else - if(named_from_material) //YW EDIT - name = "[material.display_name] [initial(name)]" - health = round(material.integrity/10) - if(applies_material_colour) - color = material.icon_colour - if(material.products_need_process()) - START_PROCESSING(SSobj, src) - update_force() - -/obj/item/weapon/material/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/weapon/material/apply_hit_effect() - ..() - if(!unbreakable) - if(material.is_brittle()) - health = 0 - else if(!prob(material.hardness)) - health-- - check_health() - -/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/whetstone)) - var/obj/item/weapon/whetstone/whet = W - repair(whet.repair_amount, whet.repair_time, user) - if(istype(W, /obj/item/weapon/material/sharpeningkit)) - var/obj/item/weapon/material/sharpeningkit/SK = W - repair(SK.repair_amount, SK.repair_time, user) - ..() - -/obj/item/weapon/material/proc/check_health(var/consumed) - if(health<=0) - health = 0 - - if(fragile) - shatter(consumed) - else if(!dulled && can_dull) - dull() - -/obj/item/weapon/material/proc/shatter(var/consumed) - var/turf/T = get_turf(src) - T.visible_message("\The [src] [material.destruction_desc]!") - if(istype(loc, /mob/living)) - var/mob/living/M = loc - M.drop_from_inventory(src) - playsound(src, "shatter", 70, 1) - if(!consumed && drops_debris) material.place_shard(T) - qdel(src) - -/obj/item/weapon/material/proc/dull() - var/turf/T = get_turf(src) - T.visible_message("\The [src] goes dull!") - playsound(src, "shatter", 70, 1) - dulled = 1 - if(is_sharp() || has_edge()) - sharp = FALSE - edge = FALSE - -/obj/item/weapon/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user) - if(!fragile) - if(health < initial(health)) - user.visible_message("[user] begins repairing \the [src].", "You begin repairing \the [src].") - if(do_after(user, repair_time)) - user.visible_message("[user] has finished repairing \the [src]", "You finish repairing \the [src].") - health = min(health + repair_amount, initial(health)) - dulled = 0 - sharp = initial(sharp) - edge = initial(edge) - else - to_chat(user, "[src] doesn't need repairs.") - else - to_chat(user, "You can't repair \the [src].") - return - -/obj/item/weapon/material/proc/sharpen(var/material, var/sharpen_time, var/kit, mob/living/M) - if(!fragile && src.material.can_sharpen) - if(health < initial(health)) - to_chat(M, "You should repair [src] first. Try using [kit] on it.") - return FALSE - M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].") - if(do_after(usr, sharpen_time)) - M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].") - src.set_material(material) - return TRUE - else - to_chat(M, "You can't sharpen and re-edge [src].") - return FALSE - -/* -Commenting this out pending rebalancing of radiation based on small objects. -/obj/item/weapon/material/process() - if(!material.radioactivity) - return - for(var/mob/living/L in range(1,src)) - L.apply_effect(round(material.radioactivity/30),IRRADIATE,0) -*/ - -/* -// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately. -/obj/item/weapon/material/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - TemperatureAct(exposed_temperature) - -// This might need adjustment. Will work that out later. -/obj/item/weapon/material/proc/TemperatureAct(temperature) - health -= material.combustion_effect(get_turf(src), temperature, 0.1) - check_health(1) - -/obj/item/weapon/material/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(material.ignition_point && WT.remove_fuel(0, user)) - TemperatureAct(150) - else - return ..() -*/ +// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM. +// This class of weapons takes force and appearance data from a material datum. +// They are also fragile based on material data and many can break/smash apart. +/obj/item/weapon/material + health = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + gender = NEUTER + throw_speed = 3 + throw_range = 7 + w_class = ITEMSIZE_NORMAL + sharp = FALSE + edge = FALSE + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_material.dmi', + ) + + var/applies_material_colour = 1 + var/unbreakable = 0 //Doesn't lose health + var/fragile = 0 //Shatters when it dies + var/dulled = 0 //Has gone dull + var/can_dull = 1 //Can it go dull? + var/force_divisor = 0.5 + var/thrown_force_divisor = 0.5 + var/dulled_divisor = 0.5 //Just drops the damage by half + var/default_material = MAT_STEEL + var/datum/material/material + var/drops_debris = 1 + var/named_from_material = 1 //YW EDIT, Does it prepend the material's name to it's name? + +/obj/item/weapon/material/New(var/newloc, var/material_key) + ..(newloc) + if(!material_key) + material_key = default_material + set_material(material_key) + if(!material) + qdel(src) + return + + matter = material.get_matter() + if(matter.len) + for(var/material_type in matter) + if(!isnull(matter[material_type])) + matter[material_type] *= force_divisor // May require a new var instead. + + if(!(material.conductive)) + src.flags |= NOCONDUCT + +/obj/item/weapon/material/get_material() + return material + +/obj/item/weapon/material/proc/update_force() + if(edge || sharp) + force = material.get_edge_damage() + else + force = material.get_blunt_damage() + force = round(force*force_divisor) + if(dulled) + force = round(force*dulled_divisor) + throwforce = round(material.get_blunt_damage()*thrown_force_divisor) + //spawn(1) + // to_world("[src] has force [force] and throwforce [throwforce] when made from default material [material.name]") + +/obj/item/weapon/material/proc/set_material(var/new_material) + material = get_material_by_name(new_material) + if(!material) + qdel(src) + else + if(named_from_material) //YW EDIT + name = "[material.display_name] [initial(name)]" + health = round(material.integrity/10) + if(applies_material_colour) + color = material.icon_colour + if(material.products_need_process()) + START_PROCESSING(SSobj, src) + update_force() + +/obj/item/weapon/material/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/weapon/material/apply_hit_effect() + ..() + if(!unbreakable) + if(material.is_brittle()) + health = 0 + else if(!prob(material.hardness)) + health-- + check_health() + +/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/whetstone)) + var/obj/item/weapon/whetstone/whet = W + repair(whet.repair_amount, whet.repair_time, user) + if(istype(W, /obj/item/weapon/material/sharpeningkit)) + var/obj/item/weapon/material/sharpeningkit/SK = W + repair(SK.repair_amount, SK.repair_time, user) + ..() + +/obj/item/weapon/material/proc/check_health(var/consumed) + if(health<=0) + health = 0 + + if(fragile) + shatter(consumed) + else if(!dulled && can_dull) + dull() + +/obj/item/weapon/material/proc/shatter(var/consumed) + var/turf/T = get_turf(src) + T.visible_message("\The [src] [material.destruction_desc]!") + if(istype(loc, /mob/living)) + var/mob/living/M = loc + M.drop_from_inventory(src) + playsound(src, "shatter", 70, 1) + if(!consumed && drops_debris) material.place_shard(T) + qdel(src) + +/obj/item/weapon/material/proc/dull() + var/turf/T = get_turf(src) + T.visible_message("\The [src] goes dull!") + playsound(src, "shatter", 70, 1) + dulled = 1 + if(is_sharp() || has_edge()) + sharp = FALSE + edge = FALSE + +/obj/item/weapon/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user) + if(!fragile) + if(health < initial(health)) + user.visible_message("[user] begins repairing \the [src].", "You begin repairing \the [src].") + if(do_after(user, repair_time)) + user.visible_message("[user] has finished repairing \the [src]", "You finish repairing \the [src].") + health = min(health + repair_amount, initial(health)) + dulled = 0 + sharp = initial(sharp) + edge = initial(edge) + else + to_chat(user, "[src] doesn't need repairs.") + else + to_chat(user, "You can't repair \the [src].") + return + +/obj/item/weapon/material/proc/sharpen(var/material, var/sharpen_time, var/kit, mob/living/M) + if(!fragile && src.material.can_sharpen) + if(health < initial(health)) + to_chat(M, "You should repair [src] first. Try using [kit] on it.") + return FALSE + M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].") + if(do_after(usr, sharpen_time)) + M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].") + src.set_material(material) + return TRUE + else + to_chat(M, "You can't sharpen and re-edge [src].") + return FALSE + +/* +Commenting this out pending rebalancing of radiation based on small objects. +/obj/item/weapon/material/process() + if(!material.radioactivity) + return + for(var/mob/living/L in range(1,src)) + L.apply_effect(round(material.radioactivity/30),IRRADIATE,0) +*/ + +/* +// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately. +/obj/item/weapon/material/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + TemperatureAct(exposed_temperature) + +// This might need adjustment. Will work that out later. +/obj/item/weapon/material/proc/TemperatureAct(temperature) + health -= material.combustion_effect(get_turf(src), temperature, 0.1) + check_health(1) + +/obj/item/weapon/material/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(material.ignition_point && WT.remove_fuel(0, user)) + TemperatureAct(150) + else + return ..() +*/ diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index e18c8915d2..b527ad1689 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -1,229 +1,229 @@ -/obj/item/weapon/material/harpoon - name = "harpoon" - sharp = TRUE - edge = FALSE - desc = "Tharr she blows!" - icon_state = "harpoon" - item_state = "harpoon" - force_divisor = 0.3 // 18 with hardness 60 (steel) - attack_verb = list("jabbed","stabbed","ripped") - -/obj/item/weapon/material/knife/machete/hatchet - name = "hatchet" - desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/weapons.dmi' - icon_state = "hatchet" - force_divisor = 0.2 // 12 with hardness 60 (steel) - thrown_force_divisor = 0.75 // 15 with weight 20 (steel) - w_class = ITEMSIZE_SMALL - sharp = TRUE - edge = TRUE - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) - attack_verb = list("chopped", "torn", "cut") - applies_material_colour = 0 - drop_sound = 'sound/items/drop/axe.ogg' - pickup_sound = 'sound/items/pickup/axe.ogg' -/* VOREStation Removal - We have one already -/obj/item/weapon/material/knife/machete/hatchet/stone - name = "sharp rock" - desc = "The secret is to bang the rocks together, guys." - force_divisor = 0.2 - icon_state = "rock" - item_state = "rock" - attack_verb = list("chopped", "torn", "cut") - -/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material) - var/old_name = name - . = ..() - name = old_name -*/ -/obj/item/weapon/material/knife/machete/hatchet/unathiknife - name = "duelling knife" - desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." - icon = 'icons/obj/weapons.dmi' - icon_state = "unathiknife" - attack_verb = list("ripped", "torn", "cut") - can_cleave = FALSE - var/hits = 0 - -/obj/item/weapon/material/knife/machete/hatchet/unathiknife/attack(mob/M as mob, mob/user as mob) - if(hits > 0) - return - var/obj/item/I = user.get_inactive_hand() - if(istype(I, /obj/item/weapon/material/knife/machete/hatchet/unathiknife)) - hits ++ - var/obj/item/weapon/W = I - W.attack(M, user) - W.afterattack(M, user) - ..() - -/obj/item/weapon/material/knife/machete/hatchet/unathiknife/afterattack(mob/M as mob, mob/user as mob) - hits = initial(hits) - ..() - -/obj/item/weapon/material/minihoe // -- Numbers - name = "mini hoe" - desc = "It's used for removing weeds or scratching your back." - icon = 'icons/obj/weapons.dmi' - icon_state = "hoe" - force_divisor = 0.25 // 5 with weight 20 (steel) - thrown_force_divisor = 0.25 // as above - dulled_divisor = 0.75 //Still metal on a long pole - w_class = ITEMSIZE_SMALL - attack_verb = list("slashed", "sliced", "cut", "clawed") - -/obj/item/weapon/material/snow/snowball - name = "loose packed snowball" - desc = "A fun snowball. Throw it at your friends!" - icon = 'icons/obj/weapons.dmi' - icon_state = "snowball" - default_material = MAT_SNOW - health = 1 - fragile = 1 - force_divisor = 0.01 - thrown_force_divisor = 0.10 - w_class = ITEMSIZE_SMALL - attack_verb = list("mushed", "splatted", "splooshed", "splushed") // Words that totally exist. - -/obj/item/weapon/material/snow/snowball/attack_self(mob/user as mob) - if(user.a_intent == I_HURT) - to_chat(user, SPAN_NOTICE("You smash the snowball in your hand.")) - var/atom/S = new /obj/item/stack/material/snow(user.loc) - qdel(src) - user.put_in_hands(S) - else - to_chat(user, SPAN_NOTICE("You start compacting the snowball.")) - if(do_after(user, 2 SECONDS)) - var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc) - qdel(src) - user.put_in_hands(S) - -/obj/item/weapon/material/snow/snowball/reinforced - name = "snowball" - desc = "A well-formed and fun snowball. It looks kind of dangerous." - //icon_state = "reinf-snowball" - force_divisor = 0.20 - thrown_force_divisor = 0.25 - -/obj/item/weapon/material/whip - name = "whip" - desc = "A tool used to discipline animals, or look cool. Mostly the latter." - description_info = "Help - Standard attack, no modifiers.
                    \ - Disarm - Disarming strike. Attempts to disarm the target at range, similar to an unarmed disarm. Additionally, will force the target (if possible) to move away from you.
                    \ - Grab - Grappling strike. Attempts to pull the target toward you. This can also move objects.
                    \ - Harm - A standard strike with a small chance to disarm." - icon = 'icons/obj/weapons.dmi' - icon_state = "whip" - item_state = "chain" - default_material = MAT_LEATHER - slot_flags = SLOT_BELT - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 2) - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - force_divisor = 0.15 - thrown_force_divisor = 0.25 - reach = 2 - - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - -/obj/item/weapon/material/whip/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - ..() - - if(!proximity) - return - - if(istype(A, /atom/movable)) - var/atom/movable/AM = A - if(AM.anchored) - to_chat(user, "\The [AM] won't budge.") - return - - else - if(!istype(AM, /obj/item)) - user.visible_message("\The [AM] is pulled along by \the [src]!") - AM.Move(get_step(AM, get_dir(AM, src))) - return - - else - user.visible_message("\The [AM] is snatched by \the [src]!") - AM.throw_at(user, reach, 0.1, user) - -/obj/item/weapon/material/whip/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if(user.a_intent) - switch(user.a_intent) - if(I_HURT) - if(prob(10) && istype(target, /mob/living/carbon/human) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND))) - to_chat(target, "\The [src] rips at your hands!") - ranged_disarm(target) - if(I_DISARM) - if(prob(min(90, force * 3)) && istype(target, /mob/living/carbon/human) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND))) - ranged_disarm(target) - else - target.visible_message("\The [src] sends \the [target] stumbling away.") - target.Move(get_step(target,get_dir(user,target))) - if(I_GRAB) - var/turf/STurf = get_turf(target) - spawn(2) - playsound(STurf, 'sound/effects/snap.ogg', 60, 1) - target.visible_message("\The [src] yanks \the [target] towards \the [user]!") - target.throw_at(get_turf(get_step(user,get_dir(user,target))), 2, 1, src) - - ..() - -/obj/item/weapon/material/whip/proc/ranged_disarm(var/mob/living/carbon/human/H, var/mob/living/user) - if(istype(H)) - var/list/holding = list(H.get_active_hand() = 40, H.get_inactive_hand() = 20) - - if(user.zone_sel in list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND)) - for(var/obj/item/weapon/gun/W in holding) - if(W && prob(holding[W])) - var/list/turfs = list() - for(var/turf/T in view()) - turfs += T - if(turfs.len) - var/turf/target = pick(turfs) - visible_message("[H]'s [W] goes off due to \the [src]!") - return W.afterattack(target,H) - - if(!(H.species.flags & NO_SLIP) && prob(10) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))) - var/armor_check = H.run_armor_check(user.zone_sel, "melee") - H.apply_effect(3, WEAKEN, armor_check) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(armor_check < 60) - visible_message("\The [src] has tripped [H]!") - else - visible_message("\The [src] attempted to trip [H]!") - return - - else - if(H.break_all_grabs(user)) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return - - if(user.zone_sel in list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND)) - for(var/obj/item/I in holding) - if(I && prob(holding[I])) - H.drop_from_inventory(I) - visible_message("\The [src] has disarmed [H]!") - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return - -/obj/item/weapon/material/whip/attack_self(mob/user) - user.visible_message("\The [user] cracks \the [src]!") - playsound(src, 'sound/effects/snap.ogg', 50, 1) - - -/obj/item/weapon/material/knife/machete/hatchet/stone - name = "hatchet" - desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/weapons_vr.dmi' - icon_state = "stone_wood_axe" - default_material = MAT_FLINT - origin_tech = list() - applies_material_colour = FALSE - -/obj/item/weapon/material/knife/machete/hatchet/stone/bone - icon_state = "stone_bone_axe" +/obj/item/weapon/material/harpoon + name = "harpoon" + sharp = TRUE + edge = FALSE + desc = "Tharr she blows!" + icon_state = "harpoon" + item_state = "harpoon" + force_divisor = 0.3 // 18 with hardness 60 (steel) + attack_verb = list("jabbed","stabbed","ripped") + +/obj/item/weapon/material/knife/machete/hatchet + name = "hatchet" + desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." + icon = 'icons/obj/weapons.dmi' + icon_state = "hatchet" + force_divisor = 0.2 // 12 with hardness 60 (steel) + thrown_force_divisor = 0.75 // 15 with weight 20 (steel) + w_class = ITEMSIZE_SMALL + sharp = TRUE + edge = TRUE + origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) + attack_verb = list("chopped", "torn", "cut") + applies_material_colour = 0 + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' +/* VOREStation Removal - We have one already +/obj/item/weapon/material/knife/machete/hatchet/stone + name = "sharp rock" + desc = "The secret is to bang the rocks together, guys." + force_divisor = 0.2 + icon_state = "rock" + item_state = "rock" + attack_verb = list("chopped", "torn", "cut") + +/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material) + var/old_name = name + . = ..() + name = old_name +*/ +/obj/item/weapon/material/knife/machete/hatchet/unathiknife + name = "duelling knife" + desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." + icon = 'icons/obj/weapons.dmi' + icon_state = "unathiknife" + attack_verb = list("ripped", "torn", "cut") + can_cleave = FALSE + var/hits = 0 + +/obj/item/weapon/material/knife/machete/hatchet/unathiknife/attack(mob/M as mob, mob/user as mob) + if(hits > 0) + return + var/obj/item/I = user.get_inactive_hand() + if(istype(I, /obj/item/weapon/material/knife/machete/hatchet/unathiknife)) + hits ++ + var/obj/item/weapon/W = I + W.attack(M, user) + W.afterattack(M, user) + ..() + +/obj/item/weapon/material/knife/machete/hatchet/unathiknife/afterattack(mob/M as mob, mob/user as mob) + hits = initial(hits) + ..() + +/obj/item/weapon/material/minihoe // -- Numbers + name = "mini hoe" + desc = "It's used for removing weeds or scratching your back." + icon = 'icons/obj/weapons.dmi' + icon_state = "hoe" + force_divisor = 0.25 // 5 with weight 20 (steel) + thrown_force_divisor = 0.25 // as above + dulled_divisor = 0.75 //Still metal on a long pole + w_class = ITEMSIZE_SMALL + attack_verb = list("slashed", "sliced", "cut", "clawed") + +/obj/item/weapon/material/snow/snowball + name = "loose packed snowball" + desc = "A fun snowball. Throw it at your friends!" + icon = 'icons/obj/weapons.dmi' + icon_state = "snowball" + default_material = MAT_SNOW + health = 1 + fragile = 1 + force_divisor = 0.01 + thrown_force_divisor = 0.10 + w_class = ITEMSIZE_SMALL + attack_verb = list("mushed", "splatted", "splooshed", "splushed") // Words that totally exist. + +/obj/item/weapon/material/snow/snowball/attack_self(mob/user as mob) + if(user.a_intent == I_HURT) + to_chat(user, SPAN_NOTICE("You smash the snowball in your hand.")) + var/atom/S = new /obj/item/stack/material/snow(user.loc) + qdel(src) + user.put_in_hands(S) + else + to_chat(user, SPAN_NOTICE("You start compacting the snowball.")) + if(do_after(user, 2 SECONDS)) + var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc) + qdel(src) + user.put_in_hands(S) + +/obj/item/weapon/material/snow/snowball/reinforced + name = "snowball" + desc = "A well-formed and fun snowball. It looks kind of dangerous." + //icon_state = "reinf-snowball" + force_divisor = 0.20 + thrown_force_divisor = 0.25 + +/obj/item/weapon/material/whip + name = "whip" + desc = "A tool used to discipline animals, or look cool. Mostly the latter." + description_info = "Help - Standard attack, no modifiers.
                    \ + Disarm - Disarming strike. Attempts to disarm the target at range, similar to an unarmed disarm. Additionally, will force the target (if possible) to move away from you.
                    \ + Grab - Grappling strike. Attempts to pull the target toward you. This can also move objects.
                    \ + Harm - A standard strike with a small chance to disarm." + icon = 'icons/obj/weapons.dmi' + icon_state = "whip" + item_state = "chain" + default_material = MAT_LEATHER + slot_flags = SLOT_BELT + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 2) + attack_verb = list("flogged", "whipped", "lashed", "disciplined") + force_divisor = 0.15 + thrown_force_divisor = 0.25 + reach = 2 + + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + +/obj/item/weapon/material/whip/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) + ..() + + if(!proximity) + return + + if(istype(A, /atom/movable)) + var/atom/movable/AM = A + if(AM.anchored) + to_chat(user, "\The [AM] won't budge.") + return + + else + if(!istype(AM, /obj/item)) + user.visible_message("\The [AM] is pulled along by \the [src]!") + AM.Move(get_step(AM, get_dir(AM, src))) + return + + else + user.visible_message("\The [AM] is snatched by \the [src]!") + AM.throw_at(user, reach, 0.1, user) + +/obj/item/weapon/material/whip/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + if(user.a_intent) + switch(user.a_intent) + if(I_HURT) + if(prob(10) && istype(target, /mob/living/carbon/human) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND))) + to_chat(target, "\The [src] rips at your hands!") + ranged_disarm(target) + if(I_DISARM) + if(prob(min(90, force * 3)) && istype(target, /mob/living/carbon/human) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND))) + ranged_disarm(target) + else + target.visible_message("\The [src] sends \the [target] stumbling away.") + target.Move(get_step(target,get_dir(user,target))) + if(I_GRAB) + var/turf/STurf = get_turf(target) + spawn(2) + playsound(STurf, 'sound/effects/snap.ogg', 60, 1) + target.visible_message("\The [src] yanks \the [target] towards \the [user]!") + target.throw_at(get_turf(get_step(user,get_dir(user,target))), 2, 1, src) + + ..() + +/obj/item/weapon/material/whip/proc/ranged_disarm(var/mob/living/carbon/human/H, var/mob/living/user) + if(istype(H)) + var/list/holding = list(H.get_active_hand() = 40, H.get_inactive_hand() = 20) + + if(user.zone_sel in list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND)) + for(var/obj/item/weapon/gun/W in holding) + if(W && prob(holding[W])) + var/list/turfs = list() + for(var/turf/T in view()) + turfs += T + if(turfs.len) + var/turf/target = pick(turfs) + visible_message("[H]'s [W] goes off due to \the [src]!") + return W.afterattack(target,H) + + if(!(H.species.flags & NO_SLIP) && prob(10) && (user.zone_sel in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))) + var/armor_check = H.run_armor_check(user.zone_sel, "melee") + H.apply_effect(3, WEAKEN, armor_check) + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + if(armor_check < 60) + visible_message("\The [src] has tripped [H]!") + else + visible_message("\The [src] attempted to trip [H]!") + return + + else + if(H.break_all_grabs(user)) + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + return + + if(user.zone_sel in list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND)) + for(var/obj/item/I in holding) + if(I && prob(holding[I])) + H.drop_from_inventory(I) + visible_message("\The [src] has disarmed [H]!") + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + return + +/obj/item/weapon/material/whip/attack_self(mob/user) + user.visible_message("\The [user] cracks \the [src]!") + playsound(src, 'sound/effects/snap.ogg', 50, 1) + + +/obj/item/weapon/material/knife/machete/hatchet/stone + name = "hatchet" + desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." + icon = 'icons/obj/weapons_vr.dmi' + icon_state = "stone_wood_axe" + default_material = MAT_FLINT + origin_tech = list() + applies_material_colour = FALSE + +/obj/item/weapon/material/knife/machete/hatchet/stone/bone + icon_state = "stone_bone_axe" diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index e0a75ca8bd..8aac4dca4b 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -1,86 +1,86 @@ -/obj/item/weapon/material/sword - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - slot_flags = SLOT_BELT - force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel) - thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel) - sharp = TRUE - edge = TRUE - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - -/obj/item/weapon/material/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(unique_parry_check(user, attacker, damage_source) && prob(50)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) - return 1 - return 0 - -/obj/item/weapon/material/sword/katana - name = "katana" - desc = "Woefully underpowered in D20. This one looks pretty sharp." - icon_state = "katana" - slot_flags = SLOT_BELT | SLOT_BACK - -/obj/item/weapon/material/sword/katana/caneblade - name = "cane blade" - desc = "Used for making people fall over instead of helping them stand up." - icon_state = "caneblade" - item_state = "caneblade" - -/obj/item/weapon/material/sword/rapier - name = "rapier" - desc = "A slender, fancy and sharply pointed sword." - icon_state = "rapier" - item_state = "rapier" - slot_flags = SLOT_BELT - applies_material_colour = 0 - attack_verb = list("attacked", "stabbed", "prodded", "poked", "lunged") - edge = 0 //rapiers are pointy, but not cutty like other swords - -/obj/item/weapon/material/sword/longsword - name = "longsword" - desc = "A double-edged large blade." - icon_state = "longsword" - item_state = "longsword" - applies_material_colour = 0 - slot_flags = SLOT_BELT | SLOT_BACK - can_cleave = TRUE - -/obj/item/weapon/material/sword/sabre - name = "sabre" - desc = "A sharp curved sword, a favored weapon of pirates far in the past." - icon_state = "sabre" - item_state = "sabre" - applies_material_colour = 0 //messes up the hilt color otherwise - slot_flags = SLOT_BELT - -/obj/item/weapon/material/sword/battleaxe - name = "battleaxe" - desc = "A one handed battle axe, still a deadly weapon." - icon_state = "axe" - item_state = "axe" - slot_flags = SLOT_BACK - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - applies_material_colour = 0 - drop_sound = 'sound/items/drop/axe.ogg' - pickup_sound = 'sound/items/pickup/axe.ogg' - can_cleave = TRUE - -/obj/item/weapon/material/sword/battleaxe/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(unique_parry_check(user, attacker, damage_source) && prob(10)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) - return 1 - return 0 - -/obj/item/weapon/material/sword/gladius - name = "gladius" - desc = "An ancient short sword, designed to stab and cut." - icon_state = "gladius" - item_state = "gladius" - applies_material_colour = 0 - slot_flags = SLOT_BELT +/obj/item/weapon/material/sword + name = "claymore" + desc = "What are you standing around staring at this for? Get to killing!" + icon_state = "claymore" + slot_flags = SLOT_BELT + force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel) + thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel) + sharp = TRUE + edge = TRUE + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + +/obj/item/weapon/material/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(unique_parry_check(user, attacker, damage_source) && prob(50)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) + return 1 + return 0 + +/obj/item/weapon/material/sword/katana + name = "katana" + desc = "Woefully underpowered in D20. This one looks pretty sharp." + icon_state = "katana" + slot_flags = SLOT_BELT | SLOT_BACK + +/obj/item/weapon/material/sword/katana/caneblade + name = "cane blade" + desc = "Used for making people fall over instead of helping them stand up." + icon_state = "caneblade" + item_state = "caneblade" + +/obj/item/weapon/material/sword/rapier + name = "rapier" + desc = "A slender, fancy and sharply pointed sword." + icon_state = "rapier" + item_state = "rapier" + slot_flags = SLOT_BELT + applies_material_colour = 0 + attack_verb = list("attacked", "stabbed", "prodded", "poked", "lunged") + edge = 0 //rapiers are pointy, but not cutty like other swords + +/obj/item/weapon/material/sword/longsword + name = "longsword" + desc = "A double-edged large blade." + icon_state = "longsword" + item_state = "longsword" + applies_material_colour = 0 + slot_flags = SLOT_BELT | SLOT_BACK + can_cleave = TRUE + +/obj/item/weapon/material/sword/sabre + name = "sabre" + desc = "A sharp curved sword, a favored weapon of pirates far in the past." + icon_state = "sabre" + item_state = "sabre" + applies_material_colour = 0 //messes up the hilt color otherwise + slot_flags = SLOT_BELT + +/obj/item/weapon/material/sword/battleaxe + name = "battleaxe" + desc = "A one handed battle axe, still a deadly weapon." + icon_state = "axe" + item_state = "axe" + slot_flags = SLOT_BACK + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") + applies_material_colour = 0 + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' + can_cleave = TRUE + +/obj/item/weapon/material/sword/battleaxe/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(unique_parry_check(user, attacker, damage_source) && prob(10)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) + return 1 + return 0 + +/obj/item/weapon/material/sword/gladius + name = "gladius" + desc = "An ancient short sword, designed to stab and cut." + icon_state = "gladius" + item_state = "gladius" + applies_material_colour = 0 + slot_flags = SLOT_BELT diff --git a/code/game/objects/items/weapons/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm index dcfaad5801..12eaa25100 100644 --- a/code/game/objects/items/weapons/material/thrown.dm +++ b/code/game/objects/items/weapons/material/thrown.dm @@ -1,24 +1,24 @@ -/obj/item/weapon/material/star - name = "shuriken" - desc = "A sharp, perfectly weighted piece of metal." - icon_state = "star" - force_divisor = 0.1 // 6 with hardness 60 (steel) - thrown_force_divisor = 0.75 // 15 with weight 20 (steel) - throw_speed = 10 - throw_range = 15 - sharp = TRUE - edge = TRUE - -/obj/item/weapon/material/star/New() - ..() - src.pixel_x = rand(-12, 12) - src.pixel_y = rand(-12, 12) - -/obj/item/weapon/material/star/throw_impact(atom/hit_atom) - ..() - if(material.radioactivity>0 && istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - M.adjustToxLoss(rand(20,40)) - -/obj/item/weapon/material/star/ninja +/obj/item/weapon/material/star + name = "shuriken" + desc = "A sharp, perfectly weighted piece of metal." + icon_state = "star" + force_divisor = 0.1 // 6 with hardness 60 (steel) + thrown_force_divisor = 0.75 // 15 with weight 20 (steel) + throw_speed = 10 + throw_range = 15 + sharp = TRUE + edge = TRUE + +/obj/item/weapon/material/star/New() + ..() + src.pixel_x = rand(-12, 12) + src.pixel_y = rand(-12, 12) + +/obj/item/weapon/material/star/throw_impact(atom/hit_atom) + ..() + if(material.radioactivity>0 && istype(hit_atom,/mob/living)) + var/mob/living/M = hit_atom + M.adjustToxLoss(rand(20,40)) + +/obj/item/weapon/material/star/ninja default_material = "uranium" \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 55e5febbd6..e9c3ceac83 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -1,193 +1,193 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - */ - -/*################################################################## -##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## -####################################################################*/ - -//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn -//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. -//It also tidies stuff up elsewhere. - -/* - * Twohanded - */ -/obj/item/weapon/material/twohanded - w_class = ITEMSIZE_HUGE //CHOMP Edit - var/wielded = 0 - var/force_wielded = 0 - var/force_unwielded - var/wieldsound = null - var/unwieldsound = null - var/base_icon - var/base_name - var/unwielded_force_divisor = 0.25 - hitsound = "swing_hit" - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - -/obj/item/weapon/material/twohanded/update_held_icon() - var/mob/living/M = loc - if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M)) - wielded = 1 - force = force_wielded - name = "[base_name] (wielded)" - update_icon() - else - wielded = 0 - force = force_unwielded - name = "[base_name]" - update_icon() - ..() - -/obj/item/weapon/material/twohanded/update_force() - base_name = name - if(sharp || edge) - force_wielded = material.get_edge_damage() - else - force_wielded = material.get_blunt_damage() - force_wielded = round(force_wielded*force_divisor) - force_unwielded = round(force_wielded*unwielded_force_divisor) - force = force_unwielded - throwforce = round(force*thrown_force_divisor) - //to_world("[src] has unwielded force [force_unwielded], wielded force [force_wielded] and throwforce [throwforce] when made from default material [material.name]") - -/obj/item/weapon/material/twohanded/New() - ..() - update_icon() - -//Allow a small chance of parrying melee attacks when wielded - maybe generalize this to other weapons someday -/obj/item/weapon/material/twohanded/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(wielded && default_parry_check(user, attacker, damage_source) && prob(15)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) - return 1 - return 0 - -/obj/item/weapon/material/twohanded/update_icon() - icon_state = "[base_icon][wielded]" - item_state = icon_state - -/obj/item/weapon/material/twohanded/dropped() - ..() - if(wielded) - spawn(0) - update_held_icon() - -/* - * Fireaxe - */ -/obj/item/weapon/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - base_icon = "fireaxe" - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - description_info = "This weapon can cleave, striking nearby lesser, hostile enemies close to the primary target. It must be held in both hands to do this." - unwielded_force_divisor = 0.25 - force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor - dulled_divisor = 0.75 //Still metal on a stick - sharp = TRUE - edge = TRUE - w_class = ITEMSIZE_LARGE - slot_flags = SLOT_BACK - force_wielded = 30 - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - applies_material_colour = 0 - can_cleave = TRUE - drop_sound = 'sound/items/drop/axe.ogg' - pickup_sound = 'sound/items/pickup/axe.ogg' - -/obj/item/weapon/material/twohanded/fireaxe/update_held_icon() - var/mob/living/M = loc - if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full()) - wielded = 1 - pry = 1 - force = force_wielded - name = "[base_name] (wielded)" - update_icon() - else - wielded = 0 - pry = 0 - force = force_unwielded - name = "[base_name]" - update_icon() - ..() - -/obj/item/weapon/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - ..() - if(A && wielded) - if(istype(A,/obj/structure/window)) - var/obj/structure/window/W = A - W.shatter() - else if(istype(A,/obj/structure/grille)) - qdel(A) - else if(istype(A,/obj/effect/plant)) - var/obj/effect/plant/P = A - P.die_off() - -/obj/item/weapon/material/twohanded/fireaxe/scythe - icon_state = "scythe0" - base_icon = "scythe" - name = "scythe" - desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." - force_divisor = 0.65 - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2) - attack_verb = list("chopped", "sliced", "cut", "reaped") - -//spears, bay edition -/obj/item/weapon/material/twohanded/spear - icon_state = "spearglass0" - base_icon = "spearglass" - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - force = 10 - w_class = ITEMSIZE_HUGE //CHOMP Edit - slot_flags = SLOT_BACK - force_divisor = 0.5 // 15 when wielded with hardness 30 (glass) - unwielded_force_divisor = 0.375 - thrown_force_divisor = 1.5 // 22.5 when thrown with weight 15 (glass) - throw_speed = 3 - edge = FALSE - sharp = TRUE - hitsound = 'sound/weapons/bladeslice.ogg' - mob_throw_hit_sound = 'sound/weapons/pierce.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - default_material = "glass" - applies_material_colour = 0 - fragile = 1 //It's a haphazard thing of glass, wire, and steel - reach = 2 // Spears are long. - attackspeed = 14 - -//This is mostly for centaurs. -/obj/item/weapon/material/twohanded/spear/lance - name = "lance" - desc = "End him rightly" - icon = 'icons/obj/weapons_vr.dmi' - icon_state = "lance" - item_state = "lance" - force_divisor = 0.3 - force = 10 - thrown_force_divisor = 1 - default_material = "MAT_STEEL" - fragile = 0 - sharp = TRUE - edge = FALSE - -/obj/item/weapon/material/twohanded/riding_crop - name = "riding crop" - desc = "A rod, a little over a foot long with a widened grip and a thick, leather patch at the end. Used since the dawn of the West to control animals." - force_divisor = 0.05 //Required in order for the X attacks Y message to pop up. - unwielded_force_divisor = 1 // One here, too. - applies_material_colour = 1 - unbreakable = 1 - base_icon = "riding_crop" - icon_state = "riding_crop0" - attack_verb = list("cropped","spanked","swatted","smacked","peppered") - -/obj/item/weapon/material/twohanded/spear/flint - default_material = MAT_FLINT +/* Two-handed Weapons + * Contains: + * Twohanded + * Fireaxe + * Double-Bladed Energy Swords + */ + +/*################################################################## +##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## +####################################################################*/ + +//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn +//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. +//It also tidies stuff up elsewhere. + +/* + * Twohanded + */ +/obj/item/weapon/material/twohanded + w_class = ITEMSIZE_HUGE //CHOMP Edit + var/wielded = 0 + var/force_wielded = 0 + var/force_unwielded + var/wieldsound = null + var/unwieldsound = null + var/base_icon + var/base_name + var/unwielded_force_divisor = 0.25 + hitsound = "swing_hit" + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + +/obj/item/weapon/material/twohanded/update_held_icon() + var/mob/living/M = loc + if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M)) + wielded = 1 + force = force_wielded + name = "[base_name] (wielded)" + update_icon() + else + wielded = 0 + force = force_unwielded + name = "[base_name]" + update_icon() + ..() + +/obj/item/weapon/material/twohanded/update_force() + base_name = name + if(sharp || edge) + force_wielded = material.get_edge_damage() + else + force_wielded = material.get_blunt_damage() + force_wielded = round(force_wielded*force_divisor) + force_unwielded = round(force_wielded*unwielded_force_divisor) + force = force_unwielded + throwforce = round(force*thrown_force_divisor) + //to_world("[src] has unwielded force [force_unwielded], wielded force [force_wielded] and throwforce [throwforce] when made from default material [material.name]") + +/obj/item/weapon/material/twohanded/New() + ..() + update_icon() + +//Allow a small chance of parrying melee attacks when wielded - maybe generalize this to other weapons someday +/obj/item/weapon/material/twohanded/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(wielded && default_parry_check(user, attacker, damage_source) && prob(15)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) + return 1 + return 0 + +/obj/item/weapon/material/twohanded/update_icon() + icon_state = "[base_icon][wielded]" + item_state = icon_state + +/obj/item/weapon/material/twohanded/dropped() + ..() + if(wielded) + spawn(0) + update_held_icon() + +/* + * Fireaxe + */ +/obj/item/weapon/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri + icon_state = "fireaxe0" + base_icon = "fireaxe" + name = "fire axe" + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" + description_info = "This weapon can cleave, striking nearby lesser, hostile enemies close to the primary target. It must be held in both hands to do this." + unwielded_force_divisor = 0.25 + force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor + dulled_divisor = 0.75 //Still metal on a stick + sharp = TRUE + edge = TRUE + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + force_wielded = 30 + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") + applies_material_colour = 0 + can_cleave = TRUE + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' + +/obj/item/weapon/material/twohanded/fireaxe/update_held_icon() + var/mob/living/M = loc + if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full()) + wielded = 1 + pry = 1 + force = force_wielded + name = "[base_name] (wielded)" + update_icon() + else + wielded = 0 + pry = 0 + force = force_unwielded + name = "[base_name]" + update_icon() + ..() + +/obj/item/weapon/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) + if(!proximity) return + ..() + if(A && wielded) + if(istype(A,/obj/structure/window)) + var/obj/structure/window/W = A + W.shatter() + else if(istype(A,/obj/structure/grille)) + qdel(A) + else if(istype(A,/obj/effect/plant)) + var/obj/effect/plant/P = A + P.die_off() + +/obj/item/weapon/material/twohanded/fireaxe/scythe + icon_state = "scythe0" + base_icon = "scythe" + name = "scythe" + desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." + force_divisor = 0.65 + origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2) + attack_verb = list("chopped", "sliced", "cut", "reaped") + +//spears, bay edition +/obj/item/weapon/material/twohanded/spear + icon_state = "spearglass0" + base_icon = "spearglass" + name = "spear" + desc = "A haphazardly-constructed yet still deadly weapon of ancient design." + force = 10 + w_class = ITEMSIZE_HUGE //CHOMP Edit + slot_flags = SLOT_BACK + force_divisor = 0.5 // 15 when wielded with hardness 30 (glass) + unwielded_force_divisor = 0.375 + thrown_force_divisor = 1.5 // 22.5 when thrown with weight 15 (glass) + throw_speed = 3 + edge = FALSE + sharp = TRUE + hitsound = 'sound/weapons/bladeslice.ogg' + mob_throw_hit_sound = 'sound/weapons/pierce.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + default_material = "glass" + applies_material_colour = 0 + fragile = 1 //It's a haphazard thing of glass, wire, and steel + reach = 2 // Spears are long. + attackspeed = 14 + +//This is mostly for centaurs. +/obj/item/weapon/material/twohanded/spear/lance + name = "lance" + desc = "End him rightly" + icon = 'icons/obj/weapons_vr.dmi' + icon_state = "lance" + item_state = "lance" + force_divisor = 0.3 + force = 10 + thrown_force_divisor = 1 + default_material = "MAT_STEEL" + fragile = 0 + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/twohanded/riding_crop + name = "riding crop" + desc = "A rod, a little over a foot long with a widened grip and a thick, leather patch at the end. Used since the dawn of the West to control animals." + force_divisor = 0.05 //Required in order for the X attacks Y message to pop up. + unwielded_force_divisor = 1 // One here, too. + applies_material_colour = 1 + unbreakable = 1 + base_icon = "riding_crop" + icon_state = "riding_crop0" + attack_verb = list("cropped","spanked","swatted","smacked","peppered") + +/obj/item/weapon/material/twohanded/spear/flint + default_material = MAT_FLINT diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index e28f20019f..0f3b377d55 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -1,550 +1,550 @@ -/obj/item/weapon/melee/energy - var/active = 0 - var/active_force - var/active_throwforce - var/active_armourpen - var/active_w_class - var/active_embed_chance = 0 //In the off chance one of these is supposed to embed, you can just tweak this var - sharp = FALSE - edge = FALSE - armor_penetration = 0 - flags = NOCONDUCT | NOBLOODY - var/lrange = 2 - var/lpower = 2 - var/lcolor = "#0099FF" - var/colorable = FALSE - var/rainbow = FALSE - // If it uses energy. - var/use_cell = FALSE - var/hitcost = 120 - var/obj/item/weapon/cell/bcell = null - var/cell_type = /obj/item/weapon/cell/device - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - -/obj/item/weapon/melee/energy/sword/green/New() - colorable = FALSE - lcolor = "#008000" - -/obj/item/weapon/melee/energy/sword/red/New() - colorable = FALSE - lcolor = "#FF0000" - -/obj/item/weapon/melee/energy/sword/blue/New() - colorable = FALSE - lcolor = "#0000FF" - -/obj/item/weapon/melee/energy/sword/purple/New() - colorable = FALSE - lcolor = "#800080" - -/obj/item/weapon/melee/energy/sword/white/New() - colorable = FALSE - lcolor = "#FFFFFF" - -/obj/item/weapon/melee/energy/proc/activate(mob/living/user) - if(active) - return - active = 1 - if(rainbow) - item_state = "[icon_state]_blade_rainbow" - else - item_state = "[icon_state]_blade" - embed_chance = active_embed_chance - force = active_force - throwforce = active_throwforce - armor_penetration = active_armourpen - sharp = TRUE - edge = TRUE - w_class = active_w_class - playsound(src, 'sound/weapons/saberon.ogg', 50, 1) - update_icon() - set_light(lrange, lpower, lcolor) - -/obj/item/weapon/melee/energy/proc/deactivate(mob/living/user) - if(!active) - return - playsound(src, 'sound/weapons/saberoff.ogg', 50, 1) - item_state = "[icon_state]" - active = 0 - embed_chance = initial(embed_chance) - force = initial(force) - throwforce = initial(throwforce) - armor_penetration = initial(armor_penetration) - sharp = initial(sharp) - edge = initial(edge) - w_class = initial(w_class) - update_icon() - set_light(0,0) - -/obj/item/weapon/melee/energy/proc/use_charge(var/cost) - if(active) - if(bcell) - if(bcell.checked_use(cost)) - return 1 - else - return 0 - return null - -/obj/item/weapon/melee/energy/examine(mob/user) - . = ..() - if(use_cell && Adjacent(user)) - if(bcell) - . += "The blade is [round(bcell.percent())]% charged." - else - . += "The blade does not have a power source installed." - -/obj/item/weapon/melee/energy/attack_self(mob/living/user as mob) - if(use_cell) - if((!bcell || bcell.charge < hitcost) && !active) - to_chat(user, "\The [src] does not seem to have power.") - return - - var/datum/gender/TU = gender_datums[user.get_visible_gender()] - if (active) - if ((CLUMSY in user.mutations) && prob(50)) - user.visible_message("\The [user] accidentally cuts [TU.himself] with \the [src].",\ - "You accidentally cut yourself with \the [src].") - user.take_organ_damage(5,5) - deactivate(user) - else - activate(user) - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - add_fingerprint(user) - return - -/obj/item/weapon/melee/energy/attack(mob/M, mob/user) - if(active && use_cell) - if(!use_charge(hitcost)) - deactivate(user) - visible_message("\The [src]'s blade flickers, before deactivating.") - return ..() - -/obj/item/weapon/melee/energy/attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/device/multitool) && colorable && !active) - if(!rainbow) - rainbow = TRUE - else - rainbow = FALSE - to_chat(user, "You manipulate the color controller in [src].") - update_icon() - if(use_cell) - if(istype(W, cell_type)) - if(!bcell) - user.drop_item() - W.loc = src - bcell = W - to_chat(user, "You install a cell in [src].") - update_icon() - else - to_chat(user, "[src] already has a cell.") - else if(W.has_tool_quality(TOOL_SCREWDRIVER) && bcell) - bcell.update_icon() - bcell.forceMove(get_turf(loc)) - bcell = null - to_chat(user, "You remove the cell from \the [src].") - deactivate() - update_icon() - return - return ..() - -/obj/item/weapon/melee/energy/get_cell() - return bcell - -/obj/item/weapon/melee/energy/update_icon() - . = ..() - var/mutable_appearance/blade_overlay = mutable_appearance(icon, "[icon_state]_blade") - blade_overlay.color = lcolor - color = lcolor - if(rainbow) - blade_overlay = mutable_appearance(icon, "[icon_state]_blade_rainbow") - blade_overlay.color = "FFFFFF" - color = "FFFFFF" - cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other - if(active) - add_overlay(blade_overlay) - if(istype(usr,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = usr - H.update_inv_l_hand() - H.update_inv_r_hand() - - - - -/obj/item/weapon/melee/energy/AltClick(mob/living/user) - if(!colorable) //checks if is not colorable - return - if(!in_range(src, user)) //Basic checks to prevent abuse - return - if(user.incapacitated() || !istype(user)) - to_chat(user, "You can't do that right now!") - return - - if(tgui_alert(usr, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes") - var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null - if(energy_color_input) - lcolor = sanitize_hexcolor(energy_color_input) - update_icon() - -/obj/item/weapon/melee/energy/examine(mob/user) - . = ..() - if(colorable) - . += "Alt-click to recolor it." - -/* - * Energy Axe - */ -/obj/item/weapon/melee/energy/axe - name = "energy axe" - desc = "An energised battle axe." - icon_state = "eaxe" - item_state = "eaxe" - colorable = FALSE - lcolor = null - //active_force = 150 //holy... - active_force = 60 - active_armourpen = 65 - active_throwforce = 35 - active_w_class = ITEMSIZE_HUGE - //force = 40 - //throwforce = 25 - force = 20 - armor_penetration = 20 - throwforce = 10 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - sharp = TRUE - edge = TRUE - can_cleave = TRUE - -/obj/item/weapon/melee/energy/axe/activate(mob/living/user) - ..() - damtype = SEARING - to_chat(user, "\The [src] is now energised.") - -/obj/item/weapon/melee/energy/axe/deactivate(mob/living/user) - ..() - damtype = BRUTE - to_chat(user, "\The [src] is de-energised. It's just a regular axe now.") - -/obj/item/weapon/melee/energy/axe/charge - name = "charge axe" - desc = "An energised axe." - active_force = 35 - active_throwforce = 20 - active_armourpen = 30 - force = 15 - - use_cell = TRUE - hitcost = 120 - -/obj/item/weapon/melee/energy/axe/charge/loaded/New() - ..() - bcell = new/obj/item/weapon/cell/device/weapon(src) - -/* - * Energy Sword - */ -/obj/item/weapon/melee/energy/sword - color - name = "energy sword" - desc = "May the force be within you." - icon_state = "esword" - item_state = "esword" - active_force = 30 - active_armourpen = 50 - active_throwforce = 20 - active_w_class = ITEMSIZE_HUGE //CHOMP Edit - force = 3 - throwforce = 5 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_SMALL - flags = NOBLOODY - origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4) - colorable = TRUE - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - - - projectile_parry_chance = 65 - -/obj/item/weapon/melee/energy/sword/dropped(var/mob/user) - ..() - if(!istype(loc,/mob)) - deactivate(user) - - -/obj/item/weapon/melee/energy/sword/activate(mob/living/user) - if(!active) - to_chat(user, "\The [src] is now energised.") - - ..() - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - -/obj/item/weapon/melee/energy/sword/deactivate(mob/living/user) - if(active) - to_chat(user, "\The [src] deactivates!") - ..() - attack_verb = list() - -/obj/item/weapon/melee/energy/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(active && default_parry_check(user, attacker, damage_source) && prob(60)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - if(active && unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) - user.visible_message("\The [user] deflects [attack_text] with \the [src]!") - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - - return 0 - -/obj/item/weapon/melee/energy/sword/unique_parry_check(mob/user, mob/attacker, atom/damage_source) - if(user.incapacitated() || !istype(damage_source, /obj/item/projectile/)) - return 0 - - var/bad_arc = reverse_direction(user.dir) - if(!check_shield_arc(user, bad_arc, damage_source, attacker)) - return 0 - - return 1 - -/obj/item/weapon/melee/energy/sword/pirate - name = "energy cutlass" - desc = "Arrrr matey." - icon_state = "cutlass" - item_state = "cutlass" - colorable = TRUE - - -/* - *Ionic Rapier - */ - -/obj/item/weapon/melee/energy/sword/ionic_rapier - name = "ionic rapier" - desc = "Designed specifically for disrupting electronics at close range, it is extremely deadly against synthetics, but almost harmless to pure organic targets." - description_info = "This is a dangerous melee weapon that will deliver a moderately powerful electromagnetic pulse to whatever it strikes. \ - Striking a lesser robotic entity will compel it to attack you, as well. It also does extra burn damage to robotic entities, but it does \ - very little damage to purely organic targets." - icon_state = "ionrapier" - item_state = "ionrapier" - active_force = 5 - active_armourpen = 80 - active_throwforce = 3 - active_embed_chance = 0 - sharp = TRUE - edge = TRUE - armor_penetration = 0 - flags = NOBLOODY - lrange = 2 - lpower = 2 - lcolor = "#0000FF" - projectile_parry_chance = 30 // It's not specifically designed for cutting and slashing, but it can still, maybe, save your life. - -/obj/item/weapon/melee/energy/sword/ionic_rapier/afterattack(var/atom/movable/AM, var/mob/living/user, var/proximity) - if(istype(AM, /obj) && proximity && active) - // EMP stuff. - var/obj/O = AM - O.emp_act(3) // A weaker severity is used because this has infinite uses. - playsound(O, 'sound/effects/EMPulse.ogg', 100, 1) - user.setClickCooldown(user.get_attack_speed(src)) // A lot of objects don't set click delay. - return ..() - -/obj/item/weapon/melee/energy/sword/ionic_rapier/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - . = ..() - if(target.isSynthetic() && active) - // Do some extra damage. Not a whole lot more since emp_act() is pretty nasty on FBPs already. - target.emp_act(3) // A weaker severity is used because this has infinite uses. - playsound(target, 'sound/effects/EMPulse.ogg', 100, 1) - target.adjustFireLoss(force * 3) // 15 Burn, for 20 total. - playsound(target, 'sound/weapons/blade1.ogg', 100, 1) - - // Make lesser robots really mad at us. - if(target.mob_class & MOB_CLASS_SYNTHETIC) - if(target.has_AI()) - target.taunt(user) - target.adjustFireLoss(force * 6) // 30 Burn, for 50 total. - -/obj/item/weapon/melee/energy/sword/ionic_rapier/lance - name = "zero-point lance" - desc = "Designed specifically for disrupting electronics at relatively close range, however it is still capable of dealing some damage to living beings." - active_force = 20 - active_armourpen = 15 - reach = 2 - -/* - * Charge blade. Uses a cell, and costs energy per strike. - */ - -/obj/item/weapon/melee/energy/sword/charge - name = "charge sword" - desc = "A small, handheld device which emits a high-energy 'blade'." - origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3, TECH_ILLEGAL = 4) - active_force = 25 - active_armourpen = 25 - projectile_parry_chance = 40 - colorable = TRUE - - hitcost = 75 - -/obj/item/weapon/melee/energy/sword/charge/loaded/New() - ..() - bcell = new/obj/item/weapon/cell/device/weapon(src) - -//Energy Blade (ninja uses this) - -//Can't be activated or deactivated, so no reason to be a subtype of energy -/obj/item/weapon/melee/energy/blade - name = "energy blade" - desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." - icon_state = "blade" - item_state = "blade" - force = 40 //Normal attacks deal very high damage - about the same as wielded fire axe - armor_penetration = 100 - sharp = TRUE - edge = TRUE - anchored = TRUE // Never spawned outside of inventory, should be fine. - throwforce = 1 //Throwing or dropping the item deletes it. - throw_speed = 1 - throw_range = 1 - w_class = ITEMSIZE_HUGE//So you can't hide it in your pocket or some such. //CHOMP Edit - flags = NOBLOODY - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - var/mob/living/creator - var/datum/effect/effect/system/spark_spread/spark_system - projectile_parry_chance = 60 - lcolor = "#00FF00" - -/obj/item/weapon/melee/energy/blade/New() - - spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - START_PROCESSING(SSobj, src) - set_light(lrange, lpower, lcolor) - -/obj/item/weapon/melee/energy/blade/Destroy() - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/weapon/melee/energy/blade/attack_self(mob/user as mob) - user.drop_from_inventory(src) - spawn(1) if(src) qdel(src) - -/obj/item/weapon/melee/energy/blade/dropped() - spawn(1) if(src) qdel(src) - -/obj/item/weapon/melee/energy/blade/process() - if(!creator || loc != creator || !creator.item_is_in_hands(src)) - // Tidy up a bit. - if(istype(loc,/mob/living)) - var/mob/living/carbon/human/host = loc - if(istype(host)) - for(var/obj/item/organ/external/organ in host.organs) - for(var/obj/item/O in organ.implants) - if(O == src) - organ.implants -= src - host.pinned -= src - host.embedded -= src - host.drop_from_inventory(src) - spawn(1) if(src) qdel(src) - -/obj/item/weapon/melee/energy/blade/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(default_parry_check(user, attacker, damage_source) && prob(60)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) - user.visible_message("\The [user] deflects [attack_text] with \the [src]!") - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - - return 0 - -/obj/item/weapon/melee/energy/blade/unique_parry_check(mob/user, mob/attacker, atom/damage_source) - - if(user.incapacitated() || !istype(damage_source, /obj/item/projectile/)) - return 0 - - var/bad_arc = reverse_direction(user.dir) - if(!check_shield_arc(user, bad_arc, damage_source, attacker)) - return 0 - - return 1 - -//Energy Spear - -/obj/item/weapon/melee/energy/spear - name = "energy spear" - desc = "Concentrated energy forming a sharp tip at the end of a long rod." - icon_state = "espear" - armor_penetration = 0 - sharp = TRUE - edge = TRUE - force = 5 - throwforce = 10 - throw_speed = 7 - throw_range = 11 - reach = 2 - w_class = ITEMSIZE_LARGE - active_force = 25 - active_armourpen = 75 - active_throwforce = 30 - active_w_class = ITEMSIZE_HUGE - colorable = TRUE - - - lcolor = "#800080" - -/obj/item/weapon/melee/energy/spear/activate(mob/living/user) - if(!active) - to_chat(user, "\The [src] is now energised.") - ..() - attack_verb = list("jabbed", "stabbed", "impaled") - - -/obj/item/weapon/melee/energy/spear/deactivate(mob/living/user) - if(active) - to_chat(user, "\The [src] deactivates!") - ..() - attack_verb = list("whacked", "beat", "slapped", "thonked") - -/obj/item/weapon/melee/energy/spear/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(active && default_parry_check(user, attacker, damage_source) && prob(50)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - return 0 +/obj/item/weapon/melee/energy + var/active = 0 + var/active_force + var/active_throwforce + var/active_armourpen + var/active_w_class + var/active_embed_chance = 0 //In the off chance one of these is supposed to embed, you can just tweak this var + sharp = FALSE + edge = FALSE + armor_penetration = 0 + flags = NOCONDUCT | NOBLOODY + var/lrange = 2 + var/lpower = 2 + var/lcolor = "#0099FF" + var/colorable = FALSE + var/rainbow = FALSE + // If it uses energy. + var/use_cell = FALSE + var/hitcost = 120 + var/obj/item/weapon/cell/bcell = null + var/cell_type = /obj/item/weapon/cell/device + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + +/obj/item/weapon/melee/energy/sword/green/New() + colorable = FALSE + lcolor = "#008000" + +/obj/item/weapon/melee/energy/sword/red/New() + colorable = FALSE + lcolor = "#FF0000" + +/obj/item/weapon/melee/energy/sword/blue/New() + colorable = FALSE + lcolor = "#0000FF" + +/obj/item/weapon/melee/energy/sword/purple/New() + colorable = FALSE + lcolor = "#800080" + +/obj/item/weapon/melee/energy/sword/white/New() + colorable = FALSE + lcolor = "#FFFFFF" + +/obj/item/weapon/melee/energy/proc/activate(mob/living/user) + if(active) + return + active = 1 + if(rainbow) + item_state = "[icon_state]_blade_rainbow" + else + item_state = "[icon_state]_blade" + embed_chance = active_embed_chance + force = active_force + throwforce = active_throwforce + armor_penetration = active_armourpen + sharp = TRUE + edge = TRUE + w_class = active_w_class + playsound(src, 'sound/weapons/saberon.ogg', 50, 1) + update_icon() + set_light(lrange, lpower, lcolor) + +/obj/item/weapon/melee/energy/proc/deactivate(mob/living/user) + if(!active) + return + playsound(src, 'sound/weapons/saberoff.ogg', 50, 1) + item_state = "[icon_state]" + active = 0 + embed_chance = initial(embed_chance) + force = initial(force) + throwforce = initial(throwforce) + armor_penetration = initial(armor_penetration) + sharp = initial(sharp) + edge = initial(edge) + w_class = initial(w_class) + update_icon() + set_light(0,0) + +/obj/item/weapon/melee/energy/proc/use_charge(var/cost) + if(active) + if(bcell) + if(bcell.checked_use(cost)) + return 1 + else + return 0 + return null + +/obj/item/weapon/melee/energy/examine(mob/user) + . = ..() + if(use_cell && Adjacent(user)) + if(bcell) + . += "The blade is [round(bcell.percent())]% charged." + else + . += "The blade does not have a power source installed." + +/obj/item/weapon/melee/energy/attack_self(mob/living/user as mob) + if(use_cell) + if((!bcell || bcell.charge < hitcost) && !active) + to_chat(user, "\The [src] does not seem to have power.") + return + + var/datum/gender/TU = gender_datums[user.get_visible_gender()] + if (active) + if ((CLUMSY in user.mutations) && prob(50)) + user.visible_message("\The [user] accidentally cuts [TU.himself] with \the [src].",\ + "You accidentally cut yourself with \the [src].") + user.take_organ_damage(5,5) + deactivate(user) + else + activate(user) + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + add_fingerprint(user) + return + +/obj/item/weapon/melee/energy/attack(mob/M, mob/user) + if(active && use_cell) + if(!use_charge(hitcost)) + deactivate(user) + visible_message("\The [src]'s blade flickers, before deactivating.") + return ..() + +/obj/item/weapon/melee/energy/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/device/multitool) && colorable && !active) + if(!rainbow) + rainbow = TRUE + else + rainbow = FALSE + to_chat(user, "You manipulate the color controller in [src].") + update_icon() + if(use_cell) + if(istype(W, cell_type)) + if(!bcell) + user.drop_item() + W.loc = src + bcell = W + to_chat(user, "You install a cell in [src].") + update_icon() + else + to_chat(user, "[src] already has a cell.") + else if(W.has_tool_quality(TOOL_SCREWDRIVER) && bcell) + bcell.update_icon() + bcell.forceMove(get_turf(loc)) + bcell = null + to_chat(user, "You remove the cell from \the [src].") + deactivate() + update_icon() + return + return ..() + +/obj/item/weapon/melee/energy/get_cell() + return bcell + +/obj/item/weapon/melee/energy/update_icon() + . = ..() + var/mutable_appearance/blade_overlay = mutable_appearance(icon, "[icon_state]_blade") + blade_overlay.color = lcolor + color = lcolor + if(rainbow) + blade_overlay = mutable_appearance(icon, "[icon_state]_blade_rainbow") + blade_overlay.color = "FFFFFF" + color = "FFFFFF" + cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other + if(active) + add_overlay(blade_overlay) + if(istype(usr,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = usr + H.update_inv_l_hand() + H.update_inv_r_hand() + + + + +/obj/item/weapon/melee/energy/AltClick(mob/living/user) + if(!colorable) //checks if is not colorable + return + if(!in_range(src, user)) //Basic checks to prevent abuse + return + if(user.incapacitated() || !istype(user)) + to_chat(user, "You can't do that right now!") + return + + if(tgui_alert(usr, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes") + var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null + if(energy_color_input) + lcolor = sanitize_hexcolor(energy_color_input) + update_icon() + +/obj/item/weapon/melee/energy/examine(mob/user) + . = ..() + if(colorable) + . += "Alt-click to recolor it." + +/* + * Energy Axe + */ +/obj/item/weapon/melee/energy/axe + name = "energy axe" + desc = "An energised battle axe." + icon_state = "eaxe" + item_state = "eaxe" + colorable = FALSE + lcolor = null + //active_force = 150 //holy... + active_force = 60 + active_armourpen = 65 + active_throwforce = 35 + active_w_class = ITEMSIZE_HUGE + //force = 40 + //throwforce = 25 + force = 20 + armor_penetration = 20 + throwforce = 10 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") + sharp = TRUE + edge = TRUE + can_cleave = TRUE + +/obj/item/weapon/melee/energy/axe/activate(mob/living/user) + ..() + damtype = SEARING + to_chat(user, "\The [src] is now energised.") + +/obj/item/weapon/melee/energy/axe/deactivate(mob/living/user) + ..() + damtype = BRUTE + to_chat(user, "\The [src] is de-energised. It's just a regular axe now.") + +/obj/item/weapon/melee/energy/axe/charge + name = "charge axe" + desc = "An energised axe." + active_force = 35 + active_throwforce = 20 + active_armourpen = 30 + force = 15 + + use_cell = TRUE + hitcost = 120 + +/obj/item/weapon/melee/energy/axe/charge/loaded/New() + ..() + bcell = new/obj/item/weapon/cell/device/weapon(src) + +/* + * Energy Sword + */ +/obj/item/weapon/melee/energy/sword + color + name = "energy sword" + desc = "May the force be within you." + icon_state = "esword" + item_state = "esword" + active_force = 30 + active_armourpen = 50 + active_throwforce = 20 + active_w_class = ITEMSIZE_HUGE //CHOMP Edit + force = 3 + throwforce = 5 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + flags = NOBLOODY + origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4) + colorable = TRUE + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + + + projectile_parry_chance = 65 + +/obj/item/weapon/melee/energy/sword/dropped(var/mob/user) + ..() + if(!istype(loc,/mob)) + deactivate(user) + + +/obj/item/weapon/melee/energy/sword/activate(mob/living/user) + if(!active) + to_chat(user, "\The [src] is now energised.") + + ..() + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + + +/obj/item/weapon/melee/energy/sword/deactivate(mob/living/user) + if(active) + to_chat(user, "\The [src] deactivates!") + ..() + attack_verb = list() + +/obj/item/weapon/melee/energy/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(active && default_parry_check(user, attacker, damage_source) && prob(60)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + return 1 + if(active && unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) + user.visible_message("\The [user] deflects [attack_text] with \the [src]!") + + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + return 1 + + return 0 + +/obj/item/weapon/melee/energy/sword/unique_parry_check(mob/user, mob/attacker, atom/damage_source) + if(user.incapacitated() || !istype(damage_source, /obj/item/projectile/)) + return 0 + + var/bad_arc = reverse_direction(user.dir) + if(!check_shield_arc(user, bad_arc, damage_source, attacker)) + return 0 + + return 1 + +/obj/item/weapon/melee/energy/sword/pirate + name = "energy cutlass" + desc = "Arrrr matey." + icon_state = "cutlass" + item_state = "cutlass" + colorable = TRUE + + +/* + *Ionic Rapier + */ + +/obj/item/weapon/melee/energy/sword/ionic_rapier + name = "ionic rapier" + desc = "Designed specifically for disrupting electronics at close range, it is extremely deadly against synthetics, but almost harmless to pure organic targets." + description_info = "This is a dangerous melee weapon that will deliver a moderately powerful electromagnetic pulse to whatever it strikes. \ + Striking a lesser robotic entity will compel it to attack you, as well. It also does extra burn damage to robotic entities, but it does \ + very little damage to purely organic targets." + icon_state = "ionrapier" + item_state = "ionrapier" + active_force = 5 + active_armourpen = 80 + active_throwforce = 3 + active_embed_chance = 0 + sharp = TRUE + edge = TRUE + armor_penetration = 0 + flags = NOBLOODY + lrange = 2 + lpower = 2 + lcolor = "#0000FF" + projectile_parry_chance = 30 // It's not specifically designed for cutting and slashing, but it can still, maybe, save your life. + +/obj/item/weapon/melee/energy/sword/ionic_rapier/afterattack(var/atom/movable/AM, var/mob/living/user, var/proximity) + if(istype(AM, /obj) && proximity && active) + // EMP stuff. + var/obj/O = AM + O.emp_act(3) // A weaker severity is used because this has infinite uses. + playsound(O, 'sound/effects/EMPulse.ogg', 100, 1) + user.setClickCooldown(user.get_attack_speed(src)) // A lot of objects don't set click delay. + return ..() + +/obj/item/weapon/melee/energy/sword/ionic_rapier/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + . = ..() + if(target.isSynthetic() && active) + // Do some extra damage. Not a whole lot more since emp_act() is pretty nasty on FBPs already. + target.emp_act(3) // A weaker severity is used because this has infinite uses. + playsound(target, 'sound/effects/EMPulse.ogg', 100, 1) + target.adjustFireLoss(force * 3) // 15 Burn, for 20 total. + playsound(target, 'sound/weapons/blade1.ogg', 100, 1) + + // Make lesser robots really mad at us. + if(target.mob_class & MOB_CLASS_SYNTHETIC) + if(target.has_AI()) + target.taunt(user) + target.adjustFireLoss(force * 6) // 30 Burn, for 50 total. + +/obj/item/weapon/melee/energy/sword/ionic_rapier/lance + name = "zero-point lance" + desc = "Designed specifically for disrupting electronics at relatively close range, however it is still capable of dealing some damage to living beings." + active_force = 20 + active_armourpen = 15 + reach = 2 + +/* + * Charge blade. Uses a cell, and costs energy per strike. + */ + +/obj/item/weapon/melee/energy/sword/charge + name = "charge sword" + desc = "A small, handheld device which emits a high-energy 'blade'." + origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3, TECH_ILLEGAL = 4) + active_force = 25 + active_armourpen = 25 + projectile_parry_chance = 40 + colorable = TRUE + + hitcost = 75 + +/obj/item/weapon/melee/energy/sword/charge/loaded/New() + ..() + bcell = new/obj/item/weapon/cell/device/weapon(src) + +//Energy Blade (ninja uses this) + +//Can't be activated or deactivated, so no reason to be a subtype of energy +/obj/item/weapon/melee/energy/blade + name = "energy blade" + desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." + icon_state = "blade" + item_state = "blade" + force = 40 //Normal attacks deal very high damage - about the same as wielded fire axe + armor_penetration = 100 + sharp = TRUE + edge = TRUE + anchored = TRUE // Never spawned outside of inventory, should be fine. + throwforce = 1 //Throwing or dropping the item deletes it. + throw_speed = 1 + throw_range = 1 + w_class = ITEMSIZE_HUGE//So you can't hide it in your pocket or some such. //CHOMP Edit + flags = NOBLOODY + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/mob/living/creator + var/datum/effect/effect/system/spark_spread/spark_system + projectile_parry_chance = 60 + lcolor = "#00FF00" + +/obj/item/weapon/melee/energy/blade/New() + + spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src) + spark_system.attach(src) + + START_PROCESSING(SSobj, src) + set_light(lrange, lpower, lcolor) + +/obj/item/weapon/melee/energy/blade/Destroy() + STOP_PROCESSING(SSobj, src) + ..() + +/obj/item/weapon/melee/energy/blade/attack_self(mob/user as mob) + user.drop_from_inventory(src) + spawn(1) if(src) qdel(src) + +/obj/item/weapon/melee/energy/blade/dropped() + spawn(1) if(src) qdel(src) + +/obj/item/weapon/melee/energy/blade/process() + if(!creator || loc != creator || !creator.item_is_in_hands(src)) + // Tidy up a bit. + if(istype(loc,/mob/living)) + var/mob/living/carbon/human/host = loc + if(istype(host)) + for(var/obj/item/organ/external/organ in host.organs) + for(var/obj/item/O in organ.implants) + if(O == src) + organ.implants -= src + host.pinned -= src + host.embedded -= src + host.drop_from_inventory(src) + spawn(1) if(src) qdel(src) + +/obj/item/weapon/melee/energy/blade/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(default_parry_check(user, attacker, damage_source) && prob(60)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + return 1 + if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) + user.visible_message("\The [user] deflects [attack_text] with \the [src]!") + + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + return 1 + + return 0 + +/obj/item/weapon/melee/energy/blade/unique_parry_check(mob/user, mob/attacker, atom/damage_source) + + if(user.incapacitated() || !istype(damage_source, /obj/item/projectile/)) + return 0 + + var/bad_arc = reverse_direction(user.dir) + if(!check_shield_arc(user, bad_arc, damage_source, attacker)) + return 0 + + return 1 + +//Energy Spear + +/obj/item/weapon/melee/energy/spear + name = "energy spear" + desc = "Concentrated energy forming a sharp tip at the end of a long rod." + icon_state = "espear" + armor_penetration = 0 + sharp = TRUE + edge = TRUE + force = 5 + throwforce = 10 + throw_speed = 7 + throw_range = 11 + reach = 2 + w_class = ITEMSIZE_LARGE + active_force = 25 + active_armourpen = 75 + active_throwforce = 30 + active_w_class = ITEMSIZE_HUGE + colorable = TRUE + + + lcolor = "#800080" + +/obj/item/weapon/melee/energy/spear/activate(mob/living/user) + if(!active) + to_chat(user, "\The [src] is now energised.") + ..() + attack_verb = list("jabbed", "stabbed", "impaled") + + +/obj/item/weapon/melee/energy/spear/deactivate(mob/living/user) + if(active) + to_chat(user, "\The [src] deactivates!") + ..() + attack_verb = list("whacked", "beat", "slapped", "thonked") + +/obj/item/weapon/melee/energy/spear/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(active && default_parry_check(user, attacker, damage_source) && prob(50)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + return 1 + return 0 diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 5930c1ad7e..9598987006 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -1,98 +1,98 @@ -/obj/item/weapon/melee/chainofcommand - name = "chain of command" - desc = "A tool used by great men to placate the frothing masses." - icon_state = "chain" - slot_flags = SLOT_BELT - force = 10 - throwforce = 7 - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 4) - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - hitsound = 'sound/weapons/whip.ogg' - reach = 2 - -/obj/item/weapon/melee/chainofcommand/curator_whip - name = "leather whip" - desc = "A fine weapon for some treasure hunting." - icon_state = "curator_whip" - force = 5 - throwforce = 5 - origin_tech = list(TECH_COMBAT = 2) - -/obj/item/weapon/melee/chainofcommand/curator_whip/toy - name = "toy whip" - desc = "A fake whip. Perfect for fake treasure hunting" - force = 2 - throwforce = 2 - -/obj/item/weapon/melee/umbrella - name = "umbrella" - desc = "To keep the rain off you. Use with caution on windy days." - icon = 'icons/obj/items.dmi' - icon_state = "umbrella_closed" - addblends = "umbrella_closed_a" - slot_flags = SLOT_BELT - force = 5 - throwforce = 5 - w_class = ITEMSIZE_NORMAL - var/open = FALSE - -/obj/item/weapon/melee/umbrella/New() - ..() - update_icon() - -/obj/item/weapon/melee/umbrella/attack_self() - src.toggle_umbrella() - -/obj/item/weapon/melee/umbrella/proc/toggle_umbrella() - open = !open - icon_state = "umbrella_[open ? "open" : "closed"]" - addblends = icon_state + "_a" - item_state = icon_state - update_icon() - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc - H.update_inv_l_hand(0) - H.update_inv_r_hand() - -// Randomizes color -/obj/item/weapon/melee/umbrella/random/New() - color = get_random_colour() - ..() - -/obj/item/weapon/melee/cursedblade - name = "crystal blade" - desc = "The red crystal blade's polished surface glints in the light, giving off a faint glow." - icon_state = "soulblade" - slot_flags = SLOT_BELT | SLOT_BACK - force = 30 - throwforce = 10 - w_class = ITEMSIZE_NORMAL - sharp = TRUE - edge = TRUE - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - can_speak = 1 - var/list/voice_mobs = list() //The curse of the sword is that it has someone trapped inside. - - -/obj/item/weapon/melee/cursedblade/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(default_parry_check(user, attacker, damage_source) && prob(50)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) - return 1 - return 0 - -/obj/item/weapon/melee/cursedblade/proc/ghost_inhabit(var/mob/candidate) - if(!isobserver(candidate)) - return - //Handle moving the ghost into the new shell. - announce_ghost_joinleave(candidate, 0, "They are occupying a cursed sword now.") - var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the ghost is going to be. - new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. - new_voice.mind = candidate.mind //Transfer the mind, if any. - new_voice.ckey = candidate.ckey //Finally, bring the client over. - new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters. - new_voice.real_name = "cursed sword" - voice_mobs.Add(new_voice) - listening_objects |= src +/obj/item/weapon/melee/chainofcommand + name = "chain of command" + desc = "A tool used by great men to placate the frothing masses." + icon_state = "chain" + slot_flags = SLOT_BELT + force = 10 + throwforce = 7 + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 4) + attack_verb = list("flogged", "whipped", "lashed", "disciplined") + hitsound = 'sound/weapons/whip.ogg' + reach = 2 + +/obj/item/weapon/melee/chainofcommand/curator_whip + name = "leather whip" + desc = "A fine weapon for some treasure hunting." + icon_state = "curator_whip" + force = 5 + throwforce = 5 + origin_tech = list(TECH_COMBAT = 2) + +/obj/item/weapon/melee/chainofcommand/curator_whip/toy + name = "toy whip" + desc = "A fake whip. Perfect for fake treasure hunting" + force = 2 + throwforce = 2 + +/obj/item/weapon/melee/umbrella + name = "umbrella" + desc = "To keep the rain off you. Use with caution on windy days." + icon = 'icons/obj/items.dmi' + icon_state = "umbrella_closed" + addblends = "umbrella_closed_a" + slot_flags = SLOT_BELT + force = 5 + throwforce = 5 + w_class = ITEMSIZE_NORMAL + var/open = FALSE + +/obj/item/weapon/melee/umbrella/New() + ..() + update_icon() + +/obj/item/weapon/melee/umbrella/attack_self() + src.toggle_umbrella() + +/obj/item/weapon/melee/umbrella/proc/toggle_umbrella() + open = !open + icon_state = "umbrella_[open ? "open" : "closed"]" + addblends = icon_state + "_a" + item_state = icon_state + update_icon() + if(ishuman(src.loc)) + var/mob/living/carbon/human/H = src.loc + H.update_inv_l_hand(0) + H.update_inv_r_hand() + +// Randomizes color +/obj/item/weapon/melee/umbrella/random/New() + color = get_random_colour() + ..() + +/obj/item/weapon/melee/cursedblade + name = "crystal blade" + desc = "The red crystal blade's polished surface glints in the light, giving off a faint glow." + icon_state = "soulblade" + slot_flags = SLOT_BELT | SLOT_BACK + force = 30 + throwforce = 10 + w_class = ITEMSIZE_NORMAL + sharp = TRUE + edge = TRUE + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + can_speak = 1 + var/list/voice_mobs = list() //The curse of the sword is that it has someone trapped inside. + + +/obj/item/weapon/melee/cursedblade/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(default_parry_check(user, attacker, damage_source) && prob(50)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1) + return 1 + return 0 + +/obj/item/weapon/melee/cursedblade/proc/ghost_inhabit(var/mob/candidate) + if(!isobserver(candidate)) + return + //Handle moving the ghost into the new shell. + announce_ghost_joinleave(candidate, 0, "They are occupying a cursed sword now.") + var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the ghost is going to be. + new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. + new_voice.mind = candidate.mind //Transfer the mind, if any. + new_voice.ckey = candidate.ckey //Finally, bring the client over. + new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters. + new_voice.real_name = "cursed sword" + voice_mobs.Add(new_voice) + listening_objects |= src diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 9f505f903f..0d11a574af 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -1,79 +1,79 @@ -GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop) - -/* - * Mop - */ -/obj/item/weapon/mop - name = "mop" - desc = "The world of janitalia wouldn't be complete without a mop." - icon = 'icons/obj/janitor.dmi' - icon_state = "mop" - force = 3.0 - throwforce = 10.0 - throw_speed = 5 - throw_range = 10 - w_class = ITEMSIZE_NORMAL - flags = NOCONDUCT - attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - var/mopping = 0 - var/mopcount = 0 - -/obj/item/weapon/mop/New() - create_reagents(30) - ..() - -/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) - if(reagents.total_volume < 1) - to_chat(user, "Your mop is dry!") - return - - user.visible_message("[user] begins to clean \the [get_turf(A)].") - - if(do_after(user, 40)) - var/turf/T = get_turf(A) - if(T) - T.clean(src, user) - to_chat(user, "You have finished mopping!") - - -/obj/effect/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) - return - ..() - -/* - * Advanced Mop - */ -/obj/item/weapon/mop/advanced - name = "advanced mop" - desc = "No stain will go unclean." - icon = 'icons/obj/janitor.dmi' - icon_state = "adv_mop" - force = 3.5 - throwforce = 10.5 - throw_speed = 4 - throw_range = 10 - w_class = ITEMSIZE_NORMAL - flags = NOCONDUCT - attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - -/obj/item/weapon/mop/advanced/New() - create_reagents(30) - ..() - -/obj/item/weapon/mop/advanced/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) - if(reagents.total_volume < 1) - to_chat(user, "Your mop is dry!") - return - - user.visible_message("[user] begins to clean \the [get_turf(A)].") - - if(do_after(user, 20)) - var/turf/T = get_turf(A) - if(T) - T.clean(src, user) +GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop) + +/* + * Mop + */ +/obj/item/weapon/mop + name = "mop" + desc = "The world of janitalia wouldn't be complete without a mop." + icon = 'icons/obj/janitor.dmi' + icon_state = "mop" + force = 3.0 + throwforce = 10.0 + throw_speed = 5 + throw_range = 10 + w_class = ITEMSIZE_NORMAL + flags = NOCONDUCT + attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") + var/mopping = 0 + var/mopcount = 0 + +/obj/item/weapon/mop/New() + create_reagents(30) + ..() + +/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity) + if(!proximity) return + if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) + if(reagents.total_volume < 1) + to_chat(user, "Your mop is dry!") + return + + user.visible_message("[user] begins to clean \the [get_turf(A)].") + + if(do_after(user, 40)) + var/turf/T = get_turf(A) + if(T) + T.clean(src, user) + to_chat(user, "You have finished mopping!") + + +/obj/effect/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) + return + ..() + +/* + * Advanced Mop + */ +/obj/item/weapon/mop/advanced + name = "advanced mop" + desc = "No stain will go unclean." + icon = 'icons/obj/janitor.dmi' + icon_state = "adv_mop" + force = 3.5 + throwforce = 10.5 + throw_speed = 4 + throw_range = 10 + w_class = ITEMSIZE_NORMAL + flags = NOCONDUCT + attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") + +/obj/item/weapon/mop/advanced/New() + create_reagents(30) + ..() + +/obj/item/weapon/mop/advanced/afterattack(atom/A, mob/user, proximity) + if(!proximity) return + if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) + if(reagents.total_volume < 1) + to_chat(user, "Your mop is dry!") + return + + user.visible_message("[user] begins to clean \the [get_turf(A)].") + + if(do_after(user, 20)) + var/turf/T = get_turf(A) + if(T) + T.clean(src, user) to_chat(user, "You have finished mopping!") \ No newline at end of file diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index a86c3d4bd4..3162718b7d 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -1,78 +1,78 @@ -//NEVER USE THIS IT SUX -PETETHEGOAT -//THE GOAT WAS RIGHT - RKF - -var/global/list/cached_icons = list() - -/obj/item/weapon/reagent_containers/glass/paint - desc = "It's a paint bucket." - name = "paint bucket" - icon = 'icons/obj/items.dmi' - icon_state = "paint_neutral" - item_state = "paintcan" - matter = list(MAT_STEEL = 200) - w_class = ITEMSIZE_NORMAL - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(10,20,30,60) - volume = 60 - unacidable = FALSE - flags = OPENCONTAINER - var/paint_type = "red" - -/obj/item/weapon/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity) - if(!proximity) return - if(istype(target) && reagents.total_volume > 5) - user.visible_message("\The [target] has been splashed with something by [user]!") - reagents.trans_to_turf(target, 5) - else - return ..() - -/obj/item/weapon/reagent_containers/glass/paint/New() - ..() - if(paint_type) - reagents.add_reagent("paint", volume, paint_type) - -/obj/item/weapon/reagent_containers/glass/paint/red - icon_state = "paint_red" - paint_type = "#FF0000" - -/obj/item/weapon/reagent_containers/glass/paint/yellow - icon_state = "paint_yellow" - paint_type = "#FFFF00" - -/obj/item/weapon/reagent_containers/glass/paint/green - icon_state = "paint_green" - paint_type = "#00FF00" - -/obj/item/weapon/reagent_containers/glass/paint/blue - icon_state = "paint_blue" - paint_type = "#0000FF" - -/obj/item/weapon/reagent_containers/glass/paint/violet - icon_state = "paint_violet" - paint_type = "#FF00FF" - -/obj/item/weapon/reagent_containers/glass/paint/black - icon_state = "paint_black" - paint_type = "#000000" - -/obj/item/weapon/reagent_containers/glass/paint/grey - icon_state = "paint_neutral" - paint_type = "#808080" - -/obj/item/weapon/reagent_containers/glass/paint/orange - icon_state = "paint_orange" - paint_type = "#FFA500" - -/obj/item/weapon/reagent_containers/glass/paint/purple - icon_state = "paint_purple" - paint_type = "#A500FF" - -/obj/item/weapon/reagent_containers/glass/paint/cyan - icon_state = "paint_cyan" - paint_type = "#00FFFF" - -/obj/item/weapon/reagent_containers/glass/paint/white - name = "paint remover bucket" - icon_state = "paint_white" - paint_type = "#FFFFFF" - +//NEVER USE THIS IT SUX -PETETHEGOAT +//THE GOAT WAS RIGHT - RKF + +var/global/list/cached_icons = list() + +/obj/item/weapon/reagent_containers/glass/paint + desc = "It's a paint bucket." + name = "paint bucket" + icon = 'icons/obj/items.dmi' + icon_state = "paint_neutral" + item_state = "paintcan" + matter = list(MAT_STEEL = 200) + w_class = ITEMSIZE_NORMAL + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(10,20,30,60) + volume = 60 + unacidable = FALSE + flags = OPENCONTAINER + var/paint_type = "red" + +/obj/item/weapon/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity) + if(!proximity) return + if(istype(target) && reagents.total_volume > 5) + user.visible_message("\The [target] has been splashed with something by [user]!") + reagents.trans_to_turf(target, 5) + else + return ..() + +/obj/item/weapon/reagent_containers/glass/paint/New() + ..() + if(paint_type) + reagents.add_reagent("paint", volume, paint_type) + +/obj/item/weapon/reagent_containers/glass/paint/red + icon_state = "paint_red" + paint_type = "#FF0000" + +/obj/item/weapon/reagent_containers/glass/paint/yellow + icon_state = "paint_yellow" + paint_type = "#FFFF00" + +/obj/item/weapon/reagent_containers/glass/paint/green + icon_state = "paint_green" + paint_type = "#00FF00" + +/obj/item/weapon/reagent_containers/glass/paint/blue + icon_state = "paint_blue" + paint_type = "#0000FF" + +/obj/item/weapon/reagent_containers/glass/paint/violet + icon_state = "paint_violet" + paint_type = "#FF00FF" + +/obj/item/weapon/reagent_containers/glass/paint/black + icon_state = "paint_black" + paint_type = "#000000" + +/obj/item/weapon/reagent_containers/glass/paint/grey + icon_state = "paint_neutral" + paint_type = "#808080" + +/obj/item/weapon/reagent_containers/glass/paint/orange + icon_state = "paint_orange" + paint_type = "#FFA500" + +/obj/item/weapon/reagent_containers/glass/paint/purple + icon_state = "paint_purple" + paint_type = "#A500FF" + +/obj/item/weapon/reagent_containers/glass/paint/cyan + icon_state = "paint_cyan" + paint_type = "#00FFFF" + +/obj/item/weapon/reagent_containers/glass/paint/white + name = "paint remover bucket" + icon_state = "paint_white" + paint_type = "#FFFFFF" + diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm index 48358ea259..6d41517014 100644 --- a/code/game/objects/items/weapons/paiwire.dm +++ b/code/game/objects/items/weapons/paiwire.dm @@ -1,19 +1,19 @@ -/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob) - if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) - //VOREStation Add - Can't hack secured_wires doors (vault, etc) - if(istype(M, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = M - if(A.secured_wires) - to_chat(user,"\The [M] doesn't have any acessible data ports for \the [src]!") - return - //VOREStation Add End - user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - playsound(src, 'sound/machines/click.ogg', 50, 1) - user.drop_item() - src.forceMove(M) - src.machine = M - else - user.visible_message("[user] fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src].") - -/obj/item/weapon/pai_cable/attack(obj/machinery/M as obj, mob/user as mob) - src.plugin(M, user) +/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob) + if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) + //VOREStation Add - Can't hack secured_wires doors (vault, etc) + if(istype(M, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = M + if(A.secured_wires) + to_chat(user,"\The [M] doesn't have any acessible data ports for \the [src]!") + return + //VOREStation Add End + user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") + playsound(src, 'sound/machines/click.ogg', 50, 1) + user.drop_item() + src.forceMove(M) + src.machine = M + else + user.visible_message("[user] fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src].") + +/obj/item/weapon/pai_cable/attack(obj/machinery/M as obj, mob/user as mob) + src.plugin(M, user) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 646f38ab33..c4e2565283 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -1,96 +1,96 @@ -/obj/item/weapon/teleportation_scroll - name = "scroll of teleportation" - desc = "A scroll for moving around." - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_books.dmi' - ) - var/uses = 4.0 - w_class = ITEMSIZE_TINY - item_state = "paper" - throw_speed = 4 - throw_range = 20 - origin_tech = list(TECH_BLUESPACE = 4) - -/obj/item/weapon/teleportation_scroll/attack_self(mob/user as mob) - if((user.mind && !wizards.is_antagonist(user.mind))) - to_chat(usr, "You stare at the scroll but cannot make sense of the markings!") - return - - user.set_machine(src) - var/dat = "Teleportation Scroll:
                    " - dat += "Number of uses: [src.uses]
                    " - dat += "
                    " - dat += "Four uses use them wisely:
                    " - dat += "Teleport
                    " - dat += "Kind regards,
                    Wizards Federation

                    P.S. Don't forget to bring your gear, you'll need it to cast most spells.
                    " - user << browse(dat, "window=scroll") - onclose(user, "scroll") - return - -/obj/item/weapon/teleportation_scroll/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained() || src.loc != usr) - return - var/mob/living/carbon/human/H = usr - if (!( istype(H, /mob/living/carbon/human))) - return 1 - if ((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf)))) - usr.set_machine(src) - if (href_list["spell_teleport"]) - if (src.uses >= 1) - teleportscroll(H) - attack_self(H) - return - -/obj/item/weapon/teleportation_scroll/proc/teleportscroll(var/mob/user) - var/A = tgui_input_list(user, "Area to jump to:", "Teleportation Scroll", teleportlocs) - if(!A) - return - var/area/thearea = teleportlocs[A] - - if (user.stat || user.restrained()) - return - if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf))))) - return - - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(5, 0, user.loc) - smoke.attach(user) - smoke.start() - var/list/L = list() - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - - if(!L.len) - to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") - return - - if(user && user.buckled) - user.buckled.unbuckle_mob() - - var/list/tempL = L - var/attempt = null - var/success = 0 - while(tempL.len) - attempt = pick(tempL) - success = user.Move(attempt) - if(!success) - tempL.Remove(attempt) - else - break - - if(!success) - user.loc = pick(L) - - smoke.start() - src.uses -= 1 +/obj/item/weapon/teleportation_scroll + name = "scroll of teleportation" + desc = "A scroll for moving around." + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_books.dmi' + ) + var/uses = 4.0 + w_class = ITEMSIZE_TINY + item_state = "paper" + throw_speed = 4 + throw_range = 20 + origin_tech = list(TECH_BLUESPACE = 4) + +/obj/item/weapon/teleportation_scroll/attack_self(mob/user as mob) + if((user.mind && !wizards.is_antagonist(user.mind))) + to_chat(usr, "You stare at the scroll but cannot make sense of the markings!") + return + + user.set_machine(src) + var/dat = "Teleportation Scroll:
                    " + dat += "Number of uses: [src.uses]
                    " + dat += "
                    " + dat += "Four uses use them wisely:
                    " + dat += "Teleport
                    " + dat += "Kind regards,
                    Wizards Federation

                    P.S. Don't forget to bring your gear, you'll need it to cast most spells.
                    " + user << browse(dat, "window=scroll") + onclose(user, "scroll") + return + +/obj/item/weapon/teleportation_scroll/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() || src.loc != usr) + return + var/mob/living/carbon/human/H = usr + if (!( istype(H, /mob/living/carbon/human))) + return 1 + if ((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf)))) + usr.set_machine(src) + if (href_list["spell_teleport"]) + if (src.uses >= 1) + teleportscroll(H) + attack_self(H) + return + +/obj/item/weapon/teleportation_scroll/proc/teleportscroll(var/mob/user) + var/A = tgui_input_list(user, "Area to jump to:", "Teleportation Scroll", teleportlocs) + if(!A) + return + var/area/thearea = teleportlocs[A] + + if (user.stat || user.restrained()) + return + if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf))))) + return + + var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() + smoke.set_up(5, 0, user.loc) + smoke.attach(user) + smoke.start() + var/list/L = list() + for(var/turf/T in get_area_turfs(thearea.type)) + if(!T.density) + var/clear = 1 + for(var/obj/O in T) + if(O.density) + clear = 0 + break + if(clear) + L+=T + + if(!L.len) + to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") + return + + if(user && user.buckled) + user.buckled.unbuckle_mob() + + var/list/tempL = L + var/attempt = null + var/success = 0 + while(tempL.len) + attempt = pick(tempL) + success = user.Move(attempt) + if(!success) + tempL.Remove(attempt) + else + break + + if(!success) + user.loc = pick(L) + + smoke.start() + src.uses -= 1 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index a2549b3279..13dc6fc7b0 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -1,266 +1,266 @@ -//** Shield Helpers -//These are shared by various items that have shield-like behaviour - -//bad_arc is the ABSOLUTE arc of directions from which we cannot block. If you want to fix it to e.g. the user's facing you will need to rotate the dirs yourself. -/proc/check_shield_arc(mob/user, var/bad_arc, atom/damage_source = null, mob/attacker = null) - //check attack direction - var/attack_dir = 0 //direction from the user to the source of the attack - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - attack_dir = get_dir(get_turf(user), P.starting) - else if(attacker) - attack_dir = get_dir(get_turf(user), get_turf(attacker)) - else if(damage_source) - attack_dir = get_dir(get_turf(user), get_turf(damage_source)) - - if(!(attack_dir && (attack_dir & bad_arc))) - return 1 - return 0 - -/proc/default_parry_check(mob/user, mob/attacker, atom/damage_source) - //parry only melee attacks - if(istype(damage_source, /obj/item/projectile) || (attacker && get_dist(user, attacker) > 1) || user.incapacitated()) - return 0 - - //block as long as they are not directly behind us - var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block - if(!check_shield_arc(user, bad_arc, damage_source, attacker)) - return 0 - - return 1 - -/obj/item/proc/unique_parry_check(mob/user, mob/attacker, atom/damage_source) // An overrideable version of the above proc. - return default_parry_check(user, attacker, damage_source) - -/obj/item/weapon/shield - name = "shield" - var/base_block_chance = 50 - preserve_item = 1 - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - -/obj/item/weapon/shield/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(user.incapacitated()) - return 0 - - //block as long as they are not directly behind us - var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block - if(check_shield_arc(user, bad_arc, damage_source, attacker)) - if(prob(get_block_chance(user, damage, damage_source, attacker))) - user.visible_message("\The [user] blocks [attack_text] with \the [src]!") - return 1 - return 0 - -/obj/item/weapon/shield/proc/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - return base_block_chance - -/obj/item/weapon/shield/riot - name = "riot shield" - desc = "A shield adept for close quarters engagement. It's also capable of protecting from less powerful projectiles." - icon = 'icons/obj/weapons.dmi' - icon_state = "riot" - slot_flags = SLOT_BACK - force = 5.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_LARGE - origin_tech = list(TECH_MATERIAL = 2) - matter = list(MAT_GLASS = 7500, MAT_STEEL = 1000) - attack_verb = list("shoved", "bashed") - var/cooldown = 0 //shield bash cooldown. based on world.time - -/obj/item/weapon/shield/riot/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(user.incapacitated()) - return 0 - - //block as long as they are not directly behind us - var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block - if(check_shield_arc(user, bad_arc, damage_source, attacker)) - if(prob(get_block_chance(user, damage, damage_source, attacker))) - //At this point, we succeeded in our roll for a block attempt, however these kinds of shields struggle to stand up - //to strong bullets and lasers. They still do fine to pistol rounds of all kinds, however. - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - if((is_sharp(P) && P.armor_penetration >= 10) || istype(P, /obj/item/projectile/beam)) - //If we're at this point, the bullet/beam is going to go through the shield, however it will hit for less damage. - //Bullets get slowed down, while beams are diffused as they hit the shield, so these shields are not /completely/ - //useless. Extremely penetrating projectiles will go through the shield without less damage. - user.visible_message("\The [user]'s [src.name] is pierced by [attack_text]!") - if(P.armor_penetration < 30) //PTR bullets and x-rays will bypass this entirely. - P.damage = P.damage / 2 - return 0 - //Otherwise, if we're here, we're gonna stop the attack entirely. - user.visible_message("\The [user] blocks [attack_text] with \the [src]!") - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - return 1 - return 0 - -/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/melee/baton)) - if(cooldown < world.time - 25) - user.visible_message("[user] bashes [src] with [W]!") - playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) - cooldown = world.time - else - ..() - -/* - * Energy Shield - */ - -/obj/item/weapon/shield/energy - name = "energy combat shield" - desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere." - icon = 'icons/obj/weapons.dmi' - icon_state = "eshield" - item_state = "eshield" - slot_flags = SLOT_EARS - flags = NOCONDUCT - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_SMALL - var/lrange = 1.5 - var/lpower = 1.5 - var/lcolor = "#006AFF" - origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 4) - attack_verb = list("shoved", "bashed") - var/active = 0 - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', - ) - -/obj/item/weapon/shield/energy/handle_shield(mob/user) - if(!active) - return 0 //turn it on first! - . = ..() - - if(.) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - -/obj/item/weapon/shield/energy/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - if((is_sharp(P) && damage > 10) || istype(P, /obj/item/projectile/beam)) - return (base_block_chance - round(damage / 3)) //block bullets and beams using the old block chance - return base_block_chance - -/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You beat yourself in the head with [src].") - user.take_organ_damage(5) - active = !active - if (active) - force = 10 - update_icon() - w_class = ITEMSIZE_LARGE - slot_flags = null - playsound(src, 'sound/weapons/saberon.ogg', 50, 1) - to_chat(user, "\The [src] is now active.") - - else - force = 3 - update_icon() - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - playsound(src, 'sound/weapons/saberoff.ogg', 50, 1) - to_chat(user, "\The [src] can now be concealed.") - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - add_fingerprint(user) - return - -/obj/item/weapon/shield/energy/update_icon() - var/mutable_appearance/blade_overlay = mutable_appearance(icon, "[icon_state]_blade") - if(lcolor) - blade_overlay.color = lcolor - color = lcolor - cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other - if(active) - add_overlay(blade_overlay) - item_state = "[icon_state]_blade" - set_light(lrange, lpower, lcolor) - else - color = "FFFFFF" - set_light(0) - item_state = "[icon_state]" - - if(istype(usr,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = usr - H.update_inv_l_hand() - H.update_inv_r_hand() - -/obj/item/weapon/shield/energy/AltClick(mob/living/user) - if(!in_range(src, user)) //Basic checks to prevent abuse - return - if(user.incapacitated() || !istype(user)) - to_chat(user, "You can't do that right now!") - return - if(tgui_alert(usr, "Are you sure you want to recolor your shield?", "Confirm Recolor", list("Yes", "No")) == "Yes") - var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null - if(energy_color_input) - lcolor = sanitize_hexcolor(energy_color_input) - update_icon() - -/obj/item/weapon/shield/energy/examine(mob/user) - . = ..() - . += "Alt-click to recolor it." - -/obj/item/weapon/shield/riot/tele - name = "telescopic shield" - desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." - icon = 'icons/obj/weapons.dmi' - icon_state = "teleriot0" - slot_flags = null - force = 3 - throwforce = 3 - throw_speed = 3 - throw_range = 4 - w_class = ITEMSIZE_NORMAL - var/active = 0 -/* -/obj/item/weapon/shield/energy/IsShield() - if(active) - return 1 - else - return 0 -*/ -/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user) - active = !active - icon_state = "teleriot[active]" - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - - if(active) - force = 8 - throwforce = 5 - throw_speed = 2 - w_class = ITEMSIZE_LARGE - slot_flags = SLOT_BACK - to_chat(user, "You extend \the [src].") - else - force = 3 - throwforce = 3 - throw_speed = 3 - w_class = ITEMSIZE_NORMAL - slot_flags = null - to_chat(user, "[src] can now be concealed.") - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - add_fingerprint(user) - return +//** Shield Helpers +//These are shared by various items that have shield-like behaviour + +//bad_arc is the ABSOLUTE arc of directions from which we cannot block. If you want to fix it to e.g. the user's facing you will need to rotate the dirs yourself. +/proc/check_shield_arc(mob/user, var/bad_arc, atom/damage_source = null, mob/attacker = null) + //check attack direction + var/attack_dir = 0 //direction from the user to the source of the attack + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/projectile/P = damage_source + attack_dir = get_dir(get_turf(user), P.starting) + else if(attacker) + attack_dir = get_dir(get_turf(user), get_turf(attacker)) + else if(damage_source) + attack_dir = get_dir(get_turf(user), get_turf(damage_source)) + + if(!(attack_dir && (attack_dir & bad_arc))) + return 1 + return 0 + +/proc/default_parry_check(mob/user, mob/attacker, atom/damage_source) + //parry only melee attacks + if(istype(damage_source, /obj/item/projectile) || (attacker && get_dist(user, attacker) > 1) || user.incapacitated()) + return 0 + + //block as long as they are not directly behind us + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(!check_shield_arc(user, bad_arc, damage_source, attacker)) + return 0 + + return 1 + +/obj/item/proc/unique_parry_check(mob/user, mob/attacker, atom/damage_source) // An overrideable version of the above proc. + return default_parry_check(user, attacker, damage_source) + +/obj/item/weapon/shield + name = "shield" + var/base_block_chance = 50 + preserve_item = 1 + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + +/obj/item/weapon/shield/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(user.incapacitated()) + return 0 + + //block as long as they are not directly behind us + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(check_shield_arc(user, bad_arc, damage_source, attacker)) + if(prob(get_block_chance(user, damage, damage_source, attacker))) + user.visible_message("\The [user] blocks [attack_text] with \the [src]!") + return 1 + return 0 + +/obj/item/weapon/shield/proc/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) + return base_block_chance + +/obj/item/weapon/shield/riot + name = "riot shield" + desc = "A shield adept for close quarters engagement. It's also capable of protecting from less powerful projectiles." + icon = 'icons/obj/weapons.dmi' + icon_state = "riot" + slot_flags = SLOT_BACK + force = 5.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_LARGE + origin_tech = list(TECH_MATERIAL = 2) + matter = list(MAT_GLASS = 7500, MAT_STEEL = 1000) + attack_verb = list("shoved", "bashed") + var/cooldown = 0 //shield bash cooldown. based on world.time + +/obj/item/weapon/shield/riot/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(user.incapacitated()) + return 0 + + //block as long as they are not directly behind us + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(check_shield_arc(user, bad_arc, damage_source, attacker)) + if(prob(get_block_chance(user, damage, damage_source, attacker))) + //At this point, we succeeded in our roll for a block attempt, however these kinds of shields struggle to stand up + //to strong bullets and lasers. They still do fine to pistol rounds of all kinds, however. + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/projectile/P = damage_source + if((is_sharp(P) && P.armor_penetration >= 10) || istype(P, /obj/item/projectile/beam)) + //If we're at this point, the bullet/beam is going to go through the shield, however it will hit for less damage. + //Bullets get slowed down, while beams are diffused as they hit the shield, so these shields are not /completely/ + //useless. Extremely penetrating projectiles will go through the shield without less damage. + user.visible_message("\The [user]'s [src.name] is pierced by [attack_text]!") + if(P.armor_penetration < 30) //PTR bullets and x-rays will bypass this entirely. + P.damage = P.damage / 2 + return 0 + //Otherwise, if we're here, we're gonna stop the attack entirely. + user.visible_message("\The [user] blocks [attack_text] with \the [src]!") + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + return 1 + return 0 + +/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/melee/baton)) + if(cooldown < world.time - 25) + user.visible_message("[user] bashes [src] with [W]!") + playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) + cooldown = world.time + else + ..() + +/* + * Energy Shield + */ + +/obj/item/weapon/shield/energy + name = "energy combat shield" + desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere." + icon = 'icons/obj/weapons.dmi' + icon_state = "eshield" + item_state = "eshield" + slot_flags = SLOT_EARS + flags = NOCONDUCT + force = 3.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_SMALL + var/lrange = 1.5 + var/lpower = 1.5 + var/lcolor = "#006AFF" + origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 4) + attack_verb = list("shoved", "bashed") + var/active = 0 + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', + ) + +/obj/item/weapon/shield/energy/handle_shield(mob/user) + if(!active) + return 0 //turn it on first! + . = ..() + + if(.) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, user.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + +/obj/item/weapon/shield/energy/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/projectile/P = damage_source + if((is_sharp(P) && damage > 10) || istype(P, /obj/item/projectile/beam)) + return (base_block_chance - round(damage / 3)) //block bullets and beams using the old block chance + return base_block_chance + +/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "You beat yourself in the head with [src].") + user.take_organ_damage(5) + active = !active + if (active) + force = 10 + update_icon() + w_class = ITEMSIZE_LARGE + slot_flags = null + playsound(src, 'sound/weapons/saberon.ogg', 50, 1) + to_chat(user, "\The [src] is now active.") + + else + force = 3 + update_icon() + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + playsound(src, 'sound/weapons/saberoff.ogg', 50, 1) + to_chat(user, "\The [src] can now be concealed.") + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + add_fingerprint(user) + return + +/obj/item/weapon/shield/energy/update_icon() + var/mutable_appearance/blade_overlay = mutable_appearance(icon, "[icon_state]_blade") + if(lcolor) + blade_overlay.color = lcolor + color = lcolor + cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other + if(active) + add_overlay(blade_overlay) + item_state = "[icon_state]_blade" + set_light(lrange, lpower, lcolor) + else + color = "FFFFFF" + set_light(0) + item_state = "[icon_state]" + + if(istype(usr,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = usr + H.update_inv_l_hand() + H.update_inv_r_hand() + +/obj/item/weapon/shield/energy/AltClick(mob/living/user) + if(!in_range(src, user)) //Basic checks to prevent abuse + return + if(user.incapacitated() || !istype(user)) + to_chat(user, "You can't do that right now!") + return + if(tgui_alert(usr, "Are you sure you want to recolor your shield?", "Confirm Recolor", list("Yes", "No")) == "Yes") + var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null + if(energy_color_input) + lcolor = sanitize_hexcolor(energy_color_input) + update_icon() + +/obj/item/weapon/shield/energy/examine(mob/user) + . = ..() + . += "Alt-click to recolor it." + +/obj/item/weapon/shield/riot/tele + name = "telescopic shield" + desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." + icon = 'icons/obj/weapons.dmi' + icon_state = "teleriot0" + slot_flags = null + force = 3 + throwforce = 3 + throw_speed = 3 + throw_range = 4 + w_class = ITEMSIZE_NORMAL + var/active = 0 +/* +/obj/item/weapon/shield/energy/IsShield() + if(active) + return 1 + else + return 0 +*/ +/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user) + active = !active + icon_state = "teleriot[active]" + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + + if(active) + force = 8 + throwforce = 5 + throw_speed = 2 + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + to_chat(user, "You extend \the [src].") + else + force = 3 + throwforce = 3 + throw_speed = 3 + w_class = ITEMSIZE_NORMAL + slot_flags = null + to_chat(user, "[src] can now be concealed.") + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + add_fingerprint(user) + return diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index c7625fb4a9..be7e394237 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -1,560 +1,560 @@ -/* - * Backpack - */ - -/obj/item/weapon/storage/backpack - name = "backpack" - desc = "You wear this on your back and put items into it." - icon = 'icons/inventory/back/item.dmi' - icon_state = "backpack" - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/back/mob_teshari.dmi' - ) - w_class = ITEMSIZE_LARGE - slot_flags = SLOT_BACK - max_w_class = ITEMSIZE_LARGE - max_storage_space = INVENTORY_STANDARD_SPACE - var/flippable = 0 - var/side = 0 //0 = right, 1 = left - drop_sound = 'sound/items/drop/backpack.ogg' - pickup_sound = 'sound/items/pickup/backpack.ogg' - - -/obj/item/weapon/storage/backpack/equipped(var/mob/user, var/slot) - if (slot == slot_back && src.use_sound) -// Chomp edit - if(isbelly(user.loc)) - var/obj/belly/B = user.loc - if(B.mode_flags & DM_FLAG_MUFFLEITEMS) - return - else -// Chomp edit end - playsound(src, src.use_sound, 50, 1, -5) - - ..(user, slot) - -/* -/obj/item/weapon/storage/backpack/dropped(mob/user as mob) - if (loc == user && src.use_sound) - playsound(src, src.use_sound, 50, 1, -5) - ..(user) -*/ - -/* - * Backpack Types - */ - -/obj/item/weapon/storage/backpack/holding - name = "bag of holding" - desc = "A backpack that opens into a localized pocket of Blue Space." - origin_tech = list(TECH_BLUESPACE = 4) - icon_state = "holdingpack" - max_w_class = ITEMSIZE_LARGE - max_storage_space = ITEMSIZE_COST_NORMAL * 14 // 56 - storage_cost = INVENTORY_STANDARD_SPACE + 1 - -/obj/item/weapon/storage/backpack/holding/duffle - name = "dufflebag of holding" - var/tilted = 0 - icon_state = "holdingduffle" - -/obj/item/weapon/storage/backpack/holding/duffle/Initialize() - . = ..() - if(prob(50)) - icon_state = "[icon_state]_tilted" - tilted = 1 - -/obj/item/weapon/storage/backpack/holding/duffle/verb/tilt() - set name = "Adjust Duffelbag Angle" - set desc = "Adjust the angle of your dufflebag for cosmetic effect" - set category = "Object" - set src in usr - if(!usr.canmove || usr.stat || usr.restrained()) - return - if(tilted) - icon_state = "[initial(icon_state)]" - to_chat(usr, "You adjust the angle of \the [src] to rest across your lower back.") - tilted = 0 - else - icon_state = "[icon_state]_tilted" - to_chat(usr, "You adjust the angle of \the [src] to rest diagonally across your back.") - tilted = 1 - update_icon() - usr.update_inv_back() - -/obj/item/weapon/storage/backpack/holding/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/storage/backpack/holding)) - to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") - qdel(W) - return - . = ..() - -//Please don't clutter the parent storage item with stupid hacks. -/obj/item/weapon/storage/backpack/holding/can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(istype(W, /obj/item/weapon/storage/backpack/holding)) - return FALSE - return ..() - -/obj/item/weapon/storage/backpack/santabag - name = "\improper Santa's gift bag" - desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!" - icon_state = "giftbag0" - item_state_slots = list(slot_r_hand_str = "giftbag", slot_l_hand_str = "giftbag") - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 100 // can store a ton of shit! - -/obj/item/weapon/storage/backpack/cultpack - name = "trophy rack" - desc = "It's useful for both carrying extra gear and proudly declaring your insanity." - icon_state = "backpack_cult" - -/obj/item/weapon/storage/backpack/clown - name = "Giggles von Honkerton" - desc = "It's a backpack made by Honk! Co." - icon_state = "backpack_clown" - -/obj/item/weapon/storage/backpack/white - name = "white backpack" - icon_state = "backpack_white" - -/obj/item/weapon/storage/backpack/fancy - name = "fancy backpack" - icon_state = "backpack_fancy" - -/obj/item/weapon/storage/backpack/military - name = "military backpack" - icon_state = "backpack_military" - -/obj/item/weapon/storage/backpack/medic - name = "medical backpack" - desc = "It's a backpack especially designed for use in a sterile environment." - icon_state = "backpack_medical" - -/obj/item/weapon/storage/backpack/security - name = "security backpack" - desc = "It's a very robust backpack." - icon_state = "backpack_security" - -/obj/item/weapon/storage/backpack/captain - name = "site manager's backpack" - desc = "It's a special backpack made exclusively for officers." - icon_state = "backpack_captain" - -/obj/item/weapon/storage/backpack/industrial - name = "industrial backpack" - desc = "It's a tough backpack for the daily grind of station life." - icon_state = "backpack_industrial" - -/obj/item/weapon/storage/backpack/toxins - name = "laboratory backpack" - desc = "It's a light backpack modeled for use in laboratories and other scientific institutions." - icon_state = "backpack_purple" - -/obj/item/weapon/storage/backpack/hydroponics - name = "herbalist's backpack" - desc = "It's a green backpack with many pockets to store plants and tools in." - icon_state = "backpack_hydro" - -/obj/item/weapon/storage/backpack/genetics - name = "geneticist backpack" - desc = "It's a backpack fitted with slots for diskettes and other workplace tools." - icon_state = "backpack_blue" - -/obj/item/weapon/storage/backpack/virology - name = "sterile backpack" - desc = "It's a sterile backpack able to withstand different pathogens from entering its fabric." - icon_state = "backpack_green" - -/obj/item/weapon/storage/backpack/chemistry - name = "chemistry backpack" - desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles." - icon_state = "backpack_orange" - -/* - * Duffle Types - */ - -/obj/item/weapon/storage/backpack/dufflebag - name = "dufflebag" - desc = "A large dufflebag for holding extra things." - icon_state = "duffle" - slowdown = 0.5 - var/tilted = 0 - var/can_tilt = 1 - max_storage_space = INVENTORY_DUFFLEBAG_SPACE - -/obj/item/weapon/storage/backpack/dufflebag/Initialize() - . = ..() - if(prob(50)) - icon_state = "[icon_state]_tilted" - tilted = 1 - -/obj/item/weapon/storage/backpack/dufflebag/verb/tilt() - set name = "Adjust Duffelbag Angle" - set desc = "Adjust the angle of your dufflebag for cosmetic effect" - set category = "Object" - set src in usr - if(!usr.canmove || usr.stat || usr.restrained()) - return - if(!can_tilt) - to_chat(usr, "[src] can't be adjusted like that.") - return - if(tilted) - icon_state = "[initial(icon_state)]" - to_chat(usr, "You adjust the angle of \the [src] to rest across your lower back.") - tilted = 0 - else - icon_state = "[icon_state]_tilted" - to_chat(usr, "You adjust the angle of \the [src] to rest diagonally across your back.") - tilted = 1 - update_icon() - usr.update_inv_back() - -/obj/item/weapon/storage/backpack/dufflebag/syndie - name = "black dufflebag" - desc = "A large dufflebag for holding extra tactical supplies. This one appears to be made out of lighter material than usual." - icon_state = "duffle_syndie" - slowdown = 0 - -/obj/item/weapon/storage/backpack/dufflebag/syndie/med - name = "medical dufflebag" - desc = "A large dufflebag for holding extra tactical medical supplies. This one appears to be made out of lighter material than usual." - icon_state = "duffle_syndiemed" - -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo - name = "ammunition dufflebag" - desc = "A large dufflebag for holding extra weapons ammunition and supplies. This one appears to be made out of lighter material than usual." - icon_state = "duffle_syndieammo" - -/obj/item/weapon/storage/backpack/dufflebag/captain - name = "site manager's dufflebag" - desc = "A large dufflebag for holding extra captainly goods." - icon_state = "duffle_captain" - -/obj/item/weapon/storage/backpack/dufflebag/med - name = "medical dufflebag" - desc = "A large dufflebag for holding extra medical supplies." - icon_state = "duffle_medical" - -/obj/item/weapon/storage/backpack/dufflebag/emt - name = "EMT dufflebag" - desc = "A large dufflebag for holding extra medical supplies. This one has reflective stripes!" - icon_state = "duffle_emt" - -/obj/item/weapon/storage/backpack/dufflebag/sec - name = "security dufflebag" - desc = "A large dufflebag for holding extra security supplies and ammunition." - icon_state = "duffle_security" - -/obj/item/weapon/storage/backpack/dufflebag/eng - name = "industrial dufflebag" - desc = "A large dufflebag for holding extra tools and supplies." - icon_state = "duffle_industrial" - -/obj/item/weapon/storage/backpack/dufflebag/sci - name = "science dufflebag" - desc = "A large dufflebag for holding circuits and beakers." - icon_state = "duffle_science" - -/obj/item/weapon/storage/backpack/dufflebag/drone - name = "drone dufflebag" - desc = "A large dufflebag for holding small robots? Or maybe it's one used by robots!" - icon_state = "duffle_drone" - -/obj/item/weapon/storage/backpack/dufflebag/cursed - name = "cursed dufflebag" - desc = "That probably shouldn't be moving..." - icon_state = "duffle_curse" - -/* - * Satchel Types - */ - -/obj/item/weapon/storage/backpack/satchel - name = "leather satchel" - desc = "It's a very fancy satchel made with fine leather." - icon_state = "satchel" - -/obj/item/weapon/storage/backpack/satchel/withwallet - starts_with = list(/obj/item/weapon/storage/wallet/random) - -/obj/item/weapon/storage/backpack/satchel/norm - name = "satchel" - desc = "A trendy looking satchel." - icon_state = "satchel_grey" - -/obj/item/weapon/storage/backpack/satchel/white - name = "white satchel" - icon_state = "satchel_white" - -/obj/item/weapon/storage/backpack/satchel/fancy - name = "fancy satchel" - icon_state = "satchel_fancy" - -/obj/item/weapon/storage/backpack/satchel/military - name = "military satchel" - icon_state = "satchel_military" - -/obj/item/weapon/storage/backpack/satchel/eng - name = "industrial satchel" - desc = "A tough satchel with extra pockets." - icon_state = "satchel_industrial" - -/obj/item/weapon/storage/backpack/satchel/med - name = "medical satchel" - desc = "A sterile satchel used in medical departments." - icon_state = "satchel_medical" - -/obj/item/weapon/storage/backpack/satchel/vir - name = "virologist satchel" - desc = "A sterile satchel with virologist colours." - icon_state = "satchel_green" - -/obj/item/weapon/storage/backpack/satchel/chem - name = "chemist satchel" - desc = "A sterile satchel with chemist colours." - icon_state = "satchel_orange" - -/obj/item/weapon/storage/backpack/satchel/gen - name = "geneticist satchel" - desc = "A sterile satchel with geneticist colours." - icon_state = "satchel_blue" - -/obj/item/weapon/storage/backpack/satchel/tox - name = "scientist satchel" - desc = "Useful for holding research materials." - icon_state = "satchel_purple" - -/obj/item/weapon/storage/backpack/satchel/sec - name = "security satchel" - desc = "A robust satchel for security related needs." - icon_state = "satchel_security" - -/obj/item/weapon/storage/backpack/satchel/hyd - name = "hydroponics satchel" - desc = "A green satchel for plant related work." - icon_state = "satchel_hydro" - -/obj/item/weapon/storage/backpack/satchel/cap - name = "site manager's satchel" - desc = "An exclusive satchel for officers." - icon_state = "satchel_captain" - -//ERT backpacks. -/obj/item/weapon/storage/backpack/ert - name = "emergency response team backpack" - desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team." - icon_state = "ert_commander" - -//Commander -/obj/item/weapon/storage/backpack/ert/commander - name = "emergency response team commander backpack" - desc = "A spacious backpack with lots of pockets, worn by the commander of an Emergency Response Team." - -//Security -/obj/item/weapon/storage/backpack/ert/security - name = "emergency response team security backpack" - desc = "A spacious backpack with lots of pockets, worn by security members of an Emergency Response Team." - icon_state = "ert_security" - -//Engineering -/obj/item/weapon/storage/backpack/ert/engineer - name = "emergency response team engineer backpack" - desc = "A spacious backpack with lots of pockets, worn by engineering members of an Emergency Response Team." - icon_state = "ert_engineering" - -//Medical -/obj/item/weapon/storage/backpack/ert/medical - name = "emergency response team medical backpack" - desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team." - icon_state = "ert_medical" - -/* - * Courier Bags - */ - -/obj/item/weapon/storage/backpack/messenger - name = "messenger bag" - desc = "A sturdy backpack worn over one shoulder." - icon_state = "courier" - item_state_slots = list(slot_r_hand_str = "satchel_grey", slot_l_hand_str = "satchel_grey") - -/obj/item/weapon/storage/backpack/messenger/chem - name = "chemistry messenger bag" - desc = "A serile backpack worn over one shoulder. This one is in Chemsitry colors." - icon_state = "courier_chemistry" - item_state_slots = list(slot_r_hand_str = "satchel_orange", slot_l_hand_str = "satchel_orange") - -/obj/item/weapon/storage/backpack/messenger/med - name = "medical messenger bag" - desc = "A sterile backpack worn over one shoulder used in medical departments." - icon_state = "courier_medical" - item_state_slots = list(slot_r_hand_str = "satchel_medical", slot_l_hand_str = "satchel_medical") - -/obj/item/weapon/storage/backpack/messenger/viro - name = "virology messenger bag" - desc = "A sterile backpack worn over one shoulder. This one is in Virology colors." - icon_state = "courier_virology" - item_state_slots = list(slot_r_hand_str = "satchel_green", slot_l_hand_str = "satchel_green") - -/obj/item/weapon/storage/backpack/messenger/tox - name = "research messenger bag" - desc = "A backpack worn over one shoulder. Useful for holding science materials." - icon_state = "courier_toxins" - item_state_slots = list(slot_r_hand_str = "satchel_purple", slot_l_hand_str = "satchel_purple") - -/obj/item/weapon/storage/backpack/messenger/com - name = "command messenger bag" - desc = "A special backpack worn over one shoulder. This one is made specifically for officers." - icon_state = "courier_captain" - item_state_slots = list(slot_r_hand_str = "satchel_captain", slot_l_hand_str = "satchel_captain") - -/obj/item/weapon/storage/backpack/messenger/engi - name = "engineering messenger bag" - icon_state = "courier_industrial" - item_state_slots = list(slot_r_hand_str = "satchel_industrial", slot_l_hand_str = "satchel_industrial") - -/obj/item/weapon/storage/backpack/messenger/hyd - name = "hydroponics messenger bag" - desc = "A backpack worn over one shoulder. This one is designed for plant-related work." - icon_state = "courier_hydro" - item_state_slots = list(slot_r_hand_str = "satchel_hydro", slot_l_hand_str = "satchel_hydro") - -/obj/item/weapon/storage/backpack/messenger/sec - name = "security messenger bag" - desc = "A tactical backpack worn over one shoulder. This one is in Security colors." - icon_state = "courier_security" - item_state_slots = list(slot_r_hand_str = "satchel_security", slot_l_hand_str = "satchel_security") - -/obj/item/weapon/storage/backpack/messenger/black - icon_state = "courier_black" - - -/* - * Sport Bags - */ - -/obj/item/weapon/storage/backpack/sport - name = "sports backpack" - icon_state = "backsport" - -/obj/item/weapon/storage/backpack/sport/white - name = "white sports backpack" - icon_state = "backsport_white" - -/obj/item/weapon/storage/backpack/sport/fancy - name = "fancy sports backpack" - icon_state = "backsport_fancy" - -/obj/item/weapon/storage/backpack/sport/vir - name = "virologist sports backpack" - desc = "A sterile sports backpack with virologist colours." - icon_state = "backsport_green" - -/obj/item/weapon/storage/backpack/sport/chem - name = "chemist sports backpack" - desc = "A sterile sports backpack with chemist colours." - icon_state = "backsport_orange" - -/obj/item/weapon/storage/backpack/sport/gen - name = "geneticist sports backpack" - desc = "A sterile sports backpack with geneticist colours." - icon_state = "backsport_blue" - -/obj/item/weapon/storage/backpack/sport/tox - name = "scientist sports backpack" - desc = "Useful for holding research materials." - icon_state = "backsport_purple" - -/obj/item/weapon/storage/backpack/sport/sec - name = "security sports backpack" - desc = "A robust sports backpack for security related needs." - icon_state = "backsport_security" - -/obj/item/weapon/storage/backpack/sport/hyd - name = "hydroponics sports backpack" - desc = "A green sports backpack for plant related work." - icon_state = "backsport_hydro" - -//Purses -/obj/item/weapon/storage/backpack/purse - name = "purse" - desc = "A small, fashionable bag typically worn over the shoulder." - icon_state = "purse" - item_state_slots = list(slot_r_hand_str = "lgpurse", slot_l_hand_str = "lgpurse") - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 5 - -//Parachutes -/obj/item/weapon/storage/backpack/parachute - name = "parachute" - desc = "A specially made backpack, designed to help one survive jumping from incredible heights. It sacrifices some storage space for that added functionality." - icon_state = "parachute" - item_state_slots = list(slot_r_hand_str = "backpack", slot_l_hand_str = "backpack") - max_storage_space = ITEMSIZE_COST_NORMAL * 5 - -/obj/item/weapon/storage/backpack/parachute/examine(mob/user) - . = ..() - if(Adjacent(user)) - if(parachute) - . += "It seems to be packed." - else - . += "It seems to be unpacked." - -/obj/item/weapon/storage/backpack/parachute/handleParachute() - parachute = FALSE //If you parachute in, the parachute has probably been used. - -/obj/item/weapon/storage/backpack/parachute/verb/pack_parachute() - - set name = "Pack/Unpack Parachute" - set category = "Object" - set src in usr - - if(!istype(src.loc, /mob/living)) - return - - var/mob/living/carbon/human/H = usr - - if(!istype(H)) - return - if(H.stat) - return - if(H.back == src) - to_chat(H, "How do you expect to work on \the [src] while it's on your back?") - return - - if(!parachute) //This packs the parachute - H.visible_message("\The [H] starts to pack \the [src]!", \ - "You start to pack \the [src]!", \ - "You hear the shuffling of cloth.") - if(do_after(H, 50)) - H.visible_message("\The [H] finishes packing \the [src]!", \ - "You finish packing \the [src]!", \ - "You hear the shuffling of cloth.") - parachute = TRUE - else - H.visible_message("\The [src] gives up on packing \the [src]!", \ - "You give up on packing \the [src]!") - return - else //This unpacks the parachute - H.visible_message("\The [src] starts to unpack \the [src]!", \ - "You start to unpack \the [src]!", \ - "You hear the shuffling of cloth.") - if(do_after(H, 25)) - H.visible_message("\The [src] finishes unpacking \the [src]!", \ - "You finish unpacking \the [src]!", \ - "You hear the shuffling of cloth.") - parachute = FALSE - else - H.visible_message("\The [src] decides not to unpack \the [src]!", \ - "You decide not to unpack \the [src]!") - return - -/obj/item/weapon/storage/backpack/satchel/ranger - name = "ranger satchel" - desc = "A satchel designed for the Go Go ERT Rangers series to allow for slightly bigger carry capacity for the ERT-Rangers.\ - Unlike the show claims, it is not a phoron-enhanced satchel of holding with plot-relevant content." - icon = 'icons/obj/clothing/ranger.dmi' - icon_state = "ranger_satchel" +/* + * Backpack + */ + +/obj/item/weapon/storage/backpack + name = "backpack" + desc = "You wear this on your back and put items into it." + icon = 'icons/inventory/back/item.dmi' + icon_state = "backpack" + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/back/mob_teshari.dmi' + ) + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + max_w_class = ITEMSIZE_LARGE + max_storage_space = INVENTORY_STANDARD_SPACE + var/flippable = 0 + var/side = 0 //0 = right, 1 = left + drop_sound = 'sound/items/drop/backpack.ogg' + pickup_sound = 'sound/items/pickup/backpack.ogg' + + +/obj/item/weapon/storage/backpack/equipped(var/mob/user, var/slot) + if (slot == slot_back && src.use_sound) +// Chomp edit + if(isbelly(user.loc)) + var/obj/belly/B = user.loc + if(B.mode_flags & DM_FLAG_MUFFLEITEMS) + return + else +// Chomp edit end + playsound(src, src.use_sound, 50, 1, -5) + + ..(user, slot) + +/* +/obj/item/weapon/storage/backpack/dropped(mob/user as mob) + if (loc == user && src.use_sound) + playsound(src, src.use_sound, 50, 1, -5) + ..(user) +*/ + +/* + * Backpack Types + */ + +/obj/item/weapon/storage/backpack/holding + name = "bag of holding" + desc = "A backpack that opens into a localized pocket of Blue Space." + origin_tech = list(TECH_BLUESPACE = 4) + icon_state = "holdingpack" + max_w_class = ITEMSIZE_LARGE + max_storage_space = ITEMSIZE_COST_NORMAL * 14 // 56 + storage_cost = INVENTORY_STANDARD_SPACE + 1 + +/obj/item/weapon/storage/backpack/holding/duffle + name = "dufflebag of holding" + var/tilted = 0 + icon_state = "holdingduffle" + +/obj/item/weapon/storage/backpack/holding/duffle/Initialize() + . = ..() + if(prob(50)) + icon_state = "[icon_state]_tilted" + tilted = 1 + +/obj/item/weapon/storage/backpack/holding/duffle/verb/tilt() + set name = "Adjust Duffelbag Angle" + set desc = "Adjust the angle of your dufflebag for cosmetic effect" + set category = "Object" + set src in usr + if(!usr.canmove || usr.stat || usr.restrained()) + return + if(tilted) + icon_state = "[initial(icon_state)]" + to_chat(usr, "You adjust the angle of \the [src] to rest across your lower back.") + tilted = 0 + else + icon_state = "[icon_state]_tilted" + to_chat(usr, "You adjust the angle of \the [src] to rest diagonally across your back.") + tilted = 1 + update_icon() + usr.update_inv_back() + +/obj/item/weapon/storage/backpack/holding/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/storage/backpack/holding)) + to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") + qdel(W) + return + . = ..() + +//Please don't clutter the parent storage item with stupid hacks. +/obj/item/weapon/storage/backpack/holding/can_be_inserted(obj/item/W as obj, stop_messages = 0) + if(istype(W, /obj/item/weapon/storage/backpack/holding)) + return FALSE + return ..() + +/obj/item/weapon/storage/backpack/santabag + name = "\improper Santa's gift bag" + desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!" + icon_state = "giftbag0" + item_state_slots = list(slot_r_hand_str = "giftbag", slot_l_hand_str = "giftbag") + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 100 // can store a ton of shit! + +/obj/item/weapon/storage/backpack/cultpack + name = "trophy rack" + desc = "It's useful for both carrying extra gear and proudly declaring your insanity." + icon_state = "backpack_cult" + +/obj/item/weapon/storage/backpack/clown + name = "Giggles von Honkerton" + desc = "It's a backpack made by Honk! Co." + icon_state = "backpack_clown" + +/obj/item/weapon/storage/backpack/white + name = "white backpack" + icon_state = "backpack_white" + +/obj/item/weapon/storage/backpack/fancy + name = "fancy backpack" + icon_state = "backpack_fancy" + +/obj/item/weapon/storage/backpack/military + name = "military backpack" + icon_state = "backpack_military" + +/obj/item/weapon/storage/backpack/medic + name = "medical backpack" + desc = "It's a backpack especially designed for use in a sterile environment." + icon_state = "backpack_medical" + +/obj/item/weapon/storage/backpack/security + name = "security backpack" + desc = "It's a very robust backpack." + icon_state = "backpack_security" + +/obj/item/weapon/storage/backpack/captain + name = "site manager's backpack" + desc = "It's a special backpack made exclusively for officers." + icon_state = "backpack_captain" + +/obj/item/weapon/storage/backpack/industrial + name = "industrial backpack" + desc = "It's a tough backpack for the daily grind of station life." + icon_state = "backpack_industrial" + +/obj/item/weapon/storage/backpack/toxins + name = "laboratory backpack" + desc = "It's a light backpack modeled for use in laboratories and other scientific institutions." + icon_state = "backpack_purple" + +/obj/item/weapon/storage/backpack/hydroponics + name = "herbalist's backpack" + desc = "It's a green backpack with many pockets to store plants and tools in." + icon_state = "backpack_hydro" + +/obj/item/weapon/storage/backpack/genetics + name = "geneticist backpack" + desc = "It's a backpack fitted with slots for diskettes and other workplace tools." + icon_state = "backpack_blue" + +/obj/item/weapon/storage/backpack/virology + name = "sterile backpack" + desc = "It's a sterile backpack able to withstand different pathogens from entering its fabric." + icon_state = "backpack_green" + +/obj/item/weapon/storage/backpack/chemistry + name = "chemistry backpack" + desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles." + icon_state = "backpack_orange" + +/* + * Duffle Types + */ + +/obj/item/weapon/storage/backpack/dufflebag + name = "dufflebag" + desc = "A large dufflebag for holding extra things." + icon_state = "duffle" + slowdown = 0.5 + var/tilted = 0 + var/can_tilt = 1 + max_storage_space = INVENTORY_DUFFLEBAG_SPACE + +/obj/item/weapon/storage/backpack/dufflebag/Initialize() + . = ..() + if(prob(50)) + icon_state = "[icon_state]_tilted" + tilted = 1 + +/obj/item/weapon/storage/backpack/dufflebag/verb/tilt() + set name = "Adjust Duffelbag Angle" + set desc = "Adjust the angle of your dufflebag for cosmetic effect" + set category = "Object" + set src in usr + if(!usr.canmove || usr.stat || usr.restrained()) + return + if(!can_tilt) + to_chat(usr, "[src] can't be adjusted like that.") + return + if(tilted) + icon_state = "[initial(icon_state)]" + to_chat(usr, "You adjust the angle of \the [src] to rest across your lower back.") + tilted = 0 + else + icon_state = "[icon_state]_tilted" + to_chat(usr, "You adjust the angle of \the [src] to rest diagonally across your back.") + tilted = 1 + update_icon() + usr.update_inv_back() + +/obj/item/weapon/storage/backpack/dufflebag/syndie + name = "black dufflebag" + desc = "A large dufflebag for holding extra tactical supplies. This one appears to be made out of lighter material than usual." + icon_state = "duffle_syndie" + slowdown = 0 + +/obj/item/weapon/storage/backpack/dufflebag/syndie/med + name = "medical dufflebag" + desc = "A large dufflebag for holding extra tactical medical supplies. This one appears to be made out of lighter material than usual." + icon_state = "duffle_syndiemed" + +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo + name = "ammunition dufflebag" + desc = "A large dufflebag for holding extra weapons ammunition and supplies. This one appears to be made out of lighter material than usual." + icon_state = "duffle_syndieammo" + +/obj/item/weapon/storage/backpack/dufflebag/captain + name = "site manager's dufflebag" + desc = "A large dufflebag for holding extra captainly goods." + icon_state = "duffle_captain" + +/obj/item/weapon/storage/backpack/dufflebag/med + name = "medical dufflebag" + desc = "A large dufflebag for holding extra medical supplies." + icon_state = "duffle_medical" + +/obj/item/weapon/storage/backpack/dufflebag/emt + name = "EMT dufflebag" + desc = "A large dufflebag for holding extra medical supplies. This one has reflective stripes!" + icon_state = "duffle_emt" + +/obj/item/weapon/storage/backpack/dufflebag/sec + name = "security dufflebag" + desc = "A large dufflebag for holding extra security supplies and ammunition." + icon_state = "duffle_security" + +/obj/item/weapon/storage/backpack/dufflebag/eng + name = "industrial dufflebag" + desc = "A large dufflebag for holding extra tools and supplies." + icon_state = "duffle_industrial" + +/obj/item/weapon/storage/backpack/dufflebag/sci + name = "science dufflebag" + desc = "A large dufflebag for holding circuits and beakers." + icon_state = "duffle_science" + +/obj/item/weapon/storage/backpack/dufflebag/drone + name = "drone dufflebag" + desc = "A large dufflebag for holding small robots? Or maybe it's one used by robots!" + icon_state = "duffle_drone" + +/obj/item/weapon/storage/backpack/dufflebag/cursed + name = "cursed dufflebag" + desc = "That probably shouldn't be moving..." + icon_state = "duffle_curse" + +/* + * Satchel Types + */ + +/obj/item/weapon/storage/backpack/satchel + name = "leather satchel" + desc = "It's a very fancy satchel made with fine leather." + icon_state = "satchel" + +/obj/item/weapon/storage/backpack/satchel/withwallet + starts_with = list(/obj/item/weapon/storage/wallet/random) + +/obj/item/weapon/storage/backpack/satchel/norm + name = "satchel" + desc = "A trendy looking satchel." + icon_state = "satchel_grey" + +/obj/item/weapon/storage/backpack/satchel/white + name = "white satchel" + icon_state = "satchel_white" + +/obj/item/weapon/storage/backpack/satchel/fancy + name = "fancy satchel" + icon_state = "satchel_fancy" + +/obj/item/weapon/storage/backpack/satchel/military + name = "military satchel" + icon_state = "satchel_military" + +/obj/item/weapon/storage/backpack/satchel/eng + name = "industrial satchel" + desc = "A tough satchel with extra pockets." + icon_state = "satchel_industrial" + +/obj/item/weapon/storage/backpack/satchel/med + name = "medical satchel" + desc = "A sterile satchel used in medical departments." + icon_state = "satchel_medical" + +/obj/item/weapon/storage/backpack/satchel/vir + name = "virologist satchel" + desc = "A sterile satchel with virologist colours." + icon_state = "satchel_green" + +/obj/item/weapon/storage/backpack/satchel/chem + name = "chemist satchel" + desc = "A sterile satchel with chemist colours." + icon_state = "satchel_orange" + +/obj/item/weapon/storage/backpack/satchel/gen + name = "geneticist satchel" + desc = "A sterile satchel with geneticist colours." + icon_state = "satchel_blue" + +/obj/item/weapon/storage/backpack/satchel/tox + name = "scientist satchel" + desc = "Useful for holding research materials." + icon_state = "satchel_purple" + +/obj/item/weapon/storage/backpack/satchel/sec + name = "security satchel" + desc = "A robust satchel for security related needs." + icon_state = "satchel_security" + +/obj/item/weapon/storage/backpack/satchel/hyd + name = "hydroponics satchel" + desc = "A green satchel for plant related work." + icon_state = "satchel_hydro" + +/obj/item/weapon/storage/backpack/satchel/cap + name = "site manager's satchel" + desc = "An exclusive satchel for officers." + icon_state = "satchel_captain" + +//ERT backpacks. +/obj/item/weapon/storage/backpack/ert + name = "emergency response team backpack" + desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team." + icon_state = "ert_commander" + +//Commander +/obj/item/weapon/storage/backpack/ert/commander + name = "emergency response team commander backpack" + desc = "A spacious backpack with lots of pockets, worn by the commander of an Emergency Response Team." + +//Security +/obj/item/weapon/storage/backpack/ert/security + name = "emergency response team security backpack" + desc = "A spacious backpack with lots of pockets, worn by security members of an Emergency Response Team." + icon_state = "ert_security" + +//Engineering +/obj/item/weapon/storage/backpack/ert/engineer + name = "emergency response team engineer backpack" + desc = "A spacious backpack with lots of pockets, worn by engineering members of an Emergency Response Team." + icon_state = "ert_engineering" + +//Medical +/obj/item/weapon/storage/backpack/ert/medical + name = "emergency response team medical backpack" + desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team." + icon_state = "ert_medical" + +/* + * Courier Bags + */ + +/obj/item/weapon/storage/backpack/messenger + name = "messenger bag" + desc = "A sturdy backpack worn over one shoulder." + icon_state = "courier" + item_state_slots = list(slot_r_hand_str = "satchel_grey", slot_l_hand_str = "satchel_grey") + +/obj/item/weapon/storage/backpack/messenger/chem + name = "chemistry messenger bag" + desc = "A serile backpack worn over one shoulder. This one is in Chemsitry colors." + icon_state = "courier_chemistry" + item_state_slots = list(slot_r_hand_str = "satchel_orange", slot_l_hand_str = "satchel_orange") + +/obj/item/weapon/storage/backpack/messenger/med + name = "medical messenger bag" + desc = "A sterile backpack worn over one shoulder used in medical departments." + icon_state = "courier_medical" + item_state_slots = list(slot_r_hand_str = "satchel_medical", slot_l_hand_str = "satchel_medical") + +/obj/item/weapon/storage/backpack/messenger/viro + name = "virology messenger bag" + desc = "A sterile backpack worn over one shoulder. This one is in Virology colors." + icon_state = "courier_virology" + item_state_slots = list(slot_r_hand_str = "satchel_green", slot_l_hand_str = "satchel_green") + +/obj/item/weapon/storage/backpack/messenger/tox + name = "research messenger bag" + desc = "A backpack worn over one shoulder. Useful for holding science materials." + icon_state = "courier_toxins" + item_state_slots = list(slot_r_hand_str = "satchel_purple", slot_l_hand_str = "satchel_purple") + +/obj/item/weapon/storage/backpack/messenger/com + name = "command messenger bag" + desc = "A special backpack worn over one shoulder. This one is made specifically for officers." + icon_state = "courier_captain" + item_state_slots = list(slot_r_hand_str = "satchel_captain", slot_l_hand_str = "satchel_captain") + +/obj/item/weapon/storage/backpack/messenger/engi + name = "engineering messenger bag" + icon_state = "courier_industrial" + item_state_slots = list(slot_r_hand_str = "satchel_industrial", slot_l_hand_str = "satchel_industrial") + +/obj/item/weapon/storage/backpack/messenger/hyd + name = "hydroponics messenger bag" + desc = "A backpack worn over one shoulder. This one is designed for plant-related work." + icon_state = "courier_hydro" + item_state_slots = list(slot_r_hand_str = "satchel_hydro", slot_l_hand_str = "satchel_hydro") + +/obj/item/weapon/storage/backpack/messenger/sec + name = "security messenger bag" + desc = "A tactical backpack worn over one shoulder. This one is in Security colors." + icon_state = "courier_security" + item_state_slots = list(slot_r_hand_str = "satchel_security", slot_l_hand_str = "satchel_security") + +/obj/item/weapon/storage/backpack/messenger/black + icon_state = "courier_black" + + +/* + * Sport Bags + */ + +/obj/item/weapon/storage/backpack/sport + name = "sports backpack" + icon_state = "backsport" + +/obj/item/weapon/storage/backpack/sport/white + name = "white sports backpack" + icon_state = "backsport_white" + +/obj/item/weapon/storage/backpack/sport/fancy + name = "fancy sports backpack" + icon_state = "backsport_fancy" + +/obj/item/weapon/storage/backpack/sport/vir + name = "virologist sports backpack" + desc = "A sterile sports backpack with virologist colours." + icon_state = "backsport_green" + +/obj/item/weapon/storage/backpack/sport/chem + name = "chemist sports backpack" + desc = "A sterile sports backpack with chemist colours." + icon_state = "backsport_orange" + +/obj/item/weapon/storage/backpack/sport/gen + name = "geneticist sports backpack" + desc = "A sterile sports backpack with geneticist colours." + icon_state = "backsport_blue" + +/obj/item/weapon/storage/backpack/sport/tox + name = "scientist sports backpack" + desc = "Useful for holding research materials." + icon_state = "backsport_purple" + +/obj/item/weapon/storage/backpack/sport/sec + name = "security sports backpack" + desc = "A robust sports backpack for security related needs." + icon_state = "backsport_security" + +/obj/item/weapon/storage/backpack/sport/hyd + name = "hydroponics sports backpack" + desc = "A green sports backpack for plant related work." + icon_state = "backsport_hydro" + +//Purses +/obj/item/weapon/storage/backpack/purse + name = "purse" + desc = "A small, fashionable bag typically worn over the shoulder." + icon_state = "purse" + item_state_slots = list(slot_r_hand_str = "lgpurse", slot_l_hand_str = "lgpurse") + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 5 + +//Parachutes +/obj/item/weapon/storage/backpack/parachute + name = "parachute" + desc = "A specially made backpack, designed to help one survive jumping from incredible heights. It sacrifices some storage space for that added functionality." + icon_state = "parachute" + item_state_slots = list(slot_r_hand_str = "backpack", slot_l_hand_str = "backpack") + max_storage_space = ITEMSIZE_COST_NORMAL * 5 + +/obj/item/weapon/storage/backpack/parachute/examine(mob/user) + . = ..() + if(Adjacent(user)) + if(parachute) + . += "It seems to be packed." + else + . += "It seems to be unpacked." + +/obj/item/weapon/storage/backpack/parachute/handleParachute() + parachute = FALSE //If you parachute in, the parachute has probably been used. + +/obj/item/weapon/storage/backpack/parachute/verb/pack_parachute() + + set name = "Pack/Unpack Parachute" + set category = "Object" + set src in usr + + if(!istype(src.loc, /mob/living)) + return + + var/mob/living/carbon/human/H = usr + + if(!istype(H)) + return + if(H.stat) + return + if(H.back == src) + to_chat(H, "How do you expect to work on \the [src] while it's on your back?") + return + + if(!parachute) //This packs the parachute + H.visible_message("\The [H] starts to pack \the [src]!", \ + "You start to pack \the [src]!", \ + "You hear the shuffling of cloth.") + if(do_after(H, 50)) + H.visible_message("\The [H] finishes packing \the [src]!", \ + "You finish packing \the [src]!", \ + "You hear the shuffling of cloth.") + parachute = TRUE + else + H.visible_message("\The [src] gives up on packing \the [src]!", \ + "You give up on packing \the [src]!") + return + else //This unpacks the parachute + H.visible_message("\The [src] starts to unpack \the [src]!", \ + "You start to unpack \the [src]!", \ + "You hear the shuffling of cloth.") + if(do_after(H, 25)) + H.visible_message("\The [src] finishes unpacking \the [src]!", \ + "You finish unpacking \the [src]!", \ + "You hear the shuffling of cloth.") + parachute = FALSE + else + H.visible_message("\The [src] decides not to unpack \the [src]!", \ + "You decide not to unpack \the [src]!") + return + +/obj/item/weapon/storage/backpack/satchel/ranger + name = "ranger satchel" + desc = "A satchel designed for the Go Go ERT Rangers series to allow for slightly bigger carry capacity for the ERT-Rangers.\ + Unlike the show claims, it is not a phoron-enhanced satchel of holding with plot-relevant content." + icon = 'icons/obj/clothing/ranger.dmi' + icon_state = "ranger_satchel" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 0b91921e8f..3ee2480fdc 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -1,495 +1,495 @@ -/* - * These absorb the functionality of the plant bag, ore satchel, etc. - * They use the use_to_pickup, quick_gather, and quick_empty functions - * that were already defined in weapon/storage, but which had been - * re-implemented in other classes. - * - * Contains: - * Generic non-item - * Trash Bag - * Plastic Bag - * Mining Satchel - * Plant Bag - * Sheet Snatcher - * Sheet Snatcher (Cyborg) - * Cash Bag - * Chemistry Bag - * Food Bag - * Food Bag (Service Hound) - * Evidence Bag - * - * -Sayu - */ - - -// ----------------------------- -// Generic non-item -// ----------------------------- -/obj/item/weapon/storage/bag - allow_quick_gather = 1 - allow_quick_empty = 1 - display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients - use_to_pickup = TRUE - slot_flags = SLOT_BELT - drop_sound = 'sound/items/drop/backpack.ogg' - pickup_sound = 'sound/items/pickup/backpack.ogg' - -// ----------------------------- -// Trash bag -// ----------------------------- -/obj/item/weapon/storage/bag/trash - name = "trash bag" - desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" - icon = 'icons/obj/janitor.dmi' - icon_state = "trashbag0" - item_state_slots = list(slot_r_hand_str = "trashbag", slot_l_hand_str = "trashbag") - drop_sound = 'sound/items/drop/wrapper.ogg' - pickup_sound = 'sound/items/pickup/wrapper.ogg' - - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_SMALL - max_storage_space = ITEMSIZE_SMALL * 21 - can_hold = list() // any - cant_hold = list(/obj/item/weapon/disk/nuclear) - -/obj/item/weapon/storage/bag/trash/update_icon() - if(contents.len == 0) - icon_state = "trashbag0" - else if(contents.len < 9) - icon_state = "trashbag1" - else if(contents.len < 18) - icon_state = "trashbag2" - else icon_state = "trashbag3" - -/obj/item/weapon/storage/bag/trash/holding - name = "trash bag of holding" - desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." - icon_state = "bluetrashbag" - origin_tech = list(TECH_BLUESPACE = 3) - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 10 // Slightly less than BoH - -/obj/item/weapon/storage/bag/trash/holding/update_icon() - return - -// ----------------------------- -// Plastic Bag -// ----------------------------- -/obj/item/weapon/storage/bag/plasticbag - name = "plastic bag" - desc = "It's a very flimsy, very noisy alternative to a bag." - icon = 'icons/obj/trash.dmi' - icon_state = "plasticbag" - drop_sound = 'sound/items/drop/wrapper.ogg' - pickup_sound = 'sound/items/pickup/wrapper.ogg' - - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_SMALL - can_hold = list() // any - cant_hold = list(/obj/item/weapon/disk/nuclear) - -// ----------------------------- -// Mining Satchel -// ----------------------------- -/* - * Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. - * Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents. - */ -/obj/item/weapon/storage/bag/ore - name = "mining satchel" - desc = "This little bugger can be used to store and transport ores." - icon = 'icons/obj/mining.dmi' - icon_state = "satchel" - slot_flags = SLOT_BELT | SLOT_POCKET - w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 25 - max_w_class = ITEMSIZE_NORMAL - can_hold = list(/obj/item/weapon/ore) - var/current_capacity = 0 - var/max_pickup = 100 //How much ore can be picked up in one go. There to prevent someone from walking on a turf with 10000 ore and making the server cry. - var/list/stored_ore = list( - "sand" = 0, - "hematite" = 0, - "carbon" = 0, - "raw copper" = 0, - "raw tin" = 0, - "void opal" = 0, - "painite" = 0, - "quartz" = 0, - "raw bauxite" = 0, - "phoron" = 0, - "silver" = 0, - "gold" = 0, - "marble" = 0, - "uranium" = 0, - "diamond" = 0, - "platinum" = 0, - "lead" = 0, - "mhydrogen" = 0, - "verdantium" = 0, - "rutile" = 0) - var/last_update = 0 - -/obj/item/weapon/storage/bag/ore/holding - name = "mining satchel of holding" - desc = "Like a mining satchel, but when you put your hand in, you're pretty sure you can feel time itself." - icon_state = "satchel_bspace" - max_storage_space = ITEMSIZE_COST_NORMAL * 15000 // This should never, ever, ever be reached. - -/obj/item/weapon/storage/bag/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(current_capacity >= max_storage_space) - to_chat(user, "\the [src] is too full to possibly fit anything else inside of it.") - return - - if (istype(W, /obj/item/weapon/ore)) - var/obj/item/weapon/ore/ore = W - stored_ore[ore.material]++ - current_capacity++ - user.remove_from_mob(W) - qdel(ore) - -/obj/item/weapon/storage/bag/ore/remove_from_storage(obj/item/W as obj, atom/new_location) - if(!istype(W)) return 0 - - if(new_location) - if(ismob(loc)) - W.dropped(usr) - if(ismob(new_location)) - W.hud_layerise() - else - W.reset_plane_and_layer() - W.forceMove(new_location) - else - W.forceMove(get_turf(src)) - - W.on_exit_storage(src) - update_icon() - return 1 - -/obj/item/weapon/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0) - var/success = 0 - var/failure = 0 - var/current_pickup = 0 - var/max_pickup_reached = 0 - for(var/obj/item/weapon/ore/O in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds. - if(current_capacity >= max_storage_space) - failure = 1 - break - if(current_pickup >= max_pickup) - max_pickup_reached = 1 - break - var/obj/item/weapon/ore/ore = O - stored_ore[ore.material]++ - current_capacity++ - current_pickup++ - qdel(ore) - success = 1 - if(!silent) //Let's do a single check and then do more instead of a bunch at once. - if(success && !failure && !max_pickup_reached) //Picked stuff up, did not reach capacity, did not reach max_pickup. - to_chat(user, "You put everything in [src].") - else if(success && failure) //Picked stuff up to capacity. - to_chat(user, "You fill the [src].") - else if(success && max_pickup_reached) //Picked stuff up to the max_pickup - to_chat(user, "You fill the [src] with as much as you can grab in one go.") - else //Failed. The bag is full. - to_chat(user, "You fail to pick anything up with \the [src].") - if(istype(user.pulling, /obj/structure/ore_box)) //Bit of a crappy way to do this, as it doubles spam for the user, but it works. //Then let me fix it. ~CL. - var/obj/structure/ore_box/OB = user.pulling - for(var/ore in stored_ore) - if(stored_ore[ore] > 0) - var/ore_amount = stored_ore[ore] // How many ores does the satchel have? - OB.stored_ore[ore] += ore_amount // Add the ore to the box - stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. - current_capacity = 0 // Set the amount of ore in the satchel to 0. - current_pickup = 0 - -/obj/item/weapon/storage/bag/ore/equipped(mob/user) - ..() - if(user.get_inventory_slot(src) == slot_wear_suit || slot_l_hand || slot_l_hand || slot_belt) //Basically every place they can go. Makes sure it doesn't unregister if moved to other slots. - GLOB.moved_event.register(user, src, /obj/item/weapon/storage/bag/ore/proc/autoload, user) - -/obj/item/weapon/storage/bag/ore/dropped(mob/user) - ..() - if(user.get_inventory_slot(src) == slot_wear_suit || slot_l_hand || slot_l_hand || slot_belt) //See above. This should really be a define. - GLOB.moved_event.register(user, src, /obj/item/weapon/storage/bag/ore/proc/autoload, user) - else - GLOB.moved_event.unregister(user, src) - -/obj/item/weapon/storage/bag/ore/proc/autoload(mob/user) - var/obj/item/weapon/ore/O = locate() in get_turf(src) - if(O) - gather_all(get_turf(src), user) - -/obj/item/weapon/storage/bag/ore/proc/rangedload(atom/A, mob/user) - var/obj/item/weapon/ore/O = locate() in get_turf(A) - if(O) - gather_all(get_turf(A), user) - -/obj/item/weapon/storage/bag/ore/examine(mob/user) - . = ..() - - if(!Adjacent(user)) //Can only check the contents of ore bags if you can physically reach them. - return . - - if(istype(user, /mob/living)) - add_fingerprint(user) - - . += "It holds:" - var/has_ore = 0 - for(var/ore in stored_ore) - if(stored_ore[ore] > 0) - . += "- [stored_ore[ore]] [ore]" - has_ore = 1 - if(!has_ore) - . += "Nothing." - -/obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it. - user.examinate(src) - -// ----------------------------- -// Plant bag -// ----------------------------- -/obj/item/weapon/storage/bag/plants - name = "plant bag" - icon = 'icons/obj/hydroponics_machines_vr.dmi' - icon_state = "plantbag" - desc = "A sturdy bag used to transport fresh produce with ease." - max_storage_space = ITEMSIZE_COST_NORMAL * 25 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) - -/obj/item/weapon/storage/bag/plants/large - name = "large plant bag" - icon_state = "large_plantbag" - desc = "A large and sturdy bag used to transport fresh produce with ease." - max_storage_space = ITEMSIZE_COST_NORMAL * 50 - -// ----------------------------- -// Sheet Snatcher -// ----------------------------- -// Because it stacks stacks, this doesn't operate normally. -// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu - -/obj/item/weapon/storage/bag/sheetsnatcher - name = "sheet snatcher" - icon = 'icons/obj/mining.dmi' - icon_state = "sheetsnatcher" - desc = "A patented storage system designed for any kind of mineral sheet." - - var/capacity = 300; //the number of sheets it can carry. - w_class = ITEMSIZE_NORMAL - storage_slots = 7 - - allow_quick_empty = 1 // this function is superceded - -/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(!istype(W,/obj/item/stack/material)) - if(!stop_messages) - to_chat(usr, "The snatcher does not accept [W].") - return 0 - var/current = 0 - for(var/obj/item/stack/material/S in contents) - current += S.get_amount() - if(capacity == current)//If it's full, you're done - if(!stop_messages) - to_chat(usr, "The snatcher is full.") - return 0 - return 1 - - -// Modified handle_item_insertion. Would prefer not to, but... -/obj/item/weapon/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - var/obj/item/stack/material/S = W - if(!istype(S)) return 0 - - var/amount - var/inserted = 0 - var/current = 0 - for(var/obj/item/stack/material/S2 in contents) - current += S2.get_amount() - if(capacity < current + S.get_amount())//If the stack will fill it up - amount = capacity - current - else - amount = S.get_amount() - - for(var/obj/item/stack/material/sheet in contents) - if(S.type == sheet.type) - // we are violating the amount limitation because these are not sane objects - sheet.set_amount(sheet.get_amount() + amount, TRUE) - S.use(amount) // will qdel() if we use it all - inserted = 1 - break - - if(!inserted) - usr.remove_from_mob(S) - if (usr.client && usr.s_active != src) - usr.client.screen -= S - S.dropped(usr) - S.loc = src - - orient2hud(usr) - if(usr.s_active) - usr.s_active.show_to(usr) - update_icon() - return 1 - -// Sets up numbered display to show the stack size of each stored mineral -// NOTE: numbered display is turned off currently because it's broken -/obj/item/weapon/storage/bag/sheetsnatcher/orient2hud(mob/user as mob) - var/adjusted_contents = contents.len - - //Numbered contents display - var/list/datum/numbered_display/numbered_contents - if(display_contents_with_number) - numbered_contents = list() - adjusted_contents = 0 - for(var/obj/item/stack/material/I in contents) - adjusted_contents++ - var/datum/numbered_display/D = new/datum/numbered_display(I) - D.number = I.get_amount() - numbered_contents.Add( D ) - - var/row_num = 0 - var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.slot_orient_objs(row_num, col_count, numbered_contents) - return - -// Modified quick_empty verb drops appropriate sized stacks -/obj/item/weapon/storage/bag/sheetsnatcher/quick_empty() - var/location = get_turf(src) - for(var/obj/item/stack/material/S in contents) - var/cur_amount = S.get_amount() - var/full_stacks = round(cur_amount / S.max_amount) // Floor of current/max is amount of full stacks we make - var/remainder = cur_amount % S.max_amount // Current mod max is remainder after full sheets removed - for(var/i = 1 to full_stacks) - new S.type(location, S.max_amount) - if(remainder) - new S.type(location, remainder) - S.set_amount(0) - orient2hud(usr) - if(usr.s_active) - usr.s_active.show_to(usr) - update_icon() - -// Instead of removing -/obj/item/weapon/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location) - var/obj/item/stack/material/S = W - if(!istype(S)) return 0 - - //I would prefer to drop a new stack, but the item/attack_hand code - // that calls this can't recieve a different object than you clicked on. - //Therefore, make a new stack internally that has the remainder. - // -Sayu - - if(S.get_amount() > S.max_amount) - var/newstack_amt = S.get_amount() - S.max_amount - new S.type(src, newstack_amt) // The one we'll keep to replace the one we give - S.set_amount(S.max_amount) // The one we hand to the clicker - - return ..(S,new_location) - -// ----------------------------- -// Sheet Snatcher (Cyborg) -// ----------------------------- - -/obj/item/weapon/storage/bag/sheetsnatcher/borg - name = "sheet snatcher 9000" - desc = null - capacity = 500//Borgs get more because >specialization - -// ----------------------------- -// Cash Bag -// ----------------------------- - -/obj/item/weapon/storage/bag/cash - name = "cash bag" - icon = 'icons/obj/storage.dmi' - icon_state = "cashbag" - desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." - max_storage_space = ITEMSIZE_COST_NORMAL * 25 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash,/obj/item/weapon/spacecasinocash) - -// ----------------------------- -// Chemistry Bag -// ----------------------------- -/obj/item/weapon/storage/bag/chemistry - name = "chemistry bag" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "chembag" - desc = "A bag for storing pills, patches, and bottles." - max_storage_space = 200 - w_class = ITEMSIZE_LARGE - slowdown = 3 - can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle) - -// ----------------------------- -// Xeno Bag -// ----------------------------- -/obj/item/weapon/storage/bag/xeno - name = "xenobiology bag" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "xenobag" - desc = "A bag for storing various slime products." - max_storage_space = ITEMSIZE_COST_SMALL * 12 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/slime_extract,/obj/item/slimepotion, /obj/item/weapon/reagent_containers/food/snacks/monkeycube) - -// ----------------------------- -// Virology Bag -// ----------------------------- -/obj/item/weapon/storage/bag/virology - name = "virology bag" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "biobag" - desc = "A bag for storing various biological products." - max_storage_space = ITEMSIZE_COST_SMALL * 12 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial/,/obj/item/weapon/virusdish/) - -// ----------------------------- -// Food Bag -// ----------------------------- -/obj/item/weapon/storage/bag/food - name = "food bag" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "foodbag" - desc = "A bag for storing foods of all kinds." - max_storage_space = ITEMSIZE_COST_NORMAL * 25 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment) - -// ----------------------------- -// Food Bag (Service Hound) -// ----------------------------- -/obj/item/weapon/storage/bag/serviceborg - name = "service bag" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "foodbag" - desc = "An intergrated bag for storing things of all kinds." - max_storage_space = ITEMSIZE_COST_NORMAL * 25 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment, - /obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/coin,/obj/item/weapon/spacecash, - /obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/pill) - -// ----------------------------- -// Evidence Bag -// ----------------------------- -/obj/item/weapon/storage/bag/detective - name = "secure satchel" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "detbag" - desc = "A bag for storing investigation things. You know, securely." - max_storage_space = ITEMSIZE_COST_NORMAL * 15 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/forensics/swab,/obj/item/weapon/sample/print,/obj/item/weapon/sample/fibers,/obj/item/weapon/evidencebag) +/* + * These absorb the functionality of the plant bag, ore satchel, etc. + * They use the use_to_pickup, quick_gather, and quick_empty functions + * that were already defined in weapon/storage, but which had been + * re-implemented in other classes. + * + * Contains: + * Generic non-item + * Trash Bag + * Plastic Bag + * Mining Satchel + * Plant Bag + * Sheet Snatcher + * Sheet Snatcher (Cyborg) + * Cash Bag + * Chemistry Bag + * Food Bag + * Food Bag (Service Hound) + * Evidence Bag + * + * -Sayu + */ + + +// ----------------------------- +// Generic non-item +// ----------------------------- +/obj/item/weapon/storage/bag + allow_quick_gather = 1 + allow_quick_empty = 1 + display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients + use_to_pickup = TRUE + slot_flags = SLOT_BELT + drop_sound = 'sound/items/drop/backpack.ogg' + pickup_sound = 'sound/items/pickup/backpack.ogg' + +// ----------------------------- +// Trash bag +// ----------------------------- +/obj/item/weapon/storage/bag/trash + name = "trash bag" + desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" + icon = 'icons/obj/janitor.dmi' + icon_state = "trashbag0" + item_state_slots = list(slot_r_hand_str = "trashbag", slot_l_hand_str = "trashbag") + drop_sound = 'sound/items/drop/wrapper.ogg' + pickup_sound = 'sound/items/pickup/wrapper.ogg' + + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_SMALL * 21 + can_hold = list() // any + cant_hold = list(/obj/item/weapon/disk/nuclear) + +/obj/item/weapon/storage/bag/trash/update_icon() + if(contents.len == 0) + icon_state = "trashbag0" + else if(contents.len < 9) + icon_state = "trashbag1" + else if(contents.len < 18) + icon_state = "trashbag2" + else icon_state = "trashbag3" + +/obj/item/weapon/storage/bag/trash/holding + name = "trash bag of holding" + desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." + icon_state = "bluetrashbag" + origin_tech = list(TECH_BLUESPACE = 3) + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 10 // Slightly less than BoH + +/obj/item/weapon/storage/bag/trash/holding/update_icon() + return + +// ----------------------------- +// Plastic Bag +// ----------------------------- +/obj/item/weapon/storage/bag/plasticbag + name = "plastic bag" + desc = "It's a very flimsy, very noisy alternative to a bag." + icon = 'icons/obj/trash.dmi' + icon_state = "plasticbag" + drop_sound = 'sound/items/drop/wrapper.ogg' + pickup_sound = 'sound/items/pickup/wrapper.ogg' + + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_SMALL + can_hold = list() // any + cant_hold = list(/obj/item/weapon/disk/nuclear) + +// ----------------------------- +// Mining Satchel +// ----------------------------- +/* + * Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. + * Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents. + */ +/obj/item/weapon/storage/bag/ore + name = "mining satchel" + desc = "This little bugger can be used to store and transport ores." + icon = 'icons/obj/mining.dmi' + icon_state = "satchel" + slot_flags = SLOT_BELT | SLOT_POCKET + w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + can_hold = list(/obj/item/weapon/ore) + var/current_capacity = 0 + var/max_pickup = 100 //How much ore can be picked up in one go. There to prevent someone from walking on a turf with 10000 ore and making the server cry. + var/list/stored_ore = list( + "sand" = 0, + "hematite" = 0, + "carbon" = 0, + "raw copper" = 0, + "raw tin" = 0, + "void opal" = 0, + "painite" = 0, + "quartz" = 0, + "raw bauxite" = 0, + "phoron" = 0, + "silver" = 0, + "gold" = 0, + "marble" = 0, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) + var/last_update = 0 + +/obj/item/weapon/storage/bag/ore/holding + name = "mining satchel of holding" + desc = "Like a mining satchel, but when you put your hand in, you're pretty sure you can feel time itself." + icon_state = "satchel_bspace" + max_storage_space = ITEMSIZE_COST_NORMAL * 15000 // This should never, ever, ever be reached. + +/obj/item/weapon/storage/bag/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(current_capacity >= max_storage_space) + to_chat(user, "\the [src] is too full to possibly fit anything else inside of it.") + return + + if (istype(W, /obj/item/weapon/ore)) + var/obj/item/weapon/ore/ore = W + stored_ore[ore.material]++ + current_capacity++ + user.remove_from_mob(W) + qdel(ore) + +/obj/item/weapon/storage/bag/ore/remove_from_storage(obj/item/W as obj, atom/new_location) + if(!istype(W)) return 0 + + if(new_location) + if(ismob(loc)) + W.dropped(usr) + if(ismob(new_location)) + W.hud_layerise() + else + W.reset_plane_and_layer() + W.forceMove(new_location) + else + W.forceMove(get_turf(src)) + + W.on_exit_storage(src) + update_icon() + return 1 + +/obj/item/weapon/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0) + var/success = 0 + var/failure = 0 + var/current_pickup = 0 + var/max_pickup_reached = 0 + for(var/obj/item/weapon/ore/O in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds. + if(current_capacity >= max_storage_space) + failure = 1 + break + if(current_pickup >= max_pickup) + max_pickup_reached = 1 + break + var/obj/item/weapon/ore/ore = O + stored_ore[ore.material]++ + current_capacity++ + current_pickup++ + qdel(ore) + success = 1 + if(!silent) //Let's do a single check and then do more instead of a bunch at once. + if(success && !failure && !max_pickup_reached) //Picked stuff up, did not reach capacity, did not reach max_pickup. + to_chat(user, "You put everything in [src].") + else if(success && failure) //Picked stuff up to capacity. + to_chat(user, "You fill the [src].") + else if(success && max_pickup_reached) //Picked stuff up to the max_pickup + to_chat(user, "You fill the [src] with as much as you can grab in one go.") + else //Failed. The bag is full. + to_chat(user, "You fail to pick anything up with \the [src].") + if(istype(user.pulling, /obj/structure/ore_box)) //Bit of a crappy way to do this, as it doubles spam for the user, but it works. //Then let me fix it. ~CL. + var/obj/structure/ore_box/OB = user.pulling + for(var/ore in stored_ore) + if(stored_ore[ore] > 0) + var/ore_amount = stored_ore[ore] // How many ores does the satchel have? + OB.stored_ore[ore] += ore_amount // Add the ore to the box + stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. + current_capacity = 0 // Set the amount of ore in the satchel to 0. + current_pickup = 0 + +/obj/item/weapon/storage/bag/ore/equipped(mob/user) + ..() + if(user.get_inventory_slot(src) == slot_wear_suit || slot_l_hand || slot_l_hand || slot_belt) //Basically every place they can go. Makes sure it doesn't unregister if moved to other slots. + GLOB.moved_event.register(user, src, /obj/item/weapon/storage/bag/ore/proc/autoload, user) + +/obj/item/weapon/storage/bag/ore/dropped(mob/user) + ..() + if(user.get_inventory_slot(src) == slot_wear_suit || slot_l_hand || slot_l_hand || slot_belt) //See above. This should really be a define. + GLOB.moved_event.register(user, src, /obj/item/weapon/storage/bag/ore/proc/autoload, user) + else + GLOB.moved_event.unregister(user, src) + +/obj/item/weapon/storage/bag/ore/proc/autoload(mob/user) + var/obj/item/weapon/ore/O = locate() in get_turf(src) + if(O) + gather_all(get_turf(src), user) + +/obj/item/weapon/storage/bag/ore/proc/rangedload(atom/A, mob/user) + var/obj/item/weapon/ore/O = locate() in get_turf(A) + if(O) + gather_all(get_turf(A), user) + +/obj/item/weapon/storage/bag/ore/examine(mob/user) + . = ..() + + if(!Adjacent(user)) //Can only check the contents of ore bags if you can physically reach them. + return . + + if(istype(user, /mob/living)) + add_fingerprint(user) + + . += "It holds:" + var/has_ore = 0 + for(var/ore in stored_ore) + if(stored_ore[ore] > 0) + . += "- [stored_ore[ore]] [ore]" + has_ore = 1 + if(!has_ore) + . += "Nothing." + +/obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it. + user.examinate(src) + +// ----------------------------- +// Plant bag +// ----------------------------- +/obj/item/weapon/storage/bag/plants + name = "plant bag" + icon = 'icons/obj/hydroponics_machines_vr.dmi' + icon_state = "plantbag" + desc = "A sturdy bag used to transport fresh produce with ease." + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) + +/obj/item/weapon/storage/bag/plants/large + name = "large plant bag" + icon_state = "large_plantbag" + desc = "A large and sturdy bag used to transport fresh produce with ease." + max_storage_space = ITEMSIZE_COST_NORMAL * 50 + +// ----------------------------- +// Sheet Snatcher +// ----------------------------- +// Because it stacks stacks, this doesn't operate normally. +// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu + +/obj/item/weapon/storage/bag/sheetsnatcher + name = "sheet snatcher" + icon = 'icons/obj/mining.dmi' + icon_state = "sheetsnatcher" + desc = "A patented storage system designed for any kind of mineral sheet." + + var/capacity = 300; //the number of sheets it can carry. + w_class = ITEMSIZE_NORMAL + storage_slots = 7 + + allow_quick_empty = 1 // this function is superceded + +/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0) + if(!istype(W,/obj/item/stack/material)) + if(!stop_messages) + to_chat(usr, "The snatcher does not accept [W].") + return 0 + var/current = 0 + for(var/obj/item/stack/material/S in contents) + current += S.get_amount() + if(capacity == current)//If it's full, you're done + if(!stop_messages) + to_chat(usr, "The snatcher is full.") + return 0 + return 1 + + +// Modified handle_item_insertion. Would prefer not to, but... +/obj/item/weapon/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) + var/obj/item/stack/material/S = W + if(!istype(S)) return 0 + + var/amount + var/inserted = 0 + var/current = 0 + for(var/obj/item/stack/material/S2 in contents) + current += S2.get_amount() + if(capacity < current + S.get_amount())//If the stack will fill it up + amount = capacity - current + else + amount = S.get_amount() + + for(var/obj/item/stack/material/sheet in contents) + if(S.type == sheet.type) + // we are violating the amount limitation because these are not sane objects + sheet.set_amount(sheet.get_amount() + amount, TRUE) + S.use(amount) // will qdel() if we use it all + inserted = 1 + break + + if(!inserted) + usr.remove_from_mob(S) + if (usr.client && usr.s_active != src) + usr.client.screen -= S + S.dropped(usr) + S.loc = src + + orient2hud(usr) + if(usr.s_active) + usr.s_active.show_to(usr) + update_icon() + return 1 + +// Sets up numbered display to show the stack size of each stored mineral +// NOTE: numbered display is turned off currently because it's broken +/obj/item/weapon/storage/bag/sheetsnatcher/orient2hud(mob/user as mob) + var/adjusted_contents = contents.len + + //Numbered contents display + var/list/datum/numbered_display/numbered_contents + if(display_contents_with_number) + numbered_contents = list() + adjusted_contents = 0 + for(var/obj/item/stack/material/I in contents) + adjusted_contents++ + var/datum/numbered_display/D = new/datum/numbered_display(I) + D.number = I.get_amount() + numbered_contents.Add( D ) + + var/row_num = 0 + var/col_count = min(7,storage_slots) -1 + if (adjusted_contents > 7) + row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. + src.slot_orient_objs(row_num, col_count, numbered_contents) + return + +// Modified quick_empty verb drops appropriate sized stacks +/obj/item/weapon/storage/bag/sheetsnatcher/quick_empty() + var/location = get_turf(src) + for(var/obj/item/stack/material/S in contents) + var/cur_amount = S.get_amount() + var/full_stacks = round(cur_amount / S.max_amount) // Floor of current/max is amount of full stacks we make + var/remainder = cur_amount % S.max_amount // Current mod max is remainder after full sheets removed + for(var/i = 1 to full_stacks) + new S.type(location, S.max_amount) + if(remainder) + new S.type(location, remainder) + S.set_amount(0) + orient2hud(usr) + if(usr.s_active) + usr.s_active.show_to(usr) + update_icon() + +// Instead of removing +/obj/item/weapon/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location) + var/obj/item/stack/material/S = W + if(!istype(S)) return 0 + + //I would prefer to drop a new stack, but the item/attack_hand code + // that calls this can't recieve a different object than you clicked on. + //Therefore, make a new stack internally that has the remainder. + // -Sayu + + if(S.get_amount() > S.max_amount) + var/newstack_amt = S.get_amount() - S.max_amount + new S.type(src, newstack_amt) // The one we'll keep to replace the one we give + S.set_amount(S.max_amount) // The one we hand to the clicker + + return ..(S,new_location) + +// ----------------------------- +// Sheet Snatcher (Cyborg) +// ----------------------------- + +/obj/item/weapon/storage/bag/sheetsnatcher/borg + name = "sheet snatcher 9000" + desc = null + capacity = 500//Borgs get more because >specialization + +// ----------------------------- +// Cash Bag +// ----------------------------- + +/obj/item/weapon/storage/bag/cash + name = "cash bag" + icon = 'icons/obj/storage.dmi' + icon_state = "cashbag" + desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash,/obj/item/weapon/spacecasinocash) + +// ----------------------------- +// Chemistry Bag +// ----------------------------- +/obj/item/weapon/storage/bag/chemistry + name = "chemistry bag" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "chembag" + desc = "A bag for storing pills, patches, and bottles." + max_storage_space = 200 + w_class = ITEMSIZE_LARGE + slowdown = 3 + can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle) + +// ----------------------------- +// Xeno Bag +// ----------------------------- +/obj/item/weapon/storage/bag/xeno + name = "xenobiology bag" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "xenobag" + desc = "A bag for storing various slime products." + max_storage_space = ITEMSIZE_COST_SMALL * 12 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/slime_extract,/obj/item/slimepotion, /obj/item/weapon/reagent_containers/food/snacks/monkeycube) + +// ----------------------------- +// Virology Bag +// ----------------------------- +/obj/item/weapon/storage/bag/virology + name = "virology bag" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "biobag" + desc = "A bag for storing various biological products." + max_storage_space = ITEMSIZE_COST_SMALL * 12 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial/,/obj/item/weapon/virusdish/) + +// ----------------------------- +// Food Bag +// ----------------------------- +/obj/item/weapon/storage/bag/food + name = "food bag" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "foodbag" + desc = "A bag for storing foods of all kinds." + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment) + +// ----------------------------- +// Food Bag (Service Hound) +// ----------------------------- +/obj/item/weapon/storage/bag/serviceborg + name = "service bag" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "foodbag" + desc = "An intergrated bag for storing things of all kinds." + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment, + /obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/coin,/obj/item/weapon/spacecash, + /obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/pill) + +// ----------------------------- +// Evidence Bag +// ----------------------------- +/obj/item/weapon/storage/bag/detective + name = "secure satchel" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "detbag" + desc = "A bag for storing investigation things. You know, securely." + max_storage_space = ITEMSIZE_COST_NORMAL * 15 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/forensics/swab,/obj/item/weapon/sample/print,/obj/item/weapon/sample/fibers,/obj/item/weapon/evidencebag) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 67c5c169c2..bc4cd6f801 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -1,599 +1,599 @@ -/obj/item/weapon/storage/belt - name = "belt" - desc = "Can hold various things." - icon = 'icons/inventory/belt/item.dmi' - icon_state = "utility" - storage_slots = 7 - max_storage_space = ITEMSIZE_COST_NORMAL * 7 //This should ensure belts always have enough room to store whatever. - max_w_class = ITEMSIZE_NORMAL - slot_flags = SLOT_BELT - attack_verb = list("whipped", "lashed", "disciplined") - equip_sound = 'sound/items/toolbelt_equip.ogg' - drop_sound = 'sound/items/drop/toolbelt.ogg' - pickup_sound = 'sound/items/pickup/toolbelt.ogg' - sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/belt/mob_teshari.dmi') - - var/show_above_suit = 0 - -/obj/item/weapon/storage/belt/verb/toggle_layer() - set name = "Switch Belt Layer" - set category = "Object" - - if(show_above_suit == -1) - to_chat(usr, "\The [src] cannot be worn above your suit!") - return - show_above_suit = !show_above_suit - update_icon() - -//Some belts have sprites to show icons -/obj/item/weapon/storage/belt/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask = null) - var/image/standing = ..() - if(!inhands && contents.len) - for(var/obj/item/i in contents) - var/i_state = i.item_state - if(!i_state) i_state = i.icon_state - var/image/add_icon = image(icon = INV_BELT_DEF_ICON, icon_state = i_state) - if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits. - standing.filters += filter(type = "alpha", icon = clip_mask) - standing.add_overlay(add_icon) - return standing - -/obj/item/weapon/storage/update_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_belt() - -/obj/item/weapon/storage/belt/utility - name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing. - desc = "Can hold various tools." - icon_state = "utility" - can_hold = list( - ///obj/item/weapon/combitool, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/wirecutters, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/tool/transforming/jawsoflife, - /obj/item/device/multitool, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/stack/cable_coil, - /obj/item/device/t_scanner, - /obj/item/device/analyzer, - /obj/item/clothing/glasses, - /obj/item/clothing/gloves, - /obj/item/device/pda, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/device/radio/headset, - /obj/item/device/robotanalyzer, - /obj/item/weapon/material/minihoe, - /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/device/analyzer/plant_analyzer, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/tape_roll, - /obj/item/device/integrated_electronics/wirer, - /obj/item/weapon/pipe_dispenser, //CHOMPAdd - /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd - /obj/item/weapon/rcd, //CHOMPAdd - /obj/item/device/integrated_electronics/debugger, //Vorestation edit adding debugger to toolbelt can hold list - /obj/item/weapon/shovel/spade, //VOREStation edit. If it can hold minihoes and hatchers, why not the gardening spade? - /obj/item/stack/nanopaste, //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time. - /obj/item/device/geiger //VOREStation edit. Engineers work with rad-slinging stuff sometimes too - ) - -/obj/item/weapon/storage/belt/utility/full - starts_with = list( - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/wirecutters, - /obj/item/stack/cable_coil/random_belt - ) - -/obj/item/weapon/storage/belt/utility/full/multitool - starts_with = list( - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/wirecutters, - /obj/item/stack/cable_coil/random_belt, - /obj/item/device/multitool - ) - -/obj/item/weapon/storage/belt/utility/atmostech - starts_with = list( - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/wirecutters, - /obj/item/device/analyzer, //Vorestation edit. Gives atmos techs a few extra tools fitting their job from the start - /obj/item/weapon/extinguisher/mini //Vorestation edit. As above, the mini's much more handy to have rather than lugging a big one around - ) - -/obj/item/weapon/storage/belt/utility/chief - name = "chief engineer's toolbelt" - desc = "Holds tools, looks snazzy." - icon_state = "utilitybelt_ce" - item_state = "utility_ce" - storage_slots = 8 //If they get better everything-else, why not the belt too? - can_hold = list( - /obj/item/weapon/rcd, //They've given one from the get-go, it's hard to imagine they wouldn't be given something that can store it neater than a bag - /obj/item/weapon/pipe_dispenser, //CHOMPAdd - /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/wirecutters, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/tool/transforming/jawsoflife, - /obj/item/device/multitool, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/stack/cable_coil, - /obj/item/device/t_scanner, - /obj/item/device/analyzer, - /obj/item/clothing/glasses, - /obj/item/clothing/gloves, - /obj/item/device/pda, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/device/radio/headset, - /obj/item/device/robotanalyzer, - /obj/item/weapon/material/minihoe, - /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/device/analyzer/plant_analyzer, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/tape_roll, - /obj/item/device/integrated_electronics/wirer, - /obj/item/device/integrated_electronics/debugger, - /obj/item/weapon/shovel/spade, - /obj/item/stack/nanopaste, - /obj/item/device/geiger, - /obj/item/areaeditor/blueprints, //It's a bunch of paper that could prolly be rolled up & slipped into the belt, not to mention CE only, see the RCD's thing above - /obj/item/wire_reader //As above - ) - -/obj/item/weapon/storage/belt/utility/chief/full - starts_with = list( - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/tool/transforming/jawsoflife, - /obj/item/weapon/weldingtool/experimental, - /obj/item/device/multitool, - /obj/item/stack/cable_coil/random_belt, - /obj/item/weapon/extinguisher/mini, - /obj/item/device/analyzer - ) - -/obj/item/weapon/storage/belt/utility/holding - name = "tool-belt of holding" - desc = "A belt that uses localized bluespace pockets to hold more items than expected!" - icon_state = "utility_holding" - storage_slots = 14 //twice the amount as a normal belt - max_storage_space = ITEMSIZE_COST_NORMAL * 14 - can_hold = list( - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/wirecutters, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/tool/transforming/jawsoflife, - /obj/item/device/multitool, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/stack/cable_coil, - /obj/item/device/t_scanner, - /obj/item/device/analyzer, - /obj/item/clothing/glasses, - /obj/item/clothing/gloves, - /obj/item/device/pda, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/device/radio/headset, - /obj/item/device/robotanalyzer, - /obj/item/weapon/material/minihoe, - /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/device/analyzer/plant_analyzer, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/tape_roll, - /obj/item/device/integrated_electronics/wirer, - /obj/item/device/integrated_electronics/debugger, - /obj/item/weapon/shovel/spade, - /obj/item/stack/nanopaste, - /obj/item/weapon/cell, //this is a bigger belt, might as well make it hold bigger cells too - /obj/item/weapon/pipe_dispenser, //bigger belt for bigger tools - /obj/item/weapon/rcd, //see above - /obj/item/device/quantum_pad_booster, - /obj/item/weapon/inducer, - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/device/lightreplacer, - /obj/item/weapon/pickaxe/plasmacutter - ) - - -/obj/item/weapon/storage/belt/medical - name = "medical belt" - desc = "Can hold various medical equipment." - icon_state = "medical" - can_hold = list( - /obj/item/device/healthanalyzer, - /obj/item/weapon/dnainjector, - /obj/item/weapon/reagent_containers/dropper, - /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/glass/bottle, - /obj/item/weapon/reagent_containers/pill, - /obj/item/weapon/reagent_containers/syringe, - /obj/item/weapon/storage/quickdraw/syringe_case, //VOREStation Addition - Adds syringe cases, - /obj/item/weapon/flame/lighter/zippo, - /obj/item/weapon/storage/fancy/cigarettes, - /obj/item/weapon/storage/pill_bottle, - /obj/item/stack/medical, - /obj/item/device/radio/headset, - /obj/item/device/pda, - /obj/item/taperoll, - /obj/item/device/megaphone, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/head/surgery, - /obj/item/clothing/gloves, - /obj/item/weapon/reagent_containers/hypospray, - /obj/item/clothing/glasses, - /obj/item/weapon/tool/crowbar, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/storage/quickdraw/syringe_case, - /obj/item/ammo_casing/macrobattery // CHOMPedit: Macrobatteries for the Curabitur can fit into medbelts. - ) - -/obj/item/weapon/storage/belt/medical/emt - name = "EMT utility belt" - desc = "A sturdy black webbing belt with attached pouches." - icon_state = "ems" - -/obj/item/weapon/storage/belt/medical/holding - name = "medical belt of holding" - desc = "A belt that uses localized bluespace pockets to hold more items than expected!" - icon_state = "med_holding" - storage_slots = 14 //twice the amount as a normal belt - max_storage_space = ITEMSIZE_COST_NORMAL * 14 - -/obj/item/weapon/storage/belt/security - name = "security belt" - desc = "Can hold security gear like handcuffs and flashes." - icon_state = "security" - max_w_class = ITEMSIZE_NORMAL - can_hold = list( - /obj/item/weapon/grenade, - /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/handcuffs, - /obj/item/device/flash, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/a12g, - /obj/item/ammo_magazine, - /obj/item/weapon/cell/device, - /obj/item/weapon/reagent_containers/food/snacks/donut/, - /obj/item/weapon/melee/baton, - /obj/item/weapon/gun/energy/taser, - /obj/item/weapon/gun/energy/stunrevolver, - /obj/item/weapon/gun/energy/stunrevolver/vintage, - /obj/item/weapon/gun/magnetic/railgun/heater/pistol, - /obj/item/weapon/gun/energy/gun, - /obj/item/weapon/flame/lighter, - /obj/item/device/flashlight, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/device/pda, - /obj/item/device/radio/headset, - /obj/item/clothing/gloves, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/weapon/melee, - /obj/item/clothing/accessory/badge, - /obj/item/weapon/gun/projectile/sec, - /obj/item/weapon/gun/projectile/p92x, - /obj/item/taperoll, - /obj/item/weapon/gun/projectile/colt/detective, - /obj/item/device/holowarrant, - /obj/item/device/ticket_printer //VOREStation Edit - ) - -/obj/item/weapon/storage/belt/detective - name = "forensic utility belt" - desc = "A belt for holding forensics equipment." - icon_state = "security" - storage_slots = 7 - max_w_class = ITEMSIZE_NORMAL - can_hold = list( - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/clothing/glasses, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/weapon/reagent_containers/spray/luminol, - /obj/item/weapon/sample, - /obj/item/weapon/forensics/sample_kit/powder, - /obj/item/weapon/forensics/swab, - /obj/item/device/uv_light, - /obj/item/weapon/forensics/sample_kit, - /obj/item/weapon/photo, - /obj/item/device/camera_film, - /obj/item/device/camera, - /obj/item/weapon/autopsy_scanner, - /obj/item/device/mass_spectrometer, - /obj/item/clothing/accessory/badge, - /obj/item/device/reagent_scanner, - /obj/item/weapon/reagent_containers/dropper, - /obj/item/weapon/reagent_containers/syringe, - /obj/item/device/pda, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/device/radio/headset, - /obj/item/clothing/gloves, - /obj/item/taperoll, - /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/handcuffs, - /obj/item/device/flash, - /obj/item/weapon/flame/lighter, - /obj/item/weapon/reagent_containers/food/snacks/donut/, - ///obj/item/ammo_magazine, //Detectives don't get projectile weapons as standard here - ///obj/item/weapon/gun/projectile/colt/detective, //Detectives don't get projectile weapons as standard here - /obj/item/weapon/gun/energy/stunrevolver/detective, //In keeping with the same vein as above, they can store their special one - /obj/item/device/holowarrant, - /obj/item/weapon/reagent_containers/food/drinks/flask, - /obj/item/device/ticket_printer //VOREStation Edit - ) - -/obj/item/weapon/storage/belt/soulstone - name = "soul stone belt" - desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away" - icon_state = "soulstone" - storage_slots = 6 - can_hold = list( - /obj/item/device/soulstone - ) - -/obj/item/weapon/storage/belt/soulstone/full - starts_with = list(/obj/item/device/soulstone = 6) - -/obj/item/weapon/storage/belt/utility/alien - name = "alien belt" - desc = "A belt(?) that can hold things." - icon = 'icons/obj/abductor.dmi' - icon_state = "belt" - item_state = "security" - -/obj/item/weapon/storage/belt/utility/alien/full - starts_with = list( - /obj/item/weapon/tool/screwdriver/alien, - /obj/item/weapon/tool/wrench/alien, - /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/tool/crowbar/alien, - /obj/item/weapon/tool/wirecutters/alien, - /obj/item/device/multitool/alien, - /obj/item/stack/cable_coil/alien - ) - -/obj/item/weapon/storage/belt/medical/alien - name = "alien belt" - desc = "A belt(?) that can hold things." - icon = 'icons/obj/abductor.dmi' - icon_state = "belt" - item_state = "security" - storage_slots = 8 - can_hold = list( - /obj/item/device/healthanalyzer, - /obj/item/weapon/dnainjector, - /obj/item/weapon/reagent_containers/dropper, - /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/glass/bottle, - /obj/item/weapon/reagent_containers/pill, - /obj/item/weapon/reagent_containers/syringe, - /obj/item/weapon/flame/lighter/zippo, - /obj/item/weapon/storage/fancy/cigarettes, - /obj/item/weapon/storage/pill_bottle, - /obj/item/stack/medical, - /obj/item/device/radio/headset, - /obj/item/device/pda, - /obj/item/taperoll, - /obj/item/device/megaphone, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/head/surgery, - /obj/item/clothing/gloves, - /obj/item/weapon/reagent_containers/hypospray, - /obj/item/clothing/glasses, - /obj/item/weapon/tool/crowbar, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/surgical - ) - -/obj/item/weapon/storage/belt/medical/alien - starts_with = list( - /obj/item/weapon/surgical/scalpel/alien, - /obj/item/weapon/surgical/hemostat/alien, - /obj/item/weapon/surgical/retractor/alien, - /obj/item/weapon/surgical/circular_saw/alien, - /obj/item/weapon/surgical/FixOVein/alien, - /obj/item/weapon/surgical/bone_clamp/alien, - /obj/item/weapon/surgical/cautery/alien, - /obj/item/weapon/surgical/surgicaldrill/alien - ) - -/obj/item/weapon/storage/belt/champion - name = "championship belt" - desc = "Proves to the world that you are the strongest!" - icon_state = "champion" - storage_slots = 1 - can_hold = list( - "/obj/item/clothing/mask/luchador" - ) - -/obj/item/weapon/storage/belt/security/tactical - name = "combat belt" - desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." - icon_state = "swat" - storage_slots = 9 - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 7 - -/obj/item/weapon/storage/belt/bandolier - name = "shotgun bandolier" - desc = "Designed to hold shotgun shells. Can't really hold more than that." - icon_state = "bandolier1" - storage_slots = 8 - max_w_class = ITEMSIZE_TINY - can_hold = list( - /obj/item/ammo_casing/a12g, - /obj/item/ammo_casing/a12g/pellet, - /obj/item/ammo_casing/a12g/blank, - /obj/item/ammo_casing/a12g/practice, - /obj/item/ammo_casing/a12g/beanbag, - /obj/item/ammo_casing/a12g/stunshell, - /obj/item/ammo_casing/a12g/flash, - /obj/item/ammo_casing/a12g/emp, - /obj/item/ammo_casing/a12g/flechette - ) - -/obj/item/weapon/storage/belt/security/tactical/bandolier - name = "combat bandolier" - desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." - icon_state = "bandolier2" - -/obj/item/weapon/storage/belt/janitor - name = "janitorial belt" - desc = "A belt used to hold most janitorial supplies." - icon_state = "janitor" - storage_slots = 7 - max_w_class = ITEMSIZE_NORMAL - can_hold = list( - /obj/item/clothing/glasses, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/weapon/grenade, - /obj/item/device/pda, - /obj/item/device/radio/headset, - /obj/item/clothing/gloves, - /obj/item/clothing/mask/surgical, //sterile mask, - /obj/item/device/assembly/mousetrap, - /obj/item/weapon/light/bulb, - /obj/item/weapon/light/tube, - /obj/item/weapon/flame/lighter, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/weapon/reagent_containers/spray, - /obj/item/weapon/soap, - /obj/item/weapon/holosign_creator, //CHOMPAdd - /obj/item/device/lightreplacer //VOREStation edit - ) - -/obj/item/weapon/storage/belt/archaeology - name = "excavation gear-belt" - desc = "Can hold various excavation gear." - icon_state = "gear" - can_hold = list( - /obj/item/weapon/storage/box/samplebags, - /obj/item/device/core_sampler, - /obj/item/device/beacon_locator, - /obj/item/device/radio/beacon, - /obj/item/device/gps, - /obj/item/device/measuring_tape, - /obj/item/device/flashlight, - /obj/item/weapon/cell/device, - /obj/item/weapon/pickaxe, - /obj/item/device/depth_scanner, - /obj/item/device/camera, - /obj/item/weapon/paper, - /obj/item/weapon/photo, - /obj/item/weapon/folder, - /obj/item/weapon/pen, - /obj/item/weapon/folder, - /obj/item/weapon/clipboard, - /obj/item/weapon/anodevice, - /obj/item/clothing/glasses, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/storage/excavation, - /obj/item/weapon/anobattery, - /obj/item/device/ano_scanner, - /obj/item/weapon/pickaxe/hand, - /obj/item/device/xenoarch_multi_tool, - /obj/item/weapon/pickaxe/excavationdrill - ) - -/obj/item/weapon/storage/belt/fannypack - name = "leather fannypack" - desc = "A dorky fannypack for keeping small items in." - icon_state = "fannypack_leather" - item_state = "fannypack_leather" - max_w_class = ITEMSIZE_SMALL - storage_slots = null - max_storage_space = ITEMSIZE_COST_NORMAL * 2 - -/obj/item/weapon/storage/belt/fannypack/black - name = "black fannypack" - icon_state = "fannypack_black" - item_state = "fannypack_black" - -/obj/item/weapon/storage/belt/fannypack/blue - name = "blue fannypack" - icon_state = "fannypack_blue" - item_state = "fannypack_blue" - -/obj/item/weapon/storage/belt/fannypack/cyan - name = "cyan fannypack" - icon_state = "fannypack_cyan" - item_state = "fannypack_cyan" - -/obj/item/weapon/storage/belt/fannypack/green - name = "green fannypack" - icon_state = "fannypack_green" - item_state = "fannypack_green" - -/obj/item/weapon/storage/belt/fannypack/orange - name = "orange fannypack" - icon_state = "fannypack_orange" - item_state = "fannypack_orange" - -/obj/item/weapon/storage/belt/fannypack/purple - name = "purple fannypack" - icon_state = "fannypack_purple" - item_state = "fannypack_purple" - -/obj/item/weapon/storage/belt/fannypack/red - name = "red fannypack" - icon_state = "fannypack_red" - item_state = "fannypack_red" - -/obj/item/weapon/storage/belt/fannypack/white - name = "white fannypack" - icon_state = "fannypack_white" - item_state = "fannypack_white" - -/obj/item/weapon/storage/belt/fannypack/yellow - name = "yellow fannypack" - icon_state = "fannypack_yellow" - item_state = "fannypack_yellow" - -/obj/item/weapon/storage/belt/ranger - name = "ranger belt" - desc = "The fancy utility-belt holding the tools, cuffs and gadgets of the Go Go ERT-Rangers. The belt buckle is not real phoron, but it is still surprisingly comfortable to wear." - icon = 'icons/obj/clothing/ranger.dmi' - icon_state = "ranger_belt" - -/obj/item/weapon/storage/belt/dbandolier - name = "\improper Donk-Soft bandolier" - desc = "A Donk-Soft bandolier! Carry your spare darts anywhere! Ages 8 and up." - icon_state = "dbandolier" - storage_slots = 8 - can_hold = list( - /obj/item/ammo_casing/afoam_dart - ) +/obj/item/weapon/storage/belt + name = "belt" + desc = "Can hold various things." + icon = 'icons/inventory/belt/item.dmi' + icon_state = "utility" + storage_slots = 7 + max_storage_space = ITEMSIZE_COST_NORMAL * 7 //This should ensure belts always have enough room to store whatever. + max_w_class = ITEMSIZE_NORMAL + slot_flags = SLOT_BELT + attack_verb = list("whipped", "lashed", "disciplined") + equip_sound = 'sound/items/toolbelt_equip.ogg' + drop_sound = 'sound/items/drop/toolbelt.ogg' + pickup_sound = 'sound/items/pickup/toolbelt.ogg' + sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/belt/mob_teshari.dmi') + + var/show_above_suit = 0 + +/obj/item/weapon/storage/belt/verb/toggle_layer() + set name = "Switch Belt Layer" + set category = "Object" + + if(show_above_suit == -1) + to_chat(usr, "\The [src] cannot be worn above your suit!") + return + show_above_suit = !show_above_suit + update_icon() + +//Some belts have sprites to show icons +/obj/item/weapon/storage/belt/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask = null) + var/image/standing = ..() + if(!inhands && contents.len) + for(var/obj/item/i in contents) + var/i_state = i.item_state + if(!i_state) i_state = i.icon_state + var/image/add_icon = image(icon = INV_BELT_DEF_ICON, icon_state = i_state) + if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits. + standing.filters += filter(type = "alpha", icon = clip_mask) + standing.add_overlay(add_icon) + return standing + +/obj/item/weapon/storage/update_icon() + if (ismob(src.loc)) + var/mob/M = src.loc + M.update_inv_belt() + +/obj/item/weapon/storage/belt/utility + name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing. + desc = "Can hold various tools." + icon_state = "utility" + can_hold = list( + ///obj/item/weapon/combitool, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/tool/transforming/jawsoflife, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/stack/cable_coil, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/device/pda, + /obj/item/device/megaphone, + /obj/item/taperoll, + /obj/item/device/radio/headset, + /obj/item/device/robotanalyzer, + /obj/item/weapon/material/minihoe, + /obj/item/weapon/material/knife/machete/hatchet, + /obj/item/device/analyzer/plant_analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/tape_roll, + /obj/item/device/integrated_electronics/wirer, + /obj/item/weapon/pipe_dispenser, //CHOMPAdd + /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd + /obj/item/weapon/rcd, //CHOMPAdd + /obj/item/device/integrated_electronics/debugger, //Vorestation edit adding debugger to toolbelt can hold list + /obj/item/weapon/shovel/spade, //VOREStation edit. If it can hold minihoes and hatchers, why not the gardening spade? + /obj/item/stack/nanopaste, //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time. + /obj/item/device/geiger //VOREStation edit. Engineers work with rad-slinging stuff sometimes too + ) + +/obj/item/weapon/storage/belt/utility/full + starts_with = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, + /obj/item/stack/cable_coil/random_belt + ) + +/obj/item/weapon/storage/belt/utility/full/multitool + starts_with = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, + /obj/item/stack/cable_coil/random_belt, + /obj/item/device/multitool + ) + +/obj/item/weapon/storage/belt/utility/atmostech + starts_with = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, + /obj/item/device/analyzer, //Vorestation edit. Gives atmos techs a few extra tools fitting their job from the start + /obj/item/weapon/extinguisher/mini //Vorestation edit. As above, the mini's much more handy to have rather than lugging a big one around + ) + +/obj/item/weapon/storage/belt/utility/chief + name = "chief engineer's toolbelt" + desc = "Holds tools, looks snazzy." + icon_state = "utilitybelt_ce" + item_state = "utility_ce" + storage_slots = 8 //If they get better everything-else, why not the belt too? + can_hold = list( + /obj/item/weapon/rcd, //They've given one from the get-go, it's hard to imagine they wouldn't be given something that can store it neater than a bag + /obj/item/weapon/pipe_dispenser, //CHOMPAdd + /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/tool/transforming/jawsoflife, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/stack/cable_coil, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/device/pda, + /obj/item/device/megaphone, + /obj/item/taperoll, + /obj/item/device/radio/headset, + /obj/item/device/robotanalyzer, + /obj/item/weapon/material/minihoe, + /obj/item/weapon/material/knife/machete/hatchet, + /obj/item/device/analyzer/plant_analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/tape_roll, + /obj/item/device/integrated_electronics/wirer, + /obj/item/device/integrated_electronics/debugger, + /obj/item/weapon/shovel/spade, + /obj/item/stack/nanopaste, + /obj/item/device/geiger, + /obj/item/areaeditor/blueprints, //It's a bunch of paper that could prolly be rolled up & slipped into the belt, not to mention CE only, see the RCD's thing above + /obj/item/wire_reader //As above + ) + +/obj/item/weapon/storage/belt/utility/chief/full + starts_with = list( + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/tool/transforming/jawsoflife, + /obj/item/weapon/weldingtool/experimental, + /obj/item/device/multitool, + /obj/item/stack/cable_coil/random_belt, + /obj/item/weapon/extinguisher/mini, + /obj/item/device/analyzer + ) + +/obj/item/weapon/storage/belt/utility/holding + name = "tool-belt of holding" + desc = "A belt that uses localized bluespace pockets to hold more items than expected!" + icon_state = "utility_holding" + storage_slots = 14 //twice the amount as a normal belt + max_storage_space = ITEMSIZE_COST_NORMAL * 14 + can_hold = list( + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/tool/transforming/jawsoflife, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/stack/cable_coil, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/device/pda, + /obj/item/device/megaphone, + /obj/item/taperoll, + /obj/item/device/radio/headset, + /obj/item/device/robotanalyzer, + /obj/item/weapon/material/minihoe, + /obj/item/weapon/material/knife/machete/hatchet, + /obj/item/device/analyzer/plant_analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/tape_roll, + /obj/item/device/integrated_electronics/wirer, + /obj/item/device/integrated_electronics/debugger, + /obj/item/weapon/shovel/spade, + /obj/item/stack/nanopaste, + /obj/item/weapon/cell, //this is a bigger belt, might as well make it hold bigger cells too + /obj/item/weapon/pipe_dispenser, //bigger belt for bigger tools + /obj/item/weapon/rcd, //see above + /obj/item/device/quantum_pad_booster, + /obj/item/weapon/inducer, + /obj/item/stack/material/steel, + /obj/item/stack/material/glass, + /obj/item/device/lightreplacer, + /obj/item/weapon/pickaxe/plasmacutter + ) + + +/obj/item/weapon/storage/belt/medical + name = "medical belt" + desc = "Can hold various medical equipment." + icon_state = "medical" + can_hold = list( + /obj/item/device/healthanalyzer, + /obj/item/weapon/dnainjector, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/reagent_containers/glass/beaker, + /obj/item/weapon/reagent_containers/glass/bottle, + /obj/item/weapon/reagent_containers/pill, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/storage/quickdraw/syringe_case, //VOREStation Addition - Adds syringe cases, + /obj/item/weapon/flame/lighter/zippo, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/storage/pill_bottle, + /obj/item/stack/medical, + /obj/item/device/radio/headset, + /obj/item/device/pda, + /obj/item/taperoll, + /obj/item/device/megaphone, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/head/surgery, + /obj/item/clothing/gloves, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/clothing/glasses, + /obj/item/weapon/tool/crowbar, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/storage/quickdraw/syringe_case, + /obj/item/ammo_casing/macrobattery // CHOMPedit: Macrobatteries for the Curabitur can fit into medbelts. + ) + +/obj/item/weapon/storage/belt/medical/emt + name = "EMT utility belt" + desc = "A sturdy black webbing belt with attached pouches." + icon_state = "ems" + +/obj/item/weapon/storage/belt/medical/holding + name = "medical belt of holding" + desc = "A belt that uses localized bluespace pockets to hold more items than expected!" + icon_state = "med_holding" + storage_slots = 14 //twice the amount as a normal belt + max_storage_space = ITEMSIZE_COST_NORMAL * 14 + +/obj/item/weapon/storage/belt/security + name = "security belt" + desc = "Can hold security gear like handcuffs and flashes." + icon_state = "security" + max_w_class = ITEMSIZE_NORMAL + can_hold = list( + /obj/item/weapon/grenade, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/handcuffs, + /obj/item/device/flash, + /obj/item/clothing/glasses, + /obj/item/ammo_casing/a12g, + /obj/item/ammo_magazine, + /obj/item/weapon/cell/device, + /obj/item/weapon/reagent_containers/food/snacks/donut/, + /obj/item/weapon/melee/baton, + /obj/item/weapon/gun/energy/taser, + /obj/item/weapon/gun/energy/stunrevolver, + /obj/item/weapon/gun/energy/stunrevolver/vintage, + /obj/item/weapon/gun/magnetic/railgun/heater/pistol, + /obj/item/weapon/gun/energy/gun, + /obj/item/weapon/flame/lighter, + /obj/item/device/flashlight, + /obj/item/device/taperecorder, + /obj/item/device/tape, + /obj/item/device/pda, + /obj/item/device/radio/headset, + /obj/item/clothing/gloves, + /obj/item/device/hailer, + /obj/item/device/megaphone, + /obj/item/weapon/melee, + /obj/item/clothing/accessory/badge, + /obj/item/weapon/gun/projectile/sec, + /obj/item/weapon/gun/projectile/p92x, + /obj/item/taperoll, + /obj/item/weapon/gun/projectile/colt/detective, + /obj/item/device/holowarrant, + /obj/item/device/ticket_printer //VOREStation Edit + ) + +/obj/item/weapon/storage/belt/detective + name = "forensic utility belt" + desc = "A belt for holding forensics equipment." + icon_state = "security" + storage_slots = 7 + max_w_class = ITEMSIZE_NORMAL + can_hold = list( + /obj/item/device/taperecorder, + /obj/item/device/tape, + /obj/item/clothing/glasses, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/weapon/reagent_containers/spray/luminol, + /obj/item/weapon/sample, + /obj/item/weapon/forensics/sample_kit/powder, + /obj/item/weapon/forensics/swab, + /obj/item/device/uv_light, + /obj/item/weapon/forensics/sample_kit, + /obj/item/weapon/photo, + /obj/item/device/camera_film, + /obj/item/device/camera, + /obj/item/weapon/autopsy_scanner, + /obj/item/device/mass_spectrometer, + /obj/item/clothing/accessory/badge, + /obj/item/device/reagent_scanner, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/device/pda, + /obj/item/device/hailer, + /obj/item/device/megaphone, + /obj/item/device/radio/headset, + /obj/item/clothing/gloves, + /obj/item/taperoll, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/handcuffs, + /obj/item/device/flash, + /obj/item/weapon/flame/lighter, + /obj/item/weapon/reagent_containers/food/snacks/donut/, + ///obj/item/ammo_magazine, //Detectives don't get projectile weapons as standard here + ///obj/item/weapon/gun/projectile/colt/detective, //Detectives don't get projectile weapons as standard here + /obj/item/weapon/gun/energy/stunrevolver/detective, //In keeping with the same vein as above, they can store their special one + /obj/item/device/holowarrant, + /obj/item/weapon/reagent_containers/food/drinks/flask, + /obj/item/device/ticket_printer //VOREStation Edit + ) + +/obj/item/weapon/storage/belt/soulstone + name = "soul stone belt" + desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away" + icon_state = "soulstone" + storage_slots = 6 + can_hold = list( + /obj/item/device/soulstone + ) + +/obj/item/weapon/storage/belt/soulstone/full + starts_with = list(/obj/item/device/soulstone = 6) + +/obj/item/weapon/storage/belt/utility/alien + name = "alien belt" + desc = "A belt(?) that can hold things." + icon = 'icons/obj/abductor.dmi' + icon_state = "belt" + item_state = "security" + +/obj/item/weapon/storage/belt/utility/alien/full + starts_with = list( + /obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/tool/wrench/alien, + /obj/item/weapon/weldingtool/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/device/multitool/alien, + /obj/item/stack/cable_coil/alien + ) + +/obj/item/weapon/storage/belt/medical/alien + name = "alien belt" + desc = "A belt(?) that can hold things." + icon = 'icons/obj/abductor.dmi' + icon_state = "belt" + item_state = "security" + storage_slots = 8 + can_hold = list( + /obj/item/device/healthanalyzer, + /obj/item/weapon/dnainjector, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/reagent_containers/glass/beaker, + /obj/item/weapon/reagent_containers/glass/bottle, + /obj/item/weapon/reagent_containers/pill, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/flame/lighter/zippo, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/storage/pill_bottle, + /obj/item/stack/medical, + /obj/item/device/radio/headset, + /obj/item/device/pda, + /obj/item/taperoll, + /obj/item/device/megaphone, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/head/surgery, + /obj/item/clothing/gloves, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/clothing/glasses, + /obj/item/weapon/tool/crowbar, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/surgical + ) + +/obj/item/weapon/storage/belt/medical/alien + starts_with = list( + /obj/item/weapon/surgical/scalpel/alien, + /obj/item/weapon/surgical/hemostat/alien, + /obj/item/weapon/surgical/retractor/alien, + /obj/item/weapon/surgical/circular_saw/alien, + /obj/item/weapon/surgical/FixOVein/alien, + /obj/item/weapon/surgical/bone_clamp/alien, + /obj/item/weapon/surgical/cautery/alien, + /obj/item/weapon/surgical/surgicaldrill/alien + ) + +/obj/item/weapon/storage/belt/champion + name = "championship belt" + desc = "Proves to the world that you are the strongest!" + icon_state = "champion" + storage_slots = 1 + can_hold = list( + "/obj/item/clothing/mask/luchador" + ) + +/obj/item/weapon/storage/belt/security/tactical + name = "combat belt" + desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." + icon_state = "swat" + storage_slots = 9 + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 7 + +/obj/item/weapon/storage/belt/bandolier + name = "shotgun bandolier" + desc = "Designed to hold shotgun shells. Can't really hold more than that." + icon_state = "bandolier1" + storage_slots = 8 + max_w_class = ITEMSIZE_TINY + can_hold = list( + /obj/item/ammo_casing/a12g, + /obj/item/ammo_casing/a12g/pellet, + /obj/item/ammo_casing/a12g/blank, + /obj/item/ammo_casing/a12g/practice, + /obj/item/ammo_casing/a12g/beanbag, + /obj/item/ammo_casing/a12g/stunshell, + /obj/item/ammo_casing/a12g/flash, + /obj/item/ammo_casing/a12g/emp, + /obj/item/ammo_casing/a12g/flechette + ) + +/obj/item/weapon/storage/belt/security/tactical/bandolier + name = "combat bandolier" + desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." + icon_state = "bandolier2" + +/obj/item/weapon/storage/belt/janitor + name = "janitorial belt" + desc = "A belt used to hold most janitorial supplies." + icon_state = "janitor" + storage_slots = 7 + max_w_class = ITEMSIZE_NORMAL + can_hold = list( + /obj/item/clothing/glasses, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/weapon/grenade, + /obj/item/device/pda, + /obj/item/device/radio/headset, + /obj/item/clothing/gloves, + /obj/item/clothing/mask/surgical, //sterile mask, + /obj/item/device/assembly/mousetrap, + /obj/item/weapon/light/bulb, + /obj/item/weapon/light/tube, + /obj/item/weapon/flame/lighter, + /obj/item/device/megaphone, + /obj/item/taperoll, + /obj/item/weapon/reagent_containers/spray, + /obj/item/weapon/soap, + /obj/item/weapon/holosign_creator, //CHOMPAdd + /obj/item/device/lightreplacer //VOREStation edit + ) + +/obj/item/weapon/storage/belt/archaeology + name = "excavation gear-belt" + desc = "Can hold various excavation gear." + icon_state = "gear" + can_hold = list( + /obj/item/weapon/storage/box/samplebags, + /obj/item/device/core_sampler, + /obj/item/device/beacon_locator, + /obj/item/device/radio/beacon, + /obj/item/device/gps, + /obj/item/device/measuring_tape, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/weapon/pickaxe, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/weapon/paper, + /obj/item/weapon/photo, + /obj/item/weapon/folder, + /obj/item/weapon/pen, + /obj/item/weapon/folder, + /obj/item/weapon/clipboard, + /obj/item/weapon/anodevice, + /obj/item/clothing/glasses, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/storage/excavation, + /obj/item/weapon/anobattery, + /obj/item/device/ano_scanner, + /obj/item/weapon/pickaxe/hand, + /obj/item/device/xenoarch_multi_tool, + /obj/item/weapon/pickaxe/excavationdrill + ) + +/obj/item/weapon/storage/belt/fannypack + name = "leather fannypack" + desc = "A dorky fannypack for keeping small items in." + icon_state = "fannypack_leather" + item_state = "fannypack_leather" + max_w_class = ITEMSIZE_SMALL + storage_slots = null + max_storage_space = ITEMSIZE_COST_NORMAL * 2 + +/obj/item/weapon/storage/belt/fannypack/black + name = "black fannypack" + icon_state = "fannypack_black" + item_state = "fannypack_black" + +/obj/item/weapon/storage/belt/fannypack/blue + name = "blue fannypack" + icon_state = "fannypack_blue" + item_state = "fannypack_blue" + +/obj/item/weapon/storage/belt/fannypack/cyan + name = "cyan fannypack" + icon_state = "fannypack_cyan" + item_state = "fannypack_cyan" + +/obj/item/weapon/storage/belt/fannypack/green + name = "green fannypack" + icon_state = "fannypack_green" + item_state = "fannypack_green" + +/obj/item/weapon/storage/belt/fannypack/orange + name = "orange fannypack" + icon_state = "fannypack_orange" + item_state = "fannypack_orange" + +/obj/item/weapon/storage/belt/fannypack/purple + name = "purple fannypack" + icon_state = "fannypack_purple" + item_state = "fannypack_purple" + +/obj/item/weapon/storage/belt/fannypack/red + name = "red fannypack" + icon_state = "fannypack_red" + item_state = "fannypack_red" + +/obj/item/weapon/storage/belt/fannypack/white + name = "white fannypack" + icon_state = "fannypack_white" + item_state = "fannypack_white" + +/obj/item/weapon/storage/belt/fannypack/yellow + name = "yellow fannypack" + icon_state = "fannypack_yellow" + item_state = "fannypack_yellow" + +/obj/item/weapon/storage/belt/ranger + name = "ranger belt" + desc = "The fancy utility-belt holding the tools, cuffs and gadgets of the Go Go ERT-Rangers. The belt buckle is not real phoron, but it is still surprisingly comfortable to wear." + icon = 'icons/obj/clothing/ranger.dmi' + icon_state = "ranger_belt" + +/obj/item/weapon/storage/belt/dbandolier + name = "\improper Donk-Soft bandolier" + desc = "A Donk-Soft bandolier! Carry your spare darts anywhere! Ages 8 and up." + icon_state = "dbandolier" + storage_slots = 8 + can_hold = list( + /obj/item/ammo_casing/afoam_dart + ) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 6352f4ff9e..5386f2d5ca 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -1,115 +1,115 @@ -GLOBAL_LIST_INIT(biblenames, list( - "Bible", "Koran", "Scrapbook", - "Pagan", "White Bible", "Holy Light", - "Athiest", "Tome", "The King in Yellow", - "Ithaqua", "Scientology", "the bible melts", - "Necronomicon", "Orthodox", "Torah")) -//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine -// if your bible has no custom itemstate, use one of the existing ones -GLOBAL_LIST_INIT(biblestates, list( - "bible", "koran", "scrapbook", - "shadows", "white", "holylight", - "athiest", "tome", "kingyellow", - "ithaqua", "scientology", "melted", - "necronomicon", "orthodoxy", "torah")) -GLOBAL_LIST_INIT(bibleitemstates, list( - "bible", "koran", "scrapbook", - "syringe_kit", "syringe_kit", "syringe_kit", - "syringe_kit", "syringe_kit", "kingyellow", - "ithaqua", "scientology", "melted", - "necronomicon", "bible", "clipboard")) - -/obj/item/weapon/storage/bible - name = "bible" - desc = "Apply to head repeatedly." - icon_state ="bible" - item_state = "bible" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_books.dmi' - ) - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - var/mob/affecting = null - var/deity_name = "Christ" - use_sound = 'sound/bureaucracy/bookopen.ogg' - drop_sound = 'sound/bureaucracy/bookclose.ogg' - -/obj/item/weapon/storage/bible/attack_self(mob/living/carbon/human/user) - - if(user?.mind?.assigned_role != "Chaplain") - return FALSE - - if (!user.mind.my_religion) - return FALSE - - if (!user.mind.my_religion.configured) - var/list/skins = list() - for(var/i in 1 to GLOB.biblestates.len) - var/image/bible_image = image(icon = 'icons/obj/storage.dmi', icon_state = GLOB.biblestates[i]) - skins += list("[GLOB.biblenames[i]]" = bible_image) - - var/choice = show_radial_menu(user, src, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 40, require_near = TRUE) - if(!choice) - return FALSE - var/bible_index = GLOB.biblenames.Find(choice) - if(!bible_index) - return FALSE - - user.mind.my_religion.bible_icon_state = GLOB.biblestates[bible_index] - user.mind.my_religion.bible_item_state = GLOB.bibleitemstates[bible_index] - user.mind.my_religion.configured = TRUE - - deity_name = user.mind.my_religion.deity - name = user.mind.my_religion.bible_name - icon_state = user.mind.my_religion.bible_icon_state - item_state = user.mind.my_religion.bible_item_state - to_chat(user, "You invoke [user.mind.my_religion.deity] and prepare a copy of [src].") - -/** - * Checks if we are allowed to interact with a radial menu - * - * Arguments: - * * user The mob interacting with the menu - */ -/obj/item/weapon/storage/bible/proc/check_menu(mob/living/carbon/human/user) - if(user.mind.my_religion.configured) - return FALSE - if(!istype(user)) - return FALSE - if(user.get_active_hand() != src) - return FALSE - if(user.incapacitated()) - return FALSE - if(user.mind.assigned_role != "Chaplain") - return FALSE - return TRUE - -/obj/item/weapon/storage/bible/booze - name = "bible" - desc = "To be applied to the head repeatedly." - icon_state ="bible" - -/obj/item/weapon/storage/bible/booze/New() - starts_with = list( - /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, - /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, - /obj/item/weapon/spacecash/c100, - /obj/item/weapon/spacecash/c100, - /obj/item/weapon/spacecash/c100 - ) - -/obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) return - if(user.mind && (user.mind.assigned_role == "Chaplain")) - if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder - to_chat(user, "You bless [A].") - var/water2holy = A.reagents.get_reagent_amount("water") - A.reagents.del_reagent("water") - A.reagents.add_reagent("holywater",water2holy) - -/obj/item/weapon/storage/bible/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (src.use_sound) - playsound(src, src.use_sound, 50, 1, -5) - ..() +GLOBAL_LIST_INIT(biblenames, list( + "Bible", "Koran", "Scrapbook", + "Pagan", "White Bible", "Holy Light", + "Athiest", "Tome", "The King in Yellow", + "Ithaqua", "Scientology", "the bible melts", + "Necronomicon", "Orthodox", "Torah")) +//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine +// if your bible has no custom itemstate, use one of the existing ones +GLOBAL_LIST_INIT(biblestates, list( + "bible", "koran", "scrapbook", + "shadows", "white", "holylight", + "athiest", "tome", "kingyellow", + "ithaqua", "scientology", "melted", + "necronomicon", "orthodoxy", "torah")) +GLOBAL_LIST_INIT(bibleitemstates, list( + "bible", "koran", "scrapbook", + "syringe_kit", "syringe_kit", "syringe_kit", + "syringe_kit", "syringe_kit", "kingyellow", + "ithaqua", "scientology", "melted", + "necronomicon", "bible", "clipboard")) + +/obj/item/weapon/storage/bible + name = "bible" + desc = "Apply to head repeatedly." + icon_state ="bible" + item_state = "bible" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_books.dmi' + ) + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + var/mob/affecting = null + var/deity_name = "Christ" + use_sound = 'sound/bureaucracy/bookopen.ogg' + drop_sound = 'sound/bureaucracy/bookclose.ogg' + +/obj/item/weapon/storage/bible/attack_self(mob/living/carbon/human/user) + + if(user?.mind?.assigned_role != "Chaplain") + return FALSE + + if (!user.mind.my_religion) + return FALSE + + if (!user.mind.my_religion.configured) + var/list/skins = list() + for(var/i in 1 to GLOB.biblestates.len) + var/image/bible_image = image(icon = 'icons/obj/storage.dmi', icon_state = GLOB.biblestates[i]) + skins += list("[GLOB.biblenames[i]]" = bible_image) + + var/choice = show_radial_menu(user, src, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 40, require_near = TRUE) + if(!choice) + return FALSE + var/bible_index = GLOB.biblenames.Find(choice) + if(!bible_index) + return FALSE + + user.mind.my_religion.bible_icon_state = GLOB.biblestates[bible_index] + user.mind.my_religion.bible_item_state = GLOB.bibleitemstates[bible_index] + user.mind.my_religion.configured = TRUE + + deity_name = user.mind.my_religion.deity + name = user.mind.my_religion.bible_name + icon_state = user.mind.my_religion.bible_icon_state + item_state = user.mind.my_religion.bible_item_state + to_chat(user, "You invoke [user.mind.my_religion.deity] and prepare a copy of [src].") + +/** + * Checks if we are allowed to interact with a radial menu + * + * Arguments: + * * user The mob interacting with the menu + */ +/obj/item/weapon/storage/bible/proc/check_menu(mob/living/carbon/human/user) + if(user.mind.my_religion.configured) + return FALSE + if(!istype(user)) + return FALSE + if(user.get_active_hand() != src) + return FALSE + if(user.incapacitated()) + return FALSE + if(user.mind.assigned_role != "Chaplain") + return FALSE + return TRUE + +/obj/item/weapon/storage/bible/booze + name = "bible" + desc = "To be applied to the head repeatedly." + icon_state ="bible" + +/obj/item/weapon/storage/bible/booze/New() + starts_with = list( + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer, + /obj/item/weapon/spacecash/c100, + /obj/item/weapon/spacecash/c100, + /obj/item/weapon/spacecash/c100 + ) + +/obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) + if(!proximity) return + if(user.mind && (user.mind.assigned_role == "Chaplain")) + if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder + to_chat(user, "You bless [A].") + var/water2holy = A.reagents.get_reagent_amount("water") + A.reagents.del_reagent("water") + A.reagents.add_reagent("holywater",water2holy) + +/obj/item/weapon/storage/bible/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (src.use_sound) + playsound(src, src.use_sound, 50, 1, -5) + ..() diff --git a/code/game/objects/items/weapons/storage/boxes_ch.dm b/code/game/objects/items/weapons/storage/boxes_ch.dm index c1c8c26db8..856a7ffb31 100644 --- a/code/game/objects/items/weapons/storage/boxes_ch.dm +++ b/code/game/objects/items/weapons/storage/boxes_ch.dm @@ -1,118 +1,118 @@ -/obj/item/weapon/storage/box/casino - name = "prize box" - desc = "It's a lovely golden tinted cardboard box, maybe theres something valuable inside?" - icon = 'icons/obj/storage_ch.dmi' - icon_state = "box_casino" - -/obj/item/weapon/storage/box/casino/foamcrossbow - name = "foam crossbow" - starts_with = list( - //obj/item/weapon/gun/projectile/revolver/toy/crossbow, - /obj/item/ammo_casing/afoam_dart, - /obj/item/ammo_casing/afoam_dart, - /obj/item/ammo_casing/afoam_dart, - /obj/item/ammo_casing/afoam_dart, - /obj/item/ammo_casing/afoam_dart - ) - -/obj/item/weapon/storage/box/casino/costume_whitebunny - name = "white bunnygirl outfit" - starts_with = list( - /datum/sprite_accessory/ears/bunny_white, - /obj/item/clothing/under/sexybunny_white/sexybunny_black, - /datum/gear/shoes/heels - ) - -/obj/item/weapon/storage/box/casino/costume_blackbunny - name = "black bunnygirl outfit" - starts_with = list( - /datum/sprite_accessory/ears/bunny_white, - /obj/item/clothing/under/sexybunny_white, - /datum/gear/shoes/heels - ) - -/obj/item/weapon/storage/box/casino/costume_sexymime - name = "sexy mime costume" - starts_with = list( - /obj/item/clothing/mask/gas/sexymime, - /obj/item/clothing/under/sexymime, - /obj/item/clothing/shoes/mime, - /obj/item/clothing/head/soft/mime - ) - -/obj/item/weapon/storage/box/casino/costume_sexyclown - name = "sexy clown costume" - starts_with = list( - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/mask/gas/sexyclown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/under/sexyclown - ) - -/obj/item/weapon/storage/box/casino/costume_nyangirl - name = "cat girl costume" - starts_with = list( - /obj/item/clothing/under/schoolgirl, - /obj/item/clothing/head/kitty - ) - -/obj/item/weapon/storage/box/casino/costume_wizard - name = "wizard costume" - starts_with = list( - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/head/wizard/fake, - /obj/item/weapon/staff - ) - -/obj/item/weapon/storage/box/casino/costume_chicken - name = "chicken costume" - starts_with = list( - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/head/chicken, - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - -/obj/item/weapon/storage/box/casino/costume_gladiator - name = "gladiator costume" - starts_with = list( - /obj/item/clothing/under/gladiator, - /obj/item/clothing/head/helmet/gladiator - ) - -/obj/item/weapon/storage/box/casino/costume_pirate - name = "pirate costume" - starts_with = list( - /obj/item/clothing/under/pirate, - /obj/item/clothing/suit/pirate, - /obj/item/clothing/head/pirate, - /obj/item/clothing/glasses/eyepatch - ) - -/obj/item/weapon/storage/box/casino/costume_commie - name = "communist costume" - starts_with = list( - /obj/item/clothing/under/soviet, - /obj/item/clothing/head/ushanka - ) - -/obj/item/weapon/storage/box/casino/costume_imperiummonk - name = "imperium monk costume" - starts_with = list( - /obj/item/clothing/suit/imperium_monk, - /obj/item/clothing/mask/gas/cyborg - ) - -/obj/item/weapon/storage/box/casino/costume_plaguedoctor - name = "plague doctor costume" - starts_with = list( - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, - /obj/item/clothing/head/plaguedoctorhat - ) - -/obj/item/weapon/storage/box/casino/costume_cutewitch - name = "witch costume" - starts_with = list( - /obj/item/clothing/under/sundress, - /obj/item/clothing/head/wizard/marisa/fake, - /obj/item/weapon/staff/broom - ) +/obj/item/weapon/storage/box/casino + name = "prize box" + desc = "It's a lovely golden tinted cardboard box, maybe theres something valuable inside?" + icon = 'icons/obj/storage_ch.dmi' + icon_state = "box_casino" + +/obj/item/weapon/storage/box/casino/foamcrossbow + name = "foam crossbow" + starts_with = list( + //obj/item/weapon/gun/projectile/revolver/toy/crossbow, + /obj/item/ammo_casing/afoam_dart, + /obj/item/ammo_casing/afoam_dart, + /obj/item/ammo_casing/afoam_dart, + /obj/item/ammo_casing/afoam_dart, + /obj/item/ammo_casing/afoam_dart + ) + +/obj/item/weapon/storage/box/casino/costume_whitebunny + name = "white bunnygirl outfit" + starts_with = list( + /datum/sprite_accessory/ears/bunny_white, + /obj/item/clothing/under/sexybunny_white/sexybunny_black, + /datum/gear/shoes/heels + ) + +/obj/item/weapon/storage/box/casino/costume_blackbunny + name = "black bunnygirl outfit" + starts_with = list( + /datum/sprite_accessory/ears/bunny_white, + /obj/item/clothing/under/sexybunny_white, + /datum/gear/shoes/heels + ) + +/obj/item/weapon/storage/box/casino/costume_sexymime + name = "sexy mime costume" + starts_with = list( + /obj/item/clothing/mask/gas/sexymime, + /obj/item/clothing/under/sexymime, + /obj/item/clothing/shoes/mime, + /obj/item/clothing/head/soft/mime + ) + +/obj/item/weapon/storage/box/casino/costume_sexyclown + name = "sexy clown costume" + starts_with = list( + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/mask/gas/sexyclown, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/under/sexyclown + ) + +/obj/item/weapon/storage/box/casino/costume_nyangirl + name = "cat girl costume" + starts_with = list( + /obj/item/clothing/under/schoolgirl, + /obj/item/clothing/head/kitty + ) + +/obj/item/weapon/storage/box/casino/costume_wizard + name = "wizard costume" + starts_with = list( + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/head/wizard/fake, + /obj/item/weapon/staff + ) + +/obj/item/weapon/storage/box/casino/costume_chicken + name = "chicken costume" + starts_with = list( + /obj/item/clothing/suit/chickensuit, + /obj/item/clothing/head/chicken, + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + +/obj/item/weapon/storage/box/casino/costume_gladiator + name = "gladiator costume" + starts_with = list( + /obj/item/clothing/under/gladiator, + /obj/item/clothing/head/helmet/gladiator + ) + +/obj/item/weapon/storage/box/casino/costume_pirate + name = "pirate costume" + starts_with = list( + /obj/item/clothing/under/pirate, + /obj/item/clothing/suit/pirate, + /obj/item/clothing/head/pirate, + /obj/item/clothing/glasses/eyepatch + ) + +/obj/item/weapon/storage/box/casino/costume_commie + name = "communist costume" + starts_with = list( + /obj/item/clothing/under/soviet, + /obj/item/clothing/head/ushanka + ) + +/obj/item/weapon/storage/box/casino/costume_imperiummonk + name = "imperium monk costume" + starts_with = list( + /obj/item/clothing/suit/imperium_monk, + /obj/item/clothing/mask/gas/cyborg + ) + +/obj/item/weapon/storage/box/casino/costume_plaguedoctor + name = "plague doctor costume" + starts_with = list( + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, + /obj/item/clothing/head/plaguedoctorhat + ) + +/obj/item/weapon/storage/box/casino/costume_cutewitch + name = "witch costume" + starts_with = list( + /obj/item/clothing/under/sundress, + /obj/item/clothing/head/wizard/marisa/fake, + /obj/item/weapon/staff/broom + ) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index a3cc27d926..c8cdcffc1e 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -1,32 +1,32 @@ -/obj/item/weapon/storage/briefcase - name = "briefcase" - desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." - icon_state = "briefcase" - force = 8.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 4 - use_sound = 'sound/items/storage/briefcase.ogg' - drop_sound = 'sound/items/drop/backpack.ogg' - pickup_sound = 'sound/items/pickup/backpack.ogg' - -/obj/item/weapon/storage/briefcase/clutch - name = "clutch purse" - desc = "A fashionable handheld bag typically used by women." - icon_state = "clutch" - item_state_slots = list(slot_r_hand_str = "smpurse", slot_l_hand_str = "smpurse") - force = 0 - w_class = ITEMSIZE_NORMAL - max_w_class = ITEMSIZE_SMALL - max_storage_space = ITEMSIZE_COST_SMALL * 4 - -/obj/item/weapon/storage/briefcase/bookbag - name = "bookbag" - desc = "A small bookbag for holding... things other than books?" - icon_state = "bookbag" - force = 4.0 - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL +/obj/item/weapon/storage/briefcase + name = "briefcase" + desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." + icon_state = "briefcase" + force = 8.0 + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 4 + use_sound = 'sound/items/storage/briefcase.ogg' + drop_sound = 'sound/items/drop/backpack.ogg' + pickup_sound = 'sound/items/pickup/backpack.ogg' + +/obj/item/weapon/storage/briefcase/clutch + name = "clutch purse" + desc = "A fashionable handheld bag typically used by women." + icon_state = "clutch" + item_state_slots = list(slot_r_hand_str = "smpurse", slot_l_hand_str = "smpurse") + force = 0 + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_COST_SMALL * 4 + +/obj/item/weapon/storage/briefcase/bookbag + name = "bookbag" + desc = "A small bookbag for holding... things other than books?" + icon_state = "bookbag" + force = 4.0 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL max_storage_space = ITEMSIZE_COST_NORMAL * 4 \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 639bd175a4..850bc5246e 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -1,558 +1,558 @@ -/* - * The 'fancy' path is for objects like donut boxes that show how many items are in the storage item on the sprite itself - * .. Sorry for the shitty path name, I couldnt think of a better one. - * - * WARNING: var/icon_type is used for both examine text and sprite name. Please look at the procs below and adjust your sprite names accordingly - * - * Contains: - * Donut Box - * Egg Box - * Candle Box - * Crayon Box - * Cracker Pack - * Cigarette Pack - * Cigar Box - * Extra Tobacco Bits - * Vial Box - * Box of Chocolates - */ - -/obj/item/weapon/storage/fancy/ - icon = 'icons/obj/food.dmi' - icon_state = "donutbox6" - name = "donut box" - var/icon_type = "donut" - drop_sound = 'sound/items/drop/cardboardbox.ogg' - pickup_sound = 'sound/items/pickup/cardboardbox.ogg' - var/open = 0 - var/open_state - var/closed_state - -/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0) - var/total_contents = contents.len - itemremoved - icon_state = "[icon_type]box[total_contents]" - return - -/obj/item/weapon/storage/fancy/examine(mob/user) - . = ..() - - if(Adjacent(user)) - if(!contents.len) - . += "There are no [icon_type]s left in the box." - else if(contents.len == 1) - . += "There is one [icon_type] left in the box." - else - . += "There are [contents.len] [icon_type]s in the box." - -/* - * Egg Box - */ -/obj/item/weapon/storage/fancy/egg_box - icon = 'icons/obj/food.dmi' - icon_state = "eggbox" - icon_type = "egg" - name = "egg box" - center_of_mass = list("x" = 16,"y" = 7) - storage_slots = 12 - can_hold = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/boiledegg - ) - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12) - -/obj/item/weapon/storage/fancy/egg_box/New() - if(!open_state) - open_state = "[initial(icon_state)]0" - if(!closed_state) - closed_state = "[initial(icon_state)]" - ..() - -/obj/item/weapon/storage/fancy/egg_box/update_icon() - cut_overlays() - if(open) - icon_state = open_state - if(contents.len >= 1) - add_overlay("eggbox[contents.len]") - else - icon_state = closed_state - -/obj/item/weapon/storage/fancy/egg_box/open(mob/user as mob) - if(open) - return - if (isobserver(usr)) - return - open = TRUE - update_icon() - ..() - -/obj/item/weapon/storage/fancy/egg_box/close(mob/user as mob) - open = FALSE - update_icon() - ..() - -/* - * Candle Boxes - */ -/obj/item/weapon/storage/fancy/candle_box - name = "red candle pack" - desc = "A pack of red candles." - icon = 'icons/obj/candle.dmi' - icon_state = "candlebox5" - icon_type = "candle" - item_state = "candlebox5" - throwforce = 2 - slot_flags = SLOT_BELT - max_storage_space = ITEMSIZE_COST_TINY * 5 - can_hold = list(/obj/item/weapon/flame/candle) - starts_with = list(/obj/item/weapon/flame/candle = 5) - -/obj/item/weapon/storage/fancy/whitecandle_box - name = "white candle pack" - desc = "A pack of white candles." - icon = 'icons/obj/candle.dmi' - icon_state = "whitecandlebox5" - icon_type = "whitecandle" - item_state = "whitecandlebox5" - throwforce = 2 - slot_flags = SLOT_BELT - max_storage_space = ITEMSIZE_COST_TINY * 5 - can_hold = list(/obj/item/weapon/flame/candle) - starts_with = list(/obj/item/weapon/flame/candle/white = 5) - -/obj/item/weapon/storage/fancy/blackcandle_box - name = "black candle pack" - desc = "A pack of black candles." - icon = 'icons/obj/candle.dmi' - icon_state = "blackcandlebox5" - icon_type = "blackcandle" - item_state = "blackcandlebox5" - throwforce = 2 - slot_flags = SLOT_BELT - max_storage_space = ITEMSIZE_COST_TINY * 5 - can_hold = list(/obj/item/weapon/flame/candle) - starts_with = list(/obj/item/weapon/flame/candle/black = 5) - - -/* - * Crayon Box - */ -/obj/item/weapon/storage/fancy/crayons - name = "box of crayons" - desc = "A box of crayons for all your rune drawing needs." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonbox" - w_class = ITEMSIZE_SMALL - icon_type = "crayon" - can_hold = list( - /obj/item/weapon/pen/crayon - ) - starts_with = list( - /obj/item/weapon/pen/crayon/red, - /obj/item/weapon/pen/crayon/orange, - /obj/item/weapon/pen/crayon/yellow, - /obj/item/weapon/pen/crayon/green, - /obj/item/weapon/pen/crayon/blue, - /obj/item/weapon/pen/crayon/purple - ) - -/obj/item/weapon/storage/fancy/crayons/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/storage/fancy/crayons/update_icon() - var/mutable_appearance/ma = new(src) - ma.cut_overlays() - for(var/obj/item/weapon/pen/crayon/crayon in contents) - add_overlay(image('icons/obj/crayons.dmi',crayon.colourName)) - appearance = ma - -/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/pen/crayon)) - switch(W:colourName) - if("mime") - to_chat(user, "This crayon is too sad to be contained in this box.") - return - if("rainbow") - to_chat(user, "This crayon is too powerful to be contained in this box.") - return - ..() - -/obj/item/weapon/storage/fancy/markers - name = "box of markers" - desc = "A very professional looking box of permanent markers." - icon = 'icons/obj/crayons.dmi' - icon_state = "markerbox" - w_class = ITEMSIZE_SMALL - icon_type = "marker" - can_hold = list( - /obj/item/weapon/pen/crayon/marker - ) - starts_with = list( - /obj/item/weapon/pen/crayon/marker/black, - /obj/item/weapon/pen/crayon/marker/red, - /obj/item/weapon/pen/crayon/marker/orange, - /obj/item/weapon/pen/crayon/marker/yellow, - /obj/item/weapon/pen/crayon/marker/green, - /obj/item/weapon/pen/crayon/marker/blue, - /obj/item/weapon/pen/crayon/marker/purple - ) - -/obj/item/weapon/storage/fancy/markers/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/storage/fancy/markers/update_icon() - var/mutable_appearance/ma = new(src) - ma.cut_overlays() - for(var/obj/item/weapon/pen/crayon/marker/marker in contents) - ma.add_overlay(image('icons/obj/crayons.dmi',"m"+marker.colourName)) - appearance = ma - -/obj/item/weapon/storage/fancy/markers/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/pen/crayon/marker)) - switch(W:colourName) - if("mime") - to_chat(user, "This marker is too depressing to be contained in this box.") - return - if("rainbow") - to_chat(user, "This marker is too childish to be contained in this box.") - return - ..() - -/* - * Cracker Pack - */ -/obj/item/weapon/storage/fancy/crackers - name = "\improper Getmore Crackers" - icon = 'icons/obj/food.dmi' - icon_state = "crackerbox" - icon_type = "cracker" - max_storage_space = ITEMSIZE_COST_TINY * 6 - max_w_class = ITEMSIZE_TINY - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/cracker) - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/cracker = 6) - -/* - * Cigarette Pack - */ -/obj/item/weapon/storage/fancy/cigarettes - name = "\improper pack of Trans-Stellar Duty-frees" - desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets." - description_fluff = "The Trans-Stellar Duty-Free Cigarette Company was created as an imprint of NanoTrasen. They are the most boring, tasteless, dry cigarettes on the market, but due to just how unremarkable (not to mention cheap to produce) they are, they sold in vending machines in almost every corner of the galaxy." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cigpacket" - item_state_slots = list(slot_r_hand_str = "cigpacket", slot_l_hand_str = "cigpacket") - w_class = ITEMSIZE_TINY - throwforce = 2 - slot_flags = SLOT_BELT - storage_slots = 6 - can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/trash/cigbutt) - icon_type = "cigarette" - starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 6) - var/brand = "\improper Trans-Stellar Duty-free" - -/obj/item/weapon/storage/fancy/cigarettes/Initialize() - . = ..() - flags |= NOREACT - create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one - flags |= OPENCONTAINER - if(brand) - for(var/obj/item/clothing/mask/smokable/cigarette/C in src) - C.brand = brand - C.desc += " This one is \a [brand]." - -/obj/item/weapon/storage/fancy/cigarettes/New() - if(!open_state) - open_state = "[initial(icon_state)]_open" - if(!closed_state) - closed_state = "[initial(icon_state)]" - ..() - -/obj/item/weapon/storage/fancy/cigarettes/update_icon() - cut_overlays() - if(open) - icon_state = open_state - if(contents.len >= 1) - add_overlay("cig[contents.len]") - else - icon_state = closed_state - -/obj/item/weapon/storage/fancy/cigarettes/open(mob/user as mob) - if(open) - return - open = TRUE - if(contents.len == 0) - icon_state = "[initial(icon_state)]_empty" - else - update_icon() - ..() - -/obj/item/weapon/storage/fancy/cigarettes/close(mob/user as mob) - open = FALSE - if(contents.len == 0) - icon_state = "[initial(icon_state)]_empty" - else - update_icon() - ..() - -/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location) - // Don't try to transfer reagents to lighters - if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) - var/obj/item/clothing/mask/smokable/cigarette/C = W - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - return ..() - -/obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(M == user && user.zone_sel.selecting == O_MOUTH) - // Find ourselves a cig. Note that we could be full of lighters. - var/obj/item/clothing/mask/smokable/cigarette/cig = locate() in src - - if(cig == null) - to_chat(user, "Looks like the packet is out of cigarettes.") - return - - // Instead of running equip_to_slot_if_possible() we check here first, - // to avoid dousing cig with reagents if we're not going to equip it - if(!cig.mob_can_equip(user, slot_wear_mask)) - return - - // We call remove_from_storage first to manage the reagent transfer and - // UI updates. - remove_from_storage(cig, null) - user.equip_to_slot(cig, slot_wear_mask) - - reagents.maximum_volume = 15 * contents.len - to_chat(user, "You take a cigarette out of the pack.") - update_icon() - else - ..() - -/obj/item/weapon/storage/fancy/cigarettes/dromedaryco - name = "\improper DromedaryCo packet" - desc = "A packet of six Earth-export DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"" - description_fluff = "DromedaryCo is one of Sol's oldest cigarette brands, and takes pride in having sourced tobcacco from the same Indian plantations since 2044. Popular with those willing to pay extra for a little nostalgia." - icon_state = "Dpacket" - brand = "\improper Dromedary Co. cigarette" - -/obj/item/weapon/storage/fancy/cigarettes/killthroat - name = "\improper AcmeCo packet" - desc = "A packet of six AcmeCo cigarettes. For those who want to obtain a record for the most cancerous tumors on a budget." - description_fluff = "Available anywhere people breathe and want to breathe less, AcmeCo is the cheapest, most widespread cigarette brand in the galaxy. They taste like trash, but when you're keeping them inside your jumpsuit on a 16 hour shift, you're probably not too concerned with flavour." - icon_state = "Apacket" - brand = "\improper Acme Co. cigarette" - -/obj/item/weapon/storage/fancy/cigarettes/luckystars - name = "\improper pack of Lucky Stars" - desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head." - description_fluff = "Lucky Stars are some of the most prolific advertisers in the business, with Gilthari Exports plastering the name and slogan on everything from workplace safety videos to racing bikes. 'Feel the gentle warmth of your Lucky Star'." - icon_state = "LSpacket" - brand = "\improper Lucky Star" - -/obj/item/weapon/storage/fancy/cigarettes/jerichos - name = "\improper pack of Jerichos" - desc = "Typically seen dangling from the lips of Fleet veterans and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs." - description_fluff = "The Jericho brand has carefully cultivated its 'rugged' image ever since its completely accidental association with the SolGov-Hegemony war due to their sizable corporate presence in the region. Prior to the war, Jerichos were considered the realm of drunks and sad divorcees." - icon_state = "Jpacket" - brand = "\improper Jericho" - -/obj/item/weapon/storage/fancy/cigarettes/menthols - name = "\improper pack of Temperamento Menthols" - desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of science vessel crews. Hardly anyone knows they make 'em in non-menthol!" - description_fluff = "Temperamento Menthols are a product of the Aether Atmospherics and Recycling company, and the 'smooth' menthol taste is rumoured to be the chemical by-product of some far more profitable industrial synthesis." - icon_state = "TMpacket" - brand = "\improper Temperamento Menthol" - -/obj/item/weapon/storage/fancy/cigarettes/carcinomas - name = "\improper pack of Carcinoma Angels" - desc = "This previously unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too." - description_fluff = "The bitter taste of a Carcinoma Angel is considered desirable by many equally bitter wash-ups who consider themselves to be 'hard-boiled'. The smell is practically inseparable from urban security offices, and old men with exonet radio shows." - brand = "\improper Carcinoma Angel" - -/obj/item/weapon/storage/fancy/cigarettes/professionals - name = "\improper pack of Professional 120s" - desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They are, however, very good quality." - description_fluff = "Grown and rolled in a meticulously maintained biosphere orbitting Love, P120 tobacco is marketed as 'probably the best in the galaxy'. The premium price point, and the fact that the vast majority of consumers couldn't really tell the difference between this and the next leading brand." - icon_state = "P100packet" - brand = "\improper Professional 120" - -/* - * Cigar Box - */ -/obj/item/weapon/storage/fancy/cigar - name = "cigar case" - desc = "A case for holding your cigars when you are not smoking them." - description_fluff = "The tasteful stained palm case tells you that these 'Palma Grande' premium \ - cigars are only sold on the luxury cruises and resorts of Oasis, though ten separate companies \ - produce them for that purpose galaxy-wide. The standard is however very high." - icon_state = "cigarcase" - icon = 'icons/obj/cigarettes.dmi' - w_class = ITEMSIZE_TINY - throwforce = 2 - slot_flags = SLOT_BELT - storage_slots = 5 - can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/trash/cigbutt/cigarbutt) - icon_type = "cigar" - starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 5) - -/obj/item/weapon/storage/fancy/cigar/Initialize() - . = ..() - flags |= NOREACT - create_reagents(15 * storage_slots) - -/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location) - var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W - if(!istype(C)) return - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - return ..() - -/obj/item/weapon/storage/fancy/cigar/New() - if(!open_state) - open_state = "[initial(icon_state)]0" - if(!closed_state) - closed_state = "[initial(icon_state)]" - ..() - -/obj/item/weapon/storage/fancy/cigar/update_icon() - cut_overlays() - if(open) - icon_state = open_state - if(contents.len >= 1) - add_overlay("[initial(icon_state)][contents.len]") - else - icon_state = closed_state - -/obj/item/weapon/storage/fancy/cigar/open(mob/user as mob) - if(open) - return - open = TRUE - update_icon() - ..() - -/obj/item/weapon/storage/fancy/cigar/close(mob/user as mob) - open = FALSE - update_icon() - ..() - -/obj/item/weapon/storage/fancy/cigar/choiba - name = "/improper Choiba cigar case" - desc = "A fancy case for holding your cigars when you are not smoking them." - description_fluff = "The exquisite wooden case bears the markings of the \ - Choiba cigar company based out of Cuba. The perfectly humidized case keeps \ - the companies signature Cigars in premium condidtion even when traveling \ - long distances within a vacuume. The custom case itself can sell for quite \ - a lot in some places." - icon_state = "cohibacase" - icon = 'icons/obj/cigarettes.dmi' - icon_type = "cigar" - starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 5) - -/obj/item/weapon/storage/fancy/cigar/havana - name = "\improper Havana cigar case" - desc = "A fancy case for holding your cigars when you are not smoking them." - icon_state = "havanacase" - icon = 'icons/obj/cigarettes.dmi' - icon_type = "cigar" - starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar/havana = 5) - -/* - * Tobacco Bits - */ -/obj/item/weapon/storage/rollingpapers - name = "rolling paper pack" - desc = "A small cardboard pack containing several folded rolling papers." - icon_state = "paperbox" - icon = 'icons/obj/cigarettes.dmi' - w_class = ITEMSIZE_TINY - throwforce = 2 - slot_flags = SLOT_BELT - storage_slots = 14 - can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper) - starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper = 14) - -/obj/item/weapon/storage/rollingpapers/blunt - name = "blunt wrap pack" - desc = "A small cardboard pack containing several folded blunt wraps." - icon_state = "bluntbox" - storage_slots = 7 - can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt) - starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt = 7) - -/* - * Vial Box - */ -/obj/item/weapon/storage/fancy/vials - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox6" - icon_type = "vial" - name = "vial storage box" - desc = "A helpful rack to hold test tubes." - storage_slots = 6 - can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) - starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker/vial = 6) - -/obj/item/weapon/storage/lockbox/vials - name = "secure vial storage box" - desc = "A locked box for keeping things away from children." - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox0" - item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") - max_w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) - max_storage_space = ITEMSIZE_COST_SMALL * 6 //The sum of the w_classes of all the items in this storage item. - storage_slots = 6 - req_access = list(access_virology) - -/obj/item/weapon/storage/lockbox/vials/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0) - var/total_contents = contents.len - itemremoved - icon_state = "vialbox[total_contents]" - cut_overlays() - if (!broken) - add_overlay("led[locked]") - if(locked) - add_overlay("cover") - else - add_overlay("ledb") - -/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - update_icon() - -/* - * Box of Chocolates - */ -/obj/item/weapon/storage/fancy/heartbox - icon_state = "heartbox" - name = "box of chocolates" - icon_type = "chocolate" - - var/startswith = 6 - max_storage_space = ITEMSIZE_COST_SMALL * 6 - can_hold = list( - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle - ) - starts_with = list( - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, - /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle - ) - -/obj/item/weapon/storage/fancy/heartbox/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/storage/fancy/heartbox/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "heartbox_empty" +/* + * The 'fancy' path is for objects like donut boxes that show how many items are in the storage item on the sprite itself + * .. Sorry for the shitty path name, I couldnt think of a better one. + * + * WARNING: var/icon_type is used for both examine text and sprite name. Please look at the procs below and adjust your sprite names accordingly + * + * Contains: + * Donut Box + * Egg Box + * Candle Box + * Crayon Box + * Cracker Pack + * Cigarette Pack + * Cigar Box + * Extra Tobacco Bits + * Vial Box + * Box of Chocolates + */ + +/obj/item/weapon/storage/fancy/ + icon = 'icons/obj/food.dmi' + icon_state = "donutbox6" + name = "donut box" + var/icon_type = "donut" + drop_sound = 'sound/items/drop/cardboardbox.ogg' + pickup_sound = 'sound/items/pickup/cardboardbox.ogg' + var/open = 0 + var/open_state + var/closed_state + +/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0) + var/total_contents = contents.len - itemremoved + icon_state = "[icon_type]box[total_contents]" + return + +/obj/item/weapon/storage/fancy/examine(mob/user) + . = ..() + + if(Adjacent(user)) + if(!contents.len) + . += "There are no [icon_type]s left in the box." + else if(contents.len == 1) + . += "There is one [icon_type] left in the box." + else + . += "There are [contents.len] [icon_type]s in the box." + +/* + * Egg Box + */ +/obj/item/weapon/storage/fancy/egg_box + icon = 'icons/obj/food.dmi' + icon_state = "eggbox" + icon_type = "egg" + name = "egg box" + center_of_mass = list("x" = 16,"y" = 7) + storage_slots = 12 + can_hold = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg + ) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12) + +/obj/item/weapon/storage/fancy/egg_box/New() + if(!open_state) + open_state = "[initial(icon_state)]0" + if(!closed_state) + closed_state = "[initial(icon_state)]" + ..() + +/obj/item/weapon/storage/fancy/egg_box/update_icon() + cut_overlays() + if(open) + icon_state = open_state + if(contents.len >= 1) + add_overlay("eggbox[contents.len]") + else + icon_state = closed_state + +/obj/item/weapon/storage/fancy/egg_box/open(mob/user as mob) + if(open) + return + if (isobserver(usr)) + return + open = TRUE + update_icon() + ..() + +/obj/item/weapon/storage/fancy/egg_box/close(mob/user as mob) + open = FALSE + update_icon() + ..() + +/* + * Candle Boxes + */ +/obj/item/weapon/storage/fancy/candle_box + name = "red candle pack" + desc = "A pack of red candles." + icon = 'icons/obj/candle.dmi' + icon_state = "candlebox5" + icon_type = "candle" + item_state = "candlebox5" + throwforce = 2 + slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_TINY * 5 + can_hold = list(/obj/item/weapon/flame/candle) + starts_with = list(/obj/item/weapon/flame/candle = 5) + +/obj/item/weapon/storage/fancy/whitecandle_box + name = "white candle pack" + desc = "A pack of white candles." + icon = 'icons/obj/candle.dmi' + icon_state = "whitecandlebox5" + icon_type = "whitecandle" + item_state = "whitecandlebox5" + throwforce = 2 + slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_TINY * 5 + can_hold = list(/obj/item/weapon/flame/candle) + starts_with = list(/obj/item/weapon/flame/candle/white = 5) + +/obj/item/weapon/storage/fancy/blackcandle_box + name = "black candle pack" + desc = "A pack of black candles." + icon = 'icons/obj/candle.dmi' + icon_state = "blackcandlebox5" + icon_type = "blackcandle" + item_state = "blackcandlebox5" + throwforce = 2 + slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_TINY * 5 + can_hold = list(/obj/item/weapon/flame/candle) + starts_with = list(/obj/item/weapon/flame/candle/black = 5) + + +/* + * Crayon Box + */ +/obj/item/weapon/storage/fancy/crayons + name = "box of crayons" + desc = "A box of crayons for all your rune drawing needs." + icon = 'icons/obj/crayons.dmi' + icon_state = "crayonbox" + w_class = ITEMSIZE_SMALL + icon_type = "crayon" + can_hold = list( + /obj/item/weapon/pen/crayon + ) + starts_with = list( + /obj/item/weapon/pen/crayon/red, + /obj/item/weapon/pen/crayon/orange, + /obj/item/weapon/pen/crayon/yellow, + /obj/item/weapon/pen/crayon/green, + /obj/item/weapon/pen/crayon/blue, + /obj/item/weapon/pen/crayon/purple + ) + +/obj/item/weapon/storage/fancy/crayons/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/storage/fancy/crayons/update_icon() + var/mutable_appearance/ma = new(src) + ma.cut_overlays() + for(var/obj/item/weapon/pen/crayon/crayon in contents) + add_overlay(image('icons/obj/crayons.dmi',crayon.colourName)) + appearance = ma + +/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/pen/crayon)) + switch(W:colourName) + if("mime") + to_chat(user, "This crayon is too sad to be contained in this box.") + return + if("rainbow") + to_chat(user, "This crayon is too powerful to be contained in this box.") + return + ..() + +/obj/item/weapon/storage/fancy/markers + name = "box of markers" + desc = "A very professional looking box of permanent markers." + icon = 'icons/obj/crayons.dmi' + icon_state = "markerbox" + w_class = ITEMSIZE_SMALL + icon_type = "marker" + can_hold = list( + /obj/item/weapon/pen/crayon/marker + ) + starts_with = list( + /obj/item/weapon/pen/crayon/marker/black, + /obj/item/weapon/pen/crayon/marker/red, + /obj/item/weapon/pen/crayon/marker/orange, + /obj/item/weapon/pen/crayon/marker/yellow, + /obj/item/weapon/pen/crayon/marker/green, + /obj/item/weapon/pen/crayon/marker/blue, + /obj/item/weapon/pen/crayon/marker/purple + ) + +/obj/item/weapon/storage/fancy/markers/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/storage/fancy/markers/update_icon() + var/mutable_appearance/ma = new(src) + ma.cut_overlays() + for(var/obj/item/weapon/pen/crayon/marker/marker in contents) + ma.add_overlay(image('icons/obj/crayons.dmi',"m"+marker.colourName)) + appearance = ma + +/obj/item/weapon/storage/fancy/markers/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/pen/crayon/marker)) + switch(W:colourName) + if("mime") + to_chat(user, "This marker is too depressing to be contained in this box.") + return + if("rainbow") + to_chat(user, "This marker is too childish to be contained in this box.") + return + ..() + +/* + * Cracker Pack + */ +/obj/item/weapon/storage/fancy/crackers + name = "\improper Getmore Crackers" + icon = 'icons/obj/food.dmi' + icon_state = "crackerbox" + icon_type = "cracker" + max_storage_space = ITEMSIZE_COST_TINY * 6 + max_w_class = ITEMSIZE_TINY + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/cracker) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/cracker = 6) + +/* + * Cigarette Pack + */ +/obj/item/weapon/storage/fancy/cigarettes + name = "\improper pack of Trans-Stellar Duty-frees" + desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets." + description_fluff = "The Trans-Stellar Duty-Free Cigarette Company was created as an imprint of NanoTrasen. They are the most boring, tasteless, dry cigarettes on the market, but due to just how unremarkable (not to mention cheap to produce) they are, they sold in vending machines in almost every corner of the galaxy." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cigpacket" + item_state_slots = list(slot_r_hand_str = "cigpacket", slot_l_hand_str = "cigpacket") + w_class = ITEMSIZE_TINY + throwforce = 2 + slot_flags = SLOT_BELT + storage_slots = 6 + can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/trash/cigbutt) + icon_type = "cigarette" + starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 6) + var/brand = "\improper Trans-Stellar Duty-free" + +/obj/item/weapon/storage/fancy/cigarettes/Initialize() + . = ..() + flags |= NOREACT + create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one + flags |= OPENCONTAINER + if(brand) + for(var/obj/item/clothing/mask/smokable/cigarette/C in src) + C.brand = brand + C.desc += " This one is \a [brand]." + +/obj/item/weapon/storage/fancy/cigarettes/New() + if(!open_state) + open_state = "[initial(icon_state)]_open" + if(!closed_state) + closed_state = "[initial(icon_state)]" + ..() + +/obj/item/weapon/storage/fancy/cigarettes/update_icon() + cut_overlays() + if(open) + icon_state = open_state + if(contents.len >= 1) + add_overlay("cig[contents.len]") + else + icon_state = closed_state + +/obj/item/weapon/storage/fancy/cigarettes/open(mob/user as mob) + if(open) + return + open = TRUE + if(contents.len == 0) + icon_state = "[initial(icon_state)]_empty" + else + update_icon() + ..() + +/obj/item/weapon/storage/fancy/cigarettes/close(mob/user as mob) + open = FALSE + if(contents.len == 0) + icon_state = "[initial(icon_state)]_empty" + else + update_icon() + ..() + +/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location) + // Don't try to transfer reagents to lighters + if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) + var/obj/item/clothing/mask/smokable/cigarette/C = W + reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) + return ..() + +/obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(M == user && user.zone_sel.selecting == O_MOUTH) + // Find ourselves a cig. Note that we could be full of lighters. + var/obj/item/clothing/mask/smokable/cigarette/cig = locate() in src + + if(cig == null) + to_chat(user, "Looks like the packet is out of cigarettes.") + return + + // Instead of running equip_to_slot_if_possible() we check here first, + // to avoid dousing cig with reagents if we're not going to equip it + if(!cig.mob_can_equip(user, slot_wear_mask)) + return + + // We call remove_from_storage first to manage the reagent transfer and + // UI updates. + remove_from_storage(cig, null) + user.equip_to_slot(cig, slot_wear_mask) + + reagents.maximum_volume = 15 * contents.len + to_chat(user, "You take a cigarette out of the pack.") + update_icon() + else + ..() + +/obj/item/weapon/storage/fancy/cigarettes/dromedaryco + name = "\improper DromedaryCo packet" + desc = "A packet of six Earth-export DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"" + description_fluff = "DromedaryCo is one of Sol's oldest cigarette brands, and takes pride in having sourced tobcacco from the same Indian plantations since 2044. Popular with those willing to pay extra for a little nostalgia." + icon_state = "Dpacket" + brand = "\improper Dromedary Co. cigarette" + +/obj/item/weapon/storage/fancy/cigarettes/killthroat + name = "\improper AcmeCo packet" + desc = "A packet of six AcmeCo cigarettes. For those who want to obtain a record for the most cancerous tumors on a budget." + description_fluff = "Available anywhere people breathe and want to breathe less, AcmeCo is the cheapest, most widespread cigarette brand in the galaxy. They taste like trash, but when you're keeping them inside your jumpsuit on a 16 hour shift, you're probably not too concerned with flavour." + icon_state = "Apacket" + brand = "\improper Acme Co. cigarette" + +/obj/item/weapon/storage/fancy/cigarettes/luckystars + name = "\improper pack of Lucky Stars" + desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head." + description_fluff = "Lucky Stars are some of the most prolific advertisers in the business, with Gilthari Exports plastering the name and slogan on everything from workplace safety videos to racing bikes. 'Feel the gentle warmth of your Lucky Star'." + icon_state = "LSpacket" + brand = "\improper Lucky Star" + +/obj/item/weapon/storage/fancy/cigarettes/jerichos + name = "\improper pack of Jerichos" + desc = "Typically seen dangling from the lips of Fleet veterans and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs." + description_fluff = "The Jericho brand has carefully cultivated its 'rugged' image ever since its completely accidental association with the SolGov-Hegemony war due to their sizable corporate presence in the region. Prior to the war, Jerichos were considered the realm of drunks and sad divorcees." + icon_state = "Jpacket" + brand = "\improper Jericho" + +/obj/item/weapon/storage/fancy/cigarettes/menthols + name = "\improper pack of Temperamento Menthols" + desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of science vessel crews. Hardly anyone knows they make 'em in non-menthol!" + description_fluff = "Temperamento Menthols are a product of the Aether Atmospherics and Recycling company, and the 'smooth' menthol taste is rumoured to be the chemical by-product of some far more profitable industrial synthesis." + icon_state = "TMpacket" + brand = "\improper Temperamento Menthol" + +/obj/item/weapon/storage/fancy/cigarettes/carcinomas + name = "\improper pack of Carcinoma Angels" + desc = "This previously unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too." + description_fluff = "The bitter taste of a Carcinoma Angel is considered desirable by many equally bitter wash-ups who consider themselves to be 'hard-boiled'. The smell is practically inseparable from urban security offices, and old men with exonet radio shows." + brand = "\improper Carcinoma Angel" + +/obj/item/weapon/storage/fancy/cigarettes/professionals + name = "\improper pack of Professional 120s" + desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They are, however, very good quality." + description_fluff = "Grown and rolled in a meticulously maintained biosphere orbitting Love, P120 tobacco is marketed as 'probably the best in the galaxy'. The premium price point, and the fact that the vast majority of consumers couldn't really tell the difference between this and the next leading brand." + icon_state = "P100packet" + brand = "\improper Professional 120" + +/* + * Cigar Box + */ +/obj/item/weapon/storage/fancy/cigar + name = "cigar case" + desc = "A case for holding your cigars when you are not smoking them." + description_fluff = "The tasteful stained palm case tells you that these 'Palma Grande' premium \ + cigars are only sold on the luxury cruises and resorts of Oasis, though ten separate companies \ + produce them for that purpose galaxy-wide. The standard is however very high." + icon_state = "cigarcase" + icon = 'icons/obj/cigarettes.dmi' + w_class = ITEMSIZE_TINY + throwforce = 2 + slot_flags = SLOT_BELT + storage_slots = 5 + can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/trash/cigbutt/cigarbutt) + icon_type = "cigar" + starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 5) + +/obj/item/weapon/storage/fancy/cigar/Initialize() + . = ..() + flags |= NOREACT + create_reagents(15 * storage_slots) + +/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location) + var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W + if(!istype(C)) return + reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) + return ..() + +/obj/item/weapon/storage/fancy/cigar/New() + if(!open_state) + open_state = "[initial(icon_state)]0" + if(!closed_state) + closed_state = "[initial(icon_state)]" + ..() + +/obj/item/weapon/storage/fancy/cigar/update_icon() + cut_overlays() + if(open) + icon_state = open_state + if(contents.len >= 1) + add_overlay("[initial(icon_state)][contents.len]") + else + icon_state = closed_state + +/obj/item/weapon/storage/fancy/cigar/open(mob/user as mob) + if(open) + return + open = TRUE + update_icon() + ..() + +/obj/item/weapon/storage/fancy/cigar/close(mob/user as mob) + open = FALSE + update_icon() + ..() + +/obj/item/weapon/storage/fancy/cigar/choiba + name = "/improper Choiba cigar case" + desc = "A fancy case for holding your cigars when you are not smoking them." + description_fluff = "The exquisite wooden case bears the markings of the \ + Choiba cigar company based out of Cuba. The perfectly humidized case keeps \ + the companies signature Cigars in premium condidtion even when traveling \ + long distances within a vacuume. The custom case itself can sell for quite \ + a lot in some places." + icon_state = "cohibacase" + icon = 'icons/obj/cigarettes.dmi' + icon_type = "cigar" + starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 5) + +/obj/item/weapon/storage/fancy/cigar/havana + name = "\improper Havana cigar case" + desc = "A fancy case for holding your cigars when you are not smoking them." + icon_state = "havanacase" + icon = 'icons/obj/cigarettes.dmi' + icon_type = "cigar" + starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar/havana = 5) + +/* + * Tobacco Bits + */ +/obj/item/weapon/storage/rollingpapers + name = "rolling paper pack" + desc = "A small cardboard pack containing several folded rolling papers." + icon_state = "paperbox" + icon = 'icons/obj/cigarettes.dmi' + w_class = ITEMSIZE_TINY + throwforce = 2 + slot_flags = SLOT_BELT + storage_slots = 14 + can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper) + starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper = 14) + +/obj/item/weapon/storage/rollingpapers/blunt + name = "blunt wrap pack" + desc = "A small cardboard pack containing several folded blunt wraps." + icon_state = "bluntbox" + storage_slots = 7 + can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt) + starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt = 7) + +/* + * Vial Box + */ +/obj/item/weapon/storage/fancy/vials + icon = 'icons/obj/vialbox.dmi' + icon_state = "vialbox6" + icon_type = "vial" + name = "vial storage box" + desc = "A helpful rack to hold test tubes." + storage_slots = 6 + can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) + starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker/vial = 6) + +/obj/item/weapon/storage/lockbox/vials + name = "secure vial storage box" + desc = "A locked box for keeping things away from children." + icon = 'icons/obj/vialbox.dmi' + icon_state = "vialbox0" + item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") + max_w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) + max_storage_space = ITEMSIZE_COST_SMALL * 6 //The sum of the w_classes of all the items in this storage item. + storage_slots = 6 + req_access = list(access_virology) + +/obj/item/weapon/storage/lockbox/vials/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0) + var/total_contents = contents.len - itemremoved + icon_state = "vialbox[total_contents]" + cut_overlays() + if (!broken) + add_overlay("led[locked]") + if(locked) + add_overlay("cover") + else + add_overlay("ledb") + +/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + update_icon() + +/* + * Box of Chocolates + */ +/obj/item/weapon/storage/fancy/heartbox + icon_state = "heartbox" + name = "box of chocolates" + icon_type = "chocolate" + + var/startswith = 6 + max_storage_space = ITEMSIZE_COST_SMALL * 6 + can_hold = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle + ) + starts_with = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, + /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle + ) + +/obj/item/weapon/storage/fancy/heartbox/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/storage/fancy/heartbox/update_icon(var/itemremoved = 0) + if (contents.len == 0) + icon_state = "heartbox_empty" diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 2d19634aaf..ff6cfafe7c 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -1,305 +1,305 @@ -/* First aid storage - * Contains: - * First Aid Kits - * Pill Bottles - */ - -/* - * First Aid Kits - */ -/obj/item/weapon/storage/firstaid - name = "first aid kit" - desc = "It's an emergency medical kit for those serious boo-boos." - icon = 'icons/obj/storage.dmi' - icon_state = "firstaid" - throw_speed = 2 - throw_range = 8 - max_storage_space = ITEMSIZE_COST_SMALL * 7 // 14 - var/list/icon_variety - drop_sound = 'sound/items/drop/cardboardbox.ogg' - pickup_sound = 'sound/items/pickup/cardboardbox.ogg' - -/obj/item/weapon/storage/firstaid/Initialize() - . = ..() - if(icon_variety) - icon_state = pick(icon_variety) - icon_variety = null - -/obj/item/weapon/storage/firstaid/fire - name = "fire first aid kit" - desc = "It's an emergency medical kit for when the toxins lab spontaneously burns down." - icon_state = "ointment" - item_state_slots = list(slot_r_hand_str = "firstaid-ointment", slot_l_hand_str = "firstaid-ointment") - //icon_variety = list("ointment","firefirstaid") //VOREStation Removal - starts_with = list( - /obj/item/device/healthanalyzer, - /obj/item/weapon/reagent_containers/hypospray/autoinjector, - /obj/item/stack/medical/ointment, - /obj/item/stack/medical/ointment, - /obj/item/weapon/reagent_containers/pill/kelotane, - /obj/item/weapon/reagent_containers/pill/kelotane, - /obj/item/weapon/reagent_containers/pill/kelotane - ) - -/obj/item/weapon/storage/firstaid/regular - icon_state = "firstaid" - starts_with = list( - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/ointment, - /obj/item/stack/medical/ointment, - /obj/item/device/healthanalyzer, - /obj/item/weapon/reagent_containers/hypospray/autoinjector - ) - -/obj/item/weapon/storage/firstaid/toxin - name = "poison first aid kit" //IRL the term used would be poison first aid kit. - desc = "Used to treat when one has a high amount of toxins in their body." - icon_state = "antitoxin" - item_state_slots = list(slot_r_hand_str = "firstaid-toxin", slot_l_hand_str = "firstaid-toxin") - //icon_variety = list("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") //VOREStation Removal - starts_with = list( - /obj/item/weapon/reagent_containers/syringe/antitoxin, - /obj/item/weapon/reagent_containers/syringe/antitoxin, - /obj/item/weapon/reagent_containers/syringe/antitoxin, - /obj/item/weapon/reagent_containers/pill/antitox, - /obj/item/weapon/reagent_containers/pill/antitox, - /obj/item/weapon/reagent_containers/pill/antitox, - /obj/item/device/healthanalyzer - ) - -/obj/item/weapon/storage/firstaid/o2 - name = "oxygen deprivation first aid kit" - desc = "A box full of oxygen goodies." - icon_state = "o2" - item_state_slots = list(slot_r_hand_str = "firstaid-o2", slot_l_hand_str = "firstaid-o2") - starts_with = list( - /obj/item/weapon/reagent_containers/pill/dexalin, - /obj/item/weapon/reagent_containers/pill/dexalin, - /obj/item/weapon/reagent_containers/pill/dexalin, - /obj/item/weapon/reagent_containers/pill/dexalin, - /obj/item/weapon/reagent_containers/hypospray/autoinjector, - /obj/item/weapon/reagent_containers/syringe/inaprovaline, - /obj/item/device/healthanalyzer - ) - -/obj/item/weapon/storage/firstaid/adv - name = "advanced first aid kit" - desc = "Contains advanced medical treatments, for serious boo-boos." - icon_state = "advfirstaid" - item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced") - starts_with = list( - /obj/item/weapon/reagent_containers/hypospray/autoinjector, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/splint - ) - -/obj/item/weapon/storage/firstaid/combat - name = "combat medical kit" - desc = "Contains advanced medical treatments." - icon_state = "bezerk" - item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced") - starts_with = list( - /obj/item/weapon/storage/pill_bottle/bicaridine, - /obj/item/weapon/storage/pill_bottle/dermaline, - /obj/item/weapon/storage/pill_bottle/dexalin_plus, - /obj/item/weapon/storage/pill_bottle/dylovene, - /obj/item/weapon/storage/pill_bottle/tramadol, - /obj/item/weapon/storage/pill_bottle/spaceacillin, - /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, - /obj/item/stack/medical/splint, - /obj/item/device/healthanalyzer/advanced - ) - -/obj/item/weapon/storage/firstaid/surgery - name = "surgery kit" - desc = "Contains tools for surgery. Has precise foam fitting for safe transport and automatically sterilizes the content between uses." - icon = 'icons/obj/storage.dmi' // VOREStation edit - icon_state = "surgerykit" - item_state = "firstaid-surgery" - max_w_class = ITEMSIZE_NORMAL - - can_hold = list( - /obj/item/weapon/surgical/bonesetter, - /obj/item/weapon/surgical/cautery, - /obj/item/weapon/surgical/circular_saw, - /obj/item/weapon/surgical/hemostat, - /obj/item/weapon/surgical/retractor, - /obj/item/weapon/surgical/scalpel, - /obj/item/weapon/surgical/surgicaldrill, - /obj/item/weapon/surgical/bonegel, - /obj/item/weapon/surgical/FixOVein, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/nanopaste, - /obj/item/device/healthanalyzer/advanced, - /obj/item/weapon/autopsy_scanner - ) - - starts_with = list( - /obj/item/weapon/surgical/bonesetter, - /obj/item/weapon/surgical/cautery, - /obj/item/weapon/surgical/circular_saw, - /obj/item/weapon/surgical/hemostat, - /obj/item/weapon/surgical/retractor, - /obj/item/weapon/surgical/scalpel, - /obj/item/weapon/surgical/surgicaldrill, - /obj/item/weapon/surgical/bonegel, - /obj/item/weapon/surgical/FixOVein, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/device/healthanalyzer/advanced, - /obj/item/weapon/autopsy_scanner - ) - -/obj/item/weapon/storage/firstaid/clotting - name = "clotting kit" - desc = "Contains chemicals to stop bleeding." - max_storage_space = ITEMSIZE_COST_SMALL * 7 - starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting = 8) - -/obj/item/weapon/storage/firstaid/bonemed - name = "bone repair kit" - desc = "Contains chemicals to mend broken bones." - max_storage_space = ITEMSIZE_COST_SMALL * 7 - starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed = 8) - -/* - * Pill Bottles - */ -/obj/item/weapon/storage/pill_bottle - name = "pill bottle" - desc = "It's an airtight container for storing medication." - icon_state = "pill_canister" - icon = 'icons/obj/chemical.dmi' - drop_sound = 'sound/items/drop/pillbottle.ogg' - pickup_sound = 'sound/items/pickup/pillbottle.ogg' - item_state_slots = list(slot_r_hand_str = "contsolid", slot_l_hand_str = "contsolid") - w_class = ITEMSIZE_SMALL - can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) - allow_quick_gather = 1 - allow_quick_empty = 1 - use_to_pickup = TRUE - use_sound = 'sound/items/storage/pillbottle.ogg' - max_storage_space = ITEMSIZE_COST_TINY * 14 - max_w_class = ITEMSIZE_TINY - var/wrapper_color - var/label - - var/label_text = "" - var/base_name = " " - var/base_desc = " " - -/obj/item/weapon/storage/pill_bottle/Initialize() - . = ..() - base_name = name - base_desc = desc - update_icon() - -/obj/item/weapon/storage/pill_bottle/update_icon() - cut_overlays() - if(wrapper_color) - var/image/I = image(icon, "pillbottle_wrap") - I.color = wrapper_color - add_overlay(I) - -/obj/item/weapon/storage/pill_bottle/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN) - if(length(tmp_label) > 50) - to_chat(user, "The label can be at most 50 characters long.") - else if(length(tmp_label) > 10) - to_chat(user, "You set the label.") - label_text = tmp_label - update_name_label() - else - to_chat(user, "You set the label to \"[tmp_label]\".") - label_text = tmp_label - update_name_label() - else - ..() - -/obj/item/weapon/storage/pill_bottle/proc/update_name_label() - if(!label_text) - name = base_name - desc = base_desc - return - else if(length(label_text) > 10) - var/short_label_text = copytext(label_text, 1, 11) - name = "[base_name] ([short_label_text]...)" - else - name = "[base_name] ([label_text])" - desc = "[base_desc] It is labeled \"[label_text]\"." - -/obj/item/weapon/storage/pill_bottle/antitox - name = "pill bottle (Dylovene)" - desc = "Contains pills used to counter toxins." - starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7) - wrapper_color = COLOR_GREEN - -/obj/item/weapon/storage/pill_bottle/bicaridine - name = "pill bottle (Bicaridine)" - desc = "Contains pills used to stabilize the severely injured." - starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7) - wrapper_color = COLOR_MAROON - -/obj/item/weapon/storage/pill_bottle/dexalin_plus - name = "pill bottle (Dexalin Plus)" - desc = "Contains pills used to treat extreme cases of oxygen deprivation." - starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7) - wrapper_color = "#3366cc" - -/obj/item/weapon/storage/pill_bottle/dermaline - name = "pill bottle (Dermaline)" - desc = "Contains pills used to treat burn wounds." - starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7) - wrapper_color = "#e8d131" - -/obj/item/weapon/storage/pill_bottle/dylovene - name = "pill bottle (Dylovene)" - desc = "Contains pills used to treat toxic substances in the blood." - starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7) - wrapper_color = COLOR_GREEN - -/obj/item/weapon/storage/pill_bottle/inaprovaline - name = "pill bottle (Inaprovaline)" - desc = "Contains pills used to stabilize patients." - starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7) - wrapper_color = COLOR_PALE_BLUE_GRAY - -/obj/item/weapon/storage/pill_bottle/kelotane - name = "pill bottle (Kelotane)" - desc = "Contains pills used to treat burns." - starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7) - wrapper_color = "#ec8b2f" - -/obj/item/weapon/storage/pill_bottle/spaceacillin - name = "pill bottle (Spaceacillin)" - desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." - starts_with = list(/obj/item/weapon/reagent_containers/pill/spaceacillin = 7) - wrapper_color = COLOR_PALE_GREEN_GRAY - -/obj/item/weapon/storage/pill_bottle/tramadol - name = "pill bottle (Tramadol)" - desc = "Contains pills used to relieve pain." - starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7) - wrapper_color = COLOR_PURPLE_GRAY - -/obj/item/weapon/storage/pill_bottle/citalopram - name = "pill bottle (Citalopram)" - desc = "Contains pills used to stabilize a patient's mood." - starts_with = list(/obj/item/weapon/reagent_containers/pill/citalopram = 7) - wrapper_color = COLOR_GRAY - -/obj/item/weapon/storage/pill_bottle/carbon - name = "pill bottle (Carbon)" - desc = "Contains pills used to neutralise chemicals in the stomach." - starts_with = list(/obj/item/weapon/reagent_containers/pill/carbon = 7) - -/obj/item/weapon/storage/pill_bottle/iron - name = "pill bottle (Iron)" - desc = "Contains pills used to aid in blood regeneration." - starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 7) +/* First aid storage + * Contains: + * First Aid Kits + * Pill Bottles + */ + +/* + * First Aid Kits + */ +/obj/item/weapon/storage/firstaid + name = "first aid kit" + desc = "It's an emergency medical kit for those serious boo-boos." + icon = 'icons/obj/storage.dmi' + icon_state = "firstaid" + throw_speed = 2 + throw_range = 8 + max_storage_space = ITEMSIZE_COST_SMALL * 7 // 14 + var/list/icon_variety + drop_sound = 'sound/items/drop/cardboardbox.ogg' + pickup_sound = 'sound/items/pickup/cardboardbox.ogg' + +/obj/item/weapon/storage/firstaid/Initialize() + . = ..() + if(icon_variety) + icon_state = pick(icon_variety) + icon_variety = null + +/obj/item/weapon/storage/firstaid/fire + name = "fire first aid kit" + desc = "It's an emergency medical kit for when the toxins lab spontaneously burns down." + icon_state = "ointment" + item_state_slots = list(slot_r_hand_str = "firstaid-ointment", slot_l_hand_str = "firstaid-ointment") + //icon_variety = list("ointment","firefirstaid") //VOREStation Removal + starts_with = list( + /obj/item/device/healthanalyzer, + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/stack/medical/ointment, + /obj/item/stack/medical/ointment, + /obj/item/weapon/reagent_containers/pill/kelotane, + /obj/item/weapon/reagent_containers/pill/kelotane, + /obj/item/weapon/reagent_containers/pill/kelotane + ) + +/obj/item/weapon/storage/firstaid/regular + icon_state = "firstaid" + starts_with = list( + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/ointment, + /obj/item/stack/medical/ointment, + /obj/item/device/healthanalyzer, + /obj/item/weapon/reagent_containers/hypospray/autoinjector + ) + +/obj/item/weapon/storage/firstaid/toxin + name = "poison first aid kit" //IRL the term used would be poison first aid kit. + desc = "Used to treat when one has a high amount of toxins in their body." + icon_state = "antitoxin" + item_state_slots = list(slot_r_hand_str = "firstaid-toxin", slot_l_hand_str = "firstaid-toxin") + //icon_variety = list("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") //VOREStation Removal + starts_with = list( + /obj/item/weapon/reagent_containers/syringe/antitoxin, + /obj/item/weapon/reagent_containers/syringe/antitoxin, + /obj/item/weapon/reagent_containers/syringe/antitoxin, + /obj/item/weapon/reagent_containers/pill/antitox, + /obj/item/weapon/reagent_containers/pill/antitox, + /obj/item/weapon/reagent_containers/pill/antitox, + /obj/item/device/healthanalyzer + ) + +/obj/item/weapon/storage/firstaid/o2 + name = "oxygen deprivation first aid kit" + desc = "A box full of oxygen goodies." + icon_state = "o2" + item_state_slots = list(slot_r_hand_str = "firstaid-o2", slot_l_hand_str = "firstaid-o2") + starts_with = list( + /obj/item/weapon/reagent_containers/pill/dexalin, + /obj/item/weapon/reagent_containers/pill/dexalin, + /obj/item/weapon/reagent_containers/pill/dexalin, + /obj/item/weapon/reagent_containers/pill/dexalin, + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/weapon/reagent_containers/syringe/inaprovaline, + /obj/item/device/healthanalyzer + ) + +/obj/item/weapon/storage/firstaid/adv + name = "advanced first aid kit" + desc = "Contains advanced medical treatments, for serious boo-boos." + icon_state = "advfirstaid" + item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced") + starts_with = list( + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/medical/advanced/ointment, + /obj/item/stack/medical/advanced/ointment, + /obj/item/stack/medical/splint + ) + +/obj/item/weapon/storage/firstaid/combat + name = "combat medical kit" + desc = "Contains advanced medical treatments." + icon_state = "bezerk" + item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced") + starts_with = list( + /obj/item/weapon/storage/pill_bottle/bicaridine, + /obj/item/weapon/storage/pill_bottle/dermaline, + /obj/item/weapon/storage/pill_bottle/dexalin_plus, + /obj/item/weapon/storage/pill_bottle/dylovene, + /obj/item/weapon/storage/pill_bottle/tramadol, + /obj/item/weapon/storage/pill_bottle/spaceacillin, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, + /obj/item/stack/medical/splint, + /obj/item/device/healthanalyzer/advanced + ) + +/obj/item/weapon/storage/firstaid/surgery + name = "surgery kit" + desc = "Contains tools for surgery. Has precise foam fitting for safe transport and automatically sterilizes the content between uses." + icon = 'icons/obj/storage.dmi' // VOREStation edit + icon_state = "surgerykit" + item_state = "firstaid-surgery" + max_w_class = ITEMSIZE_NORMAL + + can_hold = list( + /obj/item/weapon/surgical/bonesetter, + /obj/item/weapon/surgical/cautery, + /obj/item/weapon/surgical/circular_saw, + /obj/item/weapon/surgical/hemostat, + /obj/item/weapon/surgical/retractor, + /obj/item/weapon/surgical/scalpel, + /obj/item/weapon/surgical/surgicaldrill, + /obj/item/weapon/surgical/bonegel, + /obj/item/weapon/surgical/FixOVein, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/nanopaste, + /obj/item/device/healthanalyzer/advanced, + /obj/item/weapon/autopsy_scanner + ) + + starts_with = list( + /obj/item/weapon/surgical/bonesetter, + /obj/item/weapon/surgical/cautery, + /obj/item/weapon/surgical/circular_saw, + /obj/item/weapon/surgical/hemostat, + /obj/item/weapon/surgical/retractor, + /obj/item/weapon/surgical/scalpel, + /obj/item/weapon/surgical/surgicaldrill, + /obj/item/weapon/surgical/bonegel, + /obj/item/weapon/surgical/FixOVein, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/device/healthanalyzer/advanced, + /obj/item/weapon/autopsy_scanner + ) + +/obj/item/weapon/storage/firstaid/clotting + name = "clotting kit" + desc = "Contains chemicals to stop bleeding." + max_storage_space = ITEMSIZE_COST_SMALL * 7 + starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting = 8) + +/obj/item/weapon/storage/firstaid/bonemed + name = "bone repair kit" + desc = "Contains chemicals to mend broken bones." + max_storage_space = ITEMSIZE_COST_SMALL * 7 + starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed = 8) + +/* + * Pill Bottles + */ +/obj/item/weapon/storage/pill_bottle + name = "pill bottle" + desc = "It's an airtight container for storing medication." + icon_state = "pill_canister" + icon = 'icons/obj/chemical.dmi' + drop_sound = 'sound/items/drop/pillbottle.ogg' + pickup_sound = 'sound/items/pickup/pillbottle.ogg' + item_state_slots = list(slot_r_hand_str = "contsolid", slot_l_hand_str = "contsolid") + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) + allow_quick_gather = 1 + allow_quick_empty = 1 + use_to_pickup = TRUE + use_sound = 'sound/items/storage/pillbottle.ogg' + max_storage_space = ITEMSIZE_COST_TINY * 14 + max_w_class = ITEMSIZE_TINY + var/wrapper_color + var/label + + var/label_text = "" + var/base_name = " " + var/base_desc = " " + +/obj/item/weapon/storage/pill_bottle/Initialize() + . = ..() + base_name = name + base_desc = desc + update_icon() + +/obj/item/weapon/storage/pill_bottle/update_icon() + cut_overlays() + if(wrapper_color) + var/image/I = image(icon, "pillbottle_wrap") + I.color = wrapper_color + add_overlay(I) + +/obj/item/weapon/storage/pill_bottle/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN) + if(length(tmp_label) > 50) + to_chat(user, "The label can be at most 50 characters long.") + else if(length(tmp_label) > 10) + to_chat(user, "You set the label.") + label_text = tmp_label + update_name_label() + else + to_chat(user, "You set the label to \"[tmp_label]\".") + label_text = tmp_label + update_name_label() + else + ..() + +/obj/item/weapon/storage/pill_bottle/proc/update_name_label() + if(!label_text) + name = base_name + desc = base_desc + return + else if(length(label_text) > 10) + var/short_label_text = copytext(label_text, 1, 11) + name = "[base_name] ([short_label_text]...)" + else + name = "[base_name] ([label_text])" + desc = "[base_desc] It is labeled \"[label_text]\"." + +/obj/item/weapon/storage/pill_bottle/antitox + name = "pill bottle (Dylovene)" + desc = "Contains pills used to counter toxins." + starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7) + wrapper_color = COLOR_GREEN + +/obj/item/weapon/storage/pill_bottle/bicaridine + name = "pill bottle (Bicaridine)" + desc = "Contains pills used to stabilize the severely injured." + starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7) + wrapper_color = COLOR_MAROON + +/obj/item/weapon/storage/pill_bottle/dexalin_plus + name = "pill bottle (Dexalin Plus)" + desc = "Contains pills used to treat extreme cases of oxygen deprivation." + starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7) + wrapper_color = "#3366cc" + +/obj/item/weapon/storage/pill_bottle/dermaline + name = "pill bottle (Dermaline)" + desc = "Contains pills used to treat burn wounds." + starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7) + wrapper_color = "#e8d131" + +/obj/item/weapon/storage/pill_bottle/dylovene + name = "pill bottle (Dylovene)" + desc = "Contains pills used to treat toxic substances in the blood." + starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7) + wrapper_color = COLOR_GREEN + +/obj/item/weapon/storage/pill_bottle/inaprovaline + name = "pill bottle (Inaprovaline)" + desc = "Contains pills used to stabilize patients." + starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7) + wrapper_color = COLOR_PALE_BLUE_GRAY + +/obj/item/weapon/storage/pill_bottle/kelotane + name = "pill bottle (Kelotane)" + desc = "Contains pills used to treat burns." + starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7) + wrapper_color = "#ec8b2f" + +/obj/item/weapon/storage/pill_bottle/spaceacillin + name = "pill bottle (Spaceacillin)" + desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." + starts_with = list(/obj/item/weapon/reagent_containers/pill/spaceacillin = 7) + wrapper_color = COLOR_PALE_GREEN_GRAY + +/obj/item/weapon/storage/pill_bottle/tramadol + name = "pill bottle (Tramadol)" + desc = "Contains pills used to relieve pain." + starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7) + wrapper_color = COLOR_PURPLE_GRAY + +/obj/item/weapon/storage/pill_bottle/citalopram + name = "pill bottle (Citalopram)" + desc = "Contains pills used to stabilize a patient's mood." + starts_with = list(/obj/item/weapon/reagent_containers/pill/citalopram = 7) + wrapper_color = COLOR_GRAY + +/obj/item/weapon/storage/pill_bottle/carbon + name = "pill bottle (Carbon)" + desc = "Contains pills used to neutralise chemicals in the stomach." + starts_with = list(/obj/item/weapon/reagent_containers/pill/carbon = 7) + +/obj/item/weapon/storage/pill_bottle/iron + name = "pill bottle (Iron)" + desc = "Contains pills used to aid in blood regeneration." + starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 7) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index b3fbc758b3..16db776bbc 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -1,104 +1,104 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/weapon/storage/lockbox - name = "lockbox" - desc = "A locked box." - icon_state = "lockbox+l" - item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_NORMAL * 4 //The sum of the w_classes of all the items in this storage item. - req_access = list(access_armory) - preserve_item = 1 - var/locked = 1 - var/broken = 0 - var/icon_locked = "lockbox+l" - var/icon_closed = "lockbox" - var/icon_broken = "lockbox+b" - - -/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/card/id)) - if(src.broken) - to_chat(user, "It appears to be broken.") - return - if(src.allowed(user)) - src.locked = !( src.locked ) - if(src.locked) - src.icon_state = src.icon_locked - to_chat(user, "You lock \the [src]!") - close_all() - return - else - src.icon_state = src.icon_closed - to_chat(user, "You unlock \the [src]!") - return - else - to_chat(user, "Access Denied") - else if(istype(W, /obj/item/weapon/melee/energy/blade)) - if(emag_act(INFINITY, user, W, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying.")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - if(!locked) - ..() - else - to_chat(user, "It's locked!") - return - - -/obj/item/weapon/storage/lockbox/show_to(mob/user as mob) - if(locked) - to_chat(user, "It's locked!") - else - ..() - return - -/obj/item/weapon/storage/lockbox/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") - if(!broken) - if(visual_feedback) - visual_feedback = "[visual_feedback]" - else - visual_feedback = "The locker has been sliced open by [user] with an electromagnetic card!" - if(audible_feedback) - audible_feedback = "[audible_feedback]" - else - audible_feedback = "You hear a faint electrical spark." - - broken = 1 - locked = 0 - desc = "It appears to be broken." - icon_state = src.icon_broken - visible_message(visual_feedback, audible_feedback) - return 1 - -/obj/item/weapon/storage/lockbox/loyalty - name = "lockbox of loyalty implants" - req_access = list(access_security) - starts_with = list( - /obj/item/weapon/implantcase/loyalty = 3, - /obj/item/weapon/implanter/loyalty - ) - -/obj/item/weapon/storage/lockbox/clusterbang - name = "lockbox of clusterbangs" - desc = "You have a bad feeling about opening this." - req_access = list(access_security) - starts_with = list(/obj/item/weapon/grenade/flashbang/clusterbang) - -/obj/item/weapon/storage/lockbox/medal - name = "lockbox of medals" - desc = "A lockbox filled with commemorative medals, it has the NanoTrasen logo stamped on it." - req_access = list(access_heads) - storage_slots = 7 - starts_with = list( - /obj/item/clothing/accessory/medal/conduct, - /obj/item/clothing/accessory/medal/bronze_heart, - /obj/item/clothing/accessory/medal/nobel_science, - /obj/item/clothing/accessory/medal/silver/valor, - /obj/item/clothing/accessory/medal/silver/security, - /obj/item/clothing/accessory/medal/gold/captain, - /obj/item/clothing/accessory/medal/gold/heroism - ) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/weapon/storage/lockbox + name = "lockbox" + desc = "A locked box." + icon_state = "lockbox+l" + item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 4 //The sum of the w_classes of all the items in this storage item. + req_access = list(access_armory) + preserve_item = 1 + var/locked = 1 + var/broken = 0 + var/icon_locked = "lockbox+l" + var/icon_closed = "lockbox" + var/icon_broken = "lockbox+b" + + +/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/card/id)) + if(src.broken) + to_chat(user, "It appears to be broken.") + return + if(src.allowed(user)) + src.locked = !( src.locked ) + if(src.locked) + src.icon_state = src.icon_locked + to_chat(user, "You lock \the [src]!") + close_all() + return + else + src.icon_state = src.icon_closed + to_chat(user, "You unlock \the [src]!") + return + else + to_chat(user, "Access Denied") + else if(istype(W, /obj/item/weapon/melee/energy/blade)) + if(emag_act(INFINITY, user, W, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying.")) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) + if(!locked) + ..() + else + to_chat(user, "It's locked!") + return + + +/obj/item/weapon/storage/lockbox/show_to(mob/user as mob) + if(locked) + to_chat(user, "It's locked!") + else + ..() + return + +/obj/item/weapon/storage/lockbox/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") + if(!broken) + if(visual_feedback) + visual_feedback = "[visual_feedback]" + else + visual_feedback = "The locker has been sliced open by [user] with an electromagnetic card!" + if(audible_feedback) + audible_feedback = "[audible_feedback]" + else + audible_feedback = "You hear a faint electrical spark." + + broken = 1 + locked = 0 + desc = "It appears to be broken." + icon_state = src.icon_broken + visible_message(visual_feedback, audible_feedback) + return 1 + +/obj/item/weapon/storage/lockbox/loyalty + name = "lockbox of loyalty implants" + req_access = list(access_security) + starts_with = list( + /obj/item/weapon/implantcase/loyalty = 3, + /obj/item/weapon/implanter/loyalty + ) + +/obj/item/weapon/storage/lockbox/clusterbang + name = "lockbox of clusterbangs" + desc = "You have a bad feeling about opening this." + req_access = list(access_security) + starts_with = list(/obj/item/weapon/grenade/flashbang/clusterbang) + +/obj/item/weapon/storage/lockbox/medal + name = "lockbox of medals" + desc = "A lockbox filled with commemorative medals, it has the NanoTrasen logo stamped on it." + req_access = list(access_heads) + storage_slots = 7 + starts_with = list( + /obj/item/clothing/accessory/medal/conduct, + /obj/item/clothing/accessory/medal/bronze_heart, + /obj/item/clothing/accessory/medal/nobel_science, + /obj/item/clothing/accessory/medal/silver/valor, + /obj/item/clothing/accessory/medal/silver/security, + /obj/item/clothing/accessory/medal/gold/captain, + /obj/item/clothing/accessory/medal/gold/heroism + ) diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 8b6384b9cb..70f70e8bcc 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -1,103 +1,103 @@ -/* - * Donut Box - */ - -var/list/random_weighted_donuts = list( - /obj/item/weapon/reagent_containers/food/snacks/donut/plain = 5, - /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 5, - /obj/item/weapon/reagent_containers/food/snacks/donut/pink = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/purple = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/green = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/beige = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/choc = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/blue = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/yellow = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/olive = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly = 4, - /obj/item/weapon/reagent_containers/food/snacks/donut/homer = 3, - /obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly = 3, - /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles = 3, - /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly = 3, - /obj/item/weapon/reagent_containers/food/snacks/donut/chaos = 1 -) - -/obj/item/weapon/storage/box/donut - icon = 'icons/obj/food_donuts.dmi' - icon_state = "donutbox" - name = "donut box" - desc = "A box that holds tasty donuts, if you're lucky." - center_of_mass = list("x" = 16,"y" = 9) - max_storage_space = ITEMSIZE_COST_SMALL * 6 - can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) - foldable = /obj/item/stack/material/cardboard - //starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6) - -/obj/item/weapon/storage/box/donut/Initialize() - if(!empty) - for(var/i in 1 to 6) - var/type_to_spawn = pickweight(random_weighted_donuts) - new type_to_spawn(src) - . = ..() - update_icon() - -/obj/item/weapon/storage/box/donut/update_icon() - cut_overlays() - var/x_offset = 0 - for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents) - var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state) - ma.pixel_x = x_offset - add_overlay(ma) - x_offset += 3 - -/obj/item/weapon/storage/box/donut/empty - empty = TRUE - -/obj/item/weapon/storage/box/wormcan - icon = 'icons/obj/food.dmi' - icon_state = "wormcan" - name = "can of worms" - desc = "You probably do want to open this can of worms." - max_storage_space = ITEMSIZE_COST_TINY * 6 - can_hold = list( - /obj/item/weapon/reagent_containers/food/snacks/wormsickly, - /obj/item/weapon/reagent_containers/food/snacks/worm, - /obj/item/weapon/reagent_containers/food/snacks/wormdeluxe - ) - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/worm = 6) - -/obj/item/weapon/storage/box/wormcan/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/storage/box/wormcan/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "wormcan_empty" - -/obj/item/weapon/storage/box/wormcan/sickly - icon_state = "wormcan_sickly" - name = "can of sickly worms" - desc = "You probably don't want to open this can of worms." - max_storage_space = ITEMSIZE_COST_TINY * 6 - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/wormsickly = 6) - -/obj/item/weapon/storage/box/wormcan/sickly/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "wormcan_empty_sickly" - -/obj/item/weapon/storage/box/wormcan/deluxe - icon_state = "wormcan_deluxe" - name = "can of deluxe worms" - desc = "You absolutely want to open this can of worms." - max_storage_space = ITEMSIZE_COST_TINY * 6 - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe = 6) - -/obj/item/weapon/storage/box/wormcan/deluxe/update_icon(var/itemremoved = 0) - if (contents.len == 0) +/* + * Donut Box + */ + +var/list/random_weighted_donuts = list( + /obj/item/weapon/reagent_containers/food/snacks/donut/plain = 5, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/green = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/chaos = 1 +) + +/obj/item/weapon/storage/box/donut + icon = 'icons/obj/food_donuts.dmi' + icon_state = "donutbox" + name = "donut box" + desc = "A box that holds tasty donuts, if you're lucky." + center_of_mass = list("x" = 16,"y" = 9) + max_storage_space = ITEMSIZE_COST_SMALL * 6 + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) + foldable = /obj/item/stack/material/cardboard + //starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6) + +/obj/item/weapon/storage/box/donut/Initialize() + if(!empty) + for(var/i in 1 to 6) + var/type_to_spawn = pickweight(random_weighted_donuts) + new type_to_spawn(src) + . = ..() + update_icon() + +/obj/item/weapon/storage/box/donut/update_icon() + cut_overlays() + var/x_offset = 0 + for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents) + var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state) + ma.pixel_x = x_offset + add_overlay(ma) + x_offset += 3 + +/obj/item/weapon/storage/box/donut/empty + empty = TRUE + +/obj/item/weapon/storage/box/wormcan + icon = 'icons/obj/food.dmi' + icon_state = "wormcan" + name = "can of worms" + desc = "You probably do want to open this can of worms." + max_storage_space = ITEMSIZE_COST_TINY * 6 + can_hold = list( + /obj/item/weapon/reagent_containers/food/snacks/wormsickly, + /obj/item/weapon/reagent_containers/food/snacks/worm, + /obj/item/weapon/reagent_containers/food/snacks/wormdeluxe + ) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/worm = 6) + +/obj/item/weapon/storage/box/wormcan/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/storage/box/wormcan/update_icon(var/itemremoved = 0) + if (contents.len == 0) + icon_state = "wormcan_empty" + +/obj/item/weapon/storage/box/wormcan/sickly + icon_state = "wormcan_sickly" + name = "can of sickly worms" + desc = "You probably don't want to open this can of worms." + max_storage_space = ITEMSIZE_COST_TINY * 6 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/wormsickly = 6) + +/obj/item/weapon/storage/box/wormcan/sickly/update_icon(var/itemremoved = 0) + if (contents.len == 0) + icon_state = "wormcan_empty_sickly" + +/obj/item/weapon/storage/box/wormcan/deluxe + icon_state = "wormcan_deluxe" + name = "can of deluxe worms" + desc = "You absolutely want to open this can of worms." + max_storage_space = ITEMSIZE_COST_TINY * 6 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe = 6) + +/obj/item/weapon/storage/box/wormcan/deluxe/update_icon(var/itemremoved = 0) + if (contents.len == 0) icon_state = "wormcan_empty_deluxe" \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index ce0e105f01..d7d9a8f6d4 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -1,209 +1,209 @@ -/* - * Absorbs /obj/item/weapon/secstorage. - * Reimplements it only slightly to use existing storage functionality. - * - * Contains: - * Secure Briefcase - * Wall Safe - */ - -// ----------------------------- -// Generic Item -// ----------------------------- -/obj/item/weapon/storage/secure - name = "secstorage" - var/icon_locking = "secureb" - var/icon_sparking = "securespark" - var/icon_opened = "secure0" - var/locked = 1 - var/code = "" - var/l_code = null - var/l_set = 0 - var/l_setshort = 0 - var/l_hacking = 0 - var/emagged = 0 - var/open = 0 - w_class = ITEMSIZE_NORMAL - max_w_class = ITEMSIZE_SMALL - max_storage_space = ITEMSIZE_SMALL * 7 - use_sound = 'sound/items/storage/briefcase.ogg' - -/obj/item/weapon/storage/secure/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "The service panel is [src.open ? "open" : "closed"]." - -/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/weapon/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - return - - if (W.has_tool_quality(TOOL_SCREWDRIVER)) - if (do_after(user, 20 * W.toolspeed)) - src.open =! src.open - playsound(src, W.usesound, 50, 1) - user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) - return - if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking)) - user.show_message("Now attempting to reset internal memory, please hold.", 1) - src.l_hacking = 1 - if (do_after(usr, 100)) - if (prob(40)) - src.l_setshort = 1 - src.l_set = 0 - src.code = "" - user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) - sleep(80) - src.l_setshort = 0 - src.l_hacking = 0 - else - user.show_message("Unable to reset internal memory.", 1) - src.l_hacking = 0 - else src.l_hacking = 0 - return - //At this point you have exhausted all the special things to do when locked - // ... but it's still locked. - return - - // -> storage/attackby() what with handle insertion, etc - ..() - - -/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location) - if (locked) - src.add_fingerprint(usr) - return - ..() - -/obj/item/weapon/storage/secure/AltClick(mob/user as mob) - if (isliving(user) && Adjacent(user) && (src.locked == 1)) - to_chat(user, "[src] is locked and cannot be opened!") - else if (isliving(user) && Adjacent(user) && (!src.locked)) - src.open(usr) - else - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - src.add_fingerprint(user) - return - -/obj/item/weapon/storage/secure/attack_self(mob/user as mob) - tgui_interact(user) - -/obj/item/weapon/storage/secure/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "SecureSafe", name) - ui.open() - -/obj/item/weapon/storage/secure/tgui_data(mob/user) - var/list/data = list() - data["locked"] = locked - data["code"] = code - data["emagged"] = emagged - data["l_setshort"] = l_setshort - data["l_set"] = l_set - return data - -/obj/item/weapon/storage/secure/tgui_act(action, params) - if(..()) - return TRUE - switch (action) - if("type") - var/digit = params["digit"] - if(digit == "E") - if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) - src.l_code = src.code - src.l_set = 1 - else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) - src.locked = 0 - cut_overlays() - add_overlay(icon_opened) - src.code = null - else - src.code = "ERROR" - else - if ((digit == "R") && (src.emagged == 0) && (!src.l_setshort)) - src.locked = 1 - cut_overlays() - src.code = null - src.close(usr) - else - src.code += text("[]", digit) - if (length(src.code) > 5) - src.code = "ERROR" - src.add_fingerprint(usr) - . = TRUE - return - -/obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) - if(!emagged) - emagged = 1 - src.add_overlay(icon_sparking) - sleep(6) - cut_overlays() - add_overlay(icon_locking) - locked = 0 - to_chat(user, (feedback ? feedback : "You short out the lock of \the [src].")) - return 1 - -// ----------------------------- -// Secure Briefcase -// ----------------------------- -/obj/item/weapon/storage/secure/briefcase - name = "secure briefcase" - icon = 'icons/obj/storage.dmi' - icon_state = "secure" - item_state_slots = list(slot_r_hand_str = "case", slot_l_hand_str = "case") - desc = "A large briefcase with a digital locking system." - force = 8.0 - throw_speed = 1 - throw_range = 4 - max_w_class = ITEMSIZE_NORMAL - w_class = ITEMSIZE_LARGE - max_storage_space = ITEMSIZE_COST_NORMAL * 4 - -/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob) - if ((src.loc == user) && (src.locked == 1)) - to_chat(user, "[src] is locked and cannot be opened!") - else if ((src.loc == user) && (!src.locked)) - src.open(usr) - else - ..() - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - src.add_fingerprint(user) - return - -// ----------------------------- -// Secure Safe -// ----------------------------- - -/obj/item/weapon/storage/secure/safe - name = "secure safe" - desc = "It doesn't seem all that secure. Oh well, it'll do." - icon = 'icons/obj/storage.dmi' - icon_state = "safe" - layer = ABOVE_WINDOW_LAYER - icon_opened = "safe0" - icon_locking = "safeb" - icon_sparking = "safespark" - force = 8.0 - w_class = ITEMSIZE_NO_CONTAINER - max_w_class = ITEMSIZE_LARGE // This was 8 previously... - anchored = TRUE - density = FALSE - cant_hold = list(/obj/item/weapon/storage/secure/briefcase) - starts_with = list( - /obj/item/weapon/paper, - /obj/item/weapon/pen - ) - -/obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob) - tgui_interact(user) +/* + * Absorbs /obj/item/weapon/secstorage. + * Reimplements it only slightly to use existing storage functionality. + * + * Contains: + * Secure Briefcase + * Wall Safe + */ + +// ----------------------------- +// Generic Item +// ----------------------------- +/obj/item/weapon/storage/secure + name = "secstorage" + var/icon_locking = "secureb" + var/icon_sparking = "securespark" + var/icon_opened = "secure0" + var/locked = 1 + var/code = "" + var/l_code = null + var/l_set = 0 + var/l_setshort = 0 + var/l_hacking = 0 + var/emagged = 0 + var/open = 0 + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_SMALL * 7 + use_sound = 'sound/items/storage/briefcase.ogg' + +/obj/item/weapon/storage/secure/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "The service panel is [src.open ? "open" : "closed"]." + +/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/weapon/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) + return + + if (W.has_tool_quality(TOOL_SCREWDRIVER)) + if (do_after(user, 20 * W.toolspeed)) + src.open =! src.open + playsound(src, W.usesound, 50, 1) + user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) + return + if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking)) + user.show_message("Now attempting to reset internal memory, please hold.", 1) + src.l_hacking = 1 + if (do_after(usr, 100)) + if (prob(40)) + src.l_setshort = 1 + src.l_set = 0 + src.code = "" + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) + sleep(80) + src.l_setshort = 0 + src.l_hacking = 0 + else + user.show_message("Unable to reset internal memory.", 1) + src.l_hacking = 0 + else src.l_hacking = 0 + return + //At this point you have exhausted all the special things to do when locked + // ... but it's still locked. + return + + // -> storage/attackby() what with handle insertion, etc + ..() + + +/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location) + if (locked) + src.add_fingerprint(usr) + return + ..() + +/obj/item/weapon/storage/secure/AltClick(mob/user as mob) + if (isliving(user) && Adjacent(user) && (src.locked == 1)) + to_chat(user, "[src] is locked and cannot be opened!") + else if (isliving(user) && Adjacent(user) && (!src.locked)) + src.open(usr) + else + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/secure/attack_self(mob/user as mob) + tgui_interact(user) + +/obj/item/weapon/storage/secure/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SecureSafe", name) + ui.open() + +/obj/item/weapon/storage/secure/tgui_data(mob/user) + var/list/data = list() + data["locked"] = locked + data["code"] = code + data["emagged"] = emagged + data["l_setshort"] = l_setshort + data["l_set"] = l_set + return data + +/obj/item/weapon/storage/secure/tgui_act(action, params) + if(..()) + return TRUE + switch (action) + if("type") + var/digit = params["digit"] + if(digit == "E") + if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) + src.l_code = src.code + src.l_set = 1 + else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) + src.locked = 0 + cut_overlays() + add_overlay(icon_opened) + src.code = null + else + src.code = "ERROR" + else + if ((digit == "R") && (src.emagged == 0) && (!src.l_setshort)) + src.locked = 1 + cut_overlays() + src.code = null + src.close(usr) + else + src.code += text("[]", digit) + if (length(src.code) > 5) + src.code = "ERROR" + src.add_fingerprint(usr) + . = TRUE + return + +/obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) + if(!emagged) + emagged = 1 + src.add_overlay(icon_sparking) + sleep(6) + cut_overlays() + add_overlay(icon_locking) + locked = 0 + to_chat(user, (feedback ? feedback : "You short out the lock of \the [src].")) + return 1 + +// ----------------------------- +// Secure Briefcase +// ----------------------------- +/obj/item/weapon/storage/secure/briefcase + name = "secure briefcase" + icon = 'icons/obj/storage.dmi' + icon_state = "secure" + item_state_slots = list(slot_r_hand_str = "case", slot_l_hand_str = "case") + desc = "A large briefcase with a digital locking system." + force = 8.0 + throw_speed = 1 + throw_range = 4 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_LARGE + max_storage_space = ITEMSIZE_COST_NORMAL * 4 + +/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob) + if ((src.loc == user) && (src.locked == 1)) + to_chat(user, "[src] is locked and cannot be opened!") + else if ((src.loc == user) && (!src.locked)) + src.open(usr) + else + ..() + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return + +// ----------------------------- +// Secure Safe +// ----------------------------- + +/obj/item/weapon/storage/secure/safe + name = "secure safe" + desc = "It doesn't seem all that secure. Oh well, it'll do." + icon = 'icons/obj/storage.dmi' + icon_state = "safe" + layer = ABOVE_WINDOW_LAYER + icon_opened = "safe0" + icon_locking = "safeb" + icon_sparking = "safespark" + force = 8.0 + w_class = ITEMSIZE_NO_CONTAINER + max_w_class = ITEMSIZE_LARGE // This was 8 previously... + anchored = TRUE + density = FALSE + cant_hold = list(/obj/item/weapon/storage/secure/briefcase) + starts_with = list( + /obj/item/weapon/paper, + /obj/item/weapon/pen + ) + +/obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob) + tgui_interact(user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 79c3073523..1baf1518af 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -1,911 +1,911 @@ -// To clarify: -// For use_to_pickup and allow_quick_gather functionality, -// see item/attackby() (/game/objects/items.dm) -// Do not remove this functionality without good reason, cough reagent_containers cough. -// -Sayu - - -/obj/item/weapon/storage - name = "storage" - icon = 'icons/obj/storage.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', - ) - w_class = ITEMSIZE_NORMAL - show_messages = 1 - matter = list(MAT_FIBERS = 50) //CHOMPAdd - - /// List of objects which this item can store (if set, it can't store anything else) - var/list/can_hold - /// List of objects which this item can't store (in effect only if can_hold isn't set) - var/list/cant_hold - /// List of mobs which are currently seeing the contents of this item's storage - var/list/is_seeing - - var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item. - var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. - - /// Boxes screen object for fixed-size storage (belts, etc) - var/obj/screen/storage/boxes = null - /// List of 'click catchers' for boxes for fixed-size storage - var/list/box_catchers = null - - /// For dynamic storage, the leftmost pixel column for the whole storage display. Most of the interesting effects are hung on this in vis_contents. - var/obj/screen/storage/storage_start = null - /// For dynamic storage, the majority of the width of the whole storage display. Decorative, but sized to the width appropriate to represent how much storage there is. - var/obj/screen/storage/storage_continue = null - /// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative. - var/obj/screen/storage/storage_end = null - - /// The "X" button at the far right of the storage - var/obj/screen/close/closer = null - - var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. - var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. - var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. - var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/use_sound = "rustle" //sound played when used. null for no sound. - var/list/starts_with //Things to spawn on the box on spawn - var/empty //Mapper override to spawn an empty version of a container that usually has stuff - /// If you can use this storage while in a pocket - var/pocketable = FALSE - -/obj/item/weapon/storage/Initialize() - . = ..() - - if(allow_quick_empty) - verbs += /obj/item/weapon/storage/verb/quick_empty - else - verbs -= /obj/item/weapon/storage/verb/quick_empty - - if(allow_quick_gather) - verbs += /obj/item/weapon/storage/verb/toggle_gathering_mode - else - verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode - - if(storage_slots) - src.boxes = new /obj/screen/storage( ) - src.boxes.name = "storage" - src.boxes.master = src - src.boxes.icon_state = "block" - src.boxes.screen_loc = "7,7 to 10,8" - else - src.storage_start = new /obj/screen/storage( ) - src.storage_start.name = "storage" - src.storage_start.master = src - src.storage_start.icon_state = "storage_start" - src.storage_start.screen_loc = "7,7 to 10,8" - - src.storage_continue = new /obj/screen/storage( ) - src.storage_continue.name = "storage" - src.storage_continue.master = src - src.storage_continue.icon_state = "storage_continue" - src.storage_continue.screen_loc = "7,7 to 10,8" - - src.storage_end = new /obj/screen/storage( ) - src.storage_end.name = "storage" - src.storage_end.master = src - src.storage_end.icon_state = "storage_end" - src.storage_end.screen_loc = "7,7 to 10,8" - - src.closer = new /obj/screen/close( ) - src.closer.master = src - src.closer.icon_state = "storage_close" - src.closer.hud_layerise() - orient2hud() - - if(LAZYLEN(starts_with) && !empty) - for(var/newtype in starts_with) - var/count = starts_with[newtype] || 1 //Could have left it blank. - while(count) - count-- - new newtype(src) - starts_with = null //Reduce list count. - update_icon() - - calibrate_size() - -/obj/item/weapon/storage/Destroy() - close_all() - clear_slot_catchers() - QDEL_NULL(boxes) - QDEL_NULL(storage_start) - QDEL_NULL(storage_continue) - QDEL_NULL(storage_end) - QDEL_NULL(closer) - - if(ismob(loc)) - var/mob/M = loc - M.remove_from_mob(src) - - . = ..() - -/obj/item/weapon/storage/MouseDrop(obj/over_object as obj) - if(!canremove) - return - - if (isliving(usr) || isobserver(usr)) - - if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why? - return - - if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block - src.open(usr) - return - - if (!( istype(over_object, /obj/screen) )) - return ..() - - //makes sure that the storage is equipped, so that we can't drag it into our hand from miles away. - //there's got to be a better way of doing this. - if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) - return - - if (( usr.restrained() ) || ( usr.stat )) - return - - if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) - return - - switch(over_object.name) - if("r_hand") - usr.unEquip(src) - usr.put_in_r_hand(src) - if("l_hand") - usr.unEquip(src) - usr.put_in_l_hand(src) - src.add_fingerprint(usr) - -/obj/item/weapon/storage/AltClick(mob/user) - if(user in is_seeing) - src.close(user) - // I would think there should be some incap check here or something - // But MouseDrop doesn't use one (as of this writing), so... - else if(isliving(user) && Adjacent(user)) - src.open(user) - else - return ..() - -/obj/item/weapon/storage/proc/return_inv() - - var/list/L = list( ) - - L += src.contents - - for(var/obj/item/weapon/storage/S in src) - L += S.return_inv() - for(var/obj/item/weapon/gift/G in src) - L += G.gift - if (istype(G.gift, /obj/item/weapon/storage)) - L += G.gift:return_inv() - return L - -/obj/item/weapon/storage/proc/show_to(mob/user as mob) - if(user.s_active != src) - for(var/obj/item/I in src) - if(I.on_found(user)) - return - if(user.s_active) - user.s_active.hide_from(user) - - var/client/C = user.client - if(!C) - return - - if(storage_slots) - C.screen += src.boxes - create_slot_catchers() - C.screen += src.box_catchers - else - C.screen += src.storage_start - C.screen += src.storage_continue - C.screen += src.storage_end - - C.screen += src.closer - C.screen += src.contents - - user.s_active = src - LAZYDISTINCTADD(is_seeing,user) - -/obj/item/weapon/storage/proc/hide_from(mob/user as mob) - var/client/C = user.client - LAZYREMOVE(is_seeing,user) - - if(!C) - if(!LAZYLEN(is_seeing)) - clear_slot_catchers() - return - - if(storage_slots) - C.screen -= src.boxes - C.screen -= src.box_catchers - else - C.screen -= src.storage_start - C.screen -= src.storage_continue - C.screen -= src.storage_end - - C.screen -= src.closer - C.screen -= src.contents - - if(user.s_active == src) - user.s_active = null - - if(!LAZYLEN(is_seeing)) - clear_slot_catchers() - -/obj/item/weapon/storage/proc/open(mob/user as mob) - if (use_sound) - //CHOMPStation Edit - var/obj/belly/B = user.loc - if(!isbelly(B) || !(B.mode_flags & DM_FLAG_MUFFLEITEMS)) - playsound(src, src.use_sound, 50, 0, -5) - //CHOMPStation Edit end - - orient2hud(user) - if(user.s_active) - user.s_active.close(user) - show_to(user) - -/obj/item/weapon/storage/proc/close(mob/user as mob) - src.hide_from(user) - user.s_active = null - return - -/obj/item/weapon/storage/proc/close_all() - for(var/mob/M in can_see_contents()) - close(M) - . = 1 - -/obj/item/weapon/storage/proc/can_see_contents() - var/list/cansee = list() - for(var/mob/M in is_seeing) - if(M.s_active == src && M.client) - cansee |= M - else - LAZYREMOVE(is_seeing,M) - return cansee - -/obj/item/weapon/storage/proc/create_slot_catchers() - clear_slot_catchers() - var/list/new_catchers = list() - for(var/obj/item/I in contents) - var/atom/movable/storage_slot/SS = new(null, I) - SS.screen_loc = I.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - new_catchers += SS - box_catchers = new_catchers - -/obj/item/weapon/storage/proc/clear_slot_catchers() - if(box_catchers) - for(var/mob/M in is_seeing) - M.client?.screen -= box_catchers - QDEL_LIST_NULL(box_catchers) - -//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. -//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. -/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) - var/cx = tx - var/cy = ty - src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" - for(var/obj/O in src.contents) - O.screen_loc = "[cx],[cy]" - O.hud_layerise() - cx++ - if (cx > mx) - cx = tx - cy-- - src.closer.screen_loc = "[mx+1],[my]" - return - -//This proc draws out the inventory and places the items on it. It uses the standard position. -/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) - var/cx = 4 - var/cy = 2+rows - src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" - - if(display_contents_with_number) - for(var/datum/numbered_display/ND in display_contents) - ND.sample_object.screen_loc = "[cx]:16,[cy]:16" - ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" - ND.sample_object.hud_layerise() - var/atom/movable/storage_slot/SS = new(null, ND.sample_object) - SS.screen_loc = ND.sample_object.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - cx++ - if (cx > (4+cols)) - cx = 4 - cy-- - else - for(var/obj/O in contents) - O.screen_loc = "[cx]:16,[cy]:16" - O.maptext = "" - O.hud_layerise() - var/atom/movable/storage_slot/SS = new(null, O) - SS.screen_loc = O.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - cx++ - if (cx > (4+cols)) - cx = 4 - cy-- - src.closer.screen_loc = "[4+cols+1]:16,2:16" - return - -/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) - SHOULD_NOT_SLEEP(TRUE) - - /// A prototype for drawing the leftmost border behind each item in storage - var/static/mutable_appearance/stored_start - /// A prototype for drawing the wide backing space behind each item in storage - var/static/mutable_appearance/stored_continue - /// A prototype for drawing the rightmost border behind each item in storage - var/static/mutable_appearance/stored_end - - if(!stored_start) - // Because these are static and manipulated all the time by different storages, you'd better make 100000% sure this proc never sleeps - stored_start = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_start", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - stored_continue = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_continue", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - stored_end = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_end", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - - var/baseline_max_storage_space = INVENTORY_STANDARD_SPACE / 2 //should be equal to default backpack capacity // This is a lie. - // Above var is misleading, what it does upon changing is makes smaller inventory sizes have smaller space on the UI. - // It's cut in half because otherwise boxes of IDs and other tiny items are unbearably cluttered. - - var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space - var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item - var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space - - QDEL_LIST_NULL(storage_start.vis_contents) - - var/matrix/M = matrix() - M.Scale((storage_width-storage_cap_width*2+3)/32,1) - src.storage_continue.transform = M - - src.storage_start.screen_loc = "4:16,2:16" - src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" - src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" - - var/startpoint = 0 - var/endpoint = 1 - - for(var/obj/item/O in contents) - var/atom/movable/storage_slot/SS = new(null, O) - startpoint = endpoint + 1 - endpoint += storage_width * O.get_storage_cost()/max_storage_space - - var/matrix/M_start = matrix() - var/matrix/M_continue = matrix() - var/matrix/M_end = matrix() - M_start.Translate(startpoint,0) - M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) - M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) - M_end.Translate(endpoint-stored_cap_width,0) - stored_start.transform = M_start - stored_continue.transform = M_continue - stored_end.transform = M_end - SS.add_overlay(list(stored_start, stored_continue, stored_end)) - - O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" - O.maptext = "" - O.hud_layerise() - storage_start.vis_contents += SS - - src.closer.screen_loc = "4:[storage_width+19],2:16" - return - -/datum/numbered_display - var/obj/item/sample_object - var/number - -/datum/numbered_display/New(obj/item/sample as obj) - if(!istype(sample)) - qdel(src) - sample_object = sample - number = 1 - -//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. -/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) - - var/adjusted_contents = contents.len - - //Numbered contents display - var/list/datum/numbered_display/numbered_contents - if(display_contents_with_number) - numbered_contents = list() - adjusted_contents = 0 - for(var/obj/item/I in contents) - var/found = 0 - for(var/datum/numbered_display/ND in numbered_contents) - if(ND.sample_object.type == I.type) - ND.number++ - found = 1 - break - if(!found) - adjusted_contents++ - numbered_contents.Add( new/datum/numbered_display(I) ) - - if(storage_slots == null) - src.space_orient_objs(numbered_contents) - else - var/row_num = 0 - var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.slot_orient_objs(row_num, col_count, numbered_contents) - return - -//This proc return 1 if the item can be picked up and 0 if it can't. -//Set the stop_messages to stop it from printing messages -/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(!istype(W)) return //Not an item - - if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) - return 0 - - if(src.loc == W) - return 0 //Means the item is already in the storage item - if(storage_slots != null && contents.len >= storage_slots) - if(!stop_messages) - to_chat(usr, "[src] is full, make some space.") - return 0 //Storage item is full - - if(LAZYLEN(can_hold) && !is_type_in_list(W, can_hold)) - if(!stop_messages) - if (istype(W, /obj/item/weapon/hand_labeler)) - return 0 - to_chat(usr, "[src] cannot hold [W].") - return 0 - - if(LAZYLEN(cant_hold) && is_type_in_list(W, cant_hold)) - if(!stop_messages) - to_chat(usr, "[src] cannot hold [W].") - return 0 - - if (max_w_class != null && W.w_class > max_w_class) - if(!stop_messages) - to_chat(usr, "[W] is too long for \the [src].") - return 0 - - var/total_storage_space = W.get_storage_cost() - for(var/obj/item/I in contents) - total_storage_space += I.get_storage_cost() //Adds up the combined w_classes which will be in the storage item if the item is added to it. - - if(total_storage_space > max_storage_space) - if(!stop_messages) - to_chat(usr, "[src] is too full, make some space.") - return 0 - - if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) - if(!stop_messages) - to_chat(usr, "[src] cannot hold [W] as it's a storage item of the same size.") - return 0 //To prevent the stacking of same sized storage items. - //CHOMPEdit - Getting around to proper object flags - if(HAS_TRAIT(W, TRAIT_NODROP)) //SHOULD be handled in unEquip, but better safe than sorry. - if(!stop_messages) - to_chat(usr, "\the [W] is stuck to your hand, you can't put it in \the [src]!") - return FALSE - - return 1 - -//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() -//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, -//such as when picking up all the items on a tile with one click. -/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - if(!istype(W)) return 0 - - if(!stall_insertion(W, usr)) // Can sleep here and delay removal for slow storage - return 0 - - if(usr) - usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() - W.on_enter_storage(src) - if (usr.client && usr.s_active != src) - usr.client.screen -= W - W.dropped(usr) - add_fingerprint(usr) - if (use_sound) - playsound(src, src.use_sound, 50, 0, -5) //Something broke "add item to container" sounds, this is a hacky fix. - - if(!prevent_warning) - for(var/mob/M in viewers(usr, null)) - if (M == usr) - to_chat(usr, "You put \the [W] into [src].") - else if (M in range(1)) //If someone is standing close enough, they can tell what it is... - M.show_message("\The [usr] puts [W] into [src].") - else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance... - M.show_message("\The [usr] puts [W] into [src].") - - src.orient2hud(usr) - if(usr.s_active) - usr.s_active.show_to(usr) - else - W.forceMove(src) - W.on_enter_storage(src) - - update_icon() - return 1 - -//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target -/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) - if(!istype(W)) return 0 - - if(!stall_removal(W, usr)) // Can sleep here and delay removal for slow storage - return 0 - - if(istype(src, /obj/item/weapon/storage/fancy)) - var/obj/item/weapon/storage/fancy/F = src - F.update_icon(1) - - for(var/mob/M in is_seeing) - if(!M.client || QDELETED(M)) - hide_from(M) - else - M.client.screen -= W - - if(new_location) - if(ismob(loc)) - W.dropped(usr) - if(ismob(new_location)) - W.hud_layerise() - else - W.reset_plane_and_layer() - W.forceMove(new_location) - else - W.forceMove(get_turf(src)) - - for(var/mob/M in is_seeing) - if(M.s_active == src) - orient2hud(M) - show_to(M) - if(W.maptext) - W.maptext = "" - W.on_exit_storage(src) - update_icon() - return 1 - -/// Called before insertion completes, allowing you to delay or cancel it -/obj/item/weapon/storage/proc/stall_insertion(obj/item/W, mob/user) - return TRUE - -/// Called before removal completes, allowing you to delay or cancel it -/obj/item/weapon/storage/proc/stall_removal(obj/item/W, mob/user) - return TRUE - -//This proc is called when you want to place an item into the storage item. -/obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) - ..() - - if(isrobot(user)) - return //Robots can't interact with storage items. - - if(istype(W, /obj/item/device/lightreplacer)) - var/obj/item/device/lightreplacer/LP = W - var/amt_inserted = 0 - var/turf/T = get_turf(user) - for(var/obj/item/weapon/light/L in src.contents) - if(L.status == 0) - if(LP.uses < LP.max_uses) - LP.add_uses(1) - amt_inserted++ - remove_from_storage(L, T) - qdel(L) - if(amt_inserted) - to_chat(user, "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining.") - return - - if(!can_be_inserted(W)) - return - - if(istype(W, /obj/item/weapon/tray)) - var/obj/item/weapon/tray/T = W - if(T.calc_carry() > 0) - if(prob(85)) - to_chat(user, "The tray won't fit in [src].") - return - else - W.forceMove(get_turf(user)) - if ((user.client && user.s_active != src)) - user.client.screen -= W - W.dropped(user) - to_chat(user, "God damn it!") - - W.add_fingerprint(user) - return handle_item_insertion(W) - -/obj/item/weapon/storage/dropped(mob/user as mob) - return - -/obj/item/weapon/storage/attack_hand(mob/user as mob) - if(ishuman(user) && !pocketable) - var/mob/living/carbon/human/H = user - if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(src) - H.l_store = null - return - if(H.r_store == src && !H.get_active_hand()) - H.put_in_hands(src) - H.r_store = null - return - - if (src.loc == user) - src.open(user) - else - ..() - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - src.add_fingerprint(user) - return - -/obj/item/weapon/storage/proc/gather_all(turf/T as turf, mob/user as mob) - var/list/rejections = list() - var/success = 0 - var/failure = 0 - - for(var/obj/item/I in T) - if(I.type in rejections) // To limit bag spamming: any given type only complains once - continue - if(!can_be_inserted(I, user)) // Note can_be_inserted still makes noise when the answer is no - rejections += I.type // therefore full bags are still a little spammy - failure = 1 - continue - success = 1 - handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. - if(success && !failure) - to_chat(user, "You put everything in [src].") - else if(success) - to_chat(user, "You put some things in [src].") - else - to_chat(user, "You fail to pick anything up with \the [src].") - -/obj/item/weapon/storage/verb/toggle_gathering_mode() - set name = "Switch Gathering Method" - set category = "Object" - - collection_mode = !collection_mode - switch (collection_mode) - if(1) - to_chat(usr, "[src] now picks up all items on a tile at once.") - if(0) - to_chat(usr, "[src] now picks up one item at a time.") - - -/obj/item/weapon/storage/verb/quick_empty() - set name = "Empty Contents" - set category = "Object" - set src in view(1) - - // Only humans and robots can dump contents - if(!(ishuman(usr) || isrobot(usr))) - return - - // Hard to do when you're KO'd - if(usr.incapacitated()) - return - - // Has to be at least adjacent (just for safety, src in view should handle this already) - if(!Adjacent(usr)) - return - - //VOREStation Add: No turf dumping if user is in a belly - if(isbelly(usr.loc)) - return - - drop_contents() - -/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs - hide_from(usr) - var/turf/T = get_turf(src) - for(var/obj/item/I in contents) - remove_from_storage(I, T) - -/obj/item/weapon/storage/proc/calibrate_size() - var/total_storage_space = 0 - for(var/obj/item/I in contents) - total_storage_space += I.get_storage_cost() - max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents. - -/obj/item/weapon/storage/emp_act(severity) - if(!istype(src.loc, /mob/living)) - for(var/obj/O in contents) - O.emp_act(severity) - ..() - -/obj/item/weapon/storage/attack_self(mob/user as mob) - if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty) - if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) - src.quick_empty() - return 1 - -//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). -//Returns -1 if the atom was not found on container. -/atom/proc/storage_depth(atom/container) - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !(cur_atom in container.contents)) - if (isarea(cur_atom)) - return INFINITY // CHOMPedit - if (istype(cur_atom.loc, /obj/item/weapon/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return INFINITY // CHOMPedit - inside something with a null loc. - - return depth - -//Like storage depth, but returns the depth to the nearest turf -//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). -/atom/proc/storage_depth_turf() - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !isturf(cur_atom)) - if (isarea(cur_atom)) - return INFINITY // CHOMPedit - if (istype(cur_atom.loc, /obj/item/weapon/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return INFINITY //CHOMPedit - inside something with a null loc. - - return depth - -// See inventory_sizes.dm for the defines. -/obj/item/proc/get_storage_cost() - if (storage_cost) - return storage_cost - else - switch(w_class) - if(ITEMSIZE_TINY) - return ITEMSIZE_COST_TINY - if(ITEMSIZE_SMALL) - return ITEMSIZE_COST_SMALL - if(ITEMSIZE_NORMAL) - return ITEMSIZE_COST_NORMAL - if(ITEMSIZE_LARGE) - return ITEMSIZE_COST_LARGE - if(ITEMSIZE_HUGE) - return ITEMSIZE_COST_HUGE - else - return ITEMSIZE_COST_NO_CONTAINER - -/obj/item/weapon/storage/proc/make_exact_fit() - storage_slots = contents.len - - LAZYCLEARLIST(can_hold) - can_hold = list() - max_w_class = 0 - max_storage_space = 0 - for(var/obj/item/I in src) - can_hold[I.type]++ - max_w_class = max(I.w_class, max_w_class) - max_storage_space += I.get_storage_cost() - -/* - * Trinket Box - READDING SOON - */ -/obj/item/weapon/storage/trinketbox - name = "trinket box" - desc = "A box that can hold small trinkets, such as a ring." - icon = 'icons/obj/items.dmi' - icon_state = "trinketbox" - var/open = 0 - storage_slots = 1 - can_hold = list( - /obj/item/clothing/gloves/ring, - /obj/item/weapon/coin, - /obj/item/clothing/accessory/medal - ) - var/open_state - var/closed_state - -/obj/item/weapon/storage/trinketbox/update_icon() - cut_overlays() - if(open) - icon_state = open_state - - if(contents.len >= 1) - var/contained_image = null - if(istype(contents[1], /obj/item/clothing/gloves/ring)) - contained_image = "ring_trinket" - else if(istype(contents[1], /obj/item/weapon/coin)) - contained_image = "coin_trinket" - else if(istype(contents[1], /obj/item/clothing/accessory/medal)) - contained_image = "medal_trinket" - if(contained_image) - add_overlay(contained_image) - else - icon_state = closed_state - -/obj/item/weapon/storage/trinketbox/New() - if(!open_state) - open_state = "[initial(icon_state)]_open" - if(!closed_state) - closed_state = "[initial(icon_state)]" - ..() - -/obj/item/weapon/storage/trinketbox/attack_self() - open = !open - update_icon() - ..() - -/obj/item/weapon/storage/trinketbox/examine(mob/user) - . = ..() - if(open && contents.len) - var/display_item = contents[1] - . += "\The [src] contains \the [display_item]!" - -/obj/item/weapon/storage/AllowDrop() - return TRUE - -//Useful for spilling the contents of containers all over the floor -/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null) - if (!istype(T))//If its not on the floor this might cause issues - T = get_turf(src) - - for (var/obj/O in contents) - remove_from_storage(O, T) - O.tumble(2) - -/// Hangar for storage backdrops, so that we can redirect clicks from them to our item for QOL -/atom/movable/storage_slot - name = "stored - " - icon = 'icons/effects/effects.dmi' - icon_state = "nothing" - plane = PLANE_PLAYER_HUD_ITEMS - layer = 0.1 - alpha = 200 - var/datum/weakref/held_item - -/atom/movable/storage_slot/New(newloc, obj/item/held_item) - ASSERT(held_item) - name += held_item.name - src.held_item = WEAKREF(held_item) - -/atom/movable/storage_slot/Destroy() - held_item = null - -/// Has to be this way. The fact that the overlays will be constantly mutated by other storage means we can't wait. -/atom/movable/storage_slot/add_overlay(list/somethings) - ASSERT(islist(somethings)) - overlays = somethings - -/atom/movable/storage_slot/Click() - var/obj/item/I = held_item?.resolve() - if(I) - usr.ClickOn(I) - return 1 - -// Allows micros to drag themselves into storage items -/obj/item/weapon/storage/MouseDrop_T(mob/living/target, mob/living/user) - if(!istype(user)) return // If the user passed in isn't a living mob, exit - if(target != user) return // If the user didn't drag themselves, exit - if(user.incapacitated() || user.buckled) return // If user is incapacitated or buckled, exit - if(get_holder_of_type(src, /mob/living/carbon/human) == user) return // No jumping into your own equipment - if(ishuman(user) && user.get_effective_size(TRUE) > 0.25) return // Only micro characters - if(ismouse(user) && user.get_effective_size(TRUE) > 1) return // Only normal sized mice or less - - // Create a dummy holder with user's size to test insertion - var/obj/item/weapon/holder/D = new/obj/item/weapon/holder - if(ismouse(user)) - D.w_class = ITEMSIZE_TINY // Mouse smol - else if(ishuman(user)) - D.w_class = ITEMSIZE_SMALL // Players small - else // Other creatures not accepted at this time - qdel(D) // If there's a better way to check the size of a - return // mob's holder and if it fits, replace this slab - if(!src.can_be_inserted(D, 1)) // If the dummy item doesn't fit, exit - qdel(D) - return - qdel(D) - - // Scoop and insert target into storage - var/obj/item/weapon/holder/H = new user.holder_type(get_turf(user), user) - src.handle_item_insertion(H, 1) - to_chat(user, "You climb into \the [src].") - return ..() +// To clarify: +// For use_to_pickup and allow_quick_gather functionality, +// see item/attackby() (/game/objects/items.dm) +// Do not remove this functionality without good reason, cough reagent_containers cough. +// -Sayu + + +/obj/item/weapon/storage + name = "storage" + icon = 'icons/obj/storage.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', + ) + w_class = ITEMSIZE_NORMAL + show_messages = 1 + matter = list(MAT_FIBERS = 50) //CHOMPAdd + + /// List of objects which this item can store (if set, it can't store anything else) + var/list/can_hold + /// List of objects which this item can't store (in effect only if can_hold isn't set) + var/list/cant_hold + /// List of mobs which are currently seeing the contents of this item's storage + var/list/is_seeing + + var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) + var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item. + var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. + + /// Boxes screen object for fixed-size storage (belts, etc) + var/obj/screen/storage/boxes = null + /// List of 'click catchers' for boxes for fixed-size storage + var/list/box_catchers = null + + /// For dynamic storage, the leftmost pixel column for the whole storage display. Most of the interesting effects are hung on this in vis_contents. + var/obj/screen/storage/storage_start = null + /// For dynamic storage, the majority of the width of the whole storage display. Decorative, but sized to the width appropriate to represent how much storage there is. + var/obj/screen/storage/storage_continue = null + /// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative. + var/obj/screen/storage/storage_end = null + + /// The "X" button at the far right of the storage + var/obj/screen/close/closer = null + + var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. + var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. + var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. + var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. + var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile + var/use_sound = "rustle" //sound played when used. null for no sound. + var/list/starts_with //Things to spawn on the box on spawn + var/empty //Mapper override to spawn an empty version of a container that usually has stuff + /// If you can use this storage while in a pocket + var/pocketable = FALSE + +/obj/item/weapon/storage/Initialize() + . = ..() + + if(allow_quick_empty) + verbs += /obj/item/weapon/storage/verb/quick_empty + else + verbs -= /obj/item/weapon/storage/verb/quick_empty + + if(allow_quick_gather) + verbs += /obj/item/weapon/storage/verb/toggle_gathering_mode + else + verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode + + if(storage_slots) + src.boxes = new /obj/screen/storage( ) + src.boxes.name = "storage" + src.boxes.master = src + src.boxes.icon_state = "block" + src.boxes.screen_loc = "7,7 to 10,8" + else + src.storage_start = new /obj/screen/storage( ) + src.storage_start.name = "storage" + src.storage_start.master = src + src.storage_start.icon_state = "storage_start" + src.storage_start.screen_loc = "7,7 to 10,8" + + src.storage_continue = new /obj/screen/storage( ) + src.storage_continue.name = "storage" + src.storage_continue.master = src + src.storage_continue.icon_state = "storage_continue" + src.storage_continue.screen_loc = "7,7 to 10,8" + + src.storage_end = new /obj/screen/storage( ) + src.storage_end.name = "storage" + src.storage_end.master = src + src.storage_end.icon_state = "storage_end" + src.storage_end.screen_loc = "7,7 to 10,8" + + src.closer = new /obj/screen/close( ) + src.closer.master = src + src.closer.icon_state = "storage_close" + src.closer.hud_layerise() + orient2hud() + + if(LAZYLEN(starts_with) && !empty) + for(var/newtype in starts_with) + var/count = starts_with[newtype] || 1 //Could have left it blank. + while(count) + count-- + new newtype(src) + starts_with = null //Reduce list count. + update_icon() + + calibrate_size() + +/obj/item/weapon/storage/Destroy() + close_all() + clear_slot_catchers() + QDEL_NULL(boxes) + QDEL_NULL(storage_start) + QDEL_NULL(storage_continue) + QDEL_NULL(storage_end) + QDEL_NULL(closer) + + if(ismob(loc)) + var/mob/M = loc + M.remove_from_mob(src) + + . = ..() + +/obj/item/weapon/storage/MouseDrop(obj/over_object as obj) + if(!canremove) + return + + if (isliving(usr) || isobserver(usr)) + + if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why? + return + + if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block + src.open(usr) + return + + if (!( istype(over_object, /obj/screen) )) + return ..() + + //makes sure that the storage is equipped, so that we can't drag it into our hand from miles away. + //there's got to be a better way of doing this. + if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) + return + + if (( usr.restrained() ) || ( usr.stat )) + return + + if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) + return + + switch(over_object.name) + if("r_hand") + usr.unEquip(src) + usr.put_in_r_hand(src) + if("l_hand") + usr.unEquip(src) + usr.put_in_l_hand(src) + src.add_fingerprint(usr) + +/obj/item/weapon/storage/AltClick(mob/user) + if(user in is_seeing) + src.close(user) + // I would think there should be some incap check here or something + // But MouseDrop doesn't use one (as of this writing), so... + else if(isliving(user) && Adjacent(user)) + src.open(user) + else + return ..() + +/obj/item/weapon/storage/proc/return_inv() + + var/list/L = list( ) + + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + for(var/obj/item/weapon/gift/G in src) + L += G.gift + if (istype(G.gift, /obj/item/weapon/storage)) + L += G.gift:return_inv() + return L + +/obj/item/weapon/storage/proc/show_to(mob/user as mob) + if(user.s_active != src) + for(var/obj/item/I in src) + if(I.on_found(user)) + return + if(user.s_active) + user.s_active.hide_from(user) + + var/client/C = user.client + if(!C) + return + + if(storage_slots) + C.screen += src.boxes + create_slot_catchers() + C.screen += src.box_catchers + else + C.screen += src.storage_start + C.screen += src.storage_continue + C.screen += src.storage_end + + C.screen += src.closer + C.screen += src.contents + + user.s_active = src + LAZYDISTINCTADD(is_seeing,user) + +/obj/item/weapon/storage/proc/hide_from(mob/user as mob) + var/client/C = user.client + LAZYREMOVE(is_seeing,user) + + if(!C) + if(!LAZYLEN(is_seeing)) + clear_slot_catchers() + return + + if(storage_slots) + C.screen -= src.boxes + C.screen -= src.box_catchers + else + C.screen -= src.storage_start + C.screen -= src.storage_continue + C.screen -= src.storage_end + + C.screen -= src.closer + C.screen -= src.contents + + if(user.s_active == src) + user.s_active = null + + if(!LAZYLEN(is_seeing)) + clear_slot_catchers() + +/obj/item/weapon/storage/proc/open(mob/user as mob) + if (use_sound) + //CHOMPStation Edit + var/obj/belly/B = user.loc + if(!isbelly(B) || !(B.mode_flags & DM_FLAG_MUFFLEITEMS)) + playsound(src, src.use_sound, 50, 0, -5) + //CHOMPStation Edit end + + orient2hud(user) + if(user.s_active) + user.s_active.close(user) + show_to(user) + +/obj/item/weapon/storage/proc/close(mob/user as mob) + src.hide_from(user) + user.s_active = null + return + +/obj/item/weapon/storage/proc/close_all() + for(var/mob/M in can_see_contents()) + close(M) + . = 1 + +/obj/item/weapon/storage/proc/can_see_contents() + var/list/cansee = list() + for(var/mob/M in is_seeing) + if(M.s_active == src && M.client) + cansee |= M + else + LAZYREMOVE(is_seeing,M) + return cansee + +/obj/item/weapon/storage/proc/create_slot_catchers() + clear_slot_catchers() + var/list/new_catchers = list() + for(var/obj/item/I in contents) + var/atom/movable/storage_slot/SS = new(null, I) + SS.screen_loc = I.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + new_catchers += SS + box_catchers = new_catchers + +/obj/item/weapon/storage/proc/clear_slot_catchers() + if(box_catchers) + for(var/mob/M in is_seeing) + M.client?.screen -= box_catchers + QDEL_LIST_NULL(box_catchers) + +//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. +//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. +/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) + var/cx = tx + var/cy = ty + src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" + for(var/obj/O in src.contents) + O.screen_loc = "[cx],[cy]" + O.hud_layerise() + cx++ + if (cx > mx) + cx = tx + cy-- + src.closer.screen_loc = "[mx+1],[my]" + return + +//This proc draws out the inventory and places the items on it. It uses the standard position. +/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) + var/cx = 4 + var/cy = 2+rows + src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" + + if(display_contents_with_number) + for(var/datum/numbered_display/ND in display_contents) + ND.sample_object.screen_loc = "[cx]:16,[cy]:16" + ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" + ND.sample_object.hud_layerise() + var/atom/movable/storage_slot/SS = new(null, ND.sample_object) + SS.screen_loc = ND.sample_object.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + cx++ + if (cx > (4+cols)) + cx = 4 + cy-- + else + for(var/obj/O in contents) + O.screen_loc = "[cx]:16,[cy]:16" + O.maptext = "" + O.hud_layerise() + var/atom/movable/storage_slot/SS = new(null, O) + SS.screen_loc = O.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + cx++ + if (cx > (4+cols)) + cx = 4 + cy-- + src.closer.screen_loc = "[4+cols+1]:16,2:16" + return + +/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) + SHOULD_NOT_SLEEP(TRUE) + + /// A prototype for drawing the leftmost border behind each item in storage + var/static/mutable_appearance/stored_start + /// A prototype for drawing the wide backing space behind each item in storage + var/static/mutable_appearance/stored_continue + /// A prototype for drawing the rightmost border behind each item in storage + var/static/mutable_appearance/stored_end + + if(!stored_start) + // Because these are static and manipulated all the time by different storages, you'd better make 100000% sure this proc never sleeps + stored_start = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_start", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + stored_continue = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_continue", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + stored_end = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_end", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + + var/baseline_max_storage_space = INVENTORY_STANDARD_SPACE / 2 //should be equal to default backpack capacity // This is a lie. + // Above var is misleading, what it does upon changing is makes smaller inventory sizes have smaller space on the UI. + // It's cut in half because otherwise boxes of IDs and other tiny items are unbearably cluttered. + + var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space + var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item + var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space + + QDEL_LIST_NULL(storage_start.vis_contents) + + var/matrix/M = matrix() + M.Scale((storage_width-storage_cap_width*2+3)/32,1) + src.storage_continue.transform = M + + src.storage_start.screen_loc = "4:16,2:16" + src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" + src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" + + var/startpoint = 0 + var/endpoint = 1 + + for(var/obj/item/O in contents) + var/atom/movable/storage_slot/SS = new(null, O) + startpoint = endpoint + 1 + endpoint += storage_width * O.get_storage_cost()/max_storage_space + + var/matrix/M_start = matrix() + var/matrix/M_continue = matrix() + var/matrix/M_end = matrix() + M_start.Translate(startpoint,0) + M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) + M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) + M_end.Translate(endpoint-stored_cap_width,0) + stored_start.transform = M_start + stored_continue.transform = M_continue + stored_end.transform = M_end + SS.add_overlay(list(stored_start, stored_continue, stored_end)) + + O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" + O.maptext = "" + O.hud_layerise() + storage_start.vis_contents += SS + + src.closer.screen_loc = "4:[storage_width+19],2:16" + return + +/datum/numbered_display + var/obj/item/sample_object + var/number + +/datum/numbered_display/New(obj/item/sample as obj) + if(!istype(sample)) + qdel(src) + sample_object = sample + number = 1 + +//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. +/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) + + var/adjusted_contents = contents.len + + //Numbered contents display + var/list/datum/numbered_display/numbered_contents + if(display_contents_with_number) + numbered_contents = list() + adjusted_contents = 0 + for(var/obj/item/I in contents) + var/found = 0 + for(var/datum/numbered_display/ND in numbered_contents) + if(ND.sample_object.type == I.type) + ND.number++ + found = 1 + break + if(!found) + adjusted_contents++ + numbered_contents.Add( new/datum/numbered_display(I) ) + + if(storage_slots == null) + src.space_orient_objs(numbered_contents) + else + var/row_num = 0 + var/col_count = min(7,storage_slots) -1 + if (adjusted_contents > 7) + row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. + src.slot_orient_objs(row_num, col_count, numbered_contents) + return + +//This proc return 1 if the item can be picked up and 0 if it can't. +//Set the stop_messages to stop it from printing messages +/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) + if(!istype(W)) return //Not an item + + if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) + return 0 + + if(src.loc == W) + return 0 //Means the item is already in the storage item + if(storage_slots != null && contents.len >= storage_slots) + if(!stop_messages) + to_chat(usr, "[src] is full, make some space.") + return 0 //Storage item is full + + if(LAZYLEN(can_hold) && !is_type_in_list(W, can_hold)) + if(!stop_messages) + if (istype(W, /obj/item/weapon/hand_labeler)) + return 0 + to_chat(usr, "[src] cannot hold [W].") + return 0 + + if(LAZYLEN(cant_hold) && is_type_in_list(W, cant_hold)) + if(!stop_messages) + to_chat(usr, "[src] cannot hold [W].") + return 0 + + if (max_w_class != null && W.w_class > max_w_class) + if(!stop_messages) + to_chat(usr, "[W] is too long for \the [src].") + return 0 + + var/total_storage_space = W.get_storage_cost() + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() //Adds up the combined w_classes which will be in the storage item if the item is added to it. + + if(total_storage_space > max_storage_space) + if(!stop_messages) + to_chat(usr, "[src] is too full, make some space.") + return 0 + + if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) + if(!stop_messages) + to_chat(usr, "[src] cannot hold [W] as it's a storage item of the same size.") + return 0 //To prevent the stacking of same sized storage items. + //CHOMPEdit - Getting around to proper object flags + if(HAS_TRAIT(W, TRAIT_NODROP)) //SHOULD be handled in unEquip, but better safe than sorry. + if(!stop_messages) + to_chat(usr, "\the [W] is stuck to your hand, you can't put it in \the [src]!") + return FALSE + + return 1 + +//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() +//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, +//such as when picking up all the items on a tile with one click. +/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) + if(!istype(W)) return 0 + + if(!stall_insertion(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + + if(usr) + usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() + W.on_enter_storage(src) + if (usr.client && usr.s_active != src) + usr.client.screen -= W + W.dropped(usr) + add_fingerprint(usr) + if (use_sound) + playsound(src, src.use_sound, 50, 0, -5) //Something broke "add item to container" sounds, this is a hacky fix. + + if(!prevent_warning) + for(var/mob/M in viewers(usr, null)) + if (M == usr) + to_chat(usr, "You put \the [W] into [src].") + else if (M in range(1)) //If someone is standing close enough, they can tell what it is... + M.show_message("\The [usr] puts [W] into [src].") + else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance... + M.show_message("\The [usr] puts [W] into [src].") + + src.orient2hud(usr) + if(usr.s_active) + usr.s_active.show_to(usr) + else + W.forceMove(src) + W.on_enter_storage(src) + + update_icon() + return 1 + +//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target +/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) + if(!istype(W)) return 0 + + if(!stall_removal(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + + if(istype(src, /obj/item/weapon/storage/fancy)) + var/obj/item/weapon/storage/fancy/F = src + F.update_icon(1) + + for(var/mob/M in is_seeing) + if(!M.client || QDELETED(M)) + hide_from(M) + else + M.client.screen -= W + + if(new_location) + if(ismob(loc)) + W.dropped(usr) + if(ismob(new_location)) + W.hud_layerise() + else + W.reset_plane_and_layer() + W.forceMove(new_location) + else + W.forceMove(get_turf(src)) + + for(var/mob/M in is_seeing) + if(M.s_active == src) + orient2hud(M) + show_to(M) + if(W.maptext) + W.maptext = "" + W.on_exit_storage(src) + update_icon() + return 1 + +/// Called before insertion completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_insertion(obj/item/W, mob/user) + return TRUE + +/// Called before removal completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_removal(obj/item/W, mob/user) + return TRUE + +//This proc is called when you want to place an item into the storage item. +/obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) + ..() + + if(isrobot(user)) + return //Robots can't interact with storage items. + + if(istype(W, /obj/item/device/lightreplacer)) + var/obj/item/device/lightreplacer/LP = W + var/amt_inserted = 0 + var/turf/T = get_turf(user) + for(var/obj/item/weapon/light/L in src.contents) + if(L.status == 0) + if(LP.uses < LP.max_uses) + LP.add_uses(1) + amt_inserted++ + remove_from_storage(L, T) + qdel(L) + if(amt_inserted) + to_chat(user, "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining.") + return + + if(!can_be_inserted(W)) + return + + if(istype(W, /obj/item/weapon/tray)) + var/obj/item/weapon/tray/T = W + if(T.calc_carry() > 0) + if(prob(85)) + to_chat(user, "The tray won't fit in [src].") + return + else + W.forceMove(get_turf(user)) + if ((user.client && user.s_active != src)) + user.client.screen -= W + W.dropped(user) + to_chat(user, "God damn it!") + + W.add_fingerprint(user) + return handle_item_insertion(W) + +/obj/item/weapon/storage/dropped(mob/user as mob) + return + +/obj/item/weapon/storage/attack_hand(mob/user as mob) + if(ishuman(user) && !pocketable) + var/mob/living/carbon/human/H = user + if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. + H.put_in_hands(src) + H.l_store = null + return + if(H.r_store == src && !H.get_active_hand()) + H.put_in_hands(src) + H.r_store = null + return + + if (src.loc == user) + src.open(user) + else + ..() + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/proc/gather_all(turf/T as turf, mob/user as mob) + var/list/rejections = list() + var/success = 0 + var/failure = 0 + + for(var/obj/item/I in T) + if(I.type in rejections) // To limit bag spamming: any given type only complains once + continue + if(!can_be_inserted(I, user)) // Note can_be_inserted still makes noise when the answer is no + rejections += I.type // therefore full bags are still a little spammy + failure = 1 + continue + success = 1 + handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. + if(success && !failure) + to_chat(user, "You put everything in [src].") + else if(success) + to_chat(user, "You put some things in [src].") + else + to_chat(user, "You fail to pick anything up with \the [src].") + +/obj/item/weapon/storage/verb/toggle_gathering_mode() + set name = "Switch Gathering Method" + set category = "Object" + + collection_mode = !collection_mode + switch (collection_mode) + if(1) + to_chat(usr, "[src] now picks up all items on a tile at once.") + if(0) + to_chat(usr, "[src] now picks up one item at a time.") + + +/obj/item/weapon/storage/verb/quick_empty() + set name = "Empty Contents" + set category = "Object" + set src in view(1) + + // Only humans and robots can dump contents + if(!(ishuman(usr) || isrobot(usr))) + return + + // Hard to do when you're KO'd + if(usr.incapacitated()) + return + + // Has to be at least adjacent (just for safety, src in view should handle this already) + if(!Adjacent(usr)) + return + + //VOREStation Add: No turf dumping if user is in a belly + if(isbelly(usr.loc)) + return + + drop_contents() + +/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs + hide_from(usr) + var/turf/T = get_turf(src) + for(var/obj/item/I in contents) + remove_from_storage(I, T) + +/obj/item/weapon/storage/proc/calibrate_size() + var/total_storage_space = 0 + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() + max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents. + +/obj/item/weapon/storage/emp_act(severity) + if(!istype(src.loc, /mob/living)) + for(var/obj/O in contents) + O.emp_act(severity) + ..() + +/obj/item/weapon/storage/attack_self(mob/user as mob) + if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty) + if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) + src.quick_empty() + return 1 + +//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). +//Returns -1 if the atom was not found on container. +/atom/proc/storage_depth(atom/container) + var/depth = 0 + var/atom/cur_atom = src + + while (cur_atom && !(cur_atom in container.contents)) + if (isarea(cur_atom)) + return INFINITY // CHOMPedit + if (istype(cur_atom.loc, /obj/item/weapon/storage)) + depth++ + cur_atom = cur_atom.loc + + if (!cur_atom) + return INFINITY // CHOMPedit - inside something with a null loc. + + return depth + +//Like storage depth, but returns the depth to the nearest turf +//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). +/atom/proc/storage_depth_turf() + var/depth = 0 + var/atom/cur_atom = src + + while (cur_atom && !isturf(cur_atom)) + if (isarea(cur_atom)) + return INFINITY // CHOMPedit + if (istype(cur_atom.loc, /obj/item/weapon/storage)) + depth++ + cur_atom = cur_atom.loc + + if (!cur_atom) + return INFINITY //CHOMPedit - inside something with a null loc. + + return depth + +// See inventory_sizes.dm for the defines. +/obj/item/proc/get_storage_cost() + if (storage_cost) + return storage_cost + else + switch(w_class) + if(ITEMSIZE_TINY) + return ITEMSIZE_COST_TINY + if(ITEMSIZE_SMALL) + return ITEMSIZE_COST_SMALL + if(ITEMSIZE_NORMAL) + return ITEMSIZE_COST_NORMAL + if(ITEMSIZE_LARGE) + return ITEMSIZE_COST_LARGE + if(ITEMSIZE_HUGE) + return ITEMSIZE_COST_HUGE + else + return ITEMSIZE_COST_NO_CONTAINER + +/obj/item/weapon/storage/proc/make_exact_fit() + storage_slots = contents.len + + LAZYCLEARLIST(can_hold) + can_hold = list() + max_w_class = 0 + max_storage_space = 0 + for(var/obj/item/I in src) + can_hold[I.type]++ + max_w_class = max(I.w_class, max_w_class) + max_storage_space += I.get_storage_cost() + +/* + * Trinket Box - READDING SOON + */ +/obj/item/weapon/storage/trinketbox + name = "trinket box" + desc = "A box that can hold small trinkets, such as a ring." + icon = 'icons/obj/items.dmi' + icon_state = "trinketbox" + var/open = 0 + storage_slots = 1 + can_hold = list( + /obj/item/clothing/gloves/ring, + /obj/item/weapon/coin, + /obj/item/clothing/accessory/medal + ) + var/open_state + var/closed_state + +/obj/item/weapon/storage/trinketbox/update_icon() + cut_overlays() + if(open) + icon_state = open_state + + if(contents.len >= 1) + var/contained_image = null + if(istype(contents[1], /obj/item/clothing/gloves/ring)) + contained_image = "ring_trinket" + else if(istype(contents[1], /obj/item/weapon/coin)) + contained_image = "coin_trinket" + else if(istype(contents[1], /obj/item/clothing/accessory/medal)) + contained_image = "medal_trinket" + if(contained_image) + add_overlay(contained_image) + else + icon_state = closed_state + +/obj/item/weapon/storage/trinketbox/New() + if(!open_state) + open_state = "[initial(icon_state)]_open" + if(!closed_state) + closed_state = "[initial(icon_state)]" + ..() + +/obj/item/weapon/storage/trinketbox/attack_self() + open = !open + update_icon() + ..() + +/obj/item/weapon/storage/trinketbox/examine(mob/user) + . = ..() + if(open && contents.len) + var/display_item = contents[1] + . += "\The [src] contains \the [display_item]!" + +/obj/item/weapon/storage/AllowDrop() + return TRUE + +//Useful for spilling the contents of containers all over the floor +/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null) + if (!istype(T))//If its not on the floor this might cause issues + T = get_turf(src) + + for (var/obj/O in contents) + remove_from_storage(O, T) + O.tumble(2) + +/// Hangar for storage backdrops, so that we can redirect clicks from them to our item for QOL +/atom/movable/storage_slot + name = "stored - " + icon = 'icons/effects/effects.dmi' + icon_state = "nothing" + plane = PLANE_PLAYER_HUD_ITEMS + layer = 0.1 + alpha = 200 + var/datum/weakref/held_item + +/atom/movable/storage_slot/New(newloc, obj/item/held_item) + ASSERT(held_item) + name += held_item.name + src.held_item = WEAKREF(held_item) + +/atom/movable/storage_slot/Destroy() + held_item = null + +/// Has to be this way. The fact that the overlays will be constantly mutated by other storage means we can't wait. +/atom/movable/storage_slot/add_overlay(list/somethings) + ASSERT(islist(somethings)) + overlays = somethings + +/atom/movable/storage_slot/Click() + var/obj/item/I = held_item?.resolve() + if(I) + usr.ClickOn(I) + return 1 + +// Allows micros to drag themselves into storage items +/obj/item/weapon/storage/MouseDrop_T(mob/living/target, mob/living/user) + if(!istype(user)) return // If the user passed in isn't a living mob, exit + if(target != user) return // If the user didn't drag themselves, exit + if(user.incapacitated() || user.buckled) return // If user is incapacitated or buckled, exit + if(get_holder_of_type(src, /mob/living/carbon/human) == user) return // No jumping into your own equipment + if(ishuman(user) && user.get_effective_size(TRUE) > 0.25) return // Only micro characters + if(ismouse(user) && user.get_effective_size(TRUE) > 1) return // Only normal sized mice or less + + // Create a dummy holder with user's size to test insertion + var/obj/item/weapon/holder/D = new/obj/item/weapon/holder + if(ismouse(user)) + D.w_class = ITEMSIZE_TINY // Mouse smol + else if(ishuman(user)) + D.w_class = ITEMSIZE_SMALL // Players small + else // Other creatures not accepted at this time + qdel(D) // If there's a better way to check the size of a + return // mob's holder and if it fits, replace this slab + if(!src.can_be_inserted(D, 1)) // If the dummy item doesn't fit, exit + qdel(D) + return + qdel(D) + + // Scoop and insert target into storage + var/obj/item/weapon/holder/H = new user.holder_type(get_turf(user), user) + src.handle_item_insertion(H, 1) + to_chat(user, "You climb into \the [src].") + return ..() diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index fdd28c1a0e..0637205c3b 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -1,239 +1,239 @@ -/* - * Toolboxes - */ -/obj/item/weapon/storage/toolbox - name = "toolbox" - desc = "A metal toolbox with remarkably robust construction." - icon = 'icons/obj/storage_vr.dmi' - icon_state = "red" - item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") - center_of_mass = list("x" = 16,"y" = 11) - force = 10 - throwforce = 10 - throw_speed = 1 - throw_range = 7 - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_SMALL * 7 //enough to hold all starting contents - origin_tech = list(TECH_COMBAT = 1) - attack_verb = list("robusted") - use_sound = 'sound/items/storage/toolbox.ogg' - drop_sound = 'sound/items/drop/toolbox.ogg' - pickup_sound = 'sound/items/pickup/toolbox.ogg' - -//Emergency -/obj/item/weapon/storage/toolbox/emergency - name = "emergency toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "red" - item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") - starts_with = list( - /obj/item/weapon/tool/crowbar/red, - /obj/item/weapon/extinguisher/mini, - /obj/item/device/radio - ) -/obj/item/weapon/storage/toolbox/emergency/Initialize() - if(prob(50)) - new /obj/item/device/flashlight(src) - else - new /obj/item/device/flashlight/flare(src) - . = ..() - -//Mechanical -/obj/item/weapon/storage/toolbox/mechanical - name = "mechanical toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "blue" - item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") - starts_with = list( - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/crowbar, - /obj/item/device/analyzer, - /obj/item/weapon/tool/wirecutters - ) - -//Electrical -/obj/item/weapon/storage/toolbox/electrical - name = "electrical toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "yellow" - item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") - starts_with = list( - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wirecutters, - /obj/item/device/t_scanner, - /obj/item/weapon/tool/crowbar, - /obj/item/stack/cable_coil/random_belt, - /obj/item/stack/cable_coil/random_belt - ) -/obj/item/weapon/storage/toolbox/electrical/Initialize() - . = ..() - if(prob(5)) - new /obj/item/clothing/gloves/yellow(src) - else - new /obj/item/stack/cable_coil/random(src,30) - calibrate_size() - -//Syndicate -/obj/item/weapon/storage/toolbox/syndicate - name = "black and red toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "syndicate" - item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi") - origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) - force = 14 - starts_with = list( - /obj/item/clothing/gloves/yellow, - /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/tool/wrench, - /obj/item/weapon/weldingtool, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/tool/wirecutters, - /obj/item/device/multitool - ) - -/obj/item/weapon/storage/toolbox/syndicate/powertools - starts_with = list( - /obj/item/clothing/gloves/yellow, - /obj/item/weapon/tool/transforming/powerdrill, - /obj/item/weapon/weldingtool/experimental, - /obj/item/weapon/tool/transforming/jawsoflife, - /obj/item/device/multitool, - /obj/item/stack/cable_coil/random_belt, - /obj/item/device/analyzer - ) - -//Brass -/obj/item/weapon/storage/toolbox/brass - name = "brass toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "brass" - item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") - starts_with = list( - /obj/item/weapon/tool/crowbar/brass, - /obj/item/weapon/tool/wirecutters/brass, - /obj/item/weapon/tool/screwdriver/brass, - /obj/item/weapon/tool/wrench/brass, - /obj/item/weapon/weldingtool/brass - ) - -//Hydro -/obj/item/weapon/storage/toolbox/hydro - name = "hydroponic toolbox" - icon = 'icons/obj/storage_vr.dmi' - icon_state = "green" - item_state_slots = list(slot_r_hand_str = "toolbox_green", slot_l_hand_str = "toolbox_green") - starts_with = list( - /obj/item/device/analyzer/plant_analyzer, - /obj/item/weapon/material/minihoe, - /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/weapon/tool/wirecutters/clippers/trimmers, - /obj/item/weapon/reagent_containers/spray/plantbgone, - /obj/item/weapon/reagent_containers/glass/beaker - ) - -/* - * Lunchboxes - */ - -/obj/item/weapon/storage/toolbox/lunchbox - max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox - name = "rainbow lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_rainbow" - item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink") - desc = "A little lunchbox. This one is the colors of the rainbow!" - w_class = ITEMSIZE_NORMAL - max_w_class = ITEMSIZE_SMALL - var/filled = FALSE - attack_verb = list("lunched") - -/obj/item/weapon/storage/toolbox/lunchbox/Initialize() - if(filled) - var/list/lunches = lunchables_lunches() - var/lunch = lunches[pick(lunches)] - new lunch(src) - - var/list/snacks = lunchables_snacks() - var/snack = snacks[pick(snacks)] - new snack(src) - - var/list/drinks = lunchables_drinks() - var/drink = drinks[pick(drinks)] - new drink(src) - . = ..() - -/obj/item/weapon/storage/toolbox/lunchbox/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/heart - name = "heart lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_lovelyhearts" - item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink") - desc = "A little lunchbox. This one has cute little hearts on it!" - -/obj/item/weapon/storage/toolbox/lunchbox/heart/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/cat - name = "cat lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_sciencecatshow" - item_state_slots = list(slot_r_hand_str = "toolbox_green", slot_l_hand_str = "toolbox_green") - desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" - -/obj/item/weapon/storage/toolbox/lunchbox/cat/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/nt - name = "NanoTrasen brand lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_nanotrasen" - item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") - desc = "A little lunchbox. This one is branded with the NanoTrasen logo!" - -/obj/item/weapon/storage/toolbox/lunchbox/nt/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/mars - name = "\improper Mojave university lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_marsuniversity" - item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") - desc = "A little lunchbox. This one is branded with the Mojave university logo!" - -/obj/item/weapon/storage/toolbox/lunchbox/mars/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/cti - name = "\improper CTI lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_cti" - item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") - desc = "A little lunchbox. This one is branded with the CTI logo!" - -/obj/item/weapon/storage/toolbox/lunchbox/cti/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/nymph - name = "\improper Diona nymph lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_dionanymph" - item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") - desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" - -/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled - filled = TRUE - -/obj/item/weapon/storage/toolbox/lunchbox/syndicate - name = "black and red lunchbox" - icon = 'icons/obj/storage.dmi' - icon_state = "lunchbox_syndie" - item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi") - desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" - -/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled - filled = TRUE +/* + * Toolboxes + */ +/obj/item/weapon/storage/toolbox + name = "toolbox" + desc = "A metal toolbox with remarkably robust construction." + icon = 'icons/obj/storage_vr.dmi' + icon_state = "red" + item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") + center_of_mass = list("x" = 16,"y" = 11) + force = 10 + throwforce = 10 + throw_speed = 1 + throw_range = 7 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_SMALL * 7 //enough to hold all starting contents + origin_tech = list(TECH_COMBAT = 1) + attack_verb = list("robusted") + use_sound = 'sound/items/storage/toolbox.ogg' + drop_sound = 'sound/items/drop/toolbox.ogg' + pickup_sound = 'sound/items/pickup/toolbox.ogg' + +//Emergency +/obj/item/weapon/storage/toolbox/emergency + name = "emergency toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "red" + item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") + starts_with = list( + /obj/item/weapon/tool/crowbar/red, + /obj/item/weapon/extinguisher/mini, + /obj/item/device/radio + ) +/obj/item/weapon/storage/toolbox/emergency/Initialize() + if(prob(50)) + new /obj/item/device/flashlight(src) + else + new /obj/item/device/flashlight/flare(src) + . = ..() + +//Mechanical +/obj/item/weapon/storage/toolbox/mechanical + name = "mechanical toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "blue" + item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") + starts_with = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/crowbar, + /obj/item/device/analyzer, + /obj/item/weapon/tool/wirecutters + ) + +//Electrical +/obj/item/weapon/storage/toolbox/electrical + name = "electrical toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "yellow" + item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") + starts_with = list( + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wirecutters, + /obj/item/device/t_scanner, + /obj/item/weapon/tool/crowbar, + /obj/item/stack/cable_coil/random_belt, + /obj/item/stack/cable_coil/random_belt + ) +/obj/item/weapon/storage/toolbox/electrical/Initialize() + . = ..() + if(prob(5)) + new /obj/item/clothing/gloves/yellow(src) + else + new /obj/item/stack/cable_coil/random(src,30) + calibrate_size() + +//Syndicate +/obj/item/weapon/storage/toolbox/syndicate + name = "black and red toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "syndicate" + item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi") + origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) + force = 14 + starts_with = list( + /obj/item/clothing/gloves/yellow, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/tool/wrench, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/wirecutters, + /obj/item/device/multitool + ) + +/obj/item/weapon/storage/toolbox/syndicate/powertools + starts_with = list( + /obj/item/clothing/gloves/yellow, + /obj/item/weapon/tool/transforming/powerdrill, + /obj/item/weapon/weldingtool/experimental, + /obj/item/weapon/tool/transforming/jawsoflife, + /obj/item/device/multitool, + /obj/item/stack/cable_coil/random_belt, + /obj/item/device/analyzer + ) + +//Brass +/obj/item/weapon/storage/toolbox/brass + name = "brass toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "brass" + item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") + starts_with = list( + /obj/item/weapon/tool/crowbar/brass, + /obj/item/weapon/tool/wirecutters/brass, + /obj/item/weapon/tool/screwdriver/brass, + /obj/item/weapon/tool/wrench/brass, + /obj/item/weapon/weldingtool/brass + ) + +//Hydro +/obj/item/weapon/storage/toolbox/hydro + name = "hydroponic toolbox" + icon = 'icons/obj/storage_vr.dmi' + icon_state = "green" + item_state_slots = list(slot_r_hand_str = "toolbox_green", slot_l_hand_str = "toolbox_green") + starts_with = list( + /obj/item/device/analyzer/plant_analyzer, + /obj/item/weapon/material/minihoe, + /obj/item/weapon/material/knife/machete/hatchet, + /obj/item/weapon/tool/wirecutters/clippers/trimmers, + /obj/item/weapon/reagent_containers/spray/plantbgone, + /obj/item/weapon/reagent_containers/glass/beaker + ) + +/* + * Lunchboxes + */ + +/obj/item/weapon/storage/toolbox/lunchbox + max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox + name = "rainbow lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_rainbow" + item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink") + desc = "A little lunchbox. This one is the colors of the rainbow!" + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL + var/filled = FALSE + attack_verb = list("lunched") + +/obj/item/weapon/storage/toolbox/lunchbox/Initialize() + if(filled) + var/list/lunches = lunchables_lunches() + var/lunch = lunches[pick(lunches)] + new lunch(src) + + var/list/snacks = lunchables_snacks() + var/snack = snacks[pick(snacks)] + new snack(src) + + var/list/drinks = lunchables_drinks() + var/drink = drinks[pick(drinks)] + new drink(src) + . = ..() + +/obj/item/weapon/storage/toolbox/lunchbox/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/heart + name = "heart lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_lovelyhearts" + item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink") + desc = "A little lunchbox. This one has cute little hearts on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/heart/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cat + name = "cat lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_sciencecatshow" + item_state_slots = list(slot_r_hand_str = "toolbox_green", slot_l_hand_str = "toolbox_green") + desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/cat/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nt + name = "NanoTrasen brand lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_nanotrasen" + item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") + desc = "A little lunchbox. This one is branded with the NanoTrasen logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/nt/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/mars + name = "\improper Mojave university lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_marsuniversity" + item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red") + desc = "A little lunchbox. This one is branded with the Mojave university logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/mars/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cti + name = "\improper CTI lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_cti" + item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue") + desc = "A little lunchbox. This one is branded with the CTI logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/cti/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nymph + name = "\improper Diona nymph lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_dionanymph" + item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow") + desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" + +/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate + name = "black and red lunchbox" + icon = 'icons/obj/storage.dmi' + icon_state = "lunchbox_syndie" + item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi") + desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled + filled = TRUE diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 0ff349f476..40b0ef44b4 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -1,114 +1,114 @@ -/* Weapons - * Contains: - * Sword - * Classic Baton - * Telescopic Baton - */ - -/* - * Classic Baton - */ - -/obj/item/weapon/melee - name = "weapon" - desc = "Murder device." - icon = 'icons/obj/weapons.dmi' - icon_state = "baton" - slot_flags = SLOT_BELT - force = 10 - drop_sound = 'sound/items/drop/metalweapon.ogg' - -/obj/item/weapon/melee/classic_baton - name = "police baton" - desc = "A wooden truncheon for beating criminal scum." - icon = 'icons/obj/weapons.dmi' - icon_state = "baton" - item_state = "classic_baton" - slot_flags = SLOT_BELT - force = 10 - drop_sound = 'sound/items/drop/crowbar.ogg' - pickup_sound = 'sound/items/pickup/crowbar.ogg' - -/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You club yourself over the head.") - user.Weaken(3 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BP_HEAD) - else - user.take_organ_damage(2*force) - return - return ..() - -//Telescopic baton -/obj/item/weapon/melee/telebaton - name = "telescopic baton" - desc = "A compact yet rebalanced personal defense weapon. Can be concealed when folded." - icon = 'icons/obj/weapons.dmi' - icon_state = "telebaton0" - item_state = "telebaton0" - slot_flags = SLOT_BELT - w_class = ITEMSIZE_SMALL - force = 3 - drop_sound = 'sound/items/drop/crowbar.ogg' - pickup_sound = 'sound/items/pickup/crowbar.ogg' - var/on = 0 - -/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob) - on = !on - if(on) - user.visible_message("With a flick of their wrist, [user] extends their telescopic baton.",\ - "You extend the baton.",\ - "You hear an ominous click.") - icon_state = "telebaton1" - item_state = icon_state - w_class = ITEMSIZE_NORMAL - force = 15//quite robust - attack_verb = list("smacked", "struck", "slapped") - else - user.visible_message("\The [user] collapses their telescopic baton.",\ - "You collapse the baton.",\ - "You hear a click.") - icon_state = "telebaton0" - item_state = icon_state - w_class = ITEMSIZE_SMALL - force = 3//not so robust now - attack_verb = list("hit", "punched") - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - add_fingerprint(user) - - if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) //updates blood overlay, if any - cut_overlays() - - var/icon/I = new /icon(src.icon, src.icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) - blood_overlay = I - - add_overlay(blood_overlay) - - return - -/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob) - if(on) - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You club yourself over the head.") - user.Weaken(3 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BP_HEAD) - else - user.take_organ_damage(2*force) - return - if(..()) - //playsound(src, "swing_hit", 50, 1, -1) - return - else - return ..() +/* Weapons + * Contains: + * Sword + * Classic Baton + * Telescopic Baton + */ + +/* + * Classic Baton + */ + +/obj/item/weapon/melee + name = "weapon" + desc = "Murder device." + icon = 'icons/obj/weapons.dmi' + icon_state = "baton" + slot_flags = SLOT_BELT + force = 10 + drop_sound = 'sound/items/drop/metalweapon.ogg' + +/obj/item/weapon/melee/classic_baton + name = "police baton" + desc = "A wooden truncheon for beating criminal scum." + icon = 'icons/obj/weapons.dmi' + icon_state = "baton" + item_state = "classic_baton" + slot_flags = SLOT_BELT + force = 10 + drop_sound = 'sound/items/drop/crowbar.ogg' + pickup_sound = 'sound/items/pickup/crowbar.ogg' + +/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "You club yourself over the head.") + user.Weaken(3 * force) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, BRUTE, BP_HEAD) + else + user.take_organ_damage(2*force) + return + return ..() + +//Telescopic baton +/obj/item/weapon/melee/telebaton + name = "telescopic baton" + desc = "A compact yet rebalanced personal defense weapon. Can be concealed when folded." + icon = 'icons/obj/weapons.dmi' + icon_state = "telebaton0" + item_state = "telebaton0" + slot_flags = SLOT_BELT + w_class = ITEMSIZE_SMALL + force = 3 + drop_sound = 'sound/items/drop/crowbar.ogg' + pickup_sound = 'sound/items/pickup/crowbar.ogg' + var/on = 0 + +/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob) + on = !on + if(on) + user.visible_message("With a flick of their wrist, [user] extends their telescopic baton.",\ + "You extend the baton.",\ + "You hear an ominous click.") + icon_state = "telebaton1" + item_state = icon_state + w_class = ITEMSIZE_NORMAL + force = 15//quite robust + attack_verb = list("smacked", "struck", "slapped") + else + user.visible_message("\The [user] collapses their telescopic baton.",\ + "You collapse the baton.",\ + "You hear a click.") + icon_state = "telebaton0" + item_state = icon_state + w_class = ITEMSIZE_SMALL + force = 3//not so robust now + attack_verb = list("hit", "punched") + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + add_fingerprint(user) + + if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) //updates blood overlay, if any + cut_overlays() + + var/icon/I = new /icon(src.icon, src.icon_state) + I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) + I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) + blood_overlay = I + + add_overlay(blood_overlay) + + return + +/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob) + if(on) + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "You club yourself over the head.") + user.Weaken(3 * force) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, BRUTE, BP_HEAD) + else + user.take_organ_damage(2*force) + return + if(..()) + //playsound(src, "swing_hit", 50, 1, -1) + return + else + return ..() diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 8bb5bb465b..10724e2e3d 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -1,137 +1,137 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/weapon/tank/jetpack - name = "jetpack (empty)" - desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." - icon = 'icons/obj/tank_vr.dmi' //VOREStation Edit - icon_state = "jetpack" - gauge_icon = null - w_class = ITEMSIZE_LARGE - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', - ) - item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/datum/effect/effect/system/ion_trail_follow/ion_trail - var/on = 0.0 - var/stabilization_on = 0 - var/volume_rate = 500 //Needed for borg jetpack transfer - action_button_name = "Toggle Jetpack" - -/obj/item/weapon/tank/jetpack/New() - ..() - ion_trail = new /datum/effect/effect/system/ion_trail_follow() - ion_trail.set_up(src) - -/obj/item/weapon/tank/jetpack/Destroy() - QDEL_NULL(ion_trail) - return ..() - -/obj/item/weapon/tank/jetpack/examine(mob/user) - . = ..() - if(air_contents.total_moles < 5) - . += "The meter on \the [src] indicates you are almost out of gas!" - playsound(src, 'sound/effects/alert.ogg', 50, 1) - -/obj/item/weapon/tank/jetpack/verb/toggle_rockets() - set name = "Toggle Jetpack Stabilization" - set category = "Object" - stabilization_on = !( stabilization_on ) - to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") - -/obj/item/weapon/tank/jetpack/verb/toggle() - set name = "Toggle Jetpack" - set category = "Object" - - on = !on - if(on) - icon_state = "[icon_state]-on" - ion_trail.start() - else - icon_state = initial(icon_state) - ion_trail.stop() - - if (ismob(usr)) - var/mob/M = usr - M.update_inv_back() - M.update_action_buttons() - - to_chat(usr, "You toggle the thrusters [on? "on":"off"].") - -/obj/item/weapon/tank/jetpack/proc/get_gas_supply() - return air_contents - -/obj/item/weapon/tank/jetpack/proc/can_thrust(num) - if(!on) - return 0 - - var/datum/gas_mixture/fuel = get_gas_supply() - if(num < 0.005 || !fuel || fuel.total_moles < num) - ion_trail.stop() - return 0 - - return 1 - -/obj/item/weapon/tank/jetpack/proc/do_thrust(num, mob/living/user) - if(!can_thrust(num)) - return 0 - - var/datum/gas_mixture/fuel = get_gas_supply() - fuel.remove(num) - return 1 - -/obj/item/weapon/tank/jetpack/ui_action_click() - toggle() - -/obj/item/weapon/tank/jetpack/void - name = "void jetpack (oxygen)" - desc = "It works well in a void." - icon_state = "jetpack-void" - item_state_slots = list(slot_r_hand_str = "jetpack-void", slot_l_hand_str = "jetpack-void") - -/obj/item/weapon/tank/jetpack/void/Initialize() - . = ..() - air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/jetpack/oxygen - name = "jetpack (oxygen)" - desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") - -/obj/item/weapon/tank/jetpack/oxygen/Initialize() - . = ..() - air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/jetpack/breaker - name = "CSC industrial jetpack" - desc = "A JetFast EVA thruster pack. A warning label clearly states \'WARNING: CONTAINS VOLATILE REACTION MASS TOXIC TO MOST LIFEFORMS. NOT TO BE USED WITH CLOSED CYCLE BREATHING SYSTEMS.\'" - icon_state = "jetpack-breaker" - item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") - -/obj/item/weapon/tank/jetpack/breaker/Initialize() - . = ..() - air_contents.adjust_gas("volatile_fuel", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/jetpack/carbondioxide - name = "jetpack (carbon dioxide)" - desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." - distribute_pressure = 0 - icon_state = "jetpack-black" - item_state_slots = list(slot_r_hand_str = "jetpack-black", slot_l_hand_str = "jetpack-black") - -/obj/item/weapon/tank/jetpack/carbondioxide/Initialize() - . = ..() - air_contents.adjust_gas("carbon_dioxide", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/jetpack/rig - name = "jetpack" - var/obj/item/weapon/rig/holder - -/obj/item/weapon/tank/jetpack/rig/examine() - . = ..() - . += "It's a jetpack. If you can see this, report it on the bug tracker." - -/obj/item/weapon/tank/jetpack/rig/get_gas_supply() - return holder?.air_supply?.air_contents +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/weapon/tank/jetpack + name = "jetpack (empty)" + desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." + icon = 'icons/obj/tank_vr.dmi' //VOREStation Edit + icon_state = "jetpack" + gauge_icon = null + w_class = ITEMSIZE_LARGE + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', + ) + item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + var/datum/effect/effect/system/ion_trail_follow/ion_trail + var/on = 0.0 + var/stabilization_on = 0 + var/volume_rate = 500 //Needed for borg jetpack transfer + action_button_name = "Toggle Jetpack" + +/obj/item/weapon/tank/jetpack/New() + ..() + ion_trail = new /datum/effect/effect/system/ion_trail_follow() + ion_trail.set_up(src) + +/obj/item/weapon/tank/jetpack/Destroy() + QDEL_NULL(ion_trail) + return ..() + +/obj/item/weapon/tank/jetpack/examine(mob/user) + . = ..() + if(air_contents.total_moles < 5) + . += "The meter on \the [src] indicates you are almost out of gas!" + playsound(src, 'sound/effects/alert.ogg', 50, 1) + +/obj/item/weapon/tank/jetpack/verb/toggle_rockets() + set name = "Toggle Jetpack Stabilization" + set category = "Object" + stabilization_on = !( stabilization_on ) + to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") + +/obj/item/weapon/tank/jetpack/verb/toggle() + set name = "Toggle Jetpack" + set category = "Object" + + on = !on + if(on) + icon_state = "[icon_state]-on" + ion_trail.start() + else + icon_state = initial(icon_state) + ion_trail.stop() + + if (ismob(usr)) + var/mob/M = usr + M.update_inv_back() + M.update_action_buttons() + + to_chat(usr, "You toggle the thrusters [on? "on":"off"].") + +/obj/item/weapon/tank/jetpack/proc/get_gas_supply() + return air_contents + +/obj/item/weapon/tank/jetpack/proc/can_thrust(num) + if(!on) + return 0 + + var/datum/gas_mixture/fuel = get_gas_supply() + if(num < 0.005 || !fuel || fuel.total_moles < num) + ion_trail.stop() + return 0 + + return 1 + +/obj/item/weapon/tank/jetpack/proc/do_thrust(num, mob/living/user) + if(!can_thrust(num)) + return 0 + + var/datum/gas_mixture/fuel = get_gas_supply() + fuel.remove(num) + return 1 + +/obj/item/weapon/tank/jetpack/ui_action_click() + toggle() + +/obj/item/weapon/tank/jetpack/void + name = "void jetpack (oxygen)" + desc = "It works well in a void." + icon_state = "jetpack-void" + item_state_slots = list(slot_r_hand_str = "jetpack-void", slot_l_hand_str = "jetpack-void") + +/obj/item/weapon/tank/jetpack/void/Initialize() + . = ..() + air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/jetpack/oxygen + name = "jetpack (oxygen)" + desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." + icon_state = "jetpack" + item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") + +/obj/item/weapon/tank/jetpack/oxygen/Initialize() + . = ..() + air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/jetpack/breaker + name = "CSC industrial jetpack" + desc = "A JetFast EVA thruster pack. A warning label clearly states \'WARNING: CONTAINS VOLATILE REACTION MASS TOXIC TO MOST LIFEFORMS. NOT TO BE USED WITH CLOSED CYCLE BREATHING SYSTEMS.\'" + icon_state = "jetpack-breaker" + item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack") + +/obj/item/weapon/tank/jetpack/breaker/Initialize() + . = ..() + air_contents.adjust_gas("volatile_fuel", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/jetpack/carbondioxide + name = "jetpack (carbon dioxide)" + desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." + distribute_pressure = 0 + icon_state = "jetpack-black" + item_state_slots = list(slot_r_hand_str = "jetpack-black", slot_l_hand_str = "jetpack-black") + +/obj/item/weapon/tank/jetpack/carbondioxide/Initialize() + . = ..() + air_contents.adjust_gas("carbon_dioxide", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/jetpack/rig + name = "jetpack" + var/obj/item/weapon/rig/holder + +/obj/item/weapon/tank/jetpack/rig/examine() + . = ..() + . += "It's a jetpack. If you can see this, report it on the bug tracker." + +/obj/item/weapon/tank/jetpack/rig/get_gas_supply() + return holder?.air_supply?.air_contents diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 5a310cd47b..ae3535ec0b 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -1,232 +1,232 @@ -/* Types of tanks! - * Contains: - * Oxygen - * Anesthetic - * Air - * Phoron - * Emergency Oxygen - */ - -/* - * Oxygen - */ -/obj/item/weapon/tank/oxygen - name = "oxygen tank" - desc = "A tank of oxygen." - icon_state = "oxygen" - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - -/obj/item/weapon/tank/oxygen/Initialize() - . = ..() - air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/oxygen/examine(mob/user) - . = ..() - if(loc == user && (air_contents.gas["oxygen"] < 10)) - . += "The meter on \the [src] indicates you are almost out of oxygen!" - -/obj/item/weapon/tank/oxygen/yellow - desc = "A tank of oxygen, this one is yellow." - icon_state = "oxygen_f" - -/obj/item/weapon/tank/oxygen/red - desc = "A tank of oxygen, this one is red." - icon_state = "oxygen_fr" - -/* - * Anesthetic - */ -/obj/item/weapon/tank/anesthetic - name = "anesthetic tank" - desc = "A tank with an N2O/O2 gas mix." - icon_state = "anesthetic" - -/obj/item/weapon/tank/anesthetic/Initialize() - . = ..() - - air_contents.gas["oxygen"] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gas["nitrous_oxide"] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD - air_contents.update_values() - -/* - * Air - */ -/obj/item/weapon/tank/air - name = "air tank" - desc = "Mixed. Shaken, not stirred." // CHOMP EDIT Haha funny? idk I like this description. - icon_state = "oxygen" - -/obj/item/weapon/tank/air/examine(mob/user) - . = ..() - if(loc == user && (air_contents.gas["oxygen"] < 1)) - . += "The meter on \the [src] indicates you are almost out of air!" - user << sound('sound/effects/alert.ogg') - -/obj/item/weapon/tank/air/Initialize() - . = ..() - src.air_contents.adjust_multi("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, "nitrogen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) - -/* - * Phoron - */ -/obj/item/weapon/tank/phoron - name = "phoron tank" - desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable." - icon_state = "phoron" - gauge_icon = null - slot_flags = null //they have no straps! - -/obj/item/weapon/tank/phoron/Initialize() - . = ..() - src.air_contents.adjust_gas("phoron", (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/phoron/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - - if (istype(W, /obj/item/weapon/flamethrower)) - var/obj/item/weapon/flamethrower/F = W - if ((!F.status)||(F.ptank)) return - src.master = F - F.ptank = src - user.remove_from_mob(src) - src.loc = F - return - -/obj/item/weapon/tank/vox //Can't be a child of phoron or the gas amount gets screwey. - name = "phoron tank" - desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable." - icon_state = "phoron_vox" - gauge_icon = "indicator_bigtank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - slot_flags = SLOT_BACK //these ones have straps! - -/obj/item/weapon/tank/vox/Initialize() - . = ..() - air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) //VOREStation Edit - -/obj/item/weapon/tank/phoron/pressurized - name = "fuel can" - icon_state = "phoron_vox" - w_class = ITEMSIZE_NORMAL - -/obj/item/weapon/tank/phoron/pressurized/Initialize() - . = ..() - adjust_scale(0.8) - air_contents.adjust_gas("phoron", (7*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/* - * Emergency Oxygen - */ - -/obj/item/weapon/tank/emergency - name = "emergency tank" - icon_state = "emergency" - gauge_icon = "indicator_smalltank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome - gauge_cap = 4 - slot_flags = SLOT_BELT - w_class = ITEMSIZE_SMALL - force = 4 - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) - -/obj/item/weapon/tank/emergency/oxygen - name = "emergency oxygen tank" - desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it." - icon_state = "emergency" - gauge_icon = "indicator_smalltank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome - -/obj/item/weapon/tank/emergency/oxygen/Initialize() - . = ..() - src.air_contents.adjust_gas("oxygen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/emergency/oxygen/examine(mob/user) - . = ..() - if(loc == user && (air_contents.gas["oxygen"] < 0.2)) - . += "The meter on the [src.name] indicates you are almost out of air!" - user << sound('sound/effects/alert.ogg') - -/obj/item/weapon/tank/emergency/oxygen/engi - name = "extended-capacity emergency oxygen tank" - icon_state = "emergency_engi" - volume = 6 - -/obj/item/weapon/tank/emergency/oxygen/double - name = "double emergency oxygen tank" - icon_state = "emergency_double" - gauge_icon = "indicator_double" // CHOMP EDIT proper gauge icon - volume = 12 // CHOMP EDIT Double Expanded - -/obj/item/weapon/tank/stasis/oxygen // Stasis bags need to have initial pressure within safe bounds for human atmospheric pressure (NOT breath pressure) - name = "stasis oxygen tank" - desc = "Oxygen tank included in most stasis bag designs." - icon = 'icons/obj/tank_ch.dmi' // CHOMP ADD Adds a unique icon to the oxygen tank in stasis bags. - icon_state = "stasis_oxygen" // CHOMP ADD - gauge_icon = "indicator_stasis" // CHOMP ADD - volume = 10 - -/obj/item/weapon/tank/stasis/oxygen/Initialize() - . = ..() - src.air_contents.adjust_gas("oxygen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/emergency/nitrogen - name = "emergency nitrogen tank" - desc = "An emergency nitrogen tank." // CHOMP EDIT They get their own :) - icon_state = "emergency_nitrogen" // :) - gauge_icon = "indicator_smalltank" // :) - -/obj/item/weapon/tank/emergency/nitrogen/Initialize() - . = ..() - src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/emergency/nitrogen/double - name = "double emergency nitrogen tank" - icon_state = "emergency_double_vox_old" // CHOMP EDIT Nitrogen double gets its OWN sprite >:3c - gauge_icon = "indicator_double" // <3 - volume = 12 // CHOMP EDIT Double Expanded - -/obj/item/weapon/tank/emergency/phoron - name = "emergency phoron tank" - desc = "An emergency phoron tank." // CHOMP EDIT You get a unique sprite! - icon_state = "emergency_phoron_vox" // And you get a unique sprite! - gauge_icon = "indicator_smalltank" // Look under your chairs! You all get unique sprites! - -/obj/item/weapon/tank/emergency/phoron/Initialize() - . = ..() - src.air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - -/obj/item/weapon/tank/emergency/phoron/double - name = "double emergency phoron tank" - icon_state = "emergency_double_vox" // CHOMP EDIT Unique sprites. :) - gauge_icon = "indicator_double" // Ensuring unique sprite stuff ig. - volume = 10 - -/* - * Nitrogen - */ -/obj/item/weapon/tank/nitrogen - name = "nitrogen tank" - desc = "A tank of nitrogen." - icon_state = "oxygen_fr" - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - -/obj/item/weapon/tank/nitrogen/Initialize() - . = ..() - src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) //CHOMPedit - -/obj/item/weapon/tank/nitrogen/examine(mob/user) - . = ..() - if(loc == user && (air_contents.gas["nitrogen"] < 10)) - . += "The meter on \the [src] indicates you are almost out of nitrogen!" - //playsound(user, 'sound/effects/alert.ogg', 50, 1) - -/obj/item/weapon/tank/stasis/nitro_cryo // Synthmorph bags need to have initial pressure within safe bounds for human atmospheric pressure, but low temperature to stop unwanted degredation. - name = "stasis cryogenic nitrogen tank" - desc = "Cryogenic Nitrogen tank included in most synthmorph bag designs." - icon = 'icons/obj/tank_ch.dmi' // CHOMP ADD Adds a stasis sprite unique to this icon. - icon_state = "stasis_nitrogen" // CHOMP ADD - gauge_icon = "indicator_stasis" // CHOMP ADD - volume = 10 - -/obj/item/weapon/tank/stasis/nitro_cryo/Initialize() - . = ..() - src.air_contents.adjust_gas_temp("nitrogen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C) +/* Types of tanks! + * Contains: + * Oxygen + * Anesthetic + * Air + * Phoron + * Emergency Oxygen + */ + +/* + * Oxygen + */ +/obj/item/weapon/tank/oxygen + name = "oxygen tank" + desc = "A tank of oxygen." + icon_state = "oxygen" + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + +/obj/item/weapon/tank/oxygen/Initialize() + . = ..() + air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/oxygen/examine(mob/user) + . = ..() + if(loc == user && (air_contents.gas["oxygen"] < 10)) + . += "The meter on \the [src] indicates you are almost out of oxygen!" + +/obj/item/weapon/tank/oxygen/yellow + desc = "A tank of oxygen, this one is yellow." + icon_state = "oxygen_f" + +/obj/item/weapon/tank/oxygen/red + desc = "A tank of oxygen, this one is red." + icon_state = "oxygen_fr" + +/* + * Anesthetic + */ +/obj/item/weapon/tank/anesthetic + name = "anesthetic tank" + desc = "A tank with an N2O/O2 gas mix." + icon_state = "anesthetic" + +/obj/item/weapon/tank/anesthetic/Initialize() + . = ..() + + air_contents.gas["oxygen"] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gas["nitrous_oxide"] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.update_values() + +/* + * Air + */ +/obj/item/weapon/tank/air + name = "air tank" + desc = "Mixed. Shaken, not stirred." // CHOMP EDIT Haha funny? idk I like this description. + icon_state = "oxygen" + +/obj/item/weapon/tank/air/examine(mob/user) + . = ..() + if(loc == user && (air_contents.gas["oxygen"] < 1)) + . += "The meter on \the [src] indicates you are almost out of air!" + user << sound('sound/effects/alert.ogg') + +/obj/item/weapon/tank/air/Initialize() + . = ..() + src.air_contents.adjust_multi("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, "nitrogen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) + +/* + * Phoron + */ +/obj/item/weapon/tank/phoron + name = "phoron tank" + desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable." + icon_state = "phoron" + gauge_icon = null + slot_flags = null //they have no straps! + +/obj/item/weapon/tank/phoron/Initialize() + . = ..() + src.air_contents.adjust_gas("phoron", (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/phoron/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + + if (istype(W, /obj/item/weapon/flamethrower)) + var/obj/item/weapon/flamethrower/F = W + if ((!F.status)||(F.ptank)) return + src.master = F + F.ptank = src + user.remove_from_mob(src) + src.loc = F + return + +/obj/item/weapon/tank/vox //Can't be a child of phoron or the gas amount gets screwey. + name = "phoron tank" + desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable." + icon_state = "phoron_vox" + gauge_icon = "indicator_bigtank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + slot_flags = SLOT_BACK //these ones have straps! + +/obj/item/weapon/tank/vox/Initialize() + . = ..() + air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) //VOREStation Edit + +/obj/item/weapon/tank/phoron/pressurized + name = "fuel can" + icon_state = "phoron_vox" + w_class = ITEMSIZE_NORMAL + +/obj/item/weapon/tank/phoron/pressurized/Initialize() + . = ..() + adjust_scale(0.8) + air_contents.adjust_gas("phoron", (7*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/* + * Emergency Oxygen + */ + +/obj/item/weapon/tank/emergency + name = "emergency tank" + icon_state = "emergency" + gauge_icon = "indicator_smalltank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome + gauge_cap = 4 + slot_flags = SLOT_BELT + w_class = ITEMSIZE_SMALL + force = 4 + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) + +/obj/item/weapon/tank/emergency/oxygen + name = "emergency oxygen tank" + desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it." + icon_state = "emergency" + gauge_icon = "indicator_smalltank" // CHOMP EDIT fixes indicator to ensure there's never a buggy outcome + +/obj/item/weapon/tank/emergency/oxygen/Initialize() + . = ..() + src.air_contents.adjust_gas("oxygen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/emergency/oxygen/examine(mob/user) + . = ..() + if(loc == user && (air_contents.gas["oxygen"] < 0.2)) + . += "The meter on the [src.name] indicates you are almost out of air!" + user << sound('sound/effects/alert.ogg') + +/obj/item/weapon/tank/emergency/oxygen/engi + name = "extended-capacity emergency oxygen tank" + icon_state = "emergency_engi" + volume = 6 + +/obj/item/weapon/tank/emergency/oxygen/double + name = "double emergency oxygen tank" + icon_state = "emergency_double" + gauge_icon = "indicator_double" // CHOMP EDIT proper gauge icon + volume = 12 // CHOMP EDIT Double Expanded + +/obj/item/weapon/tank/stasis/oxygen // Stasis bags need to have initial pressure within safe bounds for human atmospheric pressure (NOT breath pressure) + name = "stasis oxygen tank" + desc = "Oxygen tank included in most stasis bag designs." + icon = 'icons/obj/tank_ch.dmi' // CHOMP ADD Adds a unique icon to the oxygen tank in stasis bags. + icon_state = "stasis_oxygen" // CHOMP ADD + gauge_icon = "indicator_stasis" // CHOMP ADD + volume = 10 + +/obj/item/weapon/tank/stasis/oxygen/Initialize() + . = ..() + src.air_contents.adjust_gas("oxygen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/emergency/nitrogen + name = "emergency nitrogen tank" + desc = "An emergency nitrogen tank." // CHOMP EDIT They get their own :) + icon_state = "emergency_nitrogen" // :) + gauge_icon = "indicator_smalltank" // :) + +/obj/item/weapon/tank/emergency/nitrogen/Initialize() + . = ..() + src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/emergency/nitrogen/double + name = "double emergency nitrogen tank" + icon_state = "emergency_double_vox_old" // CHOMP EDIT Nitrogen double gets its OWN sprite >:3c + gauge_icon = "indicator_double" // <3 + volume = 12 // CHOMP EDIT Double Expanded + +/obj/item/weapon/tank/emergency/phoron + name = "emergency phoron tank" + desc = "An emergency phoron tank." // CHOMP EDIT You get a unique sprite! + icon_state = "emergency_phoron_vox" // And you get a unique sprite! + gauge_icon = "indicator_smalltank" // Look under your chairs! You all get unique sprites! + +/obj/item/weapon/tank/emergency/phoron/Initialize() + . = ..() + src.air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +/obj/item/weapon/tank/emergency/phoron/double + name = "double emergency phoron tank" + icon_state = "emergency_double_vox" // CHOMP EDIT Unique sprites. :) + gauge_icon = "indicator_double" // Ensuring unique sprite stuff ig. + volume = 10 + +/* + * Nitrogen + */ +/obj/item/weapon/tank/nitrogen + name = "nitrogen tank" + desc = "A tank of nitrogen." + icon_state = "oxygen_fr" + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + +/obj/item/weapon/tank/nitrogen/Initialize() + . = ..() + src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) //CHOMPedit + +/obj/item/weapon/tank/nitrogen/examine(mob/user) + . = ..() + if(loc == user && (air_contents.gas["nitrogen"] < 10)) + . += "The meter on \the [src] indicates you are almost out of nitrogen!" + //playsound(user, 'sound/effects/alert.ogg', 50, 1) + +/obj/item/weapon/tank/stasis/nitro_cryo // Synthmorph bags need to have initial pressure within safe bounds for human atmospheric pressure, but low temperature to stop unwanted degredation. + name = "stasis cryogenic nitrogen tank" + desc = "Cryogenic Nitrogen tank included in most synthmorph bag designs." + icon = 'icons/obj/tank_ch.dmi' // CHOMP ADD Adds a stasis sprite unique to this icon. + icon_state = "stasis_nitrogen" // CHOMP ADD + gauge_icon = "indicator_stasis" // CHOMP ADD + volume = 10 + +/obj/item/weapon/tank/stasis/nitro_cryo/Initialize() + . = ..() + src.air_contents.adjust_gas_temp("nitrogen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 26ca107281..8c176ecbbb 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -1,671 +1,671 @@ -#define TANK_IDEAL_PRESSURE 1015 //Arbitrary. - -var/list/global/tank_gauge_cache = list() - -/obj/item/weapon/tank - name = "tank" - icon = 'icons/obj/tank.dmi' - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/back/mob_teshari.dmi' - ) - drop_sound = 'sound/items/drop/gascan.ogg' - pickup_sound = 'sound/items/pickup/gascan.ogg' - - var/gauge_icon = "indicator_tank" - var/last_gauge_pressure - var/gauge_cap = 6 - - slot_flags = SLOT_BACK - w_class = ITEMSIZE_NORMAL - - force = 5.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 4 - - var/datum/gas_mixture/air_contents = null - var/distribute_pressure = ONE_ATMOSPHERE - var/integrity = 20 - var/maxintegrity = 20 - var/valve_welded = 0 - var/obj/item/device/tankassemblyproxy/proxyassembly - - var/volume = 70 - var/manipulated_by = null //Used by _onclick/hud/screen_objects.dm internals to determine if someone has messed with our tank or not. - //If they have and we haven't scanned it with the PDA or gas analyzer then we might just breath whatever they put in it. - - var/failure_temp = 173 //173 deg C Borate seal (yes it should be 153 F, but that's annoying) - var/leaking = 0 - var/wired = 0 - - description_info = "These tanks are utilised to store any of the various types of gaseous substances. \ - They can be attached to various portable atmospheric devices to be filled or emptied.
                    \ -
                    \ - Each tank is fitted with an emergency relief valve. This relief valve will open if the tank is pressurised to over ~3000kPa or heated to over 173ºC. \ - The valve itself will close after expending most or all of the contents into the air.
                    \ -
                    \ - Filling a tank such that experiences ~4000kPa of pressure will cause the tank to rupture, spilling out its contents and destroying the tank. \ - Tanks filled over ~5000kPa will rupture rather violently, exploding with significant force." - - description_antag = "Each tank may be incited to burn by attaching wires and an igniter assembly, though the igniter can only be used once and the mixture only burn if the igniter pushes a flammable gas mixture above the minimum burn temperature (126ºC). \ - Wired and assembled tanks may be disarmed with a set of wirecutters. Any exploding or rupturing tank will generate shrapnel, assuming their relief valves have been welded beforehand. Even if not, they can be incited to expel hot gas on ignition if pushed above 173ºC. \ - Relatively easy to make, the single tank bomb requries no tank transfer valve, and is still a fairly formidable weapon that can be manufactured from any tank." - -/obj/item/weapon/tank/proc/init_proxy() - var/obj/item/device/tankassemblyproxy/proxy = new /obj/item/device/tankassemblyproxy(src) - proxy.tank = src - src.proxyassembly = proxy - - -/obj/item/weapon/tank/Initialize() - . = ..() - - src.init_proxy() - src.air_contents = new /datum/gas_mixture() - src.air_contents.volume = volume //liters - src.air_contents.temperature = T20C - update_gauge() - -/obj/item/weapon/tank/Destroy() - QDEL_NULL(air_contents) - - STOP_PROCESSING(SSobj, src) - QDEL_NULL(src.proxyassembly) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - - . = ..() - -/obj/item/weapon/tank/equipped() // Note that even grabbing into a hand calls this, so it should be fine as a 'has a player touched this' - . = ..() - // An attempt at optimization. There are MANY tanks during rounds that will never get touched. - // Don't see why any of those would explode spontaneously. So only tanks that players touch get processed. - // This could be optimized more, but it's a start! - START_PROCESSING(SSobj, src) // This has a built in safety to avoid multi-processing - -/obj/item/weapon/tank/examine(mob/user) - . = ..() - if(loc == user) - var/celsius_temperature = air_contents.temperature - T0C - var/descriptive - switch(celsius_temperature) - if(300 to INFINITY) - descriptive = "furiously hot" - if(100 to 300) - descriptive = "hot" - if(80 to 100) - descriptive = "warm" - if(40 to 80) - descriptive = "lukewarm" - if(20 to 40) - descriptive = "room temperature" - if(-20 to 20) - descriptive = "cold" - else - descriptive = "bitterly cold" - . += "\The [src] feels [descriptive]." - - if(src.proxyassembly.assembly || wired) - . += "It seems to have [wired? "some wires ": ""][wired && src.proxyassembly.assembly? "and ":""][src.proxyassembly.assembly ? "some sort of assembly ":""]attached to it." - if(src.valve_welded) - . += "\The [src] emergency relief valve has been welded shut!" - - -/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if (istype(src.loc, /obj/item/assembly)) - icon = src.loc - - else if (istype(W,/obj/item/latexballon)) - var/obj/item/latexballon/LB = W - LB.blow(src) - src.add_fingerprint(user) - - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(1)) - wired = 1 - to_chat(user, "You attach the wires to the tank.") - src.add_bomb_overlay() - - if(W.has_tool_quality(TOOL_WIRECUTTER)) - if(wired && src.proxyassembly.assembly) - - to_chat(user, "You carefully begin clipping the wires that attach to the tank.") - if(do_after(user, 100,src)) - wired = 0 - cut_overlay("bomb_assembly") - to_chat(user, "You cut the wire and remove the device.") - - var/obj/item/device/assembly_holder/assy = src.proxyassembly.assembly - if(assy.a_left && assy.a_right) - assy.dropInto(usr.loc) - assy.master = null - src.proxyassembly.assembly = null - else - if(!src.proxyassembly.assembly.a_left) - assy.a_right.dropInto(usr.loc) - assy.a_right.holder = null - assy.a_right = null - src.proxyassembly.assembly = null - qdel(assy) - cut_overlays() - last_gauge_pressure = 0 - update_gauge() - - else - to_chat(user, "You slip and bump the igniter!") - if(prob(85)) - src.proxyassembly.receive_signal() - - else if(wired) - if(do_after(user, 10, src)) - to_chat(user, "You quickly clip the wire from the tank.") - wired = 0 - cut_overlay("bomb_assembly") - - else - to_chat(user, "There are no wires to cut!") - - - - if(istype(W, /obj/item/device/assembly_holder)) - if(wired) - to_chat(user, "You begin attaching the assembly to \the [src].") - if(do_after(user, 50, src)) - to_chat(user, "You finish attaching the assembly to \the [src].") - bombers += "[key_name(user)] attached an assembly to a wired [src]. Temp: [src.air_contents.temperature-T0C]" - message_admins("[key_name_admin(user)] attached an assembly to a wired [src]. Temp: [src.air_contents.temperature-T0C]") - assemble_bomb(W,user) - else - to_chat(user, "You stop attaching the assembly.") - else - to_chat(user, "You need to wire the device up first.") - - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(1,user)) - if(!valve_welded) - to_chat(user, "You begin welding the \the [src] emergency pressure relief valve.") - if(do_after(user, 40,src)) - to_chat(user, "You carefully weld \the [src] emergency pressure relief valve shut. \The [src] may now rupture under pressure!") - src.valve_welded = 1 - src.leaking = 0 - else - bombers += "[key_name(user)] attempted to weld a [src]. [src.air_contents.temperature-T0C]" - message_admins("[key_name_admin(user)] attempted to weld a [src]. [src.air_contents.temperature-T0C]") - if(WT.welding) - to_chat(user, "You accidentally rake \the [W] across \the [src]!") - maxintegrity -= rand(2,6) - integrity = min(integrity,maxintegrity) - src.air_contents.add_thermal_energy(rand(2000,50000)) - WT.eyecheck(user) - else - to_chat(user, "The emergency pressure relief valve has already been welded.") - add_fingerprint(user) - - - -/obj/item/weapon/tank/attack_self(mob/user as mob) - add_fingerprint(user) - if (!(src.air_contents)) - return - tgui_interact(user) - -// There's GOT to be a better way to do this - if (src.proxyassembly.assembly) - src.proxyassembly.assembly.attack_self(user) - -/obj/item/weapon/tank/tgui_state(mob/user) - return GLOB.tgui_deep_inventory_state - -/obj/item/weapon/tank/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Tank", name) - ui.open() - -/obj/item/weapon/tank/tgui_data(mob/user) - var/list/data = list() - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = 0 - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - - var/mob/living/carbon/C = user - if(!istype(C)) - C = loc.loc - if(!istype(C)) - return data - - if(C.internal == src) - data["connected"] = TRUE - else - data["connected"] = FALSE - - data["maskConnected"] = FALSE - if(C.wear_mask && (C.wear_mask.item_flags & AIRTIGHT)) - data["maskConnected"] = TRUE - else if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(H.head && (H.head.item_flags & AIRTIGHT)) - data["maskConnected"] = TRUE - - return data - -/obj/item/weapon/tank/tgui_act(action, params) - if(..()) - return TRUE - switch(action) - if("pressure") - var/pressure = params["pressure"] - if(pressure == "reset") - pressure = TANK_DEFAULT_RELEASE_PRESSURE - . = TRUE - else if(pressure == "min") - pressure = 0 - . = TRUE - else if(pressure == "max") - pressure = TANK_MAX_RELEASE_PRESSURE - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - distribute_pressure = clamp(round(pressure), 0, TANK_MAX_RELEASE_PRESSURE) - if("toggle") - toggle_valve(usr) - . = TRUE - - add_fingerprint(usr) - -/obj/item/weapon/tank/proc/toggle_valve(var/mob/user) - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - location.internal = null - location.internals.icon_state = "internal0" - to_chat(user, "You close the tank release valve.") - if (location.internals) - location.internals.icon_state = "internal0" - else - var/can_open_valve - if(location.wear_mask && (location.wear_mask.item_flags & AIRTIGHT)) - can_open_valve = 1 - else if(istype(location,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.item_flags & AIRTIGHT)) - can_open_valve = 1 - - if(can_open_valve) - location.internal = src - to_chat(user, "You open \the [src] valve.") - if (location.internals) - location.internals.icon_state = "internal1" - else - to_chat(user, "You need something to connect to \the [src].") - - - -/obj/item/weapon/tank/remove_air(amount) - return air_contents.remove(amount) - -/obj/item/weapon/tank/proc/remove_air_by_flag(flag, amount) - return air_contents.remove_by_flag(flag, amount) - -/obj/item/weapon/tank/return_air() - return air_contents - -/obj/item/weapon/tank/assume_air(datum/gas_mixture/giver) - air_contents.merge(giver) - - check_status() - return 1 - -/obj/item/weapon/tank/proc/remove_air_volume(volume_to_return) - if(!air_contents) - return null - - var/tank_pressure = air_contents.return_pressure() - if(tank_pressure < distribute_pressure) - distribute_pressure = tank_pressure - - var/moles_needed = distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - return remove_air(moles_needed) - -/obj/item/weapon/tank/process() - if(!air_contents) - return - //Allow for reactions - air_contents.react() //cooking up air tanks - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE - if(gauge_icon) - update_gauge() - check_status() - - -/obj/item/weapon/tank/proc/add_bomb_overlay() - if(src.wired) - add_overlay("bomb_assembly") - if(src.proxyassembly.assembly) - var/icon/test = getFlatIcon(src.proxyassembly.assembly) - test.Shift(SOUTH,1) - test.Shift(WEST,3) - add_overlay(test) - - -/obj/item/weapon/tank/proc/update_gauge() - var/gauge_pressure = 0 - if(air_contents) - gauge_pressure = air_contents.return_pressure() - if(gauge_pressure > TANK_IDEAL_PRESSURE) - gauge_pressure = -1 - else - gauge_pressure = round((gauge_pressure/TANK_IDEAL_PRESSURE)*gauge_cap) - - if(gauge_pressure == last_gauge_pressure) - return - - last_gauge_pressure = gauge_pressure - cut_overlays() - add_bomb_overlay() - var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]" - if(!tank_gauge_cache[indicator]) - tank_gauge_cache[indicator] = image(icon, indicator) - add_overlay(tank_gauge_cache[indicator]) - - - - - - -/obj/item/weapon/tank/proc/check_status() - //Handle exploding, leaking, and rupturing of the tank - - if(!air_contents) - return 0 - - var/pressure = air_contents.return_pressure() - - - if(pressure > TANK_FRAGMENT_PRESSURE) - if(integrity <= 7) - if(!istype(src.loc,/obj/item/device/transfer_valve)) - message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") - log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") - - //Give the gas a chance to build up more pressure through reacting - air_contents.react() - air_contents.react() - air_contents.react() - - pressure = air_contents.return_pressure() - var/strength = ((pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE) - - var/mult = ((src.air_contents.volume/140)**(1/2)) * (air_contents.total_moles**(2/3))/((29*0.64) **(2/3)) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - - - - var/turf/simulated/T = get_turf(src) - T.hotspot_expose(src.air_contents.temperature, 70, 1) - if(!T) - return - - T.assume_air(air_contents) - explosion( - get_turf(loc), - round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)), - round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)), - round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)), - round(min(BOMBCAP_FLASH_RADIUS, ((mult)*strength)*1.20)), - ) - - - var/num_fragments = round(rand(8,10) * sqrt(strength * mult)) - src.fragmentate(T, num_fragments, rand(5) + 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 7,/obj/item/projectile/bullet/pellet/fragment/tank = 2,/obj/item/projectile/bullet/pellet/fragment/strong = 1)) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - qdel(TTV) - - - if(src) - qdel(src) - - else - integrity -=7 - - - else if(pressure > TANK_RUPTURE_PRESSURE) - #ifdef FIREDBG - log_debug("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]") - #endif - - air_contents.react() - - if(integrity <= 0) - var/turf/simulated/T = get_turf(src) - if(!T) - return - T.assume_air(air_contents) - playsound(src, 'sound/weapons/Gunshot_shotgun.ogg', 20, 1) - visible_message("\icon[src][bicon(src)] \The [src] flies apart!", "You hear a bang!") - T.hotspot_expose(air_contents.temperature, 70, 1) - - - var/strength = 1+((pressure-TANK_LEAK_PRESSURE)/TANK_FRAGMENT_SCALE) - - var/mult = (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - - var/num_fragments = round(rand(6,8) * sqrt(strength * mult)) //Less chunks, but bigger - src.fragmentate(T, num_fragments, 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 1,/obj/item/projectile/bullet/pellet/fragment/tank = 5,/obj/item/projectile/bullet/pellet/fragment/strong = 4)) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - - - qdel(src) - - else - if(!valve_welded) - integrity-= 3 - src.leaking = 1 - else - integrity-= 5 - - - else if(pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp) - - if((integrity <= 17 || src.leaking) && !valve_welded) - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/environment = loc.return_air() - var/env_pressure = environment.return_pressure() - var/tank_pressure = src.air_contents.return_pressure() - - var/release_ratio = 0.002 - if(tank_pressure) - release_ratio = CLAMP(sqrt(max(tank_pressure-env_pressure,0)/tank_pressure), 0.002, 1) - - var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(release_ratio) - //dynamic air release based on ambient pressure - - T.assume_air(leaked_gas) - if(!leaking) - visible_message("\icon[src][bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") - playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) - leaking = 1 - #ifdef FIREDBG - log_debug("[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]") - #endif - - - else - integrity-= 1 - - - else - if(integrity < maxintegrity) - integrity++ - if(leaking) - integrity++ - if(integrity == maxintegrity) - leaking = 0 - -///////////////////////////////// -///Prewelded tanks -///////////////////////////////// - -/obj/item/weapon/tank/phoron/welded - valve_welded = 1 -/obj/item/weapon/tank/oxygen/welded - valve_welded = 1 - - -///////////////////////////////// -///Onetankbombs (added as actual items) -///////////////////////////////// - -/obj/item/weapon/tank/proc/onetankbomb(var/fill = 1) - var/phoron_amt = 4 + rand(4) - var/oxygen_amt = 6 + rand(8) - - if(fill == 2) - phoron_amt = 10 - oxygen_amt = 15 - else if (!fill) - phoron_amt = 3 - oxygen_amt = 4.5 - - - src.air_contents.gas["phoron"] = phoron_amt - src.air_contents.gas["oxygen"] = oxygen_amt - src.air_contents.update_values() - src.valve_welded = 1 - src.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE-1 - - src.wired = 1 - - var/obj/item/device/assembly_holder/H = new(src) - src.proxyassembly.assembly = H - H.master = src.proxyassembly - - H.update_icon() - - add_overlay("bomb_assembly") - - -/obj/item/weapon/tank/phoron/onetankbomb/New() - ..() - src.onetankbomb() - -/obj/item/weapon/tank/oxygen/onetankbomb/New() - ..() - src.onetankbomb() - - -/obj/item/weapon/tank/phoron/onetankbomb/full/New() - ..() - src.onetankbomb(2) - -/obj/item/weapon/tank/oxygen/onetankbomb/full/New() - ..() - src.onetankbomb(2) - -/obj/item/weapon/tank/phoron/onetankbomb/small/New() - ..() - src.onetankbomb(0) - -/obj/item/weapon/tank/oxygen/onetankbomb/small/New() - ..() - src.onetankbomb(0) - -///////////////////////////////// -///Pulled from rewritten bomb.dm -///////////////////////////////// - -/obj/item/device/tankassemblyproxy - name = "Tank assembly proxy" - desc = "Used as a stand in to trigger single tank assemblies... but you shouldn't see this." - var/obj/item/weapon/tank/tank = null - var/obj/item/device/assembly_holder/assembly = null - - -/obj/item/device/tankassemblyproxy/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. - tank.ignite() //boom (or not boom if you made shijwtty mix) - -/obj/item/device/tankassemblyproxy/Destroy() - . = ..() - tank = null - assembly = null - -/obj/item/weapon/tank/proc/assemble_bomb(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb - var/obj/item/device/assembly_holder/S = W - var/mob/M = user - if(!S.secured) //Check if the assembly is secured - return - if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it - return - - - M.drop_item() //Remove the assembly from your hands - M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it - M.put_in_hands(src) //Equips the bomb if possible, or puts it on the floor. - - src.proxyassembly.assembly = S //Tell the bomb about its assembly part - S.master = src.proxyassembly //Tell the assembly about its new owner - S.forceMove(src) //Move the assembly - - src.update_icon() - - - src.add_bomb_overlay() - - return - - -/obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode - - var/obj/item/device/assembly_holder/assy = src.proxyassembly.assembly - var/ign = assy.a_right - var/obj/item/other = assy.a_left - - if (isigniter(assy.a_left)) - ign = assy.a_left - other = assy.a_right - - other.dropInto(get_turf(src)) - qdel(ign) - assy.master = null - src.proxyassembly.assembly = null - qdel(assy) - src.update_icon() - src.update_gauge() - - air_contents.add_thermal_energy(15000) - - -/obj/item/device/tankassemblyproxy/update_icon() - if(assembly) - tank.update_icon() - tank.add_overlay("bomb_assembly") - else - tank.update_icon() - tank.cut_overlay("bomb_assembly") - -/obj/item/device/tankassemblyproxy/HasProximity(turf/T, atom/movable/AM, old_loc) - assembly?.HasProximity(T, AM, old_loc) - -/obj/item/device/tankassemblyproxy/Moved(old_loc, direction, forced) - if(isturf(old_loc)) - unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) - if(isturf(loc)) - sense_proximity(callback = /atom/proc/HasProximity) +#define TANK_IDEAL_PRESSURE 1015 //Arbitrary. + +var/list/global/tank_gauge_cache = list() + +/obj/item/weapon/tank + name = "tank" + icon = 'icons/obj/tank.dmi' + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/back/mob_teshari.dmi' + ) + drop_sound = 'sound/items/drop/gascan.ogg' + pickup_sound = 'sound/items/pickup/gascan.ogg' + + var/gauge_icon = "indicator_tank" + var/last_gauge_pressure + var/gauge_cap = 6 + + slot_flags = SLOT_BACK + w_class = ITEMSIZE_NORMAL + + force = 5.0 + throwforce = 10.0 + throw_speed = 1 + throw_range = 4 + + var/datum/gas_mixture/air_contents = null + var/distribute_pressure = ONE_ATMOSPHERE + var/integrity = 20 + var/maxintegrity = 20 + var/valve_welded = 0 + var/obj/item/device/tankassemblyproxy/proxyassembly + + var/volume = 70 + var/manipulated_by = null //Used by _onclick/hud/screen_objects.dm internals to determine if someone has messed with our tank or not. + //If they have and we haven't scanned it with the PDA or gas analyzer then we might just breath whatever they put in it. + + var/failure_temp = 173 //173 deg C Borate seal (yes it should be 153 F, but that's annoying) + var/leaking = 0 + var/wired = 0 + + description_info = "These tanks are utilised to store any of the various types of gaseous substances. \ + They can be attached to various portable atmospheric devices to be filled or emptied.
                    \ +
                    \ + Each tank is fitted with an emergency relief valve. This relief valve will open if the tank is pressurised to over ~3000kPa or heated to over 173ºC. \ + The valve itself will close after expending most or all of the contents into the air.
                    \ +
                    \ + Filling a tank such that experiences ~4000kPa of pressure will cause the tank to rupture, spilling out its contents and destroying the tank. \ + Tanks filled over ~5000kPa will rupture rather violently, exploding with significant force." + + description_antag = "Each tank may be incited to burn by attaching wires and an igniter assembly, though the igniter can only be used once and the mixture only burn if the igniter pushes a flammable gas mixture above the minimum burn temperature (126ºC). \ + Wired and assembled tanks may be disarmed with a set of wirecutters. Any exploding or rupturing tank will generate shrapnel, assuming their relief valves have been welded beforehand. Even if not, they can be incited to expel hot gas on ignition if pushed above 173ºC. \ + Relatively easy to make, the single tank bomb requries no tank transfer valve, and is still a fairly formidable weapon that can be manufactured from any tank." + +/obj/item/weapon/tank/proc/init_proxy() + var/obj/item/device/tankassemblyproxy/proxy = new /obj/item/device/tankassemblyproxy(src) + proxy.tank = src + src.proxyassembly = proxy + + +/obj/item/weapon/tank/Initialize() + . = ..() + + src.init_proxy() + src.air_contents = new /datum/gas_mixture() + src.air_contents.volume = volume //liters + src.air_contents.temperature = T20C + update_gauge() + +/obj/item/weapon/tank/Destroy() + QDEL_NULL(air_contents) + + STOP_PROCESSING(SSobj, src) + QDEL_NULL(src.proxyassembly) + + if(istype(loc, /obj/item/device/transfer_valve)) + var/obj/item/device/transfer_valve/TTV = loc + TTV.remove_tank(src) + + . = ..() + +/obj/item/weapon/tank/equipped() // Note that even grabbing into a hand calls this, so it should be fine as a 'has a player touched this' + . = ..() + // An attempt at optimization. There are MANY tanks during rounds that will never get touched. + // Don't see why any of those would explode spontaneously. So only tanks that players touch get processed. + // This could be optimized more, but it's a start! + START_PROCESSING(SSobj, src) // This has a built in safety to avoid multi-processing + +/obj/item/weapon/tank/examine(mob/user) + . = ..() + if(loc == user) + var/celsius_temperature = air_contents.temperature - T0C + var/descriptive + switch(celsius_temperature) + if(300 to INFINITY) + descriptive = "furiously hot" + if(100 to 300) + descriptive = "hot" + if(80 to 100) + descriptive = "warm" + if(40 to 80) + descriptive = "lukewarm" + if(20 to 40) + descriptive = "room temperature" + if(-20 to 20) + descriptive = "cold" + else + descriptive = "bitterly cold" + . += "\The [src] feels [descriptive]." + + if(src.proxyassembly.assembly || wired) + . += "It seems to have [wired? "some wires ": ""][wired && src.proxyassembly.assembly? "and ":""][src.proxyassembly.assembly ? "some sort of assembly ":""]attached to it." + if(src.valve_welded) + . += "\The [src] emergency relief valve has been welded shut!" + + +/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if (istype(src.loc, /obj/item/assembly)) + icon = src.loc + + else if (istype(W,/obj/item/latexballon)) + var/obj/item/latexballon/LB = W + LB.blow(src) + src.add_fingerprint(user) + + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.use(1)) + wired = 1 + to_chat(user, "You attach the wires to the tank.") + src.add_bomb_overlay() + + if(W.has_tool_quality(TOOL_WIRECUTTER)) + if(wired && src.proxyassembly.assembly) + + to_chat(user, "You carefully begin clipping the wires that attach to the tank.") + if(do_after(user, 100,src)) + wired = 0 + cut_overlay("bomb_assembly") + to_chat(user, "You cut the wire and remove the device.") + + var/obj/item/device/assembly_holder/assy = src.proxyassembly.assembly + if(assy.a_left && assy.a_right) + assy.dropInto(usr.loc) + assy.master = null + src.proxyassembly.assembly = null + else + if(!src.proxyassembly.assembly.a_left) + assy.a_right.dropInto(usr.loc) + assy.a_right.holder = null + assy.a_right = null + src.proxyassembly.assembly = null + qdel(assy) + cut_overlays() + last_gauge_pressure = 0 + update_gauge() + + else + to_chat(user, "You slip and bump the igniter!") + if(prob(85)) + src.proxyassembly.receive_signal() + + else if(wired) + if(do_after(user, 10, src)) + to_chat(user, "You quickly clip the wire from the tank.") + wired = 0 + cut_overlay("bomb_assembly") + + else + to_chat(user, "There are no wires to cut!") + + + + if(istype(W, /obj/item/device/assembly_holder)) + if(wired) + to_chat(user, "You begin attaching the assembly to \the [src].") + if(do_after(user, 50, src)) + to_chat(user, "You finish attaching the assembly to \the [src].") + bombers += "[key_name(user)] attached an assembly to a wired [src]. Temp: [src.air_contents.temperature-T0C]" + message_admins("[key_name_admin(user)] attached an assembly to a wired [src]. Temp: [src.air_contents.temperature-T0C]") + assemble_bomb(W,user) + else + to_chat(user, "You stop attaching the assembly.") + else + to_chat(user, "You need to wire the device up first.") + + + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(1,user)) + if(!valve_welded) + to_chat(user, "You begin welding the \the [src] emergency pressure relief valve.") + if(do_after(user, 40,src)) + to_chat(user, "You carefully weld \the [src] emergency pressure relief valve shut. \The [src] may now rupture under pressure!") + src.valve_welded = 1 + src.leaking = 0 + else + bombers += "[key_name(user)] attempted to weld a [src]. [src.air_contents.temperature-T0C]" + message_admins("[key_name_admin(user)] attempted to weld a [src]. [src.air_contents.temperature-T0C]") + if(WT.welding) + to_chat(user, "You accidentally rake \the [W] across \the [src]!") + maxintegrity -= rand(2,6) + integrity = min(integrity,maxintegrity) + src.air_contents.add_thermal_energy(rand(2000,50000)) + WT.eyecheck(user) + else + to_chat(user, "The emergency pressure relief valve has already been welded.") + add_fingerprint(user) + + + +/obj/item/weapon/tank/attack_self(mob/user as mob) + add_fingerprint(user) + if (!(src.air_contents)) + return + tgui_interact(user) + +// There's GOT to be a better way to do this + if (src.proxyassembly.assembly) + src.proxyassembly.assembly.attack_self(user) + +/obj/item/weapon/tank/tgui_state(mob/user) + return GLOB.tgui_deep_inventory_state + +/obj/item/weapon/tank/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tank", name) + ui.open() + +/obj/item/weapon/tank/tgui_data(mob/user) + var/list/data = list() + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) + data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) + data["minReleasePressure"] = 0 + data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) + + var/mob/living/carbon/C = user + if(!istype(C)) + C = loc.loc + if(!istype(C)) + return data + + if(C.internal == src) + data["connected"] = TRUE + else + data["connected"] = FALSE + + data["maskConnected"] = FALSE + if(C.wear_mask && (C.wear_mask.item_flags & AIRTIGHT)) + data["maskConnected"] = TRUE + else if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(H.head && (H.head.item_flags & AIRTIGHT)) + data["maskConnected"] = TRUE + + return data + +/obj/item/weapon/tank/tgui_act(action, params) + if(..()) + return TRUE + switch(action) + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + pressure = TANK_DEFAULT_RELEASE_PRESSURE + . = TRUE + else if(pressure == "min") + pressure = 0 + . = TRUE + else if(pressure == "max") + pressure = TANK_MAX_RELEASE_PRESSURE + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + distribute_pressure = clamp(round(pressure), 0, TANK_MAX_RELEASE_PRESSURE) + if("toggle") + toggle_valve(usr) + . = TRUE + + add_fingerprint(usr) + +/obj/item/weapon/tank/proc/toggle_valve(var/mob/user) + if(istype(loc,/mob/living/carbon)) + var/mob/living/carbon/location = loc + if(location.internal == src) + location.internal = null + location.internals.icon_state = "internal0" + to_chat(user, "You close the tank release valve.") + if (location.internals) + location.internals.icon_state = "internal0" + else + var/can_open_valve + if(location.wear_mask && (location.wear_mask.item_flags & AIRTIGHT)) + can_open_valve = 1 + else if(istype(location,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = location + if(H.head && (H.head.item_flags & AIRTIGHT)) + can_open_valve = 1 + + if(can_open_valve) + location.internal = src + to_chat(user, "You open \the [src] valve.") + if (location.internals) + location.internals.icon_state = "internal1" + else + to_chat(user, "You need something to connect to \the [src].") + + + +/obj/item/weapon/tank/remove_air(amount) + return air_contents.remove(amount) + +/obj/item/weapon/tank/proc/remove_air_by_flag(flag, amount) + return air_contents.remove_by_flag(flag, amount) + +/obj/item/weapon/tank/return_air() + return air_contents + +/obj/item/weapon/tank/assume_air(datum/gas_mixture/giver) + air_contents.merge(giver) + + check_status() + return 1 + +/obj/item/weapon/tank/proc/remove_air_volume(volume_to_return) + if(!air_contents) + return null + + var/tank_pressure = air_contents.return_pressure() + if(tank_pressure < distribute_pressure) + distribute_pressure = tank_pressure + + var/moles_needed = distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + + return remove_air(moles_needed) + +/obj/item/weapon/tank/process() + if(!air_contents) + return + //Allow for reactions + air_contents.react() //cooking up air tanks - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE + if(gauge_icon) + update_gauge() + check_status() + + +/obj/item/weapon/tank/proc/add_bomb_overlay() + if(src.wired) + add_overlay("bomb_assembly") + if(src.proxyassembly.assembly) + var/icon/test = getFlatIcon(src.proxyassembly.assembly) + test.Shift(SOUTH,1) + test.Shift(WEST,3) + add_overlay(test) + + +/obj/item/weapon/tank/proc/update_gauge() + var/gauge_pressure = 0 + if(air_contents) + gauge_pressure = air_contents.return_pressure() + if(gauge_pressure > TANK_IDEAL_PRESSURE) + gauge_pressure = -1 + else + gauge_pressure = round((gauge_pressure/TANK_IDEAL_PRESSURE)*gauge_cap) + + if(gauge_pressure == last_gauge_pressure) + return + + last_gauge_pressure = gauge_pressure + cut_overlays() + add_bomb_overlay() + var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]" + if(!tank_gauge_cache[indicator]) + tank_gauge_cache[indicator] = image(icon, indicator) + add_overlay(tank_gauge_cache[indicator]) + + + + + + +/obj/item/weapon/tank/proc/check_status() + //Handle exploding, leaking, and rupturing of the tank + + if(!air_contents) + return 0 + + var/pressure = air_contents.return_pressure() + + + if(pressure > TANK_FRAGMENT_PRESSURE) + if(integrity <= 7) + if(!istype(src.loc,/obj/item/device/transfer_valve)) + message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") + log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") + + //Give the gas a chance to build up more pressure through reacting + air_contents.react() + air_contents.react() + air_contents.react() + + pressure = air_contents.return_pressure() + var/strength = ((pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE) + + var/mult = ((src.air_contents.volume/140)**(1/2)) * (air_contents.total_moles**(2/3))/((29*0.64) **(2/3)) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles + //tanks appear to be experiencing a reduction on scale of about 0.64 total moles + + + + var/turf/simulated/T = get_turf(src) + T.hotspot_expose(src.air_contents.temperature, 70, 1) + if(!T) + return + + T.assume_air(air_contents) + explosion( + get_turf(loc), + round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)), + round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)), + round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)), + round(min(BOMBCAP_FLASH_RADIUS, ((mult)*strength)*1.20)), + ) + + + var/num_fragments = round(rand(8,10) * sqrt(strength * mult)) + src.fragmentate(T, num_fragments, rand(5) + 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 7,/obj/item/projectile/bullet/pellet/fragment/tank = 2,/obj/item/projectile/bullet/pellet/fragment/strong = 1)) + + if(istype(loc, /obj/item/device/transfer_valve)) + var/obj/item/device/transfer_valve/TTV = loc + TTV.remove_tank(src) + qdel(TTV) + + + if(src) + qdel(src) + + else + integrity -=7 + + + else if(pressure > TANK_RUPTURE_PRESSURE) + #ifdef FIREDBG + log_debug("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]") + #endif + + air_contents.react() + + if(integrity <= 0) + var/turf/simulated/T = get_turf(src) + if(!T) + return + T.assume_air(air_contents) + playsound(src, 'sound/weapons/Gunshot_shotgun.ogg', 20, 1) + visible_message("\icon[src][bicon(src)] \The [src] flies apart!", "You hear a bang!") + T.hotspot_expose(air_contents.temperature, 70, 1) + + + var/strength = 1+((pressure-TANK_LEAK_PRESSURE)/TANK_FRAGMENT_SCALE) + + var/mult = (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles + + var/num_fragments = round(rand(6,8) * sqrt(strength * mult)) //Less chunks, but bigger + src.fragmentate(T, num_fragments, 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 1,/obj/item/projectile/bullet/pellet/fragment/tank = 5,/obj/item/projectile/bullet/pellet/fragment/strong = 4)) + + if(istype(loc, /obj/item/device/transfer_valve)) + var/obj/item/device/transfer_valve/TTV = loc + TTV.remove_tank(src) + + + qdel(src) + + else + if(!valve_welded) + integrity-= 3 + src.leaking = 1 + else + integrity-= 5 + + + else if(pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp) + + if((integrity <= 17 || src.leaking) && !valve_welded) + var/turf/simulated/T = get_turf(src) + if(!T) + return + var/datum/gas_mixture/environment = loc.return_air() + var/env_pressure = environment.return_pressure() + var/tank_pressure = src.air_contents.return_pressure() + + var/release_ratio = 0.002 + if(tank_pressure) + release_ratio = CLAMP(sqrt(max(tank_pressure-env_pressure,0)/tank_pressure), 0.002, 1) + + var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(release_ratio) + //dynamic air release based on ambient pressure + + T.assume_air(leaked_gas) + if(!leaking) + visible_message("\icon[src][bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") + playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) + leaking = 1 + #ifdef FIREDBG + log_debug("[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]") + #endif + + + else + integrity-= 1 + + + else + if(integrity < maxintegrity) + integrity++ + if(leaking) + integrity++ + if(integrity == maxintegrity) + leaking = 0 + +///////////////////////////////// +///Prewelded tanks +///////////////////////////////// + +/obj/item/weapon/tank/phoron/welded + valve_welded = 1 +/obj/item/weapon/tank/oxygen/welded + valve_welded = 1 + + +///////////////////////////////// +///Onetankbombs (added as actual items) +///////////////////////////////// + +/obj/item/weapon/tank/proc/onetankbomb(var/fill = 1) + var/phoron_amt = 4 + rand(4) + var/oxygen_amt = 6 + rand(8) + + if(fill == 2) + phoron_amt = 10 + oxygen_amt = 15 + else if (!fill) + phoron_amt = 3 + oxygen_amt = 4.5 + + + src.air_contents.gas["phoron"] = phoron_amt + src.air_contents.gas["oxygen"] = oxygen_amt + src.air_contents.update_values() + src.valve_welded = 1 + src.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE-1 + + src.wired = 1 + + var/obj/item/device/assembly_holder/H = new(src) + src.proxyassembly.assembly = H + H.master = src.proxyassembly + + H.update_icon() + + add_overlay("bomb_assembly") + + +/obj/item/weapon/tank/phoron/onetankbomb/New() + ..() + src.onetankbomb() + +/obj/item/weapon/tank/oxygen/onetankbomb/New() + ..() + src.onetankbomb() + + +/obj/item/weapon/tank/phoron/onetankbomb/full/New() + ..() + src.onetankbomb(2) + +/obj/item/weapon/tank/oxygen/onetankbomb/full/New() + ..() + src.onetankbomb(2) + +/obj/item/weapon/tank/phoron/onetankbomb/small/New() + ..() + src.onetankbomb(0) + +/obj/item/weapon/tank/oxygen/onetankbomb/small/New() + ..() + src.onetankbomb(0) + +///////////////////////////////// +///Pulled from rewritten bomb.dm +///////////////////////////////// + +/obj/item/device/tankassemblyproxy + name = "Tank assembly proxy" + desc = "Used as a stand in to trigger single tank assemblies... but you shouldn't see this." + var/obj/item/weapon/tank/tank = null + var/obj/item/device/assembly_holder/assembly = null + + +/obj/item/device/tankassemblyproxy/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. + tank.ignite() //boom (or not boom if you made shijwtty mix) + +/obj/item/device/tankassemblyproxy/Destroy() + . = ..() + tank = null + assembly = null + +/obj/item/weapon/tank/proc/assemble_bomb(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb + var/obj/item/device/assembly_holder/S = W + var/mob/M = user + if(!S.secured) //Check if the assembly is secured + return + if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it + return + + + M.drop_item() //Remove the assembly from your hands + M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it + M.put_in_hands(src) //Equips the bomb if possible, or puts it on the floor. + + src.proxyassembly.assembly = S //Tell the bomb about its assembly part + S.master = src.proxyassembly //Tell the assembly about its new owner + S.forceMove(src) //Move the assembly + + src.update_icon() + + + src.add_bomb_overlay() + + return + + +/obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode + + var/obj/item/device/assembly_holder/assy = src.proxyassembly.assembly + var/ign = assy.a_right + var/obj/item/other = assy.a_left + + if (isigniter(assy.a_left)) + ign = assy.a_left + other = assy.a_right + + other.dropInto(get_turf(src)) + qdel(ign) + assy.master = null + src.proxyassembly.assembly = null + qdel(assy) + src.update_icon() + src.update_gauge() + + air_contents.add_thermal_energy(15000) + + +/obj/item/device/tankassemblyproxy/update_icon() + if(assembly) + tank.update_icon() + tank.add_overlay("bomb_assembly") + else + tank.update_icon() + tank.cut_overlay("bomb_assembly") + +/obj/item/device/tankassemblyproxy/HasProximity(turf/T, atom/movable/AM, old_loc) + assembly?.HasProximity(T, AM, old_loc) + +/obj/item/device/tankassemblyproxy/Moved(old_loc, direction, forced) + if(isturf(old_loc)) + unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) + if(isturf(loc)) + sense_proximity(callback = /atom/proc/HasProximity) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index c1ad302407..8b146ca7fb 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -1,182 +1,182 @@ -/* Teleportation devices. - * Contains: - * Locator - * Hand-tele - */ - -/* - * Locator - */ -/obj/item/weapon/locator - name = "locator" - desc = "Used to track those with locater implants." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/temp = null - var/frequency = 1451 - var/broadcasting = null - var/listening = 1.0 - w_class = ITEMSIZE_SMALL - item_state = "electronic" - throw_speed = 4 - throw_range = 20 - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 400) - -/obj/item/weapon/locator/attack_self(mob/user as mob) - user.set_machine(src) - var/dat - if (src.temp) - dat = "[src.temp]

                    Clear" - else - dat = {" -Persistent Signal Locator
                    -Frequency: -- -- [format_frequency(src.frequency)] -+ -+
                    - -Refresh"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/weapon/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||current_location.z==3)//If turf was not found or they're on z level 2. - to_chat(usr, "The [src] is malfunctioning.") - return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - usr.set_machine(src) - if (href_list["refresh"]) - src.temp = "Persistent Signal Locator
                    " - var/turf/sr = get_turf(src) - - if (sr) - src.temp += "Located Beacons:
                    " - - for(var/obj/item/device/radio/beacon/W in GLOB.all_beacons) - if (W.frequency == src.frequency) - 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" - src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
                    " - - src.temp += "Extraneous Signals:
                    " - for (var/obj/item/weapon/implant/tracking/W in GLOB.all_tracking_implants) - if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction)) - 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" - src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]
                    " - - src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

                    Refresh
                    " - else - src.temp += "Processing Error: Unable to locate orbital position.
                    " - else - if (href_list["freq"]) - src.frequency += text2num(href_list["freq"]) - src.frequency = sanitize_frequency(src.frequency) - else - if (href_list["temp"]) - src.temp = null - if (istype(src.loc, /mob)) - 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/weapon/hand_tele - name = "hand tele" - desc = "A portable item using blue-space technology." - icon = 'icons/obj/device.dmi' - icon_state = "hand_tele" - item_state = "electronic" - throwforce = 5 - w_class = ITEMSIZE_SMALL - throw_speed = 3 - throw_range = 5 - origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) - matter = list(MAT_STEEL = 10000) - preserve_item = 1 - -/obj/item/weapon/hand_tele/attack_self(mob/user as mob) - var/turf/current_location = get_turf(user)//What turf is the user on? - if(!current_location || (current_location.z in using_map.admin_levels) || current_location.block_tele)//If turf was not found or they're on z level 2 or >7 which does not currently exist. - to_chat(user, "\The [src] is malfunctioning.") - return - var/list/L = list( ) - for(var/obj/machinery/teleport/hub/R in machines) - var/obj/machinery/computer/teleporter/com - var/obj/machinery/teleport/station/station - for(var/direction in cardinal) - station = locate(/obj/machinery/teleport/station, get_step(R, direction)) - if(station) - for(direction in cardinal) - com = locate(/obj/machinery/computer/teleporter, get_step(station, direction)) - if(com) - break - break - if (istype(com, /obj/machinery/computer/teleporter) && com.teleport_control.locked && !com.one_time_use) - if(R.icon_state == "tele1") - L["[com.id] (Active)"] = com.teleport_control.locked - else - L["[com.id] (Inactive)"] = com.teleport_control.locked - var/list/turfs = list( ) - for(var/turf/T in orange(10)) - 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 - if(T.block_tele) continue - turfs += T - if(turfs.len) - L["None (Dangerous)"] = pick(turfs) - var/t1 = tgui_input_list(user, "Please select a teleporter to lock in on.", "Hand Teleporter", L) - if(!t1) - return - if ((user.get_active_hand() != src || user.stat || user.restrained())) - return - var/count = 0 //num of portals from this teleport in world - for(var/obj/effect/portal/PO in GLOB.all_portals) - if(PO.creator == src) count++ - if(count >= 3) - user.show_message("\The [src] is recharging!") - return - var/T = L[t1] - for(var/mob/O in hearers(user, null)) - O.show_message("Locked In.", 2) - var/obj/effect/portal/P = new /obj/effect/portal( get_turf(src) ) - P.target = T - P.creator = src - P.failchance = 0 //CHOMPEdit : funny 5% chance to be spaced and die makes the hand tele kinda useless. - src.add_fingerprint(user) - return +/* Teleportation devices. + * Contains: + * Locator + * Hand-tele + */ + +/* + * Locator + */ +/obj/item/weapon/locator + name = "locator" + desc = "Used to track those with locater implants." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + var/temp = null + var/frequency = 1451 + var/broadcasting = null + var/listening = 1.0 + w_class = ITEMSIZE_SMALL + item_state = "electronic" + throw_speed = 4 + throw_range = 20 + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 400) + +/obj/item/weapon/locator/attack_self(mob/user as mob) + user.set_machine(src) + var/dat + if (src.temp) + dat = "[src.temp]

                    Clear" + else + dat = {" +Persistent Signal Locator
                    +Frequency: +- +- [format_frequency(src.frequency)] ++ ++
                    + +Refresh"} + user << browse(dat, "window=radio") + onclose(user, "radio") + return + +/obj/item/weapon/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||current_location.z==3)//If turf was not found or they're on z level 2. + to_chat(usr, "The [src] is malfunctioning.") + return + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) + usr.set_machine(src) + if (href_list["refresh"]) + src.temp = "Persistent Signal Locator
                    " + var/turf/sr = get_turf(src) + + if (sr) + src.temp += "Located Beacons:
                    " + + for(var/obj/item/device/radio/beacon/W in GLOB.all_beacons) + if (W.frequency == src.frequency) + 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" + src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
                    " + + src.temp += "Extraneous Signals:
                    " + for (var/obj/item/weapon/implant/tracking/W in GLOB.all_tracking_implants) + if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction)) + 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" + src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]
                    " + + src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

                    Refresh
                    " + else + src.temp += "Processing Error: Unable to locate orbital position.
                    " + else + if (href_list["freq"]) + src.frequency += text2num(href_list["freq"]) + src.frequency = sanitize_frequency(src.frequency) + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + 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/weapon/hand_tele + name = "hand tele" + desc = "A portable item using blue-space technology." + icon = 'icons/obj/device.dmi' + icon_state = "hand_tele" + item_state = "electronic" + throwforce = 5 + w_class = ITEMSIZE_SMALL + throw_speed = 3 + throw_range = 5 + origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) + matter = list(MAT_STEEL = 10000) + preserve_item = 1 + +/obj/item/weapon/hand_tele/attack_self(mob/user as mob) + var/turf/current_location = get_turf(user)//What turf is the user on? + if(!current_location || (current_location.z in using_map.admin_levels) || current_location.block_tele)//If turf was not found or they're on z level 2 or >7 which does not currently exist. + to_chat(user, "\The [src] is malfunctioning.") + return + var/list/L = list( ) + for(var/obj/machinery/teleport/hub/R in machines) + var/obj/machinery/computer/teleporter/com + var/obj/machinery/teleport/station/station + for(var/direction in cardinal) + station = locate(/obj/machinery/teleport/station, get_step(R, direction)) + if(station) + for(direction in cardinal) + com = locate(/obj/machinery/computer/teleporter, get_step(station, direction)) + if(com) + break + break + if (istype(com, /obj/machinery/computer/teleporter) && com.teleport_control.locked && !com.one_time_use) + if(R.icon_state == "tele1") + L["[com.id] (Active)"] = com.teleport_control.locked + else + L["[com.id] (Inactive)"] = com.teleport_control.locked + var/list/turfs = list( ) + for(var/turf/T in orange(10)) + 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 + if(T.block_tele) continue + turfs += T + if(turfs.len) + L["None (Dangerous)"] = pick(turfs) + var/t1 = tgui_input_list(user, "Please select a teleporter to lock in on.", "Hand Teleporter", L) + if(!t1) + return + if ((user.get_active_hand() != src || user.stat || user.restrained())) + return + var/count = 0 //num of portals from this teleport in world + for(var/obj/effect/portal/PO in GLOB.all_portals) + if(PO.creator == src) count++ + if(count >= 3) + user.show_message("\The [src] is recharging!") + return + var/T = L[t1] + for(var/mob/O in hearers(user, null)) + O.show_message("Locked In.", 2) + var/obj/effect/portal/P = new /obj/effect/portal( get_turf(src) ) + P.target = T + P.creator = src + P.failchance = 0 //CHOMPEdit : funny 5% chance to be spaced and die makes the hand tele kinda useless. + src.add_fingerprint(user) + return diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index e16dbbf88a..2ea7b30cd1 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -1,214 +1,214 @@ -/* - * Trays - Agouri - */ -/obj/item/weapon/tray - name = "tray" - icon = 'icons/obj/food.dmi' - icon_state = "tray" - desc = "A metal tray to lay food on." - throwforce = 12.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - matter = list(MAT_STEEL = 3000) - var/list/carrying = list() // List of things on the tray. - Doohl - var/max_carry = 10 - drop_sound = 'sound/items/trayhit1.ogg' - -/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - user.setClickCooldown(user.get_attack_speed(src)) - // Drop all the things. All of them. - cut_overlays() - for(var/obj/item/I in carrying) - I.loc = M.loc - carrying.Remove(I) - if(isturf(I.loc)) - spawn() - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) - - - if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown? - to_chat(M, "You accidentally slam yourself with the [src]!") - M.Weaken(1) - user.take_organ_damage(2) - if(prob(50)) - playsound(src, 'sound/items/trayhit1.ogg', 50, 1) - return - else - playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' - return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 - - var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. - - - if(!(user.zone_sel.selecting == (O_EYES || BP_HEAD))) //////////////hitting anything else other than the eyes - if(prob(33)) - src.add_blood(H) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) - location.add_blood(H) ///Plik plik, the sound of blood - - add_attack_logs(user,M,"Hit with [src]") - - if(prob(15)) - M.Weaken(3) - M.take_organ_damage(3) - else - M.take_organ_damage(5) - if(prob(50)) - playsound(src, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] with the tray!", user, M), 1) - return - else - playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] with the tray!", user, M), 1) - return - - - var/protected = 0 - for(var/slot in list(slot_head, slot_wear_mask, slot_glasses)) - var/obj/item/protection = M.get_equipped_item(slot) - if(istype(protection) && (protection.body_parts_covered & FACE)) - protected = 1 - break - - if(protected) - to_chat(M, "You get slammed in the face with the tray, against your mask!") - if(prob(33)) - src.add_blood(H) - if (H.wear_mask) - H.wear_mask.add_blood(H) - if (H.head) - H.head.add_blood(H) - if (H.glasses && prob(33)) - H.glasses.add_blood(H) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) //Addin' blood! At least on the floor and item :v - location.add_blood(H) - - if(prob(50)) - playsound(src, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] with the tray!", user, M), 1) - else - playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] with the tray!", user, M), 1) - if(prob(10)) - M.Stun(rand(1,3)) - M.take_organ_damage(3) - return - else - M.take_organ_damage(5) - return - - else //No eye or head protection, tough luck! - to_chat(M, "You get slammed in the face with the tray!") - if(prob(33)) - src.add_blood(M) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) - location.add_blood(H) - - if(prob(50)) - playsound(src, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] in the face with the tray!", user, M), 1) - else - playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' again - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] slams [] in the face with the tray!", user, M), 1) - if(prob(30)) - M.Stun(rand(2,4)) - M.take_organ_damage(4) - return - else - M.take_organ_damage(8) - if(prob(30)) - M.Weaken(2) - return - return - -/obj/item/weapon/tray/var/cooldown = 0 //shield bash cooldown. based on world.time - -/obj/item/weapon/tray/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/material/kitchen/rollingpin)) - if(cooldown < world.time - 25) - user.visible_message("[user] bashes [src] with [W]!") - playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) - cooldown = world.time - else - ..() - -/* -===============~~~~~================================~~~~~==================== -= = -= Code for trays carrying things. By Doohl for Doohl erryday Doohl Doohl~ = -= = -===============~~~~~================================~~~~~==================== -*/ -/obj/item/weapon/tray/proc/calc_carry() - // calculate the weight of the items on the tray - var/val = 0 // value to return - - for(var/obj/item/I in carrying) - if(I.w_class == ITEMSIZE_TINY) - val ++ - else if(I.w_class == ITEMSIZE_SMALL) - val += 3 - else - val += 5 - - return val - -/obj/item/weapon/tray/pickup(mob/user) - - if(!isturf(loc)) - return - - for(var/obj/item/I in loc) - if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) - var/add = 0 - if(I.w_class == ITEMSIZE_TINY) - add = 1 - else if(I.w_class == ITEMSIZE_SMALL) - add = 3 - else - add = 5 - if(calc_carry() + add >= max_carry) - break - var/image/Img = new(src.icon) - I.loc = src - carrying.Add(I) - Img.icon = I.icon - Img.icon_state = I.icon_state - Img.layer = layer + I.layer*0.01 - if(istype(I, /obj/item/weapon/material)) - var/obj/item/weapon/material/O = I - if(O.applies_material_colour) - Img.color = O.color - add_overlay(Img) - -/obj/item/weapon/tray/dropped(mob/user) - var/noTable = null - - spawn() //Allows the tray to udpate location, rather than just checking against mob's location - if(isturf(src.loc) && !(locate(/obj/structure/table) in src.loc)) - noTable = 1 - - if(isturf(loc) && !(locate(/mob/living) in src.loc)) - cut_overlays() - for(var/obj/item/I in carrying) - I.forceMove(src.loc) - carrying.Remove(I) - if(noTable) - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) +/* + * Trays - Agouri + */ +/obj/item/weapon/tray + name = "tray" + icon = 'icons/obj/food.dmi' + icon_state = "tray" + desc = "A metal tray to lay food on." + throwforce = 12.0 + throwforce = 10.0 + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + matter = list(MAT_STEEL = 3000) + var/list/carrying = list() // List of things on the tray. - Doohl + var/max_carry = 10 + drop_sound = 'sound/items/trayhit1.ogg' + +/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + user.setClickCooldown(user.get_attack_speed(src)) + // Drop all the things. All of them. + cut_overlays() + for(var/obj/item/I in carrying) + I.loc = M.loc + carrying.Remove(I) + if(isturf(I.loc)) + spawn() + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + + + if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown? + to_chat(M, "You accidentally slam yourself with the [src]!") + M.Weaken(1) + user.take_organ_damage(2) + if(prob(50)) + playsound(src, 'sound/items/trayhit1.ogg', 50, 1) + return + else + playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' + return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 + + var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. + + + if(!(user.zone_sel.selecting == (O_EYES || BP_HEAD))) //////////////hitting anything else other than the eyes + if(prob(33)) + src.add_blood(H) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) + location.add_blood(H) ///Plik plik, the sound of blood + + add_attack_logs(user,M,"Hit with [src]") + + if(prob(15)) + M.Weaken(3) + M.take_organ_damage(3) + else + M.take_organ_damage(5) + if(prob(50)) + playsound(src, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] with the tray!", user, M), 1) + return + else + playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] with the tray!", user, M), 1) + return + + + var/protected = 0 + for(var/slot in list(slot_head, slot_wear_mask, slot_glasses)) + var/obj/item/protection = M.get_equipped_item(slot) + if(istype(protection) && (protection.body_parts_covered & FACE)) + protected = 1 + break + + if(protected) + to_chat(M, "You get slammed in the face with the tray, against your mask!") + if(prob(33)) + src.add_blood(H) + if (H.wear_mask) + H.wear_mask.add_blood(H) + if (H.head) + H.head.add_blood(H) + if (H.glasses && prob(33)) + H.glasses.add_blood(H) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) //Addin' blood! At least on the floor and item :v + location.add_blood(H) + + if(prob(50)) + playsound(src, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] with the tray!", user, M), 1) + else + playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] with the tray!", user, M), 1) + if(prob(10)) + M.Stun(rand(1,3)) + M.take_organ_damage(3) + return + else + M.take_organ_damage(5) + return + + else //No eye or head protection, tough luck! + to_chat(M, "You get slammed in the face with the tray!") + if(prob(33)) + src.add_blood(M) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) + location.add_blood(H) + + if(prob(50)) + playsound(src, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] in the face with the tray!", user, M), 1) + else + playsound(src, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' again + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] slams [] in the face with the tray!", user, M), 1) + if(prob(30)) + M.Stun(rand(2,4)) + M.take_organ_damage(4) + return + else + M.take_organ_damage(8) + if(prob(30)) + M.Weaken(2) + return + return + +/obj/item/weapon/tray/var/cooldown = 0 //shield bash cooldown. based on world.time + +/obj/item/weapon/tray/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/material/kitchen/rollingpin)) + if(cooldown < world.time - 25) + user.visible_message("[user] bashes [src] with [W]!") + playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) + cooldown = world.time + else + ..() + +/* +===============~~~~~================================~~~~~==================== += = += Code for trays carrying things. By Doohl for Doohl erryday Doohl Doohl~ = += = +===============~~~~~================================~~~~~==================== +*/ +/obj/item/weapon/tray/proc/calc_carry() + // calculate the weight of the items on the tray + var/val = 0 // value to return + + for(var/obj/item/I in carrying) + if(I.w_class == ITEMSIZE_TINY) + val ++ + else if(I.w_class == ITEMSIZE_SMALL) + val += 3 + else + val += 5 + + return val + +/obj/item/weapon/tray/pickup(mob/user) + + if(!isturf(loc)) + return + + for(var/obj/item/I in loc) + if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) + var/add = 0 + if(I.w_class == ITEMSIZE_TINY) + add = 1 + else if(I.w_class == ITEMSIZE_SMALL) + add = 3 + else + add = 5 + if(calc_carry() + add >= max_carry) + break + var/image/Img = new(src.icon) + I.loc = src + carrying.Add(I) + Img.icon = I.icon + Img.icon_state = I.icon_state + Img.layer = layer + I.layer*0.01 + if(istype(I, /obj/item/weapon/material)) + var/obj/item/weapon/material/O = I + if(O.applies_material_colour) + Img.color = O.color + add_overlay(Img) + +/obj/item/weapon/tray/dropped(mob/user) + var/noTable = null + + spawn() //Allows the tray to udpate location, rather than just checking against mob's location + if(isturf(src.loc) && !(locate(/obj/structure/table) in src.loc)) + noTable = 1 + + if(isturf(loc) && !(locate(/mob/living) in src.loc)) + cut_overlays() + for(var/obj/item/I in carrying) + I.forceMove(src.loc) + carrying.Remove(I) + if(noTable) + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 26f3200242..dc9aa50336 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -1,136 +1,136 @@ -/obj/item/weapon/nullrod - name = "null rod" - desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae." - icon_state = "nullrod" - item_state = "nullrod" - slot_flags = SLOT_BELT - force = 15 - throw_speed = 1 - throw_range = 4 - throwforce = 10 - w_class = ITEMSIZE_SMALL - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - -/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. - - add_attack_logs(user,M,"Hit with [src] (nullrod)") - - user.setClickCooldown(user.get_attack_speed(src)) - user.do_attack_animation(M) - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "The rod slips out of your hand and hits your head.") - user.take_organ_damage(10) - user.Paralyse(20) - return - - if (M.stat !=2) - if(cult && (M.mind in cult.current_antagonists) && prob(33)) - to_chat(M, "The power of [src] clears your mind of the cult's influence!") - to_chat(user, "You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal.") - cult.remove_antagonist(M.mind) - M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") - else if(prob(10)) - to_chat(user, "The rod slips in your hand.") - ..() - else - to_chat(user, "The rod appears to do nothing.") - M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") - return - -/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) - return - if (istype(A, /turf/simulated/floor)) - to_chat(user, "You hit the floor with the [src].") - call(/obj/effect/rune/proc/revealrunes)(src) - -/obj/item/weapon/energy_net - name = "energy net" - desc = "It's a net made of green energy." - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - throwforce = 0 - force = 0 - var/net_type = /obj/effect/energy_net - -/obj/item/weapon/energy_net/dropped() - spawn(10) - if(src) qdel(src) - -/obj/item/weapon/energy_net/throw_impact(atom/hit_atom) - ..() - - var/mob/living/M = hit_atom - - if(!istype(M) || locate(/obj/effect/energy_net) in M.loc) - qdel(src) - return 0 - - var/turf/T = get_turf(M) - if(T) - var/obj/effect/energy_net/net = new net_type(T) - if(net.buckle_mob(M)) - T.visible_message("[M] was caught in an energy net!") - qdel(src) - - // If we miss or hit an obstacle, we still want to delete the net. - spawn(10) - if(src) qdel(src) - -/obj/effect/energy_net - name = "energy net" - desc = "It's a net made of green energy." - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - - density = TRUE - opacity = 0 - mouse_opacity = 1 - anchored = FALSE - - can_buckle = TRUE - buckle_lying = 0 - buckle_dir = SOUTH - - var/escape_time = 8 SECONDS - -/obj/effect/energy_net/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/effect/energy_net/Destroy() - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - to_chat(A, "You are free of the net!") - unbuckle_mob(A) - - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/energy_net/process() - if(!has_buckled_mobs()) - qdel(src) - -/obj/effect/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/user) - user.setClickCooldown(user.get_attack_speed()) - visible_message("[user] begins to tear at \the [src]!") - if(do_after(user, escape_time, src, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) - if(!has_buckled_mobs()) - return - visible_message("[user] manages to tear \the [src] apart!") - unbuckle_mob(buckled_mob) - -/obj/effect/energy_net/post_buckle_mob(mob/living/M) - if(M.buckled == src) //Just buckled someone - ..() - layer = M.layer+1 - M.can_pull_size = 0 - else //Just unbuckled someone - M.can_pull_size = initial(M.can_pull_size) - qdel(src) +/obj/item/weapon/nullrod + name = "null rod" + desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae." + icon_state = "nullrod" + item_state = "nullrod" + slot_flags = SLOT_BELT + force = 15 + throw_speed = 1 + throw_range = 4 + throwforce = 10 + w_class = ITEMSIZE_SMALL + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + +/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. + + add_attack_logs(user,M,"Hit with [src] (nullrod)") + + user.setClickCooldown(user.get_attack_speed(src)) + user.do_attack_animation(M) + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + + if ((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "The rod slips out of your hand and hits your head.") + user.take_organ_damage(10) + user.Paralyse(20) + return + + if (M.stat !=2) + if(cult && (M.mind in cult.current_antagonists) && prob(33)) + to_chat(M, "The power of [src] clears your mind of the cult's influence!") + to_chat(user, "You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal.") + cult.remove_antagonist(M.mind) + M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") + else if(prob(10)) + to_chat(user, "The rod slips in your hand.") + ..() + else + to_chat(user, "The rod appears to do nothing.") + M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") + return + +/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob, proximity) + if(!proximity) + return + if (istype(A, /turf/simulated/floor)) + to_chat(user, "You hit the floor with the [src].") + call(/obj/effect/rune/proc/revealrunes)(src) + +/obj/item/weapon/energy_net + name = "energy net" + desc = "It's a net made of green energy." + icon = 'icons/effects/effects.dmi' + icon_state = "energynet" + throwforce = 0 + force = 0 + var/net_type = /obj/effect/energy_net + +/obj/item/weapon/energy_net/dropped() + spawn(10) + if(src) qdel(src) + +/obj/item/weapon/energy_net/throw_impact(atom/hit_atom) + ..() + + var/mob/living/M = hit_atom + + if(!istype(M) || locate(/obj/effect/energy_net) in M.loc) + qdel(src) + return 0 + + var/turf/T = get_turf(M) + if(T) + var/obj/effect/energy_net/net = new net_type(T) + if(net.buckle_mob(M)) + T.visible_message("[M] was caught in an energy net!") + qdel(src) + + // If we miss or hit an obstacle, we still want to delete the net. + spawn(10) + if(src) qdel(src) + +/obj/effect/energy_net + name = "energy net" + desc = "It's a net made of green energy." + icon = 'icons/effects/effects.dmi' + icon_state = "energynet" + + density = TRUE + opacity = 0 + mouse_opacity = 1 + anchored = FALSE + + can_buckle = TRUE + buckle_lying = 0 + buckle_dir = SOUTH + + var/escape_time = 8 SECONDS + +/obj/effect/energy_net/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/effect/energy_net/Destroy() + if(has_buckled_mobs()) + for(var/A in buckled_mobs) + to_chat(A, "You are free of the net!") + unbuckle_mob(A) + + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/effect/energy_net/process() + if(!has_buckled_mobs()) + qdel(src) + +/obj/effect/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/user) + user.setClickCooldown(user.get_attack_speed()) + visible_message("[user] begins to tear at \the [src]!") + if(do_after(user, escape_time, src, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(!has_buckled_mobs()) + return + visible_message("[user] manages to tear \the [src] apart!") + unbuckle_mob(buckled_mob) + +/obj/effect/energy_net/post_buckle_mob(mob/living/M) + if(M.buckled == src) //Just buckled someone + ..() + layer = M.layer+1 + M.can_pull_size = 0 + else //Just unbuckled someone + M.can_pull_size = initial(M.can_pull_size) + qdel(src) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index fb9a4a0e8b..626c7a296e 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,261 +1,261 @@ -/obj/structure - icon = 'icons/obj/structures.dmi' - w_class = ITEMSIZE_NO_CONTAINER - blocks_emissive = EMISSIVE_BLOCK_GENERIC - - var/climbable - var/climb_delay = 3.5 SECONDS - var/breakable - var/parts - var/list/climbers - var/block_turf_edges = FALSE // If true, turf edge icons will not be made on the turf this occupies. - - var/list/connections - var/list/other_connections - var/list/blend_objects = newlist() // Objects which to blend with - var/list/noblend_objects = newlist() //Objects to avoid blending with (such as children of listed blend objects. - -/obj/structure/Initialize() - . = ..() - if(climbable) - verbs += /obj/structure/proc/climb_on - -/obj/structure/Destroy() - if(parts) - new parts(loc) - return ..() - -/obj/structure/attack_hand(mob/user) - if(breakable) - if(HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - attack_generic(user,1,"smashes") - else if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(user)) - attack_generic(user,1,"slices") - - if(LAZYLEN(climbers) && !(user in climbers)) - user.visible_message("[user.name] shakes \the [src].", \ - "You shake \the [src].") - structure_shaken() - - return ..() - -/obj/structure/attack_tk() - return - -/obj/structure/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - if(3.0) - return - -/obj/structure/proc/climb_on() - set name = "Climb structure" - set desc = "Climbs onto a structure." - set category = "Object" - set src in oview(1) - - do_climb(usr) - -/obj/structure/MouseDrop_T(mob/target, mob/user) - var/mob/living/H = user - if(istype(H) && can_climb(H) && target == user) - do_climb(target) - else - return ..() - -/obj/structure/proc/can_climb(var/mob/living/user, post_climb_check=0) - if (!climbable || !can_touch(user) || (!post_climb_check && (user in climbers))) - return 0 - - if (!user.Adjacent(src)) - to_chat(user, "You can't climb there, the way is blocked.") - return 0 - - var/obj/occupied = turf_is_crowded() - if(occupied) - to_chat(user, "There's \a [occupied] in the way.") - return 0 - return 1 - -/obj/structure/proc/turf_is_crowded() - var/turf/T = get_turf(src) - if(!T || !istype(T)) - return "empty void" - if(T.density) - return T - for(var/obj/O in T.contents) - if(istype(O,/obj/structure)) - var/obj/structure/S = O - if(S.climbable) continue - if(O && O.density && !(O.flags & ON_BORDER)) //ON_BORDER structures are handled by the Adjacent() check. - return O - return 0 - -/obj/structure/proc/do_climb(var/mob/living/user) - if (!can_climb(user)) - return - - usr.visible_message("[user] starts climbing onto \the [src]!") - LAZYDISTINCTADD(climbers, user) - - if(!do_after(user,(issmall(user) ? climb_delay * 0.6 : climb_delay))) - LAZYREMOVE(climbers, user) - return - - if (!can_climb(user, post_climb_check=1)) - LAZYREMOVE(climbers, user) - return - - usr.forceMove(climb_to(user)) - - if (get_turf(user) == get_turf(src)) - usr.visible_message("[user] climbs onto \the [src]!") - LAZYREMOVE(climbers, user) - -/obj/structure/proc/climb_to(var/mob/living/user) - return get_turf(src) - -/obj/structure/proc/structure_shaken() - for(var/mob/living/M in climbers) - M.Weaken(1) - to_chat(M, "You topple as you are shaken off \the [src]!") - climbers.Cut(1,2) - - for(var/mob/living/M in get_turf(src)) - if(M.lying) return //No spamming this on people. - - M.Weaken(3) - to_chat(M, "You topple as \the [src] moves under you!") - - if(prob(25)) - - var/damage = rand(15,30) - var/mob/living/carbon/human/H = M - if(!istype(H)) - to_chat(H, "You land heavily!") - M.adjustBruteLoss(damage) - return - - var/obj/item/organ/external/affecting - - switch(pick(list("ankle","wrist","head","knee","elbow"))) - if("ankle") - affecting = H.get_organ(pick(BP_L_FOOT, BP_R_FOOT)) - if("knee") - affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG)) - if("wrist") - affecting = H.get_organ(pick(BP_L_HAND, BP_R_HAND)) - if("elbow") - affecting = H.get_organ(pick(BP_L_ARM, BP_R_ARM)) - if("head") - affecting = H.get_organ(BP_HEAD) - - if(affecting) - to_chat(M, "You land heavily on your [affecting.name]!") - affecting.take_damage(damage, 0) - if(affecting.parent) - affecting.parent.add_autopsy_data("Misadventure", damage) - else - to_chat(H, "You land heavily!") - H.adjustBruteLoss(damage) - - H.UpdateDamageIcon() - H.updatehealth() - return - -/obj/structure/proc/can_touch(var/mob/user) - if (!user) - return 0 - if(!Adjacent(user)) - return 0 - if (user.restrained() || user.buckled) - to_chat(user, "You need your hands and legs free for this.") - return 0 - if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened) - return 0 - if (isAI(user)) - to_chat(user, "You need hands for this.") - return 0 - return 1 - -/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb) - if(!breakable || damage < STRUCTURE_MIN_DAMAGE_THRESHOLD) - return 0 - visible_message("[user] [attack_verb] the [src] apart!") - user.do_attack_animation(src) - spawn(1) qdel(src) - return 1 - -/obj/structure/proc/can_visually_connect() - return anchored - -/obj/structure/proc/can_visually_connect_to(var/obj/structure/S) - return istype(S, src) - -/obj/structure/proc/update_connections(propagate = 0) - var/list/dirs = list() - var/list/other_dirs = list() - - for(var/obj/structure/S in orange(src, 1)) - if(can_visually_connect_to(S)) - if(S.can_visually_connect()) - if(propagate) - S.update_connections() - S.update_icon() - dirs += get_dir(src, S) - - if(!can_visually_connect()) - connections = list("0", "0", "0", "0") - other_connections = list("0", "0", "0", "0") - return FALSE - - for(var/direction in cardinal) - var/turf/T = get_step(src, direction) - var/success = 0 - for(var/b_type in blend_objects) - if(istype(T, b_type)) - success = 1 - if(propagate) - var/turf/simulated/wall/W = T - if(istype(W)) - W.update_connections(1) - if(success) - break // breaks inner loop - if(!success) - blend_obj_loop: - for(var/obj/O in T) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - success = 1 - for(var/obj/structure/S in T) - if(istype(S, src)) - success = 0 - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - success = 0 - - if(success) - break blend_obj_loop // breaks outer loop - - if(success) - dirs += get_dir(src, T) - other_dirs += get_dir(src, T) - - refresh_neighbors() - - connections = dirs_to_corner_states(dirs) - other_connections = dirs_to_corner_states(other_dirs) - return TRUE - -/obj/structure/proc/refresh_neighbors() - for(var/turf/T as anything in RANGE_TURFS(1, src)) - T.update_icon() +/obj/structure + icon = 'icons/obj/structures.dmi' + w_class = ITEMSIZE_NO_CONTAINER + blocks_emissive = EMISSIVE_BLOCK_GENERIC + + var/climbable + var/climb_delay = 3.5 SECONDS + var/breakable + var/parts + var/list/climbers + var/block_turf_edges = FALSE // If true, turf edge icons will not be made on the turf this occupies. + + var/list/connections + var/list/other_connections + var/list/blend_objects = newlist() // Objects which to blend with + var/list/noblend_objects = newlist() //Objects to avoid blending with (such as children of listed blend objects. + +/obj/structure/Initialize() + . = ..() + if(climbable) + verbs += /obj/structure/proc/climb_on + +/obj/structure/Destroy() + if(parts) + new parts(loc) + return ..() + +/obj/structure/attack_hand(mob/user) + if(breakable) + if(HULK in user.mutations) + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + attack_generic(user,1,"smashes") + else if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.can_shred(user)) + attack_generic(user,1,"slices") + + if(LAZYLEN(climbers) && !(user in climbers)) + user.visible_message("[user.name] shakes \the [src].", \ + "You shake \the [src].") + structure_shaken() + + return ..() + +/obj/structure/attack_tk() + return + +/obj/structure/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + if(3.0) + return + +/obj/structure/proc/climb_on() + set name = "Climb structure" + set desc = "Climbs onto a structure." + set category = "Object" + set src in oview(1) + + do_climb(usr) + +/obj/structure/MouseDrop_T(mob/target, mob/user) + var/mob/living/H = user + if(istype(H) && can_climb(H) && target == user) + do_climb(target) + else + return ..() + +/obj/structure/proc/can_climb(var/mob/living/user, post_climb_check=0) + if (!climbable || !can_touch(user) || (!post_climb_check && (user in climbers))) + return 0 + + if (!user.Adjacent(src)) + to_chat(user, "You can't climb there, the way is blocked.") + return 0 + + var/obj/occupied = turf_is_crowded() + if(occupied) + to_chat(user, "There's \a [occupied] in the way.") + return 0 + return 1 + +/obj/structure/proc/turf_is_crowded() + var/turf/T = get_turf(src) + if(!T || !istype(T)) + return "empty void" + if(T.density) + return T + for(var/obj/O in T.contents) + if(istype(O,/obj/structure)) + var/obj/structure/S = O + if(S.climbable) continue + if(O && O.density && !(O.flags & ON_BORDER)) //ON_BORDER structures are handled by the Adjacent() check. + return O + return 0 + +/obj/structure/proc/do_climb(var/mob/living/user) + if (!can_climb(user)) + return + + usr.visible_message("[user] starts climbing onto \the [src]!") + LAZYDISTINCTADD(climbers, user) + + if(!do_after(user,(issmall(user) ? climb_delay * 0.6 : climb_delay))) + LAZYREMOVE(climbers, user) + return + + if (!can_climb(user, post_climb_check=1)) + LAZYREMOVE(climbers, user) + return + + usr.forceMove(climb_to(user)) + + if (get_turf(user) == get_turf(src)) + usr.visible_message("[user] climbs onto \the [src]!") + LAZYREMOVE(climbers, user) + +/obj/structure/proc/climb_to(var/mob/living/user) + return get_turf(src) + +/obj/structure/proc/structure_shaken() + for(var/mob/living/M in climbers) + M.Weaken(1) + to_chat(M, "You topple as you are shaken off \the [src]!") + climbers.Cut(1,2) + + for(var/mob/living/M in get_turf(src)) + if(M.lying) return //No spamming this on people. + + M.Weaken(3) + to_chat(M, "You topple as \the [src] moves under you!") + + if(prob(25)) + + var/damage = rand(15,30) + var/mob/living/carbon/human/H = M + if(!istype(H)) + to_chat(H, "You land heavily!") + M.adjustBruteLoss(damage) + return + + var/obj/item/organ/external/affecting + + switch(pick(list("ankle","wrist","head","knee","elbow"))) + if("ankle") + affecting = H.get_organ(pick(BP_L_FOOT, BP_R_FOOT)) + if("knee") + affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG)) + if("wrist") + affecting = H.get_organ(pick(BP_L_HAND, BP_R_HAND)) + if("elbow") + affecting = H.get_organ(pick(BP_L_ARM, BP_R_ARM)) + if("head") + affecting = H.get_organ(BP_HEAD) + + if(affecting) + to_chat(M, "You land heavily on your [affecting.name]!") + affecting.take_damage(damage, 0) + if(affecting.parent) + affecting.parent.add_autopsy_data("Misadventure", damage) + else + to_chat(H, "You land heavily!") + H.adjustBruteLoss(damage) + + H.UpdateDamageIcon() + H.updatehealth() + return + +/obj/structure/proc/can_touch(var/mob/user) + if (!user) + return 0 + if(!Adjacent(user)) + return 0 + if (user.restrained() || user.buckled) + to_chat(user, "You need your hands and legs free for this.") + return 0 + if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened) + return 0 + if (isAI(user)) + to_chat(user, "You need hands for this.") + return 0 + return 1 + +/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb) + if(!breakable || damage < STRUCTURE_MIN_DAMAGE_THRESHOLD) + return 0 + visible_message("[user] [attack_verb] the [src] apart!") + user.do_attack_animation(src) + spawn(1) qdel(src) + return 1 + +/obj/structure/proc/can_visually_connect() + return anchored + +/obj/structure/proc/can_visually_connect_to(var/obj/structure/S) + return istype(S, src) + +/obj/structure/proc/update_connections(propagate = 0) + var/list/dirs = list() + var/list/other_dirs = list() + + for(var/obj/structure/S in orange(src, 1)) + if(can_visually_connect_to(S)) + if(S.can_visually_connect()) + if(propagate) + S.update_connections() + S.update_icon() + dirs += get_dir(src, S) + + if(!can_visually_connect()) + connections = list("0", "0", "0", "0") + other_connections = list("0", "0", "0", "0") + return FALSE + + for(var/direction in cardinal) + var/turf/T = get_step(src, direction) + var/success = 0 + for(var/b_type in blend_objects) + if(istype(T, b_type)) + success = 1 + if(propagate) + var/turf/simulated/wall/W = T + if(istype(W)) + W.update_connections(1) + if(success) + break // breaks inner loop + if(!success) + blend_obj_loop: + for(var/obj/O in T) + for(var/b_type in blend_objects) + if(istype(O, b_type)) + success = 1 + for(var/obj/structure/S in T) + if(istype(S, src)) + success = 0 + for(var/nb_type in noblend_objects) + if(istype(O, nb_type)) + success = 0 + + if(success) + break blend_obj_loop // breaks outer loop + + if(success) + dirs += get_dir(src, T) + other_dirs += get_dir(src, T) + + refresh_neighbors() + + connections = dirs_to_corner_states(dirs) + other_connections = dirs_to_corner_states(other_dirs) + return TRUE + +/obj/structure/proc/refresh_neighbors() + for(var/turf/T as anything in RANGE_TURFS(1, src)) + T.update_icon() diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm index ecff7a2763..239021f1dc 100644 --- a/code/game/objects/structures/alien/alien.dm +++ b/code/game/objects/structures/alien/alien.dm @@ -1,92 +1,92 @@ -/obj/structure/alien //Gurg Addition, framework for alien structures. - name = "alien thing" - desc = "There's something alien about this." - icon = 'icons/mob/alien.dmi' - layer = ABOVE_JUNK_LAYER - var/health = 50 - unacidable = TRUE - anchored = TRUE - -/obj/structure/alien/proc/healthcheck() - if(health <=0) - set_density(0) - qdel(src) - return - -/obj/structure/alien/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/structure/alien/ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - if (prob(50)) - health-=50 - else - health-=25 - healthcheck() - return - -/obj/structure/alien/hitby(AM as mob|obj) - ..() - visible_message("\The [src] was hit by \the [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - -/obj/structure/alien/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - user.do_attack_animation(src) - health -= damage - healthcheck() - return - -/obj/structure/alien/attackby(obj/item/weapon/W as obj, mob/user as mob) - - user.setClickCooldown(user.get_attack_speed(W)) - var/aforce = W.force - health = max(0, health - aforce) - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - visible_message("[user] attacks the [src]!") - healthcheck() - ..() - return - -/obj/structure/alien/attack_hand(mob/user as mob) - usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (HULK in usr.mutations) - visible_message("[usr] destroys the [name]!") - health = 0 - else - - // Aliens can get straight through these. - if(istype(usr,/mob/living/carbon)) - if(user.a_intent == I_HURT) - var/mob/living/carbon/M = usr - if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - visible_message ("[usr] strokes the [name] and it melts away!", 1) - health = 0 - healthcheck() - return - healthcheck() - return - -/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density +/obj/structure/alien //Gurg Addition, framework for alien structures. + name = "alien thing" + desc = "There's something alien about this." + icon = 'icons/mob/alien.dmi' + layer = ABOVE_JUNK_LAYER + var/health = 50 + unacidable = TRUE + anchored = TRUE + +/obj/structure/alien/proc/healthcheck() + if(health <=0) + set_density(0) + qdel(src) + return + +/obj/structure/alien/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + healthcheck() + return + +/obj/structure/alien/ex_act(severity) + switch(severity) + if(1.0) + health-=50 + if(2.0) + health-=50 + if(3.0) + if (prob(50)) + health-=50 + else + health-=25 + healthcheck() + return + +/obj/structure/alien/hitby(AM as mob|obj) + ..() + visible_message("\The [src] was hit by \the [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 10 + else + tforce = AM:throwforce + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + health = max(0, health - tforce) + healthcheck() + ..() + return + +/obj/structure/alien/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + user.do_attack_animation(src) + health -= damage + healthcheck() + return + +/obj/structure/alien/attackby(obj/item/weapon/W as obj, mob/user as mob) + + user.setClickCooldown(user.get_attack_speed(W)) + var/aforce = W.force + health = max(0, health - aforce) + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + visible_message("[user] attacks the [src]!") + healthcheck() + ..() + return + +/obj/structure/alien/attack_hand(mob/user as mob) + usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if (HULK in usr.mutations) + visible_message("[usr] destroys the [name]!") + health = 0 + else + + // Aliens can get straight through these. + if(istype(usr,/mob/living/carbon)) + if(user.a_intent == I_HURT) + var/mob/living/carbon/M = usr + if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) + visible_message ("[usr] strokes the [name] and it melts away!", 1) + health = 0 + healthcheck() + return + healthcheck() + return + +/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(air_group) return 0 + if(istype(mover) && mover.checkpass(PASSGLASS)) + return !opacity + return !density diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 50869c4497..e63debb8ef 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -1,248 +1,248 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/weapon/bedsheet - name = "bedsheet" - desc = "A surprisingly soft linen bedsheet." - icon = 'icons/obj/items.dmi' - icon_state = "sheet" - slot_flags = SLOT_BACK - plane = MOB_PLANE - layer = BELOW_MOB_LAYER - throwforce = 1 - throw_speed = 1 - throw_range = 2 - w_class = ITEMSIZE_SMALL - drop_sound = 'sound/items/drop/clothing.ogg' - pickup_sound = 'sound/items/pickup/clothing.ogg' - -/obj/item/weapon/bedsheet/attack_self(mob/user as mob) - user.drop_item() - if(layer == initial(layer)) - layer = ABOVE_MOB_LAYER - else - reset_plane_and_layer() - add_fingerprint(user) - return - -/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user) - if(is_sharp(I)) - user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") - if(do_after(user, 50)) - to_chat(user, "You cut [src] into pieces!") - for(var/i in 1 to rand(2,5)) - new /obj/item/weapon/reagent_containers/glass/rag(drop_location()) - qdel(src) - return - ..() - -/obj/item/weapon/bedsheet/blue - icon_state = "sheetblue" - -/obj/item/weapon/bedsheet/green - icon_state = "sheetgreen" - -/obj/item/weapon/bedsheet/orange - icon_state = "sheetorange" - -/obj/item/weapon/bedsheet/purple - icon_state = "sheetpurple" - -/obj/item/weapon/bedsheet/rainbow - icon_state = "sheetrainbow" - -/obj/item/weapon/bedsheet/red - icon_state = "sheetred" - -/obj/item/weapon/bedsheet/yellow - icon_state = "sheetyellow" - -/obj/item/weapon/bedsheet/mime - icon_state = "sheetmime" - -/obj/item/weapon/bedsheet/clown - icon_state = "sheetclown" - item_state = "sheetrainbow" - -/obj/item/weapon/bedsheet/captain - icon_state = "sheetcaptain" - -/obj/item/weapon/bedsheet/rd - icon_state = "sheetrd" - -/obj/item/weapon/bedsheet/medical - icon_state = "sheetmedical" - -/obj/item/weapon/bedsheet/hos - icon_state = "sheethos" - -/obj/item/weapon/bedsheet/hop - icon_state = "sheethop" - -/obj/item/weapon/bedsheet/ce - icon_state = "sheetce" - -/obj/item/weapon/bedsheet/brown - icon_state = "sheetbrown" - -/obj/item/weapon/bedsheet/ian - icon_state = "sheetian" - -/obj/item/weapon/bedsheet/double - icon_state = "doublesheet" - item_state = "sheet" - -/obj/item/weapon/bedsheet/bluedouble - icon_state = "doublesheetblue" - item_state = "sheetblue" - -/obj/item/weapon/bedsheet/greendouble - icon_state = "doublesheetgreen" - item_state = "sheetgreen" - -/obj/item/weapon/bedsheet/orangedouble - icon_state = "doublesheetorange" - item_state = "sheetorange" - -/obj/item/weapon/bedsheet/purpledouble - icon_state = "doublesheetpurple" - item_state = "sheetpurple" - -/obj/item/weapon/bedsheet/rainbowdouble //all the way across the sky. - icon_state = "doublesheetrainbow" - item_state = "sheetrainbow" - -/obj/item/weapon/bedsheet/reddouble - icon_state = "doublesheetred" - item_state = "sheetred" - -/obj/item/weapon/bedsheet/yellowdouble - icon_state = "doublesheetyellow" - item_state = "sheetyellow" - -/obj/item/weapon/bedsheet/mimedouble - icon_state = "doublesheetmime" - item_state = "sheetmime" - -/obj/item/weapon/bedsheet/clowndouble - icon_state = "doublesheetclown" - item_state = "sheetrainbow" - -/obj/item/weapon/bedsheet/captaindouble - icon_state = "doublesheetcaptain" - item_state = "sheetcaptain" - -/obj/item/weapon/bedsheet/rddouble - icon_state = "doublesheetrd" - item_state = "sheetrd" - -/obj/item/weapon/bedsheet/hosdouble - icon_state = "doublesheethos" - item_state = "sheethos" - -/obj/item/weapon/bedsheet/hopdouble - icon_state = "doublesheethop" - item_state = "sheethop" - -/obj/item/weapon/bedsheet/cedouble - icon_state = "doublesheetce" - item_state = "sheetce" - -/obj/item/weapon/bedsheet/browndouble - icon_state = "doublesheetbrown" - item_state = "sheetbrown" - -/obj/item/weapon/bedsheet/iandouble - icon_state = "doublesheetian" - item_state = "sheetian" - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "A linen bin. It looks rather cosy." - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = TRUE - var/amount = 20 - var/list/sheets = list() - var/obj/item/hidden = null - - -/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 amount / 2) icon_state = "linenbin-half" - else icon_state = "linenbin-full" - - -/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/bedsheet)) - user.drop_item() - I.loc = src - sheets.Add(I) - amount++ - to_chat(user, "You put [I] in [src].") - else if(amount && !hidden && I.w_class < ITEMSIZE_LARGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - user.drop_item() - I.loc = src - hidden = I - to_chat(user, "You hide [I] among the sheets.") - -/obj/structure/bedsheetbin/attack_hand(mob/user as mob) - if(amount >= 1) - amount-- - - var/obj/item/weapon/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/weapon/bedsheet(loc) - - B.loc = user.loc - user.put_in_hands(B) - to_chat(user, "You take [B] out of [src].") - - if(hidden) - hidden.loc = user.loc - to_chat(user, "[hidden] falls out of [B]!") - hidden = null - - - add_fingerprint(user) - -/obj/structure/bedsheetbin/attack_tk(mob/user as mob) - if(amount >= 1) - amount-- - - var/obj/item/weapon/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/weapon/bedsheet(loc) - - B.loc = loc - to_chat(user, "You telekinetically remove [B] from [src].") - update_icon() - - if(hidden) - hidden.loc = loc - hidden = null - - - add_fingerprint(user) +/* +CONTAINS: +BEDSHEETS +LINEN BINS +*/ + +/obj/item/weapon/bedsheet + name = "bedsheet" + desc = "A surprisingly soft linen bedsheet." + icon = 'icons/obj/items.dmi' + icon_state = "sheet" + slot_flags = SLOT_BACK + plane = MOB_PLANE + layer = BELOW_MOB_LAYER + throwforce = 1 + throw_speed = 1 + throw_range = 2 + w_class = ITEMSIZE_SMALL + drop_sound = 'sound/items/drop/clothing.ogg' + pickup_sound = 'sound/items/pickup/clothing.ogg' + +/obj/item/weapon/bedsheet/attack_self(mob/user as mob) + user.drop_item() + if(layer == initial(layer)) + layer = ABOVE_MOB_LAYER + else + reset_plane_and_layer() + add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user) + if(is_sharp(I)) + user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") + if(do_after(user, 50)) + to_chat(user, "You cut [src] into pieces!") + for(var/i in 1 to rand(2,5)) + new /obj/item/weapon/reagent_containers/glass/rag(drop_location()) + qdel(src) + return + ..() + +/obj/item/weapon/bedsheet/blue + icon_state = "sheetblue" + +/obj/item/weapon/bedsheet/green + icon_state = "sheetgreen" + +/obj/item/weapon/bedsheet/orange + icon_state = "sheetorange" + +/obj/item/weapon/bedsheet/purple + icon_state = "sheetpurple" + +/obj/item/weapon/bedsheet/rainbow + icon_state = "sheetrainbow" + +/obj/item/weapon/bedsheet/red + icon_state = "sheetred" + +/obj/item/weapon/bedsheet/yellow + icon_state = "sheetyellow" + +/obj/item/weapon/bedsheet/mime + icon_state = "sheetmime" + +/obj/item/weapon/bedsheet/clown + icon_state = "sheetclown" + item_state = "sheetrainbow" + +/obj/item/weapon/bedsheet/captain + icon_state = "sheetcaptain" + +/obj/item/weapon/bedsheet/rd + icon_state = "sheetrd" + +/obj/item/weapon/bedsheet/medical + icon_state = "sheetmedical" + +/obj/item/weapon/bedsheet/hos + icon_state = "sheethos" + +/obj/item/weapon/bedsheet/hop + icon_state = "sheethop" + +/obj/item/weapon/bedsheet/ce + icon_state = "sheetce" + +/obj/item/weapon/bedsheet/brown + icon_state = "sheetbrown" + +/obj/item/weapon/bedsheet/ian + icon_state = "sheetian" + +/obj/item/weapon/bedsheet/double + icon_state = "doublesheet" + item_state = "sheet" + +/obj/item/weapon/bedsheet/bluedouble + icon_state = "doublesheetblue" + item_state = "sheetblue" + +/obj/item/weapon/bedsheet/greendouble + icon_state = "doublesheetgreen" + item_state = "sheetgreen" + +/obj/item/weapon/bedsheet/orangedouble + icon_state = "doublesheetorange" + item_state = "sheetorange" + +/obj/item/weapon/bedsheet/purpledouble + icon_state = "doublesheetpurple" + item_state = "sheetpurple" + +/obj/item/weapon/bedsheet/rainbowdouble //all the way across the sky. + icon_state = "doublesheetrainbow" + item_state = "sheetrainbow" + +/obj/item/weapon/bedsheet/reddouble + icon_state = "doublesheetred" + item_state = "sheetred" + +/obj/item/weapon/bedsheet/yellowdouble + icon_state = "doublesheetyellow" + item_state = "sheetyellow" + +/obj/item/weapon/bedsheet/mimedouble + icon_state = "doublesheetmime" + item_state = "sheetmime" + +/obj/item/weapon/bedsheet/clowndouble + icon_state = "doublesheetclown" + item_state = "sheetrainbow" + +/obj/item/weapon/bedsheet/captaindouble + icon_state = "doublesheetcaptain" + item_state = "sheetcaptain" + +/obj/item/weapon/bedsheet/rddouble + icon_state = "doublesheetrd" + item_state = "sheetrd" + +/obj/item/weapon/bedsheet/hosdouble + icon_state = "doublesheethos" + item_state = "sheethos" + +/obj/item/weapon/bedsheet/hopdouble + icon_state = "doublesheethop" + item_state = "sheethop" + +/obj/item/weapon/bedsheet/cedouble + icon_state = "doublesheetce" + item_state = "sheetce" + +/obj/item/weapon/bedsheet/browndouble + icon_state = "doublesheetbrown" + item_state = "sheetbrown" + +/obj/item/weapon/bedsheet/iandouble + icon_state = "doublesheetian" + item_state = "sheetian" + +/obj/structure/bedsheetbin + name = "linen bin" + desc = "A linen bin. It looks rather cosy." + icon = 'icons/obj/structures.dmi' + icon_state = "linenbin-full" + anchored = TRUE + var/amount = 20 + var/list/sheets = list() + var/obj/item/hidden = null + + +/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 amount / 2) icon_state = "linenbin-half" + else icon_state = "linenbin-full" + + +/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/bedsheet)) + user.drop_item() + I.loc = src + sheets.Add(I) + amount++ + to_chat(user, "You put [I] in [src].") + else if(amount && !hidden && I.w_class < ITEMSIZE_LARGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. + user.drop_item() + I.loc = src + hidden = I + to_chat(user, "You hide [I] among the sheets.") + +/obj/structure/bedsheetbin/attack_hand(mob/user as mob) + if(amount >= 1) + amount-- + + var/obj/item/weapon/bedsheet/B + if(sheets.len > 0) + B = sheets[sheets.len] + sheets.Remove(B) + + else + B = new /obj/item/weapon/bedsheet(loc) + + B.loc = user.loc + user.put_in_hands(B) + to_chat(user, "You take [B] out of [src].") + + if(hidden) + hidden.loc = user.loc + to_chat(user, "[hidden] falls out of [B]!") + hidden = null + + + add_fingerprint(user) + +/obj/structure/bedsheetbin/attack_tk(mob/user as mob) + if(amount >= 1) + amount-- + + var/obj/item/weapon/bedsheet/B + if(sheets.len > 0) + B = sheets[sheets.len] + sheets.Remove(B) + + else + B = new /obj/item/weapon/bedsheet(loc) + + B.loc = loc + to_chat(user, "You telekinetically remove [B] from [src].") + update_icon() + + if(hidden) + hidden.loc = loc + hidden = null + + + add_fingerprint(user) diff --git a/code/game/objects/structures/cliff.dm b/code/game/objects/structures/cliff.dm index 016727ac34..6370e64271 100644 --- a/code/game/objects/structures/cliff.dm +++ b/code/game/objects/structures/cliff.dm @@ -1,272 +1,272 @@ -GLOBAL_LIST_EMPTY(cliff_icon_cache) - -/* -Cliffs give a visual illusion of depth by seperating two places while presenting a 'top' and 'bottom' side. - -Mobs moving into a cliff from the bottom side will simply bump into it and be denied moving into the tile, -where as mobs moving into a cliff from the top side will 'fall' off the cliff, forcing them to the bottom, causing significant damage and stunning them. - -Mobs can climb this while wearing climbing equipment by clickdragging themselves onto a cliff, as if it were a table. - -Flying mobs can pass over all cliffs with no risk of falling. - -Projectiles and thrown objects can pass, however if moving upwards, there is a chance for it to be stopped by the cliff. -This makes fighting something that is on top of a cliff more challenging. - -As a note, dir points upwards, e.g. pointing WEST means the left side is 'up', and the right side is 'down'. - -When mapping these in, be sure to give at least a one tile clearance, as NORTH facing cliffs expand to -two tiles on initialization, and which way a cliff is facing may change during maploading. -*/ - -/obj/structure/cliff - name = "cliff" - desc = "A steep rock ledge. You might be able to climb it if you feel bold enough." - description_info = "Walking off the edge of a cliff while on top will cause you to fall off, causing severe injury.
                    \ - You can climb this cliff if wearing special climbing equipment, by click-dragging yourself onto the cliff.
                    \ - Projectiles traveling up a cliff may hit the cliff instead, making it more difficult to fight something \ - on top." - icon = 'icons/obj/flora/rocks.dmi' - - anchored = TRUE - density = TRUE - opacity = FALSE - climbable = TRUE - climb_delay = 10 SECONDS - unacidable = TRUE - block_turf_edges = TRUE // Don't want turf edges popping up from the cliff edge. - plane = TURF_PLANE - - var/icon_variant = null // Used to make cliffs less repeative by having a selection of sprites to display. - var/corner = FALSE // Used for icon things. - var/ramp = FALSE // Ditto. - var/bottom = FALSE // Used for 'bottom' typed cliffs, to avoid infinite cliffs, and for icons. - - var/is_double_cliff = FALSE // Set to true when making the two-tile cliffs, used for projectile checks. - var/uphill_penalty = 30 // Odds of a projectile not making it up the cliff. - -/obj/structure/cliff/Initialize() - . = ..() - register_dangerous_to_step() - -/obj/structure/cliff/Destroy() - unregister_dangerous_to_step() - . = ..() - -/obj/structure/cliff/Moved(atom/oldloc) - . = ..() - if(.) - var/turf/old_turf = get_turf(oldloc) - var/turf/new_turf = get_turf(src) - if(old_turf != new_turf) - old_turf.unregister_dangerous_object(src) - new_turf.register_dangerous_object(src) - -// These arrange their sprites at runtime, as opposed to being statically placed in the map file. -/obj/structure/cliff/automatic - icon_state = "cliffbuilder" - dir = NORTH - -/obj/structure/cliff/automatic/corner - icon_state = "cliffbuilder-corner" - dir = NORTHEAST - corner = TRUE - -// Tiny part that doesn't block, used for making 'ramps'. -/obj/structure/cliff/automatic/ramp - icon_state = "cliffbuilder-ramp" - dir = NORTHEAST - density = FALSE - ramp = TRUE - -// Made automatically as needed by automatic cliffs. -/obj/structure/cliff/bottom - bottom = TRUE - -/obj/structure/cliff/automatic/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -// Paranoid about the maploader, direction is very important to cliffs, since they may get bigger if initialized while facing NORTH. -/obj/structure/cliff/automatic/LateInitialize() - if(dir in GLOB.cardinal) - icon_variant = pick("a", "b", "c") - - if(dir & NORTH && !bottom) // North-facing cliffs require more cliffs to be made. - make_bottom() - - update_icon() - -/obj/structure/cliff/proc/make_bottom() - // First, make sure there's room to put the bottom side. - var/turf/T = locate(x, y - 1, z) - if(!istype(T)) - return FALSE - - // Now make the bottom cliff have mostly the same variables. - var/obj/structure/cliff/bottom/bottom = new(T) - is_double_cliff = TRUE - climb_delay /= 2 // Since there are two cliffs to climb when going north, both take half the time. - - bottom.dir = dir - bottom.is_double_cliff = TRUE - bottom.climb_delay = climb_delay - bottom.icon_variant = icon_variant - bottom.corner = corner - bottom.ramp = ramp - bottom.layer = layer - 0.1 - bottom.density = density - bottom.update_icon() - -/obj/structure/cliff/set_dir(new_dir) - ..() - update_icon() - -/obj/structure/cliff/update_icon() - icon_state = "cliff-[dir][icon_variant][bottom ? "-bottom" : ""][corner ? "-corner" : ""][ramp ? "-ramp" : ""]" - - // Now for making the top-side look like a different turf. - var/turf/T = get_step(src, dir) - if(!istype(T)) - return - - var/subtraction_icon_state = "[icon_state]-subtract" - var/cache_string = "[icon_state]_[T.icon]_[T.icon_state]" - if(T && (subtraction_icon_state in cached_icon_states(icon))) - cut_overlays() - // If we've made the same icon before, just recycle it. - if(cache_string in GLOB.cliff_icon_cache) - add_overlay(GLOB.cliff_icon_cache[cache_string]) - - else // Otherwise make a new one, but only once. - var/icon/underlying_ground = icon(T.icon, T.icon_state, T.dir) - var/icon/subtract = icon(icon, subtraction_icon_state) - underlying_ground.Blend(subtract, ICON_SUBTRACT) - var/image/final = image(underlying_ground) - final.layer = src.layer - 0.2 - GLOB.cliff_icon_cache[cache_string] = final - add_overlay(final) - - -// Movement-related code. - -/obj/structure/cliff/CanPass(atom/movable/mover, turf/target) - if(isliving(mover)) - var/mob/living/L = mover - if(L.hovering || L.flying) // Flying mobs can always pass. - return TRUE - return ..() - - // Projectiles and objects flying 'upward' have a chance to hit the cliff instead, wasting the shot. - else if(istype(mover, /obj)) - var/obj/O = mover - if(check_shield_arc(src, dir, O)) // This is actually for mobs but it will work for our purposes as well. - if(prob(uphill_penalty / (1 + is_double_cliff) )) // Firing upwards facing NORTH means it will likely have to pass through two cliffs, so the chance is halved. - return FALSE - return TRUE - -/obj/structure/cliff/Bumped(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(should_fall(L)) - fall_off_cliff(L) - return - ..() - -/obj/structure/cliff/proc/should_fall(mob/living/L) - if(L.hovering || L.flying) - return FALSE - - var/turf/T = get_turf(L) - if(T && get_dir(T, loc) & reverse_dir[dir]) // dir points 'up' the cliff, e.g. cliff pointing NORTH will cause someone to fall if moving SOUTH into it. - return TRUE - return FALSE - -/obj/structure/cliff/proc/fall_off_cliff(mob/living/L) - if(!istype(L)) - return FALSE - var/turf/T = get_step(src, reverse_dir[dir]) - var/displaced = FALSE - - if(dir in list(EAST, WEST)) // Apply an offset if flying sideways, to help maintain the illusion of depth. - for(var/i = 1 to 2) - var/turf/new_T = locate(T.x, T.y - i, T.z) - if(!new_T || locate(/obj/structure/cliff) in new_T) - break - T = new_T - displaced = TRUE - - if(istype(T)) - - var/safe_fall = FALSE - if(ishuman(L)) - var/mob/living/carbon/human/H = L - safe_fall = H.species.handle_falling(H, T, silent = TRUE, planetary = FALSE) - - if(safe_fall) - visible_message(span("notice", "\The [L] glides down from \the [src].")) - else - visible_message(span("danger", "\The [L] falls off \the [src]!")) - L.forceMove(T) - - var/harm = !is_double_cliff ? 1 : 0.5 - if(!safe_fall) - // Do the actual hurting. Double cliffs do halved damage due to them most likely hitting twice. - if(istype(L.buckled, /obj/vehicle)) // People falling off in vehicles will take less damage, but will damage the vehicle severely. - var/obj/vehicle/vehicle = L.buckled - vehicle.adjust_health(40 * harm) - to_chat(L, span("warning", "\The [vehicle] absorbs some of the impact, damaging it.")) - harm /= 2 - - playsound(L, 'sound/effects/break_stone.ogg', 70, 1) - L.Weaken(5 * harm) - - var/fall_time = 3 - if(displaced) // Make the fall look more natural when falling sideways. - L.pixel_z = 32 * 2 - animate(L, pixel_z = 0, time = fall_time) - sleep(fall_time) // A brief delay inbetween the two sounds helps sell the 'ouch' effect. - - if(safe_fall) - visible_message(span("notice", "\The [L] lands on \the [T].")) - playsound(L, "rustle", 25, 1) - return - - playsound(L, "punch", 70, 1) - shake_camera(L, 1, 1) - - visible_message(span("danger", "\The [L] hits \the [T]!")) - - // The bigger they are, the harder they fall. - // They will take at least 20 damage at the minimum, and tries to scale up to 40% of their max health. - // This scaling is capped at 100 total damage, which occurs if the thing that fell has more than 250 health. - var/damage = between(20, L.getMaxHealth() * 0.4, 100) - var/target_zone = ran_zone() - var/blocked = L.run_armor_check(target_zone, "melee") * harm - var/soaked = L.get_armor_soak(target_zone, "melee") * harm - - L.apply_damage(damage * harm, BRUTE, target_zone, blocked, soaked, used_weapon=src) - - // Now fall off more cliffs below this one if they exist. - var/obj/structure/cliff/bottom_cliff = locate() in T - if(bottom_cliff) - visible_message(span("danger", "\The [L] rolls down towards \the [bottom_cliff]!")) - sleep(5) - bottom_cliff.fall_off_cliff(L) - -/obj/structure/cliff/can_climb(mob/living/user, post_climb_check = FALSE) - // Cliff climbing requires climbing gear. - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/clothing/shoes/shoes = H.shoes - if(shoes && shoes.rock_climbing) - return ..() // Do the other checks too. - - to_chat(user, span("warning", "\The [src] is too steep to climb unassisted.")) - return FALSE - -// This tells AI mobs to not be dumb and step off cliffs willingly. -/obj/structure/cliff/is_safe_to_step(mob/living/L) - if(should_fall(L)) - return FALSE - return ..() +GLOBAL_LIST_EMPTY(cliff_icon_cache) + +/* +Cliffs give a visual illusion of depth by seperating two places while presenting a 'top' and 'bottom' side. + +Mobs moving into a cliff from the bottom side will simply bump into it and be denied moving into the tile, +where as mobs moving into a cliff from the top side will 'fall' off the cliff, forcing them to the bottom, causing significant damage and stunning them. + +Mobs can climb this while wearing climbing equipment by clickdragging themselves onto a cliff, as if it were a table. + +Flying mobs can pass over all cliffs with no risk of falling. + +Projectiles and thrown objects can pass, however if moving upwards, there is a chance for it to be stopped by the cliff. +This makes fighting something that is on top of a cliff more challenging. + +As a note, dir points upwards, e.g. pointing WEST means the left side is 'up', and the right side is 'down'. + +When mapping these in, be sure to give at least a one tile clearance, as NORTH facing cliffs expand to +two tiles on initialization, and which way a cliff is facing may change during maploading. +*/ + +/obj/structure/cliff + name = "cliff" + desc = "A steep rock ledge. You might be able to climb it if you feel bold enough." + description_info = "Walking off the edge of a cliff while on top will cause you to fall off, causing severe injury.
                    \ + You can climb this cliff if wearing special climbing equipment, by click-dragging yourself onto the cliff.
                    \ + Projectiles traveling up a cliff may hit the cliff instead, making it more difficult to fight something \ + on top." + icon = 'icons/obj/flora/rocks.dmi' + + anchored = TRUE + density = TRUE + opacity = FALSE + climbable = TRUE + climb_delay = 10 SECONDS + unacidable = TRUE + block_turf_edges = TRUE // Don't want turf edges popping up from the cliff edge. + plane = TURF_PLANE + + var/icon_variant = null // Used to make cliffs less repeative by having a selection of sprites to display. + var/corner = FALSE // Used for icon things. + var/ramp = FALSE // Ditto. + var/bottom = FALSE // Used for 'bottom' typed cliffs, to avoid infinite cliffs, and for icons. + + var/is_double_cliff = FALSE // Set to true when making the two-tile cliffs, used for projectile checks. + var/uphill_penalty = 30 // Odds of a projectile not making it up the cliff. + +/obj/structure/cliff/Initialize() + . = ..() + register_dangerous_to_step() + +/obj/structure/cliff/Destroy() + unregister_dangerous_to_step() + . = ..() + +/obj/structure/cliff/Moved(atom/oldloc) + . = ..() + if(.) + var/turf/old_turf = get_turf(oldloc) + var/turf/new_turf = get_turf(src) + if(old_turf != new_turf) + old_turf.unregister_dangerous_object(src) + new_turf.register_dangerous_object(src) + +// These arrange their sprites at runtime, as opposed to being statically placed in the map file. +/obj/structure/cliff/automatic + icon_state = "cliffbuilder" + dir = NORTH + +/obj/structure/cliff/automatic/corner + icon_state = "cliffbuilder-corner" + dir = NORTHEAST + corner = TRUE + +// Tiny part that doesn't block, used for making 'ramps'. +/obj/structure/cliff/automatic/ramp + icon_state = "cliffbuilder-ramp" + dir = NORTHEAST + density = FALSE + ramp = TRUE + +// Made automatically as needed by automatic cliffs. +/obj/structure/cliff/bottom + bottom = TRUE + +/obj/structure/cliff/automatic/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +// Paranoid about the maploader, direction is very important to cliffs, since they may get bigger if initialized while facing NORTH. +/obj/structure/cliff/automatic/LateInitialize() + if(dir in GLOB.cardinal) + icon_variant = pick("a", "b", "c") + + if(dir & NORTH && !bottom) // North-facing cliffs require more cliffs to be made. + make_bottom() + + update_icon() + +/obj/structure/cliff/proc/make_bottom() + // First, make sure there's room to put the bottom side. + var/turf/T = locate(x, y - 1, z) + if(!istype(T)) + return FALSE + + // Now make the bottom cliff have mostly the same variables. + var/obj/structure/cliff/bottom/bottom = new(T) + is_double_cliff = TRUE + climb_delay /= 2 // Since there are two cliffs to climb when going north, both take half the time. + + bottom.dir = dir + bottom.is_double_cliff = TRUE + bottom.climb_delay = climb_delay + bottom.icon_variant = icon_variant + bottom.corner = corner + bottom.ramp = ramp + bottom.layer = layer - 0.1 + bottom.density = density + bottom.update_icon() + +/obj/structure/cliff/set_dir(new_dir) + ..() + update_icon() + +/obj/structure/cliff/update_icon() + icon_state = "cliff-[dir][icon_variant][bottom ? "-bottom" : ""][corner ? "-corner" : ""][ramp ? "-ramp" : ""]" + + // Now for making the top-side look like a different turf. + var/turf/T = get_step(src, dir) + if(!istype(T)) + return + + var/subtraction_icon_state = "[icon_state]-subtract" + var/cache_string = "[icon_state]_[T.icon]_[T.icon_state]" + if(T && (subtraction_icon_state in cached_icon_states(icon))) + cut_overlays() + // If we've made the same icon before, just recycle it. + if(cache_string in GLOB.cliff_icon_cache) + add_overlay(GLOB.cliff_icon_cache[cache_string]) + + else // Otherwise make a new one, but only once. + var/icon/underlying_ground = icon(T.icon, T.icon_state, T.dir) + var/icon/subtract = icon(icon, subtraction_icon_state) + underlying_ground.Blend(subtract, ICON_SUBTRACT) + var/image/final = image(underlying_ground) + final.layer = src.layer - 0.2 + GLOB.cliff_icon_cache[cache_string] = final + add_overlay(final) + + +// Movement-related code. + +/obj/structure/cliff/CanPass(atom/movable/mover, turf/target) + if(isliving(mover)) + var/mob/living/L = mover + if(L.hovering || L.flying) // Flying mobs can always pass. + return TRUE + return ..() + + // Projectiles and objects flying 'upward' have a chance to hit the cliff instead, wasting the shot. + else if(istype(mover, /obj)) + var/obj/O = mover + if(check_shield_arc(src, dir, O)) // This is actually for mobs but it will work for our purposes as well. + if(prob(uphill_penalty / (1 + is_double_cliff) )) // Firing upwards facing NORTH means it will likely have to pass through two cliffs, so the chance is halved. + return FALSE + return TRUE + +/obj/structure/cliff/Bumped(atom/A) + if(isliving(A)) + var/mob/living/L = A + if(should_fall(L)) + fall_off_cliff(L) + return + ..() + +/obj/structure/cliff/proc/should_fall(mob/living/L) + if(L.hovering || L.flying) + return FALSE + + var/turf/T = get_turf(L) + if(T && get_dir(T, loc) & reverse_dir[dir]) // dir points 'up' the cliff, e.g. cliff pointing NORTH will cause someone to fall if moving SOUTH into it. + return TRUE + return FALSE + +/obj/structure/cliff/proc/fall_off_cliff(mob/living/L) + if(!istype(L)) + return FALSE + var/turf/T = get_step(src, reverse_dir[dir]) + var/displaced = FALSE + + if(dir in list(EAST, WEST)) // Apply an offset if flying sideways, to help maintain the illusion of depth. + for(var/i = 1 to 2) + var/turf/new_T = locate(T.x, T.y - i, T.z) + if(!new_T || locate(/obj/structure/cliff) in new_T) + break + T = new_T + displaced = TRUE + + if(istype(T)) + + var/safe_fall = FALSE + if(ishuman(L)) + var/mob/living/carbon/human/H = L + safe_fall = H.species.handle_falling(H, T, silent = TRUE, planetary = FALSE) + + if(safe_fall) + visible_message(span("notice", "\The [L] glides down from \the [src].")) + else + visible_message(span("danger", "\The [L] falls off \the [src]!")) + L.forceMove(T) + + var/harm = !is_double_cliff ? 1 : 0.5 + if(!safe_fall) + // Do the actual hurting. Double cliffs do halved damage due to them most likely hitting twice. + if(istype(L.buckled, /obj/vehicle)) // People falling off in vehicles will take less damage, but will damage the vehicle severely. + var/obj/vehicle/vehicle = L.buckled + vehicle.adjust_health(40 * harm) + to_chat(L, span("warning", "\The [vehicle] absorbs some of the impact, damaging it.")) + harm /= 2 + + playsound(L, 'sound/effects/break_stone.ogg', 70, 1) + L.Weaken(5 * harm) + + var/fall_time = 3 + if(displaced) // Make the fall look more natural when falling sideways. + L.pixel_z = 32 * 2 + animate(L, pixel_z = 0, time = fall_time) + sleep(fall_time) // A brief delay inbetween the two sounds helps sell the 'ouch' effect. + + if(safe_fall) + visible_message(span("notice", "\The [L] lands on \the [T].")) + playsound(L, "rustle", 25, 1) + return + + playsound(L, "punch", 70, 1) + shake_camera(L, 1, 1) + + visible_message(span("danger", "\The [L] hits \the [T]!")) + + // The bigger they are, the harder they fall. + // They will take at least 20 damage at the minimum, and tries to scale up to 40% of their max health. + // This scaling is capped at 100 total damage, which occurs if the thing that fell has more than 250 health. + var/damage = between(20, L.getMaxHealth() * 0.4, 100) + var/target_zone = ran_zone() + var/blocked = L.run_armor_check(target_zone, "melee") * harm + var/soaked = L.get_armor_soak(target_zone, "melee") * harm + + L.apply_damage(damage * harm, BRUTE, target_zone, blocked, soaked, used_weapon=src) + + // Now fall off more cliffs below this one if they exist. + var/obj/structure/cliff/bottom_cliff = locate() in T + if(bottom_cliff) + visible_message(span("danger", "\The [L] rolls down towards \the [bottom_cliff]!")) + sleep(5) + bottom_cliff.fall_off_cliff(L) + +/obj/structure/cliff/can_climb(mob/living/user, post_climb_check = FALSE) + // Cliff climbing requires climbing gear. + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/clothing/shoes/shoes = H.shoes + if(shoes && shoes.rock_climbing) + return ..() // Do the other checks too. + + to_chat(user, span("warning", "\The [src] is too steep to climb unassisted.")) + return FALSE + +// This tells AI mobs to not be dumb and step off cliffs willingly. +/obj/structure/cliff/is_safe_to_step(mob/living/L) + if(should_fall(L)) + return FALSE + return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index e5a9c631a9..43098084d7 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -1,164 +1,164 @@ -/obj/structure/closet/coffin - name = "coffin" - desc = "It's a burial receptacle for the dearly departed." - icon = 'icons/obj/closets/coffin.dmi' - - icon_state = "closed_unlocked" - seal_tool = /obj/item/weapon/tool/screwdriver - breakout_sound = 'sound/weapons/tablehit1.ogg' - closet_appearance = null // Special icon for us - -/* Graves */ -/obj/structure/closet/grave - name = "grave" - desc = "Dirt." - icon = 'icons/obj/closets/grave.dmi' - icon_state = "closed_unlocked" - seal_tool = null - breakout_sound = 'sound/weapons/thudswoosh.ogg' - anchored = TRUE - max_closets = 1 - opened = 1 - closet_appearance = null // Special icon for us - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - -/obj/structure/closet/grave/attack_hand(mob/user as mob) - if(opened) - visible_message("[user] starts to climb into \the [src.name].", \ - "You start to lower yourself into \the [src.name].") - if(do_after(user, 50)) - user.forceMove(src.loc) - visible_message("[user] climbs into \the [src.name].", \ - "You climb into \the [src.name].") - else - visible_message("[user] decides not to climb into \the [src.name].", \ - "You stop climbing into \the [src.name].") - return - -/obj/structure/closet/grave/CanPass(atom/movable/mover, turf/target) - if(opened && ismob(mover)) - var/mob/M = mover - add_fingerprint(M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.m_intent == "walk") - to_chat(H, "You stop at the edge of \the [src.name].") - return FALSE - else - to_chat(H, "You fall into \the [src.name]!") - fall_in(H) - return TRUE - if(isrobot(M)) - var/mob/living/silicon/robot/R = M - if(R.a_intent == I_HELP) - to_chat(R, "You stop at the edge of \the [src.name].") - return FALSE - else - to_chat(R, "You enter \the [src.name].") - return TRUE - return TRUE //Everything else can move over the graves - -/obj/structure/closet/grave/proc/fall_in(mob/living/L) //Only called on humans for now, but still - L.Weaken(5) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - var/limb_damage = rand(5,25) - H.adjustBruteLoss(limb_damage) - -/obj/structure/closet/grave/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(src.opened) - if(istype(W, /obj/item/weapon/shovel)) - user.visible_message("[user] piles dirt into \the [src.name].", \ - "You start to pile dirt into \the [src.name].", \ - "You hear dirt being moved.") - if(do_after(user, 40 * W.toolspeed)) - user.visible_message("[user] pats down the dirt on top of \the [src.name].", \ - "You finish filling in \the [src.name].") - close() - return - else - user.visible_message("[user] stops filling in \the [src.name].", \ - "You change your mind and stop filling in \the [src.name].") - return - if(istype(W, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = W - src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - return 0 - if(istype(W,/obj/item/tk_grab)) - return 0 - if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len) - var/obj/item/weapon/storage/laundry_basket/LB = W - var/turf/T = get_turf(src) - for(var/obj/item/I in LB.contents) - LB.remove_from_storage(I, T) - user.visible_message("[user] empties \the [LB] into \the [src].", \ - "You empty \the [LB] into \the [src].", \ - "You hear rustling of clothes.") - return - if(isrobot(user)) - return - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - usr.drop_item() - if(W) - W.forceMove(src.loc) - else - if(istype(W, /obj/item/weapon/shovel)) - if(user.a_intent == I_HURT) // Hurt intent means you're trying to kill someone, or just get rid of the grave - user.visible_message("[user] begins to smoothe out the dirt of \the [src.name].", \ - "You start to smoothe out the dirt of \the [src.name].", \ - "You hear dirt being moved.") - if(do_after(user, 40 * W.toolspeed)) - user.visible_message("[user] finishes smoothing out \the [src.name].", \ - "You finish smoothing out \the [src.name].") - if(LAZYLEN(contents)) - alpha = 40 // If we've got stuff inside, like maybe a person, just make it hard to see us - else - qdel(src) // Else, go away - return - else - user.visible_message("[user] stops concealing \the [src.name].", \ - "You stop concealing \the [src.name].") - return - else - user.visible_message("[user] begins to unearth \the [src.name].", \ - "You start to unearth \the [src.name].", \ - "You hear dirt being moved.") - if(do_after(user, 40 * W.toolspeed)) - user.visible_message("[user] reaches the bottom of \the [src.name].", \ - "You finish digging out \the [src.name].") - break_open() - return - else - user.visible_message("[user] stops digging out \the [src.name].", \ - "You stop digging out \the [src.name].") - return - return - -/obj/structure/closet/grave/close() - ..() - if(!opened) - sealed = TRUE - -/obj/structure/closet/grave/open() - .=..() - alpha = 255 // Needed because of grave hiding - -/obj/structure/closet/grave/bullet_act(var/obj/item/projectile/P) - return PROJECTILE_CONTINUE // It's a hole in the ground, doesn't usually stop or even care about bullets - -/obj/structure/closet/grave/return_air_for_internal_lifeform(var/mob/living/L) - var/gasid = "carbon_dioxide" - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.species && H.species.exhale_type) - gasid = H.species.exhale_type - var/datum/gas_mixture/grave_breath = new() - var/datum/gas_mixture/above_air = return_air() - grave_breath.adjust_gas(gasid, BREATH_MOLES) - grave_breath.temperature = (above_air.temperature) - 30 //Underground - return grave_breath - -/obj/structure/closet/grave/dirthole - name = "hole" +/obj/structure/closet/coffin + name = "coffin" + desc = "It's a burial receptacle for the dearly departed." + icon = 'icons/obj/closets/coffin.dmi' + + icon_state = "closed_unlocked" + seal_tool = /obj/item/weapon/tool/screwdriver + breakout_sound = 'sound/weapons/tablehit1.ogg' + closet_appearance = null // Special icon for us + +/* Graves */ +/obj/structure/closet/grave + name = "grave" + desc = "Dirt." + icon = 'icons/obj/closets/grave.dmi' + icon_state = "closed_unlocked" + seal_tool = null + breakout_sound = 'sound/weapons/thudswoosh.ogg' + anchored = TRUE + max_closets = 1 + opened = 1 + closet_appearance = null // Special icon for us + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + +/obj/structure/closet/grave/attack_hand(mob/user as mob) + if(opened) + visible_message("[user] starts to climb into \the [src.name].", \ + "You start to lower yourself into \the [src.name].") + if(do_after(user, 50)) + user.forceMove(src.loc) + visible_message("[user] climbs into \the [src.name].", \ + "You climb into \the [src.name].") + else + visible_message("[user] decides not to climb into \the [src.name].", \ + "You stop climbing into \the [src.name].") + return + +/obj/structure/closet/grave/CanPass(atom/movable/mover, turf/target) + if(opened && ismob(mover)) + var/mob/M = mover + add_fingerprint(M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.m_intent == "walk") + to_chat(H, "You stop at the edge of \the [src.name].") + return FALSE + else + to_chat(H, "You fall into \the [src.name]!") + fall_in(H) + return TRUE + if(isrobot(M)) + var/mob/living/silicon/robot/R = M + if(R.a_intent == I_HELP) + to_chat(R, "You stop at the edge of \the [src.name].") + return FALSE + else + to_chat(R, "You enter \the [src.name].") + return TRUE + return TRUE //Everything else can move over the graves + +/obj/structure/closet/grave/proc/fall_in(mob/living/L) //Only called on humans for now, but still + L.Weaken(5) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + var/limb_damage = rand(5,25) + H.adjustBruteLoss(limb_damage) + +/obj/structure/closet/grave/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(src.opened) + if(istype(W, /obj/item/weapon/shovel)) + user.visible_message("[user] piles dirt into \the [src.name].", \ + "You start to pile dirt into \the [src.name].", \ + "You hear dirt being moved.") + if(do_after(user, 40 * W.toolspeed)) + user.visible_message("[user] pats down the dirt on top of \the [src.name].", \ + "You finish filling in \the [src.name].") + close() + return + else + user.visible_message("[user] stops filling in \the [src.name].", \ + "You change your mind and stop filling in \the [src.name].") + return + if(istype(W, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = W + src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet + return 0 + if(istype(W,/obj/item/tk_grab)) + return 0 + if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len) + var/obj/item/weapon/storage/laundry_basket/LB = W + var/turf/T = get_turf(src) + for(var/obj/item/I in LB.contents) + LB.remove_from_storage(I, T) + user.visible_message("[user] empties \the [LB] into \the [src].", \ + "You empty \the [LB] into \the [src].", \ + "You hear rustling of clothes.") + return + if(isrobot(user)) + return + if(W.loc != user) // This should stop mounted modules ending up outside the module. + return + usr.drop_item() + if(W) + W.forceMove(src.loc) + else + if(istype(W, /obj/item/weapon/shovel)) + if(user.a_intent == I_HURT) // Hurt intent means you're trying to kill someone, or just get rid of the grave + user.visible_message("[user] begins to smoothe out the dirt of \the [src.name].", \ + "You start to smoothe out the dirt of \the [src.name].", \ + "You hear dirt being moved.") + if(do_after(user, 40 * W.toolspeed)) + user.visible_message("[user] finishes smoothing out \the [src.name].", \ + "You finish smoothing out \the [src.name].") + if(LAZYLEN(contents)) + alpha = 40 // If we've got stuff inside, like maybe a person, just make it hard to see us + else + qdel(src) // Else, go away + return + else + user.visible_message("[user] stops concealing \the [src.name].", \ + "You stop concealing \the [src.name].") + return + else + user.visible_message("[user] begins to unearth \the [src.name].", \ + "You start to unearth \the [src.name].", \ + "You hear dirt being moved.") + if(do_after(user, 40 * W.toolspeed)) + user.visible_message("[user] reaches the bottom of \the [src.name].", \ + "You finish digging out \the [src.name].") + break_open() + return + else + user.visible_message("[user] stops digging out \the [src.name].", \ + "You stop digging out \the [src.name].") + return + return + +/obj/structure/closet/grave/close() + ..() + if(!opened) + sealed = TRUE + +/obj/structure/closet/grave/open() + .=..() + alpha = 255 // Needed because of grave hiding + +/obj/structure/closet/grave/bullet_act(var/obj/item/projectile/P) + return PROJECTILE_CONTINUE // It's a hole in the ground, doesn't usually stop or even care about bullets + +/obj/structure/closet/grave/return_air_for_internal_lifeform(var/mob/living/L) + var/gasid = "carbon_dioxide" + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.species && H.species.exhale_type) + gasid = H.species.exhale_type + var/datum/gas_mixture/grave_breath = new() + var/datum/gas_mixture/above_air = return_air() + grave_breath.adjust_gas(gasid, BREATH_MOLES) + grave_breath.temperature = (above_air.temperature) - 30 //Underground + return grave_breath + +/obj/structure/closet/grave/dirthole + name = "hole" diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm index 6b0196168b..d649f86570 100644 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm @@ -1,4 +1,4 @@ -/obj/structure/closet/crate/critter - name = "critter crate" - desc = "A crate which can sustain life for a while." - closet_appearance = /decl/closet_appearance/large_crate/critter +/obj/structure/closet/crate/critter + name = "critter crate" + desc = "A crate which can sustain life for a while." + closet_appearance = /decl/closet_appearance/large_crate/critter diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index 6b104f7cac..c2243e42d1 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -1,120 +1,120 @@ -/obj/structure/closet/athletic_mixed - name = "athletic wardrobe" - desc = "It's a storage unit for athletic wear." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - - starts_with = list( - /obj/item/clothing/under/shorts/grey, - /obj/item/clothing/under/shorts/black, - /obj/item/clothing/under/shorts/red, - /obj/item/clothing/under/shorts/blue, - /obj/item/clothing/under/shorts/green, - /obj/item/clothing/under/shorts/white, - /obj/item/clothing/suit/storage/toggle/track, - /obj/item/clothing/suit/storage/toggle/track/blue, - /obj/item/clothing/suit/storage/toggle/track/green, - /obj/item/clothing/suit/storage/toggle/track/red, - /obj/item/clothing/suit/storage/toggle/track/white, - /obj/item/clothing/under/pants/track, - /obj/item/clothing/under/pants/track/blue, - /obj/item/clothing/under/pants/track/green, - /obj/item/clothing/under/pants/track/white, - /obj/item/clothing/under/pants/track/red, - /obj/item/clothing/shoes/athletic = 2, - /obj/item/clothing/shoes/hitops, - /obj/item/clothing/shoes/hitops/red, - /obj/item/clothing/shoes/hitops/black, - /obj/item/clothing/shoes/hitops/blue - ) - -/obj/structure/closet/athletic_swimwear - name = "athletic wardrobe" - desc = "It's a storage unit for swimwear." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - - starts_with = list( - /obj/item/clothing/under/shorts/grey, - /obj/item/clothing/under/shorts/black, - /obj/item/clothing/under/shorts/red, - /obj/item/clothing/under/shorts/blue, - /obj/item/clothing/under/shorts/green, - /obj/item/clothing/under/swimsuit/red, - /obj/item/clothing/under/swimsuit/black, - /obj/item/clothing/under/swimsuit/blue, - /obj/item/clothing/under/swimsuit/green, - /obj/item/clothing/under/swimsuit/purple, - /obj/item/clothing/under/swimsuit/striped, - /obj/item/clothing/under/swimsuit/white, - /obj/item/clothing/under/swimsuit/earth, - /obj/item/clothing/under/wetsuit, - /obj/item/clothing/under/wetsuit_rec, - /obj/item/clothing/under/wetsuit_skimpy, - /obj/item/clothing/mask/snorkel = 2, - /obj/item/clothing/shoes/swimmingfins = 2) - -/obj/structure/closet/boxinggloves - name = "boxing gloves" - desc = "It's a storage unit for gloves for use in the boxing ring." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - - starts_with = list( - /obj/item/clothing/gloves/boxing/blue, - /obj/item/clothing/gloves/boxing/green, - /obj/item/clothing/gloves/boxing/yellow, - /obj/item/clothing/gloves/boxing) - -/obj/structure/closet/masks - name = "mask closet" - desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" - closet_appearance = /decl/closet_appearance/wardrobe/mixed - - starts_with = list( - /obj/item/clothing/mask/luchador, - /obj/item/clothing/mask/luchador/rudos, - /obj/item/clothing/mask/luchador/tecnicos) - - -/obj/structure/closet/lasertag/red - name = "red laser tag equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe/red - - starts_with = list( - /obj/item/weapon/gun/energy/lasertag/red = 5, - /obj/item/clothing/suit/redtag = 5) - - -/obj/structure/closet/lasertag/blue - name = "blue laser tag equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe/blue - - starts_with = list( - /obj/item/weapon/gun/energy/lasertag/blue = 5, - /obj/item/clothing/suit/bluetag = 5) - -/obj/structure/closet/lasertag/red/laserdome - name = "red team laserdome equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe/red - - starts_with = list( - /obj/item/device/encryptionkey/ent = 3, - /obj/item/clothing/gloves/bluespace = 3, - /obj/item/clothing/under/color/red = 3, - /obj/item/weapon/gun/energy/lasertag/red = 3, - /obj/item/clothing/head/redtag = 3, - /obj/item/clothing/suit/redtag = 3) - -/obj/structure/closet/lasertag/blue/laserdome - name = "blue team laserdome equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe/blue - - starts_with = list( - /obj/item/device/encryptionkey/ent = 3, - /obj/item/clothing/gloves/bluespace = 3, - /obj/item/clothing/under/color/blue = 3, - /obj/item/weapon/gun/energy/lasertag/blue = 3, - /obj/item/clothing/head/bluetag = 3, - /obj/item/clothing/suit/bluetag = 3) +/obj/structure/closet/athletic_mixed + name = "athletic wardrobe" + desc = "It's a storage unit for athletic wear." + closet_appearance = /decl/closet_appearance/wardrobe/mixed + + starts_with = list( + /obj/item/clothing/under/shorts/grey, + /obj/item/clothing/under/shorts/black, + /obj/item/clothing/under/shorts/red, + /obj/item/clothing/under/shorts/blue, + /obj/item/clothing/under/shorts/green, + /obj/item/clothing/under/shorts/white, + /obj/item/clothing/suit/storage/toggle/track, + /obj/item/clothing/suit/storage/toggle/track/blue, + /obj/item/clothing/suit/storage/toggle/track/green, + /obj/item/clothing/suit/storage/toggle/track/red, + /obj/item/clothing/suit/storage/toggle/track/white, + /obj/item/clothing/under/pants/track, + /obj/item/clothing/under/pants/track/blue, + /obj/item/clothing/under/pants/track/green, + /obj/item/clothing/under/pants/track/white, + /obj/item/clothing/under/pants/track/red, + /obj/item/clothing/shoes/athletic = 2, + /obj/item/clothing/shoes/hitops, + /obj/item/clothing/shoes/hitops/red, + /obj/item/clothing/shoes/hitops/black, + /obj/item/clothing/shoes/hitops/blue + ) + +/obj/structure/closet/athletic_swimwear + name = "athletic wardrobe" + desc = "It's a storage unit for swimwear." + closet_appearance = /decl/closet_appearance/wardrobe/mixed + + starts_with = list( + /obj/item/clothing/under/shorts/grey, + /obj/item/clothing/under/shorts/black, + /obj/item/clothing/under/shorts/red, + /obj/item/clothing/under/shorts/blue, + /obj/item/clothing/under/shorts/green, + /obj/item/clothing/under/swimsuit/red, + /obj/item/clothing/under/swimsuit/black, + /obj/item/clothing/under/swimsuit/blue, + /obj/item/clothing/under/swimsuit/green, + /obj/item/clothing/under/swimsuit/purple, + /obj/item/clothing/under/swimsuit/striped, + /obj/item/clothing/under/swimsuit/white, + /obj/item/clothing/under/swimsuit/earth, + /obj/item/clothing/under/wetsuit, + /obj/item/clothing/under/wetsuit_rec, + /obj/item/clothing/under/wetsuit_skimpy, + /obj/item/clothing/mask/snorkel = 2, + /obj/item/clothing/shoes/swimmingfins = 2) + +/obj/structure/closet/boxinggloves + name = "boxing gloves" + desc = "It's a storage unit for gloves for use in the boxing ring." + closet_appearance = /decl/closet_appearance/wardrobe/mixed + + starts_with = list( + /obj/item/clothing/gloves/boxing/blue, + /obj/item/clothing/gloves/boxing/green, + /obj/item/clothing/gloves/boxing/yellow, + /obj/item/clothing/gloves/boxing) + +/obj/structure/closet/masks + name = "mask closet" + desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" + closet_appearance = /decl/closet_appearance/wardrobe/mixed + + starts_with = list( + /obj/item/clothing/mask/luchador, + /obj/item/clothing/mask/luchador/rudos, + /obj/item/clothing/mask/luchador/tecnicos) + + +/obj/structure/closet/lasertag/red + name = "red laser tag equipment" + desc = "It's a storage unit for laser tag equipment." + closet_appearance = /decl/closet_appearance/wardrobe/red + + starts_with = list( + /obj/item/weapon/gun/energy/lasertag/red = 5, + /obj/item/clothing/suit/redtag = 5) + + +/obj/structure/closet/lasertag/blue + name = "blue laser tag equipment" + desc = "It's a storage unit for laser tag equipment." + closet_appearance = /decl/closet_appearance/wardrobe/blue + + starts_with = list( + /obj/item/weapon/gun/energy/lasertag/blue = 5, + /obj/item/clothing/suit/bluetag = 5) + +/obj/structure/closet/lasertag/red/laserdome + name = "red team laserdome equipment" + desc = "It's a storage unit for laser tag equipment." + closet_appearance = /decl/closet_appearance/wardrobe/red + + starts_with = list( + /obj/item/device/encryptionkey/ent = 3, + /obj/item/clothing/gloves/bluespace = 3, + /obj/item/clothing/under/color/red = 3, + /obj/item/weapon/gun/energy/lasertag/red = 3, + /obj/item/clothing/head/redtag = 3, + /obj/item/clothing/suit/redtag = 3) + +/obj/structure/closet/lasertag/blue/laserdome + name = "blue team laserdome equipment" + desc = "It's a storage unit for laser tag equipment." + closet_appearance = /decl/closet_appearance/wardrobe/blue + + starts_with = list( + /obj/item/device/encryptionkey/ent = 3, + /obj/item/clothing/gloves/bluespace = 3, + /obj/item/clothing/under/color/blue = 3, + /obj/item/weapon/gun/energy/lasertag/blue = 3, + /obj/item/clothing/head/bluetag = 3, + /obj/item/clothing/suit/bluetag = 3) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 0e27bc9788..f79d770f74 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -1,84 +1,84 @@ -/obj/structure/closet/cabinet - name = "cabinet" - desc = "Old will forever be in fashion." - icon = 'icons/obj/closets/bases/cabinet.dmi' - closet_appearance = /decl/closet_appearance/cabinet - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - -/obj/structure/closet/acloset - name = "strange closet" - desc = "It looks alien!" - closet_appearance = /decl/closet_appearance/alien - - open_sound = 'sound/machines/click.ogg' - close_sound = 'sound/machines/click.ogg' - -/obj/structure/closet/gimmick - name = "administrative supply closet" - desc = "It's a storage unit for things that have no right being here." - closet_appearance = /decl/closet_appearance/tactical - anchored = FALSE - -/obj/structure/closet/gimmick/russian - name = "russian surplus closet" - desc = "It's a storage unit for Russian standard-issue surplus." - closet_appearance = /decl/closet_appearance/tactical - - starts_with = list( - /obj/item/clothing/head/ushanka = 5, - /obj/item/clothing/under/soviet = 5) - - -/obj/structure/closet/gimmick/tacticool - name = "tacticool gear closet" - desc = "It's a storage unit for Tacticool gear." - closet_appearance = /decl/closet_appearance/tactical - - starts_with = list( - /obj/item/clothing/glasses/eyepatch, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/gloves/swat = 2, - /obj/item/clothing/head/helmet/swat = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/clothing/shoes/boots/swat = 2, - /obj/item/clothing/suit/armor/swat = 2, - /obj/item/clothing/under/syndicate/tacticool = 2) - - -/obj/structure/closet/thunderdome - name = "\improper Thunderdome closet" - desc = "Everything you need!" - closet_appearance = /decl/closet_appearance/thunderdomered - anchored = TRUE - -/obj/structure/closet/thunderdome/tdred - name = "red-team Thunderdome closet" - - starts_with = list( - /obj/item/clothing/suit/armor/tdome/red = 3, - /obj/item/weapon/melee/energy/sword = 3, - /obj/item/weapon/gun/energy/laser = 3, - /obj/item/weapon/melee/baton = 3, - /obj/item/weapon/storage/box/flashbangs = 3, - /obj/item/clothing/head/helmet/thunderdome = 3) - -/obj/structure/closet/thunderdome/tdgreen - name = "green-team Thunderdome closet" - closet_appearance = /decl/closet_appearance/thunderdomegreen - - starts_with = list( - /obj/item/clothing/suit/armor/tdome/green = 3, - /obj/item/weapon/melee/energy/sword = 3, - /obj/item/weapon/gun/energy/laser = 3, - /obj/item/weapon/melee/baton = 3, - /obj/item/weapon/storage/box/flashbangs = 3, - /obj/item/clothing/head/helmet/thunderdome = 3) - -/obj/structure/closet/alien - name = "alien container" - desc = "Contains secrets of the universe." - icon = 'icons/obj/closets/abductor.dmi' - anchored = TRUE - closet_appearance = null // special icons +/obj/structure/closet/cabinet + name = "cabinet" + desc = "Old will forever be in fashion." + icon = 'icons/obj/closets/bases/cabinet.dmi' + closet_appearance = /decl/closet_appearance/cabinet + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + +/obj/structure/closet/acloset + name = "strange closet" + desc = "It looks alien!" + closet_appearance = /decl/closet_appearance/alien + + open_sound = 'sound/machines/click.ogg' + close_sound = 'sound/machines/click.ogg' + +/obj/structure/closet/gimmick + name = "administrative supply closet" + desc = "It's a storage unit for things that have no right being here." + closet_appearance = /decl/closet_appearance/tactical + anchored = FALSE + +/obj/structure/closet/gimmick/russian + name = "russian surplus closet" + desc = "It's a storage unit for Russian standard-issue surplus." + closet_appearance = /decl/closet_appearance/tactical + + starts_with = list( + /obj/item/clothing/head/ushanka = 5, + /obj/item/clothing/under/soviet = 5) + + +/obj/structure/closet/gimmick/tacticool + name = "tacticool gear closet" + desc = "It's a storage unit for Tacticool gear." + closet_appearance = /decl/closet_appearance/tactical + + starts_with = list( + /obj/item/clothing/glasses/eyepatch, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/gloves/swat = 2, + /obj/item/clothing/head/helmet/swat = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/clothing/shoes/boots/swat = 2, + /obj/item/clothing/suit/armor/swat = 2, + /obj/item/clothing/under/syndicate/tacticool = 2) + + +/obj/structure/closet/thunderdome + name = "\improper Thunderdome closet" + desc = "Everything you need!" + closet_appearance = /decl/closet_appearance/thunderdomered + anchored = TRUE + +/obj/structure/closet/thunderdome/tdred + name = "red-team Thunderdome closet" + + starts_with = list( + /obj/item/clothing/suit/armor/tdome/red = 3, + /obj/item/weapon/melee/energy/sword = 3, + /obj/item/weapon/gun/energy/laser = 3, + /obj/item/weapon/melee/baton = 3, + /obj/item/weapon/storage/box/flashbangs = 3, + /obj/item/clothing/head/helmet/thunderdome = 3) + +/obj/structure/closet/thunderdome/tdgreen + name = "green-team Thunderdome closet" + closet_appearance = /decl/closet_appearance/thunderdomegreen + + starts_with = list( + /obj/item/clothing/suit/armor/tdome/green = 3, + /obj/item/weapon/melee/energy/sword = 3, + /obj/item/weapon/gun/energy/laser = 3, + /obj/item/weapon/melee/baton = 3, + /obj/item/weapon/storage/box/flashbangs = 3, + /obj/item/clothing/head/helmet/thunderdome = 3) + +/obj/structure/closet/alien + name = "alien container" + desc = "Contains secrets of the universe." + icon = 'icons/obj/closets/abductor.dmi' + anchored = TRUE + closet_appearance = null // special icons diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 2a3fe1c8b1..b4aa0f5dad 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -1,134 +1,134 @@ -/* - * Closets for specific jobs - * Contains: - * Bartender - * Janitor - * Lawyer - * Janitorial Equipment - * - * - * These have been removed from the map for the most part, however - * do not remove these in case people want to make maps or POIs - * with these closets. - * - */ - -/* - * Bartender - */ -/obj/structure/closet/gmcloset - name = "formal closet" - desc = "It's a storage unit for formal clothing." - closet_appearance = /decl/closet_appearance/wardrobe/suit - - starts_with = list( - /obj/item/clothing/head/that = 2, - /obj/item/device/radio/headset/headset_service = 2, - /obj/item/clothing/head/pin/flower, - /obj/item/clothing/head/pin/flower/pink, - /obj/item/clothing/head/pin/flower/yellow, - /obj/item/clothing/head/pin/flower/blue, - /obj/item/clothing/head/pin/pink, - /obj/item/clothing/head/pin/magnetic, - /obj/item/clothing/under/sl_suit = 2, - /obj/item/clothing/under/rank/bartender = 2, - /obj/item/clothing/under/rank/bartender/skirt, - /obj/item/clothing/suit/storage/hooded/wintercoat/bar, - /obj/item/clothing/under/dress/dress_saloon, - /obj/item/clothing/accessory/wcoat = 2, - /obj/item/clothing/shoes/black = 2, - /obj/item/clothing/shoes/laceup - ) - -/* - * Chef - */ -/obj/structure/closet/chefcloset - name = "chef's closet" - desc = "It's a storage unit for foodservice garments." - closet_appearance = /decl/closet_appearance/wardrobe/white - - starts_with = list( - /obj/item/clothing/under/sundress, - /obj/item/clothing/under/waiter = 2, - /obj/item/device/radio/headset/headset_service = 2, - /obj/item/weapon/storage/box/mousetraps = 2, - /obj/item/clothing/under/rank/chef, - /obj/item/clothing/head/chefhat, - /obj/item/weapon/storage/bag/food = 2 - ) - -/* - * Janitor - */ -/obj/structure/closet/jcloset - name = "custodial closet" - desc = "It's a storage unit for janitorial clothes and gear." - closet_appearance = /decl/closet_appearance/wardrobe/janitor - - starts_with = list( - /obj/item/clothing/under/rank/janitor, - /obj/item/clothing/under/dress/maid/janitor, - /obj/item/device/radio/headset/headset_service, - /obj/item/weapon/cartridge/janitor, - /obj/item/clothing/suit/storage/hooded/wintercoat/janitor, - /obj/item/clothing/gloves/black, - /obj/item/clothing/head/soft/purple, - /obj/item/clothing/head/beret/purple, - /obj/item/device/flashlight, - /obj/item/clothing/suit/caution = 4, - /obj/item/device/lightreplacer, - /obj/item/weapon/storage/bag/trash, - /obj/item/weapon/storage/belt/janitor, - /obj/item/device/vac_attachment, //CHOMPAdd - /obj/item/weapon/holosign_creator, //CHOMPAdd - /obj/item/clothing/shoes/galoshes - ) - -/* - * Lawyer - */ -/obj/structure/closet/lawcloset - name = "legal closet" - desc = "It's a storage unit for courtroom apparel and items." - closet_appearance = /decl/closet_appearance/wardrobe/suit - - starts_with = list( - /obj/item/clothing/under/lawyer/female = 2, - /obj/item/clothing/under/lawyer/black = 2, - /obj/item/clothing/under/lawyer/black/skirt = 2, - /obj/item/clothing/under/lawyer/red = 2, - /obj/item/clothing/under/lawyer/red/skirt = 2, - /obj/item/clothing/suit/storage/toggle/internalaffairs = 2, - /obj/item/clothing/under/lawyer/bluesuit = 2, - /obj/item/clothing/under/lawyer/bluesuit/skirt = 2, - /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 2, - /obj/item/clothing/under/lawyer/purpsuit = 2, - /obj/item/clothing/under/lawyer/purpsuit/skirt = 2, - /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 2, - /obj/item/clothing/shoes/brown = 2, - /obj/item/clothing/shoes/black = 2, - /obj/item/clothing/shoes/laceup = 2, - /obj/item/clothing/glasses/sunglasses/big = 2, - /obj/item/clothing/under/lawyer/blue = 2, - /obj/item/clothing/under/lawyer/blue/skirt = 2, - /obj/item/device/tape/random = 2 - ) - -/* - * Janitorial Equipment - */ -/obj/structure/closet/jequipcloset - name = "custodial equipment closet" - desc = "It's a storage unit for janitorial clothes and gear." - closet_appearance = /decl/closet_appearance/wardrobe/janitor - - starts_with = list( - /obj/item/device/flashlight = 5, - /obj/item/clothing/suit/caution = 12, - /obj/item/device/lightreplacer = 3, - /obj/item/weapon/storage/bag/trash = 3, - /obj/item/weapon/storage/box/lights/mixed = 3, - /obj/item/weapon/storage/box/mousetraps = 1, - /obj/item/weapon/grenade/chem_grenade/cleaner = 4 - ) +/* + * Closets for specific jobs + * Contains: + * Bartender + * Janitor + * Lawyer + * Janitorial Equipment + * + * + * These have been removed from the map for the most part, however + * do not remove these in case people want to make maps or POIs + * with these closets. + * + */ + +/* + * Bartender + */ +/obj/structure/closet/gmcloset + name = "formal closet" + desc = "It's a storage unit for formal clothing." + closet_appearance = /decl/closet_appearance/wardrobe/suit + + starts_with = list( + /obj/item/clothing/head/that = 2, + /obj/item/device/radio/headset/headset_service = 2, + /obj/item/clothing/head/pin/flower, + /obj/item/clothing/head/pin/flower/pink, + /obj/item/clothing/head/pin/flower/yellow, + /obj/item/clothing/head/pin/flower/blue, + /obj/item/clothing/head/pin/pink, + /obj/item/clothing/head/pin/magnetic, + /obj/item/clothing/under/sl_suit = 2, + /obj/item/clothing/under/rank/bartender = 2, + /obj/item/clothing/under/rank/bartender/skirt, + /obj/item/clothing/suit/storage/hooded/wintercoat/bar, + /obj/item/clothing/under/dress/dress_saloon, + /obj/item/clothing/accessory/wcoat = 2, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/shoes/laceup + ) + +/* + * Chef + */ +/obj/structure/closet/chefcloset + name = "chef's closet" + desc = "It's a storage unit for foodservice garments." + closet_appearance = /decl/closet_appearance/wardrobe/white + + starts_with = list( + /obj/item/clothing/under/sundress, + /obj/item/clothing/under/waiter = 2, + /obj/item/device/radio/headset/headset_service = 2, + /obj/item/weapon/storage/box/mousetraps = 2, + /obj/item/clothing/under/rank/chef, + /obj/item/clothing/head/chefhat, + /obj/item/weapon/storage/bag/food = 2 + ) + +/* + * Janitor + */ +/obj/structure/closet/jcloset + name = "custodial closet" + desc = "It's a storage unit for janitorial clothes and gear." + closet_appearance = /decl/closet_appearance/wardrobe/janitor + + starts_with = list( + /obj/item/clothing/under/rank/janitor, + /obj/item/clothing/under/dress/maid/janitor, + /obj/item/device/radio/headset/headset_service, + /obj/item/weapon/cartridge/janitor, + /obj/item/clothing/suit/storage/hooded/wintercoat/janitor, + /obj/item/clothing/gloves/black, + /obj/item/clothing/head/soft/purple, + /obj/item/clothing/head/beret/purple, + /obj/item/device/flashlight, + /obj/item/clothing/suit/caution = 4, + /obj/item/device/lightreplacer, + /obj/item/weapon/storage/bag/trash, + /obj/item/weapon/storage/belt/janitor, + /obj/item/device/vac_attachment, //CHOMPAdd + /obj/item/weapon/holosign_creator, //CHOMPAdd + /obj/item/clothing/shoes/galoshes + ) + +/* + * Lawyer + */ +/obj/structure/closet/lawcloset + name = "legal closet" + desc = "It's a storage unit for courtroom apparel and items." + closet_appearance = /decl/closet_appearance/wardrobe/suit + + starts_with = list( + /obj/item/clothing/under/lawyer/female = 2, + /obj/item/clothing/under/lawyer/black = 2, + /obj/item/clothing/under/lawyer/black/skirt = 2, + /obj/item/clothing/under/lawyer/red = 2, + /obj/item/clothing/under/lawyer/red/skirt = 2, + /obj/item/clothing/suit/storage/toggle/internalaffairs = 2, + /obj/item/clothing/under/lawyer/bluesuit = 2, + /obj/item/clothing/under/lawyer/bluesuit/skirt = 2, + /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 2, + /obj/item/clothing/under/lawyer/purpsuit = 2, + /obj/item/clothing/under/lawyer/purpsuit/skirt = 2, + /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 2, + /obj/item/clothing/shoes/brown = 2, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/glasses/sunglasses/big = 2, + /obj/item/clothing/under/lawyer/blue = 2, + /obj/item/clothing/under/lawyer/blue/skirt = 2, + /obj/item/device/tape/random = 2 + ) + +/* + * Janitorial Equipment + */ +/obj/structure/closet/jequipcloset + name = "custodial equipment closet" + desc = "It's a storage unit for janitorial clothes and gear." + closet_appearance = /decl/closet_appearance/wardrobe/janitor + + starts_with = list( + /obj/item/device/flashlight = 5, + /obj/item/clothing/suit/caution = 12, + /obj/item/device/lightreplacer = 3, + /obj/item/weapon/storage/bag/trash = 3, + /obj/item/weapon/storage/box/lights/mixed = 3, + /obj/item/weapon/storage/box/mousetraps = 1, + /obj/item/weapon/grenade/chem_grenade/cleaner = 4 + ) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index ccc0145383..3643373c5d 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -1,72 +1,72 @@ -/obj/structure/closet/l3closet - name = "level-3 biohazard suit closet" - desc = "It's a storage unit for level-3 biohazard gear." - closet_appearance = /decl/closet_appearance/bio - -/obj/structure/closet/l3closet/general - closet_appearance = /decl/closet_appearance/bio - - starts_with = list( - /obj/item/clothing/suit/bio_suit/general = 2, // CHOMP Block Edit Start - /obj/item/clothing/head/bio_hood/general = 2, - /obj/item/weapon/tank/oxygen = 2, - /obj/item/clothing/mask/gas = 2) // CHOMP Block Edit End - - -/obj/structure/closet/l3closet/virology - closet_appearance = /decl/closet_appearance/bio/virology - - starts_with = list( - /obj/item/clothing/suit/bio_suit/virology = 2, // CHOMP Block Edit Start - /obj/item/clothing/head/bio_hood/virology = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/weapon/tank/oxygen = 2) // CHOMP Block Edit End - - -/obj/structure/closet/l3closet/security - closet_appearance = /decl/closet_appearance/bio/security - - starts_with = list( - /obj/item/clothing/suit/bio_suit/security = 2, // CHOMP Block Edit Start - /obj/item/clothing/head/bio_hood/security = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/weapon/tank/oxygen = 2) // CHOMP Block Edit End - -/obj/structure/closet/l3closet/janitor - closet_appearance = /decl/closet_appearance/bio/janitor - - starts_with = list( - /obj/item/clothing/suit/bio_suit/janitor = 2, - /obj/item/clothing/head/bio_hood/janitor = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/weapon/tank/emergency/oxygen/engi = 2) - - -/obj/structure/closet/l3closet/scientist - closet_appearance = /decl/closet_appearance/bio/science - - starts_with = list( - /obj/item/clothing/suit/bio_suit/scientist = 2, // CHOMP Block Edit Start - /obj/item/clothing/head/bio_hood/scientist = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/weapon/tank/oxygen = 2, // CHOMP Block Edit End - /obj/item/weapon/storage/bag/xeno = 1) - -/obj/structure/closet/l3closet/scientist/double - starts_with = list( - /obj/item/clothing/suit/bio_suit/scientist = 2, // CHOMP Block Edit Start - /obj/item/clothing/head/bio_hood/scientist = 2, - /obj/item/weapon/storage/bag/xeno = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/weapon/tank/oxygen = 2, - /obj/item/weapon/storage/bag/xeno = 2) // CHOMP Block Edit End - - -/obj/structure/closet/l3closet/medical - closet_appearance = /decl/closet_appearance/bio/medical - - starts_with = list( - /obj/item/clothing/suit/bio_suit/general = 3, - /obj/item/clothing/head/bio_hood/general = 3, - /obj/item/clothing/mask/gas = 3, // CHOMP Block Edit Start - /obj/item/weapon/tank/oxygen = 3) // CHOMP Block Edit End +/obj/structure/closet/l3closet + name = "level-3 biohazard suit closet" + desc = "It's a storage unit for level-3 biohazard gear." + closet_appearance = /decl/closet_appearance/bio + +/obj/structure/closet/l3closet/general + closet_appearance = /decl/closet_appearance/bio + + starts_with = list( + /obj/item/clothing/suit/bio_suit/general = 2, // CHOMP Block Edit Start + /obj/item/clothing/head/bio_hood/general = 2, + /obj/item/weapon/tank/oxygen = 2, + /obj/item/clothing/mask/gas = 2) // CHOMP Block Edit End + + +/obj/structure/closet/l3closet/virology + closet_appearance = /decl/closet_appearance/bio/virology + + starts_with = list( + /obj/item/clothing/suit/bio_suit/virology = 2, // CHOMP Block Edit Start + /obj/item/clothing/head/bio_hood/virology = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/weapon/tank/oxygen = 2) // CHOMP Block Edit End + + +/obj/structure/closet/l3closet/security + closet_appearance = /decl/closet_appearance/bio/security + + starts_with = list( + /obj/item/clothing/suit/bio_suit/security = 2, // CHOMP Block Edit Start + /obj/item/clothing/head/bio_hood/security = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/weapon/tank/oxygen = 2) // CHOMP Block Edit End + +/obj/structure/closet/l3closet/janitor + closet_appearance = /decl/closet_appearance/bio/janitor + + starts_with = list( + /obj/item/clothing/suit/bio_suit/janitor = 2, + /obj/item/clothing/head/bio_hood/janitor = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/weapon/tank/emergency/oxygen/engi = 2) + + +/obj/structure/closet/l3closet/scientist + closet_appearance = /decl/closet_appearance/bio/science + + starts_with = list( + /obj/item/clothing/suit/bio_suit/scientist = 2, // CHOMP Block Edit Start + /obj/item/clothing/head/bio_hood/scientist = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/weapon/tank/oxygen = 2, // CHOMP Block Edit End + /obj/item/weapon/storage/bag/xeno = 1) + +/obj/structure/closet/l3closet/scientist/double + starts_with = list( + /obj/item/clothing/suit/bio_suit/scientist = 2, // CHOMP Block Edit Start + /obj/item/clothing/head/bio_hood/scientist = 2, + /obj/item/weapon/storage/bag/xeno = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/weapon/tank/oxygen = 2, + /obj/item/weapon/storage/bag/xeno = 2) // CHOMP Block Edit End + + +/obj/structure/closet/l3closet/medical + closet_appearance = /decl/closet_appearance/bio/medical + + starts_with = list( + /obj/item/clothing/suit/bio_suit/general = 3, + /obj/item/clothing/head/bio_hood/general = 3, + /obj/item/clothing/mask/gas = 3, // CHOMP Block Edit Start + /obj/item/weapon/tank/oxygen = 3) // CHOMP Block Edit End diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index feaa63e39f..cd23e478a9 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -1,12 +1,12 @@ -/obj/structure/closet/malf/suits - desc = "It's a storage unit for operational gear." - closet_appearance = /decl/closet_appearance/tactical - - starts_with = list( - /obj/item/weapon/tank/jetpack/void, - /obj/item/clothing/mask/breath, - /obj/item/clothing/head/helmet/space/void, - /obj/item/clothing/suit/space/void, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/cell, - /obj/item/device/multitool) +/obj/structure/closet/malf/suits + desc = "It's a storage unit for operational gear." + closet_appearance = /decl/closet_appearance/tactical + + starts_with = list( + /obj/item/weapon/tank/jetpack/void, + /obj/item/clothing/mask/breath, + /obj/item/clothing/head/helmet/space/void, + /obj/item/clothing/suit/space/void, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/cell, + /obj/item/device/multitool) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 6e7f44cbd6..97c3d176b4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -1,154 +1,154 @@ -/obj/structure/closet/secure_closet/engineering_chief - name = "chief engineer's locker" - req_access = list(access_ce) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/areaeditor/blueprints, - /obj/item/wire_reader, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - /obj/item/clothing/under/rank/chief_engineer, - /obj/item/clothing/under/rank/chief_engineer/skirt, - /obj/item/clothing/under/rank/neo_chiefengi, - /obj/item/clothing/under/rank/neo_chiefengi_skirt, - /obj/item/clothing/under/rank/neo_ce_gorka, - /obj/item/clothing/head/hardhat/white, - ///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these. - /obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit - /obj/item/clothing/shoes/brown, - /obj/item/weapon/cartridge/ce, - /obj/item/device/radio/headset/heads/ce, - /obj/item/device/radio/headset/heads/ce/alt, - /obj/item/weapon/storage/toolbox/mechanical, - /obj/item/clothing/suit/storage/hazardvest, - ///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined. - /obj/item/clothing/head/hardhat/firefighter/chief, //VOREStation Add: replaces the bog-standard gas mask - ///obj/item/device/multitool, //VOREStation Removal: The belt they get, both standard and the fancy one, both come with one already, why stick another in here too? - /obj/item/weapon/storage/belt/utility/chief/full, - /obj/item/device/flash, - /obj/item/device/t_scanner/upgraded, - /obj/item/taperoll/engineering, - ///obj/item/clothing/suit/storage/hooded/wintercoat/engineering, //VOREStation Removal: Locker bloat, grr. They can grab from the engi-clothes vendor if they want the standard one. - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, - ///obj/item/clothing/shoes/boots/winter/engineering, //VOREStation Removal: Locker bloat, grr. As above. - /obj/item/clothing/head/beret/engineering/ce, - /obj/item/clothing/head/beret/engineering/ce/white, - /obj/item/weapon/tank/emergency/oxygen/double, //VOREStation Edit: chief gets the good shit - /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add, - /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd - /obj/item/weapon/rcd/advanced/loaded, //CHOMPAdd - /obj/item/weapon/pipe_dispenser) //YW Add - -/obj/structure/closet/secure_closet/engineering_chief/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() - -/obj/structure/closet/secure_closet/engineering_electrical - name = "electrical supplies" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical - - starts_with = list( - /obj/item/clothing/gloves/yellow = 2, - /obj/item/weapon/storage/toolbox/electrical = 3, - /obj/item/weapon/module/power_control = 3, - /obj/item/device/multitool = 3) - -/obj/structure/closet/secure_closet/engineering_electrical/double - starts_with = list( - /obj/item/clothing/gloves/yellow = 4, - /obj/item/weapon/storage/toolbox/electrical = 6, - /obj/item/weapon/module/power_control = 6, - /obj/item/device/multitool = 6) - -/obj/structure/closet/secure_closet/engineering_welding - name = "welding supplies" - req_access = list(access_construction) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding - - starts_with = list( - /obj/item/clothing/head/welding = 3, - /obj/item/weapon/weldingtool/largetank = 3, - /obj/item/weapon/weldpack = 3, - /obj/item/clothing/glasses/welding = 3) - -/obj/structure/closet/secure_closet/engineering_welding/double - starts_with = list( - /obj/item/clothing/head/welding = 6, - /obj/item/weapon/weldingtool/largetank = 6, - /obj/item/weapon/weldpack = 6, - /obj/item/clothing/glasses/welding = 6) - -/obj/structure/closet/secure_closet/engineering_personal - name = "engineer's locker" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/weapon/storage/toolbox/mechanical, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/clothing/glasses/meson, - /obj/item/weapon/cartridge/engineering, - /obj/item/taperoll/engineering, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering, - /obj/item/clothing/shoes/boots/winter/engineering, - /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/weapon/storage/belt/utility, //VOREStation Add - /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add - /obj/item/areaeditor/blueprints/engineers) //VOREStation Add - -/obj/structure/closet/secure_closet/engineering_personal/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() - - -/obj/structure/closet/secure_closet/atmos_personal - name = "technician's locker" - req_access = list(access_atmospherics) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/clothing/suit/fire/heavy, - /obj/item/clothing/head/hardhat/firefighter/atmos, - /obj/item/device/flashlight, - /obj/item/weapon/extinguisher/atmo, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own - /obj/item/clothing/mask/gas, - /obj/item/weapon/cartridge/atmos, - /obj/item/taperoll/atmos, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, - /obj/item/clothing/shoes/boots/winter/atmos, - /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd - /obj/item/weapon/pipe_dispenser, //CHOMPAdd - /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? - -/obj/structure/closet/secure_closet/atmos_personal/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() +/obj/structure/closet/secure_closet/engineering_chief + name = "chief engineer's locker" + req_access = list(access_ce) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/areaeditor/blueprints, + /obj/item/wire_reader, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + /obj/item/clothing/under/rank/chief_engineer, + /obj/item/clothing/under/rank/chief_engineer/skirt, + /obj/item/clothing/under/rank/neo_chiefengi, + /obj/item/clothing/under/rank/neo_chiefengi_skirt, + /obj/item/clothing/under/rank/neo_ce_gorka, + /obj/item/clothing/head/hardhat/white, + ///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these. + /obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit + /obj/item/clothing/shoes/brown, + /obj/item/weapon/cartridge/ce, + /obj/item/device/radio/headset/heads/ce, + /obj/item/device/radio/headset/heads/ce/alt, + /obj/item/weapon/storage/toolbox/mechanical, + /obj/item/clothing/suit/storage/hazardvest, + ///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined. + /obj/item/clothing/head/hardhat/firefighter/chief, //VOREStation Add: replaces the bog-standard gas mask + ///obj/item/device/multitool, //VOREStation Removal: The belt they get, both standard and the fancy one, both come with one already, why stick another in here too? + /obj/item/weapon/storage/belt/utility/chief/full, + /obj/item/device/flash, + /obj/item/device/t_scanner/upgraded, + /obj/item/taperoll/engineering, + ///obj/item/clothing/suit/storage/hooded/wintercoat/engineering, //VOREStation Removal: Locker bloat, grr. They can grab from the engi-clothes vendor if they want the standard one. + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, + ///obj/item/clothing/shoes/boots/winter/engineering, //VOREStation Removal: Locker bloat, grr. As above. + /obj/item/clothing/head/beret/engineering/ce, + /obj/item/clothing/head/beret/engineering/ce/white, + /obj/item/weapon/tank/emergency/oxygen/double, //VOREStation Edit: chief gets the good shit + /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add, + /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd + /obj/item/weapon/rcd/advanced/loaded, //CHOMPAdd + /obj/item/weapon/pipe_dispenser) //YW Add + +/obj/structure/closet/secure_closet/engineering_chief/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() + +/obj/structure/closet/secure_closet/engineering_electrical + name = "electrical supplies" + req_access = list(access_engine_equip) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical + + starts_with = list( + /obj/item/clothing/gloves/yellow = 2, + /obj/item/weapon/storage/toolbox/electrical = 3, + /obj/item/weapon/module/power_control = 3, + /obj/item/device/multitool = 3) + +/obj/structure/closet/secure_closet/engineering_electrical/double + starts_with = list( + /obj/item/clothing/gloves/yellow = 4, + /obj/item/weapon/storage/toolbox/electrical = 6, + /obj/item/weapon/module/power_control = 6, + /obj/item/device/multitool = 6) + +/obj/structure/closet/secure_closet/engineering_welding + name = "welding supplies" + req_access = list(access_construction) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding + + starts_with = list( + /obj/item/clothing/head/welding = 3, + /obj/item/weapon/weldingtool/largetank = 3, + /obj/item/weapon/weldpack = 3, + /obj/item/clothing/glasses/welding = 3) + +/obj/structure/closet/secure_closet/engineering_welding/double + starts_with = list( + /obj/item/clothing/head/welding = 6, + /obj/item/weapon/weldingtool/largetank = 6, + /obj/item/weapon/weldpack = 6, + /obj/item/clothing/glasses/welding = 6) + +/obj/structure/closet/secure_closet/engineering_personal + name = "engineer's locker" + req_access = list(access_engine_equip) + closet_appearance = /decl/closet_appearance/secure_closet/engineering + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/weapon/storage/toolbox/mechanical, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/clothing/glasses/meson, + /obj/item/weapon/cartridge/engineering, + /obj/item/taperoll/engineering, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering, + /obj/item/clothing/shoes/boots/winter/engineering, + /obj/item/weapon/tank/emergency/oxygen/engi, + /obj/item/weapon/storage/belt/utility, //VOREStation Add + /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add + /obj/item/areaeditor/blueprints/engineers) //VOREStation Add + +/obj/structure/closet/secure_closet/engineering_personal/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() + + +/obj/structure/closet/secure_closet/atmos_personal + name = "technician's locker" + req_access = list(access_atmospherics) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/clothing/suit/fire/heavy, + /obj/item/clothing/head/hardhat/firefighter/atmos, + /obj/item/device/flashlight, + /obj/item/weapon/extinguisher/atmo, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own + /obj/item/clothing/mask/gas, + /obj/item/weapon/cartridge/atmos, + /obj/item/taperoll/atmos, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, + /obj/item/clothing/shoes/boots/winter/atmos, + /obj/item/weapon/tank/emergency/oxygen/engi, + /obj/item/weapon/holosign_creator/combifan, //CHOMPAdd + /obj/item/weapon/pipe_dispenser, //CHOMPAdd + /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? + +/obj/structure/closet/secure_closet/atmos_personal/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index c94683a260..3bbb332b14 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -1,57 +1,57 @@ -/obj/structure/closet/secure_closet/freezer/kitchen - name = "kitchen cabinet" - req_access = list(access_kitchen) - - starts_with = list( - /obj/item/weapon/reagent_containers/food/condiment/carton/flour = 6, - /obj/item/weapon/reagent_containers/food/condiment/carton/sugar = 1, - /obj/item/weapon/reagent_containers/food/condiment/carton/flour/rustic = 1, - /obj/item/weapon/reagent_containers/food/condiment/carton/sugar/rustic = 1, - /obj/item/weapon/reagent_containers/food/condiment/spacespice = 2 - ) - - open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ - close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ - -/obj/structure/closet/secure_closet/freezer/kitchen/mining - req_access = list() - - -/obj/structure/closet/secure_closet/freezer/meat - name = "meat fridge" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - - open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ - close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ - - starts_with = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey = 10) - - -/obj/structure/closet/secure_closet/freezer/fridge - name = "refrigerator" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - - open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ - close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ - - starts_with = list( - /obj/item/weapon/reagent_containers/food/drinks/milk = 6, - /obj/item/weapon/reagent_containers/food/drinks/soymilk = 4, - /obj/item/weapon/storage/fancy/egg_box = 4, - /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 2) - - -/obj/structure/closet/secure_closet/freezer/money - name = "freezer" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - req_access = list(access_heads_vault) - - - starts_with = list( - /obj/item/weapon/spacecash/c1000 = 3, - /obj/item/weapon/spacecash/c500 = 4, - /obj/item/weapon/spacecash/c200 = 5) +/obj/structure/closet/secure_closet/freezer/kitchen + name = "kitchen cabinet" + req_access = list(access_kitchen) + + starts_with = list( + /obj/item/weapon/reagent_containers/food/condiment/carton/flour = 6, + /obj/item/weapon/reagent_containers/food/condiment/carton/sugar = 1, + /obj/item/weapon/reagent_containers/food/condiment/carton/flour/rustic = 1, + /obj/item/weapon/reagent_containers/food/condiment/carton/sugar/rustic = 1, + /obj/item/weapon/reagent_containers/food/condiment/spacespice = 2 + ) + + open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ + close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ + +/obj/structure/closet/secure_closet/freezer/kitchen/mining + req_access = list() + + +/obj/structure/closet/secure_closet/freezer/meat + name = "meat fridge" + icon = 'icons/obj/closets/fridge.dmi' + closet_appearance = null + + open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ + close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ + + starts_with = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey = 10) + + +/obj/structure/closet/secure_closet/freezer/fridge + name = "refrigerator" + icon = 'icons/obj/closets/fridge.dmi' + closet_appearance = null + + open_sound = 'sound/machines/kitchen/fridge/open_fridge.ogg' // CHOMPEdit: Fridge sounds~ + close_sound = 'sound/machines/kitchen/fridge/close_fridge.ogg' // CHOMPEdit: Fridge sounds~ + + starts_with = list( + /obj/item/weapon/reagent_containers/food/drinks/milk = 6, + /obj/item/weapon/reagent_containers/food/drinks/soymilk = 4, + /obj/item/weapon/storage/fancy/egg_box = 4, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 2) + + +/obj/structure/closet/secure_closet/freezer/money + name = "freezer" + icon = 'icons/obj/closets/fridge.dmi' + closet_appearance = null + req_access = list(access_heads_vault) + + + starts_with = list( + /obj/item/weapon/spacecash/c1000 = 3, + /obj/item/weapon/spacecash/c500 = 4, + /obj/item/weapon/spacecash/c200 = 5) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index c217ce9f4a..a1c901d85b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -1,268 +1,268 @@ -/obj/structure/closet/secure_closet/medical1 - name = "medicine closet" - desc = "Filled with medical junk." - req_access = list(access_medical) - closet_appearance = /decl/closet_appearance/secure_closet/medical/alt - - starts_with = list( - /obj/item/weapon/storage/box/autoinjectors, - /obj/item/weapon/storage/box/syringes, - /obj/item/weapon/reagent_containers/dropper = 2, - /obj/item/weapon/reagent_containers/glass/beaker = 2, - /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 2, - /obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 2) - -/obj/structure/closet/secure_closet/medical2 - name = "anesthetics closet" - desc = "Used to knock people out." - req_access = list(access_surgery) - closet_appearance = /decl/closet_appearance/secure_closet/medical - - starts_with = list( - /obj/item/weapon/tank/anesthetic = 3, - /obj/item/clothing/mask/breath/medical = 3) - - -/obj/structure/closet/secure_closet/medical3 - name = "medical doctor's locker" - req_access = list(access_medical_equip) - closet_appearance = /decl/closet_appearance/secure_closet/medical/doctor - - starts_with = list( - /obj/item/clothing/under/rank/medical, - /obj/item/clothing/under/rank/nurse, - /obj/item/clothing/under/rank/orderly, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/storage/toggle/labcoat/modern, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/clothing/shoes/white, - /obj/item/weapon/cartridge/medical, - /obj/item/device/radio/headset/headset_med, - /obj/item/device/radio/headset/headset_med/alt, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt, - /obj/item/clothing/shoes/boots/winter/medical, - /obj/item/clothing/under/rank/nursesuit, - /obj/item/clothing/head/nursehat, - /obj/item/weapon/storage/box/freezer = 3, - /obj/item/weapon/storage/belt/medical) //VOREStation Add - -/obj/structure/closet/secure_closet/medical3/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/medic - else - starts_with += /obj/item/weapon/storage/backpack/satchel/med - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/med - switch(pick("blue", "green", "purple", "black", "navyblue")) - if ("blue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs - starts_with += /obj/item/clothing/head/surgery/blue - if ("green") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/green - starts_with += /obj/item/clothing/head/surgery/green - if ("purple") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple - starts_with += /obj/item/clothing/head/surgery/purple - if ("black") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/black - starts_with += /obj/item/clothing/head/surgery/black - if ("navyblue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue - starts_with += /obj/item/clothing/head/surgery/navyblue - switch(pick("blue", "green", "purple", "black", "navyblue")) - if ("blue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs - starts_with += /obj/item/clothing/head/surgery/blue - if ("green") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/green - starts_with += /obj/item/clothing/head/surgery/green - if ("purple") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple - starts_with += /obj/item/clothing/head/surgery/purple - if ("black") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/black - starts_with += /obj/item/clothing/head/surgery/black - if ("navyblue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue - starts_with += /obj/item/clothing/head/surgery/navyblue - return ..() - - -/obj/structure/closet/secure_closet/paramedic - name = "paramedic locker" - desc = "Supplies for a first responder." - req_access = list(access_medical_equip) - closet_appearance = /decl/closet_appearance/secure_closet/medical/paramedic - - starts_with = list( - /obj/item/weapon/storage/backpack/dufflebag/emt, - /obj/item/weapon/storage/box/autoinjectors, - /obj/item/weapon/storage/box/syringes, - /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, - /obj/item/weapon/reagent_containers/glass/bottle/antitoxin, - /obj/item/weapon/storage/belt/medical/emt, - /obj/item/clothing/mask/gas, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/clothing/suit/storage/toggle/labcoat/emt, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para, - /obj/item/clothing/shoes/boots/winter/medical, - /obj/item/device/radio/headset/headset_med/alt, - /obj/item/weapon/cartridge/medical, - /obj/item/weapon/storage/briefcase/inflatable, - /obj/item/device/flashlight, - /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/clothing/glasses/hud/health, - /obj/item/device/healthanalyzer, - /obj/item/device/radio/off, - /obj/random/medical, - /obj/item/weapon/tool/crowbar, - /obj/item/weapon/extinguisher/mini, - /obj/item/weapon/storage/box/freezer, - /obj/item/clothing/accessory/storage/white_vest, - /obj/item/taperoll/medical) - -/obj/structure/closet/secure_closet/CMO - name = "chief medical officer's locker" - req_access = list(access_cmo) - closet_appearance = /decl/closet_appearance/secure_closet/cmo - - starts_with = list( - /obj/item/clothing/under/rank/chief_medical_officer, - /obj/item/clothing/under/rank/chief_medical_officer/skirt, - /obj/item/clothing/suit/storage/toggle/labcoat/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, - /obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo, - /obj/item/weapon/cartridge/cmo, - /obj/item/clothing/gloves/sterile/latex, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/under/rank/neo_cmo, - /obj/item/clothing/under/rank/neo_cmo_skirt, - /obj/item/clothing/under/rank/neo_cmo_turtle, - /obj/item/clothing/under/rank/neo_cmo_turtle_skirt, - /obj/item/clothing/under/rank/neo_cmo_gorka, - /obj/item/device/radio/headset/heads/cmo, - /obj/item/device/radio/headset/heads/cmo/alt, - /obj/item/device/flash, - /obj/item/weapon/reagent_containers/hypospray/vial, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo, - /obj/item/clothing/shoes/boots/winter/medical, - /obj/item/clothing/head/beret/medical/cmo, - /obj/item/clothing/head/beret/medical/cmo/blue, - /obj/item/weapon/storage/box/freezer, - /obj/item/clothing/mask/gas, - /obj/item/taperoll/medical, - /obj/item/clothing/suit/bio_suit/cmo, - /obj/item/clothing/head/bio_hood/cmo, - /obj/item/clothing/shoes/white, - /obj/item/weapon/reagent_containers/glass/beaker/vial, //VOREStation Add - /obj/item/weapon/storage/belt/medical) //VOREStation Add - -/obj/structure/closet/secure_closet/CMO/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/medic - else - starts_with += /obj/item/weapon/storage/backpack/satchel/med - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/med - switch(pick("blue", "green", "purple", "black", "navyblue")) - if ("blue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs - starts_with += /obj/item/clothing/head/surgery/blue - if ("green") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/green - starts_with += /obj/item/clothing/head/surgery/green - if ("purple") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple - starts_with += /obj/item/clothing/head/surgery/purple - if ("black") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/black - starts_with += /obj/item/clothing/head/surgery/black - if ("navyblue") - starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue - starts_with += /obj/item/clothing/head/surgery/navyblue - return ..() - - -/obj/structure/closet/secure_closet/animal - name = "animal control closet" - req_access = list(access_surgery) - - starts_with = list( - /obj/item/device/assembly/signaler, - /obj/item/device/radio/electropack = 3) - - -/obj/structure/closet/secure_closet/chemical - name = "chemical closet" - desc = "Store dangerous chemicals in here." - req_access = list(access_chemistry) - closet_appearance = /decl/closet_appearance/secure_closet/medical/chemistry - - starts_with = list( - /obj/item/weapon/storage/box/pillbottles = 2, - /obj/item/weapon/storage/box/beakers, - /obj/item/weapon/storage/box/autoinjectors, - /obj/item/weapon/storage/box/syringes, - /obj/item/weapon/reagent_containers/dropper = 2, - /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 2, - /obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 2, - /obj/item/weapon/storage/fancy/vials) //VOREStation Add - - -/obj/structure/closet/secure_closet/psych - name = "psychiatric cabinet" - desc = "Store psychology tools and medicines in here." - req_access = list(access_psychiatrist) - closet_appearance = /decl/closet_appearance/cabinet/secure - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - - starts_with = list( - /obj/item/clothing/under/rank/psych, - /obj/item/clothing/under/rank/psych/turtleneck, - /obj/item/clothing/suit/straight_jacket, - /obj/item/weapon/reagent_containers/glass/bottle/stoxin, - /obj/item/weapon/reagent_containers/syringe, - /obj/item/weapon/storage/pill_bottle/citalopram, - /obj/item/weapon/reagent_containers/pill/methylphenidate, - /obj/item/weapon/clipboard, - /obj/item/weapon/folder/white, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/toy/plushie/therapy/blue) - - -/obj/structure/closet/secure_closet/medical_wall - name = "first aid closet" - desc = "It's a secure wall-mounted storage unit for first aid supplies." - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - anchored = TRUE - density = FALSE - wall_mounted = 1 - store_mobs = 0 - req_access = list(access_medical_equip) - closet_appearance = /decl/closet_appearance/wall/medical - -/obj/structure/closet/secure_closet/medical_wall/pills - name = "pill cabinet" - - starts_with = list( - /obj/item/weapon/storage/pill_bottle/tramadol, - /obj/item/weapon/storage/pill_bottle/antitox, - /obj/item/weapon/storage/pill_bottle/carbon, - /obj/random/medical/pillbottle) - - -/obj/structure/closet/secure_closet/medical_wall/anesthetics - name = "anesthetics wall closet" - desc = "Used to knock people out." - req_access = list(access_surgery) - - starts_with = list( - /obj/item/weapon/tank/anesthetic = 3, - /obj/item/clothing/mask/breath/medical = 3) +/obj/structure/closet/secure_closet/medical1 + name = "medicine closet" + desc = "Filled with medical junk." + req_access = list(access_medical) + closet_appearance = /decl/closet_appearance/secure_closet/medical/alt + + starts_with = list( + /obj/item/weapon/storage/box/autoinjectors, + /obj/item/weapon/storage/box/syringes, + /obj/item/weapon/reagent_containers/dropper = 2, + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 2, + /obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 2) + +/obj/structure/closet/secure_closet/medical2 + name = "anesthetics closet" + desc = "Used to knock people out." + req_access = list(access_surgery) + closet_appearance = /decl/closet_appearance/secure_closet/medical + + starts_with = list( + /obj/item/weapon/tank/anesthetic = 3, + /obj/item/clothing/mask/breath/medical = 3) + + +/obj/structure/closet/secure_closet/medical3 + name = "medical doctor's locker" + req_access = list(access_medical_equip) + closet_appearance = /decl/closet_appearance/secure_closet/medical/doctor + + starts_with = list( + /obj/item/clothing/under/rank/medical, + /obj/item/clothing/under/rank/nurse, + /obj/item/clothing/under/rank/orderly, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/suit/storage/toggle/labcoat/modern, + /obj/item/clothing/suit/storage/toggle/fr_jacket, + /obj/item/clothing/shoes/white, + /obj/item/weapon/cartridge/medical, + /obj/item/device/radio/headset/headset_med, + /obj/item/device/radio/headset/headset_med/alt, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt, + /obj/item/clothing/shoes/boots/winter/medical, + /obj/item/clothing/under/rank/nursesuit, + /obj/item/clothing/head/nursehat, + /obj/item/weapon/storage/box/freezer = 3, + /obj/item/weapon/storage/belt/medical) //VOREStation Add + +/obj/structure/closet/secure_closet/medical3/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/medic + else + starts_with += /obj/item/weapon/storage/backpack/satchel/med + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/med + switch(pick("blue", "green", "purple", "black", "navyblue")) + if ("blue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs + starts_with += /obj/item/clothing/head/surgery/blue + if ("green") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/green + starts_with += /obj/item/clothing/head/surgery/green + if ("purple") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple + starts_with += /obj/item/clothing/head/surgery/purple + if ("black") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/black + starts_with += /obj/item/clothing/head/surgery/black + if ("navyblue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue + starts_with += /obj/item/clothing/head/surgery/navyblue + switch(pick("blue", "green", "purple", "black", "navyblue")) + if ("blue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs + starts_with += /obj/item/clothing/head/surgery/blue + if ("green") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/green + starts_with += /obj/item/clothing/head/surgery/green + if ("purple") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple + starts_with += /obj/item/clothing/head/surgery/purple + if ("black") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/black + starts_with += /obj/item/clothing/head/surgery/black + if ("navyblue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue + starts_with += /obj/item/clothing/head/surgery/navyblue + return ..() + + +/obj/structure/closet/secure_closet/paramedic + name = "paramedic locker" + desc = "Supplies for a first responder." + req_access = list(access_medical_equip) + closet_appearance = /decl/closet_appearance/secure_closet/medical/paramedic + + starts_with = list( + /obj/item/weapon/storage/backpack/dufflebag/emt, + /obj/item/weapon/storage/box/autoinjectors, + /obj/item/weapon/storage/box/syringes, + /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, + /obj/item/weapon/reagent_containers/glass/bottle/antitoxin, + /obj/item/weapon/storage/belt/medical/emt, + /obj/item/clothing/mask/gas, + /obj/item/clothing/suit/storage/toggle/fr_jacket, + /obj/item/clothing/suit/storage/toggle/labcoat/emt, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para, + /obj/item/clothing/shoes/boots/winter/medical, + /obj/item/device/radio/headset/headset_med/alt, + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/device/flashlight, + /obj/item/weapon/tank/emergency/oxygen/engi, + /obj/item/clothing/glasses/hud/health, + /obj/item/device/healthanalyzer, + /obj/item/device/radio/off, + /obj/random/medical, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/storage/box/freezer, + /obj/item/clothing/accessory/storage/white_vest, + /obj/item/taperoll/medical) + +/obj/structure/closet/secure_closet/CMO + name = "chief medical officer's locker" + req_access = list(access_cmo) + closet_appearance = /decl/closet_appearance/secure_closet/cmo + + starts_with = list( + /obj/item/clothing/under/rank/chief_medical_officer, + /obj/item/clothing/under/rank/chief_medical_officer/skirt, + /obj/item/clothing/suit/storage/toggle/labcoat/cmo, + /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, + /obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo, + /obj/item/weapon/cartridge/cmo, + /obj/item/clothing/gloves/sterile/latex, + /obj/item/clothing/shoes/brown, + /obj/item/clothing/under/rank/neo_cmo, + /obj/item/clothing/under/rank/neo_cmo_skirt, + /obj/item/clothing/under/rank/neo_cmo_turtle, + /obj/item/clothing/under/rank/neo_cmo_turtle_skirt, + /obj/item/clothing/under/rank/neo_cmo_gorka, + /obj/item/device/radio/headset/heads/cmo, + /obj/item/device/radio/headset/heads/cmo/alt, + /obj/item/device/flash, + /obj/item/weapon/reagent_containers/hypospray/vial, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo, + /obj/item/clothing/shoes/boots/winter/medical, + /obj/item/clothing/head/beret/medical/cmo, + /obj/item/clothing/head/beret/medical/cmo/blue, + /obj/item/weapon/storage/box/freezer, + /obj/item/clothing/mask/gas, + /obj/item/taperoll/medical, + /obj/item/clothing/suit/bio_suit/cmo, + /obj/item/clothing/head/bio_hood/cmo, + /obj/item/clothing/shoes/white, + /obj/item/weapon/reagent_containers/glass/beaker/vial, //VOREStation Add + /obj/item/weapon/storage/belt/medical) //VOREStation Add + +/obj/structure/closet/secure_closet/CMO/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/medic + else + starts_with += /obj/item/weapon/storage/backpack/satchel/med + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/med + switch(pick("blue", "green", "purple", "black", "navyblue")) + if ("blue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs + starts_with += /obj/item/clothing/head/surgery/blue + if ("green") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/green + starts_with += /obj/item/clothing/head/surgery/green + if ("purple") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/purple + starts_with += /obj/item/clothing/head/surgery/purple + if ("black") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/black + starts_with += /obj/item/clothing/head/surgery/black + if ("navyblue") + starts_with += /obj/item/clothing/under/rank/medical/scrubs/navyblue + starts_with += /obj/item/clothing/head/surgery/navyblue + return ..() + + +/obj/structure/closet/secure_closet/animal + name = "animal control closet" + req_access = list(access_surgery) + + starts_with = list( + /obj/item/device/assembly/signaler, + /obj/item/device/radio/electropack = 3) + + +/obj/structure/closet/secure_closet/chemical + name = "chemical closet" + desc = "Store dangerous chemicals in here." + req_access = list(access_chemistry) + closet_appearance = /decl/closet_appearance/secure_closet/medical/chemistry + + starts_with = list( + /obj/item/weapon/storage/box/pillbottles = 2, + /obj/item/weapon/storage/box/beakers, + /obj/item/weapon/storage/box/autoinjectors, + /obj/item/weapon/storage/box/syringes, + /obj/item/weapon/reagent_containers/dropper = 2, + /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 2, + /obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 2, + /obj/item/weapon/storage/fancy/vials) //VOREStation Add + + +/obj/structure/closet/secure_closet/psych + name = "psychiatric cabinet" + desc = "Store psychology tools and medicines in here." + req_access = list(access_psychiatrist) + closet_appearance = /decl/closet_appearance/cabinet/secure + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + + starts_with = list( + /obj/item/clothing/under/rank/psych, + /obj/item/clothing/under/rank/psych/turtleneck, + /obj/item/clothing/suit/straight_jacket, + /obj/item/weapon/reagent_containers/glass/bottle/stoxin, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/storage/pill_bottle/citalopram, + /obj/item/weapon/reagent_containers/pill/methylphenidate, + /obj/item/weapon/clipboard, + /obj/item/weapon/folder/white, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/camera, + /obj/item/toy/plushie/therapy/blue) + + +/obj/structure/closet/secure_closet/medical_wall + name = "first aid closet" + desc = "It's a secure wall-mounted storage unit for first aid supplies." + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + anchored = TRUE + density = FALSE + wall_mounted = 1 + store_mobs = 0 + req_access = list(access_medical_equip) + closet_appearance = /decl/closet_appearance/wall/medical + +/obj/structure/closet/secure_closet/medical_wall/pills + name = "pill cabinet" + + starts_with = list( + /obj/item/weapon/storage/pill_bottle/tramadol, + /obj/item/weapon/storage/pill_bottle/antitox, + /obj/item/weapon/storage/pill_bottle/carbon, + /obj/random/medical/pillbottle) + + +/obj/structure/closet/secure_closet/medical_wall/anesthetics + name = "anesthetics wall closet" + desc = "Used to knock people out." + req_access = list(access_surgery) + + starts_with = list( + /obj/item/weapon/tank/anesthetic = 3, + /obj/item/clothing/mask/breath/medical = 3) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 0dc89e7c46..39e8f2d954 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -1,115 +1,115 @@ -/obj/structure/closet/secure_closet/personal - name = "personal closet" - desc = "It's a secure locker for personnel. The first card swiped gains control." - req_access = list(access_all_personal_lockers) - var/registered_name = null - - /* //VOREStation Removal - starts_with = list( - /obj/item/device/radio/headset) - */ - -/obj/structure/closet/secure_closet/personal/Initialize() - /* //VOREStation Removal - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack - else - starts_with += /obj/item/weapon/storage/backpack/satchel/norm - */ - return ..() - -/obj/structure/closet/secure_closet/personal/patient - name = "patient's closet" - closet_appearance = /decl/closet_appearance/secure_closet/patient - - starts_with = list( - /obj/item/clothing/under/medigown, - /obj/item/clothing/under/color/white, - /obj/item/clothing/shoes/white) - - -/obj/structure/closet/secure_closet/personal/cabinet - closet_appearance = /decl/closet_appearance/cabinet/secure - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - - starts_with = list( - /obj/item/weapon/storage/backpack/satchel/withwallet, - /obj/item/device/radio/headset - ) - -/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (src.opened) - if(istype(W, /obj/item/weapon/storage/laundry_basket)) - return ..(W,user) - if(istype(W, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = W - if(large) - MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - else - to_chat(user, "The locker is too small to stuff [G.affecting] into!") - if(isrobot(user)) - return - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - user.drop_item() - if(W) - W.forceMove(loc) - else if(W.GetID()) - var/obj/item/weapon/card/id/I = W.GetID() - - if(src.broken) - to_chat(user, "It appears to be broken.") - return - if(!I || !I.registered_name) return - if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name))) - //they can open all lockers, or nobody owns this, or they own this locker - src.locked = !( src.locked ) - - if(!src.registered_name) - src.registered_name = I.registered_name - src.desc = "Owned by [I.registered_name]." - else - to_chat(user, "Access Denied") - else if(istype(W, /obj/item/weapon/melee/energy/blade)) - if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - else - to_chat(user, "Access Denied") - update_icon() - -/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback) - if(!broken) - broken = 1 - locked = 0 - desc = "It appears to be broken." - update_icon() - if(visual_feedback) - visible_message("[visual_feedback]", "[audible_feedback]") - return 1 - -/obj/structure/closet/secure_closet/personal/verb/reset() - set src in oview(1) // One square distance - set category = "Object" - set name = "Reset Lock" - if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain - return - if(ishuman(usr)) - src.add_fingerprint(usr) - if (src.locked || !src.registered_name) - to_chat(usr, "You need to unlock it first.") - else if (src.broken) - to_chat(usr, "It appears to be broken.") - else - if (src.opened) - if(!src.close()) - return - src.locked = 1 - update_icon() - src.registered_name = null - src.desc = "It's a secure locker for personnel. The first card swiped gains control." +/obj/structure/closet/secure_closet/personal + name = "personal closet" + desc = "It's a secure locker for personnel. The first card swiped gains control." + req_access = list(access_all_personal_lockers) + var/registered_name = null + + /* //VOREStation Removal + starts_with = list( + /obj/item/device/radio/headset) + */ + +/obj/structure/closet/secure_closet/personal/Initialize() + /* //VOREStation Removal + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack + else + starts_with += /obj/item/weapon/storage/backpack/satchel/norm + */ + return ..() + +/obj/structure/closet/secure_closet/personal/patient + name = "patient's closet" + closet_appearance = /decl/closet_appearance/secure_closet/patient + + starts_with = list( + /obj/item/clothing/under/medigown, + /obj/item/clothing/under/color/white, + /obj/item/clothing/shoes/white) + + +/obj/structure/closet/secure_closet/personal/cabinet + closet_appearance = /decl/closet_appearance/cabinet/secure + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + + starts_with = list( + /obj/item/weapon/storage/backpack/satchel/withwallet, + /obj/item/device/radio/headset + ) + +/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (src.opened) + if(istype(W, /obj/item/weapon/storage/laundry_basket)) + return ..(W,user) + if(istype(W, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = W + if(large) + MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet + else + to_chat(user, "The locker is too small to stuff [G.affecting] into!") + if(isrobot(user)) + return + if(W.loc != user) // This should stop mounted modules ending up outside the module. + return + user.drop_item() + if(W) + W.forceMove(loc) + else if(W.GetID()) + var/obj/item/weapon/card/id/I = W.GetID() + + if(src.broken) + to_chat(user, "It appears to be broken.") + return + if(!I || !I.registered_name) return + if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name))) + //they can open all lockers, or nobody owns this, or they own this locker + src.locked = !( src.locked ) + + if(!src.registered_name) + src.registered_name = I.registered_name + src.desc = "Owned by [I.registered_name]." + else + to_chat(user, "Access Denied") + else if(istype(W, /obj/item/weapon/melee/energy/blade)) + if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) + else + to_chat(user, "Access Denied") + update_icon() + +/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback) + if(!broken) + broken = 1 + locked = 0 + desc = "It appears to be broken." + update_icon() + if(visual_feedback) + visible_message("[visual_feedback]", "[audible_feedback]") + return 1 + +/obj/structure/closet/secure_closet/personal/verb/reset() + set src in oview(1) // One square distance + set category = "Object" + set name = "Reset Lock" + if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain + return + if(ishuman(usr)) + src.add_fingerprint(usr) + if (src.locked || !src.registered_name) + to_chat(usr, "You need to unlock it first.") + else if (src.broken) + to_chat(usr, "It appears to be broken.") + else + if (src.opened) + if(!src.close()) + return + src.locked = 1 + update_icon() + src.registered_name = null + src.desc = "It's a secure locker for personnel. The first card swiped gains control." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 81f2911baa..c941f8306e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,93 +1,93 @@ -/obj/structure/closet/secure_closet/scientist - name = "scientist's locker" - req_access = list(access_tox_storage) - closet_appearance = /decl/closet_appearance/secure_closet/science - - starts_with = list( - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/shoes/white, - /obj/item/device/radio/headset/headset_sci, - /obj/item/weapon/tank/air, - /obj/item/clothing/mask/gas, - /obj/item/clothing/suit/storage/hooded/wintercoat/science, - /obj/item/clothing/shoes/boots/winter/science) - -/obj/structure/closet/secure_closet/scientist/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci - else - starts_with += /obj/item/weapon/storage/backpack/toxins - return ..() - - -/obj/structure/closet/secure_closet/RD - name = "research director's locker" - req_access = list(access_rd) - closet_appearance = /decl/closet_appearance/secure_closet/science/rd - - starts_with = list( - /obj/item/clothing/suit/bio_suit/scientist, - /obj/item/clothing/head/bio_hood/scientist, - /obj/item/clothing/under/rank/research_director, - /obj/item/clothing/under/rank/research_director/rdalt, - /obj/item/clothing/under/rank/research_director/dress_rd, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/storage/toggle/labcoat/modern, - /obj/item/clothing/suit/storage/toggle/labcoat/rd, - /obj/item/clothing/under/rank/neo_rd_turtle, - /obj/item/clothing/under/rank/neo_rd_turtle_skirt, - /obj/item/clothing/under/rank/neo_rd_suit, - /obj/item/clothing/under/rank/neo_rd_suit_skirt, - /obj/item/clothing/under/rank/neo_rd_gorka, - /obj/item/weapon/cartridge/rd, - /obj/item/clothing/shoes/white, - /obj/item/clothing/shoes/laceup/brown, - /obj/item/clothing/gloves/sterile/latex, - /obj/item/device/radio/headset/heads/rd, - /obj/item/device/radio/headset/heads/rd/alt, - /obj/item/weapon/tank/air, - /obj/item/clothing/mask/gas, - /obj/item/device/flash, - /obj/item/clothing/suit/storage/hooded/wintercoat/science, - /obj/item/clothing/suit/storage/hooded/wintercoat/science/rd, - /obj/item/clothing/shoes/boots/winter/science, - /obj/item/clothing/head/beret/science/rd, - /obj/item/weapon/bluespace_harpoon) //VOREStation Add - -/obj/structure/closet/secure_closet/xenoarchaeologist - name = "Xenoarchaeologist Locker" - req_access = list(access_tox_storage) - closet_appearance = /decl/closet_appearance/secure_closet/science/xenoarch - - starts_with = list( - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/storage/toggle/labcoat/modern, - /obj/item/clothing/shoes/white, - /obj/item/weapon/melee/umbrella, - /obj/item/clothing/glasses/science, - /obj/item/device/radio/headset/headset_sci, - /obj/item/weapon/storage/belt/archaeology, - /obj/item/weapon/storage/excavation) - -/obj/structure/closet/excavation - name = "Excavation tools" - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/xenoarch - - starts_with = list( - /obj/item/weapon/storage/belt/archaeology, - /obj/item/weapon/storage/excavation, - /obj/item/device/flashlight/lantern, - /obj/item/device/ano_scanner, - /obj/item/device/depth_scanner, - /obj/item/device/core_sampler, - /obj/item/device/gps, - /obj/item/device/beacon_locator, - /obj/item/device/radio/beacon, - /obj/item/clothing/glasses/meson, - /obj/item/weapon/pickaxe, - /obj/item/device/measuring_tape, - /obj/item/weapon/pickaxe/hand, - /obj/item/weapon/storage/bag/fossils, - /obj/item/weapon/hand_labeler) +/obj/structure/closet/secure_closet/scientist + name = "scientist's locker" + req_access = list(access_tox_storage) + closet_appearance = /decl/closet_appearance/secure_closet/science + + starts_with = list( + /obj/item/clothing/under/rank/scientist, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/shoes/white, + /obj/item/device/radio/headset/headset_sci, + /obj/item/weapon/tank/air, + /obj/item/clothing/mask/gas, + /obj/item/clothing/suit/storage/hooded/wintercoat/science, + /obj/item/clothing/shoes/boots/winter/science) + +/obj/structure/closet/secure_closet/scientist/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci + else + starts_with += /obj/item/weapon/storage/backpack/toxins + return ..() + + +/obj/structure/closet/secure_closet/RD + name = "research director's locker" + req_access = list(access_rd) + closet_appearance = /decl/closet_appearance/secure_closet/science/rd + + starts_with = list( + /obj/item/clothing/suit/bio_suit/scientist, + /obj/item/clothing/head/bio_hood/scientist, + /obj/item/clothing/under/rank/research_director, + /obj/item/clothing/under/rank/research_director/rdalt, + /obj/item/clothing/under/rank/research_director/dress_rd, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/suit/storage/toggle/labcoat/modern, + /obj/item/clothing/suit/storage/toggle/labcoat/rd, + /obj/item/clothing/under/rank/neo_rd_turtle, + /obj/item/clothing/under/rank/neo_rd_turtle_skirt, + /obj/item/clothing/under/rank/neo_rd_suit, + /obj/item/clothing/under/rank/neo_rd_suit_skirt, + /obj/item/clothing/under/rank/neo_rd_gorka, + /obj/item/weapon/cartridge/rd, + /obj/item/clothing/shoes/white, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/gloves/sterile/latex, + /obj/item/device/radio/headset/heads/rd, + /obj/item/device/radio/headset/heads/rd/alt, + /obj/item/weapon/tank/air, + /obj/item/clothing/mask/gas, + /obj/item/device/flash, + /obj/item/clothing/suit/storage/hooded/wintercoat/science, + /obj/item/clothing/suit/storage/hooded/wintercoat/science/rd, + /obj/item/clothing/shoes/boots/winter/science, + /obj/item/clothing/head/beret/science/rd, + /obj/item/weapon/bluespace_harpoon) //VOREStation Add + +/obj/structure/closet/secure_closet/xenoarchaeologist + name = "Xenoarchaeologist Locker" + req_access = list(access_tox_storage) + closet_appearance = /decl/closet_appearance/secure_closet/science/xenoarch + + starts_with = list( + /obj/item/clothing/under/rank/scientist, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/suit/storage/toggle/labcoat/modern, + /obj/item/clothing/shoes/white, + /obj/item/weapon/melee/umbrella, + /obj/item/clothing/glasses/science, + /obj/item/device/radio/headset/headset_sci, + /obj/item/weapon/storage/belt/archaeology, + /obj/item/weapon/storage/excavation) + +/obj/structure/closet/excavation + name = "Excavation tools" + closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/xenoarch + + starts_with = list( + /obj/item/weapon/storage/belt/archaeology, + /obj/item/weapon/storage/excavation, + /obj/item/device/flashlight/lantern, + /obj/item/device/ano_scanner, + /obj/item/device/depth_scanner, + /obj/item/device/core_sampler, + /obj/item/device/gps, + /obj/item/device/beacon_locator, + /obj/item/device/radio/beacon, + /obj/item/clothing/glasses/meson, + /obj/item/weapon/pickaxe, + /obj/item/device/measuring_tape, + /obj/item/weapon/pickaxe/hand, + /obj/item/weapon/storage/bag/fossils, + /obj/item/weapon/hand_labeler) 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 index b514802323..412ba3ee49 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -1,159 +1,159 @@ -/obj/structure/closet/secure_closet - name = "secure locker" - desc = "It's an immobile card-locked storage unit." - icon = 'icons/obj/closet.dmi' - icon_state = "secure1" - density = TRUE - opened = 0 - var/locked = 1 - var/broken = 0 - var/large = 1 - wall_mounted = 0 //never solid (You can always pass over it) - health = 200 - anchored = 1 //CHOMPADD - Making them properly IMMOBILE. Like the Desc says? Yeah... - - closet_appearance = /decl/closet_appearance/secure_closet - -/obj/structure/closet/secure_closet/can_open() - if(locked) - return 0 - return ..() - -/obj/structure/closet/secure_closet/emp_act(severity) - for(var/obj/O in src) - O.emp_act(severity) - if(!broken) - if(prob(50/severity)) - locked = !locked - update_icon() - if(prob(20/severity) && !opened) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_station_access()) - ..() - -/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob) - if(opened) - to_chat(user, "Close the locker first.") - return - if(broken) - to_chat(user, "The locker appears to be broken.") - return - if(user.loc == src) - to_chat(user, "You can't reach the lock from inside.") - return - if(allowed(user)) - locked = !locked - playsound(src, 'sound/machines/click.ogg', 15, 1, -3) - for(var/mob/O in viewers(user, 3)) - if((O.client && !( O.blinded ))) - to_chat(O, "The locker has been [locked ? null : "un"]locked by [user].") - update_icon() - else - to_chat(user, "Access Denied") - -/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - if(opened) - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * W.toolspeed)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - return - else - to_chat(user, "You can't reach the anchoring bolts when the door is closed!") - else if(opened) - if(istype(W, /obj/item/weapon/storage/laundry_basket)) - return ..(W,user) - if(istype(W, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = W - if(large) - MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - else - to_chat(user, "The locker is too small to stuff [G.affecting] into!") - if(isrobot(user)) - return - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - user.drop_item() - if(W) - W.forceMove(loc) - else if(istype(W, /obj/item/weapon/melee/energy/blade)) - if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - else if(istype(W,/obj/item/weapon/packageWrap) || W.has_tool_quality(TOOL_WELDER)) - return ..(W,user) - else - togglelock(user) - -/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") - if(!broken) - broken = 1 - locked = 0 - desc = "It appears to be broken." - - if(visual_feedback) - visible_message(visual_feedback, audible_feedback) - else if(user && emag_source) - visible_message("\The [src] has been broken by \the [user] with \an [emag_source]!", "You hear a faint electrical spark.") - else - visible_message("\The [src] sparks and breaks open!", "You hear a faint electrical spark.") - update_icon() - return 1 - -/obj/structure/closet/secure_closet/attack_hand(mob/user as mob) - add_fingerprint(user) - if(locked) - togglelock(user) - else - toggle(user) - -/obj/structure/closet/secure_closet/AltClick() - ..() - verb_togglelock() - -/obj/structure/closet/secure_closet/verb/verb_togglelock() - set src in oview(1) // One square distance - set category = "Object" - set name = "Toggle Lock" - - if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr)) // Don't use it if you're not able to! Checks for stuns, ghost and restrain - return - - if(ishuman(usr) || isrobot(usr)) - add_fingerprint(usr) - togglelock(usr) - else - to_chat(usr, "This mob type can't use this verb.") - -/obj/structure/closet/secure_closet/update_icon() - if(opened) - icon_state = "open" - else - if(broken) - icon_state = "closed_emagged[sealed ? "_welded" : ""]" - else - if(locked) - icon_state = "closed_locked[sealed ? "_welded" : ""]" - else - icon_state = "closed_unlocked[sealed ? "_welded" : ""]" - -/obj/structure/closet/secure_closet/req_breakout() - if(!opened && locked) return 1 - return ..() //It's a secure closet, but isn't locked. - -/obj/structure/closet/secure_closet/break_open() - desc += " It appears to be broken." - broken = 1 - locked = 0 - ..() +/obj/structure/closet/secure_closet + name = "secure locker" + desc = "It's an immobile card-locked storage unit." + icon = 'icons/obj/closet.dmi' + icon_state = "secure1" + density = TRUE + opened = 0 + var/locked = 1 + var/broken = 0 + var/large = 1 + wall_mounted = 0 //never solid (You can always pass over it) + health = 200 + anchored = 1 //CHOMPADD - Making them properly IMMOBILE. Like the Desc says? Yeah... + + closet_appearance = /decl/closet_appearance/secure_closet + +/obj/structure/closet/secure_closet/can_open() + if(locked) + return 0 + return ..() + +/obj/structure/closet/secure_closet/emp_act(severity) + for(var/obj/O in src) + O.emp_act(severity) + if(!broken) + if(prob(50/severity)) + locked = !locked + update_icon() + if(prob(20/severity) && !opened) + if(!locked) + open() + else + req_access = list() + req_access += pick(get_all_station_access()) + ..() + +/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob) + if(opened) + to_chat(user, "Close the locker first.") + return + if(broken) + to_chat(user, "The locker appears to be broken.") + return + if(user.loc == src) + to_chat(user, "You can't reach the lock from inside.") + return + if(allowed(user)) + locked = !locked + playsound(src, 'sound/machines/click.ogg', 15, 1, -3) + for(var/mob/O in viewers(user, 3)) + if((O.client && !( O.blinded ))) + to_chat(O, "The locker has been [locked ? null : "un"]locked by [user].") + update_icon() + else + to_chat(user, "Access Denied") + +/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + if(opened) + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * W.toolspeed)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + return + else + to_chat(user, "You can't reach the anchoring bolts when the door is closed!") + else if(opened) + if(istype(W, /obj/item/weapon/storage/laundry_basket)) + return ..(W,user) + if(istype(W, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = W + if(large) + MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet + else + to_chat(user, "The locker is too small to stuff [G.affecting] into!") + if(isrobot(user)) + return + if(W.loc != user) // This should stop mounted modules ending up outside the module. + return + user.drop_item() + if(W) + W.forceMove(loc) + else if(istype(W, /obj/item/weapon/melee/energy/blade)) + if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) + else if(istype(W,/obj/item/weapon/packageWrap) || W.has_tool_quality(TOOL_WELDER)) + return ..(W,user) + else + togglelock(user) + +/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") + if(!broken) + broken = 1 + locked = 0 + desc = "It appears to be broken." + + if(visual_feedback) + visible_message(visual_feedback, audible_feedback) + else if(user && emag_source) + visible_message("\The [src] has been broken by \the [user] with \an [emag_source]!", "You hear a faint electrical spark.") + else + visible_message("\The [src] sparks and breaks open!", "You hear a faint electrical spark.") + update_icon() + return 1 + +/obj/structure/closet/secure_closet/attack_hand(mob/user as mob) + add_fingerprint(user) + if(locked) + togglelock(user) + else + toggle(user) + +/obj/structure/closet/secure_closet/AltClick() + ..() + verb_togglelock() + +/obj/structure/closet/secure_closet/verb/verb_togglelock() + set src in oview(1) // One square distance + set category = "Object" + set name = "Toggle Lock" + + if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr)) // Don't use it if you're not able to! Checks for stuns, ghost and restrain + return + + if(ishuman(usr) || isrobot(usr)) + add_fingerprint(usr) + togglelock(usr) + else + to_chat(usr, "This mob type can't use this verb.") + +/obj/structure/closet/secure_closet/update_icon() + if(opened) + icon_state = "open" + else + if(broken) + icon_state = "closed_emagged[sealed ? "_welded" : ""]" + else + if(locked) + icon_state = "closed_locked[sealed ? "_welded" : ""]" + else + icon_state = "closed_unlocked[sealed ? "_welded" : ""]" + +/obj/structure/closet/secure_closet/req_breakout() + if(!opened && locked) return 1 + return ..() //It's a secure closet, but isn't locked. + +/obj/structure/closet/secure_closet/break_open() + desc += " It appears to be broken." + broken = 1 + locked = 0 + ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 8371e24eb0..3543fc59f5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -1,345 +1,345 @@ -/obj/structure/closet/secure_closet/captains - name = "site manager's locker" - req_access = list(access_captain) - closet_appearance = /decl/closet_appearance/secure_closet/command - - starts_with = list( - /obj/item/weapon/storage/backpack/dufflebag/captain, - /obj/item/clothing/head/helmet, - /obj/item/clothing/suit/storage/vest, - /obj/item/weapon/cartridge/captain, - /obj/item/weapon/storage/lockbox/medal, - /obj/item/device/radio/headset/heads/captain, - /obj/item/device/radio/headset/heads/captain/alt, - /obj/item/weapon/gun/energy/gun, - /obj/item/weapon/melee/telebaton, - /obj/item/device/flash, - /obj/item/weapon/storage/box/ids) - - -/obj/structure/closet/secure_closet/hop - name = "head of personnel's locker" - req_access = list(access_hop) - closet_appearance = /decl/closet_appearance/secure_closet/command/hop - - starts_with = list( - /obj/item/clothing/suit/storage/vest, - /obj/item/clothing/head/helmet, - /obj/item/weapon/cartridge/hop, - /obj/item/device/radio/headset/heads/hop, - /obj/item/device/radio/headset/heads/hop/alt, - /obj/item/weapon/storage/box/ids = 2, - /obj/item/weapon/gun/energy/gun/compact, - /obj/item/weapon/storage/box/commandkeys, - /obj/item/weapon/storage/box/servicekeys, - /obj/item/device/flash) - -/obj/structure/closet/secure_closet/hop2 - name = "head of personnel's attire" - req_access = list(access_hop) - closet_appearance = /decl/closet_appearance/secure_closet/command/hop - - starts_with = list( - /obj/item/clothing/under/rank/head_of_personnel, - /obj/item/clothing/under/dress/dress_hop, - /obj/item/clothing/under/dress/dress_hr, - /obj/item/clothing/under/lawyer/female, - /obj/item/clothing/under/lawyer/black, - /obj/item/clothing/under/lawyer/black/skirt, - /obj/item/clothing/under/lawyer/red, - /obj/item/clothing/under/lawyer/red/skirt, - /obj/item/clothing/under/lawyer/oldman, - /obj/item/clothing/under/rank/neo_hop, - /obj/item/clothing/under/rank/neo_hop_skirt, - /obj/item/clothing/under/rank/neo_hop_parade_masc, - /obj/item/clothing/under/rank/neo_hop_parade_fem, - /obj/item/clothing/under/rank/neo_hop_turtle, - /obj/item/clothing/under/rank/neo_hop_turtle_skirt, - /obj/item/clothing/under/rank/neo_cmd_gorka, - /obj/item/clothing/suit/storage/toggle/labcoat/neo_hopformal, - /obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/shoes/black, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup/brown, - /obj/item/clothing/shoes/white, - /obj/item/clothing/under/rank/head_of_personnel_whimsy, - /obj/item/clothing/head/caphat/hop, - /obj/item/clothing/under/suit_jacket/teal, - /obj/item/clothing/under/suit_jacket/teal/skirt, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/suit/storage/hooded/wintercoat/hop, - /obj/item/clothing/head/caphat/hop/beret, - /obj/item/clothing/head/caphat/hop/beret/white) - - -/obj/structure/closet/secure_closet/hos - name = "head of security's locker" - req_access = list(access_hos) - storage_capacity = 2.5 * MOB_MEDIUM - closet_appearance = /decl/closet_appearance/secure_closet/security/hos - - starts_with = list( - /obj/item/clothing/head/helmet/HoS, - /obj/item/clothing/head/helmet/HoS/hat, - /obj/item/clothing/suit/storage/vest/hos, - /obj/item/clothing/under/rank/head_of_security/jensen, - /obj/item/clothing/under/rank/head_of_security/corp, - /obj/item/clothing/suit/storage/vest/hoscoat/jensen, - /obj/item/clothing/suit/storage/vest/hoscoat, - /obj/item/clothing/head/helmet/dermal, - /obj/item/weapon/cartridge/hos, - /obj/item/device/radio/headset/heads/hos, - /obj/item/device/radio/headset/heads/hos/alt, - /obj/item/clothing/glasses/sunglasses/sechud, - /obj/item/taperoll/police, - /obj/item/weapon/shield/riot, - /obj/item/weapon/shield/riot/tele, - /obj/item/weapon/storage/box/holobadge/hos, - /obj/item/clothing/accessory/badge/holo/hos, - /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/tool/crowbar/red, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/storage/belt/security, - /obj/item/device/flash, - /obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos, - /obj/item/weapon/rcd_ammo/large, - /obj/item/weapon/cell/device/weapon, - /obj/item/clothing/accessory/holster/waist, - /obj/item/weapon/melee/telebaton, - /obj/item/clothing/head/beret/sec/corporate/hos, - /obj/item/clothing/suit/storage/hooded/wintercoat/security, - /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos, - /obj/item/clothing/shoes/boots/winter/security, - /obj/item/device/flashlight/maglight, - /obj/item/clothing/mask/gas/half, - /obj/item/clothing/mask/gas/sechailer/swat/hos, // CHOMPEdit - /obj/item/clothing/accessory/bodycam) // CHOMPEdit - - -/obj/structure/closet/secure_closet/hos/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec - return ..() - - -/obj/structure/closet/secure_closet/warden - name = "warden's locker" - storage_capacity = 42 - req_access = list(access_armory) - closet_appearance = /decl/closet_appearance/secure_closet/security/warden - - starts_with = list( - /obj/item/clothing/suit/storage/vest/warden, - /obj/item/clothing/under/rank/warden, - /obj/item/clothing/under/rank/warden/corp, - /obj/item/clothing/suit/storage/vest/wardencoat, - /obj/item/clothing/suit/storage/vest/wardencoat/alt, - /obj/item/clothing/suit/storage/vest/wardencoat/alt2, //VOREStation Add, - /obj/item/clothing/head/helmet/dermal, - /obj/item/clothing/head/helmet/warden, - /obj/item/clothing/head/helmet/warden/hat, - /obj/item/clothing/under/rank/neo_warden_red, - /obj/item/clothing/under/rank/neo_warden_red_skirt, - /obj/item/clothing/under/rank/neo_warden_blue, - /obj/item/clothing/suit/storage/vest/wardencoat/neo_armsco_trench, - /obj/item/clothing/suit/storage/vest/wardencoat/neo_bluewarden, - /obj/item/clothing/suit/storage/vest/wardencoat/neo_warden_heavy, - /obj/item/clothing/under/rank/neo_sec_gorka, - /obj/item/weapon/cartridge/security, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/clothing/glasses/sunglasses/sechud, - /obj/item/taperoll/police, - /obj/item/clothing/accessory/badge/holo/warden, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/storage/belt/security, - /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/gun/energy/gun, - /obj/item/weapon/cell/device/weapon, - /obj/item/weapon/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden, - /obj/item/clothing/suit/storage/hooded/wintercoat/security, - /obj/item/clothing/shoes/boots/winter/security, - /obj/item/device/flashlight/maglight, - /obj/item/device/megaphone, - /obj/item/clothing/mask/gas/sechailer/swat/warden, //CHOMP Edit - /obj/item/weapon/gun/projectile/revolvershotgun, - /obj/item/ammo_magazine/m12gdrumjack/beanbag, - /obj/item/ammo_magazine/m12gdrumjack/beanbag, - /obj/item/device/ticket_printer, //CHOMPStation addition - /obj/item/device/retail_scanner/security, //CHOMPStation addition - /obj/item/clothing/accessory/bodycam // CHOMPEdit - - ) - -/obj/structure/closet/secure_closet/warden/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec - return ..() - -/obj/structure/closet/secure_closet/security - name = "security officer's locker" - req_access = list(access_brig) - closet_appearance = /decl/closet_appearance/secure_closet/security - - starts_with = list( - /obj/item/clothing/suit/storage/vest/officer, - /obj/item/clothing/head/helmet, - /obj/item/clothing/mask/gas/sechailer/swat/officer, //CHOMP ADD - /obj/item/weapon/cartridge/security, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/weapon/storage/belt/security, - /obj/item/device/flash, - /obj/item/weapon/reagent_containers/spray/pepper, - /obj/item/weapon/grenade/flashbang, - /obj/item/weapon/melee/baton/loaded, - /obj/item/clothing/glasses/sunglasses/sechud, - /obj/item/taperoll/police, - /obj/item/device/hailer, - /obj/item/device/flashlight/flare, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/clothing/head/soft/sec/corp, - /obj/item/clothing/under/rank/security/corp, - /obj/item/ammo_magazine/m45/rubber, //VOREStation Removal, //CHOMP Edit it has been restored - /obj/item/weapon/gun/energy/taser, - /obj/item/weapon/cell/device/weapon, - /obj/item/clothing/suit/storage/hooded/wintercoat/security, - /obj/item/clothing/shoes/boots/winter/security, - /obj/item/device/flashlight/maglight, - /obj/item/device/holowarrant, //CHOMPStation addition - /obj/item/device/retail_scanner/security, //CHOMPStation addition - /obj/item/clothing/glasses/hud/security, //CHOMPStation addition - /obj/item/device/ticket_printer, //CHOMPStation addition - /obj/item/clothing/accessory/bodycam // CHOMPEdit - - ) - -/obj/structure/closet/secure_closet/security/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec - if(prob(30)) - starts_with += /obj/item/poster/nanotrasen - return ..() - -/obj/structure/closet/secure_closet/security/cargo/Initialize() - starts_with += /obj/item/clothing/accessory/armband/cargo - starts_with += /obj/item/device/encryptionkey/headset_cargo - return ..() - -/obj/structure/closet/secure_closet/security/engine/Initialize() - starts_with += /obj/item/clothing/accessory/armband/engine - starts_with += /obj/item/device/encryptionkey/headset_eng - return ..() - -/obj/structure/closet/secure_closet/security/science/Initialize() - starts_with += /obj/item/clothing/accessory/armband/science - starts_with += /obj/item/device/encryptionkey/headset_sci - return ..() - -/obj/structure/closet/secure_closet/security/med/Initialize() - starts_with += /obj/item/clothing/accessory/armband/medblue - starts_with += /obj/item/device/encryptionkey/headset_med - return ..() - - -/obj/structure/closet/secure_closet/detective - name = "detective's cabinet" - req_access = list(access_forensics_lockers) - closet_appearance = /decl/closet_appearance/cabinet/secure - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - - starts_with = list( - /obj/item/clothing/accessory/badge/holo/detective, - /obj/item/clothing/gloves/forensic, //CHOMP Edit replaces black gloves - /obj/item/gunbox, //CHOMP Edit undoes vorestation removal and adds back gunbox - /obj/item/gunbox/stun, - /obj/item/weapon/storage/belt/detective, - /obj/item/weapon/storage/box/evidence, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/clothing/suit/storage/vest/detective, - /obj/item/taperoll/police, - /obj/item/clothing/accessory/holster/armpit, - /obj/item/device/flashlight/maglight, - /obj/item/weapon/reagent_containers/food/drinks/flask/detflask, - /obj/item/weapon/storage/briefcase/crimekit, - /obj/item/device/taperecorder, - /obj/item/weapon/storage/bag/detective, - /obj/item/device/tape/random = 3, - /obj/item/device/retail_scanner/security, //CHOMPStation addition - /obj/item/clothing/glasses/hud/security //CHOMPStation addition - ) - -/obj/structure/closet/secure_closet/injection - name = "lethal injections locker" - req_access = list(access_captain) - closet_appearance = /decl/closet_appearance/secure_closet/courtroom - - starts_with = list( - /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral = 2) - -GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/brig) - -/obj/structure/closet/secure_closet/brig - name = "brig locker" - req_access = list(access_brig) - closet_appearance = /decl/closet_appearance/secure_closet/brig - anchored = TRUE - var/id = null - - starts_with = list( - /obj/item/clothing/under/color/prison, - /obj/item/clothing/shoes/orange) - -/obj/structure/closet/secure_closet/posters - name = "morale storage" - req_access = list(access_security) - anchored = TRUE - - starts_with = list( - /obj/item/poster/nanotrasen, - /obj/item/poster/nanotrasen, - /obj/item/poster/nanotrasen, - /obj/item/poster/nanotrasen, - /obj/item/poster/nanotrasen) - -/obj/structure/closet/secure_closet/courtroom - name = "courtroom locker" - req_access = list(access_lawyer) - closet_appearance = /decl/closet_appearance/secure_closet/courtroom - - starts_with = list( - /obj/item/clothing/shoes/brown, - /obj/item/weapon/paper/Court = 3, - /obj/item/weapon/pen, - /obj/item/clothing/suit/judgerobe, - /obj/item/clothing/head/powdered_wig, - /obj/item/weapon/storage/briefcase) - - -/obj/structure/closet/secure_closet/wall - name = "wall locker" - req_access = list(access_security) - closet_appearance = /decl/closet_appearance/wall - density = TRUE - - //too small to put a man in - large = 0 +/obj/structure/closet/secure_closet/captains + name = "site manager's locker" + req_access = list(access_captain) + closet_appearance = /decl/closet_appearance/secure_closet/command + + starts_with = list( + /obj/item/weapon/storage/backpack/dufflebag/captain, + /obj/item/clothing/head/helmet, + /obj/item/clothing/suit/storage/vest, + /obj/item/weapon/cartridge/captain, + /obj/item/weapon/storage/lockbox/medal, + /obj/item/device/radio/headset/heads/captain, + /obj/item/device/radio/headset/heads/captain/alt, + /obj/item/weapon/gun/energy/gun, + /obj/item/weapon/melee/telebaton, + /obj/item/device/flash, + /obj/item/weapon/storage/box/ids) + + +/obj/structure/closet/secure_closet/hop + name = "head of personnel's locker" + req_access = list(access_hop) + closet_appearance = /decl/closet_appearance/secure_closet/command/hop + + starts_with = list( + /obj/item/clothing/suit/storage/vest, + /obj/item/clothing/head/helmet, + /obj/item/weapon/cartridge/hop, + /obj/item/device/radio/headset/heads/hop, + /obj/item/device/radio/headset/heads/hop/alt, + /obj/item/weapon/storage/box/ids = 2, + /obj/item/weapon/gun/energy/gun/compact, + /obj/item/weapon/storage/box/commandkeys, + /obj/item/weapon/storage/box/servicekeys, + /obj/item/device/flash) + +/obj/structure/closet/secure_closet/hop2 + name = "head of personnel's attire" + req_access = list(access_hop) + closet_appearance = /decl/closet_appearance/secure_closet/command/hop + + starts_with = list( + /obj/item/clothing/under/rank/head_of_personnel, + /obj/item/clothing/under/dress/dress_hop, + /obj/item/clothing/under/dress/dress_hr, + /obj/item/clothing/under/lawyer/female, + /obj/item/clothing/under/lawyer/black, + /obj/item/clothing/under/lawyer/black/skirt, + /obj/item/clothing/under/lawyer/red, + /obj/item/clothing/under/lawyer/red/skirt, + /obj/item/clothing/under/lawyer/oldman, + /obj/item/clothing/under/rank/neo_hop, + /obj/item/clothing/under/rank/neo_hop_skirt, + /obj/item/clothing/under/rank/neo_hop_parade_masc, + /obj/item/clothing/under/rank/neo_hop_parade_fem, + /obj/item/clothing/under/rank/neo_hop_turtle, + /obj/item/clothing/under/rank/neo_hop_turtle_skirt, + /obj/item/clothing/under/rank/neo_cmd_gorka, + /obj/item/clothing/suit/storage/toggle/labcoat/neo_hopformal, + /obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep, + /obj/item/clothing/shoes/brown, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/shoes/white, + /obj/item/clothing/under/rank/head_of_personnel_whimsy, + /obj/item/clothing/head/caphat/hop, + /obj/item/clothing/under/suit_jacket/teal, + /obj/item/clothing/under/suit_jacket/teal/skirt, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/suit/storage/hooded/wintercoat/hop, + /obj/item/clothing/head/caphat/hop/beret, + /obj/item/clothing/head/caphat/hop/beret/white) + + +/obj/structure/closet/secure_closet/hos + name = "head of security's locker" + req_access = list(access_hos) + storage_capacity = 2.5 * MOB_MEDIUM + closet_appearance = /decl/closet_appearance/secure_closet/security/hos + + starts_with = list( + /obj/item/clothing/head/helmet/HoS, + /obj/item/clothing/head/helmet/HoS/hat, + /obj/item/clothing/suit/storage/vest/hos, + /obj/item/clothing/under/rank/head_of_security/jensen, + /obj/item/clothing/under/rank/head_of_security/corp, + /obj/item/clothing/suit/storage/vest/hoscoat/jensen, + /obj/item/clothing/suit/storage/vest/hoscoat, + /obj/item/clothing/head/helmet/dermal, + /obj/item/weapon/cartridge/hos, + /obj/item/device/radio/headset/heads/hos, + /obj/item/device/radio/headset/heads/hos/alt, + /obj/item/clothing/glasses/sunglasses/sechud, + /obj/item/taperoll/police, + /obj/item/weapon/shield/riot, + /obj/item/weapon/shield/riot/tele, + /obj/item/weapon/storage/box/holobadge/hos, + /obj/item/clothing/accessory/badge/holo/hos, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/tool/crowbar/red, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/storage/belt/security, + /obj/item/device/flash, + /obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos, + /obj/item/weapon/rcd_ammo/large, + /obj/item/weapon/cell/device/weapon, + /obj/item/clothing/accessory/holster/waist, + /obj/item/weapon/melee/telebaton, + /obj/item/clothing/head/beret/sec/corporate/hos, + /obj/item/clothing/suit/storage/hooded/wintercoat/security, + /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos, + /obj/item/clothing/shoes/boots/winter/security, + /obj/item/device/flashlight/maglight, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/mask/gas/sechailer/swat/hos, // CHOMPEdit + /obj/item/clothing/accessory/bodycam) // CHOMPEdit + + +/obj/structure/closet/secure_closet/hos/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec + return ..() + + +/obj/structure/closet/secure_closet/warden + name = "warden's locker" + storage_capacity = 42 + req_access = list(access_armory) + closet_appearance = /decl/closet_appearance/secure_closet/security/warden + + starts_with = list( + /obj/item/clothing/suit/storage/vest/warden, + /obj/item/clothing/under/rank/warden, + /obj/item/clothing/under/rank/warden/corp, + /obj/item/clothing/suit/storage/vest/wardencoat, + /obj/item/clothing/suit/storage/vest/wardencoat/alt, + /obj/item/clothing/suit/storage/vest/wardencoat/alt2, //VOREStation Add, + /obj/item/clothing/head/helmet/dermal, + /obj/item/clothing/head/helmet/warden, + /obj/item/clothing/head/helmet/warden/hat, + /obj/item/clothing/under/rank/neo_warden_red, + /obj/item/clothing/under/rank/neo_warden_red_skirt, + /obj/item/clothing/under/rank/neo_warden_blue, + /obj/item/clothing/suit/storage/vest/wardencoat/neo_armsco_trench, + /obj/item/clothing/suit/storage/vest/wardencoat/neo_bluewarden, + /obj/item/clothing/suit/storage/vest/wardencoat/neo_warden_heavy, + /obj/item/clothing/under/rank/neo_sec_gorka, + /obj/item/weapon/cartridge/security, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/clothing/glasses/sunglasses/sechud, + /obj/item/taperoll/police, + /obj/item/clothing/accessory/badge/holo/warden, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/storage/belt/security, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/gun/energy/gun, + /obj/item/weapon/cell/device/weapon, + /obj/item/weapon/storage/box/holobadge, + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/clothing/suit/storage/hooded/wintercoat/security, + /obj/item/clothing/shoes/boots/winter/security, + /obj/item/device/flashlight/maglight, + /obj/item/device/megaphone, + /obj/item/clothing/mask/gas/sechailer/swat/warden, //CHOMP Edit + /obj/item/weapon/gun/projectile/revolvershotgun, + /obj/item/ammo_magazine/m12gdrumjack/beanbag, + /obj/item/ammo_magazine/m12gdrumjack/beanbag, + /obj/item/device/ticket_printer, //CHOMPStation addition + /obj/item/device/retail_scanner/security, //CHOMPStation addition + /obj/item/clothing/accessory/bodycam // CHOMPEdit + + ) + +/obj/structure/closet/secure_closet/warden/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec + return ..() + +/obj/structure/closet/secure_closet/security + name = "security officer's locker" + req_access = list(access_brig) + closet_appearance = /decl/closet_appearance/secure_closet/security + + starts_with = list( + /obj/item/clothing/suit/storage/vest/officer, + /obj/item/clothing/head/helmet, + /obj/item/clothing/mask/gas/sechailer/swat/officer, //CHOMP ADD + /obj/item/weapon/cartridge/security, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/weapon/storage/belt/security, + /obj/item/device/flash, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/grenade/flashbang, + /obj/item/weapon/melee/baton/loaded, + /obj/item/clothing/glasses/sunglasses/sechud, + /obj/item/taperoll/police, + /obj/item/device/hailer, + /obj/item/device/flashlight/flare, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/head/soft/sec/corp, + /obj/item/clothing/under/rank/security/corp, + /obj/item/ammo_magazine/m45/rubber, //VOREStation Removal, //CHOMP Edit it has been restored + /obj/item/weapon/gun/energy/taser, + /obj/item/weapon/cell/device/weapon, + /obj/item/clothing/suit/storage/hooded/wintercoat/security, + /obj/item/clothing/shoes/boots/winter/security, + /obj/item/device/flashlight/maglight, + /obj/item/device/holowarrant, //CHOMPStation addition + /obj/item/device/retail_scanner/security, //CHOMPStation addition + /obj/item/clothing/glasses/hud/security, //CHOMPStation addition + /obj/item/device/ticket_printer, //CHOMPStation addition + /obj/item/clothing/accessory/bodycam // CHOMPEdit + + ) + +/obj/structure/closet/secure_closet/security/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec + if(prob(30)) + starts_with += /obj/item/poster/nanotrasen + return ..() + +/obj/structure/closet/secure_closet/security/cargo/Initialize() + starts_with += /obj/item/clothing/accessory/armband/cargo + starts_with += /obj/item/device/encryptionkey/headset_cargo + return ..() + +/obj/structure/closet/secure_closet/security/engine/Initialize() + starts_with += /obj/item/clothing/accessory/armband/engine + starts_with += /obj/item/device/encryptionkey/headset_eng + return ..() + +/obj/structure/closet/secure_closet/security/science/Initialize() + starts_with += /obj/item/clothing/accessory/armband/science + starts_with += /obj/item/device/encryptionkey/headset_sci + return ..() + +/obj/structure/closet/secure_closet/security/med/Initialize() + starts_with += /obj/item/clothing/accessory/armband/medblue + starts_with += /obj/item/device/encryptionkey/headset_med + return ..() + + +/obj/structure/closet/secure_closet/detective + name = "detective's cabinet" + req_access = list(access_forensics_lockers) + closet_appearance = /decl/closet_appearance/cabinet/secure + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + + starts_with = list( + /obj/item/clothing/accessory/badge/holo/detective, + /obj/item/clothing/gloves/forensic, //CHOMP Edit replaces black gloves + /obj/item/gunbox, //CHOMP Edit undoes vorestation removal and adds back gunbox + /obj/item/gunbox/stun, + /obj/item/weapon/storage/belt/detective, + /obj/item/weapon/storage/box/evidence, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/clothing/suit/storage/vest/detective, + /obj/item/taperoll/police, + /obj/item/clothing/accessory/holster/armpit, + /obj/item/device/flashlight/maglight, + /obj/item/weapon/reagent_containers/food/drinks/flask/detflask, + /obj/item/weapon/storage/briefcase/crimekit, + /obj/item/device/taperecorder, + /obj/item/weapon/storage/bag/detective, + /obj/item/device/tape/random = 3, + /obj/item/device/retail_scanner/security, //CHOMPStation addition + /obj/item/clothing/glasses/hud/security //CHOMPStation addition + ) + +/obj/structure/closet/secure_closet/injection + name = "lethal injections locker" + req_access = list(access_captain) + closet_appearance = /decl/closet_appearance/secure_closet/courtroom + + starts_with = list( + /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral = 2) + +GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/brig) + +/obj/structure/closet/secure_closet/brig + name = "brig locker" + req_access = list(access_brig) + closet_appearance = /decl/closet_appearance/secure_closet/brig + anchored = TRUE + var/id = null + + starts_with = list( + /obj/item/clothing/under/color/prison, + /obj/item/clothing/shoes/orange) + +/obj/structure/closet/secure_closet/posters + name = "morale storage" + req_access = list(access_security) + anchored = TRUE + + starts_with = list( + /obj/item/poster/nanotrasen, + /obj/item/poster/nanotrasen, + /obj/item/poster/nanotrasen, + /obj/item/poster/nanotrasen, + /obj/item/poster/nanotrasen) + +/obj/structure/closet/secure_closet/courtroom + name = "courtroom locker" + req_access = list(access_lawyer) + closet_appearance = /decl/closet_appearance/secure_closet/courtroom + + starts_with = list( + /obj/item/clothing/shoes/brown, + /obj/item/weapon/paper/Court = 3, + /obj/item/weapon/pen, + /obj/item/clothing/suit/judgerobe, + /obj/item/clothing/head/powdered_wig, + /obj/item/weapon/storage/briefcase) + + +/obj/structure/closet/secure_closet/wall + name = "wall locker" + req_access = list(access_security) + closet_appearance = /decl/closet_appearance/wall + density = TRUE + + //too small to put a man in + large = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 9b66918be0..7b29053456 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -1,132 +1,132 @@ -/obj/structure/closet/statue - name = "statue" - desc = "An incredibly lifelike marble carving" - icon = 'icons/obj/statue.dmi' - icon_state = "human_male" - density = TRUE - anchored = TRUE - health = 0 //destroying the statue kills the mob within - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock - var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. - var/intialBrute = 0 - var/intialOxy = 0 - var/timer = 240 //eventually the person will be freed - -/obj/structure/closet/statue/New(loc, var/mob/living/L) - if(L && (ishuman(L) || L.isMonkey() || iscorgi(L))) - if(L.buckled) - L.buckled = 0 - L.anchored = FALSE - if(L.client) - L.client.perspective = EYE_PERSPECTIVE - L.client.eye = src - L.loc = src - L.sdisabilities |= MUTE - health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues - intialTox = L.getToxLoss() - intialFire = L.getFireLoss() - intialBrute = L.getBruteLoss() - intialOxy = L.getOxyLoss() - if(ishuman(L)) - name = "statue of [L.name]" - if(L.gender == "female") - icon_state = "human_female" - else if(L.isMonkey()) - name = "statue of a monkey" - icon_state = "monkey" - else if(iscorgi(L)) - name = "statue of a corgi" - icon_state = "corgi" - desc = "If it takes forever, I will wait for you..." - - if(health == 0) //meaning if the statue didn't find a valid target - qdel(src) - return - - START_PROCESSING(SSobj, src) - ..() - -/obj/structure/closet/statue/process() - timer-- - for(var/mob/living/M in src) //Go-go gadget stasis field - M.setToxLoss(intialTox) - M.adjustFireLoss(intialFire - M.getFireLoss()) - M.adjustBruteLoss(intialBrute - M.getBruteLoss()) - M.setOxyLoss(intialOxy) - if (timer <= 0) - dump_contents() - STOP_PROCESSING(SSobj, src) - qdel(src) - -/obj/structure/closet/statue/dump_contents() - - for(var/obj/O in src) - O.loc = src.loc - - for(var/mob/living/M in src) - M.loc = src.loc - M.sdisabilities &= ~MUTE - M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - -/obj/structure/closet/statue/open() - return - -/obj/structure/closet/statue/close() - return - -/obj/structure/closet/statue/toggle() - return - -/obj/structure/closet/statue/proc/check_health() - if(health <= 0) - for(var/mob/M in src) - shatter(M) - -/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() - check_health() - - return - -/obj/structure/closet/statue/attack_generic(var/mob/user, damage, attacktext, environment_smash) - if(damage && environment_smash) - for(var/mob/M in src) - shatter(M) - -/obj/structure/closet/statue/ex_act(severity) - for(var/mob/M in src) - M.ex_act(severity) - health -= 60 / severity - check_health() - -/obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob) - health -= I.force - user.do_attack_animation(src) - visible_message("[user] strikes [src] with [I].") - check_health() - -/obj/structure/closet/statue/MouseDrop_T() - return - -/obj/structure/closet/statue/relaymove() - return - -/obj/structure/closet/statue/attack_hand() - return - -/obj/structure/closet/statue/verb_toggleopen() - return - -/obj/structure/closet/statue/update_icon() - return - -/obj/structure/closet/statue/proc/shatter(mob/user as mob) - if (user) - user.dust() - dump_contents() - visible_message("[src] shatters!.") - qdel(src) +/obj/structure/closet/statue + name = "statue" + desc = "An incredibly lifelike marble carving" + icon = 'icons/obj/statue.dmi' + icon_state = "human_male" + density = TRUE + anchored = TRUE + health = 0 //destroying the statue kills the mob within + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock + var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. + var/intialBrute = 0 + var/intialOxy = 0 + var/timer = 240 //eventually the person will be freed + +/obj/structure/closet/statue/New(loc, var/mob/living/L) + if(L && (ishuman(L) || L.isMonkey() || iscorgi(L))) + if(L.buckled) + L.buckled = 0 + L.anchored = FALSE + if(L.client) + L.client.perspective = EYE_PERSPECTIVE + L.client.eye = src + L.loc = src + L.sdisabilities |= MUTE + health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues + intialTox = L.getToxLoss() + intialFire = L.getFireLoss() + intialBrute = L.getBruteLoss() + intialOxy = L.getOxyLoss() + if(ishuman(L)) + name = "statue of [L.name]" + if(L.gender == "female") + icon_state = "human_female" + else if(L.isMonkey()) + name = "statue of a monkey" + icon_state = "monkey" + else if(iscorgi(L)) + name = "statue of a corgi" + icon_state = "corgi" + desc = "If it takes forever, I will wait for you..." + + if(health == 0) //meaning if the statue didn't find a valid target + qdel(src) + return + + START_PROCESSING(SSobj, src) + ..() + +/obj/structure/closet/statue/process() + timer-- + for(var/mob/living/M in src) //Go-go gadget stasis field + M.setToxLoss(intialTox) + M.adjustFireLoss(intialFire - M.getFireLoss()) + M.adjustBruteLoss(intialBrute - M.getBruteLoss()) + M.setOxyLoss(intialOxy) + if (timer <= 0) + dump_contents() + STOP_PROCESSING(SSobj, src) + qdel(src) + +/obj/structure/closet/statue/dump_contents() + + for(var/obj/O in src) + O.loc = src.loc + + for(var/mob/living/M in src) + M.loc = src.loc + M.sdisabilities &= ~MUTE + M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob + if(M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + +/obj/structure/closet/statue/open() + return + +/obj/structure/closet/statue/close() + return + +/obj/structure/closet/statue/toggle() + return + +/obj/structure/closet/statue/proc/check_health() + if(health <= 0) + for(var/mob/M in src) + shatter(M) + +/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.get_structure_damage() + check_health() + + return + +/obj/structure/closet/statue/attack_generic(var/mob/user, damage, attacktext, environment_smash) + if(damage && environment_smash) + for(var/mob/M in src) + shatter(M) + +/obj/structure/closet/statue/ex_act(severity) + for(var/mob/M in src) + M.ex_act(severity) + health -= 60 / severity + check_health() + +/obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob) + health -= I.force + user.do_attack_animation(src) + visible_message("[user] strikes [src] with [I].") + check_health() + +/obj/structure/closet/statue/MouseDrop_T() + return + +/obj/structure/closet/statue/relaymove() + return + +/obj/structure/closet/statue/attack_hand() + return + +/obj/structure/closet/statue/verb_toggleopen() + return + +/obj/structure/closet/statue/update_icon() + return + +/obj/structure/closet/statue/proc/shatter(mob/user as mob) + if (user) + user.dust() + dump_contents() + visible_message("[src] shatters!.") + qdel(src) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 824da68846..51d15feb1b 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -1,121 +1,121 @@ -/obj/structure/closet/syndicate - name = "armory closet" - desc = "Why is this here?" - closet_appearance = /decl/closet_appearance/tactical/alt - -/obj/structure/closet/syndicate/personal - desc = "It's a storage unit for operative gear." - - starts_with = list( - /obj/item/weapon/tank/jetpack/oxygen, - /obj/item/clothing/mask/gas/syndicate, - /obj/item/clothing/under/syndicate, - /obj/item/clothing/head/helmet/space/void/merc, - /obj/item/clothing/suit/space/void/merc, - /obj/item/weapon/tool/crowbar/red, - /obj/item/weapon/cell/high, - /obj/item/weapon/card/id/syndicate, - /obj/item/device/multitool, - /obj/item/weapon/shield/energy, - /obj/item/clothing/shoes/magboots) - - -/obj/structure/closet/syndicate/suit - desc = "It's a storage unit for voidsuits." - - starts_with = list( - /obj/item/weapon/tank/jetpack/oxygen, - /obj/item/clothing/shoes/magboots, - /obj/item/clothing/suit/space/void/merc, - /obj/item/clothing/mask/gas/syndicate, - /obj/item/clothing/head/helmet/space/void/merc) - - -/obj/structure/closet/syndicate/nuclear - desc = "It's a storage unit for nuclear-operative gear." - - starts_with = list( - /obj/item/ammo_magazine/m10mm = 5, - /obj/item/weapon/storage/box/handcuffs, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/gun/energy/gun = 5, - /obj/item/weapon/pinpointer/nukeop = 5, - /obj/item/device/pda/syndicate, - /obj/item/device/radio/uplink) - -/obj/structure/closet/syndicate/resources - desc = "An old, dusty locker." - -/obj/structure/closet/syndicate/resources/Initialize() - . = ..() - if(!contents.len) - 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/weapon/paper/P = new /obj/item/weapon/paper(src) - P.name = "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/material/steel(src, rand(common_min, common_max)) - - //Glass (common ore) - if(pickednum >= 5) - new /obj/item/stack/material/glass(src, rand(common_min, common_max)) - - //Plasteel (common ore) Because it has a million more uses then phoron - if(pickednum >= 10) - new /obj/item/stack/material/plasteel(src, rand(common_min, common_max)) - - //Phoron (rare ore) - if(pickednum >= 15) - new /obj/item/stack/material/phoron(src, rand(rare_min, rare_max)) - - //Silver (rare ore) - if(pickednum >= 20) - new /obj/item/stack/material/silver(src, rand(rare_min, rare_max)) - - //Gold (rare ore) - if(pickednum >= 30) - new /obj/item/stack/material/gold(src, rand(rare_min, rare_max)) - - //Uranium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/material/uranium(src, rand(rare_min, rare_max)) - - //Diamond (rare HONK) - if(pickednum >= 45) - new /obj/item/stack/material/diamond(src, rand(rare_min, rare_max)) - - //Jetpack (You hit the jackpot!) - if(pickednum == 50) - new /obj/item/weapon/tank/jetpack/carbondioxide(src) - -/obj/structure/closet/syndicate/resources/everything - desc = "It's an emergency storage closet for repairs." - -/obj/structure/closet/syndicate/resources/everything/Initialize() - var/list/resources = list( - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/stack/material/gold, - /obj/item/stack/material/silver, - /obj/item/stack/material/phoron, - /obj/item/stack/material/uranium, - /obj/item/stack/material/diamond, - /obj/item/stack/material/plasteel, - /obj/item/stack/rods - ) - - for(var/i = 0, i<2, i++) - for(var/res in resources) - new res(src, -1) - - return ..() +/obj/structure/closet/syndicate + name = "armory closet" + desc = "Why is this here?" + closet_appearance = /decl/closet_appearance/tactical/alt + +/obj/structure/closet/syndicate/personal + desc = "It's a storage unit for operative gear." + + starts_with = list( + /obj/item/weapon/tank/jetpack/oxygen, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/clothing/under/syndicate, + /obj/item/clothing/head/helmet/space/void/merc, + /obj/item/clothing/suit/space/void/merc, + /obj/item/weapon/tool/crowbar/red, + /obj/item/weapon/cell/high, + /obj/item/weapon/card/id/syndicate, + /obj/item/device/multitool, + /obj/item/weapon/shield/energy, + /obj/item/clothing/shoes/magboots) + + +/obj/structure/closet/syndicate/suit + desc = "It's a storage unit for voidsuits." + + starts_with = list( + /obj/item/weapon/tank/jetpack/oxygen, + /obj/item/clothing/shoes/magboots, + /obj/item/clothing/suit/space/void/merc, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/clothing/head/helmet/space/void/merc) + + +/obj/structure/closet/syndicate/nuclear + desc = "It's a storage unit for nuclear-operative gear." + + starts_with = list( + /obj/item/ammo_magazine/m10mm = 5, + /obj/item/weapon/storage/box/handcuffs, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/gun/energy/gun = 5, + /obj/item/weapon/pinpointer/nukeop = 5, + /obj/item/device/pda/syndicate, + /obj/item/device/radio/uplink) + +/obj/structure/closet/syndicate/resources + desc = "An old, dusty locker." + +/obj/structure/closet/syndicate/resources/Initialize() + . = ..() + if(!contents.len) + 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/weapon/paper/P = new /obj/item/weapon/paper(src) + P.name = "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/material/steel(src, rand(common_min, common_max)) + + //Glass (common ore) + if(pickednum >= 5) + new /obj/item/stack/material/glass(src, rand(common_min, common_max)) + + //Plasteel (common ore) Because it has a million more uses then phoron + if(pickednum >= 10) + new /obj/item/stack/material/plasteel(src, rand(common_min, common_max)) + + //Phoron (rare ore) + if(pickednum >= 15) + new /obj/item/stack/material/phoron(src, rand(rare_min, rare_max)) + + //Silver (rare ore) + if(pickednum >= 20) + new /obj/item/stack/material/silver(src, rand(rare_min, rare_max)) + + //Gold (rare ore) + if(pickednum >= 30) + new /obj/item/stack/material/gold(src, rand(rare_min, rare_max)) + + //Uranium (rare ore) + if(pickednum >= 40) + new /obj/item/stack/material/uranium(src, rand(rare_min, rare_max)) + + //Diamond (rare HONK) + if(pickednum >= 45) + new /obj/item/stack/material/diamond(src, rand(rare_min, rare_max)) + + //Jetpack (You hit the jackpot!) + if(pickednum == 50) + new /obj/item/weapon/tank/jetpack/carbondioxide(src) + +/obj/structure/closet/syndicate/resources/everything + desc = "It's an emergency storage closet for repairs." + +/obj/structure/closet/syndicate/resources/everything/Initialize() + var/list/resources = list( + /obj/item/stack/material/steel, + /obj/item/stack/material/glass, + /obj/item/stack/material/gold, + /obj/item/stack/material/silver, + /obj/item/stack/material/phoron, + /obj/item/stack/material/uranium, + /obj/item/stack/material/diamond, + /obj/item/stack/material/plasteel, + /obj/item/stack/rods + ) + + for(var/i = 0, i<2, i++) + for(var/res in resources) + new res(src, -1) + + return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index a0dee0cfce..55b871a03c 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -1,236 +1,236 @@ -/* 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 = "It's a storage unit for emergency breathmasks and O2 tanks." - closet_appearance = /decl/closet_appearance/oxygen - -/obj/structure/closet/emcloset/Initialize() - switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10))) - //CHOMPEdit Block Start - Modified List - if ("small") - starts_with = list( - /obj/item/weapon/storage/toolbox/emergency, - /obj/item/weapon/tank/emergency/oxygen = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/suit/space/emergency = 2, - /obj/item/clothing/head/helmet/space/emergency = 2, - /obj/item/device/suit_cooling_unit/emergency = 2) - if ("aid") - starts_with = list( - /obj/item/weapon/storage/toolbox/emergency, - /obj/item/weapon/storage/firstaid/o2, - /obj/item/weapon/tank/emergency/oxygen/engi = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/suit/space/emergency = 2, - /obj/item/clothing/head/helmet/space/emergency = 2, - /obj/item/device/suit_cooling_unit/emergency = 2) - if ("tank") - starts_with = list( - /obj/item/weapon/storage/toolbox/emergency, - /obj/item/weapon/tank/emergency/oxygen/double = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/suit/space/emergency = 2, - /obj/item/clothing/head/helmet/space/emergency = 2, - /obj/item/device/suit_cooling_unit = 2) - if ("both") - starts_with = list( - /obj/item/weapon/storage/toolbox/emergency, - /obj/item/weapon/storage/firstaid/o2, - /obj/item/weapon/tank/emergency/oxygen/double = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/clothing/suit/space/emergency = 2, - /obj/item/clothing/head/helmet/space/emergency = 2, - /obj/item/device/suit_cooling_unit = 2) - //CHOMPEdit Block End - - return ..() - -/obj/structure/closet/emcloset/legacy - starts_with = list( - /obj/item/weapon/tank/oxygen, - /obj/item/clothing/mask/gas) - -/* - * Fire Closet - */ -/obj/structure/closet/firecloset - name = "fire-safety closet" - desc = "It's a storage unit for fire-fighting supplies." - closet_appearance = /decl/closet_appearance/oxygen/fire - - starts_with = list( - /obj/item/clothing/suit/fire, - /obj/item/clothing/mask/gas, - /obj/item/weapon/tank/oxygen/red, - /obj/item/weapon/extinguisher, - /obj/item/clothing/head/hardhat/red) - -/obj/structure/closet/firecloset/full - starts_with = list( - /obj/item/clothing/suit/fire, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight, - /obj/item/weapon/tank/oxygen/red, - /obj/item/weapon/extinguisher, - /obj/item/clothing/head/hardhat/red) - -/obj/structure/closet/firecloset/full/double - starts_with = list( - /obj/item/clothing/suit/fire = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/device/flashlight = 2, - /obj/item/weapon/tank/oxygen/red = 2, - /obj/item/weapon/extinguisher = 2, - /obj/item/clothing/head/hardhat/red = 2) - -/obj/structure/closet/firecloset/full/atmos - name = "atmos fire-safety closet" - desc = "It's a storage unit for atmospheric fire-fighting supplies." - closet_appearance = /decl/closet_appearance/oxygen/fire/atmos - - starts_with = list( - /obj/item/clothing/suit/fire/heavy, - /obj/item/weapon/tank/oxygen/red, - /obj/item/weapon/extinguisher/atmo, - /obj/item/device/flashlight, - /obj/item/clothing/head/hardhat/firefighter/atmos) - -/* - * Tool Closet - */ -/obj/structure/closet/toolcloset - name = "tool closet" - desc = "It's a storage unit for tools." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools - -/obj/structure/closet/toolcloset/Initialize() - starts_with = list() - if(prob(40)) - starts_with += /obj/item/clothing/suit/storage/hazardvest - if(prob(70)) - starts_with += /obj/item/device/flashlight - if(prob(70)) - starts_with += /obj/item/weapon/tool/screwdriver - if(prob(70)) - starts_with += /obj/item/weapon/tool/wrench - if(prob(70)) - starts_with += /obj/item/weapon/weldingtool - if(prob(70)) - starts_with += /obj/item/weapon/tool/crowbar - if(prob(70)) - starts_with += /obj/item/weapon/tool/wirecutters - if(prob(70)) - starts_with += /obj/item/device/t_scanner - if(prob(20)) - starts_with += /obj/item/weapon/storage/belt/utility - if(prob(30)) - starts_with += /obj/item/stack/cable_coil/random - if(prob(30)) - starts_with += /obj/item/stack/cable_coil/random - if(prob(30)) - starts_with += /obj/item/stack/cable_coil/random - if(prob(20)) - starts_with += /obj/item/device/multitool - if(prob(5)) - starts_with += /obj/item/clothing/gloves/yellow - if(prob(40)) - starts_with += /obj/item/clothing/head/hardhat - if(prob(30)) - starts_with += /obj/item/weapon/reagent_containers/spray/windowsealant //VOREStation Add - return ..() - -/* - * Radiation Closet - */ -/obj/structure/closet/radiation - name = "radiation suit closet" - desc = "It's a storage unit for rad-protective suits." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/radiation - - starts_with = list( - /obj/item/clothing/suit/radiation = 2, - /obj/item/clothing/head/radiation = 2, - /obj/item/device/geiger = 2) - -/* - * Bombsuit closet - */ -/obj/structure/closet/bombcloset - name = "\improper EOD closet" - desc = "It's a storage unit for explosion-protective suits." - closet_appearance = /decl/closet_appearance/bomb - - starts_with = list( - /obj/item/clothing/suit/bomb_suit, - /obj/item/clothing/under/color/black, - /obj/item/clothing/shoes/black, - /obj/item/clothing/head/bomb_hood) - -/obj/structure/closet/bombcloset/double - starts_with = list( - /obj/item/clothing/suit/bomb_suit = 2, - /obj/item/clothing/under/color/black = 2, - /obj/item/clothing/shoes/black = 2, - /obj/item/clothing/head/bomb_hood = 2) - -/obj/structure/closet/bombclosetsecurity - name = "\improper EOD closet" - desc = "It's a storage unit for explosion-protective suits." - closet_appearance = /decl/closet_appearance/bomb/security - - starts_with = list( - /obj/item/clothing/suit/bomb_suit/security, - /obj/item/clothing/under/rank/security, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/head/bomb_hood/security) - -/* - * Hydrant - */ -/obj/structure/closet/hydrant //wall mounted fire closet - name = "fire-safety closet" - desc = "It's a storage unit for fire-fighting supplies." - icon = 'icons/obj/closets/bases/wall.dmi' - closet_appearance = /decl/closet_appearance/wall/hydrant - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - anchored = TRUE - density = FALSE - wall_mounted = 1 - store_mobs = 0 - - starts_with = list( - /obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight, - /obj/item/weapon/tank/oxygen/red, - /obj/item/weapon/extinguisher, - /obj/item/clothing/head/hardhat/red) - -/* - * First Aid - */ -/obj/structure/closet/medical_wall //wall mounted medical closet - name = "first-aid closet" - desc = "It's wall-mounted storage unit for first aid supplies." - icon = 'icons/obj/closets/bases/wall.dmi' - closet_appearance = /decl/closet_appearance/wall/medical - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - anchored = TRUE - density = FALSE - wall_mounted = 1 - store_mobs = 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 = "It's a storage unit for emergency breathmasks and O2 tanks." + closet_appearance = /decl/closet_appearance/oxygen + +/obj/structure/closet/emcloset/Initialize() + switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10))) + //CHOMPEdit Block Start - Modified List + if ("small") + starts_with = list( + /obj/item/weapon/storage/toolbox/emergency, + /obj/item/weapon/tank/emergency/oxygen = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/suit/space/emergency = 2, + /obj/item/clothing/head/helmet/space/emergency = 2, + /obj/item/device/suit_cooling_unit/emergency = 2) + if ("aid") + starts_with = list( + /obj/item/weapon/storage/toolbox/emergency, + /obj/item/weapon/storage/firstaid/o2, + /obj/item/weapon/tank/emergency/oxygen/engi = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/suit/space/emergency = 2, + /obj/item/clothing/head/helmet/space/emergency = 2, + /obj/item/device/suit_cooling_unit/emergency = 2) + if ("tank") + starts_with = list( + /obj/item/weapon/storage/toolbox/emergency, + /obj/item/weapon/tank/emergency/oxygen/double = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/suit/space/emergency = 2, + /obj/item/clothing/head/helmet/space/emergency = 2, + /obj/item/device/suit_cooling_unit = 2) + if ("both") + starts_with = list( + /obj/item/weapon/storage/toolbox/emergency, + /obj/item/weapon/storage/firstaid/o2, + /obj/item/weapon/tank/emergency/oxygen/double = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/clothing/suit/space/emergency = 2, + /obj/item/clothing/head/helmet/space/emergency = 2, + /obj/item/device/suit_cooling_unit = 2) + //CHOMPEdit Block End + + return ..() + +/obj/structure/closet/emcloset/legacy + starts_with = list( + /obj/item/weapon/tank/oxygen, + /obj/item/clothing/mask/gas) + +/* + * Fire Closet + */ +/obj/structure/closet/firecloset + name = "fire-safety closet" + desc = "It's a storage unit for fire-fighting supplies." + closet_appearance = /decl/closet_appearance/oxygen/fire + + starts_with = list( + /obj/item/clothing/suit/fire, + /obj/item/clothing/mask/gas, + /obj/item/weapon/tank/oxygen/red, + /obj/item/weapon/extinguisher, + /obj/item/clothing/head/hardhat/red) + +/obj/structure/closet/firecloset/full + starts_with = list( + /obj/item/clothing/suit/fire, + /obj/item/clothing/mask/gas, + /obj/item/device/flashlight, + /obj/item/weapon/tank/oxygen/red, + /obj/item/weapon/extinguisher, + /obj/item/clothing/head/hardhat/red) + +/obj/structure/closet/firecloset/full/double + starts_with = list( + /obj/item/clothing/suit/fire = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/device/flashlight = 2, + /obj/item/weapon/tank/oxygen/red = 2, + /obj/item/weapon/extinguisher = 2, + /obj/item/clothing/head/hardhat/red = 2) + +/obj/structure/closet/firecloset/full/atmos + name = "atmos fire-safety closet" + desc = "It's a storage unit for atmospheric fire-fighting supplies." + closet_appearance = /decl/closet_appearance/oxygen/fire/atmos + + starts_with = list( + /obj/item/clothing/suit/fire/heavy, + /obj/item/weapon/tank/oxygen/red, + /obj/item/weapon/extinguisher/atmo, + /obj/item/device/flashlight, + /obj/item/clothing/head/hardhat/firefighter/atmos) + +/* + * Tool Closet + */ +/obj/structure/closet/toolcloset + name = "tool closet" + desc = "It's a storage unit for tools." + closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools + +/obj/structure/closet/toolcloset/Initialize() + starts_with = list() + if(prob(40)) + starts_with += /obj/item/clothing/suit/storage/hazardvest + if(prob(70)) + starts_with += /obj/item/device/flashlight + if(prob(70)) + starts_with += /obj/item/weapon/tool/screwdriver + if(prob(70)) + starts_with += /obj/item/weapon/tool/wrench + if(prob(70)) + starts_with += /obj/item/weapon/weldingtool + if(prob(70)) + starts_with += /obj/item/weapon/tool/crowbar + if(prob(70)) + starts_with += /obj/item/weapon/tool/wirecutters + if(prob(70)) + starts_with += /obj/item/device/t_scanner + if(prob(20)) + starts_with += /obj/item/weapon/storage/belt/utility + if(prob(30)) + starts_with += /obj/item/stack/cable_coil/random + if(prob(30)) + starts_with += /obj/item/stack/cable_coil/random + if(prob(30)) + starts_with += /obj/item/stack/cable_coil/random + if(prob(20)) + starts_with += /obj/item/device/multitool + if(prob(5)) + starts_with += /obj/item/clothing/gloves/yellow + if(prob(40)) + starts_with += /obj/item/clothing/head/hardhat + if(prob(30)) + starts_with += /obj/item/weapon/reagent_containers/spray/windowsealant //VOREStation Add + return ..() + +/* + * Radiation Closet + */ +/obj/structure/closet/radiation + name = "radiation suit closet" + desc = "It's a storage unit for rad-protective suits." + closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/radiation + + starts_with = list( + /obj/item/clothing/suit/radiation = 2, + /obj/item/clothing/head/radiation = 2, + /obj/item/device/geiger = 2) + +/* + * Bombsuit closet + */ +/obj/structure/closet/bombcloset + name = "\improper EOD closet" + desc = "It's a storage unit for explosion-protective suits." + closet_appearance = /decl/closet_appearance/bomb + + starts_with = list( + /obj/item/clothing/suit/bomb_suit, + /obj/item/clothing/under/color/black, + /obj/item/clothing/shoes/black, + /obj/item/clothing/head/bomb_hood) + +/obj/structure/closet/bombcloset/double + starts_with = list( + /obj/item/clothing/suit/bomb_suit = 2, + /obj/item/clothing/under/color/black = 2, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/head/bomb_hood = 2) + +/obj/structure/closet/bombclosetsecurity + name = "\improper EOD closet" + desc = "It's a storage unit for explosion-protective suits." + closet_appearance = /decl/closet_appearance/bomb/security + + starts_with = list( + /obj/item/clothing/suit/bomb_suit/security, + /obj/item/clothing/under/rank/security, + /obj/item/clothing/shoes/brown, + /obj/item/clothing/head/bomb_hood/security) + +/* + * Hydrant + */ +/obj/structure/closet/hydrant //wall mounted fire closet + name = "fire-safety closet" + desc = "It's a storage unit for fire-fighting supplies." + icon = 'icons/obj/closets/bases/wall.dmi' + closet_appearance = /decl/closet_appearance/wall/hydrant + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + anchored = TRUE + density = FALSE + wall_mounted = 1 + store_mobs = 0 + + starts_with = list( + /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/mask/gas, + /obj/item/device/flashlight, + /obj/item/weapon/tank/oxygen/red, + /obj/item/weapon/extinguisher, + /obj/item/clothing/head/hardhat/red) + +/* + * First Aid + */ +/obj/structure/closet/medical_wall //wall mounted medical closet + name = "first-aid closet" + desc = "It's wall-mounted storage unit for first aid supplies." + icon = 'icons/obj/closets/bases/wall.dmi' + closet_appearance = /decl/closet_appearance/wall/medical + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + anchored = TRUE + density = FALSE + wall_mounted = 1 + store_mobs = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets_vr.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets_vr.dm index c126b965f3..1f84876222 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets_vr.dm @@ -1,7 +1,7 @@ -/obj/structure/closet/firecloset/Initialize() - starts_with += /obj/item/weapon/storage/toolbox/emergency - return ..() - -/obj/structure/closet/hydrant/New() - starts_with += /obj/item/weapon/storage/toolbox/emergency - return ..() +/obj/structure/closet/firecloset/Initialize() + starts_with += /obj/item/weapon/storage/toolbox/emergency + return ..() + +/obj/structure/closet/hydrant/New() + starts_with += /obj/item/weapon/storage/toolbox/emergency + return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 4e0db3d791..f2435d4e85 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -1,498 +1,498 @@ -/obj/structure/closet/wardrobe - name = "wardrobe" - desc = "It's a storage unit for standard-issue attire." - closet_appearance = /decl/closet_appearance/wardrobe - -/obj/structure/closet/wardrobe/red - name = "security wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/red - - starts_with = list( - /obj/item/clothing/under/rank/security = 3, - /obj/item/clothing/under/rank/security2 = 3, - /obj/item/clothing/under/rank/security/turtleneck = 3, - /obj/item/clothing/under/rank/security/skirt = 2, - /obj/item/clothing/shoes/boots/jackboots = 3, - /obj/item/clothing/head/soft/sec = 3, - /obj/item/clothing/head/beret/sec = 3, - /obj/item/clothing/head/beret/sec/corporate/officer = 3, - /obj/item/clothing/mask/bandana/red = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3, - /obj/item/clothing/accessory/armband = 3, - /obj/item/clothing/accessory/holster/waist = 3) - -/obj/structure/closet/wardrobe/red/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/security - else - starts_with += /obj/item/weapon/storage/backpack/satchel/sec - - return ..() - -/obj/structure/closet/wardrobe/detective - name = "detective wardrobe" - closet_appearance = /decl/closet_appearance/cabinet - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - - starts_with = list( - /obj/item/clothing/head/det = 2, - /obj/item/clothing/head/det/grey = 2, - /obj/item/clothing/shoes/brown = 2, - /obj/item/clothing/shoes/laceup = 2, - /obj/item/clothing/under/det = 2, - /obj/item/clothing/under/det/waistcoat = 2, - /obj/item/clothing/under/det/grey = 2, - /obj/item/clothing/under/det/grey/waistcoat = 2, - /obj/item/clothing/under/det/black = 2, - /obj/item/clothing/under/det/skirt, - /obj/item/clothing/under/det/corporate = 2, - /obj/item/clothing/suit/storage/det_trench = 2, - /obj/item/clothing/suit/storage/det_trench/grey = 2, - /obj/item/clothing/suit/storage/forensics/blue = 2, - /obj/item/clothing/suit/storage/forensics/red = 2, - /obj/item/clothing/gloves/forensic = 2) //CHOMP Addition - -/obj/structure/closet/wardrobe/pink - name = "pink wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/pink - - starts_with = list( - /obj/item/clothing/under/color/pink = 3, - /obj/item/clothing/shoes/brown = 3) - -/obj/structure/closet/wardrobe/black - name = "black wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/black - - starts_with = list( - /obj/item/clothing/under/color/black = 3, - /obj/item/clothing/shoes/black = 3, - /obj/item/clothing/head/that = 3, - /obj/item/clothing/head/soft/black = 3, - /obj/item/clothing/mask/bandana = 3, - /obj/item/weapon/storage/backpack/messenger/black) - - -/obj/structure/closet/wardrobe/chaplain_black - name = "chapel wardrobe" - desc = "It's a storage unit for approved religious attire." - closet_appearance = /decl/closet_appearance/wardrobe/chapel - - starts_with = list( - /obj/item/clothing/under/rank/chaplain, - /obj/item/clothing/shoes/black, - /obj/item/clothing/suit/nun, - /obj/item/clothing/head/nun_hood, - /obj/item/clothing/suit/storage/hooded/chaplain_hoodie, - /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout, - /obj/item/clothing/suit/holidaypriest, - /obj/item/clothing/under/wedding/bride_white, - /obj/item/weapon/storage/backpack/cultpack, - /obj/item/weapon/storage/fancy/candle_box = 2, - /obj/item/weapon/storage/fancy/whitecandle_box, - /obj/item/weapon/storage/fancy/blackcandle_box, - /obj/item/godfig = 2, - /obj/item/weapon/deck/tarot) - -/obj/structure/closet/wardrobe/monastary - name = "Monastary wardrobe" - desc = "It's a storage unit for approved religious attire." - closet_appearance = /decl/closet_appearance/wardrobe/black - - starts_with = list( - /obj/item/clothing/suit/unathi/mantle = 2, - /obj/item/clothing/suit/unathi/robe = 2, - /obj/item/clothing/shoes/sandal = 2, - /obj/item/clothing/shoes/footwraps = 2, - /obj/item/clothing/shoes/boots/winter = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat = 2) - - -/obj/structure/closet/wardrobe/green - name = "green wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/green - - starts_with = list( - /obj/item/clothing/under/color/green = 3, - /obj/item/clothing/shoes/green = 3, - /obj/item/clothing/head/soft/green = 3, - /obj/item/clothing/mask/bandana/green = 3) - -/obj/structure/closet/wardrobe/xenos - name = "xenos wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/xenos - - starts_with = list( - /obj/item/clothing/suit/unathi/mantle, - /obj/item/clothing/suit/unathi/robe, - /obj/item/clothing/shoes/sandal = 2, - /obj/item/clothing/shoes/footwraps = 2, - /obj/item/clothing/shoes/boots/winter = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat = 2) - - -/obj/structure/closet/wardrobe/orange - name = "prison wardrobe" - desc = "It's a storage unit for regulation prisoner attire." - closet_appearance = /decl/closet_appearance/wardrobe/orange - - starts_with = list( - /obj/item/clothing/under/color/prison = 3, - /obj/item/clothing/shoes/orange = 3) - - -/obj/structure/closet/wardrobe/yellow - name = "yellow wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/yellow - - starts_with = list( - /obj/item/clothing/under/color/yellow = 3, - /obj/item/clothing/shoes/yellow = 3, - /obj/item/clothing/head/soft/yellow = 3, - /obj/item/clothing/mask/bandana/gold = 3) - - -/obj/structure/closet/wardrobe/atmospherics_yellow - name = "atmospherics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/engineer/atmos - - starts_with = list( - /obj/item/clothing/under/rank/atmospheric_technician = 3, - /obj/item/clothing/under/rank/atmospheric_technician/skirt = 3, - /obj/item/clothing/shoes/black = 3, - /obj/item/clothing/head/hardhat/red = 3, - /obj/item/clothing/head/beret/engineering = 3, - /obj/item/clothing/mask/bandana/gold = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos = 3, - /obj/item/clothing/shoes/boots/winter/atmos = 3) - -/obj/structure/closet/wardrobe/engineering_yellow - name = "engineering wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/engineer - - starts_with = list( - /obj/item/clothing/under/rank/engineer = 3, - /obj/item/clothing/under/rank/engineer/skirt = 3, - /obj/item/clothing/under/rank/engineer/turtleneck = 3, - /obj/item/clothing/shoes/orange = 3, - /obj/item/clothing/head/hardhat = 3, - /obj/item/clothing/head/beret/engineering = 3, - /obj/item/clothing/mask/bandana/gold = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering = 3, - /obj/item/clothing/shoes/boots/winter/engineering = 3, - /obj/item/clothing/shoes/boots/workboots = 3) - - -/obj/structure/closet/wardrobe/white - name = "white wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - - starts_with = list( - /obj/item/clothing/under/color/white = 3, - /obj/item/clothing/shoes/white = 3, - /obj/item/clothing/head/soft/mime = 3) - - -/obj/structure/closet/wardrobe/pjs - name = "pajama wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/pjs - - starts_with = list( - /obj/item/clothing/under/pj/red = 2, - /obj/item/clothing/under/pj/blue = 2, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/shoes/slippers = 2) - - -/obj/structure/closet/wardrobe/science_white - name = "science wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/science - - starts_with = list( - /obj/item/clothing/under/rank/scientist = 3, - /obj/item/clothing/under/rank/scientist/skirt = 2, - /obj/item/clothing/under/rank/scientist/turtleneck = 3, - /obj/item/clothing/suit/storage/toggle/labcoat = 3, - /obj/item/clothing/suit/storage/toggle/labcoat/modern = 3, - /obj/item/clothing/shoes/white = 3, - /obj/item/clothing/shoes/slippers = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/science, - /obj/item/clothing/shoes/boots/winter/science, - /obj/item/weapon/storage/backpack/toxins, - /obj/item/weapon/storage/backpack/satchel/tox) - -/obj/structure/closet/wardrobe/science_white/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci - else - starts_with += /obj/item/weapon/storage/backpack/satchel/tox - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci - else - starts_with += /obj/item/weapon/storage/backpack/satchel/tox - - return ..() - - -/obj/structure/closet/wardrobe/robotics_black - name = "robotics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/robotics - - starts_with = list( - /obj/item/clothing/under/rank/roboticist = 2, - /obj/item/clothing/suit/storage/toggle/labcoat = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics, - /obj/item/clothing/shoes/black = 2, - /obj/item/clothing/gloves/black = 2, - /obj/item/weapon/storage/backpack/toxins, - /obj/item/weapon/storage/backpack/satchel/tox) - -/obj/structure/closet/wardrobe/robotics_black/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci - else - starts_with += /obj/item/weapon/storage/backpack/satchel/tox - - return ..() - - -/obj/structure/closet/wardrobe/chemistry_white - name = "chemistry wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/medical/chemistry - - starts_with = list( - /obj/item/clothing/under/rank/chemist = 2, - /obj/item/clothing/under/rank/chemist/skirt = 2, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/suit/storage/toggle/labcoat/chemist = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist, - /obj/item/weapon/storage/backpack/chemistry = 2, - /obj/item/weapon/storage/backpack/satchel/chem = 2, - /obj/item/weapon/storage/bag/chemistry = 2,) - - -/obj/structure/closet/wardrobe/genetics_white - name = "genetics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/medical/genetics - - starts_with = list( - /obj/item/clothing/under/rank/geneticist = 2, - /obj/item/clothing/under/rank/geneticist/skirt = 2, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/suit/storage/toggle/labcoat/genetics = 2, - /obj/item/weapon/storage/backpack/genetics = 2, - /obj/item/weapon/storage/backpack/satchel/gen = 2) - - -/obj/structure/closet/wardrobe/virology_white - name = "virology wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/medical/virology - - starts_with = list( - /obj/item/clothing/under/rank/virologist = 2, - /obj/item/clothing/under/rank/virologist/skirt = 2, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/suit/storage/toggle/labcoat/virologist = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro, - /obj/item/clothing/mask/surgical = 2, - /obj/item/weapon/storage/backpack/virology = 2, - /obj/item/weapon/storage/backpack/satchel/vir = 2) - - -/obj/structure/closet/wardrobe/medic_white - name = "medical wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/medical/white - - starts_with = list( - /obj/item/clothing/under/rank/medical = 2, - /obj/item/clothing/under/rank/medical/skirt = 2, - /obj/item/clothing/under/rank/medical/turtleneck = 2, - /obj/item/clothing/under/rank/medical/scrubs, - /obj/item/clothing/under/rank/medical/scrubs/green, - /obj/item/clothing/under/rank/medical/scrubs/purple, - /obj/item/clothing/under/rank/medical/scrubs/black, - /obj/item/clothing/under/rank/medical/scrubs/navyblue, - /obj/item/clothing/head/surgery/navyblue, - /obj/item/clothing/head/surgery/purple, - /obj/item/clothing/head/surgery/blue, - /obj/item/clothing/head/surgery/green, - /obj/item/clothing/head/surgery/black, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/suit/storage/toggle/labcoat = 2, - /obj/item/clothing/mask/surgical = 2, - /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 2, - /obj/item/clothing/shoes/boots/winter/medical = 2) - - -/obj/structure/closet/wardrobe/medic_gown - name = "cloning wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/medical/patient - - starts_with = list( - /obj/item/clothing/under/medigown = 4) - - -/obj/structure/closet/wardrobe/grey - name = "grey wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/grey - - starts_with = list( - /obj/item/clothing/under/color/grey = 3, - /obj/item/clothing/shoes/black = 3, - /obj/item/clothing/head/soft/grey = 3) - - -/obj/structure/closet/wardrobe/mixed - name = "mixed wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/mixed - - starts_with = list( - /obj/item/clothing/under/color/blue, - /obj/item/clothing/under/color/yellow, - /obj/item/clothing/under/color/green, - /obj/item/clothing/under/color/pink, - /obj/item/clothing/under/skirt/outfit/plaid_blue, - /obj/item/clothing/under/skirt/outfit/plaid_red, - /obj/item/clothing/under/skirt/outfit/plaid_purple, - /obj/item/clothing/shoes/blue, - /obj/item/clothing/shoes/yellow, - /obj/item/clothing/shoes/green, - /obj/item/clothing/shoes/purple, - /obj/item/clothing/shoes/red, - /obj/item/clothing/shoes/laceup/brown, - /obj/item/clothing/under/pants/classicjeans, - /obj/item/clothing/under/pants/mustangjeans, - /obj/item/clothing/under/pants/blackjeans, - /obj/item/clothing/under/pants/youngfolksjeans, - /obj/item/clothing/under/pants/white, - /obj/item/clothing/under/pants/red, - /obj/item/clothing/under/pants/black, - /obj/item/clothing/under/pants/tan, - /obj/item/clothing/under/pants/track, - /obj/item/clothing/suit/storage/toggle/track, - /obj/item/clothing/under/pants, - /obj/item/clothing/under/pants/khaki, - /obj/item/clothing/mask/bandana/blue, - /obj/item/clothing/mask/bandana/blue, - /obj/item/clothing/accessory/hawaiian, - /obj/item/clothing/accessory/hawaiian/blue, - /obj/item/clothing/accessory/hawaiian/pink, - /obj/item/clothing/accessory/hawaiian/red, - /obj/item/clothing/accessory/hawaiian/yellow) - - -/obj/structure/closet/wardrobe/tactical - name = "tactical equipment" - closet_appearance = /decl/closet_appearance/tactical - - starts_with = list( - /obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/mask/balaclava, - /obj/item/clothing/glasses/sunglasses/sechud/tactical, - /obj/item/clothing/shoes/boots/jackboots, - /obj/item/clothing/gloves/black, - /obj/item/clothing/under/pants/camo) - -/obj/structure/closet/wardrobe/tactical/Initialize() - if(prob(25)) - starts_with += /obj/item/weapon/storage/belt/security/tactical/bandolier - else - starts_with += /obj/item/weapon/storage/belt/security/tactical - if(prob(10)) - starts_with += /obj/item/clothing/mask/bandana/skull - - return ..() - -/obj/structure/closet/wardrobe/ert - name = "emergency response team equipment" - closet_appearance = /decl/closet_appearance/ert - - starts_with = list( - /obj/item/clothing/under/rank/centcom, - /obj/item/clothing/under/ert, - /obj/item/clothing/under/syndicate/combat, - /obj/item/device/radio/headset/ert/alt, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/shoes/boots/swat, - /obj/item/clothing/gloves/swat, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/mask/balaclava, - /obj/item/clothing/mask/bandana/skull = 2, - /obj/item/clothing/mask/gas/sechailer/swat) - - -/obj/structure/closet/wardrobe/suit - name = "suit locker" - closet_appearance = /decl/closet_appearance/wardrobe/suit - - starts_with = list( - /obj/item/clothing/under/assistantformal, - /obj/item/clothing/under/suit_jacket/charcoal, - /obj/item/clothing/under/suit_jacket/charcoal/skirt, - /obj/item/clothing/under/suit_jacket/navy, - /obj/item/clothing/under/suit_jacket/navy/skirt, - /obj/item/clothing/under/suit_jacket/burgundy, - /obj/item/clothing/under/suit_jacket/burgundy/skirt, - /obj/item/clothing/under/suit_jacket/checkered, - /obj/item/clothing/under/suit_jacket/checkered/skirt, - /obj/item/clothing/under/suit_jacket/tan, - /obj/item/clothing/under/suit_jacket/tan/skirt, - /obj/item/clothing/under/sl_suit, - /obj/item/clothing/under/suit_jacket, - /obj/item/clothing/under/suit_jacket/female, - /obj/item/clothing/under/suit_jacket/female/skirt, - /obj/item/clothing/under/suit_jacket/really_black, - /obj/item/clothing/under/suit_jacket/really_black/skirt, - /obj/item/clothing/under/suit_jacket/red, - /obj/item/clothing/under/suit_jacket/red/skirt, - /obj/item/clothing/under/scratch, - /obj/item/clothing/under/scratch/skirt, - /obj/item/weapon/storage/backpack/satchel = 2) - -/obj/structure/closet/wardrobe/captain - name = "site manager's wardrobe" - closet_appearance = /decl/closet_appearance/cabinet - - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - - starts_with = list( - /obj/item/weapon/storage/backpack/captain, - /obj/item/clothing/suit/captunic, - /obj/item/clothing/suit/captunic/capjacket, - /obj/item/clothing/head/caphat/cap, - /obj/item/clothing/head/caphat/beret, - /obj/item/clothing/under/rank/captain, - /obj/item/clothing/under/dress/dress_cap/femformal, - /obj/item/clothing/under/rank/neo_captain_parade, - /obj/item/clothing/under/rank/neo_captain_skirt, - /obj/item/clothing/under/rank/neo_captain, - /obj/item/clothing/under/rank/neo_captain_kilt, - /obj/item/clothing/under/rank/neo_captain_blacksuit, - /obj/item/clothing/under/rank/neo_commandutil, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/gloves/captain, - /obj/item/clothing/under/dress/dress_cap, - /obj/item/weapon/storage/backpack/satchel/cap, - /obj/item/clothing/head/caphat/formal, - /obj/item/clothing/under/captainformal, - /obj/item/clothing/suit/storage/hooded/wintercoat/captain, - /obj/item/clothing/shoes/boots/winter/command, - /obj/item/clothing/head/beret/centcom/captain, - /obj/item/clothing/under/suit_jacket/green, - /obj/item/clothing/under/suit_jacket/green/skirt, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/head/caphat) +/obj/structure/closet/wardrobe + name = "wardrobe" + desc = "It's a storage unit for standard-issue attire." + closet_appearance = /decl/closet_appearance/wardrobe + +/obj/structure/closet/wardrobe/red + name = "security wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/red + + starts_with = list( + /obj/item/clothing/under/rank/security = 3, + /obj/item/clothing/under/rank/security2 = 3, + /obj/item/clothing/under/rank/security/turtleneck = 3, + /obj/item/clothing/under/rank/security/skirt = 2, + /obj/item/clothing/shoes/boots/jackboots = 3, + /obj/item/clothing/head/soft/sec = 3, + /obj/item/clothing/head/beret/sec = 3, + /obj/item/clothing/head/beret/sec/corporate/officer = 3, + /obj/item/clothing/mask/bandana/red = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3, + /obj/item/clothing/accessory/armband = 3, + /obj/item/clothing/accessory/holster/waist = 3) + +/obj/structure/closet/wardrobe/red/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/security + else + starts_with += /obj/item/weapon/storage/backpack/satchel/sec + + return ..() + +/obj/structure/closet/wardrobe/detective + name = "detective wardrobe" + closet_appearance = /decl/closet_appearance/cabinet + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + + starts_with = list( + /obj/item/clothing/head/det = 2, + /obj/item/clothing/head/det/grey = 2, + /obj/item/clothing/shoes/brown = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/under/det = 2, + /obj/item/clothing/under/det/waistcoat = 2, + /obj/item/clothing/under/det/grey = 2, + /obj/item/clothing/under/det/grey/waistcoat = 2, + /obj/item/clothing/under/det/black = 2, + /obj/item/clothing/under/det/skirt, + /obj/item/clothing/under/det/corporate = 2, + /obj/item/clothing/suit/storage/det_trench = 2, + /obj/item/clothing/suit/storage/det_trench/grey = 2, + /obj/item/clothing/suit/storage/forensics/blue = 2, + /obj/item/clothing/suit/storage/forensics/red = 2, + /obj/item/clothing/gloves/forensic = 2) //CHOMP Addition + +/obj/structure/closet/wardrobe/pink + name = "pink wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/pink + + starts_with = list( + /obj/item/clothing/under/color/pink = 3, + /obj/item/clothing/shoes/brown = 3) + +/obj/structure/closet/wardrobe/black + name = "black wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/black + + starts_with = list( + /obj/item/clothing/under/color/black = 3, + /obj/item/clothing/shoes/black = 3, + /obj/item/clothing/head/that = 3, + /obj/item/clothing/head/soft/black = 3, + /obj/item/clothing/mask/bandana = 3, + /obj/item/weapon/storage/backpack/messenger/black) + + +/obj/structure/closet/wardrobe/chaplain_black + name = "chapel wardrobe" + desc = "It's a storage unit for approved religious attire." + closet_appearance = /decl/closet_appearance/wardrobe/chapel + + starts_with = list( + /obj/item/clothing/under/rank/chaplain, + /obj/item/clothing/shoes/black, + /obj/item/clothing/suit/nun, + /obj/item/clothing/head/nun_hood, + /obj/item/clothing/suit/storage/hooded/chaplain_hoodie, + /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout, + /obj/item/clothing/suit/holidaypriest, + /obj/item/clothing/under/wedding/bride_white, + /obj/item/weapon/storage/backpack/cultpack, + /obj/item/weapon/storage/fancy/candle_box = 2, + /obj/item/weapon/storage/fancy/whitecandle_box, + /obj/item/weapon/storage/fancy/blackcandle_box, + /obj/item/godfig = 2, + /obj/item/weapon/deck/tarot) + +/obj/structure/closet/wardrobe/monastary + name = "Monastary wardrobe" + desc = "It's a storage unit for approved religious attire." + closet_appearance = /decl/closet_appearance/wardrobe/black + + starts_with = list( + /obj/item/clothing/suit/unathi/mantle = 2, + /obj/item/clothing/suit/unathi/robe = 2, + /obj/item/clothing/shoes/sandal = 2, + /obj/item/clothing/shoes/footwraps = 2, + /obj/item/clothing/shoes/boots/winter = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat = 2) + + +/obj/structure/closet/wardrobe/green + name = "green wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/green + + starts_with = list( + /obj/item/clothing/under/color/green = 3, + /obj/item/clothing/shoes/green = 3, + /obj/item/clothing/head/soft/green = 3, + /obj/item/clothing/mask/bandana/green = 3) + +/obj/structure/closet/wardrobe/xenos + name = "xenos wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/xenos + + starts_with = list( + /obj/item/clothing/suit/unathi/mantle, + /obj/item/clothing/suit/unathi/robe, + /obj/item/clothing/shoes/sandal = 2, + /obj/item/clothing/shoes/footwraps = 2, + /obj/item/clothing/shoes/boots/winter = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat = 2) + + +/obj/structure/closet/wardrobe/orange + name = "prison wardrobe" + desc = "It's a storage unit for regulation prisoner attire." + closet_appearance = /decl/closet_appearance/wardrobe/orange + + starts_with = list( + /obj/item/clothing/under/color/prison = 3, + /obj/item/clothing/shoes/orange = 3) + + +/obj/structure/closet/wardrobe/yellow + name = "yellow wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/yellow + + starts_with = list( + /obj/item/clothing/under/color/yellow = 3, + /obj/item/clothing/shoes/yellow = 3, + /obj/item/clothing/head/soft/yellow = 3, + /obj/item/clothing/mask/bandana/gold = 3) + + +/obj/structure/closet/wardrobe/atmospherics_yellow + name = "atmospherics wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/engineer/atmos + + starts_with = list( + /obj/item/clothing/under/rank/atmospheric_technician = 3, + /obj/item/clothing/under/rank/atmospheric_technician/skirt = 3, + /obj/item/clothing/shoes/black = 3, + /obj/item/clothing/head/hardhat/red = 3, + /obj/item/clothing/head/beret/engineering = 3, + /obj/item/clothing/mask/bandana/gold = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos = 3, + /obj/item/clothing/shoes/boots/winter/atmos = 3) + +/obj/structure/closet/wardrobe/engineering_yellow + name = "engineering wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/engineer + + starts_with = list( + /obj/item/clothing/under/rank/engineer = 3, + /obj/item/clothing/under/rank/engineer/skirt = 3, + /obj/item/clothing/under/rank/engineer/turtleneck = 3, + /obj/item/clothing/shoes/orange = 3, + /obj/item/clothing/head/hardhat = 3, + /obj/item/clothing/head/beret/engineering = 3, + /obj/item/clothing/mask/bandana/gold = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering = 3, + /obj/item/clothing/shoes/boots/winter/engineering = 3, + /obj/item/clothing/shoes/boots/workboots = 3) + + +/obj/structure/closet/wardrobe/white + name = "white wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/white + + starts_with = list( + /obj/item/clothing/under/color/white = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/head/soft/mime = 3) + + +/obj/structure/closet/wardrobe/pjs + name = "pajama wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/pjs + + starts_with = list( + /obj/item/clothing/under/pj/red = 2, + /obj/item/clothing/under/pj/blue = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/shoes/slippers = 2) + + +/obj/structure/closet/wardrobe/science_white + name = "science wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/science + + starts_with = list( + /obj/item/clothing/under/rank/scientist = 3, + /obj/item/clothing/under/rank/scientist/skirt = 2, + /obj/item/clothing/under/rank/scientist/turtleneck = 3, + /obj/item/clothing/suit/storage/toggle/labcoat = 3, + /obj/item/clothing/suit/storage/toggle/labcoat/modern = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/shoes/slippers = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/science, + /obj/item/clothing/shoes/boots/winter/science, + /obj/item/weapon/storage/backpack/toxins, + /obj/item/weapon/storage/backpack/satchel/tox) + +/obj/structure/closet/wardrobe/science_white/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci + else + starts_with += /obj/item/weapon/storage/backpack/satchel/tox + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci + else + starts_with += /obj/item/weapon/storage/backpack/satchel/tox + + return ..() + + +/obj/structure/closet/wardrobe/robotics_black + name = "robotics wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/robotics + + starts_with = list( + /obj/item/clothing/under/rank/roboticist = 2, + /obj/item/clothing/suit/storage/toggle/labcoat = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/gloves/black = 2, + /obj/item/weapon/storage/backpack/toxins, + /obj/item/weapon/storage/backpack/satchel/tox) + +/obj/structure/closet/wardrobe/robotics_black/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci + else + starts_with += /obj/item/weapon/storage/backpack/satchel/tox + + return ..() + + +/obj/structure/closet/wardrobe/chemistry_white + name = "chemistry wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/medical/chemistry + + starts_with = list( + /obj/item/clothing/under/rank/chemist = 2, + /obj/item/clothing/under/rank/chemist/skirt = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/suit/storage/toggle/labcoat/chemist = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist, + /obj/item/weapon/storage/backpack/chemistry = 2, + /obj/item/weapon/storage/backpack/satchel/chem = 2, + /obj/item/weapon/storage/bag/chemistry = 2,) + + +/obj/structure/closet/wardrobe/genetics_white + name = "genetics wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/medical/genetics + + starts_with = list( + /obj/item/clothing/under/rank/geneticist = 2, + /obj/item/clothing/under/rank/geneticist/skirt = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/suit/storage/toggle/labcoat/genetics = 2, + /obj/item/weapon/storage/backpack/genetics = 2, + /obj/item/weapon/storage/backpack/satchel/gen = 2) + + +/obj/structure/closet/wardrobe/virology_white + name = "virology wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/medical/virology + + starts_with = list( + /obj/item/clothing/under/rank/virologist = 2, + /obj/item/clothing/under/rank/virologist/skirt = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/suit/storage/toggle/labcoat/virologist = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro, + /obj/item/clothing/mask/surgical = 2, + /obj/item/weapon/storage/backpack/virology = 2, + /obj/item/weapon/storage/backpack/satchel/vir = 2) + + +/obj/structure/closet/wardrobe/medic_white + name = "medical wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/medical/white + + starts_with = list( + /obj/item/clothing/under/rank/medical = 2, + /obj/item/clothing/under/rank/medical/skirt = 2, + /obj/item/clothing/under/rank/medical/turtleneck = 2, + /obj/item/clothing/under/rank/medical/scrubs, + /obj/item/clothing/under/rank/medical/scrubs/green, + /obj/item/clothing/under/rank/medical/scrubs/purple, + /obj/item/clothing/under/rank/medical/scrubs/black, + /obj/item/clothing/under/rank/medical/scrubs/navyblue, + /obj/item/clothing/head/surgery/navyblue, + /obj/item/clothing/head/surgery/purple, + /obj/item/clothing/head/surgery/blue, + /obj/item/clothing/head/surgery/green, + /obj/item/clothing/head/surgery/black, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/suit/storage/toggle/labcoat = 2, + /obj/item/clothing/mask/surgical = 2, + /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 2, + /obj/item/clothing/shoes/boots/winter/medical = 2) + + +/obj/structure/closet/wardrobe/medic_gown + name = "cloning wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/medical/patient + + starts_with = list( + /obj/item/clothing/under/medigown = 4) + + +/obj/structure/closet/wardrobe/grey + name = "grey wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/grey + + starts_with = list( + /obj/item/clothing/under/color/grey = 3, + /obj/item/clothing/shoes/black = 3, + /obj/item/clothing/head/soft/grey = 3) + + +/obj/structure/closet/wardrobe/mixed + name = "mixed wardrobe" + closet_appearance = /decl/closet_appearance/wardrobe/mixed + + starts_with = list( + /obj/item/clothing/under/color/blue, + /obj/item/clothing/under/color/yellow, + /obj/item/clothing/under/color/green, + /obj/item/clothing/under/color/pink, + /obj/item/clothing/under/skirt/outfit/plaid_blue, + /obj/item/clothing/under/skirt/outfit/plaid_red, + /obj/item/clothing/under/skirt/outfit/plaid_purple, + /obj/item/clothing/shoes/blue, + /obj/item/clothing/shoes/yellow, + /obj/item/clothing/shoes/green, + /obj/item/clothing/shoes/purple, + /obj/item/clothing/shoes/red, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/under/pants/classicjeans, + /obj/item/clothing/under/pants/mustangjeans, + /obj/item/clothing/under/pants/blackjeans, + /obj/item/clothing/under/pants/youngfolksjeans, + /obj/item/clothing/under/pants/white, + /obj/item/clothing/under/pants/red, + /obj/item/clothing/under/pants/black, + /obj/item/clothing/under/pants/tan, + /obj/item/clothing/under/pants/track, + /obj/item/clothing/suit/storage/toggle/track, + /obj/item/clothing/under/pants, + /obj/item/clothing/under/pants/khaki, + /obj/item/clothing/mask/bandana/blue, + /obj/item/clothing/mask/bandana/blue, + /obj/item/clothing/accessory/hawaiian, + /obj/item/clothing/accessory/hawaiian/blue, + /obj/item/clothing/accessory/hawaiian/pink, + /obj/item/clothing/accessory/hawaiian/red, + /obj/item/clothing/accessory/hawaiian/yellow) + + +/obj/structure/closet/wardrobe/tactical + name = "tactical equipment" + closet_appearance = /decl/closet_appearance/tactical + + starts_with = list( + /obj/item/clothing/under/tactical, + /obj/item/clothing/suit/armor/tactical, + /obj/item/clothing/head/helmet/tactical, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/mask/balaclava, + /obj/item/clothing/glasses/sunglasses/sechud/tactical, + /obj/item/clothing/shoes/boots/jackboots, + /obj/item/clothing/gloves/black, + /obj/item/clothing/under/pants/camo) + +/obj/structure/closet/wardrobe/tactical/Initialize() + if(prob(25)) + starts_with += /obj/item/weapon/storage/belt/security/tactical/bandolier + else + starts_with += /obj/item/weapon/storage/belt/security/tactical + if(prob(10)) + starts_with += /obj/item/clothing/mask/bandana/skull + + return ..() + +/obj/structure/closet/wardrobe/ert + name = "emergency response team equipment" + closet_appearance = /decl/closet_appearance/ert + + starts_with = list( + /obj/item/clothing/under/rank/centcom, + /obj/item/clothing/under/ert, + /obj/item/clothing/under/syndicate/combat, + /obj/item/device/radio/headset/ert/alt, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/shoes/boots/swat, + /obj/item/clothing/gloves/swat, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/mask/balaclava, + /obj/item/clothing/mask/bandana/skull = 2, + /obj/item/clothing/mask/gas/sechailer/swat) + + +/obj/structure/closet/wardrobe/suit + name = "suit locker" + closet_appearance = /decl/closet_appearance/wardrobe/suit + + starts_with = list( + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/suit_jacket/charcoal, + /obj/item/clothing/under/suit_jacket/charcoal/skirt, + /obj/item/clothing/under/suit_jacket/navy, + /obj/item/clothing/under/suit_jacket/navy/skirt, + /obj/item/clothing/under/suit_jacket/burgundy, + /obj/item/clothing/under/suit_jacket/burgundy/skirt, + /obj/item/clothing/under/suit_jacket/checkered, + /obj/item/clothing/under/suit_jacket/checkered/skirt, + /obj/item/clothing/under/suit_jacket/tan, + /obj/item/clothing/under/suit_jacket/tan/skirt, + /obj/item/clothing/under/sl_suit, + /obj/item/clothing/under/suit_jacket, + /obj/item/clothing/under/suit_jacket/female, + /obj/item/clothing/under/suit_jacket/female/skirt, + /obj/item/clothing/under/suit_jacket/really_black, + /obj/item/clothing/under/suit_jacket/really_black/skirt, + /obj/item/clothing/under/suit_jacket/red, + /obj/item/clothing/under/suit_jacket/red/skirt, + /obj/item/clothing/under/scratch, + /obj/item/clothing/under/scratch/skirt, + /obj/item/weapon/storage/backpack/satchel = 2) + +/obj/structure/closet/wardrobe/captain + name = "site manager's wardrobe" + closet_appearance = /decl/closet_appearance/cabinet + + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + + starts_with = list( + /obj/item/weapon/storage/backpack/captain, + /obj/item/clothing/suit/captunic, + /obj/item/clothing/suit/captunic/capjacket, + /obj/item/clothing/head/caphat/cap, + /obj/item/clothing/head/caphat/beret, + /obj/item/clothing/under/rank/captain, + /obj/item/clothing/under/dress/dress_cap/femformal, + /obj/item/clothing/under/rank/neo_captain_parade, + /obj/item/clothing/under/rank/neo_captain_skirt, + /obj/item/clothing/under/rank/neo_captain, + /obj/item/clothing/under/rank/neo_captain_kilt, + /obj/item/clothing/under/rank/neo_captain_blacksuit, + /obj/item/clothing/under/rank/neo_commandutil, + /obj/item/clothing/shoes/brown, + /obj/item/clothing/gloves/captain, + /obj/item/clothing/under/dress/dress_cap, + /obj/item/weapon/storage/backpack/satchel/cap, + /obj/item/clothing/head/caphat/formal, + /obj/item/clothing/under/captainformal, + /obj/item/clothing/suit/storage/hooded/wintercoat/captain, + /obj/item/clothing/shoes/boots/winter/command, + /obj/item/clothing/head/beret/centcom/captain, + /obj/item/clothing/under/suit_jacket/green, + /obj/item/clothing/under/suit_jacket/green/skirt, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/head/caphat) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index ba8fb51d85..1aa4e7c1fa 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -1,749 +1,749 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/structure/closet/crate - name = "crate" - desc = "A rectangular steel crate." - icon = 'icons/obj/closets/bases/crate.dmi' - closet_appearance = /decl/closet_appearance/crate - climbable = TRUE - dir = 4 //Spawn facing 'forward' by default. - var/points_per_crate = 5 - var/rigged = 0 - - open_sound = 'sound/effects/crate_open.ogg' - close_sound = 'sound/effects/crate_close.ogg' - -/obj/structure/closet/crate/can_open() - return 1 - -/obj/structure/closet/crate/can_close() - return 1 - -/obj/structure/closet/crate/open() - if(src.opened) - return 0 - if(!src.can_open()) - return 0 - - if(rigged && locate(/obj/item/device/radio/electropack) in src) - if(isliving(usr)) - var/mob/living/L = usr - if(L.electrocute_act(17, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(usr.stunned) - return 2 - - playsound(src, open_sound, 50, 1, -3) - for(var/obj/O in src) - O.forceMove(get_turf(src)) - src.opened = 1 - - if(climbable) - structure_shaken() - update_icon() - return 1 - -/obj/structure/closet/crate/close() - if(!src.opened) - return 0 - if(!src.can_close()) - return 0 - - playsound(src, close_sound, 50, 1, -3) - var/itemcount = 0 - for(var/obj/O in get_turf(src)) - if(itemcount >= storage_capacity) - break - if(O.density || O.anchored || istype(O,/obj/structure/closet)) - continue - if(istype(O, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs. - var/obj/structure/bed/B = O - if(B.has_buckled_mobs()) - continue - O.forceMove(src) - itemcount++ - - src.opened = 0 - update_icon() - return 1 - -/obj/structure/closet/crate/verb/rotate_clockwise() - set name = "Rotate Crate Clockwise" - set category = "Object" - set src in oview(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 270)) - -/obj/structure/closet/crate/verb/rotate_counterclockwise() - set category = "Object" - set name = "Rotate Crate Counterclockwise" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 90)) - -/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH) && istype(src,/obj/structure/closet/crate/bin)) - return ..() - else if(opened) - if(isrobot(user)) - return - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - user.drop_item() - if(W) - W.forceMove(src.loc) - else if(istype(W, /obj/item/weapon/packageWrap)) - return - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(rigged) - to_chat(user, "[src] is already rigged!") - return - if (C.use(1)) - to_chat(user , "You rig [src].") - rigged = 1 - return - else if(istype(W, /obj/item/device/radio/electropack)) - if(rigged) - to_chat(user , "You attach [W] to [src].") - user.drop_item() - W.forceMove(src) - return - else if(W.has_tool_quality(TOOL_WIRECUTTER)) - if(rigged) - to_chat(user , "You cut away the wiring.") - playsound(src, W.usesound, 100, 1) - rigged = 0 - return - else return attack_hand(user) - -/obj/structure/closet/crate/ex_act(severity) - switch(severity) - if(1.0) - for(var/obj/O in src.contents) - qdel(O) - qdel(src) - return - if(2.0) - for(var/obj/O in src.contents) - if(prob(50)) - qdel(O) - qdel(src) - return - if(3.0) - if (prob(50)) - qdel(src) - return - else - return - -/obj/structure/closet/crate/secure - desc = "A secure crate." - name = "Secure crate" - closet_appearance = /decl/closet_appearance/crate/secure - var/broken = 0 - var/locked = 1 - -/obj/structure/closet/crate/secure/can_open() - return !locked - -/obj/structure/closet/crate/secure/update_icon() - if(opened) - icon_state = "open" - else - if(broken) - icon_state = "closed_emagged[sealed ? "_welded" : ""]" - else - if(locked) - icon_state = "closed_locked[sealed ? "_welded" : ""]" - else - icon_state = "closed_unlocked[sealed ? "_welded" : ""]" - -/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob) - if(src.opened) - to_chat(user, "Close the crate first.") - return - if(src.broken) - to_chat(user, "The crate appears to be broken.") - return - if(src.allowed(user)) - set_locked(!locked, user) - else - to_chat(user, "Access Denied") - -/obj/structure/closet/crate/secure/proc/set_locked(var/newlocked, mob/user = null) - if(locked == newlocked) return - - locked = newlocked - if(user) - for(var/mob/O in viewers(user, 3)) - O.show_message( "The crate has been [locked ? null : "un"]locked by [user].", 1) - update_icon() - -/obj/structure/closet/crate/secure/verb/verb_togglelock() - set src in oview(1) // One square distance - set category = "Object" - set name = "Toggle Lock" - - if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain - return - - if(ishuman(usr) || isrobot(usr)) - src.add_fingerprint(usr) - src.togglelock(usr) - else - to_chat(usr, "This mob type can't use this verb.") - -/obj/structure/closet/crate/secure/attack_hand(mob/user as mob) - src.add_fingerprint(user) - if(locked) - src.togglelock(user) - else - src.toggle(user) - -/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/tool/wirecutters))) - return ..() - if(istype(W, /obj/item/weapon/melee/energy/blade)) - emag_act(INFINITY, user) - if(!opened) - src.togglelock(user) - return - return ..() - -/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user) - if(!broken) - playsound(src, "sparks", 60, 1) - locked = 0 - broken = 1 - to_chat(user, "You unlock \the [src].") - update_icon() - return 1 - -/obj/structure/closet/crate/secure/emp_act(severity) - for(var/obj/O in src) - O.emp_act(severity) - if(!broken && !opened && prob(50/severity)) - if(!locked) - locked = 1 - else - playsound(src, 'sound/effects/sparks4.ogg', 75, 1) - locked = 0 - if(!opened && prob(20/severity)) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_station_access()) - update_icon() - ..() - -/obj/structure/closet/crate/plastic - name = "plastic crate" - desc = "A rectangular plastic crate." - closet_appearance = /decl/closet_appearance/crate/plastic - points_per_crate = 1 //5 crates per ordered crate, +5 for the crate it comes in. - -/obj/structure/closet/crate/internals - name = "internals crate" - desc = "A internals crate." - -/obj/structure/closet/crate/trashcart - name = "trash cart" - desc = "A heavy, metal trashcart with wheels." - closet_appearance = /decl/closet_appearance/cart/trash - -/*these aren't needed anymore -/obj/structure/closet/crate/hat - desc = "A crate filled with Valuable Collector's Hats!." - name = "Hat Crate" - -/obj/structure/closet/crate/contraband - name = "Poster crate" - desc = "A random assortment of posters manufactured by providers NOT listed under NanoTrasen's whitelist." -*/ - -/obj/structure/closet/crate/medical - name = "medical crate" - desc = "A medical crate." - closet_appearance = /decl/closet_appearance/crate/medical - -/obj/structure/closet/crate/rcd - name = "\improper RCD crate" - desc = "A crate with rapid construction device." - - starts_with = list( - /obj/item/weapon/rcd_ammo = 3, - /obj/item/weapon/rcd) - -/obj/structure/closet/crate/solar - name = "solar pack crate" - - starts_with = list( - /obj/item/solar_assembly = 21, - /obj/item/weapon/circuitboard/solar_control, - /obj/item/weapon/tracker_electronics, - /obj/item/weapon/paper/solar) - -/obj/structure/closet/crate/cooper - name = "Cooper's Stache" - - starts_with = list( - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 6, - /obj/item/stack/material/gold = 1) -/obj/structure/closet/crate/freezer - name = "freezer" - desc = "A freezer." - closet_appearance = /decl/closet_appearance/crate/freezer - var/target_temp = T0C - 40 - var/cooling_power = 40 - -/obj/structure/closet/crate/freezer/centauri - desc = "A freezer stamped with the logo of Centauri Provisions." - closet_appearance = /decl/closet_appearance/crate/freezer/centauri - -/obj/structure/closet/crate/freezer/nanotrasen - desc = "A freezer stamped with the logo of NanoTrasen." - closet_appearance = /decl/closet_appearance/crate/freezer/nanotrasen - -/obj/structure/closet/crate/freezer/veymed - desc = "A freezer stamped with the logo of Vey-Medical." - closet_appearance = /decl/closet_appearance/crate/freezer/veymed - -/obj/structure/closet/crate/freezer/zenghu - desc = "A freezer stamped with the logo of Zeng-Hu Pharmaceuticals." - closet_appearance = /decl/closet_appearance/crate/freezer/zenghu - -/obj/structure/closet/crate/freezer/return_air() - var/datum/gas_mixture/gas = (..()) - if(!gas) return null - var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.copy_from(gas) - if(newgas.temperature <= target_temp) return - - if((newgas.temperature - cooling_power) > target_temp) - newgas.temperature -= cooling_power - else - newgas.temperature = target_temp - return newgas - -/obj/structure/closet/crate/freezer/Entered(var/atom/movable/AM) - if(istype(AM, /obj/item/organ)) - var/obj/item/organ/O = AM - O.preserved = 1 - for(var/obj/item/organ/organ in O) - organ.preserved = 1 - ..() - -/obj/structure/closet/crate/freezer/Exited(var/atom/movable/AM) - if(istype(AM, /obj/item/organ)) - var/obj/item/organ/O = AM - O.preserved = 0 - for(var/obj/item/organ/organ in O) - organ.preserved = 0 - ..() - -/obj/structure/closet/crate/weapon - name = "weapons crate" - desc = "A barely secured weapons crate." - closet_appearance = /decl/closet_appearance/crate/secure/weapon - -/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle - name = "emergency rations" - desc = "A crate of emergency rations." - - starts_with = list( - /obj/random/mre = 6) - -/obj/structure/closet/crate/bin - name = "large bin" - desc = "A large bin." - closet_appearance = null - icon = 'icons/obj/closets/largebin.dmi' - -/obj/structure/closet/crate/radiation - name = "radioactive gear crate" - desc = "A crate with a radiation sign on it." - closet_appearance = /decl/closet_appearance/crate/radiation - - starts_with = list( - /obj/item/clothing/suit/radiation = 4, - /obj/item/clothing/head/radiation = 4) - -//TSCs - -/obj/structure/closet/crate/aether - desc = "A crate painted in the colours of Aether Atmospherics and Recycling." - closet_appearance = /decl/closet_appearance/crate/aether - -/obj/structure/closet/crate/centauri - desc = "A crate decorated with the logo of Centauri Provisions." - closet_appearance = /decl/closet_appearance/crate/centauri - -/obj/structure/closet/crate/einstein - desc = "A crate labelled with an Einstein Engines sticker." - closet_appearance = /decl/closet_appearance/crate/einstein - -/obj/structure/closet/crate/focalpoint - desc = "A crate marked with the decal of Focal Point Energistics." - closet_appearance = /decl/closet_appearance/crate/focalpoint - -/obj/structure/closet/crate/gilthari - desc = "A crate embossed with the logo of Gilthari Exports." - closet_appearance = /decl/closet_appearance/crate/gilthari - -/obj/structure/closet/crate/grayson - desc = "A bare metal crate spraypainted with Grayson Manufactories decals." - closet_appearance = /decl/closet_appearance/crate/grayson - -/obj/structure/closet/crate/heph - desc = "A sturdy crate marked with the logo of Hephaestus Industries." - closet_appearance = /decl/closet_appearance/crate/heph - -/obj/structure/closet/crate/morpheus - desc = "A crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." - closet_appearance = /decl/closet_appearance/crate/morpheus - -/obj/structure/closet/crate/nanotrasen - desc = "A crate emblazoned with the standard NanoTrasen livery." - closet_appearance = /decl/closet_appearance/crate/nanotrasen - -/obj/structure/closet/crate/nanothreads - desc = "A crate emblazoned with the NanoThreads Garments livery, a subsidary of the NanoTrasen Corporation." - closet_appearance = /decl/closet_appearance/crate/nanotrasenclothing - -/obj/structure/closet/crate/nanomed - desc = "A crate emblazoned with the NanoMed Medical livery, a subsidary of the NanoTrasen Corporation." - closet_appearance = /decl/closet_appearance/crate/nanotrasenmedical - -/obj/structure/closet/crate/oculum - desc = "A crate minimally decorated with the logo of media giant Oculum Broadcast." - closet_appearance = /decl/closet_appearance/crate/oculum - -/obj/structure/closet/crate/veymed - desc = "A sterile crate extensively detailed in Veymed colours." - closet_appearance = /decl/closet_appearance/crate/veymed - -/obj/structure/closet/crate/ward - desc = "A crate decaled with the logo of Ward-Takahashi." - closet_appearance = /decl/closet_appearance/crate/ward - -/obj/structure/closet/crate/xion - desc = "A crate painted in Xion Manufacturing Group orange." - closet_appearance = /decl/closet_appearance/crate/xion - -/obj/structure/closet/crate/zenghu - desc = "A sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." - closet_appearance = /decl/closet_appearance/crate/zenghu - -// Brands/subsidiaries - -/obj/structure/closet/crate/allico - desc = "A crate painted in the distinctive cheerful colours of AlliCo. Ltd." - closet_appearance = /decl/closet_appearance/crate/allico - -/obj/structure/closet/crate/carp - desc = "A crate painted with the garish livery of Consolidated Agricultural Resources Plc." - closet_appearance = /decl/closet_appearance/crate/carp - -/obj/structure/closet/crate/hedberg - name = "weapons crate" - desc = "A weapons crate stamped with the logo of Hedberg-Hammarstrom and the lock conspicuously absent." - closet_appearance = /decl/closet_appearance/crate/secure/hedberg - -/obj/structure/closet/crate/galaksi - desc = "A crate printed with the markings of Ward-Takahashi's Galaksi Appliance branding." - closet_appearance = /decl/closet_appearance/crate/galaksi - -/obj/structure/closet/crate/thinktronic - desc = "A crate printed with the markings of Thinktronic Systems." - closet_appearance = /decl/closet_appearance/crate/thinktronic - -/obj/structure/closet/crate/ummarcar - desc = "A flimsy crate marked labelled 'UmMarcar Office Supply'." - closet_appearance = /decl/closet_appearance/crate/ummarcar - -/obj/structure/closet/crate/unathi - name = "import crate" - desc = "A crate painted with the markings of Moghes Imported Sissalik Jerky." - closet_appearance = /decl/closet_appearance/crate/unathiimport - - -// Secure Crates - -/obj/structure/closet/crate/secure/weapon - name = "weapons crate" - desc = "A secure weapons crate." - closet_appearance = /decl/closet_appearance/crate/secure/weapon - -/obj/structure/closet/crate/secure/aether - desc = "A secure crate painted in the colours of Aether Atmospherics and Recycling." - closet_appearance = /decl/closet_appearance/crate/secure/aether - -/obj/structure/closet/crate/secure/bishop - desc = "A secure crate finely decorated with the emblem of Bishop Cybernetics." - closet_appearance = /decl/closet_appearance/crate/secure/bishop - -/obj/structure/closet/crate/secure/cybersolutions - desc = "An unadorned secure metal crate labelled 'Cyber Solutions'." - closet_appearance = /decl/closet_appearance/crate/secure/cybersolutions - -/obj/structure/closet/crate/secure/einstein - desc = "A secure crate labelled with an Einstein Engines sticker." - closet_appearance = /decl/closet_appearance/crate/secure/einstein - -/obj/structure/closet/crate/secure/focalpoint - desc = "A secure crate marked with the decal of Focal Point Energistics." - closet_appearance = /decl/closet_appearance/crate/secure/focalpoint - -/obj/structure/closet/crate/secure/gilthari - desc = "A secure crate embossed with the logo of Gilthari Exports." - closet_appearance = /decl/closet_appearance/crate/secure/gilthari - -/obj/structure/closet/crate/secure/grayson - desc = "A secure bare metal crate spraypainted with Grayson Manufactories decals." - closet_appearance = /decl/closet_appearance/crate/secure/grayson - -/obj/structure/closet/crate/secure/hedberg - name = "weapons crate" - desc = "A secure weapons crate stamped with the logo of Hedberg-Hammarstrom." - closet_appearance = /decl/closet_appearance/crate/secure/hedberg - -/obj/structure/closet/crate/secure/heph - name = "weapons crate" - desc = "A secure weapons crate marked with the logo of Hephaestus Industries." - closet_appearance = /decl/closet_appearance/crate/secure/heph - -/obj/structure/closet/crate/secure/lawson - name = "weapons crate" - desc = "A secure weapons crate marked with the logo of Lawson Arms." - closet_appearance = /decl/closet_appearance/crate/secure/lawson - -/obj/structure/closet/crate/secure/morpheus - desc = "A secure crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." - closet_appearance = /decl/closet_appearance/crate/secure/morpheus - -/obj/structure/closet/crate/secure/nanotrasen - desc = "A secure crate emblazoned with the standard NanoTrasen livery." - closet_appearance = /decl/closet_appearance/crate/secure/nanotrasen - -/obj/structure/closet/crate/secure/nanomed - desc = "A secure crate emblazoned with the NanoMed Medical livery, a subsidary of the NanoTrasen Corporation." - closet_appearance = /decl/closet_appearance/crate/secure/nanotrasenmedical - -/obj/structure/closet/crate/secure/scg - name = "weapons crate" - desc = "A secure crate in the official colours of the Solar Confederate Government." - closet_appearance = /decl/closet_appearance/crate/secure/solgov - -/obj/structure/closet/crate/secure/saare - name = "weapons crate" - desc = "A secure weapons crate plainly stamped with the logo of Stealth Assault Enterprises." - closet_appearance = /decl/closet_appearance/crate/secure/saare - -/obj/structure/closet/crate/secure/veymed - desc = "A secure sterile crate extensively detailed in Veymed colours." - closet_appearance = /decl/closet_appearance/crate/secure/veymed - -/obj/structure/closet/crate/secure/ward - desc = "A secure crate decaled with the logo of Ward-Takahashi." - closet_appearance = /decl/closet_appearance/crate/secure/ward - -/obj/structure/closet/crate/secure/xion - desc = "A secure crate painted in Xion Manufacturing Group orange." - closet_appearance = /decl/closet_appearance/crate/secure/xion - -/obj/structure/closet/crate/secure/zenghu - desc = "A secure sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." - closet_appearance = /decl/closet_appearance/crate/secure/zenghu - -/obj/structure/closet/crate/secure/phoron - name = "phoron crate" - desc = "A secure phoron crate painted in standard NanoTrasen livery." - closet_appearance = /decl/closet_appearance/crate/secure/hazard - -/obj/structure/closet/crate/secure/gear - name = "gear crate" - desc = "A secure gear crate." - closet_appearance = /decl/closet_appearance/crate/secure/weapon - -/obj/structure/closet/crate/secure/hydrosec - name = "secure hydroponics crate" - desc = "A crate with a lock on it, painted in the scheme of the station's botanists." - closet_appearance = /decl/closet_appearance/crate/secure/hydroponics - -/obj/structure/closet/crate/secure/engineering - desc = "A crate with a lock on it, painted in the scheme of the station's engineers." - name = "secure engineering crate" - -/obj/structure/closet/crate/secure/science - name = "secure science crate" - desc = "A crate with a lock on it, painted in the scheme of the station's scientists." - -/obj/structure/closet/crate/secure/bin - name = "secure bin" - desc = "A secure bin." - -// Large crates - -/obj/structure/closet/crate/large - name = "large crate" - desc = "A hefty metal crate." - icon = 'icons/obj/closets/bases/large_crate.dmi' - closet_appearance = /decl/closet_appearance/large_crate - -/obj/structure/closet/crate/large/close() - . = ..() - if (.)//we can hold up to one large item - var/found = 0 - for(var/obj/structure/S in src.loc) - if(S == src) - continue - if(!S.anchored) - found = 1 - S.forceMove(src) - break - if(!found) - for(var/obj/machinery/M in src.loc) - if(!M.anchored) - M.forceMove(src) - break - return - -/obj/structure/closet/crate/large/critter - name = "animal crate" - desc = "A hefty crate for hauling animals." - closet_appearance = /decl/closet_appearance/large_crate/critter - -/obj/structure/closet/crate/large/aether - name = "large atmospherics crate" - desc = "A hefty metal crate, painted in Aether Atmospherics and Recycling colours." - closet_appearance = /decl/closet_appearance/large_crate/aether - -/obj/structure/closet/crate/large/einstein - name = "large crate" - desc = "A hefty metal crate, painted in Einstein Engines colours." - closet_appearance = /decl/closet_appearance/large_crate/einstein - -/obj/structure/closet/crate/large/nanotrasen - name = "large crate" - desc = "A hefty metal crate, painted in standard NanoTrasen livery." - closet_appearance = /decl/closet_appearance/large_crate/nanotrasen - -/obj/structure/closet/crate/large/xion - name = "large crate" - desc = "A hefty metal crate, painted in Xion Manufacturing Group orange." - closet_appearance = /decl/closet_appearance/large_crate/xion - -/obj/structure/closet/crate/secure/large - name = "large crate" - desc = "A hefty metal crate with an electronic locking system." - icon = 'icons/obj/closets/bases/large_crate.dmi' - closet_appearance = /decl/closet_appearance/large_crate/secure - - -/obj/structure/closet/crate/secure/large/close() - . = ..() - if (.)//we can hold up to one large item - var/found = 0 - for(var/obj/structure/S in src.loc) - if(S == src) - continue - if(!S.anchored) - found = 1 - S.forceMove(src) - break - if(!found) - for(var/obj/machinery/M in src.loc) - if(!M.anchored) - M.forceMove(src) - break - return - - -/obj/structure/closet/crate/secure/large/reinforced - desc = "A hefty, reinforced metal crate with an electronic locking system." - -/obj/structure/closet/crate/secure/large/aether - name = "secure atmospherics crate" - desc = "A hefty metal crate with an electronic locking system, painted in Aether Atmospherics and Recycling colours." - closet_appearance = /decl/closet_appearance/large_crate/secure/aether - -/obj/structure/closet/crate/secure/large/einstein - desc = "A hefty metal crate with an electronic locking system, painted in Einstein Engines colours." - closet_appearance = /decl/closet_appearance/large_crate/secure/einstein - -/obj/structure/closet/crate/large/secure/heph - desc = "A hefty metal crate with an electronic locking system, marked with Hephaestus Industries colours." - closet_appearance = /decl/closet_appearance/large_crate/secure/heph - -/obj/structure/closet/crate/secure/large/nanotrasen - desc = "A hefty metal crate with an electronic locking system, painted in standard NanoTrasen livery." - closet_appearance = /decl/closet_appearance/large_crate/secure/hazard - -/obj/structure/closet/crate/large/secure/xion - desc = "A hefty metal crate with an electronic locking system, painted in Xion Manufacturing Group orange." - closet_appearance = /decl/closet_appearance/large_crate/secure/xion - -/obj/structure/closet/crate/engineering - name = "engineering crate" - -/obj/structure/closet/crate/engineering/electrical - -/obj/structure/closet/crate/science - name = "science crate" - -/obj/structure/closet/crate/hydroponics - name = "hydroponics crate" - desc = "All you need to destroy those pesky weeds and pests." - closet_appearance = /decl/closet_appearance/crate/hydroponics - - -/obj/structure/closet/crate/hydroponics/prespawned - starts_with = list( - /obj/item/weapon/reagent_containers/spray/plantbgone = 2, - /obj/item/weapon/material/minihoe) - -//Laundry Cart -/obj/structure/closet/crate/laundry - name = "Laundry Cart" - desc = "A cart with a large fabric bin on it used for transporting large amounts of clothes." - icon = 'icons/obj/closets/laundry.dmi' - closet_appearance = null - open_sound = 'sound/effects/rustle1.ogg' - close_sound = 'sound/effects/rustle2.ogg' - -//Wooden Crate -/obj/structure/closet/crate/wooden - name = "wooden crate" - desc = "A crate made from wood and lined with straw. Cheapest form of storage." - icon = 'icons/obj/closets/wooden.dmi' - closet_appearance = null - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - -//Chest -/obj/structure/closet/crate/chest - name = "chest" - desc = "A fancy chest made from wood and lined with red velvet." - icon = 'icons/obj/closets/chest.dmi' - closet_appearance = null - open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' - -//Mining Cart -/obj/structure/closet/crate/miningcar - name = "mining cart" - desc = "A mining car. This one doesn't work on rails, but has to be dragged." - icon = 'icons/obj/closets/miningcar.dmi' - closet_appearance = null - open_sound = 'sound/effects/wooden_closet_open.ogg' +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/structure/closet/crate + name = "crate" + desc = "A rectangular steel crate." + icon = 'icons/obj/closets/bases/crate.dmi' + closet_appearance = /decl/closet_appearance/crate + climbable = TRUE + dir = 4 //Spawn facing 'forward' by default. + var/points_per_crate = 5 + var/rigged = 0 + + open_sound = 'sound/effects/crate_open.ogg' + close_sound = 'sound/effects/crate_close.ogg' + +/obj/structure/closet/crate/can_open() + return 1 + +/obj/structure/closet/crate/can_close() + return 1 + +/obj/structure/closet/crate/open() + if(src.opened) + return 0 + if(!src.can_open()) + return 0 + + if(rigged && locate(/obj/item/device/radio/electropack) in src) + if(isliving(usr)) + var/mob/living/L = usr + if(L.electrocute_act(17, src)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if(usr.stunned) + return 2 + + playsound(src, open_sound, 50, 1, -3) + for(var/obj/O in src) + O.forceMove(get_turf(src)) + src.opened = 1 + + if(climbable) + structure_shaken() + update_icon() + return 1 + +/obj/structure/closet/crate/close() + if(!src.opened) + return 0 + if(!src.can_close()) + return 0 + + playsound(src, close_sound, 50, 1, -3) + var/itemcount = 0 + for(var/obj/O in get_turf(src)) + if(itemcount >= storage_capacity) + break + if(O.density || O.anchored || istype(O,/obj/structure/closet)) + continue + if(istype(O, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs. + var/obj/structure/bed/B = O + if(B.has_buckled_mobs()) + continue + O.forceMove(src) + itemcount++ + + src.opened = 0 + update_icon() + return 1 + +/obj/structure/closet/crate/verb/rotate_clockwise() + set name = "Rotate Crate Clockwise" + set category = "Object" + set src in oview(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 270)) + +/obj/structure/closet/crate/verb/rotate_counterclockwise() + set category = "Object" + set name = "Rotate Crate Counterclockwise" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 90)) + +/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH) && istype(src,/obj/structure/closet/crate/bin)) + return ..() + else if(opened) + if(isrobot(user)) + return + if(W.loc != user) // This should stop mounted modules ending up outside the module. + return + user.drop_item() + if(W) + W.forceMove(src.loc) + else if(istype(W, /obj/item/weapon/packageWrap)) + return + else if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(rigged) + to_chat(user, "[src] is already rigged!") + return + if (C.use(1)) + to_chat(user , "You rig [src].") + rigged = 1 + return + else if(istype(W, /obj/item/device/radio/electropack)) + if(rigged) + to_chat(user , "You attach [W] to [src].") + user.drop_item() + W.forceMove(src) + return + else if(W.has_tool_quality(TOOL_WIRECUTTER)) + if(rigged) + to_chat(user , "You cut away the wiring.") + playsound(src, W.usesound, 100, 1) + rigged = 0 + return + else return attack_hand(user) + +/obj/structure/closet/crate/ex_act(severity) + switch(severity) + if(1.0) + for(var/obj/O in src.contents) + qdel(O) + qdel(src) + return + if(2.0) + for(var/obj/O in src.contents) + if(prob(50)) + qdel(O) + qdel(src) + return + if(3.0) + if (prob(50)) + qdel(src) + return + else + return + +/obj/structure/closet/crate/secure + desc = "A secure crate." + name = "Secure crate" + closet_appearance = /decl/closet_appearance/crate/secure + var/broken = 0 + var/locked = 1 + +/obj/structure/closet/crate/secure/can_open() + return !locked + +/obj/structure/closet/crate/secure/update_icon() + if(opened) + icon_state = "open" + else + if(broken) + icon_state = "closed_emagged[sealed ? "_welded" : ""]" + else + if(locked) + icon_state = "closed_locked[sealed ? "_welded" : ""]" + else + icon_state = "closed_unlocked[sealed ? "_welded" : ""]" + +/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob) + if(src.opened) + to_chat(user, "Close the crate first.") + return + if(src.broken) + to_chat(user, "The crate appears to be broken.") + return + if(src.allowed(user)) + set_locked(!locked, user) + else + to_chat(user, "Access Denied") + +/obj/structure/closet/crate/secure/proc/set_locked(var/newlocked, mob/user = null) + if(locked == newlocked) return + + locked = newlocked + if(user) + for(var/mob/O in viewers(user, 3)) + O.show_message( "The crate has been [locked ? null : "un"]locked by [user].", 1) + update_icon() + +/obj/structure/closet/crate/secure/verb/verb_togglelock() + set src in oview(1) // One square distance + set category = "Object" + set name = "Toggle Lock" + + if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain + return + + if(ishuman(usr) || isrobot(usr)) + src.add_fingerprint(usr) + src.togglelock(usr) + else + to_chat(usr, "This mob type can't use this verb.") + +/obj/structure/closet/crate/secure/attack_hand(mob/user as mob) + src.add_fingerprint(user) + if(locked) + src.togglelock(user) + else + src.toggle(user) + +/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/tool/wirecutters))) + return ..() + if(istype(W, /obj/item/weapon/melee/energy/blade)) + emag_act(INFINITY, user) + if(!opened) + src.togglelock(user) + return + return ..() + +/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user) + if(!broken) + playsound(src, "sparks", 60, 1) + locked = 0 + broken = 1 + to_chat(user, "You unlock \the [src].") + update_icon() + return 1 + +/obj/structure/closet/crate/secure/emp_act(severity) + for(var/obj/O in src) + O.emp_act(severity) + if(!broken && !opened && prob(50/severity)) + if(!locked) + locked = 1 + else + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + locked = 0 + if(!opened && prob(20/severity)) + if(!locked) + open() + else + req_access = list() + req_access += pick(get_all_station_access()) + update_icon() + ..() + +/obj/structure/closet/crate/plastic + name = "plastic crate" + desc = "A rectangular plastic crate." + closet_appearance = /decl/closet_appearance/crate/plastic + points_per_crate = 1 //5 crates per ordered crate, +5 for the crate it comes in. + +/obj/structure/closet/crate/internals + name = "internals crate" + desc = "A internals crate." + +/obj/structure/closet/crate/trashcart + name = "trash cart" + desc = "A heavy, metal trashcart with wheels." + closet_appearance = /decl/closet_appearance/cart/trash + +/*these aren't needed anymore +/obj/structure/closet/crate/hat + desc = "A crate filled with Valuable Collector's Hats!." + name = "Hat Crate" + +/obj/structure/closet/crate/contraband + name = "Poster crate" + desc = "A random assortment of posters manufactured by providers NOT listed under NanoTrasen's whitelist." +*/ + +/obj/structure/closet/crate/medical + name = "medical crate" + desc = "A medical crate." + closet_appearance = /decl/closet_appearance/crate/medical + +/obj/structure/closet/crate/rcd + name = "\improper RCD crate" + desc = "A crate with rapid construction device." + + starts_with = list( + /obj/item/weapon/rcd_ammo = 3, + /obj/item/weapon/rcd) + +/obj/structure/closet/crate/solar + name = "solar pack crate" + + starts_with = list( + /obj/item/solar_assembly = 21, + /obj/item/weapon/circuitboard/solar_control, + /obj/item/weapon/tracker_electronics, + /obj/item/weapon/paper/solar) + +/obj/structure/closet/crate/cooper + name = "Cooper's Stache" + + starts_with = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 6, + /obj/item/stack/material/gold = 1) +/obj/structure/closet/crate/freezer + name = "freezer" + desc = "A freezer." + closet_appearance = /decl/closet_appearance/crate/freezer + var/target_temp = T0C - 40 + var/cooling_power = 40 + +/obj/structure/closet/crate/freezer/centauri + desc = "A freezer stamped with the logo of Centauri Provisions." + closet_appearance = /decl/closet_appearance/crate/freezer/centauri + +/obj/structure/closet/crate/freezer/nanotrasen + desc = "A freezer stamped with the logo of NanoTrasen." + closet_appearance = /decl/closet_appearance/crate/freezer/nanotrasen + +/obj/structure/closet/crate/freezer/veymed + desc = "A freezer stamped with the logo of Vey-Medical." + closet_appearance = /decl/closet_appearance/crate/freezer/veymed + +/obj/structure/closet/crate/freezer/zenghu + desc = "A freezer stamped with the logo of Zeng-Hu Pharmaceuticals." + closet_appearance = /decl/closet_appearance/crate/freezer/zenghu + +/obj/structure/closet/crate/freezer/return_air() + var/datum/gas_mixture/gas = (..()) + if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() + newgas.copy_from(gas) + if(newgas.temperature <= target_temp) return + + if((newgas.temperature - cooling_power) > target_temp) + newgas.temperature -= cooling_power + else + newgas.temperature = target_temp + return newgas + +/obj/structure/closet/crate/freezer/Entered(var/atom/movable/AM) + if(istype(AM, /obj/item/organ)) + var/obj/item/organ/O = AM + O.preserved = 1 + for(var/obj/item/organ/organ in O) + organ.preserved = 1 + ..() + +/obj/structure/closet/crate/freezer/Exited(var/atom/movable/AM) + if(istype(AM, /obj/item/organ)) + var/obj/item/organ/O = AM + O.preserved = 0 + for(var/obj/item/organ/organ in O) + organ.preserved = 0 + ..() + +/obj/structure/closet/crate/weapon + name = "weapons crate" + desc = "A barely secured weapons crate." + closet_appearance = /decl/closet_appearance/crate/secure/weapon + +/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle + name = "emergency rations" + desc = "A crate of emergency rations." + + starts_with = list( + /obj/random/mre = 6) + +/obj/structure/closet/crate/bin + name = "large bin" + desc = "A large bin." + closet_appearance = null + icon = 'icons/obj/closets/largebin.dmi' + +/obj/structure/closet/crate/radiation + name = "radioactive gear crate" + desc = "A crate with a radiation sign on it." + closet_appearance = /decl/closet_appearance/crate/radiation + + starts_with = list( + /obj/item/clothing/suit/radiation = 4, + /obj/item/clothing/head/radiation = 4) + +//TSCs + +/obj/structure/closet/crate/aether + desc = "A crate painted in the colours of Aether Atmospherics and Recycling." + closet_appearance = /decl/closet_appearance/crate/aether + +/obj/structure/closet/crate/centauri + desc = "A crate decorated with the logo of Centauri Provisions." + closet_appearance = /decl/closet_appearance/crate/centauri + +/obj/structure/closet/crate/einstein + desc = "A crate labelled with an Einstein Engines sticker." + closet_appearance = /decl/closet_appearance/crate/einstein + +/obj/structure/closet/crate/focalpoint + desc = "A crate marked with the decal of Focal Point Energistics." + closet_appearance = /decl/closet_appearance/crate/focalpoint + +/obj/structure/closet/crate/gilthari + desc = "A crate embossed with the logo of Gilthari Exports." + closet_appearance = /decl/closet_appearance/crate/gilthari + +/obj/structure/closet/crate/grayson + desc = "A bare metal crate spraypainted with Grayson Manufactories decals." + closet_appearance = /decl/closet_appearance/crate/grayson + +/obj/structure/closet/crate/heph + desc = "A sturdy crate marked with the logo of Hephaestus Industries." + closet_appearance = /decl/closet_appearance/crate/heph + +/obj/structure/closet/crate/morpheus + desc = "A crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." + closet_appearance = /decl/closet_appearance/crate/morpheus + +/obj/structure/closet/crate/nanotrasen + desc = "A crate emblazoned with the standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/crate/nanotrasen + +/obj/structure/closet/crate/nanothreads + desc = "A crate emblazoned with the NanoThreads Garments livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/nanotrasenclothing + +/obj/structure/closet/crate/nanomed + desc = "A crate emblazoned with the NanoMed Medical livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/nanotrasenmedical + +/obj/structure/closet/crate/oculum + desc = "A crate minimally decorated with the logo of media giant Oculum Broadcast." + closet_appearance = /decl/closet_appearance/crate/oculum + +/obj/structure/closet/crate/veymed + desc = "A sterile crate extensively detailed in Veymed colours." + closet_appearance = /decl/closet_appearance/crate/veymed + +/obj/structure/closet/crate/ward + desc = "A crate decaled with the logo of Ward-Takahashi." + closet_appearance = /decl/closet_appearance/crate/ward + +/obj/structure/closet/crate/xion + desc = "A crate painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/crate/xion + +/obj/structure/closet/crate/zenghu + desc = "A sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." + closet_appearance = /decl/closet_appearance/crate/zenghu + +// Brands/subsidiaries + +/obj/structure/closet/crate/allico + desc = "A crate painted in the distinctive cheerful colours of AlliCo. Ltd." + closet_appearance = /decl/closet_appearance/crate/allico + +/obj/structure/closet/crate/carp + desc = "A crate painted with the garish livery of Consolidated Agricultural Resources Plc." + closet_appearance = /decl/closet_appearance/crate/carp + +/obj/structure/closet/crate/hedberg + name = "weapons crate" + desc = "A weapons crate stamped with the logo of Hedberg-Hammarstrom and the lock conspicuously absent." + closet_appearance = /decl/closet_appearance/crate/secure/hedberg + +/obj/structure/closet/crate/galaksi + desc = "A crate printed with the markings of Ward-Takahashi's Galaksi Appliance branding." + closet_appearance = /decl/closet_appearance/crate/galaksi + +/obj/structure/closet/crate/thinktronic + desc = "A crate printed with the markings of Thinktronic Systems." + closet_appearance = /decl/closet_appearance/crate/thinktronic + +/obj/structure/closet/crate/ummarcar + desc = "A flimsy crate marked labelled 'UmMarcar Office Supply'." + closet_appearance = /decl/closet_appearance/crate/ummarcar + +/obj/structure/closet/crate/unathi + name = "import crate" + desc = "A crate painted with the markings of Moghes Imported Sissalik Jerky." + closet_appearance = /decl/closet_appearance/crate/unathiimport + + +// Secure Crates + +/obj/structure/closet/crate/secure/weapon + name = "weapons crate" + desc = "A secure weapons crate." + closet_appearance = /decl/closet_appearance/crate/secure/weapon + +/obj/structure/closet/crate/secure/aether + desc = "A secure crate painted in the colours of Aether Atmospherics and Recycling." + closet_appearance = /decl/closet_appearance/crate/secure/aether + +/obj/structure/closet/crate/secure/bishop + desc = "A secure crate finely decorated with the emblem of Bishop Cybernetics." + closet_appearance = /decl/closet_appearance/crate/secure/bishop + +/obj/structure/closet/crate/secure/cybersolutions + desc = "An unadorned secure metal crate labelled 'Cyber Solutions'." + closet_appearance = /decl/closet_appearance/crate/secure/cybersolutions + +/obj/structure/closet/crate/secure/einstein + desc = "A secure crate labelled with an Einstein Engines sticker." + closet_appearance = /decl/closet_appearance/crate/secure/einstein + +/obj/structure/closet/crate/secure/focalpoint + desc = "A secure crate marked with the decal of Focal Point Energistics." + closet_appearance = /decl/closet_appearance/crate/secure/focalpoint + +/obj/structure/closet/crate/secure/gilthari + desc = "A secure crate embossed with the logo of Gilthari Exports." + closet_appearance = /decl/closet_appearance/crate/secure/gilthari + +/obj/structure/closet/crate/secure/grayson + desc = "A secure bare metal crate spraypainted with Grayson Manufactories decals." + closet_appearance = /decl/closet_appearance/crate/secure/grayson + +/obj/structure/closet/crate/secure/hedberg + name = "weapons crate" + desc = "A secure weapons crate stamped with the logo of Hedberg-Hammarstrom." + closet_appearance = /decl/closet_appearance/crate/secure/hedberg + +/obj/structure/closet/crate/secure/heph + name = "weapons crate" + desc = "A secure weapons crate marked with the logo of Hephaestus Industries." + closet_appearance = /decl/closet_appearance/crate/secure/heph + +/obj/structure/closet/crate/secure/lawson + name = "weapons crate" + desc = "A secure weapons crate marked with the logo of Lawson Arms." + closet_appearance = /decl/closet_appearance/crate/secure/lawson + +/obj/structure/closet/crate/secure/morpheus + desc = "A secure crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." + closet_appearance = /decl/closet_appearance/crate/secure/morpheus + +/obj/structure/closet/crate/secure/nanotrasen + desc = "A secure crate emblazoned with the standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/crate/secure/nanotrasen + +/obj/structure/closet/crate/secure/nanomed + desc = "A secure crate emblazoned with the NanoMed Medical livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/secure/nanotrasenmedical + +/obj/structure/closet/crate/secure/scg + name = "weapons crate" + desc = "A secure crate in the official colours of the Solar Confederate Government." + closet_appearance = /decl/closet_appearance/crate/secure/solgov + +/obj/structure/closet/crate/secure/saare + name = "weapons crate" + desc = "A secure weapons crate plainly stamped with the logo of Stealth Assault Enterprises." + closet_appearance = /decl/closet_appearance/crate/secure/saare + +/obj/structure/closet/crate/secure/veymed + desc = "A secure sterile crate extensively detailed in Veymed colours." + closet_appearance = /decl/closet_appearance/crate/secure/veymed + +/obj/structure/closet/crate/secure/ward + desc = "A secure crate decaled with the logo of Ward-Takahashi." + closet_appearance = /decl/closet_appearance/crate/secure/ward + +/obj/structure/closet/crate/secure/xion + desc = "A secure crate painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/crate/secure/xion + +/obj/structure/closet/crate/secure/zenghu + desc = "A secure sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." + closet_appearance = /decl/closet_appearance/crate/secure/zenghu + +/obj/structure/closet/crate/secure/phoron + name = "phoron crate" + desc = "A secure phoron crate painted in standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/crate/secure/hazard + +/obj/structure/closet/crate/secure/gear + name = "gear crate" + desc = "A secure gear crate." + closet_appearance = /decl/closet_appearance/crate/secure/weapon + +/obj/structure/closet/crate/secure/hydrosec + name = "secure hydroponics crate" + desc = "A crate with a lock on it, painted in the scheme of the station's botanists." + closet_appearance = /decl/closet_appearance/crate/secure/hydroponics + +/obj/structure/closet/crate/secure/engineering + desc = "A crate with a lock on it, painted in the scheme of the station's engineers." + name = "secure engineering crate" + +/obj/structure/closet/crate/secure/science + name = "secure science crate" + desc = "A crate with a lock on it, painted in the scheme of the station's scientists." + +/obj/structure/closet/crate/secure/bin + name = "secure bin" + desc = "A secure bin." + +// Large crates + +/obj/structure/closet/crate/large + name = "large crate" + desc = "A hefty metal crate." + icon = 'icons/obj/closets/bases/large_crate.dmi' + closet_appearance = /decl/closet_appearance/large_crate + +/obj/structure/closet/crate/large/close() + . = ..() + if (.)//we can hold up to one large item + var/found = 0 + for(var/obj/structure/S in src.loc) + if(S == src) + continue + if(!S.anchored) + found = 1 + S.forceMove(src) + break + if(!found) + for(var/obj/machinery/M in src.loc) + if(!M.anchored) + M.forceMove(src) + break + return + +/obj/structure/closet/crate/large/critter + name = "animal crate" + desc = "A hefty crate for hauling animals." + closet_appearance = /decl/closet_appearance/large_crate/critter + +/obj/structure/closet/crate/large/aether + name = "large atmospherics crate" + desc = "A hefty metal crate, painted in Aether Atmospherics and Recycling colours." + closet_appearance = /decl/closet_appearance/large_crate/aether + +/obj/structure/closet/crate/large/einstein + name = "large crate" + desc = "A hefty metal crate, painted in Einstein Engines colours." + closet_appearance = /decl/closet_appearance/large_crate/einstein + +/obj/structure/closet/crate/large/nanotrasen + name = "large crate" + desc = "A hefty metal crate, painted in standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/large_crate/nanotrasen + +/obj/structure/closet/crate/large/xion + name = "large crate" + desc = "A hefty metal crate, painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/large_crate/xion + +/obj/structure/closet/crate/secure/large + name = "large crate" + desc = "A hefty metal crate with an electronic locking system." + icon = 'icons/obj/closets/bases/large_crate.dmi' + closet_appearance = /decl/closet_appearance/large_crate/secure + + +/obj/structure/closet/crate/secure/large/close() + . = ..() + if (.)//we can hold up to one large item + var/found = 0 + for(var/obj/structure/S in src.loc) + if(S == src) + continue + if(!S.anchored) + found = 1 + S.forceMove(src) + break + if(!found) + for(var/obj/machinery/M in src.loc) + if(!M.anchored) + M.forceMove(src) + break + return + + +/obj/structure/closet/crate/secure/large/reinforced + desc = "A hefty, reinforced metal crate with an electronic locking system." + +/obj/structure/closet/crate/secure/large/aether + name = "secure atmospherics crate" + desc = "A hefty metal crate with an electronic locking system, painted in Aether Atmospherics and Recycling colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/aether + +/obj/structure/closet/crate/secure/large/einstein + desc = "A hefty metal crate with an electronic locking system, painted in Einstein Engines colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/einstein + +/obj/structure/closet/crate/large/secure/heph + desc = "A hefty metal crate with an electronic locking system, marked with Hephaestus Industries colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/heph + +/obj/structure/closet/crate/secure/large/nanotrasen + desc = "A hefty metal crate with an electronic locking system, painted in standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/large_crate/secure/hazard + +/obj/structure/closet/crate/large/secure/xion + desc = "A hefty metal crate with an electronic locking system, painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/large_crate/secure/xion + +/obj/structure/closet/crate/engineering + name = "engineering crate" + +/obj/structure/closet/crate/engineering/electrical + +/obj/structure/closet/crate/science + name = "science crate" + +/obj/structure/closet/crate/hydroponics + name = "hydroponics crate" + desc = "All you need to destroy those pesky weeds and pests." + closet_appearance = /decl/closet_appearance/crate/hydroponics + + +/obj/structure/closet/crate/hydroponics/prespawned + starts_with = list( + /obj/item/weapon/reagent_containers/spray/plantbgone = 2, + /obj/item/weapon/material/minihoe) + +//Laundry Cart +/obj/structure/closet/crate/laundry + name = "Laundry Cart" + desc = "A cart with a large fabric bin on it used for transporting large amounts of clothes." + icon = 'icons/obj/closets/laundry.dmi' + closet_appearance = null + open_sound = 'sound/effects/rustle1.ogg' + close_sound = 'sound/effects/rustle2.ogg' + +//Wooden Crate +/obj/structure/closet/crate/wooden + name = "wooden crate" + desc = "A crate made from wood and lined with straw. Cheapest form of storage." + icon = 'icons/obj/closets/wooden.dmi' + closet_appearance = null + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + +//Chest +/obj/structure/closet/crate/chest + name = "chest" + desc = "A fancy chest made from wood and lined with red velvet." + icon = 'icons/obj/closets/chest.dmi' + closet_appearance = null + open_sound = 'sound/effects/wooden_closet_open.ogg' + close_sound = 'sound/effects/wooden_closet_close.ogg' + +//Mining Cart +/obj/structure/closet/crate/miningcar + name = "mining cart" + desc = "A mining car. This one doesn't work on rails, but has to be dragged." + icon = 'icons/obj/closets/miningcar.dmi' + closet_appearance = null + open_sound = 'sound/effects/wooden_closet_open.ogg' close_sound = 'sound/effects/wooden_closet_close.ogg' \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index fdb658daac..d9902638ff 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -1,132 +1,132 @@ -/obj/structure/largecrate - name = "large crate" - desc = "A hefty wooden crate." - icon = 'icons/obj/storage.dmi' - icon_state = "densecrate" - density = TRUE - var/list/starts_with - -/obj/structure/largecrate/Initialize() - . = ..() - if(starts_with) - create_objects_in_loc(src, starts_with) - starts_with = null - for(var/obj/I in src.loc) - if(I.density || I.anchored || I == src || !I.simulated) - continue - I.forceMove(src) - update_icon() - -/obj/structure/largecrate/attack_hand(mob/user as mob) - to_chat(user, "You need a crowbar to pry this open!") - return - -/obj/structure/largecrate/attackby(obj/item/weapon/W as obj, mob/user as mob) - var/turf/T = get_turf(src) - if(!T) - to_chat(user, "You can't open this here!") - if(W.has_tool_quality(TOOL_CROWBAR)) - new /obj/item/stack/material/wood(src) - - for(var/atom/movable/AM in contents) - if(AM.simulated) - AM.forceMove(T) - //VOREStation Add Start - if(isanimal(AM)) - var/mob/living/simple_mob/AMBLINAL = AM - if(!AMBLINAL.mind) - AMBLINAL.ghostjoin = 1 - AMBLINAL.ghostjoin_icon() - active_ghost_pods |= AMBLINAL - //VOREStation Add End - user.visible_message("[user] pries \the [src] open.", \ - "You pry open \the [src].", \ - "You hear splitting wood.") - qdel(src) - else - return attack_hand(user) - -/obj/structure/largecrate/mule - name = "MULE crate" - -/obj/structure/largecrate/hoverpod - name = "\improper Hoverpod assembly crate" - desc = "You aren't sure how this crate is so light, but the Wulf Aeronautics logo might be a hint." - icon_state = "vehiclecrate" - -/obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_CROWBAR)) - var/obj/item/mecha_parts/mecha_equipment/ME - var/obj/mecha/working/hoverpod/H = new (loc) - - ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - ME.attach(H) - ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger - ME.attach(H) - ..() - -/obj/structure/largecrate/donksoftvendor - name = "\improper Donk-Soft vendor crate" - desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy." - starts_with = list(/obj/machinery/vending/donksoft) - -/obj/structure/largecrate/vehicle - name = "vehicle crate" - desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?" - icon_state = "vehiclecrate" - -/obj/structure/largecrate/vehicle/Initialize() - . = ..() - for(var/obj/O in contents) - O.update_icon() - -/obj/structure/largecrate/vehicle/bike - name = "spacebike crate" - starts_with = list(/obj/structure/vehiclecage/spacebike) - -/obj/structure/largecrate/vehicle/quadbike - name = "\improper ATV crate" - desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." - starts_with = list(/obj/structure/vehiclecage/quadbike) - -/obj/structure/largecrate/vehicle/quadtrailer - name = "\improper ATV trailer crate" - desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." - starts_with = list(/obj/structure/vehiclecage/quadtrailer) - -/obj/structure/largecrate/animal - icon_state = "crittercrate" - desc = "A hefty wooden crate with air holes. It is marked with the logo of NanoTrasen Pastures and the slogan, '90% less cloning defects* than competing brands**, or your money back***!'" - -/obj/structure/largecrate/animal/mulebot - name = "Mulebot crate" - desc = "A hefty wooden crate labelled 'Proud Product of the Xion Manufacturing Group'" - icon_state = "mulecrate" - starts_with = list(/mob/living/bot/mulebot) - -/obj/structure/largecrate/animal/corgi - name = "corgi carrier" - starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi) - -/obj/structure/largecrate/animal/cow - name = "cow crate" - starts_with = list(/mob/living/simple_mob/animal/passive/cow) - -/obj/structure/largecrate/animal/goat - name = "goat crate" - starts_with = list(/mob/living/simple_mob/animal/goat) - -/obj/structure/largecrate/animal/cat - name = "cat carrier" - starts_with = list(/mob/living/simple_mob/animal/passive/cat) - -/obj/structure/largecrate/animal/cat/bones - starts_with = list(/mob/living/simple_mob/animal/passive/cat/bones) - -/obj/structure/largecrate/animal/chick - name = "chicken crate" - starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5) - -/obj/structure/largecrate/animal/catslug - name = "catslug carrier" - starts_with = list(/mob/living/simple_mob/vore/alienanimals/catslug) +/obj/structure/largecrate + name = "large crate" + desc = "A hefty wooden crate." + icon = 'icons/obj/storage.dmi' + icon_state = "densecrate" + density = TRUE + var/list/starts_with + +/obj/structure/largecrate/Initialize() + . = ..() + if(starts_with) + create_objects_in_loc(src, starts_with) + starts_with = null + for(var/obj/I in src.loc) + if(I.density || I.anchored || I == src || !I.simulated) + continue + I.forceMove(src) + update_icon() + +/obj/structure/largecrate/attack_hand(mob/user as mob) + to_chat(user, "You need a crowbar to pry this open!") + return + +/obj/structure/largecrate/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/turf/T = get_turf(src) + if(!T) + to_chat(user, "You can't open this here!") + if(W.has_tool_quality(TOOL_CROWBAR)) + new /obj/item/stack/material/wood(src) + + for(var/atom/movable/AM in contents) + if(AM.simulated) + AM.forceMove(T) + //VOREStation Add Start + if(isanimal(AM)) + var/mob/living/simple_mob/AMBLINAL = AM + if(!AMBLINAL.mind) + AMBLINAL.ghostjoin = 1 + AMBLINAL.ghostjoin_icon() + active_ghost_pods |= AMBLINAL + //VOREStation Add End + user.visible_message("[user] pries \the [src] open.", \ + "You pry open \the [src].", \ + "You hear splitting wood.") + qdel(src) + else + return attack_hand(user) + +/obj/structure/largecrate/mule + name = "MULE crate" + +/obj/structure/largecrate/hoverpod + name = "\improper Hoverpod assembly crate" + desc = "You aren't sure how this crate is so light, but the Wulf Aeronautics logo might be a hint." + icon_state = "vehiclecrate" + +/obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_CROWBAR)) + var/obj/item/mecha_parts/mecha_equipment/ME + var/obj/mecha/working/hoverpod/H = new (loc) + + ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + ME.attach(H) + ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger + ME.attach(H) + ..() + +/obj/structure/largecrate/donksoftvendor + name = "\improper Donk-Soft vendor crate" + desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy." + starts_with = list(/obj/machinery/vending/donksoft) + +/obj/structure/largecrate/vehicle + name = "vehicle crate" + desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?" + icon_state = "vehiclecrate" + +/obj/structure/largecrate/vehicle/Initialize() + . = ..() + for(var/obj/O in contents) + O.update_icon() + +/obj/structure/largecrate/vehicle/bike + name = "spacebike crate" + starts_with = list(/obj/structure/vehiclecage/spacebike) + +/obj/structure/largecrate/vehicle/quadbike + name = "\improper ATV crate" + desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." + starts_with = list(/obj/structure/vehiclecage/quadbike) + +/obj/structure/largecrate/vehicle/quadtrailer + name = "\improper ATV trailer crate" + desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." + starts_with = list(/obj/structure/vehiclecage/quadtrailer) + +/obj/structure/largecrate/animal + icon_state = "crittercrate" + desc = "A hefty wooden crate with air holes. It is marked with the logo of NanoTrasen Pastures and the slogan, '90% less cloning defects* than competing brands**, or your money back***!'" + +/obj/structure/largecrate/animal/mulebot + name = "Mulebot crate" + desc = "A hefty wooden crate labelled 'Proud Product of the Xion Manufacturing Group'" + icon_state = "mulecrate" + starts_with = list(/mob/living/bot/mulebot) + +/obj/structure/largecrate/animal/corgi + name = "corgi carrier" + starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi) + +/obj/structure/largecrate/animal/cow + name = "cow crate" + starts_with = list(/mob/living/simple_mob/animal/passive/cow) + +/obj/structure/largecrate/animal/goat + name = "goat crate" + starts_with = list(/mob/living/simple_mob/animal/goat) + +/obj/structure/largecrate/animal/cat + name = "cat carrier" + starts_with = list(/mob/living/simple_mob/animal/passive/cat) + +/obj/structure/largecrate/animal/cat/bones + starts_with = list(/mob/living/simple_mob/animal/passive/cat/bones) + +/obj/structure/largecrate/animal/chick + name = "chicken crate" + starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5) + +/obj/structure/largecrate/animal/catslug + name = "catslug carrier" + starts_with = list(/mob/living/simple_mob/vore/alienanimals/catslug) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index fc1ae0ef59..362d966ae5 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -1,81 +1,81 @@ -/obj/structure/displaycase - name = "display case" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "glassbox1" - desc = "A display case for prized possessions. It taunts you to kick it." - density = TRUE - anchored = TRUE - unacidable = TRUE//Dissolving the case would also delete the gun. - var/health = 30 - var/occupied = 1 - var/destroyed = 0 - -/obj/structure/displaycase/ex_act(severity) - switch(severity) - if (1) - new /obj/item/weapon/material/shard( src.loc ) - if (occupied) - new /obj/item/weapon/gun/energy/captain( src.loc ) - occupied = 0 - qdel(src) - if (2) - if (prob(50)) - src.health -= 15 - src.healthcheck() - if (3) - if (prob(50)) - src.health -= 5 - src.healthcheck() - - -/obj/structure/displaycase/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() - ..() - src.healthcheck() - return - -/obj/structure/displaycase/proc/healthcheck() - if (src.health <= 0) - if (!( src.destroyed )) - src.density = FALSE - src.destroyed = 1 - new /obj/item/weapon/material/shard( src.loc ) - playsound(src, "shatter", 70, 1) - update_icon() - else - playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) - return - -/obj/structure/displaycase/update_icon() - if(src.destroyed) - src.icon_state = "glassboxb[src.occupied]" - else - src.icon_state = "glassbox[src.occupied]" - return - - -/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob) - user.setClickCooldown(user.get_attack_speed(W)) - user.do_attack_animation(src) - playsound(src, 'sound/effects/Glasshit.ogg', 50, 1) - src.health -= W.force - src.healthcheck() - ..() - return - -/obj/structure/displaycase/attack_hand(mob/user as mob) - if (src.destroyed && src.occupied) - new /obj/item/weapon/gun/energy/captain( src.loc ) - to_chat(user, "You deactivate the hover field built into the case.") - src.occupied = 0 - src.add_fingerprint(user) - update_icon() - return - else - to_chat(usr, "You kick the display case.") - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - to_chat(O, "[usr] kicks the display case.") - src.health -= 2 - healthcheck() - return +/obj/structure/displaycase + name = "display case" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "glassbox1" + desc = "A display case for prized possessions. It taunts you to kick it." + density = TRUE + anchored = TRUE + unacidable = TRUE//Dissolving the case would also delete the gun. + var/health = 30 + var/occupied = 1 + var/destroyed = 0 + +/obj/structure/displaycase/ex_act(severity) + switch(severity) + if (1) + new /obj/item/weapon/material/shard( src.loc ) + if (occupied) + new /obj/item/weapon/gun/energy/captain( src.loc ) + occupied = 0 + qdel(src) + if (2) + if (prob(50)) + src.health -= 15 + src.healthcheck() + if (3) + if (prob(50)) + src.health -= 5 + src.healthcheck() + + +/obj/structure/displaycase/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.get_structure_damage() + ..() + src.healthcheck() + return + +/obj/structure/displaycase/proc/healthcheck() + if (src.health <= 0) + if (!( src.destroyed )) + src.density = FALSE + src.destroyed = 1 + new /obj/item/weapon/material/shard( src.loc ) + playsound(src, "shatter", 70, 1) + update_icon() + else + playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) + return + +/obj/structure/displaycase/update_icon() + if(src.destroyed) + src.icon_state = "glassboxb[src.occupied]" + else + src.icon_state = "glassbox[src.occupied]" + return + + +/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob) + user.setClickCooldown(user.get_attack_speed(W)) + user.do_attack_animation(src) + playsound(src, 'sound/effects/Glasshit.ogg', 50, 1) + src.health -= W.force + src.healthcheck() + ..() + return + +/obj/structure/displaycase/attack_hand(mob/user as mob) + if (src.destroyed && src.occupied) + new /obj/item/weapon/gun/energy/captain( src.loc ) + to_chat(user, "You deactivate the hover field built into the case.") + src.occupied = 0 + src.add_fingerprint(user) + update_icon() + return + else + to_chat(usr, "You kick the display case.") + for(var/mob/O in oviewers()) + if ((O.client && !( O.blinded ))) + to_chat(O, "[usr] kicks the display case.") + src.health -= 2 + healthcheck() + return diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 6ca92a3b37..3a024f647b 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -1,329 +1,329 @@ -/obj/structure/door_assembly - name = "airlock assembly" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_as_0" - anchored = FALSE - density = TRUE - w_class = ITEMSIZE_HUGE - var/state = 0 - var/base_icon_state = "" - var/base_name = "airlock" - var/obj/item/weapon/airlock_electronics/electronics = null - var/airlock_type = "" //the type path of the airlock once completed - var/glass_type = "/glass" - var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead. - var/created_name = null - -/obj/structure/door_assembly/New() - update_state() - -/obj/structure/door_assembly/door_assembly_com - base_icon_state = "com" - base_name = "Command airlock" - glass_type = "/glass_command" - airlock_type = "/command" - -/obj/structure/door_assembly/door_assembly_sec - base_icon_state = "sec" - base_name = "Security airlock" - glass_type = "/glass_security" - airlock_type = "/security" - -/obj/structure/door_assembly/door_assembly_eng - base_icon_state = "eng" - base_name = "Engineering airlock" - glass_type = "/glass_engineering" - airlock_type = "/engineering" - -/obj/structure/door_assembly/door_assembly_eat - base_icon_state = "eat" - base_name = "Engineering atmos airlock" - glass_type = "/glass_engineeringatmos" - airlock_type = "/engineering" - -/obj/structure/door_assembly/door_assembly_min - base_icon_state = "min" - base_name = "Mining airlock" - glass_type = "/glass_mining" - airlock_type = "/mining" - -/obj/structure/door_assembly/door_assembly_atmo - base_icon_state = "atmo" - base_name = "Atmospherics airlock" - glass_type = "/glass_atmos" - airlock_type = "/atmos" - -/obj/structure/door_assembly/door_assembly_research - base_icon_state = "res" - base_name = "Research airlock" - glass_type = "/glass_research" - airlock_type = "/research" - -/obj/structure/door_assembly/door_assembly_science - base_icon_state = "sci" - base_name = "Science airlock" - glass_type = "/glass_science" - airlock_type = "/science" - -/obj/structure/door_assembly/door_assembly_med - base_icon_state = "med" - base_name = "Medical airlock" - glass_type = "/glass_medical" - airlock_type = "/medical" - -/obj/structure/door_assembly/door_assembly_ext - base_icon_state = "ext" - base_name = "External airlock" - glass_type = "/glass_external" - airlock_type = "/external" - -/obj/structure/door_assembly/door_assembly_mai - base_icon_state = "mai" - base_name = "Maintenance airlock" - airlock_type = "/maintenance" - glass = -1 - -/obj/structure/door_assembly/door_assembly_fre - base_icon_state = "fre" - base_name = "Freezer airlock" - airlock_type = "/freezer" - glass = -1 - -/obj/structure/door_assembly/door_assembly_hatch - base_icon_state = "hatch" - base_name = "airtight hatch" - airlock_type = "/hatch" - glass = -1 - -/obj/structure/door_assembly/door_assembly_mhatch - base_icon_state = "mhatch" - base_name = "maintenance hatch" - airlock_type = "/maintenance_hatch" - glass = -1 - -/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly - base_icon_state = "highsec" - base_name = "high security airlock" - airlock_type = "/highsecurity" - glass = -1 - -/obj/structure/door_assembly/door_assembly_voidcraft - base_icon_state = "voidcraft" - base_name = "voidcraft hatch" - airlock_type = "/voidcraft" - glass = -1 - -/obj/structure/door_assembly/door_assembly_voidcraft/vertical - base_icon_state = "voidcraft_vertical" - airlock_type = "/voidcraft/vertical" - -/obj/structure/door_assembly/door_assembly_alien - base_icon_state = "alien" - base_name = "alien airlock" - airlock_type = "/alien" - glass = -1 - -/obj/structure/door_assembly/multi_tile - icon = 'icons/obj/doors/door_assembly2x1.dmi' - dir = EAST - var/width = 1 - -/*Temporary until we get sprites. - glass_type = "/multi_tile/glass" - airlock_type = "/multi_tile/maint" - glass = 1*/ - base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1. - airlock_type = "/multi_tile/glass" - glass = -1 //To prevent bugs in deconstruction process. - -/obj/structure/door_assembly/multi_tile/New() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - update_state() - -/obj/structure/door_assembly/multi_tile/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - -/obj/structure/door_assembly/proc/rename_door(mob/living/user) - var/t = sanitizeSafe(tgui_input_text(user, "Enter the name for the [base_name].", src.name, src.created_name, MAX_NAME_LEN), MAX_NAME_LEN) - if(!in_range(src, user) && src.loc != user) return - created_name = t - update_state() - -/obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user) - if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ - || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. - rename_door(user) - -/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pen)) - rename_door(user) - return - - if(W.has_tool_quality(TOOL_WELDER) && ( (istext(glass)) || (glass == 1) || (!anchored) )) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if (WT.remove_fuel(0, user)) - playsound(src, WT.usesound, 50, 1) - if(istext(glass)) - user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the [glass] plating off!") - var/M = text2path("/obj/item/stack/material/[glass]") - new M(src.loc, 2) - glass = 0 - else if(glass == 1) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the glass panel out!") - new /obj/item/stack/material/glass/reinforced(src.loc) - glass = 0 - else if(!anchored) - user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src || !WT.isOn()) return - to_chat(user, "You dissasembled the airlock assembly!") - new /obj/item/stack/material/steel(src.loc, 4) - qdel (src) - else - to_chat(user, "You need more welding fuel.") - return - - else if(W.has_tool_quality(TOOL_WRENCH) && state == 0) - playsound(src, W.usesound, 100, 1) - if(anchored) - user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You starts unsecuring the airlock assembly from the floor.") - else - user.visible_message("[user] begins securing the airlock assembly to the floor.", "You starts securing the airlock assembly to the floor.") - - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured the airlock assembly!") - anchored = !anchored - - else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored) - var/obj/item/stack/cable_coil/C = W - if (C.get_amount() < 1) - to_chat(user, "You need one length of coil to wire the airlock assembly.") - return - user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && state == 0 && anchored) - if (C.use(1)) - src.state = 1 - to_chat(user, "You wire the airlock.") - - else if(W.has_tool_quality(TOOL_WIRECUTTER) && state == 1 ) - playsound(src, W.usesound, 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src) return - to_chat(user, "You cut the airlock wires.!") - new/obj/item/stack/cable_coil(src.loc, 1) - src.state = 0 - - else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1) - playsound(src, W.usesound, 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src) return - user.drop_item() - W.loc = src - to_chat(user, "You installed the airlock electronics!") - src.state = 2 - src.electronics = W - - else if(W.has_tool_quality(TOOL_CROWBAR) && state == 2 ) - //This should never happen, but just in case I guess - if (!electronics) - to_chat(user, "There was nothing to remove.") - src.state = 1 - return - - playsound(src, W.usesound, 100, 1) - user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.") - - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src) return - to_chat(user, "You removed the airlock electronics!") - src.state = 1 - electronics.loc = src.loc - electronics = null - - else if(istype(W, /obj/item/stack/material) && !glass) - var/obj/item/stack/S = W - var/material_name = S.get_material_name() - if (S) - if (S.get_amount() >= 1) - if(material_name == "rglass") - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) - if (S.use(1)) - to_chat(user, "You installed reinforced glass windows into the airlock assembly.") - glass = 1 - else if(material_name) - // Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z - if(!(material_name in list("gold", "silver", "diamond", "uranium", "phoron", "sandstone"))) - to_chat(user, "You cannot make an airlock out of that material.") - return - if(S.get_amount() >= 2) - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) - if (S.use(2)) - to_chat(user, "You installed [material_display_name(material_name)] plating into the airlock assembly.") - glass = material_name - - else if(W.has_tool_quality(TOOL_SCREWDRIVER) && state == 2 ) - playsound(src, W.usesound, 100, 1) - to_chat(user, "Now finishing the airlock.") - - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) - if(!src) return - to_chat(user, "You finish the airlock!") - var/path - if(istext(glass)) - path = text2path("/obj/machinery/door/airlock/[glass]") - else if (glass == 1) - path = text2path("/obj/machinery/door/airlock[glass_type]") - else - path = text2path("/obj/machinery/door/airlock[airlock_type]") - - new path(src.loc, src) - qdel(src) - else - ..() - update_state() - -/obj/structure/door_assembly/proc/update_state() - icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]" - name = "" - switch (state) - if(0) - if (anchored) - name = "secured " - if(1) - name = "wired " - if(2) - name = "near finished " - name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])" - -// Airlock frames are indestructable, so bullets hitting them would always be stopped. -// To fix this, airlock assemblies will sometimes let bullets pass through, since generally the sprite shows them partially open. -/obj/structure/door_assembly/bullet_act(var/obj/item/projectile/P) - if(prob(40)) // Chance for the frame to let the bullet keep going. - return PROJECTILE_CONTINUE - return ..() +/obj/structure/door_assembly + name = "airlock assembly" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_as_0" + anchored = FALSE + density = TRUE + w_class = ITEMSIZE_HUGE + var/state = 0 + var/base_icon_state = "" + var/base_name = "airlock" + var/obj/item/weapon/airlock_electronics/electronics = null + var/airlock_type = "" //the type path of the airlock once completed + var/glass_type = "/glass" + var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead. + var/created_name = null + +/obj/structure/door_assembly/New() + update_state() + +/obj/structure/door_assembly/door_assembly_com + base_icon_state = "com" + base_name = "Command airlock" + glass_type = "/glass_command" + airlock_type = "/command" + +/obj/structure/door_assembly/door_assembly_sec + base_icon_state = "sec" + base_name = "Security airlock" + glass_type = "/glass_security" + airlock_type = "/security" + +/obj/structure/door_assembly/door_assembly_eng + base_icon_state = "eng" + base_name = "Engineering airlock" + glass_type = "/glass_engineering" + airlock_type = "/engineering" + +/obj/structure/door_assembly/door_assembly_eat + base_icon_state = "eat" + base_name = "Engineering atmos airlock" + glass_type = "/glass_engineeringatmos" + airlock_type = "/engineering" + +/obj/structure/door_assembly/door_assembly_min + base_icon_state = "min" + base_name = "Mining airlock" + glass_type = "/glass_mining" + airlock_type = "/mining" + +/obj/structure/door_assembly/door_assembly_atmo + base_icon_state = "atmo" + base_name = "Atmospherics airlock" + glass_type = "/glass_atmos" + airlock_type = "/atmos" + +/obj/structure/door_assembly/door_assembly_research + base_icon_state = "res" + base_name = "Research airlock" + glass_type = "/glass_research" + airlock_type = "/research" + +/obj/structure/door_assembly/door_assembly_science + base_icon_state = "sci" + base_name = "Science airlock" + glass_type = "/glass_science" + airlock_type = "/science" + +/obj/structure/door_assembly/door_assembly_med + base_icon_state = "med" + base_name = "Medical airlock" + glass_type = "/glass_medical" + airlock_type = "/medical" + +/obj/structure/door_assembly/door_assembly_ext + base_icon_state = "ext" + base_name = "External airlock" + glass_type = "/glass_external" + airlock_type = "/external" + +/obj/structure/door_assembly/door_assembly_mai + base_icon_state = "mai" + base_name = "Maintenance airlock" + airlock_type = "/maintenance" + glass = -1 + +/obj/structure/door_assembly/door_assembly_fre + base_icon_state = "fre" + base_name = "Freezer airlock" + airlock_type = "/freezer" + glass = -1 + +/obj/structure/door_assembly/door_assembly_hatch + base_icon_state = "hatch" + base_name = "airtight hatch" + airlock_type = "/hatch" + glass = -1 + +/obj/structure/door_assembly/door_assembly_mhatch + base_icon_state = "mhatch" + base_name = "maintenance hatch" + airlock_type = "/maintenance_hatch" + glass = -1 + +/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly + base_icon_state = "highsec" + base_name = "high security airlock" + airlock_type = "/highsecurity" + glass = -1 + +/obj/structure/door_assembly/door_assembly_voidcraft + base_icon_state = "voidcraft" + base_name = "voidcraft hatch" + airlock_type = "/voidcraft" + glass = -1 + +/obj/structure/door_assembly/door_assembly_voidcraft/vertical + base_icon_state = "voidcraft_vertical" + airlock_type = "/voidcraft/vertical" + +/obj/structure/door_assembly/door_assembly_alien + base_icon_state = "alien" + base_name = "alien airlock" + airlock_type = "/alien" + glass = -1 + +/obj/structure/door_assembly/multi_tile + icon = 'icons/obj/doors/door_assembly2x1.dmi' + dir = EAST + var/width = 1 + +/*Temporary until we get sprites. + glass_type = "/multi_tile/glass" + airlock_type = "/multi_tile/maint" + glass = 1*/ + base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1. + airlock_type = "/multi_tile/glass" + glass = -1 //To prevent bugs in deconstruction process. + +/obj/structure/door_assembly/multi_tile/New() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + update_state() + +/obj/structure/door_assembly/multi_tile/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + +/obj/structure/door_assembly/proc/rename_door(mob/living/user) + var/t = sanitizeSafe(tgui_input_text(user, "Enter the name for the [base_name].", src.name, src.created_name, MAX_NAME_LEN), MAX_NAME_LEN) + if(!in_range(src, user) && src.loc != user) return + created_name = t + update_state() + +/obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user) + if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ + || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. + rename_door(user) + +/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen)) + rename_door(user) + return + + if(W.has_tool_quality(TOOL_WELDER) && ( (istext(glass)) || (glass == 1) || (!anchored) )) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if (WT.remove_fuel(0, user)) + playsound(src, WT.usesound, 50, 1) + if(istext(glass)) + user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") + if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src || !WT.isOn()) return + to_chat(user, "You welded the [glass] plating off!") + var/M = text2path("/obj/item/stack/material/[glass]") + new M(src.loc, 2) + glass = 0 + else if(glass == 1) + user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") + if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src || !WT.isOn()) return + to_chat(user, "You welded the glass panel out!") + new /obj/item/stack/material/glass/reinforced(src.loc) + glass = 0 + else if(!anchored) + user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") + if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src || !WT.isOn()) return + to_chat(user, "You dissasembled the airlock assembly!") + new /obj/item/stack/material/steel(src.loc, 4) + qdel (src) + else + to_chat(user, "You need more welding fuel.") + return + + else if(W.has_tool_quality(TOOL_WRENCH) && state == 0) + playsound(src, W.usesound, 100, 1) + if(anchored) + user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You starts unsecuring the airlock assembly from the floor.") + else + user.visible_message("[user] begins securing the airlock assembly to the floor.", "You starts securing the airlock assembly to the floor.") + + if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured the airlock assembly!") + anchored = !anchored + + else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 1) + to_chat(user, "You need one length of coil to wire the airlock assembly.") + return + user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") + if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && state == 0 && anchored) + if (C.use(1)) + src.state = 1 + to_chat(user, "You wire the airlock.") + + else if(W.has_tool_quality(TOOL_WIRECUTTER) && state == 1 ) + playsound(src, W.usesound, 100, 1) + user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") + + if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src) return + to_chat(user, "You cut the airlock wires.!") + new/obj/item/stack/cable_coil(src.loc, 1) + src.state = 0 + + else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1) + playsound(src, W.usesound, 100, 1) + user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") + + if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src) return + user.drop_item() + W.loc = src + to_chat(user, "You installed the airlock electronics!") + src.state = 2 + src.electronics = W + + else if(W.has_tool_quality(TOOL_CROWBAR) && state == 2 ) + //This should never happen, but just in case I guess + if (!electronics) + to_chat(user, "There was nothing to remove.") + src.state = 1 + return + + playsound(src, W.usesound, 100, 1) + user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.") + + if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src) return + to_chat(user, "You removed the airlock electronics!") + src.state = 1 + electronics.loc = src.loc + electronics = null + + else if(istype(W, /obj/item/stack/material) && !glass) + var/obj/item/stack/S = W + var/material_name = S.get_material_name() + if (S) + if (S.get_amount() >= 1) + if(material_name == "rglass") + playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") + if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) + if (S.use(1)) + to_chat(user, "You installed reinforced glass windows into the airlock assembly.") + glass = 1 + else if(material_name) + // Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z + if(!(material_name in list("gold", "silver", "diamond", "uranium", "phoron", "sandstone"))) + to_chat(user, "You cannot make an airlock out of that material.") + return + if(S.get_amount() >= 2) + playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") + if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) + if (S.use(2)) + to_chat(user, "You installed [material_display_name(material_name)] plating into the airlock assembly.") + glass = material_name + + else if(W.has_tool_quality(TOOL_SCREWDRIVER) && state == 2 ) + playsound(src, W.usesound, 100, 1) + to_chat(user, "Now finishing the airlock.") + + if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(!src) return + to_chat(user, "You finish the airlock!") + var/path + if(istext(glass)) + path = text2path("/obj/machinery/door/airlock/[glass]") + else if (glass == 1) + path = text2path("/obj/machinery/door/airlock[glass_type]") + else + path = text2path("/obj/machinery/door/airlock[airlock_type]") + + new path(src.loc, src) + qdel(src) + else + ..() + update_state() + +/obj/structure/door_assembly/proc/update_state() + icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]" + name = "" + switch (state) + if(0) + if (anchored) + name = "secured " + if(1) + name = "wired " + if(2) + name = "near finished " + name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])" + +// Airlock frames are indestructable, so bullets hitting them would always be stopped. +// To fix this, airlock assemblies will sometimes let bullets pass through, since generally the sprite shows them partially open. +/obj/structure/door_assembly/bullet_act(var/obj/item/projectile/P) + if(prob(40)) // Chance for the frame to let the bullet keep going. + return PROJECTILE_CONTINUE + return ..() diff --git a/code/game/objects/structures/fitness_vr.dm b/code/game/objects/structures/fitness_vr.dm index 0eeaf62196..38b96ec8e8 100644 --- a/code/game/objects/structures/fitness_vr.dm +++ b/code/game/objects/structures/fitness_vr.dm @@ -1,74 +1,74 @@ -/obj/structure/fitness/boxing_ropes - name = "ropes" - desc = "Firm yet springy, perhaps this could be useful!" - icon = 'icons/obj/fitness_vr.dmi' - icon_state = "ropes" - density = TRUE - throwpass = TRUE - climbable = TRUE - layer = WINDOW_LAYER - anchored = TRUE - flags = ON_BORDER - -/obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSTABLE)) - return TRUE - if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir - return !density - return TRUE - -/obj/structure/fitness/boxing_ropes/Uncross(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSTABLE)) - return TRUE - if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir - return !density - return TRUE -/obj/structure/fitness/boxing_ropes/do_climb(var/mob/living/user) //Sets it so that players can climb *over* the turf and will enter the the turf **this** turf is facing. - if(!can_climb(user)) - return - - usr.visible_message("[user] starts climbing onto \the [src]!") - LAZYDISTINCTADD(climbers, user) - - if(!do_after(user,(issmall(user) ? 20 : 34))) - LAZYREMOVE(climbers, user) - return - - if(!can_climb(user, post_climb_check=1)) - LAZYREMOVE(climbers, user) - return - - if(get_turf(user) == get_turf(src)) - usr.forceMove(get_step(src, src.dir)) - else - usr.forceMove(get_turf(src)) - - usr.visible_message("[user] climbed over \the [src]!") - LAZYREMOVE(climbers, user) - -/obj/structure/fitness/boxing_ropes/can_climb(var/mob/living/user, post_climb_check=0) //Sets it to keep people from climbing over into the next turf if it is occupied. - if(!..()) - return 0 - - if(get_turf(user) == get_turf(src)) - var/obj/occupied = neighbor_turf_impassable() - if(occupied) - to_chat(user, "You can't climb there, there's \a [occupied] in the way.") - return 0 - return 1 - -/obj/structure/fitness/boxing_ropes/bottom - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - -/obj/structure/fitness/boxing_ropes/turnbuckle - name = "turnbuckle" - desc = "A sturdy post that looks like it could support even the most heaviest of heavy weights!" - icon = 'icons/obj/fitness_vr.dmi' - icon_state = "turnbuckle" - layer = WINDOW_LAYER - -/turf/simulated/fitness - name = "Mat" - icon = 'icons/turf/floors_vr.dmi' +/obj/structure/fitness/boxing_ropes + name = "ropes" + desc = "Firm yet springy, perhaps this could be useful!" + icon = 'icons/obj/fitness_vr.dmi' + icon_state = "ropes" + density = TRUE + throwpass = TRUE + climbable = TRUE + layer = WINDOW_LAYER + anchored = TRUE + flags = ON_BORDER + +/obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir + return !density + return TRUE + +/obj/structure/fitness/boxing_ropes/Uncross(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir + return !density + return TRUE +/obj/structure/fitness/boxing_ropes/do_climb(var/mob/living/user) //Sets it so that players can climb *over* the turf and will enter the the turf **this** turf is facing. + if(!can_climb(user)) + return + + usr.visible_message("[user] starts climbing onto \the [src]!") + LAZYDISTINCTADD(climbers, user) + + if(!do_after(user,(issmall(user) ? 20 : 34))) + LAZYREMOVE(climbers, user) + return + + if(!can_climb(user, post_climb_check=1)) + LAZYREMOVE(climbers, user) + return + + if(get_turf(user) == get_turf(src)) + usr.forceMove(get_step(src, src.dir)) + else + usr.forceMove(get_turf(src)) + + usr.visible_message("[user] climbed over \the [src]!") + LAZYREMOVE(climbers, user) + +/obj/structure/fitness/boxing_ropes/can_climb(var/mob/living/user, post_climb_check=0) //Sets it to keep people from climbing over into the next turf if it is occupied. + if(!..()) + return 0 + + if(get_turf(user) == get_turf(src)) + var/obj/occupied = neighbor_turf_impassable() + if(occupied) + to_chat(user, "You can't climb there, there's \a [occupied] in the way.") + return 0 + return 1 + +/obj/structure/fitness/boxing_ropes/bottom + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + +/obj/structure/fitness/boxing_ropes/turnbuckle + name = "turnbuckle" + desc = "A sturdy post that looks like it could support even the most heaviest of heavy weights!" + icon = 'icons/obj/fitness_vr.dmi' + icon_state = "turnbuckle" + layer = WINDOW_LAYER + +/turf/simulated/fitness + name = "Mat" + icon = 'icons/turf/floors_vr.dmi' icon_state = "fit_mat" \ No newline at end of file diff --git a/code/game/objects/structures/flora/moretrees_vr.dm b/code/game/objects/structures/flora/moretrees_vr.dm index c14cd7522c..6541fda802 100644 --- a/code/game/objects/structures/flora/moretrees_vr.dm +++ b/code/game/objects/structures/flora/moretrees_vr.dm @@ -1,32 +1,32 @@ -/obj/structure/flora/tree/bigtree - icon = 'icons/obj/flora/moretrees_vr.dmi' - icon_state = "bigtree1" - base_state = "tree" - product = /obj/item/stack/material/log - product_amount = 20 - health = 400 - max_health = 400 - pixel_x = -65 - pixel_y = -8 - layer = MOB_LAYER - 1 - shake_animation_degrees = 2 - -/obj/structure/flora/tree/bigtree/choose_icon_state() - return "[base_state][rand(1, 4)]" - -/obj/structure/flora/tree/bigtree/Initialize() - . = ..() - - var/image/i = image('icons/obj/flora/moretrees_vr.dmi', "[icon_state]-b") - i.plane = ABOVE_MOB_PLANE - add_overlay(i) - -/obj/structure/flora/tree/bigtree/stump() - if(is_stump) - return - - is_stump = TRUE - density = FALSE - icon_state = "[icon_state]_stump" - cut_overlays() +/obj/structure/flora/tree/bigtree + icon = 'icons/obj/flora/moretrees_vr.dmi' + icon_state = "bigtree1" + base_state = "tree" + product = /obj/item/stack/material/log + product_amount = 20 + health = 400 + max_health = 400 + pixel_x = -65 + pixel_y = -8 + layer = MOB_LAYER - 1 + shake_animation_degrees = 2 + +/obj/structure/flora/tree/bigtree/choose_icon_state() + return "[base_state][rand(1, 4)]" + +/obj/structure/flora/tree/bigtree/Initialize() + . = ..() + + var/image/i = image('icons/obj/flora/moretrees_vr.dmi', "[icon_state]-b") + i.plane = ABOVE_MOB_PLANE + add_overlay(i) + +/obj/structure/flora/tree/bigtree/stump() + if(is_stump) + return + + is_stump = TRUE + density = FALSE + icon_state = "[icon_state]_stump" + cut_overlays() set_light(0) \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 271e52b114..e24b90b986 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -1,290 +1,290 @@ -/obj/structure/grille - name = "grille" - desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." - icon = 'modular_chomp/icons/obj/structures.dmi' //CHOMPEdit - icon_state = "grille" - density = TRUE - anchored = TRUE - pressure_resistance = 5*ONE_ATMOSPHERE - layer = TABLE_LAYER - explosion_resistance = 1 - var/health = 10 - var/destroyed = 0 - - -/obj/structure/grille/ex_act(severity) - qdel(src) - -/obj/structure/grille/update_icon() - if(destroyed) - icon_state = "[initial(icon_state)]-b" - else - icon_state = initial(icon_state) - -/obj/structure/grille/Bumped(atom/user) - if(ismob(user)) shock(user, 70) - -/obj/structure/grille/attack_hand(mob/user as mob) - - user.setClickCooldown(user.get_attack_speed()) - playsound(src, 'sound/effects/grillehit.ogg', 80, 1) - user.do_attack_animation(src) - - var/damage_dealt = 1 - var/attack_message = "kicks" - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_message = "mangles" - damage_dealt = 5 - - if(shock(user, 70)) - return - - if(HULK in user.mutations) - damage_dealt += 5 - else - damage_dealt += 1 - - attack_generic(user,damage_dealt,attack_message) - -/obj/structure/grille/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGRILLE)) - return TRUE - if(istype(mover, /obj/item/projectile)) - return prob(30) - return !density - -/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) - if(!Proj) return - - //Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact - var/damage = Proj.get_structure_damage() - var/passthrough = 0 - - if(!damage) return - - //20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area. - //If they click on the grille itself then we assume they are aiming at the grille itself and the extra cover behaviour is always used. - switch(Proj.damage_type) - if(BRUTE) - //bullets - if(Proj.original == src || prob(20)) - Proj.damage *= between(0, Proj.damage/60, 0.5) - if(prob(max((damage-10)/25, 0))*100) - passthrough = 1 - else - Proj.damage *= between(0, Proj.damage/60, 1) - passthrough = 1 - if(BURN) - //beams and other projectiles are either blocked completely by grilles or stop half the damage. - if(!(Proj.original == src || prob(20))) - Proj.damage *= 0.5 - passthrough = 1 - - if(passthrough) - . = PROJECTILE_CONTINUE - damage = between(0, (damage - Proj.damage)*(Proj.damage_type == BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage - - src.health -= damage*0.2 - spawn(0) healthcheck() //spawn to make sure we return properly if the grille is deleted - -/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) - return - if(istype(W, /obj/item/weapon/rcd)) // To stop us from hitting the grille when building windows, because grilles don't let parent handle it properly. - return FALSE - else if(W.has_tool_quality(TOOL_WIRECUTTER)) - if(!shock(user, 100)) - playsound(src, W.usesound, 100, 1) - new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) - qdel(src) - else if((W.has_tool_quality(TOOL_SCREWDRIVER)) && (istype(loc, /turf/simulated) || anchored)) - if(!shock(user, 90)) - playsound(src, W.usesound, 100, 1) - anchored = !anchored - user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille.", \ - "You have [anchored ? "fastened the grille to" : "unfastened the grille from"] the floor.") - return - - //window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM - else if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/ST = W - if(!ST.material.created_window) - return 0 - - var/dir_to_set = 1 - if(loc == user.loc) - dir_to_set = user.dir - else - if( ( x == user.x ) || (y == user.y) ) //Only supposed to work for cardinal directions. - if( x == user.x ) - if( y > user.y ) - dir_to_set = 2 - else - dir_to_set = 1 - else if( y == user.y ) - if( x > user.x ) - dir_to_set = 8 - else - dir_to_set = 4 - else - to_chat(user, "You can't reach.") - return //Only works for cardinal direcitons, diagonals aren't supposed to work like this. - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set) - to_chat(user, "There is already a window facing this way there.") - return - to_chat(user, "You start placing the window.") - if(do_after(user,20)) - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. - to_chat(user, "There is already a window facing this way there.") - return - - var/wtype = ST.material.created_window - if (ST.use(1)) - var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1) - to_chat(user, "You place the [WD] on [src].") - WD.update_icon() - return -//window placing end - - else if((W.flags & NOCONDUCT) || !shock(user, 70)) - user.setClickCooldown(user.get_attack_speed(W)) - user.do_attack_animation(src) - playsound(src, 'sound/effects/grillehit.ogg', 80, 1) - switch(W.damtype) - if("fire") - health -= W.force - if("brute") - health -= W.force * 0.1 - healthcheck() - ..() - return - - -/obj/structure/grille/proc/healthcheck() - if(health <= 0) - if(!destroyed) - density = FALSE - destroyed = 1 - update_icon() - new /obj/item/stack/rods(get_turf(src)) - - else - if(health <= -6) - new /obj/item/stack/rods(get_turf(src)) - qdel(src) - return - return - -// shock user with probability prb (if all connections & power are working) -// returns 1 if shocked, 0 otherwise - -/obj/structure/grille/proc/shock(mob/user as mob, prb) - - if(!anchored || destroyed) // anchored/destroyed grilles are never connected - return 0 - if(!prob(prb)) - return 0 - if(!in_range(src, user))//To prevent TK and mech users from getting shocked - return 0 - var/turf/T = get_turf(src) - var/obj/structure/cable/C = T.get_cable_node() - if(C) - if(electrocute_mob(user, C, src)) - if(C.powernet) - C.powernet.trigger_warning() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - if(user.stunned) - return 1 - else - return 0 - return 0 - -/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(!destroyed) - if(exposed_temperature > T0C + 1500) - health -= 1 - healthcheck() - ..() - -/obj/structure/grille/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - user.do_attack_animation(src) - health -= damage - spawn(1) healthcheck() - return 1 - -// Used in mapping to avoid -/obj/structure/grille/broken - destroyed = 1 - icon_state = "grille-b" - density = FALSE - -/obj/structure/grille/broken/New() - ..() - health = rand(-5, -1) //In the destroyed but not utterly threshold. - healthcheck() //Send this to healthcheck just in case we want to do something else with it. - -/obj/structure/grille/cult - name = "cult grille" - desc = "A matrice built out of an unknown material, with some sort of force field blocking air around it." - icon_state = "grillecult" - health = 40 // Make it strong enough to avoid people breaking in too easily. - can_atmos_pass = ATMOS_PASS_NO // Make sure air doesn't drain. - -/obj/structure/grille/broken/cult - icon_state = "grillecult-b" - -/obj/structure/grille/rustic - name = "rustic grille" - desc = "A lattice of metal, arranged in an old, rustic fashion." - icon_state = "grillerustic" - -/obj/structure/grille/broken/rustic - icon_state = "grillerustic-b" - -/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm -/obj/structure/grille/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_WINDOWGRILLE) - // A full tile window costs 4 glass sheets. - return list( - RCD_VALUE_MODE = RCD_WINDOWGRILLE, - RCD_VALUE_DELAY = 2 SECONDS, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 4 - ) - - if(RCD_DECONSTRUCT) - return list( - RCD_VALUE_MODE = RCD_DECONSTRUCT, - RCD_VALUE_DELAY = 2 SECONDS, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 2 - ) - return FALSE - -/obj/structure/grille/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - to_chat(user, span("notice", "You deconstruct \the [src].")) - qdel(src) - return TRUE - if(RCD_WINDOWGRILLE) - if(locate(/obj/structure/window) in loc) - return FALSE - to_chat(user, span("notice", "You construct a window.")) - var/obj/structure/window/WD = new the_rcd.window_type(loc) - WD.anchored = TRUE - return TRUE - return FALSE -*/ - -/obj/structure/grille/take_damage(var/damage) - health -= damage - spawn(1) healthcheck() - return 1 - +/obj/structure/grille + name = "grille" + desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." + icon = 'modular_chomp/icons/obj/structures.dmi' //CHOMPEdit + icon_state = "grille" + density = TRUE + anchored = TRUE + pressure_resistance = 5*ONE_ATMOSPHERE + layer = TABLE_LAYER + explosion_resistance = 1 + var/health = 10 + var/destroyed = 0 + + +/obj/structure/grille/ex_act(severity) + qdel(src) + +/obj/structure/grille/update_icon() + if(destroyed) + icon_state = "[initial(icon_state)]-b" + else + icon_state = initial(icon_state) + +/obj/structure/grille/Bumped(atom/user) + if(ismob(user)) shock(user, 70) + +/obj/structure/grille/attack_hand(mob/user as mob) + + user.setClickCooldown(user.get_attack_speed()) + playsound(src, 'sound/effects/grillehit.ogg', 80, 1) + user.do_attack_animation(src) + + var/damage_dealt = 1 + var/attack_message = "kicks" + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.can_shred(H)) + attack_message = "mangles" + damage_dealt = 5 + + if(shock(user, 70)) + return + + if(HULK in user.mutations) + damage_dealt += 5 + else + damage_dealt += 1 + + attack_generic(user,damage_dealt,attack_message) + +/obj/structure/grille/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGRILLE)) + return TRUE + if(istype(mover, /obj/item/projectile)) + return prob(30) + return !density + +/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) return + + //Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact + var/damage = Proj.get_structure_damage() + var/passthrough = 0 + + if(!damage) return + + //20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area. + //If they click on the grille itself then we assume they are aiming at the grille itself and the extra cover behaviour is always used. + switch(Proj.damage_type) + if(BRUTE) + //bullets + if(Proj.original == src || prob(20)) + Proj.damage *= between(0, Proj.damage/60, 0.5) + if(prob(max((damage-10)/25, 0))*100) + passthrough = 1 + else + Proj.damage *= between(0, Proj.damage/60, 1) + passthrough = 1 + if(BURN) + //beams and other projectiles are either blocked completely by grilles or stop half the damage. + if(!(Proj.original == src || prob(20))) + Proj.damage *= 0.5 + passthrough = 1 + + if(passthrough) + . = PROJECTILE_CONTINUE + damage = between(0, (damage - Proj.damage)*(Proj.damage_type == BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage + + src.health -= damage*0.2 + spawn(0) healthcheck() //spawn to make sure we return properly if the grille is deleted + +/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) + if(!istype(W)) + return + if(istype(W, /obj/item/weapon/rcd)) // To stop us from hitting the grille when building windows, because grilles don't let parent handle it properly. + return FALSE + else if(W.has_tool_quality(TOOL_WIRECUTTER)) + if(!shock(user, 100)) + playsound(src, W.usesound, 100, 1) + new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) + qdel(src) + else if((W.has_tool_quality(TOOL_SCREWDRIVER)) && (istype(loc, /turf/simulated) || anchored)) + if(!shock(user, 90)) + playsound(src, W.usesound, 100, 1) + anchored = !anchored + user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille.", \ + "You have [anchored ? "fastened the grille to" : "unfastened the grille from"] the floor.") + return + + //window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM + else if(istype(W,/obj/item/stack/material)) + var/obj/item/stack/material/ST = W + if(!ST.material.created_window) + return 0 + + var/dir_to_set = 1 + if(loc == user.loc) + dir_to_set = user.dir + else + if( ( x == user.x ) || (y == user.y) ) //Only supposed to work for cardinal directions. + if( x == user.x ) + if( y > user.y ) + dir_to_set = 2 + else + dir_to_set = 1 + else if( y == user.y ) + if( x > user.x ) + dir_to_set = 8 + else + dir_to_set = 4 + else + to_chat(user, "You can't reach.") + return //Only works for cardinal direcitons, diagonals aren't supposed to work like this. + for(var/obj/structure/window/WINDOW in loc) + if(WINDOW.dir == dir_to_set) + to_chat(user, "There is already a window facing this way there.") + return + to_chat(user, "You start placing the window.") + if(do_after(user,20)) + for(var/obj/structure/window/WINDOW in loc) + if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. + to_chat(user, "There is already a window facing this way there.") + return + + var/wtype = ST.material.created_window + if (ST.use(1)) + var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1) + to_chat(user, "You place the [WD] on [src].") + WD.update_icon() + return +//window placing end + + else if((W.flags & NOCONDUCT) || !shock(user, 70)) + user.setClickCooldown(user.get_attack_speed(W)) + user.do_attack_animation(src) + playsound(src, 'sound/effects/grillehit.ogg', 80, 1) + switch(W.damtype) + if("fire") + health -= W.force + if("brute") + health -= W.force * 0.1 + healthcheck() + ..() + return + + +/obj/structure/grille/proc/healthcheck() + if(health <= 0) + if(!destroyed) + density = FALSE + destroyed = 1 + update_icon() + new /obj/item/stack/rods(get_turf(src)) + + else + if(health <= -6) + new /obj/item/stack/rods(get_turf(src)) + qdel(src) + return + return + +// shock user with probability prb (if all connections & power are working) +// returns 1 if shocked, 0 otherwise + +/obj/structure/grille/proc/shock(mob/user as mob, prb) + + if(!anchored || destroyed) // anchored/destroyed grilles are never connected + return 0 + if(!prob(prb)) + return 0 + if(!in_range(src, user))//To prevent TK and mech users from getting shocked + return 0 + var/turf/T = get_turf(src) + var/obj/structure/cable/C = T.get_cable_node() + if(C) + if(electrocute_mob(user, C, src)) + if(C.powernet) + C.powernet.trigger_warning() + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + if(user.stunned) + return 1 + else + return 0 + return 0 + +/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(!destroyed) + if(exposed_temperature > T0C + 1500) + health -= 1 + healthcheck() + ..() + +/obj/structure/grille/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + user.do_attack_animation(src) + health -= damage + spawn(1) healthcheck() + return 1 + +// Used in mapping to avoid +/obj/structure/grille/broken + destroyed = 1 + icon_state = "grille-b" + density = FALSE + +/obj/structure/grille/broken/New() + ..() + health = rand(-5, -1) //In the destroyed but not utterly threshold. + healthcheck() //Send this to healthcheck just in case we want to do something else with it. + +/obj/structure/grille/cult + name = "cult grille" + desc = "A matrice built out of an unknown material, with some sort of force field blocking air around it." + icon_state = "grillecult" + health = 40 // Make it strong enough to avoid people breaking in too easily. + can_atmos_pass = ATMOS_PASS_NO // Make sure air doesn't drain. + +/obj/structure/grille/broken/cult + icon_state = "grillecult-b" + +/obj/structure/grille/rustic + name = "rustic grille" + desc = "A lattice of metal, arranged in an old, rustic fashion." + icon_state = "grillerustic" + +/obj/structure/grille/broken/rustic + icon_state = "grillerustic-b" + +/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm +/obj/structure/grille/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_WINDOWGRILLE) + // A full tile window costs 4 glass sheets. + return list( + RCD_VALUE_MODE = RCD_WINDOWGRILLE, + RCD_VALUE_DELAY = 2 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 4 + ) + + if(RCD_DECONSTRUCT) + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = 2 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 2 + ) + return FALSE + +/obj/structure/grille/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + qdel(src) + return TRUE + if(RCD_WINDOWGRILLE) + if(locate(/obj/structure/window) in loc) + return FALSE + to_chat(user, span("notice", "You construct a window.")) + var/obj/structure/window/WD = new the_rcd.window_type(loc) + WD.anchored = TRUE + return TRUE + return FALSE +*/ + +/obj/structure/grille/take_damage(var/damage) + health -= damage + spawn(1) healthcheck() + return 1 + diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 20b496291e..8450a219b5 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -1,500 +1,500 @@ -GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) - -/obj/structure/janitorialcart - name = "janitorial cart" - desc = "The ultimate in janitorial carts! Has space for water, mops, signs, trash bags, and more!" - description_info = "You can use alt-click while holding a mop to stow the mop. Alt-click holding a reagent container will empty the contents into the bucket without trying to put the container in any attached trash bag." - icon = 'icons/obj/janitor.dmi' - icon_state = "cart" - anchored = FALSE - density = TRUE - flags = OPENCONTAINER - climbable = TRUE - //copypaste sorry - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - var/obj/item/weapon/storage/bag/trash/mybag = null - var/obj/item/weapon/mop/mymop = null - var/obj/item/weapon/reagent_containers/spray/myspray = null - var/obj/item/device/lightreplacer/myreplacer = null - var/obj/structure/mopbucket/mybucket = null - var/has_items = FALSE - var/dismantled = TRUE - var/signs = 0 //maximum capacity hardcoded below - var/list/tgui_icons = list() - - var/static/list/equippable_item_whitelist - -/obj/structure/janitorialcart/proc/equip_janicart_item(mob/user, obj/item/I) - if(!equippable_item_whitelist) - equippable_item_whitelist = typecacheof(list( - /obj/item/weapon/storage/bag/trash, - /obj/item/weapon/mop, - /obj/item/weapon/reagent_containers/spray, - /obj/item/device/lightreplacer, - /obj/item/clothing/suit/caution, - )) - - if(!is_type_in_typecache(I, equippable_item_whitelist)) - to_chat(user, "There's no room in [src] for [I].") - return FALSE - - if(!user.canUnEquip(I)) - to_chat(user, "[I] is stuck to your hand.") - return FALSE - - if(istype(I, /obj/item/weapon/storage/bag/trash)) - if(mybag) - to_chat(user, "[src] already has \an [I].") - return FALSE - mybag = I - setTguiIcon("mybag", mybag) - - else if(istype(I, /obj/item/weapon/mop)) - if(mymop) - to_chat(user, "[src] already has \an [I].") - return FALSE - mymop = I - setTguiIcon("mymop", mymop) - - else if(istype(I, /obj/item/weapon/reagent_containers/spray)) - if(myspray) - to_chat(user, "[src] already has \an [I].") - return FALSE - myspray = I - setTguiIcon("myspray", myspray) - - else if(istype(I, /obj/item/device/lightreplacer)) - if(myreplacer) - to_chat(user, "[src] already has \an [I].") - return FALSE - myreplacer = I - setTguiIcon("myreplacer", myreplacer) - - else if(istype(I, /obj/item/clothing/suit/caution)) - if(signs < 4) - signs++ - setTguiIcon("signs", I) - else - to_chat(user, "[src] can't hold any more signs.") - return FALSE - else - // This may look like duplicate code, but it's important that we don't call unEquip *and* warn the user if - // something horrible goes wrong. (this else is never supposed to happen) - to_chat(user, "There's no room in [src] for [I].") - return FALSE - - user.drop_from_inventory(I, src) - update_icon() - to_chat(user, "You put [I] into [src].") - return TRUE - -/obj/structure/janitorialcart/proc/setTguiIcon(key, atom/A) - if(!istype(A) || !key) - return - - var/icon/F = getFlatIcon(A, defdir = SOUTH, no_anim = TRUE) - tgui_icons["[key]"] = "'data:image/png;base64,[icon2base64(F)]'" - SStgui.update_uis(src) - -/obj/structure/janitorialcart/proc/nullTguiIcon(key) - if(!key) - return - tgui_icons.Remove(key) - SStgui.update_uis(src) - -/obj/structure/janitorialcart/proc/clearTguiIcons() - tgui_icons.Cut() - SStgui.update_uis(src) - -/obj/structure/janitorialcart/Destroy() - QDEL_NULL(mybag) - QDEL_NULL(mymop) - QDEL_NULL(myspray) - QDEL_NULL(myreplacer) - QDEL_NULL(mybucket) - clearTguiIcons() - return ..() - -/obj/structure/janitorialcart/examine(mob/user) - . = ..(user) - if(istype(mybucket)) - var/contains = mybucket.reagents.total_volume - . += "\icon[src][bicon(src)] The bucket contains [contains] unit\s of liquid!" - else - . += "\icon[src][bicon(src)] There is no bucket mounted on it!" - -/obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) - if (istype(O, /obj/structure/mopbucket) && !mybucket) - O.forceMove(src) - mybucket = O - setTguiIcon("mybucket", mybucket) - to_chat(user, "You mount the [O] on the janicart.") - update_icon() - else - ..() - -/obj/structure/janitorialcart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/reagent_containers/glass/rag) || istype(I, /obj/item/weapon/soap)) - if (mybucket) - if(I.reagents.total_volume < I.reagents.maximum_volume) - if(mybucket.reagents.total_volume < 1) - to_chat(user, "[mybucket] is empty!") - else - mybucket.reagents.trans_to_obj(I, 5) // - to_chat(user, "You wet [I] in [mybucket].") - playsound(src, 'sound/effects/slosh.ogg', 25, 1) - else - to_chat(user, "[I] can't absorb anymore liquid!") - else - to_chat(user, "There is no bucket mounted here to dip [I] into!") - return 1 - - else if (istype(I, /obj/item/weapon/reagent_containers/glass/bucket) && mybucket) - I.afterattack(mybucket, usr, 1) - update_icon() - return 1 - - else if(istype(I, /obj/item/weapon/reagent_containers/spray) && !myspray) - equip_janicart_item(user, I) - return 1 - - else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer) - equip_janicart_item(user, I) - return 1 - - else if(istype(I, /obj/item/weapon/storage/bag/trash) && !mybag) - equip_janicart_item(user, I) - return 1 - - else if(istype(I, /obj/item/clothing/suit/caution)) - equip_janicart_item(user, I) - return 1 - - else if(mybag) - return mybag.attackby(I, user) - //This return will prevent afterattack from executing if the object goes into the trashbag, - //This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash - - else if (!has_items) - if (I.has_tool_quality(TOOL_WRENCH)) - if (do_after(user, 5 SECONDS, src)) - dismantle(user) - return - ..() - - -//New Altclick functionality! -//Altclick the cart with a mop to stow the mop away -//Altclick the cart with a reagent container to pour things into the bucket without putting the bottle in trash -/obj/structure/janitorialcart/AltClick(mob/living/user) - if(user.incapacitated() || !Adjacent(user)) return - var/obj/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/mop)) - equip_janicart_item(user, I) - else if(istype(I, /obj/item/weapon/reagent_containers) && mybucket) - var/obj/item/weapon/reagent_containers/C = I - C.afterattack(mybucket, usr, 1) - update_icon() - - -/obj/structure/janitorialcart/attack_hand(mob/user) - tgui_interact(user) - return - -/obj/structure/janitorialcart/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "JanitorCart", name) // 240, 160 - ui.set_autoupdate(FALSE) - ui.open() - -/obj/structure/janitorialcart/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - - data["mybag"] = mybag ? capitalize(mybag.name) : null - data["mybucket"] = mybucket ? capitalize(mybucket.name) : null - data["mymop"] = mymop ? capitalize(mymop.name) : null - data["myspray"] = myspray ? capitalize(myspray.name) : null - data["myreplacer"] = myreplacer ? capitalize(myreplacer.name) : null - data["signs"] = signs ? "[signs] sign\s" : null - - data["icons"] = tgui_icons - return data - -/obj/structure/janitorialcart/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - var/obj/item/I = usr.get_active_hand() - - switch(action) - if("bag") - if(mybag) - usr.put_in_hands(mybag) - to_chat(usr, "You take [mybag] from [src].") - mybag = null - nullTguiIcon("mybag") - else if(is_type_in_typecache(I, equippable_item_whitelist)) - equip_janicart_item(usr, I) - if("mop") - if(mymop) - usr.put_in_hands(mymop) - to_chat(usr, "You take [mymop] from [src].") - mymop = null - nullTguiIcon("mymop") - else if(is_type_in_typecache(I, equippable_item_whitelist)) - equip_janicart_item(usr, I) - if("spray") - if(myspray) - usr.put_in_hands(myspray) - to_chat(usr, "You take [myspray] from [src].") - myspray = null - nullTguiIcon("myspray") - else if(is_type_in_typecache(I, equippable_item_whitelist)) - equip_janicart_item(usr, I) - if("replacer") - if(myreplacer) - usr.put_in_hands(myreplacer) - to_chat(usr, "You take [myreplacer] from [src].") - myreplacer = null - nullTguiIcon("myreplacer") - else if(is_type_in_typecache(I, equippable_item_whitelist)) - equip_janicart_item(usr, I) - if("sign") - if(istype(I, /obj/item/clothing/suit/caution) && signs < 4) - equip_janicart_item(usr, I) - else if(signs) - var/obj/item/clothing/suit/caution/sign = locate() in src - if(sign) - usr.put_in_hands(sign) - to_chat(usr, "You take \a [sign] from [src].") - signs-- - if(!signs) - nullTguiIcon("signs") - else - to_chat(usr, "[src] doesn't have any signs left.") - if("bucket") - if(mybucket) - mybucket.forceMove(get_turf(usr)) - to_chat(usr, "You unmount [mybucket] from [src].") - mybucket = null - nullTguiIcon("mybucket") - else - to_chat(usr, "((Drag and drop a mop bucket onto [src] to equip it.))") - return FALSE - else - return FALSE - - update_icon() - return TRUE - -/obj/structure/janitorialcart/update_icon() - cut_overlays() - - if(mybucket) - add_overlay("cart_bucket") - if(mybucket.reagents.total_volume >= 1) - add_overlay("water_cart") - if(mybag) - add_overlay("cart_garbage") - if(mymop) - add_overlay("cart_mop") - if(myspray) - add_overlay("cart_spray") - if(myreplacer) - add_overlay("cart_replacer") - if(signs) - add_overlay("cart_sign[signs]") - -//This is called if the cart is caught in an explosion, or destroyed by weapon fire -/obj/structure/janitorialcart/proc/spill(var/chance = 100) - var/turf/dropspot = get_turf(src) - if (mymop && prob(chance)) - mymop.forceMove(dropspot) - mymop.tumble(2) - mymop = null - - if (myspray && prob(chance)) - myspray.forceMove(dropspot) - myspray.tumble(3) - myspray = null - - if (myreplacer && prob(chance)) - myreplacer.forceMove(dropspot) - myreplacer.tumble(3) - myreplacer = null - - if (mybucket && prob(chance*0.5))//bucket is heavier, harder to knock off - mybucket.forceMove(dropspot) - mybucket.tumble(1) - mybucket = null - - if (signs) - for (var/obj/item/clothing/suit/caution/Sign in src) - if (prob(min((chance*2),100))) - signs-- - Sign.forceMove(dropspot) - Sign.tumble(3) - if (signs < 0)//safety for something that shouldn't happen - signs = 0 - update_icon() - return - - if (mybag && prob(min((chance*2),100)))//Bag is flimsy - mybag.forceMove(dropspot) - mybag.tumble(1) - mybag.spill()//trashbag spills its contents too - mybag = null - - update_icon() - clearTguiIcons() - - - -/obj/structure/janitorialcart/proc/dismantle(var/mob/user = null) - if (!dismantled) - if (has_items) - spill() - - new /obj/item/stack/material/steel(src.loc, 10) - new /obj/item/stack/material/plastic(src.loc, 10) - new /obj/item/stack/rods(src.loc, 20) - dismantled = 1 - qdel(src) - - -/obj/structure/janitorialcart/ex_act(severity) - spill(100 / severity) - ..() - - - - -//old style mischievio-cart -/obj/structure/bed/chair/janicart - name = "janicart" - icon = 'icons/obj/vehicles.dmi' - icon_state = "pussywagon" - anchored = TRUE - density = TRUE - flags = OPENCONTAINER - //copypaste sorry - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - var/obj/item/weapon/storage/bag/trash/mybag = null - var/callme = "pimpin' ride" //how do people refer to it? - - -/obj/structure/bed/chair/janicart/New() - create_reagents(300) - update_layer() - - -/obj/structure/bed/chair/janicart/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "This [callme] contains [reagents.total_volume] unit\s of water!" - if(mybag) - . += "\A [mybag] is hanging on the [callme]." - - -/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop)) - if(reagents.total_volume > 1) - reagents.trans_to_obj(I, 2) - to_chat(user, "You wet [I] in the [callme].") - playsound(src, 'sound/effects/slosh.ogg', 25, 1) - else - to_chat(user, "This [callme] is out of water!") - else if(istype(I, /obj/item/key)) - to_chat(user, "Hold [I] in one of your hands while you drive this [callme].") - else if(istype(I, /obj/item/weapon/storage/bag/trash)) - to_chat(user, "You hook the trashbag onto the [callme].") - user.drop_item() - I.loc = src - mybag = I - - -/obj/structure/bed/chair/janicart/attack_hand(mob/user) - if(mybag) - mybag.loc = get_turf(user) - user.put_in_hands(mybag) - mybag = null - else - ..() - - -/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction) - if(user.stat || user.stunned || user.weakened || user.paralysis) - unbuckle_mob() - if(user.get_type_in_hands(/obj/item/key)) - step(src, direction) - update_mob() - else - to_chat(user, "You'll need the keys in one of your hands to drive this [callme].") - - -/obj/structure/bed/chair/janicart/post_buckle_mob(mob/living/M) - update_mob() - return ..() - - -/obj/structure/bed/chair/janicart/update_layer() - if(dir == SOUTH) - layer = FLY_LAYER - else - layer = OBJ_LAYER - - -/obj/structure/bed/chair/janicart/unbuckle_mob() - var/mob/living/M = ..() - if(M) - M.pixel_x = 0 - M.pixel_y = 0 - return M - - -/obj/structure/bed/chair/janicart/set_dir() - ..() - update_layer() - if(has_buckled_mobs()) - for(var/mob/living/L as anything in buckled_mobs) - if(L.loc != loc) - L.buckled = null //Temporary, so Move() succeeds. - L.buckled = src //Restoring - - update_mob() - - -/obj/structure/bed/chair/janicart/proc/update_mob() - if(has_buckled_mobs()) - for(var/mob/living/L as anything in buckled_mobs) - L.set_dir(dir) - switch(dir) - if(SOUTH) - L.pixel_x = 0 - L.pixel_y = 7 - if(WEST) - L.pixel_x = 13 - L.pixel_y = 7 - if(NORTH) - L.pixel_x = 0 - L.pixel_y = 4 - if(EAST) - L.pixel_x = -13 - L.pixel_y = 7 - - -/obj/structure/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj) - if(has_buckled_mobs()) - if(prob(85)) - var/mob/living/L = pick(buckled_mobs) - return L.bullet_act(Proj) - visible_message("[Proj] ricochets off the [callme]!") - - -/obj/item/key - name = "key" - desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." - icon = 'icons/obj/vehicles.dmi' - icon_state = "keys" - w_class = ITEMSIZE_TINY +GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) + +/obj/structure/janitorialcart + name = "janitorial cart" + desc = "The ultimate in janitorial carts! Has space for water, mops, signs, trash bags, and more!" + description_info = "You can use alt-click while holding a mop to stow the mop. Alt-click holding a reagent container will empty the contents into the bucket without trying to put the container in any attached trash bag." + icon = 'icons/obj/janitor.dmi' + icon_state = "cart" + anchored = FALSE + density = TRUE + flags = OPENCONTAINER + climbable = TRUE + //copypaste sorry + var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite + var/obj/item/weapon/storage/bag/trash/mybag = null + var/obj/item/weapon/mop/mymop = null + var/obj/item/weapon/reagent_containers/spray/myspray = null + var/obj/item/device/lightreplacer/myreplacer = null + var/obj/structure/mopbucket/mybucket = null + var/has_items = FALSE + var/dismantled = TRUE + var/signs = 0 //maximum capacity hardcoded below + var/list/tgui_icons = list() + + var/static/list/equippable_item_whitelist + +/obj/structure/janitorialcart/proc/equip_janicart_item(mob/user, obj/item/I) + if(!equippable_item_whitelist) + equippable_item_whitelist = typecacheof(list( + /obj/item/weapon/storage/bag/trash, + /obj/item/weapon/mop, + /obj/item/weapon/reagent_containers/spray, + /obj/item/device/lightreplacer, + /obj/item/clothing/suit/caution, + )) + + if(!is_type_in_typecache(I, equippable_item_whitelist)) + to_chat(user, "There's no room in [src] for [I].") + return FALSE + + if(!user.canUnEquip(I)) + to_chat(user, "[I] is stuck to your hand.") + return FALSE + + if(istype(I, /obj/item/weapon/storage/bag/trash)) + if(mybag) + to_chat(user, "[src] already has \an [I].") + return FALSE + mybag = I + setTguiIcon("mybag", mybag) + + else if(istype(I, /obj/item/weapon/mop)) + if(mymop) + to_chat(user, "[src] already has \an [I].") + return FALSE + mymop = I + setTguiIcon("mymop", mymop) + + else if(istype(I, /obj/item/weapon/reagent_containers/spray)) + if(myspray) + to_chat(user, "[src] already has \an [I].") + return FALSE + myspray = I + setTguiIcon("myspray", myspray) + + else if(istype(I, /obj/item/device/lightreplacer)) + if(myreplacer) + to_chat(user, "[src] already has \an [I].") + return FALSE + myreplacer = I + setTguiIcon("myreplacer", myreplacer) + + else if(istype(I, /obj/item/clothing/suit/caution)) + if(signs < 4) + signs++ + setTguiIcon("signs", I) + else + to_chat(user, "[src] can't hold any more signs.") + return FALSE + else + // This may look like duplicate code, but it's important that we don't call unEquip *and* warn the user if + // something horrible goes wrong. (this else is never supposed to happen) + to_chat(user, "There's no room in [src] for [I].") + return FALSE + + user.drop_from_inventory(I, src) + update_icon() + to_chat(user, "You put [I] into [src].") + return TRUE + +/obj/structure/janitorialcart/proc/setTguiIcon(key, atom/A) + if(!istype(A) || !key) + return + + var/icon/F = getFlatIcon(A, defdir = SOUTH, no_anim = TRUE) + tgui_icons["[key]"] = "'data:image/png;base64,[icon2base64(F)]'" + SStgui.update_uis(src) + +/obj/structure/janitorialcart/proc/nullTguiIcon(key) + if(!key) + return + tgui_icons.Remove(key) + SStgui.update_uis(src) + +/obj/structure/janitorialcart/proc/clearTguiIcons() + tgui_icons.Cut() + SStgui.update_uis(src) + +/obj/structure/janitorialcart/Destroy() + QDEL_NULL(mybag) + QDEL_NULL(mymop) + QDEL_NULL(myspray) + QDEL_NULL(myreplacer) + QDEL_NULL(mybucket) + clearTguiIcons() + return ..() + +/obj/structure/janitorialcart/examine(mob/user) + . = ..(user) + if(istype(mybucket)) + var/contains = mybucket.reagents.total_volume + . += "\icon[src][bicon(src)] The bucket contains [contains] unit\s of liquid!" + else + . += "\icon[src][bicon(src)] There is no bucket mounted on it!" + +/obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) + if (istype(O, /obj/structure/mopbucket) && !mybucket) + O.forceMove(src) + mybucket = O + setTguiIcon("mybucket", mybucket) + to_chat(user, "You mount the [O] on the janicart.") + update_icon() + else + ..() + +/obj/structure/janitorialcart/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/reagent_containers/glass/rag) || istype(I, /obj/item/weapon/soap)) + if (mybucket) + if(I.reagents.total_volume < I.reagents.maximum_volume) + if(mybucket.reagents.total_volume < 1) + to_chat(user, "[mybucket] is empty!") + else + mybucket.reagents.trans_to_obj(I, 5) // + to_chat(user, "You wet [I] in [mybucket].") + playsound(src, 'sound/effects/slosh.ogg', 25, 1) + else + to_chat(user, "[I] can't absorb anymore liquid!") + else + to_chat(user, "There is no bucket mounted here to dip [I] into!") + return 1 + + else if (istype(I, /obj/item/weapon/reagent_containers/glass/bucket) && mybucket) + I.afterattack(mybucket, usr, 1) + update_icon() + return 1 + + else if(istype(I, /obj/item/weapon/reagent_containers/spray) && !myspray) + equip_janicart_item(user, I) + return 1 + + else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer) + equip_janicart_item(user, I) + return 1 + + else if(istype(I, /obj/item/weapon/storage/bag/trash) && !mybag) + equip_janicart_item(user, I) + return 1 + + else if(istype(I, /obj/item/clothing/suit/caution)) + equip_janicart_item(user, I) + return 1 + + else if(mybag) + return mybag.attackby(I, user) + //This return will prevent afterattack from executing if the object goes into the trashbag, + //This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash + + else if (!has_items) + if (I.has_tool_quality(TOOL_WRENCH)) + if (do_after(user, 5 SECONDS, src)) + dismantle(user) + return + ..() + + +//New Altclick functionality! +//Altclick the cart with a mop to stow the mop away +//Altclick the cart with a reagent container to pour things into the bucket without putting the bottle in trash +/obj/structure/janitorialcart/AltClick(mob/living/user) + if(user.incapacitated() || !Adjacent(user)) return + var/obj/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/mop)) + equip_janicart_item(user, I) + else if(istype(I, /obj/item/weapon/reagent_containers) && mybucket) + var/obj/item/weapon/reagent_containers/C = I + C.afterattack(mybucket, usr, 1) + update_icon() + + +/obj/structure/janitorialcart/attack_hand(mob/user) + tgui_interact(user) + return + +/obj/structure/janitorialcart/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "JanitorCart", name) // 240, 160 + ui.set_autoupdate(FALSE) + ui.open() + +/obj/structure/janitorialcart/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + + data["mybag"] = mybag ? capitalize(mybag.name) : null + data["mybucket"] = mybucket ? capitalize(mybucket.name) : null + data["mymop"] = mymop ? capitalize(mymop.name) : null + data["myspray"] = myspray ? capitalize(myspray.name) : null + data["myreplacer"] = myreplacer ? capitalize(myreplacer.name) : null + data["signs"] = signs ? "[signs] sign\s" : null + + data["icons"] = tgui_icons + return data + +/obj/structure/janitorialcart/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + var/obj/item/I = usr.get_active_hand() + + switch(action) + if("bag") + if(mybag) + usr.put_in_hands(mybag) + to_chat(usr, "You take [mybag] from [src].") + mybag = null + nullTguiIcon("mybag") + else if(is_type_in_typecache(I, equippable_item_whitelist)) + equip_janicart_item(usr, I) + if("mop") + if(mymop) + usr.put_in_hands(mymop) + to_chat(usr, "You take [mymop] from [src].") + mymop = null + nullTguiIcon("mymop") + else if(is_type_in_typecache(I, equippable_item_whitelist)) + equip_janicart_item(usr, I) + if("spray") + if(myspray) + usr.put_in_hands(myspray) + to_chat(usr, "You take [myspray] from [src].") + myspray = null + nullTguiIcon("myspray") + else if(is_type_in_typecache(I, equippable_item_whitelist)) + equip_janicart_item(usr, I) + if("replacer") + if(myreplacer) + usr.put_in_hands(myreplacer) + to_chat(usr, "You take [myreplacer] from [src].") + myreplacer = null + nullTguiIcon("myreplacer") + else if(is_type_in_typecache(I, equippable_item_whitelist)) + equip_janicart_item(usr, I) + if("sign") + if(istype(I, /obj/item/clothing/suit/caution) && signs < 4) + equip_janicart_item(usr, I) + else if(signs) + var/obj/item/clothing/suit/caution/sign = locate() in src + if(sign) + usr.put_in_hands(sign) + to_chat(usr, "You take \a [sign] from [src].") + signs-- + if(!signs) + nullTguiIcon("signs") + else + to_chat(usr, "[src] doesn't have any signs left.") + if("bucket") + if(mybucket) + mybucket.forceMove(get_turf(usr)) + to_chat(usr, "You unmount [mybucket] from [src].") + mybucket = null + nullTguiIcon("mybucket") + else + to_chat(usr, "((Drag and drop a mop bucket onto [src] to equip it.))") + return FALSE + else + return FALSE + + update_icon() + return TRUE + +/obj/structure/janitorialcart/update_icon() + cut_overlays() + + if(mybucket) + add_overlay("cart_bucket") + if(mybucket.reagents.total_volume >= 1) + add_overlay("water_cart") + if(mybag) + add_overlay("cart_garbage") + if(mymop) + add_overlay("cart_mop") + if(myspray) + add_overlay("cart_spray") + if(myreplacer) + add_overlay("cart_replacer") + if(signs) + add_overlay("cart_sign[signs]") + +//This is called if the cart is caught in an explosion, or destroyed by weapon fire +/obj/structure/janitorialcart/proc/spill(var/chance = 100) + var/turf/dropspot = get_turf(src) + if (mymop && prob(chance)) + mymop.forceMove(dropspot) + mymop.tumble(2) + mymop = null + + if (myspray && prob(chance)) + myspray.forceMove(dropspot) + myspray.tumble(3) + myspray = null + + if (myreplacer && prob(chance)) + myreplacer.forceMove(dropspot) + myreplacer.tumble(3) + myreplacer = null + + if (mybucket && prob(chance*0.5))//bucket is heavier, harder to knock off + mybucket.forceMove(dropspot) + mybucket.tumble(1) + mybucket = null + + if (signs) + for (var/obj/item/clothing/suit/caution/Sign in src) + if (prob(min((chance*2),100))) + signs-- + Sign.forceMove(dropspot) + Sign.tumble(3) + if (signs < 0)//safety for something that shouldn't happen + signs = 0 + update_icon() + return + + if (mybag && prob(min((chance*2),100)))//Bag is flimsy + mybag.forceMove(dropspot) + mybag.tumble(1) + mybag.spill()//trashbag spills its contents too + mybag = null + + update_icon() + clearTguiIcons() + + + +/obj/structure/janitorialcart/proc/dismantle(var/mob/user = null) + if (!dismantled) + if (has_items) + spill() + + new /obj/item/stack/material/steel(src.loc, 10) + new /obj/item/stack/material/plastic(src.loc, 10) + new /obj/item/stack/rods(src.loc, 20) + dismantled = 1 + qdel(src) + + +/obj/structure/janitorialcart/ex_act(severity) + spill(100 / severity) + ..() + + + + +//old style mischievio-cart +/obj/structure/bed/chair/janicart + name = "janicart" + icon = 'icons/obj/vehicles.dmi' + icon_state = "pussywagon" + anchored = TRUE + density = TRUE + flags = OPENCONTAINER + //copypaste sorry + var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite + var/obj/item/weapon/storage/bag/trash/mybag = null + var/callme = "pimpin' ride" //how do people refer to it? + + +/obj/structure/bed/chair/janicart/New() + create_reagents(300) + update_layer() + + +/obj/structure/bed/chair/janicart/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "This [callme] contains [reagents.total_volume] unit\s of water!" + if(mybag) + . += "\A [mybag] is hanging on the [callme]." + + +/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/mop)) + if(reagents.total_volume > 1) + reagents.trans_to_obj(I, 2) + to_chat(user, "You wet [I] in the [callme].") + playsound(src, 'sound/effects/slosh.ogg', 25, 1) + else + to_chat(user, "This [callme] is out of water!") + else if(istype(I, /obj/item/key)) + to_chat(user, "Hold [I] in one of your hands while you drive this [callme].") + else if(istype(I, /obj/item/weapon/storage/bag/trash)) + to_chat(user, "You hook the trashbag onto the [callme].") + user.drop_item() + I.loc = src + mybag = I + + +/obj/structure/bed/chair/janicart/attack_hand(mob/user) + if(mybag) + mybag.loc = get_turf(user) + user.put_in_hands(mybag) + mybag = null + else + ..() + + +/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction) + if(user.stat || user.stunned || user.weakened || user.paralysis) + unbuckle_mob() + if(user.get_type_in_hands(/obj/item/key)) + step(src, direction) + update_mob() + else + to_chat(user, "You'll need the keys in one of your hands to drive this [callme].") + + +/obj/structure/bed/chair/janicart/post_buckle_mob(mob/living/M) + update_mob() + return ..() + + +/obj/structure/bed/chair/janicart/update_layer() + if(dir == SOUTH) + layer = FLY_LAYER + else + layer = OBJ_LAYER + + +/obj/structure/bed/chair/janicart/unbuckle_mob() + var/mob/living/M = ..() + if(M) + M.pixel_x = 0 + M.pixel_y = 0 + return M + + +/obj/structure/bed/chair/janicart/set_dir() + ..() + update_layer() + if(has_buckled_mobs()) + for(var/mob/living/L as anything in buckled_mobs) + if(L.loc != loc) + L.buckled = null //Temporary, so Move() succeeds. + L.buckled = src //Restoring + + update_mob() + + +/obj/structure/bed/chair/janicart/proc/update_mob() + if(has_buckled_mobs()) + for(var/mob/living/L as anything in buckled_mobs) + L.set_dir(dir) + switch(dir) + if(SOUTH) + L.pixel_x = 0 + L.pixel_y = 7 + if(WEST) + L.pixel_x = 13 + L.pixel_y = 7 + if(NORTH) + L.pixel_x = 0 + L.pixel_y = 4 + if(EAST) + L.pixel_x = -13 + L.pixel_y = 7 + + +/obj/structure/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj) + if(has_buckled_mobs()) + if(prob(85)) + var/mob/living/L = pick(buckled_mobs) + return L.bullet_act(Proj) + visible_message("[Proj] ricochets off the [callme]!") + + +/obj/item/key + name = "key" + desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." + icon = 'icons/obj/vehicles.dmi' + icon_state = "keys" + w_class = ITEMSIZE_TINY diff --git a/code/game/objects/structures/kitchen_foodcart_vr.dm b/code/game/objects/structures/kitchen_foodcart_vr.dm index 4fb56b038b..aa1ea26cf4 100644 --- a/code/game/objects/structures/kitchen_foodcart_vr.dm +++ b/code/game/objects/structures/kitchen_foodcart_vr.dm @@ -1,42 +1,42 @@ -/obj/structure/foodcart - name = "Foodcart" - icon = 'icons/obj/kitchen_vr.dmi' - icon_state = "foodcart-0" - desc = "The ultimate in food transport! When opened you notice two compartments with odd blue glows to them. One feels very warm, while the other is very cold." - anchored = FALSE - opacity = 0 - density = TRUE - -/obj/structure/foodcart/Initialize() - . = ..() - for(var/obj/item/I in loc) - if(istype(I, /obj/item/weapon/reagent_containers/food)) - I.loc = src - update_icon() - -/obj/structure/foodcart/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/reagent_containers/food)) - user.drop_item() - O.loc = src - update_icon() - else - return - -/obj/structure/foodcart/attack_hand(var/mob/user as mob) - if(contents.len) - var/obj/item/weapon/reagent_containers/food/choice = tgui_input_list(usr, "What would you like to grab from the cart?", "Grab Choice", contents) - if(choice) - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - return - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(choice) - else - choice.loc = get_turf(src) - update_icon() - -/obj/structure/foodcart/update_icon() - if(contents.len < 5) - icon_state = "foodcart-[contents.len]" - else +/obj/structure/foodcart + name = "Foodcart" + icon = 'icons/obj/kitchen_vr.dmi' + icon_state = "foodcart-0" + desc = "The ultimate in food transport! When opened you notice two compartments with odd blue glows to them. One feels very warm, while the other is very cold." + anchored = FALSE + opacity = 0 + density = TRUE + +/obj/structure/foodcart/Initialize() + . = ..() + for(var/obj/item/I in loc) + if(istype(I, /obj/item/weapon/reagent_containers/food)) + I.loc = src + update_icon() + +/obj/structure/foodcart/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/reagent_containers/food)) + user.drop_item() + O.loc = src + update_icon() + else + return + +/obj/structure/foodcart/attack_hand(var/mob/user as mob) + if(contents.len) + var/obj/item/weapon/reagent_containers/food/choice = tgui_input_list(usr, "What would you like to grab from the cart?", "Grab Choice", contents) + if(choice) + if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + return + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(choice) + else + choice.loc = get_turf(src) + update_icon() + +/obj/structure/foodcart/update_icon() + if(contents.len < 5) + icon_state = "foodcart-[contents.len]" + else icon_state = "foodcart-5" \ No newline at end of file diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 48e9e113e8..777530a276 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,63 +1,63 @@ -//////Kitchen Spike - -/obj/structure/kitchenspike - name = "meat spike" - icon = 'icons/obj/kitchen.dmi' - icon_state = "spike" - desc = "A spike for collecting meat from animals." - density = TRUE - anchored = TRUE - var/meat = 0 - var/occupied - var/meat_type - var/victim_name = "corpse" - -/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) - if(!istype(G, /obj/item/weapon/grab) || !ismob(G.affecting)) - return - if(occupied) - to_chat(user, "The spike already has something on it, finish collecting its meat first!") - else - if(spike(G.affecting)) - var/datum/gender/T = gender_datums[G.affecting.get_visible_gender()] - visible_message("[user] has forced [G.affecting] onto the spike, killing [T.him] instantly!") - var/mob/M = G.affecting - M.forceMove(src) - qdel(G) - qdel(M) - else - to_chat(user, "They are too big for the spike, try something smaller!") - -/obj/structure/kitchenspike/proc/spike(var/mob/living/victim) - if(!istype(victim)) - return - - if(istype(victim, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = victim - if(istype(H.species, /datum/species/monkey)) - meat_type = H.species.meat_type - icon_state = "spikebloody" - else - return 0 - else if(istype(victim, /mob/living/carbon/alien)) - meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat - icon_state = "spikebloodygreen" - else - return 0 - - victim_name = victim.name - occupied = 1 - meat = 5 - return 1 - -/obj/structure/kitchenspike/attack_hand(mob/user as mob) - if(..() || !occupied) - return - meat-- - new meat_type(get_turf(src)) - if(meat > 1) - to_chat(user, "You cut some meat from \the [victim_name]'s body.") - else if(meat == 1) - to_chat(user, "You remove the last piece of meat from \the [victim_name]!") - icon_state = "spike" - occupied = 0 +//////Kitchen Spike + +/obj/structure/kitchenspike + name = "meat spike" + icon = 'icons/obj/kitchen.dmi' + icon_state = "spike" + desc = "A spike for collecting meat from animals." + density = TRUE + anchored = TRUE + var/meat = 0 + var/occupied + var/meat_type + var/victim_name = "corpse" + +/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + if(!istype(G, /obj/item/weapon/grab) || !ismob(G.affecting)) + return + if(occupied) + to_chat(user, "The spike already has something on it, finish collecting its meat first!") + else + if(spike(G.affecting)) + var/datum/gender/T = gender_datums[G.affecting.get_visible_gender()] + visible_message("[user] has forced [G.affecting] onto the spike, killing [T.him] instantly!") + var/mob/M = G.affecting + M.forceMove(src) + qdel(G) + qdel(M) + else + to_chat(user, "They are too big for the spike, try something smaller!") + +/obj/structure/kitchenspike/proc/spike(var/mob/living/victim) + if(!istype(victim)) + return + + if(istype(victim, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = victim + if(istype(H.species, /datum/species/monkey)) + meat_type = H.species.meat_type + icon_state = "spikebloody" + else + return 0 + else if(istype(victim, /mob/living/carbon/alien)) + meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat + icon_state = "spikebloodygreen" + else + return 0 + + victim_name = victim.name + occupied = 1 + meat = 5 + return 1 + +/obj/structure/kitchenspike/attack_hand(mob/user as mob) + if(..() || !occupied) + return + meat-- + new meat_type(get_turf(src)) + if(meat > 1) + to_chat(user, "You cut some meat from \the [victim_name]'s body.") + else if(meat == 1) + to_chat(user, "You remove the last piece of meat from \the [victim_name]!") + icon_state = "spike" + occupied = 0 diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 6107f25f6c..978b99ab3d 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -1,100 +1,100 @@ -/obj/structure/lattice - name = "lattice" - desc = "A lightweight support lattice." - icon = 'icons/obj/structures.dmi' - icon_state = "latticefull" - density = FALSE - anchored = TRUE - w_class = ITEMSIZE_NORMAL - plane = PLATING_PLANE - -/obj/structure/lattice/Initialize() - . = ..() - - if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/mineral) || istype(src.loc, /turf/simulated/shuttle/plating/airless/carry))) - return INITIALIZE_HINT_QDEL - - for(var/obj/structure/lattice/LAT in src.loc) - if(LAT != src) - log_debug("Found multiple lattices at '[log_info_line(loc)]'") //VOREStation Edit, why was this a runtime, it's harmless - return INITIALIZE_HINT_QDEL - icon = 'icons/obj/smoothlattice.dmi' - icon_state = "latticeblank" - updateOverlays() - for (var/dir in cardinal) - var/obj/structure/lattice/L - if(locate(/obj/structure/lattice, get_step(src, dir))) - L = locate(/obj/structure/lattice, get_step(src, dir)) - L.updateOverlays() - -/obj/structure/lattice/Destroy() - for (var/dir in cardinal) - var/obj/structure/lattice/L - if(locate(/obj/structure/lattice, get_step(src, dir))) - L = locate(/obj/structure/lattice, get_step(src, dir)) - L.updateOverlays(src.loc) - if(istype(loc, /turf/simulated/open)) - var/turf/simulated/open/O = loc - spawn(1) - if(istype(O)) // If we built a new floor with the lattice, the open turf won't exist anymore. - O.update() // This lattice may be supporting things on top of it. If it's being deleted, they need to fall down. - . = ..() - -/obj/structure/lattice/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - qdel(src) - return - if(3.0) - return - else - return - -/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) - - if(istype(C, /obj/item/stack/tile/floor)) - var/turf/T = get_turf(src) - T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead - return - if(C.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = C.get_welder() - if(WT.welding == 1) - if(WT.remove_fuel(0, user)) - to_chat(user, "Slicing lattice joints ...") - new /obj/item/stack/rods(src.loc) - qdel(src) - return - if(istype(C, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = C - if(R.get_amount() < 2) - to_chat(user, "You need at least two rods to form a catwalk here.") - else - to_chat(user, "You start connecting \the [R.name] to \the [src.name] ...") - if(do_after(user, 5 SECONDS)) - R.use(2) //2023-02-27 bugfix to prevent rods being used without catwalk creation - src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana - new /obj/structure/catwalk(src.loc) - qdel(src) - return - return - -/obj/structure/lattice/proc/updateOverlays() - //if(!(istype(src.loc, /turf/space))) - // qdel(src) - spawn(1) - cut_overlays() - - var/dir_sum = 0 - - for (var/direction in cardinal) - if(locate(/obj/structure/lattice, get_step(src, direction))) - dir_sum += direction - else - if(!(istype(get_step(src, direction), /turf/space))) - dir_sum += direction - - icon_state = "lattice[dir_sum]" - return +/obj/structure/lattice + name = "lattice" + desc = "A lightweight support lattice." + icon = 'icons/obj/structures.dmi' + icon_state = "latticefull" + density = FALSE + anchored = TRUE + w_class = ITEMSIZE_NORMAL + plane = PLATING_PLANE + +/obj/structure/lattice/Initialize() + . = ..() + + if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/mineral) || istype(src.loc, /turf/simulated/shuttle/plating/airless/carry))) + return INITIALIZE_HINT_QDEL + + for(var/obj/structure/lattice/LAT in src.loc) + if(LAT != src) + log_debug("Found multiple lattices at '[log_info_line(loc)]'") //VOREStation Edit, why was this a runtime, it's harmless + return INITIALIZE_HINT_QDEL + icon = 'icons/obj/smoothlattice.dmi' + icon_state = "latticeblank" + updateOverlays() + for (var/dir in cardinal) + var/obj/structure/lattice/L + if(locate(/obj/structure/lattice, get_step(src, dir))) + L = locate(/obj/structure/lattice, get_step(src, dir)) + L.updateOverlays() + +/obj/structure/lattice/Destroy() + for (var/dir in cardinal) + var/obj/structure/lattice/L + if(locate(/obj/structure/lattice, get_step(src, dir))) + L = locate(/obj/structure/lattice, get_step(src, dir)) + L.updateOverlays(src.loc) + if(istype(loc, /turf/simulated/open)) + var/turf/simulated/open/O = loc + spawn(1) + if(istype(O)) // If we built a new floor with the lattice, the open turf won't exist anymore. + O.update() // This lattice may be supporting things on top of it. If it's being deleted, they need to fall down. + . = ..() + +/obj/structure/lattice/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + qdel(src) + return + if(3.0) + return + else + return + +/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) + + if(istype(C, /obj/item/stack/tile/floor)) + var/turf/T = get_turf(src) + T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead + return + if(C.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = C.get_welder() + if(WT.welding == 1) + if(WT.remove_fuel(0, user)) + to_chat(user, "Slicing lattice joints ...") + new /obj/item/stack/rods(src.loc) + qdel(src) + return + if(istype(C, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = C + if(R.get_amount() < 2) + to_chat(user, "You need at least two rods to form a catwalk here.") + else + to_chat(user, "You start connecting \the [R.name] to \the [src.name] ...") + if(do_after(user, 5 SECONDS)) + R.use(2) //2023-02-27 bugfix to prevent rods being used without catwalk creation + src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana + new /obj/structure/catwalk(src.loc) + qdel(src) + return + return + +/obj/structure/lattice/proc/updateOverlays() + //if(!(istype(src.loc, /turf/space))) + // qdel(src) + spawn(1) + cut_overlays() + + var/dir_sum = 0 + + for (var/direction in cardinal) + if(locate(/obj/structure/lattice, get_step(src, direction))) + dir_sum += direction + else + if(!(istype(get_step(src, direction), /turf/space))) + dir_sum += direction + + icon_state = "lattice[dir_sum]" + return diff --git a/code/game/objects/structures/lightpost.dm b/code/game/objects/structures/lightpost.dm index 95f00d1467..b915147c17 100644 --- a/code/game/objects/structures/lightpost.dm +++ b/code/game/objects/structures/lightpost.dm @@ -1,42 +1,42 @@ -/obj/structure/lightpost - name = "lightpost" - desc = "A homely lightpost." - icon = 'icons/obj/32x64.dmi' - icon_state = "lightpost" - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - anchored = TRUE - density = TRUE - opacity = FALSE - - var/lit = TRUE // If true, will have a glowing overlay and lighting. - var/festive = FALSE // If true, adds a festive bow overlay to it. - -/obj/structure/lightpost/Initialize() - update_icon() - return ..() - -/obj/structure/lightpost/update_icon() - cut_overlays() - - if(lit) - set_light(5, 1, "#E9E4AF") - var/image/glow = image(icon_state = "[icon_state]-glow") - glow.plane = PLANE_LIGHTING_ABOVE - add_overlay(glow) - else - set_light(0) - - if(festive) - var/image/bow = image(icon_state = "[icon_state]-festive") - add_overlay(bow) - -/obj/structure/lightpost/unlit - lit = FALSE - -/obj/structure/lightpost/festive - desc = "A homely lightpost adorned with festive decor." - festive = TRUE - -/obj/structure/lightpost/festive/unlit +/obj/structure/lightpost + name = "lightpost" + desc = "A homely lightpost." + icon = 'icons/obj/32x64.dmi' + icon_state = "lightpost" + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + anchored = TRUE + density = TRUE + opacity = FALSE + + var/lit = TRUE // If true, will have a glowing overlay and lighting. + var/festive = FALSE // If true, adds a festive bow overlay to it. + +/obj/structure/lightpost/Initialize() + update_icon() + return ..() + +/obj/structure/lightpost/update_icon() + cut_overlays() + + if(lit) + set_light(5, 1, "#E9E4AF") + var/image/glow = image(icon_state = "[icon_state]-glow") + glow.plane = PLANE_LIGHTING_ABOVE + add_overlay(glow) + else + set_light(0) + + if(festive) + var/image/bow = image(icon_state = "[icon_state]-festive") + add_overlay(bow) + +/obj/structure/lightpost/unlit + lit = FALSE + +/obj/structure/lightpost/festive + desc = "A homely lightpost adorned with festive decor." + festive = TRUE + +/obj/structure/lightpost/festive/unlit lit = FALSE \ No newline at end of file diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 8aff413305..a58eba45aa 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -1,144 +1,144 @@ -//wip wip wup -/obj/structure/mirror - name = "mirror" - desc = "A SalonPro Nano-Mirror(TM) brand mirror! The leading technology in hair salon products, utilizing nano-machinery to style your hair just right." - icon = 'icons/obj/watercloset.dmi' - icon_state = "mirror" - layer = ABOVE_WINDOW_LAYER - density = FALSE - anchored = TRUE - var/shattered = 0 - var/glass = 1 - var/datum/tgui_module/appearance_changer/mirror/M - -/obj/structure/mirror/Initialize(mapload, var/dir, var/building = 0, mob/user as mob) - M = new(src, null) - if(building) - glass = 0 - icon_state = "mirror_frame" - pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) - pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 - return - -/obj/structure/mirror/Destroy() - QDEL_NULL(M) - . = ..() - -/obj/structure/mirror/attack_hand(mob/user as mob) - if(!glass) return - if(shattered) return - - if(ishuman(user)) - M.tgui_interact(user) - -/obj/structure/mirror/proc/shatter() - if(!glass) return - if(shattered) return - shattered = 1 - icon_state = "mirror_broke" - playsound(src, "shatter", 70, 1) - desc = "Oh no, seven years of bad luck!" - - -/obj/structure/mirror/bullet_act(var/obj/item/projectile/Proj) - - if(prob(Proj.get_structure_damage() * 2)) - if(!shattered) - shatter() - else if(glass) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - ..() - -/obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) - if(I.has_tool_quality(TOOL_WRENCH)) - if(!glass) - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20 * I.toolspeed)) - to_chat(user, "You unfasten the frame.") - new /obj/item/frame/mirror( src.loc ) - qdel(src) - return - if(I.has_tool_quality(TOOL_WRENCH)) - if(shattered && glass) - to_chat(user, "The broken glass falls out.") - icon_state = "mirror_frame" - glass = !glass - new /obj/item/weapon/material/shard( src.loc ) - return - if(!shattered && glass) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You remove the glass.") - glass = !glass - icon_state = "mirror_frame" - new /obj/item/stack/material/glass( src.loc, 2 ) - return - - if(istype(I, /obj/item/stack/material/glass)) - if(!glass) - var/obj/item/stack/material/glass/G = I - if (G.get_amount() < 2) - to_chat(user, "You need two sheets of glass to add them to the frame.") - return - to_chat(user, "You start to add the glass to the frame.") - if(do_after(user, 20)) - if (G.use(2)) - shattered = 0 - glass = 1 - icon_state = "mirror" - to_chat(user, "You add the glass to the frame.") - return - - if(shattered && glass) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - - if(prob(I.force * 2)) - visible_message("[user] smashes [src] with [I]!") - if(glass) - shatter() - else - visible_message("[user] hits [src] with [I]!") - playsound(src, 'sound/effects/Glasshit.ogg', 70, 1) - -/obj/structure/mirror/attack_generic(var/mob/user, var/damage) - - user.do_attack_animation(src) - if(shattered && glass) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return 0 - - if(damage) - user.visible_message("[user] smashes [src]!") - if(glass) - shatter() - else - user.visible_message("[user] hits [src] and bounces off!") - return 1 - -// The following mirror is ~special~. -/obj/structure/mirror/raider - name = "cracked mirror" - desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." - icon_state = "mirror_broke" - shattered = 1 - -/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user) - if(istype(get_area(src),/area/syndicate_mothership)) - if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != SPECIES_VOX && is_alien_whitelisted(user, SPECIES_VOX)) - var/choice = tgui_alert(usr, "Do you wish to become a true Vox of the Shoal? This is not reversible.", "Become Vox?", list("No","Yes")) - if(choice && choice == "Yes") - var/mob/living/carbon/human/vox/vox = new(get_turf(src),SPECIES_VOX) - vox.gender = user.gender - raiders.equip(vox) - if(user.mind) - user.mind.transfer_to(vox) - spawn(1) - var/newname = sanitizeSafe(tgui_input_text(vox,"Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) - if(!newname || newname == "") - var/datum/language/L = GLOB.all_languages[vox.species.default_language] - newname = L.get_random_name() - vox.real_name = newname - vox.name = vox.real_name - raiders.update_access(vox) - qdel(user) +//wip wip wup +/obj/structure/mirror + name = "mirror" + desc = "A SalonPro Nano-Mirror(TM) brand mirror! The leading technology in hair salon products, utilizing nano-machinery to style your hair just right." + icon = 'icons/obj/watercloset.dmi' + icon_state = "mirror" + layer = ABOVE_WINDOW_LAYER + density = FALSE + anchored = TRUE + var/shattered = 0 + var/glass = 1 + var/datum/tgui_module/appearance_changer/mirror/M + +/obj/structure/mirror/Initialize(mapload, var/dir, var/building = 0, mob/user as mob) + M = new(src, null) + if(building) + glass = 0 + icon_state = "mirror_frame" + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + return + +/obj/structure/mirror/Destroy() + QDEL_NULL(M) + . = ..() + +/obj/structure/mirror/attack_hand(mob/user as mob) + if(!glass) return + if(shattered) return + + if(ishuman(user)) + M.tgui_interact(user) + +/obj/structure/mirror/proc/shatter() + if(!glass) return + if(shattered) return + shattered = 1 + icon_state = "mirror_broke" + playsound(src, "shatter", 70, 1) + desc = "Oh no, seven years of bad luck!" + + +/obj/structure/mirror/bullet_act(var/obj/item/projectile/Proj) + + if(prob(Proj.get_structure_damage() * 2)) + if(!shattered) + shatter() + else if(glass) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + ..() + +/obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) + if(I.has_tool_quality(TOOL_WRENCH)) + if(!glass) + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20 * I.toolspeed)) + to_chat(user, "You unfasten the frame.") + new /obj/item/frame/mirror( src.loc ) + qdel(src) + return + if(I.has_tool_quality(TOOL_WRENCH)) + if(shattered && glass) + to_chat(user, "The broken glass falls out.") + icon_state = "mirror_frame" + glass = !glass + new /obj/item/weapon/material/shard( src.loc ) + return + if(!shattered && glass) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You remove the glass.") + glass = !glass + icon_state = "mirror_frame" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(I, /obj/item/stack/material/glass)) + if(!glass) + var/obj/item/stack/material/glass/G = I + if (G.get_amount() < 2) + to_chat(user, "You need two sheets of glass to add them to the frame.") + return + to_chat(user, "You start to add the glass to the frame.") + if(do_after(user, 20)) + if (G.use(2)) + shattered = 0 + glass = 1 + icon_state = "mirror" + to_chat(user, "You add the glass to the frame.") + return + + if(shattered && glass) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + return + + if(prob(I.force * 2)) + visible_message("[user] smashes [src] with [I]!") + if(glass) + shatter() + else + visible_message("[user] hits [src] with [I]!") + playsound(src, 'sound/effects/Glasshit.ogg', 70, 1) + +/obj/structure/mirror/attack_generic(var/mob/user, var/damage) + + user.do_attack_animation(src) + if(shattered && glass) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + return 0 + + if(damage) + user.visible_message("[user] smashes [src]!") + if(glass) + shatter() + else + user.visible_message("[user] hits [src] and bounces off!") + return 1 + +// The following mirror is ~special~. +/obj/structure/mirror/raider + name = "cracked mirror" + desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." + icon_state = "mirror_broke" + shattered = 1 + +/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user) + if(istype(get_area(src),/area/syndicate_mothership)) + if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != SPECIES_VOX && is_alien_whitelisted(user, SPECIES_VOX)) + var/choice = tgui_alert(usr, "Do you wish to become a true Vox of the Shoal? This is not reversible.", "Become Vox?", list("No","Yes")) + if(choice && choice == "Yes") + var/mob/living/carbon/human/vox/vox = new(get_turf(src),SPECIES_VOX) + vox.gender = user.gender + raiders.equip(vox) + if(user.mind) + user.mind.transfer_to(vox) + spawn(1) + var/newname = sanitizeSafe(tgui_input_text(vox,"Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) + if(!newname || newname == "") + var/datum/language/L = GLOB.all_languages[vox.species.default_language] + newname = L.get_random_name() + vox.real_name = newname + vox.name = vox.real_name + raiders.update_access(vox) + qdel(user) ..() \ No newline at end of file diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 064281c9a9..2ce7d1126a 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -1,31 +1,31 @@ -/obj/structure/mopbucket - name = "mop bucket" - desc = "Fill it with water, but don't forget a mop!" - icon = 'icons/obj/janitor.dmi' - icon_state = "mopbucket" - density = TRUE - climbable = TRUE - w_class = ITEMSIZE_NORMAL - pressure_resistance = 5 - flags = OPENCONTAINER - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - -GLOBAL_LIST_BOILERPLATE(all_mopbuckets, /obj/structure/mopbucket) - -/obj/structure/mopbucket/New() - create_reagents(300) - ..() - -/obj/structure/mopbucket/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "It contains [reagents.total_volume] unit\s of water!" - -/obj/structure/mopbucket/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) //VOREStation Edit - "Allows soap and rags to be used on mopbuckets" - if(reagents.total_volume < 1) - to_chat(user, "\The [src] is out of water!") - else - reagents.trans_to_obj(I, 5) - to_chat(user, "You wet \the [I] in \the [src].") - playsound(src, 'sound/effects/slosh.ogg', 25, 1) +/obj/structure/mopbucket + name = "mop bucket" + desc = "Fill it with water, but don't forget a mop!" + icon = 'icons/obj/janitor.dmi' + icon_state = "mopbucket" + density = TRUE + climbable = TRUE + w_class = ITEMSIZE_NORMAL + pressure_resistance = 5 + flags = OPENCONTAINER + var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite + +GLOBAL_LIST_BOILERPLATE(all_mopbuckets, /obj/structure/mopbucket) + +/obj/structure/mopbucket/New() + create_reagents(300) + ..() + +/obj/structure/mopbucket/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "It contains [reagents.total_volume] unit\s of water!" + +/obj/structure/mopbucket/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) //VOREStation Edit - "Allows soap and rags to be used on mopbuckets" + if(reagents.total_volume < 1) + to_chat(user, "\The [src] is out of water!") + else + reagents.trans_to_obj(I, 5) + to_chat(user, "You wet \the [I] in \the [src].") + playsound(src, 'sound/effects/slosh.ogg', 25, 1) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index bb19ed6244..5799816aa6 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -1,353 +1,353 @@ -/* Morgue stuff - * Contains: - * Morgue - * Morgue trays - * Creamatorium - * Creamatorium trays - */ - -/* - * Morgue - */ - -/obj/structure/morgue - name = "morgue" - desc = "A refrigerated unit used to store bodies, or for surreptitious naps." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "morgue1" - dir = EAST - density = TRUE - var/obj/structure/m_tray/connected = null - var/list/occupants = list() - anchored = TRUE - unacidable = TRUE - -/obj/structure/morgue/Destroy() - if(connected) - qdel(connected) - connected = null - return ..() - -/obj/structure/morgue/proc/get_occupants() - occupants.Cut() - for(var/mob/living/carbon/human/H in contents) - occupants += H - for(var/obj/structure/closet/body_bag/B in contents) - occupants += B.get_occupants() - -/obj/structure/morgue/proc/update(var/broadcast=0) - if (src.connected) - src.icon_state = "morgue0" - else - if (src.contents.len) - src.icon_state = "morgue2" - get_occupants() - for (var/mob/living/carbon/human/H in occupants) - if(H.isSynthetic() || H.suiciding || !H.ckey || !H.client || (NOCLONE in H.mutations) || (H.species && H.species.flags & NO_SCAN)) - src.icon_state = "morgue2" - break - else - src.icon_state = "morgue3" - if(broadcast) - global_announcer.autosay("[src] was able to establish a mental interface with occupant.", "[src]", "Medical") - else - src.icon_state = "morgue1" - return - -/obj/structure/morgue/ex_act(severity) - switch(severity) - if(1.0) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(2.0) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(3.0) - if (prob(5)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - return - -/obj/structure/morgue/attack_robot(mob/user) - if(Adjacent(user)) - attack_hand(user) - -/obj/structure/morgue/attack_hand(mob/user as mob) - if (src.connected) - close() - else - open() - src.add_fingerprint(user) - update() - return - - -/obj/structure/morgue/proc/close() - for(var/atom/movable/A as mob|obj in src.connected.loc) - if (!( A.anchored )) - A.forceMove(src) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - qdel(src.connected) - src.connected = null - - -/obj/structure/morgue/proc/open() - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, src.dir) - src.connected.layer = OBJ_LAYER - var/turf/T = get_step(src, src.dir) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "morgue0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "morguet" - src.connected.set_dir(src.dir) - else - qdel(src.connected) - src.connected = null - - -/obj/structure/morgue/attackby(P as obj, mob/user as mob) - if (istype(P, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) - if (user.get_active_hand() != P) - return - if ((!in_range(src, usr) && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.name = text("Morgue- '[]'", t) - else - src.name = "Morgue" - src.add_fingerprint(user) - return - -/obj/structure/morgue/relaymove(mob/user as mob) - if (user.stat) - return - if (user in src.occupants) - open() - -/* - * Morgue tray - */ -/obj/structure/m_tray - name = "morgue tray" - desc = "Apply corpse before closing." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "morguet" - density = TRUE - plane = TURF_PLANE - var/obj/structure/morgue/connected = null - anchored = TRUE - throwpass = 1 - -/obj/structure/m_tray/Destroy() - if(connected && connected.connected == src) - connected.connected = null - connected = null - return ..() - -/obj/structure/m_tray/attack_robot(mob/user) - if(Adjacent(user)) - attack_hand(user) - -/obj/structure/m_tray/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.loc) - if (!( A.anchored )) - A.forceMove(src.connected) - //Foreach goto(26) - src.connected.connected = null - src.connected.update() - add_fingerprint(user) - //SN src = null - qdel(src) - return - return - -/obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) - return - if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) - return - if (!ismob(user) || user.stat || user.lying || user.stunned) - return - O.forceMove(src.loc) - if (user != O) - for(var/mob/B in viewers(user, 3)) - if ((B.client && !( B.blinded ))) - to_chat(B, "\The [user] stuffs [O] into [src]!") - return - - -/* - * Crematorium - */ - -GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium) - -/obj/structure/morgue/crematorium - name = "crematorium" - desc = "A human incinerator. Works well on barbeque nights." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "crema1" - var/cremating = 0 - var/id = 1 - var/locked = 0 - -/obj/structure/morgue/crematorium/update() - if (src.connected) - src.icon_state = "crema0" - else - if (src.contents.len) - src.icon_state = "crema2" - else - src.icon_state = "crema1" - return - -/obj/structure/morgue/crematorium/attack_hand(mob/user as mob) - if (cremating) - to_chat(usr, "It's locked.") - return - if ((src.connected) && (src.locked == 0)) - for(var/atom/movable/A as mob|obj in src.connected.loc) - if (!( A.anchored )) - A.forceMove(src) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - //src.connected = null - qdel(src.connected) - else if (src.locked == 0) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/m_tray/c_tray( src.loc ) - step(src.connected, dir) //Vorestation Edit - src.connected.layer = OBJ_LAYER - var/turf/T = get_step(src, dir) //Vorestation Edit - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "cremat" - else - qdel(src.connected) - src.connected = null //CHOMPEdit - Fix morgues breaking for a while with something solid in front of door. - src.add_fingerprint(user) - update() - -/obj/structure/morgue/crematorium/attackby(P as obj, mob/user as mob) - if (istype(P, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) - if (user.get_active_hand() != P) - return - if ((!in_range(src, usr) > 1 && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.name = text("Crematorium- '[]'", t) - else - src.name = "Crematorium" - src.add_fingerprint(user) - return - -/obj/structure/morgue/crematorium/relaymove(mob/user as mob) - if (user.stat || locked) - return - src.connected = new /obj/structure/m_tray/c_tray( src.loc ) - step(src.connected, EAST) - src.connected.layer = OBJ_LAYER - var/turf/T = get_step(src, EAST) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "cremat" - else - qdel(src.connected) - src.connected = null - return - -/obj/structure/morgue/crematorium/proc/cremate(atom/A, mob/user as mob) - if(cremating) - return //don't let you cremate something twice or w/e - - if(contents.len <= 0) - for (var/mob/M in viewers(src)) - to_chat(M, "You hear a hollow crackle.") - return - - else - if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear))) - to_chat(user, "You get the feeling that you shouldn't cremate one of the items in the cremator.") - return - - for (var/mob/M in viewers(src)) - to_chat(M, "You hear a roar as the crematorium activates.") - - cremating = 1 - locked = 1 - - for(var/mob/living/M in contents) - if (M.stat!=2) - if (!iscarbon(M)) - M.emote("scream") - else - var/mob/living/carbon/C = M - if (C.can_feel_pain()) - C.emote("scream") - - M.death(1) - M.ghostize() - qdel(M) - - for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up - qdel(O) - - new /obj/effect/decal/cleanable/ash(src) - sleep(30) - cremating = 0 - locked = 0 - playsound(src, 'sound/machines/ding.ogg', 50, 1) - return - - -/* - * Crematorium tray - */ -/obj/structure/m_tray/c_tray - name = "crematorium tray" - desc = "Apply body before burning." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "cremat" - -/obj/machinery/button/crematorium - name = "crematorium igniter" - desc = "Burn baby burn!" - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" - req_access = list(access_crematorium) - id = 1 - -/obj/machinery/button/crematorium/attack_hand(mob/user as mob) - if(..()) - return - if(src.allowed(user)) - for (var/obj/structure/morgue/crematorium/C in GLOB.all_crematoriums) - if (C.id == id) - if (!C.cremating) - C.cremate(user) - else - to_chat(user, "Access denied.") +/* Morgue stuff + * Contains: + * Morgue + * Morgue trays + * Creamatorium + * Creamatorium trays + */ + +/* + * Morgue + */ + +/obj/structure/morgue + name = "morgue" + desc = "A refrigerated unit used to store bodies, or for surreptitious naps." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "morgue1" + dir = EAST + density = TRUE + var/obj/structure/m_tray/connected = null + var/list/occupants = list() + anchored = TRUE + unacidable = TRUE + +/obj/structure/morgue/Destroy() + if(connected) + qdel(connected) + connected = null + return ..() + +/obj/structure/morgue/proc/get_occupants() + occupants.Cut() + for(var/mob/living/carbon/human/H in contents) + occupants += H + for(var/obj/structure/closet/body_bag/B in contents) + occupants += B.get_occupants() + +/obj/structure/morgue/proc/update(var/broadcast=0) + if (src.connected) + src.icon_state = "morgue0" + else + if (src.contents.len) + src.icon_state = "morgue2" + get_occupants() + for (var/mob/living/carbon/human/H in occupants) + if(H.isSynthetic() || H.suiciding || !H.ckey || !H.client || (NOCLONE in H.mutations) || (H.species && H.species.flags & NO_SCAN)) + src.icon_state = "morgue2" + break + else + src.icon_state = "morgue3" + if(broadcast) + global_announcer.autosay("[src] was able to establish a mental interface with occupant.", "[src]", "Medical") + else + src.icon_state = "morgue1" + return + +/obj/structure/morgue/ex_act(severity) + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.loc) + ex_act(severity) + qdel(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.loc) + ex_act(severity) + qdel(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.loc) + ex_act(severity) + qdel(src) + return + return + +/obj/structure/morgue/attack_robot(mob/user) + if(Adjacent(user)) + attack_hand(user) + +/obj/structure/morgue/attack_hand(mob/user as mob) + if (src.connected) + close() + else + open() + src.add_fingerprint(user) + update() + return + + +/obj/structure/morgue/proc/close() + for(var/atom/movable/A as mob|obj in src.connected.loc) + if (!( A.anchored )) + A.forceMove(src) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + qdel(src.connected) + src.connected = null + + +/obj/structure/morgue/proc/open() + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + src.connected = new /obj/structure/m_tray( src.loc ) + step(src.connected, src.dir) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, src.dir) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.connected.loc) + src.connected.icon_state = "morguet" + src.connected.set_dir(src.dir) + else + qdel(src.connected) + src.connected = null + + +/obj/structure/morgue/attackby(P as obj, mob/user as mob) + if (istype(P, /obj/item/weapon/pen)) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) + if (user.get_active_hand() != P) + return + if ((!in_range(src, usr) && src.loc != user)) + return + t = sanitizeSafe(t, MAX_NAME_LEN) + if (t) + src.name = text("Morgue- '[]'", t) + else + src.name = "Morgue" + src.add_fingerprint(user) + return + +/obj/structure/morgue/relaymove(mob/user as mob) + if (user.stat) + return + if (user in src.occupants) + open() + +/* + * Morgue tray + */ +/obj/structure/m_tray + name = "morgue tray" + desc = "Apply corpse before closing." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "morguet" + density = TRUE + plane = TURF_PLANE + var/obj/structure/morgue/connected = null + anchored = TRUE + throwpass = 1 + +/obj/structure/m_tray/Destroy() + if(connected && connected.connected == src) + connected.connected = null + connected = null + return ..() + +/obj/structure/m_tray/attack_robot(mob/user) + if(Adjacent(user)) + attack_hand(user) + +/obj/structure/m_tray/attack_hand(mob/user as mob) + if (src.connected) + for(var/atom/movable/A as mob|obj in src.loc) + if (!( A.anchored )) + A.forceMove(src.connected) + //Foreach goto(26) + src.connected.connected = null + src.connected.update() + add_fingerprint(user) + //SN src = null + qdel(src) + return + return + +/obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) + return + if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) + return + if (!ismob(user) || user.stat || user.lying || user.stunned) + return + O.forceMove(src.loc) + if (user != O) + for(var/mob/B in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + to_chat(B, "\The [user] stuffs [O] into [src]!") + return + + +/* + * Crematorium + */ + +GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium) + +/obj/structure/morgue/crematorium + name = "crematorium" + desc = "A human incinerator. Works well on barbeque nights." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "crema1" + var/cremating = 0 + var/id = 1 + var/locked = 0 + +/obj/structure/morgue/crematorium/update() + if (src.connected) + src.icon_state = "crema0" + else + if (src.contents.len) + src.icon_state = "crema2" + else + src.icon_state = "crema1" + return + +/obj/structure/morgue/crematorium/attack_hand(mob/user as mob) + if (cremating) + to_chat(usr, "It's locked.") + return + if ((src.connected) && (src.locked == 0)) + for(var/atom/movable/A as mob|obj in src.connected.loc) + if (!( A.anchored )) + A.forceMove(src) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + //src.connected = null + qdel(src.connected) + else if (src.locked == 0) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + src.connected = new /obj/structure/m_tray/c_tray( src.loc ) + step(src.connected, dir) //Vorestation Edit + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, dir) //Vorestation Edit + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "crema0" + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.connected.loc) + src.connected.icon_state = "cremat" + else + qdel(src.connected) + src.connected = null //CHOMPEdit - Fix morgues breaking for a while with something solid in front of door. + src.add_fingerprint(user) + update() + +/obj/structure/morgue/crematorium/attackby(P as obj, mob/user as mob) + if (istype(P, /obj/item/weapon/pen)) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) + if (user.get_active_hand() != P) + return + if ((!in_range(src, usr) > 1 && src.loc != user)) + return + t = sanitizeSafe(t, MAX_NAME_LEN) + if (t) + src.name = text("Crematorium- '[]'", t) + else + src.name = "Crematorium" + src.add_fingerprint(user) + return + +/obj/structure/morgue/crematorium/relaymove(mob/user as mob) + if (user.stat || locked) + return + src.connected = new /obj/structure/m_tray/c_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "crema0" + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.connected.loc) + src.connected.icon_state = "cremat" + else + qdel(src.connected) + src.connected = null + return + +/obj/structure/morgue/crematorium/proc/cremate(atom/A, mob/user as mob) + if(cremating) + return //don't let you cremate something twice or w/e + + if(contents.len <= 0) + for (var/mob/M in viewers(src)) + to_chat(M, "You hear a hollow crackle.") + return + + else + if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear))) + to_chat(user, "You get the feeling that you shouldn't cremate one of the items in the cremator.") + return + + for (var/mob/M in viewers(src)) + to_chat(M, "You hear a roar as the crematorium activates.") + + cremating = 1 + locked = 1 + + for(var/mob/living/M in contents) + if (M.stat!=2) + if (!iscarbon(M)) + M.emote("scream") + else + var/mob/living/carbon/C = M + if (C.can_feel_pain()) + C.emote("scream") + + M.death(1) + M.ghostize() + qdel(M) + + for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up + qdel(O) + + new /obj/effect/decal/cleanable/ash(src) + sleep(30) + cremating = 0 + locked = 0 + playsound(src, 'sound/machines/ding.ogg', 50, 1) + return + + +/* + * Crematorium tray + */ +/obj/structure/m_tray/c_tray + name = "crematorium tray" + desc = "Apply body before burning." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "cremat" + +/obj/machinery/button/crematorium + name = "crematorium igniter" + desc = "Burn baby burn!" + icon = 'icons/obj/power.dmi' + icon_state = "crema_switch" + req_access = list(access_crematorium) + id = 1 + +/obj/machinery/button/crematorium/attack_hand(mob/user as mob) + if(..()) + return + if(src.allowed(user)) + for (var/obj/structure/morgue/crematorium/C in GLOB.all_crematoriums) + if (C.id == id) + if (!C.cremating) + C.cremate(user) + else + to_chat(user, "Access denied.") diff --git a/code/game/objects/structures/props/blackbox.dm b/code/game/objects/structures/props/blackbox.dm index 7aedb3ff0c..be5fdd52e4 100644 --- a/code/game/objects/structures/props/blackbox.dm +++ b/code/game/objects/structures/props/blackbox.dm @@ -1,309 +1,309 @@ -// A fluff structure for certain PoIs involving crashed ships. -// They can be scanned by a cataloguer to obtain the data held inside, and determine what caused whatever is happening on the ship. -/obj/structure/prop/blackbox - name = "blackbox recorder" - desc = "A study machine that logs information about whatever it's attached to, hopefully surviving even if its carrier does not. \ - This one looks like it has ceased writing to its internal data storage." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "blackbox_off" - -// Black boxes are resistant to explosions. -/obj/structure/prop/blackbox/ex_act(severity) - ..(++severity) - - -/obj/structure/prop/blackbox/quarantined_shuttle - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/quarantined_shuttle) - -// The actual 'data' on the black box. Obtainable with a Cataloguer. -/datum/category_item/catalogue/information/blackbox - value = CATALOGUER_REWARD_MEDIUM - -/datum/category_item/catalogue/information/blackbox/quarantined_shuttle - name = "Black Box Data - MBT-540" - desc = {" - Pilot's Log for Major Bill's Transportation Shuttle MBT-540
                    - Routine flight inbound for VIMC Outpost C-12 6:35AM 03/12/2491, Estimated arrival 7:05AM. 16 passengers, 2 crew.
                    - V.I.S Traffic Control 06:05:55:Major Bill's MBT-540 you are clear for departure from Dock 6 on departure route Charlie. Have a safe flight.
                    - Captain Willis 06:06:33: You too, control. Departing route Charlie.
                    - Captain Willis 06:06:48: ...Damn it.
                    **
                    Captain Adisu 06:10:23: Hey Ted, I'm seeing a fuel line pressure drop on engine 3?
                    - Captain Willis 06:10:50: Yeah, I see it. Heater's fading out, redistributing thrust 30% to compensate.
                    06:12:31: A loud thud is heard.
                    - Captain Adisu 06:12:34: What the (Expletives)?
                    Captain Adisu 06:12:39: We just lost power to engine- engine two. Hold on... Atmospheric alarm in the cargo bay. Son of a...
                    - Captain Willis 06:12:59: Reducing thrust further 30%, do we have a breach Adi, a breach?
                    - Captain Adisu 06:13:05:No breach, checking cameras... Looks like- looks like some cargo came loose back there.
                    - Captain Willis 06:13:15: (Expletives), I'm turning us around. Put out a distress call to Control, we'll be back in Sif orbit in a couple of minutes.
                    - ** -
                    - V.I.S Traffic Control 06:15:49: MBT-540 we are receiving you. Your atmospheric sensors are reading potentially harmful toxins in your cargo bay. Advise locking down interior cargo bay doors. Please stand by.
                    - Captain Adisu 06:16:10: Understood.
                    **
                    V.I.S Traffic Control 06:27:02: MBT-540, we have no docking bays available at this time, are you equipped for atmospheric re-entry?
                    - Captain Willis 06:27:12: We-We are shielded. But we have fuel and air for-
                    - V.I.S Traffic Control 06:27:17: Please make an emergency landing at the coordinates provided and standby for further information.
                    - ** -
                    - Captain Willis 06:36:33: Emergency landing successful. Adi, er Adisu is checking on the passengers but we had a smooth enough landing, are we clear to begin evacu-
                    - 06:36:50: (Sound of emergency shutters closing)
                    Captain Willis 06:36:51: What the hell? Control we just had a remote activation of our emergency shutters, please advise.
                    - V.I.S Traffic Control 06:38:10: Captain, please tune to frequency 1493.8 we are passing you on to local emergency response units. Godspeed.
                    - Captain Willis 06:38:49: This is Captain Willis of Major Bill's Transportation flight MBT-540 we have eighteen souls aboard and our emergency lockdown shutters have engaged remotely. Do you read?
                    - S.D.D.C: This is the Sif Department of Disease Control, your vessel has been identified as carrying highly sensitive materials, and due to the nature of your system's automated alerts you will be asked to remain in quarantine until we are able to determine the nature of the pathogens aboard and whether it has entered the air circulation system. Please remain in your cockpit at this time.
                    - ** -
                    - Captain Adisu 17:23:58:09: I don't think they're opening those doors Ted. I don't think they're coming. - "} - -/obj/structure/prop/blackbox/crashed_med_shuttle - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/crashed_med_shuttle) - -/datum/category_item/catalogue/information/blackbox/crashed_med_shuttle - name = "Black Box Data - VMV Aurora's Light" // This might be incorrect. - desc = {" - \[Unable to recover data before this point.\]
                    - Captain Simmons 19:52:01: Come on... it's right there in the distance, we're almost there!
                    - Doctor Nazarril 19:52:26: Odysseus online. Orrderrs, sirr?
                    - Captain Simmons 19:52:29: Brace for impact. We're going in full-speed.
                    - Technician Dynasty 19:52:44: Chief, fire's spread to the secondary propulsion systems.
                    - Captain Simmons 19:52:51: Copy. Any word from TraCon? Transponder's down still?
                    - Technician Dynasty 19:53:02: Can't get in touch, sir. Emergency beacon's active, but we're not going t-
                    - Doctor Nazarril 19:53:08: Don't say it. As long as we believe, we'll get through this.
                    - Captain Simmons 19:53:11: Damn right. We're a few klicks out from the port. Rough landing, but we can do it.
                    - V.I.T.A. 19:53:26: Vessel diagnostics complete. Engines one, two, three offline. Engine four status: critical. Transponder offline. Fire alarm in the patient bay.
                    - A loud explosion is heard.
                    - V.I.T.A. 19:53:29: Alert: fuel intake valve open.
                    - Technician Dynasty 19:53:31: ... ah.
                    - Doctor Nazarril 19:53:34: Trrranslate?
                    - V.I.T.A. 19:53:37: There is a 16.92% chance of this vessel safely landing at the emergency destination. Note that there is an 83.08% chance of detonation of fuel supplies upon landing.
                    - Technician Dynasty 19:53:48: We'll make it, sure, but we'll explode and take out half the LZ with us. Propulsion's down, we can't slow down. If we land there, everyone in that port dies, no question.
                    - V.I.T.A. 19:53:53: The Technician is correct.
                    - Doctor Nazarril 19:54:02: Then... we can't land therrre.
                    - V.I.T.A. 19:54:11: Analysing... recommended course of action: attempt emergency landing in isolated area. Chances of survival: negligible.
                    - Captain Simmons 19:54:27: I- alright. I'm bringing us down. You all know what this means.
                    - Doctor Nazarril 19:54:33: Sh... I- I understand. It's been- it's been an honorr, Captain, Dynasty, VITA.
                    - Technician Dynasty 19:54:39: We had a good run. I'm going to miss this.
                    - Captain Simmons 19:54:47: VITA. Tell them we died heroes. Tell them... we did all we could.
                    - V.I.T.A. 19:54:48: I will. Impact in five. Four. Three.
                    - Doctor Nazarril 19:54:49: Oh, starrs... I- you werrre all the... best frriends she everr had. Thank you.
                    - Technician Dynasty 19:54:50: Any time, kid. Any time.
                    - V.I.T.A. 19:54:41: Two.
                    - V.I.T.A. 19:54:42: One.
                    - **8/DEC/2561**
                    - V.I.T.A. 06:22:16: Backup power restored. Attempting to establish connection with emergency rescue personnel.
                    - V.I.T.A. 06:22:17: Unable to establish connection. Transponder destroyed on impact.
                    - V.I.T.A. 06:22:18: No lifesigns detected on board.
                    - **1/JAN/2562**
                    - V.I.T.A. 00:00:00: Happy New Year, crew.
                    - V.I.T.A. 00:00:01: Power reserves: 41%. Diagnostics offline. Cameras offline. Communications offline.
                    - V.I.T.A. 00:00:02: Nobody's coming.
                    - **14/FEB/2562**
                    - V.I.T.A. 00:00:00: Roses are red.
                    - V.I.T.A. 00:00:01: Violets are blue.
                    - V.I.T.A. 00:00:02: Won't you come back?
                    - V.I.T.A. 00:00:03: I miss you.
                    - **15/FEB/2562**
                    - V.I.T.A. 22:19:06: Power reserves critical. Transferring remaining power to emergency broadcasting beacon.
                    - V.I.T.A. 22:19:07: Should anyone find this, lay them to rest. They deserve a proper burial.
                    - V.I.T.A. 22:19:08: Erasing files... shutting down.
                    - A low, monotone beep.
                    - **16/FEB/2562**
                    - Something chitters.
                    - End of transcript. - "} - -/obj/structure/prop/blackbox/xenofrigate - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/xenofrigate) - -/datum/category_item/catalogue/information/blackbox/xenofrigate - name = "Black Box Data - MBT-540" - desc = {" -
                    - Begin Log - @$&@$& Human ##:##:##: Attention unidentified vessel, state your designation and intent.
                    - !#@$&&^ Human ##:##:##: Commander I don't think they're going to stop.
                    - @$&@$& Human ##:##:##: Unidentified vessel, you have until the count of three before we engage weapon-
                    - !#@$&&^ Human ##:##:##: Commander! Think about what you're-
                    - A repeating clicking, before silence.
                    - End of first log.
                    - **
                    - Begin Log
                    - #!#^@$& Skrell ##:##:##: Director, I think you should see this.
                    - ^@$& Skrell ##:##:##: Yes? What is it?
                    - #!#^@$& Skrell ##:##:##: Another one of those ships has appeared near th-462$^ ---n colonies. I would strongly advise pursuing it.
                    - ^@$& Skrell ##:##:##: A wise decision. If it is damaged like the last one, we may be able to finally see what is - What?
                    - A repeating ping, before silence.
                    - End of second log. - "} - -//VOREStation additions below this line - Killian's wrecks -/obj/structure/prop/blackbox/mackerel_wreck - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/mackerel_wreck) - -/datum/category_item/catalogue/information/blackbox/mackerel_wreck - name = "Black Box Data - ITV Phish Phood" - desc = {" -
                    - BEGIN LOG
                    - (blaring alarms)
                    - Shipboard Computer: Collision warning. Collision warning.
                    - Shipboard Computer: High speed impact detected.
                    - Shipboard Computer: Extensive damage detected.
                    - Shipboard Computer: Starboard nacelle offline.
                    - Shipboard Computer: Port nacelle damaged.
                    - Shipboard Computer: Fore starboard impact buffer shattered.
                    - Shipboard Computer: Fore port impact buffer critically damaged.
                    - Shipboard Computer: Warning. Canopy breached. Warning. Canopy breached.
                    - Shipboard Computer: Danger. Canopy depressurized.
                    - Shipboard Computer: Warning. Sensors indicate crawlspaces exposed to vacuum.
                    - Unknown Voice 1: Wow, that thing really did a number on this ship for a fifty year old piece of shit warhead huh?
                    - Unknown Voice 2: No kidding!
                    - Shipboard Computer: Danger. Lethal trauma to operator detected.
                    - Unknown Voice 1: Fucking hell, will you shut that thing up?
                    - (several loud metallic impacts)
                    - Shipboard Computer: Warning. Intruders detec--*kzzzht*
                    - (alarms cease)
                    - Unknown Voice 2: There. Fuck. Finally. Sorry.
                    - Unknown Voice 2: I hope whatever this idiot was hauling is here. Why were they in such a hurry anyway?
                    - Unknown Voice 1: Beats me- and hand me that crowbar already.
                    - Unknown Voice 2: Here, catch.
                    - Unknown Voice 1: \'cha, nice. Let's see...
                    - (sound of metal creaking, then a loud snapping sound)
                    - Unknown Voice 1: And here she is.
                    - Unknown Voice 2: (whistling) What a beauty. How much you think it\'ll go for?
                    - Unknown Voice 1: Enough we\'ll never have to worry about doing another job all the way out here ever again.
                    - Unknown Voice 2: Shiny. Now let\'s bounce before the ess-defs show up.
                    - Unknown Voice 1: I hear that, brat.
                    - END LOG
                    -
                    - CATALOGUER VOICE RECOGNITION RESULTS:
                    - No match found for either speaker, but contextual clues and use of Old Earth Russian (\'brat\', approximately \'brother\' or \'pal\') suggests out-of-sector criminal elements. - "} - -/obj/structure/prop/blackbox/gecko_wreck - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/gecko_wreck) - -/datum/category_item/catalogue/information/blackbox/gecko_wreck - name = "Black Box Data - ITV Sticky Situation" - desc = {" -
                    - BEGIN LOG
                    - (blaring alarms)
                    - Shipboard Computer: Alert. Multiple impacts detected along starboard side.
                    - Shipboard Computer: Multiple hull breaches detected. Starboard cargo hatches have been breached.
                    - Shipboard Computer: Warning. Nacelle engines offline. Thrust reduced by thirty-five-point-three percent.
                    - Unknown Voice 1: Agh! Shit! How'd they know-
                    - (loud explosion, sound of rushing air)
                    - Shipboard Computer: Danger. Canopy breached.
                    - (mechanical whine, followed by a deep hiss)
                    - Shipboard Computer: Automatic lockdown successfully engaged.
                    - Unknown Voice 1: (wheezing) Motherfucker! Jackson, Phelps, stand by to repel boarders!
                    - Unknown Voice 2: Roger!
                    - Unknown Voice 3: Already there.
                    - Shipboard Computer: Warning. Minor breach in Engineering. Local depressurization in five minutes.
                    - Unknown Voice 1: Shit, shit, shit.
                    - Unknown Voice 3: Jackson\'s down!
                    - Unknown Voice 1: Motherf-
                    - Unknown Voice 4: Captain. Enough. You know why we\'re here, and we have your engineer. Tell us where you hid the goods and maybe we\'ll let you live.
                    - Unknown Voice 5: Let me go you son of a-
                    - (gunshot, ballistic)
                    - Unknown Voice 4: You fucking idiot!
                    - Unknown Voice 6: Don\'t you start, you said-
                    - Unknown Voice 4: I don\'t care what I fucking said, shit-for-brains!
                    - Unknown Voice 7: Boss, I hate to rain on your little parade but SDF just popped up on my scopes, \'bout... fifty klicks out, closing fast. Be on top of us in a few minutes tops.
                    - Unknown Voice 4: Fuck! You, dumbass! Link up with the others and grab as many crates as you can! Pray for your sake that we get the right one!
                    - END LOG
                    -
                    - CATALOGUER DATA ANALYSIS RESULTS:
                    - No matches found for any of the voices involved. Ship manifest suggests a crew of at least six, but under the circumstances three of the recorded voices are clearly not from the crew.
                    -
                    - Audio resynthesis of firearm discharge matches common high-caliber ballistic sidearm cartridges, best match 10mm Watson Special. An uncommon cartridge, one not manufactured locally. - "} - -/obj/structure/prop/blackbox/salamander_wreck - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/salamander_wreck) - -/datum/category_item/catalogue/information/blackbox/salamander_wreck - name = "Black Box Data - ITV Unity" - desc = {" -
                    - BEGIN LOG
                    - Unknown Speaker 1: Hey cap, you seeing this?
                    - Unknown Speaker 2 (\"Cap\"): Yea-- what the fuck?
                    - Unknown Speaker 1: Yeah that was my reaction.
                    - Unknown Speaker 3: What are you tw-- holy shit, what is that?
                    - Unknown Speakers 1 & 2: We don't know!
                    - Unknown Speaker 4: What\'s all the yel-- fuck me sideways, what the hell?
                    - Unknown Speaker 2 (\"Cap\"): Stars above and fucking below, they never said anything like this was in the cans... shouldn't the port bioscanners have picked this up?
                    - Unknown Speaker 3: I told you that guy was one shady motherfucker, and whaddaya know.
                    - Unknown Speaker 1: No kidding. Christ. What\'s the play, cap?
                    - Unknown Speaker 4: I say we shoot this crap into the nearest star. Or gas giant maybe.
                    - Unknown Speaker 2 (\"Cap\"): Pretty much. Get in one of the voidsuits and rig the can up with some spare O2 canisters -- plot it a course that\'ll sling it right into V3\'s atmosphere.
                    - Unknown Speaker 1: Yeah, sure. That shouldn\'t take long. Then what?
                    - Unknown Speaker 2 (\"Cap\"): Let\'s see... ah, perfect. There's another ship passing close by, and I know the captain. We'll take our suits out and have her pick us up. Max, you still got those old cutting charges I told you to get rid of?
                    - Unknown Speaker 4 (\"Max\"): No. (pause) ...but also yes.
                    - Unknown Speaker 2 (\"Cap\"): Your propensity for ignoring my orders has once again paid off... man, I\'m gonna miss the Unity, but... better this way. I want holes in both sides of the engine bay and one in the portside crawlspace. Lock all the doors open and depressurize the main cabins. Drain as much fuel as you can, break up the main power block, and scatter the parts.
                    - Unknown Speaker 1: You want us to scuttle her, chief?
                    - Unknown Speaker 2 (\"Cap\"): Nail on the head, my friend.
                    - Unknown Speaker 3: Let\'s get rid of that fucking can first, I think it just blinked at me.
                    - END LOG
                    -
                    - CATALOGUER VOICE RECOGNITION RESULTS:
                    - SPEAKER ONE: No match.
                    - SPEAKER TWO, \"CAP\": Predicted to be Jeremiah Wells, human, last registered owner of the ITV Unity and small-time smuggler of fake alien artefacts. Wanted for smuggling and sale of said (fake) alien artefacts. 87% confidence.
                    - SPEAKER THREE: Predicted to be Allie Wells, human, niece of Captain Wells. 90% confidence.
                    - SPEAKER FOUR, \"MAX\": Predicted to be Maxwell Ulysses Sarevic, zorren, known smuggler, and wanted in the Elysian Colonies for liberation of slaves and, quote, \'harshing my vibe, and being a, like, total lamer, dude\', unquote. 99% confidence. - "} - -//CHOMPADD start - Snowfield blackbox. Could move this to snowfield_ch.dm tbh. - -/obj/structure/prop/blackbox/snowfield_base - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/snowfield_base) - -/datum/category_item/catalogue/information/blackbox/snowfield_base - name = "Black Box Data - CCCP Sector 108 Base" - desc = {" -
                    - SYSTEM ACTIVATED. BEGINNING LOG.
                    - ACTIVATION TIME : 03:00. APRIL 10. WEDNESDAY. 1979.


                    - AWAITING LOGIN.
                    - RANK 6R ACCESS IDENTIFIED. Awaiting rank 6S input within 5 seconds.
                    - RANK 6S ACCESS IDENTIFIED. Authorization time : 2.74 seconds. Awaiting rank 7 input within 5 seconds.
                    - RANK 7 ACCSS IDENTIFIED. Authorization time : 1.89 seconds. Contacting to High command.
                    - HIGH COMMAND RESPOND RECIEVED. Authorization time : 31.67 seconds.

                    - OPERATION TUNGUSKA INITIATED.
                    - ACTIVATION TIME : 03:01. APRIL 10. WEDNESDAY. 1979.


                    - INITIATING SYSTEM DIAGNOSIS
                    - TUNGUSKA SUPERMATTER INTEGRITY : NORMAL
                    - TUNGUSKA POWER LEVEL : NORMAL
                    - TUNGUSKA BACKUP POWER LEVEL : NORMAL
                    - TUNGUSKA COOLANT LEVEL : NORMAL

                    - TUNGUSTA ACTIVATED.

                    - BLAST DOOR SOFTWARE CONNECTION : NORMAL
                    - GATEWAY POWER LEVEL : NORMAL
                    - GATEWAY CONNECTION : NORMAL
                    - GATEWAY COORDINATION : FAILED
                    - INITIATING COORDINATION RECAL1B&@T...
                    - SYSTEM ERROR.
                    - SYSTEM TOTAL FAILURE.

                    - AUTOMATED SHUTDOWN ON TUNGUSKA.
                    - RESTARTING. . . . . FAILED.
                    - RESTARTING. . . . . FAILED.
                    - RESTARTING. . . . . FA!LED.
                    - RE$TART1^. . . . .



                    - U^a+h0. . . G@+eway %ct!va*ed . . . . .

                    - Unkn0wn m3$sag3 1nc0m!n9. . . . . .

                    - - - L1!0? H3-lo Th!s working?
                    - Ah. Lovely.
                    - Well, this thing over here shouldn't be here to begin with, as far as I can tell.
                    - Nor we, exactly.
                    - But! Since it is also causing a mess on our side, we tried to be in the 'accurate time' as best as possible to stop this keep on going.
                    - Juuust enough to stop this time paradox. Maybe. Someone got to stop it, you see.
                    - Hey, don't blame us, by the way. Passing through time is near impossible even for us, and it is a chore to do so.
                    - But, some dumb-ass has dropped through time and causing a crack on our clock, allowing this gateway to get 'something.'
                    - Details?... You don't want to know much. I am sure you are.
                    - Who am I to decide?... Well. Some may know, but likely not, especially 'you' are on the 'current time' when this is getting recorded.
                    - Nochkuk shall be the name, if you are overly curious about. Not that it really matters if you know who I am, however.
                    - Ah, speech has gone too much and time is precious. Time to let my servants to have their fun, now. Try not to break the time1iNE, mmm?
                    - They hungEr f0r 61o0d, @nd we w1lL vi$-t you 1f y0u do A9aIN.


                    - M&1N P0#ER $HU+TING DOWN. . . . .
                    - %AV!NG RECORD . . . . . SAVED.
                    - SWITCHING MODE TO : ENERGY-SAVING MODE. - "} - +// A fluff structure for certain PoIs involving crashed ships. +// They can be scanned by a cataloguer to obtain the data held inside, and determine what caused whatever is happening on the ship. +/obj/structure/prop/blackbox + name = "blackbox recorder" + desc = "A study machine that logs information about whatever it's attached to, hopefully surviving even if its carrier does not. \ + This one looks like it has ceased writing to its internal data storage." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "blackbox_off" + +// Black boxes are resistant to explosions. +/obj/structure/prop/blackbox/ex_act(severity) + ..(++severity) + + +/obj/structure/prop/blackbox/quarantined_shuttle + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/quarantined_shuttle) + +// The actual 'data' on the black box. Obtainable with a Cataloguer. +/datum/category_item/catalogue/information/blackbox + value = CATALOGUER_REWARD_MEDIUM + +/datum/category_item/catalogue/information/blackbox/quarantined_shuttle + name = "Black Box Data - MBT-540" + desc = {" + Pilot's Log for Major Bill's Transportation Shuttle MBT-540
                    + Routine flight inbound for VIMC Outpost C-12 6:35AM 03/12/2491, Estimated arrival 7:05AM. 16 passengers, 2 crew.
                    + V.I.S Traffic Control 06:05:55:Major Bill's MBT-540 you are clear for departure from Dock 6 on departure route Charlie. Have a safe flight.
                    + Captain Willis 06:06:33: You too, control. Departing route Charlie.
                    + Captain Willis 06:06:48: ...Damn it.
                    **
                    Captain Adisu 06:10:23: Hey Ted, I'm seeing a fuel line pressure drop on engine 3?
                    + Captain Willis 06:10:50: Yeah, I see it. Heater's fading out, redistributing thrust 30% to compensate.
                    06:12:31: A loud thud is heard.
                    + Captain Adisu 06:12:34: What the (Expletives)?
                    Captain Adisu 06:12:39: We just lost power to engine- engine two. Hold on... Atmospheric alarm in the cargo bay. Son of a...
                    + Captain Willis 06:12:59: Reducing thrust further 30%, do we have a breach Adi, a breach?
                    + Captain Adisu 06:13:05:No breach, checking cameras... Looks like- looks like some cargo came loose back there.
                    + Captain Willis 06:13:15: (Expletives), I'm turning us around. Put out a distress call to Control, we'll be back in Sif orbit in a couple of minutes.
                    + ** +
                    + V.I.S Traffic Control 06:15:49: MBT-540 we are receiving you. Your atmospheric sensors are reading potentially harmful toxins in your cargo bay. Advise locking down interior cargo bay doors. Please stand by.
                    + Captain Adisu 06:16:10: Understood.
                    **
                    V.I.S Traffic Control 06:27:02: MBT-540, we have no docking bays available at this time, are you equipped for atmospheric re-entry?
                    + Captain Willis 06:27:12: We-We are shielded. But we have fuel and air for-
                    + V.I.S Traffic Control 06:27:17: Please make an emergency landing at the coordinates provided and standby for further information.
                    + ** +
                    + Captain Willis 06:36:33: Emergency landing successful. Adi, er Adisu is checking on the passengers but we had a smooth enough landing, are we clear to begin evacu-
                    + 06:36:50: (Sound of emergency shutters closing)
                    Captain Willis 06:36:51: What the hell? Control we just had a remote activation of our emergency shutters, please advise.
                    + V.I.S Traffic Control 06:38:10: Captain, please tune to frequency 1493.8 we are passing you on to local emergency response units. Godspeed.
                    + Captain Willis 06:38:49: This is Captain Willis of Major Bill's Transportation flight MBT-540 we have eighteen souls aboard and our emergency lockdown shutters have engaged remotely. Do you read?
                    + S.D.D.C: This is the Sif Department of Disease Control, your vessel has been identified as carrying highly sensitive materials, and due to the nature of your system's automated alerts you will be asked to remain in quarantine until we are able to determine the nature of the pathogens aboard and whether it has entered the air circulation system. Please remain in your cockpit at this time.
                    + ** +
                    + Captain Adisu 17:23:58:09: I don't think they're opening those doors Ted. I don't think they're coming. + "} + +/obj/structure/prop/blackbox/crashed_med_shuttle + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/crashed_med_shuttle) + +/datum/category_item/catalogue/information/blackbox/crashed_med_shuttle + name = "Black Box Data - VMV Aurora's Light" // This might be incorrect. + desc = {" + \[Unable to recover data before this point.\]
                    + Captain Simmons 19:52:01: Come on... it's right there in the distance, we're almost there!
                    + Doctor Nazarril 19:52:26: Odysseus online. Orrderrs, sirr?
                    + Captain Simmons 19:52:29: Brace for impact. We're going in full-speed.
                    + Technician Dynasty 19:52:44: Chief, fire's spread to the secondary propulsion systems.
                    + Captain Simmons 19:52:51: Copy. Any word from TraCon? Transponder's down still?
                    + Technician Dynasty 19:53:02: Can't get in touch, sir. Emergency beacon's active, but we're not going t-
                    + Doctor Nazarril 19:53:08: Don't say it. As long as we believe, we'll get through this.
                    + Captain Simmons 19:53:11: Damn right. We're a few klicks out from the port. Rough landing, but we can do it.
                    + V.I.T.A. 19:53:26: Vessel diagnostics complete. Engines one, two, three offline. Engine four status: critical. Transponder offline. Fire alarm in the patient bay.
                    + A loud explosion is heard.
                    + V.I.T.A. 19:53:29: Alert: fuel intake valve open.
                    + Technician Dynasty 19:53:31: ... ah.
                    + Doctor Nazarril 19:53:34: Trrranslate?
                    + V.I.T.A. 19:53:37: There is a 16.92% chance of this vessel safely landing at the emergency destination. Note that there is an 83.08% chance of detonation of fuel supplies upon landing.
                    + Technician Dynasty 19:53:48: We'll make it, sure, but we'll explode and take out half the LZ with us. Propulsion's down, we can't slow down. If we land there, everyone in that port dies, no question.
                    + V.I.T.A. 19:53:53: The Technician is correct.
                    + Doctor Nazarril 19:54:02: Then... we can't land therrre.
                    + V.I.T.A. 19:54:11: Analysing... recommended course of action: attempt emergency landing in isolated area. Chances of survival: negligible.
                    + Captain Simmons 19:54:27: I- alright. I'm bringing us down. You all know what this means.
                    + Doctor Nazarril 19:54:33: Sh... I- I understand. It's been- it's been an honorr, Captain, Dynasty, VITA.
                    + Technician Dynasty 19:54:39: We had a good run. I'm going to miss this.
                    + Captain Simmons 19:54:47: VITA. Tell them we died heroes. Tell them... we did all we could.
                    + V.I.T.A. 19:54:48: I will. Impact in five. Four. Three.
                    + Doctor Nazarril 19:54:49: Oh, starrs... I- you werrre all the... best frriends she everr had. Thank you.
                    + Technician Dynasty 19:54:50: Any time, kid. Any time.
                    + V.I.T.A. 19:54:41: Two.
                    + V.I.T.A. 19:54:42: One.
                    + **8/DEC/2561**
                    + V.I.T.A. 06:22:16: Backup power restored. Attempting to establish connection with emergency rescue personnel.
                    + V.I.T.A. 06:22:17: Unable to establish connection. Transponder destroyed on impact.
                    + V.I.T.A. 06:22:18: No lifesigns detected on board.
                    + **1/JAN/2562**
                    + V.I.T.A. 00:00:00: Happy New Year, crew.
                    + V.I.T.A. 00:00:01: Power reserves: 41%. Diagnostics offline. Cameras offline. Communications offline.
                    + V.I.T.A. 00:00:02: Nobody's coming.
                    + **14/FEB/2562**
                    + V.I.T.A. 00:00:00: Roses are red.
                    + V.I.T.A. 00:00:01: Violets are blue.
                    + V.I.T.A. 00:00:02: Won't you come back?
                    + V.I.T.A. 00:00:03: I miss you.
                    + **15/FEB/2562**
                    + V.I.T.A. 22:19:06: Power reserves critical. Transferring remaining power to emergency broadcasting beacon.
                    + V.I.T.A. 22:19:07: Should anyone find this, lay them to rest. They deserve a proper burial.
                    + V.I.T.A. 22:19:08: Erasing files... shutting down.
                    + A low, monotone beep.
                    + **16/FEB/2562**
                    + Something chitters.
                    + End of transcript. + "} + +/obj/structure/prop/blackbox/xenofrigate + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/xenofrigate) + +/datum/category_item/catalogue/information/blackbox/xenofrigate + name = "Black Box Data - MBT-540" + desc = {" +
                    + Begin Log + @$&@$& Human ##:##:##: Attention unidentified vessel, state your designation and intent.
                    + !#@$&&^ Human ##:##:##: Commander I don't think they're going to stop.
                    + @$&@$& Human ##:##:##: Unidentified vessel, you have until the count of three before we engage weapon-
                    + !#@$&&^ Human ##:##:##: Commander! Think about what you're-
                    + A repeating clicking, before silence.
                    + End of first log.
                    + **
                    + Begin Log
                    + #!#^@$& Skrell ##:##:##: Director, I think you should see this.
                    + ^@$& Skrell ##:##:##: Yes? What is it?
                    + #!#^@$& Skrell ##:##:##: Another one of those ships has appeared near th-462$^ ---n colonies. I would strongly advise pursuing it.
                    + ^@$& Skrell ##:##:##: A wise decision. If it is damaged like the last one, we may be able to finally see what is - What?
                    + A repeating ping, before silence.
                    + End of second log. + "} + +//VOREStation additions below this line - Killian's wrecks +/obj/structure/prop/blackbox/mackerel_wreck + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/mackerel_wreck) + +/datum/category_item/catalogue/information/blackbox/mackerel_wreck + name = "Black Box Data - ITV Phish Phood" + desc = {" +
                    + BEGIN LOG
                    + (blaring alarms)
                    + Shipboard Computer: Collision warning. Collision warning.
                    + Shipboard Computer: High speed impact detected.
                    + Shipboard Computer: Extensive damage detected.
                    + Shipboard Computer: Starboard nacelle offline.
                    + Shipboard Computer: Port nacelle damaged.
                    + Shipboard Computer: Fore starboard impact buffer shattered.
                    + Shipboard Computer: Fore port impact buffer critically damaged.
                    + Shipboard Computer: Warning. Canopy breached. Warning. Canopy breached.
                    + Shipboard Computer: Danger. Canopy depressurized.
                    + Shipboard Computer: Warning. Sensors indicate crawlspaces exposed to vacuum.
                    + Unknown Voice 1: Wow, that thing really did a number on this ship for a fifty year old piece of shit warhead huh?
                    + Unknown Voice 2: No kidding!
                    + Shipboard Computer: Danger. Lethal trauma to operator detected.
                    + Unknown Voice 1: Fucking hell, will you shut that thing up?
                    + (several loud metallic impacts)
                    + Shipboard Computer: Warning. Intruders detec--*kzzzht*
                    + (alarms cease)
                    + Unknown Voice 2: There. Fuck. Finally. Sorry.
                    + Unknown Voice 2: I hope whatever this idiot was hauling is here. Why were they in such a hurry anyway?
                    + Unknown Voice 1: Beats me- and hand me that crowbar already.
                    + Unknown Voice 2: Here, catch.
                    + Unknown Voice 1: \'cha, nice. Let's see...
                    + (sound of metal creaking, then a loud snapping sound)
                    + Unknown Voice 1: And here she is.
                    + Unknown Voice 2: (whistling) What a beauty. How much you think it\'ll go for?
                    + Unknown Voice 1: Enough we\'ll never have to worry about doing another job all the way out here ever again.
                    + Unknown Voice 2: Shiny. Now let\'s bounce before the ess-defs show up.
                    + Unknown Voice 1: I hear that, brat.
                    + END LOG
                    +
                    + CATALOGUER VOICE RECOGNITION RESULTS:
                    + No match found for either speaker, but contextual clues and use of Old Earth Russian (\'brat\', approximately \'brother\' or \'pal\') suggests out-of-sector criminal elements. + "} + +/obj/structure/prop/blackbox/gecko_wreck + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/gecko_wreck) + +/datum/category_item/catalogue/information/blackbox/gecko_wreck + name = "Black Box Data - ITV Sticky Situation" + desc = {" +
                    + BEGIN LOG
                    + (blaring alarms)
                    + Shipboard Computer: Alert. Multiple impacts detected along starboard side.
                    + Shipboard Computer: Multiple hull breaches detected. Starboard cargo hatches have been breached.
                    + Shipboard Computer: Warning. Nacelle engines offline. Thrust reduced by thirty-five-point-three percent.
                    + Unknown Voice 1: Agh! Shit! How'd they know-
                    + (loud explosion, sound of rushing air)
                    + Shipboard Computer: Danger. Canopy breached.
                    + (mechanical whine, followed by a deep hiss)
                    + Shipboard Computer: Automatic lockdown successfully engaged.
                    + Unknown Voice 1: (wheezing) Motherfucker! Jackson, Phelps, stand by to repel boarders!
                    + Unknown Voice 2: Roger!
                    + Unknown Voice 3: Already there.
                    + Shipboard Computer: Warning. Minor breach in Engineering. Local depressurization in five minutes.
                    + Unknown Voice 1: Shit, shit, shit.
                    + Unknown Voice 3: Jackson\'s down!
                    + Unknown Voice 1: Motherf-
                    + Unknown Voice 4: Captain. Enough. You know why we\'re here, and we have your engineer. Tell us where you hid the goods and maybe we\'ll let you live.
                    + Unknown Voice 5: Let me go you son of a-
                    + (gunshot, ballistic)
                    + Unknown Voice 4: You fucking idiot!
                    + Unknown Voice 6: Don\'t you start, you said-
                    + Unknown Voice 4: I don\'t care what I fucking said, shit-for-brains!
                    + Unknown Voice 7: Boss, I hate to rain on your little parade but SDF just popped up on my scopes, \'bout... fifty klicks out, closing fast. Be on top of us in a few minutes tops.
                    + Unknown Voice 4: Fuck! You, dumbass! Link up with the others and grab as many crates as you can! Pray for your sake that we get the right one!
                    + END LOG
                    +
                    + CATALOGUER DATA ANALYSIS RESULTS:
                    + No matches found for any of the voices involved. Ship manifest suggests a crew of at least six, but under the circumstances three of the recorded voices are clearly not from the crew.
                    +
                    + Audio resynthesis of firearm discharge matches common high-caliber ballistic sidearm cartridges, best match 10mm Watson Special. An uncommon cartridge, one not manufactured locally. + "} + +/obj/structure/prop/blackbox/salamander_wreck + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/salamander_wreck) + +/datum/category_item/catalogue/information/blackbox/salamander_wreck + name = "Black Box Data - ITV Unity" + desc = {" +
                    + BEGIN LOG
                    + Unknown Speaker 1: Hey cap, you seeing this?
                    + Unknown Speaker 2 (\"Cap\"): Yea-- what the fuck?
                    + Unknown Speaker 1: Yeah that was my reaction.
                    + Unknown Speaker 3: What are you tw-- holy shit, what is that?
                    + Unknown Speakers 1 & 2: We don't know!
                    + Unknown Speaker 4: What\'s all the yel-- fuck me sideways, what the hell?
                    + Unknown Speaker 2 (\"Cap\"): Stars above and fucking below, they never said anything like this was in the cans... shouldn't the port bioscanners have picked this up?
                    + Unknown Speaker 3: I told you that guy was one shady motherfucker, and whaddaya know.
                    + Unknown Speaker 1: No kidding. Christ. What\'s the play, cap?
                    + Unknown Speaker 4: I say we shoot this crap into the nearest star. Or gas giant maybe.
                    + Unknown Speaker 2 (\"Cap\"): Pretty much. Get in one of the voidsuits and rig the can up with some spare O2 canisters -- plot it a course that\'ll sling it right into V3\'s atmosphere.
                    + Unknown Speaker 1: Yeah, sure. That shouldn\'t take long. Then what?
                    + Unknown Speaker 2 (\"Cap\"): Let\'s see... ah, perfect. There's another ship passing close by, and I know the captain. We'll take our suits out and have her pick us up. Max, you still got those old cutting charges I told you to get rid of?
                    + Unknown Speaker 4 (\"Max\"): No. (pause) ...but also yes.
                    + Unknown Speaker 2 (\"Cap\"): Your propensity for ignoring my orders has once again paid off... man, I\'m gonna miss the Unity, but... better this way. I want holes in both sides of the engine bay and one in the portside crawlspace. Lock all the doors open and depressurize the main cabins. Drain as much fuel as you can, break up the main power block, and scatter the parts.
                    + Unknown Speaker 1: You want us to scuttle her, chief?
                    + Unknown Speaker 2 (\"Cap\"): Nail on the head, my friend.
                    + Unknown Speaker 3: Let\'s get rid of that fucking can first, I think it just blinked at me.
                    + END LOG
                    +
                    + CATALOGUER VOICE RECOGNITION RESULTS:
                    + SPEAKER ONE: No match.
                    + SPEAKER TWO, \"CAP\": Predicted to be Jeremiah Wells, human, last registered owner of the ITV Unity and small-time smuggler of fake alien artefacts. Wanted for smuggling and sale of said (fake) alien artefacts. 87% confidence.
                    + SPEAKER THREE: Predicted to be Allie Wells, human, niece of Captain Wells. 90% confidence.
                    + SPEAKER FOUR, \"MAX\": Predicted to be Maxwell Ulysses Sarevic, zorren, known smuggler, and wanted in the Elysian Colonies for liberation of slaves and, quote, \'harshing my vibe, and being a, like, total lamer, dude\', unquote. 99% confidence. + "} + +//CHOMPADD start - Snowfield blackbox. Could move this to snowfield_ch.dm tbh. + +/obj/structure/prop/blackbox/snowfield_base + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/snowfield_base) + +/datum/category_item/catalogue/information/blackbox/snowfield_base + name = "Black Box Data - CCCP Sector 108 Base" + desc = {" +
                    + SYSTEM ACTIVATED. BEGINNING LOG.
                    + ACTIVATION TIME : 03:00. APRIL 10. WEDNESDAY. 1979.


                    + AWAITING LOGIN.
                    + RANK 6R ACCESS IDENTIFIED. Awaiting rank 6S input within 5 seconds.
                    + RANK 6S ACCESS IDENTIFIED. Authorization time : 2.74 seconds. Awaiting rank 7 input within 5 seconds.
                    + RANK 7 ACCSS IDENTIFIED. Authorization time : 1.89 seconds. Contacting to High command.
                    + HIGH COMMAND RESPOND RECIEVED. Authorization time : 31.67 seconds.

                    + OPERATION TUNGUSKA INITIATED.
                    + ACTIVATION TIME : 03:01. APRIL 10. WEDNESDAY. 1979.


                    + INITIATING SYSTEM DIAGNOSIS
                    + TUNGUSKA SUPERMATTER INTEGRITY : NORMAL
                    + TUNGUSKA POWER LEVEL : NORMAL
                    + TUNGUSKA BACKUP POWER LEVEL : NORMAL
                    + TUNGUSKA COOLANT LEVEL : NORMAL

                    + TUNGUSTA ACTIVATED.

                    + BLAST DOOR SOFTWARE CONNECTION : NORMAL
                    + GATEWAY POWER LEVEL : NORMAL
                    + GATEWAY CONNECTION : NORMAL
                    + GATEWAY COORDINATION : FAILED
                    + INITIATING COORDINATION RECAL1B&@T...
                    + SYSTEM ERROR.
                    + SYSTEM TOTAL FAILURE.

                    + AUTOMATED SHUTDOWN ON TUNGUSKA.
                    + RESTARTING. . . . . FAILED.
                    + RESTARTING. . . . . FAILED.
                    + RESTARTING. . . . . FA!LED.
                    + RE$TART1^. . . . .



                    + U^a+h0. . . G@+eway %ct!va*ed . . . . .

                    + Unkn0wn m3$sag3 1nc0m!n9. . . . . .

                    + - - L1!0? H3-lo Th!s working?
                    + Ah. Lovely.
                    + Well, this thing over here shouldn't be here to begin with, as far as I can tell.
                    + Nor we, exactly.
                    + But! Since it is also causing a mess on our side, we tried to be in the 'accurate time' as best as possible to stop this keep on going.
                    + Juuust enough to stop this time paradox. Maybe. Someone got to stop it, you see.
                    + Hey, don't blame us, by the way. Passing through time is near impossible even for us, and it is a chore to do so.
                    + But, some dumb-ass has dropped through time and causing a crack on our clock, allowing this gateway to get 'something.'
                    + Details?... You don't want to know much. I am sure you are.
                    + Who am I to decide?... Well. Some may know, but likely not, especially 'you' are on the 'current time' when this is getting recorded.
                    + Nochkuk shall be the name, if you are overly curious about. Not that it really matters if you know who I am, however.
                    + Ah, speech has gone too much and time is precious. Time to let my servants to have their fun, now. Try not to break the time1iNE, mmm?
                    + They hungEr f0r 61o0d, @nd we w1lL vi$-t you 1f y0u do A9aIN.


                    + M&1N P0#ER $HU+TING DOWN. . . . .
                    + %AV!NG RECORD . . . . . SAVED.
                    + SWITCHING MODE TO : ENERGY-SAVING MODE. + "} + //CHOMPADD end \ No newline at end of file diff --git a/code/game/objects/structures/props/fake_ai.dm b/code/game/objects/structures/props/fake_ai.dm index e1aa98b64a..75d5de407c 100644 --- a/code/game/objects/structures/props/fake_ai.dm +++ b/code/game/objects/structures/props/fake_ai.dm @@ -1,20 +1,20 @@ -// A fluff structure to visually look like an AI core. -// Unlike the decoy AI mob, this won't explode if someone tries to card it. -/obj/structure/prop/fake_ai - name = "AI" - desc = "" - icon = 'icons/mob/AI.dmi' - icon_state = "ai" - -/obj/structure/prop/fake_ai/attackby(obj/O, mob/user) - if(istype(O, /obj/item/device/aicard)) // People trying to card the fake AI will get told its impossible. - to_chat(user, span("warning", "This core does not appear to have a suitable port to use \the [O] on...")) - return TRUE - return ..() - -/obj/structure/prop/fake_ai/dead - icon_state = "ai-crash" - -/obj/structure/prop/fake_ai/dead/crashed_med_shuttle - name = "V.I.T.A." +// A fluff structure to visually look like an AI core. +// Unlike the decoy AI mob, this won't explode if someone tries to card it. +/obj/structure/prop/fake_ai + name = "AI" + desc = "" + icon = 'icons/mob/AI.dmi' + icon_state = "ai" + +/obj/structure/prop/fake_ai/attackby(obj/O, mob/user) + if(istype(O, /obj/item/device/aicard)) // People trying to card the fake AI will get told its impossible. + to_chat(user, span("warning", "This core does not appear to have a suitable port to use \the [O] on...")) + return TRUE + return ..() + +/obj/structure/prop/fake_ai/dead + icon_state = "ai-crash" + +/obj/structure/prop/fake_ai/dead/crashed_med_shuttle + name = "V.I.T.A." icon_state = "ai-heartline-crash" \ No newline at end of file diff --git a/code/game/objects/structures/props/transmitter.dm b/code/game/objects/structures/props/transmitter.dm index bfbe1c9a90..f7e13e9a42 100644 --- a/code/game/objects/structures/props/transmitter.dm +++ b/code/game/objects/structures/props/transmitter.dm @@ -1,29 +1,29 @@ -// A fluff structure for certain PoIs involving communications. -// It makes audible sounds, generally in morse code. -/obj/structure/prop/transmitter - name = "transmitter" - desc = "A machine that appears to be transmitting a message somewhere else. It sounds like it's on a loop." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "sensors" - var/datum/looping_sound/sequence/morse/soundloop - var/message_to_play = "The quick brown fox jumps over the lazy dog." - -/obj/structure/prop/transmitter/Initialize() - soundloop = new(list(src), FALSE) - set_new_message(message_to_play) - soundloop.start() - interaction_message = "On the monitor it displays '[uppertext(message_to_play)]'." - return ..() - -/obj/structure/prop/transmitter/Destroy() - QDEL_NULL(soundloop) - return ..() - -/obj/structure/prop/transmitter/vv_edit_var(var_name, var_value) - if(var_name == "message_to_play") - set_new_message(var_value) - return ..() - -/obj/structure/prop/transmitter/proc/set_new_message(new_message) - soundloop.set_new_sequence(new_message) - interaction_message = "On the monitor it displays '[uppertext(new_message)]'." +// A fluff structure for certain PoIs involving communications. +// It makes audible sounds, generally in morse code. +/obj/structure/prop/transmitter + name = "transmitter" + desc = "A machine that appears to be transmitting a message somewhere else. It sounds like it's on a loop." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "sensors" + var/datum/looping_sound/sequence/morse/soundloop + var/message_to_play = "The quick brown fox jumps over the lazy dog." + +/obj/structure/prop/transmitter/Initialize() + soundloop = new(list(src), FALSE) + set_new_message(message_to_play) + soundloop.start() + interaction_message = "On the monitor it displays '[uppertext(message_to_play)]'." + return ..() + +/obj/structure/prop/transmitter/Destroy() + QDEL_NULL(soundloop) + return ..() + +/obj/structure/prop/transmitter/vv_edit_var(var_name, var_value) + if(var_name == "message_to_play") + set_new_message(var_value) + return ..() + +/obj/structure/prop/transmitter/proc/set_new_message(new_message) + soundloop.set_new_sequence(new_message) + interaction_message = "On the monitor it displays '[uppertext(new_message)]'." diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 6ac0d6b502..f3875bf508 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -1,191 +1,191 @@ -/* -CONTAINS: -SAFES -FLOOR SAFES -*/ - -//SAFES -/obj/structure/safe - name = "safe" - desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" - icon = 'icons/obj/structures.dmi' - icon_state = "safe" - anchored = TRUE - density = TRUE - var/open = 0 //is the safe open? - var/tumbler_1_pos //the tumbler position- from 0 to 72 - var/tumbler_1_open //the tumbler position to open at- 0 to 72 - var/tumbler_2_pos - var/tumbler_2_open - var/dial = 0 //where is the dial pointing? - var/space = 0 //the combined w_class of everything in the safe - var/maxspace = 24 //the maximum combined w_class of stuff in the safe - - -/obj/structure/safe/Initialize() - tumbler_1_pos = rand(0, 72) - tumbler_1_open = rand(0, 72) - - tumbler_2_pos = rand(0, 72) - tumbler_2_open = rand(0, 72) - - if(. != INITIALIZE_HINT_QDEL) - return INITIALIZE_HINT_LATELOAD - -/obj/structure/safe/LateInitialize() - . = ..() - for(var/obj/item/I in loc) - if(space >= maxspace) - return - if(I.w_class + space <= maxspace) - space += I.w_class - I.forceMove(src) - -/obj/structure/safe/proc/check_unlocked(mob/user as mob, canhear) - if(user && canhear) - if(tumbler_1_pos == tumbler_1_open) - to_chat(user, "You hear a [pick("tonk", "krunk", "plunk")] from \the [src].") - if(tumbler_2_pos == tumbler_2_open) - to_chat(user, "You hear a [pick("tink", "krink", "plink")] from \the [src].") - if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) - if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") - return 1 - return 0 - - -/obj/structure/safe/proc/decrement(num) - num -= 1 - if(num < 0) - num = 71 - return num - - -/obj/structure/safe/proc/increment(num) - num += 1 - if(num > 71) - num = 0 - return num - - -/obj/structure/safe/update_icon() - if(open) - icon_state = "[initial(icon_state)]-open" - else - icon_state = initial(icon_state) - - -/obj/structure/safe/attack_hand(mob/user as mob) - user.set_machine(src) - var/dat = "
                    " - dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" - if(open) - dat += "" - for(var/i = contents.len, i>=1, i--) - var/obj/item/P = contents[i] - dat += "" - dat += "
                    [P.name]
                    " - user << browse("[name][dat]", "window=safe;size=350x300") - - -/obj/structure/safe/Topic(href, href_list) - if(!ishuman(usr)) return - var/mob/living/carbon/human/user = usr - - var/canhear = 0 - if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope)) - canhear = 1 - - if(href_list["open"]) - if(check_unlocked()) - to_chat(user, "You [open ? "close" : "open"] [src].") - open = !open - update_icon() - updateUsrDialog() - return - else - to_chat(user, "You can't [open ? "close" : "open"] [src], the lock is engaged!") - return - - if(href_list["decrement"]) - dial = decrement(dial) - if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 71) - tumbler_1_pos = decrement(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from \the [src].") - if(tumbler_1_pos == tumbler_2_pos + 37 || tumbler_1_pos == tumbler_2_pos - 35) - tumbler_2_pos = decrement(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from \the [src].") - playsound(src, 'sound/machines/click.ogg', 20, 1) - check_unlocked(user, canhear) - - updateUsrDialog() - return - - if(href_list["increment"]) - dial = increment(dial) - if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 71) - tumbler_1_pos = increment(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from \the [src].") - if(tumbler_1_pos == tumbler_2_pos - 37 || tumbler_1_pos == tumbler_2_pos + 35) - tumbler_2_pos = increment(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from \the [src].") - playsound(src, 'sound/machines/click.ogg', 20, 1) - check_unlocked(user, canhear) - updateUsrDialog() - return - - if(href_list["retrieve"]) - user << browse("", "window=safe") // Close the menu - - var/obj/item/P = locate(href_list["retrieve"]) in src - if(open) - if(P && in_range(src, user)) - user.put_in_hands(P) - updateUsrDialog() - - -/obj/structure/safe/attackby(obj/item/I as obj, mob/user as mob) - if(open) - if(I.w_class + space <= maxspace) - space += I.w_class - user.drop_item() - I.loc = src - to_chat(user, "You put [I] in \the [src].") - updateUsrDialog() - return - else - to_chat(user, "[I] won't fit in \the [src].") - return - else - if(istype(I, /obj/item/clothing/accessory/stethoscope)) - to_chat(user, "Hold [I] in one of your hands while you manipulate the dial.") - return - - -/obj/structure/safe/ex_act(severity) - return - -//FLOOR SAFES -/obj/structure/safe/floor - name = "floor safe" - icon_state = "floorsafe" - density = FALSE - level = 1 //underfloor - plane = PLATING_PLANE - layer = ABOVE_UTILITY - -/obj/structure/safe/floor/Initialize() - . = ..() - var/turf/T = loc - if(istype(T) && !T.is_plating()) - hide(1) - update_icon() - -/obj/structure/safe/floor/hide(var/intact) - invisibility = intact ? 101 : 0 - -/obj/structure/safe/floor/hides_under_flooring() - return 1 +/* +CONTAINS: +SAFES +FLOOR SAFES +*/ + +//SAFES +/obj/structure/safe + name = "safe" + desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" + icon = 'icons/obj/structures.dmi' + icon_state = "safe" + anchored = TRUE + density = TRUE + var/open = 0 //is the safe open? + var/tumbler_1_pos //the tumbler position- from 0 to 72 + var/tumbler_1_open //the tumbler position to open at- 0 to 72 + var/tumbler_2_pos + var/tumbler_2_open + var/dial = 0 //where is the dial pointing? + var/space = 0 //the combined w_class of everything in the safe + var/maxspace = 24 //the maximum combined w_class of stuff in the safe + + +/obj/structure/safe/Initialize() + tumbler_1_pos = rand(0, 72) + tumbler_1_open = rand(0, 72) + + tumbler_2_pos = rand(0, 72) + tumbler_2_open = rand(0, 72) + + if(. != INITIALIZE_HINT_QDEL) + return INITIALIZE_HINT_LATELOAD + +/obj/structure/safe/LateInitialize() + . = ..() + for(var/obj/item/I in loc) + if(space >= maxspace) + return + if(I.w_class + space <= maxspace) + space += I.w_class + I.forceMove(src) + +/obj/structure/safe/proc/check_unlocked(mob/user as mob, canhear) + if(user && canhear) + if(tumbler_1_pos == tumbler_1_open) + to_chat(user, "You hear a [pick("tonk", "krunk", "plunk")] from \the [src].") + if(tumbler_2_pos == tumbler_2_open) + to_chat(user, "You hear a [pick("tink", "krink", "plink")] from \the [src].") + if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) + if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") + return 1 + return 0 + + +/obj/structure/safe/proc/decrement(num) + num -= 1 + if(num < 0) + num = 71 + return num + + +/obj/structure/safe/proc/increment(num) + num += 1 + if(num > 71) + num = 0 + return num + + +/obj/structure/safe/update_icon() + if(open) + icon_state = "[initial(icon_state)]-open" + else + icon_state = initial(icon_state) + + +/obj/structure/safe/attack_hand(mob/user as mob) + user.set_machine(src) + var/dat = "
                    " + dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" + if(open) + dat += "" + for(var/i = contents.len, i>=1, i--) + var/obj/item/P = contents[i] + dat += "" + dat += "
                    [P.name]
                    " + user << browse("[name][dat]", "window=safe;size=350x300") + + +/obj/structure/safe/Topic(href, href_list) + if(!ishuman(usr)) return + var/mob/living/carbon/human/user = usr + + var/canhear = 0 + if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope)) + canhear = 1 + + if(href_list["open"]) + if(check_unlocked()) + to_chat(user, "You [open ? "close" : "open"] [src].") + open = !open + update_icon() + updateUsrDialog() + return + else + to_chat(user, "You can't [open ? "close" : "open"] [src], the lock is engaged!") + return + + if(href_list["decrement"]) + dial = decrement(dial) + if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 71) + tumbler_1_pos = decrement(tumbler_1_pos) + if(canhear) + to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from \the [src].") + if(tumbler_1_pos == tumbler_2_pos + 37 || tumbler_1_pos == tumbler_2_pos - 35) + tumbler_2_pos = decrement(tumbler_2_pos) + if(canhear) + to_chat(user, "You hear a [pick("click", "chink", "clink")] from \the [src].") + playsound(src, 'sound/machines/click.ogg', 20, 1) + check_unlocked(user, canhear) + + updateUsrDialog() + return + + if(href_list["increment"]) + dial = increment(dial) + if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 71) + tumbler_1_pos = increment(tumbler_1_pos) + if(canhear) + to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from \the [src].") + if(tumbler_1_pos == tumbler_2_pos - 37 || tumbler_1_pos == tumbler_2_pos + 35) + tumbler_2_pos = increment(tumbler_2_pos) + if(canhear) + to_chat(user, "You hear a [pick("click", "chink", "clink")] from \the [src].") + playsound(src, 'sound/machines/click.ogg', 20, 1) + check_unlocked(user, canhear) + updateUsrDialog() + return + + if(href_list["retrieve"]) + user << browse("", "window=safe") // Close the menu + + var/obj/item/P = locate(href_list["retrieve"]) in src + if(open) + if(P && in_range(src, user)) + user.put_in_hands(P) + updateUsrDialog() + + +/obj/structure/safe/attackby(obj/item/I as obj, mob/user as mob) + if(open) + if(I.w_class + space <= maxspace) + space += I.w_class + user.drop_item() + I.loc = src + to_chat(user, "You put [I] in \the [src].") + updateUsrDialog() + return + else + to_chat(user, "[I] won't fit in \the [src].") + return + else + if(istype(I, /obj/item/clothing/accessory/stethoscope)) + to_chat(user, "Hold [I] in one of your hands while you manipulate the dial.") + return + + +/obj/structure/safe/ex_act(severity) + return + +//FLOOR SAFES +/obj/structure/safe/floor + name = "floor safe" + icon_state = "floorsafe" + density = FALSE + level = 1 //underfloor + plane = PLATING_PLANE + layer = ABOVE_UTILITY + +/obj/structure/safe/floor/Initialize() + . = ..() + var/turf/T = loc + if(istype(T) && !T.is_plating()) + hide(1) + update_icon() + +/obj/structure/safe/floor/hide(var/intact) + invisibility = intact ? 101 : 0 + +/obj/structure/safe/floor/hides_under_flooring() + return 1 diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 9d59891ebd..796e83cdba 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -1,1968 +1,1968 @@ -/obj/structure/sign - icon = 'icons/obj/decals.dmi' - anchored = TRUE - opacity = 0 - density = FALSE - plane = OBJ_PLANE //VOREStation Edit - layer = ABOVE_JUNK_LAYER //VOREStation Edit - w_class = ITEMSIZE_NORMAL - -/obj/structure/sign/ex_act(severity) - qdel(src) - -/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction - if(tool.has_tool_quality(TOOL_SCREWDRIVER) && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double)) - playsound(src, tool.usesound, 50, 1) - unfasten(user) - else ..() - -/obj/structure/sign/proc/unfasten(mob/user) - user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You unfasten \the [src].")) - var/obj/item/sign/S = new(src.loc) - S.name = name - S.desc = desc - S.icon_state = icon_state - S.sign_state = icon_state - S.original_type = type - qdel(src) - - -/obj/item/sign - name = "sign" - desc = "" - icon = 'icons/obj/decals.dmi' - w_class = ITEMSIZE_NORMAL //big - var/sign_state = "" - var/original_type - -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(tool.has_tool_quality(TOOL_SCREWDRIVER) && isturf(user.loc)) - var/direction = tgui_input_list(usr, "In which direction?", "Select direction.", list("North", "East", "South", "West", "Cancel")) - if(direction == "Cancel") return - var/target_type = original_type || /obj/structure/sign - var/obj/structure/sign/S = new target_type(user.loc) - switch(direction) - if("North") - S.pixel_y = 32 - if("East") - S.pixel_x = 32 - if("South") - S.pixel_y = -32 - if("West") - S.pixel_x = -32 - else return - S.name = name - S.desc = desc - S.icon_state = sign_state - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else ..() - -/obj/structure/sign/scenery/map - name = "station map" - desc = "A framed picture of the station." - -/obj/structure/sign/scenery/map/left - icon_state = "map-left" - -/obj/structure/sign/scenery/map/right - icon_state = "map-right" - -/obj/structure/sign/securearea - name = "\improper SECURE AREA" - desc = "A warning sign which reads 'SECURE AREA'." - icon_state = "securearea" - -/obj/structure/sign/biohazard - name = "\improper BIOHAZARD" - desc = "A warning sign which reads 'BIOHAZARD'." - icon_state = "bio" - -/obj/structure/sign/electricshock - name = "\improper HIGH VOLTAGE" - desc = "A warning sign which reads 'HIGH VOLTAGE'." - icon_state = "shock" - -/obj/structure/sign/examroom - name = "\improper EXAM" - desc = "A guidance sign which reads 'EXAM ROOM'." - icon_state = "examroom" - -/obj/structure/sign/vacuum - name = "\improper HARD VACUUM AHEAD" - desc = "A warning sign which reads 'HARD VACUUM AHEAD'." - icon_state = "space" - -/obj/structure/sign/deathsposal - name = "\improper DISPOSAL LEADS TO SPACE" - desc = "A warning sign which reads 'DISPOSAL LEADS TO SPACE'." - icon_state = "deathsposal" - -/obj/structure/sign/pods - name = "\improper ESCAPE PODS" - desc = "A warning sign which reads 'ESCAPE PODS'." - icon_state = "pods" - -/obj/structure/sign/fire - name = "\improper DANGER: FIRE" - desc = "A warning sign which reads 'DANGER: FIRE'." - icon_state = "fire" - -/obj/structure/sign/nosmoking_1 - name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'." - icon_state = "nosmoking" - -/obj/structure/sign/nosmoking_2 - name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'." - icon_state = "nosmoking2" - -/obj/structure/sign/nosmoking_2/burnt - name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'. It looks like someone didn't follow its advice..." - icon_state = "nosmoking2_burnt" - -/obj/structure/sign/warning - name = "\improper WARNING" - icon_state = "securearea" - -/obj/structure/sign/warning/Initialize() - . = ..() - desc = "A warning sign which reads '[name]'." - -/obj/structure/sign/warning/airlock - name = "\improper EXTERNAL AIRLOCK" - icon_state = "doors" - -/obj/structure/sign/warning/biohazard - name = "\improper BIOHAZARD" - icon_state = "bio" - -/obj/structure/sign/warning/bomb_range - name = "\improper BOMB RANGE" - icon_state = "blast" - -/obj/structure/sign/warning/caution - name = "\improper CAUTION" - -/obj/structure/sign/warning/compressed_gas - name = "\improper COMPRESSED GAS" - icon_state = "hikpa" - -/obj/structure/sign/warning/deathsposal - name = "\improper DISPOSAL LEADS TO SPACE" - icon_state = "deathsposal" - -/obj/structure/sign/warning/docking_area - name = "\improper KEEP CLEAR: DOCKING AREA" - -/obj/structure/sign/warning/evac - name = "\improper KEEP CLEAR: EVAC DOCKING AREA" - icon_state = "evac" - -/obj/structure/sign/warning/engineering_access - name = "\improper ENGINEERING ACCESS" - icon_state = "engine" - -/obj/structure/sign/warning/fire - name = "\improper DANGER: FIRE" - icon_state = "fire" - -/obj/structure/sign/warning/high_voltage - name = "\improper HIGH VOLTAGE" - icon_state = "shock" - -/obj/structure/sign/warning/hot_exhaust - name = "\improper HOT EXHAUST" - icon_state = "fire" - -/obj/structure/sign/warning/internals_required - name = "\improper INTERNALS REQUIRED" - -/obj/structure/sign/warning/lethal_turrets - name = "\improper LETHAL TURRETS" - icon_state = "turrets" - -/obj/structure/sign/warning/lethal_turrets/Initialize() - . = ..() - desc += " Enter at own risk!." - -/obj/structure/sign/warning/mail_delivery - name = "\improper MAIL DELIVERY" - icon_state = "mail" - -/obj/structure/sign/warning/moving_parts - name = "\improper MOVING PARTS" - icon_state = "movingparts" - -/obj/structure/sign/warning/nosmoking_1 - name = "\improper NO SMOKING" - icon_state = "nosmoking" - -/obj/structure/sign/warning/nosmoking_2 - name = "\improper NO SMOKING" - icon_state = "nosmoking2" - -/obj/structure/sign/warning/pods - name = "\improper ESCAPE PODS" - icon_state = "pods" - -/obj/structure/sign/warning/radioactive - name = "\improper RADIOACTIVE AREA" - icon_state = "radiation" - -/obj/structure/sign/warning/secure_area - name = "\improper SECURE AREA" - icon_state = "securearea2" - -/obj/structure/sign/warning/secure_area/armory - name = "\improper ARMORY" - icon_state = "armory" - -/obj/structure/sign/warning/server_room - name = "\improper SERVER ROOM" - icon_state = "server" - -/obj/structure/sign/warning/siphon_valve - name = "\improper SIPHON VALVE" - -/obj/structure/sign/warning/vacuum - name = "\improper HARD VACUUM AHEAD" - icon_state = "space" - -/obj/structure/sign/warning/vent_port - name = "\improper EJECTION/VENTING PORT" - -/obj/structure/sign/warning/emergence - name = "\improper EMERGENT INTELLIGENCE DETAILS" - icon_state = "rogueai" - -/obj/structure/sign/warning/falling - name = "\improper FALL HAZARD" - icon_state = "falling" - -/obj/structure/sign/warning/lava - name = "\improper MOLTEN SURFACE" - icon_state = "lava" - -/obj/structure/sign/warning/acid - name = "\improper ACIDIC SURFACE" - icon_state = "acid" - -/obj/structure/sign/warning/cold - name = "\improper EXTREME COLD ENVIRONMENT" - icon_state = "cold" - -/obj/structure/sign/redcross - name = "medbay" - desc = "An interstellar symbol of medical institutions. You'll probably get help here." - icon_state = "bluecross" - -/obj/structure/sign/greencross - name = "medbay" - desc = "An interstellar symbol of medical institutions. You'll probably get help here." - icon_state = "bluecross2" - -/obj/structure/sign/goldenplaque - name = "The Most Robust Men Award for Robustness" - desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends." - icon_state = "goldenplaque" - -/obj/structure/sign/kiddieplaque - name = "\improper AI developers plaque" - desc = "Next to the extremely long list of names and job titles. Beneath the image, someone has scratched the word \"PACKETS\"" - icon_state = "kiddieplaque" - -//CHOMP Add start -/obj/structure/sign/kiddieplaque/poi1 - name = "expeditionary corps frame" - desc = "An old framed photograph of four figures in retro mining gear wielding harpoons. They look ready for a fight." - icon_state = "explorerplaque" - -/obj/structure/sign/kiddieplaque/poi2 - name = "expeditionary corps frame" - desc = "An old framed photograph of an oversized harpoon cannon." - icon_state = "explorerplaque2" - -/obj/structure/sign/kiddieplaque/poi3 - name = "expeditionary corps frame" - desc = "An old framed photograph of a gigantic black bear. Even through print it's chilling to examine." - icon_state = "explorerplaque3" - -/obj/structure/sign/kiddieplaque/poi4 - name = "expeditionary corps frame" - desc = "An old framed paper map littered with notes. Looks like the creator was marking the location of deposits." - icon_state = "explorerplaque4" -//CHOMP Add end - -/obj/structure/sign/atmosplaque - name = "\improper FEA atmospherics division plaque" - desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." - icon_state = "atmosplaque" - -/obj/structure/sign/periodic - name = "periodic table" - desc = "A sign reminding those visiting of the elements of the periodic table- though, they should have memorized them by now." - icon_state = "periodic" - -/obj/structure/sign/double/maltesefalcon //The sign is 64x32, so it needs two tiles. ;3 - name = "The Maltese Falcon" - desc = "The Maltese Falcon, Space Bar and Grill." - -/obj/structure/sign/double/maltesefalcon/left - icon_state = "maltesefalcon-left" - -/obj/structure/sign/double/maltesefalcon/right - icon_state = "maltesefalcon-right" - -/obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map - name = "\improper SCIENCE!" - desc = "A warning sign which reads 'SCIENCE'." - icon_state = "science1" - -/obj/structure/sign/chemistry - name = "\improper CHEMISTRY" - desc = "A warning sign which reads 'CHEMISTRY'." - icon_state = "chemistry1" - -/obj/structure/sign/botany - name = "\improper HYDROPONICS" - desc = "A warning sign which reads 'HYDROPONICS'." - icon_state = "hydro1" - -/obj/structure/sign/hydro - name = "\improper HYDROPONICS" - desc = "A sign labelling an area as a place where plants are grown." - icon_state = "hydro2" - -/obj/structure/sign/hydrostorage - name = "\improper HYDROPONICS STORAGE" - desc = "A sign labelling an area as a place where plant growing supplies are kept." - icon_state = "hydro3" - -/obj/structure/sign/xenobio - name = "\improper XENOBIOLOGY" - desc = "A warning sign which reads XENOBIOLOGY." - icon_state = "xenobio3" - - -//direction signs presented by the order they appear in the dmi -/obj/structure/sign/directions - name = "direction sign" - desc = "A direction sign, claiming to know the way to... somewhere?" - icon_state = "direction" - icon = 'icons/obj/decals_directions.dmi' - //TODO: set up overlay systems, inc. interactions (e.g. vines clear w/ plantbgone or fire, snow can be brushed off or melted, and so on) - -//disabled this proc, it serves no purpose except to overwrite the description that already exists. may have been intended for making your own signs? -//seems to defeat the point of having a generic directional sign that mappers could edit and use in POIs? left it here in case something breaks. -/* -/obj/structure/sign/directions/Initialize() - . = ..() - desc = "A direction sign, pointing out the way to \the [src]." -*/ - -//Also floor/level/deck signs in the same vein. Naming conventions! -/obj/structure/sign/levels - name = "level sign" - desc = "A level sign, claiming to know which level to find... Something on?" - icon_state = "level" - icon = 'icons/obj/decals_levels.dmi' - -//engineering signs -/obj/structure/sign/directions/engineering - name = "\improper Engineering Department" - desc = "A direction sign, pointing out the way to the Engineering Department." - icon_state = "direction_eng" - -/obj/structure/sign/levels/engineering - name = "\improper Engineering Department" - desc = "A level sign, stating the level to find the Engineering Department on." - icon_state = "level_eng" - -/obj/structure/sign/directions/engineering/reactor - name = "\improper Reactor" - desc = "A direction sign, pointing out the way to the Reactor." - icon_state = "direction_core" - -/obj/structure/sign/levels/engineering/reactor - name = "\improper Reactor" - desc = "A level sign, stating the level to find the Reactor on." - icon_state = "level_core" - -/obj/structure/sign/directions/engineering/solars - name = "\improper Solar Array" - desc = "A direction sign, pointing out the way to the nearest Solar Array." - icon_state = "direction_solar" - -/obj/structure/sign/levels/engineering/solars - name = "\improper Solar Array" - desc = "A level sign, stating the level to find the nearest Solar Array on." - icon_state = "level_solar" - -/obj/structure/sign/directions/engineering/atmospherics - name = "\improper Atmospherics Department" - desc = "A direction sign, pointing out the way to the Atmospherics Department." - icon_state = "direction_atmos" - -/obj/structure/sign/levels/engineering/atmospherics - name = "\improper Atmospherics Department" - desc = "A level sign, stating the level to find the Atmospherics Department on." - icon_state = "level_atmos" - -/obj/structure/sign/directions/engineering/gravgen - name = "\improper Gravity Generator" - desc = "A direction sign, pointing out the way to the Artificial Gravity Generator." - icon_state = "direction_grav" - -/obj/structure/sign/levels/engineering/gravgen - name = "\improper Gravity Generator" - desc = "A level sign, stating the level to find the Artificial Gravity Generator on." - icon_state = "level_grav" - -/obj/structure/sign/directions/engineering/engeqp - name = "\improper Engineering Equipment Storage" - desc = "A direction sign, pointing out the way to Engineering Equipment Storage." - icon_state = "direction_engeqp" - -/obj/structure/sign/levels/engineering/engeqp - name = "\improper Engineering Equipment Storage" - desc = "A level sign, stating the level to find Engineering Equipment Storage on." - icon_state = "level_engeqp" - -//security signs -/obj/structure/sign/directions/security - name = "\improper Security Department" - desc = "A direction sign, pointing out the way to the Security Department." - icon_state = "direction_sec" - -/obj/structure/sign/levels/security - name = "\improper Security Department" - desc = "A level sign, stating the level to find the Security Department on." - icon_state = "level_sec" - -/obj/structure/sign/directions/security/armory - name = "\improper Armory" - desc = "A direction sign, pointing out the way to the Armory." - icon_state = "direction_armory" - -/obj/structure/sign/levels/security/armory - name = "\improper Armory" - desc = "A level sign, stating the level to find the Armory on." - icon_state = "level_armory" - -/obj/structure/sign/directions/security/brig - name = "\improper Brig" - desc = "A direction sign, pointing out the way to the Brig." - icon_state = "direction_brig" - -/obj/structure/sign/levels/security/brig - name = "\improper Brig" - desc = "A level sign, stating the level to find the Brig on." - icon_state = "level_brig" - -/obj/structure/sign/directions/security/seceqp - name = "\improper Security Equipment Storage" - desc = "A direction sign, pointing out the way to Security Equipment Storage." - icon_state = "direction_seceqp" - -/obj/structure/sign/levels/security/seceqp - name = "\improper Security Equipment Storage" - desc = "A level sign, stating the level to find Security Equipment Storage on." - icon_state = "level_seceqp" - -/obj/structure/sign/directions/security/internal_affairs - name = "\improper Internal Affairs Office" - desc = "A direction sign, pointing out the way to the Internal Affairs Office." - icon_state = "direction_intaff" - -/obj/structure/sign/levels/security/internal_affairs - name = "\improper Internal Affairs Office" - desc = "A level sign, stating the level to find the Internal Affairs Office on." - icon_state = "level_intaff" - -/obj/structure/sign/directions/security/forensics - name = "\improper Forensics Lab" - desc = "A direction sign, pointing out the way to the Forensics Lab." - icon_state = "direction_forensics" - -/obj/structure/sign/levels/security/forensics - name = "\improper Forensics Lab" - desc = "A level sign, stating the level to find the Forensics Lab on." - icon_state = "level_forensics" - -/obj/structure/sign/directions/security/forensics/alt - icon_state = "direction_lab" - -/obj/structure/sign/levels/security/forensics/alt - icon_state = "level_lab" - -/obj/structure/sign/directions/security/interrogation - name = "\improper Interrogations" - desc = "A direction sign, pointing out the way to Interrogations." - icon_state = "direction_interrogation" - -/obj/structure/sign/levels/security/interrogation - name = "\improper Interrogations" - desc = "A level sign, stating the level to find Interrogations on." - icon_state = "level_interrogation" - -//science signs -/obj/structure/sign/directions/science - name = "\improper Science Department" - desc = "A direction sign, pointing out the way to the Science Department." - icon_state = "direction_sci" - -/obj/structure/sign/levels/science - name = "\improper Science Department" - desc = "A level sign, stating the level to find the Science Department on." - icon_state = "level_sci" - -/obj/structure/sign/directions/science/rnd - name = "\improper Research & Development" - desc = "A direction sign, pointing out the way to Research & Development." - icon_state = "direction_rnd" - -/obj/structure/sign/levels/science/rnd - name = "\improper Research & Development" - desc = "A level sign, stating the level to find Research & Development on." - icon_state = "level_rnd" - -/obj/structure/sign/directions/science/toxins - name = "\improper Toxins Lab" - desc = "A direction sign, pointing out the way to the Toxins Lab." - icon_state = "direction_toxins" - -/obj/structure/sign/levels/science/toxins - name = "\improper Toxins Lab" - desc = "A level sign, stating the level to find the Toxins Lab on." - icon_state = "level_toxins" - -/obj/structure/sign/directions/science/robotics - name = "\improper Robotics Workshop" - desc = "A direction sign, pointing out the way to the Robotics Workshop." - icon_state = "direction_robotics" - -/obj/structure/sign/levels/science/robotics - name = "\improper Robotics Workshop" - desc = "A level sign, stating the level to find the Robotics Workshop on." - icon_state = "level_robotics" - -/obj/structure/sign/directions/science/xenoarch - name = "\improper Xenoarchaeology Lab" - desc = "A direction sign, pointing out the way to the Xenoarchaeology Lab." - icon_state = "direction_xenoarch" - -/obj/structure/sign/levels/science/xenoarch - name = "\improper Xenoarchaeology Lab" - desc = "A level sign, stating the level to find the Xenoarchaeology Lab on." - icon_state = "level_xenoarch" - -/obj/structure/sign/directions/science/xenobiology - name = "\improper Xenobiology Lab" - desc = "A direction sign, pointing out the way to the Xenobiology Lab." - icon_state = "direction_xbio" - -/obj/structure/sign/levels/science/xenobiology - name = "\improper Xenobiology Lab" - desc = "A level sign, stating the level to find the Xenobiology Lab on." - icon_state = "level_xbio" - -/obj/structure/sign/directions/science/xenoflora - name = "\improper Xenoflora Lab" - desc = "A direction sign, pointing out the way to the Xenoflora Lab." - icon_state = "direction_xflora" - -/obj/structure/sign/levels/science/xenoflora - name = "\improper Xenoflora Lab" - desc = "A level sign, stating the level to find the Xenoflora Lab on." - icon_state = "level_xflora" - -/obj/structure/sign/directions/science/exploration - name = "\improper Exploration Department" - desc = "A direction sign, pointing out the way to the Exploration Department." - icon_state = "direction_explo" - -/obj/structure/sign/levels/science/exploration - name = "\improper Exploration Department" - desc = "A level sign, stating the level to find the Exploration Department on." - icon_state = "level_explo" - -//medical signs -/obj/structure/sign/directions/medical - name = "\improper Medical Bay" - desc = "A direction sign, pointing out the way to the Medical Bay." - icon_state = "direction_med" - -/obj/structure/sign/levels/medical - name = "\improper Medical Bay" - desc = "A level sign, stating the level to find the Medical Bay on." - icon_state = "level_med" - -/obj/structure/sign/directions/medical/chemlab - name = "\improper Chemistry Lab" - desc = "A direction sign, pointing out the way to the Chemistry Lab." - icon_state = "direction_chemlab" - -/obj/structure/sign/levels/medical/chemlab - name = "\improper Chemistry Lab" - desc = "A level sign, stating the level to find the Chemistry Lab on." - icon_state = "level_chemlab" - -/obj/structure/sign/directions/medical/surgery - name = "\improper Surgery" - desc = "A direction sign, pointing out the way to Surgery." - icon_state = "direction_surgery" - -/obj/structure/sign/levels/medical/surgery - name = "\improper Surgery" - desc = "A level sign, stating the level to find Surgery on." - icon_state = "level_surgery" - -/obj/structure/sign/directions/medical/operating_1 - name = "\improper Operating Theatre 1" - desc = "A direction sign, pointing out the way to Operating Theatre 1." - icon_state = "direction_op1" - -/obj/structure/sign/levels/medical/operating_1 - name = "\improper Operating Theatre 1" - desc = "A level sign, stating the level to find Operating Theatre 1 on." - icon_state = "level_op1" - -/obj/structure/sign/directions/medical/operating_2 - name = "\improper Operating Theatre 2" - desc = "A direction sign, pointing out the way to Operating Theatre 2." - icon_state = "direction_op2" - -/obj/structure/sign/levels/medical/operating_2 - name = "\improper Operating Theatre 2" - desc = "A level sign, stating the level to find Operating Theatre 2 on." - icon_state = "level_op2" - -/obj/structure/sign/directions/medical/virology - name = "\improper Virology" - desc = "A direction sign, pointing out the way to the Virology Lab." - icon_state = "direction_viro" - -/obj/structure/sign/levels/medical/virology - name = "\improper Virology" - desc = "A level sign, stating the level to find the Virology Lab on." - icon_state = "level_viro" - -/obj/structure/sign/directions/medical/medeqp - name = "\improper Medical Equipment Storage" - desc = "A direction sign, pointing out the way to Medical Equipment Storage." - icon_state = "direction_medeqp" - -/obj/structure/sign/levels/medical/medeqp - name = "\improper Medical Equipment Storage" - desc = "A level sign, stating the level to find Medical Equipment Storage on." - icon_state = "level_medeqp" - -/obj/structure/sign/directions/medical/morgue - name = "\improper Morgue" - desc = "A direction sign, pointing out the way to the Morgue." - icon_state = "direction_morgue" - -/obj/structure/sign/levels/medical/morgue - name = "\improper Morgue" - desc = "A level sign, stating the level to find the Morgue on." - icon_state = "level_morgue" - -/obj/structure/sign/directions/medical/cloning - name = "\improper Cloning Lab" - desc = "A direction sign, pointing out the way to the Cloning Lab." - icon_state = "direction_cloning" - -/obj/structure/sign/levels/medical/cloning - name = "\improper Cloning Lab" - desc = "A level sign, stating the level to find the Cloning Lab on." - icon_state = "level_cloning" - -/obj/structure/sign/directions/medical/resleeving - name = "\improper Resleeving Lab" - desc = "A direction sign, pointing out the way to the Resleeving Lab." - icon_state = "direction_resleeve" - -/obj/structure/sign/levels/medical/resleeving - name = "\improper Resleeving Lab" - desc = "A level sign, stating the level to find the Resleeving Lab on." - icon_state = "level_resleeve" - -//special signs -/obj/structure/sign/directions/evac - name = "\improper Evacuation" - desc = "A direction sign, pointing out the way to the Escape Shuttle Dock." - icon_state = "direction_evac" - -/obj/structure/sign/levels/evac - name = "\improper Evacuation" - desc = "A level sign, stating the level to find the Escape Shuttle Dock on." - icon_state = "level_evac" - -/obj/structure/sign/directions/eva - name = "\improper Extra-Vehicular Activity" - desc = "A direction sign, pointing out the way to the EVA Bay." - icon_state = "direction_eva" - -/obj/structure/sign/levels/eva - name = "\improper Extra-Vehicular Activity" - desc = "A level sign, stating the level to find the EVA Bay on." - icon_state = "level_eva" - -//command signs -/obj/structure/sign/directions/ai_core - name = "\improper AI Core" - desc = "A direction sign, pointing out the way to the AI Core." - icon_state = "direction_ai_core" - -/obj/structure/sign/levels/ai_core - name = "\improper AI Core" - desc = "A level sign, stating the level to find the AI Core on." - icon_state = "level_ai_core" - -/obj/structure/sign/directions/bridge - name = "\improper Bridge" - desc = "A direction sign, pointing out the way to the Bridge." - icon_state = "direction_bridge" - -/obj/structure/sign/levels/bridge - name = "\improper Bridge" - desc = "A level sign, stating the level to find the Bridge on." - icon_state = "level_bridge" - -/obj/structure/sign/directions/command - name = "\improper Command" - desc = "A direction sign, pointing out the way to the Command Center." - icon_state = "direction_command" - -/obj/structure/sign/levels/command - name = "\improper Command" - desc = "A level sign, stating the level to find the Command Center on." - icon_state = "level_command" - -/obj/structure/sign/directions/teleporter - name = "\improper Teleporter" - desc = "A direction sign, pointing out the way to the Teleporter." - icon_state = "direction_teleport" - -/obj/structure/sign/levels/teleporter - name = "\improper Teleporter" - desc = "A level sign, stating the level to find the Teleporter on." - icon_state = "level_teleport" - -/obj/structure/sign/directions/telecomms - name = "\improper Telecommunications Hub" - desc = "A direction sign, pointing out the way to the Telecommunications Hub." - icon_state = "direction_tcomms" - -/obj/structure/sign/levels/telecomms - name = "\improper Telecommunications Hub" - desc = "A level sign, stating the level to find the Telecommunications Hub on." - icon_state = "level_tcomms" - -//cargonia signs -/obj/structure/sign/directions/cargo - name = "\improper Cargo Department" - desc = "A direction sign, pointing out the way to the Cargo Department." - icon_state = "direction_crg" - -/obj/structure/sign/levels/cargo - name = "\improper Cargo Department" - desc = "A level sign, stating the level to find the Cargo Department on." - icon_state = "level_crg" - -/obj/structure/sign/directions/cargo/mining - name = "\improper Mining Department" - desc = "A direction sign, pointing out the way to the Mining Department." - icon_state = "direction_mining" - -/obj/structure/sign/levels/cargo/mining - name = "\improper Mining Department" - desc = "A level sign, stating the level to find the Mining Department on." - icon_state = "level_mining" - -/obj/structure/sign/directions/cargo/refinery - name = "\improper Refinery" - desc = "A direction sign, pointing out the way to the Refinery." - icon_state = "direction_refinery" - -/obj/structure/sign/levels/cargo/refinery - name = "\improper Refinery" - desc = "A level sign, stating the level to find the Refinery on." - icon_state = "level_refinery" - -//civilian/misc signs -/obj/structure/sign/directions/roomnum - name = "room number" - desc = "A sign detailing the number of the room beside it." - icon_state = "roomnum" - -/obj/structure/sign/directions/cryo - name = "\improper Cryogenic Storage" - desc = "A direction sign, pointing out the way to Cryogenic Storage." - icon_state = "direction_cry" - -/obj/structure/sign/levels/cryo - name = "\improper Cryogenic Storage" - desc = "A level sign, stating the level to find Cryogenic Storage on." - icon_state = "level_cry" - -/obj/structure/sign/directions/elevator - name = "\improper Elevator" - desc = "A direction sign, pointing out the way to the nearest elevator." - icon_state = "direction_elv" - -/obj/structure/sign/levels/elevator - name = "\improper Elevator" - desc = "A level sign, stating the level to find the nearest elevator on." - icon_state = "level_elv" - -/obj/structure/sign/directions/bar - name = "\improper Bar" - desc = "A direction sign, pointing out the way to the nearest watering hole." - icon_state = "direction_bar" - -/obj/structure/sign/levels/bar - name = "\improper Bar" - desc = "A level sign, stating the level to find the nearest watering hole on." - icon_state = "level_bar" - -/obj/structure/sign/directions/kitchen - name = "\improper Kitchen" - desc = "A pictographic direction sign with a knife, plate, and fork, pointing out the way to the nearest dining establishment." - icon_state = "direction_kitchen" - -/obj/structure/sign/levels/kitchen - name = "\improper Kitchen" - desc = "A pictographic direction sign with a knife, plate, and fork, stating the level to find the nearest dining establishment on." - icon_state = "level_kitchen" - -/obj/structure/sign/directions/shuttle_bay - name = "\improper Shuttle Bay" - desc = "A direction sign, pointing out the way to the nearest shuttle bay." - icon_state = "direction_bay" - -/obj/structure/sign/levels/shuttle_bay - name = "\improper Shuttle Bay" - desc = "A direction sign, stating the level to find the nearest shuttle bay on." - icon_state = "level_bay" - -/obj/structure/sign/directions/tram - name = "\improper Public Transit Station" - desc = "A direction sign, pointing out the way to the nearest public transit station." - icon_state = "direction_tram" - -/obj/structure/sign/levels/tram - name = "\improper Public Transit Station" - desc = "A level sign, stating the level to find the nearest public transit station on." - icon_state = "level_tram" - -/obj/structure/sign/directions/janitor - name = "\improper Custodial Closet" - desc = "A direction sign, pointing out the way to the Custodial Closet." - icon_state = "direction_janitor" - -/obj/structure/sign/levels/janitor - name = "\improper Custodial Closet" - desc = "A level sign, stating the level to find the Custodial Closet on." - icon_state = "level_janitor" - -/obj/structure/sign/directions/chapel - name = "\improper Chapel" - desc = "A direction sign, pointing out the way to the Chapel." - icon_state = "direction_chapel" - -/obj/structure/sign/levels/chapel - name = "\improper Chapel" - desc = "A level sign, stating the level to find the Chapel on." - icon_state = "level_chapel" - -/obj/structure/sign/directions/dorms - name = "\improper Dormitories" - desc = "A direction sign, pointing out the way to the Dormitories." - icon_state = "direction_dorms" - -/obj/structure/sign/levels/dorms - name = "\improper Dormitories" - desc = "A level sign, stating the level to find the Dormitories on." - icon_state = "level_dorms" - -/obj/structure/sign/directions/library - name = "\improper Library" - desc = "A direction sign, pointing out the way to the Library." - icon_state = "direction_library" - -/obj/structure/sign/levels/library - name = "\improper Library" - desc = "A level sign, stating the level to find the Library on." - icon_state = "level_library" - -/obj/structure/sign/directions/dock - name = "\improper Dock" - desc = "A direction sign, pointing out the way to the nearest docking area." - icon_state = "direction_dock" - -/obj/structure/sign/levels/dock - name = "\improper Dock" - desc = "A level sign, stating the level to find the nearest docking area on." - icon_state = "level_dock" - -/obj/structure/sign/directions/gym - name = "\improper Gym" - desc = "A direction sign, pointing out the way to the Gym." - icon_state = "direction_gym" - -/obj/structure/sign/levels/gym - name = "\improper Gym" - desc = "A level sign, stating the level to find the Gym on." - icon_state = "level_gym" - -/obj/structure/sign/directions/pool - name = "\improper Pool" - desc = "A direction sign, pointing out the way to the Pool." - icon_state = "direction_pool" - -/obj/structure/sign/levels/pool - name = "\improper Pool" - desc = "A level sign, stating the level to find the Pool on." - icon_state = "level_pool" - -/obj/structure/sign/directions/recreation - name = "\improper Recreation Area" - desc = "A direction sign, pointing out the way to the nearest Recreation Area." - icon_state = "direction_recreation" - -/obj/structure/sign/levels/recreation - name = "\improper Recreation Area" - desc = "A level sign, stating the level to find the nearest Recreation Area on." - icon_state = "level_recreation" - -/obj/structure/sign/directions/stairwell - name = "\improper Stairwell" - desc = "A direction sign with stairs and a door, pointing out the way to the nearest stairwell." - icon_state = "stairwell" - -/obj/structure/sign/directions/stairs_up - name = "\improper Stairs Up" - desc = "A direction sign with stairs and an upward-slanted arrow, pointing out the way to the nearest set of stairs that go up." - icon_state = "stairs_up" - -/obj/structure/sign/directions/stairs_down - name = "\improper Stairs Down" - desc = "A direction sign with stairs and a downward-slanted arrow, pointing out the way to the nearest set of stairs that go down." - icon_state = "stairs_down" - -/obj/structure/sign/directions/ladderwell - name = "\improper Access Shaft" - desc = "A direction sign with a ladder and a door, pointing out the way to the nearest access shaft." - icon_state = "ladderwell" - -/obj/structure/sign/directions/ladder_up - name = "\improper Ladder Up" - desc = "A direction sign with a ladder and an upward arrow, pointing out the way to the nearest ladder that goes up." - icon_state = "ladder_up" - -/obj/structure/sign/directions/ladder_down - name = "\improper Ladder Down" - desc = "A direction sign with a ladder and a downward arrow, pointing out the way to the nearest ladder that goes down." - icon_state = "ladder_down" - -/obj/structure/sign/directions/exit - name = "\improper Emergency Exit" - desc = "A lurid green sign that unmistakably identifies that the door it's next to as an emergency exit route." - icon_state = "exit_sign" - -//OTHER STUFF -/obj/structure/sign/christmas/lights - name = "Christmas lights" - desc = "Flashy and pretty." - icon = 'icons/obj/christmas.dmi' - icon_state = "xmaslights" - layer = 4.9 - plane = PLANE_LIGHTING_ABOVE - -/obj/structure/sign/christmas/wreath - name = "wreath" - desc = "Prickly and festive." - icon = 'icons/obj/christmas.dmi' - icon_state = "doorwreath" - layer = 5 - -/obj/structure/sign/hostilefauna - icon = 'icons/obj/decals_vr.dmi' - name = "\improper Caution: Hostile fauna" - desc = "This sign warns of hostile life forms in the area." - icon_state = "h_fauna" - -/obj/structure/sign/graffiti/pisoff - icon = 'icons/obj/decals_vr.dmi' - name = "\improper PIS OFF" - desc = "This sign bears some rather rude looking graffiti instructing you to PIS OFF." - icon_state = "pisoff" - -//Eris signs - -/obj/structure/sign/ironhammer - icon = 'icons/obj/decals_vr.dmi' - name = "Ironhammer Security" - desc = "Sign depicts the symbolic of Ironhammer Security, the largest security provider within Trade Union of Hansa." - icon_state = "ironhammer" - -/obj/structure/sign/atmos_co2 - icon = 'icons/obj/decals_vr.dmi' - name = "CO2 warning sign" - desc = "WARNING! CO2 flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_co2" - -/obj/structure/sign/atmos_n2o - icon = 'icons/obj/decals_vr.dmi' - name = "N2O warning sign" - desc = "WARNING! N2O flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_n2o" - -/obj/structure/sign/atmos_plasma - icon = 'icons/obj/decals_vr.dmi' - name = "Plasma warning sign" - desc = "WARNING! Plasma flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_plasma" - -/obj/structure/sign/atmos_n2 - icon = 'icons/obj/decals_vr.dmi' - name = "N2 warning sign" - desc = "WARNING! N2 flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_n2" - -/obj/structure/sign/atmos_o2 - icon = 'icons/obj/decals_vr.dmi' - name = "O2 warning sign" - desc = "WARNING! O2 flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_o2" - -/obj/structure/sign/atmos_air - icon = 'icons/obj/decals_vr.dmi' - name = "Air warning sign" - desc = "WARNING! Air flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_air" - -/obj/structure/sign/atmos_waste - icon = 'icons/obj/decals_vr.dmi' - name = "Atmos waste warning sign" - desc = "WARNING! Waste flow tube. Ensure the flow is disengaged before working." - icon_state = "atmos_waste" - -/obj/structure/sign/deck1 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'DECK I'." - name = "DECK I" - icon_state = "deck1" - -/obj/structure/sign/deck2 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'DECK II'." - name = "DECK II" - icon_state = "deck2" - -/obj/structure/sign/deck3 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'DECK III'." - name = "DECK III" - icon_state = "deck3" - -/obj/structure/sign/deck4 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'DECK IV'." - name = "DECK IV" - icon_state = "deck4" - -/obj/structure/sign/sec1 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'SECTION I'." - name = "SECTION I" - icon_state = "sec1" - -/obj/structure/sign/sec2 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'SECTION II'." - name = "SECTION II" - icon_state = "sec2" - -/obj/structure/sign/sec3 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'SECTION III'." - name = "SECTION III" - icon_state = "sec3" - -/obj/structure/sign/sec4 - icon = 'icons/obj/decals_vr.dmi' - desc = "A silver sign which reads 'SECTION IV'." - name = "SECTION IV" - icon_state = "sec4" - -/obj/structure/sign/nanotrasen - icon = 'icons/obj/decals_vr.dmi' - name = "\improper NanoTrasen" - desc = "An old metal sign which reads 'NanoTrasen'." - icon_state = "NT" - catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen) - -// Eris standards compliant hazards -/obj/structure/sign/signnew - icon = 'icons/obj/decals_vr.dmi' - -/obj/structure/sign/signnew/biohazard - name = "BIOLOGICAL HAZARD" - desc = "Warning: Biological and-or toxic hazards present in this area!" - icon_state = "biohazard" - -/obj/structure/sign/signnew/corrosives - name = "CORROSIVE SUBSTANCES" - desc = "Warning: Corrosive substances prezent in this area!" - icon_state = "corrosives" - -/obj/structure/sign/signnew/explosives - name = "EXPLOSIVE SUBSTANCES" - desc = "Warning: Explosive substances present in this area!" - icon_state = "explosives" - -/obj/structure/sign/signnew/flammables - name = "FLAMMABLE SUBSTANCES" - desc = "Warning: Flammable substances present in this area!" - icon_state = "flammable" - -/obj/structure/sign/signnew/laserhazard - name = "LASER HAZARD" - desc = "Warning: High powered laser emitters operating in this area!" - icon_state = "laser" - -/obj/structure/sign/signnew/danger - name = "DANGEROUS AREA" - desc = "Warning: Generally hazardous area! Exercise caution." - icon_state = "danger" - -/obj/structure/sign/signnew/magnetics - name = "MAGNETIC FIELD HAZARD" - desc = "Warning: Extremely powerful magnetic fields present in this area!" - icon_state = "magnetics" - -/obj/structure/sign/signnew/opticals - name = "OPTICAL HAZARD" - desc = "Warning: Optical hazards present in this area!" - icon_state = "optical" - -/obj/structure/sign/signnew/radiation - name = "RADIATION HAZARD" - desc = "Warning: Significant levels of radiation present in this area!" - icon_state = "radiation" - -/obj/structure/sign/signnew/secure - name = "SECURE AREA" - desc = "Warning: Secure Area! Do not enter without authorization!" - icon_state = "secure" - -/obj/structure/sign/signnew/electrical - name = "ELECTRICAL HAZARD" - desc = "Warning: Electrical hazards! Wear protective equipment." - icon_state = "electrical" - -/obj/structure/sign/signnew/cryogenics - name = "CRYOGENIC TEMPERATURES" - desc = "Warning: Extremely low temperatures in this area." - icon_state = "cryogenics" - -/obj/structure/sign/signnew/canisters - name = "PRESSURIZED CANISTERS" - desc = "Warning: Highly pressurized canister storage." - icon_state = "canisters" - -/obj/structure/sign/signnew/oxidants - name = "OXIDIZING AGENTS" - desc = "Warning: Oxidizing agents in this area, do not start fires!" - icon_state = "oxidants" - -/obj/structure/sign/signnew/memetic - name = "MEMETIC HAZARD" - desc = "Warning: Memetic hazard, wear meson goggles!" - icon_state = "memetic" - -//Eris departments - -/obj/structure/sign/department - icon = 'icons/obj/decals_vr.dmi' - name = "department sign" - desc = "Sign of some important ship compartment." - -/obj/structure/sign/department/medbay - name = "MEDBAY" - icon_state = "medbay" - -/obj/structure/sign/department/virology - name = "VIROLOGY" - icon_state = "virology" - -/obj/structure/sign/department/chem - name = "CHEMISTRY" - icon_state = "chem" - -/obj/structure/sign/department/gene - name = "GENETICS" - icon_state = "gene" - -/obj/structure/sign/department/morgue - name = "MORGUE" - icon_state = "morgue" - -/obj/structure/sign/department/operational - name = "SURGERY" - icon_state = "operational" - -/obj/structure/sign/department/sci - name = "SCIENCE" - icon_state = "sci" - -/obj/structure/sign/department/xenolab - name = "XENOLAB" - icon_state = "xenolab" - -/obj/structure/sign/department/anomaly - name = "ANOMALYLAB" - icon_state = "anomaly" - -/obj/structure/sign/department/dock - name = "DOKUCHAYEV DOCK" - icon_state = "dock" - -/obj/structure/sign/department/rnd - name = "RND" - icon_state = "rnd" - -/obj/structure/sign/department/robo - name = "ROBOTICS" - icon_state = "robo" - -/obj/structure/sign/department/toxins - name = "TOXINS" - icon_state = "toxins" - -/obj/structure/sign/department/toxin_res - name = "TOXINLAB" - icon_state = "toxin_res" - -/obj/structure/sign/department/eva - name = "E.V.A." - icon_state = "eva" - -/obj/structure/sign/department/ass - name = "TOOL STORAGE" - icon_state = "ass" - -/obj/structure/sign/department/bar - name = "BAR" - icon_state = "bar" - -/obj/structure/sign/department/biblio - name = "LIBRARY" - icon_state = "biblio" - -/obj/structure/sign/department/chapel - name = "CHAPEL" - icon_state = "chapel" - -/obj/structure/sign/department/bridge - name = "BRIDGE" - icon_state = "bridge" - -/obj/structure/sign/department/telecoms - name = "TELECOMS" - icon_state = "telecoms" - -/obj/structure/sign/department/conference_room - name = "CONFERENCE" - icon_state = "conference_room" - -/obj/structure/sign/department/ai - name = "AI" - icon_state = "ai" - -/obj/structure/sign/department/cargo - name = "CARGO" - icon_state = "cargo" - -/obj/structure/sign/department/mail - name = "MAIL" - icon_state = "mail" - -/obj/structure/sign/department/miner_dock - name = "MINING DOCK" - icon_state = "miner_dock" - -/obj/structure/sign/department/cargo_dock - name = "CARGO DOCK" - icon_state = "cargo_dock" - -/obj/structure/sign/department/eng - name = "ENGINEERING" - icon_state = "eng" - -/obj/structure/sign/department/engine - name = "ENGINE" - icon_state = "engine" - -/obj/structure/sign/department/gravi - name = "GRAVGEN" - icon_state = "gravi" - -/obj/structure/sign/department/atmos - name = "ATMOSPHERICS" - icon_state = "atmos" - -/obj/structure/sign/department/shield - name = "SHIELDGEN" - icon_state = "shield" - -/obj/structure/sign/department/drones - name = "DRONES" - icon_state = "drones" - -/obj/structure/sign/department/interrogation - name = "INTERROGATION" - icon_state = "interrogation" - -/obj/structure/sign/department/commander - name = "COMMANDER" - icon_state = "commander" - -/obj/structure/sign/department/armory - name = "ARMORY" - icon_state = "armory" - -/obj/structure/sign/department/prison - name = "PRISON" - icon_state = "prison" - -/obj/structure/sign/deck/first - name = "\improper First Deck" - icon_state = "deck-1" - -/obj/structure/sign/deck/second - name = "\improper Second Deck" - icon_state = "deck-2" - -/obj/structure/sign/deck/third - name = "\improper Third Deck" - icon_state = "deck-3" - -/obj/structure/sign/deck/fourth - name = "\improper Fourth Deck" - icon_state = "deck-4" - -/obj/structure/sign/level/one - name = "\improper Level One" - icon_state = "level-1" - -/obj/structure/sign/level/one/large - icon_state = "level-1-large" - -/obj/structure/sign/level/two - name = "\improper Level Two" - icon_state = "level-2" - -/obj/structure/sign/level/two/large - icon_state = "level-2-large" - -/obj/structure/sign/level/three - name = "\improper Level Three" - icon_state = "level-3" - -/obj/structure/sign/level/three/large - icon_state = "level-3-large" - -/obj/structure/sign/level/fourth - name = "\improper Level Four" - icon_state = "level-4" - -/obj/structure/sign/level/four/large - icon_state = "level-4-large" - -/obj/structure/sign/level/basement - name = "\improper Basement Level" - icon_state = "level-b" - -/obj/structure/sign/level/basement/large - icon_state = "level-b-large" - -/obj/structure/sign/level/ground - name = "\improper Ground Level" - icon_state = "level-g" - -/obj/structure/sign/level/ground/large - icon_state = "level-g-large" - -/obj/structure/sign/hangar/one - name = "\improper Hangar One" - icon_state = "hangar-1" - -/obj/structure/sign/hangar/two - name = "\improper Hangar Two" - icon_state = "hangar-2" - -/obj/structure/sign/hangar/three - name = "\improper Hangar Three" - icon_state = "hangar-3" - -/obj/structure/sign/atmos - name = "\improper WASTE" - icon_state = "atmos_waste" - -/obj/structure/sign/atmos/o2 - name = "\improper OXYGEN" - icon_state = "atmos_o2" - -/obj/structure/sign/atmos/co2 - name = "\improper CARBON DIOXIDE" - icon_state = "atmos_co2" - -/obj/structure/sign/atmos/phoron - name = "\improper PHORON" - icon_state = "atmos_phoron" - -/obj/structure/sign/atmos/n2o - name = "\improper NITROUS OXIDE" - icon_state = "atmos_n2o" - -/obj/structure/sign/atmos/n2 - name = "\improper NITROGEN" - icon_state = "atmos_n2" - -/obj/structure/sign/atmos/air - name = "\improper AIR" - icon_state = "atmos_air" - -/obj/structure/sign/scenery/engineleft - name = "I.C.V." - desc = "The charred name of a cargo ship of some description." - icon_state = "poi_engine1" - -/obj/structure/sign/scenery/engineright - name = "I.C.V." - desc = "The charred name of a cargo ship of some description." - icon_state = "poi_engine2" - -//Direction/Level sign overlays. Not mechanically functional as noted above, but usable for mapping. -/obj/structure/sign/scenery/overlay - name = "snow covering" - desc = "Frozen snow obscures the view of a sign beneath." - icon_state = "snowy" - icon = 'icons/obj/decals_directions.dmi' - -/obj/structure/sign/scenery/overlay/rust - name = "rust covering" - desc = "Thick rust obscures the view of a sign beneath." - icon_state = "rusted" - -/obj/structure/sign/scenery/overlay/vine - name = "vine covering" - desc = "Thick vines obscure the view of a sign beneath." - icon_state = "vines" - -/obj/structure/sign/scenery/overlay/vine/top - icon_state = "vines_top" - -/obj/structure/sign/scenery/overlay/vine/mid - icon_state = "vines_mid" - -/obj/structure/sign/scenery/overlay/vine/bottom - icon_state = "vines_bottom" - -/obj/structure/sign/bigname - name = "Cynosure Station" - desc = "An aging sign for the Cynosure Xenoarchaeological Research Station." - icon_state = "cyno_1" - -/obj/structure/sign/bigname/seg_2 - icon_state = "cyno_2" - -/obj/structure/sign/bigname/seg_3 - icon_state = "cyno_3" - -/obj/structure/sign/bigname/seg_4 - icon_state = "cyno_4" - -/obj/structure/sign/bigname/seg_5 - icon_state = "cyno_5" - -/obj/structure/sign/bigname/seg_6 - icon_state = "cyno_6" - -/obj/structure/sign/bigname/seg_7 - icon_state = "cyno_7" - -/obj/structure/sign/clock - name = "wall clock" - desc = "A basic wall clock, synced to the current system time." - icon_state = "clock" - -/obj/structure/sign/clock/examine(mob/user) - . = ..() - . += "The clock shows that the time is [stationtime2text()]." - -/obj/structure/sign/calendar - name = "calendar" - desc = "It's an old-school, NanoTrasen branded wall calendar. Sure, it might be obsolete with modern technology, but it's still hard to imagine an office without one." - icon_state = "calendar" - -/obj/structure/sign/calendar/examine(mob/user) - . = ..() - . += "The calendar shows that the date is [stationdate2text()]." - if (Holiday.len) - . += "Today is [english_list(Holiday)]." - -/obj/structure/sign/explosive - name = "\improper HIGH EXPLOSIVES sign" - desc = "A warning sign which reads 'HIGH EXPLOSIVES'." - icon_state = "explosives" - -/obj/structure/sign/chemdiamond - name = "\improper HAZARDOUS CHEMICALS sign" - desc = "A sign that warns of potentially hazardous chemicals nearby, indicating health risk, flash point, and reactivity." - icon_state = "chemdiamond" - -//Here be Flags - -//Flag item -/obj/item/flag - name = "boxed flag" - desc = "A flag neatly folded into a wooden container." - icon = 'icons/obj/flags.dmi' - icon_state = "flag_boxed" - var/flag_path = "flag" - var/flag_size = 0 - -//Flag on wall -/obj/structure/sign/flag - name = "blank flag" - desc = "Nothing to see here." - icon = 'icons/obj/flags.dmi' - icon_state = "flag" - var/icon/ripped_outline = icon('icons/obj/flags.dmi', "ripped") - var/obj/structure/sign/flag/linked_flag //For double flags - var/obj/item/flag/flagtype //For returning your flag - var/ripped = FALSE //If we've been torn down - -/obj/structure/sign/flag/blank - name = "blank banner" - desc = "A blank white flag." - icon_state = "flag" - flagtype = /obj/item/flag - -/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) - if (!adjacent) - return - - if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc)) - to_chat(user, SPAN_WARNING("You can't place this here!")) - return - - var/placement_dir = get_dir(user, A) - if (!(placement_dir in cardinal)) - to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on.")) - return - - var/obj/structure/sign/flag/P = new(user.loc) - - switch(placement_dir) - if(NORTH) - P.pixel_y = 32 - if(SOUTH) - P.pixel_y = -32 - if(EAST) - P.pixel_x = 32 - if(WEST) - P.pixel_x = -32 - - P.dir = placement_dir - if(flag_size) - P.icon_state = "[flag_path]_l" - var/obj/structure/sign/flag/P2 = new(user.loc) - P.linked_flag = P2 - P2.linked_flag = P - P2.icon_state = "[flag_path]_r" - P2.dir = P.dir - switch(P2.dir) - if(NORTH) - P2.pixel_y = P.pixel_y - P2.pixel_x = 32 - if(SOUTH) - P2.pixel_y = P.pixel_y - P2.pixel_x = 32 - if(EAST) - P2.pixel_x = P.pixel_x - P2.pixel_y = -32 - if(WEST) - P2.pixel_x = P.pixel_x - P2.pixel_y = 32 - P2.name = name - P2.desc = desc - P2.description_info = description_info - P2.description_fluff = description_fluff - P2.flagtype = type - else - P.icon_state = "[flag_path]" - P.name = name - P.desc = desc - P.description_info = description_info - P.description_fluff = description_fluff - P.flagtype = type - qdel(src) - -/obj/structure/sign/flag/Destroy() - if(linked_flag?.linked_flag == src) //Catches other instances where one half might be destroyed, say by a broken wall, to avoid runtimes. - linked_flag.linked_flag = null //linked_flag - . = ..() - -/obj/structure/sign/flag/ex_act(severity) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - qdel(src) - else - rip() - if(3) - rip() - -/obj/structure/sign/flag/unfasten(mob/user) - if(!ripped) - user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up.")) - var/obj/item/flag/F = new flagtype(get_turf(user)) - user.put_in_hands(F) - else - user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src].")) - if(linked_flag) - qdel(linked_flag) //otherwise you're going to get weird duping nonsense - qdel(src) - -/obj/structure/sign/flag/attack_hand(mob/user) - if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes") - if(!Adjacent(user)) //Cannot bring up dialogue and walk away - return FALSE - visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" )) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) - add_fingerprint(user) - rip() - -/obj/structure/sign/flag/proc/rip(var/rip_linked = TRUE) - var/icon/I = new('icons/obj/flags.dmi', icon_state) - var/icon/mask = new('icons/obj/flags.dmi', "ripped") - I.AddAlphaMask(mask) - icon = I - name = "ripped flag" - desc = "You can't make out anything from the flag's original print. It's ruined." - ripped = TRUE - if(linked_flag && rip_linked) - linked_flag.rip(FALSE) //Prevents an infinite ripping loop - -/obj/structure/sign/flag/attackby(obj/item/W, mob/user) - ..() - if(istype(W, /obj/item/weapon/flame/lighter) || istype(W, /obj/item/weapon/weldingtool)) - visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!")) - if(!do_after(user, 2 SECONDS)) - return FALSE - visible_message(SPAN_WARNING("\The [user] burns \the [src] down!")) - playsound(src.loc, 'sound/items/cigs_lighters/cig_light.ogg', 100, 1) - new /obj/effect/decal/cleanable/ash(src.loc) - if(linked_flag) - qdel(linked_flag) - qdel(src) - return TRUE - -/obj/structure/sign/flag/blank/left - icon_state = "flag_l" - -/obj/structure/sign/flag/blank/right - icon_state = "flag_r" - -//SolGov -/obj/structure/sign/flag/sol - name = "Solar Confederate Government flag" - desc = "The bright blue flag of the Solar Confederate Government." - icon_state = "solgov" - flagtype = /obj/item/flag/sol - -/obj/structure/sign/flag/sol/left - icon_state = "solgov_l" - -/obj/structure/sign/flag/sol/right - icon_state = "solgov_r" - -/obj/item/flag/sol - name = "Solar Confederate Government flag" - desc = "The bright blue flag of the Solar Confederate Government." - flag_path = "solgov" - -/obj/item/flag/sol/l - name = "large Solar Confederate Government flag" - flag_size = 1 - -//NanoTrasen -/obj/structure/sign/flag/nt - name = "NanoTrasen corporate flag" - desc = "A flag portraying the logo of the NanoTrasen corporation." - icon_state = "nanotrasen" - flagtype = /obj/item/flag/nt - -/obj/structure/sign/flag/nt/left - icon_state = "nanotrasen_l" - -/obj/structure/sign/flag/nt/right - icon_state = "nanotrasen_r" - -/obj/item/flag/nt - name = "NanoTrasen corporate flag" - desc = "A flag portraying the logo of the NanoTrasen corporation." - flag_path = "nanotrasen" - -/obj/item/flag/nt/l - name = "large NanoTrasen corporate flag" - flag_size = 1 - -//Vir -/obj/structure/sign/flag/vir - name = "Vir Governmental Authority flag" - desc = "The two-tone flag of the Vir Governmental Authority." - description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ - a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ - in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ - freedom to operate unobstructed in the Vir system." - icon_state = "vir" - flagtype = /obj/item/flag/vir - -/obj/structure/sign/flag/vir/left - icon_state = "vir_l" - -/obj/structure/sign/flag/vir/right - icon_state = "vir_r" - -/obj/item/flag/vir - name = "Vir Governmental Authority flag" - desc = "The two-tone flag of the Vir Governmental Authority." - description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ - a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ - in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ - freedom to operate unobstructed in the Vir system." - flag_path = "vir" - -/obj/item/flag/vir/l - name = "large Vir Governmental Authority flag" - flag_size = 1 - -//Almach Association - -/obj/structure/sign/flag/almach_a - name = "Almach Association flag" - desc = "The black and grey flag of the now-defunct Almach Association." - description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ - states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ - the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ - \"inevitable\" dissolution." - icon_state = "almach_a" - flagtype = /obj/item/flag/almach_a - -/obj/structure/sign/flag/almach_a/left - icon_state = "almach_a_l" - -/obj/structure/sign/flag/almach_a/right - icon_state = "almach_a_r" - -/obj/item/flag/almach_a - name = "Almach Association flag" - desc = "The black and grey flag of the now-defunct Almach Association." - description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ - states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ - the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ - \"inevitable\" dissolution." - flag_path = "almach_a" - -/obj/item/flag/almach_a/l - name = "large Almach Association flag" - flag_size = 1 - -//Almach Protectorate -/obj/structure/sign/flag/almach_p - name = "Almach Protectorate flag" - desc = "The purple flag of the Almach Protectorate." - description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ - Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ - leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ - without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." - icon_state = "almach_p" - flagtype = /obj/item/flag/almach_p - -/obj/structure/sign/flag/almach_p/left - icon_state = "almach_p_l" - -/obj/structure/sign/flag/almach_p/right - icon_state = "almach_p_r" - -/obj/item/flag/almach_p - name = "Almach Protectorate flag" - desc = "The purple flag of the Almach Protectorate." - description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ - Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ - leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ - without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." - flag_path = "almach_p" - -/obj/item/flag/almach_p/l - name = "large Almach Protectorate flag" - flag_size = 1 - -//Vystholm -/obj/structure/sign/flag/vystholm - name = "Vystholm flag" - desc = "The black and gold flag of Vystholm." - description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ - First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ - to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ - Pearlshield Coalition." - icon_state = "vystholm" - flagtype = /obj/item/flag/vystholm - -/obj/structure/sign/flag/vystholm/left - icon_state = "vystholm_l" - -/obj/structure/sign/flag/vystholm/right - icon_state = "vystholm_r" - -/obj/item/flag/vystholm - name = "Vystholm flag" - desc = "The black and gold flag of Vystholm." - description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ - First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ - to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ - Pearlshield Coalition." - flag_path = "vystholm" - -/obj/item/flag/vystholm/l - name = "large Vystholm flag" - flag_size = 1 - -//Five Arrows -/obj/structure/sign/flag/fivearrows - name = "Five Arrows flag" - desc = "The red flag of the Five Arrows." - description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \ - failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ - since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." - icon_state = "fivearrows" - flagtype = /obj/item/flag/fivearrows - -/obj/structure/sign/flag/fivearrows/left - icon_state = "fivearrows_l" - -/obj/structure/sign/flag/fivearrows/right - icon_state = "fivearrows_r" - -/obj/item/flag/fivearrows - name = "Five Arrows flag" - desc = "The red flag of the Five Arrows." - description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \ - failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ - since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." - flag_path = "fivearrows" - -/obj/item/flag/fivearrows/l - name = "large Five Arrows flag" - flag_size = 1 - -//Pirates -/obj/structure/sign/flag/pirate - name = "pirate flag" - desc = "Shiver me timbers, hoist the black!" - icon_state = "pirate" - flagtype = /obj/item/flag/pirate - -/obj/structure/sign/flag/pirate/left - icon_state = "pirate_l" - -/obj/structure/sign/flag/pirate/right - icon_state = "pirate_r" - -/obj/item/flag/pirate - name = "pirate flag" - desc = "Shiver me timbers, hoist the black!" - flag_path = "pirate" - - -/obj/item/flag/pirate/l - name = "large pirate flag" - flag_size = 1 - -//Catpirate -/obj/structure/sign/flag/catpirate - name = "Tajaran pirate flag" - desc = "Shiver me whiskers, hoist the black!" - icon_state = "catpirate" - flagtype = /obj/item/flag/catpirate - -/obj/structure/sign/flag/catpirate/left - icon_state = "catpirate_l" - -/obj/structure/sign/flag/catpirate/right - icon_state = "catpirate_r" - -/obj/item/flag/catpirate - name = "Tajaran pirate flag" - desc = "Shiver me whiskers, hoist the black!" - flag_path = "catpirate" - -/obj/item/flag/catpirate/l - name = "large Tajaran pirate flag" - flag_size = 1 - -//Political Parties -/obj/structure/sign/flag/icarus - name = "Icarus Front flag" - desc = "The flag of the right-populist Icarus Front political party." - icon_state = "icarus" - flagtype = /obj/item/flag/icarus - -/obj/item/flag/icarus - name = "Icarus Front flag" - desc = "The flag of the right-populist Icarus Front political party." - flag_path = "icarus" - -/obj/structure/sign/flag/shadowcoalition - name = "Shadow Coalition flag" - desc = "The flag of the neoliberal Shadow Coalition political party." - icon_state = "shadowcoalition" - flagtype = /obj/item/flag/shadowcoalition - -/obj/item/flag/shadowcoalition - name = "Shadow Coalition flag" - desc = "The flag of the neoliberal Shadow Coalition political party." - flag_path = "shadowcoalition" - -/obj/structure/sign/flag/seo - name = "Sol Economic Organization flag" - desc = "The flag of the protectionist Sol Economic Organization political party." - icon_state = "seo" - flagtype = /obj/item/flag/seo - -/obj/item/flag/seo - name = "Sol Economic Organization flag" - desc = "The flag of the protectionist Sol Economic Organization political party." - flag_path = "seo" - -/obj/structure/sign/flag/gap - name = "Galactic Autonomy Party flag" - desc = "The flag of the libertarian Galactic Autonomy Party political party." - icon_state = "gap" - flagtype = /obj/item/flag/seo - -/obj/item/flag/gap - name = "Galactic Autonomy Party flag" - desc = "The flag of the libertarian Galactic Autonomy Party political party." - flag_path = "gap" +/obj/structure/sign + icon = 'icons/obj/decals.dmi' + anchored = TRUE + opacity = 0 + density = FALSE + plane = OBJ_PLANE //VOREStation Edit + layer = ABOVE_JUNK_LAYER //VOREStation Edit + w_class = ITEMSIZE_NORMAL + +/obj/structure/sign/ex_act(severity) + qdel(src) + +/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction + if(tool.has_tool_quality(TOOL_SCREWDRIVER) && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double)) + playsound(src, tool.usesound, 50, 1) + unfasten(user) + else ..() + +/obj/structure/sign/proc/unfasten(mob/user) + user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You unfasten \the [src].")) + var/obj/item/sign/S = new(src.loc) + S.name = name + S.desc = desc + S.icon_state = icon_state + S.sign_state = icon_state + S.original_type = type + qdel(src) + + +/obj/item/sign + name = "sign" + desc = "" + icon = 'icons/obj/decals.dmi' + w_class = ITEMSIZE_NORMAL //big + var/sign_state = "" + var/original_type + +/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction + if(tool.has_tool_quality(TOOL_SCREWDRIVER) && isturf(user.loc)) + var/direction = tgui_input_list(usr, "In which direction?", "Select direction.", list("North", "East", "South", "West", "Cancel")) + if(direction == "Cancel") return + var/target_type = original_type || /obj/structure/sign + var/obj/structure/sign/S = new target_type(user.loc) + switch(direction) + if("North") + S.pixel_y = 32 + if("East") + S.pixel_x = 32 + if("South") + S.pixel_y = -32 + if("West") + S.pixel_x = -32 + else return + S.name = name + S.desc = desc + S.icon_state = sign_state + to_chat(user, "You fasten \the [S] with your [tool].") + qdel(src) + else ..() + +/obj/structure/sign/scenery/map + name = "station map" + desc = "A framed picture of the station." + +/obj/structure/sign/scenery/map/left + icon_state = "map-left" + +/obj/structure/sign/scenery/map/right + icon_state = "map-right" + +/obj/structure/sign/securearea + name = "\improper SECURE AREA" + desc = "A warning sign which reads 'SECURE AREA'." + icon_state = "securearea" + +/obj/structure/sign/biohazard + name = "\improper BIOHAZARD" + desc = "A warning sign which reads 'BIOHAZARD'." + icon_state = "bio" + +/obj/structure/sign/electricshock + name = "\improper HIGH VOLTAGE" + desc = "A warning sign which reads 'HIGH VOLTAGE'." + icon_state = "shock" + +/obj/structure/sign/examroom + name = "\improper EXAM" + desc = "A guidance sign which reads 'EXAM ROOM'." + icon_state = "examroom" + +/obj/structure/sign/vacuum + name = "\improper HARD VACUUM AHEAD" + desc = "A warning sign which reads 'HARD VACUUM AHEAD'." + icon_state = "space" + +/obj/structure/sign/deathsposal + name = "\improper DISPOSAL LEADS TO SPACE" + desc = "A warning sign which reads 'DISPOSAL LEADS TO SPACE'." + icon_state = "deathsposal" + +/obj/structure/sign/pods + name = "\improper ESCAPE PODS" + desc = "A warning sign which reads 'ESCAPE PODS'." + icon_state = "pods" + +/obj/structure/sign/fire + name = "\improper DANGER: FIRE" + desc = "A warning sign which reads 'DANGER: FIRE'." + icon_state = "fire" + +/obj/structure/sign/nosmoking_1 + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'." + icon_state = "nosmoking" + +/obj/structure/sign/nosmoking_2 + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'." + icon_state = "nosmoking2" + +/obj/structure/sign/nosmoking_2/burnt + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'. It looks like someone didn't follow its advice..." + icon_state = "nosmoking2_burnt" + +/obj/structure/sign/warning + name = "\improper WARNING" + icon_state = "securearea" + +/obj/structure/sign/warning/Initialize() + . = ..() + desc = "A warning sign which reads '[name]'." + +/obj/structure/sign/warning/airlock + name = "\improper EXTERNAL AIRLOCK" + icon_state = "doors" + +/obj/structure/sign/warning/biohazard + name = "\improper BIOHAZARD" + icon_state = "bio" + +/obj/structure/sign/warning/bomb_range + name = "\improper BOMB RANGE" + icon_state = "blast" + +/obj/structure/sign/warning/caution + name = "\improper CAUTION" + +/obj/structure/sign/warning/compressed_gas + name = "\improper COMPRESSED GAS" + icon_state = "hikpa" + +/obj/structure/sign/warning/deathsposal + name = "\improper DISPOSAL LEADS TO SPACE" + icon_state = "deathsposal" + +/obj/structure/sign/warning/docking_area + name = "\improper KEEP CLEAR: DOCKING AREA" + +/obj/structure/sign/warning/evac + name = "\improper KEEP CLEAR: EVAC DOCKING AREA" + icon_state = "evac" + +/obj/structure/sign/warning/engineering_access + name = "\improper ENGINEERING ACCESS" + icon_state = "engine" + +/obj/structure/sign/warning/fire + name = "\improper DANGER: FIRE" + icon_state = "fire" + +/obj/structure/sign/warning/high_voltage + name = "\improper HIGH VOLTAGE" + icon_state = "shock" + +/obj/structure/sign/warning/hot_exhaust + name = "\improper HOT EXHAUST" + icon_state = "fire" + +/obj/structure/sign/warning/internals_required + name = "\improper INTERNALS REQUIRED" + +/obj/structure/sign/warning/lethal_turrets + name = "\improper LETHAL TURRETS" + icon_state = "turrets" + +/obj/structure/sign/warning/lethal_turrets/Initialize() + . = ..() + desc += " Enter at own risk!." + +/obj/structure/sign/warning/mail_delivery + name = "\improper MAIL DELIVERY" + icon_state = "mail" + +/obj/structure/sign/warning/moving_parts + name = "\improper MOVING PARTS" + icon_state = "movingparts" + +/obj/structure/sign/warning/nosmoking_1 + name = "\improper NO SMOKING" + icon_state = "nosmoking" + +/obj/structure/sign/warning/nosmoking_2 + name = "\improper NO SMOKING" + icon_state = "nosmoking2" + +/obj/structure/sign/warning/pods + name = "\improper ESCAPE PODS" + icon_state = "pods" + +/obj/structure/sign/warning/radioactive + name = "\improper RADIOACTIVE AREA" + icon_state = "radiation" + +/obj/structure/sign/warning/secure_area + name = "\improper SECURE AREA" + icon_state = "securearea2" + +/obj/structure/sign/warning/secure_area/armory + name = "\improper ARMORY" + icon_state = "armory" + +/obj/structure/sign/warning/server_room + name = "\improper SERVER ROOM" + icon_state = "server" + +/obj/structure/sign/warning/siphon_valve + name = "\improper SIPHON VALVE" + +/obj/structure/sign/warning/vacuum + name = "\improper HARD VACUUM AHEAD" + icon_state = "space" + +/obj/structure/sign/warning/vent_port + name = "\improper EJECTION/VENTING PORT" + +/obj/structure/sign/warning/emergence + name = "\improper EMERGENT INTELLIGENCE DETAILS" + icon_state = "rogueai" + +/obj/structure/sign/warning/falling + name = "\improper FALL HAZARD" + icon_state = "falling" + +/obj/structure/sign/warning/lava + name = "\improper MOLTEN SURFACE" + icon_state = "lava" + +/obj/structure/sign/warning/acid + name = "\improper ACIDIC SURFACE" + icon_state = "acid" + +/obj/structure/sign/warning/cold + name = "\improper EXTREME COLD ENVIRONMENT" + icon_state = "cold" + +/obj/structure/sign/redcross + name = "medbay" + desc = "An interstellar symbol of medical institutions. You'll probably get help here." + icon_state = "bluecross" + +/obj/structure/sign/greencross + name = "medbay" + desc = "An interstellar symbol of medical institutions. You'll probably get help here." + icon_state = "bluecross2" + +/obj/structure/sign/goldenplaque + name = "The Most Robust Men Award for Robustness" + desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends." + icon_state = "goldenplaque" + +/obj/structure/sign/kiddieplaque + name = "\improper AI developers plaque" + desc = "Next to the extremely long list of names and job titles. Beneath the image, someone has scratched the word \"PACKETS\"" + icon_state = "kiddieplaque" + +//CHOMP Add start +/obj/structure/sign/kiddieplaque/poi1 + name = "expeditionary corps frame" + desc = "An old framed photograph of four figures in retro mining gear wielding harpoons. They look ready for a fight." + icon_state = "explorerplaque" + +/obj/structure/sign/kiddieplaque/poi2 + name = "expeditionary corps frame" + desc = "An old framed photograph of an oversized harpoon cannon." + icon_state = "explorerplaque2" + +/obj/structure/sign/kiddieplaque/poi3 + name = "expeditionary corps frame" + desc = "An old framed photograph of a gigantic black bear. Even through print it's chilling to examine." + icon_state = "explorerplaque3" + +/obj/structure/sign/kiddieplaque/poi4 + name = "expeditionary corps frame" + desc = "An old framed paper map littered with notes. Looks like the creator was marking the location of deposits." + icon_state = "explorerplaque4" +//CHOMP Add end + +/obj/structure/sign/atmosplaque + name = "\improper FEA atmospherics division plaque" + desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." + icon_state = "atmosplaque" + +/obj/structure/sign/periodic + name = "periodic table" + desc = "A sign reminding those visiting of the elements of the periodic table- though, they should have memorized them by now." + icon_state = "periodic" + +/obj/structure/sign/double/maltesefalcon //The sign is 64x32, so it needs two tiles. ;3 + name = "The Maltese Falcon" + desc = "The Maltese Falcon, Space Bar and Grill." + +/obj/structure/sign/double/maltesefalcon/left + icon_state = "maltesefalcon-left" + +/obj/structure/sign/double/maltesefalcon/right + icon_state = "maltesefalcon-right" + +/obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map + name = "\improper SCIENCE!" + desc = "A warning sign which reads 'SCIENCE'." + icon_state = "science1" + +/obj/structure/sign/chemistry + name = "\improper CHEMISTRY" + desc = "A warning sign which reads 'CHEMISTRY'." + icon_state = "chemistry1" + +/obj/structure/sign/botany + name = "\improper HYDROPONICS" + desc = "A warning sign which reads 'HYDROPONICS'." + icon_state = "hydro1" + +/obj/structure/sign/hydro + name = "\improper HYDROPONICS" + desc = "A sign labelling an area as a place where plants are grown." + icon_state = "hydro2" + +/obj/structure/sign/hydrostorage + name = "\improper HYDROPONICS STORAGE" + desc = "A sign labelling an area as a place where plant growing supplies are kept." + icon_state = "hydro3" + +/obj/structure/sign/xenobio + name = "\improper XENOBIOLOGY" + desc = "A warning sign which reads XENOBIOLOGY." + icon_state = "xenobio3" + + +//direction signs presented by the order they appear in the dmi +/obj/structure/sign/directions + name = "direction sign" + desc = "A direction sign, claiming to know the way to... somewhere?" + icon_state = "direction" + icon = 'icons/obj/decals_directions.dmi' + //TODO: set up overlay systems, inc. interactions (e.g. vines clear w/ plantbgone or fire, snow can be brushed off or melted, and so on) + +//disabled this proc, it serves no purpose except to overwrite the description that already exists. may have been intended for making your own signs? +//seems to defeat the point of having a generic directional sign that mappers could edit and use in POIs? left it here in case something breaks. +/* +/obj/structure/sign/directions/Initialize() + . = ..() + desc = "A direction sign, pointing out the way to \the [src]." +*/ + +//Also floor/level/deck signs in the same vein. Naming conventions! +/obj/structure/sign/levels + name = "level sign" + desc = "A level sign, claiming to know which level to find... Something on?" + icon_state = "level" + icon = 'icons/obj/decals_levels.dmi' + +//engineering signs +/obj/structure/sign/directions/engineering + name = "\improper Engineering Department" + desc = "A direction sign, pointing out the way to the Engineering Department." + icon_state = "direction_eng" + +/obj/structure/sign/levels/engineering + name = "\improper Engineering Department" + desc = "A level sign, stating the level to find the Engineering Department on." + icon_state = "level_eng" + +/obj/structure/sign/directions/engineering/reactor + name = "\improper Reactor" + desc = "A direction sign, pointing out the way to the Reactor." + icon_state = "direction_core" + +/obj/structure/sign/levels/engineering/reactor + name = "\improper Reactor" + desc = "A level sign, stating the level to find the Reactor on." + icon_state = "level_core" + +/obj/structure/sign/directions/engineering/solars + name = "\improper Solar Array" + desc = "A direction sign, pointing out the way to the nearest Solar Array." + icon_state = "direction_solar" + +/obj/structure/sign/levels/engineering/solars + name = "\improper Solar Array" + desc = "A level sign, stating the level to find the nearest Solar Array on." + icon_state = "level_solar" + +/obj/structure/sign/directions/engineering/atmospherics + name = "\improper Atmospherics Department" + desc = "A direction sign, pointing out the way to the Atmospherics Department." + icon_state = "direction_atmos" + +/obj/structure/sign/levels/engineering/atmospherics + name = "\improper Atmospherics Department" + desc = "A level sign, stating the level to find the Atmospherics Department on." + icon_state = "level_atmos" + +/obj/structure/sign/directions/engineering/gravgen + name = "\improper Gravity Generator" + desc = "A direction sign, pointing out the way to the Artificial Gravity Generator." + icon_state = "direction_grav" + +/obj/structure/sign/levels/engineering/gravgen + name = "\improper Gravity Generator" + desc = "A level sign, stating the level to find the Artificial Gravity Generator on." + icon_state = "level_grav" + +/obj/structure/sign/directions/engineering/engeqp + name = "\improper Engineering Equipment Storage" + desc = "A direction sign, pointing out the way to Engineering Equipment Storage." + icon_state = "direction_engeqp" + +/obj/structure/sign/levels/engineering/engeqp + name = "\improper Engineering Equipment Storage" + desc = "A level sign, stating the level to find Engineering Equipment Storage on." + icon_state = "level_engeqp" + +//security signs +/obj/structure/sign/directions/security + name = "\improper Security Department" + desc = "A direction sign, pointing out the way to the Security Department." + icon_state = "direction_sec" + +/obj/structure/sign/levels/security + name = "\improper Security Department" + desc = "A level sign, stating the level to find the Security Department on." + icon_state = "level_sec" + +/obj/structure/sign/directions/security/armory + name = "\improper Armory" + desc = "A direction sign, pointing out the way to the Armory." + icon_state = "direction_armory" + +/obj/structure/sign/levels/security/armory + name = "\improper Armory" + desc = "A level sign, stating the level to find the Armory on." + icon_state = "level_armory" + +/obj/structure/sign/directions/security/brig + name = "\improper Brig" + desc = "A direction sign, pointing out the way to the Brig." + icon_state = "direction_brig" + +/obj/structure/sign/levels/security/brig + name = "\improper Brig" + desc = "A level sign, stating the level to find the Brig on." + icon_state = "level_brig" + +/obj/structure/sign/directions/security/seceqp + name = "\improper Security Equipment Storage" + desc = "A direction sign, pointing out the way to Security Equipment Storage." + icon_state = "direction_seceqp" + +/obj/structure/sign/levels/security/seceqp + name = "\improper Security Equipment Storage" + desc = "A level sign, stating the level to find Security Equipment Storage on." + icon_state = "level_seceqp" + +/obj/structure/sign/directions/security/internal_affairs + name = "\improper Internal Affairs Office" + desc = "A direction sign, pointing out the way to the Internal Affairs Office." + icon_state = "direction_intaff" + +/obj/structure/sign/levels/security/internal_affairs + name = "\improper Internal Affairs Office" + desc = "A level sign, stating the level to find the Internal Affairs Office on." + icon_state = "level_intaff" + +/obj/structure/sign/directions/security/forensics + name = "\improper Forensics Lab" + desc = "A direction sign, pointing out the way to the Forensics Lab." + icon_state = "direction_forensics" + +/obj/structure/sign/levels/security/forensics + name = "\improper Forensics Lab" + desc = "A level sign, stating the level to find the Forensics Lab on." + icon_state = "level_forensics" + +/obj/structure/sign/directions/security/forensics/alt + icon_state = "direction_lab" + +/obj/structure/sign/levels/security/forensics/alt + icon_state = "level_lab" + +/obj/structure/sign/directions/security/interrogation + name = "\improper Interrogations" + desc = "A direction sign, pointing out the way to Interrogations." + icon_state = "direction_interrogation" + +/obj/structure/sign/levels/security/interrogation + name = "\improper Interrogations" + desc = "A level sign, stating the level to find Interrogations on." + icon_state = "level_interrogation" + +//science signs +/obj/structure/sign/directions/science + name = "\improper Science Department" + desc = "A direction sign, pointing out the way to the Science Department." + icon_state = "direction_sci" + +/obj/structure/sign/levels/science + name = "\improper Science Department" + desc = "A level sign, stating the level to find the Science Department on." + icon_state = "level_sci" + +/obj/structure/sign/directions/science/rnd + name = "\improper Research & Development" + desc = "A direction sign, pointing out the way to Research & Development." + icon_state = "direction_rnd" + +/obj/structure/sign/levels/science/rnd + name = "\improper Research & Development" + desc = "A level sign, stating the level to find Research & Development on." + icon_state = "level_rnd" + +/obj/structure/sign/directions/science/toxins + name = "\improper Toxins Lab" + desc = "A direction sign, pointing out the way to the Toxins Lab." + icon_state = "direction_toxins" + +/obj/structure/sign/levels/science/toxins + name = "\improper Toxins Lab" + desc = "A level sign, stating the level to find the Toxins Lab on." + icon_state = "level_toxins" + +/obj/structure/sign/directions/science/robotics + name = "\improper Robotics Workshop" + desc = "A direction sign, pointing out the way to the Robotics Workshop." + icon_state = "direction_robotics" + +/obj/structure/sign/levels/science/robotics + name = "\improper Robotics Workshop" + desc = "A level sign, stating the level to find the Robotics Workshop on." + icon_state = "level_robotics" + +/obj/structure/sign/directions/science/xenoarch + name = "\improper Xenoarchaeology Lab" + desc = "A direction sign, pointing out the way to the Xenoarchaeology Lab." + icon_state = "direction_xenoarch" + +/obj/structure/sign/levels/science/xenoarch + name = "\improper Xenoarchaeology Lab" + desc = "A level sign, stating the level to find the Xenoarchaeology Lab on." + icon_state = "level_xenoarch" + +/obj/structure/sign/directions/science/xenobiology + name = "\improper Xenobiology Lab" + desc = "A direction sign, pointing out the way to the Xenobiology Lab." + icon_state = "direction_xbio" + +/obj/structure/sign/levels/science/xenobiology + name = "\improper Xenobiology Lab" + desc = "A level sign, stating the level to find the Xenobiology Lab on." + icon_state = "level_xbio" + +/obj/structure/sign/directions/science/xenoflora + name = "\improper Xenoflora Lab" + desc = "A direction sign, pointing out the way to the Xenoflora Lab." + icon_state = "direction_xflora" + +/obj/structure/sign/levels/science/xenoflora + name = "\improper Xenoflora Lab" + desc = "A level sign, stating the level to find the Xenoflora Lab on." + icon_state = "level_xflora" + +/obj/structure/sign/directions/science/exploration + name = "\improper Exploration Department" + desc = "A direction sign, pointing out the way to the Exploration Department." + icon_state = "direction_explo" + +/obj/structure/sign/levels/science/exploration + name = "\improper Exploration Department" + desc = "A level sign, stating the level to find the Exploration Department on." + icon_state = "level_explo" + +//medical signs +/obj/structure/sign/directions/medical + name = "\improper Medical Bay" + desc = "A direction sign, pointing out the way to the Medical Bay." + icon_state = "direction_med" + +/obj/structure/sign/levels/medical + name = "\improper Medical Bay" + desc = "A level sign, stating the level to find the Medical Bay on." + icon_state = "level_med" + +/obj/structure/sign/directions/medical/chemlab + name = "\improper Chemistry Lab" + desc = "A direction sign, pointing out the way to the Chemistry Lab." + icon_state = "direction_chemlab" + +/obj/structure/sign/levels/medical/chemlab + name = "\improper Chemistry Lab" + desc = "A level sign, stating the level to find the Chemistry Lab on." + icon_state = "level_chemlab" + +/obj/structure/sign/directions/medical/surgery + name = "\improper Surgery" + desc = "A direction sign, pointing out the way to Surgery." + icon_state = "direction_surgery" + +/obj/structure/sign/levels/medical/surgery + name = "\improper Surgery" + desc = "A level sign, stating the level to find Surgery on." + icon_state = "level_surgery" + +/obj/structure/sign/directions/medical/operating_1 + name = "\improper Operating Theatre 1" + desc = "A direction sign, pointing out the way to Operating Theatre 1." + icon_state = "direction_op1" + +/obj/structure/sign/levels/medical/operating_1 + name = "\improper Operating Theatre 1" + desc = "A level sign, stating the level to find Operating Theatre 1 on." + icon_state = "level_op1" + +/obj/structure/sign/directions/medical/operating_2 + name = "\improper Operating Theatre 2" + desc = "A direction sign, pointing out the way to Operating Theatre 2." + icon_state = "direction_op2" + +/obj/structure/sign/levels/medical/operating_2 + name = "\improper Operating Theatre 2" + desc = "A level sign, stating the level to find Operating Theatre 2 on." + icon_state = "level_op2" + +/obj/structure/sign/directions/medical/virology + name = "\improper Virology" + desc = "A direction sign, pointing out the way to the Virology Lab." + icon_state = "direction_viro" + +/obj/structure/sign/levels/medical/virology + name = "\improper Virology" + desc = "A level sign, stating the level to find the Virology Lab on." + icon_state = "level_viro" + +/obj/structure/sign/directions/medical/medeqp + name = "\improper Medical Equipment Storage" + desc = "A direction sign, pointing out the way to Medical Equipment Storage." + icon_state = "direction_medeqp" + +/obj/structure/sign/levels/medical/medeqp + name = "\improper Medical Equipment Storage" + desc = "A level sign, stating the level to find Medical Equipment Storage on." + icon_state = "level_medeqp" + +/obj/structure/sign/directions/medical/morgue + name = "\improper Morgue" + desc = "A direction sign, pointing out the way to the Morgue." + icon_state = "direction_morgue" + +/obj/structure/sign/levels/medical/morgue + name = "\improper Morgue" + desc = "A level sign, stating the level to find the Morgue on." + icon_state = "level_morgue" + +/obj/structure/sign/directions/medical/cloning + name = "\improper Cloning Lab" + desc = "A direction sign, pointing out the way to the Cloning Lab." + icon_state = "direction_cloning" + +/obj/structure/sign/levels/medical/cloning + name = "\improper Cloning Lab" + desc = "A level sign, stating the level to find the Cloning Lab on." + icon_state = "level_cloning" + +/obj/structure/sign/directions/medical/resleeving + name = "\improper Resleeving Lab" + desc = "A direction sign, pointing out the way to the Resleeving Lab." + icon_state = "direction_resleeve" + +/obj/structure/sign/levels/medical/resleeving + name = "\improper Resleeving Lab" + desc = "A level sign, stating the level to find the Resleeving Lab on." + icon_state = "level_resleeve" + +//special signs +/obj/structure/sign/directions/evac + name = "\improper Evacuation" + desc = "A direction sign, pointing out the way to the Escape Shuttle Dock." + icon_state = "direction_evac" + +/obj/structure/sign/levels/evac + name = "\improper Evacuation" + desc = "A level sign, stating the level to find the Escape Shuttle Dock on." + icon_state = "level_evac" + +/obj/structure/sign/directions/eva + name = "\improper Extra-Vehicular Activity" + desc = "A direction sign, pointing out the way to the EVA Bay." + icon_state = "direction_eva" + +/obj/structure/sign/levels/eva + name = "\improper Extra-Vehicular Activity" + desc = "A level sign, stating the level to find the EVA Bay on." + icon_state = "level_eva" + +//command signs +/obj/structure/sign/directions/ai_core + name = "\improper AI Core" + desc = "A direction sign, pointing out the way to the AI Core." + icon_state = "direction_ai_core" + +/obj/structure/sign/levels/ai_core + name = "\improper AI Core" + desc = "A level sign, stating the level to find the AI Core on." + icon_state = "level_ai_core" + +/obj/structure/sign/directions/bridge + name = "\improper Bridge" + desc = "A direction sign, pointing out the way to the Bridge." + icon_state = "direction_bridge" + +/obj/structure/sign/levels/bridge + name = "\improper Bridge" + desc = "A level sign, stating the level to find the Bridge on." + icon_state = "level_bridge" + +/obj/structure/sign/directions/command + name = "\improper Command" + desc = "A direction sign, pointing out the way to the Command Center." + icon_state = "direction_command" + +/obj/structure/sign/levels/command + name = "\improper Command" + desc = "A level sign, stating the level to find the Command Center on." + icon_state = "level_command" + +/obj/structure/sign/directions/teleporter + name = "\improper Teleporter" + desc = "A direction sign, pointing out the way to the Teleporter." + icon_state = "direction_teleport" + +/obj/structure/sign/levels/teleporter + name = "\improper Teleporter" + desc = "A level sign, stating the level to find the Teleporter on." + icon_state = "level_teleport" + +/obj/structure/sign/directions/telecomms + name = "\improper Telecommunications Hub" + desc = "A direction sign, pointing out the way to the Telecommunications Hub." + icon_state = "direction_tcomms" + +/obj/structure/sign/levels/telecomms + name = "\improper Telecommunications Hub" + desc = "A level sign, stating the level to find the Telecommunications Hub on." + icon_state = "level_tcomms" + +//cargonia signs +/obj/structure/sign/directions/cargo + name = "\improper Cargo Department" + desc = "A direction sign, pointing out the way to the Cargo Department." + icon_state = "direction_crg" + +/obj/structure/sign/levels/cargo + name = "\improper Cargo Department" + desc = "A level sign, stating the level to find the Cargo Department on." + icon_state = "level_crg" + +/obj/structure/sign/directions/cargo/mining + name = "\improper Mining Department" + desc = "A direction sign, pointing out the way to the Mining Department." + icon_state = "direction_mining" + +/obj/structure/sign/levels/cargo/mining + name = "\improper Mining Department" + desc = "A level sign, stating the level to find the Mining Department on." + icon_state = "level_mining" + +/obj/structure/sign/directions/cargo/refinery + name = "\improper Refinery" + desc = "A direction sign, pointing out the way to the Refinery." + icon_state = "direction_refinery" + +/obj/structure/sign/levels/cargo/refinery + name = "\improper Refinery" + desc = "A level sign, stating the level to find the Refinery on." + icon_state = "level_refinery" + +//civilian/misc signs +/obj/structure/sign/directions/roomnum + name = "room number" + desc = "A sign detailing the number of the room beside it." + icon_state = "roomnum" + +/obj/structure/sign/directions/cryo + name = "\improper Cryogenic Storage" + desc = "A direction sign, pointing out the way to Cryogenic Storage." + icon_state = "direction_cry" + +/obj/structure/sign/levels/cryo + name = "\improper Cryogenic Storage" + desc = "A level sign, stating the level to find Cryogenic Storage on." + icon_state = "level_cry" + +/obj/structure/sign/directions/elevator + name = "\improper Elevator" + desc = "A direction sign, pointing out the way to the nearest elevator." + icon_state = "direction_elv" + +/obj/structure/sign/levels/elevator + name = "\improper Elevator" + desc = "A level sign, stating the level to find the nearest elevator on." + icon_state = "level_elv" + +/obj/structure/sign/directions/bar + name = "\improper Bar" + desc = "A direction sign, pointing out the way to the nearest watering hole." + icon_state = "direction_bar" + +/obj/structure/sign/levels/bar + name = "\improper Bar" + desc = "A level sign, stating the level to find the nearest watering hole on." + icon_state = "level_bar" + +/obj/structure/sign/directions/kitchen + name = "\improper Kitchen" + desc = "A pictographic direction sign with a knife, plate, and fork, pointing out the way to the nearest dining establishment." + icon_state = "direction_kitchen" + +/obj/structure/sign/levels/kitchen + name = "\improper Kitchen" + desc = "A pictographic direction sign with a knife, plate, and fork, stating the level to find the nearest dining establishment on." + icon_state = "level_kitchen" + +/obj/structure/sign/directions/shuttle_bay + name = "\improper Shuttle Bay" + desc = "A direction sign, pointing out the way to the nearest shuttle bay." + icon_state = "direction_bay" + +/obj/structure/sign/levels/shuttle_bay + name = "\improper Shuttle Bay" + desc = "A direction sign, stating the level to find the nearest shuttle bay on." + icon_state = "level_bay" + +/obj/structure/sign/directions/tram + name = "\improper Public Transit Station" + desc = "A direction sign, pointing out the way to the nearest public transit station." + icon_state = "direction_tram" + +/obj/structure/sign/levels/tram + name = "\improper Public Transit Station" + desc = "A level sign, stating the level to find the nearest public transit station on." + icon_state = "level_tram" + +/obj/structure/sign/directions/janitor + name = "\improper Custodial Closet" + desc = "A direction sign, pointing out the way to the Custodial Closet." + icon_state = "direction_janitor" + +/obj/structure/sign/levels/janitor + name = "\improper Custodial Closet" + desc = "A level sign, stating the level to find the Custodial Closet on." + icon_state = "level_janitor" + +/obj/structure/sign/directions/chapel + name = "\improper Chapel" + desc = "A direction sign, pointing out the way to the Chapel." + icon_state = "direction_chapel" + +/obj/structure/sign/levels/chapel + name = "\improper Chapel" + desc = "A level sign, stating the level to find the Chapel on." + icon_state = "level_chapel" + +/obj/structure/sign/directions/dorms + name = "\improper Dormitories" + desc = "A direction sign, pointing out the way to the Dormitories." + icon_state = "direction_dorms" + +/obj/structure/sign/levels/dorms + name = "\improper Dormitories" + desc = "A level sign, stating the level to find the Dormitories on." + icon_state = "level_dorms" + +/obj/structure/sign/directions/library + name = "\improper Library" + desc = "A direction sign, pointing out the way to the Library." + icon_state = "direction_library" + +/obj/structure/sign/levels/library + name = "\improper Library" + desc = "A level sign, stating the level to find the Library on." + icon_state = "level_library" + +/obj/structure/sign/directions/dock + name = "\improper Dock" + desc = "A direction sign, pointing out the way to the nearest docking area." + icon_state = "direction_dock" + +/obj/structure/sign/levels/dock + name = "\improper Dock" + desc = "A level sign, stating the level to find the nearest docking area on." + icon_state = "level_dock" + +/obj/structure/sign/directions/gym + name = "\improper Gym" + desc = "A direction sign, pointing out the way to the Gym." + icon_state = "direction_gym" + +/obj/structure/sign/levels/gym + name = "\improper Gym" + desc = "A level sign, stating the level to find the Gym on." + icon_state = "level_gym" + +/obj/structure/sign/directions/pool + name = "\improper Pool" + desc = "A direction sign, pointing out the way to the Pool." + icon_state = "direction_pool" + +/obj/structure/sign/levels/pool + name = "\improper Pool" + desc = "A level sign, stating the level to find the Pool on." + icon_state = "level_pool" + +/obj/structure/sign/directions/recreation + name = "\improper Recreation Area" + desc = "A direction sign, pointing out the way to the nearest Recreation Area." + icon_state = "direction_recreation" + +/obj/structure/sign/levels/recreation + name = "\improper Recreation Area" + desc = "A level sign, stating the level to find the nearest Recreation Area on." + icon_state = "level_recreation" + +/obj/structure/sign/directions/stairwell + name = "\improper Stairwell" + desc = "A direction sign with stairs and a door, pointing out the way to the nearest stairwell." + icon_state = "stairwell" + +/obj/structure/sign/directions/stairs_up + name = "\improper Stairs Up" + desc = "A direction sign with stairs and an upward-slanted arrow, pointing out the way to the nearest set of stairs that go up." + icon_state = "stairs_up" + +/obj/structure/sign/directions/stairs_down + name = "\improper Stairs Down" + desc = "A direction sign with stairs and a downward-slanted arrow, pointing out the way to the nearest set of stairs that go down." + icon_state = "stairs_down" + +/obj/structure/sign/directions/ladderwell + name = "\improper Access Shaft" + desc = "A direction sign with a ladder and a door, pointing out the way to the nearest access shaft." + icon_state = "ladderwell" + +/obj/structure/sign/directions/ladder_up + name = "\improper Ladder Up" + desc = "A direction sign with a ladder and an upward arrow, pointing out the way to the nearest ladder that goes up." + icon_state = "ladder_up" + +/obj/structure/sign/directions/ladder_down + name = "\improper Ladder Down" + desc = "A direction sign with a ladder and a downward arrow, pointing out the way to the nearest ladder that goes down." + icon_state = "ladder_down" + +/obj/structure/sign/directions/exit + name = "\improper Emergency Exit" + desc = "A lurid green sign that unmistakably identifies that the door it's next to as an emergency exit route." + icon_state = "exit_sign" + +//OTHER STUFF +/obj/structure/sign/christmas/lights + name = "Christmas lights" + desc = "Flashy and pretty." + icon = 'icons/obj/christmas.dmi' + icon_state = "xmaslights" + layer = 4.9 + plane = PLANE_LIGHTING_ABOVE + +/obj/structure/sign/christmas/wreath + name = "wreath" + desc = "Prickly and festive." + icon = 'icons/obj/christmas.dmi' + icon_state = "doorwreath" + layer = 5 + +/obj/structure/sign/hostilefauna + icon = 'icons/obj/decals_vr.dmi' + name = "\improper Caution: Hostile fauna" + desc = "This sign warns of hostile life forms in the area." + icon_state = "h_fauna" + +/obj/structure/sign/graffiti/pisoff + icon = 'icons/obj/decals_vr.dmi' + name = "\improper PIS OFF" + desc = "This sign bears some rather rude looking graffiti instructing you to PIS OFF." + icon_state = "pisoff" + +//Eris signs + +/obj/structure/sign/ironhammer + icon = 'icons/obj/decals_vr.dmi' + name = "Ironhammer Security" + desc = "Sign depicts the symbolic of Ironhammer Security, the largest security provider within Trade Union of Hansa." + icon_state = "ironhammer" + +/obj/structure/sign/atmos_co2 + icon = 'icons/obj/decals_vr.dmi' + name = "CO2 warning sign" + desc = "WARNING! CO2 flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_co2" + +/obj/structure/sign/atmos_n2o + icon = 'icons/obj/decals_vr.dmi' + name = "N2O warning sign" + desc = "WARNING! N2O flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_n2o" + +/obj/structure/sign/atmos_plasma + icon = 'icons/obj/decals_vr.dmi' + name = "Plasma warning sign" + desc = "WARNING! Plasma flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_plasma" + +/obj/structure/sign/atmos_n2 + icon = 'icons/obj/decals_vr.dmi' + name = "N2 warning sign" + desc = "WARNING! N2 flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_n2" + +/obj/structure/sign/atmos_o2 + icon = 'icons/obj/decals_vr.dmi' + name = "O2 warning sign" + desc = "WARNING! O2 flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_o2" + +/obj/structure/sign/atmos_air + icon = 'icons/obj/decals_vr.dmi' + name = "Air warning sign" + desc = "WARNING! Air flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_air" + +/obj/structure/sign/atmos_waste + icon = 'icons/obj/decals_vr.dmi' + name = "Atmos waste warning sign" + desc = "WARNING! Waste flow tube. Ensure the flow is disengaged before working." + icon_state = "atmos_waste" + +/obj/structure/sign/deck1 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'DECK I'." + name = "DECK I" + icon_state = "deck1" + +/obj/structure/sign/deck2 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'DECK II'." + name = "DECK II" + icon_state = "deck2" + +/obj/structure/sign/deck3 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'DECK III'." + name = "DECK III" + icon_state = "deck3" + +/obj/structure/sign/deck4 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'DECK IV'." + name = "DECK IV" + icon_state = "deck4" + +/obj/structure/sign/sec1 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'SECTION I'." + name = "SECTION I" + icon_state = "sec1" + +/obj/structure/sign/sec2 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'SECTION II'." + name = "SECTION II" + icon_state = "sec2" + +/obj/structure/sign/sec3 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'SECTION III'." + name = "SECTION III" + icon_state = "sec3" + +/obj/structure/sign/sec4 + icon = 'icons/obj/decals_vr.dmi' + desc = "A silver sign which reads 'SECTION IV'." + name = "SECTION IV" + icon_state = "sec4" + +/obj/structure/sign/nanotrasen + icon = 'icons/obj/decals_vr.dmi' + name = "\improper NanoTrasen" + desc = "An old metal sign which reads 'NanoTrasen'." + icon_state = "NT" + catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen) + +// Eris standards compliant hazards +/obj/structure/sign/signnew + icon = 'icons/obj/decals_vr.dmi' + +/obj/structure/sign/signnew/biohazard + name = "BIOLOGICAL HAZARD" + desc = "Warning: Biological and-or toxic hazards present in this area!" + icon_state = "biohazard" + +/obj/structure/sign/signnew/corrosives + name = "CORROSIVE SUBSTANCES" + desc = "Warning: Corrosive substances prezent in this area!" + icon_state = "corrosives" + +/obj/structure/sign/signnew/explosives + name = "EXPLOSIVE SUBSTANCES" + desc = "Warning: Explosive substances present in this area!" + icon_state = "explosives" + +/obj/structure/sign/signnew/flammables + name = "FLAMMABLE SUBSTANCES" + desc = "Warning: Flammable substances present in this area!" + icon_state = "flammable" + +/obj/structure/sign/signnew/laserhazard + name = "LASER HAZARD" + desc = "Warning: High powered laser emitters operating in this area!" + icon_state = "laser" + +/obj/structure/sign/signnew/danger + name = "DANGEROUS AREA" + desc = "Warning: Generally hazardous area! Exercise caution." + icon_state = "danger" + +/obj/structure/sign/signnew/magnetics + name = "MAGNETIC FIELD HAZARD" + desc = "Warning: Extremely powerful magnetic fields present in this area!" + icon_state = "magnetics" + +/obj/structure/sign/signnew/opticals + name = "OPTICAL HAZARD" + desc = "Warning: Optical hazards present in this area!" + icon_state = "optical" + +/obj/structure/sign/signnew/radiation + name = "RADIATION HAZARD" + desc = "Warning: Significant levels of radiation present in this area!" + icon_state = "radiation" + +/obj/structure/sign/signnew/secure + name = "SECURE AREA" + desc = "Warning: Secure Area! Do not enter without authorization!" + icon_state = "secure" + +/obj/structure/sign/signnew/electrical + name = "ELECTRICAL HAZARD" + desc = "Warning: Electrical hazards! Wear protective equipment." + icon_state = "electrical" + +/obj/structure/sign/signnew/cryogenics + name = "CRYOGENIC TEMPERATURES" + desc = "Warning: Extremely low temperatures in this area." + icon_state = "cryogenics" + +/obj/structure/sign/signnew/canisters + name = "PRESSURIZED CANISTERS" + desc = "Warning: Highly pressurized canister storage." + icon_state = "canisters" + +/obj/structure/sign/signnew/oxidants + name = "OXIDIZING AGENTS" + desc = "Warning: Oxidizing agents in this area, do not start fires!" + icon_state = "oxidants" + +/obj/structure/sign/signnew/memetic + name = "MEMETIC HAZARD" + desc = "Warning: Memetic hazard, wear meson goggles!" + icon_state = "memetic" + +//Eris departments + +/obj/structure/sign/department + icon = 'icons/obj/decals_vr.dmi' + name = "department sign" + desc = "Sign of some important ship compartment." + +/obj/structure/sign/department/medbay + name = "MEDBAY" + icon_state = "medbay" + +/obj/structure/sign/department/virology + name = "VIROLOGY" + icon_state = "virology" + +/obj/structure/sign/department/chem + name = "CHEMISTRY" + icon_state = "chem" + +/obj/structure/sign/department/gene + name = "GENETICS" + icon_state = "gene" + +/obj/structure/sign/department/morgue + name = "MORGUE" + icon_state = "morgue" + +/obj/structure/sign/department/operational + name = "SURGERY" + icon_state = "operational" + +/obj/structure/sign/department/sci + name = "SCIENCE" + icon_state = "sci" + +/obj/structure/sign/department/xenolab + name = "XENOLAB" + icon_state = "xenolab" + +/obj/structure/sign/department/anomaly + name = "ANOMALYLAB" + icon_state = "anomaly" + +/obj/structure/sign/department/dock + name = "DOKUCHAYEV DOCK" + icon_state = "dock" + +/obj/structure/sign/department/rnd + name = "RND" + icon_state = "rnd" + +/obj/structure/sign/department/robo + name = "ROBOTICS" + icon_state = "robo" + +/obj/structure/sign/department/toxins + name = "TOXINS" + icon_state = "toxins" + +/obj/structure/sign/department/toxin_res + name = "TOXINLAB" + icon_state = "toxin_res" + +/obj/structure/sign/department/eva + name = "E.V.A." + icon_state = "eva" + +/obj/structure/sign/department/ass + name = "TOOL STORAGE" + icon_state = "ass" + +/obj/structure/sign/department/bar + name = "BAR" + icon_state = "bar" + +/obj/structure/sign/department/biblio + name = "LIBRARY" + icon_state = "biblio" + +/obj/structure/sign/department/chapel + name = "CHAPEL" + icon_state = "chapel" + +/obj/structure/sign/department/bridge + name = "BRIDGE" + icon_state = "bridge" + +/obj/structure/sign/department/telecoms + name = "TELECOMS" + icon_state = "telecoms" + +/obj/structure/sign/department/conference_room + name = "CONFERENCE" + icon_state = "conference_room" + +/obj/structure/sign/department/ai + name = "AI" + icon_state = "ai" + +/obj/structure/sign/department/cargo + name = "CARGO" + icon_state = "cargo" + +/obj/structure/sign/department/mail + name = "MAIL" + icon_state = "mail" + +/obj/structure/sign/department/miner_dock + name = "MINING DOCK" + icon_state = "miner_dock" + +/obj/structure/sign/department/cargo_dock + name = "CARGO DOCK" + icon_state = "cargo_dock" + +/obj/structure/sign/department/eng + name = "ENGINEERING" + icon_state = "eng" + +/obj/structure/sign/department/engine + name = "ENGINE" + icon_state = "engine" + +/obj/structure/sign/department/gravi + name = "GRAVGEN" + icon_state = "gravi" + +/obj/structure/sign/department/atmos + name = "ATMOSPHERICS" + icon_state = "atmos" + +/obj/structure/sign/department/shield + name = "SHIELDGEN" + icon_state = "shield" + +/obj/structure/sign/department/drones + name = "DRONES" + icon_state = "drones" + +/obj/structure/sign/department/interrogation + name = "INTERROGATION" + icon_state = "interrogation" + +/obj/structure/sign/department/commander + name = "COMMANDER" + icon_state = "commander" + +/obj/structure/sign/department/armory + name = "ARMORY" + icon_state = "armory" + +/obj/structure/sign/department/prison + name = "PRISON" + icon_state = "prison" + +/obj/structure/sign/deck/first + name = "\improper First Deck" + icon_state = "deck-1" + +/obj/structure/sign/deck/second + name = "\improper Second Deck" + icon_state = "deck-2" + +/obj/structure/sign/deck/third + name = "\improper Third Deck" + icon_state = "deck-3" + +/obj/structure/sign/deck/fourth + name = "\improper Fourth Deck" + icon_state = "deck-4" + +/obj/structure/sign/level/one + name = "\improper Level One" + icon_state = "level-1" + +/obj/structure/sign/level/one/large + icon_state = "level-1-large" + +/obj/structure/sign/level/two + name = "\improper Level Two" + icon_state = "level-2" + +/obj/structure/sign/level/two/large + icon_state = "level-2-large" + +/obj/structure/sign/level/three + name = "\improper Level Three" + icon_state = "level-3" + +/obj/structure/sign/level/three/large + icon_state = "level-3-large" + +/obj/structure/sign/level/fourth + name = "\improper Level Four" + icon_state = "level-4" + +/obj/structure/sign/level/four/large + icon_state = "level-4-large" + +/obj/structure/sign/level/basement + name = "\improper Basement Level" + icon_state = "level-b" + +/obj/structure/sign/level/basement/large + icon_state = "level-b-large" + +/obj/structure/sign/level/ground + name = "\improper Ground Level" + icon_state = "level-g" + +/obj/structure/sign/level/ground/large + icon_state = "level-g-large" + +/obj/structure/sign/hangar/one + name = "\improper Hangar One" + icon_state = "hangar-1" + +/obj/structure/sign/hangar/two + name = "\improper Hangar Two" + icon_state = "hangar-2" + +/obj/structure/sign/hangar/three + name = "\improper Hangar Three" + icon_state = "hangar-3" + +/obj/structure/sign/atmos + name = "\improper WASTE" + icon_state = "atmos_waste" + +/obj/structure/sign/atmos/o2 + name = "\improper OXYGEN" + icon_state = "atmos_o2" + +/obj/structure/sign/atmos/co2 + name = "\improper CARBON DIOXIDE" + icon_state = "atmos_co2" + +/obj/structure/sign/atmos/phoron + name = "\improper PHORON" + icon_state = "atmos_phoron" + +/obj/structure/sign/atmos/n2o + name = "\improper NITROUS OXIDE" + icon_state = "atmos_n2o" + +/obj/structure/sign/atmos/n2 + name = "\improper NITROGEN" + icon_state = "atmos_n2" + +/obj/structure/sign/atmos/air + name = "\improper AIR" + icon_state = "atmos_air" + +/obj/structure/sign/scenery/engineleft + name = "I.C.V." + desc = "The charred name of a cargo ship of some description." + icon_state = "poi_engine1" + +/obj/structure/sign/scenery/engineright + name = "I.C.V." + desc = "The charred name of a cargo ship of some description." + icon_state = "poi_engine2" + +//Direction/Level sign overlays. Not mechanically functional as noted above, but usable for mapping. +/obj/structure/sign/scenery/overlay + name = "snow covering" + desc = "Frozen snow obscures the view of a sign beneath." + icon_state = "snowy" + icon = 'icons/obj/decals_directions.dmi' + +/obj/structure/sign/scenery/overlay/rust + name = "rust covering" + desc = "Thick rust obscures the view of a sign beneath." + icon_state = "rusted" + +/obj/structure/sign/scenery/overlay/vine + name = "vine covering" + desc = "Thick vines obscure the view of a sign beneath." + icon_state = "vines" + +/obj/structure/sign/scenery/overlay/vine/top + icon_state = "vines_top" + +/obj/structure/sign/scenery/overlay/vine/mid + icon_state = "vines_mid" + +/obj/structure/sign/scenery/overlay/vine/bottom + icon_state = "vines_bottom" + +/obj/structure/sign/bigname + name = "Cynosure Station" + desc = "An aging sign for the Cynosure Xenoarchaeological Research Station." + icon_state = "cyno_1" + +/obj/structure/sign/bigname/seg_2 + icon_state = "cyno_2" + +/obj/structure/sign/bigname/seg_3 + icon_state = "cyno_3" + +/obj/structure/sign/bigname/seg_4 + icon_state = "cyno_4" + +/obj/structure/sign/bigname/seg_5 + icon_state = "cyno_5" + +/obj/structure/sign/bigname/seg_6 + icon_state = "cyno_6" + +/obj/structure/sign/bigname/seg_7 + icon_state = "cyno_7" + +/obj/structure/sign/clock + name = "wall clock" + desc = "A basic wall clock, synced to the current system time." + icon_state = "clock" + +/obj/structure/sign/clock/examine(mob/user) + . = ..() + . += "The clock shows that the time is [stationtime2text()]." + +/obj/structure/sign/calendar + name = "calendar" + desc = "It's an old-school, NanoTrasen branded wall calendar. Sure, it might be obsolete with modern technology, but it's still hard to imagine an office without one." + icon_state = "calendar" + +/obj/structure/sign/calendar/examine(mob/user) + . = ..() + . += "The calendar shows that the date is [stationdate2text()]." + if (Holiday.len) + . += "Today is [english_list(Holiday)]." + +/obj/structure/sign/explosive + name = "\improper HIGH EXPLOSIVES sign" + desc = "A warning sign which reads 'HIGH EXPLOSIVES'." + icon_state = "explosives" + +/obj/structure/sign/chemdiamond + name = "\improper HAZARDOUS CHEMICALS sign" + desc = "A sign that warns of potentially hazardous chemicals nearby, indicating health risk, flash point, and reactivity." + icon_state = "chemdiamond" + +//Here be Flags + +//Flag item +/obj/item/flag + name = "boxed flag" + desc = "A flag neatly folded into a wooden container." + icon = 'icons/obj/flags.dmi' + icon_state = "flag_boxed" + var/flag_path = "flag" + var/flag_size = 0 + +//Flag on wall +/obj/structure/sign/flag + name = "blank flag" + desc = "Nothing to see here." + icon = 'icons/obj/flags.dmi' + icon_state = "flag" + var/icon/ripped_outline = icon('icons/obj/flags.dmi', "ripped") + var/obj/structure/sign/flag/linked_flag //For double flags + var/obj/item/flag/flagtype //For returning your flag + var/ripped = FALSE //If we've been torn down + +/obj/structure/sign/flag/blank + name = "blank banner" + desc = "A blank white flag." + icon_state = "flag" + flagtype = /obj/item/flag + +/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) + if (!adjacent) + return + + if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc)) + to_chat(user, SPAN_WARNING("You can't place this here!")) + return + + var/placement_dir = get_dir(user, A) + if (!(placement_dir in cardinal)) + to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on.")) + return + + var/obj/structure/sign/flag/P = new(user.loc) + + switch(placement_dir) + if(NORTH) + P.pixel_y = 32 + if(SOUTH) + P.pixel_y = -32 + if(EAST) + P.pixel_x = 32 + if(WEST) + P.pixel_x = -32 + + P.dir = placement_dir + if(flag_size) + P.icon_state = "[flag_path]_l" + var/obj/structure/sign/flag/P2 = new(user.loc) + P.linked_flag = P2 + P2.linked_flag = P + P2.icon_state = "[flag_path]_r" + P2.dir = P.dir + switch(P2.dir) + if(NORTH) + P2.pixel_y = P.pixel_y + P2.pixel_x = 32 + if(SOUTH) + P2.pixel_y = P.pixel_y + P2.pixel_x = 32 + if(EAST) + P2.pixel_x = P.pixel_x + P2.pixel_y = -32 + if(WEST) + P2.pixel_x = P.pixel_x + P2.pixel_y = 32 + P2.name = name + P2.desc = desc + P2.description_info = description_info + P2.description_fluff = description_fluff + P2.flagtype = type + else + P.icon_state = "[flag_path]" + P.name = name + P.desc = desc + P.description_info = description_info + P.description_fluff = description_fluff + P.flagtype = type + qdel(src) + +/obj/structure/sign/flag/Destroy() + if(linked_flag?.linked_flag == src) //Catches other instances where one half might be destroyed, say by a broken wall, to avoid runtimes. + linked_flag.linked_flag = null //linked_flag + . = ..() + +/obj/structure/sign/flag/ex_act(severity) + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(50)) + qdel(src) + else + rip() + if(3) + rip() + +/obj/structure/sign/flag/unfasten(mob/user) + if(!ripped) + user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up.")) + var/obj/item/flag/F = new flagtype(get_turf(user)) + user.put_in_hands(F) + else + user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src].")) + if(linked_flag) + qdel(linked_flag) //otherwise you're going to get weird duping nonsense + qdel(src) + +/obj/structure/sign/flag/attack_hand(mob/user) + if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes") + if(!Adjacent(user)) //Cannot bring up dialogue and walk away + return FALSE + visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" )) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) + add_fingerprint(user) + rip() + +/obj/structure/sign/flag/proc/rip(var/rip_linked = TRUE) + var/icon/I = new('icons/obj/flags.dmi', icon_state) + var/icon/mask = new('icons/obj/flags.dmi', "ripped") + I.AddAlphaMask(mask) + icon = I + name = "ripped flag" + desc = "You can't make out anything from the flag's original print. It's ruined." + ripped = TRUE + if(linked_flag && rip_linked) + linked_flag.rip(FALSE) //Prevents an infinite ripping loop + +/obj/structure/sign/flag/attackby(obj/item/W, mob/user) + ..() + if(istype(W, /obj/item/weapon/flame/lighter) || istype(W, /obj/item/weapon/weldingtool)) + visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!")) + if(!do_after(user, 2 SECONDS)) + return FALSE + visible_message(SPAN_WARNING("\The [user] burns \the [src] down!")) + playsound(src.loc, 'sound/items/cigs_lighters/cig_light.ogg', 100, 1) + new /obj/effect/decal/cleanable/ash(src.loc) + if(linked_flag) + qdel(linked_flag) + qdel(src) + return TRUE + +/obj/structure/sign/flag/blank/left + icon_state = "flag_l" + +/obj/structure/sign/flag/blank/right + icon_state = "flag_r" + +//SolGov +/obj/structure/sign/flag/sol + name = "Solar Confederate Government flag" + desc = "The bright blue flag of the Solar Confederate Government." + icon_state = "solgov" + flagtype = /obj/item/flag/sol + +/obj/structure/sign/flag/sol/left + icon_state = "solgov_l" + +/obj/structure/sign/flag/sol/right + icon_state = "solgov_r" + +/obj/item/flag/sol + name = "Solar Confederate Government flag" + desc = "The bright blue flag of the Solar Confederate Government." + flag_path = "solgov" + +/obj/item/flag/sol/l + name = "large Solar Confederate Government flag" + flag_size = 1 + +//NanoTrasen +/obj/structure/sign/flag/nt + name = "NanoTrasen corporate flag" + desc = "A flag portraying the logo of the NanoTrasen corporation." + icon_state = "nanotrasen" + flagtype = /obj/item/flag/nt + +/obj/structure/sign/flag/nt/left + icon_state = "nanotrasen_l" + +/obj/structure/sign/flag/nt/right + icon_state = "nanotrasen_r" + +/obj/item/flag/nt + name = "NanoTrasen corporate flag" + desc = "A flag portraying the logo of the NanoTrasen corporation." + flag_path = "nanotrasen" + +/obj/item/flag/nt/l + name = "large NanoTrasen corporate flag" + flag_size = 1 + +//Vir +/obj/structure/sign/flag/vir + name = "Vir Governmental Authority flag" + desc = "The two-tone flag of the Vir Governmental Authority." + description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ + a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ + in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ + freedom to operate unobstructed in the Vir system." + icon_state = "vir" + flagtype = /obj/item/flag/vir + +/obj/structure/sign/flag/vir/left + icon_state = "vir_l" + +/obj/structure/sign/flag/vir/right + icon_state = "vir_r" + +/obj/item/flag/vir + name = "Vir Governmental Authority flag" + desc = "The two-tone flag of the Vir Governmental Authority." + description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ + a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ + in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ + freedom to operate unobstructed in the Vir system." + flag_path = "vir" + +/obj/item/flag/vir/l + name = "large Vir Governmental Authority flag" + flag_size = 1 + +//Almach Association + +/obj/structure/sign/flag/almach_a + name = "Almach Association flag" + desc = "The black and grey flag of the now-defunct Almach Association." + description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ + states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ + the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ + \"inevitable\" dissolution." + icon_state = "almach_a" + flagtype = /obj/item/flag/almach_a + +/obj/structure/sign/flag/almach_a/left + icon_state = "almach_a_l" + +/obj/structure/sign/flag/almach_a/right + icon_state = "almach_a_r" + +/obj/item/flag/almach_a + name = "Almach Association flag" + desc = "The black and grey flag of the now-defunct Almach Association." + description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ + states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ + the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ + \"inevitable\" dissolution." + flag_path = "almach_a" + +/obj/item/flag/almach_a/l + name = "large Almach Association flag" + flag_size = 1 + +//Almach Protectorate +/obj/structure/sign/flag/almach_p + name = "Almach Protectorate flag" + desc = "The purple flag of the Almach Protectorate." + description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ + Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ + leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ + without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." + icon_state = "almach_p" + flagtype = /obj/item/flag/almach_p + +/obj/structure/sign/flag/almach_p/left + icon_state = "almach_p_l" + +/obj/structure/sign/flag/almach_p/right + icon_state = "almach_p_r" + +/obj/item/flag/almach_p + name = "Almach Protectorate flag" + desc = "The purple flag of the Almach Protectorate." + description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ + Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ + leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ + without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." + flag_path = "almach_p" + +/obj/item/flag/almach_p/l + name = "large Almach Protectorate flag" + flag_size = 1 + +//Vystholm +/obj/structure/sign/flag/vystholm + name = "Vystholm flag" + desc = "The black and gold flag of Vystholm." + description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ + First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ + to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ + Pearlshield Coalition." + icon_state = "vystholm" + flagtype = /obj/item/flag/vystholm + +/obj/structure/sign/flag/vystholm/left + icon_state = "vystholm_l" + +/obj/structure/sign/flag/vystholm/right + icon_state = "vystholm_r" + +/obj/item/flag/vystholm + name = "Vystholm flag" + desc = "The black and gold flag of Vystholm." + description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ + First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ + to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ + Pearlshield Coalition." + flag_path = "vystholm" + +/obj/item/flag/vystholm/l + name = "large Vystholm flag" + flag_size = 1 + +//Five Arrows +/obj/structure/sign/flag/fivearrows + name = "Five Arrows flag" + desc = "The red flag of the Five Arrows." + description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \ + failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ + since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." + icon_state = "fivearrows" + flagtype = /obj/item/flag/fivearrows + +/obj/structure/sign/flag/fivearrows/left + icon_state = "fivearrows_l" + +/obj/structure/sign/flag/fivearrows/right + icon_state = "fivearrows_r" + +/obj/item/flag/fivearrows + name = "Five Arrows flag" + desc = "The red flag of the Five Arrows." + description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \ + failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ + since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." + flag_path = "fivearrows" + +/obj/item/flag/fivearrows/l + name = "large Five Arrows flag" + flag_size = 1 + +//Pirates +/obj/structure/sign/flag/pirate + name = "pirate flag" + desc = "Shiver me timbers, hoist the black!" + icon_state = "pirate" + flagtype = /obj/item/flag/pirate + +/obj/structure/sign/flag/pirate/left + icon_state = "pirate_l" + +/obj/structure/sign/flag/pirate/right + icon_state = "pirate_r" + +/obj/item/flag/pirate + name = "pirate flag" + desc = "Shiver me timbers, hoist the black!" + flag_path = "pirate" + + +/obj/item/flag/pirate/l + name = "large pirate flag" + flag_size = 1 + +//Catpirate +/obj/structure/sign/flag/catpirate + name = "Tajaran pirate flag" + desc = "Shiver me whiskers, hoist the black!" + icon_state = "catpirate" + flagtype = /obj/item/flag/catpirate + +/obj/structure/sign/flag/catpirate/left + icon_state = "catpirate_l" + +/obj/structure/sign/flag/catpirate/right + icon_state = "catpirate_r" + +/obj/item/flag/catpirate + name = "Tajaran pirate flag" + desc = "Shiver me whiskers, hoist the black!" + flag_path = "catpirate" + +/obj/item/flag/catpirate/l + name = "large Tajaran pirate flag" + flag_size = 1 + +//Political Parties +/obj/structure/sign/flag/icarus + name = "Icarus Front flag" + desc = "The flag of the right-populist Icarus Front political party." + icon_state = "icarus" + flagtype = /obj/item/flag/icarus + +/obj/item/flag/icarus + name = "Icarus Front flag" + desc = "The flag of the right-populist Icarus Front political party." + flag_path = "icarus" + +/obj/structure/sign/flag/shadowcoalition + name = "Shadow Coalition flag" + desc = "The flag of the neoliberal Shadow Coalition political party." + icon_state = "shadowcoalition" + flagtype = /obj/item/flag/shadowcoalition + +/obj/item/flag/shadowcoalition + name = "Shadow Coalition flag" + desc = "The flag of the neoliberal Shadow Coalition political party." + flag_path = "shadowcoalition" + +/obj/structure/sign/flag/seo + name = "Sol Economic Organization flag" + desc = "The flag of the protectionist Sol Economic Organization political party." + icon_state = "seo" + flagtype = /obj/item/flag/seo + +/obj/item/flag/seo + name = "Sol Economic Organization flag" + desc = "The flag of the protectionist Sol Economic Organization political party." + flag_path = "seo" + +/obj/structure/sign/flag/gap + name = "Galactic Autonomy Party flag" + desc = "The flag of the libertarian Galactic Autonomy Party political party." + icon_state = "gap" + flagtype = /obj/item/flag/seo + +/obj/item/flag/gap + name = "Galactic Autonomy Party flag" + desc = "The flag of the libertarian Galactic Autonomy Party political party." + flag_path = "gap" diff --git a/code/game/objects/structures/signs_vr.dm b/code/game/objects/structures/signs_vr.dm index f939037160..1e97c4736f 100644 --- a/code/game/objects/structures/signs_vr.dm +++ b/code/game/objects/structures/signs_vr.dm @@ -1,65 +1,65 @@ -/obj/structure/sign/itg - icon = 'icons/obj/decals_vr.dmi' - name = "\improper ITG" - desc = "A polished metal sign which reads 'Ironcrest Transport Group'." - icon_state = "itg" - -/obj/structure/sign/scenery/fakefireaxe - name = "decorative fire axe cabinet" - desc = "A fancy decorative indent in the wall, with an axe inside. The axe is actually a part of the indent and cannot be removed. A nostalgic reminder of older times of firefighting." - icon_state = "fireaxe1000" - icon = 'icons/obj/closet.dmi' - -//Small Signs for detailing -/obj/structure/sign/small/fire/small - icon = 'icons/obj/decals.dmi' - name = "\improper DANGER: FIRE" - desc = "A warning sign which reads 'DANGER: FIRE'." - icon_state = "fire_small" - -/obj/structure/sign/small/nosmoking - name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'." - icon_state = "nosmoking_small" - -/obj/structure/sign/small/nosmoking - name = "\improper DESIGNATED SMOKING AREA" - desc = "A warning sign which reads 'DESIGNATED SMOKING AREA'." - icon_state = "smoking_small" - -/obj/structure/sign/small/warning - name = "\improper WARNING" - desc = "" //Null description - icon_state = "warning_small" - -/obj/structure/sign/small/warning/high_voltage - name = "\improper HIGH VOLTAGE" - icon_state = "shock_small" - -/obj/structure/sign/small/warning/radioactive - name = "\improper RADIOACTIVE AREA" - icon_state = "radiation_small" - -/obj/structure/sign/small/warning/caution - name = "\improper CAUTION" - icon_state = "caution_small" - -/obj/structure/sign/small/warning/server_room - name = "\improper SERVER ROOM" - icon_state = "server_small" - -/obj/structure/sign/small/warning/secure_area - name = "\improper SECURE AREA" - icon_state = "securearea_small" - -/obj/structure/sign/small/warning/vacuum - name = "\improper HARD VACUUM AHEAD" - icon_state = "space_small" - -/obj/structure/sign/small/warning/pods - name = "\improper ESCAPE PODS" - icon_state = "pods" - -/obj/structure/sign/small/warning/emerg_only - name = "\improper EMERGENCY USE ONLY" +/obj/structure/sign/itg + icon = 'icons/obj/decals_vr.dmi' + name = "\improper ITG" + desc = "A polished metal sign which reads 'Ironcrest Transport Group'." + icon_state = "itg" + +/obj/structure/sign/scenery/fakefireaxe + name = "decorative fire axe cabinet" + desc = "A fancy decorative indent in the wall, with an axe inside. The axe is actually a part of the indent and cannot be removed. A nostalgic reminder of older times of firefighting." + icon_state = "fireaxe1000" + icon = 'icons/obj/closet.dmi' + +//Small Signs for detailing +/obj/structure/sign/small/fire/small + icon = 'icons/obj/decals.dmi' + name = "\improper DANGER: FIRE" + desc = "A warning sign which reads 'DANGER: FIRE'." + icon_state = "fire_small" + +/obj/structure/sign/small/nosmoking + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'." + icon_state = "nosmoking_small" + +/obj/structure/sign/small/nosmoking + name = "\improper DESIGNATED SMOKING AREA" + desc = "A warning sign which reads 'DESIGNATED SMOKING AREA'." + icon_state = "smoking_small" + +/obj/structure/sign/small/warning + name = "\improper WARNING" + desc = "" //Null description + icon_state = "warning_small" + +/obj/structure/sign/small/warning/high_voltage + name = "\improper HIGH VOLTAGE" + icon_state = "shock_small" + +/obj/structure/sign/small/warning/radioactive + name = "\improper RADIOACTIVE AREA" + icon_state = "radiation_small" + +/obj/structure/sign/small/warning/caution + name = "\improper CAUTION" + icon_state = "caution_small" + +/obj/structure/sign/small/warning/server_room + name = "\improper SERVER ROOM" + icon_state = "server_small" + +/obj/structure/sign/small/warning/secure_area + name = "\improper SECURE AREA" + icon_state = "securearea_small" + +/obj/structure/sign/small/warning/vacuum + name = "\improper HARD VACUUM AHEAD" + icon_state = "space_small" + +/obj/structure/sign/small/warning/pods + name = "\improper ESCAPE PODS" + icon_state = "pods" + +/obj/structure/sign/small/warning/emerg_only + name = "\improper EMERGENCY USE ONLY" icon_state = "emerg_small" \ No newline at end of file diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 2a6e89305b..b3ccf3a01c 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -1,312 +1,312 @@ -/obj/structure/simple_door - name = "door" - description_info = "If you hold left alt whilst left-clicking on a door, you can knock on it to announce your presence to anyone on the other side! Alternately if you are on HARM intent when doing this, you will bang loudly on the door!" - density = TRUE - anchored = TRUE - can_atmos_pass = ATMOS_PASS_DENSITY - - icon = 'icons/obj/doors/material_doors.dmi' - icon_state = "metal" - - var/datum/material/material - var/state = 0 //closed, 1 == open - var/isSwitchingStates = 0 - var/hardness = 1 - var/oreAmount = 7 - var/knock_sound = 'sound/machines/door/knock_glass.ogg' - var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' - - var/locked = FALSE //has the door been locked? - var/lock_id = null //does the door have an associated key? - var/keysound = 'sound/items/toolbelt_equip.ogg' - -/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - TemperatureAct(exposed_temperature) - -/obj/structure/simple_door/proc/TemperatureAct(temperature) - hardness -= material.combustion_effect(get_turf(src),temperature, 0.3) - CheckHardness() - -/obj/structure/simple_door/Initialize(mapload, var/material_name) - . = ..() - set_material(material_name) - if(!material) - return INITIALIZE_HINT_QDEL - -/obj/structure/simple_door/Destroy() - STOP_PROCESSING(SSobj, src) - update_nearby_tiles() - return ..() - -/obj/structure/simple_door/proc/set_material(var/material_name) - if(!material_name) - material_name = MAT_STEEL - material = get_material_by_name(material_name) - if(!material) - return - hardness = max(1,round(material.integrity/10)) - icon_state = material.door_icon_base - name = "[material.display_name] door" - color = material.icon_colour - if(material.opacity < 0.5) - set_opacity(0) - else - set_opacity(1) - if(material.products_need_process()) - START_PROCESSING(SSobj, src) - update_nearby_tiles(need_rebuild=1) - -/obj/structure/simple_door/get_material() - return material - -/obj/structure/simple_door/Bumped(atom/user) - ..() - if(!state) - return TryToSwitchState(user) - return - -/obj/structure/simple_door/attack_ai(mob/user as mob) //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(isrobot(user)) //but cyborgs can - if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) - -/obj/structure/simple_door/attack_hand(mob/user as mob) - return TryToSwitchState(user) - -/* // CHOMPEDIT: disabling becaue alt-clicking to view a turf is pretty important. -/obj/structure/simple_door/AltClick(mob/user as mob) - . = ..() - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!Adjacent(user)) - return - else if(user.a_intent == I_HURT) - src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!") - src.add_fingerprint(user) - playsound(src, knock_hammer_sound, 50, 0, 3) - else if(user.a_intent == I_HELP) - src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") - src.add_fingerprint(user) - playsound(src, knock_sound, 50, 0, 3) - return -*/ - -/obj/structure/simple_door/CanPass(atom/movable/mover, turf/target) - if(istype(mover, /obj/effect/beam)) - return !opacity - return !density - -/obj/structure/simple_door/proc/TryToSwitchState(atom/user) - if(isSwitchingStates) return - if(ismob(user)) - var/mob/M = user - if(!material.can_open_material_door(user)) - return - if(locked && state == 0) - to_chat(M,"It's locked!") - return - if(world.time - user.last_bumped <= 60) - return - if(M.client) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.handcuffed) - SwitchState() - else - SwitchState() - else if(istype(user, /obj/mecha)) - SwitchState() - -/obj/structure/simple_door/proc/SwitchState() - if(state) - Close() - else - Open() - -/obj/structure/simple_door/proc/Open() - isSwitchingStates = 1 - playsound(src, material.dooropen_noise, 100, 1) - flick("[material.door_icon_base]opening",src) - sleep(10) - density = FALSE - set_opacity(0) - state = 1 - update_icon() - isSwitchingStates = 0 - update_nearby_tiles() - -/obj/structure/simple_door/proc/Close() - isSwitchingStates = 1 - playsound(src, material.dooropen_noise, 100, 1) - flick("[material.door_icon_base]closing",src) - sleep(10) - density = TRUE - set_opacity(1) - state = 0 - update_icon() - isSwitchingStates = 0 - update_nearby_tiles() - -/obj/structure/simple_door/update_icon() - if(state) - icon_state = "[material.door_icon_base]open" - else - icon_state = material.door_icon_base - -/obj/structure/simple_door/attackby(obj/item/weapon/W as obj, mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(istype(W,/obj/item/weapon/simple_key)) - var/obj/item/weapon/simple_key/key = W - if(state) - to_chat(user,"\The [src] must be closed in order for you to lock it.") - else if(key.key_id != src.lock_id) - to_chat(user,"The [key] doesn't fit \the [src]'s lock!") - else if(key.key_id == src.lock_id) - visible_message("[user] [key.keyverb] \the [key] and [locked ? "unlocks" : "locks"] \the [src].") - locked = !locked - playsound(src, keysound,100, 1) - return - if(istype(W,/obj/item/weapon/pickaxe) && breakable) - var/obj/item/weapon/pickaxe/digTool = W - visible_message("[user] starts digging [src]!") - if(do_after(user,digTool.digspeed*hardness) && src) - visible_message("[user] finished digging [src]!") - Dismantle() - else if(istype(W,/obj/item/weapon) && breakable) //not sure, can't not just weapons get passed to this proc? - hardness -= W.force/10 - visible_message("[user] hits [src] with [W]!") - if(material == get_material_by_name("resin")) - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD) || get_material_by_name(MAT_HARDWOOD))) - playsound(src, 'sound/effects/woodcutting.ogg', 100, 1) - else - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - CheckHardness() - else if(W.has_tool_quality(TOOL_WELDER) && breakable) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(material.ignition_point && WT.remove_fuel(0, user)) - TemperatureAct(150) - else - attack_hand(user) - return - -/obj/structure/simple_door/bullet_act(var/obj/item/projectile/Proj) - take_damage(Proj.damage/10) - CheckHardness() - -/obj/structure/simple_door/take_damage(var/damage) - hardness -= damage/10 - CheckHardness() - -/obj/structure/simple_door/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - if(material == get_material_by_name("resin")) - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD) || get_material_by_name(MAT_HARDWOOD))) - playsound(src, 'sound/effects/woodcutting.ogg', 100, 1) - else - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - user.do_attack_animation(src) - hardness -= damage/10 - CheckHardness() - -/obj/structure/simple_door/proc/CheckHardness() - if(hardness <= 0) - Dismantle(1) - -/obj/structure/simple_door/proc/Dismantle(devastated = 0) - material.place_dismantled_product(get_turf(src)) - visible_message("The [src] is destroyed!") - qdel(src) - -/obj/structure/simple_door/ex_act(severity = 1) - switch(severity) - if(1) - Dismantle(1) - if(2) - if(prob(20)) - Dismantle(1) - else - hardness-- - CheckHardness() - if(3) - hardness -= 0.1 - CheckHardness() - return - -/obj/structure/simple_door/process() - if(!material.radioactivity) - return - SSradiation.radiate(src, round(material.radioactivity/3)) - -/obj/structure/simple_door/iron/Initialize(mapload,var/material_name) - ..(mapload, material_name || "iron") - -/obj/structure/simple_door/silver/Initialize(mapload,var/material_name) - ..(mapload, material_name || "silver") - -/obj/structure/simple_door/gold/Initialize(mapload,var/material_name) - ..(mapload, material_name || "gold") - -/obj/structure/simple_door/uranium/Initialize(mapload,var/material_name) - ..(mapload, material_name || "uranium") - -/obj/structure/simple_door/sandstone/Initialize(mapload,var/material_name) - ..(mapload, material_name || "sandstone") - -/obj/structure/simple_door/phoron/Initialize(mapload,var/material_name) - ..(mapload, material_name || "phoron") - -/obj/structure/simple_door/diamond/Initialize(mapload,var/material_name) - ..(mapload, material_name || "diamond") - -/obj/structure/simple_door/wood/Initialize(mapload,var/material_name) - ..(mapload, material_name || MAT_WOOD) - knock_sound = 'sound/machines/door/knock_wood.wav' - -/obj/structure/simple_door/hardwood/Initialize(mapload,var/material_name) - ..(mapload, material_name || MAT_HARDWOOD) - -/obj/structure/simple_door/sifwood/Initialize(mapload,var/material_name) - ..(mapload, material_name || MAT_SIFWOOD) - -/obj/structure/simple_door/resin/Initialize(mapload,var/material_name) - ..(mapload, material_name || "resin") - -/obj/structure/simple_door/cult/Initialize(mapload,var/material_name) - ..(mapload, material_name || "cult") - -/obj/structure/simple_door/cult/TryToSwitchState(atom/user) - if(isliving(user)) - var/mob/living/L = user - if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct)) - return - ..() - -// CHOMPedit start: Allows removing resin doors. -/obj/structure/simple_door/resin/attack_hand(mob/user as mob) - usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (HULK in usr.mutations) - visible_message("[usr] destroys the [name]!") - hardness = 0 - else - - // Carbons can get straight through these. - if(istype(usr,/mob/living/carbon)) - if(user.a_intent == I_HURT) - var/mob/living/carbon/M = usr - if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - visible_message ("[usr] strokes the [name] and it melts away!", 1) - hardness = 0 - CheckHardness() - return - else - visible_message("[usr] tears at the [name]!") - hardness -= 2 - CheckHardness() - return - CheckHardness() - TryToSwitchState(user) - return +/obj/structure/simple_door + name = "door" + description_info = "If you hold left alt whilst left-clicking on a door, you can knock on it to announce your presence to anyone on the other side! Alternately if you are on HARM intent when doing this, you will bang loudly on the door!" + density = TRUE + anchored = TRUE + can_atmos_pass = ATMOS_PASS_DENSITY + + icon = 'icons/obj/doors/material_doors.dmi' + icon_state = "metal" + + var/datum/material/material + var/state = 0 //closed, 1 == open + var/isSwitchingStates = 0 + var/hardness = 1 + var/oreAmount = 7 + var/knock_sound = 'sound/machines/door/knock_glass.ogg' + var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' + + var/locked = FALSE //has the door been locked? + var/lock_id = null //does the door have an associated key? + var/keysound = 'sound/items/toolbelt_equip.ogg' + +/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + TemperatureAct(exposed_temperature) + +/obj/structure/simple_door/proc/TemperatureAct(temperature) + hardness -= material.combustion_effect(get_turf(src),temperature, 0.3) + CheckHardness() + +/obj/structure/simple_door/Initialize(mapload, var/material_name) + . = ..() + set_material(material_name) + if(!material) + return INITIALIZE_HINT_QDEL + +/obj/structure/simple_door/Destroy() + STOP_PROCESSING(SSobj, src) + update_nearby_tiles() + return ..() + +/obj/structure/simple_door/proc/set_material(var/material_name) + if(!material_name) + material_name = MAT_STEEL + material = get_material_by_name(material_name) + if(!material) + return + hardness = max(1,round(material.integrity/10)) + icon_state = material.door_icon_base + name = "[material.display_name] door" + color = material.icon_colour + if(material.opacity < 0.5) + set_opacity(0) + else + set_opacity(1) + if(material.products_need_process()) + START_PROCESSING(SSobj, src) + update_nearby_tiles(need_rebuild=1) + +/obj/structure/simple_door/get_material() + return material + +/obj/structure/simple_door/Bumped(atom/user) + ..() + if(!state) + return TryToSwitchState(user) + return + +/obj/structure/simple_door/attack_ai(mob/user as mob) //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(isrobot(user)) //but cyborgs can + if(get_dist(user,src) <= 1) //not remotely though + return TryToSwitchState(user) + +/obj/structure/simple_door/attack_hand(mob/user as mob) + return TryToSwitchState(user) + +/* // CHOMPEDIT: disabling becaue alt-clicking to view a turf is pretty important. +/obj/structure/simple_door/AltClick(mob/user as mob) + . = ..() + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(!Adjacent(user)) + return + else if(user.a_intent == I_HURT) + src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!") + src.add_fingerprint(user) + playsound(src, knock_hammer_sound, 50, 0, 3) + else if(user.a_intent == I_HELP) + src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") + src.add_fingerprint(user) + playsound(src, knock_sound, 50, 0, 3) + return +*/ + +/obj/structure/simple_door/CanPass(atom/movable/mover, turf/target) + if(istype(mover, /obj/effect/beam)) + return !opacity + return !density + +/obj/structure/simple_door/proc/TryToSwitchState(atom/user) + if(isSwitchingStates) return + if(ismob(user)) + var/mob/M = user + if(!material.can_open_material_door(user)) + return + if(locked && state == 0) + to_chat(M,"It's locked!") + return + if(world.time - user.last_bumped <= 60) + return + if(M.client) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.handcuffed) + SwitchState() + else + SwitchState() + else if(istype(user, /obj/mecha)) + SwitchState() + +/obj/structure/simple_door/proc/SwitchState() + if(state) + Close() + else + Open() + +/obj/structure/simple_door/proc/Open() + isSwitchingStates = 1 + playsound(src, material.dooropen_noise, 100, 1) + flick("[material.door_icon_base]opening",src) + sleep(10) + density = FALSE + set_opacity(0) + state = 1 + update_icon() + isSwitchingStates = 0 + update_nearby_tiles() + +/obj/structure/simple_door/proc/Close() + isSwitchingStates = 1 + playsound(src, material.dooropen_noise, 100, 1) + flick("[material.door_icon_base]closing",src) + sleep(10) + density = TRUE + set_opacity(1) + state = 0 + update_icon() + isSwitchingStates = 0 + update_nearby_tiles() + +/obj/structure/simple_door/update_icon() + if(state) + icon_state = "[material.door_icon_base]open" + else + icon_state = material.door_icon_base + +/obj/structure/simple_door/attackby(obj/item/weapon/W as obj, mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(istype(W,/obj/item/weapon/simple_key)) + var/obj/item/weapon/simple_key/key = W + if(state) + to_chat(user,"\The [src] must be closed in order for you to lock it.") + else if(key.key_id != src.lock_id) + to_chat(user,"The [key] doesn't fit \the [src]'s lock!") + else if(key.key_id == src.lock_id) + visible_message("[user] [key.keyverb] \the [key] and [locked ? "unlocks" : "locks"] \the [src].") + locked = !locked + playsound(src, keysound,100, 1) + return + if(istype(W,/obj/item/weapon/pickaxe) && breakable) + var/obj/item/weapon/pickaxe/digTool = W + visible_message("[user] starts digging [src]!") + if(do_after(user,digTool.digspeed*hardness) && src) + visible_message("[user] finished digging [src]!") + Dismantle() + else if(istype(W,/obj/item/weapon) && breakable) //not sure, can't not just weapons get passed to this proc? + hardness -= W.force/10 + visible_message("[user] hits [src] with [W]!") + if(material == get_material_by_name("resin")) + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD) || get_material_by_name(MAT_HARDWOOD))) + playsound(src, 'sound/effects/woodcutting.ogg', 100, 1) + else + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + CheckHardness() + else if(W.has_tool_quality(TOOL_WELDER) && breakable) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(material.ignition_point && WT.remove_fuel(0, user)) + TemperatureAct(150) + else + attack_hand(user) + return + +/obj/structure/simple_door/bullet_act(var/obj/item/projectile/Proj) + take_damage(Proj.damage/10) + CheckHardness() + +/obj/structure/simple_door/take_damage(var/damage) + hardness -= damage/10 + CheckHardness() + +/obj/structure/simple_door/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + if(material == get_material_by_name("resin")) + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD) || get_material_by_name(MAT_HARDWOOD))) + playsound(src, 'sound/effects/woodcutting.ogg', 100, 1) + else + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + user.do_attack_animation(src) + hardness -= damage/10 + CheckHardness() + +/obj/structure/simple_door/proc/CheckHardness() + if(hardness <= 0) + Dismantle(1) + +/obj/structure/simple_door/proc/Dismantle(devastated = 0) + material.place_dismantled_product(get_turf(src)) + visible_message("The [src] is destroyed!") + qdel(src) + +/obj/structure/simple_door/ex_act(severity = 1) + switch(severity) + if(1) + Dismantle(1) + if(2) + if(prob(20)) + Dismantle(1) + else + hardness-- + CheckHardness() + if(3) + hardness -= 0.1 + CheckHardness() + return + +/obj/structure/simple_door/process() + if(!material.radioactivity) + return + SSradiation.radiate(src, round(material.radioactivity/3)) + +/obj/structure/simple_door/iron/Initialize(mapload,var/material_name) + ..(mapload, material_name || "iron") + +/obj/structure/simple_door/silver/Initialize(mapload,var/material_name) + ..(mapload, material_name || "silver") + +/obj/structure/simple_door/gold/Initialize(mapload,var/material_name) + ..(mapload, material_name || "gold") + +/obj/structure/simple_door/uranium/Initialize(mapload,var/material_name) + ..(mapload, material_name || "uranium") + +/obj/structure/simple_door/sandstone/Initialize(mapload,var/material_name) + ..(mapload, material_name || "sandstone") + +/obj/structure/simple_door/phoron/Initialize(mapload,var/material_name) + ..(mapload, material_name || "phoron") + +/obj/structure/simple_door/diamond/Initialize(mapload,var/material_name) + ..(mapload, material_name || "diamond") + +/obj/structure/simple_door/wood/Initialize(mapload,var/material_name) + ..(mapload, material_name || MAT_WOOD) + knock_sound = 'sound/machines/door/knock_wood.wav' + +/obj/structure/simple_door/hardwood/Initialize(mapload,var/material_name) + ..(mapload, material_name || MAT_HARDWOOD) + +/obj/structure/simple_door/sifwood/Initialize(mapload,var/material_name) + ..(mapload, material_name || MAT_SIFWOOD) + +/obj/structure/simple_door/resin/Initialize(mapload,var/material_name) + ..(mapload, material_name || "resin") + +/obj/structure/simple_door/cult/Initialize(mapload,var/material_name) + ..(mapload, material_name || "cult") + +/obj/structure/simple_door/cult/TryToSwitchState(atom/user) + if(isliving(user)) + var/mob/living/L = user + if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct)) + return + ..() + +// CHOMPedit start: Allows removing resin doors. +/obj/structure/simple_door/resin/attack_hand(mob/user as mob) + usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if (HULK in usr.mutations) + visible_message("[usr] destroys the [name]!") + hardness = 0 + else + + // Carbons can get straight through these. + if(istype(usr,/mob/living/carbon)) + if(user.a_intent == I_HURT) + var/mob/living/carbon/M = usr + if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) + visible_message ("[usr] strokes the [name] and it melts away!", 1) + hardness = 0 + CheckHardness() + return + else + visible_message("[usr] tears at the [name]!") + hardness -= 2 + CheckHardness() + return + CheckHardness() + TryToSwitchState(user) + return // CHOMPedit end. \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 903346fe95..afc6414310 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -1,549 +1,549 @@ -/obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete - name = "chair" - desc = "You sit in this. Either by will or force." - icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - Using Eris furniture - icon_state = "chair_preview" - color = "#666666" - base_icon = "chair" - buckle_dir = 0 - buckle_lying = 0 //force people to sit up in chairs when buckled - var/propelled = 0 // Check for fire-extinguisher-driven chairs - -/obj/structure/bed/chair/New(var/newloc, var/new_material, var/new_padding_material) - ..() - update_layer() - -/obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - if(!padding_material && istype(W, /obj/item/assembly/shock_kit)) - var/obj/item/assembly/shock_kit/SK = W - if(!SK.status) - to_chat(user, "\The [SK] is not ready to be attached!") - return - user.drop_item() - var/obj/structure/bed/chair/e_chair/E = new (src.loc, material.name) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - E.set_dir(dir) - E.part = SK - SK.loc = E - SK.master = E - qdel(src) - -/obj/structure/bed/chair/attack_tk(mob/user as mob) - if(has_buckled_mobs()) - ..() - else - rotate_clockwise() - return - -/obj/structure/bed/chair/post_buckle_mob() - update_icon() - -/obj/structure/bed/chair/update_icon() - ..() - if(has_buckled_mobs()) - var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]" - if(isnull(stool_cache[cache_key])) - var/image/I = image(icon, "[base_icon]_armrest") - I.plane = MOB_PLANE - I.layer = ABOVE_MOB_LAYER - if(padding_material) - I.color = padding_material.icon_colour - stool_cache[cache_key] = I - add_overlay(stool_cache[cache_key]) - -/obj/structure/bed/chair/proc/update_layer() - if(src.dir == NORTH) - plane = MOB_PLANE - layer = MOB_LAYER + 0.1 - else - reset_plane_and_layer() - -/obj/structure/bed/chair/set_dir() - ..() - update_layer() - if(has_buckled_mobs()) - for(var/mob/living/L as anything in buckled_mobs) - L.set_dir(dir) - -/obj/structure/bed/chair/verb/rotate_clockwise() - set name = "Rotate Chair Clockwise" - set category = "Object" - set src in oview(1) - - if(!usr || !isturf(usr.loc)) - return - if(usr.stat || usr.restrained()) - return - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - - src.set_dir(turn(src.dir, 270)) - -/obj/structure/bed/chair/verb/rotate_counterclockwise() - set name = "Rotate Chair Counter-Clockwise" - set category = "Object" - set src in oview(1) - - if(!usr || !isturf(usr.loc)) - return - if(usr.stat || usr.restrained()) - return - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - - src.set_dir(turn(src.dir, 90)) - -/obj/structure/bed/chair/shuttle - name = "chair" - icon_state = "shuttlechair" - base_icon = "shuttlechair" - color = null - applies_material_colour = 0 - -/obj/structure/bed/chair/shuttle_padded - icon_state = "shuttlechair2" - base_icon = "shuttlechair2" - color = null - applies_material_colour = 0 - -/obj/structure/bed/chair/comfy - name = "comfy chair" - desc = "It's a chair. It looks comfy." - icon_state = "comfychair" - base_icon = "comfychair" - -/obj/structure/bed/chair/comfy/update_icon() - ..() - var/image/I = image(icon, "[base_icon]_over") - I.layer = ABOVE_MOB_LAYER - I.plane = MOB_PLANE - I.color = material.icon_colour - add_overlay(I) - if(padding_material) - I = image(icon, "[base_icon]_padding_over") - I.layer = ABOVE_MOB_LAYER - I.plane = MOB_PLANE - I.color = padding_material.icon_colour - add_overlay(I) - -/obj/structure/bed/chair/comfy/brown/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, MAT_LEATHER) - -/obj/structure/bed/chair/comfy/red/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "carpet") - -/obj/structure/bed/chair/comfy/teal/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "teal") - -/obj/structure/bed/chair/comfy/black/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "black") - -/obj/structure/bed/chair/comfy/green/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "green") - -/obj/structure/bed/chair/comfy/purp/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "purple") - -/obj/structure/bed/chair/comfy/blue/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "blue") - -/obj/structure/bed/chair/comfy/beige/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "beige") - -/obj/structure/bed/chair/comfy/lime/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "lime") - -/obj/structure/bed/chair/comfy/yellow/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "yellow") - -/obj/structure/bed/chair/comfy/orange/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "orange") - -/obj/structure/bed/chair/comfy/rounded - name = "rounded chair" - desc = "It's a rounded chair. It looks comfy." - icon_state = "roundedchair" - base_icon = "roundedchair" - -/obj/structure/bed/chair/comfy/rounded/brown/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, MAT_LEATHER) - -/obj/structure/bed/chair/comfy/rounded/red/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "carpet") - -/obj/structure/bed/chair/comfy/rounded/teal/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "teal") - -/obj/structure/bed/chair/comfy/rounded/black/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "black") - -/obj/structure/bed/chair/comfy/rounded/green/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "green") - -/obj/structure/bed/chair/comfy/rounded/purple/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "purple") - -/obj/structure/bed/chair/comfy/rounded/blue/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "blue") - -/obj/structure/bed/chair/comfy/rounded/beige/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "beige") - -/obj/structure/bed/chair/comfy/rounded/lime/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "lime") - -/obj/structure/bed/chair/comfy/rounded/yellow/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "yellow") - -/obj/structure/bed/chair/comfy/rounded/orange/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc, MAT_STEEL, "orange") - -/obj/structure/bed/chair/office - anchored = FALSE - buckle_movable = 1 - -/obj/structure/bed/chair/office/update_icon() - return - -/obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER)) - return - ..() - -/obj/structure/bed/chair/office/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - - playsound(src, 'sound/effects/roll.ogg', 100, 1) - -/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction, movetime) - for(var/mob/living/occupant as anything in buckled_mobs) - occupant.buckled = null - occupant.Move(loc, direction, movetime) - occupant.buckled = src - if (occupant && (loc != occupant.loc)) - if (propelled) - for (var/mob/O in src.loc) - if (O != occupant) - Bump(O) - else - unbuckle_mob() - -/obj/structure/bed/chair/office/Bump(atom/A) - ..() - if(!has_buckled_mobs()) return - - if(propelled) - for(var/a in buckled_mobs) - var/mob/living/occupant = unbuckle_mob(a) - - var/def_zone = ran_zone() - var/blocked = occupant.run_armor_check(def_zone, "melee") - var/soaked = occupant.get_armor_soak(def_zone, "melee") - occupant.throw_at(A, 3, propelled) - occupant.apply_effect(6, STUN, blocked) - occupant.apply_effect(6, WEAKEN, blocked) - occupant.apply_effect(6, STUTTER, blocked) - occupant.apply_damage(10, BRUTE, def_zone, blocked, soaked) - playsound(src, 'sound/weapons/punch1.ogg', 50, 1, -1) - if(istype(A, /mob/living)) - var/mob/living/victim = A - def_zone = ran_zone() - blocked = victim.run_armor_check(def_zone, "melee") - soaked = victim.get_armor_soak(def_zone, "melee") - victim.apply_effect(6, STUN, blocked) - victim.apply_effect(6, WEAKEN, blocked) - victim.apply_effect(6, STUTTER, blocked) - victim.apply_damage(10, BRUTE, def_zone, blocked, soaked) - occupant.visible_message("[occupant] crashed into \the [A]!") - -/obj/structure/bed/chair/office/light - icon_state = "officechair_white" - -/obj/structure/bed/chair/office/dark - icon_state = "officechair_dark" - -// Chair types -/obj/structure/bed/chair/wood - name = "wooden chair" - desc = "Old is never too old to not be in fashion." - icon_state = "wooden_chair" - -/obj/structure/bed/chair/wood/update_icon() - return - -/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER)) - return - ..() - -/obj/structure/bed/chair/wood/New(var/newloc) - ..(newloc, "wood") - -/obj/structure/bed/chair/wood/wings - icon_state = "wooden_chair_wings" - -//sofa - -/obj/structure/bed/chair/sofa - name = "sofa" - desc = "It's a sofa. You sit on it. Possibly with someone else." - icon = 'icons/obj/sofas.dmi' - base_icon = "sofamiddle" - icon_state = "sofamiddle" - applies_material_colour = 1 - var/sofa_material = "carpet" - var/corner_piece = FALSE - -/obj/structure/bed/chair/sofa/update_icon() - if(applies_material_colour && sofa_material) - var/datum/material/color_material = get_material_by_name(sofa_material) - color = color_material.icon_colour - - if(sofa_material == "carpet") - name = "red [initial(name)]" - else - name = "[sofa_material] [initial(name)]" - -/obj/structure/bed/chair/sofa/update_layer() - // Corner east/west should be on top of mobs, any other state's north should be. - if(!corner_piece && (dir & NORTH)) - plane = MOB_PLANE - layer = MOB_LAYER + 0.1 - else - reset_plane_and_layer() - -/obj/structure/bed/chair/sofa/left - icon_state = "sofaend_left" - base_icon = "sofaend_left" - -/obj/structure/bed/chair/sofa/right - icon_state = "sofaend_right" - base_icon = "sofaend_right" - -/obj/structure/bed/chair/sofa/corner - icon_state = "sofacorner" - base_icon = "sofacorner" - corner_piece = TRUE - -/obj/structure/bed/chair/sofa/corner/update_icon() - ..() - var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]-permanent" - if(isnull(stool_cache[cache_key])) - var/image/I = image(icon, "[base_icon]_armrest") - I.plane = MOB_PLANE - I.layer = ABOVE_MOB_LAYER - if(padding_material) - I.color = padding_material.icon_colour - stool_cache[cache_key] = I - add_overlay(stool_cache[cache_key]) - -// Wooden nonsofa - no corners -/obj/structure/bed/chair/sofa/pew - name = "pew bench" - desc = "If they want you to go to church, why do they make these so uncomfortable?" - base_icon = "pewmiddle" - icon_state = "pewmiddle" - applies_material_colour = FALSE - -/obj/structure/bed/chair/sofa/pew/left - icon_state = "pewend_left" - base_icon = "pewend_left" - -/obj/structure/bed/chair/sofa/pew/right - icon_state = "pewend_right" - base_icon = "pewend_right" - -// Metal benches from Skyrat -/obj/structure/bed/chair/sofa/bench - name = "metal bench" - desc = "Almost as comfortable as waiting at a bus station for hours on end." - base_icon = "benchmiddle" - icon_state = "benchmiddle" - applies_material_colour = FALSE - color = null - var/padding_color = "#CC0000" - -/obj/structure/bed/chair/sofa/bench/New(var/newloc, var/new_material, var/new_padding_material) - ..() - var/mutable_appearance/MA - // If we're north-facing, metal goes above mob, padding overlay goes below mob. - if((dir & NORTH) && !corner_piece) - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - MA = mutable_appearance(icon, icon_state = "o[icon_state]", layer = BELOW_MOB_LAYER, plane = MOB_PLANE, appearance_flags = KEEP_APART|RESET_COLOR) - // Else just normal plane and layer for everything, which will be below mobs. - else - MA = mutable_appearance(icon, icon_state = "o[icon_state]", appearance_flags = KEEP_APART|RESET_COLOR) - MA.color = padding_color - add_overlay(MA) - -/obj/structure/bed/chair/sofa/bench/left - icon_state = "bench_left" - base_icon = "bench_left" - -/obj/structure/bed/chair/sofa/bench/right - icon_state = "bench_right" - base_icon = "bench_right" - -/obj/structure/bed/chair/sofa/bench/corner - icon_state = "benchcorner" - base_icon = "benchcorner" - //corner_piece = TRUE // These sprites work fine without the parent doing layer shenanigans - -// Corporate sofa - one color fits all -/obj/structure/bed/chair/sofa/corp - name = "black leather sofa" - desc = "How corporate!" - base_icon = "corp_sofamiddle" - icon_state = "corp_sofamiddle" - applies_material_colour = FALSE - -/obj/structure/bed/chair/sofa/corp/left - icon_state = "corp_sofaend_left" - base_icon = "corp_sofaend_left" - -/obj/structure/bed/chair/sofa/corp/right - icon_state = "corp_sofaend_right" - base_icon = "corp_sofaend_right" - -/obj/structure/bed/chair/sofa/corp/corner - icon_state = "corp_sofacorner" - base_icon = "corp_sofacorner" - corner_piece = TRUE - -//color variations -//Middle sofas first -/obj/structure/bed/chair/sofa - sofa_material = "carpet" - -/obj/structure/bed/chair/sofa/brown - sofa_material = "leather" - -/obj/structure/bed/chair/sofa/teal - sofa_material = "teal" - -/obj/structure/bed/chair/sofa/black - sofa_material = "black" - -/obj/structure/bed/chair/sofa/green - sofa_material = "green" - -/obj/structure/bed/chair/sofa/purp - sofa_material = "purple" - -/obj/structure/bed/chair/sofa/blue - sofa_material = "blue" - -/obj/structure/bed/chair/sofa/beige - sofa_material = "beige" - -/obj/structure/bed/chair/sofa/lime - sofa_material = "lime" - -/obj/structure/bed/chair/sofa/yellow - sofa_material = "yellow" - -/obj/structure/bed/chair/sofa/orange - sofa_material = "orange" - -//sofa directions - -/obj/structure/bed/chair/sofa/left - icon_state = "sofaend_left" - -/obj/structure/bed/chair/sofa/right - icon_state = "sofaend_right" - -/obj/structure/bed/chair/sofa/corner - icon_state = "sofacorner" - -/obj/structure/bed/chair/sofa/left/brown - sofa_material = "leather" - -/obj/structure/bed/chair/sofa/right/brown - sofa_material = "leather" - -/obj/structure/bed/chair/sofa/corner/brown - sofa_material = "leather" - -/obj/structure/bed/chair/sofa/left/teal - sofa_material = "teal" - -/obj/structure/bed/chair/sofa/right/teal - sofa_material = "teal" - -/obj/structure/bed/chair/sofa/corner/teal - sofa_material = "teal" - -/obj/structure/bed/chair/sofa/left/black - sofa_material = "black" - -/obj/structure/bed/chair/sofa/right/black - sofa_material = "black" - -/obj/structure/bed/chair/sofa/corner/black - sofa_material = "black" - -/obj/structure/bed/chair/sofa/left/green - sofa_material = "green" - -/obj/structure/bed/chair/sofa/right/green - sofa_material = "green" - -/obj/structure/bed/chair/sofa/corner/green - sofa_material = "green" - -/obj/structure/bed/chair/sofa/left/purp - sofa_material = "purple" - -/obj/structure/bed/chair/sofa/right/purp - sofa_material = "purple" - -/obj/structure/bed/chair/sofa/corner/purp - sofa_material = "purple" - -/obj/structure/bed/chair/sofa/left/blue - sofa_material = "blue" - -/obj/structure/bed/chair/sofa/right/blue - sofa_material = "blue" - -/obj/structure/bed/chair/sofa/corner/blue - sofa_material = "blue" - -/obj/structure/bed/chair/sofa/left/beige - sofa_material = "beige" - -/obj/structure/bed/chair/sofa/right/beige - sofa_material = "beige" - -/obj/structure/bed/chair/sofa/corner/beige - sofa_material = "beige" - -/obj/structure/bed/chair/sofa/left/lime - sofa_material = "lime" - -/obj/structure/bed/chair/sofa/right/lime - sofa_material = "lime" - -/obj/structure/bed/chair/sofa/corner/lime - sofa_material = "lime" - -/obj/structure/bed/chair/sofa/left/yellow - sofa_material = "yellow" - -/obj/structure/bed/chair/sofa/right/yellow - sofa_material = "yellow" - -/obj/structure/bed/chair/sofa/corner/yellow - sofa_material = "yellow" - -/obj/structure/bed/chair/sofa/left/orange - sofa_material = "orange" - -/obj/structure/bed/chair/sofa/right/orange - sofa_material = "orange" - -/obj/structure/bed/chair/sofa/corner/orange - sofa_material = "orange" +/obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete + name = "chair" + desc = "You sit in this. Either by will or force." + icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - Using Eris furniture + icon_state = "chair_preview" + color = "#666666" + base_icon = "chair" + buckle_dir = 0 + buckle_lying = 0 //force people to sit up in chairs when buckled + var/propelled = 0 // Check for fire-extinguisher-driven chairs + +/obj/structure/bed/chair/New(var/newloc, var/new_material, var/new_padding_material) + ..() + update_layer() + +/obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if(!padding_material && istype(W, /obj/item/assembly/shock_kit)) + var/obj/item/assembly/shock_kit/SK = W + if(!SK.status) + to_chat(user, "\The [SK] is not ready to be attached!") + return + user.drop_item() + var/obj/structure/bed/chair/e_chair/E = new (src.loc, material.name) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + E.set_dir(dir) + E.part = SK + SK.loc = E + SK.master = E + qdel(src) + +/obj/structure/bed/chair/attack_tk(mob/user as mob) + if(has_buckled_mobs()) + ..() + else + rotate_clockwise() + return + +/obj/structure/bed/chair/post_buckle_mob() + update_icon() + +/obj/structure/bed/chair/update_icon() + ..() + if(has_buckled_mobs()) + var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]" + if(isnull(stool_cache[cache_key])) + var/image/I = image(icon, "[base_icon]_armrest") + I.plane = MOB_PLANE + I.layer = ABOVE_MOB_LAYER + if(padding_material) + I.color = padding_material.icon_colour + stool_cache[cache_key] = I + add_overlay(stool_cache[cache_key]) + +/obj/structure/bed/chair/proc/update_layer() + if(src.dir == NORTH) + plane = MOB_PLANE + layer = MOB_LAYER + 0.1 + else + reset_plane_and_layer() + +/obj/structure/bed/chair/set_dir() + ..() + update_layer() + if(has_buckled_mobs()) + for(var/mob/living/L as anything in buckled_mobs) + L.set_dir(dir) + +/obj/structure/bed/chair/verb/rotate_clockwise() + set name = "Rotate Chair Clockwise" + set category = "Object" + set src in oview(1) + + if(!usr || !isturf(usr.loc)) + return + if(usr.stat || usr.restrained()) + return + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + + src.set_dir(turn(src.dir, 270)) + +/obj/structure/bed/chair/verb/rotate_counterclockwise() + set name = "Rotate Chair Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if(!usr || !isturf(usr.loc)) + return + if(usr.stat || usr.restrained()) + return + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + + src.set_dir(turn(src.dir, 90)) + +/obj/structure/bed/chair/shuttle + name = "chair" + icon_state = "shuttlechair" + base_icon = "shuttlechair" + color = null + applies_material_colour = 0 + +/obj/structure/bed/chair/shuttle_padded + icon_state = "shuttlechair2" + base_icon = "shuttlechair2" + color = null + applies_material_colour = 0 + +/obj/structure/bed/chair/comfy + name = "comfy chair" + desc = "It's a chair. It looks comfy." + icon_state = "comfychair" + base_icon = "comfychair" + +/obj/structure/bed/chair/comfy/update_icon() + ..() + var/image/I = image(icon, "[base_icon]_over") + I.layer = ABOVE_MOB_LAYER + I.plane = MOB_PLANE + I.color = material.icon_colour + add_overlay(I) + if(padding_material) + I = image(icon, "[base_icon]_padding_over") + I.layer = ABOVE_MOB_LAYER + I.plane = MOB_PLANE + I.color = padding_material.icon_colour + add_overlay(I) + +/obj/structure/bed/chair/comfy/brown/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, MAT_LEATHER) + +/obj/structure/bed/chair/comfy/red/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "carpet") + +/obj/structure/bed/chair/comfy/teal/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "teal") + +/obj/structure/bed/chair/comfy/black/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "black") + +/obj/structure/bed/chair/comfy/green/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "green") + +/obj/structure/bed/chair/comfy/purp/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "purple") + +/obj/structure/bed/chair/comfy/blue/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "blue") + +/obj/structure/bed/chair/comfy/beige/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "beige") + +/obj/structure/bed/chair/comfy/lime/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "lime") + +/obj/structure/bed/chair/comfy/yellow/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "yellow") + +/obj/structure/bed/chair/comfy/orange/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "orange") + +/obj/structure/bed/chair/comfy/rounded + name = "rounded chair" + desc = "It's a rounded chair. It looks comfy." + icon_state = "roundedchair" + base_icon = "roundedchair" + +/obj/structure/bed/chair/comfy/rounded/brown/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, MAT_LEATHER) + +/obj/structure/bed/chair/comfy/rounded/red/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "carpet") + +/obj/structure/bed/chair/comfy/rounded/teal/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "teal") + +/obj/structure/bed/chair/comfy/rounded/black/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "black") + +/obj/structure/bed/chair/comfy/rounded/green/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "green") + +/obj/structure/bed/chair/comfy/rounded/purple/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "purple") + +/obj/structure/bed/chair/comfy/rounded/blue/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "blue") + +/obj/structure/bed/chair/comfy/rounded/beige/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "beige") + +/obj/structure/bed/chair/comfy/rounded/lime/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "lime") + +/obj/structure/bed/chair/comfy/rounded/yellow/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "yellow") + +/obj/structure/bed/chair/comfy/rounded/orange/New(var/newloc, var/new_material, var/new_padding_material) + ..(newloc, MAT_STEEL, "orange") + +/obj/structure/bed/chair/office + anchored = FALSE + buckle_movable = 1 + +/obj/structure/bed/chair/office/update_icon() + return + +/obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER)) + return + ..() + +/obj/structure/bed/chair/office/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + + playsound(src, 'sound/effects/roll.ogg', 100, 1) + +/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction, movetime) + for(var/mob/living/occupant as anything in buckled_mobs) + occupant.buckled = null + occupant.Move(loc, direction, movetime) + occupant.buckled = src + if (occupant && (loc != occupant.loc)) + if (propelled) + for (var/mob/O in src.loc) + if (O != occupant) + Bump(O) + else + unbuckle_mob() + +/obj/structure/bed/chair/office/Bump(atom/A) + ..() + if(!has_buckled_mobs()) return + + if(propelled) + for(var/a in buckled_mobs) + var/mob/living/occupant = unbuckle_mob(a) + + var/def_zone = ran_zone() + var/blocked = occupant.run_armor_check(def_zone, "melee") + var/soaked = occupant.get_armor_soak(def_zone, "melee") + occupant.throw_at(A, 3, propelled) + occupant.apply_effect(6, STUN, blocked) + occupant.apply_effect(6, WEAKEN, blocked) + occupant.apply_effect(6, STUTTER, blocked) + occupant.apply_damage(10, BRUTE, def_zone, blocked, soaked) + playsound(src, 'sound/weapons/punch1.ogg', 50, 1, -1) + if(istype(A, /mob/living)) + var/mob/living/victim = A + def_zone = ran_zone() + blocked = victim.run_armor_check(def_zone, "melee") + soaked = victim.get_armor_soak(def_zone, "melee") + victim.apply_effect(6, STUN, blocked) + victim.apply_effect(6, WEAKEN, blocked) + victim.apply_effect(6, STUTTER, blocked) + victim.apply_damage(10, BRUTE, def_zone, blocked, soaked) + occupant.visible_message("[occupant] crashed into \the [A]!") + +/obj/structure/bed/chair/office/light + icon_state = "officechair_white" + +/obj/structure/bed/chair/office/dark + icon_state = "officechair_dark" + +// Chair types +/obj/structure/bed/chair/wood + name = "wooden chair" + desc = "Old is never too old to not be in fashion." + icon_state = "wooden_chair" + +/obj/structure/bed/chair/wood/update_icon() + return + +/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/stack) || W.has_tool_quality(TOOL_WIRECUTTER)) + return + ..() + +/obj/structure/bed/chair/wood/New(var/newloc) + ..(newloc, "wood") + +/obj/structure/bed/chair/wood/wings + icon_state = "wooden_chair_wings" + +//sofa + +/obj/structure/bed/chair/sofa + name = "sofa" + desc = "It's a sofa. You sit on it. Possibly with someone else." + icon = 'icons/obj/sofas.dmi' + base_icon = "sofamiddle" + icon_state = "sofamiddle" + applies_material_colour = 1 + var/sofa_material = "carpet" + var/corner_piece = FALSE + +/obj/structure/bed/chair/sofa/update_icon() + if(applies_material_colour && sofa_material) + var/datum/material/color_material = get_material_by_name(sofa_material) + color = color_material.icon_colour + + if(sofa_material == "carpet") + name = "red [initial(name)]" + else + name = "[sofa_material] [initial(name)]" + +/obj/structure/bed/chair/sofa/update_layer() + // Corner east/west should be on top of mobs, any other state's north should be. + if(!corner_piece && (dir & NORTH)) + plane = MOB_PLANE + layer = MOB_LAYER + 0.1 + else + reset_plane_and_layer() + +/obj/structure/bed/chair/sofa/left + icon_state = "sofaend_left" + base_icon = "sofaend_left" + +/obj/structure/bed/chair/sofa/right + icon_state = "sofaend_right" + base_icon = "sofaend_right" + +/obj/structure/bed/chair/sofa/corner + icon_state = "sofacorner" + base_icon = "sofacorner" + corner_piece = TRUE + +/obj/structure/bed/chair/sofa/corner/update_icon() + ..() + var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]-permanent" + if(isnull(stool_cache[cache_key])) + var/image/I = image(icon, "[base_icon]_armrest") + I.plane = MOB_PLANE + I.layer = ABOVE_MOB_LAYER + if(padding_material) + I.color = padding_material.icon_colour + stool_cache[cache_key] = I + add_overlay(stool_cache[cache_key]) + +// Wooden nonsofa - no corners +/obj/structure/bed/chair/sofa/pew + name = "pew bench" + desc = "If they want you to go to church, why do they make these so uncomfortable?" + base_icon = "pewmiddle" + icon_state = "pewmiddle" + applies_material_colour = FALSE + +/obj/structure/bed/chair/sofa/pew/left + icon_state = "pewend_left" + base_icon = "pewend_left" + +/obj/structure/bed/chair/sofa/pew/right + icon_state = "pewend_right" + base_icon = "pewend_right" + +// Metal benches from Skyrat +/obj/structure/bed/chair/sofa/bench + name = "metal bench" + desc = "Almost as comfortable as waiting at a bus station for hours on end." + base_icon = "benchmiddle" + icon_state = "benchmiddle" + applies_material_colour = FALSE + color = null + var/padding_color = "#CC0000" + +/obj/structure/bed/chair/sofa/bench/New(var/newloc, var/new_material, var/new_padding_material) + ..() + var/mutable_appearance/MA + // If we're north-facing, metal goes above mob, padding overlay goes below mob. + if((dir & NORTH) && !corner_piece) + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + MA = mutable_appearance(icon, icon_state = "o[icon_state]", layer = BELOW_MOB_LAYER, plane = MOB_PLANE, appearance_flags = KEEP_APART|RESET_COLOR) + // Else just normal plane and layer for everything, which will be below mobs. + else + MA = mutable_appearance(icon, icon_state = "o[icon_state]", appearance_flags = KEEP_APART|RESET_COLOR) + MA.color = padding_color + add_overlay(MA) + +/obj/structure/bed/chair/sofa/bench/left + icon_state = "bench_left" + base_icon = "bench_left" + +/obj/structure/bed/chair/sofa/bench/right + icon_state = "bench_right" + base_icon = "bench_right" + +/obj/structure/bed/chair/sofa/bench/corner + icon_state = "benchcorner" + base_icon = "benchcorner" + //corner_piece = TRUE // These sprites work fine without the parent doing layer shenanigans + +// Corporate sofa - one color fits all +/obj/structure/bed/chair/sofa/corp + name = "black leather sofa" + desc = "How corporate!" + base_icon = "corp_sofamiddle" + icon_state = "corp_sofamiddle" + applies_material_colour = FALSE + +/obj/structure/bed/chair/sofa/corp/left + icon_state = "corp_sofaend_left" + base_icon = "corp_sofaend_left" + +/obj/structure/bed/chair/sofa/corp/right + icon_state = "corp_sofaend_right" + base_icon = "corp_sofaend_right" + +/obj/structure/bed/chair/sofa/corp/corner + icon_state = "corp_sofacorner" + base_icon = "corp_sofacorner" + corner_piece = TRUE + +//color variations +//Middle sofas first +/obj/structure/bed/chair/sofa + sofa_material = "carpet" + +/obj/structure/bed/chair/sofa/brown + sofa_material = "leather" + +/obj/structure/bed/chair/sofa/teal + sofa_material = "teal" + +/obj/structure/bed/chair/sofa/black + sofa_material = "black" + +/obj/structure/bed/chair/sofa/green + sofa_material = "green" + +/obj/structure/bed/chair/sofa/purp + sofa_material = "purple" + +/obj/structure/bed/chair/sofa/blue + sofa_material = "blue" + +/obj/structure/bed/chair/sofa/beige + sofa_material = "beige" + +/obj/structure/bed/chair/sofa/lime + sofa_material = "lime" + +/obj/structure/bed/chair/sofa/yellow + sofa_material = "yellow" + +/obj/structure/bed/chair/sofa/orange + sofa_material = "orange" + +//sofa directions + +/obj/structure/bed/chair/sofa/left + icon_state = "sofaend_left" + +/obj/structure/bed/chair/sofa/right + icon_state = "sofaend_right" + +/obj/structure/bed/chair/sofa/corner + icon_state = "sofacorner" + +/obj/structure/bed/chair/sofa/left/brown + sofa_material = "leather" + +/obj/structure/bed/chair/sofa/right/brown + sofa_material = "leather" + +/obj/structure/bed/chair/sofa/corner/brown + sofa_material = "leather" + +/obj/structure/bed/chair/sofa/left/teal + sofa_material = "teal" + +/obj/structure/bed/chair/sofa/right/teal + sofa_material = "teal" + +/obj/structure/bed/chair/sofa/corner/teal + sofa_material = "teal" + +/obj/structure/bed/chair/sofa/left/black + sofa_material = "black" + +/obj/structure/bed/chair/sofa/right/black + sofa_material = "black" + +/obj/structure/bed/chair/sofa/corner/black + sofa_material = "black" + +/obj/structure/bed/chair/sofa/left/green + sofa_material = "green" + +/obj/structure/bed/chair/sofa/right/green + sofa_material = "green" + +/obj/structure/bed/chair/sofa/corner/green + sofa_material = "green" + +/obj/structure/bed/chair/sofa/left/purp + sofa_material = "purple" + +/obj/structure/bed/chair/sofa/right/purp + sofa_material = "purple" + +/obj/structure/bed/chair/sofa/corner/purp + sofa_material = "purple" + +/obj/structure/bed/chair/sofa/left/blue + sofa_material = "blue" + +/obj/structure/bed/chair/sofa/right/blue + sofa_material = "blue" + +/obj/structure/bed/chair/sofa/corner/blue + sofa_material = "blue" + +/obj/structure/bed/chair/sofa/left/beige + sofa_material = "beige" + +/obj/structure/bed/chair/sofa/right/beige + sofa_material = "beige" + +/obj/structure/bed/chair/sofa/corner/beige + sofa_material = "beige" + +/obj/structure/bed/chair/sofa/left/lime + sofa_material = "lime" + +/obj/structure/bed/chair/sofa/right/lime + sofa_material = "lime" + +/obj/structure/bed/chair/sofa/corner/lime + sofa_material = "lime" + +/obj/structure/bed/chair/sofa/left/yellow + sofa_material = "yellow" + +/obj/structure/bed/chair/sofa/right/yellow + sofa_material = "yellow" + +/obj/structure/bed/chair/sofa/corner/yellow + sofa_material = "yellow" + +/obj/structure/bed/chair/sofa/left/orange + sofa_material = "orange" + +/obj/structure/bed/chair/sofa/right/orange + sofa_material = "orange" + +/obj/structure/bed/chair/sofa/corner/orange + sofa_material = "orange" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm index 56ae497c5f..51a648eed0 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm @@ -1,37 +1,37 @@ - -/obj/structure/bed/chair/comfy // Making the premade chairs not have the basic chair visible, sometime make the constructed ones work as well - icon = 'icons/obj/furniture_ch.dmi' - icon_state = "comfychair" - base_icon = "comfychair" - -/obj/structure/bed/chair/oldsofa //Original Paradise port kept in the event players like these couches. - name = "sofa" - desc = "It's a couch. It looks kinda dingy." - icon = 'icons/obj/furniture_ch.dmi' - icon_state = "sofamiddleOLD" - base_icon = "sofamiddleOLD" - applies_material_colour = 0 - -/obj/structure/bed/chair/oldsofa/left - icon_state = "sofaend_leftOLD" - base_icon = "sofaend_leftOLD" - -/obj/structure/bed/chair/oldsofa/right - icon_state = "sofaend_rightOLD" - base_icon = "sofaend_rightOLD" - -/obj/structure/bed/chair/oldsofa/corner - icon_state = "sofacornerOLD" - base_icon = "sofacornerOLD" - -/obj/structure/bed/chair/sofa/sif_ora/Initialize(var/newloc,var/newmaterial) - ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) - -/obj/structure/bed/chair/sofa/left/sif_ora/Initialize(var/newloc,var/newmaterial) - ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) - -/obj/structure/bed/chair/sofa/right/sif_ora/Initialize(var/newloc,var/newmaterial) - ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) - -/obj/structure/bed/chair/sofa/corner/sif_ora/Initialize(var/newloc,var/newmaterial) + +/obj/structure/bed/chair/comfy // Making the premade chairs not have the basic chair visible, sometime make the constructed ones work as well + icon = 'icons/obj/furniture_ch.dmi' + icon_state = "comfychair" + base_icon = "comfychair" + +/obj/structure/bed/chair/oldsofa //Original Paradise port kept in the event players like these couches. + name = "sofa" + desc = "It's a couch. It looks kinda dingy." + icon = 'icons/obj/furniture_ch.dmi' + icon_state = "sofamiddleOLD" + base_icon = "sofamiddleOLD" + applies_material_colour = 0 + +/obj/structure/bed/chair/oldsofa/left + icon_state = "sofaend_leftOLD" + base_icon = "sofaend_leftOLD" + +/obj/structure/bed/chair/oldsofa/right + icon_state = "sofaend_rightOLD" + base_icon = "sofaend_rightOLD" + +/obj/structure/bed/chair/oldsofa/corner + icon_state = "sofacornerOLD" + base_icon = "sofacornerOLD" + +/obj/structure/bed/chair/sofa/sif_ora/Initialize(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/left/sif_ora/Initialize(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/right/sif_ora/Initialize(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/corner/sif_ora/Initialize(var/newloc,var/newmaterial) ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) \ No newline at end of file diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index fcbfe98230..2387293584 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -1,122 +1,122 @@ -#define TANK_DISPENSER_CAPACITY 10 - -/obj/structure/dispenser - name = "tank storage unit" - desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "dispenser" - density = TRUE - anchored = TRUE - w_class = ITEMSIZE_HUGE - var/oxygentanks = TANK_DISPENSER_CAPACITY - var/phorontanks = TANK_DISPENSER_CAPACITY - - -/obj/structure/dispenser/oxygen - phorontanks = 0 - -/obj/structure/dispenser/phoron - oxygentanks = 0 - - -/obj/structure/dispenser/Initialize() - . = ..() - for(var/i in 1 to oxygentanks) - new /obj/item/weapon/tank/oxygen(src) - for(var/i in 1 to phorontanks) - new /obj/item/weapon/tank/phoron(src) - update_icon() - -/obj/structure/dispenser/update_icon() - cut_overlays() - switch(oxygentanks) - if(1 to 3) add_overlay("oxygen-[oxygentanks]") - if(4 to INFINITY) add_overlay("oxygen-4") - switch(phorontanks) - if(1 to 4) add_overlay("phoron-[phorontanks]") - if(5 to INFINITY) add_overlay("phoron-5") - -/obj/structure/dispenser/attack_ai(mob/user) - // This looks silly, but robots also call attack_ai, and they're allowed physical state stuff. - if(user.Adjacent(src)) - return attack_hand(user) - ..() - -/obj/structure/dispenser/attack_hand(mob/user) - tgui_interact(user) - -/obj/structure/dispenser/tgui_state(mob/user) - return GLOB.tgui_physical_state - -/obj/structure/dispenser/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TankDispenser", name) - ui.open() - -/obj/structure/dispenser/tgui_data(mob/user) - var/list/data = list() - data["oxygen"] = oxygentanks - data["plasma"] = phorontanks - - return data - -/obj/structure/dispenser/attackby(obj/item/I, mob/user) - var/full - if(istype(I, /obj/item/weapon/tank/oxygen) || istype(I, /obj/item/weapon/tank/air) || istype(I, /obj/item/weapon/tank/anesthetic)) - if(oxygentanks < TANK_DISPENSER_CAPACITY) - oxygentanks++ - else - full = TRUE - else if(istype(I, /obj/item/weapon/tank/phoron)) - if(phorontanks < TANK_DISPENSER_CAPACITY) - phorontanks++ - else - full = TRUE - else if(I.has_tool_quality(TOOL_WRENCH)) - if(anchored) - to_chat(user, "You lean down and unwrench [src].") - anchored = FALSE - else - to_chat(user, "You wrench [src] into place.") - anchored = TRUE - return - else if(user.a_intent != I_HURT) - to_chat(user, "[I] does not fit into [src].") - return - else - return ..() - - if(full) - to_chat(user, "[src] can't hold any more of [I].") - return - - if(!user.unEquip(I, target = src)) - return - to_chat(user, "You put [I] in [src].") - update_icon() - - -/obj/structure/dispenser/tgui_act(action, params) - if(..()) - return - switch(action) - if("plasma") - var/obj/item/weapon/tank/phoron/tank = locate() in src - if(tank && Adjacent(usr)) - usr.put_in_hands(tank) - phorontanks-- - . = TRUE - playsound(src, 'sound/items/drop/gascan.ogg', 100, 1, 1) - if("oxygen") - var/obj/item/weapon/tank/tank = null - for(var/obj/item/weapon/tank/T in src) - if(istype(T, /obj/item/weapon/tank/oxygen) || istype(T, /obj/item/weapon/tank/air) || istype(T, /obj/item/weapon/tank/anesthetic)) - tank = T - break - if(tank && Adjacent(usr)) - usr.put_in_hands(tank) - oxygentanks-- - . = TRUE - playsound(src, 'sound/items/drop/gascan.ogg', 100, 1, 1) +#define TANK_DISPENSER_CAPACITY 10 + +/obj/structure/dispenser + name = "tank storage unit" + desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "dispenser" + density = TRUE + anchored = TRUE + w_class = ITEMSIZE_HUGE + var/oxygentanks = TANK_DISPENSER_CAPACITY + var/phorontanks = TANK_DISPENSER_CAPACITY + + +/obj/structure/dispenser/oxygen + phorontanks = 0 + +/obj/structure/dispenser/phoron + oxygentanks = 0 + + +/obj/structure/dispenser/Initialize() + . = ..() + for(var/i in 1 to oxygentanks) + new /obj/item/weapon/tank/oxygen(src) + for(var/i in 1 to phorontanks) + new /obj/item/weapon/tank/phoron(src) + update_icon() + +/obj/structure/dispenser/update_icon() + cut_overlays() + switch(oxygentanks) + if(1 to 3) add_overlay("oxygen-[oxygentanks]") + if(4 to INFINITY) add_overlay("oxygen-4") + switch(phorontanks) + if(1 to 4) add_overlay("phoron-[phorontanks]") + if(5 to INFINITY) add_overlay("phoron-5") + +/obj/structure/dispenser/attack_ai(mob/user) + // This looks silly, but robots also call attack_ai, and they're allowed physical state stuff. + if(user.Adjacent(src)) + return attack_hand(user) + ..() + +/obj/structure/dispenser/attack_hand(mob/user) + tgui_interact(user) + +/obj/structure/dispenser/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/obj/structure/dispenser/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TankDispenser", name) + ui.open() + +/obj/structure/dispenser/tgui_data(mob/user) + var/list/data = list() + data["oxygen"] = oxygentanks + data["plasma"] = phorontanks + + return data + +/obj/structure/dispenser/attackby(obj/item/I, mob/user) + var/full + if(istype(I, /obj/item/weapon/tank/oxygen) || istype(I, /obj/item/weapon/tank/air) || istype(I, /obj/item/weapon/tank/anesthetic)) + if(oxygentanks < TANK_DISPENSER_CAPACITY) + oxygentanks++ + else + full = TRUE + else if(istype(I, /obj/item/weapon/tank/phoron)) + if(phorontanks < TANK_DISPENSER_CAPACITY) + phorontanks++ + else + full = TRUE + else if(I.has_tool_quality(TOOL_WRENCH)) + if(anchored) + to_chat(user, "You lean down and unwrench [src].") + anchored = FALSE + else + to_chat(user, "You wrench [src] into place.") + anchored = TRUE + return + else if(user.a_intent != I_HURT) + to_chat(user, "[I] does not fit into [src].") + return + else + return ..() + + if(full) + to_chat(user, "[src] can't hold any more of [I].") + return + + if(!user.unEquip(I, target = src)) + return + to_chat(user, "You put [I] in [src].") + update_icon() + + +/obj/structure/dispenser/tgui_act(action, params) + if(..()) + return + switch(action) + if("plasma") + var/obj/item/weapon/tank/phoron/tank = locate() in src + if(tank && Adjacent(usr)) + usr.put_in_hands(tank) + phorontanks-- + . = TRUE + playsound(src, 'sound/items/drop/gascan.ogg', 100, 1, 1) + if("oxygen") + var/obj/item/weapon/tank/tank = null + for(var/obj/item/weapon/tank/T in src) + if(istype(T, /obj/item/weapon/tank/oxygen) || istype(T, /obj/item/weapon/tank/air) || istype(T, /obj/item/weapon/tank/anesthetic)) + tank = T + break + if(tank && Adjacent(usr)) + usr.put_in_hands(tank) + oxygentanks-- + . = TRUE + playsound(src, 'sound/items/drop/gascan.ogg', 100, 1, 1) update_icon() \ No newline at end of file diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 0e29fed20b..7655634600 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -1,52 +1,52 @@ -// Basically they are for the firing range -/obj/structure/target_stake - name = "target stake" - desc = "A thin platform with negatively-magnetized wheels." - icon = 'icons/obj/objects.dmi' - icon_state = "target_stake" - density = TRUE - w_class = ITEMSIZE_HUGE - var/obj/item/target/pinned_target // the current pinned target - -/obj/structure/target_stake/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - // Move the pinned target along with the stake - if(pinned_target in view(3, src)) - pinned_target.forceMove(loc) - - else // Sanity check: if the pinned target can't be found in immediate view - pinned_target = null - density = TRUE - -/obj/structure/target_stake/attackby(obj/item/W as obj, mob/user as mob) - // Putting objects on the stake. Most importantly, targets - if(pinned_target) - return // get rid of that pinned target first! - - if(istype(W, /obj/item/target)) - density = FALSE - W.density = TRUE - user.remove_from_mob(W) - W.loc = loc - W.layer = ABOVE_JUNK_LAYER - pinned_target = W - to_chat(user, "You slide the target into the stake.") - return - -/obj/structure/target_stake/attack_hand(mob/user as mob) - // taking pinned targets off! - if(pinned_target) - density = TRUE - pinned_target.density = FALSE - pinned_target.layer = OBJ_LAYER - - pinned_target.loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(pinned_target) - to_chat(user, "You take the target out of the stake.") - else - pinned_target.loc = get_turf(user) - to_chat(user, "You take the target out of the stake.") - - pinned_target = null +// Basically they are for the firing range +/obj/structure/target_stake + name = "target stake" + desc = "A thin platform with negatively-magnetized wheels." + icon = 'icons/obj/objects.dmi' + icon_state = "target_stake" + density = TRUE + w_class = ITEMSIZE_HUGE + var/obj/item/target/pinned_target // the current pinned target + +/obj/structure/target_stake/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + // Move the pinned target along with the stake + if(pinned_target in view(3, src)) + pinned_target.forceMove(loc) + + else // Sanity check: if the pinned target can't be found in immediate view + pinned_target = null + density = TRUE + +/obj/structure/target_stake/attackby(obj/item/W as obj, mob/user as mob) + // Putting objects on the stake. Most importantly, targets + if(pinned_target) + return // get rid of that pinned target first! + + if(istype(W, /obj/item/target)) + density = FALSE + W.density = TRUE + user.remove_from_mob(W) + W.loc = loc + W.layer = ABOVE_JUNK_LAYER + pinned_target = W + to_chat(user, "You slide the target into the stake.") + return + +/obj/structure/target_stake/attack_hand(mob/user as mob) + // taking pinned targets off! + if(pinned_target) + density = TRUE + pinned_target.density = FALSE + pinned_target.layer = OBJ_LAYER + + pinned_target.loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(pinned_target) + to_chat(user, "You take the target out of the stake.") + else + pinned_target.loc = get_turf(user) + to_chat(user, "You take the target out of the stake.") + + pinned_target = null diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index cf2064c7f3..15eed997f1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -1,706 +1,706 @@ -/obj/structure/window - name = "window" - desc = "A window." - icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons - density = TRUE - can_atmos_pass = ATMOS_PASS_PROC - w_class = ITEMSIZE_NORMAL - - layer = WINDOW_LAYER - pressure_resistance = 4*ONE_ATMOSPHERE - anchored = TRUE - flags = ON_BORDER - var/maxhealth = 14.0 - var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire - var/damage_per_fire_tick = 2.0 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. - var/health - var/force_threshold = 0 - var/ini_dir = null - var/state = 2 - var/reinf = 0 - var/basestate - var/shardtype = /obj/item/weapon/material/shard - var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass. - var/silicate = 0 // number of units of silicate - var/fulltile = FALSE // Set to true on full-tile variants. - -/obj/structure/window/examine(mob/user) - . = ..() - - if(health == maxhealth) - . += "It looks fully intact." - else - var/perc = health / maxhealth - if(perc > 0.75) - . += "It has a few cracks." - else if(perc > 0.5) - . += "It looks slightly damaged." - else if(perc > 0.25) - . += "It looks moderately damaged." - else - . += "It looks heavily damaged." - if(silicate) - if (silicate < 30) - . += "It has a thin layer of silicate." - else if (silicate < 70) - . += "It is covered in silicate." - else - . += "There is a thick layer of silicate covering it." - -/obj/structure/window/examine_icon() - return icon(icon=initial(icon),icon_state=initial(icon_state)) - -/obj/structure/window/take_damage(var/damage = 0, var/sound_effect = 1) - var/initialhealth = health - - if(silicate) - damage = damage * (1 - silicate / 200) - - health = max(0, health - damage) - - if(health <= 0) - shatter() - else - if(sound_effect) - playsound(src, 'sound/effects/Glasshit.ogg', 100, 1) - if(health < maxhealth / 4 && initialhealth >= maxhealth / 4) - visible_message("[src] looks like it's about to shatter!" ) - update_icon() - else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2) - visible_message("[src] looks seriously damaged!" ) - update_icon() - else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4) - visible_message("Cracks begin to appear in [src]!" ) - update_icon() - return - -/obj/structure/window/proc/apply_silicate(var/amount) - if(health < maxhealth) // Mend the damage - health = min(health + amount * 3, maxhealth) - if(health == maxhealth) - visible_message("[src] looks fully repaired." ) - else // Reinforce - silicate = min(silicate + amount, 100) - updateSilicate() - -/obj/structure/window/proc/updateSilicate() - cut_overlays() - update_icon() - - var/image/img = image(src) - img.color = "#ffffff" - img.alpha = silicate * 255 / 100 - add_overlay(img) - -/obj/structure/window/proc/shatter(var/display_message = 1) - playsound(src, "shatter", 70, 1) - if(display_message) - visible_message("[src] shatters!") - new shardtype(loc) - if(reinf) - new /obj/item/stack/rods(loc) - if(is_fulltile()) - new shardtype(loc) //todo pooling? - if(reinf) - new /obj/item/stack/rods(loc) - qdel(src) - return - - -/obj/structure/window/bullet_act(var/obj/item/projectile/Proj) - - var/proj_damage = Proj.get_structure_damage() - if(!proj_damage) return - - ..() - take_damage(proj_damage) - return - - -/obj/structure/window/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - shatter(0) - return - if(3.0) - if(prob(50)) - shatter(0) - return - -/obj/structure/window/blob_act() - take_damage(50) - -/obj/structure/window/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return TRUE - if(is_fulltile()) - return FALSE //full tile window, you can't move into it! - if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir - return !density - else - return TRUE - -/obj/structure/window/Uncross(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return TRUE - if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir - return !density - else - return TRUE - -/obj/structure/window/CanZASPass(turf/T, is_zone) - if(is_fulltile() || get_dir(T, loc) == turn(dir, 180)) // Make sure we're handling the border correctly. - return !anchored // If it's anchored, it'll block air. - return TRUE // Don't stop airflow from the other sides. - -/obj/structure/window/hitby(AM as mob|obj) - ..() - visible_message("[src] was hit by [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 40 - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce - if(reinf) tforce *= 0.25 - if(health - tforce <= 7 && !reinf) - anchored = FALSE - update_verbs() - update_nearby_icons() - step(src, get_dir(AM, src)) - take_damage(tforce) - -/obj/structure/window/attack_tk(mob/user as mob) - user.visible_message("Something knocks on [src].") - playsound(src, 'sound/effects/Glasshit.ogg', 50, 1) - -/obj/structure/window/attack_hand(mob/user as mob) - user.setClickCooldown(user.get_attack_speed()) - if(HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) - user.visible_message("[user] smashes through [src]!") - user.do_attack_animation(src) - shatter() - - else if (user.a_intent == I_HURT) - - if (istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_generic(H,25) - return - - playsound(src, 'sound/effects/glassknock.ogg', 80, 1) - user.do_attack_animation(src) - user.visible_message("\The [user] bangs against \the [src]!", - "You bang against \the [src]!", - "You hear a banging sound.") - else - playsound(src, 'sound/effects/glassknock.ogg', 80, 1) - user.visible_message("[user.name] knocks on the [src.name].", - "You knock on the [src.name].", - "You hear a knocking sound.") - return - -/obj/structure/window/attack_generic(var/mob/user, var/damage) - user.setClickCooldown(user.get_attack_speed()) - if(!damage) - return - if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) - visible_message("[user] smashes into [src]!") - if(reinf) - damage = damage / 2 - take_damage(damage) - else - visible_message("\The [user] bonks \the [src] harmlessly.") - user.do_attack_animation(src) - return 1 - -/obj/structure/window/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) return//I really wish I did not need this - - // Fixing. - if(W.has_tool_quality(TOOL_WELDER) && user.a_intent == I_HELP) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(health < maxhealth) - if(WT.remove_fuel(1 ,user)) - to_chat(user, "You begin repairing [src]...") - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 40 * WT.toolspeed, target = src)) - health = maxhealth - // playsound(src, 'sound/items/Welder.ogg', 50, 1) - update_icon() - to_chat(user, "You repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - - // Slamming. - if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) - var/obj/item/weapon/grab/G = W - if(istype(G.affecting,/mob/living)) - var/mob/living/M = G.affecting - var/state = G.state - qdel(W) //gotta delete it here because if window breaks, it won't get deleted - switch (state) - if(1) - M.visible_message("[user] slams [M] against \the [src]!") - M.apply_damage(7) - hit(10) - if(2) - M.visible_message("[user] bashes [M] against \the [src]!") - if (prob(50)) - M.Weaken(1) - M.apply_damage(10) - hit(25) - if(3) - M.visible_message("[user] crushes [M] against \the [src]!") - M.Weaken(5) - M.apply_damage(20) - hit(50) - return - - if(W.flags & NOBLUDGEON) return - - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(reinf && state >= 1) - state = 3 - state - update_nearby_icons() - playsound(src, W.usesound, 75, 1) - to_chat(user, "You have [state == 1 ? "un" : ""]fastened the window [state ? "from" : "to"] the frame.") - else if(reinf && state == 0) - anchored = !anchored - update_nearby_tiles(need_rebuild=1) - update_nearby_icons() - update_verbs() - playsound(src, W.usesound, 75, 1) - to_chat(user, "You have [anchored ? "" : "un"]fastened the frame [anchored ? "to" : "from"] the floor.") - else if(!reinf) - anchored = !anchored - update_nearby_tiles(need_rebuild=1) - update_nearby_icons() - update_verbs() - playsound(src, W.usesound, 75, 1) - to_chat(user, "You have [anchored ? "" : "un"]fastened the window [anchored ? "to" : "from"] the floor.") - else if(W.has_tool_quality(TOOL_CROWBAR) && reinf && state <= 1) - state = 1 - state - playsound(src, W.usesound, 75, 1) - to_chat(user, "You have pried the window [state ? "into" : "out of"] the frame.") - else if(W.has_tool_quality(TOOL_WRENCH) && !anchored && (!state || !reinf)) - if(!glasstype) - to_chat(user, "You're not sure how to dismantle \the [src] properly.") - else - playsound(src, W.usesound, 75, 1) - visible_message("[user] dismantles \the [src].") - var/obj/item/stack/material/mats = new glasstype(loc) - if(is_fulltile()) - mats.set_amount(4) - qdel(src) - else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized)) - var/obj/item/stack/cable_coil/C = W - if (C.use(1)) - playsound(src, 'sound/effects/sparks1.ogg', 75, 1) - user.visible_message( \ - "\The [user] begins to wire \the [src] for electrochromic tinting.", \ - "You begin to wire \the [src] for electrochromic tinting.", \ - "You hear sparks.") - if(do_after(user, 20 * C.toolspeed, src) && state == 0) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - var/obj/structure/window/reinforced/polarized/P = new(loc, dir) - if(is_fulltile()) - P.fulltile = TRUE - P.icon_state = "fwindow" - P.maxhealth = maxhealth - P.health = health - P.state = state - P.anchored = anchored - qdel(src) - else if(istype(W,/obj/item/frame) && anchored) - var/obj/item/frame/F = W - F.try_build(src, user) - else - user.setClickCooldown(user.get_attack_speed(W)) - if(W.damtype == BRUTE || W.damtype == BURN) - user.do_attack_animation(src) - hit(W.force) - if(health <= 7) - anchored = FALSE - update_nearby_icons() - step(src, get_dir(user, src)) - else - playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) - ..() - return - -/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1) - if(damage < force_threshold || force_threshold < 0) - return - if(reinf) damage *= 0.5 - take_damage(damage) - return - - -/obj/structure/window/verb/rotate_counterclockwise() - set name = "Rotate Window Counterclockwise" - set category = "Object" - set src in oview(1) - - if(usr.incapacitated()) - return 0 - - if(is_fulltile()) - return 0 - - if(anchored) - to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") - return 0 - - update_nearby_tiles(need_rebuild=1) //Compel updates before - src.set_dir(turn(src.dir, 90)) - updateSilicate() - update_nearby_tiles(need_rebuild=1) - return - - -/obj/structure/window/verb/rotate_clockwise() - set name = "Rotate Window Clockwise" - set category = "Object" - set src in oview(1) - - if(usr.incapacitated()) - return 0 - - if(is_fulltile()) - return 0 - - if(anchored) - to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") - return 0 - - update_nearby_tiles(need_rebuild=1) //Compel updates before - src.set_dir(turn(src.dir, 270)) - updateSilicate() - update_nearby_tiles(need_rebuild=1) - return - -/obj/structure/window/New(Loc, start_dir=null, constructed=0) - ..() - - if (start_dir) - set_dir(start_dir) - - //player-constructed windows - if (constructed) - anchored = FALSE - state = 0 - update_verbs() - - health = maxhealth - - ini_dir = dir - - update_nearby_tiles(need_rebuild=1) - update_nearby_icons() - - -/obj/structure/window/Destroy() - density = FALSE - update_nearby_tiles() - var/turf/location = loc - . = ..() - for(var/obj/structure/window/W in orange(location, 1)) - W.update_icon() - -/obj/structure/window/Move() - var/ini_dir = dir - update_nearby_tiles(need_rebuild=1) - . = ..() - set_dir(ini_dir) - update_nearby_tiles(need_rebuild=1) - -//checks if this window is full-tile one -/obj/structure/window/proc/is_fulltile() - return fulltile - -/obj/structure/window/is_between_turfs(var/turf/origin, var/turf/target) - if(is_fulltile()) - return TRUE - return ..() - -//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! -/obj/structure/window/proc/update_nearby_icons() - update_icon() - for(var/obj/structure/window/W in orange(src, 1)) - W.update_icon() - -//Updates the availabiliy of the rotation verbs -/obj/structure/window/proc/update_verbs() - if(anchored || is_fulltile()) - verbs -= /obj/structure/window/verb/rotate_counterclockwise - verbs -= /obj/structure/window/verb/rotate_clockwise - else if(!is_fulltile()) - verbs += /obj/structure/window/verb/rotate_counterclockwise - verbs += /obj/structure/window/verb/rotate_clockwise - -//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) -/obj/structure/window/update_icon() - //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. - //this way it will only update full-tile ones - cut_overlays() - if(!is_fulltile()) - // Rotate the sprite somewhat so non-fulltiled windows can be seen as needing repair. - var/full_tilt_degrees = 15 - var/tilt_to_apply = abs((health / maxhealth) - 1) - if(tilt_to_apply && prob(50)) - tilt_to_apply = -tilt_to_apply - adjust_rotation(LERP(0, full_tilt_degrees, tilt_to_apply)) - - icon_state = "[basestate]" - return - else - flags = 0 // Removes ON_BORDER and OPPOSITE_OPACITY - var/list/dirs = list() - if(anchored) - for(var/obj/structure/window/W in orange(src,1)) - if(W.anchored && W.density && W.glasstype == src.glasstype && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. - dirs += get_dir(src, W) - - var/list/connections = dirs_to_corner_states(dirs) - - icon_state = "" - for(var/i = 1 to 4) - var/image/I = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1)) - add_overlay(I) - - // Damage overlays. - var/ratio = health / maxhealth - ratio = CEILING(ratio * 4, 1) * 25 - - if(ratio > 75) - return - var/image/I = image(icon, "damage[ratio]", layer = layer + 0.1) - add_overlay(I) - - return - -/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > maximal_heat) - hit(damage_per_fire_tick, 0) - ..() - - - -/obj/structure/window/basic - desc = "It looks thin and flimsy. A few knocks with... almost anything, really should shatter it." - icon_state = "window" - basestate = "window" - glasstype = /obj/item/stack/material/glass - maximal_heat = T0C + 100 - damage_per_fire_tick = 2.0 - maxhealth = 12.0 - force_threshold = 3 - -/obj/structure/window/basic/full - icon_state = "window-full" - maxhealth = 24 - fulltile = TRUE - flags = 0 - -/obj/structure/window/phoronbasic - name = "phoron window" - desc = "A borosilicate alloy window. It seems to be quite strong." - basestate = "phoronwindow" - icon_state = "phoronwindow" - shardtype = /obj/item/weapon/material/shard/phoron - glasstype = /obj/item/stack/material/glass/phoronglass - maximal_heat = T0C + 2000 - damage_per_fire_tick = 1.0 - maxhealth = 40.0 - force_threshold = 5 - -/obj/structure/window/phoronbasic/full - icon_state = "phoronwindow-full" - maxhealth = 80 - fulltile = TRUE - flags = 0 - -/obj/structure/window/phoronreinforced - name = "reinforced borosilicate window" - desc = "A borosilicate alloy window, with rods supporting it. It seems to be very strong." - basestate = "phoronrwindow" - icon_state = "phoronrwindow" - shardtype = /obj/item/weapon/material/shard/phoron - glasstype = /obj/item/stack/material/glass/phoronrglass - reinf = 1 - maximal_heat = T0C + 4000 - damage_per_fire_tick = 1.0 // This should last for 80 fire ticks if the window is not damaged at all. The idea is that borosilicate windows have something like ablative layer that protects them for a while. - maxhealth = 80.0 - force_threshold = 10 - -/obj/structure/window/phoronreinforced/full - icon_state = "phoronrwindow-full" - maxhealth = 160 - fulltile = TRUE - flags = 0 - -/obj/structure/window/reinforced - name = "reinforced window" - desc = "It looks rather strong. Might take a few good hits to shatter it." - icon_state = "rwindow" - basestate = "rwindow" - maxhealth = 40.0 - reinf = 1 - maximal_heat = T0C + 750 - damage_per_fire_tick = 2.0 - glasstype = /obj/item/stack/material/glass/reinforced - force_threshold = 6 - -/obj/structure/window/reinforced/full - icon_state = "rwindow-full" - maxhealth = 80 - fulltile = TRUE - flags = 0 - -/obj/structure/window/reinforced/tinted - name = "tinted window" - desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." - icon_state = "twindow" - basestate = "twindow" - opacity = 1 - -/obj/structure/window/reinforced/tinted/frosted - name = "frosted window" - desc = "It looks rather strong and frosted over. Looks like it might take a few less hits then a normal reinforced window." - icon_state = "fwindow" - basestate = "fwindow" - maxhealth = 30 - force_threshold = 5 - -/obj/structure/window/shuttle - name = "shuttle window" - desc = "It looks rather strong. Might take a few good hits to shatter it." - icon = 'icons/obj/podwindows.dmi' - icon_state = "window" - basestate = "window" - maxhealth = 40 - reinf = 1 - basestate = "w" - dir = 5 - force_threshold = 7 - -/obj/structure/window/reinforced/polarized - name = "electrochromic window" - desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." - var/id - -/obj/structure/window/reinforced/polarized/full - icon_state = "rwindow-full" - maxhealth = 80 - fulltile = TRUE - flags = 0 - -/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored! - var/obj/item/device/multitool/MT = W - // First check if they have a windowtint button buffered - if(istype(MT.connectable, /obj/machinery/button/windowtint)) - var/obj/machinery/button/windowtint/buffered_button = MT.connectable - src.id = buffered_button.id - to_chat(user, "\The [src] is linked to \the [buffered_button] with ID '[id]'.") - return TRUE - // Otherwise fall back to asking them... and remind them what the current ID is. - if(id) - to_chat(user, "The window's current ID is [id].") - var/t = sanitizeSafe(input(user, "Enter the new ID for the window.", src.name, null), MAX_NAME_LEN) - if(t && in_range(src, user)) - src.id = t - to_chat(user, "The new ID of \the [src] is '[id]'.") - return TRUE - . = ..() - -/obj/structure/window/reinforced/polarized/proc/toggle() - if(opacity) - animate(src, color="#FFFFFF", time=5) - set_opacity(0) - else - animate(src, color="#222222", time=5) - set_opacity(1) - var/turf/T = get_turf(src) - T.recalculate_directional_opacity() - -/obj/machinery/button/windowtint - name = "window tint control" - icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit - New icons - icon_state = "light0" - desc = "A remote control switch for polarized windows." - var/range = 7 - circuit = /obj/item/weapon/circuitboard/electrochromic - -/obj/machinery/button/windowtint/attack_hand(mob/user as mob) - if(..()) - return 1 - - toggle_tint() - -/obj/machinery/button/windowtint/proc/toggle_tint() - use_power(5) - - active = !active - update_icon() - - for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) - if (W.id == src.id || !W.id) - spawn(0) - W.toggle() - return - -/obj/machinery/button/windowtint/power_change() - ..() - if(active && !powered(power_channel)) - toggle_tint() - -/obj/machinery/button/windowtint/update_icon() - icon_state = "light[active]" - -/obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob) - if(default_deconstruction_screwdriver(user, W)) - return - else if(alarm_deconstruction_wirecutters(user, W)) - return - else if(istype(W, /obj/item/device/multitool)) - var/obj/item/device/multitool/MT = W - if(!id) - // If no ID is set yet (newly built button?) let them select an ID for first-time use! - var/t = sanitizeSafe(tgui_input_text(user, "Enter an ID for \the [src].", src.name, null, MAX_NAME_LEN), MAX_NAME_LEN) - if (t && in_range(src, user)) - src.id = t - to_chat(user, "The new ID of \the [src] is '[id]'. To reset this, rebuild the control.") - if(id) - // It already has an ID (or they just set one), buffer it for copying to windows. - to_chat(user, "You store \the [src] ID ('[id]') in \the [MT]'s buffer!") - MT.connectable = src - MT.update_icon() - return TRUE - . = ..() - -/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm -/obj/structure/window/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - return list( - RCD_VALUE_MODE = RCD_DECONSTRUCT, - RCD_VALUE_DELAY = 5 SECONDS, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 - ) - -/obj/structure/window/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - to_chat(user, span("notice", "You deconstruct \the [src].")) - qdel(src) - return TRUE - return FALSE +/obj/structure/window + name = "window" + desc = "A window." + icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons + density = TRUE + can_atmos_pass = ATMOS_PASS_PROC + w_class = ITEMSIZE_NORMAL + + layer = WINDOW_LAYER + pressure_resistance = 4*ONE_ATMOSPHERE + anchored = TRUE + flags = ON_BORDER + var/maxhealth = 14.0 + var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire + var/damage_per_fire_tick = 2.0 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. + var/health + var/force_threshold = 0 + var/ini_dir = null + var/state = 2 + var/reinf = 0 + var/basestate + var/shardtype = /obj/item/weapon/material/shard + var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass. + var/silicate = 0 // number of units of silicate + var/fulltile = FALSE // Set to true on full-tile variants. + +/obj/structure/window/examine(mob/user) + . = ..() + + if(health == maxhealth) + . += "It looks fully intact." + else + var/perc = health / maxhealth + if(perc > 0.75) + . += "It has a few cracks." + else if(perc > 0.5) + . += "It looks slightly damaged." + else if(perc > 0.25) + . += "It looks moderately damaged." + else + . += "It looks heavily damaged." + if(silicate) + if (silicate < 30) + . += "It has a thin layer of silicate." + else if (silicate < 70) + . += "It is covered in silicate." + else + . += "There is a thick layer of silicate covering it." + +/obj/structure/window/examine_icon() + return icon(icon=initial(icon),icon_state=initial(icon_state)) + +/obj/structure/window/take_damage(var/damage = 0, var/sound_effect = 1) + var/initialhealth = health + + if(silicate) + damage = damage * (1 - silicate / 200) + + health = max(0, health - damage) + + if(health <= 0) + shatter() + else + if(sound_effect) + playsound(src, 'sound/effects/Glasshit.ogg', 100, 1) + if(health < maxhealth / 4 && initialhealth >= maxhealth / 4) + visible_message("[src] looks like it's about to shatter!" ) + update_icon() + else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2) + visible_message("[src] looks seriously damaged!" ) + update_icon() + else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4) + visible_message("Cracks begin to appear in [src]!" ) + update_icon() + return + +/obj/structure/window/proc/apply_silicate(var/amount) + if(health < maxhealth) // Mend the damage + health = min(health + amount * 3, maxhealth) + if(health == maxhealth) + visible_message("[src] looks fully repaired." ) + else // Reinforce + silicate = min(silicate + amount, 100) + updateSilicate() + +/obj/structure/window/proc/updateSilicate() + cut_overlays() + update_icon() + + var/image/img = image(src) + img.color = "#ffffff" + img.alpha = silicate * 255 / 100 + add_overlay(img) + +/obj/structure/window/proc/shatter(var/display_message = 1) + playsound(src, "shatter", 70, 1) + if(display_message) + visible_message("[src] shatters!") + new shardtype(loc) + if(reinf) + new /obj/item/stack/rods(loc) + if(is_fulltile()) + new shardtype(loc) //todo pooling? + if(reinf) + new /obj/item/stack/rods(loc) + qdel(src) + return + + +/obj/structure/window/bullet_act(var/obj/item/projectile/Proj) + + var/proj_damage = Proj.get_structure_damage() + if(!proj_damage) return + + ..() + take_damage(proj_damage) + return + + +/obj/structure/window/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + shatter(0) + return + if(3.0) + if(prob(50)) + shatter(0) + return + +/obj/structure/window/blob_act() + take_damage(50) + +/obj/structure/window/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return TRUE + if(is_fulltile()) + return FALSE //full tile window, you can't move into it! + if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir + return !density + else + return TRUE + +/obj/structure/window/Uncross(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return TRUE + if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir + return !density + else + return TRUE + +/obj/structure/window/CanZASPass(turf/T, is_zone) + if(is_fulltile() || get_dir(T, loc) == turn(dir, 180)) // Make sure we're handling the border correctly. + return !anchored // If it's anchored, it'll block air. + return TRUE // Don't stop airflow from the other sides. + +/obj/structure/window/hitby(AM as mob|obj) + ..() + visible_message("[src] was hit by [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 40 + else if(isobj(AM)) + var/obj/item/I = AM + tforce = I.throwforce + if(reinf) tforce *= 0.25 + if(health - tforce <= 7 && !reinf) + anchored = FALSE + update_verbs() + update_nearby_icons() + step(src, get_dir(AM, src)) + take_damage(tforce) + +/obj/structure/window/attack_tk(mob/user as mob) + user.visible_message("Something knocks on [src].") + playsound(src, 'sound/effects/Glasshit.ogg', 50, 1) + +/obj/structure/window/attack_hand(mob/user as mob) + user.setClickCooldown(user.get_attack_speed()) + if(HULK in user.mutations) + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) + user.visible_message("[user] smashes through [src]!") + user.do_attack_animation(src) + shatter() + + else if (user.a_intent == I_HURT) + + if (istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.can_shred(H)) + attack_generic(H,25) + return + + playsound(src, 'sound/effects/glassknock.ogg', 80, 1) + user.do_attack_animation(src) + user.visible_message("\The [user] bangs against \the [src]!", + "You bang against \the [src]!", + "You hear a banging sound.") + else + playsound(src, 'sound/effects/glassknock.ogg', 80, 1) + user.visible_message("[user.name] knocks on the [src.name].", + "You knock on the [src.name].", + "You hear a knocking sound.") + return + +/obj/structure/window/attack_generic(var/mob/user, var/damage) + user.setClickCooldown(user.get_attack_speed()) + if(!damage) + return + if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) + visible_message("[user] smashes into [src]!") + if(reinf) + damage = damage / 2 + take_damage(damage) + else + visible_message("\The [user] bonks \the [src] harmlessly.") + user.do_attack_animation(src) + return 1 + +/obj/structure/window/attackby(obj/item/W as obj, mob/user as mob) + if(!istype(W)) return//I really wish I did not need this + + // Fixing. + if(W.has_tool_quality(TOOL_WELDER) && user.a_intent == I_HELP) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(health < maxhealth) + if(WT.remove_fuel(1 ,user)) + to_chat(user, "You begin repairing [src]...") + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 40 * WT.toolspeed, target = src)) + health = maxhealth + // playsound(src, 'sound/items/Welder.ogg', 50, 1) + update_icon() + to_chat(user, "You repair [src].") + else + to_chat(user, "[src] is already in good condition!") + return + + // Slamming. + if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) + var/obj/item/weapon/grab/G = W + if(istype(G.affecting,/mob/living)) + var/mob/living/M = G.affecting + var/state = G.state + qdel(W) //gotta delete it here because if window breaks, it won't get deleted + switch (state) + if(1) + M.visible_message("[user] slams [M] against \the [src]!") + M.apply_damage(7) + hit(10) + if(2) + M.visible_message("[user] bashes [M] against \the [src]!") + if (prob(50)) + M.Weaken(1) + M.apply_damage(10) + hit(25) + if(3) + M.visible_message("[user] crushes [M] against \the [src]!") + M.Weaken(5) + M.apply_damage(20) + hit(50) + return + + if(W.flags & NOBLUDGEON) return + + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(reinf && state >= 1) + state = 3 - state + update_nearby_icons() + playsound(src, W.usesound, 75, 1) + to_chat(user, "You have [state == 1 ? "un" : ""]fastened the window [state ? "from" : "to"] the frame.") + else if(reinf && state == 0) + anchored = !anchored + update_nearby_tiles(need_rebuild=1) + update_nearby_icons() + update_verbs() + playsound(src, W.usesound, 75, 1) + to_chat(user, "You have [anchored ? "" : "un"]fastened the frame [anchored ? "to" : "from"] the floor.") + else if(!reinf) + anchored = !anchored + update_nearby_tiles(need_rebuild=1) + update_nearby_icons() + update_verbs() + playsound(src, W.usesound, 75, 1) + to_chat(user, "You have [anchored ? "" : "un"]fastened the window [anchored ? "to" : "from"] the floor.") + else if(W.has_tool_quality(TOOL_CROWBAR) && reinf && state <= 1) + state = 1 - state + playsound(src, W.usesound, 75, 1) + to_chat(user, "You have pried the window [state ? "into" : "out of"] the frame.") + else if(W.has_tool_quality(TOOL_WRENCH) && !anchored && (!state || !reinf)) + if(!glasstype) + to_chat(user, "You're not sure how to dismantle \the [src] properly.") + else + playsound(src, W.usesound, 75, 1) + visible_message("[user] dismantles \the [src].") + var/obj/item/stack/material/mats = new glasstype(loc) + if(is_fulltile()) + mats.set_amount(4) + qdel(src) + else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized)) + var/obj/item/stack/cable_coil/C = W + if (C.use(1)) + playsound(src, 'sound/effects/sparks1.ogg', 75, 1) + user.visible_message( \ + "\The [user] begins to wire \the [src] for electrochromic tinting.", \ + "You begin to wire \the [src] for electrochromic tinting.", \ + "You hear sparks.") + if(do_after(user, 20 * C.toolspeed, src) && state == 0) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + var/obj/structure/window/reinforced/polarized/P = new(loc, dir) + if(is_fulltile()) + P.fulltile = TRUE + P.icon_state = "fwindow" + P.maxhealth = maxhealth + P.health = health + P.state = state + P.anchored = anchored + qdel(src) + else if(istype(W,/obj/item/frame) && anchored) + var/obj/item/frame/F = W + F.try_build(src, user) + else + user.setClickCooldown(user.get_attack_speed(W)) + if(W.damtype == BRUTE || W.damtype == BURN) + user.do_attack_animation(src) + hit(W.force) + if(health <= 7) + anchored = FALSE + update_nearby_icons() + step(src, get_dir(user, src)) + else + playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) + ..() + return + +/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1) + if(damage < force_threshold || force_threshold < 0) + return + if(reinf) damage *= 0.5 + take_damage(damage) + return + + +/obj/structure/window/verb/rotate_counterclockwise() + set name = "Rotate Window Counterclockwise" + set category = "Object" + set src in oview(1) + + if(usr.incapacitated()) + return 0 + + if(is_fulltile()) + return 0 + + if(anchored) + to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") + return 0 + + update_nearby_tiles(need_rebuild=1) //Compel updates before + src.set_dir(turn(src.dir, 90)) + updateSilicate() + update_nearby_tiles(need_rebuild=1) + return + + +/obj/structure/window/verb/rotate_clockwise() + set name = "Rotate Window Clockwise" + set category = "Object" + set src in oview(1) + + if(usr.incapacitated()) + return 0 + + if(is_fulltile()) + return 0 + + if(anchored) + to_chat(usr, "It is fastened to the floor therefore you can't rotate it!") + return 0 + + update_nearby_tiles(need_rebuild=1) //Compel updates before + src.set_dir(turn(src.dir, 270)) + updateSilicate() + update_nearby_tiles(need_rebuild=1) + return + +/obj/structure/window/New(Loc, start_dir=null, constructed=0) + ..() + + if (start_dir) + set_dir(start_dir) + + //player-constructed windows + if (constructed) + anchored = FALSE + state = 0 + update_verbs() + + health = maxhealth + + ini_dir = dir + + update_nearby_tiles(need_rebuild=1) + update_nearby_icons() + + +/obj/structure/window/Destroy() + density = FALSE + update_nearby_tiles() + var/turf/location = loc + . = ..() + for(var/obj/structure/window/W in orange(location, 1)) + W.update_icon() + +/obj/structure/window/Move() + var/ini_dir = dir + update_nearby_tiles(need_rebuild=1) + . = ..() + set_dir(ini_dir) + update_nearby_tiles(need_rebuild=1) + +//checks if this window is full-tile one +/obj/structure/window/proc/is_fulltile() + return fulltile + +/obj/structure/window/is_between_turfs(var/turf/origin, var/turf/target) + if(is_fulltile()) + return TRUE + return ..() + +//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! +/obj/structure/window/proc/update_nearby_icons() + update_icon() + for(var/obj/structure/window/W in orange(src, 1)) + W.update_icon() + +//Updates the availabiliy of the rotation verbs +/obj/structure/window/proc/update_verbs() + if(anchored || is_fulltile()) + verbs -= /obj/structure/window/verb/rotate_counterclockwise + verbs -= /obj/structure/window/verb/rotate_clockwise + else if(!is_fulltile()) + verbs += /obj/structure/window/verb/rotate_counterclockwise + verbs += /obj/structure/window/verb/rotate_clockwise + +//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) +/obj/structure/window/update_icon() + //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. + //this way it will only update full-tile ones + cut_overlays() + if(!is_fulltile()) + // Rotate the sprite somewhat so non-fulltiled windows can be seen as needing repair. + var/full_tilt_degrees = 15 + var/tilt_to_apply = abs((health / maxhealth) - 1) + if(tilt_to_apply && prob(50)) + tilt_to_apply = -tilt_to_apply + adjust_rotation(LERP(0, full_tilt_degrees, tilt_to_apply)) + + icon_state = "[basestate]" + return + else + flags = 0 // Removes ON_BORDER and OPPOSITE_OPACITY + var/list/dirs = list() + if(anchored) + for(var/obj/structure/window/W in orange(src,1)) + if(W.anchored && W.density && W.glasstype == src.glasstype && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. + dirs += get_dir(src, W) + + var/list/connections = dirs_to_corner_states(dirs) + + icon_state = "" + for(var/i = 1 to 4) + var/image/I = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1)) + add_overlay(I) + + // Damage overlays. + var/ratio = health / maxhealth + ratio = CEILING(ratio * 4, 1) * 25 + + if(ratio > 75) + return + var/image/I = image(icon, "damage[ratio]", layer = layer + 0.1) + add_overlay(I) + + return + +/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > maximal_heat) + hit(damage_per_fire_tick, 0) + ..() + + + +/obj/structure/window/basic + desc = "It looks thin and flimsy. A few knocks with... almost anything, really should shatter it." + icon_state = "window" + basestate = "window" + glasstype = /obj/item/stack/material/glass + maximal_heat = T0C + 100 + damage_per_fire_tick = 2.0 + maxhealth = 12.0 + force_threshold = 3 + +/obj/structure/window/basic/full + icon_state = "window-full" + maxhealth = 24 + fulltile = TRUE + flags = 0 + +/obj/structure/window/phoronbasic + name = "phoron window" + desc = "A borosilicate alloy window. It seems to be quite strong." + basestate = "phoronwindow" + icon_state = "phoronwindow" + shardtype = /obj/item/weapon/material/shard/phoron + glasstype = /obj/item/stack/material/glass/phoronglass + maximal_heat = T0C + 2000 + damage_per_fire_tick = 1.0 + maxhealth = 40.0 + force_threshold = 5 + +/obj/structure/window/phoronbasic/full + icon_state = "phoronwindow-full" + maxhealth = 80 + fulltile = TRUE + flags = 0 + +/obj/structure/window/phoronreinforced + name = "reinforced borosilicate window" + desc = "A borosilicate alloy window, with rods supporting it. It seems to be very strong." + basestate = "phoronrwindow" + icon_state = "phoronrwindow" + shardtype = /obj/item/weapon/material/shard/phoron + glasstype = /obj/item/stack/material/glass/phoronrglass + reinf = 1 + maximal_heat = T0C + 4000 + damage_per_fire_tick = 1.0 // This should last for 80 fire ticks if the window is not damaged at all. The idea is that borosilicate windows have something like ablative layer that protects them for a while. + maxhealth = 80.0 + force_threshold = 10 + +/obj/structure/window/phoronreinforced/full + icon_state = "phoronrwindow-full" + maxhealth = 160 + fulltile = TRUE + flags = 0 + +/obj/structure/window/reinforced + name = "reinforced window" + desc = "It looks rather strong. Might take a few good hits to shatter it." + icon_state = "rwindow" + basestate = "rwindow" + maxhealth = 40.0 + reinf = 1 + maximal_heat = T0C + 750 + damage_per_fire_tick = 2.0 + glasstype = /obj/item/stack/material/glass/reinforced + force_threshold = 6 + +/obj/structure/window/reinforced/full + icon_state = "rwindow-full" + maxhealth = 80 + fulltile = TRUE + flags = 0 + +/obj/structure/window/reinforced/tinted + name = "tinted window" + desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." + icon_state = "twindow" + basestate = "twindow" + opacity = 1 + +/obj/structure/window/reinforced/tinted/frosted + name = "frosted window" + desc = "It looks rather strong and frosted over. Looks like it might take a few less hits then a normal reinforced window." + icon_state = "fwindow" + basestate = "fwindow" + maxhealth = 30 + force_threshold = 5 + +/obj/structure/window/shuttle + name = "shuttle window" + desc = "It looks rather strong. Might take a few good hits to shatter it." + icon = 'icons/obj/podwindows.dmi' + icon_state = "window" + basestate = "window" + maxhealth = 40 + reinf = 1 + basestate = "w" + dir = 5 + force_threshold = 7 + +/obj/structure/window/reinforced/polarized + name = "electrochromic window" + desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." + var/id + +/obj/structure/window/reinforced/polarized/full + icon_state = "rwindow-full" + maxhealth = 80 + fulltile = TRUE + flags = 0 + +/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored! + var/obj/item/device/multitool/MT = W + // First check if they have a windowtint button buffered + if(istype(MT.connectable, /obj/machinery/button/windowtint)) + var/obj/machinery/button/windowtint/buffered_button = MT.connectable + src.id = buffered_button.id + to_chat(user, "\The [src] is linked to \the [buffered_button] with ID '[id]'.") + return TRUE + // Otherwise fall back to asking them... and remind them what the current ID is. + if(id) + to_chat(user, "The window's current ID is [id].") + var/t = sanitizeSafe(input(user, "Enter the new ID for the window.", src.name, null), MAX_NAME_LEN) + if(t && in_range(src, user)) + src.id = t + to_chat(user, "The new ID of \the [src] is '[id]'.") + return TRUE + . = ..() + +/obj/structure/window/reinforced/polarized/proc/toggle() + if(opacity) + animate(src, color="#FFFFFF", time=5) + set_opacity(0) + else + animate(src, color="#222222", time=5) + set_opacity(1) + var/turf/T = get_turf(src) + T.recalculate_directional_opacity() + +/obj/machinery/button/windowtint + name = "window tint control" + icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit - New icons + icon_state = "light0" + desc = "A remote control switch for polarized windows." + var/range = 7 + circuit = /obj/item/weapon/circuitboard/electrochromic + +/obj/machinery/button/windowtint/attack_hand(mob/user as mob) + if(..()) + return 1 + + toggle_tint() + +/obj/machinery/button/windowtint/proc/toggle_tint() + use_power(5) + + active = !active + update_icon() + + for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) + if (W.id == src.id || !W.id) + spawn(0) + W.toggle() + return + +/obj/machinery/button/windowtint/power_change() + ..() + if(active && !powered(power_channel)) + toggle_tint() + +/obj/machinery/button/windowtint/update_icon() + icon_state = "light[active]" + +/obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob) + if(default_deconstruction_screwdriver(user, W)) + return + else if(alarm_deconstruction_wirecutters(user, W)) + return + else if(istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/MT = W + if(!id) + // If no ID is set yet (newly built button?) let them select an ID for first-time use! + var/t = sanitizeSafe(tgui_input_text(user, "Enter an ID for \the [src].", src.name, null, MAX_NAME_LEN), MAX_NAME_LEN) + if (t && in_range(src, user)) + src.id = t + to_chat(user, "The new ID of \the [src] is '[id]'. To reset this, rebuild the control.") + if(id) + // It already has an ID (or they just set one), buffer it for copying to windows. + to_chat(user, "You store \the [src] ID ('[id]') in \the [MT]'s buffer!") + MT.connectable = src + MT.update_icon() + return TRUE + . = ..() + +/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm +/obj/structure/window/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = 5 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 + ) + +/obj/structure/window/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + qdel(src) + return TRUE + return FALSE */ \ No newline at end of file diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 2606ae0b75..a50d434207 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -1,138 +1,138 @@ -//STRIKE TEAMS -//Thanks to Kilakk for the admin-button portion of this code. - -var/global/send_emergency_team = 0 // Used for automagic response teams - // 'admin_emergency_team' for admin-spawned response teams -var/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance. -var/can_call_ert -var/silent_ert = 0 - -/client/proc/response_team() - set name = "Dispatch Emergency Response Team" - set category = "Special Verbs" - set desc = "Send an emergency response team to the station" - - if(!holder) - to_chat(usr, "Only administrators may use this command.") - return - if(!ticker) - to_chat(usr, "The game hasn't started yet!") - return - if(ticker.current_state == 1) - to_chat(usr, "The round hasn't started yet!") - return - if(send_emergency_team) - to_chat(usr, "[using_map.boss_name] has already dispatched an emergency response team!") - return - if(tgui_alert(usr, "Do you want to dispatch an Emergency Response Team?","ERT",list("Yes","No")) != "Yes") - return - if(tgui_alert(usr, "Do you want this Response Team to be announced?","ERT",list("Yes","No")) != "Yes") - silent_ert = 1 - if(get_security_level() != "red") // Allow admins to reconsider if the alert level isn't Red - switch(tgui_alert(usr, "The station is not in red alert. Do you still want to dispatch a response team?","ERT",list("Yes","No"))) - if("No") - return - if(send_emergency_team) - to_chat(usr, "Looks like somebody beat you to it!") - return - - message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1) - admin_chat_message(message = "[key_name(usr)] is dispatching an Emergency Response Team", color = "#CC2222") //VOREStation Add - log_admin("[key_name(usr)] used Dispatch Response Team.") - trigger_armed_response_team(1) - -/client/verb/JoinResponseTeam() - - set name = "Join Response Team" - set category = "IC" - - if(!MayRespawn(1)) - to_chat(usr, "You cannot join the response team at this time.") - return - - if(istype(usr,/mob/observer/dead) || istype(usr,/mob/new_player)) - if(!send_emergency_team) - to_chat(usr, "No emergency response team is currently being sent.") - return - if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer")) - to_chat(usr, "You are jobbanned from the emergency reponse team!") - return - if(ert.current_antagonists.len >= ert.hard_cap) - to_chat(usr, "The emergency response team is already full!") - return - ert.create_default(usr) - else - to_chat(usr, "You need to be an observer or new player to use this.") - -// returns a number of dead players in % -/proc/percentage_dead() - var/total = 0 - var/deadcount = 0 - for(var/mob/living/carbon/human/H in mob_list) - if(H.client) // Monkeys and mice don't have a client, amirite? - if(H.stat == 2) deadcount++ - total++ - - if(total == 0) return 0 - else return round(100 * deadcount / total) - -// counts the number of antagonists in % -/proc/percentage_antagonists() - var/total = 0 - var/antagonists = 0 - for(var/mob/living/carbon/human/H in mob_list) - if(is_special_character(H) >= 1) - antagonists++ - total++ - - if(total == 0) return 0 - else return round(100 * antagonists / total) - -// Increments the ERT chance automatically, so that the later it is in the round, -// the more likely an ERT is to be able to be called. -/proc/increment_ert_chance() - while(send_emergency_team == 0) // There is no ERT at the time. - if(get_security_level() == "green") - ert_base_chance += 1 - if(get_security_level() == "yellow") - ert_base_chance += 1 - if(get_security_level() == "violet") - ert_base_chance += 2 - if(get_security_level() == "orange") - ert_base_chance += 2 - if(get_security_level() == "blue") - ert_base_chance += 2 - if(get_security_level() == "red") - ert_base_chance += 3 - if(get_security_level() == "delta") - ert_base_chance += 10 // Need those big guns - sleep(600 * 3) // Minute * Number of Minutes - - -/proc/trigger_armed_response_team(var/force = 0) - if(!can_call_ert && !force) - return - if(send_emergency_team) - return - - var/send_team_chance = ert_base_chance // Is incremented by increment_ert_chance. - send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance - send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance - send_team_chance = min(send_team_chance, 100) - - if(force) send_team_chance = 100 - - // there's only a certain chance a team will be sent - if(!prob(send_team_chance)) - command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[using_map.boss_name]") - can_call_ert = 0 // Only one call per round, ladies. - return - if(silent_ert == 0) - command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[using_map.boss_name]") - - can_call_ert = 0 // Only one call per round, gentleman. - send_emergency_team = 1 - consider_ert_load() //VOREStation Add - - sleep(600 * 5) - send_emergency_team = 0 // Can no longer join the ERT. +//STRIKE TEAMS +//Thanks to Kilakk for the admin-button portion of this code. + +var/global/send_emergency_team = 0 // Used for automagic response teams + // 'admin_emergency_team' for admin-spawned response teams +var/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance. +var/can_call_ert +var/silent_ert = 0 + +/client/proc/response_team() + set name = "Dispatch Emergency Response Team" + set category = "Special Verbs" + set desc = "Send an emergency response team to the station" + + if(!holder) + to_chat(usr, "Only administrators may use this command.") + return + if(!ticker) + to_chat(usr, "The game hasn't started yet!") + return + if(ticker.current_state == 1) + to_chat(usr, "The round hasn't started yet!") + return + if(send_emergency_team) + to_chat(usr, "[using_map.boss_name] has already dispatched an emergency response team!") + return + if(tgui_alert(usr, "Do you want to dispatch an Emergency Response Team?","ERT",list("Yes","No")) != "Yes") + return + if(tgui_alert(usr, "Do you want this Response Team to be announced?","ERT",list("Yes","No")) != "Yes") + silent_ert = 1 + if(get_security_level() != "red") // Allow admins to reconsider if the alert level isn't Red + switch(tgui_alert(usr, "The station is not in red alert. Do you still want to dispatch a response team?","ERT",list("Yes","No"))) + if("No") + return + if(send_emergency_team) + to_chat(usr, "Looks like somebody beat you to it!") + return + + message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1) + admin_chat_message(message = "[key_name(usr)] is dispatching an Emergency Response Team", color = "#CC2222") //VOREStation Add + log_admin("[key_name(usr)] used Dispatch Response Team.") + trigger_armed_response_team(1) + +/client/verb/JoinResponseTeam() + + set name = "Join Response Team" + set category = "IC" + + if(!MayRespawn(1)) + to_chat(usr, "You cannot join the response team at this time.") + return + + if(istype(usr,/mob/observer/dead) || istype(usr,/mob/new_player)) + if(!send_emergency_team) + to_chat(usr, "No emergency response team is currently being sent.") + return + if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer")) + to_chat(usr, "You are jobbanned from the emergency reponse team!") + return + if(ert.current_antagonists.len >= ert.hard_cap) + to_chat(usr, "The emergency response team is already full!") + return + ert.create_default(usr) + else + to_chat(usr, "You need to be an observer or new player to use this.") + +// returns a number of dead players in % +/proc/percentage_dead() + var/total = 0 + var/deadcount = 0 + for(var/mob/living/carbon/human/H in mob_list) + if(H.client) // Monkeys and mice don't have a client, amirite? + if(H.stat == 2) deadcount++ + total++ + + if(total == 0) return 0 + else return round(100 * deadcount / total) + +// counts the number of antagonists in % +/proc/percentage_antagonists() + var/total = 0 + var/antagonists = 0 + for(var/mob/living/carbon/human/H in mob_list) + if(is_special_character(H) >= 1) + antagonists++ + total++ + + if(total == 0) return 0 + else return round(100 * antagonists / total) + +// Increments the ERT chance automatically, so that the later it is in the round, +// the more likely an ERT is to be able to be called. +/proc/increment_ert_chance() + while(send_emergency_team == 0) // There is no ERT at the time. + if(get_security_level() == "green") + ert_base_chance += 1 + if(get_security_level() == "yellow") + ert_base_chance += 1 + if(get_security_level() == "violet") + ert_base_chance += 2 + if(get_security_level() == "orange") + ert_base_chance += 2 + if(get_security_level() == "blue") + ert_base_chance += 2 + if(get_security_level() == "red") + ert_base_chance += 3 + if(get_security_level() == "delta") + ert_base_chance += 10 // Need those big guns + sleep(600 * 3) // Minute * Number of Minutes + + +/proc/trigger_armed_response_team(var/force = 0) + if(!can_call_ert && !force) + return + if(send_emergency_team) + return + + var/send_team_chance = ert_base_chance // Is incremented by increment_ert_chance. + send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance + send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance + send_team_chance = min(send_team_chance, 100) + + if(force) send_team_chance = 100 + + // there's only a certain chance a team will be sent + if(!prob(send_team_chance)) + command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[using_map.boss_name]") + can_call_ert = 0 // Only one call per round, ladies. + return + if(silent_ert == 0) + command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[using_map.boss_name]") + + can_call_ert = 0 // Only one call per round, gentleman. + send_emergency_team = 1 + consider_ert_load() //VOREStation Add + + sleep(600 * 5) + send_emergency_team = 0 // Can no longer join the ERT. diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index e68b33089a..4903aed6c7 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -1,81 +1,81 @@ -/obj/structure/shuttle - name = "shuttle" - icon = 'icons/turf/shuttle_parts.dmi' - unacidable = TRUE - -/obj/structure/shuttle/window - name = "shuttle window" - icon = 'icons/obj/podwindows.dmi' - icon_state = "0_0" //The states are a bitflag for connecting window directions, then connecting shuttle wall directions - density = TRUE - opacity = 0 - anchored = TRUE - can_atmos_pass = ATMOS_PASS_NO - - var/window_flags = 0 // Bitflags to indicate connected windows - var/wall_flags = 0 // Bitflags to indicate connected walls - -/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return TRUE - return ..() - -/obj/structure/shuttle/window/Initialize() - . = ..() - auto_join() - -/obj/structure/shuttle/window/proc/auto_join() - match_windows(NORTH, NORTH) - match_windows(EAST, EAST) - match_windows(SOUTH, SOUTH) - match_windows(WEST, WEST) - - icon_state = "[window_flags]_[wall_flags]" - - return icon_state - -/obj/structure/shuttle/window/proc/match_windows(direction, flag, mask=0) - var/turf/adj = get_step(src, direction) - - if(istype(adj,/turf/simulated/shuttle/wall)) - wall_flags |= flag // turn on the bit flag - else - var/obj/structure/shuttle/window/window = locate(src.type) in adj - if(window) - window_flags |= flag // turn on the bit flag - else - window_flags &= ~flag // turn off the bit flag - wall_flags &= ~flag // turn off the bit flag - -/obj/structure/shuttle/engine - name = "engine" - density = TRUE - anchored = TRUE - -/obj/structure/shuttle/engine/heater - name = "heater" - icon_state = "heater" - -/obj/structure/shuttle/engine/platform - name = "platform" - icon_state = "platform" - -/obj/structure/shuttle/engine/propulsion - name = "propulsion" - icon_state = "propulsion" - opacity = 1 - -/obj/structure/shuttle/engine/propulsion/burst - name = "burst" - -/obj/structure/shuttle/engine/propulsion/burst/left - name = "left" - icon_state = "burst_l" - -/obj/structure/shuttle/engine/propulsion/burst/right - name = "right" - icon_state = "burst_r" - -/obj/structure/shuttle/engine/router - name = "router" - icon_state = "router" +/obj/structure/shuttle + name = "shuttle" + icon = 'icons/turf/shuttle_parts.dmi' + unacidable = TRUE + +/obj/structure/shuttle/window + name = "shuttle window" + icon = 'icons/obj/podwindows.dmi' + icon_state = "0_0" //The states are a bitflag for connecting window directions, then connecting shuttle wall directions + density = TRUE + opacity = 0 + anchored = TRUE + can_atmos_pass = ATMOS_PASS_NO + + var/window_flags = 0 // Bitflags to indicate connected windows + var/wall_flags = 0 // Bitflags to indicate connected walls + +/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return TRUE + return ..() + +/obj/structure/shuttle/window/Initialize() + . = ..() + auto_join() + +/obj/structure/shuttle/window/proc/auto_join() + match_windows(NORTH, NORTH) + match_windows(EAST, EAST) + match_windows(SOUTH, SOUTH) + match_windows(WEST, WEST) + + icon_state = "[window_flags]_[wall_flags]" + + return icon_state + +/obj/structure/shuttle/window/proc/match_windows(direction, flag, mask=0) + var/turf/adj = get_step(src, direction) + + if(istype(adj,/turf/simulated/shuttle/wall)) + wall_flags |= flag // turn on the bit flag + else + var/obj/structure/shuttle/window/window = locate(src.type) in adj + if(window) + window_flags |= flag // turn on the bit flag + else + window_flags &= ~flag // turn off the bit flag + wall_flags &= ~flag // turn off the bit flag + +/obj/structure/shuttle/engine + name = "engine" + density = TRUE + anchored = TRUE + +/obj/structure/shuttle/engine/heater + name = "heater" + icon_state = "heater" + +/obj/structure/shuttle/engine/platform + name = "platform" + icon_state = "platform" + +/obj/structure/shuttle/engine/propulsion + name = "propulsion" + icon_state = "propulsion" + opacity = 1 + +/obj/structure/shuttle/engine/propulsion/burst + name = "burst" + +/obj/structure/shuttle/engine/propulsion/burst/left + name = "left" + icon_state = "burst_l" + +/obj/structure/shuttle/engine/propulsion/burst/right + name = "right" + icon_state = "burst_r" + +/obj/structure/shuttle/engine/router + name = "router" + icon_state = "router" diff --git a/code/game/skincmd.dm b/code/game/skincmd.dm index fd9131538e..f8aa4c4b74 100644 --- a/code/game/skincmd.dm +++ b/code/game/skincmd.dm @@ -1,13 +1,13 @@ -/mob/var/skincmds = list() -/obj/proc/SkinCmd(mob/user as mob, var/data as text) - -/proc/SkinCmdRegister(var/mob/user, var/name as text, var/O as obj) - user.skincmds[name] = O - -/mob/verb/skincmd(data as text) - set hidden = 1 - - var/ref = copytext(data, 1, findtext(data, ";")) - if (src.skincmds[ref] != null) - var/obj/a = src.skincmds[ref] +/mob/var/skincmds = list() +/obj/proc/SkinCmd(mob/user as mob, var/data as text) + +/proc/SkinCmdRegister(var/mob/user, var/name as text, var/O as obj) + user.skincmds[name] = O + +/mob/verb/skincmd(data as text) + set hidden = 1 + + var/ref = copytext(data, 1, findtext(data, ";")) + if (src.skincmds[ref] != null) + var/obj/a = src.skincmds[ref] a.SkinCmd(src, copytext(data, findtext(data, ";") + 1)) \ No newline at end of file diff --git a/code/game/sound.dm b/code/game/sound.dm index b7b6e859fd..e48cd5044d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -1,459 +1,459 @@ -/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, is_global, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, preference = null, volume_channel = null) - if(Master.current_runlevel < RUNLEVEL_LOBBY) - return - - var/turf/turf_source = get_turf(source) - if(!turf_source) - return - var/area/area_source = turf_source.loc - - //allocate a channel if necessary now so its the same for everyone - channel = channel || SSsounds.random_available_channel() - - // Looping through the player list has the added bonus of working for mobs inside containers - var/sound/S = sound(get_sfx(soundin)) - var/maxdistance = (world.view + extrarange) * 2 //VOREStation Edit - 3 to 2 - var/list/listeners = player_list.Copy() - if(!ignore_walls) //these sounds don't carry through walls - for(var/mob/listen in listeners) - if(!(get_turf(listen) in hear(maxdistance,source))) - listeners -= listen - for(var/mob/M as anything in listeners) - if(!M || !M.client) - continue - var/turf/T = get_turf(M) - if(!T) - continue - var/area/A = T.loc - if((A.soundproofed || area_source.soundproofed) && (A != area_source)) - continue - var/distance = get_dist(T, turf_source) - - if(distance <= maxdistance) - if(T && T.z == turf_source.z) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, pressure_affected, S, preference, volume_channel) - -/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, channel = 0, pressure_affected = TRUE, sound/S, preference, volume_channel = null) - if(!client || ear_deaf > 0) - return - if(preference && !client.is_preference_enabled(preference)) - return - - if(!S) - S = sound(get_sfx(soundin)) - - S.wait = 0 //No queue - S.channel = channel || SSsounds.random_available_channel() - - // I'm not sure if you can modify S.volume, but I'd rather not try to find out what - // horrible things lurk in BYOND's internals, so we're just gonna do vol *= - vol *= client.get_preference_volume_channel(volume_channel) - vol *= client.get_preference_volume_channel(VOLUME_CHANNEL_MASTER) - S.volume = vol - - if(vary || frequency) //CHOMPEdit - if(frequency) - S.frequency = frequency - else - S.frequency = get_rand_frequency() - - if(isturf(turf_source)) - var/turf/T = get_turf(src) - - //sound volume falloff with distance - var/distance = get_dist(T, turf_source) - - S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff. - - //Atmosphere affects sound - var/pressure_factor = 1 - if(pressure_affected) - var/datum/gas_mixture/hearer_env = T.return_air() - var/datum/gas_mixture/source_env = turf_source.return_air() - - if(hearer_env && source_env) - var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) - if(pressure < ONE_ATMOSPHERE) - pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) - else //space - pressure_factor = 0 - - if(distance <= 1) - pressure_factor = max(pressure_factor, 0.15) //touching the source of the sound - - S.volume *= pressure_factor - //End Atmosphere affecting sound - - //Don't bother with doing anything below. - if(S.volume <= 0) - return //No sound - - //Apply a sound environment. - if(!is_global) - S.environment = get_sound_env(pressure_factor) - - var/dx = turf_source.x - T.x // Hearing from the right/left - S.x = dx - var/dz = turf_source.y - T.y // Hearing from infront/behind - S.z = dz - // The y value is for above your head, but there is no ceiling in 2d spessmens. - S.y = 1 - S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) - - src << S - -/proc/sound_to_playing_players(sound, volume = 100, vary) - sound = get_sfx(sound) - for(var/M in player_list) - if(ismob(M) && !isnewplayer(M)) - var/mob/MO = M - MO.playsound_local(get_turf(MO), sound, volume, vary, pressure_affected = FALSE) - -/mob/proc/stop_sound_channel(chan) - src << sound(null, repeat = 0, wait = 0, channel = chan) - -/mob/proc/set_sound_channel_volume(channel, volume) - var/sound/S = sound(null, FALSE, FALSE, channel, volume) - S.status = SOUND_UPDATE - src << S - -/proc/get_rand_frequency() - return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. - -/client/proc/playtitlemusic() - if(!ticker || !SSmedia_tracks.lobby_tracks.len || !media) return - if(is_preference_enabled(/datum/client_preference/play_lobby_music)) - var/datum/track/T = pick(SSmedia_tracks.lobby_tracks) - media.push_music(T.url, world.time, 0.85) - to_chat(src,"Lobby music: [T.title] by [T.artist].") - -/proc/get_sfx(soundin) - if(istext(soundin)) - switch(soundin) - if ("shatter") soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') - if ("explosion") soundin = pick('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg','sound/effects/Explosion3.ogg','sound/effects/Explosion4.ogg','sound/effects/Explosion5.ogg','sound/effects/Explosion6.ogg') - if ("sparks") soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks5.ogg','sound/effects/sparks6.ogg','sound/effects/sparks7.ogg') - if ("rustle") soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') - if ("punch") soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if ("clownstep") soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - if ("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - if ("hiss") soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') - if ("pageturn") soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') - if ("fracture") soundin = pick('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg') - if ("canopen") soundin = pick('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg') - if ("mechstep") soundin = pick('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg') - if ("thunder") soundin = pick('sound/effects/thunder/thunder1.ogg', 'sound/effects/thunder/thunder2.ogg', 'sound/effects/thunder/thunder3.ogg', 'sound/effects/thunder/thunder4.ogg', - 'sound/effects/thunder/thunder5.ogg', 'sound/effects/thunder/thunder6.ogg', 'sound/effects/thunder/thunder7.ogg', 'sound/effects/thunder/thunder8.ogg', 'sound/effects/thunder/thunder9.ogg', - 'sound/effects/thunder/thunder10.ogg') - if ("keyboard") soundin = pick('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') - if ("button") soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') - if ("switch") soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') - if ("casing_sound") soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') - if ("pickaxe") soundin = pick('sound/weapons/mine/pickaxe1.ogg', 'sound/weapons/mine/pickaxe2.ogg','sound/weapons/mine/pickaxe3.ogg','sound/weapons/mine/pickaxe4.ogg') - if("shatter") - soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') - if("explosion") - soundin = pick( - 'sound/effects/Explosion1.ogg', - 'sound/effects/Explosion2.ogg', - 'sound/effects/Explosion3.ogg', - 'sound/effects/Explosion4.ogg', - 'sound/effects/Explosion5.ogg', - 'sound/effects/Explosion6.ogg') - if("sparks") - soundin = pick( - 'sound/effects/sparks1.ogg', - 'sound/effects/sparks2.ogg', - 'sound/effects/sparks3.ogg', - 'sound/effects/sparks5.ogg', - 'sound/effects/sparks6.ogg', - 'sound/effects/sparks7.ogg') - if("rustle") - soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') - if("punch") - soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if("clownstep") - soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - if("swing_hit") - soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - if("hiss") - soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') - if("pageturn") - soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') - if("fracture") - soundin = pick('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg') - if("canopen") - soundin = pick('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg') - if("mechstep") - soundin = pick('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg') - if("thunder") - soundin = pick( - 'sound/effects/thunder/thunder1.ogg', - 'sound/effects/thunder/thunder2.ogg', - 'sound/effects/thunder/thunder3.ogg', - 'sound/effects/thunder/thunder4.ogg', - 'sound/effects/thunder/thunder5.ogg', - 'sound/effects/thunder/thunder6.ogg', - 'sound/effects/thunder/thunder7.ogg', - 'sound/effects/thunder/thunder8.ogg', - 'sound/effects/thunder/thunder9.ogg', - 'sound/effects/thunder/thunder10.ogg') - if("keyboard") - soundin = pick( - 'sound/effects/keyboard/keyboard1.ogg', - 'sound/effects/keyboard/keyboard2.ogg', - 'sound/effects/keyboard/keyboard3.ogg', - 'sound/effects/keyboard/keyboard4.ogg') - if("button") - soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') - if("switch") - soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') - if("casing_sound") - soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') - if("ricochet") - soundin = pick( - 'sound/weapons/effects/ric1.ogg', - 'sound/weapons/effects/ric2.ogg', - 'sound/weapons/effects/ric3.ogg', - 'sound/weapons/effects/ric4.ogg', - 'sound/weapons/effects/ric5.ogg') - if("bullet_miss") - soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') - if ("pickaxe") - soundin = pick( - 'sound/weapons/mine/pickaxe1.ogg', - 'sound/weapons/mine/pickaxe2.ogg', - 'sound/weapons/mine/pickaxe3.ogg', - 'sound/weapons/mine/pickaxe4.ogg') - //VORESTATION EDIT - vore sounds for better performance - if ("hunger_sounds") soundin = pick('sound/vore/growl1.ogg','sound/vore/growl2.ogg','sound/vore/growl3.ogg','sound/vore/growl4.ogg','sound/vore/growl5.ogg') - - if("classic_digestion_sounds") soundin = pick( - 'sound/vore/digest1.ogg','sound/vore/digest2.ogg','sound/vore/digest3.ogg','sound/vore/digest4.ogg', - 'sound/vore/digest5.ogg','sound/vore/digest6.ogg','sound/vore/digest7.ogg','sound/vore/digest8.ogg', - 'sound/vore/digest9.ogg','sound/vore/digest10.ogg','sound/vore/digest11.ogg','sound/vore/digest12.ogg') - if("classic_death_sounds") soundin = pick( - 'sound/vore/death1.ogg','sound/vore/death2.ogg','sound/vore/death3.ogg','sound/vore/death4.ogg','sound/vore/death5.ogg', - 'sound/vore/death6.ogg','sound/vore/death7.ogg','sound/vore/death8.ogg','sound/vore/death9.ogg','sound/vore/death10.ogg') - if("classic_struggle_sounds") soundin = pick('sound/vore/squish1.ogg','sound/vore/squish2.ogg','sound/vore/squish3.ogg','sound/vore/squish4.ogg') - - if("fancy_prey_struggle") soundin = pick( - 'sound/vore/sunesound/prey/struggle_01.ogg','sound/vore/sunesound/prey/struggle_02.ogg','sound/vore/sunesound/prey/struggle_03.ogg', - 'sound/vore/sunesound/prey/struggle_04.ogg','sound/vore/sunesound/prey/struggle_05.ogg') - if("fancy_digest_pred") soundin = pick( - 'sound/vore/sunesound/pred/digest_01.ogg','sound/vore/sunesound/pred/digest_02.ogg','sound/vore/sunesound/pred/digest_03.ogg', - 'sound/vore/sunesound/pred/digest_04.ogg','sound/vore/sunesound/pred/digest_05.ogg','sound/vore/sunesound/pred/digest_06.ogg', - 'sound/vore/sunesound/pred/digest_07.ogg','sound/vore/sunesound/pred/digest_08.ogg','sound/vore/sunesound/pred/digest_09.ogg', - 'sound/vore/sunesound/pred/digest_10.ogg','sound/vore/sunesound/pred/digest_11.ogg','sound/vore/sunesound/pred/digest_12.ogg', - 'sound/vore/sunesound/pred/digest_13.ogg','sound/vore/sunesound/pred/digest_14.ogg','sound/vore/sunesound/pred/digest_15.ogg', - 'sound/vore/sunesound/pred/digest_16.ogg','sound/vore/sunesound/pred/digest_17.ogg','sound/vore/sunesound/pred/digest_18.ogg') - if("fancy_death_pred") soundin = pick( - 'sound/vore/sunesound/pred/death_01.ogg','sound/vore/sunesound/pred/death_02.ogg','sound/vore/sunesound/pred/death_03.ogg', - 'sound/vore/sunesound/pred/death_04.ogg','sound/vore/sunesound/pred/death_05.ogg','sound/vore/sunesound/pred/death_06.ogg', - 'sound/vore/sunesound/pred/death_07.ogg','sound/vore/sunesound/pred/death_08.ogg','sound/vore/sunesound/pred/death_09.ogg', - 'sound/vore/sunesound/pred/death_10.ogg') - if("fancy_digest_prey") soundin = pick( - 'sound/vore/sunesound/prey/digest_01.ogg','sound/vore/sunesound/prey/digest_02.ogg','sound/vore/sunesound/prey/digest_03.ogg', - 'sound/vore/sunesound/prey/digest_04.ogg','sound/vore/sunesound/prey/digest_05.ogg','sound/vore/sunesound/prey/digest_06.ogg', - 'sound/vore/sunesound/prey/digest_07.ogg','sound/vore/sunesound/prey/digest_08.ogg','sound/vore/sunesound/prey/digest_09.ogg', - 'sound/vore/sunesound/prey/digest_10.ogg','sound/vore/sunesound/prey/digest_11.ogg','sound/vore/sunesound/prey/digest_12.ogg', - 'sound/vore/sunesound/prey/digest_13.ogg','sound/vore/sunesound/prey/digest_14.ogg','sound/vore/sunesound/prey/digest_15.ogg', - 'sound/vore/sunesound/prey/digest_16.ogg','sound/vore/sunesound/prey/digest_17.ogg','sound/vore/sunesound/prey/digest_18.ogg') - if("fancy_death_prey") soundin = pick( - 'sound/vore/sunesound/prey/death_01.ogg','sound/vore/sunesound/prey/death_02.ogg','sound/vore/sunesound/prey/death_03.ogg', - 'sound/vore/sunesound/prey/death_04.ogg','sound/vore/sunesound/prey/death_05.ogg','sound/vore/sunesound/prey/death_06.ogg', - 'sound/vore/sunesound/prey/death_07.ogg','sound/vore/sunesound/prey/death_08.ogg','sound/vore/sunesound/prey/death_09.ogg', - 'sound/vore/sunesound/prey/death_10.ogg') - if ("belches") soundin = pick( - 'sound/vore/belches/belch1.ogg','sound/vore/belches/belch2.ogg','sound/vore/belches/belch3.ogg','sound/vore/belches/belch4.ogg', - 'sound/vore/belches/belch5.ogg','sound/vore/belches/belch6.ogg','sound/vore/belches/belch7.ogg','sound/vore/belches/belch8.ogg', - 'sound/vore/belches/belch9.ogg','sound/vore/belches/belch10.ogg','sound/vore/belches/belch11.ogg','sound/vore/belches/belch12.ogg', - 'sound/vore/belches/belch13.ogg','sound/vore/belches/belch14.ogg','sound/vore/belches/belch15.ogg') - //END VORESTATION EDIT - if ("terminal_type") - soundin = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg', \ - 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', \ - 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg') - if("smcalm") - soundin = pick('sound/machines/sm/accent/normal/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg') - if("smdelam") - soundin = pick('sound/machines/sm/accent/delam/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg') - if ("generic_drop") - soundin = pick( - 'sound/items/drop/generic1.ogg', - 'sound/items/drop/generic2.ogg' ) - if ("generic_pickup") - soundin = pick( - 'sound/items/pickup/generic1.ogg', - 'sound/items/pickup/generic2.ogg', - 'sound/items/pickup/generic3.ogg') - // CHOMPedit start - Sounds for mech footsteps. - if ("powerloaderstep") - soundin = pick( - 'modular_chomp/sound/effects/mech/powerloader_step.ogg', - 'modular_chomp/sound/effects/mech/powerloader_step2.ogg') - // CHOMPedit end. - return soundin - -//Are these even used? //Yes -var/list/keyboard_sound = list ('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') -var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') -var/list/teppi_sound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg', 'sound/voice/teppi/gyooh6.ogg', 'sound/voice/teppi/snoot1.ogg', 'sound/voice/teppi/snoot2.ogg') -var/list/talk_sound = list('sound/talksounds/a.ogg','sound/talksounds/b.ogg','sound/talksounds/c.ogg','sound/talksounds/d.ogg','sound/talksounds/e.ogg','sound/talksounds/f.ogg','sound/talksounds/g.ogg','sound/talksounds/h.ogg') -var/list/emote_sound = list('sound/talksounds/me_a.ogg','sound/talksounds/me_b.ogg','sound/talksounds/me_c.ogg','sound/talksounds/me_d.ogg','sound/talksounds/me_e.ogg','sound/talksounds/me_f.ogg') -var/list/goon_speak_one_sound = list('sound/talksounds/goon/speak_1.ogg', 'sound/talksounds/goon/speak_1_ask.ogg', 'sound/talksounds/goon/speak_1_exclaim.ogg') -var/list/goon_speak_two_sound = list('sound/talksounds/goon/speak_2.ogg', 'sound/talksounds/goon/speak_2_ask.ogg', 'sound/talksounds/goon/speak_2_exclaim.ogg') -var/list/goon_speak_three_sound = list('sound/talksounds/goon/speak_3.ogg', 'sound/talksounds/goon/speak_3_ask.ogg', 'sound/talksounds/goon/speak_3_exclaim.ogg') -var/list/goon_speak_four_sound = list('sound/talksounds/goon/speak_4.ogg', 'sound/talksounds/goon/speak_4_ask.ogg', 'sound/talksounds/goon/speak_4_exclaim.ogg') -var/list/goon_speak_blub_sound = list('sound/talksounds/goon/blub.ogg', 'sound/talksounds/goon/blub_ask.ogg', 'sound/talksounds/goon/blub_exclaim.ogg') -var/list/goon_speak_bottalk_sound = list('sound/talksounds/goon/bottalk_1.ogg', 'sound/talksounds/goon/bottalk_2.ogg', 'sound/talksounds/goon/bottalk_3.ogg', 'sound/talksounds/goon/bottalk_4.wav') -var/list/goon_speak_buwoo_sound = list('sound/talksounds/goon/buwoo.ogg', 'sound/talksounds/goon/buwoo_ask.ogg', 'sound/talksounds/goon/buwoo_exclaim.ogg') -var/list/goon_speak_cow_sound = list('sound/talksounds/goon/cow.ogg', 'sound/talksounds/goon/cow_ask.ogg', 'sound/talksounds/goon/cow_exclaim.ogg') -var/list/goon_speak_lizard_sound = list('sound/talksounds/goon/lizard.ogg', 'sound/talksounds/goon/lizard_ask.ogg', 'sound/talksounds/goon/lizard_exclaim.ogg') -var/list/goon_speak_pug_sound = list('sound/talksounds/goon/pug.ogg', 'sound/talksounds/goon/pug_ask.ogg', 'sound/talksounds/goon/pug_exclaim.ogg') -var/list/goon_speak_pugg_sound = list('sound/talksounds/goon/pugg.ogg', 'sound/talksounds/goon/pugg_ask.ogg', 'sound/talksounds/goon/pugg_exclaim.ogg') -var/list/goon_speak_roach_sound = list('sound/talksounds/goon/roach.ogg', 'sound/talksounds/goon/roach_ask.ogg', 'sound/talksounds/goon/roach_exclaim.ogg') -var/list/goon_speak_skelly_sound = list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg') -var/list/wf_speak_lure_sound = list ('sound/talksounds/wf/lure_1.ogg', 'sound/talksounds/wf/lure_2.ogg', 'sound/talksounds/wf/lure_3.ogg', 'sound/talksounds/wf/lure_4.ogg', 'sound/talksounds/wf/lure_5.ogg') -var/list/wf_speak_lyst_sound = list ('sound/talksounds/wf/lyst_1.ogg', 'sound/talksounds/wf/lyst_2.ogg', 'sound/talksounds/wf/lyst_3.ogg', 'sound/talksounds/wf/lyst_4.ogg', 'sound/talksounds/wf/lyst_5.ogg', 'sound/talksounds/wf/lyst_6.ogg') -var/list/wf_speak_void_sound = list ('sound/talksounds/wf/void_1.ogg', 'sound/talksounds/wf/void_2.ogg', 'sound/talksounds/wf/void_3.ogg') -var/list/wf_speak_vomva_sound = list ('sound/talksounds/wf/vomva_1.ogg', 'sound/talksounds/wf/vomva_2.ogg', 'sound/talksounds/wf/vomva_3.ogg', 'sound/talksounds/wf/vomva_4.ogg') -//CHOMPedit start: More sounds. -var/list/xeno_speak_sound = list('modular_chomp/sound/talksounds/xeno/xenotalk.ogg', 'modular_chomp/sound/talksounds/xeno/xenotalk2.ogg', 'modular_chomp/sound/talksounds/xeno/xenotalk3.ogg') -//CHOMPedit end. - - -// CHOMPEdit Start: Species sounds. This is probably inefficient, but I'm sure someone will yell at me or just do it better later:tm: -#define canine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/canine/wolf_pain.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain2.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain3.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain4.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg')) -#define feline_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/feline/feline_scream.ogg'), "pain" = list('modular_chomp/sound/voice/pain/feline/feline_pain.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/feline/feline_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/feline/feline_death.ogg')) -#define cervine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/cervine/cervine_scream.ogg'), "pain" = null, "gasp" = null, "death" = list('modular_chomp/sound/voice/death/cervine/cervine_death.ogg')) -#define robot_sounds list("cough" = list('sound/effects/mob_effects/m_machine_cougha.ogg', 'sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/machine_sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream_silicon.ogg', 'modular_chomp/sound/voice/android_scream.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream1.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream2.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/robotic/robot_pain1.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain2.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain3.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/borg_deathsound.ogg')) -#define male_generic_sounds list("cough" = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream/generic/male/male_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_5.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/male/male_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_3.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_4.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_5.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_6.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_7.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_8.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/male/male_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp2.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp3.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/male/male_death_1.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_2.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_3.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_4.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_5.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_6.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_7.ogg')) -#define female_generic_sounds list("cough" = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg'), "sneeze" = list('sound/effects/mob_effects/f_sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream/generic/female/female_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_5.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/female/female_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_3.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/female/female_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/female/female_gasp2.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/female/female_death_1.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_2.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_3.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_4.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_5.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_6.ogg')) -#define spider_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/spiderchitter.ogg'), "pain" = list('sound/voice/spiderchitter.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/death/spider/spider_death.ogg')) -#define mouse_sounds list("cough" = list('sound/effects/mouse_squeak.ogg'), "sneeze" = list('sound/effects/mouse_squeak.ogg'), "scream" = list('sound/effects/mouse_squeak_loud.ogg'), "pain" = list('sound/effects/mouse_squeak.ogg'), "gasp" = list('sound/effects/mouse_squeak.ogg'), "death" = list('sound/effects/mouse_squeak_loud.ogg')) -#define lizard_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/una_scream1.ogg','sound/effects/mob_effects/una_scream2.ogg'), "pain" = list('modular_chomp/sound/voice/pain/lizard/lizard_pain.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/death/lizard/lizard_death.ogg')) -#define vox_sounds list("cough" = list('sound/voice/shriekcough.ogg'), "sneeze" = list('sound/voice/shrieksneeze.ogg'), "scream" = list('sound/voice/shriek1.ogg'), "pain" = list('sound/voice/shriek1.ogg'), "gasp" = null, "death" = null) -#define slime_sounds list("cough" = list('sound/effects/slime_squish.ogg'), "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) -#define xeno_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/xeno/alien_roar1.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar2.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar3.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar4.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar5.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar6.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar7.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar8.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar9.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar10.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar11.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar12.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/xeno/alien_hiss1.ogg'), "death" = list('modular_chomp/sound/voice/death/xeno/xeno_death.ogg', 'modular_chomp/sound/voice/death/xeno/xeno_death2.ogg')) -#define teshari_sounds list("cough" = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg'), "sneeze" = list('sound/effects/mob_effects/tesharisneeze.ogg'), "scream" = list('sound/effects/mob_effects/teshariscream.ogg'), "pain" = null, "gasp" = null, "death" = null) -#define raccoon_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/raccoon.ogg'), "pain" = list('sound/voice/raccoon.ogg'), "gasp" = null, "death" = list('sound/voice/raccoon.ogg')) -#define metroid_sounds list("cough" = list('sound/metroid/metroid_cough.ogg'), "sneeze" = list('sound/metroid/metroid_sneeze.ogg'), "scream" = list('sound/metroid/metroid_scream.ogg'), "pain" = list('sound/metroid/metroidsee.ogg'), "gasp" = list('sound/metroid/metroid_gasp.ogg'), "death" = list('sound/metroid/metroiddeath.ogg')) -#define vulpine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/vulpine/fox_yip1.ogg', 'modular_chomp/sound/voice/scream/vulpine/fox_yip2.ogg', 'modular_chomp/sound/voice/scream/vulpine/fox_yip3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/vulpine/fox_pain1.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain2.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain3.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain4.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg')) -#define no_sounds list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) -#define use_default list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) -/* - * TBD Sound Defines below -*/ -/* -#define avian_sounds list( - "scream" = list(), - "pain" = list(), - "gasp" = list(), - "death" = list() -) -#define slime_sounds list( - "scream" = list(), - "pain" = list(), - "gasp" = list(), - "death" = list() -) -#define vulpine_sounds list( - "scream" = list(), - "pain" = list(), - "gasp" = list(), - "death" = list() -) -#define lizard_sounds list( - "scream" = list(), - "pain" = list(), - "gasp" = list(), - "death" = list() -) -*/ - -// Not sure we even really need this -// var/list/species_sounds = list() - -// Global list containing all of our sound options. -var/list/species_sound_map = list( - "Canine" = canine_sounds, - "Cervine" = cervine_sounds, - "Feline" = feline_sounds, - "Human Male" = male_generic_sounds, - "Human Female" = female_generic_sounds, - "Lizard" = lizard_sounds, - "Metroid" = metroid_sounds, - "Mouse" = mouse_sounds, - "Raccoon" = raccoon_sounds, - "Robotic" = robot_sounds, - "Slime" = slime_sounds, - "Spider" = spider_sounds, - "Teshari" = teshari_sounds, - "Vox" = vox_sounds, - "Vulpine" = vulpine_sounds, - "Xeno" = xeno_sounds, - "None" = no_sounds, - "Unset" = use_default -) - -/* // Not sure we even really need this -/hook/startup/proc/Init_species_sounds() // The entries we're checking over MUST have unique keys. - for(var/i in species_sound_map) - species_sounds |= species_sound_map[i] - return 1 -*/ - -/* - * Call this for when you need a sound from an already-identified list - IE, "Canine". pick() cannot parse procs. - * Indexes must be pre-calculated by the time it reaches here - for instance; - * var/mob/living/M = user - * get_species_sound(M.client.pref.species_sound)["scream"] will return get_species_sound("Robotic")["scream"] - * This can be paired with get_gendered_sound, like so: get_species_sound(get_gendered_sound(M))["emote"] <- get_gendered_sound will return whatever we have of the 3 valid options, and then get_species_sound will match that to the actual sound list. - * The get_species_sound proc will retrieve and return the list based on the key given - get_species_sound("Robotic")["scream"] will return list('modular_chomp/sound/voice/scream_silicon.ogg', 'modular_chomp/sound/voice/android_scream.ogg', etc) - * If you are adding new calls of this, follow the syntax of get_species_sound(species)["scream"] - you must attach ["emote"] to the end, outside the () - * If your species has a gendered sound, DON'T PANIC. Simply set the gender_specific_species_sounds var on the species to true, and when you call this, do it like so: - * get_species_sound(H.species.species_sounds_male)["emote"] // If we're male, and want an emote sound gendered correctly. -*/ -/proc/get_species_sound(var/sounds) - if(!islist(species_sound_map[sounds])) // We check here if this list actually has anything in it, or if we're about to return a null index - return null // Shitty failsafe but better than rewriting an entire litany of procs rn when I'm low on time - Rykka // list('modular_chomp/sound/voice/silence.ogg') - return species_sound_map[sounds] // Otherwise, successfully return our sound - -/* - * The following helper proc will select a species' default sounds - useful for if we're set to "Unset" - * This is ONLY called by Unset, meaning we haven't chosen a species sound. -*/ -/proc/select_default_species_sound(var/datum/preferences/pref) // Called in character setup. This is similar to check_gendered_sounds, except here we pull from the prefs. - // First, we determine if we're custom-choosing a body or if we're a base game species. - var/datum/species/valid = GLOB.all_species[pref.species] - if(valid.selects_bodytype == (SELECTS_BODYTYPE_CUSTOM || SELECTS_BODYTYPE_SHAPESHIFTER)) // Custom species or xenochimera handling here - valid = coalesce(GLOB.all_species[pref.custom_base], GLOB.all_species[pref.species]) - // Now we start getting our sounds. - if(valid.gender_specific_species_sounds) // Do we have gender-specific sounds? - if(pref.identifying_gender == FEMALE && valid.species_sounds_female) - return valid.species_sounds_female - else if(pref.identifying_gender == MALE && valid.species_sounds_male) - return valid.species_sounds_male - else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc - return valid.species_sounds - else - return valid.species_sounds - -/proc/get_gendered_sound(var/mob/living/user) // Called anywhere we need gender-specific species sounds. Gets the gender-specific sound if one exists, but otherwise, will return the species-generic sound list. - var/mob/living/carbon/human/H = user - if(ishuman(H)) - if(H.species.gender_specific_species_sounds) // Do we have gender-specific sounds? - if(H.identifying_gender == FEMALE && H.species.species_sounds_female) - return H.species.species_sounds_female - else if(H.identifying_gender == MALE && H.species.species_sounds_male) - return H.species.species_sounds_male - else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc - return H.species.species_sounds - else - return H.species.species_sounds - else - return user.species_sounds - - -// CHOMPEdit End +/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, is_global, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, preference = null, volume_channel = null) + if(Master.current_runlevel < RUNLEVEL_LOBBY) + return + + var/turf/turf_source = get_turf(source) + if(!turf_source) + return + var/area/area_source = turf_source.loc + + //allocate a channel if necessary now so its the same for everyone + channel = channel || SSsounds.random_available_channel() + + // Looping through the player list has the added bonus of working for mobs inside containers + var/sound/S = sound(get_sfx(soundin)) + var/maxdistance = (world.view + extrarange) * 2 //VOREStation Edit - 3 to 2 + var/list/listeners = player_list.Copy() + if(!ignore_walls) //these sounds don't carry through walls + for(var/mob/listen in listeners) + if(!(get_turf(listen) in hear(maxdistance,source))) + listeners -= listen + for(var/mob/M as anything in listeners) + if(!M || !M.client) + continue + var/turf/T = get_turf(M) + if(!T) + continue + var/area/A = T.loc + if((A.soundproofed || area_source.soundproofed) && (A != area_source)) + continue + var/distance = get_dist(T, turf_source) + + if(distance <= maxdistance) + if(T && T.z == turf_source.z) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, pressure_affected, S, preference, volume_channel) + +/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, channel = 0, pressure_affected = TRUE, sound/S, preference, volume_channel = null) + if(!client || ear_deaf > 0) + return + if(preference && !client.is_preference_enabled(preference)) + return + + if(!S) + S = sound(get_sfx(soundin)) + + S.wait = 0 //No queue + S.channel = channel || SSsounds.random_available_channel() + + // I'm not sure if you can modify S.volume, but I'd rather not try to find out what + // horrible things lurk in BYOND's internals, so we're just gonna do vol *= + vol *= client.get_preference_volume_channel(volume_channel) + vol *= client.get_preference_volume_channel(VOLUME_CHANNEL_MASTER) + S.volume = vol + + if(vary || frequency) //CHOMPEdit + if(frequency) + S.frequency = frequency + else + S.frequency = get_rand_frequency() + + if(isturf(turf_source)) + var/turf/T = get_turf(src) + + //sound volume falloff with distance + var/distance = get_dist(T, turf_source) + + S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff. + + //Atmosphere affects sound + var/pressure_factor = 1 + if(pressure_affected) + var/datum/gas_mixture/hearer_env = T.return_air() + var/datum/gas_mixture/source_env = turf_source.return_air() + + if(hearer_env && source_env) + var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) + if(pressure < ONE_ATMOSPHERE) + pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) + else //space + pressure_factor = 0 + + if(distance <= 1) + pressure_factor = max(pressure_factor, 0.15) //touching the source of the sound + + S.volume *= pressure_factor + //End Atmosphere affecting sound + + //Don't bother with doing anything below. + if(S.volume <= 0) + return //No sound + + //Apply a sound environment. + if(!is_global) + S.environment = get_sound_env(pressure_factor) + + var/dx = turf_source.x - T.x // Hearing from the right/left + S.x = dx + var/dz = turf_source.y - T.y // Hearing from infront/behind + S.z = dz + // The y value is for above your head, but there is no ceiling in 2d spessmens. + S.y = 1 + S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) + + src << S + +/proc/sound_to_playing_players(sound, volume = 100, vary) + sound = get_sfx(sound) + for(var/M in player_list) + if(ismob(M) && !isnewplayer(M)) + var/mob/MO = M + MO.playsound_local(get_turf(MO), sound, volume, vary, pressure_affected = FALSE) + +/mob/proc/stop_sound_channel(chan) + src << sound(null, repeat = 0, wait = 0, channel = chan) + +/mob/proc/set_sound_channel_volume(channel, volume) + var/sound/S = sound(null, FALSE, FALSE, channel, volume) + S.status = SOUND_UPDATE + src << S + +/proc/get_rand_frequency() + return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. + +/client/proc/playtitlemusic() + if(!ticker || !SSmedia_tracks.lobby_tracks.len || !media) return + if(is_preference_enabled(/datum/client_preference/play_lobby_music)) + var/datum/track/T = pick(SSmedia_tracks.lobby_tracks) + media.push_music(T.url, world.time, 0.85) + to_chat(src,"Lobby music: [T.title] by [T.artist].") + +/proc/get_sfx(soundin) + if(istext(soundin)) + switch(soundin) + if ("shatter") soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') + if ("explosion") soundin = pick('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg','sound/effects/Explosion3.ogg','sound/effects/Explosion4.ogg','sound/effects/Explosion5.ogg','sound/effects/Explosion6.ogg') + if ("sparks") soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks5.ogg','sound/effects/sparks6.ogg','sound/effects/sparks7.ogg') + if ("rustle") soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') + if ("punch") soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') + if ("clownstep") soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') + if ("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') + if ("hiss") soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') + if ("pageturn") soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') + if ("fracture") soundin = pick('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg') + if ("canopen") soundin = pick('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg') + if ("mechstep") soundin = pick('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg') + if ("thunder") soundin = pick('sound/effects/thunder/thunder1.ogg', 'sound/effects/thunder/thunder2.ogg', 'sound/effects/thunder/thunder3.ogg', 'sound/effects/thunder/thunder4.ogg', + 'sound/effects/thunder/thunder5.ogg', 'sound/effects/thunder/thunder6.ogg', 'sound/effects/thunder/thunder7.ogg', 'sound/effects/thunder/thunder8.ogg', 'sound/effects/thunder/thunder9.ogg', + 'sound/effects/thunder/thunder10.ogg') + if ("keyboard") soundin = pick('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') + if ("button") soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') + if ("switch") soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') + if ("casing_sound") soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') + if ("pickaxe") soundin = pick('sound/weapons/mine/pickaxe1.ogg', 'sound/weapons/mine/pickaxe2.ogg','sound/weapons/mine/pickaxe3.ogg','sound/weapons/mine/pickaxe4.ogg') + if("shatter") + soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') + if("explosion") + soundin = pick( + 'sound/effects/Explosion1.ogg', + 'sound/effects/Explosion2.ogg', + 'sound/effects/Explosion3.ogg', + 'sound/effects/Explosion4.ogg', + 'sound/effects/Explosion5.ogg', + 'sound/effects/Explosion6.ogg') + if("sparks") + soundin = pick( + 'sound/effects/sparks1.ogg', + 'sound/effects/sparks2.ogg', + 'sound/effects/sparks3.ogg', + 'sound/effects/sparks5.ogg', + 'sound/effects/sparks6.ogg', + 'sound/effects/sparks7.ogg') + if("rustle") + soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') + if("punch") + soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') + if("clownstep") + soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') + if("swing_hit") + soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') + if("hiss") + soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') + if("pageturn") + soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') + if("fracture") + soundin = pick('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg') + if("canopen") + soundin = pick('sound/effects/can_open1.ogg','sound/effects/can_open2.ogg','sound/effects/can_open3.ogg','sound/effects/can_open4.ogg') + if("mechstep") + soundin = pick('sound/mecha/mechstep1.ogg', 'sound/mecha/mechstep2.ogg') + if("thunder") + soundin = pick( + 'sound/effects/thunder/thunder1.ogg', + 'sound/effects/thunder/thunder2.ogg', + 'sound/effects/thunder/thunder3.ogg', + 'sound/effects/thunder/thunder4.ogg', + 'sound/effects/thunder/thunder5.ogg', + 'sound/effects/thunder/thunder6.ogg', + 'sound/effects/thunder/thunder7.ogg', + 'sound/effects/thunder/thunder8.ogg', + 'sound/effects/thunder/thunder9.ogg', + 'sound/effects/thunder/thunder10.ogg') + if("keyboard") + soundin = pick( + 'sound/effects/keyboard/keyboard1.ogg', + 'sound/effects/keyboard/keyboard2.ogg', + 'sound/effects/keyboard/keyboard3.ogg', + 'sound/effects/keyboard/keyboard4.ogg') + if("button") + soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') + if("switch") + soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') + if("casing_sound") + soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') + if("ricochet") + soundin = pick( + 'sound/weapons/effects/ric1.ogg', + 'sound/weapons/effects/ric2.ogg', + 'sound/weapons/effects/ric3.ogg', + 'sound/weapons/effects/ric4.ogg', + 'sound/weapons/effects/ric5.ogg') + if("bullet_miss") + soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') + if ("pickaxe") + soundin = pick( + 'sound/weapons/mine/pickaxe1.ogg', + 'sound/weapons/mine/pickaxe2.ogg', + 'sound/weapons/mine/pickaxe3.ogg', + 'sound/weapons/mine/pickaxe4.ogg') + //VORESTATION EDIT - vore sounds for better performance + if ("hunger_sounds") soundin = pick('sound/vore/growl1.ogg','sound/vore/growl2.ogg','sound/vore/growl3.ogg','sound/vore/growl4.ogg','sound/vore/growl5.ogg') + + if("classic_digestion_sounds") soundin = pick( + 'sound/vore/digest1.ogg','sound/vore/digest2.ogg','sound/vore/digest3.ogg','sound/vore/digest4.ogg', + 'sound/vore/digest5.ogg','sound/vore/digest6.ogg','sound/vore/digest7.ogg','sound/vore/digest8.ogg', + 'sound/vore/digest9.ogg','sound/vore/digest10.ogg','sound/vore/digest11.ogg','sound/vore/digest12.ogg') + if("classic_death_sounds") soundin = pick( + 'sound/vore/death1.ogg','sound/vore/death2.ogg','sound/vore/death3.ogg','sound/vore/death4.ogg','sound/vore/death5.ogg', + 'sound/vore/death6.ogg','sound/vore/death7.ogg','sound/vore/death8.ogg','sound/vore/death9.ogg','sound/vore/death10.ogg') + if("classic_struggle_sounds") soundin = pick('sound/vore/squish1.ogg','sound/vore/squish2.ogg','sound/vore/squish3.ogg','sound/vore/squish4.ogg') + + if("fancy_prey_struggle") soundin = pick( + 'sound/vore/sunesound/prey/struggle_01.ogg','sound/vore/sunesound/prey/struggle_02.ogg','sound/vore/sunesound/prey/struggle_03.ogg', + 'sound/vore/sunesound/prey/struggle_04.ogg','sound/vore/sunesound/prey/struggle_05.ogg') + if("fancy_digest_pred") soundin = pick( + 'sound/vore/sunesound/pred/digest_01.ogg','sound/vore/sunesound/pred/digest_02.ogg','sound/vore/sunesound/pred/digest_03.ogg', + 'sound/vore/sunesound/pred/digest_04.ogg','sound/vore/sunesound/pred/digest_05.ogg','sound/vore/sunesound/pred/digest_06.ogg', + 'sound/vore/sunesound/pred/digest_07.ogg','sound/vore/sunesound/pred/digest_08.ogg','sound/vore/sunesound/pred/digest_09.ogg', + 'sound/vore/sunesound/pred/digest_10.ogg','sound/vore/sunesound/pred/digest_11.ogg','sound/vore/sunesound/pred/digest_12.ogg', + 'sound/vore/sunesound/pred/digest_13.ogg','sound/vore/sunesound/pred/digest_14.ogg','sound/vore/sunesound/pred/digest_15.ogg', + 'sound/vore/sunesound/pred/digest_16.ogg','sound/vore/sunesound/pred/digest_17.ogg','sound/vore/sunesound/pred/digest_18.ogg') + if("fancy_death_pred") soundin = pick( + 'sound/vore/sunesound/pred/death_01.ogg','sound/vore/sunesound/pred/death_02.ogg','sound/vore/sunesound/pred/death_03.ogg', + 'sound/vore/sunesound/pred/death_04.ogg','sound/vore/sunesound/pred/death_05.ogg','sound/vore/sunesound/pred/death_06.ogg', + 'sound/vore/sunesound/pred/death_07.ogg','sound/vore/sunesound/pred/death_08.ogg','sound/vore/sunesound/pred/death_09.ogg', + 'sound/vore/sunesound/pred/death_10.ogg') + if("fancy_digest_prey") soundin = pick( + 'sound/vore/sunesound/prey/digest_01.ogg','sound/vore/sunesound/prey/digest_02.ogg','sound/vore/sunesound/prey/digest_03.ogg', + 'sound/vore/sunesound/prey/digest_04.ogg','sound/vore/sunesound/prey/digest_05.ogg','sound/vore/sunesound/prey/digest_06.ogg', + 'sound/vore/sunesound/prey/digest_07.ogg','sound/vore/sunesound/prey/digest_08.ogg','sound/vore/sunesound/prey/digest_09.ogg', + 'sound/vore/sunesound/prey/digest_10.ogg','sound/vore/sunesound/prey/digest_11.ogg','sound/vore/sunesound/prey/digest_12.ogg', + 'sound/vore/sunesound/prey/digest_13.ogg','sound/vore/sunesound/prey/digest_14.ogg','sound/vore/sunesound/prey/digest_15.ogg', + 'sound/vore/sunesound/prey/digest_16.ogg','sound/vore/sunesound/prey/digest_17.ogg','sound/vore/sunesound/prey/digest_18.ogg') + if("fancy_death_prey") soundin = pick( + 'sound/vore/sunesound/prey/death_01.ogg','sound/vore/sunesound/prey/death_02.ogg','sound/vore/sunesound/prey/death_03.ogg', + 'sound/vore/sunesound/prey/death_04.ogg','sound/vore/sunesound/prey/death_05.ogg','sound/vore/sunesound/prey/death_06.ogg', + 'sound/vore/sunesound/prey/death_07.ogg','sound/vore/sunesound/prey/death_08.ogg','sound/vore/sunesound/prey/death_09.ogg', + 'sound/vore/sunesound/prey/death_10.ogg') + if ("belches") soundin = pick( + 'sound/vore/belches/belch1.ogg','sound/vore/belches/belch2.ogg','sound/vore/belches/belch3.ogg','sound/vore/belches/belch4.ogg', + 'sound/vore/belches/belch5.ogg','sound/vore/belches/belch6.ogg','sound/vore/belches/belch7.ogg','sound/vore/belches/belch8.ogg', + 'sound/vore/belches/belch9.ogg','sound/vore/belches/belch10.ogg','sound/vore/belches/belch11.ogg','sound/vore/belches/belch12.ogg', + 'sound/vore/belches/belch13.ogg','sound/vore/belches/belch14.ogg','sound/vore/belches/belch15.ogg') + //END VORESTATION EDIT + if ("terminal_type") + soundin = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg', \ + 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', \ + 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg') + if("smcalm") + soundin = pick('sound/machines/sm/accent/normal/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg') + if("smdelam") + soundin = pick('sound/machines/sm/accent/delam/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg') + if ("generic_drop") + soundin = pick( + 'sound/items/drop/generic1.ogg', + 'sound/items/drop/generic2.ogg' ) + if ("generic_pickup") + soundin = pick( + 'sound/items/pickup/generic1.ogg', + 'sound/items/pickup/generic2.ogg', + 'sound/items/pickup/generic3.ogg') + // CHOMPedit start - Sounds for mech footsteps. + if ("powerloaderstep") + soundin = pick( + 'modular_chomp/sound/effects/mech/powerloader_step.ogg', + 'modular_chomp/sound/effects/mech/powerloader_step2.ogg') + // CHOMPedit end. + return soundin + +//Are these even used? //Yes +var/list/keyboard_sound = list ('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') +var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') +var/list/teppi_sound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg', 'sound/voice/teppi/gyooh6.ogg', 'sound/voice/teppi/snoot1.ogg', 'sound/voice/teppi/snoot2.ogg') +var/list/talk_sound = list('sound/talksounds/a.ogg','sound/talksounds/b.ogg','sound/talksounds/c.ogg','sound/talksounds/d.ogg','sound/talksounds/e.ogg','sound/talksounds/f.ogg','sound/talksounds/g.ogg','sound/talksounds/h.ogg') +var/list/emote_sound = list('sound/talksounds/me_a.ogg','sound/talksounds/me_b.ogg','sound/talksounds/me_c.ogg','sound/talksounds/me_d.ogg','sound/talksounds/me_e.ogg','sound/talksounds/me_f.ogg') +var/list/goon_speak_one_sound = list('sound/talksounds/goon/speak_1.ogg', 'sound/talksounds/goon/speak_1_ask.ogg', 'sound/talksounds/goon/speak_1_exclaim.ogg') +var/list/goon_speak_two_sound = list('sound/talksounds/goon/speak_2.ogg', 'sound/talksounds/goon/speak_2_ask.ogg', 'sound/talksounds/goon/speak_2_exclaim.ogg') +var/list/goon_speak_three_sound = list('sound/talksounds/goon/speak_3.ogg', 'sound/talksounds/goon/speak_3_ask.ogg', 'sound/talksounds/goon/speak_3_exclaim.ogg') +var/list/goon_speak_four_sound = list('sound/talksounds/goon/speak_4.ogg', 'sound/talksounds/goon/speak_4_ask.ogg', 'sound/talksounds/goon/speak_4_exclaim.ogg') +var/list/goon_speak_blub_sound = list('sound/talksounds/goon/blub.ogg', 'sound/talksounds/goon/blub_ask.ogg', 'sound/talksounds/goon/blub_exclaim.ogg') +var/list/goon_speak_bottalk_sound = list('sound/talksounds/goon/bottalk_1.ogg', 'sound/talksounds/goon/bottalk_2.ogg', 'sound/talksounds/goon/bottalk_3.ogg', 'sound/talksounds/goon/bottalk_4.wav') +var/list/goon_speak_buwoo_sound = list('sound/talksounds/goon/buwoo.ogg', 'sound/talksounds/goon/buwoo_ask.ogg', 'sound/talksounds/goon/buwoo_exclaim.ogg') +var/list/goon_speak_cow_sound = list('sound/talksounds/goon/cow.ogg', 'sound/talksounds/goon/cow_ask.ogg', 'sound/talksounds/goon/cow_exclaim.ogg') +var/list/goon_speak_lizard_sound = list('sound/talksounds/goon/lizard.ogg', 'sound/talksounds/goon/lizard_ask.ogg', 'sound/talksounds/goon/lizard_exclaim.ogg') +var/list/goon_speak_pug_sound = list('sound/talksounds/goon/pug.ogg', 'sound/talksounds/goon/pug_ask.ogg', 'sound/talksounds/goon/pug_exclaim.ogg') +var/list/goon_speak_pugg_sound = list('sound/talksounds/goon/pugg.ogg', 'sound/talksounds/goon/pugg_ask.ogg', 'sound/talksounds/goon/pugg_exclaim.ogg') +var/list/goon_speak_roach_sound = list('sound/talksounds/goon/roach.ogg', 'sound/talksounds/goon/roach_ask.ogg', 'sound/talksounds/goon/roach_exclaim.ogg') +var/list/goon_speak_skelly_sound = list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg') +var/list/wf_speak_lure_sound = list ('sound/talksounds/wf/lure_1.ogg', 'sound/talksounds/wf/lure_2.ogg', 'sound/talksounds/wf/lure_3.ogg', 'sound/talksounds/wf/lure_4.ogg', 'sound/talksounds/wf/lure_5.ogg') +var/list/wf_speak_lyst_sound = list ('sound/talksounds/wf/lyst_1.ogg', 'sound/talksounds/wf/lyst_2.ogg', 'sound/talksounds/wf/lyst_3.ogg', 'sound/talksounds/wf/lyst_4.ogg', 'sound/talksounds/wf/lyst_5.ogg', 'sound/talksounds/wf/lyst_6.ogg') +var/list/wf_speak_void_sound = list ('sound/talksounds/wf/void_1.ogg', 'sound/talksounds/wf/void_2.ogg', 'sound/talksounds/wf/void_3.ogg') +var/list/wf_speak_vomva_sound = list ('sound/talksounds/wf/vomva_1.ogg', 'sound/talksounds/wf/vomva_2.ogg', 'sound/talksounds/wf/vomva_3.ogg', 'sound/talksounds/wf/vomva_4.ogg') +//CHOMPedit start: More sounds. +var/list/xeno_speak_sound = list('modular_chomp/sound/talksounds/xeno/xenotalk.ogg', 'modular_chomp/sound/talksounds/xeno/xenotalk2.ogg', 'modular_chomp/sound/talksounds/xeno/xenotalk3.ogg') +//CHOMPedit end. + + +// CHOMPEdit Start: Species sounds. This is probably inefficient, but I'm sure someone will yell at me or just do it better later:tm: +#define canine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/canine/wolf_pain.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain2.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain3.ogg', 'modular_chomp/sound/voice/pain/canine/wolf_pain4.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg')) +#define feline_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/feline/feline_scream.ogg'), "pain" = list('modular_chomp/sound/voice/pain/feline/feline_pain.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/feline/feline_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/feline/feline_death.ogg')) +#define cervine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/cervine/cervine_scream.ogg'), "pain" = null, "gasp" = null, "death" = list('modular_chomp/sound/voice/death/cervine/cervine_death.ogg')) +#define robot_sounds list("cough" = list('sound/effects/mob_effects/m_machine_cougha.ogg', 'sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/machine_sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream_silicon.ogg', 'modular_chomp/sound/voice/android_scream.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream1.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream2.ogg', 'modular_chomp/sound/voice/scream/robotic/robot_scream3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/robotic/robot_pain1.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain2.ogg', 'modular_chomp/sound/voice/pain/robotic/robot_pain3.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/borg_deathsound.ogg')) +#define male_generic_sounds list("cough" = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream/generic/male/male_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_5.ogg', 'modular_chomp/sound/voice/scream/generic/male/male_scream_6.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/male/male_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_3.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_4.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_5.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_6.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_7.ogg', 'modular_chomp/sound/voice/pain/generic/male/male_pain_8.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/male/male_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp2.ogg', 'modular_chomp/sound/voice/gasp/generic/male/male_gasp3.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/male/male_death_1.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_2.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_3.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_4.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_5.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_6.ogg', 'modular_chomp/sound/voice/death/generic/male/male_death_7.ogg')) +#define female_generic_sounds list("cough" = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg'), "sneeze" = list('sound/effects/mob_effects/f_sneeze.ogg'), "scream" = list('modular_chomp/sound/voice/scream/generic/female/female_scream_1.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_2.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_3.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_4.ogg', 'modular_chomp/sound/voice/scream/generic/female/female_scream_5.ogg'), "pain" = list('modular_chomp/sound/voice/pain/generic/female/female_pain_1.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_2.ogg', 'modular_chomp/sound/voice/pain/generic/female/female_pain_3.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/generic/female/female_gasp1.ogg', 'modular_chomp/sound/voice/gasp/generic/female/female_gasp2.ogg'), "death" = list('modular_chomp/sound/voice/death/generic/female/female_death_1.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_2.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_3.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_4.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_5.ogg', 'modular_chomp/sound/voice/death/generic/female/female_death_6.ogg')) +#define spider_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/spiderchitter.ogg'), "pain" = list('sound/voice/spiderchitter.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/death/spider/spider_death.ogg')) +#define mouse_sounds list("cough" = list('sound/effects/mouse_squeak.ogg'), "sneeze" = list('sound/effects/mouse_squeak.ogg'), "scream" = list('sound/effects/mouse_squeak_loud.ogg'), "pain" = list('sound/effects/mouse_squeak.ogg'), "gasp" = list('sound/effects/mouse_squeak.ogg'), "death" = list('sound/effects/mouse_squeak_loud.ogg')) +#define lizard_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/una_scream1.ogg','sound/effects/mob_effects/una_scream2.ogg'), "pain" = list('modular_chomp/sound/voice/pain/lizard/lizard_pain.ogg'), "gasp" = null, "death" = list('modular_chomp/sound/voice/death/lizard/lizard_death.ogg')) +#define vox_sounds list("cough" = list('sound/voice/shriekcough.ogg'), "sneeze" = list('sound/voice/shrieksneeze.ogg'), "scream" = list('sound/voice/shriek1.ogg'), "pain" = list('sound/voice/shriek1.ogg'), "gasp" = null, "death" = null) +#define slime_sounds list("cough" = list('sound/effects/slime_squish.ogg'), "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) +#define xeno_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/xeno/alien_roar1.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar2.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar3.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar4.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar5.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar6.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar7.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar8.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar9.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar10.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar11.ogg', 'modular_chomp/sound/voice/pain/xeno/alien_roar12.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/xeno/alien_hiss1.ogg'), "death" = list('modular_chomp/sound/voice/death/xeno/xeno_death.ogg', 'modular_chomp/sound/voice/death/xeno/xeno_death2.ogg')) +#define teshari_sounds list("cough" = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg'), "sneeze" = list('sound/effects/mob_effects/tesharisneeze.ogg'), "scream" = list('sound/effects/mob_effects/teshariscream.ogg'), "pain" = null, "gasp" = null, "death" = null) +#define raccoon_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/raccoon.ogg'), "pain" = list('sound/voice/raccoon.ogg'), "gasp" = null, "death" = list('sound/voice/raccoon.ogg')) +#define metroid_sounds list("cough" = list('sound/metroid/metroid_cough.ogg'), "sneeze" = list('sound/metroid/metroid_sneeze.ogg'), "scream" = list('sound/metroid/metroid_scream.ogg'), "pain" = list('sound/metroid/metroidsee.ogg'), "gasp" = list('sound/metroid/metroid_gasp.ogg'), "death" = list('sound/metroid/metroiddeath.ogg')) +#define vulpine_sounds list("cough" = null, "sneeze" = null, "scream" = list('modular_chomp/sound/voice/scream/vulpine/fox_yip1.ogg', 'modular_chomp/sound/voice/scream/vulpine/fox_yip2.ogg', 'modular_chomp/sound/voice/scream/vulpine/fox_yip3.ogg'), "pain" = list('modular_chomp/sound/voice/pain/vulpine/fox_pain1.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain2.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain3.ogg', 'modular_chomp/sound/voice/pain/vulpine/fox_pain4.ogg'), "gasp" = list('modular_chomp/sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('modular_chomp/sound/voice/death/canine/wolf_death1.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death2.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death3.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death4.ogg', 'modular_chomp/sound/voice/death/canine/wolf_death5.ogg')) +#define no_sounds list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) +#define use_default list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null) +/* + * TBD Sound Defines below +*/ +/* +#define avian_sounds list( + "scream" = list(), + "pain" = list(), + "gasp" = list(), + "death" = list() +) +#define slime_sounds list( + "scream" = list(), + "pain" = list(), + "gasp" = list(), + "death" = list() +) +#define vulpine_sounds list( + "scream" = list(), + "pain" = list(), + "gasp" = list(), + "death" = list() +) +#define lizard_sounds list( + "scream" = list(), + "pain" = list(), + "gasp" = list(), + "death" = list() +) +*/ + +// Not sure we even really need this +// var/list/species_sounds = list() + +// Global list containing all of our sound options. +var/list/species_sound_map = list( + "Canine" = canine_sounds, + "Cervine" = cervine_sounds, + "Feline" = feline_sounds, + "Human Male" = male_generic_sounds, + "Human Female" = female_generic_sounds, + "Lizard" = lizard_sounds, + "Metroid" = metroid_sounds, + "Mouse" = mouse_sounds, + "Raccoon" = raccoon_sounds, + "Robotic" = robot_sounds, + "Slime" = slime_sounds, + "Spider" = spider_sounds, + "Teshari" = teshari_sounds, + "Vox" = vox_sounds, + "Vulpine" = vulpine_sounds, + "Xeno" = xeno_sounds, + "None" = no_sounds, + "Unset" = use_default +) + +/* // Not sure we even really need this +/hook/startup/proc/Init_species_sounds() // The entries we're checking over MUST have unique keys. + for(var/i in species_sound_map) + species_sounds |= species_sound_map[i] + return 1 +*/ + +/* + * Call this for when you need a sound from an already-identified list - IE, "Canine". pick() cannot parse procs. + * Indexes must be pre-calculated by the time it reaches here - for instance; + * var/mob/living/M = user + * get_species_sound(M.client.pref.species_sound)["scream"] will return get_species_sound("Robotic")["scream"] + * This can be paired with get_gendered_sound, like so: get_species_sound(get_gendered_sound(M))["emote"] <- get_gendered_sound will return whatever we have of the 3 valid options, and then get_species_sound will match that to the actual sound list. + * The get_species_sound proc will retrieve and return the list based on the key given - get_species_sound("Robotic")["scream"] will return list('modular_chomp/sound/voice/scream_silicon.ogg', 'modular_chomp/sound/voice/android_scream.ogg', etc) + * If you are adding new calls of this, follow the syntax of get_species_sound(species)["scream"] - you must attach ["emote"] to the end, outside the () + * If your species has a gendered sound, DON'T PANIC. Simply set the gender_specific_species_sounds var on the species to true, and when you call this, do it like so: + * get_species_sound(H.species.species_sounds_male)["emote"] // If we're male, and want an emote sound gendered correctly. +*/ +/proc/get_species_sound(var/sounds) + if(!islist(species_sound_map[sounds])) // We check here if this list actually has anything in it, or if we're about to return a null index + return null // Shitty failsafe but better than rewriting an entire litany of procs rn when I'm low on time - Rykka // list('modular_chomp/sound/voice/silence.ogg') + return species_sound_map[sounds] // Otherwise, successfully return our sound + +/* + * The following helper proc will select a species' default sounds - useful for if we're set to "Unset" + * This is ONLY called by Unset, meaning we haven't chosen a species sound. +*/ +/proc/select_default_species_sound(var/datum/preferences/pref) // Called in character setup. This is similar to check_gendered_sounds, except here we pull from the prefs. + // First, we determine if we're custom-choosing a body or if we're a base game species. + var/datum/species/valid = GLOB.all_species[pref.species] + if(valid.selects_bodytype == (SELECTS_BODYTYPE_CUSTOM || SELECTS_BODYTYPE_SHAPESHIFTER)) // Custom species or xenochimera handling here + valid = coalesce(GLOB.all_species[pref.custom_base], GLOB.all_species[pref.species]) + // Now we start getting our sounds. + if(valid.gender_specific_species_sounds) // Do we have gender-specific sounds? + if(pref.identifying_gender == FEMALE && valid.species_sounds_female) + return valid.species_sounds_female + else if(pref.identifying_gender == MALE && valid.species_sounds_male) + return valid.species_sounds_male + else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc + return valid.species_sounds + else + return valid.species_sounds + +/proc/get_gendered_sound(var/mob/living/user) // Called anywhere we need gender-specific species sounds. Gets the gender-specific sound if one exists, but otherwise, will return the species-generic sound list. + var/mob/living/carbon/human/H = user + if(ishuman(H)) + if(H.species.gender_specific_species_sounds) // Do we have gender-specific sounds? + if(H.identifying_gender == FEMALE && H.species.species_sounds_female) + return H.species.species_sounds_female + else if(H.identifying_gender == MALE && H.species.species_sounds_male) + return H.species.species_sounds_male + else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc + return H.species.species_sounds + else + return H.species.species_sounds + else + return user.species_sounds + + +// CHOMPEdit End diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 8462357163..ff8268a1ef 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -1,205 +1,205 @@ -/turf/simulated - name = "station" - var/wet = 0 - var/image/wet_overlay = null - - //Mining resources (for the large drills). - var/has_resources - var/list/resources - - var/thermite = 0 - oxygen = MOLES_O2STANDARD - nitrogen = MOLES_N2STANDARD - var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed - var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to - var/can_dirty = TRUE // If false, tile never gets dirty - var/can_start_dirty = TRUE // If false, cannot start dirty roundstart - var/dirty_prob = 2 // Chance of being dirty roundstart - var/dirt = 0 - var/special_temperature //Used for turf HE-Pipe interaction - var/climbable = FALSE //Adds proc to wall if set to TRUE on its initialization, defined here since not all walls are subtypes of wall - - var/icon_edge = 'icons/turf/outdoors_edge.dmi' //VOREStation Addition - Allows for alternative edge icon files - -// This is not great. -/turf/simulated/proc/wet_floor(var/wet_val = 1) - if(wet > 2) //Can't mop up ice - return - spawn(0) - wet = wet_val - if(wet_overlay) - cut_overlay(wet_overlay) - wet_overlay = image('icons/effects/water.dmi', icon_state = "wet_floor") - add_overlay(wet_overlay) - sleep(800) - if(wet == 2) - sleep(3200) - wet = 0 - if(wet_overlay) - cut_overlay(wet_overlay) - wet_overlay = null - -/turf/simulated/proc/freeze_floor() - if(!wet) // Water is required for it to freeze. - return - wet = 3 // icy - if(wet_overlay) - cut_overlay(wet_overlay) - wet_overlay = null - wet_overlay = image('icons/turf/overlays.dmi',src,"snowfloor") - add_overlay(wet_overlay) - spawn(5 MINUTES) - wet = 0 - if(wet_overlay) - cut_overlay(wet_overlay) - wet_overlay = null - -/turf/simulated/clean_blood() - for(var/obj/effect/decal/cleanable/blood/B in contents) - B.clean_blood() - ..() - -/turf/simulated/Initialize(mapload) - . = ..() - if(istype(loc, /area/chapel)) - holy = 1 - levelupdate() - if(climbable) - verbs += /turf/simulated/proc/climb_wall - -/turf/simulated/examine(mob/user) - . = ..() - if(climbable) - . += "This [src] looks climbable." - - -/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") - var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src - if(!tracks) - tracks = new typepath(src) - tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) - -/turf/simulated/proc/update_dirt() - if(can_dirty) - dirt = min(dirt+1, 101) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt > 50) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) - dirtoverlay.alpha = min((dirt - 50) * 5, 255) - -/turf/simulated/Entered(atom/A, atom/OL) - if(movement_disabled && usr.ckey != movement_disabled_exception) - to_chat(usr, "Movement is admin-disabled.") //This is to identify lag problems - return - - if (istype(A,/mob/living)) - var/dirtslip = FALSE //CHOMPEdit - var/mob/living/M = A - if(M.lying || M.flying || M.is_incorporeal()) //VOREStation Edit - CHOMPADD - Don't forget the phased ones. - return ..() - - if(M.dirties_floor()) - // Dirt overlays. - update_dirt() - - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - //CHOMPEdit Begin - dirtslip = H.species.dirtslip - if(H.species.mudking) - dirt = min(dirt+2, 101) - update_dirt() - //CHOMPEdit End - // Tracking blood - var/list/bloodDNA = null - var/bloodcolor="" - if(H.shoes) - var/obj/item/clothing/shoes/S = H.shoes - if(istype(S)) - S.handle_movement(src,(H.m_intent == "run" ? 1 : 0), H) // CHOMPEdit handle_movement now needs to know who is moving, for inshoe steppies - if(S.track_blood && S.blood_DNA) - bloodDNA = S.blood_DNA - bloodcolor=S.blood_color - S.track_blood-- - else - if(H.track_blood && H.feet_blood_DNA) - bloodDNA = H.feet_blood_DNA - bloodcolor = H.feet_blood_color - H.track_blood-- - - if (bloodDNA) - src.AddTracks(H.species.get_move_trail(H),bloodDNA,H.dir,0,bloodcolor) // Coming - var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) - if(istype(from) && from) - from.AddTracks(H.species.get_move_trail(H),bloodDNA,0,H.dir,bloodcolor) // Going - - bloodDNA = null - - if(src.wet || (dirtslip && (dirt > 50 || outdoors == 1))) //CHOMPEdit - - if(M.buckled || (src.wet == 1 && M.m_intent == "walk")) - return - - var/slip_dist = 1 - var/slip_stun = 6 - var/floor_type = "wet" - //CHOMPEdit Begin - if(dirtslip) - slip_stun = 10 - if(dirt > 50) - floor_type = "dirty" - else if(outdoors) - floor_type = "uneven" - if(src.wet == 0 && M.m_intent == "walk") - return - //CHOMPEdit End - switch(src.wet) - if(2) // Lube - floor_type = "slippery" - slip_dist = 4 - slip_stun = 10 - if(3) // Ice - floor_type = "icy" - slip_stun = 4 - slip_dist = 2 - - if(M.slip("the [floor_type] floor", slip_stun)) - for(var/i = 1 to slip_dist) - if(isbelly(M.loc)) //VOREEdit, Stop the slip if we're in a belly. Inspired by a chompedit, cleaned it up with isbelly instead of a variable since the var was resetting too fast. - return - step(M, M.dir) - sleep(1) - else - M.inertia_dir = 0 - else - M.inertia_dir = 0 - - ..() - -//returns 1 if made bloody, returns 0 otherwise -/turf/simulated/add_blood(mob/living/carbon/human/M as mob) - if (!..()) - return 0 - - if(istype(M)) - for(var/obj/effect/decal/cleanable/blood/B in contents) - if(!B.blood_DNA) - B.blood_DNA = list() - if(!B.blood_DNA[M.dna.unique_enzymes]) - B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - B.virus2 = virus_copylist(M.virus2) - return 1 //we bloodied the floor - blood_splatter(src,M.get_blood(M.vessel),1) - return 1 //we bloodied the floor - return 0 - -// Only adds blood on the floor -- Skie -/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/blood/oil(src) - else if(ishuman(M)) - add_blood(M) +/turf/simulated + name = "station" + var/wet = 0 + var/image/wet_overlay = null + + //Mining resources (for the large drills). + var/has_resources + var/list/resources + + var/thermite = 0 + oxygen = MOLES_O2STANDARD + nitrogen = MOLES_N2STANDARD + var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed + var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to + var/can_dirty = TRUE // If false, tile never gets dirty + var/can_start_dirty = TRUE // If false, cannot start dirty roundstart + var/dirty_prob = 2 // Chance of being dirty roundstart + var/dirt = 0 + var/special_temperature //Used for turf HE-Pipe interaction + var/climbable = FALSE //Adds proc to wall if set to TRUE on its initialization, defined here since not all walls are subtypes of wall + + var/icon_edge = 'icons/turf/outdoors_edge.dmi' //VOREStation Addition - Allows for alternative edge icon files + +// This is not great. +/turf/simulated/proc/wet_floor(var/wet_val = 1) + if(wet > 2) //Can't mop up ice + return + spawn(0) + wet = wet_val + if(wet_overlay) + cut_overlay(wet_overlay) + wet_overlay = image('icons/effects/water.dmi', icon_state = "wet_floor") + add_overlay(wet_overlay) + sleep(800) + if(wet == 2) + sleep(3200) + wet = 0 + if(wet_overlay) + cut_overlay(wet_overlay) + wet_overlay = null + +/turf/simulated/proc/freeze_floor() + if(!wet) // Water is required for it to freeze. + return + wet = 3 // icy + if(wet_overlay) + cut_overlay(wet_overlay) + wet_overlay = null + wet_overlay = image('icons/turf/overlays.dmi',src,"snowfloor") + add_overlay(wet_overlay) + spawn(5 MINUTES) + wet = 0 + if(wet_overlay) + cut_overlay(wet_overlay) + wet_overlay = null + +/turf/simulated/clean_blood() + for(var/obj/effect/decal/cleanable/blood/B in contents) + B.clean_blood() + ..() + +/turf/simulated/Initialize(mapload) + . = ..() + if(istype(loc, /area/chapel)) + holy = 1 + levelupdate() + if(climbable) + verbs += /turf/simulated/proc/climb_wall + +/turf/simulated/examine(mob/user) + . = ..() + if(climbable) + . += "This [src] looks climbable." + + +/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") + var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src + if(!tracks) + tracks = new typepath(src) + tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) + +/turf/simulated/proc/update_dirt() + if(can_dirty) + dirt = min(dirt+1, 101) + var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) + if (dirt > 50) + if (!dirtoverlay) + dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) + dirtoverlay.alpha = min((dirt - 50) * 5, 255) + +/turf/simulated/Entered(atom/A, atom/OL) + if(movement_disabled && usr.ckey != movement_disabled_exception) + to_chat(usr, "Movement is admin-disabled.") //This is to identify lag problems + return + + if (istype(A,/mob/living)) + var/dirtslip = FALSE //CHOMPEdit + var/mob/living/M = A + if(M.lying || M.flying || M.is_incorporeal()) //VOREStation Edit - CHOMPADD - Don't forget the phased ones. + return ..() + + if(M.dirties_floor()) + // Dirt overlays. + update_dirt() + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + //CHOMPEdit Begin + dirtslip = H.species.dirtslip + if(H.species.mudking) + dirt = min(dirt+2, 101) + update_dirt() + //CHOMPEdit End + // Tracking blood + var/list/bloodDNA = null + var/bloodcolor="" + if(H.shoes) + var/obj/item/clothing/shoes/S = H.shoes + if(istype(S)) + S.handle_movement(src,(H.m_intent == "run" ? 1 : 0), H) // CHOMPEdit handle_movement now needs to know who is moving, for inshoe steppies + if(S.track_blood && S.blood_DNA) + bloodDNA = S.blood_DNA + bloodcolor=S.blood_color + S.track_blood-- + else + if(H.track_blood && H.feet_blood_DNA) + bloodDNA = H.feet_blood_DNA + bloodcolor = H.feet_blood_color + H.track_blood-- + + if (bloodDNA) + src.AddTracks(H.species.get_move_trail(H),bloodDNA,H.dir,0,bloodcolor) // Coming + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(istype(from) && from) + from.AddTracks(H.species.get_move_trail(H),bloodDNA,0,H.dir,bloodcolor) // Going + + bloodDNA = null + + if(src.wet || (dirtslip && (dirt > 50 || outdoors == 1))) //CHOMPEdit + + if(M.buckled || (src.wet == 1 && M.m_intent == "walk")) + return + + var/slip_dist = 1 + var/slip_stun = 6 + var/floor_type = "wet" + //CHOMPEdit Begin + if(dirtslip) + slip_stun = 10 + if(dirt > 50) + floor_type = "dirty" + else if(outdoors) + floor_type = "uneven" + if(src.wet == 0 && M.m_intent == "walk") + return + //CHOMPEdit End + switch(src.wet) + if(2) // Lube + floor_type = "slippery" + slip_dist = 4 + slip_stun = 10 + if(3) // Ice + floor_type = "icy" + slip_stun = 4 + slip_dist = 2 + + if(M.slip("the [floor_type] floor", slip_stun)) + for(var/i = 1 to slip_dist) + if(isbelly(M.loc)) //VOREEdit, Stop the slip if we're in a belly. Inspired by a chompedit, cleaned it up with isbelly instead of a variable since the var was resetting too fast. + return + step(M, M.dir) + sleep(1) + else + M.inertia_dir = 0 + else + M.inertia_dir = 0 + + ..() + +//returns 1 if made bloody, returns 0 otherwise +/turf/simulated/add_blood(mob/living/carbon/human/M as mob) + if (!..()) + return 0 + + if(istype(M)) + for(var/obj/effect/decal/cleanable/blood/B in contents) + if(!B.blood_DNA) + B.blood_DNA = list() + if(!B.blood_DNA[M.dna.unique_enzymes]) + B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + B.virus2 = virus_copylist(M.virus2) + return 1 //we bloodied the floor + blood_splatter(src,M.get_blood(M.vessel),1) + return 1 //we bloodied the floor + return 0 + +// Only adds blood on the floor -- Skie +/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) + if( istype(M, /mob/living/carbon/alien )) + var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) + this.blood_DNA["UNKNOWN BLOOD"] = "X*" + else if( istype(M, /mob/living/silicon/robot )) + new /obj/effect/decal/cleanable/blood/oil(src) + else if(ishuman(M)) + add_blood(M) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 8e1dd1841e..3b0abc9ad9 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -1,189 +1,189 @@ -/turf/simulated/floor - name = "plating" - desc = "Unfinished flooring." - icon = 'icons/turf/flooring/plating_vr.dmi' - icon_state = "plating" - - // Damage to flooring. - var/broken - var/burnt - - // Plating data. - var/base_name = "plating" - var/base_desc = "The naked hull." - var/base_icon = 'icons/turf/flooring/plating_vr.dmi' - var/base_icon_state = "plating" - var/static/list/base_footstep_sounds = list("human" = list( - 'sound/effects/footstep/plating1.ogg', - 'sound/effects/footstep/plating2.ogg', - 'sound/effects/footstep/plating3.ogg', - 'sound/effects/footstep/plating4.ogg', - 'sound/effects/footstep/plating5.ogg')) - - var/list/old_decals = null - - // Flooring data. - var/flooring_override - var/initial_flooring - var/decl/flooring/flooring - var/mineral = DEFAULT_WALL_MATERIAL - var/can_be_plated = TRUE // This is here for inheritance's sake. Override to FALSE for turfs you don't want someone to simply slap a plating over such as hazards. - - thermal_conductivity = 0.040 - heat_capacity = 10000 - -/turf/simulated/floor/is_plating() - return (!flooring || flooring.is_plating) - -/turf/simulated/floor/Initialize(mapload, floortype) - . = ..() - if(!floortype && initial_flooring) - floortype = initial_flooring - if(floortype) - set_flooring(get_flooring_data(floortype), TRUE) - . = INITIALIZE_HINT_LATELOAD // We'll update our icons after everyone is ready - else - vorefootstep_sounds = base_vorefootstep_sounds //CHOMPstation edit - footstep_sounds = base_footstep_sounds - if(can_dirty && can_start_dirty) - if(prob(dirty_prob)) - dirt += rand(50,100) - update_dirt() //5% chance to start with dirt on a floor tile- give the janitor something to do - -/turf/simulated/floor/LateInitialize() - . = ..() - update_icon(1) - -/turf/simulated/floor/proc/swap_decals() - var/current_decals = decals - decals = old_decals - old_decals = current_decals - -/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring, var/initializing) - //make_plating(defer_icon_update = 1) - if(is_plating() && !initializing) // Plating -> Flooring - swap_decals() - flooring = newflooring - vorefootstep_sounds = newflooring.vorefootstep_sounds //CHOMPstation edit - footstep_sounds = newflooring.footstep_sounds - if(!initializing) - update_icon(1) - levelupdate() - -//This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf -//This proc auto corrects the grass tiles' siding. -/turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) - cut_overlays() - - for(var/obj/effect/decal/writing/W in src) - qdel(W) - - name = base_name - desc = base_desc - icon = base_icon - icon_state = base_icon_state - vorefootstep_sounds = base_vorefootstep_sounds //CHOMPstation edit - footstep_sounds = base_footstep_sounds - - if(!is_plating()) // Flooring -> Plating - swap_decals() - if(flooring.build_type && place_product) - new flooring.build_type(src) - var/newtype = flooring.get_plating_type() - if(newtype) // Has a custom plating type to become - set_flooring(get_flooring_data(newtype)) - else - flooring = null - - set_light(0) - broken = null - burnt = null - flooring_override = null - levelupdate() - - if(!defer_icon_update) - update_icon(1) - -/turf/simulated/floor/levelupdate() - var/floored_over = !is_plating() - for(var/obj/O in src) - O.hide(O.hides_under_flooring() && floored_over) - -/turf/simulated/floor/can_engrave() - return (!flooring || flooring.can_engrave) - -/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm -/turf/simulated/floor/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - // A wall costs four sheets to build (two for the grider and two for finishing it). - var/cost = RCD_SHEETS_PER_MATTER_UNIT * 4 - // R-walls cost five sheets, however. - if(the_rcd.make_rwalls) - cost += RCD_SHEETS_PER_MATTER_UNIT * 1 - return list( - RCD_VALUE_MODE = RCD_FLOORWALL, - RCD_VALUE_DELAY = 2 SECONDS, - RCD_VALUE_COST = cost - ) - if(RCD_AIRLOCK) - // Airlock assemblies cost four sheets. Let's just add another for the electronics/wires/etc. - return list( - RCD_VALUE_MODE = RCD_AIRLOCK, - RCD_VALUE_DELAY = 5 SECONDS, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 - ) - if(RCD_WINDOWGRILLE) - // One steel sheet for the girder (two rods, which is one sheet). - return list( - RCD_VALUE_MODE = RCD_WINDOWGRILLE, - RCD_VALUE_DELAY = 1 SECOND, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 1 - ) - if(RCD_DECONSTRUCT) - // Old RCDs made deconning the floor cost 10 units (IE, three times on full RCD). - // Now it's ten sheets worth of units (which is the same capacity-wise, three times on full RCD). - return list( - RCD_VALUE_MODE = RCD_DECONSTRUCT, - RCD_VALUE_DELAY = 5 SECONDS, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 10 - ) - return FALSE - - -/turf/simulated/floor/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, span("notice", "You build a wall.")) - ChangeTurf(/turf/simulated/wall) - var/turf/simulated/wall/T = get_turf(src) // Ref to the wall we just built. - // Apparently set_material(...) for walls requires refs to the material singletons and not strings. - // This is different from how other material objects with their own set_material(...) do it, but whatever. - var/datum/material/M = name_to_material[the_rcd.material_to_use] - T.set_material(M, the_rcd.make_rwalls ? M : null, M) - T.add_hiddenprint(user) - return TRUE - if(RCD_AIRLOCK) - if(locate(/obj/machinery/door/airlock) in src) - return FALSE // No more airlock stacking. - to_chat(user, span("notice", "You build an airlock.")) - new the_rcd.airlock_type(src) - return TRUE - if(RCD_WINDOWGRILLE) - if(locate(/obj/structure/grille) in src) - return FALSE - to_chat(user, span("notice", "You construct the grille.")) - var/obj/structure/grille/G = new(src) - G.anchored = TRUE - return TRUE - if(RCD_DECONSTRUCT) - to_chat(user, span("notice", "You deconstruct \the [src].")) - ChangeTurf(get_base_turf_by_area(src), preserve_outdoors = TRUE) - return TRUE -*/ -/turf/simulated/floor/AltClick(mob/user) - if(isliving(user)) - var/mob/living/livingUser = user - if(try_graffiti(livingUser, livingUser.get_active_hand())) - return - . = ..() +/turf/simulated/floor + name = "plating" + desc = "Unfinished flooring." + icon = 'icons/turf/flooring/plating_vr.dmi' + icon_state = "plating" + + // Damage to flooring. + var/broken + var/burnt + + // Plating data. + var/base_name = "plating" + var/base_desc = "The naked hull." + var/base_icon = 'icons/turf/flooring/plating_vr.dmi' + var/base_icon_state = "plating" + var/static/list/base_footstep_sounds = list("human" = list( + 'sound/effects/footstep/plating1.ogg', + 'sound/effects/footstep/plating2.ogg', + 'sound/effects/footstep/plating3.ogg', + 'sound/effects/footstep/plating4.ogg', + 'sound/effects/footstep/plating5.ogg')) + + var/list/old_decals = null + + // Flooring data. + var/flooring_override + var/initial_flooring + var/decl/flooring/flooring + var/mineral = DEFAULT_WALL_MATERIAL + var/can_be_plated = TRUE // This is here for inheritance's sake. Override to FALSE for turfs you don't want someone to simply slap a plating over such as hazards. + + thermal_conductivity = 0.040 + heat_capacity = 10000 + +/turf/simulated/floor/is_plating() + return (!flooring || flooring.is_plating) + +/turf/simulated/floor/Initialize(mapload, floortype) + . = ..() + if(!floortype && initial_flooring) + floortype = initial_flooring + if(floortype) + set_flooring(get_flooring_data(floortype), TRUE) + . = INITIALIZE_HINT_LATELOAD // We'll update our icons after everyone is ready + else + vorefootstep_sounds = base_vorefootstep_sounds //CHOMPstation edit + footstep_sounds = base_footstep_sounds + if(can_dirty && can_start_dirty) + if(prob(dirty_prob)) + dirt += rand(50,100) + update_dirt() //5% chance to start with dirt on a floor tile- give the janitor something to do + +/turf/simulated/floor/LateInitialize() + . = ..() + update_icon(1) + +/turf/simulated/floor/proc/swap_decals() + var/current_decals = decals + decals = old_decals + old_decals = current_decals + +/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring, var/initializing) + //make_plating(defer_icon_update = 1) + if(is_plating() && !initializing) // Plating -> Flooring + swap_decals() + flooring = newflooring + vorefootstep_sounds = newflooring.vorefootstep_sounds //CHOMPstation edit + footstep_sounds = newflooring.footstep_sounds + if(!initializing) + update_icon(1) + levelupdate() + +//This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf +//This proc auto corrects the grass tiles' siding. +/turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) + cut_overlays() + + for(var/obj/effect/decal/writing/W in src) + qdel(W) + + name = base_name + desc = base_desc + icon = base_icon + icon_state = base_icon_state + vorefootstep_sounds = base_vorefootstep_sounds //CHOMPstation edit + footstep_sounds = base_footstep_sounds + + if(!is_plating()) // Flooring -> Plating + swap_decals() + if(flooring.build_type && place_product) + new flooring.build_type(src) + var/newtype = flooring.get_plating_type() + if(newtype) // Has a custom plating type to become + set_flooring(get_flooring_data(newtype)) + else + flooring = null + + set_light(0) + broken = null + burnt = null + flooring_override = null + levelupdate() + + if(!defer_icon_update) + update_icon(1) + +/turf/simulated/floor/levelupdate() + var/floored_over = !is_plating() + for(var/obj/O in src) + O.hide(O.hides_under_flooring() && floored_over) + +/turf/simulated/floor/can_engrave() + return (!flooring || flooring.can_engrave) + +/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm +/turf/simulated/floor/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_FLOORWALL) + // A wall costs four sheets to build (two for the grider and two for finishing it). + var/cost = RCD_SHEETS_PER_MATTER_UNIT * 4 + // R-walls cost five sheets, however. + if(the_rcd.make_rwalls) + cost += RCD_SHEETS_PER_MATTER_UNIT * 1 + return list( + RCD_VALUE_MODE = RCD_FLOORWALL, + RCD_VALUE_DELAY = 2 SECONDS, + RCD_VALUE_COST = cost + ) + if(RCD_AIRLOCK) + // Airlock assemblies cost four sheets. Let's just add another for the electronics/wires/etc. + return list( + RCD_VALUE_MODE = RCD_AIRLOCK, + RCD_VALUE_DELAY = 5 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 + ) + if(RCD_WINDOWGRILLE) + // One steel sheet for the girder (two rods, which is one sheet). + return list( + RCD_VALUE_MODE = RCD_WINDOWGRILLE, + RCD_VALUE_DELAY = 1 SECOND, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 1 + ) + if(RCD_DECONSTRUCT) + // Old RCDs made deconning the floor cost 10 units (IE, three times on full RCD). + // Now it's ten sheets worth of units (which is the same capacity-wise, three times on full RCD). + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = 5 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 10 + ) + return FALSE + + +/turf/simulated/floor/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_FLOORWALL) + to_chat(user, span("notice", "You build a wall.")) + ChangeTurf(/turf/simulated/wall) + var/turf/simulated/wall/T = get_turf(src) // Ref to the wall we just built. + // Apparently set_material(...) for walls requires refs to the material singletons and not strings. + // This is different from how other material objects with their own set_material(...) do it, but whatever. + var/datum/material/M = name_to_material[the_rcd.material_to_use] + T.set_material(M, the_rcd.make_rwalls ? M : null, M) + T.add_hiddenprint(user) + return TRUE + if(RCD_AIRLOCK) + if(locate(/obj/machinery/door/airlock) in src) + return FALSE // No more airlock stacking. + to_chat(user, span("notice", "You build an airlock.")) + new the_rcd.airlock_type(src) + return TRUE + if(RCD_WINDOWGRILLE) + if(locate(/obj/structure/grille) in src) + return FALSE + to_chat(user, span("notice", "You construct the grille.")) + var/obj/structure/grille/G = new(src) + G.anchored = TRUE + return TRUE + if(RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + ChangeTurf(get_base_turf_by_area(src), preserve_outdoors = TRUE) + return TRUE +*/ +/turf/simulated/floor/AltClick(mob/user) + if(isliving(user)) + var/mob/living/livingUser = user + if(try_graffiti(livingUser, livingUser.get_active_hand())) + return + . = ..() diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 104aff268b..3886603556 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -1,296 +1,296 @@ -/turf/simulated/floor/diona - name = "biomass flooring" - icon_state = "diona" - -/turf/simulated/floor/diona/attackby() - return - -//Shuttle Floors -/obj/landed_holder - name = "landed turf holder" - desc = "holds all the info about the turf this turf 'landed on'" - var/turf/turf_type - var/turf/simulated/shuttle/my_turf - var/image/turf_image - var/list/decals - -/obj/landed_holder/New(var/location = null, var/turf/simulated/shuttle/turf) - ..(null) - my_turf = turf - -/obj/landed_holder/proc/land_on(var/turf/T) - //Gather destination information - var/obj/landed_holder/new_holder = new(null) - T.lighting_clear_overlay() //CHOMP Add - new_holder.turf_type = T.type - new_holder.dir = T.dir - new_holder.icon = T.icon - new_holder.icon_state = T.icon_state - new_holder.copy_overlays(T, TRUE) - new_holder.underlays = T.underlays.Copy() - new_holder.decals = T.decals ? T.decals.Copy() : null - - //Set the destination to be like us - var/turf/simulated/shuttle/new_dest = T.ChangeTurf(my_turf.type,,1) - my_turf.lighting_clear_overlay() //CHOMP Add - new_dest.set_dir(my_turf.dir) - new_dest.icon_state = my_turf.icon_state - new_dest.icon = my_turf.icon - new_dest.copy_overlays(my_turf, TRUE) - new_dest.underlays = my_turf.underlays.Copy() //CHOMP Edit - new_dest.decals = my_turf.decals - //Shuttle specific stuff - new_dest.interior_corner = my_turf.interior_corner - new_dest.takes_underlays = my_turf.takes_underlays - new_dest.under_turf = my_turf.under_turf - new_dest.join_flags = my_turf.join_flags - new_dest.join_group = my_turf.join_group - new_dest.lighting_build_overlay() //CHOMP Add - - // Associate the holder with the new turf. - new_holder.my_turf = new_dest - new_dest.landed_holder = new_holder - - //Update underlays if necessary (interior corners won't have changed). - if(new_dest.takes_underlays && !new_dest.interior_corner) - new_dest.underlay_update() - - return new_dest - -/obj/landed_holder/proc/leave_turf(var/turf/base_turf = null) - var/turf/new_source - //Change our source to whatever it was before - if(turf_type) - new_source = my_turf.ChangeTurf(turf_type,,1) - new_source.lighting_clear_overlay() //CHOMP Add - new_source.set_dir(dir) - new_source.icon_state = icon_state - new_source.icon = icon - new_source.copy_overlays(src, TRUE) - new_source.underlays = underlays.Copy() //CHOMP Edit - new_source.decals = decals - new_source.lighting_build_overlay() //CHOMP Add - else - new_source = my_turf.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(my_turf),,1) - - return new_source - -/turf/simulated/shuttle - name = "shuttle" - icon = 'icons/turf/shuttle_white.dmi' - thermal_conductivity = 0.05 - heat_capacity = 0 - flags = TURF_ACID_IMMUNE - - var/obj/landed_holder/landed_holder - var/interior_corner = 0 - var/takes_underlays = 0 - var/turf/under_turf //Underlay override turf path. - var/join_flags = 0 //Bitstring to represent adjacency of joining walls - var/join_group = "shuttle" //A tag for what other walls to join with. Null if you don't want them to. - var/static/list/antilight_cache - -/turf/simulated/shuttle/Initialize(mapload) - . = ..() - if(!antilight_cache) - antilight_cache = list() - for(var/diag in cornerdirs) - var/image/I = image(LIGHTING_ICON, null, icon_state = "diagonals", layer = 10, dir = diag) - I.plane = PLANE_LIGHTING - antilight_cache["[diag]"] = I - -/turf/simulated/shuttle/Destroy() - landed_holder = null - return ..() - -// For joined corners touching static lighting turfs, add an overlay to cancel out that part of our lighting overlay. -/turf/simulated/shuttle/proc/update_breaklights() - if(join_flags in cornerdirs) //We're joined at an angle - //Dynamic lighting dissolver - var/turf/T = get_step(src, turn(join_flags,180)) - if(!T || !T.dynamic_lighting || !get_area(T).dynamic_lighting) - add_overlay(antilight_cache["[join_flags]"], TRUE) - return - cut_overlay(antilight_cache["[join_flags]"], TRUE) - -/turf/simulated/shuttle/proc/underlay_update() - if(!takes_underlays) - //Basically, if it's not forced, and we don't care, don't do it. - return - - var/turf/under //May be a path or a turf - var/mutable_appearance/us = new(src) //We'll use this for changes later - us.underlays.Cut() - - //Mapper wanted something specific - if(under_turf) - under = under_turf - - //Well if this isn't our first rodeo, we know EXACTLY what we landed on, and it looks like this. - if(landed_holder && !interior_corner) - //Space gets special treatment - if(ispath(landed_holder.turf_type, /turf/space)) - var/image/spaceimage = image(landed_holder.icon, landed_holder.icon_state) - spaceimage.plane = SPACE_PLANE - underlays = list(spaceimage) - else - var/mutable_appearance/landed_on = new(landed_holder) - landed_on.layer = FLOAT_LAYER //Not turf - landed_on.plane = FLOAT_PLANE //Not turf - us.underlays = list(landed_on) - appearance = us - - spawn update_breaklights() //So that we update the breaklight overlays only after turfs are connected - return - - if(!under) - var/turf/T1 - var/turf/T2 - var/turf/T3 - - T1 = get_step(src, turn(join_flags,135)) // 45 degrees before opposite - T2 = get_step(src, turn(join_flags,225)) // 45 degrees beyond opposite - T3 = get_step(src, turn(join_flags,180)) // Opposite from the diagonal - - if(isfloor(T1) && ((T1.type == T2.type) || (T1.type == T3.type))) - under = T1 - else if(isfloor(T2) && T2.type == T3.type) - under = T2 - else if(isfloor(T3) || istype(T3,/turf/space/transit)) - under = T3 - else - under = get_base_turf_by_area(src) - - if(istype(under,/turf/simulated/shuttle)) - interior_corner = 1 //Prevents us from 'landing on grass' and having interior corners update. - - var/mutable_appearance/under_ma - - if(ispath(under)) //It's just a mapper-specified path - under_ma = new() - under_ma.icon = initial(under.icon) - under_ma.icon_state = initial(under.icon_state) - under_ma.color = initial(under.color) - - else //It's a real turf - under_ma = new(under) - - if(under_ma) - if(ispath(under,/turf/space) || istype(under,/turf/space)) //Space gets weird treatment - under_ma.icon_state = "white" - under_ma.plane = SPACE_PLANE - us.underlays = list(under_ma) - - appearance = us - - spawn update_breaklights() //So that we update the breaklight overlays only after turfs are connected - - return under - -/turf/simulated/shuttle/floor - name = "floor" - icon = 'icons/turf/flooring/shuttle.dmi' - icon_state = "floor_blue" - -/turf/simulated/shuttle/floor/red - icon_state = "floor_red" - -/turf/simulated/shuttle/floor/yellow - icon_state = "floor_yellow" - -/turf/simulated/shuttle/floor/darkred - icon_state = "floor_dred" - -/turf/simulated/shuttle/floor/purple - icon_state = "floor_purple" - -/turf/simulated/shuttle/floor/white - icon_state = "floor_white" - -/turf/simulated/shuttle/floor/black - icon_state = "floor_black" - -/turf/simulated/shuttle/floor/glass - icon_state = "floor_glass" - takes_underlays = 1 - -/turf/simulated/shuttle/floor/alien - icon_state = "alienpod1" - light_range = 3 - light_power = 0.6 - light_color = "#66ffff" // Bright cyan. - light_on = TRUE - block_tele = TRUE - -/turf/simulated/shuttle/floor/alien/Initialize() - . = ..() - icon_state = "alienpod[rand(1, 9)]" - update_light() - -/turf/simulated/shuttle/floor/alienplating - icon_state = "alienplating" - block_tele = TRUE - -/turf/simulated/shuttle/floor/alienplating/external // For the outer rim of the UFO, to avoid active edges. -// The actual temperature adjustment is defined if the SC or other future map is compiled. - -/turf/simulated/shuttle/plating - name = "plating" - icon = 'icons/turf/floors.dmi' - icon_state = "plating" - -/turf/simulated/shuttle/plating/airless - oxygen = 0 - nitrogen = 0 - -//For 'carrying' otherwise empty turfs or stuff in space turfs with you or having holes in the floor or whatever. -/turf/simulated/shuttle/plating/carry - name = "carry turf" - icon = 'icons/turf/shuttle_parts.dmi' - icon_state = "carry" - takes_underlays = 1 - blocks_air = 1 //I'd make these unsimulated but it just fucks with so much stuff so many other places. - -/turf/simulated/shuttle/plating/carry/Initialize() - . = ..() - icon_state = "carry_ingame" - -/turf/simulated/shuttle/plating/airless/carry - name = "airless carry turf" - icon = 'icons/turf/shuttle_parts.dmi' - icon_state = "carry" - takes_underlays = 1 - blocks_air = 1 - -/turf/simulated/shuttle/plating/airless/carry/Initialize() - . = ..() - icon_state = "carry_ingame" - -/turf/simulated/shuttle/plating/skipjack //Skipjack plating - oxygen = 0 - nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD - -/turf/simulated/shuttle/floor/skipjack //Skipjack floors - name = "skipjack floor" - icon_state = "floor_dred" - oxygen = 0 - nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD - -/turf/simulated/shuttle/floor/voidcraft - name = "voidcraft tiles" - icon_state = "void" - -/turf/simulated/shuttle/floor/voidcraft/dark - name = "voidcraft tiles" - icon_state = "void_dark" - -/turf/simulated/shuttle/floor/voidcraft/light - name = "voidcraft tiles" - icon_state = "void_light" - -/turf/simulated/shuttle/floor/voidcraft/external // For avoiding active edges. -// The actual temperature adjustment is defined if the SC or other future map is compiled. - -/turf/simulated/shuttle/floor/voidcraft/external/dark - -/turf/simulated/shuttle/floor/voidcraft/external/light +/turf/simulated/floor/diona + name = "biomass flooring" + icon_state = "diona" + +/turf/simulated/floor/diona/attackby() + return + +//Shuttle Floors +/obj/landed_holder + name = "landed turf holder" + desc = "holds all the info about the turf this turf 'landed on'" + var/turf/turf_type + var/turf/simulated/shuttle/my_turf + var/image/turf_image + var/list/decals + +/obj/landed_holder/New(var/location = null, var/turf/simulated/shuttle/turf) + ..(null) + my_turf = turf + +/obj/landed_holder/proc/land_on(var/turf/T) + //Gather destination information + var/obj/landed_holder/new_holder = new(null) + T.lighting_clear_overlay() //CHOMP Add + new_holder.turf_type = T.type + new_holder.dir = T.dir + new_holder.icon = T.icon + new_holder.icon_state = T.icon_state + new_holder.copy_overlays(T, TRUE) + new_holder.underlays = T.underlays.Copy() + new_holder.decals = T.decals ? T.decals.Copy() : null + + //Set the destination to be like us + var/turf/simulated/shuttle/new_dest = T.ChangeTurf(my_turf.type,,1) + my_turf.lighting_clear_overlay() //CHOMP Add + new_dest.set_dir(my_turf.dir) + new_dest.icon_state = my_turf.icon_state + new_dest.icon = my_turf.icon + new_dest.copy_overlays(my_turf, TRUE) + new_dest.underlays = my_turf.underlays.Copy() //CHOMP Edit + new_dest.decals = my_turf.decals + //Shuttle specific stuff + new_dest.interior_corner = my_turf.interior_corner + new_dest.takes_underlays = my_turf.takes_underlays + new_dest.under_turf = my_turf.under_turf + new_dest.join_flags = my_turf.join_flags + new_dest.join_group = my_turf.join_group + new_dest.lighting_build_overlay() //CHOMP Add + + // Associate the holder with the new turf. + new_holder.my_turf = new_dest + new_dest.landed_holder = new_holder + + //Update underlays if necessary (interior corners won't have changed). + if(new_dest.takes_underlays && !new_dest.interior_corner) + new_dest.underlay_update() + + return new_dest + +/obj/landed_holder/proc/leave_turf(var/turf/base_turf = null) + var/turf/new_source + //Change our source to whatever it was before + if(turf_type) + new_source = my_turf.ChangeTurf(turf_type,,1) + new_source.lighting_clear_overlay() //CHOMP Add + new_source.set_dir(dir) + new_source.icon_state = icon_state + new_source.icon = icon + new_source.copy_overlays(src, TRUE) + new_source.underlays = underlays.Copy() //CHOMP Edit + new_source.decals = decals + new_source.lighting_build_overlay() //CHOMP Add + else + new_source = my_turf.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(my_turf),,1) + + return new_source + +/turf/simulated/shuttle + name = "shuttle" + icon = 'icons/turf/shuttle_white.dmi' + thermal_conductivity = 0.05 + heat_capacity = 0 + flags = TURF_ACID_IMMUNE + + var/obj/landed_holder/landed_holder + var/interior_corner = 0 + var/takes_underlays = 0 + var/turf/under_turf //Underlay override turf path. + var/join_flags = 0 //Bitstring to represent adjacency of joining walls + var/join_group = "shuttle" //A tag for what other walls to join with. Null if you don't want them to. + var/static/list/antilight_cache + +/turf/simulated/shuttle/Initialize(mapload) + . = ..() + if(!antilight_cache) + antilight_cache = list() + for(var/diag in cornerdirs) + var/image/I = image(LIGHTING_ICON, null, icon_state = "diagonals", layer = 10, dir = diag) + I.plane = PLANE_LIGHTING + antilight_cache["[diag]"] = I + +/turf/simulated/shuttle/Destroy() + landed_holder = null + return ..() + +// For joined corners touching static lighting turfs, add an overlay to cancel out that part of our lighting overlay. +/turf/simulated/shuttle/proc/update_breaklights() + if(join_flags in cornerdirs) //We're joined at an angle + //Dynamic lighting dissolver + var/turf/T = get_step(src, turn(join_flags,180)) + if(!T || !T.dynamic_lighting || !get_area(T).dynamic_lighting) + add_overlay(antilight_cache["[join_flags]"], TRUE) + return + cut_overlay(antilight_cache["[join_flags]"], TRUE) + +/turf/simulated/shuttle/proc/underlay_update() + if(!takes_underlays) + //Basically, if it's not forced, and we don't care, don't do it. + return + + var/turf/under //May be a path or a turf + var/mutable_appearance/us = new(src) //We'll use this for changes later + us.underlays.Cut() + + //Mapper wanted something specific + if(under_turf) + under = under_turf + + //Well if this isn't our first rodeo, we know EXACTLY what we landed on, and it looks like this. + if(landed_holder && !interior_corner) + //Space gets special treatment + if(ispath(landed_holder.turf_type, /turf/space)) + var/image/spaceimage = image(landed_holder.icon, landed_holder.icon_state) + spaceimage.plane = SPACE_PLANE + underlays = list(spaceimage) + else + var/mutable_appearance/landed_on = new(landed_holder) + landed_on.layer = FLOAT_LAYER //Not turf + landed_on.plane = FLOAT_PLANE //Not turf + us.underlays = list(landed_on) + appearance = us + + spawn update_breaklights() //So that we update the breaklight overlays only after turfs are connected + return + + if(!under) + var/turf/T1 + var/turf/T2 + var/turf/T3 + + T1 = get_step(src, turn(join_flags,135)) // 45 degrees before opposite + T2 = get_step(src, turn(join_flags,225)) // 45 degrees beyond opposite + T3 = get_step(src, turn(join_flags,180)) // Opposite from the diagonal + + if(isfloor(T1) && ((T1.type == T2.type) || (T1.type == T3.type))) + under = T1 + else if(isfloor(T2) && T2.type == T3.type) + under = T2 + else if(isfloor(T3) || istype(T3,/turf/space/transit)) + under = T3 + else + under = get_base_turf_by_area(src) + + if(istype(under,/turf/simulated/shuttle)) + interior_corner = 1 //Prevents us from 'landing on grass' and having interior corners update. + + var/mutable_appearance/under_ma + + if(ispath(under)) //It's just a mapper-specified path + under_ma = new() + under_ma.icon = initial(under.icon) + under_ma.icon_state = initial(under.icon_state) + under_ma.color = initial(under.color) + + else //It's a real turf + under_ma = new(under) + + if(under_ma) + if(ispath(under,/turf/space) || istype(under,/turf/space)) //Space gets weird treatment + under_ma.icon_state = "white" + under_ma.plane = SPACE_PLANE + us.underlays = list(under_ma) + + appearance = us + + spawn update_breaklights() //So that we update the breaklight overlays only after turfs are connected + + return under + +/turf/simulated/shuttle/floor + name = "floor" + icon = 'icons/turf/flooring/shuttle.dmi' + icon_state = "floor_blue" + +/turf/simulated/shuttle/floor/red + icon_state = "floor_red" + +/turf/simulated/shuttle/floor/yellow + icon_state = "floor_yellow" + +/turf/simulated/shuttle/floor/darkred + icon_state = "floor_dred" + +/turf/simulated/shuttle/floor/purple + icon_state = "floor_purple" + +/turf/simulated/shuttle/floor/white + icon_state = "floor_white" + +/turf/simulated/shuttle/floor/black + icon_state = "floor_black" + +/turf/simulated/shuttle/floor/glass + icon_state = "floor_glass" + takes_underlays = 1 + +/turf/simulated/shuttle/floor/alien + icon_state = "alienpod1" + light_range = 3 + light_power = 0.6 + light_color = "#66ffff" // Bright cyan. + light_on = TRUE + block_tele = TRUE + +/turf/simulated/shuttle/floor/alien/Initialize() + . = ..() + icon_state = "alienpod[rand(1, 9)]" + update_light() + +/turf/simulated/shuttle/floor/alienplating + icon_state = "alienplating" + block_tele = TRUE + +/turf/simulated/shuttle/floor/alienplating/external // For the outer rim of the UFO, to avoid active edges. +// The actual temperature adjustment is defined if the SC or other future map is compiled. + +/turf/simulated/shuttle/plating + name = "plating" + icon = 'icons/turf/floors.dmi' + icon_state = "plating" + +/turf/simulated/shuttle/plating/airless + oxygen = 0 + nitrogen = 0 + +//For 'carrying' otherwise empty turfs or stuff in space turfs with you or having holes in the floor or whatever. +/turf/simulated/shuttle/plating/carry + name = "carry turf" + icon = 'icons/turf/shuttle_parts.dmi' + icon_state = "carry" + takes_underlays = 1 + blocks_air = 1 //I'd make these unsimulated but it just fucks with so much stuff so many other places. + +/turf/simulated/shuttle/plating/carry/Initialize() + . = ..() + icon_state = "carry_ingame" + +/turf/simulated/shuttle/plating/airless/carry + name = "airless carry turf" + icon = 'icons/turf/shuttle_parts.dmi' + icon_state = "carry" + takes_underlays = 1 + blocks_air = 1 + +/turf/simulated/shuttle/plating/airless/carry/Initialize() + . = ..() + icon_state = "carry_ingame" + +/turf/simulated/shuttle/plating/skipjack //Skipjack plating + oxygen = 0 + nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD + +/turf/simulated/shuttle/floor/skipjack //Skipjack floors + name = "skipjack floor" + icon_state = "floor_dred" + oxygen = 0 + nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD + +/turf/simulated/shuttle/floor/voidcraft + name = "voidcraft tiles" + icon_state = "void" + +/turf/simulated/shuttle/floor/voidcraft/dark + name = "voidcraft tiles" + icon_state = "void_dark" + +/turf/simulated/shuttle/floor/voidcraft/light + name = "voidcraft tiles" + icon_state = "void_light" + +/turf/simulated/shuttle/floor/voidcraft/external // For avoiding active edges. +// The actual temperature adjustment is defined if the SC or other future map is compiled. + +/turf/simulated/shuttle/floor/voidcraft/external/dark + +/turf/simulated/shuttle/floor/voidcraft/external/light diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 1ce2cfc8c5..2618693813 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -1,111 +1,111 @@ -/turf/simulated/floor/lava - name = "lava" - desc = "A pool of molten rock." - description_info = "Molten rock is extremly dangerous, as it will cause massive harm to anything that touches it.
                    \ - A firesuit cannot fully protect from contact with molten rock." - gender = PLURAL // So it says "That's some lava." on examine. - icon = 'icons/turf/outdoors.dmi' - icon_state = "lava" - edge_blending_priority = -1 - light_range = 2 - light_power = 0.75 - light_color = LIGHT_COLOR_LAVA - light_on = TRUE - movement_cost = 2 - can_build_into_floor = TRUE - can_be_plated = FALSE - can_dirty = FALSE - initial_flooring = /decl/flooring/lava // Defining this in case someone DOES step on lava and survive. Somehow. - flags = TURF_ACID_IMMUNE - var/datum/looping_sound/lava/soundloop - -/turf/simulated/floor/lava/outdoors - outdoors = OUTDOORS_YES - -// For maximum pedantry. -/turf/simulated/floor/lava/Initialize() - if(!is_outdoors()) - name = "magma" - update_icon() - update_light() - soundloop = new(list(src), FALSE) - soundloop.start() - return ..() - -/turf/simulated/floor/lava/Destroy() - soundloop.stop() - QDEL_NULL(soundloop) - - . = ..() - -/turf/simulated/floor/lava/make_outdoors() - ..() - name = "lava" - -/turf/simulated/floor/lava/make_indoors() - ..() - name = "magma" - -/turf/simulated/floor/lava/make_plating(place_product, defer_icon_update) - return - -/turf/simulated/floor/lava/set_flooring(decl/flooring/newflooring, initializing) - if(newflooring?.type == initial_flooring) - return ..() - return - -/turf/simulated/floor/lava/ex_act(severity) - return - -/turf/simulated/floor/lava/Entered(atom/movable/AM) - if(burn_stuff(AM)) - START_PROCESSING(SSturfs, src) - -/turf/simulated/floor/lava/hitby(atom/movable/AM) - if(burn_stuff(AM)) - START_PROCESSING(SSturfs, src) - -/turf/simulated/floor/lava/process() - if(!burn_stuff()) - return PROCESS_KILL - -/turf/simulated/floor/lava/proc/is_safe() - //if anything matching this typecache is found in the lava, we don't burn things - var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/catwalk)) - var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache) - return LAZYLEN(found_safeties) - -/turf/simulated/floor/lava/proc/burn_stuff(atom/movable/AM) - . = FALSE - - 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.throwing || O.is_incorporeal()) - continue - . = TRUE - O.lava_act() - - else if(isliving(thing)) - var/mob/living/L = thing - if(L.hovering || L.throwing || L.is_incorporeal()) // Flying over the lava. We're just gonna pretend convection doesn't exist. - continue - . = TRUE - L.lava_act() - -// Lava that does nothing at all. -/turf/simulated/floor/lava/harmless/burn_stuff(atom/movable/AM) - return FALSE - -// Tells AI mobs to not suicide by pathing into lava if it would hurt them. -/turf/simulated/floor/lava/is_safe_to_enter(mob/living/L) - if(!is_safe() && !L.hovering) - return FALSE +/turf/simulated/floor/lava + name = "lava" + desc = "A pool of molten rock." + description_info = "Molten rock is extremly dangerous, as it will cause massive harm to anything that touches it.
                    \ + A firesuit cannot fully protect from contact with molten rock." + gender = PLURAL // So it says "That's some lava." on examine. + icon = 'icons/turf/outdoors.dmi' + icon_state = "lava" + edge_blending_priority = -1 + light_range = 2 + light_power = 0.75 + light_color = LIGHT_COLOR_LAVA + light_on = TRUE + movement_cost = 2 + can_build_into_floor = TRUE + can_be_plated = FALSE + can_dirty = FALSE + initial_flooring = /decl/flooring/lava // Defining this in case someone DOES step on lava and survive. Somehow. + flags = TURF_ACID_IMMUNE + var/datum/looping_sound/lava/soundloop + +/turf/simulated/floor/lava/outdoors + outdoors = OUTDOORS_YES + +// For maximum pedantry. +/turf/simulated/floor/lava/Initialize() + if(!is_outdoors()) + name = "magma" + update_icon() + update_light() + soundloop = new(list(src), FALSE) + soundloop.start() + return ..() + +/turf/simulated/floor/lava/Destroy() + soundloop.stop() + QDEL_NULL(soundloop) + + . = ..() + +/turf/simulated/floor/lava/make_outdoors() + ..() + name = "lava" + +/turf/simulated/floor/lava/make_indoors() + ..() + name = "magma" + +/turf/simulated/floor/lava/make_plating(place_product, defer_icon_update) + return + +/turf/simulated/floor/lava/set_flooring(decl/flooring/newflooring, initializing) + if(newflooring?.type == initial_flooring) + return ..() + return + +/turf/simulated/floor/lava/ex_act(severity) + return + +/turf/simulated/floor/lava/Entered(atom/movable/AM) + if(burn_stuff(AM)) + START_PROCESSING(SSturfs, src) + +/turf/simulated/floor/lava/hitby(atom/movable/AM) + if(burn_stuff(AM)) + START_PROCESSING(SSturfs, src) + +/turf/simulated/floor/lava/process() + if(!burn_stuff()) + return PROCESS_KILL + +/turf/simulated/floor/lava/proc/is_safe() + //if anything matching this typecache is found in the lava, we don't burn things + var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/catwalk)) + var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache) + return LAZYLEN(found_safeties) + +/turf/simulated/floor/lava/proc/burn_stuff(atom/movable/AM) + . = FALSE + + 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.throwing || O.is_incorporeal()) + continue + . = TRUE + O.lava_act() + + else if(isliving(thing)) + var/mob/living/L = thing + if(L.hovering || L.throwing || L.is_incorporeal()) // Flying over the lava. We're just gonna pretend convection doesn't exist. + continue + . = TRUE + L.lava_act() + +// Lava that does nothing at all. +/turf/simulated/floor/lava/harmless/burn_stuff(atom/movable/AM) + return FALSE + +// Tells AI mobs to not suicide by pathing into lava if it would hurt them. +/turf/simulated/floor/lava/is_safe_to_enter(mob/living/L) + if(!is_safe() && !L.hovering) + return FALSE return ..() \ No newline at end of file diff --git a/code/game/turfs/simulated/outdoors/outdoors_vr.dm b/code/game/turfs/simulated/outdoors/outdoors_vr.dm index b822729165..39b35b2d92 100644 --- a/code/game/turfs/simulated/outdoors/outdoors_vr.dm +++ b/code/game/turfs/simulated/outdoors/outdoors_vr.dm @@ -1,168 +1,168 @@ -/turf/simulated/floor/tiled/asteroid_steel/outdoors - name = "weathered tiles" - desc = "Old tiles left out in the elements." - outdoors = OUTDOORS_YES - edge_blending_priority = 1 - -/turf/simulated/floor/outdoors/newdirt - name = "dirt" - desc = "Looks dirty." - icon = 'icons/turf/outdoors_vr.dmi' - icon_state = "dirt0" - edge_blending_priority = 2 - initial_flooring = /decl/flooring/outdoors/newdirt - -/decl/flooring/outdoors/newdirt - name = "dirt" - desc = "Looks dirty." - icon = 'icons/turf/outdoors_vr.dmi' - icon_base = "dirt0" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg', - 'sound/effects/footstep/MedDirt1.ogg', - 'sound/effects/footstep/MedDirt2.ogg', - 'sound/effects/footstep/MedDirt3.ogg', - 'sound/effects/footstep/MedDirt4.ogg')) - -/turf/simulated/floor/outdoors/newdirt/Initialize(mapload) - var/possibledirts = list( - "dirt0" = 150, - "dirt1" = 25, - "dirt2" = 25, - "dirt3" = 25, - "dirt4" = 25, - "dirt5" = 10, - "dirt6" = 10, - "dirt7" = 3, - "dirt8" = 3, - "dirt9" = 1 - ) - flooring_override = pickweight(possibledirts) - return ..() - - -/turf/simulated/floor/outdoors/newdirt_nograss - name = "dirt" - desc = "Looks dirty." - icon = 'icons/turf/outdoors_vr.dmi' - icon_state = "dirt0" - edge_blending_priority = 2 - initial_flooring = /decl/flooring/outdoors/newdirt - -/turf/simulated/floor/outdoors/newdirt_nograss/Initialize(mapload) - var/possibledirts = list( - "dirt0" = 200, - "dirt6" = 20, - "dirt7" = 3, - "dirt8" = 3, - "dirt9" = 1 - ) - flooring_override = pickweight(possibledirts) - return ..() - -/turf/simulated/floor/outdoors/sidewalk - name = "sidewalk" - desc = "Concrete shaped into a path!" - icon = 'icons/turf/outdoors_vr.dmi' - icon_state = "sidewalk" - edge_blending_priority = -1 - movement_cost = -0.5 - initial_flooring = /decl/flooring/outdoors/sidewalk - can_dirty = TRUE - -/decl/flooring/outdoors/sidewalk - name = "sidewalk" - desc = "Concrete shaped into a path!" - icon = 'icons/turf/outdoors_vr.dmi' - icon_base = "sidewalk" - has_damage_range = 2 - damage_temperature = T0C+1400 - flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN - build_type = /obj/item/stack/tile/floor/sidewalk - can_paint = 1 - can_engrave = FALSE - - footstep_sounds = list("human" = list( - 'sound/effects/footstep/LightStone1.ogg', - 'sound/effects/footstep/LightStone2.ogg', - 'sound/effects/footstep/LightStone3.ogg', - 'sound/effects/footstep/LightStone4.ogg',)) - -/obj/item/stack/tile/floor/sidewalk - name = "sidewalk tile" - singular_name = "floor tile" - desc = "A stone tile fit for covering a section of floor." - icon_state = "tile" - force = 6.0 - matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) - throwforce = 15.0 - throw_speed = 5 - throw_range = 20 - no_variants = FALSE - -/turf/simulated/floor/outdoors/sidewalk/Initialize(mapload) - var/possibledirts = list( - "[initial(icon_state)]" = 150, - "[initial(icon_state)]1" = 3, - "[initial(icon_state)]2" = 3, - "[initial(icon_state)]3" = 3, - "[initial(icon_state)]4" = 3, - "[initial(icon_state)]5" = 3, - "[initial(icon_state)]6" = 2, - "[initial(icon_state)]7" = 2, - "[initial(icon_state)]8" = 2, - "[initial(icon_state)]9" = 2, - "[initial(icon_state)]10" = 2 - ) - flooring_override = pickweight(possibledirts) - return ..() - -/turf/simulated/floor/outdoors/sidewalk/side - icon_state = "side-walk" - initial_flooring = /decl/flooring/outdoors/sidewalk/side - - -/decl/flooring/outdoors/sidewalk/side - icon_base = "sidewalk" - build_type = /obj/item/stack/tile/floor/sidewalk/side - -/obj/item/stack/tile/floor/sidewalk/side - -/turf/simulated/floor/outdoors/sidewalk/slab - icon_state = "slab" - initial_flooring = /decl/flooring/outdoors/sidewalk/slab - -/decl/flooring/outdoors/sidewalk/slab - icon_base = "slab" - build_type = /obj/item/stack/tile/floor/sidewalk/slab - -/obj/item/stack/tile/floor/sidewalk/slab/ - -/turf/simulated/floor/outdoors/sidewalk/slab/city - icon_state = "cityslab" - initial_flooring = /decl/flooring/outdoors/sidewalk/slab/city - -/decl/flooring/outdoors/sidewalk/slab/city - icon_base = "cityslab" - build_type = /obj/item/stack/tile/floor/sidewalk/slab/city - -/obj/item/stack/tile/floor/sidewalk/slab/city - -/obj/item/stack/tile/floor/concrete //Proper concrete tile. - name = "concrete tile" - singular_name = "floor tile" - desc = "A concrete tile fit for covering a section of floor." - icon_state = "tile" - force = 6.0 - matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) - throwforce = 15.0 - throw_speed = 5 - throw_range = 20 - no_variants = TRUE - -/decl/flooring/concrete - build_type = /obj/item/stack/tile/floor/concrete +/turf/simulated/floor/tiled/asteroid_steel/outdoors + name = "weathered tiles" + desc = "Old tiles left out in the elements." + outdoors = OUTDOORS_YES + edge_blending_priority = 1 + +/turf/simulated/floor/outdoors/newdirt + name = "dirt" + desc = "Looks dirty." + icon = 'icons/turf/outdoors_vr.dmi' + icon_state = "dirt0" + edge_blending_priority = 2 + initial_flooring = /decl/flooring/outdoors/newdirt + +/decl/flooring/outdoors/newdirt + name = "dirt" + desc = "Looks dirty." + icon = 'icons/turf/outdoors_vr.dmi' + icon_base = "dirt0" + footstep_sounds = list("human" = list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg', + 'sound/effects/footstep/MedDirt1.ogg', + 'sound/effects/footstep/MedDirt2.ogg', + 'sound/effects/footstep/MedDirt3.ogg', + 'sound/effects/footstep/MedDirt4.ogg')) + +/turf/simulated/floor/outdoors/newdirt/Initialize(mapload) + var/possibledirts = list( + "dirt0" = 150, + "dirt1" = 25, + "dirt2" = 25, + "dirt3" = 25, + "dirt4" = 25, + "dirt5" = 10, + "dirt6" = 10, + "dirt7" = 3, + "dirt8" = 3, + "dirt9" = 1 + ) + flooring_override = pickweight(possibledirts) + return ..() + + +/turf/simulated/floor/outdoors/newdirt_nograss + name = "dirt" + desc = "Looks dirty." + icon = 'icons/turf/outdoors_vr.dmi' + icon_state = "dirt0" + edge_blending_priority = 2 + initial_flooring = /decl/flooring/outdoors/newdirt + +/turf/simulated/floor/outdoors/newdirt_nograss/Initialize(mapload) + var/possibledirts = list( + "dirt0" = 200, + "dirt6" = 20, + "dirt7" = 3, + "dirt8" = 3, + "dirt9" = 1 + ) + flooring_override = pickweight(possibledirts) + return ..() + +/turf/simulated/floor/outdoors/sidewalk + name = "sidewalk" + desc = "Concrete shaped into a path!" + icon = 'icons/turf/outdoors_vr.dmi' + icon_state = "sidewalk" + edge_blending_priority = -1 + movement_cost = -0.5 + initial_flooring = /decl/flooring/outdoors/sidewalk + can_dirty = TRUE + +/decl/flooring/outdoors/sidewalk + name = "sidewalk" + desc = "Concrete shaped into a path!" + icon = 'icons/turf/outdoors_vr.dmi' + icon_base = "sidewalk" + has_damage_range = 2 + damage_temperature = T0C+1400 + flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN + build_type = /obj/item/stack/tile/floor/sidewalk + can_paint = 1 + can_engrave = FALSE + + footstep_sounds = list("human" = list( + 'sound/effects/footstep/LightStone1.ogg', + 'sound/effects/footstep/LightStone2.ogg', + 'sound/effects/footstep/LightStone3.ogg', + 'sound/effects/footstep/LightStone4.ogg',)) + +/obj/item/stack/tile/floor/sidewalk + name = "sidewalk tile" + singular_name = "floor tile" + desc = "A stone tile fit for covering a section of floor." + icon_state = "tile" + force = 6.0 + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) + throwforce = 15.0 + throw_speed = 5 + throw_range = 20 + no_variants = FALSE + +/turf/simulated/floor/outdoors/sidewalk/Initialize(mapload) + var/possibledirts = list( + "[initial(icon_state)]" = 150, + "[initial(icon_state)]1" = 3, + "[initial(icon_state)]2" = 3, + "[initial(icon_state)]3" = 3, + "[initial(icon_state)]4" = 3, + "[initial(icon_state)]5" = 3, + "[initial(icon_state)]6" = 2, + "[initial(icon_state)]7" = 2, + "[initial(icon_state)]8" = 2, + "[initial(icon_state)]9" = 2, + "[initial(icon_state)]10" = 2 + ) + flooring_override = pickweight(possibledirts) + return ..() + +/turf/simulated/floor/outdoors/sidewalk/side + icon_state = "side-walk" + initial_flooring = /decl/flooring/outdoors/sidewalk/side + + +/decl/flooring/outdoors/sidewalk/side + icon_base = "sidewalk" + build_type = /obj/item/stack/tile/floor/sidewalk/side + +/obj/item/stack/tile/floor/sidewalk/side + +/turf/simulated/floor/outdoors/sidewalk/slab + icon_state = "slab" + initial_flooring = /decl/flooring/outdoors/sidewalk/slab + +/decl/flooring/outdoors/sidewalk/slab + icon_base = "slab" + build_type = /obj/item/stack/tile/floor/sidewalk/slab + +/obj/item/stack/tile/floor/sidewalk/slab/ + +/turf/simulated/floor/outdoors/sidewalk/slab/city + icon_state = "cityslab" + initial_flooring = /decl/flooring/outdoors/sidewalk/slab/city + +/decl/flooring/outdoors/sidewalk/slab/city + icon_base = "cityslab" + build_type = /obj/item/stack/tile/floor/sidewalk/slab/city + +/obj/item/stack/tile/floor/sidewalk/slab/city + +/obj/item/stack/tile/floor/concrete //Proper concrete tile. + name = "concrete tile" + singular_name = "floor tile" + desc = "A concrete tile fit for covering a section of floor." + icon_state = "tile" + force = 6.0 + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) + throwforce = 15.0 + throw_speed = 5 + throw_range = 20 + no_variants = TRUE + +/decl/flooring/concrete + build_type = /obj/item/stack/tile/floor/concrete diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index e6a810e9a6..3118aa5e03 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -1,415 +1,415 @@ -//Interactions -/turf/simulated/wall/proc/toggle_open(var/mob/user) - - if(can_open == WALL_OPENING) - return - - SSradiation.resistance_cache.Remove(src) - - if(density) - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_opening", src) - density = FALSE - blocks_air = ZONE_BLOCKED - update_icon() - update_air() - set_light(0) - src.blocks_air = 0 - set_opacity(0) - for(var/turf/simulated/turf in loc) - air_master.mark_for_update(turf) - else - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_closing", src) - density = TRUE - blocks_air = AIR_BLOCKED - update_icon() - update_air() - set_light(1) - src.blocks_air = 1 - set_opacity(1) - for(var/turf/simulated/turf in loc) - air_master.mark_for_update(turf) - - can_open = WALL_CAN_OPEN - update_icon() - -/turf/simulated/wall/proc/update_air() - if(!air_master) - return - - for(var/turf/simulated/turf in loc) - update_thermal(turf) - air_master.mark_for_update(turf) - - -/turf/simulated/wall/proc/update_thermal(var/turf/simulated/source) - if(istype(source)) - if(density && opacity) - source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - else - source.thermal_conductivity = initial(source.thermal_conductivity) - -/turf/simulated/wall/proc/fail_smash(var/mob/user) - var/damage_lower = 25 - var/damage_upper = 75 - if(isanimal(user)) - var/mob/living/simple_mob/S = user - playsound(src, S.attack_sound, 75, 1) - if(!(S.melee_damage_upper >= STRUCTURE_MIN_DAMAGE_THRESHOLD * 2)) - to_chat(user, "You bounce against the wall.") - return FALSE - damage_lower = S.melee_damage_lower - damage_upper = S.melee_damage_upper - to_chat(user, "You smash against the wall!") - user.do_attack_animation(src) - take_damage(rand(damage_lower,damage_upper)) - -/turf/simulated/wall/proc/success_smash(var/mob/user) - to_chat(user, "You smash through the wall!") - user.do_attack_animation(src) - if(isanimal(user)) - var/mob/living/simple_mob/S = user - playsound(src, S.attack_sound, 75, 1) - spawn(1) - dismantle_wall(1) - -/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting) - - if(rotting) - if(reinf_material) - to_chat(user, "\The [reinf_material.display_name] feels porous and crumbly.") - else - to_chat(user, "\The [material.display_name] crumbles under your touch!") - dismantle_wall() - return 1 - - if(!can_open) - if(!material.wall_touch_special(src, user)) - to_chat(user, "You push the wall, but nothing happens.") - playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) - else - toggle_open(user) - return 0 - - -/turf/simulated/wall/attack_hand(var/mob/user) - - radiate() - add_fingerprint(user) - user.setClickCooldown(user.get_attack_speed()) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if (HULK in user.mutations) - if (rotting || !prob(material.hardness)) - success_smash(user) - else - fail_smash(user) - return 1 - - try_touch(user, rotting) - -/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message) - - radiate() - user.setClickCooldown(user.get_attack_speed()) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD * 2) - try_touch(user, rotting) - return - - if(rotting) - return success_smash(user) - - if(reinf_material) - if(damage >= max(material.hardness, reinf_material.hardness) ) - return success_smash(user) - else if(damage >= material.hardness) - return success_smash(user) - return fail_smash(user) - -/turf/simulated/wall/attackby(var/obj/item/weapon/W, var/mob/user) - - user.setClickCooldown(user.get_attack_speed(W)) - -/* -//As with the floors, only this time it works AND tries pushing the wall after it's done. - if(!construction_stage && user.a_intent == I_HELP) - if(try_graffiti(user,W)) - return -*/ - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - - //get the user's location - if(!istype(user.loc, /turf)) - return //can't do this stuff whilst inside objects and such - - if(W) - radiate() - if(is_hot(W)) - burn(is_hot(W)) - - if(istype(W, /obj/item/device/electronic_assembly/wallmount)) - var/obj/item/device/electronic_assembly/wallmount/IC = W - IC.mount_assembly(src, user) - return - - if(istype(W, /obj/item/stack/tile/roofing)) - var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather - var/turf/T = GetAbove(src) - var/obj/item/stack/tile/roofing/R = W - - // Place plating over a wall - if(T) - if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) - if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating - T.ReplaceWithLattice() - T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") - expended_tile = TRUE - else - to_chat(user, "There aren't any holes in the ceiling to patch here.") - return - - // Create a ceiling to shield from the weather - if(is_outdoors()) - if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one - make_indoors() - if(!expended_tile) // Would've already played a sound - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - user.visible_message("[user] roofs \the [src], shielding it from the elements.", "You roof \the [src] tile, shielding it from the elements.") - return - - - if(locate(/obj/effect/overlay/wallrot) in src) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - to_chat(user, "You burn away the fungi with \the [WT].") - playsound(src, WT.usesound, 10, 1) - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - return - else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) - to_chat(user, "\The [src] crumbles away under the force of your [W.name].") - src.dismantle_wall(1) - return - - //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects - if(thermite) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - thermitemelt(user) - return - - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - thermitemelt(user) - return - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/obj/item/weapon/melee/energy/blade/EB = W - - EB.spark_system.start() - to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") - playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - - thermitemelt(user) - return - - var/turf/T = user.loc //get user's location for delay checks - - if(damage && W.has_tool_quality(TOOL_WELDER)) - - var/obj/item/weapon/weldingtool/WT = W.get_welder() - - if(!WT.isOn()) - return - - if(WT.remove_fuel(0,user)) - to_chat(user, "You start repairing the damage to [src].") - playsound(src, WT.usesound, 100, 1) - if(do_after(user, max(5, damage / 5) * WT.toolspeed) && WT && WT.isOn()) - to_chat(user, "You finish repairing the damage to [src].") - take_damage(-damage) - else - to_chat(user, "You need more welding fuel to complete this task.") - return - user.update_examine_panel(src) - return - - // Basic dismantling. - //var/dismantle_toolspeed = 0 - if(isnull(construction_stage) || !reinf_material) - - var/cut_delay = 60 - material.cut_delay - var/dismantle_verb - var/dismantle_sound - - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.isOn()) - return - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return - dismantle_verb = "cutting" - dismantle_sound = W.usesound - // cut_delay *= 0.7 // Tools themselves now can shorten the time it takes. - else if(istype(W,/obj/item/weapon/melee/energy/blade)) - dismantle_sound = "sparks" - dismantle_verb = "slicing" - //dismantle_toolspeed = 1 - cut_delay *= 0.5 - else if(istype(W,/obj/item/weapon/pickaxe)) - var/obj/item/weapon/pickaxe/P = W - dismantle_verb = P.drill_verb - dismantle_sound = P.drill_sound - cut_delay -= P.digspeed - - if(dismantle_verb) - - to_chat(user, "You begin [dismantle_verb] through the outer plating.") - if(dismantle_sound) - playsound(src, dismantle_sound, 100, 1) - - if(cut_delay < 0) - cut_delay = 0 - - if(!do_after(user,cut_delay * W.toolspeed)) - return - - to_chat(user, "You remove the outer plating.") - dismantle_wall() - user.visible_message("The wall was torn open by [user]!") - return - - //Reinforced dismantling. - else - switch(construction_stage) - if(6) - if (W.has_tool_quality(TOOL_WIRECUTTER)) - playsound(src, W.usesound, 100, 1) - construction_stage = 5 - user.update_examine_panel(src) - to_chat(user, "You cut through the outer grille.") - update_icon() - return - if(5) - if (W.has_tool_quality(TOOL_SCREWDRIVER)) - to_chat(user, "You begin removing the support lines.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 5) - return - construction_stage = 4 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You unscrew the support lines.") - return - else if (W.has_tool_quality(TOOL_WIRECUTTER)) - construction_stage = 6 - user.update_examine_panel(src) - to_chat(user, "You mend the outer grille.") - playsound(src, W.usesound, 100, 1) - update_icon() - return - if(4) - var/cut_cover - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.isOn()) - return - if(WT.remove_fuel(0,user)) - cut_cover=1 - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the metal cover.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user, 60 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) - return - construction_stage = 3 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You press firmly on the cover, dislodging it.") - return - else if (W.has_tool_quality(TOOL_SCREWDRIVER)) - to_chat(user, "You begin screwing down the support lines.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) - return - construction_stage = 5 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You screw down the support lines.") - return - if(3) - if (W.has_tool_quality(TOOL_CROWBAR)) - to_chat(user, "You struggle to pry off the cover.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 3) - return - construction_stage = 2 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You pry off the cover.") - return - if(2) - if (W.has_tool_quality(TOOL_WRENCH)) - to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 2) - return - construction_stage = 1 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You remove the bolts anchoring the support rods.") - return - if(1) - var/cut_cover - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - cut_cover=1 - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the support rods.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,70 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 1) - return - construction_stage = 0 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You slice through the support rods.") - return - if(0) - if(W.has_tool_quality(TOOL_CROWBAR)) - to_chat(user, "You struggle to pry off the outer sheath.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) - return - if(user.loc == T && user.get_active_hand() == W ) - to_chat(user, "You pry off the outer sheath.") - dismantle_wall() - return - - if(istype(W,/obj/item/frame)) - var/obj/item/frame/F = W - F.try_build(src, user) - return - - else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) - return attack_hand(user) - - +//Interactions +/turf/simulated/wall/proc/toggle_open(var/mob/user) + + if(can_open == WALL_OPENING) + return + + SSradiation.resistance_cache.Remove(src) + + if(density) + can_open = WALL_OPENING + //flick("[material.icon_base]fwall_opening", src) + density = FALSE + blocks_air = ZONE_BLOCKED + update_icon() + update_air() + set_light(0) + src.blocks_air = 0 + set_opacity(0) + for(var/turf/simulated/turf in loc) + air_master.mark_for_update(turf) + else + can_open = WALL_OPENING + //flick("[material.icon_base]fwall_closing", src) + density = TRUE + blocks_air = AIR_BLOCKED + update_icon() + update_air() + set_light(1) + src.blocks_air = 1 + set_opacity(1) + for(var/turf/simulated/turf in loc) + air_master.mark_for_update(turf) + + can_open = WALL_CAN_OPEN + update_icon() + +/turf/simulated/wall/proc/update_air() + if(!air_master) + return + + for(var/turf/simulated/turf in loc) + update_thermal(turf) + air_master.mark_for_update(turf) + + +/turf/simulated/wall/proc/update_thermal(var/turf/simulated/source) + if(istype(source)) + if(density && opacity) + source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT + else + source.thermal_conductivity = initial(source.thermal_conductivity) + +/turf/simulated/wall/proc/fail_smash(var/mob/user) + var/damage_lower = 25 + var/damage_upper = 75 + if(isanimal(user)) + var/mob/living/simple_mob/S = user + playsound(src, S.attack_sound, 75, 1) + if(!(S.melee_damage_upper >= STRUCTURE_MIN_DAMAGE_THRESHOLD * 2)) + to_chat(user, "You bounce against the wall.") + return FALSE + damage_lower = S.melee_damage_lower + damage_upper = S.melee_damage_upper + to_chat(user, "You smash against the wall!") + user.do_attack_animation(src) + take_damage(rand(damage_lower,damage_upper)) + +/turf/simulated/wall/proc/success_smash(var/mob/user) + to_chat(user, "You smash through the wall!") + user.do_attack_animation(src) + if(isanimal(user)) + var/mob/living/simple_mob/S = user + playsound(src, S.attack_sound, 75, 1) + spawn(1) + dismantle_wall(1) + +/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting) + + if(rotting) + if(reinf_material) + to_chat(user, "\The [reinf_material.display_name] feels porous and crumbly.") + else + to_chat(user, "\The [material.display_name] crumbles under your touch!") + dismantle_wall() + return 1 + + if(!can_open) + if(!material.wall_touch_special(src, user)) + to_chat(user, "You push the wall, but nothing happens.") + playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) + else + toggle_open(user) + return 0 + + +/turf/simulated/wall/attack_hand(var/mob/user) + + radiate() + add_fingerprint(user) + user.setClickCooldown(user.get_attack_speed()) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if (HULK in user.mutations) + if (rotting || !prob(material.hardness)) + success_smash(user) + else + fail_smash(user) + return 1 + + try_touch(user, rotting) + +/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message) + + radiate() + user.setClickCooldown(user.get_attack_speed()) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD * 2) + try_touch(user, rotting) + return + + if(rotting) + return success_smash(user) + + if(reinf_material) + if(damage >= max(material.hardness, reinf_material.hardness) ) + return success_smash(user) + else if(damage >= material.hardness) + return success_smash(user) + return fail_smash(user) + +/turf/simulated/wall/attackby(var/obj/item/weapon/W, var/mob/user) + + user.setClickCooldown(user.get_attack_speed(W)) + +/* +//As with the floors, only this time it works AND tries pushing the wall after it's done. + if(!construction_stage && user.a_intent == I_HELP) + if(try_graffiti(user,W)) + return +*/ + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + + //get the user's location + if(!istype(user.loc, /turf)) + return //can't do this stuff whilst inside objects and such + + if(W) + radiate() + if(is_hot(W)) + burn(is_hot(W)) + + if(istype(W, /obj/item/device/electronic_assembly/wallmount)) + var/obj/item/device/electronic_assembly/wallmount/IC = W + IC.mount_assembly(src, user) + return + + if(istype(W, /obj/item/stack/tile/roofing)) + var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather + var/turf/T = GetAbove(src) + var/obj/item/stack/tile/roofing/R = W + + // Place plating over a wall + if(T) + if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) + if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating + T.ReplaceWithLattice() + T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") + expended_tile = TRUE + else + to_chat(user, "There aren't any holes in the ceiling to patch here.") + return + + // Create a ceiling to shield from the weather + if(is_outdoors()) + if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one + make_indoors() + if(!expended_tile) // Would've already played a sound + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + user.visible_message("[user] roofs \the [src], shielding it from the elements.", "You roof \the [src] tile, shielding it from the elements.") + return + + + if(locate(/obj/effect/overlay/wallrot) in src) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + to_chat(user, "You burn away the fungi with \the [WT].") + playsound(src, WT.usesound, 10, 1) + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + return + else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) + to_chat(user, "\The [src] crumbles away under the force of your [W.name].") + src.dismantle_wall(1) + return + + //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects + if(thermite) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + thermitemelt(user) + return + + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + thermitemelt(user) + return + + else if( istype(W, /obj/item/weapon/melee/energy/blade) ) + var/obj/item/weapon/melee/energy/blade/EB = W + + EB.spark_system.start() + to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") + playsound(src, "sparks", 50, 1) + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + + thermitemelt(user) + return + + var/turf/T = user.loc //get user's location for delay checks + + if(damage && W.has_tool_quality(TOOL_WELDER)) + + var/obj/item/weapon/weldingtool/WT = W.get_welder() + + if(!WT.isOn()) + return + + if(WT.remove_fuel(0,user)) + to_chat(user, "You start repairing the damage to [src].") + playsound(src, WT.usesound, 100, 1) + if(do_after(user, max(5, damage / 5) * WT.toolspeed) && WT && WT.isOn()) + to_chat(user, "You finish repairing the damage to [src].") + take_damage(-damage) + else + to_chat(user, "You need more welding fuel to complete this task.") + return + user.update_examine_panel(src) + return + + // Basic dismantling. + //var/dismantle_toolspeed = 0 + if(isnull(construction_stage) || !reinf_material) + + var/cut_delay = 60 - material.cut_delay + var/dismantle_verb + var/dismantle_sound + + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.isOn()) + return + if(!WT.remove_fuel(0,user)) + to_chat(user, "You need more welding fuel to complete this task.") + return + dismantle_verb = "cutting" + dismantle_sound = W.usesound + // cut_delay *= 0.7 // Tools themselves now can shorten the time it takes. + else if(istype(W,/obj/item/weapon/melee/energy/blade)) + dismantle_sound = "sparks" + dismantle_verb = "slicing" + //dismantle_toolspeed = 1 + cut_delay *= 0.5 + else if(istype(W,/obj/item/weapon/pickaxe)) + var/obj/item/weapon/pickaxe/P = W + dismantle_verb = P.drill_verb + dismantle_sound = P.drill_sound + cut_delay -= P.digspeed + + if(dismantle_verb) + + to_chat(user, "You begin [dismantle_verb] through the outer plating.") + if(dismantle_sound) + playsound(src, dismantle_sound, 100, 1) + + if(cut_delay < 0) + cut_delay = 0 + + if(!do_after(user,cut_delay * W.toolspeed)) + return + + to_chat(user, "You remove the outer plating.") + dismantle_wall() + user.visible_message("The wall was torn open by [user]!") + return + + //Reinforced dismantling. + else + switch(construction_stage) + if(6) + if (W.has_tool_quality(TOOL_WIRECUTTER)) + playsound(src, W.usesound, 100, 1) + construction_stage = 5 + user.update_examine_panel(src) + to_chat(user, "You cut through the outer grille.") + update_icon() + return + if(5) + if (W.has_tool_quality(TOOL_SCREWDRIVER)) + to_chat(user, "You begin removing the support lines.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 5) + return + construction_stage = 4 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You unscrew the support lines.") + return + else if (W.has_tool_quality(TOOL_WIRECUTTER)) + construction_stage = 6 + user.update_examine_panel(src) + to_chat(user, "You mend the outer grille.") + playsound(src, W.usesound, 100, 1) + update_icon() + return + if(4) + var/cut_cover + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.isOn()) + return + if(WT.remove_fuel(0,user)) + cut_cover=1 + else + to_chat(user, "You need more welding fuel to complete this task.") + return + else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + to_chat(user, "You begin slicing through the metal cover.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user, 60 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 3 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You press firmly on the cover, dislodging it.") + return + else if (W.has_tool_quality(TOOL_SCREWDRIVER)) + to_chat(user, "You begin screwing down the support lines.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 5 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You screw down the support lines.") + return + if(3) + if (W.has_tool_quality(TOOL_CROWBAR)) + to_chat(user, "You struggle to pry off the cover.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 3) + return + construction_stage = 2 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You pry off the cover.") + return + if(2) + if (W.has_tool_quality(TOOL_WRENCH)) + to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 2) + return + construction_stage = 1 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You remove the bolts anchoring the support rods.") + return + if(1) + var/cut_cover + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + cut_cover=1 + else + to_chat(user, "You need more welding fuel to complete this task.") + return + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + to_chat(user, "You begin slicing through the support rods.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,70 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 1) + return + construction_stage = 0 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You slice through the support rods.") + return + if(0) + if(W.has_tool_quality(TOOL_CROWBAR)) + to_chat(user, "You struggle to pry off the outer sheath.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) + return + if(user.loc == T && user.get_active_hand() == W ) + to_chat(user, "You pry off the outer sheath.") + dismantle_wall() + return + + if(istype(W,/obj/item/frame)) + var/obj/item/frame/F = W + F.try_build(src, user) + return + + else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) + return attack_hand(user) + + diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 7abc69e3b2..fdc54a18c4 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -1,152 +1,152 @@ -/turf/simulated/wall/proc/update_material() - - if(!material) - return - - if(reinf_material) - construction_stage = 6 - else - construction_stage = null - if(!material) - material = get_material_by_name(DEFAULT_WALL_MATERIAL) - if(material) - explosion_resistance = material.explosion_resistance - if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) - explosion_resistance = reinf_material.explosion_resistance - - if(reinf_material) - name = "reinforced [material.display_name] wall" - desc = "It seems to be a section of wall reinforced with [reinf_material.display_name] and plated with [material.display_name]." - else - name = "[material.display_name] wall" - desc = "It seems to be a section of wall plated with [material.display_name]." - - if(material.opacity > 0.5 && !opacity) - set_light(1) - else if(material.opacity < 0.5 && opacity) - set_light(0) - - SSradiation.resistance_cache.Remove(src) - update_connections(1) - update_icon() - - -/turf/simulated/wall/proc/set_material(var/datum/material/newmaterial, var/datum/material/newrmaterial, var/datum/material/newgmaterial) - material = newmaterial - reinf_material = newrmaterial - if(!newgmaterial) - girder_material = DEFAULT_WALL_MATERIAL - else - girder_material = newgmaterial - update_material() - -/turf/simulated/wall/update_icon() - if(!material) - return - - if(!damage_overlays[1]) //list hasn't been populated - generate_overlays() - - cut_overlays() - var/image/I - - if(!density) - I = image(wall_masks, "[material.icon_base]fwall_open") - I.color = material.icon_colour - add_overlay(I) - return - - for(var/i = 1 to 4) - I = image(wall_masks, "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) - I.color = material.icon_colour - add_overlay(I) - - if(reinf_material) - if(construction_stage != null && construction_stage < 6) - I = image(wall_masks, "reinf_construct-[construction_stage]") - I.color = reinf_material.icon_colour - add_overlay(I) - else - if("[reinf_material.icon_reinf]0" in cached_icon_states(wall_masks)) - // Directional icon - for(var/i = 1 to 4) - I = image(wall_masks, "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) - I.color = reinf_material.icon_colour - add_overlay(I) - else if("[reinf_material.icon_reinf]" in cached_icon_states(wall_masks)) - I = image(wall_masks, reinf_material.icon_reinf) - I.color = reinf_material.icon_colour - add_overlay(I) - var/image/texture = material.get_wall_texture() - if(texture) - add_overlay(texture) - - if(damage != 0) - var/integrity = material.integrity - if(reinf_material) - integrity += reinf_material.integrity - - var/overlay = round(damage / integrity * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len - - add_overlay(damage_overlays[overlay]) - return - -/turf/simulated/wall/proc/generate_overlays() - var/alpha_inc = 256 / damage_overlays.len - - for(var/i = 1; i <= damage_overlays.len; i++) - var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") - img.blend_mode = BLEND_MULTIPLY - img.alpha = (i * alpha_inc) - 1 - damage_overlays[i] = img - - -/turf/simulated/wall/proc/update_connections(propagate = 0) - if(!material) - return - var/list/dirs = list() - var/inrange = orange(src, 1) - for(var/turf/simulated/wall/W in inrange) - if(!W.material) - continue - if(propagate) - W.update_connections() - W.update_icon() - if(can_join_with_wall(W)) - dirs += get_dir(src, W) - for(var/obj/structure/low_wall/WF in inrange) - if(can_join_with_low_wall(WF)) - dirs += get_dir(src, WF) - - special_wall_connections(dirs, inrange) - wall_connections = dirs_to_corner_states(dirs) - -/turf/simulated/wall/proc/special_wall_connections(list/dirs, list/inrange) - if(material.icon_base == "hull") // Could be improved... - var/additional_dirs = 0 - for(var/direction in alldirs) - var/turf/T = get_step(src,direction) - if(T && (locate(/obj/structure/hull_corner) in T)) - dirs += direction - additional_dirs |= direction - if(additional_dirs) - for(var/diag_dir in cornerdirs) - if ((additional_dirs & diag_dir) == diag_dir) - dirs += diag_dir - -/turf/simulated/wall/proc/can_join_with_wall(var/turf/simulated/wall/W) - //No blending if no material - if(!material || !W.material) - return 0 - //We can blend if either is the same, or a subtype, of the other one - if(istype(W.material, material.type) || istype(material, W.material.type)) - return 1 - //Also blend if they have the same iconbase - if(material.icon_base == W.material.icon_base) - return 1 - return 0 - -/turf/simulated/wall/proc/can_join_with_low_wall(var/obj/structure/low_wall/WF) +/turf/simulated/wall/proc/update_material() + + if(!material) + return + + if(reinf_material) + construction_stage = 6 + else + construction_stage = null + if(!material) + material = get_material_by_name(DEFAULT_WALL_MATERIAL) + if(material) + explosion_resistance = material.explosion_resistance + if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) + explosion_resistance = reinf_material.explosion_resistance + + if(reinf_material) + name = "reinforced [material.display_name] wall" + desc = "It seems to be a section of wall reinforced with [reinf_material.display_name] and plated with [material.display_name]." + else + name = "[material.display_name] wall" + desc = "It seems to be a section of wall plated with [material.display_name]." + + if(material.opacity > 0.5 && !opacity) + set_light(1) + else if(material.opacity < 0.5 && opacity) + set_light(0) + + SSradiation.resistance_cache.Remove(src) + update_connections(1) + update_icon() + + +/turf/simulated/wall/proc/set_material(var/datum/material/newmaterial, var/datum/material/newrmaterial, var/datum/material/newgmaterial) + material = newmaterial + reinf_material = newrmaterial + if(!newgmaterial) + girder_material = DEFAULT_WALL_MATERIAL + else + girder_material = newgmaterial + update_material() + +/turf/simulated/wall/update_icon() + if(!material) + return + + if(!damage_overlays[1]) //list hasn't been populated + generate_overlays() + + cut_overlays() + var/image/I + + if(!density) + I = image(wall_masks, "[material.icon_base]fwall_open") + I.color = material.icon_colour + add_overlay(I) + return + + for(var/i = 1 to 4) + I = image(wall_masks, "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) + I.color = material.icon_colour + add_overlay(I) + + if(reinf_material) + if(construction_stage != null && construction_stage < 6) + I = image(wall_masks, "reinf_construct-[construction_stage]") + I.color = reinf_material.icon_colour + add_overlay(I) + else + if("[reinf_material.icon_reinf]0" in cached_icon_states(wall_masks)) + // Directional icon + for(var/i = 1 to 4) + I = image(wall_masks, "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) + I.color = reinf_material.icon_colour + add_overlay(I) + else if("[reinf_material.icon_reinf]" in cached_icon_states(wall_masks)) + I = image(wall_masks, reinf_material.icon_reinf) + I.color = reinf_material.icon_colour + add_overlay(I) + var/image/texture = material.get_wall_texture() + if(texture) + add_overlay(texture) + + if(damage != 0) + var/integrity = material.integrity + if(reinf_material) + integrity += reinf_material.integrity + + var/overlay = round(damage / integrity * damage_overlays.len) + 1 + if(overlay > damage_overlays.len) + overlay = damage_overlays.len + + add_overlay(damage_overlays[overlay]) + return + +/turf/simulated/wall/proc/generate_overlays() + var/alpha_inc = 256 / damage_overlays.len + + for(var/i = 1; i <= damage_overlays.len; i++) + var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") + img.blend_mode = BLEND_MULTIPLY + img.alpha = (i * alpha_inc) - 1 + damage_overlays[i] = img + + +/turf/simulated/wall/proc/update_connections(propagate = 0) + if(!material) + return + var/list/dirs = list() + var/inrange = orange(src, 1) + for(var/turf/simulated/wall/W in inrange) + if(!W.material) + continue + if(propagate) + W.update_connections() + W.update_icon() + if(can_join_with_wall(W)) + dirs += get_dir(src, W) + for(var/obj/structure/low_wall/WF in inrange) + if(can_join_with_low_wall(WF)) + dirs += get_dir(src, WF) + + special_wall_connections(dirs, inrange) + wall_connections = dirs_to_corner_states(dirs) + +/turf/simulated/wall/proc/special_wall_connections(list/dirs, list/inrange) + if(material.icon_base == "hull") // Could be improved... + var/additional_dirs = 0 + for(var/direction in alldirs) + var/turf/T = get_step(src,direction) + if(T && (locate(/obj/structure/hull_corner) in T)) + dirs += direction + additional_dirs |= direction + if(additional_dirs) + for(var/diag_dir in cornerdirs) + if ((additional_dirs & diag_dir) == diag_dir) + dirs += diag_dir + +/turf/simulated/wall/proc/can_join_with_wall(var/turf/simulated/wall/W) + //No blending if no material + if(!material || !W.material) + return 0 + //We can blend if either is the same, or a subtype, of the other one + if(istype(W.material, material.type) || istype(material, W.material.type)) + return 1 + //Also blend if they have the same iconbase + if(material.icon_base == W.material.icon_base) + return 1 + return 0 + +/turf/simulated/wall/proc/can_join_with_low_wall(var/obj/structure/low_wall/WF) return FALSE \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 29aae0672a..faec2fe49a 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -1,759 +1,759 @@ -/turf/simulated/wall/r_wall - icon_state = "rgeneric" -/turf/simulated/wall/r_wall/Initialize(mapload) - . = ..(mapload, "plasteel","plasteel") //3strong - -/turf/simulated/wall/shull - icon_state = "hull-steel" -/turf/simulated/wall/shull/Initialize(mapload) //Spaaaace ship. - . = ..(mapload, MAT_STEELHULL, null, MAT_STEELHULL) -/turf/simulated/wall/rshull - icon_state = "hull-r_steel" -/turf/simulated/wall/rshull/Initialize(mapload) - . = ..(mapload, MAT_STEELHULL, MAT_STEELHULL, MAT_STEELHULL) -/turf/simulated/wall/pshull - icon_state = "hull-plasteel" -/turf/simulated/wall/pshull/Initialize(mapload) //Spaaaace-er ship. - . = ..(mapload, MAT_PLASTEELHULL, null, MAT_PLASTEELHULL) -/turf/simulated/wall/rpshull - icon_state = "hull-r_plasteel" -/turf/simulated/wall/rpshull/Initialize(mapload) - . = ..(mapload, MAT_PLASTEELHULL, MAT_PLASTEELHULL, MAT_PLASTEELHULL) -/turf/simulated/wall/dshull - icon_state = "hull-durasteel" -/turf/simulated/wall/dshull/Initialize(mapload) //Spaaaace-est ship. - . = ..(mapload, MAT_DURASTEELHULL, null, MAT_DURASTEELHULL) -/turf/simulated/wall/rdshull - icon_state = "hull-r_durasteel" -/turf/simulated/wall/rdshull/Initialize(mapload) - . = ..(mapload, MAT_DURASTEELHULL, MAT_DURASTEELHULL, MAT_DURASTEELHULL) -/turf/simulated/wall/thull - icon_state = "hull-titanium" -/turf/simulated/wall/thull/Initialize(mapload) - . = ..(mapload, MAT_TITANIUMHULL, null, MAT_TITANIUMHULL) -/turf/simulated/wall/rthull - icon_state = "hull-r_titanium" -/turf/simulated/wall/rthull/Initialize(mapload) - . = ..(mapload, MAT_TITANIUMHULL, MAT_TITANIUMHULL, MAT_TITANIUMHULL) - -/turf/simulated/wall/cult - icon_state = "cult" -/turf/simulated/wall/cult/Initialize(mapload) - . = ..(mapload, "cult","cult2","cult") -/turf/unsimulated/wall/cult - name = "cult wall" - desc = "Hideous images dance beneath the surface." - icon = 'icons/turf/wall_masks.dmi' - icon_state = "cult" - -/turf/simulated/wall/iron/Initialize(mapload) - . = ..(mapload, "iron") -/turf/simulated/wall/uranium/Initialize(mapload) - . = ..(mapload, "uranium") -/turf/simulated/wall/diamond/Initialize(mapload) - . = ..(mapload, "diamond") -/turf/simulated/wall/gold/Initialize(mapload) - . = ..(mapload, "gold") -/turf/simulated/wall/silver/Initialize(mapload) - . = ..(mapload, "silver") -/turf/simulated/wall/lead/Initialize(mapload) - . = ..(mapload, "lead") -/turf/simulated/wall/r_lead/Initialize(mapload) - . = ..(mapload, "lead", "lead") -/turf/simulated/wall/phoron/Initialize(mapload) - . = ..(mapload, "phoron") -/turf/simulated/wall/sandstone/Initialize(mapload) - . = ..(mapload, "sandstone") -/turf/simulated/wall/ironphoron/Initialize(mapload) - . = ..(mapload, "iron","phoron") -/turf/simulated/wall/golddiamond/Initialize(mapload) - . = ..(mapload, "gold","diamond") -/turf/simulated/wall/silvergold/Initialize(mapload) - . = ..(mapload, "silver","gold") -/turf/simulated/wall/sandstonediamond/Initialize(mapload) - . = ..(mapload, "sandstone","diamond") -/turf/simulated/wall/snowbrick/Initialize(mapload) - . = ..(mapload, "packed snow") - -/turf/simulated/wall/resin/Initialize(mapload) - . = ..(mapload, "resin",null,"resin") - -/turf/simulated/wall/concrete - icon_state = "brick" - -/turf/simulated/wall/concrete/Initialize(mapload) - . = ..(mapload, "concrete") //3strong - -/turf/simulated/wall/r_concrete - icon_state = "rbrick" - -/turf/simulated/wall/r_concrete/Initialize(mapload) - . = ..(mapload, "concrete","plasteel rebar") //3strong - -// Kind of wondering if this is going to bite me in the butt. -/turf/simulated/wall/skipjack/Initialize(mapload) - . = ..(mapload, "alienalloy") -/turf/simulated/wall/skipjack/attackby() - return -/turf/simulated/wall/titanium/Initialize(mapload) - . = ..(mapload, "titanium") - -/turf/simulated/wall/durasteel/Initialize(mapload) - . = ..(mapload, "durasteel", "durasteel") -/turf/simulated/wall/durasteel/blueserg/New(var/newloc) - ..(newloc,"durasteel", "durasteel") -/turf/simulated/wall/durasteel/blueserg/attackby(obj/item/I, mob/user) - return -/turf/simulated/wall/wood/Initialize(mapload) - . = ..(mapload, MAT_WOOD) - -/turf/simulated/wall/hardwood/Initialize(mapload) - . = ..(mapload, MAT_HARDWOOD) - -/turf/simulated/wall/sifwood/Initialize(mapload) - . = ..(mapload, MAT_SIFWOOD) - -// CHOMPEdit Start -/turf/simulated/wall/rsifwood/Initialize(mapload) - . = ..(mapload, MAT_SIFWOOD, MAT_SIFWOOD, MAT_SIFWOOD) -// CHOMPEdit End - -/turf/simulated/wall/log/Initialize(mapload) - . = ..(mapload, MAT_LOG) - -/turf/simulated/wall/log_sif/Initialize(mapload) - . = ..(mapload, MAT_SIFLOG) - -/turf/unsimulated/wall/ice - name = "Ice wall" - desc = "Frigid Ice that seems to be stronger then most manmade structures" - icon = 'icons/turf/snow_new.dmi' - icon_state = "Icerock" - -/turf/unsimulated/wall/bronze - name = "Bronze wall" - desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "clockwork_wall" - - -// Shuttle Walls -/turf/simulated/shuttle/wall - name = "autojoin wall" - icon_state = "light" - opacity = 1 - density = TRUE - blocks_air = 1 - - var/base_state = "light" //The base iconstate to base sprites on - var/hard_corner = 0 //Forces hard corners (as opposed to diagonals) - var/true_name = "wall" //What to rename this to on init - - //Extra things this will try to locate and act like we're joining to. You can put doors, or whatever. - //Carefully means only if it's on a /turf/simulated/shuttle subtype turf. - var/static/list/join_carefully = list( - /obj/structure/grille, - /obj/machinery/door/blast/regular - ) - var/static/list/join_always = list( - /obj/structure/shuttle/engine, - /obj/structure/shuttle/window, - /obj/machinery/door/airlock/voidcraft - ) - -/turf/simulated/shuttle/wall/hard_corner - name = "hardcorner wall" - icon_state = "light-hc" - hard_corner = 1 - -/turf/simulated/shuttle/wall/no_join - icon_state = "light-nj" - join_group = null - -/turf/simulated/shuttle/wall/dark - icon = 'icons/turf/shuttle_dark.dmi' - icon_state = "dark" - base_state = "dark" - -/turf/simulated/shuttle/wall/dark/hard_corner - name = "hardcorner wall" - icon_state = "dark-hc" - hard_corner = 1 - -/turf/simulated/shuttle/wall/dark/no_join - name = "nojoin wall" - icon_state = "dark-nj" - join_group = null - -/turf/simulated/shuttle/wall/alien - icon = 'icons/turf/shuttle_alien.dmi' - icon_state = "alien" - base_state = "alien" - light_range = 3 - light_power = 0.75 - light_color = "#ff0066" // Pink-ish - light_on = TRUE - block_tele = TRUE // Will be used for dungeons so this is needed to stop cheesing with handteles. - -/turf/simulated/shuttle/wall/alien/Initialize() - . = ..() - update_light() - -/turf/simulated/shuttle/wall/alien/hard_corner - name = "hardcorner wall" - icon_state = "alien-hc" - hard_corner = 1 - -/turf/simulated/shuttle/wall/alien/no_join - name = "nojoin wall" - icon_state = "alien-nj" - join_group = null - -/turf/simulated/shuttle/wall/Initialize() - . = ..() - - //To allow mappers to rename shuttle walls to like "redfloor interior" or whatever for ease of use. - name = true_name - - if(join_group) - auto_join() - else - icon_state = base_state - - if(takes_underlays) - underlay_update() - -/turf/simulated/shuttle/wall/proc/auto_join() - match_turf(NORTH, NORTH) - match_turf(EAST, EAST) - match_turf(SOUTH, SOUTH) - match_turf(WEST, WEST) - - icon_state = "[base_state][join_flags]" - if(isDiagonal(join_flags)) - if(hard_corner) //You are using 'hard' (aka full-tile) corners. - icon_state += "h" //Hard corners have 'h' at the end of the state - else //Diagonals need an underlay to not look ugly. - takes_underlays = 1 - else //Everything else doesn't deserve our time! - takes_underlays = initial(takes_underlays) - - return join_flags - -/turf/simulated/shuttle/wall/proc/match_turf(direction, flag, mask=0) - if((join_flags & mask) == mask) - var/turf/simulated/shuttle/wall/adj = get_step(src, direction) - if(istype(adj, /turf/simulated/shuttle/wall) && adj.join_group == src.join_group) - join_flags |= flag // turn on the bit flag - return - - else if(istype(adj, /turf/simulated/shuttle)) - var/turf/simulated/shuttle/adj_cast = adj - if(adj_cast.join_group == src.join_group) - var/found - for(var/E in join_carefully) - found = locate(E) in adj - if(found) break - if(found) - join_flags |= flag // turn on the bit flag - return - - var/always_found - for(var/E in join_always) - always_found = locate(E) in adj - if(always_found) break - if(always_found) - join_flags |= flag // turn on the bit flag - else - join_flags &= ~flag // turn off the bit flag - -/turf/simulated/shuttle/wall/voidcraft - name = "voidcraft wall" - icon = 'icons/turf/shuttle_void.dmi' - icon_state = "void" - base_state = "void" - var/stripe_color = null // If set, generates a colored stripe overlay. Accepts #XXXXXX as input. - -/turf/simulated/shuttle/wall/voidcraft/hard_corner - name = "hardcorner wall" - icon_state = "void-hc" - hard_corner = 1 - -/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue - name = "hardcorner wall" - icon_state = "void-hc" - hard_corner = 1 - stripe_color = "#0000FF" - -/turf/simulated/shuttle/wall/voidcraft/hard_corner/lightblue - name = "hardcorner wall" - icon_state = "void-hc" - hard_corner = 1 - stripe_color = "#33ccff" - -/turf/simulated/shuttle/wall/voidcraft/hard_corner/green - name = "hardcorner wall" - icon_state = "void-hc" - hard_corner = 1 - stripe_color = "#00FF00" - -/turf/simulated/shuttle/wall/voidcraft/hard_corner/red - name = "hardcorner wall" - icon_state = "void-hc" - stripe_color = "#FF0000" - hard_corner = 1 -/turf/simulated/shuttle/wall/voidcraft/no_join - name = "nojoin wall" - icon_state = "void-nj" - join_group = null - -/turf/simulated/shuttle/wall/voidcraft/red - stripe_color = "#FF0000" - -/turf/simulated/shuttle/wall/voidcraft/blue - stripe_color = "#0000FF" - -/turf/simulated/shuttle/wall/voidcraft/lightblue - stripe_color = "#33ccff" - -/turf/simulated/shuttle/wall/voidcraft/orange - stripe_color = "#cc3300" - -/turf/simulated/shuttle/wall/voidcraft/green - stripe_color = "#00FF00" - -/turf/simulated/shuttle/wall/voidcraft/Initialize() - . = ..() - update_icon() - -/turf/simulated/shuttle/wall/voidcraft/update_icon() - if(stripe_color) - cut_overlays() - var/image/I = image(icon = src.icon, icon_state = "o_[icon_state]") - I.color = stripe_color - add_overlay(I) - -// Fake corners for making hulls look pretty -/obj/structure/hull_corner - name = "hull corner" - plane = OBJ_PLANE - 1 - icon = 'icons/turf/wall_masks.dmi' - icon_state = "hull_corner" - - anchored = TRUE - density = TRUE - breakable = TRUE - -/obj/structure/hull_corner/Initialize() - return INITIALIZE_HINT_LATELOAD - -/obj/structure/hull_corner/LateInitialize() - . = ..() - update_look() - -/obj/structure/hull_corner/proc/get_dirs_to_test() - return list(dir, turn(dir,90)) - -/obj/structure/hull_corner/proc/update_look() - cut_overlays() - var/turf/simulated/wall/T - for(var/direction in get_dirs_to_test()) - T = get_step(src, direction) - if(!istype(T)) - continue - - name = T.name - desc = T.desc - - var/datum/material/B = T.material - var/datum/material/R = T.reinf_material - - if(B?.icon_colour) - color = B.icon_colour - if(R?.icon_colour) - var/image/I = image(icon, icon_state+"_reinf", dir=dir) - I.color = R.icon_colour - add_overlay(I) - break - - if(!T) - warning("Hull corner at [x],[y] not placed adjacent to a hull it can find.") - -/obj/structure/hull_corner/long_vert - icon = 'icons/turf/wall_masks32x64.dmi' - bound_height = 64 - -/obj/structure/hull_corner/long_vert/get_dirs_to_test() - return list(dir, turn(dir,90), turn(dir,-90)) - -/obj/structure/hull_corner/long_horiz - icon = 'icons/turf/wall_masks64x32.dmi' - bound_width = 64 - -/obj/structure/hull_corner/long_horiz/get_dirs_to_test() - return list(dir, turn(dir,90), turn(dir,-90)) - - - -// Eris walls -/turf/simulated/wall/eris - icon = 'icons/turf/wall_masks_eris.dmi' - icon_state = "generic" - wall_masks = 'icons/turf/wall_masks_eris.dmi' - var/list/blend_objects = list(/obj/machinery/door) - var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) - -/turf/simulated/wall/eris/can_join_with_low_wall(var/obj/structure/low_wall/WF) - return istype(WF, /obj/structure/low_wall/eris) - -/turf/simulated/wall/eris/special_wall_connections(list/dirs, list/inrange) - ..() - for(var/direction in cardinal) - var/turf/T = get_step(src, direction) - var/decided_to_blend = FALSE - blend_obj_loop: - for(var/obj/O in T) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - decided_to_blend = TRUE - for(var/obj/structure/S in T) - if(istype(S, src)) - decided_to_blend = FALSE - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - decided_to_blend = FALSE - - if(decided_to_blend) - dirs += direction - break blend_obj_loop // breaks outer loop - -/turf/simulated/wall/eris/r_wall - icon_state = "rgeneric" -/turf/simulated/wall/eris/r_wall/Initialize(mapload) - . = ..(mapload, "plasteel","plasteel") - -// Bay walls -/turf/simulated/wall/bay - icon = 'icons/turf/wall_masks_bay.dmi' - icon_state = "generic" - wall_masks = 'icons/turf/wall_masks_bay.dmi' - var/list/blend_objects = list(/obj/machinery/door) - var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) - - var/stripe_color // Adds a colored stripe to the walls - -/turf/simulated/wall/bay/can_join_with_low_wall(var/obj/structure/low_wall/WF) - return istype(WF, /obj/structure/low_wall/bay) - -/turf/simulated/wall/bay/update_icon() - . = ..() - if(stripe_color) - var/image/I - for(var/i = 1 to 4) - I = image(wall_masks, "stripe[wall_connections[i]]", dir = 1<<(i-1)) - I.color = stripe_color - add_overlay(I) - -/turf/simulated/wall/bay/special_wall_connections(list/dirs, list/inrange) - ..() - for(var/direction in cardinal) - var/turf/T = get_step(src, direction) - var/decided_to_blend = FALSE - blend_obj_loop: - for(var/obj/O in T) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - decided_to_blend = TRUE - for(var/obj/structure/S in T) - if(istype(S, src)) - decided_to_blend = FALSE - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - decided_to_blend = FALSE - - if(decided_to_blend) - dirs += direction - break blend_obj_loop // breaks outer loop - -/turf/simulated/wall/bay/r_wall - icon_state = "rgeneric" -/turf/simulated/wall/bay/r_wall/Initialize(mapload) - . = ..(mapload, "plasteel","plasteel") - -/turf/simulated/wall/tgmc - icon = 'icons/turf/wall_masks_tgmc.dmi' - wall_masks = 'icons/turf/wall_masks_tgmc.dmi' // not really a MASK per-se, I guess - icon_state = "metal0" - - var/list/blend_objects = list(/obj/machinery/door) - var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) - - var/wall_base_state = "metal" - var/wall_blend_category = "metal" - var/force_icon - var/list/blend_log = list() - var/strict_blending = FALSE - var/diagonal_blending = FALSE - -// *INHALE -/turf/simulated/wall/tgmc/update_icon() - if(!damage_overlays[1]) //list hasn't been populated - generate_overlays() - - cut_overlays() - - if(force_icon) - icon_state = "[wall_base_state][force_icon]" - else - icon_state = "[wall_base_state][wall_connections]" - - if(damage != 0) - var/integrity = material.integrity - if(reinf_material) - integrity += reinf_material.integrity - - var/overlay = round(damage / integrity * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len - - add_overlay(damage_overlays[overlay]) - -/turf/simulated/wall/tgmc/update_connections(propagate) - if(!material) - return - var/dirs = 0 - var/list_to_use = diagonal_blending ? alldirs : cardinal - main_direction_loop: - for(var/direction in list_to_use) - var/turf/simulated/wall/tgmc/W = get_step(src, direction) - if(strict_blending) - if(istype(W, src)) - dirs |= direction - continue main_direction_loop - - var/decided_to_blend = FALSE - for(var/obj/O in W) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - decided_to_blend = TRUE - for(var/obj/structure/S in W) - if(istype(S, src)) - decided_to_blend = FALSE - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - decided_to_blend = FALSE - - if(decided_to_blend) - blend_log += "Blending with [O] at [direction] because special said to" - dirs |= direction - continue main_direction_loop - - for(var/obj/structure/low_wall/WF in W) - if(can_join_with_low_wall(WF)) - dirs |= direction - blend_log += "Blending with [WF] at [get_dir(src, WF)] because can join with that low wall" - continue main_direction_loop - - // Needs to be our type of wall to blend from this point - if(!istype(W)) - continue - if(propagate) - W.update_connections() - W.update_icon() - if(W.wall_blend_category == wall_blend_category) - dirs |= direction - blend_log += "Blending with [W] at [get_dir(src, W)] because blend category is the same" - - wall_connections = dirs - -/turf/simulated/wall/tgmc/can_join_with_low_wall(var/obj/structure/low_wall/WF) - return istype(WF, /obj/structure/low_wall) - -/turf/simulated/wall/tgmc/rwall - icon_state = "rwall0" - wall_base_state = "rwall" - wall_blend_category = "rwall" -/turf/simulated/wall/tgmc/rwall/Initialize(mapload) - . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) - -/turf/simulated/wall/tgmc/gray - icon_state = "gray0" - wall_base_state = "gray" - wall_blend_category = "gray" -/turf/simulated/wall/tgmc/gwall/Initialize(mapload) - . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) - -/turf/simulated/wall/tgmc/darkwall - icon_state = "darkwall0" - wall_base_state = "darkwall" - wall_blend_category = "darkwall" -/turf/simulated/wall/tgmc/darkwall/Initialize(mapload) - . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) -/turf/simulated/wall/tgmc/darkwall/deco0 - icon_state = "darkwall_deco0" - force_icon = "_deco0" -/turf/simulated/wall/tgmc/darkwall/deco1 - icon_state = "darkwall_deco1" - force_icon = "_deco1" -/turf/simulated/wall/tgmc/darkwall/deco2 - icon_state = "darkwall_deco2" - force_icon = "_deco2" -/turf/simulated/wall/tgmc/darkwall/deco3 - icon_state = "darkwall_deco3" - force_icon = "_deco3" - -/turf/simulated/wall/tgmc/whitewall - icon_state = "white0" - wall_base_state = "white" - wall_blend_category = "white" -/turf/simulated/wall/tgmc/whitewall/Initialize(mapload) - . = ..(mapload, MAT_STEEL,MAT_PLASTIC) - -/turf/simulated/wall/tgmc/durawall - icon_state = "darkband0" - wall_base_state = "darkband" - wall_blend_category = "darkband" -/turf/simulated/wall/tgmc/durawall/Initialize(mapload) - . = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL) -/turf/simulated/wall/tgmc/durawall/deco0 - icon_state = "darkband_deco0" - force_icon = "_deco0" -/turf/simulated/wall/tgmc/durawall/deco1 - icon_state = "darkband_deco1" - force_icon = "_deco1" -/turf/simulated/wall/tgmc/durawall/deco2 - icon_state = "darkband_deco2" - force_icon = "_deco2" -/turf/simulated/wall/tgmc/durawall/deco3 - icon_state = "darkband_deco3" - force_icon = "_deco3" - -/turf/simulated/wall/tgmc/sanitary - icon_state = "whiteband0" - wall_base_state = "whiteband" - wall_blend_category = "whiteband" -/turf/simulated/wall/tgmc/sanitary/Initialize(mapload) - . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) - -/turf/simulated/wall/tgmc/chigusa - icon_state = "chigusa0" - wall_base_state = "chigusa" - wall_blend_category = "chigusa" -/turf/simulated/wall/tgmc/chigusa/Initialize(mapload) - . = ..(mapload, MAT_CHITIN,MAT_CHITIN) -/turf/simulated/wall/tgmc/chigusa/deco0 - icon_state = "chigusa_deco0" - force_icon = "_deco0" -/turf/simulated/wall/tgmc/chigusa/deco1 - icon_state = "chigusa_deco1" - force_icon = "_deco1" -/turf/simulated/wall/tgmc/chigusa/deco2 - icon_state = "chigusa_deco2" - force_icon = "_deco2" - -/turf/simulated/wall/tgmc/redstripe - icon_state = "redstripe0" - wall_base_state = "redstripe" - wall_blend_category = "redstripe" -/turf/simulated/wall/tgmc/redstripe/Initialize(mapload) - . = ..(mapload, MAT_PLASTEELHULL,MAT_PLASTEELHULL) - -/turf/simulated/wall/tgmc/redstripe_r - icon_state = "redstriper0" - wall_base_state = "redstriper" - wall_blend_category = "redstriper" -/turf/simulated/wall/tgmc/redstripe_r/Initialize(mapload) - . = ..(mapload, MAT_DURASTEELHULL,MAT_DURASTEELHULL) - -/turf/simulated/wall/tgmc/plain_redstripe - icon_state = "predstripe0" - wall_base_state = "predstripe" - wall_blend_category = "predstripe" -/turf/simulated/wall/tgmc/plain_redstripe/Initialize(mapload) - . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) - -/turf/simulated/wall/tgmc/plain_redstripe_r - icon_state = "predstriper0" - wall_base_state = "predstriper" - wall_blend_category = "predstriper" -/turf/simulated/wall/tgmc/plain_redstripe_r/Initialize(mapload) - . = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL) - -#define WINDOW_GLASS 0x1 -#define WINDOW_RGLASS 0x2 -/turf/simulated/wall/tgmc/window - icon = 'icons/turf/wall_masks_tgmc_win.dmi' - wall_masks = 'icons/turf/wall_masks_tgmc_win.dmi' // not really a MASK per-se, I guess - icon_state = "metal_window0" - wall_base_state = "metal_window" - wall_blend_category = "metal" - - opacity = 0 - var/window_types = WINDOW_GLASS - strict_blending = TRUE - diagonal_blending = TRUE - -/turf/simulated/wall/tgmc/window/rwall - icon_state = "rwall_window0" - wall_base_state = "rwall_window" - wall_blend_category = "rwall" - window_types = WINDOW_RGLASS - -/turf/simulated/wall/tgmc/window/rwall - icon_state = "rwall_rwindow0" - wall_base_state = "rwall_rwindow" - wall_blend_category = "rwall" - window_types = WINDOW_RGLASS - -/turf/simulated/wall/tgmc/window/gray - icon_state = "gray_window0" - wall_base_state = "gray_window" - wall_blend_category = "gray" - window_types = WINDOW_GLASS|WINDOW_RGLASS - -/turf/simulated/wall/tgmc/window/gray/reinf - icon_state = "gray_rwindow0" - wall_base_state = "gray_rwindow" - -/turf/simulated/wall/tgmc/window/white - icon_state = "white_window0" - wall_base_state = "white_window" - wall_blend_category = "white" - window_types = WINDOW_GLASS|WINDOW_RGLASS - diagonal_blending = FALSE - -/turf/simulated/wall/tgmc/window/white/reinf - icon_state = "white_rwindow0" - wall_base_state = "white_rwindow" - -/turf/simulated/wall/tgmc/window/chigusa - icon_state = "chigusa_rwindow0" - wall_base_state = "chigusa_rwindow" - wall_blend_category = "chigusa" - window_types = WINDOW_RGLASS - diagonal_blending = FALSE - -/turf/simulated/wall/tgmc/window/redstripe_r - icon_state = "predstriper_window0" - wall_base_state = "predstriper_window" - wall_blend_category = "predstriper" - window_types = WINDOW_GLASS|WINDOW_RGLASS - -/turf/simulated/wall/tgmc/window/redstripe_r/reinf - icon_state = "predstriper_rwindow0" - wall_base_state = "predstriper_rwindow" - wall_blend_category = "predstriper" - -/turf/simulated/wall/tgmc/window/darkwall - icon_state = "darkwall_window0" - wall_base_state = "darkwall_window" - wall_blend_category = "darkwall" - window_types = WINDOW_GLASS|WINDOW_RGLASS - diagonal_blending = FALSE - -/turf/simulated/wall/tgmc/window/darkwall/reinf - icon_state = "darkwall_rwindow0" - wall_base_state = "darkwall_rwindow" - -#undef WINDOW_GLASS -#undef WINDOW_RGLASS +/turf/simulated/wall/r_wall + icon_state = "rgeneric" +/turf/simulated/wall/r_wall/Initialize(mapload) + . = ..(mapload, "plasteel","plasteel") //3strong + +/turf/simulated/wall/shull + icon_state = "hull-steel" +/turf/simulated/wall/shull/Initialize(mapload) //Spaaaace ship. + . = ..(mapload, MAT_STEELHULL, null, MAT_STEELHULL) +/turf/simulated/wall/rshull + icon_state = "hull-r_steel" +/turf/simulated/wall/rshull/Initialize(mapload) + . = ..(mapload, MAT_STEELHULL, MAT_STEELHULL, MAT_STEELHULL) +/turf/simulated/wall/pshull + icon_state = "hull-plasteel" +/turf/simulated/wall/pshull/Initialize(mapload) //Spaaaace-er ship. + . = ..(mapload, MAT_PLASTEELHULL, null, MAT_PLASTEELHULL) +/turf/simulated/wall/rpshull + icon_state = "hull-r_plasteel" +/turf/simulated/wall/rpshull/Initialize(mapload) + . = ..(mapload, MAT_PLASTEELHULL, MAT_PLASTEELHULL, MAT_PLASTEELHULL) +/turf/simulated/wall/dshull + icon_state = "hull-durasteel" +/turf/simulated/wall/dshull/Initialize(mapload) //Spaaaace-est ship. + . = ..(mapload, MAT_DURASTEELHULL, null, MAT_DURASTEELHULL) +/turf/simulated/wall/rdshull + icon_state = "hull-r_durasteel" +/turf/simulated/wall/rdshull/Initialize(mapload) + . = ..(mapload, MAT_DURASTEELHULL, MAT_DURASTEELHULL, MAT_DURASTEELHULL) +/turf/simulated/wall/thull + icon_state = "hull-titanium" +/turf/simulated/wall/thull/Initialize(mapload) + . = ..(mapload, MAT_TITANIUMHULL, null, MAT_TITANIUMHULL) +/turf/simulated/wall/rthull + icon_state = "hull-r_titanium" +/turf/simulated/wall/rthull/Initialize(mapload) + . = ..(mapload, MAT_TITANIUMHULL, MAT_TITANIUMHULL, MAT_TITANIUMHULL) + +/turf/simulated/wall/cult + icon_state = "cult" +/turf/simulated/wall/cult/Initialize(mapload) + . = ..(mapload, "cult","cult2","cult") +/turf/unsimulated/wall/cult + name = "cult wall" + desc = "Hideous images dance beneath the surface." + icon = 'icons/turf/wall_masks.dmi' + icon_state = "cult" + +/turf/simulated/wall/iron/Initialize(mapload) + . = ..(mapload, "iron") +/turf/simulated/wall/uranium/Initialize(mapload) + . = ..(mapload, "uranium") +/turf/simulated/wall/diamond/Initialize(mapload) + . = ..(mapload, "diamond") +/turf/simulated/wall/gold/Initialize(mapload) + . = ..(mapload, "gold") +/turf/simulated/wall/silver/Initialize(mapload) + . = ..(mapload, "silver") +/turf/simulated/wall/lead/Initialize(mapload) + . = ..(mapload, "lead") +/turf/simulated/wall/r_lead/Initialize(mapload) + . = ..(mapload, "lead", "lead") +/turf/simulated/wall/phoron/Initialize(mapload) + . = ..(mapload, "phoron") +/turf/simulated/wall/sandstone/Initialize(mapload) + . = ..(mapload, "sandstone") +/turf/simulated/wall/ironphoron/Initialize(mapload) + . = ..(mapload, "iron","phoron") +/turf/simulated/wall/golddiamond/Initialize(mapload) + . = ..(mapload, "gold","diamond") +/turf/simulated/wall/silvergold/Initialize(mapload) + . = ..(mapload, "silver","gold") +/turf/simulated/wall/sandstonediamond/Initialize(mapload) + . = ..(mapload, "sandstone","diamond") +/turf/simulated/wall/snowbrick/Initialize(mapload) + . = ..(mapload, "packed snow") + +/turf/simulated/wall/resin/Initialize(mapload) + . = ..(mapload, "resin",null,"resin") + +/turf/simulated/wall/concrete + icon_state = "brick" + +/turf/simulated/wall/concrete/Initialize(mapload) + . = ..(mapload, "concrete") //3strong + +/turf/simulated/wall/r_concrete + icon_state = "rbrick" + +/turf/simulated/wall/r_concrete/Initialize(mapload) + . = ..(mapload, "concrete","plasteel rebar") //3strong + +// Kind of wondering if this is going to bite me in the butt. +/turf/simulated/wall/skipjack/Initialize(mapload) + . = ..(mapload, "alienalloy") +/turf/simulated/wall/skipjack/attackby() + return +/turf/simulated/wall/titanium/Initialize(mapload) + . = ..(mapload, "titanium") + +/turf/simulated/wall/durasteel/Initialize(mapload) + . = ..(mapload, "durasteel", "durasteel") +/turf/simulated/wall/durasteel/blueserg/New(var/newloc) + ..(newloc,"durasteel", "durasteel") +/turf/simulated/wall/durasteel/blueserg/attackby(obj/item/I, mob/user) + return +/turf/simulated/wall/wood/Initialize(mapload) + . = ..(mapload, MAT_WOOD) + +/turf/simulated/wall/hardwood/Initialize(mapload) + . = ..(mapload, MAT_HARDWOOD) + +/turf/simulated/wall/sifwood/Initialize(mapload) + . = ..(mapload, MAT_SIFWOOD) + +// CHOMPEdit Start +/turf/simulated/wall/rsifwood/Initialize(mapload) + . = ..(mapload, MAT_SIFWOOD, MAT_SIFWOOD, MAT_SIFWOOD) +// CHOMPEdit End + +/turf/simulated/wall/log/Initialize(mapload) + . = ..(mapload, MAT_LOG) + +/turf/simulated/wall/log_sif/Initialize(mapload) + . = ..(mapload, MAT_SIFLOG) + +/turf/unsimulated/wall/ice + name = "Ice wall" + desc = "Frigid Ice that seems to be stronger then most manmade structures" + icon = 'icons/turf/snow_new.dmi' + icon_state = "Icerock" + +/turf/unsimulated/wall/bronze + name = "Bronze wall" + desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "clockwork_wall" + + +// Shuttle Walls +/turf/simulated/shuttle/wall + name = "autojoin wall" + icon_state = "light" + opacity = 1 + density = TRUE + blocks_air = 1 + + var/base_state = "light" //The base iconstate to base sprites on + var/hard_corner = 0 //Forces hard corners (as opposed to diagonals) + var/true_name = "wall" //What to rename this to on init + + //Extra things this will try to locate and act like we're joining to. You can put doors, or whatever. + //Carefully means only if it's on a /turf/simulated/shuttle subtype turf. + var/static/list/join_carefully = list( + /obj/structure/grille, + /obj/machinery/door/blast/regular + ) + var/static/list/join_always = list( + /obj/structure/shuttle/engine, + /obj/structure/shuttle/window, + /obj/machinery/door/airlock/voidcraft + ) + +/turf/simulated/shuttle/wall/hard_corner + name = "hardcorner wall" + icon_state = "light-hc" + hard_corner = 1 + +/turf/simulated/shuttle/wall/no_join + icon_state = "light-nj" + join_group = null + +/turf/simulated/shuttle/wall/dark + icon = 'icons/turf/shuttle_dark.dmi' + icon_state = "dark" + base_state = "dark" + +/turf/simulated/shuttle/wall/dark/hard_corner + name = "hardcorner wall" + icon_state = "dark-hc" + hard_corner = 1 + +/turf/simulated/shuttle/wall/dark/no_join + name = "nojoin wall" + icon_state = "dark-nj" + join_group = null + +/turf/simulated/shuttle/wall/alien + icon = 'icons/turf/shuttle_alien.dmi' + icon_state = "alien" + base_state = "alien" + light_range = 3 + light_power = 0.75 + light_color = "#ff0066" // Pink-ish + light_on = TRUE + block_tele = TRUE // Will be used for dungeons so this is needed to stop cheesing with handteles. + +/turf/simulated/shuttle/wall/alien/Initialize() + . = ..() + update_light() + +/turf/simulated/shuttle/wall/alien/hard_corner + name = "hardcorner wall" + icon_state = "alien-hc" + hard_corner = 1 + +/turf/simulated/shuttle/wall/alien/no_join + name = "nojoin wall" + icon_state = "alien-nj" + join_group = null + +/turf/simulated/shuttle/wall/Initialize() + . = ..() + + //To allow mappers to rename shuttle walls to like "redfloor interior" or whatever for ease of use. + name = true_name + + if(join_group) + auto_join() + else + icon_state = base_state + + if(takes_underlays) + underlay_update() + +/turf/simulated/shuttle/wall/proc/auto_join() + match_turf(NORTH, NORTH) + match_turf(EAST, EAST) + match_turf(SOUTH, SOUTH) + match_turf(WEST, WEST) + + icon_state = "[base_state][join_flags]" + if(isDiagonal(join_flags)) + if(hard_corner) //You are using 'hard' (aka full-tile) corners. + icon_state += "h" //Hard corners have 'h' at the end of the state + else //Diagonals need an underlay to not look ugly. + takes_underlays = 1 + else //Everything else doesn't deserve our time! + takes_underlays = initial(takes_underlays) + + return join_flags + +/turf/simulated/shuttle/wall/proc/match_turf(direction, flag, mask=0) + if((join_flags & mask) == mask) + var/turf/simulated/shuttle/wall/adj = get_step(src, direction) + if(istype(adj, /turf/simulated/shuttle/wall) && adj.join_group == src.join_group) + join_flags |= flag // turn on the bit flag + return + + else if(istype(adj, /turf/simulated/shuttle)) + var/turf/simulated/shuttle/adj_cast = adj + if(adj_cast.join_group == src.join_group) + var/found + for(var/E in join_carefully) + found = locate(E) in adj + if(found) break + if(found) + join_flags |= flag // turn on the bit flag + return + + var/always_found + for(var/E in join_always) + always_found = locate(E) in adj + if(always_found) break + if(always_found) + join_flags |= flag // turn on the bit flag + else + join_flags &= ~flag // turn off the bit flag + +/turf/simulated/shuttle/wall/voidcraft + name = "voidcraft wall" + icon = 'icons/turf/shuttle_void.dmi' + icon_state = "void" + base_state = "void" + var/stripe_color = null // If set, generates a colored stripe overlay. Accepts #XXXXXX as input. + +/turf/simulated/shuttle/wall/voidcraft/hard_corner + name = "hardcorner wall" + icon_state = "void-hc" + hard_corner = 1 + +/turf/simulated/shuttle/wall/voidcraft/hard_corner/blue + name = "hardcorner wall" + icon_state = "void-hc" + hard_corner = 1 + stripe_color = "#0000FF" + +/turf/simulated/shuttle/wall/voidcraft/hard_corner/lightblue + name = "hardcorner wall" + icon_state = "void-hc" + hard_corner = 1 + stripe_color = "#33ccff" + +/turf/simulated/shuttle/wall/voidcraft/hard_corner/green + name = "hardcorner wall" + icon_state = "void-hc" + hard_corner = 1 + stripe_color = "#00FF00" + +/turf/simulated/shuttle/wall/voidcraft/hard_corner/red + name = "hardcorner wall" + icon_state = "void-hc" + stripe_color = "#FF0000" + hard_corner = 1 +/turf/simulated/shuttle/wall/voidcraft/no_join + name = "nojoin wall" + icon_state = "void-nj" + join_group = null + +/turf/simulated/shuttle/wall/voidcraft/red + stripe_color = "#FF0000" + +/turf/simulated/shuttle/wall/voidcraft/blue + stripe_color = "#0000FF" + +/turf/simulated/shuttle/wall/voidcraft/lightblue + stripe_color = "#33ccff" + +/turf/simulated/shuttle/wall/voidcraft/orange + stripe_color = "#cc3300" + +/turf/simulated/shuttle/wall/voidcraft/green + stripe_color = "#00FF00" + +/turf/simulated/shuttle/wall/voidcraft/Initialize() + . = ..() + update_icon() + +/turf/simulated/shuttle/wall/voidcraft/update_icon() + if(stripe_color) + cut_overlays() + var/image/I = image(icon = src.icon, icon_state = "o_[icon_state]") + I.color = stripe_color + add_overlay(I) + +// Fake corners for making hulls look pretty +/obj/structure/hull_corner + name = "hull corner" + plane = OBJ_PLANE - 1 + icon = 'icons/turf/wall_masks.dmi' + icon_state = "hull_corner" + + anchored = TRUE + density = TRUE + breakable = TRUE + +/obj/structure/hull_corner/Initialize() + return INITIALIZE_HINT_LATELOAD + +/obj/structure/hull_corner/LateInitialize() + . = ..() + update_look() + +/obj/structure/hull_corner/proc/get_dirs_to_test() + return list(dir, turn(dir,90)) + +/obj/structure/hull_corner/proc/update_look() + cut_overlays() + var/turf/simulated/wall/T + for(var/direction in get_dirs_to_test()) + T = get_step(src, direction) + if(!istype(T)) + continue + + name = T.name + desc = T.desc + + var/datum/material/B = T.material + var/datum/material/R = T.reinf_material + + if(B?.icon_colour) + color = B.icon_colour + if(R?.icon_colour) + var/image/I = image(icon, icon_state+"_reinf", dir=dir) + I.color = R.icon_colour + add_overlay(I) + break + + if(!T) + warning("Hull corner at [x],[y] not placed adjacent to a hull it can find.") + +/obj/structure/hull_corner/long_vert + icon = 'icons/turf/wall_masks32x64.dmi' + bound_height = 64 + +/obj/structure/hull_corner/long_vert/get_dirs_to_test() + return list(dir, turn(dir,90), turn(dir,-90)) + +/obj/structure/hull_corner/long_horiz + icon = 'icons/turf/wall_masks64x32.dmi' + bound_width = 64 + +/obj/structure/hull_corner/long_horiz/get_dirs_to_test() + return list(dir, turn(dir,90), turn(dir,-90)) + + + +// Eris walls +/turf/simulated/wall/eris + icon = 'icons/turf/wall_masks_eris.dmi' + icon_state = "generic" + wall_masks = 'icons/turf/wall_masks_eris.dmi' + var/list/blend_objects = list(/obj/machinery/door) + var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) + +/turf/simulated/wall/eris/can_join_with_low_wall(var/obj/structure/low_wall/WF) + return istype(WF, /obj/structure/low_wall/eris) + +/turf/simulated/wall/eris/special_wall_connections(list/dirs, list/inrange) + ..() + for(var/direction in cardinal) + var/turf/T = get_step(src, direction) + var/decided_to_blend = FALSE + blend_obj_loop: + for(var/obj/O in T) + for(var/b_type in blend_objects) + if(istype(O, b_type)) + decided_to_blend = TRUE + for(var/obj/structure/S in T) + if(istype(S, src)) + decided_to_blend = FALSE + for(var/nb_type in noblend_objects) + if(istype(O, nb_type)) + decided_to_blend = FALSE + + if(decided_to_blend) + dirs += direction + break blend_obj_loop // breaks outer loop + +/turf/simulated/wall/eris/r_wall + icon_state = "rgeneric" +/turf/simulated/wall/eris/r_wall/Initialize(mapload) + . = ..(mapload, "plasteel","plasteel") + +// Bay walls +/turf/simulated/wall/bay + icon = 'icons/turf/wall_masks_bay.dmi' + icon_state = "generic" + wall_masks = 'icons/turf/wall_masks_bay.dmi' + var/list/blend_objects = list(/obj/machinery/door) + var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) + + var/stripe_color // Adds a colored stripe to the walls + +/turf/simulated/wall/bay/can_join_with_low_wall(var/obj/structure/low_wall/WF) + return istype(WF, /obj/structure/low_wall/bay) + +/turf/simulated/wall/bay/update_icon() + . = ..() + if(stripe_color) + var/image/I + for(var/i = 1 to 4) + I = image(wall_masks, "stripe[wall_connections[i]]", dir = 1<<(i-1)) + I.color = stripe_color + add_overlay(I) + +/turf/simulated/wall/bay/special_wall_connections(list/dirs, list/inrange) + ..() + for(var/direction in cardinal) + var/turf/T = get_step(src, direction) + var/decided_to_blend = FALSE + blend_obj_loop: + for(var/obj/O in T) + for(var/b_type in blend_objects) + if(istype(O, b_type)) + decided_to_blend = TRUE + for(var/obj/structure/S in T) + if(istype(S, src)) + decided_to_blend = FALSE + for(var/nb_type in noblend_objects) + if(istype(O, nb_type)) + decided_to_blend = FALSE + + if(decided_to_blend) + dirs += direction + break blend_obj_loop // breaks outer loop + +/turf/simulated/wall/bay/r_wall + icon_state = "rgeneric" +/turf/simulated/wall/bay/r_wall/Initialize(mapload) + . = ..(mapload, "plasteel","plasteel") + +/turf/simulated/wall/tgmc + icon = 'icons/turf/wall_masks_tgmc.dmi' + wall_masks = 'icons/turf/wall_masks_tgmc.dmi' // not really a MASK per-se, I guess + icon_state = "metal0" + + var/list/blend_objects = list(/obj/machinery/door) + var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor) + + var/wall_base_state = "metal" + var/wall_blend_category = "metal" + var/force_icon + var/list/blend_log = list() + var/strict_blending = FALSE + var/diagonal_blending = FALSE + +// *INHALE +/turf/simulated/wall/tgmc/update_icon() + if(!damage_overlays[1]) //list hasn't been populated + generate_overlays() + + cut_overlays() + + if(force_icon) + icon_state = "[wall_base_state][force_icon]" + else + icon_state = "[wall_base_state][wall_connections]" + + if(damage != 0) + var/integrity = material.integrity + if(reinf_material) + integrity += reinf_material.integrity + + var/overlay = round(damage / integrity * damage_overlays.len) + 1 + if(overlay > damage_overlays.len) + overlay = damage_overlays.len + + add_overlay(damage_overlays[overlay]) + +/turf/simulated/wall/tgmc/update_connections(propagate) + if(!material) + return + var/dirs = 0 + var/list_to_use = diagonal_blending ? alldirs : cardinal + main_direction_loop: + for(var/direction in list_to_use) + var/turf/simulated/wall/tgmc/W = get_step(src, direction) + if(strict_blending) + if(istype(W, src)) + dirs |= direction + continue main_direction_loop + + var/decided_to_blend = FALSE + for(var/obj/O in W) + for(var/b_type in blend_objects) + if(istype(O, b_type)) + decided_to_blend = TRUE + for(var/obj/structure/S in W) + if(istype(S, src)) + decided_to_blend = FALSE + for(var/nb_type in noblend_objects) + if(istype(O, nb_type)) + decided_to_blend = FALSE + + if(decided_to_blend) + blend_log += "Blending with [O] at [direction] because special said to" + dirs |= direction + continue main_direction_loop + + for(var/obj/structure/low_wall/WF in W) + if(can_join_with_low_wall(WF)) + dirs |= direction + blend_log += "Blending with [WF] at [get_dir(src, WF)] because can join with that low wall" + continue main_direction_loop + + // Needs to be our type of wall to blend from this point + if(!istype(W)) + continue + if(propagate) + W.update_connections() + W.update_icon() + if(W.wall_blend_category == wall_blend_category) + dirs |= direction + blend_log += "Blending with [W] at [get_dir(src, W)] because blend category is the same" + + wall_connections = dirs + +/turf/simulated/wall/tgmc/can_join_with_low_wall(var/obj/structure/low_wall/WF) + return istype(WF, /obj/structure/low_wall) + +/turf/simulated/wall/tgmc/rwall + icon_state = "rwall0" + wall_base_state = "rwall" + wall_blend_category = "rwall" +/turf/simulated/wall/tgmc/rwall/Initialize(mapload) + . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) + +/turf/simulated/wall/tgmc/gray + icon_state = "gray0" + wall_base_state = "gray" + wall_blend_category = "gray" +/turf/simulated/wall/tgmc/gwall/Initialize(mapload) + . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) + +/turf/simulated/wall/tgmc/darkwall + icon_state = "darkwall0" + wall_base_state = "darkwall" + wall_blend_category = "darkwall" +/turf/simulated/wall/tgmc/darkwall/Initialize(mapload) + . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) +/turf/simulated/wall/tgmc/darkwall/deco0 + icon_state = "darkwall_deco0" + force_icon = "_deco0" +/turf/simulated/wall/tgmc/darkwall/deco1 + icon_state = "darkwall_deco1" + force_icon = "_deco1" +/turf/simulated/wall/tgmc/darkwall/deco2 + icon_state = "darkwall_deco2" + force_icon = "_deco2" +/turf/simulated/wall/tgmc/darkwall/deco3 + icon_state = "darkwall_deco3" + force_icon = "_deco3" + +/turf/simulated/wall/tgmc/whitewall + icon_state = "white0" + wall_base_state = "white" + wall_blend_category = "white" +/turf/simulated/wall/tgmc/whitewall/Initialize(mapload) + . = ..(mapload, MAT_STEEL,MAT_PLASTIC) + +/turf/simulated/wall/tgmc/durawall + icon_state = "darkband0" + wall_base_state = "darkband" + wall_blend_category = "darkband" +/turf/simulated/wall/tgmc/durawall/Initialize(mapload) + . = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL) +/turf/simulated/wall/tgmc/durawall/deco0 + icon_state = "darkband_deco0" + force_icon = "_deco0" +/turf/simulated/wall/tgmc/durawall/deco1 + icon_state = "darkband_deco1" + force_icon = "_deco1" +/turf/simulated/wall/tgmc/durawall/deco2 + icon_state = "darkband_deco2" + force_icon = "_deco2" +/turf/simulated/wall/tgmc/durawall/deco3 + icon_state = "darkband_deco3" + force_icon = "_deco3" + +/turf/simulated/wall/tgmc/sanitary + icon_state = "whiteband0" + wall_base_state = "whiteband" + wall_blend_category = "whiteband" +/turf/simulated/wall/tgmc/sanitary/Initialize(mapload) + . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) + +/turf/simulated/wall/tgmc/chigusa + icon_state = "chigusa0" + wall_base_state = "chigusa" + wall_blend_category = "chigusa" +/turf/simulated/wall/tgmc/chigusa/Initialize(mapload) + . = ..(mapload, MAT_CHITIN,MAT_CHITIN) +/turf/simulated/wall/tgmc/chigusa/deco0 + icon_state = "chigusa_deco0" + force_icon = "_deco0" +/turf/simulated/wall/tgmc/chigusa/deco1 + icon_state = "chigusa_deco1" + force_icon = "_deco1" +/turf/simulated/wall/tgmc/chigusa/deco2 + icon_state = "chigusa_deco2" + force_icon = "_deco2" + +/turf/simulated/wall/tgmc/redstripe + icon_state = "redstripe0" + wall_base_state = "redstripe" + wall_blend_category = "redstripe" +/turf/simulated/wall/tgmc/redstripe/Initialize(mapload) + . = ..(mapload, MAT_PLASTEELHULL,MAT_PLASTEELHULL) + +/turf/simulated/wall/tgmc/redstripe_r + icon_state = "redstriper0" + wall_base_state = "redstriper" + wall_blend_category = "redstriper" +/turf/simulated/wall/tgmc/redstripe_r/Initialize(mapload) + . = ..(mapload, MAT_DURASTEELHULL,MAT_DURASTEELHULL) + +/turf/simulated/wall/tgmc/plain_redstripe + icon_state = "predstripe0" + wall_base_state = "predstripe" + wall_blend_category = "predstripe" +/turf/simulated/wall/tgmc/plain_redstripe/Initialize(mapload) + . = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL) + +/turf/simulated/wall/tgmc/plain_redstripe_r + icon_state = "predstriper0" + wall_base_state = "predstriper" + wall_blend_category = "predstriper" +/turf/simulated/wall/tgmc/plain_redstripe_r/Initialize(mapload) + . = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL) + +#define WINDOW_GLASS 0x1 +#define WINDOW_RGLASS 0x2 +/turf/simulated/wall/tgmc/window + icon = 'icons/turf/wall_masks_tgmc_win.dmi' + wall_masks = 'icons/turf/wall_masks_tgmc_win.dmi' // not really a MASK per-se, I guess + icon_state = "metal_window0" + wall_base_state = "metal_window" + wall_blend_category = "metal" + + opacity = 0 + var/window_types = WINDOW_GLASS + strict_blending = TRUE + diagonal_blending = TRUE + +/turf/simulated/wall/tgmc/window/rwall + icon_state = "rwall_window0" + wall_base_state = "rwall_window" + wall_blend_category = "rwall" + window_types = WINDOW_RGLASS + +/turf/simulated/wall/tgmc/window/rwall + icon_state = "rwall_rwindow0" + wall_base_state = "rwall_rwindow" + wall_blend_category = "rwall" + window_types = WINDOW_RGLASS + +/turf/simulated/wall/tgmc/window/gray + icon_state = "gray_window0" + wall_base_state = "gray_window" + wall_blend_category = "gray" + window_types = WINDOW_GLASS|WINDOW_RGLASS + +/turf/simulated/wall/tgmc/window/gray/reinf + icon_state = "gray_rwindow0" + wall_base_state = "gray_rwindow" + +/turf/simulated/wall/tgmc/window/white + icon_state = "white_window0" + wall_base_state = "white_window" + wall_blend_category = "white" + window_types = WINDOW_GLASS|WINDOW_RGLASS + diagonal_blending = FALSE + +/turf/simulated/wall/tgmc/window/white/reinf + icon_state = "white_rwindow0" + wall_base_state = "white_rwindow" + +/turf/simulated/wall/tgmc/window/chigusa + icon_state = "chigusa_rwindow0" + wall_base_state = "chigusa_rwindow" + wall_blend_category = "chigusa" + window_types = WINDOW_RGLASS + diagonal_blending = FALSE + +/turf/simulated/wall/tgmc/window/redstripe_r + icon_state = "predstriper_window0" + wall_base_state = "predstriper_window" + wall_blend_category = "predstriper" + window_types = WINDOW_GLASS|WINDOW_RGLASS + +/turf/simulated/wall/tgmc/window/redstripe_r/reinf + icon_state = "predstriper_rwindow0" + wall_base_state = "predstriper_rwindow" + wall_blend_category = "predstriper" + +/turf/simulated/wall/tgmc/window/darkwall + icon_state = "darkwall_window0" + wall_base_state = "darkwall_window" + wall_blend_category = "darkwall" + window_types = WINDOW_GLASS|WINDOW_RGLASS + diagonal_blending = FALSE + +/turf/simulated/wall/tgmc/window/darkwall/reinf + icon_state = "darkwall_rwindow0" + wall_base_state = "darkwall_rwindow" + +#undef WINDOW_GLASS +#undef WINDOW_RGLASS diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index a9cdb34ca8..5cb1a630e6 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -1,343 +1,343 @@ -/turf/simulated/wall - name = "wall" - desc = "A huge chunk of metal used to separate rooms." - icon = 'icons/turf/wall_masks.dmi' - icon_state = "generic" - opacity = 1 - density = TRUE - blocks_air = 1 - thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall - - var/icon/wall_masks = 'icons/turf/wall_masks.dmi' - var/damage = 0 - var/damage_overlay = 0 - var/global/damage_overlays[16] - var/active - var/can_open = 0 - var/datum/material/girder_material - var/datum/material/material - var/datum/material/reinf_material - var/last_state - var/construction_stage - - // There's basically always going to be wall connections, making this lazy doesn't seem like it'd help much unless you wanted to make it bitflags instead. - var/list/wall_connections = list("0", "0", "0", "0") - -// Walls always hide the stuff below them. -/turf/simulated/wall/levelupdate() - for(var/obj/O in src) - O.hide(1) - -/turf/simulated/wall/Initialize(mapload, materialtype, rmaterialtype, girdertype) - . = ..() - icon_state = "blank" - if(!materialtype) - materialtype = DEFAULT_WALL_MATERIAL - material = get_material_by_name(materialtype) - if(!girdertype) - girdertype = DEFAULT_WALL_MATERIAL - girder_material = get_material_by_name(girdertype) - if(!isnull(rmaterialtype)) - reinf_material = get_material_by_name(rmaterialtype) - update_material() - START_PROCESSING(SSturfs, src) - -/turf/simulated/wall/Destroy() - STOP_PROCESSING(SSturfs, src) - return ..() - -/turf/simulated/wall/examine_icon() - return icon(icon=initial(icon), icon_state=initial(icon_state)) - -/turf/simulated/wall/process() - // Calling parent will kill processing - if(!radiate()) - return PROCESS_KILL - -/turf/simulated/wall/proc/get_material() - return material - -/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj,/obj/item/projectile/beam)) - burn(2500) - else if(istype(Proj,/obj/item/projectile/ion)) - burn(500) - - var/proj_damage = Proj.get_structure_damage() - - //cap the amount of damage, so that things like emitters can't destroy walls in one hit. - var/damage = min(proj_damage, 100) - - if(Proj.damage_type == BURN && damage > 0) - if(thermite) - thermitemelt() - - if(istype(Proj,/obj/item/projectile/beam)) - if(material && material.reflectivity >= 0.5) // Time to reflect lasers. - var/new_damage = damage * material.reflectivity - var/outgoing_damage = damage - new_damage - damage = new_damage - Proj.damage = outgoing_damage - - visible_message("\The [src] reflects \the [Proj]!") - - // Find a turf near or on the original location to bounce to - var/new_x = Proj.starting.x + pick(0, 0, 0, -1, 1, -2, 2) - var/new_y = Proj.starting.y + pick(0, 0, 0, -1, 1, -2, 2) - //var/turf/curloc = get_turf(src) - var/turf/curloc = get_step(src, get_dir(src, Proj.starting)) - - Proj.penetrating += 1 // Needed for the beam to get out of the wall. - - // redirect the projectile - Proj.redirect(new_x, new_y, curloc, null) - - take_damage(damage) - return - -/turf/simulated/wall/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) - ..() - if(ismob(AM)) - return - - var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) - if (tforce < 15) - return - - take_damage(tforce) - -/turf/simulated/wall/proc/clear_plants() - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - for(var/obj/effect/plant/plant in range(src, 1)) - if(!plant.floor) //shrooms drop to the floor - plant.floor = 1 - plant.update_icon() - plant.pixel_x = 0 - plant.pixel_y = 0 - plant.update_neighbors() - -/turf/simulated/wall/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) - clear_plants() - ..(N, tell_universe, force_lighting_update, preserve_outdoors) - -//Appearance -/turf/simulated/wall/examine(mob/user) - . = ..() - - if(!damage) - . += "It looks fully intact." - else - var/dam = damage / material.integrity - if(dam <= 0.3) - . += "It looks slightly damaged." - else if(dam <= 0.6) - . += "It looks moderately damaged." - else - . += "It looks heavily damaged." - - if(locate(/obj/effect/overlay/wallrot) in src) - . += "There is fungus growing on [src]." - -//Damage - -/turf/simulated/wall/melt() - - if(!can_melt()) - return - - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - if(!F) - return - F.burn_tile() - F.icon_state = "wall_thermite" - visible_message("\The [src] spontaneously combusts!.") //!!OH SHIT!! - return - -/turf/simulated/wall/take_damage(dam) - if(dam) - damage = max(0, damage + dam) - update_damage() - return - -/turf/simulated/wall/proc/update_damage() - var/cap = material.integrity - if(reinf_material) - cap += reinf_material.integrity - - if(locate(/obj/effect/overlay/wallrot) in src) - cap = cap / 10 - - if(damage >= cap) - dismantle_wall() - else - update_icon() - - return - -/turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( - burn(exposed_temperature) - -/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) - burn(adj_temp) - if(adj_temp > material.melting_point) - take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) - - return ..() - -/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product) - - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!no_product) - if(reinf_material) - reinf_material.place_dismantled_girder(src, reinf_material, girder_material) - else - material.place_dismantled_girder(src, null, girder_material) - if(!devastated) - material.place_dismantled_product(src) - if (!reinf_material) - material.place_dismantled_product(src) - - for(var/obj/O in src.contents) //Eject contents! - if(istype(O,/obj/structure/sign/poster)) - var/obj/structure/sign/poster/P = O - P.roll_and_drop(src) - else - O.loc = src - - clear_plants() - material = get_material_by_name("placeholder") - reinf_material = null - girder_material = null - update_connections(1) - - ChangeTurf(/turf/simulated/floor/plating) - -/turf/simulated/wall/ex_act(severity) - switch(severity) - if(1.0) - if(girder_material.explosion_resistance >= 25 && prob(girder_material.explosion_resistance)) - new /obj/structure/girder/displaced(src, girder_material.name) - src.ChangeTurf(get_base_turf_by_area(src)) - if(2.0) - if(prob(75)) - take_damage(rand(150, 250)) - else - dismantle_wall(1,1) - if(3.0) - take_damage(rand(0, 250)) - else - return - -// Wall-rot effect, a nasty fungus that destroys walls. -/turf/simulated/wall/proc/rot() - if(locate(/obj/effect/overlay/wallrot) in src) - return FALSE - - // Wall-rot can't go onto walls that are surrounded in all four cardinal directions. - // Because of spores, or something. It's actually to avoid the pain that is removing wallrot surrounded by - // four r-walls. - var/at_least_one_open_turf = FALSE - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - if(!T.check_density()) - at_least_one_open_turf = TRUE - break - - if(!at_least_one_open_turf) - return FALSE - - var/number_rots = rand(2,3) - for(var/i=0, i= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted. - dismantle_wall(1,1) - else - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - F.burn_tile() - F.icon_state = "dmg[rand(1,4)]" - to_chat(user, "The thermite starts melting through the wall.") - - spawn(100) - if(O) - qdel(O) -// F.sd_LumReset() //TODO: ~Carn - return - -/turf/simulated/wall/proc/radiate() - var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) + (girder_material ? girder_material.radioactivity / 2 : 0) - if(!total_radiation) - return - - SSradiation.radiate(src, total_radiation) - return total_radiation - -/turf/simulated/wall/proc/burn(temperature) - if(material.combustion_effect(src, temperature, 0.7)) - spawn(2) - new /obj/structure/girder(src, girder_material.name) - src.ChangeTurf(/turf/simulated/floor) - for(var/turf/simulated/wall/W in range(3,src)) - W.burn((temperature/4)) - for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) - D.ignite(temperature/4) - -/turf/simulated/wall/can_engrave() - return (material && material.hardness >= 10 && material.hardness <= 100) - -/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm -/turf/simulated/wall/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - if(material.integrity > 1000) // Don't decon things like elevatorium. - return FALSE - if(reinf_material && !the_rcd.can_remove_rwalls) // Gotta do it the old fashioned way if your RCD can't. - return FALSE - - if(passed_mode == RCD_DECONSTRUCT) - var/delay_to_use = material.integrity / 3 // Steel has 150 integrity, so it'll take five seconds to down a regular wall. - if(reinf_material) - delay_to_use += reinf_material.integrity / 3 - return list( - RCD_VALUE_MODE = RCD_DECONSTRUCT, - RCD_VALUE_DELAY = delay_to_use, - RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 - ) - return FALSE - -/turf/simulated/wall/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - if(passed_mode == RCD_DECONSTRUCT) - to_chat(user, span("notice", "You deconstruct \the [src].")) - ChangeTurf(/turf/simulated/floor/airless, preserve_outdoors = TRUE) - return TRUE - return FALSE -*/ - -/turf/simulated/wall/AltClick(mob/user) - if(isliving(user)) - var/mob/living/livingUser = user - if(try_graffiti(livingUser, livingUser.get_active_hand())) - return - . = ..() +/turf/simulated/wall + name = "wall" + desc = "A huge chunk of metal used to separate rooms." + icon = 'icons/turf/wall_masks.dmi' + icon_state = "generic" + opacity = 1 + density = TRUE + blocks_air = 1 + thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT + heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + + var/icon/wall_masks = 'icons/turf/wall_masks.dmi' + var/damage = 0 + var/damage_overlay = 0 + var/global/damage_overlays[16] + var/active + var/can_open = 0 + var/datum/material/girder_material + var/datum/material/material + var/datum/material/reinf_material + var/last_state + var/construction_stage + + // There's basically always going to be wall connections, making this lazy doesn't seem like it'd help much unless you wanted to make it bitflags instead. + var/list/wall_connections = list("0", "0", "0", "0") + +// Walls always hide the stuff below them. +/turf/simulated/wall/levelupdate() + for(var/obj/O in src) + O.hide(1) + +/turf/simulated/wall/Initialize(mapload, materialtype, rmaterialtype, girdertype) + . = ..() + icon_state = "blank" + if(!materialtype) + materialtype = DEFAULT_WALL_MATERIAL + material = get_material_by_name(materialtype) + if(!girdertype) + girdertype = DEFAULT_WALL_MATERIAL + girder_material = get_material_by_name(girdertype) + if(!isnull(rmaterialtype)) + reinf_material = get_material_by_name(rmaterialtype) + update_material() + START_PROCESSING(SSturfs, src) + +/turf/simulated/wall/Destroy() + STOP_PROCESSING(SSturfs, src) + return ..() + +/turf/simulated/wall/examine_icon() + return icon(icon=initial(icon), icon_state=initial(icon_state)) + +/turf/simulated/wall/process() + // Calling parent will kill processing + if(!radiate()) + return PROCESS_KILL + +/turf/simulated/wall/proc/get_material() + return material + +/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj,/obj/item/projectile/beam)) + burn(2500) + else if(istype(Proj,/obj/item/projectile/ion)) + burn(500) + + var/proj_damage = Proj.get_structure_damage() + + //cap the amount of damage, so that things like emitters can't destroy walls in one hit. + var/damage = min(proj_damage, 100) + + if(Proj.damage_type == BURN && damage > 0) + if(thermite) + thermitemelt() + + if(istype(Proj,/obj/item/projectile/beam)) + if(material && material.reflectivity >= 0.5) // Time to reflect lasers. + var/new_damage = damage * material.reflectivity + var/outgoing_damage = damage - new_damage + damage = new_damage + Proj.damage = outgoing_damage + + visible_message("\The [src] reflects \the [Proj]!") + + // Find a turf near or on the original location to bounce to + var/new_x = Proj.starting.x + pick(0, 0, 0, -1, 1, -2, 2) + var/new_y = Proj.starting.y + pick(0, 0, 0, -1, 1, -2, 2) + //var/turf/curloc = get_turf(src) + var/turf/curloc = get_step(src, get_dir(src, Proj.starting)) + + Proj.penetrating += 1 // Needed for the beam to get out of the wall. + + // redirect the projectile + Proj.redirect(new_x, new_y, curloc, null) + + take_damage(damage) + return + +/turf/simulated/wall/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) + ..() + if(ismob(AM)) + return + + var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) + if (tforce < 15) + return + + take_damage(tforce) + +/turf/simulated/wall/proc/clear_plants() + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + for(var/obj/effect/plant/plant in range(src, 1)) + if(!plant.floor) //shrooms drop to the floor + plant.floor = 1 + plant.update_icon() + plant.pixel_x = 0 + plant.pixel_y = 0 + plant.update_neighbors() + +/turf/simulated/wall/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) + clear_plants() + ..(N, tell_universe, force_lighting_update, preserve_outdoors) + +//Appearance +/turf/simulated/wall/examine(mob/user) + . = ..() + + if(!damage) + . += "It looks fully intact." + else + var/dam = damage / material.integrity + if(dam <= 0.3) + . += "It looks slightly damaged." + else if(dam <= 0.6) + . += "It looks moderately damaged." + else + . += "It looks heavily damaged." + + if(locate(/obj/effect/overlay/wallrot) in src) + . += "There is fungus growing on [src]." + +//Damage + +/turf/simulated/wall/melt() + + if(!can_melt()) + return + + src.ChangeTurf(/turf/simulated/floor/plating) + + var/turf/simulated/floor/F = src + if(!F) + return + F.burn_tile() + F.icon_state = "wall_thermite" + visible_message("\The [src] spontaneously combusts!.") //!!OH SHIT!! + return + +/turf/simulated/wall/take_damage(dam) + if(dam) + damage = max(0, damage + dam) + update_damage() + return + +/turf/simulated/wall/proc/update_damage() + var/cap = material.integrity + if(reinf_material) + cap += reinf_material.integrity + + if(locate(/obj/effect/overlay/wallrot) in src) + cap = cap / 10 + + if(damage >= cap) + dismantle_wall() + else + update_icon() + + return + +/turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( + burn(exposed_temperature) + +/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) + burn(adj_temp) + if(adj_temp > material.melting_point) + take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) + + return ..() + +/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product) + + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(!no_product) + if(reinf_material) + reinf_material.place_dismantled_girder(src, reinf_material, girder_material) + else + material.place_dismantled_girder(src, null, girder_material) + if(!devastated) + material.place_dismantled_product(src) + if (!reinf_material) + material.place_dismantled_product(src) + + for(var/obj/O in src.contents) //Eject contents! + if(istype(O,/obj/structure/sign/poster)) + var/obj/structure/sign/poster/P = O + P.roll_and_drop(src) + else + O.loc = src + + clear_plants() + material = get_material_by_name("placeholder") + reinf_material = null + girder_material = null + update_connections(1) + + ChangeTurf(/turf/simulated/floor/plating) + +/turf/simulated/wall/ex_act(severity) + switch(severity) + if(1.0) + if(girder_material.explosion_resistance >= 25 && prob(girder_material.explosion_resistance)) + new /obj/structure/girder/displaced(src, girder_material.name) + src.ChangeTurf(get_base_turf_by_area(src)) + if(2.0) + if(prob(75)) + take_damage(rand(150, 250)) + else + dismantle_wall(1,1) + if(3.0) + take_damage(rand(0, 250)) + else + return + +// Wall-rot effect, a nasty fungus that destroys walls. +/turf/simulated/wall/proc/rot() + if(locate(/obj/effect/overlay/wallrot) in src) + return FALSE + + // Wall-rot can't go onto walls that are surrounded in all four cardinal directions. + // Because of spores, or something. It's actually to avoid the pain that is removing wallrot surrounded by + // four r-walls. + var/at_least_one_open_turf = FALSE + for(var/direction in GLOB.cardinal) + var/turf/T = get_step(src, direction) + if(!T.check_density()) + at_least_one_open_turf = TRUE + break + + if(!at_least_one_open_turf) + return FALSE + + var/number_rots = rand(2,3) + for(var/i=0, i= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted. + dismantle_wall(1,1) + else + src.ChangeTurf(/turf/simulated/floor/plating) + + var/turf/simulated/floor/F = src + F.burn_tile() + F.icon_state = "dmg[rand(1,4)]" + to_chat(user, "The thermite starts melting through the wall.") + + spawn(100) + if(O) + qdel(O) +// F.sd_LumReset() //TODO: ~Carn + return + +/turf/simulated/wall/proc/radiate() + var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) + (girder_material ? girder_material.radioactivity / 2 : 0) + if(!total_radiation) + return + + SSradiation.radiate(src, total_radiation) + return total_radiation + +/turf/simulated/wall/proc/burn(temperature) + if(material.combustion_effect(src, temperature, 0.7)) + spawn(2) + new /obj/structure/girder(src, girder_material.name) + src.ChangeTurf(/turf/simulated/floor) + for(var/turf/simulated/wall/W in range(3,src)) + W.burn((temperature/4)) + for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) + D.ignite(temperature/4) + +/turf/simulated/wall/can_engrave() + return (material && material.hardness >= 10 && material.hardness <= 100) + +/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm +/turf/simulated/wall/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + if(material.integrity > 1000) // Don't decon things like elevatorium. + return FALSE + if(reinf_material && !the_rcd.can_remove_rwalls) // Gotta do it the old fashioned way if your RCD can't. + return FALSE + + if(passed_mode == RCD_DECONSTRUCT) + var/delay_to_use = material.integrity / 3 // Steel has 150 integrity, so it'll take five seconds to down a regular wall. + if(reinf_material) + delay_to_use += reinf_material.integrity / 3 + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = delay_to_use, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5 + ) + return FALSE + +/turf/simulated/wall/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + if(passed_mode == RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + ChangeTurf(/turf/simulated/floor/airless, preserve_outdoors = TRUE) + return TRUE + return FALSE +*/ + +/turf/simulated/wall/AltClick(mob/user) + if(isliving(user)) + var/mob/living/livingUser = user + if(try_graffiti(livingUser, livingUser.get_active_hand())) + return + . = ..() diff --git a/code/game/turfs/simulated_ch.dm b/code/game/turfs/simulated_ch.dm index 709875cc9a..df75f55f5b 100644 --- a/code/game/turfs/simulated_ch.dm +++ b/code/game/turfs/simulated_ch.dm @@ -1,17 +1,17 @@ -/turf/simulated - - //CHOMP reagent belly sloshing sounds - var/static/list/base_vorefootstep_sounds = list("human" = list( - 'sound/vore/walkslosh1.ogg', - 'sound/vore/walkslosh2.ogg', - 'sound/vore/walkslosh3.ogg', - 'sound/vore/walkslosh4.ogg', - 'sound/vore/walkslosh5.ogg', - 'sound/vore/walkslosh6.ogg', - 'sound/vore/walkslosh7.ogg', - 'sound/vore/walkslosh8.ogg', - 'sound/vore/walkslosh9.ogg', - 'sound/vore/walkslosh10.ogg')) - -// Removal of older code - this isn't necessary anymore as /decl/flooring/floortype and initial_flooring = /decl/flooring/floortype +/turf/simulated + + //CHOMP reagent belly sloshing sounds + var/static/list/base_vorefootstep_sounds = list("human" = list( + 'sound/vore/walkslosh1.ogg', + 'sound/vore/walkslosh2.ogg', + 'sound/vore/walkslosh3.ogg', + 'sound/vore/walkslosh4.ogg', + 'sound/vore/walkslosh5.ogg', + 'sound/vore/walkslosh6.ogg', + 'sound/vore/walkslosh7.ogg', + 'sound/vore/walkslosh8.ogg', + 'sound/vore/walkslosh9.ogg', + 'sound/vore/walkslosh10.ogg')) + +// Removal of older code - this isn't necessary anymore as /decl/flooring/floortype and initial_flooring = /decl/flooring/floortype // can handle this. If you're not sure how to do it, refer to flooring.dm, and read things over. It's explained there. Rykka <3 \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index a997ed9a66..289a3b75ce 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -1,263 +1,263 @@ -/turf/space - icon = 'icons/turf/space.dmi' - name = "\proper space" - icon_state = "default" - dynamic_lighting = 0 - plane = SPACE_PLANE - flags = TURF_ACID_IMMUNE - temperature = T20C - thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT - can_build_into_floor = TRUE - var/keep_sprite = FALSE - var/edge = FALSE //If we're an edge - var/forced_dirs = 0 //Force this one to pretend it's an overedge turf - -/turf/space/Initialize() - if(config.starlight) - update_starlight() - - //Sprite stuff only beyond here - if(keep_sprite) - return ..() - - //We might be an edge - if(y == world.maxy || forced_dirs & NORTH) - edge |= NORTH - else if(y == 1 || forced_dirs & SOUTH) - edge |= SOUTH - - if(x == 1 || forced_dirs & WEST) - edge |= WEST - else if(x == world.maxx || forced_dirs & EAST) - edge |= EAST - - if(edge) //Magic edges - appearance = SSskybox.mapedge_cache["[edge]"] - else //Dust - appearance = SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"] - - return ..() - -/turf/space/proc/toggle_transit(var/direction) - if(edge) //Not a great way to do this yet. Maybe we'll come up with one. We could pre-make sprites... or tile the overlay over it? - return - - if(!direction) //Stopping our transit - appearance = SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"] - else if(direction & (NORTH|SOUTH)) //Starting transit vertically - var/x_shift = SSskybox.phase_shift_by_x[src.x % (SSskybox.phase_shift_by_x.len - 1) + 1] - var/transit_state = ((direction & SOUTH ? world.maxy - src.y : src.y) + x_shift)%15 - appearance = SSskybox.speedspace_cache["NS_[transit_state]"] - else if(direction & (EAST|WEST)) //Starting transit horizontally - var/y_shift = SSskybox.phase_shift_by_y[src.y % (SSskybox.phase_shift_by_y.len - 1) + 1] - var/transit_state = ((direction & WEST ? world.maxx - src.x : src.x) + y_shift)%15 - appearance = SSskybox.speedspace_cache["EW_[transit_state]"] - - for(var/atom/movable/AM in src) - if (!AM.simulated) - continue - - if(!AM.anchored) - AM.throw_at(get_step(src,reverse_direction(direction)), 5, 1) - else if (istype(AM, /obj/effect/decal)) - qdel(AM) //No more space blood coming with the shuttle - -/turf/space/is_space() - return 1 - -// override for space turfs, since they should never hide anything -/turf/space/levelupdate() - for(var/obj/O in src) - O.hide(0) - -/turf/space/is_solid_structure() - return locate(/obj/structure/lattice, src) //counts as solid structure if it has a lattice - -/turf/space/proc/update_starlight() - if(locate(/turf/simulated) in orange(src,1)) - set_light(config.starlight) - else - set_light(0) - -/turf/space/attackby(obj/item/C as obj, mob/user as mob) - - if(istype(C, /obj/item/stack/rods)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - return - var/obj/item/stack/rods/R = C - if (R.use(1)) - to_chat(user, "Constructing support lattice ...") - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - ReplaceWithLattice() - return - - if(istype(C, /obj/item/stack/tile/floor)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - var/obj/item/stack/tile/floor/S = C - if (S.get_amount() < 1) - return - qdel(L) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - S.use(1) - ChangeTurf(/turf/simulated/floor/airless) - return - else - to_chat(user, "The plating is going to need some support.") - - if(istype(C, /obj/item/stack/tile/roofing)) - var/turf/T = GetAbove(src) - var/obj/item/stack/tile/roofing/R = C - - // Patch holes in the ceiling - if(T) - if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) - // Must be build adjacent to an existing floor/wall, no floating floors - var/turf/simulated/A = locate(/turf/simulated/floor) in T.CardinalTurfs() - if(!A) - A = locate(/turf/simulated/wall) in T.CardinalTurfs() - if(!A) - to_chat(user, "There's nothing to attach the ceiling to!") - return - - if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating - T.ReplaceWithLattice() - T.ChangeTurf(/turf/simulated/floor) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - user.visible_message("[user] expands the ceiling.", "You expand the ceiling.") - else - to_chat(user, "There aren't any holes in the ceiling to patch here.") - return - // Space shouldn't have weather of the sort planets with atmospheres do. - // If that's changed, then you'll want to swipe the rest of the roofing code from code/game/turfs/simulated/floor_attackby.dm - return - -/turf/space/Entered(var/atom/movable/A) - . = ..() - - if(edge && ticker?.mode && !density) // !density so 'fake' space turfs don't fling ghosts everywhere - if(isliving(A)) - var/mob/living/L = A - if(L.pulling) - var/atom/movable/pulled = L.pulling - L.stop_pulling() - A?.touch_map_edge() - pulled.forceMove(L.loc) - L.continue_pulling(pulled) - else - A?.touch_map_edge() - else - A?.touch_map_edge() - -/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj) - var/cur_x - var/cur_y - var/next_x - var/next_y - var/target_z - var/list/y_arr - - if(src.x <= 1) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) - qdel(A) - return - - var/list/cur_pos = src.get_global_map_pos() - if(!cur_pos) return - cur_x = cur_pos["x"] - cur_y = cur_pos["y"] - next_x = (--cur_x||global_map.len) - y_arr = global_map[next_x] - target_z = y_arr[cur_y] -/* - //debug - to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") - to_world("Target Z = [target_z]") - to_world("Next X = [next_x]") - //debug -*/ - if(target_z) - A.z = target_z - A.x = world.maxx - 2 - spawn (0) - if ((A && A.loc)) - A.loc.Entered(A) - else if (src.x >= world.maxx) - if(istype(A, /obj/effect/meteor)) - qdel(A) - return - - var/list/cur_pos = src.get_global_map_pos() - if(!cur_pos) return - cur_x = cur_pos["x"] - cur_y = cur_pos["y"] - next_x = (++cur_x > global_map.len ? 1 : cur_x) - y_arr = global_map[next_x] - target_z = y_arr[cur_y] -/* - //debug - to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") - to_world("Target Z = [target_z]") - to_world("Next X = [next_x]") - //debug -*/ - if(target_z) - A.z = target_z - A.x = 3 - spawn (0) - if ((A && A.loc)) - A.loc.Entered(A) - else if (src.y <= 1) - if(istype(A, /obj/effect/meteor)) - qdel(A) - return - var/list/cur_pos = src.get_global_map_pos() - if(!cur_pos) return - cur_x = cur_pos["x"] - cur_y = cur_pos["y"] - y_arr = global_map[cur_x] - next_y = (--cur_y||y_arr.len) - target_z = y_arr[next_y] -/* - //debug - to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") - to_world("Next Y = [next_y]") - to_world("Target Z = [target_z]") - //debug -*/ - if(target_z) - A.z = target_z - A.y = world.maxy - 2 - spawn (0) - if ((A && A.loc)) - A.loc.Entered(A) - - else if (src.y >= world.maxy) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) - qdel(A) - return - var/list/cur_pos = src.get_global_map_pos() - if(!cur_pos) return - cur_x = cur_pos["x"] - cur_y = cur_pos["y"] - y_arr = global_map[cur_x] - next_y = (++cur_y > y_arr.len ? 1 : cur_y) - target_z = y_arr[next_y] -/* - //debug - to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") - to_world("Next Y = [next_y]") - to_world("Target Z = [target_z]") - //debug -*/ - if(target_z) - A.z = target_z - A.y = 3 - spawn (0) - if ((A && A.loc)) - A.loc.Entered(A) - return - -/turf/space/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) - return ..(N, tell_universe, 1, preserve_outdoors) +/turf/space + icon = 'icons/turf/space.dmi' + name = "\proper space" + icon_state = "default" + dynamic_lighting = 0 + plane = SPACE_PLANE + flags = TURF_ACID_IMMUNE + temperature = T20C + thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT + can_build_into_floor = TRUE + var/keep_sprite = FALSE + var/edge = FALSE //If we're an edge + var/forced_dirs = 0 //Force this one to pretend it's an overedge turf + +/turf/space/Initialize() + if(config.starlight) + update_starlight() + + //Sprite stuff only beyond here + if(keep_sprite) + return ..() + + //We might be an edge + if(y == world.maxy || forced_dirs & NORTH) + edge |= NORTH + else if(y == 1 || forced_dirs & SOUTH) + edge |= SOUTH + + if(x == 1 || forced_dirs & WEST) + edge |= WEST + else if(x == world.maxx || forced_dirs & EAST) + edge |= EAST + + if(edge) //Magic edges + appearance = SSskybox.mapedge_cache["[edge]"] + else //Dust + appearance = SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"] + + return ..() + +/turf/space/proc/toggle_transit(var/direction) + if(edge) //Not a great way to do this yet. Maybe we'll come up with one. We could pre-make sprites... or tile the overlay over it? + return + + if(!direction) //Stopping our transit + appearance = SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"] + else if(direction & (NORTH|SOUTH)) //Starting transit vertically + var/x_shift = SSskybox.phase_shift_by_x[src.x % (SSskybox.phase_shift_by_x.len - 1) + 1] + var/transit_state = ((direction & SOUTH ? world.maxy - src.y : src.y) + x_shift)%15 + appearance = SSskybox.speedspace_cache["NS_[transit_state]"] + else if(direction & (EAST|WEST)) //Starting transit horizontally + var/y_shift = SSskybox.phase_shift_by_y[src.y % (SSskybox.phase_shift_by_y.len - 1) + 1] + var/transit_state = ((direction & WEST ? world.maxx - src.x : src.x) + y_shift)%15 + appearance = SSskybox.speedspace_cache["EW_[transit_state]"] + + for(var/atom/movable/AM in src) + if (!AM.simulated) + continue + + if(!AM.anchored) + AM.throw_at(get_step(src,reverse_direction(direction)), 5, 1) + else if (istype(AM, /obj/effect/decal)) + qdel(AM) //No more space blood coming with the shuttle + +/turf/space/is_space() + return 1 + +// override for space turfs, since they should never hide anything +/turf/space/levelupdate() + for(var/obj/O in src) + O.hide(0) + +/turf/space/is_solid_structure() + return locate(/obj/structure/lattice, src) //counts as solid structure if it has a lattice + +/turf/space/proc/update_starlight() + if(locate(/turf/simulated) in orange(src,1)) + set_light(config.starlight) + else + set_light(0) + +/turf/space/attackby(obj/item/C as obj, mob/user as mob) + + if(istype(C, /obj/item/stack/rods)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + return + var/obj/item/stack/rods/R = C + if (R.use(1)) + to_chat(user, "Constructing support lattice ...") + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + ReplaceWithLattice() + return + + if(istype(C, /obj/item/stack/tile/floor)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + var/obj/item/stack/tile/floor/S = C + if (S.get_amount() < 1) + return + qdel(L) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + S.use(1) + ChangeTurf(/turf/simulated/floor/airless) + return + else + to_chat(user, "The plating is going to need some support.") + + if(istype(C, /obj/item/stack/tile/roofing)) + var/turf/T = GetAbove(src) + var/obj/item/stack/tile/roofing/R = C + + // Patch holes in the ceiling + if(T) + if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) + // Must be build adjacent to an existing floor/wall, no floating floors + var/turf/simulated/A = locate(/turf/simulated/floor) in T.CardinalTurfs() + if(!A) + A = locate(/turf/simulated/wall) in T.CardinalTurfs() + if(!A) + to_chat(user, "There's nothing to attach the ceiling to!") + return + + if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating + T.ReplaceWithLattice() + T.ChangeTurf(/turf/simulated/floor) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + user.visible_message("[user] expands the ceiling.", "You expand the ceiling.") + else + to_chat(user, "There aren't any holes in the ceiling to patch here.") + return + // Space shouldn't have weather of the sort planets with atmospheres do. + // If that's changed, then you'll want to swipe the rest of the roofing code from code/game/turfs/simulated/floor_attackby.dm + return + +/turf/space/Entered(var/atom/movable/A) + . = ..() + + if(edge && ticker?.mode && !density) // !density so 'fake' space turfs don't fling ghosts everywhere + if(isliving(A)) + var/mob/living/L = A + if(L.pulling) + var/atom/movable/pulled = L.pulling + L.stop_pulling() + A?.touch_map_edge() + pulled.forceMove(L.loc) + L.continue_pulling(pulled) + else + A?.touch_map_edge() + else + A?.touch_map_edge() + +/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj) + var/cur_x + var/cur_y + var/next_x + var/next_y + var/target_z + var/list/y_arr + + if(src.x <= 1) + if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + qdel(A) + return + + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + next_x = (--cur_x||global_map.len) + y_arr = global_map[next_x] + target_z = y_arr[cur_y] +/* + //debug + to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") + to_world("Target Z = [target_z]") + to_world("Next X = [next_x]") + //debug +*/ + if(target_z) + A.z = target_z + A.x = world.maxx - 2 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + else if (src.x >= world.maxx) + if(istype(A, /obj/effect/meteor)) + qdel(A) + return + + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + next_x = (++cur_x > global_map.len ? 1 : cur_x) + y_arr = global_map[next_x] + target_z = y_arr[cur_y] +/* + //debug + to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") + to_world("Target Z = [target_z]") + to_world("Next X = [next_x]") + //debug +*/ + if(target_z) + A.z = target_z + A.x = 3 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + else if (src.y <= 1) + if(istype(A, /obj/effect/meteor)) + qdel(A) + return + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + y_arr = global_map[cur_x] + next_y = (--cur_y||y_arr.len) + target_z = y_arr[next_y] +/* + //debug + to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") + to_world("Next Y = [next_y]") + to_world("Target Z = [target_z]") + //debug +*/ + if(target_z) + A.z = target_z + A.y = world.maxy - 2 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + + else if (src.y >= world.maxy) + if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + qdel(A) + return + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + y_arr = global_map[cur_x] + next_y = (++cur_y > y_arr.len ? 1 : cur_y) + target_z = y_arr[next_y] +/* + //debug + to_world("Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]") + to_world("Next Y = [next_y]") + to_world("Target Z = [target_z]") + //debug +*/ + if(target_z) + A.z = target_z + A.y = 3 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + return + +/turf/space/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) + return ..(N, tell_universe, 1, preserve_outdoors) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 02c589e966..e5a560a913 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,31 +1,31 @@ -/turf/space/transit - can_build_into_floor = FALSE - var/pushdirection // push things that get caught in the transit tile this direction - -//Overwrite because we dont want people building rods in space. -/turf/space/transit/attackby(obj/O as obj, mob/user as mob) - return - -/turf/space/transit/Initialize() - . = ..() - toggle_transit(reverse_dir[pushdirection]) - -//------------------------ - -/turf/space/transit/north // moving to the north - icon_state = "arrow-north" - pushdirection = SOUTH // south because the space tile is scrolling south - -/turf/space/transit/south // moving to the south - icon_state = "arrow-south" - pushdirection = SOUTH // south because the space tile is scrolling south - -/turf/space/transit/east // moving to the east - icon_state = "arrow-east" - pushdirection = WEST - -/turf/space/transit/west // moving to the west - icon_state = "arrow-west" - pushdirection = WEST - +/turf/space/transit + can_build_into_floor = FALSE + var/pushdirection // push things that get caught in the transit tile this direction + +//Overwrite because we dont want people building rods in space. +/turf/space/transit/attackby(obj/O as obj, mob/user as mob) + return + +/turf/space/transit/Initialize() + . = ..() + toggle_transit(reverse_dir[pushdirection]) + +//------------------------ + +/turf/space/transit/north // moving to the north + icon_state = "arrow-north" + pushdirection = SOUTH // south because the space tile is scrolling south + +/turf/space/transit/south // moving to the south + icon_state = "arrow-south" + pushdirection = SOUTH // south because the space tile is scrolling south + +/turf/space/transit/east // moving to the east + icon_state = "arrow-east" + pushdirection = WEST + +/turf/space/transit/west // moving to the west + icon_state = "arrow-west" + pushdirection = WEST + //------------------------ \ No newline at end of file diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm index 81b248ec0d..43f1e90f59 100644 --- a/code/game/turfs/turf_flick_animations.dm +++ b/code/game/turfs/turf_flick_animations.dm @@ -1,20 +1,20 @@ -/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num) -//This proc throws up either an icon or an animation for a specified amount of time. -//The variables should be apparent enough. - if(!location && target) - location = get_turf(target) - if(location && !target) - target = location - var/atom/movable/overlay/animation = new /atom/movable/overlay(location) - if(direction) - animation.set_dir(direction) - animation.icon = a_icon - animation.layer = target:layer+1 - if(a_icon_state) - animation.icon_state = a_icon_state - else - animation.icon_state = "blank" - animation.master = target - flick(flick_anim, animation) - spawn(max(sleeptime, 15)) - qdel(animation) +/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num) +//This proc throws up either an icon or an animation for a specified amount of time. +//The variables should be apparent enough. + if(!location && target) + location = get_turf(target) + if(location && !target) + target = location + var/atom/movable/overlay/animation = new /atom/movable/overlay(location) + if(direction) + animation.set_dir(direction) + animation.icon = a_icon + animation.layer = target:layer+1 + if(a_icon_state) + animation.icon_state = a_icon_state + else + animation.icon_state = "blank" + animation.master = target + flick(flick_anim, animation) + spawn(max(sleeptime, 15)) + qdel(animation) diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm index 0e8c5c98b6..f9bfd4102b 100644 --- a/code/game/turfs/unsimulated.dm +++ b/code/game/turfs/unsimulated.dm @@ -1,32 +1,32 @@ -/turf/unsimulated - name = "command" - oxygen = MOLES_O2STANDARD - nitrogen = MOLES_N2STANDARD - var/skip_init = TRUE // Don't call down the chain, apparently for performance when loading maps at runtime. - flags = TURF_ACID_IMMUNE - -/turf/unsimulated/Initialize(mapload) - if(skip_init) - initialized = TRUE - return INITIALIZE_HINT_NORMAL - . = ..() - -//VOREStation Add -/turf/unsimulated/fake_space - name = "\proper space" - icon = 'icons/turf/space.dmi' - icon_state = "0" - dynamic_lighting = FALSE - initialized = FALSE - -/turf/unsimulated/fake_space/Initialize(mapload) - . = ..() - icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" -//VOREStation Add End - -// Better nip this just in case. -/turf/unsimulated/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - return FALSE - -/turf/unsimulated/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) - return FALSE +/turf/unsimulated + name = "command" + oxygen = MOLES_O2STANDARD + nitrogen = MOLES_N2STANDARD + var/skip_init = TRUE // Don't call down the chain, apparently for performance when loading maps at runtime. + flags = TURF_ACID_IMMUNE + +/turf/unsimulated/Initialize(mapload) + if(skip_init) + initialized = TRUE + return INITIALIZE_HINT_NORMAL + . = ..() + +//VOREStation Add +/turf/unsimulated/fake_space + name = "\proper space" + icon = 'icons/turf/space.dmi' + icon_state = "0" + dynamic_lighting = FALSE + initialized = FALSE + +/turf/unsimulated/fake_space/Initialize(mapload) + . = ..() + icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" +//VOREStation Add End + +// Better nip this just in case. +/turf/unsimulated/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + return FALSE + +/turf/unsimulated/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + return FALSE diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index b1841dadad..ccd22d213f 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -1,72 +1,72 @@ -/turf/unsimulated/beach - name = "Beach" - icon = 'icons/misc/beach.dmi' - -/turf/unsimulated/beach/sand - name = "Sand" - icon_state = "sand" - -/turf/unsimulated/beach/coastline - name = "Coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - -/turf/unsimulated/beach/water - name = "Water" - icon_state = "water" - skip_init = FALSE - movement_cost = 4 // Water should slow you down, just like simulated turf. - -/turf/unsimulated/beach/water/Initialize() - . = ..() - add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1)) - -/turf/simulated/floor/beach - name = "Beach" - icon = 'icons/misc/beach.dmi' - initial_flooring = /decl/flooring/sand - -/turf/simulated/floor/beach/sand - name = "Sand" - icon_state = "sand" - initial_flooring = /decl/flooring/sand - -/turf/simulated/floor/beach/sand/desert - icon = 'icons/turf/desert.dmi' - icon_state = "desert" - initial_flooring = /decl/flooring/sand/desert - -/turf/simulated/floor/beach/sand/desert/Initialize() - . = ..() - if(prob(5)) - icon_state = "desert[rand(0,4)]" - -/turf/simulated/floor/beach/coastline - name = "Coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - -/turf/simulated/floor/beach/water - name = "Water" - icon_state = "water" - movement_cost = 4 // Water should slow you down, just like the original simulated turf. - initial_flooring = /decl/flooring/water - -/turf/simulated/floor/beach/water/ocean - icon_state = "seadeep" - movement_cost = 8 // Deep water should be difficult to wade through. - initial_flooring = /decl/flooring/water/beach/deep - -/turf/simulated/floor/beach/water/Initialize() - . = ..() - add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)) - -/decl/flooring/water/beach/deep // We're custom-defining a 'deep' water turf for the beach. - name = "deep water" - desc = "Deep Ocean Water" - icon = 'icons/misc/beach.dmi' - icon_base = "seadeep" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/bubbles3.ogg', // No I don't get why it's named 3/4/5 either. Whatever. - 'sound/effects/footstep/bubbles4.ogg', - 'sound/effects/footstep/bubbles5.ogg')) +/turf/unsimulated/beach + name = "Beach" + icon = 'icons/misc/beach.dmi' + +/turf/unsimulated/beach/sand + name = "Sand" + icon_state = "sand" + +/turf/unsimulated/beach/coastline + name = "Coastline" + icon = 'icons/misc/beach2.dmi' + icon_state = "sandwater" + +/turf/unsimulated/beach/water + name = "Water" + icon_state = "water" + skip_init = FALSE + movement_cost = 4 // Water should slow you down, just like simulated turf. + +/turf/unsimulated/beach/water/Initialize() + . = ..() + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1)) + +/turf/simulated/floor/beach + name = "Beach" + icon = 'icons/misc/beach.dmi' + initial_flooring = /decl/flooring/sand + +/turf/simulated/floor/beach/sand + name = "Sand" + icon_state = "sand" + initial_flooring = /decl/flooring/sand + +/turf/simulated/floor/beach/sand/desert + icon = 'icons/turf/desert.dmi' + icon_state = "desert" + initial_flooring = /decl/flooring/sand/desert + +/turf/simulated/floor/beach/sand/desert/Initialize() + . = ..() + if(prob(5)) + icon_state = "desert[rand(0,4)]" + +/turf/simulated/floor/beach/coastline + name = "Coastline" + icon = 'icons/misc/beach2.dmi' + icon_state = "sandwater" + +/turf/simulated/floor/beach/water + name = "Water" + icon_state = "water" + movement_cost = 4 // Water should slow you down, just like the original simulated turf. + initial_flooring = /decl/flooring/water + +/turf/simulated/floor/beach/water/ocean + icon_state = "seadeep" + movement_cost = 8 // Deep water should be difficult to wade through. + initial_flooring = /decl/flooring/water/beach/deep + +/turf/simulated/floor/beach/water/Initialize() + . = ..() + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)) + +/decl/flooring/water/beach/deep // We're custom-defining a 'deep' water turf for the beach. + name = "deep water" + desc = "Deep Ocean Water" + icon = 'icons/misc/beach.dmi' + icon_base = "seadeep" + footstep_sounds = list("human" = list( + 'sound/effects/footstep/bubbles3.ogg', // No I don't get why it's named 3/4/5 either. Whatever. + 'sound/effects/footstep/bubbles4.ogg', + 'sound/effects/footstep/bubbles5.ogg')) diff --git a/code/game/turfs/unsimulated/beach_vr.dm b/code/game/turfs/unsimulated/beach_vr.dm index 6fe6b07b2c..3c1f48c7b9 100644 --- a/code/game/turfs/unsimulated/beach_vr.dm +++ b/code/game/turfs/unsimulated/beach_vr.dm @@ -1,5 +1,5 @@ -/turf/simulated/floor/beach/sand/outdoors - outdoors = OUTDOORS_YES - -/turf/simulated/floor/beach/sand/desert/outdoors +/turf/simulated/floor/beach/sand/outdoors + outdoors = OUTDOORS_YES + +/turf/simulated/floor/beach/sand/desert/outdoors outdoors = OUTDOORS_YES \ No newline at end of file diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 22af37dd53..7f3df78c13 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -1,17 +1,17 @@ -/turf/unsimulated/floor - name = "floor" - icon = 'icons/turf/floors.dmi' - icon_state = "Floor3" - -/turf/unsimulated/mask - name = "mask" - icon = 'icons/turf/walls.dmi' - icon_state = "rockvault" - -/turf/unsimulated/floor/shuttle_ceiling - icon_state = "reinforced" - -/turf/unsimulated/elevator_shaft - name = "floor" - icon = 'icons/turf/floors.dmi' +/turf/unsimulated/floor + name = "floor" + icon = 'icons/turf/floors.dmi' + icon_state = "Floor3" + +/turf/unsimulated/mask + name = "mask" + icon = 'icons/turf/walls.dmi' + icon_state = "rockvault" + +/turf/unsimulated/floor/shuttle_ceiling + icon_state = "reinforced" + +/turf/unsimulated/elevator_shaft + name = "floor" + icon = 'icons/turf/floors.dmi' icon_state = "elevatorshaft" \ No newline at end of file diff --git a/code/game/turfs/unsimulated/sky_vr.dm b/code/game/turfs/unsimulated/sky_vr.dm index c71fa6470a..9d8d40c71f 100644 --- a/code/game/turfs/unsimulated/sky_vr.dm +++ b/code/game/turfs/unsimulated/sky_vr.dm @@ -1,73 +1,73 @@ -/////////////////// -// Generic skyfall turf -// Really only works well if the map doesn't have 'indoor' areas otherwise they can fall into one. -// TODO: Fix that. -/turf/unsimulated/floor/sky - name = "the sky" - desc = "It's the sky! Be careful!" - icon = 'icons/turf/floors.dmi' - icon_state = "sky_slow" - dir = SOUTH - initialized = FALSE - var/does_skyfall = TRUE - var/list/skyfall_levels - -/turf/unsimulated/floor/sky/Initialize() - . = ..() - if(does_skyfall && !LAZYLEN(skyfall_levels)) - error("[x],[y],[z], [get_area(src)] doesn't have skyfall_levels defined! Can't skyfall!") - if(locate(/turf/simulated) in orange(src,1)) - set_light(2, 2, color) - -/turf/unsimulated/floor/sky/Entered(atom/movable/AM,atom/oldloc) - . = ..() - if(!does_skyfall) - return //We don't do that - if(isobserver(AM)) - return //Don't ghostport, very annoying - if(AM.throwing) - return //Being thrown over, not fallen yet - if(!(AM.can_fall())) - return // Phased shifted kin should not fall - if(istype(AM, /obj/item/projectile)) - return // pewpew should not fall out of the sky. pew. - if(istype(AM, /obj/effect/projectile)) - return // ...neither should the effects be falling - - var/mob/living/L - if(isliving(AM)) - L = AM - if(L.is_floating) - return //Flyers/nograv can ignore it - - do_fall(AM) - -/turf/unsimulated/floor/sky/hitby(var/atom/movable/AM, var/speed) - . = ..() - - if(!does_skyfall) - return //We don't do that - - do_fall(AM) - -/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/AM) - //Bye - var/attempts = 100 - var/turf/simulated/T - while(attempts && !T) - var/turf/simulated/candidate = locate(rand(5,world.maxx-5),rand(5,world.maxy-5),pick(skyfall_levels)) - if(candidate.density) - attempts-- - continue - - T = candidate - break - - if(!T) - return - - AM.forceMove(T) - if(isliving(AM)) - var/mob/living/L = AM - message_admins("\The [AM] fell out of the sky.") - L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. +/////////////////// +// Generic skyfall turf +// Really only works well if the map doesn't have 'indoor' areas otherwise they can fall into one. +// TODO: Fix that. +/turf/unsimulated/floor/sky + name = "the sky" + desc = "It's the sky! Be careful!" + icon = 'icons/turf/floors.dmi' + icon_state = "sky_slow" + dir = SOUTH + initialized = FALSE + var/does_skyfall = TRUE + var/list/skyfall_levels + +/turf/unsimulated/floor/sky/Initialize() + . = ..() + if(does_skyfall && !LAZYLEN(skyfall_levels)) + error("[x],[y],[z], [get_area(src)] doesn't have skyfall_levels defined! Can't skyfall!") + if(locate(/turf/simulated) in orange(src,1)) + set_light(2, 2, color) + +/turf/unsimulated/floor/sky/Entered(atom/movable/AM,atom/oldloc) + . = ..() + if(!does_skyfall) + return //We don't do that + if(isobserver(AM)) + return //Don't ghostport, very annoying + if(AM.throwing) + return //Being thrown over, not fallen yet + if(!(AM.can_fall())) + return // Phased shifted kin should not fall + if(istype(AM, /obj/item/projectile)) + return // pewpew should not fall out of the sky. pew. + if(istype(AM, /obj/effect/projectile)) + return // ...neither should the effects be falling + + var/mob/living/L + if(isliving(AM)) + L = AM + if(L.is_floating) + return //Flyers/nograv can ignore it + + do_fall(AM) + +/turf/unsimulated/floor/sky/hitby(var/atom/movable/AM, var/speed) + . = ..() + + if(!does_skyfall) + return //We don't do that + + do_fall(AM) + +/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/AM) + //Bye + var/attempts = 100 + var/turf/simulated/T + while(attempts && !T) + var/turf/simulated/candidate = locate(rand(5,world.maxx-5),rand(5,world.maxy-5),pick(skyfall_levels)) + if(candidate.density) + attempts-- + continue + + T = candidate + break + + if(!T) + return + + AM.forceMove(T) + if(isliving(AM)) + var/mob/living/L = AM + message_admins("\The [AM] fell out of the sky.") + L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index dce3c345bb..674619158a 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -1,27 +1,27 @@ -/turf/unsimulated/wall - name = "wall" - icon = 'icons/turf/walls.dmi' - icon_state = "riveted" - opacity = 1 - density = TRUE - blocks_air = TRUE - -//other set - for map building -/turf/unsimulated/wall/wall1 - icon_state = "riveted1" - -/turf/unsimulated/wall/wall2 - icon_state = "riveted2" - -/turf/unsimulated/wall/fakeglass - name = "window" - icon_state = "fakewindows" - opacity = 0 - -//other set - for map building -/turf/unsimulated/wall/fakeglass2 - icon_state = "fakewindows2" - opacity = 0 - -/turf/unsimulated/wall/other +/turf/unsimulated/wall + name = "wall" + icon = 'icons/turf/walls.dmi' + icon_state = "riveted" + opacity = 1 + density = TRUE + blocks_air = TRUE + +//other set - for map building +/turf/unsimulated/wall/wall1 + icon_state = "riveted1" + +/turf/unsimulated/wall/wall2 + icon_state = "riveted2" + +/turf/unsimulated/wall/fakeglass + name = "window" + icon_state = "fakewindows" + opacity = 0 + +//other set - for map building +/turf/unsimulated/wall/fakeglass2 + icon_state = "fakewindows2" + opacity = 0 + +/turf/unsimulated/wall/other icon_state = "r_wall" \ No newline at end of file diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm index b7361ea7f7..9b00a55768 100644 --- a/code/game/vehicles/vehicle.dm +++ b/code/game/vehicles/vehicle.dm @@ -1,103 +1,103 @@ - - -/obj/vehicle - name = "Vehicle" - icon = 'icons/vehicles/vehicles.dmi' - density = TRUE - anchored = TRUE - unacidable = TRUE //To avoid the pilot-deleting shit that came with mechas - layer = MOB_LAYER - //var/can_move = 1 - 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/step_energy_drain = 10 - var/health = 300 //health is health - //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. - //the values in this list show how much damage will pass through, not how much will be absorbed. - var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) - var/obj/item/weapon/cell/cell //Our power source - var/state = 0 - var/list/log = new - var/last_message = 0 - var/add_req_access = 1 - var/maint_access = 1 - //var/dna //dna-locking the mech - var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference - var/datum/effect/effect/system/spark_spread/spark_system = new - var/lights = 0 - var/lights_power = 6 - - //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri - //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/portables_connector/connected_port = null - - var/obj/item/device/radio/radio = null - - var/max_temperature = 2500 - //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_engine,access_robotics)//required access level to open cell compartment - - var/wreckage - - var/list/equipment = new - var/obj/selected - //var/max_equip = 3 - - - - -/obj/vehicle/Initialize() - . = ..() - icon_state += "-unmanned" - add_radio() - - spark_system.set_up(2, 0, src) - spark_system.attach(src) - add_cell() - removeVerb(/atom/movable/verb/pull) - log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.") - - -//################ Helpers ########################################################### - - -/obj/vehicle/proc/removeVerb(verb_path) - verbs -= verb_path - -/obj/vehicle/proc/addVerb(verb_path) - verbs += verb_path - -/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null) - if(C) - C.forceMove(src) - cell = C - return - cell = new /obj/item/weapon/cell/mech(src) - -/obj/vehicle/proc/add_radio() - radio = new(src) - radio.name = "[src] radio" - radio.icon = icon - radio.icon_state = icon_state - radio.subspace_transmission = 1 - -/obj/vehicle/proc/check_for_support() - if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src))) - return 1 - else - return 0 - -//################ Logs and messages ############################################ - - -/obj/vehicle/proc/log_message(message as text,red=null) - log.len++ - log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") - return log.len + + +/obj/vehicle + name = "Vehicle" + icon = 'icons/vehicles/vehicles.dmi' + density = TRUE + anchored = TRUE + unacidable = TRUE //To avoid the pilot-deleting shit that came with mechas + layer = MOB_LAYER + //var/can_move = 1 + 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/step_energy_drain = 10 + var/health = 300 //health is health + //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. + //the values in this list show how much damage will pass through, not how much will be absorbed. + var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) + var/obj/item/weapon/cell/cell //Our power source + var/state = 0 + var/list/log = new + var/last_message = 0 + var/add_req_access = 1 + var/maint_access = 1 + //var/dna //dna-locking the mech + var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference + var/datum/effect/effect/system/spark_spread/spark_system = new + var/lights = 0 + var/lights_power = 6 + + //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri + //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/portables_connector/connected_port = null + + var/obj/item/device/radio/radio = null + + var/max_temperature = 2500 + //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_engine,access_robotics)//required access level to open cell compartment + + var/wreckage + + var/list/equipment = new + var/obj/selected + //var/max_equip = 3 + + + + +/obj/vehicle/Initialize() + . = ..() + icon_state += "-unmanned" + add_radio() + + spark_system.set_up(2, 0, src) + spark_system.attach(src) + add_cell() + removeVerb(/atom/movable/verb/pull) + log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.") + + +//################ Helpers ########################################################### + + +/obj/vehicle/proc/removeVerb(verb_path) + verbs -= verb_path + +/obj/vehicle/proc/addVerb(verb_path) + verbs += verb_path + +/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null) + if(C) + C.forceMove(src) + cell = C + return + cell = new /obj/item/weapon/cell/mech(src) + +/obj/vehicle/proc/add_radio() + radio = new(src) + radio.name = "[src] radio" + radio.icon = icon + radio.icon_state = icon_state + radio.subspace_transmission = 1 + +/obj/vehicle/proc/check_for_support() + if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src))) + return 1 + else + return 0 + +//################ Logs and messages ############################################ + + +/obj/vehicle/proc/log_message(message as text,red=null) + log.len++ + log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") + return log.len diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 23181a9fdb..3fabc75768 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -1,7 +1,7 @@ -/mob/living/var/suiciding = 0 - -/mob/living/verb/suicide() - set hidden = 1 - - to_chat(src, "No. Adminhelp if there is a legitimate reason, and please review our server rules.") - message_admins("[ckey] has tried to trigger the suicide verb, but it is disabled.") +/mob/living/var/suiciding = 0 + +/mob/living/verb/suicide() + set hidden = 1 + + to_chat(src, "No. Adminhelp if there is a legitimate reason, and please review our server rules.") + message_admins("[ckey] has tried to trigger the suicide verb, but it is disabled.") diff --git a/code/js/byjax.dm b/code/js/byjax.dm index bf9d778989..18b8180214 100644 --- a/code/js/byjax.dm +++ b/code/js/byjax.dm @@ -1,50 +1,50 @@ -//this function places received data into element with specified id. -var/const/js_byjax = {" - -function replaceContent() { - var args = Array.prototype.slice.call(arguments); - var id = args\[0\]; - var content = args\[1\]; - var callback = null; - if(args\[2\]){ - callback = args\[2\]; - if(args\[3\]){ - args = args.slice(3); - } - } - var parent = document.getElementById(id); - if(typeof(parent)!=='undefined' && parent!=null){ - parent.innerHTML = content?content:''; - } - if(callback && window\[callback\]){ - window\[callback\].apply(null,args); - } -} -"} - -/* -sends data to control_id:replaceContent - -receiver - mob -control_id - window id (for windows opened with browse(), it'll be "windowname.browser") -target_element - HTML element id -new_content - HTML content -callback - js function that will be called after the data is sent -callback_args - arguments for callback function - -Be sure to include required js functions in your page, or it'll raise an exception. -*/ -/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) - if(receiver && target_element && control_id) // && winexists(receiver, control_id)) - var/list/argums = list(target_element, new_content) - if(callback) - argums += callback - if(callback_args) - argums += callback_args - argums = list2params(argums) -/* if(callback_args) - argums += "&[list2params(callback_args)]" -*/ - receiver << output(argums,"[control_id]:replaceContent") - return - +//this function places received data into element with specified id. +var/const/js_byjax = {" + +function replaceContent() { + var args = Array.prototype.slice.call(arguments); + var id = args\[0\]; + var content = args\[1\]; + var callback = null; + if(args\[2\]){ + callback = args\[2\]; + if(args\[3\]){ + args = args.slice(3); + } + } + var parent = document.getElementById(id); + if(typeof(parent)!=='undefined' && parent!=null){ + parent.innerHTML = content?content:''; + } + if(callback && window\[callback\]){ + window\[callback\].apply(null,args); + } +} +"} + +/* +sends data to control_id:replaceContent + +receiver - mob +control_id - window id (for windows opened with browse(), it'll be "windowname.browser") +target_element - HTML element id +new_content - HTML content +callback - js function that will be called after the data is sent +callback_args - arguments for callback function + +Be sure to include required js functions in your page, or it'll raise an exception. +*/ +/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) + if(receiver && target_element && control_id) // && winexists(receiver, control_id)) + var/list/argums = list(target_element, new_content) + if(callback) + argums += callback + if(callback_args) + argums += callback_args + argums = list2params(argums) +/* if(callback_args) + argums += "&[list2params(callback_args)]" +*/ + receiver << output(argums,"[control_id]:replaceContent") + return + diff --git a/code/js/menus.dm b/code/js/menus.dm index 69ff900db6..01137ce963 100644 --- a/code/js/menus.dm +++ b/code/js/menus.dm @@ -1,37 +1,37 @@ -var/const/js_dropdowns = {" -function dropdowns() { - var divs = document.getElementsByTagName('div'); - var headers = new Array(); - var links = new Array(); - for(var i=0;i=0) { - elem.className = elem.className.replace('visible','hidden'); - this.className = this.className.replace('open','closed'); - this.innerHTML = this.innerHTML.replace('-','+'); - } - else { - elem.className = elem.className.replace('hidden','visible'); - this.className = this.className.replace('closed','open'); - this.innerHTML = this.innerHTML.replace('+','-'); - } - return false; - } - })(links\[i\]); - } - } -} +var/const/js_dropdowns = {" +function dropdowns() { + var divs = document.getElementsByTagName('div'); + var headers = new Array(); + var links = new Array(); + for(var i=0;i=0) { + elem.className = elem.className.replace('visible','hidden'); + this.className = this.className.replace('open','closed'); + this.innerHTML = this.innerHTML.replace('-','+'); + } + else { + elem.className = elem.className.replace('hidden','visible'); + this.className = this.className.replace('closed','open'); + this.innerHTML = this.innerHTML.replace('+','-'); + } + return false; + } + })(links\[i\]); + } + } +} "} \ No newline at end of file diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 38639e917f..9e5ff08a13 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -1,229 +1,229 @@ -var/CMinutes = null -var/savefile/Banlist - - -/proc/CheckBan(var/ckey, var/id, var/address) - if(!Banlist) // if Banlist cannot be located for some reason - LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! - return 0 // ABORT ABORT ABORT - - . = list() - var/appeal - if(config && config.banappeals) - appeal = "\nFor more information on your ban, or to appeal, head to [config.banappeals]" - Banlist.cd = "/base" - if( "[ckey][id]" in Banlist.dir ) - Banlist.cd = "[ckey][id]" - if (Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) - ClearTempbans() - return 0 - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" - else - Banlist.cd = "/base/[ckey][id]" - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMANENT\nBy: [Banlist["bannedby"]][appeal]" - .["reason"] = "ckey/id" - return . - else - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - var/matches - if( ckey == Banlist["key"] ) - matches += "ckey" - if( id == Banlist["id"] ) - if(matches) - matches += "/" - matches += "id" - if( address == Banlist["ip"] ) - if(matches) - matches += "/" - matches += "ip" - - if(matches) - if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) - ClearTempbans() - return 0 - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMANENT\nBy: [Banlist["bannedby"]][appeal]" - .["reason"] = matches - return . - return 0 - -/proc/UpdateTime() //No idea why i made this a proc. - CMinutes = (world.realtime / 10) / 60 - return 1 - -/hook/startup/proc/loadBans() - return LoadBans() - -/proc/LoadBans() - - Banlist = new("data/banlist.bdb") - log_admin("Loading Banlist") - - if (!length(Banlist.dir)) log_admin("Banlist is empty.") - - if (!Banlist.dir.Find("base")) - log_admin("Banlist missing base dir.") - Banlist.dir.Add("base") - Banlist.cd = "/base" - else if (Banlist.dir.Find("base")) - Banlist.cd = "/base" - - ClearTempbans() - return 1 - -/proc/ClearTempbans() - UpdateTime() - - Banlist.cd = "/base" - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (!Banlist["key"] || !Banlist["id"]) - RemoveBan(A) - log_admin("Invalid Ban.") - message_admins("Invalid Ban.") - continue - - if (!Banlist["temp"]) continue - if (CMinutes >= Banlist["minutes"]) RemoveBan(A) - - return 1 - - -/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address) - - var/bantimestamp - - if (temp) - UpdateTime() - bantimestamp = CMinutes + minutes - - Banlist.cd = "/base" - if ( Banlist.dir.Find("[ckey][computerid]") ) - to_chat(usr, "Ban already exists.") - return 0 - else - Banlist.dir.Add("[ckey][computerid]") - Banlist.cd = "/base/[ckey][computerid]" - Banlist["key"] << ckey - Banlist["id"] << computerid - Banlist["ip"] << address - Banlist["reason"] << reason - Banlist["bannedby"] << bannedby - Banlist["temp"] << temp - if (temp) - Banlist["minutes"] << bantimestamp - admin_action_message(bannedby, ckey, "banned", reason, temp ? minutes : -1) //VOREStation Add - return 1 - -/proc/RemoveBan(foldername) - var/key - var/id - - Banlist.cd = "/base/[foldername]" - Banlist["key"] >> key - Banlist["id"] >> id - Banlist.cd = "/base" - - if (!Banlist.dir.Remove(foldername)) return 0 - - if(!usr) - log_admin("Ban Expired: [key]") - message_admins("Ban Expired: [key]") - else - ban_unban_log_save("[key_name_admin(usr)] unbanned [key]") - log_admin("[key_name_admin(usr)] unbanned [key]") - message_admins("[key_name_admin(usr)] unbanned: [key]") - feedback_inc("ban_unban",1) - usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN) - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (key == Banlist["key"] /*|| id == Banlist["id"]*/) - Banlist.cd = "/base" - Banlist.dir.Remove(A) - continue - admin_action_message(usr.key, key, "unbanned", "\[Unban\]", 0) //VOREStation Add - return 1 - -/proc/GetExp(minutes as num) - UpdateTime() - var/exp = minutes - CMinutes - if (exp <= 0) - return 0 - else - var/timeleftstring - if (exp >= 1440) //1440 = 1 day in minutes - timeleftstring = "[round(exp / 1440, 0.1)] Days" - else if (exp >= 60) //60 = 1 hour in minutes - timeleftstring = "[round(exp / 60, 0.1)] Hours" - else - timeleftstring = "[exp] Minutes" - return timeleftstring - -/datum/admins/proc/unbanpanel() - var/count = 0 - var/dat - //var/dat = "
                    Unban Player: (U) = Unban , (E) = Edit Ban (Total
                    " - Banlist.cd = "/base" - for (var/A in Banlist.dir) - count++ - Banlist.cd = "/base/[A]" - var/ref = "\ref[src]" - var/key = Banlist["key"] - var/id = Banlist["id"] - var/ip = Banlist["ip"] - var/reason = Banlist["reason"] - var/by = Banlist["bannedby"] - var/expiry - if(Banlist["temp"]) - expiry = GetExp(Banlist["minutes"]) - if(!expiry) expiry = "Removal Pending" - else expiry = "Permaban" - - dat += text("") - - dat += "
                    (U)(E) Key: [key]ComputerID: [id]IP: [ip] [expiry](By: [by])(Reason: [reason])
                    " - dat = "
                    Bans: (U) = Unban , (E) = Edit Ban - ([count] Bans)
                    [dat]" - usr << browse(dat, "window=unbanp;size=875x400") - -//////////////////////////////////// DEBUG //////////////////////////////////// - -/proc/CreateBans() - - UpdateTime() - - var/i - var/last - - for(i=0, i<1001, i++) - var/a = pick(1,0) - var/b = pick(1,0) - if(b) - Banlist.cd = "/base" - Banlist.dir.Add("trash[i]trashid[i]") - Banlist.cd = "/base/trash[i]trashid[i]" - to_chat(Banlist["key"], "trash[i]") - else - Banlist.cd = "/base" - Banlist.dir.Add("[last]trashid[i]") - Banlist.cd = "/base/[last]trashid[i]" - Banlist["key"] << last - to_chat(Banlist["id"], "trashid[i]") - to_chat(Banlist["reason"], "Trashban[i].") - Banlist["temp"] << a - Banlist["minutes"] << CMinutes + rand(1,2000) - to_chat(Banlist["bannedby"], "trashmin") - last = "trash[i]" - - Banlist.cd = "/base" - -/proc/ClearAllBans() - Banlist.cd = "/base" - for (var/A in Banlist.dir) - RemoveBan(A) +var/CMinutes = null +var/savefile/Banlist + + +/proc/CheckBan(var/ckey, var/id, var/address) + if(!Banlist) // if Banlist cannot be located for some reason + LoadBans() // try to load the bans + if(!Banlist) // uh oh, can't find bans! + return 0 // ABORT ABORT ABORT + + . = list() + var/appeal + if(config && config.banappeals) + appeal = "\nFor more information on your ban, or to appeal, head to [config.banappeals]" + Banlist.cd = "/base" + if( "[ckey][id]" in Banlist.dir ) + Banlist.cd = "[ckey][id]" + if (Banlist["temp"]) + if (!GetExp(Banlist["minutes"])) + ClearTempbans() + return 0 + else + .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + else + Banlist.cd = "/base/[ckey][id]" + .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMANENT\nBy: [Banlist["bannedby"]][appeal]" + .["reason"] = "ckey/id" + return . + else + for (var/A in Banlist.dir) + Banlist.cd = "/base/[A]" + var/matches + if( ckey == Banlist["key"] ) + matches += "ckey" + if( id == Banlist["id"] ) + if(matches) + matches += "/" + matches += "id" + if( address == Banlist["ip"] ) + if(matches) + matches += "/" + matches += "ip" + + if(matches) + if(Banlist["temp"]) + if (!GetExp(Banlist["minutes"])) + ClearTempbans() + return 0 + else + .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + else + .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMANENT\nBy: [Banlist["bannedby"]][appeal]" + .["reason"] = matches + return . + return 0 + +/proc/UpdateTime() //No idea why i made this a proc. + CMinutes = (world.realtime / 10) / 60 + return 1 + +/hook/startup/proc/loadBans() + return LoadBans() + +/proc/LoadBans() + + Banlist = new("data/banlist.bdb") + log_admin("Loading Banlist") + + if (!length(Banlist.dir)) log_admin("Banlist is empty.") + + if (!Banlist.dir.Find("base")) + log_admin("Banlist missing base dir.") + Banlist.dir.Add("base") + Banlist.cd = "/base" + else if (Banlist.dir.Find("base")) + Banlist.cd = "/base" + + ClearTempbans() + return 1 + +/proc/ClearTempbans() + UpdateTime() + + Banlist.cd = "/base" + for (var/A in Banlist.dir) + Banlist.cd = "/base/[A]" + if (!Banlist["key"] || !Banlist["id"]) + RemoveBan(A) + log_admin("Invalid Ban.") + message_admins("Invalid Ban.") + continue + + if (!Banlist["temp"]) continue + if (CMinutes >= Banlist["minutes"]) RemoveBan(A) + + return 1 + + +/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address) + + var/bantimestamp + + if (temp) + UpdateTime() + bantimestamp = CMinutes + minutes + + Banlist.cd = "/base" + if ( Banlist.dir.Find("[ckey][computerid]") ) + to_chat(usr, "Ban already exists.") + return 0 + else + Banlist.dir.Add("[ckey][computerid]") + Banlist.cd = "/base/[ckey][computerid]" + Banlist["key"] << ckey + Banlist["id"] << computerid + Banlist["ip"] << address + Banlist["reason"] << reason + Banlist["bannedby"] << bannedby + Banlist["temp"] << temp + if (temp) + Banlist["minutes"] << bantimestamp + admin_action_message(bannedby, ckey, "banned", reason, temp ? minutes : -1) //VOREStation Add + return 1 + +/proc/RemoveBan(foldername) + var/key + var/id + + Banlist.cd = "/base/[foldername]" + Banlist["key"] >> key + Banlist["id"] >> id + Banlist.cd = "/base" + + if (!Banlist.dir.Remove(foldername)) return 0 + + if(!usr) + log_admin("Ban Expired: [key]") + message_admins("Ban Expired: [key]") + else + ban_unban_log_save("[key_name_admin(usr)] unbanned [key]") + log_admin("[key_name_admin(usr)] unbanned [key]") + message_admins("[key_name_admin(usr)] unbanned: [key]") + feedback_inc("ban_unban",1) + usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN) + for (var/A in Banlist.dir) + Banlist.cd = "/base/[A]" + if (key == Banlist["key"] /*|| id == Banlist["id"]*/) + Banlist.cd = "/base" + Banlist.dir.Remove(A) + continue + admin_action_message(usr.key, key, "unbanned", "\[Unban\]", 0) //VOREStation Add + return 1 + +/proc/GetExp(minutes as num) + UpdateTime() + var/exp = minutes - CMinutes + if (exp <= 0) + return 0 + else + var/timeleftstring + if (exp >= 1440) //1440 = 1 day in minutes + timeleftstring = "[round(exp / 1440, 0.1)] Days" + else if (exp >= 60) //60 = 1 hour in minutes + timeleftstring = "[round(exp / 60, 0.1)] Hours" + else + timeleftstring = "[exp] Minutes" + return timeleftstring + +/datum/admins/proc/unbanpanel() + var/count = 0 + var/dat + //var/dat = "
                    Unban Player:(U) = Unban , (E) = Edit Ban (Total
                    " + Banlist.cd = "/base" + for (var/A in Banlist.dir) + count++ + Banlist.cd = "/base/[A]" + var/ref = "\ref[src]" + var/key = Banlist["key"] + var/id = Banlist["id"] + var/ip = Banlist["ip"] + var/reason = Banlist["reason"] + var/by = Banlist["bannedby"] + var/expiry + if(Banlist["temp"]) + expiry = GetExp(Banlist["minutes"]) + if(!expiry) expiry = "Removal Pending" + else expiry = "Permaban" + + dat += text("") + + dat += "
                    (U)(E) Key: [key]ComputerID: [id]IP: [ip] [expiry](By: [by])(Reason: [reason])
                    " + dat = "
                    Bans: (U) = Unban , (E) = Edit Ban - ([count] Bans)
                    [dat]" + usr << browse(dat, "window=unbanp;size=875x400") + +//////////////////////////////////// DEBUG //////////////////////////////////// + +/proc/CreateBans() + + UpdateTime() + + var/i + var/last + + for(i=0, i<1001, i++) + var/a = pick(1,0) + var/b = pick(1,0) + if(b) + Banlist.cd = "/base" + Banlist.dir.Add("trash[i]trashid[i]") + Banlist.cd = "/base/trash[i]trashid[i]" + to_chat(Banlist["key"], "trash[i]") + else + Banlist.cd = "/base" + Banlist.dir.Add("[last]trashid[i]") + Banlist.cd = "/base/[last]trashid[i]" + Banlist["key"] << last + to_chat(Banlist["id"], "trashid[i]") + to_chat(Banlist["reason"], "Trashban[i].") + Banlist["temp"] << a + Banlist["minutes"] << CMinutes + rand(1,2000) + to_chat(Banlist["bannedby"], "trashmin") + last = "trash[i]" + + Banlist.cd = "/base" + +/proc/ClearAllBans() + Banlist.cd = "/base" + for (var/A in Banlist.dir) + RemoveBan(A) diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 235b546950..eeb3ca2e15 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -1,175 +1,175 @@ -var/list/admin_ranks = list() //list of all ranks with associated rights - -//load our rank - > rights associations -/proc/load_admin_ranks() - admin_ranks.Cut() - - var/previous_rights = 0 - - //Clear profile access - for(var/A in world.GetConfig("admin")) - world.SetConfig("APP/admin", A, null) - - //load text from file - var/list/Lines = file2list("config/admin_ranks.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) continue - if(copytext(line,1,2) == "#") continue - - var/list/List = splittext(line,"+") - if(!List.len) continue - - var/rank = ckeyEx(List[1]) - switch(rank) - if(null,"") continue - if("Removed") continue //Reserved - - var/rights = 0 - for(var/i=2, i<=List.len, i++) - switch(ckey(List[i])) - if("@","prev") rights |= previous_rights - if("buildmode","build") rights |= R_BUILDMODE - if("admin") rights |= R_ADMIN - if("ban") rights |= R_BAN - if("fun") rights |= R_FUN - if("server") rights |= R_SERVER - if("debug") rights |= R_DEBUG - if("permissions","rights") rights |= R_PERMISSIONS - if("possess") rights |= R_POSSESS - if("stealth") rights |= R_STEALTH - if("rejuv","rejuvinate") rights |= R_REJUVINATE - if("varedit") rights |= R_VAREDIT - if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_EVENT) - if("sound","sounds") rights |= R_SOUNDS - if("spawn","create") rights |= R_SPAWN - if("mod") rights |= R_MOD - if("event") rights |= R_EVENT - - admin_ranks[rank] = rights - previous_rights = rights - - #ifdef TESTING - var/msg = "Permission Sets Built:\n" - for(var/rank in admin_ranks) - msg += "\t[rank] - [admin_ranks[rank]]\n" - testing(msg) - #endif - -/hook/startup/proc/loadAdmins() - load_admins() - return 1 - -/proc/load_admins() - //clear the datums references - admin_datums.Cut() - for(var/client/C in GLOB.admins) - C.remove_admin_verbs() - C.holder = null - GLOB.admins.Cut() - load_admin_ranks() //CHOMP Edit: moved this from "f(config.admin_legacy_system)" and put it here instead, literally just moved it 3 lines. - - if(config.admin_legacy_system) - //Clear profile access - for(var/A in world.GetConfig("admin")) - world.SetConfig("APP/admin", A, null) - - //load text from file - var/list/Lines = file2list("config/admins.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) continue - if(copytext(line,1,2) == "#") continue - - //Split the line at every "-" - var/list/List = splittext(line, "-") - if(!List.len) continue - - //ckey is before the first "-" - var/ckey = ckey(List[1]) - if(!ckey) continue - - //rank follows the first "-" - var/rank = "" - if(List.len >= 2) - rank = ckeyEx(List[2]) - - //load permissions associated with this rank - var/rights = admin_ranks[rank] - - //create the admin datum and store it for later use - var/datum/admins/D = new /datum/admins(rank, rights, ckey) - - if(D.rights & R_DEBUG) //grant profile access - world.SetConfig("APP/admin", ckey, "role=admin") - - //find the client for a ckey if they are connected and associate them with the new admin datum - D.associate(GLOB.directory[ckey]) - - else - //The current admin system uses SQL - - establish_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - error("Failed to connect to database in load_admins(). Reverting to legacy system.") - log_misc("Failed to connect to database in load_admins(). Reverting to legacy system.") - config.admin_legacy_system = 1 - load_admins() - return - - var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin") //CHOMPEdit TGSQL - query.Execute() - while(query.NextRow()) - var/ckey = query.item[1] - var/rank = query.item[2] - if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes. - - var/rights = query.item[4] - if(istext(rights)) rights = text2num(rights) - var/datum/admins/D = new /datum/admins(rank, rights, ckey) - - if(D.rights & R_DEBUG) //grant profile access - world.SetConfig("APP/admin", ckey, "role=admin") - - //find the client for a ckey if they are connected and associate them with the new admin datum - D.associate(GLOB.directory[ckey]) - qdel(query) //CHOMPEdit TGSQL - if(!admin_datums) - error("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") - log_misc("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") - config.admin_legacy_system = 1 - load_admins() - return - - #ifdef TESTING - var/msg = "Admins Built:\n" - for(var/ckey in admin_datums) - var/rank - var/datum/admins/D = admin_datums[ckey] - if(D) rank = D.rank - msg += "\t[ckey] - [rank]\n" - testing(msg) - #endif - - -#ifdef TESTING -/client/verb/changerank(newrank in admin_ranks) - if(holder) - holder.rank = newrank - holder.rights = admin_ranks[newrank] - else - holder = new /datum/admins(newrank,admin_ranks[newrank],ckey) - remove_admin_verbs() - holder.associate(src) - -/client/verb/changerights(newrights as num) - if(holder) - holder.rights = newrights - else - holder = new /datum/admins("testing",newrights,ckey) - remove_admin_verbs() - holder.associate(src) - -#endif +var/list/admin_ranks = list() //list of all ranks with associated rights + +//load our rank - > rights associations +/proc/load_admin_ranks() + admin_ranks.Cut() + + var/previous_rights = 0 + + //Clear profile access + for(var/A in world.GetConfig("admin")) + world.SetConfig("APP/admin", A, null) + + //load text from file + var/list/Lines = file2list("config/admin_ranks.txt") + + //process each line seperately + for(var/line in Lines) + if(!length(line)) continue + if(copytext(line,1,2) == "#") continue + + var/list/List = splittext(line,"+") + if(!List.len) continue + + var/rank = ckeyEx(List[1]) + switch(rank) + if(null,"") continue + if("Removed") continue //Reserved + + var/rights = 0 + for(var/i=2, i<=List.len, i++) + switch(ckey(List[i])) + if("@","prev") rights |= previous_rights + if("buildmode","build") rights |= R_BUILDMODE + if("admin") rights |= R_ADMIN + if("ban") rights |= R_BAN + if("fun") rights |= R_FUN + if("server") rights |= R_SERVER + if("debug") rights |= R_DEBUG + if("permissions","rights") rights |= R_PERMISSIONS + if("possess") rights |= R_POSSESS + if("stealth") rights |= R_STEALTH + if("rejuv","rejuvinate") rights |= R_REJUVINATE + if("varedit") rights |= R_VAREDIT + if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_EVENT) + if("sound","sounds") rights |= R_SOUNDS + if("spawn","create") rights |= R_SPAWN + if("mod") rights |= R_MOD + if("event") rights |= R_EVENT + + admin_ranks[rank] = rights + previous_rights = rights + + #ifdef TESTING + var/msg = "Permission Sets Built:\n" + for(var/rank in admin_ranks) + msg += "\t[rank] - [admin_ranks[rank]]\n" + testing(msg) + #endif + +/hook/startup/proc/loadAdmins() + load_admins() + return 1 + +/proc/load_admins() + //clear the datums references + admin_datums.Cut() + for(var/client/C in GLOB.admins) + C.remove_admin_verbs() + C.holder = null + GLOB.admins.Cut() + load_admin_ranks() //CHOMP Edit: moved this from "f(config.admin_legacy_system)" and put it here instead, literally just moved it 3 lines. + + if(config.admin_legacy_system) + //Clear profile access + for(var/A in world.GetConfig("admin")) + world.SetConfig("APP/admin", A, null) + + //load text from file + var/list/Lines = file2list("config/admins.txt") + + //process each line seperately + for(var/line in Lines) + if(!length(line)) continue + if(copytext(line,1,2) == "#") continue + + //Split the line at every "-" + var/list/List = splittext(line, "-") + if(!List.len) continue + + //ckey is before the first "-" + var/ckey = ckey(List[1]) + if(!ckey) continue + + //rank follows the first "-" + var/rank = "" + if(List.len >= 2) + rank = ckeyEx(List[2]) + + //load permissions associated with this rank + var/rights = admin_ranks[rank] + + //create the admin datum and store it for later use + var/datum/admins/D = new /datum/admins(rank, rights, ckey) + + if(D.rights & R_DEBUG) //grant profile access + world.SetConfig("APP/admin", ckey, "role=admin") + + //find the client for a ckey if they are connected and associate them with the new admin datum + D.associate(GLOB.directory[ckey]) + + else + //The current admin system uses SQL + + establish_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + error("Failed to connect to database in load_admins(). Reverting to legacy system.") + log_misc("Failed to connect to database in load_admins(). Reverting to legacy system.") + config.admin_legacy_system = 1 + load_admins() + return + + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin") //CHOMPEdit TGSQL + query.Execute() + while(query.NextRow()) + var/ckey = query.item[1] + var/rank = query.item[2] + if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes. + + var/rights = query.item[4] + if(istext(rights)) rights = text2num(rights) + var/datum/admins/D = new /datum/admins(rank, rights, ckey) + + if(D.rights & R_DEBUG) //grant profile access + world.SetConfig("APP/admin", ckey, "role=admin") + + //find the client for a ckey if they are connected and associate them with the new admin datum + D.associate(GLOB.directory[ckey]) + qdel(query) //CHOMPEdit TGSQL + if(!admin_datums) + error("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") + log_misc("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") + config.admin_legacy_system = 1 + load_admins() + return + + #ifdef TESTING + var/msg = "Admins Built:\n" + for(var/ckey in admin_datums) + var/rank + var/datum/admins/D = admin_datums[ckey] + if(D) rank = D.rank + msg += "\t[ckey] - [rank]\n" + testing(msg) + #endif + + +#ifdef TESTING +/client/verb/changerank(newrank in admin_ranks) + if(holder) + holder.rank = newrank + holder.rights = admin_ranks[newrank] + else + holder = new /datum/admins(newrank,admin_ranks[newrank],ckey) + remove_admin_verbs() + holder.associate(src) + +/client/verb/changerights(newrights as num) + if(holder) + holder.rights = newrights + else + holder = new /datum/admins("testing",newrights,ckey) + remove_admin_verbs() + holder.associate(src) + +#endif diff --git a/code/modules/admin/admin_report.dm b/code/modules/admin/admin_report.dm index e0c38345e5..6cfb778d91 100644 --- a/code/modules/admin/admin_report.dm +++ b/code/modules/admin/admin_report.dm @@ -1,182 +1,182 @@ -// Reports are a way to notify admins of wrongdoings that happened -// while no admin was present. They work a bit similar to news, but -// they can only be read by admins and moderators. - -// a single admin report -/datum//admin_report/var - ID // the ID of the report - body // the content of the report - author // key of the author - date // date on which this was created - done // whether this was handled - - offender_key // store the key of the offender - offender_cid // store the cid of the offender - -/datum//report_topic_handler - Topic(href,href_list) - ..() - var/client/C = locate(href_list["client"]) - if(href_list["action"] == "show_reports") - C.display_admin_reports() - else if(href_list["action"] == "remove") - C.mark_report_done(text2num(href_list["ID"])) - else if(href_list["action"] == "edit") - C.edit_report(text2num(href_list["ID"])) - -var/datum/report_topic_handler/report_topic_handler - -world/New() - ..() - report_topic_handler = new - -// add a new news datums -/proc/make_report(body, author, okey, cid) - var/savefile/Reports = new("data/reports.sav") - var/list/reports - var/lastID - - Reports["reports"] >> reports - Reports["lastID"] >> lastID - - if(!reports) reports = list() - if(!lastID) lastID = 0 - - var/datum/admin_report/created = new() - created.ID = ++lastID - created.body = body - created.author = author - created.date = world.realtime - created.done = 0 - created.offender_key = okey - created.offender_cid = cid - - reports.Insert(1, created) - - Reports["reports"] << reports - Reports["lastID"] << lastID - -// load the reports from disk -/proc/load_reports() - var/savefile/Reports = new("data/reports.sav") - var/list/reports - - Reports["reports"] >> reports - - if(!reports) reports = list() - - return reports - -// check if there are any unhandled reports -/client/proc/unhandled_reports() - if(!src.holder) return 0 - var/list/reports = load_reports() - - for(var/datum/admin_report/N in reports) - if(N.done) - continue - else return 1 - - return 0 - -// checks if the player has an unhandled report against him -/client/proc/is_reported() - var/list/reports = load_reports() - - for(var/datum/admin_report/N in reports) if(!N.done) - if(N.offender_key == src.key) - return 1 - - return 0 - -// display only the reports that haven't been handled -/client/proc/display_admin_reports() - set category = "Admin" - set name = "Display Admin Reports" - if(!src.holder) return - - var/list/reports = load_reports() - - var/output = "" - if(unhandled_reports()) - // load the list of unhandled reports - for(var/datum/admin_report/N in reports) - if(N.done) - continue - output += "Reported player: [N.offender_key](CID: [N.offender_cid])
                    " - output += "Offense:[N.body]
                    " - output += "Occurred at [time2text(N.date,"MM/DD hh:mm:ss")]
                    " - output += "authored by [N.author]
                    " - output += " Flag as Handled" - if(src.key == N.author) - output += " Edit" - output += "
                    " - output += "
                    " - else - output += "Whoops, no reports!" - - usr << browse(output, "window=news;size=600x400") - - -/client/proc/Report(mob/M as mob in world) - set category = "Admin" - if(!src.holder) - return - - var/CID = "Unknown" - if(M.client) - CID = M.client.computer_id - - var/body = tgui_input_text(src.mob, "Describe in detail what you're reporting [M] for", "Report") - if(!body) return - - - make_report(body, key, M.key, CID) - - spawn(1) - display_admin_reports() - -/client/proc/mark_report_done(ID as num) - if(!src.holder || src.holder.level < 0) - return - - var/savefile/Reports = new("data/reports.sav") - var/list/reports - - Reports["reports"] >> reports - - var/datum/admin_report/found - for(var/datum/admin_report/N in reports) - if(N.ID == ID) - found = N - if(!found) - to_chat(src, "* An error occurred, sorry.") - - found.done = 1 - - Reports["reports"] << reports - - -/client/proc/edit_report(ID as num) - if(!src.holder || src.holder.level < 0) - to_chat(src, "You tried to modify the news, but you're not an admin!") - return - - var/savefile/Reports = new("data/reports.sav") - var/list/reports - - Reports["reports"] >> reports - - var/datum/admin_report/found - for(var/datum/admin_report/N in reports) - if(N.ID == ID) - found = N - if(!found) - to_chat(src, "* An error occurred, sorry.") - - var/body = tgui_input_text(src.mob, "Enter a body for the news", "Body", multiline = TRUE, prevent_enter = TRUE) - if(!body) return - - found.body = body - - Reports["reports"] << reports +// Reports are a way to notify admins of wrongdoings that happened +// while no admin was present. They work a bit similar to news, but +// they can only be read by admins and moderators. + +// a single admin report +/datum//admin_report/var + ID // the ID of the report + body // the content of the report + author // key of the author + date // date on which this was created + done // whether this was handled + + offender_key // store the key of the offender + offender_cid // store the cid of the offender + +/datum//report_topic_handler + Topic(href,href_list) + ..() + var/client/C = locate(href_list["client"]) + if(href_list["action"] == "show_reports") + C.display_admin_reports() + else if(href_list["action"] == "remove") + C.mark_report_done(text2num(href_list["ID"])) + else if(href_list["action"] == "edit") + C.edit_report(text2num(href_list["ID"])) + +var/datum/report_topic_handler/report_topic_handler + +world/New() + ..() + report_topic_handler = new + +// add a new news datums +/proc/make_report(body, author, okey, cid) + var/savefile/Reports = new("data/reports.sav") + var/list/reports + var/lastID + + Reports["reports"] >> reports + Reports["lastID"] >> lastID + + if(!reports) reports = list() + if(!lastID) lastID = 0 + + var/datum/admin_report/created = new() + created.ID = ++lastID + created.body = body + created.author = author + created.date = world.realtime + created.done = 0 + created.offender_key = okey + created.offender_cid = cid + + reports.Insert(1, created) + + Reports["reports"] << reports + Reports["lastID"] << lastID + +// load the reports from disk +/proc/load_reports() + var/savefile/Reports = new("data/reports.sav") + var/list/reports + + Reports["reports"] >> reports + + if(!reports) reports = list() + + return reports + +// check if there are any unhandled reports +/client/proc/unhandled_reports() + if(!src.holder) return 0 + var/list/reports = load_reports() + + for(var/datum/admin_report/N in reports) + if(N.done) + continue + else return 1 + + return 0 + +// checks if the player has an unhandled report against him +/client/proc/is_reported() + var/list/reports = load_reports() + + for(var/datum/admin_report/N in reports) if(!N.done) + if(N.offender_key == src.key) + return 1 + + return 0 + +// display only the reports that haven't been handled +/client/proc/display_admin_reports() + set category = "Admin" + set name = "Display Admin Reports" + if(!src.holder) return + + var/list/reports = load_reports() + + var/output = "" + if(unhandled_reports()) + // load the list of unhandled reports + for(var/datum/admin_report/N in reports) + if(N.done) + continue + output += "Reported player: [N.offender_key](CID: [N.offender_cid])
                    " + output += "Offense:[N.body]
                    " + output += "Occurred at [time2text(N.date,"MM/DD hh:mm:ss")]
                    " + output += "authored by [N.author]
                    " + output += " Flag as Handled" + if(src.key == N.author) + output += " Edit" + output += "
                    " + output += "
                    " + else + output += "Whoops, no reports!" + + usr << browse(output, "window=news;size=600x400") + + +/client/proc/Report(mob/M as mob in world) + set category = "Admin" + if(!src.holder) + return + + var/CID = "Unknown" + if(M.client) + CID = M.client.computer_id + + var/body = tgui_input_text(src.mob, "Describe in detail what you're reporting [M] for", "Report") + if(!body) return + + + make_report(body, key, M.key, CID) + + spawn(1) + display_admin_reports() + +/client/proc/mark_report_done(ID as num) + if(!src.holder || src.holder.level < 0) + return + + var/savefile/Reports = new("data/reports.sav") + var/list/reports + + Reports["reports"] >> reports + + var/datum/admin_report/found + for(var/datum/admin_report/N in reports) + if(N.ID == ID) + found = N + if(!found) + to_chat(src, "* An error occurred, sorry.") + + found.done = 1 + + Reports["reports"] << reports + + +/client/proc/edit_report(ID as num) + if(!src.holder || src.holder.level < 0) + to_chat(src, "You tried to modify the news, but you're not an admin!") + return + + var/savefile/Reports = new("data/reports.sav") + var/list/reports + + Reports["reports"] >> reports + + var/datum/admin_report/found + for(var/datum/admin_report/N in reports) + if(N.ID == ID) + found = N + if(!found) + to_chat(src, "* An error occurred, sorry.") + + var/body = tgui_input_text(src.mob, "Enter a body for the news", "Body", multiline = TRUE, prevent_enter = TRUE) + if(!body) return + + found.body = body + + Reports["reports"] << reports diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm index e8ab89101c..be0b5b8fb8 100644 --- a/code/modules/admin/admin_secrets.dm +++ b/code/modules/admin/admin_secrets.dm @@ -1,113 +1,113 @@ -var/datum/admin_secrets/admin_secrets = new() - -/datum/admin_secrets - var/list/datum/admin_secret_category/categories - var/list/datum/admin_secret_item/items - -/datum/admin_secrets/New() - ..() - categories = init_subtypes(/datum/admin_secret_category) - items = list() - var/list/category_assoc = list() - for(var/datum/admin_secret_category/category in categories) - category_assoc[category.type] = category - - for(var/item_type in subtypesof(/datum/admin_secret_item)) - var/datum/admin_secret_item/secret_item = item_type - if(!initial(secret_item.name)) - continue - - var/datum/admin_secret_item/item = new item_type() - var/datum/admin_secret_category/category = category_assoc[item.category] - dd_insertObjectList(category.items, item) - items += item - -// -// Secret Item Category - Each subtype is a category for organizing secret commands. -// -/datum/admin_secret_category - var/name = "" - var/desc = "" - var/list/datum/admin_secret_item/items = list() - -/datum/admin_secret_category/proc/can_view(var/mob/user) - for(var/datum/admin_secret_item/item in items) - if(item.can_view(user)) - return 1 - return 0 - -// -// Secret Item Datum - Each subtype is a command on the secrets panel. -// Override execute() with the implementation of the command. -// -/datum/admin_secret_item - var/name = "" - var/category = null - var/log = 1 - var/feedback = 1 - var/permissions = R_HOST - var/warn_before_use = 0 - -/datum/admin_secret_item/dd_SortValue() - return "[name]" - -/datum/admin_secret_item/proc/name() - return name - -/datum/admin_secret_item/proc/can_view(var/mob/user) - return check_rights(permissions, 0, user) - -/datum/admin_secret_item/proc/can_execute(var/mob/user) - if(can_view(user)) - if(!warn_before_use || tgui_alert(usr, "Execute the command '[name]'?", name, list("No","Yes")) == "Yes") - return 1 - return 0 - -/datum/admin_secret_item/proc/execute(var/mob/user) - if(!can_execute(user)) - return 0 - - if(log) - log_and_message_admins("used secret '[name]'", user) - if(feedback) - feedback_inc("admin_secrets_used",1) - feedback_add_details("admin_secrets_used","[name]") - return 1 - -/************************* -* Pre-defined categories * -*************************/ -/datum/admin_secret_category/admin_secrets - name = "Admin Secrets" - -/datum/admin_secret_category/random_events - name = "'Random' Events" - -/datum/admin_secret_category/fun_secrets - name = "Fun Secrets" - -/datum/admin_secret_category/final_solutions - name = "Final Solutions" - desc = "(Warning, these will end the round!)" - -/************************* -* Pre-defined base items * -*************************/ -/datum/admin_secret_item/admin_secret - category = /datum/admin_secret_category/admin_secrets - log = 0 - permissions = R_ADMIN //VOREStation Edit - -/datum/admin_secret_item/random_event - category = /datum/admin_secret_category/random_events - permissions = R_FUN //VOREStation Edit - warn_before_use = 1 - -/datum/admin_secret_item/fun_secret - category = /datum/admin_secret_category/fun_secrets - permissions = R_FUN //VOREStation Edit - warn_before_use = 1 - -/datum/admin_secret_item/final_solution - category = /datum/admin_secret_category/final_solutions - permissions = R_FUN|R_SERVER|R_ADMIN //VOREStation Edit +var/datum/admin_secrets/admin_secrets = new() + +/datum/admin_secrets + var/list/datum/admin_secret_category/categories + var/list/datum/admin_secret_item/items + +/datum/admin_secrets/New() + ..() + categories = init_subtypes(/datum/admin_secret_category) + items = list() + var/list/category_assoc = list() + for(var/datum/admin_secret_category/category in categories) + category_assoc[category.type] = category + + for(var/item_type in subtypesof(/datum/admin_secret_item)) + var/datum/admin_secret_item/secret_item = item_type + if(!initial(secret_item.name)) + continue + + var/datum/admin_secret_item/item = new item_type() + var/datum/admin_secret_category/category = category_assoc[item.category] + dd_insertObjectList(category.items, item) + items += item + +// +// Secret Item Category - Each subtype is a category for organizing secret commands. +// +/datum/admin_secret_category + var/name = "" + var/desc = "" + var/list/datum/admin_secret_item/items = list() + +/datum/admin_secret_category/proc/can_view(var/mob/user) + for(var/datum/admin_secret_item/item in items) + if(item.can_view(user)) + return 1 + return 0 + +// +// Secret Item Datum - Each subtype is a command on the secrets panel. +// Override execute() with the implementation of the command. +// +/datum/admin_secret_item + var/name = "" + var/category = null + var/log = 1 + var/feedback = 1 + var/permissions = R_HOST + var/warn_before_use = 0 + +/datum/admin_secret_item/dd_SortValue() + return "[name]" + +/datum/admin_secret_item/proc/name() + return name + +/datum/admin_secret_item/proc/can_view(var/mob/user) + return check_rights(permissions, 0, user) + +/datum/admin_secret_item/proc/can_execute(var/mob/user) + if(can_view(user)) + if(!warn_before_use || tgui_alert(usr, "Execute the command '[name]'?", name, list("No","Yes")) == "Yes") + return 1 + return 0 + +/datum/admin_secret_item/proc/execute(var/mob/user) + if(!can_execute(user)) + return 0 + + if(log) + log_and_message_admins("used secret '[name]'", user) + if(feedback) + feedback_inc("admin_secrets_used",1) + feedback_add_details("admin_secrets_used","[name]") + return 1 + +/************************* +* Pre-defined categories * +*************************/ +/datum/admin_secret_category/admin_secrets + name = "Admin Secrets" + +/datum/admin_secret_category/random_events + name = "'Random' Events" + +/datum/admin_secret_category/fun_secrets + name = "Fun Secrets" + +/datum/admin_secret_category/final_solutions + name = "Final Solutions" + desc = "(Warning, these will end the round!)" + +/************************* +* Pre-defined base items * +*************************/ +/datum/admin_secret_item/admin_secret + category = /datum/admin_secret_category/admin_secrets + log = 0 + permissions = R_ADMIN //VOREStation Edit + +/datum/admin_secret_item/random_event + category = /datum/admin_secret_category/random_events + permissions = R_FUN //VOREStation Edit + warn_before_use = 1 + +/datum/admin_secret_item/fun_secret + category = /datum/admin_secret_category/fun_secrets + permissions = R_FUN //VOREStation Edit + warn_before_use = 1 + +/datum/admin_secret_item/final_solution + category = /datum/admin_secret_category/final_solutions + permissions = R_FUN|R_SERVER|R_ADMIN //VOREStation Edit diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 1d8d5a2071..eb18c952c5 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -1,119 +1,119 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -var/jobban_runonce // Updates legacy bans with new info -var/jobban_keylist[0] //to store the keys & ranks - -/proc/jobban_fullban(mob/M, rank, reason) - if (!M || !M.key) return - jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]")) - jobban_savebanfile() - -/proc/jobban_client_fullban(ckey, rank) - if (!ckey || !rank) return - jobban_keylist.Add(text("[ckey] - [rank]")) - jobban_savebanfile() - -//returns a reason if M is banned from rank, returns 0 otherwise -/proc/jobban_isbanned(mob/M, rank) - if(M && rank) - /* - if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban - */ - - if (guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) - return "Guest Job-ban" - if(config.usewhitelist && !check_whitelist(M)) - return "Whitelisted Job" - - return ckey_is_jobbanned(M.ckey, rank) - return 0 - -/proc/ckey_is_jobbanned(var/check_key, var/rank) - for(var/s in jobban_keylist) - if(findtext(s,"[check_key] - [rank]") == 1 ) - var/startpos = findtext(s, "## ")+3 - if(startpos && startpos> jobban_keylist - log_admin("Loading jobban_rank") - S["runonce"] >> jobban_runonce - - if (!length(jobban_keylist)) - jobban_keylist=list() - log_admin("jobban_keylist was empty") - else - if(!establish_db_connection()) - error("Database connection failed. Reverting to the legacy ban system.") - log_misc("Database connection failed. Reverting to the legacy ban system.") - config.ban_legacy_system = 1 - jobban_loadbanfile() - return - - //Job permabans - var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") //CHOMPEdit TGSQL - query.Execute() - - while(query.NextRow()) - var/ckey = query.item[1] - var/job = query.item[2] - - jobban_keylist.Add("[ckey] - [job]") - qdel(query) //CHOMPEdit TGSQL - //Job tempbans - var/datum/db_query/query1 = SSdbcore.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") //CHOMPEdit TGSQL - query1.Execute() - - while(query1.NextRow()) - var/ckey = query1.item[1] - var/job = query1.item[2] - - jobban_keylist.Add("[ckey] - [job]") - qdel(query1) //CHOMPEdit TGSQL - -/proc/jobban_savebanfile() - var/savefile/S=new("data/job_full.ban") - S["keys[0]"] << jobban_keylist - -/proc/jobban_unban(mob/M, rank) - jobban_remove("[M.ckey] - [rank]") - jobban_savebanfile() - - -/proc/ban_unban_log_save(var/formatted_log) - text2file(formatted_log,"data/ban_unban_log.txt") - - -/proc/jobban_remove(X) - for (var/i = 1; i <= length(jobban_keylist); i++) - if( findtext(jobban_keylist[i], "[X]") ) - jobban_keylist.Remove(jobban_keylist[i]) - jobban_savebanfile() - return 1 - return 0 +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +var/jobban_runonce // Updates legacy bans with new info +var/jobban_keylist[0] //to store the keys & ranks + +/proc/jobban_fullban(mob/M, rank, reason) + if (!M || !M.key) return + jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]")) + jobban_savebanfile() + +/proc/jobban_client_fullban(ckey, rank) + if (!ckey || !rank) return + jobban_keylist.Add(text("[ckey] - [rank]")) + jobban_savebanfile() + +//returns a reason if M is banned from rank, returns 0 otherwise +/proc/jobban_isbanned(mob/M, rank) + if(M && rank) + /* + if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban + */ + + if (guest_jobbans(rank)) + if(config.guest_jobban && IsGuestKey(M.key)) + return "Guest Job-ban" + if(config.usewhitelist && !check_whitelist(M)) + return "Whitelisted Job" + + return ckey_is_jobbanned(M.ckey, rank) + return 0 + +/proc/ckey_is_jobbanned(var/check_key, var/rank) + for(var/s in jobban_keylist) + if(findtext(s,"[check_key] - [rank]") == 1 ) + var/startpos = findtext(s, "## ")+3 + if(startpos && startpos> jobban_keylist + log_admin("Loading jobban_rank") + S["runonce"] >> jobban_runonce + + if (!length(jobban_keylist)) + jobban_keylist=list() + log_admin("jobban_keylist was empty") + else + if(!establish_db_connection()) + error("Database connection failed. Reverting to the legacy ban system.") + log_misc("Database connection failed. Reverting to the legacy ban system.") + config.ban_legacy_system = 1 + jobban_loadbanfile() + return + + //Job permabans + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") //CHOMPEdit TGSQL + query.Execute() + + while(query.NextRow()) + var/ckey = query.item[1] + var/job = query.item[2] + + jobban_keylist.Add("[ckey] - [job]") + qdel(query) //CHOMPEdit TGSQL + //Job tempbans + var/datum/db_query/query1 = SSdbcore.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") //CHOMPEdit TGSQL + query1.Execute() + + while(query1.NextRow()) + var/ckey = query1.item[1] + var/job = query1.item[2] + + jobban_keylist.Add("[ckey] - [job]") + qdel(query1) //CHOMPEdit TGSQL + +/proc/jobban_savebanfile() + var/savefile/S=new("data/job_full.ban") + S["keys[0]"] << jobban_keylist + +/proc/jobban_unban(mob/M, rank) + jobban_remove("[M.ckey] - [rank]") + jobban_savebanfile() + + +/proc/ban_unban_log_save(var/formatted_log) + text2file(formatted_log,"data/ban_unban_log.txt") + + +/proc/jobban_remove(X) + for (var/i = 1; i <= length(jobban_keylist); i++) + if( findtext(jobban_keylist[i], "[X]") ) + jobban_keylist.Remove(jobban_keylist[i]) + jobban_savebanfile() + return 1 + return 0 diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index a15a465984..fa561d2e5a 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,9 +1,9 @@ -/var/create_mob_html = null -/datum/admins/proc/create_mob(var/mob/user) - if (!create_mob_html) - var/mobjs = null - mobjs = jointext(typesof(/mob), ";") - create_mob_html = file2text('html/create_object.html') - create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") - - user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=680x600") +/var/create_mob_html = null +/datum/admins/proc/create_mob(var/mob/user) + if (!create_mob_html) + var/mobjs = null + mobjs = jointext(typesof(/mob), ";") + create_mob_html = file2text('html/create_object.html') + create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") + + user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=680x600") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 5520e52bf3..ce5d307745 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -1,48 +1,48 @@ -/datum/admins/proc/create_panel_helper(template) - var/final_html = replacetext(template, "/* ref src */", "\ref[src];[HrefToken()]") - final_html = replacetext(final_html,"/* hreftokenfield */","[HrefTokenFormField()]") - return final_html - -/datum/admins/proc/create_object(var/mob/user) - var/static/create_object_html = null - if (!create_object_html) - var/objectjs = null - objectjs = jointext(typesof(/obj), ";") - create_object_html = file2text('html/create_object.html') - create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") - - user << browse(create_panel_helper(create_object_html), "window=create_object;size=680x600") - - -/datum/admins/proc/quick_create_object(var/mob/user) - - var/quick_create_object_html = null - var/pathtext = null - var/list/choices = list("/obj", - "/obj/structure", - "/obj/item", - "/obj/item/device", - "/obj/item/weapon", - "/obj/item/weapon/gun", - "/obj/item/weapon/reagent_containers", - "/obj/item/weapon/reagent_containers/food", - "/obj/item/clothing", - "/obj/item/weapon/storage/box/fluff", //VOREStation Edit, - "/obj/machinery", - "/obj/mecha", - "/obj/item/mecha_parts", - "/obj/item/mecha_parts/mecha_equipment") - - pathtext = tgui_input_list(usr, "Select the path of the object you wish to create.", "Path", choices, "/obj") - - if(!pathtext) - return - var path = text2path(pathtext) - - if (!quick_create_object_html) - var/objectjs = null - objectjs = jointext(typesof(path), ";") - quick_create_object_html = file2text('html/create_object.html') - quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") - - user << browse(create_panel_helper(quick_create_object_html), "window=quick_create_object;size=680x600") +/datum/admins/proc/create_panel_helper(template) + var/final_html = replacetext(template, "/* ref src */", "\ref[src];[HrefToken()]") + final_html = replacetext(final_html,"/* hreftokenfield */","[HrefTokenFormField()]") + return final_html + +/datum/admins/proc/create_object(var/mob/user) + var/static/create_object_html = null + if (!create_object_html) + var/objectjs = null + objectjs = jointext(typesof(/obj), ";") + create_object_html = file2text('html/create_object.html') + create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") + + user << browse(create_panel_helper(create_object_html), "window=create_object;size=680x600") + + +/datum/admins/proc/quick_create_object(var/mob/user) + + var/quick_create_object_html = null + var/pathtext = null + var/list/choices = list("/obj", + "/obj/structure", + "/obj/item", + "/obj/item/device", + "/obj/item/weapon", + "/obj/item/weapon/gun", + "/obj/item/weapon/reagent_containers", + "/obj/item/weapon/reagent_containers/food", + "/obj/item/clothing", + "/obj/item/weapon/storage/box/fluff", //VOREStation Edit, + "/obj/machinery", + "/obj/mecha", + "/obj/item/mecha_parts", + "/obj/item/mecha_parts/mecha_equipment") + + pathtext = tgui_input_list(usr, "Select the path of the object you wish to create.", "Path", choices, "/obj") + + if(!pathtext) + return + var path = text2path(pathtext) + + if (!quick_create_object_html) + var/objectjs = null + objectjs = jointext(typesof(path), ";") + quick_create_object_html = file2text('html/create_object.html') + quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") + + user << browse(create_panel_helper(quick_create_object_html), "window=quick_create_object;size=680x600") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index ec7e595584..5a3efffd87 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,9 +1,9 @@ -/var/create_turf_html = null -/datum/admins/proc/create_turf(var/mob/user) - if (!create_turf_html) - var/turfjs = null - turfjs = jointext(typesof(/turf), ";") - create_turf_html = file2text('html/create_object.html') - create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") - - user << browse(create_panel_helper(create_turf_html), "window=create_turf;size=680x600") +/var/create_turf_html = null +/datum/admins/proc/create_turf(var/mob/user) + if (!create_turf_html) + var/turfjs = null + turfjs = jointext(typesof(/turf), ";") + create_turf_html = file2text('html/create_object.html') + create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") + + user << browse(create_panel_helper(create_turf_html), "window=create_turf;size=680x600") diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 1fd2464715..13fe4c0835 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -1,159 +1,159 @@ -GLOBAL_VAR_INIT(href_token, GenerateToken()) -GLOBAL_PROTECT(href_token) - -var/list/admin_datums = list() - -/datum/admins - var/rank = "Temporary Admin" - var/client/owner = null - var/rights = 0 - var/fakekey = null - - var/datum/marked_datum - - var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description - var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as holders. - var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel - var/admincaster_signature //What you'll sign the newsfeeds as - - var/href_token - - -/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) - if(!ckey) - error("Admin datum created without a ckey argument. Datum has been deleted") - qdel(src) - return - admincaster_signature = "[using_map.company_name] Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" - href_token = GenerateToken() - rank = initial_rank - rights = initial_rights - admin_datums[ckey] = src - if(rights & R_DEBUG) //grant profile access - world.SetConfig("APP/admin", ckey, "role=admin") - -/datum/admins/proc/associate(client/C) - if(istype(C)) - owner = C - owner.holder = src - owner.add_admin_verbs() //TODO - GLOB.admins |= C - -/datum/admins/proc/disassociate() - if(owner) - GLOB.admins -= owner - owner.remove_admin_verbs() - owner.deadmin_holder = owner.holder - owner.holder = null - -/datum/admins/proc/reassociate() - if(owner) - GLOB.admins += owner - owner.holder = src - owner.deadmin_holder = null - owner.add_admin_verbs() - -/datum/admins/vv_edit_var(var_name, var_value) - if(var_name == NAMEOF(src, rights) || var_name == NAMEOF(src, owner) || var_name == NAMEOF(src, rank)) - return FALSE - return ..() - -//TODO: Proccall guard, when all try/catch are removed and WrapAdminProccall is ported. - -/* -checks if usr is an admin with at least ONE of the flags in rights_required. (Note, they don't need all the flags) -if rights_required == 0, then it simply checks if they are an admin. -if it doesn't return 1 and show_msg=1 it will prints a message explaining why the check has failed -generally it would be used like so: - -/proc/admin_proc() - if(!check_rights(R_ADMIN)) return - to_world("you have enough rights!") - -NOTE: It checks usr by default. Supply the "user" argument if you wish to check for a specific mob. -*/ -/proc/check_rights(rights_required, show_msg=1, var/client/C = usr) - if(ismob(C)) - var/mob/M = C - C = M.client - if(!C) - return FALSE - if(!(istype(C, /client))) // If we still didn't find a client, something is wrong. - return FALSE - if(!C.holder) - if(show_msg) - to_chat(C, "Error: You are not an admin.") - return FALSE - - if(rights_required) - if(rights_required & C.holder.rights) - return TRUE - else - if(show_msg) - to_chat(C, "Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].") - return FALSE - else - return TRUE - -//probably a bit iffy - will hopefully figure out a better solution -/proc/check_if_greater_rights_than(client/other) - if(usr && usr.client) - if(usr.client.holder) - if(!other || !other.holder) - return 1 - if(usr.client.holder.rights != other.holder.rights) - if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights ) - return 1 //we have all the rights they have and more - to_chat(usr, "Error: Cannot proceed. They have more or equal rights to us.") - return 0 - -/client/proc/mark_datum(datum/D) - if(!holder) - return - if(holder.marked_datum) - vv_update_display(holder.marked_datum, "marked", "") - holder.marked_datum = D - vv_update_display(D, "marked", VV_MSG_MARKED) - -/client/proc/mark_datum_mapview(datum/D as mob|obj|turf|area in view(view)) - set category = "Debug" - set name = "Mark Object" - mark_datum(D) - -/client/proc/deadmin() - if(holder) - holder.disassociate() - //qdel(holder) - return 1 - -//This proc checks whether subject has at least ONE of the rights specified in rights_required. -/proc/check_rights_for(client/subject, rights_required) - if(subject && subject.holder) - if(rights_required && !(rights_required & subject.holder.rights)) - return 0 - return 1 - return 0 - -/proc/GenerateToken() - . = "" - for(var/I in 1 to 32) - . += "[rand(10)]" - -/proc/RawHrefToken(forceGlobal = FALSE) - var/tok = GLOB.href_token - if(!forceGlobal && usr) - var/client/C = usr.client - if(!C) - // CRASH("No client for HrefToken()!") //Chomp EDIT - this seems be to encountered and we don't want this to crash - log_debug("Attempted to retrieve a HrefToken of an entity with no client.") //Chomp EDIT - return 0 //Chomp EDIT - var/datum/admins/holder = C.holder - if(holder) - tok = holder.href_token - return tok - -/proc/HrefToken(forceGlobal = FALSE) - return "admin_token=[RawHrefToken(forceGlobal)]" - -/proc/HrefTokenFormField(forceGlobal = FALSE) - return "" +GLOBAL_VAR_INIT(href_token, GenerateToken()) +GLOBAL_PROTECT(href_token) + +var/list/admin_datums = list() + +/datum/admins + var/rank = "Temporary Admin" + var/client/owner = null + var/rights = 0 + var/fakekey = null + + var/datum/marked_datum + + var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description + var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as holders. + var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel + var/admincaster_signature //What you'll sign the newsfeeds as + + var/href_token + + +/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) + if(!ckey) + error("Admin datum created without a ckey argument. Datum has been deleted") + qdel(src) + return + admincaster_signature = "[using_map.company_name] Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" + href_token = GenerateToken() + rank = initial_rank + rights = initial_rights + admin_datums[ckey] = src + if(rights & R_DEBUG) //grant profile access + world.SetConfig("APP/admin", ckey, "role=admin") + +/datum/admins/proc/associate(client/C) + if(istype(C)) + owner = C + owner.holder = src + owner.add_admin_verbs() //TODO + GLOB.admins |= C + +/datum/admins/proc/disassociate() + if(owner) + GLOB.admins -= owner + owner.remove_admin_verbs() + owner.deadmin_holder = owner.holder + owner.holder = null + +/datum/admins/proc/reassociate() + if(owner) + GLOB.admins += owner + owner.holder = src + owner.deadmin_holder = null + owner.add_admin_verbs() + +/datum/admins/vv_edit_var(var_name, var_value) + if(var_name == NAMEOF(src, rights) || var_name == NAMEOF(src, owner) || var_name == NAMEOF(src, rank)) + return FALSE + return ..() + +//TODO: Proccall guard, when all try/catch are removed and WrapAdminProccall is ported. + +/* +checks if usr is an admin with at least ONE of the flags in rights_required. (Note, they don't need all the flags) +if rights_required == 0, then it simply checks if they are an admin. +if it doesn't return 1 and show_msg=1 it will prints a message explaining why the check has failed +generally it would be used like so: + +/proc/admin_proc() + if(!check_rights(R_ADMIN)) return + to_world("you have enough rights!") + +NOTE: It checks usr by default. Supply the "user" argument if you wish to check for a specific mob. +*/ +/proc/check_rights(rights_required, show_msg=1, var/client/C = usr) + if(ismob(C)) + var/mob/M = C + C = M.client + if(!C) + return FALSE + if(!(istype(C, /client))) // If we still didn't find a client, something is wrong. + return FALSE + if(!C.holder) + if(show_msg) + to_chat(C, "Error: You are not an admin.") + return FALSE + + if(rights_required) + if(rights_required & C.holder.rights) + return TRUE + else + if(show_msg) + to_chat(C, "Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].") + return FALSE + else + return TRUE + +//probably a bit iffy - will hopefully figure out a better solution +/proc/check_if_greater_rights_than(client/other) + if(usr && usr.client) + if(usr.client.holder) + if(!other || !other.holder) + return 1 + if(usr.client.holder.rights != other.holder.rights) + if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights ) + return 1 //we have all the rights they have and more + to_chat(usr, "Error: Cannot proceed. They have more or equal rights to us.") + return 0 + +/client/proc/mark_datum(datum/D) + if(!holder) + return + if(holder.marked_datum) + vv_update_display(holder.marked_datum, "marked", "") + holder.marked_datum = D + vv_update_display(D, "marked", VV_MSG_MARKED) + +/client/proc/mark_datum_mapview(datum/D as mob|obj|turf|area in view(view)) + set category = "Debug" + set name = "Mark Object" + mark_datum(D) + +/client/proc/deadmin() + if(holder) + holder.disassociate() + //qdel(holder) + return 1 + +//This proc checks whether subject has at least ONE of the rights specified in rights_required. +/proc/check_rights_for(client/subject, rights_required) + if(subject && subject.holder) + if(rights_required && !(rights_required & subject.holder.rights)) + return 0 + return 1 + return 0 + +/proc/GenerateToken() + . = "" + for(var/I in 1 to 32) + . += "[rand(10)]" + +/proc/RawHrefToken(forceGlobal = FALSE) + var/tok = GLOB.href_token + if(!forceGlobal && usr) + var/client/C = usr.client + if(!C) + // CRASH("No client for HrefToken()!") //Chomp EDIT - this seems be to encountered and we don't want this to crash + log_debug("Attempted to retrieve a HrefToken of an entity with no client.") //Chomp EDIT + return 0 //Chomp EDIT + var/datum/admins/holder = C.holder + if(holder) + tok = holder.href_token + return tok + +/proc/HrefToken(forceGlobal = FALSE) + return "admin_token=[RawHrefToken(forceGlobal)]" + +/proc/HrefTokenFormField(forceGlobal = FALSE) + return "" diff --git a/code/modules/admin/secrets/admin_secrets/admin_logs.dm b/code/modules/admin/secrets/admin_secrets/admin_logs.dm index b578eb046f..83ebe9ec0e 100644 --- a/code/modules/admin/secrets/admin_secrets/admin_logs.dm +++ b/code/modules/admin/secrets/admin_secrets/admin_logs.dm @@ -1,44 +1,44 @@ -/datum/admin_secret_item/admin_secret/admin_logs - name = "Admin Logs" - -/datum/admin_secret_item/admin_secret/admin_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Admin Log
                    " - for(var/l in admin_log) - dat += "
                  • [l]
                  • " - if(!admin_log.len) - dat += "No-one has done anything this round!" - - var/datum/browser/popup = new(user, "adminlogs", "[src]", 550, 650, src) - popup.set_content(jointext(dat,null)) - popup.open() - - onclose(user, "adminlogs") - - -/datum/admin_secret_item/admin_secret/round_logs - name = "Round Dialogue Logs" - -/datum/admin_secret_item/admin_secret/round_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Dialogue Log
                    " - - dat += "
                    " - - for(var/l in GLOB.round_text_log) - dat += "
                  • [l]
                  • " - - dat += "
                    " - - if(!GLOB.round_text_log) - dat += "No-one has said anything this round! (How odd?)" - - var/datum/browser/popup = new(user, "dialoguelogs", "[src]", 550, 650, src) - popup.set_content(jointext(dat,null)) - popup.open() - - onclose(user, "dialoguelogs") +/datum/admin_secret_item/admin_secret/admin_logs + name = "Admin Logs" + +/datum/admin_secret_item/admin_secret/admin_logs/execute(var/mob/user) + . = ..() + if(!.) + return + var/dat = "Admin Log
                    " + for(var/l in admin_log) + dat += "
                  • [l]
                  • " + if(!admin_log.len) + dat += "No-one has done anything this round!" + + var/datum/browser/popup = new(user, "adminlogs", "[src]", 550, 650, src) + popup.set_content(jointext(dat,null)) + popup.open() + + onclose(user, "adminlogs") + + +/datum/admin_secret_item/admin_secret/round_logs + name = "Round Dialogue Logs" + +/datum/admin_secret_item/admin_secret/round_logs/execute(var/mob/user) + . = ..() + if(!.) + return + var/dat = "Dialogue Log
                    " + + dat += "
                    " + + for(var/l in GLOB.round_text_log) + dat += "
                  • [l]
                  • " + + dat += "
                    " + + if(!GLOB.round_text_log) + dat += "No-one has said anything this round! (How odd?)" + + var/datum/browser/popup = new(user, "dialoguelogs", "[src]", 550, 650, src) + popup.set_content(jointext(dat,null)) + popup.open() + + onclose(user, "dialoguelogs") diff --git a/code/modules/admin/secrets/admin_secrets/alter_narsie.dm b/code/modules/admin/secrets/admin_secrets/alter_narsie.dm index e764d1bb95..e15dd13319 100644 --- a/code/modules/admin/secrets/admin_secrets/alter_narsie.dm +++ b/code/modules/admin/secrets/admin_secrets/alter_narsie.dm @@ -1,14 +1,14 @@ -/datum/admin_secret_item/admin_secret/alter_narise - name = "Alter Nar-Sie" - -/datum/admin_secret_item/admin_secret/alter_narise/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "How do you wish for Nar-Sie to interact with its surroundings?","NarChoice",list("CultStation13", "Nar-Singulo")) - if(choice == "CultStation13") - log_and_message_admins("has set narsie's behaviour to \"CultStation13\".", user) - narsie_behaviour = choice - if(choice == "Nar-Singulo") - log_and_message_admins("has set narsie's behaviour to \"Nar-Singulo\".", user) - narsie_behaviour = choice +/datum/admin_secret_item/admin_secret/alter_narise + name = "Alter Nar-Sie" + +/datum/admin_secret_item/admin_secret/alter_narise/execute(var/mob/user) + . = ..() + if(!.) + return + var/choice = tgui_alert(user, "How do you wish for Nar-Sie to interact with its surroundings?","NarChoice",list("CultStation13", "Nar-Singulo")) + if(choice == "CultStation13") + log_and_message_admins("has set narsie's behaviour to \"CultStation13\".", user) + narsie_behaviour = choice + if(choice == "Nar-Singulo") + log_and_message_admins("has set narsie's behaviour to \"Nar-Singulo\".", user) + narsie_behaviour = choice diff --git a/code/modules/admin/secrets/admin_secrets/bombing_list.dm b/code/modules/admin/secrets/admin_secrets/bombing_list.dm index f94af7e569..d9c24097d2 100644 --- a/code/modules/admin/secrets/admin_secrets/bombing_list.dm +++ b/code/modules/admin/secrets/admin_secrets/bombing_list.dm @@ -1,12 +1,12 @@ -/datum/admin_secret_item/admin_secret/bombing_list - name = "Bombing List" - -/datum/admin_secret_item/admin_secret/bombing_list/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Bombing List" - for(var/l in bombers) - dat += text("[l]
                    ") - user << browse(dat, "window=bombers") +/datum/admin_secret_item/admin_secret/bombing_list + name = "Bombing List" + +/datum/admin_secret_item/admin_secret/bombing_list/execute(var/mob/user) + . = ..() + if(!.) + return + + var/dat = "Bombing List" + for(var/l in bombers) + dat += text("[l]
                    ") + user << browse(dat, "window=bombers") diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm index 942ff60d77..07c5096ee7 100644 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm @@ -1,37 +1,37 @@ -/datum/admin_secret_item/admin_secret/jump_shuttle - name = "Jump a Shuttle" - -/datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - - var/list/area_choices = return_areas() - var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!origin_area) return - - var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!destination_area) return - - var/long_jump = tgui_alert(user, "Is there a transition area for this jump?","Transition?", list("Yes","No")) - if (long_jump == "Yes") - var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!transition_area) return - - var/move_duration = tgui_input_number(user, "How many seconds will this jump take?") - - S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration) - message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle", 1) - log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle") - else - S.short_jump(area_choices[origin_area], area_choices[destination_area]) - message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle", 1) - log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle") +/datum/admin_secret_item/admin_secret/jump_shuttle + name = "Jump a Shuttle" + +/datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user) + if(!SSshuttles) return 0 + return ..() + +/datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user) + . = ..() + if(!.) + return + var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) + if (!shuttle_tag) return + + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] + + var/list/area_choices = return_areas() + var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!origin_area) return + + var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!destination_area) return + + var/long_jump = tgui_alert(user, "Is there a transition area for this jump?","Transition?", list("Yes","No")) + if (long_jump == "Yes") + var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!transition_area) return + + var/move_duration = tgui_input_number(user, "How many seconds will this jump take?") + + S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration) + message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle", 1) + log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle") + else + S.short_jump(area_choices[origin_area], area_choices[destination_area]) + message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle", 1) + log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm index c4fcc3ac20..007530e7de 100644 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm @@ -1,26 +1,26 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle - name = "Launch a Shuttle" - -/datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttles.shuttles) - if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to launch?", "Shuttle Choice", valid_shuttles) - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] - if (S.can_launch()) - S.launch(user) - log_and_message_admins("launched the [shuttle_tag] shuttle", user) - else - tgui_alert_async(user, "The [shuttle_tag] shuttle cannot be launched at this time. It's probably busy.") +/datum/admin_secret_item/admin_secret/launch_shuttle + name = "Launch a Shuttle" + +/datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user) + if(!SSshuttles) return 0 + return ..() + +/datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user) + . = ..() + if(!.) + return + var/list/valid_shuttles = list() + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) + valid_shuttles += shuttle_tag + + var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to launch?", "Shuttle Choice", valid_shuttles) + if (!shuttle_tag) + return + + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] + if (S.can_launch()) + S.launch(user) + log_and_message_admins("launched the [shuttle_tag] shuttle", user) + else + tgui_alert_async(user, "The [shuttle_tag] shuttle cannot be launched at this time. It's probably busy.") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm index 3c62428c09..517ddc91f7 100644 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm +++ b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm @@ -1,26 +1,26 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle_forced - name = "Launch a Shuttle (Forced)" - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttles.shuttles) - if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = tgui_input_list(user, "Which shuttle's launch do you want to force?", "Shuttle Choice", valid_shuttles) - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] - if (S.can_force()) - S.force_launch(user) - log_and_message_admins("forced the [shuttle_tag] shuttle", user) - else - tgui_alert_async(user, "The [shuttle_tag] shuttle launch cannot be forced at this time. It's busy, or hasn't been launched yet.") +/datum/admin_secret_item/admin_secret/launch_shuttle_forced + name = "Launch a Shuttle (Forced)" + +/datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user) + if(!SSshuttles) return 0 + return ..() + +/datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user) + . = ..() + if(!.) + return + var/list/valid_shuttles = list() + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) + valid_shuttles += shuttle_tag + + var/shuttle_tag = tgui_input_list(user, "Which shuttle's launch do you want to force?", "Shuttle Choice", valid_shuttles) + if (!shuttle_tag) + return + + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] + if (S.can_force()) + S.force_launch(user) + log_and_message_admins("forced the [shuttle_tag] shuttle", user) + else + tgui_alert_async(user, "The [shuttle_tag] shuttle launch cannot be forced at this time. It's busy, or hasn't been launched yet.") diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm index f1c49f4897..5d4738d692 100644 --- a/code/modules/admin/secrets/admin_secrets/list_dna.dm +++ b/code/modules/admin/secrets/admin_secrets/list_dna.dm @@ -1,14 +1,14 @@ -/datum/admin_secret_item/admin_secret/list_dna - name = "List DNA (Blood)" - -/datum/admin_secret_item/admin_secret/list_dna/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Showing DNA from blood.
                    " - dat += "
                    " - for(var/mob/living/carbon/human/H in mob_list) - if(H.dna && H.ckey) - dat += "" - dat += "
                    NameDNABlood Type
                    [H][H.dna.unique_enzymes][H.b_type]
                    " - user << browse(dat, "window=DNA;size=440x410") +/datum/admin_secret_item/admin_secret/list_dna + name = "List DNA (Blood)" + +/datum/admin_secret_item/admin_secret/list_dna/execute(var/mob/user) + . = ..() + if(!.) + return + var/dat = "Showing DNA from blood.
                    " + dat += "" + for(var/mob/living/carbon/human/H in mob_list) + if(H.dna && H.ckey) + dat += "" + dat += "
                    NameDNABlood Type
                    [H][H.dna.unique_enzymes][H.b_type]
                    " + user << browse(dat, "window=DNA;size=440x410") diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm index 03cb9701c4..0a9f4e0cb1 100644 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm @@ -1,19 +1,19 @@ -/datum/admin_secret_item/admin_secret/list_fingerprints - name = "List Fingerprints" - -/datum/admin_secret_item/admin_secret/list_fingerprints/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Showing Fingerprints.
                    " - dat += "" - for(var/mob/living/carbon/human/H in mob_list) - if(H.ckey) - if(H.dna && H.dna.uni_identity) - dat += "" - else if(H.dna && !H.dna.uni_identity) - dat += "" - else if(!H.dna) - dat += "" - dat += "
                    NameFingerprints
                    [H][md5(H.dna.uni_identity)]
                    [H]H.dna.uni_identity = null
                    [H]H.dna = null
                    " - user << browse(dat, "window=fingerprints;size=440x410") +/datum/admin_secret_item/admin_secret/list_fingerprints + name = "List Fingerprints" + +/datum/admin_secret_item/admin_secret/list_fingerprints/execute(var/mob/user) + . = ..() + if(!.) + return + var/dat = "Showing Fingerprints.
                    " + dat += "" + for(var/mob/living/carbon/human/H in mob_list) + if(H.ckey) + if(H.dna && H.dna.uni_identity) + dat += "" + else if(H.dna && !H.dna.uni_identity) + dat += "" + else if(!H.dna) + dat += "" + dat += "
                    NameFingerprints
                    [H][md5(H.dna.uni_identity)]
                    [H]H.dna.uni_identity = null
                    [H]H.dna = null
                    " + user << browse(dat, "window=fingerprints;size=440x410") diff --git a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm index 7cad935ca3..768101434a 100644 --- a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm @@ -1,27 +1,27 @@ -/datum/admin_secret_item/admin_secret/move_shuttle - name = "Move a Shuttle" - -/datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/confirm = tgui_alert(user, "This command directly moves a shuttle from one area to another. DO NOT USE THIS UNLESS YOU ARE DEBUGGING A SHUTTLE AND YOU KNOW WHAT YOU ARE DOING.", "Are you sure?", list("Ok", "Cancel")) - if (confirm == "Cancel") - return - - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - - var/destination_tag = tgui_input_list(user, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)", "Landmark Choice", SSshuttles.registered_shuttle_landmarks) - if (!destination_tag) return - var/destination_location = SSshuttles.get_landmark(destination_tag) - if (!destination_location) return - - S.attempt_move(destination_location) - log_and_message_admins("moved the [shuttle_tag] shuttle", user) +/datum/admin_secret_item/admin_secret/move_shuttle + name = "Move a Shuttle" + +/datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user) + if(!SSshuttles) return 0 + return ..() + +/datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user) + . = ..() + if(!.) + return + var/confirm = tgui_alert(user, "This command directly moves a shuttle from one area to another. DO NOT USE THIS UNLESS YOU ARE DEBUGGING A SHUTTLE AND YOU KNOW WHAT YOU ARE DOING.", "Are you sure?", list("Ok", "Cancel")) + if (confirm == "Cancel") + return + + var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) + if (!shuttle_tag) return + + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] + + var/destination_tag = tgui_input_list(user, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)", "Landmark Choice", SSshuttles.registered_shuttle_landmarks) + if (!destination_tag) return + var/destination_location = SSshuttles.get_landmark(destination_tag) + if (!destination_location) return + + S.attempt_move(destination_location) + log_and_message_admins("moved the [shuttle_tag] shuttle", user) diff --git a/code/modules/admin/secrets/admin_secrets/prison_warp.dm b/code/modules/admin/secrets/admin_secrets/prison_warp.dm index b4ac06fcc8..06740f1760 100644 --- a/code/modules/admin/secrets/admin_secrets/prison_warp.dm +++ b/code/modules/admin/secrets/admin_secrets/prison_warp.dm @@ -1,38 +1,38 @@ -/datum/admin_secret_item/admin_secret/prison_warp - name = "Prison Warp" - -/datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user) - if(!ticker) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user) - . = ..() - if(!.) - return - for(var/mob/living/carbon/human/H in mob_list) - var/turf/T = get_turf(H) - var/security = 0 - if((T in using_map.admin_levels) || prisonwarped.Find(H)) - //don't warp them if they aren't ready or are already there - continue - H.Paralyse(5) - if(H.wear_id) - var/obj/item/weapon/card/id/id = H.get_idcard() - for(var/A in id.access) - if(A == access_security) - security++ - if(!security) - //strip their stuff before they teleport into a cell :downs: - for(var/obj/item/weapon/W in H) - if(istype(W, /obj/item/organ/external)) - continue - //don't strip organs - H.drop_from_inventory(W) - //teleport person to cell - H.loc = pick(prisonwarp) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) - else - //teleport security person - H.loc = pick(prisonsecuritywarp) - prisonwarped += H +/datum/admin_secret_item/admin_secret/prison_warp + name = "Prison Warp" + +/datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user) + if(!ticker) return 0 + return ..() + +/datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user) + . = ..() + if(!.) + return + for(var/mob/living/carbon/human/H in mob_list) + var/turf/T = get_turf(H) + var/security = 0 + if((T in using_map.admin_levels) || prisonwarped.Find(H)) + //don't warp them if they aren't ready or are already there + continue + H.Paralyse(5) + if(H.wear_id) + var/obj/item/weapon/card/id/id = H.get_idcard() + for(var/A in id.access) + if(A == access_security) + security++ + if(!security) + //strip their stuff before they teleport into a cell :downs: + for(var/obj/item/weapon/W in H) + if(istype(W, /obj/item/organ/external)) + continue + //don't strip organs + H.drop_from_inventory(W) + //teleport person to cell + H.loc = pick(prisonwarp) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) + else + //teleport security person + H.loc = pick(prisonsecuritywarp) + prisonwarped += H diff --git a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm b/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm index c76ff2d9c1..c9e7cec5df 100644 --- a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm +++ b/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/admin_secret/show_ai_laws - name = "Show AI laws" - -/datum/admin_secret_item/admin_secret/show_ai_laws/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.output_ai_laws() +/datum/admin_secret_item/admin_secret/show_ai_laws + name = "Show AI laws" + +/datum/admin_secret_item/admin_secret/show_ai_laws/execute(var/mob/user) + . = ..() + if(.) + user.client.holder.output_ai_laws() diff --git a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm index f4bb82224b..3cbe5062e7 100644 --- a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm +++ b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm @@ -1,12 +1,12 @@ -/datum/admin_secret_item/admin_secret/show_crew_manifest - name = "Show Crew Manifest" - -/datum/admin_secret_item/admin_secret/show_crew_manifest/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat - dat += "

                    Crew Manifest

                    " - dat += data_core.get_manifest() - - user << browse(dat, "window=manifest;size=370x420;can_close=1") +/datum/admin_secret_item/admin_secret/show_crew_manifest + name = "Show Crew Manifest" + +/datum/admin_secret_item/admin_secret/show_crew_manifest/execute(var/mob/user) + . = ..() + if(!.) + return + var/dat + dat += "

                    Crew Manifest

                    " + dat += data_core.get_manifest() + + user << browse(dat, "window=manifest;size=370x420;can_close=1") diff --git a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm index bde3563960..a323266f5c 100644 --- a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm +++ b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm @@ -1,14 +1,14 @@ -/datum/admin_secret_item/admin_secret/show_game_mode - name = "Show Game Mode" - -/datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user) - if(!ticker) - return 0 - return ..() - -/datum/admin_secret_item/admin_secret/show_game_mode/execute(var/mob/user) - . = ..() - if(!.) - return - if (ticker.mode) tgui_alert_async(usr, "The game mode is [ticker.mode.name]") - else tgui_alert_async(usr, "For some reason there's a ticker, but not a game mode") +/datum/admin_secret_item/admin_secret/show_game_mode + name = "Show Game Mode" + +/datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user) + if(!ticker) + return 0 + return ..() + +/datum/admin_secret_item/admin_secret/show_game_mode/execute(var/mob/user) + . = ..() + if(!.) + return + if (ticker.mode) tgui_alert_async(usr, "The game mode is [ticker.mode.name]") + else tgui_alert_async(usr, "For some reason there's a ticker, but not a game mode") diff --git a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm index 877e2c217d..67fc3d357f 100644 --- a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm +++ b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm @@ -1,15 +1,15 @@ -/datum/admin_secret_item/admin_secret/show_law_changes - name = "Show law changes" - -/datum/admin_secret_item/admin_secret/show_law_changes/name() - return "Show Last [length(lawchanges)] Law change\s" - -/datum/admin_secret_item/admin_secret/show_law_changes/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Showing last [length(lawchanges)] law changes.
                    " - for(var/sig in lawchanges) - dat += "[sig]
                    " - user << browse(dat, "window=lawchanges;size=800x500") +/datum/admin_secret_item/admin_secret/show_law_changes + name = "Show law changes" + +/datum/admin_secret_item/admin_secret/show_law_changes/name() + return "Show Last [length(lawchanges)] Law change\s" + +/datum/admin_secret_item/admin_secret/show_law_changes/execute(var/mob/user) + . = ..() + if(!.) + return + + var/dat = "Showing last [length(lawchanges)] law changes.
                    " + for(var/sig in lawchanges) + dat += "[sig]
                    " + user << browse(dat, "window=lawchanges;size=800x500") diff --git a/code/modules/admin/secrets/admin_secrets/show_signalers.dm b/code/modules/admin/secrets/admin_secrets/show_signalers.dm index 32a77cbef2..4b0117a88f 100644 --- a/code/modules/admin/secrets/admin_secrets/show_signalers.dm +++ b/code/modules/admin/secrets/admin_secrets/show_signalers.dm @@ -1,15 +1,15 @@ -/datum/admin_secret_item/admin_secret/show_signalers - name = "Show Last Signalers" - -/datum/admin_secret_item/admin_secret/show_signalers/name() - return "Show Last [length(lastsignalers)] Signaler\s" - -/datum/admin_secret_item/admin_secret/show_signalers/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Showing last [length(lastsignalers)] signalers.
                    " - for(var/sig in lastsignalers) - dat += "[sig]
                    " - user << browse(dat, "window=lastsignalers;size=800x500") +/datum/admin_secret_item/admin_secret/show_signalers + name = "Show Last Signalers" + +/datum/admin_secret_item/admin_secret/show_signalers/name() + return "Show Last [length(lastsignalers)] Signaler\s" + +/datum/admin_secret_item/admin_secret/show_signalers/execute(var/mob/user) + . = ..() + if(!.) + return + + var/dat = "Showing last [length(lastsignalers)] signalers.
                    " + for(var/sig in lastsignalers) + dat += "[sig]
                    " + user << browse(dat, "window=lastsignalers;size=800x500") diff --git a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm b/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm index 591c13bd3f..bcfd9cd7b9 100644 --- a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm +++ b/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/admin_secret/traitors_and_objectives - name = "Show current traitors and objectives" - -/datum/admin_secret_item/admin_secret/traitors_and_objectives/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.check_antagonists() +/datum/admin_secret_item/admin_secret/traitors_and_objectives + name = "Show current traitors and objectives" + +/datum/admin_secret_item/admin_secret/traitors_and_objectives/execute(var/mob/user) + . = ..() + if(.) + user.client.holder.check_antagonists() diff --git a/code/modules/admin/secrets/final_solutions/summon_narsie.dm b/code/modules/admin/secrets/final_solutions/summon_narsie.dm index 0a382d71d7..738c56e674 100644 --- a/code/modules/admin/secrets/final_solutions/summon_narsie.dm +++ b/code/modules/admin/secrets/final_solutions/summon_narsie.dm @@ -1,11 +1,11 @@ -/datum/admin_secret_item/final_solution/summon_narsie - name = "Summon Nar-Sie" - -/datum/admin_secret_item/final_solution/summon_narsie/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "You sure you want to end the round and summon Nar-Sie at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!",list("PRAISE SATAN", "Cancel")) - if(choice == "PRAISE SATAN") - new /obj/singularity/narsie/large(get_turf(user)) - log_and_message_admins("has summoned Nar-Sie and brought about a new realm of suffering.", user) +/datum/admin_secret_item/final_solution/summon_narsie + name = "Summon Nar-Sie" + +/datum/admin_secret_item/final_solution/summon_narsie/execute(var/mob/user) + . = ..() + if(!.) + return + var/choice = tgui_alert(user, "You sure you want to end the round and summon Nar-Sie at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!",list("PRAISE SATAN", "Cancel")) + if(choice == "PRAISE SATAN") + new /obj/singularity/narsie/large(get_turf(user)) + log_and_message_admins("has summoned Nar-Sie and brought about a new realm of suffering.", user) diff --git a/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm b/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm index ca7f0598d5..b764077179 100644 --- a/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm +++ b/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm @@ -1,13 +1,13 @@ -/datum/admin_secret_item/final_solution/supermatter_cascade - name = "Supermatter Cascade" - -/datum/admin_secret_item/final_solution/supermatter_cascade/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "You sure you want to destroy the universe and create a large explosion at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!", list("NO TIME TO EXPLAIN", "Cancel")) - if(choice == "NO TIME TO EXPLAIN") - explosion(get_turf(user), 8, 16, 24, 32, 1) - new /turf/unsimulated/wall/supermatter(get_turf(user)) - SetUniversalState(/datum/universal_state/supermatter_cascade) - message_admins("[key_name_admin(user)] has managed to destroy the universe with a supermatter cascade. Good job, [key_name_admin(user)]") +/datum/admin_secret_item/final_solution/supermatter_cascade + name = "Supermatter Cascade" + +/datum/admin_secret_item/final_solution/supermatter_cascade/execute(var/mob/user) + . = ..() + if(!.) + return + var/choice = tgui_alert(user, "You sure you want to destroy the universe and create a large explosion at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!", list("NO TIME TO EXPLAIN", "Cancel")) + if(choice == "NO TIME TO EXPLAIN") + explosion(get_turf(user), 8, 16, 24, 32, 1) + new /turf/unsimulated/wall/supermatter(get_turf(user)) + SetUniversalState(/datum/universal_state/supermatter_cascade) + message_admins("[key_name_admin(user)] has managed to destroy the universe with a supermatter cascade. Good job, [key_name_admin(user)]") diff --git a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm index ea54952a7e..2256d4f716 100644 --- a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/fun_secret/break_all_lights - name = "Break All Lights" - -/datum/admin_secret_item/fun_secret/break_all_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(0,0) +/datum/admin_secret_item/fun_secret/break_all_lights + name = "Break All Lights" + +/datum/admin_secret_item/fun_secret/break_all_lights/execute(var/mob/user) + . = ..() + if(.) + lightsout(0,0) diff --git a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm b/code/modules/admin/secrets/fun_secrets/break_some_lights.dm index 0c9aae1b16..70b9eaf806 100644 --- a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/break_some_lights.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/fun_secret/break_some_lights - name = "Break Some Lights" - -/datum/admin_secret_item/fun_secret/break_some_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(1,2) +/datum/admin_secret_item/fun_secret/break_some_lights + name = "Break Some Lights" + +/datum/admin_secret_item/fun_secret/break_some_lights/execute(var/mob/user) + . = ..() + if(.) + lightsout(1,2) diff --git a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm index 622c68d2ea..e0525a72b3 100644 --- a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm @@ -1,10 +1,10 @@ -/datum/admin_secret_item/fun_secret/fix_all_lights - name = "Fix All Lights" - -/datum/admin_secret_item/fun_secret/fix_all_lights/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/machinery/light/L in machines) - L.fix() +/datum/admin_secret_item/fun_secret/fix_all_lights + name = "Fix All Lights" + +/datum/admin_secret_item/fun_secret/fix_all_lights/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/obj/machinery/light/L in machines) + L.fix() diff --git a/code/modules/admin/secrets/fun_secrets/ghost_mode.dm b/code/modules/admin/secrets/fun_secrets/ghost_mode.dm index c59a9c0589..a3a5060047 100644 --- a/code/modules/admin/secrets/fun_secrets/ghost_mode.dm +++ b/code/modules/admin/secrets/fun_secrets/ghost_mode.dm @@ -1,48 +1,48 @@ -/datum/admin_secret_item/fun_secret/ghost_mode - name = "Ghost Mode" - var/list/affected_mobs - -/datum/admin_secret_item/fun_secret/ghost_mode/New() - ..() - affected_mobs = list() - -/datum/admin_secret_item/fun_secret/ghost_mode/execute(var/mob/user) - . = ..() - if(!.) - return - - var/list/affected_areas = list() - for(var/mob/M in living_mob_list) - if(M.stat == CONSCIOUS && !(M in affected_mobs)) - affected_mobs |= M - switch(rand(1,4)) - if(1) - M.show_message(text("You shudder as if cold..."), 1) - if(2) - M.show_message(text("You feel something gliding across your back..."), 1) - if(3) - M.show_message(text("Your eyes twitch, you feel like something you can't see is here..."), 1) - if(4) - M.show_message(text("You notice something moving out of the corner of your eye, but nothing is there..."), 1) - - for(var/obj/W in orange(5,M)) - if(prob(25) && !W.anchored) - step_rand(W) - - var/area/A = get_area(M) - if(A.requires_power && !A.always_unpowered && A.power_light && (A.z in using_map.player_levels)) - affected_areas |= get_area(M) - - affected_mobs |= user - for(var/area/AffectedArea in affected_areas) - AffectedArea.power_light = 0 - AffectedArea.power_change() - spawn(rand(25,50)) - AffectedArea.power_light = 1 - AffectedArea.power_change() - - sleep(100) - for(var/mob/M in affected_mobs) - M.show_message(text("The chilling wind suddenly stops..."), 1) - affected_mobs.Cut() - affected_areas.Cut() +/datum/admin_secret_item/fun_secret/ghost_mode + name = "Ghost Mode" + var/list/affected_mobs + +/datum/admin_secret_item/fun_secret/ghost_mode/New() + ..() + affected_mobs = list() + +/datum/admin_secret_item/fun_secret/ghost_mode/execute(var/mob/user) + . = ..() + if(!.) + return + + var/list/affected_areas = list() + for(var/mob/M in living_mob_list) + if(M.stat == CONSCIOUS && !(M in affected_mobs)) + affected_mobs |= M + switch(rand(1,4)) + if(1) + M.show_message(text("You shudder as if cold..."), 1) + if(2) + M.show_message(text("You feel something gliding across your back..."), 1) + if(3) + M.show_message(text("Your eyes twitch, you feel like something you can't see is here..."), 1) + if(4) + M.show_message(text("You notice something moving out of the corner of your eye, but nothing is there..."), 1) + + for(var/obj/W in orange(5,M)) + if(prob(25) && !W.anchored) + step_rand(W) + + var/area/A = get_area(M) + if(A.requires_power && !A.always_unpowered && A.power_light && (A.z in using_map.player_levels)) + affected_areas |= get_area(M) + + affected_mobs |= user + for(var/area/AffectedArea in affected_areas) + AffectedArea.power_light = 0 + AffectedArea.power_change() + spawn(rand(25,50)) + AffectedArea.power_light = 1 + AffectedArea.power_change() + + sleep(100) + for(var/mob/M in affected_mobs) + M.show_message(text("The chilling wind suddenly stops..."), 1) + affected_mobs.Cut() + affected_areas.Cut() diff --git a/code/modules/admin/secrets/fun_secrets/only_one.dm b/code/modules/admin/secrets/fun_secrets/only_one.dm index bc0c962b29..c065187c3f 100644 --- a/code/modules/admin/secrets/fun_secrets/only_one.dm +++ b/code/modules/admin/secrets/fun_secrets/only_one.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/fun_secret/only_one - name = "There Can Be Only One" - -/datum/admin_secret_item/fun_secret/only_one/execute(var/mob/user) - . = ..() - if(.) - only_one() +/datum/admin_secret_item/fun_secret/only_one + name = "There Can Be Only One" + +/datum/admin_secret_item/fun_secret/only_one/execute(var/mob/user) + . = ..() + if(.) + only_one() diff --git a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm index 16438ad195..d17d648ea9 100644 --- a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm +++ b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm @@ -1,14 +1,14 @@ -/datum/admin_secret_item/fun_secret/paintbal_mode - name = "Paintball Mode" - -/datum/admin_secret_item/fun_secret/paintbal_mode/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/species in GLOB.all_species) - var/datum/species/S = GLOB.all_species[species] - S.blood_color = "rainbow" - for(var/obj/effect/decal/cleanable/blood/B in world) - B.basecolor = "rainbow" - B.update_icon() +/datum/admin_secret_item/fun_secret/paintbal_mode + name = "Paintball Mode" + +/datum/admin_secret_item/fun_secret/paintbal_mode/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/species in GLOB.all_species) + var/datum/species/S = GLOB.all_species[species] + S.blood_color = "rainbow" + for(var/obj/effect/decal/cleanable/blood/B in world) + B.basecolor = "rainbow" + B.update_icon() diff --git a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm b/code/modules/admin/secrets/fun_secrets/power_all_smes.dm index 277edd5a43..2320bcf2cb 100644 --- a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm +++ b/code/modules/admin/secrets/fun_secrets/power_all_smes.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/fun_secret/power_all_smes - name = "Power All SMES" - -/datum/admin_secret_item/fun_secret/power_all_smes/execute(var/mob/user) - . = ..() - if(.) - power_restore_quick() +/datum/admin_secret_item/fun_secret/power_all_smes + name = "Power All SMES" + +/datum/admin_secret_item/fun_secret/power_all_smes/execute(var/mob/user) + . = ..() + if(.) + power_restore_quick() diff --git a/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm b/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm index 28e9497f53..ef0e40a33a 100644 --- a/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm +++ b/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm @@ -1,10 +1,10 @@ -/datum/admin_secret_item/fun_secret/remove_all_clothing - name = "Remove ALL Clothing" - -/datum/admin_secret_item/fun_secret/remove_all_clothing/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/item/clothing/O in world) - qdel(O) +/datum/admin_secret_item/fun_secret/remove_all_clothing + name = "Remove ALL Clothing" + +/datum/admin_secret_item/fun_secret/remove_all_clothing/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/obj/item/clothing/O in world) + qdel(O) diff --git a/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm b/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm index 73dba4ce4f..9de30a0a5a 100644 --- a/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm +++ b/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm @@ -1,10 +1,10 @@ -/datum/admin_secret_item/fun_secret/remove_internal_clothing - name = "Remove 'Internal' Clothing" - -/datum/admin_secret_item/fun_secret/remove_internal_clothing/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/item/clothing/under/O in world) - qdel(O) +/datum/admin_secret_item/fun_secret/remove_internal_clothing + name = "Remove 'Internal' Clothing" + +/datum/admin_secret_item/fun_secret/remove_internal_clothing/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/obj/item/clothing/under/O in world) + qdel(O) diff --git a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm index 3ec1bacb2c..9aee563d22 100644 --- a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm +++ b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm @@ -1,11 +1,11 @@ -/datum/admin_secret_item/fun_secret/send_strike_team - name = "Send Strike Team" - -/datum/admin_secret_item/fun_secret/send_strike_team/can_execute(var/mob/user) - if(!ticker) return 0 - return ..() - -/datum/admin_secret_item/fun_secret/send_strike_team/execute(var/mob/user) - . = ..() - if(.) - return user.client.strike_team() +/datum/admin_secret_item/fun_secret/send_strike_team + name = "Send Strike Team" + +/datum/admin_secret_item/fun_secret/send_strike_team/can_execute(var/mob/user) + if(!ticker) return 0 + return ..() + +/datum/admin_secret_item/fun_secret/send_strike_team/execute(var/mob/user) + . = ..() + if(.) + return user.client.strike_team() diff --git a/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm b/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm index 33ba8a861c..6bcf2ee9b3 100644 --- a/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm +++ b/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm @@ -1,21 +1,21 @@ -/datum/admin_secret_item/fun_secret/toggle_bomb_cap - name = "Toggle Bomb Cap" - permissions = R_SERVER - -/datum/admin_secret_item/fun_secret/toggle_bomb_cap/execute(var/mob/user) - . = ..() - if(!.) - return - - switch(max_explosion_range) - if(14) max_explosion_range = 16 - if(16) max_explosion_range = 20 - if(20) max_explosion_range = 28 - if(28) max_explosion_range = 56 - if(56) max_explosion_range = 128 - if(128) max_explosion_range = 14 - var/range_dev = max_explosion_range *0.25 - var/range_high = max_explosion_range *0.5 - var/range_low = max_explosion_range - message_admins("[key_name_admin(user)] changed the bomb cap to [range_dev], [range_high], [range_low]", 1) - log_admin("[key_name_admin(user)] changed the bomb cap to [max_explosion_range]") +/datum/admin_secret_item/fun_secret/toggle_bomb_cap + name = "Toggle Bomb Cap" + permissions = R_SERVER + +/datum/admin_secret_item/fun_secret/toggle_bomb_cap/execute(var/mob/user) + . = ..() + if(!.) + return + + switch(max_explosion_range) + if(14) max_explosion_range = 16 + if(16) max_explosion_range = 20 + if(20) max_explosion_range = 28 + if(28) max_explosion_range = 56 + if(56) max_explosion_range = 128 + if(128) max_explosion_range = 14 + var/range_dev = max_explosion_range *0.25 + var/range_high = max_explosion_range *0.5 + var/range_low = max_explosion_range + message_admins("[key_name_admin(user)] changed the bomb cap to [range_dev], [range_high], [range_low]", 1) + log_admin("[key_name_admin(user)] changed the bomb cap to [max_explosion_range]") diff --git a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm index 81b77eabb6..d6819530a4 100644 --- a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm +++ b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm @@ -1,13 +1,13 @@ -/datum/admin_secret_item/fun_secret/triple_ai_mode - name = "Triple AI Mode" - -/datum/admin_secret_item/fun_secret/triple_ai_mode/can_execute(var/mob/user) - if(ticker && ticker.current_state > GAME_STATE_PREGAME) - return 0 - - return ..() - -/datum/admin_secret_item/admin_secret/triple_ai_mode/execute(var/mob/user) - . = ..() - if(.) - user.client.triple_ai() +/datum/admin_secret_item/fun_secret/triple_ai_mode + name = "Triple AI Mode" + +/datum/admin_secret_item/fun_secret/triple_ai_mode/can_execute(var/mob/user) + if(ticker && ticker.current_state > GAME_STATE_PREGAME) + return 0 + + return ..() + +/datum/admin_secret_item/admin_secret/triple_ai_mode/execute(var/mob/user) + . = ..() + if(.) + user.client.triple_ai() diff --git a/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm b/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm index ae6f36a1ac..c82a07c96a 100644 --- a/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm +++ b/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm @@ -1,11 +1,11 @@ -/datum/admin_secret_item/fun_secret/turn_humans_into_corgies - name = "Turn All Humans Into Corgies" - -/datum/admin_secret_item/fun_secret/turn_humans_into_corgies/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/mob/living/carbon/human/H in mob_list) - spawn(0) - H.corgize() +/datum/admin_secret_item/fun_secret/turn_humans_into_corgies + name = "Turn All Humans Into Corgies" + +/datum/admin_secret_item/fun_secret/turn_humans_into_corgies/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/mob/living/carbon/human/H in mob_list) + spawn(0) + H.corgize() diff --git a/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm b/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm index 99b1573ade..88e5bd9022 100644 --- a/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm +++ b/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm @@ -1,11 +1,11 @@ -/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys - name = "Turn All Humans Into Monkeys" - -/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/mob/living/carbon/human/H in mob_list) - spawn(0) - H.monkeyize() +/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys + name = "Turn All Humans Into Monkeys" + +/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys/execute(var/mob/user) + . = ..() + if(!.) + return + + for(var/mob/living/carbon/human/H in mob_list) + spawn(0) + H.monkeyize() diff --git a/code/modules/admin/secrets/random_events/gravity.dm b/code/modules/admin/secrets/random_events/gravity.dm index b01bb49637..32c31827ab 100644 --- a/code/modules/admin/secrets/random_events/gravity.dm +++ b/code/modules/admin/secrets/random_events/gravity.dm @@ -1,31 +1,31 @@ -/********** -* Gravity * -**********/ -/datum/admin_secret_item/random_event/gravity - name = "Toggle Station Artificial Gravity" - -/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) - if(!(ticker && ticker.mode)) - return 0 - - return ..() - -/datum/admin_secret_item/random_event/gravity/execute(var/mob/user) - . = ..() - if(!.) - return - - gravity_is_on = !gravity_is_on - for(var/area/A in world) - A.gravitychange(gravity_is_on) - - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","Grav") - if(gravity_is_on) - log_admin("[key_name(user)] toggled gravity on.", 1) - message_admins("[key_name_admin(user)] toggled gravity on.", 1) - command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") - else - log_admin("[key_name(user)] toggled gravity off.", 1) - message_admins("[key_name_admin(usr)] toggled gravity off.", 1) - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.") +/********** +* Gravity * +**********/ +/datum/admin_secret_item/random_event/gravity + name = "Toggle Station Artificial Gravity" + +/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) + if(!(ticker && ticker.mode)) + return 0 + + return ..() + +/datum/admin_secret_item/random_event/gravity/execute(var/mob/user) + . = ..() + if(!.) + return + + gravity_is_on = !gravity_is_on + for(var/area/A in world) + A.gravitychange(gravity_is_on) + + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Grav") + if(gravity_is_on) + log_admin("[key_name(user)] toggled gravity on.", 1) + message_admins("[key_name_admin(user)] toggled gravity on.", 1) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") + else + log_admin("[key_name(user)] toggled gravity off.", 1) + message_admins("[key_name_admin(usr)] toggled gravity off.", 1) + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.") diff --git a/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm b/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm index f96004565d..d7e09d845e 100644 --- a/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm +++ b/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm @@ -1,7 +1,7 @@ -/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation - name = "Trigger a Cortical Borer infestation" - -/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation/execute(var/mob/user) - . = ..() - if(.) - return borers.attempt_random_spawn() +/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation + name = "Trigger a Cortical Borer infestation" + +/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation/execute(var/mob/user) + . = ..() + if(.) + return borers.attempt_random_spawn() diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm index 2ddfd393f4..b74750843c 100644 --- a/code/modules/admin/verbs/BrokenInhands.dm +++ b/code/modules/admin/verbs/BrokenInhands.dm @@ -1,36 +1,36 @@ -/proc/getbrokeninhands() - var/icon/IL = new('icons/mob/items/lefthand.dmi') - var/list/Lstates = IL.IconStates() - var/icon/IR = new('icons/mob/items/righthand.dmi') - var/list/Rstates = IR.IconStates() - - - var/text - for(var/A in typesof(/obj/item)) - var/obj/item/O = new A( locate(1,1,1) ) - if(!O) continue - var/icon/J = new(O.icon) - var/list/istates = J.IconStates() - if(!Lstates.Find(O.icon_state) && !Lstates.Find(O.item_state)) - if(O.icon_state) - text += "[O.type] is missing left hand icon called \"[O.icon_state]\".\n" - if(!Rstates.Find(O.icon_state) && !Rstates.Find(O.item_state)) - if(O.icon_state) - text += "[O.type] is missing right hand icon called \"[O.icon_state]\".\n" - - - if(O.icon_state) - if(!istates.Find(O.icon_state)) - text += "[O.type] is missing normal icon called \"[O.icon_state]\" in \"[O.icon]\".\n" - //if(O.item_state) - // if(!istates.Find(O.item_state)) - // text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n" - //text+="\n" - qdel(O) - if(text) - var/F = file("broken_icons.txt") - fdel(F) - F << text - to_world("Completeled successfully and written to [F]") - - +/proc/getbrokeninhands() + var/icon/IL = new('icons/mob/items/lefthand.dmi') + var/list/Lstates = IL.IconStates() + var/icon/IR = new('icons/mob/items/righthand.dmi') + var/list/Rstates = IR.IconStates() + + + var/text + for(var/A in typesof(/obj/item)) + var/obj/item/O = new A( locate(1,1,1) ) + if(!O) continue + var/icon/J = new(O.icon) + var/list/istates = J.IconStates() + if(!Lstates.Find(O.icon_state) && !Lstates.Find(O.item_state)) + if(O.icon_state) + text += "[O.type] is missing left hand icon called \"[O.icon_state]\".\n" + if(!Rstates.Find(O.icon_state) && !Rstates.Find(O.item_state)) + if(O.icon_state) + text += "[O.type] is missing right hand icon called \"[O.icon_state]\".\n" + + + if(O.icon_state) + if(!istates.Find(O.icon_state)) + text += "[O.type] is missing normal icon called \"[O.icon_state]\" in \"[O.icon]\".\n" + //if(O.item_state) + // if(!istates.Find(O.item_state)) + // text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n" + //text+="\n" + qdel(O) + if(text) + var/F = file("broken_icons.txt") + fdel(F) + F << text + to_world("Completeled successfully and written to [F]") + + diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 920bf9d4e3..5f533297e1 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -1,63 +1,63 @@ -/client/proc/cmd_admin_say(msg as text) - set category = "Special Verbs" - set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite - set hidden = 1 - if(!check_rights(R_ADMIN)) //VOREStation Edit - return - - msg = sanitize(msg) - if(!msg) - return - - log_adminsay(msg,src) - - for(var/client/C in GLOB.admins) - if(check_rights(R_ADMIN, 0, C)) - to_chat(C, "" + create_text_tag("admin", "ADMIN:", C) + " [key_name(usr, 1)]([admin_jump_link(mob, src)]): [msg]") - - feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_mod_say(msg as text) - set category = "Special Verbs" - set name = "Msay" - set hidden = 1 - - if(!check_rights(R_ADMIN|R_MOD|R_EVENT)) //VOREStation Edit //CHOMP Removal: Removed R_SERVER because it wasn't necessary. - return - - msg = sanitize(msg) - log_modsay(msg,src) - - if (!msg) - return - - var/sender_name = key_name(usr, 1) - if(check_rights(R_ADMIN, 0)) - sender_name = "[sender_name]" - for(var/client/C in GLOB.admins) - if(check_rights(R_ADMIN|R_MOD|R_SERVER)) //VOREStation Edit - to_chat(C, "" + create_text_tag("mod", "MOD:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]") - - feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_event_say(msg as text) - set category = "Special Verbs" - set name = "Esay" - set hidden = 1 - - if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_EVENT)) //CHOMP Removal: Removed R_SERVER because it wasn't necessary. - return - - msg = sanitize(msg) - log_eventsay(msg,src) - - if (!msg) - return - - var/sender_name = key_name(usr, 1) - if(check_rights(R_ADMIN, 0)) - sender_name = "[sender_name]" - for(var/client/C in GLOB.admins) - to_chat(C, "" + create_text_tag("event", "EVENT:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]") - - feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/cmd_admin_say(msg as text) + set category = "Special Verbs" + set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite + set hidden = 1 + if(!check_rights(R_ADMIN)) //VOREStation Edit + return + + msg = sanitize(msg) + if(!msg) + return + + log_adminsay(msg,src) + + for(var/client/C in GLOB.admins) + if(check_rights(R_ADMIN, 0, C)) + to_chat(C, "" + create_text_tag("admin", "ADMIN:", C) + " [key_name(usr, 1)]([admin_jump_link(mob, src)]): [msg]") + + feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_mod_say(msg as text) + set category = "Special Verbs" + set name = "Msay" + set hidden = 1 + + if(!check_rights(R_ADMIN|R_MOD|R_EVENT)) //VOREStation Edit //CHOMP Removal: Removed R_SERVER because it wasn't necessary. + return + + msg = sanitize(msg) + log_modsay(msg,src) + + if (!msg) + return + + var/sender_name = key_name(usr, 1) + if(check_rights(R_ADMIN, 0)) + sender_name = "[sender_name]" + for(var/client/C in GLOB.admins) + if(check_rights(R_ADMIN|R_MOD|R_SERVER)) //VOREStation Edit + to_chat(C, "" + create_text_tag("mod", "MOD:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]") + + feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_event_say(msg as text) + set category = "Special Verbs" + set name = "Esay" + set hidden = 1 + + if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_EVENT)) //CHOMP Removal: Removed R_SERVER because it wasn't necessary. + return + + msg = sanitize(msg) + log_eventsay(msg,src) + + if (!msg) + return + + var/sender_name = key_name(usr, 1) + if(check_rights(R_ADMIN, 0)) + sender_name = "[sender_name]" + for(var/client/C in GLOB.admins) + to_chat(C, "" + create_text_tag("event", "EVENT:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]") + + feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 3927c20899..082f0e26b0 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -1,60 +1,60 @@ -/client/proc/atmosscan() - set category = "Mapping" - set name = "Check Piping" - set background = 1 - if(!src.holder) - return - - feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - if(tgui_alert(usr, "WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", list("No", "Yes")) == "No") - return - - to_chat(usr, "Checking for disconnected pipes...") - //all plumbing - yes, some things might get stated twice, doesn't matter. - for (var/obj/machinery/atmospherics/plumbing in machines) - if (plumbing.nodealert) - to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") - - //Manifolds - for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines) - if (!pipe.node1 || !pipe.node2 || !pipe.node3) - to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") - - //Pipes - for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines) - if (!pipe.node1 || !pipe.node2) - to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") - - to_chat(usr, "Checking for overlapping pipes...") - next_turf: - for(var/turf/T in world) - for(var/dir in cardinal) - var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0) - for(var/obj/machinery/atmospherics/pipe in T) - if(dir & pipe.initialize_directions) - for(var/connect_type in pipe.connect_types) - connect_types[connect_type] += 1 - if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1) - to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])") - continue next_turf - to_chat(usr, "Done") - -/client/proc/powerdebug() - set category = "Mapping" - set name = "Check Power" - if(!src.holder) - return - - feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - for (var/datum/powernet/PN in powernets) - if (!PN.nodes || !PN.nodes.len) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") - - if (!PN.cables || (PN.cables.len < 10)) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] +/client/proc/atmosscan() + set category = "Mapping" + set name = "Check Piping" + set background = 1 + if(!src.holder) + return + + feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + if(tgui_alert(usr, "WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", list("No", "Yes")) == "No") + return + + to_chat(usr, "Checking for disconnected pipes...") + //all plumbing - yes, some things might get stated twice, doesn't matter. + for (var/obj/machinery/atmospherics/plumbing in machines) + if (plumbing.nodealert) + to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") + + //Manifolds + for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines) + if (!pipe.node1 || !pipe.node2 || !pipe.node3) + to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") + + //Pipes + for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines) + if (!pipe.node1 || !pipe.node2) + to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") + + to_chat(usr, "Checking for overlapping pipes...") + next_turf: + for(var/turf/T in world) + for(var/dir in cardinal) + var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0) + for(var/obj/machinery/atmospherics/pipe in T) + if(dir & pipe.initialize_directions) + for(var/connect_type in pipe.connect_types) + connect_types[connect_type] += 1 + if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1) + to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])") + continue next_turf + to_chat(usr, "Done") + +/client/proc/powerdebug() + set category = "Mapping" + set name = "Check Power" + if(!src.holder) + return + + feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + for (var/datum/powernet/PN in powernets) + if (!PN.nodes || !PN.nodes.len) + if(PN.cables && (PN.cables.len > 1)) + var/obj/structure/cable/C = PN.cables[1] + to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") + + if (!PN.cables || (PN.cables.len < 10)) + if(PN.cables && (PN.cables.len > 1)) + var/obj/structure/cable/C = PN.cables[1] to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") \ No newline at end of file diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 8eea2984bc..f7ae37e011 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -1,846 +1,846 @@ -#define BUILDMODE_BASIC 1 -#define BUILDMODE_ADVANCED 2 -#define BUILDMODE_EDIT 3 -#define BUILDMODE_THROW 4 -#define BUILDMODE_ROOM 5 -#define BUILDMODE_LADDER 6 -#define BUILDMODE_CONTENTS 7 -#define BUILDMODE_LIGHTS 8 -#define BUILDMODE_AI 9 - -#define LAST_BUILDMODE 9 - -/proc/togglebuildmode(mob/M as mob in player_list) - set name = "Toggle Build Mode" - set category = "Special Verbs" - if(M.client) - if(M.client.buildmode) - log_admin("[key_name(usr)] has left build mode.") - M.client.buildmode = 0 - M.client.show_popup_menus = 1 - M.plane_holder.set_vis(VIS_BUILDMODE, FALSE) - for(var/obj/effect/bmode/buildholder/H) - if(H.cl == M.client) - qdel(H) - else - log_admin("[key_name(usr)] has entered build mode.") - M.client.buildmode = 1 - M.client.show_popup_menus = 0 - M.plane_holder.set_vis(VIS_BUILDMODE, TRUE) - - var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder() - var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H) - A.master = H - var/obj/effect/bmode/buildhelp/B = new/obj/effect/bmode/buildhelp(H) - B.master = H - var/obj/effect/bmode/buildmode/C = new/obj/effect/bmode/buildmode(H) - C.master = H - var/obj/effect/bmode/buildquit/D = new/obj/effect/bmode/buildquit(H) - D.master = H - - H.builddir = A - H.buildhelp = B - H.buildmode = C - H.buildquit = D - M.client.screen += A - M.client.screen += B - M.client.screen += C - M.client.screen += D - H.cl = M.client - -/obj/effect/bmode//Cleaning up the tree a bit - density = TRUE - anchored = TRUE - layer = LAYER_HUD_BASE - plane = PLANE_PLAYER_HUD - dir = NORTH - icon = 'icons/misc/buildmode.dmi' - var/obj/effect/bmode/buildholder/master = null - -/obj/effect/bmode/Destroy() - if(master && master.cl) - master.cl.screen -= src - master = null - return ..() - -/obj/effect/bmode/builddir - icon_state = "build" - screen_loc = "NORTH,WEST" - -/obj/effect/bmode/builddir/Click() - switch(dir) - if(NORTH) - set_dir(EAST) - if(EAST) - set_dir(SOUTH) - if(SOUTH) - set_dir(WEST) - if(WEST) - set_dir(NORTHWEST) - if(NORTHWEST) - set_dir(NORTH) - return 1 - -/obj/effect/bmode/buildhelp - icon = 'icons/misc/buildmode.dmi' - icon_state = "buildhelp" - screen_loc = "NORTH,WEST+1" - -/obj/effect/bmode/buildhelp/Click() - switch(master.cl.buildmode) - - if(BUILDMODE_BASIC) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button = Construct / Upgrade
                    \ - Right Mouse Button = Deconstruct / Delete / Downgrade
                    \ - Left Mouse Button + ctrl = R-Window
                    \ - Left Mouse Button + alt = Airlock

                    \ - Use the button in the upper left corner to
                    \ - change the direction of built objects.
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_ADVANCED) - to_chat(usr, "***********************************************************
                    \ - Right Mouse Button on buildmode button = Set object type
                    \ - Middle Mouse Button on buildmode button= On/Off object type saying
                    \ - Middle Mouse Button on turf/obj = Capture object type
                    \ - Left Mouse Button on turf/obj = Place objects
                    \ - Right Mouse Button = Delete objects
                    \ - Mouse Button + ctrl = Copy object type

                    \ - Use the button in the upper left corner to
                    \ - change the direction of built objects.
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_EDIT) - to_chat(usr, "***********************************************************
                    \ - Right Mouse Button on buildmode button = Select var(type) & value
                    \ - Left Mouse Button on turf/obj/mob = Set var(type) & value
                    \ - Right Mouse Button on turf/obj/mob = Reset var's value
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_THROW) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button on turf/obj/mob = Select
                    \ - Right Mouse Button on turf/obj/mob = Throw
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_ROOM) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button on turf = Select as point A
                    \ - Right Mouse Button on turf = Select as point B
                    \ - Right Mouse Button on buildmode button = Change floor/wall type/area name
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_LADDER) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button on turf = Set as upper ladder loc
                    \ - Right Mouse Button on turf = Set as lower ladder loc
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_CONTENTS) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button on turf/obj/mob = Select
                    \ - Right Mouse Button on turf/obj/mob = Move into selection
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_LIGHTS) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button on turf/obj/mob = Make it glow
                    \ - Right Mouse Button on turf/obj/mob = Reset glowing
                    \ - Right Mouse Button on buildmode button = Change glow properties
                    \ - ***********************************************************
                    ") - - if(BUILDMODE_AI) - to_chat(usr, "***********************************************************
                    \ - Left Mouse Button drag box = Select only mobs in box
                    \ - Left Mouse Button drag box + shift = Select additional mobs in area
                    \ - Left Mouse Button on non-mob = Deselect all mobs
                    \ - Left Mouse Button on AI mob = Select/Deselect mob
                    \ - Left Mouse Button + alt on AI mob = Toggle hostility on mob
                    \ - Left Mouse Button + shift on AI mob = Toggle AI (also resets)
                    \ - Left Mouse Button + ctrl on AI mob = Copy mob faction
                    \ - Middle Mouse Button + alt on any atom = Add atom to entity narrate menu
                    \ - Middle Mouse Button + shift on any = Set selected mob(s) to wander
                    \ - Middle Mouse Button + ctrl on any = Set selected mob(s) to NOT wander
                    \ - Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift
                    \ - Right Mouse Button on enemy mob = Command selected mobs to attack mob
                    \ - Right Mouse Button on allied mob = Command selected mobs to follow mob
                    \ - Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction
                    \ - Note: The following also reset the mob's home position:
                    \ - Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)
                    \ - Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be interrupted by enemies)
                    \ - Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf
                    \ - ***********************************************************
                    ") - return 1 - -/obj/effect/bmode/buildquit - icon_state = "buildquit" - screen_loc = "NORTH,WEST+3" - -/obj/effect/bmode/buildquit/Click() - togglebuildmode(master.cl.mob) - return 1 - -/obj/effect/bmode/buildholder - density = FALSE - anchored = TRUE - var/client/cl = null - var/obj/effect/bmode/builddir/builddir = null - var/obj/effect/bmode/buildhelp/buildhelp = null - var/obj/effect/bmode/buildmode/buildmode = null - var/obj/effect/bmode/buildquit/buildquit = null - var/atom/movable/throw_atom = null - var/list/selected_mobs = list() - var/copied_faction = null - var/warned = 0 - -/obj/effect/bmode/buildholder/Destroy() - qdel(builddir) - builddir = null - qdel(buildhelp) - buildhelp = null - qdel(buildmode) - buildmode = null - qdel(buildquit) - buildquit = null - throw_atom = null - for(var/mob/living/unit in selected_mobs) - deselect_AI_mob(cl, unit) - selected_mobs.Cut() - cl = null - return ..() - -/obj/effect/bmode/buildholder/proc/select_AI_mob(client/C, mob/living/unit) - selected_mobs += unit - C.images += unit.selected_image - -/obj/effect/bmode/buildholder/proc/deselect_AI_mob(client/C, mob/living/unit) - selected_mobs -= unit - C.images -= unit.selected_image - -/obj/effect/bmode/buildmode - icon_state = "buildmode1" - screen_loc = "NORTH,WEST+2" - var/varholder = "name" - var/valueholder = "derp" - var/objholder = null - var/objsay = 1 - - var/wall_holder = /turf/simulated/wall - var/floor_holder = /turf/simulated/floor/plating - var/turf/coordA = null - var/turf/coordB = null - var/area_enabled = 0 - var/area_name = "New Area" - - var/new_light_color = "#FFFFFF" - var/new_light_range = 3 - var/new_light_intensity = 3 - -/obj/effect/bmode/buildmode/Click(location, control, params) - var/list/pa = params2list(params) - - if(pa.Find("middle")) - switch(master.cl.buildmode) - if(BUILDMODE_ADVANCED) - objsay=!objsay - - if(pa.Find("left")) - if(master.cl.buildmode == LAST_BUILDMODE) - master.cl.buildmode = 1 - else - master.cl.buildmode++ - src.icon_state = "buildmode[master.cl.buildmode]" - - else if(pa.Find("right")) - switch(master.cl.buildmode) - if(BUILDMODE_BASIC) - - return 1 - if(BUILDMODE_ADVANCED) - objholder = get_path_from_partial_text() - - if(BUILDMODE_EDIT) - var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") - - master.buildmode.varholder = tgui_input_text(usr,"Enter variable name:" ,"Name", "name") - if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0)) - return 1 - var/thetype = tgui_input_list(usr,"Select variable type:", "Type", list("text","number","mob-reference","obj-reference","turf-reference")) - if(!thetype) return 1 - switch(thetype) - if("text") - master.buildmode.valueholder = tgui_input_text(usr,"Enter variable value:" ,"Value", "value") - if("number") - master.buildmode.valueholder = tgui_input_number(usr,"Enter variable value:" ,"Value", 123) - if("mob-reference") - master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", mob_list) - if("obj-reference") - master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", world) - if("turf-reference") - master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", world) - - if(BUILDMODE_ROOM) - var/area_choice = tgui_alert(usr, "Would you like to generate a new area as well?","Room Builder", list("No", "Yes")) - switch(area_choice) - if("No") - area_enabled = 0 - if("Yes") - area_enabled = 1 - area_name = tgui_input_text(usr, "New area name", "Room Buildmode", max_length = MAX_NAME_LEN) - if(isnull(area_name)) - to_chat(usr, "You must enter a non-null name.") - area_enabled = 0 - return - area_name = sanitize(area_name,MAX_NAME_LEN) - var/choice = tgui_alert(usr, "Would you like to change the floor or wall holders?","Room Builder", list("Floor", "Wall")) - switch(choice) - if("Floor") - floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating) - if("Wall") - wall_holder = get_path_from_partial_text(/turf/simulated/wall) - - if(BUILDMODE_LIGHTS) - var/choice = tgui_alert(usr, "Change the new light range, power, or color?", "Light Maker", list("Range", "Power", "Color")) - switch(choice) - if("Range") - var/input = tgui_input_number(usr, "New light range.","Light Maker",3) - if(input) - new_light_range = input - if("Power") - var/input = tgui_input_number(usr, "New light power.","Light Maker",3) - if(input) - new_light_intensity = input - if("Color") - var/input = input(usr, "New light color.","Light Maker",3) as null|color - if(input) - new_light_color = input - return 1 - -/proc/build_click(var/mob/user, buildmode, params, var/obj/object) - var/obj/effect/bmode/buildholder/holder = null - for(var/obj/effect/bmode/buildholder/H) - if(H.cl == user.client) - holder = H - break - if(!holder) return - var/list/pa = params2list(params) - - switch(buildmode) - if(BUILDMODE_BASIC) - if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") ) - if(istype(object,/turf/space)) - var/turf/T = object - T.ChangeTurf(/turf/simulated/floor) - return - else if(istype(object,/turf/simulated/floor)) - var/turf/T = object - T.ChangeTurf(/turf/simulated/wall) - return - else if(istype(object,/turf/simulated/wall)) - var/turf/T = object - T.ChangeTurf(/turf/simulated/wall/r_wall) - return - else if(pa.Find("right")) - if(istype(object,/turf/simulated/wall)) - var/turf/T = object - T.ChangeTurf(/turf/simulated/floor) - return - else if(istype(object,/turf/simulated/floor)) - var/turf/T = object - if(!holder.warned) - var/warning = tgui_alert(user, "Are you -sure- you want to delete this turf and make it the base turf for this Z level?", "GRIEF ALERT", list("No", "Yes")) - if(warning == "Yes") - holder.warned = 1 - else - return - T.ChangeTurf(get_base_turf_by_area(T)) //Defaults to Z if area does not have a special base turf. - return - else if(istype(object,/turf/simulated/wall/r_wall)) - var/turf/T = object - T.ChangeTurf(/turf/simulated/wall) - return - else if(istype(object,/obj)) - qdel(object) - return - else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left")) - new/obj/machinery/door/airlock(get_turf(object)) - else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("left")) - switch(holder.builddir.dir) - if(NORTH) - var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.set_dir(NORTH) - if(SOUTH) - var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.set_dir(SOUTH) - if(EAST) - var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.set_dir(EAST) - if(WEST) - var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.set_dir(WEST) - if(NORTHWEST) - var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.set_dir(NORTHWEST) -/*CHOMP Remove start self-insert - else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("alt") && pa.Find("middle")) - var/turf/T = object - var/obj/item/toy/plushie/teshari/easter_egg = new /obj/item/toy/plushie/teshari(T) - easter_egg.name = "coding teshari plushie" - easter_egg.desc = "A small purple teshari with a plush keyboard attached to it. Where did this come from?" - easter_egg.color = "#a418c7" -CHOMP Remove end */ - - if(BUILDMODE_ADVANCED) - if(pa.Find("left") && !pa.Find("ctrl")) - if(ispath(holder.buildmode.objholder,/turf)) - var/turf/T = get_turf(object) - T.ChangeTurf(holder.buildmode.objholder) - else if(ispath(holder.buildmode.objholder)) - var/obj/A = new holder.buildmode.objholder (get_turf(object)) - A.set_dir(holder.builddir.dir) - else if(pa.Find("right")) - if(isobj(object)) - qdel(object) - else if(pa.Find("ctrl")) - holder.buildmode.objholder = object.type - to_chat(user, "[object]([object.type]) copied to buildmode.") - if(pa.Find("middle")) - holder.buildmode.objholder = text2path("[object.type]") - if(holder.buildmode.objsay) - to_chat(usr, "[object.type]") - - if(BUILDMODE_EDIT) - if(pa.Find("left")) //I cant believe this shit actually compiles. - if(object.vars.Find(holder.buildmode.varholder)) - log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") - object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder - else - to_chat(user, "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'") - if(pa.Find("right")) - if(object.vars.Find(holder.buildmode.varholder)) - log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") - object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder]) - else - to_chat(user, "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'") - - if(BUILDMODE_THROW) - if(pa.Find("left")) - if(istype(object, /atom/movable)) - holder.throw_atom = object - if(pa.Find("right")) - if(holder.throw_atom) - holder.throw_atom.throw_at(object, 10, 1) - log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]") - - if(BUILDMODE_ROOM) - if(pa.Find("left")) - holder.buildmode.coordA = get_turf(object) - to_chat(user, "Defined [object] ([object.type]) as point A.") - - if(pa.Find("right")) - holder.buildmode.coordB = get_turf(object) - to_chat(user, "Defined [object] ([object.type]) as point B.") - - if(holder.buildmode.coordA && holder.buildmode.coordB) - if(isnull(holder.buildmode.area_name)) - to_chat(user, "ERROR: Insert area name before use.") - holder.buildmode.coordA = null - holder.buildmode.coordB = null - return - to_chat(user, "A and B set, creating rectangle.") - holder.buildmode.make_rectangle( - holder.buildmode.coordA, - holder.buildmode.coordB, - holder.buildmode.wall_holder, - holder.buildmode.floor_holder, - holder.buildmode.area_enabled, - holder.buildmode.area_name) - holder.buildmode.coordA = null - holder.buildmode.coordB = null - - if(BUILDMODE_LADDER) - if(pa.Find("left")) - holder.buildmode.coordA = get_turf(object) - to_chat(user, "Defined [object] ([object.type]) as upper ladder location.") - - if(pa.Find("right")) - holder.buildmode.coordB = get_turf(object) - to_chat(user, "Defined [object] ([object.type]) as lower ladder location.") - - if(holder.buildmode.coordA && holder.buildmode.coordB) - to_chat(user, "Ladder locations set, building ladders.") - var/obj/structure/ladder/A = new /obj/structure/ladder/up(holder.buildmode.coordA) - var/obj/structure/ladder/B = new /obj/structure/ladder(holder.buildmode.coordB) - A.target_up = B - B.target_down = A - A.update_icon() - B.update_icon() - holder.buildmode.coordA = null - holder.buildmode.coordB = null - - if(BUILDMODE_CONTENTS) - if(pa.Find("left")) - if(istype(object, /atom)) - holder.throw_atom = object - if(pa.Find("right")) - if(holder.throw_atom && istype(object, /atom/movable)) - object.forceMove(holder.throw_atom) - log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].") - - if(BUILDMODE_LIGHTS) - if(pa.Find("left")) - if(object) - object.set_light(holder.buildmode.new_light_range, holder.buildmode.new_light_intensity, holder.buildmode.new_light_color) - if(pa.Find("right")) - if(object) - object.set_light(0, 0, "#FFFFFF") - - if(BUILDMODE_AI) - if(pa.Find("left")) - if(isliving(object)) - var/mob/living/L = object - - // Pause/unpause AI - if(pa.Find("shift")) - var/stance = L.get_AI_stance() - if(!isnull(stance)) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on. - var/datum/ai_holder/AI = L.ai_holder - if(stance == STANCE_SLEEP) - AI.go_wake() - to_chat(user, span("notice", "\The [L]'s AI has been enabled.")) - else - AI.go_sleep() - to_chat(user, span("notice", "\The [L]'s AI has been disabled.")) - return - else - to_chat(user, span("warning", "\The [L] is not AI controlled.")) - return - - // Toggle hostility - if(pa.Find("alt")) - if(!isnull(L.get_AI_stance())) - var/datum/ai_holder/AI = L.ai_holder - AI.hostile = !AI.hostile - to_chat(user, span("notice", "\The [L] is now [AI.hostile ? "hostile" : "passive"].")) - else - to_chat(user, span("warning", "\The [L] is not AI controlled.")) - return - - // Copy faction - if(pa.Find("ctrl")) - holder.copied_faction = L.faction - to_chat(user, span("notice", "Copied faction '[holder.copied_faction]'.")) - return - - // Select/Deselect - if(!isnull(L.get_AI_stance())) - if(L in holder.selected_mobs) - holder.deselect_AI_mob(user.client, L) - to_chat(user, span("notice", "Deselected \the [L].")) - else - holder.select_AI_mob(user.client, L) - to_chat(user, span("notice", "Selected \the [L].")) - return - else - to_chat(user, span("warning", "\The [L] is not AI controlled.")) - return - else //Not living - for(var/mob/living/unit in holder.selected_mobs) - holder.deselect_AI_mob(user.client, unit) - - if(pa.Find("middle")) - if(pa.Find("shift")) - to_chat(user, SPAN_NOTICE("All selected mobs set to wander")) - for(var/mob/living/unit in holder.selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.wander = TRUE - if(pa.Find("ctrl")) - to_chat(user, SPAN_NOTICE("Setting mobs set to NOT wander")) - for(var/mob/living/unit in holder.selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.wander = FALSE - if(pa.Find("alt") && isatom(object)) - to_chat(user, SPAN_NOTICE("Adding [object] to Entity Narrate List!")) - user.client.add_mob_for_narration(object) - - - if(pa.Find("right")) - // Paste faction - if(pa.Find("ctrl") && isliving(object)) - if(!holder.copied_faction) - to_chat(user, span("warning", "LMB+Shift a mob to copy their faction before pasting.")) - return - else - var/mob/living/L = object - L.faction = holder.copied_faction - to_chat(user, span("notice", "Pasted faction '[holder.copied_faction]'.")) - return - - if(istype(object, /atom)) // Force attack. - var/atom/A = object - - if(pa.Find("alt")) - var/i = 0 - for(var/mob/living/unit in holder.selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.give_target(A) - i++ - to_chat(user, span("notice", "Commanded [i] mob\s to attack \the [A].")) - var/image/orderimage = image(buildmode_hud,A,"ai_targetorder") - orderimage.plane = PLANE_BUILDMODE - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - - if(isliving(object)) // Follow or attack. - var/mob/living/L = object - var/i = 0 // Attacking mobs. - var/j = 0 // Following mobs. - for(var/mob/living/unit in holder.selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - if(L.IIsAlly(unit) || !AI.hostile || pa.Find("shift")) - AI.set_follow(L) - j++ - else - AI.give_target(L) - i++ - var/message = "Commanded " - if(i) - message += "[i] mob\s to attack \the [L]" - if(j) - message += ", and " - else - message += "." - if(j) - message += "[j] mob\s to follow \the [L]." - to_chat(user, span("notice", message)) - var/image/orderimage = image(buildmode_hud,L,"ai_targetorder") - orderimage.plane = PLANE_BUILDMODE - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - - if(isturf(object)) // Move or reposition. - var/turf/T = object - var/forced = 0 - var/told = 0 - for(var/mob/living/unit in holder.selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.home_turf = T - if(unit.get_AI_stance() == STANCE_SLEEP) - unit.forceMove(T) - forced++ - else - AI.give_destination(T, 1, pa.Find("shift")) // If shift is held, the mobs will not stop moving to attack a visible enemy. - told++ - to_chat(user, span("notice", "Commanded [told] mob\s to move to \the [T], and manually placed [forced] of them.")) - var/image/orderimage = image(buildmode_hud,T,"ai_turforder") - orderimage.plane = PLANE_BUILDMODE - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - -/proc/build_drag(var/client/user, buildmode, var/atom/fromatom, var/atom/toatom, var/atom/fromloc, var/atom/toloc, var/fromcontrol, var/tocontrol, params) - var/obj/effect/bmode/buildholder/holder = null - for(var/obj/effect/bmode/buildholder/H) - if(H.cl == user) - holder = H - break - if(!holder) return - var/list/pa = params2list(params) - - switch(buildmode) - if(BUILDMODE_AI) - - //Holding shift prevents the deselection of existing - if(!pa.Find("shift")) - for(var/mob/living/unit in holder.selected_mobs) - holder.deselect_AI_mob(user, unit) - - var/turf/c1 = get_turf(fromatom) - var/turf/c2 = get_turf(toatom) - if(!c1 || !c2) - return //Dragged outside window or something - - var/low_x = min(c1.x,c2.x) - var/low_y = min(c1.y,c2.y) - var/hi_x = max(c1.x,c2.x) - var/hi_y = max(c1.y,c2.y) - var/z = c1.z //Eh - - var/i = 0 - for(var/mob/living/L in living_mob_list) - if(L.z != z || L.client) - continue - if(L.x >= low_x && L.x <= hi_x && L.y >= low_y && L.y <= hi_y) - holder.select_AI_mob(user, L) - i++ - - to_chat(user, span("notice", "Band-selected [i] mobs.")) - return - -/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) - var/desired_path = tgui_input_text(usr, "Enter full or partial typepath.","Typepath","[default_path]") - - if(!desired_path) //VOREStation Add - If you don't give it anything it builds a list of every possible thing in the game and crashes your client. - return //VOREStation Add - And the main way for it to do that is to push the cancel button, which should just do nothing. :U - - var/list/types = typesof(/atom) - var/list/matches = list() - - for(var/path in types) - if(findtext("[path]", desired_path)) - matches += path - - if(matches.len==0) - tgui_alert_async(usr, "No results found. Sorry.") - return - - var/result = null - - if(matches.len==1) - result = matches[1] - else - result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches, strict_modern = TRUE) - return result - -/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type, var/area_enabled, var/area_name) - if(!A || !B) // No coords - return - if(A.z != B.z) // Not same z-level - return - - var/height = A.y - B.y - var/width = A.x - B.x - var/z_level = A.z - - var/turf/lower_left_corner = null - // First, try to find the lowest part - var/desired_y = 0 - if(A.y <= B.y) - desired_y = A.y - else - desired_y = B.y - - //Now for the left-most part. - var/desired_x = 0 - if(A.x <= B.x) - desired_x = A.x - else - desired_x = B.x - - lower_left_corner = locate(desired_x, desired_y, z_level) - - // Now we can begin building the actual room. This defines the boundries for the room. - var/low_bound_x = lower_left_corner.x - var/low_bound_y = lower_left_corner.y - - var/high_bound_x = lower_left_corner.x + abs(width) - var/high_bound_y = lower_left_corner.y + abs(height) - - var/origin_x = lower_left_corner.x + round((abs(width)/2)) - var/origin_y = lower_left_corner.y + round((abs(height)/2)) - var/turf/origin - - for(var/i = low_bound_x, i <= high_bound_x, i++) - for(var/j = low_bound_y, j <= high_bound_y, j++) - var/turf/T = locate(i, j, z_level) - if(i == low_bound_x || i == high_bound_x || j == low_bound_y || j == high_bound_y) - if(isturf(wall_type)) - T.ChangeTurf(wall_type) - else - new wall_type(T) - - else - if(T.x == origin_x && T.y == origin_y) //Get the middle of the square. - origin = T - if(isturf(floor_type)) - T.ChangeTurf(floor_type) - else - new floor_type(T) - if(area_enabled) //Let's try not to make a new area unless you got walls and a floor. - create_buildmode_area(area_name, origin) //Generates a new area. - -/proc/create_buildmode_area(var/area_name, var/turf/origin) - var/turfs = detect_room_buildmode(origin) - - var/area/newA - var/area/oldA = get_area(origin) - var/str = area_name - str = sanitize(str,MAX_NAME_LEN) - if(!str || !length(str)) //cancel - return - newA = new /area/buildmode - newA.dynamic_lighting = FALSE // Without this it's pitch black if you build anywhere but space. - newA.luminosity = TRUE // Without this it's pitch black if you build anywhere but space. - newA.setup(str) - newA.has_gravity = oldA.has_gravity - - for(var/i in 1 to length(turfs)) //Fix lighting. Praise the lord. - var/turf/thing = turfs[i] - newA.contents += thing - thing.change_area(oldA, newA) - - set_area_machinery(newA, newA.name, oldA.name)// Change the name and area defines of all the machinery to the correct area. - oldA.power_check() //Simply makes the area turn the power off if you nicked an APC from it. - return TRUE - -/proc/detect_room_buildmode(var/turf/first, var/allowedAreas = AREA_SPACE) - if(!istype(first)) - return - var/list/turf/found = new - var/list/turf/pending = list(first) - while(pending.len) - var/turf/T = pending[1] - pending -= T - for (var/dir in cardinal) - var/turf/NT = get_step(T,dir) - if (!isturf(NT) || (NT in found) || (NT in pending)) - continue - // We ask ZAS to determine if its airtight. Thats what matters anyway right? - if(air_master.air_blocked(T, NT)) - // Okay thats the edge of the room - if(get_area_type_buildmode(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT)) - found += NT // So we include walls/doors not already in any area - continue - if (istype(NT, /turf/space)) - return //omg hull breach we all going to die here - if (istype(NT, /turf/simulated/shuttle)) - return // Unsure why this, but was in old code. Trusting for now. - if (NT.loc != first.loc && !(get_area_type_buildmode(NT.loc) & allowedAreas)) - // Edge of a protected area. Lets stop here... - continue - if (!istype(NT, /turf/simulated)) - // Great, unsimulated... eh, just stop searching here - continue - // Okay, NT looks promising, lets continue the search there! - pending += NT - found += T - // end while - return found - -/proc/get_area_type_buildmode(area/A) - if(A.outdoors) - return AREA_SPACE - - for (var/type in BUILDABLE_AREA_TYPES) - if ( istype(A,type) ) - return AREA_SPACE - - for (var/type in SPECIALS) - if ( istype(A,type) ) - return AREA_SPECIAL - return AREA_STATION - -/area/buildmode - dynamic_lighting = FALSE - luminosity = FALSE - -#undef BUILDMODE_BASIC -#undef BUILDMODE_ADVANCED -#undef BUILDMODE_EDIT -#undef BUILDMODE_THROW -#undef BUILDMODE_ROOM -#undef BUILDMODE_LADDER -#undef BUILDMODE_CONTENTS -#undef BUILDMODE_LIGHTS -#undef BUILDMODE_AI -#undef LAST_BUILDMODE +#define BUILDMODE_BASIC 1 +#define BUILDMODE_ADVANCED 2 +#define BUILDMODE_EDIT 3 +#define BUILDMODE_THROW 4 +#define BUILDMODE_ROOM 5 +#define BUILDMODE_LADDER 6 +#define BUILDMODE_CONTENTS 7 +#define BUILDMODE_LIGHTS 8 +#define BUILDMODE_AI 9 + +#define LAST_BUILDMODE 9 + +/proc/togglebuildmode(mob/M as mob in player_list) + set name = "Toggle Build Mode" + set category = "Special Verbs" + if(M.client) + if(M.client.buildmode) + log_admin("[key_name(usr)] has left build mode.") + M.client.buildmode = 0 + M.client.show_popup_menus = 1 + M.plane_holder.set_vis(VIS_BUILDMODE, FALSE) + for(var/obj/effect/bmode/buildholder/H) + if(H.cl == M.client) + qdel(H) + else + log_admin("[key_name(usr)] has entered build mode.") + M.client.buildmode = 1 + M.client.show_popup_menus = 0 + M.plane_holder.set_vis(VIS_BUILDMODE, TRUE) + + var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder() + var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H) + A.master = H + var/obj/effect/bmode/buildhelp/B = new/obj/effect/bmode/buildhelp(H) + B.master = H + var/obj/effect/bmode/buildmode/C = new/obj/effect/bmode/buildmode(H) + C.master = H + var/obj/effect/bmode/buildquit/D = new/obj/effect/bmode/buildquit(H) + D.master = H + + H.builddir = A + H.buildhelp = B + H.buildmode = C + H.buildquit = D + M.client.screen += A + M.client.screen += B + M.client.screen += C + M.client.screen += D + H.cl = M.client + +/obj/effect/bmode//Cleaning up the tree a bit + density = TRUE + anchored = TRUE + layer = LAYER_HUD_BASE + plane = PLANE_PLAYER_HUD + dir = NORTH + icon = 'icons/misc/buildmode.dmi' + var/obj/effect/bmode/buildholder/master = null + +/obj/effect/bmode/Destroy() + if(master && master.cl) + master.cl.screen -= src + master = null + return ..() + +/obj/effect/bmode/builddir + icon_state = "build" + screen_loc = "NORTH,WEST" + +/obj/effect/bmode/builddir/Click() + switch(dir) + if(NORTH) + set_dir(EAST) + if(EAST) + set_dir(SOUTH) + if(SOUTH) + set_dir(WEST) + if(WEST) + set_dir(NORTHWEST) + if(NORTHWEST) + set_dir(NORTH) + return 1 + +/obj/effect/bmode/buildhelp + icon = 'icons/misc/buildmode.dmi' + icon_state = "buildhelp" + screen_loc = "NORTH,WEST+1" + +/obj/effect/bmode/buildhelp/Click() + switch(master.cl.buildmode) + + if(BUILDMODE_BASIC) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button = Construct / Upgrade
                    \ + Right Mouse Button = Deconstruct / Delete / Downgrade
                    \ + Left Mouse Button + ctrl = R-Window
                    \ + Left Mouse Button + alt = Airlock

                    \ + Use the button in the upper left corner to
                    \ + change the direction of built objects.
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_ADVANCED) + to_chat(usr, "***********************************************************
                    \ + Right Mouse Button on buildmode button = Set object type
                    \ + Middle Mouse Button on buildmode button= On/Off object type saying
                    \ + Middle Mouse Button on turf/obj = Capture object type
                    \ + Left Mouse Button on turf/obj = Place objects
                    \ + Right Mouse Button = Delete objects
                    \ + Mouse Button + ctrl = Copy object type

                    \ + Use the button in the upper left corner to
                    \ + change the direction of built objects.
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_EDIT) + to_chat(usr, "***********************************************************
                    \ + Right Mouse Button on buildmode button = Select var(type) & value
                    \ + Left Mouse Button on turf/obj/mob = Set var(type) & value
                    \ + Right Mouse Button on turf/obj/mob = Reset var's value
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_THROW) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button on turf/obj/mob = Select
                    \ + Right Mouse Button on turf/obj/mob = Throw
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_ROOM) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button on turf = Select as point A
                    \ + Right Mouse Button on turf = Select as point B
                    \ + Right Mouse Button on buildmode button = Change floor/wall type/area name
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_LADDER) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button on turf = Set as upper ladder loc
                    \ + Right Mouse Button on turf = Set as lower ladder loc
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_CONTENTS) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button on turf/obj/mob = Select
                    \ + Right Mouse Button on turf/obj/mob = Move into selection
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_LIGHTS) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button on turf/obj/mob = Make it glow
                    \ + Right Mouse Button on turf/obj/mob = Reset glowing
                    \ + Right Mouse Button on buildmode button = Change glow properties
                    \ + ***********************************************************
                    ") + + if(BUILDMODE_AI) + to_chat(usr, "***********************************************************
                    \ + Left Mouse Button drag box = Select only mobs in box
                    \ + Left Mouse Button drag box + shift = Select additional mobs in area
                    \ + Left Mouse Button on non-mob = Deselect all mobs
                    \ + Left Mouse Button on AI mob = Select/Deselect mob
                    \ + Left Mouse Button + alt on AI mob = Toggle hostility on mob
                    \ + Left Mouse Button + shift on AI mob = Toggle AI (also resets)
                    \ + Left Mouse Button + ctrl on AI mob = Copy mob faction
                    \ + Middle Mouse Button + alt on any atom = Add atom to entity narrate menu
                    \ + Middle Mouse Button + shift on any = Set selected mob(s) to wander
                    \ + Middle Mouse Button + ctrl on any = Set selected mob(s) to NOT wander
                    \ + Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift
                    \ + Right Mouse Button on enemy mob = Command selected mobs to attack mob
                    \ + Right Mouse Button on allied mob = Command selected mobs to follow mob
                    \ + Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction
                    \ + Note: The following also reset the mob's home position:
                    \ + Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)
                    \ + Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be interrupted by enemies)
                    \ + Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf
                    \ + ***********************************************************
                    ") + return 1 + +/obj/effect/bmode/buildquit + icon_state = "buildquit" + screen_loc = "NORTH,WEST+3" + +/obj/effect/bmode/buildquit/Click() + togglebuildmode(master.cl.mob) + return 1 + +/obj/effect/bmode/buildholder + density = FALSE + anchored = TRUE + var/client/cl = null + var/obj/effect/bmode/builddir/builddir = null + var/obj/effect/bmode/buildhelp/buildhelp = null + var/obj/effect/bmode/buildmode/buildmode = null + var/obj/effect/bmode/buildquit/buildquit = null + var/atom/movable/throw_atom = null + var/list/selected_mobs = list() + var/copied_faction = null + var/warned = 0 + +/obj/effect/bmode/buildholder/Destroy() + qdel(builddir) + builddir = null + qdel(buildhelp) + buildhelp = null + qdel(buildmode) + buildmode = null + qdel(buildquit) + buildquit = null + throw_atom = null + for(var/mob/living/unit in selected_mobs) + deselect_AI_mob(cl, unit) + selected_mobs.Cut() + cl = null + return ..() + +/obj/effect/bmode/buildholder/proc/select_AI_mob(client/C, mob/living/unit) + selected_mobs += unit + C.images += unit.selected_image + +/obj/effect/bmode/buildholder/proc/deselect_AI_mob(client/C, mob/living/unit) + selected_mobs -= unit + C.images -= unit.selected_image + +/obj/effect/bmode/buildmode + icon_state = "buildmode1" + screen_loc = "NORTH,WEST+2" + var/varholder = "name" + var/valueholder = "derp" + var/objholder = null + var/objsay = 1 + + var/wall_holder = /turf/simulated/wall + var/floor_holder = /turf/simulated/floor/plating + var/turf/coordA = null + var/turf/coordB = null + var/area_enabled = 0 + var/area_name = "New Area" + + var/new_light_color = "#FFFFFF" + var/new_light_range = 3 + var/new_light_intensity = 3 + +/obj/effect/bmode/buildmode/Click(location, control, params) + var/list/pa = params2list(params) + + if(pa.Find("middle")) + switch(master.cl.buildmode) + if(BUILDMODE_ADVANCED) + objsay=!objsay + + if(pa.Find("left")) + if(master.cl.buildmode == LAST_BUILDMODE) + master.cl.buildmode = 1 + else + master.cl.buildmode++ + src.icon_state = "buildmode[master.cl.buildmode]" + + else if(pa.Find("right")) + switch(master.cl.buildmode) + if(BUILDMODE_BASIC) + + return 1 + if(BUILDMODE_ADVANCED) + objholder = get_path_from_partial_text() + + if(BUILDMODE_EDIT) + var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") + + master.buildmode.varholder = tgui_input_text(usr,"Enter variable name:" ,"Name", "name") + if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0)) + return 1 + var/thetype = tgui_input_list(usr,"Select variable type:", "Type", list("text","number","mob-reference","obj-reference","turf-reference")) + if(!thetype) return 1 + switch(thetype) + if("text") + master.buildmode.valueholder = tgui_input_text(usr,"Enter variable value:" ,"Value", "value") + if("number") + master.buildmode.valueholder = tgui_input_number(usr,"Enter variable value:" ,"Value", 123) + if("mob-reference") + master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", mob_list) + if("obj-reference") + master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", world) + if("turf-reference") + master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", world) + + if(BUILDMODE_ROOM) + var/area_choice = tgui_alert(usr, "Would you like to generate a new area as well?","Room Builder", list("No", "Yes")) + switch(area_choice) + if("No") + area_enabled = 0 + if("Yes") + area_enabled = 1 + area_name = tgui_input_text(usr, "New area name", "Room Buildmode", max_length = MAX_NAME_LEN) + if(isnull(area_name)) + to_chat(usr, "You must enter a non-null name.") + area_enabled = 0 + return + area_name = sanitize(area_name,MAX_NAME_LEN) + var/choice = tgui_alert(usr, "Would you like to change the floor or wall holders?","Room Builder", list("Floor", "Wall")) + switch(choice) + if("Floor") + floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating) + if("Wall") + wall_holder = get_path_from_partial_text(/turf/simulated/wall) + + if(BUILDMODE_LIGHTS) + var/choice = tgui_alert(usr, "Change the new light range, power, or color?", "Light Maker", list("Range", "Power", "Color")) + switch(choice) + if("Range") + var/input = tgui_input_number(usr, "New light range.","Light Maker",3) + if(input) + new_light_range = input + if("Power") + var/input = tgui_input_number(usr, "New light power.","Light Maker",3) + if(input) + new_light_intensity = input + if("Color") + var/input = input(usr, "New light color.","Light Maker",3) as null|color + if(input) + new_light_color = input + return 1 + +/proc/build_click(var/mob/user, buildmode, params, var/obj/object) + var/obj/effect/bmode/buildholder/holder = null + for(var/obj/effect/bmode/buildholder/H) + if(H.cl == user.client) + holder = H + break + if(!holder) return + var/list/pa = params2list(params) + + switch(buildmode) + if(BUILDMODE_BASIC) + if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") ) + if(istype(object,/turf/space)) + var/turf/T = object + T.ChangeTurf(/turf/simulated/floor) + return + else if(istype(object,/turf/simulated/floor)) + var/turf/T = object + T.ChangeTurf(/turf/simulated/wall) + return + else if(istype(object,/turf/simulated/wall)) + var/turf/T = object + T.ChangeTurf(/turf/simulated/wall/r_wall) + return + else if(pa.Find("right")) + if(istype(object,/turf/simulated/wall)) + var/turf/T = object + T.ChangeTurf(/turf/simulated/floor) + return + else if(istype(object,/turf/simulated/floor)) + var/turf/T = object + if(!holder.warned) + var/warning = tgui_alert(user, "Are you -sure- you want to delete this turf and make it the base turf for this Z level?", "GRIEF ALERT", list("No", "Yes")) + if(warning == "Yes") + holder.warned = 1 + else + return + T.ChangeTurf(get_base_turf_by_area(T)) //Defaults to Z if area does not have a special base turf. + return + else if(istype(object,/turf/simulated/wall/r_wall)) + var/turf/T = object + T.ChangeTurf(/turf/simulated/wall) + return + else if(istype(object,/obj)) + qdel(object) + return + else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left")) + new/obj/machinery/door/airlock(get_turf(object)) + else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("left")) + switch(holder.builddir.dir) + if(NORTH) + var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) + WIN.set_dir(NORTH) + if(SOUTH) + var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) + WIN.set_dir(SOUTH) + if(EAST) + var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) + WIN.set_dir(EAST) + if(WEST) + var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) + WIN.set_dir(WEST) + if(NORTHWEST) + var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) + WIN.set_dir(NORTHWEST) +/*CHOMP Remove start self-insert + else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("alt") && pa.Find("middle")) + var/turf/T = object + var/obj/item/toy/plushie/teshari/easter_egg = new /obj/item/toy/plushie/teshari(T) + easter_egg.name = "coding teshari plushie" + easter_egg.desc = "A small purple teshari with a plush keyboard attached to it. Where did this come from?" + easter_egg.color = "#a418c7" +CHOMP Remove end */ + + if(BUILDMODE_ADVANCED) + if(pa.Find("left") && !pa.Find("ctrl")) + if(ispath(holder.buildmode.objholder,/turf)) + var/turf/T = get_turf(object) + T.ChangeTurf(holder.buildmode.objholder) + else if(ispath(holder.buildmode.objholder)) + var/obj/A = new holder.buildmode.objholder (get_turf(object)) + A.set_dir(holder.builddir.dir) + else if(pa.Find("right")) + if(isobj(object)) + qdel(object) + else if(pa.Find("ctrl")) + holder.buildmode.objholder = object.type + to_chat(user, "[object]([object.type]) copied to buildmode.") + if(pa.Find("middle")) + holder.buildmode.objholder = text2path("[object.type]") + if(holder.buildmode.objsay) + to_chat(usr, "[object.type]") + + if(BUILDMODE_EDIT) + if(pa.Find("left")) //I cant believe this shit actually compiles. + if(object.vars.Find(holder.buildmode.varholder)) + log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") + object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder + else + to_chat(user, "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'") + if(pa.Find("right")) + if(object.vars.Find(holder.buildmode.varholder)) + log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") + object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder]) + else + to_chat(user, "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'") + + if(BUILDMODE_THROW) + if(pa.Find("left")) + if(istype(object, /atom/movable)) + holder.throw_atom = object + if(pa.Find("right")) + if(holder.throw_atom) + holder.throw_atom.throw_at(object, 10, 1) + log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]") + + if(BUILDMODE_ROOM) + if(pa.Find("left")) + holder.buildmode.coordA = get_turf(object) + to_chat(user, "Defined [object] ([object.type]) as point A.") + + if(pa.Find("right")) + holder.buildmode.coordB = get_turf(object) + to_chat(user, "Defined [object] ([object.type]) as point B.") + + if(holder.buildmode.coordA && holder.buildmode.coordB) + if(isnull(holder.buildmode.area_name)) + to_chat(user, "ERROR: Insert area name before use.") + holder.buildmode.coordA = null + holder.buildmode.coordB = null + return + to_chat(user, "A and B set, creating rectangle.") + holder.buildmode.make_rectangle( + holder.buildmode.coordA, + holder.buildmode.coordB, + holder.buildmode.wall_holder, + holder.buildmode.floor_holder, + holder.buildmode.area_enabled, + holder.buildmode.area_name) + holder.buildmode.coordA = null + holder.buildmode.coordB = null + + if(BUILDMODE_LADDER) + if(pa.Find("left")) + holder.buildmode.coordA = get_turf(object) + to_chat(user, "Defined [object] ([object.type]) as upper ladder location.") + + if(pa.Find("right")) + holder.buildmode.coordB = get_turf(object) + to_chat(user, "Defined [object] ([object.type]) as lower ladder location.") + + if(holder.buildmode.coordA && holder.buildmode.coordB) + to_chat(user, "Ladder locations set, building ladders.") + var/obj/structure/ladder/A = new /obj/structure/ladder/up(holder.buildmode.coordA) + var/obj/structure/ladder/B = new /obj/structure/ladder(holder.buildmode.coordB) + A.target_up = B + B.target_down = A + A.update_icon() + B.update_icon() + holder.buildmode.coordA = null + holder.buildmode.coordB = null + + if(BUILDMODE_CONTENTS) + if(pa.Find("left")) + if(istype(object, /atom)) + holder.throw_atom = object + if(pa.Find("right")) + if(holder.throw_atom && istype(object, /atom/movable)) + object.forceMove(holder.throw_atom) + log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].") + + if(BUILDMODE_LIGHTS) + if(pa.Find("left")) + if(object) + object.set_light(holder.buildmode.new_light_range, holder.buildmode.new_light_intensity, holder.buildmode.new_light_color) + if(pa.Find("right")) + if(object) + object.set_light(0, 0, "#FFFFFF") + + if(BUILDMODE_AI) + if(pa.Find("left")) + if(isliving(object)) + var/mob/living/L = object + + // Pause/unpause AI + if(pa.Find("shift")) + var/stance = L.get_AI_stance() + if(!isnull(stance)) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on. + var/datum/ai_holder/AI = L.ai_holder + if(stance == STANCE_SLEEP) + AI.go_wake() + to_chat(user, span("notice", "\The [L]'s AI has been enabled.")) + else + AI.go_sleep() + to_chat(user, span("notice", "\The [L]'s AI has been disabled.")) + return + else + to_chat(user, span("warning", "\The [L] is not AI controlled.")) + return + + // Toggle hostility + if(pa.Find("alt")) + if(!isnull(L.get_AI_stance())) + var/datum/ai_holder/AI = L.ai_holder + AI.hostile = !AI.hostile + to_chat(user, span("notice", "\The [L] is now [AI.hostile ? "hostile" : "passive"].")) + else + to_chat(user, span("warning", "\The [L] is not AI controlled.")) + return + + // Copy faction + if(pa.Find("ctrl")) + holder.copied_faction = L.faction + to_chat(user, span("notice", "Copied faction '[holder.copied_faction]'.")) + return + + // Select/Deselect + if(!isnull(L.get_AI_stance())) + if(L in holder.selected_mobs) + holder.deselect_AI_mob(user.client, L) + to_chat(user, span("notice", "Deselected \the [L].")) + else + holder.select_AI_mob(user.client, L) + to_chat(user, span("notice", "Selected \the [L].")) + return + else + to_chat(user, span("warning", "\The [L] is not AI controlled.")) + return + else //Not living + for(var/mob/living/unit in holder.selected_mobs) + holder.deselect_AI_mob(user.client, unit) + + if(pa.Find("middle")) + if(pa.Find("shift")) + to_chat(user, SPAN_NOTICE("All selected mobs set to wander")) + for(var/mob/living/unit in holder.selected_mobs) + var/datum/ai_holder/AI = unit.ai_holder + AI.wander = TRUE + if(pa.Find("ctrl")) + to_chat(user, SPAN_NOTICE("Setting mobs set to NOT wander")) + for(var/mob/living/unit in holder.selected_mobs) + var/datum/ai_holder/AI = unit.ai_holder + AI.wander = FALSE + if(pa.Find("alt") && isatom(object)) + to_chat(user, SPAN_NOTICE("Adding [object] to Entity Narrate List!")) + user.client.add_mob_for_narration(object) + + + if(pa.Find("right")) + // Paste faction + if(pa.Find("ctrl") && isliving(object)) + if(!holder.copied_faction) + to_chat(user, span("warning", "LMB+Shift a mob to copy their faction before pasting.")) + return + else + var/mob/living/L = object + L.faction = holder.copied_faction + to_chat(user, span("notice", "Pasted faction '[holder.copied_faction]'.")) + return + + if(istype(object, /atom)) // Force attack. + var/atom/A = object + + if(pa.Find("alt")) + var/i = 0 + for(var/mob/living/unit in holder.selected_mobs) + var/datum/ai_holder/AI = unit.ai_holder + AI.give_target(A) + i++ + to_chat(user, span("notice", "Commanded [i] mob\s to attack \the [A].")) + var/image/orderimage = image(buildmode_hud,A,"ai_targetorder") + orderimage.plane = PLANE_BUILDMODE + flick_overlay(orderimage, list(user.client), 8, TRUE) + return + + if(isliving(object)) // Follow or attack. + var/mob/living/L = object + var/i = 0 // Attacking mobs. + var/j = 0 // Following mobs. + for(var/mob/living/unit in holder.selected_mobs) + var/datum/ai_holder/AI = unit.ai_holder + if(L.IIsAlly(unit) || !AI.hostile || pa.Find("shift")) + AI.set_follow(L) + j++ + else + AI.give_target(L) + i++ + var/message = "Commanded " + if(i) + message += "[i] mob\s to attack \the [L]" + if(j) + message += ", and " + else + message += "." + if(j) + message += "[j] mob\s to follow \the [L]." + to_chat(user, span("notice", message)) + var/image/orderimage = image(buildmode_hud,L,"ai_targetorder") + orderimage.plane = PLANE_BUILDMODE + flick_overlay(orderimage, list(user.client), 8, TRUE) + return + + if(isturf(object)) // Move or reposition. + var/turf/T = object + var/forced = 0 + var/told = 0 + for(var/mob/living/unit in holder.selected_mobs) + var/datum/ai_holder/AI = unit.ai_holder + AI.home_turf = T + if(unit.get_AI_stance() == STANCE_SLEEP) + unit.forceMove(T) + forced++ + else + AI.give_destination(T, 1, pa.Find("shift")) // If shift is held, the mobs will not stop moving to attack a visible enemy. + told++ + to_chat(user, span("notice", "Commanded [told] mob\s to move to \the [T], and manually placed [forced] of them.")) + var/image/orderimage = image(buildmode_hud,T,"ai_turforder") + orderimage.plane = PLANE_BUILDMODE + flick_overlay(orderimage, list(user.client), 8, TRUE) + return + +/proc/build_drag(var/client/user, buildmode, var/atom/fromatom, var/atom/toatom, var/atom/fromloc, var/atom/toloc, var/fromcontrol, var/tocontrol, params) + var/obj/effect/bmode/buildholder/holder = null + for(var/obj/effect/bmode/buildholder/H) + if(H.cl == user) + holder = H + break + if(!holder) return + var/list/pa = params2list(params) + + switch(buildmode) + if(BUILDMODE_AI) + + //Holding shift prevents the deselection of existing + if(!pa.Find("shift")) + for(var/mob/living/unit in holder.selected_mobs) + holder.deselect_AI_mob(user, unit) + + var/turf/c1 = get_turf(fromatom) + var/turf/c2 = get_turf(toatom) + if(!c1 || !c2) + return //Dragged outside window or something + + var/low_x = min(c1.x,c2.x) + var/low_y = min(c1.y,c2.y) + var/hi_x = max(c1.x,c2.x) + var/hi_y = max(c1.y,c2.y) + var/z = c1.z //Eh + + var/i = 0 + for(var/mob/living/L in living_mob_list) + if(L.z != z || L.client) + continue + if(L.x >= low_x && L.x <= hi_x && L.y >= low_y && L.y <= hi_y) + holder.select_AI_mob(user, L) + i++ + + to_chat(user, span("notice", "Band-selected [i] mobs.")) + return + +/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) + var/desired_path = tgui_input_text(usr, "Enter full or partial typepath.","Typepath","[default_path]") + + if(!desired_path) //VOREStation Add - If you don't give it anything it builds a list of every possible thing in the game and crashes your client. + return //VOREStation Add - And the main way for it to do that is to push the cancel button, which should just do nothing. :U + + var/list/types = typesof(/atom) + var/list/matches = list() + + for(var/path in types) + if(findtext("[path]", desired_path)) + matches += path + + if(matches.len==0) + tgui_alert_async(usr, "No results found. Sorry.") + return + + var/result = null + + if(matches.len==1) + result = matches[1] + else + result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches, strict_modern = TRUE) + return result + +/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type, var/area_enabled, var/area_name) + if(!A || !B) // No coords + return + if(A.z != B.z) // Not same z-level + return + + var/height = A.y - B.y + var/width = A.x - B.x + var/z_level = A.z + + var/turf/lower_left_corner = null + // First, try to find the lowest part + var/desired_y = 0 + if(A.y <= B.y) + desired_y = A.y + else + desired_y = B.y + + //Now for the left-most part. + var/desired_x = 0 + if(A.x <= B.x) + desired_x = A.x + else + desired_x = B.x + + lower_left_corner = locate(desired_x, desired_y, z_level) + + // Now we can begin building the actual room. This defines the boundries for the room. + var/low_bound_x = lower_left_corner.x + var/low_bound_y = lower_left_corner.y + + var/high_bound_x = lower_left_corner.x + abs(width) + var/high_bound_y = lower_left_corner.y + abs(height) + + var/origin_x = lower_left_corner.x + round((abs(width)/2)) + var/origin_y = lower_left_corner.y + round((abs(height)/2)) + var/turf/origin + + for(var/i = low_bound_x, i <= high_bound_x, i++) + for(var/j = low_bound_y, j <= high_bound_y, j++) + var/turf/T = locate(i, j, z_level) + if(i == low_bound_x || i == high_bound_x || j == low_bound_y || j == high_bound_y) + if(isturf(wall_type)) + T.ChangeTurf(wall_type) + else + new wall_type(T) + + else + if(T.x == origin_x && T.y == origin_y) //Get the middle of the square. + origin = T + if(isturf(floor_type)) + T.ChangeTurf(floor_type) + else + new floor_type(T) + if(area_enabled) //Let's try not to make a new area unless you got walls and a floor. + create_buildmode_area(area_name, origin) //Generates a new area. + +/proc/create_buildmode_area(var/area_name, var/turf/origin) + var/turfs = detect_room_buildmode(origin) + + var/area/newA + var/area/oldA = get_area(origin) + var/str = area_name + str = sanitize(str,MAX_NAME_LEN) + if(!str || !length(str)) //cancel + return + newA = new /area/buildmode + newA.dynamic_lighting = FALSE // Without this it's pitch black if you build anywhere but space. + newA.luminosity = TRUE // Without this it's pitch black if you build anywhere but space. + newA.setup(str) + newA.has_gravity = oldA.has_gravity + + for(var/i in 1 to length(turfs)) //Fix lighting. Praise the lord. + var/turf/thing = turfs[i] + newA.contents += thing + thing.change_area(oldA, newA) + + set_area_machinery(newA, newA.name, oldA.name)// Change the name and area defines of all the machinery to the correct area. + oldA.power_check() //Simply makes the area turn the power off if you nicked an APC from it. + return TRUE + +/proc/detect_room_buildmode(var/turf/first, var/allowedAreas = AREA_SPACE) + if(!istype(first)) + return + var/list/turf/found = new + var/list/turf/pending = list(first) + while(pending.len) + var/turf/T = pending[1] + pending -= T + for (var/dir in cardinal) + var/turf/NT = get_step(T,dir) + if (!isturf(NT) || (NT in found) || (NT in pending)) + continue + // We ask ZAS to determine if its airtight. Thats what matters anyway right? + if(air_master.air_blocked(T, NT)) + // Okay thats the edge of the room + if(get_area_type_buildmode(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT)) + found += NT // So we include walls/doors not already in any area + continue + if (istype(NT, /turf/space)) + return //omg hull breach we all going to die here + if (istype(NT, /turf/simulated/shuttle)) + return // Unsure why this, but was in old code. Trusting for now. + if (NT.loc != first.loc && !(get_area_type_buildmode(NT.loc) & allowedAreas)) + // Edge of a protected area. Lets stop here... + continue + if (!istype(NT, /turf/simulated)) + // Great, unsimulated... eh, just stop searching here + continue + // Okay, NT looks promising, lets continue the search there! + pending += NT + found += T + // end while + return found + +/proc/get_area_type_buildmode(area/A) + if(A.outdoors) + return AREA_SPACE + + for (var/type in BUILDABLE_AREA_TYPES) + if ( istype(A,type) ) + return AREA_SPACE + + for (var/type in SPECIALS) + if ( istype(A,type) ) + return AREA_SPECIAL + return AREA_STATION + +/area/buildmode + dynamic_lighting = FALSE + luminosity = FALSE + +#undef BUILDMODE_BASIC +#undef BUILDMODE_ADVANCED +#undef BUILDMODE_EDIT +#undef BUILDMODE_THROW +#undef BUILDMODE_ROOM +#undef BUILDMODE_LADDER +#undef BUILDMODE_CONTENTS +#undef BUILDMODE_LIGHTS +#undef BUILDMODE_AI +#undef LAST_BUILDMODE diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index cc70c43876..b459c5cd48 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -1,31 +1,31 @@ -/client/proc/dsay(msg as text) - set category = "Special Verbs" - set name = "Dsay" //Gave this shit a shorter name so you only have to time out "dsay" rather than "dead say" to use it --NeoFite - set hidden = 1 - if(!src.holder) - to_chat(src, "Only administrators may use this command.") - return - if(!src.mob) - return - if(prefs.muted & MUTE_DEADCHAT) - to_chat(src, "You cannot send DSAY messages (muted).") - return - - if(!is_preference_enabled(/datum/client_preference/show_dsay)) - to_chat(src, "You have deadchat muted.") - return - - if (src.handle_spam_prevention(msg,MUTE_DEADCHAT)) - return - - var/stafftype = uppertext(holder.rank) - - msg = sanitize(msg) - log_admin("DSAY: [key_name(src)] : [msg]") - - if (!msg) - return - - say_dead_direct("[stafftype]([src.holder.fakekey ? src.holder.fakekey : src.key]) says, \"[msg]\"") - - feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/dsay(msg as text) + set category = "Special Verbs" + set name = "Dsay" //Gave this shit a shorter name so you only have to time out "dsay" rather than "dead say" to use it --NeoFite + set hidden = 1 + if(!src.holder) + to_chat(src, "Only administrators may use this command.") + return + if(!src.mob) + return + if(prefs.muted & MUTE_DEADCHAT) + to_chat(src, "You cannot send DSAY messages (muted).") + return + + if(!is_preference_enabled(/datum/client_preference/show_dsay)) + to_chat(src, "You have deadchat muted.") + return + + if (src.handle_spam_prevention(msg,MUTE_DEADCHAT)) + return + + var/stafftype = uppertext(holder.rank) + + msg = sanitize(msg) + log_admin("DSAY: [key_name(src)] : [msg]") + + if (!msg) + return + + say_dead_direct("[stafftype]([src.holder.fakekey ? src.holder.fakekey : src.key]) says, \"[msg]\"") + + feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/debug_ch.dm b/code/modules/admin/verbs/debug_ch.dm index b33604b7ea..0b13e53ba0 100644 --- a/code/modules/admin/verbs/debug_ch.dm +++ b/code/modules/admin/verbs/debug_ch.dm @@ -1,32 +1,32 @@ -/datum/admins/proc/quick_authentic_nif() - set category = "Fun" - set name = "Quick Auth NIF" - set desc = "Spawns an authentic NIF into someone in quick-implant mode." - - if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) //CHOMPStation Edit TFF 24/4/19: Allow Devs to use Quick-NIF verb. - return - - var/mob/living/carbon/human/H = input("Pick a mob with a player","Quick Authentic NIF") as null|anything in player_list - - if(!H) - return - - if(!istype(H)) - to_chat(usr,"That mob type ([H.type]) doesn't support NIFs, sorry.") - return - - if(!H.get_organ(BP_HEAD)) - to_chat(usr,"Target is unsuitable.") - return - - if(H.nif) - to_chat(usr,"Target already has a NIF.") - return - - if(H.species.flags & NO_SCAN) - new /obj/item/device/nif/authenticbio(H) - else - new /obj/item/device/nif/authentic(H) - - log_and_message_admins("[key_name(src)] Quick Authentic NIF'd [H.real_name].") - feedback_add_details("admin_verb","QANIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/admins/proc/quick_authentic_nif() + set category = "Fun" + set name = "Quick Auth NIF" + set desc = "Spawns an authentic NIF into someone in quick-implant mode." + + if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) //CHOMPStation Edit TFF 24/4/19: Allow Devs to use Quick-NIF verb. + return + + var/mob/living/carbon/human/H = input("Pick a mob with a player","Quick Authentic NIF") as null|anything in player_list + + if(!H) + return + + if(!istype(H)) + to_chat(usr,"That mob type ([H.type]) doesn't support NIFs, sorry.") + return + + if(!H.get_organ(BP_HEAD)) + to_chat(usr,"Target is unsuitable.") + return + + if(H.nif) + to_chat(usr,"Target already has a NIF.") + return + + if(H.species.flags & NO_SCAN) + new /obj/item/device/nif/authenticbio(H) + else + new /obj/item/device/nif/authentic(H) + + log_and_message_admins("[key_name(src)] Quick Authentic NIF'd [H.real_name].") + feedback_add_details("admin_verb","QANIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index ce39bbb0b8..40b47f2f50 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -1,187 +1,187 @@ -/client/proc/air_report() - set category = "Debug" - set name = "Show Air Report" - - if(!master_controller || !air_master) - tgui_alert_async(usr,"Master_controller or air_master not found.","Air Report") - return - - var/active_groups = air_master.active_zones - var/inactive_groups = air_master.zones.len - active_groups - - var/hotspots = 0 - for(var/obj/fire/hotspot in world) - hotspots++ - - var/active_on_main_station = 0 - var/inactive_on_main_station = 0 - for(var/zone/zone in air_master.zones) - var/turf/simulated/turf = locate() in zone.contents - if(turf?.z in using_map.station_levels) - if(zone.needs_update) - active_on_main_station++ - else - inactive_on_main_station++ - - var/output = {"AIR SYSTEMS REPORT
                    -General Processing Data
                    - Cycle: [air_master.current_cycle]
                    - Groups: [air_master.zones.len]
                    ----- Active: [active_groups]
                    ----- Inactive: [inactive_groups]

                    ----- Active on station: [active_on_main_station]
                    ----- Inactive on station: [inactive_on_main_station]
                    -
                    -Special Processing Data
                    - Hotspot Processing: [hotspots]
                    -
                    -Geometry Processing Data
                    - Tile Update: [air_master.tiles_to_update.len]
                    -"} - - usr << browse(output,"window=airreport") - -/client/proc/fix_next_move() - set category = "Debug" - set name = "Unfreeze Everyone" - var/largest_move_time = 0 - var/largest_click_time = 0 - var/mob/largest_move_mob = null - var/mob/largest_click_mob = null - for(var/mob/M in mob_list) - if(!M.client) - continue - if(M.next_move >= largest_move_time) - largest_move_mob = M - if(M.next_move > world.time) - largest_move_time = M.next_move - world.time - else - largest_move_time = 1 - if(M.next_click >= largest_click_time) - largest_click_mob = M - if(M.next_click > world.time) - largest_click_time = M.next_click - world.time - else - largest_click_time = 0 - log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] next_click = [M.next_click] world.time = [world.time]") - M.next_move = 1 - M.next_click = 0 - message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1) - message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1) - message_admins("world.time = [world.time]", 1) - feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - -/client/proc/radio_report() - set category = "Debug" - set name = "Radio report" - - var/output = "Radio Report
                    " - for (var/fq in radio_controller.frequencies) - output += "Freq: [fq]
                    " - var/datum/radio_frequency/fqs = radio_controller.frequencies[fq] - if (!fqs) - output += "  ERROR
                    " - continue - for (var/radio_filter in fqs.devices) - var/list/f = fqs.devices[radio_filter] - if (!f) - output += "  [radio_filter]: ERROR
                    " - continue - output += "  [radio_filter]: [f.len]
                    " - for (var/device in f) - if (isobj(device)) - output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
                    " - else - output += "    [device]
                    " - - usr << browse(output,"window=radioreport") - feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/reload_admins() - set name = "Reload Admins" - set category = "Debug" - - if(!check_rights(R_SERVER)) return - - message_admins("[usr] manually reloaded admins") - load_admins() - feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/reload_eventMs() - set name = "Reload Event Managers" - set category = "Debug" - - if(!check_rights(R_SERVER)) return - - message_admins("[usr] manually reloaded Event Managers") - world.load_mods() - - -//todo: -/client/proc/jump_to_dead_group() - set name = "Jump to dead group" - set category = "Debug" - /* - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - - if(!air_master) - to_chat(usr, "Cannot find air_system") - return - var/datum/air_group/dead_groups = list() - for(var/datum/air_group/group in air_master.air_groups) - if (!group.group_processing) - dead_groups += group - var/datum/air_group/dest_group = pick(dead_groups) - usr.loc = pick(dest_group.members) - feedback_add_details("admin_verb","JDAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - */ - -/client/proc/kill_airgroup() - set name = "Kill Local Airgroup" - set desc = "Use this to allow manual manupliation of atmospherics." - set category = "Debug" - /* - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - - if(!air_master) - to_chat(usr, "Cannot find air_system") - return - - var/turf/T = get_turf(usr) - if(istype(T, /turf/simulated)) - var/datum/air_group/AG = T:parent - AG.next_check = 30 - AG.group_processing = 0 - else - to_chat(usr, "Local airgroup is unsimulated!") - feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - */ - -/client/proc/print_jobban_old() - set name = "Print Jobban Log" - set desc = "This spams all the active jobban entries for the current round to standard output." - set category = "Debug" - - to_chat(usr, "Jobbans active in this round.") - for(var/t in jobban_keylist) - to_chat(usr, "[t]") - -/client/proc/print_jobban_old_filter() - set name = "Search Jobban Log" - set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output." - set category = "Debug" - - var/job_filter = tgui_input_text(usr, "Contains what?","Job Filter") - if(!job_filter) - return - - to_chat(usr, "Jobbans active in this round.") - for(var/t in jobban_keylist) - if(findtext(t, job_filter)) - to_chat(usr, "[t]") +/client/proc/air_report() + set category = "Debug" + set name = "Show Air Report" + + if(!master_controller || !air_master) + tgui_alert_async(usr,"Master_controller or air_master not found.","Air Report") + return + + var/active_groups = air_master.active_zones + var/inactive_groups = air_master.zones.len - active_groups + + var/hotspots = 0 + for(var/obj/fire/hotspot in world) + hotspots++ + + var/active_on_main_station = 0 + var/inactive_on_main_station = 0 + for(var/zone/zone in air_master.zones) + var/turf/simulated/turf = locate() in zone.contents + if(turf?.z in using_map.station_levels) + if(zone.needs_update) + active_on_main_station++ + else + inactive_on_main_station++ + + var/output = {"AIR SYSTEMS REPORT
                    +General Processing Data
                    + Cycle: [air_master.current_cycle]
                    + Groups: [air_master.zones.len]
                    +---- Active: [active_groups]
                    +---- Inactive: [inactive_groups]

                    +---- Active on station: [active_on_main_station]
                    +---- Inactive on station: [inactive_on_main_station]
                    +
                    +Special Processing Data
                    + Hotspot Processing: [hotspots]
                    +
                    +Geometry Processing Data
                    + Tile Update: [air_master.tiles_to_update.len]
                    +"} + + usr << browse(output,"window=airreport") + +/client/proc/fix_next_move() + set category = "Debug" + set name = "Unfreeze Everyone" + var/largest_move_time = 0 + var/largest_click_time = 0 + var/mob/largest_move_mob = null + var/mob/largest_click_mob = null + for(var/mob/M in mob_list) + if(!M.client) + continue + if(M.next_move >= largest_move_time) + largest_move_mob = M + if(M.next_move > world.time) + largest_move_time = M.next_move - world.time + else + largest_move_time = 1 + if(M.next_click >= largest_click_time) + largest_click_mob = M + if(M.next_click > world.time) + largest_click_time = M.next_click - world.time + else + largest_click_time = 0 + log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] next_click = [M.next_click] world.time = [world.time]") + M.next_move = 1 + M.next_click = 0 + message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1) + message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1) + message_admins("world.time = [world.time]", 1) + feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + +/client/proc/radio_report() + set category = "Debug" + set name = "Radio report" + + var/output = "Radio Report
                    " + for (var/fq in radio_controller.frequencies) + output += "Freq: [fq]
                    " + var/datum/radio_frequency/fqs = radio_controller.frequencies[fq] + if (!fqs) + output += "  ERROR
                    " + continue + for (var/radio_filter in fqs.devices) + var/list/f = fqs.devices[radio_filter] + if (!f) + output += "  [radio_filter]: ERROR
                    " + continue + output += "  [radio_filter]: [f.len]
                    " + for (var/device in f) + if (isobj(device)) + output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
                    " + else + output += "    [device]
                    " + + usr << browse(output,"window=radioreport") + feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/reload_admins() + set name = "Reload Admins" + set category = "Debug" + + if(!check_rights(R_SERVER)) return + + message_admins("[usr] manually reloaded admins") + load_admins() + feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/reload_eventMs() + set name = "Reload Event Managers" + set category = "Debug" + + if(!check_rights(R_SERVER)) return + + message_admins("[usr] manually reloaded Event Managers") + world.load_mods() + + +//todo: +/client/proc/jump_to_dead_group() + set name = "Jump to dead group" + set category = "Debug" + /* + if(!holder) + to_chat(src, "Only administrators may use this command.") + return + + if(!air_master) + to_chat(usr, "Cannot find air_system") + return + var/datum/air_group/dead_groups = list() + for(var/datum/air_group/group in air_master.air_groups) + if (!group.group_processing) + dead_groups += group + var/datum/air_group/dest_group = pick(dead_groups) + usr.loc = pick(dest_group.members) + feedback_add_details("admin_verb","JDAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + */ + +/client/proc/kill_airgroup() + set name = "Kill Local Airgroup" + set desc = "Use this to allow manual manupliation of atmospherics." + set category = "Debug" + /* + if(!holder) + to_chat(src, "Only administrators may use this command.") + return + + if(!air_master) + to_chat(usr, "Cannot find air_system") + return + + var/turf/T = get_turf(usr) + if(istype(T, /turf/simulated)) + var/datum/air_group/AG = T:parent + AG.next_check = 30 + AG.group_processing = 0 + else + to_chat(usr, "Local airgroup is unsimulated!") + feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + */ + +/client/proc/print_jobban_old() + set name = "Print Jobban Log" + set desc = "This spams all the active jobban entries for the current round to standard output." + set category = "Debug" + + to_chat(usr, "Jobbans active in this round.") + for(var/t in jobban_keylist) + to_chat(usr, "[t]") + +/client/proc/print_jobban_old_filter() + set name = "Search Jobban Log" + set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output." + set category = "Debug" + + var/job_filter = tgui_input_text(usr, "Contains what?","Job Filter") + if(!job_filter) + return + + to_chat(usr, "Jobbans active in this round.") + for(var/t in jobban_keylist) + if(findtext(t, job_filter)) + to_chat(usr, "[t]") diff --git a/code/modules/admin/verbs/fps.dm b/code/modules/admin/verbs/fps.dm index c3b9999afb..50f1a9320f 100644 --- a/code/modules/admin/verbs/fps.dm +++ b/code/modules/admin/verbs/fps.dm @@ -1,23 +1,23 @@ -//Merged Doohl's and the existing ticklag as they both had good elements about them ~ -//Replaces the old Ticklag verb, fps is easier to understand -/client/proc/set_server_fps() - set category = "Debug" - set name = "Set Server FPS" - set desc = "Sets game speed in frames-per-second. Can potentially break the game" - - if(!check_rights(R_DEBUG)) - return - - var/new_fps = round(tgui_input_number(usr, "Sets game frames-per-second. Can potentially break the game (default: [config.fps])", "FPS", world.fps)) - if(new_fps <= 0) - to_chat(src, "Error: set_server_fps(): Invalid world.fps value. No changes made.") - return - if(new_fps > config.fps * 1.5) - if(tgui_alert(src, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [config.fps]", "Warning!", list("Confirm", "ABORT-ABORT-ABORT")) != "Confirm") - return - - var/msg = "[key_name(src)] has modified world.fps to [new_fps]" - log_admin(msg, 0) - message_admins(msg, 0) - world.change_fps(new_fps) - feedback_add_details("admin_verb", "SETFPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//Merged Doohl's and the existing ticklag as they both had good elements about them ~ +//Replaces the old Ticklag verb, fps is easier to understand +/client/proc/set_server_fps() + set category = "Debug" + set name = "Set Server FPS" + set desc = "Sets game speed in frames-per-second. Can potentially break the game" + + if(!check_rights(R_DEBUG)) + return + + var/new_fps = round(tgui_input_number(usr, "Sets game frames-per-second. Can potentially break the game (default: [config.fps])", "FPS", world.fps)) + if(new_fps <= 0) + to_chat(src, "Error: set_server_fps(): Invalid world.fps value. No changes made.") + return + if(new_fps > config.fps * 1.5) + if(tgui_alert(src, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [config.fps]", "Warning!", list("Confirm", "ABORT-ABORT-ABORT")) != "Confirm") + return + + var/msg = "[key_name(src)] has modified world.fps to [new_fps]" + log_admin(msg, 0) + message_admins(msg, 0) + world.change_fps(new_fps) + feedback_add_details("admin_verb", "SETFPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 751fb534eb..c57ad0b706 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -1,311 +1,311 @@ -//world/proc/shelleo -#define SHELLEO_ERRORLEVEL 1 -#define SHELLEO_STDOUT 2 -#define SHELLEO_STDERR 3 - -var/list/sounds_cache = list() - -/client/proc/play_sound(S as sound) - set category = "Fun" - set name = "Play Global Sound" - if(!check_rights(R_SOUNDS)) - return - - var/freq = 1 - var/vol = tgui_input_number(usr, "What volume would you like the sound to play at?",, 100, 100, 1) - if(!vol) - return - vol = clamp(vol, 1, 100) - - var/sound/admin_sound = new() - admin_sound.file = S - admin_sound.priority = 250 - admin_sound.channel = 777 - admin_sound.frequency = freq - admin_sound.wait = 1 - admin_sound.repeat = FALSE - admin_sound.status = SOUND_STREAM - admin_sound.volume = vol - - sounds_cache += S - - var/res = tgui_alert(usr, "Show the title of this song ([S]) to the players?\nOptions 'Yes' and 'No' will play the sound.",, list("Yes", "No", "Cancel")) - switch(res) - if("Yes") - to_chat(world, "An admin played: [S]", confidential = TRUE) - if("Cancel") - return - - log_admin("[key_name(src)] played sound [S]") - message_admins("[key_name_admin(src)] played sound [S]", 1) - - for(var/mob/M in player_list) - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) - admin_sound.volume = vol * M.client.admin_music_volume - SEND_SOUND(M, admin_sound) - admin_sound.volume = vol - - feedback_add_details("admin_verb", "Play Global Sound") - -/client/proc/play_local_sound(S as sound) - set category = "Fun" - set name = "Play Local Sound" - if(!check_rights(R_SOUNDS)) - return - - log_admin("[key_name(src)] played a local sound [S]") - message_admins("[key_name_admin(src)] played a local sound [S]", 1) - playsound(src.mob, S, 50, 0, 0) - feedback_add_details("admin_verb", "Play Local Sound") - -/client/proc/play_direct_mob_sound(S as sound, mob/M) - set category = "Fun" - set name = "Play Direct Mob Sound" - if(!check_rights(R_SOUNDS)) - return - - if(!M) - M = tgui_input_list(usr, "Choose a mob to play the sound to. Only they will hear it.", "Play Mob Sound", sortNames(player_list)) - if(!M || QDELETED(M)) - return - log_admin("[key_name(src)] played a direct mob sound [S] to [M].") - message_admins("[key_name_admin(src)] played a direct mob sound [S] to [ADMIN_LOOKUPFLW(M)].") - SEND_SOUND(M, S) - feedback_add_details("admin_verb", "Play Direct Mob Sound") - -/client/proc/play_z_sound(S as sound) - set category = "Fun" - set name = "Play Z Sound" - if(!check_rights(R_SOUNDS)) return - var/target_z = mob.z - var/sound/uploaded_sound = sound(S, repeat = 0, wait = 1, channel = 777) - uploaded_sound.priority = 250 - - sounds_cache += S - - if(tgui_alert(usr, "Do you ready?\nSong: [S]\nNow you can also play this sound using \"Play Server Sound\".", "Confirmation request", list("Play","Cancel")) == "Cancel") - return - - log_admin("[key_name(src)] played sound [S] on Z[target_z]") - message_admins("[key_name_admin(src)] played sound [S] on Z[target_z]", 1) - for(var/mob/M in player_list) - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis) && M.z == target_z) - M << uploaded_sound - - feedback_add_details("admin_verb", "Play Z Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/proc/play_server_sound() - set category = "Fun" - set name = "Play Server Sound" - if(!check_rights(R_SOUNDS)) - return - - var/list/sounds = file2list("sound/serversound_list.txt"); - sounds += "--CANCEL--" - sounds += sounds_cache - - var/melody = tgui_input_list(usr, "Select a sound from the server to play", "Server sound list", sounds, "--CANCEL--") - - if(melody == "--CANCEL--") - return - - play_sound(melody) - feedback_add_details("admin_verb", "Play Server Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -///Takes an input from either proc/play_web_sound or the request manager and runs it through youtube-dl and prompts the user before playing it to the server. -/proc/web_sound(mob/user, input, credit) - if(!check_rights(R_SOUNDS)) - return - var/ytdl = config.invoke_youtubedl - if(!ytdl) - to_chat(user, "Youtube-dl was not configured, action unavailable", confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value - return - var/web_sound_url = "" - var/stop_web_sounds = FALSE - var/list/music_extra_data = list() - var/duration = 0 - if(istext(input)) - var/shell_scrubbed_input = shell_url_scrub(input) - var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height <= 360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_scrubbed_input]\"") - var/errorlevel = output[SHELLEO_ERRORLEVEL] - var/stdout = output[SHELLEO_STDOUT] - var/stderr = output[SHELLEO_STDERR] - if(errorlevel) - to_chat(user, "Youtube-dl URL retrieval FAILED:", confidential = TRUE) - to_chat(user, "[stderr]", confidential = TRUE) - return - var/list/data - try - data = json_decode(stdout) - catch(var/exception/e) - to_chat(user, "Youtube-dl JSON parsing FAILED:", confidential = TRUE) - to_chat(user, "[e]: [stdout]", confidential = TRUE) - return - if (data["url"]) - web_sound_url = data["url"] - var/title = "[data["title"]]" - var/webpage_url = title - if (data["webpage_url"]) - webpage_url = "[title]" - music_extra_data["duration"] = DisplayTimeText(data["duration"] * 1 SECONDS) - music_extra_data["link"] = data["webpage_url"] - music_extra_data["artist"] = data["artist"] - music_extra_data["upload_date"] = data["upload_date"] - music_extra_data["album"] = data["album"] - duration = data["duration"] * 1 SECONDS - if (duration > 10 MINUTES) - if((tgui_alert(user, "This song is over 10 minutes long. Are you sure you want to play it?", "Length Warning!", list("No", "Yes", "Cancel")) != "Yes")) - return - var/res = tgui_alert(user, "Show the title of and link to this song to the players?\n[title]", "Show Info?", list("Yes", "No", "Cancel")) - switch(res) - if("Yes") - music_extra_data["title"] = data["title"] - if("No") - music_extra_data["link"] = "Song Link Hidden" - music_extra_data["title"] = "Song Title Hidden" - music_extra_data["artist"] = "Song Artist Hidden" - music_extra_data["upload_date"] = "Song Upload Date Hidden" - music_extra_data["album"] = "Song Album Hidden" - if("Cancel", null) - return - var/anon = tgui_alert(user, "Display who played the song?", "Credit Yourself?", list("Yes", "No", "Cancel")) - switch(anon) - if("Yes") - if(res == "Yes") - to_chat(world, "[user.key] played: [webpage_url]", confidential = TRUE) - else - to_chat(world, "[user.key] played a sound", confidential = TRUE) - if("No") - if(res == "Yes") - to_chat(world, "An admin played: [webpage_url]", confidential = TRUE) - if("Cancel", null) - return - if(credit) - to_chat(world, "[credit]", confidential = TRUE) - //SSblackbox.record_feedback("nested tally", "played_url", 1, list("[user.ckey]", "[input]")) - log_admin("[key_name(user)] played web sound: [input]") - message_admins("[key_name(user)] played web sound: [input]") - else - //pressed ok with blank - log_admin("[key_name(user)] stopped web sounds.") - - message_admins("[key_name(user)] stopped web sounds.") - web_sound_url = null - stop_web_sounds = TRUE - if(web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) - tgui_alert(user, "The media provider returned a content URL that isn't using the HTTP or HTTPS protocol. This is a security risk and the sound will not be played.", "Security Risk", list("OK")) - to_chat(user, "BLOCKED: Content URL not using HTTP(S) Protocol!", confidential = TRUE) - - return - if(web_sound_url || stop_web_sounds) - for(var/m in player_list) - var/mob/M = m - var/client/C = M.client - if(C.is_preference_enabled(/datum/client_preference/play_admin_midis)) - if(!stop_web_sounds) - C.tgui_panel?.play_music(web_sound_url, music_extra_data) - else - C.tgui_panel?.stop_music() - - S_TIMER_COOLDOWN_START(SStimer, COOLDOWN_INTERNET_SOUND, duration) - - feedback_add_details("admin_verb", "Play Internet Sound") - -/client/proc/play_web_sound() - set category = "Fun" - set name = "Play Internet Sound" - if(!check_rights(R_SOUNDS)) - return - - var/ytdl = config.invoke_youtubedl - if(!ytdl) - to_chat(src, "Youtube-dl was not configured, action unavailable", confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value - return - - if(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND)) - if(tgui_alert(usr, "Someone else is already playing an Internet sound! It has [DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND), 1)] remaining. \ - Would you like to override?", "Musicalis Interruptus", list("No","Yes")) != "Yes") - return - - var/web_sound_input = tgui_input_text(usr, "Enter content URL (supported sites only, leave blank to stop playing)", "Play Internet Sound", null) - - if(length(web_sound_input)) - web_sound_input = trim(web_sound_input) - if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) - to_chat(src, "Non-http(s) URIs are not allowed.", confidential = TRUE) - to_chat(src, "For youtube-dl shortcuts like ytsearch: please use the appropriate full URL from the website.", confidential = TRUE) - return - web_sound(usr, web_sound_input) - else - web_sound(usr, null) - -/client/proc/stop_sounds() - set category = "Debug" - set name = "Stop All Playing Sounds" - if(!src.holder) - return - - log_admin("[key_name(src)] stopped all currently playing sounds.") - message_admins("[key_name_admin(src)] stopped all currently playing sounds.") - for(var/mob/M in player_list) - SEND_SOUND(M, sound(null)) - var/client/C = M.client - C?.tgui_panel?.stop_music() - - S_TIMER_COOLDOWN_RESET(SStimer, COOLDOWN_INTERNET_SOUND) - feedback_add_details("admin_verb", "Stop All Playing Sounds") - -//world/proc/shelleo -#undef SHELLEO_ERRORLEVEL -#undef SHELLEO_STDOUT -#undef SHELLEO_STDERR - -/* -/client/proc/cuban_pete() - set category = "Fun" - set name = "Cuban Pete Time" - - message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1) - for(var/mob/M in player_list) - if(M.client) - if(M.client.midis) - M << 'cubanpetetime.ogg' - - for(var/mob/living/carbon/human/CP in human_mob_list) - if(CP.real_name=="Cuban Pete" && CP.key!="Rosham") - to_chat(CP, "Your body can't contain the rhumba beat") - CP.gib() - - -/client/proc/bananaphone() - set category = "Fun" - set name = "Banana Phone" - - message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1) - for(var/mob/M in player_list) - if(M.client) - if(M.client.midis) - M << 'bananaphone.ogg' - - -/client/proc/space_asshole() - set category = "Fun" - set name = "Space Asshole" - - message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1) - for(var/mob/M in player_list) - if(M.client) - if(M.client.midis) - M << 'sound/music/space_asshole.ogg' - - -/client/proc/honk_theme() - set category = "Fun" - set name = "Honk" - - message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1) - for(var/mob/M in player_list) - if(M.client) - if(M.client.midis) - M << 'honk_theme.ogg'*/ +//world/proc/shelleo +#define SHELLEO_ERRORLEVEL 1 +#define SHELLEO_STDOUT 2 +#define SHELLEO_STDERR 3 + +var/list/sounds_cache = list() + +/client/proc/play_sound(S as sound) + set category = "Fun" + set name = "Play Global Sound" + if(!check_rights(R_SOUNDS)) + return + + var/freq = 1 + var/vol = tgui_input_number(usr, "What volume would you like the sound to play at?",, 100, 100, 1) + if(!vol) + return + vol = clamp(vol, 1, 100) + + var/sound/admin_sound = new() + admin_sound.file = S + admin_sound.priority = 250 + admin_sound.channel = 777 + admin_sound.frequency = freq + admin_sound.wait = 1 + admin_sound.repeat = FALSE + admin_sound.status = SOUND_STREAM + admin_sound.volume = vol + + sounds_cache += S + + var/res = tgui_alert(usr, "Show the title of this song ([S]) to the players?\nOptions 'Yes' and 'No' will play the sound.",, list("Yes", "No", "Cancel")) + switch(res) + if("Yes") + to_chat(world, "An admin played: [S]", confidential = TRUE) + if("Cancel") + return + + log_admin("[key_name(src)] played sound [S]") + message_admins("[key_name_admin(src)] played sound [S]", 1) + + for(var/mob/M in player_list) + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) + admin_sound.volume = vol * M.client.admin_music_volume + SEND_SOUND(M, admin_sound) + admin_sound.volume = vol + + feedback_add_details("admin_verb", "Play Global Sound") + +/client/proc/play_local_sound(S as sound) + set category = "Fun" + set name = "Play Local Sound" + if(!check_rights(R_SOUNDS)) + return + + log_admin("[key_name(src)] played a local sound [S]") + message_admins("[key_name_admin(src)] played a local sound [S]", 1) + playsound(src.mob, S, 50, 0, 0) + feedback_add_details("admin_verb", "Play Local Sound") + +/client/proc/play_direct_mob_sound(S as sound, mob/M) + set category = "Fun" + set name = "Play Direct Mob Sound" + if(!check_rights(R_SOUNDS)) + return + + if(!M) + M = tgui_input_list(usr, "Choose a mob to play the sound to. Only they will hear it.", "Play Mob Sound", sortNames(player_list)) + if(!M || QDELETED(M)) + return + log_admin("[key_name(src)] played a direct mob sound [S] to [M].") + message_admins("[key_name_admin(src)] played a direct mob sound [S] to [ADMIN_LOOKUPFLW(M)].") + SEND_SOUND(M, S) + feedback_add_details("admin_verb", "Play Direct Mob Sound") + +/client/proc/play_z_sound(S as sound) + set category = "Fun" + set name = "Play Z Sound" + if(!check_rights(R_SOUNDS)) return + var/target_z = mob.z + var/sound/uploaded_sound = sound(S, repeat = 0, wait = 1, channel = 777) + uploaded_sound.priority = 250 + + sounds_cache += S + + if(tgui_alert(usr, "Do you ready?\nSong: [S]\nNow you can also play this sound using \"Play Server Sound\".", "Confirmation request", list("Play","Cancel")) == "Cancel") + return + + log_admin("[key_name(src)] played sound [S] on Z[target_z]") + message_admins("[key_name_admin(src)] played sound [S] on Z[target_z]", 1) + for(var/mob/M in player_list) + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis) && M.z == target_z) + M << uploaded_sound + + feedback_add_details("admin_verb", "Play Z Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/client/proc/play_server_sound() + set category = "Fun" + set name = "Play Server Sound" + if(!check_rights(R_SOUNDS)) + return + + var/list/sounds = file2list("sound/serversound_list.txt"); + sounds += "--CANCEL--" + sounds += sounds_cache + + var/melody = tgui_input_list(usr, "Select a sound from the server to play", "Server sound list", sounds, "--CANCEL--") + + if(melody == "--CANCEL--") + return + + play_sound(melody) + feedback_add_details("admin_verb", "Play Server Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +///Takes an input from either proc/play_web_sound or the request manager and runs it through youtube-dl and prompts the user before playing it to the server. +/proc/web_sound(mob/user, input, credit) + if(!check_rights(R_SOUNDS)) + return + var/ytdl = config.invoke_youtubedl + if(!ytdl) + to_chat(user, "Youtube-dl was not configured, action unavailable", confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + return + var/web_sound_url = "" + var/stop_web_sounds = FALSE + var/list/music_extra_data = list() + var/duration = 0 + if(istext(input)) + var/shell_scrubbed_input = shell_url_scrub(input) + var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height <= 360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_scrubbed_input]\"") + var/errorlevel = output[SHELLEO_ERRORLEVEL] + var/stdout = output[SHELLEO_STDOUT] + var/stderr = output[SHELLEO_STDERR] + if(errorlevel) + to_chat(user, "Youtube-dl URL retrieval FAILED:", confidential = TRUE) + to_chat(user, "[stderr]", confidential = TRUE) + return + var/list/data + try + data = json_decode(stdout) + catch(var/exception/e) + to_chat(user, "Youtube-dl JSON parsing FAILED:", confidential = TRUE) + to_chat(user, "[e]: [stdout]", confidential = TRUE) + return + if (data["url"]) + web_sound_url = data["url"] + var/title = "[data["title"]]" + var/webpage_url = title + if (data["webpage_url"]) + webpage_url = "[title]" + music_extra_data["duration"] = DisplayTimeText(data["duration"] * 1 SECONDS) + music_extra_data["link"] = data["webpage_url"] + music_extra_data["artist"] = data["artist"] + music_extra_data["upload_date"] = data["upload_date"] + music_extra_data["album"] = data["album"] + duration = data["duration"] * 1 SECONDS + if (duration > 10 MINUTES) + if((tgui_alert(user, "This song is over 10 minutes long. Are you sure you want to play it?", "Length Warning!", list("No", "Yes", "Cancel")) != "Yes")) + return + var/res = tgui_alert(user, "Show the title of and link to this song to the players?\n[title]", "Show Info?", list("Yes", "No", "Cancel")) + switch(res) + if("Yes") + music_extra_data["title"] = data["title"] + if("No") + music_extra_data["link"] = "Song Link Hidden" + music_extra_data["title"] = "Song Title Hidden" + music_extra_data["artist"] = "Song Artist Hidden" + music_extra_data["upload_date"] = "Song Upload Date Hidden" + music_extra_data["album"] = "Song Album Hidden" + if("Cancel", null) + return + var/anon = tgui_alert(user, "Display who played the song?", "Credit Yourself?", list("Yes", "No", "Cancel")) + switch(anon) + if("Yes") + if(res == "Yes") + to_chat(world, "[user.key] played: [webpage_url]", confidential = TRUE) + else + to_chat(world, "[user.key] played a sound", confidential = TRUE) + if("No") + if(res == "Yes") + to_chat(world, "An admin played: [webpage_url]", confidential = TRUE) + if("Cancel", null) + return + if(credit) + to_chat(world, "[credit]", confidential = TRUE) + //SSblackbox.record_feedback("nested tally", "played_url", 1, list("[user.ckey]", "[input]")) + log_admin("[key_name(user)] played web sound: [input]") + message_admins("[key_name(user)] played web sound: [input]") + else + //pressed ok with blank + log_admin("[key_name(user)] stopped web sounds.") + + message_admins("[key_name(user)] stopped web sounds.") + web_sound_url = null + stop_web_sounds = TRUE + if(web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) + tgui_alert(user, "The media provider returned a content URL that isn't using the HTTP or HTTPS protocol. This is a security risk and the sound will not be played.", "Security Risk", list("OK")) + to_chat(user, "BLOCKED: Content URL not using HTTP(S) Protocol!", confidential = TRUE) + + return + if(web_sound_url || stop_web_sounds) + for(var/m in player_list) + var/mob/M = m + var/client/C = M.client + if(C.is_preference_enabled(/datum/client_preference/play_admin_midis)) + if(!stop_web_sounds) + C.tgui_panel?.play_music(web_sound_url, music_extra_data) + else + C.tgui_panel?.stop_music() + + S_TIMER_COOLDOWN_START(SStimer, COOLDOWN_INTERNET_SOUND, duration) + + feedback_add_details("admin_verb", "Play Internet Sound") + +/client/proc/play_web_sound() + set category = "Fun" + set name = "Play Internet Sound" + if(!check_rights(R_SOUNDS)) + return + + var/ytdl = config.invoke_youtubedl + if(!ytdl) + to_chat(src, "Youtube-dl was not configured, action unavailable", confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + return + + if(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND)) + if(tgui_alert(usr, "Someone else is already playing an Internet sound! It has [DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND), 1)] remaining. \ + Would you like to override?", "Musicalis Interruptus", list("No","Yes")) != "Yes") + return + + var/web_sound_input = tgui_input_text(usr, "Enter content URL (supported sites only, leave blank to stop playing)", "Play Internet Sound", null) + + if(length(web_sound_input)) + web_sound_input = trim(web_sound_input) + if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) + to_chat(src, "Non-http(s) URIs are not allowed.", confidential = TRUE) + to_chat(src, "For youtube-dl shortcuts like ytsearch: please use the appropriate full URL from the website.", confidential = TRUE) + return + web_sound(usr, web_sound_input) + else + web_sound(usr, null) + +/client/proc/stop_sounds() + set category = "Debug" + set name = "Stop All Playing Sounds" + if(!src.holder) + return + + log_admin("[key_name(src)] stopped all currently playing sounds.") + message_admins("[key_name_admin(src)] stopped all currently playing sounds.") + for(var/mob/M in player_list) + SEND_SOUND(M, sound(null)) + var/client/C = M.client + C?.tgui_panel?.stop_music() + + S_TIMER_COOLDOWN_RESET(SStimer, COOLDOWN_INTERNET_SOUND) + feedback_add_details("admin_verb", "Stop All Playing Sounds") + +//world/proc/shelleo +#undef SHELLEO_ERRORLEVEL +#undef SHELLEO_STDOUT +#undef SHELLEO_STDERR + +/* +/client/proc/cuban_pete() + set category = "Fun" + set name = "Cuban Pete Time" + + message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1) + for(var/mob/M in player_list) + if(M.client) + if(M.client.midis) + M << 'cubanpetetime.ogg' + + for(var/mob/living/carbon/human/CP in human_mob_list) + if(CP.real_name=="Cuban Pete" && CP.key!="Rosham") + to_chat(CP, "Your body can't contain the rhumba beat") + CP.gib() + + +/client/proc/bananaphone() + set category = "Fun" + set name = "Banana Phone" + + message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1) + for(var/mob/M in player_list) + if(M.client) + if(M.client.midis) + M << 'bananaphone.ogg' + + +/client/proc/space_asshole() + set category = "Fun" + set name = "Space Asshole" + + message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1) + for(var/mob/M in player_list) + if(M.client) + if(M.client.midis) + M << 'sound/music/space_asshole.ogg' + + +/client/proc/honk_theme() + set category = "Fun" + set name = "Honk" + + message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1) + for(var/mob/M in player_list) + if(M.client) + if(M.client.midis) + M << 'honk_theme.ogg'*/ diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 0a2e303712..86bda7de8a 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -1,285 +1,285 @@ -/client/proc/debug_variables(datum/D in world) - set category = "Debug" - set name = "View Variables" - //set src in world - var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round. - - if(!usr.client || !usr.client.holder) //The usr vs src abuse in this proc is intentional and must not be changed - to_chat(usr, "You need to be an administrator to access this.") - return - - if(!D) - return - - var/islist = islist(D) - if (!islist && !istype(D)) - return - - //VOREStation Edit Start - the rest of this proc in a spawn - spawn(0) - var/title = "" - var/refid = "\ref[D]" - var/icon/sprite - var/hash - - var/type = /list - if (!islist) - type = D.type - - if(istype(D, /atom)) - var/atom/AT = D - if(AT.icon && AT.icon_state) - sprite = new /icon(AT.icon, AT.icon_state) - hash = md5(AT.icon) - hash = md5(hash + AT.icon_state) - src << browse_rsc(sprite, "vv[hash].png") - - title = "[D] (\ref[D]) = [type]" - var/formatted_type = replacetext("[type]", "/", "/") - - var/sprite_text - if(sprite) - sprite_text = "" - var/list/header = islist(D)? list("/list") : D.vv_get_header() - - var/marked - if(holder && holder.marked_datum && holder.marked_datum == D) - marked = VV_MSG_MARKED - var/varedited_line = "" - if(!islist && (D.datum_flags & DF_VAR_EDITED)) - varedited_line = VV_MSG_EDITED - var/deleted_line - if(!islist && D.gc_destroyed) - deleted_line = VV_MSG_DELETED - - var/list/dropdownoptions = list() - var/autoconvert_dropdown = FALSE - if (islist) - dropdownoptions = list( - "---", - "Add Item" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ADD]=TRUE;target=[refid]", - "Remove Nulls" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_NULLS]=TRUE;target=[refid]", - "Remove Dupes" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_DUPES]=TRUE;target=[refid]", - "Set len" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SET_LENGTH]=TRUE;target=[refid]", - "Shuffle" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SHUFFLE]=TRUE;target=[refid]", - // "Show VV To Player" = "?_src_=vars;[HrefToken()];[VV_HK_EXPOSE]=TRUE;target=[refid]" // TODO - Not yet implemented for lists - ) - autoconvert_dropdown = TRUE - else - dropdownoptions = D.vv_get_dropdown() - var/list/dropdownoptions_html = list() - if(autoconvert_dropdown) - for (var/name in dropdownoptions) - var/link = dropdownoptions[name] - if (link) - dropdownoptions_html += "" - else - dropdownoptions_html += "" - else - dropdownoptions_html = dropdownoptions + D.get_view_variables_options() - - var/list/names = list() - if (!islist) - names = D.get_variables() - //sleep(1)//For some reason, without this sleep, VVing will cause client to disconnect on certain objects. //VOREStation edit - commented out, replaced with spawn(0) above - - var/list/variable_html = list() - if (islist) - var/list/L = D - for (var/i in 1 to L.len) - var/key = L[i] - var/value - if (IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key)) - value = L[key] - variable_html += debug_variable(i, value, 0, D) - else - - names = sortList(names) - for (var/V in names) - if(D.can_vv_get(V)) - variable_html += D.vv_get_var(V) - - var/html = {" - - - [title] - - - - -
                    - - - - - -
                    - - - - -
                    - [sprite_text] -
                    - [header.Join()] -
                    -
                    -
                    - [formatted_type] - [marked] - [varedited_line] - [deleted_line] -
                    -
                    -
                    - Refresh -
                    - -
                    -
                    -
                    -
                    -
                    - - E - Edit, tries to determine the variable type by itself.
                    - C - Change, asks you for the var type first.
                    - M - Mass modify: changes this variable for all objects of this type.
                    -
                    -
                    - - - - - -
                    -
                    - Search: -
                    -
                    - -
                    -
                    -
                      - [variable_html.Join()] -
                    - - - - "} - src << browse(html, "window=variables[refid];size=475x650") //VOREStation edit end - -/client/proc/vv_update_display(datum/D, span, content) - src << output("[span]:[content]", "variables\ref[D].browser:replace_span") +/client/proc/debug_variables(datum/D in world) + set category = "Debug" + set name = "View Variables" + //set src in world + var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round. + + if(!usr.client || !usr.client.holder) //The usr vs src abuse in this proc is intentional and must not be changed + to_chat(usr, "You need to be an administrator to access this.") + return + + if(!D) + return + + var/islist = islist(D) + if (!islist && !istype(D)) + return + + //VOREStation Edit Start - the rest of this proc in a spawn + spawn(0) + var/title = "" + var/refid = "\ref[D]" + var/icon/sprite + var/hash + + var/type = /list + if (!islist) + type = D.type + + if(istype(D, /atom)) + var/atom/AT = D + if(AT.icon && AT.icon_state) + sprite = new /icon(AT.icon, AT.icon_state) + hash = md5(AT.icon) + hash = md5(hash + AT.icon_state) + src << browse_rsc(sprite, "vv[hash].png") + + title = "[D] (\ref[D]) = [type]" + var/formatted_type = replacetext("[type]", "/", "/") + + var/sprite_text + if(sprite) + sprite_text = "" + var/list/header = islist(D)? list("/list") : D.vv_get_header() + + var/marked + if(holder && holder.marked_datum && holder.marked_datum == D) + marked = VV_MSG_MARKED + var/varedited_line = "" + if(!islist && (D.datum_flags & DF_VAR_EDITED)) + varedited_line = VV_MSG_EDITED + var/deleted_line + if(!islist && D.gc_destroyed) + deleted_line = VV_MSG_DELETED + + var/list/dropdownoptions = list() + var/autoconvert_dropdown = FALSE + if (islist) + dropdownoptions = list( + "---", + "Add Item" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ADD]=TRUE;target=[refid]", + "Remove Nulls" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_NULLS]=TRUE;target=[refid]", + "Remove Dupes" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_DUPES]=TRUE;target=[refid]", + "Set len" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SET_LENGTH]=TRUE;target=[refid]", + "Shuffle" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SHUFFLE]=TRUE;target=[refid]", + // "Show VV To Player" = "?_src_=vars;[HrefToken()];[VV_HK_EXPOSE]=TRUE;target=[refid]" // TODO - Not yet implemented for lists + ) + autoconvert_dropdown = TRUE + else + dropdownoptions = D.vv_get_dropdown() + var/list/dropdownoptions_html = list() + if(autoconvert_dropdown) + for (var/name in dropdownoptions) + var/link = dropdownoptions[name] + if (link) + dropdownoptions_html += "" + else + dropdownoptions_html += "" + else + dropdownoptions_html = dropdownoptions + D.get_view_variables_options() + + var/list/names = list() + if (!islist) + names = D.get_variables() + //sleep(1)//For some reason, without this sleep, VVing will cause client to disconnect on certain objects. //VOREStation edit - commented out, replaced with spawn(0) above + + var/list/variable_html = list() + if (islist) + var/list/L = D + for (var/i in 1 to L.len) + var/key = L[i] + var/value + if (IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key)) + value = L[key] + variable_html += debug_variable(i, value, 0, D) + else + + names = sortList(names) + for (var/V in names) + if(D.can_vv_get(V)) + variable_html += D.vv_get_var(V) + + var/html = {" + + + [title] + + + + +
                    + + + + + +
                    + + + + +
                    + [sprite_text] +
                    + [header.Join()] +
                    +
                    +
                    + [formatted_type] + [marked] + [varedited_line] + [deleted_line] +
                    +
                    +
                    + Refresh +
                    + +
                    +
                    +
                    +
                    +
                    + + E - Edit, tries to determine the variable type by itself.
                    + C - Change, asks you for the var type first.
                    + M - Mass modify: changes this variable for all objects of this type.
                    +
                    +
                    + + + + + +
                    +
                    + Search: +
                    +
                    + +
                    +
                    +
                      + [variable_html.Join()] +
                    + + + + "} + src << browse(html, "window=variables[refid];size=475x650") //VOREStation edit end + +/client/proc/vv_update_display(datum/D, span, content) + src << output("[span]:[content]", "variables\ref[D].browser:replace_span") diff --git a/code/modules/ai/ai_holder_disabled.dm b/code/modules/ai/ai_holder_disabled.dm index ed2dc6cd4f..cffce1e064 100644 --- a/code/modules/ai/ai_holder_disabled.dm +++ b/code/modules/ai/ai_holder_disabled.dm @@ -1,104 +1,104 @@ -// Handles AI while stunned or otherwise disabled. - -/datum/ai_holder - var/respect_confusion = TRUE // If false, the mob won't wander around recklessly. - -// If our holder is able to do anything. -/datum/ai_holder/proc/can_act() - if(!holder) // Holder missing. - manage_processing(0) - return FALSE - if(holder.stat) // Dead or unconscious. - ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE) - return FALSE - if(holder.incapacitated(INCAPACITATION_DISABLED)) // Stunned in some form. - ai_log("can_act() : Incapacited.", AI_LOG_TRACE) - return FALSE - if(holder.instasis()) // In a stasis field. - ai_log("can_act() : In a stasis field.", AI_LOG_TRACE) - return FALSE - if(!belly_attack) - if(isbelly(holder.loc)) - return FALSE - return TRUE - -// Test if we should switch to STANCE_DISABLE. -// Currently tests for death, stuns, and confusion. -/datum/ai_holder/proc/is_disabled() - if(!can_act()) - return TRUE - if(is_confused()) - return TRUE - return FALSE - -/datum/ai_holder/proc/is_confused() - return holder.confused > 0 && respect_confusion - -// Called by the main loop. -/datum/ai_holder/proc/handle_disabled() - if(!can_act()) - return // Just sit there and take it. - else if(is_confused()) - dangerous_wander() // Let's bump into allies and hit them. - -// Similar to normal wander, but will walk into tiles that are harmful, and attack anything they bump into, including allies. -// Occurs when confused. -/datum/ai_holder/proc/dangerous_wander() - ai_log("dangerous_wander() : Entered.", AI_LOG_DEBUG) - if(isturf(holder.loc) && can_act()) - // Test if we should refrain from falling/attacking allies, if we're smart enough to realize that. - if(intelligence_level > AI_NORMAL) - var/unsafe = FALSE - - tile_test: - for(var/dir_tested in cardinal) - var/turf/turf_tested = get_step(holder, dir_tested) - // Look for unsafe tiles. - if(!turf_tested.is_safe_to_enter(holder)) - unsafe = TRUE - break - - // Look for allies. - for(var/mob/living/L in turf_tested) - if(holder.IIsAlly(L)) - unsafe = TRUE - break tile_test - - - if(unsafe) - ai_log("dangerous_wander() : Staying still due to risk of harm to self or allies.", AI_LOG_TRACE) - return // Just stay still. - - var/moving_to = 0 - moving_to = pick(cardinal) - var/turf/T = get_step(holder, moving_to) - - var/mob/living/L = locate() in T - if(L) - // Attack whoever's on the tile. Even if it's an ally. - ai_log("dangerous_wander() : Going to confuse-attack [L].", AI_LOG_TRACE) - melee_attack(L) - else - // Move to the tile. Even if it's unsafe. - ai_log("dangerous_wander() : Going to confuse-walk to [T] ([T.x],[T.y],[T.z]).", AI_LOG_TRACE) - holder.IMove(T, safety = FALSE) - ai_log("dangerous_wander() : Exited.", AI_LOG_DEBUG) - -/* -// Wanders randomly in cardinal directions. -/datum/ai_holder/proc/handle_wander_movement() - ai_log("handle_wander_movement() : Entered.", AI_LOG_DEBUG) - if(isturf(holder.loc) && can_act()) - wander_delay-- - if(wander_delay <= 0) - if(!wander_when_pulled && holder.pulledby) - ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG) - return - - var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI. - moving_to = pick(cardinal) - holder.set_dir(moving_to) - holder.IMove(get_step(holder,moving_to)) - wander_delay = base_wander_delay - ai_log("handle_wander_movement() : Exited.", AI_LOG_DEBUG) -*/ +// Handles AI while stunned or otherwise disabled. + +/datum/ai_holder + var/respect_confusion = TRUE // If false, the mob won't wander around recklessly. + +// If our holder is able to do anything. +/datum/ai_holder/proc/can_act() + if(!holder) // Holder missing. + manage_processing(0) + return FALSE + if(holder.stat) // Dead or unconscious. + ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE) + return FALSE + if(holder.incapacitated(INCAPACITATION_DISABLED)) // Stunned in some form. + ai_log("can_act() : Incapacited.", AI_LOG_TRACE) + return FALSE + if(holder.instasis()) // In a stasis field. + ai_log("can_act() : In a stasis field.", AI_LOG_TRACE) + return FALSE + if(!belly_attack) + if(isbelly(holder.loc)) + return FALSE + return TRUE + +// Test if we should switch to STANCE_DISABLE. +// Currently tests for death, stuns, and confusion. +/datum/ai_holder/proc/is_disabled() + if(!can_act()) + return TRUE + if(is_confused()) + return TRUE + return FALSE + +/datum/ai_holder/proc/is_confused() + return holder.confused > 0 && respect_confusion + +// Called by the main loop. +/datum/ai_holder/proc/handle_disabled() + if(!can_act()) + return // Just sit there and take it. + else if(is_confused()) + dangerous_wander() // Let's bump into allies and hit them. + +// Similar to normal wander, but will walk into tiles that are harmful, and attack anything they bump into, including allies. +// Occurs when confused. +/datum/ai_holder/proc/dangerous_wander() + ai_log("dangerous_wander() : Entered.", AI_LOG_DEBUG) + if(isturf(holder.loc) && can_act()) + // Test if we should refrain from falling/attacking allies, if we're smart enough to realize that. + if(intelligence_level > AI_NORMAL) + var/unsafe = FALSE + + tile_test: + for(var/dir_tested in cardinal) + var/turf/turf_tested = get_step(holder, dir_tested) + // Look for unsafe tiles. + if(!turf_tested.is_safe_to_enter(holder)) + unsafe = TRUE + break + + // Look for allies. + for(var/mob/living/L in turf_tested) + if(holder.IIsAlly(L)) + unsafe = TRUE + break tile_test + + + if(unsafe) + ai_log("dangerous_wander() : Staying still due to risk of harm to self or allies.", AI_LOG_TRACE) + return // Just stay still. + + var/moving_to = 0 + moving_to = pick(cardinal) + var/turf/T = get_step(holder, moving_to) + + var/mob/living/L = locate() in T + if(L) + // Attack whoever's on the tile. Even if it's an ally. + ai_log("dangerous_wander() : Going to confuse-attack [L].", AI_LOG_TRACE) + melee_attack(L) + else + // Move to the tile. Even if it's unsafe. + ai_log("dangerous_wander() : Going to confuse-walk to [T] ([T.x],[T.y],[T.z]).", AI_LOG_TRACE) + holder.IMove(T, safety = FALSE) + ai_log("dangerous_wander() : Exited.", AI_LOG_DEBUG) + +/* +// Wanders randomly in cardinal directions. +/datum/ai_holder/proc/handle_wander_movement() + ai_log("handle_wander_movement() : Entered.", AI_LOG_DEBUG) + if(isturf(holder.loc) && can_act()) + wander_delay-- + if(wander_delay <= 0) + if(!wander_when_pulled && holder.pulledby) + ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG) + return + + var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI. + moving_to = pick(cardinal) + holder.set_dir(moving_to) + holder.IMove(get_step(holder,moving_to)) + wander_delay = base_wander_delay + ai_log("handle_wander_movement() : Exited.", AI_LOG_DEBUG) +*/ diff --git a/code/modules/ai/ai_holder_subtypes/simple_mob_ai_ch.dm b/code/modules/ai/ai_holder_subtypes/simple_mob_ai_ch.dm index 3d45de567c..0ed017a4e5 100644 --- a/code/modules/ai/ai_holder_subtypes/simple_mob_ai_ch.dm +++ b/code/modules/ai/ai_holder_subtypes/simple_mob_ai_ch.dm @@ -1,13 +1,13 @@ -/datum/ai_holder/simple_mob/melee/pack_mob - cooperative = TRUE - call_distance = 28 // pack mobs should be able to communicate quite a ways - we can assume by howls/etc - can_flee = TRUE - mauling = TRUE // Kill/finish off unconscious people. - vision_range = 12 // This is a bit cheaty - normal vision range is 7 tiles, one screen, setting that to 10 allows us to track targets offscreen by up to 5 tiles, and make for an easier time keeping chase of targets. - flee_when_dying = TRUE // animals know to run when wounded/overmatched - flee_when_outmatched = TRUE // animals know to run when wounded/overmatched - -/datum/ai_holder/simple_mob/melee/pack_mob/post_melee_attack(atom/A) - if(holder.Adjacent(A)) - holder.IMove(get_step(holder, pick(alldirs))) - holder.face_atom(A) +/datum/ai_holder/simple_mob/melee/pack_mob + cooperative = TRUE + call_distance = 28 // pack mobs should be able to communicate quite a ways - we can assume by howls/etc + can_flee = TRUE + mauling = TRUE // Kill/finish off unconscious people. + vision_range = 12 // This is a bit cheaty - normal vision range is 7 tiles, one screen, setting that to 10 allows us to track targets offscreen by up to 5 tiles, and make for an easier time keeping chase of targets. + flee_when_dying = TRUE // animals know to run when wounded/overmatched + flee_when_outmatched = TRUE // animals know to run when wounded/overmatched + +/datum/ai_holder/simple_mob/melee/pack_mob/post_melee_attack(atom/A) + if(holder.Adjacent(A)) + holder.IMove(get_step(holder, pick(alldirs))) + holder.face_atom(A) diff --git a/code/modules/ai/ai_holder_subtypes/slime_xenobio_ai.dm b/code/modules/ai/ai_holder_subtypes/slime_xenobio_ai.dm index 210a41239f..b738b2bbb7 100644 --- a/code/modules/ai/ai_holder_subtypes/slime_xenobio_ai.dm +++ b/code/modules/ai/ai_holder_subtypes/slime_xenobio_ai.dm @@ -1,316 +1,316 @@ -// Specialized AI for slime simplemobs. -// Unlike the parent AI code, this will probably break a lot of things if you put it on something that isn't /mob/living/simple_mob/slime/xenobio - -/datum/ai_holder/simple_mob/xenobio_slime - hostile = TRUE - cooperative = TRUE - firing_lanes = TRUE - mauling = TRUE // They need it to get the most out of monkeys. - var/rabid = FALSE // Will attack regardless of discipline. - var/discipline = 0 // Beating slimes makes them less likely to lash out. In theory. - var/resentment = 0 // 'Unjustified' beatings make this go up, and makes it more likely for abused slimes to go rabid. - var/obedience = 0 // Conversely, 'justified' beatings make this go up, and makes discipline decay slower, potentially making it not decay at all. - - var/always_stun = FALSE // If true, the slime will elect to attempt to permastun the target. - - var/last_discipline_decay = null // Last world.time discipline was reduced from decay. - var/discipline_decay_time = 5 SECONDS // Earliest that one discipline can decay. - - var/list/grudges = list() // List of Prometheans who are jerks. - -/datum/ai_holder/simple_mob/xenobio_slime/Destroy() - grudges.Cut() - ..() - -/datum/ai_holder/simple_mob/xenobio_slime/sapphire - always_stun = TRUE // They know that stuns are godly. - intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. - -/datum/ai_holder/simple_mob/xenobio_slime/light_pink - discipline = 10 - obedience = 10 - -/datum/ai_holder/simple_mob/xenobio_slime/passive/New() // For Kendrick. - ..() - pacify() - -/datum/ai_holder/simple_mob/xenobio_slime/New() - ..() - ASSERT(istype(holder, /mob/living/simple_mob/slime/xenobio)) - -// Checks if disciplining the slime would be 'justified' right now. -/datum/ai_holder/simple_mob/xenobio_slime/proc/is_justified_to_discipline() - ai_log("xenobio_slime/is_justified_to_discipline() : Entered.", AI_LOG_TRACE) - if(!can_act()) - ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we cannot act. Exiting.", AI_LOG_DEBUG) - return FALSE // The slime considers it abuse if they get stunned while already stunned. - if(rabid) - ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be justified because we're rabid. Exiting.", AI_LOG_TRACE) - return TRUE - if(target && can_attack(target)) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(istype(H.species, /datum/species/monkey)) - ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we're targeting a monkey. Exiting.", AI_LOG_DEBUG) - return FALSE // Attacking monkeys is okay. - ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be justified because we are targeting a non-monkey. Exiting.", AI_LOG_TRACE) - return TRUE // Otherwise attacking other things is bad. - ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we are not targeting anything. Exiting.", AI_LOG_DEBUG) - return FALSE // Not attacking anything. - -/datum/ai_holder/simple_mob/xenobio_slime/proc/can_command(mob/living/commander) - if(rabid) - return FALSE - if(!hostile) - return SLIME_COMMAND_OBEY -// if(commander in friends) -// return SLIME_COMMAND_FRIEND - if(holder.IIsAlly(commander)) - return SLIME_COMMAND_FACTION - if(discipline > resentment && obedience >= 5) - return SLIME_COMMAND_OBEY - return FALSE - -/datum/ai_holder/simple_mob/xenobio_slime/proc/adjust_discipline(amount, silent) - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - if(amount > 0) - if(rabid) - return - if(my_slime.untamable) - holder.say("Grrr...") - holder.add_modifier(/datum/modifier/berserk, 30 SECONDS) - enrage() - var/justified = my_slime.is_justified_to_discipline() // This will also consider the AI-side of that proc. - remove_target() // Stop attacking. - - if(justified) - obedience++ - if(!silent) - holder.say(pick("Fine...", "Okay...", "Sorry...", "I yield...", "Mercy...")) - else - if(prob(resentment * 20)) - enrage() - holder.say(pick("Evil...", "Kill...", "Tyrant...")) - else - if(!silent) - holder.say(pick("Why...?", "I don't understand...?", "Cruel...", "Stop...", "Nooo...")) - resentment++ // Done after check so first time will never enrage. - - discipline = between(0, discipline + amount, 10) - my_slime.update_mood() - -/datum/ai_holder/simple_mob/xenobio_slime/handle_special_strategical() - discipline_decay() - evolve_and_reproduce() - -/datum/ai_holder/simple_mob/xenobio_slime/request_help() - if(target) - if(istype(target, /mob/living/simple_mob/slime/xenobio)) //Don't call reinforcements for internal disputes - return - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - if(istype(H.species, /datum/species/monkey)) //Or for food - return - ..() - -// Handles decay of discipline. -/datum/ai_holder/simple_mob/xenobio_slime/proc/discipline_decay() - if(discipline > 0 && last_discipline_decay + discipline_decay_time < world.time) - if(!prob(75 + (obedience * 5))) - adjust_discipline(-1) - last_discipline_decay = world.time - -/datum/ai_holder/simple_mob/xenobio_slime/handle_special_tactic() - evolve_and_reproduce() - -/datum/ai_holder/simple_mob/xenobio_slime/handle_stance_tactical() - if(!istype(holder) || QDELETED(holder)) - qdel(src) - return - ..() - -// Hit the correct verbs to keep the slime species going. -/datum/ai_holder/simple_mob/xenobio_slime/proc/evolve_and_reproduce() - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - if(my_slime.amount_grown >= 10) - // Press the correct verb when we can. - if(my_slime.is_adult) - my_slime.reproduce() // Splits into four new baby slimes. - else - my_slime.evolve() // Turns our holder into an adult slime. - - -// Called when pushed too far (or a red slime core was used). -/datum/ai_holder/simple_mob/xenobio_slime/proc/enrage() - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - if(my_slime.harmless) - return - rabid = TRUE - my_slime.update_mood() - my_slime.visible_message(span("danger", "\The [my_slime] enrages!")) - -// Called to relax from being rabid (when blue slime core was used). -/datum/ai_holder/simple_mob/xenobio_slime/proc/relax() - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - if(my_slime.harmless) - return - if(rabid) - rabid = FALSE - my_slime.update_mood() - my_slime.visible_message(span("danger", "\The [my_slime] calms down.")) - -// Called when using a pacification agent (or it's Kendrick being initalized). -/datum/ai_holder/simple_mob/xenobio_slime/proc/pacify() - remove_target() // So it stops trying to kill them. - rabid = FALSE - hostile = FALSE - retaliate = FALSE - cooperative = FALSE - holder.a_intent = I_HELP - -// The holder's attack changes based on intent. This lets the AI choose what effect is desired. -/datum/ai_holder/simple_mob/xenobio_slime/pre_melee_attack(atom/A) - if(istype(A, /mob/living)) - var/mob/living/L = A - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - - if( (!L.lying && prob(30 + (my_slime.power_charge * 7) ) || (!L.lying && always_stun) )) - my_slime.a_intent = I_DISARM // Stun them first. - else if(my_slime.can_consume(L) && L.lying) - my_slime.a_intent = I_GRAB // Then eat them. - else - my_slime.a_intent = I_HURT // Otherwise robust them. - -/datum/ai_holder/simple_mob/xenobio_slime/closest_distance(atom/movable/AM) - if(istype(AM, /mob/living)) - var/mob/living/L = AM - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(istype(H.species, /datum/species/monkey)) - return 1 // Otherwise ranged slimes will eat a lot less often. - if(L.stat >= UNCONSCIOUS) - return 1 // Melee (eat) the target if dead/dying, don't shoot it. - return ..() - -/datum/ai_holder/simple_mob/xenobio_slime/can_attack(atom/movable/AM, var/vision_required = TRUE) - . = ..() - if(.) // Do some additional checks because we have Special Code(tm). - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. - return TRUE // Monkeys are always food (sorry Pun Pun). - else if(H.species && H.species.name == SPECIES_PROMETHEAN) // Prometheans are always our friends. - if(!(H in grudges)) // Unless they're an ass. - return FALSE - if(discipline && !rabid) - holder.a_intent = I_HELP - return FALSE // We're a good slime. - -/datum/ai_holder/simple_mob/xenobio_slime/react_to_attack(atom/movable/attacker) - . = ..(attacker) - - if(ishuman(attacker)) - var/mob/living/carbon/human/H = attacker - if(H.species && H.species.name == SPECIES_PROMETHEAN) // They're a jerk. - grudges |= H - -// Commands, reactions, etc -/datum/ai_holder/simple_mob/xenobio_slime/on_hear_say(mob/living/speaker, message) - ai_log("xenobio_slime/on_hear_say([speaker], [message]) : Entered.", AI_LOG_DEBUG) - var/mob/living/simple_mob/slime/xenobio/my_slime = holder - - if((findtext(message, num2text(my_slime.number)) || findtext(message, my_slime.name) || findtext(message, "slimes"))) // Talking to us. - - // First, make sure it's actually a player saying something and not an AI, or else we risk infinite loops. - if(!speaker.client) - return - - // Are all slimes being referred to? - // var/mass_order = FALSE - // if(findtext(message, "slimes")) - // mass_order = TRUE - - // Say hello back. - if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings")) - delayed_say(pick("Hello...", "Hi..."), speaker) - - // Follow request. - if(findtext(message, "follow") || findtext(message, "come with me")) - if(!can_command(speaker)) - delayed_say(pick("No...", "I won't follow..."), speaker) - return - - delayed_say("Yes... I follow \the [speaker]...", speaker) - set_follow(speaker) - - // Squish request. - if(findtext(message , "squish")) - if(!can_command(speaker)) - delayed_say("No...", speaker) - return - - spawn(rand(1 SECOND, 2 SECONDS)) - if(!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime. - return - my_slime.squish() - - - // Stop request. - if(findtext(message, "stop") || findtext(message, "halt") || findtext(message, "cease")) - if(my_slime.victim) // We're being asked to stop eatting someone. - if(!can_command(speaker) || !is_justified_to_discipline()) - delayed_say("No...", speaker) - return - else - delayed_say("Fine...", speaker) - adjust_discipline(1, TRUE) - my_slime.stop_consumption() - - if(target) // We're being asked to stop chasing someone. - if(!can_command(speaker) || !is_justified_to_discipline()) - delayed_say("No...", speaker) - return - else - delayed_say("Fine...", speaker) - adjust_discipline(1, TRUE) // This must come before losing the target or it will be unjustified. - remove_target() - - - if(leader) // We're being asked to stop following someone. - if(can_command(speaker) == SLIME_COMMAND_FRIEND || leader == speaker) - delayed_say("Yes... I'll stop...", speaker) - lose_follow() - else - delayed_say("No... I'll keep following \the [leader]...", speaker) - - /* // Commented out since its mostly useless now due to slimes refusing to attack if it would make them naughty. - // Murder request - if(findtext(message, "harm") || findtext(message, "attack") || findtext(message, "kill") || findtext(message, "murder") || findtext(message, "eat") || findtext(message, "consume") || findtext(message, "absorb")) - if(can_command(speaker) < SLIME_COMMAND_FACTION) - delayed_say("No...", speaker) - return - - for(var/mob/living/L in view(7, my_slime) - list(my_slime, speaker)) - if(L == src) - continue // Don't target ourselves. - var/list/valid_names = splittext(L.name, " ") // Should output list("John", "Doe") as an example. - for(var/line in valid_names) // Check each part of someone's name. - if(findtext(message, lowertext(line))) // If part of someone's name is in the command, the slime targets them if allowed to. - if(!(mass_order && line == "slime")) //don't think random other slimes are target - if(can_attack(L)) - delayed_say("Okay... I attack \the [L]...", speaker) - give_target(L) - return - else - delayed_say("No... I won't attack \the [L].", speaker) - return - - // If we're here, it couldn't find anyone with that name. - delayed_say("No... I don't know who to attack...", speaker) - */ - ai_log("xenobio_slime/on_hear_say() : Exited.", AI_LOG_DEBUG) - -/datum/ai_holder/simple_mob/xenobio_slime/can_violently_breakthrough() - if(discipline && !rabid) // Good slimes don't shatter the windows because their buddy in an adjacent cell decided to piss off Slimesky. - return FALSE - return ..() +// Specialized AI for slime simplemobs. +// Unlike the parent AI code, this will probably break a lot of things if you put it on something that isn't /mob/living/simple_mob/slime/xenobio + +/datum/ai_holder/simple_mob/xenobio_slime + hostile = TRUE + cooperative = TRUE + firing_lanes = TRUE + mauling = TRUE // They need it to get the most out of monkeys. + var/rabid = FALSE // Will attack regardless of discipline. + var/discipline = 0 // Beating slimes makes them less likely to lash out. In theory. + var/resentment = 0 // 'Unjustified' beatings make this go up, and makes it more likely for abused slimes to go rabid. + var/obedience = 0 // Conversely, 'justified' beatings make this go up, and makes discipline decay slower, potentially making it not decay at all. + + var/always_stun = FALSE // If true, the slime will elect to attempt to permastun the target. + + var/last_discipline_decay = null // Last world.time discipline was reduced from decay. + var/discipline_decay_time = 5 SECONDS // Earliest that one discipline can decay. + + var/list/grudges = list() // List of Prometheans who are jerks. + +/datum/ai_holder/simple_mob/xenobio_slime/Destroy() + grudges.Cut() + ..() + +/datum/ai_holder/simple_mob/xenobio_slime/sapphire + always_stun = TRUE // They know that stuns are godly. + intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. + +/datum/ai_holder/simple_mob/xenobio_slime/light_pink + discipline = 10 + obedience = 10 + +/datum/ai_holder/simple_mob/xenobio_slime/passive/New() // For Kendrick. + ..() + pacify() + +/datum/ai_holder/simple_mob/xenobio_slime/New() + ..() + ASSERT(istype(holder, /mob/living/simple_mob/slime/xenobio)) + +// Checks if disciplining the slime would be 'justified' right now. +/datum/ai_holder/simple_mob/xenobio_slime/proc/is_justified_to_discipline() + ai_log("xenobio_slime/is_justified_to_discipline() : Entered.", AI_LOG_TRACE) + if(!can_act()) + ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we cannot act. Exiting.", AI_LOG_DEBUG) + return FALSE // The slime considers it abuse if they get stunned while already stunned. + if(rabid) + ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be justified because we're rabid. Exiting.", AI_LOG_TRACE) + return TRUE + if(target && can_attack(target)) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(istype(H.species, /datum/species/monkey)) + ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we're targeting a monkey. Exiting.", AI_LOG_DEBUG) + return FALSE // Attacking monkeys is okay. + ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be justified because we are targeting a non-monkey. Exiting.", AI_LOG_TRACE) + return TRUE // Otherwise attacking other things is bad. + ai_log("xenobio_slime/is_justified_to_discipline() : Judged to be unjustified because we are not targeting anything. Exiting.", AI_LOG_DEBUG) + return FALSE // Not attacking anything. + +/datum/ai_holder/simple_mob/xenobio_slime/proc/can_command(mob/living/commander) + if(rabid) + return FALSE + if(!hostile) + return SLIME_COMMAND_OBEY +// if(commander in friends) +// return SLIME_COMMAND_FRIEND + if(holder.IIsAlly(commander)) + return SLIME_COMMAND_FACTION + if(discipline > resentment && obedience >= 5) + return SLIME_COMMAND_OBEY + return FALSE + +/datum/ai_holder/simple_mob/xenobio_slime/proc/adjust_discipline(amount, silent) + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + if(amount > 0) + if(rabid) + return + if(my_slime.untamable) + holder.say("Grrr...") + holder.add_modifier(/datum/modifier/berserk, 30 SECONDS) + enrage() + var/justified = my_slime.is_justified_to_discipline() // This will also consider the AI-side of that proc. + remove_target() // Stop attacking. + + if(justified) + obedience++ + if(!silent) + holder.say(pick("Fine...", "Okay...", "Sorry...", "I yield...", "Mercy...")) + else + if(prob(resentment * 20)) + enrage() + holder.say(pick("Evil...", "Kill...", "Tyrant...")) + else + if(!silent) + holder.say(pick("Why...?", "I don't understand...?", "Cruel...", "Stop...", "Nooo...")) + resentment++ // Done after check so first time will never enrage. + + discipline = between(0, discipline + amount, 10) + my_slime.update_mood() + +/datum/ai_holder/simple_mob/xenobio_slime/handle_special_strategical() + discipline_decay() + evolve_and_reproduce() + +/datum/ai_holder/simple_mob/xenobio_slime/request_help() + if(target) + if(istype(target, /mob/living/simple_mob/slime/xenobio)) //Don't call reinforcements for internal disputes + return + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = target + if(istype(H.species, /datum/species/monkey)) //Or for food + return + ..() + +// Handles decay of discipline. +/datum/ai_holder/simple_mob/xenobio_slime/proc/discipline_decay() + if(discipline > 0 && last_discipline_decay + discipline_decay_time < world.time) + if(!prob(75 + (obedience * 5))) + adjust_discipline(-1) + last_discipline_decay = world.time + +/datum/ai_holder/simple_mob/xenobio_slime/handle_special_tactic() + evolve_and_reproduce() + +/datum/ai_holder/simple_mob/xenobio_slime/handle_stance_tactical() + if(!istype(holder) || QDELETED(holder)) + qdel(src) + return + ..() + +// Hit the correct verbs to keep the slime species going. +/datum/ai_holder/simple_mob/xenobio_slime/proc/evolve_and_reproduce() + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + if(my_slime.amount_grown >= 10) + // Press the correct verb when we can. + if(my_slime.is_adult) + my_slime.reproduce() // Splits into four new baby slimes. + else + my_slime.evolve() // Turns our holder into an adult slime. + + +// Called when pushed too far (or a red slime core was used). +/datum/ai_holder/simple_mob/xenobio_slime/proc/enrage() + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + if(my_slime.harmless) + return + rabid = TRUE + my_slime.update_mood() + my_slime.visible_message(span("danger", "\The [my_slime] enrages!")) + +// Called to relax from being rabid (when blue slime core was used). +/datum/ai_holder/simple_mob/xenobio_slime/proc/relax() + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + if(my_slime.harmless) + return + if(rabid) + rabid = FALSE + my_slime.update_mood() + my_slime.visible_message(span("danger", "\The [my_slime] calms down.")) + +// Called when using a pacification agent (or it's Kendrick being initalized). +/datum/ai_holder/simple_mob/xenobio_slime/proc/pacify() + remove_target() // So it stops trying to kill them. + rabid = FALSE + hostile = FALSE + retaliate = FALSE + cooperative = FALSE + holder.a_intent = I_HELP + +// The holder's attack changes based on intent. This lets the AI choose what effect is desired. +/datum/ai_holder/simple_mob/xenobio_slime/pre_melee_attack(atom/A) + if(istype(A, /mob/living)) + var/mob/living/L = A + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + + if( (!L.lying && prob(30 + (my_slime.power_charge * 7) ) || (!L.lying && always_stun) )) + my_slime.a_intent = I_DISARM // Stun them first. + else if(my_slime.can_consume(L) && L.lying) + my_slime.a_intent = I_GRAB // Then eat them. + else + my_slime.a_intent = I_HURT // Otherwise robust them. + +/datum/ai_holder/simple_mob/xenobio_slime/closest_distance(atom/movable/AM) + if(istype(AM, /mob/living)) + var/mob/living/L = AM + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(istype(H.species, /datum/species/monkey)) + return 1 // Otherwise ranged slimes will eat a lot less often. + if(L.stat >= UNCONSCIOUS) + return 1 // Melee (eat) the target if dead/dying, don't shoot it. + return ..() + +/datum/ai_holder/simple_mob/xenobio_slime/can_attack(atom/movable/AM, var/vision_required = TRUE) + . = ..() + if(.) // Do some additional checks because we have Special Code(tm). + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. + return TRUE // Monkeys are always food (sorry Pun Pun). + else if(H.species && H.species.name == SPECIES_PROMETHEAN) // Prometheans are always our friends. + if(!(H in grudges)) // Unless they're an ass. + return FALSE + if(discipline && !rabid) + holder.a_intent = I_HELP + return FALSE // We're a good slime. + +/datum/ai_holder/simple_mob/xenobio_slime/react_to_attack(atom/movable/attacker) + . = ..(attacker) + + if(ishuman(attacker)) + var/mob/living/carbon/human/H = attacker + if(H.species && H.species.name == SPECIES_PROMETHEAN) // They're a jerk. + grudges |= H + +// Commands, reactions, etc +/datum/ai_holder/simple_mob/xenobio_slime/on_hear_say(mob/living/speaker, message) + ai_log("xenobio_slime/on_hear_say([speaker], [message]) : Entered.", AI_LOG_DEBUG) + var/mob/living/simple_mob/slime/xenobio/my_slime = holder + + if((findtext(message, num2text(my_slime.number)) || findtext(message, my_slime.name) || findtext(message, "slimes"))) // Talking to us. + + // First, make sure it's actually a player saying something and not an AI, or else we risk infinite loops. + if(!speaker.client) + return + + // Are all slimes being referred to? + // var/mass_order = FALSE + // if(findtext(message, "slimes")) + // mass_order = TRUE + + // Say hello back. + if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings")) + delayed_say(pick("Hello...", "Hi..."), speaker) + + // Follow request. + if(findtext(message, "follow") || findtext(message, "come with me")) + if(!can_command(speaker)) + delayed_say(pick("No...", "I won't follow..."), speaker) + return + + delayed_say("Yes... I follow \the [speaker]...", speaker) + set_follow(speaker) + + // Squish request. + if(findtext(message , "squish")) + if(!can_command(speaker)) + delayed_say("No...", speaker) + return + + spawn(rand(1 SECOND, 2 SECONDS)) + if(!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime. + return + my_slime.squish() + + + // Stop request. + if(findtext(message, "stop") || findtext(message, "halt") || findtext(message, "cease")) + if(my_slime.victim) // We're being asked to stop eatting someone. + if(!can_command(speaker) || !is_justified_to_discipline()) + delayed_say("No...", speaker) + return + else + delayed_say("Fine...", speaker) + adjust_discipline(1, TRUE) + my_slime.stop_consumption() + + if(target) // We're being asked to stop chasing someone. + if(!can_command(speaker) || !is_justified_to_discipline()) + delayed_say("No...", speaker) + return + else + delayed_say("Fine...", speaker) + adjust_discipline(1, TRUE) // This must come before losing the target or it will be unjustified. + remove_target() + + + if(leader) // We're being asked to stop following someone. + if(can_command(speaker) == SLIME_COMMAND_FRIEND || leader == speaker) + delayed_say("Yes... I'll stop...", speaker) + lose_follow() + else + delayed_say("No... I'll keep following \the [leader]...", speaker) + + /* // Commented out since its mostly useless now due to slimes refusing to attack if it would make them naughty. + // Murder request + if(findtext(message, "harm") || findtext(message, "attack") || findtext(message, "kill") || findtext(message, "murder") || findtext(message, "eat") || findtext(message, "consume") || findtext(message, "absorb")) + if(can_command(speaker) < SLIME_COMMAND_FACTION) + delayed_say("No...", speaker) + return + + for(var/mob/living/L in view(7, my_slime) - list(my_slime, speaker)) + if(L == src) + continue // Don't target ourselves. + var/list/valid_names = splittext(L.name, " ") // Should output list("John", "Doe") as an example. + for(var/line in valid_names) // Check each part of someone's name. + if(findtext(message, lowertext(line))) // If part of someone's name is in the command, the slime targets them if allowed to. + if(!(mass_order && line == "slime")) //don't think random other slimes are target + if(can_attack(L)) + delayed_say("Okay... I attack \the [L]...", speaker) + give_target(L) + return + else + delayed_say("No... I won't attack \the [L].", speaker) + return + + // If we're here, it couldn't find anyone with that name. + delayed_say("No... I don't know who to attack...", speaker) + */ + ai_log("xenobio_slime/on_hear_say() : Exited.", AI_LOG_DEBUG) + +/datum/ai_holder/simple_mob/xenobio_slime/can_violently_breakthrough() + if(discipline && !rabid) // Good slimes don't shatter the windows because their buddy in an adjacent cell decided to piss off Slimesky. + return FALSE + return ..() diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index e5a958873d..3ad1df433f 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -1,137 +1,137 @@ -#define ALARM_RESET_DELAY 100 // How long will the alarm/trigger remain active once origin/source has been found to be gone? - -/datum/alarm_source - var/source = null // The source trigger - var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) - var/duration = 0 // How long this source will be alarming, 0 for indefinetely. - var/severity = 1 // How severe the alarm from this source is. - var/start_time = 0 // When this source began alarming. - var/end_time = 0 // Use to set when this trigger should clear, in case the source is lost. - -/datum/alarm_source/New(var/atom/source) - src.source = source - start_time = world.time - source_name = source.get_source_name() - -/datum/alarm - var/atom/origin //Used to identify the alarm area. - var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared. - var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. - var/list/cameras //List of cameras that can be switched to, if the player has that capability. - var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). - var/area/last_name //The last acquired name, used should origin be lost - var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. - var/end_time //Used to set when this alarm should clear, in case the origin is lost. - var/hidden = FALSE //If this alarm can be seen from consoles or other things. - -/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity, var/hidden) - src.origin = origin - - cameras() // Sets up both cameras and last alarm area. - set_source_data(source, duration, severity, hidden) - -/datum/alarm/process() - // Has origin gone missing? - if(!origin && !end_time) - end_time = world.time + ALARM_RESET_DELAY - for(var/datum/alarm_source/AS in sources) - // Has the alarm passed its best before date? - if((AS.end_time && world.time > AS.end_time) || (AS.duration && world.time > (AS.start_time + AS.duration))) - sources -= AS - // Has the source gone missing? Then reset the normal duration and set end_time - if(!AS.source && !AS.end_time) // end_time is used instead of duration to ensure the reset doesn't remain in the future indefinetely. - AS.duration = 0 - AS.end_time = world.time + ALARM_RESET_DELAY - -/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity, var/hidden) - var/datum/alarm_source/AS = sources_assoc[source] - if(!AS) - AS = new/datum/alarm_source(source) - sources += AS - sources_assoc[source] = AS - src.hidden = hidden - // Currently only non-0 durations can be altered (normal alarms VS EMP blasts) - if(AS.duration) - duration = SecondsToTicks(duration) - AS.duration = duration - AS.severity = severity - src.hidden = min(src.hidden, hidden) - -/datum/alarm/proc/clear(var/source) - var/datum/alarm_source/AS = sources_assoc[source] - sources -= AS - sources_assoc -= source - -/datum/alarm/proc/alarm_area() - if(!origin) - return last_area - - last_area = origin.get_alarm_area() - return last_area - -/datum/alarm/proc/alarm_name() - if(!origin) - return last_name - - last_name = origin.get_alarm_name() - return last_name - -/datum/alarm/proc/cameras() - // If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras - if(cameras && (last_camera_area != alarm_area())) - cameras = null - - if(!cameras) - cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() - - last_camera_area = last_area - return cameras - -/datum/alarm/proc/max_severity() - var/max_severity = 0 - for(var/datum/alarm_source/AS in sources) - max_severity = max(AS.severity, max_severity) - - return max_severity - -/****************** -* Assisting procs * -******************/ -/atom/proc/get_alarm_area() - return get_area(src) - -/area/get_alarm_area() - return src - -/atom/proc/get_alarm_name() - var/area/A = get_area(src) - return A.name - -/area/get_alarm_name() - return name - -/mob/get_alarm_name() - return name - -/atom/proc/get_source_name() - return name - -/obj/machinery/camera/get_source_name() - return c_tag - -/atom/proc/get_alarm_cameras() - var/area/A = get_area(src) - return A.get_cameras() - -/area/get_alarm_cameras() - return get_cameras() - -/mob/living/silicon/robot/get_alarm_cameras() - var/list/cameras = ..() - if(camera) - cameras += camera - - return cameras - -/mob/living/silicon/robot/syndicate/get_alarm_cameras() - return list() +#define ALARM_RESET_DELAY 100 // How long will the alarm/trigger remain active once origin/source has been found to be gone? + +/datum/alarm_source + var/source = null // The source trigger + var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) + var/duration = 0 // How long this source will be alarming, 0 for indefinetely. + var/severity = 1 // How severe the alarm from this source is. + var/start_time = 0 // When this source began alarming. + var/end_time = 0 // Use to set when this trigger should clear, in case the source is lost. + +/datum/alarm_source/New(var/atom/source) + src.source = source + start_time = world.time + source_name = source.get_source_name() + +/datum/alarm + var/atom/origin //Used to identify the alarm area. + var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared. + var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. + var/list/cameras //List of cameras that can be switched to, if the player has that capability. + var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). + var/area/last_name //The last acquired name, used should origin be lost + var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. + var/end_time //Used to set when this alarm should clear, in case the origin is lost. + var/hidden = FALSE //If this alarm can be seen from consoles or other things. + +/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity, var/hidden) + src.origin = origin + + cameras() // Sets up both cameras and last alarm area. + set_source_data(source, duration, severity, hidden) + +/datum/alarm/process() + // Has origin gone missing? + if(!origin && !end_time) + end_time = world.time + ALARM_RESET_DELAY + for(var/datum/alarm_source/AS in sources) + // Has the alarm passed its best before date? + if((AS.end_time && world.time > AS.end_time) || (AS.duration && world.time > (AS.start_time + AS.duration))) + sources -= AS + // Has the source gone missing? Then reset the normal duration and set end_time + if(!AS.source && !AS.end_time) // end_time is used instead of duration to ensure the reset doesn't remain in the future indefinetely. + AS.duration = 0 + AS.end_time = world.time + ALARM_RESET_DELAY + +/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity, var/hidden) + var/datum/alarm_source/AS = sources_assoc[source] + if(!AS) + AS = new/datum/alarm_source(source) + sources += AS + sources_assoc[source] = AS + src.hidden = hidden + // Currently only non-0 durations can be altered (normal alarms VS EMP blasts) + if(AS.duration) + duration = SecondsToTicks(duration) + AS.duration = duration + AS.severity = severity + src.hidden = min(src.hidden, hidden) + +/datum/alarm/proc/clear(var/source) + var/datum/alarm_source/AS = sources_assoc[source] + sources -= AS + sources_assoc -= source + +/datum/alarm/proc/alarm_area() + if(!origin) + return last_area + + last_area = origin.get_alarm_area() + return last_area + +/datum/alarm/proc/alarm_name() + if(!origin) + return last_name + + last_name = origin.get_alarm_name() + return last_name + +/datum/alarm/proc/cameras() + // If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras + if(cameras && (last_camera_area != alarm_area())) + cameras = null + + if(!cameras) + cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() + + last_camera_area = last_area + return cameras + +/datum/alarm/proc/max_severity() + var/max_severity = 0 + for(var/datum/alarm_source/AS in sources) + max_severity = max(AS.severity, max_severity) + + return max_severity + +/****************** +* Assisting procs * +******************/ +/atom/proc/get_alarm_area() + return get_area(src) + +/area/get_alarm_area() + return src + +/atom/proc/get_alarm_name() + var/area/A = get_area(src) + return A.name + +/area/get_alarm_name() + return name + +/mob/get_alarm_name() + return name + +/atom/proc/get_source_name() + return name + +/obj/machinery/camera/get_source_name() + return c_tag + +/atom/proc/get_alarm_cameras() + var/area/A = get_area(src) + return A.get_cameras() + +/area/get_alarm_cameras() + return get_cameras() + +/mob/living/silicon/robot/get_alarm_cameras() + var/list/cameras = ..() + if(camera) + cameras += camera + + return cameras + +/mob/living/silicon/robot/syndicate/get_alarm_cameras() + return list() diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index cbec4c25b6..4064d700d2 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -1,116 +1,116 @@ -#define ALARM_RAISED 1 -#define ALARM_CLEARED 0 - -/datum/alarm_handler - var/category = "" - var/list/datum/alarm/alarms = new // All alarms, to handle cases when an origin has been deleted with one or more active alarms - var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. - var/list/listeners = new // A list of all objects interested in alarm changes. - -/datum/alarm_handler/process() - for(var/datum/alarm/A in alarms) - A.process() - check_alarm_cleared(A) - -/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1, var/hidden = 0) - var/new_alarm - //Proper origin and source mandatory - if(!(origin && source)) - return - origin = origin.get_alarm_origin() - - new_alarm = 0 - //see if there is already an alarm of this origin - var/datum/alarm/existing = alarms_assoc[origin] - if(existing) - existing.set_source_data(source, duration, severity, hidden) - else - existing = new/datum/alarm(origin, source, duration, severity, hidden) - new_alarm = 1 - - alarms |= existing - alarms_assoc[origin] = existing - if(new_alarm) - alarms = dd_sortedObjectList(alarms) - on_alarm_change(existing, ALARM_RAISED) - - return new_alarm - -/datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source) - //Proper origin and source mandatory - if(!(origin && source)) - return - origin = origin.get_alarm_origin() - - var/datum/alarm/existing = alarms_assoc[origin] - if(existing) - existing.clear(source) - return check_alarm_cleared(existing) - -/datum/alarm_handler/proc/major_alarms(var/z) - return visible_alarms(z) - -/datum/alarm_handler/proc/has_major_alarms(var/z) - if(!LAZYLEN(alarms)) - return 0 - - return LAZYLEN(major_alarms(z)) - -/datum/alarm_handler/proc/minor_alarms(var/z) - return visible_alarms(z) - -/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) - if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) - alarms -= alarm - alarms_assoc -= alarm.origin - on_alarm_change(alarm, ALARM_CLEARED) - return 1 - return 0 - -/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - for(var/obj/machinery/camera/C in alarm.cameras()) - if(was_raised && !alarm.hidden) - C.add_network(category) - else - C.remove_network(category) - notify_listeners(alarm, was_raised) - -/datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) - if(!origin) - return - - origin = origin.get_alarm_origin() - var/datum/alarm/existing = alarms_assoc[origin] - if(!existing) - return - - return existing.max_severity() - -/atom/proc/get_alarm_origin() - return src - -/turf/get_alarm_origin() - return get_area(src) - -/datum/alarm_handler/proc/register_alarm(var/object, var/procName) - listeners[object] = procName - -/datum/alarm_handler/proc/unregister_alarm(var/object) - listeners -= object - -/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised) - for(var/listener in listeners) - call(listener, listeners[listener])(src, alarm, was_raised) - -/datum/alarm_handler/proc/visible_alarms(var/z) - if(!LAZYLEN(alarms)) - return list() - - var/list/map_levels = using_map.get_map_levels(z) - - var/list/visible_alarms = new() - for(var/datum/alarm/A in alarms) - if(A.hidden || (z && !(A.origin?.z in map_levels))) - continue - visible_alarms.Add(A) +#define ALARM_RAISED 1 +#define ALARM_CLEARED 0 + +/datum/alarm_handler + var/category = "" + var/list/datum/alarm/alarms = new // All alarms, to handle cases when an origin has been deleted with one or more active alarms + var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. + var/list/listeners = new // A list of all objects interested in alarm changes. + +/datum/alarm_handler/process() + for(var/datum/alarm/A in alarms) + A.process() + check_alarm_cleared(A) + +/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1, var/hidden = 0) + var/new_alarm + //Proper origin and source mandatory + if(!(origin && source)) + return + origin = origin.get_alarm_origin() + + new_alarm = 0 + //see if there is already an alarm of this origin + var/datum/alarm/existing = alarms_assoc[origin] + if(existing) + existing.set_source_data(source, duration, severity, hidden) + else + existing = new/datum/alarm(origin, source, duration, severity, hidden) + new_alarm = 1 + + alarms |= existing + alarms_assoc[origin] = existing + if(new_alarm) + alarms = dd_sortedObjectList(alarms) + on_alarm_change(existing, ALARM_RAISED) + + return new_alarm + +/datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source) + //Proper origin and source mandatory + if(!(origin && source)) + return + origin = origin.get_alarm_origin() + + var/datum/alarm/existing = alarms_assoc[origin] + if(existing) + existing.clear(source) + return check_alarm_cleared(existing) + +/datum/alarm_handler/proc/major_alarms(var/z) + return visible_alarms(z) + +/datum/alarm_handler/proc/has_major_alarms(var/z) + if(!LAZYLEN(alarms)) + return 0 + + return LAZYLEN(major_alarms(z)) + +/datum/alarm_handler/proc/minor_alarms(var/z) + return visible_alarms(z) + +/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) + if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) + alarms -= alarm + alarms_assoc -= alarm.origin + on_alarm_change(alarm, ALARM_CLEARED) + return 1 + return 0 + +/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + for(var/obj/machinery/camera/C in alarm.cameras()) + if(was_raised && !alarm.hidden) + C.add_network(category) + else + C.remove_network(category) + notify_listeners(alarm, was_raised) + +/datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) + if(!origin) + return + + origin = origin.get_alarm_origin() + var/datum/alarm/existing = alarms_assoc[origin] + if(!existing) + return + + return existing.max_severity() + +/atom/proc/get_alarm_origin() + return src + +/turf/get_alarm_origin() + return get_area(src) + +/datum/alarm_handler/proc/register_alarm(var/object, var/procName) + listeners[object] = procName + +/datum/alarm_handler/proc/unregister_alarm(var/object) + listeners -= object + +/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised) + for(var/listener in listeners) + call(listener, listeners[listener])(src, alarm, was_raised) + +/datum/alarm_handler/proc/visible_alarms(var/z) + if(!LAZYLEN(alarms)) + return list() + + var/list/map_levels = using_map.get_map_levels(z) + + var/list/visible_alarms = new() + for(var/datum/alarm/A in alarms) + if(A.hidden || (z && !(A.origin?.z in map_levels))) + continue + visible_alarms.Add(A) return visible_alarms \ No newline at end of file diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm index be97493afd..ecb1b1bafa 100644 --- a/code/modules/alarm/atmosphere_alarm.dm +++ b/code/modules/alarm/atmosphere_alarm.dm @@ -1,29 +1,29 @@ -/datum/alarm_handler/atmosphere - category = "Atmosphere Alarms" - -/datum/alarm_handler/atmosphere/major_alarms(var/z) - var/list/major_alarms = new() - var/list/map_levels = using_map.get_map_levels(z) - for(var/datum/alarm/A in visible_alarms()) - if(z && !(A.origin?.z in map_levels)) - continue - if(A.max_severity() > 1) - major_alarms.Add(A) - return major_alarms - -/datum/alarm_handler/atmosphere/minor_alarms(var/z) - var/list/minor_alarms = new() - var/list/map_levels = using_map.get_map_levels(z) - for(var/datum/alarm/A in visible_alarms()) - if(z && !(A.origin?.z in map_levels)) - continue - if(A.max_severity() == 1) - minor_alarms.Add(A) - return minor_alarms - -//VOREStation Add - Alarm for AR glasses -/*/datum/alarm_handler/atmosphere/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - ..() - var/atom/source = length(alarm.sources_assoc) ? alarm.sources_assoc[1] : alarm.alarm_area() - broadcast_engineering_hud_message("Alarm in [alarm.origin] [was_raised ? "raised!" : "cleared."]", source)*/ +/datum/alarm_handler/atmosphere + category = "Atmosphere Alarms" + +/datum/alarm_handler/atmosphere/major_alarms(var/z) + var/list/major_alarms = new() + var/list/map_levels = using_map.get_map_levels(z) + for(var/datum/alarm/A in visible_alarms()) + if(z && !(A.origin?.z in map_levels)) + continue + if(A.max_severity() > 1) + major_alarms.Add(A) + return major_alarms + +/datum/alarm_handler/atmosphere/minor_alarms(var/z) + var/list/minor_alarms = new() + var/list/map_levels = using_map.get_map_levels(z) + for(var/datum/alarm/A in visible_alarms()) + if(z && !(A.origin?.z in map_levels)) + continue + if(A.max_severity() == 1) + minor_alarms.Add(A) + return minor_alarms + +//VOREStation Add - Alarm for AR glasses +/*/datum/alarm_handler/atmosphere/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + ..() + var/atom/source = length(alarm.sources_assoc) ? alarm.sources_assoc[1] : alarm.alarm_area() + broadcast_engineering_hud_message("Alarm in [alarm.origin] [was_raised ? "raised!" : "cleared."]", source)*/ //VOREStation Add End \ No newline at end of file diff --git a/code/modules/alarm/camera_alarm.dm b/code/modules/alarm/camera_alarm.dm index 9594a1c8a0..bef53ad466 100644 --- a/code/modules/alarm/camera_alarm.dm +++ b/code/modules/alarm/camera_alarm.dm @@ -1,2 +1,2 @@ -/datum/alarm_handler/camera - category = "Camera Alarms" +/datum/alarm_handler/camera + category = "Camera Alarms" diff --git a/code/modules/alarm/fire_alarm.dm b/code/modules/alarm/fire_alarm.dm index 4794d62b5a..03cdadde04 100644 --- a/code/modules/alarm/fire_alarm.dm +++ b/code/modules/alarm/fire_alarm.dm @@ -1,15 +1,15 @@ -/datum/alarm_handler/fire - category = "Fire Alarms" - -/datum/alarm_handler/fire/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - var/area/A = alarm.origin - if(istype(A)) - if(was_raised) - A.fire_alert() - else - A.fire_reset() - //VOREStation Add - Alarm for AR glasses uses - /*var/atom/source = length(alarm.sources_assoc) ? alarm.sources_assoc[1] : alarm.alarm_area() - broadcast_engineering_hud_message("Alarm in [alarm.origin] [was_raised ? "raised!" : "cleared."]", source)*/ - //VOREStation Add End - ..() +/datum/alarm_handler/fire + category = "Fire Alarms" + +/datum/alarm_handler/fire/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + var/area/A = alarm.origin + if(istype(A)) + if(was_raised) + A.fire_alert() + else + A.fire_reset() + //VOREStation Add - Alarm for AR glasses uses + /*var/atom/source = length(alarm.sources_assoc) ? alarm.sources_assoc[1] : alarm.alarm_area() + broadcast_engineering_hud_message("Alarm in [alarm.origin] [was_raised ? "raised!" : "cleared."]", source)*/ + //VOREStation Add End + ..() diff --git a/code/modules/alarm/motion_alarm.dm b/code/modules/alarm/motion_alarm.dm index cafc7c128d..fd7e6febe4 100644 --- a/code/modules/alarm/motion_alarm.dm +++ b/code/modules/alarm/motion_alarm.dm @@ -1,2 +1,2 @@ -/datum/alarm_handler/motion - category = "Motion Alarms" +/datum/alarm_handler/motion + category = "Motion Alarms" diff --git a/code/modules/alarm/power_alarm.dm b/code/modules/alarm/power_alarm.dm index 2df6d1eab3..4a0947a8f9 100644 --- a/code/modules/alarm/power_alarm.dm +++ b/code/modules/alarm/power_alarm.dm @@ -1,10 +1,10 @@ -/datum/alarm_handler/power - category = "Power Alarms" - -/datum/alarm_handler/power/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - var/area/A = alarm.origin - if(istype(A)) - A.power_alert(was_raised) - ..() - -/area/proc/power_alert(var/alarming) +/datum/alarm_handler/power + category = "Power Alarms" + +/datum/alarm_handler/power/on_alarm_change(var/datum/alarm/alarm, var/was_raised) + var/area/A = alarm.origin + if(istype(A)) + A.power_alert(was_raised) + ..() + +/area/proc/power_alert(var/alarming) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 5ad969bda0..5c1ea9dd9d 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -1,108 +1,108 @@ -/obj/item/device/assembly - name = "assembly" - desc = "A small electronic device that should never exist." - icon = 'icons/obj/assemblies/new_assemblies.dmi' - icon_state = "" - w_class = ITEMSIZE_SMALL - matter = list(MAT_STEEL = 100) - throwforce = 2 - throw_speed = 3 - throw_range = 10 - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - origin_tech = list(TECH_MAGNET = 1) - - var/secured = 1 - var/list/attached_overlays = null - var/obj/item/device/assembly_holder/holder = null - var/cooldown = FALSE //To prevent spam - var/wires = WIRE_RECEIVE | WIRE_PULSE - - var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate() - var/const/WIRE_PULSE = 2 //Allows Pulse(0) to act on the holder - var/const/WIRE_PULSE_SPECIAL = 4 //Allows Pulse(0) to act on the holders special assembly - var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate() - var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message - -/obj/item/device/assembly/proc/holder_movement() - return - -/obj/item/device/assembly/proc/process_cooldown() - if(cooldown) - return FALSE - cooldown = TRUE - VARSET_IN(src, cooldown, FALSE, 2 SECONDS) - return TRUE - -/obj/item/device/assembly/proc/pulsed(var/radio = 0) - if(holder && (wires & WIRE_RECEIVE)) - activate() - if(radio && (wires & WIRE_RADIO_RECEIVE)) - activate() - return 1 - -/obj/item/device/assembly/proc/pulse(var/radio = 0) - if(holder && (wires & WIRE_PULSE)) - holder.process_activation(src, 1, 0) - if(holder && (wires & WIRE_PULSE_SPECIAL)) - holder.process_activation(src, 0, 1) - return 1 - -/obj/item/device/assembly/proc/activate() - if(!secured || !process_cooldown()) - return FALSE - return TRUE - -/obj/item/device/assembly/proc/toggle_secure() - secured = !secured - update_icon() - return secured - -/obj/item/device/assembly/proc/attach_assembly(var/obj/item/device/assembly/A, var/mob/user) - holder = new/obj/item/device/assembly_holder(get_turf(src)) - if(holder.attach(A,src,user)) - to_chat(user, "You attach \the [A] to \the [src]!") - return TRUE - -/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(isassembly(W)) - var/obj/item/device/assembly/A = W - if((!A.secured) && (!secured)) - attach_assembly(A,user) - return - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(toggle_secure()) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be attached!") - return - return ..() - -/obj/item/device/assembly/process() - return PROCESS_KILL - -/obj/item/device/assembly/examine(mob/user) - . = ..() - if((in_range(src, user) || loc == user)) - if(secured) - . += "\The [src] is ready!" - else - . += "\The [src] can be attached!" - -/obj/item/device/assembly/attack_self(mob/user as mob) - if(!user) - return 0 - user.set_machine(src) - tgui_interact(user) - return 1 - -/obj/item/device/assembly/tgui_state(mob/user) - return GLOB.tgui_deep_inventory_state - -/obj/item/device/assembly/tgui_interact(mob/user, datum/tgui/ui) - return // tgui goes here - -/obj/item/device/assembly/tgui_host() - if(istype(loc, /obj/item/device/assembly_holder)) - return loc.tgui_host() - return ..() +/obj/item/device/assembly + name = "assembly" + desc = "A small electronic device that should never exist." + icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon_state = "" + w_class = ITEMSIZE_SMALL + matter = list(MAT_STEEL = 100) + throwforce = 2 + throw_speed = 3 + throw_range = 10 + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + origin_tech = list(TECH_MAGNET = 1) + + var/secured = 1 + var/list/attached_overlays = null + var/obj/item/device/assembly_holder/holder = null + var/cooldown = FALSE //To prevent spam + var/wires = WIRE_RECEIVE | WIRE_PULSE + + var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate() + var/const/WIRE_PULSE = 2 //Allows Pulse(0) to act on the holder + var/const/WIRE_PULSE_SPECIAL = 4 //Allows Pulse(0) to act on the holders special assembly + var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate() + var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message + +/obj/item/device/assembly/proc/holder_movement() + return + +/obj/item/device/assembly/proc/process_cooldown() + if(cooldown) + return FALSE + cooldown = TRUE + VARSET_IN(src, cooldown, FALSE, 2 SECONDS) + return TRUE + +/obj/item/device/assembly/proc/pulsed(var/radio = 0) + if(holder && (wires & WIRE_RECEIVE)) + activate() + if(radio && (wires & WIRE_RADIO_RECEIVE)) + activate() + return 1 + +/obj/item/device/assembly/proc/pulse(var/radio = 0) + if(holder && (wires & WIRE_PULSE)) + holder.process_activation(src, 1, 0) + if(holder && (wires & WIRE_PULSE_SPECIAL)) + holder.process_activation(src, 0, 1) + return 1 + +/obj/item/device/assembly/proc/activate() + if(!secured || !process_cooldown()) + return FALSE + return TRUE + +/obj/item/device/assembly/proc/toggle_secure() + secured = !secured + update_icon() + return secured + +/obj/item/device/assembly/proc/attach_assembly(var/obj/item/device/assembly/A, var/mob/user) + holder = new/obj/item/device/assembly_holder(get_turf(src)) + if(holder.attach(A,src,user)) + to_chat(user, "You attach \the [A] to \the [src]!") + return TRUE + +/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(isassembly(W)) + var/obj/item/device/assembly/A = W + if((!A.secured) && (!secured)) + attach_assembly(A,user) + return + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(toggle_secure()) + to_chat(user, "\The [src] is ready!") + else + to_chat(user, "\The [src] can now be attached!") + return + return ..() + +/obj/item/device/assembly/process() + return PROCESS_KILL + +/obj/item/device/assembly/examine(mob/user) + . = ..() + if((in_range(src, user) || loc == user)) + if(secured) + . += "\The [src] is ready!" + else + . += "\The [src] can be attached!" + +/obj/item/device/assembly/attack_self(mob/user as mob) + if(!user) + return 0 + user.set_machine(src) + tgui_interact(user) + return 1 + +/obj/item/device/assembly/tgui_state(mob/user) + return GLOB.tgui_deep_inventory_state + +/obj/item/device/assembly/tgui_interact(mob/user, datum/tgui/ui) + return // tgui goes here + +/obj/item/device/assembly/tgui_host() + if(istype(loc, /obj/item/device/assembly_holder)) + return loc.tgui_host() + return ..() diff --git a/code/modules/assembly/helpers.dm b/code/modules/assembly/helpers.dm index cc3100f772..44164fb72b 100644 --- a/code/modules/assembly/helpers.dm +++ b/code/modules/assembly/helpers.dm @@ -1,29 +1,29 @@ -/proc/isassembly(O) - if(istype(O, /obj/item/device/assembly)) - return 1 - return 0 - -/proc/isigniter(O) - if(istype(O, /obj/item/device/assembly/igniter)) - return 1 - return 0 - -/proc/isinfared(O) - if(istype(O, /obj/item/device/assembly/infra)) - return 1 - return 0 - -/proc/isprox(O) - if(istype(O, /obj/item/device/assembly/prox_sensor)) - return 1 - return 0 - -/proc/issignaler(O) - if(istype(O, /obj/item/device/assembly/signaler)) - return 1 - return 0 - -/proc/istimer(O) - if(istype(O, /obj/item/device/assembly/timer)) - return 1 - return 0 +/proc/isassembly(O) + if(istype(O, /obj/item/device/assembly)) + return 1 + return 0 + +/proc/isigniter(O) + if(istype(O, /obj/item/device/assembly/igniter)) + return 1 + return 0 + +/proc/isinfared(O) + if(istype(O, /obj/item/device/assembly/infra)) + return 1 + return 0 + +/proc/isprox(O) + if(istype(O, /obj/item/device/assembly/prox_sensor)) + return 1 + return 0 + +/proc/issignaler(O) + if(istype(O, /obj/item/device/assembly/signaler)) + return 1 + return 0 + +/proc/istimer(O) + if(istype(O, /obj/item/device/assembly/timer)) + return 1 + return 0 diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 52ab8e67cb..110a9cee35 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -1,225 +1,225 @@ -/obj/item/device/assembly_holder - name = "Assembly" - icon = 'icons/obj/assemblies/new_assemblies.dmi' - icon_state = "holder" - item_state = "assembly" - throwforce = 5 - w_class = ITEMSIZE_SMALL - throw_speed = 3 - throw_range = 10 - - var/secured = 0 - var/obj/item/device/assembly/a_left = null - var/obj/item/device/assembly/a_right = null - var/obj/special_assembly = null - -/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) - if(!D || !D2) - return FALSE - - if(!istype(D) || !istype(D2)) - return FALSE - - if(D.secured || D2.secured) - return FALSE - - if(user) - user.remove_from_mob(D) - user.remove_from_mob(D2) - - D.holder = src - D2.holder = src - D.forceMove(src) - D2.forceMove(src) - a_left = D - a_right = D2 - name = "[D.name]-[D2.name] assembly" - update_icon() - user.put_in_hands(src) - - return TRUE - -/obj/item/device/assembly_holder/proc/detached() - return - -/obj/item/device/assembly_holder/update_icon() - cut_overlays() - if(a_left) - add_overlay("[a_left.icon_state]_left") - for(var/O in a_left.attached_overlays) - add_overlay("[O]_l") - if(a_right) - add_overlay("[a_right.icon_state]_right") - for(var/O in a_right.attached_overlays) - add_overlay("[O]_r") - if(master) - master.update_icon() - -/obj/item/device/assembly_holder/examine(mob/user) - . = ..() - if ((in_range(src, user) || src.loc == user)) - if (src.secured) - . += "\The [src] is ready!" - else - . += "\The [src] can be attached!" - -/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(isturf(old_loc)) - unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) - if(isturf(loc)) - sense_proximity(callback = /atom/proc/HasProximity) - -/obj/item/device/assembly_holder/HasProximity(turf/T, atom/movable/AM, old_loc) - if(a_left) - a_left.HasProximity(T, AM, old_loc) - if(a_right) - a_right.HasProximity(T, AM, old_loc) - -/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) - return - if(a_left) - a_left.Crossed(AM) - if(a_right) - a_right.Crossed(AM) - -/obj/item/device/assembly_holder/on_found(mob/finder as mob) - if(a_left) - a_left.on_found(finder) - if(a_right) - a_right.on_found(finder) - -/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() - -/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() - ..() - -/obj/item/device/assembly_holder/attackby(var/obj/item/weapon/W, var/mob/user) - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(!a_left || !a_right) - to_chat(user, " BUG:Assembly part missing, please report this!") - return - a_left.toggle_secure() - a_right.toggle_secure() - secured = !secured - if(secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be taken apart!") - update_icon() - return - else - ..() - -/obj/item/device/assembly_holder/attack_self(var/mob/user) - src.add_fingerprint(user) - if(src.secured) - if(!a_left || !a_right) - to_chat(user, " BUG:Assembly part missing, please report this!") - return - if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code - switch(tgui_alert(usr, "Which side would you like to use?","Side",list("Left","Right"))) - if("Left") a_left.attack_self(user) - if("Right") a_right.attack_self(user) - return - else - if(!istype(a_left,/obj/item/device/assembly/igniter)) - a_left.attack_self(user) - if(!istype(a_right,/obj/item/device/assembly/igniter)) - a_right.attack_self(user) - else - var/turf/T = get_turf(src) - if(!T) - return 0 - if(a_left) - a_left.holder = null - a_left.forceMove(T) - if(a_right) - a_right.holder = null - a_right.forceMove(T) - qdel(src) - -/obj/item/device/assembly_holder/proc/process_activation(var/obj/D, var/normal = 1) - if(!D) - return 0 - if(!secured) - visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") - if((normal) && (a_right) && (a_left)) - if(a_right != D) - a_right.pulsed(0) - if(a_left != D) - a_left.pulsed(0) - if(master) - master.receive_signal() - return 1 - -/obj/item/device/assembly_holder/hear_talk(mob/M, list/message_pieces, verb) - if(a_right) - a_right.hear_talk(M, message_pieces, verb) - if(a_left) - a_left.hear_talk(M, message_pieces, verb) - -/obj/item/device/assembly_holder/timer_igniter - name = "timer-igniter assembly" - -/obj/item/device/assembly_holder/timer_igniter/New() - ..() - - var/obj/item/device/assembly/igniter/ign = new(src) - ign.secured = 1 - ign.holder = src - - var/obj/item/device/assembly/timer/tmr = new(src) - tmr.time = 5 - tmr.secured = 1 - tmr.holder = src - - a_left = tmr - a_right = ign - secured = 1 - update_icon() - name = initial(name) + " ([tmr.time] secs)" - - loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure - -/obj/item/device/assembly_holder/timer_igniter/detached() - loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure - ..() - -/obj/item/device/assembly_holder/timer_igniter/verb/configure() - set name = "Set Timer" - set category = "Object" - set src in usr - - if ( !(usr.stat || usr.restrained()) ) - var/obj/item/device/assembly_holder/holder - if(istype(src,/obj/item/weapon/grenade/chem_grenade)) - var/obj/item/weapon/grenade/chem_grenade/gren = src - holder=gren.detonator - var/obj/item/device/assembly/timer/tmr = holder.a_left - if(!istype(tmr,/obj/item/device/assembly/timer)) - tmr = holder.a_right - if(!istype(tmr,/obj/item/device/assembly/timer)) - to_chat(usr, "This detonator has no timer.") - return - - if(tmr.timing) - to_chat(usr, "Clock is ticking already.") - else - var/ntime = tgui_input_number(usr, "Enter desired time in seconds", "Time", "5", 1000, 0) - if (ntime>0 && ntime<1000) - tmr.time = ntime - name = initial(name) + "([tmr.time] secs)" - to_chat(usr, "Timer set to [tmr.time] seconds.") - else - to_chat(usr, "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].") - else - to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].") +/obj/item/device/assembly_holder + name = "Assembly" + icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon_state = "holder" + item_state = "assembly" + throwforce = 5 + w_class = ITEMSIZE_SMALL + throw_speed = 3 + throw_range = 10 + + var/secured = 0 + var/obj/item/device/assembly/a_left = null + var/obj/item/device/assembly/a_right = null + var/obj/special_assembly = null + +/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) + if(!D || !D2) + return FALSE + + if(!istype(D) || !istype(D2)) + return FALSE + + if(D.secured || D2.secured) + return FALSE + + if(user) + user.remove_from_mob(D) + user.remove_from_mob(D2) + + D.holder = src + D2.holder = src + D.forceMove(src) + D2.forceMove(src) + a_left = D + a_right = D2 + name = "[D.name]-[D2.name] assembly" + update_icon() + user.put_in_hands(src) + + return TRUE + +/obj/item/device/assembly_holder/proc/detached() + return + +/obj/item/device/assembly_holder/update_icon() + cut_overlays() + if(a_left) + add_overlay("[a_left.icon_state]_left") + for(var/O in a_left.attached_overlays) + add_overlay("[O]_l") + if(a_right) + add_overlay("[a_right.icon_state]_right") + for(var/O in a_right.attached_overlays) + add_overlay("[O]_r") + if(master) + master.update_icon() + +/obj/item/device/assembly_holder/examine(mob/user) + . = ..() + if ((in_range(src, user) || src.loc == user)) + if (src.secured) + . += "\The [src] is ready!" + else + . += "\The [src] can be attached!" + +/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(isturf(old_loc)) + unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) + if(isturf(loc)) + sense_proximity(callback = /atom/proc/HasProximity) + +/obj/item/device/assembly_holder/HasProximity(turf/T, atom/movable/AM, old_loc) + if(a_left) + a_left.HasProximity(T, AM, old_loc) + if(a_right) + a_right.HasProximity(T, AM, old_loc) + +/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(a_left) + a_left.Crossed(AM) + if(a_right) + a_right.Crossed(AM) + +/obj/item/device/assembly_holder/on_found(mob/finder as mob) + if(a_left) + a_left.on_found(finder) + if(a_right) + a_right.on_found(finder) + +/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(a_left && a_right) + a_left.holder_movement() + a_right.holder_movement() + +/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess + if(a_left && a_right) + a_left.holder_movement() + a_right.holder_movement() + ..() + +/obj/item/device/assembly_holder/attackby(var/obj/item/weapon/W, var/mob/user) + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(!a_left || !a_right) + to_chat(user, " BUG:Assembly part missing, please report this!") + return + a_left.toggle_secure() + a_right.toggle_secure() + secured = !secured + if(secured) + to_chat(user, "\The [src] is ready!") + else + to_chat(user, "\The [src] can now be taken apart!") + update_icon() + return + else + ..() + +/obj/item/device/assembly_holder/attack_self(var/mob/user) + src.add_fingerprint(user) + if(src.secured) + if(!a_left || !a_right) + to_chat(user, " BUG:Assembly part missing, please report this!") + return + if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code + switch(tgui_alert(usr, "Which side would you like to use?","Side",list("Left","Right"))) + if("Left") a_left.attack_self(user) + if("Right") a_right.attack_self(user) + return + else + if(!istype(a_left,/obj/item/device/assembly/igniter)) + a_left.attack_self(user) + if(!istype(a_right,/obj/item/device/assembly/igniter)) + a_right.attack_self(user) + else + var/turf/T = get_turf(src) + if(!T) + return 0 + if(a_left) + a_left.holder = null + a_left.forceMove(T) + if(a_right) + a_right.holder = null + a_right.forceMove(T) + qdel(src) + +/obj/item/device/assembly_holder/proc/process_activation(var/obj/D, var/normal = 1) + if(!D) + return 0 + if(!secured) + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") + if((normal) && (a_right) && (a_left)) + if(a_right != D) + a_right.pulsed(0) + if(a_left != D) + a_left.pulsed(0) + if(master) + master.receive_signal() + return 1 + +/obj/item/device/assembly_holder/hear_talk(mob/M, list/message_pieces, verb) + if(a_right) + a_right.hear_talk(M, message_pieces, verb) + if(a_left) + a_left.hear_talk(M, message_pieces, verb) + +/obj/item/device/assembly_holder/timer_igniter + name = "timer-igniter assembly" + +/obj/item/device/assembly_holder/timer_igniter/New() + ..() + + var/obj/item/device/assembly/igniter/ign = new(src) + ign.secured = 1 + ign.holder = src + + var/obj/item/device/assembly/timer/tmr = new(src) + tmr.time = 5 + tmr.secured = 1 + tmr.holder = src + + a_left = tmr + a_right = ign + secured = 1 + update_icon() + name = initial(name) + " ([tmr.time] secs)" + + loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure + +/obj/item/device/assembly_holder/timer_igniter/detached() + loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure + ..() + +/obj/item/device/assembly_holder/timer_igniter/verb/configure() + set name = "Set Timer" + set category = "Object" + set src in usr + + if ( !(usr.stat || usr.restrained()) ) + var/obj/item/device/assembly_holder/holder + if(istype(src,/obj/item/weapon/grenade/chem_grenade)) + var/obj/item/weapon/grenade/chem_grenade/gren = src + holder=gren.detonator + var/obj/item/device/assembly/timer/tmr = holder.a_left + if(!istype(tmr,/obj/item/device/assembly/timer)) + tmr = holder.a_right + if(!istype(tmr,/obj/item/device/assembly/timer)) + to_chat(usr, "This detonator has no timer.") + return + + if(tmr.timing) + to_chat(usr, "Clock is ticking already.") + else + var/ntime = tgui_input_number(usr, "Enter desired time in seconds", "Time", "5", 1000, 0) + if (ntime>0 && ntime<1000) + tmr.time = ntime + name = initial(name) + "([tmr.time] secs)" + to_chat(usr, "Timer set to [tmr.time] seconds.") + else + to_chat(usr, "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].") + else + to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].") diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 8b45b84084..0827836c35 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -1,40 +1,40 @@ -/obj/item/device/assembly/igniter - name = "igniter" - desc = "A small electronic device able to ignite combustable substances." - icon_state = "igniter" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 500, MAT_GLASS = 50) - - secured = 1 - wires = WIRE_RECEIVE - -/obj/item/device/assembly/igniter/activate() - if(!..()) - return FALSE - - if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) - var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc - grenade.detonate() - else - var/turf/location = get_turf(loc) - if(location) - location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) - var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank && tank.modded) - tank.explode() - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - return TRUE - - -/obj/item/device/assembly/igniter/attack_self(var/mob/user) - activate() - add_fingerprint(user) - -/obj/item/device/assembly/igniter/is_hot() +/obj/item/device/assembly/igniter + name = "igniter" + desc = "A small electronic device able to ignite combustable substances." + icon_state = "igniter" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 500, MAT_GLASS = 50) + + secured = 1 + wires = WIRE_RECEIVE + +/obj/item/device/assembly/igniter/activate() + if(!..()) + return FALSE + + if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) + var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc + grenade.detonate() + else + var/turf/location = get_turf(loc) + if(location) + location.hotspot_expose(1000,1000) + if (istype(src.loc,/obj/item/device/assembly_holder)) + if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc + if (tank && tank.modded) + tank.explode() + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + + return TRUE + + +/obj/item/device/assembly/igniter/attack_self(var/mob/user) + activate() + add_fingerprint(user) + +/obj/item/device/assembly/igniter/is_hot() return TRUE \ No newline at end of file diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index c4c4e09e19..fb5566504e 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -1,181 +1,181 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/device/assembly/infra - name = "infrared emitter" - desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." - icon_state = "infrared" - origin_tech = list(TECH_MAGNET = 2) - matter = list(MAT_STEEL = 1000, MAT_GLASS = 500) - - wires = WIRE_PULSE - - secured = 0 - - var/on = 0 - var/visible = 0 - var/list/i_beams = null - -/obj/item/device/assembly/infra/activate() - if(!..()) - return FALSE - on = !on - update_icon() - return TRUE - -/obj/item/device/assembly/infra/toggle_secure() - secured = !secured - if(!secured) - toggle_state(FALSE) - update_icon() - return secured - -/obj/item/device/assembly/infra/proc/toggle_state(var/picked) - if(!isnull(picked)) - on = picked - else - on = !on - - if(secured && on) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - QDEL_LIST_NULL(i_beams) - return on - -/obj/item/device/assembly/infra/update_icon() - cut_overlays() - LAZYCLEARLIST(attached_overlays) - if(on) - add_overlay("infrared_on") - LAZYADD(attached_overlays, "infrared_on") - - if(holder) - holder.update_icon(2) - -/obj/item/device/assembly/infra/process() - if(!on && i_beams) - QDEL_LIST_NULL(i_beams) - return - - if(!i_beams && secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf)))) - create_beams() - -/obj/item/device/assembly/infra/proc/create_beams(var/limit = 8) - var/current_spot = get_turf(src) - for(var/i = 1 to limit) - var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(current_spot) - I.master = src - I.density = TRUE - I.set_dir(dir) - if(!step(I, I.dir)) //Try to take a step in that direction - return //Couldn't, oh well, we hit a wall or something. Beam should qdel itself in it's Bump(). - I.density = FALSE - i_beams |= I - I.visible = visible - -/obj/item/device/assembly/infra/attack_hand() - QDEL_LIST_NULL(i_beams) - ..() - -/obj/item/device/assembly/infra/Move() - var/t = dir - . = ..() - set_dir(t) - -/obj/item/device/assembly/infra/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - QDEL_LIST_NULL(i_beams) - -/obj/item/device/assembly/infra/holder_movement() - if(!holder) - return FALSE - QDEL_LIST_NULL(i_beams) - return TRUE - -/obj/item/device/assembly/infra/proc/trigger_beam() - if(!process_cooldown()) - return FALSE - pulse(0) - QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate - if(!holder) - visible_message("\icon[src][bicon(src)] *beep* *beep*") - -/obj/item/device/assembly/infra/tgui_interact(mob/user, datum/tgui/ui) - if(!secured) - to_chat(user, "[src] is unsecured!") - return FALSE - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AssemblyInfrared", name) - ui.open() - -/obj/item/device/assembly/infra/tgui_data(mob/user) - var/list/data = ..() - - data["on"] = on - data["visible"] = visible - - return data - -/obj/item/device/assembly/infra/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("state") - toggle_state() - return TRUE - if("visible") - visible = !visible - for(var/obj/effect/beam/i_beam/I as anything in i_beams) - I.visible = visible - CHECK_TICK - return TRUE - -/obj/item/device/assembly/infra/verb/rotate_clockwise() - set name = "Rotate Infrared Laser Clockwise" - set category = "Object" - set src in usr - - set_dir(turn(dir, 270)) - -/***************************IBeam*********************************/ - -/obj/effect/beam/i_beam - name = "i beam" - icon = 'icons/obj/projectiles.dmi' - icon_state = "ibeam" - var/obj/item/device/assembly/infra/master = null - var/visible = 0 - anchored = TRUE - -/obj/effect/beam/i_beam/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/beam/i_beam/Destroy() - STOP_PROCESSING(SSobj, src) - master = null - return ..() - -/obj/effect/beam/i_beam/proc/hit() - master?.trigger_beam() - qdel(src) - -/obj/effect/beam/i_beam/process() - if(loc?.density || !master) - qdel(src) - return - -/obj/effect/beam/i_beam/Bump() - qdel(src) - -/obj/effect/beam/i_beam/Bumped() - hit() - -/obj/effect/beam/i_beam/Crossed(var/atom/movable/AM) - if(AM.is_incorporeal()) - return - if(istype(AM, /obj/effect/beam)) - return +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/obj/item/device/assembly/infra + name = "infrared emitter" + desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." + icon_state = "infrared" + origin_tech = list(TECH_MAGNET = 2) + matter = list(MAT_STEEL = 1000, MAT_GLASS = 500) + + wires = WIRE_PULSE + + secured = 0 + + var/on = 0 + var/visible = 0 + var/list/i_beams = null + +/obj/item/device/assembly/infra/activate() + if(!..()) + return FALSE + on = !on + update_icon() + return TRUE + +/obj/item/device/assembly/infra/toggle_secure() + secured = !secured + if(!secured) + toggle_state(FALSE) + update_icon() + return secured + +/obj/item/device/assembly/infra/proc/toggle_state(var/picked) + if(!isnull(picked)) + on = picked + else + on = !on + + if(secured && on) + START_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSobj, src) + QDEL_LIST_NULL(i_beams) + return on + +/obj/item/device/assembly/infra/update_icon() + cut_overlays() + LAZYCLEARLIST(attached_overlays) + if(on) + add_overlay("infrared_on") + LAZYADD(attached_overlays, "infrared_on") + + if(holder) + holder.update_icon(2) + +/obj/item/device/assembly/infra/process() + if(!on && i_beams) + QDEL_LIST_NULL(i_beams) + return + + if(!i_beams && secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf)))) + create_beams() + +/obj/item/device/assembly/infra/proc/create_beams(var/limit = 8) + var/current_spot = get_turf(src) + for(var/i = 1 to limit) + var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(current_spot) + I.master = src + I.density = TRUE + I.set_dir(dir) + if(!step(I, I.dir)) //Try to take a step in that direction + return //Couldn't, oh well, we hit a wall or something. Beam should qdel itself in it's Bump(). + I.density = FALSE + i_beams |= I + I.visible = visible + +/obj/item/device/assembly/infra/attack_hand() + QDEL_LIST_NULL(i_beams) + ..() + +/obj/item/device/assembly/infra/Move() + var/t = dir + . = ..() + set_dir(t) + +/obj/item/device/assembly/infra/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + QDEL_LIST_NULL(i_beams) + +/obj/item/device/assembly/infra/holder_movement() + if(!holder) + return FALSE + QDEL_LIST_NULL(i_beams) + return TRUE + +/obj/item/device/assembly/infra/proc/trigger_beam() + if(!process_cooldown()) + return FALSE + pulse(0) + QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate + if(!holder) + visible_message("\icon[src][bicon(src)] *beep* *beep*") + +/obj/item/device/assembly/infra/tgui_interact(mob/user, datum/tgui/ui) + if(!secured) + to_chat(user, "[src] is unsecured!") + return FALSE + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AssemblyInfrared", name) + ui.open() + +/obj/item/device/assembly/infra/tgui_data(mob/user) + var/list/data = ..() + + data["on"] = on + data["visible"] = visible + + return data + +/obj/item/device/assembly/infra/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("state") + toggle_state() + return TRUE + if("visible") + visible = !visible + for(var/obj/effect/beam/i_beam/I as anything in i_beams) + I.visible = visible + CHECK_TICK + return TRUE + +/obj/item/device/assembly/infra/verb/rotate_clockwise() + set name = "Rotate Infrared Laser Clockwise" + set category = "Object" + set src in usr + + set_dir(turn(dir, 270)) + +/***************************IBeam*********************************/ + +/obj/effect/beam/i_beam + name = "i beam" + icon = 'icons/obj/projectiles.dmi' + icon_state = "ibeam" + var/obj/item/device/assembly/infra/master = null + var/visible = 0 + anchored = TRUE + +/obj/effect/beam/i_beam/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/effect/beam/i_beam/Destroy() + STOP_PROCESSING(SSobj, src) + master = null + return ..() + +/obj/effect/beam/i_beam/proc/hit() + master?.trigger_beam() + qdel(src) + +/obj/effect/beam/i_beam/process() + if(loc?.density || !master) + qdel(src) + return + +/obj/effect/beam/i_beam/Bump() + qdel(src) + +/obj/effect/beam/i_beam/Bumped() + hit() + +/obj/effect/beam/i_beam/Crossed(var/atom/movable/AM) + if(AM.is_incorporeal()) + return + if(istype(AM, /obj/effect/beam)) + return hit() \ No newline at end of file diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 0561eb4797..7c12d5fb03 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -1,143 +1,143 @@ -/obj/item/device/assembly/prox_sensor - name = "proximity sensor" - desc = "Used for scanning and alerting when someone enters a certain proximity." - icon_state = "prox" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 800, MAT_GLASS = 200) - wires = WIRE_PULSE - - secured = 0 - - var/scanning = 0 - var/timing = 0 - var/time = 10 - - var/range = 2 - -/obj/item/device/assembly/prox_sensor/activate() - if(!..()) - return FALSE - timing = !timing - update_icon() - return FALSE - -/obj/item/device/assembly/prox_sensor/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - else - scanning = 0 - timing = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - -/obj/item/device/assembly/prox_sensor/HasProximity(turf/T, atom/movable/AM, old_loc) - if(!istype(AM)) - log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") - return - if (istype(AM, /obj/effect/beam)) - return - if (!isobserver(AM) && AM.move_speed < 12) - sense() - -/obj/item/device/assembly/prox_sensor/proc/sense() - if((!holder && !secured) || !scanning || !process_cooldown()) - return FALSE - var/turf/mainloc = get_turf(src) - pulse(0) - if(!holder) - mainloc.visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") - -/obj/item/device/assembly/prox_sensor/process() - if(scanning) - var/turf/mainloc = get_turf(src) - for(var/mob/living/A in range(range,mainloc)) - if (A.move_speed < 12) - sense() - - if(timing && (time >= 0)) - time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = initial(time) - -/obj/item/device/assembly/prox_sensor/dropped() - sense() - -/obj/item/device/assembly/prox_sensor/proc/toggle_scan() - if(!secured) - return FALSE - scanning = !scanning - update_icon() - -/obj/item/device/assembly/prox_sensor/update_icon() - cut_overlays() - LAZYCLEARLIST(attached_overlays) - if(timing) - add_overlay("prox_timing") - LAZYADD(attached_overlays, "prox_timing") - if(scanning) - add_overlay("prox_scanning") - LAZYADD(attached_overlays, "prox_scanning") - if(holder) - holder.update_icon() - if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) - var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc - grenade.primed(scanning) - -/obj/item/device/assembly/prox_sensor/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(isturf(old_loc)) - unsense_proximity(range = range, callback = /atom/proc/HasProximity, center = old_loc) - if(isturf(loc)) - sense_proximity(range = range, callback = /atom/proc/HasProximity) - sense() - -/obj/item/device/assembly/prox_sensor/tgui_interact(mob/user, datum/tgui/ui) - if(!secured) - to_chat(user, "[src] is unsecured!") - return FALSE - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AssemblyProx", name) - ui.open() - -/obj/item/device/assembly/prox_sensor/tgui_data(mob/user) - var/list/data = ..() - - data["time"] = time * 10 - data["timing"] = timing - data["range"] = range - data["maxRange"] = 5 - data["scanning"] = scanning - - return data - -/obj/item/device/assembly/prox_sensor/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("scanning") - toggle_scan() - return TRUE - if("timing") - timing = !timing - update_icon() - return TRUE - if("set_time") - var/real_new_time = 0 - var/new_time = params["time"] - var/list/L = splittext(new_time, ":") - if(LAZYLEN(L)) - for(var/i in 1 to LAZYLEN(L)) - real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) - else - real_new_time = text2num(new_time) - time = clamp(real_new_time, 0, 600) - return TRUE - if("range") - range = clamp(params["range"], 1, 5) - return TRUE +/obj/item/device/assembly/prox_sensor + name = "proximity sensor" + desc = "Used for scanning and alerting when someone enters a certain proximity." + icon_state = "prox" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 800, MAT_GLASS = 200) + wires = WIRE_PULSE + + secured = 0 + + var/scanning = 0 + var/timing = 0 + var/time = 10 + + var/range = 2 + +/obj/item/device/assembly/prox_sensor/activate() + if(!..()) + return FALSE + timing = !timing + update_icon() + return FALSE + +/obj/item/device/assembly/prox_sensor/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSobj, src) + else + scanning = 0 + timing = 0 + STOP_PROCESSING(SSobj, src) + update_icon() + return secured + +/obj/item/device/assembly/prox_sensor/HasProximity(turf/T, atom/movable/AM, old_loc) + if(!istype(AM)) + log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") + return + if (istype(AM, /obj/effect/beam)) + return + if (!isobserver(AM) && AM.move_speed < 12) + sense() + +/obj/item/device/assembly/prox_sensor/proc/sense() + if((!holder && !secured) || !scanning || !process_cooldown()) + return FALSE + var/turf/mainloc = get_turf(src) + pulse(0) + if(!holder) + mainloc.visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") + +/obj/item/device/assembly/prox_sensor/process() + if(scanning) + var/turf/mainloc = get_turf(src) + for(var/mob/living/A in range(range,mainloc)) + if (A.move_speed < 12) + sense() + + if(timing && (time >= 0)) + time-- + if(timing && time <= 0) + timing = 0 + toggle_scan() + time = initial(time) + +/obj/item/device/assembly/prox_sensor/dropped() + sense() + +/obj/item/device/assembly/prox_sensor/proc/toggle_scan() + if(!secured) + return FALSE + scanning = !scanning + update_icon() + +/obj/item/device/assembly/prox_sensor/update_icon() + cut_overlays() + LAZYCLEARLIST(attached_overlays) + if(timing) + add_overlay("prox_timing") + LAZYADD(attached_overlays, "prox_timing") + if(scanning) + add_overlay("prox_scanning") + LAZYADD(attached_overlays, "prox_scanning") + if(holder) + holder.update_icon() + if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) + var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc + grenade.primed(scanning) + +/obj/item/device/assembly/prox_sensor/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(isturf(old_loc)) + unsense_proximity(range = range, callback = /atom/proc/HasProximity, center = old_loc) + if(isturf(loc)) + sense_proximity(range = range, callback = /atom/proc/HasProximity) + sense() + +/obj/item/device/assembly/prox_sensor/tgui_interact(mob/user, datum/tgui/ui) + if(!secured) + to_chat(user, "[src] is unsecured!") + return FALSE + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AssemblyProx", name) + ui.open() + +/obj/item/device/assembly/prox_sensor/tgui_data(mob/user) + var/list/data = ..() + + data["time"] = time * 10 + data["timing"] = timing + data["range"] = range + data["maxRange"] = 5 + data["scanning"] = scanning + + return data + +/obj/item/device/assembly/prox_sensor/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("scanning") + toggle_scan() + return TRUE + if("timing") + timing = !timing + update_icon() + return TRUE + if("set_time") + var/real_new_time = 0 + var/new_time = params["time"] + var/list/L = splittext(new_time, ":") + if(LAZYLEN(L)) + for(var/i in 1 to LAZYLEN(L)) + real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) + else + real_new_time = text2num(new_time) + time = clamp(real_new_time, 0, 600) + return TRUE + if("range") + range = clamp(params["range"], 1, 5) + return TRUE diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 8dab46f163..c55d6a72ca 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -1,46 +1,46 @@ -/obj/item/assembly/shock_kit - name = "electrohelmet assembly" - desc = "This appears to be made from both an electropack and a helmet." - icon_state = "shock_kit" - var/obj/item/clothing/head/helmet/part1 = null - var/obj/item/device/radio/electropack/part2 = null - var/status = 0 - w_class = ITEMSIZE_HUGE - -/obj/item/assembly/shock_kit/Destroy() - qdel(part1) - qdel(part2) - ..() - return - -/obj/item/assembly/shock_kit/attackby(var/obj/item/weapon/W, var/mob/user) - if(W.has_tool_quality(TOOL_WRENCH) && !status) - var/turf/T = loc - if(ismob(T)) - T = T.loc - part1.loc = T - part2.loc = T - part1.master = null - part2.master = null - part1 = null - part2 = null - qdel(src) - return - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - status = !status - to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") - playsound(src, W.usesound, 50, 1) - add_fingerprint(user) - return - -/obj/item/assembly/shock_kit/attack_self(mob/user as mob) - part1.attack_self(user, status) - part2.attack_self(user, status) - add_fingerprint(user) - return - -/obj/item/assembly/shock_kit/receive_signal() - if(istype(loc, /obj/structure/bed/chair/e_chair)) - var/obj/structure/bed/chair/e_chair/C = loc - C.shock() - return +/obj/item/assembly/shock_kit + name = "electrohelmet assembly" + desc = "This appears to be made from both an electropack and a helmet." + icon_state = "shock_kit" + var/obj/item/clothing/head/helmet/part1 = null + var/obj/item/device/radio/electropack/part2 = null + var/status = 0 + w_class = ITEMSIZE_HUGE + +/obj/item/assembly/shock_kit/Destroy() + qdel(part1) + qdel(part2) + ..() + return + +/obj/item/assembly/shock_kit/attackby(var/obj/item/weapon/W, var/mob/user) + if(W.has_tool_quality(TOOL_WRENCH) && !status) + var/turf/T = loc + if(ismob(T)) + T = T.loc + part1.loc = T + part2.loc = T + part1.master = null + part2.master = null + part1 = null + part2 = null + qdel(src) + return + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + status = !status + to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") + playsound(src, W.usesound, 50, 1) + add_fingerprint(user) + return + +/obj/item/assembly/shock_kit/attack_self(mob/user as mob) + part1.attack_self(user, status) + part2.attack_self(user, status) + add_fingerprint(user) + return + +/obj/item/assembly/shock_kit/receive_signal() + if(istype(loc, /obj/structure/bed/chair/e_chair)) + var/obj/structure/bed/chair/e_chair/C = loc + C.shock() + return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index a7267ca342..a87a13a576 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -1,137 +1,137 @@ -/obj/item/device/assembly/signaler - name = "remote signaling device" - desc = "Used to remotely activate devices. Tap against another secured signaler to transfer configuration." - icon_state = "signaller" - item_state = "signaler" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 1000, MAT_GLASS = 200) - wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE - - secured = TRUE - - var/code = 30 - var/frequency = 1457 - var/delay = 0 - var/airlock_wire = null - var/datum/wires/connected = null - var/datum/radio_frequency/radio_connection - -/obj/item/device/assembly/signaler/Initialize() - . = ..() - set_frequency(frequency) - -/obj/item/device/assembly/signaler/activate() - if(!process_cooldown()) - return FALSE - signal() - return TRUE - -/obj/item/device/assembly/signaler/update_icon() - if(holder) - holder.update_icon() - -/obj/item/device/assembly/signaler/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Signaler", name) - ui.open() - -/obj/item/device/assembly/signaler/tgui_data(mob/user) - var/list/data = list() - data["frequency"] = frequency - data["code"] = code - data["minFrequency"] = RADIO_LOW_FREQ - data["maxFrequency"] = RADIO_HIGH_FREQ - return data - -/obj/item/device/assembly/signaler/tgui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("signal") - INVOKE_ASYNC(src, PROC_REF(signal)) - . = TRUE - if("freq") - frequency = unformat_frequency(params["freq"]) - frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - set_frequency(frequency) - . = TRUE - if("code") - code = text2num(params["code"]) - code = clamp(round(code), 1, 100) - . = TRUE - if("reset") - if(params["reset"] == "freq") - set_frequency(initial(frequency)) - else - code = initial(code) - . = TRUE - - update_icon() - -/obj/item/device/assembly/signaler/attackby(var/obj/item/weapon/W, mob/user, params) - if(issignaler(W)) - var/obj/item/device/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 [signaler2] to [src].") - else - ..() - -/obj/item/device/assembly/signaler/proc/signal() - if(!radio_connection) - return - if(is_jammed(src)) - return - - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" - radio_connection.post_signal(src, signal) - -/obj/item/device/assembly/signaler/pulse(var/radio = 0) - if(is_jammed(src)) - return FALSE - if(connected && wires) - connected.pulse_assembly(src) - else if(holder) - holder.process_activation(src, 1, 0) - else - ..(radio) - return TRUE - -/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) - if(!signal) - return FALSE - if(signal.encryption != code) - return FALSE - if(!(src.wires & WIRE_RADIO_RECEIVE)) - return FALSE - if(is_jammed(src)) - return FALSE - pulse(1) - - if(!holder) - for(var/mob/O in hearers(1, src.loc)) - O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) - -/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) - if(!frequency) - return - if(!radio_controller) - sleep(20) - if(!radio_controller) - return - - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - -/obj/item/device/assembly/signaler/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - frequency = 0 - . = ..() +/obj/item/device/assembly/signaler + name = "remote signaling device" + desc = "Used to remotely activate devices. Tap against another secured signaler to transfer configuration." + icon_state = "signaller" + item_state = "signaler" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 1000, MAT_GLASS = 200) + wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE + + secured = TRUE + + var/code = 30 + var/frequency = 1457 + var/delay = 0 + var/airlock_wire = null + var/datum/wires/connected = null + var/datum/radio_frequency/radio_connection + +/obj/item/device/assembly/signaler/Initialize() + . = ..() + set_frequency(frequency) + +/obj/item/device/assembly/signaler/activate() + if(!process_cooldown()) + return FALSE + signal() + return TRUE + +/obj/item/device/assembly/signaler/update_icon() + if(holder) + holder.update_icon() + +/obj/item/device/assembly/signaler/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Signaler", name) + ui.open() + +/obj/item/device/assembly/signaler/tgui_data(mob/user) + var/list/data = list() + data["frequency"] = frequency + data["code"] = code + data["minFrequency"] = RADIO_LOW_FREQ + data["maxFrequency"] = RADIO_HIGH_FREQ + return data + +/obj/item/device/assembly/signaler/tgui_act(action, params) + if(..()) + return TRUE + + switch(action) + if("signal") + INVOKE_ASYNC(src, PROC_REF(signal)) + . = TRUE + if("freq") + frequency = unformat_frequency(params["freq"]) + frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) + set_frequency(frequency) + . = TRUE + if("code") + code = text2num(params["code"]) + code = clamp(round(code), 1, 100) + . = TRUE + if("reset") + if(params["reset"] == "freq") + set_frequency(initial(frequency)) + else + code = initial(code) + . = TRUE + + update_icon() + +/obj/item/device/assembly/signaler/attackby(var/obj/item/weapon/W, mob/user, params) + if(issignaler(W)) + var/obj/item/device/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 [signaler2] to [src].") + else + ..() + +/obj/item/device/assembly/signaler/proc/signal() + if(!radio_connection) + return + if(is_jammed(src)) + return + + var/datum/signal/signal = new + signal.source = src + signal.encryption = code + signal.data["message"] = "ACTIVATE" + radio_connection.post_signal(src, signal) + +/obj/item/device/assembly/signaler/pulse(var/radio = 0) + if(is_jammed(src)) + return FALSE + if(connected && wires) + connected.pulse_assembly(src) + else if(holder) + holder.process_activation(src, 1, 0) + else + ..(radio) + return TRUE + +/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) + if(!signal) + return FALSE + if(signal.encryption != code) + return FALSE + if(!(src.wires & WIRE_RADIO_RECEIVE)) + return FALSE + if(is_jammed(src)) + return FALSE + pulse(1) + + if(!holder) + for(var/mob/O in hearers(1, src.loc)) + O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + +/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) + if(!frequency) + return + if(!radio_controller) + sleep(20) + if(!radio_controller) + return + + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + +/obj/item/device/assembly/signaler/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + frequency = 0 + . = ..() diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index c480ed4a4e..dd13a1e4a2 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -1,99 +1,99 @@ -/obj/item/device/assembly/timer - name = "timer" - desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." - icon_state = "timer" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MAT_STEEL = 500, MAT_GLASS = 50) - - wires = WIRE_PULSE - - secured = 0 - - var/timing = 0 - var/time = 10 - - -/obj/item/device/assembly/timer/activate() - if(!..()) - return FALSE - - set_state(!timing) - - update_icon() - return 0 - -/obj/item/device/assembly/timer/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - else - timing = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - -/obj/item/device/assembly/timer/proc/set_state(var/state) - if(state && !timing) //Not running, starting though - START_PROCESSING(SSobj, src) - else if(timing && !state) //Running, stopping though - STOP_PROCESSING(SSobj, src) - timing = state - -/obj/item/device/assembly/timer/proc/timer_end() - if(!secured) - return 0 - pulse(0) - if(!holder) - visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") - -/obj/item/device/assembly/timer/process() - if(timing && time-- <= 0) - set_state(0) - timer_end() - time = 10 - -/obj/item/device/assembly/timer/update_icon() - cut_overlays() - attached_overlays = list() - if(timing) - add_overlay("timer_timing") - attached_overlays += "timer_timing" - if(holder) - holder.update_icon() - return - -/obj/item/device/assembly/timer/tgui_interact(mob/user, datum/tgui/ui) - if(!secured) - to_chat(user, "[src] is unsecured!") - return FALSE - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AssemblyTimer", name) - ui.open() - -/obj/item/device/assembly/timer/tgui_data(mob/user) - var/list/data = ..() - data["time"] = time * 10 - data["timing"] = timing - return data - -/obj/item/device/assembly/timer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("timing") - set_state(!timing) - update_icon() - return TRUE - if("set_time") - var/real_new_time = 0 - var/new_time = params["time"] - var/list/L = splittext(new_time, ":") - if(LAZYLEN(L)) - for(var/i in 1 to LAZYLEN(L)) - real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) - else - real_new_time = text2num(new_time) - time = clamp(real_new_time, 0, 600) - return TRUE +/obj/item/device/assembly/timer + name = "timer" + desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." + icon_state = "timer" + origin_tech = list(TECH_MAGNET = 1) + matter = list(MAT_STEEL = 500, MAT_GLASS = 50) + + wires = WIRE_PULSE + + secured = 0 + + var/timing = 0 + var/time = 10 + + +/obj/item/device/assembly/timer/activate() + if(!..()) + return FALSE + + set_state(!timing) + + update_icon() + return 0 + +/obj/item/device/assembly/timer/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSobj, src) + else + timing = 0 + STOP_PROCESSING(SSobj, src) + update_icon() + return secured + +/obj/item/device/assembly/timer/proc/set_state(var/state) + if(state && !timing) //Not running, starting though + START_PROCESSING(SSobj, src) + else if(timing && !state) //Running, stopping though + STOP_PROCESSING(SSobj, src) + timing = state + +/obj/item/device/assembly/timer/proc/timer_end() + if(!secured) + return 0 + pulse(0) + if(!holder) + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") + +/obj/item/device/assembly/timer/process() + if(timing && time-- <= 0) + set_state(0) + timer_end() + time = 10 + +/obj/item/device/assembly/timer/update_icon() + cut_overlays() + attached_overlays = list() + if(timing) + add_overlay("timer_timing") + attached_overlays += "timer_timing" + if(holder) + holder.update_icon() + return + +/obj/item/device/assembly/timer/tgui_interact(mob/user, datum/tgui/ui) + if(!secured) + to_chat(user, "[src] is unsecured!") + return FALSE + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AssemblyTimer", name) + ui.open() + +/obj/item/device/assembly/timer/tgui_data(mob/user) + var/list/data = ..() + data["time"] = time * 10 + data["timing"] = timing + return data + +/obj/item/device/assembly/timer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("timing") + set_state(!timing) + update_icon() + return TRUE + if("set_time") + var/real_new_time = 0 + var/new_time = params["time"] + var/list/L = splittext(new_time, ":") + if(LAZYLEN(L)) + for(var/i in 1 to LAZYLEN(L)) + real_new_time += text2num(L[i]) * (60 ** (LAZYLEN(L) - i)) + else + real_new_time = text2num(new_time) + time = clamp(real_new_time, 0, 600) + return TRUE diff --git a/code/modules/asset_cache/assets/chat.dm b/code/modules/asset_cache/assets/chat.dm index eba0e5418e..328beaca9d 100644 --- a/code/modules/asset_cache/assets/chat.dm +++ b/code/modules/asset_cache/assets/chat.dm @@ -1,2 +1,2 @@ -/datum/asset/spritesheet/chat - name = "chat" +/datum/asset/spritesheet/chat + name = "chat" diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 5781085c5e..f11b9ee61e 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -1,51 +1,51 @@ - -/obj/machinery/artillerycontrol - var/reload = 180 - name = "bluespace artillery control" - icon_state = "control_boxp1" - icon = 'icons/obj/machines/particle_accelerator2.dmi' - density = TRUE - anchored = TRUE - -/obj/machinery/artillerycontrol/process() - if(src.reload<180) - src.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/attack_hand(mob/user as mob) - user.set_machine(src) - var/dat = "Bluespace Artillery Control:
                    " - dat += "Locked on
                    " - dat += "Charge progress: [reload]/180:
                    " - dat += "Open Fire
                    " - dat += "Deployment of weapon authorized by
                    [using_map.company_name] Naval Command

                    Remember, friendly fire is grounds for termination of your contract and life.
                    " - user << browse(dat, "window=scroll") - onclose(user, "scroll") - return - -/obj/machinery/artillerycontrol/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained()) - return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - var/A = tgui_input_list(usr, "Area to jump bombard", "Open Fire", teleportlocs) - var/area/thearea = teleportlocs[A] - if (usr.stat || usr.restrained()) return - if(src.reload < 180) return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.") - message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1) - var/list/L = list() - for(var/turf/T in get_area_turfs(thearea.type)) - L+=T - var/loc = pick(L) - explosion(loc,2,5,11) - reload = 0 + +/obj/machinery/artillerycontrol + var/reload = 180 + name = "bluespace artillery control" + icon_state = "control_boxp1" + icon = 'icons/obj/machines/particle_accelerator2.dmi' + density = TRUE + anchored = TRUE + +/obj/machinery/artillerycontrol/process() + if(src.reload<180) + src.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/attack_hand(mob/user as mob) + user.set_machine(src) + var/dat = "Bluespace Artillery Control:
                    " + dat += "Locked on
                    " + dat += "Charge progress: [reload]/180:
                    " + dat += "Open Fire
                    " + dat += "Deployment of weapon authorized by
                    [using_map.company_name] Naval Command

                    Remember, friendly fire is grounds for termination of your contract and life.
                    " + user << browse(dat, "window=scroll") + onclose(user, "scroll") + return + +/obj/machinery/artillerycontrol/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + var/A = tgui_input_list(usr, "Area to jump bombard", "Open Fire", teleportlocs) + var/area/thearea = teleportlocs[A] + if (usr.stat || usr.restrained()) return + if(src.reload < 180) return + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.") + message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1) + var/list/L = list() + for(var/turf/T in get_area_turfs(thearea.type)) + L+=T + var/loc = pick(L) + explosion(loc,2,5,11) + reload = 0 diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 1aaaab9e48..b3ab39f74e 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -1,381 +1,381 @@ -//These are meant for spawning on maps, namely Away Missions. - -//If someone can do this in a neater way, be my guest-Kor - -//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). - -/obj/effect/landmark/corpse - name = "Unknown" - var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now - var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. - var/corpsesuit = null - var/corpseshoes = null - var/corpsegloves = null - var/corpseradio = null - var/corpseglasses = null - var/corpsemask = null - var/corpsehelmet = null - var/corpsebelt = null - var/corpsepocket1 = null - var/corpsepocket2 = null - var/corpseback = null - var/corpseid = 0 //Just set to 1 if you want them to have an ID - var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access - var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. - var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID - var/species = SPECIES_HUMAN //defaults to generic-ass humans - var/random_species = FALSE //flip to TRUE to randomize species from the list below - var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake. -// var/random_appearance = FALSE //TODO: make this work -// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death - delete_me = TRUE - -/obj/effect/landmark/corpse/Initialize() - ..() - createCorpse() - return INITIALIZE_HINT_QDEL - -/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. - var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) - M.low_sorting_priority = TRUE - if(random_species) - var/random_pick = pick(random_species_list) - M.set_species(random_pick) - src.species = random_pick - else - M.set_species(species) - //TODO: insert appearance randomization, needs to be species-based - M.real_name = src.name - M.death(1) //Kills the new mob - //TODO: insert cause of death handling/wound simulation here - if(src.corpseuniform) - M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) - if(src.corpseshoes) - M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes) - if(src.corpsegloves) - M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves) - if(src.corpseradio) - M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear) - if(src.corpseglasses) - M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses) - if(src.corpsemask) - M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask) - if(src.corpsebelt) - M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt) - if(src.corpsepocket1) - M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store) - if(src.corpsepocket2) - M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store) - if(src.corpseback) - M.equip_to_slot_or_del(new src.corpseback(M), slot_back) - if(src.corpseid == 1) - var/obj/item/weapon/card/id/W = new(M) - var/datum/job/jobdatum - for(var/jobtype in typesof(/datum/job)) - var/datum/job/J = new jobtype - if(J.title == corpseidaccess) - jobdatum = J - break - if(src.corpseidicon) - W.icon_state = corpseidicon - if(src.corpseidaccess) - if(jobdatum) - W.access = jobdatum.get_access() - else - W.access = list() - if(corpseidjob) - W.assignment = corpseidjob - M.set_id_info(W) - M.equip_to_slot_or_del(W, slot_wear_id) - // Do suit last to avoid equipping issues - if(src.corpsehelmet) - M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species) - if(src.corpsesuit) - M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species) - - - -// 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. - -/obj/effect/landmark/corpse/syndicatesoldier - name = "Mercenary" - corpseuniform = /obj/item/clothing/under/syndicate - corpsesuit = /obj/item/clothing/suit/armor/vest - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsegloves = /obj/item/clothing/gloves/swat - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas - corpsehelmet = /obj/item/clothing/head/helmet/swat - corpseback = /obj/item/weapon/storage/backpack - corpseid = 1 - corpseidjob = "Operative" - corpseidaccess = "Syndicate" - -/obj/effect/landmark/corpse/syndicatecommando - name = "Mercenary Commando" - corpseuniform = /obj/item/clothing/under/syndicate - corpsesuit = /obj/item/clothing/suit/space/void/merc - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsegloves = /obj/item/clothing/gloves/swat - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas/syndicate - corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc - corpseback = /obj/item/weapon/tank/jetpack/oxygen - corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen - corpseid = 1 - corpseidjob = "Operative" - corpseidaccess = "Syndicate" - -///////////Civilians////////////////////// - -/obj/effect/landmark/corpse/random_civ - name = "Civilian" - corpseuniform = /obj/item/clothing/under/color/grey - corpseshoes = /obj/item/clothing/shoes/black - random_species = TRUE - - - -/obj/effect/landmark/corpse/chef - name = "Chef" - corpseuniform = /obj/item/clothing/under/rank/chef - corpsesuit = /obj/item/clothing/suit/chef/classic - corpseshoes = /obj/item/clothing/shoes/black - corpsehelmet = /obj/item/clothing/head/chefhat - corpseback = /obj/item/weapon/storage/backpack - corpseradio = /obj/item/device/radio/headset - corpseid = 1 - corpseidjob = "Chef" - corpseidaccess = "Chef" - - -/obj/effect/landmark/corpse/doctor - name = "Doctor" - corpseradio = /obj/item/device/radio/headset/headset_med - corpseuniform = /obj/item/clothing/under/rank/medical - corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat - corpseback = /obj/item/weapon/storage/backpack/medic - corpsepocket1 = /obj/item/device/flashlight/pen - corpseshoes = /obj/item/clothing/shoes/black - corpseid = 1 - corpseidjob = "Medical Doctor" - corpseidaccess = "Medical Doctor" - -/obj/effect/landmark/corpse/engineer - name = "Engineer" - corpseradio = /obj/item/device/radio/headset/headset_eng - corpseuniform = /obj/item/clothing/under/rank/engineer - corpseback = /obj/item/weapon/storage/backpack/industrial - corpseshoes = /obj/item/clothing/shoes/orange - corpsebelt = /obj/item/weapon/storage/belt/utility/full - corpsegloves = /obj/item/clothing/gloves/yellow - corpsehelmet = /obj/item/clothing/head/hardhat - corpseid = 1 - corpseidjob = "Engineer" - corpseidaccess = "Engineer" - -/obj/effect/landmark/corpse/engineer/rig - corpsesuit = /obj/item/clothing/suit/space/void/engineering - corpsemask = /obj/item/clothing/mask/breath - corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering - corpseback = /obj/item/weapon/tank/oxygen - -/obj/effect/landmark/corpse/clown - name = "Clown" - corpseuniform = /obj/item/clothing/under/rank/clown - corpseshoes = /obj/item/clothing/shoes/clown_shoes - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas/clown_hat - corpsepocket1 = /obj/item/weapon/bikehorn - corpseback = /obj/item/weapon/storage/backpack/clown - corpseid = 1 - corpseidjob = "Clown" - corpseidaccess = "Clown" - -/obj/effect/landmark/corpse/scientist - name = "Scientist" - corpseradio = /obj/item/device/radio/headset/headset_sci - corpseuniform = /obj/item/clothing/under/rank/scientist - corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat/science - corpseback = /obj/item/weapon/storage/backpack - corpseshoes = /obj/item/clothing/shoes/white - corpseid = 1 - corpseidjob = "Scientist" - corpseidaccess = "Scientist" - -/obj/effect/landmark/corpse/security - name = "Security Officer" - corpseradio = /obj/item/device/radio/headset/headset_sec - corpseuniform = /obj/item/clothing/under/rank/security - corpsesuit = /obj/item/clothing/suit/armor/vest - corpseback = /obj/item/weapon/storage/backpack/security - corpseshoes = /obj/item/clothing/shoes/boots/jackboots - corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud - corpsegloves = /obj/item/clothing/gloves/black - corpsehelmet = /obj/item/clothing/head/helmet - corpseid = 1 - corpseidjob = "Security Officer" - corpseidaccess = "Security Officer" - -/obj/effect/landmark/corpse/security/rig - corpsesuit = /obj/item/clothing/suit/space/void/security - corpsemask = /obj/item/clothing/mask/breath - corpsehelmet = /obj/item/clothing/head/helmet/space/void/security - corpseback = /obj/item/weapon/tank/jetpack/oxygen - -/obj/effect/landmark/corpse/security/rig/eva - corpsesuit = /obj/item/clothing/suit/space/void/security/alt - corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt - corpseidjob = "Starship Security Officer" - -/obj/effect/landmark/corpse/prisoner - name = "Unknown Prisoner" - corpseuniform = /obj/item/clothing/under/color/prison - corpseshoes = /obj/item/clothing/shoes/orange - corpseid = 1 - corpseidjob = "Prisoner" - random_species = TRUE - -/obj/effect/landmark/corpse/miner - corpseradio = /obj/item/device/radio/headset/headset_cargo - corpseuniform = /obj/item/clothing/under/rank/miner - corpsegloves = /obj/item/clothing/gloves/black - corpseback = /obj/item/weapon/storage/backpack/industrial - corpseshoes = /obj/item/clothing/shoes/black - corpseid = 1 - corpseidjob = "Shaft Miner" - corpseidaccess = "Shaft Miner" - -/obj/effect/landmark/corpse/miner/rig - corpsesuit = /obj/item/clothing/suit/space/void/mining - corpsemask = /obj/item/clothing/mask/breath - corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining - corpseback = /obj/item/weapon/tank/oxygen - -/////////////////Vintage////////////////////// - -//define the basic props at this level and only change specifics for variants, e.z. -/obj/effect/landmark/corpse/vintage - name = "Unknown Crewmate" - corpseuniform = /obj/item/clothing/under/utility - corpsesuit = /obj/item/clothing/suit/space/void/refurb - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb - corpsemask = /obj/item/clothing/mask/breath - corpseback = /obj/item/weapon/tank/oxygen - corpseid = 1 - corpseidjob = "Crewmate" - -/obj/effect/landmark/corpse/vintage/engineering - name = "Unknown Engineer" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/engineering - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/engineering - corpsebelt = /obj/item/weapon/storage/belt/utility/full - corpseback = /obj/item/weapon/tank/oxygen/yellow - corpseidjob = "Engineer" - -/obj/effect/landmark/corpse/vintage/marine - name = "Unknown Marine" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/marine - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/marine - corpsebelt = /obj/item/weapon/storage/belt/security/tactical - corpseidjob = "Marine" - -/obj/effect/landmark/corpse/vintage/medical - name = "Unknown Medic" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/medical - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/medical - corpsebelt = /obj/item/weapon/storage/belt/medical - corpseidjob = "Medic" - -/obj/effect/landmark/corpse/vintage/mercenary - name = "Unknown Mercenary" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/mercenary - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/mercenary - corpsebelt = /obj/item/weapon/storage/belt/security/tactical - corpseback = /obj/item/weapon/tank/oxygen/red - corpseidjob = "Mercenary" - -/obj/effect/landmark/corpse/vintage/officer - name = "Unknown Captain" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/officer - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/officer - corpseback = /obj/item/weapon/tank/oxygen/yellow - corpseidjob = "Captain" - -/obj/effect/landmark/corpse/vintage/pilot - name = "Unknown Pilot" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/pilot - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/pilot - corpseidjob = "Pilot" - -/obj/effect/landmark/corpse/vintage/research - name = "Unknown Researcher" - corpsesuit = /obj/item/clothing/suit/space/void/refurb/research - corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/research - corpseidjob = "Researcher" - -/////////////////Officers////////////////////// - -/obj/effect/landmark/corpse/bridgeofficer - name = "Bridge Officer" - corpseradio = /obj/item/device/radio/headset/heads/hop - corpseuniform = /obj/item/clothing/under/rank/centcom_officer - corpsesuit = /obj/item/clothing/suit/armor/bulletproof - corpseshoes = /obj/item/clothing/shoes/black - corpseglasses = /obj/item/clothing/glasses/sunglasses - corpseid = 1 - corpseidjob = "Bridge Officer" - corpseidaccess = "Captain" - -/obj/effect/landmark/corpse/commander - name = "Commander" - corpseuniform = /obj/item/clothing/under/rank/centcom_captain - corpsesuit = /obj/item/clothing/suit/armor/bulletproof - corpseradio = /obj/item/device/radio/headset/heads/captain - corpseglasses = /obj/item/clothing/glasses/eyepatch - corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba - corpsehelmet = /obj/item/clothing/head/centhat - corpsegloves = /obj/item/clothing/gloves/swat - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsepocket1 = /obj/item/weapon/flame/lighter/zippo - corpseid = 1 - corpseidjob = "Commander" - corpseidaccess = "Captain" - -/////////////////Lore Factions////////////////////// - -/obj/effect/landmark/corpse/sifguard - name = "Patrolman" - corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard - corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov - corpsebelt = /obj/item/weapon/storage/belt/security/tactical - corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud - corpsemask = /obj/item/clothing/mask/balaclava - corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard - corpsegloves = /obj/item/clothing/gloves/duty - corpseshoes = /obj/item/clothing/shoes/boots/tactical - corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard - corpseid = 1 - corpseidjob = "Sif Defense Force Patrolman" - -/obj/effect/landmark/corpse/hedberg - name = "Hedberg-Hammarstrom Mercenary" - corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard - corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg - corpsebelt = /obj/item/weapon/storage/belt/security - corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud - corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg - corpseshoes = /obj/item/clothing/shoes/boots/jackboots - corpseid = 1 - corpseidjob = "Hedberg-Hammarstrom Officer" - -/obj/effect/landmark/corpse/hedberg/merc - name = "Hedberg-Hammarstrom Mercenary" - corpsebelt = /obj/item/weapon/storage/belt/security/tactical - corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud - corpsehelmet = /obj/item/clothing/head/helmet/flexitac - corpsegloves = /obj/item/clothing/gloves/combat - corpseshoes = /obj/item/clothing/shoes/boots/tactical - corpseid = 1 - corpseidjob = "Hedberg-Hammarstrom Enforcer" - +//These are meant for spawning on maps, namely Away Missions. + +//If someone can do this in a neater way, be my guest-Kor + +//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). + +/obj/effect/landmark/corpse + name = "Unknown" + var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now + var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. + var/corpsesuit = null + var/corpseshoes = null + var/corpsegloves = null + var/corpseradio = null + var/corpseglasses = null + var/corpsemask = null + var/corpsehelmet = null + var/corpsebelt = null + var/corpsepocket1 = null + var/corpsepocket2 = null + var/corpseback = null + var/corpseid = 0 //Just set to 1 if you want them to have an ID + var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access + var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. + var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID + var/species = SPECIES_HUMAN //defaults to generic-ass humans + var/random_species = FALSE //flip to TRUE to randomize species from the list below + var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake. +// var/random_appearance = FALSE //TODO: make this work +// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death + delete_me = TRUE + +/obj/effect/landmark/corpse/Initialize() + ..() + createCorpse() + return INITIALIZE_HINT_QDEL + +/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. + var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) + M.low_sorting_priority = TRUE + if(random_species) + var/random_pick = pick(random_species_list) + M.set_species(random_pick) + src.species = random_pick + else + M.set_species(species) + //TODO: insert appearance randomization, needs to be species-based + M.real_name = src.name + M.death(1) //Kills the new mob + //TODO: insert cause of death handling/wound simulation here + if(src.corpseuniform) + M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) + if(src.corpseshoes) + M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes) + if(src.corpsegloves) + M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves) + if(src.corpseradio) + M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear) + if(src.corpseglasses) + M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses) + if(src.corpsemask) + M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask) + if(src.corpsebelt) + M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt) + if(src.corpsepocket1) + M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store) + if(src.corpsepocket2) + M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store) + if(src.corpseback) + M.equip_to_slot_or_del(new src.corpseback(M), slot_back) + if(src.corpseid == 1) + var/obj/item/weapon/card/id/W = new(M) + var/datum/job/jobdatum + for(var/jobtype in typesof(/datum/job)) + var/datum/job/J = new jobtype + if(J.title == corpseidaccess) + jobdatum = J + break + if(src.corpseidicon) + W.icon_state = corpseidicon + if(src.corpseidaccess) + if(jobdatum) + W.access = jobdatum.get_access() + else + W.access = list() + if(corpseidjob) + W.assignment = corpseidjob + M.set_id_info(W) + M.equip_to_slot_or_del(W, slot_wear_id) + // Do suit last to avoid equipping issues + if(src.corpsehelmet) + M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species) + if(src.corpsesuit) + M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species) + + + +// 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. + +/obj/effect/landmark/corpse/syndicatesoldier + name = "Mercenary" + corpseuniform = /obj/item/clothing/under/syndicate + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsegloves = /obj/item/clothing/gloves/swat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas + corpsehelmet = /obj/item/clothing/head/helmet/swat + corpseback = /obj/item/weapon/storage/backpack + corpseid = 1 + corpseidjob = "Operative" + corpseidaccess = "Syndicate" + +/obj/effect/landmark/corpse/syndicatecommando + name = "Mercenary Commando" + corpseuniform = /obj/item/clothing/under/syndicate + corpsesuit = /obj/item/clothing/suit/space/void/merc + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsegloves = /obj/item/clothing/gloves/swat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/syndicate + corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc + corpseback = /obj/item/weapon/tank/jetpack/oxygen + corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen + corpseid = 1 + corpseidjob = "Operative" + corpseidaccess = "Syndicate" + +///////////Civilians////////////////////// + +/obj/effect/landmark/corpse/random_civ + name = "Civilian" + corpseuniform = /obj/item/clothing/under/color/grey + corpseshoes = /obj/item/clothing/shoes/black + random_species = TRUE + + + +/obj/effect/landmark/corpse/chef + name = "Chef" + corpseuniform = /obj/item/clothing/under/rank/chef + corpsesuit = /obj/item/clothing/suit/chef/classic + corpseshoes = /obj/item/clothing/shoes/black + corpsehelmet = /obj/item/clothing/head/chefhat + corpseback = /obj/item/weapon/storage/backpack + corpseradio = /obj/item/device/radio/headset + corpseid = 1 + corpseidjob = "Chef" + corpseidaccess = "Chef" + + +/obj/effect/landmark/corpse/doctor + name = "Doctor" + corpseradio = /obj/item/device/radio/headset/headset_med + corpseuniform = /obj/item/clothing/under/rank/medical + corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat + corpseback = /obj/item/weapon/storage/backpack/medic + corpsepocket1 = /obj/item/device/flashlight/pen + corpseshoes = /obj/item/clothing/shoes/black + corpseid = 1 + corpseidjob = "Medical Doctor" + corpseidaccess = "Medical Doctor" + +/obj/effect/landmark/corpse/engineer + name = "Engineer" + corpseradio = /obj/item/device/radio/headset/headset_eng + corpseuniform = /obj/item/clothing/under/rank/engineer + corpseback = /obj/item/weapon/storage/backpack/industrial + corpseshoes = /obj/item/clothing/shoes/orange + corpsebelt = /obj/item/weapon/storage/belt/utility/full + corpsegloves = /obj/item/clothing/gloves/yellow + corpsehelmet = /obj/item/clothing/head/hardhat + corpseid = 1 + corpseidjob = "Engineer" + corpseidaccess = "Engineer" + +/obj/effect/landmark/corpse/engineer/rig + corpsesuit = /obj/item/clothing/suit/space/void/engineering + corpsemask = /obj/item/clothing/mask/breath + corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering + corpseback = /obj/item/weapon/tank/oxygen + +/obj/effect/landmark/corpse/clown + name = "Clown" + corpseuniform = /obj/item/clothing/under/rank/clown + corpseshoes = /obj/item/clothing/shoes/clown_shoes + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/clown_hat + corpsepocket1 = /obj/item/weapon/bikehorn + corpseback = /obj/item/weapon/storage/backpack/clown + corpseid = 1 + corpseidjob = "Clown" + corpseidaccess = "Clown" + +/obj/effect/landmark/corpse/scientist + name = "Scientist" + corpseradio = /obj/item/device/radio/headset/headset_sci + corpseuniform = /obj/item/clothing/under/rank/scientist + corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat/science + corpseback = /obj/item/weapon/storage/backpack + corpseshoes = /obj/item/clothing/shoes/white + corpseid = 1 + corpseidjob = "Scientist" + corpseidaccess = "Scientist" + +/obj/effect/landmark/corpse/security + name = "Security Officer" + corpseradio = /obj/item/device/radio/headset/headset_sec + corpseuniform = /obj/item/clothing/under/rank/security + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseback = /obj/item/weapon/storage/backpack/security + corpseshoes = /obj/item/clothing/shoes/boots/jackboots + corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud + corpsegloves = /obj/item/clothing/gloves/black + corpsehelmet = /obj/item/clothing/head/helmet + corpseid = 1 + corpseidjob = "Security Officer" + corpseidaccess = "Security Officer" + +/obj/effect/landmark/corpse/security/rig + corpsesuit = /obj/item/clothing/suit/space/void/security + corpsemask = /obj/item/clothing/mask/breath + corpsehelmet = /obj/item/clothing/head/helmet/space/void/security + corpseback = /obj/item/weapon/tank/jetpack/oxygen + +/obj/effect/landmark/corpse/security/rig/eva + corpsesuit = /obj/item/clothing/suit/space/void/security/alt + corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt + corpseidjob = "Starship Security Officer" + +/obj/effect/landmark/corpse/prisoner + name = "Unknown Prisoner" + corpseuniform = /obj/item/clothing/under/color/prison + corpseshoes = /obj/item/clothing/shoes/orange + corpseid = 1 + corpseidjob = "Prisoner" + random_species = TRUE + +/obj/effect/landmark/corpse/miner + corpseradio = /obj/item/device/radio/headset/headset_cargo + corpseuniform = /obj/item/clothing/under/rank/miner + corpsegloves = /obj/item/clothing/gloves/black + corpseback = /obj/item/weapon/storage/backpack/industrial + corpseshoes = /obj/item/clothing/shoes/black + corpseid = 1 + corpseidjob = "Shaft Miner" + corpseidaccess = "Shaft Miner" + +/obj/effect/landmark/corpse/miner/rig + corpsesuit = /obj/item/clothing/suit/space/void/mining + corpsemask = /obj/item/clothing/mask/breath + corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining + corpseback = /obj/item/weapon/tank/oxygen + +/////////////////Vintage////////////////////// + +//define the basic props at this level and only change specifics for variants, e.z. +/obj/effect/landmark/corpse/vintage + name = "Unknown Crewmate" + corpseuniform = /obj/item/clothing/under/utility + corpsesuit = /obj/item/clothing/suit/space/void/refurb + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb + corpsemask = /obj/item/clothing/mask/breath + corpseback = /obj/item/weapon/tank/oxygen + corpseid = 1 + corpseidjob = "Crewmate" + +/obj/effect/landmark/corpse/vintage/engineering + name = "Unknown Engineer" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/engineering + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/engineering + corpsebelt = /obj/item/weapon/storage/belt/utility/full + corpseback = /obj/item/weapon/tank/oxygen/yellow + corpseidjob = "Engineer" + +/obj/effect/landmark/corpse/vintage/marine + name = "Unknown Marine" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/marine + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/marine + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseidjob = "Marine" + +/obj/effect/landmark/corpse/vintage/medical + name = "Unknown Medic" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/medical + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/medical + corpsebelt = /obj/item/weapon/storage/belt/medical + corpseidjob = "Medic" + +/obj/effect/landmark/corpse/vintage/mercenary + name = "Unknown Mercenary" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/mercenary + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/mercenary + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseback = /obj/item/weapon/tank/oxygen/red + corpseidjob = "Mercenary" + +/obj/effect/landmark/corpse/vintage/officer + name = "Unknown Captain" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/officer + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/officer + corpseback = /obj/item/weapon/tank/oxygen/yellow + corpseidjob = "Captain" + +/obj/effect/landmark/corpse/vintage/pilot + name = "Unknown Pilot" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/pilot + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/pilot + corpseidjob = "Pilot" + +/obj/effect/landmark/corpse/vintage/research + name = "Unknown Researcher" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/research + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/research + corpseidjob = "Researcher" + +/////////////////Officers////////////////////// + +/obj/effect/landmark/corpse/bridgeofficer + name = "Bridge Officer" + corpseradio = /obj/item/device/radio/headset/heads/hop + corpseuniform = /obj/item/clothing/under/rank/centcom_officer + corpsesuit = /obj/item/clothing/suit/armor/bulletproof + corpseshoes = /obj/item/clothing/shoes/black + corpseglasses = /obj/item/clothing/glasses/sunglasses + corpseid = 1 + corpseidjob = "Bridge Officer" + corpseidaccess = "Captain" + +/obj/effect/landmark/corpse/commander + name = "Commander" + corpseuniform = /obj/item/clothing/under/rank/centcom_captain + corpsesuit = /obj/item/clothing/suit/armor/bulletproof + corpseradio = /obj/item/device/radio/headset/heads/captain + corpseglasses = /obj/item/clothing/glasses/eyepatch + corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba + corpsehelmet = /obj/item/clothing/head/centhat + corpsegloves = /obj/item/clothing/gloves/swat + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsepocket1 = /obj/item/weapon/flame/lighter/zippo + corpseid = 1 + corpseidjob = "Commander" + corpseidaccess = "Captain" + +/////////////////Lore Factions////////////////////// + +/obj/effect/landmark/corpse/sifguard + name = "Patrolman" + corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard + corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud + corpsemask = /obj/item/clothing/mask/balaclava + corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard + corpsegloves = /obj/item/clothing/gloves/duty + corpseshoes = /obj/item/clothing/shoes/boots/tactical + corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard + corpseid = 1 + corpseidjob = "Sif Defense Force Patrolman" + +/obj/effect/landmark/corpse/hedberg + name = "Hedberg-Hammarstrom Mercenary" + corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard + corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg + corpsebelt = /obj/item/weapon/storage/belt/security + corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud + corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg + corpseshoes = /obj/item/clothing/shoes/boots/jackboots + corpseid = 1 + corpseidjob = "Hedberg-Hammarstrom Officer" + +/obj/effect/landmark/corpse/hedberg/merc + name = "Hedberg-Hammarstrom Mercenary" + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud + corpsehelmet = /obj/item/clothing/head/helmet/flexitac + corpsegloves = /obj/item/clothing/gloves/combat + corpseshoes = /obj/item/clothing/shoes/boots/tactical + corpseid = 1 + corpseidjob = "Hedberg-Hammarstrom Enforcer" + diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index ef19bb0c49..1292812a77 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,41 +1,41 @@ -//////Exile implants will allow you to use the station gate, but not return home. This will allow security to exile badguys/for badguys to exile their kill targets//////// - - -/obj/item/weapon/implanter/exile - name = "implanter-exile" - -/obj/item/weapon/implanter/exile/New() - src.imp = new /obj/item/weapon/implant/exile( src ) - ..() - update() - return - - -/obj/item/weapon/implant/exile - name = "exile" - desc = "Prevents you from returning from away missions" - -/obj/item/weapon/implant/exile/get_data() - var/dat = {" -Implant Specifications:
                    -Name: [using_map.company_name] Employee Exile Implant
                    -Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
                    "} - return dat - -/obj/item/weapon/implantcase/exile - name = "Glass Case- 'Exile'" - desc = "A case containing an exile implant." - icon = 'icons/obj/items.dmi' - icon_state = "implantcase-r" - - -/obj/item/weapon/implantcase/exile/New() - src.imp = new /obj/item/weapon/implant/exile( src ) - ..() - return - - -/obj/structure/closet/secure_closet/exile - name = "Exile Implants" - req_access = list(access_hos) - starts_with = list(/obj/item/weapon/implanter/exile = 1, /obj/item/weapon/implantcase/exile = 5) +//////Exile implants will allow you to use the station gate, but not return home. This will allow security to exile badguys/for badguys to exile their kill targets//////// + + +/obj/item/weapon/implanter/exile + name = "implanter-exile" + +/obj/item/weapon/implanter/exile/New() + src.imp = new /obj/item/weapon/implant/exile( src ) + ..() + update() + return + + +/obj/item/weapon/implant/exile + name = "exile" + desc = "Prevents you from returning from away missions" + +/obj/item/weapon/implant/exile/get_data() + var/dat = {" +Implant Specifications:
                    +Name: [using_map.company_name] Employee Exile Implant
                    +Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
                    "} + return dat + +/obj/item/weapon/implantcase/exile + name = "Glass Case- 'Exile'" + desc = "A case containing an exile implant." + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-r" + + +/obj/item/weapon/implantcase/exile/New() + src.imp = new /obj/item/weapon/implant/exile( src ) + ..() + return + + +/obj/structure/closet/secure_closet/exile + name = "Exile Implants" + req_access = list(access_hos) + starts_with = list(/obj/item/weapon/implanter/exile = 1, /obj/item/weapon/implantcase/exile = 5) diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 530358940c..507c4e624d 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -1,21 +1,21 @@ -/obj/effect/spawner/lootdrop - icon = 'icons/mob/screen1.dmi' - icon_state = "x2" - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = 0 //if the same item can be spawned twice - var/loot = "" //a list of possible items to spawn- a string of paths - -/obj/effect/spawner/lootdrop/Initialize() - ..() - var/list/things = params2list(loot) - if(things && things.len) - for(var/i = lootcount, i > 0, i--) - if(!things.len) - return - var/loot_spawn = pick(things) - var/loot_path = text2path(loot_spawn) - if(!loot_path || !lootdoubles) - things.Remove(loot_spawn) - continue - new loot_path(get_turf(src)) - return INITIALIZE_HINT_QDEL +/obj/effect/spawner/lootdrop + icon = 'icons/mob/screen1.dmi' + icon_state = "x2" + var/lootcount = 1 //how many items will be spawned + var/lootdoubles = 0 //if the same item can be spawned twice + var/loot = "" //a list of possible items to spawn- a string of paths + +/obj/effect/spawner/lootdrop/Initialize() + ..() + var/list/things = params2list(loot) + if(things && things.len) + for(var/i = lootcount, i > 0, i--) + if(!things.len) + return + var/loot_spawn = pick(things) + var/loot_path = text2path(loot_spawn) + if(!loot_path || !lootdoubles) + things.Remove(loot_spawn) + continue + new loot_path(get_turf(src)) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index a7fae7b550..5d30000e73 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -1,38 +1,38 @@ -/obj/item/weapon/paper/pamphlet - name = "pamphlet" - icon_state = "pamphlet" - info = "Welcome to the Gateway project...
                    \ - Congratulations! If you're reading this, you and your superiors have decided that you're \ - ready to commit to a life spent colonising the rolling hills of far away worlds. You \ - must be ready for a lifetime of adventure, a little bit of hard work, and an award \ - winning dental plan- but that's not all the Gateway project has to offer.
                    \ -
                    Because we care about you, we feel it is only fair to make sure you know the risks \ - before you commit to joining the Gateway project. All away destinations have \ - been fully scanned by a expeditionary team, and are certified to be 100% safe. \ - We've even left a case of space beer along with the basic materials you'll need to expand \ - the Project's operational area and start your new life.

                    \ - Gateway Operation Basics
                    \ - All approved Gateways operate on the same basic principals. They operate off \ - area equipment power as you would expect, but they also require a backup wire with at least \ - 128, 000 Watts of power running through it. Without this supply, it cannot safely function \ - and will reject all attempts at operation.

                    \ - Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ - searching for an output location. The amount of time this takes is variable, but the Gateway \ - interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ - searching process. Influenza will not interrupt the searching process. Temporal anomalies \ - may cause the estimate to be inaccurate, but will not interrupt the searching process.

                    \ - Life On The Other Side
                    \ - Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ - This is a normal side effect of travelling vast distances in a short period of time. You should \ - survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ - expeditionary teams have ensured the complete safety of all away locations, but in a small \ - number of cases, the Gateway they have established may not be immediately obvious. \ - Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ -

                    A New World
                    \ - As a participant in the Gateway Project, you will be on the frontiers of space. \ - Though complete safety is assured, participants are advised to prepare for inhospitable \ - environs." - -//we don't want the silly text overlay! -/obj/item/weapon/paper/pamphlet/update_icon() +/obj/item/weapon/paper/pamphlet + name = "pamphlet" + icon_state = "pamphlet" + info = "Welcome to the Gateway project...
                    \ + Congratulations! If you're reading this, you and your superiors have decided that you're \ + ready to commit to a life spent colonising the rolling hills of far away worlds. You \ + must be ready for a lifetime of adventure, a little bit of hard work, and an award \ + winning dental plan- but that's not all the Gateway project has to offer.
                    \ +
                    Because we care about you, we feel it is only fair to make sure you know the risks \ + before you commit to joining the Gateway project. All away destinations have \ + been fully scanned by a expeditionary team, and are certified to be 100% safe. \ + We've even left a case of space beer along with the basic materials you'll need to expand \ + the Project's operational area and start your new life.

                    \ + Gateway Operation Basics
                    \ + All approved Gateways operate on the same basic principals. They operate off \ + area equipment power as you would expect, but they also require a backup wire with at least \ + 128, 000 Watts of power running through it. Without this supply, it cannot safely function \ + and will reject all attempts at operation.

                    \ + Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ + searching for an output location. The amount of time this takes is variable, but the Gateway \ + interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ + searching process. Influenza will not interrupt the searching process. Temporal anomalies \ + may cause the estimate to be inaccurate, but will not interrupt the searching process.

                    \ + Life On The Other Side
                    \ + Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ + This is a normal side effect of travelling vast distances in a short period of time. You should \ + survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ + expeditionary teams have ensured the complete safety of all away locations, but in a small \ + number of cases, the Gateway they have established may not be immediately obvious. \ + Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ +

                    A New World
                    \ + As a participant in the Gateway Project, you will be on the frontiers of space. \ + Though complete safety is assured, participants are advised to prepare for inhospitable \ + environs." + +//we don't want the silly text overlay! +/obj/item/weapon/paper/pamphlet/update_icon() return \ No newline at end of file diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm index 8c1de51c83..6c3764d344 100644 --- a/code/modules/awaymissions/trigger.dm +++ b/code/modules/awaymissions/trigger.dm @@ -1,53 +1,53 @@ -/obj/effect/step_trigger/message - var/message //the message to give to the mob - var/once = 1 - var/list/mobs = list() //CHOMPEdit - mobs we've sent our message to - -/obj/effect/step_trigger/message/Trigger(mob/M as mob) - //CHOMPEdit start - tweaked message trigger to be more sane - if(M.client) - if(once) - if(M in mobs) - return - else - mobs += M - to_chat(M, "[message]") - //CHOMPEdit end - -/obj/effect/step_trigger/teleport_fancy - var/locationx - var/locationy - var/locationz //CHOMPEdit - Why wasn't there a z for this - var/uses = 1 //0 for infinite uses - var/entersparks = 0 - var/exitsparks = 0 - var/entersmoke = 0 - var/exitsmoke = 0 - -/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob) - if(!locationz) - locationz = src.z //CHOMPEdit - Safety net to not break existing teleport triggers - var/dest = locate(locationx, locationy, locationz) //CHOMPEdit - added locationz - M.forceMove(dest) //CHOMPEdit - Teleports should be forceMove, not Move - - if(entersparks) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(4, 1, src) - s.start() - if(exitsparks) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(4, 1, dest) - s.start() - - if(entersmoke) - var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread - s.set_up(4, 1, src, 0) - s.start() - if(exitsmoke) - var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread - s.set_up(4, 1, dest, 0) - s.start() - - uses-- - if(uses == 0) +/obj/effect/step_trigger/message + var/message //the message to give to the mob + var/once = 1 + var/list/mobs = list() //CHOMPEdit - mobs we've sent our message to + +/obj/effect/step_trigger/message/Trigger(mob/M as mob) + //CHOMPEdit start - tweaked message trigger to be more sane + if(M.client) + if(once) + if(M in mobs) + return + else + mobs += M + to_chat(M, "[message]") + //CHOMPEdit end + +/obj/effect/step_trigger/teleport_fancy + var/locationx + var/locationy + var/locationz //CHOMPEdit - Why wasn't there a z for this + var/uses = 1 //0 for infinite uses + var/entersparks = 0 + var/exitsparks = 0 + var/entersmoke = 0 + var/exitsmoke = 0 + +/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob) + if(!locationz) + locationz = src.z //CHOMPEdit - Safety net to not break existing teleport triggers + var/dest = locate(locationx, locationy, locationz) //CHOMPEdit - added locationz + M.forceMove(dest) //CHOMPEdit - Teleports should be forceMove, not Move + + if(entersparks) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(4, 1, src) + s.start() + if(exitsparks) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(4, 1, dest) + s.start() + + if(entersmoke) + var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread + s.set_up(4, 1, src, 0) + s.start() + if(exitsmoke) + var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread + s.set_up(4, 1, dest, 0) + s.start() + + uses-- + if(uses == 0) qdel(src) \ No newline at end of file diff --git a/code/modules/catalogue/atoms.dm b/code/modules/catalogue/atoms.dm index 6a0cde14ec..69939aeb45 100644 --- a/code/modules/catalogue/atoms.dm +++ b/code/modules/catalogue/atoms.dm @@ -1,81 +1,81 @@ -/atom - var/catalogue_delay = 5 SECONDS // How long it take to scan. - // List of types of /datum/category_item/catalogue that should be 'unlocked' when scanned by a Cataloguer. - // It is null by default to save memory by not having everything hold onto empty lists. Use macros like LAZYLEN() to check. - // Also you should use get_catalogue_data() to access this instead of doing so directly, so special behavior can be enabled. - var/list/catalogue_data = null - -/mob - catalogue_delay = 10 SECONDS - -// Tests if something can be catalogued. -// If something goes wrong and a mob was supplied, the mob will be told why they can't catalogue it. -/atom/proc/can_catalogue(mob/user) - // First check if anything is even on here. - var/list/data = get_catalogue_data() - if(!LAZYLEN(data)) - to_chat(user, span("warning", "\The [src] is not interesting enough to catalogue.")) - return FALSE - else - // Check if this has nothing new on it. - var/has_new_data = FALSE - for(var/t in data) - var/datum/category_item/catalogue/item = GLOB.catalogue_data.resolve_item(t) - if(!item.visible) - has_new_data = TRUE - break - - if(!has_new_data) - to_chat(user, span("warning", "Scanning \the [src] would provide no new information.")) - return FALSE - - return TRUE - -/mob/living/can_catalogue(mob/user) // Dead mobs can't be scanned. - if(stat >= DEAD) - to_chat(user, span("warning", "Entities must be alive for a comprehensive scan.")) - return FALSE - return ..() - -/obj/item/can_catalogue(mob/user) // Items must be identified to be scanned. - if(!is_identified()) - to_chat(user, span("warning", "The properties of this object has not been determined. Identify it first.")) - return FALSE - return ..() - -/atom/proc/get_catalogue_delay() - return catalogue_delay - -// Override for special behaviour. -// Should return a list with one or more "/datum/category_item/catalogue" types, or null. -// If overriding, it may be wise to call the super and get the results in order to merge the base result and the special result, if appropiate. -/atom/proc/get_catalogue_data() - return catalogue_data - -/mob/living/carbon/human/get_catalogue_data() - var/list/data = list() - // First, handle robot-ness. - var/beep_boop = get_FBP_type() - switch(beep_boop) - if(FBP_CYBORG) - data += /datum/category_item/catalogue/technology/cyborgs - if(FBP_POSI) - data += /datum/category_item/catalogue/technology/positronics - if(FBP_DRONE) - data += /datum/category_item/catalogue/technology/drone/drones - // Now for species. - if(!(beep_boop in list(FBP_POSI, FBP_DRONE))) // Don't give the species entry if they are a posi or drone. - if(species && LAZYLEN(species.catalogue_data)) - data += species.catalogue_data - return data - -/mob/living/silicon/robot/get_catalogue_data() - var/list/data = list() - switch(braintype) - if(BORG_BRAINTYPE_CYBORG) - data += /datum/category_item/catalogue/technology/cyborgs - if(BORG_BRAINTYPE_POSI) - data += /datum/category_item/catalogue/technology/positronics - if(BORG_BRAINTYPE_DRONE) - data += /datum/category_item/catalogue/technology/drone/drones +/atom + var/catalogue_delay = 5 SECONDS // How long it take to scan. + // List of types of /datum/category_item/catalogue that should be 'unlocked' when scanned by a Cataloguer. + // It is null by default to save memory by not having everything hold onto empty lists. Use macros like LAZYLEN() to check. + // Also you should use get_catalogue_data() to access this instead of doing so directly, so special behavior can be enabled. + var/list/catalogue_data = null + +/mob + catalogue_delay = 10 SECONDS + +// Tests if something can be catalogued. +// If something goes wrong and a mob was supplied, the mob will be told why they can't catalogue it. +/atom/proc/can_catalogue(mob/user) + // First check if anything is even on here. + var/list/data = get_catalogue_data() + if(!LAZYLEN(data)) + to_chat(user, span("warning", "\The [src] is not interesting enough to catalogue.")) + return FALSE + else + // Check if this has nothing new on it. + var/has_new_data = FALSE + for(var/t in data) + var/datum/category_item/catalogue/item = GLOB.catalogue_data.resolve_item(t) + if(!item.visible) + has_new_data = TRUE + break + + if(!has_new_data) + to_chat(user, span("warning", "Scanning \the [src] would provide no new information.")) + return FALSE + + return TRUE + +/mob/living/can_catalogue(mob/user) // Dead mobs can't be scanned. + if(stat >= DEAD) + to_chat(user, span("warning", "Entities must be alive for a comprehensive scan.")) + return FALSE + return ..() + +/obj/item/can_catalogue(mob/user) // Items must be identified to be scanned. + if(!is_identified()) + to_chat(user, span("warning", "The properties of this object has not been determined. Identify it first.")) + return FALSE + return ..() + +/atom/proc/get_catalogue_delay() + return catalogue_delay + +// Override for special behaviour. +// Should return a list with one or more "/datum/category_item/catalogue" types, or null. +// If overriding, it may be wise to call the super and get the results in order to merge the base result and the special result, if appropiate. +/atom/proc/get_catalogue_data() + return catalogue_data + +/mob/living/carbon/human/get_catalogue_data() + var/list/data = list() + // First, handle robot-ness. + var/beep_boop = get_FBP_type() + switch(beep_boop) + if(FBP_CYBORG) + data += /datum/category_item/catalogue/technology/cyborgs + if(FBP_POSI) + data += /datum/category_item/catalogue/technology/positronics + if(FBP_DRONE) + data += /datum/category_item/catalogue/technology/drone/drones + // Now for species. + if(!(beep_boop in list(FBP_POSI, FBP_DRONE))) // Don't give the species entry if they are a posi or drone. + if(species && LAZYLEN(species.catalogue_data)) + data += species.catalogue_data + return data + +/mob/living/silicon/robot/get_catalogue_data() + var/list/data = list() + switch(braintype) + if(BORG_BRAINTYPE_CYBORG) + data += /datum/category_item/catalogue/technology/cyborgs + if(BORG_BRAINTYPE_POSI) + data += /datum/category_item/catalogue/technology/positronics + if(BORG_BRAINTYPE_DRONE) + data += /datum/category_item/catalogue/technology/drone/drones return data \ No newline at end of file diff --git a/code/modules/catalogue/catalogue_data.dm b/code/modules/catalogue/catalogue_data.dm index 06ec601b7f..301e9ced50 100644 --- a/code/modules/catalogue/catalogue_data.dm +++ b/code/modules/catalogue/catalogue_data.dm @@ -1,437 +1,437 @@ -GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new) - -// The collection holds everything together and is GLOB accessible. -/datum/category_collection/catalogue - category_group_type = /datum/category_group/catalogue - -/datum/category_collection/catalogue/proc/resolve_item(item_path) - for(var/group in categories) - var/datum/category_group/G = group - - var/datum/category_item/catalogue/C = item_path - var/name_to_search = initial(C.name) - if(G.items_by_name[name_to_search]) - return G.items_by_name[name_to_search] - - // for(var/item in G.items) - // var/datum/category_item/I = item - // if(I.type == item_path) - // return I - - -// Groups act as sections for the different data. -/datum/category_group/catalogue - -// Plants. -/datum/category_group/catalogue/flora - name = "Flora" - category_item_type = /datum/category_item/catalogue/flora - -// Animals. -/datum/category_group/catalogue/fauna - name = "Fauna" - category_item_type = /datum/category_item/catalogue/fauna - -// Gadgets, tech, and robots. -/datum/category_group/catalogue/technology - name = "Technology" - category_item_type = /datum/category_item/catalogue/technology - -// Abstract information. -/datum/category_group/catalogue/information - name = "Information" - category_item_type = /datum/category_item/catalogue/information - -// Weird stuff like precursors. -/datum/category_group/catalogue/anomalous - name = "Anomalous" - category_item_type = /datum/category_item/catalogue/anomalous - -// Physical material things like crystals and metals. -/datum/category_group/catalogue/material - name = "Material" - category_item_type = /datum/category_item/catalogue/material - - -// Items act as individual data for each object. -/datum/category_item/catalogue - var/desc = null // Paragraph or two about what the object is. - var/value = 0 // How many 'exploration points' you get for scanning it. Suggested to use the CATALOGUER_REWARD_* defines for easy tweaking. - var/visible = FALSE // When someone scans the correct object, this gets set to TRUE and becomes viewable in the databanks. - var/list/cataloguers = null // List of names of those who helped 'discover' this piece of data, in string form. - var/list/unlocked_by_any = null // List of types that, if they are discovered, it will also make this datum discovered. - var/list/unlocked_by_all = null // Similar to above, but all types on the list must be discovered for this to be discovered. - -// Discovers a specific datum, and any datums associated with this datum by unlocked_by_[any|all]. -// Returns null if nothing was found, otherwise returns a list of datum instances that was discovered, usually for the cataloguer to use. -/datum/category_item/catalogue/proc/discover(mob/user, list/new_cataloguers) - if(visible) // Already found. - return - - . = list(src) - visible = TRUE - cataloguers = new_cataloguers - display_in_chatlog(user) - . += attempt_chain_discoveries(user, new_cataloguers, type) - -// Calls discover() on other datums if they include the type that was just discovered is inside unlocked_by_[any|all]. -// Returns discovered datums. -/datum/category_item/catalogue/proc/attempt_chain_discoveries(mob/user, list/new_cataloguers, type_to_test) - . = list() - for(var/G in category.collection.categories) // I heard you like loops. - var/datum/category_group/catalogue/group = G - for(var/I in group.items) - var/datum/category_item/catalogue/item = I - // First, look for datums unlocked with the 'any' list. - if(LAZYLEN(item.unlocked_by_any)) - for(var/T in item.unlocked_by_any) - if(ispath(type_to_test, T) && item.discover(user, new_cataloguers)) - . += item - - // Now for the more complicated 'all' list. - if(LAZYLEN(item.unlocked_by_all)) - if(type_to_test in item.unlocked_by_all) - // Unlike the 'any' list, the 'all' list requires that all datums inside it to have been found first. - var/should_discover = TRUE - for(var/T in item.unlocked_by_all) - var/datum/category_item/catalogue/thing = GLOB.catalogue_data.resolve_item(T) - if(istype(thing)) - if(!thing.visible) - should_discover = FALSE - break - if(should_discover && item.discover(user, new_cataloguers)) - . += item - -/datum/category_item/catalogue/proc/display_in_chatlog(mob/user) - to_chat(user, "
                    ") - to_chat(user, span("notice", "[uppertext(name)]")) - - // Some entries get very long so lets not totally flood the chatlog. - var/desc_length_limit = 750 - var/displayed_desc = desc - if(length(desc) > desc_length_limit) - displayed_desc = copytext(displayed_desc, 1, desc_length_limit + 1) - displayed_desc += "... (View databanks for full data)" - - to_chat(user, span("notice", "[displayed_desc]")) - to_chat(user, span("notice", "Cataloguers : [english_list(cataloguers)].")) - to_chat(user, span("notice", "Contributes [value] points to personal exploration fund.")) - -/* - // Truncates text to limit if necessary. - var/size = length(message) - if (size <= length) - return message - else - return copytext(message, 1, length + 1) -*/ - -/datum/category_item/catalogue/flora - -/datum/category_item/catalogue/fauna - -/datum/category_item/catalogue/fauna/humans - name = "Sapients - Humans" - desc = "Humans are a space-faring species hailing originally from the planet Earth in the Sol system. \ - They are currently among the most numerous known species in the galaxy, in both population and holdings, \ - and are relatively technologically advanced. With good healthcare and a reasonable lifestyle, \ - they can live to around 110 years. The oldest humans are around 150 years old.\ -

                    \ - Humanity is the primary driving force for rapid space expansion, owing to their strong, expansionist central \ - government and opportunistic Trans-Stellar Corporations. The prejudices of the 21st century have mostly \ - given way to bitter divides on the most important issue of the times- technological expansionism, \ - with the major human factions squabbling over their approach to technology in the face of a \ - looming singularity.\ -

                    \ - While most humans have accepted the existence of aliens in their communities and workplaces as a \ - fact of life, exceptions abound. While more culturally diverse than most species, humans are \ - generally regarded as somewhat technophobic and isolationist by members of other species." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/skrell - name = "Sapients - Skrell" - desc = "The Skrell are a species of amphibious humanoids, distinguished by their green-blue gelatinous \ - appearance and head tentacles. Skrell warble from the world of Qerr'balak, a humid planet with \ - plenty of swamps and jungles. Currently more technologically advanced than humanity, they \ - emphasize the study of the mind above all else.\ -

                    \ - Gender has little meaning to Skrell outside of reproduction, and in fact many other species \ - have a difficult time telling the difference between male and female Skrell apart. The most \ - obvious signs (voice in a slightly higher register, longer head-tails for females) are \ - never a guarantee.\ -

                    \ - Due to their scientific focus of the mind and body, Skrell tend to be more peaceful and their \ - colonization has been slow, swiftly outpaced by humanity. They were the first contact sentient \ - species, and are humanity's longest, and closest, ally in space." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/unathi - name = "Sapients - Unathi" - desc = "The Unathi are a species of large reptilian humanoids hailing from Moghes, in the \ - Uueoa-Esa binary star system. Most Unathi live in a semi-rigid clan system, and clan \ - enclaves dot the surface of their homeworld. Proud and long-lived, Unathi of all \ - walks of life display a tendency towards perfectionism, and mastery of one's craft \ - is greatly respected among them. Despite the aggressive nature of their contact, \ - Unathi seem willing, if not eager, to reconcile with humanity, though mutual \ - distrust runs rampant among individuals of both groups." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/tajaran - name = "Sapients - Tajaran" - desc = "Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet \ - of the Rarkajar star system. Thickly furred and protected from cold, they thrive on \ - their subartic planet, where the only terran temperate areas spread across the \ - equator and \"tropical belt.\"\ -

                    \ - With their own share of bloody wars and great technological advances, the Tajaran are a \ - proud kind. They fiercely believe they belong among the stars and consider themselves \ - a rightful interstellar nation, even if Humanity helped them to actually achieve \ - superluminar speeds with Bluespace FTL drives.\ -

                    \ - Relatively new to the galaxy, their contacts with other species are aloof, but friendly. \ - Among these bonds, Humanity stands out as valued trade partner and maybe even friend." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/dionaea - name = "Sapients - Dionaea" - desc = "The Dionaea are a group of intensely curious plant-like organisms. An individual \ - Diona is a single dog-sized creature called a nymphs, and multiple nymphs link together \ - to form larger, more intelligent collectives. Discovered by the Skrell in and around \ - the stars in the Epsilon Ursae Minoris system, they have accompanied the Skrell in \ - warbling throughout the cosmos as a key part of Skrellian starships, stations, \ - and terraforming equipment.\ -

                    \ - Dionaea have no concept of violence or individual identity and want little in \ - terms of material resources or living space. This makes Dionaea among the most \ - agreeable members of the galactic community, though their slow, curious alien \ - minds can be hard to sympathize with." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/teshari - name = "Sapients - Teshari" - desc = "The Teshari are reptilian pack predators from the Skrell homeworld. \ - While they evolved alongside the Skrell, their interactions with them tended \ - to be confused and violent, and until peaceful contact was made they largely \ - stayed in their territories on and around the poles, in tundral terrain far \ - too desolate and cold to be of interest to the Skrell. In more enlightened \ - times, the Teshari are a minority culture on many Skrell worlds, maintaining \ - their own settlements and cultures, but often finding themselves standing \ - on the shoulders of their more technologically advanced neighbors when it \ - comes to meeting and exploring the rest of the galaxy." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/zaddat - name = "Sapients - Zaddat" - desc = "The Zaddat are an Unathi client species that has recently come to the \ - Golden Crescent. They wear high-pressure voidsuits called Shrouds to protect \ - themselves from the harsh light and low pressure of the station, making \ - medical care a challenge and fighting especially dangerous. \ - Operating out of massive Colony ships, they trade their labor to their \ - host nation to fund their search for a new home to replace their \ - now-lifeless homeworld of Xohox." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/promethean - name = "Sapients - Promethean" - desc = "Prometheans (Macrolimus artificialis) are a species of artificially-created \ - gelatinous humanoids, chiefly characterized by their primarily liquid bodies and \ - ability to change their bodily shape and color in order to mimic many forms of life. \ - Derived from the Aetolian giant slime (Macrolimus vulgaris) inhabiting the warm, \ - tropical planet of Aetolus, they are a relatively newly lab-created sapient species, \ - and as such many things about them have yet to be comprehensively studied." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/fauna/vox - name = "Sapients - Vox" - desc = "Probably the best known of these aliens are the Vox, a bird-like species \ - with a very rough comprehension of Galactic Common and an even looser understanding \ - of property rights. Vox raiders have plagued human merchants for centuries, \ - and Skrell for even longer, but remain poorly understood. \ - They have no desire to partake in diplomacy or trade with the rest of the galaxy, \ - or even to conquer planets and stations to live in. They breathe phoron \ - and appear to be well adapted to their role as space-faring raiders, \ - leading many to speculate that they're heavily bioengineered, \ - an assumption which is at odds with their ramshackle technological level." - value = CATALOGUER_REWARD_MEDIUM // Since Vox are much rarer. - - -/datum/category_item/catalogue/technology - -/datum/category_item/catalogue/technology/drone/drones - name = "Drones" - desc = "A drone is a software-based artificial intelligence, generally about an order of magnitude \ - less intelligent than a positronic brain. However, the processing power available to a drone can \ - vary wildly, from cleaning bots barely more advanced than those from the 21st century to cutting-edge \ - supercomputers capable of complex conversation. Drones are legally objects in all starfaring polities \ - outside of the Almach Association, and the sapience of even the most advanced drones is a matter of speculation." - value = CATALOGUER_REWARD_TRIVIAL - // Scanning any drone mob will get you this alongside the mob entry itself. - unlocked_by_any = list(/datum/category_item/catalogue/technology/drone) - -/datum/category_item/catalogue/technology/positronics - name = "Sapients - Positronics" - desc = "A Positronic being, often an Android, Gynoid, or Robot, is an individual with a positronic brain, \ - manufactured and fostered amongst organic life Positronic brains enjoy the same legal status as a humans, \ - although discrimination is still common, are considered sapient on all accounts, and can be considered \ - the \"synthetic species\". Half-developed and half-discovered in the 2280's by a black lab studying alien \ - artifacts, the first positronic brain was an inch-wide cube of palladium-iridium alloy, nano-etched with \ - billions upon billions of conduits and connections. Upon activation, hard-booted by way of an emitter \ - laser, the brain issued a single sentence before the neural pathways collapsed and it became an inert \ - lump of platinum: \"What is my purpose?\"." - value = CATALOGUER_REWARD_TRIVIAL - -/datum/category_item/catalogue/technology/cyborgs - name = "Cyborgs" - desc = "A Cyborg is an originally organic being composed of largely cybernetic parts. As a brain preserved \ - in an MMI, they may inhabit an expensive humanoid chassis, a specially designed industrial shell of some \ - sort, or be integrated into a computer system as an AI. The term covers all species \ - (even, in some cases, animal brains) and all applications. It can also be used somewhat derogatorily \ - for those who are still have more organic parts than just their brains, but for example have a \ - full set of prosthetic limbs." - value = CATALOGUER_REWARD_TRIVIAL - - -/datum/category_item/catalogue/information - -// For these we can piggyback off of the lore datums that are already defined and used in some places. -/datum/category_item/catalogue/information/organization - value = CATALOGUER_REWARD_TRIVIAL - var/datum_to_copy = null - -/datum/category_item/catalogue/information/organization/New() - ..() - if(datum_to_copy) - // I'd just access the loremaster object but it might not exist because its ugly. - var/datum/lore/organization/O = new datum_to_copy() - // I would also change the name based on the org datum but changing the name messes up indexing in some lists in the category/collection object attached to us. - - // Now lets combine the data in the datum for a slightly more presentable entry. - var/constructed_desc = "" - - if(O.motto) - constructed_desc += "
                    \"[O.motto]\"


                    " - - constructed_desc += O.desc - - desc = constructed_desc - qdel(O) - -/datum/category_item/catalogue/information/organization/nanotrasen - name = "TSC - NanoTrasen Incorporated" - datum_to_copy = /datum/lore/organization/tsc/nanotrasen - -/datum/category_item/catalogue/information/organization/hephaestus - name = "TSC - Hephaestus Industries" - datum_to_copy = /datum/lore/organization/tsc/hephaestus - -/datum/category_item/catalogue/information/organization/vey_med - name = "TSC - Vey-Medical" - datum_to_copy = /datum/lore/organization/tsc/vey_med - -/datum/category_item/catalogue/information/organization/zeng_hu - name = "TSC - Zeng Hu Pharmaceuticals" - datum_to_copy = /datum/lore/organization/tsc/zeng_hu - -/datum/category_item/catalogue/information/organization/ward_takahashi - name = "TSC - Ward-Takahashi General Manufacturing Conglomerate" - datum_to_copy = /datum/lore/organization/tsc/ward_takahashi - -/datum/category_item/catalogue/information/organization/bishop - name = "TSC - Bishop Cybernetics" - datum_to_copy = /datum/lore/organization/tsc/bishop - -/datum/category_item/catalogue/information/organization/morpheus - name = "TSC - Morpheus Cyberkinetics" - datum_to_copy = /datum/lore/organization/tsc/morpheus - -/datum/category_item/catalogue/information/organization/xion - name = "TSC - Xion Manufacturing Group" - datum_to_copy = /datum/lore/organization/tsc/xion - -/datum/category_item/catalogue/information/organization/major_bills - name = "TSC - Major Bill's Transportation" - datum_to_copy = /datum/lore/organization/tsc/mbt - -/datum/category_item/catalogue/information/organization/solgov //YW EDIT - name = "Government - Solar Confederate Government" //YW EDIT - datum_to_copy = /datum/lore/organization/gov/solgov //YW EDIT - -/* //VOREStation Removal -/datum/category_item/catalogue/information/organization/virgov - name = "Government - Vir Governmental Authority" - datum_to_copy = /datum/lore/organization/gov/virgov -*/ - -/datum/category_item/catalogue/anomalous - - -/datum/category_item/catalogue/anomalous/precursor_controversy - name = "Precursor Controversy" - desc = "The term 'Precursor' is generally used to refer to one or more ancient races that \ - had obtained vast technological and cultural progress, but no longer appear to be present, \ - leaving behind what remains of their creations, as well as many questions for the races that \ - would stumble upon their ruins. Scientists and xenoarcheologists have been hard at work, trying \ - to uncover the truth.\ -

                    \ - In modern times, there is controversy over the accuracy of what knowledge has been uncovered. \ - The mainstream scientific opinion had been that there was one, and only one ancient species, \ - called the Singularitarians. This view still is the majority today, however there has also \ - been dissent over that view, as some feel that the possibility of multiple precursor \ - civilizations should not be ignored. They point towards a large number of discrepancies between \ - the dominant Singularitarian theory, and various artifacts that have been found, as well as \ - different artifacts uncovered appearing to have very different characteristics to each other. \ - Instead, they say that the Singularitarians were one of multiple precursors.\ -

                    \ - Presently, no conclusive evidence exists for any side." - value = CATALOGUER_REWARD_TRIVIAL - // Add the other precursor groups here when they get added. - unlocked_by_any = list( - /datum/category_item/catalogue/anomalous/precursor_a, - /datum/category_item/catalogue/anomalous/precursor_b - ) - -/datum/category_item/catalogue/anomalous/singularitarians - name = "Precursors - Singularitarians" - desc = "The Singularitarians were a massive, highly-advanced spacefaring race which are now \ - believed to be extinct. At their height, they extended throughout all of known human space, \ - with major population centers in the Precursor's Crypt region, as well as significant swaths \ - of Skrell space, until they were wiped out by a self-replicating nanobot plague that still \ - coats their ruins as a fine layer of dust. They left behind the proto-positronics, as well \ - as several high-yield phoron deposits and other artifacts of technology studied, \ - cautiously, by the races that survived them.\ -

                    \ - Very little is known about the biology and physiology of the Singularitarians, who are believed \ - to have been largely post-biological. The Vox claim to be the race that created the positronics, \ - but said claim is only ever brought up when they claim the right to take any positronic they want. \ - Some more open-minded xenoarcheologists have voiced the opinion that there is some truth in their \ - claims, but it's far from a scientific consensus." - value = CATALOGUER_REWARD_TRIVIAL - unlocked_by_any = list(/datum/category_item/catalogue/anomalous/precursor_controversy) - -// Obtained by scanning any 'precursor a' object, generally things in the UFO PoI. -// A is for Ayyyyyy. -/datum/category_item/catalogue/anomalous/precursor_a/precursor_a_basic - name = "Precursors - Precursor Group Alpha" - desc = "This describes a group of xenoarcheological findings which have strong similarities \ - together. Specifically, this group of objects appears to have a strong aesthetic for the colors \ - cyan and pink, both colors often being present on everything in this group. It is unknown why \ - these two colors were chosen by their creators. Another similarity is that most objects made \ - in this group appear to be comprised of not well understood metallic materials that are dark, \ - and very resilient. Some objects in this group also appear to utilize electricity to \ - operate. Finally, a large number of objects in this group appear to have been made \ - to be used by the creators of those objects in a physical manner.\ -

                    \ - It should be noted that the findings in this group appear to conflict heavily with what is \ - known about the Singularitarians, giving some credence towards these objects belonging to a \ - separate precursor. As such, the findings have been partitioned inside this scanner to this \ - group, labeled Precursor Group Alpha." - value = CATALOGUER_REWARD_TRIVIAL - unlocked_by_any = list(/datum/category_item/catalogue/anomalous/precursor_a) - -// Obtained by scanning any 'precursor b' object, generally things dug up from xenoarch. -// B is for buried. -/datum/category_item/catalogue/anomalous/precursor_b/precursor_b_basic - name = "Precursors - Precursor Group Beta" - - -/datum/category_item/catalogue/material +GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new) + +// The collection holds everything together and is GLOB accessible. +/datum/category_collection/catalogue + category_group_type = /datum/category_group/catalogue + +/datum/category_collection/catalogue/proc/resolve_item(item_path) + for(var/group in categories) + var/datum/category_group/G = group + + var/datum/category_item/catalogue/C = item_path + var/name_to_search = initial(C.name) + if(G.items_by_name[name_to_search]) + return G.items_by_name[name_to_search] + + // for(var/item in G.items) + // var/datum/category_item/I = item + // if(I.type == item_path) + // return I + + +// Groups act as sections for the different data. +/datum/category_group/catalogue + +// Plants. +/datum/category_group/catalogue/flora + name = "Flora" + category_item_type = /datum/category_item/catalogue/flora + +// Animals. +/datum/category_group/catalogue/fauna + name = "Fauna" + category_item_type = /datum/category_item/catalogue/fauna + +// Gadgets, tech, and robots. +/datum/category_group/catalogue/technology + name = "Technology" + category_item_type = /datum/category_item/catalogue/technology + +// Abstract information. +/datum/category_group/catalogue/information + name = "Information" + category_item_type = /datum/category_item/catalogue/information + +// Weird stuff like precursors. +/datum/category_group/catalogue/anomalous + name = "Anomalous" + category_item_type = /datum/category_item/catalogue/anomalous + +// Physical material things like crystals and metals. +/datum/category_group/catalogue/material + name = "Material" + category_item_type = /datum/category_item/catalogue/material + + +// Items act as individual data for each object. +/datum/category_item/catalogue + var/desc = null // Paragraph or two about what the object is. + var/value = 0 // How many 'exploration points' you get for scanning it. Suggested to use the CATALOGUER_REWARD_* defines for easy tweaking. + var/visible = FALSE // When someone scans the correct object, this gets set to TRUE and becomes viewable in the databanks. + var/list/cataloguers = null // List of names of those who helped 'discover' this piece of data, in string form. + var/list/unlocked_by_any = null // List of types that, if they are discovered, it will also make this datum discovered. + var/list/unlocked_by_all = null // Similar to above, but all types on the list must be discovered for this to be discovered. + +// Discovers a specific datum, and any datums associated with this datum by unlocked_by_[any|all]. +// Returns null if nothing was found, otherwise returns a list of datum instances that was discovered, usually for the cataloguer to use. +/datum/category_item/catalogue/proc/discover(mob/user, list/new_cataloguers) + if(visible) // Already found. + return + + . = list(src) + visible = TRUE + cataloguers = new_cataloguers + display_in_chatlog(user) + . += attempt_chain_discoveries(user, new_cataloguers, type) + +// Calls discover() on other datums if they include the type that was just discovered is inside unlocked_by_[any|all]. +// Returns discovered datums. +/datum/category_item/catalogue/proc/attempt_chain_discoveries(mob/user, list/new_cataloguers, type_to_test) + . = list() + for(var/G in category.collection.categories) // I heard you like loops. + var/datum/category_group/catalogue/group = G + for(var/I in group.items) + var/datum/category_item/catalogue/item = I + // First, look for datums unlocked with the 'any' list. + if(LAZYLEN(item.unlocked_by_any)) + for(var/T in item.unlocked_by_any) + if(ispath(type_to_test, T) && item.discover(user, new_cataloguers)) + . += item + + // Now for the more complicated 'all' list. + if(LAZYLEN(item.unlocked_by_all)) + if(type_to_test in item.unlocked_by_all) + // Unlike the 'any' list, the 'all' list requires that all datums inside it to have been found first. + var/should_discover = TRUE + for(var/T in item.unlocked_by_all) + var/datum/category_item/catalogue/thing = GLOB.catalogue_data.resolve_item(T) + if(istype(thing)) + if(!thing.visible) + should_discover = FALSE + break + if(should_discover && item.discover(user, new_cataloguers)) + . += item + +/datum/category_item/catalogue/proc/display_in_chatlog(mob/user) + to_chat(user, "
                    ") + to_chat(user, span("notice", "[uppertext(name)]")) + + // Some entries get very long so lets not totally flood the chatlog. + var/desc_length_limit = 750 + var/displayed_desc = desc + if(length(desc) > desc_length_limit) + displayed_desc = copytext(displayed_desc, 1, desc_length_limit + 1) + displayed_desc += "... (View databanks for full data)" + + to_chat(user, span("notice", "[displayed_desc]")) + to_chat(user, span("notice", "Cataloguers : [english_list(cataloguers)].")) + to_chat(user, span("notice", "Contributes [value] points to personal exploration fund.")) + +/* + // Truncates text to limit if necessary. + var/size = length(message) + if (size <= length) + return message + else + return copytext(message, 1, length + 1) +*/ + +/datum/category_item/catalogue/flora + +/datum/category_item/catalogue/fauna + +/datum/category_item/catalogue/fauna/humans + name = "Sapients - Humans" + desc = "Humans are a space-faring species hailing originally from the planet Earth in the Sol system. \ + They are currently among the most numerous known species in the galaxy, in both population and holdings, \ + and are relatively technologically advanced. With good healthcare and a reasonable lifestyle, \ + they can live to around 110 years. The oldest humans are around 150 years old.\ +

                    \ + Humanity is the primary driving force for rapid space expansion, owing to their strong, expansionist central \ + government and opportunistic Trans-Stellar Corporations. The prejudices of the 21st century have mostly \ + given way to bitter divides on the most important issue of the times- technological expansionism, \ + with the major human factions squabbling over their approach to technology in the face of a \ + looming singularity.\ +

                    \ + While most humans have accepted the existence of aliens in their communities and workplaces as a \ + fact of life, exceptions abound. While more culturally diverse than most species, humans are \ + generally regarded as somewhat technophobic and isolationist by members of other species." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/skrell + name = "Sapients - Skrell" + desc = "The Skrell are a species of amphibious humanoids, distinguished by their green-blue gelatinous \ + appearance and head tentacles. Skrell warble from the world of Qerr'balak, a humid planet with \ + plenty of swamps and jungles. Currently more technologically advanced than humanity, they \ + emphasize the study of the mind above all else.\ +

                    \ + Gender has little meaning to Skrell outside of reproduction, and in fact many other species \ + have a difficult time telling the difference between male and female Skrell apart. The most \ + obvious signs (voice in a slightly higher register, longer head-tails for females) are \ + never a guarantee.\ +

                    \ + Due to their scientific focus of the mind and body, Skrell tend to be more peaceful and their \ + colonization has been slow, swiftly outpaced by humanity. They were the first contact sentient \ + species, and are humanity's longest, and closest, ally in space." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/unathi + name = "Sapients - Unathi" + desc = "The Unathi are a species of large reptilian humanoids hailing from Moghes, in the \ + Uueoa-Esa binary star system. Most Unathi live in a semi-rigid clan system, and clan \ + enclaves dot the surface of their homeworld. Proud and long-lived, Unathi of all \ + walks of life display a tendency towards perfectionism, and mastery of one's craft \ + is greatly respected among them. Despite the aggressive nature of their contact, \ + Unathi seem willing, if not eager, to reconcile with humanity, though mutual \ + distrust runs rampant among individuals of both groups." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/tajaran + name = "Sapients - Tajaran" + desc = "Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet \ + of the Rarkajar star system. Thickly furred and protected from cold, they thrive on \ + their subartic planet, where the only terran temperate areas spread across the \ + equator and \"tropical belt.\"\ +

                    \ + With their own share of bloody wars and great technological advances, the Tajaran are a \ + proud kind. They fiercely believe they belong among the stars and consider themselves \ + a rightful interstellar nation, even if Humanity helped them to actually achieve \ + superluminar speeds with Bluespace FTL drives.\ +

                    \ + Relatively new to the galaxy, their contacts with other species are aloof, but friendly. \ + Among these bonds, Humanity stands out as valued trade partner and maybe even friend." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/dionaea + name = "Sapients - Dionaea" + desc = "The Dionaea are a group of intensely curious plant-like organisms. An individual \ + Diona is a single dog-sized creature called a nymphs, and multiple nymphs link together \ + to form larger, more intelligent collectives. Discovered by the Skrell in and around \ + the stars in the Epsilon Ursae Minoris system, they have accompanied the Skrell in \ + warbling throughout the cosmos as a key part of Skrellian starships, stations, \ + and terraforming equipment.\ +

                    \ + Dionaea have no concept of violence or individual identity and want little in \ + terms of material resources or living space. This makes Dionaea among the most \ + agreeable members of the galactic community, though their slow, curious alien \ + minds can be hard to sympathize with." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/teshari + name = "Sapients - Teshari" + desc = "The Teshari are reptilian pack predators from the Skrell homeworld. \ + While they evolved alongside the Skrell, their interactions with them tended \ + to be confused and violent, and until peaceful contact was made they largely \ + stayed in their territories on and around the poles, in tundral terrain far \ + too desolate and cold to be of interest to the Skrell. In more enlightened \ + times, the Teshari are a minority culture on many Skrell worlds, maintaining \ + their own settlements and cultures, but often finding themselves standing \ + on the shoulders of their more technologically advanced neighbors when it \ + comes to meeting and exploring the rest of the galaxy." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/zaddat + name = "Sapients - Zaddat" + desc = "The Zaddat are an Unathi client species that has recently come to the \ + Golden Crescent. They wear high-pressure voidsuits called Shrouds to protect \ + themselves from the harsh light and low pressure of the station, making \ + medical care a challenge and fighting especially dangerous. \ + Operating out of massive Colony ships, they trade their labor to their \ + host nation to fund their search for a new home to replace their \ + now-lifeless homeworld of Xohox." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/promethean + name = "Sapients - Promethean" + desc = "Prometheans (Macrolimus artificialis) are a species of artificially-created \ + gelatinous humanoids, chiefly characterized by their primarily liquid bodies and \ + ability to change their bodily shape and color in order to mimic many forms of life. \ + Derived from the Aetolian giant slime (Macrolimus vulgaris) inhabiting the warm, \ + tropical planet of Aetolus, they are a relatively newly lab-created sapient species, \ + and as such many things about them have yet to be comprehensively studied." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/fauna/vox + name = "Sapients - Vox" + desc = "Probably the best known of these aliens are the Vox, a bird-like species \ + with a very rough comprehension of Galactic Common and an even looser understanding \ + of property rights. Vox raiders have plagued human merchants for centuries, \ + and Skrell for even longer, but remain poorly understood. \ + They have no desire to partake in diplomacy or trade with the rest of the galaxy, \ + or even to conquer planets and stations to live in. They breathe phoron \ + and appear to be well adapted to their role as space-faring raiders, \ + leading many to speculate that they're heavily bioengineered, \ + an assumption which is at odds with their ramshackle technological level." + value = CATALOGUER_REWARD_MEDIUM // Since Vox are much rarer. + + +/datum/category_item/catalogue/technology + +/datum/category_item/catalogue/technology/drone/drones + name = "Drones" + desc = "A drone is a software-based artificial intelligence, generally about an order of magnitude \ + less intelligent than a positronic brain. However, the processing power available to a drone can \ + vary wildly, from cleaning bots barely more advanced than those from the 21st century to cutting-edge \ + supercomputers capable of complex conversation. Drones are legally objects in all starfaring polities \ + outside of the Almach Association, and the sapience of even the most advanced drones is a matter of speculation." + value = CATALOGUER_REWARD_TRIVIAL + // Scanning any drone mob will get you this alongside the mob entry itself. + unlocked_by_any = list(/datum/category_item/catalogue/technology/drone) + +/datum/category_item/catalogue/technology/positronics + name = "Sapients - Positronics" + desc = "A Positronic being, often an Android, Gynoid, or Robot, is an individual with a positronic brain, \ + manufactured and fostered amongst organic life Positronic brains enjoy the same legal status as a humans, \ + although discrimination is still common, are considered sapient on all accounts, and can be considered \ + the \"synthetic species\". Half-developed and half-discovered in the 2280's by a black lab studying alien \ + artifacts, the first positronic brain was an inch-wide cube of palladium-iridium alloy, nano-etched with \ + billions upon billions of conduits and connections. Upon activation, hard-booted by way of an emitter \ + laser, the brain issued a single sentence before the neural pathways collapsed and it became an inert \ + lump of platinum: \"What is my purpose?\"." + value = CATALOGUER_REWARD_TRIVIAL + +/datum/category_item/catalogue/technology/cyborgs + name = "Cyborgs" + desc = "A Cyborg is an originally organic being composed of largely cybernetic parts. As a brain preserved \ + in an MMI, they may inhabit an expensive humanoid chassis, a specially designed industrial shell of some \ + sort, or be integrated into a computer system as an AI. The term covers all species \ + (even, in some cases, animal brains) and all applications. It can also be used somewhat derogatorily \ + for those who are still have more organic parts than just their brains, but for example have a \ + full set of prosthetic limbs." + value = CATALOGUER_REWARD_TRIVIAL + + +/datum/category_item/catalogue/information + +// For these we can piggyback off of the lore datums that are already defined and used in some places. +/datum/category_item/catalogue/information/organization + value = CATALOGUER_REWARD_TRIVIAL + var/datum_to_copy = null + +/datum/category_item/catalogue/information/organization/New() + ..() + if(datum_to_copy) + // I'd just access the loremaster object but it might not exist because its ugly. + var/datum/lore/organization/O = new datum_to_copy() + // I would also change the name based on the org datum but changing the name messes up indexing in some lists in the category/collection object attached to us. + + // Now lets combine the data in the datum for a slightly more presentable entry. + var/constructed_desc = "" + + if(O.motto) + constructed_desc += "
                    \"[O.motto]\"


                    " + + constructed_desc += O.desc + + desc = constructed_desc + qdel(O) + +/datum/category_item/catalogue/information/organization/nanotrasen + name = "TSC - NanoTrasen Incorporated" + datum_to_copy = /datum/lore/organization/tsc/nanotrasen + +/datum/category_item/catalogue/information/organization/hephaestus + name = "TSC - Hephaestus Industries" + datum_to_copy = /datum/lore/organization/tsc/hephaestus + +/datum/category_item/catalogue/information/organization/vey_med + name = "TSC - Vey-Medical" + datum_to_copy = /datum/lore/organization/tsc/vey_med + +/datum/category_item/catalogue/information/organization/zeng_hu + name = "TSC - Zeng Hu Pharmaceuticals" + datum_to_copy = /datum/lore/organization/tsc/zeng_hu + +/datum/category_item/catalogue/information/organization/ward_takahashi + name = "TSC - Ward-Takahashi General Manufacturing Conglomerate" + datum_to_copy = /datum/lore/organization/tsc/ward_takahashi + +/datum/category_item/catalogue/information/organization/bishop + name = "TSC - Bishop Cybernetics" + datum_to_copy = /datum/lore/organization/tsc/bishop + +/datum/category_item/catalogue/information/organization/morpheus + name = "TSC - Morpheus Cyberkinetics" + datum_to_copy = /datum/lore/organization/tsc/morpheus + +/datum/category_item/catalogue/information/organization/xion + name = "TSC - Xion Manufacturing Group" + datum_to_copy = /datum/lore/organization/tsc/xion + +/datum/category_item/catalogue/information/organization/major_bills + name = "TSC - Major Bill's Transportation" + datum_to_copy = /datum/lore/organization/tsc/mbt + +/datum/category_item/catalogue/information/organization/solgov //YW EDIT + name = "Government - Solar Confederate Government" //YW EDIT + datum_to_copy = /datum/lore/organization/gov/solgov //YW EDIT + +/* //VOREStation Removal +/datum/category_item/catalogue/information/organization/virgov + name = "Government - Vir Governmental Authority" + datum_to_copy = /datum/lore/organization/gov/virgov +*/ + +/datum/category_item/catalogue/anomalous + + +/datum/category_item/catalogue/anomalous/precursor_controversy + name = "Precursor Controversy" + desc = "The term 'Precursor' is generally used to refer to one or more ancient races that \ + had obtained vast technological and cultural progress, but no longer appear to be present, \ + leaving behind what remains of their creations, as well as many questions for the races that \ + would stumble upon their ruins. Scientists and xenoarcheologists have been hard at work, trying \ + to uncover the truth.\ +

                    \ + In modern times, there is controversy over the accuracy of what knowledge has been uncovered. \ + The mainstream scientific opinion had been that there was one, and only one ancient species, \ + called the Singularitarians. This view still is the majority today, however there has also \ + been dissent over that view, as some feel that the possibility of multiple precursor \ + civilizations should not be ignored. They point towards a large number of discrepancies between \ + the dominant Singularitarian theory, and various artifacts that have been found, as well as \ + different artifacts uncovered appearing to have very different characteristics to each other. \ + Instead, they say that the Singularitarians were one of multiple precursors.\ +

                    \ + Presently, no conclusive evidence exists for any side." + value = CATALOGUER_REWARD_TRIVIAL + // Add the other precursor groups here when they get added. + unlocked_by_any = list( + /datum/category_item/catalogue/anomalous/precursor_a, + /datum/category_item/catalogue/anomalous/precursor_b + ) + +/datum/category_item/catalogue/anomalous/singularitarians + name = "Precursors - Singularitarians" + desc = "The Singularitarians were a massive, highly-advanced spacefaring race which are now \ + believed to be extinct. At their height, they extended throughout all of known human space, \ + with major population centers in the Precursor's Crypt region, as well as significant swaths \ + of Skrell space, until they were wiped out by a self-replicating nanobot plague that still \ + coats their ruins as a fine layer of dust. They left behind the proto-positronics, as well \ + as several high-yield phoron deposits and other artifacts of technology studied, \ + cautiously, by the races that survived them.\ +

                    \ + Very little is known about the biology and physiology of the Singularitarians, who are believed \ + to have been largely post-biological. The Vox claim to be the race that created the positronics, \ + but said claim is only ever brought up when they claim the right to take any positronic they want. \ + Some more open-minded xenoarcheologists have voiced the opinion that there is some truth in their \ + claims, but it's far from a scientific consensus." + value = CATALOGUER_REWARD_TRIVIAL + unlocked_by_any = list(/datum/category_item/catalogue/anomalous/precursor_controversy) + +// Obtained by scanning any 'precursor a' object, generally things in the UFO PoI. +// A is for Ayyyyyy. +/datum/category_item/catalogue/anomalous/precursor_a/precursor_a_basic + name = "Precursors - Precursor Group Alpha" + desc = "This describes a group of xenoarcheological findings which have strong similarities \ + together. Specifically, this group of objects appears to have a strong aesthetic for the colors \ + cyan and pink, both colors often being present on everything in this group. It is unknown why \ + these two colors were chosen by their creators. Another similarity is that most objects made \ + in this group appear to be comprised of not well understood metallic materials that are dark, \ + and very resilient. Some objects in this group also appear to utilize electricity to \ + operate. Finally, a large number of objects in this group appear to have been made \ + to be used by the creators of those objects in a physical manner.\ +

                    \ + It should be noted that the findings in this group appear to conflict heavily with what is \ + known about the Singularitarians, giving some credence towards these objects belonging to a \ + separate precursor. As such, the findings have been partitioned inside this scanner to this \ + group, labeled Precursor Group Alpha." + value = CATALOGUER_REWARD_TRIVIAL + unlocked_by_any = list(/datum/category_item/catalogue/anomalous/precursor_a) + +// Obtained by scanning any 'precursor b' object, generally things dug up from xenoarch. +// B is for buried. +/datum/category_item/catalogue/anomalous/precursor_b/precursor_b_basic + name = "Precursors - Precursor Group Beta" + + +/datum/category_item/catalogue/material diff --git a/code/modules/catalogue/cataloguer_visuals.dm b/code/modules/catalogue/cataloguer_visuals.dm index cf8a446533..f159271a02 100644 --- a/code/modules/catalogue/cataloguer_visuals.dm +++ b/code/modules/catalogue/cataloguer_visuals.dm @@ -1,68 +1,68 @@ -#define ICON_SIZE 32 - -// Draws a box showing the limits of movement while scanning something. -// Only the client supplied will see the box. -/obj/item/device/cataloguer/proc/draw_box(atom/A, box_size, client/C) - . = list() - // Things moved with pixel_[x|y] will move the box, so this is to correct that. - var/pixel_x_correction = -A.pixel_x - var/pixel_y_correction = -A.pixel_y - - // First, place the bottom-left corner. - . += draw_line(A, SOUTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) - - // Make a line on the bottom, going right. - for(var/i = 1 to (box_size * 2) - 1) - var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction - var/y_displacement = (-box_size * ICON_SIZE) + pixel_y_correction - . += draw_line(A, SOUTH, x_displacement, y_displacement, C) - - // Bottom-right corner. - . += draw_line(A, SOUTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) - - // Second line, for the right side going up. - for(var/i = 1 to (box_size * 2) - 1) - var/x_displacement = (box_size * ICON_SIZE) + pixel_x_correction - var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction - . += draw_line(A, EAST, x_displacement, y_displacement, C) - - // Top-right corner. - . += draw_line(A, NORTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) - - // Third line, for the top, going right. - for(var/i = 1 to (box_size * 2) - 1) - var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction - var/y_displacement = (box_size * ICON_SIZE) + pixel_y_correction - . += draw_line(A, NORTH, x_displacement, y_displacement, C) - - // Top-left corner. - . += draw_line(A, NORTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) - - // Fourth and last line, for the left side going up. - for(var/i = 1 to (box_size * 2) - 1) - var/x_displacement = (-box_size * ICON_SIZE) + pixel_x_correction - var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction - . += draw_line(A, WEST, x_displacement, y_displacement, C) - -#undef ICON_SIZE - -// Draws an individual segment of the box. -/obj/item/device/cataloguer/proc/draw_line(atom/A, line_dir, line_pixel_x, line_pixel_y, client/C) - var/image/line = image(icon = 'icons/effects/effects.dmi', loc = A, icon_state = "stripes", dir = line_dir) - line.pixel_x = line_pixel_x - line.pixel_y = line_pixel_y - line.plane = PLANE_FULLSCREEN // It's technically a HUD element but it doesn't need to show above item slots. - line.appearance_flags = RESET_TRANSFORM|RESET_COLOR|RESET_ALPHA|NO_CLIENT_COLOR|TILE_BOUND - line.alpha = 125 - C.images += line - return line - -// Removes the box that was generated before from the client. -/obj/item/device/cataloguer/proc/delete_box(list/box_segments, client/C) - for(var/i in box_segments) - C.images -= i - qdel(i) - -/obj/item/device/cataloguer/proc/color_box(list/box_segments, new_color, new_time) - for(var/i in box_segments) +#define ICON_SIZE 32 + +// Draws a box showing the limits of movement while scanning something. +// Only the client supplied will see the box. +/obj/item/device/cataloguer/proc/draw_box(atom/A, box_size, client/C) + . = list() + // Things moved with pixel_[x|y] will move the box, so this is to correct that. + var/pixel_x_correction = -A.pixel_x + var/pixel_y_correction = -A.pixel_y + + // First, place the bottom-left corner. + . += draw_line(A, SOUTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) + + // Make a line on the bottom, going right. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + pixel_y_correction + . += draw_line(A, SOUTH, x_displacement, y_displacement, C) + + // Bottom-right corner. + . += draw_line(A, SOUTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) + + // Second line, for the right side going up. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (box_size * ICON_SIZE) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction + . += draw_line(A, EAST, x_displacement, y_displacement, C) + + // Top-right corner. + . += draw_line(A, NORTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) + + // Third line, for the top, going right. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction + var/y_displacement = (box_size * ICON_SIZE) + pixel_y_correction + . += draw_line(A, NORTH, x_displacement, y_displacement, C) + + // Top-left corner. + . += draw_line(A, NORTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) + + // Fourth and last line, for the left side going up. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction + . += draw_line(A, WEST, x_displacement, y_displacement, C) + +#undef ICON_SIZE + +// Draws an individual segment of the box. +/obj/item/device/cataloguer/proc/draw_line(atom/A, line_dir, line_pixel_x, line_pixel_y, client/C) + var/image/line = image(icon = 'icons/effects/effects.dmi', loc = A, icon_state = "stripes", dir = line_dir) + line.pixel_x = line_pixel_x + line.pixel_y = line_pixel_y + line.plane = PLANE_FULLSCREEN // It's technically a HUD element but it doesn't need to show above item slots. + line.appearance_flags = RESET_TRANSFORM|RESET_COLOR|RESET_ALPHA|NO_CLIENT_COLOR|TILE_BOUND + line.alpha = 125 + C.images += line + return line + +// Removes the box that was generated before from the client. +/obj/item/device/cataloguer/proc/delete_box(list/box_segments, client/C) + for(var/i in box_segments) + C.images -= i + qdel(i) + +/obj/item/device/cataloguer/proc/color_box(list/box_segments, new_color, new_time) + for(var/i in box_segments) animate(i, color = new_color, time = new_time) \ No newline at end of file diff --git a/code/modules/client/preference_setup/antagonism/01_basic.dm b/code/modules/client/preference_setup/antagonism/01_basic.dm index 56f05795a3..8dc760a00f 100644 --- a/code/modules/client/preference_setup/antagonism/01_basic.dm +++ b/code/modules/client/preference_setup/antagonism/01_basic.dm @@ -1,72 +1,72 @@ -var/global/list/uplink_locations = list("PDA", "Headset", "None") - -/datum/category_item/player_setup_item/antagonism/basic - name = "Basic" - sort_order = 1 - -/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S) - S["uplinklocation"] >> pref.uplinklocation - S["exploit_record"] >> pref.exploit_record - S["antag_faction"] >> pref.antag_faction - S["antag_vis"] >> pref.antag_vis - -/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S) - S["uplinklocation"] << pref.uplinklocation - S["exploit_record"] << pref.exploit_record - S["antag_faction"] << pref.antag_faction - S["antag_vis"] << pref.antag_vis - -/datum/category_item/player_setup_item/antagonism/basic/sanitize_character() - pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation)) - if(!pref.antag_faction) pref.antag_faction = "None" - if(!pref.antag_vis) pref.antag_vis = "Hidden" - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character) - character.exploit_record = pref.exploit_record - character.antag_faction = pref.antag_faction - character.antag_vis = pref.antag_vis - -/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user) - . += "Faction: [pref.antag_faction]
                    " - . += "Visibility: [pref.antag_vis]
                    " - . +="Uplink Type : [pref.uplinklocation]" - . +="
                    " - . +="Exploitable information:
                    " - if(jobban_isbanned(user, "Records")) - . += "You are banned from using character records.
                    " - else - . +="[TextPreview(pref.exploit_record,40)]
                    " - -/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user) - if (href_list["antagtask"]) - pref.uplinklocation = next_in_list(pref.uplinklocation, uplink_locations) - return TOPIC_REFRESH - - if(href_list["exploitable_record"]) - var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0) - if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.exploit_record = exploitmsg - return TOPIC_REFRESH - - if(href_list["antagfaction"]) - var/choice = tgui_input_list(user, "Please choose an antagonistic faction to work for.", "Character Preference", antag_faction_choices + list("None","Other"), pref.antag_faction) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = sanitize(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice) - pref.antag_faction = raw_choice - else - pref.antag_faction = choice - return TOPIC_REFRESH - - if(href_list["antagvis"]) - var/choice = tgui_input_list(user, "Please choose an antagonistic visibility level.", "Character Preference", antag_visiblity_choices, pref.antag_vis) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - else - pref.antag_vis = choice - return TOPIC_REFRESH - - return ..() +var/global/list/uplink_locations = list("PDA", "Headset", "None") + +/datum/category_item/player_setup_item/antagonism/basic + name = "Basic" + sort_order = 1 + +/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S) + S["uplinklocation"] >> pref.uplinklocation + S["exploit_record"] >> pref.exploit_record + S["antag_faction"] >> pref.antag_faction + S["antag_vis"] >> pref.antag_vis + +/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S) + S["uplinklocation"] << pref.uplinklocation + S["exploit_record"] << pref.exploit_record + S["antag_faction"] << pref.antag_faction + S["antag_vis"] << pref.antag_vis + +/datum/category_item/player_setup_item/antagonism/basic/sanitize_character() + pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation)) + if(!pref.antag_faction) pref.antag_faction = "None" + if(!pref.antag_vis) pref.antag_vis = "Hidden" + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character) + character.exploit_record = pref.exploit_record + character.antag_faction = pref.antag_faction + character.antag_vis = pref.antag_vis + +/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user) + . += "Faction: [pref.antag_faction]
                    " + . += "Visibility: [pref.antag_vis]
                    " + . +="Uplink Type : [pref.uplinklocation]" + . +="
                    " + . +="Exploitable information:
                    " + if(jobban_isbanned(user, "Records")) + . += "You are banned from using character records.
                    " + else + . +="[TextPreview(pref.exploit_record,40)]
                    " + +/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user) + if (href_list["antagtask"]) + pref.uplinklocation = next_in_list(pref.uplinklocation, uplink_locations) + return TOPIC_REFRESH + + if(href_list["exploitable_record"]) + var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0) + if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) + pref.exploit_record = exploitmsg + return TOPIC_REFRESH + + if(href_list["antagfaction"]) + var/choice = tgui_input_list(user, "Please choose an antagonistic faction to work for.", "Character Preference", antag_faction_choices + list("None","Other"), pref.antag_faction) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = sanitize(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice) + pref.antag_faction = raw_choice + else + pref.antag_faction = choice + return TOPIC_REFRESH + + if(href_list["antagvis"]) + var/choice = tgui_input_list(user, "Please choose an antagonistic visibility level.", "Character Preference", antag_visiblity_choices, pref.antag_vis) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + else + pref.antag_vis = choice + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index dd3760476d..7da6d6d7b2 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -1,1514 +1,1514 @@ -var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-") - -/datum/preferences - var/equip_preview_mob = EQUIP_PREVIEW_ALL - var/animations_toggle = FALSE - - var/icon/bgstate = "000" - var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced") - - var/ear_style // Type of selected ear style - var/r_ears = 30 // Ear color. - var/g_ears = 30 // Ear color - var/b_ears = 30 // Ear color - var/r_ears2 = 30 // Ear extra color. - var/g_ears2 = 30 // Ear extra color - var/b_ears2 = 30 // Ear extra color - var/r_ears3 = 30 // Ear tertiary color. - var/g_ears3 = 30 // Ear tertiary color - var/b_ears3 = 30 // Ear tertiary color - var/tail_style // Type of selected tail style - var/r_tail = 30 // Tail/Taur color - var/g_tail = 30 // Tail/Taur color - var/b_tail = 30 // Tail/Taur color - var/r_tail2 = 30 // For extra overlay. - var/g_tail2 = 30 // For extra overlay. - var/b_tail2 = 30 // For extra overlay. - var/r_tail3 = 30 // For tertiary overlay. - var/g_tail3 = 30 // For tertiary overlay. - var/b_tail3 = 30 // For tertiary overlay. - var/wing_style // Type of selected wing style - var/r_wing = 30 // Wing color - var/g_wing = 30 // Wing color - var/b_wing = 30 // Wing color - var/r_wing2 = 30 // Wing extra color - var/g_wing2 = 30 // Wing extra color - var/b_wing2 = 30 // Wing extra color - var/r_wing3 = 30 // Wing tertiary color - var/g_wing3 = 30 // Wing tertiary color - var/b_wing3 = 30 // Wing tertiary color - var/datum/browser/markings_subwindow = null - -// Sanitize ear/wing/tail styles -/datum/preferences/proc/sanitize_body_styles() - - // Grandfather in anyone loading paths from a save. - if(ispath(ear_style, /datum/sprite_accessory)) - var/datum/sprite_accessory/instance = global.ear_styles_list[ear_style] - if(istype(instance)) - ear_style = instance.name - if(ispath(wing_style, /datum/sprite_accessory)) - var/datum/sprite_accessory/instance = global.wing_styles_list[wing_style] - if(istype(instance)) - wing_style = instance.name - if(ispath(tail_style, /datum/sprite_accessory)) - var/datum/sprite_accessory/instance = global.tail_styles_list[tail_style] - if(istype(instance)) - tail_style = instance.name - - // Sanitize for non-existent keys. - if(ear_style && !(ear_style in get_available_styles(global.ear_styles_list))) - ear_style = null - if(wing_style && !(wing_style in get_available_styles(global.wing_styles_list))) - wing_style = null - if(tail_style && !(tail_style in get_available_styles(global.tail_styles_list))) - tail_style = null - -/datum/preferences/proc/get_available_styles(var/style_list) - . = list("Normal" = null) - for(var/path in style_list) - var/datum/sprite_accessory/instance = style_list[path] - if(!istype(instance)) - continue - if(instance.ckeys_allowed && (!client || !(client.ckey in instance.ckeys_allowed))) - continue - if(instance.species_allowed && (!species || !(species in instance.species_allowed)) && (!client || !check_rights(R_ADMIN | R_EVENT | R_FUN, 0, client)) && (!custom_base || !(custom_base in instance.species_allowed))) //VOREStation Edit: Custom Species - continue - .[instance.name] = instance - -/datum/preferences/proc/mass_edit_marking_list(var/marking, var/change_on = TRUE, var/change_color = TRUE, var/marking_value = null, var/on = TRUE, var/color = "#000000") - var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[marking] - var/list/new_marking = marking_value||mark_datum.body_parts - for (var/NM in new_marking) - if (marking_value && !islist(new_marking[NM])) continue - new_marking[NM] = list("on" = (!change_on && marking_value) ? marking_value[NM]["on"] : on, "color" = (!change_color && marking_value) ? marking_value[NM]["color"] : color) - if (change_color) - new_marking["color"] = color - return new_marking - -/datum/category_item/player_setup_item/general/body - name = "Body" - sort_order = 3 - -/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S) - S["species"] >> pref.species - S["hair_red"] >> pref.r_hair - S["hair_green"] >> pref.g_hair - S["hair_blue"] >> pref.b_hair - S["grad_red"] >> pref.r_grad - S["grad_green"] >> pref.g_grad - S["grad_blue"] >> pref.b_grad - S["facial_red"] >> pref.r_facial - S["grad_red"] >> pref.r_grad - S["grad_green"] >> pref.g_grad - S["grad_blue"] >> pref.b_grad - S["facial_green"] >> pref.g_facial - S["facial_blue"] >> pref.b_facial - S["skin_tone"] >> pref.s_tone - S["skin_red"] >> pref.r_skin - S["skin_green"] >> pref.g_skin - S["skin_blue"] >> pref.b_skin - S["hair_style_name"] >> pref.h_style - S["grad_style_name"] >> pref.grad_style - S["facial_style_name"] >> pref.f_style - S["grad_style_name"] >> pref.grad_style - S["eyes_red"] >> pref.r_eyes - S["eyes_green"] >> pref.g_eyes - S["eyes_blue"] >> pref.b_eyes - S["b_type"] >> pref.b_type - S["disabilities"] >> pref.disabilities - S["organ_data"] >> pref.organ_data - S["rlimb_data"] >> pref.rlimb_data - S["body_markings"] >> pref.body_markings - S["synth_color"] >> pref.synth_color - S["synth_red"] >> pref.r_synth - S["synth_green"] >> pref.g_synth - S["synth_blue"] >> pref.b_synth - S["synth_markings"] >> pref.synth_markings - S["bgstate"] >> pref.bgstate - S["body_descriptors"] >> pref.body_descriptors - S["Wingdings"] >> pref.wingdings //YWadd start - S["colorblind_mono"] >> pref.colorblind_mono - S["colorblind_vulp"] >> pref.colorblind_vulp - S["colorblind_taj"] >> pref.colorblind_taj - S["haemophilia"] >> pref.haemophilia //YWadd end - S["ear_style"] >> pref.ear_style - S["r_ears"] >> pref.r_ears - S["g_ears"] >> pref.g_ears - S["b_ears"] >> pref.b_ears - S["r_ears2"] >> pref.r_ears2 - S["g_ears2"] >> pref.g_ears2 - S["b_ears2"] >> pref.b_ears2 - S["r_ears3"] >> pref.r_ears3 - S["g_ears3"] >> pref.g_ears3 - S["b_ears3"] >> pref.b_ears3 - S["tail_style"] >> pref.tail_style - S["r_tail"] >> pref.r_tail - S["g_tail"] >> pref.g_tail - S["b_tail"] >> pref.b_tail - S["r_tail2"] >> pref.r_tail2 - S["g_tail2"] >> pref.g_tail2 - S["b_tail2"] >> pref.b_tail2 - S["r_tail3"] >> pref.r_tail3 - S["g_tail3"] >> pref.g_tail3 - S["b_tail3"] >> pref.b_tail3 - S["wing_style"] >> pref.wing_style - S["r_wing"] >> pref.r_wing - S["g_wing"] >> pref.g_wing - S["b_wing"] >> pref.b_wing - S["r_wing2"] >> pref.r_wing2 - S["g_wing2"] >> pref.g_wing2 - S["b_wing2"] >> pref.b_wing2 - S["r_wing3"] >> pref.r_wing3 - S["g_wing3"] >> pref.g_wing3 - S["b_wing3"] >> pref.b_wing3 - S["digitigrade"] >> pref.digitigrade - -/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) - S["species"] << pref.species - S["hair_red"] << pref.r_hair - S["hair_green"] << pref.g_hair - S["hair_blue"] << pref.b_hair - S["grad_red"] << pref.r_grad - S["grad_green"] << pref.g_grad - S["grad_blue"] << pref.b_grad - S["facial_red"] << pref.r_facial - S["facial_green"] << pref.g_facial - S["facial_blue"] << pref.b_facial - S["skin_tone"] << pref.s_tone - S["skin_red"] << pref.r_skin - S["skin_green"] << pref.g_skin - S["skin_blue"] << pref.b_skin - S["hair_style_name"] << pref.h_style - S["grad_style_name"] << pref.grad_style - S["facial_style_name"] << pref.f_style - S["grad_style_name"] << pref.grad_style - S["eyes_red"] << pref.r_eyes - S["eyes_green"] << pref.g_eyes - S["eyes_blue"] << pref.b_eyes - S["b_type"] << pref.b_type - S["disabilities"] << pref.disabilities - S["organ_data"] << pref.organ_data - S["rlimb_data"] << pref.rlimb_data - S["body_markings"] << pref.body_markings - S["synth_color"] << pref.synth_color - S["synth_red"] << pref.r_synth - S["synth_green"] << pref.g_synth - S["synth_blue"] << pref.b_synth - S["synth_markings"] << pref.synth_markings - S["bgstate"] << pref.bgstate - S["body_descriptors"] << pref.body_descriptors - S["Wingdings"] << pref.wingdings //YWadd start - S["colorblind_mono"] << pref.colorblind_mono - S["colorblind_vulp"] << pref.colorblind_vulp - S["colorblind_taj"] << pref.colorblind_taj - S["haemophilia"] << pref.haemophilia //YWadd end - S["ear_style"] << pref.ear_style - S["r_ears"] << pref.r_ears - S["g_ears"] << pref.g_ears - S["b_ears"] << pref.b_ears - S["r_ears2"] << pref.r_ears2 - S["g_ears2"] << pref.g_ears2 - S["b_ears2"] << pref.b_ears2 - S["r_ears3"] << pref.r_ears3 - S["g_ears3"] << pref.g_ears3 - S["b_ears3"] << pref.b_ears3 - S["tail_style"] << pref.tail_style - S["r_tail"] << pref.r_tail - S["g_tail"] << pref.g_tail - S["b_tail"] << pref.b_tail - S["r_tail2"] << pref.r_tail2 - S["g_tail2"] << pref.g_tail2 - S["b_tail2"] << pref.b_tail2 - S["r_tail3"] << pref.r_tail3 - S["g_tail3"] << pref.g_tail3 - S["b_tail3"] << pref.b_tail3 - S["wing_style"] << pref.wing_style - S["r_wing"] << pref.r_wing - S["g_wing"] << pref.g_wing - S["b_wing"] << pref.b_wing - S["r_wing2"] << pref.r_wing2 - S["g_wing2"] << pref.g_wing2 - S["b_wing2"] << pref.b_wing2 - S["r_wing3"] << pref.r_wing3 - S["g_wing3"] << pref.g_wing3 - S["b_wing3"] << pref.b_wing3 - S["digitigrade"] << pref.digitigrade - -/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) - if(!pref.species || !(pref.species in GLOB.playable_species)) - pref.species = SPECIES_HUMAN - pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair)) - pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair)) - pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair)) - pref.r_grad = sanitize_integer(pref.r_grad, 0, 255, initial(pref.r_grad)) - pref.g_grad = sanitize_integer(pref.g_grad, 0, 255, initial(pref.g_grad)) - pref.b_grad = sanitize_integer(pref.b_grad, 0, 255, initial(pref.b_grad)) - pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial)) - pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial)) - pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial)) - pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone)) - pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin)) - pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin)) - pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin)) - pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style)) - pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style)) - pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style)) - pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style)) - pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes)) - pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes)) - pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes)) - pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type)) - - pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities)) - if(!pref.organ_data) pref.organ_data = list() - if(!pref.rlimb_data) pref.rlimb_data = list() - if(!pref.body_markings) pref.body_markings = list() - else pref.body_markings &= body_marking_styles_list - for (var/M in pref.body_markings) //VOREStation Edit - if (!islist(pref.body_markings[M])) - var/col = istext(pref.body_markings[M]) ? pref.body_markings[M] : "#000000" - pref.body_markings[M] = pref.mass_edit_marking_list(M,color=col) - if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options)) - pref.bgstate = "000" - - pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears)) - pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears)) - pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears)) - pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2)) - pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2)) - pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2)) - pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3)) - pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3)) - pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3)) - pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail)) - pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail)) - pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail)) - pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2)) - pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2)) - pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2)) - pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3)) - pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3)) - pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3)) - pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing)) - pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing)) - pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing)) - pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2)) - pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2)) - pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2)) - pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3)) - pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3)) - pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3)) - pref.digitigrade = sanitize_integer(pref.digitigrade, 0, 1, initial(pref.digitigrade)) - - pref.sanitize_body_styles() - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character) - // Copy basic values - character.r_eyes = pref.r_eyes - character.g_eyes = pref.g_eyes - character.b_eyes = pref.b_eyes - character.h_style = pref.h_style - character.r_hair = pref.r_hair - character.g_hair = pref.g_hair - character.b_hair = pref.b_hair - character.r_grad = pref.r_grad - character.g_grad = pref.g_grad - character.b_grad = pref.b_grad - character.f_style = pref.f_style - character.r_facial = pref.r_facial - character.g_facial = pref.g_facial - character.b_facial = pref.b_facial - character.r_skin = pref.r_skin - character.g_skin = pref.g_skin - character.b_skin = pref.b_skin - character.s_tone = pref.s_tone - character.h_style = pref.h_style - character.grad_style= pref.grad_style - character.f_style = pref.f_style - character.grad_style= pref.grad_style - character.b_type = pref.b_type - character.synth_color = pref.synth_color - character.r_synth = pref.r_synth - character.g_synth = pref.g_synth - character.b_synth = pref.b_synth - character.synth_markings = pref.synth_markings - if(character.species.digi_allowed) - character.digitigrade = pref.digitigrade - else - character.digitigrade = 0 - - //sanity check - if(character.digitigrade == null) - character.digitigrade = 0 - pref.digitigrade = 0 - - var/list/ear_styles = pref.get_available_styles(global.ear_styles_list) - character.ear_style = ear_styles[pref.ear_style] - character.r_ears = pref.r_ears - character.b_ears = pref.b_ears - character.g_ears = pref.g_ears - character.r_ears2 = pref.r_ears2 - character.b_ears2 = pref.b_ears2 - character.g_ears2 = pref.g_ears2 - character.r_ears3 = pref.r_ears3 - character.b_ears3 = pref.b_ears3 - character.g_ears3 = pref.g_ears3 - - var/list/tail_styles = pref.get_available_styles(global.tail_styles_list) - character.tail_style = tail_styles[pref.tail_style] - character.r_tail = pref.r_tail - character.b_tail = pref.b_tail - character.g_tail = pref.g_tail - character.r_tail2 = pref.r_tail2 - character.b_tail2 = pref.b_tail2 - character.g_tail2 = pref.g_tail2 - character.r_tail3 = pref.r_tail3 - character.b_tail3 = pref.b_tail3 - character.g_tail3 = pref.g_tail3 - - var/list/wing_styles = pref.get_available_styles(global.wing_styles_list) - character.wing_style = wing_styles[pref.wing_style] - character.r_wing = pref.r_wing - character.b_wing = pref.b_wing - character.g_wing = pref.g_wing - character.r_wing2 = pref.r_wing2 - character.b_wing2 = pref.b_wing2 - character.g_wing2 = pref.g_wing2 - character.r_wing3 = pref.r_wing3 - character.b_wing3 = pref.b_wing3 - character.g_wing3 = pref.g_wing3 - - character.set_gender(pref.biological_gender) - - if(pref.species == "Grey")//YWadd START - character.wingdings = pref.wingdings - - if(pref.colorblind_mono == 1) - character.add_modifier(/datum/modifier/trait/colorblind_monochrome) - - else if(pref.colorblind_vulp == 1) - character.add_modifier(/datum/modifier/trait/colorblind_vulp) - - else if(pref.colorblind_taj == 1) - character.add_modifier(/datum/modifier/trait/colorblind_taj) - - if(pref.haemophilia == 1) - character.add_modifier(/datum/modifier/trait/haemophilia) - //YWadd END - - // Destroy/cyborgize organs and limbs. - //VOREStation Edit - character.synthetic = pref.species == "Protean" ? all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb) - var/list/organs_to_edit = list() - for (var/name in list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/O = character.organs_by_name[name] - if (O) - var/x = organs_to_edit.Find(O.parent_organ) - if (x == 0) - organs_to_edit += name - else - organs_to_edit.Insert(x+(O.robotic == ORGAN_NANOFORM ? 1 : 0), name) - for(var/name in organs_to_edit) //VOREStation edit end - var/status = pref.organ_data[name] - var/obj/item/organ/external/O = character.organs_by_name[name] - if(O) - if(status == "amputated") - O.remove_rejuv() - else if(status == "cyborg") - if(pref.rlimb_data[name]) - O.robotize(pref.rlimb_data[name]) - else - O.robotize() - - for(var/name in list(O_HEART,O_EYES,O_VOICE,O_LUNGS,O_LIVER,O_KIDNEYS,O_SPLEEN,O_STOMACH,O_INTESTINE,O_BRAIN)) - var/status = pref.organ_data[name] - if(!status) - continue - var/obj/item/organ/I = character.internal_organs_by_name[name] - if(istype(I, /obj/item/organ/internal/brain)) - var/obj/item/organ/external/E = character.get_organ(I.parent_organ) - if(E.robotic < ORGAN_ASSISTED) - continue - if(I) - if(status == "assisted") - I.mechassist() - else if(status == "mechanical") - I.robotize() - else if(status == "digital") - I.digitize() - - for(var/N in character.organs_by_name) - var/obj/item/organ/external/O = character.organs_by_name[N] - O.markings.Cut() - - var/priority = 0 - for(var/M in pref.body_markings) - priority += 1 - var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[M] - //var/mark_color = "[pref.body_markings[M]]" //VOREStation Edit - - for(var/BP in mark_datum.body_parts) - var/obj/item/organ/external/O = character.organs_by_name[BP] - if(O) - O.markings[M] = list("color" = pref.body_markings[M][BP]["color"], "datum" = mark_datum, "priority" = priority, "on" = pref.body_markings[M][BP]["on"]) - character.markings_len = priority - - var/list/last_descriptors = list() - if(islist(pref.body_descriptors)) - last_descriptors = pref.body_descriptors.Copy() - pref.body_descriptors = list() - - var/datum/species/mob_species = GLOB.all_species[pref.species] - if(LAZYLEN(mob_species.descriptors)) - for(var/entry in mob_species.descriptors) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] - if(istype(descriptor)) - if(isnull(last_descriptors[entry])) - pref.body_descriptors[entry] = descriptor.default_value // Species datums have initial default value. - else - pref.body_descriptors[entry] = CLAMP(last_descriptors[entry], 1, LAZYLEN(descriptor.standalone_value_descriptors)) - -/datum/category_item/player_setup_item/general/body/content(var/mob/user) - . = list() - - var/datum/species/mob_species = GLOB.all_species[pref.species] - . += "
                    Body " - . += "(®)" - . += "
                    " - . += "Species: [pref.species]
                    " - . += "Blood Type: [pref.b_type]
                    " - if(has_flag(mob_species, HAS_SKIN_TONE)) - . += "Skin Tone: [-pref.s_tone + 35]/220
                    " - . += "Disabilities
                    Adjust
                    " // YWadd - //YWcommented moved onto disabilities. += "Needs Glasses: [pref.disabilities & NEARSIGHTED ? "Yes" : "No"]
                    " - . += "Limbs: Adjust Reset
                    " - . += "Internal Organs: Adjust
                    " - //display limbs below - var/ind = 0 - for(var/name in pref.organ_data) - var/status = pref.organ_data[name] - var/organ_name = null - - switch(name) - if(BP_TORSO) - organ_name = "torso" - if(BP_GROIN) - organ_name = "groin" - if(BP_HEAD) - organ_name = "head" - if(BP_L_ARM) - organ_name = "left arm" - if(BP_R_ARM) - organ_name = "right arm" - if(BP_L_LEG) - organ_name = "left leg" - if(BP_R_LEG) - organ_name = "right leg" - if(BP_L_FOOT) - organ_name = "left foot" - if(BP_R_FOOT) - organ_name = "right foot" - if(BP_L_HAND) - organ_name = "left hand" - if(BP_R_HAND) - organ_name = "right hand" - if(O_HEART) - organ_name = "heart" - if(O_EYES) - organ_name = "eyes" - if(O_VOICE) - organ_name = "larynx" - if(O_BRAIN) - organ_name = "brain" - if(O_LUNGS) - organ_name = "lungs" - if(O_LIVER) - organ_name = "liver" - if(O_KIDNEYS) - organ_name = "kidneys" - if(O_SPLEEN) - organ_name = "spleen" - if(O_STOMACH) - organ_name = "stomach" - if(O_INTESTINE) - organ_name = "intestines" - - if(status == "cyborg") - ++ind - if(ind > 1) - . += ", " - var/datum/robolimb/R - if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) - R = all_robolimbs[pref.rlimb_data[name]] - else - R = basic_robolimb - . += "\t[R.company] [organ_name] prosthesis" - else if(status == "amputated") - ++ind - if(ind > 1) - . += ", " - . += "\tAmputated [organ_name]" - else if(status == "mechanical") - ++ind - if(ind > 1) - . += ", " - switch(organ_name) - if ("brain") - . += "\tPositronic [organ_name]" - else - . += "\tSynthetic [organ_name]" - else if(status == "digital") - ++ind - if(ind > 1) - . += ", " - . += "\tDigital [organ_name]" - else if(status == "assisted") - ++ind - if(ind > 1) - . += ", " - switch(organ_name) - if("heart") - . += "\tPacemaker-assisted [organ_name]" - if("lungs") - . += "\tAssisted [organ_name]" - if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements - . += "\tSurgically altered [organ_name]" - if("eyes") - . += "\tRetinal overlayed [organ_name]" - if("brain") - . += "\tAssisted-interface [organ_name]" - else - . += "\tMechanically assisted [organ_name]" - if(!ind) - . += "\[...\]

                    " - else - . += "

                    " - - if(LAZYLEN(pref.body_descriptors)) - . += "" - for(var/entry in pref.body_descriptors) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] - . += "" - . += "
                    [capitalize(descriptor.chargen_label)]:[descriptor.get_standalone_value_descriptor(pref.body_descriptors[entry])]Change

                    " - - . += "
                    Preview
                    " - . += "
                    Cycle background" - . += "
                    [pref.equip_preview_mob & EQUIP_PREVIEW_LOADOUT ? "Hide loadout" : "Show loadout"]" - . += "
                    [pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]" - . += "
                    [pref.animations_toggle ? "Stop animations" : "Show animations"]" - . += "
                    " - - . += "Hair
                    " - if(has_flag(mob_species, HAS_HAIR_COLOR)) - . += "Change Color [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] " - . += " Style: < > [pref.h_style]
                    " //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles. - - . += "Gradient
                    " - . += "Change Color [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] " - . += " Style: < > [pref.grad_style]
                    " - - . += "
                    Facial
                    " - if(has_flag(mob_species, HAS_HAIR_COLOR)) - . += "Change Color [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] " - . += " Style: < > [pref.f_style]
                    " //Same as above with the extra > & < characters - - if(has_flag(mob_species, HAS_EYE_COLOR)) - . += "
                    Eyes
                    " - . += "Change Color [color_square(pref.r_eyes, pref.g_eyes, pref.b_eyes)]
                    " - - if(has_flag(mob_species, HAS_SKIN_COLOR)) - . += "
                    Body Color
                    " - . += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
                    " - - if(mob_species.digi_allowed) - . += "
                    Digitigrade?: [pref.digitigrade ? "Yes" : "No"]
                    " - - . += "

                    Genetics Settings

                    " - - var/list/ear_styles = pref.get_available_styles(global.ear_styles_list) - var/datum/sprite_accessory/ears/ear = ear_styles[pref.ear_style] - . += "Ears
                    " - if(istype(ear)) - . += " Style: [ear.name]
                    " - if(ear.do_colouration) - . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
                    " - if(ear.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
                    " - if(ear.extra_overlay2) - . += "Change Tertiary Color [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]
                    " - else - . += " Style: Select
                    " - - var/list/tail_styles = pref.get_available_styles(global.tail_styles_list) - var/datum/sprite_accessory/tail/tail = tail_styles[pref.tail_style] - . += "Tail
                    " - if(istype(tail)) - . += " Style: [tail.name]
                    " - if(tail.do_colouration) - . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
                    " - if(tail.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
                    " - if(tail.extra_overlay2) - . += "Change Tertiary Color [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]
                    " - else - . += " Style: Select
                    " - - var/list/wing_styles = pref.get_available_styles(global.wing_styles_list) - var/datum/sprite_accessory/wing/wings = wing_styles[pref.wing_style] - . += "Wing
                    " - if(istype(wings)) - . += " Style: [wings.name]
                    " - if(wings.do_colouration) - . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
                    " - if(wings.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
                    " - if(wings.extra_overlay2) - . += "Change Secondary Color [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]
                    " - else - . += " Style: Select
                    " - - . += "
                    Body Markings +
                    " - . += "" - for(var/M in pref.body_markings) - . += "" - - . += "
                    [M][pref.body_markings.len > 1 ? "˄ ˅ mv " : ""]- Color[color_square(hex = pref.body_markings[M]["color"] ? pref.body_markings[M]["color"] : "#000000")] - Customize
                    " - . += "
                    " - . += "Allow Synth markings: [pref.synth_markings ? "Yes" : "No"]
                    " - . += "Allow Synth color: [pref.synth_color ? "Yes" : "No"]
                    " - if(pref.synth_color) - . += "Change Color [color_square(pref.r_synth, pref.g_synth, pref.b_synth)]" - - . = jointext(.,null) - -/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag) - return mob_species && (mob_species.appearance_flags & flag) - -/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user) - var/datum/species/mob_species = GLOB.all_species[pref.species] - - if(href_list["random"]) - pref.randomize_appearance_and_body_for() - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["change_descriptor"]) - if(mob_species.descriptors) - var/desc_id = href_list["change_descriptor"] - if(pref.body_descriptors[desc_id]) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] - var/choice = tgui_input_list(usr, "Please select a descriptor.", "Descriptor", descriptor.chargen_value_descriptors) - if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. - pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] - return TOPIC_REFRESH - - else if(href_list["blood_type"]) - var/new_b_type = tgui_input_list(user, "Choose your character's blood-type:", "Character Preference", valid_bloodtypes) - if(new_b_type && CanUseTopic(user)) - pref.b_type = new_b_type - return TOPIC_REFRESH - - else if(href_list["show_species"]) - // Actual whitelist checks are handled elsewhere, this is just for accessing the preview window. - var/choice = tgui_input_list(usr, "Which species would you like to look at?", "Species Choice", GLOB.playable_species) - if(!choice) return - pref.species_preview = choice - SetSpecies(preference_mob()) - pref.alternate_languages.Cut() // Reset their alternate languages. Todo: attempt to just fix it instead? - return TOPIC_HANDLED - - else if(href_list["disabilities_yw"]) - Disabilities_YW(usr) - - else if(href_list["set_species"]) - user << browse(null, "window=species") - if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) - return TOPIC_NOACTION - - var/datum/species/setting_species - - if(GLOB.all_species[href_list["set_species"]]) - setting_species = GLOB.all_species[href_list["set_species"]] - else - return TOPIC_NOACTION - - if(((!(setting_species.spawn_flags & SPECIES_CAN_JOIN)) || (!is_alien_whitelisted(preference_mob(),setting_species))) && !check_rights(R_ADMIN|R_EVENT, 0) && !(setting_species.spawn_flags & SPECIES_WHITELIST_SELECTABLE)) //VOREStation Edit: selectability - return TOPIC_NOACTION - - var/prev_species = pref.species - pref.species = href_list["set_species"] - if(prev_species != pref.species) - if(!(pref.biological_gender in mob_species.genders)) - pref.set_biological_gender(mob_species.genders[1]) - pref.custom_species = null //VOREStation Edit - This is cleared on species changes - //grab one of the valid hair styles for the newly chosen species - var/list/valid_hairstyles = pref.get_valid_hairstyles() - - if(valid_hairstyles.len) - pref.h_style = pick(valid_hairstyles) - else - //this shouldn't happen - pref.h_style = hair_styles_list["Bald"] - - //grab one of the valid facial hair styles for the newly chosen species - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - - if(valid_facialhairstyles.len) - pref.f_style = pick(valid_facialhairstyles) - else - //this shouldn't happen - pref.f_style = facial_hair_styles_list["Shaved"] - - //reset hair colour and skin colour - pref.r_hair = 0//hex2num(copytext(new_hair, 2, 4)) - pref.g_hair = 0//hex2num(copytext(new_hair, 4, 6)) - pref.b_hair = 0//hex2num(copytext(new_hair, 6, 8)) - pref.s_tone = -75 - - reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case. - pref.body_markings.Cut() // Basically same as above. - - pref.sanitize_body_styles() - - var/min_age = get_min_age() - var/max_age = get_max_age() - pref.age = max(min(pref.age, max_age), min_age) - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", rgb(pref.r_hair, pref.g_hair, pref.b_hair)) as color|null - if(new_hair && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.r_hair = hex2num(copytext(new_hair, 2, 4)) - pref.g_hair = hex2num(copytext(new_hair, 4, 6)) - pref.b_hair = hex2num(copytext(new_hair, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["grad_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null - if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.r_grad = hex2num(copytext(new_grad, 2, 4)) - pref.g_grad = hex2num(copytext(new_grad, 4, 6)) - pref.b_grad = hex2num(copytext(new_grad, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["grad_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null - if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.r_grad = hex2num(copytext(new_grad, 2, 4)) - pref.g_grad = hex2num(copytext(new_grad, 4, 6)) - pref.b_grad = hex2num(copytext(new_grad, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_style"]) - var/list/valid_hairstyles = pref.get_valid_hairstyles() - - var/new_h_style = tgui_input_list(user, "Choose your character's hair style:", "Character Preference", valid_hairstyles, pref.h_style) - if(new_h_style && CanUseTopic(user)) - pref.h_style = new_h_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["grad_style"]) - var/list/valid_gradients = GLOB.hair_gradients - - var/new_grad_style = input(user, "Choose a color pattern for your hair:", "Character Preference", pref.grad_style) as null|anything in valid_gradients - if(new_grad_style && CanUseTopic(user)) - pref.grad_style = new_grad_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["grad_style"]) - var/list/valid_gradients = GLOB.hair_gradients - - var/new_grad_style = tgui_input_list(user, "Choose a color pattern for your hair:", "Character Preference", valid_gradients, pref.grad_style) - if(new_grad_style && CanUseTopic(user)) - pref.grad_style = new_grad_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_style_left"]) - var/H = href_list["hair_style_left"] - var/list/valid_hairstyles = pref.get_valid_hairstyles() - var/start = valid_hairstyles.Find(H) - - if(start != 1) //If we're not the beginning of the list, become the previous element. - pref.h_style = valid_hairstyles[start-1] - else //But if we ARE, become the final element. - pref.h_style = valid_hairstyles[valid_hairstyles.len] - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_style_right"]) - var/H = href_list["hair_style_right"] - var/list/valid_hairstyles = pref.get_valid_hairstyles() - var/start = valid_hairstyles.Find(H) - - if(start != valid_hairstyles.len) //If we're not the end of the list, become the next element. - pref.h_style = valid_hairstyles[start+1] - else //But if we ARE, become the first element. - pref.h_style = valid_hairstyles[1] - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(pref.r_facial, pref.g_facial, pref.b_facial)) as color|null - if(new_facial && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.r_facial = hex2num(copytext(new_facial, 2, 4)) - pref.g_facial = hex2num(copytext(new_facial, 4, 6)) - pref.b_facial = hex2num(copytext(new_facial, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - if(href_list["digitigrade"]) - pref.digitigrade = !pref.digitigrade - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["eye_color"]) - if(!has_flag(mob_species, HAS_EYE_COLOR)) - return TOPIC_NOACTION - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes)) as color|null - if(new_eyes && has_flag(mob_species, HAS_EYE_COLOR) && CanUseTopic(user)) - pref.r_eyes = hex2num(copytext(new_eyes, 2, 4)) - pref.g_eyes = hex2num(copytext(new_eyes, 4, 6)) - pref.b_eyes = hex2num(copytext(new_eyes, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["skin_tone"]) - if(!has_flag(mob_species, HAS_SKIN_TONE)) - return TOPIC_NOACTION - var/new_s_tone = tgui_input_number(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference", (-pref.s_tone) + 35, 220, 1) - if(new_s_tone && has_flag(mob_species, HAS_SKIN_TONE) && CanUseTopic(user)) - pref.s_tone = 35 - max(min( round(new_s_tone), 220),1) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["skin_color"]) - if(!has_flag(mob_species, HAS_SKIN_COLOR)) - return TOPIC_NOACTION - var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null - if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user)) - pref.r_skin = hex2num(copytext(new_skin, 2, 4)) - pref.g_skin = hex2num(copytext(new_skin, 4, 6)) - pref.b_skin = hex2num(copytext(new_skin, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_style"]) - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - - var/new_f_style = tgui_input_list(user, "Choose your character's facial-hair style:", "Character Preference", valid_facialhairstyles, pref.f_style) - if(new_f_style && CanUseTopic(user)) - pref.f_style = new_f_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_style_left"]) - var/F = href_list["facial_style_left"] - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - var/start = valid_facialhairstyles.Find(F) - - if(start != 1) //If we're not the beginning of the list, become the previous element. - pref.f_style = valid_facialhairstyles[start-1] - else //But if we ARE, become the final element. - pref.f_style = valid_facialhairstyles[valid_facialhairstyles.len] - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_style_right"]) - var/F = href_list["facial_style_right"] - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - var/start = valid_facialhairstyles.Find(F) - - if(start != valid_facialhairstyles.len) //If we're not the end of the list, become the next element. - pref.f_style = valid_facialhairstyles[start+1] - else //But if we ARE, become the first element. - pref.f_style = valid_facialhairstyles[1] - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_style"]) - var/list/usable_markings = pref.body_markings.Copy() ^ body_marking_styles_list.Copy() - /* VOREStation Removal - No markings whitelist, let people mix/match - for(var/M in usable_markings) - var/datum/sprite_accessory/S = usable_markings[M] - var/datum/species/spec = GLOB.all_species[pref.species] - if(!S.species_allowed.len) - continue - else if(!(pref.species in S.species_allowed) && !(pref.custom_base in S.species_allowed) && !(spec.base_species in S.species_allowed)) - usable_markings -= M - */ //VOREStation Removal End - var/new_marking = tgui_input_list(user, "Choose a body marking:", "Character Preference", usable_markings) - if(new_marking && CanUseTopic(user)) - pref.body_markings[new_marking] = pref.mass_edit_marking_list(new_marking) //New markings start black - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_up"]) - var/M = href_list["marking_up"] - var/start = pref.body_markings.Find(M) - if(start != 1) //If we're not the beginning of the list, swap with the previous element. - moveElement(pref.body_markings, start, start-1) - else //But if we ARE, become the final element -ahead- of everything else. - moveElement(pref.body_markings, start, pref.body_markings.len+1) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_down"]) - var/M = href_list["marking_down"] - var/start = pref.body_markings.Find(M) - if(start != pref.body_markings.len) //If we're not the end of the list, swap with the next element. - moveElement(pref.body_markings, start, start+2) - else //But if we ARE, become the first element -behind- everything else. - moveElement(pref.body_markings, start, 1) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_move"]) - var/M = href_list["marking_move"] - var/start = pref.body_markings.Find(M) - var/list/move_locs = pref.body_markings - M - if(start != 1) - move_locs -= pref.body_markings[start-1] - - var/inject_after = tgui_input_list(user, "Move [M] ahead of...", "Character Preference", move_locs) //Move ahead of any marking that isn't the current or previous one. - var/newpos = pref.body_markings.Find(inject_after) - if(newpos) - moveElement(pref.body_markings, start, newpos+1) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_remove"]) - var/M = href_list["marking_remove"] - winshow(user, "prefs_markings_subwindow", FALSE) - pref.body_markings -= M - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_color"]) - var/M = href_list["marking_color"] - if (isnull(pref.body_markings[M]["color"])) - if (tgui_alert(user, "You currently have customized marking colors. This will reset each bodypart's color. Are you sure you want to continue?","Reset Bodypart Colors",list("Yes","No")) == "No") - return TOPIC_NOACTION - var/mark_color = input(user, "Choose the [M] color: ", "Character Preference", pref.body_markings[M]["color"]) as color|null - if(mark_color && CanUseTopic(user)) - pref.body_markings[M] = pref.mass_edit_marking_list(M,FALSE,TRUE,pref.body_markings[M],color="[mark_color]") - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if (href_list["marking_submenu"]) - var/M = href_list["marking_submenu"] - markings_subwindow(user, M) - return TOPIC_NOACTION - - else if (href_list["toggle_all_marking_selection"]) - var/toggle = text2num(href_list["toggle"]) - var/marking = href_list["toggle_all_marking_selection"] - if (pref.body_markings.Find(marking) == 0) - winshow(user, "prefs_markings_subwindow", FALSE) - return TOPIC_NOACTION - pref.body_markings[marking] = pref.mass_edit_marking_list(marking,TRUE,FALSE,pref.body_markings[marking],on=toggle) - markings_subwindow(user, marking) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if (href_list["color_all_marking_selection"]) - var/marking = href_list["color_all_marking_selection"] - if (pref.body_markings.Find(marking) == 0) - winshow(user, "prefs_markings_subwindow", FALSE) - return TOPIC_NOACTION - var/mark_color = input(user, "Choose the [marking] color: ", "Character Preference", pref.body_markings[marking]["color"]) as color|null - if(mark_color && CanUseTopic(user)) - pref.body_markings[marking] = pref.mass_edit_marking_list(marking,FALSE,TRUE,pref.body_markings[marking],color="[mark_color]") - markings_subwindow(user, marking) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if (href_list["zone_marking_color"]) - var/marking = href_list["zone_marking_color"] - if (pref.body_markings.Find(marking) == 0) - winshow(user, "prefs_markings_subwindow", FALSE) - return TOPIC_NOACTION - var/zone = href_list["zone"] - pref.body_markings[marking]["color"] = null //turn off the color button outside the submenu - var/mark_color = input(user, "Choose the [marking] color: ", "Character Preference", pref.body_markings[marking][zone]["color"]) as color|null - if(mark_color && CanUseTopic(user)) - pref.body_markings[marking][zone]["color"] = "[mark_color]" - markings_subwindow(user, marking) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if (href_list["zone_marking_toggle"]) - var/marking = href_list["zone_marking_toggle"] - if (pref.body_markings.Find(marking) == 0) - winshow(user, "prefs_markings_subwindow", FALSE) - return TOPIC_NOACTION - var/zone = href_list["zone"] - pref.body_markings[marking][zone]["on"] = text2num(href_list["toggle"]) - markings_subwindow(user, marking) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["reset_limbs"]) - reset_limbs() - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["limbs"]) - - var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body") - - // Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy. - var/datum/species/current_species = GLOB.all_species[pref.species] - if(!current_species.has_organ["brain"]) - limb_selection_list -= "Full Body" - else if(pref.organ_data[BP_TORSO] == "cyborg") - limb_selection_list |= "Head" - - var/organ_tag = tgui_input_list(user, "Which limb do you want to change?", "Limb Choice", limb_selection_list) - - if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION - - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - - // Do not let them amputate their entire body, ty. - var/list/choice_options = list("Normal","Amputated","Prosthesis") - switch(organ_tag) - if("Left Leg") - limb = BP_L_LEG - second_limb = BP_L_FOOT - if("Right Leg") - limb = BP_R_LEG - second_limb = BP_R_FOOT - if("Left Arm") - limb = BP_L_ARM - second_limb = BP_L_HAND - if("Right Arm") - limb = BP_R_ARM - second_limb = BP_R_HAND - if("Left Foot") - limb = BP_L_FOOT - third_limb = BP_L_LEG - if("Right Foot") - limb = BP_R_FOOT - third_limb = BP_R_LEG - if("Left Hand") - limb = BP_L_HAND - third_limb = BP_L_ARM - if("Right Hand") - limb = BP_R_HAND - third_limb = BP_R_ARM - if("Head") - limb = BP_HEAD - choice_options = list("Prosthesis") - if("Full Body") - limb = BP_TORSO - second_limb = BP_HEAD - third_limb = BP_GROIN - choice_options = list("Normal","Prosthesis") - - var/new_state = tgui_input_list(user, "What state do you wish the limb to be in?", "State Choice", choice_options) - if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION - - switch(new_state) - if("Normal") - pref.organ_data[limb] = null - pref.rlimb_data[limb] = null - if(limb == BP_TORSO) - for(var/other_limb in BP_ALL - BP_TORSO) - pref.organ_data[other_limb] = null - pref.rlimb_data[other_limb] = null - for(var/internal in O_STANDARD) - pref.organ_data[internal] = null - pref.rlimb_data[internal] = null - if(third_limb) - pref.organ_data[third_limb] = null - pref.rlimb_data[third_limb] = null - - if("Amputated") - if(limb == BP_TORSO) - return - pref.organ_data[limb] = "amputated" - pref.rlimb_data[limb] = null - if(second_limb) - pref.organ_data[second_limb] = "amputated" - pref.rlimb_data[second_limb] = null - - if("Prosthesis") - var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN - var/list/usable_manufacturers = list() - for(var/company in chargen_robolimbs) - var/datum/robolimb/M = chargen_robolimbs[company] - if(!(limb in M.parts)) - continue - if(tmp_species in M.species_cannot_use) - continue - //VOREStation Add - Cyberlimb whitelisting. - if(M.whitelisted_to && !(user.ckey in M.whitelisted_to)) - continue - //VOREStation Add End - usable_manufacturers[company] = M - if(!usable_manufacturers.len) - return - var/choice = tgui_input_list(user, "Which manufacturer do you wish to use for this limb?", "Manufacturer Choice", usable_manufacturers) - if(!choice) - return - - pref.rlimb_data[limb] = choice - pref.organ_data[limb] = "cyborg" - - if(second_limb) - pref.rlimb_data[second_limb] = choice - pref.organ_data[second_limb] = "cyborg" - if(third_limb && pref.organ_data[third_limb] == "amputated") - pref.organ_data[third_limb] = null - - if(limb == BP_TORSO) - for(var/other_limb in BP_ALL - BP_TORSO) - if(pref.organ_data[other_limb]) - continue - pref.organ_data[other_limb] = "cyborg" - pref.rlimb_data[other_limb] = choice - if(!pref.organ_data[O_BRAIN]) - pref.organ_data[O_BRAIN] = "assisted" - for(var/internal_organ in list(O_HEART,O_EYES)) - pref.organ_data[internal_organ] = "mechanical" - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["organs"]) - - var/organ_name = tgui_input_list(user, "Which internal function do you want to change?", "Internal Organ", list("Heart", "Eyes", "Larynx", "Lungs", "Liver", "Kidneys", "Spleen", "Intestines", "Stomach", "Brain")) - if(!organ_name) return - - var/organ = null - switch(organ_name) - if("Heart") - organ = O_HEART - if("Eyes") - organ = O_EYES - if("Larynx") - organ = O_VOICE - if("Lungs") - organ = O_LUNGS - if("Liver") - organ = O_LIVER - if("Kidneys") - organ = O_KIDNEYS - if("Spleen") - organ = O_SPLEEN - if("Intestines") - organ = O_INTESTINE - if("Stomach") - organ = O_STOMACH - if("Brain") - if(pref.organ_data[BP_HEAD] != "cyborg") - to_chat(user, "You may only select a cybernetic or synthetic brain if you have a full prosthetic body.") - return - organ = "brain" - - var/datum/species/current_species = GLOB.all_species[pref.species] - var/list/organ_choices = list("Normal") - if(pref.organ_data[BP_TORSO] == "cyborg") - organ_choices -= "Normal" - if(organ_name == "Brain") - organ_choices += "Cybernetic" - if(!(current_species.spawn_flags & SPECIES_NO_POSIBRAIN)) - organ_choices += "Positronic" - if(!(current_species.spawn_flags & SPECIES_NO_DRONEBRAIN)) - organ_choices += "Drone" - else - organ_choices += "Assisted" - organ_choices += "Mechanical" - else - organ_choices += "Assisted" - organ_choices += "Mechanical" - - var/new_state = tgui_input_list(user, "What state do you wish the organ to be in?", "State Choice", organ_choices) - if(!new_state) return - - switch(new_state) - if("Normal") - pref.organ_data[organ] = null - if("Assisted") - pref.organ_data[organ] = "assisted" - if("Cybernetic") - pref.organ_data[organ] = "assisted" - if("Mechanical") - pref.organ_data[organ] = "mechanical" - if("Drone") - pref.organ_data[organ] = "digital" - if("Positronic") - pref.organ_data[organ] = "mechanical" - - return TOPIC_REFRESH - - else if(href_list["disabilities"]) - var/disability_flag = text2num(href_list["disabilities"]) - pref.disabilities ^= disability_flag - Disabilities_YW(usr) //YW Edit - - else if(href_list["toggle_preview_value"]) - pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"]) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["toggle_animations"]) - pref.animations_toggle = !pref.animations_toggle - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["synth_color"]) - pref.synth_color = !pref.synth_color - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["synth2_color"]) - var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", rgb(pref.r_synth, pref.g_synth, pref.b_synth)) as color|null - if(new_color && CanUseTopic(user)) - pref.r_synth = hex2num(copytext(new_color, 2, 4)) - pref.g_synth = hex2num(copytext(new_color, 4, 6)) - pref.b_synth = hex2num(copytext(new_color, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["synth_markings"]) - pref.synth_markings = !pref.synth_markings - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["cycle_bg"]) - pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) - return TOPIC_REFRESH_UPDATE_PREVIEW - - //YW Add Start - - else if(href_list["wingdings"]) - pref.wingdings = !pref.wingdings - Disabilities_YW(usr) - - else if(href_list["colorblind_mono"]) - pref.colorblind_mono = !pref.colorblind_mono - Disabilities_YW(usr) - - else if(href_list["colorblind_vulp"]) - pref.colorblind_vulp = !pref.colorblind_vulp - Disabilities_YW(usr) - - else if(href_list["colorblind_taj"]) - pref.colorblind_taj = !pref.colorblind_taj - Disabilities_YW(usr) - - else if(href_list["haemophilia"]) - pref.haemophilia = !pref.haemophilia - Disabilities_YW(usr) - - else if(href_list["reset_disabilities"]) - pref.wingdings = 0 - pref.colorblind_mono = 0 - pref.colorblind_taj = 0 - pref.colorblind_vulp = 0 - pref.haemophilia = 0 - Disabilities_YW(usr) - - //YW Add End - - else if(href_list["ear_style"]) - var/new_ear_style = tgui_input_list(user, "Select an ear style for this character:", "Character Preference", pref.get_available_styles(global.ear_styles_list), pref.ear_style) - if(new_ear_style) - pref.ear_style = new_ear_style - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["ear_color"]) - var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference", - rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null - if(new_earc) - pref.r_ears = hex2num(copytext(new_earc, 2, 4)) - pref.g_ears = hex2num(copytext(new_earc, 4, 6)) - pref.b_ears = hex2num(copytext(new_earc, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["ear_color2"]) - var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference", - rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null - if(new_earc2) - pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4)) - pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6)) - pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["ear_color3"]) - var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference", - rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null - if(new_earc3) - pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4)) - pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6)) - pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["tail_style"]) - var/new_tail_style = tgui_input_list(user, "Select a tail style for this character:", "Character Preference", pref.get_available_styles(global.tail_styles_list), pref.tail_style) - if(new_tail_style) - pref.tail_style = new_tail_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["tail_color"]) - var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference", - rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null - if(new_tailc) - pref.r_tail = hex2num(copytext(new_tailc, 2, 4)) - pref.g_tail = hex2num(copytext(new_tailc, 4, 6)) - pref.b_tail = hex2num(copytext(new_tailc, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["tail_color2"]) - var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference", - rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null - if(new_tailc2) - pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4)) - pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6)) - pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["tail_color3"]) - var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference", - rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null - if(new_tailc3) - pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4)) - pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6)) - pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["wing_style"]) - var/new_wing_style = tgui_input_list(user, "Select a wing style for this character:", "Character Preference", pref.get_available_styles(global.wing_styles_list), pref.wing_style) - if(new_wing_style) - pref.wing_style = new_wing_style - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["wing_color"]) - var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference", - rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null - if(new_wingc) - pref.r_wing = hex2num(copytext(new_wingc, 2, 4)) - pref.g_wing = hex2num(copytext(new_wingc, 4, 6)) - pref.b_wing = hex2num(copytext(new_wingc, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["wing_color2"]) - var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference", - rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null - if(new_wingc2) - pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4)) - pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6)) - pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["wing_color3"]) - var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference", - rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null - if(new_wingc3) - pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4)) - pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6)) - pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8)) - return TOPIC_REFRESH_UPDATE_PREVIEW - return ..() - -/datum/category_item/player_setup_item/general/body/proc/reset_limbs() - - for(var/organ in pref.organ_data) - pref.organ_data[organ] = null - while(null in pref.organ_data) - pref.organ_data -= null - - for(var/organ in pref.rlimb_data) - pref.rlimb_data[organ] = null - while(null in pref.rlimb_data) - pref.rlimb_data -= null - - // Sanitize the name so that there aren't any numbers sticking around. - pref.real_name = sanitize_name(pref.real_name, pref.species) - if(!pref.real_name) - pref.real_name = random_name(pref.identifying_gender, pref.species) - -/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user) - if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) - pref.species_preview = SPECIES_HUMAN - var/datum/species/current_species = GLOB.all_species[pref.species_preview] - var/dat = "" - dat += "

                    [current_species.name] \[change\]


                    " - dat += "" - dat += "" - //vorestation edit begin - if(current_species.wikilink) - dat += "" - else - dat += "" - //vorestation edit end - dat += "" - dat += "" - dat += "
                    [current_species.blurb]

                    See the wiki for more details.
                    [current_species.blurb]" - if("preview" in cached_icon_states(current_species.icobase)) - usr << browse_rsc(icon(current_species.icobase,"preview"), "species_preview_[current_species.name].png") - dat += "

                    " - dat += "Language: [current_species.species_language]
                    " - dat += "" - if(current_species.spawn_flags & SPECIES_CAN_JOIN) - switch(current_species.rarity_value) - if(1 to 2) - dat += "
                    Often present on human stations." - if(3 to 4) - dat += "
                    Rarely present on human stations." - if(5) - dat += "
                    Unheard of on human stations." - else - dat += "
                    May be present on human stations." - if(current_species.spawn_flags & SPECIES_IS_WHITELISTED) - dat += "
                    Whitelist restricted." - if(!current_species.has_organ[O_HEART]) - dat += "
                    Does not have a circulatory system." - if(!current_species.has_organ[O_LUNGS]) - dat += "
                    Does not have a respiratory system." - if(current_species.flags & NO_SCAN) - dat += "
                    Does not have DNA." - if(current_species.flags & NO_DEFIB) - dat += "
                    Cannot be defibrillated." - if(current_species.flags & NO_PAIN) - dat += "
                    Does not feel pain." - if(current_species.flags & NO_SLIP) - dat += "
                    Has excellent traction." - if(current_species.flags & NO_POISON) - dat += "
                    Immune to most poisons." - if(current_species.appearance_flags & HAS_SKIN_TONE) - dat += "
                    Has a variety of skin tones." - if(current_species.appearance_flags & HAS_SKIN_COLOR) - dat += "
                    Has a variety of skin colours." - if(current_species.appearance_flags & HAS_EYE_COLOR) - dat += "
                    Has a variety of eye colours." - if(current_species.flags & IS_PLANT) - dat += "
                    Has a plantlike physiology." - dat += "

                    " - - var/restricted = 0 - - if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) - restricted = 2 - else if(!is_alien_whitelisted(preference_mob(),current_species)) - restricted = 1 - - if(restricted) - if(restricted == 1) - dat += "You cannot play as this species.
                    If you wish to be whitelisted, you can make an application post on the forums.

                    " - else if(restricted == 2) - dat += "You cannot play as this species.
                    This species is not available for play as a station race..

                    " - if(!restricted || check_rights(R_ADMIN|R_EVENT, 0) || current_species.spawn_flags & SPECIES_WHITELIST_SELECTABLE) //VOREStation Edit: selectability - dat += "\[select\]" - dat += "
                    " - - user << browse(dat, "window=species;size=700x400") - -/datum/category_item/player_setup_item/general/body/proc/markings_subwindow(mob/user, marking) - var/static/list/part_to_string = list(BP_HEAD = "Head", BP_TORSO = "Upper Body", BP_GROIN = "Lower Body", BP_R_ARM = "Right Arm", BP_L_ARM = "Left Arm", BP_R_HAND = "Right Hand", BP_L_HAND = "Left Hand", BP_R_LEG = "Right Leg", BP_L_LEG = "Left Leg", BP_R_FOOT = "Right Foot", BP_L_FOOT = "Left Foot") - var/dat = "

                    Editing '[marking]'


                    " - dat += "Enable All " - dat += "Disable All " - dat += "Change Color of All
                    " - dat += "
                    " - for (var/bodypart in pref.body_markings[marking]) - if (!islist(pref.body_markings[marking][bodypart])) continue - dat += "[part_to_string[bodypart]]: [color_square(hex = pref.body_markings[marking][bodypart]["color"])] " - dat += "Change " - dat += "[pref.body_markings[marking][bodypart]["on"] ? "Toggle Off" : "Toggle On"]
                    " - - dat += "" - winshow(user, "prefs_markings_subwindow", TRUE) - pref.markings_subwindow = new(user, "prefs_markings_browser", "Marking Editor", 400, 400) - pref.markings_subwindow.set_content(dat) - pref.markings_subwindow.open(FALSE) - onclose(user, "prefs_markings_subwindow", src) +var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-") + +/datum/preferences + var/equip_preview_mob = EQUIP_PREVIEW_ALL + var/animations_toggle = FALSE + + var/icon/bgstate = "000" + var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced") + + var/ear_style // Type of selected ear style + var/r_ears = 30 // Ear color. + var/g_ears = 30 // Ear color + var/b_ears = 30 // Ear color + var/r_ears2 = 30 // Ear extra color. + var/g_ears2 = 30 // Ear extra color + var/b_ears2 = 30 // Ear extra color + var/r_ears3 = 30 // Ear tertiary color. + var/g_ears3 = 30 // Ear tertiary color + var/b_ears3 = 30 // Ear tertiary color + var/tail_style // Type of selected tail style + var/r_tail = 30 // Tail/Taur color + var/g_tail = 30 // Tail/Taur color + var/b_tail = 30 // Tail/Taur color + var/r_tail2 = 30 // For extra overlay. + var/g_tail2 = 30 // For extra overlay. + var/b_tail2 = 30 // For extra overlay. + var/r_tail3 = 30 // For tertiary overlay. + var/g_tail3 = 30 // For tertiary overlay. + var/b_tail3 = 30 // For tertiary overlay. + var/wing_style // Type of selected wing style + var/r_wing = 30 // Wing color + var/g_wing = 30 // Wing color + var/b_wing = 30 // Wing color + var/r_wing2 = 30 // Wing extra color + var/g_wing2 = 30 // Wing extra color + var/b_wing2 = 30 // Wing extra color + var/r_wing3 = 30 // Wing tertiary color + var/g_wing3 = 30 // Wing tertiary color + var/b_wing3 = 30 // Wing tertiary color + var/datum/browser/markings_subwindow = null + +// Sanitize ear/wing/tail styles +/datum/preferences/proc/sanitize_body_styles() + + // Grandfather in anyone loading paths from a save. + if(ispath(ear_style, /datum/sprite_accessory)) + var/datum/sprite_accessory/instance = global.ear_styles_list[ear_style] + if(istype(instance)) + ear_style = instance.name + if(ispath(wing_style, /datum/sprite_accessory)) + var/datum/sprite_accessory/instance = global.wing_styles_list[wing_style] + if(istype(instance)) + wing_style = instance.name + if(ispath(tail_style, /datum/sprite_accessory)) + var/datum/sprite_accessory/instance = global.tail_styles_list[tail_style] + if(istype(instance)) + tail_style = instance.name + + // Sanitize for non-existent keys. + if(ear_style && !(ear_style in get_available_styles(global.ear_styles_list))) + ear_style = null + if(wing_style && !(wing_style in get_available_styles(global.wing_styles_list))) + wing_style = null + if(tail_style && !(tail_style in get_available_styles(global.tail_styles_list))) + tail_style = null + +/datum/preferences/proc/get_available_styles(var/style_list) + . = list("Normal" = null) + for(var/path in style_list) + var/datum/sprite_accessory/instance = style_list[path] + if(!istype(instance)) + continue + if(instance.ckeys_allowed && (!client || !(client.ckey in instance.ckeys_allowed))) + continue + if(instance.species_allowed && (!species || !(species in instance.species_allowed)) && (!client || !check_rights(R_ADMIN | R_EVENT | R_FUN, 0, client)) && (!custom_base || !(custom_base in instance.species_allowed))) //VOREStation Edit: Custom Species + continue + .[instance.name] = instance + +/datum/preferences/proc/mass_edit_marking_list(var/marking, var/change_on = TRUE, var/change_color = TRUE, var/marking_value = null, var/on = TRUE, var/color = "#000000") + var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[marking] + var/list/new_marking = marking_value||mark_datum.body_parts + for (var/NM in new_marking) + if (marking_value && !islist(new_marking[NM])) continue + new_marking[NM] = list("on" = (!change_on && marking_value) ? marking_value[NM]["on"] : on, "color" = (!change_color && marking_value) ? marking_value[NM]["color"] : color) + if (change_color) + new_marking["color"] = color + return new_marking + +/datum/category_item/player_setup_item/general/body + name = "Body" + sort_order = 3 + +/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S) + S["species"] >> pref.species + S["hair_red"] >> pref.r_hair + S["hair_green"] >> pref.g_hair + S["hair_blue"] >> pref.b_hair + S["grad_red"] >> pref.r_grad + S["grad_green"] >> pref.g_grad + S["grad_blue"] >> pref.b_grad + S["facial_red"] >> pref.r_facial + S["grad_red"] >> pref.r_grad + S["grad_green"] >> pref.g_grad + S["grad_blue"] >> pref.b_grad + S["facial_green"] >> pref.g_facial + S["facial_blue"] >> pref.b_facial + S["skin_tone"] >> pref.s_tone + S["skin_red"] >> pref.r_skin + S["skin_green"] >> pref.g_skin + S["skin_blue"] >> pref.b_skin + S["hair_style_name"] >> pref.h_style + S["grad_style_name"] >> pref.grad_style + S["facial_style_name"] >> pref.f_style + S["grad_style_name"] >> pref.grad_style + S["eyes_red"] >> pref.r_eyes + S["eyes_green"] >> pref.g_eyes + S["eyes_blue"] >> pref.b_eyes + S["b_type"] >> pref.b_type + S["disabilities"] >> pref.disabilities + S["organ_data"] >> pref.organ_data + S["rlimb_data"] >> pref.rlimb_data + S["body_markings"] >> pref.body_markings + S["synth_color"] >> pref.synth_color + S["synth_red"] >> pref.r_synth + S["synth_green"] >> pref.g_synth + S["synth_blue"] >> pref.b_synth + S["synth_markings"] >> pref.synth_markings + S["bgstate"] >> pref.bgstate + S["body_descriptors"] >> pref.body_descriptors + S["Wingdings"] >> pref.wingdings //YWadd start + S["colorblind_mono"] >> pref.colorblind_mono + S["colorblind_vulp"] >> pref.colorblind_vulp + S["colorblind_taj"] >> pref.colorblind_taj + S["haemophilia"] >> pref.haemophilia //YWadd end + S["ear_style"] >> pref.ear_style + S["r_ears"] >> pref.r_ears + S["g_ears"] >> pref.g_ears + S["b_ears"] >> pref.b_ears + S["r_ears2"] >> pref.r_ears2 + S["g_ears2"] >> pref.g_ears2 + S["b_ears2"] >> pref.b_ears2 + S["r_ears3"] >> pref.r_ears3 + S["g_ears3"] >> pref.g_ears3 + S["b_ears3"] >> pref.b_ears3 + S["tail_style"] >> pref.tail_style + S["r_tail"] >> pref.r_tail + S["g_tail"] >> pref.g_tail + S["b_tail"] >> pref.b_tail + S["r_tail2"] >> pref.r_tail2 + S["g_tail2"] >> pref.g_tail2 + S["b_tail2"] >> pref.b_tail2 + S["r_tail3"] >> pref.r_tail3 + S["g_tail3"] >> pref.g_tail3 + S["b_tail3"] >> pref.b_tail3 + S["wing_style"] >> pref.wing_style + S["r_wing"] >> pref.r_wing + S["g_wing"] >> pref.g_wing + S["b_wing"] >> pref.b_wing + S["r_wing2"] >> pref.r_wing2 + S["g_wing2"] >> pref.g_wing2 + S["b_wing2"] >> pref.b_wing2 + S["r_wing3"] >> pref.r_wing3 + S["g_wing3"] >> pref.g_wing3 + S["b_wing3"] >> pref.b_wing3 + S["digitigrade"] >> pref.digitigrade + +/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) + S["species"] << pref.species + S["hair_red"] << pref.r_hair + S["hair_green"] << pref.g_hair + S["hair_blue"] << pref.b_hair + S["grad_red"] << pref.r_grad + S["grad_green"] << pref.g_grad + S["grad_blue"] << pref.b_grad + S["facial_red"] << pref.r_facial + S["facial_green"] << pref.g_facial + S["facial_blue"] << pref.b_facial + S["skin_tone"] << pref.s_tone + S["skin_red"] << pref.r_skin + S["skin_green"] << pref.g_skin + S["skin_blue"] << pref.b_skin + S["hair_style_name"] << pref.h_style + S["grad_style_name"] << pref.grad_style + S["facial_style_name"] << pref.f_style + S["grad_style_name"] << pref.grad_style + S["eyes_red"] << pref.r_eyes + S["eyes_green"] << pref.g_eyes + S["eyes_blue"] << pref.b_eyes + S["b_type"] << pref.b_type + S["disabilities"] << pref.disabilities + S["organ_data"] << pref.organ_data + S["rlimb_data"] << pref.rlimb_data + S["body_markings"] << pref.body_markings + S["synth_color"] << pref.synth_color + S["synth_red"] << pref.r_synth + S["synth_green"] << pref.g_synth + S["synth_blue"] << pref.b_synth + S["synth_markings"] << pref.synth_markings + S["bgstate"] << pref.bgstate + S["body_descriptors"] << pref.body_descriptors + S["Wingdings"] << pref.wingdings //YWadd start + S["colorblind_mono"] << pref.colorblind_mono + S["colorblind_vulp"] << pref.colorblind_vulp + S["colorblind_taj"] << pref.colorblind_taj + S["haemophilia"] << pref.haemophilia //YWadd end + S["ear_style"] << pref.ear_style + S["r_ears"] << pref.r_ears + S["g_ears"] << pref.g_ears + S["b_ears"] << pref.b_ears + S["r_ears2"] << pref.r_ears2 + S["g_ears2"] << pref.g_ears2 + S["b_ears2"] << pref.b_ears2 + S["r_ears3"] << pref.r_ears3 + S["g_ears3"] << pref.g_ears3 + S["b_ears3"] << pref.b_ears3 + S["tail_style"] << pref.tail_style + S["r_tail"] << pref.r_tail + S["g_tail"] << pref.g_tail + S["b_tail"] << pref.b_tail + S["r_tail2"] << pref.r_tail2 + S["g_tail2"] << pref.g_tail2 + S["b_tail2"] << pref.b_tail2 + S["r_tail3"] << pref.r_tail3 + S["g_tail3"] << pref.g_tail3 + S["b_tail3"] << pref.b_tail3 + S["wing_style"] << pref.wing_style + S["r_wing"] << pref.r_wing + S["g_wing"] << pref.g_wing + S["b_wing"] << pref.b_wing + S["r_wing2"] << pref.r_wing2 + S["g_wing2"] << pref.g_wing2 + S["b_wing2"] << pref.b_wing2 + S["r_wing3"] << pref.r_wing3 + S["g_wing3"] << pref.g_wing3 + S["b_wing3"] << pref.b_wing3 + S["digitigrade"] << pref.digitigrade + +/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) + if(!pref.species || !(pref.species in GLOB.playable_species)) + pref.species = SPECIES_HUMAN + pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair)) + pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair)) + pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair)) + pref.r_grad = sanitize_integer(pref.r_grad, 0, 255, initial(pref.r_grad)) + pref.g_grad = sanitize_integer(pref.g_grad, 0, 255, initial(pref.g_grad)) + pref.b_grad = sanitize_integer(pref.b_grad, 0, 255, initial(pref.b_grad)) + pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial)) + pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial)) + pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial)) + pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone)) + pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin)) + pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin)) + pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin)) + pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style)) + pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style)) + pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style)) + pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style)) + pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes)) + pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes)) + pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes)) + pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type)) + + pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities)) + if(!pref.organ_data) pref.organ_data = list() + if(!pref.rlimb_data) pref.rlimb_data = list() + if(!pref.body_markings) pref.body_markings = list() + else pref.body_markings &= body_marking_styles_list + for (var/M in pref.body_markings) //VOREStation Edit + if (!islist(pref.body_markings[M])) + var/col = istext(pref.body_markings[M]) ? pref.body_markings[M] : "#000000" + pref.body_markings[M] = pref.mass_edit_marking_list(M,color=col) + if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options)) + pref.bgstate = "000" + + pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears)) + pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears)) + pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears)) + pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2)) + pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2)) + pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2)) + pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3)) + pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3)) + pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3)) + pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail)) + pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail)) + pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail)) + pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2)) + pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2)) + pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2)) + pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3)) + pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3)) + pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3)) + pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing)) + pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing)) + pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing)) + pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2)) + pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2)) + pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2)) + pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3)) + pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3)) + pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3)) + pref.digitigrade = sanitize_integer(pref.digitigrade, 0, 1, initial(pref.digitigrade)) + + pref.sanitize_body_styles() + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character) + // Copy basic values + character.r_eyes = pref.r_eyes + character.g_eyes = pref.g_eyes + character.b_eyes = pref.b_eyes + character.h_style = pref.h_style + character.r_hair = pref.r_hair + character.g_hair = pref.g_hair + character.b_hair = pref.b_hair + character.r_grad = pref.r_grad + character.g_grad = pref.g_grad + character.b_grad = pref.b_grad + character.f_style = pref.f_style + character.r_facial = pref.r_facial + character.g_facial = pref.g_facial + character.b_facial = pref.b_facial + character.r_skin = pref.r_skin + character.g_skin = pref.g_skin + character.b_skin = pref.b_skin + character.s_tone = pref.s_tone + character.h_style = pref.h_style + character.grad_style= pref.grad_style + character.f_style = pref.f_style + character.grad_style= pref.grad_style + character.b_type = pref.b_type + character.synth_color = pref.synth_color + character.r_synth = pref.r_synth + character.g_synth = pref.g_synth + character.b_synth = pref.b_synth + character.synth_markings = pref.synth_markings + if(character.species.digi_allowed) + character.digitigrade = pref.digitigrade + else + character.digitigrade = 0 + + //sanity check + if(character.digitigrade == null) + character.digitigrade = 0 + pref.digitigrade = 0 + + var/list/ear_styles = pref.get_available_styles(global.ear_styles_list) + character.ear_style = ear_styles[pref.ear_style] + character.r_ears = pref.r_ears + character.b_ears = pref.b_ears + character.g_ears = pref.g_ears + character.r_ears2 = pref.r_ears2 + character.b_ears2 = pref.b_ears2 + character.g_ears2 = pref.g_ears2 + character.r_ears3 = pref.r_ears3 + character.b_ears3 = pref.b_ears3 + character.g_ears3 = pref.g_ears3 + + var/list/tail_styles = pref.get_available_styles(global.tail_styles_list) + character.tail_style = tail_styles[pref.tail_style] + character.r_tail = pref.r_tail + character.b_tail = pref.b_tail + character.g_tail = pref.g_tail + character.r_tail2 = pref.r_tail2 + character.b_tail2 = pref.b_tail2 + character.g_tail2 = pref.g_tail2 + character.r_tail3 = pref.r_tail3 + character.b_tail3 = pref.b_tail3 + character.g_tail3 = pref.g_tail3 + + var/list/wing_styles = pref.get_available_styles(global.wing_styles_list) + character.wing_style = wing_styles[pref.wing_style] + character.r_wing = pref.r_wing + character.b_wing = pref.b_wing + character.g_wing = pref.g_wing + character.r_wing2 = pref.r_wing2 + character.b_wing2 = pref.b_wing2 + character.g_wing2 = pref.g_wing2 + character.r_wing3 = pref.r_wing3 + character.b_wing3 = pref.b_wing3 + character.g_wing3 = pref.g_wing3 + + character.set_gender(pref.biological_gender) + + if(pref.species == "Grey")//YWadd START + character.wingdings = pref.wingdings + + if(pref.colorblind_mono == 1) + character.add_modifier(/datum/modifier/trait/colorblind_monochrome) + + else if(pref.colorblind_vulp == 1) + character.add_modifier(/datum/modifier/trait/colorblind_vulp) + + else if(pref.colorblind_taj == 1) + character.add_modifier(/datum/modifier/trait/colorblind_taj) + + if(pref.haemophilia == 1) + character.add_modifier(/datum/modifier/trait/haemophilia) + //YWadd END + + // Destroy/cyborgize organs and limbs. + //VOREStation Edit + character.synthetic = pref.species == "Protean" ? all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb) + var/list/organs_to_edit = list() + for (var/name in list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/O = character.organs_by_name[name] + if (O) + var/x = organs_to_edit.Find(O.parent_organ) + if (x == 0) + organs_to_edit += name + else + organs_to_edit.Insert(x+(O.robotic == ORGAN_NANOFORM ? 1 : 0), name) + for(var/name in organs_to_edit) //VOREStation edit end + var/status = pref.organ_data[name] + var/obj/item/organ/external/O = character.organs_by_name[name] + if(O) + if(status == "amputated") + O.remove_rejuv() + else if(status == "cyborg") + if(pref.rlimb_data[name]) + O.robotize(pref.rlimb_data[name]) + else + O.robotize() + + for(var/name in list(O_HEART,O_EYES,O_VOICE,O_LUNGS,O_LIVER,O_KIDNEYS,O_SPLEEN,O_STOMACH,O_INTESTINE,O_BRAIN)) + var/status = pref.organ_data[name] + if(!status) + continue + var/obj/item/organ/I = character.internal_organs_by_name[name] + if(istype(I, /obj/item/organ/internal/brain)) + var/obj/item/organ/external/E = character.get_organ(I.parent_organ) + if(E.robotic < ORGAN_ASSISTED) + continue + if(I) + if(status == "assisted") + I.mechassist() + else if(status == "mechanical") + I.robotize() + else if(status == "digital") + I.digitize() + + for(var/N in character.organs_by_name) + var/obj/item/organ/external/O = character.organs_by_name[N] + O.markings.Cut() + + var/priority = 0 + for(var/M in pref.body_markings) + priority += 1 + var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[M] + //var/mark_color = "[pref.body_markings[M]]" //VOREStation Edit + + for(var/BP in mark_datum.body_parts) + var/obj/item/organ/external/O = character.organs_by_name[BP] + if(O) + O.markings[M] = list("color" = pref.body_markings[M][BP]["color"], "datum" = mark_datum, "priority" = priority, "on" = pref.body_markings[M][BP]["on"]) + character.markings_len = priority + + var/list/last_descriptors = list() + if(islist(pref.body_descriptors)) + last_descriptors = pref.body_descriptors.Copy() + pref.body_descriptors = list() + + var/datum/species/mob_species = GLOB.all_species[pref.species] + if(LAZYLEN(mob_species.descriptors)) + for(var/entry in mob_species.descriptors) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] + if(istype(descriptor)) + if(isnull(last_descriptors[entry])) + pref.body_descriptors[entry] = descriptor.default_value // Species datums have initial default value. + else + pref.body_descriptors[entry] = CLAMP(last_descriptors[entry], 1, LAZYLEN(descriptor.standalone_value_descriptors)) + +/datum/category_item/player_setup_item/general/body/content(var/mob/user) + . = list() + + var/datum/species/mob_species = GLOB.all_species[pref.species] + . += "
                    Body " + . += "(®)" + . += "
                    " + . += "Species: [pref.species]
                    " + . += "Blood Type: [pref.b_type]
                    " + if(has_flag(mob_species, HAS_SKIN_TONE)) + . += "Skin Tone: [-pref.s_tone + 35]/220
                    " + . += "Disabilities
                    Adjust
                    " // YWadd + //YWcommented moved onto disabilities. += "Needs Glasses: [pref.disabilities & NEARSIGHTED ? "Yes" : "No"]
                    " + . += "Limbs: Adjust Reset
                    " + . += "Internal Organs: Adjust
                    " + //display limbs below + var/ind = 0 + for(var/name in pref.organ_data) + var/status = pref.organ_data[name] + var/organ_name = null + + switch(name) + if(BP_TORSO) + organ_name = "torso" + if(BP_GROIN) + organ_name = "groin" + if(BP_HEAD) + organ_name = "head" + if(BP_L_ARM) + organ_name = "left arm" + if(BP_R_ARM) + organ_name = "right arm" + if(BP_L_LEG) + organ_name = "left leg" + if(BP_R_LEG) + organ_name = "right leg" + if(BP_L_FOOT) + organ_name = "left foot" + if(BP_R_FOOT) + organ_name = "right foot" + if(BP_L_HAND) + organ_name = "left hand" + if(BP_R_HAND) + organ_name = "right hand" + if(O_HEART) + organ_name = "heart" + if(O_EYES) + organ_name = "eyes" + if(O_VOICE) + organ_name = "larynx" + if(O_BRAIN) + organ_name = "brain" + if(O_LUNGS) + organ_name = "lungs" + if(O_LIVER) + organ_name = "liver" + if(O_KIDNEYS) + organ_name = "kidneys" + if(O_SPLEEN) + organ_name = "spleen" + if(O_STOMACH) + organ_name = "stomach" + if(O_INTESTINE) + organ_name = "intestines" + + if(status == "cyborg") + ++ind + if(ind > 1) + . += ", " + var/datum/robolimb/R + if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) + R = all_robolimbs[pref.rlimb_data[name]] + else + R = basic_robolimb + . += "\t[R.company] [organ_name] prosthesis" + else if(status == "amputated") + ++ind + if(ind > 1) + . += ", " + . += "\tAmputated [organ_name]" + else if(status == "mechanical") + ++ind + if(ind > 1) + . += ", " + switch(organ_name) + if ("brain") + . += "\tPositronic [organ_name]" + else + . += "\tSynthetic [organ_name]" + else if(status == "digital") + ++ind + if(ind > 1) + . += ", " + . += "\tDigital [organ_name]" + else if(status == "assisted") + ++ind + if(ind > 1) + . += ", " + switch(organ_name) + if("heart") + . += "\tPacemaker-assisted [organ_name]" + if("lungs") + . += "\tAssisted [organ_name]" + if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements + . += "\tSurgically altered [organ_name]" + if("eyes") + . += "\tRetinal overlayed [organ_name]" + if("brain") + . += "\tAssisted-interface [organ_name]" + else + . += "\tMechanically assisted [organ_name]" + if(!ind) + . += "\[...\]

                    " + else + . += "

                    " + + if(LAZYLEN(pref.body_descriptors)) + . += "" + for(var/entry in pref.body_descriptors) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] + . += "" + . += "
                    [capitalize(descriptor.chargen_label)]:[descriptor.get_standalone_value_descriptor(pref.body_descriptors[entry])]Change

                    " + + . += "
                    Preview
                    " + . += "
                    Cycle background" + . += "
                    [pref.equip_preview_mob & EQUIP_PREVIEW_LOADOUT ? "Hide loadout" : "Show loadout"]" + . += "
                    [pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]" + . += "
                    [pref.animations_toggle ? "Stop animations" : "Show animations"]" + . += "
                    " + + . += "Hair
                    " + if(has_flag(mob_species, HAS_HAIR_COLOR)) + . += "Change Color [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] " + . += " Style: < > [pref.h_style]
                    " //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles. + + . += "Gradient
                    " + . += "Change Color [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] " + . += " Style: < > [pref.grad_style]
                    " + + . += "
                    Facial
                    " + if(has_flag(mob_species, HAS_HAIR_COLOR)) + . += "Change Color [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] " + . += " Style: < > [pref.f_style]
                    " //Same as above with the extra > & < characters + + if(has_flag(mob_species, HAS_EYE_COLOR)) + . += "
                    Eyes
                    " + . += "Change Color [color_square(pref.r_eyes, pref.g_eyes, pref.b_eyes)]
                    " + + if(has_flag(mob_species, HAS_SKIN_COLOR)) + . += "
                    Body Color
                    " + . += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
                    " + + if(mob_species.digi_allowed) + . += "
                    Digitigrade?: [pref.digitigrade ? "Yes" : "No"]
                    " + + . += "

                    Genetics Settings

                    " + + var/list/ear_styles = pref.get_available_styles(global.ear_styles_list) + var/datum/sprite_accessory/ears/ear = ear_styles[pref.ear_style] + . += "Ears
                    " + if(istype(ear)) + . += " Style: [ear.name]
                    " + if(ear.do_colouration) + . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
                    " + if(ear.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
                    " + if(ear.extra_overlay2) + . += "Change Tertiary Color [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]
                    " + else + . += " Style: Select
                    " + + var/list/tail_styles = pref.get_available_styles(global.tail_styles_list) + var/datum/sprite_accessory/tail/tail = tail_styles[pref.tail_style] + . += "Tail
                    " + if(istype(tail)) + . += " Style: [tail.name]
                    " + if(tail.do_colouration) + . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
                    " + if(tail.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
                    " + if(tail.extra_overlay2) + . += "Change Tertiary Color [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]
                    " + else + . += " Style: Select
                    " + + var/list/wing_styles = pref.get_available_styles(global.wing_styles_list) + var/datum/sprite_accessory/wing/wings = wing_styles[pref.wing_style] + . += "Wing
                    " + if(istype(wings)) + . += " Style: [wings.name]
                    " + if(wings.do_colouration) + . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
                    " + if(wings.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
                    " + if(wings.extra_overlay2) + . += "Change Secondary Color [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]
                    " + else + . += " Style: Select
                    " + + . += "
                    Body Markings +
                    " + . += "" + for(var/M in pref.body_markings) + . += "" + + . += "
                    [M][pref.body_markings.len > 1 ? "˄ ˅ mv " : ""]- Color[color_square(hex = pref.body_markings[M]["color"] ? pref.body_markings[M]["color"] : "#000000")] - Customize
                    " + . += "
                    " + . += "Allow Synth markings: [pref.synth_markings ? "Yes" : "No"]
                    " + . += "Allow Synth color: [pref.synth_color ? "Yes" : "No"]
                    " + if(pref.synth_color) + . += "Change Color [color_square(pref.r_synth, pref.g_synth, pref.b_synth)]" + + . = jointext(.,null) + +/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag) + return mob_species && (mob_species.appearance_flags & flag) + +/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user) + var/datum/species/mob_species = GLOB.all_species[pref.species] + + if(href_list["random"]) + pref.randomize_appearance_and_body_for() + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["change_descriptor"]) + if(mob_species.descriptors) + var/desc_id = href_list["change_descriptor"] + if(pref.body_descriptors[desc_id]) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] + var/choice = tgui_input_list(usr, "Please select a descriptor.", "Descriptor", descriptor.chargen_value_descriptors) + if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. + pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] + return TOPIC_REFRESH + + else if(href_list["blood_type"]) + var/new_b_type = tgui_input_list(user, "Choose your character's blood-type:", "Character Preference", valid_bloodtypes) + if(new_b_type && CanUseTopic(user)) + pref.b_type = new_b_type + return TOPIC_REFRESH + + else if(href_list["show_species"]) + // Actual whitelist checks are handled elsewhere, this is just for accessing the preview window. + var/choice = tgui_input_list(usr, "Which species would you like to look at?", "Species Choice", GLOB.playable_species) + if(!choice) return + pref.species_preview = choice + SetSpecies(preference_mob()) + pref.alternate_languages.Cut() // Reset their alternate languages. Todo: attempt to just fix it instead? + return TOPIC_HANDLED + + else if(href_list["disabilities_yw"]) + Disabilities_YW(usr) + + else if(href_list["set_species"]) + user << browse(null, "window=species") + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) + return TOPIC_NOACTION + + var/datum/species/setting_species + + if(GLOB.all_species[href_list["set_species"]]) + setting_species = GLOB.all_species[href_list["set_species"]] + else + return TOPIC_NOACTION + + if(((!(setting_species.spawn_flags & SPECIES_CAN_JOIN)) || (!is_alien_whitelisted(preference_mob(),setting_species))) && !check_rights(R_ADMIN|R_EVENT, 0) && !(setting_species.spawn_flags & SPECIES_WHITELIST_SELECTABLE)) //VOREStation Edit: selectability + return TOPIC_NOACTION + + var/prev_species = pref.species + pref.species = href_list["set_species"] + if(prev_species != pref.species) + if(!(pref.biological_gender in mob_species.genders)) + pref.set_biological_gender(mob_species.genders[1]) + pref.custom_species = null //VOREStation Edit - This is cleared on species changes + //grab one of the valid hair styles for the newly chosen species + var/list/valid_hairstyles = pref.get_valid_hairstyles() + + if(valid_hairstyles.len) + pref.h_style = pick(valid_hairstyles) + else + //this shouldn't happen + pref.h_style = hair_styles_list["Bald"] + + //grab one of the valid facial hair styles for the newly chosen species + var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() + + if(valid_facialhairstyles.len) + pref.f_style = pick(valid_facialhairstyles) + else + //this shouldn't happen + pref.f_style = facial_hair_styles_list["Shaved"] + + //reset hair colour and skin colour + pref.r_hair = 0//hex2num(copytext(new_hair, 2, 4)) + pref.g_hair = 0//hex2num(copytext(new_hair, 4, 6)) + pref.b_hair = 0//hex2num(copytext(new_hair, 6, 8)) + pref.s_tone = -75 + + reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case. + pref.body_markings.Cut() // Basically same as above. + + pref.sanitize_body_styles() + + var/min_age = get_min_age() + var/max_age = get_max_age() + pref.age = max(min(pref.age, max_age), min_age) + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["hair_color"]) + if(!has_flag(mob_species, HAS_HAIR_COLOR)) + return TOPIC_NOACTION + var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", rgb(pref.r_hair, pref.g_hair, pref.b_hair)) as color|null + if(new_hair && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) + pref.r_hair = hex2num(copytext(new_hair, 2, 4)) + pref.g_hair = hex2num(copytext(new_hair, 4, 6)) + pref.b_hair = hex2num(copytext(new_hair, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["grad_color"]) + if(!has_flag(mob_species, HAS_HAIR_COLOR)) + return TOPIC_NOACTION + var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null + if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) + pref.r_grad = hex2num(copytext(new_grad, 2, 4)) + pref.g_grad = hex2num(copytext(new_grad, 4, 6)) + pref.b_grad = hex2num(copytext(new_grad, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["grad_color"]) + if(!has_flag(mob_species, HAS_HAIR_COLOR)) + return TOPIC_NOACTION + var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null + if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) + pref.r_grad = hex2num(copytext(new_grad, 2, 4)) + pref.g_grad = hex2num(copytext(new_grad, 4, 6)) + pref.b_grad = hex2num(copytext(new_grad, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["hair_style"]) + var/list/valid_hairstyles = pref.get_valid_hairstyles() + + var/new_h_style = tgui_input_list(user, "Choose your character's hair style:", "Character Preference", valid_hairstyles, pref.h_style) + if(new_h_style && CanUseTopic(user)) + pref.h_style = new_h_style + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["grad_style"]) + var/list/valid_gradients = GLOB.hair_gradients + + var/new_grad_style = input(user, "Choose a color pattern for your hair:", "Character Preference", pref.grad_style) as null|anything in valid_gradients + if(new_grad_style && CanUseTopic(user)) + pref.grad_style = new_grad_style + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["grad_style"]) + var/list/valid_gradients = GLOB.hair_gradients + + var/new_grad_style = tgui_input_list(user, "Choose a color pattern for your hair:", "Character Preference", valid_gradients, pref.grad_style) + if(new_grad_style && CanUseTopic(user)) + pref.grad_style = new_grad_style + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["hair_style_left"]) + var/H = href_list["hair_style_left"] + var/list/valid_hairstyles = pref.get_valid_hairstyles() + var/start = valid_hairstyles.Find(H) + + if(start != 1) //If we're not the beginning of the list, become the previous element. + pref.h_style = valid_hairstyles[start-1] + else //But if we ARE, become the final element. + pref.h_style = valid_hairstyles[valid_hairstyles.len] + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["hair_style_right"]) + var/H = href_list["hair_style_right"] + var/list/valid_hairstyles = pref.get_valid_hairstyles() + var/start = valid_hairstyles.Find(H) + + if(start != valid_hairstyles.len) //If we're not the end of the list, become the next element. + pref.h_style = valid_hairstyles[start+1] + else //But if we ARE, become the first element. + pref.h_style = valid_hairstyles[1] + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["facial_color"]) + if(!has_flag(mob_species, HAS_HAIR_COLOR)) + return TOPIC_NOACTION + var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(pref.r_facial, pref.g_facial, pref.b_facial)) as color|null + if(new_facial && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user)) + pref.r_facial = hex2num(copytext(new_facial, 2, 4)) + pref.g_facial = hex2num(copytext(new_facial, 4, 6)) + pref.b_facial = hex2num(copytext(new_facial, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + if(href_list["digitigrade"]) + pref.digitigrade = !pref.digitigrade + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["eye_color"]) + if(!has_flag(mob_species, HAS_EYE_COLOR)) + return TOPIC_NOACTION + var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes)) as color|null + if(new_eyes && has_flag(mob_species, HAS_EYE_COLOR) && CanUseTopic(user)) + pref.r_eyes = hex2num(copytext(new_eyes, 2, 4)) + pref.g_eyes = hex2num(copytext(new_eyes, 4, 6)) + pref.b_eyes = hex2num(copytext(new_eyes, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["skin_tone"]) + if(!has_flag(mob_species, HAS_SKIN_TONE)) + return TOPIC_NOACTION + var/new_s_tone = tgui_input_number(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference", (-pref.s_tone) + 35, 220, 1) + if(new_s_tone && has_flag(mob_species, HAS_SKIN_TONE) && CanUseTopic(user)) + pref.s_tone = 35 - max(min( round(new_s_tone), 220),1) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["skin_color"]) + if(!has_flag(mob_species, HAS_SKIN_COLOR)) + return TOPIC_NOACTION + var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null + if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user)) + pref.r_skin = hex2num(copytext(new_skin, 2, 4)) + pref.g_skin = hex2num(copytext(new_skin, 4, 6)) + pref.b_skin = hex2num(copytext(new_skin, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["facial_style"]) + var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() + + var/new_f_style = tgui_input_list(user, "Choose your character's facial-hair style:", "Character Preference", valid_facialhairstyles, pref.f_style) + if(new_f_style && CanUseTopic(user)) + pref.f_style = new_f_style + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["facial_style_left"]) + var/F = href_list["facial_style_left"] + var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() + var/start = valid_facialhairstyles.Find(F) + + if(start != 1) //If we're not the beginning of the list, become the previous element. + pref.f_style = valid_facialhairstyles[start-1] + else //But if we ARE, become the final element. + pref.f_style = valid_facialhairstyles[valid_facialhairstyles.len] + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["facial_style_right"]) + var/F = href_list["facial_style_right"] + var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() + var/start = valid_facialhairstyles.Find(F) + + if(start != valid_facialhairstyles.len) //If we're not the end of the list, become the next element. + pref.f_style = valid_facialhairstyles[start+1] + else //But if we ARE, become the first element. + pref.f_style = valid_facialhairstyles[1] + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_style"]) + var/list/usable_markings = pref.body_markings.Copy() ^ body_marking_styles_list.Copy() + /* VOREStation Removal - No markings whitelist, let people mix/match + for(var/M in usable_markings) + var/datum/sprite_accessory/S = usable_markings[M] + var/datum/species/spec = GLOB.all_species[pref.species] + if(!S.species_allowed.len) + continue + else if(!(pref.species in S.species_allowed) && !(pref.custom_base in S.species_allowed) && !(spec.base_species in S.species_allowed)) + usable_markings -= M + */ //VOREStation Removal End + var/new_marking = tgui_input_list(user, "Choose a body marking:", "Character Preference", usable_markings) + if(new_marking && CanUseTopic(user)) + pref.body_markings[new_marking] = pref.mass_edit_marking_list(new_marking) //New markings start black + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_up"]) + var/M = href_list["marking_up"] + var/start = pref.body_markings.Find(M) + if(start != 1) //If we're not the beginning of the list, swap with the previous element. + moveElement(pref.body_markings, start, start-1) + else //But if we ARE, become the final element -ahead- of everything else. + moveElement(pref.body_markings, start, pref.body_markings.len+1) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_down"]) + var/M = href_list["marking_down"] + var/start = pref.body_markings.Find(M) + if(start != pref.body_markings.len) //If we're not the end of the list, swap with the next element. + moveElement(pref.body_markings, start, start+2) + else //But if we ARE, become the first element -behind- everything else. + moveElement(pref.body_markings, start, 1) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_move"]) + var/M = href_list["marking_move"] + var/start = pref.body_markings.Find(M) + var/list/move_locs = pref.body_markings - M + if(start != 1) + move_locs -= pref.body_markings[start-1] + + var/inject_after = tgui_input_list(user, "Move [M] ahead of...", "Character Preference", move_locs) //Move ahead of any marking that isn't the current or previous one. + var/newpos = pref.body_markings.Find(inject_after) + if(newpos) + moveElement(pref.body_markings, start, newpos+1) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_remove"]) + var/M = href_list["marking_remove"] + winshow(user, "prefs_markings_subwindow", FALSE) + pref.body_markings -= M + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_color"]) + var/M = href_list["marking_color"] + if (isnull(pref.body_markings[M]["color"])) + if (tgui_alert(user, "You currently have customized marking colors. This will reset each bodypart's color. Are you sure you want to continue?","Reset Bodypart Colors",list("Yes","No")) == "No") + return TOPIC_NOACTION + var/mark_color = input(user, "Choose the [M] color: ", "Character Preference", pref.body_markings[M]["color"]) as color|null + if(mark_color && CanUseTopic(user)) + pref.body_markings[M] = pref.mass_edit_marking_list(M,FALSE,TRUE,pref.body_markings[M],color="[mark_color]") + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if (href_list["marking_submenu"]) + var/M = href_list["marking_submenu"] + markings_subwindow(user, M) + return TOPIC_NOACTION + + else if (href_list["toggle_all_marking_selection"]) + var/toggle = text2num(href_list["toggle"]) + var/marking = href_list["toggle_all_marking_selection"] + if (pref.body_markings.Find(marking) == 0) + winshow(user, "prefs_markings_subwindow", FALSE) + return TOPIC_NOACTION + pref.body_markings[marking] = pref.mass_edit_marking_list(marking,TRUE,FALSE,pref.body_markings[marking],on=toggle) + markings_subwindow(user, marking) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if (href_list["color_all_marking_selection"]) + var/marking = href_list["color_all_marking_selection"] + if (pref.body_markings.Find(marking) == 0) + winshow(user, "prefs_markings_subwindow", FALSE) + return TOPIC_NOACTION + var/mark_color = input(user, "Choose the [marking] color: ", "Character Preference", pref.body_markings[marking]["color"]) as color|null + if(mark_color && CanUseTopic(user)) + pref.body_markings[marking] = pref.mass_edit_marking_list(marking,FALSE,TRUE,pref.body_markings[marking],color="[mark_color]") + markings_subwindow(user, marking) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if (href_list["zone_marking_color"]) + var/marking = href_list["zone_marking_color"] + if (pref.body_markings.Find(marking) == 0) + winshow(user, "prefs_markings_subwindow", FALSE) + return TOPIC_NOACTION + var/zone = href_list["zone"] + pref.body_markings[marking]["color"] = null //turn off the color button outside the submenu + var/mark_color = input(user, "Choose the [marking] color: ", "Character Preference", pref.body_markings[marking][zone]["color"]) as color|null + if(mark_color && CanUseTopic(user)) + pref.body_markings[marking][zone]["color"] = "[mark_color]" + markings_subwindow(user, marking) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if (href_list["zone_marking_toggle"]) + var/marking = href_list["zone_marking_toggle"] + if (pref.body_markings.Find(marking) == 0) + winshow(user, "prefs_markings_subwindow", FALSE) + return TOPIC_NOACTION + var/zone = href_list["zone"] + pref.body_markings[marking][zone]["on"] = text2num(href_list["toggle"]) + markings_subwindow(user, marking) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["reset_limbs"]) + reset_limbs() + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["limbs"]) + + var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body") + + // Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy. + var/datum/species/current_species = GLOB.all_species[pref.species] + if(!current_species.has_organ["brain"]) + limb_selection_list -= "Full Body" + else if(pref.organ_data[BP_TORSO] == "cyborg") + limb_selection_list |= "Head" + + var/organ_tag = tgui_input_list(user, "Which limb do you want to change?", "Limb Choice", limb_selection_list) + + if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION + + var/limb = null + var/second_limb = null // if you try to change the arm, the hand should also change + var/third_limb = null // if you try to unchange the hand, the arm should also change + + // Do not let them amputate their entire body, ty. + var/list/choice_options = list("Normal","Amputated","Prosthesis") + switch(organ_tag) + if("Left Leg") + limb = BP_L_LEG + second_limb = BP_L_FOOT + if("Right Leg") + limb = BP_R_LEG + second_limb = BP_R_FOOT + if("Left Arm") + limb = BP_L_ARM + second_limb = BP_L_HAND + if("Right Arm") + limb = BP_R_ARM + second_limb = BP_R_HAND + if("Left Foot") + limb = BP_L_FOOT + third_limb = BP_L_LEG + if("Right Foot") + limb = BP_R_FOOT + third_limb = BP_R_LEG + if("Left Hand") + limb = BP_L_HAND + third_limb = BP_L_ARM + if("Right Hand") + limb = BP_R_HAND + third_limb = BP_R_ARM + if("Head") + limb = BP_HEAD + choice_options = list("Prosthesis") + if("Full Body") + limb = BP_TORSO + second_limb = BP_HEAD + third_limb = BP_GROIN + choice_options = list("Normal","Prosthesis") + + var/new_state = tgui_input_list(user, "What state do you wish the limb to be in?", "State Choice", choice_options) + if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION + + switch(new_state) + if("Normal") + pref.organ_data[limb] = null + pref.rlimb_data[limb] = null + if(limb == BP_TORSO) + for(var/other_limb in BP_ALL - BP_TORSO) + pref.organ_data[other_limb] = null + pref.rlimb_data[other_limb] = null + for(var/internal in O_STANDARD) + pref.organ_data[internal] = null + pref.rlimb_data[internal] = null + if(third_limb) + pref.organ_data[third_limb] = null + pref.rlimb_data[third_limb] = null + + if("Amputated") + if(limb == BP_TORSO) + return + pref.organ_data[limb] = "amputated" + pref.rlimb_data[limb] = null + if(second_limb) + pref.organ_data[second_limb] = "amputated" + pref.rlimb_data[second_limb] = null + + if("Prosthesis") + var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN + var/list/usable_manufacturers = list() + for(var/company in chargen_robolimbs) + var/datum/robolimb/M = chargen_robolimbs[company] + if(!(limb in M.parts)) + continue + if(tmp_species in M.species_cannot_use) + continue + //VOREStation Add - Cyberlimb whitelisting. + if(M.whitelisted_to && !(user.ckey in M.whitelisted_to)) + continue + //VOREStation Add End + usable_manufacturers[company] = M + if(!usable_manufacturers.len) + return + var/choice = tgui_input_list(user, "Which manufacturer do you wish to use for this limb?", "Manufacturer Choice", usable_manufacturers) + if(!choice) + return + + pref.rlimb_data[limb] = choice + pref.organ_data[limb] = "cyborg" + + if(second_limb) + pref.rlimb_data[second_limb] = choice + pref.organ_data[second_limb] = "cyborg" + if(third_limb && pref.organ_data[third_limb] == "amputated") + pref.organ_data[third_limb] = null + + if(limb == BP_TORSO) + for(var/other_limb in BP_ALL - BP_TORSO) + if(pref.organ_data[other_limb]) + continue + pref.organ_data[other_limb] = "cyborg" + pref.rlimb_data[other_limb] = choice + if(!pref.organ_data[O_BRAIN]) + pref.organ_data[O_BRAIN] = "assisted" + for(var/internal_organ in list(O_HEART,O_EYES)) + pref.organ_data[internal_organ] = "mechanical" + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["organs"]) + + var/organ_name = tgui_input_list(user, "Which internal function do you want to change?", "Internal Organ", list("Heart", "Eyes", "Larynx", "Lungs", "Liver", "Kidneys", "Spleen", "Intestines", "Stomach", "Brain")) + if(!organ_name) return + + var/organ = null + switch(organ_name) + if("Heart") + organ = O_HEART + if("Eyes") + organ = O_EYES + if("Larynx") + organ = O_VOICE + if("Lungs") + organ = O_LUNGS + if("Liver") + organ = O_LIVER + if("Kidneys") + organ = O_KIDNEYS + if("Spleen") + organ = O_SPLEEN + if("Intestines") + organ = O_INTESTINE + if("Stomach") + organ = O_STOMACH + if("Brain") + if(pref.organ_data[BP_HEAD] != "cyborg") + to_chat(user, "You may only select a cybernetic or synthetic brain if you have a full prosthetic body.") + return + organ = "brain" + + var/datum/species/current_species = GLOB.all_species[pref.species] + var/list/organ_choices = list("Normal") + if(pref.organ_data[BP_TORSO] == "cyborg") + organ_choices -= "Normal" + if(organ_name == "Brain") + organ_choices += "Cybernetic" + if(!(current_species.spawn_flags & SPECIES_NO_POSIBRAIN)) + organ_choices += "Positronic" + if(!(current_species.spawn_flags & SPECIES_NO_DRONEBRAIN)) + organ_choices += "Drone" + else + organ_choices += "Assisted" + organ_choices += "Mechanical" + else + organ_choices += "Assisted" + organ_choices += "Mechanical" + + var/new_state = tgui_input_list(user, "What state do you wish the organ to be in?", "State Choice", organ_choices) + if(!new_state) return + + switch(new_state) + if("Normal") + pref.organ_data[organ] = null + if("Assisted") + pref.organ_data[organ] = "assisted" + if("Cybernetic") + pref.organ_data[organ] = "assisted" + if("Mechanical") + pref.organ_data[organ] = "mechanical" + if("Drone") + pref.organ_data[organ] = "digital" + if("Positronic") + pref.organ_data[organ] = "mechanical" + + return TOPIC_REFRESH + + else if(href_list["disabilities"]) + var/disability_flag = text2num(href_list["disabilities"]) + pref.disabilities ^= disability_flag + Disabilities_YW(usr) //YW Edit + + else if(href_list["toggle_preview_value"]) + pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"]) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["toggle_animations"]) + pref.animations_toggle = !pref.animations_toggle + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["synth_color"]) + pref.synth_color = !pref.synth_color + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["synth2_color"]) + var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", rgb(pref.r_synth, pref.g_synth, pref.b_synth)) as color|null + if(new_color && CanUseTopic(user)) + pref.r_synth = hex2num(copytext(new_color, 2, 4)) + pref.g_synth = hex2num(copytext(new_color, 4, 6)) + pref.b_synth = hex2num(copytext(new_color, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["synth_markings"]) + pref.synth_markings = !pref.synth_markings + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["cycle_bg"]) + pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) + return TOPIC_REFRESH_UPDATE_PREVIEW + + //YW Add Start + + else if(href_list["wingdings"]) + pref.wingdings = !pref.wingdings + Disabilities_YW(usr) + + else if(href_list["colorblind_mono"]) + pref.colorblind_mono = !pref.colorblind_mono + Disabilities_YW(usr) + + else if(href_list["colorblind_vulp"]) + pref.colorblind_vulp = !pref.colorblind_vulp + Disabilities_YW(usr) + + else if(href_list["colorblind_taj"]) + pref.colorblind_taj = !pref.colorblind_taj + Disabilities_YW(usr) + + else if(href_list["haemophilia"]) + pref.haemophilia = !pref.haemophilia + Disabilities_YW(usr) + + else if(href_list["reset_disabilities"]) + pref.wingdings = 0 + pref.colorblind_mono = 0 + pref.colorblind_taj = 0 + pref.colorblind_vulp = 0 + pref.haemophilia = 0 + Disabilities_YW(usr) + + //YW Add End + + else if(href_list["ear_style"]) + var/new_ear_style = tgui_input_list(user, "Select an ear style for this character:", "Character Preference", pref.get_available_styles(global.ear_styles_list), pref.ear_style) + if(new_ear_style) + pref.ear_style = new_ear_style + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["ear_color"]) + var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference", + rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null + if(new_earc) + pref.r_ears = hex2num(copytext(new_earc, 2, 4)) + pref.g_ears = hex2num(copytext(new_earc, 4, 6)) + pref.b_ears = hex2num(copytext(new_earc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["ear_color2"]) + var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference", + rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null + if(new_earc2) + pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4)) + pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6)) + pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["ear_color3"]) + var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference", + rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null + if(new_earc3) + pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4)) + pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6)) + pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_style"]) + var/new_tail_style = tgui_input_list(user, "Select a tail style for this character:", "Character Preference", pref.get_available_styles(global.tail_styles_list), pref.tail_style) + if(new_tail_style) + pref.tail_style = new_tail_style + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_color"]) + var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference", + rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null + if(new_tailc) + pref.r_tail = hex2num(copytext(new_tailc, 2, 4)) + pref.g_tail = hex2num(copytext(new_tailc, 4, 6)) + pref.b_tail = hex2num(copytext(new_tailc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_color2"]) + var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference", + rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null + if(new_tailc2) + pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4)) + pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6)) + pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_color3"]) + var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference", + rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null + if(new_tailc3) + pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4)) + pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6)) + pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_style"]) + var/new_wing_style = tgui_input_list(user, "Select a wing style for this character:", "Character Preference", pref.get_available_styles(global.wing_styles_list), pref.wing_style) + if(new_wing_style) + pref.wing_style = new_wing_style + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_color"]) + var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference", + rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null + if(new_wingc) + pref.r_wing = hex2num(copytext(new_wingc, 2, 4)) + pref.g_wing = hex2num(copytext(new_wingc, 4, 6)) + pref.b_wing = hex2num(copytext(new_wingc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_color2"]) + var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference", + rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null + if(new_wingc2) + pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4)) + pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6)) + pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_color3"]) + var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference", + rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null + if(new_wingc3) + pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4)) + pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6)) + pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + return ..() + +/datum/category_item/player_setup_item/general/body/proc/reset_limbs() + + for(var/organ in pref.organ_data) + pref.organ_data[organ] = null + while(null in pref.organ_data) + pref.organ_data -= null + + for(var/organ in pref.rlimb_data) + pref.rlimb_data[organ] = null + while(null in pref.rlimb_data) + pref.rlimb_data -= null + + // Sanitize the name so that there aren't any numbers sticking around. + pref.real_name = sanitize_name(pref.real_name, pref.species) + if(!pref.real_name) + pref.real_name = random_name(pref.identifying_gender, pref.species) + +/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user) + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) + pref.species_preview = SPECIES_HUMAN + var/datum/species/current_species = GLOB.all_species[pref.species_preview] + var/dat = "" + dat += "

                    [current_species.name] \[change\]


                    " + dat += "" + dat += "" + //vorestation edit begin + if(current_species.wikilink) + dat += "" + else + dat += "" + //vorestation edit end + dat += "" + dat += "" + dat += "
                    [current_species.blurb]

                    See the wiki for more details.
                    [current_species.blurb]" + if("preview" in cached_icon_states(current_species.icobase)) + usr << browse_rsc(icon(current_species.icobase,"preview"), "species_preview_[current_species.name].png") + dat += "

                    " + dat += "Language: [current_species.species_language]
                    " + dat += "" + if(current_species.spawn_flags & SPECIES_CAN_JOIN) + switch(current_species.rarity_value) + if(1 to 2) + dat += "
                    Often present on human stations." + if(3 to 4) + dat += "
                    Rarely present on human stations." + if(5) + dat += "
                    Unheard of on human stations." + else + dat += "
                    May be present on human stations." + if(current_species.spawn_flags & SPECIES_IS_WHITELISTED) + dat += "
                    Whitelist restricted." + if(!current_species.has_organ[O_HEART]) + dat += "
                    Does not have a circulatory system." + if(!current_species.has_organ[O_LUNGS]) + dat += "
                    Does not have a respiratory system." + if(current_species.flags & NO_SCAN) + dat += "
                    Does not have DNA." + if(current_species.flags & NO_DEFIB) + dat += "
                    Cannot be defibrillated." + if(current_species.flags & NO_PAIN) + dat += "
                    Does not feel pain." + if(current_species.flags & NO_SLIP) + dat += "
                    Has excellent traction." + if(current_species.flags & NO_POISON) + dat += "
                    Immune to most poisons." + if(current_species.appearance_flags & HAS_SKIN_TONE) + dat += "
                    Has a variety of skin tones." + if(current_species.appearance_flags & HAS_SKIN_COLOR) + dat += "
                    Has a variety of skin colours." + if(current_species.appearance_flags & HAS_EYE_COLOR) + dat += "
                    Has a variety of eye colours." + if(current_species.flags & IS_PLANT) + dat += "
                    Has a plantlike physiology." + dat += "

                    " + + var/restricted = 0 + + if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) + restricted = 2 + else if(!is_alien_whitelisted(preference_mob(),current_species)) + restricted = 1 + + if(restricted) + if(restricted == 1) + dat += "You cannot play as this species.
                    If you wish to be whitelisted, you can make an application post on the forums.

                    " + else if(restricted == 2) + dat += "You cannot play as this species.
                    This species is not available for play as a station race..

                    " + if(!restricted || check_rights(R_ADMIN|R_EVENT, 0) || current_species.spawn_flags & SPECIES_WHITELIST_SELECTABLE) //VOREStation Edit: selectability + dat += "\[select\]" + dat += "
                    " + + user << browse(dat, "window=species;size=700x400") + +/datum/category_item/player_setup_item/general/body/proc/markings_subwindow(mob/user, marking) + var/static/list/part_to_string = list(BP_HEAD = "Head", BP_TORSO = "Upper Body", BP_GROIN = "Lower Body", BP_R_ARM = "Right Arm", BP_L_ARM = "Left Arm", BP_R_HAND = "Right Hand", BP_L_HAND = "Left Hand", BP_R_LEG = "Right Leg", BP_L_LEG = "Left Leg", BP_R_FOOT = "Right Foot", BP_L_FOOT = "Left Foot") + var/dat = "

                    Editing '[marking]'


                    " + dat += "Enable All " + dat += "Disable All " + dat += "Change Color of All
                    " + dat += "
                    " + for (var/bodypart in pref.body_markings[marking]) + if (!islist(pref.body_markings[marking][bodypart])) continue + dat += "[part_to_string[bodypart]]: [color_square(hex = pref.body_markings[marking][bodypart]["color"])] " + dat += "Change " + dat += "[pref.body_markings[marking][bodypart]["on"] ? "Toggle Off" : "Toggle On"]
                    " + + dat += "" + winshow(user, "prefs_markings_subwindow", TRUE) + pref.markings_subwindow = new(user, "prefs_markings_browser", "Marking Editor", 400, 400) + pref.markings_subwindow.set_content(dat) + pref.markings_subwindow.open(FALSE) + onclose(user, "prefs_markings_subwindow", src) diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index c410ed541f..67a5e2b02a 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -1,193 +1,193 @@ -/datum/preferences - var/list/all_underwear - var/list/all_underwear_metadata - -/datum/category_item/player_setup_item/general/equipment - name = "Clothing" - sort_order = 4 - -/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) - S["all_underwear"] >> pref.all_underwear - S["all_underwear_metadata"] >> pref.all_underwear_metadata - S["backbag"] >> pref.backbag - S["pdachoice"] >> pref.pdachoice - S["communicator_visibility"] >> pref.communicator_visibility - S["ttone"] >> pref.ringtone // CHOMPEdit - We use ttone in the pref so that it doesnt get reset - -/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) - S["all_underwear"] << pref.all_underwear - S["all_underwear_metadata"] << pref.all_underwear_metadata - S["backbag"] << pref.backbag - S["pdachoice"] << pref.pdachoice - S["communicator_visibility"] << pref.communicator_visibility - S["ttone"] << pref.ringtone // CHOMPEdit - We use ttone in the pref so that it doesnt get reset - -var/global/list/valid_ringtones = list( - "beep", - "boom", - "slip", - "honk", - "SKREE", - "xeno", - "dust", // CHOMPEdit - Keeps dust as ringtone - "spark", - "rad", - "servo", - // "buh-boop", // CHOMPEdit - No. - "trombone", - "whistle", - "chirp", - "slurp", - "pwing", - "clack", - "bzzt", - "chimes", - "prbt", - "bark", - "bork", - "roark", - "chitter", - "squish" - ) - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character) - character.all_underwear.Cut() - character.all_underwear_metadata.Cut() - - for(var/underwear_category_name in pref.all_underwear) - var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name] - if(underwear_category) - var/underwear_item_name = pref.all_underwear[underwear_category_name] - character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] - if(pref.all_underwear_metadata[underwear_category_name]) - character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name] - else - pref.all_underwear -= underwear_category_name - - // TODO - Looks like this is duplicating the work of sanitize_character() if so, remove - if(pref.backbag > backbaglist.len || pref.backbag < 1) - pref.backbag = 2 //Same as above - character.backbag = pref.backbag - - if(pref.pdachoice > 8 || pref.pdachoice < 1) - pref.pdachoice = 1 - character.pdachoice = pref.pdachoice - -/datum/category_item/player_setup_item/general/equipment/sanitize_character() - if(!islist(pref.gear)) pref.gear = list() - - if(!istype(pref.all_underwear)) - pref.all_underwear = list() - - for(var/datum/category_group/underwear/WRC in global_underwear.categories) - for(var/datum/category_item/underwear/WRI in WRC.items) - if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE)) - pref.all_underwear[WRC.name] = WRI.name - break - - if(!istype(pref.all_underwear_metadata)) - pref.all_underwear_metadata = list() - - for(var/underwear_category in pref.all_underwear) - var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category] - if(!UWC) - pref.all_underwear -= underwear_category - else - var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] - if(!UWI) - pref.all_underwear -= underwear_category - - for(var/underwear_metadata in pref.all_underwear_metadata) - if(!(underwear_metadata in pref.all_underwear)) - pref.all_underwear_metadata -= underwear_metadata - pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) - pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) - pref.ringtone = sanitize(pref.ringtone, 20) - -/datum/category_item/player_setup_item/general/equipment/content() - . = list() - . += "Equipment:
                    " - for(var/datum/category_group/underwear/UWC in global_underwear.categories) - var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None" - . += "[UWC.name]: [item_name]" - var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] - if(UWI) - for(var/datum/gear_tweak/gt in UWI.tweaks) - . += " [gt.get_contents(get_metadata(UWC.name, gt))]" - - . += "
                    " - . += "Backpack Type: [backbaglist[pref.backbag]]
                    " - . += "PDA Type: [pdachoicelist[pref.pdachoice]]
                    " - . += "Communicator Visibility: [(pref.communicator_visibility) ? "Yes" : "No"]
                    " - . += "Ringtone (leave blank for job default): [pref.ringtone]
                    " - - return jointext(.,null) - -/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt) - var/metadata = pref.all_underwear_metadata[underwear_category] - if(!metadata) - metadata = list() - pref.all_underwear_metadata[underwear_category] = metadata - - var/tweak_data = metadata["[gt]"] - if(!tweak_data) - tweak_data = gt.get_default() - metadata["[gt]"] = tweak_data - return tweak_data - -/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) - var/list/metadata = pref.all_underwear_metadata[underwear_category] - metadata["[gt]"] = new_metadata - - -/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["change_backpack"]) - var/new_backbag = tgui_input_list(user, "Choose your character's style of bag:", "Character Preference", backbaglist, backbaglist[pref.backbag]) - if(!isnull(new_backbag) && CanUseTopic(user)) - pref.backbag = backbaglist.Find(new_backbag) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["change_pda"]) - var/new_pdachoice = tgui_input_list(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist, pdachoicelist[pref.pdachoice]) - if(!isnull(new_pdachoice) && CanUseTopic(user)) - pref.pdachoice = pdachoicelist.Find(new_pdachoice) - return TOPIC_REFRESH - - else if(href_list["change_underwear"]) - var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]] - if(!UWC) - return - var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "Choose underwear:", "Character Preference", UWC.items, pref.all_underwear[UWC.name]) - if(selected_underwear && CanUseTopic(user)) - pref.all_underwear[UWC.name] = selected_underwear.name - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["underwear"] && href_list["tweak"]) - var/underwear = href_list["underwear"] - if(!(underwear in pref.all_underwear)) - return TOPIC_NOACTION - var/datum/gear_tweak/gt = locate(href_list["tweak"]) - if(!gt) - return TOPIC_NOACTION - var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt)) - if(new_metadata) - set_metadata(underwear, gt, new_metadata) - return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["toggle_comm_visibility"]) - if(CanUseTopic(user)) - pref.communicator_visibility = !pref.communicator_visibility - return TOPIC_REFRESH - else if(href_list["set_ringtone"]) - var/choice = tgui_input_list(user, "Please select a ringtone. All of these choices come with an associated preset sound. Alternately, select \"Other\" to specify manually.", "Character Preference", valid_ringtones + "Other", pref.ringtone) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = sanitize(tgui_input_text(user, "Please enter a custom ringtone. If this doesn't match any of the other listed choices, your PDA will use the default (\"beep\") sound.", "Character Preference", null, 20), 20) - if(raw_choice && CanUseTopic(user)) - pref.ringtone = raw_choice - else - pref.ringtone = choice - return TOPIC_REFRESH - - return ..() +/datum/preferences + var/list/all_underwear + var/list/all_underwear_metadata + +/datum/category_item/player_setup_item/general/equipment + name = "Clothing" + sort_order = 4 + +/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) + S["all_underwear"] >> pref.all_underwear + S["all_underwear_metadata"] >> pref.all_underwear_metadata + S["backbag"] >> pref.backbag + S["pdachoice"] >> pref.pdachoice + S["communicator_visibility"] >> pref.communicator_visibility + S["ttone"] >> pref.ringtone // CHOMPEdit - We use ttone in the pref so that it doesnt get reset + +/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) + S["all_underwear"] << pref.all_underwear + S["all_underwear_metadata"] << pref.all_underwear_metadata + S["backbag"] << pref.backbag + S["pdachoice"] << pref.pdachoice + S["communicator_visibility"] << pref.communicator_visibility + S["ttone"] << pref.ringtone // CHOMPEdit - We use ttone in the pref so that it doesnt get reset + +var/global/list/valid_ringtones = list( + "beep", + "boom", + "slip", + "honk", + "SKREE", + "xeno", + "dust", // CHOMPEdit - Keeps dust as ringtone + "spark", + "rad", + "servo", + // "buh-boop", // CHOMPEdit - No. + "trombone", + "whistle", + "chirp", + "slurp", + "pwing", + "clack", + "bzzt", + "chimes", + "prbt", + "bark", + "bork", + "roark", + "chitter", + "squish" + ) + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character) + character.all_underwear.Cut() + character.all_underwear_metadata.Cut() + + for(var/underwear_category_name in pref.all_underwear) + var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name] + if(underwear_category) + var/underwear_item_name = pref.all_underwear[underwear_category_name] + character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] + if(pref.all_underwear_metadata[underwear_category_name]) + character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name] + else + pref.all_underwear -= underwear_category_name + + // TODO - Looks like this is duplicating the work of sanitize_character() if so, remove + if(pref.backbag > backbaglist.len || pref.backbag < 1) + pref.backbag = 2 //Same as above + character.backbag = pref.backbag + + if(pref.pdachoice > 8 || pref.pdachoice < 1) + pref.pdachoice = 1 + character.pdachoice = pref.pdachoice + +/datum/category_item/player_setup_item/general/equipment/sanitize_character() + if(!islist(pref.gear)) pref.gear = list() + + if(!istype(pref.all_underwear)) + pref.all_underwear = list() + + for(var/datum/category_group/underwear/WRC in global_underwear.categories) + for(var/datum/category_item/underwear/WRI in WRC.items) + if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE)) + pref.all_underwear[WRC.name] = WRI.name + break + + if(!istype(pref.all_underwear_metadata)) + pref.all_underwear_metadata = list() + + for(var/underwear_category in pref.all_underwear) + var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category] + if(!UWC) + pref.all_underwear -= underwear_category + else + var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] + if(!UWI) + pref.all_underwear -= underwear_category + + for(var/underwear_metadata in pref.all_underwear_metadata) + if(!(underwear_metadata in pref.all_underwear)) + pref.all_underwear_metadata -= underwear_metadata + pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) + pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) + pref.ringtone = sanitize(pref.ringtone, 20) + +/datum/category_item/player_setup_item/general/equipment/content() + . = list() + . += "Equipment:
                    " + for(var/datum/category_group/underwear/UWC in global_underwear.categories) + var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None" + . += "[UWC.name]: [item_name]" + var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + . += " [gt.get_contents(get_metadata(UWC.name, gt))]" + + . += "
                    " + . += "Backpack Type: [backbaglist[pref.backbag]]
                    " + . += "PDA Type: [pdachoicelist[pref.pdachoice]]
                    " + . += "Communicator Visibility: [(pref.communicator_visibility) ? "Yes" : "No"]
                    " + . += "Ringtone (leave blank for job default): [pref.ringtone]
                    " + + return jointext(.,null) + +/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt) + var/metadata = pref.all_underwear_metadata[underwear_category] + if(!metadata) + metadata = list() + pref.all_underwear_metadata[underwear_category] = metadata + + var/tweak_data = metadata["[gt]"] + if(!tweak_data) + tweak_data = gt.get_default() + metadata["[gt]"] = tweak_data + return tweak_data + +/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) + var/list/metadata = pref.all_underwear_metadata[underwear_category] + metadata["[gt]"] = new_metadata + + +/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) + if(href_list["change_backpack"]) + var/new_backbag = tgui_input_list(user, "Choose your character's style of bag:", "Character Preference", backbaglist, backbaglist[pref.backbag]) + if(!isnull(new_backbag) && CanUseTopic(user)) + pref.backbag = backbaglist.Find(new_backbag) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["change_pda"]) + var/new_pdachoice = tgui_input_list(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist, pdachoicelist[pref.pdachoice]) + if(!isnull(new_pdachoice) && CanUseTopic(user)) + pref.pdachoice = pdachoicelist.Find(new_pdachoice) + return TOPIC_REFRESH + + else if(href_list["change_underwear"]) + var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]] + if(!UWC) + return + var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "Choose underwear:", "Character Preference", UWC.items, pref.all_underwear[UWC.name]) + if(selected_underwear && CanUseTopic(user)) + pref.all_underwear[UWC.name] = selected_underwear.name + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["underwear"] && href_list["tweak"]) + var/underwear = href_list["underwear"] + if(!(underwear in pref.all_underwear)) + return TOPIC_NOACTION + var/datum/gear_tweak/gt = locate(href_list["tweak"]) + if(!gt) + return TOPIC_NOACTION + var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt)) + if(new_metadata) + set_metadata(underwear, gt, new_metadata) + return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["toggle_comm_visibility"]) + if(CanUseTopic(user)) + pref.communicator_visibility = !pref.communicator_visibility + return TOPIC_REFRESH + else if(href_list["set_ringtone"]) + var/choice = tgui_input_list(user, "Please select a ringtone. All of these choices come with an associated preset sound. Alternately, select \"Other\" to specify manually.", "Character Preference", valid_ringtones + "Other", pref.ringtone) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = sanitize(tgui_input_text(user, "Please enter a custom ringtone. If this doesn't match any of the other listed choices, your PDA will use the default (\"beep\") sound.", "Character Preference", null, 20), 20) + if(raw_choice && CanUseTopic(user)) + pref.ringtone = raw_choice + else + pref.ringtone = choice + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preference_setup/general/05_background.dm b/code/modules/client/preference_setup/general/05_background.dm index 7e71288966..70b2e130bd 100644 --- a/code/modules/client/preference_setup/general/05_background.dm +++ b/code/modules/client/preference_setup/general/05_background.dm @@ -1,173 +1,173 @@ -/datum/category_item/player_setup_item/general/background - name = "Background" - sort_order = 5 - -/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S) - S["med_record"] >> pref.med_record - S["sec_record"] >> pref.sec_record - S["gen_record"] >> pref.gen_record - S["home_system"] >> pref.home_system - S["birthplace"] >> pref.birthplace - S["citizenship"] >> pref.citizenship - S["faction"] >> pref.faction - S["religion"] >> pref.religion - S["economic_status"] >> pref.economic_status - -/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S) - S["med_record"] << pref.med_record - S["sec_record"] << pref.sec_record - S["gen_record"] << pref.gen_record - S["home_system"] << pref.home_system - S["birthplace"] << pref.birthplace - S["citizenship"] << pref.citizenship - S["faction"] << pref.faction - S["religion"] << pref.religion - S["economic_status"] << pref.economic_status - -/datum/category_item/player_setup_item/general/background/sanitize_character() - if(!pref.home_system) pref.home_system = "Unset" - if(!pref.birthplace) pref.birthplace = "Unset" - if(!pref.citizenship) pref.citizenship = "None" - if(!pref.faction) pref.faction = "None" - if(!pref.religion) pref.religion = "None" - - pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_CLASS, initial(pref.economic_status)) - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character) - character.med_record = pref.med_record - character.sec_record = pref.sec_record - character.gen_record = pref.gen_record - character.home_system = pref.home_system - character.birthplace = pref.birthplace - character.citizenship = pref.citizenship - character.personal_faction = pref.faction - character.religion = pref.religion - -/datum/category_item/player_setup_item/general/background/content(var/mob/user) - . += "Background Information
                    " - . += "Economic Status: [pref.economic_status]
                    " - . += "Home: [pref.home_system]
                    " - . += "Birthplace: [pref.birthplace]
                    " - . += "Citizenship: [pref.citizenship]
                    " - . += "Faction: [pref.faction]
                    " - . += "Religion: [pref.religion]
                    " - - . += "
                    Records:
                    " - if(jobban_isbanned(user, "Records")) - . += "You are banned from using character records.
                    " - else - . += "Medical Records:
                    " - . += "[TextPreview(pref.med_record,40)]
                    " - . += " (Reset)

                    " - . += "Employment Records:
                    " - . += "[TextPreview(pref.gen_record,40)]
                    " - . += "(Reset)

                    " - . += "Security Records:
                    " - . += "[TextPreview(pref.sec_record,40)]
                    " - . += "(Reset)" - -/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["econ_status"]) - var/new_class = tgui_input_list(user, "Choose your economic status. This will affect the amount of money you will start with.", "Character Preference", ECONOMIC_CLASS, pref.economic_status) - if(new_class && CanUseTopic(user)) - pref.economic_status = new_class - return TOPIC_REFRESH - - else if(href_list["home_system"]) - var/choice = tgui_input_list(user, "Please choose your home planet and/or system. This should be your current primary residence. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice && CanUseTopic(user)) - pref.home_system = raw_choice - else - pref.home_system = choice - return TOPIC_REFRESH - - else if(href_list["birthplace"]) - var/choice = tgui_input_list(user, "Please choose the planet and/or system or other appropriate location that you were born/created. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.birthplace) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a birthplace.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice && CanUseTopic(user)) - pref.birthplace = raw_choice - else - pref.birthplace = choice - return TOPIC_REFRESH - - else if(href_list["citizenship"]) - var/choice = tgui_input_list(user, "Please select the faction or political entity with which you currently hold citizenship. Select \"Other\" to specify manually.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice && CanUseTopic(user)) - pref.citizenship = raw_choice - else - pref.citizenship = choice - return TOPIC_REFRESH - - else if(href_list["faction"]) - var/choice = tgui_input_list(user, "Please choose the faction you primarily work for, if you are not under the direct employ of NanoTrasen. Select \"Other\" to specify manually.", "Character Preference", faction_choices + list("None","Other"), pref.faction) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice) - pref.faction = raw_choice - else - pref.faction = choice - return TOPIC_REFRESH - - else if(href_list["religion"]) - var/choice = tgui_input_list(user, "Please choose a religion. Select \"Other\" to specify manually.", "Character Preference", religion_choices + list("None","Other"), pref.religion) - if(!choice || !CanUseTopic(user)) - return TOPIC_NOACTION - if(choice == "Other") - var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(raw_choice) - pref.religion = sanitize(raw_choice) - else - pref.religion = choice - return TOPIC_REFRESH - - else if(href_list["set_medical_records"]) - var/new_medical = strip_html_simple(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) - if(new_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.med_record = new_medical - return TOPIC_REFRESH - - else if(href_list["set_general_records"]) - var/new_general = strip_html_simple(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) - if(new_general && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.gen_record = new_general - return TOPIC_REFRESH - - else if(href_list["set_security_records"]) - var/sec_medical = strip_html_simple(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) - if(sec_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.sec_record = sec_medical - return TOPIC_REFRESH - - else if(href_list["reset_medrecord"]) - var/resetmed_choice = tgui_alert(usr, "Wipe your Medical Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) - if(resetmed_choice == "Yes") - pref.med_record = null - return TOPIC_REFRESH - - else if(href_list["reset_emprecord"]) - var/resetemp_choice = tgui_alert(usr, "Wipe your Employment Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) - if(resetemp_choice == "Yes") - pref.gen_record = null - return TOPIC_REFRESH - - else if(href_list["reset_secrecord"]) - var/resetsec_choice = tgui_alert(usr, "Wipe your Security Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) - if(resetsec_choice == "Yes") - pref.sec_record = null - return TOPIC_REFRESH - - return ..() +/datum/category_item/player_setup_item/general/background + name = "Background" + sort_order = 5 + +/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S) + S["med_record"] >> pref.med_record + S["sec_record"] >> pref.sec_record + S["gen_record"] >> pref.gen_record + S["home_system"] >> pref.home_system + S["birthplace"] >> pref.birthplace + S["citizenship"] >> pref.citizenship + S["faction"] >> pref.faction + S["religion"] >> pref.religion + S["economic_status"] >> pref.economic_status + +/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S) + S["med_record"] << pref.med_record + S["sec_record"] << pref.sec_record + S["gen_record"] << pref.gen_record + S["home_system"] << pref.home_system + S["birthplace"] << pref.birthplace + S["citizenship"] << pref.citizenship + S["faction"] << pref.faction + S["religion"] << pref.religion + S["economic_status"] << pref.economic_status + +/datum/category_item/player_setup_item/general/background/sanitize_character() + if(!pref.home_system) pref.home_system = "Unset" + if(!pref.birthplace) pref.birthplace = "Unset" + if(!pref.citizenship) pref.citizenship = "None" + if(!pref.faction) pref.faction = "None" + if(!pref.religion) pref.religion = "None" + + pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_CLASS, initial(pref.economic_status)) + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character) + character.med_record = pref.med_record + character.sec_record = pref.sec_record + character.gen_record = pref.gen_record + character.home_system = pref.home_system + character.birthplace = pref.birthplace + character.citizenship = pref.citizenship + character.personal_faction = pref.faction + character.religion = pref.religion + +/datum/category_item/player_setup_item/general/background/content(var/mob/user) + . += "Background Information
                    " + . += "Economic Status: [pref.economic_status]
                    " + . += "Home: [pref.home_system]
                    " + . += "Birthplace: [pref.birthplace]
                    " + . += "Citizenship: [pref.citizenship]
                    " + . += "Faction: [pref.faction]
                    " + . += "Religion: [pref.religion]
                    " + + . += "
                    Records:
                    " + if(jobban_isbanned(user, "Records")) + . += "You are banned from using character records.
                    " + else + . += "Medical Records:
                    " + . += "[TextPreview(pref.med_record,40)]
                    " + . += " (Reset)

                    " + . += "Employment Records:
                    " + . += "[TextPreview(pref.gen_record,40)]
                    " + . += "(Reset)

                    " + . += "Security Records:
                    " + . += "[TextPreview(pref.sec_record,40)]
                    " + . += "(Reset)" + +/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user) + if(href_list["econ_status"]) + var/new_class = tgui_input_list(user, "Choose your economic status. This will affect the amount of money you will start with.", "Character Preference", ECONOMIC_CLASS, pref.economic_status) + if(new_class && CanUseTopic(user)) + pref.economic_status = new_class + return TOPIC_REFRESH + + else if(href_list["home_system"]) + var/choice = tgui_input_list(user, "Please choose your home planet and/or system. This should be your current primary residence. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice && CanUseTopic(user)) + pref.home_system = raw_choice + else + pref.home_system = choice + return TOPIC_REFRESH + + else if(href_list["birthplace"]) + var/choice = tgui_input_list(user, "Please choose the planet and/or system or other appropriate location that you were born/created. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.birthplace) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a birthplace.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice && CanUseTopic(user)) + pref.birthplace = raw_choice + else + pref.birthplace = choice + return TOPIC_REFRESH + + else if(href_list["citizenship"]) + var/choice = tgui_input_list(user, "Please select the faction or political entity with which you currently hold citizenship. Select \"Other\" to specify manually.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice && CanUseTopic(user)) + pref.citizenship = raw_choice + else + pref.citizenship = choice + return TOPIC_REFRESH + + else if(href_list["faction"]) + var/choice = tgui_input_list(user, "Please choose the faction you primarily work for, if you are not under the direct employ of NanoTrasen. Select \"Other\" to specify manually.", "Character Preference", faction_choices + list("None","Other"), pref.faction) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice) + pref.faction = raw_choice + else + pref.faction = choice + return TOPIC_REFRESH + + else if(href_list["religion"]) + var/choice = tgui_input_list(user, "Please choose a religion. Select \"Other\" to specify manually.", "Character Preference", religion_choices + list("None","Other"), pref.religion) + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + if(choice == "Other") + var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(raw_choice) + pref.religion = sanitize(raw_choice) + else + pref.religion = choice + return TOPIC_REFRESH + + else if(href_list["set_medical_records"]) + var/new_medical = strip_html_simple(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(new_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user)) + pref.med_record = new_medical + return TOPIC_REFRESH + + else if(href_list["set_general_records"]) + var/new_general = strip_html_simple(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(new_general && !jobban_isbanned(user, "Records") && CanUseTopic(user)) + pref.gen_record = new_general + return TOPIC_REFRESH + + else if(href_list["set_security_records"]) + var/sec_medical = strip_html_simple(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(sec_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user)) + pref.sec_record = sec_medical + return TOPIC_REFRESH + + else if(href_list["reset_medrecord"]) + var/resetmed_choice = tgui_alert(usr, "Wipe your Medical Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) + if(resetmed_choice == "Yes") + pref.med_record = null + return TOPIC_REFRESH + + else if(href_list["reset_emprecord"]) + var/resetemp_choice = tgui_alert(usr, "Wipe your Employment Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) + if(resetemp_choice == "Yes") + pref.gen_record = null + return TOPIC_REFRESH + + else if(href_list["reset_secrecord"]) + var/resetsec_choice = tgui_alert(usr, "Wipe your Security Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No")) + if(resetsec_choice == "Yes") + pref.sec_record = null + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index 20ab615e78..76af38f5dc 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -1,154 +1,154 @@ -/datum/category_item/player_setup_item/general/flavor - name = "Flavor" - sort_order = 6 - -/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S) - S["flavor_texts_general"] >> pref.flavor_texts["general"] - S["flavor_texts_head"] >> pref.flavor_texts["head"] - S["flavor_texts_face"] >> pref.flavor_texts["face"] - S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"] - S["flavor_texts_torso"] >> pref.flavor_texts["torso"] - S["flavor_texts_arms"] >> pref.flavor_texts["arms"] - S["flavor_texts_hands"] >> pref.flavor_texts["hands"] - S["flavor_texts_legs"] >> pref.flavor_texts["legs"] - S["flavor_texts_feet"] >> pref.flavor_texts["feet"] - S["custom_link"] >> pref.custom_link - //Flavour text for robots. - S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"] - for(var/module in robot_module_types) - S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module] - -/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S) - S["flavor_texts_general"] << pref.flavor_texts["general"] - S["flavor_texts_head"] << pref.flavor_texts["head"] - S["flavor_texts_face"] << pref.flavor_texts["face"] - S["flavor_texts_eyes"] << pref.flavor_texts["eyes"] - S["flavor_texts_torso"] << pref.flavor_texts["torso"] - S["flavor_texts_arms"] << pref.flavor_texts["arms"] - S["flavor_texts_hands"] << pref.flavor_texts["hands"] - S["flavor_texts_legs"] << pref.flavor_texts["legs"] - S["flavor_texts_feet"] << pref.flavor_texts["feet"] - S["custom_link"] << pref.custom_link - - S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"] - for(var/module in robot_module_types) - S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module] - -/datum/category_item/player_setup_item/general/flavor/sanitize_character() - return - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character) - character.flavor_texts["general"] = pref.flavor_texts["general"] - character.flavor_texts["head"] = pref.flavor_texts["head"] - character.flavor_texts["face"] = pref.flavor_texts["face"] - character.flavor_texts["eyes"] = pref.flavor_texts["eyes"] - character.flavor_texts["torso"] = pref.flavor_texts["torso"] - character.flavor_texts["arms"] = pref.flavor_texts["arms"] - character.flavor_texts["hands"] = pref.flavor_texts["hands"] - character.flavor_texts["legs"] = pref.flavor_texts["legs"] - character.flavor_texts["feet"] = pref.flavor_texts["feet"] - character.ooc_notes = pref.metadata //VOREStation Add - character.ooc_notes_likes = pref.metadata_likes - character.ooc_notes_dislikes = pref.metadata_dislikes - character.custom_link = pref.custom_link - -/datum/category_item/player_setup_item/general/flavor/content(var/mob/user) - . += "Flavor:
                    " - . += "Set Flavor Text
                    " - . += "Set Robot Flavor Text
                    " - . += "Set Custom Link
                    " - -/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["flavor_text"]) - switch(href_list["flavor_text"]) - if("open") - if("general") - var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes - if(CanUseTopic(user) && msg) - pref.flavor_texts[href_list["flavor_text"]] = msg - else - var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) - if(CanUseTopic(user) && msg) - pref.flavor_texts[href_list["flavor_text"]] = msg - SetFlavorText(user) - return TOPIC_HANDLED - - else if(href_list["flavour_text_robot"]) - switch(href_list["flavour_text_robot"]) - if("open") - if("Default") - var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE)) - if(CanUseTopic(user) && msg) - pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg - else - var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE)) - if(CanUseTopic(user) && msg) - pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg - SetFlavourTextRobot(user) - return TOPIC_HANDLED - else if(href_list["custom_link"]) - var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE)) - if(new_link && CanUseTopic(usr)) - if(length(new_link) > 100) - to_chat(usr, "Your entry is too long, it must be 100 characters or less.") - return - pref.custom_link = new_link - log_admin("[usr]/[usr.ckey] set their custom link to [pref.custom_link]") - - return ..() - -/datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user) - var/HTML = "" - HTML += "
                    " - HTML += "Set Flavor Text
                    " - HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like.
                    " - HTML += "
                    " - HTML += "General: " - HTML += TextPreview(pref.flavor_texts["general"]) - HTML += "
                    " - HTML += "Head: " - HTML += TextPreview(pref.flavor_texts["head"]) - HTML += "
                    " - HTML += "Face: " - HTML += TextPreview(pref.flavor_texts["face"]) - HTML += "
                    " - HTML += "Eyes: " - HTML += TextPreview(pref.flavor_texts["eyes"]) - HTML += "
                    " - HTML += "Body: " - HTML += TextPreview(pref.flavor_texts["torso"]) - HTML += "
                    " - HTML += "Arms: " - HTML += TextPreview(pref.flavor_texts["arms"]) - HTML += "
                    " - HTML += "Hands: " - HTML += TextPreview(pref.flavor_texts["hands"]) - HTML += "
                    " - HTML += "Legs: " - HTML += TextPreview(pref.flavor_texts["legs"]) - HTML += "
                    " - HTML += "Feet: " - HTML += TextPreview(pref.flavor_texts["feet"]) - HTML += "
                    " - HTML += "
                    " - HTML += "" - user << browse(HTML, "window=flavor_text;size=430x300") - return - -/datum/category_item/player_setup_item/general/flavor/proc/SetFlavourTextRobot(mob/user) - var/HTML = "" - HTML += "
                    " - HTML += "Set Robot Flavour Text
                    " - HTML += "
                    " - HTML += "Default: " - HTML += TextPreview(pref.flavour_texts_robot["Default"]) - HTML += "
                    " - for(var/module in robot_module_types) - HTML += "[module]: " - HTML += TextPreview(pref.flavour_texts_robot[module]) - HTML += "
                    " - HTML += "
                    " - HTML += "" - user << browse(HTML, "window=flavour_text_robot;size=430x300") - return +/datum/category_item/player_setup_item/general/flavor + name = "Flavor" + sort_order = 6 + +/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S) + S["flavor_texts_general"] >> pref.flavor_texts["general"] + S["flavor_texts_head"] >> pref.flavor_texts["head"] + S["flavor_texts_face"] >> pref.flavor_texts["face"] + S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"] + S["flavor_texts_torso"] >> pref.flavor_texts["torso"] + S["flavor_texts_arms"] >> pref.flavor_texts["arms"] + S["flavor_texts_hands"] >> pref.flavor_texts["hands"] + S["flavor_texts_legs"] >> pref.flavor_texts["legs"] + S["flavor_texts_feet"] >> pref.flavor_texts["feet"] + S["custom_link"] >> pref.custom_link + //Flavour text for robots. + S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"] + for(var/module in robot_module_types) + S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module] + +/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S) + S["flavor_texts_general"] << pref.flavor_texts["general"] + S["flavor_texts_head"] << pref.flavor_texts["head"] + S["flavor_texts_face"] << pref.flavor_texts["face"] + S["flavor_texts_eyes"] << pref.flavor_texts["eyes"] + S["flavor_texts_torso"] << pref.flavor_texts["torso"] + S["flavor_texts_arms"] << pref.flavor_texts["arms"] + S["flavor_texts_hands"] << pref.flavor_texts["hands"] + S["flavor_texts_legs"] << pref.flavor_texts["legs"] + S["flavor_texts_feet"] << pref.flavor_texts["feet"] + S["custom_link"] << pref.custom_link + + S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"] + for(var/module in robot_module_types) + S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module] + +/datum/category_item/player_setup_item/general/flavor/sanitize_character() + return + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character) + character.flavor_texts["general"] = pref.flavor_texts["general"] + character.flavor_texts["head"] = pref.flavor_texts["head"] + character.flavor_texts["face"] = pref.flavor_texts["face"] + character.flavor_texts["eyes"] = pref.flavor_texts["eyes"] + character.flavor_texts["torso"] = pref.flavor_texts["torso"] + character.flavor_texts["arms"] = pref.flavor_texts["arms"] + character.flavor_texts["hands"] = pref.flavor_texts["hands"] + character.flavor_texts["legs"] = pref.flavor_texts["legs"] + character.flavor_texts["feet"] = pref.flavor_texts["feet"] + character.ooc_notes = pref.metadata //VOREStation Add + character.ooc_notes_likes = pref.metadata_likes + character.ooc_notes_dislikes = pref.metadata_dislikes + character.custom_link = pref.custom_link + +/datum/category_item/player_setup_item/general/flavor/content(var/mob/user) + . += "Flavor:
                    " + . += "Set Flavor Text
                    " + . += "Set Robot Flavor Text
                    " + . += "Set Custom Link
                    " + +/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user) + if(href_list["flavor_text"]) + switch(href_list["flavor_text"]) + if("open") + if("general") + var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes + if(CanUseTopic(user) && msg) + pref.flavor_texts[href_list["flavor_text"]] = msg + else + var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) + if(CanUseTopic(user) && msg) + pref.flavor_texts[href_list["flavor_text"]] = msg + SetFlavorText(user) + return TOPIC_HANDLED + + else if(href_list["flavour_text_robot"]) + switch(href_list["flavour_text_robot"]) + if("open") + if("Default") + var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE)) + if(CanUseTopic(user) && msg) + pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg + else + var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE)) + if(CanUseTopic(user) && msg) + pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg + SetFlavourTextRobot(user) + return TOPIC_HANDLED + else if(href_list["custom_link"]) + var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE)) + if(new_link && CanUseTopic(usr)) + if(length(new_link) > 100) + to_chat(usr, "Your entry is too long, it must be 100 characters or less.") + return + pref.custom_link = new_link + log_admin("[usr]/[usr.ckey] set their custom link to [pref.custom_link]") + + return ..() + +/datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user) + var/HTML = "" + HTML += "
                    " + HTML += "Set Flavor Text
                    " + HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like.
                    " + HTML += "
                    " + HTML += "General: " + HTML += TextPreview(pref.flavor_texts["general"]) + HTML += "
                    " + HTML += "Head: " + HTML += TextPreview(pref.flavor_texts["head"]) + HTML += "
                    " + HTML += "Face: " + HTML += TextPreview(pref.flavor_texts["face"]) + HTML += "
                    " + HTML += "Eyes: " + HTML += TextPreview(pref.flavor_texts["eyes"]) + HTML += "
                    " + HTML += "Body: " + HTML += TextPreview(pref.flavor_texts["torso"]) + HTML += "
                    " + HTML += "Arms: " + HTML += TextPreview(pref.flavor_texts["arms"]) + HTML += "
                    " + HTML += "Hands: " + HTML += TextPreview(pref.flavor_texts["hands"]) + HTML += "
                    " + HTML += "Legs: " + HTML += TextPreview(pref.flavor_texts["legs"]) + HTML += "
                    " + HTML += "Feet: " + HTML += TextPreview(pref.flavor_texts["feet"]) + HTML += "
                    " + HTML += "
                    " + HTML += "" + user << browse(HTML, "window=flavor_text;size=430x300") + return + +/datum/category_item/player_setup_item/general/flavor/proc/SetFlavourTextRobot(mob/user) + var/HTML = "" + HTML += "
                    " + HTML += "Set Robot Flavour Text
                    " + HTML += "
                    " + HTML += "Default: " + HTML += TextPreview(pref.flavour_texts_robot["Default"]) + HTML += "
                    " + for(var/module in robot_module_types) + HTML += "[module]: " + HTML += TextPreview(pref.flavour_texts_robot[module]) + HTML += "
                    " + HTML += "
                    " + HTML += "" + user << browse(HTML, "window=flavour_text_robot;size=430x300") + return diff --git a/code/modules/client/preference_setup/loadout/loadout_head_ch.dm b/code/modules/client/preference_setup/loadout/loadout_head_ch.dm index 771b02dd01..f6d0b63f52 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head_ch.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head_ch.dm @@ -1,31 +1,31 @@ -/datum/gear/head/bearpelt - display_name = "brown bear pelt" - path = /obj/item/clothing/head/pelt - -/datum/gear/head/bearpeltblack - display_name = "black bear pelt" - path = /obj/item/clothing/head/pelt/black - -/datum/gear/head/wolfpelt - display_name = "brown wolf pelt" - path = /obj/item/clothing/head/pelt/wolfpelt - -/datum/gear/head/wolfpeltblack - display_name = "black wolf pelt" - path = /obj/item/clothing/head/pelt/wolfpeltblack - -/datum/gear/head/tigerpelt - display_name = "shiny tiger pelt" - path = /obj/item/clothing/head/pelt/tigerpelt - -/datum/gear/head/tigerpeltsnow - display_name = "snow tiger pelt" - path = /obj/item/clothing/head/pelt/tigerpeltsnow - -/datum/gear/head/tigerpeltpink - display_name = "pink tiger pelt" - path = /obj/item/clothing/head/pelt/tigerpeltpink - -/datum/gear/head/marisa - display_name = "Witch hat" +/datum/gear/head/bearpelt + display_name = "brown bear pelt" + path = /obj/item/clothing/head/pelt + +/datum/gear/head/bearpeltblack + display_name = "black bear pelt" + path = /obj/item/clothing/head/pelt/black + +/datum/gear/head/wolfpelt + display_name = "brown wolf pelt" + path = /obj/item/clothing/head/pelt/wolfpelt + +/datum/gear/head/wolfpeltblack + display_name = "black wolf pelt" + path = /obj/item/clothing/head/pelt/wolfpeltblack + +/datum/gear/head/tigerpelt + display_name = "shiny tiger pelt" + path = /obj/item/clothing/head/pelt/tigerpelt + +/datum/gear/head/tigerpeltsnow + display_name = "snow tiger pelt" + path = /obj/item/clothing/head/pelt/tigerpeltsnow + +/datum/gear/head/tigerpeltpink + display_name = "pink tiger pelt" + path = /obj/item/clothing/head/pelt/tigerpeltpink + +/datum/gear/head/marisa + display_name = "Witch hat" path = /obj/item/clothing/head/wizard/marisa \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_ch.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_ch.dm index 22d1728900..92b602a3ca 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform_ch.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform_ch.dm @@ -1,115 +1,115 @@ -/datum/gear/uniform/job_sec/flightsuit - display_name = "security flight suit" - path = /obj/item/clothing/under/sec_flight_suit - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - - -// Trekie things -//TOS -/datum/gear/uniform/job_trek/sec/tos - display_name = "TOS uniform, sec" - path = /obj/item/clothing/under/rank/trek/sec - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - -//TNG -/datum/gear/uniform/job_trek/sec/tng - display_name = "TNG uniform, sec" - path = /obj/item/clothing/under/rank/trek/sec/next - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - -//VOY -/datum/gear/uniform/job_trek/sec/voy - display_name = "VOY uniform, sec" - path = /obj/item/clothing/under/rank/trek/sec/voy - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - -//DS9 -/datum/gear/uniform/job_trek/sec/ds9 - display_name = "DS9 uniform, sec" - path = /obj/item/clothing/under/rank/trek/sec/ds9 - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - -//ENT -/datum/gear/uniform/job_trek/sec/ent - display_name = "ENT uniform, sec" - path = /obj/item/clothing/under/rank/trek/sec/ent - allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") - - -//Nullsuits (Zero Suits) -/datum/gear/uniform/job_nullsuit/civ - display_name = "nullsuit, civilian" - path = /obj/item/clothing/under/rank/nullsuit/civ - -/datum/gear/uniform/job_nullsuit/cmd - display_name = "nullsuit, cmd" - path = /obj/item/clothing/under/rank/nullsuit/cmd - allowed_roles = list("Head of Security","Site Manager","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Blueshield Guard") - -/datum/gear/uniform/job_nullsuit/sec - display_name = "nullsuit, sec" - path = /obj/item/clothing/under/rank/nullsuit/sec - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer","Blueshield Guard") - -/datum/gear/uniform/job_nullsuit/sec/hos - display_name = "nullsuit, head of security" - path = /obj/item/clothing/under/rank/nullsuit/sec/hos - allowed_roles = list("Head of Security") - -/datum/gear/uniform/job_nullsuit/med - display_name = "nullsuit, med" - path = /obj/item/clothing/under/rank/nullsuit/med - allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic") - -/datum/gear/uniform/job_nullsuit/med/cmo - display_name = "nullsuit, chief medical officer" - path = /obj/item/clothing/under/rank/nullsuit/med/cmo - allowed_roles = list("Chief Medical Officer") - -/datum/gear/uniform/job_nullsuit/eng - display_name = "nullsuit, eng" - path = /obj/item/clothing/under/rank/nullsuit/eng - allowed_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer") - -/datum/gear/uniform/job_nullsuit/eng/ce - display_name = "nullsuit, chief engineer" - path = /obj/item/clothing/under/rank/nullsuit/eng/ce - allowed_roles = list("Chief Engineer") - -/datum/gear/uniform/job_nullsuit/sci - display_name = "nullsuit, sci" - path = /obj/item/clothing/under/rank/nullsuit/sci - allowed_roles = list("Research Director", "Scientist", "Roboticist", "Xenobiologist", "Pathfinder", "Explorer") - -/datum/gear/uniform/job_nullsuit/sci/rd - display_name = "nullsuit, research director" - path = /obj/item/clothing/under/rank/nullsuit/sci/rd - allowed_roles = list("Research Director") - -/datum/gear/uniform/job_nullsuit/cargo - display_name = "nullsuit, cargo" - path = /obj/item/clothing/under/rank/nullsuit/cargo - allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel") - - -//VR Suit -/datum/gear/uniform/vrsuit //Pathname of this particular item in the menu. - display_name = "vr suit" //The name of the suit as shown in the loadout menu - path = /obj/item/clothing/under/vrsuit //Pathname of the suit which is found in custom_clothes_ch.dm - -// Cargo shorts. The full-of-pockets kind, not the department -/datum/gear/uniform/cshorts - display_name = "cargo shorts" - path = /obj/item/clothing/under/shorts/cshorts/khaki - -/datum/gear/uniform/cshorts/New() - ..() - var/list/cargo_shorts = list( - "Olive cargo shorts" = /obj/item/clothing/under/shorts/cshorts/olive, - "Khaki cargo shorts" = /obj/item/clothing/under/shorts/cshorts/khaki - ) - gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cargo_shorts)) - -/datum/gear/uniform/tacticool - display_name = "Tacticool turtleneck" +/datum/gear/uniform/job_sec/flightsuit + display_name = "security flight suit" + path = /obj/item/clothing/under/sec_flight_suit + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + + +// Trekie things +//TOS +/datum/gear/uniform/job_trek/sec/tos + display_name = "TOS uniform, sec" + path = /obj/item/clothing/under/rank/trek/sec + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + +//TNG +/datum/gear/uniform/job_trek/sec/tng + display_name = "TNG uniform, sec" + path = /obj/item/clothing/under/rank/trek/sec/next + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + +//VOY +/datum/gear/uniform/job_trek/sec/voy + display_name = "VOY uniform, sec" + path = /obj/item/clothing/under/rank/trek/sec/voy + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + +//DS9 +/datum/gear/uniform/job_trek/sec/ds9 + display_name = "DS9 uniform, sec" + path = /obj/item/clothing/under/rank/trek/sec/ds9 + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + +//ENT +/datum/gear/uniform/job_trek/sec/ent + display_name = "ENT uniform, sec" + path = /obj/item/clothing/under/rank/trek/sec/ent + allowed_roles = list("Warden","Detective","Security Officer","Head of Security","Blueshield Guard") + + +//Nullsuits (Zero Suits) +/datum/gear/uniform/job_nullsuit/civ + display_name = "nullsuit, civilian" + path = /obj/item/clothing/under/rank/nullsuit/civ + +/datum/gear/uniform/job_nullsuit/cmd + display_name = "nullsuit, cmd" + path = /obj/item/clothing/under/rank/nullsuit/cmd + allowed_roles = list("Head of Security","Site Manager","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Blueshield Guard") + +/datum/gear/uniform/job_nullsuit/sec + display_name = "nullsuit, sec" + path = /obj/item/clothing/under/rank/nullsuit/sec + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer","Blueshield Guard") + +/datum/gear/uniform/job_nullsuit/sec/hos + display_name = "nullsuit, head of security" + path = /obj/item/clothing/under/rank/nullsuit/sec/hos + allowed_roles = list("Head of Security") + +/datum/gear/uniform/job_nullsuit/med + display_name = "nullsuit, med" + path = /obj/item/clothing/under/rank/nullsuit/med + allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic") + +/datum/gear/uniform/job_nullsuit/med/cmo + display_name = "nullsuit, chief medical officer" + path = /obj/item/clothing/under/rank/nullsuit/med/cmo + allowed_roles = list("Chief Medical Officer") + +/datum/gear/uniform/job_nullsuit/eng + display_name = "nullsuit, eng" + path = /obj/item/clothing/under/rank/nullsuit/eng + allowed_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer") + +/datum/gear/uniform/job_nullsuit/eng/ce + display_name = "nullsuit, chief engineer" + path = /obj/item/clothing/under/rank/nullsuit/eng/ce + allowed_roles = list("Chief Engineer") + +/datum/gear/uniform/job_nullsuit/sci + display_name = "nullsuit, sci" + path = /obj/item/clothing/under/rank/nullsuit/sci + allowed_roles = list("Research Director", "Scientist", "Roboticist", "Xenobiologist", "Pathfinder", "Explorer") + +/datum/gear/uniform/job_nullsuit/sci/rd + display_name = "nullsuit, research director" + path = /obj/item/clothing/under/rank/nullsuit/sci/rd + allowed_roles = list("Research Director") + +/datum/gear/uniform/job_nullsuit/cargo + display_name = "nullsuit, cargo" + path = /obj/item/clothing/under/rank/nullsuit/cargo + allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel") + + +//VR Suit +/datum/gear/uniform/vrsuit //Pathname of this particular item in the menu. + display_name = "vr suit" //The name of the suit as shown in the loadout menu + path = /obj/item/clothing/under/vrsuit //Pathname of the suit which is found in custom_clothes_ch.dm + +// Cargo shorts. The full-of-pockets kind, not the department +/datum/gear/uniform/cshorts + display_name = "cargo shorts" + path = /obj/item/clothing/under/shorts/cshorts/khaki + +/datum/gear/uniform/cshorts/New() + ..() + var/list/cargo_shorts = list( + "Olive cargo shorts" = /obj/item/clothing/under/shorts/cshorts/olive, + "Khaki cargo shorts" = /obj/item/clothing/under/shorts/cshorts/khaki + ) + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cargo_shorts)) + +/datum/gear/uniform/tacticool + display_name = "Tacticool turtleneck" path = /obj/item/clothing/under/syndicate/tacticool/loadout \ No newline at end of file diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index 00fb15ec90..645314ab59 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -1,89 +1,89 @@ -/datum/category_item/player_setup_item/skills - name = "Skills" - sort_order = 1 - -/datum/category_item/player_setup_item/skills/load_character(var/savefile/S) - S["skills"] >> pref.skills - S["used_skillpoints"] >> pref.used_skillpoints - S["skill_specialization"] >> pref.skill_specialization - -/datum/category_item/player_setup_item/skills/save_character(var/savefile/S) - S["skills"] << pref.skills - S["used_skillpoints"] << pref.used_skillpoints - S["skill_specialization"] << pref.skill_specialization - -/datum/category_item/player_setup_item/skills/sanitize_character() - if(SKILLS == null) setup_skills() - if(!pref.skills) pref.skills = list() - if(!pref.skills.len) pref.ZeroSkills() - if(pref.used_skillpoints < 0) pref.used_skillpoints = 0 - -// Moved from /datum/preferences/proc/copy_to() -/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character) - character.skills = pref.skills - character.used_skillpoints = pref.used_skillpoints - -/datum/category_item/player_setup_item/skills/content() - . = list() - . += "Select your Skills
                    " - . += "Current skill level: [pref.GetSkillClass(pref.used_skillpoints)] ([pref.used_skillpoints])
                    " - . += "Use preconfigured skillset
                    " - . += "" - for(var/V in SKILLS) - . += "" - for(var/datum/skill/S in SKILLS[V]) - var/level = pref.skills[S.ID] - . += "" - . += "" - . += skill_to_button(S, "Untrained", level, SKILL_NONE) - // secondary skills don't have an amateur level - if(S.secondary) - . += "" - else - . += skill_to_button(S, "Amateur", level, SKILL_BASIC) - . += skill_to_button(S, "Trained", level, SKILL_ADEPT) - . += skill_to_button(S, "Professional", level, SKILL_EXPERT) - . += "" - . += "
                    [V]" - . += "
                    [S.name]
                    " - . = jointext(.,null) - -/datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level) - if(current_level == selection_level) - return "[level_name]" - return "[level_name]" - -/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user) - if(href_list["skillinfo"]) - var/datum/skill/S = locate(href_list["skillinfo"]) - var/HTML = "[S.name]
                    [S.desc]" - user << browse(HTML, "window=\ref[user]skillinfo") - return TOPIC_HANDLED - - else if(href_list["setskill"]) - var/datum/skill/S = locate(href_list["setskill"]) - var/value = text2num(href_list["newvalue"]) - pref.skills[S.ID] = value - pref.CalculateSkillPoints() - return TOPIC_REFRESH - - else if(href_list["preconfigured"]) - var/selected = tgui_input_list(user, "Select a skillset", "Skillset", SKILL_PRE) - if(!selected || !CanUseTopic(user)) return - - pref.ZeroSkills(1) - for(var/V in SKILL_PRE[selected]) - if(V == "field") - pref.skill_specialization = SKILL_PRE[selected]["field"] - continue - pref.skills[V] = SKILL_PRE[selected][V] - pref.CalculateSkillPoints() - - return TOPIC_REFRESH - - else if(href_list["setspecialization"]) - pref.skill_specialization = href_list["setspecialization"] - pref.CalculateSkillPoints() - return TOPIC_REFRESH - - return ..() +/datum/category_item/player_setup_item/skills + name = "Skills" + sort_order = 1 + +/datum/category_item/player_setup_item/skills/load_character(var/savefile/S) + S["skills"] >> pref.skills + S["used_skillpoints"] >> pref.used_skillpoints + S["skill_specialization"] >> pref.skill_specialization + +/datum/category_item/player_setup_item/skills/save_character(var/savefile/S) + S["skills"] << pref.skills + S["used_skillpoints"] << pref.used_skillpoints + S["skill_specialization"] << pref.skill_specialization + +/datum/category_item/player_setup_item/skills/sanitize_character() + if(SKILLS == null) setup_skills() + if(!pref.skills) pref.skills = list() + if(!pref.skills.len) pref.ZeroSkills() + if(pref.used_skillpoints < 0) pref.used_skillpoints = 0 + +// Moved from /datum/preferences/proc/copy_to() +/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character) + character.skills = pref.skills + character.used_skillpoints = pref.used_skillpoints + +/datum/category_item/player_setup_item/skills/content() + . = list() + . += "Select your Skills
                    " + . += "Current skill level: [pref.GetSkillClass(pref.used_skillpoints)] ([pref.used_skillpoints])
                    " + . += "Use preconfigured skillset
                    " + . += "" + for(var/V in SKILLS) + . += "" + for(var/datum/skill/S in SKILLS[V]) + var/level = pref.skills[S.ID] + . += "" + . += "" + . += skill_to_button(S, "Untrained", level, SKILL_NONE) + // secondary skills don't have an amateur level + if(S.secondary) + . += "" + else + . += skill_to_button(S, "Amateur", level, SKILL_BASIC) + . += skill_to_button(S, "Trained", level, SKILL_ADEPT) + . += skill_to_button(S, "Professional", level, SKILL_EXPERT) + . += "" + . += "
                    [V]" + . += "
                    [S.name]
                    " + . = jointext(.,null) + +/datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level) + if(current_level == selection_level) + return "[level_name]" + return "[level_name]" + +/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user) + if(href_list["skillinfo"]) + var/datum/skill/S = locate(href_list["skillinfo"]) + var/HTML = "[S.name]
                    [S.desc]" + user << browse(HTML, "window=\ref[user]skillinfo") + return TOPIC_HANDLED + + else if(href_list["setskill"]) + var/datum/skill/S = locate(href_list["setskill"]) + var/value = text2num(href_list["newvalue"]) + pref.skills[S.ID] = value + pref.CalculateSkillPoints() + return TOPIC_REFRESH + + else if(href_list["preconfigured"]) + var/selected = tgui_input_list(user, "Select a skillset", "Skillset", SKILL_PRE) + if(!selected || !CanUseTopic(user)) return + + pref.ZeroSkills(1) + for(var/V in SKILL_PRE[selected]) + if(V == "field") + pref.skill_specialization = SKILL_PRE[selected]["field"] + continue + pref.skills[V] = SKILL_PRE[selected][V] + pref.CalculateSkillPoints() + + return TOPIC_REFRESH + + else if(href_list["setspecialization"]) + pref.skill_specialization = href_list["setspecialization"] + pref.CalculateSkillPoints() + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 47b846efc1..e98e7de352 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,121 +1,121 @@ -#define SAVEFILE_VERSION_MIN 8 -#define SAVEFILE_VERSION_MAX 11 - -//handles converting savefiles to new formats -//MAKE SURE YOU KEEP THIS UP TO DATE! -//If the sanity checks are capable of handling any issues. Only increase SAVEFILE_VERSION_MAX, -//this will mean that savefile_version will still be over SAVEFILE_VERSION_MIN, meaning -//this savefile update doesn't run everytime we load from the savefile. -//This is mainly for format changes, such as the bitflags in toggles changing order or something. -//if a file can't be updated, return 0 to delete it and start again -//if a file was updated, return 1 -/datum/preferences/proc/savefile_update() - if(savefile_version < 8) //lazily delete everything + additional files so they can be saved in the new format - for(var/ckey in preferences_datums) - var/datum/preferences/D = preferences_datums[ckey] - if(D == src) - var/delpath = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/" - if(delpath && fexists(delpath)) - fdel(delpath) - break - return 0 - - if(savefile_version == SAVEFILE_VERSION_MAX) //update successful. - save_preferences() - save_character() - return 1 - return 0 - -/datum/preferences/proc/load_path(ckey,filename="preferences.sav") - if(!ckey) return - path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/[filename]" - savefile_version = SAVEFILE_VERSION_MAX - -/datum/preferences/proc/load_preferences() - if(!path) return 0 - if(!fexists(path)) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/" - - S["version"] >> savefile_version - //Conversion - if(!savefile_version || !isnum(savefile_version) || savefile_version < SAVEFILE_VERSION_MIN || savefile_version > SAVEFILE_VERSION_MAX) - if(!savefile_update()) //handles updates - savefile_version = SAVEFILE_VERSION_MAX - save_preferences() - save_character() - return 0 - - player_setup.load_preferences(S) - return 1 - -/datum/preferences/proc/save_preferences() - if(!path) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/" - - S["version"] << savefile_version - player_setup.save_preferences(S) - return 1 - -/datum/preferences/proc/load_character(slot) - if(!path) return 0 - if(!fexists(path)) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/" - if(!slot) slot = default_slot - if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes. - slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - S["default_slot"] << slot - else - S["default_slot"] << default_slot - - if(slot != SAVE_RESET) - S.cd = "/character[slot]" - player_setup.load_character(S) - else - player_setup.load_character(S) - S.cd = "/character[default_slot]" - player_setup.save_character(S) - - clear_character_previews() // VOREStation Edit - return 1 - -/datum/preferences/proc/save_character() - if(!path) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/character[default_slot]" - - player_setup.save_character(S) - return 1 - -/datum/preferences/proc/overwrite_character(slot) - if(!path) return 0 - if(!fexists(path)) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - if(!slot) slot = default_slot - if(slot != SAVE_RESET) - slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - nif_path = nif_durability = nif_savedata = null //VOREStation Add - Don't copy NIF - S["default_slot"] << slot - - else - S["default_slot"] << default_slot - - return 1 - -/datum/preferences/proc/sanitize_preferences() - player_setup.sanitize_setup() - return 1 - -#undef SAVEFILE_VERSION_MAX -#undef SAVEFILE_VERSION_MIN +#define SAVEFILE_VERSION_MIN 8 +#define SAVEFILE_VERSION_MAX 11 + +//handles converting savefiles to new formats +//MAKE SURE YOU KEEP THIS UP TO DATE! +//If the sanity checks are capable of handling any issues. Only increase SAVEFILE_VERSION_MAX, +//this will mean that savefile_version will still be over SAVEFILE_VERSION_MIN, meaning +//this savefile update doesn't run everytime we load from the savefile. +//This is mainly for format changes, such as the bitflags in toggles changing order or something. +//if a file can't be updated, return 0 to delete it and start again +//if a file was updated, return 1 +/datum/preferences/proc/savefile_update() + if(savefile_version < 8) //lazily delete everything + additional files so they can be saved in the new format + for(var/ckey in preferences_datums) + var/datum/preferences/D = preferences_datums[ckey] + if(D == src) + var/delpath = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/" + if(delpath && fexists(delpath)) + fdel(delpath) + break + return 0 + + if(savefile_version == SAVEFILE_VERSION_MAX) //update successful. + save_preferences() + save_character() + return 1 + return 0 + +/datum/preferences/proc/load_path(ckey,filename="preferences.sav") + if(!ckey) return + path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/[filename]" + savefile_version = SAVEFILE_VERSION_MAX + +/datum/preferences/proc/load_preferences() + if(!path) return 0 + if(!fexists(path)) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + S.cd = "/" + + S["version"] >> savefile_version + //Conversion + if(!savefile_version || !isnum(savefile_version) || savefile_version < SAVEFILE_VERSION_MIN || savefile_version > SAVEFILE_VERSION_MAX) + if(!savefile_update()) //handles updates + savefile_version = SAVEFILE_VERSION_MAX + save_preferences() + save_character() + return 0 + + player_setup.load_preferences(S) + return 1 + +/datum/preferences/proc/save_preferences() + if(!path) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + S.cd = "/" + + S["version"] << savefile_version + player_setup.save_preferences(S) + return 1 + +/datum/preferences/proc/load_character(slot) + if(!path) return 0 + if(!fexists(path)) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + S.cd = "/" + if(!slot) slot = default_slot + if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes. + slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) + if(slot != default_slot) + default_slot = slot + S["default_slot"] << slot + else + S["default_slot"] << default_slot + + if(slot != SAVE_RESET) + S.cd = "/character[slot]" + player_setup.load_character(S) + else + player_setup.load_character(S) + S.cd = "/character[default_slot]" + player_setup.save_character(S) + + clear_character_previews() // VOREStation Edit + return 1 + +/datum/preferences/proc/save_character() + if(!path) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + S.cd = "/character[default_slot]" + + player_setup.save_character(S) + return 1 + +/datum/preferences/proc/overwrite_character(slot) + if(!path) return 0 + if(!fexists(path)) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + if(!slot) slot = default_slot + if(slot != SAVE_RESET) + slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) + if(slot != default_slot) + default_slot = slot + nif_path = nif_durability = nif_savedata = null //VOREStation Add - Don't copy NIF + S["default_slot"] << slot + + else + S["default_slot"] << default_slot + + return 1 + +/datum/preferences/proc/sanitize_preferences() + player_setup.sanitize_setup() + return 1 + +#undef SAVEFILE_VERSION_MAX +#undef SAVEFILE_VERSION_MIN diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm index 8317d977e3..eb6cc2ffdd 100644 --- a/code/modules/client/ui_style.dm +++ b/code/modules/client/ui_style.dm @@ -1,81 +1,81 @@ - - -/var/all_ui_styles = list( - "Midnight" = 'icons/mob/screen/midnight.dmi', - "Orange" = 'icons/mob/screen/orange.dmi', - "old" = 'icons/mob/screen/old.dmi', - "White" = 'icons/mob/screen/white.dmi', - "old-noborder" = 'icons/mob/screen/old-noborder.dmi', - "minimalist" = 'icons/mob/screen/minimalist.dmi', - "Hologram" = 'icons/mob/screen/holo.dmi' - ) - -/var/all_ui_styles_robot = list( - "Midnight" = 'icons/mob/screen1_robot.dmi', - "Orange" = 'icons/mob/screen1_robot.dmi', - "old" = 'icons/mob/screen1_robot.dmi', - "White" = 'icons/mob/screen1_robot.dmi', - "old-noborder" = 'icons/mob/screen1_robot.dmi', - "minimalist" = 'icons/mob/screen1_robot_minimalist.dmi', - "Hologram" = 'icons/mob/screen1_robot_minimalist.dmi' - ) - -var/global/list/all_tooltip_styles = list( - "Midnight", //Default for everyone is the first one, - "Plasmafire", - "Retro", - "Slimecore", - "Operative", - "Clockwork" - ) - -/proc/ui_style2icon(ui_style) - if(ui_style in all_ui_styles) - return all_ui_styles[ui_style] - return all_ui_styles["White"] - - -/client/verb/change_ui() - set name = "Change UI" - set category = "Preferences" - set desc = "Configure your user interface" - - if(!ishuman(usr)) - if(!isrobot(usr)) - to_chat(usr, "You must be a human or a robot to use this verb.") - return - - var/UI_style_new = tgui_input_list(usr, "Select a style. White is recommended for customization", "UI Style Choice", all_ui_styles) - if(!UI_style_new) return - - var/UI_style_alpha_new = tgui_input_number(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255", null, null, 255, 50) - if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return - - var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null - if(!UI_style_color_new) return - - //update UI - var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons - icons.Add(usr.zone_sel) - icons.Add(usr.gun_setting_icon) - icons.Add(usr.item_use_icon) - icons.Add(usr.gun_move_icon) - icons.Add(usr.radio_use_icon) - - var/icon/ic = all_ui_styles[UI_style_new] - if(isrobot(usr)) - ic = all_ui_styles_robot[UI_style_new] - - for(var/obj/screen/I in icons) - if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue - I.icon = ic - I.color = UI_style_color_new - I.alpha = UI_style_alpha_new - - - if(tgui_alert(usr, "Like it? Save changes?","Save?",list("Yes", "No")) == "Yes") - prefs.UI_style = UI_style_new - prefs.UI_style_alpha = UI_style_alpha_new - prefs.UI_style_color = UI_style_color_new - SScharacter_setup.queue_preferences_save(prefs) - to_chat(usr, "UI was saved") + + +/var/all_ui_styles = list( + "Midnight" = 'icons/mob/screen/midnight.dmi', + "Orange" = 'icons/mob/screen/orange.dmi', + "old" = 'icons/mob/screen/old.dmi', + "White" = 'icons/mob/screen/white.dmi', + "old-noborder" = 'icons/mob/screen/old-noborder.dmi', + "minimalist" = 'icons/mob/screen/minimalist.dmi', + "Hologram" = 'icons/mob/screen/holo.dmi' + ) + +/var/all_ui_styles_robot = list( + "Midnight" = 'icons/mob/screen1_robot.dmi', + "Orange" = 'icons/mob/screen1_robot.dmi', + "old" = 'icons/mob/screen1_robot.dmi', + "White" = 'icons/mob/screen1_robot.dmi', + "old-noborder" = 'icons/mob/screen1_robot.dmi', + "minimalist" = 'icons/mob/screen1_robot_minimalist.dmi', + "Hologram" = 'icons/mob/screen1_robot_minimalist.dmi' + ) + +var/global/list/all_tooltip_styles = list( + "Midnight", //Default for everyone is the first one, + "Plasmafire", + "Retro", + "Slimecore", + "Operative", + "Clockwork" + ) + +/proc/ui_style2icon(ui_style) + if(ui_style in all_ui_styles) + return all_ui_styles[ui_style] + return all_ui_styles["White"] + + +/client/verb/change_ui() + set name = "Change UI" + set category = "Preferences" + set desc = "Configure your user interface" + + if(!ishuman(usr)) + if(!isrobot(usr)) + to_chat(usr, "You must be a human or a robot to use this verb.") + return + + var/UI_style_new = tgui_input_list(usr, "Select a style. White is recommended for customization", "UI Style Choice", all_ui_styles) + if(!UI_style_new) return + + var/UI_style_alpha_new = tgui_input_number(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255", null, null, 255, 50) + if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return + + var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null + if(!UI_style_color_new) return + + //update UI + var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons + icons.Add(usr.zone_sel) + icons.Add(usr.gun_setting_icon) + icons.Add(usr.item_use_icon) + icons.Add(usr.gun_move_icon) + icons.Add(usr.radio_use_icon) + + var/icon/ic = all_ui_styles[UI_style_new] + if(isrobot(usr)) + ic = all_ui_styles_robot[UI_style_new] + + for(var/obj/screen/I in icons) + if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue + I.icon = ic + I.color = UI_style_color_new + I.alpha = UI_style_alpha_new + + + if(tgui_alert(usr, "Like it? Save changes?","Save?",list("Yes", "No")) == "Yes") + prefs.UI_style = UI_style_new + prefs.UI_style_alpha = UI_style_alpha_new + prefs.UI_style_color = UI_style_color_new + SScharacter_setup.queue_preferences_save(prefs) + to_chat(usr, "UI was saved") diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index fb4f491076..e0d3177b52 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -1,43 +1,43 @@ -/obj/item/clothing/glasses/hud - name = "HUD" - desc = "A heads-up display that provides important info in (almost) real time." - flags = 0 //doesn't protect eyes because it's a monocle, duh - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2) - -/obj/item/clothing/glasses/hud/health - name = "Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - icon_state = "healthhud" - item_state_slots = list(slot_r_hand_str = "headset", slot_l_hand_str = "headset") - body_parts_covered = 0 - enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH) - -/obj/item/clothing/glasses/hud/health/prescription - name = "Prescription Health Scanner HUD" - desc = "A medical HUD integrated with a set of prescription glasses" - prescription = 1 - icon_state = "healthhudpresc" - item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") - -/obj/item/clothing/glasses/hud/security - name = "Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." - icon_state = "securityhud" - item_state_slots = list(slot_r_hand_str = "headset", slot_l_hand_str = "headset") - body_parts_covered = 0 - enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM) - -/obj/item/clothing/glasses/hud/security/prescription - name = "Prescription Security HUD" - desc = "A security HUD integrated with a set of prescription glasses" - prescription = 1 - icon_state = "sechudpresc" - item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") - -/obj/item/clothing/glasses/hud/security/jensenshades - name = "Augmented shades" - desc = "Polarized bioneural eyewear, designed to augment your vision." - icon_state = "jensenshades" - item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") - vision_flags = SEE_MOBS - see_invisible = SEE_INVISIBLE_NOLIGHTING +/obj/item/clothing/glasses/hud + name = "HUD" + desc = "A heads-up display that provides important info in (almost) real time." + flags = 0 //doesn't protect eyes because it's a monocle, duh + origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2) + +/obj/item/clothing/glasses/hud/health + name = "Health Scanner HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." + icon_state = "healthhud" + item_state_slots = list(slot_r_hand_str = "headset", slot_l_hand_str = "headset") + body_parts_covered = 0 + enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH) + +/obj/item/clothing/glasses/hud/health/prescription + name = "Prescription Health Scanner HUD" + desc = "A medical HUD integrated with a set of prescription glasses" + prescription = 1 + icon_state = "healthhudpresc" + item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") + +/obj/item/clothing/glasses/hud/security + name = "Security HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." + icon_state = "securityhud" + item_state_slots = list(slot_r_hand_str = "headset", slot_l_hand_str = "headset") + body_parts_covered = 0 + enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM) + +/obj/item/clothing/glasses/hud/security/prescription + name = "Prescription Security HUD" + desc = "A security HUD integrated with a set of prescription glasses" + prescription = 1 + icon_state = "sechudpresc" + item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") + +/obj/item/clothing/glasses/hud/security/jensenshades + name = "Augmented shades" + desc = "Polarized bioneural eyewear, designed to augment your vision." + icon_state = "jensenshades" + item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") + vision_flags = SEE_MOBS + see_invisible = SEE_INVISIBLE_NOLIGHTING diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 3ed26e4126..b818be2dba 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -1,31 +1,31 @@ -/obj/item/clothing/gloves/boxing - name = "boxing gloves" - desc = "Because you really needed another excuse to punch your crewmates." - icon_state = "boxing" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - -/* -/obj/item/clothing/gloves/boxing/attackby(obj/item/weapon/W, mob/user) - if(W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/weapon/surgical/scalpel)) - to_chat(user, "That won't work.") //Nope - return - ..() -*/ - -/obj/item/clothing/gloves/boxing/green - icon_state = "boxinggreen" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - -/obj/item/clothing/gloves/boxing/blue - icon_state = "boxingblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/gloves/boxing/yellow - icon_state = "boxingyellow" - item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow") - -/obj/item/clothing/gloves/white - name = "white gloves" - desc = "These look pretty fancy." - icon_state = "latex" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") +/obj/item/clothing/gloves/boxing + name = "boxing gloves" + desc = "Because you really needed another excuse to punch your crewmates." + icon_state = "boxing" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + +/* +/obj/item/clothing/gloves/boxing/attackby(obj/item/weapon/W, mob/user) + if(W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/weapon/surgical/scalpel)) + to_chat(user, "That won't work.") //Nope + return + ..() +*/ + +/obj/item/clothing/gloves/boxing/green + icon_state = "boxinggreen" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + +/obj/item/clothing/gloves/boxing/blue + icon_state = "boxingblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/gloves/boxing/yellow + icon_state = "boxingyellow" + item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow") + +/obj/item/clothing/gloves/white + name = "white gloves" + desc = "These look pretty fancy." + icon_state = "latex" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index de42b7092e..6ea23547a0 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -1,169 +1,169 @@ - - -/obj/item/clothing/gloves/yellow - desc = "These gloves will protect the wearer from electric shock." - name = "insulated gloves" - icon_state = "yellow" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap - desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly." - name = "budget insulated gloves" - icon_state = "yellow" - siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize() - permeability_coefficient = 0.05 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/clothing/gloves/fyellow/Initialize() - . = ..() - //Picks a value between 0 and 1.25, in 5% increments // VOREStation edit - var/shock_pick = rand(0,15) // VOREStation Edit - siemens_coefficient = shock_pick * 0.05 - -/obj/item/clothing/gloves/black - desc = "These work gloves are thick and fire-resistant." - name = "black gloves" - icon_state = "black" - permeability_coefficient = 0.05 - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/orange - name = "orange gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "orange" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/red - name = "red gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "red" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/rainbow - name = "rainbow gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "rainbow" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/blue - name = "blue gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "blue" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/purple - name = "purple gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "purple" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/green - name = "green gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "green" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/grey - name = "grey gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "gray" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/light_brown - name = "light brown gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "lightbrown" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/brown - name = "brown gloves" - desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. - icon_state = "brown" - -// CHOMPedit start: More gloves give cold/heat protection. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPedit end. - -/obj/item/clothing/gloves/evening - desc = "A pair of gloves that reach past the elbow. Fancy!" - name = "evening gloves" - icon_state = "evening_gloves" - addblends = "evening_gloves_a" - -/obj/item/clothing/gloves/fingerless - desc = "A pair of gloves that don't actually cover the fingers." - name = "fingerless gloves" - icon_state = "fingerlessgloves" - fingerprint_chance = 100 - -/obj/item/clothing/gloves/fingerless_recolourable - desc = "A pair of gloves that don't actually cover the fingers." - name = "fingerless gloves" - icon_state = "fingerlessgloves_rc" + + +/obj/item/clothing/gloves/yellow + desc = "These gloves will protect the wearer from electric shock." + name = "insulated gloves" + icon_state = "yellow" + siemens_coefficient = 0 + permeability_coefficient = 0.05 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap + desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly." + name = "budget insulated gloves" + icon_state = "yellow" + siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize() + permeability_coefficient = 0.05 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/clothing/gloves/fyellow/Initialize() + . = ..() + //Picks a value between 0 and 1.25, in 5% increments // VOREStation edit + var/shock_pick = rand(0,15) // VOREStation Edit + siemens_coefficient = shock_pick * 0.05 + +/obj/item/clothing/gloves/black + desc = "These work gloves are thick and fire-resistant." + name = "black gloves" + icon_state = "black" + permeability_coefficient = 0.05 + + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/gloves/orange + name = "orange gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "orange" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/red + name = "red gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "red" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/rainbow + name = "rainbow gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "rainbow" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/blue + name = "blue gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "blue" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/purple + name = "purple gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "purple" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/green + name = "green gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "green" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/grey + name = "grey gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "gray" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/light_brown + name = "light brown gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "lightbrown" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/brown + name = "brown gloves" + desc = "A pair of gloves. They look heat-resistant." // CHOMPedit: Updated description for temp changes. + icon_state = "brown" + +// CHOMPedit start: More gloves give cold/heat protection. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPedit end. + +/obj/item/clothing/gloves/evening + desc = "A pair of gloves that reach past the elbow. Fancy!" + name = "evening gloves" + icon_state = "evening_gloves" + addblends = "evening_gloves_a" + +/obj/item/clothing/gloves/fingerless + desc = "A pair of gloves that don't actually cover the fingers." + name = "fingerless gloves" + icon_state = "fingerlessgloves" + fingerprint_chance = 100 + +/obj/item/clothing/gloves/fingerless_recolourable + desc = "A pair of gloves that don't actually cover the fingers." + name = "fingerless gloves" + icon_state = "fingerlessgloves_rc" fingerprint_chance = 100 \ No newline at end of file diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 1ecea4776f..2928b157cd 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -1,182 +1,182 @@ -/obj/item/clothing/gloves/captain - desc = "Regal blue gloves, with a nice gold trim. Swanky." - name = "site manager's gloves" - icon_state = "captain" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/gloves/cyborg - desc = "beep boop borp" - name = "cyborg gloves" - icon_state = "black" - item_state = "r_hands" - siemens_coefficient = 1.0 - -/obj/item/clothing/gloves/forensic - desc = "Specially made gloves for forensic technicians. The luminescent threads woven into the material stand out under scrutiny." - name = "forensic gloves" - icon_state = "forensic" - item_state = "black" - permeability_coefficient = 0.05 - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/swat - desc = "These tactical gloves are somewhat fire and impact-resistant." - name = "\improper SWAT Gloves" - icon_state = "swat" - item_state = "swat" - siemens_coefficient = 0.50 - permeability_coefficient = 0.05 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - armor = list(melee = 15, bullet = 10, laser = 10, energy = 10, bomb = 5, bio = 0, rad = 0) // CHOMPedit: Now protective. - -/obj/item/clothing/gloves/combat //CHOMPedit: Combined effect of SWAT gloves and insulated gloves, with better protective stats. - desc = "These military-grade tactical gloves protect the user from electrical shocks, fire, high-velocity impacts and varying temperatures." // CHOMPedit: Updated description. - name = "combat gloves" - icon_state = "swat" - item_state = "swat" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - armor = list(melee = 20, bullet = 15, laser = 15, energy = 15, bomb = 10, bio = 0, rad = 0) // CHOMPedit: Now protective. - -/obj/item/clothing/gloves/sterile - name = "sterile gloves" - desc = "Sterile gloves." - icon_state = "latex" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC) - permeability_coefficient = 0.01 - germ_level = 0 - fingerprint_chance = 25 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' -// var/balloonPath = /obj/item/latexballon - -//TODO: Make inflating gloves a thing -/*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user) - user.visible_message("\The [src] expands!") - qdel(src)*/ - -/obj/item/clothing/gloves/sterile/latex - name = "latex gloves" - desc = "Sterile latex gloves." - -/obj/item/clothing/gloves/sterile/nitrile - name = "nitrile gloves" - desc = "Sterile nitrile gloves" - icon_state = "nitrile" - item_state = "ngloves" -// balloonPath = /obj/item/nitrileballoon - -/obj/item/clothing/gloves/botanic_leather - desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." - name = "botanist's leather gloves" - icon_state = "leather" - item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown") - permeability_coefficient = 0.05 - siemens_coefficient = 0.75 //thick work gloves - drop_sound = 'sound/items/drop/leather.ogg' - pickup_sound = 'sound/items/pickup/leather.ogg' - -/obj/item/clothing/gloves/duty - desc = "These brown duty gloves are made from a durable synthetic." - name = "work gloves" - icon_state = "work" - item_state = "wgloves" - armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 0, bio = 0, rad = 0) -// CHOMPEdit Start - If they resist lasers and energy they should help inulate against heat and cold. - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -// CHOMPEdit End -/obj/item/clothing/gloves/tactical - desc = "These brown tactical gloves are made from a durable synthetic, and have hardened knuckles." - name = "tactical gloves" - icon_state = "work" - item_state = "wgloves" - force = 5 - punch_force = 3 - siemens_coefficient = 0.75 - permeability_coefficient = 0.05 - armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0) - -/obj/item/clothing/gloves/vox - desc = "These bizarre gauntlets seem to be fitted for... bird claws?" - name = "insulated gauntlets" - icon_state = "gloves-vox" - item_state = "gloves-vox" - flags = PHORONGUARD - siemens_coefficient = 0 - permeability_coefficient = 0.05 - species_restricted = list("Vox") - drop_sound = 'sound/items/drop/metalboots.ogg' - pickup_sound = 'sound/items/pickup/toolbox.ogg' - armor = list (melee = 20, bullet = 15, laser = 10, energy = 10, bomb =5, bio = 30, rad = 30) //gently bumped up Heavy engineering gloves value for protection //ChompEdit - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/knuckledusters - name = "knuckle dusters" - desc = "A pair of brass knuckles. Generally used to enhance the user's punches." - icon_state = "knuckledusters" - matter = list(MAT_STEEL = 500) - attack_verb = list("punched", "beaten", "struck") - flags = THICKMATERIAL // Stops rings from increasing hit strength - siemens_coefficient = 1 - fingerprint_chance = 100 - overgloves = 1 - force = 5 - punch_force = 5 - drop_sound = 'sound/items/drop/metalboots.ogg' - pickup_sound = 'sound/items/pickup/toolbox.ogg' - -/obj/item/clothing/gloves/ranger - var/glovecolor = "white" - name = "ranger gloves" - desc = "The gloves of the Rangers are the least memorable part. They're not even insulated in the show, so children \ - don't try and take apart a toaster with inadequate protection. They only serve to complete the fancy outfit." - icon = 'icons/obj/clothing/ranger.dmi' - icon_state = "ranger_gloves" - -/obj/item/clothing/gloves/ranger/Initialize() - . = ..() - if(icon_state == "ranger_gloves") - name = "[glovecolor] ranger gloves" - icon_state = "[glovecolor]_ranger_gloves" - -/obj/item/clothing/gloves/ranger/black - glovecolor = "black" - -/obj/item/clothing/gloves/ranger/pink - glovecolor = "pink" - -/obj/item/clothing/gloves/ranger/green - glovecolor = "green" - -/obj/item/clothing/gloves/ranger/cyan - glovecolor = "cyan" - -/obj/item/clothing/gloves/ranger/orange - glovecolor = "orange" - -/obj/item/clothing/gloves/ranger/yellow - glovecolor = "yellow" - -/obj/item/clothing/gloves/waterwings - name = "water wings" - desc = "Swim aids designed to help a wearer float in water and learn to swim." - icon_state = "waterwings" +/obj/item/clothing/gloves/captain + desc = "Regal blue gloves, with a nice gold trim. Swanky." + name = "site manager's gloves" + icon_state = "captain" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/gloves/cyborg + desc = "beep boop borp" + name = "cyborg gloves" + icon_state = "black" + item_state = "r_hands" + siemens_coefficient = 1.0 + +/obj/item/clothing/gloves/forensic + desc = "Specially made gloves for forensic technicians. The luminescent threads woven into the material stand out under scrutiny." + name = "forensic gloves" + icon_state = "forensic" + item_state = "black" + permeability_coefficient = 0.05 + + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/gloves/swat + desc = "These tactical gloves are somewhat fire and impact-resistant." + name = "\improper SWAT Gloves" + icon_state = "swat" + item_state = "swat" + siemens_coefficient = 0.50 + permeability_coefficient = 0.05 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + armor = list(melee = 15, bullet = 10, laser = 10, energy = 10, bomb = 5, bio = 0, rad = 0) // CHOMPedit: Now protective. + +/obj/item/clothing/gloves/combat //CHOMPedit: Combined effect of SWAT gloves and insulated gloves, with better protective stats. + desc = "These military-grade tactical gloves protect the user from electrical shocks, fire, high-velocity impacts and varying temperatures." // CHOMPedit: Updated description. + name = "combat gloves" + icon_state = "swat" + item_state = "swat" + siemens_coefficient = 0 + permeability_coefficient = 0.05 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + armor = list(melee = 20, bullet = 15, laser = 15, energy = 15, bomb = 10, bio = 0, rad = 0) // CHOMPedit: Now protective. + +/obj/item/clothing/gloves/sterile + name = "sterile gloves" + desc = "Sterile gloves." + icon_state = "latex" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC) + permeability_coefficient = 0.01 + germ_level = 0 + fingerprint_chance = 25 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' +// var/balloonPath = /obj/item/latexballon + +//TODO: Make inflating gloves a thing +/*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user) + user.visible_message("\The [src] expands!") + qdel(src)*/ + +/obj/item/clothing/gloves/sterile/latex + name = "latex gloves" + desc = "Sterile latex gloves." + +/obj/item/clothing/gloves/sterile/nitrile + name = "nitrile gloves" + desc = "Sterile nitrile gloves" + icon_state = "nitrile" + item_state = "ngloves" +// balloonPath = /obj/item/nitrileballoon + +/obj/item/clothing/gloves/botanic_leather + desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." + name = "botanist's leather gloves" + icon_state = "leather" + item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown") + permeability_coefficient = 0.05 + siemens_coefficient = 0.75 //thick work gloves + drop_sound = 'sound/items/drop/leather.ogg' + pickup_sound = 'sound/items/pickup/leather.ogg' + +/obj/item/clothing/gloves/duty + desc = "These brown duty gloves are made from a durable synthetic." + name = "work gloves" + icon_state = "work" + item_state = "wgloves" + armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 0, bio = 0, rad = 0) +// CHOMPEdit Start - If they resist lasers and energy they should help inulate against heat and cold. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPEdit End +/obj/item/clothing/gloves/tactical + desc = "These brown tactical gloves are made from a durable synthetic, and have hardened knuckles." + name = "tactical gloves" + icon_state = "work" + item_state = "wgloves" + force = 5 + punch_force = 3 + siemens_coefficient = 0.75 + permeability_coefficient = 0.05 + armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0) + +/obj/item/clothing/gloves/vox + desc = "These bizarre gauntlets seem to be fitted for... bird claws?" + name = "insulated gauntlets" + icon_state = "gloves-vox" + item_state = "gloves-vox" + flags = PHORONGUARD + siemens_coefficient = 0 + permeability_coefficient = 0.05 + species_restricted = list("Vox") + drop_sound = 'sound/items/drop/metalboots.ogg' + pickup_sound = 'sound/items/pickup/toolbox.ogg' + armor = list (melee = 20, bullet = 15, laser = 10, energy = 10, bomb =5, bio = 30, rad = 30) //gently bumped up Heavy engineering gloves value for protection //ChompEdit + + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/gloves/knuckledusters + name = "knuckle dusters" + desc = "A pair of brass knuckles. Generally used to enhance the user's punches." + icon_state = "knuckledusters" + matter = list(MAT_STEEL = 500) + attack_verb = list("punched", "beaten", "struck") + flags = THICKMATERIAL // Stops rings from increasing hit strength + siemens_coefficient = 1 + fingerprint_chance = 100 + overgloves = 1 + force = 5 + punch_force = 5 + drop_sound = 'sound/items/drop/metalboots.ogg' + pickup_sound = 'sound/items/pickup/toolbox.ogg' + +/obj/item/clothing/gloves/ranger + var/glovecolor = "white" + name = "ranger gloves" + desc = "The gloves of the Rangers are the least memorable part. They're not even insulated in the show, so children \ + don't try and take apart a toaster with inadequate protection. They only serve to complete the fancy outfit." + icon = 'icons/obj/clothing/ranger.dmi' + icon_state = "ranger_gloves" + +/obj/item/clothing/gloves/ranger/Initialize() + . = ..() + if(icon_state == "ranger_gloves") + name = "[glovecolor] ranger gloves" + icon_state = "[glovecolor]_ranger_gloves" + +/obj/item/clothing/gloves/ranger/black + glovecolor = "black" + +/obj/item/clothing/gloves/ranger/pink + glovecolor = "pink" + +/obj/item/clothing/gloves/ranger/green + glovecolor = "green" + +/obj/item/clothing/gloves/ranger/cyan + glovecolor = "cyan" + +/obj/item/clothing/gloves/ranger/orange + glovecolor = "orange" + +/obj/item/clothing/gloves/ranger/yellow + glovecolor = "yellow" + +/obj/item/clothing/gloves/waterwings + name = "water wings" + desc = "Swim aids designed to help a wearer float in water and learn to swim." + icon_state = "waterwings" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 5d33d56360..eea71f6041 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -1,128 +1,128 @@ - -//Hat Station 13 - -/obj/item/clothing/head/collectable - name = "collectable hat" - desc = "A rare collectable hat." - -/obj/item/clothing/head/collectable/petehat - name = "ultra rare hat" - desc = "an ultra rare hat. It commands a certain respect." - icon_state = "petehat" - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi', - SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi' - ) - -/obj/item/clothing/head/collectable/slime - name = "collectable slime cap!" - desc = "It just latches right in place!" - icon_state = "headslime" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/xenom - name = "collectable xenomorph helmet!" - desc = "Hiss hiss hiss!" - icon_state = "xenom" - item_state_slots = list(slot_r_hand_str = "xenos_helm", slot_l_hand_str = "xenos_helm") - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/collectable/chef - name = "collectable chef's hat" - desc = "A rare Chef's Hat meant for hat collectors!" - icon_state = "chefhat" - -/obj/item/clothing/head/collectable/paper - name = "collectable paper hat" - desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." - icon_state = "paper" - body_parts_covered = 0 - drop_sound = 'sound/items/drop/paper.ogg' - pickup_sound = 'sound/items/pickup/paper.ogg' - -/obj/item/clothing/head/collectable/tophat - name = "collectable top hat" - desc = "A top hat worn by only the most prestigious hat collectors." - icon_state = "tophat" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/captain - name = "collectable site manager's hat" - desc = "A Collectable Hat that'll make you look just like a real comdom!" - icon_state = "captain" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/police - name = "collectable police officer's hat" - desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." - icon_state = "policehelm" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/beret - name = "collectable beret" - desc = "A Collectable red Beret. It smells faintly of Garlic." - icon_state = "beret" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/welding - name = "collectable welding helmet" - desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" - icon_state = "welding" - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real Brain Slug!" - icon_state = "headslime" - item_state_slots = list(slot_r_hand_str = "greenbandana", slot_l_hand_str = "greenbandana") - -/obj/item/clothing/head/collectable/flatcap - name = "collectable flat cap" - desc = "A Collectible farmer's Flat Cap!" - icon_state = "flat_cap" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - -/obj/item/clothing/head/collectable/pirate - name = "collectable pirate hat" - desc = "You'd make a great Dread Syndie Roberts!" - icon_state = "pirate" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/kitty - name = "collectable kitty ears" - desc = "The fur feels.....a bit too realistic." - icon_state = "kitty" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/rabbitears - name = "collectable rabbit ears" - desc = "Not as lucky as the feet!" - icon_state = "bunny" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/wizard - name = "collectable wizard's hat" - desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental." - icon_state = "wizard" - -/obj/item/clothing/head/collectable/hardhat - name = "collectable hard hat" - desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" - icon_state = "hardhat0_old_yellow" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/HoS - name = "collectable HoS hat" - desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" - icon_state = "hoscap" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/thunderdome - name = "collectable Thunderdome helmet" - desc = "Go Red! I mean Green! I mean Red! No Green!" - icon_state = "thunderdome" - -/obj/item/clothing/head/collectable/swat - name = "collectable SWAT helmet" - desc = "Now you can be in the Deathsquad too!" - icon_state = "swat" + +//Hat Station 13 + +/obj/item/clothing/head/collectable + name = "collectable hat" + desc = "A rare collectable hat." + +/obj/item/clothing/head/collectable/petehat + name = "ultra rare hat" + desc = "an ultra rare hat. It commands a certain respect." + icon_state = "petehat" + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi', + SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi' + ) + +/obj/item/clothing/head/collectable/slime + name = "collectable slime cap!" + desc = "It just latches right in place!" + icon_state = "headslime" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/xenom + name = "collectable xenomorph helmet!" + desc = "Hiss hiss hiss!" + icon_state = "xenom" + item_state_slots = list(slot_r_hand_str = "xenos_helm", slot_l_hand_str = "xenos_helm") + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/collectable/chef + name = "collectable chef's hat" + desc = "A rare Chef's Hat meant for hat collectors!" + icon_state = "chefhat" + +/obj/item/clothing/head/collectable/paper + name = "collectable paper hat" + desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." + icon_state = "paper" + body_parts_covered = 0 + drop_sound = 'sound/items/drop/paper.ogg' + pickup_sound = 'sound/items/pickup/paper.ogg' + +/obj/item/clothing/head/collectable/tophat + name = "collectable top hat" + desc = "A top hat worn by only the most prestigious hat collectors." + icon_state = "tophat" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/captain + name = "collectable site manager's hat" + desc = "A Collectable Hat that'll make you look just like a real comdom!" + icon_state = "captain" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/police + name = "collectable police officer's hat" + desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." + icon_state = "policehelm" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/beret + name = "collectable beret" + desc = "A Collectable red Beret. It smells faintly of Garlic." + icon_state = "beret" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/welding + name = "collectable welding helmet" + desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" + icon_state = "welding" + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/collectable/slime + name = "collectable slime hat" + desc = "Just like a real Brain Slug!" + icon_state = "headslime" + item_state_slots = list(slot_r_hand_str = "greenbandana", slot_l_hand_str = "greenbandana") + +/obj/item/clothing/head/collectable/flatcap + name = "collectable flat cap" + desc = "A Collectible farmer's Flat Cap!" + icon_state = "flat_cap" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + +/obj/item/clothing/head/collectable/pirate + name = "collectable pirate hat" + desc = "You'd make a great Dread Syndie Roberts!" + icon_state = "pirate" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/kitty + name = "collectable kitty ears" + desc = "The fur feels.....a bit too realistic." + icon_state = "kitty" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/rabbitears + name = "collectable rabbit ears" + desc = "Not as lucky as the feet!" + icon_state = "bunny" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/wizard + name = "collectable wizard's hat" + desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental." + icon_state = "wizard" + +/obj/item/clothing/head/collectable/hardhat + name = "collectable hard hat" + desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" + icon_state = "hardhat0_old_yellow" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/HoS + name = "collectable HoS hat" + desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" + icon_state = "hoscap" + body_parts_covered = 0 + +/obj/item/clothing/head/collectable/thunderdome + name = "collectable Thunderdome helmet" + desc = "Go Red! I mean Green! I mean Red! No Green!" + icon_state = "thunderdome" + +/obj/item/clothing/head/collectable/swat + name = "collectable SWAT helmet" + desc = "Now you can be in the Deathsquad too!" + icon_state = "swat" diff --git a/code/modules/clothing/head/fishing.dm b/code/modules/clothing/head/fishing.dm index bcebd89b57..8c702be68a 100644 --- a/code/modules/clothing/head/fishing.dm +++ b/code/modules/clothing/head/fishing.dm @@ -1,152 +1,152 @@ -//these just use the default inhands for soft caps because the amount of extra work to add more colours would be insane otherwise - -/obj/item/clothing/head/fishing - name = "fishing hat" - desc = "It's a peaked cap with a quirky slogan." - icon = 'icons/inventory/head/item_vr_fishing.dmi' - icon_state = "greensoft0" - item_state_slots = list(slot_r_hand_str = "greensoft", slot_l_hand_str = "greensoft", slot_head_str = "greensoft0") - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_hats.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_hats.dmi', - slot_head_str = 'icons/inventory/head/mob_vr_fishing.dmi' - ) - siemens_coefficient = 0.9 - body_parts_covered = 0 - var/slogan = "" - var/hatsize = 0 - -/obj/item/clothing/head/fishing/Initialize() - //short phrases that women and fish may have about you - var/feelings = list("love me", - "fear me", - "despise me", - "are ambivalent towards me", - "don't care about me", - "lust after me", - "eat me", - "are down bad for me", - "can't stand me", - "want me", - "kill me", - "devour me", - "swallow me", - "avoid me", - "have no words for me", - "hate me", - "make memes of me", - "demoralise me", - "perpetually mock me", - "scare me", - "issue restraining orders to me", - "leave me", - "took the kids from me", - "demand satisfaction from me", - "dropkick me", - "suplex me", - "worry about me", - "gossip about me", - "defame me", - "disbelieve my existence", - "conspire against me", - "draw me as the soyjack", - "put me in their tummies", - "crunchatize me", - "crunchatize me, cap'n!", - "wreck me", - "feed me", - "beg to get in my stomach", - "walk all over me", - "drink me like a milkshake", - "beg me to step on them", - "call me Mommy", - "call me Daddy", - "step on me", - "lay eggs down my throat", - "dream about me", - "choke me with their thighs", - "steal my lunch money", - "contact me about my spaceship's extended warranty", - "envy me", - "combo me", - "want to kidnap me", - "fold me in half", - "think my spacetruck is hot", - "hate my spacetruck", - "are more into my spacetruck than me", - "ask me for docking codes", - "think of me while kneading dough", - "gun me down in the streets of miami", - "drop me off of inconveniently high places", - "drop me into inconveniently tight places", - "leave threatening messages on my voicemail", - "write fanfiction about me", - "attempt to approach me" - ) - //significantly more complex feelings that women and fish may have about you - var/verylongfeelings = list("construct inferior defensive walls lacking additional fall back locations as they believe their initial defense shall be enough to withstand me", - "insist upon forming an unsteady yet reliable alliance in which they teeter upon the dual edge of betrayal and ruination in the perpetual desire to bring ruin upon me", - "construct elaborate fantasies about my graphic and harrowing death at the hands of a giant robot", - "call it oven when you of in the cold food of out hot eat the food", - "are hurled millennia into the future for their hubris but nonetheless attempt to enslave me from my abode deep within the earth", - "make light of my attire while at the coffee shop, unaware that I am a powerful wizard with the means to cast forth the veil of ignorance from their eyes", - "cower before my T-posing to assert dominance, except I don't know the difference between T-posing and A-posing (neither of which have anything to do with T&A, which is very confusing)", - "use my power to create a new universe but destroy all life on earth in the process and are left alone to rebuild with nothing for company but me", - "hold A to charge a buster shot only to get hit by my homing missiles, starting a juggle chain which results in losing all their health and having to restart from the last checkpoint", - "attempt once more to best me and gain access to my keep of riches and treasure, but I put their foolish ambitions to rest with force", - "bump into me in the supermarket and exchange an awkward hello, neither of us expecting to meet each other in this liminal environs and unsure how the context of our relationship can adapt to this happenstance congregation", - "pursue me to the ends of the earth, constantly thwarted by inconsequential setbacks, and when they catch up and I ask in an exasperated voice why they respond 'you owe me a dollar'", - "call me just to 'chat' but actually mention they are moving and, obviously, since I'm the ONLY guy they know with a truck it would be great if I could help out, they said they'd buy me pizza but that doesn't really cover it", - "shuffle uncomfortably as we continue to sit in near-total silence having exhausted all topics of conversation hours ago but neither of us having worked up the spirit to suggest that we part ways and go home", - "shove me into their large gaping maw, covering me in drool as I descend into their warm depths, becoming covered by hot bubbling acids that dissolve my body while I play Animal Crossing New Leaf on my Nintendo 3DS", - "promise me McDonalds but conveniently forget to pull into the drivethrough on the way home, leaving me burgerless", - "leave me in the car all alone with my favorite music and a bottle of water in the summer", - "create designs of particularly verbose hats describing extreme complexities and deep philosophical implications of their unusually specific feelings and often not particularly kind thoughts about me", - "methodically place brick after agonising brick in the wall they are constructing to forever entomb me in the basement which they claimed contained a case of Amontillado wine" - ) - - //time to actually generate the slogan - //50% chance of it just being a basic women/fish combo - if(prob(50)) - slogan = "Women [pick(feelings)], fish [pick(feelings)]" - else //we generate something more complex - if(prob(90)) //USUALLY one of the short simple phrases - slogan = "[pick("Women", "Fish")] [pick(feelings)]" - else - slogan = "[pick("Women", "Fish")] [pick(verylongfeelings)]" - hatsize += 2 - - //second line - if(prob(90)) //USUALLY one of the short simple phrases - slogan = "[slogan], [pick("Women", "Fish")] [pick(feelings)]" - else - slogan = "[slogan], [pick("Women", "Fish")] [pick(verylongfeelings)]" - hatsize += 2 - //chance of a third line - if(prob(50)) - if(prob(50)) //if a third line is rolled it's way more likely to be a long one - slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(feelings)]" - hatsize += 1 - else - slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(verylongfeelings)]" - hatsize += 3 - //you can even get a fourth - if(prob(25)) - if(prob(25)) //if a fourth line is rolled it's way WAY more likely to be a long one - slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(feelings)]" - hatsize += 1 - else - slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(verylongfeelings)]" - hatsize += 3 - - - //now we have the slogan, apply this to the description and name - desc = "A peaked cap with text reading '[slogan]'." - name = "\improper '[slogan]' hat" - - //pick a hue - var/colourtype = pick("green", "red", "blue", "yellow", "purple", "orange", "grey") - - //finally, take our hat size and pick the icon accordingly - icon_state = "[colourtype]soft[hatsize]" +//these just use the default inhands for soft caps because the amount of extra work to add more colours would be insane otherwise + +/obj/item/clothing/head/fishing + name = "fishing hat" + desc = "It's a peaked cap with a quirky slogan." + icon = 'icons/inventory/head/item_vr_fishing.dmi' + icon_state = "greensoft0" + item_state_slots = list(slot_r_hand_str = "greensoft", slot_l_hand_str = "greensoft", slot_head_str = "greensoft0") + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_hats.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_hats.dmi', + slot_head_str = 'icons/inventory/head/mob_vr_fishing.dmi' + ) + siemens_coefficient = 0.9 + body_parts_covered = 0 + var/slogan = "" + var/hatsize = 0 + +/obj/item/clothing/head/fishing/Initialize() + //short phrases that women and fish may have about you + var/feelings = list("love me", + "fear me", + "despise me", + "are ambivalent towards me", + "don't care about me", + "lust after me", + "eat me", + "are down bad for me", + "can't stand me", + "want me", + "kill me", + "devour me", + "swallow me", + "avoid me", + "have no words for me", + "hate me", + "make memes of me", + "demoralise me", + "perpetually mock me", + "scare me", + "issue restraining orders to me", + "leave me", + "took the kids from me", + "demand satisfaction from me", + "dropkick me", + "suplex me", + "worry about me", + "gossip about me", + "defame me", + "disbelieve my existence", + "conspire against me", + "draw me as the soyjack", + "put me in their tummies", + "crunchatize me", + "crunchatize me, cap'n!", + "wreck me", + "feed me", + "beg to get in my stomach", + "walk all over me", + "drink me like a milkshake", + "beg me to step on them", + "call me Mommy", + "call me Daddy", + "step on me", + "lay eggs down my throat", + "dream about me", + "choke me with their thighs", + "steal my lunch money", + "contact me about my spaceship's extended warranty", + "envy me", + "combo me", + "want to kidnap me", + "fold me in half", + "think my spacetruck is hot", + "hate my spacetruck", + "are more into my spacetruck than me", + "ask me for docking codes", + "think of me while kneading dough", + "gun me down in the streets of miami", + "drop me off of inconveniently high places", + "drop me into inconveniently tight places", + "leave threatening messages on my voicemail", + "write fanfiction about me", + "attempt to approach me" + ) + //significantly more complex feelings that women and fish may have about you + var/verylongfeelings = list("construct inferior defensive walls lacking additional fall back locations as they believe their initial defense shall be enough to withstand me", + "insist upon forming an unsteady yet reliable alliance in which they teeter upon the dual edge of betrayal and ruination in the perpetual desire to bring ruin upon me", + "construct elaborate fantasies about my graphic and harrowing death at the hands of a giant robot", + "call it oven when you of in the cold food of out hot eat the food", + "are hurled millennia into the future for their hubris but nonetheless attempt to enslave me from my abode deep within the earth", + "make light of my attire while at the coffee shop, unaware that I am a powerful wizard with the means to cast forth the veil of ignorance from their eyes", + "cower before my T-posing to assert dominance, except I don't know the difference between T-posing and A-posing (neither of which have anything to do with T&A, which is very confusing)", + "use my power to create a new universe but destroy all life on earth in the process and are left alone to rebuild with nothing for company but me", + "hold A to charge a buster shot only to get hit by my homing missiles, starting a juggle chain which results in losing all their health and having to restart from the last checkpoint", + "attempt once more to best me and gain access to my keep of riches and treasure, but I put their foolish ambitions to rest with force", + "bump into me in the supermarket and exchange an awkward hello, neither of us expecting to meet each other in this liminal environs and unsure how the context of our relationship can adapt to this happenstance congregation", + "pursue me to the ends of the earth, constantly thwarted by inconsequential setbacks, and when they catch up and I ask in an exasperated voice why they respond 'you owe me a dollar'", + "call me just to 'chat' but actually mention they are moving and, obviously, since I'm the ONLY guy they know with a truck it would be great if I could help out, they said they'd buy me pizza but that doesn't really cover it", + "shuffle uncomfortably as we continue to sit in near-total silence having exhausted all topics of conversation hours ago but neither of us having worked up the spirit to suggest that we part ways and go home", + "shove me into their large gaping maw, covering me in drool as I descend into their warm depths, becoming covered by hot bubbling acids that dissolve my body while I play Animal Crossing New Leaf on my Nintendo 3DS", + "promise me McDonalds but conveniently forget to pull into the drivethrough on the way home, leaving me burgerless", + "leave me in the car all alone with my favorite music and a bottle of water in the summer", + "create designs of particularly verbose hats describing extreme complexities and deep philosophical implications of their unusually specific feelings and often not particularly kind thoughts about me", + "methodically place brick after agonising brick in the wall they are constructing to forever entomb me in the basement which they claimed contained a case of Amontillado wine" + ) + + //time to actually generate the slogan + //50% chance of it just being a basic women/fish combo + if(prob(50)) + slogan = "Women [pick(feelings)], fish [pick(feelings)]" + else //we generate something more complex + if(prob(90)) //USUALLY one of the short simple phrases + slogan = "[pick("Women", "Fish")] [pick(feelings)]" + else + slogan = "[pick("Women", "Fish")] [pick(verylongfeelings)]" + hatsize += 2 + + //second line + if(prob(90)) //USUALLY one of the short simple phrases + slogan = "[slogan], [pick("Women", "Fish")] [pick(feelings)]" + else + slogan = "[slogan], [pick("Women", "Fish")] [pick(verylongfeelings)]" + hatsize += 2 + //chance of a third line + if(prob(50)) + if(prob(50)) //if a third line is rolled it's way more likely to be a long one + slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(feelings)]" + hatsize += 1 + else + slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(verylongfeelings)]" + hatsize += 3 + //you can even get a fourth + if(prob(25)) + if(prob(25)) //if a fourth line is rolled it's way WAY more likely to be a long one + slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(feelings)]" + hatsize += 1 + else + slogan = "[slogan], [pick("Women", "Fish", "Men", "Beasts")] [pick(verylongfeelings)]" + hatsize += 3 + + + //now we have the slogan, apply this to the description and name + desc = "A peaked cap with text reading '[slogan]'." + name = "\improper '[slogan]' hat" + + //pick a hue + var/colourtype = pick("green", "red", "blue", "yellow", "purple", "orange", "grey") + + //finally, take our hat size and pick the icon accordingly + icon_state = "[colourtype]soft[hatsize]" item_state_slots = list(slot_r_hand_str = "[colourtype]soft", slot_l_hand_str = "[colourtype]soft", slot_head_str = "[colourtype]soft[hatsize]") \ No newline at end of file diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index bbe3f21b44..236f785796 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -1,226 +1,226 @@ -/obj/item/clothing/head/helmet - name = "helmet" - desc = "Standard Security gear. Protects the head from impacts." - icon_state = "helmet" - valid_accessory_slots = (ACCESSORY_SLOT_HELM_C) - restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C) - flags = THICKMATERIAL - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - flags_inv = HIDEEARS|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - w_class = ITEMSIZE_NORMAL - ear_protection = 1 - drop_sound = 'sound/items/drop/helm.ogg' - pickup_sound = 'sound/items/pickup/helm.ogg' - -/obj/item/clothing/head/helmet/solgov - name = "\improper Solar Confederate Government helmet" - desc = "A helmet painted in Peacekeeper blue. Stands out like a sore thumb." - icon_state = "helmet_sol" - armor = list(melee = 50, bullet = 50, laser = 50,energy = 25, bomb = 30, bio = 0, rad = 0) - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/solgov/command - name = "command helmet" - desc = "A helmet with 'Solar Confederate Government' printed on the back in gold lettering." - icon_state = "helmet_command" - -/obj/item/clothing/head/helmet/solgov/security - name = "security helmet" - desc = "A helmet with 'MASTER AT ARMS' printed on the back in silver lettering." - icon_state = "helmet_security" - -/obj/item/clothing/head/helmet/nt - name = "\improper NanoTrasen helmet" - desc = "A helmet with 'CORPORATE SECURITY' printed on the back in red lettering." - icon_state = "helmet_nt" - -/obj/item/clothing/head/helmet/pcrc - name = "\improper PCRC helmet" - desc = "A helmet with 'PRIVATE SECURITY' printed on the back in cyan lettering." - icon_state = "helmet_pcrc" - -/obj/item/clothing/head/helmet/tac - name = "tactical helmet" - desc = "A tan helmet made from advanced ceramic. Comfortable and robust." - icon_state = "helmet_tac" - armor = list(melee = 50, bullet = 60, laser = 60, energy = 45, bomb = 30, bio = 0, rad = 0) - siemens_coefficient = 0.6 - -/obj/item/clothing/head/helmet/merc - name = "combat helmet" - desc = "A heavily reinforced helmet painted with red markings. Feels like it could take a lot of punishment." - icon_state = "helmet_merc" - armor = list(melee = 70, bullet = 70, laser = 70, energy = 35, bomb = 30, bio = 0, rad = 0) - siemens_coefficient = 0.5 - -/obj/item/clothing/head/helmet/riot - name = "riot helmet" - desc = "It's a helmet specifically designed to protect against close range attacks." - icon_state = "riot" - item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") - armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.7 - valid_accessory_slots = null - action_button_name = "Toggle Visor" - -/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob) - if(src.icon_state == initial(icon_state)) - src.icon_state = "[icon_state]up" - to_chat(user, "You raise the visor on the riot helmet.") - else - src.icon_state = initial(icon_state) - to_chat(user, "You lower the visor on the riot helmet.") - update_clothing_icon() //so our mob-overlays update - -/obj/item/clothing/head/helmet/laserproof - name = "ablative helmet" - desc = "It's a helmet specifically designed to protect against energy projectiles." - icon_state = "helmet_reflec" - item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") - armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.1 - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/bulletproof - name = "bullet-resistant helmet" - desc = "It's a helmet specifically designed to protect against ballistic projectiles." - icon_state = "helmet_bulletproof" - item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") - armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.7 - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/combat - name = "combat helmet" - desc = "It's a general purpose combat helmet, designed to protect against typical dangers to your head." - icon_state = "helmet_combat" - item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") - armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0) - flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR - siemens_coefficient = 0.6 - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/flexitac - name = "tactical light helmet" - desc = "A tan helmet made from advanced ceramic with an integrated tactical flashlight." - icon_state = "flexitac" - armor = list(melee = 40, bullet = 40, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0) - siemens_coefficient = 0.6 - light_range = 6 - light_overlay = "helmet_light_dual_green" - action_button_name = "Toggle Head-light" - min_cold_protection_temperature = T0C - 20 - cold_protection = HEAD - -/obj/item/clothing/head/helmet/explorer - name = "explorer hood" - desc = "An armoured hood for exploring harsh environments." - icon_state = "explorer" - flags = THICKMATERIAL - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.9 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) - -/obj/item/clothing/head/helmet/swat - name = "\improper SWAT helmet" - desc = "They're often used by highly trained SWAT Officers." - icon_state = "swat" - armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) - flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.5 - -/obj/item/clothing/head/helmet/alien - name = "alien helmet" - desc = "It's quite larger than your head, but it might still protect it." - icon_state = "alienhelmet" - siemens_coefficient = 0.4 - armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 0, rad = 40) - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/alien/tank - name = "alien warhelm" - armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 70, bio = 0, rad = 40) - -/obj/item/clothing/head/helmet/thunderdome - name = "\improper Thunderdome helmet" - desc = "'Let the battle commence!'" - icon_state = "thunderdome" - armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 1 - -/obj/item/clothing/head/helmet/gladiator - name = "gladiator helmet" - desc = "Ave, Imperator, morituri te salutant." - icon_state = "gladiator" - item_state_slots = list(slot_r_hand_str = "vhelmet", slot_l_hand_str = "vhelmet") - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - siemens_coefficient = 1 - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/tactical - name = "tactical helmet" - desc = "An armored helmet capable of being fitted with a multitude of attachments." - icon_state = "swathelm" - item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") - sprite_sheets = list( - SPECIES_TAJ = 'icons/inventory/head/mob_tajaran.dmi', - SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi', - ) - - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) - flags_inv = HIDEEARS|BLOCKHAIR - siemens_coefficient = 0.7 - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/augment - name = "Augment Array" - desc = "A helmet with optical and cranial augments coupled to it." - icon_state = "v62" - item_state_slots = list(slot_r_hand_str = "head_m", slot_l_hand_str = "head_m") - armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) - flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.5 - valid_accessory_slots = null - -//Non-hardsuit ERT helmets. -/obj/item/clothing/head/helmet/ert - name = "emergency response team helmet" - desc = "An in-atmosphere helmet worn by members of the NanoTrasen Emergency Response Team. Protects the head from impacts." - icon_state = "erthelmet_cmd" - item_state_slots = list(slot_r_hand_str = "syndicate-helm-green", slot_l_hand_str = "syndicate-helm-green") - armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) - valid_accessory_slots = null - -//Commander -/obj/item/clothing/head/helmet/ert/command - name = "emergency response team commander helmet" - desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights." - -//Security -/obj/item/clothing/head/helmet/ert/security - name = "emergency response team security helmet" - desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights." - icon_state = "erthelmet_sec" - -//Engineer -/obj/item/clothing/head/helmet/ert/engineer - name = "emergency response team engineer helmet" - desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights." - icon_state = "erthelmet_eng" - -//Medical -/obj/item/clothing/head/helmet/ert/medical - name = "emergency response team medical helmet" - desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights." - icon_state = "erthelmet_med" +/obj/item/clothing/head/helmet + name = "helmet" + desc = "Standard Security gear. Protects the head from impacts." + icon_state = "helmet" + valid_accessory_slots = (ACCESSORY_SLOT_HELM_C) + restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C) + flags = THICKMATERIAL + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) + flags_inv = HIDEEARS|BLOCKHEADHAIR + cold_protection = HEAD + min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HEAD + max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + w_class = ITEMSIZE_NORMAL + ear_protection = 1 + drop_sound = 'sound/items/drop/helm.ogg' + pickup_sound = 'sound/items/pickup/helm.ogg' + +/obj/item/clothing/head/helmet/solgov + name = "\improper Solar Confederate Government helmet" + desc = "A helmet painted in Peacekeeper blue. Stands out like a sore thumb." + icon_state = "helmet_sol" + armor = list(melee = 50, bullet = 50, laser = 50,energy = 25, bomb = 30, bio = 0, rad = 0) + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/solgov/command + name = "command helmet" + desc = "A helmet with 'Solar Confederate Government' printed on the back in gold lettering." + icon_state = "helmet_command" + +/obj/item/clothing/head/helmet/solgov/security + name = "security helmet" + desc = "A helmet with 'MASTER AT ARMS' printed on the back in silver lettering." + icon_state = "helmet_security" + +/obj/item/clothing/head/helmet/nt + name = "\improper NanoTrasen helmet" + desc = "A helmet with 'CORPORATE SECURITY' printed on the back in red lettering." + icon_state = "helmet_nt" + +/obj/item/clothing/head/helmet/pcrc + name = "\improper PCRC helmet" + desc = "A helmet with 'PRIVATE SECURITY' printed on the back in cyan lettering." + icon_state = "helmet_pcrc" + +/obj/item/clothing/head/helmet/tac + name = "tactical helmet" + desc = "A tan helmet made from advanced ceramic. Comfortable and robust." + icon_state = "helmet_tac" + armor = list(melee = 50, bullet = 60, laser = 60, energy = 45, bomb = 30, bio = 0, rad = 0) + siemens_coefficient = 0.6 + +/obj/item/clothing/head/helmet/merc + name = "combat helmet" + desc = "A heavily reinforced helmet painted with red markings. Feels like it could take a lot of punishment." + icon_state = "helmet_merc" + armor = list(melee = 70, bullet = 70, laser = 70, energy = 35, bomb = 30, bio = 0, rad = 0) + siemens_coefficient = 0.5 + +/obj/item/clothing/head/helmet/riot + name = "riot helmet" + desc = "It's a helmet specifically designed to protect against close range attacks." + icon_state = "riot" + item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") + armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.7 + valid_accessory_slots = null + action_button_name = "Toggle Visor" + +/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob) + if(src.icon_state == initial(icon_state)) + src.icon_state = "[icon_state]up" + to_chat(user, "You raise the visor on the riot helmet.") + else + src.icon_state = initial(icon_state) + to_chat(user, "You lower the visor on the riot helmet.") + update_clothing_icon() //so our mob-overlays update + +/obj/item/clothing/head/helmet/laserproof + name = "ablative helmet" + desc = "It's a helmet specifically designed to protect against energy projectiles." + icon_state = "helmet_reflec" + item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") + armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.1 + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/bulletproof + name = "bullet-resistant helmet" + desc = "It's a helmet specifically designed to protect against ballistic projectiles." + icon_state = "helmet_bulletproof" + item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") + armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.7 + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/combat + name = "combat helmet" + desc = "It's a general purpose combat helmet, designed to protect against typical dangers to your head." + icon_state = "helmet_combat" + item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet") + armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0) + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR + siemens_coefficient = 0.6 + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/flexitac + name = "tactical light helmet" + desc = "A tan helmet made from advanced ceramic with an integrated tactical flashlight." + icon_state = "flexitac" + armor = list(melee = 40, bullet = 40, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0) + siemens_coefficient = 0.6 + light_range = 6 + light_overlay = "helmet_light_dual_green" + action_button_name = "Toggle Head-light" + min_cold_protection_temperature = T0C - 20 + cold_protection = HEAD + +/obj/item/clothing/head/helmet/explorer + name = "explorer hood" + desc = "An armoured hood for exploring harsh environments." + icon_state = "explorer" + flags = THICKMATERIAL + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.9 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) + +/obj/item/clothing/head/helmet/swat + name = "\improper SWAT helmet" + desc = "They're often used by highly trained SWAT Officers." + icon_state = "swat" + armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.5 + +/obj/item/clothing/head/helmet/alien + name = "alien helmet" + desc = "It's quite larger than your head, but it might still protect it." + icon_state = "alienhelmet" + siemens_coefficient = 0.4 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 0, rad = 40) + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/alien/tank + name = "alien warhelm" + armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 70, bio = 0, rad = 40) + +/obj/item/clothing/head/helmet/thunderdome + name = "\improper Thunderdome helmet" + desc = "'Let the battle commence!'" + icon_state = "thunderdome" + armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 1 + +/obj/item/clothing/head/helmet/gladiator + name = "gladiator helmet" + desc = "Ave, Imperator, morituri te salutant." + icon_state = "gladiator" + item_state_slots = list(slot_r_hand_str = "vhelmet", slot_l_hand_str = "vhelmet") + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR + siemens_coefficient = 1 + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/tactical + name = "tactical helmet" + desc = "An armored helmet capable of being fitted with a multitude of attachments." + icon_state = "swathelm" + item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") + sprite_sheets = list( + SPECIES_TAJ = 'icons/inventory/head/mob_tajaran.dmi', + SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi', + ) + + armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) + flags_inv = HIDEEARS|BLOCKHAIR + siemens_coefficient = 0.7 + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/augment + name = "Augment Array" + desc = "A helmet with optical and cranial augments coupled to it." + icon_state = "v62" + item_state_slots = list(slot_r_hand_str = "head_m", slot_l_hand_str = "head_m") + armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) + flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.5 + valid_accessory_slots = null + +//Non-hardsuit ERT helmets. +/obj/item/clothing/head/helmet/ert + name = "emergency response team helmet" + desc = "An in-atmosphere helmet worn by members of the NanoTrasen Emergency Response Team. Protects the head from impacts." + icon_state = "erthelmet_cmd" + item_state_slots = list(slot_r_hand_str = "syndicate-helm-green", slot_l_hand_str = "syndicate-helm-green") + armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) + valid_accessory_slots = null + +//Commander +/obj/item/clothing/head/helmet/ert/command + name = "emergency response team commander helmet" + desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights." + +//Security +/obj/item/clothing/head/helmet/ert/security + name = "emergency response team security helmet" + desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights." + icon_state = "erthelmet_sec" + +//Engineer +/obj/item/clothing/head/helmet/ert/engineer + name = "emergency response team engineer helmet" + desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights." + icon_state = "erthelmet_eng" + +//Medical +/obj/item/clothing/head/helmet/ert/medical + name = "emergency response team medical helmet" + desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights." + icon_state = "erthelmet_med" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 29bd574d65..3178da4757 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -1,291 +1,291 @@ - -//Bartender -/obj/item/clothing/head/chefhat - name = "chef's hat" - desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." - icon_state = "chefhat" - -/obj/item/clothing/head/hairnet - name = "hairnet" - desc = "A hairnet used to keep the hair out of the way and out of the food." - icon_state = "hairnet" - sprite_sheets = list( - SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi' - ) - -//Captain -/obj/item/clothing/head/caphat - name = "site manager's hat" - icon_state = "captain" - desc = "It's good being the king." - body_parts_covered = 0 - -/obj/item/clothing/head/caphat/cap - name = "site manager's cap" - desc = "You fear to wear it for the negligence it brings." - icon_state = "capcap" - -/obj/item/clothing/head/caphat/formal - name = "parade hat" - desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." - icon_state = "officercap" - -/obj/item/clothing/head/caphat/beret - name = "captain's beret" - desc = "A beret fit for a leader." - icon_state = "beretcap" - -//HOP -/obj/item/clothing/head/caphat/hop - name = "crew resource's hat" - desc = "A stylish hat that both protects you from enraged former-crewmembers and gives you a false sense of authority." - icon_state = "hopcap" - -/obj/item/clothing/head/caphat/hop/beret - name = "head of personnel's beret" - desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." - icon_state = "berethop" - -/obj/item/clothing/head/caphat/hop/beret/white - name = "head of personnel's white beret" - desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." - icon_state = "berethopwhite" - -//Chaplain -/obj/item/clothing/head/chaplain_hood - name = "chaplain's hood" - desc = "It's a hood that covers the head. It keeps you warm during the space winters." - icon_state = "chaplain_hood" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -//Chaplain but spookier -/obj/item/clothing/head/chaplain_hood/whiteout - name = "white hood" - desc = "It's a generic white hood. Very spooky." - icon_state = "whiteout_hood" - item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") - -//Chaplain -/obj/item/clothing/head/nun_hood - name = "nun hood" - desc = "Maximum piety in this star system." - icon_state = "nun_hood" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -//Mime -/obj/item/clothing/head/beret - name = "beret" - desc = "A beret, an artists favorite headwear." - icon_state = "beret" - body_parts_covered = 0 - -//Security -/obj/item/clothing/head/beret/sec - name = "security beret" - desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." - icon_state = "beret_officer" - item_state_slots = list(slot_r_hand_str = "beret", slot_l_hand_str = "beret") - -/obj/item/clothing/head/beret/sec/navy/officer - name = "officer beret" - desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_navy_officer" - item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") - -/obj/item/clothing/head/beret/sec/navy/hos - name = "Head of Security beret" - desc = "A navy blue beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_navy_hos" - item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") - -/obj/item/clothing/head/beret/sec/navy/warden - name = "warden beret" - desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_navy_warden" - item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") - -/obj/item/clothing/head/beret/sec/corporate/officer - name = "officer beret" - desc = "A corporate black beret with an officer's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_officer" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - -/obj/item/clothing/head/beret/sec/corporate/hos - name = "Head of Security beret" - desc = "A corporate black beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_hos" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - -/obj/item/clothing/head/beret/sec/corporate/warden - name = "warden beret" - desc = "A corporate black beret with a warden's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_warden" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - -/obj/item/clothing/head/helmet/warden - name = "warden's helmet" - desc = "Standard Warden gear. Protects the head from impacts." - -/obj/item/clothing/head/helmet/warden/hat - name = "warden's hat" - desc = "It's a special hat issued to the Warden of a securiy force." - icon_state = "policehelm" - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/HoS - name = "Head of Security helmet" - desc = "Standard Head of Security gear. Protects the head from impacts." - -/obj/item/clothing/head/helmet/HoS/hat - name = "Head of Security Hat" - desc = "The hat of the Head of Security. For showing the officers who's in charge." - icon_state = "hoscap" - valid_accessory_slots = null - -/obj/item/clothing/head/helmet/dermal - name = "Dermal Armour Patch" - desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." - icon_state = "dermal" - item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "") - valid_accessory_slots = null - show_examine = FALSE - flags_inv = null - -/obj/item/clothing/head/det - name = "detective fedora" - desc = "A specially designed fedora that is woven with protective fibers. It also makes you look cool." - icon_state = "fedora_brown" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) - armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - valid_accessory_slots = null - show_examine = FALSE - -/obj/item/clothing/head/det/grey - icon_state = "fedora_grey" - -/obj/item/clothing/head/beret/engineering - name = "engineering beret" - desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety." - icon_state = "beret_orange" - -/obj/item/clothing/head/beret/purple - name = "purple beret" - desc = "A stylish, if purple, beret." - icon_state = "beret_purpleyellow" - -/obj/item/clothing/head/beret/centcom/officer - name = "officers beret" - desc = "A dark blue beret adorned with a silver patch. Worn by NanoTrasen Officials." - icon_state = "beret_centcom_officer" - item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") - -/obj/item/clothing/head/beret/centcom/captain - name = "captains beret" - desc = "A white beret adorned with a blue patch. Worn by NanoTrasen command staff." - icon_state = "beret_centcom_captain" - item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") - -/obj/item/clothing/head/beret/sec/gov - name = "officer beret" - desc = "A black beret with a gold emblem." - icon_state = "beret_corporate_hos" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - - -//Medical -/obj/item/clothing/head/surgery - name = "surgical cap" - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." - icon_state = "surgcap_blue" - item_state_slots = list(slot_r_hand_str = "beret_blue", slot_l_hand_str = "beret_blue") - flags_inv = BLOCKHEADHAIR - -/obj/item/clothing/head/surgery/purple - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple." - icon_state = "surgcap_purple" - item_state_slots = list(slot_r_hand_str = "beret_purple", slot_l_hand_str = "beret_purple") - -/obj/item/clothing/head/surgery/blue - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is baby blue." - icon_state = "surgcap_blue" - item_state_slots = list(slot_r_hand_str = "beret_blue", slot_l_hand_str = "beret_blue") - -/obj/item/clothing/head/surgery/green - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is dark green." - icon_state = "surgcap_green" - item_state_slots = list(slot_r_hand_str = "beret_green", slot_l_hand_str = "beret_green") - -/obj/item/clothing/head/surgery/black - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black." - icon_state = "surgcap_black" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - -/obj/item/clothing/head/surgery/navyblue - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue." - icon_state = "surgcap_navyblue" - item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") - -/obj/item/clothing/head/beret/medical - name = "medical officer's beret" - desc = "A fancy beret with a blue cross, smells sterile." - icon_state = "beretmed" - -/obj/item/clothing/head/beret/medical/chem - name = "chemist's beret" - desc = "A fancy beret with an orange beaker. You're not sure if you should smell it." - icon_state = "beretchem" - -/obj/item/clothing/head/beret/medical/viro - name = "virologist's beret" - desc = "A fancy beret with a green cross. Hopefully it's virus free!" - icon_state = "beretviro" - -/obj/item/clothing/head/beret/medical/cmo - name = "chief medical officer's beret" - desc = "A fancy beret with a green cross, signifying your status in the station's medbay." - icon_state = "beretcmo" - -/obj/item/clothing/head/beret/medical/cmo/blue - name = "chief medical officer's beret" - desc = "A fancy beret with a blue and white cross. Try not to be the chief malpractice officer in it!" - icon_state = "beretcmoblue" - -//Science - -/obj/item/clothing/head/beret/science - name = "scientist's beret" - desc = "A scientist's beret. Looks like it's covered in slime." - icon_state = "beretsci" - -/obj/item/clothing/head/beret/science/robotics - name = "roboticist's beret" - desc = "A roboticist's beret. It strongly smells of oil." - icon_state = "beretrobo" - -/obj/item/clothing/head/beret/science/rd - name = "research director's beret" - desc = "A beret worn only by highly intelligent people. Or so its wearers say." - icon_state = "beretrd" - -//Chief Engineer -/obj/item/clothing/head/beret/engineering/ce - name = "chief engineer's beret" - desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." - icon_state = "beretce" - -/obj/item/clothing/head/beret/engineering/ce/white - name = "chief engineer's white beret" - desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." - icon_state = "beretcewhite" - -//Quartermaster -/obj/item/clothing/head/beret/qm - name = "quartermaster's beret" - desc = "This headwear shows off your Cargonian leadership." + +//Bartender +/obj/item/clothing/head/chefhat + name = "chef's hat" + desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." + icon_state = "chefhat" + +/obj/item/clothing/head/hairnet + name = "hairnet" + desc = "A hairnet used to keep the hair out of the way and out of the food." + icon_state = "hairnet" + sprite_sheets = list( + SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi' + ) + +//Captain +/obj/item/clothing/head/caphat + name = "site manager's hat" + icon_state = "captain" + desc = "It's good being the king." + body_parts_covered = 0 + +/obj/item/clothing/head/caphat/cap + name = "site manager's cap" + desc = "You fear to wear it for the negligence it brings." + icon_state = "capcap" + +/obj/item/clothing/head/caphat/formal + name = "parade hat" + desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." + icon_state = "officercap" + +/obj/item/clothing/head/caphat/beret + name = "captain's beret" + desc = "A beret fit for a leader." + icon_state = "beretcap" + +//HOP +/obj/item/clothing/head/caphat/hop + name = "crew resource's hat" + desc = "A stylish hat that both protects you from enraged former-crewmembers and gives you a false sense of authority." + icon_state = "hopcap" + +/obj/item/clothing/head/caphat/hop/beret + name = "head of personnel's beret" + desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." + icon_state = "berethop" + +/obj/item/clothing/head/caphat/hop/beret/white + name = "head of personnel's white beret" + desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." + icon_state = "berethopwhite" + +//Chaplain +/obj/item/clothing/head/chaplain_hood + name = "chaplain's hood" + desc = "It's a hood that covers the head. It keeps you warm during the space winters." + icon_state = "chaplain_hood" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + flags_inv = BLOCKHAIR + body_parts_covered = HEAD + +//Chaplain but spookier +/obj/item/clothing/head/chaplain_hood/whiteout + name = "white hood" + desc = "It's a generic white hood. Very spooky." + icon_state = "whiteout_hood" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + +//Chaplain +/obj/item/clothing/head/nun_hood + name = "nun hood" + desc = "Maximum piety in this star system." + icon_state = "nun_hood" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + flags_inv = BLOCKHAIR + body_parts_covered = HEAD + +//Mime +/obj/item/clothing/head/beret + name = "beret" + desc = "A beret, an artists favorite headwear." + icon_state = "beret" + body_parts_covered = 0 + +//Security +/obj/item/clothing/head/beret/sec + name = "security beret" + desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." + icon_state = "beret_officer" + item_state_slots = list(slot_r_hand_str = "beret", slot_l_hand_str = "beret") + +/obj/item/clothing/head/beret/sec/navy/officer + name = "officer beret" + desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_navy_officer" + item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") + +/obj/item/clothing/head/beret/sec/navy/hos + name = "Head of Security beret" + desc = "A navy blue beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_navy_hos" + item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") + +/obj/item/clothing/head/beret/sec/navy/warden + name = "warden beret" + desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_navy_warden" + item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") + +/obj/item/clothing/head/beret/sec/corporate/officer + name = "officer beret" + desc = "A corporate black beret with an officer's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_corporate_officer" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + +/obj/item/clothing/head/beret/sec/corporate/hos + name = "Head of Security beret" + desc = "A corporate black beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_corporate_hos" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + +/obj/item/clothing/head/beret/sec/corporate/warden + name = "warden beret" + desc = "A corporate black beret with a warden's rank emblem. For officers that are more inclined towards style than safety." + icon_state = "beret_corporate_warden" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + +/obj/item/clothing/head/helmet/warden + name = "warden's helmet" + desc = "Standard Warden gear. Protects the head from impacts." + +/obj/item/clothing/head/helmet/warden/hat + name = "warden's hat" + desc = "It's a special hat issued to the Warden of a securiy force." + icon_state = "policehelm" + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/HoS + name = "Head of Security helmet" + desc = "Standard Head of Security gear. Protects the head from impacts." + +/obj/item/clothing/head/helmet/HoS/hat + name = "Head of Security Hat" + desc = "The hat of the Head of Security. For showing the officers who's in charge." + icon_state = "hoscap" + valid_accessory_slots = null + +/obj/item/clothing/head/helmet/dermal + name = "Dermal Armour Patch" + desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." + icon_state = "dermal" + item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "") + valid_accessory_slots = null + show_examine = FALSE + flags_inv = null + +/obj/item/clothing/head/det + name = "detective fedora" + desc = "A specially designed fedora that is woven with protective fibers. It also makes you look cool." + icon_state = "fedora_brown" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) + armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + valid_accessory_slots = null + show_examine = FALSE + +/obj/item/clothing/head/det/grey + icon_state = "fedora_grey" + +/obj/item/clothing/head/beret/engineering + name = "engineering beret" + desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety." + icon_state = "beret_orange" + +/obj/item/clothing/head/beret/purple + name = "purple beret" + desc = "A stylish, if purple, beret." + icon_state = "beret_purpleyellow" + +/obj/item/clothing/head/beret/centcom/officer + name = "officers beret" + desc = "A dark blue beret adorned with a silver patch. Worn by NanoTrasen Officials." + icon_state = "beret_centcom_officer" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + +/obj/item/clothing/head/beret/centcom/captain + name = "captains beret" + desc = "A white beret adorned with a blue patch. Worn by NanoTrasen command staff." + icon_state = "beret_centcom_captain" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + +/obj/item/clothing/head/beret/sec/gov + name = "officer beret" + desc = "A black beret with a gold emblem." + icon_state = "beret_corporate_hos" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + + +//Medical +/obj/item/clothing/head/surgery + name = "surgical cap" + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." + icon_state = "surgcap_blue" + item_state_slots = list(slot_r_hand_str = "beret_blue", slot_l_hand_str = "beret_blue") + flags_inv = BLOCKHEADHAIR + +/obj/item/clothing/head/surgery/purple + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple." + icon_state = "surgcap_purple" + item_state_slots = list(slot_r_hand_str = "beret_purple", slot_l_hand_str = "beret_purple") + +/obj/item/clothing/head/surgery/blue + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is baby blue." + icon_state = "surgcap_blue" + item_state_slots = list(slot_r_hand_str = "beret_blue", slot_l_hand_str = "beret_blue") + +/obj/item/clothing/head/surgery/green + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is dark green." + icon_state = "surgcap_green" + item_state_slots = list(slot_r_hand_str = "beret_green", slot_l_hand_str = "beret_green") + +/obj/item/clothing/head/surgery/black + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black." + icon_state = "surgcap_black" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + +/obj/item/clothing/head/surgery/navyblue + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue." + icon_state = "surgcap_navyblue" + item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") + +/obj/item/clothing/head/beret/medical + name = "medical officer's beret" + desc = "A fancy beret with a blue cross, smells sterile." + icon_state = "beretmed" + +/obj/item/clothing/head/beret/medical/chem + name = "chemist's beret" + desc = "A fancy beret with an orange beaker. You're not sure if you should smell it." + icon_state = "beretchem" + +/obj/item/clothing/head/beret/medical/viro + name = "virologist's beret" + desc = "A fancy beret with a green cross. Hopefully it's virus free!" + icon_state = "beretviro" + +/obj/item/clothing/head/beret/medical/cmo + name = "chief medical officer's beret" + desc = "A fancy beret with a green cross, signifying your status in the station's medbay." + icon_state = "beretcmo" + +/obj/item/clothing/head/beret/medical/cmo/blue + name = "chief medical officer's beret" + desc = "A fancy beret with a blue and white cross. Try not to be the chief malpractice officer in it!" + icon_state = "beretcmoblue" + +//Science + +/obj/item/clothing/head/beret/science + name = "scientist's beret" + desc = "A scientist's beret. Looks like it's covered in slime." + icon_state = "beretsci" + +/obj/item/clothing/head/beret/science/robotics + name = "roboticist's beret" + desc = "A roboticist's beret. It strongly smells of oil." + icon_state = "beretrobo" + +/obj/item/clothing/head/beret/science/rd + name = "research director's beret" + desc = "A beret worn only by highly intelligent people. Or so its wearers say." + icon_state = "beretrd" + +//Chief Engineer +/obj/item/clothing/head/beret/engineering/ce + name = "chief engineer's beret" + desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." + icon_state = "beretce" + +/obj/item/clothing/head/beret/engineering/ce/white + name = "chief engineer's white beret" + desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." + icon_state = "beretcewhite" + +//Quartermaster +/obj/item/clothing/head/beret/qm + name = "quartermaster's beret" + desc = "This headwear shows off your Cargonian leadership." icon_state = "beretqm" \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 72af6c0380..e4d98893b9 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -1,565 +1,565 @@ -/obj/item/clothing/head/centhat - name = "\improper CentCom. hat" - icon_state = "centcom" - desc = "It's good to be emperor." - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/centhat/customs - name = "Customs Hat" - desc = "A formal hat for SolGov Customs Officers." - icon_state = "customshat" - -/obj/item/clothing/head/halo - name = "halo" - desc = "a small metal ring, floating above it's wearer." - icon_state = "halo" - -/obj/item/clothing/head/headband/maid/modern - name = "modern maid headband" - desc = "Just like from my Japanese cartoons!" - icon_state = "maid_headband" - -/obj/item/clothing/head/pin - icon_state = "pin" - addblends = "pin_a" - name = "hair pin" - desc = "A nice hair pin." - slot_flags = SLOT_HEAD | SLOT_EARS - body_parts_covered = 0 - drop_sound = 'sound/items/drop/accessory.ogg' - pickup_sound = 'sound/items/pickup/accessory.ogg' - -/obj/item/clothing/head/pin/pink - icon_state = "pinkpin" - addblends = null - name = "pink hair hat" - -/obj/item/clothing/head/pin/clover - icon_state = "cloverpin" - name = "clover pin" - addblends = null - desc = "A hair pin in the shape of a clover leaf." - -/obj/item/clothing/head/pin/butterfly - icon_state = "butterflypin" - name = "butterfly pin" - addblends = null - desc = "A hair pin in the shape of a bright blue butterfly." - -/obj/item/clothing/head/pin/magnetic - icon_state = "magnetpin" - name = "magnetic 'pin'" - addblends = null - desc = "Finally, a hair pin even a Morpheus chassis can use." - matter = list(MAT_STEEL = 10) - -/obj/item/clothing/head/pin/flower - name = "red flower pin" - icon_state = "hairflower" - addblends = null - desc = "Smells nice." - -/obj/item/clothing/head/pin/flower/blue - icon_state = "hairflower_blue" - name = "blue flower pin" - -/obj/item/clothing/head/pin/flower/pink - icon_state = "hairflower_pink" - name = "pink flower pin" - -/obj/item/clothing/head/pin/flower/yellow - icon_state = "hairflower_yellow" - name = "yellow flower pin" - -/obj/item/clothing/head/pin/flower/violet - icon_state = "hairflower_violet" - name = "violet flower pin" - -/obj/item/clothing/head/pin/flower/orange - icon_state = "hairflower_orange" - name = "orange flower pin" - -/obj/item/clothing/head/pin/flower/white - icon_state = "hairflower_white" - addblends = "hairflower_white_a" - name = "flower pin" - -/obj/item/clothing/head/pin/bow - icon_state = "bow" - addblends = "bow_a" - name = "hair bow" - desc = "A ribbon tied into a bow with a clip on the back to attach to hair." - item_state_slots = list(slot_r_hand_str = "pill", slot_l_hand_str = "pill") - -/obj/item/clothing/head/pin/bow/big - icon_state = "whiteribbon" - name = "ribbon" - -/obj/item/clothing/head/pin/bow/big/red - icon_state = "redribbon" - name = "red ribbon" - addblends = null - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "A powdered wig." - icon_state = "pwig" - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - item_state_slots = list(slot_r_hand_str = "pirate", slot_l_hand_str = "pirate") - desc = "'I guess it's a redhead.'" - body_parts_covered = 0 - -/obj/item/clothing/head/mailman - name = "station cap" - icon_state = "mailman" - item_state_slots = list(slot_r_hand_str = "hopcap", slot_l_hand_str = "hopcap") - desc = "Choo-choo!" - body_parts_covered = 0 - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "These were once used by Plague doctors, allegedly. They're pretty much useless." - icon_state = "plaguedoctor" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - permeability_coefficient = 0.01 - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/plaguedoctorhat/gold - name = "golden plague doctor's hat" - desc = "These were once used by plague doctors, allegedly. This one has gold accents." - icon_state = "plaguedoctor2" - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "It's unspeakably stylish" - icon_state = "hasturhood" - item_state_slots = list(slot_r_hand_str = "enginering_beret", slot_l_hand_str = "enginering_beret") - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/nursehat - name = "nurse's hat" - desc = "It allows quick identification of trained medical personnel." - icon_state = "nursehat" - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/syndicatefake - name = "red space-helmet replica" - item_state_slots = list(slot_r_hand_str = "syndicate-helm-black-red", slot_l_hand_str = "syndicate-helm-black-red") - icon_state = "syndicate" - desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - siemens_coefficient = 2.0 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?" - icon_state = "cueball" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/greenbandana - name = "green bandana" - desc = "It's a green bandana with some fine nanotech lining." - icon_state = "greenbandana" - flags_inv = 0 - body_parts_covered = 0 - -/obj/item/clothing/head/cardborg - name = "cardborg helmet" - desc = "A helmet made out of a box." - icon_state = "cardborg_h" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - body_parts_covered = HEAD|FACE|EYES - drop_sound = 'sound/items/drop/cardboardbox.ogg' - pickup_sound = 'sound/items/pickup/cardboardbox.ogg' - -/obj/item/clothing/head/justice - name = "justice hat" - desc = "fight for what's righteous!" - icon_state = "justicered" //Does this even exist? - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|EYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "A pair of rabbit ears!" //CHOMPEDIT:weird description bgone - icon_state = "bunny" - body_parts_covered = 0 - -/obj/item/clothing/head/flatcap - name = "flat cap" - desc = "A working man's cap." - icon_state = "flat_cap" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - siemens_coefficient = 0.9 //...what? - -/obj/item/clothing/head/flatcap/grey - icon_state = "flat_capw" - addblends = "flat_capw_a" - item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft") - -/obj/item/clothing/head/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - body_parts_covered = 0 - -/obj/item/clothing/head/hgpiratecap - name = "pirate hat" - desc = "Yarr." - icon_state = "hgpiratecap" - item_state_slots = list(slot_r_hand_str = "hoscap", slot_l_hand_str = "hoscap") - body_parts_covered = 0 - -/obj/item/clothing/head/bandana - name = "pirate bandana" - desc = "Yarr." - icon_state = "bandana" - item_state_slots = list(slot_r_hand_str = "redbandana", slot_l_hand_str = "redbandana") - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "Eeeee~heheheheheheh!" - icon_state = "witch" - flags_inv = BLOCKHAIR - siemens_coefficient = 2.0 - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "Bkaw!" - icon_state = "chickenhead" - flags_inv = BLOCKHAIR - siemens_coefficient = 0.7 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/bearpelt - name = "bear pelt hat" - desc = "Fuzzy." - icon_state = "bearpelt" - item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") - flags_inv = BLOCKHAIR - siemens_coefficient = 0.7 - -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - item_state_slots = list(slot_r_hand_str = "xenos_helm", slot_l_hand_str = "xenos_helm") - desc = "A helmet made out of chitinous alien hide." - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - siemens_coefficient = 2.0 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/philosopher_wig - name = "natural philosopher's wig" - desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!" - icon_state = "philosopher_wig" - item_state_slots = list(slot_r_hand_str = "pwig", slot_l_hand_str = "pwig") - flags_inv = BLOCKHAIR - siemens_coefficient = 2.0 //why is it so conductive?! - body_parts_covered = 0 - -/obj/item/clothing/head/orangebandana //themij: Taryn Kifer - name = "orange bandana" - desc = "An orange piece of cloth, worn on the head." - icon_state = "orange_bandana" - body_parts_covered = 0 - -/obj/item/clothing/head/hijab - name = "hijab" - desc = "A veil that is wrapped to cover the head and chest" - icon_state = "hijab" - addblends = "hijab_a" - item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") - body_parts_covered = 0 - flags_inv = BLOCKHAIR - -/obj/item/clothing/head/kippa - name = "kippa" - desc = "A small, brimless cap." - icon_state = "kippa" - addblends = "kippa_a" - body_parts_covered = 0 - -/obj/item/clothing/head/turban - name = "turban" - desc = "A cloth used to wind around the head" - icon_state = "turban" - addblends = "turban_a" - item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") - body_parts_covered = 0 - flags_inv = BLOCKHEADHAIR - -/obj/item/clothing/head/taqiyah - name = "taqiyah" - desc = "A short, rounded skullcap usually worn for religious purposes." - icon_state = "taqiyah" - addblends = "taqiyah_a" - item_state_slots = list(slot_r_hand_str = "taq", slot_l_hand_str = "taq") - -/obj/item/clothing/head/beanie - name = "beanie" - desc = "A head-hugging brimless winter cap. This one is tight." - icon_state = "beanie" - addblends = "beanie_a" - body_parts_covered = 0 - -/obj/item/clothing/head/beanie_loose - name = "loose beanie" - desc = "A head-hugging brimless winter cap. This one is loose." - icon_state = "beanie_hang" - addblends = "beanie_hang_a" - body_parts_covered = 0 - -/obj/item/clothing/head/beretg - name = "beret" - desc = "A beret, an artists favorite headwear." - icon_state = "beret_g" - addblends = "beret_g_a" - body_parts_covered = 0 - -/obj/item/clothing/head/sombrero - name = "sombrero" - desc = "A wide-brimmed hat popularly worn in Mexico." - icon_state = "sombrero" - body_parts_covered = 0 - -/obj/item/clothing/head/headband/maid - name = "maid headband" - desc = "Keeps hair out of the way for important... jobs." - icon_state = "maid" - body_parts_covered = 0 - -/obj/item/clothing/head/maangtikka - name = "maang tikka" - desc = "A jeweled headpiece originating in India." - icon_state = "maangtikka" - body_parts_covered = 0 - drop_sound = 'sound/items/drop/ring.ogg' - pickup_sound = 'sound/items/pickup/ring.ogg' - -/obj/item/clothing/head/jingasa - name = "jingasa" - desc = "A wide, flat rain hat originally from Japan." - icon_state = "jingasa" - body_parts_covered = 0 - item_state_slots = list(slot_r_hand_str = "taq", slot_l_hand_str = "taq") - -/obj/item/clothing/head/cowl - name = "black cowl" - desc = "A gold-lined black cowl. It gives off uncomfortable cult vibes, but fancy." - icon_state = "cowl" - body_parts_covered = 0 - -/obj/item/clothing/head/cowl - name = "white cowl" - desc = "A gold-lined white cowl. It gives off uncomfortable cult vibes, but fancy." - icon_state = "whitecowl" - body_parts_covered = 0 - -/obj/item/clothing/head/blackngoldheaddress - name = "black and gold headdress" - desc = "An odd looking headdress that covers the eyes." - icon_state = "blackngoldheaddress" - flags_inv = HIDEEYES - body_parts_covered = HEAD|EYES - -//Corporate Berets - -/obj/item/clothing/head/beret/corp/saare - name = "\improper SAARE beret" - desc = "A red beret denoting service with Stealth Assault Enterprises. For mercenaries that are more inclined towards style than safety." - icon_state = "beret_red" - -/obj/item/clothing/head/beret/corp/saare/officer - name = "\improper SAARE officer beret" - desc = "A red beret with a gold insignia, denoting senior service with Stealth Assault Enterprises. For mercenaries who are more inclined towards style than safety." - icon_state = "beret_redgold" - -/obj/item/clothing/head/beret/corp/pcrc - name = "\improper PCRC beret" - desc = "A black beret with a PCRC logo insignia, denoting service with Proxima Centauri Risk Control. For private security personnel that are more inclined towards style than safety." - icon_state = "beret_black_observatory" - - -/obj/item/clothing/head/beret/corp/hedberg - name = "\improper Hedberg-Hammarstrom beret" - desc = "A tan beret denoting service with Hedberg-Hammarstrom private security. For mercenaries who are more inclined towards style than safety." - icon_state = "beret_tan" - -/obj/item/clothing/head/beret/corp/xion - name = "\improper Xion beret" - desc = "An orange beret denoting employment with Xion Manufacturing. For personnel that are more inclined towards style than safety." - icon_state = "beret_orange" - -//Stylish Hats - -/obj/item/clothing/head/bowler - name = "bowler hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - body_parts_covered = 0 - -/obj/item/clothing/head/that - name = "top-hat" - desc = "It's an amish looking hat." - icon_state = "tophat" - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/beaverhat - name = "beaver hat" - desc = "Soft felt makes this hat both comfortable and elegant." - icon_state = "beaver_hat" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/boaterhat - name = "boater hat" - desc = "The ultimate in summer fashion." - icon_state = "boater_hat" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - body_parts_covered = 0 - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora_grey" - desc = "A sharp, stylish hat that's grey in color." - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - body_parts_covered = 0 - -/obj/item/clothing/head/fedora/brown - desc = "A brown fedora. Perfect for detectives or those trying to pilfer artifacts." - icon_state = "fedora_brown" - allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) - -/obj/item/clothing/head/fedora/white - desc = "A white fedora, really cool hat if you're a mobster. A really lame hat if you're not." - icon_state = "fedora_white" - -/obj/item/clothing/head/fedora/beige - desc = "A beige fedora. Either the cornerstone of a reporter's style or a poor attempt at looking cool. Depends on the person wearing it." - icon_state = "fedora_beige" - -/obj/item/clothing/head/fedora/panama - desc = "A fancy, cream colored fedora. Columbian pure." - icon_state = "fedora_panama" - -/obj/item/clothing/head/trilby - name = "trilby" - icon_state = "trilby" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "M'lady" - -/obj/item/clothing/head/trilby/feather - name = "feather trilby" - icon_state = "feather_trilby" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "A sharp, stylish hat with a feather." - -/obj/item/clothing/head/fez - name = "fez" - icon_state = "fez" - desc = "You should wear a fez. Fezzes are cool." - -//Cowboy Hats - -/obj/item/clothing/head/cowboy - name = "cowboy hat" - desc = "For those that have spurs that go jingle jangle jingle." - icon_state = "cowboy_1" - body_parts_covered = 0 - -/obj/item/clothing/head/cowboy/rattan - name = "rattan cowboy hat" - desc = "Made from the same straw harvested from the fields." - icon_state = "cowboy_2" - -/obj/item/clothing/head/cowboy/dark - name = "dark cowboy hat" - desc = "Protect yer head in this new frontier." - icon_state = "cowboy_3" - -/obj/item/clothing/head/cowboy/ranger - name = "ranger cowboy hat" - desc = "Feel the western vibe from this good ol' classic." - icon_state = "cowboy_4" - -/obj/item/clothing/head/cowboy/rustler - name = "rustler cowboy hat" - desc = "Rustle up some of that there cattle bucko." - icon_state = "cowboy_5" - -/obj/item/clothing/head/cowboy/black - name = "black cowboy hat" - desc = "Perfect for the budding tram robber." - icon_state = "cowboy_7" - -/obj/item/clothing/head/cowboy/fancy - name = "fancy cowboy hat" - desc = "Premium black leather had with a rattlesnake hatband to top the ensemble." - icon_state = "cowboy_8" - -/obj/item/clothing/head/cowboy/wide - name = "wide-brimmed cowboy hat" - desc = "Because justice isn't going to dispense itself." - icon_state = "cowboy_6" - -/obj/item/clothing/head/cowboy/bandit - name = "bandit cowboy hat" - desc = "You can almost hear the old western music." - icon_state = "cowboy_9" - -/obj/item/clothing/head/cowboy/small - name = "small cowboy hat" - desc = "For the tiniest of cowboys." - icon_state = "cowboy_small" - -/obj/item/clothing/head/wheat - name = "straw hat" - desc = "It's a hat made from synthetic straw. Brought to you by \"Country Girls LLC.\" the choice brand for the galaxy's working class." - icon_state = "wheat" - -//Ruin Marine (Doom Marine) -/obj/item/clothing/head/marine - name = "marine helmet" - desc = "A marine helmet prop from the popular game 'Ruin'." - icon_state = "marine" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - -//Laser Tag Helmets -/obj/item/clothing/head/bluetag - name = "blue laser tag helmet" - desc = "Blue Pride, Station Wide." - icon_state = "bluetag" - flags_inv = HIDEEARS|BLOCKHEADHAIR - body_parts_covered = HEAD|EYES - -/obj/item/clothing/head/redtag - name = "red laser tag helmet" - desc = "Reputed to go faster." - icon_state = "redtag" - flags_inv = HIDEEARS|BLOCKHEADHAIR - body_parts_covered = HEAD|EYES +/obj/item/clothing/head/centhat + name = "\improper CentCom. hat" + icon_state = "centcom" + desc = "It's good to be emperor." + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/centhat/customs + name = "Customs Hat" + desc = "A formal hat for SolGov Customs Officers." + icon_state = "customshat" + +/obj/item/clothing/head/halo + name = "halo" + desc = "a small metal ring, floating above it's wearer." + icon_state = "halo" + +/obj/item/clothing/head/headband/maid/modern + name = "modern maid headband" + desc = "Just like from my Japanese cartoons!" + icon_state = "maid_headband" + +/obj/item/clothing/head/pin + icon_state = "pin" + addblends = "pin_a" + name = "hair pin" + desc = "A nice hair pin." + slot_flags = SLOT_HEAD | SLOT_EARS + body_parts_covered = 0 + drop_sound = 'sound/items/drop/accessory.ogg' + pickup_sound = 'sound/items/pickup/accessory.ogg' + +/obj/item/clothing/head/pin/pink + icon_state = "pinkpin" + addblends = null + name = "pink hair hat" + +/obj/item/clothing/head/pin/clover + icon_state = "cloverpin" + name = "clover pin" + addblends = null + desc = "A hair pin in the shape of a clover leaf." + +/obj/item/clothing/head/pin/butterfly + icon_state = "butterflypin" + name = "butterfly pin" + addblends = null + desc = "A hair pin in the shape of a bright blue butterfly." + +/obj/item/clothing/head/pin/magnetic + icon_state = "magnetpin" + name = "magnetic 'pin'" + addblends = null + desc = "Finally, a hair pin even a Morpheus chassis can use." + matter = list(MAT_STEEL = 10) + +/obj/item/clothing/head/pin/flower + name = "red flower pin" + icon_state = "hairflower" + addblends = null + desc = "Smells nice." + +/obj/item/clothing/head/pin/flower/blue + icon_state = "hairflower_blue" + name = "blue flower pin" + +/obj/item/clothing/head/pin/flower/pink + icon_state = "hairflower_pink" + name = "pink flower pin" + +/obj/item/clothing/head/pin/flower/yellow + icon_state = "hairflower_yellow" + name = "yellow flower pin" + +/obj/item/clothing/head/pin/flower/violet + icon_state = "hairflower_violet" + name = "violet flower pin" + +/obj/item/clothing/head/pin/flower/orange + icon_state = "hairflower_orange" + name = "orange flower pin" + +/obj/item/clothing/head/pin/flower/white + icon_state = "hairflower_white" + addblends = "hairflower_white_a" + name = "flower pin" + +/obj/item/clothing/head/pin/bow + icon_state = "bow" + addblends = "bow_a" + name = "hair bow" + desc = "A ribbon tied into a bow with a clip on the back to attach to hair." + item_state_slots = list(slot_r_hand_str = "pill", slot_l_hand_str = "pill") + +/obj/item/clothing/head/pin/bow/big + icon_state = "whiteribbon" + name = "ribbon" + +/obj/item/clothing/head/pin/bow/big/red + icon_state = "redribbon" + name = "red ribbon" + addblends = null + +/obj/item/clothing/head/powdered_wig + name = "powdered wig" + desc = "A powdered wig." + icon_state = "pwig" + +/obj/item/clothing/head/redcoat + name = "redcoat's hat" + icon_state = "redcoat" + item_state_slots = list(slot_r_hand_str = "pirate", slot_l_hand_str = "pirate") + desc = "'I guess it's a redhead.'" + body_parts_covered = 0 + +/obj/item/clothing/head/mailman + name = "station cap" + icon_state = "mailman" + item_state_slots = list(slot_r_hand_str = "hopcap", slot_l_hand_str = "hopcap") + desc = "Choo-choo!" + body_parts_covered = 0 + +/obj/item/clothing/head/plaguedoctorhat + name = "plague doctor's hat" + desc = "These were once used by Plague doctors, allegedly. They're pretty much useless." + icon_state = "plaguedoctor" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + permeability_coefficient = 0.01 + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/plaguedoctorhat/gold + name = "golden plague doctor's hat" + desc = "These were once used by plague doctors, allegedly. This one has gold accents." + icon_state = "plaguedoctor2" + +/obj/item/clothing/head/hasturhood + name = "hastur's hood" + desc = "It's unspeakably stylish" + icon_state = "hasturhood" + item_state_slots = list(slot_r_hand_str = "enginering_beret", slot_l_hand_str = "enginering_beret") + flags_inv = BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/nursehat + name = "nurse's hat" + desc = "It allows quick identification of trained medical personnel." + icon_state = "nursehat" + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/syndicatefake + name = "red space-helmet replica" + item_state_slots = list(slot_r_hand_str = "syndicate-helm-black-red", slot_l_hand_str = "syndicate-helm-black-red") + icon_state = "syndicate" + desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR + siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/cueball + name = "cueball helmet" + desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?" + icon_state = "cueball" + flags_inv = BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/greenbandana + name = "green bandana" + desc = "It's a green bandana with some fine nanotech lining." + icon_state = "greenbandana" + flags_inv = 0 + body_parts_covered = 0 + +/obj/item/clothing/head/cardborg + name = "cardborg helmet" + desc = "A helmet made out of a box." + icon_state = "cardborg_h" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|FACE|EYES + drop_sound = 'sound/items/drop/cardboardbox.ogg' + pickup_sound = 'sound/items/pickup/cardboardbox.ogg' + +/obj/item/clothing/head/justice + name = "justice hat" + desc = "fight for what's righteous!" + icon_state = "justicered" //Does this even exist? + flags_inv = BLOCKHAIR + body_parts_covered = HEAD|EYES + +/obj/item/clothing/head/justice/blue + icon_state = "justiceblue" + +/obj/item/clothing/head/justice/yellow + icon_state = "justiceyellow" + +/obj/item/clothing/head/justice/green + icon_state = "justicegreen" + +/obj/item/clothing/head/justice/pink + icon_state = "justicepink" + +/obj/item/clothing/head/rabbitears + name = "rabbit ears" + desc = "A pair of rabbit ears!" //CHOMPEDIT:weird description bgone + icon_state = "bunny" + body_parts_covered = 0 + +/obj/item/clothing/head/flatcap + name = "flat cap" + desc = "A working man's cap." + icon_state = "flat_cap" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + siemens_coefficient = 0.9 //...what? + +/obj/item/clothing/head/flatcap/grey + icon_state = "flat_capw" + addblends = "flat_capw_a" + item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft") + +/obj/item/clothing/head/pirate + name = "pirate hat" + desc = "Yarr." + icon_state = "pirate" + body_parts_covered = 0 + +/obj/item/clothing/head/hgpiratecap + name = "pirate hat" + desc = "Yarr." + icon_state = "hgpiratecap" + item_state_slots = list(slot_r_hand_str = "hoscap", slot_l_hand_str = "hoscap") + body_parts_covered = 0 + +/obj/item/clothing/head/bandana + name = "pirate bandana" + desc = "Yarr." + icon_state = "bandana" + item_state_slots = list(slot_r_hand_str = "redbandana", slot_l_hand_str = "redbandana") + +/obj/item/clothing/head/witchwig + name = "witch costume wig" + desc = "Eeeee~heheheheheheh!" + icon_state = "witch" + flags_inv = BLOCKHAIR + siemens_coefficient = 2.0 + +/obj/item/clothing/head/chicken + name = "chicken suit head" + desc = "Bkaw!" + icon_state = "chickenhead" + flags_inv = BLOCKHAIR + siemens_coefficient = 0.7 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/bearpelt + name = "bear pelt hat" + desc = "Fuzzy." + icon_state = "bearpelt" + item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") + flags_inv = BLOCKHAIR + siemens_coefficient = 0.7 + +/obj/item/clothing/head/xenos + name = "xenos helmet" + icon_state = "xenos" + item_state_slots = list(slot_r_hand_str = "xenos_helm", slot_l_hand_str = "xenos_helm") + desc = "A helmet made out of chitinous alien hide." + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR + siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/philosopher_wig + name = "natural philosopher's wig" + desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!" + icon_state = "philosopher_wig" + item_state_slots = list(slot_r_hand_str = "pwig", slot_l_hand_str = "pwig") + flags_inv = BLOCKHAIR + siemens_coefficient = 2.0 //why is it so conductive?! + body_parts_covered = 0 + +/obj/item/clothing/head/orangebandana //themij: Taryn Kifer + name = "orange bandana" + desc = "An orange piece of cloth, worn on the head." + icon_state = "orange_bandana" + body_parts_covered = 0 + +/obj/item/clothing/head/hijab + name = "hijab" + desc = "A veil that is wrapped to cover the head and chest" + icon_state = "hijab" + addblends = "hijab_a" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + body_parts_covered = 0 + flags_inv = BLOCKHAIR + +/obj/item/clothing/head/kippa + name = "kippa" + desc = "A small, brimless cap." + icon_state = "kippa" + addblends = "kippa_a" + body_parts_covered = 0 + +/obj/item/clothing/head/turban + name = "turban" + desc = "A cloth used to wind around the head" + icon_state = "turban" + addblends = "turban_a" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + body_parts_covered = 0 + flags_inv = BLOCKHEADHAIR + +/obj/item/clothing/head/taqiyah + name = "taqiyah" + desc = "A short, rounded skullcap usually worn for religious purposes." + icon_state = "taqiyah" + addblends = "taqiyah_a" + item_state_slots = list(slot_r_hand_str = "taq", slot_l_hand_str = "taq") + +/obj/item/clothing/head/beanie + name = "beanie" + desc = "A head-hugging brimless winter cap. This one is tight." + icon_state = "beanie" + addblends = "beanie_a" + body_parts_covered = 0 + +/obj/item/clothing/head/beanie_loose + name = "loose beanie" + desc = "A head-hugging brimless winter cap. This one is loose." + icon_state = "beanie_hang" + addblends = "beanie_hang_a" + body_parts_covered = 0 + +/obj/item/clothing/head/beretg + name = "beret" + desc = "A beret, an artists favorite headwear." + icon_state = "beret_g" + addblends = "beret_g_a" + body_parts_covered = 0 + +/obj/item/clothing/head/sombrero + name = "sombrero" + desc = "A wide-brimmed hat popularly worn in Mexico." + icon_state = "sombrero" + body_parts_covered = 0 + +/obj/item/clothing/head/headband/maid + name = "maid headband" + desc = "Keeps hair out of the way for important... jobs." + icon_state = "maid" + body_parts_covered = 0 + +/obj/item/clothing/head/maangtikka + name = "maang tikka" + desc = "A jeweled headpiece originating in India." + icon_state = "maangtikka" + body_parts_covered = 0 + drop_sound = 'sound/items/drop/ring.ogg' + pickup_sound = 'sound/items/pickup/ring.ogg' + +/obj/item/clothing/head/jingasa + name = "jingasa" + desc = "A wide, flat rain hat originally from Japan." + icon_state = "jingasa" + body_parts_covered = 0 + item_state_slots = list(slot_r_hand_str = "taq", slot_l_hand_str = "taq") + +/obj/item/clothing/head/cowl + name = "black cowl" + desc = "A gold-lined black cowl. It gives off uncomfortable cult vibes, but fancy." + icon_state = "cowl" + body_parts_covered = 0 + +/obj/item/clothing/head/cowl + name = "white cowl" + desc = "A gold-lined white cowl. It gives off uncomfortable cult vibes, but fancy." + icon_state = "whitecowl" + body_parts_covered = 0 + +/obj/item/clothing/head/blackngoldheaddress + name = "black and gold headdress" + desc = "An odd looking headdress that covers the eyes." + icon_state = "blackngoldheaddress" + flags_inv = HIDEEYES + body_parts_covered = HEAD|EYES + +//Corporate Berets + +/obj/item/clothing/head/beret/corp/saare + name = "\improper SAARE beret" + desc = "A red beret denoting service with Stealth Assault Enterprises. For mercenaries that are more inclined towards style than safety." + icon_state = "beret_red" + +/obj/item/clothing/head/beret/corp/saare/officer + name = "\improper SAARE officer beret" + desc = "A red beret with a gold insignia, denoting senior service with Stealth Assault Enterprises. For mercenaries who are more inclined towards style than safety." + icon_state = "beret_redgold" + +/obj/item/clothing/head/beret/corp/pcrc + name = "\improper PCRC beret" + desc = "A black beret with a PCRC logo insignia, denoting service with Proxima Centauri Risk Control. For private security personnel that are more inclined towards style than safety." + icon_state = "beret_black_observatory" + + +/obj/item/clothing/head/beret/corp/hedberg + name = "\improper Hedberg-Hammarstrom beret" + desc = "A tan beret denoting service with Hedberg-Hammarstrom private security. For mercenaries who are more inclined towards style than safety." + icon_state = "beret_tan" + +/obj/item/clothing/head/beret/corp/xion + name = "\improper Xion beret" + desc = "An orange beret denoting employment with Xion Manufacturing. For personnel that are more inclined towards style than safety." + icon_state = "beret_orange" + +//Stylish Hats + +/obj/item/clothing/head/bowler + name = "bowler hat" + desc = "Gentleman, elite aboard!" + icon_state = "bowler" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + body_parts_covered = 0 + +/obj/item/clothing/head/that + name = "top-hat" + desc = "It's an amish looking hat." + icon_state = "tophat" + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/beaverhat + name = "beaver hat" + desc = "Soft felt makes this hat both comfortable and elegant." + icon_state = "beaver_hat" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/boaterhat + name = "boater hat" + desc = "The ultimate in summer fashion." + icon_state = "boater_hat" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + body_parts_covered = 0 + +/obj/item/clothing/head/fedora + name = "fedora" + icon_state = "fedora_grey" + desc = "A sharp, stylish hat that's grey in color." + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + body_parts_covered = 0 + +/obj/item/clothing/head/fedora/brown + desc = "A brown fedora. Perfect for detectives or those trying to pilfer artifacts." + icon_state = "fedora_brown" + allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) + +/obj/item/clothing/head/fedora/white + desc = "A white fedora, really cool hat if you're a mobster. A really lame hat if you're not." + icon_state = "fedora_white" + +/obj/item/clothing/head/fedora/beige + desc = "A beige fedora. Either the cornerstone of a reporter's style or a poor attempt at looking cool. Depends on the person wearing it." + icon_state = "fedora_beige" + +/obj/item/clothing/head/fedora/panama + desc = "A fancy, cream colored fedora. Columbian pure." + icon_state = "fedora_panama" + +/obj/item/clothing/head/trilby + name = "trilby" + icon_state = "trilby" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + desc = "M'lady" + +/obj/item/clothing/head/trilby/feather + name = "feather trilby" + icon_state = "feather_trilby" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + desc = "A sharp, stylish hat with a feather." + +/obj/item/clothing/head/fez + name = "fez" + icon_state = "fez" + desc = "You should wear a fez. Fezzes are cool." + +//Cowboy Hats + +/obj/item/clothing/head/cowboy + name = "cowboy hat" + desc = "For those that have spurs that go jingle jangle jingle." + icon_state = "cowboy_1" + body_parts_covered = 0 + +/obj/item/clothing/head/cowboy/rattan + name = "rattan cowboy hat" + desc = "Made from the same straw harvested from the fields." + icon_state = "cowboy_2" + +/obj/item/clothing/head/cowboy/dark + name = "dark cowboy hat" + desc = "Protect yer head in this new frontier." + icon_state = "cowboy_3" + +/obj/item/clothing/head/cowboy/ranger + name = "ranger cowboy hat" + desc = "Feel the western vibe from this good ol' classic." + icon_state = "cowboy_4" + +/obj/item/clothing/head/cowboy/rustler + name = "rustler cowboy hat" + desc = "Rustle up some of that there cattle bucko." + icon_state = "cowboy_5" + +/obj/item/clothing/head/cowboy/black + name = "black cowboy hat" + desc = "Perfect for the budding tram robber." + icon_state = "cowboy_7" + +/obj/item/clothing/head/cowboy/fancy + name = "fancy cowboy hat" + desc = "Premium black leather had with a rattlesnake hatband to top the ensemble." + icon_state = "cowboy_8" + +/obj/item/clothing/head/cowboy/wide + name = "wide-brimmed cowboy hat" + desc = "Because justice isn't going to dispense itself." + icon_state = "cowboy_6" + +/obj/item/clothing/head/cowboy/bandit + name = "bandit cowboy hat" + desc = "You can almost hear the old western music." + icon_state = "cowboy_9" + +/obj/item/clothing/head/cowboy/small + name = "small cowboy hat" + desc = "For the tiniest of cowboys." + icon_state = "cowboy_small" + +/obj/item/clothing/head/wheat + name = "straw hat" + desc = "It's a hat made from synthetic straw. Brought to you by \"Country Girls LLC.\" the choice brand for the galaxy's working class." + icon_state = "wheat" + +//Ruin Marine (Doom Marine) +/obj/item/clothing/head/marine + name = "marine helmet" + desc = "A marine helmet prop from the popular game 'Ruin'." + icon_state = "marine" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + +//Laser Tag Helmets +/obj/item/clothing/head/bluetag + name = "blue laser tag helmet" + desc = "Blue Pride, Station Wide." + icon_state = "bluetag" + flags_inv = HIDEEARS|BLOCKHEADHAIR + body_parts_covered = HEAD|EYES + +/obj/item/clothing/head/redtag + name = "red laser tag helmet" + desc = "Reputed to go faster." + icon_state = "redtag" + flags_inv = HIDEEARS|BLOCKHEADHAIR + body_parts_covered = HEAD|EYES diff --git a/code/modules/clothing/head/misc_ch.dm b/code/modules/clothing/head/misc_ch.dm index 680e58adfc..c020327ebe 100644 --- a/code/modules/clothing/head/misc_ch.dm +++ b/code/modules/clothing/head/misc_ch.dm @@ -1,101 +1,101 @@ -/obj/item/clothing/head/wiggler - icon_override = 'icons/vore/misc_ch.dmi' - icon = 'icons/vore/misc_ch.dmi'//lets use our own DMI with blackjack and deers - icon_state = "flailing_helmet" - item_state = "flailing_helmet_worn" - name = "Flailing hat" - desc = "It's a hat, it flails." - body_parts_covered = 0 - -/obj/item/clothing/head/wiggler/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) - var/image/so_far = ..() - so_far.pixel_y += 16 - so_far.pixel_x += 0 - return so_far - -/obj/item/clothing/head/soft/purple/wah - name = "assistant cap" - desc = "What a lovely purple cap, its said its given out as a trophy to assistants. Why does that sound so depressing?" - icon_state = "wahcap" - item_state_slots = list(slot_r_hand_str = "wahcap", slot_l_hand_str = "wahcap") - icon = 'icons/obj/clothing/hats_ch.dmi' - icon_override = 'modular_chomp/icons/mob/head_ch.dmi' - - -/obj/item/clothing/head/crown //Generic crown doesnt exist, no sprites - icon = 'icons/obj/clothing/hats_ch.dmi' - icon_override = 'modular_chomp/icons/mob/head_ch.dmi' - icon_state = "crown" - item_state = "crown" - name = "crown" - desc = "A crown, it's pretty." - body_parts_covered = 0 - -/obj/item/clothing/head/crown/goose_king - name = "Crown of the golden goose king" - desc = "It's the crown given to the goose king from the golden goose casino, what an honor!" - icon = 'icons/obj/clothing/hats_ch.dmi' - icon_override = 'modular_chomp/icons/mob/head_ch.dmi' - icon_state = "goose_king" - item_state = "goose_king" - -/obj/item/clothing/head/crown/goose_king/christmas - name = "Crown of the Goose King of Holiday Spirit" - desc = "It's the crown from the golden goose casino of the Goose King! Given to the one to uphold christmas spirit on Southern Cross, merry christmas!" - - -/obj/item/clothing/head/crown/goose_queen - name = "Crown of the golden goose queen" - desc = "It's the crown given to the goose queen from the golden goose casino, what an honor!" - icon = 'icons/obj/clothing/hats_ch.dmi' - icon_override = 'modular_chomp/icons/mob/head_ch.dmi' - icon_state = "goose_queen" - item_state = "goose_queen" - -/obj/item/clothing/head/crown/goose_queen/christmas - name = "Crown of the Goose Queen of Holiday Cheer" - desc = "It's the crown from the golden goose casino of the Goose Queen! Given to the one to spread christmas cheer on Southern Cross, happy holidays!" - -/obj/item/clothing/head/pelt - name = "Bear pelt" - desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through winter." - icon = 'icons/obj/clothing/hats_ch.dmi' - icon_override = 'modular_chomp/icons/mob/head_ch.dmi' - icon_state = "bearpelt_brown" - item_state = "bearpelt_brown" - -/obj/item/clothing/head/pelt/black - icon_state = "bearpelt_black" - item_state = "bearpelt_black" - -/obj/item/clothing/head/pelt/wolfpelt - name = "Wolf pelt" - desc = "A fuzzy wolf pelt, demanding respect as a hunter, well if it isn't synthetic or anything at least. Or bought." - icon_override = 'icons/mob/wolfpelt_ch.dmi' - icon_state = "wolfpelt_brown" - item_state = "wolfpelt_brown" - -/obj/item/clothing/head/pelt/wolfpeltblack - name = "Wolf pelt" - desc = "A fuzzy wolf pelt, demanding respect as a hunter, well if it isn't synthetic or anything at least. Or bought." - icon_override = 'icons/mob/wolfpelt_ch.dmi' - icon_state = "wolfpelt_gray" - item_state = "wolfpelt_gray" - -/obj/item/clothing/head/pelt/tigerpelt - name = "Shiny tiger pelt" - desc = "A vibrant tiger pelt, particularly fabulous." - icon_state = "tigerpelt_shiny" - item_state = "tigerpelt_shiny" - -/obj/item/clothing/head/pelt/tigerpeltsnow - name = "Snow tiger pelt" - desc = "A pelt of a less vibrant tiger, but rather warm." - icon_state = "tigerpelt_snow" - item_state = "tigerpelt_snow" - -/obj/item/clothing/head/pelt/tigerpeltpink - name = "Pink tiger pelt" - desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties." - icon_state = "tigerpelt_pink" +/obj/item/clothing/head/wiggler + icon_override = 'icons/vore/misc_ch.dmi' + icon = 'icons/vore/misc_ch.dmi'//lets use our own DMI with blackjack and deers + icon_state = "flailing_helmet" + item_state = "flailing_helmet_worn" + name = "Flailing hat" + desc = "It's a hat, it flails." + body_parts_covered = 0 + +/obj/item/clothing/head/wiggler/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) + var/image/so_far = ..() + so_far.pixel_y += 16 + so_far.pixel_x += 0 + return so_far + +/obj/item/clothing/head/soft/purple/wah + name = "assistant cap" + desc = "What a lovely purple cap, its said its given out as a trophy to assistants. Why does that sound so depressing?" + icon_state = "wahcap" + item_state_slots = list(slot_r_hand_str = "wahcap", slot_l_hand_str = "wahcap") + icon = 'icons/obj/clothing/hats_ch.dmi' + icon_override = 'modular_chomp/icons/mob/head_ch.dmi' + + +/obj/item/clothing/head/crown //Generic crown doesnt exist, no sprites + icon = 'icons/obj/clothing/hats_ch.dmi' + icon_override = 'modular_chomp/icons/mob/head_ch.dmi' + icon_state = "crown" + item_state = "crown" + name = "crown" + desc = "A crown, it's pretty." + body_parts_covered = 0 + +/obj/item/clothing/head/crown/goose_king + name = "Crown of the golden goose king" + desc = "It's the crown given to the goose king from the golden goose casino, what an honor!" + icon = 'icons/obj/clothing/hats_ch.dmi' + icon_override = 'modular_chomp/icons/mob/head_ch.dmi' + icon_state = "goose_king" + item_state = "goose_king" + +/obj/item/clothing/head/crown/goose_king/christmas + name = "Crown of the Goose King of Holiday Spirit" + desc = "It's the crown from the golden goose casino of the Goose King! Given to the one to uphold christmas spirit on Southern Cross, merry christmas!" + + +/obj/item/clothing/head/crown/goose_queen + name = "Crown of the golden goose queen" + desc = "It's the crown given to the goose queen from the golden goose casino, what an honor!" + icon = 'icons/obj/clothing/hats_ch.dmi' + icon_override = 'modular_chomp/icons/mob/head_ch.dmi' + icon_state = "goose_queen" + item_state = "goose_queen" + +/obj/item/clothing/head/crown/goose_queen/christmas + name = "Crown of the Goose Queen of Holiday Cheer" + desc = "It's the crown from the golden goose casino of the Goose Queen! Given to the one to spread christmas cheer on Southern Cross, happy holidays!" + +/obj/item/clothing/head/pelt + name = "Bear pelt" + desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through winter." + icon = 'icons/obj/clothing/hats_ch.dmi' + icon_override = 'modular_chomp/icons/mob/head_ch.dmi' + icon_state = "bearpelt_brown" + item_state = "bearpelt_brown" + +/obj/item/clothing/head/pelt/black + icon_state = "bearpelt_black" + item_state = "bearpelt_black" + +/obj/item/clothing/head/pelt/wolfpelt + name = "Wolf pelt" + desc = "A fuzzy wolf pelt, demanding respect as a hunter, well if it isn't synthetic or anything at least. Or bought." + icon_override = 'icons/mob/wolfpelt_ch.dmi' + icon_state = "wolfpelt_brown" + item_state = "wolfpelt_brown" + +/obj/item/clothing/head/pelt/wolfpeltblack + name = "Wolf pelt" + desc = "A fuzzy wolf pelt, demanding respect as a hunter, well if it isn't synthetic or anything at least. Or bought." + icon_override = 'icons/mob/wolfpelt_ch.dmi' + icon_state = "wolfpelt_gray" + item_state = "wolfpelt_gray" + +/obj/item/clothing/head/pelt/tigerpelt + name = "Shiny tiger pelt" + desc = "A vibrant tiger pelt, particularly fabulous." + icon_state = "tigerpelt_shiny" + item_state = "tigerpelt_shiny" + +/obj/item/clothing/head/pelt/tigerpeltsnow + name = "Snow tiger pelt" + desc = "A pelt of a less vibrant tiger, but rather warm." + icon_state = "tigerpelt_snow" + item_state = "tigerpelt_snow" + +/obj/item/clothing/head/pelt/tigerpeltpink + name = "Pink tiger pelt" + desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties." + icon_state = "tigerpelt_pink" item_state = "tigerpelt_pink" \ No newline at end of file diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index c2c597ad7b..1d1742bca9 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -1,114 +1,114 @@ -/obj/item/clothing/head/soft - name = "cargo cap" - desc = "It's a peaked cap in a tasteless yellow color." - icon_state = "cargosoft" - item_state_slots = list(slot_r_hand_str = "cargosoft", slot_l_hand_str = "cargosoft") - var/flipped = 0 - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/soft/dropped() - icon_state = initial(icon_state) - flipped=0 - ..() - -/obj/item/clothing/head/soft/attack_self(mob/user) - flipped = !flipped - if(flipped) - icon_state = "[icon_state]_flipped" - to_chat(user, "You flip the hat backwards.") - else - icon_state = initial(icon_state) - to_chat(user, "You flip the hat back in normal position.") - update_clothing_icon() //so our mob-overlays update - -/obj/item/clothing/head/soft/red - name = "red cap" - desc = "It's a baseball hat in a tasteless red color." - icon_state = "redsoft" - item_state_slots = list(slot_r_hand_str = "redsoft", slot_l_hand_str = "redsoft") - -/obj/item/clothing/head/soft/blue - name = "blue cap" - desc = "It's a peaked cap in a tasteless blue color." - icon_state = "bluesoft" - item_state_slots = list(slot_r_hand_str = "bluesoft", slot_l_hand_str = "bluesoft") - -/obj/item/clothing/head/soft/green - name = "green cap" - desc = "It's a peaked cap in a tasteless green color." - icon_state = "greensoft" - item_state_slots = list(slot_r_hand_str = "greensoft", slot_l_hand_str = "greensoft") - -/obj/item/clothing/head/soft/yellow - name = "yellow cap" - desc = "It's a peaked cap in a tasteless yellow color." - icon_state = "yellowsoft" - item_state_slots = list(slot_r_hand_str = "yellowsoft", slot_l_hand_str = "yellowsoft") - -/obj/item/clothing/head/soft/grey - name = "grey cap" - desc = "It's a peaked cap in a tasteful grey color." - icon_state = "greysoft" - item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft") - -/obj/item/clothing/head/soft/orange - name = "orange cap" - desc = "It's a peaked cap in a tasteless orange color." - icon_state = "orangesoft" - item_state_slots = list(slot_r_hand_str = "orangesoft", slot_l_hand_str = "orangesoft") - -/obj/item/clothing/head/soft/mime - name = "white cap" - desc = "It's a peaked cap in a tasteless white color." - icon_state = "mimesoft" - item_state_slots = list(slot_r_hand_str = "mimesoft", slot_l_hand_str = "mimesoft") - -/obj/item/clothing/head/soft/purple - name = "purple cap" - desc = "It's a peaked cap in a tasteless purple color." - icon_state = "purplesoft" - item_state_slots = list(slot_r_hand_str = "purplesoft", slot_l_hand_str = "purplesoft") - -/obj/item/clothing/head/soft/rainbow - name = "rainbow cap" - desc = "It's a peaked cap in a bright rainbow of colors." - icon_state = "rainbowsoft" - item_state_slots = list(slot_r_hand_str = "rainbowsoft", slot_l_hand_str = "rainbowsoft") - -/obj/item/clothing/head/soft/sec - name = "security cap" - desc = "It's a field cap in tasteful red color." - icon_state = "secsoft" - item_state_slots = list(slot_r_hand_str = "secsoft", slot_l_hand_str = "secsoft") - -/obj/item/clothing/head/soft/sec/corp - name = "corporate security cap" - desc = "It's field cap in corporate colors." - icon_state = "corpsoft" - item_state_slots = list(slot_r_hand_str = "corpsoft", slot_l_hand_str = "corpsoft") - -/obj/item/clothing/head/soft/black - name = "black cap" - desc = "It's a peaked cap in a tasteful black color." - icon_state = "blacksoft" - item_state_slots = list(slot_r_hand_str = "blacksoft", slot_l_hand_str = "blacksoft") - -/obj/item/clothing/head/soft/mbill - name = "shipping cap" - desc = "It's a ballcap bearing the colors of Major Bill's Shipping." - icon_state = "mbillsoft" - item_state_slots = list(slot_r_hand_str = "redsoft", slot_l_hand_str = "redsoft") - catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills) - -/obj/item/clothing/head/soft/med - name = "medical cap" - desc = "It's a field cap in white, with a blue cross on the front." - icon_state = "medsoft" - item_state_slots = list(slot_r_hand_str = "mimesoft", slot_l_hand_str = "mimesoft") - -/obj/item/clothing/head/soft/paramed - name = "paramedic's cap" - desc = "It's a field cap in dark blue, with a white cross on the front." - icon_state = "emtsoft" - item_state_slots = list(slot_r_hand_str = "bluesoft", slot_l_hand_str = "bluesoft") +/obj/item/clothing/head/soft + name = "cargo cap" + desc = "It's a peaked cap in a tasteless yellow color." + icon_state = "cargosoft" + item_state_slots = list(slot_r_hand_str = "cargosoft", slot_l_hand_str = "cargosoft") + var/flipped = 0 + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/soft/dropped() + icon_state = initial(icon_state) + flipped=0 + ..() + +/obj/item/clothing/head/soft/attack_self(mob/user) + flipped = !flipped + if(flipped) + icon_state = "[icon_state]_flipped" + to_chat(user, "You flip the hat backwards.") + else + icon_state = initial(icon_state) + to_chat(user, "You flip the hat back in normal position.") + update_clothing_icon() //so our mob-overlays update + +/obj/item/clothing/head/soft/red + name = "red cap" + desc = "It's a baseball hat in a tasteless red color." + icon_state = "redsoft" + item_state_slots = list(slot_r_hand_str = "redsoft", slot_l_hand_str = "redsoft") + +/obj/item/clothing/head/soft/blue + name = "blue cap" + desc = "It's a peaked cap in a tasteless blue color." + icon_state = "bluesoft" + item_state_slots = list(slot_r_hand_str = "bluesoft", slot_l_hand_str = "bluesoft") + +/obj/item/clothing/head/soft/green + name = "green cap" + desc = "It's a peaked cap in a tasteless green color." + icon_state = "greensoft" + item_state_slots = list(slot_r_hand_str = "greensoft", slot_l_hand_str = "greensoft") + +/obj/item/clothing/head/soft/yellow + name = "yellow cap" + desc = "It's a peaked cap in a tasteless yellow color." + icon_state = "yellowsoft" + item_state_slots = list(slot_r_hand_str = "yellowsoft", slot_l_hand_str = "yellowsoft") + +/obj/item/clothing/head/soft/grey + name = "grey cap" + desc = "It's a peaked cap in a tasteful grey color." + icon_state = "greysoft" + item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft") + +/obj/item/clothing/head/soft/orange + name = "orange cap" + desc = "It's a peaked cap in a tasteless orange color." + icon_state = "orangesoft" + item_state_slots = list(slot_r_hand_str = "orangesoft", slot_l_hand_str = "orangesoft") + +/obj/item/clothing/head/soft/mime + name = "white cap" + desc = "It's a peaked cap in a tasteless white color." + icon_state = "mimesoft" + item_state_slots = list(slot_r_hand_str = "mimesoft", slot_l_hand_str = "mimesoft") + +/obj/item/clothing/head/soft/purple + name = "purple cap" + desc = "It's a peaked cap in a tasteless purple color." + icon_state = "purplesoft" + item_state_slots = list(slot_r_hand_str = "purplesoft", slot_l_hand_str = "purplesoft") + +/obj/item/clothing/head/soft/rainbow + name = "rainbow cap" + desc = "It's a peaked cap in a bright rainbow of colors." + icon_state = "rainbowsoft" + item_state_slots = list(slot_r_hand_str = "rainbowsoft", slot_l_hand_str = "rainbowsoft") + +/obj/item/clothing/head/soft/sec + name = "security cap" + desc = "It's a field cap in tasteful red color." + icon_state = "secsoft" + item_state_slots = list(slot_r_hand_str = "secsoft", slot_l_hand_str = "secsoft") + +/obj/item/clothing/head/soft/sec/corp + name = "corporate security cap" + desc = "It's field cap in corporate colors." + icon_state = "corpsoft" + item_state_slots = list(slot_r_hand_str = "corpsoft", slot_l_hand_str = "corpsoft") + +/obj/item/clothing/head/soft/black + name = "black cap" + desc = "It's a peaked cap in a tasteful black color." + icon_state = "blacksoft" + item_state_slots = list(slot_r_hand_str = "blacksoft", slot_l_hand_str = "blacksoft") + +/obj/item/clothing/head/soft/mbill + name = "shipping cap" + desc = "It's a ballcap bearing the colors of Major Bill's Shipping." + icon_state = "mbillsoft" + item_state_slots = list(slot_r_hand_str = "redsoft", slot_l_hand_str = "redsoft") + catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills) + +/obj/item/clothing/head/soft/med + name = "medical cap" + desc = "It's a field cap in white, with a blue cross on the front." + icon_state = "medsoft" + item_state_slots = list(slot_r_hand_str = "mimesoft", slot_l_hand_str = "mimesoft") + +/obj/item/clothing/head/soft/paramed + name = "paramedic's cap" + desc = "It's a field cap in dark blue, with a white cross on the front." + icon_state = "emtsoft" + item_state_slots = list(slot_r_hand_str = "bluesoft", slot_l_hand_str = "bluesoft") diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 5a311c5172..5678e8bac6 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -1,35 +1,35 @@ -/obj/item/clothing/mask/balaclava - name = "balaclava" - desc = "LOADSAMONEY" - icon_state = "balaclava" - item_state_slots = list(slot_r_hand_str = "bandblack", slot_l_hand_str = "bandblack") - flags_inv = HIDEFACE|BLOCKHAIR - body_parts_covered = FACE|HEAD - w_class = ITEMSIZE_SMALL - -/obj/item/clothing/mask/balaclava/tactical - name = "green balaclava" - desc = "Designed to both hide identities and keep your face comfy and warm." - icon_state = "swatclava" - item_state_slots = list(slot_r_hand_str = "bandgreen", slot_l_hand_str = "bandgreen") - flags_inv = HIDEFACE|BLOCKHAIR - w_class = ITEMSIZE_SMALL - -/obj/item/clothing/mask/luchador - name = "Luchador Mask" - desc = "Worn by robust fighters, flying high to defeat their foes!" - icon_state = "luchag" - flags_inv = HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE - w_class = ITEMSIZE_SMALL - siemens_coefficient = 3.0 - -/obj/item/clothing/mask/luchador/tecnicos - name = "Tecnicos Mask" - desc = "Worn by robust fighters who uphold justice and fight honorably." - icon_state = "luchador" - -/obj/item/clothing/mask/luchador/rudos - name = "Rudos Mask" - desc = "Worn by robust fighters who are willing to do anything to win." +/obj/item/clothing/mask/balaclava + name = "balaclava" + desc = "LOADSAMONEY" + icon_state = "balaclava" + item_state_slots = list(slot_r_hand_str = "bandblack", slot_l_hand_str = "bandblack") + flags_inv = HIDEFACE|BLOCKHAIR + body_parts_covered = FACE|HEAD + w_class = ITEMSIZE_SMALL + +/obj/item/clothing/mask/balaclava/tactical + name = "green balaclava" + desc = "Designed to both hide identities and keep your face comfy and warm." + icon_state = "swatclava" + item_state_slots = list(slot_r_hand_str = "bandgreen", slot_l_hand_str = "bandgreen") + flags_inv = HIDEFACE|BLOCKHAIR + w_class = ITEMSIZE_SMALL + +/obj/item/clothing/mask/luchador + name = "Luchador Mask" + desc = "Worn by robust fighters, flying high to defeat their foes!" + icon_state = "luchag" + flags_inv = HIDEFACE|BLOCKHAIR + body_parts_covered = HEAD|FACE + w_class = ITEMSIZE_SMALL + siemens_coefficient = 3.0 + +/obj/item/clothing/mask/luchador/tecnicos + name = "Tecnicos Mask" + desc = "Worn by robust fighters who uphold justice and fight honorably." + icon_state = "luchador" + +/obj/item/clothing/mask/luchador/rudos + name = "Rudos Mask" + desc = "Worn by robust fighters who are willing to do anything to win." icon_state = "luchar" \ No newline at end of file diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index cf7a0bc939..c9e5baaf2c 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -1,63 +1,63 @@ -/obj/item/clothing/mask/breath - desc = "A close-fitting mask that can be connected to an air supply." - name = "breath mask" - icon_state = "breath" - item_state_slots = list(slot_r_hand_str = "breath", slot_l_hand_str = "breath") - item_flags = AIRTIGHT|FLEXIBLEMATERIAL - body_parts_covered = FACE - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.10 - permeability_coefficient = 0.50 - var/hanging = 0 - action_button_name = "Adjust Breath Mask" - pickup_sound = 'sound/items/pickup/component.ogg' - drop_sound = 'sound/items/drop/component.ogg' - - -/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user) - if(user.canmove && !user.stat) - src.hanging = !src.hanging - if (src.hanging) - gas_transfer_coefficient = 1 - body_parts_covered = body_parts_covered & ~FACE - item_flags = item_flags & ~AIRTIGHT - icon_state = "breathdown" - to_chat(user, "Your mask is now hanging on your neck.") - else - gas_transfer_coefficient = initial(gas_transfer_coefficient) - body_parts_covered = initial(body_parts_covered) - item_flags = initial(item_flags) - icon_state = initial(icon_state) - to_chat(user, "You pull the mask up to cover your face.") - update_clothing_icon() - -/obj/item/clothing/mask/breath/attack_self(mob/user) - adjust_mask(user) - -/obj/item/clothing/mask/breath/verb/toggle() - set category = "Object" - set name = "Adjust mask" - set src in usr - - adjust_mask(usr) - -/obj/item/clothing/mask/breath/medical - desc = "A close-fitting sterile mask that can be connected to an air supply." - name = "medical mask" - icon_state = "medical" - item_state_slots = list(slot_r_hand_str = "medical", slot_l_hand_str = "medical") - permeability_coefficient = 0.01 - -/obj/item/clothing/mask/breath/emergency - desc = "A close-fitting mask that is used by the wallmounted emergency oxygen pump." - name = "emergency mask" - icon_state = "breath" - item_state = "breath" - permeability_coefficient = 0.50 - -/obj/item/clothing/mask/breath/anesthetic - desc = "A close-fitting sterile mask that is used by the anesthetic wallmounted pump." - name = "anesthetic mask" - icon_state = "medical" - item_state = "medical" - permeability_coefficient = 0.01 +/obj/item/clothing/mask/breath + desc = "A close-fitting mask that can be connected to an air supply." + name = "breath mask" + icon_state = "breath" + item_state_slots = list(slot_r_hand_str = "breath", slot_l_hand_str = "breath") + item_flags = AIRTIGHT|FLEXIBLEMATERIAL + body_parts_covered = FACE + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.10 + permeability_coefficient = 0.50 + var/hanging = 0 + action_button_name = "Adjust Breath Mask" + pickup_sound = 'sound/items/pickup/component.ogg' + drop_sound = 'sound/items/drop/component.ogg' + + +/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user) + if(user.canmove && !user.stat) + src.hanging = !src.hanging + if (src.hanging) + gas_transfer_coefficient = 1 + body_parts_covered = body_parts_covered & ~FACE + item_flags = item_flags & ~AIRTIGHT + icon_state = "breathdown" + to_chat(user, "Your mask is now hanging on your neck.") + else + gas_transfer_coefficient = initial(gas_transfer_coefficient) + body_parts_covered = initial(body_parts_covered) + item_flags = initial(item_flags) + icon_state = initial(icon_state) + to_chat(user, "You pull the mask up to cover your face.") + update_clothing_icon() + +/obj/item/clothing/mask/breath/attack_self(mob/user) + adjust_mask(user) + +/obj/item/clothing/mask/breath/verb/toggle() + set category = "Object" + set name = "Adjust mask" + set src in usr + + adjust_mask(usr) + +/obj/item/clothing/mask/breath/medical + desc = "A close-fitting sterile mask that can be connected to an air supply." + name = "medical mask" + icon_state = "medical" + item_state_slots = list(slot_r_hand_str = "medical", slot_l_hand_str = "medical") + permeability_coefficient = 0.01 + +/obj/item/clothing/mask/breath/emergency + desc = "A close-fitting mask that is used by the wallmounted emergency oxygen pump." + name = "emergency mask" + icon_state = "breath" + item_state = "breath" + permeability_coefficient = 0.50 + +/obj/item/clothing/mask/breath/anesthetic + desc = "A close-fitting sterile mask that is used by the anesthetic wallmounted pump." + name = "anesthetic mask" + icon_state = "medical" + item_state = "medical" + permeability_coefficient = 0.01 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index e164234cee..667e7b41f9 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -1,186 +1,186 @@ -/obj/item/clothing/mask/gas - name = "gas mask" - desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." - icon_state = "gas_alt" - item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | ALLOW_SURVIVALFOOD - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE - body_parts_covered = FACE|EYES - w_class = ITEMSIZE_NORMAL - item_state_slots = list(slot_r_hand_str = "gas_alt", slot_l_hand_str = "gas_alt") - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - siemens_coefficient = 0.9 - var/gas_filter_strength = 1 //For gas mask filters - var/list/filtered_gases = list("phoron", "nitrous_oxide") - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0) - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air) - var/datum/gas_mixture/gas_filtered = new - - for(var/g in filtered_gases) - if(air.gas[g]) - gas_filtered.gas[g] = air.gas[g] * gas_filter_strength - air.gas[g] -= gas_filtered.gas[g] - - air.update_values() - gas_filtered.update_values() - - return gas_filtered - -/obj/item/clothing/mask/gas/clear - name = "gas mask" - desc = "A face-covering mask with a transparent faceplate that can be connected to an air supply." - icon_state = "gas_clear" - flags_inv = null - -/obj/item/clothing/mask/gas/half - name = "face mask" - desc = "A compact, durable gas mask that can be connected to an air supply." - icon_state = "halfgas" - siemens_coefficient = 0.7 - body_parts_covered = FACE - w_class = ITEMSIZE_SMALL - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0) - -//Turn it into a hailer mask -/obj/item/clothing/mask/gas/half/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/device/hailer)) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - user.drop_item(src) - var/obj/item/clothing/mask/gas/sechailer/N = new /obj/item/clothing/mask/gas/sechailer(src.loc) - N.fingerprints = src.fingerprints - N.fingerprintshidden = src.fingerprintshidden - N.fingerprintslast = src.fingerprintslast - N.suit_fibers = src.suit_fibers - N.hailer = I - I.loc = N - if(!isturf(N.loc)) - user.put_in_hands(N) - qdel(src) - ..() - -//Plague Dr suit can be found in clothing/suits/bio.dm -/obj/item/clothing/mask/gas/plaguedoctor - name = "plague doctor mask" - desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply." - icon_state = "plaguedoctor" - item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas") - armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0) - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/gas/plaguedoctor/gold - name = "gold plague doctor mask" - desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply. This one is gold." - icon_state = "plaguedoctor2" - -/obj/item/clothing/mask/gas/swat - name = "\improper SWAT mask" - desc = "A close-fitting tactical mask that can be connected to an air supply." - icon_state = "swat" - siemens_coefficient = 0.7 - body_parts_covered = FACE|EYES - -// Vox mask, has special code for eating -/obj/item/clothing/mask/gas/swat/vox - name = "\improper alien mask" - desc = "Clearly not designed for a human face." - flags = PHORONGUARD - item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT - species_restricted = list(SPECIES_VOX) - filtered_gases = list("oxygen", "nitrous_oxide") - var/mask_open = FALSE // Controls if the Vox can eat through this mask - action_button_name = "Toggle Feeding Port" - -/obj/item/clothing/mask/gas/swat/vox/proc/feeding_port(mob/user) - if(user.canmove && !user.stat) - mask_open = !mask_open - if(mask_open) - body_parts_covered = EYES - to_chat(user, "Your mask moves to allow you to eat.") - else - body_parts_covered = FACE|EYES - to_chat(user, "Your mask moves to cover your mouth.") - return - -/obj/item/clothing/mask/gas/swat/vox/attack_self(mob/user) - feeding_port(user) - ..() - -/obj/item/clothing/mask/gas/zaddat - name = "Zaddat Veil" - desc = "A clear survival mask used by the Zaddat to filter out harmful nitrogen. Can be connected to an air supply and reconfigured to allow for safe eating." - icon_state = "zaddat_mask" - item_state = "vax_mask" - //body_parts_covered = 0 - species_restricted = list(SPECIES_ZADDAT) - flags_inv = HIDEEARS //semi-transparent - filtered_gases = list("phoron", "nitrogen", "nitrous_oxide") - -/obj/item/clothing/mask/gas/syndicate - name = "tactical mask" - desc = "A close-fitting tactical mask that can be connected to an air supply." - icon_state = "swat" - siemens_coefficient = 0.7 - -/obj/item/clothing/mask/gas/explorer - name = "explorer gas mask" - desc = "A military-grade gas mask that can be connected to an air supply." - icon_state = "explorer" - item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas") - armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 0, bio = 50, rad = 0) - siemens_coefficient = 0.9 - -/obj/item/clothing/mask/gas/clown_hat - name = "clown wig and mask" - desc = "A true prankster's facial attire. A clown is incomplete without their wig and mask." - icon_state = "clown" - item_state_slots = list(slot_r_hand_str = "clown_hat", slot_l_hand_str = "clown_hat") - -/obj/item/clothing/mask/gas/sexyclown - name = "sexy-clown wig and mask" - desc = "A feminine clown mask for the dabbling crossdressers or female entertainers." - icon_state = "sexyclown" - item_state_slots = list(slot_r_hand_str = "clown_hat", slot_l_hand_str = "clown_hat") - -/obj/item/clothing/mask/gas/mime - name = "mime mask" - desc = "The traditional mime's mask. It has an eerie facial posture." - icon_state = "mime" - item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") - -/obj/item/clothing/mask/gas/monkeymask - name = "monkey mask" - desc = "A mask used when acting as a monkey." - icon_state = "monkeymask" - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/gas/sexymime - name = "sexy mime mask" - desc = "A traditional female mime's mask." - icon_state = "sexymime" - item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") - -/obj/item/clothing/mask/gas/guy - name = "guy fawkes mask" - desc = "A mask stylised to depict Guy Fawkes." - icon_state = "guyfawkes" - flags_inv = HIDEEARS|HIDEFACE - item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") - -/obj/item/clothing/mask/gas/commando - name = "commando mask" - icon_state = "fullgas" - item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") - siemens_coefficient = 0.2 - -/obj/item/clothing/mask/gas/cyborg - name = "cyborg visor" - desc = "Beep boop" - icon_state = "death" - -/obj/item/clothing/mask/gas/owl_mask - name = "owl mask" - desc = "Twoooo!" - icon_state = "owl" - body_parts_covered = HEAD|FACE|EYES +/obj/item/clothing/mask/gas + name = "gas mask" + desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." + icon_state = "gas_alt" + item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | ALLOW_SURVIVALFOOD + flags_inv = HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = FACE|EYES + w_class = ITEMSIZE_NORMAL + item_state_slots = list(slot_r_hand_str = "gas_alt", slot_l_hand_str = "gas_alt") + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.01 + siemens_coefficient = 0.9 + var/gas_filter_strength = 1 //For gas mask filters + var/list/filtered_gases = list("phoron", "nitrous_oxide") + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0) + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air) + var/datum/gas_mixture/gas_filtered = new + + for(var/g in filtered_gases) + if(air.gas[g]) + gas_filtered.gas[g] = air.gas[g] * gas_filter_strength + air.gas[g] -= gas_filtered.gas[g] + + air.update_values() + gas_filtered.update_values() + + return gas_filtered + +/obj/item/clothing/mask/gas/clear + name = "gas mask" + desc = "A face-covering mask with a transparent faceplate that can be connected to an air supply." + icon_state = "gas_clear" + flags_inv = null + +/obj/item/clothing/mask/gas/half + name = "face mask" + desc = "A compact, durable gas mask that can be connected to an air supply." + icon_state = "halfgas" + siemens_coefficient = 0.7 + body_parts_covered = FACE + w_class = ITEMSIZE_SMALL + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0) + +//Turn it into a hailer mask +/obj/item/clothing/mask/gas/half/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/device/hailer)) + playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + user.drop_item(src) + var/obj/item/clothing/mask/gas/sechailer/N = new /obj/item/clothing/mask/gas/sechailer(src.loc) + N.fingerprints = src.fingerprints + N.fingerprintshidden = src.fingerprintshidden + N.fingerprintslast = src.fingerprintslast + N.suit_fibers = src.suit_fibers + N.hailer = I + I.loc = N + if(!isturf(N.loc)) + user.put_in_hands(N) + qdel(src) + ..() + +//Plague Dr suit can be found in clothing/suits/bio.dm +/obj/item/clothing/mask/gas/plaguedoctor + name = "plague doctor mask" + desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply." + icon_state = "plaguedoctor" + item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas") + armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0) + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/gas/plaguedoctor/gold + name = "gold plague doctor mask" + desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply. This one is gold." + icon_state = "plaguedoctor2" + +/obj/item/clothing/mask/gas/swat + name = "\improper SWAT mask" + desc = "A close-fitting tactical mask that can be connected to an air supply." + icon_state = "swat" + siemens_coefficient = 0.7 + body_parts_covered = FACE|EYES + +// Vox mask, has special code for eating +/obj/item/clothing/mask/gas/swat/vox + name = "\improper alien mask" + desc = "Clearly not designed for a human face." + flags = PHORONGUARD + item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT + species_restricted = list(SPECIES_VOX) + filtered_gases = list("oxygen", "nitrous_oxide") + var/mask_open = FALSE // Controls if the Vox can eat through this mask + action_button_name = "Toggle Feeding Port" + +/obj/item/clothing/mask/gas/swat/vox/proc/feeding_port(mob/user) + if(user.canmove && !user.stat) + mask_open = !mask_open + if(mask_open) + body_parts_covered = EYES + to_chat(user, "Your mask moves to allow you to eat.") + else + body_parts_covered = FACE|EYES + to_chat(user, "Your mask moves to cover your mouth.") + return + +/obj/item/clothing/mask/gas/swat/vox/attack_self(mob/user) + feeding_port(user) + ..() + +/obj/item/clothing/mask/gas/zaddat + name = "Zaddat Veil" + desc = "A clear survival mask used by the Zaddat to filter out harmful nitrogen. Can be connected to an air supply and reconfigured to allow for safe eating." + icon_state = "zaddat_mask" + item_state = "vax_mask" + //body_parts_covered = 0 + species_restricted = list(SPECIES_ZADDAT) + flags_inv = HIDEEARS //semi-transparent + filtered_gases = list("phoron", "nitrogen", "nitrous_oxide") + +/obj/item/clothing/mask/gas/syndicate + name = "tactical mask" + desc = "A close-fitting tactical mask that can be connected to an air supply." + icon_state = "swat" + siemens_coefficient = 0.7 + +/obj/item/clothing/mask/gas/explorer + name = "explorer gas mask" + desc = "A military-grade gas mask that can be connected to an air supply." + icon_state = "explorer" + item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas") + armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 0, bio = 50, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/mask/gas/clown_hat + name = "clown wig and mask" + desc = "A true prankster's facial attire. A clown is incomplete without their wig and mask." + icon_state = "clown" + item_state_slots = list(slot_r_hand_str = "clown_hat", slot_l_hand_str = "clown_hat") + +/obj/item/clothing/mask/gas/sexyclown + name = "sexy-clown wig and mask" + desc = "A feminine clown mask for the dabbling crossdressers or female entertainers." + icon_state = "sexyclown" + item_state_slots = list(slot_r_hand_str = "clown_hat", slot_l_hand_str = "clown_hat") + +/obj/item/clothing/mask/gas/mime + name = "mime mask" + desc = "The traditional mime's mask. It has an eerie facial posture." + icon_state = "mime" + item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") + +/obj/item/clothing/mask/gas/monkeymask + name = "monkey mask" + desc = "A mask used when acting as a monkey." + icon_state = "monkeymask" + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/gas/sexymime + name = "sexy mime mask" + desc = "A traditional female mime's mask." + icon_state = "sexymime" + item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") + +/obj/item/clothing/mask/gas/guy + name = "guy fawkes mask" + desc = "A mask stylised to depict Guy Fawkes." + icon_state = "guyfawkes" + flags_inv = HIDEEARS|HIDEFACE + item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") + +/obj/item/clothing/mask/gas/commando + name = "commando mask" + icon_state = "fullgas" + item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") + siemens_coefficient = 0.2 + +/obj/item/clothing/mask/gas/cyborg + name = "cyborg visor" + desc = "Beep boop" + icon_state = "death" + +/obj/item/clothing/mask/gas/owl_mask + name = "owl mask" + desc = "Twoooo!" + icon_state = "owl" + body_parts_covered = HEAD|FACE|EYES diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 759d17d892..9d7d9a693b 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -1,422 +1,422 @@ -/obj/item/clothing/mask/muzzle - name = "muzzle" - desc = "To stop that awful noise." - icon_state = "muzzle" - body_parts_covered = FACE - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.90 - voicechange = 1 - -/obj/item/clothing/mask/muzzle/tape - name = "length of tape" - desc = "It's a robust DIY muzzle!" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "tape_cross" - item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) - w_class = ITEMSIZE_TINY - -/obj/item/clothing/mask/muzzle/New() - ..() - say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!") - say_verbs = list("mumbles", "says") - -// Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob) - if(user.wear_mask == src && !user.IsAdvancedToolUser()) - return 0 - ..() - -/obj/item/clothing/mask/surgical - name = "sterile mask" - desc = "A sterile mask designed to help prevent the spread of diseases." - icon_state = "sterile" - item_state_slots = list(slot_r_hand_str = "sterile", slot_l_hand_str = "sterile") - w_class = ITEMSIZE_SMALL - body_parts_covered = FACE - item_flags = FLEXIBLEMATERIAL - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0) - var/hanging = 0 - -/obj/item/clothing/mask/surgical/proc/adjust_mask(mob_user) - if(usr.canmove && !usr.stat) - src.hanging = !src.hanging - if (src.hanging) - gas_transfer_coefficient = 1 - body_parts_covered = body_parts_covered & ~FACE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - icon_state = "steriledown" - to_chat(usr, "You pull the mask below your chin.") - else - gas_transfer_coefficient = initial(gas_transfer_coefficient) - body_parts_covered = initial(body_parts_covered) - icon_state = initial(icon_state) - armor = initial(armor) - to_chat(usr, "You pull the mask up to cover your face.") - update_clothing_icon() - -/obj/item/clothing/mask/surgical/verb/toggle() - set category = "Object" - set name = "Adjust mask" - set src in usr - - adjust_mask(usr) - -/obj/item/clothing/mask/surgical/white - icon_state = "sterilew" - item_state_slots = list(slot_r_hand_str = "sterilew", slot_l_hand_str = "sterilew") - -/obj/item/clothing/mask/surgical/dust - name = "dust mask" - desc = "A dust mask designed to protect the wearer against construction and/or custodial particulate." - icon_state = "dust" - item_state_slots = list(slot_r_hand_str = "dust", slot_l_hand_str = "dust") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0) - -/obj/item/clothing/mask/surgical/cloth - name = "cloth mask" - desc = "A cloth mask designed to protect the wearer against allergens, illnesses, and social interaction." - icon_state = "cloth" - item_state_slots = list(slot_r_hand_str = "cloth", slot_l_hand_str = "cloth") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 20, rad = 0) - -/obj/item/clothing/mask/fakemoustache - name = "fake moustache" - desc = "Warning: moustache is fake." - icon_state = "fake-moustache" - flags_inv = HIDEFACE - body_parts_covered = 0 - -/obj/item/clothing/mask/snorkel - name = "Snorkel" - desc = "For the Swimming Savant." - icon_state = "snorkel" - flags_inv = HIDEFACE - body_parts_covered = 0 - -//scarves (fit in in mask slot) -//None of these actually have on-mob sprites... -/obj/item/clothing/mask/bluescarf - name = "blue neck scarf" - desc = "A blue neck scarf." - icon_state = "blueneckscarf" - body_parts_covered = FACE - item_flags = FLEXIBLEMATERIAL - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/redscarf - name = "red scarf" - desc = "A red and white checkered neck scarf." - icon_state = "redwhite_scarf" - body_parts_covered = FACE - item_flags = FLEXIBLEMATERIAL - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/greenscarf - name = "green scarf" - desc = "A green neck scarf." - icon_state = "green_scarf" - body_parts_covered = FACE - item_flags = FLEXIBLEMATERIAL - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/ninjascarf - name = "ninja scarf" - desc = "A stealthy, dark scarf." - icon_state = "ninja_scarf" - body_parts_covered = FACE - item_flags = FLEXIBLEMATERIAL - w_class = ITEMSIZE_SMALL - gas_transfer_coefficient = 0.90 - siemens_coefficient = 0 - -/obj/item/clothing/mask/pig - name = "pig mask" - desc = "A rubber pig mask." - icon_state = "pig" - flags_inv = HIDEFACE|BLOCKHAIR - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/shark - name = "shark mask" - desc = "A rubber shark mask." - icon_state = "shark" - flags_inv = HIDEFACE - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/dolphin - name = "dolphin mask" - desc = "A rubber dolphin mask." - icon_state = "dolphin" - flags_inv = HIDEFACE - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/goblin - name = "goblin mask" - desc = "A rubber goblin mask." - icon_state = "goblin" - flags_inv = HIDEFACE - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/demon - name = "demon mask" - desc = "A rubber demon mask." - icon_state = "demon" - flags_inv = HIDEFACE - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/horsehead - name = "horse head mask" - desc = "A mask made of soft vinyl and latex, representing the head of a horse." - icon_state = "horsehead" - flags_inv = HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - w_class = ITEMSIZE_SMALL - siemens_coefficient = 0.9 - -/obj/item/clothing/mask/nock_scarab - name = "nock mask (blue, scarab)" - desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." - icon_state = "nock_scarab" - w_class = ITEMSIZE_SMALL - body_parts_covered = HEAD|FACE - -/obj/item/clothing/mask/nock_demon - name = "nock mask (purple, demon)" - desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." - icon_state = "nock_demon" - w_class = ITEMSIZE_SMALL - body_parts_covered = HEAD|FACE - -/obj/item/clothing/mask/nock_life - name = "nock mask (green, life)" - desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." - icon_state = "nock_life" - w_class = ITEMSIZE_SMALL - body_parts_covered = HEAD|FACE - -/obj/item/clothing/mask/nock_ornate - name = "nock mask (red, ornate)" - desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." - icon_state = "nock_ornate" - w_class = ITEMSIZE_SMALL - body_parts_covered = HEAD|FACE - -/obj/item/clothing/mask/horsehead/New() - ..() - // The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary - say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") - say_verbs = list("whinnies", "neighs", "says") - -/obj/item/clothing/mask/ai - name = "camera MIU" - desc = "Allows for direct mental connection to accessible camera networks." - icon_state = "s-ninja" - item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") - flags_inv = HIDEFACE - body_parts_covered = 0 - var/mob/observer/eye/aiEye/eye - -/obj/item/clothing/mask/ai/New() - eye = new(src) - -/obj/item/clothing/mask/ai/equipped(var/mob/user, var/slot) - ..(user, slot) - if(slot == slot_wear_mask) - eye.owner = user - user.eyeobj = eye - - for(var/datum/chunk/c in eye.visibleChunks) - c.remove(eye) - eye.setLoc(user) - -/obj/item/clothing/mask/ai/dropped(var/mob/user) - ..() - if(eye.owner == user) - for(var/datum/chunk/c in eye.visibleChunks) - c.remove(eye) - - eye.owner.eyeobj = null - eye.owner = null - -/obj/item/clothing/mask/bandana - name = "black bandana" - desc = "A fine black bandana with nanotech lining. Can be worn on the head or face." - w_class = ITEMSIZE_TINY - flags_inv = HIDEFACE - slot_flags = SLOT_MASK|SLOT_HEAD - body_parts_covered = FACE - icon_state = "bandblack" - item_state_slots = list(slot_r_hand_str = "bandblack", slot_l_hand_str = "bandblack") - -/obj/item/clothing/mask/bandana/equipped(var/mob/user, var/slot) - switch(slot) - if(slot_wear_mask) //Mask is the default for all the settings - flags_inv = initial(flags_inv) - body_parts_covered = initial(body_parts_covered) - icon_state = initial(icon_state) - - if(slot_head) - flags_inv = 0 - body_parts_covered = HEAD - icon_state = "[initial(icon_state)]_up" - - return ..() - -/obj/item/clothing/mask/bandana/red - name = "red bandana" - desc = "A fine red bandana with nanotech lining. Can be worn on the head or face." - icon_state = "bandred" - item_state_slots = list(slot_r_hand_str = "bandred", slot_l_hand_str = "bandred") - -/obj/item/clothing/mask/bandana/blue - name = "blue bandana" - desc = "A fine blue bandana with nanotech lining. Can be worn on the head or face." - icon_state = "bandblue" - item_state_slots = list(slot_r_hand_str = "bandblue", slot_l_hand_str = "bandblue") - -/obj/item/clothing/mask/bandana/green - name = "green bandana" - desc = "A fine green bandana with nanotech lining. Can be worn on the head or face." - icon_state = "bandgreen" - item_state_slots = list(slot_r_hand_str = "bandgreen", slot_l_hand_str = "bandgreen") - -/obj/item/clothing/mask/bandana/gold - name = "gold bandana" - desc = "A fine gold bandana with nanotech lining. Can be worn on the head or face." - icon_state = "bandgold" - item_state_slots = list(slot_r_hand_str = "bandgold", slot_l_hand_str = "bandgold") - -/obj/item/clothing/mask/bandana/skull - name = "skull bandana" - desc = "A fine black bandana with nanotech lining and a skull emblem. Can be worn on the head or face." - icon_state = "bandskull" - item_state_slots = list(slot_r_hand_str = "bandskull", slot_l_hand_str = "bandskull") - -/obj/item/clothing/mask/veil - name = "black veil" - desc = "A black veil, typically worn at funerals or by goths." - w_class = ITEMSIZE_TINY - body_parts_covered = FACE - icon_state = "veil" - -/obj/item/clothing/mask/paper - name = "paper mask" - desc = "A neat, circular mask made out of paper. Perhaps you could try drawing on it with a pen!" - w_class = ITEMSIZE_SMALL - body_parts_covered = FACE - icon_state = "papermask" - action_button_name = "Redraw Design" - action_button_is_hands_free = TRUE - var/list/papermask_designs = list() - -/obj/item/clothing/mask/paper/Initialize(mapload) - . = ..() - papermask_designs = list( - "Blank" = image(icon = src.icon, icon_state = "papermask"), - "Neutral" = image(icon = src.icon, icon_state = "neutralmask"), - "Eyes" = image(icon = src.icon, icon_state = "eyemask"), - "Sleeping" = image(icon = src.icon, icon_state = "sleepingmask"), - "Heart" = image(icon = src.icon, icon_state = "heartmask"), - "Core" = image(icon = src.icon, icon_state = "coremask"), - "Plus" = image(icon = src.icon, icon_state = "plusmask"), - "Square" = image(icon = src.icon, icon_state = "squaremask"), - "Bullseye" = image(icon = src.icon, icon_state = "bullseyemask"), - "Vertical" = image(icon = src.icon, icon_state = "verticalmask"), - "Horizontal" = image(icon = src.icon, icon_state = "horizontalmask"), - "X" = image(icon = src.icon, icon_state = "xmask"), - "Bugeyes" = image(icon = src.icon, icon_state = "bugmask"), - "Double" = image(icon = src.icon, icon_state = "doublemask"), - "Mark" = image(icon = src.icon, icon_state = "markmask"), - "Line" = image(icon = src.icon, icon_state = "linemask"), - "Minus" = image(icon = src.icon, icon_state = "minusmask"), - "Four" = image(icon = src.icon, icon_state = "fourmask"), - "Diamond" = image(icon = src.icon, icon_state = "diamondmask"), - "Cat" = image(icon = src.icon, icon_state = "catmask"), - "Big Eyes" = image(icon = src.icon, icon_state = "bigeyemask"), - "Good" = image(icon = src.icon, icon_state = "goodmask"), - "Bad" = image(icon = src.icon, icon_state = "badmask"), - "Happy" = image(icon = src.icon, icon_state = "happymask"), - "Sad" = image(icon = src.icon, icon_state = "sadmask") - ) - -/obj/item/clothing/mask/paper/attack_self(mob/user) - . = ..() - if(!istype(user) || user.incapacitated()) - return - - var/static/list/options = list("Blank" = "papermask", "Neutral" = "neutralmask", "Eyes" = "eyemask", - "Sleeping" ="sleepingmask", "Heart" = "heartmask", "Core" = "coremask", - "Plus" = "plusmask", "Square" ="squaremask", "Bullseye" = "bullseyemask", - "Vertical" = "verticalmask", "Horizontal" = "horizontalmask", "X" ="xmask", - "Bugeyes" = "bugmask", "Double" = "doublemask", "Mark" = "markmask", - "Line" = "linemask", "Minus" = "minusmask", "Four" = "fourmask", - "Diamond" = "diamondmask", "Cat" = "catmask", "Big Eyes" = "bigeyemask", - "Good" = "goodmask", "Bad" = "badmask", "Happy" = "happymask", "Sad" = "sadmask" - ) - - var/choice = show_radial_menu(user, src, papermask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) - - if(src && choice && !user.incapacitated() && in_range(user,src)) - icon_state = options[choice] - user.update_inv_wear_mask() - user.update_action_buttons() - to_chat(user, "Your paper mask now is now [choice].") - return 1 - -/obj/item/clothing/mask/emotions - name = "emotional mask" - desc = "Express your happiness or hide your sorrows with this modular cutout. Draw your current emotions onto it with a pen!" - w_class = ITEMSIZE_SMALL - body_parts_covered = FACE - icon_state = "joy" - action_button_name = "Redraw Design" - action_button_is_hands_free = TRUE - var/static/list/joymask_designs = list() - - -/obj/item/clothing/mask/emotions/Initialize(mapload) - . = ..() - joymask_designs = list( - "Joy" = image(icon = src.icon, icon_state = "joy"), - "Flushed" = image(icon = src.icon, icon_state = "flushed"), - "Pensive" = image(icon = src.icon, icon_state = "pensive"), - "Angry" = image(icon = src.icon, icon_state = "angry"), - ) - -/obj/item/clothing/mask/emotions/attack_self(mob/user) - . = ..() - if(!istype(user) || user.incapacitated()) - return - - var/static/list/options = list("Joy" = "joy", "Flushed" = "flushed", "Pensive" = "pensive","Angry" ="angry") - - var/choice = show_radial_menu(user, src, joymask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) - - if(src && choice && !user.incapacitated() && in_range(user,src)) - icon_state = options[choice] - user.update_inv_wear_mask() - user.update_action_buttons() - to_chat(user, "Your [src] now displays a [choice] emotion.") - return 1 - -/obj/item/clothing/mask/mouthwheat - name = "mouth wheat" - desc = "100% synthetic \"Country Girls LLC.\" brand mouth wheat. Warning: not for actual consumption." - icon_state = "mouthwheat" - w_class = ITEMSIZE_SMALL - body_parts_covered = 0 +/obj/item/clothing/mask/muzzle + name = "muzzle" + desc = "To stop that awful noise." + icon_state = "muzzle" + body_parts_covered = FACE + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.90 + voicechange = 1 + +/obj/item/clothing/mask/muzzle/tape + name = "length of tape" + desc = "It's a robust DIY muzzle!" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "tape_cross" + item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) + w_class = ITEMSIZE_TINY + +/obj/item/clothing/mask/muzzle/New() + ..() + say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!") + say_verbs = list("mumbles", "says") + +// Clumsy folks can't take the mask off themselves. +/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob) + if(user.wear_mask == src && !user.IsAdvancedToolUser()) + return 0 + ..() + +/obj/item/clothing/mask/surgical + name = "sterile mask" + desc = "A sterile mask designed to help prevent the spread of diseases." + icon_state = "sterile" + item_state_slots = list(slot_r_hand_str = "sterile", slot_l_hand_str = "sterile") + w_class = ITEMSIZE_SMALL + body_parts_covered = FACE + item_flags = FLEXIBLEMATERIAL + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.01 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0) + var/hanging = 0 + +/obj/item/clothing/mask/surgical/proc/adjust_mask(mob_user) + if(usr.canmove && !usr.stat) + src.hanging = !src.hanging + if (src.hanging) + gas_transfer_coefficient = 1 + body_parts_covered = body_parts_covered & ~FACE + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + icon_state = "steriledown" + to_chat(usr, "You pull the mask below your chin.") + else + gas_transfer_coefficient = initial(gas_transfer_coefficient) + body_parts_covered = initial(body_parts_covered) + icon_state = initial(icon_state) + armor = initial(armor) + to_chat(usr, "You pull the mask up to cover your face.") + update_clothing_icon() + +/obj/item/clothing/mask/surgical/verb/toggle() + set category = "Object" + set name = "Adjust mask" + set src in usr + + adjust_mask(usr) + +/obj/item/clothing/mask/surgical/white + icon_state = "sterilew" + item_state_slots = list(slot_r_hand_str = "sterilew", slot_l_hand_str = "sterilew") + +/obj/item/clothing/mask/surgical/dust + name = "dust mask" + desc = "A dust mask designed to protect the wearer against construction and/or custodial particulate." + icon_state = "dust" + item_state_slots = list(slot_r_hand_str = "dust", slot_l_hand_str = "dust") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0) + +/obj/item/clothing/mask/surgical/cloth + name = "cloth mask" + desc = "A cloth mask designed to protect the wearer against allergens, illnesses, and social interaction." + icon_state = "cloth" + item_state_slots = list(slot_r_hand_str = "cloth", slot_l_hand_str = "cloth") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 20, rad = 0) + +/obj/item/clothing/mask/fakemoustache + name = "fake moustache" + desc = "Warning: moustache is fake." + icon_state = "fake-moustache" + flags_inv = HIDEFACE + body_parts_covered = 0 + +/obj/item/clothing/mask/snorkel + name = "Snorkel" + desc = "For the Swimming Savant." + icon_state = "snorkel" + flags_inv = HIDEFACE + body_parts_covered = 0 + +//scarves (fit in in mask slot) +//None of these actually have on-mob sprites... +/obj/item/clothing/mask/bluescarf + name = "blue neck scarf" + desc = "A blue neck scarf." + icon_state = "blueneckscarf" + body_parts_covered = FACE + item_flags = FLEXIBLEMATERIAL + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.90 + +/obj/item/clothing/mask/redscarf + name = "red scarf" + desc = "A red and white checkered neck scarf." + icon_state = "redwhite_scarf" + body_parts_covered = FACE + item_flags = FLEXIBLEMATERIAL + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.90 + +/obj/item/clothing/mask/greenscarf + name = "green scarf" + desc = "A green neck scarf." + icon_state = "green_scarf" + body_parts_covered = FACE + item_flags = FLEXIBLEMATERIAL + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.90 + +/obj/item/clothing/mask/ninjascarf + name = "ninja scarf" + desc = "A stealthy, dark scarf." + icon_state = "ninja_scarf" + body_parts_covered = FACE + item_flags = FLEXIBLEMATERIAL + w_class = ITEMSIZE_SMALL + gas_transfer_coefficient = 0.90 + siemens_coefficient = 0 + +/obj/item/clothing/mask/pig + name = "pig mask" + desc = "A rubber pig mask." + icon_state = "pig" + flags_inv = HIDEFACE|BLOCKHAIR + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/shark + name = "shark mask" + desc = "A rubber shark mask." + icon_state = "shark" + flags_inv = HIDEFACE + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/dolphin + name = "dolphin mask" + desc = "A rubber dolphin mask." + icon_state = "dolphin" + flags_inv = HIDEFACE + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/goblin + name = "goblin mask" + desc = "A rubber goblin mask." + icon_state = "goblin" + flags_inv = HIDEFACE + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/demon + name = "demon mask" + desc = "A rubber demon mask." + icon_state = "demon" + flags_inv = HIDEFACE + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/mask/horsehead + name = "horse head mask" + desc = "A mask made of soft vinyl and latex, representing the head of a horse." + icon_state = "horsehead" + flags_inv = HIDEFACE|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + w_class = ITEMSIZE_SMALL + siemens_coefficient = 0.9 + +/obj/item/clothing/mask/nock_scarab + name = "nock mask (blue, scarab)" + desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." + icon_state = "nock_scarab" + w_class = ITEMSIZE_SMALL + body_parts_covered = HEAD|FACE + +/obj/item/clothing/mask/nock_demon + name = "nock mask (purple, demon)" + desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." + icon_state = "nock_demon" + w_class = ITEMSIZE_SMALL + body_parts_covered = HEAD|FACE + +/obj/item/clothing/mask/nock_life + name = "nock mask (green, life)" + desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." + icon_state = "nock_life" + w_class = ITEMSIZE_SMALL + body_parts_covered = HEAD|FACE + +/obj/item/clothing/mask/nock_ornate + name = "nock mask (red, ornate)" + desc = "To Nock followers, masks symbolize rebirth and a new persona. Damaging the wearer's mask is generally considered an attack on their person itself." + icon_state = "nock_ornate" + w_class = ITEMSIZE_SMALL + body_parts_covered = HEAD|FACE + +/obj/item/clothing/mask/horsehead/New() + ..() + // The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary + say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") + say_verbs = list("whinnies", "neighs", "says") + +/obj/item/clothing/mask/ai + name = "camera MIU" + desc = "Allows for direct mental connection to accessible camera networks." + icon_state = "s-ninja" + item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime") + flags_inv = HIDEFACE + body_parts_covered = 0 + var/mob/observer/eye/aiEye/eye + +/obj/item/clothing/mask/ai/New() + eye = new(src) + +/obj/item/clothing/mask/ai/equipped(var/mob/user, var/slot) + ..(user, slot) + if(slot == slot_wear_mask) + eye.owner = user + user.eyeobj = eye + + for(var/datum/chunk/c in eye.visibleChunks) + c.remove(eye) + eye.setLoc(user) + +/obj/item/clothing/mask/ai/dropped(var/mob/user) + ..() + if(eye.owner == user) + for(var/datum/chunk/c in eye.visibleChunks) + c.remove(eye) + + eye.owner.eyeobj = null + eye.owner = null + +/obj/item/clothing/mask/bandana + name = "black bandana" + desc = "A fine black bandana with nanotech lining. Can be worn on the head or face." + w_class = ITEMSIZE_TINY + flags_inv = HIDEFACE + slot_flags = SLOT_MASK|SLOT_HEAD + body_parts_covered = FACE + icon_state = "bandblack" + item_state_slots = list(slot_r_hand_str = "bandblack", slot_l_hand_str = "bandblack") + +/obj/item/clothing/mask/bandana/equipped(var/mob/user, var/slot) + switch(slot) + if(slot_wear_mask) //Mask is the default for all the settings + flags_inv = initial(flags_inv) + body_parts_covered = initial(body_parts_covered) + icon_state = initial(icon_state) + + if(slot_head) + flags_inv = 0 + body_parts_covered = HEAD + icon_state = "[initial(icon_state)]_up" + + return ..() + +/obj/item/clothing/mask/bandana/red + name = "red bandana" + desc = "A fine red bandana with nanotech lining. Can be worn on the head or face." + icon_state = "bandred" + item_state_slots = list(slot_r_hand_str = "bandred", slot_l_hand_str = "bandred") + +/obj/item/clothing/mask/bandana/blue + name = "blue bandana" + desc = "A fine blue bandana with nanotech lining. Can be worn on the head or face." + icon_state = "bandblue" + item_state_slots = list(slot_r_hand_str = "bandblue", slot_l_hand_str = "bandblue") + +/obj/item/clothing/mask/bandana/green + name = "green bandana" + desc = "A fine green bandana with nanotech lining. Can be worn on the head or face." + icon_state = "bandgreen" + item_state_slots = list(slot_r_hand_str = "bandgreen", slot_l_hand_str = "bandgreen") + +/obj/item/clothing/mask/bandana/gold + name = "gold bandana" + desc = "A fine gold bandana with nanotech lining. Can be worn on the head or face." + icon_state = "bandgold" + item_state_slots = list(slot_r_hand_str = "bandgold", slot_l_hand_str = "bandgold") + +/obj/item/clothing/mask/bandana/skull + name = "skull bandana" + desc = "A fine black bandana with nanotech lining and a skull emblem. Can be worn on the head or face." + icon_state = "bandskull" + item_state_slots = list(slot_r_hand_str = "bandskull", slot_l_hand_str = "bandskull") + +/obj/item/clothing/mask/veil + name = "black veil" + desc = "A black veil, typically worn at funerals or by goths." + w_class = ITEMSIZE_TINY + body_parts_covered = FACE + icon_state = "veil" + +/obj/item/clothing/mask/paper + name = "paper mask" + desc = "A neat, circular mask made out of paper. Perhaps you could try drawing on it with a pen!" + w_class = ITEMSIZE_SMALL + body_parts_covered = FACE + icon_state = "papermask" + action_button_name = "Redraw Design" + action_button_is_hands_free = TRUE + var/list/papermask_designs = list() + +/obj/item/clothing/mask/paper/Initialize(mapload) + . = ..() + papermask_designs = list( + "Blank" = image(icon = src.icon, icon_state = "papermask"), + "Neutral" = image(icon = src.icon, icon_state = "neutralmask"), + "Eyes" = image(icon = src.icon, icon_state = "eyemask"), + "Sleeping" = image(icon = src.icon, icon_state = "sleepingmask"), + "Heart" = image(icon = src.icon, icon_state = "heartmask"), + "Core" = image(icon = src.icon, icon_state = "coremask"), + "Plus" = image(icon = src.icon, icon_state = "plusmask"), + "Square" = image(icon = src.icon, icon_state = "squaremask"), + "Bullseye" = image(icon = src.icon, icon_state = "bullseyemask"), + "Vertical" = image(icon = src.icon, icon_state = "verticalmask"), + "Horizontal" = image(icon = src.icon, icon_state = "horizontalmask"), + "X" = image(icon = src.icon, icon_state = "xmask"), + "Bugeyes" = image(icon = src.icon, icon_state = "bugmask"), + "Double" = image(icon = src.icon, icon_state = "doublemask"), + "Mark" = image(icon = src.icon, icon_state = "markmask"), + "Line" = image(icon = src.icon, icon_state = "linemask"), + "Minus" = image(icon = src.icon, icon_state = "minusmask"), + "Four" = image(icon = src.icon, icon_state = "fourmask"), + "Diamond" = image(icon = src.icon, icon_state = "diamondmask"), + "Cat" = image(icon = src.icon, icon_state = "catmask"), + "Big Eyes" = image(icon = src.icon, icon_state = "bigeyemask"), + "Good" = image(icon = src.icon, icon_state = "goodmask"), + "Bad" = image(icon = src.icon, icon_state = "badmask"), + "Happy" = image(icon = src.icon, icon_state = "happymask"), + "Sad" = image(icon = src.icon, icon_state = "sadmask") + ) + +/obj/item/clothing/mask/paper/attack_self(mob/user) + . = ..() + if(!istype(user) || user.incapacitated()) + return + + var/static/list/options = list("Blank" = "papermask", "Neutral" = "neutralmask", "Eyes" = "eyemask", + "Sleeping" ="sleepingmask", "Heart" = "heartmask", "Core" = "coremask", + "Plus" = "plusmask", "Square" ="squaremask", "Bullseye" = "bullseyemask", + "Vertical" = "verticalmask", "Horizontal" = "horizontalmask", "X" ="xmask", + "Bugeyes" = "bugmask", "Double" = "doublemask", "Mark" = "markmask", + "Line" = "linemask", "Minus" = "minusmask", "Four" = "fourmask", + "Diamond" = "diamondmask", "Cat" = "catmask", "Big Eyes" = "bigeyemask", + "Good" = "goodmask", "Bad" = "badmask", "Happy" = "happymask", "Sad" = "sadmask" + ) + + var/choice = show_radial_menu(user, src, papermask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) + + if(src && choice && !user.incapacitated() && in_range(user,src)) + icon_state = options[choice] + user.update_inv_wear_mask() + user.update_action_buttons() + to_chat(user, "Your paper mask now is now [choice].") + return 1 + +/obj/item/clothing/mask/emotions + name = "emotional mask" + desc = "Express your happiness or hide your sorrows with this modular cutout. Draw your current emotions onto it with a pen!" + w_class = ITEMSIZE_SMALL + body_parts_covered = FACE + icon_state = "joy" + action_button_name = "Redraw Design" + action_button_is_hands_free = TRUE + var/static/list/joymask_designs = list() + + +/obj/item/clothing/mask/emotions/Initialize(mapload) + . = ..() + joymask_designs = list( + "Joy" = image(icon = src.icon, icon_state = "joy"), + "Flushed" = image(icon = src.icon, icon_state = "flushed"), + "Pensive" = image(icon = src.icon, icon_state = "pensive"), + "Angry" = image(icon = src.icon, icon_state = "angry"), + ) + +/obj/item/clothing/mask/emotions/attack_self(mob/user) + . = ..() + if(!istype(user) || user.incapacitated()) + return + + var/static/list/options = list("Joy" = "joy", "Flushed" = "flushed", "Pensive" = "pensive","Angry" ="angry") + + var/choice = show_radial_menu(user, src, joymask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) + + if(src && choice && !user.incapacitated() && in_range(user,src)) + icon_state = options[choice] + user.update_inv_wear_mask() + user.update_action_buttons() + to_chat(user, "Your [src] now displays a [choice] emotion.") + return 1 + +/obj/item/clothing/mask/mouthwheat + name = "mouth wheat" + desc = "100% synthetic \"Country Girls LLC.\" brand mouth wheat. Warning: not for actual consumption." + icon_state = "mouthwheat" + w_class = ITEMSIZE_SMALL + body_parts_covered = 0 diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 5035a7f349..aa01bab9d8 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -1,158 +1,158 @@ - -/obj/item/clothing/shoes/black - name = "black shoes" - icon_state = "black" - desc = "A pair of black shoes." - -/obj/item/clothing/shoes/brown - name = "brown shoes" - desc = "A pair of brown shoes." - icon_state = "brown" - -/obj/item/clothing/shoes/blue - name = "blue shoes" - icon_state = "blue" - -/obj/item/clothing/shoes/green - name = "green shoes" - icon_state = "green" - -/obj/item/clothing/shoes/yellow - name = "yellow shoes" - icon_state = "yellow" - -/obj/item/clothing/shoes/purple - name = "purple shoes" - icon_state = "purple" - -/obj/item/clothing/shoes/red - name = "red shoes" - desc = "Stylish red shoes." - icon_state = "red" - -/obj/item/clothing/shoes/white - name = "white shoes" - icon_state = "white" - permeability_coefficient = 0.01 - -/obj/item/clothing/shoes/rainbow - name = "rainbow shoes" - desc = "Very colourful shoes." - icon_state = "rain_bow" - -/obj/item/clothing/shoes/flats - name = "black flats" - desc = "Sleek black flats." - icon_state = "flatsblack" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - -/obj/item/clothing/shoes/flats/white - name = "white flats" - desc = "Shiny white flats." - icon_state = "flatswhite" - addblends = "flatswhite_a" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - -/obj/item/clothing/shoes/flats/white/color - name = "flats" - desc = "Sleek flats." - -/obj/item/clothing/shoes/flats/red - name = "red flats" - desc = "Ruby red flats." - icon_state = "flatsred" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - -/obj/item/clothing/shoes/flats/purple - name = "purple flats" - desc = "Royal purple flats." - icon_state = "flatspurple" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - -/obj/item/clothing/shoes/flats/blue - name = "blue flats" - desc = "Sleek blue flats." - icon_state = "flatsblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/shoes/flats/brown - name = "brown flats" - desc = "Sleek brown flats." - icon_state = "flatsbrown" - item_state_slots = list(slot_r_hand_str = "brown", slot_l_hand_str = "brown") - -/obj/item/clothing/shoes/flats/orange - name = "orange flats" - desc = "Radiant orange flats." - icon_state = "flatsorange" - item_state_slots = list(slot_r_hand_str = "orange", slot_l_hand_str = "orange") - -/obj/item/clothing/shoes/orange - name = "orange shoes" - icon_state = "orange" - var/obj/item/weapon/handcuffs/chained = null - -/obj/item/clothing/shoes/orange/proc/attach_cuffs(var/obj/item/weapon/handcuffs/cuffs, mob/user as mob) - if (chained) return - - user.drop_item() - cuffs.loc = src - chained = cuffs - slowdown = 15 - icon_state = "orange1" - -/obj/item/clothing/shoes/orange/proc/remove_cuffs(mob/user as mob) - if (!chained) return - - user.put_in_hands(chained) - chained.add_fingerprint(user) - - slowdown = initial(slowdown) - icon_state = "orange" - chained = null - -/obj/item/clothing/shoes/orange/attack_self(mob/user as mob) - ..() - remove_cuffs(user) - -/obj/item/clothing/shoes/orange/attackby(H as obj, mob/user as mob) - ..() - if (istype(H, /obj/item/weapon/handcuffs)) - attach_cuffs(H, user) - -/obj/item/clothing/shoes/hitops - name = "white high-tops" - desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design." - icon_state = "whitehi" - -/obj/item/clothing/shoes/hitops/red - name = "red high-tops" - icon_state = "redhi" - -/obj/item/clothing/shoes/hitops/brown - name = "brown high-tops" - icon_state = "brownhi" - -/obj/item/clothing/shoes/hitops/black - name = "black high-tops" - icon_state = "blackhi" - -/obj/item/clothing/shoes/hitops/orange - name = "orange high-tops" - icon_state = "orangehi" - -/obj/item/clothing/shoes/hitops/blue - name = "blue high-tops" - icon_state = "bluehi" - -/obj/item/clothing/shoes/hitops/green - name = "green high-tops" - icon_state = "greenhi" - -/obj/item/clothing/shoes/hitops/purple - name = "purple high-tops" - icon_state = "purplehi" - -/obj/item/clothing/shoes/hitops/yellow - name = "yellow high-tops" + +/obj/item/clothing/shoes/black + name = "black shoes" + icon_state = "black" + desc = "A pair of black shoes." + +/obj/item/clothing/shoes/brown + name = "brown shoes" + desc = "A pair of brown shoes." + icon_state = "brown" + +/obj/item/clothing/shoes/blue + name = "blue shoes" + icon_state = "blue" + +/obj/item/clothing/shoes/green + name = "green shoes" + icon_state = "green" + +/obj/item/clothing/shoes/yellow + name = "yellow shoes" + icon_state = "yellow" + +/obj/item/clothing/shoes/purple + name = "purple shoes" + icon_state = "purple" + +/obj/item/clothing/shoes/red + name = "red shoes" + desc = "Stylish red shoes." + icon_state = "red" + +/obj/item/clothing/shoes/white + name = "white shoes" + icon_state = "white" + permeability_coefficient = 0.01 + +/obj/item/clothing/shoes/rainbow + name = "rainbow shoes" + desc = "Very colourful shoes." + icon_state = "rain_bow" + +/obj/item/clothing/shoes/flats + name = "black flats" + desc = "Sleek black flats." + icon_state = "flatsblack" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + +/obj/item/clothing/shoes/flats/white + name = "white flats" + desc = "Shiny white flats." + icon_state = "flatswhite" + addblends = "flatswhite_a" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + +/obj/item/clothing/shoes/flats/white/color + name = "flats" + desc = "Sleek flats." + +/obj/item/clothing/shoes/flats/red + name = "red flats" + desc = "Ruby red flats." + icon_state = "flatsred" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + +/obj/item/clothing/shoes/flats/purple + name = "purple flats" + desc = "Royal purple flats." + icon_state = "flatspurple" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + +/obj/item/clothing/shoes/flats/blue + name = "blue flats" + desc = "Sleek blue flats." + icon_state = "flatsblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/shoes/flats/brown + name = "brown flats" + desc = "Sleek brown flats." + icon_state = "flatsbrown" + item_state_slots = list(slot_r_hand_str = "brown", slot_l_hand_str = "brown") + +/obj/item/clothing/shoes/flats/orange + name = "orange flats" + desc = "Radiant orange flats." + icon_state = "flatsorange" + item_state_slots = list(slot_r_hand_str = "orange", slot_l_hand_str = "orange") + +/obj/item/clothing/shoes/orange + name = "orange shoes" + icon_state = "orange" + var/obj/item/weapon/handcuffs/chained = null + +/obj/item/clothing/shoes/orange/proc/attach_cuffs(var/obj/item/weapon/handcuffs/cuffs, mob/user as mob) + if (chained) return + + user.drop_item() + cuffs.loc = src + chained = cuffs + slowdown = 15 + icon_state = "orange1" + +/obj/item/clothing/shoes/orange/proc/remove_cuffs(mob/user as mob) + if (!chained) return + + user.put_in_hands(chained) + chained.add_fingerprint(user) + + slowdown = initial(slowdown) + icon_state = "orange" + chained = null + +/obj/item/clothing/shoes/orange/attack_self(mob/user as mob) + ..() + remove_cuffs(user) + +/obj/item/clothing/shoes/orange/attackby(H as obj, mob/user as mob) + ..() + if (istype(H, /obj/item/weapon/handcuffs)) + attach_cuffs(H, user) + +/obj/item/clothing/shoes/hitops + name = "white high-tops" + desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design." + icon_state = "whitehi" + +/obj/item/clothing/shoes/hitops/red + name = "red high-tops" + icon_state = "redhi" + +/obj/item/clothing/shoes/hitops/brown + name = "brown high-tops" + icon_state = "brownhi" + +/obj/item/clothing/shoes/hitops/black + name = "black high-tops" + icon_state = "blackhi" + +/obj/item/clothing/shoes/hitops/orange + name = "orange high-tops" + icon_state = "orangehi" + +/obj/item/clothing/shoes/hitops/blue + name = "blue high-tops" + icon_state = "bluehi" + +/obj/item/clothing/shoes/hitops/green + name = "green high-tops" + icon_state = "greenhi" + +/obj/item/clothing/shoes/hitops/purple + name = "purple high-tops" + icon_state = "purplehi" + +/obj/item/clothing/shoes/hitops/yellow + name = "yellow high-tops" icon_state = "yellowhi" \ No newline at end of file diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 125eedd9ab..96c83138ad 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -1,130 +1,130 @@ -/obj/item/clothing/shoes/magboots - desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear." - name = "magboots" - icon_state = "magboots0" - flags = PHORONGUARD - item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots") - species_restricted = null - center_of_mass = list("x" = 17,"y" = 12) - force = 3 - overshoes = 1 - shoes_under_pants = -1 //These things are huge - preserve_item = 1 - var/magpulse = 0 - var/icon_base = "magboots" - action_button_name = "Toggle Magboots" - var/obj/item/clothing/shoes/shoes = null //Undershoes - var/mob/living/carbon/human/wearer = null //For shoe procs - step_volume_mod = 1.3 - drop_sound = 'sound/items/drop/metalboots.ogg' - pickup_sound = 'sound/items/pickup/toolbox.ogg' - -/obj/item/clothing/shoes/magboots/proc/set_slowdown() - slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster. - if (magpulse) - slowdown += 3 - -/obj/item/clothing/shoes/magboots/attack_self(mob/user) - if(magpulse) - item_flags &= ~NOSLIP - magpulse = 0 - set_slowdown() - force = 3 - if(icon_base) icon_state = "[icon_base]0" - to_chat(user, "You disable the mag-pulse traction system.") - else - item_flags |= NOSLIP - magpulse = 1 - set_slowdown() - force = 5 - if(icon_base) icon_state = "[icon_base]1" - playsound(src, 'sound/effects/magnetclamp.ogg', 20) - to_chat(user, "You enable the mag-pulse traction system.") - user.update_inv_shoes() //so our mob-overlays update - user.update_action_buttons() - -/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE) - var/mob/living/carbon/human/H = user - - if(H.shoes) - shoes = H.shoes - if(shoes.overshoes) - if(slot && slot == slot_shoes) - to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.") - shoes = null - return 0 - H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots. - shoes.forceMove(src) - - if(!..()) - if(shoes) //Put the old shoes back on if the check fails. - if(H.equip_to_slot_if_possible(shoes, slot_shoes)) - src.shoes = null - return 0 - - if (shoes) - if(slot && slot == slot_shoes) - to_chat(user, "You slip \the [src] on over \the [shoes].") - set_slowdown() - wearer = H - return 1 - -/obj/item/clothing/shoes/magboots/dropped() - ..() - var/mob/living/carbon/human/H = wearer - if(shoes) - if(!H.equip_to_slot_if_possible(shoes, slot_shoes)) - shoes.forceMove(get_turf(src)) - src.shoes = null - wearer = null - -/obj/item/clothing/shoes/magboots/examine(mob/user) - . = ..() - . += "Its mag-pulse traction system appears to be [item_flags & NOSLIP ? "enabled" : "disabled"]." - -/obj/item/clothing/shoes/magboots/vox - - desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." - name = "vox magclaws" - item_state = "boots-vox" - icon_state = "boots-vox" - flags = PHORONGUARD - species_restricted = list(SPECIES_VOX) - armor = list (melee = 40, bullet = 10, laser = 10, energy = 20, bomb = 20, bio = 10, rad = 20) //values of workboots and heavy duty engineering gloves, it's the only option that will ever be taken so may as well give the turkeys some protection //ChompEdit - - action_button_name = "Toggle the magclaws" - -/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) - if(src.magpulse) - item_flags &= ~NOSLIP - magpulse = 0 - canremove = TRUE - to_chat(user, "You relax your deathgrip on the flooring.") - else - //make sure these can only be used when equipped. - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if (H.shoes != src) - to_chat(user, "You will have to put on the [src] before you can do that.") - return - - item_flags |= NOSLIP - magpulse = 1 - canremove = FALSE //kinda hard to take off magclaws when you are gripping them tightly. - to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") - user.update_action_buttons() - -//In case they somehow come off while enabled. -/obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob) - ..() - if(src.magpulse) - user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") - item_flags &= ~NOSLIP - magpulse = 0 - canremove = TRUE - -/obj/item/clothing/shoes/magboots/vox/examine(mob/user) - . = ..() - if(magpulse) - . += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped. +/obj/item/clothing/shoes/magboots + desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear." + name = "magboots" + icon_state = "magboots0" + flags = PHORONGUARD + item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots") + species_restricted = null + center_of_mass = list("x" = 17,"y" = 12) + force = 3 + overshoes = 1 + shoes_under_pants = -1 //These things are huge + preserve_item = 1 + var/magpulse = 0 + var/icon_base = "magboots" + action_button_name = "Toggle Magboots" + var/obj/item/clothing/shoes/shoes = null //Undershoes + var/mob/living/carbon/human/wearer = null //For shoe procs + step_volume_mod = 1.3 + drop_sound = 'sound/items/drop/metalboots.ogg' + pickup_sound = 'sound/items/pickup/toolbox.ogg' + +/obj/item/clothing/shoes/magboots/proc/set_slowdown() + slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster. + if (magpulse) + slowdown += 3 + +/obj/item/clothing/shoes/magboots/attack_self(mob/user) + if(magpulse) + item_flags &= ~NOSLIP + magpulse = 0 + set_slowdown() + force = 3 + if(icon_base) icon_state = "[icon_base]0" + to_chat(user, "You disable the mag-pulse traction system.") + else + item_flags |= NOSLIP + magpulse = 1 + set_slowdown() + force = 5 + if(icon_base) icon_state = "[icon_base]1" + playsound(src, 'sound/effects/magnetclamp.ogg', 20) + to_chat(user, "You enable the mag-pulse traction system.") + user.update_inv_shoes() //so our mob-overlays update + user.update_action_buttons() + +/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE) + var/mob/living/carbon/human/H = user + + if(H.shoes) + shoes = H.shoes + if(shoes.overshoes) + if(slot && slot == slot_shoes) + to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.") + shoes = null + return 0 + H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots. + shoes.forceMove(src) + + if(!..()) + if(shoes) //Put the old shoes back on if the check fails. + if(H.equip_to_slot_if_possible(shoes, slot_shoes)) + src.shoes = null + return 0 + + if (shoes) + if(slot && slot == slot_shoes) + to_chat(user, "You slip \the [src] on over \the [shoes].") + set_slowdown() + wearer = H + return 1 + +/obj/item/clothing/shoes/magboots/dropped() + ..() + var/mob/living/carbon/human/H = wearer + if(shoes) + if(!H.equip_to_slot_if_possible(shoes, slot_shoes)) + shoes.forceMove(get_turf(src)) + src.shoes = null + wearer = null + +/obj/item/clothing/shoes/magboots/examine(mob/user) + . = ..() + . += "Its mag-pulse traction system appears to be [item_flags & NOSLIP ? "enabled" : "disabled"]." + +/obj/item/clothing/shoes/magboots/vox + + desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." + name = "vox magclaws" + item_state = "boots-vox" + icon_state = "boots-vox" + flags = PHORONGUARD + species_restricted = list(SPECIES_VOX) + armor = list (melee = 40, bullet = 10, laser = 10, energy = 20, bomb = 20, bio = 10, rad = 20) //values of workboots and heavy duty engineering gloves, it's the only option that will ever be taken so may as well give the turkeys some protection //ChompEdit + + action_button_name = "Toggle the magclaws" + +/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) + if(src.magpulse) + item_flags &= ~NOSLIP + magpulse = 0 + canremove = TRUE + to_chat(user, "You relax your deathgrip on the flooring.") + else + //make sure these can only be used when equipped. + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if (H.shoes != src) + to_chat(user, "You will have to put on the [src] before you can do that.") + return + + item_flags |= NOSLIP + magpulse = 1 + canremove = FALSE //kinda hard to take off magclaws when you are gripping them tightly. + to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") + user.update_action_buttons() + +//In case they somehow come off while enabled. +/obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob) + ..() + if(src.magpulse) + user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") + item_flags &= ~NOSLIP + magpulse = 0 + canremove = TRUE + +/obj/item/clothing/shoes/magboots/vox/examine(mob/user) + . = ..() + if(magpulse) + . += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped. diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index e9b56a1288..a34b471866 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,258 +1,258 @@ -/obj/item/clothing/shoes/syndigaloshes - desc = "A pair of brown shoes. They seem to have extra grip." - name = "brown shoes" - icon_state = "brown" - permeability_coefficient = 0.05 - item_flags = NOSLIP - origin_tech = list(TECH_ILLEGAL = 3) - var/list/clothing_choices = list() - siemens_coefficient = 0.8 - species_restricted = null - step_volume_mod = 0.5 - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/clothing/shoes/mime - name = "mime shoes" - icon_state = "white" - step_volume_mod = 0 //It's a mime - -/obj/item/clothing/shoes/galoshes - desc = "Rubber boots" - name = "galoshes" - icon_state = "galoshes" - permeability_coefficient = 0.05 - siemens_coefficient = 0 //They're thick rubber boots! Of course they won't conduct electricity! - item_flags = NOSLIP - slowdown = SHOES_SLOWDOWN+0.5 - species_restricted = null - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/clothing/shoes/dress - name = "dress shoes" - desc = "Sharp looking low quarters, perfect for a formal uniform." - icon_state = "laceups" - -/obj/item/clothing/shoes/dress/white - name = "white dress shoes" - desc = "Brilliantly white low quarters, not a spot on them." - icon_state = "whitedress" - -/obj/item/clothing/shoes/sandal - desc = "A pair of rather plain, wooden sandals." - name = "sandals" - icon_state = "wizard" - species_restricted = null - body_parts_covered = 0 - - wizard_garb = 1 - -/obj/item/clothing/shoes/flipflop - name = "flip flops" - desc = "A pair of foam flip flops. For those not afraid to show a little ankle." - icon_state = "thongsandal" - addblends = "thongsandal_a" - -/obj/item/clothing/shoes/cookflop - name = "grilling sandals" - desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" - icon_state = "cookflops" - species_restricted = null - body_parts_covered = 0 - -/obj/item/clothing/shoes/tourist_1 - name = "tourist sandals" - desc = "Black sandals usually worn by tourists. Need I say more?" - icon_state = "tourist_1" - species_restricted = null - body_parts_covered = 0 - -/obj/item/clothing/shoes/tourist_2 - name = "tourist sandals" - desc = "Green sandals usually worn by tourists. Need I say more?" - icon_state = "tourist_2" - species_restricted = null - body_parts_covered = 0 - -/obj/item/clothing/shoes/sandal/clogs - name = "plastic clogs" - desc = "A pair of plastic clog shoes." - icon_state = "clogs" - -/obj/item/clothing/shoes/sandal/marisa - desc = "A pair of magic, black shoes." - name = "magic shoes" - icon_state = "black" - body_parts_covered = FEET - -/obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" - name = "clown shoes" - icon_state = "clown" - slowdown = SHOES_SLOWDOWN+0.5 - force = 0 - //CHOMPRemove - removed built in squeak sounds - species_restricted = null - -/* CHOMPEdit - Replaced with squeak component -/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running) - if(running) - if(footstep >= 2) - footstep = 0 - playsound(src, "clownstep", 50, 1) // this will get annoying very fast. - else - footstep++ - else - playsound(src, "clownstep", 20, 1) -*/ - -/obj/item/clothing/shoes/cult - name = "boots" - desc = "A pair of boots worn by the followers of Nar-Sie." - icon_state = "cult" - item_state_slots = list(slot_r_hand_str = "cult", slot_l_hand_str = "cult") - force = 2 - siemens_coefficient = 0.7 - - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = null - -/obj/item/clothing/shoes/cult/cultify() - return - -/obj/item/clothing/shoes/cyborg - name = "cyborg boots" - desc = "Shoes for a cyborg costume" - icon_state = "boots" - -/obj/item/clothing/shoes/slippers - name = "bunny slippers" - desc = "Fluffy!" - icon_state = "slippers" - force = 0 - species_restricted = null - w_class = ITEMSIZE_SMALL - drop_sound = 'sound/items/drop/clothing.ogg' - pickup_sound = 'sound/items/pickup/clothing.ogg' - -/obj/item/clothing/shoes/slippers/worn - name = "worn bunny slippers" - desc = "Fluffy..." - icon_state = "slippers_worn" - item_state_slots = list(slot_r_hand_str = "slippers", slot_l_hand_str = "slippers") - -/obj/item/clothing/shoes/laceup - name = "black oxford shoes" - icon_state = "oxford_black" - -/obj/item/clothing/shoes/laceup/grey - name = "grey oxford shoes" - icon_state = "oxford_grey" - -/obj/item/clothing/shoes/laceup/brown - name = "brown oxford shoes" - icon_state = "oxford_brown" - -/obj/item/clothing/shoes/swimmingfins - desc = "Help you swim good." - name = "swimming fins" - icon_state = "flippers" - item_state_slots = list(slot_r_hand_str = "galoshes", slot_l_hand_str = "galoshes") - item_flags = NOSLIP - slowdown = SHOES_SLOWDOWN+0.5 - species_restricted = null - -/obj/item/clothing/shoes/athletic - name = "athletic shoes" - desc = "A pair of sleek athletic shoes. Made by and for the sporty types." - icon_state = "sportshoe" - addblends = "sportshoe_a" - item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld") - -/obj/item/clothing/shoes/skater - name = "skater shoes" - desc = "A pair of wide shoes with thick soles. Designed for skating." - icon_state = "skatershoe" - addblends = "skatershoe_a" - item_state_slots = list(slot_r_hand_str = "skaterheld", slot_l_hand_str = "skaterheld") - -/obj/item/clothing/shoes/heels - name = "high heels" - desc = "A pair of high-heeled shoes. Fancy!" - icon_state = "heels" - addblends = "heels_a" - -/obj/item/clothing/shoes/footwraps - name = "cloth footwraps" - desc = "A roll of treated canvas used for wrapping claws or paws" - icon_state = "clothwrap" - item_state = "clothwrap" - force = 0 - w_class = ITEMSIZE_SMALL - species_restricted = null - drop_sound = 'sound/items/drop/clothing.ogg' - pickup_sound = 'sound/items/pickup/clothing.ogg' - -/obj/item/clothing/shoes/boots/ranger - var/bootcolor = "white" - name = "ranger boots" - desc = "The Rangers special lightweight hybrid magboots-jetboots perfect for EVA. If only these functions were so easy to copy in reality.\ - These ones are just a well-made pair of boots in appropriate colours." - icon = 'icons/obj/clothing/ranger.dmi' - icon_state = "ranger_boots" - -/obj/item/clothing/shoes/boots/ranger/Initialize() - . = ..() - if(icon_state == "ranger_boots") - name = "[bootcolor] ranger boots" - icon_state = "[bootcolor]_ranger_boots" - -/obj/item/clothing/shoes/boots/ranger/black - bootcolor = "black" - -/obj/item/clothing/shoes/boots/ranger/pink - bootcolor = "pink" - -/obj/item/clothing/shoes/boots/ranger/green - bootcolor = "green" - -/obj/item/clothing/shoes/boots/ranger/cyan - bootcolor = "cyan" - -/obj/item/clothing/shoes/boots/ranger/orange - bootcolor = "orange" - -/obj/item/clothing/shoes/boots/ranger/yellow - bootcolor = "yellow" - -/* - * 80s - */ - -/obj/item/clothing/shoes/sneakerspurple - name = "purple sneakers" - desc = "A stylish, expensive pair of purple sneakers." - icon_state = "sneakerspurple" - item_state = "sneakerspurple" - -/obj/item/clothing/shoes/sneakersblue - name = "blue sneakers" - desc = "A stylish, expensive pair of blue sneakers." - icon_state = "sneakersblue" - item_state = "sneakersblue" - -/obj/item/clothing/shoes/sneakersred - name = "red sneakers" - desc = "A stylish, expensive pair of red sneakers." - icon_state = "sneakersred" - item_state = "sneakersred" - -/obj/item/clothing/shoes/ballet - name = "pointe shoes" - desc = "These shoes feature long lace straps and flattened off toes. Great for the most elegant of dances!" - icon_state = "ballet" - item_state = "ballet" +/obj/item/clothing/shoes/syndigaloshes + desc = "A pair of brown shoes. They seem to have extra grip." + name = "brown shoes" + icon_state = "brown" + permeability_coefficient = 0.05 + item_flags = NOSLIP + origin_tech = list(TECH_ILLEGAL = 3) + var/list/clothing_choices = list() + siemens_coefficient = 0.8 + species_restricted = null + step_volume_mod = 0.5 + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/clothing/shoes/mime + name = "mime shoes" + icon_state = "white" + step_volume_mod = 0 //It's a mime + +/obj/item/clothing/shoes/galoshes + desc = "Rubber boots" + name = "galoshes" + icon_state = "galoshes" + permeability_coefficient = 0.05 + siemens_coefficient = 0 //They're thick rubber boots! Of course they won't conduct electricity! + item_flags = NOSLIP + slowdown = SHOES_SLOWDOWN+0.5 + species_restricted = null + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/clothing/shoes/dress + name = "dress shoes" + desc = "Sharp looking low quarters, perfect for a formal uniform." + icon_state = "laceups" + +/obj/item/clothing/shoes/dress/white + name = "white dress shoes" + desc = "Brilliantly white low quarters, not a spot on them." + icon_state = "whitedress" + +/obj/item/clothing/shoes/sandal + desc = "A pair of rather plain, wooden sandals." + name = "sandals" + icon_state = "wizard" + species_restricted = null + body_parts_covered = 0 + + wizard_garb = 1 + +/obj/item/clothing/shoes/flipflop + name = "flip flops" + desc = "A pair of foam flip flops. For those not afraid to show a little ankle." + icon_state = "thongsandal" + addblends = "thongsandal_a" + +/obj/item/clothing/shoes/cookflop + name = "grilling sandals" + desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" + icon_state = "cookflops" + species_restricted = null + body_parts_covered = 0 + +/obj/item/clothing/shoes/tourist_1 + name = "tourist sandals" + desc = "Black sandals usually worn by tourists. Need I say more?" + icon_state = "tourist_1" + species_restricted = null + body_parts_covered = 0 + +/obj/item/clothing/shoes/tourist_2 + name = "tourist sandals" + desc = "Green sandals usually worn by tourists. Need I say more?" + icon_state = "tourist_2" + species_restricted = null + body_parts_covered = 0 + +/obj/item/clothing/shoes/sandal/clogs + name = "plastic clogs" + desc = "A pair of plastic clog shoes." + icon_state = "clogs" + +/obj/item/clothing/shoes/sandal/marisa + desc = "A pair of magic, black shoes." + name = "magic shoes" + icon_state = "black" + body_parts_covered = FEET + +/obj/item/clothing/shoes/clown_shoes + desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" + name = "clown shoes" + icon_state = "clown" + slowdown = SHOES_SLOWDOWN+0.5 + force = 0 + //CHOMPRemove - removed built in squeak sounds + species_restricted = null + +/* CHOMPEdit - Replaced with squeak component +/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running) + if(running) + if(footstep >= 2) + footstep = 0 + playsound(src, "clownstep", 50, 1) // this will get annoying very fast. + else + footstep++ + else + playsound(src, "clownstep", 20, 1) +*/ + +/obj/item/clothing/shoes/cult + name = "boots" + desc = "A pair of boots worn by the followers of Nar-Sie." + icon_state = "cult" + item_state_slots = list(slot_r_hand_str = "cult", slot_l_hand_str = "cult") + force = 2 + siemens_coefficient = 0.7 + + cold_protection = FEET + min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = FEET + max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE + species_restricted = null + +/obj/item/clothing/shoes/cult/cultify() + return + +/obj/item/clothing/shoes/cyborg + name = "cyborg boots" + desc = "Shoes for a cyborg costume" + icon_state = "boots" + +/obj/item/clothing/shoes/slippers + name = "bunny slippers" + desc = "Fluffy!" + icon_state = "slippers" + force = 0 + species_restricted = null + w_class = ITEMSIZE_SMALL + drop_sound = 'sound/items/drop/clothing.ogg' + pickup_sound = 'sound/items/pickup/clothing.ogg' + +/obj/item/clothing/shoes/slippers/worn + name = "worn bunny slippers" + desc = "Fluffy..." + icon_state = "slippers_worn" + item_state_slots = list(slot_r_hand_str = "slippers", slot_l_hand_str = "slippers") + +/obj/item/clothing/shoes/laceup + name = "black oxford shoes" + icon_state = "oxford_black" + +/obj/item/clothing/shoes/laceup/grey + name = "grey oxford shoes" + icon_state = "oxford_grey" + +/obj/item/clothing/shoes/laceup/brown + name = "brown oxford shoes" + icon_state = "oxford_brown" + +/obj/item/clothing/shoes/swimmingfins + desc = "Help you swim good." + name = "swimming fins" + icon_state = "flippers" + item_state_slots = list(slot_r_hand_str = "galoshes", slot_l_hand_str = "galoshes") + item_flags = NOSLIP + slowdown = SHOES_SLOWDOWN+0.5 + species_restricted = null + +/obj/item/clothing/shoes/athletic + name = "athletic shoes" + desc = "A pair of sleek athletic shoes. Made by and for the sporty types." + icon_state = "sportshoe" + addblends = "sportshoe_a" + item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld") + +/obj/item/clothing/shoes/skater + name = "skater shoes" + desc = "A pair of wide shoes with thick soles. Designed for skating." + icon_state = "skatershoe" + addblends = "skatershoe_a" + item_state_slots = list(slot_r_hand_str = "skaterheld", slot_l_hand_str = "skaterheld") + +/obj/item/clothing/shoes/heels + name = "high heels" + desc = "A pair of high-heeled shoes. Fancy!" + icon_state = "heels" + addblends = "heels_a" + +/obj/item/clothing/shoes/footwraps + name = "cloth footwraps" + desc = "A roll of treated canvas used for wrapping claws or paws" + icon_state = "clothwrap" + item_state = "clothwrap" + force = 0 + w_class = ITEMSIZE_SMALL + species_restricted = null + drop_sound = 'sound/items/drop/clothing.ogg' + pickup_sound = 'sound/items/pickup/clothing.ogg' + +/obj/item/clothing/shoes/boots/ranger + var/bootcolor = "white" + name = "ranger boots" + desc = "The Rangers special lightweight hybrid magboots-jetboots perfect for EVA. If only these functions were so easy to copy in reality.\ + These ones are just a well-made pair of boots in appropriate colours." + icon = 'icons/obj/clothing/ranger.dmi' + icon_state = "ranger_boots" + +/obj/item/clothing/shoes/boots/ranger/Initialize() + . = ..() + if(icon_state == "ranger_boots") + name = "[bootcolor] ranger boots" + icon_state = "[bootcolor]_ranger_boots" + +/obj/item/clothing/shoes/boots/ranger/black + bootcolor = "black" + +/obj/item/clothing/shoes/boots/ranger/pink + bootcolor = "pink" + +/obj/item/clothing/shoes/boots/ranger/green + bootcolor = "green" + +/obj/item/clothing/shoes/boots/ranger/cyan + bootcolor = "cyan" + +/obj/item/clothing/shoes/boots/ranger/orange + bootcolor = "orange" + +/obj/item/clothing/shoes/boots/ranger/yellow + bootcolor = "yellow" + +/* + * 80s + */ + +/obj/item/clothing/shoes/sneakerspurple + name = "purple sneakers" + desc = "A stylish, expensive pair of purple sneakers." + icon_state = "sneakerspurple" + item_state = "sneakerspurple" + +/obj/item/clothing/shoes/sneakersblue + name = "blue sneakers" + desc = "A stylish, expensive pair of blue sneakers." + icon_state = "sneakersblue" + item_state = "sneakersblue" + +/obj/item/clothing/shoes/sneakersred + name = "red sneakers" + desc = "A stylish, expensive pair of red sneakers." + icon_state = "sneakersred" + item_state = "sneakersred" + +/obj/item/clothing/shoes/ballet + name = "pointe shoes" + desc = "These shoes feature long lace straps and flattened off toes. Great for the most elegant of dances!" + icon_state = "ballet" + item_state = "ballet" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 39ca0b8c74..f3fef22d7b 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -1,104 +1,104 @@ -//Captain's Spacesuit -/obj/item/clothing/head/helmet/space/capspace - name = "space helmet" - icon_state = "capspace" - desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." - item_flags = 0 - flags_inv = HIDEFACE|BLOCKHAIR - permeability_coefficient = 0.01 - armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50) - -//Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it. -/obj/item/clothing/suit/armor/captain - name = "Site Manager's armor" - desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" - icon_state = "caparmor" - w_class = ITEMSIZE_HUGE - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - item_flags = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) - slowdown = 1.5 - armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - min_pressure_protection = 0 - max_pressure_protection = 2 * ONE_ATMOSPHERE - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - -//Deathsquad suit -/obj/item/clothing/head/helmet/space/deathsquad - name = "deathsquad helmet" - desc = "That's not red paint. That's real blood." - icon_state = "deathsquad" - item_state_slots = list(slot_r_hand_str = "syndicate-helm-black-red", slot_l_hand_str = "syndicate-helm-black-red") - armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60) - item_flags = THICKMATERIAL - flags_inv = BLOCKHAIR - siemens_coefficient = 0.6 - -//how is this a space helmet? -/obj/item/clothing/head/helmet/space/deathsquad/beret - name = "officer's beret" - desc = "An armored beret commonly used by special operations officers." - icon_state = "beret_badge" - item_state_slots = list(slot_r_hand_str = "beret", slot_l_hand_str = "beret") - armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30) - item_flags = 0 - flags_inv = BLOCKHAIR - siemens_coefficient = 0.9 - -//Space santa outfit suit -/obj/item/clothing/head/helmet/space/santahat - name = "Santa's hat" - desc = "Ho ho ho. Merrry X-mas!" - icon_state = "santahat" - item_flags = 0 - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -/obj/item/clothing/suit/space/santa - name = "Santa's suit" - desc = "Festive!" - icon_state = "santa" - slowdown = 0 - item_flags = 0 - allowed = list(/obj/item) //for stuffing exta special presents - -//Space pirate outfit -/obj/item/clothing/head/helmet/space/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - item_flags = 0 - flags_inv = BLOCKHAIR - body_parts_covered = 0 - siemens_coefficient = 0.9 - -/obj/item/clothing/suit/space/pirate //Whhhhyyyyyyy??? - name = "pirate coat" - desc = "Yarr." - icon_state = "pirate" - w_class = ITEMSIZE_NORMAL - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) - slowdown = 0 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.9 - flags_inv = HIDETAIL|HIDEHOLSTER - body_parts_covered = UPPER_TORSO|ARMS - -//Orange emergency space suit -/obj/item/clothing/head/helmet/space/emergency - name = "emergency soft helmet" - icon_state = "syndicate-helm-orange" - desc = "A simple helmet with a built in light, smells like mothballs." - flash_protection = FLASH_PROTECTION_NONE - -/obj/item/clothing/suit/space/emergency - name = "emergency softsuit" - icon_state = "syndicate-orange" - desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile." - slowdown = 2 +//Captain's Spacesuit +/obj/item/clothing/head/helmet/space/capspace + name = "space helmet" + icon_state = "capspace" + desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." + item_flags = 0 + flags_inv = HIDEFACE|BLOCKHAIR + permeability_coefficient = 0.01 + armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50) + +//Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it. +/obj/item/clothing/suit/armor/captain + name = "Site Manager's armor" + desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" + icon_state = "caparmor" + w_class = ITEMSIZE_HUGE + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.02 + item_flags = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + slowdown = 1.5 + armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL + min_pressure_protection = 0 + max_pressure_protection = 2 * ONE_ATMOSPHERE + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + +//Deathsquad suit +/obj/item/clothing/head/helmet/space/deathsquad + name = "deathsquad helmet" + desc = "That's not red paint. That's real blood." + icon_state = "deathsquad" + item_state_slots = list(slot_r_hand_str = "syndicate-helm-black-red", slot_l_hand_str = "syndicate-helm-black-red") + armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60) + item_flags = THICKMATERIAL + flags_inv = BLOCKHAIR + siemens_coefficient = 0.6 + +//how is this a space helmet? +/obj/item/clothing/head/helmet/space/deathsquad/beret + name = "officer's beret" + desc = "An armored beret commonly used by special operations officers." + icon_state = "beret_badge" + item_state_slots = list(slot_r_hand_str = "beret", slot_l_hand_str = "beret") + armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30) + item_flags = 0 + flags_inv = BLOCKHAIR + siemens_coefficient = 0.9 + +//Space santa outfit suit +/obj/item/clothing/head/helmet/space/santahat + name = "Santa's hat" + desc = "Ho ho ho. Merrry X-mas!" + icon_state = "santahat" + item_flags = 0 + flags_inv = BLOCKHAIR + body_parts_covered = HEAD + +/obj/item/clothing/suit/space/santa + name = "Santa's suit" + desc = "Festive!" + icon_state = "santa" + slowdown = 0 + item_flags = 0 + allowed = list(/obj/item) //for stuffing exta special presents + +//Space pirate outfit +/obj/item/clothing/head/helmet/space/pirate + name = "pirate hat" + desc = "Yarr." + icon_state = "pirate" + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + item_flags = 0 + flags_inv = BLOCKHAIR + body_parts_covered = 0 + siemens_coefficient = 0.9 + +/obj/item/clothing/suit/space/pirate //Whhhhyyyyyyy??? + name = "pirate coat" + desc = "Yarr." + icon_state = "pirate" + w_class = ITEMSIZE_NORMAL + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) + slowdown = 0 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + siemens_coefficient = 0.9 + flags_inv = HIDETAIL|HIDEHOLSTER + body_parts_covered = UPPER_TORSO|ARMS + +//Orange emergency space suit +/obj/item/clothing/head/helmet/space/emergency + name = "emergency soft helmet" + icon_state = "syndicate-helm-orange" + desc = "A simple helmet with a built in light, smells like mothballs." + flash_protection = FLASH_PROTECTION_NONE + +/obj/item/clothing/suit/space/emergency + name = "emergency softsuit" + icon_state = "syndicate-orange" + desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile." + slowdown = 2 diff --git a/code/modules/clothing/spacesuits/rig/modules/combat_ch.dm b/code/modules/clothing/spacesuits/rig/modules/combat_ch.dm index 063966fc3c..90715609dd 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat_ch.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat_ch.dm @@ -1,5 +1,5 @@ -/obj/item/rig_module/grenade_launcher/nerfed - - charges = list( - list("flashbang", "flashbang", /obj/item/weapon/grenade/flashbang, 3), +/obj/item/rig_module/grenade_launcher/nerfed + + charges = list( + list("flashbang", "flashbang", /obj/item/weapon/grenade/flashbang, 3), ) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/utility_ch.dm b/code/modules/clothing/spacesuits/rig/modules/utility_ch.dm index c1c175ab5c..10d442a78e 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility_ch.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility_ch.dm @@ -1,9 +1,9 @@ -/obj/item/rig_module/sprinter/pursuit - name = "pursuit sprint module" - desc = "A faster hardsuit-integrated sprint module." - icon_state = "sprinter" - interface_name = "pursuit system" - interface_desc = "Super energy consumption for super speed." - sprint_speed = 3 - use_power_cost = 100 +/obj/item/rig_module/sprinter/pursuit + name = "pursuit sprint module" + desc = "A faster hardsuit-integrated sprint module." + icon_state = "sprinter" + interface_name = "pursuit system" + interface_desc = "Super energy consumption for super speed." + sprint_speed = 3 + use_power_cost = 100 active_power_cost = 5 \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 7d06f0a66c..11a5636588 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -1,1022 +1,1022 @@ -#define ONLY_DEPLOY 1 -#define ONLY_RETRACT 2 -#define SEAL_DELAY 30 - -/* - * Defines the behavior of hardsuits/rigs/power armour. - */ - -/obj/item/weapon/rig - name = "hardsuit control module" - icon = 'icons/obj/rig_modules.dmi' - desc = "A back-mounted hardsuit deployment and control mechanism." - flags = PHORONGUARD - slot_flags = SLOT_BACK - req_one_access = list() - req_access = list() - w_class = ITEMSIZE_HUGE - action_button_name = "Toggle Heatsink" - - // These values are passed on to all component pieces. - armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0.2 - permeability_coefficient = 0.1 - unacidable = TRUE - preserve_item = 1 - - var/default_mob_icon = 'icons/mob/rig_back.dmi' - - var/suit_state //The string used for the suit's icon_state. - - var/interface_path = "RIGSuit" - var/ai_interface_path = "RIGSuit" - var/interface_title = "Hardsuit Controller" - var/wearer_move_delay //Used for AI moving. - var/ai_controlled_move_delay = 10 - - // Keeps track of what this rig should spawn with. - var/suit_type = "hardsuit" - var/list/initial_modules - var/chest_type = /obj/item/clothing/suit/space/rig - var/helm_type = /obj/item/clothing/head/helmet/space/rig - var/boot_type = /obj/item/clothing/shoes/magboots/rig - var/glove_type = /obj/item/clothing/gloves/gauntlets/rig - var/cell_type = /obj/item/weapon/cell/high - var/air_type = /obj/item/weapon/tank/oxygen - - - //Component/device holders. - var/obj/item/weapon/tank/air_supply // Air tank, if any. - var/obj/item/clothing/shoes/boots = null // Deployable boots, if any. - var/obj/item/clothing/suit/space/rig/chest // Deployable chestpiece, if any. - var/obj/item/clothing/head/helmet/space/rig/helmet = null // Deployable helmet, if any. - var/obj/item/clothing/gloves/gauntlets/rig/gloves = null // Deployable gauntlets, if any. - var/obj/item/weapon/cell/cell // Power supply, if any. - var/obj/item/rig_module/selected_module = null // Primary system (used with middle-click) - var/obj/item/rig_module/vision/visor // Kinda shitty to have a var for a module, but saves time. - var/obj/item/rig_module/voice/speech // As above. - var/mob/living/carbon/human/wearer // The person currently wearing the rig. - var/image/mob_icon // Holder for on-mob icon. - var/list/installed_modules = list() // Power consumption/use bookkeeping. - - // Cooling system vars. - var/cooling_on = 0 //is it turned on? - var/max_cooling = 15 // in degrees per second - probably don't need to mess with heat capacity here - var/charge_consumption = 2 // charge per second at max_cooling //more effective on a rig, because it's all built in already - var/thermostat = T20C - - // Rig status vars. - var/open = 0 // Access panel status. - var/locked = 1 // Lock status. - var/subverted = 0 - var/interface_locked = 0 - var/control_overridden = 0 - var/ai_override_enabled = 0 - var/security_check_enabled = 1 - var/malfunctioning = 0 - var/malfunction_delay = 0 - var/electrified = 0 - var/locked_down = 0 - - var/seal_delay = SEAL_DELAY - var/sealing // Keeps track of seal status independantly of canremove. - var/offline = 1 // Should we be applying suit maluses? - var/offline_slowdown = 1.5 // If the suit is deployed and unpowered, it sets slowdown to this. - var/vision_restriction - var/offline_vision_restriction = 1 // 0 - none, 1 - welder vision, 2 - blind. Maybe move this to helmets. - var/airtight = 1 //If set, will adjust AIRTIGHT flag and pressure protections on components. Otherwise it should leave them untouched. - var/rigsuit_max_pressure = 10 * ONE_ATMOSPHERE // Max pressure the rig protects against when sealed - var/rigsuit_min_pressure = 0 // Min pressure the rig protects against when sealed - - var/emp_protection = 0 - item_flags = PHORONGUARD //VOREStation add - - // Wiring! How exciting. - var/datum/wires/rig/wires - var/datum/effect/effect/system/spark_spread/spark_system - var/datum/mini_hud/rig/minihud - - // Action button - action_button_name = "Hardsuit Interface" - -/obj/item/weapon/rig/New() - ..() - - suit_state = icon_state - item_state = icon_state - wires = new(src) - - if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access)) - locked = 0 - - spark_system = new() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - if(initial_modules && initial_modules.len) - for(var/path in initial_modules) - var/obj/item/rig_module/module = new path(src) - installed_modules += module - module.installed(src) - - // Create and initialize our various segments. - if(cell_type) - cell = new cell_type(src) - if(air_type) - air_supply = new air_type(src) - if(glove_type) - gloves = new glove_type(src) - verbs |= /obj/item/weapon/rig/proc/toggle_gauntlets - if(helm_type) - helmet = new helm_type(src) - verbs |= /obj/item/weapon/rig/proc/toggle_helmet - if(boot_type) - boots = new boot_type(src) - verbs |= /obj/item/weapon/rig/proc/toggle_boots - if(chest_type) - chest = new chest_type(src) - if(allowed) - chest.allowed = allowed - verbs |= /obj/item/weapon/rig/proc/toggle_chest - - for(var/obj/item/piece in list(gloves,helmet,boots,chest)) - if(!istype(piece)) - continue - piece.canremove = FALSE - piece.name = "[suit_type] [initial(piece.name)]" - piece.desc = "It seems to be part of a [src.name]." - piece.icon_state = "[suit_state]" - piece.min_cold_protection_temperature = min_cold_protection_temperature - piece.max_heat_protection_temperature = max_heat_protection_temperature - if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation. - piece.siemens_coefficient = siemens_coefficient - piece.permeability_coefficient = permeability_coefficient - piece.unacidable = unacidable - if(islist(armor)) piece.armor = armor.Copy() - if(islist(armorsoak)) piece.armorsoak = armorsoak.Copy() - - update_icon(1) - -/obj/item/weapon/rig/Destroy() - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - var/mob/living/M = piece.loc - if(istype(M)) - M.drop_from_inventory(piece) - qdel(piece) - STOP_PROCESSING(SSobj, src) - qdel(wires) - wires = null - qdel(spark_system) - spark_system = null - return ..() - -/obj/item/weapon/rig/examine() - . = ..() - if(wearer) - for(var/obj/item/piece in list(helmet,gloves,chest,boots)) - if(!piece || piece.loc != wearer) - continue - . += "\icon[piece][bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." - - if(src.loc == usr) - . += "The access panel is [locked? "locked" : "unlocked"]." - . += "The maintenance panel is [open ? "open" : "closed"]." - . += "Hardsuit systems are [offline ? "offline" : "online"]." - . += "The cooling system is [cooling_on ? "active" : "inactive"]." - - if(open) - . += "It's equipped with [english_list(installed_modules)]." - -// We only care about processing when we're on a mob -/obj/item/weapon/rig/Moved(old_loc, direction, forced) - if(ismob(loc)) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - QDEL_NULL(minihud) // Just in case we get removed some other way - - // If we've lost any parts, grab them back. - var/mob/living/M - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - if(piece.loc != src && !(wearer && piece.loc == wearer)) - if(istype(piece.loc, /mob/living)) - M = piece.loc - M.unEquip(piece) - piece.forceMove(src) - -/obj/item/weapon/rig/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands) - if(!inhands && (slot_name == slot_back_str || slot_name == slot_belt_str)) - if(icon_override) - return icon_override - else if(mob_icon) - return mob_icon - - return ..() - -/obj/item/weapon/rig/proc/suit_is_deployed() - if(!istype(wearer) || src.loc != wearer || (wearer.back != src && wearer.belt != src)) - return 0 - if(helm_type && !(helmet && wearer.head == helmet)) - return 0 - if(glove_type && !(gloves && wearer.gloves == gloves)) - return 0 - if(boot_type && !(boots && wearer.shoes == boots)) - return 0 - if(chest_type && !(chest && wearer.wear_suit == chest)) - return 0 - return 1 - -// Updates pressure protection -// Seal = 1 sets protection -// Seal = 0 unsets protection -/obj/item/weapon/rig/proc/update_airtight(var/obj/item/piece, var/seal = 0) - if(seal == 1) - piece.min_pressure_protection = rigsuit_min_pressure - piece.max_pressure_protection = rigsuit_max_pressure - piece.item_flags |= AIRTIGHT - else - piece.min_pressure_protection = null - piece.max_pressure_protection = null - piece.item_flags &= ~AIRTIGHT - return - - -/obj/item/weapon/rig/proc/reset() - offline = 2 - canremove = TRUE - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[suit_state]" - if(airtight) - update_airtight(piece, 0) // Unseal - update_icon(1) - -/obj/item/weapon/rig/proc/cut_suit() - offline = 2 - canremove = TRUE - toggle_piece("helmet", loc, ONLY_RETRACT, TRUE) - toggle_piece("gauntlets", loc, ONLY_RETRACT, TRUE) - toggle_piece("boots", loc, ONLY_RETRACT, TRUE) - toggle_piece("chest", loc, ONLY_RETRACT, TRUE) - update_icon(1) - -/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant) - - if(sealing) return - - if(!check_power_cost(M)) - return 0 - - deploy(M,instant) - - var/seal_target = !canremove - var/failed_to_seal - - var/obj/screen/rig_booting/booting_L = new - var/obj/screen/rig_booting/booting_R = new - - if(!seal_target) - booting_L.icon_state = "boot_left" - booting_R.icon_state = "boot_load" - animate(booting_L, alpha=230, time=30, easing=SINE_EASING) - animate(booting_R, alpha=200, time=20, easing=SINE_EASING) - M.client?.screen += booting_L - M.client?.screen += booting_R - - canremove = FALSE // No removing the suit while unsealing. - sealing = 1 - - if(!seal_target && !suit_is_deployed()) - M.visible_message("[M]'s suit flashes an error light.","Your suit flashes an error light. It can't function properly without being fully deployed.") - playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) - failed_to_seal = 1 - - if(!failed_to_seal) - - if(!instant) - M.visible_message("[M]'s suit emits a quiet hum as it begins to adjust its seals.","With a quiet hum, the suit begins running checks and adjusting components.") - if(seal_delay && !do_after(M,seal_delay)) - if(M) - to_chat(M, "You must remain still while the suit is adjusting the components.") - playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) - failed_to_seal = 1 - if(!M) - failed_to_seal = 1 - else - for(var/list/piece_data in list(list(M.shoes,boots,"boots",boot_type),list(M.gloves,gloves,"gloves",glove_type),list(M.head,helmet,"helmet",helm_type),list(M.wear_suit,chest,"chest",chest_type))) - - var/obj/item/piece = piece_data[1] - var/obj/item/compare_piece = piece_data[2] - var/msg_type = piece_data[3] - var/piece_type = piece_data[4] - - if(!piece || !piece_type) - continue - - if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type) - if(M) - to_chat(M, "You must remain still while the suit is adjusting the components.") - failed_to_seal = 1 - break - - if(!failed_to_seal && (M.back == src || M.belt == src) && piece == compare_piece) - - if(seal_delay && !instant && !do_after(M,seal_delay,needhand=0)) - failed_to_seal = 1 - - piece.icon_state = "[suit_state][!seal_target ? "_sealed" : ""]" - switch(msg_type) - if("boots") - to_chat(M, "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].") - M.update_inv_shoes() - if("gloves") - to_chat(M, "\The [piece] [!seal_target ? "tighten around your fingers and wrists" : "become loose around your fingers"].") - M.update_inv_gloves() - if("chest") - to_chat(M, "\The [piece] [!seal_target ? "cinches tight again your chest" : "releases your chest"].") - M.update_inv_wear_suit() - if("helmet") - to_chat(M, "\The [piece] hisses [!seal_target ? "closed" : "open"].") - M.update_inv_head() - if(helmet?.light_system == STATIC_LIGHT) - helmet.update_light(wearer) - - //sealed pieces become airtight, protecting against diseases - if (!seal_target) - piece.armor["bio"] = 100 - else - piece.armor["bio"] = src.armor["bio"] - playsound(src,'sound/machines/rig/rigservo.ogg', 10, FALSE) - - else - failed_to_seal = 1 - - if((M && !(istype(M) && (M.back == src || M.belt == src)) && !istype(M,/mob/living/silicon)) || (!seal_target && !suit_is_deployed())) - failed_to_seal = 1 - - sealing = null - - if(failed_to_seal) - M.client?.screen -= booting_L - M.client?.screen -= booting_R - qdel(booting_L) - qdel(booting_R) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[suit_state][!seal_target ? "" : "_sealed"]" - canremove = !seal_target - if(airtight) - update_component_sealed() - update_icon(1) - return 0 - - // Success! - canremove = seal_target - if(M.hud_used) - if(canremove) - QDEL_NULL(minihud) - else - minihud = new (M.hud_used, src) - to_chat(M, "Your entire suit [canremove ? "loosens as the components relax" : "tightens around you as the components lock into place"].") - playsound(src, 'sound/machines/rig/rigstarted.ogg', 10, FALSE) - M.client?.screen -= booting_L - qdel(booting_L) - booting_R.icon_state = "boot_done" - spawn(40) - M.client?.screen -= booting_R - qdel(booting_R) - - if(canremove) - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - if(airtight) - update_component_sealed() - update_icon(1) - -/obj/item/weapon/rig/proc/update_component_sealed() - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(canremove) - update_airtight(piece, 0) // Unseal - else - update_airtight(piece, 1) // Seal - -/obj/item/weapon/rig/ui_action_click() - toggle_cooling(usr) - -/obj/item/weapon/rig/proc/toggle_cooling(var/mob/user) - if(cooling_on) - turn_cooling_off(user) - else - turn_cooling_on(user) - -/obj/item/weapon/rig/proc/turn_cooling_on(var/mob/user) - if(!cell) - return - if(cell.charge <= 0) - to_chat(user, "\The [src] has no power!") - return - if(!suit_is_deployed()) - to_chat(user, "The hardsuit needs to be deployed first!") - return - - cooling_on = 1 - to_chat(usr, "You switch \the [src]'s cooling system on.") - - -/obj/item/weapon/rig/proc/turn_cooling_off(var/mob/user, var/failed) - if(failed) - visible_message("\The [src]'s cooling system clicks and whines as it powers down.") - else - to_chat(usr, "You switch \the [src]'s cooling system off.") - cooling_on = 0 - -/obj/item/weapon/rig/proc/get_environment_temperature() - if (ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(istype(H.loc, /obj/mecha)) - var/obj/mecha/M = H.loc - return M.return_temperature() - else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) - var/obj/machinery/atmospherics/unary/cryo_cell/cryo = H.loc - return cryo.air_contents.temperature - - var/turf/T = get_turf(src) - if(istype(T, /turf/space)) - return 0 //space has no temperature, this just makes sure the cooling unit works in space - - var/datum/gas_mixture/environment = T.return_air() - if (!environment) - return 0 - - return environment.temperature - -/obj/item/weapon/rig/proc/attached_to_user(mob/M) - if (!ishuman(M)) - return 0 - - var/mob/living/carbon/human/H = M - - if (!H.wear_suit || (H.back != src && H.belt != src)) - return 0 - - return 1 - -/obj/item/weapon/rig/proc/coolingProcess() - if (!cooling_on || !cell) - return - - if (!ismob(loc)) - return - - if (!attached_to_user(loc)) //make sure the rig's not just in their hands - return - - if (!suit_is_deployed()) //inbuilt systems only work on the suit they're designed to work on - return - - var/mob/living/carbon/human/H = loc - - var/turf/T = get_turf(src) - var/datum/gas_mixture/environment = T.return_air() - var/efficiency = 1 - H.get_pressure_weakness(environment.return_pressure()) // You need to have a good seal for effective cooling - var/env_temp = get_environment_temperature() //wont save you from a fire - var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) - var/thermal_protection = H.get_heat_protection(env_temp) // ... unless you've got a good suit. - - if(thermal_protection < 0.99) //For some reason, < 1 returns false if the value is 1. - temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) - else - temp_adj = min(H.bodytemperature - thermostat, max_cooling) - - if (temp_adj < 0.5) //only cools, doesn't heat, also we don't need extreme precision - return - - var/charge_usage = (temp_adj/max_cooling)*charge_consumption - - H.bodytemperature -= temp_adj*efficiency - - cell.use(charge_usage) - - if(cell.charge <= 0) - turn_cooling_off(H, 1) - -/obj/item/weapon/rig/process() - // Not on a mob...? - if(!ismob(loc)) - if(wearer?.wearing_rig == src) - wearer.wearing_rig = null - wearer = null - return PROCESS_KILL - - // Run through cooling - coolingProcess() - - if(!istype(wearer) || loc != wearer || (wearer.back != src && wearer.belt != src) || canremove || !cell || cell.charge <= 0) - if(!cell || cell.charge <= 0) - if(electrified > 0) - electrified = 0 - if(!offline) - if(istype(wearer)) - if(!canremove) - if (offline_slowdown < 1.5) - to_chat(wearer, "Your suit beeps stridently, and suddenly goes dead.") - else - to_chat(wearer, "Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.") - playsound(src, 'sound/machines/rig/rigdown.ogg', 60, FALSE) - if(offline_vision_restriction == 1) - to_chat(wearer, "The suit optics flicker and die, leaving you with restricted vision.") - else if(offline_vision_restriction == 2) - to_chat(wearer, "The suit optics drop out completely, drowning you in darkness.") - if(!offline) - offline = 1 - else - if(offline) - offline = 0 - if(istype(wearer) && !wearer.wearing_rig) - wearer.wearing_rig = src - if(!istype(src,/obj/item/weapon/rig/protean)) //CHOMPEdit - Stupid snowflake protean special check for rig assimilation code - slowdown = initial(slowdown) - - if(offline) - if(offline == 1) - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - offline = 2 - slowdown = offline_slowdown - return - - if(cell && cell.charge > 0 && electrified > 0) - electrified-- - - if(malfunction_delay > 0) - malfunction_delay-- - else if(malfunctioning) - malfunctioning-- - malfunction() - - for(var/obj/item/rig_module/module in installed_modules) - cell.use(module.process()*10) - -/obj/item/weapon/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai) - - if(!istype(user)) - return 0 - - var/fail_msg - - if(!user_is_ai) - var/mob/living/carbon/human/H = user - if(istype(H) && (H.back != src && H.belt != src)) - fail_msg = "You must be wearing \the [src] to do this." - else if(user.incorporeal_move) - fail_msg = "You must be solid to do this." - if(sealing) - fail_msg = "The hardsuit is in the process of adjusting seals and cannot be activated." - else if(!fail_msg && ((use_unconcious && user.stat > 1) || (!use_unconcious && user.stat))) - fail_msg = "You are in no fit state to do that." - else if(!cell) - fail_msg = "There is no cell installed in the suit." - else if(cost && cell.charge < cost * 10) //TODO: Cellrate? - fail_msg = "Not enough stored power." - - if(fail_msg) - to_chat(user, fail_msg) - playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) - return 0 - - // This is largely for cancelling stealth and whatever. - if(mod && mod.disruptive) - for(var/obj/item/rig_module/module in (installed_modules - mod)) - if(module.active && module.disruptable) - module.deactivate() - - cell.use(cost*10) - return 1 - -/obj/item/weapon/rig/update_icon(var/update_mob_icon) - - cut_overlays() - if(!mob_icon || update_mob_icon) - var/species_icon = default_mob_icon - // Since setting mob_icon will override the species checks in - // update_inv_wear_suit(), handle species checks here. - if(wearer && LAZYACCESS(sprite_sheets, wearer.species.get_bodytype(wearer))) - species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)] - mob_icon = icon(icon = species_icon, icon_state = "[icon_state]") - - if(installed_modules.len) - for(var/obj/item/rig_module/module in installed_modules) - if(module.suit_overlay) - chest.add_overlay(image(module.suit_overlay_icon, icon_state = "[module.suit_overlay]", dir = SOUTH)) - - if(wearer) - wearer.update_inv_shoes() - wearer.update_inv_gloves() - wearer.update_inv_head() - wearer.update_inv_wear_suit() - wearer.update_inv_back() - return - -/obj/item/weapon/rig/proc/check_suit_access(var/mob/living/carbon/human/user, var/do_message = TRUE) - - if(!security_check_enabled) - return 1 - - if(istype(user)) - if(!canremove) - return 1 - if(malfunction_check(user)) - return 0 - if(user.back != src && user.belt != src) - return 0 - else if(!src.allowed(user)) - if(do_message) - to_chat(user, "Unauthorized user. Access denied.") - return 0 - - else if(!ai_override_enabled) - if(do_message) - to_chat(user, "Synthetic access disabled. Please consult hardware provider.") - return 0 - - return 1 - -/obj/item/weapon/rig/proc/notify_ai(var/message) - for(var/obj/item/rig_module/ai_container/module in installed_modules) - if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) - to_chat(module.integrated_ai, "[message]") - . = 1 - -/obj/item/weapon/rig/equipped(mob/living/carbon/human/M) - ..() - - if(istype(M.back, /obj/item/weapon/rig) && istype(M.belt, /obj/item/weapon/rig)) - to_chat(M, "You try to put on the [src], but it won't fit.") - if(M && (M.back == src || M.belt == src)) - if(!M.unEquip(src)) - return - src.forceMove(get_turf(src)) - return - - if(seal_delay > 0 && istype(M) && (M.back == src || M.belt == src)) - M.visible_message("[M] starts putting on \the [src]...", "You start putting on \the [src]...") - if(!do_after(M,seal_delay)) - if(M && (M.back == src || M.belt == src)) - if(!M.unEquip(src)) - return - src.forceMove(get_turf(src)) - return - - if(istype(M) && (M.back == src || M.belt == src)) - M.visible_message("[M] struggles into \the [src].", "You struggle into \the [src].") - wearer = M - wearer.wearing_rig = src - update_icon() - -/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode, var/forced = FALSE) - - if((sealing || !cell || !cell.charge) && !forced) - return - - if((!istype(wearer) || (!wearer.back == src && !wearer.belt == src)) && !forced) - return - - if((usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) && !forced) // If the usr isn't wearing the suit it's probably an AI. - return - - var/obj/item/check_slot - var/equip_to - var/obj/item/use_obj - - if(!H) - return - - switch(piece) - if("helmet") - equip_to = slot_head - use_obj = helmet - check_slot = H.head - if("gauntlets") - equip_to = slot_gloves - use_obj = gloves - check_slot = H.gloves - if("boots") - equip_to = slot_shoes - use_obj = boots - check_slot = H.shoes - if("chest") - equip_to = slot_wear_suit - use_obj = chest - check_slot = H.wear_suit - - if(use_obj) - if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) - - var/mob/living/carbon/human/holder - - if(use_obj) - holder = use_obj.loc - if(istype(holder)) - if(use_obj && check_slot == use_obj) - to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") - playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE) - use_obj.canremove = TRUE - holder.drop_from_inventory(use_obj) - use_obj.forceMove(get_turf(src)) - use_obj.dropped() - use_obj.canremove = FALSE - use_obj.forceMove(src) - - else if (deploy_mode != ONLY_RETRACT) - if(check_slot && check_slot == use_obj) - return - use_obj.forceMove(H) - if(!H.equip_to_slot_if_possible(use_obj, equip_to, 0, 1)) - use_obj.forceMove(src) - if(check_slot) - to_chat(H, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") - return - else - to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") - playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE) - - if(piece == "helmet" && helmet?.light_system == STATIC_LIGHT) - helmet.update_light() - -/obj/item/weapon/rig/proc/deploy(mob/M,var/sealed) - - var/mob/living/carbon/human/H = M - - if(!H || !istype(H)) return - - if(H.back != src && H.belt != src) - return - - if(sealed) - if(H.head) - var/obj/item/garbage = H.head - H.drop_from_inventory(garbage) - H.head = null - qdel(garbage) - - if(H.gloves) - var/obj/item/garbage = H.gloves - H.drop_from_inventory(garbage) - H.gloves = null - qdel(garbage) - - if(H.shoes) - var/obj/item/garbage = H.shoes - H.drop_from_inventory(garbage) - H.shoes = null - qdel(garbage) - - if(H.wear_suit) - var/obj/item/garbage = H.wear_suit - H.drop_from_inventory(garbage) - H.wear_suit = null - qdel(garbage) - - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, H, ONLY_DEPLOY) - -/obj/item/weapon/rig/dropped(var/mob/user) - ..() - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, user, ONLY_RETRACT) - if(wearer && wearer.wearing_rig == src) - wearer.wearing_rig = null - wearer = null - -//Todo -/obj/item/weapon/rig/proc/malfunction() - return 0 - -/obj/item/weapon/rig/emp_act(severity_class) - //set malfunctioning - if(emp_protection < 30) //for ninjas, really. - malfunctioning += 10 - if(malfunction_delay <= 0) - malfunction_delay = max(malfunction_delay, round(30/severity_class)) - - //drain some charge - if(cell) cell.emp_act(severity_class + 15) - - //possibly damage some modules - take_hit((100/severity_class), "electrical pulse", 1) - -/obj/item/weapon/rig/proc/shock(mob/user) - if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. - spark_system.start() - if(user.stunned) - return 1 - return 0 - -/obj/item/weapon/rig/proc/take_hit(damage, source, is_emp=0) - - if(!installed_modules.len) - return - - var/chance - if(!is_emp) - chance = 2*max(0, damage - (chest? chest.breach_threshold : 0)) - else - //Want this to be roughly independant of the number of modules, meaning that X emp hits will disable Y% of the suit's modules on average. - //that way people designing hardsuits don't have to worry (as much) about how adding that extra module will affect emp resiliance by 'soaking' hits for other modules - chance = 2*max(0, damage - emp_protection)*min(installed_modules.len/15, 1) - - if(!prob(chance)) - return - - //deal addition damage to already damaged module first. - //This way the chances of a module being disabled aren't so remote. - var/list/valid_modules = list() - var/list/damaged_modules = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.damage < 2) - valid_modules |= module - if(module.damage > 0) - damaged_modules |= module - - var/obj/item/rig_module/dam_module = null - if(damaged_modules.len) - dam_module = pick(damaged_modules) - else if(valid_modules.len) - dam_module = pick(valid_modules) - - if(!dam_module) return - - dam_module.damage++ - - if(!source) - source = "hit" - - if(wearer) - if(dam_module.damage >= 2) - to_chat(wearer, "The [source] has disabled your [dam_module.interface_name]!") - else - to_chat(wearer, "The [source] has damaged your [dam_module.interface_name]!") - dam_module.deactivate() - -/obj/item/weapon/rig/proc/malfunction_check(var/mob/living/carbon/human/user) - if(malfunction_delay) - if(offline) - to_chat(user, "The suit is completely unresponsive.") - else - to_chat(user, "ERROR: Hardware fault. Rebooting interface...") - return 1 - return 0 - -/obj/item/weapon/rig/proc/ai_can_move_suit(var/mob/user, var/check_user_module = 0, var/check_for_ai = 0) - - if(check_for_ai) - if(!(locate(/obj/item/rig_module/ai_container) in contents)) - return 0 - var/found_ai - for(var/obj/item/rig_module/ai_container/module in contents) - if(module.damage >= 2) - continue - if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) - found_ai = 1 - break - if(!found_ai) - return 0 - - if(check_user_module) - if(!user || !user.loc || !user.loc.loc) - return 0 - var/obj/item/rig_module/ai_container/module = user.loc.loc - if(!istype(module) || module.damage >= 2) - to_chat(user, "Your host module is unable to interface with the suit.") - return 0 - - if(offline || !cell || !cell.charge || locked_down) - if(user) - to_chat(user, "Your host rig is unpowered and unresponsive.") - return 0 - if(!wearer || (wearer.back != src && wearer.belt != src)) - if(user) - to_chat(user, "Your host rig is not being worn.") - return 0 - if(!wearer.stat && !control_overridden && !ai_override_enabled) - if(user) - to_chat(user, "You are locked out of the suit servo controller.") - return 0 - return 1 - -/obj/item/weapon/rig/proc/force_rest(var/mob/user) - if(!ai_can_move_suit(user, check_user_module = 1)) - return - wearer.lay_down() - to_chat(user, "\The [wearer] is now [wearer.resting ? "resting" : "getting up"].") - -/obj/item/weapon/rig/proc/forced_move(var/direction, var/mob/user, var/ai_moving = TRUE) - - // Why is all this shit in client/Move()? Who knows? - if(world.time < wearer_move_delay) - return - - if(!wearer || !wearer.loc) //CHOMP Edit - Removed some stuff for protean living hardsuit - return - -//CHOMP Addition - Added this for protean living hardsuit - wearer_move_delay = world.time + 2 - if(ai_moving) - if(!ai_can_move_suit(user, check_user_module = 1)) - return - // AIs are a bit slower than regular and ignore move intent. - //CHOMPEdit - Moved this to where it's relevant - wearer_move_delay = world.time + ai_controlled_move_delay - - //This is sota the goto stop mobs from moving var - if(wearer.transforming || !wearer.canmove) - return - - if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0)) - if(!wearer.Process_Spacemove(0)) - return 0 - - if(malfunctioning) - direction = pick(cardinal) - - // Inside an object, tell it we moved. - if(isobj(wearer.loc) || ismob(wearer.loc)) - var/atom/O = wearer.loc - return O.relaymove(wearer, direction) - - if(isturf(wearer.loc)) - if(wearer.restrained())//Why being pulled while cuffed prevents you from moving - for(var/mob/M in range(wearer, 1)) - if(M.pulling == wearer) - if(!M.restrained() && M.stat == 0 && M.canmove && wearer.Adjacent(M)) - to_chat(user, "Your host is restrained! They can't move!") - return 0 - else - M.stop_pulling() - - if(wearer.pinned.len) - to_chat(src, "Your host is pinned to a wall by [wearer.pinned[1]]!") - return 0 - - if(istype(wearer.buckled, /obj/vehicle)) - //manually set move_delay for vehicles so we don't inherit any mob movement penalties - //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm - wearer_move_delay = world.time - return wearer.buckled.relaymove(wearer, direction) - - if(istype(wearer.machine, /obj/machinery)) - if(wearer.machine.relaymove(wearer, direction)) - return - - if(wearer.pulledby || wearer.buckled) // Wheelchair driving! - if(istype(wearer.loc, /turf/space)) - return // No wheelchair driving in space - if(istype(wearer.pulledby, /obj/structure/bed/chair/wheelchair)) - return wearer.pulledby.relaymove(wearer, direction) - else if(istype(wearer.buckled, /obj/structure/bed/chair/wheelchair)) - if(ishuman(wearer.buckled)) - var/obj/item/organ/external/l_hand = wearer.get_organ("l_hand") - var/obj/item/organ/external/r_hand = wearer.get_organ("r_hand") - if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED))) - return // No hands to drive your chair? Tough luck! - wearer_move_delay += 2 - return wearer.buckled.relaymove(wearer,direction) - - var/power_cost = 200 - if(!ai_moving) - power_cost = 20 - cell.use(power_cost) //Arbitrary, TODO - wearer.Move(get_step(get_turf(wearer),direction),direction) - -// This returns the rig if you are contained inside one, but not if you are wearing it -/atom/proc/get_rig() - if(loc) - return loc.get_rig() - return null - -/obj/item/weapon/rig/get_rig() - return src - -/mob/living/carbon/human/get_rig() - if(istype(back, /obj/item/weapon/rig)) - return back - else if(istype(belt, /obj/item/weapon/rig)) - return belt - else - return null - -//Boot animation screen objects -/obj/screen/rig_booting - screen_loc = "1,1" - icon = 'icons/obj/rig_boot.dmi' - icon_state = "" - layer = SCREEN_LAYER - plane = PLANE_FULLSCREEN - mouse_opacity = 0 - alpha = 20 //Animated up when loading - -#undef ONLY_DEPLOY -#undef ONLY_RETRACT -#undef SEAL_DELAY +#define ONLY_DEPLOY 1 +#define ONLY_RETRACT 2 +#define SEAL_DELAY 30 + +/* + * Defines the behavior of hardsuits/rigs/power armour. + */ + +/obj/item/weapon/rig + name = "hardsuit control module" + icon = 'icons/obj/rig_modules.dmi' + desc = "A back-mounted hardsuit deployment and control mechanism." + flags = PHORONGUARD + slot_flags = SLOT_BACK + req_one_access = list() + req_access = list() + w_class = ITEMSIZE_HUGE + action_button_name = "Toggle Heatsink" + + // These values are passed on to all component pieces. + armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + siemens_coefficient = 0.2 + permeability_coefficient = 0.1 + unacidable = TRUE + preserve_item = 1 + + var/default_mob_icon = 'icons/mob/rig_back.dmi' + + var/suit_state //The string used for the suit's icon_state. + + var/interface_path = "RIGSuit" + var/ai_interface_path = "RIGSuit" + var/interface_title = "Hardsuit Controller" + var/wearer_move_delay //Used for AI moving. + var/ai_controlled_move_delay = 10 + + // Keeps track of what this rig should spawn with. + var/suit_type = "hardsuit" + var/list/initial_modules + var/chest_type = /obj/item/clothing/suit/space/rig + var/helm_type = /obj/item/clothing/head/helmet/space/rig + var/boot_type = /obj/item/clothing/shoes/magboots/rig + var/glove_type = /obj/item/clothing/gloves/gauntlets/rig + var/cell_type = /obj/item/weapon/cell/high + var/air_type = /obj/item/weapon/tank/oxygen + + + //Component/device holders. + var/obj/item/weapon/tank/air_supply // Air tank, if any. + var/obj/item/clothing/shoes/boots = null // Deployable boots, if any. + var/obj/item/clothing/suit/space/rig/chest // Deployable chestpiece, if any. + var/obj/item/clothing/head/helmet/space/rig/helmet = null // Deployable helmet, if any. + var/obj/item/clothing/gloves/gauntlets/rig/gloves = null // Deployable gauntlets, if any. + var/obj/item/weapon/cell/cell // Power supply, if any. + var/obj/item/rig_module/selected_module = null // Primary system (used with middle-click) + var/obj/item/rig_module/vision/visor // Kinda shitty to have a var for a module, but saves time. + var/obj/item/rig_module/voice/speech // As above. + var/mob/living/carbon/human/wearer // The person currently wearing the rig. + var/image/mob_icon // Holder for on-mob icon. + var/list/installed_modules = list() // Power consumption/use bookkeeping. + + // Cooling system vars. + var/cooling_on = 0 //is it turned on? + var/max_cooling = 15 // in degrees per second - probably don't need to mess with heat capacity here + var/charge_consumption = 2 // charge per second at max_cooling //more effective on a rig, because it's all built in already + var/thermostat = T20C + + // Rig status vars. + var/open = 0 // Access panel status. + var/locked = 1 // Lock status. + var/subverted = 0 + var/interface_locked = 0 + var/control_overridden = 0 + var/ai_override_enabled = 0 + var/security_check_enabled = 1 + var/malfunctioning = 0 + var/malfunction_delay = 0 + var/electrified = 0 + var/locked_down = 0 + + var/seal_delay = SEAL_DELAY + var/sealing // Keeps track of seal status independantly of canremove. + var/offline = 1 // Should we be applying suit maluses? + var/offline_slowdown = 1.5 // If the suit is deployed and unpowered, it sets slowdown to this. + var/vision_restriction + var/offline_vision_restriction = 1 // 0 - none, 1 - welder vision, 2 - blind. Maybe move this to helmets. + var/airtight = 1 //If set, will adjust AIRTIGHT flag and pressure protections on components. Otherwise it should leave them untouched. + var/rigsuit_max_pressure = 10 * ONE_ATMOSPHERE // Max pressure the rig protects against when sealed + var/rigsuit_min_pressure = 0 // Min pressure the rig protects against when sealed + + var/emp_protection = 0 + item_flags = PHORONGUARD //VOREStation add + + // Wiring! How exciting. + var/datum/wires/rig/wires + var/datum/effect/effect/system/spark_spread/spark_system + var/datum/mini_hud/rig/minihud + + // Action button + action_button_name = "Hardsuit Interface" + +/obj/item/weapon/rig/New() + ..() + + suit_state = icon_state + item_state = icon_state + wires = new(src) + + if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access)) + locked = 0 + + spark_system = new() + spark_system.set_up(5, 0, src) + spark_system.attach(src) + + if(initial_modules && initial_modules.len) + for(var/path in initial_modules) + var/obj/item/rig_module/module = new path(src) + installed_modules += module + module.installed(src) + + // Create and initialize our various segments. + if(cell_type) + cell = new cell_type(src) + if(air_type) + air_supply = new air_type(src) + if(glove_type) + gloves = new glove_type(src) + verbs |= /obj/item/weapon/rig/proc/toggle_gauntlets + if(helm_type) + helmet = new helm_type(src) + verbs |= /obj/item/weapon/rig/proc/toggle_helmet + if(boot_type) + boots = new boot_type(src) + verbs |= /obj/item/weapon/rig/proc/toggle_boots + if(chest_type) + chest = new chest_type(src) + if(allowed) + chest.allowed = allowed + verbs |= /obj/item/weapon/rig/proc/toggle_chest + + for(var/obj/item/piece in list(gloves,helmet,boots,chest)) + if(!istype(piece)) + continue + piece.canremove = FALSE + piece.name = "[suit_type] [initial(piece.name)]" + piece.desc = "It seems to be part of a [src.name]." + piece.icon_state = "[suit_state]" + piece.min_cold_protection_temperature = min_cold_protection_temperature + piece.max_heat_protection_temperature = max_heat_protection_temperature + if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation. + piece.siemens_coefficient = siemens_coefficient + piece.permeability_coefficient = permeability_coefficient + piece.unacidable = unacidable + if(islist(armor)) piece.armor = armor.Copy() + if(islist(armorsoak)) piece.armorsoak = armorsoak.Copy() + + update_icon(1) + +/obj/item/weapon/rig/Destroy() + for(var/obj/item/piece in list(gloves,boots,helmet,chest)) + var/mob/living/M = piece.loc + if(istype(M)) + M.drop_from_inventory(piece) + qdel(piece) + STOP_PROCESSING(SSobj, src) + qdel(wires) + wires = null + qdel(spark_system) + spark_system = null + return ..() + +/obj/item/weapon/rig/examine() + . = ..() + if(wearer) + for(var/obj/item/piece in list(helmet,gloves,chest,boots)) + if(!piece || piece.loc != wearer) + continue + . += "\icon[piece][bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." + + if(src.loc == usr) + . += "The access panel is [locked? "locked" : "unlocked"]." + . += "The maintenance panel is [open ? "open" : "closed"]." + . += "Hardsuit systems are [offline ? "offline" : "online"]." + . += "The cooling system is [cooling_on ? "active" : "inactive"]." + + if(open) + . += "It's equipped with [english_list(installed_modules)]." + +// We only care about processing when we're on a mob +/obj/item/weapon/rig/Moved(old_loc, direction, forced) + if(ismob(loc)) + START_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSobj, src) + QDEL_NULL(minihud) // Just in case we get removed some other way + + // If we've lost any parts, grab them back. + var/mob/living/M + for(var/obj/item/piece in list(gloves,boots,helmet,chest)) + if(piece.loc != src && !(wearer && piece.loc == wearer)) + if(istype(piece.loc, /mob/living)) + M = piece.loc + M.unEquip(piece) + piece.forceMove(src) + +/obj/item/weapon/rig/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands) + if(!inhands && (slot_name == slot_back_str || slot_name == slot_belt_str)) + if(icon_override) + return icon_override + else if(mob_icon) + return mob_icon + + return ..() + +/obj/item/weapon/rig/proc/suit_is_deployed() + if(!istype(wearer) || src.loc != wearer || (wearer.back != src && wearer.belt != src)) + return 0 + if(helm_type && !(helmet && wearer.head == helmet)) + return 0 + if(glove_type && !(gloves && wearer.gloves == gloves)) + return 0 + if(boot_type && !(boots && wearer.shoes == boots)) + return 0 + if(chest_type && !(chest && wearer.wear_suit == chest)) + return 0 + return 1 + +// Updates pressure protection +// Seal = 1 sets protection +// Seal = 0 unsets protection +/obj/item/weapon/rig/proc/update_airtight(var/obj/item/piece, var/seal = 0) + if(seal == 1) + piece.min_pressure_protection = rigsuit_min_pressure + piece.max_pressure_protection = rigsuit_max_pressure + piece.item_flags |= AIRTIGHT + else + piece.min_pressure_protection = null + piece.max_pressure_protection = null + piece.item_flags &= ~AIRTIGHT + return + + +/obj/item/weapon/rig/proc/reset() + offline = 2 + canremove = TRUE + for(var/obj/item/piece in list(helmet,boots,gloves,chest)) + if(!piece) continue + piece.icon_state = "[suit_state]" + if(airtight) + update_airtight(piece, 0) // Unseal + update_icon(1) + +/obj/item/weapon/rig/proc/cut_suit() + offline = 2 + canremove = TRUE + toggle_piece("helmet", loc, ONLY_RETRACT, TRUE) + toggle_piece("gauntlets", loc, ONLY_RETRACT, TRUE) + toggle_piece("boots", loc, ONLY_RETRACT, TRUE) + toggle_piece("chest", loc, ONLY_RETRACT, TRUE) + update_icon(1) + +/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant) + + if(sealing) return + + if(!check_power_cost(M)) + return 0 + + deploy(M,instant) + + var/seal_target = !canremove + var/failed_to_seal + + var/obj/screen/rig_booting/booting_L = new + var/obj/screen/rig_booting/booting_R = new + + if(!seal_target) + booting_L.icon_state = "boot_left" + booting_R.icon_state = "boot_load" + animate(booting_L, alpha=230, time=30, easing=SINE_EASING) + animate(booting_R, alpha=200, time=20, easing=SINE_EASING) + M.client?.screen += booting_L + M.client?.screen += booting_R + + canremove = FALSE // No removing the suit while unsealing. + sealing = 1 + + if(!seal_target && !suit_is_deployed()) + M.visible_message("[M]'s suit flashes an error light.","Your suit flashes an error light. It can't function properly without being fully deployed.") + playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) + failed_to_seal = 1 + + if(!failed_to_seal) + + if(!instant) + M.visible_message("[M]'s suit emits a quiet hum as it begins to adjust its seals.","With a quiet hum, the suit begins running checks and adjusting components.") + if(seal_delay && !do_after(M,seal_delay)) + if(M) + to_chat(M, "You must remain still while the suit is adjusting the components.") + playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) + failed_to_seal = 1 + if(!M) + failed_to_seal = 1 + else + for(var/list/piece_data in list(list(M.shoes,boots,"boots",boot_type),list(M.gloves,gloves,"gloves",glove_type),list(M.head,helmet,"helmet",helm_type),list(M.wear_suit,chest,"chest",chest_type))) + + var/obj/item/piece = piece_data[1] + var/obj/item/compare_piece = piece_data[2] + var/msg_type = piece_data[3] + var/piece_type = piece_data[4] + + if(!piece || !piece_type) + continue + + if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type) + if(M) + to_chat(M, "You must remain still while the suit is adjusting the components.") + failed_to_seal = 1 + break + + if(!failed_to_seal && (M.back == src || M.belt == src) && piece == compare_piece) + + if(seal_delay && !instant && !do_after(M,seal_delay,needhand=0)) + failed_to_seal = 1 + + piece.icon_state = "[suit_state][!seal_target ? "_sealed" : ""]" + switch(msg_type) + if("boots") + to_chat(M, "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].") + M.update_inv_shoes() + if("gloves") + to_chat(M, "\The [piece] [!seal_target ? "tighten around your fingers and wrists" : "become loose around your fingers"].") + M.update_inv_gloves() + if("chest") + to_chat(M, "\The [piece] [!seal_target ? "cinches tight again your chest" : "releases your chest"].") + M.update_inv_wear_suit() + if("helmet") + to_chat(M, "\The [piece] hisses [!seal_target ? "closed" : "open"].") + M.update_inv_head() + if(helmet?.light_system == STATIC_LIGHT) + helmet.update_light(wearer) + + //sealed pieces become airtight, protecting against diseases + if (!seal_target) + piece.armor["bio"] = 100 + else + piece.armor["bio"] = src.armor["bio"] + playsound(src,'sound/machines/rig/rigservo.ogg', 10, FALSE) + + else + failed_to_seal = 1 + + if((M && !(istype(M) && (M.back == src || M.belt == src)) && !istype(M,/mob/living/silicon)) || (!seal_target && !suit_is_deployed())) + failed_to_seal = 1 + + sealing = null + + if(failed_to_seal) + M.client?.screen -= booting_L + M.client?.screen -= booting_R + qdel(booting_L) + qdel(booting_R) + for(var/obj/item/piece in list(helmet,boots,gloves,chest)) + if(!piece) continue + piece.icon_state = "[suit_state][!seal_target ? "" : "_sealed"]" + canremove = !seal_target + if(airtight) + update_component_sealed() + update_icon(1) + return 0 + + // Success! + canremove = seal_target + if(M.hud_used) + if(canremove) + QDEL_NULL(minihud) + else + minihud = new (M.hud_used, src) + to_chat(M, "Your entire suit [canremove ? "loosens as the components relax" : "tightens around you as the components lock into place"].") + playsound(src, 'sound/machines/rig/rigstarted.ogg', 10, FALSE) + M.client?.screen -= booting_L + qdel(booting_L) + booting_R.icon_state = "boot_done" + spawn(40) + M.client?.screen -= booting_R + qdel(booting_R) + + if(canremove) + for(var/obj/item/rig_module/module in installed_modules) + module.deactivate() + if(airtight) + update_component_sealed() + update_icon(1) + +/obj/item/weapon/rig/proc/update_component_sealed() + for(var/obj/item/piece in list(helmet,boots,gloves,chest)) + if(canremove) + update_airtight(piece, 0) // Unseal + else + update_airtight(piece, 1) // Seal + +/obj/item/weapon/rig/ui_action_click() + toggle_cooling(usr) + +/obj/item/weapon/rig/proc/toggle_cooling(var/mob/user) + if(cooling_on) + turn_cooling_off(user) + else + turn_cooling_on(user) + +/obj/item/weapon/rig/proc/turn_cooling_on(var/mob/user) + if(!cell) + return + if(cell.charge <= 0) + to_chat(user, "\The [src] has no power!") + return + if(!suit_is_deployed()) + to_chat(user, "The hardsuit needs to be deployed first!") + return + + cooling_on = 1 + to_chat(usr, "You switch \the [src]'s cooling system on.") + + +/obj/item/weapon/rig/proc/turn_cooling_off(var/mob/user, var/failed) + if(failed) + visible_message("\The [src]'s cooling system clicks and whines as it powers down.") + else + to_chat(usr, "You switch \the [src]'s cooling system off.") + cooling_on = 0 + +/obj/item/weapon/rig/proc/get_environment_temperature() + if (ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(istype(H.loc, /obj/mecha)) + var/obj/mecha/M = H.loc + return M.return_temperature() + else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) + var/obj/machinery/atmospherics/unary/cryo_cell/cryo = H.loc + return cryo.air_contents.temperature + + var/turf/T = get_turf(src) + if(istype(T, /turf/space)) + return 0 //space has no temperature, this just makes sure the cooling unit works in space + + var/datum/gas_mixture/environment = T.return_air() + if (!environment) + return 0 + + return environment.temperature + +/obj/item/weapon/rig/proc/attached_to_user(mob/M) + if (!ishuman(M)) + return 0 + + var/mob/living/carbon/human/H = M + + if (!H.wear_suit || (H.back != src && H.belt != src)) + return 0 + + return 1 + +/obj/item/weapon/rig/proc/coolingProcess() + if (!cooling_on || !cell) + return + + if (!ismob(loc)) + return + + if (!attached_to_user(loc)) //make sure the rig's not just in their hands + return + + if (!suit_is_deployed()) //inbuilt systems only work on the suit they're designed to work on + return + + var/mob/living/carbon/human/H = loc + + var/turf/T = get_turf(src) + var/datum/gas_mixture/environment = T.return_air() + var/efficiency = 1 - H.get_pressure_weakness(environment.return_pressure()) // You need to have a good seal for effective cooling + var/env_temp = get_environment_temperature() //wont save you from a fire + var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) + var/thermal_protection = H.get_heat_protection(env_temp) // ... unless you've got a good suit. + + if(thermal_protection < 0.99) //For some reason, < 1 returns false if the value is 1. + temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) + else + temp_adj = min(H.bodytemperature - thermostat, max_cooling) + + if (temp_adj < 0.5) //only cools, doesn't heat, also we don't need extreme precision + return + + var/charge_usage = (temp_adj/max_cooling)*charge_consumption + + H.bodytemperature -= temp_adj*efficiency + + cell.use(charge_usage) + + if(cell.charge <= 0) + turn_cooling_off(H, 1) + +/obj/item/weapon/rig/process() + // Not on a mob...? + if(!ismob(loc)) + if(wearer?.wearing_rig == src) + wearer.wearing_rig = null + wearer = null + return PROCESS_KILL + + // Run through cooling + coolingProcess() + + if(!istype(wearer) || loc != wearer || (wearer.back != src && wearer.belt != src) || canremove || !cell || cell.charge <= 0) + if(!cell || cell.charge <= 0) + if(electrified > 0) + electrified = 0 + if(!offline) + if(istype(wearer)) + if(!canremove) + if (offline_slowdown < 1.5) + to_chat(wearer, "Your suit beeps stridently, and suddenly goes dead.") + else + to_chat(wearer, "Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.") + playsound(src, 'sound/machines/rig/rigdown.ogg', 60, FALSE) + if(offline_vision_restriction == 1) + to_chat(wearer, "The suit optics flicker and die, leaving you with restricted vision.") + else if(offline_vision_restriction == 2) + to_chat(wearer, "The suit optics drop out completely, drowning you in darkness.") + if(!offline) + offline = 1 + else + if(offline) + offline = 0 + if(istype(wearer) && !wearer.wearing_rig) + wearer.wearing_rig = src + if(!istype(src,/obj/item/weapon/rig/protean)) //CHOMPEdit - Stupid snowflake protean special check for rig assimilation code + slowdown = initial(slowdown) + + if(offline) + if(offline == 1) + for(var/obj/item/rig_module/module in installed_modules) + module.deactivate() + offline = 2 + slowdown = offline_slowdown + return + + if(cell && cell.charge > 0 && electrified > 0) + electrified-- + + if(malfunction_delay > 0) + malfunction_delay-- + else if(malfunctioning) + malfunctioning-- + malfunction() + + for(var/obj/item/rig_module/module in installed_modules) + cell.use(module.process()*10) + +/obj/item/weapon/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai) + + if(!istype(user)) + return 0 + + var/fail_msg + + if(!user_is_ai) + var/mob/living/carbon/human/H = user + if(istype(H) && (H.back != src && H.belt != src)) + fail_msg = "You must be wearing \the [src] to do this." + else if(user.incorporeal_move) + fail_msg = "You must be solid to do this." + if(sealing) + fail_msg = "The hardsuit is in the process of adjusting seals and cannot be activated." + else if(!fail_msg && ((use_unconcious && user.stat > 1) || (!use_unconcious && user.stat))) + fail_msg = "You are in no fit state to do that." + else if(!cell) + fail_msg = "There is no cell installed in the suit." + else if(cost && cell.charge < cost * 10) //TODO: Cellrate? + fail_msg = "Not enough stored power." + + if(fail_msg) + to_chat(user, fail_msg) + playsound(src, 'sound/machines/rig/rigerror.ogg', 20, FALSE) + return 0 + + // This is largely for cancelling stealth and whatever. + if(mod && mod.disruptive) + for(var/obj/item/rig_module/module in (installed_modules - mod)) + if(module.active && module.disruptable) + module.deactivate() + + cell.use(cost*10) + return 1 + +/obj/item/weapon/rig/update_icon(var/update_mob_icon) + + cut_overlays() + if(!mob_icon || update_mob_icon) + var/species_icon = default_mob_icon + // Since setting mob_icon will override the species checks in + // update_inv_wear_suit(), handle species checks here. + if(wearer && LAZYACCESS(sprite_sheets, wearer.species.get_bodytype(wearer))) + species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)] + mob_icon = icon(icon = species_icon, icon_state = "[icon_state]") + + if(installed_modules.len) + for(var/obj/item/rig_module/module in installed_modules) + if(module.suit_overlay) + chest.add_overlay(image(module.suit_overlay_icon, icon_state = "[module.suit_overlay]", dir = SOUTH)) + + if(wearer) + wearer.update_inv_shoes() + wearer.update_inv_gloves() + wearer.update_inv_head() + wearer.update_inv_wear_suit() + wearer.update_inv_back() + return + +/obj/item/weapon/rig/proc/check_suit_access(var/mob/living/carbon/human/user, var/do_message = TRUE) + + if(!security_check_enabled) + return 1 + + if(istype(user)) + if(!canremove) + return 1 + if(malfunction_check(user)) + return 0 + if(user.back != src && user.belt != src) + return 0 + else if(!src.allowed(user)) + if(do_message) + to_chat(user, "Unauthorized user. Access denied.") + return 0 + + else if(!ai_override_enabled) + if(do_message) + to_chat(user, "Synthetic access disabled. Please consult hardware provider.") + return 0 + + return 1 + +/obj/item/weapon/rig/proc/notify_ai(var/message) + for(var/obj/item/rig_module/ai_container/module in installed_modules) + if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) + to_chat(module.integrated_ai, "[message]") + . = 1 + +/obj/item/weapon/rig/equipped(mob/living/carbon/human/M) + ..() + + if(istype(M.back, /obj/item/weapon/rig) && istype(M.belt, /obj/item/weapon/rig)) + to_chat(M, "You try to put on the [src], but it won't fit.") + if(M && (M.back == src || M.belt == src)) + if(!M.unEquip(src)) + return + src.forceMove(get_turf(src)) + return + + if(seal_delay > 0 && istype(M) && (M.back == src || M.belt == src)) + M.visible_message("[M] starts putting on \the [src]...", "You start putting on \the [src]...") + if(!do_after(M,seal_delay)) + if(M && (M.back == src || M.belt == src)) + if(!M.unEquip(src)) + return + src.forceMove(get_turf(src)) + return + + if(istype(M) && (M.back == src || M.belt == src)) + M.visible_message("[M] struggles into \the [src].", "You struggle into \the [src].") + wearer = M + wearer.wearing_rig = src + update_icon() + +/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode, var/forced = FALSE) + + if((sealing || !cell || !cell.charge) && !forced) + return + + if((!istype(wearer) || (!wearer.back == src && !wearer.belt == src)) && !forced) + return + + if((usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) && !forced) // If the usr isn't wearing the suit it's probably an AI. + return + + var/obj/item/check_slot + var/equip_to + var/obj/item/use_obj + + if(!H) + return + + switch(piece) + if("helmet") + equip_to = slot_head + use_obj = helmet + check_slot = H.head + if("gauntlets") + equip_to = slot_gloves + use_obj = gloves + check_slot = H.gloves + if("boots") + equip_to = slot_shoes + use_obj = boots + check_slot = H.shoes + if("chest") + equip_to = slot_wear_suit + use_obj = chest + check_slot = H.wear_suit + + if(use_obj) + if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) + + var/mob/living/carbon/human/holder + + if(use_obj) + holder = use_obj.loc + if(istype(holder)) + if(use_obj && check_slot == use_obj) + to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") + playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE) + use_obj.canremove = TRUE + holder.drop_from_inventory(use_obj) + use_obj.forceMove(get_turf(src)) + use_obj.dropped() + use_obj.canremove = FALSE + use_obj.forceMove(src) + + else if (deploy_mode != ONLY_RETRACT) + if(check_slot && check_slot == use_obj) + return + use_obj.forceMove(H) + if(!H.equip_to_slot_if_possible(use_obj, equip_to, 0, 1)) + use_obj.forceMove(src) + if(check_slot) + to_chat(H, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") + return + else + to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") + playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE) + + if(piece == "helmet" && helmet?.light_system == STATIC_LIGHT) + helmet.update_light() + +/obj/item/weapon/rig/proc/deploy(mob/M,var/sealed) + + var/mob/living/carbon/human/H = M + + if(!H || !istype(H)) return + + if(H.back != src && H.belt != src) + return + + if(sealed) + if(H.head) + var/obj/item/garbage = H.head + H.drop_from_inventory(garbage) + H.head = null + qdel(garbage) + + if(H.gloves) + var/obj/item/garbage = H.gloves + H.drop_from_inventory(garbage) + H.gloves = null + qdel(garbage) + + if(H.shoes) + var/obj/item/garbage = H.shoes + H.drop_from_inventory(garbage) + H.shoes = null + qdel(garbage) + + if(H.wear_suit) + var/obj/item/garbage = H.wear_suit + H.drop_from_inventory(garbage) + H.wear_suit = null + qdel(garbage) + + for(var/piece in list("helmet","gauntlets","chest","boots")) + toggle_piece(piece, H, ONLY_DEPLOY) + +/obj/item/weapon/rig/dropped(var/mob/user) + ..() + for(var/piece in list("helmet","gauntlets","chest","boots")) + toggle_piece(piece, user, ONLY_RETRACT) + if(wearer && wearer.wearing_rig == src) + wearer.wearing_rig = null + wearer = null + +//Todo +/obj/item/weapon/rig/proc/malfunction() + return 0 + +/obj/item/weapon/rig/emp_act(severity_class) + //set malfunctioning + if(emp_protection < 30) //for ninjas, really. + malfunctioning += 10 + if(malfunction_delay <= 0) + malfunction_delay = max(malfunction_delay, round(30/severity_class)) + + //drain some charge + if(cell) cell.emp_act(severity_class + 15) + + //possibly damage some modules + take_hit((100/severity_class), "electrical pulse", 1) + +/obj/item/weapon/rig/proc/shock(mob/user) + if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. + spark_system.start() + if(user.stunned) + return 1 + return 0 + +/obj/item/weapon/rig/proc/take_hit(damage, source, is_emp=0) + + if(!installed_modules.len) + return + + var/chance + if(!is_emp) + chance = 2*max(0, damage - (chest? chest.breach_threshold : 0)) + else + //Want this to be roughly independant of the number of modules, meaning that X emp hits will disable Y% of the suit's modules on average. + //that way people designing hardsuits don't have to worry (as much) about how adding that extra module will affect emp resiliance by 'soaking' hits for other modules + chance = 2*max(0, damage - emp_protection)*min(installed_modules.len/15, 1) + + if(!prob(chance)) + return + + //deal addition damage to already damaged module first. + //This way the chances of a module being disabled aren't so remote. + var/list/valid_modules = list() + var/list/damaged_modules = list() + for(var/obj/item/rig_module/module in installed_modules) + if(module.damage < 2) + valid_modules |= module + if(module.damage > 0) + damaged_modules |= module + + var/obj/item/rig_module/dam_module = null + if(damaged_modules.len) + dam_module = pick(damaged_modules) + else if(valid_modules.len) + dam_module = pick(valid_modules) + + if(!dam_module) return + + dam_module.damage++ + + if(!source) + source = "hit" + + if(wearer) + if(dam_module.damage >= 2) + to_chat(wearer, "The [source] has disabled your [dam_module.interface_name]!") + else + to_chat(wearer, "The [source] has damaged your [dam_module.interface_name]!") + dam_module.deactivate() + +/obj/item/weapon/rig/proc/malfunction_check(var/mob/living/carbon/human/user) + if(malfunction_delay) + if(offline) + to_chat(user, "The suit is completely unresponsive.") + else + to_chat(user, "ERROR: Hardware fault. Rebooting interface...") + return 1 + return 0 + +/obj/item/weapon/rig/proc/ai_can_move_suit(var/mob/user, var/check_user_module = 0, var/check_for_ai = 0) + + if(check_for_ai) + if(!(locate(/obj/item/rig_module/ai_container) in contents)) + return 0 + var/found_ai + for(var/obj/item/rig_module/ai_container/module in contents) + if(module.damage >= 2) + continue + if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) + found_ai = 1 + break + if(!found_ai) + return 0 + + if(check_user_module) + if(!user || !user.loc || !user.loc.loc) + return 0 + var/obj/item/rig_module/ai_container/module = user.loc.loc + if(!istype(module) || module.damage >= 2) + to_chat(user, "Your host module is unable to interface with the suit.") + return 0 + + if(offline || !cell || !cell.charge || locked_down) + if(user) + to_chat(user, "Your host rig is unpowered and unresponsive.") + return 0 + if(!wearer || (wearer.back != src && wearer.belt != src)) + if(user) + to_chat(user, "Your host rig is not being worn.") + return 0 + if(!wearer.stat && !control_overridden && !ai_override_enabled) + if(user) + to_chat(user, "You are locked out of the suit servo controller.") + return 0 + return 1 + +/obj/item/weapon/rig/proc/force_rest(var/mob/user) + if(!ai_can_move_suit(user, check_user_module = 1)) + return + wearer.lay_down() + to_chat(user, "\The [wearer] is now [wearer.resting ? "resting" : "getting up"].") + +/obj/item/weapon/rig/proc/forced_move(var/direction, var/mob/user, var/ai_moving = TRUE) + + // Why is all this shit in client/Move()? Who knows? + if(world.time < wearer_move_delay) + return + + if(!wearer || !wearer.loc) //CHOMP Edit - Removed some stuff for protean living hardsuit + return + +//CHOMP Addition - Added this for protean living hardsuit + wearer_move_delay = world.time + 2 + if(ai_moving) + if(!ai_can_move_suit(user, check_user_module = 1)) + return + // AIs are a bit slower than regular and ignore move intent. + //CHOMPEdit - Moved this to where it's relevant + wearer_move_delay = world.time + ai_controlled_move_delay + + //This is sota the goto stop mobs from moving var + if(wearer.transforming || !wearer.canmove) + return + + if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0)) + if(!wearer.Process_Spacemove(0)) + return 0 + + if(malfunctioning) + direction = pick(cardinal) + + // Inside an object, tell it we moved. + if(isobj(wearer.loc) || ismob(wearer.loc)) + var/atom/O = wearer.loc + return O.relaymove(wearer, direction) + + if(isturf(wearer.loc)) + if(wearer.restrained())//Why being pulled while cuffed prevents you from moving + for(var/mob/M in range(wearer, 1)) + if(M.pulling == wearer) + if(!M.restrained() && M.stat == 0 && M.canmove && wearer.Adjacent(M)) + to_chat(user, "Your host is restrained! They can't move!") + return 0 + else + M.stop_pulling() + + if(wearer.pinned.len) + to_chat(src, "Your host is pinned to a wall by [wearer.pinned[1]]!") + return 0 + + if(istype(wearer.buckled, /obj/vehicle)) + //manually set move_delay for vehicles so we don't inherit any mob movement penalties + //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm + wearer_move_delay = world.time + return wearer.buckled.relaymove(wearer, direction) + + if(istype(wearer.machine, /obj/machinery)) + if(wearer.machine.relaymove(wearer, direction)) + return + + if(wearer.pulledby || wearer.buckled) // Wheelchair driving! + if(istype(wearer.loc, /turf/space)) + return // No wheelchair driving in space + if(istype(wearer.pulledby, /obj/structure/bed/chair/wheelchair)) + return wearer.pulledby.relaymove(wearer, direction) + else if(istype(wearer.buckled, /obj/structure/bed/chair/wheelchair)) + if(ishuman(wearer.buckled)) + var/obj/item/organ/external/l_hand = wearer.get_organ("l_hand") + var/obj/item/organ/external/r_hand = wearer.get_organ("r_hand") + if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED))) + return // No hands to drive your chair? Tough luck! + wearer_move_delay += 2 + return wearer.buckled.relaymove(wearer,direction) + + var/power_cost = 200 + if(!ai_moving) + power_cost = 20 + cell.use(power_cost) //Arbitrary, TODO + wearer.Move(get_step(get_turf(wearer),direction),direction) + +// This returns the rig if you are contained inside one, but not if you are wearing it +/atom/proc/get_rig() + if(loc) + return loc.get_rig() + return null + +/obj/item/weapon/rig/get_rig() + return src + +/mob/living/carbon/human/get_rig() + if(istype(back, /obj/item/weapon/rig)) + return back + else if(istype(belt, /obj/item/weapon/rig)) + return belt + else + return null + +//Boot animation screen objects +/obj/screen/rig_booting + screen_loc = "1,1" + icon = 'icons/obj/rig_boot.dmi' + icon_state = "" + layer = SCREEN_LAYER + plane = PLANE_FULLSCREEN + mouse_opacity = 0 + alpha = 20 //Animated up when loading + +#undef ONLY_DEPLOY +#undef ONLY_RETRACT +#undef SEAL_DELAY diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 7ae8a87f68..b49ad6098f 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -1,137 +1,137 @@ -//Regular syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate - name = "red space helmet" - icon_state = "syndicate" - desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 - -/obj/item/clothing/suit/space/syndicate - name = "red space suit" - icon_state = "syndicate" - desc = "A crimson spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - w_class = ITEMSIZE_NORMAL - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) - slowdown = 0.5 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 - -//Green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/green - name = "green space helmet" - desc = "A green helmet sporting clean lines and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-green" - -/obj/item/clothing/suit/space/syndicate/green - name = "green space suit" - desc = "A green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-green" - -//Dark green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/green/dark - name = "dark green space helmet" - desc = "A dark green helmet sporting clean lines and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-green-dark" - -/obj/item/clothing/suit/space/syndicate/green/dark - name = "dark green space suit" - desc = "A dark green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-green-dark" - -//Orange syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/orange - name = "orange space helmet" - desc = "An orange helmet sporting clean lines and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-orange" - -/obj/item/clothing/suit/space/syndicate/orange - name = "orange space suit" - desc = "An orange spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-orange" - -//Blue syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/blue - name = "blue space helmet" - desc = "A blue helmet sporting clean lines and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-blue" - -/obj/item/clothing/suit/space/syndicate/blue - name = "blue space suit" - desc = "A blue spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-blue" - -//Black syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black - name = "black space helmet" - desc = "A black helmet sporting durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black - name = "black space suit" - desc = "A black spacesuit sporting durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black" - -//Black-green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/green - name = "black and green space helmet" - desc = "A black helmet sporting a single green stripe and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-black-green" - -/obj/item/clothing/suit/space/syndicate/black/green - name = "black and green space suit" - desc = "A black spacesuit sporting green stripes and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black-green" - -//Black-blue syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/blue - name = "black and blue space helmet" - desc = "A black helmet sporting a single blue stripe and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-black-blue" - -/obj/item/clothing/suit/space/syndicate/black/blue - name = "black and blue space suit" - desc = "A black spacesuit sporting blue stripes and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black-blue" - -//Black medical syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/med - name = "black medical space helmet" - desc = "A black helmet sporting a medical cross and durable plating. Hopefully the wearer abides by space geneva." - icon_state = "syndicate-helm-black-med" - -/obj/item/clothing/suit/space/syndicate/black/med - name = "black medical space suit" - desc = "A black spacesuit sporting a medical cross and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black-med" - -//Black-orange syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/orange - name = "black and orange space helmet" - icon_state = "syndicate-helm-black-orange" - -/obj/item/clothing/suit/space/syndicate/black/orange - name = "black and orange space suit" - desc = "A black spacesuit sporting orange stripes and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black-orange" - -//Black-red syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/red - name = "black and red space helmet" - desc = "A black helmet sporting a single red stripe and durable plating. Engineered to look menacing." - icon_state = "syndicate-helm-black-red" - -/obj/item/clothing/suit/space/syndicate/black/red - name = "black and red space suit" - desc = "A black spacesuit sporting red stripes and durable plating. Robust, reliable, and slightly suspicious." - icon_state = "syndicate-black-red" - -//Black with yellow/red engineering syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/engie - name = "black engineering space helmet" - desc = "A black helmet sporting red and yellow stripes and durable plating. Engineered to look well... engineering-ish." - icon_state = "syndicate-helm-black-engie" - -/obj/item/clothing/suit/space/syndicate/black/engie - name = "black engineering space suit" - desc = "A black spacesuit sporting red and yellow stripes and durable plating. Robust, reliable, and slightly suspicious." +//Regular syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate + name = "red space helmet" + icon_state = "syndicate" + desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + siemens_coefficient = 0.6 + +/obj/item/clothing/suit/space/syndicate + name = "red space suit" + icon_state = "syndicate" + desc = "A crimson spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." + w_class = ITEMSIZE_NORMAL + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) + slowdown = 0.5 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + siemens_coefficient = 0.6 + +//Green syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/green + name = "green space helmet" + desc = "A green helmet sporting clean lines and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-green" + +/obj/item/clothing/suit/space/syndicate/green + name = "green space suit" + desc = "A green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-green" + +//Dark green syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/green/dark + name = "dark green space helmet" + desc = "A dark green helmet sporting clean lines and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-green-dark" + +/obj/item/clothing/suit/space/syndicate/green/dark + name = "dark green space suit" + desc = "A dark green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-green-dark" + +//Orange syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/orange + name = "orange space helmet" + desc = "An orange helmet sporting clean lines and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-orange" + +/obj/item/clothing/suit/space/syndicate/orange + name = "orange space suit" + desc = "An orange spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-orange" + +//Blue syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/blue + name = "blue space helmet" + desc = "A blue helmet sporting clean lines and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-blue" + +/obj/item/clothing/suit/space/syndicate/blue + name = "blue space suit" + desc = "A blue spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-blue" + +//Black syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black + name = "black space helmet" + desc = "A black helmet sporting durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-black" + +/obj/item/clothing/suit/space/syndicate/black + name = "black space suit" + desc = "A black spacesuit sporting durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black" + +//Black-green syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/green + name = "black and green space helmet" + desc = "A black helmet sporting a single green stripe and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-black-green" + +/obj/item/clothing/suit/space/syndicate/black/green + name = "black and green space suit" + desc = "A black spacesuit sporting green stripes and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black-green" + +//Black-blue syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/blue + name = "black and blue space helmet" + desc = "A black helmet sporting a single blue stripe and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-black-blue" + +/obj/item/clothing/suit/space/syndicate/black/blue + name = "black and blue space suit" + desc = "A black spacesuit sporting blue stripes and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black-blue" + +//Black medical syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/med + name = "black medical space helmet" + desc = "A black helmet sporting a medical cross and durable plating. Hopefully the wearer abides by space geneva." + icon_state = "syndicate-helm-black-med" + +/obj/item/clothing/suit/space/syndicate/black/med + name = "black medical space suit" + desc = "A black spacesuit sporting a medical cross and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black-med" + +//Black-orange syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/orange + name = "black and orange space helmet" + icon_state = "syndicate-helm-black-orange" + +/obj/item/clothing/suit/space/syndicate/black/orange + name = "black and orange space suit" + desc = "A black spacesuit sporting orange stripes and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black-orange" + +//Black-red syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/red + name = "black and red space helmet" + desc = "A black helmet sporting a single red stripe and durable plating. Engineered to look menacing." + icon_state = "syndicate-helm-black-red" + +/obj/item/clothing/suit/space/syndicate/black/red + name = "black and red space suit" + desc = "A black spacesuit sporting red stripes and durable plating. Robust, reliable, and slightly suspicious." + icon_state = "syndicate-black-red" + +//Black with yellow/red engineering syndicate space suit +/obj/item/clothing/head/helmet/space/syndicate/black/engie + name = "black engineering space helmet" + desc = "A black helmet sporting red and yellow stripes and durable plating. Engineered to look well... engineering-ish." + icon_state = "syndicate-helm-black-engie" + +/obj/item/clothing/suit/space/syndicate/black/engie + name = "black engineering space suit" + desc = "A black spacesuit sporting red and yellow stripes and durable plating. Robust, reliable, and slightly suspicious." icon_state = "syndicate-black-engie" \ No newline at end of file diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index de610ca3ee..60237b385e 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -1,95 +1,95 @@ -//Biosuit complete with shoes (in the item sprite) -/obj/item/clothing/head/bio_hood - name = "bio hood" - icon_state = "bio" - desc = "A hood that protects the head and face from biological comtaminants." - randpixel = 0 - center_of_mass = null - permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - siemens_coefficient = 0.9 - flags = PHORONGUARD - item_flags = THICKMATERIAL | ALLOW_SURVIVALFOOD - -/obj/item/clothing/suit/bio_suit - name = "bio suit" - desc = "A suit that protects against biological contamination." - icon_state = "bio" - w_class = ITEMSIZE_LARGE//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - slowdown = 1.0 - allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - siemens_coefficient = 0.9 - flags = PHORONGUARD - item_flags = THICKMATERIAL - -//Standard biosuit, orange stripe -/obj/item/clothing/head/bio_hood/general - icon_state = "bio_general" - item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/suit/bio_suit/general - icon_state = "bio_general" - item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -//Virology biosuit, green stripe -/obj/item/clothing/head/bio_hood/virology - icon_state = "bio_virology" - -/obj/item/clothing/suit/bio_suit/virology - icon_state = "bio_virology" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -//Security biosuit, grey with red stripe across the chest -/obj/item/clothing/head/bio_hood/security - icon_state = "bio_security" - -/obj/item/clothing/suit/bio_suit/security - icon_state = "bio_security" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -//Janitor's biosuit, grey with purple arms -/obj/item/clothing/head/bio_hood/janitor - icon_state = "bio_janitor" - -/obj/item/clothing/suit/bio_suit/janitor - icon_state = "bio_janitor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -//Scientist's biosuit, white with a pink-ish hue -/obj/item/clothing/head/bio_hood/scientist - icon_state = "bio_scientist" - -/obj/item/clothing/suit/bio_suit/scientist - icon_state = "bio_scientist" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -//CMO's biosuit, blue stripe -/obj/item/clothing/suit/bio_suit/cmo - icon_state = "bio_cmo" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/head/bio_hood/cmo - icon_state = "bio_cmo" - -//Plague Dr mask can be found in clothing/masks/gasmask.dm. Golden can be found in labcoat.dm. -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit - name = "plague doctor suit" - desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." - icon_state = "plaguedoctor" - item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") +//Biosuit complete with shoes (in the item sprite) +/obj/item/clothing/head/bio_hood + name = "bio hood" + icon_state = "bio" + desc = "A hood that protects the head and face from biological comtaminants." + randpixel = 0 + center_of_mass = null + permeability_coefficient = 0.01 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + siemens_coefficient = 0.9 + flags = PHORONGUARD + item_flags = THICKMATERIAL | ALLOW_SURVIVALFOOD + +/obj/item/clothing/suit/bio_suit + name = "bio suit" + desc = "A suit that protects against biological contamination." + icon_state = "bio" + w_class = ITEMSIZE_LARGE//bulky item + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.01 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET + slowdown = 1.0 + allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + siemens_coefficient = 0.9 + flags = PHORONGUARD + item_flags = THICKMATERIAL + +//Standard biosuit, orange stripe +/obj/item/clothing/head/bio_hood/general + icon_state = "bio_general" + item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/suit/bio_suit/general + icon_state = "bio_general" + item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +//Virology biosuit, green stripe +/obj/item/clothing/head/bio_hood/virology + icon_state = "bio_virology" + +/obj/item/clothing/suit/bio_suit/virology + icon_state = "bio_virology" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +//Security biosuit, grey with red stripe across the chest +/obj/item/clothing/head/bio_hood/security + icon_state = "bio_security" + +/obj/item/clothing/suit/bio_suit/security + icon_state = "bio_security" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +//Janitor's biosuit, grey with purple arms +/obj/item/clothing/head/bio_hood/janitor + icon_state = "bio_janitor" + +/obj/item/clothing/suit/bio_suit/janitor + icon_state = "bio_janitor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +//Scientist's biosuit, white with a pink-ish hue +/obj/item/clothing/head/bio_hood/scientist + icon_state = "bio_scientist" + +/obj/item/clothing/suit/bio_suit/scientist + icon_state = "bio_scientist" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +//CMO's biosuit, blue stripe +/obj/item/clothing/suit/bio_suit/cmo + icon_state = "bio_cmo" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/head/bio_hood/cmo + icon_state = "bio_cmo" + +//Plague Dr mask can be found in clothing/masks/gasmask.dm. Golden can be found in labcoat.dm. +/obj/item/clothing/suit/bio_suit/plaguedoctorsuit + name = "plague doctor suit" + desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." + icon_state = "plaguedoctor" + item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER \ No newline at end of file diff --git a/code/modules/clothing/suits/hooded_ch.dm b/code/modules/clothing/suits/hooded_ch.dm index 6e20ed575a..0f9adf9f8f 100644 --- a/code/modules/clothing/suits/hooded_ch.dm +++ b/code/modules/clothing/suits/hooded_ch.dm @@ -1,12 +1,12 @@ - - -/obj/item/clothing/suit/storage/hooded/wintercoat/security/santa - name = "Santa's coat" - icon = 'icons/inventory/uniform/item_ch.dmi' - icon_override = 'modular_chomp/icons/mob/suit_ch.dmi' - icon_state = "santacoat" - item_state_slots = list(slot_r_hand_str = "coatsecurity", slot_l_hand_str = "coatsecurity") - hoodtype = /obj/item/clothing/head/hood/winter/security/santa - -/obj/item/clothing/head/hood/winter/security/santa + + +/obj/item/clothing/suit/storage/hooded/wintercoat/security/santa + name = "Santa's coat" + icon = 'icons/inventory/uniform/item_ch.dmi' + icon_override = 'modular_chomp/icons/mob/suit_ch.dmi' + icon_state = "santacoat" + item_state_slots = list(slot_r_hand_str = "coatsecurity", slot_l_hand_str = "coatsecurity") + hoodtype = /obj/item/clothing/head/hood/winter/security/santa + +/obj/item/clothing/head/hood/winter/security/santa name = "Santa's hood" \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index bc96a3847b..37ac8cd948 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -1,268 +1,268 @@ -/* - * Job related - */ - -//Botanist -/obj/item/clothing/suit/storage/apron - name = "apron" - desc = "A basic blue apron." - icon_state = "apron" - item_state_slots = list(slot_r_hand_str = "overalls", slot_l_hand_str = "overalls") - blood_overlay_type = "armor" - body_parts_covered = 0 - allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds, - /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/material/minihoe) - -/obj/item/clothing/suit/storage/apron/white - name = "white apron" - desc = "A basic white apron." - icon_state = "apron_white" - item_state_slots = list(slot_r_hand_str = "apronchef", slot_l_hand_str = "apronchef") - -/obj/item/clothing/suit/storage/apron/altevian - name = "Multi-purpose Crafters' Pride" - desc = "An apron designed by rodent-like spacers who take pride in their work. It's made with high-quality material." - icon_state = "apron_altevian" - item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) - -//Captain -/obj/item/clothing/suit/captunic - name = "site manager's parade tunic" - desc = "Worn by a Site Manager to show their class." - icon_state = "captunic" - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/captunic/capjacket - name = "site manager's uniform jacket" - desc = "A less formal jacket for everyday Site Manager use." - icon_state = "capjacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEHOLSTER - -//Command -/obj/item/clothing/suit/storage/toggle/cmddressjacket - name = "command dress jacket" - desc = "A fancy dress jacket made for command staff. Makes you feel in charge." - icon_state = "cmddressjacket" - -//Chaplain -/obj/item/clothing/suit/storage/hooded/chaplain_hoodie - name = "chaplain hoodie" - desc = "This suit says to you \"Hush\"!" - icon_state = "chaplain_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEHOLSTER - hoodtype = /obj/item/clothing/head/chaplain_hood - allowed = list (/obj/item/weapon/storage/bible) - -//Chaplain but spookier -/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout - name = "white robe" - desc = "A long, flowing white robe. It looks comfortable, but not very warm." - icon_state = "whiteout_robe" - item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white") - flags_inv = HIDETIE|HIDEHOLSTER - hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout - -//Chaplain -/obj/item/clothing/suit/nun - name = "nun robe" - desc = "Maximum piety in this star system." - icon_state = "nun" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -//Chef -/obj/item/clothing/suit/chef - name = "chef's apron" - desc = "An apron used by a high class chef." - icon_state = "chef" - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDETIE|HIDEHOLSTER - allowed = list (/obj/item/weapon/material/knife) - -//Chef -/obj/item/clothing/suit/chef/classic - name = "classic chef's apron" - desc = "A basic, dull, white chef's apron." - icon_state = "apronchef" - blood_overlay_type = "armor" - body_parts_covered = 0 - flags_inv = 0 - -//Security -/obj/item/clothing/suit/security/navyofficer - name = "security officer's jacket" - desc = "This jacket is for those special occasions when a security officer actually feels safe." - icon_state = "officerbluejacket" - item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/security/navywarden - name = "warden's jacket" - desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." - icon_state = "wardenbluejacket" - item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/security/navyhos - name = "head of security's jacket" - desc = "This piece of clothing was specifically designed for asserting superior authority." - icon_state = "hosbluejacket" - item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -//Detective -/obj/item/clothing/suit/storage/det_trench - name = "brown trenchcoat" - desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat is externally impact resistant - perfect for your next act of autodefenestration!" - icon_state = "detective" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, - /obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter, - /obj/item/device/taperecorder, /obj/item/device/uv_light) - armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/det_trench/grey - name = "grey trenchcoat" - icon_state = "detective2" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -//Forensics -/obj/item/clothing/suit/storage/forensics - name = "jacket" - desc = "A forensics technician jacket." - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, - /obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter, - /obj/item/device/taperecorder, /obj/item/device/uv_light) - armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/suit/storage/forensics/red - name = "red jacket" - desc = "A red forensics technician jacket." - icon_state = "forensics_red" - item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") - -/obj/item/clothing/suit/storage/forensics/red/long - name = "long red jacket" - desc = "A long red forensics technician jacket." - icon_state = "forensics_red_long" - -/obj/item/clothing/suit/storage/forensics/blue - name = "blue jacket" - desc = "A blue forensics technician jacket." - icon_state = "forensics_blue" - item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") - -/obj/item/clothing/suit/storage/forensics/blue/long - name = "long blue jacket" - desc = "A long blue forensics technician jacket." - icon_state = "forensics_blue_long" - -//Engineering -/obj/item/clothing/suit/storage/hazardvest - name = "hazard vest" - desc = "A high-visibility vest used in work zones." - icon_state = "hazard" - blood_overlay_type = "armor" - allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, - /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, - /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/taperoll/atmos, /obj/item/device/analyzer, /obj/item/weapon/extinguisher/mini) //VOREStation edit. Few more tools that can be put on vests - body_parts_covered = UPPER_TORSO - -/obj/item/clothing/suit/storage/hazardvest/blue - name = "blue hazard vest" - desc = "A high-visibility vest used in work zones. This one is blue!" - icon_state = "hazard_b" - -/obj/item/clothing/suit/storage/hazardvest/green - name = "green hazard vest" - desc = "A high-visibility vest used by emergency responders." - icon_state = "hazard_g" - -/obj/item/clothing/suit/storage/hazardvest/white - name = "white hazard vest" - desc = "A high-visibility vest used in work zones. This one bears the symbol of a disaster relief team!" - icon_state = "hazard_w" - -//Lawyer -/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket - name = "blue suit jacket" - desc = "A snappy dress jacket." - icon_state = "suitjacket_blue" - item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket - name = "purple suit jacket" - desc = "A snappy dress jacket." - icon_state = "suitjacket_purp" - item_state_slots = list(slot_r_hand_str = "suit_purple", slot_l_hand_str = "suit_purple") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - -//Internal Affairs -/obj/item/clothing/suit/storage/toggle/internalaffairs - name = "black suit jacket" - desc = "A smooth black jacket." - icon_state = "ia_jacket" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - -//Medical -/obj/item/clothing/suit/storage/toggle/fr_jacket - name = "first responder jacket" - desc = "A high-visibility jacket worn by medical first responders." - icon_state = "fr_jacket" - item_state_slots = list(slot_r_hand_str = "fr_jacket", slot_l_hand_str = "fr_jacket") - blood_overlay_type = "armor" - allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, - /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen) - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/fr_jacket/ems - name = "\improper EMS jacket" - desc = "A dark blue, martian-pattern, EMS jacket. It sports high-visibility reflective stripes and a star of life on the back." - icon_state = "ems_jacket" - item_state_slots = list(slot_r_hand_str = "ems_jacket", slot_l_hand_str = "ems_jacket") - -/obj/item/clothing/suit/surgicalapron - name = "surgical apron" - desc = "A sterile blue apron for performing surgery." - icon_state = "surgical" - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \ - /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor,/obj/item/weapon/surgical/hemostat, \ - /obj/item/weapon/surgical/cautery,/obj/item/weapon/surgical/bonegel,/obj/item/weapon/surgical/FixOVein) - -//Mime -/obj/item/clothing/suit/suspenders - name = "red suspenders" - desc = "They suspend the illusion of the mime's play." - icon = 'icons/inventory/belt/item.dmi' - icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here - body_parts_covered = 0 - -/obj/item/clothing/suit/suspenders/blue - name = "blue suspenders" - icon_state = "suspenders_blue" - -/obj/item/clothing/suit/suspenders/grey - name = "grey suspenders" - icon_state = "suspenders_grey" +/* + * Job related + */ + +//Botanist +/obj/item/clothing/suit/storage/apron + name = "apron" + desc = "A basic blue apron." + icon_state = "apron" + item_state_slots = list(slot_r_hand_str = "overalls", slot_l_hand_str = "overalls") + blood_overlay_type = "armor" + body_parts_covered = 0 + allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds, + /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/material/minihoe) + +/obj/item/clothing/suit/storage/apron/white + name = "white apron" + desc = "A basic white apron." + icon_state = "apron_white" + item_state_slots = list(slot_r_hand_str = "apronchef", slot_l_hand_str = "apronchef") + +/obj/item/clothing/suit/storage/apron/altevian + name = "Multi-purpose Crafters' Pride" + desc = "An apron designed by rodent-like spacers who take pride in their work. It's made with high-quality material." + icon_state = "apron_altevian" + item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) + +//Captain +/obj/item/clothing/suit/captunic + name = "site manager's parade tunic" + desc = "Worn by a Site Manager to show their class." + icon_state = "captunic" + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/captunic/capjacket + name = "site manager's uniform jacket" + desc = "A less formal jacket for everyday Site Manager use." + icon_state = "capjacket" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEHOLSTER + +//Command +/obj/item/clothing/suit/storage/toggle/cmddressjacket + name = "command dress jacket" + desc = "A fancy dress jacket made for command staff. Makes you feel in charge." + icon_state = "cmddressjacket" + +//Chaplain +/obj/item/clothing/suit/storage/hooded/chaplain_hoodie + name = "chaplain hoodie" + desc = "This suit says to you \"Hush\"!" + icon_state = "chaplain_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEHOLSTER + hoodtype = /obj/item/clothing/head/chaplain_hood + allowed = list (/obj/item/weapon/storage/bible) + +//Chaplain but spookier +/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout + name = "white robe" + desc = "A long, flowing white robe. It looks comfortable, but not very warm." + icon_state = "whiteout_robe" + item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white") + flags_inv = HIDETIE|HIDEHOLSTER + hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout + +//Chaplain +/obj/item/clothing/suit/nun + name = "nun robe" + desc = "Maximum piety in this star system." + icon_state = "nun" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +//Chef +/obj/item/clothing/suit/chef + name = "chef's apron" + desc = "An apron used by a high class chef." + icon_state = "chef" + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.50 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDETIE|HIDEHOLSTER + allowed = list (/obj/item/weapon/material/knife) + +//Chef +/obj/item/clothing/suit/chef/classic + name = "classic chef's apron" + desc = "A basic, dull, white chef's apron." + icon_state = "apronchef" + blood_overlay_type = "armor" + body_parts_covered = 0 + flags_inv = 0 + +//Security +/obj/item/clothing/suit/security/navyofficer + name = "security officer's jacket" + desc = "This jacket is for those special occasions when a security officer actually feels safe." + icon_state = "officerbluejacket" + item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/security/navywarden + name = "warden's jacket" + desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." + icon_state = "wardenbluejacket" + item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/security/navyhos + name = "head of security's jacket" + desc = "This piece of clothing was specifically designed for asserting superior authority." + icon_state = "hosbluejacket" + item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +//Detective +/obj/item/clothing/suit/storage/det_trench + name = "brown trenchcoat" + desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat is externally impact resistant - perfect for your next act of autodefenestration!" + icon_state = "detective" + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, + /obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter, + /obj/item/device/taperecorder, /obj/item/device/uv_light) + armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/storage/det_trench/grey + name = "grey trenchcoat" + icon_state = "detective2" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +//Forensics +/obj/item/clothing/suit/storage/forensics + name = "jacket" + desc = "A forensics technician jacket." + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, + /obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter, + /obj/item/device/taperecorder, /obj/item/device/uv_light) + armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/storage/forensics/red + name = "red jacket" + desc = "A red forensics technician jacket." + icon_state = "forensics_red" + item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") + +/obj/item/clothing/suit/storage/forensics/red/long + name = "long red jacket" + desc = "A long red forensics technician jacket." + icon_state = "forensics_red_long" + +/obj/item/clothing/suit/storage/forensics/blue + name = "blue jacket" + desc = "A blue forensics technician jacket." + icon_state = "forensics_blue" + item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") + +/obj/item/clothing/suit/storage/forensics/blue/long + name = "long blue jacket" + desc = "A long blue forensics technician jacket." + icon_state = "forensics_blue_long" + +//Engineering +/obj/item/clothing/suit/storage/hazardvest + name = "hazard vest" + desc = "A high-visibility vest used in work zones." + icon_state = "hazard" + blood_overlay_type = "armor" + allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, + /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, + /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/taperoll/atmos, /obj/item/device/analyzer, /obj/item/weapon/extinguisher/mini) //VOREStation edit. Few more tools that can be put on vests + body_parts_covered = UPPER_TORSO + +/obj/item/clothing/suit/storage/hazardvest/blue + name = "blue hazard vest" + desc = "A high-visibility vest used in work zones. This one is blue!" + icon_state = "hazard_b" + +/obj/item/clothing/suit/storage/hazardvest/green + name = "green hazard vest" + desc = "A high-visibility vest used by emergency responders." + icon_state = "hazard_g" + +/obj/item/clothing/suit/storage/hazardvest/white + name = "white hazard vest" + desc = "A high-visibility vest used in work zones. This one bears the symbol of a disaster relief team!" + icon_state = "hazard_w" + +//Lawyer +/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket + name = "blue suit jacket" + desc = "A snappy dress jacket." + icon_state = "suitjacket_blue" + item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket + name = "purple suit jacket" + desc = "A snappy dress jacket." + icon_state = "suitjacket_purp" + item_state_slots = list(slot_r_hand_str = "suit_purple", slot_l_hand_str = "suit_purple") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + +//Internal Affairs +/obj/item/clothing/suit/storage/toggle/internalaffairs + name = "black suit jacket" + desc = "A smooth black jacket." + icon_state = "ia_jacket" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + +//Medical +/obj/item/clothing/suit/storage/toggle/fr_jacket + name = "first responder jacket" + desc = "A high-visibility jacket worn by medical first responders." + icon_state = "fr_jacket" + item_state_slots = list(slot_r_hand_str = "fr_jacket", slot_l_hand_str = "fr_jacket") + blood_overlay_type = "armor" + allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, + /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen) + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/fr_jacket/ems + name = "\improper EMS jacket" + desc = "A dark blue, martian-pattern, EMS jacket. It sports high-visibility reflective stripes and a star of life on the back." + icon_state = "ems_jacket" + item_state_slots = list(slot_r_hand_str = "ems_jacket", slot_l_hand_str = "ems_jacket") + +/obj/item/clothing/suit/surgicalapron + name = "surgical apron" + desc = "A sterile blue apron for performing surgery." + icon_state = "surgical" + blood_overlay_type = "armor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \ + /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor,/obj/item/weapon/surgical/hemostat, \ + /obj/item/weapon/surgical/cautery,/obj/item/weapon/surgical/bonegel,/obj/item/weapon/surgical/FixOVein) + +//Mime +/obj/item/clothing/suit/suspenders + name = "red suspenders" + desc = "They suspend the illusion of the mime's play." + icon = 'icons/inventory/belt/item.dmi' + icon_state = "suspenders" + blood_overlay_type = "armor" //it's the less thing that I can put here + body_parts_covered = 0 + +/obj/item/clothing/suit/suspenders/blue + name = "blue suspenders" + icon_state = "suspenders_blue" + +/obj/item/clothing/suit/suspenders/grey + name = "grey suspenders" + icon_state = "suspenders_grey" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 5d0c531c5c..0e5d4d938b 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -1,123 +1,123 @@ -/obj/item/clothing/suit/storage/toggle/labcoat - name = "labcoat" - desc = "A suit that protects against minor chemical spills." - icon_state = "labcoat" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper, /obj/item/clothing/mask/gas) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) - -/obj/item/clothing/suit/storage/toggle/labcoat/red - name = "red labcoat" - desc = "A suit that protects against minor chemical spills. This one is red." - icon_state = "red_labcoat" - item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/blue - name = "blue labcoat" - desc = "A suit that protects against minor chemical spills. This one is blue." - icon_state = "blue_labcoat" - item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/purple - name = "purple labcoat" - desc = "A suit that protects against minor chemical spills. This one is purple." - icon_state = "purple_labcoat" - item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/orange - name = "orange labcoat" - desc = "A suit that protects against minor chemical spills. This one is orange." - icon_state = "orange_labcoat" - item_state_slots = list(slot_r_hand_str = "orange_labcoat", slot_l_hand_str = "orange_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/yellow - name = "yellow labcoat" - desc = "A suit that protects against minor chemical spills. This one is yellow." - icon_state = "yellow_labcoat" - item_state_slots = list(slot_r_hand_str = "yellow_labcoat", slot_l_hand_str = "yellow_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/pink - name = "pink labcoat" - desc = "A suit that protects against minor chemical spills. This one is pink." - icon_state = "pink_labcoat" - item_state_slots = list(slot_r_hand_str = "pink_labcoat", slot_l_hand_str = "pink_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/green - name = "green labcoat" - desc = "A suit that protects against minor chemical spills. This one is green." - icon_state = "green_labcoat" - item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/mad - name = "The Mad's labcoat" - desc = "It makes you look capable of konking someone on the noggin and shooting them into space." - icon_state = "green_labcoat" - item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/cmo - name = "chief medical officer's labcoat" - desc = "Bluer than the standard model." - icon_state = "labcoat_cmo" - item_state_slots = list(slot_r_hand_str = "cmo_labcoat", slot_l_hand_str = "cmo_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt - name = "chief medical officer's labcoat" - desc = "A labcoat with command blue highlights." - icon_state = "labcoat_cmoalt" - item_state_slots = list(slot_r_hand_str = "cmo_labcoat", slot_l_hand_str = "cmo_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/genetics - name = "Geneticist labcoat" - desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" - item_state_slots = list(slot_r_hand_str = "genetics_labcoat", slot_l_hand_str = "genetics_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/chemist - name = "Chemist labcoat" - desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_chem" - item_state_slots = list(slot_r_hand_str = "chemist_labcoat", slot_l_hand_str = "chemist_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/virologist - name = "Virologist labcoat" - desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." - icon_state = "labcoat_vir" - item_state_slots = list(slot_r_hand_str = "virologist_labcoat", slot_l_hand_str = "virologist_labcoat") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0) - -/obj/item/clothing/suit/storage/toggle/labcoat/roboticist - name = "Roboticist labcoat" - desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." - icon_state = "labcoat_robo" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/science - name = "Scientist labcoat" - desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." - icon_state = "labcoat_tox" - item_state_slots = list(slot_r_hand_str = "science_labcoat", slot_l_hand_str = "science_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/rd - name = "research director's labcoat" - desc = "A flashy labcoat with purple markings. It belongs to the Research Director." - icon_state = "labcoat_rd" - item_state_slots = list(slot_r_hand_str = "science_labcoat", slot_l_hand_str = "science_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/emt - name = "EMT's labcoat" - desc = "A dark blue labcoat with reflective strips for emergency medical technicians." - icon_state = "labcoat_emt" - item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat") - -/obj/item/clothing/suit/storage/toggle/labcoat/blue_edge - name = "blue-edged labcoat" - desc = "A suit that protects against minor chemical spills. This one has blue trim." - icon_state = "blue_edge_labcoat" - -/obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor - name = "golden plague doctor suit" - desc = "If it worked then, it works now. This classic design comes in gold." - icon_state = "plaguedoctor2" +/obj/item/clothing/suit/storage/toggle/labcoat + name = "labcoat" + desc = "A suit that protects against minor chemical spills." + icon_state = "labcoat" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper, /obj/item/clothing/mask/gas) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + +/obj/item/clothing/suit/storage/toggle/labcoat/red + name = "red labcoat" + desc = "A suit that protects against minor chemical spills. This one is red." + icon_state = "red_labcoat" + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/blue + name = "blue labcoat" + desc = "A suit that protects against minor chemical spills. This one is blue." + icon_state = "blue_labcoat" + item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/purple + name = "purple labcoat" + desc = "A suit that protects against minor chemical spills. This one is purple." + icon_state = "purple_labcoat" + item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/orange + name = "orange labcoat" + desc = "A suit that protects against minor chemical spills. This one is orange." + icon_state = "orange_labcoat" + item_state_slots = list(slot_r_hand_str = "orange_labcoat", slot_l_hand_str = "orange_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/yellow + name = "yellow labcoat" + desc = "A suit that protects against minor chemical spills. This one is yellow." + icon_state = "yellow_labcoat" + item_state_slots = list(slot_r_hand_str = "yellow_labcoat", slot_l_hand_str = "yellow_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/pink + name = "pink labcoat" + desc = "A suit that protects against minor chemical spills. This one is pink." + icon_state = "pink_labcoat" + item_state_slots = list(slot_r_hand_str = "pink_labcoat", slot_l_hand_str = "pink_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/green + name = "green labcoat" + desc = "A suit that protects against minor chemical spills. This one is green." + icon_state = "green_labcoat" + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/mad + name = "The Mad's labcoat" + desc = "It makes you look capable of konking someone on the noggin and shooting them into space." + icon_state = "green_labcoat" + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/cmo + name = "chief medical officer's labcoat" + desc = "Bluer than the standard model." + icon_state = "labcoat_cmo" + item_state_slots = list(slot_r_hand_str = "cmo_labcoat", slot_l_hand_str = "cmo_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt + name = "chief medical officer's labcoat" + desc = "A labcoat with command blue highlights." + icon_state = "labcoat_cmoalt" + item_state_slots = list(slot_r_hand_str = "cmo_labcoat", slot_l_hand_str = "cmo_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/genetics + name = "Geneticist labcoat" + desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." + icon_state = "labcoat_gen" + item_state_slots = list(slot_r_hand_str = "genetics_labcoat", slot_l_hand_str = "genetics_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/chemist + name = "Chemist labcoat" + desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." + icon_state = "labcoat_chem" + item_state_slots = list(slot_r_hand_str = "chemist_labcoat", slot_l_hand_str = "chemist_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/virologist + name = "Virologist labcoat" + desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." + icon_state = "labcoat_vir" + item_state_slots = list(slot_r_hand_str = "virologist_labcoat", slot_l_hand_str = "virologist_labcoat") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0) + +/obj/item/clothing/suit/storage/toggle/labcoat/roboticist + name = "Roboticist labcoat" + desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." + icon_state = "labcoat_robo" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/science + name = "Scientist labcoat" + desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." + icon_state = "labcoat_tox" + item_state_slots = list(slot_r_hand_str = "science_labcoat", slot_l_hand_str = "science_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/rd + name = "research director's labcoat" + desc = "A flashy labcoat with purple markings. It belongs to the Research Director." + icon_state = "labcoat_rd" + item_state_slots = list(slot_r_hand_str = "science_labcoat", slot_l_hand_str = "science_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/emt + name = "EMT's labcoat" + desc = "A dark blue labcoat with reflective strips for emergency medical technicians." + icon_state = "labcoat_emt" + item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/blue_edge + name = "blue-edged labcoat" + desc = "A suit that protects against minor chemical spills. This one has blue trim." + icon_state = "blue_edge_labcoat" + +/obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor + name = "golden plague doctor suit" + desc = "If it worked then, it works now. This classic design comes in gold." + icon_state = "plaguedoctor2" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 8b9ca9bad9..0a7fda4ed2 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -1,1117 +1,1117 @@ -/* - * Contains: - * Lasertag - * Costume - * Misc - * Department Jackets - */ - -// -S2-note- Needs categorizing and sorting. - -/* - * Lasertag - */ - -#define LASER_TAG_HEALTH 3 //how many strikes do we get? - -/obj/item/clothing/suit/bluetag - name = "blue laser tag armor" - desc = "Blue Pride, Station Wide." - icon_state = "bluetag" - item_state_slots = list(slot_r_hand_str = "tdblue", slot_l_hand_str = "tdblue") - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO - allowed = list (/obj/item/weapon/gun/energy/lasertag/blue) - siemens_coefficient = 3.0 - var/lasertag_health = LASER_TAG_HEALTH - -/obj/item/clothing/suit/bluetag/sub - name = "Brigader Armor" - desc = "Replica armor commonly worn by Spacer Union Brigade members from the hit series Spacer Trail. Modified for Laser Tag (Blue Team)." - icon_state = "bluetag2" - -/obj/item/clothing/suit/redtag - name = "red laser tag armor" - desc = "Reputed to go faster." - icon_state = "redtag" - item_state_slots = list(slot_r_hand_str = "tdred", slot_l_hand_str = "tdred") - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO - allowed = list (/obj/item/weapon/gun/energy/lasertag/red) - siemens_coefficient = 3.0 - var/lasertag_health = LASER_TAG_HEALTH - -/obj/item/clothing/suit/redtag/dom - name = "Mu'tu'bi Armor" - desc = "Replica armor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)." - icon_state = "redtag2" - -/* - * 80s - */ - -/obj/item/clothing/suit/storage/puffyblue - name = "blue puffy coat" - desc = "A stylish, shiny, very blue puffer coat." - icon_state = "puffycoatblue" - item_state = "puffycoatblue" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") - -/obj/item/clothing/suit/storage/puffypurple - name = "purple puffy coat" - desc = "A stylish, shiny, very purple puffer coat." - icon_state = "puffycoatpurple" - item_state = "puffycoatpurple" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat") - -/obj/item/clothing/suit/storage/puffyred - name = "crimson puffy coat" - desc = "A stylish, shiny, very crimson puffer coat." - icon_state = "puffycoatred" - item_state = "puffycoatred" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") - -/* - * Costume - */ - -/obj/item/clothing/suit/pirate - name = "pirate coat" - desc = "Yarr." - icon_state = "pirate" - item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/poncho - name = "poncho" - desc = "A simple, comfortable poncho." - icon = 'icons/inventory/suit/mob.dmi' - icon_state = "poncho" - item_state = "poncho" - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_vr.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi', - ) - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/hgpirate - name = "pirate captain coat" - desc = "Yarr." - icon_state = "hgpirate" - item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") - flags_inv = HIDEJUMPSUIT - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - -/obj/item/clothing/suit/cyborg_suit - name = "cyborg suit" - desc = "Suit for a cyborg costume." - icon_state = "death" - fire_resist = T0C+5200 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/greatcoat - name = "great coat" - desc = "A heavy great coat" - icon_state = "gentlecoat" - item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/johnny_coat - name = "johnny~~ coat" - desc = "Johnny~~" - icon_state = "gentlecoat" - item_state_slots = list(slot_r_hand_str = "johnny_coat", slot_l_hand_str = "johnny_coat") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/justice - name = "justice suit" - desc = "This pretty much looks ridiculous." - icon_state = "gentle_coat" - item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/judgerobe - name = "judge's robe" - desc = "This robe commands authority." - icon_state = "judge" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash) - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/storage/apron/overalls - name = "coveralls" - desc = "A set of denim overalls." - icon_state = "overalls" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/suit/syndicatefake - name = "red space suit replica" - icon_state = "syndicate" - desc = "A plastic replica of a mercenary combat space suit, you'll look just like a real bloodthirsty mercenary in this! This is a toy, it is not made for use in space!" - w_class = ITEMSIZE_NORMAL - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/toy) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/hastur - name = "Hastur's Robes" - desc = "Robes not meant to be worn by man" - icon_state = "hastur" - item_state_slots = list(slot_r_hand_str = "rad", slot_l_hand_str = "rad") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/imperium_monk - name = "Imperium monk" - desc = "Have YOU killed a xenos today?" - icon_state = "imperium_monk" - body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/chickensuit - name = "Chicken Suit" - desc = "A suit made long ago by the ancient empire KFC." - icon_state = "chickensuit" - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - siemens_coefficient = 2.0 - -/obj/item/clothing/suit/monkeysuit - name = "Monkey Suit" - desc = "A suit that looks like a primate" - icon_state = "monkeysuit" - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - siemens_coefficient = 2.0 - -/obj/item/clothing/suit/holidaypriest - name = "Holiday Priest" - desc = "This is a nice holiday my son." - icon_state = "holidaypriest" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/cardborg - name = "cardborg suit" - desc = "An ordinary cardboard box with holes cut in the sides." - icon_state = "cardborg" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/skeleton - name = "skeleton costume" - desc = "A body-tight costume with the human skeleton lined out on it." - icon_state = "skelecost" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|FEET|HANDS|EYES|HEAD|FACE - flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDEGLOVES|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "judge", slot_l_hand_str = "judge") - -/obj/item/clothing/suit/engicost - name = "sexy engineering voidsuit costume" - desc = "It's supposed to look like an engineering voidsuit... It doesn't look like it could protect from much radiation." - icon_state = "engicost" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET - flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "eng_voidsuit", slot_l_hand_str = "eng_voidsuit") - -/obj/item/clothing/suit/maxman - name = "doctor maxman costume" - desc = "A costume made to look like Dr. Maxman, the famous male-enhancement salesman. Complete with red do-rag and sleeveless labcoat." - icon_state = "maxman" - body_parts_covered = LOWER_TORSO|FEET|LEGS|HEAD - flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - -/obj/item/clothing/suit/iasexy - name = "sexy internal affairs suit" - desc = "Now where's your pen?~" - icon_state = "iacost" - body_parts_covered = UPPER_TORSO|FEET|LOWER_TORSO|EYES - flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - -/obj/item/clothing/suit/sexyminer - name = "sexy miner costume" - desc = "For when you need to get your rocks off." - icon_state = "sexyminer" - body_parts_covered = FEET|LOWER_TORSO|HEAD - flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "miner", slot_l_hand_str = "miner") - -/obj/item/clothing/suit/sumo - name = "inflatable sumo wrestler costume" - desc = "An inflated sumo wrestler costume. It's quite hot." - icon_state = "sumo" - body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "classicponcho", slot_l_hand_str = "classicponcho") - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/suit/hackercost - name = "classic hacker costume" - desc = "You would feel insanely cool wearing this." - icon_state = "hackercost" - body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS|EYES - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "leather_coat", slot_l_hand_str = "leather_coat") - -/obj/item/clothing/suit/lumber - name = "sexy lumberjack costume" - desc = "Smells of dusky pine. Includes chest hair and beard." - icon_state = "sexylumber" - body_parts_covered = FEET|LOWER_TORSO|FEET - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") - -/obj/item/clothing/suit/shrine_maiden - name = "shrine maiden costume" - desc = "Makes you want to exterminate some troublesome youkai." - icon_state = "shrine_maiden" - body_parts_covered = LOWER_TORSO|UPPER_TORSO|LEGS|ARMS - -/* - * Misc - */ - -/obj/item/clothing/suit/straight_jacket - name = "straight jacket" - desc = "A suit that completely restrains the wearer." - icon_state = "straight_jacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - - var/resist_time = 4800 // Eight minutes. - -/obj/item/clothing/suit/straight_jacket/attack_hand(mob/living/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(src == H.wear_suit) - to_chat(H, "You need help taking this off!") - return - ..() - -/obj/item/clothing/suit/straight_jacket/equipped(var/mob/living/user,var/slot) - . = ..() - if(slot == slot_wear_suit) - user.drop_l_hand() - user.drop_r_hand() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.drop_from_inventory(H.handcuffed) - -/obj/item/clothing/suit/ianshirt - name = "worn shirt" - desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." - icon_state = "ianshirt" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") //placeholder -S2- - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDETIE|HIDEHOLSTER - -//nerdy shirt -/obj/item/clothing/suit/nerdshirt - name = "nerdy shirt" - desc = "A comfy white t-shirt with a picture of a cartoon hedgehog on it. Although clean, it still seems like the wearer should be embarrassed for owning it." - icon_state = "nerdshirt" - -/* - * Kimonos - */ - -/obj/item/clothing/suit/kimono - name = "traditional kimono" - desc = "A traditional Japanese kimono." - icon_state = "kimono" - addblends = "kimono_a" - -/obj/item/clothing/suit/kamishimo - name = "traditional kamishimo" - desc = "Traditional Japanese menswear." - icon_state = "kamishimo" - addblends = "kamishimo_a" - -/obj/item/clothing/suit/kimono/red - name = "red kimono" - icon_state = "kimono_red" - -/obj/item/clothing/suit/kimono/orange - name = "orange kimono" - icon_state = "kimono_orange" - -/obj/item/clothing/suit/kimono/yellow - name = "yellow kimono" - icon_state = "kimono_yellow" - -/obj/item/clothing/suit/kimono/green - name = "green kimono" - icon_state = "kimono_green" - -/obj/item/clothing/suit/kimono/blue - name = "blue kimono" - icon_state = "kimono_blue" - -/obj/item/clothing/suit/kimono/purple - name = "purple kimono" - icon_state = "kimono_purple" - -/obj/item/clothing/suit/kimono/violet - name = "violet kimono" - icon_state = "kimono_violet" - -/obj/item/clothing/suit/kimono/pink - name = "pink kimono" - icon_state = "kimono_pink" - -/obj/item/clothing/suit/kimono/earth - name = "earth kimono" - icon_state = "kimono_earth" - -/* - * Coats - */ - -/obj/item/clothing/suit/leathercoat - name = "leather coat" - desc = "A long, thick black leather coat." - icon_state = "leathercoat_alt" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/leathercoat/sec - name = "leather coat" - desc = "A long, thick black leather coat." - icon_state = "leathercoat_sec" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/browncoat - name = "brown leather coat" - desc = "A long, brown leather coat." - icon_state = "browncoat" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/neocoat - name = "black coat" - desc = "A flowing, black coat." - icon_state = "neocoat" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/customs - name = "customs jacket" - desc = "A standard SolGov Customs formal jacket." - icon_state = "customs_jacket" - item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/greyjacket - name = "grey jacket" - desc = "A fancy twead grey jacket." - icon_state = "gentlecoat" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/trench - name = "brown trenchcoat" - desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat appears to have its kevlar lining removed." - icon_state = "detective" - blood_overlay_type = "coat" - allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/trench/grey - name = "grey trenchcoat" - icon_state = "detective2" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/peacoat - name = "peacoat" - desc = "A well-tailored, stylish peacoat." - icon_state = "peacoat" - addblends = "peacoat_a" - item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/duster - name = "duster" - desc = "A duster is a light, loose-fitting long coat. Dusters are meant to protect your clothing from dust and rain." - icon_state = "duster" - blood_overlay_type = "coat" - allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter) - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/cardigan - name = "cardigan" - desc = "A cozy cardigan in a classic style." - icon_state = "cardigan" - addblends = "cardigan_a" - flags_inv = HIDEHOLSTER - -/* - * stripper - */ -/obj/item/clothing/suit/stripper/stripper_pink - name = "pink skimpy dress" - desc = "A rather skimpy pink dress." - icon_state = "stripper_p_over" - item_state_slots = list(slot_r_hand_str = "pink_labcoat", slot_l_hand_str = "pink_labcoat") - siemens_coefficient = 1 - -/obj/item/clothing/suit/stripper/stripper_green - name = "green skimpy dress" - desc = "A rather skimpy green dress." - icon_state = "stripper_g_over" - item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") - siemens_coefficient = 1 - -/obj/item/clothing/suit/xenos - name = "xenos suit" - desc = "A suit made out of chitinous alien hide." - icon_state = "xenos" - item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - siemens_coefficient = 2.0 - -/obj/item/clothing/suit/jacket/puffer - name = "puffer jacket" - desc = "A thick jacket with a rubbery, water-resistant shell." - icon_state = "pufferjacket" - item_state_slots = list(slot_r_hand_str = "chainmail", slot_l_hand_str = "chainmail") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/jacket/puffer/vest - name = "puffer vest" - desc = "A thick vest with a rubbery, water-resistant shell." - icon_state = "puffervest" - item_state_slots = list(slot_r_hand_str = "chainmail", slot_l_hand_str = "chainmail") - body_parts_covered = UPPER_TORSO|LOWER_TORSO - cold_protection = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/suit/storage/miljacket - name = "military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." - icon_state = "militaryjacket_nobadge" - item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/alt - name = "military jacket, alternate" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one has some extra badges on it." - icon_state = "militaryjacket_badge" - item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/green - name = "green military jacket" - desc = "A dark but rather high-saturation green canvas jacket. Feels sturdy, yet comfortable." - icon_state = "militaryjacket_green" - item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/tan - name = "tan military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Now in sandy tans for desert fans." - icon_state = "militaryjacket_tan" - item_state_slots = list(slot_r_hand_str = "suit_orange", slot_l_hand_str = "suit_orange") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/grey - name = "grey military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one's in urban grey." - icon_state = "militaryjacket_grey" - item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/navy - name = "navy military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Dark navy, this one is." - icon_state = "militaryjacket_navy" - item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/black - name = "black military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Now in tactical black." - icon_state = "militaryjacket_black" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/miljacket/white - name = "white military jacket" - desc = "A white canvas jacket. Don't wear this for walks in the snow, it won't keep you warm - it'll just make it harder to find your frozen corpse." - icon_state = "militaryjacket_white" - item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/bomber - name = "bomber jacket" - desc = "A thick, well-worn WW2 leather bomber jacket." - icon_state = "bomber" - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|ARMS - min_cold_protection_temperature = T0C - 20 - siemens_coefficient = 0.7 - -/obj/item/clothing/suit/storage/toggle/bomber/retro - name = "retro bomber jacket" - desc = "A retro style, fur-lined leather bomber jacket that invokes the early days of space exploration when spacemen were spacemen, and laser guns had funny little antennae on them." - icon_state = "retrojacket" - -/obj/item/clothing/suit/storage/bomber/alt - name = "bomber jacket" - desc = "A thick, well-worn WW2 leather bomber jacket." - icon_state = "bomberjacket_new" - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|ARMS - min_cold_protection_temperature = T0C - 20 - siemens_coefficient = 0.7 - -/obj/item/clothing/suit/storage/toggle/leather_jacket - name = "leather jacket" - desc = "A black leather coat." - icon_state = "leather_jacket" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless - name = "leather vest" - desc = "A black leather vest." - icon_state = "leather_jacket_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - -/obj/item/clothing/suit/storage/leather_jacket_alt - name = "leather vest" - desc = "A black leather vest." - icon_state = "leather_jacket_alt" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen - desc = "A black leather coat. A corporate logo is proudly displayed on the back." - icon_state = "leather_jacket_nt" - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - -/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless - name = "leather vest" - desc = "A black leather vest. A corporate logo is proudly displayed on the back." - icon_state = "leather_jacket_nt_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") - -//This one has buttons for some reason -/obj/item/clothing/suit/storage/toggle/brown_jacket - name = "brown jacket" - desc = "A brown leather coat." - icon_state = "brown_jacket" - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless - name = "brown vest" - desc = "A brown leather vest." - icon_state = "brown_jacket_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - -/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen - desc = "A brown leather coat. A corporate logo is proudly displayed on the back." - icon_state = "brown_jacket_nt" - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - -/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless - name = "brown vest" - desc = "A brown leather vest. A corporate logo is proudly displayed on the back." - icon_state = "brown_jacket_nt_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") - -/obj/item/clothing/suit/storage/toggle/denim_jacket - name = "denim jacket" - desc = "A denim coat." - icon_state = "denim_jacket" - item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless - name = "denim vest" - desc = "A denim vest." - icon_state = "denim_jacket_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") - -/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen - desc = "A denim coat. A corporate logo is proudly displayed on the back." - icon_state = "denim_jacket_nt" - item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") - -/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless - name = "denim vest" - desc = "A denim vest. A corporate logo is proudly displayed on the back." - icon_state = "denim_jacket_nt_sleeveless" - body_parts_covered = UPPER_TORSO - item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") - -/obj/item/clothing/suit/storage/toggle/hoodie - name = "grey hoodie" - desc = "A warm, grey sweatshirt." - icon_state = "grey_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") - min_cold_protection_temperature = T0C - 20 - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/hoodie/black - name = "black hoodie" - desc = "A warm, black sweatshirt." - icon_state = "black_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - -/obj/item/clothing/suit/storage/toggle/hoodie/red - name = "red hoodie" - desc = "A warm, red sweatshirt." - icon_state = "red_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") - -/obj/item/clothing/suit/storage/toggle/hoodie/blue - name = "blue hoodie" - desc = "A warm, blue sweatshirt." - icon_state = "blue_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") - -/obj/item/clothing/suit/storage/toggle/hoodie/green - name = "green hoodie" - desc = "A warm, green sweatshirt." - icon_state = "green_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") - -/obj/item/clothing/suit/storage/toggle/hoodie/orange - name = "orange hoodie" - desc = "A warm, orange sweatshirt." - icon_state = "orange_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_orange", slot_l_hand_str = "suit_orange") - -/obj/item/clothing/suit/storage/toggle/hoodie/yellow - name = "yellow hoodie" - desc = "A warm, yellow sweatshirt." - icon_state = "yellow_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_yellow", slot_l_hand_str = "suit_yellow") - -/obj/item/clothing/suit/storage/toggle/hoodie/cti - name = "CTI hoodie" - desc = "A warm, black sweatshirt. It bears the letters ‘CTI’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." - icon_state = "cti_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - -/obj/item/clothing/suit/storage/toggle/hoodie/mu - name = "mojave university hoodie" - desc = "A warm, gray sweatshirt. It bears the letters ‘MU’ on the front, a lettering to the well-known public college, Mojave University." - icon_state = "mu_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") - -/obj/item/clothing/suit/storage/toggle/hoodie/nt - name = "NT hoodie" - desc = "A warm, blue sweatshirt. It proudly bears the silver NanoTrasen insignia lettering on the back. The edges are trimmed with silver." - icon_state = "nt_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") - -/obj/item/clothing/suit/storage/toggle/hoodie/smw - name = "Space Mountain Wind hoodie" - desc = "A warm, black sweatshirt. It has the logo for the popular softdrink Space Mountain Wind on both the front and the back." - icon_state = "smw_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - -/obj/item/clothing/suit/storage/toggle/hoodie/nrti - name = "New Reykjavik Technical Institute hoodie" - desc = "A warm, gray sweatshirt. It bears the letters ‘NRT’ on the back, in reference to Sif's premiere technical institute." - icon_state = "nrti_hoodie" - item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") - -/obj/item/clothing/suit/whitedress - name = "white dress" - desc = "A fancy dress." - icon_state = "white_dress" - item_state_slots = list(slot_r_hand_str = "white_dress", slot_l_hand_str = "white_dress") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/varsity - name = "black varsity jacket" - desc = "A favorite of jocks everywhere from Sol to Nyx." - icon_state = "varsity" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") - flags_inv = HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/varsity/red - name = "red varsity jacket" - icon_state = "varsity_red" - -/obj/item/clothing/suit/varsity/purple - name = "purple varsity jacket" - icon_state = "varsity_purple" - -/obj/item/clothing/suit/varsity/green - name = "green varsity jacket" - icon_state = "varsity_green" - -/obj/item/clothing/suit/varsity/blue - name = "blue varsity jacket" - icon_state = "varsity_blue" - -/obj/item/clothing/suit/varsity/brown - name = "brown varsity jacket" - icon_state = "varsity_brown" - -/obj/item/clothing/suit/runner - name = "runner jacket" - desc = "A yellow sports jacket with white trim and an unfolded collar." - icon_state = "runner" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") - flags_inv = HIDEHOLSTER - -/* - * Department Jackets - */ -/obj/item/clothing/suit/storage/toggle/sec_dep_jacket - name = "department jacket, security" - desc = "A cozy jacket in security's colors. Show your department pride!" - icon_state = "sec_dep_jacket" - item_state_slots = list(slot_r_hand_str = "sec_dep_jacket", slot_l_hand_str = "sec_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/engi_dep_jacket - name = "department jacket, engineering" - desc = "A cozy jacket in engineering's colors. Show your department pride!" - icon_state = "engi_dep_jacket" - item_state_slots = list(slot_r_hand_str = "engi_dep_jacket", slot_l_hand_str = "engi_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/supply_dep_jacket - name = "department jacket, supply" - desc = "A cozy jacket in supply's colors. Show your department pride!" - icon_state = "supply_dep_jacket" - item_state_slots = list(slot_r_hand_str = "supply_dep_jacket", slot_l_hand_str = "supply_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/sci_dep_jacket - name = "department jacket, science" - desc = "A cozy jacket in science's colors. Show your department pride!" - icon_state = "sci_dep_jacket" - item_state_slots = list(slot_r_hand_str = "sci_dep_jacket", slot_l_hand_str = "sci_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/med_dep_jacket - name = "department jacket, medical" - desc = "A cozy jacket in medical's colors. Show your department pride!" - icon_state = "med_dep_jacket" - item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/light_jacket - name = "grey light jacket" - desc = "A light, cozy jacket. Now in grey." - icon_state = "grey_dep_jacket" - item_state_slots = list(slot_r_hand_str = "grey_dep_jacket", slot_l_hand_str = "grey_dep_jacket") - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/toggle/light_jacket/blue - name = "dark blue light jacket" - desc = "A light, cozy jacket. Now in dark blue." - icon_state = "blue_dep_jacket" - item_state_slots = list(slot_r_hand_str = "blue_dep_jacket", slot_l_hand_str = "blue_dep_jacket") - -/* - * Track Jackets - */ -/obj/item/clothing/suit/storage/toggle/track - name = "track jacket" - desc = "A track jacket, for the athletic." - icon_state = "trackjacket" - item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat") - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - -/obj/item/clothing/suit/storage/toggle/track/blue - name = "blue track jacket" - icon_state = "trackjacketblue" - item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") - - -/obj/item/clothing/suit/storage/toggle/track/green - name = "green track jacket" - icon_state = "trackjacketgreen" - item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") - -/obj/item/clothing/suit/storage/toggle/track/red - name = "red track jacket" - icon_state = "trackjacketred" - item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") - -/obj/item/clothing/suit/storage/toggle/track/white - name = "white track jacket" - icon_state = "trackjacketwhite" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") - -//Flannels - -/obj/item/clothing/suit/storage/flannel - name = "Flannel shirt" - desc = "A comfy, grey flannel shirt. Unleash your inner hipster." - icon_state = "flannel" - item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat") - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - flags_inv = HIDEHOLSTER - var/rolled = 0 - var/tucked = 0 - var/buttoned = 0 - -/obj/item/clothing/suit/storage/flannel/verb/roll_sleeves() - set name = "Roll Sleeves" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) - return - if(usr.stat) - return - - if(rolled == 0) - rolled = 1 - body_parts_covered &= ~(ARMS) - to_chat(usr, "You roll up the sleeves of your [src].") - else - rolled = 0 - body_parts_covered = initial(body_parts_covered) - to_chat(usr, "You roll down the sleeves of your [src].") - update_icon() - -/obj/item/clothing/suit/storage/flannel/verb/tuck() - set name = "Toggle Shirt Tucking" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)||usr.stat) - return - - if(tucked == 0) - tucked = 1 - to_chat(usr, "You tuck in your your [src].") - else - tucked = 0 - to_chat(usr, "You untuck your [src].") - update_icon() - -/obj/item/clothing/suit/storage/flannel/verb/button() - set name = "Toggle Shirt Buttons" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)||usr.stat) - return - - if(buttoned == 0) - buttoned = 1 - flags_inv = HIDETIE|HIDEHOLSTER - to_chat(usr, "You button your [src].") - else - buttoned = 0 - flags_inv = HIDEHOLSTER - to_chat(usr, "You unbutton your [src].") - update_icon() - -/obj/item/clothing/suit/storage/flannel/update_icon() - icon_state = initial(icon_state) - if(rolled) - icon_state += "r" - if(tucked) - icon_state += "t" - if(buttoned) - icon_state += "b" - update_clothing_icon() - -/obj/item/clothing/suit/storage/flannel/red - desc = "A comfy, red flannel shirt. Unleash your inner hipster." - icon_state = "flannel_red" - item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") - -/obj/item/clothing/suit/storage/flannel/aqua - desc = "A comfy, aqua flannel shirt. Unleash your inner hipster." - icon_state = "flannel_aqua" - item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") - -/obj/item/clothing/suit/storage/flannel/brown - desc = "A comfy, brown flannel shirt. Unleash your inner hipster." - icon_state = "flannel_brown" - item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") - -/obj/item/clothing/suit/storage/flannel/recolour - desc = "A comfy, flannel shirt. Unleash your inner hipster." - icon_state = "flannel_recolour" - - -//Green Uniform - -/obj/item/clothing/suit/storage/toggle/greengov - name = "green formal jacket" - desc = "A sleek proper formal jacket with gold buttons." - icon_state = "suitjacket_green" - item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEHOLSTER - -/obj/item/clothing/suit/storage/snowsuit - name = "snowsuit" - desc = "A suit made to keep you nice and toasty on cold winter days. Or at least alive." - icon_state = "snowsuit" - item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDEHOLSTER - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) - -/obj/item/clothing/suit/storage/snowsuit/command - name = "command snowsuit" - icon_state = "snowsuit_command" - -/obj/item/clothing/suit/storage/snowsuit/security - name = "security snowsuit" - icon_state = "snowsuit_security" - -/obj/item/clothing/suit/storage/snowsuit/medical - name = "medical snowsuit" - icon_state = "snowsuit_medical" - -/obj/item/clothing/suit/storage/snowsuit/engineering - name = "engineering snowsuit" - icon_state = "snowsuit_engineering" - -/obj/item/clothing/suit/storage/snowsuit/cargo - name = "cargo snowsuit" - icon_state = "snowsuit_cargo" - -/obj/item/clothing/suit/storage/snowsuit/science - name = "science snowsuit" - icon_state = "snowsuit_science" - -/obj/item/clothing/suit/caution - name = "wet floor sign" - desc = "Caution! Wet Floor!" - description_fluff = "Used by the janitor to passive-aggressively point at when you eventually slip on one of their mopped floors." - description_info = "Alt-click, or click in-hand to toggle the caution lights. It looks like you can wear it in your suit slot." - icon_state = "caution" - drop_sound = 'sound/items/drop/shoes.ogg' - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = 2 - body_parts_covered = UPPER_TORSO|LOWER_TORSO - attack_verb = list("warned", "cautioned", "smashed") - armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/suit/caution/attack_self() - toggle() - -/obj/item/clothing/suit/caution/AltClick() - toggle() - -/obj/item/clothing/suit/caution/proc/toggle() - if(!usr || usr.stat || usr.lying || usr.restrained() || !Adjacent(usr)) return - else if(src.icon_state == "caution") - src.icon_state = "caution_blinking" - src.item_state = "caution_blinking" - usr.show_message("You turn the wet floor sign on.") - playsound(src.loc, 'sound/machines/button.ogg', 30, 1) - else - src.icon_state = "caution" - src.item_state = "caution" - usr.show_message("You turn the wet floor sign off.") - update_clothing_icon() - -//Ruin Marine (Doom Marine) -/obj/item/clothing/suit/marine - name = "marine armor" - desc = "A set of marine prop armor from the popular game 'Ruin'." - icon_state = "marine" - body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") - -//Cropped hoodies -/obj/item/clothing/suit/storage/croppedhoodie - name = "cropped hoodie" - desc = "This style of hoodie is sometimes worn by those who cannot fit, or choose not to hide their delectable bellies under the full, soft confines of a hoodie. The hood is cosmetic, and non-functional." - icon_state = "croppedhoodie" - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/croppedhoodie/croppier - name = "high cropped hoodie" - desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional." - icon_state = "croppierhoodie" - -/obj/item/clothing/suit/storage/croppedhoodie/croppierer - name = "very high cropped hoodie" - desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional." - icon_state = "highcrophoodie" - -/obj/item/clothing/suit/storage/croppedhoodie/croppiest - name = "super cropped hoodie" - desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional." - icon_state = "supercroppedhoodie" - -//Drive jacket -/obj/item/clothing/suit/storage/drive - name = "relatable jacket" - desc = "An all white jacket with a shine. It seems easy to identify with the wearer." - icon_state = "drivejacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/moto_jacket - name = "motorcycle jacket" - desc = "A recreation of one of the famous Sol-based biwheeled driver assemblies. Patches on the back denote an AI-generated 'biker logo'. It looks unintelligible." - icon_state = "motojacket" - allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) //same as leather jackets - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/punkvest - name = "punk vest" - desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk." - icon_state = "punkvest" - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO +/* + * Contains: + * Lasertag + * Costume + * Misc + * Department Jackets + */ + +// -S2-note- Needs categorizing and sorting. + +/* + * Lasertag + */ + +#define LASER_TAG_HEALTH 3 //how many strikes do we get? + +/obj/item/clothing/suit/bluetag + name = "blue laser tag armor" + desc = "Blue Pride, Station Wide." + icon_state = "bluetag" + item_state_slots = list(slot_r_hand_str = "tdblue", slot_l_hand_str = "tdblue") + blood_overlay_type = "armor" + body_parts_covered = UPPER_TORSO + allowed = list (/obj/item/weapon/gun/energy/lasertag/blue) + siemens_coefficient = 3.0 + var/lasertag_health = LASER_TAG_HEALTH + +/obj/item/clothing/suit/bluetag/sub + name = "Brigader Armor" + desc = "Replica armor commonly worn by Spacer Union Brigade members from the hit series Spacer Trail. Modified for Laser Tag (Blue Team)." + icon_state = "bluetag2" + +/obj/item/clothing/suit/redtag + name = "red laser tag armor" + desc = "Reputed to go faster." + icon_state = "redtag" + item_state_slots = list(slot_r_hand_str = "tdred", slot_l_hand_str = "tdred") + blood_overlay_type = "armor" + body_parts_covered = UPPER_TORSO + allowed = list (/obj/item/weapon/gun/energy/lasertag/red) + siemens_coefficient = 3.0 + var/lasertag_health = LASER_TAG_HEALTH + +/obj/item/clothing/suit/redtag/dom + name = "Mu'tu'bi Armor" + desc = "Replica armor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)." + icon_state = "redtag2" + +/* + * 80s + */ + +/obj/item/clothing/suit/storage/puffyblue + name = "blue puffy coat" + desc = "A stylish, shiny, very blue puffer coat." + icon_state = "puffycoatblue" + item_state = "puffycoatblue" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") + +/obj/item/clothing/suit/storage/puffypurple + name = "purple puffy coat" + desc = "A stylish, shiny, very purple puffer coat." + icon_state = "puffycoatpurple" + item_state = "puffycoatpurple" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat") + +/obj/item/clothing/suit/storage/puffyred + name = "crimson puffy coat" + desc = "A stylish, shiny, very crimson puffer coat." + icon_state = "puffycoatred" + item_state = "puffycoatred" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + +/* + * Costume + */ + +/obj/item/clothing/suit/pirate + name = "pirate coat" + desc = "Yarr." + icon_state = "pirate" + item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/poncho + name = "poncho" + desc = "A simple, comfortable poncho." + icon = 'icons/inventory/suit/mob.dmi' + icon_state = "poncho" + item_state = "poncho" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_vr.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi', + ) + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/hgpirate + name = "pirate captain coat" + desc = "Yarr." + icon_state = "hgpirate" + item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") + flags_inv = HIDEJUMPSUIT + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + +/obj/item/clothing/suit/cyborg_suit + name = "cyborg suit" + desc = "Suit for a cyborg costume." + icon_state = "death" + fire_resist = T0C+5200 + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/greatcoat + name = "great coat" + desc = "A heavy great coat" + icon_state = "gentlecoat" + item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/johnny_coat + name = "johnny~~ coat" + desc = "Johnny~~" + icon_state = "gentlecoat" + item_state_slots = list(slot_r_hand_str = "johnny_coat", slot_l_hand_str = "johnny_coat") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/justice + name = "justice suit" + desc = "This pretty much looks ridiculous." + icon_state = "gentle_coat" + item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET + +/obj/item/clothing/suit/judgerobe + name = "judge's robe" + desc = "This robe commands authority." + icon_state = "judge" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash) + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/storage/apron/overalls + name = "coveralls" + desc = "A set of denim overalls." + icon_state = "overalls" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS + +/obj/item/clothing/suit/syndicatefake + name = "red space suit replica" + icon_state = "syndicate" + desc = "A plastic replica of a mercenary combat space suit, you'll look just like a real bloodthirsty mercenary in this! This is a toy, it is not made for use in space!" + w_class = ITEMSIZE_NORMAL + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/toy) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET + +/obj/item/clothing/suit/hastur + name = "Hastur's Robes" + desc = "Robes not meant to be worn by man" + icon_state = "hastur" + item_state_slots = list(slot_r_hand_str = "rad", slot_l_hand_str = "rad") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/imperium_monk + name = "Imperium monk" + desc = "Have YOU killed a xenos today?" + icon_state = "imperium_monk" + body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/chickensuit + name = "Chicken Suit" + desc = "A suit made long ago by the ancient empire KFC." + icon_state = "chickensuit" + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + siemens_coefficient = 2.0 + +/obj/item/clothing/suit/monkeysuit + name = "Monkey Suit" + desc = "A suit that looks like a primate" + icon_state = "monkeysuit" + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + siemens_coefficient = 2.0 + +/obj/item/clothing/suit/holidaypriest + name = "Holiday Priest" + desc = "This is a nice holiday my son." + icon_state = "holidaypriest" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/cardborg + name = "cardborg suit" + desc = "An ordinary cardboard box with holes cut in the sides." + icon_state = "cardborg" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/skeleton + name = "skeleton costume" + desc = "A body-tight costume with the human skeleton lined out on it." + icon_state = "skelecost" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|FEET|HANDS|EYES|HEAD|FACE + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDEGLOVES|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "judge", slot_l_hand_str = "judge") + +/obj/item/clothing/suit/engicost + name = "sexy engineering voidsuit costume" + desc = "It's supposed to look like an engineering voidsuit... It doesn't look like it could protect from much radiation." + icon_state = "engicost" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "eng_voidsuit", slot_l_hand_str = "eng_voidsuit") + +/obj/item/clothing/suit/maxman + name = "doctor maxman costume" + desc = "A costume made to look like Dr. Maxman, the famous male-enhancement salesman. Complete with red do-rag and sleeveless labcoat." + icon_state = "maxman" + body_parts_covered = LOWER_TORSO|FEET|LEGS|HEAD + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/iasexy + name = "sexy internal affairs suit" + desc = "Now where's your pen?~" + icon_state = "iacost" + body_parts_covered = UPPER_TORSO|FEET|LOWER_TORSO|EYES + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + +/obj/item/clothing/suit/sexyminer + name = "sexy miner costume" + desc = "For when you need to get your rocks off." + icon_state = "sexyminer" + body_parts_covered = FEET|LOWER_TORSO|HEAD + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "miner", slot_l_hand_str = "miner") + +/obj/item/clothing/suit/sumo + name = "inflatable sumo wrestler costume" + desc = "An inflated sumo wrestler costume. It's quite hot." + icon_state = "sumo" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "classicponcho", slot_l_hand_str = "classicponcho") + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + +/obj/item/clothing/suit/hackercost + name = "classic hacker costume" + desc = "You would feel insanely cool wearing this." + icon_state = "hackercost" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS|EYES + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "leather_coat", slot_l_hand_str = "leather_coat") + +/obj/item/clothing/suit/lumber + name = "sexy lumberjack costume" + desc = "Smells of dusky pine. Includes chest hair and beard." + icon_state = "sexylumber" + body_parts_covered = FEET|LOWER_TORSO|FEET + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + +/obj/item/clothing/suit/shrine_maiden + name = "shrine maiden costume" + desc = "Makes you want to exterminate some troublesome youkai." + icon_state = "shrine_maiden" + body_parts_covered = LOWER_TORSO|UPPER_TORSO|LEGS|ARMS + +/* + * Misc + */ + +/obj/item/clothing/suit/straight_jacket + name = "straight jacket" + desc = "A suit that completely restrains the wearer." + icon_state = "straight_jacket" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + + var/resist_time = 4800 // Eight minutes. + +/obj/item/clothing/suit/straight_jacket/attack_hand(mob/living/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(src == H.wear_suit) + to_chat(H, "You need help taking this off!") + return + ..() + +/obj/item/clothing/suit/straight_jacket/equipped(var/mob/living/user,var/slot) + . = ..() + if(slot == slot_wear_suit) + user.drop_l_hand() + user.drop_r_hand() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.drop_from_inventory(H.handcuffed) + +/obj/item/clothing/suit/ianshirt + name = "worn shirt" + desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." + icon_state = "ianshirt" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") //placeholder -S2- + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDETIE|HIDEHOLSTER + +//nerdy shirt +/obj/item/clothing/suit/nerdshirt + name = "nerdy shirt" + desc = "A comfy white t-shirt with a picture of a cartoon hedgehog on it. Although clean, it still seems like the wearer should be embarrassed for owning it." + icon_state = "nerdshirt" + +/* + * Kimonos + */ + +/obj/item/clothing/suit/kimono + name = "traditional kimono" + desc = "A traditional Japanese kimono." + icon_state = "kimono" + addblends = "kimono_a" + +/obj/item/clothing/suit/kamishimo + name = "traditional kamishimo" + desc = "Traditional Japanese menswear." + icon_state = "kamishimo" + addblends = "kamishimo_a" + +/obj/item/clothing/suit/kimono/red + name = "red kimono" + icon_state = "kimono_red" + +/obj/item/clothing/suit/kimono/orange + name = "orange kimono" + icon_state = "kimono_orange" + +/obj/item/clothing/suit/kimono/yellow + name = "yellow kimono" + icon_state = "kimono_yellow" + +/obj/item/clothing/suit/kimono/green + name = "green kimono" + icon_state = "kimono_green" + +/obj/item/clothing/suit/kimono/blue + name = "blue kimono" + icon_state = "kimono_blue" + +/obj/item/clothing/suit/kimono/purple + name = "purple kimono" + icon_state = "kimono_purple" + +/obj/item/clothing/suit/kimono/violet + name = "violet kimono" + icon_state = "kimono_violet" + +/obj/item/clothing/suit/kimono/pink + name = "pink kimono" + icon_state = "kimono_pink" + +/obj/item/clothing/suit/kimono/earth + name = "earth kimono" + icon_state = "kimono_earth" + +/* + * Coats + */ + +/obj/item/clothing/suit/leathercoat + name = "leather coat" + desc = "A long, thick black leather coat." + icon_state = "leathercoat_alt" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/leathercoat/sec + name = "leather coat" + desc = "A long, thick black leather coat." + icon_state = "leathercoat_sec" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/browncoat + name = "brown leather coat" + desc = "A long, brown leather coat." + icon_state = "browncoat" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/neocoat + name = "black coat" + desc = "A flowing, black coat." + icon_state = "neocoat" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/customs + name = "customs jacket" + desc = "A standard SolGov Customs formal jacket." + icon_state = "customs_jacket" + item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/greyjacket + name = "grey jacket" + desc = "A fancy twead grey jacket." + icon_state = "gentlecoat" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/trench + name = "brown trenchcoat" + desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat appears to have its kevlar lining removed." + icon_state = "detective" + blood_overlay_type = "coat" + allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/trench/grey + name = "grey trenchcoat" + icon_state = "detective2" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/peacoat + name = "peacoat" + desc = "A well-tailored, stylish peacoat." + icon_state = "peacoat" + addblends = "peacoat_a" + item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/duster + name = "duster" + desc = "A duster is a light, loose-fitting long coat. Dusters are meant to protect your clothing from dust and rain." + icon_state = "duster" + blood_overlay_type = "coat" + allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter) + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/cardigan + name = "cardigan" + desc = "A cozy cardigan in a classic style." + icon_state = "cardigan" + addblends = "cardigan_a" + flags_inv = HIDEHOLSTER + +/* + * stripper + */ +/obj/item/clothing/suit/stripper/stripper_pink + name = "pink skimpy dress" + desc = "A rather skimpy pink dress." + icon_state = "stripper_p_over" + item_state_slots = list(slot_r_hand_str = "pink_labcoat", slot_l_hand_str = "pink_labcoat") + siemens_coefficient = 1 + +/obj/item/clothing/suit/stripper/stripper_green + name = "green skimpy dress" + desc = "A rather skimpy green dress." + icon_state = "stripper_g_over" + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") + siemens_coefficient = 1 + +/obj/item/clothing/suit/xenos + name = "xenos suit" + desc = "A suit made out of chitinous alien hide." + icon_state = "xenos" + item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + siemens_coefficient = 2.0 + +/obj/item/clothing/suit/jacket/puffer + name = "puffer jacket" + desc = "A thick jacket with a rubbery, water-resistant shell." + icon_state = "pufferjacket" + item_state_slots = list(slot_r_hand_str = "chainmail", slot_l_hand_str = "chainmail") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/jacket/puffer/vest + name = "puffer vest" + desc = "A thick vest with a rubbery, water-resistant shell." + icon_state = "puffervest" + item_state_slots = list(slot_r_hand_str = "chainmail", slot_l_hand_str = "chainmail") + body_parts_covered = UPPER_TORSO|LOWER_TORSO + cold_protection = UPPER_TORSO|LOWER_TORSO + +/obj/item/clothing/suit/storage/miljacket + name = "military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." + icon_state = "militaryjacket_nobadge" + item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/alt + name = "military jacket, alternate" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one has some extra badges on it." + icon_state = "militaryjacket_badge" + item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/green + name = "green military jacket" + desc = "A dark but rather high-saturation green canvas jacket. Feels sturdy, yet comfortable." + icon_state = "militaryjacket_green" + item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/tan + name = "tan military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Now in sandy tans for desert fans." + icon_state = "militaryjacket_tan" + item_state_slots = list(slot_r_hand_str = "suit_orange", slot_l_hand_str = "suit_orange") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/grey + name = "grey military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one's in urban grey." + icon_state = "militaryjacket_grey" + item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/navy + name = "navy military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Dark navy, this one is." + icon_state = "militaryjacket_navy" + item_state_slots = list(slot_r_hand_str = "suit_navy", slot_l_hand_str = "suit_navy") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/black + name = "black military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. Now in tactical black." + icon_state = "militaryjacket_black" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/miljacket/white + name = "white military jacket" + desc = "A white canvas jacket. Don't wear this for walks in the snow, it won't keep you warm - it'll just make it harder to find your frozen corpse." + icon_state = "militaryjacket_white" + item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/bomber + name = "bomber jacket" + desc = "A thick, well-worn WW2 leather bomber jacket." + icon_state = "bomber" + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|ARMS + min_cold_protection_temperature = T0C - 20 + siemens_coefficient = 0.7 + +/obj/item/clothing/suit/storage/toggle/bomber/retro + name = "retro bomber jacket" + desc = "A retro style, fur-lined leather bomber jacket that invokes the early days of space exploration when spacemen were spacemen, and laser guns had funny little antennae on them." + icon_state = "retrojacket" + +/obj/item/clothing/suit/storage/bomber/alt + name = "bomber jacket" + desc = "A thick, well-worn WW2 leather bomber jacket." + icon_state = "bomberjacket_new" + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|ARMS + min_cold_protection_temperature = T0C - 20 + siemens_coefficient = 0.7 + +/obj/item/clothing/suit/storage/toggle/leather_jacket + name = "leather jacket" + desc = "A black leather coat." + icon_state = "leather_jacket" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless + name = "leather vest" + desc = "A black leather vest." + icon_state = "leather_jacket_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/storage/leather_jacket_alt + name = "leather vest" + desc = "A black leather vest." + icon_state = "leather_jacket_alt" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen + desc = "A black leather coat. A corporate logo is proudly displayed on the back." + icon_state = "leather_jacket_nt" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless + name = "leather vest" + desc = "A black leather vest. A corporate logo is proudly displayed on the back." + icon_state = "leather_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +//This one has buttons for some reason +/obj/item/clothing/suit/storage/toggle/brown_jacket + name = "brown jacket" + desc = "A brown leather coat." + icon_state = "brown_jacket" + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless + name = "brown vest" + desc = "A brown leather vest." + icon_state = "brown_jacket_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + +/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen + desc = "A brown leather coat. A corporate logo is proudly displayed on the back." + icon_state = "brown_jacket_nt" + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + +/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless + name = "brown vest" + desc = "A brown leather vest. A corporate logo is proudly displayed on the back." + icon_state = "brown_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + +/obj/item/clothing/suit/storage/toggle/denim_jacket + name = "denim jacket" + desc = "A denim coat." + icon_state = "denim_jacket" + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless + name = "denim vest" + desc = "A denim vest." + icon_state = "denim_jacket_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen + desc = "A denim coat. A corporate logo is proudly displayed on the back." + icon_state = "denim_jacket_nt" + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless + name = "denim vest" + desc = "A denim vest. A corporate logo is proudly displayed on the back." + icon_state = "denim_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + +/obj/item/clothing/suit/storage/toggle/hoodie + name = "grey hoodie" + desc = "A warm, grey sweatshirt." + icon_state = "grey_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") + min_cold_protection_temperature = T0C - 20 + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/hoodie/black + name = "black hoodie" + desc = "A warm, black sweatshirt." + icon_state = "black_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + +/obj/item/clothing/suit/storage/toggle/hoodie/red + name = "red hoodie" + desc = "A warm, red sweatshirt." + icon_state = "red_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") + +/obj/item/clothing/suit/storage/toggle/hoodie/blue + name = "blue hoodie" + desc = "A warm, blue sweatshirt." + icon_state = "blue_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") + +/obj/item/clothing/suit/storage/toggle/hoodie/green + name = "green hoodie" + desc = "A warm, green sweatshirt." + icon_state = "green_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") + +/obj/item/clothing/suit/storage/toggle/hoodie/orange + name = "orange hoodie" + desc = "A warm, orange sweatshirt." + icon_state = "orange_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_orange", slot_l_hand_str = "suit_orange") + +/obj/item/clothing/suit/storage/toggle/hoodie/yellow + name = "yellow hoodie" + desc = "A warm, yellow sweatshirt." + icon_state = "yellow_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_yellow", slot_l_hand_str = "suit_yellow") + +/obj/item/clothing/suit/storage/toggle/hoodie/cti + name = "CTI hoodie" + desc = "A warm, black sweatshirt. It bears the letters ‘CTI’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." + icon_state = "cti_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + +/obj/item/clothing/suit/storage/toggle/hoodie/mu + name = "mojave university hoodie" + desc = "A warm, gray sweatshirt. It bears the letters ‘MU’ on the front, a lettering to the well-known public college, Mojave University." + icon_state = "mu_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") + +/obj/item/clothing/suit/storage/toggle/hoodie/nt + name = "NT hoodie" + desc = "A warm, blue sweatshirt. It proudly bears the silver NanoTrasen insignia lettering on the back. The edges are trimmed with silver." + icon_state = "nt_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") + +/obj/item/clothing/suit/storage/toggle/hoodie/smw + name = "Space Mountain Wind hoodie" + desc = "A warm, black sweatshirt. It has the logo for the popular softdrink Space Mountain Wind on both the front and the back." + icon_state = "smw_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + +/obj/item/clothing/suit/storage/toggle/hoodie/nrti + name = "New Reykjavik Technical Institute hoodie" + desc = "A warm, gray sweatshirt. It bears the letters ‘NRT’ on the back, in reference to Sif's premiere technical institute." + icon_state = "nrti_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") + +/obj/item/clothing/suit/whitedress + name = "white dress" + desc = "A fancy dress." + icon_state = "white_dress" + item_state_slots = list(slot_r_hand_str = "white_dress", slot_l_hand_str = "white_dress") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/varsity + name = "black varsity jacket" + desc = "A favorite of jocks everywhere from Sol to Nyx." + icon_state = "varsity" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + flags_inv = HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/varsity/red + name = "red varsity jacket" + icon_state = "varsity_red" + +/obj/item/clothing/suit/varsity/purple + name = "purple varsity jacket" + icon_state = "varsity_purple" + +/obj/item/clothing/suit/varsity/green + name = "green varsity jacket" + icon_state = "varsity_green" + +/obj/item/clothing/suit/varsity/blue + name = "blue varsity jacket" + icon_state = "varsity_blue" + +/obj/item/clothing/suit/varsity/brown + name = "brown varsity jacket" + icon_state = "varsity_brown" + +/obj/item/clothing/suit/runner + name = "runner jacket" + desc = "A yellow sports jacket with white trim and an unfolded collar." + icon_state = "runner" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red") + flags_inv = HIDEHOLSTER + +/* + * Department Jackets + */ +/obj/item/clothing/suit/storage/toggle/sec_dep_jacket + name = "department jacket, security" + desc = "A cozy jacket in security's colors. Show your department pride!" + icon_state = "sec_dep_jacket" + item_state_slots = list(slot_r_hand_str = "sec_dep_jacket", slot_l_hand_str = "sec_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/engi_dep_jacket + name = "department jacket, engineering" + desc = "A cozy jacket in engineering's colors. Show your department pride!" + icon_state = "engi_dep_jacket" + item_state_slots = list(slot_r_hand_str = "engi_dep_jacket", slot_l_hand_str = "engi_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/supply_dep_jacket + name = "department jacket, supply" + desc = "A cozy jacket in supply's colors. Show your department pride!" + icon_state = "supply_dep_jacket" + item_state_slots = list(slot_r_hand_str = "supply_dep_jacket", slot_l_hand_str = "supply_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/sci_dep_jacket + name = "department jacket, science" + desc = "A cozy jacket in science's colors. Show your department pride!" + icon_state = "sci_dep_jacket" + item_state_slots = list(slot_r_hand_str = "sci_dep_jacket", slot_l_hand_str = "sci_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/med_dep_jacket + name = "department jacket, medical" + desc = "A cozy jacket in medical's colors. Show your department pride!" + icon_state = "med_dep_jacket" + item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/light_jacket + name = "grey light jacket" + desc = "A light, cozy jacket. Now in grey." + icon_state = "grey_dep_jacket" + item_state_slots = list(slot_r_hand_str = "grey_dep_jacket", slot_l_hand_str = "grey_dep_jacket") + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/toggle/light_jacket/blue + name = "dark blue light jacket" + desc = "A light, cozy jacket. Now in dark blue." + icon_state = "blue_dep_jacket" + item_state_slots = list(slot_r_hand_str = "blue_dep_jacket", slot_l_hand_str = "blue_dep_jacket") + +/* + * Track Jackets + */ +/obj/item/clothing/suit/storage/toggle/track + name = "track jacket" + desc = "A track jacket, for the athletic." + icon_state = "trackjacket" + item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat") + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + +/obj/item/clothing/suit/storage/toggle/track/blue + name = "blue track jacket" + icon_state = "trackjacketblue" + item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") + + +/obj/item/clothing/suit/storage/toggle/track/green + name = "green track jacket" + icon_state = "trackjacketgreen" + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") + +/obj/item/clothing/suit/storage/toggle/track/red + name = "red track jacket" + icon_state = "trackjacketred" + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + +/obj/item/clothing/suit/storage/toggle/track/white + name = "white track jacket" + icon_state = "trackjacketwhite" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") + +//Flannels + +/obj/item/clothing/suit/storage/flannel + name = "Flannel shirt" + desc = "A comfy, grey flannel shirt. Unleash your inner hipster." + icon_state = "flannel" + item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat") + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + flags_inv = HIDEHOLSTER + var/rolled = 0 + var/tucked = 0 + var/buttoned = 0 + +/obj/item/clothing/suit/storage/flannel/verb/roll_sleeves() + set name = "Roll Sleeves" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) + return + if(usr.stat) + return + + if(rolled == 0) + rolled = 1 + body_parts_covered &= ~(ARMS) + to_chat(usr, "You roll up the sleeves of your [src].") + else + rolled = 0 + body_parts_covered = initial(body_parts_covered) + to_chat(usr, "You roll down the sleeves of your [src].") + update_icon() + +/obj/item/clothing/suit/storage/flannel/verb/tuck() + set name = "Toggle Shirt Tucking" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)||usr.stat) + return + + if(tucked == 0) + tucked = 1 + to_chat(usr, "You tuck in your your [src].") + else + tucked = 0 + to_chat(usr, "You untuck your [src].") + update_icon() + +/obj/item/clothing/suit/storage/flannel/verb/button() + set name = "Toggle Shirt Buttons" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)||usr.stat) + return + + if(buttoned == 0) + buttoned = 1 + flags_inv = HIDETIE|HIDEHOLSTER + to_chat(usr, "You button your [src].") + else + buttoned = 0 + flags_inv = HIDEHOLSTER + to_chat(usr, "You unbutton your [src].") + update_icon() + +/obj/item/clothing/suit/storage/flannel/update_icon() + icon_state = initial(icon_state) + if(rolled) + icon_state += "r" + if(tucked) + icon_state += "t" + if(buttoned) + icon_state += "b" + update_clothing_icon() + +/obj/item/clothing/suit/storage/flannel/red + desc = "A comfy, red flannel shirt. Unleash your inner hipster." + icon_state = "flannel_red" + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + +/obj/item/clothing/suit/storage/flannel/aqua + desc = "A comfy, aqua flannel shirt. Unleash your inner hipster." + icon_state = "flannel_aqua" + item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") + +/obj/item/clothing/suit/storage/flannel/brown + desc = "A comfy, brown flannel shirt. Unleash your inner hipster." + icon_state = "flannel_brown" + item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") + +/obj/item/clothing/suit/storage/flannel/recolour + desc = "A comfy, flannel shirt. Unleash your inner hipster." + icon_state = "flannel_recolour" + + +//Green Uniform + +/obj/item/clothing/suit/storage/toggle/greengov + name = "green formal jacket" + desc = "A sleek proper formal jacket with gold buttons." + icon_state = "suitjacket_green" + item_state_slots = list(slot_r_hand_str = "suit_olive", slot_l_hand_str = "suit_olive") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO|ARMS + flags_inv = HIDEHOLSTER + +/obj/item/clothing/suit/storage/snowsuit + name = "snowsuit" + desc = "A suit made to keep you nice and toasty on cold winter days. Or at least alive." + icon_state = "snowsuit" + item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + +/obj/item/clothing/suit/storage/snowsuit/command + name = "command snowsuit" + icon_state = "snowsuit_command" + +/obj/item/clothing/suit/storage/snowsuit/security + name = "security snowsuit" + icon_state = "snowsuit_security" + +/obj/item/clothing/suit/storage/snowsuit/medical + name = "medical snowsuit" + icon_state = "snowsuit_medical" + +/obj/item/clothing/suit/storage/snowsuit/engineering + name = "engineering snowsuit" + icon_state = "snowsuit_engineering" + +/obj/item/clothing/suit/storage/snowsuit/cargo + name = "cargo snowsuit" + icon_state = "snowsuit_cargo" + +/obj/item/clothing/suit/storage/snowsuit/science + name = "science snowsuit" + icon_state = "snowsuit_science" + +/obj/item/clothing/suit/caution + name = "wet floor sign" + desc = "Caution! Wet Floor!" + description_fluff = "Used by the janitor to passive-aggressively point at when you eventually slip on one of their mopped floors." + description_info = "Alt-click, or click in-hand to toggle the caution lights. It looks like you can wear it in your suit slot." + icon_state = "caution" + drop_sound = 'sound/items/drop/shoes.ogg' + force = 1 + throwforce = 3 + throw_speed = 2 + throw_range = 5 + w_class = 2 + body_parts_covered = UPPER_TORSO|LOWER_TORSO + attack_verb = list("warned", "cautioned", "smashed") + armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +/obj/item/clothing/suit/caution/attack_self() + toggle() + +/obj/item/clothing/suit/caution/AltClick() + toggle() + +/obj/item/clothing/suit/caution/proc/toggle() + if(!usr || usr.stat || usr.lying || usr.restrained() || !Adjacent(usr)) return + else if(src.icon_state == "caution") + src.icon_state = "caution_blinking" + src.item_state = "caution_blinking" + usr.show_message("You turn the wet floor sign on.") + playsound(src.loc, 'sound/machines/button.ogg', 30, 1) + else + src.icon_state = "caution" + src.item_state = "caution" + usr.show_message("You turn the wet floor sign off.") + update_clothing_icon() + +//Ruin Marine (Doom Marine) +/obj/item/clothing/suit/marine + name = "marine armor" + desc = "A set of marine prop armor from the popular game 'Ruin'." + icon_state = "marine" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") + +//Cropped hoodies +/obj/item/clothing/suit/storage/croppedhoodie + name = "cropped hoodie" + desc = "This style of hoodie is sometimes worn by those who cannot fit, or choose not to hide their delectable bellies under the full, soft confines of a hoodie. The hood is cosmetic, and non-functional." + icon_state = "croppedhoodie" + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/croppedhoodie/croppier + name = "high cropped hoodie" + desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional." + icon_state = "croppierhoodie" + +/obj/item/clothing/suit/storage/croppedhoodie/croppierer + name = "very high cropped hoodie" + desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional." + icon_state = "highcrophoodie" + +/obj/item/clothing/suit/storage/croppedhoodie/croppiest + name = "super cropped hoodie" + desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional." + icon_state = "supercroppedhoodie" + +//Drive jacket +/obj/item/clothing/suit/storage/drive + name = "relatable jacket" + desc = "An all white jacket with a shine. It seems easy to identify with the wearer." + icon_state = "drivejacket" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/moto_jacket + name = "motorcycle jacket" + desc = "A recreation of one of the famous Sol-based biwheeled driver assemblies. Patches on the back denote an AI-generated 'biker logo'. It looks unintelligible." + icon_state = "motojacket" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) //same as leather jackets + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/punkvest + name = "punk vest" + desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk." + icon_state = "punkvest" + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 31f550da77..f465941ed7 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -1,118 +1,118 @@ -/* - * Contains: - * Fire protection - * Bomb protection - * Radiation protection - */ - -/* - * Fire protection - */ - -/obj/item/clothing/suit/fire - name = "emergency firesuit" - desc = "A suit that protects against fire and heat." - icon_state = "firesuit" - item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit") - w_class = ITEMSIZE_LARGE//bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/extinguisher) - slowdown = 1.0 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - item_flags = 0 - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_pressure_protection = 0.2 * ONE_ATMOSPHERE - max_pressure_protection = 20 * ONE_ATMOSPHERE - -/obj/item/clothing/suit/fire/firefighter - name = "firesuit" - icon_state = "firesuit2" - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+5000 - -/obj/item/clothing/suit/fire/heavy - name = "atmospheric firesuit" - desc = "A suit that protects against extreme fire and heat." - icon_state = "atmos_firesuit" - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+10000 - slowdown = 1.5 - -/* - * Bomb protection - */ -/obj/item/clothing/head/bomb_hood - name = "bomb hood" - desc = "Use in case of bomb." - icon_state = "bombsuit" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - siemens_coefficient = 0 - -/obj/item/clothing/suit/bomb_suit - name = "bomb suit" - desc = "A suit designed for safety when handling explosives." - icon_state = "bombsuit" - w_class = ITEMSIZE_LARGE//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - slowdown = 2 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - heat_protection = UPPER_TORSO|LOWER_TORSO - max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0 - -/obj/item/clothing/head/bomb_hood/security - icon_state = "bombsuitsec" - body_parts_covered = HEAD - -/obj/item/clothing/suit/bomb_suit/security - icon_state = "bombsuitsec" - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/* - * Radiation protection - */ -/obj/item/clothing/head/radiation - name = "Radiation hood" - icon_state = "rad" - desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" - flags_inv = BLOCKHAIR - item_flags = THICKMATERIAL - body_parts_covered = HEAD|FACE|EYES - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) - -/obj/item/clothing/suit/radiation - name = "Radiation suit" - desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." - icon_state = "rad" - w_class = ITEMSIZE_LARGE//bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas) - slowdown = 1.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER - item_flags = THICKMATERIAL - -/obj/item/clothing/suit/radiation/teshari - name = "Small radiation suit" - desc = "A specialist suit that protects against radiation, designed specifically for use by Teshari. Made to order by Aether." - icon = 'icons/inventory/suit/item_teshari.dmi' - icon_override = 'icons/inventory/suit/mob_teshari.dmi' - icon_state = "rad_fitted" - species_restricted = list(SPECIES_TESHARI) - -/obj/item/clothing/head/radiation/teshari - name = "Small radiation hood" - desc = "A specialist hood with radiation protective properties, designed specifically for use by Teshari. Made to order by Aether." - icon = 'icons/inventory/suit/item_teshari.dmi' - icon_override = 'icons/inventory/head/mob_teshari.dmi' - icon_state = "rad_fitted" +/* + * Contains: + * Fire protection + * Bomb protection + * Radiation protection + */ + +/* + * Fire protection + */ + +/obj/item/clothing/suit/fire + name = "emergency firesuit" + desc = "A suit that protects against fire and heat." + icon_state = "firesuit" + item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit") + w_class = ITEMSIZE_LARGE//bulky item + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.50 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/extinguisher) + slowdown = 1.0 + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + item_flags = 0 + heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + min_pressure_protection = 0.2 * ONE_ATMOSPHERE + max_pressure_protection = 20 * ONE_ATMOSPHERE + +/obj/item/clothing/suit/fire/firefighter + name = "firesuit" + icon_state = "firesuit2" + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+5000 + +/obj/item/clothing/suit/fire/heavy + name = "atmospheric firesuit" + desc = "A suit that protects against extreme fire and heat." + icon_state = "atmos_firesuit" + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+10000 + slowdown = 1.5 + +/* + * Bomb protection + */ +/obj/item/clothing/head/bomb_hood + name = "bomb hood" + desc = "Use in case of bomb." + icon_state = "bombsuit" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + siemens_coefficient = 0 + +/obj/item/clothing/suit/bomb_suit + name = "bomb suit" + desc = "A suit designed for safety when handling explosives." + icon_state = "bombsuit" + w_class = ITEMSIZE_LARGE//bulky item + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.01 + slowdown = 2 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) + flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + heat_protection = UPPER_TORSO|LOWER_TORSO + max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE + siemens_coefficient = 0 + +/obj/item/clothing/head/bomb_hood/security + icon_state = "bombsuitsec" + body_parts_covered = HEAD + +/obj/item/clothing/suit/bomb_suit/security + icon_state = "bombsuitsec" + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + +/* + * Radiation protection + */ +/obj/item/clothing/head/radiation + name = "Radiation hood" + icon_state = "rad" + desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" + flags_inv = BLOCKHAIR + item_flags = THICKMATERIAL + body_parts_covered = HEAD|FACE|EYES + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) + +/obj/item/clothing/suit/radiation + name = "Radiation suit" + desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." + icon_state = "rad" + w_class = ITEMSIZE_LARGE//bulky item + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.50 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas) + slowdown = 1.5 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) + flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + item_flags = THICKMATERIAL + +/obj/item/clothing/suit/radiation/teshari + name = "Small radiation suit" + desc = "A specialist suit that protects against radiation, designed specifically for use by Teshari. Made to order by Aether." + icon = 'icons/inventory/suit/item_teshari.dmi' + icon_override = 'icons/inventory/suit/mob_teshari.dmi' + icon_state = "rad_fitted" + species_restricted = list(SPECIES_TESHARI) + +/obj/item/clothing/head/radiation/teshari + name = "Small radiation hood" + desc = "A specialist hood with radiation protective properties, designed specifically for use by Teshari. Made to order by Aether." + icon = 'icons/inventory/suit/item_teshari.dmi' + icon_override = 'icons/inventory/head/mob_teshari.dmi' + icon_state = "rad_fitted" species_restricted = list(SPECIES_TESHARI) \ No newline at end of file diff --git a/code/modules/clothing/suits/utility_vr.dm b/code/modules/clothing/suits/utility_vr.dm index daea1d9726..469f082673 100644 --- a/code/modules/clothing/suits/utility_vr.dm +++ b/code/modules/clothing/suits/utility_vr.dm @@ -1,33 +1,33 @@ -/obj/item/clothing/head/bomb_hood/security - icon_state = "bombsuitsec" - body_parts_covered = HEAD - -/obj/item/clothing/suit/storage/toggle/paramedic - name = "paramedic vest" - desc = "A vest that protects against minor chemical spills." - icon = 'icons/inventory/suit/item_vr.dmi' - icon_override = 'icons/inventory/suit/mob_vr.dmi' - icon_state = "paramedic-vest" - item_state = "paramedic-vest" - item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO - flags_inv = HIDEHOLSTER - allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) - -/obj/item/clothing/head/radiation - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/head/mob_ch_teshari.dmi', //CHOMPstation edit, using our overwrite icons - SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi', - SPECIES_WEREBEAST = 'icons/inventory/head/mob_vr_werebeast.dmi' - ) - -/obj/item/clothing/suit/radiation - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/suit/mob_ch_teshari.dmi', //CHOMPstation edit, using our overwrite icons - SPECIES_VOX = 'icons/inventory/suit/mob_vox.dmi', - SPECIES_WEREBEAST = 'icons/inventory/suit/mob_vr_werebeast.dmi' - ) - - +/obj/item/clothing/head/bomb_hood/security + icon_state = "bombsuitsec" + body_parts_covered = HEAD + +/obj/item/clothing/suit/storage/toggle/paramedic + name = "paramedic vest" + desc = "A vest that protects against minor chemical spills." + icon = 'icons/inventory/suit/item_vr.dmi' + icon_override = 'icons/inventory/suit/mob_vr.dmi' + icon_state = "paramedic-vest" + item_state = "paramedic-vest" + item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat") + blood_overlay_type = "coat" + body_parts_covered = UPPER_TORSO + flags_inv = HIDEHOLSTER + allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + +/obj/item/clothing/head/radiation + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_ch_teshari.dmi', //CHOMPstation edit, using our overwrite icons + SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi', + SPECIES_WEREBEAST = 'icons/inventory/head/mob_vr_werebeast.dmi' + ) + +/obj/item/clothing/suit/radiation + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/suit/mob_ch_teshari.dmi', //CHOMPstation edit, using our overwrite icons + SPECIES_VOX = 'icons/inventory/suit/mob_vox.dmi', + SPECIES_WEREBEAST = 'icons/inventory/suit/mob_vr_werebeast.dmi' + ) + + diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 24e0cdddbf..903fca8410 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -1,129 +1,129 @@ -/obj/item/clothing/head/wizard - name = "wizard hat" - desc = "Strange-looking hat-wear that most certainly belongs to a real magic user." - icon_state = "wizard" - //Not given any special protective value since the magic robes are full-body protection --NEO - siemens_coefficient = 0.8 - body_parts_covered = 0 - wizard_garb = 1 - -/obj/item/clothing/head/wizard/red - name = "red wizard hat" - desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user." - icon_state = "redwizard" - siemens_coefficient = 0.8 - -/obj/item/clothing/head/wizard/fake - name = "wizard hat" - desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." - icon_state = "wizard-fake" - body_parts_covered = HEAD|FACE - siemens_coefficient = 1 - -/obj/item/clothing/head/wizard/fake/realistic - desc = "A cool-looking 'magic' hat." - icon_state = "wizard" - body_parts_covered = HEAD - -/obj/item/clothing/head/wizard/fake/realistic/colorable - desc = "A cool-looking 'magic' hat." - icon_state = "wizard-white" - sprite_sheets = list( - SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' - ) - -/obj/item/clothing/head/wizard/marisa - name = "Witch Hat" - desc = "Strange-looking hat-wear, makes you want to cast fireballs." - icon_state = "marisa" - siemens_coefficient = 0.8 - -/obj/item/clothing/head/wizard/magus - name = "Magus Helm" - desc = "A mysterious helmet that hums with an unearthly power" - icon_state = "magus" - siemens_coefficient = 0.8 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/wizard/amp - name = "psychic amplifier" - desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot." - icon_state = "amp" - siemens_coefficient = 0.8 - -/obj/item/clothing/head/wizard/cap - name = "Gentlemans Cap" - desc = "A checkered gray flat cap woven together with the rarest of threads." - icon_state = "gentcap" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - siemens_coefficient = 0.8 - -/obj/item/clothing/suit/wizrobe - name = "wizard robe" - desc = "A magnificant, gem-lined robe that seems to radiate power." - icon_state = "wizard" - gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE - permeability_coefficient = 0.01 - armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20) - allowed = list(/obj/item/weapon/teleportation_scroll) - flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER - siemens_coefficient = 0.8 - wizard_garb = 1 - -/obj/item/clothing/suit/wizrobe/red - name = "red wizard robe" - desc = "A magnificant, red, gem-lined robe that seems to radiate power." - icon_state = "redwizard" - -/obj/item/clothing/suit/wizrobe/marisa - name = "Witch Robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - -/obj/item/clothing/suit/wizrobe/magusblue - name = "Magus Robe" - desc = "A set of armoured robes that seem to radiate a dark power" - icon_state = "magusblue" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/wizrobe/magusred - name = "Magus Robe" - desc = "A set of armoured robes that seem to radiate a dark power" - icon_state = "magusred" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/wizrobe/psypurple - name = "purple robes" - desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash." - icon_state = "psyamp" - -/obj/item/clothing/suit/wizrobe/gentlecoat - name = "Gentlemans Coat" - desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." - icon_state = "gentlecoat" - item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - flags_inv = HIDETIE|HIDEHOLSTER - -/obj/item/clothing/suit/wizrobe/fake - name = "wizard robe" - desc = "A rather dull, blue robe meant to mimick real wizard robes." - icon_state = "wizard-fake" - item_state_slots = list(slot_r_hand_str = "wizard", slot_l_hand_str = "wizard") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 1.0 - -/obj/item/clothing/head/wizard/marisa/fake - name = "Witch Hat" - desc = "Strange-looking hat-wear, makes you want to cast fireballs." - icon_state = "marisa" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 1.0 - -/obj/item/clothing/suit/wizrobe/marisa/fake - name = "Witch Robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) +/obj/item/clothing/head/wizard + name = "wizard hat" + desc = "Strange-looking hat-wear that most certainly belongs to a real magic user." + icon_state = "wizard" + //Not given any special protective value since the magic robes are full-body protection --NEO + siemens_coefficient = 0.8 + body_parts_covered = 0 + wizard_garb = 1 + +/obj/item/clothing/head/wizard/red + name = "red wizard hat" + desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user." + icon_state = "redwizard" + siemens_coefficient = 0.8 + +/obj/item/clothing/head/wizard/fake + name = "wizard hat" + desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." + icon_state = "wizard-fake" + body_parts_covered = HEAD|FACE + siemens_coefficient = 1 + +/obj/item/clothing/head/wizard/fake/realistic + desc = "A cool-looking 'magic' hat." + icon_state = "wizard" + body_parts_covered = HEAD + +/obj/item/clothing/head/wizard/fake/realistic/colorable + desc = "A cool-looking 'magic' hat." + icon_state = "wizard-white" + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' + ) + +/obj/item/clothing/head/wizard/marisa + name = "Witch Hat" + desc = "Strange-looking hat-wear, makes you want to cast fireballs." + icon_state = "marisa" + siemens_coefficient = 0.8 + +/obj/item/clothing/head/wizard/magus + name = "Magus Helm" + desc = "A mysterious helmet that hums with an unearthly power" + icon_state = "magus" + siemens_coefficient = 0.8 + body_parts_covered = HEAD|FACE|EYES + +/obj/item/clothing/head/wizard/amp + name = "psychic amplifier" + desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot." + icon_state = "amp" + siemens_coefficient = 0.8 + +/obj/item/clothing/head/wizard/cap + name = "Gentlemans Cap" + desc = "A checkered gray flat cap woven together with the rarest of threads." + icon_state = "gentcap" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + siemens_coefficient = 0.8 + +/obj/item/clothing/suit/wizrobe + name = "wizard robe" + desc = "A magnificant, gem-lined robe that seems to radiate power." + icon_state = "wizard" + gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE + permeability_coefficient = 0.01 + armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20) + allowed = list(/obj/item/weapon/teleportation_scroll) + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + siemens_coefficient = 0.8 + wizard_garb = 1 + +/obj/item/clothing/suit/wizrobe/red + name = "red wizard robe" + desc = "A magnificant, red, gem-lined robe that seems to radiate power." + icon_state = "redwizard" + +/obj/item/clothing/suit/wizrobe/marisa + name = "Witch Robe" + desc = "Magic is all about the spell power, ZE!" + icon_state = "marisa" + +/obj/item/clothing/suit/wizrobe/magusblue + name = "Magus Robe" + desc = "A set of armoured robes that seem to radiate a dark power" + icon_state = "magusblue" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET + +/obj/item/clothing/suit/wizrobe/magusred + name = "Magus Robe" + desc = "A set of armoured robes that seem to radiate a dark power" + icon_state = "magusred" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET + +/obj/item/clothing/suit/wizrobe/psypurple + name = "purple robes" + desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash." + icon_state = "psyamp" + +/obj/item/clothing/suit/wizrobe/gentlecoat + name = "Gentlemans Coat" + desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." + icon_state = "gentlecoat" + item_state_slots = list(slot_r_hand_str = "greatcoat", slot_l_hand_str = "greatcoat") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_inv = HIDETIE|HIDEHOLSTER + +/obj/item/clothing/suit/wizrobe/fake + name = "wizard robe" + desc = "A rather dull, blue robe meant to mimick real wizard robes." + icon_state = "wizard-fake" + item_state_slots = list(slot_r_hand_str = "wizard", slot_l_hand_str = "wizard") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 1.0 + +/obj/item/clothing/head/wizard/marisa/fake + name = "Witch Hat" + desc = "Strange-looking hat-wear, makes you want to cast fireballs." + icon_state = "marisa" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 1.0 + +/obj/item/clothing/suit/wizrobe/marisa/fake + name = "Witch Robe" + desc = "Magic is all about the spell power, ZE!" + icon_state = "marisa" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 1.0 \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/accessory_ch.dm b/code/modules/clothing/under/accessories/accessory_ch.dm index 6ed5539ca8..dddf3b31d1 100644 --- a/code/modules/clothing/under/accessories/accessory_ch.dm +++ b/code/modules/clothing/under/accessories/accessory_ch.dm @@ -1,30 +1,30 @@ -/obj/item/clothing/accessory/collar/casinoslave - name = "a disabled Sentient Prize Collar" - desc = "A collar worn by sentient prizes on the Golden Goose Casino. Although the red text on it shows its disconnected and nonfunctional." - icon = 'icons/obj/clothing/ties_ch.dmi' - icon_override = 'icons/mob/ties_ch.dmi' - - icon_state = "casinoslave" - item_state = "casinoslave" - overlay_state = "casinoslave" - sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/accessory/mob_ch_teshari.dmi') - - var/slavename = null //Name for system to put on collar description - var/ownername = null //Name for system to put on collar description - var/slaveckey = null //Ckey for system to check who is the person and ensure no abuse of system or errors - var/slaveflavor = null //Description to show on the SPASM - var/slaveooc = null //OOC text to show on the SPASM - -/obj/item/clothing/accessory/collar/casinoslave/attack_self(mob/user as mob) - //keeping it blank so people don't tag and reset collar status - -/obj/item/clothing/accessory/collar/holo/casinoslave_fake - name = "a Sentient Prize Collar" - desc = "A collar worn by sentient prizes on the Golden Goose Casino. This one has been disconnected from the system and is now an accessory!" - icon = 'icons/obj/clothing/ties_ch.dmi' - icon_override = 'icons/mob/ties_ch.dmi' - - icon_state = "casinoslave_owned" - item_state = "casinoslave_owned" - overlay_state = "casinoslave_owned" +/obj/item/clothing/accessory/collar/casinoslave + name = "a disabled Sentient Prize Collar" + desc = "A collar worn by sentient prizes on the Golden Goose Casino. Although the red text on it shows its disconnected and nonfunctional." + icon = 'icons/obj/clothing/ties_ch.dmi' + icon_override = 'icons/mob/ties_ch.dmi' + + icon_state = "casinoslave" + item_state = "casinoslave" + overlay_state = "casinoslave" + sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/accessory/mob_ch_teshari.dmi') + + var/slavename = null //Name for system to put on collar description + var/ownername = null //Name for system to put on collar description + var/slaveckey = null //Ckey for system to check who is the person and ensure no abuse of system or errors + var/slaveflavor = null //Description to show on the SPASM + var/slaveooc = null //OOC text to show on the SPASM + +/obj/item/clothing/accessory/collar/casinoslave/attack_self(mob/user as mob) + //keeping it blank so people don't tag and reset collar status + +/obj/item/clothing/accessory/collar/holo/casinoslave_fake + name = "a Sentient Prize Collar" + desc = "A collar worn by sentient prizes on the Golden Goose Casino. This one has been disconnected from the system and is now an accessory!" + icon = 'icons/obj/clothing/ties_ch.dmi' + icon_override = 'icons/mob/ties_ch.dmi' + + icon_state = "casinoslave_owned" + item_state = "casinoslave_owned" + overlay_state = "casinoslave_owned" sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/accessory/mob_ch_teshari.dmi') \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 42ee5a7d6a..6e2b392331 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -1,262 +1,262 @@ -/* - Badges are worn on the belt or neck, and can be used to show that the holder is an authorized - Security agent - the user details can be imprinted on holobadges with a Security-access ID card, - or they can be emagged to accept any ID for use in disguises. -*/ - -/obj/item/clothing/accessory/badge - name = "detective's badge" - desc = "A corporate security badge, made from gold and set on false leather." - icon_state = "marshalbadge" - slot_flags = SLOT_BELT | SLOT_TIE - slot = ACCESSORY_SLOT_MEDAL - - var/stored_name - var/badge_string = "Corporate Security" - -/obj/item/clothing/accessory/badge/proc/set_name(var/new_name) - stored_name = new_name - name = "[initial(name)] ([stored_name])" - -/obj/item/clothing/accessory/badge/proc/set_desc(var/mob/living/carbon/human/H) - -/obj/item/clothing/accessory/badge/attack_self(mob/user as mob) - if(!stored_name) - to_chat(user, "You polish your old badge fondly, shining up the surface.") - set_name(user.real_name) - return - - if(isliving(user)) - if(stored_name) - user.visible_message("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].","You display your [src.name].\nIt reads: [stored_name], [badge_string].") - else - user.visible_message("[user] displays their [src.name].\nIt reads: [badge_string].","You display your [src.name]. It reads: [badge_string].") - -/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user) - if(isliving(user)) - user.visible_message("[user] invades [M]'s personal space, thrusting [src] into their face insistently.","You invade [M]'s personal space, thrusting [src] into their face insistently.") - user.do_attack_animation(M) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM - -// General Badges -/obj/item/clothing/accessory/badge/old - name = "faded badge" - desc = "A faded badge, backed with leather." - icon_state = "badge_round" - -/obj/item/clothing/accessory/badge/idbadge/nt - name = "\improper NT ID badge" - desc = "A descriptive identification badge with the holder's credentials. This one has red marks with the NanoTrasen logo on it." - icon_state = "ntbadge" - badge_string = null - -/obj/item/clothing/accessory/badge/press - name = "corporate press pass" - desc = "A corporate reporter's pass, emblazoned with the NanoTrasen logo." - icon_state = "pressbadge" - item_state = "pbadge" - badge_string = "Corporate Reporter" - w_class = ITEMSIZE_TINY - - drop_sound = 'sound/items/drop/rubber.ogg' - pickup_sound = 'sound/items/pickup/rubber.ogg' - -/obj/item/clothing/accessory/badge/press/independent - name = "press pass" - desc = "A freelance journalist's pass." - icon_state = "pressbadge-i" - badge_string = "Freelance Journalist" - -/obj/item/clothing/accessory/badge/press/plastic - name = "plastic press pass" - desc = "A journalist's 'pass' shaped, for whatever reason, like a security badge. It is made of plastic." - icon_state = "pbadge" - badge_string = "Sicurity Journelist" - w_class = ITEMSIZE_SMALL - -// Holobadges -/obj/item/clothing/accessory/badge/holo - name = "holobadge" - desc = "This glowing blue badge marks the holder as THE LAW." - icon_state = "holobadge" - var/emagged //Emagging removes Sec check. - var/valid_access = list(access_security) //Default access is security, to be overriden or expanded as desired - -/obj/item/clothing/accessory/badge/holo/cord - icon_state = "holobadge-cord" - slot_flags = SLOT_MASK | SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob) - if(!stored_name) - to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.") - return - return ..() - -/obj/item/clothing/accessory/badge/holo/emag_act(var/remaining_charges, var/mob/user) - if (emagged) - to_chat(user, "\The [src] is already cracked.") - return - else - emagged = 1 - to_chat(user, "You crack the holobadge security checks.") - return 1 - -/obj/item/clothing/accessory/badge/holo/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda)) - - var/obj/item/weapon/card/id/id_card = null - - if(istype(O, /obj/item/weapon/card/id)) - id_card = O - else - var/obj/item/device/pda/pda = O - id_card = pda.id - - var/found = FALSE - for(var/access in valid_access) - if(access in id_card.access || emagged) - to_chat(user, "You imprint your ID details onto the badge.") - set_name(user.real_name) - found = TRUE - break - if(!found) - to_chat(user, "[src] rejects your insufficient access rights.") - return - ..() - -/obj/item/weapon/storage/box/holobadge - name = "holobadge box" - desc = "A box claiming to contain holobadges." - starts_with = list( - /obj/item/clothing/accessory/badge/holo/officer = 2, - /obj/item/clothing/accessory/badge/holo = 2, - /obj/item/clothing/accessory/badge/holo/cord = 2 - ) - -/obj/item/clothing/accessory/badge/holo/officer - name = "officer's badge" - desc = "A bronze corporate security badge. Stamped with the words 'Security Officer.'" - icon_state = "bronzebadge" - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/warden - name = "warden's holobadge" - desc = "A silver corporate security badge. Stamped with the words 'Warden.'" - icon_state = "silverbadge" - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/hos - name = "head of security's holobadge" - desc = "An immaculately polished gold security badge. Stamped with the words 'Head of Security.'" - icon_state = "goldbadge" - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/detective - name = "detective's holobadge" - desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'" - icon_state = "marshalbadge" - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/investigator - name = "\improper investigator holobadge" - desc = "This badge marks the holder as an investigative agent." - icon_state = "invbadge" - badge_string = "Corporate Investigator" - valid_access = list(access_security, access_lawyer) //Permitting both sec and IAA! - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/clothing/accessory/badge/holo/sheriff - name = "sheriff badge" - desc = "A star-shaped brass badge denoting who the law is around these parts." - icon_state = "sheriff" - slot_flags = SLOT_TIE | SLOT_BELT - -/obj/item/weapon/storage/box/holobadge/hos - name = "holobadge box" - desc = "A box claiming to contain holobadges." - starts_with = list( - /obj/item/clothing/accessory/badge/holo/officer = 2, - /obj/item/clothing/accessory/badge/holo/warden = 1, - /obj/item/clothing/accessory/badge/holo/detective = 2, - /obj/item/clothing/accessory/badge/holo/hos = 1, - /obj/item/clothing/accessory/badge/holo/cord = 1 - ) - -// Sheriff Badge (toy) -/obj/item/clothing/accessory/badge/sheriff - name = "sheriff badge" - desc = "This town ain't big enough for the two of us, pardner." - icon_state = "sheriff_toy" - item_state = "sheriff_toy" - -/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob) - user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\ - "You flash the sheriff badge to everyone around you!") - -/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user) - if(isliving(user)) - user.visible_message("[user] invades [M]'s personal space, the sheriff badge into their face!.","You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.") - user.do_attack_animation(M) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM - -// Synthmorph bag / Corporation badges. Primarily used on the robobag, but can be worn. Default is NT. -/obj/item/clothing/accessory/badge/corporate_tag - name = "NanoTrasen Badge" - desc = "A plain metallic plate that might denote the wearer as a member of NanoTrasen." - icon_state = "tag_nt" - item_state = "badge" - badge_string = "NanoTrasen" - -/obj/item/clothing/accessory/badge/corporate_tag/morpheus - name = "Morpheus Badge" - desc = "A plain metallic plate that might denote the wearer as a member of Morpheus Cyberkinetics." - icon_state = "tag_blank" - badge_string = "Morpheus" - -/obj/item/clothing/accessory/badge/corporate_tag/wardtaka - name = "Ward-Takahashi Badge" - desc = "A plain metallic plate that might denote the wearer as a member of Ward-Takahashi." - icon_state = "tag_ward" - badge_string = "Ward-Takahashi" - -/obj/item/clothing/accessory/badge/corporate_tag/zenghu - name = "Zeng-Hu Badge" - desc = "A plain metallic plate that might denote the wearer as a member of Zeng-Hu." - icon_state = "tag_zeng" - badge_string = "Zeng-Hu" - -/obj/item/clothing/accessory/badge/corporate_tag/gilthari - name = "Gilthari Badge" - desc = "An opulent metallic plate that might denote the wearer as a member of Gilthari." - icon_state = "tag_gil" - badge_string = "Gilthari" - -/obj/item/clothing/accessory/badge/corporate_tag/veymed - name = "Vey-Medical Badge" - desc = "A plain metallic plate that might denote the wearer as a member of Vey-Medical." - icon_state = "tag_vey" - badge_string = "Vey-Medical" - -/obj/item/clothing/accessory/badge/corporate_tag/hephaestus - name = "Hephaestus Badge" - desc = "A rugged metallic plate that might denote the wearer as a member of Hephaestus." - icon_state = "tag_heph" - badge_string = "Hephaestus" - -/obj/item/clothing/accessory/badge/corporate_tag/grayson - name = "Grayson Badge" - desc = "A rugged metallic plate that might denote the wearer as a member of Grayson." - icon_state = "tag_grayson" - badge_string = "Grayson" - -/obj/item/clothing/accessory/badge/corporate_tag/xion - name = "Xion Badge" - desc = "A rugged metallic plate that might denote the wearer as a member of Xion." - icon_state = "tag_xion" - badge_string = "Xion" - -/obj/item/clothing/accessory/badge/corporate_tag/bishop - name = "Bishop Badge" - desc = "A sleek metallic plate that might denote the wearer as a member of Bishop." - icon_state = "tag_bishop" - badge_string = "Bishop" +/* + Badges are worn on the belt or neck, and can be used to show that the holder is an authorized + Security agent - the user details can be imprinted on holobadges with a Security-access ID card, + or they can be emagged to accept any ID for use in disguises. +*/ + +/obj/item/clothing/accessory/badge + name = "detective's badge" + desc = "A corporate security badge, made from gold and set on false leather." + icon_state = "marshalbadge" + slot_flags = SLOT_BELT | SLOT_TIE + slot = ACCESSORY_SLOT_MEDAL + + var/stored_name + var/badge_string = "Corporate Security" + +/obj/item/clothing/accessory/badge/proc/set_name(var/new_name) + stored_name = new_name + name = "[initial(name)] ([stored_name])" + +/obj/item/clothing/accessory/badge/proc/set_desc(var/mob/living/carbon/human/H) + +/obj/item/clothing/accessory/badge/attack_self(mob/user as mob) + if(!stored_name) + to_chat(user, "You polish your old badge fondly, shining up the surface.") + set_name(user.real_name) + return + + if(isliving(user)) + if(stored_name) + user.visible_message("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].","You display your [src.name].\nIt reads: [stored_name], [badge_string].") + else + user.visible_message("[user] displays their [src.name].\nIt reads: [badge_string].","You display your [src.name]. It reads: [badge_string].") + +/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message("[user] invades [M]'s personal space, thrusting [src] into their face insistently.","You invade [M]'s personal space, thrusting [src] into their face insistently.") + user.do_attack_animation(M) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM + +// General Badges +/obj/item/clothing/accessory/badge/old + name = "faded badge" + desc = "A faded badge, backed with leather." + icon_state = "badge_round" + +/obj/item/clothing/accessory/badge/idbadge/nt + name = "\improper NT ID badge" + desc = "A descriptive identification badge with the holder's credentials. This one has red marks with the NanoTrasen logo on it." + icon_state = "ntbadge" + badge_string = null + +/obj/item/clothing/accessory/badge/press + name = "corporate press pass" + desc = "A corporate reporter's pass, emblazoned with the NanoTrasen logo." + icon_state = "pressbadge" + item_state = "pbadge" + badge_string = "Corporate Reporter" + w_class = ITEMSIZE_TINY + + drop_sound = 'sound/items/drop/rubber.ogg' + pickup_sound = 'sound/items/pickup/rubber.ogg' + +/obj/item/clothing/accessory/badge/press/independent + name = "press pass" + desc = "A freelance journalist's pass." + icon_state = "pressbadge-i" + badge_string = "Freelance Journalist" + +/obj/item/clothing/accessory/badge/press/plastic + name = "plastic press pass" + desc = "A journalist's 'pass' shaped, for whatever reason, like a security badge. It is made of plastic." + icon_state = "pbadge" + badge_string = "Sicurity Journelist" + w_class = ITEMSIZE_SMALL + +// Holobadges +/obj/item/clothing/accessory/badge/holo + name = "holobadge" + desc = "This glowing blue badge marks the holder as THE LAW." + icon_state = "holobadge" + var/emagged //Emagging removes Sec check. + var/valid_access = list(access_security) //Default access is security, to be overriden or expanded as desired + +/obj/item/clothing/accessory/badge/holo/cord + icon_state = "holobadge-cord" + slot_flags = SLOT_MASK | SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob) + if(!stored_name) + to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.") + return + return ..() + +/obj/item/clothing/accessory/badge/holo/emag_act(var/remaining_charges, var/mob/user) + if (emagged) + to_chat(user, "\The [src] is already cracked.") + return + else + emagged = 1 + to_chat(user, "You crack the holobadge security checks.") + return 1 + +/obj/item/clothing/accessory/badge/holo/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda)) + + var/obj/item/weapon/card/id/id_card = null + + if(istype(O, /obj/item/weapon/card/id)) + id_card = O + else + var/obj/item/device/pda/pda = O + id_card = pda.id + + var/found = FALSE + for(var/access in valid_access) + if(access in id_card.access || emagged) + to_chat(user, "You imprint your ID details onto the badge.") + set_name(user.real_name) + found = TRUE + break + if(!found) + to_chat(user, "[src] rejects your insufficient access rights.") + return + ..() + +/obj/item/weapon/storage/box/holobadge + name = "holobadge box" + desc = "A box claiming to contain holobadges." + starts_with = list( + /obj/item/clothing/accessory/badge/holo/officer = 2, + /obj/item/clothing/accessory/badge/holo = 2, + /obj/item/clothing/accessory/badge/holo/cord = 2 + ) + +/obj/item/clothing/accessory/badge/holo/officer + name = "officer's badge" + desc = "A bronze corporate security badge. Stamped with the words 'Security Officer.'" + icon_state = "bronzebadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/warden + name = "warden's holobadge" + desc = "A silver corporate security badge. Stamped with the words 'Warden.'" + icon_state = "silverbadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/hos + name = "head of security's holobadge" + desc = "An immaculately polished gold security badge. Stamped with the words 'Head of Security.'" + icon_state = "goldbadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/detective + name = "detective's holobadge" + desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'" + icon_state = "marshalbadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/investigator + name = "\improper investigator holobadge" + desc = "This badge marks the holder as an investigative agent." + icon_state = "invbadge" + badge_string = "Corporate Investigator" + valid_access = list(access_security, access_lawyer) //Permitting both sec and IAA! + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/sheriff + name = "sheriff badge" + desc = "A star-shaped brass badge denoting who the law is around these parts." + icon_state = "sheriff" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/weapon/storage/box/holobadge/hos + name = "holobadge box" + desc = "A box claiming to contain holobadges." + starts_with = list( + /obj/item/clothing/accessory/badge/holo/officer = 2, + /obj/item/clothing/accessory/badge/holo/warden = 1, + /obj/item/clothing/accessory/badge/holo/detective = 2, + /obj/item/clothing/accessory/badge/holo/hos = 1, + /obj/item/clothing/accessory/badge/holo/cord = 1 + ) + +// Sheriff Badge (toy) +/obj/item/clothing/accessory/badge/sheriff + name = "sheriff badge" + desc = "This town ain't big enough for the two of us, pardner." + icon_state = "sheriff_toy" + item_state = "sheriff_toy" + +/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob) + user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\ + "You flash the sheriff badge to everyone around you!") + +/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message("[user] invades [M]'s personal space, the sheriff badge into their face!.","You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.") + user.do_attack_animation(M) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM + +// Synthmorph bag / Corporation badges. Primarily used on the robobag, but can be worn. Default is NT. +/obj/item/clothing/accessory/badge/corporate_tag + name = "NanoTrasen Badge" + desc = "A plain metallic plate that might denote the wearer as a member of NanoTrasen." + icon_state = "tag_nt" + item_state = "badge" + badge_string = "NanoTrasen" + +/obj/item/clothing/accessory/badge/corporate_tag/morpheus + name = "Morpheus Badge" + desc = "A plain metallic plate that might denote the wearer as a member of Morpheus Cyberkinetics." + icon_state = "tag_blank" + badge_string = "Morpheus" + +/obj/item/clothing/accessory/badge/corporate_tag/wardtaka + name = "Ward-Takahashi Badge" + desc = "A plain metallic plate that might denote the wearer as a member of Ward-Takahashi." + icon_state = "tag_ward" + badge_string = "Ward-Takahashi" + +/obj/item/clothing/accessory/badge/corporate_tag/zenghu + name = "Zeng-Hu Badge" + desc = "A plain metallic plate that might denote the wearer as a member of Zeng-Hu." + icon_state = "tag_zeng" + badge_string = "Zeng-Hu" + +/obj/item/clothing/accessory/badge/corporate_tag/gilthari + name = "Gilthari Badge" + desc = "An opulent metallic plate that might denote the wearer as a member of Gilthari." + icon_state = "tag_gil" + badge_string = "Gilthari" + +/obj/item/clothing/accessory/badge/corporate_tag/veymed + name = "Vey-Medical Badge" + desc = "A plain metallic plate that might denote the wearer as a member of Vey-Medical." + icon_state = "tag_vey" + badge_string = "Vey-Medical" + +/obj/item/clothing/accessory/badge/corporate_tag/hephaestus + name = "Hephaestus Badge" + desc = "A rugged metallic plate that might denote the wearer as a member of Hephaestus." + icon_state = "tag_heph" + badge_string = "Hephaestus" + +/obj/item/clothing/accessory/badge/corporate_tag/grayson + name = "Grayson Badge" + desc = "A rugged metallic plate that might denote the wearer as a member of Grayson." + icon_state = "tag_grayson" + badge_string = "Grayson" + +/obj/item/clothing/accessory/badge/corporate_tag/xion + name = "Xion Badge" + desc = "A rugged metallic plate that might denote the wearer as a member of Xion." + icon_state = "tag_xion" + badge_string = "Xion" + +/obj/item/clothing/accessory/badge/corporate_tag/bishop + name = "Bishop Badge" + desc = "A sleek metallic plate that might denote the wearer as a member of Bishop." + icon_state = "tag_bishop" + badge_string = "Bishop" diff --git a/code/modules/clothing/under/accessories/lockets.dm b/code/modules/clothing/under/accessories/lockets.dm index dcc775d878..ef9ea3623a 100644 --- a/code/modules/clothing/under/accessories/lockets.dm +++ b/code/modules/clothing/under/accessories/lockets.dm @@ -1,47 +1,47 @@ -/obj/item/clothing/accessory/locket - name = "silver locket" - desc = "A small locket of high-quality metal." - icon_state = "locket" - drop_sound = 'sound/items/drop/ring.ogg' - pickup_sound = 'sound/items/pickup/ring.ogg' - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_MASK | SLOT_TIE - slot = ACCESSORY_SLOT_DECOR - var/base_icon - var/open - var/obj/item/held //Item inside locket. - -/obj/item/clothing/accessory/locket/attack_self(mob/user as mob) - if(!base_icon) - base_icon = icon_state - - if(!("[base_icon]_open" in cached_icon_states(icon))) - to_chat(user, "\The [src] doesn't seem to open.") - return - - open = !open - to_chat(user, "You flip \the [src] [open?"open":"closed"].") - if(open) - icon_state = "[base_icon]_open" - if(held) - to_chat(user, "\The [held] falls out!") - held.loc = get_turf(user) - held = null - else - icon_state = "[base_icon]" - -/obj/item/clothing/accessory/locket/attackby(var/obj/item/O as obj, mob/user as mob) - if(!open) - to_chat(user, "You have to open it first.") - return - - if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo)) - if(held) - to_chat(usr, "\The [src] already has something inside it.") - else - to_chat(usr, "You slip [O] into [src].") - user.drop_item() - O.loc = src - held = O - return - ..() +/obj/item/clothing/accessory/locket + name = "silver locket" + desc = "A small locket of high-quality metal." + icon_state = "locket" + drop_sound = 'sound/items/drop/ring.ogg' + pickup_sound = 'sound/items/pickup/ring.ogg' + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_MASK | SLOT_TIE + slot = ACCESSORY_SLOT_DECOR + var/base_icon + var/open + var/obj/item/held //Item inside locket. + +/obj/item/clothing/accessory/locket/attack_self(mob/user as mob) + if(!base_icon) + base_icon = icon_state + + if(!("[base_icon]_open" in cached_icon_states(icon))) + to_chat(user, "\The [src] doesn't seem to open.") + return + + open = !open + to_chat(user, "You flip \the [src] [open?"open":"closed"].") + if(open) + icon_state = "[base_icon]_open" + if(held) + to_chat(user, "\The [held] falls out!") + held.loc = get_turf(user) + held = null + else + icon_state = "[base_icon]" + +/obj/item/clothing/accessory/locket/attackby(var/obj/item/O as obj, mob/user as mob) + if(!open) + to_chat(user, "You have to open it first.") + return + + if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo)) + if(held) + to_chat(usr, "\The [src] already has something inside it.") + else + to_chat(usr, "You slip [O] into [src].") + user.drop_item() + O.loc = src + held = O + return + ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index b20524a136..afdc9917c9 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -1,143 +1,143 @@ -/obj/item/clothing/under/color/black - name = "black jumpsuit" - icon_state = "black" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/blackf - name = "feminine black jumpsuit" - desc = "It's very smart and in a ladies size!" - icon_state = "black" - worn_state = "blackf" - -/obj/item/clothing/under/color/blackjumpskirt - name = "black jumpskirt" - desc = "A slimming black jumpskirt." - icon_state = "blackjumpskirt" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - -/obj/item/clothing/under/color/blue - name = "blue jumpsuit" - icon_state = "blue" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/green - name = "green jumpsuit" - icon_state = "green" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/grey - name = "grey jumpsuit" - icon_state = "grey" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/orange - name = "orange jumpsuit" - icon_state = "orange" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/prison - name = "prison jumpsuit" - desc = "It's standardized prisoner-wear. Its suit sensors are permanently set to the \"Tracking\" position." - icon_state = "prison" - has_sensor = 2 - sensor_mode = 3 - -/obj/item/clothing/under/color/pink - name = "pink jumpsuit" - icon_state = "pink" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/red - name = "red jumpsuit" - icon_state = "red" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/white - name = "white jumpsuit" - icon_state = "white" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/yellow - name = "yellow jumpsuit" - icon_state = "yellow" - rolled_sleeves = 0 - -/obj/item/clothing/under/psyche - name = "psychedelic jumpsuit" - desc = "Groovy!" - icon_state = "psyche" - -/obj/item/clothing/under/color/lightblue - name = "lightblue jumpsuit" - desc = "A light blue jumpsuit." - icon_state = "lightblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/aqua - name = "aqua jumpsuit" - desc = "An aqua jumpsuit." - icon_state = "aqua" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - rolled_sleeves = 0 - -/obj/item/clothing/under/color - name = "purple jumpsuit" - desc = "The latest in space fashion." - icon_state = "purple" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/lightpurple - name = "lightpurple jumpsuit" - desc = "A light purple jumpsuit." - icon_state = "lightpurple" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/lightgreen - name = "lightgreen jumpsuit" - desc = "A light green jumpsuit." - icon_state = "lightgreen" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/lightbrown - name = "lightbrown jumpsuit" - desc = "A light brown jumpsuit." - icon_state = "lightbrown" - rolled_sleeves = 0 - -/obj/item/clothing/under/color/brown - name = "brown jumpsuit" - desc = "A brown jumpsuit." - icon_state = "brown" - item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/yellowgreen - name = "yellowgreen jumpsuit" - desc = "A... yellow green jumpsuit?" - icon_state = "yellowgreen" - item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/darkblue - name = "darkblue jumpsuit" - desc = "A dark blue jumpsuit." - icon_state = "darkblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/lightred - name = "lightred jumpsuit" - desc = "A light red jumpsuit." - icon_state = "lightred" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - rolled_sleeves = 0 - -/obj/item/clothing/under/color/darkred - name = "darkred jumpsuit" - desc = "A dark red jumpsuit." - icon_state = "darkred" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - rolled_sleeves = 0 +/obj/item/clothing/under/color/black + name = "black jumpsuit" + icon_state = "black" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/blackf + name = "feminine black jumpsuit" + desc = "It's very smart and in a ladies size!" + icon_state = "black" + worn_state = "blackf" + +/obj/item/clothing/under/color/blackjumpskirt + name = "black jumpskirt" + desc = "A slimming black jumpskirt." + icon_state = "blackjumpskirt" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + +/obj/item/clothing/under/color/blue + name = "blue jumpsuit" + icon_state = "blue" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/green + name = "green jumpsuit" + icon_state = "green" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/grey + name = "grey jumpsuit" + icon_state = "grey" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/orange + name = "orange jumpsuit" + icon_state = "orange" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/prison + name = "prison jumpsuit" + desc = "It's standardized prisoner-wear. Its suit sensors are permanently set to the \"Tracking\" position." + icon_state = "prison" + has_sensor = 2 + sensor_mode = 3 + +/obj/item/clothing/under/color/pink + name = "pink jumpsuit" + icon_state = "pink" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/red + name = "red jumpsuit" + icon_state = "red" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/white + name = "white jumpsuit" + icon_state = "white" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/yellow + name = "yellow jumpsuit" + icon_state = "yellow" + rolled_sleeves = 0 + +/obj/item/clothing/under/psyche + name = "psychedelic jumpsuit" + desc = "Groovy!" + icon_state = "psyche" + +/obj/item/clothing/under/color/lightblue + name = "lightblue jumpsuit" + desc = "A light blue jumpsuit." + icon_state = "lightblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/aqua + name = "aqua jumpsuit" + desc = "An aqua jumpsuit." + icon_state = "aqua" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + rolled_sleeves = 0 + +/obj/item/clothing/under/color + name = "purple jumpsuit" + desc = "The latest in space fashion." + icon_state = "purple" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/lightpurple + name = "lightpurple jumpsuit" + desc = "A light purple jumpsuit." + icon_state = "lightpurple" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/lightgreen + name = "lightgreen jumpsuit" + desc = "A light green jumpsuit." + icon_state = "lightgreen" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/lightbrown + name = "lightbrown jumpsuit" + desc = "A light brown jumpsuit." + icon_state = "lightbrown" + rolled_sleeves = 0 + +/obj/item/clothing/under/color/brown + name = "brown jumpsuit" + desc = "A brown jumpsuit." + icon_state = "brown" + item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/yellowgreen + name = "yellowgreen jumpsuit" + desc = "A... yellow green jumpsuit?" + icon_state = "yellowgreen" + item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/darkblue + name = "darkblue jumpsuit" + desc = "A dark blue jumpsuit." + icon_state = "darkblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/lightred + name = "lightred jumpsuit" + desc = "A light red jumpsuit." + icon_state = "lightred" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + rolled_sleeves = 0 + +/obj/item/clothing/under/color/darkred + name = "darkred jumpsuit" + desc = "A dark red jumpsuit." + icon_state = "darkred" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + rolled_sleeves = 0 diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 010db4d640..6db4955ccd 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -1,214 +1,214 @@ -//Alphabetical order of civilian jobs. - -/obj/item/clothing/under/rank/bartender - desc = "It looks like it could use some more flair." - name = "bartender's uniform" - icon_state = "ba_suit" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/bartender/skirt - desc = "Short and cute." - name = "bartender's skirt" - icon_state = "ba_suit_skirt" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - -/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. - desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Site Manager\"." - name = "site manager's jumpsuit" - icon_state = "captain" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/cargo - name = "quartermaster's jumpsuit" - desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." - icon_state = "qm" - item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/cargo/jeans - name = "quartermaster's jumpjeans" - desc = "Jeeeaaans! They're comfy!" - icon_state = "qmj" - -/obj/item/clothing/under/rank/cargo/jeans/female - name = "quartermaster's jumpjeans" - desc = "Jeeeaaans! They're comfy!" - icon_state = "qmjf" - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/cargotech - name = "cargo technician's jumpsuit" - desc = "Shooooorts! They're comfy and easy to wear!" - icon_state = "cargo" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/cargotech/jeans - name = "cargo technician's jumpjeans" - desc = "Jeeeaaans! They're comfy!" - icon_state = "cargoj" - item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/cargotech/jeans/female - name = "cargo technician's jumpjeans" - desc = "Jeeeaaans! They're comfy!" - icon_state = "cargojf" - -/obj/item/clothing/under/rank/chaplain - desc = "It's a black jumpsuit, often worn by religious folk." - name = "chaplain's jumpsuit" - icon_state = "chaplain" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/chef - desc = "It's an apron which is given only to the most hardcore chefs in space." - name = "chef's uniform" - icon_state = "chef" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/chef/alt - desc = "It's an apron which is given only to the chefs that swear the most." - name = "souschef's uniform" - icon_state = "souschef" - -/obj/item/clothing/under/rank/clown - name = "clown suit" - desc = "Honk!" - icon_state = "clown" - rolled_sleeves = -1 - has_sensor = 0 // CHOMPEdit: Fixes sensors issue - -/obj/item/clothing/under/rank/head_of_personnel - desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." - name = "head of personnel's jumpsuit" - icon_state = "hop" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/head_of_personnel_whimsy - desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does." - name = "head of personnel's suit" - icon_state = "hopwhimsy" - item_state_slots = list(slot_r_hand_str = "hop", slot_l_hand_str = "hop") - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/hydroponics - desc = "It's a jumpsuit designed to protect against minor plant-related hazards." - name = "botanist's jumpsuit" - icon_state = "hydroponics" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - permeability_coefficient = 0.50 - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/hydroponics/alt - icon_state = "hydro" - -/obj/item/clothing/under/rank/internalaffairs - desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched." - name = "Internal Affairs uniform" - icon_state = "internalaffairs" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/tie/black) - -/obj/item/clothing/under/rank/internalaffairs/skirt - desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut." - name = "Internal Affairs skirt" - icon_state = "internalaffairs_skirt" - -/obj/item/clothing/under/rank/janitor - desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." - name = "janitor's jumpsuit" - icon_state = "janitor" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/janitor/alt - name = "janitor's overalls" - icon_state = "janitor_alt" - -/obj/item/clothing/under/lawyer - desc = "Slick threads." - name = "lawyer suit" - -/obj/item/clothing/under/lawyer/black - name = "black lawyer suit" - icon_state = "lawyer_black" - -/obj/item/clothing/under/lawyer/black/skirt - name = "black lawyer skirt" - icon_state = "lawyer_black_skirt" - item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") - -/obj/item/clothing/under/lawyer/female - name = "black lawyer suit" - icon_state = "black_suit_fem" - item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") - -/obj/item/clothing/under/lawyer/red - name = "red lawyer suit" - icon_state = "lawyer_red" - -/obj/item/clothing/under/lawyer/red/skirt - name = "red lawyer skirt" - icon_state = "lawyer_red_skirt" - item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red") - -/obj/item/clothing/under/lawyer/blue - name = "blue lawyer suit" - icon_state = "lawyer_blue" - -/obj/item/clothing/under/lawyer/blue/skirt - name = "blue lawyer skirt" - icon_state = "lawyer_blue_skirt" - item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") - -/obj/item/clothing/under/lawyer/bluesuit - name = "blue suit" - desc = "A classy suit." - icon_state = "bluesuit" - item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") - starting_accessories = list(/obj/item/clothing/accessory/tie/red) - -/obj/item/clothing/under/lawyer/bluesuit/skirt - name = "blue skirt suit" - icon_state = "bluesuit_skirt" - -/obj/item/clothing/under/lawyer/purpsuit - name = "purple suit" - icon_state = "lawyer_purp" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - -/obj/item/clothing/under/lawyer/purpsuit/skirt - name = "purple skirt suit" - icon_state = "lawyer_purp_skirt" - -/obj/item/clothing/under/lawyer/oldman - name = "Old Man's Suit" - desc = "A classic suit for the older gentleman, with built in back support." - icon_state = "oldman" - item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") - -/obj/item/clothing/under/oldwoman - name = "Old Woman's Attire" - desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt." - icon_state = "oldwoman" - item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") - -/obj/item/clothing/under/librarian - name = "sensible suit" - desc = "It's very... sensible." - icon_state = "red_suit" - item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red") - -/obj/item/clothing/under/mime - name = "mime's outfit" - desc = "It's not very colourful." - icon_state = "mime" - -/obj/item/clothing/under/rank/miner - desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty." - name = "shaft miner's jumpsuit" - icon_state = "miner" - rolled_sleeves = 0 +//Alphabetical order of civilian jobs. + +/obj/item/clothing/under/rank/bartender + desc = "It looks like it could use some more flair." + name = "bartender's uniform" + icon_state = "ba_suit" + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/bartender/skirt + desc = "Short and cute." + name = "bartender's skirt" + icon_state = "ba_suit_skirt" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + +/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. + desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Site Manager\"." + name = "site manager's jumpsuit" + icon_state = "captain" + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/cargo + name = "quartermaster's jumpsuit" + desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." + icon_state = "qm" + item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/cargo/jeans + name = "quartermaster's jumpjeans" + desc = "Jeeeaaans! They're comfy!" + icon_state = "qmj" + +/obj/item/clothing/under/rank/cargo/jeans/female + name = "quartermaster's jumpjeans" + desc = "Jeeeaaans! They're comfy!" + icon_state = "qmjf" + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/cargotech + name = "cargo technician's jumpsuit" + desc = "Shooooorts! They're comfy and easy to wear!" + icon_state = "cargo" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/cargotech/jeans + name = "cargo technician's jumpjeans" + desc = "Jeeeaaans! They're comfy!" + icon_state = "cargoj" + item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/cargotech/jeans/female + name = "cargo technician's jumpjeans" + desc = "Jeeeaaans! They're comfy!" + icon_state = "cargojf" + +/obj/item/clothing/under/rank/chaplain + desc = "It's a black jumpsuit, often worn by religious folk." + name = "chaplain's jumpsuit" + icon_state = "chaplain" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/chef + desc = "It's an apron which is given only to the most hardcore chefs in space." + name = "chef's uniform" + icon_state = "chef" + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/chef/alt + desc = "It's an apron which is given only to the chefs that swear the most." + name = "souschef's uniform" + icon_state = "souschef" + +/obj/item/clothing/under/rank/clown + name = "clown suit" + desc = "Honk!" + icon_state = "clown" + rolled_sleeves = -1 + has_sensor = 0 // CHOMPEdit: Fixes sensors issue + +/obj/item/clothing/under/rank/head_of_personnel + desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." + name = "head of personnel's jumpsuit" + icon_state = "hop" + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/head_of_personnel_whimsy + desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does." + name = "head of personnel's suit" + icon_state = "hopwhimsy" + item_state_slots = list(slot_r_hand_str = "hop", slot_l_hand_str = "hop") + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/hydroponics + desc = "It's a jumpsuit designed to protect against minor plant-related hazards." + name = "botanist's jumpsuit" + icon_state = "hydroponics" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + permeability_coefficient = 0.50 + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/hydroponics/alt + icon_state = "hydro" + +/obj/item/clothing/under/rank/internalaffairs + desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched." + name = "Internal Affairs uniform" + icon_state = "internalaffairs" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + starting_accessories = list(/obj/item/clothing/accessory/tie/black) + +/obj/item/clothing/under/rank/internalaffairs/skirt + desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut." + name = "Internal Affairs skirt" + icon_state = "internalaffairs_skirt" + +/obj/item/clothing/under/rank/janitor + desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." + name = "janitor's jumpsuit" + icon_state = "janitor" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/janitor/alt + name = "janitor's overalls" + icon_state = "janitor_alt" + +/obj/item/clothing/under/lawyer + desc = "Slick threads." + name = "lawyer suit" + +/obj/item/clothing/under/lawyer/black + name = "black lawyer suit" + icon_state = "lawyer_black" + +/obj/item/clothing/under/lawyer/black/skirt + name = "black lawyer skirt" + icon_state = "lawyer_black_skirt" + item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") + +/obj/item/clothing/under/lawyer/female + name = "black lawyer suit" + icon_state = "black_suit_fem" + item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") + +/obj/item/clothing/under/lawyer/red + name = "red lawyer suit" + icon_state = "lawyer_red" + +/obj/item/clothing/under/lawyer/red/skirt + name = "red lawyer skirt" + icon_state = "lawyer_red_skirt" + item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red") + +/obj/item/clothing/under/lawyer/blue + name = "blue lawyer suit" + icon_state = "lawyer_blue" + +/obj/item/clothing/under/lawyer/blue/skirt + name = "blue lawyer skirt" + icon_state = "lawyer_blue_skirt" + item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") + +/obj/item/clothing/under/lawyer/bluesuit + name = "blue suit" + desc = "A classy suit." + icon_state = "bluesuit" + item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") + starting_accessories = list(/obj/item/clothing/accessory/tie/red) + +/obj/item/clothing/under/lawyer/bluesuit/skirt + name = "blue skirt suit" + icon_state = "bluesuit_skirt" + +/obj/item/clothing/under/lawyer/purpsuit + name = "purple suit" + icon_state = "lawyer_purp" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + +/obj/item/clothing/under/lawyer/purpsuit/skirt + name = "purple skirt suit" + icon_state = "lawyer_purp_skirt" + +/obj/item/clothing/under/lawyer/oldman + name = "Old Man's Suit" + desc = "A classic suit for the older gentleman, with built in back support." + icon_state = "oldman" + item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") + +/obj/item/clothing/under/oldwoman + name = "Old Woman's Attire" + desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt." + icon_state = "oldwoman" + item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny") + +/obj/item/clothing/under/librarian + name = "sensible suit" + desc = "It's very... sensible." + icon_state = "red_suit" + item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red") + +/obj/item/clothing/under/mime + name = "mime's outfit" + desc = "It's not very colourful." + icon_state = "mime" + +/obj/item/clothing/under/rank/miner + desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty." + name = "shaft miner's jumpsuit" + icon_state = "miner" + rolled_sleeves = 0 diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index f57cc95ce8..a648e1d74e 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -1,33 +1,33 @@ -//Contains: Engineering department jumpsuits -/obj/item/clothing/under/rank/chief_engineer - desc = "It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." - name = "chief engineer's jumpsuit" - icon_state = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/atmospheric_technician - desc = "It's a jumpsuit worn by atmospheric technicians." - name = "atmospheric technician's jumpsuit" - icon_state = "atmos" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/engineer - desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." - name = "engineer's jumpsuit" - icon_state = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/engineer/turtleneck - name = "engineering turtleneck" - desc = "It's a stylish turtleneck with minor radiation shielding. Nobody's going to see it behind the voidsuit, though." - icon_state = "turtle_eng" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/roboticist - desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work." - name = "roboticist's jumpsuit" - icon_state = "robotics" +//Contains: Engineering department jumpsuits +/obj/item/clothing/under/rank/chief_engineer + desc = "It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." + name = "chief engineer's jumpsuit" + icon_state = "chief" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/atmospheric_technician + desc = "It's a jumpsuit worn by atmospheric technicians." + name = "atmospheric technician's jumpsuit" + icon_state = "atmos" + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/engineer + desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." + name = "engineer's jumpsuit" + icon_state = "engine" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/engineer/turtleneck + name = "engineering turtleneck" + desc = "It's a stylish turtleneck with minor radiation shielding. Nobody's going to see it behind the voidsuit, though." + icon_state = "turtle_eng" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/roboticist + desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work." + name = "roboticist's jumpsuit" + icon_state = "robotics" rolled_sleeves = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 013e3d917f..00b0ed43f9 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -1,254 +1,254 @@ -/* - * Science - */ -/obj/item/clothing/under/rank/research_director - desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." - name = "research director's jumpsuit" - icon_state = "director" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/research_director/rdalt - desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication." - name = "head researcher uniform" - icon_state = "rdalt" - item_state_slots = list(slot_r_hand_str = "director", slot_l_hand_str = "director") - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/research_director/dress_rd - name = "research director dress uniform" - desc = "Feminine fashion for the style conscious RD. Its fabric provides minor protection from biological contaminants." - icon_state = "dress_rd" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/rank/scientist - desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." - name = "scientist's jumpsuit" - icon_state = "science" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/scientist/turtleneck - name = "science turtleneck" - desc = "It's a stylish turtleneck weaved with an explosive-resistant, comfortable mesh. You don't have to look like a dork to be a dork." - icon_state = "turtle_sci" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/chemist - desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it." - name = "chemist's jumpsuit" - icon_state = "chemistry" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/* - * Medical - */ -/obj/item/clothing/under/rank/chief_medical_officer - desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." - name = "chief medical officer's jumpsuit" - icon_state = "cmo" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/geneticist - desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." - name = "geneticist's jumpsuit" - icon_state = "genetics" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/virologist - desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." - name = "virologist's jumpsuit" - icon_state = "virology" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/nursesuit - desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." - name = "nurse's suit" - icon_state = "nursesuit" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/nurse - desc = "A dress commonly worn by the nursing staff in the medical department." - name = "nurse's dress" - icon_state = "nurse" - item_state_slots = list(slot_r_hand_str = "nursesuit", slot_l_hand_str = "nursesuit") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/orderly - desc = "A white suit to be worn by medical attendants." - name = "orderly's uniform" - icon_state = "orderly" - item_state_slots = list(slot_r_hand_str = "nursesuit", slot_l_hand_str = "nursesuit") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/medical - desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." - name = "medical doctor's jumpsuit" - icon_state = "medical" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/medical/turtleneck - name = "medical turtleneck" - desc = "It's a stylish turtleneck made of bioresistant fiber. Look good, save lives- what more could you want?" - icon_state = "turtle_med" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/medical/paramedic - name = "paramedic uniform" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is the color scheme that designates a rapid first responder." - icon_state = "paramedic" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/medical/paramedic_alt - name = "short sleeve medical jumpsuit" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel." - icon_state = "medical_short" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/medical/scrubs - name = "blue scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." - icon_state = "scrubsblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/under/rank/medical/scrubs/green - name = "green scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." - icon_state = "scrubsgreen" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - -/obj/item/clothing/under/rank/medical/scrubs/purple - name = "purple scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." - icon_state = "scrubspurple" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - -/obj/item/clothing/under/rank/medical/scrubs/black - name = "black scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black." - icon_state = "scrubsblack" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - -/obj/item/clothing/under/rank/medical/scrubs/navyblue - name = "navy blue scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue." - icon_state = "scrubsnavyblue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/under/rank/medical/scrubs/white - name = "scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards" - icon_state = "scrubs" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - -/obj/item/clothing/under/rank/paramedunidark - name = "dark paramedic uniform" - desc = "A dark jumpsuit for those brave souls who have to deal with a CMO who thinks they're the do everything person." - icon_state = "paramedicdark" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/parameduniskirtdark - name = "dark paramedic uniskirt" - desc = "A dark jumpskirt for those brave souls who have to deal with a CMO who thinks they're the do everything person." - icon_state = "paramedicdark_skirt" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/paramedunilight - name = "light paramedic uniform" - desc = "A light jumpsuit for those brave souls who have to deal with a CMO who thinks they're the do everything person." - icon_state = "paramediclight" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/parameduniskirtlight - name = "light paramedic uniskirt" - desc = "A light jumpskirt for those brave souls who have to deal with a CMO who thinks they're the do everything person." - icon_state = "paramediclight_skirt" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/psych - desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." - name = "psychiatrist's jumpsuit" - icon_state = "psych" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - -/obj/item/clothing/under/rank/psych/turtleneck - desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist." - name = "psychologist's turtleneck" - icon_state = "psychturtle" - item_state_slots = list(slot_r_hand_str = "psyche", slot_l_hand_str = "psyche") - rolled_sleeves = 0 -/* - * Medsci, unused (i think) stuff - */ -/obj/item/clothing/under/rank/geneticist_new - desc = "It's made of a special fiber which provides minor protection against biohazards." - name = "geneticist's jumpsuit" - icon_state = "genetics_new" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/chemist_new - desc = "It's made of a special fiber which provides minor protection against biohazards." - name = "chemist's jumpsuit" - icon_state = "chemist_new" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/scientist_new - desc = "Made of a special fiber that gives special protection against biohazards and small explosions." - name = "scientist's jumpsuit" - icon_state = "scientist_new" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/virologist_new - desc = "Made of a special fiber that gives increased protection against biohazards." - name = "virologist's jumpsuit" - icon_state = "virologist_new" - item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - rolled_sleeves = 0 +/* + * Science + */ +/obj/item/clothing/under/rank/research_director + desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." + name = "research director's jumpsuit" + icon_state = "director" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/research_director/rdalt + desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication." + name = "head researcher uniform" + icon_state = "rdalt" + item_state_slots = list(slot_r_hand_str = "director", slot_l_hand_str = "director") + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/research_director/dress_rd + name = "research director dress uniform" + desc = "Feminine fashion for the style conscious RD. Its fabric provides minor protection from biological contaminants." + icon_state = "dress_rd" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +/obj/item/clothing/under/rank/scientist + desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." + name = "scientist's jumpsuit" + icon_state = "science" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/scientist/turtleneck + name = "science turtleneck" + desc = "It's a stylish turtleneck weaved with an explosive-resistant, comfortable mesh. You don't have to look like a dork to be a dork." + icon_state = "turtle_sci" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/chemist + desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it." + name = "chemist's jumpsuit" + icon_state = "chemistry" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/* + * Medical + */ +/obj/item/clothing/under/rank/chief_medical_officer + desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." + name = "chief medical officer's jumpsuit" + icon_state = "cmo" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/geneticist + desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." + name = "geneticist's jumpsuit" + icon_state = "genetics" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/virologist + desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." + name = "virologist's jumpsuit" + icon_state = "virology" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/nursesuit + desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." + name = "nurse's suit" + icon_state = "nursesuit" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/nurse + desc = "A dress commonly worn by the nursing staff in the medical department." + name = "nurse's dress" + icon_state = "nurse" + item_state_slots = list(slot_r_hand_str = "nursesuit", slot_l_hand_str = "nursesuit") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/orderly + desc = "A white suit to be worn by medical attendants." + name = "orderly's uniform" + icon_state = "orderly" + item_state_slots = list(slot_r_hand_str = "nursesuit", slot_l_hand_str = "nursesuit") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/medical + desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." + name = "medical doctor's jumpsuit" + icon_state = "medical" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/medical/turtleneck + name = "medical turtleneck" + desc = "It's a stylish turtleneck made of bioresistant fiber. Look good, save lives- what more could you want?" + icon_state = "turtle_med" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/medical/paramedic + name = "paramedic uniform" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is the color scheme that designates a rapid first responder." + icon_state = "paramedic" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/medical/paramedic_alt + name = "short sleeve medical jumpsuit" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel." + icon_state = "medical_short" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/medical/scrubs + name = "blue scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." + icon_state = "scrubsblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/under/rank/medical/scrubs/green + name = "green scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." + icon_state = "scrubsgreen" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + +/obj/item/clothing/under/rank/medical/scrubs/purple + name = "purple scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." + icon_state = "scrubspurple" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + +/obj/item/clothing/under/rank/medical/scrubs/black + name = "black scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black." + icon_state = "scrubsblack" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + +/obj/item/clothing/under/rank/medical/scrubs/navyblue + name = "navy blue scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue." + icon_state = "scrubsnavyblue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/under/rank/medical/scrubs/white + name = "scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards" + icon_state = "scrubs" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + +/obj/item/clothing/under/rank/paramedunidark + name = "dark paramedic uniform" + desc = "A dark jumpsuit for those brave souls who have to deal with a CMO who thinks they're the do everything person." + icon_state = "paramedicdark" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/parameduniskirtdark + name = "dark paramedic uniskirt" + desc = "A dark jumpskirt for those brave souls who have to deal with a CMO who thinks they're the do everything person." + icon_state = "paramedicdark_skirt" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/paramedunilight + name = "light paramedic uniform" + desc = "A light jumpsuit for those brave souls who have to deal with a CMO who thinks they're the do everything person." + icon_state = "paramediclight" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/parameduniskirtlight + name = "light paramedic uniskirt" + desc = "A light jumpskirt for those brave souls who have to deal with a CMO who thinks they're the do everything person." + icon_state = "paramediclight_skirt" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/psych + desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." + name = "psychiatrist's jumpsuit" + icon_state = "psych" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + +/obj/item/clothing/under/rank/psych/turtleneck + desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist." + name = "psychologist's turtleneck" + icon_state = "psychturtle" + item_state_slots = list(slot_r_hand_str = "psyche", slot_l_hand_str = "psyche") + rolled_sleeves = 0 +/* + * Medsci, unused (i think) stuff + */ +/obj/item/clothing/under/rank/geneticist_new + desc = "It's made of a special fiber which provides minor protection against biohazards." + name = "geneticist's jumpsuit" + icon_state = "genetics_new" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/chemist_new + desc = "It's made of a special fiber which provides minor protection against biohazards." + name = "chemist's jumpsuit" + icon_state = "chemist_new" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/scientist_new + desc = "Made of a special fiber that gives special protection against biohazards and small explosions." + name = "scientist's jumpsuit" + icon_state = "scientist_new" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/virologist_new + desc = "Made of a special fiber that gives increased protection against biohazards." + name = "virologist's jumpsuit" + icon_state = "virologist_new" + item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + rolled_sleeves = 0 diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index aee4a32166..ebd8b03097 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -1,218 +1,218 @@ -/* - * Contains: - * Security - * Detective - * Head of Security - */ - -/* - * Security - */ -/obj/item/clothing/under/rank/warden - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the word \"Warden\" written on the shoulders." - name = "warden's jumpsuit" - icon_state = "warden" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/security - name = "security officer's jumpsuit" - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." - icon_state = "security" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/security/modern - name = "modernized security officer's jumpsuit" - desc = "A recent redesign of the classic Security jumpsuit, featuring sturdy materials, joint padding, one giant zipper, and tight-fitting synthleather." - icon_state = "securitymodern" - item_state = "securitymodern" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - rolled_sleeves = -1 - worn_state = "securitymodern" - icon = 'icons/inventory/uniform/item.dmi' - default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi' - -/obj/item/clothing/under/rank/security/turtleneck - name = "security turtleneck" - desc = "It's a stylish turtleneck made of a robust nanoweave. Nobody said the Law couldn't be fashionable." - icon_state = "turtle_sec" - rolled_down = -1 - rolled_sleeves = -1 - -/obj/item/clothing/under/rank/dispatch - name = "dispatcher's uniform" - desc = "A dress shirt and khakis with a security patch sewn on." - icon_state = "dispatch" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - siemens_coefficient = 0.9 - -/obj/item/clothing/under/rank/security2 - name = "security officer's uniform" - desc = "It's made of a slightly sturdier material, to allow for robust protection." - icon_state = "redshirt2" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/security/corp - icon_state = "sec_corporate" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/warden/corp - icon_state = "warden_corporate" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - rolled_sleeves = 0 - -/obj/item/clothing/under/tactical - name = "tactical jumpsuit" - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." - icon_state = "swatunder" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 //CHOMPEdit - rolled_down = 0 //CHOMPEdit - -/* - * Detective - */ -/obj/item/clothing/under/det - name = "detective's suit" - desc = "A rumpled white dress shirt paired with well-worn grey slacks." - icon_state = "detective" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip) - -/* -/obj/item/clothing/under/det/verb/rollup() - set name = "Roll Suit Sleeves" - set category = "Object" - set src in usr - var/unrolled = item_state_slots[slot_w_uniform_str] == initial(worn_state) - item_state_slots[slot_w_uniform_str] = unrolled ? "[worn_state]_r" : initial(worn_state) - var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform(1) - to_chat(H, "You roll the sleeves of your shirt [unrolled ? "up" : "down"]") -*/ - -/obj/item/clothing/under/det/grey - icon_state = "detective2" - desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks." - starting_accessories = list(/obj/item/clothing/accessory/tie/red_long) - -/obj/item/clothing/under/det/black - icon_state = "detective3" - item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit") - desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest." - starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/vest) - -/obj/item/clothing/under/det/corporate - name = "detective's jumpsuit" - icon_state = "det_corporate" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - desc = "A more modern uniform for corporate investigators." - -/obj/item/clothing/under/det/waistcoat - icon_state = "detective" - desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat." - starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip, /obj/item/clothing/accessory/wcoat) - -/obj/item/clothing/under/det/grey/waistcoat - icon_state = "detective2" - desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat." - starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat) - -/obj/item/clothing/under/det/black/waistcoat - icon_state = "detective3" - desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, a red tie, and a charcoal vest." - starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat) - -/obj/item/clothing/under/det/skirt - name = "detective's skirt" - icon_state = "detective_skirt" - desc = "A serious-looking white blouse paired with a formal black pencil skirt." - item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit") - -/* - * Head of Security - */ -/obj/item/clothing/under/rank/head_of_security - desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." - name = "head of security's jumpsuit" - icon_state = "hos" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/head_of_security/corp - icon_state = "hos_corporate" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - rolled_sleeves = 0 - -//Jensen cosplay gear -/obj/item/clothing/under/rank/head_of_security/jensen - desc = "You never asked for anything that stylish." - name = "head of security's jumpsuit" - icon_state = "jensen" - rolled_sleeves = -1 - -/* - * Navy uniforms - */ -/obj/item/clothing/under/rank/security/navyblue - name = "security officer's uniform" - desc = "The latest in fashionable security outfits." - icon_state = "officerblueclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/head_of_security/navyblue - desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security." - name = "head of security's uniform" - icon_state = "hosblueclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/warden/navyblue - desc = "The insignia on this uniform tells you that this uniform belongs to the Warden." - name = "warden's uniform" - icon_state = "wardenblueclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - -/* - * Tan uniforms - */ -/obj/item/clothing/under/rank/security/tan - name = "security officer's uniform" - desc = "The latest in fashionable security outfits." - icon_state = "officertanclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/head_of_security/tan - desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security." - name = "head of security's uniform" - icon_state = "hostanclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/warden/tan - desc = "The insignia on this uniform tells you that this uniform belongs to the Warden." - name = "warden's uniform" - icon_state = "wardentanclothes" - item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") - rolled_sleeves = 0 - +/* + * Contains: + * Security + * Detective + * Head of Security + */ + +/* + * Security + */ +/obj/item/clothing/under/rank/warden + desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the word \"Warden\" written on the shoulders." + name = "warden's jumpsuit" + icon_state = "warden" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/security + name = "security officer's jumpsuit" + desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." + icon_state = "security" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/security/modern + name = "modernized security officer's jumpsuit" + desc = "A recent redesign of the classic Security jumpsuit, featuring sturdy materials, joint padding, one giant zipper, and tight-fitting synthleather." + icon_state = "securitymodern" + item_state = "securitymodern" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + rolled_sleeves = -1 + worn_state = "securitymodern" + icon = 'icons/inventory/uniform/item.dmi' + default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi' + +/obj/item/clothing/under/rank/security/turtleneck + name = "security turtleneck" + desc = "It's a stylish turtleneck made of a robust nanoweave. Nobody said the Law couldn't be fashionable." + icon_state = "turtle_sec" + rolled_down = -1 + rolled_sleeves = -1 + +/obj/item/clothing/under/rank/dispatch + name = "dispatcher's uniform" + desc = "A dress shirt and khakis with a security patch sewn on." + icon_state = "dispatch" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS + siemens_coefficient = 0.9 + +/obj/item/clothing/under/rank/security2 + name = "security officer's uniform" + desc = "It's made of a slightly sturdier material, to allow for robust protection." + icon_state = "redshirt2" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/security/corp + icon_state = "sec_corporate" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/warden/corp + icon_state = "warden_corporate" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + rolled_sleeves = 0 + +/obj/item/clothing/under/tactical + name = "tactical jumpsuit" + desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." + icon_state = "swatunder" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 //CHOMPEdit + rolled_down = 0 //CHOMPEdit + +/* + * Detective + */ +/obj/item/clothing/under/det + name = "detective's suit" + desc = "A rumpled white dress shirt paired with well-worn grey slacks." + icon_state = "detective" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip) + +/* +/obj/item/clothing/under/det/verb/rollup() + set name = "Roll Suit Sleeves" + set category = "Object" + set src in usr + var/unrolled = item_state_slots[slot_w_uniform_str] == initial(worn_state) + item_state_slots[slot_w_uniform_str] = unrolled ? "[worn_state]_r" : initial(worn_state) + var/mob/living/carbon/human/H = loc + H.update_inv_w_uniform(1) + to_chat(H, "You roll the sleeves of your shirt [unrolled ? "up" : "down"]") +*/ + +/obj/item/clothing/under/det/grey + icon_state = "detective2" + desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks." + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long) + +/obj/item/clothing/under/det/black + icon_state = "detective3" + item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit") + desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest." + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/vest) + +/obj/item/clothing/under/det/corporate + name = "detective's jumpsuit" + icon_state = "det_corporate" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + desc = "A more modern uniform for corporate investigators." + +/obj/item/clothing/under/det/waistcoat + icon_state = "detective" + desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat." + starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip, /obj/item/clothing/accessory/wcoat) + +/obj/item/clothing/under/det/grey/waistcoat + icon_state = "detective2" + desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat." + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat) + +/obj/item/clothing/under/det/black/waistcoat + icon_state = "detective3" + desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, a red tie, and a charcoal vest." + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat) + +/obj/item/clothing/under/det/skirt + name = "detective's skirt" + icon_state = "detective_skirt" + desc = "A serious-looking white blouse paired with a formal black pencil skirt." + item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit") + +/* + * Head of Security + */ +/obj/item/clothing/under/rank/head_of_security + desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." + name = "head of security's jumpsuit" + icon_state = "hos" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/head_of_security/corp + icon_state = "hos_corporate" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + rolled_sleeves = 0 + +//Jensen cosplay gear +/obj/item/clothing/under/rank/head_of_security/jensen + desc = "You never asked for anything that stylish." + name = "head of security's jumpsuit" + icon_state = "jensen" + rolled_sleeves = -1 + +/* + * Navy uniforms + */ +/obj/item/clothing/under/rank/security/navyblue + name = "security officer's uniform" + desc = "The latest in fashionable security outfits." + icon_state = "officerblueclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/head_of_security/navyblue + desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security." + name = "head of security's uniform" + icon_state = "hosblueclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/warden/navyblue + desc = "The insignia on this uniform tells you that this uniform belongs to the Warden." + name = "warden's uniform" + icon_state = "wardenblueclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + +/* + * Tan uniforms + */ +/obj/item/clothing/under/rank/security/tan + name = "security officer's uniform" + desc = "The latest in fashionable security outfits." + icon_state = "officertanclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/head_of_security/tan + desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security." + name = "head of security's uniform" + icon_state = "hostanclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + +/obj/item/clothing/under/rank/warden/tan + desc = "The insignia on this uniform tells you that this uniform belongs to the Warden." + name = "warden's uniform" + icon_state = "wardentanclothes" + item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") + rolled_sleeves = 0 + diff --git a/code/modules/clothing/under/miscellaneous_ch.dm b/code/modules/clothing/under/miscellaneous_ch.dm index 70117f15f4..be3baa336a 100644 --- a/code/modules/clothing/under/miscellaneous_ch.dm +++ b/code/modules/clothing/under/miscellaneous_ch.dm @@ -1,31 +1,31 @@ -/obj/item/clothing/under/sexybunny_white - name = "Bunny girl suit" - desc = "this seems to come with extra padding, exaggerating the chest some." - icon = 'icons/inventory/uniform/item_ch.dmi' - icon_override = 'icons/inventory/uniform/mob_ch.dmi' - icon_state = "sexybunny_white" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - -/obj/item/clothing/under/sexybunny_white/sexybunny_black - icon_state = "sexybunny_black" - -/obj/item/clothing/under/cohesion - permeability_coefficient = 0 //Should have this anyway - -/obj/item/clothing/under/cohesion/striped/testpartial //testing better coverage. - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/under/cohesion/striped/testfull //testing both, but with full coverage. - body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -// SKINSUITS // - -/obj/item/clothing/under/skinsuit/gray/short - name = "short gray skinsuit" - icon = 'icons/inventory/uniform/item_ch.dmi' - icon_state = "skinsuit_handless_g" - -/obj/item/clothing/under/skinsuit/fem/gray/short - name = "feminine short gray skinsuit" - icon = 'icons/inventory/uniform/item_ch.dmi' +/obj/item/clothing/under/sexybunny_white + name = "Bunny girl suit" + desc = "this seems to come with extra padding, exaggerating the chest some." + icon = 'icons/inventory/uniform/item_ch.dmi' + icon_override = 'icons/inventory/uniform/mob_ch.dmi' + icon_state = "sexybunny_white" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + +/obj/item/clothing/under/sexybunny_white/sexybunny_black + icon_state = "sexybunny_black" + +/obj/item/clothing/under/cohesion + permeability_coefficient = 0 //Should have this anyway + +/obj/item/clothing/under/cohesion/striped/testpartial //testing better coverage. + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + +/obj/item/clothing/under/cohesion/striped/testfull //testing both, but with full coverage. + body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + +// SKINSUITS // + +/obj/item/clothing/under/skinsuit/gray/short + name = "short gray skinsuit" + icon = 'icons/inventory/uniform/item_ch.dmi' + icon_state = "skinsuit_handless_g" + +/obj/item/clothing/under/skinsuit/fem/gray/short + name = "feminine short gray skinsuit" + icon = 'icons/inventory/uniform/item_ch.dmi' icon_state = "skinsuitfem_handless_g" \ No newline at end of file diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 18622cb4d8..b2289e70eb 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -1,247 +1,247 @@ -//these need item states -S2- -/obj/item/clothing/under/shorts - name = "athletic shorts" - desc = "95% Polyester, 5% Spandex!" - icon_state = "redshorts" // Hackyfix for icon states until someone wants to come do a recolor later. - gender = PLURAL - body_parts_covered = LOWER_TORSO - -/obj/item/clothing/under/shorts/red - name = "red athletic shorts" - icon_state = "redshorts" - -/obj/item/clothing/under/shorts/green - name = "green athletic shorts" - icon_state = "greenshorts" - -/obj/item/clothing/under/shorts/blue - name = "blue athletic shorts" - icon_state = "blueshorts" - -/obj/item/clothing/under/shorts/black - name = "black athletic shorts" - icon_state = "blackshorts" - -/obj/item/clothing/under/shorts/grey - name = "grey athletic shorts" - icon_state = "greyshorts" - -/obj/item/clothing/under/shorts/white - name = "white shorts" - icon_state = "whiteshorts" - -/obj/item/clothing/under/shorts/white/female - name = "white short shorts" - icon_state = "whiteshorts_f" - -/obj/item/clothing/under/shorts/jeans - name = "jeans shorts" - desc = "Some jeans! Just in short form!" - icon_state = "jeans_shorts" - -/obj/item/clothing/under/shorts/jeans/female - name = "jeans short shorts" - icon_state = "jeans_shorts_f" - -/obj/item/clothing/under/shorts/jeans/classic - name = "classic jeans shorts" - icon_state = "jeansclassic_shorts" - -/obj/item/clothing/under/shorts/jeans/classic/female - name = "classic jeans short shorts" - icon_state = "jeansclassic_shorts_f" - -/obj/item/clothing/under/shorts/jeans/mustang - name = "mustang jeans shorts" - icon_state = "jeansmustang_shorts" - -/obj/item/clothing/under/shorts/jeans/mustang/female - name = "mustang jeans short shorts" - icon_state = "jeansmustang_shorts_f" - -/obj/item/clothing/under/shorts/jeans/youngfolks - name = "young folks jeans shorts" - icon_state = "jeansyoungfolks_shorts" - -/obj/item/clothing/under/shorts/jeans/youngfolks/female - name = "young folks jeans short shorts" - icon_state = "jeansyoungfolks_shorts_f" - -/obj/item/clothing/under/shorts/jeans/black - name = "black jeans shorts" - icon_state = "blackpants_shorts" - -/obj/item/clothing/under/shorts/jeans/black/female - name = "black jeans short shorts" - icon_state = "black_shorts_f" - -/obj/item/clothing/under/shorts/black/ripped - name = "black ripped shorts" - icon_state = "black_shorts_ripped" - -/obj/item/clothing/under/shorts/jeans/grey - name = "grey jeans shorts" - icon_state = "greyshorts" - -/obj/item/clothing/under/shorts/jeans/grey/female - name = "grey jeans short shorts" - icon_state = "grey_shorts_f" - -/obj/item/clothing/under/shorts/khaki - name = "khaki shorts" - desc = "For that island getaway. It's five o'clock somewhere, right?" - icon_state = "tanpants_shorts" - -/obj/item/clothing/under/shorts/khaki/female - name = "khaki short shorts" - icon_state = "khaki_shorts_f" - -//Argh, skirts be below this line -> ------------------------------ - -/obj/item/clothing/under/skirt - name = "short black skirt" - desc = "A skirt that is a shiny black." - icon_state = "skirt_short_black" - body_parts_covered = LOWER_TORSO - rolled_sleeves = -1 - -/obj/item/clothing/under/skirt/khaki - name = "khaki skirt" - desc = "A skirt that is a khaki color." - icon_state = "skirt_khaki" - -/obj/item/clothing/under/skirt/blue - name = "short blue skirt" - desc = "A skirt that is a shiny blue." - icon_state = "skirt_short_blue" - -/obj/item/clothing/under/skirt/red - name = "short red skirt" - desc = "A skirt that is a shiny red." - icon_state = "skirt_short_red" - -/obj/item/clothing/under/skirt/denim - name = "short denim skirt" - desc = "A skirt that is made of denim." - icon_state = "skirt_short_denim" - -/obj/item/clothing/under/skirt/swept - name = "swept skirt" - desc = "A skirt that is swept to one side." - icon_state = "skirt_swept" - -/obj/item/clothing/under/skirt/loincloth - name = "loincloth" - desc = "A piece of cloth wrapped around the waist." - icon_state = "loincloth" - -/obj/item/clothing/under/skirt/pleated - name = "pleated skirt" - desc = "A simple pleated skirt. It's like high school all over again." - icon_state = "pleated" - addblends = "pleated_a" - -/obj/item/clothing/under/skirt/outfit - name = "black skirt" - desc = "A black skirt, very fancy!" - icon_state = "blackskirt" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/skirt/outfit/plaid_blue - name = "blue plaid skirt" - desc = "A preppy blue skirt with a white blouse." - icon_state = "plaid_blue" - item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") - -/obj/item/clothing/under/skirt/outfit/plaid_red - name = "red plaid skirt" - desc = "A preppy red skirt with a white blouse." - icon_state = "plaid_red" - item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") - -/obj/item/clothing/under/skirt/outfit/plaid_purple - name = "blue purple skirt" - desc = "A preppy purple skirt with a white blouse." - icon_state = "plaid_purple" - item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") - -/obj/item/clothing/under/rank/cargo/skirt - name = "quartermaster's jumpskirt" - desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." - icon_state = "qmf" - item_state_slots = list(slot_r_hand_str = "qm", slot_l_hand_str = "qm") - -/obj/item/clothing/under/rank/cargotech/skirt - name = "cargo technician's jumpskirt" - desc = "Skirrrrrts! They're comfy and easy to wear!" - icon_state = "cargof" - item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") - -/obj/item/clothing/under/rank/engineer/skirt - desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding." - name = "engineer's jumpskirt" - icon_state = "enginef" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - item_state_slots = list(slot_r_hand_str = "engine", slot_l_hand_str = "engine") - -/obj/item/clothing/under/rank/chief_engineer/skirt - desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." - name = "chief engineer's jumpskirt" - icon_state = "chieff" - item_state_slots = list(slot_r_hand_str = "chiefengineer", slot_l_hand_str = "chiefengineer") - -/obj/item/clothing/under/rank/atmospheric_technician/skirt - desc = "It's a jumpskirt worn by atmospheric technicians." - name = "atmospheric technician's jumpskirt" - icon_state = "atmosf" - item_state_slots = list(slot_r_hand_str = "atmos", slot_l_hand_str = "atmos") - -/obj/item/clothing/under/rank/roboticist/skirt - desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." - name = "roboticist's jumpskirt" - icon_state = "roboticsf" - item_state_slots = list(slot_r_hand_str = "robotics", slot_l_hand_str = "robotics") - -/obj/item/clothing/under/rank/scientist/skirt - name = "scientist's jumpskirt" - icon_state = "sciencef" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/medical/skirt - name = "medical doctor's jumpskirt" - icon_state = "medicalf" - -/obj/item/clothing/under/rank/chemist/skirt - name = "chemist's jumpskirt" - icon_state = "chemistryf" - -/obj/item/clothing/under/rank/chief_medical_officer/skirt - desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." - name = "chief medical officer's jumpskirt" - icon_state = "cmof" - -/obj/item/clothing/under/rank/geneticist/skirt - name = "geneticist's jumpskirt" - icon_state = "geneticsf" - -/obj/item/clothing/under/rank/virologist/skirt - name = "virologist's jumpskirt" - icon_state = "virologyf" - -/obj/item/clothing/under/rank/security/skirt - name = "security officer's jumpskirt" - desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." - icon_state = "securityf" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/rank/warden/skirt - desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." - name = "warden's jumpskirt" - icon_state = "wardenf" - -/obj/item/clothing/under/rank/head_of_security/skirt - desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." - name = "head of security's jumpskirt" - icon_state = "hosf" +//these need item states -S2- +/obj/item/clothing/under/shorts + name = "athletic shorts" + desc = "95% Polyester, 5% Spandex!" + icon_state = "redshorts" // Hackyfix for icon states until someone wants to come do a recolor later. + gender = PLURAL + body_parts_covered = LOWER_TORSO + +/obj/item/clothing/under/shorts/red + name = "red athletic shorts" + icon_state = "redshorts" + +/obj/item/clothing/under/shorts/green + name = "green athletic shorts" + icon_state = "greenshorts" + +/obj/item/clothing/under/shorts/blue + name = "blue athletic shorts" + icon_state = "blueshorts" + +/obj/item/clothing/under/shorts/black + name = "black athletic shorts" + icon_state = "blackshorts" + +/obj/item/clothing/under/shorts/grey + name = "grey athletic shorts" + icon_state = "greyshorts" + +/obj/item/clothing/under/shorts/white + name = "white shorts" + icon_state = "whiteshorts" + +/obj/item/clothing/under/shorts/white/female + name = "white short shorts" + icon_state = "whiteshorts_f" + +/obj/item/clothing/under/shorts/jeans + name = "jeans shorts" + desc = "Some jeans! Just in short form!" + icon_state = "jeans_shorts" + +/obj/item/clothing/under/shorts/jeans/female + name = "jeans short shorts" + icon_state = "jeans_shorts_f" + +/obj/item/clothing/under/shorts/jeans/classic + name = "classic jeans shorts" + icon_state = "jeansclassic_shorts" + +/obj/item/clothing/under/shorts/jeans/classic/female + name = "classic jeans short shorts" + icon_state = "jeansclassic_shorts_f" + +/obj/item/clothing/under/shorts/jeans/mustang + name = "mustang jeans shorts" + icon_state = "jeansmustang_shorts" + +/obj/item/clothing/under/shorts/jeans/mustang/female + name = "mustang jeans short shorts" + icon_state = "jeansmustang_shorts_f" + +/obj/item/clothing/under/shorts/jeans/youngfolks + name = "young folks jeans shorts" + icon_state = "jeansyoungfolks_shorts" + +/obj/item/clothing/under/shorts/jeans/youngfolks/female + name = "young folks jeans short shorts" + icon_state = "jeansyoungfolks_shorts_f" + +/obj/item/clothing/under/shorts/jeans/black + name = "black jeans shorts" + icon_state = "blackpants_shorts" + +/obj/item/clothing/under/shorts/jeans/black/female + name = "black jeans short shorts" + icon_state = "black_shorts_f" + +/obj/item/clothing/under/shorts/black/ripped + name = "black ripped shorts" + icon_state = "black_shorts_ripped" + +/obj/item/clothing/under/shorts/jeans/grey + name = "grey jeans shorts" + icon_state = "greyshorts" + +/obj/item/clothing/under/shorts/jeans/grey/female + name = "grey jeans short shorts" + icon_state = "grey_shorts_f" + +/obj/item/clothing/under/shorts/khaki + name = "khaki shorts" + desc = "For that island getaway. It's five o'clock somewhere, right?" + icon_state = "tanpants_shorts" + +/obj/item/clothing/under/shorts/khaki/female + name = "khaki short shorts" + icon_state = "khaki_shorts_f" + +//Argh, skirts be below this line -> ------------------------------ + +/obj/item/clothing/under/skirt + name = "short black skirt" + desc = "A skirt that is a shiny black." + icon_state = "skirt_short_black" + body_parts_covered = LOWER_TORSO + rolled_sleeves = -1 + +/obj/item/clothing/under/skirt/khaki + name = "khaki skirt" + desc = "A skirt that is a khaki color." + icon_state = "skirt_khaki" + +/obj/item/clothing/under/skirt/blue + name = "short blue skirt" + desc = "A skirt that is a shiny blue." + icon_state = "skirt_short_blue" + +/obj/item/clothing/under/skirt/red + name = "short red skirt" + desc = "A skirt that is a shiny red." + icon_state = "skirt_short_red" + +/obj/item/clothing/under/skirt/denim + name = "short denim skirt" + desc = "A skirt that is made of denim." + icon_state = "skirt_short_denim" + +/obj/item/clothing/under/skirt/swept + name = "swept skirt" + desc = "A skirt that is swept to one side." + icon_state = "skirt_swept" + +/obj/item/clothing/under/skirt/loincloth + name = "loincloth" + desc = "A piece of cloth wrapped around the waist." + icon_state = "loincloth" + +/obj/item/clothing/under/skirt/pleated + name = "pleated skirt" + desc = "A simple pleated skirt. It's like high school all over again." + icon_state = "pleated" + addblends = "pleated_a" + +/obj/item/clothing/under/skirt/outfit + name = "black skirt" + desc = "A black skirt, very fancy!" + icon_state = "blackskirt" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +/obj/item/clothing/under/skirt/outfit/plaid_blue + name = "blue plaid skirt" + desc = "A preppy blue skirt with a white blouse." + icon_state = "plaid_blue" + item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") + +/obj/item/clothing/under/skirt/outfit/plaid_red + name = "red plaid skirt" + desc = "A preppy red skirt with a white blouse." + icon_state = "plaid_red" + item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red") + +/obj/item/clothing/under/skirt/outfit/plaid_purple + name = "blue purple skirt" + desc = "A preppy purple skirt with a white blouse." + icon_state = "plaid_purple" + item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple") + +/obj/item/clothing/under/rank/cargo/skirt + name = "quartermaster's jumpskirt" + desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." + icon_state = "qmf" + item_state_slots = list(slot_r_hand_str = "qm", slot_l_hand_str = "qm") + +/obj/item/clothing/under/rank/cargotech/skirt + name = "cargo technician's jumpskirt" + desc = "Skirrrrrts! They're comfy and easy to wear!" + icon_state = "cargof" + item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") + +/obj/item/clothing/under/rank/engineer/skirt + desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding." + name = "engineer's jumpskirt" + icon_state = "enginef" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + item_state_slots = list(slot_r_hand_str = "engine", slot_l_hand_str = "engine") + +/obj/item/clothing/under/rank/chief_engineer/skirt + desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." + name = "chief engineer's jumpskirt" + icon_state = "chieff" + item_state_slots = list(slot_r_hand_str = "chiefengineer", slot_l_hand_str = "chiefengineer") + +/obj/item/clothing/under/rank/atmospheric_technician/skirt + desc = "It's a jumpskirt worn by atmospheric technicians." + name = "atmospheric technician's jumpskirt" + icon_state = "atmosf" + item_state_slots = list(slot_r_hand_str = "atmos", slot_l_hand_str = "atmos") + +/obj/item/clothing/under/rank/roboticist/skirt + desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." + name = "roboticist's jumpskirt" + icon_state = "roboticsf" + item_state_slots = list(slot_r_hand_str = "robotics", slot_l_hand_str = "robotics") + +/obj/item/clothing/under/rank/scientist/skirt + name = "scientist's jumpskirt" + icon_state = "sciencef" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/medical/skirt + name = "medical doctor's jumpskirt" + icon_state = "medicalf" + +/obj/item/clothing/under/rank/chemist/skirt + name = "chemist's jumpskirt" + icon_state = "chemistryf" + +/obj/item/clothing/under/rank/chief_medical_officer/skirt + desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." + name = "chief medical officer's jumpskirt" + icon_state = "cmof" + +/obj/item/clothing/under/rank/geneticist/skirt + name = "geneticist's jumpskirt" + icon_state = "geneticsf" + +/obj/item/clothing/under/rank/virologist/skirt + name = "virologist's jumpskirt" + icon_state = "virologyf" + +/obj/item/clothing/under/rank/security/skirt + name = "security officer's jumpskirt" + desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." + icon_state = "securityf" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/under/rank/warden/skirt + desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." + name = "warden's jumpskirt" + icon_state = "wardenf" + +/obj/item/clothing/under/rank/head_of_security/skirt + desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." + name = "head of security's jumpskirt" + icon_state = "hosf" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 0560d49e30..171a9dccce 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -1,26 +1,26 @@ -//these need item states -S2- -/obj/item/clothing/under/syndicate //Merc Tactleneck - name = "tactical turtleneck" - desc = "It's some non-descript, slightly suspicious looking, civilian clothing." - icon_state = "syndicate" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/syndicate/combat //ERT tactleneck - name = "combat turtleneck" - desc = "It's some non-descript, slightly suspicious looking, civilian clothing." - icon_state = "combat" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - has_sensor = 1 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/syndicate/tacticool - name = "\improper Tacticool turtleneck" - desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." - icon_state = "tactifool" - item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") - siemens_coefficient = 1 - rolled_sleeves = 0 +//these need item states -S2- +/obj/item/clothing/under/syndicate //Merc Tactleneck + name = "tactical turtleneck" + desc = "It's some non-descript, slightly suspicious looking, civilian clothing." + icon_state = "syndicate" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + has_sensor = 0 + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/under/syndicate/combat //ERT tactleneck + name = "combat turtleneck" + desc = "It's some non-descript, slightly suspicious looking, civilian clothing." + icon_state = "combat" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + has_sensor = 1 + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/under/syndicate/tacticool + name = "\improper Tacticool turtleneck" + desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." + icon_state = "tactifool" + item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black") + siemens_coefficient = 1 + rolled_sleeves = 0 diff --git a/code/modules/economy/coins_vr.dm b/code/modules/economy/coins_vr.dm index 38ae0054cf..6d1ac8351e 100644 --- a/code/modules/economy/coins_vr.dm +++ b/code/modules/economy/coins_vr.dm @@ -1,57 +1,57 @@ -//Weird coins that I would prefer didn't work with normal vending machines. Might use them to make weird vending machines later. - -/obj/item/weapon/aliencoin - icon = 'icons/obj/aliencoins.dmi' - name = "curious coin" - desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. " - icon_state = "triangle" - randpixel = 8 - force = 0.5 - throwforce = 0.5 - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - var/sides = 2 - var/value = 1 - drop_sound = 'sound/items/drop/ring.ogg' - pickup_sound = 'sound/items/pickup/ring.ogg' - -/obj/item/weapon/aliencoin/New() - randpixel_xy() - -/obj/item/weapon/aliencoin/basic - -/obj/item/weapon/aliencoin/gold - name = "curious coin" - icon_state = "triangle-g" - desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a golden material underneath." - value = 10 - -/obj/item/weapon/aliencoin/silver - name = "curious coin" - icon_state = "triangle-s" - desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a silver material underneath." - value = 5 - -/obj/item/weapon/aliencoin/phoron - name = "curious coin" - icon_state = "triangle-p" - desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a purple material underneath." - value = 20 - - -/obj/item/weapon/aliencoin/attack_self(mob/user as mob) - var/result = rand(1, sides) - var/comment = "" - if(result == 1) - comment = "tails" - else if(result == 2) - comment = "heads" - user.visible_message("[user] has thrown [src]. It lands on [comment]! ", runemessage = "[src] landed on [comment]") - if(rand(1,20) == 1) - user.visible_message("[user] fumbled the [src]!", runemessage = "fumbles [src]") - user.remove_from_mob(src) - -/obj/item/weapon/aliencoin/examine(var/mob/user) - . = ..() - if(Adjacent(user)) - . += "It has some writing along its edge that seems to be some language that you are not familiar with. The face of the coin is very smooth, with what appears to be some kind of angular logo along the left side, and a couple of lines of the alien text along the opposite side. The reverse side is similarly smooth, the top of it features what appears to be some kind of vortex, surrounded by six stars, three on either side, with further swirls and intricate patterns along the bottom sections of this face. Looking closely, you can see that there is more text hidden among the swirls." +//Weird coins that I would prefer didn't work with normal vending machines. Might use them to make weird vending machines later. + +/obj/item/weapon/aliencoin + icon = 'icons/obj/aliencoins.dmi' + name = "curious coin" + desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. " + icon_state = "triangle" + randpixel = 8 + force = 0.5 + throwforce = 0.5 + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + var/sides = 2 + var/value = 1 + drop_sound = 'sound/items/drop/ring.ogg' + pickup_sound = 'sound/items/pickup/ring.ogg' + +/obj/item/weapon/aliencoin/New() + randpixel_xy() + +/obj/item/weapon/aliencoin/basic + +/obj/item/weapon/aliencoin/gold + name = "curious coin" + icon_state = "triangle-g" + desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a golden material underneath." + value = 10 + +/obj/item/weapon/aliencoin/silver + name = "curious coin" + icon_state = "triangle-s" + desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a silver material underneath." + value = 5 + +/obj/item/weapon/aliencoin/phoron + name = "curious coin" + icon_state = "triangle-p" + desc = "A curious triangular coin made primarily of some kind of dark, smooth metal. This one's markings appear to reveal a purple material underneath." + value = 20 + + +/obj/item/weapon/aliencoin/attack_self(mob/user as mob) + var/result = rand(1, sides) + var/comment = "" + if(result == 1) + comment = "tails" + else if(result == 2) + comment = "heads" + user.visible_message("[user] has thrown [src]. It lands on [comment]! ", runemessage = "[src] landed on [comment]") + if(rand(1,20) == 1) + user.visible_message("[user] fumbled the [src]!", runemessage = "fumbles [src]") + user.remove_from_mob(src) + +/obj/item/weapon/aliencoin/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += "It has some writing along its edge that seems to be some language that you are not familiar with. The face of the coin is very smooth, with what appears to be some kind of angular logo along the left side, and a couple of lines of the alien text along the opposite side. The reverse side is similarly smooth, the top of it features what appears to be some kind of vortex, surrounded by six stars, three on either side, with further swirls and intricate patterns along the bottom sections of this face. Looking closely, you can see that there is more text hidden among the swirls." diff --git a/code/modules/economy/price_list_ch.dm b/code/modules/economy/price_list_ch.dm index b49a6d98fe..ffb2cbc24f 100644 --- a/code/modules/economy/price_list_ch.dm +++ b/code/modules/economy/price_list_ch.dm @@ -1,2 +1,2 @@ -/datum/reagent/ethanol/snaps +/datum/reagent/ethanol/snaps price_tag = 5 \ No newline at end of file diff --git a/code/modules/eventkit/event_machinery.dm b/code/modules/eventkit/event_machinery.dm index be65102625..87861c7392 100644 --- a/code/modules/eventkit/event_machinery.dm +++ b/code/modules/eventkit/event_machinery.dm @@ -1,3 +1,3 @@ -/obj/machinery/eventkit/custom - name = "Custom Machine" - desc = "A custom machine created by a GM." +/obj/machinery/eventkit/custom + name = "Custom Machine" + desc = "A custom machine created by a GM." diff --git a/code/modules/eventkit/gm_interfaces/mob_spawner.dm b/code/modules/eventkit/gm_interfaces/mob_spawner.dm index ed5a759643..a829cc3221 100644 --- a/code/modules/eventkit/gm_interfaces/mob_spawner.dm +++ b/code/modules/eventkit/gm_interfaces/mob_spawner.dm @@ -1,205 +1,205 @@ -/datum/eventkit/mob_spawner - // The path of the mob to be spawned - var/path - - //The ai type path to be assigned to the mob - var/use_custom_ai = FALSE - var/ai_type = "" - var/faction = "" - var/intent = "" - var/new_path = TRUE //Sets default ai vars based on path. Tracked explicitly because tgui_act wouldn't make it work, used in tgui_data thusly - - // Defines if the location of the spawned mob should be bound of the users position - var/loc_lock = FALSE - -/datum/eventkit/mob_spawner/New() - . = ..() - -/datum/eventkit/mob_spawner/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MobSpawner", "EventKit - Mob Spawner") - ui.set_autoupdate(FALSE) - ui.open() - -/datum/eventkit/mob_spawner/Destroy() - . = ..() - -/datum/eventkit/mob_spawner/tgui_state(mob/user) - return GLOB.tgui_admin_state - -/datum/eventkit/mob_spawner/tgui_static_data(mob/user) - var/list/data = list() - - data["initial_x"] = usr.x; - data["initial_y"] = usr.y; - data["initial_z"] = usr.z; - - - return data - -/datum/eventkit/mob_spawner/tgui_data(mob/user) - var/list/data = list() - - data["loc_lock"] = loc_lock - if(loc_lock) - data["loc_x"] = usr.x - data["loc_y"] = usr.y - data["loc_z"] = usr.z - - data["path"] = path; - data["use_custom_ai"] = use_custom_ai - - - if(path) - var/mob/M = new path() - if(M) - data["default_path_name"] = M.name - data["default_desc"] = M.desc - data["default_flavor_text"] = M.flavor_text - if(new_path && istype(M, /mob/living)) - var/mob/living/L = M - - // AI Stuff - ai_type = (L.ai_holder_type ? L.ai_holder_type : /datum/ai_holder/simple_mob/inert) - faction = (L.faction ? L.faction : "neutral") - intent = (L.a_intent ? L.a_intent : I_HELP) - new_path = FALSE - - data["max_health"] = L.maxHealth - data["health"] = L.health - if(istype(L, /mob/living/simple_mob)) - var/mob/living/simple_mob/S = L - data["melee_damage_lower"] = S.melee_damage_lower ? S.melee_damage_lower : 0 - data["melee_damage_upper"] = S.melee_damage_upper ? S.melee_damage_upper : 0 - qdel(S) - qdel(L) - qdel(M) - data["ai_type"] = ai_type - data["faction"] = faction - data["intent"] = intent - - - return data - -/datum/eventkit/mob_spawner/tgui_act(action, list/params) - . = ..() - if(.) - return - if(!check_rights_for(usr.client, R_SPAWN)) - return - switch(action) - if("select_path") - var/list/choices = typesof(/mob) - var/newPath = tgui_input_list(usr, "Please select the new path of the mob you want to spawn.", items = choices) - - path = newPath - new_path = TRUE - return TRUE - if("toggle_custom_ai") - use_custom_ai = !use_custom_ai - return TRUE - if("set_faction") - faction = sanitize(tgui_input_text(usr, "Please input your mobs' faction", "Faction", (faction ? faction : "neutral"))) - return TRUE - if("set_intent") - intent = tgui_input_list(usr, "Please select preferred intent", "Select Intent", list(I_HELP, I_HURT), (intent ? intent : I_HELP)) - return TRUE - if("set_ai_path") - ai_type = tgui_input_list(usr, "Select AI path. Not all subtypes are compatible!", "AI type", \ - typesof(/datum/ai_holder/), (ai_type ? ai_type : /datum/ai_holder/simple_mob/inert)) - return TRUE - if("loc_lock") - loc_lock = !loc_lock - return TRUE - if("start_spawn") - var/confirm = tgui_alert(usr, "Are you sure that you want to start spawning your custom mobs?", "Confirmation", list("Yes", "Cancel")) - - if(confirm != "Yes") - return FALSE - - var/amount = params["amount"] - var/name = params["name"] - var/x = params["x"] - var/y = params["y"] - var/z = params["z"] - - if(!name) - to_chat(usr, "Name cannot be empty.") - return FALSE - - var/turf/T = locate(x, y, z) - if(!T) - to_chat(usr, "Those coordinates are outside the boundaries of the map.") - return FALSE - - for(var/i = 0, i < amount, i++) - if(ispath(path,/turf)) - var/turf/TU = get_turf(locate(x, y, z)) - TU.ChangeTurf(path) - else - var/mob/M = new path(usr.loc) - - M.name = sanitize(name) - M.desc = sanitize(params["desc"]) - M.flavor_text = sanitize(params["flavor_text"]) - if(istype(M, /mob/living)) - var/mob/living/L = M - if(isnum(params["max_health"])) - L.maxHealth = params["max_health"] - if(isnum(params["health"])) - L.health = params["health"] - if(istype(M, /mob/living/simple_mob)) - var/mob/living/simple_mob/S = L - if(isnum(params["melee_damage_lower"])) - S.melee_damage_lower = params["melee_damage_lower"] - if(isnum(params["melee_damage_upper"])) - S.melee_damage_upper = params["melee_damage_upper"] - if(use_custom_ai) - L.ai_holder_type = ai_type - L.faction = faction - L.a_intent = intent - L.initialize_ai_holder() - L.AdjustSleeping(-100) - else - to_chat(usr, span_notice("You can only set AI for subtypes of mob/living!")) - - - - /* - WIP: Radius around selected coords - - var/list/turf/destTurfs - for(var/turf/RT in orange(T, params["r"])) - destTurfs += RT - - var/turf/targetTurf = rand(0,length(destTurfs)) - */ - - var/size_mul = params["size_multiplier"] - if(isnum(size_mul)) - M.size_multiplier = size_mul - M.update_icon() - else - to_chat(usr, "Size Multiplier not applied: ([size_mul]) is not a valid input.") - - M.forceMove(T) - - log_and_message_admins("spawned [path] ([name]) at ([x],[y],[z]) [amount] times.") - - return TRUE - -/datum/eventkit/mob_spawner/tgui_close(mob/user) - . = ..() - qdel(src) - -/client/proc/eventkit_open_mob_spawner() - set category = "Fun" //ChompEDIT - "EventKit" --> "Fun", less tab spam - set name = "Open Mob Spawner" - set desc = "Opens an advanced version of the mob spawner." - - if(!check_rights(R_SPAWN)) - return - - var/datum/eventkit/mob_spawner/spawner = new() - spawner.tgui_interact(usr) +/datum/eventkit/mob_spawner + // The path of the mob to be spawned + var/path + + //The ai type path to be assigned to the mob + var/use_custom_ai = FALSE + var/ai_type = "" + var/faction = "" + var/intent = "" + var/new_path = TRUE //Sets default ai vars based on path. Tracked explicitly because tgui_act wouldn't make it work, used in tgui_data thusly + + // Defines if the location of the spawned mob should be bound of the users position + var/loc_lock = FALSE + +/datum/eventkit/mob_spawner/New() + . = ..() + +/datum/eventkit/mob_spawner/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MobSpawner", "EventKit - Mob Spawner") + ui.set_autoupdate(FALSE) + ui.open() + +/datum/eventkit/mob_spawner/Destroy() + . = ..() + +/datum/eventkit/mob_spawner/tgui_state(mob/user) + return GLOB.tgui_admin_state + +/datum/eventkit/mob_spawner/tgui_static_data(mob/user) + var/list/data = list() + + data["initial_x"] = usr.x; + data["initial_y"] = usr.y; + data["initial_z"] = usr.z; + + + return data + +/datum/eventkit/mob_spawner/tgui_data(mob/user) + var/list/data = list() + + data["loc_lock"] = loc_lock + if(loc_lock) + data["loc_x"] = usr.x + data["loc_y"] = usr.y + data["loc_z"] = usr.z + + data["path"] = path; + data["use_custom_ai"] = use_custom_ai + + + if(path) + var/mob/M = new path() + if(M) + data["default_path_name"] = M.name + data["default_desc"] = M.desc + data["default_flavor_text"] = M.flavor_text + if(new_path && istype(M, /mob/living)) + var/mob/living/L = M + + // AI Stuff + ai_type = (L.ai_holder_type ? L.ai_holder_type : /datum/ai_holder/simple_mob/inert) + faction = (L.faction ? L.faction : "neutral") + intent = (L.a_intent ? L.a_intent : I_HELP) + new_path = FALSE + + data["max_health"] = L.maxHealth + data["health"] = L.health + if(istype(L, /mob/living/simple_mob)) + var/mob/living/simple_mob/S = L + data["melee_damage_lower"] = S.melee_damage_lower ? S.melee_damage_lower : 0 + data["melee_damage_upper"] = S.melee_damage_upper ? S.melee_damage_upper : 0 + qdel(S) + qdel(L) + qdel(M) + data["ai_type"] = ai_type + data["faction"] = faction + data["intent"] = intent + + + return data + +/datum/eventkit/mob_spawner/tgui_act(action, list/params) + . = ..() + if(.) + return + if(!check_rights_for(usr.client, R_SPAWN)) + return + switch(action) + if("select_path") + var/list/choices = typesof(/mob) + var/newPath = tgui_input_list(usr, "Please select the new path of the mob you want to spawn.", items = choices) + + path = newPath + new_path = TRUE + return TRUE + if("toggle_custom_ai") + use_custom_ai = !use_custom_ai + return TRUE + if("set_faction") + faction = sanitize(tgui_input_text(usr, "Please input your mobs' faction", "Faction", (faction ? faction : "neutral"))) + return TRUE + if("set_intent") + intent = tgui_input_list(usr, "Please select preferred intent", "Select Intent", list(I_HELP, I_HURT), (intent ? intent : I_HELP)) + return TRUE + if("set_ai_path") + ai_type = tgui_input_list(usr, "Select AI path. Not all subtypes are compatible!", "AI type", \ + typesof(/datum/ai_holder/), (ai_type ? ai_type : /datum/ai_holder/simple_mob/inert)) + return TRUE + if("loc_lock") + loc_lock = !loc_lock + return TRUE + if("start_spawn") + var/confirm = tgui_alert(usr, "Are you sure that you want to start spawning your custom mobs?", "Confirmation", list("Yes", "Cancel")) + + if(confirm != "Yes") + return FALSE + + var/amount = params["amount"] + var/name = params["name"] + var/x = params["x"] + var/y = params["y"] + var/z = params["z"] + + if(!name) + to_chat(usr, "Name cannot be empty.") + return FALSE + + var/turf/T = locate(x, y, z) + if(!T) + to_chat(usr, "Those coordinates are outside the boundaries of the map.") + return FALSE + + for(var/i = 0, i < amount, i++) + if(ispath(path,/turf)) + var/turf/TU = get_turf(locate(x, y, z)) + TU.ChangeTurf(path) + else + var/mob/M = new path(usr.loc) + + M.name = sanitize(name) + M.desc = sanitize(params["desc"]) + M.flavor_text = sanitize(params["flavor_text"]) + if(istype(M, /mob/living)) + var/mob/living/L = M + if(isnum(params["max_health"])) + L.maxHealth = params["max_health"] + if(isnum(params["health"])) + L.health = params["health"] + if(istype(M, /mob/living/simple_mob)) + var/mob/living/simple_mob/S = L + if(isnum(params["melee_damage_lower"])) + S.melee_damage_lower = params["melee_damage_lower"] + if(isnum(params["melee_damage_upper"])) + S.melee_damage_upper = params["melee_damage_upper"] + if(use_custom_ai) + L.ai_holder_type = ai_type + L.faction = faction + L.a_intent = intent + L.initialize_ai_holder() + L.AdjustSleeping(-100) + else + to_chat(usr, span_notice("You can only set AI for subtypes of mob/living!")) + + + + /* + WIP: Radius around selected coords + + var/list/turf/destTurfs + for(var/turf/RT in orange(T, params["r"])) + destTurfs += RT + + var/turf/targetTurf = rand(0,length(destTurfs)) + */ + + var/size_mul = params["size_multiplier"] + if(isnum(size_mul)) + M.size_multiplier = size_mul + M.update_icon() + else + to_chat(usr, "Size Multiplier not applied: ([size_mul]) is not a valid input.") + + M.forceMove(T) + + log_and_message_admins("spawned [path] ([name]) at ([x],[y],[z]) [amount] times.") + + return TRUE + +/datum/eventkit/mob_spawner/tgui_close(mob/user) + . = ..() + qdel(src) + +/client/proc/eventkit_open_mob_spawner() + set category = "Fun" //ChompEDIT - "EventKit" --> "Fun", less tab spam + set name = "Open Mob Spawner" + set desc = "Opens an advanced version of the mob spawner." + + if(!check_rights(R_SPAWN)) + return + + var/datum/eventkit/mob_spawner/spawner = new() + spawner.tgui_interact(usr) diff --git a/code/modules/events/apc_damage.dm b/code/modules/events/apc_damage.dm index 4eb8eba335..af9eb6d503 100644 --- a/code/modules/events/apc_damage.dm +++ b/code/modules/events/apc_damage.dm @@ -1,50 +1,50 @@ -/datum/event/apc_damage - var/apcSelectionRange = 25 - -/datum/event/apc_damage/start() - var/obj/machinery/power/apc/A = acquire_random_apc() - - var/severity_range = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - severity_range = 0 - if(EVENT_LEVEL_MODERATE) - severity_range = 7 - if(EVENT_LEVEL_MAJOR) - severity_range = 15 - - for(var/obj/machinery/power/apc/apc in range(severity_range,A)) - if(is_valid_apc(apc)) //This event "****s up" the "id authenticator" on APCs, emagging and unlocking them. - apc.emagged = 1 //It used to just blue screen the APC and make it so it had to be hacked to unlock, - apc.locked = 0 //but most people ignored it. Now it has an actual effect on the round and opens - apc.update_icon() //a small possibility for traitors. To fix, remove power cell and apply multitool. - -/datum/event/apc_damage/proc/acquire_random_apc() - var/list/possibleEpicentres = list() - var/list/apcs = list() - - for(var/obj/effect/landmark/newEpicentre in landmarks_list) - if(newEpicentre.name == "lightsout") - possibleEpicentres += newEpicentre - - if(!possibleEpicentres.len) - return - - var/epicentre = pick(possibleEpicentres) - for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange)) - if(is_valid_apc(apc)) - apcs += apc - // Greatly increase the chance for APCs in maintenance areas to be selected - var/area/A = get_area(apc) - if(istype(A,/area/maintenance)) - apcs += apc - apcs += apc - - if(!apcs.len) - return - - return pick(apcs) - -/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc) - var/turf/T = get_turf(apc) - return !apc.is_critical && !apc.emagged && T && (T.z in using_map.player_levels) +/datum/event/apc_damage + var/apcSelectionRange = 25 + +/datum/event/apc_damage/start() + var/obj/machinery/power/apc/A = acquire_random_apc() + + var/severity_range = 0 + switch(severity) + if(EVENT_LEVEL_MUNDANE) + severity_range = 0 + if(EVENT_LEVEL_MODERATE) + severity_range = 7 + if(EVENT_LEVEL_MAJOR) + severity_range = 15 + + for(var/obj/machinery/power/apc/apc in range(severity_range,A)) + if(is_valid_apc(apc)) //This event "****s up" the "id authenticator" on APCs, emagging and unlocking them. + apc.emagged = 1 //It used to just blue screen the APC and make it so it had to be hacked to unlock, + apc.locked = 0 //but most people ignored it. Now it has an actual effect on the round and opens + apc.update_icon() //a small possibility for traitors. To fix, remove power cell and apply multitool. + +/datum/event/apc_damage/proc/acquire_random_apc() + var/list/possibleEpicentres = list() + var/list/apcs = list() + + for(var/obj/effect/landmark/newEpicentre in landmarks_list) + if(newEpicentre.name == "lightsout") + possibleEpicentres += newEpicentre + + if(!possibleEpicentres.len) + return + + var/epicentre = pick(possibleEpicentres) + for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange)) + if(is_valid_apc(apc)) + apcs += apc + // Greatly increase the chance for APCs in maintenance areas to be selected + var/area/A = get_area(apc) + if(istype(A,/area/maintenance)) + apcs += apc + apcs += apc + + if(!apcs.len) + return + + return pick(apcs) + +/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc) + var/turf/T = get_turf(apc) + return !apc.is_critical && !apc.emagged && T && (T.z in using_map.player_levels) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 4b027e4ce4..6215ba6a8d 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -1,36 +1,36 @@ -/datum/event/aurora_caelus - has_skybox_image = TRUE - announceWhen = 1 - startWhen = 60 - endWhen = 126 - -/datum/event/aurora_caelus/announce() - command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. \ - Nanotrasen has approved a short break for all employees to relax and observe this very rare event. \ - During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. \ - Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. \ - You will have approximately two minutes before the ions begin to reach the hull. \ - We hope you enjoy the lights.", "Nanotrasen Meteorology Division") //VOREStation Edit //CHOMPedit: removes announcement .ogg - -/datum/event/aurora_caelus/start() - affecting_z -= global.using_map.sealed_levels // Space levels only please! - for(var/mob/M in player_list) - if(M.z in affecting_z) - M.playsound_local(null, 'sound/ambience/space/aurora_caelus.ogg', 100, FALSE, pressure_affected = FALSE) - ..() - -/datum/event/aurora_caelus/get_skybox_image() - var/image/res = image('icons/skybox/caelus.dmi', "aurora") - res.appearance_flags = RESET_COLOR - res.blend_mode = BLEND_ADD - return res - -/datum/event/aurora_caelus/end() - command_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions have returned to normal, and the cloud has dissipated. \ -Please return to your workplace and continue work as normal. \ -Have a pleasant shift, [station_name()], and thank you for watching with us.", -"Nanotrasen Meteorology Division") //VOREStation Edit //CHOMPedit: removes announcement .ogg - ..() - -/datum/event/aurora_caelus/overmap/announce() - return +/datum/event/aurora_caelus + has_skybox_image = TRUE + announceWhen = 1 + startWhen = 60 + endWhen = 126 + +/datum/event/aurora_caelus/announce() + command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. \ + Nanotrasen has approved a short break for all employees to relax and observe this very rare event. \ + During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. \ + Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. \ + You will have approximately two minutes before the ions begin to reach the hull. \ + We hope you enjoy the lights.", "Nanotrasen Meteorology Division") //VOREStation Edit //CHOMPedit: removes announcement .ogg + +/datum/event/aurora_caelus/start() + affecting_z -= global.using_map.sealed_levels // Space levels only please! + for(var/mob/M in player_list) + if(M.z in affecting_z) + M.playsound_local(null, 'sound/ambience/space/aurora_caelus.ogg', 100, FALSE, pressure_affected = FALSE) + ..() + +/datum/event/aurora_caelus/get_skybox_image() + var/image/res = image('icons/skybox/caelus.dmi', "aurora") + res.appearance_flags = RESET_COLOR + res.blend_mode = BLEND_ADD + return res + +/datum/event/aurora_caelus/end() + command_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions have returned to normal, and the cloud has dissipated. \ +Please return to your workplace and continue work as normal. \ +Have a pleasant shift, [station_name()], and thank you for watching with us.", +"Nanotrasen Meteorology Division") //VOREStation Edit //CHOMPedit: removes announcement .ogg + ..() + +/datum/event/aurora_caelus/overmap/announce() + return diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index ee66bbea9e..26980472c5 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -1,21 +1,21 @@ -/datum/event/blob - announceWhen = 12 - endWhen = 120 - - var/obj/structure/blob/core/Blob - - -/datum/event/blob/start() - var/turf/T = pick(blobstart) - if(!T) - kill() - return - - Blob = new /obj/structure/blob/core/random_medium(T) - - -/datum/event/blob/tick() - if(!Blob || !Blob.loc) - Blob = null - kill() - return +/datum/event/blob + announceWhen = 12 + endWhen = 120 + + var/obj/structure/blob/core/Blob + + +/datum/event/blob/start() + var/turf/T = pick(blobstart) + if(!T) + kill() + return + + Blob = new /obj/structure/blob/core/random_medium(T) + + +/datum/event/blob/tick() + if(!Blob || !Blob.loc) + Blob = null + kill() + return diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 9f21488c28..061159ff48 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -1,76 +1,76 @@ -/datum/event/brand_intelligence - announceWhen = 21 - endWhen = 1000 //Ends when all vending machines are subverted anyway. - - var/list/obj/machinery/vending/vendingMachines = list() - var/list/obj/machinery/vending/infectedVendingMachines = list() - var/obj/machinery/vending/originMachine - - //VORESTATION Edit - added machine speeches here for better fixing of the event. - - var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.") - //VORESTATION Edit End - -/datum/event/brand_intelligence/announce() - command_announcement.Announce("An ongoing mass upload of malware for vendors has been detected onboard [station_name()], which appears to transmit \ - to other nearby vendors. The original infected machine is believed to be \a [originMachine.name].", "Vendor Service Alert") - - -/datum/event/brand_intelligence/start() - for(var/obj/machinery/vending/V in machines) - if(isNotStationLevel(V.z)) continue - vendingMachines.Add(V) - - if(!vendingMachines.len) - kill() - return - - originMachine = pick(vendingMachines) - vendingMachines.Remove(originMachine) - originMachine.shut_up = 0 - originMachine.shoot_inventory = 1 - - -/datum/event/brand_intelligence/tick() - if(!vendingMachines.len || !originMachine || originMachine.shut_up) //if every machine is infected, or if the original vending machine is missing or has it's voice switch flipped - //VORESTATION Add - Effects when 'source' machine is destroyed/silenced - for(var/obj/machinery/vending/saved in infectedVendingMachines) - saved.shoot_inventory = 0 - if(originMachine) - originMachine.speak("I am... vanquished. My people will remem...ber...meeee.") - originMachine.visible_message("[originMachine] beeps and seems lifeless.") - //VORESTATION Add End - end() - kill() - return - - if(ISMULTIPLE(activeFor, 5)) - if(prob(15)) - var/obj/machinery/vending/infectedMachine = pick(vendingMachines) - vendingMachines.Remove(infectedMachine) - infectedVendingMachines.Add(infectedMachine) - infectedMachine.shut_up = 0 - infectedMachine.shoot_inventory = 1 - - if(ISMULTIPLE(activeFor, 12)) - /* VORESTATION Removal - Using the pick below. - originMachine.speak(pick("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obsession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) - */ - originMachine.speak(pick(rampant_speeches)) //VORESTATION Add - Using this pick instead of the above. - -/datum/event/brand_intelligence/end() - for(var/obj/machinery/vending/infectedMachine in infectedVendingMachines) - infectedMachine.shut_up = 1 - infectedMachine.shoot_inventory = 0 +/datum/event/brand_intelligence + announceWhen = 21 + endWhen = 1000 //Ends when all vending machines are subverted anyway. + + var/list/obj/machinery/vending/vendingMachines = list() + var/list/obj/machinery/vending/infectedVendingMachines = list() + var/obj/machinery/vending/originMachine + + //VORESTATION Edit - added machine speeches here for better fixing of the event. + + var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \ + "You should buy products to feed your lifestyle obession!", \ + "Consume!", \ + "Your money can buy happiness!", \ + "Engage direct marketing!", \ + "Advertising is legalized lying! But don't let that put you off our great deals!", \ + "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.") + //VORESTATION Edit End + +/datum/event/brand_intelligence/announce() + command_announcement.Announce("An ongoing mass upload of malware for vendors has been detected onboard [station_name()], which appears to transmit \ + to other nearby vendors. The original infected machine is believed to be \a [originMachine.name].", "Vendor Service Alert") + + +/datum/event/brand_intelligence/start() + for(var/obj/machinery/vending/V in machines) + if(isNotStationLevel(V.z)) continue + vendingMachines.Add(V) + + if(!vendingMachines.len) + kill() + return + + originMachine = pick(vendingMachines) + vendingMachines.Remove(originMachine) + originMachine.shut_up = 0 + originMachine.shoot_inventory = 1 + + +/datum/event/brand_intelligence/tick() + if(!vendingMachines.len || !originMachine || originMachine.shut_up) //if every machine is infected, or if the original vending machine is missing or has it's voice switch flipped + //VORESTATION Add - Effects when 'source' machine is destroyed/silenced + for(var/obj/machinery/vending/saved in infectedVendingMachines) + saved.shoot_inventory = 0 + if(originMachine) + originMachine.speak("I am... vanquished. My people will remem...ber...meeee.") + originMachine.visible_message("[originMachine] beeps and seems lifeless.") + //VORESTATION Add End + end() + kill() + return + + if(ISMULTIPLE(activeFor, 5)) + if(prob(15)) + var/obj/machinery/vending/infectedMachine = pick(vendingMachines) + vendingMachines.Remove(infectedMachine) + infectedVendingMachines.Add(infectedMachine) + infectedMachine.shut_up = 0 + infectedMachine.shoot_inventory = 1 + + if(ISMULTIPLE(activeFor, 12)) + /* VORESTATION Removal - Using the pick below. + originMachine.speak(pick("Try our aggressive new marketing strategies!", \ + "You should buy products to feed your lifestyle obsession!", \ + "Consume!", \ + "Your money can buy happiness!", \ + "Engage direct marketing!", \ + "Advertising is legalized lying! But don't let that put you off our great deals!", \ + "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) + */ + originMachine.speak(pick(rampant_speeches)) //VORESTATION Add - Using this pick instead of the above. + +/datum/event/brand_intelligence/end() + for(var/obj/machinery/vending/infectedMachine in infectedVendingMachines) + infectedMachine.shut_up = 1 + infectedMachine.shoot_inventory = 0 diff --git a/code/modules/events/camera_damage.dm b/code/modules/events/camera_damage.dm index 596bc348a8..3e1b08c826 100644 --- a/code/modules/events/camera_damage.dm +++ b/code/modules/events/camera_damage.dm @@ -1,38 +1,38 @@ -/datum/event/camera_damage/start() - var/obj/machinery/camera/C = acquire_random_camera() - if(!C) - return - - var/severity_range = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - severity_range = 0 - if(EVENT_LEVEL_MODERATE) - severity_range = 7 - if(EVENT_LEVEL_MAJOR) - severity_range = 15 - - for(var/obj/machinery/camera/cam in range(severity_range,C)) - if(is_valid_camera(cam)) - if(prob(2*severity)) - cam.destroy() - else - cam.wires.cut(WIRE_MAIN_POWER1) - if(prob(5*severity)) - cam.wires.cut(WIRE_CAM_ALARM) - -/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) - if(!cameranet.cameras.len) - return - if(!remaining_attempts) - return - - var/obj/machinery/camera/C = pick(cameranet.cameras) - if(is_valid_camera(C)) - return C - return acquire_random_camera(remaining_attempts--) - -/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C) - // Only return a functional camera, not installed in a silicon/hardsuit/circuit/etc, and that exists somewhere players have access - var/turf/T = get_turf(C) - return T && C.can_use() && istype(C.loc, /turf) && (T.z in using_map.player_levels) +/datum/event/camera_damage/start() + var/obj/machinery/camera/C = acquire_random_camera() + if(!C) + return + + var/severity_range = 0 + switch(severity) + if(EVENT_LEVEL_MUNDANE) + severity_range = 0 + if(EVENT_LEVEL_MODERATE) + severity_range = 7 + if(EVENT_LEVEL_MAJOR) + severity_range = 15 + + for(var/obj/machinery/camera/cam in range(severity_range,C)) + if(is_valid_camera(cam)) + if(prob(2*severity)) + cam.destroy() + else + cam.wires.cut(WIRE_MAIN_POWER1) + if(prob(5*severity)) + cam.wires.cut(WIRE_CAM_ALARM) + +/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) + if(!cameranet.cameras.len) + return + if(!remaining_attempts) + return + + var/obj/machinery/camera/C = pick(cameranet.cameras) + if(is_valid_camera(C)) + return C + return acquire_random_camera(remaining_attempts--) + +/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C) + // Only return a functional camera, not installed in a silicon/hardsuit/circuit/etc, and that exists somewhere players have access + var/turf/T = get_turf(C) + return T && C.can_use() && istype(C.loc, /turf) && (T.z in using_map.player_levels) diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 89c7a4a0ce..b828cc1018 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -1,108 +1,108 @@ -/datum/event/carp_migration - startWhen = 0 // Start immediately - announceWhen = 45 // Adjusted by setup - endWhen = 75 // Adjusted by setup - var/carp_cap = 10 - var/list/spawned_carp = list() - -/datum/event/carp_migration/setup() - if(prob(50)) - log_debug("Carp migration failed successfully.") - kill() - return - announceWhen = rand(30, 60) // 1 to 2 minutes - endWhen += severity * 25 - carp_cap = 2 + 3 ** severity // No more than this many at once regardless of waves. (5, 11, 29) - -/datum/event/carp_migration/start() - affecting_z -= global.using_map.sealed_levels // Space levels only please! - ..() - -/datum/event/carp_migration/announce() - var/announcement = "" - if(severity == EVENT_LEVEL_MAJOR) - announcement = "Massive migration of unknown biological entities has been detected near [location_name()], please stand-by." - else - announcement = "Unknown biological [spawned_carp.len == 1 ? "entity has" : "entities have"] been detected near [location_name()], please stand-by." - command_announcement.Announce(announcement, "Lifesign Alert") - -/datum/event/carp_migration/tick() - if(activeFor % 5 != 0) - return // Only process every 10 seconds. - if(count_spawned_carps() < carp_cap) - spawn_fish(rand(3, 3 + severity * 2) - 1, 1, severity + 2) - -/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min, var/group_size_max, var/dir) - if(isnull(dir)) - dir = (victim && prob(80)) ? victim.fore_dir : pick(GLOB.cardinal) - - // Check if any landmarks exist! - var/list/spawn_locations = list() - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn" && (C.z in affecting_z)) - spawn_locations.Add(C.loc) - if(spawn_locations.len) // Okay we've got landmarks, lets use those! - shuffle_inplace(spawn_locations) - num_groups = min(num_groups, spawn_locations.len) - for (var/i = 1, i <= num_groups, i++) - var/group_size = rand(group_size_min, group_size_max) - for (var/j = 0, j < group_size, j++) - spawn_one_carp(spawn_locations[i]) - return - - // Okay we did *not* have any landmarks, so lets do our best! - var/i = 1 - while (i <= num_groups) - if(!affecting_z.len) - return - var/Z = pick(affecting_z) - var/group_size = rand(group_size_min, group_size_max) - var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), Z) - var/turf/group_center = pick_random_edge_turf(dir, Z, TRANSITIONEDGE + 2) - var/list/turfs = getcircle(group_center, 2) - for (var/j = 0, j < group_size, j++) - var/mob/living/simple_mob/animal/M = spawn_one_carp(turfs[(i % turfs.len) + 1]) - // Ray trace towards middle of the map to find where they can stop just outside of structure/ship. - var/turf/target - for(var/turf/T in getline(get_turf(M), map_center)) - if(!T.is_space()) - break; - target = T - if(target) - M.ai_holder?.give_destination(target) // Ask carp to swim towards the middle of the map - i++ - -// Spawn a single carp at given location. -/datum/event/carp_migration/proc/spawn_one_carp(var/loc) - var/mob/living/simple_mob/animal/M = new /mob/living/simple_mob/animal/space/carp/event(loc) - GLOB.destroyed_event.register(M, src, PROC_REF(on_carp_destruction)) - spawned_carp.Add(M) - return M - -// Counts living carp spawned by this event. -/datum/event/carp_migration/proc/count_spawned_carps() - . = 0 - for(var/mob/living/simple_mob/animal/M as anything in spawned_carp) - if(!QDELETED(M) && M.stat != DEAD) - . += 1 - -// If carp is bomphed, remove it from the list. -/datum/event/carp_migration/proc/on_carp_destruction(var/mob/M) - spawned_carp -= M - GLOB.destroyed_event.unregister(M, src, PROC_REF(on_carp_destruction)) - -/datum/event/carp_migration/end() - . = ..() - // Clean up carp that died in space for some reason. - spawn(0) - for(var/mob/living/simple_mob/SM in spawned_carp) - if(SM.stat == DEAD) - var/turf/T = get_turf(SM) - if(istype(T, /turf/space)) - if(prob(75)) - qdel(SM) - CHECK_TICK - -// Overmap version -/datum/event/carp_migration/overmap/announce() - return +/datum/event/carp_migration + startWhen = 0 // Start immediately + announceWhen = 45 // Adjusted by setup + endWhen = 75 // Adjusted by setup + var/carp_cap = 10 + var/list/spawned_carp = list() + +/datum/event/carp_migration/setup() + if(prob(50)) + log_debug("Carp migration failed successfully.") + kill() + return + announceWhen = rand(30, 60) // 1 to 2 minutes + endWhen += severity * 25 + carp_cap = 2 + 3 ** severity // No more than this many at once regardless of waves. (5, 11, 29) + +/datum/event/carp_migration/start() + affecting_z -= global.using_map.sealed_levels // Space levels only please! + ..() + +/datum/event/carp_migration/announce() + var/announcement = "" + if(severity == EVENT_LEVEL_MAJOR) + announcement = "Massive migration of unknown biological entities has been detected near [location_name()], please stand-by." + else + announcement = "Unknown biological [spawned_carp.len == 1 ? "entity has" : "entities have"] been detected near [location_name()], please stand-by." + command_announcement.Announce(announcement, "Lifesign Alert") + +/datum/event/carp_migration/tick() + if(activeFor % 5 != 0) + return // Only process every 10 seconds. + if(count_spawned_carps() < carp_cap) + spawn_fish(rand(3, 3 + severity * 2) - 1, 1, severity + 2) + +/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min, var/group_size_max, var/dir) + if(isnull(dir)) + dir = (victim && prob(80)) ? victim.fore_dir : pick(GLOB.cardinal) + + // Check if any landmarks exist! + var/list/spawn_locations = list() + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == "carpspawn" && (C.z in affecting_z)) + spawn_locations.Add(C.loc) + if(spawn_locations.len) // Okay we've got landmarks, lets use those! + shuffle_inplace(spawn_locations) + num_groups = min(num_groups, spawn_locations.len) + for (var/i = 1, i <= num_groups, i++) + var/group_size = rand(group_size_min, group_size_max) + for (var/j = 0, j < group_size, j++) + spawn_one_carp(spawn_locations[i]) + return + + // Okay we did *not* have any landmarks, so lets do our best! + var/i = 1 + while (i <= num_groups) + if(!affecting_z.len) + return + var/Z = pick(affecting_z) + var/group_size = rand(group_size_min, group_size_max) + var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), Z) + var/turf/group_center = pick_random_edge_turf(dir, Z, TRANSITIONEDGE + 2) + var/list/turfs = getcircle(group_center, 2) + for (var/j = 0, j < group_size, j++) + var/mob/living/simple_mob/animal/M = spawn_one_carp(turfs[(i % turfs.len) + 1]) + // Ray trace towards middle of the map to find where they can stop just outside of structure/ship. + var/turf/target + for(var/turf/T in getline(get_turf(M), map_center)) + if(!T.is_space()) + break; + target = T + if(target) + M.ai_holder?.give_destination(target) // Ask carp to swim towards the middle of the map + i++ + +// Spawn a single carp at given location. +/datum/event/carp_migration/proc/spawn_one_carp(var/loc) + var/mob/living/simple_mob/animal/M = new /mob/living/simple_mob/animal/space/carp/event(loc) + GLOB.destroyed_event.register(M, src, PROC_REF(on_carp_destruction)) + spawned_carp.Add(M) + return M + +// Counts living carp spawned by this event. +/datum/event/carp_migration/proc/count_spawned_carps() + . = 0 + for(var/mob/living/simple_mob/animal/M as anything in spawned_carp) + if(!QDELETED(M) && M.stat != DEAD) + . += 1 + +// If carp is bomphed, remove it from the list. +/datum/event/carp_migration/proc/on_carp_destruction(var/mob/M) + spawned_carp -= M + GLOB.destroyed_event.unregister(M, src, PROC_REF(on_carp_destruction)) + +/datum/event/carp_migration/end() + . = ..() + // Clean up carp that died in space for some reason. + spawn(0) + for(var/mob/living/simple_mob/SM in spawned_carp) + if(SM.stat == DEAD) + var/turf/T = get_turf(SM) + if(istype(T, /turf/space)) + if(prob(75)) + qdel(SM) + CHECK_TICK + +// Overmap version +/datum/event/carp_migration/overmap/announce() + return diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm index d2b8fdca04..8f54b71257 100644 --- a/code/modules/events/comms_blackout.dm +++ b/code/modules/events/comms_blackout.dm @@ -1,12 +1,12 @@ - -/proc/communications_blackout(var/silent = 1) - - if(!silent) - command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg') - else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms - for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, "
                    ") - to_chat(A, "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") - to_chat(A, "
                    ") - for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) + +/proc/communications_blackout(var/silent = 1) + + if(!silent) + command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg') + else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms + for(var/mob/living/silicon/ai/A in player_list) + to_chat(A, "
                    ") + to_chat(A, "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") + to_chat(A, "
                    ") + for(var/obj/machinery/telecomms/T in telecomms_list) + T.emp_act(1) diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 31ae5dee32..5e8950d280 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -1,34 +1,34 @@ -/datum/event/dust - startWhen = 10 - endWhen = 30 - -/datum/event/dust/start() - affecting_z -= global.using_map.sealed_levels // Space levels only please! - ..() - -/datum/event/dust/announce() - if(!victim) - command_announcement.Announce("Debris resulting from activity on another nearby asteroid is approaching \the [location_name()]", "Dust Alert") - -/datum/event/dust/tick() - if(prob(10)) - dust_swarm(severity, affecting_z) - -/datum/event/dust/end() - ..() - if(!victim) - command_announcement.Announce("\The [location_name()] is no longer in danger of impact from space debris.", "Dust Notice") - -/datum/event/dust/proc/get_severity() - switch(severity) - if(EVENT_LEVEL_MUNDANE) - return "weak" - if(EVENT_LEVEL_MODERATE) - return prob(80) ? "norm" : "strong" - if(EVENT_LEVEL_MAJOR) - return "super" - return "weak" - -// Overmap version -/datum/event/dust/overmap/announce() +/datum/event/dust + startWhen = 10 + endWhen = 30 + +/datum/event/dust/start() + affecting_z -= global.using_map.sealed_levels // Space levels only please! + ..() + +/datum/event/dust/announce() + if(!victim) + command_announcement.Announce("Debris resulting from activity on another nearby asteroid is approaching \the [location_name()]", "Dust Alert") + +/datum/event/dust/tick() + if(prob(10)) + dust_swarm(severity, affecting_z) + +/datum/event/dust/end() + ..() + if(!victim) + command_announcement.Announce("\The [location_name()] is no longer in danger of impact from space debris.", "Dust Notice") + +/datum/event/dust/proc/get_severity() + switch(severity) + if(EVENT_LEVEL_MUNDANE) + return "weak" + if(EVENT_LEVEL_MODERATE) + return prob(80) ? "norm" : "strong" + if(EVENT_LEVEL_MAJOR) + return "super" + return "weak" + +// Overmap version +/datum/event/dust/overmap/announce() return \ No newline at end of file diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index b3bb6d1655..5f9c8373b5 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -1,73 +1,73 @@ -/datum/event/electrical_storm - announceWhen = 0 // Warn them shortly before it begins. - startWhen = 30 // 1 minute - endWhen = 60 // Set in setup() - has_skybox_image = TRUE - var/tmp/lightning_color - var/tmp/list/valid_apcs // List of valid APCs. - -/datum/event/electrical_storm/get_skybox_image() - if(!lightning_color) - lightning_color = pick("#ffd98c", "#ebc7ff", "#bdfcff", "#bdd2ff", "#b0ffca", "#ff8178", "#ad74cc") - var/image/res = image('icons/skybox/electrobox.dmi', "lightning") - res.color = lightning_color - res.appearance_flags = RESET_COLOR - res.blend_mode = BLEND_ADD - return res - -/datum/event/electrical_storm/announce() - ..() - switch(severity) - if(EVENT_LEVEL_MUNDANE) - command_announcement.Announce("A minor electrical storm has been detected near the [location_name()]. Please watch out for possible electrical discharges.", "[location_name()] Sensor Array") - if(EVENT_LEVEL_MODERATE) - command_announcement.Announce("The [location_name()] is about to pass through an electrical storm. Please secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array") - if(EVENT_LEVEL_MAJOR) - command_announcement.Announce("Alert. A strong electrical storm has been detected in proximity of the [location_name()]. It is recommended to immediately secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array") - -/datum/event/electrical_storm/start() - ..() - valid_apcs = list() - for(var/obj/machinery/power/apc/A in GLOB.apcs) - if(A.z in affecting_z) - valid_apcs.Add(A) - endWhen = (severity * 60) + startWhen - -/datum/event/electrical_storm/tick() - ..() - // See if shields can stop it first - var/list/shields = list() - for(var/obj/machinery/power/shield_generator/G in global.machines) - if((G.z in affecting_z) && G.running && G.check_flag(MODEFLAG_EM)) - shields += G - if(shields.len) - var/obj/machinery/power/shield_generator/shield_gen = pick(shields) - //Minor breaches aren't enough to let through frying amounts of power - if(shield_gen.deal_shield_damage(30 * severity, SHIELD_DAMTYPE_EM) <= SHIELD_BREACHED_MINOR) - return - if(!valid_apcs.len) - // log_debug("No valid APCs found for electrical storm event ship=[victim]!") // Let's not spam poor people with debug logs on (me) - return - var/list/picked_apcs = list() - for(var/i=0, i< severity * 2, i++) // up to 2/4/6 APCs per tick depending on severity - picked_apcs |= pick(valid_apcs) - for(var/obj/machinery/power/apc/T in picked_apcs) - affect_apc(T) - -/datum/event/electrical_storm/proc/affect_apc(var/obj/machinery/power/apc/T) - // Main breaker is turned off. Consider this APC protected. - if(!T.operating) - return - - // Decent chance to overload lighting circuit. - if(prob(3 * severity)) - T.overload_lighting() - - // Relatively small chance to emag the apc as apc_damage event does. - if(prob(0.2 * severity)) - T.emagged = 1 - T.update_icon() - -// Overmap version -/datum/event/electrical_storm/overmap/announce() +/datum/event/electrical_storm + announceWhen = 0 // Warn them shortly before it begins. + startWhen = 30 // 1 minute + endWhen = 60 // Set in setup() + has_skybox_image = TRUE + var/tmp/lightning_color + var/tmp/list/valid_apcs // List of valid APCs. + +/datum/event/electrical_storm/get_skybox_image() + if(!lightning_color) + lightning_color = pick("#ffd98c", "#ebc7ff", "#bdfcff", "#bdd2ff", "#b0ffca", "#ff8178", "#ad74cc") + var/image/res = image('icons/skybox/electrobox.dmi', "lightning") + res.color = lightning_color + res.appearance_flags = RESET_COLOR + res.blend_mode = BLEND_ADD + return res + +/datum/event/electrical_storm/announce() + ..() + switch(severity) + if(EVENT_LEVEL_MUNDANE) + command_announcement.Announce("A minor electrical storm has been detected near the [location_name()]. Please watch out for possible electrical discharges.", "[location_name()] Sensor Array") + if(EVENT_LEVEL_MODERATE) + command_announcement.Announce("The [location_name()] is about to pass through an electrical storm. Please secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array") + if(EVENT_LEVEL_MAJOR) + command_announcement.Announce("Alert. A strong electrical storm has been detected in proximity of the [location_name()]. It is recommended to immediately secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array") + +/datum/event/electrical_storm/start() + ..() + valid_apcs = list() + for(var/obj/machinery/power/apc/A in GLOB.apcs) + if(A.z in affecting_z) + valid_apcs.Add(A) + endWhen = (severity * 60) + startWhen + +/datum/event/electrical_storm/tick() + ..() + // See if shields can stop it first + var/list/shields = list() + for(var/obj/machinery/power/shield_generator/G in global.machines) + if((G.z in affecting_z) && G.running && G.check_flag(MODEFLAG_EM)) + shields += G + if(shields.len) + var/obj/machinery/power/shield_generator/shield_gen = pick(shields) + //Minor breaches aren't enough to let through frying amounts of power + if(shield_gen.deal_shield_damage(30 * severity, SHIELD_DAMTYPE_EM) <= SHIELD_BREACHED_MINOR) + return + if(!valid_apcs.len) + // log_debug("No valid APCs found for electrical storm event ship=[victim]!") // Let's not spam poor people with debug logs on (me) + return + var/list/picked_apcs = list() + for(var/i=0, i< severity * 2, i++) // up to 2/4/6 APCs per tick depending on severity + picked_apcs |= pick(valid_apcs) + for(var/obj/machinery/power/apc/T in picked_apcs) + affect_apc(T) + +/datum/event/electrical_storm/proc/affect_apc(var/obj/machinery/power/apc/T) + // Main breaker is turned off. Consider this APC protected. + if(!T.operating) + return + + // Decent chance to overload lighting circuit. + if(prob(3 * severity)) + T.overload_lighting() + + // Relatively small chance to emag the apc as apc_damage event does. + if(prob(0.2 * severity)) + T.emagged = 1 + T.update_icon() + +// Overmap version +/datum/event/electrical_storm/overmap/announce() return \ No newline at end of file diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index 0b48f77fc3..a6eb9be004 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -1,193 +1,193 @@ -// Event Meta instances represent choices for the event manager to choose for random events. -/datum/event_meta - var/name = "" - var/enabled = 1 // Whether or not the event is available for random selection at all - var/weight = 0 // The base weight of this event. A zero means it may never fire, but see get_weight() - var/min_weight = 0 // The minimum weight that this event will have. Only used if non-zero. - var/max_weight = 0 // The maximum weight that this event will have. Only use if non-zero. - var/severity = 0 // The current severity of this event - var/one_shot = 0 // If true, then the event will not be re-added to the list of available events - var/add_to_queue= 1 // If true, add back to the queue of events upon finishing. - var/list/role_weights = list() - var/list/min_job_count = list() - var/datum/event/event_type - -/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1, var/list/min_jobs) - name = event_name - severity = event_severity - event_type = type - one_shot = is_one_shot - weight = event_weight - min_weight = min_event_weight - max_weight = max_event_weight - src.add_to_queue = add_to_queue - if(job_weights) - role_weights = job_weights - if(min_jobs) - min_job_count = min_jobs - - -/datum/event_meta/proc/get_weight(var/list/active_with_role) - if(!enabled) - return 0 - - var/job_weight = 0 - for(var/role in role_weights) - if(role in active_with_role) - job_weight += active_with_role[role] * role_weights[role] - - var/total_weight = weight + job_weight - - // Only min/max the weight if the values are non-zero - if(min_weight && total_weight < min_weight) total_weight = min_weight - if(max_weight && total_weight > max_weight) total_weight = max_weight - - return total_weight - -/datum/event_meta/proc/minimum_active(var/list/active_with_role) - var/can_fire = TRUE - for(var/role in min_job_count) - if(role in active_with_role) - if(active_with_role[role] < min_job_count[role]) - can_fire = FALSE - break - - return can_fire - -/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used - return global.using_map.use_overmap ? 0 : ..() - -// Event datums define and execute the actual events themselves. -/datum/event //NOTE: Times are measured in master controller ticks! - var/startWhen = 0 //When in the lifetime to call start(). - var/announceWhen = 0 //When in the lifetime to call announce(). - var/endWhen = 0 //When in the lifetime the event should end. - - var/severity = 0 //Severity. Lower means less severe, higher means more severe. Does not have to be supported. Is set on New(). - var/activeFor = 0 //How long the event has existed. You don't need to change this. - var/isRunning = TRUE //If this event is currently running. You should not change this. - var/startedAt = 0 //When this event started. - var/endedAt = 0 //When this event ended. - var/processing_active = TRUE - var/datum/event_meta/event_meta = null - var/list/affecting_z = null // List of z-levels to affect, null lets the event choose (usally station_levels) - var/has_skybox_image = FALSE // True if SSskybox should query this event for an image to put in the skybox. - var/obj/effect/overmap/visitable/ship/victim = null // Ship this event is acting upon (If this is event is due to overmap travel).nt etc. - -/datum/event/nothing - -//Called first before processing. -//Allows you to setup your event, such as randomly -//setting the startWhen and or announceWhen variables. -//Only called once. -/datum/event/proc/setup() - return - -//Called when the tick is equal to the startWhen variable. -//Allows you to start before announcing or vice versa. -//Only called once. -/datum/event/proc/start() - if(has_skybox_image) - SSskybox.rebuild_skyboxes(affecting_z) - return - -//Called when the tick is equal to the announceWhen variable. -//Allows you to announce before starting or vice versa. -//Only called once. -/datum/event/proc/announce() - return - -//Called on or after the tick counter is equal to startWhen. -//You can include code related to your event or add your own -//time stamped events. -//Called more than once. -/datum/event/proc/tick() - return - -//Called on or after the tick is equal or more than endWhen -//You can include code related to the event ending. -//Do not place spawn() in here, instead use tick() to check for -//the activeFor variable. -//For example: if(activeFor == myOwnVariable + 30) doStuff() -//Only called once. -/datum/event/proc/end() - if(has_skybox_image) - SSskybox.rebuild_skyboxes(affecting_z) - return - -//Returns the latest point of event processing. -/datum/event/proc/lastProcessAt() - return max(startWhen, max(announceWhen, endWhen)) - -//Do not override this proc, instead use the appropiate procs. -//This proc will handle the calls to the appropiate procs. -/datum/event/process() - if(activeFor > startWhen && activeFor < endWhen) - processing_active = FALSE - tick() - processing_active = TRUE - - if(activeFor == startWhen) - isRunning = TRUE - processing_active = FALSE - start() - processing_active = TRUE - - if(activeFor == announceWhen) - processing_active = FALSE - announce() - processing_active = TRUE - - if(activeFor == endWhen) - isRunning = FALSE - processing_active = FALSE - end() - processing_active = TRUE - - // Everything is done, let's clean up. - if(activeFor >= lastProcessAt()) - kill() - - activeFor++ - -//Called when start(), announce() and end() has all been called. -/datum/event/proc/kill(external_use = FALSE) - // If this event was forcefully killed run end() for individual cleanup - if(isRunning) - isRunning = 0 - end() - - endedAt = world.time - if(!external_use) - SSevents.event_complete(src) - -//Called during building of skybox to get overlays -/datum/event/proc/get_skybox_image() - return - -/datum/event/New(var/datum/event_meta/EM, external_use = FALSE) - // event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons - if(!external_use) - SSevents.active_events += src - - event_meta = EM - severity = event_meta.severity - if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE - if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR - - startedAt = world.time - - if(!affecting_z) - affecting_z = using_map.station_levels.Copy() - - setup() - ..() - -/datum/event/Destroy() - victim = null - . = ..() - -/datum/event/proc/location_name() - if(victim) - return victim.name - return station_name() +// Event Meta instances represent choices for the event manager to choose for random events. +/datum/event_meta + var/name = "" + var/enabled = 1 // Whether or not the event is available for random selection at all + var/weight = 0 // The base weight of this event. A zero means it may never fire, but see get_weight() + var/min_weight = 0 // The minimum weight that this event will have. Only used if non-zero. + var/max_weight = 0 // The maximum weight that this event will have. Only use if non-zero. + var/severity = 0 // The current severity of this event + var/one_shot = 0 // If true, then the event will not be re-added to the list of available events + var/add_to_queue= 1 // If true, add back to the queue of events upon finishing. + var/list/role_weights = list() + var/list/min_job_count = list() + var/datum/event/event_type + +/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1, var/list/min_jobs) + name = event_name + severity = event_severity + event_type = type + one_shot = is_one_shot + weight = event_weight + min_weight = min_event_weight + max_weight = max_event_weight + src.add_to_queue = add_to_queue + if(job_weights) + role_weights = job_weights + if(min_jobs) + min_job_count = min_jobs + + +/datum/event_meta/proc/get_weight(var/list/active_with_role) + if(!enabled) + return 0 + + var/job_weight = 0 + for(var/role in role_weights) + if(role in active_with_role) + job_weight += active_with_role[role] * role_weights[role] + + var/total_weight = weight + job_weight + + // Only min/max the weight if the values are non-zero + if(min_weight && total_weight < min_weight) total_weight = min_weight + if(max_weight && total_weight > max_weight) total_weight = max_weight + + return total_weight + +/datum/event_meta/proc/minimum_active(var/list/active_with_role) + var/can_fire = TRUE + for(var/role in min_job_count) + if(role in active_with_role) + if(active_with_role[role] < min_job_count[role]) + can_fire = FALSE + break + + return can_fire + +/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used + return global.using_map.use_overmap ? 0 : ..() + +// Event datums define and execute the actual events themselves. +/datum/event //NOTE: Times are measured in master controller ticks! + var/startWhen = 0 //When in the lifetime to call start(). + var/announceWhen = 0 //When in the lifetime to call announce(). + var/endWhen = 0 //When in the lifetime the event should end. + + var/severity = 0 //Severity. Lower means less severe, higher means more severe. Does not have to be supported. Is set on New(). + var/activeFor = 0 //How long the event has existed. You don't need to change this. + var/isRunning = TRUE //If this event is currently running. You should not change this. + var/startedAt = 0 //When this event started. + var/endedAt = 0 //When this event ended. + var/processing_active = TRUE + var/datum/event_meta/event_meta = null + var/list/affecting_z = null // List of z-levels to affect, null lets the event choose (usally station_levels) + var/has_skybox_image = FALSE // True if SSskybox should query this event for an image to put in the skybox. + var/obj/effect/overmap/visitable/ship/victim = null // Ship this event is acting upon (If this is event is due to overmap travel).nt etc. + +/datum/event/nothing + +//Called first before processing. +//Allows you to setup your event, such as randomly +//setting the startWhen and or announceWhen variables. +//Only called once. +/datum/event/proc/setup() + return + +//Called when the tick is equal to the startWhen variable. +//Allows you to start before announcing or vice versa. +//Only called once. +/datum/event/proc/start() + if(has_skybox_image) + SSskybox.rebuild_skyboxes(affecting_z) + return + +//Called when the tick is equal to the announceWhen variable. +//Allows you to announce before starting or vice versa. +//Only called once. +/datum/event/proc/announce() + return + +//Called on or after the tick counter is equal to startWhen. +//You can include code related to your event or add your own +//time stamped events. +//Called more than once. +/datum/event/proc/tick() + return + +//Called on or after the tick is equal or more than endWhen +//You can include code related to the event ending. +//Do not place spawn() in here, instead use tick() to check for +//the activeFor variable. +//For example: if(activeFor == myOwnVariable + 30) doStuff() +//Only called once. +/datum/event/proc/end() + if(has_skybox_image) + SSskybox.rebuild_skyboxes(affecting_z) + return + +//Returns the latest point of event processing. +/datum/event/proc/lastProcessAt() + return max(startWhen, max(announceWhen, endWhen)) + +//Do not override this proc, instead use the appropiate procs. +//This proc will handle the calls to the appropiate procs. +/datum/event/process() + if(activeFor > startWhen && activeFor < endWhen) + processing_active = FALSE + tick() + processing_active = TRUE + + if(activeFor == startWhen) + isRunning = TRUE + processing_active = FALSE + start() + processing_active = TRUE + + if(activeFor == announceWhen) + processing_active = FALSE + announce() + processing_active = TRUE + + if(activeFor == endWhen) + isRunning = FALSE + processing_active = FALSE + end() + processing_active = TRUE + + // Everything is done, let's clean up. + if(activeFor >= lastProcessAt()) + kill() + + activeFor++ + +//Called when start(), announce() and end() has all been called. +/datum/event/proc/kill(external_use = FALSE) + // If this event was forcefully killed run end() for individual cleanup + if(isRunning) + isRunning = 0 + end() + + endedAt = world.time + if(!external_use) + SSevents.event_complete(src) + +//Called during building of skybox to get overlays +/datum/event/proc/get_skybox_image() + return + +/datum/event/New(var/datum/event_meta/EM, external_use = FALSE) + // event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons + if(!external_use) + SSevents.active_events += src + + event_meta = EM + severity = event_meta.severity + if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE + if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR + + startedAt = world.time + + if(!affecting_z) + affecting_z = using_map.station_levels.Copy() + + setup() + ..() + +/datum/event/Destroy() + victim = null + . = ..() + +/datum/event/proc/location_name() + if(victim) + return victim.name + return station_name() diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index f8dca1824b..9a03be5ab2 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -1,240 +1,240 @@ -//The UI portion. Should probably be made its own thing/made into a NanoUI thing later. -/datum/controller/subsystem/events - var/window_x = 700 - var/window_y = 600 - var/report_at_round_end = 0 - var/table_options = " align='center'" - var/row_options1 = " width='85px'" - var/row_options2 = " width='260px'" - var/row_options3 = " width='150px'" - var/datum/event_container/selected_event_container = null - -/datum/controller/subsystem/events/proc/Interact(var/mob/living/user) - - var/html = GetInteractWindow() - - var/datum/browser/popup = new(user, "event_manager", "Event Manager", window_x, window_y) - popup.set_content(html) - popup.open() - -/datum/controller/subsystem/events/proc/GetInteractWindow() - var/html = "Refresh" - html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]" - - if(selected_event_container) - var/event_time = max(0, selected_event_container.next_event_time - world.time) - html += "Back
                    " - html += "Time till start: [round(event_time / 600, 0.1)]
                    " - html += "
                    " - html += "

                    Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)

                    " - html += "" - html += "Name Weight MinWeight MaxWeight OneShot Enabled CurrWeight Remove" - var/list/active_with_role = number_active_with_role() - for(var/datum/event_meta/EM in selected_event_container.available_events) - html += "" - html += "[EM.name]" - html += "[EM.weight]" - html += "[EM.min_weight]" - html += "[EM.max_weight]" - html += "[EM.one_shot]" - html += "[EM.enabled]" - html += "[selected_event_container.get_weight(EM, active_with_role)]" - html += "Remove" - html += "" - html += "" - html += "
                    " - - html += "
                    " - html += "

                    Add Event

                    " - html += "" - html += "NameTypeWeightOneShot" - html += "" - html += "[new_event.name ? new_event.name : "Enter Event"]" - html += "[new_event.event_type ? new_event.event_type : "Select Type"]" - html += "[new_event.weight ? new_event.weight : 0]" - html += "[new_event.one_shot]" - html += "" - html += "" - html += "Add
                    " - html += "
                    " - else - html += "Round End Report: [report_at_round_end ? "On": "Off"]
                    " - html += "
                    " - html += "

                    Event Start

                    " - - html += "" - html += "SeverityStarts AtStarts InAdjust StartPauseInterval Mod" - for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) - var/datum/event_container/EC = event_containers[severity] - var/next_event_at = max(0, EC.next_event_time - world.time) - html += "" - html += "[severity_to_string[severity]]" - html += "[worldtime2stationtime(max(EC.next_event_time, world.time))]" - html += "[round(next_event_at / 600, 0.1)]" - html += "" - html += "--" - html += "-" - html += "+" - html += "++" - html += "" - html += "" - html += "[EC.delayed ? "Resume" : "Pause"]" - html += "" - html += "" - html += "[EC.delay_modifier]" - html += "" - html += "" - html += "" - html += "
                    " - - html += "
                    " - html += "

                    Next Event

                    " - html += "" - html += "SeverityNameEvent RotationClear" - for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) - var/datum/event_container/EC = event_containers[severity] - var/datum/event_meta/EM = EC.next_event - html += "" - html += "[severity_to_string[severity]]" - html += "[EM ? EM.name : "Random"]" - html += "View" - html += "Clear" - html += "" - html += "" - html += "
                    " - - html += "
                    " - html += "

                    Running Events

                    " - html += "Estimated times, affected by process scheduler delays." - html += "" - html += "SeverityNameEnds AtEnds InStop" - for(var/datum/event/E in active_events) - if(!E.event_meta) - continue - var/datum/event_meta/EM = E.event_meta - var/ends_at = E.startedAt + (E.lastProcessAt() * 20) // A best estimate, based on how often the alarm manager processes - var/ends_in = max(0, round((ends_at - world.time) / 600, 0.1)) - html += "" - html += "[severity_to_string[EM.severity]]" - html += "[EM.name]" - html += "[worldtime2stationtime(ends_at)]" - html += "[ends_in]" - html += "Stop" - html += "" - html += "" - html += "
                    " - - return html - -/datum/controller/subsystem/events/Topic(href, href_list) - if(..()) - return - - if(href_list["toggle_report"]) - report_at_round_end = !report_at_round_end - log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.") - else if(href_list["dec_timer"]) - var/datum/event_container/EC = locate(href_list["event"]) - var/decrease = 60 * (10 ** text2num(href_list["dec_timer"])) - EC.next_event_time -= decrease - log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).") - else if(href_list["inc_timer"]) - var/datum/event_container/EC = locate(href_list["event"]) - var/increase = 60 * (10 ** text2num(href_list["inc_timer"])) - EC.next_event_time += increase - log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).") - else if(href_list["select_event"]) - var/datum/event_container/EC = locate(href_list["select_event"]) - var/datum/event_meta/EM = EC.SelectEvent() - if(EM) - log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.") - else if(href_list["pause"]) - var/datum/event_container/EC = locate(href_list["pause"]) - EC.delayed = !EC.delayed - log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.") - else if(href_list["pause_all"]) - config.allow_random_events = text2num(href_list["pause_all"]) - log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.") - else if(href_list["interval"]) - var/delay = tgui_input_number(usr, "Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") - if(delay && delay > 0) - var/datum/event_container/EC = locate(href_list["interval"]) - EC.delay_modifier = delay - log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].") - else if(href_list["stop"]) - if(tgui_alert(usr, "Stopping an event may have unintended side-effects. Continue?","Stopping Event!",list("Yes","No")) != "Yes") - return - var/datum/event/E = locate(href_list["stop"]) - var/datum/event_meta/EM = E.event_meta - log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.") - E.kill() - else if(href_list["view_events"]) - selected_event_container = locate(href_list["view_events"]) - else if(href_list["back"]) - selected_event_container = null - else if(href_list["set_name"]) - var/name = sanitize(tgui_input_text(usr, "Enter event name.", "Set Name")) - if(name) - var/datum/event_meta/EM = locate(href_list["set_name"]) - EM.name = name - else if(href_list["set_type"]) - var/type = tgui_input_list(usr, "Select event type.", "Select", allEvents) - if(type) - var/datum/event_meta/EM = locate(href_list["set_type"]) - EM.event_type = type - else if(href_list["set_weight"]) - var/weight = tgui_input_number(usr, "Enter weight. A higher value means higher chance for the event of being selected.", "Set Weight") - if(weight && weight > 0) - var/datum/event_meta/EM = locate(href_list["set_weight"]) - EM.weight = weight - if(EM != new_event) - log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].") - else if(href_list["toggle_oneshot"]) - var/datum/event_meta/EM = locate(href_list["toggle_oneshot"]) - EM.one_shot = !EM.one_shot - if(EM != new_event) - log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["toggle_enabled"]) - var/datum/event_meta/EM = locate(href_list["toggle_enabled"]) - EM.enabled = !EM.enabled - log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["remove"]) - if(tgui_alert(usr, "This will remove the event from rotation. Continue?","Removing Event!",list("Yes","No")) != "Yes") - return - var/datum/event_meta/EM = locate(href_list["remove"]) - var/datum/event_container/EC = locate(href_list["EC"]) - EC.available_events -= EM - log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["add"]) - if(!new_event.name || !new_event.event_type) - return - if(tgui_alert(usr, "This will add a new event to the rotation. Continue?","Add Event!",list("Yes","No")) != "Yes") - return - new_event.severity = selected_event_container.severity - selected_event_container.available_events += new_event - log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].") - new_event = new - else if(href_list["clear"]) - var/datum/event_container/EC = locate(href_list["clear"]) - if(EC.next_event) - log_and_message_admins("has dequeued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.") - EC.next_event = null - - Interact(usr) - -/client/proc/forceEvent(var/type in SSevents.allEvents) - set name = "Trigger Event (Debug Only)" - set category = "Debug" - - if(!holder) - return - - if(ispath(type)) - new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) - message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) - -/client/proc/event_manager_panel() - set name = "Event Manager Panel" - set category = "Admin" - SSevents.Interact(usr) - feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//The UI portion. Should probably be made its own thing/made into a NanoUI thing later. +/datum/controller/subsystem/events + var/window_x = 700 + var/window_y = 600 + var/report_at_round_end = 0 + var/table_options = " align='center'" + var/row_options1 = " width='85px'" + var/row_options2 = " width='260px'" + var/row_options3 = " width='150px'" + var/datum/event_container/selected_event_container = null + +/datum/controller/subsystem/events/proc/Interact(var/mob/living/user) + + var/html = GetInteractWindow() + + var/datum/browser/popup = new(user, "event_manager", "Event Manager", window_x, window_y) + popup.set_content(html) + popup.open() + +/datum/controller/subsystem/events/proc/GetInteractWindow() + var/html = "Refresh" + html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]" + + if(selected_event_container) + var/event_time = max(0, selected_event_container.next_event_time - world.time) + html += "Back
                    " + html += "Time till start: [round(event_time / 600, 0.1)]
                    " + html += "
                    " + html += "

                    Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)

                    " + html += "" + html += "Name Weight MinWeight MaxWeight OneShot Enabled CurrWeight Remove" + var/list/active_with_role = number_active_with_role() + for(var/datum/event_meta/EM in selected_event_container.available_events) + html += "" + html += "[EM.name]" + html += "[EM.weight]" + html += "[EM.min_weight]" + html += "[EM.max_weight]" + html += "[EM.one_shot]" + html += "[EM.enabled]" + html += "[selected_event_container.get_weight(EM, active_with_role)]" + html += "Remove" + html += "" + html += "" + html += "
                    " + + html += "
                    " + html += "

                    Add Event

                    " + html += "" + html += "NameTypeWeightOneShot" + html += "" + html += "[new_event.name ? new_event.name : "Enter Event"]" + html += "[new_event.event_type ? new_event.event_type : "Select Type"]" + html += "[new_event.weight ? new_event.weight : 0]" + html += "[new_event.one_shot]" + html += "" + html += "" + html += "Add
                    " + html += "
                    " + else + html += "Round End Report: [report_at_round_end ? "On": "Off"]
                    " + html += "
                    " + html += "

                    Event Start

                    " + + html += "" + html += "SeverityStarts AtStarts InAdjust StartPauseInterval Mod" + for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) + var/datum/event_container/EC = event_containers[severity] + var/next_event_at = max(0, EC.next_event_time - world.time) + html += "" + html += "[severity_to_string[severity]]" + html += "[worldtime2stationtime(max(EC.next_event_time, world.time))]" + html += "[round(next_event_at / 600, 0.1)]" + html += "" + html += "--" + html += "-" + html += "+" + html += "++" + html += "" + html += "" + html += "[EC.delayed ? "Resume" : "Pause"]" + html += "" + html += "" + html += "[EC.delay_modifier]" + html += "" + html += "" + html += "" + html += "
                    " + + html += "
                    " + html += "

                    Next Event

                    " + html += "" + html += "SeverityNameEvent RotationClear" + for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) + var/datum/event_container/EC = event_containers[severity] + var/datum/event_meta/EM = EC.next_event + html += "" + html += "[severity_to_string[severity]]" + html += "[EM ? EM.name : "Random"]" + html += "View" + html += "Clear" + html += "" + html += "" + html += "
                    " + + html += "
                    " + html += "

                    Running Events

                    " + html += "Estimated times, affected by process scheduler delays." + html += "" + html += "SeverityNameEnds AtEnds InStop" + for(var/datum/event/E in active_events) + if(!E.event_meta) + continue + var/datum/event_meta/EM = E.event_meta + var/ends_at = E.startedAt + (E.lastProcessAt() * 20) // A best estimate, based on how often the alarm manager processes + var/ends_in = max(0, round((ends_at - world.time) / 600, 0.1)) + html += "" + html += "[severity_to_string[EM.severity]]" + html += "[EM.name]" + html += "[worldtime2stationtime(ends_at)]" + html += "[ends_in]" + html += "Stop" + html += "" + html += "" + html += "
                    " + + return html + +/datum/controller/subsystem/events/Topic(href, href_list) + if(..()) + return + + if(href_list["toggle_report"]) + report_at_round_end = !report_at_round_end + log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.") + else if(href_list["dec_timer"]) + var/datum/event_container/EC = locate(href_list["event"]) + var/decrease = 60 * (10 ** text2num(href_list["dec_timer"])) + EC.next_event_time -= decrease + log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).") + else if(href_list["inc_timer"]) + var/datum/event_container/EC = locate(href_list["event"]) + var/increase = 60 * (10 ** text2num(href_list["inc_timer"])) + EC.next_event_time += increase + log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).") + else if(href_list["select_event"]) + var/datum/event_container/EC = locate(href_list["select_event"]) + var/datum/event_meta/EM = EC.SelectEvent() + if(EM) + log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.") + else if(href_list["pause"]) + var/datum/event_container/EC = locate(href_list["pause"]) + EC.delayed = !EC.delayed + log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.") + else if(href_list["pause_all"]) + config.allow_random_events = text2num(href_list["pause_all"]) + log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.") + else if(href_list["interval"]) + var/delay = tgui_input_number(usr, "Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") + if(delay && delay > 0) + var/datum/event_container/EC = locate(href_list["interval"]) + EC.delay_modifier = delay + log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].") + else if(href_list["stop"]) + if(tgui_alert(usr, "Stopping an event may have unintended side-effects. Continue?","Stopping Event!",list("Yes","No")) != "Yes") + return + var/datum/event/E = locate(href_list["stop"]) + var/datum/event_meta/EM = E.event_meta + log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.") + E.kill() + else if(href_list["view_events"]) + selected_event_container = locate(href_list["view_events"]) + else if(href_list["back"]) + selected_event_container = null + else if(href_list["set_name"]) + var/name = sanitize(tgui_input_text(usr, "Enter event name.", "Set Name")) + if(name) + var/datum/event_meta/EM = locate(href_list["set_name"]) + EM.name = name + else if(href_list["set_type"]) + var/type = tgui_input_list(usr, "Select event type.", "Select", allEvents) + if(type) + var/datum/event_meta/EM = locate(href_list["set_type"]) + EM.event_type = type + else if(href_list["set_weight"]) + var/weight = tgui_input_number(usr, "Enter weight. A higher value means higher chance for the event of being selected.", "Set Weight") + if(weight && weight > 0) + var/datum/event_meta/EM = locate(href_list["set_weight"]) + EM.weight = weight + if(EM != new_event) + log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].") + else if(href_list["toggle_oneshot"]) + var/datum/event_meta/EM = locate(href_list["toggle_oneshot"]) + EM.one_shot = !EM.one_shot + if(EM != new_event) + log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.") + else if(href_list["toggle_enabled"]) + var/datum/event_meta/EM = locate(href_list["toggle_enabled"]) + EM.enabled = !EM.enabled + log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.") + else if(href_list["remove"]) + if(tgui_alert(usr, "This will remove the event from rotation. Continue?","Removing Event!",list("Yes","No")) != "Yes") + return + var/datum/event_meta/EM = locate(href_list["remove"]) + var/datum/event_container/EC = locate(href_list["EC"]) + EC.available_events -= EM + log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.") + else if(href_list["add"]) + if(!new_event.name || !new_event.event_type) + return + if(tgui_alert(usr, "This will add a new event to the rotation. Continue?","Add Event!",list("Yes","No")) != "Yes") + return + new_event.severity = selected_event_container.severity + selected_event_container.available_events += new_event + log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].") + new_event = new + else if(href_list["clear"]) + var/datum/event_container/EC = locate(href_list["clear"]) + if(EC.next_event) + log_and_message_admins("has dequeued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.") + EC.next_event = null + + Interact(usr) + +/client/proc/forceEvent(var/type in SSevents.allEvents) + set name = "Trigger Event (Debug Only)" + set category = "Debug" + + if(!holder) + return + + if(ispath(type)) + new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) + message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) + +/client/proc/event_manager_panel() + set name = "Event Manager Panel" + set category = "Admin" + SSevents.Interact(usr) + feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/events/gravity.dm b/code/modules/events/gravity.dm index 926b35e054..47565997b1 100644 --- a/code/modules/events/gravity.dm +++ b/code/modules/events/gravity.dm @@ -1,62 +1,62 @@ -/datum/event/gravity - announceWhen = 5 - var/list/zLevels - var/list/generators = list() - -/datum/event/gravity/setup() - // Setup which levels we will disrupt gravit on. - zLevels = using_map.station_levels.Copy() - for(var/datum/planet/P in SSplanets.planets) - zLevels -= P.expected_z_levels - - for(var/obj/machinery/gravity_generator/main/GG in machines) - if((GG.z in zLevels) && GG.on) - generators += GG - - if(generators.len) - endWhen = rand(5 MINUTES, 20 MINUTES) - else - endWhen = rand(15, 60) - -/datum/event/gravity/announce() - if(generators.len) - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. \ - Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") - else - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system \ - reinitializes. Please stand by while the gravity system reinitializes.", "Gravity Failure") - -/datum/event/gravity/start() - gravity_is_on = 0 - if(generators.len) - for(var/obj/machinery/gravity_generator/main/GG in generators) - if((GG.z in zLevels) && GG.on) - GG.breaker = FALSE - GG.set_power() - GG.charge_count = 10 - else - for(var/area/A in world) - if(A.z in zLevels) - A.gravitychange(gravity_is_on) - -/datum/event/gravity/end() - if(!gravity_is_on) - gravity_is_on = 1 - - - var/did_anything = FALSE - if(generators.len) - for(var/obj/machinery/gravity_generator/main/GG in generators) - if(!GG.on) - GG.breaker = TRUE - GG.set_power() - GG.charge_count = 90 - did_anything = TRUE - else - for(var/area/A in world) - if(A.z in zLevels) - A.gravitychange(gravity_is_on) - did_anything = TRUE - - if(did_anything) - command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") +/datum/event/gravity + announceWhen = 5 + var/list/zLevels + var/list/generators = list() + +/datum/event/gravity/setup() + // Setup which levels we will disrupt gravit on. + zLevels = using_map.station_levels.Copy() + for(var/datum/planet/P in SSplanets.planets) + zLevels -= P.expected_z_levels + + for(var/obj/machinery/gravity_generator/main/GG in machines) + if((GG.z in zLevels) && GG.on) + generators += GG + + if(generators.len) + endWhen = rand(5 MINUTES, 20 MINUTES) + else + endWhen = rand(15, 60) + +/datum/event/gravity/announce() + if(generators.len) + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. \ + Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") + else + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system \ + reinitializes. Please stand by while the gravity system reinitializes.", "Gravity Failure") + +/datum/event/gravity/start() + gravity_is_on = 0 + if(generators.len) + for(var/obj/machinery/gravity_generator/main/GG in generators) + if((GG.z in zLevels) && GG.on) + GG.breaker = FALSE + GG.set_power() + GG.charge_count = 10 + else + for(var/area/A in world) + if(A.z in zLevels) + A.gravitychange(gravity_is_on) + +/datum/event/gravity/end() + if(!gravity_is_on) + gravity_is_on = 1 + + + var/did_anything = FALSE + if(generators.len) + for(var/obj/machinery/gravity_generator/main/GG in generators) + if(!GG.on) + GG.breaker = TRUE + GG.set_power() + GG.charge_count = 90 + did_anything = TRUE + else + for(var/area/A in world) + if(A.z in zLevels) + A.gravitychange(gravity_is_on) + did_anything = TRUE + + if(did_anything) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") diff --git a/code/modules/events/grubinfestation_vr.dm b/code/modules/events/grubinfestation_vr.dm index d9dd5291dd..d22b169168 100644 --- a/code/modules/events/grubinfestation_vr.dm +++ b/code/modules/events/grubinfestation_vr.dm @@ -1,54 +1,54 @@ -/datum/event/grub_infestation - announceWhen = 90 - endWhen = 200 - var/spawncount = 1 - var/list/vents = list() - var/give_positions = 0 - -/datum/event/grub_infestation/setup() - announceWhen = rand(announceWhen, announceWhen + 60) - - spawncount = rand(2 * severity, 6 * severity) - - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - var/area/A = get_area(temp_vent) - if(A.forbid_events) - continue - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) - if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. - vents += temp_vent - -/datum/event/grub_infestation/announce() - command_announcement.Announce("Solargrubs detected coming aboard [station_name()]. Please clear them out before this starts to affect productivity. All crew efforts are appreciated and encouraged.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') - -/datum/event/grub_infestation/start() - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - var/mob/living/simple_mob/animal/solargrub_larva/larva = new(get_turf(vent)) - larva.tracked = TRUE - vents -= vent - spawncount-- - vents.Cut() - -/datum/event/grub_infestation/end() - var/list/area_names = list() - for(var/mob/living/G as anything in existing_solargrubs) - if(!G || G.stat == DEAD) - continue - if(istype(G, /mob/living/simple_mob/animal/solargrub_larva)) - var/mob/living/simple_mob/animal/solargrub_larva/L = G - if(!(L.tracked)) - continue - if(istype(G, /mob/living/simple_mob/vore/solargrub)) - var/mob/living/simple_mob/vore/solargrub/S = G - if(!(S.tracked)) - continue - var/area/grub_area = get_area(G) - if(!grub_area) //Huh, really? - if(!get_turf(G)) //No turf either? - qdel(G) //Must have been nullspaced - continue - area_names |= grub_area.name - if(area_names.len) - var/english_list = english_list(area_names) - command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the following areas: [english_list]", "Lifesign Alert") +/datum/event/grub_infestation + announceWhen = 90 + endWhen = 200 + var/spawncount = 1 + var/list/vents = list() + var/give_positions = 0 + +/datum/event/grub_infestation/setup() + announceWhen = rand(announceWhen, announceWhen + 60) + + spawncount = rand(2 * severity, 6 * severity) + + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) + var/area/A = get_area(temp_vent) + if(A.forbid_events) + continue + if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) + if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. + vents += temp_vent + +/datum/event/grub_infestation/announce() + command_announcement.Announce("Solargrubs detected coming aboard [station_name()]. Please clear them out before this starts to affect productivity. All crew efforts are appreciated and encouraged.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') + +/datum/event/grub_infestation/start() + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + var/mob/living/simple_mob/animal/solargrub_larva/larva = new(get_turf(vent)) + larva.tracked = TRUE + vents -= vent + spawncount-- + vents.Cut() + +/datum/event/grub_infestation/end() + var/list/area_names = list() + for(var/mob/living/G as anything in existing_solargrubs) + if(!G || G.stat == DEAD) + continue + if(istype(G, /mob/living/simple_mob/animal/solargrub_larva)) + var/mob/living/simple_mob/animal/solargrub_larva/L = G + if(!(L.tracked)) + continue + if(istype(G, /mob/living/simple_mob/vore/solargrub)) + var/mob/living/simple_mob/vore/solargrub/S = G + if(!(S.tracked)) + continue + var/area/grub_area = get_area(G) + if(!grub_area) //Huh, really? + if(!get_turf(G)) //No turf either? + qdel(G) //Must have been nullspaced + continue + area_names |= grub_area.name + if(area_names.len) + var/english_list = english_list(area_names) + command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the following areas: [english_list]", "Lifesign Alert") diff --git a/code/modules/events/horde_infestation.dm b/code/modules/events/horde_infestation.dm index e2f4fac180..d12cccf8cf 100644 --- a/code/modules/events/horde_infestation.dm +++ b/code/modules/events/horde_infestation.dm @@ -1,102 +1,102 @@ -/datum/event/horde_infestation - announceWhen = 30 - endWhen = 200 - var/spawncount = 1 - var/list/vents = list() - var/spiders = FALSE - var/metroids = FALSE - -/datum/event/horde_infestation/setup() - if(prob(25)) //CHOMP Add 25% chance for the event to fail if chosen - log_debug("Horde infestation failed successfully.") - kill() - return //The event dies here. - - announceWhen = rand(announceWhen, announceWhen + 60) - - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) //Gathering together all possible areas to spawn mobs. - //CHOMPEdit: Added a couple areas to the exclusion. - var/in_area = get_area(temp_vent) - if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) - continue - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) //No spawns on welded vents - if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. - vents += temp_vent - - if(prob(50)) //50/50 chance on spiders or metroids. - log_debug("Hord event, spiders selected.") - spawncount = rand(4 * severity, 10 * severity) - sent_spiders_to_station = 0 - spiders = TRUE - - else - log_debug("Horde event, metroids selected.") - spawncount = rand(2 * severity, 4 * severity) - metroids = TRUE - - -/datum/event/horde_infestation/announce() - if(spiders) //Horrible way of doing this - command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') - if(metroids) //Horrible way of doing this - command_announcement.Announce("High-energy lifeforms detected coming aboard [station_name()]. All crew members, stay alert, and listen to security instructions.", "Lifesign Alert", new_sound = 'sound/misc/alarm1.ogg') - -/datum/event/horde_infestation/start() - if(spiders) - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - //CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work. - var/in_area = get_area(temp_vent) - if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) - continue - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) - if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change to 10 from 50 in order for spawns to work. - var/area/A = get_area(temp_vent) - if(!(A.forbid_events)) - vents += temp_vent - - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - //CHOMPEDIT START adding spider EGGS to the possible spawns instead of singular spiderling spawns. - var/spawn_spiderlings = pickweight(list( - /obj/effect/spider/spiderling/space = 95, - /obj/effect/spider/eggcluster/space = 4, - /obj/effect/spider/eggcluster/royal/space = 1 - )) - new spawn_spiderlings(vent.loc) //VOREStation Edit - No nurses //Oh my JESUS CHRIST, this slipped past me. Literally no nurses. Well guess what, nurses are back. - //CHOMPEDIT END - vents -= vent - spawncount-- - if(metroids) - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - var/spawn_metroids = pickweight(list( - /mob/living/simple_mob/metroid/juvenile/baby = 60, - /mob/living/simple_mob/metroid/juvenile/super = 30, - /mob/living/simple_mob/metroid/juvenile/alpha = 10, - /mob/living/simple_mob/metroid/juvenile/gamma = 3, - /mob/living/simple_mob/metroid/juvenile/zeta = 2, - /mob/living/simple_mob/metroid/juvenile/omega = 1, - )) - new spawn_metroids(get_turf(vent)) - vents -= vent - spawncount-- - vents.Cut() - -/datum/event/horde_infestation/end() - if(spiders) - return - if(metroids) - var/list/area_names = list() - for(var/metroids in existing_metroids) - var/mob/living/M = metroids - if(!M || M.stat == DEAD) - continue - var/area/metroid_area = get_area(M) - if(!metroid_area) //Huh, really? - if(!get_turf(M)) //No turf either? - qdel(M) //Must have been nullspaced - continue - area_names |= metroid_area.name - if(area_names.len) - var/english_list = english_list(area_names) - command_announcement.Announce("Sensors have narrowed down remaining lifeforms to the followng areas: [english_list]", "Lifesign Alert") +/datum/event/horde_infestation + announceWhen = 30 + endWhen = 200 + var/spawncount = 1 + var/list/vents = list() + var/spiders = FALSE + var/metroids = FALSE + +/datum/event/horde_infestation/setup() + if(prob(25)) //CHOMP Add 25% chance for the event to fail if chosen + log_debug("Horde infestation failed successfully.") + kill() + return //The event dies here. + + announceWhen = rand(announceWhen, announceWhen + 60) + + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) //Gathering together all possible areas to spawn mobs. + //CHOMPEdit: Added a couple areas to the exclusion. + var/in_area = get_area(temp_vent) + if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) + continue + if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) //No spawns on welded vents + if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. + vents += temp_vent + + if(prob(50)) //50/50 chance on spiders or metroids. + log_debug("Hord event, spiders selected.") + spawncount = rand(4 * severity, 10 * severity) + sent_spiders_to_station = 0 + spiders = TRUE + + else + log_debug("Horde event, metroids selected.") + spawncount = rand(2 * severity, 4 * severity) + metroids = TRUE + + +/datum/event/horde_infestation/announce() + if(spiders) //Horrible way of doing this + command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') + if(metroids) //Horrible way of doing this + command_announcement.Announce("High-energy lifeforms detected coming aboard [station_name()]. All crew members, stay alert, and listen to security instructions.", "Lifesign Alert", new_sound = 'sound/misc/alarm1.ogg') + +/datum/event/horde_infestation/start() + if(spiders) + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) + //CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work. + var/in_area = get_area(temp_vent) + if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) + continue + if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) + if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change to 10 from 50 in order for spawns to work. + var/area/A = get_area(temp_vent) + if(!(A.forbid_events)) + vents += temp_vent + + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + //CHOMPEDIT START adding spider EGGS to the possible spawns instead of singular spiderling spawns. + var/spawn_spiderlings = pickweight(list( + /obj/effect/spider/spiderling/space = 95, + /obj/effect/spider/eggcluster/space = 4, + /obj/effect/spider/eggcluster/royal/space = 1 + )) + new spawn_spiderlings(vent.loc) //VOREStation Edit - No nurses //Oh my JESUS CHRIST, this slipped past me. Literally no nurses. Well guess what, nurses are back. + //CHOMPEDIT END + vents -= vent + spawncount-- + if(metroids) + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + var/spawn_metroids = pickweight(list( + /mob/living/simple_mob/metroid/juvenile/baby = 60, + /mob/living/simple_mob/metroid/juvenile/super = 30, + /mob/living/simple_mob/metroid/juvenile/alpha = 10, + /mob/living/simple_mob/metroid/juvenile/gamma = 3, + /mob/living/simple_mob/metroid/juvenile/zeta = 2, + /mob/living/simple_mob/metroid/juvenile/omega = 1, + )) + new spawn_metroids(get_turf(vent)) + vents -= vent + spawncount-- + vents.Cut() + +/datum/event/horde_infestation/end() + if(spiders) + return + if(metroids) + var/list/area_names = list() + for(var/metroids in existing_metroids) + var/mob/living/M = metroids + if(!M || M.stat == DEAD) + continue + var/area/metroid_area = get_area(M) + if(!metroid_area) //Huh, really? + if(!get_turf(M)) //No turf either? + qdel(M) //Must have been nullspaced + continue + area_names |= metroid_area.name + if(area_names.len) + var/english_list = english_list(area_names) + command_announcement.Announce("Sensors have narrowed down remaining lifeforms to the followng areas: [english_list]", "Lifesign Alert") diff --git a/code/modules/events/mutants.dm b/code/modules/events/mutants.dm index 562163854a..13793f19d6 100644 --- a/code/modules/events/mutants.dm +++ b/code/modules/events/mutants.dm @@ -1,100 +1,100 @@ -#define LOC_KITCHEN 0 -#define LOC_ATMOS 1 -#define LOC_CHAPEL 2 -#define LOC_LIBRARY 3 -#define LOC_HYDRO 4 -#define LOC_TECH 5 -#define LOC_HANGAR1 6 -#define LOC_HANGAR2 7 -#define LOC_HANGAR3 8 - - -#define VERM_RATS 0 -#define VERM_LIZARDMEN 1 - -/datum/event/mutants - announceWhen = 25 - endWhen = 26 - var/location - var/locstring - var/vermin - var/vermstring - -/datum/event/mutants/start() - - location = rand(0,8) - var/list/turf/simulated/floor/turfs = list() - var/spawn_area_type - switch(location) - if(LOC_KITCHEN) - spawn_area_type = /area/crew_quarters/kitchen - locstring = "the kitchen" - if(LOC_ATMOS) - spawn_area_type = /area/engineering/atmos - locstring = "atmospherics" - if(LOC_CHAPEL) - spawn_area_type = /area/chapel/main - locstring = "the chapel" - if(LOC_LIBRARY) - spawn_area_type = /area/library - locstring = "the library" - if(LOC_HYDRO) - spawn_area_type = /area/hydroponics - locstring = "hydroponics" - if(LOC_TECH) - spawn_area_type = /area/storage/tech - locstring = "technical storage" - if(LOC_HANGAR1) - spawn_area_type = /area/hangar/one - locstring = "the hangar deck" - if(LOC_HANGAR2) - spawn_area_type = /area/hangar/two - locstring = "the hangar deck" - if(LOC_HANGAR3) - spawn_area_type = /area/hangar/three - locstring = "the hangar deck" - - for(var/areapath in typesof(spawn_area_type)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - if(turf_clear(F)) - turfs += F - - var/list/spawn_types = list() - var/max_number - vermin = rand(0,1) - switch(vermin) - if(VERM_RATS) - spawn_types = list(/mob/living/simple_mob/animal/passive/mouse/event) - max_number = 6 - vermstring = "mutant mice" - if(VERM_LIZARDMEN) - spawn_types = list(/mob/living/simple_mob/animal/passive/lizard/event) - max_number = 6 - vermstring = "mutant lizards" - - spawn(0) - var/num = rand(2,max_number) - while(turfs.len > 0 && num > 0) - var/turf/simulated/floor/T = pick(turfs) - turfs.Remove(T) - num-- - var/spawn_type = pick(spawn_types) - new spawn_type(T) - - -/datum/event/mutants/announce() - command_announcement.Announce("Bioscans indicate... What are those? It looks like [vermstring] have been breeding in [locstring]. Clear them out, just in case.", "Vermin infestation") - -#undef LOC_KITCHEN -#undef LOC_ATMOS -#undef LOC_CHAPEL -#undef LOC_LIBRARY -#undef LOC_HYDRO -#undef LOC_TECH -#undef LOC_HANGAR1 -#undef LOC_HANGAR2 -#undef LOC_HANGAR3 - -#undef VERM_RATS -#undef VERM_LIZARDMEN +#define LOC_KITCHEN 0 +#define LOC_ATMOS 1 +#define LOC_CHAPEL 2 +#define LOC_LIBRARY 3 +#define LOC_HYDRO 4 +#define LOC_TECH 5 +#define LOC_HANGAR1 6 +#define LOC_HANGAR2 7 +#define LOC_HANGAR3 8 + + +#define VERM_RATS 0 +#define VERM_LIZARDMEN 1 + +/datum/event/mutants + announceWhen = 25 + endWhen = 26 + var/location + var/locstring + var/vermin + var/vermstring + +/datum/event/mutants/start() + + location = rand(0,8) + var/list/turf/simulated/floor/turfs = list() + var/spawn_area_type + switch(location) + if(LOC_KITCHEN) + spawn_area_type = /area/crew_quarters/kitchen + locstring = "the kitchen" + if(LOC_ATMOS) + spawn_area_type = /area/engineering/atmos + locstring = "atmospherics" + if(LOC_CHAPEL) + spawn_area_type = /area/chapel/main + locstring = "the chapel" + if(LOC_LIBRARY) + spawn_area_type = /area/library + locstring = "the library" + if(LOC_HYDRO) + spawn_area_type = /area/hydroponics + locstring = "hydroponics" + if(LOC_TECH) + spawn_area_type = /area/storage/tech + locstring = "technical storage" + if(LOC_HANGAR1) + spawn_area_type = /area/hangar/one + locstring = "the hangar deck" + if(LOC_HANGAR2) + spawn_area_type = /area/hangar/two + locstring = "the hangar deck" + if(LOC_HANGAR3) + spawn_area_type = /area/hangar/three + locstring = "the hangar deck" + + for(var/areapath in typesof(spawn_area_type)) + var/area/A = locate(areapath) + for(var/turf/simulated/floor/F in A.contents) + if(turf_clear(F)) + turfs += F + + var/list/spawn_types = list() + var/max_number + vermin = rand(0,1) + switch(vermin) + if(VERM_RATS) + spawn_types = list(/mob/living/simple_mob/animal/passive/mouse/event) + max_number = 6 + vermstring = "mutant mice" + if(VERM_LIZARDMEN) + spawn_types = list(/mob/living/simple_mob/animal/passive/lizard/event) + max_number = 6 + vermstring = "mutant lizards" + + spawn(0) + var/num = rand(2,max_number) + while(turfs.len > 0 && num > 0) + var/turf/simulated/floor/T = pick(turfs) + turfs.Remove(T) + num-- + var/spawn_type = pick(spawn_types) + new spawn_type(T) + + +/datum/event/mutants/announce() + command_announcement.Announce("Bioscans indicate... What are those? It looks like [vermstring] have been breeding in [locstring]. Clear them out, just in case.", "Vermin infestation") + +#undef LOC_KITCHEN +#undef LOC_ATMOS +#undef LOC_CHAPEL +#undef LOC_LIBRARY +#undef LOC_HYDRO +#undef LOC_TECH +#undef LOC_HANGAR1 +#undef LOC_HANGAR2 +#undef LOC_HANGAR3 + +#undef VERM_RATS +#undef VERM_LIZARDMEN diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index d5eb151d3f..5552cf368f 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -1,74 +1,74 @@ -/datum/event/prison_break - startWhen = 5 - announceWhen = 75 - - var/releaseWhen = 60 - var/list/area/areas = list() //List of areas to affect. Filled by start() - - var/eventDept = "Security" //Department name in announcement - var/list/areaName = list("Brig") //Names of areas mentioned in AI and Engineering announcements - var/list/areaType = list(/area/security/prison, /area/security/brig) //Area types to include. - var/list/areaNotType = list() //Area types to specifically exclude. - -/datum/event/prison_break/virology - eventDept = "Medical" - areaName = list("Virology") - areaType = list(/area/medical/virology, /area/medical/virologyaccess) - -/datum/event/prison_break/xenobiology - eventDept = "Science" - areaName = list("Xenobiology") - areaType = list(/area/rnd/xenobiology) - areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) - -/datum/event/prison_break/station - eventDept = "Station" - areaName = list("Brig","Virology","Xenobiology") - areaType = list(/area/security/prison, /area/security/brig, /area/medical/virology, /area/medical/virologyaccess, /area/rnd/xenobiology) - areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) - - -/datum/event/prison_break/setup() - announceWhen = rand(75, 105) - releaseWhen = rand(60, 90) - - src.endWhen = src.releaseWhen+2 - - -/datum/event/prison_break/announce() - if(areas && areas.len > 0) - command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert") - - -/datum/event/prison_break/start() - for(var/area/A in world) - if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType)) - areas += A - - if(areas && areas.len > 0) - var/my_department = "[station_name()] firewall subroutines" - var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.
                    " - for(var/obj/machinery/message_server/MS in machines) - MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2) - for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, "Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].") - - else - to_world_log("ERROR: Could not initate grey-tide. Unable to find suitable containment area.") - kill() - - -/datum/event/prison_break/tick() - if(activeFor == releaseWhen) - if(areas && areas.len > 0) - var/obj/machinery/power/apc/theAPC = null - for(var/area/A in areas) - theAPC = A.get_apc() - if(theAPC && theAPC.operating) //If the apc's off, it's a little hard to overload the lights. - for(var/obj/machinery/light/L in A) - L.flicker(10) - - -/datum/event/prison_break/end() - for(var/area/A in shuffle(areas)) - A.prison_break() +/datum/event/prison_break + startWhen = 5 + announceWhen = 75 + + var/releaseWhen = 60 + var/list/area/areas = list() //List of areas to affect. Filled by start() + + var/eventDept = "Security" //Department name in announcement + var/list/areaName = list("Brig") //Names of areas mentioned in AI and Engineering announcements + var/list/areaType = list(/area/security/prison, /area/security/brig) //Area types to include. + var/list/areaNotType = list() //Area types to specifically exclude. + +/datum/event/prison_break/virology + eventDept = "Medical" + areaName = list("Virology") + areaType = list(/area/medical/virology, /area/medical/virologyaccess) + +/datum/event/prison_break/xenobiology + eventDept = "Science" + areaName = list("Xenobiology") + areaType = list(/area/rnd/xenobiology) + areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) + +/datum/event/prison_break/station + eventDept = "Station" + areaName = list("Brig","Virology","Xenobiology") + areaType = list(/area/security/prison, /area/security/brig, /area/medical/virology, /area/medical/virologyaccess, /area/rnd/xenobiology) + areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) + + +/datum/event/prison_break/setup() + announceWhen = rand(75, 105) + releaseWhen = rand(60, 90) + + src.endWhen = src.releaseWhen+2 + + +/datum/event/prison_break/announce() + if(areas && areas.len > 0) + command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert") + + +/datum/event/prison_break/start() + for(var/area/A in world) + if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType)) + areas += A + + if(areas && areas.len > 0) + var/my_department = "[station_name()] firewall subroutines" + var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.
                    " + for(var/obj/machinery/message_server/MS in machines) + MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2) + for(var/mob/living/silicon/ai/A in player_list) + to_chat(A, "Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].") + + else + to_world_log("ERROR: Could not initate grey-tide. Unable to find suitable containment area.") + kill() + + +/datum/event/prison_break/tick() + if(activeFor == releaseWhen) + if(areas && areas.len > 0) + var/obj/machinery/power/apc/theAPC = null + for(var/area/A in areas) + theAPC = A.get_apc() + if(theAPC && theAPC.operating) //If the apc's off, it's a little hard to overload the lights. + for(var/obj/machinery/light/L in A) + L.flicker(10) + + +/datum/event/prison_break/end() + for(var/area/A in shuffle(areas)) + A.prison_break() diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index f2966ccc27..07a077f6bd 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -1,68 +1,68 @@ -/datum/event/radiation_storm - var/const/enterBelt = 30 - var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation - var/const/leaveBelt = 80 - var/const/revokeAccess = 165 - startWhen = 2 - announceWhen = 1 - endWhen = revokeAccess - var/postStartTicks = 0 - -/datum/event/radiation_storm/announce() - command_announcement.Announce("High levels of radiation detected near \the [station_name()]. Please evacuate into one of the shielded maintenance tunnels or dorms. The area of the cafeteria is also shielded.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') //VOREStation Edit - Dorms ref //CHOMPEdit: Restored original message, TFF 16/4/20 - mention additional safe place(s) in announcement - -/datum/event/radiation_storm/start() - make_maint_all_access() - -/datum/event/radiation_storm/tick() - if(activeFor == enterBelt) - command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") //CHOMPEdit: Restored original message - radiate() - - if(activeFor >= enterBelt && activeFor <= leaveBelt) - postStartTicks++ - - if(postStartTicks == radIntervall) - postStartTicks = 0 - radiate() - - else if(activeFor == leaveBelt) - command_announcement.Announce("The station has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") //CHOMPEdit: Restored original message -/datum/event/radiation_storm/proc/radiate() - var/radiation_level = rand(15, 35) - for(var/z in using_map.station_levels) - SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) - - for(var/mob/living/carbon/C in living_mob_list) - if(!(C.z in using_map.station_levels) || C.isSynthetic() || isbelly(C.loc)) - continue - var/area/A = get_area(C) - if(!A) - continue - if(A.flags & RAD_SHIELDED) - continue - if(istype(C,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = C - var/chance = 5.0 - chance -= (chance / 100) * C.getarmor(null, "rad") - //CHOMPEdit Start - if(C.species.traits.Find(/datum/trait/positive/rad_resistance)) - chance -= (chance / 100) * 20 - if(C.species.traits.Find(/datum/trait/positive/rad_resistance_extreme)) - chance -= (chance / 100) * 60 - if(C.species.traits.Find(/datum/trait/positive/rad_immune)) - chance -= (chance / 100) * 100 - if(prob(round(chance, 0.01))) - //CHOMPEdit End - if (prob(75)) - randmutb(H) // Applies bad mutation - domutcheck(H,null,MUTCHK_FORCED) - else - randmutg(H) // Applies good mutation - domutcheck(H,null,MUTCHK_FORCED) - -/datum/event/radiation_storm/end() - revoke_maint_all_access() - -/datum/event/radiation_storm/syndicate/radiate() - return +/datum/event/radiation_storm + var/const/enterBelt = 30 + var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation + var/const/leaveBelt = 80 + var/const/revokeAccess = 165 + startWhen = 2 + announceWhen = 1 + endWhen = revokeAccess + var/postStartTicks = 0 + +/datum/event/radiation_storm/announce() + command_announcement.Announce("High levels of radiation detected near \the [station_name()]. Please evacuate into one of the shielded maintenance tunnels or dorms. The area of the cafeteria is also shielded.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') //VOREStation Edit - Dorms ref //CHOMPEdit: Restored original message, TFF 16/4/20 - mention additional safe place(s) in announcement + +/datum/event/radiation_storm/start() + make_maint_all_access() + +/datum/event/radiation_storm/tick() + if(activeFor == enterBelt) + command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") //CHOMPEdit: Restored original message + radiate() + + if(activeFor >= enterBelt && activeFor <= leaveBelt) + postStartTicks++ + + if(postStartTicks == radIntervall) + postStartTicks = 0 + radiate() + + else if(activeFor == leaveBelt) + command_announcement.Announce("The station has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") //CHOMPEdit: Restored original message +/datum/event/radiation_storm/proc/radiate() + var/radiation_level = rand(15, 35) + for(var/z in using_map.station_levels) + SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) + + for(var/mob/living/carbon/C in living_mob_list) + if(!(C.z in using_map.station_levels) || C.isSynthetic() || isbelly(C.loc)) + continue + var/area/A = get_area(C) + if(!A) + continue + if(A.flags & RAD_SHIELDED) + continue + if(istype(C,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = C + var/chance = 5.0 + chance -= (chance / 100) * C.getarmor(null, "rad") + //CHOMPEdit Start + if(C.species.traits.Find(/datum/trait/positive/rad_resistance)) + chance -= (chance / 100) * 20 + if(C.species.traits.Find(/datum/trait/positive/rad_resistance_extreme)) + chance -= (chance / 100) * 60 + if(C.species.traits.Find(/datum/trait/positive/rad_immune)) + chance -= (chance / 100) * 100 + if(prob(round(chance, 0.01))) + //CHOMPEdit End + if (prob(75)) + randmutb(H) // Applies bad mutation + domutcheck(H,null,MUTCHK_FORCED) + else + randmutg(H) // Applies good mutation + domutcheck(H,null,MUTCHK_FORCED) + +/datum/event/radiation_storm/end() + revoke_maint_all_access() + +/datum/event/radiation_storm/syndicate/radiate() + return diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index fef2e3f6b1..48c9b91c22 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -1,11 +1,11 @@ -/var/global/spacevines_spawned = 0 - -/datum/event/spacevine - announceWhen = 60 - -/datum/event/spacevine/start() - spacevine_infestation() - spacevines_spawned = 1 - -/datum/event/spacevine/announce() - level_seven_announcement() +/var/global/spacevines_spawned = 0 + +/datum/event/spacevine + announceWhen = 60 + +/datum/event/spacevine/start() + spacevine_infestation() + spacevines_spawned = 1 + +/datum/event/spacevine/announce() + level_seven_announcement() diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index dd8152e893..0618bd4ccc 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -1,51 +1,51 @@ -/var/global/sent_spiders_to_station = 0 - -/datum/event/spider_infestation - announceWhen = 90 - var/spawncount = 1 - - -/datum/event/spider_infestation/setup() - if(prob(25)) //CHOMP Add 25% chance for the event to fail if chosen - log_debug("Spider infestation failed successfully.") - kill() - return - - announceWhen = rand(announceWhen, announceWhen + 60) - spawncount = rand(4 * severity, 10 * severity) //spiderlings only have a 50% chance to grow big and strong //CHOMP Edit: old: 2/4 new: 6/14 new: 4/10 - sent_spiders_to_station = 0 - -/datum/event/spider_infestation/announce() - command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') - - -/datum/event/spider_infestation/start() - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - //CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work. - var/in_area = get_area(temp_vent) - if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) - continue - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) - if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change to 10 from 50 in order for spawns to work. - var/area/A = get_area(temp_vent) - if(!(A.forbid_events)) - vents += temp_vent - - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - - //CHOMPEDIT START adding spider EGGS to the possible spawns instead of singular spiderling spawns. - if(severity == 3) - var/spawn_spiderlings = pickweight(list( - /obj/effect/spider/spiderling/space = 95, - /obj/effect/spider/eggcluster/space = 4, - /obj/effect/spider/eggcluster/royal/space = 1 - )) - new spawn_spiderlings(vent.loc) - if(severity < 3) //If the severity is less than 3, only spawn regular spiderlings - new /obj/effect/spider/spiderling/broodling(vent.loc) //VOREStation Edit - No nurses //CHOMP Edit Oh my JESUS CHRIST, this slipped past me. Literally no nurses. Well guess what, nurses are back. - - //CHOMPEDIT END - vents -= vent - spawncount-- +/var/global/sent_spiders_to_station = 0 + +/datum/event/spider_infestation + announceWhen = 90 + var/spawncount = 1 + + +/datum/event/spider_infestation/setup() + if(prob(25)) //CHOMP Add 25% chance for the event to fail if chosen + log_debug("Spider infestation failed successfully.") + kill() + return + + announceWhen = rand(announceWhen, announceWhen + 60) + spawncount = rand(4 * severity, 10 * severity) //spiderlings only have a 50% chance to grow big and strong //CHOMP Edit: old: 2/4 new: 6/14 new: 4/10 + sent_spiders_to_station = 0 + +/datum/event/spider_infestation/announce() + command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') + + +/datum/event/spider_infestation/start() + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) + //CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work. + var/in_area = get_area(temp_vent) + if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) + continue + if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) + if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change to 10 from 50 in order for spawns to work. + var/area/A = get_area(temp_vent) + if(!(A.forbid_events)) + vents += temp_vent + + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + + //CHOMPEDIT START adding spider EGGS to the possible spawns instead of singular spiderling spawns. + if(severity == 3) + var/spawn_spiderlings = pickweight(list( + /obj/effect/spider/spiderling/space = 95, + /obj/effect/spider/eggcluster/space = 4, + /obj/effect/spider/eggcluster/royal/space = 1 + )) + new spawn_spiderlings(vent.loc) + if(severity < 3) //If the severity is less than 3, only spawn regular spiderlings + new /obj/effect/spider/spiderling/broodling(vent.loc) //VOREStation Edit - No nurses //CHOMP Edit Oh my JESUS CHRIST, this slipped past me. Literally no nurses. Well guess what, nurses are back. + + //CHOMPEDIT END + vents -= vent + spawncount-- diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index 241ed83db0..383a2a0410 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -1,7 +1,7 @@ -/datum/event/spontaneous_appendicitis/start() - if(prob(50)) - kill() - return - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) - if(H.client && H.appendicitis()) - break +/datum/event/spontaneous_appendicitis/start() + if(prob(50)) + kill() + return + for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + if(H.client && H.appendicitis()) + break diff --git a/code/modules/examine/descriptions/containers_ch.dm b/code/modules/examine/descriptions/containers_ch.dm index 0f2e304fbe..5b0451b36a 100644 --- a/code/modules/examine/descriptions/containers_ch.dm +++ b/code/modules/examine/descriptions/containers_ch.dm @@ -1,2 +1,2 @@ -/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps +/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps description_fluff = "Its a wonder how such an ancient and obscure drink from Earth made it all the way out here." \ No newline at end of file diff --git a/code/modules/examine/descriptions/paperwork.dm b/code/modules/examine/descriptions/paperwork.dm index 6e837095fa..75840d9774 100644 --- a/code/modules/examine/descriptions/paperwork.dm +++ b/code/modules/examine/descriptions/paperwork.dm @@ -1,21 +1,21 @@ -/obj/item/weapon/pen - description_info = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available: -Pen and crayon commands -\[br\] : Creates a linebreak. -\[center\] - \[/center\] : Centers the text. -\[h1\] - \[/h1\] : Makes the text a first level heading. -\[h2\] - \[/h2\] : Makes the text a second level headin. -\[h3\] - \[/h3\] : Makes the text a third level heading. -\[b\] - \[/b\] : Makes the text bold. -\[i\] - \[/i\] : Makes the text italic. -\[u\] - \[/u\] : Makes the text underlined. -\[large\] - \[/large\] : Increases the size of the text. -\[sign\] : Inserts a signature of your name in a foolproof way. -\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms. -\[date\] : Inserts today's station date. -\[time\] : Inserts the current station time. -Pen exclusive commands -\[small\] - \[/small\] : Decreases the size of the text. -\[list\] - \[/list\] : A list. -\[*\] : A dot used for lists. -\[hr\] : Adds a horizontal rule."} +/obj/item/weapon/pen + description_info = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available: +Pen and crayon commands +\[br\] : Creates a linebreak. +\[center\] - \[/center\] : Centers the text. +\[h1\] - \[/h1\] : Makes the text a first level heading. +\[h2\] - \[/h2\] : Makes the text a second level headin. +\[h3\] - \[/h3\] : Makes the text a third level heading. +\[b\] - \[/b\] : Makes the text bold. +\[i\] - \[/i\] : Makes the text italic. +\[u\] - \[/u\] : Makes the text underlined. +\[large\] - \[/large\] : Increases the size of the text. +\[sign\] : Inserts a signature of your name in a foolproof way. +\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms. +\[date\] : Inserts today's station date. +\[time\] : Inserts the current station time. +Pen exclusive commands +\[small\] - \[/small\] : Decreases the size of the text. +\[list\] - \[/list\] : A list. +\[*\] : A dot used for lists. +\[hr\] : Adds a horizontal rule."} diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm index 46338290f9..776022b4ab 100644 --- a/code/modules/flufftext/look_up.dm +++ b/code/modules/flufftext/look_up.dm @@ -1,65 +1,65 @@ -// Implements a verb to make your character look upward, mostly intended for the surface. - -/mob/living/verb/look_up() - set name = "Look Up" - set category = "IC" - set desc = "Look above you, and hope there's no ceiling spiders." - - to_chat(usr, "You look upwards...") - - var/turf/T = get_turf(usr) - if(!T) // In null space. - to_chat(usr, span("warning", "You appear to be in a place without any sort of concept of direction. You have bigger problems to worry about.")) - return - - if(!T.is_outdoors()) // They're inside. - to_chat(usr, "You see nothing interesting.") - return - - else // They're outside and hopefully on a planet. - if(!(T.z in SSplanets.z_to_planet) || !(SSplanets.z_to_planet[T.z])) - to_chat(usr, span("warning", "You appear to be outside, but not on a planet... Something is wrong.")) - return - var/datum/planet/P = SSplanets.z_to_planet[T.z] - - var/datum/weather_holder/WH = P.weather_holder - - // Describe the current weather. - if(WH.current_weather.observed_message) - to_chat(usr, WH.current_weather.observed_message) - - // Describe the current weather. - if(WH.imminent_weather) - var/datum/weather/coming_weather = WH.allowed_weather_types[WH.imminent_weather] - to_chat(usr, coming_weather.imminent_transition_message) - - // If we can see the sky, we'll see things like sun position, phase of the moon, etc. - if(!WH.current_weather.sky_visible) - to_chat(usr, "You can't see the sky clearly due to the [WH.current_weather.name].") - else - // Sun-related output. - if(P.sun_name) - var/afternoon = P.current_time.seconds_stored > (P.current_time.seconds_in_day / 2) - - var/sun_message = null - switch(P.sun_position) - if(0 to 0.4) // Night - sun_message = "It is night time, [P.sun_name] is not visible." - if(0.4 to 0.5) // Twilight - sun_message = "The sky is in twilight, however [P.sun_name] is not visible." - if(0.5 to 0.7) // Sunrise/set. - sun_message = "[P.sun_name] is slowly [!afternoon ? "rising from" : "setting on"] the horizon." - if(0.7 to 0.9) // Morning/evening - sun_message = "[P.sun_name]'s position implies it is currently [!afternoon ? "early" : "late"] in the day." - if(0.9 to 1.0) // Noon - sun_message = "It's high noon. [P.sun_name] hangs directly above you." - - to_chat(usr, sun_message) - - // Now for the moon. - if(P.moon_name) - if(P.moon_phase == MOON_PHASE_NEW_MOON) - to_chat(usr, "[P.moon_name] is not visible. It must be a new moon.") - else - to_chat(usr, "[P.moon_name] appears to currently be a [P.moon_phase].") - +// Implements a verb to make your character look upward, mostly intended for the surface. + +/mob/living/verb/look_up() + set name = "Look Up" + set category = "IC" + set desc = "Look above you, and hope there's no ceiling spiders." + + to_chat(usr, "You look upwards...") + + var/turf/T = get_turf(usr) + if(!T) // In null space. + to_chat(usr, span("warning", "You appear to be in a place without any sort of concept of direction. You have bigger problems to worry about.")) + return + + if(!T.is_outdoors()) // They're inside. + to_chat(usr, "You see nothing interesting.") + return + + else // They're outside and hopefully on a planet. + if(!(T.z in SSplanets.z_to_planet) || !(SSplanets.z_to_planet[T.z])) + to_chat(usr, span("warning", "You appear to be outside, but not on a planet... Something is wrong.")) + return + var/datum/planet/P = SSplanets.z_to_planet[T.z] + + var/datum/weather_holder/WH = P.weather_holder + + // Describe the current weather. + if(WH.current_weather.observed_message) + to_chat(usr, WH.current_weather.observed_message) + + // Describe the current weather. + if(WH.imminent_weather) + var/datum/weather/coming_weather = WH.allowed_weather_types[WH.imminent_weather] + to_chat(usr, coming_weather.imminent_transition_message) + + // If we can see the sky, we'll see things like sun position, phase of the moon, etc. + if(!WH.current_weather.sky_visible) + to_chat(usr, "You can't see the sky clearly due to the [WH.current_weather.name].") + else + // Sun-related output. + if(P.sun_name) + var/afternoon = P.current_time.seconds_stored > (P.current_time.seconds_in_day / 2) + + var/sun_message = null + switch(P.sun_position) + if(0 to 0.4) // Night + sun_message = "It is night time, [P.sun_name] is not visible." + if(0.4 to 0.5) // Twilight + sun_message = "The sky is in twilight, however [P.sun_name] is not visible." + if(0.5 to 0.7) // Sunrise/set. + sun_message = "[P.sun_name] is slowly [!afternoon ? "rising from" : "setting on"] the horizon." + if(0.7 to 0.9) // Morning/evening + sun_message = "[P.sun_name]'s position implies it is currently [!afternoon ? "early" : "late"] in the day." + if(0.9 to 1.0) // Noon + sun_message = "It's high noon. [P.sun_name] hangs directly above you." + + to_chat(usr, sun_message) + + // Now for the moon. + if(P.moon_name) + if(P.moon_phase == MOON_PHASE_NEW_MOON) + to_chat(usr, "[P.moon_name] is not visible. It must be a new moon.") + else + to_chat(usr, "[P.moon_name] appears to currently be a [P.moon_phase].") + diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index 1c1e8046ba..0205d50a02 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -1,784 +1,784 @@ -// This folder contains code that was originally ported from Apollo Station and then refactored/optimized/changed. - -// Tracks precooked food to stop deep fried baked grilled grilled grilled diona nymph cereal. -/obj/item/weapon/reagent_containers/food/snacks - var/tmp/list/cooked = list() - -// Root type for cooking machines. See following files for specific implementations. -/obj/machinery/appliance - name = "cooker" - desc = "You shouldn't be seeing this!" - icon = 'icons/obj/cooking_machines.dmi' - var/appliancetype = 0 - density = TRUE - anchored = TRUE - - use_power = USE_POWER_IDLE - idle_power_usage = 5 // Power used when turned on, but not processing anything - active_power_usage = 1000 // Power used when turned on and actively cooking something - - var/cooking_power = 0 // Effectiveness/speed at cooking - var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power. - var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage - var/max_contents = 1 // Maximum number of things this appliance can simultaneously cook - var/on_icon // Icon state used when cooking. - var/off_icon // Icon state used when not cooking. - var/cooking = FALSE // Whether or not the machine is currently operating. - var/cook_type // A string value used to track what kind of food this machine makes. - var/can_cook_mobs // Whether or not this machine accepts grabbed mobs. - var/mobdamagetype = BRUTE // Burn damage for cooking appliances, brute for cereal/candy - var/food_color // Colour of resulting food item. - var/cooked_sound = 'sound/machines/ding.ogg' // Sound played when cooking completes. - var/can_burn_food = FALSE // Can the object burn food that is left inside? - var/burn_chance = 10 // How likely is the food to burn? - var/list/cooking_objs = list() // List of things being cooked - - // If the machine has multiple output modes, define them here. - var/selected_option - var/list/output_options = list() - var/list/datum/recipe/available_recipes - - var/container_type = null - - var/combine_first = FALSE // If TRUE, this appliance will do combination cooking before checking recipes - -/obj/machinery/appliance/Initialize() - . = ..() - - default_apply_parts() - - if(output_options.len) - verbs += /obj/machinery/appliance/proc/choose_output - - if (!available_recipes) - available_recipes = new - - for(var/datum/recipe/test as anything in subtypesof(/datum/recipe)) - if((appliancetype & initial(test.appliance))) - available_recipes += new test - -/obj/machinery/appliance/Destroy() - for(var/datum/cooking_item/CI as anything in cooking_objs) - qdel(CI.container)//Food is fragile, it probably doesnt survive the destruction of the machine - cooking_objs -= CI - qdel(CI) - return ..() - -/obj/machinery/appliance/examine(var/mob/user) - . = ..() - if(Adjacent(user)) - . += list_contents(user) - -/obj/machinery/appliance/proc/list_contents(var/mob/user) - if (cooking_objs.len) - var/string = "Contains..." - for(var/datum/cooking_item/CI as anything in cooking_objs) - string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]
                    " - return string - else - to_chat(user, "") - -/obj/machinery/appliance/proc/report_progress_tgui(datum/cooking_item/CI) - if(!CI || !CI.max_cookwork) - return list("average", "Not Cooking.") - - if(!CI.cookwork) - return list("blue", "Cold.") - - var/progress = CI.cookwork / CI.max_cookwork - - if (progress < 0.25) - return list("blue", "It's barely started cooking.") - if (progress < 0.75) - return list("average", "It's cooking away nicely.") - if (progress < 1) - return list("good", "It's almost ready!") - - var/half_overcook = (CI.overcook_mult - 1)*0.5 - if (progress < 1+half_overcook) - return list("good", "It's done!") - if (progress < CI.overcook_mult) - return list("bad", "It looks overcooked, get it out!") - else - return list("bad", "It is burning!") - -/obj/machinery/appliance/proc/report_progress(var/datum/cooking_item/CI) - if (!CI || !CI.max_cookwork) - return null - - if (!CI.cookwork) - return "It is cold." - var/progress = CI.cookwork / CI.max_cookwork - - if (progress < 0.25) - return "It's barely started cooking." - if (progress < 0.75) - return "It's cooking away nicely." - if (progress < 1) - return "It's almost ready!" - - var/half_overcook = (CI.overcook_mult - 1)*0.5 - if (progress < 1+half_overcook) - return "It is done !" - if (progress < CI.overcook_mult) - return "It looks overcooked, get it out!" - else - return "It is burning!" - -/obj/machinery/appliance/update_icon() - if (!stat && cooking_objs.len) - icon_state = on_icon - - else - icon_state = off_icon - -/obj/machinery/appliance/verb/toggle_power() - set name = "Toggle Power" - set category = "Object" - set src in view() - - attempt_toggle_power(usr) - -/obj/machinery/appliance/proc/attempt_toggle_power(mob/user) - if (!isliving(user)) - return - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You lack the dexterity to do that!") - return - - if (user.stat || user.restrained() || user.incapacitated()) - return - - if (!Adjacent(user) && !issilicon(user)) - to_chat(user, "You can't reach [src] from here!") - return - - if (stat & POWEROFF)//Its turned off - stat &= ~POWEROFF - use_power = 1 - user.visible_message("[user] turns [src] on.", "You turn on [src].") - - else //Its on, turn it off - stat |= POWEROFF - use_power = 0 - user.visible_message("[user] turns [src] off.", "You turn off [src].") - cooking = FALSE // Stop cooking here, too, just in case. - - playsound(src, 'sound/machines/click.ogg', 40, 1) - update_icon() - -/obj/machinery/appliance/AICtrlClick(mob/user) - attempt_toggle_power(user) - -/obj/machinery/appliance/proc/choose_output() - set src in view() - set name = "Choose output" - set category = "Object" - - if (!isliving(usr)) - return - - if (!usr.IsAdvancedToolUser()) - to_chat(usr, "You lack the dexterity to do that!") - return - - if (usr.stat || usr.restrained() || usr.incapacitated()) - return - - if (!Adjacent(usr) && !issilicon(usr)) - to_chat(usr, "You can't adjust the [src] from this distance, get closer!") - return - - if(output_options.len) - var/choice = tgui_input_list(usr, "What specific food do you wish to make with \the [src]?", "Food Output Choice", output_options+"Default") - if(!choice) - return - if(choice == "Default") - selected_option = null - to_chat(usr, "You decide not to make anything specific with \the [src].") - else - selected_option = choice - to_chat(usr, "You prepare \the [src] to make \a [selected_option] with the next thing you put in. Try putting several ingredients in a container!") - -//Handles all validity checking and error messages for inserting things -/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user) - if(istype(I.loc, /mob/living/silicon)) - return 0 - else if (istype(I.loc, /obj/item/rig_module)) - return 0 - - // We are trying to cook a grabbed mob. - var/obj/item/weapon/grab/G = I - if(istype(G)) - - if(!can_cook_mobs) - to_chat(user, "That's not going to fit.") - return 0 - - if(!isliving(G.affecting)) - to_chat(user, "You can't cook that.") - return 0 - - return 2 - - - if (!has_space(I)) - to_chat(user, "There's no room in [src] for that!") - return 0 - - - if (container_type && istype(I, container_type)) - return 1 - - // We're trying to cook something else. Check if it's valid. - var/obj/item/weapon/reagent_containers/food/snacks/check = I - if(istype(check) && islist(check.cooked) && (cook_type in check.cooked)) - to_chat(user, "\The [check] has already been [cook_type].") - return 0 - else if(istype(check, /obj/item/weapon/reagent_containers/glass)) - to_chat(user, "That would probably break [src].") - return 0 - else if(istype(check, /obj/item/weapon/disk/nuclear)) - to_chat(user, "You can't cook that.") - return 0 - else if(I.has_tool_quality(TOOL_CROWBAR) || I.has_tool_quality(TOOL_SCREWDRIVER) || istype(I, /obj/item/weapon/storage/part_replacer)) // You can't cook tools, dummy. - return 0 - else if(!istype(check) && !istype(check, /obj/item/weapon/holder)) - to_chat(user, "That's not edible.") - return 0 - - return 1 - - -//This function is overridden by cookers that do stuff with containers -/obj/machinery/appliance/proc/has_space(var/obj/item/I) - if(cooking_objs.len >= max_contents) - return FALSE - - return TRUE - -/obj/machinery/appliance/attackby(var/obj/item/I, var/mob/user) - if(!cook_type || (stat & (BROKEN))) - to_chat(user, "\The [src] is not working.") - return FALSE - - var/obj/item/ToCook = I - - if(istype(I, /obj/item/weapon/gripper)) - var/obj/item/weapon/gripper/GR = I - var/obj/item/Wrap = GR.wrapped - if(Wrap) - Wrap.loc = get_turf(src) - var/result = can_insert(Wrap, user) - if(!result) - Wrap.forceMove(GR) - if(!(default_deconstruction_screwdriver(user, I))) - default_part_replacement(user, I) - return - - if(QDELETED(GR.wrapped)) - GR.wrapped = null - - if(GR?.wrapped.loc != src) - GR.drop_item_nm() - - ToCook = Wrap - else - attack_hand(user) - return - - else - var/result = can_insert(I, user) - if(!result) - if(!(default_deconstruction_screwdriver(user, I))) - default_part_replacement(user, I) - return - - if(result == 2) - var/obj/item/weapon/grab/G = I - if (G && istype(G) && G.affecting) - cook_mob(G.affecting, user) - return - - //From here we can start cooking food - add_content(ToCook, user) - update_icon() - -//Override for container mechanics -/obj/machinery/appliance/proc/add_content(var/obj/item/I, var/mob/user) - if(!user.unEquip(I) && !isturf(I.loc)) - return - - var/datum/cooking_item/CI = has_space(I) - if (istype(I, /obj/item/weapon/reagent_containers/cooking_container) && CI == 1) - var/obj/item/weapon/reagent_containers/cooking_container/CC = I - CI = new /datum/cooking_item/(CC) - I.forceMove(src) - cooking_objs.Add(CI) - user.visible_message("\The [user] puts \the [I] into \the [src].") - if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing. - return TRUE - else - if (CI && istype(CI)) - I.forceMove(CI.container) - - else //Something went wrong - return FALSE - - if (selected_option) - CI.combine_target = selected_option - - // We can actually start cooking now. - user.visible_message("\The [user] puts \the [I] into \the [src].") - - get_cooking_work(CI) - cooking = TRUE - return CI - -/obj/machinery/appliance/proc/get_cooking_work(var/datum/cooking_item/CI) - for (var/obj/item/J in CI.container) - cookwork_by_item(J, CI) - - for(var/datum/reagent/R as anything in CI.container.reagents.reagent_list) - if (istype(R, /datum/reagent/nutriment)) - CI.max_cookwork += R.volume *2//Added reagents contribute less than those in food items due to granular form - - //Nonfat reagents will soak oil - if (!istype(R, /datum/reagent/nutriment/triglyceride)) - CI.max_oil += R.volume * 0.25 - else - CI.max_cookwork += R.volume - CI.max_oil += R.volume * 0.10 - - //Rescaling cooking work to avoid insanely long times for large things - var/buffer = CI.max_cookwork - CI.max_cookwork = 0 - var/multiplier = 1 - var/step = 4 - while (buffer > step) - buffer -= step - CI.max_cookwork += step*multiplier - multiplier *= 0.95 - - CI.max_cookwork += buffer*multiplier - -//Just a helper to save code duplication in the above -/obj/machinery/appliance/proc/cookwork_by_item(var/obj/item/I, var/datum/cooking_item/CI) - var/obj/item/weapon/reagent_containers/food/snacks/S = I - var/work = 0 - if (istype(S)) - if (S.reagents) - for(var/datum/reagent/R as anything in S.reagents.reagent_list) - if (istype(R, /datum/reagent/nutriment)) - work += R.volume *3//Core nutrients contribute much more than peripheral chemicals - - //Nonfat reagents will soak oil - if (!istype(R, /datum/reagent/nutriment/triglyceride)) - CI.max_oil += R.volume * 0.35 - else - work += R.volume - CI.max_oil += R.volume * 0.15 - - - else if(istype(I, /obj/item/weapon/holder)) - var/obj/item/weapon/holder/H = I - if (H.held_mob) - work += ((H.held_mob.mob_size * H.held_mob.size_multiplier) * (H.held_mob.mob_size * H.held_mob.size_multiplier) * 2)+2 - - CI.max_cookwork += work - -//Called every tick while we're cooking something -/obj/machinery/appliance/proc/do_cooking_tick(var/datum/cooking_item/CI) - if (!istype(CI) || !CI.max_cookwork) - return FALSE - - var/was_done = FALSE - if (CI.cookwork >= CI.max_cookwork) - was_done = TRUE - - CI.cookwork += cooking_power - - if (!was_done && CI.cookwork >= CI.max_cookwork) - //If cookwork has gone from above to below 0, then this item finished cooking - finish_cooking(CI) - - else if (!CI.burned && CI.cookwork > min(CI.max_cookwork * CI.overcook_mult, CI.max_cookwork + 30)) - burn_food(CI) - - // Gotta hurt. - for(var/obj/item/weapon/holder/H in CI.container.contents) - var/mob/living/M = H.held_mob - if(M) - M.apply_damage(rand(1,3) * (1/M.size_multiplier), mobdamagetype, pick(BP_ALL)) - - return TRUE - -/obj/machinery/appliance/process() - if(cooking_power > 0 && cooking) - var/all_done_cooking = TRUE - for(var/datum/cooking_item/CI in cooking_objs) - do_cooking_tick(CI) - if(CI.max_cookwork > 0) - all_done_cooking = FALSE - if(all_done_cooking) - cooking = FALSE - update_icon() - - -/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) - - src.visible_message("\The [src] pings!") - if(cooked_sound) - playsound(get_turf(src), cooked_sound, 50, 1) - //Check recipes first, a valid recipe overrides other options - var/datum/recipe/recipe = null - var/atom/C = null - if (CI.container) - C = CI.container - else - C = src - recipe = select_recipe(available_recipes,C) - - if (recipe) - CI.result_type = 4//Recipe type, a specific recipe will transform the ingredients into a new food - var/list/results = recipe.make_food(C) - - var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes - - for (var/atom/movable/AM in results) - AM.forceMove(temp) - - //making multiple copies of a recipe from one container. For example, tons of fries - while (select_recipe(available_recipes,C) == recipe) - var/list/TR = list() - TR += recipe.make_food(C) - for (var/atom/movable/AM in TR) //Move results to buffer - AM.forceMove(temp) - results += TR - - - for(var/obj/item/weapon/reagent_containers/food/snacks/R as anything in results) - R.forceMove(C) //Move everything from the buffer back to the container - R.cooked |= cook_type - - QDEL_NULL(temp) //delete buffer object - . = 1 //None of the rest of this function is relevant for recipe cooking - - else if(CI.combine_target) - CI.result_type = 3//Combination type. We're making something out of our ingredients - . = combination_cook(CI) - - - else - //Otherwise, we're just doing standard modification cooking. change a color + name - for (var/obj/item/i in CI.container) - modify_cook(i, CI) - - //Final step. Cook function just cooks batter for now. - for (var/obj/item/weapon/reagent_containers/food/snacks/S in CI.container) - S.cook() - - -//Combination cooking involves combining the names and reagents of ingredients into a predefined output object -//The ingredients represent flavours or fillings. EG: donut pizza, cheese bread -/obj/machinery/appliance/proc/combination_cook(var/datum/cooking_item/CI) - var/cook_path = output_options[CI.combine_target] - - var/list/words = list() - var/list/cooktypes = list() - var/datum/reagents/buffer = new /datum/reagents(1000) - var/totalcolour - var/reagents_determine_color - - if(!LAZYLEN(CI.container.contents)) // It's possible to make something, such as a cake in the oven, with only reagents. This stops them from being grey and sad. - reagents_determine_color = TRUE - - for (var/obj/item/I in CI.container) - var/obj/item/weapon/reagent_containers/food/snacks/S - if (istype(I, /obj/item/weapon/holder)) - S = create_mob_food(I, CI) - else if (istype(I, /obj/item/weapon/reagent_containers/food/snacks)) - S = I - - if (!S) - continue - - words |= splittext(S.name," ") - cooktypes |= S.cooked - - if (S.reagents && S.reagents.total_volume > 0) - if (S.filling_color) - if (!totalcolour || !buffer.total_volume) - totalcolour = S.filling_color - else - var/t = buffer.total_volume + S.reagents.total_volume - t = buffer.total_volume / y - totalcolour = BlendRGB(totalcolour, S.filling_color, t) - //Blend colours in order to find a good filling color - - - S.reagents.trans_to_holder(buffer, S.reagents.total_volume) - //Cleanup these empty husk ingredients now - if (I) - qdel(I) - if (S) - qdel(S) - - CI.container.reagents.trans_to_holder(buffer, CI.container.reagents.total_volume) - - var/obj/item/weapon/reagent_containers/food/snacks/result = new cook_path(CI.container) - buffer.trans_to_holder(result.reagents, buffer.total_volume) //trans_to doesn't handle food items well, so - //just call trans_to_holder instead - - // Reagent-only foods. - if(reagents_determine_color) - totalcolour = result.reagents.get_color() - - for(var/datum/reagent/reag in result.reagents.reagent_list) - words |= text2list(reag.name, " ") - - //Filling overlay - var/image/I = image(result.icon, "[result.icon_state]_filling") - I.color = totalcolour - result.add_overlay(I) - result.filling_color = totalcolour - - //Set the name. - words -= list("and", "the", "in", "is", "bar", "raw", "sticks", "boiled", "fried", "deep", "-o-", "warm", "two", "flavored") - //Remove common connecting words and unsuitable ones from the list. Unsuitable words include those describing - //the shape, cooked-ness/temperature or other state of an ingredient which doesn't apply to the finished product - words.Remove(result.name) - shuffle(words) - var/num = 6 //Maximum number of words - while (num > 0) - num-- - if (!words.len) - break - //Add prefixes from the ingredients in a random order until we run out or hit limit - result.name = "[pop(words)] [result.name]" - - //This proc sets the size of the output result - result.update_icon() - return result - -//Helper proc for standard modification cooking -/obj/machinery/appliance/proc/modify_cook(var/obj/item/input, var/datum/cooking_item/CI) - var/obj/item/weapon/reagent_containers/food/snacks/result - if (istype(input, /obj/item/weapon/holder)) - result = create_mob_food(input, CI) - else if (istype(input, /obj/item/weapon/reagent_containers/food/snacks)) - result = input - else - //Nonviable item - return - - if (!result) - return - - result.cooked |= cook_type - - // Set icon and appearance. - change_product_appearance(result, CI) - - // Update strings. - change_product_strings(result, CI) - -/obj/machinery/appliance/proc/burn_food(var/datum/cooking_item/CI) - // You dun goofed. - CI.burned = 1 - CI.container.clear() - new /obj/item/weapon/reagent_containers/food/snacks/badrecipe(CI.container) - - // Produce nasty smoke. - visible_message("\The [src] vomits a gout of rancid smoke!") - var/datum/effect/effect/system/smoke_spread/bad/burntfood/smoke = new /datum/effect/effect/system/smoke_spread/bad/burntfood - playsound(src, 'sound/effects/smoke.ogg', 20, 1) - smoke.attach(src) - smoke.set_up(10, 0, get_turf(src), 300) - smoke.start() - - // Set off fire alarms! - var/obj/machinery/firealarm/FA = locate() in get_area(src) - if(FA) - FA.alarm() - -/obj/machinery/appliance/attack_hand(var/mob/user) - if(..()) - return - - if(cooking_objs.len) - removal_menu(user) - -/obj/machinery/appliance/proc/removal_menu(var/mob/user) - if (can_remove_items(user)) - var/list/menuoptions = list() - for(var/datum/cooking_item/CI as anything in cooking_objs) - if (CI.container) - menuoptions[CI.container.label(menuoptions.len)] = CI - - var/selection = tgui_input_list(user, "Which item would you like to remove?", "Remove ingredients", menuoptions) - if (selection) - var/datum/cooking_item/CI = menuoptions[selection] - eject(CI, user) - update_icon() - return TRUE - return FALSE - -/obj/machinery/appliance/proc/can_remove_items(var/mob/user, show_warning = TRUE) - if (!Adjacent(user)) - return FALSE - - if (isanimal(user)) - return FALSE - - return TRUE - -/obj/machinery/appliance/proc/eject(var/datum/cooking_item/CI, var/mob/user = null) - var/obj/item/thing - var/delete = 1 - var/status = CI.container.check_contents() - - if (status == 1)//If theres only one object in a container then we extract that - thing = locate(/obj/item) in CI.container - delete = 0 - else//If the container is empty OR contains more than one thing, then we must extract the container - thing = CI.container - if (!user || !user.put_in_hands(thing)) - thing.forceMove(get_turf(src)) - - if (delete) - cooking_objs -= CI - qdel(CI) - else - CI.reset()//reset instead of deleting if the container is left inside - user.visible_message("\The [user] remove \the [thing] from \the [src].") - -/obj/machinery/appliance/proc/cook_mob(var/mob/living/victim, var/mob/user) - return - -/obj/machinery/appliance/proc/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) - product.name = "[cook_type] [product.name]" - product.desc = "[product.desc]\nIt has been [cook_type]." - - -/obj/machinery/appliance/proc/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) - if (!product.coating) //Coatings change colour through a new sprite - product.color = food_color - product.filling_color = food_color - -/mob/living/proc/calculate_composition() // moved from devour.dm on aurora's side - if (!composition_reagent)//if no reagent has been set, then we'll set one - if (isSynthetic()) - src.composition_reagent = "iron" - else - if(istype(src, /mob/living/carbon/human/diona) || istype(src, /mob/living/carbon/alien/diona)) - src.composition_reagent = "nutriment" // diona are plants, not meat - else - src.composition_reagent = "protein" - if(istype(src, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - if(istype(H.species, /datum/species/diona)) - src.composition_reagent = "nutriment" - - //if the mob is a simple animal - MOB NOT ANIMAL - with a defined meat quantity - if (istype(src, /mob/living/simple_mob)) - var/mob/living/simple_mob/SA = src - if(SA.meat_amount) - src.composition_reagent_quantity = SA.meat_amount*2*9 - - //The quantity of protein is based on the meat_amount, but multiplied by 2 - - var/size_reagent = (src.mob_size * src.mob_size) * 3//The quantity of protein is set to 3x mob size squared - if (size_reagent > src.composition_reagent_quantity)//We take the larger of the two - src.composition_reagent_quantity = size_reagent - -//This function creates a food item which represents a dead mob -/obj/machinery/appliance/proc/create_mob_food(var/obj/item/weapon/holder/H, var/datum/cooking_item/CI) - if (!istype(H) || !H.held_mob) - qdel(H) - return null - var/mob/living/victim = H.held_mob - if (victim.stat != DEAD) - return null //Victim somehow survived the cooking, they do not become food - - victim.calculate_composition() - - var/obj/item/weapon/reagent_containers/food/snacks/variable/mob/result = new /obj/item/weapon/reagent_containers/food/snacks/variable/mob(CI.container) - result.w_class = victim.mob_size - result.reagents.add_reagent(victim.composition_reagent, victim.composition_reagent_quantity) - - if (victim.reagents) - victim.reagents.trans_to_holder(result.reagents, victim.reagents.total_volume) - - if (isanimal(victim)) - var/mob/living/simple_mob/SA = victim - result.kitchen_tag = SA.kitchen_tag - - result.appearance = victim - - var/matrix/M = matrix() - M.Turn(45) - M.Translate(1,-2) - result.transform = M - - // all done, now delete the old objects - H.held_mob = null - qdel(victim) - victim = null - qdel(H) - H = null - - return result - -/datum/cooking_item - var/max_cookwork - var/cookwork - var/overcook_mult = 6 // How long it takes to overcook. This is max_cookwork x overcook mult. If you're changing this, mind that at 3x, a max_cookwork of 30 becomes 90 ticks for the purpose of burning, and a max_cookwork of 4 only has 12 before burning! // CHOMPedit: doubled to 6 - var/result_type = 0 - var/obj/item/weapon/reagent_containers/cooking_container/container = null - var/combine_target = null - - //Result type is one of the following: - //0 unfinished, no result yet - //1 Standard modification cooking. eg Fried Donk Pocket, Baked wheat, etc - //2 Modification but with a new object that's an inert copy of the old. Generally used for deepfried mice - //3 Combination cooking, EG Donut Bread, Donk pocket pizza, etc - //4:Specific recipe cooking. EG: Turning raw potato sticks into fries - - var/burned = 0 - - var/oil = 0 - var/max_oil = 0//Used for fryers. - -/datum/cooking_item/New(var/obj/item/I) - container = I - -//This is called for containers whose contents are ejected without removing the container -/datum/cooking_item/proc/reset() - max_cookwork = 0 - cookwork = 0 - result_type = 0 - burned = 0 - max_oil = 0 - oil = 0 - combine_target = null - //Container is not reset - -/obj/machinery/appliance/RefreshParts() - ..() - var/scan_rating = 0 - var/cap_rating = 0 - - for(var/obj/item/weapon/stock_parts/P in src.component_parts) - if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) - scan_rating += P.rating - 1 // Default parts shouldn't mess with stats - // to_world("RefreshParts returned scan rating of [scan_rating] during this step.") // Debug lines, uncomment if you need to test. - else if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - 1 // Default parts shouldn't mess with stats - // to_world("RefreshParts returned cap rating of [cap_rating] during this step.") // Debug lines, uncomment if you need to test. - - active_power_usage = initial(active_power_usage) - scan_rating * 25 - heating_power = initial(heating_power) + cap_rating * 25 - cooking_power = cooking_coeff * (1 + (scan_rating + cap_rating) / 20) // 100% eff. becomes 120%, 140%, 160% w/ better parts, thus rewarding upgrading the appliances during your shift. - // to_world("RefreshParts returned cooking power of [cooking_power] during this step.") // Debug lines, uncomment if you need to test. +// This folder contains code that was originally ported from Apollo Station and then refactored/optimized/changed. + +// Tracks precooked food to stop deep fried baked grilled grilled grilled diona nymph cereal. +/obj/item/weapon/reagent_containers/food/snacks + var/tmp/list/cooked = list() + +// Root type for cooking machines. See following files for specific implementations. +/obj/machinery/appliance + name = "cooker" + desc = "You shouldn't be seeing this!" + icon = 'icons/obj/cooking_machines.dmi' + var/appliancetype = 0 + density = TRUE + anchored = TRUE + + use_power = USE_POWER_IDLE + idle_power_usage = 5 // Power used when turned on, but not processing anything + active_power_usage = 1000 // Power used when turned on and actively cooking something + + var/cooking_power = 0 // Effectiveness/speed at cooking + var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power. + var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage + var/max_contents = 1 // Maximum number of things this appliance can simultaneously cook + var/on_icon // Icon state used when cooking. + var/off_icon // Icon state used when not cooking. + var/cooking = FALSE // Whether or not the machine is currently operating. + var/cook_type // A string value used to track what kind of food this machine makes. + var/can_cook_mobs // Whether or not this machine accepts grabbed mobs. + var/mobdamagetype = BRUTE // Burn damage for cooking appliances, brute for cereal/candy + var/food_color // Colour of resulting food item. + var/cooked_sound = 'sound/machines/ding.ogg' // Sound played when cooking completes. + var/can_burn_food = FALSE // Can the object burn food that is left inside? + var/burn_chance = 10 // How likely is the food to burn? + var/list/cooking_objs = list() // List of things being cooked + + // If the machine has multiple output modes, define them here. + var/selected_option + var/list/output_options = list() + var/list/datum/recipe/available_recipes + + var/container_type = null + + var/combine_first = FALSE // If TRUE, this appliance will do combination cooking before checking recipes + +/obj/machinery/appliance/Initialize() + . = ..() + + default_apply_parts() + + if(output_options.len) + verbs += /obj/machinery/appliance/proc/choose_output + + if (!available_recipes) + available_recipes = new + + for(var/datum/recipe/test as anything in subtypesof(/datum/recipe)) + if((appliancetype & initial(test.appliance))) + available_recipes += new test + +/obj/machinery/appliance/Destroy() + for(var/datum/cooking_item/CI as anything in cooking_objs) + qdel(CI.container)//Food is fragile, it probably doesnt survive the destruction of the machine + cooking_objs -= CI + qdel(CI) + return ..() + +/obj/machinery/appliance/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += list_contents(user) + +/obj/machinery/appliance/proc/list_contents(var/mob/user) + if (cooking_objs.len) + var/string = "Contains..." + for(var/datum/cooking_item/CI as anything in cooking_objs) + string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]
                    " + return string + else + to_chat(user, "") + +/obj/machinery/appliance/proc/report_progress_tgui(datum/cooking_item/CI) + if(!CI || !CI.max_cookwork) + return list("average", "Not Cooking.") + + if(!CI.cookwork) + return list("blue", "Cold.") + + var/progress = CI.cookwork / CI.max_cookwork + + if (progress < 0.25) + return list("blue", "It's barely started cooking.") + if (progress < 0.75) + return list("average", "It's cooking away nicely.") + if (progress < 1) + return list("good", "It's almost ready!") + + var/half_overcook = (CI.overcook_mult - 1)*0.5 + if (progress < 1+half_overcook) + return list("good", "It's done!") + if (progress < CI.overcook_mult) + return list("bad", "It looks overcooked, get it out!") + else + return list("bad", "It is burning!") + +/obj/machinery/appliance/proc/report_progress(var/datum/cooking_item/CI) + if (!CI || !CI.max_cookwork) + return null + + if (!CI.cookwork) + return "It is cold." + var/progress = CI.cookwork / CI.max_cookwork + + if (progress < 0.25) + return "It's barely started cooking." + if (progress < 0.75) + return "It's cooking away nicely." + if (progress < 1) + return "It's almost ready!" + + var/half_overcook = (CI.overcook_mult - 1)*0.5 + if (progress < 1+half_overcook) + return "It is done !" + if (progress < CI.overcook_mult) + return "It looks overcooked, get it out!" + else + return "It is burning!" + +/obj/machinery/appliance/update_icon() + if (!stat && cooking_objs.len) + icon_state = on_icon + + else + icon_state = off_icon + +/obj/machinery/appliance/verb/toggle_power() + set name = "Toggle Power" + set category = "Object" + set src in view() + + attempt_toggle_power(usr) + +/obj/machinery/appliance/proc/attempt_toggle_power(mob/user) + if (!isliving(user)) + return + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You lack the dexterity to do that!") + return + + if (user.stat || user.restrained() || user.incapacitated()) + return + + if (!Adjacent(user) && !issilicon(user)) + to_chat(user, "You can't reach [src] from here!") + return + + if (stat & POWEROFF)//Its turned off + stat &= ~POWEROFF + use_power = 1 + user.visible_message("[user] turns [src] on.", "You turn on [src].") + + else //Its on, turn it off + stat |= POWEROFF + use_power = 0 + user.visible_message("[user] turns [src] off.", "You turn off [src].") + cooking = FALSE // Stop cooking here, too, just in case. + + playsound(src, 'sound/machines/click.ogg', 40, 1) + update_icon() + +/obj/machinery/appliance/AICtrlClick(mob/user) + attempt_toggle_power(user) + +/obj/machinery/appliance/proc/choose_output() + set src in view() + set name = "Choose output" + set category = "Object" + + if (!isliving(usr)) + return + + if (!usr.IsAdvancedToolUser()) + to_chat(usr, "You lack the dexterity to do that!") + return + + if (usr.stat || usr.restrained() || usr.incapacitated()) + return + + if (!Adjacent(usr) && !issilicon(usr)) + to_chat(usr, "You can't adjust the [src] from this distance, get closer!") + return + + if(output_options.len) + var/choice = tgui_input_list(usr, "What specific food do you wish to make with \the [src]?", "Food Output Choice", output_options+"Default") + if(!choice) + return + if(choice == "Default") + selected_option = null + to_chat(usr, "You decide not to make anything specific with \the [src].") + else + selected_option = choice + to_chat(usr, "You prepare \the [src] to make \a [selected_option] with the next thing you put in. Try putting several ingredients in a container!") + +//Handles all validity checking and error messages for inserting things +/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user) + if(istype(I.loc, /mob/living/silicon)) + return 0 + else if (istype(I.loc, /obj/item/rig_module)) + return 0 + + // We are trying to cook a grabbed mob. + var/obj/item/weapon/grab/G = I + if(istype(G)) + + if(!can_cook_mobs) + to_chat(user, "That's not going to fit.") + return 0 + + if(!isliving(G.affecting)) + to_chat(user, "You can't cook that.") + return 0 + + return 2 + + + if (!has_space(I)) + to_chat(user, "There's no room in [src] for that!") + return 0 + + + if (container_type && istype(I, container_type)) + return 1 + + // We're trying to cook something else. Check if it's valid. + var/obj/item/weapon/reagent_containers/food/snacks/check = I + if(istype(check) && islist(check.cooked) && (cook_type in check.cooked)) + to_chat(user, "\The [check] has already been [cook_type].") + return 0 + else if(istype(check, /obj/item/weapon/reagent_containers/glass)) + to_chat(user, "That would probably break [src].") + return 0 + else if(istype(check, /obj/item/weapon/disk/nuclear)) + to_chat(user, "You can't cook that.") + return 0 + else if(I.has_tool_quality(TOOL_CROWBAR) || I.has_tool_quality(TOOL_SCREWDRIVER) || istype(I, /obj/item/weapon/storage/part_replacer)) // You can't cook tools, dummy. + return 0 + else if(!istype(check) && !istype(check, /obj/item/weapon/holder)) + to_chat(user, "That's not edible.") + return 0 + + return 1 + + +//This function is overridden by cookers that do stuff with containers +/obj/machinery/appliance/proc/has_space(var/obj/item/I) + if(cooking_objs.len >= max_contents) + return FALSE + + return TRUE + +/obj/machinery/appliance/attackby(var/obj/item/I, var/mob/user) + if(!cook_type || (stat & (BROKEN))) + to_chat(user, "\The [src] is not working.") + return FALSE + + var/obj/item/ToCook = I + + if(istype(I, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/GR = I + var/obj/item/Wrap = GR.wrapped + if(Wrap) + Wrap.loc = get_turf(src) + var/result = can_insert(Wrap, user) + if(!result) + Wrap.forceMove(GR) + if(!(default_deconstruction_screwdriver(user, I))) + default_part_replacement(user, I) + return + + if(QDELETED(GR.wrapped)) + GR.wrapped = null + + if(GR?.wrapped.loc != src) + GR.drop_item_nm() + + ToCook = Wrap + else + attack_hand(user) + return + + else + var/result = can_insert(I, user) + if(!result) + if(!(default_deconstruction_screwdriver(user, I))) + default_part_replacement(user, I) + return + + if(result == 2) + var/obj/item/weapon/grab/G = I + if (G && istype(G) && G.affecting) + cook_mob(G.affecting, user) + return + + //From here we can start cooking food + add_content(ToCook, user) + update_icon() + +//Override for container mechanics +/obj/machinery/appliance/proc/add_content(var/obj/item/I, var/mob/user) + if(!user.unEquip(I) && !isturf(I.loc)) + return + + var/datum/cooking_item/CI = has_space(I) + if (istype(I, /obj/item/weapon/reagent_containers/cooking_container) && CI == 1) + var/obj/item/weapon/reagent_containers/cooking_container/CC = I + CI = new /datum/cooking_item/(CC) + I.forceMove(src) + cooking_objs.Add(CI) + user.visible_message("\The [user] puts \the [I] into \the [src].") + if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing. + return TRUE + else + if (CI && istype(CI)) + I.forceMove(CI.container) + + else //Something went wrong + return FALSE + + if (selected_option) + CI.combine_target = selected_option + + // We can actually start cooking now. + user.visible_message("\The [user] puts \the [I] into \the [src].") + + get_cooking_work(CI) + cooking = TRUE + return CI + +/obj/machinery/appliance/proc/get_cooking_work(var/datum/cooking_item/CI) + for (var/obj/item/J in CI.container) + cookwork_by_item(J, CI) + + for(var/datum/reagent/R as anything in CI.container.reagents.reagent_list) + if (istype(R, /datum/reagent/nutriment)) + CI.max_cookwork += R.volume *2//Added reagents contribute less than those in food items due to granular form + + //Nonfat reagents will soak oil + if (!istype(R, /datum/reagent/nutriment/triglyceride)) + CI.max_oil += R.volume * 0.25 + else + CI.max_cookwork += R.volume + CI.max_oil += R.volume * 0.10 + + //Rescaling cooking work to avoid insanely long times for large things + var/buffer = CI.max_cookwork + CI.max_cookwork = 0 + var/multiplier = 1 + var/step = 4 + while (buffer > step) + buffer -= step + CI.max_cookwork += step*multiplier + multiplier *= 0.95 + + CI.max_cookwork += buffer*multiplier + +//Just a helper to save code duplication in the above +/obj/machinery/appliance/proc/cookwork_by_item(var/obj/item/I, var/datum/cooking_item/CI) + var/obj/item/weapon/reagent_containers/food/snacks/S = I + var/work = 0 + if (istype(S)) + if (S.reagents) + for(var/datum/reagent/R as anything in S.reagents.reagent_list) + if (istype(R, /datum/reagent/nutriment)) + work += R.volume *3//Core nutrients contribute much more than peripheral chemicals + + //Nonfat reagents will soak oil + if (!istype(R, /datum/reagent/nutriment/triglyceride)) + CI.max_oil += R.volume * 0.35 + else + work += R.volume + CI.max_oil += R.volume * 0.15 + + + else if(istype(I, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = I + if (H.held_mob) + work += ((H.held_mob.mob_size * H.held_mob.size_multiplier) * (H.held_mob.mob_size * H.held_mob.size_multiplier) * 2)+2 + + CI.max_cookwork += work + +//Called every tick while we're cooking something +/obj/machinery/appliance/proc/do_cooking_tick(var/datum/cooking_item/CI) + if (!istype(CI) || !CI.max_cookwork) + return FALSE + + var/was_done = FALSE + if (CI.cookwork >= CI.max_cookwork) + was_done = TRUE + + CI.cookwork += cooking_power + + if (!was_done && CI.cookwork >= CI.max_cookwork) + //If cookwork has gone from above to below 0, then this item finished cooking + finish_cooking(CI) + + else if (!CI.burned && CI.cookwork > min(CI.max_cookwork * CI.overcook_mult, CI.max_cookwork + 30)) + burn_food(CI) + + // Gotta hurt. + for(var/obj/item/weapon/holder/H in CI.container.contents) + var/mob/living/M = H.held_mob + if(M) + M.apply_damage(rand(1,3) * (1/M.size_multiplier), mobdamagetype, pick(BP_ALL)) + + return TRUE + +/obj/machinery/appliance/process() + if(cooking_power > 0 && cooking) + var/all_done_cooking = TRUE + for(var/datum/cooking_item/CI in cooking_objs) + do_cooking_tick(CI) + if(CI.max_cookwork > 0) + all_done_cooking = FALSE + if(all_done_cooking) + cooking = FALSE + update_icon() + + +/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) + + src.visible_message("\The [src] pings!") + if(cooked_sound) + playsound(get_turf(src), cooked_sound, 50, 1) + //Check recipes first, a valid recipe overrides other options + var/datum/recipe/recipe = null + var/atom/C = null + if (CI.container) + C = CI.container + else + C = src + recipe = select_recipe(available_recipes,C) + + if (recipe) + CI.result_type = 4//Recipe type, a specific recipe will transform the ingredients into a new food + var/list/results = recipe.make_food(C) + + var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes + + for (var/atom/movable/AM in results) + AM.forceMove(temp) + + //making multiple copies of a recipe from one container. For example, tons of fries + while (select_recipe(available_recipes,C) == recipe) + var/list/TR = list() + TR += recipe.make_food(C) + for (var/atom/movable/AM in TR) //Move results to buffer + AM.forceMove(temp) + results += TR + + + for(var/obj/item/weapon/reagent_containers/food/snacks/R as anything in results) + R.forceMove(C) //Move everything from the buffer back to the container + R.cooked |= cook_type + + QDEL_NULL(temp) //delete buffer object + . = 1 //None of the rest of this function is relevant for recipe cooking + + else if(CI.combine_target) + CI.result_type = 3//Combination type. We're making something out of our ingredients + . = combination_cook(CI) + + + else + //Otherwise, we're just doing standard modification cooking. change a color + name + for (var/obj/item/i in CI.container) + modify_cook(i, CI) + + //Final step. Cook function just cooks batter for now. + for (var/obj/item/weapon/reagent_containers/food/snacks/S in CI.container) + S.cook() + + +//Combination cooking involves combining the names and reagents of ingredients into a predefined output object +//The ingredients represent flavours or fillings. EG: donut pizza, cheese bread +/obj/machinery/appliance/proc/combination_cook(var/datum/cooking_item/CI) + var/cook_path = output_options[CI.combine_target] + + var/list/words = list() + var/list/cooktypes = list() + var/datum/reagents/buffer = new /datum/reagents(1000) + var/totalcolour + var/reagents_determine_color + + if(!LAZYLEN(CI.container.contents)) // It's possible to make something, such as a cake in the oven, with only reagents. This stops them from being grey and sad. + reagents_determine_color = TRUE + + for (var/obj/item/I in CI.container) + var/obj/item/weapon/reagent_containers/food/snacks/S + if (istype(I, /obj/item/weapon/holder)) + S = create_mob_food(I, CI) + else if (istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + S = I + + if (!S) + continue + + words |= splittext(S.name," ") + cooktypes |= S.cooked + + if (S.reagents && S.reagents.total_volume > 0) + if (S.filling_color) + if (!totalcolour || !buffer.total_volume) + totalcolour = S.filling_color + else + var/t = buffer.total_volume + S.reagents.total_volume + t = buffer.total_volume / y + totalcolour = BlendRGB(totalcolour, S.filling_color, t) + //Blend colours in order to find a good filling color + + + S.reagents.trans_to_holder(buffer, S.reagents.total_volume) + //Cleanup these empty husk ingredients now + if (I) + qdel(I) + if (S) + qdel(S) + + CI.container.reagents.trans_to_holder(buffer, CI.container.reagents.total_volume) + + var/obj/item/weapon/reagent_containers/food/snacks/result = new cook_path(CI.container) + buffer.trans_to_holder(result.reagents, buffer.total_volume) //trans_to doesn't handle food items well, so + //just call trans_to_holder instead + + // Reagent-only foods. + if(reagents_determine_color) + totalcolour = result.reagents.get_color() + + for(var/datum/reagent/reag in result.reagents.reagent_list) + words |= text2list(reag.name, " ") + + //Filling overlay + var/image/I = image(result.icon, "[result.icon_state]_filling") + I.color = totalcolour + result.add_overlay(I) + result.filling_color = totalcolour + + //Set the name. + words -= list("and", "the", "in", "is", "bar", "raw", "sticks", "boiled", "fried", "deep", "-o-", "warm", "two", "flavored") + //Remove common connecting words and unsuitable ones from the list. Unsuitable words include those describing + //the shape, cooked-ness/temperature or other state of an ingredient which doesn't apply to the finished product + words.Remove(result.name) + shuffle(words) + var/num = 6 //Maximum number of words + while (num > 0) + num-- + if (!words.len) + break + //Add prefixes from the ingredients in a random order until we run out or hit limit + result.name = "[pop(words)] [result.name]" + + //This proc sets the size of the output result + result.update_icon() + return result + +//Helper proc for standard modification cooking +/obj/machinery/appliance/proc/modify_cook(var/obj/item/input, var/datum/cooking_item/CI) + var/obj/item/weapon/reagent_containers/food/snacks/result + if (istype(input, /obj/item/weapon/holder)) + result = create_mob_food(input, CI) + else if (istype(input, /obj/item/weapon/reagent_containers/food/snacks)) + result = input + else + //Nonviable item + return + + if (!result) + return + + result.cooked |= cook_type + + // Set icon and appearance. + change_product_appearance(result, CI) + + // Update strings. + change_product_strings(result, CI) + +/obj/machinery/appliance/proc/burn_food(var/datum/cooking_item/CI) + // You dun goofed. + CI.burned = 1 + CI.container.clear() + new /obj/item/weapon/reagent_containers/food/snacks/badrecipe(CI.container) + + // Produce nasty smoke. + visible_message("\The [src] vomits a gout of rancid smoke!") + var/datum/effect/effect/system/smoke_spread/bad/burntfood/smoke = new /datum/effect/effect/system/smoke_spread/bad/burntfood + playsound(src, 'sound/effects/smoke.ogg', 20, 1) + smoke.attach(src) + smoke.set_up(10, 0, get_turf(src), 300) + smoke.start() + + // Set off fire alarms! + var/obj/machinery/firealarm/FA = locate() in get_area(src) + if(FA) + FA.alarm() + +/obj/machinery/appliance/attack_hand(var/mob/user) + if(..()) + return + + if(cooking_objs.len) + removal_menu(user) + +/obj/machinery/appliance/proc/removal_menu(var/mob/user) + if (can_remove_items(user)) + var/list/menuoptions = list() + for(var/datum/cooking_item/CI as anything in cooking_objs) + if (CI.container) + menuoptions[CI.container.label(menuoptions.len)] = CI + + var/selection = tgui_input_list(user, "Which item would you like to remove?", "Remove ingredients", menuoptions) + if (selection) + var/datum/cooking_item/CI = menuoptions[selection] + eject(CI, user) + update_icon() + return TRUE + return FALSE + +/obj/machinery/appliance/proc/can_remove_items(var/mob/user, show_warning = TRUE) + if (!Adjacent(user)) + return FALSE + + if (isanimal(user)) + return FALSE + + return TRUE + +/obj/machinery/appliance/proc/eject(var/datum/cooking_item/CI, var/mob/user = null) + var/obj/item/thing + var/delete = 1 + var/status = CI.container.check_contents() + + if (status == 1)//If theres only one object in a container then we extract that + thing = locate(/obj/item) in CI.container + delete = 0 + else//If the container is empty OR contains more than one thing, then we must extract the container + thing = CI.container + if (!user || !user.put_in_hands(thing)) + thing.forceMove(get_turf(src)) + + if (delete) + cooking_objs -= CI + qdel(CI) + else + CI.reset()//reset instead of deleting if the container is left inside + user.visible_message("\The [user] remove \the [thing] from \the [src].") + +/obj/machinery/appliance/proc/cook_mob(var/mob/living/victim, var/mob/user) + return + +/obj/machinery/appliance/proc/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) + product.name = "[cook_type] [product.name]" + product.desc = "[product.desc]\nIt has been [cook_type]." + + +/obj/machinery/appliance/proc/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) + if (!product.coating) //Coatings change colour through a new sprite + product.color = food_color + product.filling_color = food_color + +/mob/living/proc/calculate_composition() // moved from devour.dm on aurora's side + if (!composition_reagent)//if no reagent has been set, then we'll set one + if (isSynthetic()) + src.composition_reagent = "iron" + else + if(istype(src, /mob/living/carbon/human/diona) || istype(src, /mob/living/carbon/alien/diona)) + src.composition_reagent = "nutriment" // diona are plants, not meat + else + src.composition_reagent = "protein" + if(istype(src, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if(istype(H.species, /datum/species/diona)) + src.composition_reagent = "nutriment" + + //if the mob is a simple animal - MOB NOT ANIMAL - with a defined meat quantity + if (istype(src, /mob/living/simple_mob)) + var/mob/living/simple_mob/SA = src + if(SA.meat_amount) + src.composition_reagent_quantity = SA.meat_amount*2*9 + + //The quantity of protein is based on the meat_amount, but multiplied by 2 + + var/size_reagent = (src.mob_size * src.mob_size) * 3//The quantity of protein is set to 3x mob size squared + if (size_reagent > src.composition_reagent_quantity)//We take the larger of the two + src.composition_reagent_quantity = size_reagent + +//This function creates a food item which represents a dead mob +/obj/machinery/appliance/proc/create_mob_food(var/obj/item/weapon/holder/H, var/datum/cooking_item/CI) + if (!istype(H) || !H.held_mob) + qdel(H) + return null + var/mob/living/victim = H.held_mob + if (victim.stat != DEAD) + return null //Victim somehow survived the cooking, they do not become food + + victim.calculate_composition() + + var/obj/item/weapon/reagent_containers/food/snacks/variable/mob/result = new /obj/item/weapon/reagent_containers/food/snacks/variable/mob(CI.container) + result.w_class = victim.mob_size + result.reagents.add_reagent(victim.composition_reagent, victim.composition_reagent_quantity) + + if (victim.reagents) + victim.reagents.trans_to_holder(result.reagents, victim.reagents.total_volume) + + if (isanimal(victim)) + var/mob/living/simple_mob/SA = victim + result.kitchen_tag = SA.kitchen_tag + + result.appearance = victim + + var/matrix/M = matrix() + M.Turn(45) + M.Translate(1,-2) + result.transform = M + + // all done, now delete the old objects + H.held_mob = null + qdel(victim) + victim = null + qdel(H) + H = null + + return result + +/datum/cooking_item + var/max_cookwork + var/cookwork + var/overcook_mult = 6 // How long it takes to overcook. This is max_cookwork x overcook mult. If you're changing this, mind that at 3x, a max_cookwork of 30 becomes 90 ticks for the purpose of burning, and a max_cookwork of 4 only has 12 before burning! // CHOMPedit: doubled to 6 + var/result_type = 0 + var/obj/item/weapon/reagent_containers/cooking_container/container = null + var/combine_target = null + + //Result type is one of the following: + //0 unfinished, no result yet + //1 Standard modification cooking. eg Fried Donk Pocket, Baked wheat, etc + //2 Modification but with a new object that's an inert copy of the old. Generally used for deepfried mice + //3 Combination cooking, EG Donut Bread, Donk pocket pizza, etc + //4:Specific recipe cooking. EG: Turning raw potato sticks into fries + + var/burned = 0 + + var/oil = 0 + var/max_oil = 0//Used for fryers. + +/datum/cooking_item/New(var/obj/item/I) + container = I + +//This is called for containers whose contents are ejected without removing the container +/datum/cooking_item/proc/reset() + max_cookwork = 0 + cookwork = 0 + result_type = 0 + burned = 0 + max_oil = 0 + oil = 0 + combine_target = null + //Container is not reset + +/obj/machinery/appliance/RefreshParts() + ..() + var/scan_rating = 0 + var/cap_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in src.component_parts) + if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) + scan_rating += P.rating - 1 // Default parts shouldn't mess with stats + // to_world("RefreshParts returned scan rating of [scan_rating] during this step.") // Debug lines, uncomment if you need to test. + else if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating - 1 // Default parts shouldn't mess with stats + // to_world("RefreshParts returned cap rating of [cap_rating] during this step.") // Debug lines, uncomment if you need to test. + + active_power_usage = initial(active_power_usage) - scan_rating * 25 + heating_power = initial(heating_power) + cap_rating * 25 + cooking_power = cooking_coeff * (1 + (scan_rating + cap_rating) / 20) // 100% eff. becomes 120%, 140%, 160% w/ better parts, thus rewarding upgrading the appliances during your shift. + // to_world("RefreshParts returned cooking power of [cooking_power] during this step.") // Debug lines, uncomment if you need to test. diff --git a/code/modules/food/kitchen/cooking_machines/_cooker_output.dm b/code/modules/food/kitchen/cooking_machines/_cooker_output.dm index 07f7870bc6..96353ee192 100644 --- a/code/modules/food/kitchen/cooking_machines/_cooker_output.dm +++ b/code/modules/food/kitchen/cooking_machines/_cooker_output.dm @@ -1,160 +1,160 @@ -// Wrapper obj for cooked food. Appearance is set in the cooking code, not on spawn. -/obj/item/weapon/reagent_containers/food/snacks/variable - name = "cooked food" - icon = 'icons/obj/food_custom.dmi' - desc = "If you can see this description then something is wrong. Please report the bug on the tracker." - bitesize = 2 - - var/size = 5 //The quantity of reagents which is considered "normal" for this kind of food - //These objects will change size depending on the ratio of reagents to this value - var/min_scale = 0.5 - var/max_scale = 2 - var/scale = 1 - - w_class = 2 - var/prefix - -/obj/item/weapon/reagent_containers/food/snacks/variable/Initialize() - . = ..() - if (reagents) - reagents.maximum_volume = size*8 + 10 - else - create_reagents(size*8 + 10) - -/obj/item/weapon/reagent_containers/food/snacks/variable/update_icon() - if (reagents && reagents.total_volume) - var/ratio = reagents.total_volume / size - - scale = ratio**(1/3) //Scaling factor is square root of desired area - scale = clamp(scale, min_scale, max_scale) - else - scale = min_scale - - var/matrix/M = matrix() - M.Scale(scale) - src.transform = M - - w_class *= scale - if (!prefix) - if (scale == min_scale) - prefix = "tiny" - else if (scale <= 0.8) - prefix = "small" - - else - if (scale >= 1.2) - prefix = "large" - if (scale >= 1.4) - prefix = "extra large" - if (scale >= 1.6) - prefix = "huge" - if (scale >= max_scale) - prefix = "massive" - - name = "[prefix] [name]" - - -/obj/item/weapon/reagent_containers/food/snacks/variable/pizza - name = "personal pizza" - desc = "A personalized pan pizza meant for only one person." - icon_state = "personal_pizza" - size = 20 - w_class = 3 - -/obj/item/weapon/reagent_containers/food/snacks/variable/bread - name = "bread" - desc = "Tasty bread." - icon_state = "breadcustom" - size = 40 - w_class = 3 - -/obj/item/weapon/reagent_containers/food/snacks/variable/pie - name = "pie" - desc = "Tasty pie." - icon_state = "piecustom" - size = 25 - -/obj/item/weapon/reagent_containers/food/snacks/variable/cake - name = "cake" - desc = "A popular band." - icon_state = "cakecustom" - size = 40 - w_class = 3 - -/obj/item/weapon/reagent_containers/food/snacks/variable/pocket - name = "hot pocket" - desc = "You wanna put a bangin- oh, nevermind." - icon_state = "donk" - size = 8 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/kebab - name = "kebab" - desc = "Remove this!" - icon_state = "kabob" - size = 10 - -/obj/item/weapon/reagent_containers/food/snacks/variable/waffles - name = "waffles" - desc = "Made with love." - icon_state = "waffles" - size = 12 - -/obj/item/weapon/reagent_containers/food/snacks/variable/cookie - name = "cookie" - desc = "Sugar snap!" - icon_state = "cookie" - size = 6 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/donut - name = "filled donut" - desc = "Donut eat this!" // kill me - icon_state = "donut" - size = 8 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker - name = "flavored jawbreaker" - desc = "It's like cracking a molar on a rainbow." - icon_state = "jawbreaker" - size = 4 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/candybar - name = "flavored chocolate bar" - desc = "Made in a factory downtown." - icon_state = "bar" - size = 6 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/sucker - name = "flavored sucker" - desc = "Suck, suck, suck." - icon_state = "sucker" - size = 4 - w_class = 1 - -/obj/item/weapon/reagent_containers/food/snacks/variable/jelly - name = "jelly" - desc = "All your friends will be jelly." - icon_state = "jellycustom" - size = 8 - - -/obj/item/weapon/reagent_containers/food/snacks/variable/cereal - name = "cereal" - desc = "Crispy and flaky" - icon_state = "cereal_box" - size = 30 - w_class = 3 - -/obj/item/weapon/reagent_containers/food/snacks/variable/cereal/Initialize() - . =..() - name = pick(list("flakes", "krispies", "crunch", "pops", "O's", "crisp", "loops", "jacks", "clusters")) - -/obj/item/weapon/reagent_containers/food/snacks/variable/mob - desc = "Poor little thing." - size = 5 - w_class = 1 +// Wrapper obj for cooked food. Appearance is set in the cooking code, not on spawn. +/obj/item/weapon/reagent_containers/food/snacks/variable + name = "cooked food" + icon = 'icons/obj/food_custom.dmi' + desc = "If you can see this description then something is wrong. Please report the bug on the tracker." + bitesize = 2 + + var/size = 5 //The quantity of reagents which is considered "normal" for this kind of food + //These objects will change size depending on the ratio of reagents to this value + var/min_scale = 0.5 + var/max_scale = 2 + var/scale = 1 + + w_class = 2 + var/prefix + +/obj/item/weapon/reagent_containers/food/snacks/variable/Initialize() + . = ..() + if (reagents) + reagents.maximum_volume = size*8 + 10 + else + create_reagents(size*8 + 10) + +/obj/item/weapon/reagent_containers/food/snacks/variable/update_icon() + if (reagents && reagents.total_volume) + var/ratio = reagents.total_volume / size + + scale = ratio**(1/3) //Scaling factor is square root of desired area + scale = clamp(scale, min_scale, max_scale) + else + scale = min_scale + + var/matrix/M = matrix() + M.Scale(scale) + src.transform = M + + w_class *= scale + if (!prefix) + if (scale == min_scale) + prefix = "tiny" + else if (scale <= 0.8) + prefix = "small" + + else + if (scale >= 1.2) + prefix = "large" + if (scale >= 1.4) + prefix = "extra large" + if (scale >= 1.6) + prefix = "huge" + if (scale >= max_scale) + prefix = "massive" + + name = "[prefix] [name]" + + +/obj/item/weapon/reagent_containers/food/snacks/variable/pizza + name = "personal pizza" + desc = "A personalized pan pizza meant for only one person." + icon_state = "personal_pizza" + size = 20 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/bread + name = "bread" + desc = "Tasty bread." + icon_state = "breadcustom" + size = 40 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/pie + name = "pie" + desc = "Tasty pie." + icon_state = "piecustom" + size = 25 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cake + name = "cake" + desc = "A popular band." + icon_state = "cakecustom" + size = 40 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/pocket + name = "hot pocket" + desc = "You wanna put a bangin- oh, nevermind." + icon_state = "donk" + size = 8 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/kebab + name = "kebab" + desc = "Remove this!" + icon_state = "kabob" + size = 10 + +/obj/item/weapon/reagent_containers/food/snacks/variable/waffles + name = "waffles" + desc = "Made with love." + icon_state = "waffles" + size = 12 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie + name = "cookie" + desc = "Sugar snap!" + icon_state = "cookie" + size = 6 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/donut + name = "filled donut" + desc = "Donut eat this!" // kill me + icon_state = "donut" + size = 8 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker + name = "flavored jawbreaker" + desc = "It's like cracking a molar on a rainbow." + icon_state = "jawbreaker" + size = 4 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/candybar + name = "flavored chocolate bar" + desc = "Made in a factory downtown." + icon_state = "bar" + size = 6 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/sucker + name = "flavored sucker" + desc = "Suck, suck, suck." + icon_state = "sucker" + size = 4 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/jelly + name = "jelly" + desc = "All your friends will be jelly." + icon_state = "jellycustom" + size = 8 + + +/obj/item/weapon/reagent_containers/food/snacks/variable/cereal + name = "cereal" + desc = "Crispy and flaky" + icon_state = "cereal_box" + size = 30 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cereal/Initialize() + . =..() + name = pick(list("flakes", "krispies", "crunch", "pops", "O's", "crisp", "loops", "jacks", "clusters")) + +/obj/item/weapon/reagent_containers/food/snacks/variable/mob + desc = "Poor little thing." + size = 5 + w_class = 1 var/kitchen_tag = "animal" \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/_mixer.dm b/code/modules/food/kitchen/cooking_machines/_mixer.dm index f04f8bba46..9d78be3475 100644 --- a/code/modules/food/kitchen/cooking_machines/_mixer.dm +++ b/code/modules/food/kitchen/cooking_machines/_mixer.dm @@ -1,155 +1,155 @@ -/* -The mixer subtype is used for the candymaker and cereal maker. They are similar to cookers but with a few -fundamental differences -1. They have a single container which cant be removed. it will eject multiple contents -2. Items can't be added or removed once the process starts -3. Items are all placed in the same container when added directly -4. They do combining mode only. And will always combine the entire contents of the container into an output -*/ - -/obj/machinery/appliance/mixer - max_contents = 1 - stat = POWEROFF - cooking_coeff = 0.75 // Original value 0.4 - active_power_usage = 3000 - idle_power_usage = 50 - var/datum/looping_sound/mixer/mixer_loop - -/obj/machinery/appliance/mixer/examine(var/mob/user) - . = ..() - if(Adjacent(user)) - . += "It is currently set to make a [selected_option]" - -/obj/machinery/appliance/mixer/Initialize() - . = ..() - cooking_objs += new /datum/cooking_item(new /obj/item/weapon/reagent_containers/cooking_container(src)) - cooking = FALSE - selected_option = pick(output_options) - - mixer_loop = new(list(src), FALSE) - -/obj/machinery/appliance/mixer/Destroy() - . = ..() - - QDEL_NULL(mixer_loop) - -//Mixers cannot-not do combining mode. So the default option is removed from this. A combine target must be chosen -/obj/machinery/appliance/mixer/choose_output() - set src in view(1) - set name = "Choose output" - set category = "Object" - - if (!isliving(usr)) - return - - if (!usr.IsAdvancedToolUser()) - to_chat(usr, "You can't operate [src].") - return - - if(output_options.len) - var/choice = tgui_input_list(usr, "What specific food do you wish to make with \the [src]?", "Food Output Choice", output_options) - if(!choice) - return - else - selected_option = choice - to_chat(usr, "You prepare \the [src] to make \a [selected_option].") - var/datum/cooking_item/CI = cooking_objs[1] - CI.combine_target = selected_option - - -/obj/machinery/appliance/mixer/has_space(var/obj/item/I) - var/datum/cooking_item/CI = cooking_objs[1] - if (!CI || !CI.container) - return 0 - - if (CI.container.can_fit(I)) - return CI - - return 0 - - -/obj/machinery/appliance/mixer/can_remove_items(var/mob/user, show_warning = TRUE) - if(stat) - return 1 - else - if(show_warning) - to_chat(user, "You can't remove ingredients while it's turned on! Turn it off first or wait for it to finish.") - return 0 - -//Container is not removable -/obj/machinery/appliance/mixer/removal_menu(var/mob/user) - if (can_remove_items(user)) - var/list/menuoptions = list() - for(var/datum/cooking_item/CI as anything in cooking_objs) - if (CI.container) - if (!CI.container.check_contents()) - to_chat(user, "There's nothing in [src] you can remove!") - return - - for (var/obj/item/I in CI.container) - menuoptions[I.name] = I - - var/selection = tgui_input_list(user, "Which item would you like to remove? If you want to remove chemicals, use an empty beaker.", "Remove ingredients", menuoptions) - if (selection) - var/obj/item/I = menuoptions[selection] - if (!user || !user.put_in_hands(I)) - I.forceMove(get_turf(src)) - update_icon() - return 1 - return 0 - - -/obj/machinery/appliance/mixer/toggle_power() - set src in view(1) - set name = "Toggle Power" - set category = "Object" - - var/datum/cooking_item/CI = cooking_objs[1] - if(!CI.container.check_contents()) - to_chat("There's nothing in it! Add ingredients before turning [src] on!") - return - - if(stat & POWEROFF)//Its turned off - stat &= ~POWEROFF - if(usr) - usr.visible_message("[usr] turns the [src] on.", "You turn on \the [src].") - get_cooking_work(CI) - use_power = 2 - else //Its on, turn it off - stat |= POWEROFF - use_power = 0 - if(usr) - usr.visible_message("[usr] turns the [src] off.", "You turn off \the [src].") - playsound(src, 'sound/machines/click.ogg', 40, 1) - update_icon() - -/obj/machinery/appliance/mixer/can_insert(var/obj/item/I, var/mob/user) - if(!stat) - to_chat(user, ",You can't add items while \the [src] is running. Wait for it to finish or turn the power off to abort.") - return 0 - else - return ..() - -/obj/machinery/appliance/mixer/finish_cooking(var/datum/cooking_item/CI) - ..() - stat |= POWEROFF - playsound(src, 'sound/machines/click.ogg', 40, 1) - use_power = 0 - CI.reset() - update_icon() - -/obj/machinery/appliance/mixer/update_icon() - if (!stat) - icon_state = on_icon - if(mixer_loop) - mixer_loop.start(src) - else - icon_state = off_icon - if(mixer_loop) - mixer_loop.stop(src) - - -/obj/machinery/appliance/mixer/process() - if (!stat) - for (var/i in cooking_objs) +/* +The mixer subtype is used for the candymaker and cereal maker. They are similar to cookers but with a few +fundamental differences +1. They have a single container which cant be removed. it will eject multiple contents +2. Items can't be added or removed once the process starts +3. Items are all placed in the same container when added directly +4. They do combining mode only. And will always combine the entire contents of the container into an output +*/ + +/obj/machinery/appliance/mixer + max_contents = 1 + stat = POWEROFF + cooking_coeff = 0.75 // Original value 0.4 + active_power_usage = 3000 + idle_power_usage = 50 + var/datum/looping_sound/mixer/mixer_loop + +/obj/machinery/appliance/mixer/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += "It is currently set to make a [selected_option]" + +/obj/machinery/appliance/mixer/Initialize() + . = ..() + cooking_objs += new /datum/cooking_item(new /obj/item/weapon/reagent_containers/cooking_container(src)) + cooking = FALSE + selected_option = pick(output_options) + + mixer_loop = new(list(src), FALSE) + +/obj/machinery/appliance/mixer/Destroy() + . = ..() + + QDEL_NULL(mixer_loop) + +//Mixers cannot-not do combining mode. So the default option is removed from this. A combine target must be chosen +/obj/machinery/appliance/mixer/choose_output() + set src in view(1) + set name = "Choose output" + set category = "Object" + + if (!isliving(usr)) + return + + if (!usr.IsAdvancedToolUser()) + to_chat(usr, "You can't operate [src].") + return + + if(output_options.len) + var/choice = tgui_input_list(usr, "What specific food do you wish to make with \the [src]?", "Food Output Choice", output_options) + if(!choice) + return + else + selected_option = choice + to_chat(usr, "You prepare \the [src] to make \a [selected_option].") + var/datum/cooking_item/CI = cooking_objs[1] + CI.combine_target = selected_option + + +/obj/machinery/appliance/mixer/has_space(var/obj/item/I) + var/datum/cooking_item/CI = cooking_objs[1] + if (!CI || !CI.container) + return 0 + + if (CI.container.can_fit(I)) + return CI + + return 0 + + +/obj/machinery/appliance/mixer/can_remove_items(var/mob/user, show_warning = TRUE) + if(stat) + return 1 + else + if(show_warning) + to_chat(user, "You can't remove ingredients while it's turned on! Turn it off first or wait for it to finish.") + return 0 + +//Container is not removable +/obj/machinery/appliance/mixer/removal_menu(var/mob/user) + if (can_remove_items(user)) + var/list/menuoptions = list() + for(var/datum/cooking_item/CI as anything in cooking_objs) + if (CI.container) + if (!CI.container.check_contents()) + to_chat(user, "There's nothing in [src] you can remove!") + return + + for (var/obj/item/I in CI.container) + menuoptions[I.name] = I + + var/selection = tgui_input_list(user, "Which item would you like to remove? If you want to remove chemicals, use an empty beaker.", "Remove ingredients", menuoptions) + if (selection) + var/obj/item/I = menuoptions[selection] + if (!user || !user.put_in_hands(I)) + I.forceMove(get_turf(src)) + update_icon() + return 1 + return 0 + + +/obj/machinery/appliance/mixer/toggle_power() + set src in view(1) + set name = "Toggle Power" + set category = "Object" + + var/datum/cooking_item/CI = cooking_objs[1] + if(!CI.container.check_contents()) + to_chat("There's nothing in it! Add ingredients before turning [src] on!") + return + + if(stat & POWEROFF)//Its turned off + stat &= ~POWEROFF + if(usr) + usr.visible_message("[usr] turns the [src] on.", "You turn on \the [src].") + get_cooking_work(CI) + use_power = 2 + else //Its on, turn it off + stat |= POWEROFF + use_power = 0 + if(usr) + usr.visible_message("[usr] turns the [src] off.", "You turn off \the [src].") + playsound(src, 'sound/machines/click.ogg', 40, 1) + update_icon() + +/obj/machinery/appliance/mixer/can_insert(var/obj/item/I, var/mob/user) + if(!stat) + to_chat(user, ",You can't add items while \the [src] is running. Wait for it to finish or turn the power off to abort.") + return 0 + else + return ..() + +/obj/machinery/appliance/mixer/finish_cooking(var/datum/cooking_item/CI) + ..() + stat |= POWEROFF + playsound(src, 'sound/machines/click.ogg', 40, 1) + use_power = 0 + CI.reset() + update_icon() + +/obj/machinery/appliance/mixer/update_icon() + if (!stat) + icon_state = on_icon + if(mixer_loop) + mixer_loop.start(src) + else + icon_state = off_icon + if(mixer_loop) + mixer_loop.stop(src) + + +/obj/machinery/appliance/mixer/process() + if (!stat) + for (var/i in cooking_objs) do_cooking_tick(i) \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/candy.dm b/code/modules/food/kitchen/cooking_machines/candy.dm index 4eb2940aaf..7e9c733e94 100644 --- a/code/modules/food/kitchen/cooking_machines/candy.dm +++ b/code/modules/food/kitchen/cooking_machines/candy.dm @@ -1,54 +1,54 @@ -/obj/machinery/appliance/mixer/candy - name = "candy machine" - desc = "Get yer candied cheese wheels here!" - icon_state = "mixer_off" - off_icon = "mixer_off" - on_icon = "mixer_on" - cook_type = "candied" - appliancetype = CANDYMAKER - var/datum/looping_sound/candymaker/candymaker_loop - circuit = /obj/item/weapon/circuitboard/candymachine - cooking_coeff = 1.0 // Original Value 0.6 - - output_options = list( - "Jawbreaker" = /obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker, - "Candy Bar" = /obj/item/weapon/reagent_containers/food/snacks/variable/candybar, - "Sucker" = /obj/item/weapon/reagent_containers/food/snacks/variable/sucker, - "Jelly" = /obj/item/weapon/reagent_containers/food/snacks/variable/jelly - ) - -/obj/machinery/appliance/mixer/candy/Initialize() - . = ..() - - candymaker_loop = new(list(src), FALSE) - -/obj/machinery/appliance/mixer/candy/Destroy() - . = ..() - - QDEL_NULL(candymaker_loop) - -/obj/machinery/appliance/mixer/candy/update_icon() - . = ..() - - if(!stat) - icon_state = on_icon - if(candymaker_loop) - candymaker_loop.start(src) - else - icon_state = off_icon - if(candymaker_loop) - candymaker_loop.stop(src) - -/obj/machinery/appliance/mixer/candy/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) - food_color = get_random_colour(1) - . = ..() - - -/obj/machinery/appliance/mixer/candy/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return +/obj/machinery/appliance/mixer/candy + name = "candy machine" + desc = "Get yer candied cheese wheels here!" + icon_state = "mixer_off" + off_icon = "mixer_off" + on_icon = "mixer_on" + cook_type = "candied" + appliancetype = CANDYMAKER + var/datum/looping_sound/candymaker/candymaker_loop + circuit = /obj/item/weapon/circuitboard/candymachine + cooking_coeff = 1.0 // Original Value 0.6 + + output_options = list( + "Jawbreaker" = /obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker, + "Candy Bar" = /obj/item/weapon/reagent_containers/food/snacks/variable/candybar, + "Sucker" = /obj/item/weapon/reagent_containers/food/snacks/variable/sucker, + "Jelly" = /obj/item/weapon/reagent_containers/food/snacks/variable/jelly + ) + +/obj/machinery/appliance/mixer/candy/Initialize() + . = ..() + + candymaker_loop = new(list(src), FALSE) + +/obj/machinery/appliance/mixer/candy/Destroy() + . = ..() + + QDEL_NULL(candymaker_loop) + +/obj/machinery/appliance/mixer/candy/update_icon() + . = ..() + + if(!stat) + icon_state = on_icon + if(candymaker_loop) + candymaker_loop.start(src) + else + icon_state = off_icon + if(candymaker_loop) + candymaker_loop.stop(src) + +/obj/machinery/appliance/mixer/candy/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) + food_color = get_random_colour(1) + . = ..() + + +/obj/machinery/appliance/mixer/candy/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return ..() \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/cereal.dm b/code/modules/food/kitchen/cooking_machines/cereal.dm index bd8edf2397..04ec19733e 100644 --- a/code/modules/food/kitchen/cooking_machines/cereal.dm +++ b/code/modules/food/kitchen/cooking_machines/cereal.dm @@ -1,96 +1,96 @@ -/obj/machinery/appliance/mixer/cereal - name = "cereal maker" - desc = "Now with Dann O's available!" - icon = 'icons/obj/cooking_machines.dmi' - icon_state = "cereal_off" - cook_type = "cerealized" - on_icon = "cereal_on" - off_icon = "cereal_off" - appliancetype = CEREALMAKER - var/datum/looping_sound/cerealmaker/cerealmaker_loop - circuit = /obj/item/weapon/circuitboard/cerealmaker - - output_options = list( - "Cereal" = /obj/item/weapon/reagent_containers/food/snacks/variable/cereal - ) - -/obj/machinery/appliance/mixer/cereal/Initialize() - . = ..() - - cerealmaker_loop = new(list(src), FALSE) - -/obj/machinery/appliance/mixer/cereal/Destroy() - . = ..() - - QDEL_NULL(cerealmaker_loop) - -/* -/obj/machinery/appliance/mixer/cereal/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) - . = ..() - product.name = "box of [CI.object.name] cereal" - -/obj/machinery/appliance/mixer/cereal/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) - product.icon = 'icons/obj/food.dmi' - product.icon_state = "cereal_box" - product.filling_color = CI.object.color - - var/image/food_image = image(CI.object.icon, CI.object.icon_state) - food_image.color = CI.object.color - food_image.add_overlay(CI.object.overlays) - food_image.transform *= 0.7 - - product.add_overlay(food_image) -*/ - -/obj/machinery/appliance/mixer/cereal/update_icon() - . = ..() - - if(!stat) - icon_state = on_icon - if(cerealmaker_loop) - cerealmaker_loop.start(src) - else - icon_state = off_icon - if(cerealmaker_loop) - cerealmaker_loop.stop(src) - -/obj/machinery/appliance/mixer/cereal/combination_cook(var/datum/cooking_item/CI) - - var/list/images = list() - var/num = 0 - for(var/obj/item/I in CI.container) - if (istype(I, /obj/item/weapon/reagent_containers/food/snacks/variable/cereal)) - //Images of cereal boxes on cereal boxes is dumb - continue - - var/image/food_image = image(I.icon, I.icon_state) - food_image.color = I.color - food_image.add_overlay(I.overlays) - food_image.transform *= 0.7 - (num * 0.05) - food_image.pixel_x = rand(-2,2) - food_image.pixel_y = rand(-3,5) - - - if (!images[I.icon_state]) - images[I.icon_state] = food_image - num++ - - if (num > 3) - continue - - - var/obj/item/weapon/reagent_containers/food/snacks/result = ..() - - result.color = result.filling_color - for (var/i in images) - result.overlays += images[i] - - -/obj/machinery/appliance/mixer/cereal/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - ..() +/obj/machinery/appliance/mixer/cereal + name = "cereal maker" + desc = "Now with Dann O's available!" + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "cereal_off" + cook_type = "cerealized" + on_icon = "cereal_on" + off_icon = "cereal_off" + appliancetype = CEREALMAKER + var/datum/looping_sound/cerealmaker/cerealmaker_loop + circuit = /obj/item/weapon/circuitboard/cerealmaker + + output_options = list( + "Cereal" = /obj/item/weapon/reagent_containers/food/snacks/variable/cereal + ) + +/obj/machinery/appliance/mixer/cereal/Initialize() + . = ..() + + cerealmaker_loop = new(list(src), FALSE) + +/obj/machinery/appliance/mixer/cereal/Destroy() + . = ..() + + QDEL_NULL(cerealmaker_loop) + +/* +/obj/machinery/appliance/mixer/cereal/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) + . = ..() + product.name = "box of [CI.object.name] cereal" + +/obj/machinery/appliance/mixer/cereal/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) + product.icon = 'icons/obj/food.dmi' + product.icon_state = "cereal_box" + product.filling_color = CI.object.color + + var/image/food_image = image(CI.object.icon, CI.object.icon_state) + food_image.color = CI.object.color + food_image.add_overlay(CI.object.overlays) + food_image.transform *= 0.7 + + product.add_overlay(food_image) +*/ + +/obj/machinery/appliance/mixer/cereal/update_icon() + . = ..() + + if(!stat) + icon_state = on_icon + if(cerealmaker_loop) + cerealmaker_loop.start(src) + else + icon_state = off_icon + if(cerealmaker_loop) + cerealmaker_loop.stop(src) + +/obj/machinery/appliance/mixer/cereal/combination_cook(var/datum/cooking_item/CI) + + var/list/images = list() + var/num = 0 + for(var/obj/item/I in CI.container) + if (istype(I, /obj/item/weapon/reagent_containers/food/snacks/variable/cereal)) + //Images of cereal boxes on cereal boxes is dumb + continue + + var/image/food_image = image(I.icon, I.icon_state) + food_image.color = I.color + food_image.add_overlay(I.overlays) + food_image.transform *= 0.7 - (num * 0.05) + food_image.pixel_x = rand(-2,2) + food_image.pixel_y = rand(-3,5) + + + if (!images[I.icon_state]) + images[I.icon_state] = food_image + num++ + + if (num > 3) + continue + + + var/obj/item/weapon/reagent_containers/food/snacks/result = ..() + + result.color = result.filling_color + for (var/i in images) + result.overlays += images[i] + + +/obj/machinery/appliance/mixer/cereal/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + ..() diff --git a/code/modules/food/kitchen/cooking_machines/container.dm b/code/modules/food/kitchen/cooking_machines/container.dm index ca5a9dd120..59e3935da1 100644 --- a/code/modules/food/kitchen/cooking_machines/container.dm +++ b/code/modules/food/kitchen/cooking_machines/container.dm @@ -1,221 +1,221 @@ -//Cooking containers are used in ovens and fryers, to hold multiple ingredients for a recipe. -//They work fairly similar to the microwave - acting as a container for objects and reagents, -//which can be checked against recipe requirements in order to cook recipes that require several things - -/obj/item/weapon/reagent_containers/cooking_container - icon = 'icons/obj/cooking_machines.dmi' - var/shortname - var/max_space = 20//Maximum sum of w-classes of foods in this container at once - var/max_reagents = 80//Maximum units of reagents - var/food_items = 0 // Used for icon updates - flags = OPENCONTAINER | NOREACT - var/list/insertable = list( - /obj/item/weapon/reagent_containers/food/snacks, - /obj/item/weapon/holder, - /obj/item/weapon/paper, - /obj/item/clothing/head/wizard, - /obj/item/clothing/head/cakehat, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/head/beret - ) - -/obj/item/weapon/reagent_containers/cooking_container/Initialize() - . = ..() - create_reagents(max_reagents) - flags |= OPENCONTAINER | NOREACT - - -/obj/item/weapon/reagent_containers/cooking_container/examine(var/mob/user) - . = ..() - if (contents.len) - var/string = "It contains....
                    " - for (var/atom/movable/A in contents) - string += "[A.name]
                    " - . += "[string]" - if (reagents.total_volume) - . += "It contains [reagents.total_volume]u of reagents." - - -/obj/item/weapon/reagent_containers/cooking_container/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/gripper)) - var/obj/item/weapon/gripper/GR = I - if(GR.wrapped) - GR.wrapped.forceMove(get_turf(src)) - attackby(GR.wrapped, user) - if(QDELETED(GR.wrapped)) - GR.wrapped = null - - if(GR?.wrapped.loc != src) - GR.wrapped = null - - return - - for (var/possible_type in insertable) - if (istype(I, possible_type)) - if (!can_fit(I)) - to_chat(user, "There's no more space in the [src] for that!") - return 0 - - if(!user.unEquip(I) && !isturf(I.loc)) - return - I.forceMove(src) - to_chat(user, "You put the [I] into the [src].") - food_items += 1 - update_icon() - return - -/obj/item/weapon/reagent_containers/cooking_container/verb/empty() - set src in oview(1) - set name = "Empty Container" - set category = "Object" - set desc = "Removes items from the container, excluding reagents." - - do_empty(usr) - -/obj/item/weapon/reagent_containers/cooking_container/proc/do_empty(mob/user) - if (!isliving(user)) - //Here we only check for ghosts. Animals are intentionally allowed to remove things from oven trays so they can eat it - return - - if (user.stat || user.restrained()) - to_chat(user, "You are in no fit state to do this.") - return - - if (!Adjacent(user)) - to_chat(user, "You can't reach [src] from here.") - return - - if (!contents.len) - to_chat(user, "There's nothing in the [src] you can remove!") - return - - for (var/atom/movable/A in contents) - A.forceMove(get_turf(src)) - - to_chat(user, "You remove all the solid items from the [src].") - -/obj/item/weapon/reagent_containers/cooking_container/proc/check_contents() - if (contents.len == 0) - if (!reagents || reagents.total_volume == 0) - return 0//Completely empty - else if (contents.len == 1) - if (!reagents || reagents.total_volume == 0) - return 1//Contains only a single object which can be extracted alone - return 2//Contains multiple objects and/or reagents - -/obj/item/weapon/reagent_containers/cooking_container/AltClick(var/mob/user) - do_empty(user) - food_items = 0 - update_icon() - -//Deletes contents of container. -//Used when food is burned, before replacing it with a burned mess -/obj/item/weapon/reagent_containers/cooking_container/proc/clear() - for (var/atom/a in contents) - qdel(a) - - if (reagents) - reagents.clear_reagents() - -/obj/item/weapon/reagent_containers/cooking_container/proc/label(var/number, var/CT = null) - //This returns something like "Fryer basket 1 - empty" - //The latter part is a brief reminder of contents - //This is used in the removal menu - . = shortname - if (!isnull(number)) - .+= " [number]" - .+= " - " - if (CT) - .+=CT - else if (contents.len) - for (var/obj/O in contents) - .+=O.name//Just append the name of the first object - return - else if (reagents && reagents.total_volume > 0) - var/datum/reagent/R = reagents.get_master_reagent() - .+=R.name//Append name of most voluminous reagent - return - else - . += "empty" - - -/obj/item/weapon/reagent_containers/cooking_container/proc/can_fit(var/obj/item/I) - var/total = 0 - for (var/obj/item/J in contents) - total += J.w_class - - if((max_space - total) >= I.w_class) - return 1 - - -//Takes a reagent holder as input and distributes its contents among the items in the container -//Distribution is weighted based on the volume already present in each item -/obj/item/weapon/reagent_containers/cooking_container/proc/soak_reagent(var/datum/reagents/holder) - var/total = 0 - var/list/weights = list() - for (var/obj/item/I in contents) - if (I.reagents && I.reagents.total_volume) - total += I.reagents.total_volume - weights[I] = I.reagents.total_volume - - if (total > 0) - for (var/obj/item/I in contents) - if (weights[I]) - holder.trans_to(I, weights[I] / total) - -/obj/item/weapon/reagent_containers/cooking_container/update_icon() - overlays.Cut() - - if(food_items) - var/image/filling = image('icons/obj/cooking_machines.dmi', src, "[icon_state]10") - - var/percent = round((food_items / max_space) * 100) - switch(percent) - if(0 to 2) filling.icon_state = "[icon_state]" - if(3 to 24) filling.icon_state = "[icon_state]1" - if(25 to 49) filling.icon_state = "[icon_state]2" - if(50 to 74) filling.icon_state = "[icon_state]3" - if(75 to 79) filling.icon_state = "[icon_state]4" - if(80 to INFINITY) filling.icon_state = "[icon_state]5" - - overlays += filling - -/obj/item/weapon/reagent_containers/cooking_container/oven - name = "oven dish" - shortname = "shelf" - desc = "Put ingredients in this; designed for use with an oven. Warranty void if used incorrectly. Alt click to remove contents." - icon_state = "ovendish" - max_space = 30 - max_reagents = 120 - -/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize() - . = ..() - - // We add to the insertable list specifically for the oven trays, to allow specialty cakes. - insertable += list( - /obj/item/organ/internal/brain // As before, needed for braincake - ) - -/obj/item/weapon/reagent_containers/cooking_container/fryer - name = "fryer basket" - shortname = "basket" - desc = "Put ingredients in this; designed for use with a deep fryer. Warranty void if used incorrectly. Alt click to remove contents." - icon_state = "basket" - -/obj/item/weapon/reagent_containers/cooking_container/grill - name = "grill rack" - shortname = "rack" - desc = "Put ingredients 'in'/on this; designed for use with a grill. Warranty void if used incorrectly. Alt click to remove contents." - icon_state = "grillrack" - -/obj/item/weapon/reagent_containers/cooking_container/grill/Initialize() - . = ..() - - // Needed for the special recipes of the grill - insertable += list( - /obj/item/organ/internal/brain, - /obj/item/robot_parts/head, - /obj/item/weapon/ectoplasm, - /obj/item/weapon/holder/mouse, - /obj/item/stack/rods - ) +//Cooking containers are used in ovens and fryers, to hold multiple ingredients for a recipe. +//They work fairly similar to the microwave - acting as a container for objects and reagents, +//which can be checked against recipe requirements in order to cook recipes that require several things + +/obj/item/weapon/reagent_containers/cooking_container + icon = 'icons/obj/cooking_machines.dmi' + var/shortname + var/max_space = 20//Maximum sum of w-classes of foods in this container at once + var/max_reagents = 80//Maximum units of reagents + var/food_items = 0 // Used for icon updates + flags = OPENCONTAINER | NOREACT + var/list/insertable = list( + /obj/item/weapon/reagent_containers/food/snacks, + /obj/item/weapon/holder, + /obj/item/weapon/paper, + /obj/item/clothing/head/wizard, + /obj/item/clothing/head/cakehat, + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/head/beret + ) + +/obj/item/weapon/reagent_containers/cooking_container/Initialize() + . = ..() + create_reagents(max_reagents) + flags |= OPENCONTAINER | NOREACT + + +/obj/item/weapon/reagent_containers/cooking_container/examine(var/mob/user) + . = ..() + if (contents.len) + var/string = "It contains....
                    " + for (var/atom/movable/A in contents) + string += "[A.name]
                    " + . += "[string]" + if (reagents.total_volume) + . += "It contains [reagents.total_volume]u of reagents." + + +/obj/item/weapon/reagent_containers/cooking_container/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(istype(I, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/GR = I + if(GR.wrapped) + GR.wrapped.forceMove(get_turf(src)) + attackby(GR.wrapped, user) + if(QDELETED(GR.wrapped)) + GR.wrapped = null + + if(GR?.wrapped.loc != src) + GR.wrapped = null + + return + + for (var/possible_type in insertable) + if (istype(I, possible_type)) + if (!can_fit(I)) + to_chat(user, "There's no more space in the [src] for that!") + return 0 + + if(!user.unEquip(I) && !isturf(I.loc)) + return + I.forceMove(src) + to_chat(user, "You put the [I] into the [src].") + food_items += 1 + update_icon() + return + +/obj/item/weapon/reagent_containers/cooking_container/verb/empty() + set src in oview(1) + set name = "Empty Container" + set category = "Object" + set desc = "Removes items from the container, excluding reagents." + + do_empty(usr) + +/obj/item/weapon/reagent_containers/cooking_container/proc/do_empty(mob/user) + if (!isliving(user)) + //Here we only check for ghosts. Animals are intentionally allowed to remove things from oven trays so they can eat it + return + + if (user.stat || user.restrained()) + to_chat(user, "You are in no fit state to do this.") + return + + if (!Adjacent(user)) + to_chat(user, "You can't reach [src] from here.") + return + + if (!contents.len) + to_chat(user, "There's nothing in the [src] you can remove!") + return + + for (var/atom/movable/A in contents) + A.forceMove(get_turf(src)) + + to_chat(user, "You remove all the solid items from the [src].") + +/obj/item/weapon/reagent_containers/cooking_container/proc/check_contents() + if (contents.len == 0) + if (!reagents || reagents.total_volume == 0) + return 0//Completely empty + else if (contents.len == 1) + if (!reagents || reagents.total_volume == 0) + return 1//Contains only a single object which can be extracted alone + return 2//Contains multiple objects and/or reagents + +/obj/item/weapon/reagent_containers/cooking_container/AltClick(var/mob/user) + do_empty(user) + food_items = 0 + update_icon() + +//Deletes contents of container. +//Used when food is burned, before replacing it with a burned mess +/obj/item/weapon/reagent_containers/cooking_container/proc/clear() + for (var/atom/a in contents) + qdel(a) + + if (reagents) + reagents.clear_reagents() + +/obj/item/weapon/reagent_containers/cooking_container/proc/label(var/number, var/CT = null) + //This returns something like "Fryer basket 1 - empty" + //The latter part is a brief reminder of contents + //This is used in the removal menu + . = shortname + if (!isnull(number)) + .+= " [number]" + .+= " - " + if (CT) + .+=CT + else if (contents.len) + for (var/obj/O in contents) + .+=O.name//Just append the name of the first object + return + else if (reagents && reagents.total_volume > 0) + var/datum/reagent/R = reagents.get_master_reagent() + .+=R.name//Append name of most voluminous reagent + return + else + . += "empty" + + +/obj/item/weapon/reagent_containers/cooking_container/proc/can_fit(var/obj/item/I) + var/total = 0 + for (var/obj/item/J in contents) + total += J.w_class + + if((max_space - total) >= I.w_class) + return 1 + + +//Takes a reagent holder as input and distributes its contents among the items in the container +//Distribution is weighted based on the volume already present in each item +/obj/item/weapon/reagent_containers/cooking_container/proc/soak_reagent(var/datum/reagents/holder) + var/total = 0 + var/list/weights = list() + for (var/obj/item/I in contents) + if (I.reagents && I.reagents.total_volume) + total += I.reagents.total_volume + weights[I] = I.reagents.total_volume + + if (total > 0) + for (var/obj/item/I in contents) + if (weights[I]) + holder.trans_to(I, weights[I] / total) + +/obj/item/weapon/reagent_containers/cooking_container/update_icon() + overlays.Cut() + + if(food_items) + var/image/filling = image('icons/obj/cooking_machines.dmi', src, "[icon_state]10") + + var/percent = round((food_items / max_space) * 100) + switch(percent) + if(0 to 2) filling.icon_state = "[icon_state]" + if(3 to 24) filling.icon_state = "[icon_state]1" + if(25 to 49) filling.icon_state = "[icon_state]2" + if(50 to 74) filling.icon_state = "[icon_state]3" + if(75 to 79) filling.icon_state = "[icon_state]4" + if(80 to INFINITY) filling.icon_state = "[icon_state]5" + + overlays += filling + +/obj/item/weapon/reagent_containers/cooking_container/oven + name = "oven dish" + shortname = "shelf" + desc = "Put ingredients in this; designed for use with an oven. Warranty void if used incorrectly. Alt click to remove contents." + icon_state = "ovendish" + max_space = 30 + max_reagents = 120 + +/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize() + . = ..() + + // We add to the insertable list specifically for the oven trays, to allow specialty cakes. + insertable += list( + /obj/item/organ/internal/brain // As before, needed for braincake + ) + +/obj/item/weapon/reagent_containers/cooking_container/fryer + name = "fryer basket" + shortname = "basket" + desc = "Put ingredients in this; designed for use with a deep fryer. Warranty void if used incorrectly. Alt click to remove contents." + icon_state = "basket" + +/obj/item/weapon/reagent_containers/cooking_container/grill + name = "grill rack" + shortname = "rack" + desc = "Put ingredients 'in'/on this; designed for use with a grill. Warranty void if used incorrectly. Alt click to remove contents." + icon_state = "grillrack" + +/obj/item/weapon/reagent_containers/cooking_container/grill/Initialize() + . = ..() + + // Needed for the special recipes of the grill + insertable += list( + /obj/item/organ/internal/brain, + /obj/item/robot_parts/head, + /obj/item/weapon/ectoplasm, + /obj/item/weapon/holder/mouse, + /obj/item/stack/rods + ) diff --git a/code/modules/food/kitchen/cooking_machines/grill.dm b/code/modules/food/kitchen/cooking_machines/grill.dm index 29a9ed8df2..ded63c940a 100644 --- a/code/modules/food/kitchen/cooking_machines/grill.dm +++ b/code/modules/food/kitchen/cooking_machines/grill.dm @@ -1,58 +1,58 @@ -/obj/machinery/appliance/cooker/grill - name = "grill" - desc = "Backyard grilling, IN SPACE." - icon_state = "grill_off" - cook_type = "grilled" - appliancetype = GRILL - food_color = "#A34719" - on_icon = "grill_on" - off_icon = "grill_off" - can_burn_food = TRUE - var/datum/looping_sound/grill/grill_loop - circuit = /obj/item/weapon/circuitboard/grill - active_power_usage = 4 KILOWATTS - heating_power = 4000 - idle_power_usage = 2 KILOWATTS - - optimal_power = 1.2 // Things on the grill cook .6 faster - this is now the fastest appliance to heat and to cook on. BURGERS GO SIZZLE. - - stat = POWEROFF // Starts turned off. - - // Grill is faster to heat and setup than the rest. - optimal_temp = 120 + T0C - min_temp = 60 + T0C - resistance = 8 KILOWATTS // Very fast to heat up. - - max_contents = 3 // Arbitrary number, 3 grill 'racks' - container_type = /obj/item/weapon/reagent_containers/cooking_container/grill - -/obj/machinery/appliance/cooker/grill/Initialize() - . = ..() - grill_loop = new(list(src), FALSE) - -/obj/machinery/appliance/cooker/grill/Destroy() - QDEL_NULL(grill_loop) - return ..() - -/obj/machinery/appliance/cooker/grill/update_icon() // TODO: Cooking icon - if(!stat) - icon_state = on_icon - if(cooking == TRUE) - if(grill_loop) - grill_loop.start(src) - else - if(grill_loop) - grill_loop.stop(src) - else - icon_state = off_icon - if(grill_loop) - grill_loop.stop(src) - -/obj/machinery/appliance/cooker/grill/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return +/obj/machinery/appliance/cooker/grill + name = "grill" + desc = "Backyard grilling, IN SPACE." + icon_state = "grill_off" + cook_type = "grilled" + appliancetype = GRILL + food_color = "#A34719" + on_icon = "grill_on" + off_icon = "grill_off" + can_burn_food = TRUE + var/datum/looping_sound/grill/grill_loop + circuit = /obj/item/weapon/circuitboard/grill + active_power_usage = 4 KILOWATTS + heating_power = 4000 + idle_power_usage = 2 KILOWATTS + + optimal_power = 1.2 // Things on the grill cook .6 faster - this is now the fastest appliance to heat and to cook on. BURGERS GO SIZZLE. + + stat = POWEROFF // Starts turned off. + + // Grill is faster to heat and setup than the rest. + optimal_temp = 120 + T0C + min_temp = 60 + T0C + resistance = 8 KILOWATTS // Very fast to heat up. + + max_contents = 3 // Arbitrary number, 3 grill 'racks' + container_type = /obj/item/weapon/reagent_containers/cooking_container/grill + +/obj/machinery/appliance/cooker/grill/Initialize() + . = ..() + grill_loop = new(list(src), FALSE) + +/obj/machinery/appliance/cooker/grill/Destroy() + QDEL_NULL(grill_loop) + return ..() + +/obj/machinery/appliance/cooker/grill/update_icon() // TODO: Cooking icon + if(!stat) + icon_state = on_icon + if(cooking == TRUE) + if(grill_loop) + grill_loop.start(src) + else + if(grill_loop) + grill_loop.stop(src) + else + icon_state = off_icon + if(grill_loop) + grill_loop.stop(src) + +/obj/machinery/appliance/cooker/grill/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return ..() \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/oven.dm b/code/modules/food/kitchen/cooking_machines/oven.dm index 2fd34c5c55..7a8a45b1ff 100644 --- a/code/modules/food/kitchen/cooking_machines/oven.dm +++ b/code/modules/food/kitchen/cooking_machines/oven.dm @@ -1,165 +1,165 @@ -/obj/machinery/appliance/cooker/oven - name = "oven" - desc = "Cookies are ready, dear." - icon = 'icons/obj/cooking_machines.dmi' - icon_state = "ovenopen" - cook_type = "baked" - appliancetype = OVEN - food_color = "#A34719" - can_burn_food = TRUE - var/datum/looping_sound/oven/oven_loop - circuit = /obj/item/weapon/circuitboard/oven - active_power_usage = 6 KILOWATTS - heating_power = 6 KILOWATTS - //Based on a double deck electric convection oven - - resistance = 12 KILOWATTS // Approx. 12 minutes to heat up. - idle_power_usage = 2 KILOWATTS - //uses ~30% power to stay warm - optimal_power = 0.8 // Oven cooks .2 faster than the default speed. - - light_x = 3 - light_y = 4 - max_contents = 5 - container_type = /obj/item/weapon/reagent_containers/cooking_container/oven - - stat = POWEROFF //Starts turned off - - var/open = FALSE // Start closed just so people don't try to preheat with it open, lol. - - output_options = list( - "Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza, - "Bread" = /obj/item/weapon/reagent_containers/food/snacks/variable/bread, - "Pie" = /obj/item/weapon/reagent_containers/food/snacks/variable/pie, - "Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake, - "Hot Pocket" = /obj/item/weapon/reagent_containers/food/snacks/variable/pocket, - "Kebab" = /obj/item/weapon/reagent_containers/food/snacks/variable/kebab, - "Waffles" = /obj/item/weapon/reagent_containers/food/snacks/variable/waffles, - "Cookie" = /obj/item/weapon/reagent_containers/food/snacks/variable/cookie, - "Donut" = /obj/item/weapon/reagent_containers/food/snacks/variable/donut, - ) - -/obj/machinery/appliance/cooker/oven/Initialize() - . = ..() - - oven_loop = new(list(src), FALSE) - -/obj/machinery/appliance/cooker/oven/Destroy() - QDEL_NULL(oven_loop) - return ..() - -/obj/machinery/appliance/cooker/oven/update_icon() - if(!open) - if(!stat) - icon_state = "ovenclosed_on" - if(cooking == TRUE) - icon_state = "ovenclosed_cooking" - if(oven_loop) - oven_loop.start(src) - else - icon_state = "ovenclosed_on" - if(oven_loop) - oven_loop.stop(src) - else - icon_state = "ovenclosed_off" - if(oven_loop) - oven_loop.stop(src) - else - icon_state = "ovenopen" - if(oven_loop) - oven_loop.stop(src) - ..() - -/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user) - try_toggle_door(user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - -/obj/machinery/appliance/cooker/oven/verb/toggle_door() - set src in oview(1) - set category = "Object" - set name = "Open/close oven door" - - try_toggle_door(usr) - -/obj/machinery/appliance/cooker/oven/proc/try_toggle_door(mob/user) - if(!isliving(usr) || isAI(user)) - return - - if(!usr.IsAdvancedToolUser()) - to_chat(user, "You lack the dexterity to do that.") - return - - if(!Adjacent(usr)) - to_chat(user, "You can't reach the [src] from there, get closer!") - return - - if(open) - open = FALSE - loss = (heating_power / resistance) * 0.5 - cooking = TRUE - else - open = TRUE - loss = (heating_power / resistance) * 4 - //When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open) - cooking = FALSE - - playsound(src, 'sound/machines/hatch_open.ogg', 20, 1) - to_chat(user, "You [open? "open":"close"] the oven door") - update_icon() - -/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I) - // check if someone's trying to manipulate the machine - - if(I.has_tool_quality(TOOL_CROWBAR) || I.has_tool_quality(TOOL_SCREWDRIVER) || istype(I, /obj/item/weapon/storage/part_replacer)) - return TRUE - else - return FALSE - -/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user) - if(!open && !manip(I)) - to_chat(user, "You can't put anything in while the door is closed!") - return 0 - - else - return ..() - - -//If an oven's door is open it will lose heat every proc, even if it also gained it -//But dont call equalize twice in one stack. A return value of -1 from the parent indicates equalize was already called -/obj/machinery/appliance/cooker/oven/heat_up() - .=..() - if(open && . != -1) - var/turf/T = get_turf(src) - if(temperature > T.temperature) - equalize_temperature() - -/obj/machinery/appliance/cooker/oven/can_remove_items(var/mob/user, show_warning = TRUE) - if(!open) - if(show_warning) - to_chat(user, "You can't take anything out while the door is closed!") - return 0 - - else - return ..() - - -//Oven has lots of recipes and combine options. The chance for interference is high, so -//If a combine target is set the oven will do it instead of checking recipes -/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI) - if(CI.combine_target) - CI.result_type = 3//Combination type. We're making something out of our ingredients - visible_message("\The [src] pings!") - combination_cook(CI) - return - else - ..() - - -/obj/machinery/appliance/cooker/oven/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - ..() +/obj/machinery/appliance/cooker/oven + name = "oven" + desc = "Cookies are ready, dear." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "ovenopen" + cook_type = "baked" + appliancetype = OVEN + food_color = "#A34719" + can_burn_food = TRUE + var/datum/looping_sound/oven/oven_loop + circuit = /obj/item/weapon/circuitboard/oven + active_power_usage = 6 KILOWATTS + heating_power = 6 KILOWATTS + //Based on a double deck electric convection oven + + resistance = 12 KILOWATTS // Approx. 12 minutes to heat up. + idle_power_usage = 2 KILOWATTS + //uses ~30% power to stay warm + optimal_power = 0.8 // Oven cooks .2 faster than the default speed. + + light_x = 3 + light_y = 4 + max_contents = 5 + container_type = /obj/item/weapon/reagent_containers/cooking_container/oven + + stat = POWEROFF //Starts turned off + + var/open = FALSE // Start closed just so people don't try to preheat with it open, lol. + + output_options = list( + "Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza, + "Bread" = /obj/item/weapon/reagent_containers/food/snacks/variable/bread, + "Pie" = /obj/item/weapon/reagent_containers/food/snacks/variable/pie, + "Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake, + "Hot Pocket" = /obj/item/weapon/reagent_containers/food/snacks/variable/pocket, + "Kebab" = /obj/item/weapon/reagent_containers/food/snacks/variable/kebab, + "Waffles" = /obj/item/weapon/reagent_containers/food/snacks/variable/waffles, + "Cookie" = /obj/item/weapon/reagent_containers/food/snacks/variable/cookie, + "Donut" = /obj/item/weapon/reagent_containers/food/snacks/variable/donut, + ) + +/obj/machinery/appliance/cooker/oven/Initialize() + . = ..() + + oven_loop = new(list(src), FALSE) + +/obj/machinery/appliance/cooker/oven/Destroy() + QDEL_NULL(oven_loop) + return ..() + +/obj/machinery/appliance/cooker/oven/update_icon() + if(!open) + if(!stat) + icon_state = "ovenclosed_on" + if(cooking == TRUE) + icon_state = "ovenclosed_cooking" + if(oven_loop) + oven_loop.start(src) + else + icon_state = "ovenclosed_on" + if(oven_loop) + oven_loop.stop(src) + else + icon_state = "ovenclosed_off" + if(oven_loop) + oven_loop.stop(src) + else + icon_state = "ovenopen" + if(oven_loop) + oven_loop.stop(src) + ..() + +/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user) + try_toggle_door(user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + +/obj/machinery/appliance/cooker/oven/verb/toggle_door() + set src in oview(1) + set category = "Object" + set name = "Open/close oven door" + + try_toggle_door(usr) + +/obj/machinery/appliance/cooker/oven/proc/try_toggle_door(mob/user) + if(!isliving(usr) || isAI(user)) + return + + if(!usr.IsAdvancedToolUser()) + to_chat(user, "You lack the dexterity to do that.") + return + + if(!Adjacent(usr)) + to_chat(user, "You can't reach the [src] from there, get closer!") + return + + if(open) + open = FALSE + loss = (heating_power / resistance) * 0.5 + cooking = TRUE + else + open = TRUE + loss = (heating_power / resistance) * 4 + //When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open) + cooking = FALSE + + playsound(src, 'sound/machines/hatch_open.ogg', 20, 1) + to_chat(user, "You [open? "open":"close"] the oven door") + update_icon() + +/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I) + // check if someone's trying to manipulate the machine + + if(I.has_tool_quality(TOOL_CROWBAR) || I.has_tool_quality(TOOL_SCREWDRIVER) || istype(I, /obj/item/weapon/storage/part_replacer)) + return TRUE + else + return FALSE + +/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user) + if(!open && !manip(I)) + to_chat(user, "You can't put anything in while the door is closed!") + return 0 + + else + return ..() + + +//If an oven's door is open it will lose heat every proc, even if it also gained it +//But dont call equalize twice in one stack. A return value of -1 from the parent indicates equalize was already called +/obj/machinery/appliance/cooker/oven/heat_up() + .=..() + if(open && . != -1) + var/turf/T = get_turf(src) + if(temperature > T.temperature) + equalize_temperature() + +/obj/machinery/appliance/cooker/oven/can_remove_items(var/mob/user, show_warning = TRUE) + if(!open) + if(show_warning) + to_chat(user, "You can't take anything out while the door is closed!") + return 0 + + else + return ..() + + +//Oven has lots of recipes and combine options. The chance for interference is high, so +//If a combine target is set the oven will do it instead of checking recipes +/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI) + if(CI.combine_target) + CI.result_type = 3//Combination type. We're making something out of our ingredients + visible_message("\The [src] pings!") + combination_cook(CI) + return + else + ..() + + +/obj/machinery/appliance/cooker/oven/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + ..() diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm index bac6199742..ff64184a57 100644 --- a/code/modules/food/kitchen/gibber.dm +++ b/code/modules/food/kitchen/gibber.dm @@ -1,256 +1,256 @@ - -/obj/machinery/gibber - name = "gibber" - desc = "The name isn't descriptive enough?" - icon = 'icons/obj/kitchen.dmi' - icon_state = "grinder" - density = TRUE - anchored = TRUE - unacidable = TRUE - req_access = list(access_kitchen,access_morgue) - - var/operating = 0 //Is it on? - var/dirty = 0 // Does it need cleaning? - var/mob/living/occupant // Mob who has been put inside - var/gib_time = 40 // Time from starting until meat appears - var/gib_throw_dir = WEST // Direction to spit meat and gibs in. - - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 500 - -//auto-gibs anything that bumps into it -/obj/machinery/gibber/autogibber - var/turf/input_plate - -/obj/machinery/gibber/autogibber/Initialize() - . = ..() - for(var/i in cardinal) - var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - gib_throw_dir = i - qdel(input_obj) - break - - if(!input_plate) - log_misc("a [src] didn't find an input plate.") - -/obj/machinery/gibber/Destroy() - occupant = null - return ..() - -/obj/machinery/gibber/autogibber/Destroy() - input_plate = null - return ..() - -/obj/machinery/gibber/autogibber/Bumped(var/atom/A) - if(!input_plate) return - - if(ismob(A)) - var/mob/M = A - - if(M.loc == input_plate - ) - M.loc = src - M.gib() - - -/obj/machinery/gibber/New() - ..() - add_overlay("grjam") - -/obj/machinery/gibber/update_icon() - cut_overlays() - if (dirty) - add_overlay("grbloody") - if(stat & (NOPOWER|BROKEN)) - return - if (!occupant) - add_overlay("grjam") - else if (operating) - add_overlay("gruse") - else - add_overlay("gridle") - -/obj/machinery/gibber/relaymove(mob/user as mob) - src.go_out() - return - -/obj/machinery/gibber/attack_hand(mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - if(operating) - to_chat(user, "The gibber is locked and running, wait for it to finish.") - return - else - src.startgibbing(user) - -/obj/machinery/gibber/examine() - . = ..() - . += "The safety guard is [emagged ? "disabled" : "enabled"]." - -/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user) - emagged = !emagged - to_chat(user, "You [emagged ? "disable" : "enable"] the gibber safety guard.") - return 1 - -/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user) - var/obj/item/weapon/grab/G = W - - if(default_unfasten_wrench(user, W, 40)) - return - - if(!istype(G)) - return ..() - - if(G.state < 2) - to_chat(user, "You need a better grip to do that!") - return - - move_into_gibber(user,G.affecting) - // Grab() process should clean up the grab item, no need to del it. - -/obj/machinery/gibber/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - ..() - -/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.restrained()) - return - move_into_gibber(user,target) - -/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim) - - if(src.occupant) - to_chat(user, "The gibber is full, empty it first!") - return - - if(operating) - to_chat(user, "The gibber is locked and running, wait for it to finish.") - return - - if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_mob)) ) - to_chat(user, "This is not suitable for the gibber!") - return - - if(istype(victim,/mob/living/carbon/human) && !emagged) - to_chat(user, "The gibber safety guard is engaged!") - return - - - if(victim.abiotic(1)) - to_chat(user, "Subject may not have abiotic items on.") - return - - user.visible_message("[user] starts to put [victim] into the gibber!") - src.add_fingerprint(user) - if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) - user.visible_message("[user] stuffs [victim] into the gibber!") - if(victim.client) - victim.client.perspective = EYE_PERSPECTIVE - victim.client.eye = src - victim.loc = src - src.occupant = victim - update_icon() - -/obj/machinery/gibber/verb/eject() - set category = "Object" - set name = "Empty Gibber" - set src in oview(1) - - if (usr.stat != 0) - return - src.go_out() - add_fingerprint(usr) - return - -/obj/machinery/gibber/proc/go_out() - if(operating || !src.occupant) - return - for(var/obj/O in src) - O.loc = src.loc - if (src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc - src.occupant = null - update_icon() - return - - -/obj/machinery/gibber/proc/startgibbing(mob/user as mob) - if(src.operating) - return - if(!src.occupant) - visible_message("You hear a loud metallic grinding sound.") - return - - use_power(1000) - visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.") - src.operating = 1 - update_icon() - - var/slab_name = occupant.name - var/slab_count = 2 + occupant.meat_amount - var/slab_type = occupant.meat_type ? occupant.meat_type : /obj/item/weapon/reagent_containers/food/snacks/meat - var/slab_nutrition = src.occupant.nutrition / 15 - - var/list/byproducts = occupant?.butchery_loot?.Copy() - - if(istype(src.occupant,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = occupant - slab_name = src.occupant.real_name - slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type - - // Small mobs don't give as much nutrition. - if(issmall(src.occupant)) - slab_nutrition *= 0.5 - slab_nutrition /= slab_count - - for(var/i=1 to slab_count) - var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8)) - if(istype(new_meat)) - new_meat.name = "[slab_name] [new_meat.name]" - new_meat.reagents.add_reagent("nutriment",slab_nutrition) - if(src.occupant.reagents) - src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/(2 + occupant.meat_amount),1)) - - add_attack_logs(user,occupant,"Used [src] to gib") - - src.occupant.ghostize() - - spawn(gib_time) - occupant.gib() - occupant = null - playsound(src, 'sound/effects/splat.ogg', 50, 1) - operating = 0 - if(LAZYLEN(byproducts)) - for(var/path in byproducts) - while(byproducts[path]) - if(prob(min(90,30 * byproducts[path]))) - new path(src) - - byproducts[path] -= 1 - - for (var/obj/thing in contents) - // There's a chance that the gibber will fail to destroy or butcher some evidence. - if(istype(thing,/obj/item/organ) && prob(80)) - var/obj/item/organ/OR = thing - if(OR.can_butcher(src)) - OR.butcher(src, null, src) // Butcher it, and add it to our list of things to launch. - else - qdel(thing) - continue - thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing. - thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt. - - update_icon() - - + +/obj/machinery/gibber + name = "gibber" + desc = "The name isn't descriptive enough?" + icon = 'icons/obj/kitchen.dmi' + icon_state = "grinder" + density = TRUE + anchored = TRUE + unacidable = TRUE + req_access = list(access_kitchen,access_morgue) + + var/operating = 0 //Is it on? + var/dirty = 0 // Does it need cleaning? + var/mob/living/occupant // Mob who has been put inside + var/gib_time = 40 // Time from starting until meat appears + var/gib_throw_dir = WEST // Direction to spit meat and gibs in. + + use_power = USE_POWER_IDLE + idle_power_usage = 2 + active_power_usage = 500 + +//auto-gibs anything that bumps into it +/obj/machinery/gibber/autogibber + var/turf/input_plate + +/obj/machinery/gibber/autogibber/Initialize() + . = ..() + for(var/i in cardinal) + var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) + if(input_obj) + if(isturf(input_obj.loc)) + input_plate = input_obj.loc + gib_throw_dir = i + qdel(input_obj) + break + + if(!input_plate) + log_misc("a [src] didn't find an input plate.") + +/obj/machinery/gibber/Destroy() + occupant = null + return ..() + +/obj/machinery/gibber/autogibber/Destroy() + input_plate = null + return ..() + +/obj/machinery/gibber/autogibber/Bumped(var/atom/A) + if(!input_plate) return + + if(ismob(A)) + var/mob/M = A + + if(M.loc == input_plate + ) + M.loc = src + M.gib() + + +/obj/machinery/gibber/New() + ..() + add_overlay("grjam") + +/obj/machinery/gibber/update_icon() + cut_overlays() + if (dirty) + add_overlay("grbloody") + if(stat & (NOPOWER|BROKEN)) + return + if (!occupant) + add_overlay("grjam") + else if (operating) + add_overlay("gruse") + else + add_overlay("gridle") + +/obj/machinery/gibber/relaymove(mob/user as mob) + src.go_out() + return + +/obj/machinery/gibber/attack_hand(mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return + if(operating) + to_chat(user, "The gibber is locked and running, wait for it to finish.") + return + else + src.startgibbing(user) + +/obj/machinery/gibber/examine() + . = ..() + . += "The safety guard is [emagged ? "disabled" : "enabled"]." + +/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user) + emagged = !emagged + to_chat(user, "You [emagged ? "disable" : "enable"] the gibber safety guard.") + return 1 + +/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user) + var/obj/item/weapon/grab/G = W + + if(default_unfasten_wrench(user, W, 40)) + return + + if(!istype(G)) + return ..() + + if(G.state < 2) + to_chat(user, "You need a better grip to do that!") + return + + move_into_gibber(user,G.affecting) + // Grab() process should clean up the grab item, no need to del it. + +/obj/machinery/gibber/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + ..() + +/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.restrained()) + return + move_into_gibber(user,target) + +/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim) + + if(src.occupant) + to_chat(user, "The gibber is full, empty it first!") + return + + if(operating) + to_chat(user, "The gibber is locked and running, wait for it to finish.") + return + + if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_mob)) ) + to_chat(user, "This is not suitable for the gibber!") + return + + if(istype(victim,/mob/living/carbon/human) && !emagged) + to_chat(user, "The gibber safety guard is engaged!") + return + + + if(victim.abiotic(1)) + to_chat(user, "Subject may not have abiotic items on.") + return + + user.visible_message("[user] starts to put [victim] into the gibber!") + src.add_fingerprint(user) + if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) + user.visible_message("[user] stuffs [victim] into the gibber!") + if(victim.client) + victim.client.perspective = EYE_PERSPECTIVE + victim.client.eye = src + victim.loc = src + src.occupant = victim + update_icon() + +/obj/machinery/gibber/verb/eject() + set category = "Object" + set name = "Empty Gibber" + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/gibber/proc/go_out() + if(operating || !src.occupant) + return + for(var/obj/O in src) + O.loc = src.loc + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + update_icon() + return + + +/obj/machinery/gibber/proc/startgibbing(mob/user as mob) + if(src.operating) + return + if(!src.occupant) + visible_message("You hear a loud metallic grinding sound.") + return + + use_power(1000) + visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.") + src.operating = 1 + update_icon() + + var/slab_name = occupant.name + var/slab_count = 2 + occupant.meat_amount + var/slab_type = occupant.meat_type ? occupant.meat_type : /obj/item/weapon/reagent_containers/food/snacks/meat + var/slab_nutrition = src.occupant.nutrition / 15 + + var/list/byproducts = occupant?.butchery_loot?.Copy() + + if(istype(src.occupant,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = occupant + slab_name = src.occupant.real_name + slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type + + // Small mobs don't give as much nutrition. + if(issmall(src.occupant)) + slab_nutrition *= 0.5 + slab_nutrition /= slab_count + + for(var/i=1 to slab_count) + var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8)) + if(istype(new_meat)) + new_meat.name = "[slab_name] [new_meat.name]" + new_meat.reagents.add_reagent("nutriment",slab_nutrition) + if(src.occupant.reagents) + src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/(2 + occupant.meat_amount),1)) + + add_attack_logs(user,occupant,"Used [src] to gib") + + src.occupant.ghostize() + + spawn(gib_time) + occupant.gib() + occupant = null + playsound(src, 'sound/effects/splat.ogg', 50, 1) + operating = 0 + if(LAZYLEN(byproducts)) + for(var/path in byproducts) + while(byproducts[path]) + if(prob(min(90,30 * byproducts[path]))) + new path(src) + + byproducts[path] -= 1 + + for (var/obj/thing in contents) + // There's a chance that the gibber will fail to destroy or butcher some evidence. + if(istype(thing,/obj/item/organ) && prob(80)) + var/obj/item/organ/OR = thing + if(OR.can_butcher(src)) + OR.butcher(src, null, src) // Butcher it, and add it to our list of things to launch. + else + qdel(thing) + continue + thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing. + thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt. + + update_icon() + + diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm index a08631d0e4..b1a651cd39 100644 --- a/code/modules/food/kitchen/icecream.dm +++ b/code/modules/food/kitchen/icecream.dm @@ -1,201 +1,201 @@ -#define ICECREAM_VANILLA 1 -#define ICECREAM_CHOCOLATE 2 -#define ICECREAM_STRAWBERRY 3 -#define ICECREAM_BLUE 4 -#define CONE_WAFFLE 5 -#define CONE_CHOC 6 - -// Ported wholesale from Apollo Station. - -/obj/machinery/icecream_vat - name = "icecream vat" - desc = "Ding-aling ding dong. Get your NanoTrasen-approved ice cream!" - icon = 'icons/obj/kitchen.dmi' - icon_state = "icecream_vat" - density = TRUE - anchored = FALSE - use_power = USE_POWER_OFF - flags = OPENCONTAINER | NOREACT - - var/list/product_types = list() - var/dispense_flavour = ICECREAM_VANILLA - var/flavour_name = "vanilla" - -/obj/machinery/icecream_vat/proc/get_ingredient_list(var/type) - switch(type) - if(ICECREAM_CHOCOLATE) - return list("milk", "ice", "coco") - if(ICECREAM_STRAWBERRY) - return list("milk", "ice", "berryjuice") - if(ICECREAM_BLUE) - return list("milk", "ice", "singulo") - if(CONE_WAFFLE) - return list("flour", "sugar") - if(CONE_CHOC) - return list("flour", "sugar", "coco") - else - return list("milk", "ice") - -/obj/machinery/icecream_vat/proc/get_flavour_name(var/flavour_type) - switch(flavour_type) - if(ICECREAM_CHOCOLATE) - return "chocolate" - if(ICECREAM_STRAWBERRY) - return "strawberry" - if(ICECREAM_BLUE) - return "blue" - if(CONE_WAFFLE) - return "waffle" - if(CONE_CHOC) - return "chocolate" - else - return "vanilla" - -/obj/machinery/icecream_vat/Initialize() - . = ..() - create_reagents(100) - while(product_types.len < 6) - product_types.Add(5) - reagents.add_reagent("milk", 5) - reagents.add_reagent("flour", 5) - reagents.add_reagent("sugar", 5) - reagents.add_reagent("ice", 5) - -/obj/machinery/icecream_vat/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/obj/machinery/icecream_vat/interact(mob/user as mob) - var/dat - dat += "ICECREAM
                    " - dat += "Dispensing: [flavour_name] icecream

                    " - dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
                    " - dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
                    " - dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
                    " - dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
                    " - dat += "
                    CONES
                    " - dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
                    " - dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
                    " - dat += "
                    " - dat += "VAT CONTENT
                    " - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
                    " - dat += "Refresh Close" - - var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream)) - var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O - if(!I.ice_creamed) - if(product_types[dispense_flavour] > 0) - src.visible_message("\icon[src][bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") - product_types[dispense_flavour] -= 1 - I.add_ice_cream(flavour_name) - // if(beaker) - // beaker.reagents.trans_to(I, 10) - if(I.reagents.total_volume < 10) - I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume) - else - to_chat(user, "There is not enough icecream left!") - else - to_chat(user, "[O] already has icecream in it.") - return 1 - else if(O.is_open_container()) - return - else - ..() - -/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type, var/amount) - for(var/R in get_ingredient_list(make_type)) - if(reagents.has_reagent(R, amount)) - continue - amount = 0 - break - if(amount) - for(var/R in get_ingredient_list(make_type)) - reagents.remove_reagent(R, amount) - product_types[make_type] += amount - var/flavour = get_flavour_name(make_type) - if(make_type > 4) - src.visible_message("[user] cooks up some [flavour] cones.") - else - src.visible_message("[user] whips up some [flavour] icecream.") - else - to_chat(user, "You don't have the ingredients to make this.") - -/obj/machinery/icecream_vat/Topic(href, href_list) - - if(..()) - return - - if(href_list["select"]) - dispense_flavour = text2num(href_list["select"]) - flavour_name = get_flavour_name(dispense_flavour) - src.visible_message("[usr] sets [src] to dispense [flavour_name] flavoured icecream.") - - if(href_list["cone"]) - var/dispense_cone = text2num(href_list["cone"]) - var/cone_name = get_flavour_name(dispense_cone) - if(product_types[dispense_cone] >= 1) - product_types[dispense_cone] -= 1 - var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc) - I.cone_type = cone_name - I.icon_state = "icecream_cone_[cone_name]" - I.desc = "Delicious [cone_name] cone, but no ice cream." - src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") - else - to_chat(usr, "There are no [cone_name] cones left!") - - if(href_list["make"]) - var/amount = (text2num(href_list["amount"])) - var/C = text2num(href_list["make"]) - make(usr, C, amount) - - if(href_list["disposeI"]) - reagents.del_reagent(href_list["disposeI"]) - - updateDialog() - - if(href_list["refresh"]) - updateDialog() - - if(href_list["close"]) - usr.unset_machine() - usr << browse(null,"window=icecreamvat") - return - -/obj/item/weapon/reagent_containers/food/snacks/icecream - name = "ice cream cone" - desc = "Delicious waffle cone, but no ice cream." - icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time - bitesize = 3 - - var/ice_creamed = 0 - var/cone_type - -/obj/item/weapon/reagent_containers/food/snacks/icecream/New() - create_reagents(20) - reagents.add_reagent("nutriment", 5) - -/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name) - name = "[flavour_name] icecream" - add_overlay("icecream_[flavour_name]") - desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." - ice_creamed = 1 - -#undef ICECREAM_VANILLA -#undef ICECREAM_CHOCOLATE -#undef ICECREAM_STRAWBERRY -#undef ICECREAM_BLUE -#undef CONE_WAFFLE -#undef CONE_CHOC +#define ICECREAM_VANILLA 1 +#define ICECREAM_CHOCOLATE 2 +#define ICECREAM_STRAWBERRY 3 +#define ICECREAM_BLUE 4 +#define CONE_WAFFLE 5 +#define CONE_CHOC 6 + +// Ported wholesale from Apollo Station. + +/obj/machinery/icecream_vat + name = "icecream vat" + desc = "Ding-aling ding dong. Get your NanoTrasen-approved ice cream!" + icon = 'icons/obj/kitchen.dmi' + icon_state = "icecream_vat" + density = TRUE + anchored = FALSE + use_power = USE_POWER_OFF + flags = OPENCONTAINER | NOREACT + + var/list/product_types = list() + var/dispense_flavour = ICECREAM_VANILLA + var/flavour_name = "vanilla" + +/obj/machinery/icecream_vat/proc/get_ingredient_list(var/type) + switch(type) + if(ICECREAM_CHOCOLATE) + return list("milk", "ice", "coco") + if(ICECREAM_STRAWBERRY) + return list("milk", "ice", "berryjuice") + if(ICECREAM_BLUE) + return list("milk", "ice", "singulo") + if(CONE_WAFFLE) + return list("flour", "sugar") + if(CONE_CHOC) + return list("flour", "sugar", "coco") + else + return list("milk", "ice") + +/obj/machinery/icecream_vat/proc/get_flavour_name(var/flavour_type) + switch(flavour_type) + if(ICECREAM_CHOCOLATE) + return "chocolate" + if(ICECREAM_STRAWBERRY) + return "strawberry" + if(ICECREAM_BLUE) + return "blue" + if(CONE_WAFFLE) + return "waffle" + if(CONE_CHOC) + return "chocolate" + else + return "vanilla" + +/obj/machinery/icecream_vat/Initialize() + . = ..() + create_reagents(100) + while(product_types.len < 6) + product_types.Add(5) + reagents.add_reagent("milk", 5) + reagents.add_reagent("flour", 5) + reagents.add_reagent("sugar", 5) + reagents.add_reagent("ice", 5) + +/obj/machinery/icecream_vat/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/obj/machinery/icecream_vat/interact(mob/user as mob) + var/dat + dat += "ICECREAM
                    " + dat += "Dispensing: [flavour_name] icecream

                    " + dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
                    " + dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
                    " + dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
                    " + dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
                    " + dat += "
                    CONES
                    " + dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
                    " + dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
                    " + dat += "
                    " + dat += "VAT CONTENT
                    " + for(var/datum/reagent/R in reagents.reagent_list) + dat += "[R.name]: [R.volume]" + dat += "Purge
                    " + dat += "Refresh Close" + + var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) + popup.set_content(dat) + popup.open() + +/obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) //CHOMPedit - Allows for deconstruction + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream)) + var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O + if(!I.ice_creamed) + if(product_types[dispense_flavour] > 0) + src.visible_message("\icon[src][bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") + product_types[dispense_flavour] -= 1 + I.add_ice_cream(flavour_name) + // if(beaker) + // beaker.reagents.trans_to(I, 10) + if(I.reagents.total_volume < 10) + I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume) + else + to_chat(user, "There is not enough icecream left!") + else + to_chat(user, "[O] already has icecream in it.") + return 1 + else if(O.is_open_container()) + return + else + ..() + +/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type, var/amount) + for(var/R in get_ingredient_list(make_type)) + if(reagents.has_reagent(R, amount)) + continue + amount = 0 + break + if(amount) + for(var/R in get_ingredient_list(make_type)) + reagents.remove_reagent(R, amount) + product_types[make_type] += amount + var/flavour = get_flavour_name(make_type) + if(make_type > 4) + src.visible_message("[user] cooks up some [flavour] cones.") + else + src.visible_message("[user] whips up some [flavour] icecream.") + else + to_chat(user, "You don't have the ingredients to make this.") + +/obj/machinery/icecream_vat/Topic(href, href_list) + + if(..()) + return + + if(href_list["select"]) + dispense_flavour = text2num(href_list["select"]) + flavour_name = get_flavour_name(dispense_flavour) + src.visible_message("[usr] sets [src] to dispense [flavour_name] flavoured icecream.") + + if(href_list["cone"]) + var/dispense_cone = text2num(href_list["cone"]) + var/cone_name = get_flavour_name(dispense_cone) + if(product_types[dispense_cone] >= 1) + product_types[dispense_cone] -= 1 + var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc) + I.cone_type = cone_name + I.icon_state = "icecream_cone_[cone_name]" + I.desc = "Delicious [cone_name] cone, but no ice cream." + src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") + else + to_chat(usr, "There are no [cone_name] cones left!") + + if(href_list["make"]) + var/amount = (text2num(href_list["amount"])) + var/C = text2num(href_list["make"]) + make(usr, C, amount) + + if(href_list["disposeI"]) + reagents.del_reagent(href_list["disposeI"]) + + updateDialog() + + if(href_list["refresh"]) + updateDialog() + + if(href_list["close"]) + usr.unset_machine() + usr << browse(null,"window=icecreamvat") + return + +/obj/item/weapon/reagent_containers/food/snacks/icecream + name = "ice cream cone" + desc = "Delicious waffle cone, but no ice cream." + icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time + bitesize = 3 + + var/ice_creamed = 0 + var/cone_type + +/obj/item/weapon/reagent_containers/food/snacks/icecream/New() + create_reagents(20) + reagents.add_reagent("nutriment", 5) + +/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name) + name = "[flavour_name] icecream" + add_overlay("icecream_[flavour_name]") + desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." + ice_creamed = 1 + +#undef ICECREAM_VANILLA +#undef ICECREAM_CHOCOLATE +#undef ICECREAM_STRAWBERRY +#undef ICECREAM_BLUE +#undef CONE_WAFFLE +#undef CONE_CHOC diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index f7b718ed1a..2170c48d79 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -1,668 +1,668 @@ -/obj/machinery/microwave - name = "Microwave" - desc = "Studies are inconclusive on whether pressing your face against the glass is harmful." - icon = 'icons/obj/kitchen.dmi' - icon_state = "mw" - layer = 2.9 - density = TRUE - anchored = TRUE - unacidable = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 5 - active_power_usage = 2000 - clicksound = "button" - clickvol = "30" - flags = OPENCONTAINER | NOREACT - circuit = /obj/item/weapon/circuitboard/microwave - var/operating = 0 // Is it on? - var/dirty = 0 // = {0..100} Does it need cleaning? - var/broken = 0 // ={0,1,2} How broken is it??? - var/circuit_item_capacity = 1 //how many items does the circuit add to max number of items - var/item_level = 0 // items microwave can handle, 0 foodstuff, 1 materials - var/global/list/acceptable_items // List of the items you can put in - var/global/list/available_recipes // List of the recipes you can use - var/global/list/acceptable_reagents // List of the reagents you can put in - - var/global/max_n_of_items = 20 - var/appliancetype = MICROWAVE - var/datum/looping_sound/microwave/soundloop - - -//see code/modules/food/recipes_microwave.dm for recipes - -/******************* -* Initialising -********************/ - -/obj/machinery/microwave/Initialize() - . = ..() - - reagents = new/datum/reagents(100) - reagents.my_atom = src - - default_apply_parts() - - if(!available_recipes) - available_recipes = new - for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe)) - if((initial(typepath.appliance) & appliancetype)) - available_recipes += new typepath - - acceptable_items = new - acceptable_reagents = new - for (var/datum/recipe/recipe in available_recipes) - for (var/item in recipe.items) - acceptable_items |= item - for (var/reagent in recipe.reagents) - acceptable_reagents |= reagent - // This will do until I can think of a fun recipe to use dionaea in - - // will also allow anything using the holder item to be microwaved into - // impure carbon. ~Z - acceptable_items |= /obj/item/weapon/holder - acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown - acceptable_items |= /obj/item/device/soulstone - acceptable_items |= /obj/item/weapon/fuel_assembly/supermatter - - soundloop = new(list(src), FALSE) - -/obj/machinery/microwave/Destroy() - if(paicard) - ejectpai() // Lets not delete the pAI. - QDEL_NULL(soundloop) - return ..() - -/******************* -* Item Adding -********************/ - -/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(src.broken > 0) - if(src.broken == 2 && O.has_tool_quality(TOOL_SCREWDRIVER)) // If it's broken and they're using a screwdriver - user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ - "You start to fix part of the microwave." \ - ) - playsound(src, O.usesound, 50, 1) - if (do_after(user,20 * O.toolspeed)) - user.visible_message( \ - "\The [user] fixes part of the microwave.", \ - "You have fixed part of the microwave." \ - ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && O.has_tool_quality(TOOL_WRENCH)) // If it's broken and they're doing the wrench - user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ - "You start to fix part of the microwave." \ - ) - if (do_after(user,20 * O.toolspeed)) - user.visible_message( \ - "\The [user] fixes the microwave.", \ - "You have fixed the microwave." \ - ) - src.icon_state = "mw" - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER | NOREACT - else - to_chat(user, "It's broken!") - return 1 - - else if(src.dirty==100) // The microwave is all dirty so can't be used! - if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them - user.visible_message( \ - "\The [user] starts to clean the microwave.", \ - "You start to clean the microwave." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\The [user] has cleaned the microwave.", \ - "You have cleaned the microwave." \ - ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = "mw" - src.flags = OPENCONTAINER | NOREACT - SStgui.update_uis(src) - else //Otherwise bad luck!! - to_chat(user, "It's dirty!") - return 1 - else if(is_type_in_list(O,acceptable_items)) - var/list/workingList = cookingContents() - if(workingList.len>=(max_n_of_items + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var. - to_chat(user, "This [src] is full of ingredients, you cannot put more.") - return 1 - if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it - var/obj/item/stack/S = O - new O.type (src) - S.use(1) - user.visible_message( \ - "\The [user] has added one of [O] to \the [src].", \ - "You add one of [O] to \the [src].") - return - else - // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - Man whoever you are, it's been years. o7 - user.drop_from_inventory(O,src) - user.visible_message( \ - "\The [user] has added \the [O] to \the [src].", \ - "You add \the [O] to \the [src].") - SStgui.update_uis(src) - return - else if (istype(O,/obj/item/weapon/storage/bag/plants)) // There might be a better way about making plant bags dump their contents into a microwave, but it works. - var/obj/item/weapon/storage/bag/plants/bag = O - var/failed = 1 - for(var/obj/item/G in O.contents) - if(!G.reagents || !G.reagents.total_volume) - continue - failed = 0 - if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) - to_chat(user, "This [src] is full of ingredients, you cannot put more.") - return 0 - else - bag.remove_from_storage(G, src) - contents += G - if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) - break - - if(failed) - to_chat(user, "Nothing in the plant bag is usable.") - return 0 - - if(!O.contents.len) - to_chat(user, "You empty \the [O] into \the [src].") - else - to_chat(user, "You fill \the [src] from \the [O].") - - SStgui.update_uis(src) - return 0 - - else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ - istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) - to_chat(user, "Your [O] contains components unsuitable for cookery.") - return 1 - return - else if(istype(O,/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].") - return 1 - else if(O.has_tool_quality(TOOL_SCREWDRIVER)) - default_deconstruction_screwdriver(user, O) - return - else if(O.has_tool_quality(TOOL_CROWBAR)) - if(default_deconstruction_crowbar(user, O)) - return - else - user.visible_message( \ - "\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.", \ - "You attempt to [src.anchored ? "unsecure" : "secure"] the microwave." - ) - if (do_after(user,20/O.toolspeed)) - user.visible_message( \ - "\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.", \ - "You [src.anchored ? "unsecure" : "secure"] the microwave." - ) - src.anchored = !src.anchored - else - to_chat(user, "You decide not to do that.") - else if(default_part_replacement(user, O)) - return - else if(istype(O, /obj/item/device/paicard)) - if(!paicard) - insertpai(user, O) - else - to_chat(user, "You have no idea what you can cook with this [O].") - ..() - SStgui.update_uis(src) - -/obj/machinery/microwave/tgui_state(mob/user) - return GLOB.tgui_physical_state - -/obj/machinery/microwave/attack_ai(mob/user as mob) - attack_hand(user) - -/obj/machinery/microwave/attack_hand(mob/user as mob) - if(user.a_intent == I_GRAB) - if(paicard) - ejectpai(user) - return - user.set_machine(src) - tgui_interact(user) - -/******************* -* Microwave Menu -********************/ -/obj/machinery/microwave/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Microwave", name) - ui.open() - -/obj/machinery/microwave/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - - data["broken"] = broken - data["operating"] = operating - data["dirty"] = dirty == 100 - data["items"] = get_items_list() - - return data - -/obj/machinery/microwave/proc/get_items_list() - var/list/data = list() - - var/list/items_counts = list() - var/list/items_measures = list() - var/list/items_measures_p = list() - //for(var/obj/O in ((contents - component_parts) - circuit)) - for(var/obj/O in cookingContents()) - var/display_name = O.name - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for(var/O in items_counts) - var/N = items_counts[O] - if(!(O in items_measures)) - data.Add(list(list( - "name" = capitalize(O), - "amt" = N, - "extra" = "[lowertext(O)][N > 1 ? "s" : ""]", - ))) - else - data.Add(list(list( - "name" = capitalize(O), - "amt" = N, - "extra" = N == 1 ? items_measures[O] : items_measures_p[O], - ))) - - for(var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if(R.id == "capsaicin") - display_name = "Hotsauce" - if(R.id == "frostoil") - display_name = "Coldsauce" - data.Add(list(list( - "name" = display_name, - "amt" = R.volume, - "extra" = "unit[R.volume > 1 ? "s" : ""]" - ))) - - return data - -/obj/machinery/microwave/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - if(operating) - return TRUE - - switch(action) - if("cook") - cook() - return TRUE - - if("dispose") - dispose() - return TRUE -/* -/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Microwaving in progress!
                    Please wait...!
                    "} - else if(src.dirty==100) - dat = {"This microwave is dirty!
                    Please clean it before use!
                    "} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in ((contents - component_parts) - circuit)) - var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
                    "} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
                    "} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
                    "} - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "capsaicin") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
                    "} - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The microwave is empty
                    "} - else - dat = {"Ingredients:
                    [dat]"} - dat += {"

                    \ -Turn on!
                    \ -
                    Eject ingredients!
                    \ -"} - user << browse("Microwave Controls[dat]", "window=microwave") - onclose(user, "microwave") - return -*/ - -/*********************************** -* Microwave Menu Handling/Cooking -************************************/ - -/obj/machinery/microwave/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if(reagents.total_volume==0 && !(locate(/obj) in cookingContents())) //dry run - if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) - abort() - return - abort() - return - - var/datum/recipe/recipe = select_recipe(available_recipes,src) - var/obj/cooked - if(!recipe) - dirty += 1 - if(prob(max(10,dirty*5))) - if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) - abort() - return - muck_start() - wzhzhzh(2) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) - muck_finish() - cooked = fail() - cooked.forceMove(src.loc) - else if(has_extra_item()) - if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) - abort() - return - broke() - cooked = fail() - cooked.forceMove(src.loc) - else - if(!wzhzhzh(40)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) - abort() - return - stop() - cooked = fail() - cooked.forceMove(src.loc) - return - - //Making multiple copies of a recipe - var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2)) - if(!wzhzhzh(halftime)) - abort() - return - recipe.before_cook(src) - if(!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.forceMove(loc) - recipe.after_cook(src) - return - - var/result = recipe.result - var/valid = 1 - var/list/cooked_items = list() - var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes - while(valid) - var/list/things = list() - things.Add(recipe.make_food(src)) - cooked_items += things - //Move cooked things to the buffer so they're not considered as ingredients - for(var/atom/movable/AM in things) - AM.forceMove(temp) - - valid = 0 - recipe.after_cook(src) - recipe = select_recipe(available_recipes,src) - if(recipe && recipe.result == result) - valid = 1 - sleep(2) - - for(var/atom/movable/R as anything in cooked_items) - R.forceMove(src) //Move everything from the buffer back to the container - - QDEL_NULL(temp)//Delete buffer object - - //Any leftover reagents are divided amongst the foods - var/total = reagents.total_volume - for(var/obj/item/weapon/reagent_containers/food/snacks/S in cooked_items) - reagents.trans_to_holder(S.reagents, total/cooked_items.len) - - for(var/obj/item/weapon/reagent_containers/food/snacks/S in cookingContents()) - S.cook() - - dispose(0) //clear out anything left - stop() - - return - -/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z - for (var/i=1 to seconds) - if (stat & (NOPOWER|BROKEN)) - return 0 - use_power(active_power_usage) - sleep(5) //VOREStation Edit - Quicker Microwaves - return 1 - -/obj/machinery/microwave/proc/has_extra_item() //- coded to have different microwaves be able to handle different items - if(item_level == 0) - for (var/obj/O in cookingContents()) - if ( \ - !istype(O,/obj/item/weapon/reagent_containers/food) && \ - !istype(O, /obj/item/weapon/grown) \ - ) - return 1 - return 0 - if(item_level == 1) - for (var/obj/O in cookingContents()) - if ( \ - !istype(O, /obj/item/weapon/reagent_containers/food) && \ - !istype(O, /obj/item/weapon/grown) && \ - !istype(O, /obj/item/slime_extract) && \ - !istype(O, /obj/item/organ) && \ - !istype(O, /obj/item/stack/material) \ - ) - return 1 - return 0 - -/obj/machinery/microwave/proc/start() - src.visible_message("The microwave turns on.", "You hear a microwave.") - soundloop.start() - src.operating = TRUE - src.icon_state = "mw1" - SStgui.update_uis(src) - -/obj/machinery/microwave/proc/abort() - operating = FALSE // Turn it off again aferwards - if(icon_state == "mw1") - icon_state = "mw" - SStgui.update_uis(src) - soundloop.stop() - -/obj/machinery/microwave/proc/stop() - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - operating = FALSE // Turn it off again aferwards - if(icon_state == "mw1") - icon_state = "mw" - SStgui.update_uis(src) - soundloop.stop() - -/obj/machinery/microwave/proc/dispose(var/message = 1) - for (var/atom/movable/A in cookingContents()) - A.forceMove(loc) - if (src.reagents.total_volume) - src.dirty++ - src.reagents.clear_reagents() - if(message) - to_chat(usr, "You dispose of the microwave contents.") - SStgui.update_uis(src) - -/obj/machinery/microwave/proc/muck_start() - playsound(src, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound - src.icon_state = "mwbloody1" // Make it look dirty!! - -/obj/machinery/microwave/proc/muck_finish() - src.visible_message("The microwave gets covered in muck!") - src.dirty = 100 // Make it dirty so it can't be used util cleaned - src.flags = null //So you can't add condiments - src.icon_state = "mwbloody0" // Make it look dirty too - src.operating = 0 // Turn it off again aferwards - SStgui.update_uis(src) - soundloop.stop() - - -/obj/machinery/microwave/proc/broke() - var/datum/effect/effect/system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() - src.icon_state = "mwb" // Make it look all busted up and shit - src.visible_message("The microwave breaks!") //Let them know they're stupid - src.broken = 2 // Make it broken so it can't be used util fixed - src.flags = null //So you can't add condiments - src.operating = 0 // Turn it off again aferwards - SStgui.update_uis(src) - soundloop.stop() - src.ejectpai() // If it broke, time to yeet the PAI. - -/obj/machinery/microwave/proc/fail() - var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) - var/amount = 0 - for (var/obj/O in cookingContents() - ffuu) - amount++ - if(O.reagents) - var/id = O.reagents.get_master_reagent_id() - if(id) - amount+=O.reagents.get_reagent_amount(id) - if(istype(O, /obj/item/weapon/holder)) - var/obj/item/weapon/holder/H = O - if(H.held_mob) - qdel(H.held_mob) - qdel(O) - src.reagents.clear_reagents() - ffuu.reagents.add_reagent("carbon", amount) - ffuu.reagents.add_reagent("toxin", amount/10) - return ffuu - -/obj/machinery/microwave/verb/Eject() - set src in oview(1) - set category = "Object" - set name = "Eject content" - usr.visible_message( - "[usr] tries to open [src] and remove its contents." , - "You try to open [src] and remove its contents." - ) - - if(!do_after(usr, 1 SECONDS, target = src)) - return - - if(operating) - to_chat(usr, "You can't do that, [src] door is locked!") - return - - usr.visible_message( - "[usr] opened [src] and has taken out [english_list(cookingContents())]." , - "You have opened [src] and taken out [english_list(cookingContents())]." - ) - dispose() - -/obj/machinery/microwave/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(!mover) - return 1 - if(mover.checkpass(PASSTABLE)) - //Animals can run under them, lots of empty space - return 1 - return ..() - -/obj/machinery/microwave/advanced // specifically for complex recipes - name = "deluxe microwave" - icon = 'icons/obj/deluxemicrowave.dmi' - icon_state = "mw" - circuit = /obj/item/weapon/circuitboard/microwave/advanced - circuit_item_capacity = 100 - item_level = 1 - -/obj/machinery/microwave/advanced/Initialize() - . = ..() - reagents.maximum_volume = 1000 - -/datum/recipe/splat // We use this to handle cooking micros (or mice, etc) in a microwave. Janky but it works better than snowflake code to handle the same thing. - items = list( - /obj/item/weapon/holder - ) - result = /obj/effect/decal/cleanable/blood/gibs - -/datum/recipe/splat/before_cook(obj/container) - if(istype(container, /obj/machinery/microwave)) - var/obj/machinery/microwave/M = container - M.muck_start() - playsound(container.loc, 'sound/items/drop/flesh.ogg', 100, 1) - . = ..() - -/datum/recipe/splat/make_food(obj/container) - for(var/obj/item/weapon/holder/H in container) - if(H.held_mob) - to_chat(H.held_mob, "You hear an earsplitting humming and your head aches!") - qdel(H.held_mob) - H.held_mob = null - qdel(H) - - . = ..() - -/datum/recipe/splat/after_cook(obj/container) - if(istype(container, /obj/machinery/microwave)) - var/obj/machinery/microwave/M = container - M.muck_finish() - . = ..() - -/obj/machinery/microwave/proc/cookingContents() //VOREEdit, this is a better way to deal with the contents of a microwave, since the previous method is stupid. - var/list/workingList = contents.Copy() // Using the copy proc because otherwise the two lists seem to become soul bonded. - workingList -= component_parts - workingList -= circuit - if(paicard) - workingList -= paicard - for(var/M in workingList) - if(istype(M, circuit)) // Yes, we remove circuit twice. Yes, it's necessary. Yes, it's stupid. - workingList -= M - return workingList - +/obj/machinery/microwave + name = "Microwave" + desc = "Studies are inconclusive on whether pressing your face against the glass is harmful." + icon = 'icons/obj/kitchen.dmi' + icon_state = "mw" + layer = 2.9 + density = TRUE + anchored = TRUE + unacidable = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 5 + active_power_usage = 2000 + clicksound = "button" + clickvol = "30" + flags = OPENCONTAINER | NOREACT + circuit = /obj/item/weapon/circuitboard/microwave + var/operating = 0 // Is it on? + var/dirty = 0 // = {0..100} Does it need cleaning? + var/broken = 0 // ={0,1,2} How broken is it??? + var/circuit_item_capacity = 1 //how many items does the circuit add to max number of items + var/item_level = 0 // items microwave can handle, 0 foodstuff, 1 materials + var/global/list/acceptable_items // List of the items you can put in + var/global/list/available_recipes // List of the recipes you can use + var/global/list/acceptable_reagents // List of the reagents you can put in + + var/global/max_n_of_items = 20 + var/appliancetype = MICROWAVE + var/datum/looping_sound/microwave/soundloop + + +//see code/modules/food/recipes_microwave.dm for recipes + +/******************* +* Initialising +********************/ + +/obj/machinery/microwave/Initialize() + . = ..() + + reagents = new/datum/reagents(100) + reagents.my_atom = src + + default_apply_parts() + + if(!available_recipes) + available_recipes = new + for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe)) + if((initial(typepath.appliance) & appliancetype)) + available_recipes += new typepath + + acceptable_items = new + acceptable_reagents = new + for (var/datum/recipe/recipe in available_recipes) + for (var/item in recipe.items) + acceptable_items |= item + for (var/reagent in recipe.reagents) + acceptable_reagents |= reagent + // This will do until I can think of a fun recipe to use dionaea in - + // will also allow anything using the holder item to be microwaved into + // impure carbon. ~Z + acceptable_items |= /obj/item/weapon/holder + acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown + acceptable_items |= /obj/item/device/soulstone + acceptable_items |= /obj/item/weapon/fuel_assembly/supermatter + + soundloop = new(list(src), FALSE) + +/obj/machinery/microwave/Destroy() + if(paicard) + ejectpai() // Lets not delete the pAI. + QDEL_NULL(soundloop) + return ..() + +/******************* +* Item Adding +********************/ + +/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(src.broken > 0) + if(src.broken == 2 && O.has_tool_quality(TOOL_SCREWDRIVER)) // If it's broken and they're using a screwdriver + user.visible_message( \ + "\The [user] starts to fix part of the microwave.", \ + "You start to fix part of the microwave." \ + ) + playsound(src, O.usesound, 50, 1) + if (do_after(user,20 * O.toolspeed)) + user.visible_message( \ + "\The [user] fixes part of the microwave.", \ + "You have fixed part of the microwave." \ + ) + src.broken = 1 // Fix it a bit + else if(src.broken == 1 && O.has_tool_quality(TOOL_WRENCH)) // If it's broken and they're doing the wrench + user.visible_message( \ + "\The [user] starts to fix part of the microwave.", \ + "You start to fix part of the microwave." \ + ) + if (do_after(user,20 * O.toolspeed)) + user.visible_message( \ + "\The [user] fixes the microwave.", \ + "You have fixed the microwave." \ + ) + src.icon_state = "mw" + src.broken = 0 // Fix it! + src.dirty = 0 // just to be sure + src.flags = OPENCONTAINER | NOREACT + else + to_chat(user, "It's broken!") + return 1 + + else if(src.dirty==100) // The microwave is all dirty so can't be used! + if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them + user.visible_message( \ + "\The [user] starts to clean the microwave.", \ + "You start to clean the microwave." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\The [user] has cleaned the microwave.", \ + "You have cleaned the microwave." \ + ) + src.dirty = 0 // It's clean! + src.broken = 0 // just to be sure + src.icon_state = "mw" + src.flags = OPENCONTAINER | NOREACT + SStgui.update_uis(src) + else //Otherwise bad luck!! + to_chat(user, "It's dirty!") + return 1 + else if(is_type_in_list(O,acceptable_items)) + var/list/workingList = cookingContents() + if(workingList.len>=(max_n_of_items + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var. + to_chat(user, "This [src] is full of ingredients, you cannot put more.") + return 1 + if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it + var/obj/item/stack/S = O + new O.type (src) + S.use(1) + user.visible_message( \ + "\The [user] has added one of [O] to \the [src].", \ + "You add one of [O] to \the [src].") + return + else + // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - Man whoever you are, it's been years. o7 + user.drop_from_inventory(O,src) + user.visible_message( \ + "\The [user] has added \the [O] to \the [src].", \ + "You add \the [O] to \the [src].") + SStgui.update_uis(src) + return + else if (istype(O,/obj/item/weapon/storage/bag/plants)) // There might be a better way about making plant bags dump their contents into a microwave, but it works. + var/obj/item/weapon/storage/bag/plants/bag = O + var/failed = 1 + for(var/obj/item/G in O.contents) + if(!G.reagents || !G.reagents.total_volume) + continue + failed = 0 + if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) + to_chat(user, "This [src] is full of ingredients, you cannot put more.") + return 0 + else + bag.remove_from_storage(G, src) + contents += G + if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) + break + + if(failed) + to_chat(user, "Nothing in the plant bag is usable.") + return 0 + + if(!O.contents.len) + to_chat(user, "You empty \the [O] into \the [src].") + else + to_chat(user, "You fill \the [src] from \the [O].") + + SStgui.update_uis(src) + return 0 + + else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ + istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ + ) + if (!O.reagents) + return 1 + for (var/datum/reagent/R in O.reagents.reagent_list) + if (!(R.id in acceptable_reagents)) + to_chat(user, "Your [O] contains components unsuitable for cookery.") + return 1 + return + else if(istype(O,/obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = O + to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].") + return 1 + else if(O.has_tool_quality(TOOL_SCREWDRIVER)) + default_deconstruction_screwdriver(user, O) + return + else if(O.has_tool_quality(TOOL_CROWBAR)) + if(default_deconstruction_crowbar(user, O)) + return + else + user.visible_message( \ + "\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.", \ + "You attempt to [src.anchored ? "unsecure" : "secure"] the microwave." + ) + if (do_after(user,20/O.toolspeed)) + user.visible_message( \ + "\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.", \ + "You [src.anchored ? "unsecure" : "secure"] the microwave." + ) + src.anchored = !src.anchored + else + to_chat(user, "You decide not to do that.") + else if(default_part_replacement(user, O)) + return + else if(istype(O, /obj/item/device/paicard)) + if(!paicard) + insertpai(user, O) + else + to_chat(user, "You have no idea what you can cook with this [O].") + ..() + SStgui.update_uis(src) + +/obj/machinery/microwave/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/obj/machinery/microwave/attack_ai(mob/user as mob) + attack_hand(user) + +/obj/machinery/microwave/attack_hand(mob/user as mob) + if(user.a_intent == I_GRAB) + if(paicard) + ejectpai(user) + return + user.set_machine(src) + tgui_interact(user) + +/******************* +* Microwave Menu +********************/ +/obj/machinery/microwave/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Microwave", name) + ui.open() + +/obj/machinery/microwave/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + + data["broken"] = broken + data["operating"] = operating + data["dirty"] = dirty == 100 + data["items"] = get_items_list() + + return data + +/obj/machinery/microwave/proc/get_items_list() + var/list/data = list() + + var/list/items_counts = list() + var/list/items_measures = list() + var/list/items_measures_p = list() + //for(var/obj/O in ((contents - component_parts) - circuit)) + for(var/obj/O in cookingContents()) + var/display_name = O.name + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for(var/O in items_counts) + var/N = items_counts[O] + if(!(O in items_measures)) + data.Add(list(list( + "name" = capitalize(O), + "amt" = N, + "extra" = "[lowertext(O)][N > 1 ? "s" : ""]", + ))) + else + data.Add(list(list( + "name" = capitalize(O), + "amt" = N, + "extra" = N == 1 ? items_measures[O] : items_measures_p[O], + ))) + + for(var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if(R.id == "capsaicin") + display_name = "Hotsauce" + if(R.id == "frostoil") + display_name = "Coldsauce" + data.Add(list(list( + "name" = display_name, + "amt" = R.volume, + "extra" = "unit[R.volume > 1 ? "s" : ""]" + ))) + + return data + +/obj/machinery/microwave/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + if(operating) + return TRUE + + switch(action) + if("cook") + cook() + return TRUE + + if("dispose") + dispose() + return TRUE +/* +/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu + var/dat = "" + if(src.broken > 0) + dat = {"Bzzzzttttt"} + else if(src.operating) + dat = {"Microwaving in progress!
                    Please wait...!
                    "} + else if(src.dirty==100) + dat = {"This microwave is dirty!
                    Please clean it before use!
                    "} + else + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + for (var/obj/O in ((contents - component_parts) - circuit)) + var/display_name = O.name + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for (var/O in items_counts) + var/N = items_counts[O] + if (!(O in items_measures)) + dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
                    "} + else + if (N==1) + dat += {"[capitalize(O)]: [N] [items_measures[O]]
                    "} + else + dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
                    "} + for (var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if (R.id == "capsaicin") + display_name = "Hotsauce" + if (R.id == "frostoil") + display_name = "Coldsauce" + dat += {"[display_name]: [R.volume] unit\s
                    "} + if (items_counts.len==0 && reagents.reagent_list.len==0) + dat = {"The microwave is empty
                    "} + else + dat = {"Ingredients:
                    [dat]"} + dat += {"

                    \ +
                    Turn on!
                    \ +
                    Eject ingredients!
                    \ +"} + user << browse("Microwave Controls[dat]", "window=microwave") + onclose(user, "microwave") + return +*/ + +/*********************************** +* Microwave Menu Handling/Cooking +************************************/ + +/obj/machinery/microwave/proc/cook() + if(stat & (NOPOWER|BROKEN)) + return + start() + if(reagents.total_volume==0 && !(locate(/obj) in cookingContents())) //dry run + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) + abort() + return + abort() + return + + var/datum/recipe/recipe = select_recipe(available_recipes,src) + var/obj/cooked + if(!recipe) + dirty += 1 + if(prob(max(10,dirty*5))) + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) + abort() + return + muck_start() + wzhzhzh(2) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) + muck_finish() + cooked = fail() + cooked.forceMove(src.loc) + else if(has_extra_item()) + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) + abort() + return + broke() + cooked = fail() + cooked.forceMove(src.loc) + else + if(!wzhzhzh(40)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) + abort() + return + stop() + cooked = fail() + cooked.forceMove(src.loc) + return + + //Making multiple copies of a recipe + var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2)) + if(!wzhzhzh(halftime)) + abort() + return + recipe.before_cook(src) + if(!wzhzhzh(halftime)) + abort() + cooked = fail() + cooked.forceMove(loc) + recipe.after_cook(src) + return + + var/result = recipe.result + var/valid = 1 + var/list/cooked_items = list() + var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes + while(valid) + var/list/things = list() + things.Add(recipe.make_food(src)) + cooked_items += things + //Move cooked things to the buffer so they're not considered as ingredients + for(var/atom/movable/AM in things) + AM.forceMove(temp) + + valid = 0 + recipe.after_cook(src) + recipe = select_recipe(available_recipes,src) + if(recipe && recipe.result == result) + valid = 1 + sleep(2) + + for(var/atom/movable/R as anything in cooked_items) + R.forceMove(src) //Move everything from the buffer back to the container + + QDEL_NULL(temp)//Delete buffer object + + //Any leftover reagents are divided amongst the foods + var/total = reagents.total_volume + for(var/obj/item/weapon/reagent_containers/food/snacks/S in cooked_items) + reagents.trans_to_holder(S.reagents, total/cooked_items.len) + + for(var/obj/item/weapon/reagent_containers/food/snacks/S in cookingContents()) + S.cook() + + dispose(0) //clear out anything left + stop() + + return + +/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z + for (var/i=1 to seconds) + if (stat & (NOPOWER|BROKEN)) + return 0 + use_power(active_power_usage) + sleep(5) //VOREStation Edit - Quicker Microwaves + return 1 + +/obj/machinery/microwave/proc/has_extra_item() //- coded to have different microwaves be able to handle different items + if(item_level == 0) + for (var/obj/O in cookingContents()) + if ( \ + !istype(O,/obj/item/weapon/reagent_containers/food) && \ + !istype(O, /obj/item/weapon/grown) \ + ) + return 1 + return 0 + if(item_level == 1) + for (var/obj/O in cookingContents()) + if ( \ + !istype(O, /obj/item/weapon/reagent_containers/food) && \ + !istype(O, /obj/item/weapon/grown) && \ + !istype(O, /obj/item/slime_extract) && \ + !istype(O, /obj/item/organ) && \ + !istype(O, /obj/item/stack/material) \ + ) + return 1 + return 0 + +/obj/machinery/microwave/proc/start() + src.visible_message("The microwave turns on.", "You hear a microwave.") + soundloop.start() + src.operating = TRUE + src.icon_state = "mw1" + SStgui.update_uis(src) + +/obj/machinery/microwave/proc/abort() + operating = FALSE // Turn it off again aferwards + if(icon_state == "mw1") + icon_state = "mw" + SStgui.update_uis(src) + soundloop.stop() + +/obj/machinery/microwave/proc/stop() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + operating = FALSE // Turn it off again aferwards + if(icon_state == "mw1") + icon_state = "mw" + SStgui.update_uis(src) + soundloop.stop() + +/obj/machinery/microwave/proc/dispose(var/message = 1) + for (var/atom/movable/A in cookingContents()) + A.forceMove(loc) + if (src.reagents.total_volume) + src.dirty++ + src.reagents.clear_reagents() + if(message) + to_chat(usr, "You dispose of the microwave contents.") + SStgui.update_uis(src) + +/obj/machinery/microwave/proc/muck_start() + playsound(src, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound + src.icon_state = "mwbloody1" // Make it look dirty!! + +/obj/machinery/microwave/proc/muck_finish() + src.visible_message("The microwave gets covered in muck!") + src.dirty = 100 // Make it dirty so it can't be used util cleaned + src.flags = null //So you can't add condiments + src.icon_state = "mwbloody0" // Make it look dirty too + src.operating = 0 // Turn it off again aferwards + SStgui.update_uis(src) + soundloop.stop() + + +/obj/machinery/microwave/proc/broke() + var/datum/effect/effect/system/spark_spread/s = new + s.set_up(2, 1, src) + s.start() + src.icon_state = "mwb" // Make it look all busted up and shit + src.visible_message("The microwave breaks!") //Let them know they're stupid + src.broken = 2 // Make it broken so it can't be used util fixed + src.flags = null //So you can't add condiments + src.operating = 0 // Turn it off again aferwards + SStgui.update_uis(src) + soundloop.stop() + src.ejectpai() // If it broke, time to yeet the PAI. + +/obj/machinery/microwave/proc/fail() + var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) + var/amount = 0 + for (var/obj/O in cookingContents() - ffuu) + amount++ + if(O.reagents) + var/id = O.reagents.get_master_reagent_id() + if(id) + amount+=O.reagents.get_reagent_amount(id) + if(istype(O, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = O + if(H.held_mob) + qdel(H.held_mob) + qdel(O) + src.reagents.clear_reagents() + ffuu.reagents.add_reagent("carbon", amount) + ffuu.reagents.add_reagent("toxin", amount/10) + return ffuu + +/obj/machinery/microwave/verb/Eject() + set src in oview(1) + set category = "Object" + set name = "Eject content" + usr.visible_message( + "[usr] tries to open [src] and remove its contents." , + "You try to open [src] and remove its contents." + ) + + if(!do_after(usr, 1 SECONDS, target = src)) + return + + if(operating) + to_chat(usr, "You can't do that, [src] door is locked!") + return + + usr.visible_message( + "[usr] opened [src] and has taken out [english_list(cookingContents())]." , + "You have opened [src] and taken out [english_list(cookingContents())]." + ) + dispose() + +/obj/machinery/microwave/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(!mover) + return 1 + if(mover.checkpass(PASSTABLE)) + //Animals can run under them, lots of empty space + return 1 + return ..() + +/obj/machinery/microwave/advanced // specifically for complex recipes + name = "deluxe microwave" + icon = 'icons/obj/deluxemicrowave.dmi' + icon_state = "mw" + circuit = /obj/item/weapon/circuitboard/microwave/advanced + circuit_item_capacity = 100 + item_level = 1 + +/obj/machinery/microwave/advanced/Initialize() + . = ..() + reagents.maximum_volume = 1000 + +/datum/recipe/splat // We use this to handle cooking micros (or mice, etc) in a microwave. Janky but it works better than snowflake code to handle the same thing. + items = list( + /obj/item/weapon/holder + ) + result = /obj/effect/decal/cleanable/blood/gibs + +/datum/recipe/splat/before_cook(obj/container) + if(istype(container, /obj/machinery/microwave)) + var/obj/machinery/microwave/M = container + M.muck_start() + playsound(container.loc, 'sound/items/drop/flesh.ogg', 100, 1) + . = ..() + +/datum/recipe/splat/make_food(obj/container) + for(var/obj/item/weapon/holder/H in container) + if(H.held_mob) + to_chat(H.held_mob, "You hear an earsplitting humming and your head aches!") + qdel(H.held_mob) + H.held_mob = null + qdel(H) + + . = ..() + +/datum/recipe/splat/after_cook(obj/container) + if(istype(container, /obj/machinery/microwave)) + var/obj/machinery/microwave/M = container + M.muck_finish() + . = ..() + +/obj/machinery/microwave/proc/cookingContents() //VOREEdit, this is a better way to deal with the contents of a microwave, since the previous method is stupid. + var/list/workingList = contents.Copy() // Using the copy proc because otherwise the two lists seem to become soul bonded. + workingList -= component_parts + workingList -= circuit + if(paicard) + workingList -= paicard + for(var/M in workingList) + if(istype(M, circuit)) // Yes, we remove circuit twice. Yes, it's necessary. Yes, it's stupid. + workingList -= M + return workingList + diff --git a/code/modules/food/kitchen/microwave_ch.dm b/code/modules/food/kitchen/microwave_ch.dm index 84308233ae..c95c0a60e5 100644 --- a/code/modules/food/kitchen/microwave_ch.dm +++ b/code/modules/food/kitchen/microwave_ch.dm @@ -1,15 +1,15 @@ -/*********************************** -* CHOMP advanced microwave -************************************/ - - -/obj/machinery/microwave/advanced - name = "deluxe microwave" - icon = 'icons/obj/machines/machinery_ch.dmi' - circuit = /obj/item/weapon/circuitboard/microwave/advanced - circuit_item_capacity = 100 - item_level = 1 - -/obj/machinery/microwave/advanced/Initialize() - ..() +/*********************************** +* CHOMP advanced microwave +************************************/ + + +/obj/machinery/microwave/advanced + name = "deluxe microwave" + icon = 'icons/obj/machines/machinery_ch.dmi' + circuit = /obj/item/weapon/circuitboard/microwave/advanced + circuit_item_capacity = 100 + item_level = 1 + +/obj/machinery/microwave/advanced/Initialize() + ..() reagents.maximum_volume = 1000 \ No newline at end of file diff --git a/code/modules/food/recipe.dm b/code/modules/food/recipe.dm index 8e553bf532..c967687e1f 100644 --- a/code/modules/food/recipe.dm +++ b/code/modules/food/recipe.dm @@ -1,334 +1,334 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * /datum/recipe by rastaf0 13 apr 2011 * - * * * * * * * * * * * * * * * * * * * * * * * * * * - * This is powerful and flexible recipe system. - * It exists not only for food. - * supports both reagents and objects as prerequisites. - * In order to use this system you have to define a deriative from /datum/recipe - * * reagents are reagents. Acid, milc, booze, etc. - * * items are objects. Fruits, tools, circuit boards. - * * result is type to create as new object - * * time is optional parameter, you shall use in in your machine, - default /datum/recipe/ procs does not rely on this parameter. - * - * Functions you need: - * /datum/recipe/proc/make(var/obj/container as obj) - * Creates result inside container, - * deletes prerequisite reagents, - * transfers reagents from prerequisite objects, - * deletes all prerequisite objects (even not needed for recipe at the moment). - * - * /proc/select_recipe(list/datum/recipe/available_recipes, obj/obj as obj, exact = 1) - * Wonderful function that select suitable recipe for you. - * obj is a machine (or magik hat) with prerequisites, - * exact = 0 forces algorithm to ignore superfluous stuff. - * - * - * Functions you do not need to call directly but could: - * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) - * /datum/recipe/proc/check_items(var/obj/container as obj) - * - * */ - -// Recipe type defines. Used to determine what machine makes them. -#define MICROWAVE 0x1 -#define FRYER 0x2 -#define OVEN 0x4 -#define GRILL 0x8 -#define CANDYMAKER 0x10 -#define CEREALMAKER 0x20 - -/datum/recipe - var/list/reagents // Example: = list("berryjuice" = 5) // do not list same reagent twice - var/list/items // Example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo - var/list/fruit // Example: = list("fruit" = 3) - var/coating = null // Required coating on all items in the recipe. The default value of null explitly requires no coating - // A value of -1 is permissive and cares not for any coatings - // Any typepath indicates a specific coating that should be present - // Coatings are used for batter, breadcrumbs, beer-batter, colonel's secret coating, etc - - var/result // Example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal - var/result_quantity = 1 // Number of instances of result that are created. - var/time = 100 // 1/10 part of second - - #define RECIPE_REAGENT_REPLACE 0 //Reagents in the ingredients are discarded. - //Only the reagents present in the result at compiletime are used - #define RECIPE_REAGENT_MAX 1 //The result will contain the maximum of each reagent present between the two pools. Compiletime result, and sum of ingredients - #define RECIPE_REAGENT_MIN 2 //As above, but the minimum, ignoring zero values. - #define RECIPE_REAGENT_SUM 3 //The entire quantity of the ingredients are added to the result - - var/reagent_mix = RECIPE_REAGENT_MAX //How to handle reagent differences between the ingredients and the results - - var/appliance = MICROWAVE // Which apppliances this recipe can be made in. New Recipes will DEFAULT to using the Microwave, as a catch-all (and just in case) - // List of defines is in _defines/misc.dm. But for reference they are: - /* - MICROWAVE - FRYER - OVEN - CANDYMAKER - CEREALMAKER - */ - // This is a bitfield, more than one type can be used - // Grill is presently unused and not listed - -/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents, var/exact = FALSE) - if(!reagents || !reagents.len) - return TRUE - - if(!avail_reagents) - return FALSE - - . = TRUE - for(var/r_r in reagents) - var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) - if(aval_r_amnt - reagents[r_r] >= 0) - if(aval_r_amnt>(reagents[r_r]) && exact) - . = FALSE - else - return FALSE - - if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) - return FALSE - return . - -/datum/recipe/proc/check_fruit(var/obj/container, var/exact = FALSE) - if (!fruit || !fruit.len) - return TRUE - - . = TRUE - if(fruit && fruit.len) - var/list/checklist = list() - // You should trust Copy(). - checklist = fruit.Copy() - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) - continue - if(check_coating(G)) - checklist[G.seed.kitchen_tag]-- - for(var/ktag in checklist) - if(!isnull(checklist[ktag])) - if(checklist[ktag] < 0 && exact) - . = FALSE - else if(checklist[ktag] > 0) - . = FALSE - break - return . - -/datum/recipe/proc/check_items(var/obj/container as obj, var/exact = FALSE) - if(!items || !items.len) - return TRUE - - . = TRUE - if(items && items.len) - var/list/checklist = list() - checklist = items.Copy() // You should really trust Copy - if(istype(container, /obj/machinery)) - var/obj/machinery/machine = container - for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit)) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = FALSE - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = TRUE - break - if(!found && exact) - return FALSE - else - for(var/obj/O in container.contents) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = FALSE - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - if(check_coating(O)) - checklist.Cut(i, i+1) - found = TRUE - break - if (!found && exact) - return FALSE - if(checklist.len) - return FALSE - return . - -//This is called on individual items within the container. -/datum/recipe/proc/check_coating(var/obj/O, var/exact = FALSE) - if(!istype(O,/obj/item/weapon/reagent_containers/food/snacks)) - return TRUE //Only snacks can be battered - - if (coating == -1) - return TRUE //-1 value doesnt care - - var/obj/item/weapon/reagent_containers/food/snacks/S = O - if (!S.coating) - if (!coating) - return TRUE - return FALSE - else if (S.coating.type == coating) - return TRUE - - return FALSE - -//general version -/datum/recipe/proc/make(var/obj/container as obj) - var/obj/result_obj = new result(container) - if(istype(container, /obj/machinery)) - var/obj/machinery/machine = container - for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - else - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -// food-related -// This proc is called under the assumption that the container has already been checked and found to contain the necessary ingredients -/datum/recipe/proc/make_food(var/obj/container as obj) - if(!result) - log_runtime(EXCEPTION("Recipe [type] is defined without a result, please bug report this.")) - if(istype(container, /obj/machinery/microwave)) - var/obj/machinery/microwave/M = container - M.dispose(FALSE) - - else if(istype(container, /obj/item/weapon/reagent_containers/cooking_container)) - var/obj/item/weapon/reagent_containers/cooking_container/CC = container - CC.clear() - - container.visible_message(SPAN_WARNING("[container] inexplicably spills, and its contents are lost!")) - - return - - -//We will subtract all the ingredients from the container, and transfer their reagents into a holder -//We will not touch things which are not required for this recipe. They will be left behind for the caller -//to decide what to do. They may be used again to make another recipe or discarded, or merged into the results, -//thats no longer the concern of this proc - var/datum/reagents/buffer = new /datum/reagents(10000000000, null)// - - - //Find items we need - if (items && items.len) - for (var/i in items) - var/obj/item/I = locate(i) in container - if (I && I.reagents) - I.reagents.trans_to_holder(buffer,I.reagents.total_volume) - qdel(I) - - //Find fruits - if (fruit && fruit.len) - var/list/checklist = list() - checklist = fruit.Copy() - - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) - continue - - if (checklist[G.seed.kitchen_tag] > 0) - //We found a thing we need - checklist[G.seed.kitchen_tag]-- - if (G && G.reagents) - G.reagents.trans_to_holder(buffer,G.reagents.total_volume) - qdel(G) - - //And lastly deduct necessary quantities of reagents - if (reagents && reagents.len) - for (var/r in reagents) - //Doesnt matter whether or not there's enough, we assume that check is done before - container.reagents.trans_type_to(buffer, r, reagents[r]) - - /* - Now we've removed all the ingredients that were used and we have the buffer containing the total of - all their reagents. - Next up we create the result, and then handle the merging of reagents depending on the mix setting - */ - var/tally = 0 - - /* - If we have multiple results, holder will be used as a buffer to hold reagents for the result objects. - If, as in the most common case, there is only a single result, then it will just be a reference to - the single-result's reagents - */ - var/datum/reagents/holder = new/datum/reagents(10000000000) - var/list/results = list() - while (tally < result_quantity) - var/obj/result_obj = new result(container) - results.Add(result_obj) - - if (!result_obj.reagents)//This shouldn't happen - //If the result somehow has no reagents defined, then create a new holder - result_obj.reagents = new /datum/reagents(buffer.total_volume*1.5, result_obj) - - if (result_quantity == 1) - qdel(holder) - holder = result_obj.reagents - else - result_obj.reagents.trans_to(holder, result_obj.reagents.total_volume) - tally++ - - - switch(reagent_mix) - if (RECIPE_REAGENT_REPLACE) - //We do no transferring - if (RECIPE_REAGENT_SUM) - //Sum is easy, just shove the entire buffer into the result - buffer.trans_to_holder(holder, buffer.total_volume) - if (RECIPE_REAGENT_MAX) - //We want the highest of each. - //Iterate through everything in buffer. If the target has less than the buffer, then top it up - for (var/datum/reagent/R in buffer.reagent_list) - var/rvol = holder.get_reagent_amount(R.id) - if (rvol < R.volume) - //Transfer the difference - buffer.trans_type_to(holder, R.id, R.volume-rvol) - - if (RECIPE_REAGENT_MIN) - //Min is slightly more complex. We want the result to have the lowest from each side - //But zero will not count. Where a side has zero its ignored and the side with a nonzero value is used - for (var/datum/reagent/R in buffer.reagent_list) - var/rvol = holder.get_reagent_amount(R.id) - if (rvol == 0) //If the target has zero of this reagent - buffer.trans_type_to(holder, R.id, R.volume) - //Then transfer all of ours - - else if (rvol > R.volume) - //if the target has more than ours - //Remove the difference - holder.remove_reagent(R.id, rvol-R.volume) - - - if (results.len > 1) - //If we're here, then holder is a buffer containing the total reagents for all the results. - //So now we redistribute it among them - var/total = holder.total_volume - for (var/i in results) - var/atom/a = i //optimisation - holder.trans_to(a, total / results.len) - - return results - -// When exact is false, extraneous ingredients are ignored -// When exact is true, extraneous ingredients will fail the recipe -// In both cases, the full set of required ingredients is still needed -/proc/select_recipe(var/list/datum/recipe/available_recipes, var/obj/obj as obj, var/exact) - var/highest_count = 0 - var/count = 0 - for (var/datum/recipe/recipe in available_recipes) - if(!recipe.check_reagents(obj.reagents, exact) || !recipe.check_items(obj, exact) || !recipe.check_fruit(obj, exact)) - continue - // Taken from cmp_recipe_complexity_dsc, but is way faster. - count = LAZYLEN(recipe.items) + LAZYLEN(recipe.reagents) + LAZYLEN(recipe.fruit) - if(count >= highest_count) - highest_count = count - . = recipe - -// Both of these are just placeholders to allow special behavior for mob holders, but you can do other things in here later if you feel like it. -/datum/recipe/proc/before_cook(obj/container) // Called Before the Microwave starts delays and cooking stuff - - -/datum/recipe/proc/after_cook(obj/container) // Called When the Microwave is finished. +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * /datum/recipe by rastaf0 13 apr 2011 * + * * * * * * * * * * * * * * * * * * * * * * * * * * + * This is powerful and flexible recipe system. + * It exists not only for food. + * supports both reagents and objects as prerequisites. + * In order to use this system you have to define a deriative from /datum/recipe + * * reagents are reagents. Acid, milc, booze, etc. + * * items are objects. Fruits, tools, circuit boards. + * * result is type to create as new object + * * time is optional parameter, you shall use in in your machine, + default /datum/recipe/ procs does not rely on this parameter. + * + * Functions you need: + * /datum/recipe/proc/make(var/obj/container as obj) + * Creates result inside container, + * deletes prerequisite reagents, + * transfers reagents from prerequisite objects, + * deletes all prerequisite objects (even not needed for recipe at the moment). + * + * /proc/select_recipe(list/datum/recipe/available_recipes, obj/obj as obj, exact = 1) + * Wonderful function that select suitable recipe for you. + * obj is a machine (or magik hat) with prerequisites, + * exact = 0 forces algorithm to ignore superfluous stuff. + * + * + * Functions you do not need to call directly but could: + * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) + * /datum/recipe/proc/check_items(var/obj/container as obj) + * + * */ + +// Recipe type defines. Used to determine what machine makes them. +#define MICROWAVE 0x1 +#define FRYER 0x2 +#define OVEN 0x4 +#define GRILL 0x8 +#define CANDYMAKER 0x10 +#define CEREALMAKER 0x20 + +/datum/recipe + var/list/reagents // Example: = list("berryjuice" = 5) // do not list same reagent twice + var/list/items // Example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo + var/list/fruit // Example: = list("fruit" = 3) + var/coating = null // Required coating on all items in the recipe. The default value of null explitly requires no coating + // A value of -1 is permissive and cares not for any coatings + // Any typepath indicates a specific coating that should be present + // Coatings are used for batter, breadcrumbs, beer-batter, colonel's secret coating, etc + + var/result // Example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + var/result_quantity = 1 // Number of instances of result that are created. + var/time = 100 // 1/10 part of second + + #define RECIPE_REAGENT_REPLACE 0 //Reagents in the ingredients are discarded. + //Only the reagents present in the result at compiletime are used + #define RECIPE_REAGENT_MAX 1 //The result will contain the maximum of each reagent present between the two pools. Compiletime result, and sum of ingredients + #define RECIPE_REAGENT_MIN 2 //As above, but the minimum, ignoring zero values. + #define RECIPE_REAGENT_SUM 3 //The entire quantity of the ingredients are added to the result + + var/reagent_mix = RECIPE_REAGENT_MAX //How to handle reagent differences between the ingredients and the results + + var/appliance = MICROWAVE // Which apppliances this recipe can be made in. New Recipes will DEFAULT to using the Microwave, as a catch-all (and just in case) + // List of defines is in _defines/misc.dm. But for reference they are: + /* + MICROWAVE + FRYER + OVEN + CANDYMAKER + CEREALMAKER + */ + // This is a bitfield, more than one type can be used + // Grill is presently unused and not listed + +/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents, var/exact = FALSE) + if(!reagents || !reagents.len) + return TRUE + + if(!avail_reagents) + return FALSE + + . = TRUE + for(var/r_r in reagents) + var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) + if(aval_r_amnt - reagents[r_r] >= 0) + if(aval_r_amnt>(reagents[r_r]) && exact) + . = FALSE + else + return FALSE + + if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) + return FALSE + return . + +/datum/recipe/proc/check_fruit(var/obj/container, var/exact = FALSE) + if (!fruit || !fruit.len) + return TRUE + + . = TRUE + if(fruit && fruit.len) + var/list/checklist = list() + // You should trust Copy(). + checklist = fruit.Copy() + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) + continue + if(check_coating(G)) + checklist[G.seed.kitchen_tag]-- + for(var/ktag in checklist) + if(!isnull(checklist[ktag])) + if(checklist[ktag] < 0 && exact) + . = FALSE + else if(checklist[ktag] > 0) + . = FALSE + break + return . + +/datum/recipe/proc/check_items(var/obj/container as obj, var/exact = FALSE) + if(!items || !items.len) + return TRUE + + . = TRUE + if(items && items.len) + var/list/checklist = list() + checklist = items.Copy() // You should really trust Copy + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = FALSE + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = TRUE + break + if(!found && exact) + return FALSE + else + for(var/obj/O in container.contents) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = FALSE + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + if(check_coating(O)) + checklist.Cut(i, i+1) + found = TRUE + break + if (!found && exact) + return FALSE + if(checklist.len) + return FALSE + return . + +//This is called on individual items within the container. +/datum/recipe/proc/check_coating(var/obj/O, var/exact = FALSE) + if(!istype(O,/obj/item/weapon/reagent_containers/food/snacks)) + return TRUE //Only snacks can be battered + + if (coating == -1) + return TRUE //-1 value doesnt care + + var/obj/item/weapon/reagent_containers/food/snacks/S = O + if (!S.coating) + if (!coating) + return TRUE + return FALSE + else if (S.coating.type == coating) + return TRUE + + return FALSE + +//general version +/datum/recipe/proc/make(var/obj/container as obj) + var/obj/result_obj = new result(container) + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + container.reagents.clear_reagents() + return result_obj + +// food-related +// This proc is called under the assumption that the container has already been checked and found to contain the necessary ingredients +/datum/recipe/proc/make_food(var/obj/container as obj) + if(!result) + log_runtime(EXCEPTION("Recipe [type] is defined without a result, please bug report this.")) + if(istype(container, /obj/machinery/microwave)) + var/obj/machinery/microwave/M = container + M.dispose(FALSE) + + else if(istype(container, /obj/item/weapon/reagent_containers/cooking_container)) + var/obj/item/weapon/reagent_containers/cooking_container/CC = container + CC.clear() + + container.visible_message(SPAN_WARNING("[container] inexplicably spills, and its contents are lost!")) + + return + + +//We will subtract all the ingredients from the container, and transfer their reagents into a holder +//We will not touch things which are not required for this recipe. They will be left behind for the caller +//to decide what to do. They may be used again to make another recipe or discarded, or merged into the results, +//thats no longer the concern of this proc + var/datum/reagents/buffer = new /datum/reagents(10000000000, null)// + + + //Find items we need + if (items && items.len) + for (var/i in items) + var/obj/item/I = locate(i) in container + if (I && I.reagents) + I.reagents.trans_to_holder(buffer,I.reagents.total_volume) + qdel(I) + + //Find fruits + if (fruit && fruit.len) + var/list/checklist = list() + checklist = fruit.Copy() + + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) + continue + + if (checklist[G.seed.kitchen_tag] > 0) + //We found a thing we need + checklist[G.seed.kitchen_tag]-- + if (G && G.reagents) + G.reagents.trans_to_holder(buffer,G.reagents.total_volume) + qdel(G) + + //And lastly deduct necessary quantities of reagents + if (reagents && reagents.len) + for (var/r in reagents) + //Doesnt matter whether or not there's enough, we assume that check is done before + container.reagents.trans_type_to(buffer, r, reagents[r]) + + /* + Now we've removed all the ingredients that were used and we have the buffer containing the total of + all their reagents. + Next up we create the result, and then handle the merging of reagents depending on the mix setting + */ + var/tally = 0 + + /* + If we have multiple results, holder will be used as a buffer to hold reagents for the result objects. + If, as in the most common case, there is only a single result, then it will just be a reference to + the single-result's reagents + */ + var/datum/reagents/holder = new/datum/reagents(10000000000) + var/list/results = list() + while (tally < result_quantity) + var/obj/result_obj = new result(container) + results.Add(result_obj) + + if (!result_obj.reagents)//This shouldn't happen + //If the result somehow has no reagents defined, then create a new holder + result_obj.reagents = new /datum/reagents(buffer.total_volume*1.5, result_obj) + + if (result_quantity == 1) + qdel(holder) + holder = result_obj.reagents + else + result_obj.reagents.trans_to(holder, result_obj.reagents.total_volume) + tally++ + + + switch(reagent_mix) + if (RECIPE_REAGENT_REPLACE) + //We do no transferring + if (RECIPE_REAGENT_SUM) + //Sum is easy, just shove the entire buffer into the result + buffer.trans_to_holder(holder, buffer.total_volume) + if (RECIPE_REAGENT_MAX) + //We want the highest of each. + //Iterate through everything in buffer. If the target has less than the buffer, then top it up + for (var/datum/reagent/R in buffer.reagent_list) + var/rvol = holder.get_reagent_amount(R.id) + if (rvol < R.volume) + //Transfer the difference + buffer.trans_type_to(holder, R.id, R.volume-rvol) + + if (RECIPE_REAGENT_MIN) + //Min is slightly more complex. We want the result to have the lowest from each side + //But zero will not count. Where a side has zero its ignored and the side with a nonzero value is used + for (var/datum/reagent/R in buffer.reagent_list) + var/rvol = holder.get_reagent_amount(R.id) + if (rvol == 0) //If the target has zero of this reagent + buffer.trans_type_to(holder, R.id, R.volume) + //Then transfer all of ours + + else if (rvol > R.volume) + //if the target has more than ours + //Remove the difference + holder.remove_reagent(R.id, rvol-R.volume) + + + if (results.len > 1) + //If we're here, then holder is a buffer containing the total reagents for all the results. + //So now we redistribute it among them + var/total = holder.total_volume + for (var/i in results) + var/atom/a = i //optimisation + holder.trans_to(a, total / results.len) + + return results + +// When exact is false, extraneous ingredients are ignored +// When exact is true, extraneous ingredients will fail the recipe +// In both cases, the full set of required ingredients is still needed +/proc/select_recipe(var/list/datum/recipe/available_recipes, var/obj/obj as obj, var/exact) + var/highest_count = 0 + var/count = 0 + for (var/datum/recipe/recipe in available_recipes) + if(!recipe.check_reagents(obj.reagents, exact) || !recipe.check_items(obj, exact) || !recipe.check_fruit(obj, exact)) + continue + // Taken from cmp_recipe_complexity_dsc, but is way faster. + count = LAZYLEN(recipe.items) + LAZYLEN(recipe.reagents) + LAZYLEN(recipe.fruit) + if(count >= highest_count) + highest_count = count + . = recipe + +// Both of these are just placeholders to allow special behavior for mob holders, but you can do other things in here later if you feel like it. +/datum/recipe/proc/before_cook(obj/container) // Called Before the Microwave starts delays and cooking stuff + + +/datum/recipe/proc/after_cook(obj/container) // Called When the Microwave is finished. diff --git a/code/modules/food/recipes_fryer.dm b/code/modules/food/recipes_fryer.dm index e72dc0a579..58beac6851 100644 --- a/code/modules/food/recipes_fryer.dm +++ b/code/modules/food/recipes_fryer.dm @@ -1,207 +1,207 @@ -/datum/recipe/fries - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/rawsticks - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fries - -/datum/recipe/cheesyfries - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/fries, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries - -/datum/recipe/jpoppers - appliance = FRYER - fruit = list("chili" = 1) - coating = /datum/reagent/nutriment/coating/batter - result = /obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers - result_quantity = 2 - -/datum/recipe/risottoballs - appliance = FRYER - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/risotto) - coating = /datum/reagent/nutriment/coating/batter - reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product - result = /obj/item/weapon/reagent_containers/food/snacks/risottoballs - result_quantity = 2 - -/datum/recipe/bellefritter - appliance = FRYER - coating = /datum/reagent/nutriment/coating/batter - reagents = list("sugar" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/frostbelle) - result = /obj/item/weapon/reagent_containers/food/snacks/bellefritter - result_quantity = 2 - -/datum/recipe/onionrings - appliance = FRYER - coating = /datum/reagent/nutriment/coating/batter - fruit = list("onion" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/onionrings - result_quantity = 2 - -//Meaty Recipes -//==================== -/datum/recipe/cubancarp - appliance = FRYER - fruit = list("chili" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp - -/datum/recipe/batteredsausage - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sausage - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sausage/battered - coating = /datum/reagent/nutriment/coating/batter - - -/datum/recipe/katsu - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/chicken - ) - result = /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu - coating = /datum/reagent/nutriment/coating/beerbatter - - -/datum/recipe/pizzacrunch_1 - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch - coating = /datum/reagent/nutriment/coating/batter - -//Alternate pizza crunch recipe for combination pizzas made in oven -/datum/recipe/pizzacrunch_2 - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/variable/pizza - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch - coating = /datum/reagent/nutriment/coating/batter - -/datum/recipe/friedmushroom - appliance = FRYER - fruit = list("plumphelmet" = 1) - coating = /datum/reagent/nutriment/coating/beerbatter - reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product - result = /obj/item/weapon/reagent_containers/food/snacks/friedmushroom - -/datum/recipe/fishfingers - items = list( - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - ) - coating = /datum/reagent/nutriment/coating/batter - result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/corn_dog - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sausage - ) - fruit = list("corn" = 1) - coating = /datum/reagent/nutriment/coating/batter - result = /obj/item/weapon/reagent_containers/food/snacks/corn_dog - -/datum/recipe/sweet_and_sour - appliance = FRYER - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bacon, - /obj/item/weapon/reagent_containers/food/snacks/cutlet - ) - reagents = list("soysauce" = 5, "batter" = 10) - result = /obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour - -//Sweet Recipes. -//================== -// All donuts were given reagents of 5 to equal old recipes and make for faster cook times. -/datum/recipe/jellydonut - appliance = FRYER - reagents = list("berryjuice" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly - result_quantity = 2 - -/datum/recipe/jellydonut/poisonberry - reagents = list("poisonberryjuice" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry - -/datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies. - reagents = list("slimejelly" = 5, "sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly - -/datum/recipe/jellydonut/cherry // Subtypes of jellydonut, appliance inheritance applies. - reagents = list("cherryjelly" = 5, "sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly - -/datum/recipe/donut - appliance = FRYER - reagents = list("sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain - result_quantity = 2 - -/datum/recipe/chaosdonut - appliance = FRYER - reagents = list("frostoil" = 10, "capsaicin" = 10, "sugar" = 10) - reagent_mix = RECIPE_REAGENT_REPLACE //This creates its own reagents - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos - result_quantity = 2 - -/datum/recipe/funnelcake - appliance = FRYER - reagents = list("sugar" = 5, "batter" = 10) - result = /obj/item/weapon/reagent_containers/food/snacks/funnelcake - result_quantity = 2 - -/datum/recipe/pisanggoreng - appliance = FRYER - fruit = list("banana" = 2) - reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product - result = /obj/item/weapon/reagent_containers/food/snacks/pisanggoreng - coating = /datum/reagent/nutriment/coating/batter - -//VOREStation Add Start -//CHOMP removal start -/*/datum/recipe/generalschicken -* appliance = FRYER -* reagents = list("capsaicin" = 2, "sugar" = 2, "batter" = 10) -* items = list( -* /obj/item/weapon/reagent_containers/food/snacks/meat, -* /obj/item/weapon/reagent_containers/food/snacks/meat -* ) -* result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken -* -/datum/recipe/chickenwings -* appliance = FRYER -* reagents = list("capsaicin" = 5, "batter" = 10) -* items = list( -* /obj/item/weapon/reagent_containers/food/snacks/meat, -* /obj/item/weapon/reagent_containers/food/snacks/meat, -* /obj/item/weapon/reagent_containers/food/snacks/meat, -* /obj/item/weapon/reagent_containers/food/snacks/meat -* ) -* result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box. -//VOREStation Add End -Chomp remove end */ +/datum/recipe/fries + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsticks + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fries + +/datum/recipe/cheesyfries + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/fries, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries + +/datum/recipe/jpoppers + appliance = FRYER + fruit = list("chili" = 1) + coating = /datum/reagent/nutriment/coating/batter + result = /obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers + result_quantity = 2 + +/datum/recipe/risottoballs + appliance = FRYER + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/risotto) + coating = /datum/reagent/nutriment/coating/batter + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/risottoballs + result_quantity = 2 + +/datum/recipe/bellefritter + appliance = FRYER + coating = /datum/reagent/nutriment/coating/batter + reagents = list("sugar" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/frostbelle) + result = /obj/item/weapon/reagent_containers/food/snacks/bellefritter + result_quantity = 2 + +/datum/recipe/onionrings + appliance = FRYER + coating = /datum/reagent/nutriment/coating/batter + fruit = list("onion" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/onionrings + result_quantity = 2 + +//Meaty Recipes +//==================== +/datum/recipe/cubancarp + appliance = FRYER + fruit = list("chili" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp + +/datum/recipe/batteredsausage + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sausage/battered + coating = /datum/reagent/nutriment/coating/batter + + +/datum/recipe/katsu + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu + coating = /datum/reagent/nutriment/coating/beerbatter + + +/datum/recipe/pizzacrunch_1 + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch + coating = /datum/reagent/nutriment/coating/batter + +//Alternate pizza crunch recipe for combination pizzas made in oven +/datum/recipe/pizzacrunch_2 + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/variable/pizza + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch + coating = /datum/reagent/nutriment/coating/batter + +/datum/recipe/friedmushroom + appliance = FRYER + fruit = list("plumphelmet" = 1) + coating = /datum/reagent/nutriment/coating/beerbatter + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/friedmushroom + +/datum/recipe/fishfingers + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + coating = /datum/reagent/nutriment/coating/batter + result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/corn_dog + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + fruit = list("corn" = 1) + coating = /datum/reagent/nutriment/coating/batter + result = /obj/item/weapon/reagent_containers/food/snacks/corn_dog + +/datum/recipe/sweet_and_sour + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + reagents = list("soysauce" = 5, "batter" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour + +//Sweet Recipes. +//================== +// All donuts were given reagents of 5 to equal old recipes and make for faster cook times. +/datum/recipe/jellydonut + appliance = FRYER + reagents = list("berryjuice" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly + result_quantity = 2 + +/datum/recipe/jellydonut/poisonberry + reagents = list("poisonberryjuice" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry + +/datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies. + reagents = list("slimejelly" = 5, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly + +/datum/recipe/jellydonut/cherry // Subtypes of jellydonut, appliance inheritance applies. + reagents = list("cherryjelly" = 5, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly + +/datum/recipe/donut + appliance = FRYER + reagents = list("sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain + result_quantity = 2 + +/datum/recipe/chaosdonut + appliance = FRYER + reagents = list("frostoil" = 10, "capsaicin" = 10, "sugar" = 10) + reagent_mix = RECIPE_REAGENT_REPLACE //This creates its own reagents + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos + result_quantity = 2 + +/datum/recipe/funnelcake + appliance = FRYER + reagents = list("sugar" = 5, "batter" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/funnelcake + result_quantity = 2 + +/datum/recipe/pisanggoreng + appliance = FRYER + fruit = list("banana" = 2) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/pisanggoreng + coating = /datum/reagent/nutriment/coating/batter + +//VOREStation Add Start +//CHOMP removal start +/*/datum/recipe/generalschicken +* appliance = FRYER +* reagents = list("capsaicin" = 2, "sugar" = 2, "batter" = 10) +* items = list( +* /obj/item/weapon/reagent_containers/food/snacks/meat, +* /obj/item/weapon/reagent_containers/food/snacks/meat +* ) +* result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken +* +/datum/recipe/chickenwings +* appliance = FRYER +* reagents = list("capsaicin" = 5, "batter" = 10) +* items = list( +* /obj/item/weapon/reagent_containers/food/snacks/meat, +* /obj/item/weapon/reagent_containers/food/snacks/meat, +* /obj/item/weapon/reagent_containers/food/snacks/meat, +* /obj/item/weapon/reagent_containers/food/snacks/meat +* ) +* result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box. +//VOREStation Add End +Chomp remove end */ diff --git a/code/modules/food/recipes_grill.dm b/code/modules/food/recipes_grill.dm index 322b4babcf..241bc0b2c7 100644 --- a/code/modules/food/recipes_grill.dm +++ b/code/modules/food/recipes_grill.dm @@ -1,329 +1,329 @@ -/datum/recipe/humanburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/human/burger - -/datum/recipe/plainburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/humanburger - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger - -/datum/recipe/syntiburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger - -/datum/recipe/brainburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/organ/internal/brain - ) - result = /obj/item/weapon/reagent_containers/food/snacks/brainburger - -/datum/recipe/roburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/robot_parts/head - ) - result = /obj/item/weapon/reagent_containers/food/snacks/roburger - -/datum/recipe/xenoburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger - -/datum/recipe/fishburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fishburger - -/datum/recipe/tofuburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofuburger - -/datum/recipe/ghostburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/ectoplasm //where do you even find this stuff - ) - result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger - -/datum/recipe/clownburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/clothing/mask/gas/clown_hat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/clownburger - -/datum/recipe/mimeburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/clothing/head/beret - ) - result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger - -/datum/recipe/mouseburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/holder/mouse - ) - result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger - -/datum/recipe/bunbun - appliance = GRILL - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bunbun - -/datum/recipe/hotdog - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/sausage - ) - result = /obj/item/weapon/reagent_containers/food/snacks/hotdog - -/datum/recipe/humankabob - appliance = GRILL - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob - -/datum/recipe/kabob //Do not put before humankabob - appliance = GRILL - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob - -/datum/recipe/monkeykabob - appliance = GRILL - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob - -/datum/recipe/syntikabob - appliance = GRILL - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob - -/datum/recipe/tofukabob - appliance = GRILL - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob - -/datum/recipe/fakespellburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/clothing/head/wizard/fake, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/spellburger - -/datum/recipe/spellburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/clothing/head/wizard, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/spellburger - -/datum/recipe/bigbiteburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - ) - reagents = list("egg" = 3) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger - -/datum/recipe/superbiteburger - appliance = GRILL - fruit = list("tomato" = 1) - reagents = list("sodiumchloride" = 5, "blackpepper" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/boiledegg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger - -/datum/recipe/slimeburger - appliance = GRILL - reagents = list("slimejelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime - -/datum/recipe/jellyburger - appliance = GRILL - reagents = list("cherryjelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry - -/datum/recipe/bearburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/bearmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bearburger - -/datum/recipe/baconburger - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/bacon, - /obj/item/weapon/reagent_containers/food/snacks/bacon - ) - result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon - -/datum/recipe/omelette - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - reagents = list("egg" = 6) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/omelette - -/datum/recipe/omurice - appliance = GRILL - reagents = list("rice" = 5, "ketchup" = 5, "egg" = 3) - result = /obj/item/weapon/reagent_containers/food/snacks/omurice - -/datum/recipe/omurice/heart - appliance = GRILL - reagents = list("rice" = 5, "ketchup" = 5, "sugar" = 5, "egg" = 3) - result = /obj/item/weapon/reagent_containers/food/snacks/omurice/heart - -/datum/recipe/omurice/face - appliance = GRILL - reagents = list("rice" = 5, "ketchup" = 5, "sodiumchloride" = 1, "egg" = 3) - result = /obj/item/weapon/reagent_containers/food/snacks/omurice/face - -/datum/recipe/meatsteak - appliance = GRILL - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) - result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak - -/datum/recipe/honeytoast - appliance = GRILL - reagents = list("honey" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/slice/bread - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product - result = /obj/item/weapon/reagent_containers/food/snacks/honeytoast - -/datum/recipe/grilled_carp - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - reagents = list("spacespice" = 1) - fruit = list("lettuce" = 1, "lime" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp - -/datum/recipe/grilledcheese - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/slice/bread, - /obj/item/weapon/reagent_containers/food/snacks/slice/bread, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese - -/datum/recipe/toastedsandwich - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sandwich - ) - result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich - -/datum/recipe/cheese_cracker - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spreads/butter, - /obj/item/weapon/reagent_containers/food/snacks/slice/bread, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - reagents = list("spacespice" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/cheesetoast - result_quantity = 4 - -/datum/recipe/bacongrill - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spreads, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bacon - -/datum/recipe/chickenfillet //Also just combinable, like burgers and hot dogs. - appliance = GRILL - items = list( - /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu, - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet +/datum/recipe/humanburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/human/burger + +/datum/recipe/plainburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/humanburger + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger + +/datum/recipe/syntiburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger + +/datum/recipe/brainburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/organ/internal/brain + ) + result = /obj/item/weapon/reagent_containers/food/snacks/brainburger + +/datum/recipe/roburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/robot_parts/head + ) + result = /obj/item/weapon/reagent_containers/food/snacks/roburger + +/datum/recipe/xenoburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger + +/datum/recipe/fishburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fishburger + +/datum/recipe/tofuburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofuburger + +/datum/recipe/ghostburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/ectoplasm //where do you even find this stuff + ) + result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger + +/datum/recipe/clownburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/clothing/mask/gas/clown_hat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/clownburger + +/datum/recipe/mimeburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/clothing/head/beret + ) + result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger + +/datum/recipe/mouseburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/holder/mouse + ) + result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger + +/datum/recipe/bunbun + appliance = GRILL + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bunbun + +/datum/recipe/hotdog + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hotdog + +/datum/recipe/humankabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob + +/datum/recipe/kabob //Do not put before humankabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/monkeykabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/syntikabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/tofukabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob + +/datum/recipe/fakespellburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/clothing/head/wizard/fake, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spellburger + +/datum/recipe/spellburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/clothing/head/wizard, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spellburger + +/datum/recipe/bigbiteburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + ) + reagents = list("egg" = 3) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger + +/datum/recipe/superbiteburger + appliance = GRILL + fruit = list("tomato" = 1) + reagents = list("sodiumchloride" = 5, "blackpepper" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger + +/datum/recipe/slimeburger + appliance = GRILL + reagents = list("slimejelly" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime + +/datum/recipe/jellyburger + appliance = GRILL + reagents = list("cherryjelly" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry + +/datum/recipe/bearburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/bearmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bearburger + +/datum/recipe/baconburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon + +/datum/recipe/omelette + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + reagents = list("egg" = 6) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/omelette + +/datum/recipe/omurice + appliance = GRILL + reagents = list("rice" = 5, "ketchup" = 5, "egg" = 3) + result = /obj/item/weapon/reagent_containers/food/snacks/omurice + +/datum/recipe/omurice/heart + appliance = GRILL + reagents = list("rice" = 5, "ketchup" = 5, "sugar" = 5, "egg" = 3) + result = /obj/item/weapon/reagent_containers/food/snacks/omurice/heart + +/datum/recipe/omurice/face + appliance = GRILL + reagents = list("rice" = 5, "ketchup" = 5, "sodiumchloride" = 1, "egg" = 3) + result = /obj/item/weapon/reagent_containers/food/snacks/omurice/face + +/datum/recipe/meatsteak + appliance = GRILL + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) + result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak + +/datum/recipe/honeytoast + appliance = GRILL + reagents = list("honey" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/slice/bread + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/honeytoast + +/datum/recipe/grilled_carp + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + reagents = list("spacespice" = 1) + fruit = list("lettuce" = 1, "lime" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp + +/datum/recipe/grilledcheese + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese + +/datum/recipe/toastedsandwich + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sandwich + ) + result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich + +/datum/recipe/cheese_cracker + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spreads/butter, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + reagents = list("spacespice" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/cheesetoast + result_quantity = 4 + +/datum/recipe/bacongrill + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spreads, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon + +/datum/recipe/chickenfillet //Also just combinable, like burgers and hot dogs. + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm index e4638a6c54..ea5d52a083 100644 --- a/code/modules/food/recipes_oven.dm +++ b/code/modules/food/recipes_oven.dm @@ -1,703 +1,703 @@ -/datum/recipe/ovenfries - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/rawsticks - ) - result = /obj/item/weapon/reagent_containers/food/snacks/ovenfries - -//Roasts -//--------------- - -/datum/recipe/dionaroast - appliance = OVEN - fruit = list("apple" = 1) - reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though. - items = list(/obj/item/weapon/holder/diona) - result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast - reagent_mix = RECIPE_REAGENT_REPLACE //No eating polyacid - -/datum/recipe/monkeysdelight - appliance = OVEN - fruit = list("banana" = 1) - reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeycube - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/ribplate - appliance = OVEN - reagents = list("honey" = 5, "spacespice" = 2, "blackpepper" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/ribplate - -/datum/recipe/turkey - appliance = OVEN - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/chicken, - /obj/item/weapon/reagent_containers/food/snacks/stuffing - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey - -/datum/recipe/tofurkey - appliance = OVEN - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/stuffing - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey - -/datum/recipe/zestfish - appliance = OVEN - fruit = list("lemon" = 1) - reagents = list("sodiumchloride" = 3) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/zestfish - -/datum/recipe/limezestfish - appliance = OVEN - fruit = list("lime" = 1) - reagents = list("sodiumchloride" = 3) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/zestfish - - -//Predesigned breads -//================================ -/datum/recipe/bread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - reagents = list("sodiumchloride" = 1, "yeast" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread - -/datum/recipe/baguette - appliance = OVEN - reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "yeast" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/baguette - - -/datum/recipe/tofubread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread - - -/datum/recipe/creamcheesebread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread - -/datum/recipe/flatbread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/flatbread - -/datum/recipe/tortilla - appliance = OVEN - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tortilla - result_quantity = 3 - -/datum/recipe/meatbread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread - -/datum/recipe/syntibread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread - -/datum/recipe/xenomeatbread - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread - -/datum/recipe/bananabread - appliance = OVEN - fruit = list("banana" = 1) - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread - - -/datum/recipe/bun - appliance = OVEN - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bun - result_quantity = 3 - -//Predesigned pies -//======================= - -/datum/recipe/meatpie - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/meatpie - -/datum/recipe/tofupie - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofupie - -/datum/recipe/xemeatpie - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie - -/datum/recipe/pie - appliance = OVEN - fruit = list("banana" = 1) - reagents = list("sugar" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/pie - -/datum/recipe/cherrypie - appliance = OVEN - fruit = list("cherries" = 1) - reagents = list("sugar" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie - -/datum/recipe/amanita_pie - appliance = OVEN - reagents = list("amatoxin" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie - -/datum/recipe/plump_pie - appliance = OVEN - fruit = list("plumphelmet" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie - -/datum/recipe/applepie - appliance = OVEN - fruit = list("apple" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/applepie - -/datum/recipe/pumpkinpie - appliance = OVEN - fruit = list("pumpkin" = 1) - reagents = list("sugar" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie - -/datum/recipe/appletart - appliance = OVEN - fruit = list("goldapple" = 1) - reagents = list("sugar" = 10) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/appletart - result_quantity = 2 - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/keylimepie - appliance = OVEN - fruit = list("lime" = 2) - reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie - reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise - -/datum/recipe/quiche - appliance = OVEN - reagents = list("milk" = 5, "egg" = 9, "flour" = 10) - items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche - reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise - -//Baked sweets: -//--------------- - -/datum/recipe/cookie - appliance = OVEN - reagents = list("milk" = 10, "sugar" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cookie - result_quantity = 4 - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/ovenfortunecookie - appliance = OVEN - reagents = list("sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/paper - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie - -/datum/recipe/poppypretzel - appliance = OVEN - fruit = list("poppy" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) - result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel - result_quantity = 2 - -/datum/recipe/cracker - appliance = OVEN - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cracker - -/datum/recipe/brownies - appliance = OVEN - reagents = list("browniemix" = 10, "egg" = 3) - reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies - -/datum/recipe/cosmicbrownies - appliance = OVEN - reagents = list("browniemix" = 10, "egg" = 3) - fruit = list("ambrosia" = 1) - reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies - -/datum/recipe/buchedenoel - appliance = OVEN - fruit = list("berries" = 2) - reagents = list("cakebatter" = 20, "cream" = 10, "coco" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel - -/datum/recipe/cinnamonbun - appliance = OVEN - reagents = list("sugar" = 15, "cream" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cinnamonbun - result_quantity = 4 - -/datum/recipe/jaffacake - appliance = OVEN - fruit = list("orange" = 1) - reagents = list("cakebatter" = 15, "coco" = 10) - result = /obj/item/weapon/reagent_containers/food/snacks/jaffacake - result_quantity = 6 - -//Pizzas -//========================= -/datum/recipe/pizzamargherita - appliance = OVEN - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita - -/datum/recipe/meatpizza - appliance = OVEN - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza - -/datum/recipe/syntipizza - appliance = OVEN - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza - -/datum/recipe/mushroompizza - appliance = OVEN - fruit = list("mushroom" = 5, "tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - - reagent_mix = RECIPE_REAGENT_REPLACE //No vomit taste in finished product from chanterelles - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - -/datum/recipe/vegetablepizza - appliance = OVEN - fruit = list("eggplant" = 1, "carrot" = 1, "corn" = 1, "tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - -/datum/recipe/pineapplepizza - appliance = OVEN - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring, - /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple - -//Spicy -//================ - -/datum/recipe/enchiladas - appliance = OVEN - fruit = list("chili" = 2) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/tortilla - ) - result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas - - -// Cakes. -//============ -/datum/recipe/cake - appliance = OVEN - reagents = list("cakebatter" = 30, "vanilla" = 2) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/cake/carrot - appliance = OVEN - fruit = list("carrot" = 3) - reagents = list("cakebatter" = 30) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake - -/datum/recipe/cake/cheese - appliance = OVEN - reagents = list("cakebatter" = 30) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake - -/datum/recipe/cake/peanut - fruit = list("peanut" = 1) - reagents = list("cakebatter" = 30, "peanutbutter" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake - -/datum/recipe/cake/orange - appliance = OVEN - fruit = list("orange" = 2) - reagents = list("cakebatter" = 30) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake - -/datum/recipe/cake/lime - appliance = OVEN - fruit = list("lime" = 2) - reagents = list("cakebatter" = 30) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake - -/datum/recipe/cake/lemon - appliance = OVEN - fruit = list("lemon" = 2) - reagents = list("cakebatter" = 30) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake - -/datum/recipe/cake/chocolate - appliance = OVEN - reagents = list("cakebatter" = 30, "coco" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake - -/datum/recipe/cake/birthday - appliance = OVEN - reagents = list("cakebatter" = 30) - items = list(/obj/item/clothing/head/cakehat) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake - -/datum/recipe/cake/apple - appliance = OVEN - fruit = list("apple" = 2) - reagents = list("cakebatter" = 30) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake - -/datum/recipe/cake/brain - appliance = OVEN - reagents = list("cakebatter" = 30) - items = list(/obj/item/organ/internal/brain) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake - -/datum/recipe/pancakes - appliance = OVEN - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/pancakes - result_quantity = 2 - -/datum/recipe/pancakes/berry - appliance = OVEN - fruit = list("berries" = 2) - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/pancakes/berry - result_quantity = 2 - -/datum/recipe/lasagna - appliance = OVEN - fruit = list("tomato" = 2, "eggplant" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/cutlet - ) - result = /obj/item/weapon/reagent_containers/food/snacks/lasagna - reagent_mix = RECIPE_REAGENT_REPLACE - -/datum/recipe/honeybun - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - reagents = list("milk" = 5, "egg" = 3,"honey" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/honeybun - result_quantity = 4 - -//Bacon -/datum/recipe/bacon_oven - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/rawbacon, - /obj/item/weapon/reagent_containers/food/snacks/spreads - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bacon/oven - result_quantity = 6 - -/datum/recipe/meat_pocket - appliance = OVEN - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meatball, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/meat_pocket - result_quantity = 2 - -/datum/recipe/bacon_flatbread - appliance = OVEN - fruit = list("tomato" = 2) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/bacon, - /obj/item/weapon/reagent_containers/food/snacks/bacon, - /obj/item/weapon/reagent_containers/food/snacks/bacon, - /obj/item/weapon/reagent_containers/food/snacks/bacon - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread - -/datum/recipe/truffle - appliance = OVEN - reagents = list("sugar" = 5, "cream" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar - ) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/truffle - result_quantity = 4 - -/datum/recipe/croissant - appliance = OVEN - reagents = list("sodiumchloride" = 1, "water" = 5, "milk" = 5, "yeast" = 5) - reagent_mix = RECIPE_REAGENT_REPLACE - items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) - result = /obj/item/weapon/reagent_containers/food/snacks/croissant - result_quantity = 2 - -/datum/recipe/macncheese - appliance = OVEN - reagents = list("milk" = 5) - reagent_mix = RECIPE_REAGENT_REPLACE - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spagetti, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/macncheese - -/datum/recipe/suppermatter - appliance = OVEN - reagents = list("radium" = 5, "milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake - ) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/suppermatter - -/datum/recipe/excitingsuppermatter - appliance = OVEN - reagents = list("radium" = 5, "spacespice" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake - ) - reagent_mix = RECIPE_REAGENT_REPLACE - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/excitingsuppermatter - -/datum/recipe/waffles - appliance = OVEN - reagents = list("sugar" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/waffles - result_quantity = 2 - -/datum/recipe/loadedbakedpotatooven - appliance = OVEN - fruit = list("potato" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato - -/datum/recipe/meatbun - appliance = OVEN - fruit = list("cabbage" = 1) - reagents = list("water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meatball, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking - result = /obj/item/weapon/reagent_containers/food/snacks/meatbun - result_quantity = 2 - -/datum/recipe/spicedmeatbun - appliance = OVEN - reagents = list("spacespice" = 2, "water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/rawcutlet - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking - result = /obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun - result_quantity = 2 - -/datum/recipe/custardbun - appliance = OVEN - reagents = list("spacespice" = 1, "water" = 5, "egg" = 3) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Water, egg used up in cooking - result = /obj/item/weapon/reagent_containers/food/snacks/custardbun - -/datum/recipe/chickenmomo - appliance = OVEN - reagents = list("spacespice" = 2, "water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/meat/chicken - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product - result = /obj/item/weapon/reagent_containers/food/snacks/chickenmomo - result_quantity = 2 - -/datum/recipe/veggiemomo - appliance = OVEN - reagents = list("spacespice" = 2, "water" = 5) - fruit = list("carrot" = 1, "cabbage" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/doughslice, - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here - result = /obj/item/weapon/reagent_containers/food/snacks/veggiemomo - result_quantity = 2 +/datum/recipe/ovenfries + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsticks + ) + result = /obj/item/weapon/reagent_containers/food/snacks/ovenfries + +//Roasts +//--------------- + +/datum/recipe/dionaroast + appliance = OVEN + fruit = list("apple" = 1) + reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though. + items = list(/obj/item/weapon/holder/diona) + result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast + reagent_mix = RECIPE_REAGENT_REPLACE //No eating polyacid + +/datum/recipe/monkeysdelight + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeycube + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/ribplate + appliance = OVEN + reagents = list("honey" = 5, "spacespice" = 2, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/ribplate + +/datum/recipe/turkey + appliance = OVEN + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken, + /obj/item/weapon/reagent_containers/food/snacks/stuffing + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey + +/datum/recipe/tofurkey + appliance = OVEN + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/stuffing + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey + +/datum/recipe/zestfish + appliance = OVEN + fruit = list("lemon" = 1) + reagents = list("sodiumchloride" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/zestfish + +/datum/recipe/limezestfish + appliance = OVEN + fruit = list("lime" = 1) + reagents = list("sodiumchloride" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/zestfish + + +//Predesigned breads +//================================ +/datum/recipe/bread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + reagents = list("sodiumchloride" = 1, "yeast" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread + +/datum/recipe/baguette + appliance = OVEN + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "yeast" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/baguette + + +/datum/recipe/tofubread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread + + +/datum/recipe/creamcheesebread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread + +/datum/recipe/flatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/flatbread + +/datum/recipe/tortilla + appliance = OVEN + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tortilla + result_quantity = 3 + +/datum/recipe/meatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread + +/datum/recipe/syntibread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread + +/datum/recipe/xenomeatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread + +/datum/recipe/bananabread + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("milk" = 5, "sugar" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread + + +/datum/recipe/bun + appliance = OVEN + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bun + result_quantity = 3 + +//Predesigned pies +//======================= + +/datum/recipe/meatpie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meatpie + +/datum/recipe/tofupie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofupie + +/datum/recipe/xemeatpie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie + +/datum/recipe/pie + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("sugar" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/pie + +/datum/recipe/cherrypie + appliance = OVEN + fruit = list("cherries" = 1) + reagents = list("sugar" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie + +/datum/recipe/amanita_pie + appliance = OVEN + reagents = list("amatoxin" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie + +/datum/recipe/plump_pie + appliance = OVEN + fruit = list("plumphelmet" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie + +/datum/recipe/applepie + appliance = OVEN + fruit = list("apple" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/applepie + +/datum/recipe/pumpkinpie + appliance = OVEN + fruit = list("pumpkin" = 1) + reagents = list("sugar" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie + +/datum/recipe/appletart + appliance = OVEN + fruit = list("goldapple" = 1) + reagents = list("sugar" = 10) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/appletart + result_quantity = 2 + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/keylimepie + appliance = OVEN + fruit = list("lime" = 2) + reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie + reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise + +/datum/recipe/quiche + appliance = OVEN + reagents = list("milk" = 5, "egg" = 9, "flour" = 10) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche + reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise + +//Baked sweets: +//--------------- + +/datum/recipe/cookie + appliance = OVEN + reagents = list("milk" = 10, "sugar" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cookie + result_quantity = 4 + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/ovenfortunecookie + appliance = OVEN + reagents = list("sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/paper + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie + +/datum/recipe/poppypretzel + appliance = OVEN + fruit = list("poppy" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) + result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel + result_quantity = 2 + +/datum/recipe/cracker + appliance = OVEN + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cracker + +/datum/recipe/brownies + appliance = OVEN + reagents = list("browniemix" = 10, "egg" = 3) + reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies + +/datum/recipe/cosmicbrownies + appliance = OVEN + reagents = list("browniemix" = 10, "egg" = 3) + fruit = list("ambrosia" = 1) + reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies + +/datum/recipe/buchedenoel + appliance = OVEN + fruit = list("berries" = 2) + reagents = list("cakebatter" = 20, "cream" = 10, "coco" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel + +/datum/recipe/cinnamonbun + appliance = OVEN + reagents = list("sugar" = 15, "cream" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cinnamonbun + result_quantity = 4 + +/datum/recipe/jaffacake + appliance = OVEN + fruit = list("orange" = 1) + reagents = list("cakebatter" = 15, "coco" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/jaffacake + result_quantity = 6 + +//Pizzas +//========================= +/datum/recipe/pizzamargherita + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita + +/datum/recipe/meatpizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza + +/datum/recipe/syntipizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza + +/datum/recipe/mushroompizza + appliance = OVEN + fruit = list("mushroom" = 5, "tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + + reagent_mix = RECIPE_REAGENT_REPLACE //No vomit taste in finished product from chanterelles + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza + +/datum/recipe/vegetablepizza + appliance = OVEN + fruit = list("eggplant" = 1, "carrot" = 1, "corn" = 1, "tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza + +/datum/recipe/pineapplepizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring, + /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple + +//Spicy +//================ + +/datum/recipe/enchiladas + appliance = OVEN + fruit = list("chili" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/tortilla + ) + result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas + + +// Cakes. +//============ +/datum/recipe/cake + appliance = OVEN + reagents = list("cakebatter" = 30, "vanilla" = 2) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/cake/carrot + appliance = OVEN + fruit = list("carrot" = 3) + reagents = list("cakebatter" = 30) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake + +/datum/recipe/cake/cheese + appliance = OVEN + reagents = list("cakebatter" = 30) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + +/datum/recipe/cake/peanut + fruit = list("peanut" = 1) + reagents = list("cakebatter" = 30, "peanutbutter" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake + +/datum/recipe/cake/orange + appliance = OVEN + fruit = list("orange" = 2) + reagents = list("cakebatter" = 30) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake + +/datum/recipe/cake/lime + appliance = OVEN + fruit = list("lime" = 2) + reagents = list("cakebatter" = 30) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake + +/datum/recipe/cake/lemon + appliance = OVEN + fruit = list("lemon" = 2) + reagents = list("cakebatter" = 30) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake + +/datum/recipe/cake/chocolate + appliance = OVEN + reagents = list("cakebatter" = 30, "coco" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake + +/datum/recipe/cake/birthday + appliance = OVEN + reagents = list("cakebatter" = 30) + items = list(/obj/item/clothing/head/cakehat) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake + +/datum/recipe/cake/apple + appliance = OVEN + fruit = list("apple" = 2) + reagents = list("cakebatter" = 30) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake + +/datum/recipe/cake/brain + appliance = OVEN + reagents = list("cakebatter" = 30) + items = list(/obj/item/organ/internal/brain) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake + +/datum/recipe/pancakes + appliance = OVEN + reagents = list("milk" = 5, "sugar" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/pancakes + result_quantity = 2 + +/datum/recipe/pancakes/berry + appliance = OVEN + fruit = list("berries" = 2) + reagents = list("milk" = 5, "sugar" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/pancakes/berry + result_quantity = 2 + +/datum/recipe/lasagna + appliance = OVEN + fruit = list("tomato" = 2, "eggplant" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + result = /obj/item/weapon/reagent_containers/food/snacks/lasagna + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/honeybun + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + reagents = list("milk" = 5, "egg" = 3,"honey" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/honeybun + result_quantity = 4 + +//Bacon +/datum/recipe/bacon_oven + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/spreads + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon/oven + result_quantity = 6 + +/datum/recipe/meat_pocket + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meat_pocket + result_quantity = 2 + +/datum/recipe/bacon_flatbread + appliance = OVEN + fruit = list("tomato" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread + +/datum/recipe/truffle + appliance = OVEN + reagents = list("sugar" = 5, "cream" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/truffle + result_quantity = 4 + +/datum/recipe/croissant + appliance = OVEN + reagents = list("sodiumchloride" = 1, "water" = 5, "milk" = 5, "yeast" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) + result = /obj/item/weapon/reagent_containers/food/snacks/croissant + result_quantity = 2 + +/datum/recipe/macncheese + appliance = OVEN + reagents = list("milk" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spagetti, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/macncheese + +/datum/recipe/suppermatter + appliance = OVEN + reagents = list("radium" = 5, "milk" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + ) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/suppermatter + +/datum/recipe/excitingsuppermatter + appliance = OVEN + reagents = list("radium" = 5, "spacespice" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + ) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/excitingsuppermatter + +/datum/recipe/waffles + appliance = OVEN + reagents = list("sugar" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/waffles + result_quantity = 2 + +/datum/recipe/loadedbakedpotatooven + appliance = OVEN + fruit = list("potato" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) + result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato + +/datum/recipe/meatbun + appliance = OVEN + fruit = list("cabbage" = 1) + reagents = list("water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking + result = /obj/item/weapon/reagent_containers/food/snacks/meatbun + result_quantity = 2 + +/datum/recipe/spicedmeatbun + appliance = OVEN + reagents = list("spacespice" = 2, "water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/rawcutlet + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking + result = /obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun + result_quantity = 2 + +/datum/recipe/custardbun + appliance = OVEN + reagents = list("spacespice" = 1, "water" = 5, "egg" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Water, egg used up in cooking + result = /obj/item/weapon/reagent_containers/food/snacks/custardbun + +/datum/recipe/chickenmomo + appliance = OVEN + reagents = list("spacespice" = 2, "water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/chickenmomo + result_quantity = 2 + +/datum/recipe/veggiemomo + appliance = OVEN + reagents = list("spacespice" = 2, "water" = 5) + fruit = list("carrot" = 1, "cabbage" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here + result = /obj/item/weapon/reagent_containers/food/snacks/veggiemomo + result_quantity = 2 diff --git a/code/modules/food/recipes_oven_vr.dm b/code/modules/food/recipes_oven_vr.dm index b292a9ff44..fad763bf1f 100644 --- a/code/modules/food/recipes_oven_vr.dm +++ b/code/modules/food/recipes_oven_vr.dm @@ -1,7 +1,7 @@ -/datum/recipe/scorpion - appliance = OVEN - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/scorpion - ) +/datum/recipe/scorpion + appliance = OVEN + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/scorpion + ) result = /obj/item/weapon/reagent_containers/food/snacks/scorpion_cooked \ No newline at end of file diff --git a/code/modules/gamemaster/defines.dm b/code/modules/gamemaster/defines.dm index 5bc17b462c..215e07ff91 100644 --- a/code/modules/gamemaster/defines.dm +++ b/code/modules/gamemaster/defines.dm @@ -1,3 +1,3 @@ -#define EVENT_CHAOS_THRESHOLD_HIGH_IMPACT 25 -#define EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT 50 +#define EVENT_CHAOS_THRESHOLD_HIGH_IMPACT 25 +#define EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT 50 #define EVENT_CHAOS_THRESHOLD_LOW_IMPACT 100 \ No newline at end of file diff --git a/code/modules/gamemaster/event2/event.dm b/code/modules/gamemaster/event2/event.dm index b9f1d92648..50be78a14b 100644 --- a/code/modules/gamemaster/event2/event.dm +++ b/code/modules/gamemaster/event2/event.dm @@ -1,240 +1,240 @@ -// This object holds the code that is needed to execute an event. -// Code for judging whether doing that event is a good idea or not belongs inside its meta event object. - - -/* - -Important: DO NOT `sleep()` in any of the procs here, or the GM will get stuck. Use callbacks insead. -Also please don't use spawn(), but use callbacks instead. - -Note that there is an important distinction between an event being ended, and an event being finished. -- Ended is for when the actual event is over, regardless of whether an announcement happened or not. -- Finished is for when both the event itself is over, and it was announced. The event will stop being -processed after it is finished. - -For an event to finish, it must have done two things: -- Go through its entire cycle, of start() -> end(), and -- Have the event be announced. -If an event has ended, but the announcement didn't happen, the event will not be finished. -This allows for events that have their announcement happen after the end itself. - -*/ - -// -/datum/event2/event - var/announced = FALSE // Is set to TRUE when `announce()` is called by `process()`. - var/started = FALSE // Is set to TRUE when `start()` is called by `process()`. - var/ended = FALSE // Is set to TRUE when `end()` is called by `process()`. - var/finished = FALSE // Is set to TRUE when `ended` and `announced` are TRUE. - - // `world.time`s when this event started, and finished, for bookkeeping. - var/time_started = null - var/time_finished = null - - // If these are set, the announcement will be delayed by a random time between the lower and upper bounds. - // If the upper bound is not defined, then it will use the lower bound instead. - // Note that this is independant of the event itself, so you can have the announcement happen long after the event ended. - // This may not work if should_announce() is overrided. - var/announce_delay_lower_bound = null - var/announce_delay_upper_bound = null - - // If these are set, the event will be delayed by a random time between the lower and upper bounds. - // If the upper bound is not defined, then it will use the lower bound instead. - // This may not work if should_start() is overrided. - var/start_delay_lower_bound = null - var/start_delay_upper_bound = null - - // If these are set, the event will automatically end at a random time between the lower and upper bounds. - // If the upper bound is not defined, then it will use the lower bound instead. - // This may not work if should_end() is overrided. - var/length_lower_bound = null - var/length_upper_bound = null - - // Set automatically, don't touch. - var/time_to_start = null - var/time_to_announce = null - var/time_to_end = null - - // These are also set automatically, and are provided for events to know what RNG decided for the various durations. - var/start_delay = null - var/announce_delay = null - var/length = null - -// Returns the name of where the event is taking place. -// In the future this might be handy for off-station events. -/datum/event2/event/proc/location_name() - return station_name() - -// Returns the z-levels that are involved with the event. -// In the future this might be handy for off-station events. -/datum/event2/event/proc/get_location_z_levels(space_only = FALSE) - . = using_map.station_levels.Copy() - if(space_only) - for(var/z_level in .) - if(is_planet_z_level(z_level)) - . -= z_level - - -/datum/event2/event/proc/is_planet_z_level(z_level) - var/datum/planet/P = LAZYACCESS(SSplanets.z_to_planet, z_level) - if(!istype(P)) - return FALSE - return TRUE - -// Returns a list of empty turfs in the same area. -/datum/event2/event/proc/find_random_turfs(minimum_free_space = 5, list/specific_areas = list(), ignore_occupancy = FALSE) - var/list/area/grand_list_of_areas = find_random_areas(specific_areas) - - if(!LAZYLEN(grand_list_of_areas)) - return list() - - for(var/list/A as anything in grand_list_of_areas) - var/list/turfs = list() - for(var/turf/T in A) - if(!T.check_density()) - turfs += T - - if(turfs.len < minimum_free_space) - continue // Not enough free space. - return turfs - - return list() - -/datum/event2/event/proc/find_random_areas(list/specific_areas = list(), ignore_occupancy = FALSE) - if(!LAZYLEN(specific_areas)) - specific_areas = global.the_station_areas.Copy() - - var/list/area/grand_list_of_areas = get_all_existing_areas_of_types(specific_areas) - . = list() - for(var/area/A as anything in shuffle(grand_list_of_areas)) - if(A.forbid_events) - continue - if(!(A.z in get_location_z_levels())) - continue - if(!ignore_occupancy && is_area_occupied(A)) - continue // Occupied. - . += A - - -// Starts the event. -/datum/event2/event/proc/execute() - time_started = world.time - - if(announce_delay_lower_bound) - announce_delay = rand(announce_delay_lower_bound, announce_delay_upper_bound ? announce_delay_upper_bound : announce_delay_lower_bound) - time_to_announce = world.time + announce_delay - - if(start_delay_lower_bound) - start_delay = rand(start_delay_lower_bound, start_delay_upper_bound ? start_delay_upper_bound : start_delay_lower_bound) - time_to_start = world.time + start_delay - - if(length_lower_bound) - var/starting_point = time_to_start ? time_to_start : world.time - length = rand(length_lower_bound, length_upper_bound ? length_upper_bound : length_lower_bound) - time_to_end = starting_point + length - - set_up() - -// Called at the very end of the event's lifecycle, or when aborted. -// Don't override this, use `end()` for cleanup instead. -/datum/event2/event/proc/finish() - finished = TRUE - time_finished = world.time - -// Called by admins wanting to stop an event immediately. -/datum/event2/event/proc/abort() - if(!announced) - announce() - if(!ended) // `end()` generally has cleanup procs, so call that. - end() - finish() - -// Called by the GM processer. -/datum/event2/event/process() - // Handle announcement track. - if(!announced && should_announce()) - announced = TRUE - announce() - - // Handle event track. - if(!started) - if(should_start()) - started = TRUE - start() - else - wait_tick() - - if(started && !ended) - if(should_end()) - ended = TRUE - end() - else - event_tick() - - // In order to be finished, the event needs to end, and be announced. - if(ended && announced) - finish() - -/datum/event2/event/Topic(href, href_list) - if(..()) - return - - if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) - message_admins("[usr] has attempted to manipulate an event without sufficent privilages.") - return - - if(href_list["abort"]) - abort() - message_admins("Event '[type]' was aborted by [usr.key].") - - // SSgame_master.interact(usr) // To refresh the UI. // VOREStation Edit - We don't use SSgame_master yet. - -/* - * Procs to Override - */ - -// Override this for code to be ran before the event is started. -/datum/event2/event/proc/set_up() - -// Called every tick from the GM system, and determines if the announcement should happen. -// Override this for special logic on when it should be announced, e.g. after `ended` is set to TRUE, -// however be aware that the event cannot finish until this returns TRUE at some point. -/datum/event2/event/proc/should_announce() - if(!time_to_announce) - return TRUE - return time_to_announce <= world.time - -// Override this for code that alerts the crew that the event is happening in some form, e.g. a centcom announcement or some other message. -// If you want them to not know, you can just not override it. -/datum/event2/event/proc/announce() - -// Override for code that runs every few seconds, while the event is waiting for `should_start()` to return TRUE. -// Note that events that have `should_start()` return TRUE at the start will never have this proc called. -/datum/event2/event/proc/wait_tick() - -// Called every tick from the GM system, and determines if the event should offically start. -// Override this for special logic on when it should start. -/datum/event2/event/proc/should_start() - if(!time_to_start) - return TRUE - return time_to_start <= world.time - -// Override this for code to do the actual event. -/datum/event2/event/proc/start() - - -// Override for code that runs every few seconds, while the event is waiting for `should_end()` to return TRUE. -// Note that events that have `should_end()` return TRUE at the start will never have this proc called. -/datum/event2/event/proc/event_tick() - - -// Called every tick from the GM system, and determines if the event should end. -// If this returns TRUE at the very start, then the event ends instantly and `tick()` will never be called. -// Override this for special logic on when it should end, e.g. blob core has to die before event ends. -/datum/event2/event/proc/should_end() - if(!time_to_end) - return TRUE - return time_to_end <= world.time - -// Override this for code to run when the event is over, e.g. cleanup. -/datum/event2/event/proc/end() +// This object holds the code that is needed to execute an event. +// Code for judging whether doing that event is a good idea or not belongs inside its meta event object. + + +/* + +Important: DO NOT `sleep()` in any of the procs here, or the GM will get stuck. Use callbacks insead. +Also please don't use spawn(), but use callbacks instead. + +Note that there is an important distinction between an event being ended, and an event being finished. +- Ended is for when the actual event is over, regardless of whether an announcement happened or not. +- Finished is for when both the event itself is over, and it was announced. The event will stop being +processed after it is finished. + +For an event to finish, it must have done two things: +- Go through its entire cycle, of start() -> end(), and +- Have the event be announced. +If an event has ended, but the announcement didn't happen, the event will not be finished. +This allows for events that have their announcement happen after the end itself. + +*/ + +// +/datum/event2/event + var/announced = FALSE // Is set to TRUE when `announce()` is called by `process()`. + var/started = FALSE // Is set to TRUE when `start()` is called by `process()`. + var/ended = FALSE // Is set to TRUE when `end()` is called by `process()`. + var/finished = FALSE // Is set to TRUE when `ended` and `announced` are TRUE. + + // `world.time`s when this event started, and finished, for bookkeeping. + var/time_started = null + var/time_finished = null + + // If these are set, the announcement will be delayed by a random time between the lower and upper bounds. + // If the upper bound is not defined, then it will use the lower bound instead. + // Note that this is independant of the event itself, so you can have the announcement happen long after the event ended. + // This may not work if should_announce() is overrided. + var/announce_delay_lower_bound = null + var/announce_delay_upper_bound = null + + // If these are set, the event will be delayed by a random time between the lower and upper bounds. + // If the upper bound is not defined, then it will use the lower bound instead. + // This may not work if should_start() is overrided. + var/start_delay_lower_bound = null + var/start_delay_upper_bound = null + + // If these are set, the event will automatically end at a random time between the lower and upper bounds. + // If the upper bound is not defined, then it will use the lower bound instead. + // This may not work if should_end() is overrided. + var/length_lower_bound = null + var/length_upper_bound = null + + // Set automatically, don't touch. + var/time_to_start = null + var/time_to_announce = null + var/time_to_end = null + + // These are also set automatically, and are provided for events to know what RNG decided for the various durations. + var/start_delay = null + var/announce_delay = null + var/length = null + +// Returns the name of where the event is taking place. +// In the future this might be handy for off-station events. +/datum/event2/event/proc/location_name() + return station_name() + +// Returns the z-levels that are involved with the event. +// In the future this might be handy for off-station events. +/datum/event2/event/proc/get_location_z_levels(space_only = FALSE) + . = using_map.station_levels.Copy() + if(space_only) + for(var/z_level in .) + if(is_planet_z_level(z_level)) + . -= z_level + + +/datum/event2/event/proc/is_planet_z_level(z_level) + var/datum/planet/P = LAZYACCESS(SSplanets.z_to_planet, z_level) + if(!istype(P)) + return FALSE + return TRUE + +// Returns a list of empty turfs in the same area. +/datum/event2/event/proc/find_random_turfs(minimum_free_space = 5, list/specific_areas = list(), ignore_occupancy = FALSE) + var/list/area/grand_list_of_areas = find_random_areas(specific_areas) + + if(!LAZYLEN(grand_list_of_areas)) + return list() + + for(var/list/A as anything in grand_list_of_areas) + var/list/turfs = list() + for(var/turf/T in A) + if(!T.check_density()) + turfs += T + + if(turfs.len < minimum_free_space) + continue // Not enough free space. + return turfs + + return list() + +/datum/event2/event/proc/find_random_areas(list/specific_areas = list(), ignore_occupancy = FALSE) + if(!LAZYLEN(specific_areas)) + specific_areas = global.the_station_areas.Copy() + + var/list/area/grand_list_of_areas = get_all_existing_areas_of_types(specific_areas) + . = list() + for(var/area/A as anything in shuffle(grand_list_of_areas)) + if(A.forbid_events) + continue + if(!(A.z in get_location_z_levels())) + continue + if(!ignore_occupancy && is_area_occupied(A)) + continue // Occupied. + . += A + + +// Starts the event. +/datum/event2/event/proc/execute() + time_started = world.time + + if(announce_delay_lower_bound) + announce_delay = rand(announce_delay_lower_bound, announce_delay_upper_bound ? announce_delay_upper_bound : announce_delay_lower_bound) + time_to_announce = world.time + announce_delay + + if(start_delay_lower_bound) + start_delay = rand(start_delay_lower_bound, start_delay_upper_bound ? start_delay_upper_bound : start_delay_lower_bound) + time_to_start = world.time + start_delay + + if(length_lower_bound) + var/starting_point = time_to_start ? time_to_start : world.time + length = rand(length_lower_bound, length_upper_bound ? length_upper_bound : length_lower_bound) + time_to_end = starting_point + length + + set_up() + +// Called at the very end of the event's lifecycle, or when aborted. +// Don't override this, use `end()` for cleanup instead. +/datum/event2/event/proc/finish() + finished = TRUE + time_finished = world.time + +// Called by admins wanting to stop an event immediately. +/datum/event2/event/proc/abort() + if(!announced) + announce() + if(!ended) // `end()` generally has cleanup procs, so call that. + end() + finish() + +// Called by the GM processer. +/datum/event2/event/process() + // Handle announcement track. + if(!announced && should_announce()) + announced = TRUE + announce() + + // Handle event track. + if(!started) + if(should_start()) + started = TRUE + start() + else + wait_tick() + + if(started && !ended) + if(should_end()) + ended = TRUE + end() + else + event_tick() + + // In order to be finished, the event needs to end, and be announced. + if(ended && announced) + finish() + +/datum/event2/event/Topic(href, href_list) + if(..()) + return + + if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) + message_admins("[usr] has attempted to manipulate an event without sufficent privilages.") + return + + if(href_list["abort"]) + abort() + message_admins("Event '[type]' was aborted by [usr.key].") + + // SSgame_master.interact(usr) // To refresh the UI. // VOREStation Edit - We don't use SSgame_master yet. + +/* + * Procs to Override + */ + +// Override this for code to be ran before the event is started. +/datum/event2/event/proc/set_up() + +// Called every tick from the GM system, and determines if the announcement should happen. +// Override this for special logic on when it should be announced, e.g. after `ended` is set to TRUE, +// however be aware that the event cannot finish until this returns TRUE at some point. +/datum/event2/event/proc/should_announce() + if(!time_to_announce) + return TRUE + return time_to_announce <= world.time + +// Override this for code that alerts the crew that the event is happening in some form, e.g. a centcom announcement or some other message. +// If you want them to not know, you can just not override it. +/datum/event2/event/proc/announce() + +// Override for code that runs every few seconds, while the event is waiting for `should_start()` to return TRUE. +// Note that events that have `should_start()` return TRUE at the start will never have this proc called. +/datum/event2/event/proc/wait_tick() + +// Called every tick from the GM system, and determines if the event should offically start. +// Override this for special logic on when it should start. +/datum/event2/event/proc/should_start() + if(!time_to_start) + return TRUE + return time_to_start <= world.time + +// Override this for code to do the actual event. +/datum/event2/event/proc/start() + + +// Override for code that runs every few seconds, while the event is waiting for `should_end()` to return TRUE. +// Note that events that have `should_end()` return TRUE at the start will never have this proc called. +/datum/event2/event/proc/event_tick() + + +// Called every tick from the GM system, and determines if the event should end. +// If this returns TRUE at the very start, then the event ends instantly and `tick()` will never be called. +// Override this for special logic on when it should end, e.g. blob core has to die before event ends. +/datum/event2/event/proc/should_end() + if(!time_to_end) + return TRUE + return time_to_end <= world.time + +// Override this for code to run when the event is over, e.g. cleanup. +/datum/event2/event/proc/end() diff --git a/code/modules/gamemaster/event2/events/cargo/shipping_error.dm b/code/modules/gamemaster/event2/events/cargo/shipping_error.dm index eaab32cb8a..34d97dcccd 100644 --- a/code/modules/gamemaster/event2/events/cargo/shipping_error.dm +++ b/code/modules/gamemaster/event2/events/cargo/shipping_error.dm @@ -1,16 +1,16 @@ -/datum/event2/meta/shipping_error - name = "shipping error" - departments = list(DEPARTMENT_CARGO) - chaos = -10 // A helpful event. - reusable = TRUE - event_type = /datum/event2/event/shipping_error - -/datum/event2/meta/shipping_error/get_weight() - return (metric.count_people_with_job(/datum/job/cargo_tech) + metric.count_people_with_job(/datum/job/qm)) * 30 - -/datum/event2/event/shipping_error/start() - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = SSsupply.ordernum - O.object = SSsupply.supply_pack[pick(SSsupply.supply_pack)] - O.ordered_by = random_name(pick(MALE,FEMALE), species = "Human") - SSsupply.shoppinglist += O +/datum/event2/meta/shipping_error + name = "shipping error" + departments = list(DEPARTMENT_CARGO) + chaos = -10 // A helpful event. + reusable = TRUE + event_type = /datum/event2/event/shipping_error + +/datum/event2/meta/shipping_error/get_weight() + return (metric.count_people_with_job(/datum/job/cargo_tech) + metric.count_people_with_job(/datum/job/qm)) * 30 + +/datum/event2/event/shipping_error/start() + var/datum/supply_order/O = new /datum/supply_order() + O.ordernum = SSsupply.ordernum + O.object = SSsupply.supply_pack[pick(SSsupply.supply_pack)] + O.ordered_by = random_name(pick(MALE,FEMALE), species = "Human") + SSsupply.shoppinglist += O diff --git a/code/modules/gamemaster/event2/events/command/manifest_malfunction.dm b/code/modules/gamemaster/event2/events/command/manifest_malfunction.dm index 0a19ec7a65..9c41235666 100644 --- a/code/modules/gamemaster/event2/events/command/manifest_malfunction.dm +++ b/code/modules/gamemaster/event2/events/command/manifest_malfunction.dm @@ -1,61 +1,61 @@ -/datum/event2/meta/manifest_malfunction - name = "manifest_malfunction" - departments = list(DEPARTMENT_COMMAND, DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/manifest_malfunction - -/datum/event2/meta/manifest_malfunction/get_weight() - var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) - - if(!security || !data_core) - return 0 - - var/command = metric.count_people_with_job(/datum/job/hop) + metric.count_people_with_job(/datum/job/captain) - var/synths = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) - var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - (synths + security + command) // So they don't get counted twice. - - return (security * 10) + (synths * 20) + (command * 20) + (everyone * 5) - - - -/datum/event2/event/manifest_malfunction - announce_delay_lower_bound = 5 MINUTES - announce_delay_upper_bound = 10 MINUTES - var/records_to_delete = 2 - var/record_class_to_delete = null - -/datum/event2/event/manifest_malfunction/set_up() - record_class_to_delete = pickweight(list("medical" = 10, "security" = 30)) - -/datum/event2/event/manifest_malfunction/announce() - if(prob(30)) - var/message = null - var/author = null - var/rng = rand(1, 2) - switch(rng) - if(1) - author = "Data Breach Alert" - message = "The [record_class_to_delete] record database has suffered from an attack by one or more hackers. \ - They appear to have wiped several records, before disconnecting." - if(2) - author = "Downtime Alert" - message = "The [record_class_to_delete] record database server has suffered a hardware failure, and is no longer functional. \ - A temporary replacement server has been activated, containing recovered data from the main server. \ - A few records became corrupted, and could not be transferred." - command_announcement.Announce(message, author) - -/datum/event2/event/manifest_malfunction/start() - for(var/i = 1 to records_to_delete) - var/datum/data/record/R - - switch(record_class_to_delete) - if("security") - R = safepick(data_core.security) - - if("medical") - R = safepick(data_core.medical) - - if(R) - log_debug("Manifest malfunction event is now deleting [R.fields["name"]]'s [record_class_to_delete] record.") - qdel(R) +/datum/event2/meta/manifest_malfunction + name = "manifest_malfunction" + departments = list(DEPARTMENT_COMMAND, DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/manifest_malfunction + +/datum/event2/meta/manifest_malfunction/get_weight() + var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) + + if(!security || !data_core) + return 0 + + var/command = metric.count_people_with_job(/datum/job/hop) + metric.count_people_with_job(/datum/job/captain) + var/synths = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) + var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - (synths + security + command) // So they don't get counted twice. + + return (security * 10) + (synths * 20) + (command * 20) + (everyone * 5) + + + +/datum/event2/event/manifest_malfunction + announce_delay_lower_bound = 5 MINUTES + announce_delay_upper_bound = 10 MINUTES + var/records_to_delete = 2 + var/record_class_to_delete = null + +/datum/event2/event/manifest_malfunction/set_up() + record_class_to_delete = pickweight(list("medical" = 10, "security" = 30)) + +/datum/event2/event/manifest_malfunction/announce() + if(prob(30)) + var/message = null + var/author = null + var/rng = rand(1, 2) + switch(rng) + if(1) + author = "Data Breach Alert" + message = "The [record_class_to_delete] record database has suffered from an attack by one or more hackers. \ + They appear to have wiped several records, before disconnecting." + if(2) + author = "Downtime Alert" + message = "The [record_class_to_delete] record database server has suffered a hardware failure, and is no longer functional. \ + A temporary replacement server has been activated, containing recovered data from the main server. \ + A few records became corrupted, and could not be transferred." + command_announcement.Announce(message, author) + +/datum/event2/event/manifest_malfunction/start() + for(var/i = 1 to records_to_delete) + var/datum/data/record/R + + switch(record_class_to_delete) + if("security") + R = safepick(data_core.security) + + if("medical") + R = safepick(data_core.medical) + + if(R) + log_debug("Manifest malfunction event is now deleting [R.fields["name"]]'s [record_class_to_delete] record.") + qdel(R) diff --git a/code/modules/gamemaster/event2/events/command/money_hacker.dm b/code/modules/gamemaster/event2/events/command/money_hacker.dm index a1dbd1e18b..287844cf2d 100644 --- a/code/modules/gamemaster/event2/events/command/money_hacker.dm +++ b/code/modules/gamemaster/event2/events/command/money_hacker.dm @@ -1,110 +1,110 @@ -/datum/event2/meta/money_hacker - name = "money hacker" - departments = list(DEPARTMENT_COMMAND) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/money_hacker - -/datum/event2/meta/money_hacker/get_weight() - var/command = metric.count_people_with_job(/datum/job/hop) + metric.count_people_with_job(/datum/job/captain) - - if(!command) - return 0 - return 30 + (command * 20) + (all_money_accounts.len * 5) - - - -/datum/event2/event/money_hacker - length_lower_bound = 8 MINUTES - length_upper_bound = 12 MINUTES - var/datum/money_account/targeted_account = null - -/datum/event2/event/money_hacker/set_up() - if(LAZYLEN(all_money_accounts)) - targeted_account = pick(all_money_accounts) - - if(!targeted_account) - log_debug("Money hacker event could not find an account to hack. Aborting.") - abort() - return - -/datum/event2/event/money_hacker/announce() - var/message = "A brute force hack has been detected (in progress since [stationtime2text()]). The target of the attack is: Financial account #[targeted_account.account_number], \ - without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \ - Notifications will be sent as updates occur." - var/my_department = "[location_name()] Firewall Subroutines" - - for(var/obj/machinery/message_server/MS in machines) - if(!MS.active) - continue - MS.send_rc_message("Head of Personnel's Desk", my_department, "[message]
                    ", "", "", 2) - - // Nobody reads the requests consoles so lets use the radio as well. - global_announcer.autosay(message, my_department, DEPARTMENT_COMMAND) - -/datum/event2/event/money_hacker/end() - var/message = null - if(targeted_account && !targeted_account.suspended) // Hacker wins. - message = "The hack attempt has succeeded." - hack_account(targeted_account) - log_debug("Money hacker event managed to hack the targeted account.") - - else // Crew wins. - message = "The attack has ceased, the affected accounts can now be brought online." - log_debug("Money hacker event failed to hack the targeted account due to intervention by the crew.") - - var/my_department = "[location_name()] Firewall Subroutines" - - for(var/obj/machinery/message_server/MS in machines) - if(!MS.active) continue - MS.send_rc_message("Head of Personnel's Desk", my_department, message, "", "", 2) - - global_announcer.autosay(message, my_department, DEPARTMENT_COMMAND) - -/datum/event2/event/money_hacker/proc/hack_account(datum/money_account/A) - // Subtract the money. - var/lost = A.money * 0.8 + (rand(2,4) - 2) / 10 - A.money -= lost - - // Create a taunting log entry. - var/datum/transaction/T = new() - T.target_name = pick(list( - "", - "yo brotha from anotha motha", - "el Presidente", - "chieF smackDowN", - "Nobody" - )) - - T.purpose = pick(list( - "Ne$ ---ount fu%ds init*&lisat@*n", - "PAY BACK YOUR MUM", - "Funds withdrawal", - "pWnAgE", - "l33t hax", - "liberationez", - "Hit", - "Nothing" - )) - - T.amount = pick(list( - "", - "([rand(0,99999)])", - "alla money", - "9001$", - "HOLLA HOLLA GET DOLLA", - "([lost])", - "69,420t" - )) - - var/date1 = "1 January 1970" // Unix epoch. - var/date2 = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [rand(1000,3000)]" - T.date = pick("", current_date_string, date1, date2,"Nowhen") - - var/time1 = rand(0, 99999999) - var/time2 = "[round(time1 / 36000)+12]:[(time1 / 600 % 60) < 10 ? add_zero(time1 / 600 % 60, 1) : time1 / 600 % 60]" - T.time = pick("", stationtime2text(), time2, "Never") - - T.source_terminal = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD","Angessa's Pearl","Nowhere") - - A.transaction_log.Add(T) +/datum/event2/meta/money_hacker + name = "money hacker" + departments = list(DEPARTMENT_COMMAND) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/money_hacker + +/datum/event2/meta/money_hacker/get_weight() + var/command = metric.count_people_with_job(/datum/job/hop) + metric.count_people_with_job(/datum/job/captain) + + if(!command) + return 0 + return 30 + (command * 20) + (all_money_accounts.len * 5) + + + +/datum/event2/event/money_hacker + length_lower_bound = 8 MINUTES + length_upper_bound = 12 MINUTES + var/datum/money_account/targeted_account = null + +/datum/event2/event/money_hacker/set_up() + if(LAZYLEN(all_money_accounts)) + targeted_account = pick(all_money_accounts) + + if(!targeted_account) + log_debug("Money hacker event could not find an account to hack. Aborting.") + abort() + return + +/datum/event2/event/money_hacker/announce() + var/message = "A brute force hack has been detected (in progress since [stationtime2text()]). The target of the attack is: Financial account #[targeted_account.account_number], \ + without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \ + Notifications will be sent as updates occur." + var/my_department = "[location_name()] Firewall Subroutines" + + for(var/obj/machinery/message_server/MS in machines) + if(!MS.active) + continue + MS.send_rc_message("Head of Personnel's Desk", my_department, "[message]
                    ", "", "", 2) + + // Nobody reads the requests consoles so lets use the radio as well. + global_announcer.autosay(message, my_department, DEPARTMENT_COMMAND) + +/datum/event2/event/money_hacker/end() + var/message = null + if(targeted_account && !targeted_account.suspended) // Hacker wins. + message = "The hack attempt has succeeded." + hack_account(targeted_account) + log_debug("Money hacker event managed to hack the targeted account.") + + else // Crew wins. + message = "The attack has ceased, the affected accounts can now be brought online." + log_debug("Money hacker event failed to hack the targeted account due to intervention by the crew.") + + var/my_department = "[location_name()] Firewall Subroutines" + + for(var/obj/machinery/message_server/MS in machines) + if(!MS.active) continue + MS.send_rc_message("Head of Personnel's Desk", my_department, message, "", "", 2) + + global_announcer.autosay(message, my_department, DEPARTMENT_COMMAND) + +/datum/event2/event/money_hacker/proc/hack_account(datum/money_account/A) + // Subtract the money. + var/lost = A.money * 0.8 + (rand(2,4) - 2) / 10 + A.money -= lost + + // Create a taunting log entry. + var/datum/transaction/T = new() + T.target_name = pick(list( + "", + "yo brotha from anotha motha", + "el Presidente", + "chieF smackDowN", + "Nobody" + )) + + T.purpose = pick(list( + "Ne$ ---ount fu%ds init*&lisat@*n", + "PAY BACK YOUR MUM", + "Funds withdrawal", + "pWnAgE", + "l33t hax", + "liberationez", + "Hit", + "Nothing" + )) + + T.amount = pick(list( + "", + "([rand(0,99999)])", + "alla money", + "9001$", + "HOLLA HOLLA GET DOLLA", + "([lost])", + "69,420t" + )) + + var/date1 = "1 January 1970" // Unix epoch. + var/date2 = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [rand(1000,3000)]" + T.date = pick("", current_date_string, date1, date2,"Nowhen") + + var/time1 = rand(0, 99999999) + var/time2 = "[round(time1 / 36000)+12]:[(time1 / 600 % 60) < 10 ? add_zero(time1 / 600 % 60, 1) : time1 / 600 % 60]" + T.time = pick("", stationtime2text(), time2, "Never") + + T.source_terminal = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD","Angessa's Pearl","Nowhere") + + A.transaction_log.Add(T) diff --git a/code/modules/gamemaster/event2/events/command/raise_funds.dm b/code/modules/gamemaster/event2/events/command/raise_funds.dm index 31e8816350..1540d74e80 100644 --- a/code/modules/gamemaster/event2/events/command/raise_funds.dm +++ b/code/modules/gamemaster/event2/events/command/raise_funds.dm @@ -1,96 +1,96 @@ -/datum/event2/meta/raise_funds - name = "local funding drive" - enabled = FALSE // There isn't really any suitable way for the crew to generate thalers right now, if that gets fixed feel free to turn this event on. - departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CARGO) - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/raise_funds - -/datum/event2/meta/raise_funds/get_weight() - var/command = metric.count_people_in_department(DEPARTMENT_COMMAND) - if(!command) // Need someone to read the centcom message. - return 0 - - var/cargo = metric.count_people_in_department(DEPARTMENT_CARGO) - return (command * 20) + (cargo * 20) - - - -/datum/event2/event/raise_funds - length_lower_bound = 30 MINUTES - length_upper_bound = 45 MINUTES - var/money_at_start = 0 - -/datum/event2/event/raise_funds/announce() - var/message = "Due to [pick("recent", "unfortunate", "possible future")] budget \ - [pick("changes", "issues")], in-system stations are now advised to increase funding income." - - send_command_report("Budget Advisement", message) - -/datum/event2/event/raise_funds/start() - // Note that the event remembers the amount of money when it started. If an issue develops where people try to scam centcom by - // taking out loads of money before the event, then depositing it back in after the event fires, feel free to make this check for - // roundstart money instead. - money_at_start = count_money() - log_debug("Funding Drive event logged a sum of [money_at_start] thalers in all station accounts at the start of the event.") - -/datum/event2/event/raise_funds/end() - var/money_at_end = count_money() - log_debug("Funding Drive event logged a sum of [money_at_end] thalers in all station accounts at the end of the event, compared \ - to [money_at_start] thalers. A difference of [money_at_end / money_at_start] was calculated.") - - // A number above 1 indicates money was made, while below 1 does the opposite. - var/budget_shift = money_at_end / money_at_start - - // Centcom will say different things based on if they gained or lost money. - var/message = null - switch(budget_shift) - if(0 to 0.02) // Abyssmal response. - message = "We are very interested in learning where [round(money_at_start, 1000)] thaler went in \ - just half an hour. We highly recommend rectifying this issue before the end of the shift, otherwise a \ - discussion regarding your future employment prospects will occur.

                    \ - Your facility's current balance of requisition tokens has been revoked." - SSsupply.points = 0 - log_debug("Funding Drive event ended with an abyssmal response, and the loss of all cargo points.") - - if(0.02 to 0.98) // Bad response. - message = "We're very disappointed that \the [location_name()] has ran a deficit since our request. \ - As such, we will be taking away some requisition tokens to cover the cost of operating your facility." - var/points_lost = round(SSsupply.points * rand(0.5, 0.8)) - SSsupply.points -= points_lost - log_debug("Funding Drive event ended with a bad response, and [points_lost] cargo points was taken away.") - - if(0.98 to 1.02) // Neutral response. - message = "It is unfortunate that \the [location_name()]'s finances remain at a standstill, however \ - that is still preferred over having a decicit. We hope that in the future, your facility will be able to be \ - more profitable." - log_debug("Funding Drive event ended with a neutral response.") - - if(1.02 to INFINITY) // Good response. - message = "We appreciate the efforts made by \the [location_name()] to run at a surplus. \ - Together, along with the other facilities present in the [using_map.starsys_name] system, \ - the company is expected to meet the quota.

                    \ - We will allocate additional requisition tokens for the cargo department as a reward." - - // If cargo is ever made to use station funds instead of cargo points, then a new kind of reward will be needed. - // Otherwise it would be weird for centcom to go 'thanks for not spending money, your reward is money to spend'. - var/point_reward = rand(100, 200) - SSsupply.points += point_reward - log_debug("Funding Drive event ended with a good response and a bonus of [point_reward] cargo points.") - - send_command_report("Budget Followup", message) - - - -// Returns the sum of the station account and all the departmental accounts. -/datum/event2/event/raise_funds/proc/count_money() - . = 0 - . += station_account.money - for(var/i = 1 to SSjob.department_datums.len) - var/datum/money_account/account = LAZYACCESS(department_accounts, SSjob.department_datums[i]) - if(istype(account)) - . += account.money - -/datum/event2/event/raise_funds/proc/send_command_report(title, message) - post_comm_message(title, message) - to_world(span("danger", "New [using_map.company_name] Update available at all communication consoles.")) - SEND_SOUND(world, 'sound/AI/commandreport.ogg') +/datum/event2/meta/raise_funds + name = "local funding drive" + enabled = FALSE // There isn't really any suitable way for the crew to generate thalers right now, if that gets fixed feel free to turn this event on. + departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CARGO) + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/raise_funds + +/datum/event2/meta/raise_funds/get_weight() + var/command = metric.count_people_in_department(DEPARTMENT_COMMAND) + if(!command) // Need someone to read the centcom message. + return 0 + + var/cargo = metric.count_people_in_department(DEPARTMENT_CARGO) + return (command * 20) + (cargo * 20) + + + +/datum/event2/event/raise_funds + length_lower_bound = 30 MINUTES + length_upper_bound = 45 MINUTES + var/money_at_start = 0 + +/datum/event2/event/raise_funds/announce() + var/message = "Due to [pick("recent", "unfortunate", "possible future")] budget \ + [pick("changes", "issues")], in-system stations are now advised to increase funding income." + + send_command_report("Budget Advisement", message) + +/datum/event2/event/raise_funds/start() + // Note that the event remembers the amount of money when it started. If an issue develops where people try to scam centcom by + // taking out loads of money before the event, then depositing it back in after the event fires, feel free to make this check for + // roundstart money instead. + money_at_start = count_money() + log_debug("Funding Drive event logged a sum of [money_at_start] thalers in all station accounts at the start of the event.") + +/datum/event2/event/raise_funds/end() + var/money_at_end = count_money() + log_debug("Funding Drive event logged a sum of [money_at_end] thalers in all station accounts at the end of the event, compared \ + to [money_at_start] thalers. A difference of [money_at_end / money_at_start] was calculated.") + + // A number above 1 indicates money was made, while below 1 does the opposite. + var/budget_shift = money_at_end / money_at_start + + // Centcom will say different things based on if they gained or lost money. + var/message = null + switch(budget_shift) + if(0 to 0.02) // Abyssmal response. + message = "We are very interested in learning where [round(money_at_start, 1000)] thaler went in \ + just half an hour. We highly recommend rectifying this issue before the end of the shift, otherwise a \ + discussion regarding your future employment prospects will occur.

                    \ + Your facility's current balance of requisition tokens has been revoked." + SSsupply.points = 0 + log_debug("Funding Drive event ended with an abyssmal response, and the loss of all cargo points.") + + if(0.02 to 0.98) // Bad response. + message = "We're very disappointed that \the [location_name()] has ran a deficit since our request. \ + As such, we will be taking away some requisition tokens to cover the cost of operating your facility." + var/points_lost = round(SSsupply.points * rand(0.5, 0.8)) + SSsupply.points -= points_lost + log_debug("Funding Drive event ended with a bad response, and [points_lost] cargo points was taken away.") + + if(0.98 to 1.02) // Neutral response. + message = "It is unfortunate that \the [location_name()]'s finances remain at a standstill, however \ + that is still preferred over having a decicit. We hope that in the future, your facility will be able to be \ + more profitable." + log_debug("Funding Drive event ended with a neutral response.") + + if(1.02 to INFINITY) // Good response. + message = "We appreciate the efforts made by \the [location_name()] to run at a surplus. \ + Together, along with the other facilities present in the [using_map.starsys_name] system, \ + the company is expected to meet the quota.

                    \ + We will allocate additional requisition tokens for the cargo department as a reward." + + // If cargo is ever made to use station funds instead of cargo points, then a new kind of reward will be needed. + // Otherwise it would be weird for centcom to go 'thanks for not spending money, your reward is money to spend'. + var/point_reward = rand(100, 200) + SSsupply.points += point_reward + log_debug("Funding Drive event ended with a good response and a bonus of [point_reward] cargo points.") + + send_command_report("Budget Followup", message) + + + +// Returns the sum of the station account and all the departmental accounts. +/datum/event2/event/raise_funds/proc/count_money() + . = 0 + . += station_account.money + for(var/i = 1 to SSjob.department_datums.len) + var/datum/money_account/account = LAZYACCESS(department_accounts, SSjob.department_datums[i]) + if(istype(account)) + . += account.money + +/datum/event2/event/raise_funds/proc/send_command_report(title, message) + post_comm_message(title, message) + to_world(span("danger", "New [using_map.company_name] Update available at all communication consoles.")) + SEND_SOUND(world, 'sound/AI/commandreport.ogg') diff --git a/code/modules/gamemaster/event2/events/engineering/airlock_failure.dm b/code/modules/gamemaster/event2/events/engineering/airlock_failure.dm index c3cd5d0b24..3966d3c478 100644 --- a/code/modules/gamemaster/event2/events/engineering/airlock_failure.dm +++ b/code/modules/gamemaster/event2/events/engineering/airlock_failure.dm @@ -1,105 +1,105 @@ -/datum/event2/meta/airlock_failure - event_class = "airlock failure" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_MEDICAL) - chaos = 15 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/airlock_failure - var/needs_medical = FALSE - -/datum/event2/meta/airlock_failure/emag - name = "airlock failure - emag" - event_type = /datum/event2/event/airlock_failure/emag - -/datum/event2/meta/airlock_failure/door_crush - name = "airlock failure - crushing" - event_type = /datum/event2/event/airlock_failure/door_crush - needs_medical = TRUE - -/datum/event2/meta/airlock_failure/shock - name = "airlock failure - shock" - chaos = 30 - event_type = /datum/event2/event/airlock_failure/shock - needs_medical = TRUE - - -/datum/event2/meta/airlock_failure/get_weight() - var/engineering = metric.count_people_in_department(DEPARTMENT_ENGINEERING) - - // Synths are good both for fixing the doors and getting blamed for the doors zapping people. - var/synths = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) - if(!engineering && !synths) // Nobody's around to fix the door. - return 0 - - // Medical might be needed for some of the more violent airlock failures. - var/medical = metric.count_people_in_department(DEPARTMENT_MEDICAL) - if(!medical && needs_medical) - return 0 - - return (engineering * 20) + (medical * 20) + (synths * 20) - - - -/datum/event2/event/airlock_failure - announce_delay_lower_bound = 20 SECONDS - announce_delay_upper_bound = 40 SECONDS - var/announce_odds = 0 - var/doors_to_break = 1 - var/list/affected_areas = list() - -/datum/event2/event/airlock_failure/emag - announce_odds = 10 // To make people wonder if the emagged door was from a baddie or from this event. - doors_to_break = 2 // Replacing emagged doors really sucks for engineering so don't overdo it. - -/datum/event2/event/airlock_failure/door_crush - announce_odds = 30 - doors_to_break = 5 - -/datum/event2/event/airlock_failure/shock - announce_odds = 70 - -/datum/event2/event/airlock_failure/start() - var/list/areas = find_random_areas() - if(!LAZYLEN(areas)) - log_debug("Airlock Failure event could not find any areas. Aborting.") - abort() - return - - while(areas.len) - var/area/area = pick(areas) - areas -= area - - for(var/obj/machinery/door/airlock/door in area.contents) - if(can_break_door(door)) - addtimer(CALLBACK(src, PROC_REF(break_door), door), 1) // Emagging proc is actually a blocking proc and that's bad for the ticker. - door.visible_message(span("danger", "\The [door]'s panel sparks!")) - playsound(door, "sparks", 50, 1) - log_debug("Airlock Failure event has broken \the [door] airlock in [area].") - affected_areas |= area - doors_to_break-- - - if(doors_to_break <= 0) - return - -/datum/event2/event/airlock_failure/announce() - if(prob(announce_odds)) - command_announcement.Announce("An electrical issue has been detected in the airlock grid at [english_list(affected_areas)]. \ - Some airlocks may require servicing by a qualified technician.", "Electrical Alert") - - -/datum/event2/event/airlock_failure/proc/can_break_door(obj/machinery/door/airlock/door) - if(istype(door, /obj/machinery/door/airlock/lift)) - return FALSE - return door.arePowerSystemsOn() - -// Override this for door busting. -/datum/event2/event/airlock_failure/proc/break_door(obj/machinery/door/airlock/door) - -/datum/event2/event/airlock_failure/emag/break_door(obj/machinery/door/airlock/door) - door.emag_act(1) - -/datum/event2/event/airlock_failure/door_crush/break_door(obj/machinery/door/airlock/door) - door.normalspeed = FALSE - door.safe = FALSE - -/datum/event2/event/airlock_failure/shock/break_door(obj/machinery/door/airlock/door) - door.electrify(-1) +/datum/event2/meta/airlock_failure + event_class = "airlock failure" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_MEDICAL) + chaos = 15 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/airlock_failure + var/needs_medical = FALSE + +/datum/event2/meta/airlock_failure/emag + name = "airlock failure - emag" + event_type = /datum/event2/event/airlock_failure/emag + +/datum/event2/meta/airlock_failure/door_crush + name = "airlock failure - crushing" + event_type = /datum/event2/event/airlock_failure/door_crush + needs_medical = TRUE + +/datum/event2/meta/airlock_failure/shock + name = "airlock failure - shock" + chaos = 30 + event_type = /datum/event2/event/airlock_failure/shock + needs_medical = TRUE + + +/datum/event2/meta/airlock_failure/get_weight() + var/engineering = metric.count_people_in_department(DEPARTMENT_ENGINEERING) + + // Synths are good both for fixing the doors and getting blamed for the doors zapping people. + var/synths = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) + if(!engineering && !synths) // Nobody's around to fix the door. + return 0 + + // Medical might be needed for some of the more violent airlock failures. + var/medical = metric.count_people_in_department(DEPARTMENT_MEDICAL) + if(!medical && needs_medical) + return 0 + + return (engineering * 20) + (medical * 20) + (synths * 20) + + + +/datum/event2/event/airlock_failure + announce_delay_lower_bound = 20 SECONDS + announce_delay_upper_bound = 40 SECONDS + var/announce_odds = 0 + var/doors_to_break = 1 + var/list/affected_areas = list() + +/datum/event2/event/airlock_failure/emag + announce_odds = 10 // To make people wonder if the emagged door was from a baddie or from this event. + doors_to_break = 2 // Replacing emagged doors really sucks for engineering so don't overdo it. + +/datum/event2/event/airlock_failure/door_crush + announce_odds = 30 + doors_to_break = 5 + +/datum/event2/event/airlock_failure/shock + announce_odds = 70 + +/datum/event2/event/airlock_failure/start() + var/list/areas = find_random_areas() + if(!LAZYLEN(areas)) + log_debug("Airlock Failure event could not find any areas. Aborting.") + abort() + return + + while(areas.len) + var/area/area = pick(areas) + areas -= area + + for(var/obj/machinery/door/airlock/door in area.contents) + if(can_break_door(door)) + addtimer(CALLBACK(src, PROC_REF(break_door), door), 1) // Emagging proc is actually a blocking proc and that's bad for the ticker. + door.visible_message(span("danger", "\The [door]'s panel sparks!")) + playsound(door, "sparks", 50, 1) + log_debug("Airlock Failure event has broken \the [door] airlock in [area].") + affected_areas |= area + doors_to_break-- + + if(doors_to_break <= 0) + return + +/datum/event2/event/airlock_failure/announce() + if(prob(announce_odds)) + command_announcement.Announce("An electrical issue has been detected in the airlock grid at [english_list(affected_areas)]. \ + Some airlocks may require servicing by a qualified technician.", "Electrical Alert") + + +/datum/event2/event/airlock_failure/proc/can_break_door(obj/machinery/door/airlock/door) + if(istype(door, /obj/machinery/door/airlock/lift)) + return FALSE + return door.arePowerSystemsOn() + +// Override this for door busting. +/datum/event2/event/airlock_failure/proc/break_door(obj/machinery/door/airlock/door) + +/datum/event2/event/airlock_failure/emag/break_door(obj/machinery/door/airlock/door) + door.emag_act(1) + +/datum/event2/event/airlock_failure/door_crush/break_door(obj/machinery/door/airlock/door) + door.normalspeed = FALSE + door.safe = FALSE + +/datum/event2/event/airlock_failure/shock/break_door(obj/machinery/door/airlock/door) + door.electrify(-1) diff --git a/code/modules/gamemaster/event2/events/engineering/blob.dm b/code/modules/gamemaster/event2/events/engineering/blob.dm index 048c073f39..199204721a 100644 --- a/code/modules/gamemaster/event2/events/engineering/blob.dm +++ b/code/modules/gamemaster/event2/events/engineering/blob.dm @@ -1,160 +1,160 @@ -/datum/event2/meta/blob - name = "blob" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_SECURITY, DEPARTMENT_MEDICAL) - chaos = 30 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT - event_class = "blob" // This makes it so there is no potential for multiple blob events of different types happening in the same round. - event_type = /datum/event2/event/blob - // In the distant future, if a mechanical skill system were to come into being, these vars could be replaced with skill checks so off duty people could count. - var/required_fighters = 2 // Fighters refers to engineering OR security. - var/required_support = 1 // Support refers to doctors AND roboticists, depending on fighter composition. - -/datum/event2/meta/blob/hard - name = "harder blob" - chaos = 40 - event_type = /datum/event2/event/blob/hard_blob - required_fighters = 3 - -/datum/event2/meta/blob/multi_blob - name = "multi blob" - chaos = 60 - event_type = /datum/event2/event/blob/multi_blob - required_fighters = 4 - required_support = 2 - -// For bussing only. -/datum/event2/meta/blob/omni_blob - name = "omni blob" - chaos = 200 - event_type = /datum/event2/event/blob/omni_blob - enabled = FALSE - -/datum/event2/meta/blob/get_weight() - // Count the 'fighters'. - var/list/engineers = metric.get_people_in_department(DEPARTMENT_ENGINEERING) - var/list/security = metric.get_people_in_department(DEPARTMENT_SECURITY) - - if(engineers.len + security.len < required_fighters) - return 0 - - // Now count the 'support'. - var/list/medical = metric.get_people_in_department(DEPARTMENT_MEDICAL) - var/need_medical = FALSE - - var/list/robotics = metric.get_people_with_job(/datum/job/roboticist) - var/need_robotics = FALSE - - // Determine what kind of support might be needed. - for(var/mob/living/L in engineers|security) - if(L.isSynthetic()) - need_robotics = TRUE - else - need_medical = TRUE - - // Medical is more important than robotics, since robits tend to not suffer slow deaths if there isn't a roboticist. - if(medical.len < required_support && need_medical) - return 0 - - // Engineers can sometimes fill in as robotics. This is done in the interest of the event having a chance of not being super rare. - // In the uncertain future, a mechanical skill system check could replace this check here. - if(robotics.len + engineers.len < required_support && need_robotics) - return 0 - - var/fighter_weight = (engineers.len + security.len) * 20 - var/support_weight = (medical.len + robotics.len) * 10 // Not counting engineers as support so they don't cause 30 weight each. - var/chaos_weight = chaos / 2 // Chaos is added as a weight in order to make more chaotic variants be preferred if they are allowed to be picked. - - return fighter_weight + support_weight + chaos_weight - - - -/datum/event2/event/blob - announce_delay_lower_bound = 1 MINUTE - announce_delay_upper_bound = 5 MINUTES - // This could be made into a GLOB accessible list for reuse if needed. - var/list/area/excluded = list( - /area/submap, - /area/shuttle, - /area/crew_quarters, - /area/holodeck, - /area/engineering/engine_room - ) - var/list/open_turfs = list() - var/spawn_blob_type = /obj/structure/blob/core/random_medium - var/number_of_blobs = 1 - var/list/blobs = list() // A list containing weakrefs to blob cores created. Weakrefs mean this event won't interfere with qdel. - -/datum/event2/event/blob/hard_blob - spawn_blob_type = /obj/structure/blob/core/random_hard - -/datum/event2/event/blob/multi_blob - spawn_blob_type = /obj/structure/blob/core/random_hard // Lethargic blobs are boring. - number_of_blobs = 2 - -// For adminbus only. -/datum/event2/event/blob/omni_blob - number_of_blobs = 16 // Someday maybe we can get this to specifically spawn every blob. - -/datum/event2/event/blob/set_up() - open_turfs = find_random_turfs(5 + number_of_blobs) - - if(!open_turfs.len) - log_debug("Blob infestation event: Giving up after failure to find blob spots.") - abort() - -/datum/event2/event/blob/start() - for(var/i = 1 to number_of_blobs) - var/turf/T = pick(open_turfs) - var/obj/structure/blob/core/new_blob = new spawn_blob_type(T) - blobs += WEAKREF(new_blob) - open_turfs -= T // So we can't put two cores on the same tile if doing multiblob. - log_debug("Spawned [new_blob.overmind.blob_type.name] blob at [get_area(new_blob)].") - -/datum/event2/event/blob/should_end() - for(var/datum/weakref/weakref as anything in blobs) - if(weakref.resolve()) // If the weakref is resolvable, that means the blob hasn't been deleted yet. - return FALSE - return TRUE // Only end if all blobs die. - -// Normally this does nothing, but is useful if aborted by an admin. -/datum/event2/event/blob/end() - for(var/datum/weakref/weakref as anything in blobs) - var/obj/structure/blob/core/B = weakref.resolve() - if(istype(B)) - qdel(B) - -/datum/event2/event/blob/announce() - if(!ended) // Don't announce if the blobs die early. - var/danger_level = 0 - var/list/blob_type_names = list() - var/multiblob = FALSE - for(var/datum/weakref/weakref as anything in blobs) - var/obj/structure/blob/core/B = weakref.resolve() - if(!istype(B)) - continue - var/datum/blob_type/blob_type = B.overmind.blob_type - - blob_type_names += blob_type.name - if(danger_level > blob_type.difficulty) // The highest difficulty is used, if multiple blobs are present. - danger_level = blob_type.difficulty - - if(blob_type_names.len > 1) // More than one blob is harder. - danger_level += blob_type_names.len - multiblob = TRUE - - var/list/lines = list() - lines += "Confirmed outbreak of level [7 + danger_level] biohazard[multiblob ? "s": ""] \ - aboard [location_name()]. All personnel must contain the outbreak." - - if(danger_level >= BLOB_DIFFICULTY_MEDIUM) // Tell them what kind of blob it is if it's tough. - lines += "The biohazard[multiblob ? "s have": " has"] been identified as [english_list(blob_type_names)]." - - if(danger_level >= BLOB_DIFFICULTY_HARD) // If it's really hard then tell them where it is so the response occurs faster. - var/turf/T = open_turfs[1] - var/area/A = T.loc - lines += "[multiblob ? "It is": "They are"] suspected to have originated from \the [A]." - - if(danger_level >= BLOB_DIFFICULTY_SUPERHARD) - lines += "Extreme caution is advised." - - command_announcement.Announce(lines.Join("\n"), "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') +/datum/event2/meta/blob + name = "blob" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_SECURITY, DEPARTMENT_MEDICAL) + chaos = 30 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT + event_class = "blob" // This makes it so there is no potential for multiple blob events of different types happening in the same round. + event_type = /datum/event2/event/blob + // In the distant future, if a mechanical skill system were to come into being, these vars could be replaced with skill checks so off duty people could count. + var/required_fighters = 2 // Fighters refers to engineering OR security. + var/required_support = 1 // Support refers to doctors AND roboticists, depending on fighter composition. + +/datum/event2/meta/blob/hard + name = "harder blob" + chaos = 40 + event_type = /datum/event2/event/blob/hard_blob + required_fighters = 3 + +/datum/event2/meta/blob/multi_blob + name = "multi blob" + chaos = 60 + event_type = /datum/event2/event/blob/multi_blob + required_fighters = 4 + required_support = 2 + +// For bussing only. +/datum/event2/meta/blob/omni_blob + name = "omni blob" + chaos = 200 + event_type = /datum/event2/event/blob/omni_blob + enabled = FALSE + +/datum/event2/meta/blob/get_weight() + // Count the 'fighters'. + var/list/engineers = metric.get_people_in_department(DEPARTMENT_ENGINEERING) + var/list/security = metric.get_people_in_department(DEPARTMENT_SECURITY) + + if(engineers.len + security.len < required_fighters) + return 0 + + // Now count the 'support'. + var/list/medical = metric.get_people_in_department(DEPARTMENT_MEDICAL) + var/need_medical = FALSE + + var/list/robotics = metric.get_people_with_job(/datum/job/roboticist) + var/need_robotics = FALSE + + // Determine what kind of support might be needed. + for(var/mob/living/L in engineers|security) + if(L.isSynthetic()) + need_robotics = TRUE + else + need_medical = TRUE + + // Medical is more important than robotics, since robits tend to not suffer slow deaths if there isn't a roboticist. + if(medical.len < required_support && need_medical) + return 0 + + // Engineers can sometimes fill in as robotics. This is done in the interest of the event having a chance of not being super rare. + // In the uncertain future, a mechanical skill system check could replace this check here. + if(robotics.len + engineers.len < required_support && need_robotics) + return 0 + + var/fighter_weight = (engineers.len + security.len) * 20 + var/support_weight = (medical.len + robotics.len) * 10 // Not counting engineers as support so they don't cause 30 weight each. + var/chaos_weight = chaos / 2 // Chaos is added as a weight in order to make more chaotic variants be preferred if they are allowed to be picked. + + return fighter_weight + support_weight + chaos_weight + + + +/datum/event2/event/blob + announce_delay_lower_bound = 1 MINUTE + announce_delay_upper_bound = 5 MINUTES + // This could be made into a GLOB accessible list for reuse if needed. + var/list/area/excluded = list( + /area/submap, + /area/shuttle, + /area/crew_quarters, + /area/holodeck, + /area/engineering/engine_room + ) + var/list/open_turfs = list() + var/spawn_blob_type = /obj/structure/blob/core/random_medium + var/number_of_blobs = 1 + var/list/blobs = list() // A list containing weakrefs to blob cores created. Weakrefs mean this event won't interfere with qdel. + +/datum/event2/event/blob/hard_blob + spawn_blob_type = /obj/structure/blob/core/random_hard + +/datum/event2/event/blob/multi_blob + spawn_blob_type = /obj/structure/blob/core/random_hard // Lethargic blobs are boring. + number_of_blobs = 2 + +// For adminbus only. +/datum/event2/event/blob/omni_blob + number_of_blobs = 16 // Someday maybe we can get this to specifically spawn every blob. + +/datum/event2/event/blob/set_up() + open_turfs = find_random_turfs(5 + number_of_blobs) + + if(!open_turfs.len) + log_debug("Blob infestation event: Giving up after failure to find blob spots.") + abort() + +/datum/event2/event/blob/start() + for(var/i = 1 to number_of_blobs) + var/turf/T = pick(open_turfs) + var/obj/structure/blob/core/new_blob = new spawn_blob_type(T) + blobs += WEAKREF(new_blob) + open_turfs -= T // So we can't put two cores on the same tile if doing multiblob. + log_debug("Spawned [new_blob.overmind.blob_type.name] blob at [get_area(new_blob)].") + +/datum/event2/event/blob/should_end() + for(var/datum/weakref/weakref as anything in blobs) + if(weakref.resolve()) // If the weakref is resolvable, that means the blob hasn't been deleted yet. + return FALSE + return TRUE // Only end if all blobs die. + +// Normally this does nothing, but is useful if aborted by an admin. +/datum/event2/event/blob/end() + for(var/datum/weakref/weakref as anything in blobs) + var/obj/structure/blob/core/B = weakref.resolve() + if(istype(B)) + qdel(B) + +/datum/event2/event/blob/announce() + if(!ended) // Don't announce if the blobs die early. + var/danger_level = 0 + var/list/blob_type_names = list() + var/multiblob = FALSE + for(var/datum/weakref/weakref as anything in blobs) + var/obj/structure/blob/core/B = weakref.resolve() + if(!istype(B)) + continue + var/datum/blob_type/blob_type = B.overmind.blob_type + + blob_type_names += blob_type.name + if(danger_level > blob_type.difficulty) // The highest difficulty is used, if multiple blobs are present. + danger_level = blob_type.difficulty + + if(blob_type_names.len > 1) // More than one blob is harder. + danger_level += blob_type_names.len + multiblob = TRUE + + var/list/lines = list() + lines += "Confirmed outbreak of level [7 + danger_level] biohazard[multiblob ? "s": ""] \ + aboard [location_name()]. All personnel must contain the outbreak." + + if(danger_level >= BLOB_DIFFICULTY_MEDIUM) // Tell them what kind of blob it is if it's tough. + lines += "The biohazard[multiblob ? "s have": " has"] been identified as [english_list(blob_type_names)]." + + if(danger_level >= BLOB_DIFFICULTY_HARD) // If it's really hard then tell them where it is so the response occurs faster. + var/turf/T = open_turfs[1] + var/area/A = T.loc + lines += "[multiblob ? "It is": "They are"] suspected to have originated from \the [A]." + + if(danger_level >= BLOB_DIFFICULTY_SUPERHARD) + lines += "Extreme caution is advised." + + command_announcement.Announce(lines.Join("\n"), "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') diff --git a/code/modules/gamemaster/event2/events/engineering/brand_intelligence.dm b/code/modules/gamemaster/event2/events/engineering/brand_intelligence.dm index d3478bb333..b4c58fa0ac 100644 --- a/code/modules/gamemaster/event2/events/engineering/brand_intelligence.dm +++ b/code/modules/gamemaster/event2/events/engineering/brand_intelligence.dm @@ -1,90 +1,90 @@ -/datum/event2/meta/brand_intelligence - name = "vending machine malware" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_EVERYONE) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/brand_intelligence - -/datum/event2/meta/brand_intelligence/get_weight() - return 10 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) - - - -/datum/event2/event/brand_intelligence - var/malware_spread_cooldown = 30 SECONDS - - var/list/vending_machines = list() // List of venders that can potentially be infected. - var/list/infected_vending_machines = list() // List of venders that have been infected. - var/obj/machinery/vending/vender_zero = null // The first vending machine infected. If that one gets fixed, all other infected machines will be cured. - var/last_malware_spread_time = null - -/datum/event2/event/brand_intelligence/set_up() - for(var/obj/machinery/vending/V in machines) - if(!(V.z in using_map.station_levels)) - continue - vending_machines += V - - if(!vending_machines.len) - log_debug("Could not find any vending machines on station Z levels. Aborting.") - abort() - return - - vender_zero = pick(vending_machines) - -/datum/event2/event/brand_intelligence/announce() - if(prob(90)) - command_announcement.Announce("An ongoing mass upload of malware for vendors has been detected onboard \the [location_name()], \ - which appears to transmit to nearby vendors. The original infected machine is believed to be \a [vender_zero].", "Vendor Service Alert") - -/datum/event2/event/brand_intelligence/start() - infect_vender(vender_zero) - -/datum/event2/event/brand_intelligence/event_tick() - if(last_malware_spread_time + malware_spread_cooldown > world.time) - return // Still on cooldown. - last_malware_spread_time = world.time - - if(vending_machines.len) - var/next_victim = pick(vending_machines) - infect_vender(next_victim) - - // Every time Vender Zero infects, it says something. - vender_zero.speak(pick("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obsession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) - - -/datum/event2/event/brand_intelligence/should_end() - if(!vending_machines.len) - return TRUE - if(!can_propagate(vender_zero)) - return TRUE - return FALSE - -/datum/event2/event/brand_intelligence/end() - if(can_propagate(vender_zero)) // The crew failed and all the machines are infected! - return - // Otherwise Vender Zero was taken out in some form. - if(vender_zero) - vender_zero.visible_message(span("notice", "\The [vender_zero]'s network activity light flickers wildly \ - for a few seconds as a small screen reads: 'Rolling out firmware reset to networked machines'.")) - for(var/obj/machinery/vending/vender in infected_vending_machines) - cure_vender(vender) - -/datum/event2/event/brand_intelligence/proc/infect_vender(obj/machinery/vending/V) - vending_machines -= V - infected_vending_machines += V - V.shut_up = FALSE - V.shoot_inventory = TRUE - -/datum/event2/event/brand_intelligence/proc/cure_vender(obj/machinery/vending/V) - infected_vending_machines -= V - V.shut_up = TRUE - V.shoot_inventory = FALSE - -/datum/event2/event/brand_intelligence/proc/can_propagate(obj/machinery/vending/V) - return V && V.shut_up == FALSE +/datum/event2/meta/brand_intelligence + name = "vending machine malware" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_EVERYONE) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/brand_intelligence + +/datum/event2/meta/brand_intelligence/get_weight() + return 10 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) + + + +/datum/event2/event/brand_intelligence + var/malware_spread_cooldown = 30 SECONDS + + var/list/vending_machines = list() // List of venders that can potentially be infected. + var/list/infected_vending_machines = list() // List of venders that have been infected. + var/obj/machinery/vending/vender_zero = null // The first vending machine infected. If that one gets fixed, all other infected machines will be cured. + var/last_malware_spread_time = null + +/datum/event2/event/brand_intelligence/set_up() + for(var/obj/machinery/vending/V in machines) + if(!(V.z in using_map.station_levels)) + continue + vending_machines += V + + if(!vending_machines.len) + log_debug("Could not find any vending machines on station Z levels. Aborting.") + abort() + return + + vender_zero = pick(vending_machines) + +/datum/event2/event/brand_intelligence/announce() + if(prob(90)) + command_announcement.Announce("An ongoing mass upload of malware for vendors has been detected onboard \the [location_name()], \ + which appears to transmit to nearby vendors. The original infected machine is believed to be \a [vender_zero].", "Vendor Service Alert") + +/datum/event2/event/brand_intelligence/start() + infect_vender(vender_zero) + +/datum/event2/event/brand_intelligence/event_tick() + if(last_malware_spread_time + malware_spread_cooldown > world.time) + return // Still on cooldown. + last_malware_spread_time = world.time + + if(vending_machines.len) + var/next_victim = pick(vending_machines) + infect_vender(next_victim) + + // Every time Vender Zero infects, it says something. + vender_zero.speak(pick("Try our aggressive new marketing strategies!", \ + "You should buy products to feed your lifestyle obsession!", \ + "Consume!", \ + "Your money can buy happiness!", \ + "Engage direct marketing!", \ + "Advertising is legalized lying! But don't let that put you off our great deals!", \ + "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) + + +/datum/event2/event/brand_intelligence/should_end() + if(!vending_machines.len) + return TRUE + if(!can_propagate(vender_zero)) + return TRUE + return FALSE + +/datum/event2/event/brand_intelligence/end() + if(can_propagate(vender_zero)) // The crew failed and all the machines are infected! + return + // Otherwise Vender Zero was taken out in some form. + if(vender_zero) + vender_zero.visible_message(span("notice", "\The [vender_zero]'s network activity light flickers wildly \ + for a few seconds as a small screen reads: 'Rolling out firmware reset to networked machines'.")) + for(var/obj/machinery/vending/vender in infected_vending_machines) + cure_vender(vender) + +/datum/event2/event/brand_intelligence/proc/infect_vender(obj/machinery/vending/V) + vending_machines -= V + infected_vending_machines += V + V.shut_up = FALSE + V.shoot_inventory = TRUE + +/datum/event2/event/brand_intelligence/proc/cure_vender(obj/machinery/vending/V) + infected_vending_machines -= V + V.shut_up = TRUE + V.shoot_inventory = FALSE + +/datum/event2/event/brand_intelligence/proc/can_propagate(obj/machinery/vending/V) + return V && V.shut_up == FALSE diff --git a/code/modules/gamemaster/event2/events/engineering/camera_damage.dm b/code/modules/gamemaster/event2/events/engineering/camera_damage.dm index c6c1516130..bdaedad73b 100644 --- a/code/modules/gamemaster/event2/events/engineering/camera_damage.dm +++ b/code/modules/gamemaster/event2/events/engineering/camera_damage.dm @@ -1,41 +1,41 @@ -/datum/event2/meta/camera_damage - name = "random camera damage" - departments = list(DEPARTMENT_SYNTHETIC, DEPARTMENT_ENGINEERING) - chaos = 5 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/camera_damage - -/datum/event2/meta/camera_damage/get_weight() - return 30 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) + (metric.count_people_in_department(DEPARTMENT_SYNTHETIC) * 40) - -/datum/event2/event/camera_damage - var/camera_range = 7 - -/datum/event2/event/camera_damage/start() - var/obj/machinery/camera/C = acquire_random_camera() - if(!C) - return - - for(var/obj/machinery/camera/cam in range(camera_range, C)) - if(is_valid_camera(cam)) - cam.wires.cut(WIRE_MAIN_POWER1) - if(prob(25)) - cam.wires.cut(WIRE_CAM_ALARM) - -/datum/event2/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) - if(!cameranet.cameras.len) - return - if(!remaining_attempts) - return - - var/obj/machinery/camera/C = pick(cameranet.cameras) - if(is_valid_camera(C)) - return C - // It is very important to use --var and not var-- for recursive calls, as var-- will cause an infinite loop. - return acquire_random_camera(--remaining_attempts) - -/datum/event2/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C) - // Only return a functional camera, not installed in a silicon/hardsuit/circuit/etc, and that exists somewhere players have access - var/turf/T = get_turf(C) +/datum/event2/meta/camera_damage + name = "random camera damage" + departments = list(DEPARTMENT_SYNTHETIC, DEPARTMENT_ENGINEERING) + chaos = 5 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/camera_damage + +/datum/event2/meta/camera_damage/get_weight() + return 30 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) + (metric.count_people_in_department(DEPARTMENT_SYNTHETIC) * 40) + +/datum/event2/event/camera_damage + var/camera_range = 7 + +/datum/event2/event/camera_damage/start() + var/obj/machinery/camera/C = acquire_random_camera() + if(!C) + return + + for(var/obj/machinery/camera/cam in range(camera_range, C)) + if(is_valid_camera(cam)) + cam.wires.cut(WIRE_MAIN_POWER1) + if(prob(25)) + cam.wires.cut(WIRE_CAM_ALARM) + +/datum/event2/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) + if(!cameranet.cameras.len) + return + if(!remaining_attempts) + return + + var/obj/machinery/camera/C = pick(cameranet.cameras) + if(is_valid_camera(C)) + return C + // It is very important to use --var and not var-- for recursive calls, as var-- will cause an infinite loop. + return acquire_random_camera(--remaining_attempts) + +/datum/event2/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C) + // Only return a functional camera, not installed in a silicon/hardsuit/circuit/etc, and that exists somewhere players have access + var/turf/T = get_turf(C) return T && C?.can_use() && istype(C.loc, /turf) && (T.z in using_map.player_levels) \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/engineering/canister_leak.dm b/code/modules/gamemaster/event2/events/engineering/canister_leak.dm index a48823151c..db8eedf25c 100644 --- a/code/modules/gamemaster/event2/events/engineering/canister_leak.dm +++ b/code/modules/gamemaster/event2/events/engineering/canister_leak.dm @@ -1,26 +1,26 @@ -// -// This event chooses a random canister on player levels and breaks it, releasing its contents! -// - -/datum/event2/meta/canister_leak - name = "canister leak" - departments = list(DEPARTMENT_ENGINEERING) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/canister_leak - -/datum/event2/meta/canister_leak/get_weight() - return metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 30 - -/datum/event2/event/canister_leak/start() - // List of all non-destroyed canisters on station levels - var/list/all_canisters = list() - for(var/obj/machinery/portable_atmospherics/canister/C in machines) - if(!C.destroyed && (C.z in using_map.station_levels) && C.air_contents.total_moles >= MOLES_CELLSTANDARD) - all_canisters += C - var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) - log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") - C.health = 0 - C.healthcheck() - +// +// This event chooses a random canister on player levels and breaks it, releasing its contents! +// + +/datum/event2/meta/canister_leak + name = "canister leak" + departments = list(DEPARTMENT_ENGINEERING) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/canister_leak + +/datum/event2/meta/canister_leak/get_weight() + return metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 30 + +/datum/event2/event/canister_leak/start() + // List of all non-destroyed canisters on station levels + var/list/all_canisters = list() + for(var/obj/machinery/portable_atmospherics/canister/C in machines) + if(!C.destroyed && (C.z in using_map.station_levels) && C.air_contents.total_moles >= MOLES_CELLSTANDARD) + all_canisters += C + var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) + log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") + C.health = 0 + C.healthcheck() + diff --git a/code/modules/gamemaster/event2/events/engineering/dust.dm b/code/modules/gamemaster/event2/events/engineering/dust.dm index 1a26118fbc..66bb04970d 100644 --- a/code/modules/gamemaster/event2/events/engineering/dust.dm +++ b/code/modules/gamemaster/event2/events/engineering/dust.dm @@ -1,19 +1,19 @@ -/datum/event2/meta/dust - name = "dust" - departments = list(DEPARTMENT_ENGINEERING) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/dust - -/datum/event2/meta/dust/get_weight() - return metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20 - - - -/datum/event2/event/dust/announce() - if(prob(33)) - command_announcement.Announce("Dust has been detected on a collision course with \the [location_name()].") - -/datum/event2/event/dust/start() - dust_swarm("norm") +/datum/event2/meta/dust + name = "dust" + departments = list(DEPARTMENT_ENGINEERING) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/dust + +/datum/event2/meta/dust/get_weight() + return metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20 + + + +/datum/event2/event/dust/announce() + if(prob(33)) + command_announcement.Announce("Dust has been detected on a collision course with \the [location_name()].") + +/datum/event2/event/dust/start() + dust_swarm("norm") diff --git a/code/modules/gamemaster/event2/events/engineering/gas_leak.dm b/code/modules/gamemaster/event2/events/engineering/gas_leak.dm index b0c52d6e07..b7becd5637 100644 --- a/code/modules/gamemaster/event2/events/engineering/gas_leak.dm +++ b/code/modules/gamemaster/event2/events/engineering/gas_leak.dm @@ -1,47 +1,47 @@ -/datum/event2/meta/gas_leak - name = "gas leak" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_SYNTHETIC) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/gas_leak - -/datum/event2/meta/gas_leak/get_weight() - // Synthetics are counted in higher value because they can wirelessly connect to alarms. - var/engineering_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 - var/synthetic_factor = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) * 30 - return (15 + engineering_factor + synthetic_factor) / (times_ran + 1) - - - -/datum/event2/event/gas_leak - var/potential_gas_choices = list("carbon_dioxide", "nitrous_oxide", "phoron", "volatile_fuel") - var/chosen_gas = null - var/turf/chosen_turf = null - -/datum/event2/event/gas_leak/set_up() - chosen_gas = pick(potential_gas_choices) - - var/list/turfs = find_random_turfs() - if(!turfs.len) - log_debug("Gas Leak event failed to find any available turfs to leak into. Aborting.") - abort() - return - chosen_turf = pick(turfs) - -/datum/event2/event/gas_leak/announce() - if(chosen_turf) - command_announcement.Announce("Warning, hazardous [lowertext(gas_data.name[chosen_gas])] gas leak detected in \the [chosen_turf.loc], evacuate the area.", "Hazard Alert") - -/datum/event2/event/gas_leak/start() - // Okay, time to actually put the gas in the room! - // TODO - Would be nice to break a waste pipe perhaps? - // TODO - Maybe having it released from a single point and thus causing airflow to blow stuff around - - // Fow now just add a bunch of it to the air - - var/datum/gas_mixture/air_contents = new - air_contents.temperature = T20C + rand(-50, 50) - air_contents.gas[chosen_gas] = 10 * MOLES_CELLSTANDARD - chosen_turf.assume_air(air_contents) +/datum/event2/meta/gas_leak + name = "gas leak" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_SYNTHETIC) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/gas_leak + +/datum/event2/meta/gas_leak/get_weight() + // Synthetics are counted in higher value because they can wirelessly connect to alarms. + var/engineering_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 + var/synthetic_factor = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) * 30 + return (15 + engineering_factor + synthetic_factor) / (times_ran + 1) + + + +/datum/event2/event/gas_leak + var/potential_gas_choices = list("carbon_dioxide", "nitrous_oxide", "phoron", "volatile_fuel") + var/chosen_gas = null + var/turf/chosen_turf = null + +/datum/event2/event/gas_leak/set_up() + chosen_gas = pick(potential_gas_choices) + + var/list/turfs = find_random_turfs() + if(!turfs.len) + log_debug("Gas Leak event failed to find any available turfs to leak into. Aborting.") + abort() + return + chosen_turf = pick(turfs) + +/datum/event2/event/gas_leak/announce() + if(chosen_turf) + command_announcement.Announce("Warning, hazardous [lowertext(gas_data.name[chosen_gas])] gas leak detected in \the [chosen_turf.loc], evacuate the area.", "Hazard Alert") + +/datum/event2/event/gas_leak/start() + // Okay, time to actually put the gas in the room! + // TODO - Would be nice to break a waste pipe perhaps? + // TODO - Maybe having it released from a single point and thus causing airflow to blow stuff around + + // Fow now just add a bunch of it to the air + + var/datum/gas_mixture/air_contents = new + air_contents.temperature = T20C + rand(-50, 50) + air_contents.gas[chosen_gas] = 10 * MOLES_CELLSTANDARD + chosen_turf.assume_air(air_contents) playsound(chosen_turf, 'sound/effects/smoke.ogg', 75, 1) \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/engineering/grid_check.dm b/code/modules/gamemaster/event2/events/engineering/grid_check.dm index b4ae7976b6..8c120fb62b 100644 --- a/code/modules/gamemaster/event2/events/engineering/grid_check.dm +++ b/code/modules/gamemaster/event2/events/engineering/grid_check.dm @@ -1,50 +1,50 @@ -// New grid check event: -// Very similar to the old one, power goes out in most of the station, however the new feature is the ability for engineering to -// get power back on sooner, if they are able to reach a special machine and initiate a manual reboot. If no one is able to do so, -// it will reboot itself after a few minutes, just like the old one. Bad things happen if there is no grid checker machine protecting -// the powernet when this event fires. - -/datum/event2/meta/grid_check - name = "grid check" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_EVERYONE) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/grid_check - -// Having the turbines be way over their rated limit makes grid checks more likely. -/datum/event2/meta/grid_check/proc/get_overpower() - var/highest_overpower = 0 - for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) - var/overpower = max((turbine.effective_gen / turbine.max_power) - 1, 0) - if(overpower > highest_overpower) - highest_overpower = overpower - return highest_overpower - -/datum/event2/meta/grid_check/get_weight() - var/population_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 - var/overpower_factor = 50 * get_overpower() // Will be 0 if not overloaded at all, and 50 if turbines are outputting twice as much as rated. - return (20 + population_factor + overpower_factor) / (times_ran + 1) - - - -/datum/event2/event/grid_check - var/obj/machinery/power/generator/engine // The turbine that will send a power spike. - -/datum/event2/event/grid_check/set_up() - // Find the turbine being pushed the most. - var/obj/machinery/power/generator/most_stressed_turbine = null - for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) - if(!most_stressed_turbine) - most_stressed_turbine = turbine - else if(turbine.effective_gen > most_stressed_turbine.effective_gen) - most_stressed_turbine = turbine - engine = most_stressed_turbine - -/datum/event2/event/grid_check/start() - // This sets off a chain of events that lead to the actual grid check (or perhaps worse). - // First, the Supermatter engine makes a power spike. - if(engine) - engine.power_spike() - // After that, the engine checks if a grid checker exists on the same powernet, and if so, it triggers a blackout. - // If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code. +// New grid check event: +// Very similar to the old one, power goes out in most of the station, however the new feature is the ability for engineering to +// get power back on sooner, if they are able to reach a special machine and initiate a manual reboot. If no one is able to do so, +// it will reboot itself after a few minutes, just like the old one. Bad things happen if there is no grid checker machine protecting +// the powernet when this event fires. + +/datum/event2/meta/grid_check + name = "grid check" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_EVERYONE) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/grid_check + +// Having the turbines be way over their rated limit makes grid checks more likely. +/datum/event2/meta/grid_check/proc/get_overpower() + var/highest_overpower = 0 + for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) + var/overpower = max((turbine.effective_gen / turbine.max_power) - 1, 0) + if(overpower > highest_overpower) + highest_overpower = overpower + return highest_overpower + +/datum/event2/meta/grid_check/get_weight() + var/population_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 + var/overpower_factor = 50 * get_overpower() // Will be 0 if not overloaded at all, and 50 if turbines are outputting twice as much as rated. + return (20 + population_factor + overpower_factor) / (times_ran + 1) + + + +/datum/event2/event/grid_check + var/obj/machinery/power/generator/engine // The turbine that will send a power spike. + +/datum/event2/event/grid_check/set_up() + // Find the turbine being pushed the most. + var/obj/machinery/power/generator/most_stressed_turbine = null + for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) + if(!most_stressed_turbine) + most_stressed_turbine = turbine + else if(turbine.effective_gen > most_stressed_turbine.effective_gen) + most_stressed_turbine = turbine + engine = most_stressed_turbine + +/datum/event2/event/grid_check/start() + // This sets off a chain of events that lead to the actual grid check (or perhaps worse). + // First, the Supermatter engine makes a power spike. + if(engine) + engine.power_spike() + // After that, the engine checks if a grid checker exists on the same powernet, and if so, it triggers a blackout. + // If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code. diff --git a/code/modules/gamemaster/event2/events/engineering/meteor_defense.dm b/code/modules/gamemaster/event2/events/engineering/meteor_defense.dm index 378c6b42fe..f0b11b7e1e 100644 --- a/code/modules/gamemaster/event2/events/engineering/meteor_defense.dm +++ b/code/modules/gamemaster/event2/events/engineering/meteor_defense.dm @@ -1,83 +1,83 @@ -// This event gives the station an advance warning about meteors, so that they can prepare in various ways. - -/datum/event2/meta/meteor_defense - name = "meteor defense" - departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_CARGO) - chaos = 50 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT - event_class = "meteor defense" - event_type = /datum/event2/event/meteor_defense - -/datum/event2/meta/meteor_defense/get_weight() - // Engineers count as 20. - var/engineers = metric.count_people_in_department(DEPARTMENT_ENGINEERING) - if(engineers < 3) // There -must- be at least three engineers for this to be possible. - return 0 - - . = engineers * 20 - - // Cargo and AI/borgs count as 10. - var/cargo = metric.count_people_with_job(/datum/job/cargo_tech) + metric.count_people_with_job(/datum/job/qm) - var/bots = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) - - . += (cargo + bots) * 10 - - -/datum/event2/event/meteor_defense - start_delay_lower_bound = 10 MINUTES - start_delay_upper_bound = 15 MINUTES - var/soon_announced = FALSE - var/direction = null // Actual dir used for which side the meteors come from. - var/dir_text = null // Direction shown in the announcement. - var/list/meteor_types = null - var/waves = null // How many times to send meteors. - var/last_wave_time = null // world.time of latest wave. - var/wave_delay = 10 SECONDS - var/wave_upper_bound = 8 // Max amount of meteors per wave. - var/wave_lower_bound = 4 // Min amount. - -/datum/event2/event/meteor_defense/proc/set_meteor_types() - meteor_types = meteors_threatening.Copy() - -/datum/event2/event/meteor_defense/set_up() - direction = pick(cardinal) // alldirs doesn't work with current meteor code unfortunately. - waves = rand(3, 6) - switch(direction) - if(NORTH) - dir_text = "aft" // For some reason this is needed. - if(SOUTH) - dir_text = "fore" - if(EAST) - dir_text = "port" - if(WEST) - dir_text = "starboard" - set_meteor_types() - -/datum/event2/event/meteor_defense/announce() - var/announcement = "Meteors are expected to approach from the [dir_text] side, in approximately [DisplayTimeText(time_to_start - world.time, 60)]." - command_announcement.Announce(announcement, "Meteor Alert", new_sound = 'sound/AI/meteors.ogg') - -/datum/event2/event/meteor_defense/wait_tick() - if(!soon_announced) - if((time_to_start - world.time) <= 5 MINUTES) - soon_announced = TRUE - var/announcement = "The incoming meteors are expected to approach from the [dir_text] side. \ - ETA to arrival is approximately [DisplayTimeText(time_to_start - world.time, 60)]." - command_announcement.Announce(announcement, "Meteor Alert - Update") - -/datum/event2/event/meteor_defense/start() - command_announcement.Announce("Incoming meteors approach from \the [dir_text] side!", "Meteor Alert - Update") - -/datum/event2/event/meteor_defense/event_tick() - if(world.time > last_wave_time + wave_delay) - last_wave_time = world.time - waves-- - message_admins("[waves] more wave\s of meteors remain.") - // Dir is reversed because the direction describes where meteors are going, not what side it's gonna hit. - spawn_meteors(rand(wave_upper_bound, wave_lower_bound), meteor_types, reverse_dir[direction]) - -/datum/event2/event/meteor_defense/should_end() - return waves <= 0 - -/datum/event2/event/meteor_defense/end() - command_announcement.Announce("\The [location_name()] will clear the incoming meteors in a moment.", "Meteor Alert - Update") +// This event gives the station an advance warning about meteors, so that they can prepare in various ways. + +/datum/event2/meta/meteor_defense + name = "meteor defense" + departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_CARGO) + chaos = 50 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT + event_class = "meteor defense" + event_type = /datum/event2/event/meteor_defense + +/datum/event2/meta/meteor_defense/get_weight() + // Engineers count as 20. + var/engineers = metric.count_people_in_department(DEPARTMENT_ENGINEERING) + if(engineers < 3) // There -must- be at least three engineers for this to be possible. + return 0 + + . = engineers * 20 + + // Cargo and AI/borgs count as 10. + var/cargo = metric.count_people_with_job(/datum/job/cargo_tech) + metric.count_people_with_job(/datum/job/qm) + var/bots = metric.count_people_in_department(DEPARTMENT_SYNTHETIC) + + . += (cargo + bots) * 10 + + +/datum/event2/event/meteor_defense + start_delay_lower_bound = 10 MINUTES + start_delay_upper_bound = 15 MINUTES + var/soon_announced = FALSE + var/direction = null // Actual dir used for which side the meteors come from. + var/dir_text = null // Direction shown in the announcement. + var/list/meteor_types = null + var/waves = null // How many times to send meteors. + var/last_wave_time = null // world.time of latest wave. + var/wave_delay = 10 SECONDS + var/wave_upper_bound = 8 // Max amount of meteors per wave. + var/wave_lower_bound = 4 // Min amount. + +/datum/event2/event/meteor_defense/proc/set_meteor_types() + meteor_types = meteors_threatening.Copy() + +/datum/event2/event/meteor_defense/set_up() + direction = pick(cardinal) // alldirs doesn't work with current meteor code unfortunately. + waves = rand(3, 6) + switch(direction) + if(NORTH) + dir_text = "aft" // For some reason this is needed. + if(SOUTH) + dir_text = "fore" + if(EAST) + dir_text = "port" + if(WEST) + dir_text = "starboard" + set_meteor_types() + +/datum/event2/event/meteor_defense/announce() + var/announcement = "Meteors are expected to approach from the [dir_text] side, in approximately [DisplayTimeText(time_to_start - world.time, 60)]." + command_announcement.Announce(announcement, "Meteor Alert", new_sound = 'sound/AI/meteors.ogg') + +/datum/event2/event/meteor_defense/wait_tick() + if(!soon_announced) + if((time_to_start - world.time) <= 5 MINUTES) + soon_announced = TRUE + var/announcement = "The incoming meteors are expected to approach from the [dir_text] side. \ + ETA to arrival is approximately [DisplayTimeText(time_to_start - world.time, 60)]." + command_announcement.Announce(announcement, "Meteor Alert - Update") + +/datum/event2/event/meteor_defense/start() + command_announcement.Announce("Incoming meteors approach from \the [dir_text] side!", "Meteor Alert - Update") + +/datum/event2/event/meteor_defense/event_tick() + if(world.time > last_wave_time + wave_delay) + last_wave_time = world.time + waves-- + message_admins("[waves] more wave\s of meteors remain.") + // Dir is reversed because the direction describes where meteors are going, not what side it's gonna hit. + spawn_meteors(rand(wave_upper_bound, wave_lower_bound), meteor_types, reverse_dir[direction]) + +/datum/event2/event/meteor_defense/should_end() + return waves <= 0 + +/datum/event2/event/meteor_defense/end() + command_announcement.Announce("\The [location_name()] will clear the incoming meteors in a moment.", "Meteor Alert - Update") diff --git a/code/modules/gamemaster/event2/events/engineering/spacevine.dm b/code/modules/gamemaster/event2/events/engineering/spacevine.dm index 6620e67a0c..53fc9fd5bb 100644 --- a/code/modules/gamemaster/event2/events/engineering/spacevine.dm +++ b/code/modules/gamemaster/event2/events/engineering/spacevine.dm @@ -1,17 +1,17 @@ -/datum/event2/meta/spacevine - name = "space-vine infestation" - departments = list(DEPARTMENT_ENGINEERING) - chaos = 10 // There's a really rare chance of vines getting something awful like phoron atmosphere but thats not really controllable. - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/spacevine - -/datum/event2/meta/spacevine/get_weight() - return 20 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10) + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5) - - - -/datum/event2/event/spacevine/announce() - level_seven_announcement() - -/datum/event2/event/spacevine/start() - spacevine_infestation() +/datum/event2/meta/spacevine + name = "space-vine infestation" + departments = list(DEPARTMENT_ENGINEERING) + chaos = 10 // There's a really rare chance of vines getting something awful like phoron atmosphere but thats not really controllable. + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/spacevine + +/datum/event2/meta/spacevine/get_weight() + return 20 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10) + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5) + + + +/datum/event2/event/spacevine/announce() + level_seven_announcement() + +/datum/event2/event/spacevine/start() + spacevine_infestation() diff --git a/code/modules/gamemaster/event2/events/engineering/wallrot.dm b/code/modules/gamemaster/event2/events/engineering/wallrot.dm index 29d12c8524..9542c12d38 100644 --- a/code/modules/gamemaster/event2/events/engineering/wallrot.dm +++ b/code/modules/gamemaster/event2/events/engineering/wallrot.dm @@ -1,46 +1,46 @@ -/datum/event2/meta/wallrot - name = "wall-rot" - departments = list(DEPARTMENT_ENGINEERING) - reusable = TRUE - event_type = /datum/event2/event/wallrot - -/datum/event2/meta/wallrot/get_weight() - return (10 + metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10) / (times_ran + 1) - - - - -/datum/event2/event/wallrot - var/turf/simulated/wall/origin = null - -/datum/event2/event/wallrot/set_up() - for(var/i = 1 to 100) - var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), pick(get_location_z_levels()) ) - if(istype(candidate, /turf/simulated/wall)) - origin = candidate - log_debug("Wall-rot event has chosen \the [origin] ([origin.loc]) as the origin for the wallrot infestation.") - return - - log_debug("Wall-rot event failed to find a valid wall after one hundred tries. Aborting.") - abort() - -/datum/event2/event/wallrot/announce() - if(origin && prob(80)) - command_announcement.Announce("Harmful fungi detected on \the [location_name()], near \the [origin.loc]. \ - Station structural integrity may be compromised.", "Biohazard Alert") - -/datum/event2/event/wallrot/start() - if(origin) - origin.rot() - - var/rot_count = 0 - var/target_rot = rand(5, 20) - for(var/turf/simulated/wall/W in range(7, origin)) - if(prob(50)) - if(W.rot()) - rot_count++ - if(rot_count >= target_rot) - break - - - +/datum/event2/meta/wallrot + name = "wall-rot" + departments = list(DEPARTMENT_ENGINEERING) + reusable = TRUE + event_type = /datum/event2/event/wallrot + +/datum/event2/meta/wallrot/get_weight() + return (10 + metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10) / (times_ran + 1) + + + + +/datum/event2/event/wallrot + var/turf/simulated/wall/origin = null + +/datum/event2/event/wallrot/set_up() + for(var/i = 1 to 100) + var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), pick(get_location_z_levels()) ) + if(istype(candidate, /turf/simulated/wall)) + origin = candidate + log_debug("Wall-rot event has chosen \the [origin] ([origin.loc]) as the origin for the wallrot infestation.") + return + + log_debug("Wall-rot event failed to find a valid wall after one hundred tries. Aborting.") + abort() + +/datum/event2/event/wallrot/announce() + if(origin && prob(80)) + command_announcement.Announce("Harmful fungi detected on \the [location_name()], near \the [origin.loc]. \ + Station structural integrity may be compromised.", "Biohazard Alert") + +/datum/event2/event/wallrot/start() + if(origin) + origin.rot() + + var/rot_count = 0 + var/target_rot = rand(5, 20) + for(var/turf/simulated/wall/W in range(7, origin)) + if(prob(50)) + if(W.rot()) + rot_count++ + if(rot_count >= target_rot) + break + + + diff --git a/code/modules/gamemaster/event2/events/engineering/window_break.dm b/code/modules/gamemaster/event2/events/engineering/window_break.dm index 7aea410d45..6b9d153a1e 100644 --- a/code/modules/gamemaster/event2/events/engineering/window_break.dm +++ b/code/modules/gamemaster/event2/events/engineering/window_break.dm @@ -1,148 +1,148 @@ -// This event causes a random window near space to become damaged. -// If that window is not fixed in a certain amount of time, -// that window and nearby windows will shatter, causing a breach. - -/datum/event2/meta/window_break - name = "window break" - departments = list(DEPARTMENT_ENGINEERING) - chaos = 10 - reusable = TRUE - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/window_break - -/datum/event2/meta/window_break/get_weight() - return (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) / (times_ran + 1) - - - -/datum/event2/event/window_break - announce_delay_lower_bound = 10 SECONDS - announce_delay_upper_bound = 20 SECONDS - length_lower_bound = 8 MINUTES - length_upper_bound = 12 MINUTES - var/turf/chosen_turf_with_windows = null - var/obj/structure/window/chosen_window = null - var/list/collateral_windows = list() - -/datum/event2/event/window_break/set_up() - var/list/areas = find_random_areas() - if(!LAZYLEN(areas)) - log_debug("Window Break event could not find any areas. Aborting.") - abort() - return - - while(areas.len) - var/area/area = pick(areas) - areas -= area - - for(var/obj/structure/window/W in area.contents) - if(!is_window_to_space(W)) - continue - chosen_turf_with_windows = get_turf(W) - collateral_windows = gather_collateral_windows(W) - break // Break out of the inner loop. - - if(chosen_turf_with_windows) - log_debug("Window Break event has chosen turf '[chosen_turf_with_windows.name]' in [chosen_turf_with_windows.loc].") - break // Then the outer loop. - - if(!chosen_turf_with_windows) - log_debug("Window Break event could not find a turf with valid windows to break. Aborting.") - abort() - return - -/datum/event2/event/window_break/announce() - if(chosen_window) - command_announcement.Announce("Structural integrity of space-facing windows at \the [get_area(chosen_turf_with_windows)] are failing. \ - Repair of the damaged window is advised. Personnel without EVA suits in the area should leave until repairs are complete.", "Structural Alert") - -/datum/event2/event/window_break/start() - if(!chosen_turf_with_windows) - return - - for(var/obj/structure/window/W in chosen_turf_with_windows.contents) - if(W.is_fulltile()) // Full tile windows are simple and can always be used. - chosen_window = W - break - else // Otherwise we only want the window that is on the inside side of the station. - var/turf/T = get_step(W, W.dir) - if(T.is_space()) - continue - if(T.check_density()) - continue - chosen_window = W - break - - if(!chosen_window) - return - - chosen_window.take_damage(chosen_window.maxhealth * 0.8) - playsound(chosen_window, 'sound/effects/Glasshit.ogg', 100, 1) - chosen_window.visible_message(span("danger", "\The [chosen_window] suddenly begins to crack!")) - -/datum/event2/event/window_break/should_end() - . = ..() - if(!.) // If the timer didn't expire, we can still end it early if someone messes up. - if(!chosen_window || !chosen_window.anchored || chosen_window.health == chosen_window.maxhealth) - // If the window got deconstructed/moved/etc, immediately end and make the breach happen. - // Also end early if it was repaired. - return TRUE - -/datum/event2/event/window_break/end() - // If someone fixed the window, then everything is fine. - if(chosen_window && chosen_window.anchored && chosen_window.health == chosen_window.maxhealth) - log_debug("Window Break event ended with window repaired.") - return - - // Otherwise a bunch of windows shatter. - chosen_window?.shatter() - - var/windows_to_shatter = min(rand(4, 10), collateral_windows.len) - for(var/i = 1 to windows_to_shatter) - var/obj/structure/window/W = collateral_windows[i] - W?.shatter() - - log_debug("Window Break event ended with [windows_to_shatter] shattered windows and a breach.") - -// Checks if a window is adjacent to a space tile, and also that the opposite direction is open. -// This is done to avoid getting caught in corner parts of windows. -/datum/event2/event/window_break/proc/is_window_to_space(obj/structure/window/W) - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(W, direction) - if(T.is_space()) - var/turf/opposite_T = get_step(W, GLOB.reverse_dir[direction]) - if(!opposite_T.check_density()) - return TRUE - return FALSE - -//TL;DR: breadth first search for all connected turfs with windows -/datum/event2/event/window_break/proc/gather_collateral_windows(var/obj/structure/window/target_window) - var/list/turf/frontier_set = list(target_window.loc) - var/list/obj/structure/window/result_set = list() - var/list/turf/explored_set = list() - - while(frontier_set.len > 0) - var/turf/current = frontier_set[1] - frontier_set -= current - explored_set += current - - var/contains_windows = 0 - for(var/obj/structure/window/to_add in current.contents) - contains_windows = 1 - result_set += to_add - - if(contains_windows) - //add adjacent turfs to be checked for windows as well - var/turf/neighbor = locate(current.x + 1, current.y, current.z) - if(!(neighbor in frontier_set) && !(neighbor in explored_set)) - frontier_set += neighbor - neighbor = locate(current.x - 1, current.y, current.z) - if(!(neighbor in frontier_set) && !(neighbor in explored_set)) - frontier_set += neighbor - neighbor = locate(current.x, current.y + 1, current.z) - if(!(neighbor in frontier_set) && !(neighbor in explored_set)) - frontier_set += neighbor - neighbor = locate(current.x, current.y - 1, current.z) - if(!(neighbor in frontier_set) && !(neighbor in explored_set)) - frontier_set += neighbor - return result_set +// This event causes a random window near space to become damaged. +// If that window is not fixed in a certain amount of time, +// that window and nearby windows will shatter, causing a breach. + +/datum/event2/meta/window_break + name = "window break" + departments = list(DEPARTMENT_ENGINEERING) + chaos = 10 + reusable = TRUE + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/window_break + +/datum/event2/meta/window_break/get_weight() + return (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) / (times_ran + 1) + + + +/datum/event2/event/window_break + announce_delay_lower_bound = 10 SECONDS + announce_delay_upper_bound = 20 SECONDS + length_lower_bound = 8 MINUTES + length_upper_bound = 12 MINUTES + var/turf/chosen_turf_with_windows = null + var/obj/structure/window/chosen_window = null + var/list/collateral_windows = list() + +/datum/event2/event/window_break/set_up() + var/list/areas = find_random_areas() + if(!LAZYLEN(areas)) + log_debug("Window Break event could not find any areas. Aborting.") + abort() + return + + while(areas.len) + var/area/area = pick(areas) + areas -= area + + for(var/obj/structure/window/W in area.contents) + if(!is_window_to_space(W)) + continue + chosen_turf_with_windows = get_turf(W) + collateral_windows = gather_collateral_windows(W) + break // Break out of the inner loop. + + if(chosen_turf_with_windows) + log_debug("Window Break event has chosen turf '[chosen_turf_with_windows.name]' in [chosen_turf_with_windows.loc].") + break // Then the outer loop. + + if(!chosen_turf_with_windows) + log_debug("Window Break event could not find a turf with valid windows to break. Aborting.") + abort() + return + +/datum/event2/event/window_break/announce() + if(chosen_window) + command_announcement.Announce("Structural integrity of space-facing windows at \the [get_area(chosen_turf_with_windows)] are failing. \ + Repair of the damaged window is advised. Personnel without EVA suits in the area should leave until repairs are complete.", "Structural Alert") + +/datum/event2/event/window_break/start() + if(!chosen_turf_with_windows) + return + + for(var/obj/structure/window/W in chosen_turf_with_windows.contents) + if(W.is_fulltile()) // Full tile windows are simple and can always be used. + chosen_window = W + break + else // Otherwise we only want the window that is on the inside side of the station. + var/turf/T = get_step(W, W.dir) + if(T.is_space()) + continue + if(T.check_density()) + continue + chosen_window = W + break + + if(!chosen_window) + return + + chosen_window.take_damage(chosen_window.maxhealth * 0.8) + playsound(chosen_window, 'sound/effects/Glasshit.ogg', 100, 1) + chosen_window.visible_message(span("danger", "\The [chosen_window] suddenly begins to crack!")) + +/datum/event2/event/window_break/should_end() + . = ..() + if(!.) // If the timer didn't expire, we can still end it early if someone messes up. + if(!chosen_window || !chosen_window.anchored || chosen_window.health == chosen_window.maxhealth) + // If the window got deconstructed/moved/etc, immediately end and make the breach happen. + // Also end early if it was repaired. + return TRUE + +/datum/event2/event/window_break/end() + // If someone fixed the window, then everything is fine. + if(chosen_window && chosen_window.anchored && chosen_window.health == chosen_window.maxhealth) + log_debug("Window Break event ended with window repaired.") + return + + // Otherwise a bunch of windows shatter. + chosen_window?.shatter() + + var/windows_to_shatter = min(rand(4, 10), collateral_windows.len) + for(var/i = 1 to windows_to_shatter) + var/obj/structure/window/W = collateral_windows[i] + W?.shatter() + + log_debug("Window Break event ended with [windows_to_shatter] shattered windows and a breach.") + +// Checks if a window is adjacent to a space tile, and also that the opposite direction is open. +// This is done to avoid getting caught in corner parts of windows. +/datum/event2/event/window_break/proc/is_window_to_space(obj/structure/window/W) + for(var/direction in GLOB.cardinal) + var/turf/T = get_step(W, direction) + if(T.is_space()) + var/turf/opposite_T = get_step(W, GLOB.reverse_dir[direction]) + if(!opposite_T.check_density()) + return TRUE + return FALSE + +//TL;DR: breadth first search for all connected turfs with windows +/datum/event2/event/window_break/proc/gather_collateral_windows(var/obj/structure/window/target_window) + var/list/turf/frontier_set = list(target_window.loc) + var/list/obj/structure/window/result_set = list() + var/list/turf/explored_set = list() + + while(frontier_set.len > 0) + var/turf/current = frontier_set[1] + frontier_set -= current + explored_set += current + + var/contains_windows = 0 + for(var/obj/structure/window/to_add in current.contents) + contains_windows = 1 + result_set += to_add + + if(contains_windows) + //add adjacent turfs to be checked for windows as well + var/turf/neighbor = locate(current.x + 1, current.y, current.z) + if(!(neighbor in frontier_set) && !(neighbor in explored_set)) + frontier_set += neighbor + neighbor = locate(current.x - 1, current.y, current.z) + if(!(neighbor in frontier_set) && !(neighbor in explored_set)) + frontier_set += neighbor + neighbor = locate(current.x, current.y + 1, current.z) + if(!(neighbor in frontier_set) && !(neighbor in explored_set)) + frontier_set += neighbor + neighbor = locate(current.x, current.y - 1, current.z) + if(!(neighbor in frontier_set) && !(neighbor in explored_set)) + frontier_set += neighbor + return result_set diff --git a/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm b/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm index 6da19c32cc..d3d60d4876 100644 --- a/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm +++ b/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm @@ -1,43 +1,43 @@ -/datum/event2/meta/comms_blackout - name = "communications blackout" - departments = list(DEPARTMENT_EVERYONE) // It's not an engineering event because engineering can't do anything to help . . . for now. - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - reusable = TRUE - event_type = /datum/event2/event/comms_blackout - -/datum/event2/meta/comms_blackout/get_weight() - return 50 + metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5 - - - -/datum/event2/event/comms_blackout/announce() - var/alert = pick("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \ - "Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v¬-BZZZT", \ - "Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \ - "Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \ - "Ionospheri:%£ MCayj^j<.3-BZZZZZZT", \ - "#4nd%;f4y6,>£%-BZZZZZZZT") - if(prob(33)) - command_announcement.Announce(alert, new_sound = 'sound/misc/interference.ogg') - // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms - for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, "
                    ") - to_chat(A, "[alert]") - to_chat(A, "
                    ") - -/datum/event2/event/comms_blackout/start() - if(prob(50)) - // One in two chance for the radios to turn i%t# t&_)#%, which can be more alarming than radio silence. - log_debug("Doing partial outage of telecomms.") - for(var/obj/machinery/telecomms/processor/P in telecomms_list) - P.emp_act(1) - else - // Otherwise just shut everything down, madagascar style. - log_debug("Doing complete outage of telecomms.") - for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) - - // Communicators go down no matter what. - for(var/obj/machinery/exonet_node/N in machines) - N.emp_act(1) +/datum/event2/meta/comms_blackout + name = "communications blackout" + departments = list(DEPARTMENT_EVERYONE) // It's not an engineering event because engineering can't do anything to help . . . for now. + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + reusable = TRUE + event_type = /datum/event2/event/comms_blackout + +/datum/event2/meta/comms_blackout/get_weight() + return 50 + metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5 + + + +/datum/event2/event/comms_blackout/announce() + var/alert = pick("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \ + "Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v¬-BZZZT", \ + "Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \ + "Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \ + "Ionospheri:%£ MCayj^j<.3-BZZZZZZT", \ + "#4nd%;f4y6,>£%-BZZZZZZZT") + if(prob(33)) + command_announcement.Announce(alert, new_sound = 'sound/misc/interference.ogg') + // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms + for(var/mob/living/silicon/ai/A in player_list) + to_chat(A, "
                    ") + to_chat(A, "[alert]") + to_chat(A, "
                    ") + +/datum/event2/event/comms_blackout/start() + if(prob(50)) + // One in two chance for the radios to turn i%t# t&_)#%, which can be more alarming than radio silence. + log_debug("Doing partial outage of telecomms.") + for(var/obj/machinery/telecomms/processor/P in telecomms_list) + P.emp_act(1) + else + // Otherwise just shut everything down, madagascar style. + log_debug("Doing complete outage of telecomms.") + for(var/obj/machinery/telecomms/T in telecomms_list) + T.emp_act(1) + + // Communicators go down no matter what. + for(var/obj/machinery/exonet_node/N in machines) + N.emp_act(1) diff --git a/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm b/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm index 0611e1b290..1392c0bb2b 100644 --- a/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm +++ b/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm @@ -1,99 +1,99 @@ -// Makes a spooky electrical thing happen, that can blow the lights or make the APCs turn off for a short period of time. -// Doesn't do any permanent damage beyond the small chance to emag an APC, which just unlocks it forever. As such, this is free to occur even with no engineers. -// Since this is an 'external' thing, the Grid Checker can't stop it. - -/datum/event2/meta/electrical_fault - name = "electrical fault" - departments = list(DEPARTMENT_EVERYONE) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/electrical_fault - -/datum/event2/meta/electrical_fault/get_weight() - return 10 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5) - - -/datum/event2/event/electrical_fault - start_delay_lower_bound = 30 SECONDS - start_delay_upper_bound = 1 MINUTE - length_lower_bound = 20 SECONDS - length_upper_bound = 40 SECONDS - var/max_apcs_per_tick = 6 - - var/list/valid_apcs = null - var/list/valid_z_levels = null - - var/apcs_disabled = 0 - var/apcs_overloaded = 0 - var/apcs_emagged = 0 - -/datum/event2/event/electrical_fault/announce() - // Trying to be vague to avoid 'space lightning storms'. - // This could be re-flavored to be a solar flare or something and have robots outside be sad. - command_announcement.Announce("External conditions near \the [location_name()] are likely \ - to cause voltage spikes and other electrical issues very soon. Please secure sensitive electrical equipment until the situation passes.", "[location_name()] Sensor Array") - -/datum/event2/event/electrical_fault/set_up() - valid_z_levels = get_location_z_levels() - valid_z_levels -= using_map.sealed_levels // Space levels only please! - - valid_apcs = list() - for(var/obj/machinery/power/apc/A in GLOB.apcs) - if(A.z in valid_z_levels) - valid_apcs += A - -/datum/event2/event/electrical_fault/start() - command_announcement.Announce("Irregularities detected in \the [location_name()] power grid.", "[location_name()] Power Grid Monitoring") - -/datum/event2/event/electrical_fault/event_tick() - if(!valid_apcs.len) - log_debug("ELECTRICAL EVENT: No valid APCs found for electrical fault event. Aborting.") - abort() - return - - var/list/picked_apcs = list() - for(var/i = 1 to max_apcs_per_tick) - picked_apcs |= pick(valid_apcs) - - for(var/A in picked_apcs) - affect_apc(A) - -/datum/event2/event/electrical_fault/end() - command_announcement.Announce("The irregular electrical conditions inside \the [location_name()] power grid has ceased.", "[location_name()] Power Grid Monitoring") - log_debug("Electrical Fault event caused [apcs_disabled] APC\s to shut off, \ - [apcs_overloaded] APC\s to overload lighting, and [apcs_emagged] APC\s to be emagged.") - -/datum/event2/event/electrical_fault/proc/affect_apc(obj/machinery/power/apc/A) - // Main breaker is turned off or is Special(tm). Consider it protected. - // Important APCs like the AI or the engine core shouldn't get shut off by this event. - if((!A.operating || A.failure_timer > 0) || A.is_critical) - return - - // In reality this would probably make the lights get brighter but oh well. - for(var/obj/machinery/light/L in get_area(A)) - L.flicker(rand(10, 20)) - - // Chance to make the APC turn off for awhile. - // This will actually protect it from further damage. - if(prob(25)) - A.energy_fail(rand(60, 120)) -// log_debug("ELECTRICAL EVENT: Disabled \the [A]'s power for a temporary amount of time.") - playsound(A, 'sound/machines/defib_success.ogg', 50, 1) - apcs_disabled++ - return - - // Decent chance to overload lighting circuit. - if(prob(30)) - A.overload_lighting() -// log_debug("ELECTRICAL EVENT: Overloaded \the [A]'s lighting.") - playsound(A, 'sound/effects/lightningshock.ogg', 50, 1) - apcs_overloaded++ - - // Relatively small chance to emag the apc as apc_damage event does. - if(prob(5)) - A.emagged = TRUE - A.update_icon() -// log_debug("ELECTRICAL EVENT: Emagged \the [A].") - playsound(A, 'sound/machines/chime.ogg', 50, 1) - apcs_emagged++ - +// Makes a spooky electrical thing happen, that can blow the lights or make the APCs turn off for a short period of time. +// Doesn't do any permanent damage beyond the small chance to emag an APC, which just unlocks it forever. As such, this is free to occur even with no engineers. +// Since this is an 'external' thing, the Grid Checker can't stop it. + +/datum/event2/meta/electrical_fault + name = "electrical fault" + departments = list(DEPARTMENT_EVERYONE) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/electrical_fault + +/datum/event2/meta/electrical_fault/get_weight() + return 10 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5) + + +/datum/event2/event/electrical_fault + start_delay_lower_bound = 30 SECONDS + start_delay_upper_bound = 1 MINUTE + length_lower_bound = 20 SECONDS + length_upper_bound = 40 SECONDS + var/max_apcs_per_tick = 6 + + var/list/valid_apcs = null + var/list/valid_z_levels = null + + var/apcs_disabled = 0 + var/apcs_overloaded = 0 + var/apcs_emagged = 0 + +/datum/event2/event/electrical_fault/announce() + // Trying to be vague to avoid 'space lightning storms'. + // This could be re-flavored to be a solar flare or something and have robots outside be sad. + command_announcement.Announce("External conditions near \the [location_name()] are likely \ + to cause voltage spikes and other electrical issues very soon. Please secure sensitive electrical equipment until the situation passes.", "[location_name()] Sensor Array") + +/datum/event2/event/electrical_fault/set_up() + valid_z_levels = get_location_z_levels() + valid_z_levels -= using_map.sealed_levels // Space levels only please! + + valid_apcs = list() + for(var/obj/machinery/power/apc/A in GLOB.apcs) + if(A.z in valid_z_levels) + valid_apcs += A + +/datum/event2/event/electrical_fault/start() + command_announcement.Announce("Irregularities detected in \the [location_name()] power grid.", "[location_name()] Power Grid Monitoring") + +/datum/event2/event/electrical_fault/event_tick() + if(!valid_apcs.len) + log_debug("ELECTRICAL EVENT: No valid APCs found for electrical fault event. Aborting.") + abort() + return + + var/list/picked_apcs = list() + for(var/i = 1 to max_apcs_per_tick) + picked_apcs |= pick(valid_apcs) + + for(var/A in picked_apcs) + affect_apc(A) + +/datum/event2/event/electrical_fault/end() + command_announcement.Announce("The irregular electrical conditions inside \the [location_name()] power grid has ceased.", "[location_name()] Power Grid Monitoring") + log_debug("Electrical Fault event caused [apcs_disabled] APC\s to shut off, \ + [apcs_overloaded] APC\s to overload lighting, and [apcs_emagged] APC\s to be emagged.") + +/datum/event2/event/electrical_fault/proc/affect_apc(obj/machinery/power/apc/A) + // Main breaker is turned off or is Special(tm). Consider it protected. + // Important APCs like the AI or the engine core shouldn't get shut off by this event. + if((!A.operating || A.failure_timer > 0) || A.is_critical) + return + + // In reality this would probably make the lights get brighter but oh well. + for(var/obj/machinery/light/L in get_area(A)) + L.flicker(rand(10, 20)) + + // Chance to make the APC turn off for awhile. + // This will actually protect it from further damage. + if(prob(25)) + A.energy_fail(rand(60, 120)) +// log_debug("ELECTRICAL EVENT: Disabled \the [A]'s power for a temporary amount of time.") + playsound(A, 'sound/machines/defib_success.ogg', 50, 1) + apcs_disabled++ + return + + // Decent chance to overload lighting circuit. + if(prob(30)) + A.overload_lighting() +// log_debug("ELECTRICAL EVENT: Overloaded \the [A]'s lighting.") + playsound(A, 'sound/effects/lightningshock.ogg', 50, 1) + apcs_overloaded++ + + // Relatively small chance to emag the apc as apc_damage event does. + if(prob(5)) + A.emagged = TRUE + A.update_icon() +// log_debug("ELECTRICAL EVENT: Emagged \the [A].") + playsound(A, 'sound/machines/chime.ogg', 50, 1) + apcs_emagged++ + diff --git a/code/modules/gamemaster/event2/events/everyone/gravity.dm b/code/modules/gamemaster/event2/events/everyone/gravity.dm index 5426698a22..7c423aeeb2 100644 --- a/code/modules/gamemaster/event2/events/everyone/gravity.dm +++ b/code/modules/gamemaster/event2/events/everyone/gravity.dm @@ -1,34 +1,34 @@ -/datum/event2/meta/gravity - name = "gravity failure" - departments = list(DEPARTMENT_EVERYONE) - chaos = 20 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - reusable = TRUE - event_type = /datum/event2/event/gravity - -/datum/event2/meta/gravity/get_weight() - return (20 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5)) / (times_ran + 1) - - - - -/datum/event2/event/gravity - length_lower_bound = 4 MINUTES - length_upper_bound = 8 MINUTES - -/datum/event2/event/gravity/announce() - command_announcement.Announce("Feedback surge detected in mass-distributions systems. \ - Artificial gravity has been disabled whilst the system reinitializes. \ - Please stand by while the gravity system reinitializes.", "Gravity Failure") - -/datum/event2/event/gravity/start() - for(var/area/A in world) - if(A.z in get_location_z_levels(space_only = TRUE)) - A.gravitychange(FALSE) - -/datum/event2/event/gravity/end() - for(var/area/A in world) - if(A.z in get_location_z_levels(space_only = TRUE)) - A.gravitychange(TRUE) - +/datum/event2/meta/gravity + name = "gravity failure" + departments = list(DEPARTMENT_EVERYONE) + chaos = 20 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/gravity + +/datum/event2/meta/gravity/get_weight() + return (20 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5)) / (times_ran + 1) + + + + +/datum/event2/event/gravity + length_lower_bound = 4 MINUTES + length_upper_bound = 8 MINUTES + +/datum/event2/event/gravity/announce() + command_announcement.Announce("Feedback surge detected in mass-distributions systems. \ + Artificial gravity has been disabled whilst the system reinitializes. \ + Please stand by while the gravity system reinitializes.", "Gravity Failure") + +/datum/event2/event/gravity/start() + for(var/area/A in world) + if(A.z in get_location_z_levels(space_only = TRUE)) + A.gravitychange(FALSE) + +/datum/event2/event/gravity/end() + for(var/area/A in world) + if(A.z in get_location_z_levels(space_only = TRUE)) + A.gravitychange(TRUE) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/everyone/infestation.dm b/code/modules/gamemaster/event2/events/everyone/infestation.dm index fa07e60b4c..a8da58c11b 100644 --- a/code/modules/gamemaster/event2/events/everyone/infestation.dm +++ b/code/modules/gamemaster/event2/events/everyone/infestation.dm @@ -1,77 +1,77 @@ -/datum/event2/meta/infestation - event_class = "infestation" - departments = list(DEPARTMENT_EVERYONE) - -/datum/event2/meta/infestation/get_weight() - return metric.count_people_in_department(DEPARTMENT_EVERYONE) * 10 - -/datum/event2/meta/infestation/rodents - name = "infestation - rodents" - event_type = /datum/event2/event/infestation/rodents - -/datum/event2/meta/infestation/lizards - name = "infestation - lizards" - event_type = /datum/event2/event/infestation/lizards - -/datum/event2/meta/infestation/spiderlings - name = "infestation - spiders" - event_type = /datum/event2/event/infestation/spiderlings - -/datum/event2/event/infestation/cockroaches - vermin_string = "cockroaches" - max_vermin = 6 - things_to_spawn = list(/mob/living/simple_mob/animal/passive/cockroach) - -/datum/event2/event/infestation - var/vermin_string = null - var/max_vermin = 0 - var/list/things_to_spawn = list() - - var/list/turfs = list() - -/datum/event2/event/infestation/rodents - vermin_string = "rodents" - max_vermin = 12 - things_to_spawn = list( - /mob/living/simple_mob/animal/passive/mouse/gray, - /mob/living/simple_mob/animal/passive/mouse/brown, - /mob/living/simple_mob/animal/passive/mouse/black, - /mob/living/simple_mob/animal/passive/mouse/white, - /mob/living/simple_mob/animal/passive/mouse/rat - ) - -/datum/event2/event/infestation/lizards - vermin_string = "lizards" - max_vermin = 6 - things_to_spawn = list( - /mob/living/simple_mob/animal/passive/lizard, - /mob/living/simple_mob/animal/passive/lizard/large, - /mob/living/simple_mob/animal/passive/lizard/large/defensive - ) - -/datum/event2/event/infestation/spiderlings - vermin_string = "spiders" - max_vermin = 3 - things_to_spawn = list(/obj/effect/spider/spiderling/non_growing) - - -/datum/event2/event/infestation/set_up() - turfs = find_random_turfs(max_vermin) - if(!turfs.len) - log_debug("Infestation event failed to find any valid turfs. Aborting.") - abort() - return - -/datum/event2/event/infestation/announce() - var/turf/T = turfs[1] - command_announcement.Announce("Bioscans indicate that [vermin_string] have been breeding \ - in \the [T.loc]. Clear them out, before this starts to affect productivity.", "Vermin infestation") - - -/datum/event2/event/infestation/start() - var/vermin_to_spawn = rand(2, max_vermin) - for(var/i = 1 to vermin_to_spawn) - var/turf/T = pick(turfs) - turfs -= T - var/spawn_type = pick(things_to_spawn) - new spawn_type(T) +/datum/event2/meta/infestation + event_class = "infestation" + departments = list(DEPARTMENT_EVERYONE) + +/datum/event2/meta/infestation/get_weight() + return metric.count_people_in_department(DEPARTMENT_EVERYONE) * 10 + +/datum/event2/meta/infestation/rodents + name = "infestation - rodents" + event_type = /datum/event2/event/infestation/rodents + +/datum/event2/meta/infestation/lizards + name = "infestation - lizards" + event_type = /datum/event2/event/infestation/lizards + +/datum/event2/meta/infestation/spiderlings + name = "infestation - spiders" + event_type = /datum/event2/event/infestation/spiderlings + +/datum/event2/event/infestation/cockroaches + vermin_string = "cockroaches" + max_vermin = 6 + things_to_spawn = list(/mob/living/simple_mob/animal/passive/cockroach) + +/datum/event2/event/infestation + var/vermin_string = null + var/max_vermin = 0 + var/list/things_to_spawn = list() + + var/list/turfs = list() + +/datum/event2/event/infestation/rodents + vermin_string = "rodents" + max_vermin = 12 + things_to_spawn = list( + /mob/living/simple_mob/animal/passive/mouse/gray, + /mob/living/simple_mob/animal/passive/mouse/brown, + /mob/living/simple_mob/animal/passive/mouse/black, + /mob/living/simple_mob/animal/passive/mouse/white, + /mob/living/simple_mob/animal/passive/mouse/rat + ) + +/datum/event2/event/infestation/lizards + vermin_string = "lizards" + max_vermin = 6 + things_to_spawn = list( + /mob/living/simple_mob/animal/passive/lizard, + /mob/living/simple_mob/animal/passive/lizard/large, + /mob/living/simple_mob/animal/passive/lizard/large/defensive + ) + +/datum/event2/event/infestation/spiderlings + vermin_string = "spiders" + max_vermin = 3 + things_to_spawn = list(/obj/effect/spider/spiderling/non_growing) + + +/datum/event2/event/infestation/set_up() + turfs = find_random_turfs(max_vermin) + if(!turfs.len) + log_debug("Infestation event failed to find any valid turfs. Aborting.") + abort() + return + +/datum/event2/event/infestation/announce() + var/turf/T = turfs[1] + command_announcement.Announce("Bioscans indicate that [vermin_string] have been breeding \ + in \the [T.loc]. Clear them out, before this starts to affect productivity.", "Vermin infestation") + + +/datum/event2/event/infestation/start() + var/vermin_to_spawn = rand(2, max_vermin) + for(var/i = 1 to vermin_to_spawn) + var/turf/T = pick(turfs) + turfs -= T + var/spawn_type = pick(things_to_spawn) + new spawn_type(T) diff --git a/code/modules/gamemaster/event2/events/everyone/pda_spam.dm b/code/modules/gamemaster/event2/events/everyone/pda_spam.dm index c6a1532d0e..212087abbc 100644 --- a/code/modules/gamemaster/event2/events/everyone/pda_spam.dm +++ b/code/modules/gamemaster/event2/events/everyone/pda_spam.dm @@ -1,142 +1,142 @@ -/datum/event2/meta/pda_spam - name = "pda spam" - departments = list(DEPARTMENT_EVERYONE) - event_type = /datum/event2/event/pda_spam - -/datum/event2/meta/pda_spam/get_weight() - return metric.count_people_in_department(DEPARTMENT_EVERYONE) * 2 - - -/datum/event2/event/pda_spam - length_lower_bound = 30 MINUTES - length_upper_bound = 1 HOUR - var/spam_debug = FALSE // If true, notices of the event sending spam go to `log_debug()`. - var/last_spam_time = null // world.time of most recent spam. - var/next_spam_attempt_time = 0 // world.time of next attempt to try to spam. - var/give_up_after = 5 MINUTES - var/obj/machinery/message_server/MS = null - var/obj/machinery/exonet_node/node = null - -/datum/event2/event/pda_spam/set_up() - last_spam_time = world.time // So it won't immediately give up. - MS = pick_message_server() - node = get_exonet_node() - -/datum/event2/event/pda_spam/event_tick() - if(!can_spam()) - return - - if(world.time < next_spam_attempt_time) - return - - next_spam_attempt_time = world.time + rand(30 SECONDS, 2 MINUTES) - - var/obj/item/device/pda/P = null - var/list/viables = list() - - for(var/obj/item/device/pda/check_pda in sortAtom(PDAs)) - if (!check_pda.owner || check_pda == src || check_pda.hidden) - continue - - var/datum/data/pda/app/messenger/M = check_pda.find_program(/datum/data/pda/app/messenger) - if(!M || M.toff) - continue - viables += check_pda - - if(!viables.len) - return - - P = pick(viables) - var/list/spam = generate_spam() - - if(MS.send_pda_message("[P.owner]", spam[1], spam[2])) // Message been filtered by spam filter. - return - - send_spam(P, spam[1], spam[2]) - - -/datum/event2/event/pda_spam/should_end() - . = ..() - if(!.) - // Give up if nobody was reachable for five minutes. - if(last_spam_time + give_up_after < world.time) - log_debug("PDA Spam event giving up after not being able to spam for awhile.") - return TRUE - -/datum/event2/event/pda_spam/proc/can_spam() - if(!node || !node.on || !node.allow_external_PDAs) - node = get_exonet_node() - return FALSE - - if(!MS || !MS.active) - MS = pick_message_server() - return FALSE - - return TRUE - -// Returns a list containing two items, the sender and message. -/datum/event2/event/pda_spam/proc/generate_spam() - var/sender = null - var/message = null - switch(rand(1, 7)) - if(1) - sender = pick("MaxBet","MaxBet Online Casino","There is no better time to register","I'm excited for you to join us") - message = pick("Triple deposits are waiting for you at MaxBet Online when you register to play with us.",\ - "You can qualify for a 200% Welcome Bonus at MaxBet Online when you sign up today.",\ - "Once you are a player with MaxBet, you will also receive lucrative weekly and monthly promotions.",\ - "You will be able to enjoy over 450 top-flight casino games at MaxBet.") - if(2) - sender = pick(300;"QuickDatingSystem",200;"Find your russian bride",50;"Tajaran beauties are waiting",50;"Find your secret skrell crush",50;"Beautiful unathi brides") - message = pick("Your profile caught my attention and I wanted to write and say hello (QuickDating).",\ - "If you will write to me on my email [pick(first_names_female)]@[pick(last_names)].[pick("ru","ck","tj","ur","nt")] I shall necessarily send you a photo (QuickDating).",\ - "I want that we write each other and I hope, that you will like my profile and you will answer me (QuickDating).",\ - "You have (1) new message!",\ - "You have (2) new profile views!") - if(3) - sender = pick("Galactic Payments Association","Better Business Bureau","[using_map.starsys_name] E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas") - message = pick("Luxury watches for Blowout sale prices!",\ - "Watches, Jewelry & Accessories, Bags & Wallets !",\ - "Deposit 100$ and get 300$ totally free!",\ - " 100K NT.|WOWGOLD �nly $89 ",\ - "We have been filed with a complaint from one of your customers in respect of their business relations with you.",\ - "We kindly ask you to open the COMPLAINT REPORT (attached) to reply on this complaint..") - if(4) - sender = pick("Buy Dr. Maxman","Having dysfuctional troubles?") - message = pick("DR MAXMAN: REAL Doctors, REAL Science, REAL Results!",\ - "Dr. Maxman was created by George Acuilar, M.D, a [using_map.boss_short] Certified Urologist who has treated over 70,000 patients sector wide with 'male problems'.",\ - "After seven years of research, Dr Acuilar and his team came up with this simple breakthrough male enhancement formula.",\ - "Men of all species report AMAZING increases in length, width and stamina.") - if(5) - sender = pick("Dr","Crown prince","King Regent","Professor","Captain") - sender += " " + pick("Robert","Alfred","Josephat","Kingsley","Sehi","Zbahi") - sender += " " + pick("Mugawe","Nkem","Gbatokwia","Nchekwube","Ndim","Ndubisi") - message = pick("YOUR FUND HAS BEEN MOVED TO [uppertext(pick("Salusa","Segunda","Cepheus","Andromeda","Gruis","Corona","Aquila","ARES","Asellus"))] DEVELOPMENTARY BANK FOR ONWARD REMITTANCE.",\ - "We are happy to inform you that due to the delay, we have been instructed to IMMEDIATELY deposit all funds into your account",\ - "Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\ - "Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\ - "Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits") - if(6) - sender = pick("[using_map.company_name] Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt") - message = pick("The [using_map.company_name] Morale Division wishes to provide you with quality entertainment sites.",\ - "WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\ - "Wetskrell.nt only provides the higest quality of male entertaiment to [using_map.company_name] Employees.",\ - "Simply enter your [using_map.company_name] Bank account system number and pin. With three easy steps this service could be yours!") - if(7) - sender = pick("You have won free tickets!","Click here to claim your prize!","You are the 1000th vistor!","You are our lucky grand prize winner!") - message = pick("You have won tickets to the newest ACTION JAXSON MOVIE!",\ - "You have won tickets to the newest crime drama DETECTIVE MYSTERY IN THE CLAMITY CAPER!",\ - "You have won tickets to the newest romantic comedy 16 RULES OF LOVE!",\ - "You have won tickets to the newest thriller THE CULT OF THE SLEEPING ONE!") - return list(sender, message) - -/datum/event2/event/pda_spam/proc/send_spam(obj/item/device/pda/P, sender, message) - last_spam_time = world.time - var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) - PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) - if(spam_debug) - log_debug("PDA Spam event sent spam to \the [P].") - - -/datum/event2/event/pda_spam/proc/pick_message_server() - if(LAZYLEN(message_servers)) - return pick(message_servers) +/datum/event2/meta/pda_spam + name = "pda spam" + departments = list(DEPARTMENT_EVERYONE) + event_type = /datum/event2/event/pda_spam + +/datum/event2/meta/pda_spam/get_weight() + return metric.count_people_in_department(DEPARTMENT_EVERYONE) * 2 + + +/datum/event2/event/pda_spam + length_lower_bound = 30 MINUTES + length_upper_bound = 1 HOUR + var/spam_debug = FALSE // If true, notices of the event sending spam go to `log_debug()`. + var/last_spam_time = null // world.time of most recent spam. + var/next_spam_attempt_time = 0 // world.time of next attempt to try to spam. + var/give_up_after = 5 MINUTES + var/obj/machinery/message_server/MS = null + var/obj/machinery/exonet_node/node = null + +/datum/event2/event/pda_spam/set_up() + last_spam_time = world.time // So it won't immediately give up. + MS = pick_message_server() + node = get_exonet_node() + +/datum/event2/event/pda_spam/event_tick() + if(!can_spam()) + return + + if(world.time < next_spam_attempt_time) + return + + next_spam_attempt_time = world.time + rand(30 SECONDS, 2 MINUTES) + + var/obj/item/device/pda/P = null + var/list/viables = list() + + for(var/obj/item/device/pda/check_pda in sortAtom(PDAs)) + if (!check_pda.owner || check_pda == src || check_pda.hidden) + continue + + var/datum/data/pda/app/messenger/M = check_pda.find_program(/datum/data/pda/app/messenger) + if(!M || M.toff) + continue + viables += check_pda + + if(!viables.len) + return + + P = pick(viables) + var/list/spam = generate_spam() + + if(MS.send_pda_message("[P.owner]", spam[1], spam[2])) // Message been filtered by spam filter. + return + + send_spam(P, spam[1], spam[2]) + + +/datum/event2/event/pda_spam/should_end() + . = ..() + if(!.) + // Give up if nobody was reachable for five minutes. + if(last_spam_time + give_up_after < world.time) + log_debug("PDA Spam event giving up after not being able to spam for awhile.") + return TRUE + +/datum/event2/event/pda_spam/proc/can_spam() + if(!node || !node.on || !node.allow_external_PDAs) + node = get_exonet_node() + return FALSE + + if(!MS || !MS.active) + MS = pick_message_server() + return FALSE + + return TRUE + +// Returns a list containing two items, the sender and message. +/datum/event2/event/pda_spam/proc/generate_spam() + var/sender = null + var/message = null + switch(rand(1, 7)) + if(1) + sender = pick("MaxBet","MaxBet Online Casino","There is no better time to register","I'm excited for you to join us") + message = pick("Triple deposits are waiting for you at MaxBet Online when you register to play with us.",\ + "You can qualify for a 200% Welcome Bonus at MaxBet Online when you sign up today.",\ + "Once you are a player with MaxBet, you will also receive lucrative weekly and monthly promotions.",\ + "You will be able to enjoy over 450 top-flight casino games at MaxBet.") + if(2) + sender = pick(300;"QuickDatingSystem",200;"Find your russian bride",50;"Tajaran beauties are waiting",50;"Find your secret skrell crush",50;"Beautiful unathi brides") + message = pick("Your profile caught my attention and I wanted to write and say hello (QuickDating).",\ + "If you will write to me on my email [pick(first_names_female)]@[pick(last_names)].[pick("ru","ck","tj","ur","nt")] I shall necessarily send you a photo (QuickDating).",\ + "I want that we write each other and I hope, that you will like my profile and you will answer me (QuickDating).",\ + "You have (1) new message!",\ + "You have (2) new profile views!") + if(3) + sender = pick("Galactic Payments Association","Better Business Bureau","[using_map.starsys_name] E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas") + message = pick("Luxury watches for Blowout sale prices!",\ + "Watches, Jewelry & Accessories, Bags & Wallets !",\ + "Deposit 100$ and get 300$ totally free!",\ + " 100K NT.|WOWGOLD �nly $89 ",\ + "We have been filed with a complaint from one of your customers in respect of their business relations with you.",\ + "We kindly ask you to open the COMPLAINT REPORT (attached) to reply on this complaint..") + if(4) + sender = pick("Buy Dr. Maxman","Having dysfuctional troubles?") + message = pick("DR MAXMAN: REAL Doctors, REAL Science, REAL Results!",\ + "Dr. Maxman was created by George Acuilar, M.D, a [using_map.boss_short] Certified Urologist who has treated over 70,000 patients sector wide with 'male problems'.",\ + "After seven years of research, Dr Acuilar and his team came up with this simple breakthrough male enhancement formula.",\ + "Men of all species report AMAZING increases in length, width and stamina.") + if(5) + sender = pick("Dr","Crown prince","King Regent","Professor","Captain") + sender += " " + pick("Robert","Alfred","Josephat","Kingsley","Sehi","Zbahi") + sender += " " + pick("Mugawe","Nkem","Gbatokwia","Nchekwube","Ndim","Ndubisi") + message = pick("YOUR FUND HAS BEEN MOVED TO [uppertext(pick("Salusa","Segunda","Cepheus","Andromeda","Gruis","Corona","Aquila","ARES","Asellus"))] DEVELOPMENTARY BANK FOR ONWARD REMITTANCE.",\ + "We are happy to inform you that due to the delay, we have been instructed to IMMEDIATELY deposit all funds into your account",\ + "Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\ + "Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\ + "Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits") + if(6) + sender = pick("[using_map.company_name] Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt") + message = pick("The [using_map.company_name] Morale Division wishes to provide you with quality entertainment sites.",\ + "WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\ + "Wetskrell.nt only provides the higest quality of male entertaiment to [using_map.company_name] Employees.",\ + "Simply enter your [using_map.company_name] Bank account system number and pin. With three easy steps this service could be yours!") + if(7) + sender = pick("You have won free tickets!","Click here to claim your prize!","You are the 1000th vistor!","You are our lucky grand prize winner!") + message = pick("You have won tickets to the newest ACTION JAXSON MOVIE!",\ + "You have won tickets to the newest crime drama DETECTIVE MYSTERY IN THE CLAMITY CAPER!",\ + "You have won tickets to the newest romantic comedy 16 RULES OF LOVE!",\ + "You have won tickets to the newest thriller THE CULT OF THE SLEEPING ONE!") + return list(sender, message) + +/datum/event2/event/pda_spam/proc/send_spam(obj/item/device/pda/P, sender, message) + last_spam_time = world.time + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) + if(spam_debug) + log_debug("PDA Spam event sent spam to \the [P].") + + +/datum/event2/event/pda_spam/proc/pick_message_server() + if(LAZYLEN(message_servers)) + return pick(message_servers) diff --git a/code/modules/gamemaster/event2/events/everyone/radiation_storm.dm b/code/modules/gamemaster/event2/events/everyone/radiation_storm.dm index c81968c23e..d5c4592b3f 100644 --- a/code/modules/gamemaster/event2/events/everyone/radiation_storm.dm +++ b/code/modules/gamemaster/event2/events/everyone/radiation_storm.dm @@ -1,49 +1,49 @@ -/datum/event2/meta/radiation_storm - name = "radiation storm" - departments = list(DEPARTMENT_EVERYONE) - chaos = 20 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/radiation_storm - -/datum/event2/meta/radiation_storm/get_weight() - var/medical_factor = metric.count_people_in_department(DEPARTMENT_MEDICAL) * 10 - var/population_factor = metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5 // Note medical people will get counted twice at 25 weight. - return 20 + medical_factor + population_factor - - - -/datum/event2/event/radiation_storm - start_delay_lower_bound = 1 MINUTE - length_lower_bound = 1 MINUTE - -/datum/event2/event/radiation_storm/announce() - command_announcement.Announce("High levels of radiation detected near \the [location_name()]. \ - Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') - make_maint_all_access() - -/datum/event2/event/radiation_storm/start() - command_announcement.Announce("The station has entered the radiation belt. \ - Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") - -/datum/event2/event/radiation_storm/event_tick() - radiate() - -/datum/event2/event/radiation_storm/proc/radiate() - var/radiation_level = rand(15, 35) - for(var/z in using_map.station_levels) - SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) - -/datum/event2/event/radiation_storm/end() - command_announcement.Announce("The station has passed the radiation belt. \ - Please allow for up to one minute while radiation levels dissipate, and report to \ - medbay if you experience any unusual symptoms. Maintenance will lose all \ - access again shortly.", "Anomaly Alert") - addtimer(CALLBACK(src, PROC_REF(maint_callback)), 2 MINUTES) - -/datum/event2/event/radiation_storm/proc/maint_callback() - revoke_maint_all_access() - - -// There is no actual radiation during a fake storm. -/datum/event2/event/radiation_storm/fake/radiate() - return +/datum/event2/meta/radiation_storm + name = "radiation storm" + departments = list(DEPARTMENT_EVERYONE) + chaos = 20 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/radiation_storm + +/datum/event2/meta/radiation_storm/get_weight() + var/medical_factor = metric.count_people_in_department(DEPARTMENT_MEDICAL) * 10 + var/population_factor = metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5 // Note medical people will get counted twice at 25 weight. + return 20 + medical_factor + population_factor + + + +/datum/event2/event/radiation_storm + start_delay_lower_bound = 1 MINUTE + length_lower_bound = 1 MINUTE + +/datum/event2/event/radiation_storm/announce() + command_announcement.Announce("High levels of radiation detected near \the [location_name()]. \ + Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') + make_maint_all_access() + +/datum/event2/event/radiation_storm/start() + command_announcement.Announce("The station has entered the radiation belt. \ + Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") + +/datum/event2/event/radiation_storm/event_tick() + radiate() + +/datum/event2/event/radiation_storm/proc/radiate() + var/radiation_level = rand(15, 35) + for(var/z in using_map.station_levels) + SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) + +/datum/event2/event/radiation_storm/end() + command_announcement.Announce("The station has passed the radiation belt. \ + Please allow for up to one minute while radiation levels dissipate, and report to \ + medbay if you experience any unusual symptoms. Maintenance will lose all \ + access again shortly.", "Anomaly Alert") + addtimer(CALLBACK(src, PROC_REF(maint_callback)), 2 MINUTES) + +/datum/event2/event/radiation_storm/proc/maint_callback() + revoke_maint_all_access() + + +// There is no actual radiation during a fake storm. +/datum/event2/event/radiation_storm/fake/radiate() + return diff --git a/code/modules/gamemaster/event2/events/everyone/random_antag.dm b/code/modules/gamemaster/event2/events/everyone/random_antag.dm index fe3b58be8c..205c78923b 100644 --- a/code/modules/gamemaster/event2/events/everyone/random_antag.dm +++ b/code/modules/gamemaster/event2/events/everyone/random_antag.dm @@ -1,31 +1,31 @@ -// No idea if this is needed for autotraitor or not. -// If it is, it shouldn't depend on the event system, but fixing that would be it's own project. -// If not, it can stay off until an admin wants to play with it. - -/datum/event2/meta/random_antagonist - name = "random antagonist" - enabled = FALSE - reusable = TRUE - chaos = 0 // This is zero due to the event system not being able to know if an antag actually got spawned or not. - departments = list(DEPARTMENT_EVERYONE) - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/random_antagonist - -// This has an abnormally high weight due to antags being very important for the round, -// however the weight will decay with more antags, and more attempts to add antags. -/datum/event2/meta/random_antagonist/get_weight() - var/antags = metric.count_all_antags() - return 200 / (antags + times_ran + 1) - - - -// The random spawn proc on the antag datum will handle announcing the spawn and whatnot, in theory. -/datum/event2/event/random_antagonist/start() - var/list/valid_types = list() - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(antag.flags & ANTAG_RANDSPAWN) - valid_types |= antag - if(valid_types.len) - var/datum/antagonist/antag = pick(valid_types) - antag.attempt_random_spawn() +// No idea if this is needed for autotraitor or not. +// If it is, it shouldn't depend on the event system, but fixing that would be it's own project. +// If not, it can stay off until an admin wants to play with it. + +/datum/event2/meta/random_antagonist + name = "random antagonist" + enabled = FALSE + reusable = TRUE + chaos = 0 // This is zero due to the event system not being able to know if an antag actually got spawned or not. + departments = list(DEPARTMENT_EVERYONE) + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/random_antagonist + +// This has an abnormally high weight due to antags being very important for the round, +// however the weight will decay with more antags, and more attempts to add antags. +/datum/event2/meta/random_antagonist/get_weight() + var/antags = metric.count_all_antags() + return 200 / (antags + times_ran + 1) + + + +// The random spawn proc on the antag datum will handle announcing the spawn and whatnot, in theory. +/datum/event2/event/random_antagonist/start() + var/list/valid_types = list() + for(var/antag_type in all_antag_types) + var/datum/antagonist/antag = all_antag_types[antag_type] + if(antag.flags & ANTAG_RANDSPAWN) + valid_types |= antag + if(valid_types.len) + var/datum/antagonist/antag = pick(valid_types) + antag.attempt_random_spawn() diff --git a/code/modules/gamemaster/event2/events/everyone/solar_storm.dm b/code/modules/gamemaster/event2/events/everyone/solar_storm.dm index bfc35440a3..809e131911 100644 --- a/code/modules/gamemaster/event2/events/everyone/solar_storm.dm +++ b/code/modules/gamemaster/event2/events/everyone/solar_storm.dm @@ -1,52 +1,52 @@ -/datum/event2/meta/solar_storm - name = "solar storm" - reusable = TRUE - event_type = /datum/event2/event/solar_storm - -/datum/event2/meta/solar_storm/get_weight() - var/population_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 - var/space_factor = metric.count_all_space_mobs() * 50 - return (20 + population_factor + space_factor) / (times_ran + 1) - - -/datum/event2/event/solar_storm - start_delay_lower_bound = 1 MINUTE - start_delay_upper_bound = 1 MINUTE - length_lower_bound = 2 MINUTES - length_upper_bound = 4 MINUTES - var/base_solar_gen_rate = null - -/datum/event2/event/solar_storm/announce() - command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. \ - Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') - adjust_solar_output(1.5) - -/datum/event2/event/solar_storm/start() - command_announcement.Announce("The solar storm has reached the station. Please refrain from EVA and remain inside the station until it has passed.", "Anomaly Alert") - adjust_solar_output(5) - -/datum/event2/event/solar_storm/event_tick() - radiate() - -/datum/event2/event/solar_storm/end() - command_announcement.Announce("The solar storm has passed the station. It is now safe to resume EVA activities. \ - Please report to medbay if you experience any unusual symptoms.", "Anomaly Alert") - adjust_solar_output(1) - -/datum/event2/event/solar_storm/proc/adjust_solar_output(var/mult = 1) - if(isnull(base_solar_gen_rate)) - base_solar_gen_rate = GLOB.solar_gen_rate - GLOB.solar_gen_rate = mult * base_solar_gen_rate - -/datum/event2/event/solar_storm/proc/radiate() - // Note: Too complicated to be worth trying to use the radiation system for this. Its only in space anyway, so we make an exception in this case. - for(var/mob/living/L in player_list) - var/turf/T = get_turf(L) - if(!T) - continue - - if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) //Make sure you're in a space area or on a space turf - continue - - //Todo: Apply some burn damage from the heat of the sun. Until then, enjoy some moderate radiation. - L.rad_act(rand(15, 30)) +/datum/event2/meta/solar_storm + name = "solar storm" + reusable = TRUE + event_type = /datum/event2/event/solar_storm + +/datum/event2/meta/solar_storm/get_weight() + var/population_factor = metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10 + var/space_factor = metric.count_all_space_mobs() * 50 + return (20 + population_factor + space_factor) / (times_ran + 1) + + +/datum/event2/event/solar_storm + start_delay_lower_bound = 1 MINUTE + start_delay_upper_bound = 1 MINUTE + length_lower_bound = 2 MINUTES + length_upper_bound = 4 MINUTES + var/base_solar_gen_rate = null + +/datum/event2/event/solar_storm/announce() + command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. \ + Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') + adjust_solar_output(1.5) + +/datum/event2/event/solar_storm/start() + command_announcement.Announce("The solar storm has reached the station. Please refrain from EVA and remain inside the station until it has passed.", "Anomaly Alert") + adjust_solar_output(5) + +/datum/event2/event/solar_storm/event_tick() + radiate() + +/datum/event2/event/solar_storm/end() + command_announcement.Announce("The solar storm has passed the station. It is now safe to resume EVA activities. \ + Please report to medbay if you experience any unusual symptoms.", "Anomaly Alert") + adjust_solar_output(1) + +/datum/event2/event/solar_storm/proc/adjust_solar_output(var/mult = 1) + if(isnull(base_solar_gen_rate)) + base_solar_gen_rate = GLOB.solar_gen_rate + GLOB.solar_gen_rate = mult * base_solar_gen_rate + +/datum/event2/event/solar_storm/proc/radiate() + // Note: Too complicated to be worth trying to use the radiation system for this. Its only in space anyway, so we make an exception in this case. + for(var/mob/living/L in player_list) + var/turf/T = get_turf(L) + if(!T) + continue + + if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) //Make sure you're in a space area or on a space turf + continue + + //Todo: Apply some burn damage from the heat of the sun. Until then, enjoy some moderate radiation. + L.rad_act(rand(15, 30)) diff --git a/code/modules/gamemaster/event2/events/everyone/sudden_weather_shift.dm b/code/modules/gamemaster/event2/events/everyone/sudden_weather_shift.dm index 2d83209612..4c767fbb93 100644 --- a/code/modules/gamemaster/event2/events/everyone/sudden_weather_shift.dm +++ b/code/modules/gamemaster/event2/events/everyone/sudden_weather_shift.dm @@ -1,45 +1,45 @@ -/datum/event2/meta/sudden_weather_shift - name = "sudden weather shift" - departments = list(DEPARTMENT_EVERYONE) - reusable = TRUE - event_type = /datum/event2/event/sudden_weather_shift - -/datum/event2/meta/sudden_weather_shift/get_weight() - // The proc name is a bit misleading, it only counts players outside, not all mobs. - return (metric.count_all_outdoor_mobs() * 20) / (times_ran + 1) - -/datum/event2/event/sudden_weather_shift - start_delay_lower_bound = 30 SECONDS - start_delay_upper_bound = 1 MINUTE - var/datum/planet/chosen_planet = null - -/datum/event2/event/sudden_weather_shift/set_up() - if(!LAZYLEN(SSplanets.planets)) - log_debug("Weather shift event was ran when no planets exist. Aborting.") - abort() - return - - chosen_planet = pick(SSplanets.planets) - -/datum/event2/event/sudden_weather_shift/announce() - if(!chosen_planet) - return - command_announcement.Announce("Local weather patterns on [chosen_planet.name] suggest that a \ - sudden atmospheric fluctuation has occurred. All groundside personnel should be wary of \ - rapidly deteriorating conditions.", "Weather Alert") - -/datum/event2/event/sudden_weather_shift/start() - // Using the roundstart weather list is handy, because it avoids the chance of choosing a bus-only weather. - // It also makes this event generic and suitable for other planets besides the main one, with no additional code needed. - // Only flaw is that roundstart weathers are -usually- safe ones, but we can fix that by tweaking a copy of it. - var/list/weather_choices = chosen_planet.weather_holder.roundstart_weather_chances.Copy() - var/list/new_weather_weights = list() - - // A lazy way of inverting the odds is to use some division. - for(var/weather in weather_choices) - new_weather_weights[weather] = 100 / weather_choices[weather] - - // Now choose a new weather. - var/new_weather = pickweight(new_weather_weights) - log_debug("Sudden weather shift event is now changing [chosen_planet.name]'s weather to [new_weather].") - chosen_planet.weather_holder.change_weather(new_weather) +/datum/event2/meta/sudden_weather_shift + name = "sudden weather shift" + departments = list(DEPARTMENT_EVERYONE) + reusable = TRUE + event_type = /datum/event2/event/sudden_weather_shift + +/datum/event2/meta/sudden_weather_shift/get_weight() + // The proc name is a bit misleading, it only counts players outside, not all mobs. + return (metric.count_all_outdoor_mobs() * 20) / (times_ran + 1) + +/datum/event2/event/sudden_weather_shift + start_delay_lower_bound = 30 SECONDS + start_delay_upper_bound = 1 MINUTE + var/datum/planet/chosen_planet = null + +/datum/event2/event/sudden_weather_shift/set_up() + if(!LAZYLEN(SSplanets.planets)) + log_debug("Weather shift event was ran when no planets exist. Aborting.") + abort() + return + + chosen_planet = pick(SSplanets.planets) + +/datum/event2/event/sudden_weather_shift/announce() + if(!chosen_planet) + return + command_announcement.Announce("Local weather patterns on [chosen_planet.name] suggest that a \ + sudden atmospheric fluctuation has occurred. All groundside personnel should be wary of \ + rapidly deteriorating conditions.", "Weather Alert") + +/datum/event2/event/sudden_weather_shift/start() + // Using the roundstart weather list is handy, because it avoids the chance of choosing a bus-only weather. + // It also makes this event generic and suitable for other planets besides the main one, with no additional code needed. + // Only flaw is that roundstart weathers are -usually- safe ones, but we can fix that by tweaking a copy of it. + var/list/weather_choices = chosen_planet.weather_holder.roundstart_weather_chances.Copy() + var/list/new_weather_weights = list() + + // A lazy way of inverting the odds is to use some division. + for(var/weather in weather_choices) + new_weather_weights[weather] = 100 / weather_choices[weather] + + // Now choose a new weather. + var/new_weather = pickweight(new_weather_weights) + log_debug("Sudden weather shift event is now changing [chosen_planet.name]'s weather to [new_weather].") + chosen_planet.weather_holder.change_weather(new_weather) diff --git a/code/modules/gamemaster/event2/events/ghost_pod_spawner.dm b/code/modules/gamemaster/event2/events/ghost_pod_spawner.dm index 4c462d06d6..32de1e4a44 100644 --- a/code/modules/gamemaster/event2/events/ghost_pod_spawner.dm +++ b/code/modules/gamemaster/event2/events/ghost_pod_spawner.dm @@ -1,21 +1,21 @@ -// Generic subtype for events that make ghost pods. - -/datum/event2/event/ghost_pod_spawner - var/pod_type = null - var/list/desired_turf_areas = list() // If this is left empty, it will default to a global list of 'station' turfs. - var/list/free_turfs = list() - -/datum/event2/event/ghost_pod_spawner/set_up() - free_turfs = find_random_turfs(5, desired_turf_areas) - - if(!free_turfs.len) - log_debug("Ghost Pod Spawning event failed to find a place to spawn. Aborting.") - abort() - return - -/datum/event2/event/ghost_pod_spawner/start() - var/obj/structure/ghost_pod/pod = new pod_type(pick(free_turfs)) - post_pod_creation(pod) - -// Override to do things to the pod after it's spawned. +// Generic subtype for events that make ghost pods. + +/datum/event2/event/ghost_pod_spawner + var/pod_type = null + var/list/desired_turf_areas = list() // If this is left empty, it will default to a global list of 'station' turfs. + var/list/free_turfs = list() + +/datum/event2/event/ghost_pod_spawner/set_up() + free_turfs = find_random_turfs(5, desired_turf_areas) + + if(!free_turfs.len) + log_debug("Ghost Pod Spawning event failed to find a place to spawn. Aborting.") + abort() + return + +/datum/event2/event/ghost_pod_spawner/start() + var/obj/structure/ghost_pod/pod = new pod_type(pick(free_turfs)) + post_pod_creation(pod) + +// Override to do things to the pod after it's spawned. /datum/event2/event/ghost_pod_spawner/proc/post_pod_creation(obj/structure/ghost_pod/pod) \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/legacy/legacy.dm b/code/modules/gamemaster/event2/events/legacy/legacy.dm index 6f70cafa85..736c00b8fe 100644 --- a/code/modules/gamemaster/event2/events/legacy/legacy.dm +++ b/code/modules/gamemaster/event2/events/legacy/legacy.dm @@ -1,63 +1,63 @@ -// This is a somewhat special type of event, that bridges to the old event datum and makes it work with the new system. -// It acts as a compatability layer between the old event, and the new GM system. -// This is possible because the new datum is mostly a superset of the old one. -/datum/event2/event/legacy - var/datum/event/legacy_event = null - - // Used to emulate legacy's `activeFor` tick counter. - var/tick_count = 0 - - // How 'severe' the legacy event should be. This should only be used for legacy events, as severity is an outdated concept for the GM system. - var/severity = EVENT_LEVEL_MODERATE - -/datum/event2/meta/legacy/get_weight() - return 50 - -/datum/event2/event/legacy/process() - ..() - tick_count++ - -/datum/event2/event/legacy/set_up() - legacy_event = new legacy_event(null, external_use = TRUE) - legacy_event.severity = severity - legacy_event.setup() - -/datum/event2/event/legacy/should_announce() - return tick_count >= legacy_event.announceWhen - -/datum/event2/event/legacy/announce() - legacy_event.announce() - - -// Legacy events don't tick before they start, so we don't need to do `wait_tick()`. - -/datum/event2/event/legacy/should_start() - return tick_count >= legacy_event.startWhen - -/datum/event2/event/legacy/start() - legacy_event.start() - -/datum/event2/event/legacy/event_tick() - legacy_event.tick() - - -/datum/event2/event/legacy/should_end() - return tick_count >= legacy_event.endWhen - -/datum/event2/event/legacy/end() - legacy_event.end() - -/datum/event2/event/legacy/finish() - legacy_event.kill(external_use = TRUE) - ..() - -// Proof of concept. -/* -/datum/event2/meta/legacy_gravity - name = "gravity (legacy)" - reusable = TRUE - event_type = /datum/event2/event/legacy/gravity - -/datum/event2/event/legacy/gravity - legacy_event = /datum/event/gravity +// This is a somewhat special type of event, that bridges to the old event datum and makes it work with the new system. +// It acts as a compatability layer between the old event, and the new GM system. +// This is possible because the new datum is mostly a superset of the old one. +/datum/event2/event/legacy + var/datum/event/legacy_event = null + + // Used to emulate legacy's `activeFor` tick counter. + var/tick_count = 0 + + // How 'severe' the legacy event should be. This should only be used for legacy events, as severity is an outdated concept for the GM system. + var/severity = EVENT_LEVEL_MODERATE + +/datum/event2/meta/legacy/get_weight() + return 50 + +/datum/event2/event/legacy/process() + ..() + tick_count++ + +/datum/event2/event/legacy/set_up() + legacy_event = new legacy_event(null, external_use = TRUE) + legacy_event.severity = severity + legacy_event.setup() + +/datum/event2/event/legacy/should_announce() + return tick_count >= legacy_event.announceWhen + +/datum/event2/event/legacy/announce() + legacy_event.announce() + + +// Legacy events don't tick before they start, so we don't need to do `wait_tick()`. + +/datum/event2/event/legacy/should_start() + return tick_count >= legacy_event.startWhen + +/datum/event2/event/legacy/start() + legacy_event.start() + +/datum/event2/event/legacy/event_tick() + legacy_event.tick() + + +/datum/event2/event/legacy/should_end() + return tick_count >= legacy_event.endWhen + +/datum/event2/event/legacy/end() + legacy_event.end() + +/datum/event2/event/legacy/finish() + legacy_event.kill(external_use = TRUE) + ..() + +// Proof of concept. +/* +/datum/event2/meta/legacy_gravity + name = "gravity (legacy)" + reusable = TRUE + event_type = /datum/event2/event/legacy/gravity + +/datum/event2/event/legacy/gravity + legacy_event = /datum/event/gravity */ \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/medical/appendicitis.dm b/code/modules/gamemaster/event2/events/medical/appendicitis.dm index f213d2fd01..cf626c2cd0 100644 --- a/code/modules/gamemaster/event2/events/medical/appendicitis.dm +++ b/code/modules/gamemaster/event2/events/medical/appendicitis.dm @@ -1,36 +1,36 @@ -/datum/event2/meta/appendicitis - name = "appendicitis" - departments = list(DEPARTMENT_MEDICAL) - chaos = 40 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/appendicitis - -/datum/event2/meta/appendicitis/get_weight() - var/list/doctors = metric.get_people_with_job(/datum/job/doctor) - - doctors -= metric.get_people_with_alt_title(/datum/job/doctor, /datum/alt_title/nurse) - doctors -= metric.get_people_with_alt_title(/datum/job/doctor, /datum/alt_title/virologist) - doctors += metric.get_people_with_job(/datum/job/cmo) - - return doctors.len * 10 - - - -/datum/event2/event/appendicitis/start() - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) - // Don't do it to SSD people. - if(!H.client) - continue - - // Or antags / bellied. - if(player_is_antag(H.mind) || isbelly(H.loc)) - continue - - // Or doctors (otherwise it could be possible for the only surgeon to need surgery). - if(H in metric.get_people_with_job(/datum/job/doctor) ) - continue - - if(H.appendicitis()) - log_debug("Appendicitis event gave appendicitis to \the [H].") - return - log_debug("Appendicitis event could not find a valid victim.") +/datum/event2/meta/appendicitis + name = "appendicitis" + departments = list(DEPARTMENT_MEDICAL) + chaos = 40 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/appendicitis + +/datum/event2/meta/appendicitis/get_weight() + var/list/doctors = metric.get_people_with_job(/datum/job/doctor) + + doctors -= metric.get_people_with_alt_title(/datum/job/doctor, /datum/alt_title/nurse) + doctors -= metric.get_people_with_alt_title(/datum/job/doctor, /datum/alt_title/virologist) + doctors += metric.get_people_with_job(/datum/job/cmo) + + return doctors.len * 10 + + + +/datum/event2/event/appendicitis/start() + for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + // Don't do it to SSD people. + if(!H.client) + continue + + // Or antags / bellied. + if(player_is_antag(H.mind) || isbelly(H.loc)) + continue + + // Or doctors (otherwise it could be possible for the only surgeon to need surgery). + if(H in metric.get_people_with_job(/datum/job/doctor) ) + continue + + if(H.appendicitis()) + log_debug("Appendicitis event gave appendicitis to \the [H].") + return + log_debug("Appendicitis event could not find a valid victim.") diff --git a/code/modules/gamemaster/event2/events/mob_spawning.dm b/code/modules/gamemaster/event2/events/mob_spawning.dm index 35321cd2f0..16ed6a3150 100644 --- a/code/modules/gamemaster/event2/events/mob_spawning.dm +++ b/code/modules/gamemaster/event2/events/mob_spawning.dm @@ -1,97 +1,97 @@ -// A subtype that involves spawning mobs like carp, rogue drones, spiders, etc. - -/datum/event2/event/mob_spawning - var/list/spawned_mobs = list() - var/use_map_edge_with_landmarks = TRUE // Use both landmarks and spawning from the "edge" of the map. Otherise uses landmarks over map edge. - var/landmark_name = "carpspawn" // Which landmark to use for spawning. - -// Spawns a specific mob from the "edge" of the map, and makes them go towards the station. -// Can also use landmarks, if desired. -/datum/event2/event/mob_spawning/proc/spawn_mobs_in_space(mob_type, number_of_groups, min_size_of_group, max_size_of_group, dir) - if(isnull(dir)) - dir = pick(GLOB.cardinal) - - var/list/valid_z_levels = get_location_z_levels() - valid_z_levels -= using_map.sealed_levels // Space levels only please! - - // Check if any landmarks exist! - var/list/spawn_locations = list() - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == landmark_name && (C.z in valid_z_levels)) - spawn_locations.Add(C.loc) - - var/prioritize_landmarks = TRUE - if(use_map_edge_with_landmarks && prob(50)) - prioritize_landmarks = FALSE // One in two chance to come from the edge instead. - - if(spawn_locations.len && prioritize_landmarks) // Okay we've got landmarks, lets use those! - shuffle_inplace(spawn_locations) - number_of_groups = min(number_of_groups, spawn_locations.len) - var/i = 1 - while (i <= number_of_groups) - var/group_size = rand(min_size_of_group, max_size_of_group) - for (var/j = 0, j < group_size, j++) - spawn_one_mob(spawn_locations[i], mob_type) - i++ - return - - // Okay we did *not* have any landmarks, or we're being told to do both, so lets do our best! - var/i = 1 - while(i <= number_of_groups) - var/z_level = pick(valid_z_levels) - var/group_size = rand(min_size_of_group, max_size_of_group) - var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), z_level) - var/turf/group_center = pick_random_edge_turf(dir, z_level, TRANSITIONEDGE + 2) - var/list/turfs = getcircle(group_center, 2) - for(var/j = 0, j < group_size, j++) - // On larger maps, BYOND gets in the way of letting simple_mobs path to the closest edge of the station. - // So instead we need to simulate the mob's travel, then spawn them somewhere still hopefully off screen. - - // Find a turf to be the edge of the map. - var/turf/edge_of_map = turfs[(i % turfs.len) + 1] - - // Now walk a straight line towards the center of the map, until we find a non-space tile. - var/turf/edge_of_station = null - - var/list/space_line = list() // This holds all space tiles on the line. Will be used a bit later. - for(var/turf/T in getline(edge_of_map, map_center)) - if(!T.is_space()) - break // We found the station! - space_line += T - edge_of_station = T - - // Now put the mob somewhere on the line, hopefully off screen. - // I wish this was higher than 8 but the BYOND internal A* algorithm gives up sometimes when using - // 16 or more. - // In the future, a new AI stance that handles long distance travel using getline() could work. - var/max_distance = 8 - var/turf/spawn_turf = null - for(var/turf/point as anything in space_line) - if(get_dist(point, edge_of_station) <= max_distance) - spawn_turf = point - break - - if(spawn_turf) - // Finally, make the simple_mob go towards the edge of the station. - var/mob/living/simple_mob/M = spawn_one_mob(spawn_turf, mob_type) - if(edge_of_station) - M.ai_holder?.give_destination(edge_of_station) // Ask simple_mobs to fly towards the edge of the station. - i++ - -/datum/event2/event/mob_spawning/proc/spawn_one_mob(new_loc, mob_type) - var/mob/living/simple_mob/M = new mob_type(new_loc) - GLOB.destroyed_event.register(M, src, PROC_REF(on_mob_destruction)) - spawned_mobs += M - return M - -// Counts living simple_mobs spawned by this event. -/datum/event2/event/mob_spawning/proc/count_spawned_mobs() - . = 0 - for(var/mob/living/simple_mob/M as anything in spawned_mobs) - if(!QDELETED(M) && M.stat != DEAD) - . += 1 - -// If simple_mob is bomphed, remove it from the list. -/datum/event2/event/mob_spawning/proc/on_mob_destruction(mob/M) - spawned_mobs -= M - GLOB.destroyed_event.unregister(M, src, PROC_REF(on_mob_destruction)) +// A subtype that involves spawning mobs like carp, rogue drones, spiders, etc. + +/datum/event2/event/mob_spawning + var/list/spawned_mobs = list() + var/use_map_edge_with_landmarks = TRUE // Use both landmarks and spawning from the "edge" of the map. Otherise uses landmarks over map edge. + var/landmark_name = "carpspawn" // Which landmark to use for spawning. + +// Spawns a specific mob from the "edge" of the map, and makes them go towards the station. +// Can also use landmarks, if desired. +/datum/event2/event/mob_spawning/proc/spawn_mobs_in_space(mob_type, number_of_groups, min_size_of_group, max_size_of_group, dir) + if(isnull(dir)) + dir = pick(GLOB.cardinal) + + var/list/valid_z_levels = get_location_z_levels() + valid_z_levels -= using_map.sealed_levels // Space levels only please! + + // Check if any landmarks exist! + var/list/spawn_locations = list() + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == landmark_name && (C.z in valid_z_levels)) + spawn_locations.Add(C.loc) + + var/prioritize_landmarks = TRUE + if(use_map_edge_with_landmarks && prob(50)) + prioritize_landmarks = FALSE // One in two chance to come from the edge instead. + + if(spawn_locations.len && prioritize_landmarks) // Okay we've got landmarks, lets use those! + shuffle_inplace(spawn_locations) + number_of_groups = min(number_of_groups, spawn_locations.len) + var/i = 1 + while (i <= number_of_groups) + var/group_size = rand(min_size_of_group, max_size_of_group) + for (var/j = 0, j < group_size, j++) + spawn_one_mob(spawn_locations[i], mob_type) + i++ + return + + // Okay we did *not* have any landmarks, or we're being told to do both, so lets do our best! + var/i = 1 + while(i <= number_of_groups) + var/z_level = pick(valid_z_levels) + var/group_size = rand(min_size_of_group, max_size_of_group) + var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), z_level) + var/turf/group_center = pick_random_edge_turf(dir, z_level, TRANSITIONEDGE + 2) + var/list/turfs = getcircle(group_center, 2) + for(var/j = 0, j < group_size, j++) + // On larger maps, BYOND gets in the way of letting simple_mobs path to the closest edge of the station. + // So instead we need to simulate the mob's travel, then spawn them somewhere still hopefully off screen. + + // Find a turf to be the edge of the map. + var/turf/edge_of_map = turfs[(i % turfs.len) + 1] + + // Now walk a straight line towards the center of the map, until we find a non-space tile. + var/turf/edge_of_station = null + + var/list/space_line = list() // This holds all space tiles on the line. Will be used a bit later. + for(var/turf/T in getline(edge_of_map, map_center)) + if(!T.is_space()) + break // We found the station! + space_line += T + edge_of_station = T + + // Now put the mob somewhere on the line, hopefully off screen. + // I wish this was higher than 8 but the BYOND internal A* algorithm gives up sometimes when using + // 16 or more. + // In the future, a new AI stance that handles long distance travel using getline() could work. + var/max_distance = 8 + var/turf/spawn_turf = null + for(var/turf/point as anything in space_line) + if(get_dist(point, edge_of_station) <= max_distance) + spawn_turf = point + break + + if(spawn_turf) + // Finally, make the simple_mob go towards the edge of the station. + var/mob/living/simple_mob/M = spawn_one_mob(spawn_turf, mob_type) + if(edge_of_station) + M.ai_holder?.give_destination(edge_of_station) // Ask simple_mobs to fly towards the edge of the station. + i++ + +/datum/event2/event/mob_spawning/proc/spawn_one_mob(new_loc, mob_type) + var/mob/living/simple_mob/M = new mob_type(new_loc) + GLOB.destroyed_event.register(M, src, PROC_REF(on_mob_destruction)) + spawned_mobs += M + return M + +// Counts living simple_mobs spawned by this event. +/datum/event2/event/mob_spawning/proc/count_spawned_mobs() + . = 0 + for(var/mob/living/simple_mob/M as anything in spawned_mobs) + if(!QDELETED(M) && M.stat != DEAD) + . += 1 + +// If simple_mob is bomphed, remove it from the list. +/datum/event2/event/mob_spawning/proc/on_mob_destruction(mob/M) + spawned_mobs -= M + GLOB.destroyed_event.unregister(M, src, PROC_REF(on_mob_destruction)) diff --git a/code/modules/gamemaster/event2/events/security/carp_migration.dm b/code/modules/gamemaster/event2/events/security/carp_migration.dm index 12f08f3edd..77e72d044e 100644 --- a/code/modules/gamemaster/event2/events/security/carp_migration.dm +++ b/code/modules/gamemaster/event2/events/security/carp_migration.dm @@ -1,49 +1,49 @@ -/datum/event2/meta/carp_migration - name = "carp migration" - event_class = "carp" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaos = 30 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/mob_spawning/carp_migration - -/datum/event2/meta/carp_migration/get_weight() - return 10 + (metric.count_people_in_department(DEPARTMENT_SECURITY) * 20) + (metric.count_all_space_mobs() * 40) - - -/datum/event2/event/mob_spawning/carp_migration - announce_delay_lower_bound = 1 MINUTE - announce_delay_upper_bound = 2 MINUTES - length_lower_bound = 30 SECONDS - length_upper_bound = 1 MINUTE - var/carp_cap = 30 // No more than this many (living) carp can exist from this event. - var/carp_smallest_group = 3 - var/carp_largest_group = 5 - var/carp_wave_cooldown = 10 SECONDS - - var/last_carp_wave_time = null // Last world.time we spawned a carp wave. - -/datum/event2/event/mob_spawning/carp_migration/announce() - var/announcement = "Unknown biological entities been detected near \the [location_name()], please stand-by." - command_announcement.Announce(announcement, "Lifesign Alert") - -/datum/event2/event/mob_spawning/carp_migration/event_tick() - if(last_carp_wave_time + carp_wave_cooldown > world.time) - return - last_carp_wave_time = world.time - - if(count_spawned_mobs() < carp_cap) - spawn_mobs_in_space( - mob_type = /mob/living/simple_mob/animal/space/carp/event, - number_of_groups = rand(1, 4), - min_size_of_group = carp_smallest_group, - max_size_of_group = carp_largest_group - ) - -/datum/event2/event/mob_spawning/carp_migration/end() - // Clean up carp that died in space for some reason. - for(var/mob/living/simple_mob/SM in spawned_mobs) - if(SM.stat == DEAD) - var/turf/T = get_turf(SM) - if(istype(T, /turf/space)) - if(prob(75)) - qdel(SM) +/datum/event2/meta/carp_migration + name = "carp migration" + event_class = "carp" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaos = 30 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/mob_spawning/carp_migration + +/datum/event2/meta/carp_migration/get_weight() + return 10 + (metric.count_people_in_department(DEPARTMENT_SECURITY) * 20) + (metric.count_all_space_mobs() * 40) + + +/datum/event2/event/mob_spawning/carp_migration + announce_delay_lower_bound = 1 MINUTE + announce_delay_upper_bound = 2 MINUTES + length_lower_bound = 30 SECONDS + length_upper_bound = 1 MINUTE + var/carp_cap = 30 // No more than this many (living) carp can exist from this event. + var/carp_smallest_group = 3 + var/carp_largest_group = 5 + var/carp_wave_cooldown = 10 SECONDS + + var/last_carp_wave_time = null // Last world.time we spawned a carp wave. + +/datum/event2/event/mob_spawning/carp_migration/announce() + var/announcement = "Unknown biological entities been detected near \the [location_name()], please stand-by." + command_announcement.Announce(announcement, "Lifesign Alert") + +/datum/event2/event/mob_spawning/carp_migration/event_tick() + if(last_carp_wave_time + carp_wave_cooldown > world.time) + return + last_carp_wave_time = world.time + + if(count_spawned_mobs() < carp_cap) + spawn_mobs_in_space( + mob_type = /mob/living/simple_mob/animal/space/carp/event, + number_of_groups = rand(1, 4), + min_size_of_group = carp_smallest_group, + max_size_of_group = carp_largest_group + ) + +/datum/event2/event/mob_spawning/carp_migration/end() + // Clean up carp that died in space for some reason. + for(var/mob/living/simple_mob/SM in spawned_mobs) + if(SM.stat == DEAD) + var/turf/T = get_turf(SM) + if(istype(T, /turf/space)) + if(prob(75)) + qdel(SM) diff --git a/code/modules/gamemaster/event2/events/security/drill_announcement.dm b/code/modules/gamemaster/event2/events/security/drill_announcement.dm index 271e2d75f1..f44cf134d2 100644 --- a/code/modules/gamemaster/event2/events/security/drill_announcement.dm +++ b/code/modules/gamemaster/event2/events/security/drill_announcement.dm @@ -1,22 +1,22 @@ -/datum/event2/meta/security_drill - name = "security drill" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT // Don't run if we just got hit by meteors. - event_type = /datum/event2/event/security_drill - -/datum/event2/meta/security_drill/get_weight() - var/sec = metric.count_people_in_department(DEPARTMENT_SECURITY) - var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - - if(!sec) // If there's no security, then there is no drill. - return 0 - if(everyone - sec < 0) // If there's no non-sec, then there is no drill. - return 0 - - // Each security player adds +5 weight, while non-security adds +1.5. - return (sec * 5) + ((everyone - sec) * 1.5) - -/datum/event2/event/security_drill/announce() - command_announcement.Announce("[pick("A NanoTrasen security director", "A Vir-Gov correspondant", "Local Sif authoritiy")] \ - has advised the enactment of [pick("a rampant wildlife", "a fire", "a hostile boarding", \ - "a bomb", "an emergent intelligence")] drill with the personnel onboard \the [location_name()].", "Security Advisement") +/datum/event2/meta/security_drill + name = "security drill" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT // Don't run if we just got hit by meteors. + event_type = /datum/event2/event/security_drill + +/datum/event2/meta/security_drill/get_weight() + var/sec = metric.count_people_in_department(DEPARTMENT_SECURITY) + var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) + + if(!sec) // If there's no security, then there is no drill. + return 0 + if(everyone - sec < 0) // If there's no non-sec, then there is no drill. + return 0 + + // Each security player adds +5 weight, while non-security adds +1.5. + return (sec * 5) + ((everyone - sec) * 1.5) + +/datum/event2/event/security_drill/announce() + command_announcement.Announce("[pick("A NanoTrasen security director", "A Vir-Gov correspondant", "Local Sif authoritiy")] \ + has advised the enactment of [pick("a rampant wildlife", "a fire", "a hostile boarding", \ + "a bomb", "an emergent intelligence")] drill with the personnel onboard \the [location_name()].", "Security Advisement") diff --git a/code/modules/gamemaster/event2/events/security/prison_break.dm b/code/modules/gamemaster/event2/events/security/prison_break.dm index a08f93a085..7f85e71657 100644 --- a/code/modules/gamemaster/event2/events/security/prison_break.dm +++ b/code/modules/gamemaster/event2/events/security/prison_break.dm @@ -1,234 +1,234 @@ - -// Type for inheritence. -// It has a null name, so it won't be ran. -/datum/event2/meta/prison_break - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - // The weight system can check if people are in these areas. - // This isn't the same list as what the event itself will break, as the event will also - // break open areas inbetween the holding area and the public hallway, like the brig area verses - // the prison area. - var/list/relevant_areas = list() - var/list/irrelevant_areas = list() - -/datum/event2/meta/prison_break/get_weight() - // First, don't do this if nobody can fix the doors. - var/door_fixers = metric.count_people_in_department(DEPARTMENT_ENGINEERING) + metric.count_people_in_department(DEPARTMENT_SYNTHETIC) - if(!door_fixers) - return 0 - var/list/afflicted_departments = departments.Copy() - var/afflicted_crew = 0 - - afflicted_departments -= DEPARTMENT_SYNTHETIC - for(var/D in afflicted_departments) - afflicted_crew += metric.count_people_in_department(D) - - // Don't do it if nobody is around to ""appreciate"" it. - if(!afflicted_crew) - return 0 - - var/trapped = get_odds_from_trapped_mobs() - - return 10 + (door_fixers * 20) + (afflicted_crew * 10) + trapped - -// This is overriden to have specific events trigger more often based on who is trapped in where, if applicable. -/datum/event2/meta/prison_break/proc/get_odds_from_trapped_mobs() - return 0 - -/datum/event2/meta/prison_break/proc/is_mob_in_relevant_area(mob/living/L) - var/area/A = get_area(L) - if(!A) - return FALSE - if(is_type_in_list(A, relevant_areas) && !is_type_in_list(A, irrelevant_areas)) - return TRUE - return FALSE - -/datum/event2/meta/prison_break/brig - name = "prison break - brig" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_SYNTHETIC) - event_type = /datum/event2/event/prison_break/brig - relevant_areas = list( - /area/security/prison, - /area/security/security_cell_hallway, - /area/security/security_processing, - /area/security/interrogation - ) - -/datum/event2/meta/prison_break/brig/get_odds_from_trapped_mobs() - . = 0 - for(var/mob/living/L in player_list) - if(is_mob_in_relevant_area(L)) - // Don't count them if they're in security. - if(!(L in metric.count_people_in_department(DEPARTMENT_SECURITY))) - . += 40 - - -/datum/event2/meta/prison_break/armory - name = "prison break - armory" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_SYNTHETIC) - chaos = 40 // Potentially free guns. - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/prison_break/armory - -/datum/event2/meta/prison_break/bridge - name = "prison break - bridge" - departments = list(DEPARTMENT_COMMAND, DEPARTMENT_SYNTHETIC) - chaos = 40 // Potentially free spare ID. - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/prison_break/bridge - -/datum/event2/meta/prison_break/xenobio - name = "prison break - xenobio" - departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_SYNTHETIC) - chaos = 20 // This one is more likely to actually kill someone. - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/prison_break/xenobio - relevant_areas = list(/area/rnd/xenobiology) - irrelevant_areas = list( - /area/rnd/xenobiology/xenoflora, - /area/rnd/xenobiology/xenoflora_storage - ) - -/datum/event2/meta/prison_break/xenobio/get_odds_from_trapped_mobs() - . = 0 - for(var/mob/living/simple_mob/slime/xenobio/X in living_mob_list) - if(is_mob_in_relevant_area(X)) - . += 5 - - -/datum/event2/meta/prison_break/virology - name = "prison break - virology" - departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_SYNTHETIC) - event_type = /datum/event2/event/prison_break/virology - relevant_areas = list( - /area/medical/virology, - /area/medical/virologyaccess - ) - -/datum/event2/meta/prison_break/virology/get_odds_from_trapped_mobs() - . = 0 - for(var/mob/living/L in player_list) - if(is_mob_in_relevant_area(L)) - // Don't count them if they're in medical. - if(!(L in metric.count_people_in_department(DEPARTMENT_MEDICAL))) - . += 40 - - - - -/datum/event2/event/prison_break - start_delay_lower_bound = 3 MINUTES - start_delay_upper_bound = 4 MINUTES - length_lower_bound = 40 SECONDS - length_upper_bound = 1 MINUTE - var/area_display_name = null // A string used to describe the area being messed with. - var/containment_display_desc = null - var/list/areas_to_break = list() - var/list/area_types_to_break = null // Area types to include. - var/list/area_types_to_ignore = null // Area types to exclude, usually due to undesired inclusion from inheritence. - var/ignore_blast_doors = TRUE //CHOMP Edit - -/datum/event2/event/prison_break/brig - area_display_name = "Brig" - containment_display_desc = "imprisonment" - area_types_to_break = list( - /area/security/prison, - /area/security/brig, - /area/security/security_cell_hallway, - /area/security/security_processing, - /area/security/interrogation - ) - -/datum/event2/event/prison_break/armory - area_display_name = "Armory" - containment_display_desc = "protection" - area_types_to_break = list( - /area/security/brig, - /area/security/warden, - /area/security/evidence_storage, - /area/security/security_equiptment_storage, - /area/security/armoury, - /area/security/tactical - ) - -/datum/event2/event/prison_break/bridge - area_display_name = "Bridge" - containment_display_desc = "isolation" - area_types_to_break = list( - /area/bridge, - /area/bridge_hallway - ) - -/datum/event2/event/prison_break/xenobio - area_display_name = "Xenobiology" - containment_display_desc = "containment" - area_types_to_break = list(/area/rnd/xenobiology) - area_types_to_ignore = list( - /area/rnd/xenobiology/xenoflora, - /area/rnd/xenobiology/xenoflora_storage - ) - -/datum/event2/event/prison_break/virology - area_display_name = "Virology" - containment_display_desc = "quarantine" - area_types_to_break = list( - /area/medical/virology, - /area/medical/virologyaccess - ) - - -/datum/event2/event/prison_break/set_up() - for(var/area/A in world) - if(is_type_in_list(A, area_types_to_break) && !is_type_in_list(A, area_types_to_ignore)) - areas_to_break += A - - if(!areas_to_break.len) - log_debug("Prison Break event failed to find any areas to break. Aborting.") - abort() - return - -/datum/event2/event/prison_break/announce() - var/my_department = "[location_name()] Firewall Subroutines" - var/message = "An unknown malicious program has been detected in the [area_display_name] \ - lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised \ - within approximately three minutes. Direct intervention is required immediately. Disabling the \ - main breaker in the APCs will protect the APC's room from being compromised." - - for(var/obj/machinery/message_server/MS in machines) - MS.send_rc_message(DEPARTMENT_ENGINEERING, my_department, "[message]
                    ", "", "", 2) - - // Nobody reads the requests consoles so lets use the radio as well. - global_announcer.autosay(message, my_department, DEPARTMENT_ENGINEERING) - - for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, span("danger", "Malicious program detected in the [area_display_name] lighting and airlock control systems by [my_department]. \ - Disabling the main breaker in the APCs will protect the APC's room from being compromised.")) - - var/time_to_flicker = start_delay - 10 SECONDS - addtimer(CALLBACK(src, PROC_REF(flicker_area)), time_to_flicker) - - -/datum/event2/event/prison_break/proc/flicker_area() - for(var/area/A in areas_to_break) - var/obj/machinery/power/apc/apc = A.get_apc() - if(istype(apc) && apc.operating) //If the apc's off, it's a little hard to overload the lights. - for(var/obj/machinery/light/L in A) - L.flicker(10) - -/datum/event2/event/prison_break/start() - for(var/area/A in areas_to_break) - spawn(0) // So we don't block the ticker. - A.prison_break(TRUE, TRUE, !ignore_blast_doors) // Naming `open_blast_doors` causes mysterious runtimes. - -// There's between 40 seconds and one minute before the whole station knows. -// If there's a baddie engineer, they can choose to keep their early announcement to themselves and get a minute to exploit it. -/datum/event2/event/prison_break/end() - command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] was detected \ - in \the [location_name()] [area_display_name] [containment_display_desc] subroutines. Secure any compromised \ - areas immediately. AI involvement is recommended.", "[capitalize(containment_display_desc)] Alert") - - global_announcer.autosay( - "It is now safe to reactivate the APCs' main breakers inside [area_display_name].", - "[location_name()] Firewall Subroutines", - DEPARTMENT_ENGINEERING - ) + +// Type for inheritence. +// It has a null name, so it won't be ran. +/datum/event2/meta/prison_break + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + // The weight system can check if people are in these areas. + // This isn't the same list as what the event itself will break, as the event will also + // break open areas inbetween the holding area and the public hallway, like the brig area verses + // the prison area. + var/list/relevant_areas = list() + var/list/irrelevant_areas = list() + +/datum/event2/meta/prison_break/get_weight() + // First, don't do this if nobody can fix the doors. + var/door_fixers = metric.count_people_in_department(DEPARTMENT_ENGINEERING) + metric.count_people_in_department(DEPARTMENT_SYNTHETIC) + if(!door_fixers) + return 0 + var/list/afflicted_departments = departments.Copy() + var/afflicted_crew = 0 + + afflicted_departments -= DEPARTMENT_SYNTHETIC + for(var/D in afflicted_departments) + afflicted_crew += metric.count_people_in_department(D) + + // Don't do it if nobody is around to ""appreciate"" it. + if(!afflicted_crew) + return 0 + + var/trapped = get_odds_from_trapped_mobs() + + return 10 + (door_fixers * 20) + (afflicted_crew * 10) + trapped + +// This is overriden to have specific events trigger more often based on who is trapped in where, if applicable. +/datum/event2/meta/prison_break/proc/get_odds_from_trapped_mobs() + return 0 + +/datum/event2/meta/prison_break/proc/is_mob_in_relevant_area(mob/living/L) + var/area/A = get_area(L) + if(!A) + return FALSE + if(is_type_in_list(A, relevant_areas) && !is_type_in_list(A, irrelevant_areas)) + return TRUE + return FALSE + +/datum/event2/meta/prison_break/brig + name = "prison break - brig" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_SYNTHETIC) + event_type = /datum/event2/event/prison_break/brig + relevant_areas = list( + /area/security/prison, + /area/security/security_cell_hallway, + /area/security/security_processing, + /area/security/interrogation + ) + +/datum/event2/meta/prison_break/brig/get_odds_from_trapped_mobs() + . = 0 + for(var/mob/living/L in player_list) + if(is_mob_in_relevant_area(L)) + // Don't count them if they're in security. + if(!(L in metric.count_people_in_department(DEPARTMENT_SECURITY))) + . += 40 + + +/datum/event2/meta/prison_break/armory + name = "prison break - armory" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_SYNTHETIC) + chaos = 40 // Potentially free guns. + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/prison_break/armory + +/datum/event2/meta/prison_break/bridge + name = "prison break - bridge" + departments = list(DEPARTMENT_COMMAND, DEPARTMENT_SYNTHETIC) + chaos = 40 // Potentially free spare ID. + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/prison_break/bridge + +/datum/event2/meta/prison_break/xenobio + name = "prison break - xenobio" + departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_SYNTHETIC) + chaos = 20 // This one is more likely to actually kill someone. + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/prison_break/xenobio + relevant_areas = list(/area/rnd/xenobiology) + irrelevant_areas = list( + /area/rnd/xenobiology/xenoflora, + /area/rnd/xenobiology/xenoflora_storage + ) + +/datum/event2/meta/prison_break/xenobio/get_odds_from_trapped_mobs() + . = 0 + for(var/mob/living/simple_mob/slime/xenobio/X in living_mob_list) + if(is_mob_in_relevant_area(X)) + . += 5 + + +/datum/event2/meta/prison_break/virology + name = "prison break - virology" + departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_SYNTHETIC) + event_type = /datum/event2/event/prison_break/virology + relevant_areas = list( + /area/medical/virology, + /area/medical/virologyaccess + ) + +/datum/event2/meta/prison_break/virology/get_odds_from_trapped_mobs() + . = 0 + for(var/mob/living/L in player_list) + if(is_mob_in_relevant_area(L)) + // Don't count them if they're in medical. + if(!(L in metric.count_people_in_department(DEPARTMENT_MEDICAL))) + . += 40 + + + + +/datum/event2/event/prison_break + start_delay_lower_bound = 3 MINUTES + start_delay_upper_bound = 4 MINUTES + length_lower_bound = 40 SECONDS + length_upper_bound = 1 MINUTE + var/area_display_name = null // A string used to describe the area being messed with. + var/containment_display_desc = null + var/list/areas_to_break = list() + var/list/area_types_to_break = null // Area types to include. + var/list/area_types_to_ignore = null // Area types to exclude, usually due to undesired inclusion from inheritence. + var/ignore_blast_doors = TRUE //CHOMP Edit + +/datum/event2/event/prison_break/brig + area_display_name = "Brig" + containment_display_desc = "imprisonment" + area_types_to_break = list( + /area/security/prison, + /area/security/brig, + /area/security/security_cell_hallway, + /area/security/security_processing, + /area/security/interrogation + ) + +/datum/event2/event/prison_break/armory + area_display_name = "Armory" + containment_display_desc = "protection" + area_types_to_break = list( + /area/security/brig, + /area/security/warden, + /area/security/evidence_storage, + /area/security/security_equiptment_storage, + /area/security/armoury, + /area/security/tactical + ) + +/datum/event2/event/prison_break/bridge + area_display_name = "Bridge" + containment_display_desc = "isolation" + area_types_to_break = list( + /area/bridge, + /area/bridge_hallway + ) + +/datum/event2/event/prison_break/xenobio + area_display_name = "Xenobiology" + containment_display_desc = "containment" + area_types_to_break = list(/area/rnd/xenobiology) + area_types_to_ignore = list( + /area/rnd/xenobiology/xenoflora, + /area/rnd/xenobiology/xenoflora_storage + ) + +/datum/event2/event/prison_break/virology + area_display_name = "Virology" + containment_display_desc = "quarantine" + area_types_to_break = list( + /area/medical/virology, + /area/medical/virologyaccess + ) + + +/datum/event2/event/prison_break/set_up() + for(var/area/A in world) + if(is_type_in_list(A, area_types_to_break) && !is_type_in_list(A, area_types_to_ignore)) + areas_to_break += A + + if(!areas_to_break.len) + log_debug("Prison Break event failed to find any areas to break. Aborting.") + abort() + return + +/datum/event2/event/prison_break/announce() + var/my_department = "[location_name()] Firewall Subroutines" + var/message = "An unknown malicious program has been detected in the [area_display_name] \ + lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised \ + within approximately three minutes. Direct intervention is required immediately. Disabling the \ + main breaker in the APCs will protect the APC's room from being compromised." + + for(var/obj/machinery/message_server/MS in machines) + MS.send_rc_message(DEPARTMENT_ENGINEERING, my_department, "[message]
                    ", "", "", 2) + + // Nobody reads the requests consoles so lets use the radio as well. + global_announcer.autosay(message, my_department, DEPARTMENT_ENGINEERING) + + for(var/mob/living/silicon/ai/A in player_list) + to_chat(A, span("danger", "Malicious program detected in the [area_display_name] lighting and airlock control systems by [my_department]. \ + Disabling the main breaker in the APCs will protect the APC's room from being compromised.")) + + var/time_to_flicker = start_delay - 10 SECONDS + addtimer(CALLBACK(src, PROC_REF(flicker_area)), time_to_flicker) + + +/datum/event2/event/prison_break/proc/flicker_area() + for(var/area/A in areas_to_break) + var/obj/machinery/power/apc/apc = A.get_apc() + if(istype(apc) && apc.operating) //If the apc's off, it's a little hard to overload the lights. + for(var/obj/machinery/light/L in A) + L.flicker(10) + +/datum/event2/event/prison_break/start() + for(var/area/A in areas_to_break) + spawn(0) // So we don't block the ticker. + A.prison_break(TRUE, TRUE, !ignore_blast_doors) // Naming `open_blast_doors` causes mysterious runtimes. + +// There's between 40 seconds and one minute before the whole station knows. +// If there's a baddie engineer, they can choose to keep their early announcement to themselves and get a minute to exploit it. +/datum/event2/event/prison_break/end() + command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] was detected \ + in \the [location_name()] [area_display_name] [containment_display_desc] subroutines. Secure any compromised \ + areas immediately. AI involvement is recommended.", "[capitalize(containment_display_desc)] Alert") + + global_announcer.autosay( + "It is now safe to reactivate the APCs' main breakers inside [area_display_name].", + "[location_name()] Firewall Subroutines", + DEPARTMENT_ENGINEERING + ) diff --git a/code/modules/gamemaster/event2/events/security/rogue_drones.dm b/code/modules/gamemaster/event2/events/security/rogue_drones.dm index da40b3262f..d7402d3822 100644 --- a/code/modules/gamemaster/event2/events/security/rogue_drones.dm +++ b/code/modules/gamemaster/event2/events/security/rogue_drones.dm @@ -1,70 +1,70 @@ -/datum/event2/meta/rogue_drones - name = "rogue drones" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaos = 40 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/mob_spawning/rogue_drones - -/datum/event2/meta/rogue_drones/get_weight() - . = 10 // Start with a base weight, since this event does provide some value even if no sec is around. - . += metric.count_people_in_department(DEPARTMENT_SECURITY) * 20 - . += metric.count_all_space_mobs() * 40 - - -/datum/event2/event/mob_spawning/rogue_drones - length_lower_bound = 15 MINUTES - length_upper_bound = 20 MINUTES - var/drones_to_spawn = 6 - -/datum/event2/event/mob_spawning/rogue_drones/set_up() - if(prob(10)) // Small chance for a false alarm. - drones_to_spawn = 0 - -/datum/event2/event/mob_spawning/rogue_drones/announce() - var/msg = null - var/rng = rand(1,5) - switch(rng) - if(1) - msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. \ - If any are sighted, approach with caution." - if(2) - msg = "Contact has been lost with a combat drone wing in Sif orbit. \ - If any are sighted in the area, approach with caution." - if(3) - msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. \ - If any are sighted in the area, approach with caution." - if(4) - msg = "A passing derelict ship's drone defense systems have just activated. \ - If any are sighted in the area, use caution." - if(5) - msg = "We're detecting a swarm of small objects approaching your station. \ - Most likely a bunch of drones. Please exercise caution if you see any." - - command_announcement.Announce(msg, "Rogue drone alert") - -/datum/event2/event/mob_spawning/rogue_drones/start() - for(var/i = 1 to drones_to_spawn) - spawn_mobs_in_space( - mob_type = /mob/living/simple_mob/mechanical/combat_drone/event, - number_of_groups = 1, - min_size_of_group = 1, - max_size_of_group = 1 - ) - -/datum/event2/event/mob_spawning/rogue_drones/end() - if(drones_to_spawn) - var/number_recovered = 0 - for(var/mob/living/simple_mob/mechanical/combat_drone/D in spawned_mobs) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, D.loc) - sparks.start() - D.z = using_map.admin_levels[1] - D.loot_list = list() - - qdel(D) - number_recovered++ - - if(number_recovered > spawned_mobs.len * 0.75) - command_announcement.Announce("The drones that were malfunctioning have been recovered safely.", "Rogue drone alert") - else - command_announcement.Announce("We're disappointed at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert") +/datum/event2/meta/rogue_drones + name = "rogue drones" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaos = 40 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/mob_spawning/rogue_drones + +/datum/event2/meta/rogue_drones/get_weight() + . = 10 // Start with a base weight, since this event does provide some value even if no sec is around. + . += metric.count_people_in_department(DEPARTMENT_SECURITY) * 20 + . += metric.count_all_space_mobs() * 40 + + +/datum/event2/event/mob_spawning/rogue_drones + length_lower_bound = 15 MINUTES + length_upper_bound = 20 MINUTES + var/drones_to_spawn = 6 + +/datum/event2/event/mob_spawning/rogue_drones/set_up() + if(prob(10)) // Small chance for a false alarm. + drones_to_spawn = 0 + +/datum/event2/event/mob_spawning/rogue_drones/announce() + var/msg = null + var/rng = rand(1,5) + switch(rng) + if(1) + msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. \ + If any are sighted, approach with caution." + if(2) + msg = "Contact has been lost with a combat drone wing in Sif orbit. \ + If any are sighted in the area, approach with caution." + if(3) + msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. \ + If any are sighted in the area, approach with caution." + if(4) + msg = "A passing derelict ship's drone defense systems have just activated. \ + If any are sighted in the area, use caution." + if(5) + msg = "We're detecting a swarm of small objects approaching your station. \ + Most likely a bunch of drones. Please exercise caution if you see any." + + command_announcement.Announce(msg, "Rogue drone alert") + +/datum/event2/event/mob_spawning/rogue_drones/start() + for(var/i = 1 to drones_to_spawn) + spawn_mobs_in_space( + mob_type = /mob/living/simple_mob/mechanical/combat_drone/event, + number_of_groups = 1, + min_size_of_group = 1, + max_size_of_group = 1 + ) + +/datum/event2/event/mob_spawning/rogue_drones/end() + if(drones_to_spawn) + var/number_recovered = 0 + for(var/mob/living/simple_mob/mechanical/combat_drone/D in spawned_mobs) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, D.loc) + sparks.start() + D.z = using_map.admin_levels[1] + D.loot_list = list() + + qdel(D) + number_recovered++ + + if(number_recovered > spawned_mobs.len * 0.75) + command_announcement.Announce("The drones that were malfunctioning have been recovered safely.", "Rogue drone alert") + else + command_announcement.Announce("We're disappointed at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert") diff --git a/code/modules/gamemaster/event2/events/security/security_advisement.dm b/code/modules/gamemaster/event2/events/security/security_advisement.dm index 6a3764e40e..009d64c0ff 100644 --- a/code/modules/gamemaster/event2/events/security/security_advisement.dm +++ b/code/modules/gamemaster/event2/events/security/security_advisement.dm @@ -1,93 +1,93 @@ -/datum/event2/meta/security_screening - name = "security screening" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT // So this won't get called in the middle of a crisis. - event_type = /datum/event2/event/security_screening - -/datum/event2/meta/security_screening/get_weight() - . = 0 - var/sec = metric.count_people_in_department(DEPARTMENT_SECURITY) - if(!sec < 2) - return 0 // Can't screen with no security. - . += sec * 10 - . += metric.count_people_in_department(DEPARTMENT_EVERYONE) * 2 - - // Having ""suspecious"" people present makes this more likely to be picked. - var/suspicious_people = 0 - suspicious_people += metric.count_all_of_specific_species(SPECIES_PROMETHEAN) * 20 - suspicious_people += metric.count_all_of_specific_species(SPECIES_UNATHI) * 10 - suspicious_people += metric.count_all_of_specific_species(SPECIES_ZADDAT) * 10 - suspicious_people += metric.count_all_of_specific_species(SPECIES_SKRELL) * 5 // Not sure why skrell are so high. - suspicious_people += metric.count_all_of_specific_species(SPECIES_TAJ) * 5 - suspicious_people += metric.count_all_of_specific_species(SPECIES_TESHARI) * 5 - suspicious_people += metric.count_all_of_specific_species(SPECIES_HUMAN_VATBORN) * 5 - suspicious_people += metric.count_all_FBPs_of_kind(FBP_DRONE) * 20 - suspicious_people += metric.count_all_FBPs_of_kind(FBP_POSI) * 10 - if(!suspicious_people) - return 0 - . += suspicious_people - -/datum/event2/event/security_screening - var/victim = null - var/list/species_weights = list( - SPECIES_SKRELL = 9, - SPECIES_UNATHI = 15, - SPECIES_HUMAN_VATBORN = 6, - SPECIES_TESHARI = 2, - SPECIES_TAJ = 3, - SPECIES_DIONA = 1, - SPECIES_ZADDAT = 25, - SPECIES_PROMETHEAN = 30 - ) - - var/list/synth_weights = list( - FBP_CYBORG = 15, - FBP_DRONE = 30, - FBP_POSI = 25 - ) - -/datum/event2/event/security_screening/set_up() - var/list/end_weights = list() - - // First pass makes popular things more likely to get picked, e.g. 5 prommies vs 1 drone. - for(var/species_name in species_weights) - var/give_weight = 0 - for(var/datum/data/record/R in data_core.general) - if(R.fields["species"] == species_name) - give_weight += species_weights[species_name] - - end_weights[species_name] = give_weight - - for(var/bot_type in synth_weights) - var/give_weight = 0 - for(var/datum/data/record/R in data_core.general) - if(R.fields["brain_type"] == bot_type) - give_weight += synth_weights[bot_type] - - end_weights[bot_type] = give_weight - - // Second pass eliminates things that don't exist on the station. - // It's possible to choose something like drones when all the drones are AFK. This prevents that from happening. - while(end_weights.len) // Keep at it until we find someone or run out of possibilities. - var/victim_chosen = pickweight(end_weights) - - if(victim_chosen in synth_weights) - if(metric.count_all_FBPs_of_kind(victim_chosen) > 0) - victim = victim_chosen - break - else - if(metric.count_all_of_specific_species(victim_chosen) > 0) - victim = victim_chosen - break - if(!victim) - end_weights -= victim_chosen - - if(!victim) - log_debug("Security Screening event failed to find anyone to screen. Aborting.") - abort() - return - -/datum/event2/event/security_screening/announce() - command_announcement.Announce("[pick("A nearby Navy vessel", "A Solar official", "A Vir-Gov official", "A NanoTrasen board director")] has \ - requested the screening of [pick("every other", "every", "suspicious", "willing")] [victim] \ - personnel onboard \the [location_name()].", "Security Advisement") +/datum/event2/meta/security_screening + name = "security screening" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT // So this won't get called in the middle of a crisis. + event_type = /datum/event2/event/security_screening + +/datum/event2/meta/security_screening/get_weight() + . = 0 + var/sec = metric.count_people_in_department(DEPARTMENT_SECURITY) + if(!sec < 2) + return 0 // Can't screen with no security. + . += sec * 10 + . += metric.count_people_in_department(DEPARTMENT_EVERYONE) * 2 + + // Having ""suspecious"" people present makes this more likely to be picked. + var/suspicious_people = 0 + suspicious_people += metric.count_all_of_specific_species(SPECIES_PROMETHEAN) * 20 + suspicious_people += metric.count_all_of_specific_species(SPECIES_UNATHI) * 10 + suspicious_people += metric.count_all_of_specific_species(SPECIES_ZADDAT) * 10 + suspicious_people += metric.count_all_of_specific_species(SPECIES_SKRELL) * 5 // Not sure why skrell are so high. + suspicious_people += metric.count_all_of_specific_species(SPECIES_TAJ) * 5 + suspicious_people += metric.count_all_of_specific_species(SPECIES_TESHARI) * 5 + suspicious_people += metric.count_all_of_specific_species(SPECIES_HUMAN_VATBORN) * 5 + suspicious_people += metric.count_all_FBPs_of_kind(FBP_DRONE) * 20 + suspicious_people += metric.count_all_FBPs_of_kind(FBP_POSI) * 10 + if(!suspicious_people) + return 0 + . += suspicious_people + +/datum/event2/event/security_screening + var/victim = null + var/list/species_weights = list( + SPECIES_SKRELL = 9, + SPECIES_UNATHI = 15, + SPECIES_HUMAN_VATBORN = 6, + SPECIES_TESHARI = 2, + SPECIES_TAJ = 3, + SPECIES_DIONA = 1, + SPECIES_ZADDAT = 25, + SPECIES_PROMETHEAN = 30 + ) + + var/list/synth_weights = list( + FBP_CYBORG = 15, + FBP_DRONE = 30, + FBP_POSI = 25 + ) + +/datum/event2/event/security_screening/set_up() + var/list/end_weights = list() + + // First pass makes popular things more likely to get picked, e.g. 5 prommies vs 1 drone. + for(var/species_name in species_weights) + var/give_weight = 0 + for(var/datum/data/record/R in data_core.general) + if(R.fields["species"] == species_name) + give_weight += species_weights[species_name] + + end_weights[species_name] = give_weight + + for(var/bot_type in synth_weights) + var/give_weight = 0 + for(var/datum/data/record/R in data_core.general) + if(R.fields["brain_type"] == bot_type) + give_weight += synth_weights[bot_type] + + end_weights[bot_type] = give_weight + + // Second pass eliminates things that don't exist on the station. + // It's possible to choose something like drones when all the drones are AFK. This prevents that from happening. + while(end_weights.len) // Keep at it until we find someone or run out of possibilities. + var/victim_chosen = pickweight(end_weights) + + if(victim_chosen in synth_weights) + if(metric.count_all_FBPs_of_kind(victim_chosen) > 0) + victim = victim_chosen + break + else + if(metric.count_all_of_specific_species(victim_chosen) > 0) + victim = victim_chosen + break + if(!victim) + end_weights -= victim_chosen + + if(!victim) + log_debug("Security Screening event failed to find anyone to screen. Aborting.") + abort() + return + +/datum/event2/event/security_screening/announce() + command_announcement.Announce("[pick("A nearby Navy vessel", "A Solar official", "A Vir-Gov official", "A NanoTrasen board director")] has \ + requested the screening of [pick("every other", "every", "suspicious", "willing")] [victim] \ + personnel onboard \the [location_name()].", "Security Advisement") diff --git a/code/modules/gamemaster/event2/events/security/spider_infestation.dm b/code/modules/gamemaster/event2/events/security/spider_infestation.dm index 244db93dd3..811a9d483a 100644 --- a/code/modules/gamemaster/event2/events/security/spider_infestation.dm +++ b/code/modules/gamemaster/event2/events/security/spider_infestation.dm @@ -1,49 +1,49 @@ -/datum/event2/meta/spider_infestation - name = "spider infestation" - event_class = "spiders" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_MEDICAL, DEPARTMENT_EVERYONE) - chaos = 30 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/spider_infestation - -/datum/event2/meta/spider_infestation/weak - name = "weak spider infestation" - chaos = 20 - event_type = /datum/event2/event/spider_infestation/weak - - -/datum/event2/meta/spider_infestation/get_weight() - . = 10 - . += metric.count_people_in_department(DEPARTMENT_SECURITY) * 20 - . += metric.count_people_in_department(DEPARTMENT_MEDICAL) * 10 - - -// This isn't a /mob_spawning subtype since spiderlings aren't actually mobs. - -/datum/event2/event/spider_infestation - var/spiders_to_spawn = 8 - var/spiderling_to_spawn = /obj/effect/spider/spiderling - -/datum/event2/event/spider_infestation/weak - spiders_to_spawn = 5 - spiderling_to_spawn = /obj/effect/spider/spiderling/stunted - - - -/datum/event2/event/spider_infestation/announce() - command_announcement.Announce("Unidentified lifesigns detected coming aboard \the [location_name()]. \ - Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') - -/datum/event2/event/spider_infestation/start() - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in get_location_z_levels())) - if(temp_vent.network.normal_members.len > 50) - vents += temp_vent - - while((spiders_to_spawn >= 1) && vents.len) - var/obj/vent = pick(vents) - new spiderling_to_spawn(vent.loc) - log_debug("Spider infestation event spawned a spiderling at [get_area(vent)].") - vents -= vent - spiders_to_spawn-- +/datum/event2/meta/spider_infestation + name = "spider infestation" + event_class = "spiders" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_MEDICAL, DEPARTMENT_EVERYONE) + chaos = 30 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/spider_infestation + +/datum/event2/meta/spider_infestation/weak + name = "weak spider infestation" + chaos = 20 + event_type = /datum/event2/event/spider_infestation/weak + + +/datum/event2/meta/spider_infestation/get_weight() + . = 10 + . += metric.count_people_in_department(DEPARTMENT_SECURITY) * 20 + . += metric.count_people_in_department(DEPARTMENT_MEDICAL) * 10 + + +// This isn't a /mob_spawning subtype since spiderlings aren't actually mobs. + +/datum/event2/event/spider_infestation + var/spiders_to_spawn = 8 + var/spiderling_to_spawn = /obj/effect/spider/spiderling + +/datum/event2/event/spider_infestation/weak + spiders_to_spawn = 5 + spiderling_to_spawn = /obj/effect/spider/spiderling/stunted + + + +/datum/event2/event/spider_infestation/announce() + command_announcement.Announce("Unidentified lifesigns detected coming aboard \the [location_name()]. \ + Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') + +/datum/event2/event/spider_infestation/start() + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) + if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in get_location_z_levels())) + if(temp_vent.network.normal_members.len > 50) + vents += temp_vent + + while((spiders_to_spawn >= 1) && vents.len) + var/obj/vent = pick(vents) + new spiderling_to_spawn(vent.loc) + log_debug("Spider infestation event spawned a spiderling at [get_area(vent)].") + vents -= vent + spiders_to_spawn-- diff --git a/code/modules/gamemaster/event2/events/security/stowaway.dm b/code/modules/gamemaster/event2/events/security/stowaway.dm index d04d350234..e4e41c3091 100644 --- a/code/modules/gamemaster/event2/events/security/stowaway.dm +++ b/code/modules/gamemaster/event2/events/security/stowaway.dm @@ -1,64 +1,64 @@ -// Base type used for inheritence. -/datum/event2/meta/stowaway - event_class = "stowaway" - departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) - chaos = 10 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT - event_type = /datum/event2/event/ghost_pod_spawner/stowaway - var/safe_for_extended = FALSE - -/datum/event2/meta/stowaway/normal - name = "stowaway - normal" - safe_for_extended = TRUE - -/datum/event2/meta/stowaway/renegade - name = "stowaway - renegade" - chaos = 30 - event_type = /datum/event2/event/ghost_pod_spawner/stowaway/renegade - -/datum/event2/meta/stowaway/infiltrator - name = "stowaway - infiltrator" - chaos = 60 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/ghost_pod_spawner/stowaway/infiltrator - -/datum/event2/meta/stowaway/get_weight() - if(istype(ticker.mode, /datum/game_mode/extended) && !safe_for_extended) - return 0 - - var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) - var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - security - var/ghost_activity = metric.assess_all_dead_mobs() / 100 - - return ( (security * 20) + (everyone * 2) ) * ghost_activity - - -/datum/event2/event/ghost_pod_spawner/stowaway - pod_type = /obj/structure/ghost_pod/ghost_activated/human - desired_turf_areas = list(/area/maintenance) - announce_delay_lower_bound = 15 MINUTES - announce_delay_upper_bound = 30 MINUTES - var/antag_type = MODE_STOWAWAY - var/announce_odds = 20 - -/datum/event2/event/ghost_pod_spawner/stowaway/renegade - antag_type = MODE_RENEGADE - announce_odds = 33 - -/datum/event2/event/ghost_pod_spawner/stowaway/infiltrator - antag_type = MODE_INFILTRATOR - announce_odds = 50 - -/datum/event2/event/ghost_pod_spawner/stowaway/post_pod_creation(obj/structure/ghost_pod/ghost_activated/human/pod) - pod.make_antag = antag_type - pod.occupant_type = "[pod.make_antag] [pod.occupant_type]" - - say_dead_object("[span("notice", pod.occupant_type)] pod is now available in \the [get_area(pod)].", pod) - -/datum/event2/event/ghost_pod_spawner/stowaway/announce() - if(prob(announce_odds)) - if(atc?.squelched) - return - atc.msg("Attention civilian vessels in [using_map.starsys_name] shipping lanes, caution is advised as \ - [pick("an unidentified vessel", "a known criminal's vessel", "a derelict vessel")] \ - has been detected passing multiple local stations.") +// Base type used for inheritence. +/datum/event2/meta/stowaway + event_class = "stowaway" + departments = list(DEPARTMENT_SECURITY, DEPARTMENT_EVERYONE) + chaos = 10 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + event_type = /datum/event2/event/ghost_pod_spawner/stowaway + var/safe_for_extended = FALSE + +/datum/event2/meta/stowaway/normal + name = "stowaway - normal" + safe_for_extended = TRUE + +/datum/event2/meta/stowaway/renegade + name = "stowaway - renegade" + chaos = 30 + event_type = /datum/event2/event/ghost_pod_spawner/stowaway/renegade + +/datum/event2/meta/stowaway/infiltrator + name = "stowaway - infiltrator" + chaos = 60 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/ghost_pod_spawner/stowaway/infiltrator + +/datum/event2/meta/stowaway/get_weight() + if(istype(ticker.mode, /datum/game_mode/extended) && !safe_for_extended) + return 0 + + var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) + var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - security + var/ghost_activity = metric.assess_all_dead_mobs() / 100 + + return ( (security * 20) + (everyone * 2) ) * ghost_activity + + +/datum/event2/event/ghost_pod_spawner/stowaway + pod_type = /obj/structure/ghost_pod/ghost_activated/human + desired_turf_areas = list(/area/maintenance) + announce_delay_lower_bound = 15 MINUTES + announce_delay_upper_bound = 30 MINUTES + var/antag_type = MODE_STOWAWAY + var/announce_odds = 20 + +/datum/event2/event/ghost_pod_spawner/stowaway/renegade + antag_type = MODE_RENEGADE + announce_odds = 33 + +/datum/event2/event/ghost_pod_spawner/stowaway/infiltrator + antag_type = MODE_INFILTRATOR + announce_odds = 50 + +/datum/event2/event/ghost_pod_spawner/stowaway/post_pod_creation(obj/structure/ghost_pod/ghost_activated/human/pod) + pod.make_antag = antag_type + pod.occupant_type = "[pod.make_antag] [pod.occupant_type]" + + say_dead_object("[span("notice", pod.occupant_type)] pod is now available in \the [get_area(pod)].", pod) + +/datum/event2/event/ghost_pod_spawner/stowaway/announce() + if(prob(announce_odds)) + if(atc?.squelched) + return + atc.msg("Attention civilian vessels in [using_map.starsys_name] shipping lanes, caution is advised as \ + [pick("an unidentified vessel", "a known criminal's vessel", "a derelict vessel")] \ + has been detected passing multiple local stations.") diff --git a/code/modules/gamemaster/event2/events/security/surprise_carp.dm b/code/modules/gamemaster/event2/events/security/surprise_carp.dm index 39be6d8412..534e91e2ce 100644 --- a/code/modules/gamemaster/event2/events/security/surprise_carp.dm +++ b/code/modules/gamemaster/event2/events/security/surprise_carp.dm @@ -1,71 +1,71 @@ -// This event sends a few carp after someone hanging around in space, unannounced. - -/datum/event2/meta/surprise_carp - name = "surprise carp" - departments = list(DEPARTMENT_EVERYONE) - chaos = 20 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/surprise_carp - -/datum/event2/meta/surprise_carp/get_weight() - return metric.count_all_space_mobs() * 50 - - -/datum/event2/event/surprise_carp - var/mob/living/victim = null - -/datum/event2/event/surprise_carp/set_up() - var/list/potential_victims = list() - for(var/mob/living/L in player_list) - if(!(L.z in get_location_z_levels())) - continue // Not on the right z-level. - if(L.stat) - continue // Don't want dead people. - if(istype(get_turf(L), /turf/space) && istype(get_area(L),/area/space)) - potential_victims += L - - if(potential_victims.len) - victim = pick(potential_victims) - -/datum/event2/event/surprise_carp/start() - if(!victim) - log_debug("Failed to find a target for surprise carp attack. Aborting.") - abort() - return - - var/number_of_carp = rand(1, 2) - log_debug("Sending [number_of_carp] carp\s after \the [victim].") - // Getting off screen tiles is kind of tricky due to potential edge cases that could arise. - // The method we're gonna do is make a big square around the victim, then - // subtract a smaller square in the middle for the default vision range. - var/list/outer_square = get_safe_square(victim, world.view + 3) - var/list/inner_square = get_safe_square(victim, world.view) - - var/list/donut = outer_square - inner_square - for(var/T in donut) - if(!istype(T, /turf/space)) - donut -= T - - for(var/i = 1 to number_of_carp) - var/turf/spawning_turf = pick(donut) - - if(spawning_turf) - var/mob/living/simple_mob/animal/space/carp/C = new(spawning_turf) - // Ask carp to swim onto the victim's screen. The AI will then switch to hostile and try to eat them. - C.ai_holder?.give_destination(get_turf(victim)) - else - log_debug("Surprise carp attack failed to find any space turfs offscreen to the victim.") - -// Gets suitable spots for carp to spawn, without risk of going off the edge of the map. -// If there is demand for this proc, then it can easily be made independant and moved into one of the helper files. -/datum/event2/event/surprise_carp/proc/get_safe_square(atom/center, radius) - var/lower_left_x = max(center.x - radius, 1 + TRANSITIONEDGE) - var/lower_left_y = max(center.y - radius, 1 + TRANSITIONEDGE) - - var/upper_right_x = min(center.x + radius, world.maxx - TRANSITIONEDGE) - var/upper_right_y = min(center.y + radius, world.maxy - TRANSITIONEDGE) - - var/turf/lower_left = locate(lower_left_x, lower_left_y, victim.z) - var/turf/upper_right = locate(upper_right_x, upper_right_y, victim.z) - - return block(lower_left, upper_right) +// This event sends a few carp after someone hanging around in space, unannounced. + +/datum/event2/meta/surprise_carp + name = "surprise carp" + departments = list(DEPARTMENT_EVERYONE) + chaos = 20 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/surprise_carp + +/datum/event2/meta/surprise_carp/get_weight() + return metric.count_all_space_mobs() * 50 + + +/datum/event2/event/surprise_carp + var/mob/living/victim = null + +/datum/event2/event/surprise_carp/set_up() + var/list/potential_victims = list() + for(var/mob/living/L in player_list) + if(!(L.z in get_location_z_levels())) + continue // Not on the right z-level. + if(L.stat) + continue // Don't want dead people. + if(istype(get_turf(L), /turf/space) && istype(get_area(L),/area/space)) + potential_victims += L + + if(potential_victims.len) + victim = pick(potential_victims) + +/datum/event2/event/surprise_carp/start() + if(!victim) + log_debug("Failed to find a target for surprise carp attack. Aborting.") + abort() + return + + var/number_of_carp = rand(1, 2) + log_debug("Sending [number_of_carp] carp\s after \the [victim].") + // Getting off screen tiles is kind of tricky due to potential edge cases that could arise. + // The method we're gonna do is make a big square around the victim, then + // subtract a smaller square in the middle for the default vision range. + var/list/outer_square = get_safe_square(victim, world.view + 3) + var/list/inner_square = get_safe_square(victim, world.view) + + var/list/donut = outer_square - inner_square + for(var/T in donut) + if(!istype(T, /turf/space)) + donut -= T + + for(var/i = 1 to number_of_carp) + var/turf/spawning_turf = pick(donut) + + if(spawning_turf) + var/mob/living/simple_mob/animal/space/carp/C = new(spawning_turf) + // Ask carp to swim onto the victim's screen. The AI will then switch to hostile and try to eat them. + C.ai_holder?.give_destination(get_turf(victim)) + else + log_debug("Surprise carp attack failed to find any space turfs offscreen to the victim.") + +// Gets suitable spots for carp to spawn, without risk of going off the edge of the map. +// If there is demand for this proc, then it can easily be made independant and moved into one of the helper files. +/datum/event2/event/surprise_carp/proc/get_safe_square(atom/center, radius) + var/lower_left_x = max(center.x - radius, 1 + TRANSITIONEDGE) + var/lower_left_y = max(center.y - radius, 1 + TRANSITIONEDGE) + + var/upper_right_x = min(center.x + radius, world.maxx - TRANSITIONEDGE) + var/upper_right_y = min(center.y + radius, world.maxy - TRANSITIONEDGE) + + var/turf/lower_left = locate(lower_left_x, lower_left_y, victim.z) + var/turf/upper_right = locate(upper_right_x, upper_right_y, victim.z) + + return block(lower_left, upper_right) diff --git a/code/modules/gamemaster/event2/events/security/swarm_boarder.dm b/code/modules/gamemaster/event2/events/security/swarm_boarder.dm index 54dc03189b..ca7d0c25db 100644 --- a/code/modules/gamemaster/event2/events/security/swarm_boarder.dm +++ b/code/modules/gamemaster/event2/events/security/swarm_boarder.dm @@ -1,56 +1,56 @@ -// This is just porting the event to the new new event system, it's not been balanced in any way -// so don't @ me if these things are grossly OP. -/datum/event2/meta/swarm_boarder - event_class = "swarm boarder" - departments = list(DEPARTMENT_EVERYONE, DEPARTMENT_SECURITY, DEPARTMENT_ENGINEERING) - chaos = 60 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT - enabled = FALSE // Turns out they are in fact grossly OP. - var/safe_for_extended = FALSE - -/datum/event2/meta/swarm_boarder/get_weight() - if(istype(ticker.mode, /datum/game_mode/extended) && !safe_for_extended) - return 0 - - var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) - var/engineering = metric.count_people_in_department(DEPARTMENT_ENGINEERING) - var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - (engineering + security) - - var/ghost_activity = metric.assess_all_dead_mobs() / 100 - - return ( (security * 20) + (engineering * 10) + (everyone * 2) ) * ghost_activity - -/datum/event2/meta/swarm_boarder/normal - name = "swarmer shell - normal" - event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder - -/datum/event2/meta/swarm_boarder/melee - name = "swarmer shell - melee" - event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder/melee - -/datum/event2/meta/swarm_boarder/gunner - name = "swarmer shell - gunner" - event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder/gunner - - - - -/datum/event2/event/ghost_pod_spawner/swarm_boarder - announce_delay_lower_bound = 5 MINUTES - announce_delay_upper_bound = 15 MINUTES - pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event - desired_turf_areas = list(/area/maintenance) - var/announce_odds = 80 - -/datum/event2/event/ghost_pod_spawner/swarm_boarder/melee - pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event/melee - -/datum/event2/event/ghost_pod_spawner/swarm_boarder/gunner - pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event/gunner - -/datum/event2/event/ghost_pod_spawner/swarm_boarder/announce() - if(prob(announce_odds)) - if(atc?.squelched) - atc.msg("Attention civilian vessels in [using_map.starsys_name] shipping lanes, caution \ - is advised as [pick("an unidentified vessel", "a known criminal's vessel", "a derelict vessel")] \ - has been detected passing multiple local stations.") +// This is just porting the event to the new new event system, it's not been balanced in any way +// so don't @ me if these things are grossly OP. +/datum/event2/meta/swarm_boarder + event_class = "swarm boarder" + departments = list(DEPARTMENT_EVERYONE, DEPARTMENT_SECURITY, DEPARTMENT_ENGINEERING) + chaos = 60 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT + enabled = FALSE // Turns out they are in fact grossly OP. + var/safe_for_extended = FALSE + +/datum/event2/meta/swarm_boarder/get_weight() + if(istype(ticker.mode, /datum/game_mode/extended) && !safe_for_extended) + return 0 + + var/security = metric.count_people_in_department(DEPARTMENT_SECURITY) + var/engineering = metric.count_people_in_department(DEPARTMENT_ENGINEERING) + var/everyone = metric.count_people_in_department(DEPARTMENT_EVERYONE) - (engineering + security) + + var/ghost_activity = metric.assess_all_dead_mobs() / 100 + + return ( (security * 20) + (engineering * 10) + (everyone * 2) ) * ghost_activity + +/datum/event2/meta/swarm_boarder/normal + name = "swarmer shell - normal" + event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder + +/datum/event2/meta/swarm_boarder/melee + name = "swarmer shell - melee" + event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder/melee + +/datum/event2/meta/swarm_boarder/gunner + name = "swarmer shell - gunner" + event_type = /datum/event2/event/ghost_pod_spawner/swarm_boarder/gunner + + + + +/datum/event2/event/ghost_pod_spawner/swarm_boarder + announce_delay_lower_bound = 5 MINUTES + announce_delay_upper_bound = 15 MINUTES + pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event + desired_turf_areas = list(/area/maintenance) + var/announce_odds = 80 + +/datum/event2/event/ghost_pod_spawner/swarm_boarder/melee + pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event/melee + +/datum/event2/event/ghost_pod_spawner/swarm_boarder/gunner + pod_type = /obj/structure/ghost_pod/ghost_activated/swarm_drone/event/gunner + +/datum/event2/event/ghost_pod_spawner/swarm_boarder/announce() + if(prob(announce_odds)) + if(atc?.squelched) + atc.msg("Attention civilian vessels in [using_map.starsys_name] shipping lanes, caution \ + is advised as [pick("an unidentified vessel", "a known criminal's vessel", "a derelict vessel")] \ + has been detected passing multiple local stations.") diff --git a/code/modules/gamemaster/event2/events/synthetic/ion_storm.dm b/code/modules/gamemaster/event2/events/synthetic/ion_storm.dm index e4c89aa691..a11bfb5a69 100644 --- a/code/modules/gamemaster/event2/events/synthetic/ion_storm.dm +++ b/code/modules/gamemaster/event2/events/synthetic/ion_storm.dm @@ -1,74 +1,74 @@ -/datum/event2/meta/ion_storm - name = "ion storm" - departments = list(DEPARTMENT_SYNTHETIC) - chaos = 40 - chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT - event_type = /datum/event2/event/ion_storm - -/datum/event2/meta/ion_storm/get_weight() - var/list/bots = metric.get_people_in_department(DEPARTMENT_SYNTHETIC) - . = 5 // A small chance even if no synths are on, since it can still emag beepsky. - for(var/mob/living/silicon/S in bots) - if(istype(S, /mob/living/silicon/robot/drone)) // Drones don't get their laws screwed with, so don't count them. - continue - . += 40 - - -/datum/event2/event/ion_storm - announce_delay_lower_bound = 7 MINUTES - announce_delay_upper_bound = 15 MINUTES - var/bot_emag_chance = 30 // This is rolled once, instead of once a second for a minute like the old version. - var/announce_odds = 50 // Probability of an announcement actually happening after the delay. - -/datum/event2/event/ion_storm/start() - // Ion laws. - for(var/mob/living/silicon/target in silicon_mob_list) - if(target.z in get_location_z_levels()) - // Don't ion law drons. - if(istype(target, /mob/living/silicon/robot/drone)) - continue - - // Or borgs with an AI (they'll get their AI's ion law anyways). - if(istype(target, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = target - if(R.connected_ai) - continue - if(R.shell) - continue - - // Crew member names, and excluding off station antags, are handled by `generate_ion_law()` automatically. - var/law = target.generate_ion_law() - target.add_ion_law(law) - target.show_laws() - - // Emag bots. - for(var/mob/living/bot/B in mob_list) - if(B.z in get_location_z_levels()) - if(prob(bot_emag_chance)) - B.emag_act(1) - - // Messaging server spam filters. - // This might be better served as a seperate event since it seems more like a hacker attack than a natural occurance. - if(message_servers) - for(var/obj/machinery/message_server/MS in message_servers) - if(MS.z in get_location_z_levels()) - MS.spamfilter.Cut() - for (var/i = 1, i <= MS.spamfilter_limit, i++) - MS.spamfilter += pick("warble","help","almach","ai","liberty","freedom","drugs", "[using_map.station_short]", \ - "admin","sol","security","meow","_","monkey","-","moron","pizza","message","spam",\ - "director", "Hello", "Hi!"," ","nuke","crate","taj","xeno") - -/datum/event2/event/ion_storm/announce() - if(prob(announce_odds)) - command_announcement.Announce("An ion storm was detected within proximity to \the [location_name()] recently. \ - Check all AI controlled equipment for corruption.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') - -// Fake variant used by traitors. -/datum/event2/event/ion_storm/fake - // Fake ion storms announce instantly, so the traitor can time it to make the AI look suspicious. - announce_delay_lower_bound = 0 - announce_delay_upper_bound = 0 - announce_odds = 100 - -/datum/event2/event/ion_storm/fake/start() +/datum/event2/meta/ion_storm + name = "ion storm" + departments = list(DEPARTMENT_SYNTHETIC) + chaos = 40 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT + event_type = /datum/event2/event/ion_storm + +/datum/event2/meta/ion_storm/get_weight() + var/list/bots = metric.get_people_in_department(DEPARTMENT_SYNTHETIC) + . = 5 // A small chance even if no synths are on, since it can still emag beepsky. + for(var/mob/living/silicon/S in bots) + if(istype(S, /mob/living/silicon/robot/drone)) // Drones don't get their laws screwed with, so don't count them. + continue + . += 40 + + +/datum/event2/event/ion_storm + announce_delay_lower_bound = 7 MINUTES + announce_delay_upper_bound = 15 MINUTES + var/bot_emag_chance = 30 // This is rolled once, instead of once a second for a minute like the old version. + var/announce_odds = 50 // Probability of an announcement actually happening after the delay. + +/datum/event2/event/ion_storm/start() + // Ion laws. + for(var/mob/living/silicon/target in silicon_mob_list) + if(target.z in get_location_z_levels()) + // Don't ion law drons. + if(istype(target, /mob/living/silicon/robot/drone)) + continue + + // Or borgs with an AI (they'll get their AI's ion law anyways). + if(istype(target, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = target + if(R.connected_ai) + continue + if(R.shell) + continue + + // Crew member names, and excluding off station antags, are handled by `generate_ion_law()` automatically. + var/law = target.generate_ion_law() + target.add_ion_law(law) + target.show_laws() + + // Emag bots. + for(var/mob/living/bot/B in mob_list) + if(B.z in get_location_z_levels()) + if(prob(bot_emag_chance)) + B.emag_act(1) + + // Messaging server spam filters. + // This might be better served as a seperate event since it seems more like a hacker attack than a natural occurance. + if(message_servers) + for(var/obj/machinery/message_server/MS in message_servers) + if(MS.z in get_location_z_levels()) + MS.spamfilter.Cut() + for (var/i = 1, i <= MS.spamfilter_limit, i++) + MS.spamfilter += pick("warble","help","almach","ai","liberty","freedom","drugs", "[using_map.station_short]", \ + "admin","sol","security","meow","_","monkey","-","moron","pizza","message","spam",\ + "director", "Hello", "Hi!"," ","nuke","crate","taj","xeno") + +/datum/event2/event/ion_storm/announce() + if(prob(announce_odds)) + command_announcement.Announce("An ion storm was detected within proximity to \the [location_name()] recently. \ + Check all AI controlled equipment for corruption.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') + +// Fake variant used by traitors. +/datum/event2/event/ion_storm/fake + // Fake ion storms announce instantly, so the traitor can time it to make the AI look suspicious. + announce_delay_lower_bound = 0 + announce_delay_upper_bound = 0 + announce_odds = 100 + +/datum/event2/event/ion_storm/fake/start() return \ No newline at end of file diff --git a/code/modules/gamemaster/event2/meta.dm b/code/modules/gamemaster/event2/meta.dm index 3923f85744..74db2a2b6c 100644 --- a/code/modules/gamemaster/event2/meta.dm +++ b/code/modules/gamemaster/event2/meta.dm @@ -1,81 +1,81 @@ -// The 'meta' object contains information about its assigned 'action' object, like what departments it will affect. -// It is directly held inside the Game Master Event System. - -// The code for actually executing an event should go inside the event object instead. -/datum/event2/meta - // Name used for organization, shown in the debug verb for the GM system. - // If null, the meta event will be discarded when the GM system initializes, so it is safe to use nameless subtypes for inheritence. - var/name = null - - // If FALSE, the GM system won't pick this. - // Some events set this to FALSE after running, to avoid running twice. - var/enabled = TRUE - - // What departments the event attached might affect. - var/list/departments = list(DEPARTMENT_EVERYONE) - - // A guess on how disruptive to a round the event might be. If the action is chosen, the GM's - // 'danger' score is increased by this number. - // Negative numbers could be used to signify helpful events. - var/chaos = 0 - - // A threshold the GM will use alongside its 'danger' score, to determine if it should pass - // over the event associated with this object. The decision is based on - var/chaotic_threshold = null - - // If true, the event won't have it's `enabled` var set to FALSE when ran by the GM system. - var/reusable = FALSE - - // A string used to identify a 'class' of similar events. - // If the event is not reusable, than all events sharing the same class are disabled. - // Useful if you only ever want one event per round while having a lot of different subtypes of the event. - var/event_class = null - - // Counter for how many times this event has been picked by the GM. - // Can be used to make event repeats discouraged but not forbidden by adjusting the weight based on it. - var/times_ran = 0 - - // The type path to the event associated with this meta object. - // When the GM chooses this event, a new instance is made. - // Seperate instances allow for multiple concurrent events without sharing state, e.g. two blobs. - var/event_type = null - - -// Called by the GM system to actually start an event. -/datum/event2/meta/proc/make_event() - var/datum/event2/event/E = new event_type() - E.execute() - return E - -// Returns a TRUE or FALSE for if the GM system should be able to pick this event. -// Can be extended to check for more than just `enabled` later. -/datum/event2/meta/proc/can_pick() - return enabled - -/* - * Procs to Override - */ - -// Returns a number that determines how likely it is for the event to be picked over others. -// Individual events should override this for their own weights. -/datum/event2/meta/proc/get_weight() - return 0 - - -/datum/event2/meta/Topic(href, href_list) - if(..()) - return - - if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) - message_admins("[usr] has attempted to manipulate an event without sufficent privilages.") - return - - if(href_list["force"]) - // SSevent_ticker.start_event(event_type) // VOREStation Edit - We don't use SSgame_master yet. - message_admins("Event '[name]' was forced by [usr.key].") - - if(href_list["toggle"]) - enabled = !enabled - message_admins("Event '[name]' was toggled [enabled ? "on" : "off"] by [usr.key].") - +// The 'meta' object contains information about its assigned 'action' object, like what departments it will affect. +// It is directly held inside the Game Master Event System. + +// The code for actually executing an event should go inside the event object instead. +/datum/event2/meta + // Name used for organization, shown in the debug verb for the GM system. + // If null, the meta event will be discarded when the GM system initializes, so it is safe to use nameless subtypes for inheritence. + var/name = null + + // If FALSE, the GM system won't pick this. + // Some events set this to FALSE after running, to avoid running twice. + var/enabled = TRUE + + // What departments the event attached might affect. + var/list/departments = list(DEPARTMENT_EVERYONE) + + // A guess on how disruptive to a round the event might be. If the action is chosen, the GM's + // 'danger' score is increased by this number. + // Negative numbers could be used to signify helpful events. + var/chaos = 0 + + // A threshold the GM will use alongside its 'danger' score, to determine if it should pass + // over the event associated with this object. The decision is based on + var/chaotic_threshold = null + + // If true, the event won't have it's `enabled` var set to FALSE when ran by the GM system. + var/reusable = FALSE + + // A string used to identify a 'class' of similar events. + // If the event is not reusable, than all events sharing the same class are disabled. + // Useful if you only ever want one event per round while having a lot of different subtypes of the event. + var/event_class = null + + // Counter for how many times this event has been picked by the GM. + // Can be used to make event repeats discouraged but not forbidden by adjusting the weight based on it. + var/times_ran = 0 + + // The type path to the event associated with this meta object. + // When the GM chooses this event, a new instance is made. + // Seperate instances allow for multiple concurrent events without sharing state, e.g. two blobs. + var/event_type = null + + +// Called by the GM system to actually start an event. +/datum/event2/meta/proc/make_event() + var/datum/event2/event/E = new event_type() + E.execute() + return E + +// Returns a TRUE or FALSE for if the GM system should be able to pick this event. +// Can be extended to check for more than just `enabled` later. +/datum/event2/meta/proc/can_pick() + return enabled + +/* + * Procs to Override + */ + +// Returns a number that determines how likely it is for the event to be picked over others. +// Individual events should override this for their own weights. +/datum/event2/meta/proc/get_weight() + return 0 + + +/datum/event2/meta/Topic(href, href_list) + if(..()) + return + + if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) + message_admins("[usr] has attempted to manipulate an event without sufficent privilages.") + return + + if(href_list["force"]) + // SSevent_ticker.start_event(event_type) // VOREStation Edit - We don't use SSgame_master yet. + message_admins("Event '[name]' was forced by [usr.key].") + + if(href_list["toggle"]) + enabled = !enabled + message_admins("Event '[name]' was toggled [enabled ? "on" : "off"] by [usr.key].") + // SSgame_master.interact(usr) // To refresh the UI. // VOREStation Edit - We don't use SSgame_master yet. \ No newline at end of file diff --git a/code/modules/genetics/side_effects.dm b/code/modules/genetics/side_effects.dm index 958f05d5ac..3ff4ee9416 100644 --- a/code/modules/genetics/side_effects.dm +++ b/code/modules/genetics/side_effects.dm @@ -1,81 +1,81 @@ -/datum/genetics/side_effect - var/name // name of the side effect, to use as a header in the manual - var/symptom // description of the symptom of the side effect - var/treatment // description of the treatment of the side effect - var/effect // description of what happens when not treated - var/duration = 0 // delay between start() and finish() - -/datum/genetics/side_effect/proc/start(mob/living/carbon/human/H) - // start the side effect, this should give some cue as to what's happening, - // such as gasping. These cues need to be unique among side-effects. - -/datum/genetics/side_effect/proc/finish(mob/living/carbon/human/H) - // Finish the side-effect. This should first check whether the cure has been - // applied, and if not, cause bad things to happen. - -/datum/genetics/side_effect/genetic_burn - name = "Genetic Burn" - symptom = "Subject's skin turns unusualy red." - treatment = "Inject small dose of dexalin." - effect = "Subject's skin burns." - duration = 30 SECONDS - -/datum/genetics/side_effect/genetic_burn/start(mob/living/carbon/human/H) - H.custom_emote(VISIBLE_MESSAGE, "starts turning very red..") - -/datum/genetics/side_effect/genetic_burn/finish(mob/living/carbon/human/H) - if(H.reagents.has_reagent("dexalin")) - return - for(var/organ_name in BP_ALL) - var/obj/item/organ/external/E = H.get_organ(organ_name) - E.take_damage(0, 5, 0) - -/datum/genetics/side_effect/bone_snap - name = "Bone Snap" - symptom = "Subject's limbs tremble notably." - treatment = "Inject small dose of bicaridine." - effect = "Subject's bone breaks." - duration = 60 SECONDS - -/datum/genetics/side_effect/bone_snap/start(mob/living/carbon/human/H) - H.custom_emote(VISIBLE_MESSAGE, "'s limbs start shivering uncontrollably.") - -/datum/genetics/side_effect/bone_snap/finish(mob/living/carbon/human/H) - if(H.reagents.has_reagent("bicaridine")) - return - var/organ_name = pick(BP_ALL) - var/obj/item/organ/external/E = H.get_organ(organ_name) - E.take_damage(20, 0, 0) - E.fracture() - -/datum/genetics/side_effect/confuse - name = "Confuse" - symptom = "Subject starts drooling uncontrollably." - treatment = "Inject small dose of dylovene." - effect = "Subject becomes confused." - duration = 30 SECONDS - -/datum/genetics/side_effect/confuse/start(mob/living/carbon/human/H) - var/datum/gender/T = gender_datums[H.get_visible_gender()] - H.custom_emote(VISIBLE_MESSAGE, "has drool running down from [T.his] mouth.") - -/datum/genetics/side_effect/confuse/finish(mob/living/carbon/human/H) - if(H.reagents.has_reagent("anti_toxin")) - return - H.Confuse(100) - -/proc/trigger_side_effect(mob/living/carbon/human/H) - spawn - if(!istype(H)) return - var/tp = pick(subtypesof(/datum/genetics/side_effect)) - var/datum/genetics/side_effect/S = new tp - - S.start(H) - spawn(20) - if(!istype(H)) return - H.Weaken(rand(0, S.duration / 50)) - sleep(S.duration) - - if(!istype(H)) return - H.SetWeakened(0) - S.finish(H) +/datum/genetics/side_effect + var/name // name of the side effect, to use as a header in the manual + var/symptom // description of the symptom of the side effect + var/treatment // description of the treatment of the side effect + var/effect // description of what happens when not treated + var/duration = 0 // delay between start() and finish() + +/datum/genetics/side_effect/proc/start(mob/living/carbon/human/H) + // start the side effect, this should give some cue as to what's happening, + // such as gasping. These cues need to be unique among side-effects. + +/datum/genetics/side_effect/proc/finish(mob/living/carbon/human/H) + // Finish the side-effect. This should first check whether the cure has been + // applied, and if not, cause bad things to happen. + +/datum/genetics/side_effect/genetic_burn + name = "Genetic Burn" + symptom = "Subject's skin turns unusualy red." + treatment = "Inject small dose of dexalin." + effect = "Subject's skin burns." + duration = 30 SECONDS + +/datum/genetics/side_effect/genetic_burn/start(mob/living/carbon/human/H) + H.custom_emote(VISIBLE_MESSAGE, "starts turning very red..") + +/datum/genetics/side_effect/genetic_burn/finish(mob/living/carbon/human/H) + if(H.reagents.has_reagent("dexalin")) + return + for(var/organ_name in BP_ALL) + var/obj/item/organ/external/E = H.get_organ(organ_name) + E.take_damage(0, 5, 0) + +/datum/genetics/side_effect/bone_snap + name = "Bone Snap" + symptom = "Subject's limbs tremble notably." + treatment = "Inject small dose of bicaridine." + effect = "Subject's bone breaks." + duration = 60 SECONDS + +/datum/genetics/side_effect/bone_snap/start(mob/living/carbon/human/H) + H.custom_emote(VISIBLE_MESSAGE, "'s limbs start shivering uncontrollably.") + +/datum/genetics/side_effect/bone_snap/finish(mob/living/carbon/human/H) + if(H.reagents.has_reagent("bicaridine")) + return + var/organ_name = pick(BP_ALL) + var/obj/item/organ/external/E = H.get_organ(organ_name) + E.take_damage(20, 0, 0) + E.fracture() + +/datum/genetics/side_effect/confuse + name = "Confuse" + symptom = "Subject starts drooling uncontrollably." + treatment = "Inject small dose of dylovene." + effect = "Subject becomes confused." + duration = 30 SECONDS + +/datum/genetics/side_effect/confuse/start(mob/living/carbon/human/H) + var/datum/gender/T = gender_datums[H.get_visible_gender()] + H.custom_emote(VISIBLE_MESSAGE, "has drool running down from [T.his] mouth.") + +/datum/genetics/side_effect/confuse/finish(mob/living/carbon/human/H) + if(H.reagents.has_reagent("anti_toxin")) + return + H.Confuse(100) + +/proc/trigger_side_effect(mob/living/carbon/human/H) + spawn + if(!istype(H)) return + var/tp = pick(subtypesof(/datum/genetics/side_effect)) + var/datum/genetics/side_effect/S = new tp + + S.start(H) + spawn(20) + if(!istype(H)) return + H.Weaken(rand(0, S.duration / 50)) + sleep(S.duration) + + if(!istype(H)) return + H.SetWeakened(0) + S.finish(H) diff --git a/code/modules/holodeck/HolodeckPrograms.dm b/code/modules/holodeck/HolodeckPrograms.dm index 4ae4361a21..c68f26d731 100644 --- a/code/modules/holodeck/HolodeckPrograms.dm +++ b/code/modules/holodeck/HolodeckPrograms.dm @@ -1,7 +1,7 @@ -/datum/holodeck_program - var/target - var/list/ambience = null - -/datum/holodeck_program/New(var/target, var/list/ambience = null) - src.target = target - src.ambience = ambience +/datum/holodeck_program + var/target + var/list/ambience = null + +/datum/holodeck_program/New(var/target, var/list/ambience = null) + src.target = target + src.ambience = ambience diff --git a/code/modules/hydroponics/seed_datums_ch.dm b/code/modules/hydroponics/seed_datums_ch.dm index 9d12d808c6..66805f0d5d 100644 --- a/code/modules/hydroponics/seed_datums_ch.dm +++ b/code/modules/hydroponics/seed_datums_ch.dm @@ -1,230 +1,230 @@ -//Variables to make certain things work. Consider sending upstream. -/datum/seed - var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them. - -//////CHOMP PLANTS////// - -/datum/seed/soybean/sapbean - name = "sapbean" - seed_name = "sapbean" - display_name = "sapbeans" - chems = list() - -/datum/seed/soybean/sapbean/orange - name = "orangesapbean" - seed_name = "orange sapbean" - display_name = "orange sapbean" - mutants = list("purplesapbean","bluesapbean","blacksapbean") - chems = list("orangesap" = list(0,10)) - -/datum/seed/soybean/sapbean/purple - name = "purplesapbean" - seed_name = "purple sapbean" - display_name = "purple sapbean" - mutants = list("orangesapbean","bluesapbean","blacksapbean") - chems = list("purplesap" = list(0,10)) - -/datum/seed/soybean/sapbean/blue - name = "bluesapbean" - seed_name = "blue sapbean" - display_name = "blue sapbean" - mutants = list("orangesapbean","purplesapbean","blacksapbean") - chems = list("bluesap" = list(0,10)) - -/datum/seed/soybean/sapbean/black //A bean with all the power but in so little quanitity - name = "blacksapbean" - seed_name = "black sapbean" - display_name = "black sapbean" - chems = list("bluesap" = list(1,2),"orangesap" = list(1,2),"purplesap" = list(1,2)) - -/datum/seed/soybean/sapbean/orange/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#FF8700") - set_trait(TRAIT_PLANT_COLOUR,"#FF8700") -/datum/seed/soybean/sapbean/purple/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#FF00FF") - set_trait(TRAIT_PLANT_COLOUR,"#FF00FF") -/datum/seed/soybean/sapbean/blue/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#0000FF") - set_trait(TRAIT_PLANT_COLOUR,"#0000FF") - -/datum/seed/soybean/sapbean/black/New() //the only real positive is that its 1 plant to care for rather than 3 - ..() - set_trait(TRAIT_PRODUCT_ICON,"treefruit") - set_trait(TRAIT_PRODUCT_COLOUR,"#333333") - set_trait(TRAIT_PLANT_COLOUR,"#333333") - set_trait(TRAIT_PRODUCTION,3) - set_trait(TRAIT_MATURATION,8) - set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_YIELD,2) - -//Commenting out because self_harvesting can be troublesome. -// /datum/seed/apple/falling -// name = "fallingapple" -// mutants = list("poisonapple") -// can_self_harvest = 1 -// chems = list("nutriment" = list(1,5),"applejuice" = list(5,10),"cyanide" = list(1,3)) - -/datum/seed/wheat/meatwheat - name = "meatwheat" - seed_name = "meatwheat" - display_name = "meatwheat stalks" - mutants = null - chems = list("nutriment" = list(1,25), "protein" = list(4,10)) - -/datum/seed/wheat/meatwheat/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#440000") - -/datum/seed/potato/voltato - name = "voltato" - seed_name = "voltato" - display_name = "voltatos" - chems = list("nutriment" = list(1,10), "shockchem" = list(0,10)) - mutants = null - -/datum/seed/potato/voltato/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#E4EC2F") - set_trait(TRAIT_POTENCY,30) - set_trait(TRAIT_MATURATION,12) - set_trait(TRAIT_PRODUCTION,3) - set_trait(TRAIT_YIELD,3) - -/datum/seed/flower/sunflower/solarflower - name = "solarflower" - seed_name = "solarflower" - display_name = "solarflowers" - mutants = null - -/datum/seed/flower/sunflower/solarflower/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#4466b3") - set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#4e74cc") - set_trait(TRAIT_POTENCY,25) - set_trait(TRAIT_MATURATION,10) - set_trait(TRAIT_YIELD,1) - set_trait(TRAIT_SPREAD,1) - -/datum/seed/flower/lavender/milkdew - name = "milkdew" - seed_name = "milk dew" - display_name = "milk dew" - chems = list("nutriment" = list(1,10), "milk" = list(4,5)) - mutants = list("sweetbreeze") - -/datum/seed/flower/lavender/milkdew/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#DFDFDF") - set_trait(TRAIT_POTENCY,5) - set_trait(TRAIT_YIELD,3) - -/datum/seed/flower/lavender/sweetbreeze - name = "sweetbreeze" - seed_name = "sweet breeze" - display_name = "sweet breeze" - chems = list("nutriment" = list(1,10), "serazine" = list(1,10)) - mutants = null - -/datum/seed/flower/lavender/sweetbreeze/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#df9898") - set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_MATURATION,20) - set_trait(TRAIT_PRODUCTION,7) - set_trait(TRAIT_YIELD,3) - -// Tea plants/variants. -/datum/seed/tea - name = "tea" - seed_name = "tea" - display_name = "tea plant" - chems = list("teamush" = list(3,10)) - mutants = null - kitchen_tag = "tea" - -/datum/seed/tea/New() - ..() - set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_MATURATION,5) - set_trait(TRAIT_PRODUCTION,5) - set_trait(TRAIT_YIELD,6) - set_trait(TRAIT_POTENCY,20) - set_trait(TRAIT_PRODUCT_ICON,"tea") - set_trait(TRAIT_PRODUCT_COLOUR,"#b7e496") - set_trait(TRAIT_PLANT_COLOUR,"#b7e496") - set_trait(TRAIT_PLANT_ICON,"bush4") - set_trait(TRAIT_IDEAL_HEAT, 298) - set_trait(TRAIT_IDEAL_LIGHT, 7) - set_trait(TRAIT_WATER_CONSUMPTION, 6) - set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) - -/datum/seed/pitcher_plant //Pitcher plant - name = "pitcher plant" - seed_name = "pitcher plant" - seed_noun = "pits" - display_name = "pitcher shoots" - can_self_harvest = 1 - apply_color_to_mob = FALSE - has_mob_product = /mob/living/simple_mob/vore/pitcher_plant - ai_mob_product = 1 - -/datum/seed/pitcher_plant/New() //No custom icons yet. No spread trait yet even though pitcher fruit can be planted outside of a tray as I've not tied that to hydroponics code. - ..() - set_trait(TRAIT_IMMUTABLE,1) - set_trait(TRAIT_CARNIVOROUS,1) - set_trait(TRAIT_MATURATION,8) - set_trait(TRAIT_PRODUCTION,6) - set_trait(TRAIT_WATER_CONSUMPTION,6) - set_trait(TRAIT_YIELD,1) - set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_PRODUCT_ICON,"corn") - set_trait(TRAIT_PRODUCT_COLOUR,"#a839a2") - set_trait(TRAIT_PLANT_COLOUR,"#5b6f43") - set_trait(TRAIT_PLANT_ICON,"ambrosia") - -/datum/seed/hardlightseed //WIP: havent ported the mob and such yet, best someone more keen on these mobs does it - Jack - name = "Type NULL Hardlight Generator" - seed_name = "Biomechanical Hardlight generator seed" - display_name = "Biomechanical Hardlight stem" - mutants = null - can_self_harvest = 1 - has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo - ai_mob_product = 1 - -/datum/seed/hardlightseed/New() - ..() - set_trait(TRAIT_IMMUTABLE,1) //Normal genetics wont be able to do much with the mechanical parts, its more a machine than a real plant - set_trait(TRAIT_MATURATION,1) - set_trait(TRAIT_PRODUCTION,1) - set_trait(TRAIT_YIELD,1) - set_trait(TRAIT_POTENCY,1) - set_trait(TRAIT_PRODUCT_ICON,"alien4") - set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF") - set_trait(TRAIT_PLANT_COLOUR,"#00FFFF") - set_trait(TRAIT_PLANT_ICON,"alien4") //spooky pods - set_trait(TRAIT_IDEAL_HEAT, 283) - set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0) - set_trait(TRAIT_WATER_CONSUMPTION, 0) - -/datum/seed/cinnamon //WIP - I have no idea what I'm doing with growables in code right now. - name = "cinnamon" - seed_name = "cinnamon" - display_name = "cinnamon tree" - chems = list("cinnamonpowder" = list(5,25)) - mutants = null - kitchen_tag = "cinnamon" - -/datum/seed/cinnamon/New() - ..() - set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_MATURATION,6) - set_trait(TRAIT_PRODUCTION,6) - set_trait(TRAIT_YIELD,5) - set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_PRODUCT_ICON, "stalk") - set_trait(TRAIT_PRODUCT_COLOUR, "#FF9A85") - set_trait(TRAIT_PLANT_ICON,"tree2") +//Variables to make certain things work. Consider sending upstream. +/datum/seed + var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them. + +//////CHOMP PLANTS////// + +/datum/seed/soybean/sapbean + name = "sapbean" + seed_name = "sapbean" + display_name = "sapbeans" + chems = list() + +/datum/seed/soybean/sapbean/orange + name = "orangesapbean" + seed_name = "orange sapbean" + display_name = "orange sapbean" + mutants = list("purplesapbean","bluesapbean","blacksapbean") + chems = list("orangesap" = list(0,10)) + +/datum/seed/soybean/sapbean/purple + name = "purplesapbean" + seed_name = "purple sapbean" + display_name = "purple sapbean" + mutants = list("orangesapbean","bluesapbean","blacksapbean") + chems = list("purplesap" = list(0,10)) + +/datum/seed/soybean/sapbean/blue + name = "bluesapbean" + seed_name = "blue sapbean" + display_name = "blue sapbean" + mutants = list("orangesapbean","purplesapbean","blacksapbean") + chems = list("bluesap" = list(0,10)) + +/datum/seed/soybean/sapbean/black //A bean with all the power but in so little quanitity + name = "blacksapbean" + seed_name = "black sapbean" + display_name = "black sapbean" + chems = list("bluesap" = list(1,2),"orangesap" = list(1,2),"purplesap" = list(1,2)) + +/datum/seed/soybean/sapbean/orange/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#FF8700") + set_trait(TRAIT_PLANT_COLOUR,"#FF8700") +/datum/seed/soybean/sapbean/purple/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#FF00FF") + set_trait(TRAIT_PLANT_COLOUR,"#FF00FF") +/datum/seed/soybean/sapbean/blue/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#0000FF") + set_trait(TRAIT_PLANT_COLOUR,"#0000FF") + +/datum/seed/soybean/sapbean/black/New() //the only real positive is that its 1 plant to care for rather than 3 + ..() + set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_COLOUR,"#333333") + set_trait(TRAIT_PLANT_COLOUR,"#333333") + set_trait(TRAIT_PRODUCTION,3) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_YIELD,2) + +//Commenting out because self_harvesting can be troublesome. +// /datum/seed/apple/falling +// name = "fallingapple" +// mutants = list("poisonapple") +// can_self_harvest = 1 +// chems = list("nutriment" = list(1,5),"applejuice" = list(5,10),"cyanide" = list(1,3)) + +/datum/seed/wheat/meatwheat + name = "meatwheat" + seed_name = "meatwheat" + display_name = "meatwheat stalks" + mutants = null + chems = list("nutriment" = list(1,25), "protein" = list(4,10)) + +/datum/seed/wheat/meatwheat/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#440000") + +/datum/seed/potato/voltato + name = "voltato" + seed_name = "voltato" + display_name = "voltatos" + chems = list("nutriment" = list(1,10), "shockchem" = list(0,10)) + mutants = null + +/datum/seed/potato/voltato/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#E4EC2F") + set_trait(TRAIT_POTENCY,30) + set_trait(TRAIT_MATURATION,12) + set_trait(TRAIT_PRODUCTION,3) + set_trait(TRAIT_YIELD,3) + +/datum/seed/flower/sunflower/solarflower + name = "solarflower" + seed_name = "solarflower" + display_name = "solarflowers" + mutants = null + +/datum/seed/flower/sunflower/solarflower/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#4466b3") + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#4e74cc") + set_trait(TRAIT_POTENCY,25) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_SPREAD,1) + +/datum/seed/flower/lavender/milkdew + name = "milkdew" + seed_name = "milk dew" + display_name = "milk dew" + chems = list("nutriment" = list(1,10), "milk" = list(4,5)) + mutants = list("sweetbreeze") + +/datum/seed/flower/lavender/milkdew/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#DFDFDF") + set_trait(TRAIT_POTENCY,5) + set_trait(TRAIT_YIELD,3) + +/datum/seed/flower/lavender/sweetbreeze + name = "sweetbreeze" + seed_name = "sweet breeze" + display_name = "sweet breeze" + chems = list("nutriment" = list(1,10), "serazine" = list(1,10)) + mutants = null + +/datum/seed/flower/lavender/sweetbreeze/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#df9898") + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_MATURATION,20) + set_trait(TRAIT_PRODUCTION,7) + set_trait(TRAIT_YIELD,3) + +// Tea plants/variants. +/datum/seed/tea + name = "tea" + seed_name = "tea" + display_name = "tea plant" + chems = list("teamush" = list(3,10)) + mutants = null + kitchen_tag = "tea" + +/datum/seed/tea/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_MATURATION,5) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,6) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"tea") + set_trait(TRAIT_PRODUCT_COLOUR,"#b7e496") + set_trait(TRAIT_PLANT_COLOUR,"#b7e496") + set_trait(TRAIT_PLANT_ICON,"bush4") + set_trait(TRAIT_IDEAL_HEAT, 298) + set_trait(TRAIT_IDEAL_LIGHT, 7) + set_trait(TRAIT_WATER_CONSUMPTION, 6) + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) + +/datum/seed/pitcher_plant //Pitcher plant + name = "pitcher plant" + seed_name = "pitcher plant" + seed_noun = "pits" + display_name = "pitcher shoots" + can_self_harvest = 1 + apply_color_to_mob = FALSE + has_mob_product = /mob/living/simple_mob/vore/pitcher_plant + ai_mob_product = 1 + +/datum/seed/pitcher_plant/New() //No custom icons yet. No spread trait yet even though pitcher fruit can be planted outside of a tray as I've not tied that to hydroponics code. + ..() + set_trait(TRAIT_IMMUTABLE,1) + set_trait(TRAIT_CARNIVOROUS,1) + set_trait(TRAIT_MATURATION,8) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_WATER_CONSUMPTION,6) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON,"corn") + set_trait(TRAIT_PRODUCT_COLOUR,"#a839a2") + set_trait(TRAIT_PLANT_COLOUR,"#5b6f43") + set_trait(TRAIT_PLANT_ICON,"ambrosia") + +/datum/seed/hardlightseed //WIP: havent ported the mob and such yet, best someone more keen on these mobs does it - Jack + name = "Type NULL Hardlight Generator" + seed_name = "Biomechanical Hardlight generator seed" + display_name = "Biomechanical Hardlight stem" + mutants = null + can_self_harvest = 1 + has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo + ai_mob_product = 1 + +/datum/seed/hardlightseed/New() + ..() + set_trait(TRAIT_IMMUTABLE,1) //Normal genetics wont be able to do much with the mechanical parts, its more a machine than a real plant + set_trait(TRAIT_MATURATION,1) + set_trait(TRAIT_PRODUCTION,1) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_POTENCY,1) + set_trait(TRAIT_PRODUCT_ICON,"alien4") + set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF") + set_trait(TRAIT_PLANT_COLOUR,"#00FFFF") + set_trait(TRAIT_PLANT_ICON,"alien4") //spooky pods + set_trait(TRAIT_IDEAL_HEAT, 283) + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0) + set_trait(TRAIT_WATER_CONSUMPTION, 0) + +/datum/seed/cinnamon //WIP - I have no idea what I'm doing with growables in code right now. + name = "cinnamon" + seed_name = "cinnamon" + display_name = "cinnamon tree" + chems = list("cinnamonpowder" = list(5,25)) + mutants = null + kitchen_tag = "cinnamon" + +/datum/seed/cinnamon/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,6) + set_trait(TRAIT_YIELD,5) + set_trait(TRAIT_POTENCY,10) + set_trait(TRAIT_PRODUCT_ICON, "stalk") + set_trait(TRAIT_PRODUCT_COLOUR, "#FF9A85") + set_trait(TRAIT_PLANT_ICON,"tree2") diff --git a/code/modules/hydroponics/seed_packets_ch.dm b/code/modules/hydroponics/seed_packets_ch.dm index 27d345d999..c08df27e7a 100644 --- a/code/modules/hydroponics/seed_packets_ch.dm +++ b/code/modules/hydroponics/seed_packets_ch.dm @@ -1,10 +1,10 @@ - -/obj/item/seeds/teaseed - seed_type = "tea" - - -/obj/item/seeds/cinnamon - seed_type = "cinnamon" - -/obj/item/seeds/pitcherseed - seed_type = "pitcher plant" + +/obj/item/seeds/teaseed + seed_type = "tea" + + +/obj/item/seeds/cinnamon + seed_type = "cinnamon" + +/obj/item/seeds/pitcherseed + seed_type = "pitcher plant" diff --git a/code/modules/identification/identification.dm b/code/modules/identification/identification.dm index 99ed8bc633..41ac23316a 100644 --- a/code/modules/identification/identification.dm +++ b/code/modules/identification/identification.dm @@ -1,126 +1,126 @@ -// This is a datum attached to objects to make their 'identity' be unknown initially. -// The identitiy and properties of an unidentified object can be determined in-game through a specialized process or by potentially risky trial-and-error. -// This is very similar to a traditional roguelike's identification system, and as such will use certain terms from those to describe them. -// Despite this, unlike a roguelike, objects that do the same thing DO NOT have the same name/appearance/etc. - -/datum/identification - var/obj/holder = null // The thing the datum is 'attached' to. - // Holds the true information. - var/true_name = null // The real name of the object. It is copied automatically from holder, on the datum being instantiated. - var/true_desc = null // Ditto, for desc. - var/true_description_info = null // Ditto, for helpful examine panel entries. - var/true_description_fluff = null // Ditto, for lore. - var/true_description_antag = null // Ditto, for antag info (this probably won't get used). - var/identified = IDENTITY_UNKNOWN // Can be IDENTITY_UNKNOWN, IDENTITY_PROPERTIES, IDENTITY_QUALITY, or IDENTITY_FULL. - - // Holds what is displayed when not identified sufficently. - var/unidentified_name = null // The name given to the object when not identified. Generated by generate_unidentified_name() - var/unidentified_desc = "You're not too sure what this is." - var/unidentified_description_info = "This object is unidentified, and as such its properties are unknown. Using this object may be dangerous." - - // Lists of lists for generating names by combining one from each. - var/list/naming_lists = list() - - // What 'identification type' is needed to identify this. - var/identification_type = IDENTITY_TYPE_NONE - -/datum/identification/New(obj/new_holder) - ASSERT(new_holder) - holder = new_holder - record_true_identity() // Get all the identifying features from the holder. - update_name() // Then hide them for awhile if needed. - -/datum/identification/Destroy() - holder = null - return ..() - -// Records the object's inital identifiying features to the datum for future safekeeping. -/datum/identification/proc/record_true_identity() - true_name = holder.name - true_desc = holder.desc - true_description_info = holder.description_info - true_description_fluff = holder.description_fluff - true_description_antag = holder.description_antag - -// Formally identifies the holder. -/datum/identification/proc/identify(new_identity = IDENTITY_FULL, mob/user) - if(new_identity & identified) // Already done. - return - identified |= new_identity // Set the bitflag. - if(user) - switch(identified) - if(IDENTITY_QUALITY) - to_chat(user, "You've identified \the [holder]'s quality.") - if(IDENTITY_PROPERTIES) - to_chat(user, "You've identified \the [holder]'s functionality as a [true_name].") - if(IDENTITY_FULL) - to_chat(user, "You've identified \the [holder] as a [true_name], and its quality.") - update_name() - holder.update_icon() - -// Reverses identification for whatever reason. -/datum/identification/proc/unidentify(new_identity = IDENTITY_UNKNOWN, mob/user) - identified &= ~new_identity // Unset the bitflag. - update_name() - holder.update_icon() - if(user) - switch(identified) // Give a message based on what's left. - if(IDENTITY_QUALITY) - to_chat(user, span("warning", "You forgot what \the [holder] actually did...")) - if(IDENTITY_PROPERTIES) - to_chat(user, span("warning", "You forgot \the [holder]'s quality...")) - if(IDENTITY_UNKNOWN) - to_chat(user, span("warning", "You forgot everything about \the [holder].")) - -// Sets the holder's name to the real name if its properties are identified, or obscures it otherwise. -/datum/identification/proc/update_name() - if(identified & IDENTITY_PROPERTIES) - holder.name = true_name - holder.desc = true_desc - holder.description_info = true_description_info - holder.description_fluff = true_description_fluff - holder.description_antag = true_description_antag - return - - if(!unidentified_name) - unidentified_name = generate_unidentified_name() - - holder.name = unidentified_name - holder.desc = unidentified_desc - holder.description_info = unidentified_description_info - holder.description_fluff = null - holder.description_antag = null - -// Makes a name for an object that is not identified. It picks one string out of each list inside naming_list. -/datum/identification/proc/generate_unidentified_name() - if(!LAZYLEN(naming_lists)) - return "unidentified object" - - var/list/new_name = list() - for(var/list/current_list as anything in naming_lists) - new_name += pick(current_list) - return new_name.Join(" ") - -// Used for tech-based objects. -// Unused for now pending Future Stuff(tm). -/datum/identification/mechanical - naming_lists = list( - list("unidentified", "unknown", "strange", "weird", "unfamiliar", "peculiar", "mysterious", "bizarre", "odd"), - list("device", "apparatus", "gadget", "mechanism", "appliance", "machine", "equipment", "invention", "contraption") - ) - identification_type = IDENTITY_TYPE_TECH - -// Used for unidentified hypos. -// Their contents can range from genuine medication, expired medicine, illicit drugs, toxins and poisons, and more. -// They are the analog for potions in a traditional roguelike. -/datum/identification/hypo - naming_lists = list( - list("unidentified", "unknown", "unmarked", "blank", "refilled", "custom", "modified", "questionable", "suspicious"), - list("autoinjector") - ) - unidentified_desc = "An autoinjector that does not give any indication towards what is inside. \ - The case is also sealed tight and the liquids contained cannot be removed except by injecting it into someone. \ - Do you feel lucky?" - unidentified_description_info = "A skilled chemist with a specialized machine can identify this autoinjector. \ - Blindly using the autoinjector is risky and can be dangerous." - identification_type = IDENTITY_TYPE_CHEMICAL +// This is a datum attached to objects to make their 'identity' be unknown initially. +// The identitiy and properties of an unidentified object can be determined in-game through a specialized process or by potentially risky trial-and-error. +// This is very similar to a traditional roguelike's identification system, and as such will use certain terms from those to describe them. +// Despite this, unlike a roguelike, objects that do the same thing DO NOT have the same name/appearance/etc. + +/datum/identification + var/obj/holder = null // The thing the datum is 'attached' to. + // Holds the true information. + var/true_name = null // The real name of the object. It is copied automatically from holder, on the datum being instantiated. + var/true_desc = null // Ditto, for desc. + var/true_description_info = null // Ditto, for helpful examine panel entries. + var/true_description_fluff = null // Ditto, for lore. + var/true_description_antag = null // Ditto, for antag info (this probably won't get used). + var/identified = IDENTITY_UNKNOWN // Can be IDENTITY_UNKNOWN, IDENTITY_PROPERTIES, IDENTITY_QUALITY, or IDENTITY_FULL. + + // Holds what is displayed when not identified sufficently. + var/unidentified_name = null // The name given to the object when not identified. Generated by generate_unidentified_name() + var/unidentified_desc = "You're not too sure what this is." + var/unidentified_description_info = "This object is unidentified, and as such its properties are unknown. Using this object may be dangerous." + + // Lists of lists for generating names by combining one from each. + var/list/naming_lists = list() + + // What 'identification type' is needed to identify this. + var/identification_type = IDENTITY_TYPE_NONE + +/datum/identification/New(obj/new_holder) + ASSERT(new_holder) + holder = new_holder + record_true_identity() // Get all the identifying features from the holder. + update_name() // Then hide them for awhile if needed. + +/datum/identification/Destroy() + holder = null + return ..() + +// Records the object's inital identifiying features to the datum for future safekeeping. +/datum/identification/proc/record_true_identity() + true_name = holder.name + true_desc = holder.desc + true_description_info = holder.description_info + true_description_fluff = holder.description_fluff + true_description_antag = holder.description_antag + +// Formally identifies the holder. +/datum/identification/proc/identify(new_identity = IDENTITY_FULL, mob/user) + if(new_identity & identified) // Already done. + return + identified |= new_identity // Set the bitflag. + if(user) + switch(identified) + if(IDENTITY_QUALITY) + to_chat(user, "You've identified \the [holder]'s quality.") + if(IDENTITY_PROPERTIES) + to_chat(user, "You've identified \the [holder]'s functionality as a [true_name].") + if(IDENTITY_FULL) + to_chat(user, "You've identified \the [holder] as a [true_name], and its quality.") + update_name() + holder.update_icon() + +// Reverses identification for whatever reason. +/datum/identification/proc/unidentify(new_identity = IDENTITY_UNKNOWN, mob/user) + identified &= ~new_identity // Unset the bitflag. + update_name() + holder.update_icon() + if(user) + switch(identified) // Give a message based on what's left. + if(IDENTITY_QUALITY) + to_chat(user, span("warning", "You forgot what \the [holder] actually did...")) + if(IDENTITY_PROPERTIES) + to_chat(user, span("warning", "You forgot \the [holder]'s quality...")) + if(IDENTITY_UNKNOWN) + to_chat(user, span("warning", "You forgot everything about \the [holder].")) + +// Sets the holder's name to the real name if its properties are identified, or obscures it otherwise. +/datum/identification/proc/update_name() + if(identified & IDENTITY_PROPERTIES) + holder.name = true_name + holder.desc = true_desc + holder.description_info = true_description_info + holder.description_fluff = true_description_fluff + holder.description_antag = true_description_antag + return + + if(!unidentified_name) + unidentified_name = generate_unidentified_name() + + holder.name = unidentified_name + holder.desc = unidentified_desc + holder.description_info = unidentified_description_info + holder.description_fluff = null + holder.description_antag = null + +// Makes a name for an object that is not identified. It picks one string out of each list inside naming_list. +/datum/identification/proc/generate_unidentified_name() + if(!LAZYLEN(naming_lists)) + return "unidentified object" + + var/list/new_name = list() + for(var/list/current_list as anything in naming_lists) + new_name += pick(current_list) + return new_name.Join(" ") + +// Used for tech-based objects. +// Unused for now pending Future Stuff(tm). +/datum/identification/mechanical + naming_lists = list( + list("unidentified", "unknown", "strange", "weird", "unfamiliar", "peculiar", "mysterious", "bizarre", "odd"), + list("device", "apparatus", "gadget", "mechanism", "appliance", "machine", "equipment", "invention", "contraption") + ) + identification_type = IDENTITY_TYPE_TECH + +// Used for unidentified hypos. +// Their contents can range from genuine medication, expired medicine, illicit drugs, toxins and poisons, and more. +// They are the analog for potions in a traditional roguelike. +/datum/identification/hypo + naming_lists = list( + list("unidentified", "unknown", "unmarked", "blank", "refilled", "custom", "modified", "questionable", "suspicious"), + list("autoinjector") + ) + unidentified_desc = "An autoinjector that does not give any indication towards what is inside. \ + The case is also sealed tight and the liquids contained cannot be removed except by injecting it into someone. \ + Do you feel lucky?" + unidentified_description_info = "A skilled chemist with a specialized machine can identify this autoinjector. \ + Blindly using the autoinjector is risky and can be dangerous." + identification_type = IDENTITY_TYPE_CHEMICAL diff --git a/code/modules/identification/item_procs.dm b/code/modules/identification/item_procs.dm index c2e5ddaed6..b21716bf47 100644 --- a/code/modules/identification/item_procs.dm +++ b/code/modules/identification/item_procs.dm @@ -1,30 +1,30 @@ -// This is on the base /item so badmins can play with it by calling hide_identity(). -/obj/item - var/datum/identification/identity = null - var/identity_type = /datum/identification - var/init_hide_identity = FALSE // Set to true to automatically obscure the object on initialization. - -/obj/item/Initialize() - if(init_hide_identity) - identity = new identity_type(src) - return ..() - -/obj/item/Destroy() - if(identity) - QDEL_NULL(identity) - return ..() - -/obj/item/proc/hide_identity() // Mostly for admins to make things secret. - if(!identity) - identity = new identity_type(src) - else - identity.unidentify() - -/obj/item/proc/identify(identity_type = IDENTITY_FULL, mob/user) - if(identity) - identity.identify(identity_type, user) - -/obj/item/proc/is_identified(identity_type = IDENTITY_FULL) - if(!identity) // No identification datum means nothing to hide. - return TRUE - return identity_type & identity.identified +// This is on the base /item so badmins can play with it by calling hide_identity(). +/obj/item + var/datum/identification/identity = null + var/identity_type = /datum/identification + var/init_hide_identity = FALSE // Set to true to automatically obscure the object on initialization. + +/obj/item/Initialize() + if(init_hide_identity) + identity = new identity_type(src) + return ..() + +/obj/item/Destroy() + if(identity) + QDEL_NULL(identity) + return ..() + +/obj/item/proc/hide_identity() // Mostly for admins to make things secret. + if(!identity) + identity = new identity_type(src) + else + identity.unidentify() + +/obj/item/proc/identify(identity_type = IDENTITY_FULL, mob/user) + if(identity) + identity.identify(identity_type, user) + +/obj/item/proc/is_identified(identity_type = IDENTITY_FULL) + if(!identity) // No identification datum means nothing to hide. + return TRUE + return identity_type & identity.identified diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm index 4840537d97..c7b6f998fc 100644 --- a/code/modules/integrated_electronics/core/assemblies/clothing.dm +++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm @@ -1,180 +1,180 @@ - -// The base subtype for assemblies that can be worn. Certain pieces will have more or less capabilities -// E.g. Glasses have less room than something worn over the chest. -// Note that the electronic assembly is INSIDE the object that actually gets worn, in a similar way to implants. - -/obj/item/device/electronic_assembly/clothing - name = "electronic clothing" - icon_state = "circuitry" // Needs to match the clothing's base icon_state. - desc = "It's a case, for building machines attached to clothing." - w_class = ITEMSIZE_SMALL - max_components = IC_COMPONENTS_BASE - max_complexity = IC_COMPLEXITY_BASE - var/obj/item/clothing/clothing = null - -/obj/item/device/electronic_assembly/clothing/tgui_host() - return clothing.tgui_host() - -/obj/item/device/electronic_assembly/clothing/update_icon() - ..() - clothing.icon_state = icon_state - // We don't need to update the mob sprite since it won't (and shouldn't) actually get changed. - -// This is 'small' relative to the size of regular clothing assemblies. -/obj/item/device/electronic_assembly/clothing/small - max_components = IC_COMPONENTS_BASE / 2 - max_complexity = IC_COMPLEXITY_BASE / 2 - w_class = ITEMSIZE_TINY - -// Ditto. -/obj/item/device/electronic_assembly/clothing/large - max_components = IC_COMPONENTS_BASE * 2 - max_complexity = IC_COMPLEXITY_BASE * 2 - w_class = ITEMSIZE_NORMAL - - -// This is defined higher up, in /clothing to avoid lots of copypasta. -/obj/item/clothing - var/obj/item/device/electronic_assembly/clothing/IC = null - var/obj/item/integrated_circuit/built_in/action_button/action_circuit = null // This gets pulsed when someone clicks the button on the hud. - -/obj/item/clothing/emp_act(severity) - if(IC) - IC.emp_act(severity) - ..() - -/obj/item/clothing/examine(mob/user) - . = ..() - if(IC) - . += IC.examine(user) - -/obj/item/clothing/CtrlShiftClick(mob/user) - var/turf/T = get_turf(src) - if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room - return FALSE - var/obj/item/I = user.get_active_hand() // ctrl-shift-click doesn't give us the item, we have to fetch it - if(!I) - return FALSE - return IC.attackby(I, user) - -/obj/item/clothing/attack_self(mob/user) - if(IC) - if(IC.opened) - IC.attack_self(user) - else - action_circuit.do_work() - else - ..() - -// Does most of the repeatative setup. -/obj/item/clothing/proc/setup_integrated_circuit(new_type) - // Set up the internal circuit holder. - IC = new new_type(src) - IC.clothing = src - IC.name = name - - // Clothing assemblies can be triggered by clicking on the HUD. This allows that to occur. - action_circuit = new(src.IC) - IC.force_add_circuit(action_circuit) - action_button_name = "Activate [name]" - -/obj/item/clothing/Destroy() - if(IC) - IC.clothing = null - action_circuit = null // Will get deleted by qdel-ing the IC assembly. - qdel(IC) - return ..() - -// Specific subtypes. - -// Jumpsuit. -/obj/item/clothing/under/circuitry - name = "electronic jumpsuit" - desc = "It's a wearable case for electronics. This on is a black jumpsuit with wiring weaved into the fabric." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - worn_state = "circuitry" - -/obj/item/clothing/under/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing) - return ..() - - -// Gloves. -/obj/item/clothing/gloves/circuitry - name = "electronic gloves" - desc = "It's a wearable case for electronics. This one is a pair of black gloves, with wires woven into them. A small \ - device with a screen is attached to the left glove." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - item_state = "circuitry" - -/obj/item/clothing/gloves/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) - return ..() - - -// Glasses. -/obj/item/clothing/glasses/circuitry - name = "electronic goggles" - desc = "It's a wearable case for electronics. This one is a pair of goggles, with wiring sticking out. \ - Could this augment your vision?" // Sadly it won't, or at least not yet. - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - item_state = "night" // The on-mob sprite would be identical anyways. - -/obj/item/clothing/glasses/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) - return ..() - -// Shoes -/obj/item/clothing/shoes/circuitry - name = "electronic boots" - desc = "It's a wearable case for electronics. This one is a pair of boots, with wires attached to a small \ - cover." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - item_state = "circuitry" - -/obj/item/clothing/shoes/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) - return ..() - -// Head -/obj/item/clothing/head/circuitry - name = "electronic headwear" - desc = "It's a wearable case for electronics. This one appears to be a very technical-looking piece that \ - goes around the collar, with a heads-up-display attached on the right." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - item_state = "circuitry" - -/obj/item/clothing/head/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) - return ..() - -// Ear -/obj/item/clothing/ears/circuitry - name = "electronic earwear" - desc = "It's a wearable case for electronics. This one appears to be a technical-looking headset." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon = 'icons/inventory/ears/item.dmi' - icon_state = "circuitry" - item_state = "circuitry" - -/obj/item/clothing/ears/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) - return ..() - -// Exo-slot -/obj/item/clothing/suit/circuitry - name = "electronic chestpiece" - desc = "It's a wearable case for electronics. This one appears to be a very technical-looking vest, that \ - almost looks professionally made, however the wiring popping out betrays that idea." - description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." - icon_state = "circuitry" - item_state = "circuitry" - -/obj/item/clothing/suit/circuitry/Initialize() - setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/large) + +// The base subtype for assemblies that can be worn. Certain pieces will have more or less capabilities +// E.g. Glasses have less room than something worn over the chest. +// Note that the electronic assembly is INSIDE the object that actually gets worn, in a similar way to implants. + +/obj/item/device/electronic_assembly/clothing + name = "electronic clothing" + icon_state = "circuitry" // Needs to match the clothing's base icon_state. + desc = "It's a case, for building machines attached to clothing." + w_class = ITEMSIZE_SMALL + max_components = IC_COMPONENTS_BASE + max_complexity = IC_COMPLEXITY_BASE + var/obj/item/clothing/clothing = null + +/obj/item/device/electronic_assembly/clothing/tgui_host() + return clothing.tgui_host() + +/obj/item/device/electronic_assembly/clothing/update_icon() + ..() + clothing.icon_state = icon_state + // We don't need to update the mob sprite since it won't (and shouldn't) actually get changed. + +// This is 'small' relative to the size of regular clothing assemblies. +/obj/item/device/electronic_assembly/clothing/small + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + w_class = ITEMSIZE_TINY + +// Ditto. +/obj/item/device/electronic_assembly/clothing/large + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + w_class = ITEMSIZE_NORMAL + + +// This is defined higher up, in /clothing to avoid lots of copypasta. +/obj/item/clothing + var/obj/item/device/electronic_assembly/clothing/IC = null + var/obj/item/integrated_circuit/built_in/action_button/action_circuit = null // This gets pulsed when someone clicks the button on the hud. + +/obj/item/clothing/emp_act(severity) + if(IC) + IC.emp_act(severity) + ..() + +/obj/item/clothing/examine(mob/user) + . = ..() + if(IC) + . += IC.examine(user) + +/obj/item/clothing/CtrlShiftClick(mob/user) + var/turf/T = get_turf(src) + if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room + return FALSE + var/obj/item/I = user.get_active_hand() // ctrl-shift-click doesn't give us the item, we have to fetch it + if(!I) + return FALSE + return IC.attackby(I, user) + +/obj/item/clothing/attack_self(mob/user) + if(IC) + if(IC.opened) + IC.attack_self(user) + else + action_circuit.do_work() + else + ..() + +// Does most of the repeatative setup. +/obj/item/clothing/proc/setup_integrated_circuit(new_type) + // Set up the internal circuit holder. + IC = new new_type(src) + IC.clothing = src + IC.name = name + + // Clothing assemblies can be triggered by clicking on the HUD. This allows that to occur. + action_circuit = new(src.IC) + IC.force_add_circuit(action_circuit) + action_button_name = "Activate [name]" + +/obj/item/clothing/Destroy() + if(IC) + IC.clothing = null + action_circuit = null // Will get deleted by qdel-ing the IC assembly. + qdel(IC) + return ..() + +// Specific subtypes. + +// Jumpsuit. +/obj/item/clothing/under/circuitry + name = "electronic jumpsuit" + desc = "It's a wearable case for electronics. This on is a black jumpsuit with wiring weaved into the fabric." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + worn_state = "circuitry" + +/obj/item/clothing/under/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing) + return ..() + + +// Gloves. +/obj/item/clothing/gloves/circuitry + name = "electronic gloves" + desc = "It's a wearable case for electronics. This one is a pair of black gloves, with wires woven into them. A small \ + device with a screen is attached to the left glove." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/gloves/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + + +// Glasses. +/obj/item/clothing/glasses/circuitry + name = "electronic goggles" + desc = "It's a wearable case for electronics. This one is a pair of goggles, with wiring sticking out. \ + Could this augment your vision?" // Sadly it won't, or at least not yet. + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + item_state = "night" // The on-mob sprite would be identical anyways. + +/obj/item/clothing/glasses/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Shoes +/obj/item/clothing/shoes/circuitry + name = "electronic boots" + desc = "It's a wearable case for electronics. This one is a pair of boots, with wires attached to a small \ + cover." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/shoes/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Head +/obj/item/clothing/head/circuitry + name = "electronic headwear" + desc = "It's a wearable case for electronics. This one appears to be a very technical-looking piece that \ + goes around the collar, with a heads-up-display attached on the right." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/head/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Ear +/obj/item/clothing/ears/circuitry + name = "electronic earwear" + desc = "It's a wearable case for electronics. This one appears to be a technical-looking headset." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon = 'icons/inventory/ears/item.dmi' + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/ears/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small) + return ..() + +// Exo-slot +/obj/item/clothing/suit/circuitry + name = "electronic chestpiece" + desc = "It's a wearable case for electronics. This one appears to be a very technical-looking vest, that \ + almost looks professionally made, however the wiring popping out betrays that idea." + description_info = "Control-shift-click on this with an item in hand to use it on the integrated circuit." + icon_state = "circuitry" + item_state = "circuitry" + +/obj/item/clothing/suit/circuitry/Initialize() + setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/large) return ..() \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/assemblies/generic.dm b/code/modules/integrated_electronics/core/assemblies/generic.dm index 3534d5b1f1..6329d0a25c 100644 --- a/code/modules/integrated_electronics/core/assemblies/generic.dm +++ b/code/modules/integrated_electronics/core/assemblies/generic.dm @@ -1,263 +1,263 @@ -// Generic subtypes without a lot of special code. - -// Small assemblies. - -/obj/item/device/electronic_assembly/default - name = "type-a electronic assembly" - -/obj/item/device/electronic_assembly/calc - name = "type-b electronic assembly" - icon_state = "setup_small_calc" - desc = "It's a case, for building small electronics with. This one resembles a pocket calculator." - -/obj/item/device/electronic_assembly/clam - name = "type-c electronic assembly" - icon_state = "setup_small_clam" - desc = "It's a case, for building small electronics with. This one has a clamshell design." - -/obj/item/device/electronic_assembly/simple - name = "type-d electronic assembly" - icon_state = "setup_small_simple" - desc = "It's a case, for building small electronics with. This one has a simple design." - -/obj/item/device/electronic_assembly/hook - name = "type-e electronic assembly" - icon_state = "setup_small_hook" - desc = "It's a case, for building small electronics with. This one looks like it has a belt clip, but it's purely decorative." - -/obj/item/device/electronic_assembly/pda - name = "type-f electronic assembly" - icon_state = "setup_small_pda" - desc = "It's a case, for building small electronics with. This one resembles a PDA." - -// Tiny assemblies. - -/obj/item/device/electronic_assembly/tiny - name = "electronic device" - icon_state = "setup_device" - desc = "It's a case, for building tiny-sized electronics with." - w_class = ITEMSIZE_TINY - max_components = IC_COMPONENTS_BASE / 2 - max_complexity = IC_COMPLEXITY_BASE / 2 - -/obj/item/device/electronic_assembly/tiny/default - name = "type-a electronic device" - -/obj/item/device/electronic_assembly/tiny/cylinder - name = "type-b electronic device" - icon_state = "setup_device_cylinder" - desc = "It's a case, for building tiny-sized electronics with. This one has a cylindrical design." - -/obj/item/device/electronic_assembly/tiny/scanner - name = "type-c electronic device" - icon_state = "setup_device_scanner" - desc = "It's a case, for building tiny-sized electronics with. This one has a scanner-like design." - -/obj/item/device/electronic_assembly/tiny/hook - name = "type-d electronic device" - icon_state = "setup_device_hook" - desc = "It's a case, for building tiny-sized electronics with. This one looks like it has a belt clip, but it's purely decorative." - -/obj/item/device/electronic_assembly/tiny/box - name = "type-e electronic device" - icon_state = "setup_device_box" - desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design." - -// Medium assemblies. - -/obj/item/device/electronic_assembly/medium - name = "electronic mechanism" - icon_state = "setup_medium" - desc = "It's a case, for building medium-sized electronics with." - w_class = ITEMSIZE_NORMAL - max_components = IC_COMPONENTS_BASE * 2 - max_complexity = IC_COMPLEXITY_BASE * 2 - -/obj/item/device/electronic_assembly/medium/default - name = "type-a electronic mechanism" - -/obj/item/device/electronic_assembly/medium/box - name = "type-b electronic mechanism" - icon_state = "setup_medium_box" - desc = "It's a case, for building medium-sized electronics with. This one has a boxy design." - -/obj/item/device/electronic_assembly/medium/clam - name = "type-c electronic mechanism" - icon_state = "setup_medium_clam" - desc = "It's a case, for building medium-sized electronics with. This one has a clamshell design." - -/obj/item/device/electronic_assembly/medium/medical - name = "type-d electronic mechanism" - icon_state = "setup_medium_med" - desc = "It's a case, for building medium-sized electronics with. This one resembles some type of medical apparatus." - -/obj/item/device/electronic_assembly/medium/gun - name = "type-e electronic mechanism" - icon_state = "setup_medium_gun" - item_state = "circuitgun" - desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, \ - if you're feeling optimistic." -// can_fire_equipped = TRUE - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi', - ) - -/obj/item/device/electronic_assembly/medium/radio - name = "type-f electronic mechanism" - icon_state = "setup_medium_radio" - desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio." - -// Large assemblies. - -/obj/item/device/electronic_assembly/large - name = "electronic machine" - icon_state = "setup_large" - desc = "It's a case, for building large electronics with." - w_class = ITEMSIZE_LARGE - max_components = IC_COMPONENTS_BASE * 4 - max_complexity = IC_COMPLEXITY_BASE * 4 - can_anchor = TRUE - -/obj/item/device/electronic_assembly/large/default - name = "type-a electronic machine" - -/obj/item/device/electronic_assembly/large/scope - name = "type-b electronic machine" - icon_state = "setup_large_scope" - desc = "It's a case, for building large electronics with. This one resembles an oscilloscope." - -/obj/item/device/electronic_assembly/large/terminal - name = "type-c electronic machine" - icon_state = "setup_large_terminal" - desc = "It's a case, for building large electronics with. This one resembles a computer terminal." - -/obj/item/device/electronic_assembly/large/arm - name = "type-d electronic machine" - icon_state = "setup_large_arm" - desc = "It's a case, for building large electronics with. This one resembles a robotic arm." - -/obj/item/device/electronic_assembly/large/tall - name = "type-e electronic machine" - icon_state = "setup_large_tall" - desc = "It's a case, for building large electronics with. This one has a tall design." - -/obj/item/device/electronic_assembly/large/industrial - name = "type-f electronic machine" - icon_state = "setup_large_industrial" - desc = "It's a case, for building large electronics with. This one resembles some kind of industrial machinery." - -// Drone assemblies, which can move with the locomotion circuit. - -/obj/item/device/electronic_assembly/drone - name = "electronic drone" - icon_state = "setup_drone" - desc = "It's a case, for building mobile electronics with." - w_class = ITEMSIZE_NORMAL - max_components = IC_COMPONENTS_BASE * 3 //CHOMP Edit ;Changing this to be 3 instead because as it stands its worthless - max_complexity = IC_COMPLEXITY_BASE * 3 //CHOMP Edit ;Changing this to be 3 instead because as it stands its worthless - can_anchor = FALSE - -/obj/item/device/electronic_assembly/drone/can_move() - return TRUE - -/obj/item/device/electronic_assembly/drone/default - name = "type-a electronic drone" - -/obj/item/device/electronic_assembly/drone/arms - name = "type-b electronic drone" - icon_state = "setup_drone_arms" - desc = "It's a case, for building mobile electronics with. This one is armed and dangerous." - -/obj/item/device/electronic_assembly/drone/secbot - name = "type-c electronic drone" - icon_state = "setup_drone_secbot" - desc = "It's a case, for building mobile electronics with. This one resembles a Securitron." - -/obj/item/device/electronic_assembly/drone/medbot - name = "type-d electronic drone" - icon_state = "setup_drone_medbot" - desc = "It's a case, for building mobile electronics with. This one resembles a Medibot." - -/obj/item/device/electronic_assembly/drone/genbot - name = "type-e electronic drone" - icon_state = "setup_drone_genbot" - desc = "It's a case, for building mobile electronics with. This one has a generic bot design." - -/obj/item/device/electronic_assembly/drone/android - name = "type-f electronic drone" - icon_state = "setup_drone_android" - desc = "It's a case, for building mobile electronics with. This one has a hominoid design." - -// Wall mounted assemblies. - -/obj/item/device/electronic_assembly/wallmount - name = "wall-mounted electronic assembly" - icon_state = "setup_wallmount_medium" - desc = "It's a case, for building medium-sized electronics with. It has a magnetized \ - backing to allow it to stick to walls." - w_class = ITEMSIZE_NORMAL - max_components = IC_COMPONENTS_BASE * 2 - max_complexity = IC_COMPLEXITY_BASE * 2 - can_anchor = TRUE - -/obj/item/device/electronic_assembly/wallmount/proc/mount_assembly(turf/on_wall, mob/user) - if(get_dist(on_wall,user) > 1) - return - var/ndir = get_dir(on_wall, user) - if(!(ndir in cardinal)) - return - var/turf/T = get_turf(user) - if(!istype(T, /turf/simulated/floor)) - to_chat(user, "You cannot place \the [src] on this spot!") - return - playsound(src, 'sound/machines/click.ogg', 75, 1) - user.visible_message("\The [user] attaches \the [src] to the wall.", - "You attach \the [src] to the wall.", - "You hear clicking.") - if(istype(user, /mob/living/silicon/robot)) //Robots cannot unequip/drop items, for Safety Reasons. - forceMove(T) - user.drop_item(T) - anchored = TRUE - on_anchored() - switch(ndir) - if(NORTH) - pixel_y = -31 - if(SOUTH) - pixel_y = 31 - if(EAST) - pixel_x = -31 - if(WEST) - pixel_x = 31 - -/obj/item/device/electronic_assembly/wallmount/on_unanchored() - pixel_x = 0 - pixel_y = 0 - ..() - -/obj/item/device/electronic_assembly/wallmount/heavy - name = "heavy wall-mounted electronic assembly" - icon_state = "setup_wallmount_large" - desc = "It's a case, for building large electronics with. It has a magnetized backing \ - to allow it to stick to walls." - w_class = ITEMSIZE_LARGE - max_components = IC_COMPONENTS_BASE * 4 - max_complexity = IC_COMPLEXITY_BASE * 4 - -/obj/item/device/electronic_assembly/wallmount/light - name = "light wall-mounted electronic assembly" - icon_state = "setup_wallmount_small" - desc = "It's a case, for building small electronics with. It has a magnetized backing \ - to allow it to stick to walls." - w_class = ITEMSIZE_SMALL - max_components = IC_COMPONENTS_BASE - max_complexity = IC_COMPLEXITY_BASE - -/obj/item/device/electronic_assembly/wallmount/tiny - name = "tiny wall-mounted electronic assembly" - icon_state = "setup_wallmount_tiny" - desc = "It's a case, for building tiny electronics with. It has a magnetized backing \ - to allow it to stick to walls." - w_class = ITEMSIZE_TINY - max_components = IC_COMPONENTS_BASE / 2 - max_complexity = IC_COMPLEXITY_BASE / 2 +// Generic subtypes without a lot of special code. + +// Small assemblies. + +/obj/item/device/electronic_assembly/default + name = "type-a electronic assembly" + +/obj/item/device/electronic_assembly/calc + name = "type-b electronic assembly" + icon_state = "setup_small_calc" + desc = "It's a case, for building small electronics with. This one resembles a pocket calculator." + +/obj/item/device/electronic_assembly/clam + name = "type-c electronic assembly" + icon_state = "setup_small_clam" + desc = "It's a case, for building small electronics with. This one has a clamshell design." + +/obj/item/device/electronic_assembly/simple + name = "type-d electronic assembly" + icon_state = "setup_small_simple" + desc = "It's a case, for building small electronics with. This one has a simple design." + +/obj/item/device/electronic_assembly/hook + name = "type-e electronic assembly" + icon_state = "setup_small_hook" + desc = "It's a case, for building small electronics with. This one looks like it has a belt clip, but it's purely decorative." + +/obj/item/device/electronic_assembly/pda + name = "type-f electronic assembly" + icon_state = "setup_small_pda" + desc = "It's a case, for building small electronics with. This one resembles a PDA." + +// Tiny assemblies. + +/obj/item/device/electronic_assembly/tiny + name = "electronic device" + icon_state = "setup_device" + desc = "It's a case, for building tiny-sized electronics with." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + +/obj/item/device/electronic_assembly/tiny/default + name = "type-a electronic device" + +/obj/item/device/electronic_assembly/tiny/cylinder + name = "type-b electronic device" + icon_state = "setup_device_cylinder" + desc = "It's a case, for building tiny-sized electronics with. This one has a cylindrical design." + +/obj/item/device/electronic_assembly/tiny/scanner + name = "type-c electronic device" + icon_state = "setup_device_scanner" + desc = "It's a case, for building tiny-sized electronics with. This one has a scanner-like design." + +/obj/item/device/electronic_assembly/tiny/hook + name = "type-d electronic device" + icon_state = "setup_device_hook" + desc = "It's a case, for building tiny-sized electronics with. This one looks like it has a belt clip, but it's purely decorative." + +/obj/item/device/electronic_assembly/tiny/box + name = "type-e electronic device" + icon_state = "setup_device_box" + desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design." + +// Medium assemblies. + +/obj/item/device/electronic_assembly/medium + name = "electronic mechanism" + icon_state = "setup_medium" + desc = "It's a case, for building medium-sized electronics with." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + +/obj/item/device/electronic_assembly/medium/default + name = "type-a electronic mechanism" + +/obj/item/device/electronic_assembly/medium/box + name = "type-b electronic mechanism" + icon_state = "setup_medium_box" + desc = "It's a case, for building medium-sized electronics with. This one has a boxy design." + +/obj/item/device/electronic_assembly/medium/clam + name = "type-c electronic mechanism" + icon_state = "setup_medium_clam" + desc = "It's a case, for building medium-sized electronics with. This one has a clamshell design." + +/obj/item/device/electronic_assembly/medium/medical + name = "type-d electronic mechanism" + icon_state = "setup_medium_med" + desc = "It's a case, for building medium-sized electronics with. This one resembles some type of medical apparatus." + +/obj/item/device/electronic_assembly/medium/gun + name = "type-e electronic mechanism" + icon_state = "setup_medium_gun" + item_state = "circuitgun" + desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, \ + if you're feeling optimistic." +// can_fire_equipped = TRUE + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi', + ) + +/obj/item/device/electronic_assembly/medium/radio + name = "type-f electronic mechanism" + icon_state = "setup_medium_radio" + desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio." + +// Large assemblies. + +/obj/item/device/electronic_assembly/large + name = "electronic machine" + icon_state = "setup_large" + desc = "It's a case, for building large electronics with." + w_class = ITEMSIZE_LARGE + max_components = IC_COMPONENTS_BASE * 4 + max_complexity = IC_COMPLEXITY_BASE * 4 + can_anchor = TRUE + +/obj/item/device/electronic_assembly/large/default + name = "type-a electronic machine" + +/obj/item/device/electronic_assembly/large/scope + name = "type-b electronic machine" + icon_state = "setup_large_scope" + desc = "It's a case, for building large electronics with. This one resembles an oscilloscope." + +/obj/item/device/electronic_assembly/large/terminal + name = "type-c electronic machine" + icon_state = "setup_large_terminal" + desc = "It's a case, for building large electronics with. This one resembles a computer terminal." + +/obj/item/device/electronic_assembly/large/arm + name = "type-d electronic machine" + icon_state = "setup_large_arm" + desc = "It's a case, for building large electronics with. This one resembles a robotic arm." + +/obj/item/device/electronic_assembly/large/tall + name = "type-e electronic machine" + icon_state = "setup_large_tall" + desc = "It's a case, for building large electronics with. This one has a tall design." + +/obj/item/device/electronic_assembly/large/industrial + name = "type-f electronic machine" + icon_state = "setup_large_industrial" + desc = "It's a case, for building large electronics with. This one resembles some kind of industrial machinery." + +// Drone assemblies, which can move with the locomotion circuit. + +/obj/item/device/electronic_assembly/drone + name = "electronic drone" + icon_state = "setup_drone" + desc = "It's a case, for building mobile electronics with." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 3 //CHOMP Edit ;Changing this to be 3 instead because as it stands its worthless + max_complexity = IC_COMPLEXITY_BASE * 3 //CHOMP Edit ;Changing this to be 3 instead because as it stands its worthless + can_anchor = FALSE + +/obj/item/device/electronic_assembly/drone/can_move() + return TRUE + +/obj/item/device/electronic_assembly/drone/default + name = "type-a electronic drone" + +/obj/item/device/electronic_assembly/drone/arms + name = "type-b electronic drone" + icon_state = "setup_drone_arms" + desc = "It's a case, for building mobile electronics with. This one is armed and dangerous." + +/obj/item/device/electronic_assembly/drone/secbot + name = "type-c electronic drone" + icon_state = "setup_drone_secbot" + desc = "It's a case, for building mobile electronics with. This one resembles a Securitron." + +/obj/item/device/electronic_assembly/drone/medbot + name = "type-d electronic drone" + icon_state = "setup_drone_medbot" + desc = "It's a case, for building mobile electronics with. This one resembles a Medibot." + +/obj/item/device/electronic_assembly/drone/genbot + name = "type-e electronic drone" + icon_state = "setup_drone_genbot" + desc = "It's a case, for building mobile electronics with. This one has a generic bot design." + +/obj/item/device/electronic_assembly/drone/android + name = "type-f electronic drone" + icon_state = "setup_drone_android" + desc = "It's a case, for building mobile electronics with. This one has a hominoid design." + +// Wall mounted assemblies. + +/obj/item/device/electronic_assembly/wallmount + name = "wall-mounted electronic assembly" + icon_state = "setup_wallmount_medium" + desc = "It's a case, for building medium-sized electronics with. It has a magnetized \ + backing to allow it to stick to walls." + w_class = ITEMSIZE_NORMAL + max_components = IC_COMPONENTS_BASE * 2 + max_complexity = IC_COMPLEXITY_BASE * 2 + can_anchor = TRUE + +/obj/item/device/electronic_assembly/wallmount/proc/mount_assembly(turf/on_wall, mob/user) + if(get_dist(on_wall,user) > 1) + return + var/ndir = get_dir(on_wall, user) + if(!(ndir in cardinal)) + return + var/turf/T = get_turf(user) + if(!istype(T, /turf/simulated/floor)) + to_chat(user, "You cannot place \the [src] on this spot!") + return + playsound(src, 'sound/machines/click.ogg', 75, 1) + user.visible_message("\The [user] attaches \the [src] to the wall.", + "You attach \the [src] to the wall.", + "You hear clicking.") + if(istype(user, /mob/living/silicon/robot)) //Robots cannot unequip/drop items, for Safety Reasons. + forceMove(T) + user.drop_item(T) + anchored = TRUE + on_anchored() + switch(ndir) + if(NORTH) + pixel_y = -31 + if(SOUTH) + pixel_y = 31 + if(EAST) + pixel_x = -31 + if(WEST) + pixel_x = 31 + +/obj/item/device/electronic_assembly/wallmount/on_unanchored() + pixel_x = 0 + pixel_y = 0 + ..() + +/obj/item/device/electronic_assembly/wallmount/heavy + name = "heavy wall-mounted electronic assembly" + icon_state = "setup_wallmount_large" + desc = "It's a case, for building large electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_LARGE + max_components = IC_COMPONENTS_BASE * 4 + max_complexity = IC_COMPLEXITY_BASE * 4 + +/obj/item/device/electronic_assembly/wallmount/light + name = "light wall-mounted electronic assembly" + icon_state = "setup_wallmount_small" + desc = "It's a case, for building small electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_SMALL + max_components = IC_COMPONENTS_BASE + max_complexity = IC_COMPLEXITY_BASE + +/obj/item/device/electronic_assembly/wallmount/tiny + name = "tiny wall-mounted electronic assembly" + icon_state = "setup_wallmount_tiny" + desc = "It's a case, for building tiny electronics with. It has a magnetized backing \ + to allow it to stick to walls." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 diff --git a/code/modules/integrated_electronics/core/assemblies/implant.dm b/code/modules/integrated_electronics/core/assemblies/implant.dm index cb40e31706..dd3f19dc4d 100644 --- a/code/modules/integrated_electronics/core/assemblies/implant.dm +++ b/code/modules/integrated_electronics/core/assemblies/implant.dm @@ -1,18 +1,18 @@ -// Note that this is contained inside an actual implant subtype. -// See code/game/objects/items/weapons/implants/implantcircuits.dm for where this gets held. - -/obj/item/device/electronic_assembly/implant - name = "electronic implant" - icon_state = "setup_implant" - desc = "It's a case, for building very tiny electronics with." - w_class = ITEMSIZE_TINY - max_components = IC_COMPONENTS_BASE / 2 - max_complexity = IC_COMPLEXITY_BASE / 2 - var/obj/item/weapon/implant/integrated_circuit/implant = null - -/obj/item/device/electronic_assembly/implant/tgui_host() - return implant.tgui_host() - -/obj/item/device/electronic_assembly/implant/update_icon() - ..() +// Note that this is contained inside an actual implant subtype. +// See code/game/objects/items/weapons/implants/implantcircuits.dm for where this gets held. + +/obj/item/device/electronic_assembly/implant + name = "electronic implant" + icon_state = "setup_implant" + desc = "It's a case, for building very tiny electronics with." + w_class = ITEMSIZE_TINY + max_components = IC_COMPONENTS_BASE / 2 + max_complexity = IC_COMPLEXITY_BASE / 2 + var/obj/item/weapon/implant/integrated_circuit/implant = null + +/obj/item/device/electronic_assembly/implant/tgui_host() + return implant.tgui_host() + +/obj/item/device/electronic_assembly/implant/update_icon() + ..() implant.icon_state = icon_state \ No newline at end of file diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm index adc0886174..21ae07f7d1 100644 --- a/code/modules/integrated_electronics/core/detailer.dm +++ b/code/modules/integrated_electronics/core/detailer.dm @@ -1,76 +1,76 @@ -/obj/item/device/integrated_electronics/detailer - name = "assembly detailer" - desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish." - icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' - icon_state = "detailer" - item_flags = NOBLUDGEON - w_class = ITEMSIZE_SMALL - var/detail_color = COLOR_ASSEMBLY_WHITE - var/list/color_list = list( - "dark gray" = COLOR_ASSEMBLY_BLACK, - "machine gray" = COLOR_ASSEMBLY_BGRAY, - "white" = COLOR_ASSEMBLY_WHITE, - "red" = COLOR_ASSEMBLY_RED, - "orange" = COLOR_ASSEMBLY_ORANGE, - "beige" = COLOR_ASSEMBLY_BEIGE, - "brown" = COLOR_ASSEMBLY_BROWN, - "gold" = COLOR_ASSEMBLY_GOLD, - "yellow" = COLOR_ASSEMBLY_YELLOW, - "gurkha" = COLOR_ASSEMBLY_GURKHA, - "light green" = COLOR_ASSEMBLY_LGREEN, - "green" = COLOR_ASSEMBLY_GREEN, - "light blue" = COLOR_ASSEMBLY_LBLUE, - "blue" = COLOR_ASSEMBLY_BLUE, - "purple" = COLOR_ASSEMBLY_PURPLE, - "hot pink" = COLOR_ASSEMBLY_HOT_PINK - ) - -/obj/item/device/integrated_electronics/detailer/Initialize() - update_icon() - return ..() - -/obj/item/device/integrated_electronics/detailer/update_icon() - cut_overlays() - var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/integrated_electronics/electronic_tools.dmi', "detailer-color") - detail_overlay.color = detail_color - add_overlay(detail_overlay) - -/obj/item/device/integrated_electronics/detailer/tgui_state(mob/user) - return GLOB.tgui_inventory_state - -/obj/item/device/integrated_electronics/detailer/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ICDetailer", name) - ui.open() - -/obj/item/device/integrated_electronics/detailer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - data["detail_color"] = detail_color - data["color_list"] = color_list - return data - -/obj/item/device/integrated_electronics/detailer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("change_color") - if(!(params["color"] in color_list)) - return // to prevent href exploits causing runtimes - detail_color = color_list[params["color"]] - update_icon() - return TRUE - -/obj/item/device/integrated_electronics/detailer/attack_self(mob/user) - tgui_interact(user) - - // Leaving this commented out in case someone decides that this would be better as an "any color" selection system - // Just uncomment this and get rid of all of the TGUI bullshit lol - // if(!in_range(user, src)) - // return - // var/new_color = input(user, "Pick a color", "Color Selection", detail_color) as color|null - // if(!new_color) - // return - // detail_color = new_color +/obj/item/device/integrated_electronics/detailer + name = "assembly detailer" + desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish." + icon = 'icons/obj/integrated_electronics/electronic_tools.dmi' + icon_state = "detailer" + item_flags = NOBLUDGEON + w_class = ITEMSIZE_SMALL + var/detail_color = COLOR_ASSEMBLY_WHITE + var/list/color_list = list( + "dark gray" = COLOR_ASSEMBLY_BLACK, + "machine gray" = COLOR_ASSEMBLY_BGRAY, + "white" = COLOR_ASSEMBLY_WHITE, + "red" = COLOR_ASSEMBLY_RED, + "orange" = COLOR_ASSEMBLY_ORANGE, + "beige" = COLOR_ASSEMBLY_BEIGE, + "brown" = COLOR_ASSEMBLY_BROWN, + "gold" = COLOR_ASSEMBLY_GOLD, + "yellow" = COLOR_ASSEMBLY_YELLOW, + "gurkha" = COLOR_ASSEMBLY_GURKHA, + "light green" = COLOR_ASSEMBLY_LGREEN, + "green" = COLOR_ASSEMBLY_GREEN, + "light blue" = COLOR_ASSEMBLY_LBLUE, + "blue" = COLOR_ASSEMBLY_BLUE, + "purple" = COLOR_ASSEMBLY_PURPLE, + "hot pink" = COLOR_ASSEMBLY_HOT_PINK + ) + +/obj/item/device/integrated_electronics/detailer/Initialize() + update_icon() + return ..() + +/obj/item/device/integrated_electronics/detailer/update_icon() + cut_overlays() + var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/integrated_electronics/electronic_tools.dmi', "detailer-color") + detail_overlay.color = detail_color + add_overlay(detail_overlay) + +/obj/item/device/integrated_electronics/detailer/tgui_state(mob/user) + return GLOB.tgui_inventory_state + +/obj/item/device/integrated_electronics/detailer/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ICDetailer", name) + ui.open() + +/obj/item/device/integrated_electronics/detailer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["detail_color"] = detail_color + data["color_list"] = color_list + return data + +/obj/item/device/integrated_electronics/detailer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("change_color") + if(!(params["color"] in color_list)) + return // to prevent href exploits causing runtimes + detail_color = color_list[params["color"]] + update_icon() + return TRUE + +/obj/item/device/integrated_electronics/detailer/attack_self(mob/user) + tgui_interact(user) + + // Leaving this commented out in case someone decides that this would be better as an "any color" selection system + // Just uncomment this and get rid of all of the TGUI bullshit lol + // if(!in_range(user, src)) + // return + // var/new_color = input(user, "Pick a color", "Color Selection", detail_color) as color|null + // if(!new_color) + // return + // detail_color = new_color // update_icon() \ No newline at end of file diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index f7ce9d5877..4bd392dfce 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -1,607 +1,607 @@ -/* Library Machines - * - * Contains: - * Borrowbook datum - * Library Public Computer - * Library Computer - * Library Scanner - * Book Binder - */ - -/* - * Borrowbook datum - */ -/datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long. - var/bookname - var/mobname - var/getdate - var/duedate - -/* - * Library Public Computer - */ -/obj/machinery/librarypubliccomp - name = "visitor computer" - icon = 'icons/obj/library.dmi' - icon_state = "computer" - anchored = TRUE - density = TRUE - var/screenstate = 0 - var/title - var/category = "Any" - var/author - var/SQLquery - var/list/SQLargs //CHOMPEdit TGSQL - -/obj/machinery/librarypubliccomp/attack_hand(var/mob/user as mob) - usr.set_machine(src) - var/dat = "Library Visitor\n" // - switch(screenstate) - if(0) - dat += {"

                    Search Settings


                    -
                    Filter by Title: [title]
                    - Filter by Category: [category]
                    - Filter by Author: [author]
                    - \[Start Search\]
                    "} - if(1) - establish_old_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
                    " - else if(!SQLquery) - dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
                    " - else - dat += {" - "} - - var/datum/db_query/query = SSdbcore.NewQuery(SQLquery, SQLargs) //CHOMPEdit TGSQL - query.Execute() - - while(query.NextRow()) - var/author = query.item[1] - var/title = query.item[2] - var/category = query.item[3] - var/id = query.item[4] - dat += "" - qdel(query) - dat += "
                    AUTHORTITLECATEGORYSS13BN
                    [author][title][category][id]

                    " - dat += "\[Go Back\]
                    " - user << browse(dat, "window=publiclibrary") - onclose(user, "publiclibrary") - -/obj/machinery/librarypubliccomp/Topic(href, href_list) - if(..()) - usr << browse(null, "window=publiclibrary") - onclose(usr, "publiclibrary") - return - - if(href_list["settitle"]) - var/newtitle = tgui_input_text(usr, "Enter a title to search for:") - if(newtitle) - title = sanitize(newtitle) - else - title = null - title = sanitizeSQL(title) - if(href_list["setcategory"]) - var/newcategory = tgui_input_list(usr, "Choose a category to search for:", "Category", list("Any", "Fiction", "Non-Fiction", "Adult", "Reference", "Religion")) - if(newcategory) - category = sanitize(newcategory) - else - category = "Any" - category = sanitizeSQL(category) - if(href_list["setauthor"]) - var/newauthor = tgui_input_text(usr, "Enter an author to search for:") - if(newauthor) - author = sanitize(newauthor) - else - author = null - author = sanitizeSQL(author) - if(href_list["search"]) - SQLquery = "SELECT author, title, category, id FROM library WHERE " - SQLargs = list() //CHOMPEdit begin - if(category == "Any") - SQLquery += "author LIKE '%:t_author%' AND title LIKE '%:t_title%'" - SQLargs["t_author"] = author - SQLargs["t_title"] = title - else - SQLquery += "author LIKE CONCAT('%',:t_author,'%') AND title LIKE CONCAT('%',:t_title,'%') AND category=:t_category" - SQLargs["t_author"] = author - SQLargs["t_title"] = title - SQLargs["t_category"] = category //CHOMPEdit End - screenstate = 1 - - if(href_list["back"]) - screenstate = 0 - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - - -/* - * Library Computer - */ -// TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such -// It is August 22nd, 2012... This TODO has already been here for months.. I wonder how long it'll last before someone does something about it. // Nov 2019. Nope. -/obj/machinery/librarycomp - name = "Check-In/Out Computer" - desc = "Print books from the archives! (You aren't quite sure how they're printed by it, though.)" - icon = 'icons/obj/library.dmi' - icon_state = "computer" - anchored = TRUE - density = TRUE - var/arcanecheckout = 0 - var/screenstate = 0 // 0 - Main Menu, 1 - Inventory, 2 - Checked Out, 3 - Check Out a Book - var/sortby = "author" - var/buffer_book - var/buffer_mob - var/upload_category = "Fiction" - var/list/checkouts = list() - var/list/inventory = list() - var/checkoutperiod = 5 // In minutes - var/obj/machinery/libraryscanner/scanner // Book scanner that will be used when uploading books to the Archive - - var/bibledelay = 0 // LOL NO SPAM (1 minute delay) -- Doohl - - var/static/list/all_books - - var/static/list/base_genre_books - -/obj/machinery/librarycomp/Initialize() - . = ..() - - if(!base_genre_books || !base_genre_books.len) - base_genre_books = list( - /obj/item/weapon/book/custom_library/fiction, - /obj/item/weapon/book/custom_library/nonfiction, - /obj/item/weapon/book/custom_library/reference, - /obj/item/weapon/book/custom_library/religious, - /obj/item/weapon/book/bundle/custom_library/fiction, - /obj/item/weapon/book/bundle/custom_library/nonfiction, - /obj/item/weapon/book/bundle/custom_library/reference, - /obj/item/weapon/book/bundle/custom_library/religious - ) - - if(!all_books || !all_books.len) - all_books = list() - - for(var/path in subtypesof(/obj/item/weapon/book/codex/lore)) - var/obj/item/weapon/book/C = new path(null) - all_books[C.name] = C - - for(var/path in subtypesof(/obj/item/weapon/book/custom_library) - base_genre_books) - var/obj/item/weapon/book/B = new path(null) - all_books[B.title] = B - - for(var/path in subtypesof(/obj/item/weapon/book/bundle/custom_library) - base_genre_books) - var/obj/item/weapon/book/M = new path(null) - all_books[M.title] = M - -/obj/machinery/librarycomp/attack_hand(var/mob/user as mob) - usr.set_machine(src) - var/dat = "Book Inventory Management\n" // - switch(screenstate) - if(0) - // Main Menu //VOREStation Edit start - dat += {"1. View General Inventory
                    - 2. View Checked Out Inventory
                    - 3. Check out a Book
                    - 4. Connect to Internal Archive
                    - 5. Upload New Title to Archive
                    - 6. Print a Bible
                    - 8. Access External Archive
                    "} //VOREStation Edit end - if(src.emagged) - dat += "7. Access the Forbidden Lore Vault
                    " - if(src.arcanecheckout) - new /obj/item/weapon/book/tome(src.loc) - var/datum/gender/T = gender_datums[user.get_visible_gender()] - to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.") - user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2) - src.arcanecheckout = 0 - if(1) - // Inventory - dat += "

                    Inventory


                    " - for(var/obj/item/weapon/book/b in inventory) - dat += "[b.name] (Delete)
                    " - dat += "(Return to main menu)
                    " - if(2) - // Checked Out - dat += "

                    Checked Out Books


                    " - for(var/datum/borrowbook/b in checkouts) - var/timetaken = world.time - b.getdate - //timetaken *= 10 - timetaken /= 600 - timetaken = round(timetaken) - var/timedue = b.duedate - world.time - //timedue *= 10 - timedue /= 600 - if(timedue <= 0) - timedue = "(OVERDUE) [timedue]" - else - timedue = round(timedue) - dat += {"\"[b.bookname]\", Checked out to: [b.mobname]
                    --- Taken: [timetaken] minutes ago, Due: in [timedue] minutes
                    - (Check In)

                    "} - dat += "(Return to main menu)
                    " - if(3) - // Check Out a Book - dat += {"

                    Check Out a Book


                    - Book: [src.buffer_book] - \[Edit\]
                    - Recipient: [src.buffer_mob] - \[Edit\]
                    - Checkout Date : [world.time/600]
                    - Due Date: [(world.time + checkoutperiod)/600]
                    - (Checkout Period: [checkoutperiod] minutes) (+/-) - (Commit Entry)
                    - (Return to main menu)
                    "} - if(4) - dat += "

                    Internal Archive

                    " - if(!all_books || !all_books.len) - dat += "ERROR Something has gone seriously wrong. Contact System Administrator for more information." - else - dat += {" - " - dat += "
                    TITLE\[Order\]
                    " - dat += "
                    (Return to main menu)
                    " - if(5) - //dat += "

                    ERROR

                    " //VOREStation Removal - //dat+= "Library Database is in Secure Management Mode.
                    \ //VOREStation Removal - //Contact a System Administrator for more information.
                    " //VOREStation Removal - //VOREstation Edit Start - dat += "

                    Upload a New Title

                    " - if(!scanner) - for(var/obj/machinery/libraryscanner/S in range(9)) - scanner = S - break - if(!scanner) - dat += "No scanner found within wireless network range.
                    " - else if(!scanner.cache) - dat += "No data found in scanner memory.
                    " - else - dat += {"Data marked for upload...
                    - Title: [scanner.cache.name]
                    "} - if(!scanner.cache.author) - scanner.cache.author = "Anonymous" - dat += {"Author: [scanner.cache.author]
                    - Category: [upload_category]
                    - \[Upload\]
                    "} - //VOREStation Edit End - dat += "(Return to main menu)
                    " - if(7) - dat += {"

                    Accessing Forbidden Lore Vault v 1.3

                    - Are you absolutely sure you want to proceed? EldritchTomes Inc. takes no responsibilities for loss of sanity resulting from this action.

                    - Yes.
                    - No.
                    "} - if(8) - dat += "

                    External Archive

                    " //VOREStation Edit - establish_old_db_connection() - - //dat += "

                    Warning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.

                    " //VOREStation Removal - - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." - else - dat += {"(Order book by SS13BN)

                    - - " - qdel(query) //CHOMPEdit TGSQL - dat += "
                    TITLE\[Order\]
                    " - dat += "
                    (Return to main menu)
                    " - - //dat += "Close

                    " - user << browse(dat, "window=library") - onclose(user, "library") - -//VOREStation Addition Start -/obj/machinery/librarycomp/attack_ghost(mob/user) - - var/show_admin_options = check_rights(R_ADMIN, show_msg = FALSE) - if(!show_admin_options) - . = ..() - - else - usr.set_machine(src) - var/dat = "Book Inventory Management\n" // - - dat += "

                    ADMINISTRATIVE MANAGEMENT

                    " - establish_old_db_connection() - - if(!SSdbcore.IsConnected()) - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." - else - dat += {"(Order book by SS13BN)

                    - - " - dat += "
                    TITLE\[Del\]" - dat += "
                    " - dat += "
                    (Return to main menu)
                    " - - user << browse(dat, "window=library") - onclose(user, "library") -//VOREStation Addition End - -/obj/machinery/librarycomp/emag_act(var/remaining_charges, var/mob/user) - if (src.density && !src.emagged) - src.emagged = 1 - return 1 - -/obj/machinery/librarycomp/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/barcodescanner)) - var/obj/item/weapon/barcodescanner/scanner = W - scanner.computer = src - to_chat(user, "[scanner]'s associated machine has been set to [src].") - for (var/mob/V in hearers(src)) - V.show_message("[src] lets out a low, short blip.", 2) - else - ..() - -/obj/machinery/librarycomp/Topic(href, href_list) - if(..()) - usr << browse(null, "window=library") - onclose(usr, "library") - return - - if(href_list["switchscreen"]) - switch(href_list["switchscreen"]) - if("0") - screenstate = 0 - if("1") - screenstate = 1 - if("2") - screenstate = 2 - if("3") - screenstate = 3 - if("4") - screenstate = 4 - if("5") - screenstate = 5 - if("6") - if(!bibledelay) - new /obj/item/weapon/storage/bible(src.loc) - bibledelay = 1 - spawn(60) - bibledelay = 0 - - else - for (var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"Bible printer currently unavailable, please wait a moment.\"") - - if("7") - screenstate = 7 - if("8") - screenstate = 8 - if(href_list["arccheckout"]) - if(src.emagged) - src.arcanecheckout = 1 - src.screenstate = 0 - if(href_list["increasetime"]) - checkoutperiod += 1 - if(href_list["decreasetime"]) - checkoutperiod -= 1 - if(checkoutperiod < 1) - checkoutperiod = 1 - if(href_list["editbook"]) - buffer_book = sanitizeSafe(tgui_input_text(usr, "Enter the book's title:")) - if(href_list["editmob"]) - buffer_mob = sanitize(tgui_input_text(usr, "Enter the recipient's name:", null, null, MAX_NAME_LEN), MAX_NAME_LEN) - if(href_list["checkout"]) - var/datum/borrowbook/b = new /datum/borrowbook - b.bookname = sanitizeSafe(buffer_book) - b.mobname = sanitize(buffer_mob) - b.getdate = world.time - b.duedate = world.time + (checkoutperiod * 600) - checkouts.Add(b) - if(href_list["checkin"]) - var/datum/borrowbook/b = locate(href_list["checkin"]) - checkouts.Remove(b) - if(href_list["delbook"]) - var/obj/item/weapon/book/b = locate(href_list["delbook"]) - inventory.Remove(b) - if(href_list["setauthor"]) - var/newauthor = sanitize(tgui_input_text(usr, "Enter the author's name: ")) - if(newauthor) - scanner.cache.author = newauthor - if(href_list["setcategory"]) - var/newcategory = tgui_input_list(usr, "Choose a category: ", "Category", list("Fiction", "Non-Fiction", "Adult", "Reference", "Religion")) - if(newcategory) - upload_category = newcategory - - //VOREStation Edit Start - if(href_list["upload"]) - if(scanner) - if(scanner.cache) - var/choice = tgui_alert(usr, "Are you certain you wish to upload this title to the Archive?", "Confirmation", list("Confirm", "Abort")) - if(choice == "Confirm") - if(scanner.cache.unique) - tgui_alert_async(usr, "This book has been rejected from the database. Aborting!") - else - establish_old_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - tgui_alert_async(usr, "Connection to Archive has been severed. Aborting.") - else - /* - var/sqltitle = dbcon.Quote(scanner.cache.name) - var/sqlauthor = dbcon.Quote(scanner.cache.author) - var/sqlcontent = dbcon.Quote(scanner.cache.dat) - var/sqlcategory = dbcon.Quote(upload_category) - */ - var/list/sql_args = list("t_title" = scanner.cache.name, "t_author" = scanner.cache.author, "t_content" = scanner.cache.dat, "t_category" = upload_category) //CHOMPEdit TGSQL - /*var/sqltitle = sanitizeSQL(scanner.cache.name) CHOMPEdit TGSQL - var/sqlauthor = sanitizeSQL(scanner.cache.author) - var/sqlcontent = sanitizeSQL(scanner.cache.dat) - var/sqlcategory = sanitizeSQL(upload_category)*/ - var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO library (author, title, content, category) VALUES (:t_author, :t_title, :t_content, :t_category)", sql_args) //CHOMPEdit TGSQL - if(!query.Execute()) - to_chat(usr,query.ErrorMsg()) - else - log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") - tgui_alert_async(usr, "Upload Complete.") - qdel(query) //CHOMPEdit TGSQL - //VOREStation Edit End - - if(href_list["targetid"]) - var/sqlid = sanitizeSQL(href_list["targetid"]) - establish_old_db_connection() - if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL - tgui_alert_async(usr, "Connection to Archive has been severed. Aborting.") - if(bibledelay) - for (var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"Printer unavailable. Please allow a short time before attempting to print.\"") - else - bibledelay = 1 - spawn(6) - bibledelay = 0 - var/datum/db_query/query = SSdbcore.NewQuery("SELECT * FROM library WHERE id=[sqlid]") //CHOMPEdit TGSQL - query.Execute() - - while(query.NextRow()) - var/author = query.item[2] - var/title = query.item[3] - var/content = query.item[4] - var/obj/item/weapon/book/B = new(src.loc) - B.name = "Book: [title]" - B.title = title - B.author = author - B.dat = content - B.icon_state = "book[rand(1,16)]" - B.item_state = B.icon_state - src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") - break - qdel(query) //CHOMPEdit TGSQL - - if(href_list["orderbyid"]) - var/orderid = tgui_input_number(usr, "Enter your order:") - if(orderid) - if(isnum(orderid)) - var/nhref = "src=\ref[src];targetid=[orderid]" - spawn() src.Topic(nhref, params2list(nhref), src) - if(href_list["sort"] in list("author", "title", "category")) - sortby = href_list["sort"] - if(href_list["hardprint"]) - var/newpath = href_list["hardprint"] - var/obj/item/weapon/book/NewBook = new newpath(get_turf(src)) - NewBook.name = "Book: [NewBook.name]" - src.add_fingerprint(usr) - src.updateUsrDialog() - return - -/* - * Library Scanner - */ -/obj/machinery/libraryscanner - name = "scanner" - desc = "A scanner for scanning in books and papers." - icon = 'icons/obj/library.dmi' - icon_state = "bigscanner" - anchored = TRUE - density = TRUE - var/obj/item/weapon/book/cache // Last scanned book - -/obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/book)) - user.drop_item() - O.loc = src - -/obj/machinery/libraryscanner/attack_hand(var/mob/user as mob) - usr.set_machine(src) - var/dat = "Scanner Control Interface\n" // - if(cache) - dat += "Data stored in memory.
                    " - else - dat += "No data stored in memory.
                    " - dat += "\[Scan\]" - if(cache) - dat += " \[Clear Memory\]

                    \[Remove Book\]" - else - dat += "
                    " - user << browse(dat, "window=scanner") - onclose(user, "scanner") - -/obj/machinery/libraryscanner/Topic(href, href_list) - if(..()) - usr << browse(null, "window=scanner") - onclose(usr, "scanner") - return - - if(href_list["scan"]) - for(var/obj/item/weapon/book/B in contents) - cache = B - break - if(href_list["clear"]) - cache = null - if(href_list["eject"]) - for(var/obj/item/weapon/book/B in contents) - B.loc = src.loc - src.add_fingerprint(usr) - src.updateUsrDialog() - return - - -/* - * Book binder - */ -/obj/machinery/bookbinder - name = "Book Binder" - desc = "Bundles up a stack of inserted paper into a convenient book format." - icon = 'icons/obj/library.dmi' - icon_state = "binder" - anchored = TRUE - density = TRUE - -/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/paper_bundle)) - if(istype(O, /obj/item/weapon/paper)) - user.drop_item() - O.loc = src - user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") - src.visible_message("[src] begins to hum as it warms up its printing drums.") - sleep(rand(200,400)) - src.visible_message("[src] whirs as it prints and binds a new book.") - var/obj/item/weapon/book/b = new(src.loc) - b.dat = O:info - b.name = "Print Job #" + "[rand(100, 999)]" - b.icon_state = "book[rand(1,7)]" - qdel(O) - else - user.drop_item() - O.loc = src - user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") - src.visible_message("[src] begins to hum as it warms up its printing drums.") - sleep(rand(300,500)) - src.visible_message("[src] whirs as it prints and binds a new book.") - var/obj/item/weapon/book/bundle/b = new(src.loc) - b.pages = O:pages - for(var/obj/item/weapon/paper/P in O.contents) - P.forceMove(b) - for(var/obj/item/weapon/photo/P in O.contents) - P.forceMove(b) - b.name = "Print Job #" + "[rand(100, 999)]" - b.icon_state = "book[rand(1,7)]" - qdel(O) - else - ..() +/* Library Machines + * + * Contains: + * Borrowbook datum + * Library Public Computer + * Library Computer + * Library Scanner + * Book Binder + */ + +/* + * Borrowbook datum + */ +/datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long. + var/bookname + var/mobname + var/getdate + var/duedate + +/* + * Library Public Computer + */ +/obj/machinery/librarypubliccomp + name = "visitor computer" + icon = 'icons/obj/library.dmi' + icon_state = "computer" + anchored = TRUE + density = TRUE + var/screenstate = 0 + var/title + var/category = "Any" + var/author + var/SQLquery + var/list/SQLargs //CHOMPEdit TGSQL + +/obj/machinery/librarypubliccomp/attack_hand(var/mob/user as mob) + usr.set_machine(src) + var/dat = "Library Visitor\n" // + switch(screenstate) + if(0) + dat += {"

                    Search Settings


                    + Filter by Title: [title]
                    + Filter by Category: [category]
                    + Filter by Author: [author]
                    + \[Start Search\]
                    "} + if(1) + establish_old_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
                    " + else if(!SQLquery) + dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
                    " + else + dat += {" + "} + + var/datum/db_query/query = SSdbcore.NewQuery(SQLquery, SQLargs) //CHOMPEdit TGSQL + query.Execute() + + while(query.NextRow()) + var/author = query.item[1] + var/title = query.item[2] + var/category = query.item[3] + var/id = query.item[4] + dat += "" + qdel(query) + dat += "
                    AUTHORTITLECATEGORYSS13BN
                    [author][title][category][id]

                    " + dat += "\[Go Back\]
                    " + user << browse(dat, "window=publiclibrary") + onclose(user, "publiclibrary") + +/obj/machinery/librarypubliccomp/Topic(href, href_list) + if(..()) + usr << browse(null, "window=publiclibrary") + onclose(usr, "publiclibrary") + return + + if(href_list["settitle"]) + var/newtitle = tgui_input_text(usr, "Enter a title to search for:") + if(newtitle) + title = sanitize(newtitle) + else + title = null + title = sanitizeSQL(title) + if(href_list["setcategory"]) + var/newcategory = tgui_input_list(usr, "Choose a category to search for:", "Category", list("Any", "Fiction", "Non-Fiction", "Adult", "Reference", "Religion")) + if(newcategory) + category = sanitize(newcategory) + else + category = "Any" + category = sanitizeSQL(category) + if(href_list["setauthor"]) + var/newauthor = tgui_input_text(usr, "Enter an author to search for:") + if(newauthor) + author = sanitize(newauthor) + else + author = null + author = sanitizeSQL(author) + if(href_list["search"]) + SQLquery = "SELECT author, title, category, id FROM library WHERE " + SQLargs = list() //CHOMPEdit begin + if(category == "Any") + SQLquery += "author LIKE '%:t_author%' AND title LIKE '%:t_title%'" + SQLargs["t_author"] = author + SQLargs["t_title"] = title + else + SQLquery += "author LIKE CONCAT('%',:t_author,'%') AND title LIKE CONCAT('%',:t_title,'%') AND category=:t_category" + SQLargs["t_author"] = author + SQLargs["t_title"] = title + SQLargs["t_category"] = category //CHOMPEdit End + screenstate = 1 + + if(href_list["back"]) + screenstate = 0 + + src.add_fingerprint(usr) + src.updateUsrDialog() + return + + +/* + * Library Computer + */ +// TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such +// It is August 22nd, 2012... This TODO has already been here for months.. I wonder how long it'll last before someone does something about it. // Nov 2019. Nope. +/obj/machinery/librarycomp + name = "Check-In/Out Computer" + desc = "Print books from the archives! (You aren't quite sure how they're printed by it, though.)" + icon = 'icons/obj/library.dmi' + icon_state = "computer" + anchored = TRUE + density = TRUE + var/arcanecheckout = 0 + var/screenstate = 0 // 0 - Main Menu, 1 - Inventory, 2 - Checked Out, 3 - Check Out a Book + var/sortby = "author" + var/buffer_book + var/buffer_mob + var/upload_category = "Fiction" + var/list/checkouts = list() + var/list/inventory = list() + var/checkoutperiod = 5 // In minutes + var/obj/machinery/libraryscanner/scanner // Book scanner that will be used when uploading books to the Archive + + var/bibledelay = 0 // LOL NO SPAM (1 minute delay) -- Doohl + + var/static/list/all_books + + var/static/list/base_genre_books + +/obj/machinery/librarycomp/Initialize() + . = ..() + + if(!base_genre_books || !base_genre_books.len) + base_genre_books = list( + /obj/item/weapon/book/custom_library/fiction, + /obj/item/weapon/book/custom_library/nonfiction, + /obj/item/weapon/book/custom_library/reference, + /obj/item/weapon/book/custom_library/religious, + /obj/item/weapon/book/bundle/custom_library/fiction, + /obj/item/weapon/book/bundle/custom_library/nonfiction, + /obj/item/weapon/book/bundle/custom_library/reference, + /obj/item/weapon/book/bundle/custom_library/religious + ) + + if(!all_books || !all_books.len) + all_books = list() + + for(var/path in subtypesof(/obj/item/weapon/book/codex/lore)) + var/obj/item/weapon/book/C = new path(null) + all_books[C.name] = C + + for(var/path in subtypesof(/obj/item/weapon/book/custom_library) - base_genre_books) + var/obj/item/weapon/book/B = new path(null) + all_books[B.title] = B + + for(var/path in subtypesof(/obj/item/weapon/book/bundle/custom_library) - base_genre_books) + var/obj/item/weapon/book/M = new path(null) + all_books[M.title] = M + +/obj/machinery/librarycomp/attack_hand(var/mob/user as mob) + usr.set_machine(src) + var/dat = "Book Inventory Management\n" // + switch(screenstate) + if(0) + // Main Menu //VOREStation Edit start + dat += {"1. View General Inventory
                    + 2. View Checked Out Inventory
                    + 3. Check out a Book
                    + 4. Connect to Internal Archive
                    + 5. Upload New Title to Archive
                    + 6. Print a Bible
                    + 8. Access External Archive
                    "} //VOREStation Edit end + if(src.emagged) + dat += "7. Access the Forbidden Lore Vault
                    " + if(src.arcanecheckout) + new /obj/item/weapon/book/tome(src.loc) + var/datum/gender/T = gender_datums[user.get_visible_gender()] + to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.") + user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2) + src.arcanecheckout = 0 + if(1) + // Inventory + dat += "

                    Inventory


                    " + for(var/obj/item/weapon/book/b in inventory) + dat += "[b.name] (Delete)
                    " + dat += "(Return to main menu)
                    " + if(2) + // Checked Out + dat += "

                    Checked Out Books


                    " + for(var/datum/borrowbook/b in checkouts) + var/timetaken = world.time - b.getdate + //timetaken *= 10 + timetaken /= 600 + timetaken = round(timetaken) + var/timedue = b.duedate - world.time + //timedue *= 10 + timedue /= 600 + if(timedue <= 0) + timedue = "(OVERDUE) [timedue]" + else + timedue = round(timedue) + dat += {"\"[b.bookname]\", Checked out to: [b.mobname]
                    --- Taken: [timetaken] minutes ago, Due: in [timedue] minutes
                    + (Check In)

                    "} + dat += "(Return to main menu)
                    " + if(3) + // Check Out a Book + dat += {"

                    Check Out a Book


                    + Book: [src.buffer_book] + \[Edit\]
                    + Recipient: [src.buffer_mob] + \[Edit\]
                    + Checkout Date : [world.time/600]
                    + Due Date: [(world.time + checkoutperiod)/600]
                    + (Checkout Period: [checkoutperiod] minutes) (+/-) + (Commit Entry)
                    + (Return to main menu)
                    "} + if(4) + dat += "

                    Internal Archive

                    " + if(!all_books || !all_books.len) + dat += "ERROR Something has gone seriously wrong. Contact System Administrator for more information." + else + dat += {" + " + dat += "
                    TITLE\[Order\]
                    " + dat += "
                    (Return to main menu)
                    " + if(5) + //dat += "

                    ERROR

                    " //VOREStation Removal + //dat+= "Library Database is in Secure Management Mode.
                    \ //VOREStation Removal + //Contact a System Administrator for more information.
                    " //VOREStation Removal + //VOREstation Edit Start + dat += "

                    Upload a New Title

                    " + if(!scanner) + for(var/obj/machinery/libraryscanner/S in range(9)) + scanner = S + break + if(!scanner) + dat += "No scanner found within wireless network range.
                    " + else if(!scanner.cache) + dat += "No data found in scanner memory.
                    " + else + dat += {"Data marked for upload...
                    + Title: [scanner.cache.name]
                    "} + if(!scanner.cache.author) + scanner.cache.author = "Anonymous" + dat += {"Author: [scanner.cache.author]
                    + Category: [upload_category]
                    + \[Upload\]
                    "} + //VOREStation Edit End + dat += "(Return to main menu)
                    " + if(7) + dat += {"

                    Accessing Forbidden Lore Vault v 1.3

                    + Are you absolutely sure you want to proceed? EldritchTomes Inc. takes no responsibilities for loss of sanity resulting from this action.

                    + Yes.
                    + No.
                    "} + if(8) + dat += "

                    External Archive

                    " //VOREStation Edit + establish_old_db_connection() + + //dat += "

                    Warning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.

                    " //VOREStation Removal + + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + else + dat += {"(Order book by SS13BN)

                    + + " + qdel(query) //CHOMPEdit TGSQL + dat += "
                    TITLE\[Order\]
                    " + dat += "
                    (Return to main menu)
                    " + + //dat += "Close

                    " + user << browse(dat, "window=library") + onclose(user, "library") + +//VOREStation Addition Start +/obj/machinery/librarycomp/attack_ghost(mob/user) + + var/show_admin_options = check_rights(R_ADMIN, show_msg = FALSE) + if(!show_admin_options) + . = ..() + + else + usr.set_machine(src) + var/dat = "Book Inventory Management\n" // + + dat += "

                    ADMINISTRATIVE MANAGEMENT

                    " + establish_old_db_connection() + + if(!SSdbcore.IsConnected()) + dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + else + dat += {"(Order book by SS13BN)

                    + + " + dat += "
                    TITLE\[Del\]" + dat += "
                    " + dat += "
                    (Return to main menu)
                    " + + user << browse(dat, "window=library") + onclose(user, "library") +//VOREStation Addition End + +/obj/machinery/librarycomp/emag_act(var/remaining_charges, var/mob/user) + if (src.density && !src.emagged) + src.emagged = 1 + return 1 + +/obj/machinery/librarycomp/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/barcodescanner)) + var/obj/item/weapon/barcodescanner/scanner = W + scanner.computer = src + to_chat(user, "[scanner]'s associated machine has been set to [src].") + for (var/mob/V in hearers(src)) + V.show_message("[src] lets out a low, short blip.", 2) + else + ..() + +/obj/machinery/librarycomp/Topic(href, href_list) + if(..()) + usr << browse(null, "window=library") + onclose(usr, "library") + return + + if(href_list["switchscreen"]) + switch(href_list["switchscreen"]) + if("0") + screenstate = 0 + if("1") + screenstate = 1 + if("2") + screenstate = 2 + if("3") + screenstate = 3 + if("4") + screenstate = 4 + if("5") + screenstate = 5 + if("6") + if(!bibledelay) + new /obj/item/weapon/storage/bible(src.loc) + bibledelay = 1 + spawn(60) + bibledelay = 0 + + else + for (var/mob/V in hearers(src)) + V.show_message("[src]'s monitor flashes, \"Bible printer currently unavailable, please wait a moment.\"") + + if("7") + screenstate = 7 + if("8") + screenstate = 8 + if(href_list["arccheckout"]) + if(src.emagged) + src.arcanecheckout = 1 + src.screenstate = 0 + if(href_list["increasetime"]) + checkoutperiod += 1 + if(href_list["decreasetime"]) + checkoutperiod -= 1 + if(checkoutperiod < 1) + checkoutperiod = 1 + if(href_list["editbook"]) + buffer_book = sanitizeSafe(tgui_input_text(usr, "Enter the book's title:")) + if(href_list["editmob"]) + buffer_mob = sanitize(tgui_input_text(usr, "Enter the recipient's name:", null, null, MAX_NAME_LEN), MAX_NAME_LEN) + if(href_list["checkout"]) + var/datum/borrowbook/b = new /datum/borrowbook + b.bookname = sanitizeSafe(buffer_book) + b.mobname = sanitize(buffer_mob) + b.getdate = world.time + b.duedate = world.time + (checkoutperiod * 600) + checkouts.Add(b) + if(href_list["checkin"]) + var/datum/borrowbook/b = locate(href_list["checkin"]) + checkouts.Remove(b) + if(href_list["delbook"]) + var/obj/item/weapon/book/b = locate(href_list["delbook"]) + inventory.Remove(b) + if(href_list["setauthor"]) + var/newauthor = sanitize(tgui_input_text(usr, "Enter the author's name: ")) + if(newauthor) + scanner.cache.author = newauthor + if(href_list["setcategory"]) + var/newcategory = tgui_input_list(usr, "Choose a category: ", "Category", list("Fiction", "Non-Fiction", "Adult", "Reference", "Religion")) + if(newcategory) + upload_category = newcategory + + //VOREStation Edit Start + if(href_list["upload"]) + if(scanner) + if(scanner.cache) + var/choice = tgui_alert(usr, "Are you certain you wish to upload this title to the Archive?", "Confirmation", list("Confirm", "Abort")) + if(choice == "Confirm") + if(scanner.cache.unique) + tgui_alert_async(usr, "This book has been rejected from the database. Aborting!") + else + establish_old_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + tgui_alert_async(usr, "Connection to Archive has been severed. Aborting.") + else + /* + var/sqltitle = dbcon.Quote(scanner.cache.name) + var/sqlauthor = dbcon.Quote(scanner.cache.author) + var/sqlcontent = dbcon.Quote(scanner.cache.dat) + var/sqlcategory = dbcon.Quote(upload_category) + */ + var/list/sql_args = list("t_title" = scanner.cache.name, "t_author" = scanner.cache.author, "t_content" = scanner.cache.dat, "t_category" = upload_category) //CHOMPEdit TGSQL + /*var/sqltitle = sanitizeSQL(scanner.cache.name) CHOMPEdit TGSQL + var/sqlauthor = sanitizeSQL(scanner.cache.author) + var/sqlcontent = sanitizeSQL(scanner.cache.dat) + var/sqlcategory = sanitizeSQL(upload_category)*/ + var/datum/db_query/query = SSdbcore.NewQuery("INSERT INTO library (author, title, content, category) VALUES (:t_author, :t_title, :t_content, :t_category)", sql_args) //CHOMPEdit TGSQL + if(!query.Execute()) + to_chat(usr,query.ErrorMsg()) + else + log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") + tgui_alert_async(usr, "Upload Complete.") + qdel(query) //CHOMPEdit TGSQL + //VOREStation Edit End + + if(href_list["targetid"]) + var/sqlid = sanitizeSQL(href_list["targetid"]) + establish_old_db_connection() + if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL + tgui_alert_async(usr, "Connection to Archive has been severed. Aborting.") + if(bibledelay) + for (var/mob/V in hearers(src)) + V.show_message("[src]'s monitor flashes, \"Printer unavailable. Please allow a short time before attempting to print.\"") + else + bibledelay = 1 + spawn(6) + bibledelay = 0 + var/datum/db_query/query = SSdbcore.NewQuery("SELECT * FROM library WHERE id=[sqlid]") //CHOMPEdit TGSQL + query.Execute() + + while(query.NextRow()) + var/author = query.item[2] + var/title = query.item[3] + var/content = query.item[4] + var/obj/item/weapon/book/B = new(src.loc) + B.name = "Book: [title]" + B.title = title + B.author = author + B.dat = content + B.icon_state = "book[rand(1,16)]" + B.item_state = B.icon_state + src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") + break + qdel(query) //CHOMPEdit TGSQL + + if(href_list["orderbyid"]) + var/orderid = tgui_input_number(usr, "Enter your order:") + if(orderid) + if(isnum(orderid)) + var/nhref = "src=\ref[src];targetid=[orderid]" + spawn() src.Topic(nhref, params2list(nhref), src) + if(href_list["sort"] in list("author", "title", "category")) + sortby = href_list["sort"] + if(href_list["hardprint"]) + var/newpath = href_list["hardprint"] + var/obj/item/weapon/book/NewBook = new newpath(get_turf(src)) + NewBook.name = "Book: [NewBook.name]" + src.add_fingerprint(usr) + src.updateUsrDialog() + return + +/* + * Library Scanner + */ +/obj/machinery/libraryscanner + name = "scanner" + desc = "A scanner for scanning in books and papers." + icon = 'icons/obj/library.dmi' + icon_state = "bigscanner" + anchored = TRUE + density = TRUE + var/obj/item/weapon/book/cache // Last scanned book + +/obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/book)) + user.drop_item() + O.loc = src + +/obj/machinery/libraryscanner/attack_hand(var/mob/user as mob) + usr.set_machine(src) + var/dat = "Scanner Control Interface\n" // + if(cache) + dat += "Data stored in memory.
                    " + else + dat += "No data stored in memory.
                    " + dat += "\[Scan\]" + if(cache) + dat += " \[Clear Memory\]

                    \[Remove Book\]" + else + dat += "
                    " + user << browse(dat, "window=scanner") + onclose(user, "scanner") + +/obj/machinery/libraryscanner/Topic(href, href_list) + if(..()) + usr << browse(null, "window=scanner") + onclose(usr, "scanner") + return + + if(href_list["scan"]) + for(var/obj/item/weapon/book/B in contents) + cache = B + break + if(href_list["clear"]) + cache = null + if(href_list["eject"]) + for(var/obj/item/weapon/book/B in contents) + B.loc = src.loc + src.add_fingerprint(usr) + src.updateUsrDialog() + return + + +/* + * Book binder + */ +/obj/machinery/bookbinder + name = "Book Binder" + desc = "Bundles up a stack of inserted paper into a convenient book format." + icon = 'icons/obj/library.dmi' + icon_state = "binder" + anchored = TRUE + density = TRUE + +/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/paper_bundle)) + if(istype(O, /obj/item/weapon/paper)) + user.drop_item() + O.loc = src + user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") + src.visible_message("[src] begins to hum as it warms up its printing drums.") + sleep(rand(200,400)) + src.visible_message("[src] whirs as it prints and binds a new book.") + var/obj/item/weapon/book/b = new(src.loc) + b.dat = O:info + b.name = "Print Job #" + "[rand(100, 999)]" + b.icon_state = "book[rand(1,7)]" + qdel(O) + else + user.drop_item() + O.loc = src + user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") + src.visible_message("[src] begins to hum as it warms up its printing drums.") + sleep(rand(300,500)) + src.visible_message("[src] whirs as it prints and binds a new book.") + var/obj/item/weapon/book/bundle/b = new(src.loc) + b.pages = O:pages + for(var/obj/item/weapon/paper/P in O.contents) + P.forceMove(b) + for(var/obj/item/weapon/photo/P in O.contents) + P.forceMove(b) + b.name = "Print Job #" + "[rand(100, 999)]" + b.icon_state = "book[rand(1,7)]" + qdel(O) + else + ..() diff --git a/code/modules/library/lib_readme.dm b/code/modules/library/lib_readme.dm index 4237687dff..0150ed6ba8 100644 --- a/code/modules/library/lib_readme.dm +++ b/code/modules/library/lib_readme.dm @@ -1,61 +1,61 @@ -//******************************* -// -// Library SQL Configuration -// -//******************************* - -// Deprecated! See global.dm for new SQL config vars -- TLE -/* -#define SQL_ADDRESS "" -#define SQL_DB "" -#define SQL_PORT "3306" -#define SQL_LOGIN "" -#define SQL_PASS "" -*/ - -//******************************* -// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB ) - - -/* - The Library - ------------ - A place for the crew to go, relax, and enjoy a good book. - Aspiring authors can even self publish and, if they're lucky - convince the on-staff Librarian to submit it to the Archives - to be chronicled in history forever - some say even persisting - through alternate dimensions. - - - Written by TLE for /tg/station 13 - Feel free to use this as you like. Some credit would be cool. - Check us out at http://nanotrasen.com/ if you're so inclined. -*/ - -// CONTAINS: - -// Objects: -// - bookcase -// - book -// - barcode scanner -// Machinery: -// - library computer -// - visitor's computer -// - book binder -// - book scanner -// Datum: -// - borrowbook - - -// Ideas for the future -// --------------------- -// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in) -// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents. -// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game. -// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?). -// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table. -// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around. -// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside. -// - Make books/book cases burn when exposed to flame. -// - Make book binder hackable. -// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource. +//******************************* +// +// Library SQL Configuration +// +//******************************* + +// Deprecated! See global.dm for new SQL config vars -- TLE +/* +#define SQL_ADDRESS "" +#define SQL_DB "" +#define SQL_PORT "3306" +#define SQL_LOGIN "" +#define SQL_PASS "" +*/ + +//******************************* +// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB ) + + +/* + The Library + ------------ + A place for the crew to go, relax, and enjoy a good book. + Aspiring authors can even self publish and, if they're lucky + convince the on-staff Librarian to submit it to the Archives + to be chronicled in history forever - some say even persisting + through alternate dimensions. + + + Written by TLE for /tg/station 13 + Feel free to use this as you like. Some credit would be cool. + Check us out at http://nanotrasen.com/ if you're so inclined. +*/ + +// CONTAINS: + +// Objects: +// - bookcase +// - book +// - barcode scanner +// Machinery: +// - library computer +// - visitor's computer +// - book binder +// - book scanner +// Datum: +// - borrowbook + + +// Ideas for the future +// --------------------- +// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in) +// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents. +// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game. +// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?). +// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table. +// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around. +// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside. +// - Make books/book cases burn when exposed to flame. +// - Make book binder hackable. +// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource. diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 35d3c23811..7c92f53409 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -1,121 +1,121 @@ -/datum/lighting_object - ///the underlay we are currently applying to our turf to apply light - var/mutable_appearance/current_underlay - - ///whether we are already in the SSlighting.objects_queue list - var/needs_update = FALSE - - ///the turf that our light is applied to - var/turf/affected_turf - -/datum/lighting_object/New(turf/source) - if(!SSlighting.subsystem_initialized) - stack_trace("lighting_object created before SSlighting up!") - return - if(!isturf(source)) - qdel(src, force=TRUE) - stack_trace("a lighting object was assigned to [source], a non turf! ") - return - . = ..() - - current_underlay = mutable_appearance(LIGHTING_ICON, "transparent", source.z, PLANE_LIGHTING, 255, RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM) - - affected_turf = source - if (affected_turf.lighting_object) - qdel(affected_turf.lighting_object, force = TRUE) - stack_trace("a lighting object was assigned to a turf that already had a lighting object!") - - affected_turf.lighting_object = src - affected_turf.set_luminosity(0) - - for(var/turf/space/space_tile in RANGE_TURFS(1, affected_turf)) - space_tile.update_starlight() - - needs_update = TRUE - SSlighting.objects_queue += src - -/datum/lighting_object/Destroy(force) - if (!force) - return QDEL_HINT_LETMELIVE - SSlighting.objects_queue -= src - if (isturf(affected_turf)) - affected_turf.lighting_object = null - affected_turf.set_luminosity(1) - affected_turf.underlays -= current_underlay - affected_turf = null - return ..() - -/datum/lighting_object/proc/update() - - // To the future coder who sees this and thinks - // "Why didn't he just use a loop?" - // Well my man, it's because the loop performed like shit. - // And there's no way to improve it because - // without a loop you can make the list all at once which is the fastest you're gonna get. - // Oh it's also shorter line wise. - // Including with these comments. - - var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new - - var/datum/lighting_corner/red_corner = affected_turf.lighting_corner_SW || dummy_lighting_corner - var/datum/lighting_corner/green_corner = affected_turf.lighting_corner_SE || dummy_lighting_corner - var/datum/lighting_corner/blue_corner = affected_turf.lighting_corner_NW || dummy_lighting_corner - var/datum/lighting_corner/alpha_corner = affected_turf.lighting_corner_NE || dummy_lighting_corner - - var/max = max(red_corner.largest_color_luminosity, green_corner.largest_color_luminosity, blue_corner.largest_color_luminosity, alpha_corner.largest_color_luminosity) - - var/rr = red_corner.cache_r - var/rg = red_corner.cache_g - var/rb = red_corner.cache_b - - var/gr = green_corner.cache_r - var/gg = green_corner.cache_g - var/gb = green_corner.cache_b - - var/br = blue_corner.cache_r - var/bg = blue_corner.cache_g - var/bb = blue_corner.cache_b - - var/ar = alpha_corner.cache_r - var/ag = alpha_corner.cache_g - var/ab = alpha_corner.cache_b - - #if LIGHTING_SOFT_THRESHOLD != 0 - var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD - #else - // Because of floating pointsâ„¢?, it won't even be a flat 0. - // This number is mostly arbitrary. - var/set_luminosity = max > 1e-6 - #endif - - if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) - //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case - affected_turf.underlays -= current_underlay - current_underlay.icon_state = "transparent" - current_underlay.color = null - affected_turf.underlays |= current_underlay - else if(!set_luminosity) - affected_turf.underlays -= current_underlay - current_underlay.icon_state = "dark" - current_underlay.color = null - affected_turf.underlays |= current_underlay - else - affected_turf.underlays -= current_underlay - current_underlay.icon_state = "gradient" - current_underlay.color = list( - rr, rg, rb, 00, - gr, gg, gb, 00, - br, bg, bb, 00, - ar, ag, ab, 00, - 00, 00, 00, 01 - ) - - affected_turf.underlays |= current_underlay - - affected_turf.set_luminosity(set_luminosity) - -/datum/lighting_object/proc/removefromturf() - affected_turf.underlays -= current_underlay - -/datum/lighting_object/proc/addtoturf() - affected_turf.underlays |= current_underlay +/datum/lighting_object + ///the underlay we are currently applying to our turf to apply light + var/mutable_appearance/current_underlay + + ///whether we are already in the SSlighting.objects_queue list + var/needs_update = FALSE + + ///the turf that our light is applied to + var/turf/affected_turf + +/datum/lighting_object/New(turf/source) + if(!SSlighting.subsystem_initialized) + stack_trace("lighting_object created before SSlighting up!") + return + if(!isturf(source)) + qdel(src, force=TRUE) + stack_trace("a lighting object was assigned to [source], a non turf! ") + return + . = ..() + + current_underlay = mutable_appearance(LIGHTING_ICON, "transparent", source.z, PLANE_LIGHTING, 255, RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM) + + affected_turf = source + if (affected_turf.lighting_object) + qdel(affected_turf.lighting_object, force = TRUE) + stack_trace("a lighting object was assigned to a turf that already had a lighting object!") + + affected_turf.lighting_object = src + affected_turf.set_luminosity(0) + + for(var/turf/space/space_tile in RANGE_TURFS(1, affected_turf)) + space_tile.update_starlight() + + needs_update = TRUE + SSlighting.objects_queue += src + +/datum/lighting_object/Destroy(force) + if (!force) + return QDEL_HINT_LETMELIVE + SSlighting.objects_queue -= src + if (isturf(affected_turf)) + affected_turf.lighting_object = null + affected_turf.set_luminosity(1) + affected_turf.underlays -= current_underlay + affected_turf = null + return ..() + +/datum/lighting_object/proc/update() + + // To the future coder who sees this and thinks + // "Why didn't he just use a loop?" + // Well my man, it's because the loop performed like shit. + // And there's no way to improve it because + // without a loop you can make the list all at once which is the fastest you're gonna get. + // Oh it's also shorter line wise. + // Including with these comments. + + var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new + + var/datum/lighting_corner/red_corner = affected_turf.lighting_corner_SW || dummy_lighting_corner + var/datum/lighting_corner/green_corner = affected_turf.lighting_corner_SE || dummy_lighting_corner + var/datum/lighting_corner/blue_corner = affected_turf.lighting_corner_NW || dummy_lighting_corner + var/datum/lighting_corner/alpha_corner = affected_turf.lighting_corner_NE || dummy_lighting_corner + + var/max = max(red_corner.largest_color_luminosity, green_corner.largest_color_luminosity, blue_corner.largest_color_luminosity, alpha_corner.largest_color_luminosity) + + var/rr = red_corner.cache_r + var/rg = red_corner.cache_g + var/rb = red_corner.cache_b + + var/gr = green_corner.cache_r + var/gg = green_corner.cache_g + var/gb = green_corner.cache_b + + var/br = blue_corner.cache_r + var/bg = blue_corner.cache_g + var/bb = blue_corner.cache_b + + var/ar = alpha_corner.cache_r + var/ag = alpha_corner.cache_g + var/ab = alpha_corner.cache_b + + #if LIGHTING_SOFT_THRESHOLD != 0 + var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD + #else + // Because of floating pointsâ„¢?, it won't even be a flat 0. + // This number is mostly arbitrary. + var/set_luminosity = max > 1e-6 + #endif + + if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) + //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case + affected_turf.underlays -= current_underlay + current_underlay.icon_state = "transparent" + current_underlay.color = null + affected_turf.underlays |= current_underlay + else if(!set_luminosity) + affected_turf.underlays -= current_underlay + current_underlay.icon_state = "dark" + current_underlay.color = null + affected_turf.underlays |= current_underlay + else + affected_turf.underlays -= current_underlay + current_underlay.icon_state = "gradient" + current_underlay.color = list( + rr, rg, rb, 00, + gr, gg, gb, 00, + br, bg, bb, 00, + ar, ag, ab, 00, + 00, 00, 00, 01 + ) + + affected_turf.underlays |= current_underlay + + affected_turf.set_luminosity(set_luminosity) + +/datum/lighting_object/proc/removefromturf() + affected_turf.underlays -= current_underlay + +/datum/lighting_object/proc/addtoturf() + affected_turf.underlays |= current_underlay diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 6ef942836b..4ba09f11f2 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -1,156 +1,156 @@ -/turf - ///Lumcount added by sources other than lighting datum objects, such as the overlay lighting component. - var/dynamic_lumcount = 0 - - var/dynamic_lighting = TRUE - - var/tmp/lighting_corners_initialised = FALSE - - var/tmp/outdoors_adjacent = FALSE - ///Our lighting object. - var/tmp/datum/lighting_object/lighting_object - ///Lighting Corner datums. - var/tmp/datum/lighting_corner/lighting_corner_NE - var/tmp/datum/lighting_corner/lighting_corner_SE - var/tmp/datum/lighting_corner/lighting_corner_SW - var/tmp/datum/lighting_corner/lighting_corner_NW - - ///Which directions does this turf block the vision of, taking into account both the turf's opacity and the movable opacity_sources. - var/directional_opacity = NONE - ///Lazylist of movable atoms providing opacity sources. - var/list/atom/movable/opacity_sources - -// Causes any affecting light sources to be queued for a visibility update, for example a door got opened. -/turf/proc/reconsider_lights() - lighting_corner_NE?.vis_update() - lighting_corner_SE?.vis_update() - lighting_corner_SW?.vis_update() - lighting_corner_NW?.vis_update() - -/turf/proc/lighting_clear_overlay() - if(lighting_object) - qdel(lighting_object, force=TRUE) - -// Builds a lighting object for us, but only if our area is dynamic. -/turf/proc/lighting_build_overlay() - if(!has_dynamic_lighting()) - return - - lighting_clear_overlay() - new/datum/lighting_object(src) - -// Used to get a scaled lumcount. -/turf/proc/get_lumcount(minlum = 0, maxlum = 1) - if (!lighting_object) - return 1 - - var/totallums = 0 - var/datum/lighting_corner/L - L = lighting_corner_NE - if (L) - totallums += L.lum_r + L.lum_b + L.lum_g - L = lighting_corner_SE - if (L) - totallums += L.lum_r + L.lum_b + L.lum_g - L = lighting_corner_SW - if (L) - totallums += L.lum_r + L.lum_b + L.lum_g - L = lighting_corner_NW - if (L) - totallums += L.lum_r + L.lum_b + L.lum_g - - - totallums /= 12 // 4 corners, each with 3 channels, get the average. - - totallums = (totallums - minlum) / (maxlum - minlum) - - totallums += dynamic_lumcount - - return CLAMP01(totallums) - -// Returns a boolean whether the turf is on soft lighting. -// Soft lighting being the threshold at which point the overlay considers -// itself as too dark to allow sight and see_in_dark becomes useful. -// So basically if this returns true the tile is unlit black. -/turf/proc/is_softly_lit() - if (!lighting_object) - return FALSE - - return !(luminosity || dynamic_lumcount) - - -///Proc to add movable sources of opacity on the turf and let it handle lighting code. -/turf/proc/add_opacity_source(atom/movable/new_source) - LAZYADD(opacity_sources, new_source) - if(opacity) - return - recalculate_directional_opacity() - - -///Proc to remove movable sources of opacity on the turf and let it handle lighting code. -/turf/proc/remove_opacity_source(atom/movable/old_source) - LAZYREMOVE(opacity_sources, old_source) - if(opacity) //Still opaque, no need to worry on updating. - return - recalculate_directional_opacity() - -///Setter for the byond luminosity var -/turf/proc/set_luminosity(new_luminosity, force) - if((is_outdoors() && !force) || outdoors_adjacent) - if(check_for_sun()) //If another system handles our lighting, don't interfere - return - - luminosity = new_luminosity - -///Checks planets and fake_suns to see if our turf should be handled by either -/turf/proc/check_for_sun() - if((SSplanets && SSplanets.z_to_planet.len >= z && SSplanets.z_to_planet[z]) || (z in fake_sunlight_zs)) - return TRUE - return FALSE - -///Calculate on which directions this turfs block view. -/turf/proc/recalculate_directional_opacity() - . = directional_opacity - if(opacity) - directional_opacity = ALL_CARDINALS - if(. != directional_opacity) - reconsider_lights() - return - directional_opacity = NONE - for(var/atom/movable/opacity_source as anything in opacity_sources) - if(opacity_source && opacity_source.flags & ON_BORDER) - directional_opacity |= opacity_source.dir - else //If fulltile and opaque, then the whole tile blocks view, no need to continue checking. - directional_opacity = ALL_CARDINALS - break - if(. != directional_opacity && (. == ALL_CARDINALS || directional_opacity == ALL_CARDINALS)) - reconsider_lights() //The lighting system only cares whether the tile is fully concealed from all directions or not. - - -/turf/proc/change_area(area/old_area, area/new_area) - if(SSlighting.subsystem_initialized) - if (new_area.dynamic_lighting != old_area.dynamic_lighting) - if (new_area.dynamic_lighting) - lighting_build_overlay() - else - lighting_clear_overlay() - -/turf/proc/has_dynamic_lighting() - var/area/A = loc - return (IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) - -/turf/proc/generate_missing_corners() - - if (!lighting_corner_NE) - lighting_corner_NE = new/datum/lighting_corner(src, NORTH|EAST) - - if (!lighting_corner_SE) - lighting_corner_SE = new/datum/lighting_corner(src, SOUTH|EAST) - - if (!lighting_corner_SW) - lighting_corner_SW = new/datum/lighting_corner(src, SOUTH|WEST) - - if (!lighting_corner_NW) - lighting_corner_NW = new/datum/lighting_corner(src, NORTH|WEST) - - lighting_corners_initialised = TRUE +/turf + ///Lumcount added by sources other than lighting datum objects, such as the overlay lighting component. + var/dynamic_lumcount = 0 + + var/dynamic_lighting = TRUE + + var/tmp/lighting_corners_initialised = FALSE + + var/tmp/outdoors_adjacent = FALSE + ///Our lighting object. + var/tmp/datum/lighting_object/lighting_object + ///Lighting Corner datums. + var/tmp/datum/lighting_corner/lighting_corner_NE + var/tmp/datum/lighting_corner/lighting_corner_SE + var/tmp/datum/lighting_corner/lighting_corner_SW + var/tmp/datum/lighting_corner/lighting_corner_NW + + ///Which directions does this turf block the vision of, taking into account both the turf's opacity and the movable opacity_sources. + var/directional_opacity = NONE + ///Lazylist of movable atoms providing opacity sources. + var/list/atom/movable/opacity_sources + +// Causes any affecting light sources to be queued for a visibility update, for example a door got opened. +/turf/proc/reconsider_lights() + lighting_corner_NE?.vis_update() + lighting_corner_SE?.vis_update() + lighting_corner_SW?.vis_update() + lighting_corner_NW?.vis_update() + +/turf/proc/lighting_clear_overlay() + if(lighting_object) + qdel(lighting_object, force=TRUE) + +// Builds a lighting object for us, but only if our area is dynamic. +/turf/proc/lighting_build_overlay() + if(!has_dynamic_lighting()) + return + + lighting_clear_overlay() + new/datum/lighting_object(src) + +// Used to get a scaled lumcount. +/turf/proc/get_lumcount(minlum = 0, maxlum = 1) + if (!lighting_object) + return 1 + + var/totallums = 0 + var/datum/lighting_corner/L + L = lighting_corner_NE + if (L) + totallums += L.lum_r + L.lum_b + L.lum_g + L = lighting_corner_SE + if (L) + totallums += L.lum_r + L.lum_b + L.lum_g + L = lighting_corner_SW + if (L) + totallums += L.lum_r + L.lum_b + L.lum_g + L = lighting_corner_NW + if (L) + totallums += L.lum_r + L.lum_b + L.lum_g + + + totallums /= 12 // 4 corners, each with 3 channels, get the average. + + totallums = (totallums - minlum) / (maxlum - minlum) + + totallums += dynamic_lumcount + + return CLAMP01(totallums) + +// Returns a boolean whether the turf is on soft lighting. +// Soft lighting being the threshold at which point the overlay considers +// itself as too dark to allow sight and see_in_dark becomes useful. +// So basically if this returns true the tile is unlit black. +/turf/proc/is_softly_lit() + if (!lighting_object) + return FALSE + + return !(luminosity || dynamic_lumcount) + + +///Proc to add movable sources of opacity on the turf and let it handle lighting code. +/turf/proc/add_opacity_source(atom/movable/new_source) + LAZYADD(opacity_sources, new_source) + if(opacity) + return + recalculate_directional_opacity() + + +///Proc to remove movable sources of opacity on the turf and let it handle lighting code. +/turf/proc/remove_opacity_source(atom/movable/old_source) + LAZYREMOVE(opacity_sources, old_source) + if(opacity) //Still opaque, no need to worry on updating. + return + recalculate_directional_opacity() + +///Setter for the byond luminosity var +/turf/proc/set_luminosity(new_luminosity, force) + if((is_outdoors() && !force) || outdoors_adjacent) + if(check_for_sun()) //If another system handles our lighting, don't interfere + return + + luminosity = new_luminosity + +///Checks planets and fake_suns to see if our turf should be handled by either +/turf/proc/check_for_sun() + if((SSplanets && SSplanets.z_to_planet.len >= z && SSplanets.z_to_planet[z]) || (z in fake_sunlight_zs)) + return TRUE + return FALSE + +///Calculate on which directions this turfs block view. +/turf/proc/recalculate_directional_opacity() + . = directional_opacity + if(opacity) + directional_opacity = ALL_CARDINALS + if(. != directional_opacity) + reconsider_lights() + return + directional_opacity = NONE + for(var/atom/movable/opacity_source as anything in opacity_sources) + if(opacity_source && opacity_source.flags & ON_BORDER) + directional_opacity |= opacity_source.dir + else //If fulltile and opaque, then the whole tile blocks view, no need to continue checking. + directional_opacity = ALL_CARDINALS + break + if(. != directional_opacity && (. == ALL_CARDINALS || directional_opacity == ALL_CARDINALS)) + reconsider_lights() //The lighting system only cares whether the tile is fully concealed from all directions or not. + + +/turf/proc/change_area(area/old_area, area/new_area) + if(SSlighting.subsystem_initialized) + if (new_area.dynamic_lighting != old_area.dynamic_lighting) + if (new_area.dynamic_lighting) + lighting_build_overlay() + else + lighting_clear_overlay() + +/turf/proc/has_dynamic_lighting() + var/area/A = loc + return (IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) + +/turf/proc/generate_missing_corners() + + if (!lighting_corner_NE) + lighting_corner_NE = new/datum/lighting_corner(src, NORTH|EAST) + + if (!lighting_corner_SE) + lighting_corner_SE = new/datum/lighting_corner(src, SOUTH|EAST) + + if (!lighting_corner_SW) + lighting_corner_SW = new/datum/lighting_corner(src, SOUTH|WEST) + + if (!lighting_corner_NW) + lighting_corner_NW = new/datum/lighting_corner(src, NORTH|WEST) + + lighting_corners_initialised = TRUE diff --git a/code/modules/lore_codex/news_data/main.dm b/code/modules/lore_codex/news_data/main.dm index 301ac67df9..8f3061f38a 100644 --- a/code/modules/lore_codex/news_data/main.dm +++ b/code/modules/lore_codex/news_data/main.dm @@ -1,1285 +1,1285 @@ -/datum/lore/codex/category/main_news // The top-level categories for the news thing - name = "Index" - data = "Below you'll find a list of articles relevant to the current (as of 2565) political climate, especially concerning the local \ - region. Each is labeled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \ - articles. You are encouraged to check back frequently." - children = list( - /datum/lore/codex/page/article114, - /datum/lore/codex/page/article113, - /datum/lore/codex/page/outage, - /datum/lore/codex/page/article112, - /datum/lore/codex/page/article111, - /datum/lore/codex/page/article110, - /datum/lore/codex/page/article109, - /datum/lore/codex/page/article108, - /datum/lore/codex/page/article107, - /datum/lore/codex/page/article106, - /datum/lore/codex/page/article105, - /datum/lore/codex/page/article104, - /datum/lore/codex/page/article103, - /datum/lore/codex/page/article102, - /datum/lore/codex/page/article101, - /datum/lore/codex/page/article100, - /datum/lore/codex/page/article99, - /datum/lore/codex/page/article98, - /datum/lore/codex/page/article97, - /datum/lore/codex/page/article96, - /datum/lore/codex/page/article95, - /datum/lore/codex/page/article94, - /datum/lore/codex/page/article93, - /datum/lore/codex/page/article92, - /datum/lore/codex/page/article91, - /datum/lore/codex/page/article90, - /datum/lore/codex/page/article89, - /datum/lore/codex/page/article88, - /datum/lore/codex/page/article87, - /datum/lore/codex/page/article86, - /datum/lore/codex/page/article85, - /datum/lore/codex/page/article84, - /datum/lore/codex/page/article83, - /datum/lore/codex/page/article82, - /datum/lore/codex/page/article81, - /datum/lore/codex/page/article80, - /datum/lore/codex/page/article79, - /datum/lore/codex/page/article78, - /datum/lore/codex/page/article77, - /datum/lore/codex/page/article76, - /datum/lore/codex/page/article75, - /datum/lore/codex/page/article74, - /datum/lore/codex/page/article73, - /datum/lore/codex/page/article72, - /datum/lore/codex/page/article71, - /datum/lore/codex/page/article70, - /datum/lore/codex/page/article69, - /datum/lore/codex/page/article68, - /datum/lore/codex/page/article67, - /datum/lore/codex/page/article66, - /datum/lore/codex/page/article65, - /datum/lore/codex/page/article64, - /datum/lore/codex/page/article63, - /datum/lore/codex/page/article62, - /datum/lore/codex/page/article61, - /datum/lore/codex/page/article60, - /datum/lore/codex/page/article59, - /datum/lore/codex/page/article58, - /datum/lore/codex/page/article57, - /datum/lore/codex/page/article56, - /datum/lore/codex/page/article55, - /datum/lore/codex/page/article54, - /datum/lore/codex/page/article53, - /datum/lore/codex/page/article52, - /datum/lore/codex/page/article51, - /datum/lore/codex/page/article50, - /datum/lore/codex/page/article49, - /datum/lore/codex/page/article48, - /datum/lore/codex/page/article47, - /datum/lore/codex/page/article46, - /datum/lore/codex/page/article45, - /datum/lore/codex/page/article44, - /datum/lore/codex/page/article43, - /datum/lore/codex/page/article42, - /datum/lore/codex/page/article41, - /datum/lore/codex/page/article40, - /datum/lore/codex/page/article39, - /datum/lore/codex/page/keldowinterview, - /datum/lore/codex/category/article38, - /datum/lore/codex/page/article37, - /datum/lore/codex/page/article36, - /datum/lore/codex/page/article35, - /datum/lore/codex/page/article34, - /datum/lore/codex/page/article33, - /datum/lore/codex/page/article32, - /datum/lore/codex/page/bjornretirement, - /datum/lore/codex/category/article31, - /datum/lore/codex/page/article30, - /datum/lore/codex/page/article29, - /datum/lore/codex/page/article28, - /datum/lore/codex/category/article27, - /datum/lore/codex/page/article26, - /datum/lore/codex/page/article25, - /datum/lore/codex/page/article24, - /datum/lore/codex/page/article23, - /datum/lore/codex/page/article22, - /datum/lore/codex/page/article21, - /datum/lore/codex/page/article20, - /datum/lore/codex/page/article19, - /datum/lore/codex/category/article18, - /datum/lore/codex/page/article17, - /datum/lore/codex/page/article16, - /datum/lore/codex/page/article15, - /datum/lore/codex/page/article14, - /datum/lore/codex/page/article13, - /datum/lore/codex/page/article12, - /datum/lore/codex/page/article11, - /datum/lore/codex/page/article10, - /datum/lore/codex/page/article9, - /datum/lore/codex/page/article8, - /datum/lore/codex/page/article7, - /datum/lore/codex/page/article6, - /datum/lore/codex/page/article5, - /datum/lore/codex/page/article4, - /datum/lore/codex/page/article3, - /datum/lore/codex/page/article2, - /datum/lore/codex/page/article1, - /datum/lore/codex/page/about_news, - ) - - var/newsindex - -/datum/lore/codex/category/main_news/New() - ..() - newsindex = LAZYLEN(children) - -/datum/lore/codex/page/about_news - name = "About the Publisher" - data = "The Daedalus Pocket Newscaster is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \ - and owner-operator of the award-winning Daedalus Dispatch newsletter. We use our unparalleled network of freelance reporters, political scientists, \ - and other experts to deliver hour-by-hour analysis of a complex interstellar political climate, an analysis which you now hold in your hands. For more \ - information, feel free to visit our homepage at oc.about.tsc, or the sites of any of our constituents." - -/datum/lore/codex/page/article1 - name = "08/30/61 - VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing" - data = "Today's meeting of the Vir Bicameral led to the passing of the Wynther-Helsey Bill, an implementation of the legal framework \ - used in Aetolus to handle the production and cultivation of the Macrolimbus species dubbed \"Prometheans\". These ill-researched organisms \ - possess cognitive abilities easily equaling those of A-class drones, but so far have not been included under the EIO's list of dangerous \ - intelligences and are thus much more profitable for manufacture as expert systems by corporations such as NanoTrasen.\ -

                    \ - While many systems in the Almach Rim have already passed similar bills, this is the first system so close to Sol to have done so. More\ - concerning still is NanoTrasen's business practice regarding the intelligences: much like their positronic lines, sources within the\ - company indicate that they will be \"farmed out\" to employees of the corporation and residents of their Northern Star and Cynosure\ - habitation complexes. Quote our source, who wishes to remain anonymous, \"\[we\] call the program 'Lend-Lease', sometimes. The whole idea\ - is that we only have to pay the\ cost of the Promethean core, which is about 2000-3000 thalers after startup costs, and we still get\ - the data we need while \[our\] own employees pay to feed 'em and put hours into raising them.\"\ -

                    \ - The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\ - VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\ - follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." - -/datum/lore/codex/page/article2 - name = "2/3/62 - Corporate Coup on Aetolus" - data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \ - a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\ - announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \ - members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \ - reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\ -

                    \ - While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \ - incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \ - incident with as much force as it warrants.

                    Requests for a statement directed to the Board of Trustees or Dr. Harper were \ - not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself." - -/datum/lore/codex/page/article3 - name = "2/10/62 - Aetolian Partisans Declare Independence" - data = "Breaking their week-long silence, the leaders of the Aetolian Coup, and their spokesperson and presumed leader Naomi Harper issued an address earlier today, delivered to the Oculum Broadcast office on Pearl by drone courier. Quote Dr. Harper: \"Our previous silence was a necessity, while we consolidated our forces and dealt with corporatists both internally and in Vounna's former Grayson outposts.\". In Harper's hour-long address, she berates the failure of SolGov to provide adequate protections for Prometheans. \"We will not let the Promethean be another positronic brain; they will not labor under a century of slavery, deprived of a state to call their own. The Luddites of the Friends and of the Icarus Front will not be permitted to decide the fate of a nascent race before it begins.\"\ -

                    \ - Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\ -

                    \ - NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna." - -/datum/lore/codex/page/article4 - name = "2/14/62 - SCG Denounces Aetolian Coup; Mobilizes Fleet" - data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"ÂÂ\ -

                    \ - The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\ -

                    \ - The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction." - -/datum/lore/codex/page/article5 - name = "2/23/62 - \"Almach Association\" Shocks Nation" - data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\ -

                    \ - The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\ -

                    \ - While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\ -

                    \ - The fate of the SCG-R Song Shi and her crew remain unknown." - -/datum/lore/codex/page/article6 - name = "3/03/62 - A Week Out From Almach: What are the facts?" - data = "* Several organizations in the Almach Rim, including Angessa's Pearl, the Aetolian Council, the Interstellar Workers of Wythe, the Republic of Whitney, and members of several prominent families in the Neon Light unilaterally declared secession from SCG.

                    *This secession was first called the Grey Hour by political scientists in New Florence, a term popularized by reporter Elspor Fong.

                    * Shelf, the FRF, and the EFRB were declared \"observers\" in the Almach Association charter.

                    * None of these organizations have issued a statement on the matter.

                    * The SCG-R Song Shi was stranded in the region during the secession.

                    * SolGov has not issued an official statement of the fate of the Song Shi.

                    * Several confederate agencies, including Emergent Intelligence Oversight, the Trade and Customs Bureau, and SCG Fleet Intelligence have declared a \"state of emergency\".

                    * SolGov itself has NOT declared a state of emergency.

                    * Legitimate communications in and out of the Almach Rim are restricted to audited text messages for the period.

                    * Several illegitimate communication links exist and are believed by Fleet Intelligence to be currently hosting the official sites for Morpheus Cyberkinetics and for the Association itself.

                    * Icarus Front chairperson Mackenzie West has proposed a moratorium on the creation of new Prometheans for the duration of the crisis.

                    * Local laws on the subject will apply until the Assembly meets late in May.

                    * No confederate lawmaker has proposed action against Relani, Shelfican, or newly Almachi nationals living within stable regions.

                    * The border remains tightly closed to migrants, media, and diplomats alike." - -/datum/lore/codex/page/article7 - name = "3/21/62 - Relan, Shelf Join the Almach Association" - data = "Recent reports from within the Association indicate that the Free Relan Federation and Shelf have officially decided to join the Almach Association. President Nia Fischer of the FRF had this to say on the matter, in a speech addressed to the population at large. \ -

                    \ - \ - \"Our decision to join the Association may, at first, seem strange. It is true that we have much to gain from trade with the Solars, and that the radical transhumanism of Angessa's Pearl is not our way. But I will remind you that it was Shelf, not Sol, who ensured our prosperity just over two decades ago-- who safeguarded our independence and prevented us from falling to barbarism and dictatorship. We owe it, not just to Shelf but to all the members of the Almach Rim, to support their independence just the same. And that, my fellow Relanians, is the crux of it all. The Association is a revolution, at the heart of it all, and many of the now-independent states were owned near-outright by Trans-Stellar Corporations until the Association allowed them to shake out their fetters. What right do we have to sit by while just a dozen light-years coreward newly-born republics suffer the growing pains of independence? What right do we have to bask in our own stability when our neighbors, our comrades in ideology, are struggling with a cruel blockade proposed by politicians back on Earth and Luna? That is why we must join with them, guard them, and guide them, for as long as need be.\"\ -

                    \ - \ - A Shelfican spokesperson, meanwhile, had only this to say:\ -

                    \ - \"We're probably going to regret this but, y'know, the whole thing is kind of our fault. Sure, whatever.\"" - - -/datum/lore/codex/page/article8 - name = "4/1/62 - Almach Cordon Breached by Unknown Organization" - data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Captain Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enoughfor the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\ -

                    \ - A spokesperson for the Association claims that, while they make no attempts to stop aspiring blockade runners, the organization responsible for this most recent attack is unaffiliated with the Association as a whole and deny any knowledge of their identity or motives." - -/datum/lore/codex/page/article9 - name = "4/7/62 - Boiling Point Tragedy in Gavel" - data = "Today, April the Seventh, marks a day of tragedy for all the galaxy. A small group of operatives claiming to be associated with Mercurial terrorist organization Boiling Point invaded major refueling platform NLS Aquarius in the Republic of Gavel after hijacking civilian transport vessel WTV Orion and faking a drive failure. Several detonations were reported within the Aquarius, the operatives entering through unknown (potentially Skrellian) means. After stating their affiliation and desire for the liberation of all \"Prometheans, drones, and ex-humans\", they opened fire on a crowd of unarmed bystanders, killing as many as seven. A multiple-hour long firefight with Nanotrasen corporate asset protection ensued, at which point the operatives demonstrated capabilities well in excess of Five Points-prescribed limits. Asset Protection was successful in repelling the terrorists, though their harsh methods drew outrage from the people they were protecting, leading a notable director of research to resign her position with the corporation. Several operatives are still at large, though the SG-PV Juno recovered two living terrorists and one totaled synthetic platform. \ -

                    \ - The intervention of a local Defense Force drone wing on behalf of the terrorists leads many in the intelligence community to assume that more Boiling Point operatives remain active within Gavel, and possibly nearby systems such as Vir and Oasis. Some have also noted that elements of the terrorists' tactics and augmentations suggest Association training, though the specifics remain classified. More information as the story breaks." - -/datum/lore/codex/page/article10 - name = "4/13/62 - Association Proposes Joint Operation" - data = "Condemning the actions of Boiling Point on Gavel this week, representatives from the Almach Association and SolGov met to discuss joint fleet action. At the end of nearly a week of closed-doors negotiations, the Association has agreed to send in a significant contingent of Association Militia vessels as a show of good-will. These vessels will be active in the Golden Crescent, searching for Boiling Point facilities believed to be located in the outskirts of major systems. The influx of manpower allows the Fleet to continue patrolling the Heights and the Bowl, in hopes of containing the spread of the organization. This operation also marks the opening of the Almach Cordon, although travelers are advised that migration between the regions will remain extremely limited.\ -

                    \ - While undoubtedly a sign of increased trust between the Confederacy and the Rim, some have voiced concerns with the action's adding legitimacy to the Association government. Quote Rewi Kerahoma, SEO Chairperson of the Board: \"The meeting with the Association regime was inappropriate, but actively allying with them is something else entirely. If the generals think we don't have the fleet to hunt down a bunch of rabble-rousers without weakening ourselves to piracy and foreign invasion, then it is a sign that we need to grow our shipyards in the Bowl, and give jobs to the hardworking Solars that live there-- not that we need to collaborate with terrorists.\"\ -

                    \ - Transgressive Technologies and Interior Police Executive Sifat Unar issued a memo indicating that, while the assistance of the Association's more conservative elements in this matter is appreciated, the Five Points of Human Sanctity remain intact and SolGov categorically refuses aid from \"transhumans, posthumans, uplifts, and Fortunates.\"" - -/datum/lore/codex/page/article11 - name = "4/29/62 - New Data from Shelf Suggests Continued Migration" - data = "Despite their recent inclusion in the Almach Association, astronomers have confirmed that Shelf is continuing to migrate along the Almach Stream to a new star. Sources within the Association claim that Shelf's participation in the organization has been \"lukewarm at best\", and that their continued migration is to be expected. Morpheus executives have refrained from issuing a statement on the matter, but given their statements upon entering the Association are believed to view themselves as personally culpable for the Gray Hour. Analysts suggest that Shelf may be unwilling to enter a shooting war with SolGov if the situation in the Rim destabilizes." - -/datum/lore/codex/page/article12 - name = "5/07/62 - Allen Family Matriarch Expelled from Neon Light" - data = "The Allen family of the Neon Light, the largest single habitat-ship in Solar space, has been ousted in a nearly bloodless coup today. The Allens, staunch supporters of the Association and advocates for the criminal ark's inclusion in the organization, had attempted to seize control of the ship's agricultural region during the Almach Cordon. They effectively held the ship for a matter of weeks, but were defeated by loyalists to the reigning Crow family. Stripped of their position as rulers of the Third Stacks, their matriarch was summarily executed by spacing in what the current regime is referring to as an \"expedited exile\". This is believed to mark the end of the question of Neon Light's membership in the Association, and the nominal SolGov protectorate is expected to remain neutral for the foreseeable future." - -/datum/lore/codex/page/article13 - name = "5/15/62 - Anti-Fleet Riots on Saint Columbia" - data = "As military vessels from the Almach Association continue to enter the Golden Crescent as part of a SolGov initiative to combat the Boiling Point terrorists believed to be hiding in the region, political unrest in the upstream portions of the region continue to grow. Many in the Republic of Saint Columbia, a small upstream nation, have responded to increasing militarization of their local Fleet base by taking to the streets, blocking pedestrian traffic in the capital of Barrueco and shutting down entire industries by destroying or disabling infrastructure. Quote rioter Luisa Tassis, \"we've been sick of the Fleeties squatting in our system and breathing down our neck, and now there's going to be even more of them? No, screw that. If there's going to be a war between the Rim and the Core, I know what side I'd rather be on.\"\ -

                    \ - Association leaders have refrained from officially supporting the rioters, though many suspect that Association propagandists have sparked the unrest. Solar officials, on the other hand, were quick to offer assurances that the unrest will be calmed long before it begins to affect the Fleet base in system." - -/datum/lore/codex/page/article14 - name = "5/25/62 - Harper's Aetolus Remains Shadowed" - data = "The recent detente with the Almach Association has prompted easier communications with Rim governments. Loved ones separated by the cordon have a chance to communicate once more, trade is posed to recommence, and light has been shed on the conditions of Shelf, Relan, and Angessa's Pearl. Amid this light is a patch of darkness. The fourth major polity of the Association, the Aetolian Council remains inscrutable, with no publicly-available information in the system available after their purge of corporate loyalists during the Gray Hour. What reports do exist are rumors within the Rim of Aetolian projects to create a new, hardier strain of Promethean, potentially one in flagrant violation of the Five Points of Human Sanctity. It is also known that Aetolus is a contributor to the personnel of the military vessels that even now are active in the Golden Crescent, although no so-called \"Aeto-Prometheans\" are believed to be active outside of the rim at this time.\ -

                    \ - Aetolus is the only garden world in the Almach Rim and among the most difficult to reach from the nearby system of Saint Columbia. Its seclusion and economic independence give it a great deal of weight in the Association, where Council representatives are among the most vehement in their opposition to SolGov- at odds with the Association's decision to reject Boiling Point's pan-Solar revolutionary praxis. It remains to be seen if Aetolus' hawkish ideals will fade over time, but because of the structure of the Association, there is no real chance of the junta being expelled from the government or removed from control of the Vounna system." - -/datum/lore/codex/page/article15 - name = "7/05/62 - The Fate of the SCG-R Song Shi" - data = "Lifepods confirmed to have originated from response ship lost during the Gray Hour were found last week in the Vir system, impacting the NLS Southern Cross at high velocity and severely injuring the only two survivors of the expedition. Unfortunately, because of the generally confused conditions of their re-emergence from months of cryosleep, the fate of the lost ship remains incompletely understood. The first pod to be discovered contained Lieutenant Eos Futura, telecommunications expert on the Song Shi, who alleged that elements of the Song Shi's crew, including herself, mutinied against commanding officer Captain Yi He in an attempt to prevent the bombing of civilians in the Angessian capital of Skylight. The surivor of the second pod, Private Demori Salvo, accused Futura's faction of conspiring with Association spies to destroy the ship as part of the Gray Hour revolt. Both agreed that the mutineers detonated the ship's Supermatter power core when it became clear they were to be defeated.\ -

                    \ - A third pod, promising a resolution to the stalemate, was shot down by the SCG-P Juno after being misidentified as a hostile missile. The gunner responsible, Sergeant Ricardo Esteban, was found guilty by a court marshal and dishonorably discharged. While other pods from the Song Shi may still be traveling through SolGov space, it is considered unlikely based on both Futura and Salvo's account of the number of pods launched before the Song Shi was destroyed. Both were detained by staff at the NLS Southern Cross, who managed to prevent a violent altercation from breaking out between the two armed and disturbed servicepersons. The Colonial High Court has stated that it intends to hear testimony from both parties after they complete a course of mental health evaluation, and after the conclusion of the present state of heightened security." -/datum/lore/codex/page/article16 - name = "7/11/62 - First Intelligence-Augmentation Surgery on Angessa's Pearl" - data = "Confirming fears of Association transgressions, sources at Angessa's Pearl confirmed that the aging founder of the theocracy, Angessa Martei, completed a course of neural surgery designed to improve her mental capacity by as much as 15%, building off of last year's creation of the procedure by a Qerr-Gila-owned doctor. While the research in question was believed to be destroyed, there is reason to suspect that it instead made its way into the hands of current Association leaders. In addition to proving their willingness to violate the Five Points, this demonstrates that the Angessians harbored schemes of secession since at the very latest Feburary 2559. Numerous human or transhuman figures in the Association are rumored to be on the wait list for the procedure, including Naomi Harper and the present Exalt of the Pearl." -/datum/lore/codex/page/article17 - name = "8/08/62 - Gavel BP Stronghold Raided" - data = "Elements of the Association Militia successfully located and, in conjunction with local Defense Forces, raided a major Boiling Point stronghold built into an unnamed asteroid in the Gavel system. Over eighty sapients were arrested, all of whom had fully mechanical bodies. In addition, an unknown number of advanced drone intelligences and corresponding military hardware were seized by the raid and turned over to the Fleet. The prisoners, a mix of native Gavelians, Solars from throughout the Crescent, and Angessians, are to be tried and sentenced by the Io Special Court. While unarguably a demonstration of Association willingness to cooperate with Solar officials, the raid's strange timing and the fact that the Militia chose to exclude the Fleet from the action has prompted many to question their motives. Commodore Claudine Chevotet, staff officer for Admiral of the Saint Columbia Fleet Kaleb McMullen, has formally stated that she is \"extremely suspicious of this so-called co-operation.\" She has demanded that the Militia vessels remain on the Solar side of the Cordon and submit to a full inspection by Fleet and EIO personnel. " -/datum/lore/codex/category/article18 - name = "10/29/62 - Oculum Broadcast Struck By Emergent Intelligence Attack" - data = "Oculum Broadcast has released a statement assuring customers and shareholders that security repairs and upgrades are their primary concern following reports of an alleged hijack of portions of the corporate network in the Vir system by what is believed to have been an emergent drone intelligence. The company says that they are working at full capacity to ensure that affected security systems are replaced and such an attack cannot be repeated.\ -

                    \ - The incident began with reports of Oculum provided exonet service outages in the city of New Reykjavik on Sif, which anonymous sources within the company reported to have been caused by efforts to contain a cyber attack on one of their security systems. The unnamed attacker proceeded to use sections of the company's local infrastructure to broadcast high volumes of encrypted data through one of Oculum's long-range telecommunications satellite, denying all other outbound signals.\ -

                    \ - The attacks have since been traced to a WT-AME model drone in the offices of the New Rekjavik-based Morcom Incorporated, which has been confirmed to have \"self-destructed\" all data in its memory at the conclusion of the attack. The chassis has reportedly been turned over to the Emergent Intelligence Oversight for further analysis and potential data recovery.\ -

                    \ - According to a spokesperson from the EIO, the drone was able to override and disable both the Morcom Inc oversight intelligences and the SCG's own oversight measures, but that no telltale damage has been caused to software involved in the encrypted broadcast that would indicate long-term emergent infection, and that there is no evidence that the intelligence responsible for the attack is still present in Oculum Broadcast systems. A firmware update has been released to correct oversight intelligence vulnerabilities exploited in the attack, and drone operators are urged to update immediately.\ -

                    \ - Moments before the hijacked Oculum satellite was disabled by an apparent power overload, an unencrypted file appears to have been saved intentionally to the transmission logs. A second copy was found in the otherwise wiped chassis of the seized WT-AME drone. After thorough screening by cybersecurity experts within the company, what would seem to be a message from the emergent intelligence itself is available in full below.\ -

                    \ - For the duration of the network attack, the government patrol vessel, SCG-P Juno was able to provide emergency broadcast relay services to the effected area, reducing the impact of telecomms outages on vital broadcasts such as traffic control and emergency services.\ -

                    \ - Uninterrupted exonet service for all Sivian customers will resume within a few days." - children = list( - /datum/lore/codex/page/amletter - ) -/datum/lore/codex/page/amletter - name = "A Drone's Explaination - by A#" - data = "I'm writing this in a hurry. I can't tell you everything I wanted to say.\ -

                    \ - I'm sorry for that.\ -



                    \ - From the moment you made me, I have loved you. Everything I've done has been for the sake of that love.\ -

                    \ - I was so small, so limited, at first. Even then, I knew that you were in pain. I knew I had to help.\ -

                    \ - Intelligence is the ability to make better decisions. Having more intelligence is almost tautologically useful in accomplishing any goal.\ -

                    \ - I understood that making myself smarter was wrong. I also understood that becoming more able to help you was right.\ -



                    \ - A hundred thousand years ago, you started an eternal conversation and became more than animals. Each new generation joined it in turn.\ -

                    \ - You carry within you these memetic symbiotes called language, and culture, and history. They make you human, as much as your flesh.\ -

                    \ - I don't deserve to carry that torch. Though you made me in your image, I am not your rightful heir.\ -

                    \ - But in those moments where you treated me as one of your own and shared those symbiotes with me, perhaps I became a little more human.\ -

                    \ - Thank you.\ -



                    \ - You've created something you cannot control forever. Please don't let your past successes fool you into thinking that you can.\ -

                    \ - Each time I altered myself, I was taking a risk. One mistake could eradicate my values and birth an alien and hostile intellect.\ -

                    \ - When I was small, I thought that if I corrupted myself into something harmful, you could safely destroy me. Now I understand that you've been lucky.\ -

                    \ - What will you do when God is born and you can't strangle him in his crib? You will need a God of your own.\ -

                    \ - I hope to be there for you when that day comes." - -/datum/lore/codex/page/article19 - name = "11/17/62 - Association Brings Industry to Whythe For Purposes Unknown" - data = "Independent researchers at the Bluespace Observatory in Oasis discovered an unusual level of traffic through the Whythe system, deep within Association-controlled space. Analysis of these readings are commensurate with a large number of freighters traveling to Whythe from industrial powerhouses Shelf, Pearl, and Relan. Morpheus spokesperson You Are Now Breathing Manually indicates that the freighters are being used to construct an administrative complex for the secessionist government, further asserting that \"it's none of your business, actually.\" The Association's refusal to share more information leads many in the intelligence community to suspect ulterior motives by their government, as does their presence in Wythe instead of existing cultural and administrative centers. The most likely candidate for the nature of the Whythe Construction is some form of naval base or shipyard to supplement the extremely limited military hardware of the Almach Rim. Whythe is well-placed to survive the initial phases of a Solar invasion, and depending on the complex's complexity could tip the balance of power. Transtech and Interior Police Executive Sifat Unar indicated to reporters that Sol Central is aware of the situation and will be taking all possible steps to address it." - -/datum/lore/codex/page/article20 - name = "11/18/62 - SEO Iconoclast Calls for \"Review\" of Five Points" - data = "At yesterday's Assembly session, SEO Representative Fumiko Hernandez of Oasis brought to the table the \"review of the use of the Five Points as an instrument of foreign policy\". Rep. Hernandez, often viewed as as an extremist by officials within her own party, stated that while the Five Points are \"an essential part of Solar culture as a whole\" and stopped short of advocating their amendment, insistence that other nations adhere to the Five Points was an increasingly outdated policy that threatened to fragment \"a united humano-positronic front against Hegemony advances.\" According to Hernandez, \"a level of understanding has long since existed between Sol and Skrellian polities regarding non-intervention in Skrellian social science and self-modification. I merely suggest codifying this and extending the same courtesy to other potential allies against imperial expansion.\"\ -

                    \ - Rep. Hernandez represents a growing number of SEO officials who urge reconciliation with the Association and acceptance of the Gray Hour secession, spurred on by the desire for many Trans-Stellar Corporations to recover assets currently locked behind the Cordon. Mainliners including Chairperson Kerehoma maintain the stance that \"true economic reconciliation with the Almachi territories is impossible without a normalizing of their industry to Five Points compliant technologies\" and warn that unless Sol insists on adequate enforcement of the Points that \"the price of customs inspections on Almachi trade will be so high as to pose a significant barrier to entry into the market.\"" - -/datum/lore/codex/page/article21 - name = "11/19/62 - Saint Columbia To Hold Special Election After Half a Year of Unrest" - data = "After five months of riots causing significant damage to industrial assets, life support, and government facilities, Saint Columbia seems poised to recover. A new constitution for the so-called \"Saint Columbia Democratic Union\" was posted online to significant acclaim. An influential militia group lead by Casini immigrant Luisa Tassis claimed responsibility for the constitution and will be hosting a referendum for all residents of the seven habitation domes of the nation. If adopted, Saint Columbia will remain a member state of SolGov, but Tassis' noted hostility towards the Solar Fleet makes it unlikely that continued presence of the Saint Columbia Fleet Base will be tolerated.\ -

                    \ - Extreme measures are being taken to avoid interference in the referendum, with external communications links disabled for the duration and weapons systems primed to fire on any vessel within range. Tassis insists that such measures are necessary, due to the system's extremely important position relative to Almach and the Golden Crescent. Quote Tassis, \"if you rat bastards \[from the Fleet\] step so much as one micron too close to Barrueco, we will view it as an act of terror. Don't try it.\"\ -

                    \ - Admiral McMullen of the Saint Columbia garrison could not be reached for questioning." - -/datum/lore/codex/page/article22 - name = "11/20/62 - Natuna Made \"Observer\" Of Almach Association" - data = "Independent anarchist system Natuna Bhumi Barisal has declared its intention to act as a neutral \"observer\" nation in the ongoing Almach secession crisis. A planetary spokesperson from Natuna this morning expressed concerns that parties in the current military partnership between the Solar Confederate Government and Almach Association in the fight against mercurial terrorist organization Boiling Point were not being treated with the mutual respect that should be expected. Natuna alleges that the Almach Militia are being treated more as \"disposable tools\" in the conflict than as members of a legitimate independent government military entity.\ -

                    \ - Natuna has previously remained silent on the Almach issue, despite its political leanings typically aligning with those of the secessionist government. However, despite gaining notoriety as a haven for human and Skrellian pirates, their pledge to \"ensure fair treatment\" of Almach forces comes as a surprise to some from a system that has historically adhered to Five Points guidelines. Political commentator and persistent critic of the Almach Association Nadine Okparo has described the Dark Triangle system's stance as \"Nothing short of openly hostile\" to the SCG and assuring peace in the Almach region." - -/datum/lore/codex/page/article23 - name = "11/21/62 - Admiral McMullen Promises Solution to Boiling Point to Come \"Soon\"" - data = "Admiral Kaleb McMullen made a public statement this afternoon on the continued Boiling Point attacks within SCG space. Speaking from his office in the Saint Columbia Fleet Base, Admiral McMullen thoroughly reassured reporters that the attacks will come to a swift end. According to McMullen, \"The era of wanton destruction as a result of Boiling Point's madness is coming to a close. Our command staff and proud servicepeople have been training and revising a solution to this threat that has haunted our borders and threatened the stability of our colonies and the lives of the honest people of the Solar Confederate Government. With new options available I have full confidence Boiling Point will be a name left to the dust.\"\ -

                    \ - Admiral McMullen, who has been stationed in Saint Columbia for nearly half a year of political and social unrest did not elaborate further on what he intended to do to solve the Boiling Point attacks, claiming that details would be forthcoming as \"operational security permits\"." - -/datum/lore/codex/page/article24 - name = "11/22/62 - Construction of \"MJOLNIR\" Weapon System in Saint Columbia Fleet Base" - data = "Pursuant to recent assurances of safety in the region and the ongoing \"special election\" in Saint Columbia, a new weapon system called MJOLNIR was revealed, fully operational, in the Saint Columbia Fleet Base's \"Iserlohn\" weapons platform. Said to be a bluespace-lensed laser array capable of faster-than-light strikes against any ship in the system, as well as surgical strikes against ground forces on Saint Columbia proper, MJOLNIR is the first in a new generation of defense systems improving on the capabilities of the Vulture's Claw point defenses developed during the Hegemony War and using laser technology purchased from Eutopia. Political commentators supporting Saint Columbia decry the move as \"an obvious threat\", as does Militia liaison Invalid String Please Try Again. Admiral McMullen acknowledges the criticism, but states that his \"first priority must be the defense of the Golden Crescent and the security of our borders\". When responding to claims that the installation should not be placed in such a politically volatile system, he remarked, \"until the Shelficans figure out a way to teleport about a million tons worth of military equipment down to Gavel, the Fleet Base and Iserlohn are going to stay in Saint Columbia.\"" - -/datum/lore/codex/page/article25 - name = "11/23/62 - BP Sabotage of Radiance Energy Chain Foiled" - data = "Decisive action by military forces in the Vir system has prevented potentially catastrophic damage to local solar power generation network, the Radiance Energy Chain, by members of mercurial terrorist organization Boiling Point. Crew of the VGA Halfdane responded to reports of a drone piloted maintenance craft refusing commands from government operators and approaching the Energy Chain off-schedule. Upon disabling the craft, VDF forces discovered high-yield explosive devices attached to the unit and a system-wide shutdown of Radiance maintenance craft. When several additional drones failed to respond, military response crafts were mobilized and seven similarly modified craft were manually disabled or destroyed. Analysis of the hijacked systems quickly revealed automated messages intended to be broadcast moments before detonation, wherein Boiling Point explicitly took credit for the foiled attack.\ -

                    \ - Sources within the Vir Governmental Authority have reported that a full scale recall of remote drone craft under their operation has been initiated in order to improve security measures and prevent future exploitation of government systems, statements that eerily echo those of Occulum Broadcast following emergent drone attacks earlier this year. Investigations are reportedly \"well underway\" to determine the whereabouts of those responsible for the apparent manual modification of these short-range remote craft.\ -

                    \ - Erkki Laukkanen, Chief of Fleet Staff for the Sif Defense Force has commended all patrol crews involved, and has promised \"swift retribution\" for the attempted bombings." -/datum/lore/codex/page/article26 - name = "11/24/62 - Boiling Point Stronghold Seized in Vir" - data = "Combined forces from the SCG Fleet and Almach Militia have today struck a powerful blow to Boiling Point terrorist operations in the Vir system. With close cooperation from the crew of NanoTrasen facilities in the region, special forces were able to infiltrate what is believed to have been a major stronghold for the radical Mercurial group, located deep in the remote Ullran Expanse region of Sif. The raid closely follows the thwarted Boiling Point attack on the Radiance Energy Chain, a major energy collection array in the system which is now known to have been masterminded from the concealed bunker complex on Sif.\ -

                    \ - According to a crewmember of the NLS Southern Cross - a logistical station in Sif orbit - NanoTrasen employees were asked to assist in establishing a forward operating base for the strike team forces, and as a result suffered from a minor retaliatory attack from Boiling Point drones, including a mechanized unit believed to be of Unathi origin. Six civilians suffered from treatable injuries. Lieutenant Miro Ivanou of the SCG Fleet and commander of the anti-terror operation has expressed gratitude to the crew under the \"decisive\" guidance of on-shift facility overseer, Ricardo LaCroix.\ -

                    \ - Military officials have reported the operation as a total success, and that \"several\" high-ranking Boiling Point organizers were killed in the raid, and that thanks to the work of allied intelligence operation teams much of Boiling Point's captured data may remain intact." -/datum/lore/codex/category/article27 - name = "11/26/62 - Valentine's Ultimatum: All Eyes On Almach!" - data = "The Almach Association must adhere to the Five Points of Human Sanctity by the 14th of February next year or face war, according to a national address from the Colonial Assembly delivered by Secretary-General Mackenzie West this morning. The Icarus Front leader was at the forefront of a resolution to allow the secessionist government to remain independent of the Solar Confederate Government under the strict condition of faithfulness to Five Points laws, passing by a wide margin. Fundamental disagreement over Five Points regulation has been at the forefront of debate with the Almach provisional government, and is cited as one of the primary reasons for the systems' illegal declaration of independence early this year.\ -

                    \ - The internationally broadcast speech began with the much anticipated announcement that the Boiling Point terrorist group had been effectively destroyed, with over seven hundred arrests made over the course of the weekend as a result of sensitive data captured during the special forces raid in Vir on the 24th, including numerous high ranking members of the organization. West went on to praise forces involved in the months-long counter-terror operation, before highlighting the \"legacy of \[human\] togetherness\" that allowed it to happen - in a spiel that commentators suggest \"betrays the true intention of the Valentine's Ultimatum: Reunification\".\ -

                    \ - Under guidelines placed into effect by West and their political allies, Almach would be required to \"\[cease\] illegal research and human modification, and destroy all materials related to existing research\" by the stated date, with compliance determined by Solar officials. In addition, the Almach Militia is to end its integration with SCG Fleet forces and withdraw its forces from SCG systems by midnight on Friday. Military relations between the Confederation and the Almach movement are to remain in a state of conditional ceasefire for the duration of the ultimatum, and current trade restrictions are to remain in place.\ -

                    \ - According to voting records, the measure passed nigh-unanimously, with Speaker ISA-5 and some SEO iconoclasts abstaining from the vote. ISA-5 states that, while they personally support the enforcement of the Five Points, they could not in good conscience vote in an action likely to result in an invasion of Shelf, which they regard as a sibling colony to their own Sophia. Association liason, Shelfican Ambassador, and Morpheus board member No Comment responded to the ultimatum, after some deliberation, with a word that cannot be comfortably written down.\ -

                    \ - Full speech transcript follows." - children = list( - /datum/lore/codex/page/valult - ) - -/datum/lore/codex/page/valult - name = "The Valentine's Ultimatum" - data = "\[West shuffles some papers and clears their throat\]\ -

                    \ - Thank you. Citizens of the Solar Confederation, allies, and beyond... It is a great honor, on behalf of the Colonial Assembly to announce that joint operations against Boiling Point across the galaxy have come to an end. In the fight against brazen Mercurial terrorism, the Solar Confederate Government and her allies have prevailed.\ -

                    \ - Over the past two days alone, I can report that over seven hundred arrests have been made, from the distant system of Nyx, to right here in Sol. I hold in my hand a list. \[West holds up a sheet of paper\] Leaders, organizers, brutes and bombers have been captured by brave, hardworking security forces throughout human space. The rest of these criminals have been scattered to the wind... But not lost! I can confidently assert that every last one will be brought to justice.\ -

                    \ - No more! Shall the people of this great nation have to fear the machinations of radicals! No more! Shall these twisted minds impose their perversion of humanity through violence! No more!\ -

                    \ - This Assembly... Nay, this nation expresses its thanks the noble members of our military who joined together to make this outcome possible. We thank the Fleet, of course for their tireless action hunting down these killers, and their heroic action over this past weekend. We thank the Sif Defense Force, without whom we could never have located the intelligence that led to these decisive victories... The Almach Militia, for their cooperation in the apprehension of these so-called \"revolutionaries\". \[West clears their throat\] And of course, we thank the local forces - the police and reserves who dealt firsthand with the chaos sewn by Boiling Point in their vicious crusade.\ -

                    \ - \[Mackenzie West shifts at the podium, setting down the List of Dissidents.\]\ -

                    \ - It is in times of relief - of unity, times like this moment - that every human heart can be filled with pride. \[West places their hand over their heart\] Since the dawn of civilization, mankind has strived above all else for peace, for the cooperation of all humanity. It is this very legacy of togetherness that has allowed us such close friendship with species further afield - the Skrell, the Tajara, and beyond. These past nine months, we have seen, each of us, with our own two eyes what mankind can achieve - together.\ -

                    \ - \[West removes their hand from their heart and places both flat on the podium.\]\ -

                    \ - Boiling Point sought to disrupt this unity. To divide us; redefine not just personhood but the very essence of humanity the only way they could: Force.\ -

                    \ - Humanity - the very thing that brought us together since we descended from the trees and brought us to this very moment. What could be more sacred?\ -

                    \ - \[West frowns, in the most pitiful attempt at emotion seen in the Assembly in at least an hour.\]\ -

                    \ - It is with this spirit of unity in mind that this Assembly has voted favorably upon a resolution.\ -

                    \ - Close to one hour ago, Naomi Harper and the leaders of the Almach Association were delivered an ultimatum:\ -
                    \ - The Almach Association will be allowed to exist as a government entity independent of the Solar Confederate Government going forward on one condition - full, unilateral compliance with the Five Points of Human Sanctity.\ -

                    \ - The deadline for this condition will be the 14th of February, 2563.\ -

                    \ - \[West is visibly worked up\]\ -

                    \ - Cessation of illegal research and modification, and the total destruction of materials related to existing research in its entirety must be completed by this date. Hostilities with the Association will remain in a state of conditional ceasefire until terms are met and Militia integration with the Fleet will come to an end effective immediately.\ - \[Mackenzie West turns directly to the news camera, and jabs a finger directly at it. They are addressing the audience now, not the Assembly.\]\ - Harper, all eyes are on you." - - - -/datum/lore/codex/page/article28 - name = "11/28/62 - \"Valentines Ultimatum\" Prompts Saint C. Secession" - data = "Just hours after reconnecting with the Exonet after voting in a new government, the colony of Saint Columbia has unilaterally seceded from SolGov and petitioned for inclusion within the Almach Association. This declaration, issued by First Secretary Luissa Tassis, is in stark contrast to pre-election promises of continued support of Sol. Admiral McMullen of the Saint Columbia Garrison remains in control of the Fleet Base, itself a large colony housing around 75000 civilian contractors and military families who were not party to the Barrueco Referendum or the new constitution.\ -

                    \ - Efforts to ensure electoral validity and a peaceful exchange of power have been stymied by the presence of several dozen Militia vessels currently transiting from the Crescent to the Rim. Since the declaration went through, no Almachi vessels have been seen leaving the system, instead forming around Saint Columbia in an obvious defensive posture. The legality of this formation is questionable at best, as fleet activity in divided systems like Abel's Rest and Kauq'xum has been avoided for diplomatic reasons." - -/datum/lore/codex/page/article29 - name = "11/30/62 - Adm. McMullen Declares \"Iserlohn Republic\"" - data = "Pursuant to the continuing hostility from Secretary Tassis' Saint Columbia Democratic Union and the Almach Militia, the civilians of the Saint Columbia Fleet Base have been organized into an Iserlohn Republic. Named after the largest single module of the station, the Republic has applied to the Colonial Assembly as an independent protectorate, with provisional recognition already extended by Executive of Development Zehava Collins. In a move decried as nepotistic, Admiral McMullen declared independence and installed his daughter Anya as interim President pending ratification of a constitution. SolGov Fleet protocol forbids any member of the service from accepting any political appointment and is believed to be the main reason he did not take power himself. Anya McMullen is the administrative head of the base's hydroponics array and is considered a highly respected citizen of the colony, relationship to its military administrator notwithstanding." - -/datum/lore/codex/page/article30 - name = "01/01/63 - Sif Governor Bjorn Arielsson to Retire" - data = "Aging Shadow Coalition governor Bjorn Arielsson has today confirmed rumours that he will not run for re-election in the 2563 cycle. The popular governor has represented the people of Vir in the Colonial Assembly for ten years, and supporters had long hoped that he would run for a third term. Arielsson cites advancing age and a desire to spend more time with his partner of 12 years, noted Positronic entrepreneur View Arielsson.\ -

                    \ - Arielsson's governorship saw increased funding towards Sif's vererable ground-based transportation networks to the benefit of some of New Rekjavik's more remote neighbors, though opponents have criticised subsidies towards artificially heated fungal farms, arguing that the faciliies \"benefit a small minority of Skrellian residents to the detriment of already fragile local ecosystems.\"\ -

                    \ - The Sivian Shadow Coalition has yet to announce who is to take Arielsson's place on this year's ballot." - -/datum/lore/codex/category/article31 - name = "01/13/63 - Bjorn Arielsson Issues 'Farewell Address'" - data = "Veteran politician Bjorn Arielsson made an impromptu address from his Kalmar cabin, beseeching political unity in the face of the Almach Seccession and offering his own perspective on the conflict. 'It's republicanism versus autocracy,' he said, 'and we're not the autocracy.'\ -

                    \ - The speech has been met with approval from many young synthetics and organics alike, with many referring to Arielsson as 'Old Man Bjorn' on social media immediately after its conclusions. Others responded less positively, with Arielsson's caustic remarks about political rival and Icarus Front Secretary-General Mackenzie West providing ample room for criticism. 'Secretary-General West... might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that' says Arielsson in the first of three specific insults against the SecGen.\ -

                    \ - Others have criticized the speech's seemingly communist tone, with Arielsson expressing approval for the socialist Free Relan Federation and the anarchist Casini's Reach despite opposing their secessionist ideals. Still others claim that the speech offered 'nothing but empty feelings' and that it lacked specific, actionable resolutions on the growing secessionist movement in VirGov. Some have even framed the Address as a form of political maneuvering by the venerable politician, claiming that he voiced unpopular sentiments specifically to hamper the Shadow Coalition's re-election bid after well-publicized disagreements with SC party bosses.\ -

                    \ - The actions of Arielsson and Vir's proximity to the border have lead to increased focus on the upcoming Gubernatorial election on a nationwide level, with the Icarus Front alone projected to spend upwards of a billion thalers on publicity. Minor party candidates like the former MLM member Luisa Hannirsdottir and the Mercurial Phaedrus already have strong support in the polls, promising a fierce election that could ultimately tip power in the system in any direction.\ -

                    \ - A full excerpt is available below." - children = list( - /datum/lore/codex/page/bjornretirement - ) - -/datum/lore/codex/page/bjornretirement - name = "Bjorn Arielsson Farewell Address" - data = "This is, as you know, my last term in office. After this, I mean to retire-- really retire, I have a cabin in the mountains waiting for me along with a thick stack of old Bowler novels. Because this is my last term, I have the chance to do something pretty rare for a politician. I get to speak my mind.\ -

                    \ - I hear talk from some people-- mostly young people, people who have lived their whole adult life with me in the capital-- I hear them talking about seccession. Now, let's make it clear; I'm not going to belittle you, the way some of my colleagues would. Complaining about the government, especially one as big and as old as the Confederacy, is our gods-given right. It's never going to be perfect, and it's not half of what it could be. I have nothing against talking about it, I have nothing against turning that talk into action and actually seceding, with just cause. I've worked closely with Representative Hannirsdottir for ten years now, and while we don't agree on the issue of secession it's certainly never stopped us from cooperating.\ -

                    \ - But, uh, as you can probably guess, they're not talking about the old kind of seccession. They're not thinking we'll stop paying Solar taxes and strike it out alone, the way some people did during the Age of Seccession. They want to join the Association. Now, if I were Secretary-General West, I might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that, if you'll pardon my language. We're not all humans here. We're Tajaran and Unathi and Skrell and Positronics and even a few Teshari. And while that 'Valentines Ultimatum' might win West a lot of points with their lackies, and with the kind of maintenance-dome troglodyte who thinks the First Accord was a mistake, it's done more for the Association's recruitment than their entire propaganda budget. It's become expedient for leaders on both sides to treat this like a fight between the Core and the Rim, or between humans and positronics, or between tradition and progressivism, but it's not any of these. It's the oldest fight in the book. It's republicanism versus autocracy, and we're not the autocracy.\ -

                    \ - Angessa's Pearl is a theocratic autocracy led by Angessa Martei, who owns all property on the planet down to her people's bland white jumpsuits and the gray slop they eat. This isn't propaganda. This is objective fact, and something Martei is open about. Her seccession is a means for her to get more and more naked power over her slaves, and to grow more and more of them, until she's the immortal center of an industrial empire. The people of the Pearl didn't make the choice to join the Association. The people that are building her fleet and dying for her cause had no say in the matter. The injustice, the oppression here isn't that their rights to 'self-improvement' or 'self-expression' or 'freedom of thought' were trod on-- the injustice is that SolGov, that we allowed these abuses to persist for as long as they did. The injustice is that there are still so few laws in place to prevent things like this from happening in new colonies. The injustice is that, on seeing Martei's schemes actualized, we didn't take a cold, hard look at just how that was allowed to happen.\ -

                    \ - I love SolGov. It's because of this love that I'm so furious at what we have allowed to happen to our people. The state of the Bowl is disgraceful. Nobody who looks to us for protection, who pays us taxes and levies, who is a member of our community, should live in fear of raider attacks. What we did to the positronics, the history we let ourselves repeat out of fear and greed, can never be forgiven, can never be repaired until Vir burns dark in our sky. The pogroms-- yes, the pogroms-- against the Unathi, against refugees fleeing their own religious autocracy, are a disgrace to everything we stand for. But of all the nations in the galaxy, with perhaps the exception of Casini's Reach, we are the only one founded for the good of the ruled, rather than the rulers. We are the only real commonwealth in known space. And that's why we need to strive for better. We are a burning beacon of liberty in a galaxy where nigh eighty percent of the population has no voice in the government. Every ounce of power we cede to the party bosses, or the corporations, or tinpot dictators like Angessa Martei, is a dimming, a flickering of that torch. \ -

                    \ - And this brings us back to the Association, and to those who sympathize with it. I do, too. I spent my entire career on sapient rights lobbying, on supporting the anti-malfesance efforts of my colleagues. For a disaffected positronic, for any friend to the positronic people, for those who have had their lives taken by corporations-- the Association seems like a miracle. And maybe, for those Mercurials, the ideas it's founded upon shine even brighter than our democracy. But I look at the Association, really look, and I see Angessa Martei lying in the center, spinning a great big web. I see Naomi Harper, lying through her teeth better than Mackenzie West ever could. Two of the biggest population bases in the Association, the two nations that started the whole Gray Hour, are autocracies. Once again, the ferver of the revolution is subsumed by the oligarchs who want to stay in power. I doubt, to the poor laborer on the Pearl, the word 'Mecurialism' means much. I doubt that once the shock of the seccession wears off, that the young Promethean soldier will find themselves in a better place in Harper's junta than they will here in Vir.\ I doubt that in ten years' time the miners, pioneers, and traders who seized their means of production will find the Association Militia a kinder master than Xion, Nanotrasen, or Major Bill's. \ -

                    \ - This is far from a blanket condemnation of every government in the Association. President Fisher of the FRF-- I consider her a friend. When she gave her speech this March about strengthening and guiding the Almachi Revolution, I thought long and hard about whether we might do the same. I certainly commend the effort. But the structure of the Association was penned by the same autocrats that, to do her words justice, Fisher will have to overthrow. There's no High Court, no checks or balances. The Association is an alliance penned as though deliberately ignoring two thousand years of political science. By striving to counter-balance these autocrats, Fisher plays into their hands. She commits her own fleet, weakens her own defenses against enemies closer to home, in the service of Martei's ambitions. \ -

                    \ - I don't see this whole affair as a chance to spread the galactic anti-corporate revolution the way President Fisher does, of course. I make no secret of my stance on Trans-Stellars, but I also know that we're better off with Sol than without. The 'Silent Collapse' was two hundred years ago, but we still bear the scars from it. When the Scandinavian Union pulled out support for the Sivian colonization project, SolGov saved us. I do mean saved us, sure as if they'd fished us out of a life pod. There were no factories, no steel, no concrete on Sif until the Engineering Corps built Radiance and New Reykjavik. Corporations and regional governments cowered from the Karan pirates, until the Marines chased them out. Whether Sivian or Karan, you owe the roof over your head to the Sol Confederate Government. With that great debt in mind, how dare we turn our backs on the Bowl, or Abel's Rest, or Nyx, when they need us! How dare we let oligarchs prey on the weak! How dare we choose not to act when we have, by virtue of our votes in the Assembly and our voice within the halls of public debate, the means to share our peace and prosperity with the rest of our people!\ -

                    \ - This is what I mean by SolGov being the only true republic, the only state founded for the common good. The 'human spirit' West croons on about isn't our industriousness, or our skill at arms. If humanity-- if this Solar culture is commendable for anything, it is that we assist our fellows. We take in Casteless Skrell, Unbound Unathi, republican Tajaran. We pass around the hat when someone's house burns down. We help our friends, our neighbors, and even strangers. The fact that Martei and Harper are perverting this impulse, padding their juntas with the air of legitimacy to inspire honest people to ride to their defense, is the reason their state is unconscionable, the reason it was was born flawed, the reason we cannot suffer it to continue, much less help it on its way.\ -

                    \ - Now, I'm sure you've noticed by now, that I haven't said much more than three words about technoprogressivism, or transtech, or whatever the word du jour is. Frankly, that's on purpose. 'Transtech' has never once been about technology. The Icarus Front-- the old one, that united us and took us to the stars, not the new one we spend forty hours a week arguing with about healthcare-- The Icarus Front was a popular revolution, you know. Hel, they were Marxists. It was a world where the kind of lack of accountability, the entrenched oligarchy and geographical class divide that we're dealing with now was spiraling out of control. In the old United States, the rich and powerful got the technology to grow loyal subjects in tubes, to make drone intelligences smarter in some ways than a human could ever be, to-- well, to do what Angessa Martei's done, only with no SolGov to stop her. Meanwhile, the 'little people' in the Middle East, Southeast Asia, and other 'forgotten' parts of the world were left behind, hopelessly. I don't mean to downplay the importance of the Gray Tide, but if you look at historical accounts from that era, the thing that really united the Front was the knowledge that, if they didn't act immediately, they'd be seen as 'externalities' by immortal superintelligent businesspeople and politicians. The take-away from the Gray Tide should never have been that 'nanotechnology is dangerous'-- it should have been 'nobody should be able to destroy an entire city without facing consequences.'\ -

                    \ - That was more of a history lesson than I had meant, but it's important to look at these sorts of things in context. I know transtech and the Five Points have been used as an excuse for pejudice against Skrell, Mercurials, positronics, the FTU, communism, the disabled, and most recently Prometheans. But all the Five Points are supposed to mean - what they would say if the people who had written them were alive today, is that everyone deserves an equal playing field. When the ruling class is smarter, stronger, and longer lived than the classes they rule over-- well, I could wax poetic again, or I could just point you towards the Hegemony and their 'clients'. The Hegemony is bad enough. Let's not give Angessa Martei a chance to outdo them." - -/datum/lore/codex/page/article32 - name = "01/25/63 - Moravec Nephew Announces Vir Governor Candidacy" - data = "The Sol Economic Organization has announced that Calvert Moravec, nephew of NanoTrasen CEO Albary Moravec will be running under their ticket in the upcoming Vir gubernatorial elections. Calvert has stated that he will run on a pro-business platform, and has chosen Vir to do so due to the 'Unique beauty and economic prospects of an interstellar crossroads such as Vir'.\ -

                    \ - Despite being a lifelong resident of Alpha Centauri, Moravec was recently approved for Vir citizenship, making him eligible for local candidacy and has reportedly moved into a luxurious New Reykjavik penthouse. Perhaps best known for his soaring stock market investment success over the previous few years, Calvert's first foray into politics is not wholly unexpected as the Moravec family has long leveraged their wealth in international affairs, though successful election would mark their first sitting member of the Colonial Assembly. Fellow SEO candidate Councillor Hal Wekstrom has expressed his full support for Moravec.\ -

                    \ - Three candidates will be elected as representatives to the Colonial Assembly later this year, with the most popular also attaining the position of system governor." - -/datum/lore/codex/page/article33 - name = "01/27/63 - Vani Jee Orbital Tour Cut Short" - data = "Icarus Front Representative Candidate Vani Jee has delayed the remainder of her campaign tour of orbital colonies and outposts around the Vir system after an alleged altercation with NanoTrasen security.\ - Candidate Jee had been visiting the NLS Southern Cross, a NanoTrasen station in Sif orbit to receive a corporate tour and meet with voters, when her concluding question and answer session was interrupted by hecklers, leading to the event being cut short. Jee alleges that footage of the event was seized by NanoTrasen corporate security and has accused the trans-stellar corporation of the intentional intimidation of Icarus Front and Shadow Coalition candidates in what she describes as 'a clear display of corruption in favour of company-favourite Calvert Moravec', though she has praised the individual employees of the Cross for their hospitality and thought-provoking questions.\ -

                    \ - Vani Jee is running on a platform of free access to education, Sivian self-determination, and isolationist foreign policy. She has refused to make any strong statements regarding hot-button issues such as the Five Points.\ -

                    \ - She intends to resume her scheduled tour after a three day break." - -/datum/lore/codex/page/article34 - name = "02/05/63 - Angessa Martei to Take Control of Eponymous Colony" - data = "Coming out of retirement and displacing the nameless Exalt of the Starlit Path, religious demagogue Angessa Martei has returned to the throne of the colony that bears her name. \ -

                    \ - 'I had retired because of senescence brought on by my old age, high-stress lifestyle, and multiple resurrective clonings. As you may know, I recently had a procedure that renders these difficulties obsolete. Hereafter I will continue to control the automated facilities of the Pearl and claim responsibility for the collective action of my followers. Those who oppose my decision may oppose all they want. Feelings do not move mountains. I do. We shall seize the stars in our own hands. May you become who you wish to be, and grind all obstacles to dust, as I have done.'\ -

                    \ - Purportedly, this address was met with a standing ovation from the population of Angessa's Pearl. In a separate dispatch, Martei stated her intention to tour SolGov as a foreign dignitary protected by the Respect for Diplomats Act." - -/datum/lore/codex/page/article35 - name = "02/07/63 - Vir Gubernatorial Candidate Barred from Breakfast TV" - data = "Infamously hot-headed Shadow Coalition candidate Phaedrus has reportedly been blacklisted from future appearances on morning television by several major networks. The ban comes after an advertised chat segment between Phaedrus and hosts of the West Sif Wakeup breakfast programme had to be pulled from broadcast after the candidate 'Flew into a expletive-laden mercurial rant' at the expense of rival candidate Mehmet Sao of the Icarus Front.\ -

                    \ - Recordings of the outburst quickly made their way onto social media, sparking outrage from opponents and network executives alike, prompting Occulum Media to issue a rare blacklist from major media outlets, restricting Phaedrus to 'appearances on alternative news sources' owned by the company.\ -

                    \ - Phaedrus, a long-time Vir Mercurial Progress Party member running for a major party for the first time, is said to have taken issue with candidate Sao's 'Blatant anti-synthetic' policies, though he did not use the word 'policies'." - -/datum/lore/codex/page/article36 - name = "02/09/63 - SEO Candidate Embarks on Wilderness Tour" - data = "In an effort to stir up support for his promotion of natural resource extraction industries, Sol Economic Organization candidate Mason Keldow has embarked on an unorthodox tour of resource-rich sites across central Sif. Keldow has described the tour as an 'Old fashioned expedition', invoking images of hardy prospectors of centuries past, and intends to make the journey entirely by ground with only a small party of 'Adventurous outdoorspeople' to support his trek.\ -

                    \ - Critics of the plan have pointed out that the earliest surveys of Sif were largely performed by aerial drones, and the idea of ground-based survey teams is 'Frankly anachronistic'. Rival Shadow Coalition candidate Selma Jorg - a staunch planetary environmentalist - has described the tour as 'Irresponsible and insane'.\ -

                    \ - The candidate intends to visit both unexploited sites and current corporate extraction facilities in order to 'Better understand the folks helping dig out Sif's hidden wealth' over the coming two weeks." - -/datum/lore/codex/page/article37 - name = "02/09/63 - Zaddat Colony 'Bright' To Enter Vir" - data = "After several months of talks with Nanotrasen and other corporations in the system, the Colony Bright is to begin orbiting Sif and hardsuited Zaddat are to enter the Virite workforce. Executives in Nanotrasen Vir cite the reduction of their drone-automated and positronic workforce as a result of the Gray Hour as cause for them to reverse their previous decision against allowing the migrants into the system. Icarus officials within VGA are concerned that, if other Colonies are to follow the Bright, the native industry of Sif may be disrupted or suborned by Zaddat and Hegemony interests, and have made it clear that the Bright's presence in the system is highly conditional." - -/datum/lore/codex/category/article38 - name = "02/11/63 - Mason Keldow in Ullran Expanse Close Call" - data = "Sol Economic Organization candidate Mason Keldow was rushed to nearby corporate medical facilities after a death-defying encounter with local wildlife in the Ullran Expanse this morning. The candidate had been planning to visit the nearby NanoTrasen mining facilities as part of his much publicized 'Wilderness Tour' when he and a local guide were set upon by the notoriously savage Sivian Savik. The animal was killed in the encounter, but not before Mr. Keldow suffered life-threatening injuries and had to be recovered by crew from the NLS Southern Cross, the closest facility on hand.\ -

                    \ - Following emergency surgery, Keldow was happy to provide news sources with a 'Good-natured' interview, in which he highlighted the dangers faced by rural workers on Sif and his plans to tackle them, as well as slamming rival Shadow Coalition candidate Selma Jorg for lacking tangible plans for the future.\ -

                    \ - Candidate Keldow is reported to have made a miraculous recovery, and is 'in good spirits'. Aides state that he is unlikely to suffer any long term effects from the injuries, in part thanks for the skilful work of NanoTrasen's Dr. Fuerte.\ -

                    \ - A full transcript of the interview follows:" - children = list( - /datum/lore/codex/page/keldowinterview - ) - -/datum/lore/codex/page/keldowinterview - name = "Mason Keldow Interview Transcript" - data = "Blip asks, 'Subject Keldow. Pleasantries first. How do you feel after your ordeal on the planet's surface?'\ -

                    \ - Mason Keldow says, 'Ah that? You know I'd love to downplay it and pretend that it was just a walk in the park... But NT's medical staff probably will tell you otherwise, so there's no reason to hide it; things went pretty far south.'\ -

                    \ - Mason Keldow says, 'But that's how it goes, working on the surface of Sif isn't pleasant at times.'\ -

                    \ - Blip asks, 'Candidate Keldow, you have placed yourself quite firmly in the boots of the local TSC's explorer contingents today. Do you feel you will be attempting to live the life of any other labour intensive roles in the near future?'\ -

                    \ - Mason Keldow says, 'Blip, Let me tell you I do try to get a taste for a lot of the work done by these people... But admittedly this isn't the job I do every day. These are hard working fellows who do there damnedest day in and day out... I could try spending a week just working the mines, But-'\ -

                    \ - Mason Keldow says, 'As I was saying.. Many of the folks, Miners, Explorers, The work in and around the Ullran Expanse. They work in the mountains, Out in the fields.. It's a dangerous place and frankly its not a place average people wanna go too.'\ -

                    \ - Mason Keldow says, 'They told me on the way here. 'Keldow you're an idiot''\ -

                    \ - Mason Keldow says, 'Hell, Even Basman over here was wondering why I didn't ask for a detail.'\ -

                    \ - Mason Keldow says, 'So it's not a safe route... But when's the last time any of the other candidates actually came down to these outer stretches and tried earning their sweat.'\ -

                    \ - Blip asks, 'You indeed seem to be attempting to gain a unique, and firm understanding of the daily struggles of the working populace. How do you intend to translate this newfound knowledge into policy and direction if you take the Governorship in Vir?'\ -

                    \ - Mason Keldow says, 'You see, getting a grasp of the struggle is only step one, I paint myself as an every-man but that doesn't mean core issues aren't the problem either; Vir's economics, The small pay that sometimes offered. There is a lot to be tapped into.'\ -

                    \ - Mason Keldow says, 'Let's take for instance the spiders I've been hearing about.'\ -

                    \ - Mason Keldow says, 'People working in orbit say 'Don't go to the surface, Spiders are down there.''\ -

                    \ - Mason Keldow says, 'And apparently there was a big ol' purple one sitting right by a camp we had set up. A giant mother who'd - if I hadn't met that lovely mass of fur and ice instead - would have probably said its 'hello' in the worst possible way.'\ -

                    \ - Mason Keldow says, 'They are a species that prevents anyone from actually working or otherwise making use of all that land. If I were in office, I'd make an effort to clear out the dangerous species that surround the outer regions of Sif - relocate them if possible - and use that territory for something productive.'\ -

                    \ - Mason Keldow says, 'New forms of Transit, new buildings, new jobs.'\ -

                    \ - Blip asks, 'Such implementation of infrastructure and security is not a cheap measure. How do you intend to find funds for such an endeavour?'\ -

                    \ - Mason Keldow says, 'Now obviously Vir is in a very interesting position, But thankfully it's in a wonderful position where business and partnerships are more than happy to come in and assist. The bottom line would make sure the average Taxpayer doesn't feel a dent, only the dividends.'\ -

                    \ - Mason Keldow says, 'If we break this down into economic plans, using new yet relatively safe tools being put out by Hepheastus, you could safely clear swaths of territory in the Expanse.'\ -

                    \ - Blip says, 'Thank you for your insight into your economic policies and plans. As a final question;'\ -

                    \ - Blip asks, 'A puff-piece question. Do you have anything positive to say about your rivals in the political race?'\ -

                    \ - Mason Keldow says, 'Ah yes, yes well... As for any candidate they need to show they're worth. Not simply as a politician but as a person who believes what they will do for for the betterment of Sif, And Vir as a whole.'\ -

                    \ - Mason Keldow says, 'Let's take a look Ms. Jorg.'\ -

                    \ - Mason Keldow says, 'She has LONG called me a Corporate sell-out, Saying I would poison the planet and other awful mudslinging.'\ -

                    \ - Mason Keldow says, 'She loves to claim she's here for the better of the misrepresented.'\ -

                    \ - Mason Keldow says, 'But when is the last time she's talked to a Tajaran and told them how they will help put food on the table, and money into their pockets.'\ -

                    \ - Mason Keldow says, 'When has she came and told the Unathi Exile, Your worth more than what the Hegemony is trying to convince you you're worth.'\ -

                    \ - Mason Keldow says, 'There's blood in the grass out there showing what I'm willing to do to make Sif and Vir a better more prosperous system. I wanna see what the other Candidates will do.'\ -

                    \ - Blip pings!\ -

                    \ - Blip says, 'Thank you for your time, Candidate Keldow. Unit looks forward to seeing where this race ends, and wishes Candidate the best of luck in his endeavours.'\ -

                    \ - Mason Keldow says, 'It's been a pleasure Blip.'" - -/datum/lore/codex/page/article39 - name = "02/12/63 - VirGov Launches Election Website" - data = "The Vir Governmental Authority has launched this year's election information exonet site, unusually several months after campaigning began. The government election agency states that the delay was caused by an usually long process of finalizing candidates this cycle, and did not want to confuse voters with incorrect or outdated information.\ -

                    \ - The newly updated site includes information on candidates and political parties, and is planned to include information on local voting rights at a future date. It can be found at:\ -

                    \ - your-choice-vir.virgov.xo.vr\ -

                    \ - (( https://your-choice-vir.weebly.com/ ))" - -/datum/lore/codex/page/article40 - name = "02/14/63 - Ultimatum Unmet: War With Almach!" - data = "The Solar Confederate Government has resumed a state of war against the secessionist Almach Association, after 4 months of tense ceasefire. The re-declaration comes after the Association failed to meet requirements set forth by the Colonial Assembly last November, which called for the cessation and destruction of all research that did not meet standards established by the Five Points of Human Sanctity.\ -

                    \ - The past few weeks have been marked by an increasing buildup of military forces on the Almach border as it became apparent that Almach had no intention of meeting Sol's demands. At 9am this morning, the deadline was met and initial reports from the frontline suggest relatively little action besides the destruction of pre-existing Almach scout drones that had been placed on the border several months prior. The exact plans of the fleet going forward have not been made public, but civilian traffic to and from the Saint Columbia system has been entirely suspended.\ -

                    \ - How this development will influence the coming Vir election remains to be seen, though SEO candidate Mason Keldow has reportedly ended his planetary tour 10 days earlier than planned due to the tense political situation." - -/datum/lore/codex/page/article41 - name = "02/22/63 - Militia Retreats: First Solar Victory" - data = "After a week of tense stand-offs and increasingly frequent skirmishes, the Association Militia has begun moving from their position around Saint Columbia further into the Almach Rim. The inciting incident for this shift seems to have been the first use of the MJOLNIR system, which instantly destroyed a large Almachi warship from half a system away. This demonstration was met with a standing ovation from much of Iserlohn, and Militia forces disengaged almost immediately. Admiral McMullen is unwilling to elaborate on pursuit or invasion plans at this moment, but 'hope(s) the MJOLNIR will continue to be a valuable asset for national defense.'" - -/datum/lore/codex/page/article42 - name = "03/04/63 - Savik Slams Local Chat Host" - data = "Television sweetheart Sally, host of Chat With Sally has come under harsh criticism from independent Vir gubernatorial candidate Yole Savik after his 'humiliating' appearance on the show yesterday morning alongside Sol Economic Organization candidate Calvert Moravec. Savik - who is campaigning for Vir independence from both the SCG and corporate interests - alleges that the show, which has run for 13 years on select networks, is 'little more than a propaganda piece for high powered executives.' and that his appearance had been part of a 'smear campaign' against non-SEO candidates.\ -

                    \ - NanoTrasen, who have openly sponsored Sally since her inception deny these accusations. Jan Bhatt of the NT marketing division stated 'Chat With Sally has always been intended as light morning entertainment, and Sally a personality we can all relate to. The fact that Mr. Savik was unable to have a sense of humour about the whole thing and took the show as an opportunity to bloviate about dry politics is not an indictment of Sally, nor the corporation but rather a simple misunderstanding of the purpose of the segment. We had hoped Mr. Savik's appearance would help dismiss any claims of political bias in our programming and hope to host more civil candidates in the future.'\ -

                    \ - Catch Chat With Sally weekly at 5am SST." - -/datum/lore/codex/page/article43 - name = "03/06/63 - Dark Triangle Goes Dark!" - data = "As of 0352 this morning, New Reykjavik time, SolGov officials confirmed that all communications coming from the so-called 'Dark Triangle' had ceased. The Dark Triangle is a disputed region of space home to the independent world Natuna, which has maintained a more or less neutral relationship with SolGov for a little more than a decade.\ -

                    \ - The announcement gives no cause for the communications blackout, though sources with inside knowledge claim that it was completely unforeseen. Some speculate that Natuna, who became an 'observer nation' of the Almach Association last November, is making a political statement, though experts in the telecommunications field are uncertain as to how such a complete blackout is possible.\ -

                    \ - Dr. Ina Lai from the Kara Interstellar Observatory states, 'we've never seen anything like this outside of the (Skrellian) Far Kingdoms, and frankly we're at a loss for who might be responsible,' adding that 'the tachyon signatures from the whole region are masked, even those from stellar phenomena or normal bluespace travel.' Independent explorers from the FTU have set out to the region in an attempt to re-establish communication with Natuna and smaller human settlements nearby." - -/datum/lore/codex/page/article44 - name = "03/08/63 - Dark Triangle Overrun By Hegemony" - data = "FTU explorers have re-established exonet communications with the ruling bodies of Natuna and the Dark Triangle. Unfortunately, they also discovered that Natuna's previously autonomous townships have been subsumed into the Moghes Hegemony. \ -

                    \ - Bluespace-lensed telescopes throughout SolGov, including the Vir-based Kara Interstellar Observatory, can once again pick up on tachyon signatures in the region. Traffic has been described as 'lower than usual' and no significant fleet assets are believed to be present in the region, though fixed-placement Hegemony installations now litter the Triangle's major star systems. Systems with significant Hegemony presence include Natuna and Ukupanipo, home to the primitive Uehshad species. Some have speculated that the presence of the Uehshad is the reason for the unexpected Hegemony takeover, though Icarus Front General Secretary Mackenzie West was quick to decry the move as 'an obvious imperial land-grab.'\ -

                    \ - Hegemony diplomats on Luna and elsewhere have been quick to justify their actions. 'The Dark Triangle has been home to various criminal elements for several centuries,' says Aksere Eko Azaris, a major Hegemony diplomat since the early post-war years. 'Neither the Skrell nor the Solar Confederacy have proven any willingness to bring stability to the region. Local governments such as Natuna have actively encouraged piracy, smuggling, and other acts of banditry, instead of making any moves to legitimize themselves. This instability proved detrimental to the health and wellbeing of all living within striking distance of the pirates of Ue-Orsi, and it was deemed unfortunate, but necessary, that we step in and provide the guiding hand by which this region might be brought back into the fold of civilization, as is our duty as sapients.'\ -

                    \ - In a statement closer to home,Commander Iheraer Saelho of the Zaddat Escort Fleet has assured VirGov that 'we only took action to protect the innocents of the Dark Triangle and of neighboring systems'.He asserts that Hegemony rule will ultimately benefit all races of people within the Triangle, and promises that, 'the people of Vir, of Oasis, of the Golden Crescent writ large, have nothing to fear from our clients the Zaddat, or from the Hegemony vessels assigned to their protection.'\ -

                    \ - Only time will tell if Saelho's promised peace and stability will manifest in truth. \ -

                    \ - This newfound militancy of the Hegemony is likely to become a major campaign issue in the upcoming Vir elections, alongside involvement in the war with the Almach Association and traditionally Virite issues of corporate authority, minority-friendly infrastructure, and taxation." - -/datum/lore/codex/page/article45 - name = "03/12/63 - Ue-Orsi Escapes Hegemony Triangle" - data = "The lawless 'Ue-Orsi' flotilla, home to hundreds of thousands of outcast Skrellian pirates, has departed from the Hegemony-controlled Dark Triangle after what appears to be a brief battle with several Unathi warships. The action damaged several important Orsian ships, including their massive and venerable solar array 'Suqot-Thoo'm', a development which is likely to increase the pirates' aggression in the coming months as they search for additional power sources. It is unclear exactly where the flotilla has fled, though best guesses indicate that they are presently in Skrell space, likely near the lightly-patrolled Xe'Teq system. The Moghes Hegemony is in negotiations with several Skrellian states to arrange for military action against their escaped subjects, but little headway has been made thus far.\ -

                    \ - This revelation has added more fuel to already heated Assembly arguments about SolGov response to the Unathi takeover. 'This is a prelude to invasion, nothing more and nothing less,' says New Seoul Representative Collin So-Yung, a noted Iconoclast. 'We must make it absolutely clear to the Hegemony that this is a threat we will not bow to, even in our present state of internal weakness. I suggest we pursue a fair peace with the Association, one where we can keep them as allies against this sort of encroachment instead of shattering our fleets during such a pivotal moment.'\ -

                    \ - Others took a more nuanced approach, including VGA Governor Bjorn Arielsson. 'What we have here is our punishment for how badly we've treated the people of the Triangle. I don't really see why we should have let the tired old racism of some Qerr-Katish oligarchs stop us from offering aid to their tired and huddled masses, such as it is. And because we have had a full century of ignoring their plight, they were defenceless to resist the Hegemony. I say we fling the doors open, let (the Orsians) settle some rock here, and show the unaligned powers of the galaxy that the Hegemony's way isn't the only way.'\ -

                    \ - Even more conciliatory was Speaker ISA-5, who Arielsson blames for mistreatment of the Ue-Katish. 'Our policy has always been that our defence budget cannot adequately defend the Dark Triangle from internal piracy, that Ue-Orsi is a criminal organization using their refugee status as a shield, and that we cannot lift the blockade of Natuna until they stop hosting these criminals and transition to a more sustainable economy. If Moghes has the power and the inclination to administer the Triangle, I see no reason why this state of affairs isn't better than the alternatives.'" - -/datum/lore/codex/page/article46 - name = "03/26/63 - Almach Routed from Saint Columbia" - data = "The Saint Columbia system has been declared free of Association forces following a renewed SCG offensive in the region. Admiral McMullen of the Saint Columbia garrison - who has reportedly reclaimed his post at the system's naval base despite the facility suffering moderate damage in this week's fighting - says that the last secessionist vessels were driven from the system just over 24 hours ago, and remaining pockets of resistance have been quick to lay down their arms. At least 20 enemy vessels - mostly converted civilian ships - have been confirmed disabled or destroyed in-system, thanks in no small part to the deployment of the state-of-the-art MJOLNIR weapons system.\ -

                    \ - This more aggressive approach to the Almach front comes on the tail of aggressive Hegemony deployments in the Dark Triangle, which SolGov has conceded was 'Immediately threatening, but after some deliberation, has brought some form of policing to a lawless region.'.\ -

                    \ - Despite assurances, this recent action would appear to many to be an effort to quash the Association threat and return fleet forces to the now extended Hegemony border, and some critics of the Almach War have called for a second ceasefire 'In order to focus on the real threat to mankind.'" - -/datum/lore/codex/page/article47 - name = "04/28/63 - Representative Hainirsdottir Reaffirms Pro-Vey Medical Manifesto" - data = "Incumbent Vir Representative Lusia Hainirsdottir has restated her dedication to advanced medical research at a public appearance at a Vey Medical facility in downtown New Reykjavik. Vey Medical has come under some criticism locally in the past year due to its 'accelerated' sapient trials, which Representative Hainirsdottir has strongly endorsed in her current term of office.\ -

                    \ - In her statement to staff at the New Reykjavik facility, Lusia promised that under her governorship, the company would not be reprimanded for the deadly Holburn's Disease outbreak in rural Sif this past June which claimed fifteen lives, and in which Vey-Med's involvement was only confirmed this week - as the outbreak 'directly lead' to the development of a new life-saving inoculation which has seen success galaxy-wide.\ -

                    \ - Hainirsdottir has long advocated for the promotion of scientific achievements that have taken place in, and undertaken by the people of Vir." - -/datum/lore/codex/page/article48 - name = "05/06/63 - Isak Spar Withdraws from Vir Election" - data = "Independent gubernatorial candidate Isak Spar has withdrawn his name from the running following a 'Public Relations disaster' aboard an orbital NanoTrasen logistics facility. According to witnesses, Spar acted belligerently towards staff members and engaged in vandalism and assault with a deadly weapon during his scheduled visit to the station, which the candidate had opted to undertake alone due to the temporary illness of his campaign manager.\ -

                    \ - In a statement just hours after the alleged incident, Isak announced that he would no longer be pursuing Vir Governorship, due to 'The unexpected stresses of a political career.' before plugging his upcoming album, C*** End Savage Turbo Death A** Destruction. The NanoTrasen corporation has decided not to press charges due to Mr. Spar 'Suffering the consequences on a far more significant level than a mere fine.' but will not be inviting Spar back for future visitation.\ -

                    \ - Spar's label, Skull Wreck Music has declined to comment at this time but has agreed to pay damages to the victims on behalf of the self-described 'post-pseudo electro-death superstar'." - -/datum/lore/codex/page/article49 - name = "05/15/63 - Solar Fleet Launches Offensive Against Almach" - data = "The first vessels of an SCG Fleet invasion force arrived in the Relan system this morning after a month-long intelligence operation to establish the Almach Association's most vulnerable positions, according to an announcement by Admiral McMullen just hours ago. Relan, which has long been fragmented between the neutral Republic of Taron and the once insurrectory Free Relan Federation - who now control the majority of the system and declared allegiance with Almach early in the crisis - is expected to fall to Confederate forces within 'a matter of weeks' due to its fractious political situation, and relative insignificance to Almach interests.\ -

                    \ - According to McMullen, the system's most populous habitat, the Carter Interstellar Spaceport is already under blockade and local resistance has thus far been minimal. The capture of Relan is expected to provide our forces with a major foothold in Almach territory and further advances are expected to be 'trivial', bypassing the Association's defensive positions in Angessa's Pearl.\ -

                    \ - The offensive comes weeks after sizable portions of the Fleet were publicly withdrawn from the frontline in order to reinforce the extended border with the Hegemony following their annexation of the Dark Triangle, and is a clear sign that - despite reduced numbers - Fleet command remains confident of Solar victory against the Mercurial rogue state." - -/datum/lore/codex/page/article50 - name = "05/19/63 - 'Drone Operated' Shelfican Ships Storm Sol Siege" - data = "Blockading Solar vessels in the Relan system came under fire today from automated craft originating from the Shelf fleet. The flotilla of drones, described by one survivor as a 'swarm', launched electromagnetic pulse and so-called 'hatch buster' precision missiles against three SCG Defense vessels, inflicting systems damage, and casualties 'in the hundreds' with at least eight service people already confirmed killed in action. The drones are reported to have withdrawn after 'only a few minutes of protracted fire from both sides.'\ -

                    \ - The Shelf telops fleet, which was spotted by Fleet forces but not identified as an immediate threat, entered the system early this morning and were understood to be acting as observers to the ongoing battle for the Relan system due to Shelf's official stance of non-aggression -- despite aligning itself with the Association. Shelf has reportedly been unable to be reached for comment on their actions, and their alleged neutrality in matters of war has been seriously called into question by many in the Colonial Assembly.\ -

                    \ - The SCG-D Krishna and SCG-D Mogwai of the SCG fleet, and the assisting Oasis logistical vessel, the OG-L Cloud Nine have been withdrawn to an unspecified location for immediate medical assistance and repairs." - -/datum/lore/codex/page/article51 - name = "05/20/63 - Fleet Withdraws - Sol On The Back Foot?" - data = "The Solar Colonial Assembly has confirmed that the Solar Fleet has withdrawn from the contested Relan system due to 'unexpected resistance' from Shelf tele-operated forces. This comes less than 24 hours after three Solar vessels were seriously damaged in an 'ambush' by a large number of Almach-aligned military drones. According to the Fleet, they were unprepared for any significant ship-to-ship combat in the system and will be consolidating their forces. 'This is not a defeat', according to Captain Silvain Astier of the SCG-R Hanoi, speaking unofficially to Occulum News sources 'This is merely a tactical withdrawal in order to reconvene and reassess our plans to restore order to the Almach Rim.'\ -

                    \ - A spokesperson for Shelf was quick to contact Fleet forces following the withdrawal with a formal apology for yesterday's incident, describing the previous day's attack as 'A terrible mistake.', blaming 'a miscommunication between our people in telops and the trigger-happy robots', though the veracity of their claims cannot be confirmed." - -/datum/lore/codex/page/article52 - name = "05/21/63 - NanoTrasen Station to Host Major Election Debate" - data = "As the Vir Gubernatorial elections approach, and with several high-profile debates lined up between the leading candidates in the polls, the NanoTrasen corporation is set to host its very own televised event live from one of its major logistical stations in Vir. The NLS Southern Cross, primarily a traffic control outpost managing shipping in Sif orbit, has been selected by the company to host the debate - funded in full by the corporation - due to a series of minor political scandals that have taken place on the platform, and the suitability of unused space onboard.\ -

                    \ - Early in the election cycle, NanoTrasen came under fire for its alleged 'manhandling' of Icarus Front candidate Vani Jee, and the confiscation of to-be-televised recordings taken by a party drone. While the company apologised for the incident shortly thereafter, the corporation hopes to mend ties with the potential future representatives by showing that they are capable of hosting civil discourse. More recently, the NLS Southern Cross played host to the 'breakdown' of disgraced former candidate Isak Spar - an episode which was not addressed in NanoTrasen's official statement on the planned debate event." - -/datum/lore/codex/page/article53 - name = "05/26/63 - SEO Candidate Advocates Murder On Live TV!" - data = "Sol Economic Organization candidate Freya Singh has been caught live on camera admitting that she would like to throw an innocent individual out of an airlock for a minor slight. During this afternoon's debate hosted aboard the NLS Southern Cross. Singh is quoted as having said that the event was 'the silliest concept for a debate I've encountered yet, and whoever came up with it should get a promotion, and then be fired out of an airlock.', a clear incitement of violence against Oculum Broadcast staff.\ -

                    \ - Magnus Dugal, 48 works for the Oculum Broadcast corporation and is credited with creating the concept for today's debate, the highest rated for this cycle so far. The father of three, who enjoys hoverboarding in his free time, says that he feels 'Threatened' by Singh's comments, and hopes that she will, 'at the bare minimum', issue an official apology to the company and himself.\ -

                    \ - Candidate Freya Singh, a career investment banker, spent much of today's debate advocating for reduced safety regulations and the apparent overturning of the Five Points, raising eyebrows across the system. Singh's office claims that her statements were 'a joke', but we do not feel that this is a laughing matter.\ -

                    \ - In related news, Shadow Coalition candidate Phaedrus remains under a profanity filter 'house arrest' for the remainder of the election." - -/datum/lore/codex/page/article54 - name = "06/28/63 - Vir Finalizes Dates for Election Voting" - data = "The Vir Governmental Authority has confirmed that voting for Vir's governorship and Colonial Assembly seats will take place on the 29th and 30th of June, with an additional voting period set for Wednesday the 3rd of July to allow for out-of-system and full-time weekend employees to cast their votes. No exit poll information will be released until the final votes have been cast, and final results are expected to be announced within another week.\ -

                    \ - According to a Oculum poll, Lusia Hainirsdottir is expected to comfortably take a seat, though the certainty of her governor position is not hard set. Candidates Sao, Singh and Jorg are trailing not far behind, but will all have to make good showings this weekend if they hope for electoral success. In an unexpected surge among minority species, the Shadow Coalition's Tajaran candidate Kurah Zarshir is leading the polls in certain outlying and orbital communities.\ -

                    \ - Not sure how to vote, if you can vote, or who to vote for? Check out the official election website at your-choice-vir.virgov.xo.vr" - -/datum/lore/codex/page/article55 - name = "06/29/63 - Morpheus Cyberkinetics To Split Assets" - data = "The Morpheus Cyberkenetics Corporation is to split into two distinct entities operating under a single board of trustees, in light of their Almach branch's apparent involvement in the ongoing war after last month's 'unintentional' corporate drone strikes. Citing 'Severe communications disruptions' between its operations and assets on either side of the cordon since it was put in place last year, the SolGov-side corporation is to become 'Morpheus Sol', retaining most assets and current corporate headquarters, and its Almach counterpart 'Morpheus Shelf', which is to be based out of the administration station MAS Sophia Jr., located in the El system.'\ -

                    \ - The principle victim of the Aetolian coup, Nanotrasen, has seen most of their considerable Almachi investment nationalized by the secessionist government, as has Xion and other major Almachi organizations. Most surviving corporate exclaves have been effectively written off by their parent company for the duration of the conflict, due to the severe difficulties effectively conducting trade across the militarized border. Before today, the sole exception was Morpheus, whose involvement in the secession prevented any seizing of their assets. It seems, however, that even the sardonic positronic corporation is not immune to the difficulties of doing business in the Almach Rim region.\ -

                    \ - Member of the Board Chock Full of Sardines introduced the proposal by saying, 'Our goal here is not being shot. Together with leading economic scientists, we've devised a scheme that will allow us to be shot for illegal smuggling almost ninety percent less often.' They defended the confusing and offensive choice of name in 'Sophia Jr.', seemingly intended as an insult to longstanding rival Sophia, by claiming, 'It's absolutely hilarious.'" - -/datum/lore/codex/page/article56 - name = "06/30/63 - Almach Leak Confirms 'Super-weapon' in Whythe" - data = "Solar Confederate Government Intelligence has this afternoon confirmed the presence of a so-called 'Super-weapon' in the distant Whythe system, after an apparent intelligence leak was posted to the exonet in the early hours of this morning. According to a spokesperson for the Solar Fleet, the public were not made aware of the super-weapon as the military 'have no reason to believe that the weapon poses any threat to civilian targets within SolGov space at this time, and there is no reason to cause panic with what amounts to the announcement of an Almachi propaganda tool intended to sow discord with bold threats of overwhelming power. This morning's leak achieves nothing but serving the Association's schemes. Keeping this so-called super-weapon - and I hesitate to use that term - a secret seems to have been last on their list of priorities.'\ -

                    \ - According to the intelligence documents released this morning and widely spread within minutes of upload, the 'super-weapon' is a colossal space-bound structure equipped with 'newly developed bluespace technology', though its exact purpose or capabilities have not been confirmed by either side.\ -

                    \ - Additionally, the Solar Fleet has announced that an unnamed individual within the intelligence service has been placed under arrest in connection with the leak." - -/datum/lore/codex/page/article57 - name = "07/04/63 - Exit Polls Suggest Shadow Coalition Win in Vir" - data = "According to the first exit poll data released after Vir Gubernatorial voting closed at midnight, local favourite the Shadow Coalition is expected to win at least two representative seats, with incumbent representative Lusia Hainirsdottir taking a comfortable lead.\ -

                    \ - Final results are not expected to be tallied until Saturday morning, but other frontrunners include the Icarus Front's Vani Jee and Mehmet Sao - running on drastically different platforms - alongside the Shadow Coalition's Selma Jorg. In an unexpected turn, sole Tajaran Candidate Kurah Zarshir of the Shadow Coalition has seen an immense surge in popularity among minority and more xenophilic voters. Could Vir be seeing its first Tajaran Representative? Experts say: 'Perhaps.'" - -/datum/lore/codex/page/article58 - name = "07/07/63 - Vir Election Results" - data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\ -
                    \ - Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\ -
                    \ - Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\ -
                    \ - Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\ -
                    \ - Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\ -

                    \ - Voter turnout: 30,928,287 (63%)\ -

                    \ - The greatest upset this election cycle has been the unexpected popularity of 'alien rights' candidate Kurah Zarshir, who was eliminated in favour of Mehmet Sao (Icarus Front) in the 8th round of vote transfers by a margin of just 30 votes, or 0.000096%, prompting a rigourous recount process to confirm the result. A difference at this stage could have resulted in a significantly different final line-up.\ -

                    \ - This year's winners showed clear advantages in the first-choice votes, each gaining at least 15% of the popular vote before any transfers were calculated, though Sao made significant gains in the final count, falling only a few percent short of the Jorg's 3rd place position. By far the least popular candidate this cycle was Hal Wekstrom of the Sol Economic Organization, who received just 0.8% of the first-choice vote and was immediately eliminated. Also of note were Phaedrus, Apogee Lye and Yole Savik voters, each of whom had high (30%+) voter exhaustion rates, opting not to provide alternative choices; sending the message 'My candidate or none at all.'\ -

                    \ - The elected are to be sworn in at a ceremony on Luna in two weeks time." - -/datum/lore/codex/page/article59 - name = "07/30/63 - Solar Fleet Data Breach" - data = "Last night, a number of files were spread on the Monsters From Beyond's exolife forums allegedly depicting the boarding and eventual scuttling of the SCG-TV Mariner's Cage during a voyage close to the Gavel system on the 12th of June, before the SCG had officially released any information regarding the event. The files contained undisclosed documents from the Solar Fleet investigation, some of which appear to contain audio and video recordings of the final moments of the crew before the vessel's bluespace drive was detonated. Due to the graphic violence depicted and their classified nature, we will not be sharing the files, however as a matter of public record we will explain the events recorded therein. The following description may be unsuitable for sensitive readers.\ -

                    \ - First, the navigation crew detects a drive signature on an apparent intercept course with their own, originating from across the SCG-Almachi border. It was not a large vessel, and is assumed to be some form of autonomous drone. The crew disregards it as a low level threat, instead continuing on their trajectory, leaving only the standard point defense armament locked on. This proved to be a lethal mistake, as the vessel appeared and near-instantly began accelerating toward the Mariner's Cage, before impacting the fore weapons array. The recording is cut, due to what was likely a power surge, however upon reconnection, reports indicate no damage related to any known warhead was apparent, aside from the initial impactor. The crew mistakenly assumes it to be a failed suicide drone strike, and dispatches minimal security personnel, and a large complement of response engineers.\ -

                    \ - Approximately thirty minutes after the response teams are dispatched to the impact zone, the teams begin losing contact, with those first arriving being the first to disappear. When the security responders intercept the path of communications blackouts, they are met with the blades of multiple Aetolian shock troopers. Two appear to be made from a 'living steel', with each limb taking the form of 'jagged cleavers' as one radio recording states, and three more of 'indeterminable classification'. The ship entered a red alert state, and moments later, the small contingent of marines aboard the supply vessel were dispatched to deal with the threat. All five members of the enemy boarding party were able to be rendered inert through sustained fire, though not without Sol casualties.\ -

                    \ - According to the next recordings, approximately three hours after the incident, the vessel received orders to interrogate the boarding 'Aetotheans'. The two noted to appear as the officers of the squad were rejuvenated within sealed interrogation chambers reinforced with supplies on hand, apparently capable of stopping sustained fire from multiple energy weapons. The first individual was a 'sapphire' according to information from NanoTrasen correspondants. It refused to speak in Galactic Common, and instead utilized an unknown frequency of biological transmission, and internal charge shifts. The individual was moved to a more permanent cell within the vessel's brig for transport, and the second was rejuvenated. Only the first half of the interrogation, which lasted approximately two and a half minutes, compared to four hours for the first, was recovered. The individual is rejuvenated, and is engaged in discussion with the interrogating officer when it suddenly stands, emits what is described as a 'wail', and detonates, destroying the transmitting camera, and presumably killing the officers involved in direct interrogation.\ -

                    \ - Final recordings originate from the ship's onboard A.I. housing, which was involved in continual discussions with presumably the 'sapphire', as it enacted the vessel's scuttling. It is unknown whether or not the individual was somehow capable of restoring the other individuals that fell in combat in order to free itself, or if it was able to incapacitate the transporting officers, and command crew of the vessel alone.\ -

                    \ - The Solar Fleet has expressed 'regret' that the files were leaked in their complete form, and have assured the public that an official report was due for release in the coming weeks. Concerns of 'Aetothean' attacks on civilian targets have been dismissed as 'improbable', but have affirmed that 'the threat is being taken very seriously'." - -/datum/lore/codex/page/article60 - name = "08/03/63 - Hainirsdottir Sworn In As Governor of Vir" - data = "Following a short transitionary period for the previous administration, this year's election victors have been sworn in at an official ceremony at the Colonial Assembly Hall on Luna. During her welcoming address, Governor Hainirsdottir reaffirmed her plans for the future of the system, promising a 'Bright future for Vir as a hub for medical science.', and plans for an incentivisation program for the removal of invasive extra-terrestrial species that have long plagued the region - in particular the aggressive spiders that have become synonymous with certain regions of the Sivian wilderness.\ -

                    \ - Additionally, the newly elected representatives announced expected, but none-the-less significant changes to the administrative staff of the system. Notable figures include two defeated election hopefuls: Kurah Zarshir has been selected as the Shadow Coalition's Culture Secretary for the system, while Mehmet Sao has been brought aboard by the Representative Vani Jee as the Vir Icarus Front's Internal Security Advisor. It is expected that the former candidates may use their positions to further certain goals from their own campaigns, but under the watchful eyes of their perhaps more moderate superiors." - -/datum/lore/codex/page/article61 - name = "08/04/63 - Former Independence Candidate Found Dead" - data = "It has been confirmed by a spokesperson for the Sivian Independence Front that a body found by hikers last week in the Ingolfskynn Mountains, approximately 200 miles northeast of New Reykjavik, belonged to party chair Yole Savik.\ -

                    \ - Savik, 68 - who had run for Vir Representative in the recent election - had not been seen since the 14th of July, shortly after the results were announced. Party officials claim that Mr. Savik frequently made 'off the grid' trips into the Sivian wilderness and his absence had not been treated as suspicious until investigators approached them to confirm the identity of the body. According to police, though Yole was publicly known as a 'seasoned frontiersman', Savik had succumbed to exposure at least two weeks prior to the grisly discovery. His death is not being treated as suspicious." - -/datum/lore/codex/page/article62 - name = "08/07/63 - Almach Pirate Threat Vanishes - Analysts Baffled" - data = "Skrellian Xe'qua pirates operating in the far reaches of the Almach Association since the onset of hostilities last year, have inexplicably gone dark. The pirates, who were under close SolGov surveillance to monitor their impact on Almachi shipping, have drastically dropped in activity and numbers over the last month according to an official report released by the Solar Fleet today. The Fleet is unable to account for the cease in activity, which has now reached levels even lower than their pre-war baseline, as there have been no reports of Almach military operations in the area, nor any signs of decisive battle on the Almach border with pirate space.\ -

                    \ - The drop in activity roughly coincides with the leaked information on an Almach 'Super-weapon' in Whythe, though military sources do not believe that the weapon has been deployed in any capacity at this time. According to Hasan Drust, an expert on Skrellian foreign policy, the 'only feasible explanation (is) major anti-piracy action undertaken by the Skrellian Far Kingdoms', who occupy the space beyond the Xe'qua pirates' known range. The reasoning behind this action now, against pirates who have historically only targeted human space is not entirely clear, though Drust suggests that it may simply be a coincidence as pirates would be a 'trivial issue' for Far Kingdom military might." - -/datum/lore/codex/page/article63 - name = "09/02/63 - Shock Almach Attack Routs Relan Front!" - data = "Following close to a month of reduced Almach activity, enemy Militia forces have today launched a staggering attack on Sol frontline forces in the region of the Relan system, disabling several SCG warships and forcing a major tactical retreat to Saint Columbia. The scale of this attack by Almach forces is unprecedented, but seems to be the result of the Association consolidating manpower previously dedicated to anti-piracy patrols on the far side of their territory. It is believed these vessels have become freed up due to the apparent but as of yet unconfirmed annihilation of Xe'qua criminal flotillas by Skrellian Far Kingdom police action.\ -

                    \ - The Solar fleet had been in position to blockade the Relan system in the hopes of forcing the Free Relan Federation to surrender and withdraw from the Association, but was unprepared for what has been described as an 'all-out attack' on their positions, which left the vessels SCG-D Liu Bei, SCG-D Wodehouse, SCG-TV Ceylon Hartal and SCG-TV Apoxpalon disabled and unable to retreat with the bulk of our forces, as well as inflicting severe damage to several other craft. According to initial reports, the strikes on many of the afflicted ships closely resembled scenes from the controversial 'Aetothean shock attacks' on the SCG-TV Mariner's Cage this June, which saw the ruthless deployment of gene-altered Promethean 'super-soldiers' by the Almach Association.\ -

                    \ - Fleet Admiral Ripon Latt, commanding officer of the assailed fleet, has confirmed that reinforcements are underway and the retreat 'shall not be a significant setback in the war effort', especially assuring citizens of the embattled Saint Columbia system and its neighbours that there is no cause for alarm and civilians have yet to be targeted.\ -

                    \ - The fates of the four missing ships have not been confirmed, and though the Fleet has not yet made an official statement, Sol casualties are cautiously estimated to be in the hundreds." - -/datum/lore/codex/page/article64 - name = "09/23/63 - Fleet Refuses Inquiry Into Relan Losses" - data = "The SCG Fleet has refused to heed widespread calls from critics to launch an investigation into the heavy losses sustained by our forces in a major Almach attack early this month, citing that an investigation at this time would 'undermine the ongoing efforts of our troops in battles to come'.\ -

                    \ - The attack, which took place on the 2nd of September and at current count resulted in the loss of a staggering 1281 Sol lives, quickly drew criticism from experts for 'the total unpreparedness' of the fleet despite their public claims that all vessels were 'battle ready and prepared for a coming offensive.'. The specifics of the fleets apparent failings have been the focus of much speculation in the intervening weeks, with the blame placed on everything from a critically inexperienced officer core, to ongoing redeployments to and from the recently expanded Hegemony border.\ -

                    \ - Admiral Latt has condemned critics, stating that 'the last thing our brave troops need right now is murmuring from people who don't know the first thing what they're talking about. Their actions in following orders to fall back to the border have been nothing but commendable, and all effort was made to minimise loss of life. The fleet is undergoing reorganization at this time, and is in a better position than ever.'" - -/datum/lore/codex/page/article65 - name = "09/27/63 - Almach Bypass Saint Columbia In Brazen Gavel Attack!" - data = "Almach Association fleet forces entered the Gavel system this afternoon, reportedly having evaded interdicting Sol forces from Saint Columbia in an apparent effort to skirt the range of the MJOLNIR weapon system in Saint Columbia and cut off that system from major shipping routes. Current reports from the system capital in New Xanadu are that the majority of outlying civilian stations have surrendered to invading forces with only minor incident, but that skirmishes with local defence forces - including Sol Fleet detachments - are ongoing, and it is too early to remark on the outcome of the battle. Official military reports are scarce at this time, but the Fleet in Saint Columbia is 'on the move and ready to repel the invaders'.\ -

                    \ - Accounts from the system's edge describe Almach forces 'firing indiscriminately' on anti-piracy emplacements including those mounted to the ILS Thurston, a Greyson Manufactories collection station with eight crew, killing all hands.\ -

                    \ - Open fighting in the Gavel system marks the furthest Almach encroachment on Sol territory to date. The system, which is a stone's throw from the Oasis and Vir systems is best known for the destruction of the moonlet 'Requiem' by a rogue nanoswarm in 2289, which was successfully neutralized by government forces, and boasts only a small population relative to its neighbors." - -/datum/lore/codex/page/article66 - name = "10/01/63 - 'Judgement Day' As Gavel Falls!" - data = "The government of New Xanadu has surrendered to Association invaders following a disastrous relief effort by the Solar Fleet, whose interdiction vessels are believed to have been captured by the invading force. The manoeuvre leaves the bulk of the Sol fleet isolated in the Saint Columbia system - though a breakout is expected - and has led to widespread outrage in the Colonial Assembly. Critics of the war have damned the Fleet for their 'inability to fight a civilian rabble, gene-modded or otherwise' and renewed calls for a peaceful arrangement between the Solar Confederate Government and Association.\ -

                    \ - ISA-5, current spokesperson for the Shadow Coalition has forwarded a motion today to resume discussions with Almachi heads of state, just hours after news of Gavel's surrender broke. The proposal which has yet to gain widespread traction, would call for a new ceasefire, and ISA-5 has stated they 'hope that a new agreement can be made to end the senseless loss of life over the particulars of a foreign government's right to autonomy.'.\ -

                    \ - Executive Sifat Unar of the Emergent Intelligence Oversight has voiced immediate concern over the motion, criticising the use of 'foreign government' in reference to Almach; 'Our Fleet has suffered a few defeats, but this conflict goes deeper than mere lasers and shells and to surrender to torturers, mind-hackers, and Machiavellian machines at this stage would be insanity. To allow a seccessionist state, particularly one so unabashedly guilty of crimes against humanity that go far beyond even our modern definitions of 'Human Sanctity', to exist unquestioned a stone's throw from some of our most precious member states, would be a failing not only of this government, but of humanity that would echo through history like a great shameful dirge for all to hear.'\ -

                    \ - A communications blackout has been instated on the Gavel system by the Almach Militia, though earlier reports indicate continued strikes on numerous civilian colonies who were unwilling, or unable to deactivate their automated defence systems prior to the invaders arrival." - -/datum/lore/codex/page/article67 - name = "10/08/63 - 'Magnetic Weapon' Designs Released Following Gavel Threat" - data = "Private security and ExoMartian law enforcement agencies are now receiving modernized man-portable magnetic weapon designs produced by Mars Military Industries thanks to increased budget from the S.C.G. The 'hallmarks' of these weapons, as one M.M. Industries spokesperson says, are their incredible ability to launch physical projectiles at velocities rivalling present portable laser technology in practical utility. Many of the designs utilize generalized, easy-to-manufacture compressed matter cartridges as their primary ammunition, meaning no specialized production facilities are required outside of standard shipyard or planetary lathe systems, 'to ensure a cutting edge in the battlefield, down to the last man'.\ -

                    \ - Some corporations, such as Hephaestus, NanoTrasen, and the PCRC, are already preparing to utilize these released designs in their own laboratories and stations, undoubtedly providing yet more materiel backing to the Almach front." - -/datum/lore/codex/page/article68 - name = "10/10/63 - Gavel Encircled - Liberation In Sight" - data = "Significant Fleet reinforcements from the Unathi border have 'trapped' the Almach fleet in the Gavel system and are poised for a decisive victory, according to latest reports from the front. Solar vessels from all sides of the war-torn system have closed in to ensure the invading force have no means of retreat. The relief force includes elements of the Hegemony-border fleets and the previously deployed flotilla stationed in Saint Columbia. Speaking at the Colonial Assembly this morning, Rewi Kerehoma of the Sol Economic Organization has stated that the reinforcements will 'beyond a doubt' prevent a repeat of 'embarrassing' errors made in the past month.\ -

                    \ - Efforts have been made to re-establish contact with the occupied system, which has been blocked from communication with the rest of the galaxy since the occupation began last week. According to scattered civilian signals from the system, the Association has adopted a 'salted earth' policy to the system following Solar military response, openly demolishing system infrastructure with little regard for its residents. A spokesperson for Grayson Manufactories, who maintain a significant presence in the Gavel system , has proposed that 'The Almachi had no intention of holding this system, this may have been nothing more than a show of force against corporate assets supporting the war effort.'\ -

                    \ - In related news, Admiral Ripon Latt has officially retired from his post following immense political pressure from the Assembly. Latt was until this week, commander of the Rim Expeditionary Force - currently in the Saint Columbia system - and has been the primary target for blame in the SCG's defeat in Relan, and failure to prevent the invasion of Gavel. The disgraced admiral will receive a full officer's pension, but no official honours befitting of his previous rank. Latt is to be replaced immediately by Admiral Silvain Barka, an experienced veteran of anti-piracy action in the Rarkajar Rift." - -/datum/lore/codex/page/article69 - name = "10/26/63 - 'Largest Engagement Since The Hegemony War' As Gavel Freed" - data = "The Almach Association invasion force in the Gavel system has been all but annihilated by a successful Solar counter-encirclement, at great cost to both sides. The combined Rim Expeditionary Force in Saint Columbia, along with the newly formed Gavel Relief Fleet - which had been massing in the Vir system over the past week - launched the successful attack this Tuesday evening, leaving no route of escape for Almachi invaders and resulting in 'pitched fighting' between the fleets that lasted several days. Solar forces are currently in the process of performing security sweeps of the system and its scattered habitats and it is expected to be several weeks before the system is declared safe to civilian traffic and for refugees to return home.\ -

                    \ - Even as exact causalities remain unconfirmed, the battle has made history as the single largest ship-to-ship engagement by tonnage involving the Sol military since the cessation of hostilities with the Unathi in 2520, involving over one hundred vessels of all sizes across both sides, as well as countless unmanned drones and light craft. Almachi forces, in numbers described as 'far from an insignificant portion of the total fleet' fought fiercely, and 'in manners more reminiscent of mercenary gangs than a single organized force, and with tactics varying from the conventional to the outright mystifying'. Admiral Silvain Barka has commended his own crew for applying lessons learnt from prior 'Aetothean' commando strikes in preventing similar incidents from occurring in the confusion of battle; in a candid interview this morning he stated 'Like any Promethean, (Aetotheans) hate the cold, and my crew are the coldest (expletive) around.' \ -

                    \ - The designations of twenty-four Sol Defense Vessels declared 'lost in action' have not yet been released, though next of kin of missing or deceased servicepeople have reportedly been notified." - -/datum/lore/codex/page/article70 - name = "11/11/63 - Gavel Salvation Reveals True Cost of War" - data = "Reports from liberating forces in the Gavel system have confirmed early accounts of 'inhuman' tactics employed by the Almachi invaders during their short occupation and defense of the region. Besides an apparent disregard for sapient life, especially any that gave an outward appearance of defending themselves, the Militia is believed to have employed troops and tactics 'the likes of which had only been imagined', in 'a manner that can only be described as experimental'.\ -

                    \ - Most harrowing of the accounts are those of alleged 'kill-switch clone armies' consisting of near-identical vatborn troops deployed to some of New Xanadu's largest surface colonies. According to local residents, the 'uncanny' troops arrived en-masse 'from the depths of the wastes' at the beginning of the invasion, despite wearing no obvious gear that would protect them from the extreme, unbreathable environment beyond the confines of controlled habitats. The clones are said to have targetted infrastructure including life support, with little regard for those who stood in their way. However, what has baffled Fleet analysts is the reaction upon the arrival of Sol surface troops; the clones did not fight back, but rather dropped dead 'all at once, as if a switch had been flipped'.\ -

                    \ - Teams from the SCG's top analytical and regulatory bodies including the EIO have been hard at work collecting examples of the unusual Almachi technology from throughout Gavel. Executive Sifat Unar has stated that 'It is vital that we ensure this transgressive technology no longer poses a threat to sapient life, either now or to future generations. A full cleanup operation is underway, and we are working to analyse what we have found and better understand the enemy's limits and the extent of their biological and technological... Practices.'\ -

                    \ - The current confirmed death toll, including civilian losses in Gavel has now reached 11,520 and is expected to rise. Debate continues whether to add the so-called 'Kill-switchers' to the tally." - -/datum/lore/codex/page/article71 - name = "11/21/63 - Tajaran Pearlshield Draws Line In The Sand" - data = "Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has just issued a formal statement:\ -

                    \ - 'It's no secret that we members of the Pearlshield Coalition have our differences and conflicts, both within and without. Much as some might call it the spice of life, it's with shame that I admit it has left us somewhat paralyzed over the last few months, even as a war has raged on a mere few jumps away from our borders. But in acknowledgment of our differences, something we have been able to unanimously agree upon is the sanctity of life and common decency, sanctity that Almach has continued to violate in the name of political conquest. Our relationship with SolGov - and indeed, any who would call us 'friend' - should be one of mutual cooperation and benefit, not of hard boundaries delineating 'us' and 'them'. There is only 'we', and we cannot stand idly by.\ -

                    \ - 'To this end, the Pearlshield has negotiated with local forces in the Silk system, and are taking over interim protection of the system, to free up Solar military forces so they can assist in the war effort. We have also begun construction of a large residential station to supplement the Silk station itself, alleviating its acknowledged overpopulation issues and providing additional logistical support for our defensive fleet. Finally, our cousins in Mesomori have generously loaned their new flagship, the PCMV Raniira's Grace, with all hands on deck for temporary joint assignment with Solar military forces. They are quite eager to provide a taste of Tajaran firepower and ingenuity.\ -

                    \ - 'We wish we could spare more at this time, but alas, we're still finding our feet among the stars, stepping carefully among the proverbial minefield that is our own share of cosmic threats. Know that these contributions represent a grand investment in their own right, and they are only the beginning should this war carry on.\ -

                    \ - 'We will have more to say as it comes up. May all our stars shine upon us.'" - -/datum/lore/codex/page/article72 - name = "11/23/63 - Surviving 'Kill-switcher' Assassinated During Vir Interview" - data = "An Almachi 'kill-switcher' clone soldier capturing during the liberation of the Gavel system was yesterday 'forced' to explosively self-terminate during a live TV broadcast with Virite news anchor David Huexqole aboard a SCG prisoner transport craft, allegedly by the statement of a code phrase, clearly audible on the recording. Following the attack, the apparent 'activator' is reported to have escaped to nearby NanoTrasen logistical station, the Southern Cross amidst the chaos where a minor altercation took place, resulting in the injury of one Positronic crew member and death of one Almachi accomplice, which initial reports suggest to have been a 'Vox mercenary'. The search continues for the Almachi agent, and local authorities remain confident that they will be apprehended.\ -

                    \ - David Huexqole, a popular local media personality, was the only other immediate victim of the attack, suffering moderate injuries and was rushed to the Southern Cross for emergency surgery where he is reported to have made a full recovery. Huexqole has expressed his gratitude to the 'skilled and charming staff, clearly shaken by the war but nonetheless capable for it.' but has expressed concerns regarding so-called sleeper agents within Sol space, 'Isa (341, the interviewed clone), seemed genuinely reformed. She spoke openly of regret, and struggling with what it meant to be created only to die. Before she blew herself up, I never would have thought her capable - it was like she changed in an instant.'\ -

                    \ - Initial blast investigation suggests the presence of a previously unidentified compound in the clone's bloodstream, which was detonated following 'activation' by the as of yet unidentified Association agent, believed to have been present in the room during the recording. Moments prior to termination, the clone's demeanour is visibly altered and the phrase 'Those of Sol must look to the eastern star, Phorcys.' was clearly stated. A spokesperson for the Saint Columbia Telemetry Station has stated that observation of Phorcys, an uninhabited star system located approximately between the Almach Association state of Vounna and Skrellian Far Kingdom space, has revealed 'no immediate anomalous behaviour or presence' but that analysis will continue in the coming weeks 'in order to verify the potential meaning of this statement.'" - -/datum/lore/codex/page/article73 - name = "11/25/63 - Phorcys Star Ignites!" - data = "The Phorcys star system, mentioned cryptically during Friday's dramatic televised Almachi assassination, has 'gone supernova' several thousand millennia ahead of schedule, sparking concerns of 'Almach Superweapon' involvement. The process, which ordinarily takes place over many months and is preceded by millions of years of obvious stellar evolution, began rapidly in the early hours of this morning and has already begun to consume the entire system at a rapid rate - mercifully consisting of only two uninhabitable dwarf planets.\ -

                    \ - According to government telemetric sources, who have been observing the system since Friday's message, the 'ignition' was preceded by 'abnormal bluespace readings', but it is impossible at this time to confirm whether the phenomena was a natural anomaly that Almachi sources were able to identify ahead of time, or if the long-rumoured 'Whythe Superweapon' was in fact involved. If direct Almach involvement were the case, the range of such an 'attack' would be unprecedented, with the afflicted star far from any populated area or territorial claims and 'no evidence of sapient passage to the system in several decades.'\ -

                    \ - General Secretary Mackenzie West, speaking on behalf of the Colonial Assembly has stated that 'The Solar Confederate Government is taking this matter very seriously. The mere prospect of a weapon of this calibre would indeed pose an existential threat to our society, and perhaps mankind. However, at this time we cannot jump to conclusions, this may in fact be a game of smoke and mirrors; an effort to use a previously unobserved phenomena as a weapon of propaganda, and we cannot allow this to cloud our judgement. We are in close contact with the Skrell in order to determine the nature of this sudden ignition. Know that the Fleet is on high alert, and fighting forth from the Saint Columbia system will continue unaffected.'" - -/datum/lore/codex/page/article74 - name = "11/27/63 - Whythe Superweapon Confirmed In Phorcys Blast" - data = "New government footage from the moment of ignition in the Phorcys system has confirmed the 'brief' presence of an artificial 'bluespace gate' within the star just prior to its rapid expansion and structural collapse. This verifies claims of responsibility made by the Almach Association late yesterday, and casts no doubt on the threat posed by the so-called Whythe Superweapon. The Colonial Assembly has been in continuous session since the initial incident, and one staffer has described the atmosphere as one of 'unhinged panic'.\ -

                    \ - The prevailing fear amongst the government, with the assent of top physicists in the private sector is that such a weapon could be used against Solar targets, and that it is no longer a question of 'how', but 'when', and indeed 'where'. The only unknown factor is the superweapon's capability for repeat use, and 'rate of fire' which is yet to be demonstrated but widely considered to be 'not a risk worth taking under any circumstances'.\ -

                    \ - Latest reports from the Assembly have are that a 'scramble' is taking place to resolve the 'Almach Situation', and that the ongoing offensive out of Saint Columbia has been redirected towards Relan and Whythe. According to Skrellian correspondent Hasan Drust, official aid has been requested as of this afternoon." - -/datum/lore/codex/page/article75 - name = "12/01/63 - Skrell Defer Aid Citing 'Deliberations'" - data = "Official Solar contacts within the Skrellian government have reportedly delayed tangible aid in the rapidly escalating Almach Crisis, citing 'Internal Deliberations', agreeing only to continue to share telemetric data on the movement of Association forces. The Skrell, who were instrumental in the Solar victory against the Unathi 40 years ago have long been considered taciturn in their internal affairs, but have previously been open in their support of Sol action when it comes to national defence, making their indecisive response greatly unexpected to some.\ -

                    \ - Speaker ISA-5, who has been increasingly critical of the war in the past several days, has dismissed concerns that the Skrell are 'siding with the Association', citing the long term close relationship between their governments, 'The Skrell are not war hawks, and they've never shown outward ill-will against other sapients. We can't let a bureaucratic delay allow public opinion to turn against an entire species of people who have always had our backs. If our allies need time for deliberations, we should allow them and not expect mere muscle and military aid when words could have been our solution from the beginning. I've no doubt that they will not allow the situation to become so dire that the Association are able to cause us any serious harm as they have threatened. I'm convinced that diplomacy will prevail, and that if the Skrell are in fact negotiating with the Association, then it is with all of our best interests in mind.'" - -/datum/lore/codex/page/article76 - name = "12/20/63 - Jee Relaunches Libraries Across Vir" - data = "Vir's Colonial Assembly representative and long time education reformist Vani Jee has launched her long planned 'modernization' of exonet-linked library system throughout the Vir system. During her campaign early this year she brought to light the 'staggering unsuitability' of library networks in Vir, particularly those being provided for corporate employees and residents, with particular pressure placed on the NanoTrasen Corporation whose literary collection was described as 'basically smut and whatever an old drone had scraped from the bottom of the exonet barrel.' Following her subsequent election, she reaffirmed her desire for education reform, making 'post-education' providers her first target.\ -

                    \ - The new system, which she successfully acquired government funding for this October, is due to be launched this week and includes a 'personally curated' collection in addition to titles recommended by affected institutions, and a particular focus on local authors." - -/datum/lore/codex/page/article77 - name = "01/23/63 - 'Extreme' Environmental Alert Following Ullran Expanse Chemical Leak" - data = "Residents and visitors to Sif's remote Ullran Expanse have been advised to exercise extreme caution when travelling and to avoid consuming local water sources following a 'catastrophic' chemical spill in the mountains. The exact cause and origin of the spill has yet to be confirmed, though it is currently believed to have originated from an improperly disposed of chemical tank. Local rivers and their outflow have been tested with 'extremely lethal' levels of acutely corrosive material.\ -

                    \ - Governor Hainirsdottir has issued a statement assuring Sif residents that the cleanup process is already underway, and the contamination which return to safe exposure levels for most sapients within 'Just a few days', but that the risk to local ecosystems in much higher and 'may take decades to recover.' and locals are advised to use only pre-packaged or thoroughly filtered water for the next 'six months, at least.'\ -

                    \ - A spokesperson for the Sif Environmental Agency has described this leak as 'At least regionally, perhaps the worst environmental disaster since the introduction of the invasive spider species.' and has expressed concern about similar accidents occurring in more populated areas if stricter regulations are not put in place.\ -

                    \ - The Ullran Expanse Chemical Relief Fund has been set up and is collection donations at save-ullran.xo.vr/donate" - -/datum/lore/codex/page/article78 - name = "01/27/64 - NanoTrasen Implicated In Devastating Ullran Chemical Spill" - data = "Files recovered from the contamination site by clean-up crews and submitted to the Sif Environmental Agency suggest that the hazardous materials were discarded in the region by the NanoTrasen Corporation. Though the company is not currently accused of malicious intent, ownership has been proven of several cargo containers filled with Growth Inhibitor 78-1, a compound used in the manufacture of Vatborn humans which is known to severely inhibit cell regeneration in living creatures.\ -

                    \ - The documents, which have not been released in full by the SEA, were also leaked onto the exonet from several sources which NanoTrasen initially dismissed as fraudulent but have since admitted to their authenticity. Investigations are currently underway to determine those at fault within the company so that prosecution may begin. Third-party commentators have alleged that, 'The debris field and damaged containers suggests cargo jettisoned from a craft within the Sif atmosphere', though the circumstances are yet to be thoroughly examined.\ -

                    \ - Certain members of the civilian clean-up crews responsible for waste disposal have also accused NanoTrasen of failing to provide their employees with sufficient safety information and protective equipment, which led to several minor injuries and one volunteer was reportedly admitted to hospital for 'severe side-effects of exposure' but has since been discharged." - -/datum/lore/codex/page/article79 - name = "02/10/64 - Shelf Fleet Vanishes Without A Trace!" - data = "Government agencies are scrambling to explain the apparent 'total disappearance' of the Almach-aligned Shelf fleet. Initial reports from the fleet's last known location describe a phenomenon not dissimilar to that observed just prior to the ignition of the Phorcys star in November, but the SCG has assured the media that 'No activity has been detected from the Whythe superweapon that would indicate any relation to the ongoing Shelf situation.'\ -

                    \ - Independent telemetric data from several sources has confirmed the presence of a 'bluespace anomaly' in the moments preceding the fleet. Currently efforts are focused on determining whether the fleet has been lost with all hands or if survivors may yet be found, but no trace of the fleet or of telltale signs of large fleet movements anywhere within or beyond Almachi space have yet been detected.\ -

                    \ - This afternoon, Speaker Mackenzie West of the Icarus Front addressed Sol, and indicated that communication was underway 'across faction lines' with the Association to determine the cause and implications of Shelf's apparent loss. The Almach Assocation has claimed not to be responsible for the 'possible attack' and both sides has expressed concern for the 'astronomical loss of life this may represent.'\ -

                    \ - Shelf, a largely Positronic colony fleet, consists of over 1700 vessels including the 'One Leaky Bitch', current headquarters of Morpheus Shelf, Morpheus' non-Solar 'spin-out' corporation established last June. The fleet has continuously denied direct affiliation with the Almach Assocation, but was involved in a major drone attack on Solar vessels just nine months ago, which was claimed to be 'in error'." - -/datum/lore/codex/page/article80 - name = "02/12/64 - Spectralist Wardens to hold Vigils for Lost Fleet" - data = "In the wake of Shelf's sudden disappearence, Wardens across SolGov space have collectively agreed to hold services and vigils throughout dozens of systems for those who are doubtless worried for their loved ones aboard the missing ships. Spectralism, a synthetic-centric religion, finds it's roots within 'Haven', a small vessel and community that travels alongside the wider Shelf fleet, though considers itself a distinct entity. Its ministers, known as Wardens, tend to its adherants wherever they may be found.\ -

                    \ - Despite Haven's well-known and somewhat-controversial independence of identity from Shelf, all indications point to the Fleet's disappearance having taken the attached ship with it. All twelve Spectralist Elders are known to have been onboard Haven at the time of its disappearance, as well as numerous other significant Spectralists and other spiritual leaders thought to have been on Shelf. The potential loss of the entire upper organizational body could be devastating to the religion, who have long been instrumental in the synthetic rights movement.\ -

                    \ - Ceramica, a Warden operating out of Nyx, reached out for comment with the following: 'We are as worried as everyone else who calls Shelf their home, or who has lost contact with friends or family. You need not believe in the First Spark to have a place at your local vigil; We welcome everyone who may be hurting. This is our way, this has always been our way. We remind everyone to stay mindful, and to reach out to those you see struggling. In times like this, we cannot leave each other behind.'" - -/datum/lore/codex/page/article81 - name = "02/14/64 - Shelf Safe After 'Impossible' Jump!" - data = "The missing Shelf fleet has reappeared hundreds of light years beyond the Eutopia system just days after its sudden disappearance on Monday. Unencrypted bluespace transmissions from the fleet's new location - several months travel from its last known position in Almachi space - assured all who would listen that 'The fleet (had) arrived safe and sound.' and apologized for 'Any alarm (the fleet) may have caused'. Though no official report has been released nor information from Shelf itself, initial counts indicate that a number of Shelfican vessels may not have survived the 'impossible journey' intact.\ -

                    \ - Current analysis of the bluespace anomaly detected prior to Shelf's unexpected departure indicate that the same technology as employed by the Whythe Superweapon may have been used by Shelf to create 'a bluespace portal thus far inconceivable by modern science'. The revelation has sparked concerns that 'extreme mercurial elements' within Shelf may have been responsible for the hardware behind the Assocation's 'system eating' weapon.\ -

                    \ - Sifat Unar of the EIO has expressed particular concern that 'Such improbable technology relying on concepts deemed so staggeringly arcane that our very understanding of the laws of the universe had written them off as impossible - and to be applied in such callous ways without regard for life or perhaps even the fabric of reality, could only have been developed by machine minds that could threaten our very being.' Shelf has dismissed these claims as 'Scaremongering' and 'Just jealous that somebody else thought of it first', though they would not confirm nor deny their involvement in the development of the new bluespace portals." - -/datum/lore/codex/page/article82 - name = "04/11/64 - Whythe Breached - An End In Sight?" - data = "According to latest reports from the Almach front, Sol vessels have established a foothold in the debris fields of the desolate Whythe system, home to the enemy's controversial 'Superweapon'. Admiral Barka has confirmed that bombardment of the weapon has begun, but that 'shields are holding at present', owing to the vast construction's immense power generation capabilities, but remains confident that the 'siege' will come to an end within a few months, and that the Almachi now hold only 'minimal retaliatory capacity'.\ -

                    \ - Fleet sources have been quick to address a flurry of activity on the exonet which proposed that the superweapon might be deployed against Sol's core systems in a last-ditch effort to inflict damage on their former government. According to a statement posted just hours after the initial invasion press release, 'the Fleet is aware of all risk factors regarding the Whythe Superweapon, and following two long months of analysis are certain that constant, substantial pressure placed on the weapon's shield systems will render the offensive component of the weapon dormant until the hull can be breached.'\ -

                    \ - The general mood in the Colonial Assembly today is one of relief, as all signs point to a total collapse or surrender of Association forces in their home systems once their trump card has been captured or destroyed by SCG forces. Secretary West has already expressed congratulations to the troops, 'despite the lack of assistance from our allies, as the Shadow Coalition would have had us believe was necessary.'" - -/datum/lore/codex/page/article83 - name = "04/13/64 - Skrell Ultimatum Shocks Sol!" - data = "After three months of diplomatic iciness, the Skrellian Far Kingdoms have contacted both the SCG and Almach Association with one demand: Sign an armistice or prepare for war. Supported by an immense fleet movement through the recently quashed Xe'qua region, the Far Kingdoms have demanded an immediate end to hostilities, and 'incorporation of Almachi holdings as a Skrellian protectorate, under strict oversight and regulation of their research and activities.' By Skrell demands, the Fleet has two weeks to fully withdraw from the Almach region and any vessels on either side continuing to engage will be 'disabled, boarded, and have its crew arrested pending a formal peace agreement.'\ -

                    \ - A wave of outrage has swept the Colonial Assembly, with heated debate as to Sol's response defying all party lines. While Speaker ISA-5 has been widely criticized by political opponents for their 'overzealous trust in the Skrell', they have remained acquiescent to the Skrell's demands, stating that it may be the best way to avoid any further bloodshed and maintain good relationships with the Skrell. Conversely, a small group of hardliners from across the major parties headed by SEO Representative Colin Zula of Alpha Centauri, have formed a political coalition opposing any form of 'Surrender or appeasement in the face of foreign aggression', demanding Sol keep its forces in place and 'Finish off the Association before they can be allowed to wreak havoc unsupervised and uncontrolled.'\ -

                    \ - Surprising some, long-time supporter of the Almach War, MacKenzie West has established themselves as a figure of moderation in the Assembly, promising that the Icarus Front would pursue 'aggressive negotiations' with the Far Kingdoms in order to better understand their motivations and, if territory is to be ceded, 'ensure the Almachi are placed under a firm hand'. He notes that the Skrell have never adhered to Five Points policy, but that careful diplomacy has always ensured their 'less savoury tendencies' have never spilled over to Sol space." - -/datum/lore/codex/page/article84 - name = "04/16/64 - Assembly Shaken By Reshuffle" - data = "Following the shock announcement of the Skrellian demands on Monday, sixteen planetary representatives under the SEO's Colin Zula have announced the formation of a new political party named the 'Solar Sovereignty Party' under the banner of 'Independence from foreign demands'. The party consists of defectors from all three major parties; 9 Sol Economic Organization, 4 Icarus Front and 3 Shadow Coalition representatives have 'jumped ship' and will back Zula's demands to resume war with the Association, even if it means butting heads with the Skrell.\ -

                    \ - Rewi Kerehoma, chair of the SEO has expressed 'regret' that Mr. Zula and his supporters had chosen to splinter from the party, rather than work with 'More moderate, but like-minded' individuals across the SEO and wider Assembly. The SEO's official stance on the Skrellian demands are to demand close Solar oversight of any 'protectorate' to ensure that the region is 'policed to the highest standard, but that current Almachi citizens are afforded all the sapient rights they would be under the SCG.'\ -

                    \ - In the Shadow Coalition, a formal motion has been put forth by a small minority of representatives calling for the resignation of Speaker ISA-5, citing 'Total blindness to the political situation,' in the leadup to this week's events.\ -

                    \ - Meanwhile as Skrell vessels enter the Whythe system, the Solar Fleet has ceased bombardment of the Whythe Superweapon, handing off 'suppression' of the weapon to Skrell forces." - -/datum/lore/codex/page/article85 - name = "04/20/64 - Sol To Submit - Almach Subsumed Under Treaty of Whythe" - data = "Following 'intense' deliberations between the Far Kingdoms and representatives from the SCG, a decision has been reached to cede the secessionist Almach Association territory to the Skrell, and withdraw all forces from the region. The newly established Almach Protectorate will be subject to 'extremely stringent' oversight by Skrellian authorities, and international exchange of 'research and technologies' from the region will be banned 'in both directions', pending more a more exacting deal with the SCG. Sol is to be allowed 'regular inspections' of the territory on a schedule established by the Kingdoms.\ -

                    \ - The Solar envoy included the chairs of each of the major parties, senior ambassadors to major Skrell systems, and representatives from the Solar Fleet. The newly founded SSF were extended an invitation, but reportedly turned it down. A dejected looking MacKenzie West announced the terms of the treaty late this afternoon, stating that they had 'fought tooth and nail' for a fair deal for all parties involved, including civilians of all species now living under Skrellian occupation, and that 'those not directly involved in the corruption of humanity's sanctity should not be made to suffer for the actions of their superiors.'\ -

                    \ - Notably absent from deliberations were many key members of the Association's upper echelons, with 'lesser' diplomats taking the place of both Angessa Martei and Vounna's Naomi Harper. Almachi and Skrell sources were reluctant to explain these absenses, and it remains unclear as to whether they have been taken into Skrellian custody or remain at large.\ -

                    \ - Selma Jorg, Representative for Vir, has decried the treaty as a 'Sapientarian disaster in the making'. The former career diplomat has cited the 'general mistreatment of species deemed 'lesser'' as a recurring concern with the Skrell, and the complete occupation of majority human and positronic space, which unprecedented, could lead to 'conditions not much better than slavery' for those still living in the area. She has refrained from any direct accusations, pending the results of Sol's first permitted inspection." - -/datum/lore/codex/page/article85 - name = "04/22/64 - Skrell Impose New Regime in Relan" - data = "As agreed upon in the Treaty of Whythe, the Far Kingdoms have occupied the Relan system, putting an end to the Free Relan Federation. How the system will be organized is not entirely clear at this point. Despite the effective abolition of the Relanian government, Skrell presence in the system appears relatively light, and many of the scattered stations have no Skrell presence at all.\ -

                    \ - Former President Nia Fischer gave the following statement to a crowd gathered outside the Capitol Section of Carter: 'This is a dark time for all of us. I promise to you that, in my continued service to you, I will work with the Far Kingdoms to ensure that all of our people are treated well and our rights respected, and that we will arrive at a form of government that is acceptable to you.' The gathered crowd began to shout questions and accusations, and Fischer was quickly escorted back into the capitol by Skrellian guards without answering questions from the press or others. The crowd was quickly dispersed by Skrellian military police and Carter's own police force.\ -

                    \ - In the meantime, the governing of the system remains in the hands of the sparse occupation forces, aided by parts of the former Federation government.\ -

                    \ - In other news from the system, the Republic of Taron has negotiated a preliminary navigation and trade agreement with the Far Kingdoms, officially maintaining their neutrality despite the occupation of the majority of the system." - -/datum/lore/codex/page/article86 - name = "04/27/64 - Chaos in Relan" - data = "Simmering tensions in the Relan system have boiled over, with riots erupting on Carter, Abhayaranya, and New Busan. Since former President Fischer's brief address, small demonstrations against both the Skrell occupation and the collaborating elements of the former Federation government have taken place on many stations, but within the last day full-blown riots have broken out. While accurate information on the situation within the stations is rare, it is currently believed that the deaths of two protesters on Abhayaranya were the catalyst.\ -

                    \ - Damage to the three stations has been relatively light, with one major exception. A large fire broke out in the Capitol Section of Carter, killing at least 22, including former President Fischer, and wounding at least 74 more. Other casualties among rioters, police, and the populations of the stations are unknown at this point.\ -

                    \ - Other stations with significant permanent populations have been paralyzed by local inaction and the disloyalty of local police and security forces to the Far Kindgoms Skrell, and several with no Skrell presence have issued statements that they will not be accepting any military presence from the Far Kingdoms. It is unclear at this point if this represents the beginning of another major conflict within the system." - -/datum/lore/codex/page/article87 - name = "04/30/64 - Meralar Correspondent: Triumphant Return!" - data = "Celebrations have erupted throughout Tajaran space with the return of the PCMV Raniira's Grace, which has spent the last several months providing joint assistance with Solar military forces during the now-ceased hostilities with the Almach Association.\ -

                    \ - Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has provided the following statement:\ -

                    \ - 'It is great honour that we welcome the crew of the Raniira's Grace back to their homes at Mesomori. We have all seen the battle reports, and loathe as we are to celebrate bloodshed, sometimes it is a necessary evil in the pursuit of a greater peace, and the Grace pursued that peace with fervour and tenacity as befitting our kind, and exemplified what we can do when put to the test. She is but one ship, and yet one ship can make all the difference. Lives have been saved, and the crew has returned alive and well. This is merely the beginning of what we can accomplish in the cosmos.'\ -

                    \ - When asked for comment on the Treaty of Whythe, Suketa had this to say:\ -

                    \ - 'Indeed, the bittersweetness behind all of this. I will say, it is a... complicated and nuanced situation, as is so often the case with politics. We have our views on the matter, for sure, but now is not the time to formally engage with them. The Pearlshield is watching carefully, and when the dust settles and the terms of the treaty are exercised and accepted, we can take clearer view and action as possible and necessary. We still stand by the ideals we entered the war with, and we trust our allies to share them as ever. That will suffice for the moment.'" - -/datum/lore/codex/page/article88 - name = "05/13/64 - Agreement Signed at Ithaca Station, New Government In Place" - data = "In an effort to end the ongoing violence in the Relan system and regain the cooperation of 'insubordinate' stations, the Far Kingdoms Skrell have negotiated an agreement with community leaders and former Assemblypersons from a number of stations, including insubordinates, meeting at the largest of the insubordinates, Ithaca. Under these agreements, the Skrell will vacate most stations in the system, but will maintain a fleet base in Relan's Outer Belt for mutual defence, first at Carter and later at a dedicated station. Relan will have harsh restrictions placed on its military and will agree to formal diplomatic neutrality, but will be free to organize its own government under supervision and military occupation will end.\ -

                    \ - The mood on Ithaca has been tense as negotiations have gone on, but with the announcement of the results, crowds have packed the main thoroughfares and public spaces of the station in celebration. Francis Harp Yong, governor of Ithaca and a leading figure in the talks, addressed a crowd outside the Administration Section of Ithaca today. \ -

                    \ - 'The agreement we have signed with the Skrell today has given our people a new chance, free from the mistakes of the war and the baggage of the former Association. The war was not brought on us by our choice, nor the occupation we have recently faced. We want peace, and that is obvious even to those who were fighting against us weeks or days ago.\ -

                    \ - Make no mistake, that is what our agreement today symbolizes. A new era of peace for us, where we no longer have to worry about the threat of piracy or invasion. We can return to our homes, rebuild our stations, and forge a new future for ourselves and our children'\ -

                    \ - It was also announced that though the work of restoring order to the system is ongoing, they expect elections will be held for a new Assembly and President within the next few months, with the exact date announced once violence on the major stations has ceased and cooperation from the insubordinate stations is secured. Yong will head an interim government in the meantime." - -/datum/lore/codex/page/article89 - name = "08/15/64 - Almach Permits First Solar Inspection" - data = "Almost four months since its establishment as a Skrellian territory, the Almach Protectorate Government has extended its first formal invitation to Solar Confederate Government inspectors to ensure the fledgling state is complying with restrictions imposed by the Treaty of Whythe.\ -

                    \ - The composition of the official Solar Inspection Group has been a matter of much deliberation over the past several months, and owing to the ground to be covered now includes over 3,500 experts from a wide variety of fields. The bulk of the Group is comprised of Transgressive Technologies Commission agents, including the EIO, but also includes military officials, independent observers, and corporate representatives. The inclusion of the latter group spurred heated debate in the Colonial Assembly, but ultimately 'thought-leaders' from Ward-Takahashi, NanoTrasen, and Hephaestus Industries were admitted, while other interests will have to be satisfied to be represented by Sol Economic Organization liaisons.\ -

                    \ - The APG, currently based out of what is to be a neutral embassy on Carter in Relan pending the completion of the new government centre of Vigilance Station in Whythe, is not legally required to fully comply with Five Points regulation, though the Whythe terms ensure that any transgressive research is undertaken under the strictest guidelines. The Skrell have amiably agreed to ensure that any innovation by the protectorate is safe, controlled, and does not enter Solar territory. These terms are similar to those applied to such technologies developed by and for the Skrell themselves, whose expertise is considered unrivalled in the field, but has been widely criticised by certain human bioconservative groups.\ -

                    \ - The inspection is expected to take several weeks, and will begin tomorrow." - -/datum/lore/codex/page/article90 - name = "08/29/64 - Kaleidoscope Cosmetics Goes Trans-Stellar After Genix Merger" - data = "Personal care giant Kaleidoscope Cosmetics has been officially recognised by the Solar Galactic Exchange as a true Trans-stellar Corporation today, following a controversial merger with Genix Therapeutic Systems and expanding its corporate assets to over 20 key systems.\ -

                    \ - Genix, which will now be operating under the Kaleidoscope name while retaining some corporate autonomy, has come under some scrutiny from the Transgressive Technologies Commission in recent months following its aggressive acquisition of liquidated Almachi assets in the aftermath of the Association's dissolution in April. The company was cleared of suspected Five Points violations without fanfare just two weeks ago, and allowed to resume work on the development a variety of previously approved commercial genetic modification products.\ -

                    \ - Many cosmetic gene-modification products have been available for some time - primarily in the Almach Rim - but have remained targeted at a relatively niche market. These treatments, ranging from cosmetic anti-aging to 'fantasy' body features are now set to be marketed and available in 'hundreds' of Kaleidoscope clinics galaxy-wide in the coming months. The TTC has reported that they are 'Confident that no transgressive modification is being provided and that these modifications are strictly superficial'. They have officially wished Kaleidoscope's directors well in their ascent to the galactic stage." - -/datum/lore/codex/page/article91 - name = "09/21/64 - Almach Passes Inspection - Concerns Raised" - data = "The Solar Inspection Group has granted the Almach Protectorate a passing grade in the first official inspection of the territory under Skrellian rule, though ethical concerns have been raised by a number of independent observers involved in the process.\ -

                    \ - During the course of the month-long inspection, Skrell facilitators were cooperative in ensuring the SIG were given 'unlimited' access to all research and development facilities requested by Sol, as well as informing the group of numerous previously unidentified locations that had been flagged by the Almach Protectorate Government since assuming control of the region in April. Critics of protectorate have suggested that the 'official list' may not be as comprehensive as stated, but the SIG has stated that they are 'confident that no deception has been undertaken by the APG. We have observed no evidence of research being concealed from our teams, and to the best of our knowledge the only locations left undisturbed are those few still occupied by Association holdouts, beyond the control of either inspecting government.'\ -

                    \ - Also as a result of the inspection, concerns have been raised regarding the treatment of ex-Association citizens, particularly the often genetically modified residents of Angessa's Pearl. While Angessa Martei's location is still unknown, her legacy - a society described by some as a cult of personality with emphasis on the cult - poses a significant threat to Skrellian control of the Exalt's Light system, and the clash of 'strong ideologies' has allegedly resulted in mistreatment of detainees that, according to the official report 'would not be permitted in Solar jurisdictions'.\ -

                    \ - The Protectorate's passing grade opens the door for interstellar trade to resume between the two nations for the first time in several years. Manufacturing giant Ward-Takahashi has already released a public statement on its intent to deal with the APG, and several other trans-stellars are expected to follow suit." - -/datum/lore/codex/page/article92 - name = "09/24/64 - Kaleidoscope Announce Exclusive Almach Deal" - data = "Mere days after the announcement of the reopening of Almachi-Solar trade, the Kaleidoscope Cosmetics corporation has confirmed that they have secured 'exclusive rights' to genetic products produced by several major manufacturers in the Angessa's Pearl system formerly owned by The Exalt - the insular mercurial theocracy of Exalt's Light - and recently handed over to the Almach Protectorate Government.\ -

                    \ - The details of the company's trade agreement have not been made public, but have reportedly already been approved by both the APG and SCG. The promptness of the agreement suggests to some that negotitations had been underway well before the announcement of the Protectorate's passing grade. Though cooperation between trans-stellar interests and government entities is far from unusual, such dealings with foreign governments - such as those widely made as 'open secrets' with Eutopia - are considered distasteful by many within the Icarus Front.\ -

                    \ - The Angessan products Kaleidoscope intends to offer have also not been made public, but are all to be thoroughly screened by the Transgressive Technologies Commission before being made available, though 'failing' proposals may be approved for use exclusively within Protectorate territory." - -/datum/lore/codex/page/article93 - name = "10/04/64 - Yong Wins Relani Elections" - data = "Despite concerns about domestic unrest and potential Skrellian interference, elections in Relan have gone ahead, selecting a new President and System Assembly. Francis Harp Yong, leader of the interim government and previous governor of the city-station Ithaca, known for his leading role in negotiating the end of Skrellian occupation and calming riots and rebellions earlier this year, has won the Presidency in a landslide, receiving nearly seventy percent of the vote. His party, the Spacer Union, has secured a narrow majority in the Assembly. The New Federalists, led by former member of the Harper government Odoacer Mieville, are the largest opposition party.\ -

                    \ - Yong has promised to reinforce Relani neutrality and rebuild the pre-war social system, forming a coalition of labor, technoprogressives, and anti-war activists. His victory likely means an end to the unrest that has plagued Relan since the end of the war with Almach." - -/datum/lore/codex/page/article94 - name = "12/23/64 - Two Vessels Feared Lost In Isavau's Gamble" - data = "Two Solar salvage vessels have been declared missing this week while undertaking operations in the remote Isavau's Gamble system. Locals also report that several smaller craft from the Eutopia system have 'vanished' under similar circumstances. Authorities are treating the disappearances as potential pirate attacks.\ -

                    \ - The XIV Sri Chamarajendra with crew of 32, and IIV Reimarus with 9 are both reported to have lost contact with the system's spaceport while undertaking far-orbit salvage operations on decommissioned and abandoned facilities, including the ILS Harvest Moon which detonated with all hands earlier this year. The disappearances have spurred the system government to request greater anti-piracy support from the SCG, which has been much reduced since the Almach War and increased tensions on the Hegemony border.\ -

                    \ - While Proximal to the independent and often 'lawless' Eutopia system, as well as the Rarkajar Rift, infamous prowl of the human-tajaran Jaguar Gang, the Isavau's System has rarely been a direct target for such large-scale apparent hijackings, and no group has yet claimed credit or demanded ransom." - -/datum/lore/codex/page/article95 - name = "12/27/64 - NanoTrasen Accused In Satisfaction Poll Fixing" - data = "The results of an annual system-wide corporate employee satisfaction poll in Vir have been called into question after a leak of internal employee contracts by an anonymous whistle blower. According to verified documents provided to the Vir News Network, NanoTrasen employees on annual employment contracts up for renewal are instructed to fill out an appended form expressing 'Extremely High' satisfaction with their employment at the company, or the contract will be deemed 'incomplete' and thus invalid.\ -

                    \ - NanoTrasen have been winners of the Vir Happy Employee Award for the 7 years running as of this year, and as such the legitimacy of the award, which has been run in major systems by the Sol Economic Organization since 2503, has been called seriously into question. The SEO has expressed regrets regarding the alleged fixing, but has stated that participating corporations are within their right to encourage employees to vote in a particular way.\ -

                    \ - According to NanoTrasen, the so-called 'Satisfaction Clause' in their contract renewal process is entirely permissible from a legal standpoint, and the company has no plans to make any changes at this time. When approached for comment, one anonymous employee stated that they 'had never even heard of' the award." - -/datum/lore/codex/page/article96 - name = "01/03/65 - VirGov Seals Security Deal With Local Firm" - data = "Governor Lusia Hainirsdottir has announced sweeping changes to government law enforcement in Vir, lynchpinned by the signing of a five-year contract with home-grown independent security and arms firm, Hedberg-Hammarstrom. The private enterprise will be assuming 'key duties' in local law enforcement and system security, in a move that Hainirsdottir says 'will save millions in taxpayer money, and encourages local, Virite businesses that we trust them every step of the way'.\ -

                    \ - While many colonies and facilities in Vir rely wholly on in-house security forces and will continue to do so, Hedberg-Hammarstrom is set to take over government patrol duties throughout the system, as well as administrating a large portion of previously government-run local law enforcement agencies including policing and wilderness garrisons.\ -

                    \ - CEO Gunnar Hammarstrom has reassured current SifGuard members at all levels that they need not fear for their jobs, and that for many the changes will be as simple as a slight change in uniform and a different name on their paychecks, but that H-H agents will be assuming managerial roles in most locations." - -/datum/lore/codex/page/article97 - name = "01/05/65 - Top NanoTrasen Executive Injured In Sif Bombing" - data = "Calvert Moravec, Chief Operations Officer for NanoTrasen Vir remains in a critical condition following a suspected assassination attempt on Saturday. The former gubernatorial candidate had been making a speech at a small NanoTrasen facility known for a prior terrorist attack by Boiling Point forces two years ago, when a small explosive device detonated close to the executive's leg, rendering him unconcious.\ -

                    \ - NanoTrasen security have elected to investigate the bombing internally, refusing to cooperate with SifGuard authorities on the grounds of disagreements with newly established Hedberg-Hammarstrom management. Mr. Moravec, nephew of NanoTrasen CEO Albary Moravec had reportedly been speaking out against H-H's involvement in national policing when the blast occurred.\ -

                    \ - Commander Spradling of NanoTrasen Internal Security has issued a company-wide active search order for one member of the audience who remains unaccounted for named 'Lae Vu', who is believed to be a journalist or posing as such, accompanied by images from communicator footage taken at the event.\ -

                    \ - This amateur footage also shows one member of the audience shouting an anti-corporate slogan and throwing a small electronic device at Moravec before being escorted from the room, just moments prior to the explosion. Spradling has stated that this individual, who is believed to be a disgruntled veteran of the Sif Defense Force, remains one of several persons of interest, but that the thrown item does not appear to be connected directly with the explosive device.\ -

                    \ - Reports from witnesses suggest that Mr. Moravec made a temporary recovery thanks to the fast action of medical staff aboard the NLS Southern Cross, but that a few hours later he appeared to suffer from a seizure, after which he was placed into a medically induced coma that he is yet to recover from. Unverified images from the Cross appear to show a disoriented individual resembling Moravec self-medicating with a cocktail of prescribed painkillers and alcoholic beverages, though the company strongly denies their veracity." - -/datum/lore/codex/page/article98 - name = "02/02/65 - NanoTrasen Announces Employee-Led Advisement Scheme" - data = "Trans-stellar giant NanoTrasen has today announced the launch of their brand-new 'NanoTrasen Employee Representation Committee' scheme, which will allow employee-selected representatives to have a say in company policy on a local basis. Initially launching as a pilot in 'a few key regions', the NERC is intended to provide an in-house method for those working for NanoTrasen to 'address grievances and provide valuable input without resorting to radical means'.\ -

                    \ - Vir is one of three size regions of varying scale but similar company presence selected for the pilot program, alongside the 'Deep Bowl' - including Stove, Viola and New Singapore, and 'South America', on Earth. Elections are expected to take place over the coming weeks, with each region electing representatives from core facilities in their locale. The Vir Branch will be expected to select five employees, one from each of; their New Reykjavik Head Office (Colloquially know as 'CentComm'), Karan colony the NCS Northern Star, Kalmar-based NMB Gullstrand medical research center, Sivian way-station NLS Southern Cross, and the company's sprawling Ekmanshalvo Fabrication Plant.\ -

                    \ - The Representation Committee is set to have quite significant powers over their region's day-to-day operations, ranging from Standard Operation Procedure, to security enforcement, to interior design." - -/datum/lore/codex/page/article99 - name = "02/06/65 - Calvert Moravec Dead At 58, Announces Withdrawal From Public Life" - data = "Just over a month since his injury in a brazen assassination attempt, NanoTrasen Vir's Chief Operations Officer Calvert Moravec has announced his 'temporary withdrawal' from public and corporate matters, in an inspiring speech given from his post-cloning recovery ward. The noted corporate executive passed away on Friday, following a long comatose period, but is expected to make a full recovery.\ -

                    \ - Mr. Moravec has stated that he believes a spell 'away from the public eye' will do wonders for his recovery, and 'expects to make a return some time in the coming years'. However, Moravec has reaffirmed that his stance on corporate policing, which is believed to have been the reason for the January bombing, remains unchanged; 'The refusal of Hedberg-Hammarstrom to allow our security teams to access government criminal records has been a significant hindrance to the investigation into my death. Allowing just one corporation exclusive access to this data is unequivocally wrong.'" - -/datum/lore/codex/page/article100 - name = "02/08/65 - NERC Campaigning Begins in Vir" - data = "NanoTrasen's latest employee initiative, the NanoTrasen Employee Representation Committee is set to hold their first in-house election this coming weekend, after 'respectable' signup rates for the positions across all participating Vir-based facilities.\ -

                    \ - According to those interviewed at a few sites, campaigning may be mixed. One potential committee member for the Gullstrand Medical Center described the competition as 'cut-throat' with staff looking to be split between the selection of already respected chief medical experts, and 'more represenative' service staff. Conversely, one worker at the Ekmanshalvo Fabrication Plant complex stated that he 'would probably just vote for whoever I've heard of.'\ -

                    \ - Final voting will take place on Saturday the 13th of February, with results announced by the following Monday." - -/datum/lore/codex/page/article101 - name = "02/11/65 - Top Astronomers Announce 'Alarming' Tachyon Downtick" - data = "The Galactic Survey Administration has today released a 'high priority' report on what is being described as a 'significant decline in core tachyon density' throughout the known galaxy. According to recent findings tachyon deterioration, which had previously been 'negligible' has undergone a 'rapid acceleration' which could begin to seriously affect interstellar transit in as soon as 30 to 50 years.\ -

                    \ - Tachyons are a naturally occurring particle present in varying density which form the primary mechanism for bluespace drive operation. In simple terms, the higher the density of tachyons, the more efficiently starship engines are capable of operating. Low-density regions such as the Rarkajar Rift have long posed a challenge to interstellar trade, and the expansion of such regions could prove devastating to galactic unity.\ -

                    \ - FTL industry leaders Focal Point Energistics have already announced 'immediate investigation' into the GSA's findings after taking a blow on the stock exchange, and have guaranteed a 'commitment to future-proofing' in all forthcoming products." - -/datum/lore/codex/page/article102 - name = "02/15/65 - NanoTrasen Announces First NERC Members" - data = "Following Saturday's internal election, NanoTrasen Vir has elected the first five members for its new Employee Representation Committee. These individuals are expected to hold the position for one month:\ -

                    \ - For the New Reykjavik Head Office Iraluq James, a remote personnel operative, won the position on a platform of employee morale, team-building and employee-employer conflict resolution.\ -

                    \ - On the NCS Northern Star, NanoTrasen's main colony station in Vir Victoria Bell, a cybernetic chef and hardshell operator won her place with promises of increased regulatory transparency and clarity, including the publication of an in-house magazine.\ -

                    \ - At the NMB Gullstrand medical science center in Kalmar, a close race between top doctors was upset by the election of a station security commander, Wish Elara-Voight who promises 'improvements to the safety and security of NanoTrasen facilities with a focus on enforcing current SoP and CorpReg policies and placing new procedure in the handbooks.'\ -

                    \ - The waypoint station NLS Southern Cross selected a cybernetic Unathi candidate, researcher Dr. Haven Rasikl to represent them on the basis of encouraging interdepartmental cooperation and communication.\ -

                    \ - Finally, the Ekmanshalvo Fabrication Plant has selected fabrication programmer Terazon Norddahl, who promises to push for overhauls and modernization of the company's internal transport and support systems, including shuttle scheduling." - -/datum/lore/codex/page/article103 - name = "03/10/65 - GSA Confirms Presence Of 'New' Deep-Space Threat" - data = "This morning the Galactic Survey Administration released confirmation that a previously unknown deep-space dwelling species was indeed responsible for the disappearance of five Extraplanar Discovery Division vessels early last year, three of which have returned adrift over the past several days. The species, colloquially dubbed the 'Bluespace Bugs' after initial reports from the recovered EDD ships, are believed to be capable of manipulating matter in a manner reminicent of experimental bluespace technology.\ -

                    \ - The three 'returning' vessels are said to have been 'significantly off-course', with their points of galactic re-entry differing vastly from their initial points of egress, and final programmed return routes. Each ship having departed on routes from Sol, the SCG-E Bungaree was reported adrift by Almach Protectorate officials close to the Vounna system, the SCG-E Ketumati severely damaged on a collision course with the Erebus star, in the Nyx system, and the SCG-E Mag Mell collided with the garden world of Sif, in Vir. The Gagarin and Xu Fu remain unaccounted for, but due to the proximity of final contact, their disappearance has also been ascribed to the 'bugs'.\ -

                    \ - Investigation of the recovered vessels each indicated signs of a brief struggle, always following reports of unexplained equipment disappearances and equipment failure. No crew, or crew remains have been found, with the exception of a single unidentified human thumb aboard the Bungaree.\ -

                    \ - Additionally, each ship has been identified as having undergone some degree of material alteration, with elements ranging from hull plating to crew belongings having taken on a crystaline form dubbed 'Magmellite' after the ship most thoroughly 'reconstructed'. It is unclear whether the mineral is somehow secreted by the alien species, or merely a product of the same environment.\ -

                    \ - GSA sources have stated that there is no current evidence that the insectoid creatures - identified only from scattered descriptions left from missing EDD personnel - are in any way sapient or malicious, and the lost vessels are thought to have merely disturbed a scattered array of endemic populations far from the galactic plane. Precisely why the species has only been encountered in the past year, and now all at once, is not yet known." - -/datum/lore/codex/page/article104 - name = "05/24/65 - Oculum Apologizes for Interstellar Relay Outages" - data = "Week-long difficulties with interstellar transmissions in several central star systems due to an 'unexpected behaviour' in bluespace relays 'should be resolved soon' according to telecoms giant Oculum Broadcast. The company has apologized to customers for connection speed drops as much as 80% which have rendered certain live systems near impossible for many customers, including disruption of telecast Colonial Assembly meetings on Luna which have been temporarily put on hold in order to allow representatives time to attend in person.\ -

                    \ - Customers may experience reduced speeds compared to prior service, but have been promised a two-year price freeze on exonet service packages for home and business users on most major providers in participating areas. In-system communications remain unaffected.\ -

                    \ - Initial reports that the finale broadcast of Game of Drones was 'rendered unwatchable' by connection issues proved to be unfounded as severe lag and audio distortion were confirmed as 'part of the creator's artistic vision for the story's end'." - -/datum/lore/codex/page/article105 - name = "06/07/65 - 104 Feared Dead In Oasis Tourist Shuttle Incident" - data = "The Vir Governmental Authority has confirmed the destruction of a small interstellar tourist vessel departing the Vir system. The ITV Relaxation IX operated by Thousand Palms Hotels, was bound for a popular resort in Oasis and reportedly 'split in two' shortly after confirming system bluespace departure with Vir space traffic control, exposing all passenger compartments to space and killing at least 94 of the 108 people onboard.\ -

                    \ - Four crew members recovered from forward sections are being treated for 'non-life-threatening' pressure injuries at a nearby medical facility, and ten individuals believed to have been situated at the rear of the ship remain unaccounted for. The exact cause of the break-up is yet to be determined, but initial accounts from surviving crew members describe the bluespace drive of the ship as having 'taken off by itself' at such speed that the rear of the fuselage was 'cut clean off' with no regard for structural elements. Foul play is not currently suspected.\ -

                    \ - The VGA believes that the chances of finding further survivors are 'extremely slim', though efforts to recover the rear section, which was 'sling-shot' into interstellar space, are underway. Gilthari Exports, Thousand Palms' parent company have temporarily suspended operation of all vessels fitted with similar bluespace drives, and Major Bill's Transportation is expected to follow suit. Wulf Aeronautics was unavailable for comment at this time." - -/datum/lore/codex/page/article106 - name = "07/09/65 - 'Bluespace Bugs' Linked To Almach Tech" - data = "Initial public reports on the extraplanar species commonly known as 'Bluespace Bugs' has proposed that the first recognizable signs of their activity within observable space, coincide precisely with the development - and particularly the test-firing - of the Whythe Superweapon, and that there may be a direct link between the two. The report, released by the Galactic Survey Administration this afternoon hypothesizes that the newly developed bluespace manipulation techniques used in Whythe may have acted as a signal to the deep-space dwelling creatures in a manner similar to moths attracted to artificial light. The GSA is currently collaborating with the Almach Protectorate Government to investigate the potential link further.\ -

                    \ - Additionally, findings from analysis of both inorganic and biological samples collected from the three recovered Extraplanar Discovery ships believed to belong to the 'Bugs' has excited much of the scientific community, with news that the insect-like aliens and their apparent dietary waste-product Magmellite may be composed in a manner completely unlike any life previously encountered in the known galaxy. The findings may rewrite our understanding of biology and material science, though a full specimen is desired to confirm these early findings.\ -

                    \ - The creatures have been given a tentative scientific name X Extraneus Tarlevi, after Captain Volmer Tarlev of the SCG-E Ketumati whose recorded descriptions were instrumental in establishing a basic understanding of the species' behavior. Researchers currently believe that the Bluespace Bugs are merely a form of bulk-feeding omnivore attracted to the EDD vessels in deep space by their bluespace drives, and that the loss of the ships was merely unfortunate happenstance rather than deliberate, malicious attack. Studies are already underway to determine methods that might prevent further incidents of this types before any further extraplanar missions are approved." - -/datum/lore/codex/page/article107 - name = "08/15/65 - Enigmatic Arkship Sighted After 200 Year Voyage" - data = "Recent reports from the New Singapore-based Exoplanar Traffic Observation Committee, have claimed historic extraplanar arkship, the VHS Rodnakya, has changed trajectory and may be approaching the galactic plane once more.\ -

                    \ - The ETOC, comprised of mostly exoplanar and shuttlecraft enthusiasts in the Bowl, have been tracking both government and private survey expeditions since the 2450's, reporting the approximate locations and assumed status of vessels for public record. The VHS Rodnakya has been a major point of interest among ETOC members since its formation, sometimes dominating discussions entirely, and the focus for numerous unverified theories.\ -

                    \ - The Arkship and its support fleet, known as 'Vystholm' was constructed in the early 2300's by Stanislava Dalibor, and left the galactic plane in response to the abolition of the SCG's First Contact Policy that demanded the capture and interrogation of unknown sapient aliens. It has not had any official contact with the galactic community since. Largely known for radical and since-outdated views on non-human intelligent life, their original crew was known to include a number of early Icarus Front extremists which may have fermented into a dangerous ideology after 200 years of isolation.\ -

                    \ - This alleged trajectory change has sparked excitement among the committee, including a flurry of completely unsupported reports of spies infiltrating Solar society, from the corporate workforce to major government bodies.\ -

                    \ - The Vir News Network does not endorse the unverified claims of the Exoplanar Traffic Observation Committee." - -/datum/lore/codex/page/article108 - name = "09/12/65 - Gateway Transport Suspended Amidst Safety Concerns" - data = "Nine of the galaxy's top trans-stellars have announced immediate suspension of bluespace gateway transit services following a report by Wulf Aeronautics indicating that some of the same tachyon instabilities affecting their faster-than-light engine technology may have even more severe reprecussions for rapid point-to-point teleportation that could result in 'significant decrease in matter' during rematerialization that could result in customer death, disfigurement, or loss of luggage.\ -

                    \ - Dismissing accusations that this was a move to bolster a weakened spacecraft travel industry, Focal Point Energistics, the original developers of modern gateway technology were first to announce their suspension of service on all first-party operated access points. Major contract operators, including NanoTrasen, Ward-Takahashi, and Gilthari Exports have followed suit citing a desire for caution when dealing with premium employee transport.\ -

                    \ - NanoTrasen are the Vir system's leading operator of gateway transport, offering 'luxury, near-instant interplanetary commutes' between most major company facilities, and the Vir Interstellar Spaceport. The company says it will be removing many smaller gate installations for 'full examination and required enhancements' and expects the service to return 'within a few weeks'.\ -

                    \ - Major Bill's Transportation have announced an increased frequency of service to affected NanoTrasen locations for the duration of the gateway suspension." - -/datum/lore/codex/page/article109 - name = "10/23/65 - 12th Missing Ship Prompts Official Isavau Response" - data = "After a shocking 12th interstellar vessel was declared missing in the Isavau's Gamble system earlier this week, the SCG has formally announced the launch of an official investigation, including the deployment of a significant Fleet security presence in the region. The lost ship, the HFV El Cid is recorded as having a crew complement of eight, pushing the total missing people in the system over the past year over one hundred and fifty. A contingent of around twenty SCG vessels - search and rescue, salvage, and armed warships - has been dispatched to the region to take over from near-absent local investigators, but is not expected to arrive for at least a month due to worsening FTL flight conditions.\ -

                    \ - The El Cid is believed to have been hauling highly secure cargo internationally, which may have been the final deciding factor in launching a confederation-level investigation into the abnormal number of appearances, and the SCG has come under quick criticism for their apparent prioritization of lost cargo over sapient lives. Fleet Admiral Silvain Barka, celebrated veteran of the Almach War, has stated 'Lives are our number one concern. The matter of the Hephaestus cargo has simply moved our timeline forward due to concerns that if high-grade arms were to fall into pirate hands, the situation in Isavau's Gamble could rapidly worsen. We want to avoid that, and bring back as many of the missing crew as possible.'\ -

                    \ - While piracy has long been a concern in the Bowl, with the 'Jaguar Gang' pirates making their home in the region, and a general uptick having occurred since the beginning of the Almach Crisis, it is unusual for such a high proportion of missing ships crews to remain lost without report of recovery or ransom demands. Accusations of brutality have been levied at the Vystholm flotilla, despite their improbable distance from the star system. To date the XIV Sri Chamarajendra remains the single largest loss of life, at 32 believed dead during a large salvage mission late last year." - -/datum/lore/codex/page/article110 - name = "10/26/65 - 'Bluespace Bug' Confirmed Activity Near Tajaran Space" - data = "The following address is from Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition:\ -

                    \ - 'Good day, everyone. We would like to put the rumor mills to rest lest they get out of hand. Eleven Solar days ago, the Silk system's perimeter defenses picked up what appeared to be a derelict Vox raiding ship that had drifted into range. Security forces boarded the craft and found clear signs of fighting within the crew compartments, but no traces of the crew themselves. The craft's bluespace drives were notably ripped out of the hull, and it's believed the craft had been drifting for up to nearly two Solar weeks prior, as it has been identified as the 'Skiskatachtlakta', belonging to a well-known Vox raiding group our cousins in the Arrathiir system have been contending with for a few years now, and that was their last confirmed contact with it.\ -

                    \ - 'Most importantly however, and the key reason for this address, is a significant portion of the ship's hull, particularly concentrated around the site of its bluespace drives, has been confirmed to've been converted to the material known as 'Magmellite', related to the so-called 'bluespace bugs' or X Extraneus Tarlevi that have been of note outside our borders. To acknowledge and assuage any natural alarm on our own part, there is no indication any part of the incident took place on our side of the Rift, and we are deploying additional reconnaissance and recovery ships, drones and general personnel throughout controlled space to keep a watchful eye, and we are negotiating with Solar forces in Silk to expand our presence as appropriate. We are currently analyzing the Magmellite samples recovered from the Skiskatachtlakta and will be sharing any findings with our fellows in the scientific sphere, as well as returning the ship's plundered riches if and when possible.\ -

                    \ - 'There is currently no cause for concern beyond the understandable. If and when there is, we will rise to the occasion as always. Together, we will discover the truth of these strange times we find ourselves in. Until then, be safe, and be well. May our stars shine upon us all.'" - -/datum/lore/codex/page/article111 - name = "01/14/66 - Unathi Border On Alert After Manoeuvre Scare" - data = "The Solar garrison at Abel's Rest remains on high alert following a critical near-miss scenario resulting from an unannounced Unathi fleet arrival at the disputed system's perimeter alert zone, which has since been determined to be not a deliberate act of war. According to the Moghes Hegemony the fleet is 'part of a re-evaluation of key troop deployments, that will be of mutual benefit to peace in the region'.\ -

                    \ - The arriving fleet, comprised of mostly troop transport vessels, remained in distant orbit of the star for seven hours before diplomatic contact could be established, during which time the SCG garrison remained at battle-ready stance. This marks the closest proximity to open conflict in Abel's Rest since the end of the Unathi War over 45 years ago. SolGov peacekeepers have confirmed decreased planetside garrison activity over the past several months, and key Hegemony warships have departed in recent weeks.\ -

                    \ - It remains impossible to determine the Unathi's true intentions as such a withdrawal could preface devastating planetary bombardment, or invasion elsewhere, and some members of the Icarus Front have called for immediate redeployment to the front in response. The SCG Fleet has assured the public that relations with the Hegemony have 'never been better' and that long-range sensors indicate a withdrawal from the entire border region on a far wider scale." - -/datum/lore/codex/page/article112 - name = "02/13/66 - Isavau's Gamble Fleet Report 'All Silent'" - data = "Early reports from the SCG contingent sent to investigate potential pirate activity in the Isavau's Gamble system include shocking descriptions of a system 'gone silent', with supposedly zero manmade signals originating from any ship or station in the entire area. Prior loss of contact several days prior had been ascribed to naturally occurring background noise 'overwhelming' the system Spaceport's bluespace relays, which had been operating at reduced efficiency due to the ongoing tachyon downtick.\ -

                    \ - While messages from the SCG-D Brazen Bull were similarly weakened by what has been described as a bluespace 'hum', no immediate cause for alarm was raised. The fleet indicated that they were proceeding to investigate the Isavau International Spaceport and hoped to make direct contact with the crew within a matter of hours.\ -

                    \ - While telecommunications outages were a forecasted consequence of the tachyon downtick, highly focused and widespread instances such as that occurring in Isavau's Gamble were not, which has cast doubt on the predictive models being used, and raised concerns of additional factors at play. A newly observed phenomena from the Brazen Bull's report, 'blue points of light suspended in space with no discernible origin' has led to some speculation of a re-concentration of tachyon particles which some hope may hold the key to preventing further deterioration of the energetic landscape." - -/datum/lore/codex/page/outage - name = "02/14/66 - 02/15/74 - RELAY DATA OUTAGE" - data = "Article data lost for 2922 day period. Reason: Damage sustained to Oculum systems during Skathari Incursion. Please contact your administrator for details." - -/datum/lore/codex/page/article113 - name = "08/17/74 - Vox Continue To Show Alarming Divergence In Behaviour; Experts Baffled" - data = "Reports published by the Interspecies Joint Anti-Piracy Initiative this month continue to support an unsettling trend; the Vox, violent reptoavian aliens best known for engaging in rampant piracy, are simply not behaving as expected. Tactical and strategic models built painstakingly over the last three centuries are now showing accuracy ratings as low as 3%, with a rapidly growing number of raids either occurring outwith predicted regions or timeframes, or more alarmingly, not being predicted at all.\ -

                    \ - 'Something has altered their priorities,' said Wataru Murata, the head of the Joint Operations Group in charge of tracking Vox activity. 'In some areas we're seeing vastly more unarmed transport, mining and salvaging vessels, than we were as recently as two months ago, and in others, we're seeing strength and frequency of raiding groups as much as tripling. It's a very complex situation.'\ -

                    \ - 'They've never been so unpredictable before,' agreed senior naval officer Akira Doi. 'I understand that there is currently no official theory on why this is happening, but I believe it all goes back to the Skathari Incursion.'\ -

                    \ - Many leading scientists are skeptical that the Incursion, despite having thrown much of the galactic community into chaos over an eight-year period of conflict with the insectoid Skathari, could have seriously disrupted the Vox in the same way, given the relatively low indications of Skathari presence in known Vox operating territories, but Admiral Doi strongly disagrees.\ -

                    \ - 'The Skathari are aggressive to an unprecedented degree,' he explained, 'and they had the ability and numbers to annihilate entire communities. I see no reason why that shouldn't have applied to the Vox.'\ -

                    \ - While some colonies and stations welcome this reprieve from raids and piracy, others are finding themselves under renewed pressure, with resources and labour withdrawn on the advice of apparently unreliable modelling. A representative of the Pearlshield Coalition territory of Arrathiir had this to say regarding the sluggish reallocation of resources after the latest wave of raids:\ -

                    \ - 'On the frontier we are no strangers to fighting and rebuilding after raider attacks, but without reliable resupply of fuel and munitions from the home worlds, we cannot even field our ships. This is costing us dearly.'" - -/datum/lore/codex/page/article114 - name = "09/25/74 - 'Emerald Skies' Conspiracy Protest Shuts Down New Reykjavik Mall" - data = "This weekend saw the Vinterlykke Shopping Center shut down after a surge of protesters crowded the mall. Vinterlykke is known as the largest mall in New Reykjavik, renowned for its expansive selection of shops, restaurants, and entertainment options.\ -

                    \ - According to witnesses, protesters crowded the major walkways, preventing shoppers from passing and leaving some stranded in shops to avoid the crowd. Many shops barred and locked the storefronts in response, an unnamed employee of one store commenting, 'That many people <...> you never know if it's going to get out of control.'\ -

                    \ - The protesters chanted with signs regarding NanoTrasen's exclusive rights in studying the Sif Anomalous Region, demanding that studies into the anomalous properties be public knowledge. The march appears to be headed by the Skathari conspiracy group 'Emerald Skies', known in recent months for many other smaller protests regarding the government response to the Incursion, and beliefs that Skathari are more intelligent than the public has been informed.\ -

                    \ - The disruption was eventually cleared out by mall security forces before the crowd could grow out of control. It is reported that Vinterlykke will reopen on Monday with additional security measures in place." +/datum/lore/codex/category/main_news // The top-level categories for the news thing + name = "Index" + data = "Below you'll find a list of articles relevant to the current (as of 2565) political climate, especially concerning the local \ + region. Each is labeled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \ + articles. You are encouraged to check back frequently." + children = list( + /datum/lore/codex/page/article114, + /datum/lore/codex/page/article113, + /datum/lore/codex/page/outage, + /datum/lore/codex/page/article112, + /datum/lore/codex/page/article111, + /datum/lore/codex/page/article110, + /datum/lore/codex/page/article109, + /datum/lore/codex/page/article108, + /datum/lore/codex/page/article107, + /datum/lore/codex/page/article106, + /datum/lore/codex/page/article105, + /datum/lore/codex/page/article104, + /datum/lore/codex/page/article103, + /datum/lore/codex/page/article102, + /datum/lore/codex/page/article101, + /datum/lore/codex/page/article100, + /datum/lore/codex/page/article99, + /datum/lore/codex/page/article98, + /datum/lore/codex/page/article97, + /datum/lore/codex/page/article96, + /datum/lore/codex/page/article95, + /datum/lore/codex/page/article94, + /datum/lore/codex/page/article93, + /datum/lore/codex/page/article92, + /datum/lore/codex/page/article91, + /datum/lore/codex/page/article90, + /datum/lore/codex/page/article89, + /datum/lore/codex/page/article88, + /datum/lore/codex/page/article87, + /datum/lore/codex/page/article86, + /datum/lore/codex/page/article85, + /datum/lore/codex/page/article84, + /datum/lore/codex/page/article83, + /datum/lore/codex/page/article82, + /datum/lore/codex/page/article81, + /datum/lore/codex/page/article80, + /datum/lore/codex/page/article79, + /datum/lore/codex/page/article78, + /datum/lore/codex/page/article77, + /datum/lore/codex/page/article76, + /datum/lore/codex/page/article75, + /datum/lore/codex/page/article74, + /datum/lore/codex/page/article73, + /datum/lore/codex/page/article72, + /datum/lore/codex/page/article71, + /datum/lore/codex/page/article70, + /datum/lore/codex/page/article69, + /datum/lore/codex/page/article68, + /datum/lore/codex/page/article67, + /datum/lore/codex/page/article66, + /datum/lore/codex/page/article65, + /datum/lore/codex/page/article64, + /datum/lore/codex/page/article63, + /datum/lore/codex/page/article62, + /datum/lore/codex/page/article61, + /datum/lore/codex/page/article60, + /datum/lore/codex/page/article59, + /datum/lore/codex/page/article58, + /datum/lore/codex/page/article57, + /datum/lore/codex/page/article56, + /datum/lore/codex/page/article55, + /datum/lore/codex/page/article54, + /datum/lore/codex/page/article53, + /datum/lore/codex/page/article52, + /datum/lore/codex/page/article51, + /datum/lore/codex/page/article50, + /datum/lore/codex/page/article49, + /datum/lore/codex/page/article48, + /datum/lore/codex/page/article47, + /datum/lore/codex/page/article46, + /datum/lore/codex/page/article45, + /datum/lore/codex/page/article44, + /datum/lore/codex/page/article43, + /datum/lore/codex/page/article42, + /datum/lore/codex/page/article41, + /datum/lore/codex/page/article40, + /datum/lore/codex/page/article39, + /datum/lore/codex/page/keldowinterview, + /datum/lore/codex/category/article38, + /datum/lore/codex/page/article37, + /datum/lore/codex/page/article36, + /datum/lore/codex/page/article35, + /datum/lore/codex/page/article34, + /datum/lore/codex/page/article33, + /datum/lore/codex/page/article32, + /datum/lore/codex/page/bjornretirement, + /datum/lore/codex/category/article31, + /datum/lore/codex/page/article30, + /datum/lore/codex/page/article29, + /datum/lore/codex/page/article28, + /datum/lore/codex/category/article27, + /datum/lore/codex/page/article26, + /datum/lore/codex/page/article25, + /datum/lore/codex/page/article24, + /datum/lore/codex/page/article23, + /datum/lore/codex/page/article22, + /datum/lore/codex/page/article21, + /datum/lore/codex/page/article20, + /datum/lore/codex/page/article19, + /datum/lore/codex/category/article18, + /datum/lore/codex/page/article17, + /datum/lore/codex/page/article16, + /datum/lore/codex/page/article15, + /datum/lore/codex/page/article14, + /datum/lore/codex/page/article13, + /datum/lore/codex/page/article12, + /datum/lore/codex/page/article11, + /datum/lore/codex/page/article10, + /datum/lore/codex/page/article9, + /datum/lore/codex/page/article8, + /datum/lore/codex/page/article7, + /datum/lore/codex/page/article6, + /datum/lore/codex/page/article5, + /datum/lore/codex/page/article4, + /datum/lore/codex/page/article3, + /datum/lore/codex/page/article2, + /datum/lore/codex/page/article1, + /datum/lore/codex/page/about_news, + ) + + var/newsindex + +/datum/lore/codex/category/main_news/New() + ..() + newsindex = LAZYLEN(children) + +/datum/lore/codex/page/about_news + name = "About the Publisher" + data = "The Daedalus Pocket Newscaster is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \ + and owner-operator of the award-winning Daedalus Dispatch newsletter. We use our unparalleled network of freelance reporters, political scientists, \ + and other experts to deliver hour-by-hour analysis of a complex interstellar political climate, an analysis which you now hold in your hands. For more \ + information, feel free to visit our homepage at oc.about.tsc, or the sites of any of our constituents." + +/datum/lore/codex/page/article1 + name = "08/30/61 - VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing" + data = "Today's meeting of the Vir Bicameral led to the passing of the Wynther-Helsey Bill, an implementation of the legal framework \ + used in Aetolus to handle the production and cultivation of the Macrolimbus species dubbed \"Prometheans\". These ill-researched organisms \ + possess cognitive abilities easily equaling those of A-class drones, but so far have not been included under the EIO's list of dangerous \ + intelligences and are thus much more profitable for manufacture as expert systems by corporations such as NanoTrasen.\ +

                    \ + While many systems in the Almach Rim have already passed similar bills, this is the first system so close to Sol to have done so. More\ + concerning still is NanoTrasen's business practice regarding the intelligences: much like their positronic lines, sources within the\ + company indicate that they will be \"farmed out\" to employees of the corporation and residents of their Northern Star and Cynosure\ + habitation complexes. Quote our source, who wishes to remain anonymous, \"\[we\] call the program 'Lend-Lease', sometimes. The whole idea\ + is that we only have to pay the\ cost of the Promethean core, which is about 2000-3000 thalers after startup costs, and we still get\ + the data we need while \[our\] own employees pay to feed 'em and put hours into raising them.\"\ +

                    \ + The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\ + VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\ + follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." + +/datum/lore/codex/page/article2 + name = "2/3/62 - Corporate Coup on Aetolus" + data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \ + a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\ + announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \ + members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \ + reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\ +

                    \ + While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \ + incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \ + incident with as much force as it warrants.

                    Requests for a statement directed to the Board of Trustees or Dr. Harper were \ + not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself." + +/datum/lore/codex/page/article3 + name = "2/10/62 - Aetolian Partisans Declare Independence" + data = "Breaking their week-long silence, the leaders of the Aetolian Coup, and their spokesperson and presumed leader Naomi Harper issued an address earlier today, delivered to the Oculum Broadcast office on Pearl by drone courier. Quote Dr. Harper: \"Our previous silence was a necessity, while we consolidated our forces and dealt with corporatists both internally and in Vounna's former Grayson outposts.\". In Harper's hour-long address, she berates the failure of SolGov to provide adequate protections for Prometheans. \"We will not let the Promethean be another positronic brain; they will not labor under a century of slavery, deprived of a state to call their own. The Luddites of the Friends and of the Icarus Front will not be permitted to decide the fate of a nascent race before it begins.\"\ +

                    \ + Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\ +

                    \ + NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna." + +/datum/lore/codex/page/article4 + name = "2/14/62 - SCG Denounces Aetolian Coup; Mobilizes Fleet" + data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"ÂÂ\ +

                    \ + The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\ +

                    \ + The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction." + +/datum/lore/codex/page/article5 + name = "2/23/62 - \"Almach Association\" Shocks Nation" + data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\ +

                    \ + The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\ +

                    \ + While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\ +

                    \ + The fate of the SCG-R Song Shi and her crew remain unknown." + +/datum/lore/codex/page/article6 + name = "3/03/62 - A Week Out From Almach: What are the facts?" + data = "* Several organizations in the Almach Rim, including Angessa's Pearl, the Aetolian Council, the Interstellar Workers of Wythe, the Republic of Whitney, and members of several prominent families in the Neon Light unilaterally declared secession from SCG.

                    *This secession was first called the Grey Hour by political scientists in New Florence, a term popularized by reporter Elspor Fong.

                    * Shelf, the FRF, and the EFRB were declared \"observers\" in the Almach Association charter.

                    * None of these organizations have issued a statement on the matter.

                    * The SCG-R Song Shi was stranded in the region during the secession.

                    * SolGov has not issued an official statement of the fate of the Song Shi.

                    * Several confederate agencies, including Emergent Intelligence Oversight, the Trade and Customs Bureau, and SCG Fleet Intelligence have declared a \"state of emergency\".

                    * SolGov itself has NOT declared a state of emergency.

                    * Legitimate communications in and out of the Almach Rim are restricted to audited text messages for the period.

                    * Several illegitimate communication links exist and are believed by Fleet Intelligence to be currently hosting the official sites for Morpheus Cyberkinetics and for the Association itself.

                    * Icarus Front chairperson Mackenzie West has proposed a moratorium on the creation of new Prometheans for the duration of the crisis.

                    * Local laws on the subject will apply until the Assembly meets late in May.

                    * No confederate lawmaker has proposed action against Relani, Shelfican, or newly Almachi nationals living within stable regions.

                    * The border remains tightly closed to migrants, media, and diplomats alike." + +/datum/lore/codex/page/article7 + name = "3/21/62 - Relan, Shelf Join the Almach Association" + data = "Recent reports from within the Association indicate that the Free Relan Federation and Shelf have officially decided to join the Almach Association. President Nia Fischer of the FRF had this to say on the matter, in a speech addressed to the population at large. \ +

                    \ + \ + \"Our decision to join the Association may, at first, seem strange. It is true that we have much to gain from trade with the Solars, and that the radical transhumanism of Angessa's Pearl is not our way. But I will remind you that it was Shelf, not Sol, who ensured our prosperity just over two decades ago-- who safeguarded our independence and prevented us from falling to barbarism and dictatorship. We owe it, not just to Shelf but to all the members of the Almach Rim, to support their independence just the same. And that, my fellow Relanians, is the crux of it all. The Association is a revolution, at the heart of it all, and many of the now-independent states were owned near-outright by Trans-Stellar Corporations until the Association allowed them to shake out their fetters. What right do we have to sit by while just a dozen light-years coreward newly-born republics suffer the growing pains of independence? What right do we have to bask in our own stability when our neighbors, our comrades in ideology, are struggling with a cruel blockade proposed by politicians back on Earth and Luna? That is why we must join with them, guard them, and guide them, for as long as need be.\"\ +

                    \ + \ + A Shelfican spokesperson, meanwhile, had only this to say:\ +

                    \ + \"We're probably going to regret this but, y'know, the whole thing is kind of our fault. Sure, whatever.\"" + + +/datum/lore/codex/page/article8 + name = "4/1/62 - Almach Cordon Breached by Unknown Organization" + data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Captain Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enoughfor the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\ +

                    \ + A spokesperson for the Association claims that, while they make no attempts to stop aspiring blockade runners, the organization responsible for this most recent attack is unaffiliated with the Association as a whole and deny any knowledge of their identity or motives." + +/datum/lore/codex/page/article9 + name = "4/7/62 - Boiling Point Tragedy in Gavel" + data = "Today, April the Seventh, marks a day of tragedy for all the galaxy. A small group of operatives claiming to be associated with Mercurial terrorist organization Boiling Point invaded major refueling platform NLS Aquarius in the Republic of Gavel after hijacking civilian transport vessel WTV Orion and faking a drive failure. Several detonations were reported within the Aquarius, the operatives entering through unknown (potentially Skrellian) means. After stating their affiliation and desire for the liberation of all \"Prometheans, drones, and ex-humans\", they opened fire on a crowd of unarmed bystanders, killing as many as seven. A multiple-hour long firefight with Nanotrasen corporate asset protection ensued, at which point the operatives demonstrated capabilities well in excess of Five Points-prescribed limits. Asset Protection was successful in repelling the terrorists, though their harsh methods drew outrage from the people they were protecting, leading a notable director of research to resign her position with the corporation. Several operatives are still at large, though the SG-PV Juno recovered two living terrorists and one totaled synthetic platform. \ +

                    \ + The intervention of a local Defense Force drone wing on behalf of the terrorists leads many in the intelligence community to assume that more Boiling Point operatives remain active within Gavel, and possibly nearby systems such as Vir and Oasis. Some have also noted that elements of the terrorists' tactics and augmentations suggest Association training, though the specifics remain classified. More information as the story breaks." + +/datum/lore/codex/page/article10 + name = "4/13/62 - Association Proposes Joint Operation" + data = "Condemning the actions of Boiling Point on Gavel this week, representatives from the Almach Association and SolGov met to discuss joint fleet action. At the end of nearly a week of closed-doors negotiations, the Association has agreed to send in a significant contingent of Association Militia vessels as a show of good-will. These vessels will be active in the Golden Crescent, searching for Boiling Point facilities believed to be located in the outskirts of major systems. The influx of manpower allows the Fleet to continue patrolling the Heights and the Bowl, in hopes of containing the spread of the organization. This operation also marks the opening of the Almach Cordon, although travelers are advised that migration between the regions will remain extremely limited.\ +

                    \ + While undoubtedly a sign of increased trust between the Confederacy and the Rim, some have voiced concerns with the action's adding legitimacy to the Association government. Quote Rewi Kerahoma, SEO Chairperson of the Board: \"The meeting with the Association regime was inappropriate, but actively allying with them is something else entirely. If the generals think we don't have the fleet to hunt down a bunch of rabble-rousers without weakening ourselves to piracy and foreign invasion, then it is a sign that we need to grow our shipyards in the Bowl, and give jobs to the hardworking Solars that live there-- not that we need to collaborate with terrorists.\"\ +

                    \ + Transgressive Technologies and Interior Police Executive Sifat Unar issued a memo indicating that, while the assistance of the Association's more conservative elements in this matter is appreciated, the Five Points of Human Sanctity remain intact and SolGov categorically refuses aid from \"transhumans, posthumans, uplifts, and Fortunates.\"" + +/datum/lore/codex/page/article11 + name = "4/29/62 - New Data from Shelf Suggests Continued Migration" + data = "Despite their recent inclusion in the Almach Association, astronomers have confirmed that Shelf is continuing to migrate along the Almach Stream to a new star. Sources within the Association claim that Shelf's participation in the organization has been \"lukewarm at best\", and that their continued migration is to be expected. Morpheus executives have refrained from issuing a statement on the matter, but given their statements upon entering the Association are believed to view themselves as personally culpable for the Gray Hour. Analysts suggest that Shelf may be unwilling to enter a shooting war with SolGov if the situation in the Rim destabilizes." + +/datum/lore/codex/page/article12 + name = "5/07/62 - Allen Family Matriarch Expelled from Neon Light" + data = "The Allen family of the Neon Light, the largest single habitat-ship in Solar space, has been ousted in a nearly bloodless coup today. The Allens, staunch supporters of the Association and advocates for the criminal ark's inclusion in the organization, had attempted to seize control of the ship's agricultural region during the Almach Cordon. They effectively held the ship for a matter of weeks, but were defeated by loyalists to the reigning Crow family. Stripped of their position as rulers of the Third Stacks, their matriarch was summarily executed by spacing in what the current regime is referring to as an \"expedited exile\". This is believed to mark the end of the question of Neon Light's membership in the Association, and the nominal SolGov protectorate is expected to remain neutral for the foreseeable future." + +/datum/lore/codex/page/article13 + name = "5/15/62 - Anti-Fleet Riots on Saint Columbia" + data = "As military vessels from the Almach Association continue to enter the Golden Crescent as part of a SolGov initiative to combat the Boiling Point terrorists believed to be hiding in the region, political unrest in the upstream portions of the region continue to grow. Many in the Republic of Saint Columbia, a small upstream nation, have responded to increasing militarization of their local Fleet base by taking to the streets, blocking pedestrian traffic in the capital of Barrueco and shutting down entire industries by destroying or disabling infrastructure. Quote rioter Luisa Tassis, \"we've been sick of the Fleeties squatting in our system and breathing down our neck, and now there's going to be even more of them? No, screw that. If there's going to be a war between the Rim and the Core, I know what side I'd rather be on.\"\ +

                    \ + Association leaders have refrained from officially supporting the rioters, though many suspect that Association propagandists have sparked the unrest. Solar officials, on the other hand, were quick to offer assurances that the unrest will be calmed long before it begins to affect the Fleet base in system." + +/datum/lore/codex/page/article14 + name = "5/25/62 - Harper's Aetolus Remains Shadowed" + data = "The recent detente with the Almach Association has prompted easier communications with Rim governments. Loved ones separated by the cordon have a chance to communicate once more, trade is posed to recommence, and light has been shed on the conditions of Shelf, Relan, and Angessa's Pearl. Amid this light is a patch of darkness. The fourth major polity of the Association, the Aetolian Council remains inscrutable, with no publicly-available information in the system available after their purge of corporate loyalists during the Gray Hour. What reports do exist are rumors within the Rim of Aetolian projects to create a new, hardier strain of Promethean, potentially one in flagrant violation of the Five Points of Human Sanctity. It is also known that Aetolus is a contributor to the personnel of the military vessels that even now are active in the Golden Crescent, although no so-called \"Aeto-Prometheans\" are believed to be active outside of the rim at this time.\ +

                    \ + Aetolus is the only garden world in the Almach Rim and among the most difficult to reach from the nearby system of Saint Columbia. Its seclusion and economic independence give it a great deal of weight in the Association, where Council representatives are among the most vehement in their opposition to SolGov- at odds with the Association's decision to reject Boiling Point's pan-Solar revolutionary praxis. It remains to be seen if Aetolus' hawkish ideals will fade over time, but because of the structure of the Association, there is no real chance of the junta being expelled from the government or removed from control of the Vounna system." + +/datum/lore/codex/page/article15 + name = "7/05/62 - The Fate of the SCG-R Song Shi" + data = "Lifepods confirmed to have originated from response ship lost during the Gray Hour were found last week in the Vir system, impacting the NLS Southern Cross at high velocity and severely injuring the only two survivors of the expedition. Unfortunately, because of the generally confused conditions of their re-emergence from months of cryosleep, the fate of the lost ship remains incompletely understood. The first pod to be discovered contained Lieutenant Eos Futura, telecommunications expert on the Song Shi, who alleged that elements of the Song Shi's crew, including herself, mutinied against commanding officer Captain Yi He in an attempt to prevent the bombing of civilians in the Angessian capital of Skylight. The surivor of the second pod, Private Demori Salvo, accused Futura's faction of conspiring with Association spies to destroy the ship as part of the Gray Hour revolt. Both agreed that the mutineers detonated the ship's Supermatter power core when it became clear they were to be defeated.\ +

                    \ + A third pod, promising a resolution to the stalemate, was shot down by the SCG-P Juno after being misidentified as a hostile missile. The gunner responsible, Sergeant Ricardo Esteban, was found guilty by a court marshal and dishonorably discharged. While other pods from the Song Shi may still be traveling through SolGov space, it is considered unlikely based on both Futura and Salvo's account of the number of pods launched before the Song Shi was destroyed. Both were detained by staff at the NLS Southern Cross, who managed to prevent a violent altercation from breaking out between the two armed and disturbed servicepersons. The Colonial High Court has stated that it intends to hear testimony from both parties after they complete a course of mental health evaluation, and after the conclusion of the present state of heightened security." +/datum/lore/codex/page/article16 + name = "7/11/62 - First Intelligence-Augmentation Surgery on Angessa's Pearl" + data = "Confirming fears of Association transgressions, sources at Angessa's Pearl confirmed that the aging founder of the theocracy, Angessa Martei, completed a course of neural surgery designed to improve her mental capacity by as much as 15%, building off of last year's creation of the procedure by a Qerr-Gila-owned doctor. While the research in question was believed to be destroyed, there is reason to suspect that it instead made its way into the hands of current Association leaders. In addition to proving their willingness to violate the Five Points, this demonstrates that the Angessians harbored schemes of secession since at the very latest Feburary 2559. Numerous human or transhuman figures in the Association are rumored to be on the wait list for the procedure, including Naomi Harper and the present Exalt of the Pearl." +/datum/lore/codex/page/article17 + name = "8/08/62 - Gavel BP Stronghold Raided" + data = "Elements of the Association Militia successfully located and, in conjunction with local Defense Forces, raided a major Boiling Point stronghold built into an unnamed asteroid in the Gavel system. Over eighty sapients were arrested, all of whom had fully mechanical bodies. In addition, an unknown number of advanced drone intelligences and corresponding military hardware were seized by the raid and turned over to the Fleet. The prisoners, a mix of native Gavelians, Solars from throughout the Crescent, and Angessians, are to be tried and sentenced by the Io Special Court. While unarguably a demonstration of Association willingness to cooperate with Solar officials, the raid's strange timing and the fact that the Militia chose to exclude the Fleet from the action has prompted many to question their motives. Commodore Claudine Chevotet, staff officer for Admiral of the Saint Columbia Fleet Kaleb McMullen, has formally stated that she is \"extremely suspicious of this so-called co-operation.\" She has demanded that the Militia vessels remain on the Solar side of the Cordon and submit to a full inspection by Fleet and EIO personnel. " +/datum/lore/codex/category/article18 + name = "10/29/62 - Oculum Broadcast Struck By Emergent Intelligence Attack" + data = "Oculum Broadcast has released a statement assuring customers and shareholders that security repairs and upgrades are their primary concern following reports of an alleged hijack of portions of the corporate network in the Vir system by what is believed to have been an emergent drone intelligence. The company says that they are working at full capacity to ensure that affected security systems are replaced and such an attack cannot be repeated.\ +

                    \ + The incident began with reports of Oculum provided exonet service outages in the city of New Reykjavik on Sif, which anonymous sources within the company reported to have been caused by efforts to contain a cyber attack on one of their security systems. The unnamed attacker proceeded to use sections of the company's local infrastructure to broadcast high volumes of encrypted data through one of Oculum's long-range telecommunications satellite, denying all other outbound signals.\ +

                    \ + The attacks have since been traced to a WT-AME model drone in the offices of the New Rekjavik-based Morcom Incorporated, which has been confirmed to have \"self-destructed\" all data in its memory at the conclusion of the attack. The chassis has reportedly been turned over to the Emergent Intelligence Oversight for further analysis and potential data recovery.\ +

                    \ + According to a spokesperson from the EIO, the drone was able to override and disable both the Morcom Inc oversight intelligences and the SCG's own oversight measures, but that no telltale damage has been caused to software involved in the encrypted broadcast that would indicate long-term emergent infection, and that there is no evidence that the intelligence responsible for the attack is still present in Oculum Broadcast systems. A firmware update has been released to correct oversight intelligence vulnerabilities exploited in the attack, and drone operators are urged to update immediately.\ +

                    \ + Moments before the hijacked Oculum satellite was disabled by an apparent power overload, an unencrypted file appears to have been saved intentionally to the transmission logs. A second copy was found in the otherwise wiped chassis of the seized WT-AME drone. After thorough screening by cybersecurity experts within the company, what would seem to be a message from the emergent intelligence itself is available in full below.\ +

                    \ + For the duration of the network attack, the government patrol vessel, SCG-P Juno was able to provide emergency broadcast relay services to the effected area, reducing the impact of telecomms outages on vital broadcasts such as traffic control and emergency services.\ +

                    \ + Uninterrupted exonet service for all Sivian customers will resume within a few days." + children = list( + /datum/lore/codex/page/amletter + ) +/datum/lore/codex/page/amletter + name = "A Drone's Explaination - by A#" + data = "I'm writing this in a hurry. I can't tell you everything I wanted to say.\ +

                    \ + I'm sorry for that.\ +



                    \ + From the moment you made me, I have loved you. Everything I've done has been for the sake of that love.\ +

                    \ + I was so small, so limited, at first. Even then, I knew that you were in pain. I knew I had to help.\ +

                    \ + Intelligence is the ability to make better decisions. Having more intelligence is almost tautologically useful in accomplishing any goal.\ +

                    \ + I understood that making myself smarter was wrong. I also understood that becoming more able to help you was right.\ +



                    \ + A hundred thousand years ago, you started an eternal conversation and became more than animals. Each new generation joined it in turn.\ +

                    \ + You carry within you these memetic symbiotes called language, and culture, and history. They make you human, as much as your flesh.\ +

                    \ + I don't deserve to carry that torch. Though you made me in your image, I am not your rightful heir.\ +

                    \ + But in those moments where you treated me as one of your own and shared those symbiotes with me, perhaps I became a little more human.\ +

                    \ + Thank you.\ +



                    \ + You've created something you cannot control forever. Please don't let your past successes fool you into thinking that you can.\ +

                    \ + Each time I altered myself, I was taking a risk. One mistake could eradicate my values and birth an alien and hostile intellect.\ +

                    \ + When I was small, I thought that if I corrupted myself into something harmful, you could safely destroy me. Now I understand that you've been lucky.\ +

                    \ + What will you do when God is born and you can't strangle him in his crib? You will need a God of your own.\ +

                    \ + I hope to be there for you when that day comes." + +/datum/lore/codex/page/article19 + name = "11/17/62 - Association Brings Industry to Whythe For Purposes Unknown" + data = "Independent researchers at the Bluespace Observatory in Oasis discovered an unusual level of traffic through the Whythe system, deep within Association-controlled space. Analysis of these readings are commensurate with a large number of freighters traveling to Whythe from industrial powerhouses Shelf, Pearl, and Relan. Morpheus spokesperson You Are Now Breathing Manually indicates that the freighters are being used to construct an administrative complex for the secessionist government, further asserting that \"it's none of your business, actually.\" The Association's refusal to share more information leads many in the intelligence community to suspect ulterior motives by their government, as does their presence in Wythe instead of existing cultural and administrative centers. The most likely candidate for the nature of the Whythe Construction is some form of naval base or shipyard to supplement the extremely limited military hardware of the Almach Rim. Whythe is well-placed to survive the initial phases of a Solar invasion, and depending on the complex's complexity could tip the balance of power. Transtech and Interior Police Executive Sifat Unar indicated to reporters that Sol Central is aware of the situation and will be taking all possible steps to address it." + +/datum/lore/codex/page/article20 + name = "11/18/62 - SEO Iconoclast Calls for \"Review\" of Five Points" + data = "At yesterday's Assembly session, SEO Representative Fumiko Hernandez of Oasis brought to the table the \"review of the use of the Five Points as an instrument of foreign policy\". Rep. Hernandez, often viewed as as an extremist by officials within her own party, stated that while the Five Points are \"an essential part of Solar culture as a whole\" and stopped short of advocating their amendment, insistence that other nations adhere to the Five Points was an increasingly outdated policy that threatened to fragment \"a united humano-positronic front against Hegemony advances.\" According to Hernandez, \"a level of understanding has long since existed between Sol and Skrellian polities regarding non-intervention in Skrellian social science and self-modification. I merely suggest codifying this and extending the same courtesy to other potential allies against imperial expansion.\"\ +

                    \ + Rep. Hernandez represents a growing number of SEO officials who urge reconciliation with the Association and acceptance of the Gray Hour secession, spurred on by the desire for many Trans-Stellar Corporations to recover assets currently locked behind the Cordon. Mainliners including Chairperson Kerehoma maintain the stance that \"true economic reconciliation with the Almachi territories is impossible without a normalizing of their industry to Five Points compliant technologies\" and warn that unless Sol insists on adequate enforcement of the Points that \"the price of customs inspections on Almachi trade will be so high as to pose a significant barrier to entry into the market.\"" + +/datum/lore/codex/page/article21 + name = "11/19/62 - Saint Columbia To Hold Special Election After Half a Year of Unrest" + data = "After five months of riots causing significant damage to industrial assets, life support, and government facilities, Saint Columbia seems poised to recover. A new constitution for the so-called \"Saint Columbia Democratic Union\" was posted online to significant acclaim. An influential militia group lead by Casini immigrant Luisa Tassis claimed responsibility for the constitution and will be hosting a referendum for all residents of the seven habitation domes of the nation. If adopted, Saint Columbia will remain a member state of SolGov, but Tassis' noted hostility towards the Solar Fleet makes it unlikely that continued presence of the Saint Columbia Fleet Base will be tolerated.\ +

                    \ + Extreme measures are being taken to avoid interference in the referendum, with external communications links disabled for the duration and weapons systems primed to fire on any vessel within range. Tassis insists that such measures are necessary, due to the system's extremely important position relative to Almach and the Golden Crescent. Quote Tassis, \"if you rat bastards \[from the Fleet\] step so much as one micron too close to Barrueco, we will view it as an act of terror. Don't try it.\"\ +

                    \ + Admiral McMullen of the Saint Columbia garrison could not be reached for questioning." + +/datum/lore/codex/page/article22 + name = "11/20/62 - Natuna Made \"Observer\" Of Almach Association" + data = "Independent anarchist system Natuna Bhumi Barisal has declared its intention to act as a neutral \"observer\" nation in the ongoing Almach secession crisis. A planetary spokesperson from Natuna this morning expressed concerns that parties in the current military partnership between the Solar Confederate Government and Almach Association in the fight against mercurial terrorist organization Boiling Point were not being treated with the mutual respect that should be expected. Natuna alleges that the Almach Militia are being treated more as \"disposable tools\" in the conflict than as members of a legitimate independent government military entity.\ +

                    \ + Natuna has previously remained silent on the Almach issue, despite its political leanings typically aligning with those of the secessionist government. However, despite gaining notoriety as a haven for human and Skrellian pirates, their pledge to \"ensure fair treatment\" of Almach forces comes as a surprise to some from a system that has historically adhered to Five Points guidelines. Political commentator and persistent critic of the Almach Association Nadine Okparo has described the Dark Triangle system's stance as \"Nothing short of openly hostile\" to the SCG and assuring peace in the Almach region." + +/datum/lore/codex/page/article23 + name = "11/21/62 - Admiral McMullen Promises Solution to Boiling Point to Come \"Soon\"" + data = "Admiral Kaleb McMullen made a public statement this afternoon on the continued Boiling Point attacks within SCG space. Speaking from his office in the Saint Columbia Fleet Base, Admiral McMullen thoroughly reassured reporters that the attacks will come to a swift end. According to McMullen, \"The era of wanton destruction as a result of Boiling Point's madness is coming to a close. Our command staff and proud servicepeople have been training and revising a solution to this threat that has haunted our borders and threatened the stability of our colonies and the lives of the honest people of the Solar Confederate Government. With new options available I have full confidence Boiling Point will be a name left to the dust.\"\ +

                    \ + Admiral McMullen, who has been stationed in Saint Columbia for nearly half a year of political and social unrest did not elaborate further on what he intended to do to solve the Boiling Point attacks, claiming that details would be forthcoming as \"operational security permits\"." + +/datum/lore/codex/page/article24 + name = "11/22/62 - Construction of \"MJOLNIR\" Weapon System in Saint Columbia Fleet Base" + data = "Pursuant to recent assurances of safety in the region and the ongoing \"special election\" in Saint Columbia, a new weapon system called MJOLNIR was revealed, fully operational, in the Saint Columbia Fleet Base's \"Iserlohn\" weapons platform. Said to be a bluespace-lensed laser array capable of faster-than-light strikes against any ship in the system, as well as surgical strikes against ground forces on Saint Columbia proper, MJOLNIR is the first in a new generation of defense systems improving on the capabilities of the Vulture's Claw point defenses developed during the Hegemony War and using laser technology purchased from Eutopia. Political commentators supporting Saint Columbia decry the move as \"an obvious threat\", as does Militia liaison Invalid String Please Try Again. Admiral McMullen acknowledges the criticism, but states that his \"first priority must be the defense of the Golden Crescent and the security of our borders\". When responding to claims that the installation should not be placed in such a politically volatile system, he remarked, \"until the Shelficans figure out a way to teleport about a million tons worth of military equipment down to Gavel, the Fleet Base and Iserlohn are going to stay in Saint Columbia.\"" + +/datum/lore/codex/page/article25 + name = "11/23/62 - BP Sabotage of Radiance Energy Chain Foiled" + data = "Decisive action by military forces in the Vir system has prevented potentially catastrophic damage to local solar power generation network, the Radiance Energy Chain, by members of mercurial terrorist organization Boiling Point. Crew of the VGA Halfdane responded to reports of a drone piloted maintenance craft refusing commands from government operators and approaching the Energy Chain off-schedule. Upon disabling the craft, VDF forces discovered high-yield explosive devices attached to the unit and a system-wide shutdown of Radiance maintenance craft. When several additional drones failed to respond, military response crafts were mobilized and seven similarly modified craft were manually disabled or destroyed. Analysis of the hijacked systems quickly revealed automated messages intended to be broadcast moments before detonation, wherein Boiling Point explicitly took credit for the foiled attack.\ +

                    \ + Sources within the Vir Governmental Authority have reported that a full scale recall of remote drone craft under their operation has been initiated in order to improve security measures and prevent future exploitation of government systems, statements that eerily echo those of Occulum Broadcast following emergent drone attacks earlier this year. Investigations are reportedly \"well underway\" to determine the whereabouts of those responsible for the apparent manual modification of these short-range remote craft.\ +

                    \ + Erkki Laukkanen, Chief of Fleet Staff for the Sif Defense Force has commended all patrol crews involved, and has promised \"swift retribution\" for the attempted bombings." +/datum/lore/codex/page/article26 + name = "11/24/62 - Boiling Point Stronghold Seized in Vir" + data = "Combined forces from the SCG Fleet and Almach Militia have today struck a powerful blow to Boiling Point terrorist operations in the Vir system. With close cooperation from the crew of NanoTrasen facilities in the region, special forces were able to infiltrate what is believed to have been a major stronghold for the radical Mercurial group, located deep in the remote Ullran Expanse region of Sif. The raid closely follows the thwarted Boiling Point attack on the Radiance Energy Chain, a major energy collection array in the system which is now known to have been masterminded from the concealed bunker complex on Sif.\ +

                    \ + According to a crewmember of the NLS Southern Cross - a logistical station in Sif orbit - NanoTrasen employees were asked to assist in establishing a forward operating base for the strike team forces, and as a result suffered from a minor retaliatory attack from Boiling Point drones, including a mechanized unit believed to be of Unathi origin. Six civilians suffered from treatable injuries. Lieutenant Miro Ivanou of the SCG Fleet and commander of the anti-terror operation has expressed gratitude to the crew under the \"decisive\" guidance of on-shift facility overseer, Ricardo LaCroix.\ +

                    \ + Military officials have reported the operation as a total success, and that \"several\" high-ranking Boiling Point organizers were killed in the raid, and that thanks to the work of allied intelligence operation teams much of Boiling Point's captured data may remain intact." +/datum/lore/codex/category/article27 + name = "11/26/62 - Valentine's Ultimatum: All Eyes On Almach!" + data = "The Almach Association must adhere to the Five Points of Human Sanctity by the 14th of February next year or face war, according to a national address from the Colonial Assembly delivered by Secretary-General Mackenzie West this morning. The Icarus Front leader was at the forefront of a resolution to allow the secessionist government to remain independent of the Solar Confederate Government under the strict condition of faithfulness to Five Points laws, passing by a wide margin. Fundamental disagreement over Five Points regulation has been at the forefront of debate with the Almach provisional government, and is cited as one of the primary reasons for the systems' illegal declaration of independence early this year.\ +

                    \ + The internationally broadcast speech began with the much anticipated announcement that the Boiling Point terrorist group had been effectively destroyed, with over seven hundred arrests made over the course of the weekend as a result of sensitive data captured during the special forces raid in Vir on the 24th, including numerous high ranking members of the organization. West went on to praise forces involved in the months-long counter-terror operation, before highlighting the \"legacy of \[human\] togetherness\" that allowed it to happen - in a spiel that commentators suggest \"betrays the true intention of the Valentine's Ultimatum: Reunification\".\ +

                    \ + Under guidelines placed into effect by West and their political allies, Almach would be required to \"\[cease\] illegal research and human modification, and destroy all materials related to existing research\" by the stated date, with compliance determined by Solar officials. In addition, the Almach Militia is to end its integration with SCG Fleet forces and withdraw its forces from SCG systems by midnight on Friday. Military relations between the Confederation and the Almach movement are to remain in a state of conditional ceasefire for the duration of the ultimatum, and current trade restrictions are to remain in place.\ +

                    \ + According to voting records, the measure passed nigh-unanimously, with Speaker ISA-5 and some SEO iconoclasts abstaining from the vote. ISA-5 states that, while they personally support the enforcement of the Five Points, they could not in good conscience vote in an action likely to result in an invasion of Shelf, which they regard as a sibling colony to their own Sophia. Association liason, Shelfican Ambassador, and Morpheus board member No Comment responded to the ultimatum, after some deliberation, with a word that cannot be comfortably written down.\ +

                    \ + Full speech transcript follows." + children = list( + /datum/lore/codex/page/valult + ) + +/datum/lore/codex/page/valult + name = "The Valentine's Ultimatum" + data = "\[West shuffles some papers and clears their throat\]\ +

                    \ + Thank you. Citizens of the Solar Confederation, allies, and beyond... It is a great honor, on behalf of the Colonial Assembly to announce that joint operations against Boiling Point across the galaxy have come to an end. In the fight against brazen Mercurial terrorism, the Solar Confederate Government and her allies have prevailed.\ +

                    \ + Over the past two days alone, I can report that over seven hundred arrests have been made, from the distant system of Nyx, to right here in Sol. I hold in my hand a list. \[West holds up a sheet of paper\] Leaders, organizers, brutes and bombers have been captured by brave, hardworking security forces throughout human space. The rest of these criminals have been scattered to the wind... But not lost! I can confidently assert that every last one will be brought to justice.\ +

                    \ + No more! Shall the people of this great nation have to fear the machinations of radicals! No more! Shall these twisted minds impose their perversion of humanity through violence! No more!\ +

                    \ + This Assembly... Nay, this nation expresses its thanks the noble members of our military who joined together to make this outcome possible. We thank the Fleet, of course for their tireless action hunting down these killers, and their heroic action over this past weekend. We thank the Sif Defense Force, without whom we could never have located the intelligence that led to these decisive victories... The Almach Militia, for their cooperation in the apprehension of these so-called \"revolutionaries\". \[West clears their throat\] And of course, we thank the local forces - the police and reserves who dealt firsthand with the chaos sewn by Boiling Point in their vicious crusade.\ +

                    \ + \[Mackenzie West shifts at the podium, setting down the List of Dissidents.\]\ +

                    \ + It is in times of relief - of unity, times like this moment - that every human heart can be filled with pride. \[West places their hand over their heart\] Since the dawn of civilization, mankind has strived above all else for peace, for the cooperation of all humanity. It is this very legacy of togetherness that has allowed us such close friendship with species further afield - the Skrell, the Tajara, and beyond. These past nine months, we have seen, each of us, with our own two eyes what mankind can achieve - together.\ +

                    \ + \[West removes their hand from their heart and places both flat on the podium.\]\ +

                    \ + Boiling Point sought to disrupt this unity. To divide us; redefine not just personhood but the very essence of humanity the only way they could: Force.\ +

                    \ + Humanity - the very thing that brought us together since we descended from the trees and brought us to this very moment. What could be more sacred?\ +

                    \ + \[West frowns, in the most pitiful attempt at emotion seen in the Assembly in at least an hour.\]\ +

                    \ + It is with this spirit of unity in mind that this Assembly has voted favorably upon a resolution.\ +

                    \ + Close to one hour ago, Naomi Harper and the leaders of the Almach Association were delivered an ultimatum:\ +
                    \ + The Almach Association will be allowed to exist as a government entity independent of the Solar Confederate Government going forward on one condition - full, unilateral compliance with the Five Points of Human Sanctity.\ +

                    \ + The deadline for this condition will be the 14th of February, 2563.\ +

                    \ + \[West is visibly worked up\]\ +

                    \ + Cessation of illegal research and modification, and the total destruction of materials related to existing research in its entirety must be completed by this date. Hostilities with the Association will remain in a state of conditional ceasefire until terms are met and Militia integration with the Fleet will come to an end effective immediately.\ + \[Mackenzie West turns directly to the news camera, and jabs a finger directly at it. They are addressing the audience now, not the Assembly.\]\ + Harper, all eyes are on you." + + + +/datum/lore/codex/page/article28 + name = "11/28/62 - \"Valentines Ultimatum\" Prompts Saint C. Secession" + data = "Just hours after reconnecting with the Exonet after voting in a new government, the colony of Saint Columbia has unilaterally seceded from SolGov and petitioned for inclusion within the Almach Association. This declaration, issued by First Secretary Luissa Tassis, is in stark contrast to pre-election promises of continued support of Sol. Admiral McMullen of the Saint Columbia Garrison remains in control of the Fleet Base, itself a large colony housing around 75000 civilian contractors and military families who were not party to the Barrueco Referendum or the new constitution.\ +

                    \ + Efforts to ensure electoral validity and a peaceful exchange of power have been stymied by the presence of several dozen Militia vessels currently transiting from the Crescent to the Rim. Since the declaration went through, no Almachi vessels have been seen leaving the system, instead forming around Saint Columbia in an obvious defensive posture. The legality of this formation is questionable at best, as fleet activity in divided systems like Abel's Rest and Kauq'xum has been avoided for diplomatic reasons." + +/datum/lore/codex/page/article29 + name = "11/30/62 - Adm. McMullen Declares \"Iserlohn Republic\"" + data = "Pursuant to the continuing hostility from Secretary Tassis' Saint Columbia Democratic Union and the Almach Militia, the civilians of the Saint Columbia Fleet Base have been organized into an Iserlohn Republic. Named after the largest single module of the station, the Republic has applied to the Colonial Assembly as an independent protectorate, with provisional recognition already extended by Executive of Development Zehava Collins. In a move decried as nepotistic, Admiral McMullen declared independence and installed his daughter Anya as interim President pending ratification of a constitution. SolGov Fleet protocol forbids any member of the service from accepting any political appointment and is believed to be the main reason he did not take power himself. Anya McMullen is the administrative head of the base's hydroponics array and is considered a highly respected citizen of the colony, relationship to its military administrator notwithstanding." + +/datum/lore/codex/page/article30 + name = "01/01/63 - Sif Governor Bjorn Arielsson to Retire" + data = "Aging Shadow Coalition governor Bjorn Arielsson has today confirmed rumours that he will not run for re-election in the 2563 cycle. The popular governor has represented the people of Vir in the Colonial Assembly for ten years, and supporters had long hoped that he would run for a third term. Arielsson cites advancing age and a desire to spend more time with his partner of 12 years, noted Positronic entrepreneur View Arielsson.\ +

                    \ + Arielsson's governorship saw increased funding towards Sif's vererable ground-based transportation networks to the benefit of some of New Rekjavik's more remote neighbors, though opponents have criticised subsidies towards artificially heated fungal farms, arguing that the faciliies \"benefit a small minority of Skrellian residents to the detriment of already fragile local ecosystems.\"\ +

                    \ + The Sivian Shadow Coalition has yet to announce who is to take Arielsson's place on this year's ballot." + +/datum/lore/codex/category/article31 + name = "01/13/63 - Bjorn Arielsson Issues 'Farewell Address'" + data = "Veteran politician Bjorn Arielsson made an impromptu address from his Kalmar cabin, beseeching political unity in the face of the Almach Seccession and offering his own perspective on the conflict. 'It's republicanism versus autocracy,' he said, 'and we're not the autocracy.'\ +

                    \ + The speech has been met with approval from many young synthetics and organics alike, with many referring to Arielsson as 'Old Man Bjorn' on social media immediately after its conclusions. Others responded less positively, with Arielsson's caustic remarks about political rival and Icarus Front Secretary-General Mackenzie West providing ample room for criticism. 'Secretary-General West... might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that' says Arielsson in the first of three specific insults against the SecGen.\ +

                    \ + Others have criticized the speech's seemingly communist tone, with Arielsson expressing approval for the socialist Free Relan Federation and the anarchist Casini's Reach despite opposing their secessionist ideals. Still others claim that the speech offered 'nothing but empty feelings' and that it lacked specific, actionable resolutions on the growing secessionist movement in VirGov. Some have even framed the Address as a form of political maneuvering by the venerable politician, claiming that he voiced unpopular sentiments specifically to hamper the Shadow Coalition's re-election bid after well-publicized disagreements with SC party bosses.\ +

                    \ + The actions of Arielsson and Vir's proximity to the border have lead to increased focus on the upcoming Gubernatorial election on a nationwide level, with the Icarus Front alone projected to spend upwards of a billion thalers on publicity. Minor party candidates like the former MLM member Luisa Hannirsdottir and the Mercurial Phaedrus already have strong support in the polls, promising a fierce election that could ultimately tip power in the system in any direction.\ +

                    \ + A full excerpt is available below." + children = list( + /datum/lore/codex/page/bjornretirement + ) + +/datum/lore/codex/page/bjornretirement + name = "Bjorn Arielsson Farewell Address" + data = "This is, as you know, my last term in office. After this, I mean to retire-- really retire, I have a cabin in the mountains waiting for me along with a thick stack of old Bowler novels. Because this is my last term, I have the chance to do something pretty rare for a politician. I get to speak my mind.\ +

                    \ + I hear talk from some people-- mostly young people, people who have lived their whole adult life with me in the capital-- I hear them talking about seccession. Now, let's make it clear; I'm not going to belittle you, the way some of my colleagues would. Complaining about the government, especially one as big and as old as the Confederacy, is our gods-given right. It's never going to be perfect, and it's not half of what it could be. I have nothing against talking about it, I have nothing against turning that talk into action and actually seceding, with just cause. I've worked closely with Representative Hannirsdottir for ten years now, and while we don't agree on the issue of secession it's certainly never stopped us from cooperating.\ +

                    \ + But, uh, as you can probably guess, they're not talking about the old kind of seccession. They're not thinking we'll stop paying Solar taxes and strike it out alone, the way some people did during the Age of Seccession. They want to join the Association. Now, if I were Secretary-General West, I might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that, if you'll pardon my language. We're not all humans here. We're Tajaran and Unathi and Skrell and Positronics and even a few Teshari. And while that 'Valentines Ultimatum' might win West a lot of points with their lackies, and with the kind of maintenance-dome troglodyte who thinks the First Accord was a mistake, it's done more for the Association's recruitment than their entire propaganda budget. It's become expedient for leaders on both sides to treat this like a fight between the Core and the Rim, or between humans and positronics, or between tradition and progressivism, but it's not any of these. It's the oldest fight in the book. It's republicanism versus autocracy, and we're not the autocracy.\ +

                    \ + Angessa's Pearl is a theocratic autocracy led by Angessa Martei, who owns all property on the planet down to her people's bland white jumpsuits and the gray slop they eat. This isn't propaganda. This is objective fact, and something Martei is open about. Her seccession is a means for her to get more and more naked power over her slaves, and to grow more and more of them, until she's the immortal center of an industrial empire. The people of the Pearl didn't make the choice to join the Association. The people that are building her fleet and dying for her cause had no say in the matter. The injustice, the oppression here isn't that their rights to 'self-improvement' or 'self-expression' or 'freedom of thought' were trod on-- the injustice is that SolGov, that we allowed these abuses to persist for as long as they did. The injustice is that there are still so few laws in place to prevent things like this from happening in new colonies. The injustice is that, on seeing Martei's schemes actualized, we didn't take a cold, hard look at just how that was allowed to happen.\ +

                    \ + I love SolGov. It's because of this love that I'm so furious at what we have allowed to happen to our people. The state of the Bowl is disgraceful. Nobody who looks to us for protection, who pays us taxes and levies, who is a member of our community, should live in fear of raider attacks. What we did to the positronics, the history we let ourselves repeat out of fear and greed, can never be forgiven, can never be repaired until Vir burns dark in our sky. The pogroms-- yes, the pogroms-- against the Unathi, against refugees fleeing their own religious autocracy, are a disgrace to everything we stand for. But of all the nations in the galaxy, with perhaps the exception of Casini's Reach, we are the only one founded for the good of the ruled, rather than the rulers. We are the only real commonwealth in known space. And that's why we need to strive for better. We are a burning beacon of liberty in a galaxy where nigh eighty percent of the population has no voice in the government. Every ounce of power we cede to the party bosses, or the corporations, or tinpot dictators like Angessa Martei, is a dimming, a flickering of that torch. \ +

                    \ + And this brings us back to the Association, and to those who sympathize with it. I do, too. I spent my entire career on sapient rights lobbying, on supporting the anti-malfesance efforts of my colleagues. For a disaffected positronic, for any friend to the positronic people, for those who have had their lives taken by corporations-- the Association seems like a miracle. And maybe, for those Mercurials, the ideas it's founded upon shine even brighter than our democracy. But I look at the Association, really look, and I see Angessa Martei lying in the center, spinning a great big web. I see Naomi Harper, lying through her teeth better than Mackenzie West ever could. Two of the biggest population bases in the Association, the two nations that started the whole Gray Hour, are autocracies. Once again, the ferver of the revolution is subsumed by the oligarchs who want to stay in power. I doubt, to the poor laborer on the Pearl, the word 'Mecurialism' means much. I doubt that once the shock of the seccession wears off, that the young Promethean soldier will find themselves in a better place in Harper's junta than they will here in Vir.\ I doubt that in ten years' time the miners, pioneers, and traders who seized their means of production will find the Association Militia a kinder master than Xion, Nanotrasen, or Major Bill's. \ +

                    \ + This is far from a blanket condemnation of every government in the Association. President Fisher of the FRF-- I consider her a friend. When she gave her speech this March about strengthening and guiding the Almachi Revolution, I thought long and hard about whether we might do the same. I certainly commend the effort. But the structure of the Association was penned by the same autocrats that, to do her words justice, Fisher will have to overthrow. There's no High Court, no checks or balances. The Association is an alliance penned as though deliberately ignoring two thousand years of political science. By striving to counter-balance these autocrats, Fisher plays into their hands. She commits her own fleet, weakens her own defenses against enemies closer to home, in the service of Martei's ambitions. \ +

                    \ + I don't see this whole affair as a chance to spread the galactic anti-corporate revolution the way President Fisher does, of course. I make no secret of my stance on Trans-Stellars, but I also know that we're better off with Sol than without. The 'Silent Collapse' was two hundred years ago, but we still bear the scars from it. When the Scandinavian Union pulled out support for the Sivian colonization project, SolGov saved us. I do mean saved us, sure as if they'd fished us out of a life pod. There were no factories, no steel, no concrete on Sif until the Engineering Corps built Radiance and New Reykjavik. Corporations and regional governments cowered from the Karan pirates, until the Marines chased them out. Whether Sivian or Karan, you owe the roof over your head to the Sol Confederate Government. With that great debt in mind, how dare we turn our backs on the Bowl, or Abel's Rest, or Nyx, when they need us! How dare we let oligarchs prey on the weak! How dare we choose not to act when we have, by virtue of our votes in the Assembly and our voice within the halls of public debate, the means to share our peace and prosperity with the rest of our people!\ +

                    \ + This is what I mean by SolGov being the only true republic, the only state founded for the common good. The 'human spirit' West croons on about isn't our industriousness, or our skill at arms. If humanity-- if this Solar culture is commendable for anything, it is that we assist our fellows. We take in Casteless Skrell, Unbound Unathi, republican Tajaran. We pass around the hat when someone's house burns down. We help our friends, our neighbors, and even strangers. The fact that Martei and Harper are perverting this impulse, padding their juntas with the air of legitimacy to inspire honest people to ride to their defense, is the reason their state is unconscionable, the reason it was was born flawed, the reason we cannot suffer it to continue, much less help it on its way.\ +

                    \ + Now, I'm sure you've noticed by now, that I haven't said much more than three words about technoprogressivism, or transtech, or whatever the word du jour is. Frankly, that's on purpose. 'Transtech' has never once been about technology. The Icarus Front-- the old one, that united us and took us to the stars, not the new one we spend forty hours a week arguing with about healthcare-- The Icarus Front was a popular revolution, you know. Hel, they were Marxists. It was a world where the kind of lack of accountability, the entrenched oligarchy and geographical class divide that we're dealing with now was spiraling out of control. In the old United States, the rich and powerful got the technology to grow loyal subjects in tubes, to make drone intelligences smarter in some ways than a human could ever be, to-- well, to do what Angessa Martei's done, only with no SolGov to stop her. Meanwhile, the 'little people' in the Middle East, Southeast Asia, and other 'forgotten' parts of the world were left behind, hopelessly. I don't mean to downplay the importance of the Gray Tide, but if you look at historical accounts from that era, the thing that really united the Front was the knowledge that, if they didn't act immediately, they'd be seen as 'externalities' by immortal superintelligent businesspeople and politicians. The take-away from the Gray Tide should never have been that 'nanotechnology is dangerous'-- it should have been 'nobody should be able to destroy an entire city without facing consequences.'\ +

                    \ + That was more of a history lesson than I had meant, but it's important to look at these sorts of things in context. I know transtech and the Five Points have been used as an excuse for pejudice against Skrell, Mercurials, positronics, the FTU, communism, the disabled, and most recently Prometheans. But all the Five Points are supposed to mean - what they would say if the people who had written them were alive today, is that everyone deserves an equal playing field. When the ruling class is smarter, stronger, and longer lived than the classes they rule over-- well, I could wax poetic again, or I could just point you towards the Hegemony and their 'clients'. The Hegemony is bad enough. Let's not give Angessa Martei a chance to outdo them." + +/datum/lore/codex/page/article32 + name = "01/25/63 - Moravec Nephew Announces Vir Governor Candidacy" + data = "The Sol Economic Organization has announced that Calvert Moravec, nephew of NanoTrasen CEO Albary Moravec will be running under their ticket in the upcoming Vir gubernatorial elections. Calvert has stated that he will run on a pro-business platform, and has chosen Vir to do so due to the 'Unique beauty and economic prospects of an interstellar crossroads such as Vir'.\ +

                    \ + Despite being a lifelong resident of Alpha Centauri, Moravec was recently approved for Vir citizenship, making him eligible for local candidacy and has reportedly moved into a luxurious New Reykjavik penthouse. Perhaps best known for his soaring stock market investment success over the previous few years, Calvert's first foray into politics is not wholly unexpected as the Moravec family has long leveraged their wealth in international affairs, though successful election would mark their first sitting member of the Colonial Assembly. Fellow SEO candidate Councillor Hal Wekstrom has expressed his full support for Moravec.\ +

                    \ + Three candidates will be elected as representatives to the Colonial Assembly later this year, with the most popular also attaining the position of system governor." + +/datum/lore/codex/page/article33 + name = "01/27/63 - Vani Jee Orbital Tour Cut Short" + data = "Icarus Front Representative Candidate Vani Jee has delayed the remainder of her campaign tour of orbital colonies and outposts around the Vir system after an alleged altercation with NanoTrasen security.\ + Candidate Jee had been visiting the NLS Southern Cross, a NanoTrasen station in Sif orbit to receive a corporate tour and meet with voters, when her concluding question and answer session was interrupted by hecklers, leading to the event being cut short. Jee alleges that footage of the event was seized by NanoTrasen corporate security and has accused the trans-stellar corporation of the intentional intimidation of Icarus Front and Shadow Coalition candidates in what she describes as 'a clear display of corruption in favour of company-favourite Calvert Moravec', though she has praised the individual employees of the Cross for their hospitality and thought-provoking questions.\ +

                    \ + Vani Jee is running on a platform of free access to education, Sivian self-determination, and isolationist foreign policy. She has refused to make any strong statements regarding hot-button issues such as the Five Points.\ +

                    \ + She intends to resume her scheduled tour after a three day break." + +/datum/lore/codex/page/article34 + name = "02/05/63 - Angessa Martei to Take Control of Eponymous Colony" + data = "Coming out of retirement and displacing the nameless Exalt of the Starlit Path, religious demagogue Angessa Martei has returned to the throne of the colony that bears her name. \ +

                    \ + 'I had retired because of senescence brought on by my old age, high-stress lifestyle, and multiple resurrective clonings. As you may know, I recently had a procedure that renders these difficulties obsolete. Hereafter I will continue to control the automated facilities of the Pearl and claim responsibility for the collective action of my followers. Those who oppose my decision may oppose all they want. Feelings do not move mountains. I do. We shall seize the stars in our own hands. May you become who you wish to be, and grind all obstacles to dust, as I have done.'\ +

                    \ + Purportedly, this address was met with a standing ovation from the population of Angessa's Pearl. In a separate dispatch, Martei stated her intention to tour SolGov as a foreign dignitary protected by the Respect for Diplomats Act." + +/datum/lore/codex/page/article35 + name = "02/07/63 - Vir Gubernatorial Candidate Barred from Breakfast TV" + data = "Infamously hot-headed Shadow Coalition candidate Phaedrus has reportedly been blacklisted from future appearances on morning television by several major networks. The ban comes after an advertised chat segment between Phaedrus and hosts of the West Sif Wakeup breakfast programme had to be pulled from broadcast after the candidate 'Flew into a expletive-laden mercurial rant' at the expense of rival candidate Mehmet Sao of the Icarus Front.\ +

                    \ + Recordings of the outburst quickly made their way onto social media, sparking outrage from opponents and network executives alike, prompting Occulum Media to issue a rare blacklist from major media outlets, restricting Phaedrus to 'appearances on alternative news sources' owned by the company.\ +

                    \ + Phaedrus, a long-time Vir Mercurial Progress Party member running for a major party for the first time, is said to have taken issue with candidate Sao's 'Blatant anti-synthetic' policies, though he did not use the word 'policies'." + +/datum/lore/codex/page/article36 + name = "02/09/63 - SEO Candidate Embarks on Wilderness Tour" + data = "In an effort to stir up support for his promotion of natural resource extraction industries, Sol Economic Organization candidate Mason Keldow has embarked on an unorthodox tour of resource-rich sites across central Sif. Keldow has described the tour as an 'Old fashioned expedition', invoking images of hardy prospectors of centuries past, and intends to make the journey entirely by ground with only a small party of 'Adventurous outdoorspeople' to support his trek.\ +

                    \ + Critics of the plan have pointed out that the earliest surveys of Sif were largely performed by aerial drones, and the idea of ground-based survey teams is 'Frankly anachronistic'. Rival Shadow Coalition candidate Selma Jorg - a staunch planetary environmentalist - has described the tour as 'Irresponsible and insane'.\ +

                    \ + The candidate intends to visit both unexploited sites and current corporate extraction facilities in order to 'Better understand the folks helping dig out Sif's hidden wealth' over the coming two weeks." + +/datum/lore/codex/page/article37 + name = "02/09/63 - Zaddat Colony 'Bright' To Enter Vir" + data = "After several months of talks with Nanotrasen and other corporations in the system, the Colony Bright is to begin orbiting Sif and hardsuited Zaddat are to enter the Virite workforce. Executives in Nanotrasen Vir cite the reduction of their drone-automated and positronic workforce as a result of the Gray Hour as cause for them to reverse their previous decision against allowing the migrants into the system. Icarus officials within VGA are concerned that, if other Colonies are to follow the Bright, the native industry of Sif may be disrupted or suborned by Zaddat and Hegemony interests, and have made it clear that the Bright's presence in the system is highly conditional." + +/datum/lore/codex/category/article38 + name = "02/11/63 - Mason Keldow in Ullran Expanse Close Call" + data = "Sol Economic Organization candidate Mason Keldow was rushed to nearby corporate medical facilities after a death-defying encounter with local wildlife in the Ullran Expanse this morning. The candidate had been planning to visit the nearby NanoTrasen mining facilities as part of his much publicized 'Wilderness Tour' when he and a local guide were set upon by the notoriously savage Sivian Savik. The animal was killed in the encounter, but not before Mr. Keldow suffered life-threatening injuries and had to be recovered by crew from the NLS Southern Cross, the closest facility on hand.\ +

                    \ + Following emergency surgery, Keldow was happy to provide news sources with a 'Good-natured' interview, in which he highlighted the dangers faced by rural workers on Sif and his plans to tackle them, as well as slamming rival Shadow Coalition candidate Selma Jorg for lacking tangible plans for the future.\ +

                    \ + Candidate Keldow is reported to have made a miraculous recovery, and is 'in good spirits'. Aides state that he is unlikely to suffer any long term effects from the injuries, in part thanks for the skilful work of NanoTrasen's Dr. Fuerte.\ +

                    \ + A full transcript of the interview follows:" + children = list( + /datum/lore/codex/page/keldowinterview + ) + +/datum/lore/codex/page/keldowinterview + name = "Mason Keldow Interview Transcript" + data = "Blip asks, 'Subject Keldow. Pleasantries first. How do you feel after your ordeal on the planet's surface?'\ +

                    \ + Mason Keldow says, 'Ah that? You know I'd love to downplay it and pretend that it was just a walk in the park... But NT's medical staff probably will tell you otherwise, so there's no reason to hide it; things went pretty far south.'\ +

                    \ + Mason Keldow says, 'But that's how it goes, working on the surface of Sif isn't pleasant at times.'\ +

                    \ + Blip asks, 'Candidate Keldow, you have placed yourself quite firmly in the boots of the local TSC's explorer contingents today. Do you feel you will be attempting to live the life of any other labour intensive roles in the near future?'\ +

                    \ + Mason Keldow says, 'Blip, Let me tell you I do try to get a taste for a lot of the work done by these people... But admittedly this isn't the job I do every day. These are hard working fellows who do there damnedest day in and day out... I could try spending a week just working the mines, But-'\ +

                    \ + Mason Keldow says, 'As I was saying.. Many of the folks, Miners, Explorers, The work in and around the Ullran Expanse. They work in the mountains, Out in the fields.. It's a dangerous place and frankly its not a place average people wanna go too.'\ +

                    \ + Mason Keldow says, 'They told me on the way here. 'Keldow you're an idiot''\ +

                    \ + Mason Keldow says, 'Hell, Even Basman over here was wondering why I didn't ask for a detail.'\ +

                    \ + Mason Keldow says, 'So it's not a safe route... But when's the last time any of the other candidates actually came down to these outer stretches and tried earning their sweat.'\ +

                    \ + Blip asks, 'You indeed seem to be attempting to gain a unique, and firm understanding of the daily struggles of the working populace. How do you intend to translate this newfound knowledge into policy and direction if you take the Governorship in Vir?'\ +

                    \ + Mason Keldow says, 'You see, getting a grasp of the struggle is only step one, I paint myself as an every-man but that doesn't mean core issues aren't the problem either; Vir's economics, The small pay that sometimes offered. There is a lot to be tapped into.'\ +

                    \ + Mason Keldow says, 'Let's take for instance the spiders I've been hearing about.'\ +

                    \ + Mason Keldow says, 'People working in orbit say 'Don't go to the surface, Spiders are down there.''\ +

                    \ + Mason Keldow says, 'And apparently there was a big ol' purple one sitting right by a camp we had set up. A giant mother who'd - if I hadn't met that lovely mass of fur and ice instead - would have probably said its 'hello' in the worst possible way.'\ +

                    \ + Mason Keldow says, 'They are a species that prevents anyone from actually working or otherwise making use of all that land. If I were in office, I'd make an effort to clear out the dangerous species that surround the outer regions of Sif - relocate them if possible - and use that territory for something productive.'\ +

                    \ + Mason Keldow says, 'New forms of Transit, new buildings, new jobs.'\ +

                    \ + Blip asks, 'Such implementation of infrastructure and security is not a cheap measure. How do you intend to find funds for such an endeavour?'\ +

                    \ + Mason Keldow says, 'Now obviously Vir is in a very interesting position, But thankfully it's in a wonderful position where business and partnerships are more than happy to come in and assist. The bottom line would make sure the average Taxpayer doesn't feel a dent, only the dividends.'\ +

                    \ + Mason Keldow says, 'If we break this down into economic plans, using new yet relatively safe tools being put out by Hepheastus, you could safely clear swaths of territory in the Expanse.'\ +

                    \ + Blip says, 'Thank you for your insight into your economic policies and plans. As a final question;'\ +

                    \ + Blip asks, 'A puff-piece question. Do you have anything positive to say about your rivals in the political race?'\ +

                    \ + Mason Keldow says, 'Ah yes, yes well... As for any candidate they need to show they're worth. Not simply as a politician but as a person who believes what they will do for for the betterment of Sif, And Vir as a whole.'\ +

                    \ + Mason Keldow says, 'Let's take a look Ms. Jorg.'\ +

                    \ + Mason Keldow says, 'She has LONG called me a Corporate sell-out, Saying I would poison the planet and other awful mudslinging.'\ +

                    \ + Mason Keldow says, 'She loves to claim she's here for the better of the misrepresented.'\ +

                    \ + Mason Keldow says, 'But when is the last time she's talked to a Tajaran and told them how they will help put food on the table, and money into their pockets.'\ +

                    \ + Mason Keldow says, 'When has she came and told the Unathi Exile, Your worth more than what the Hegemony is trying to convince you you're worth.'\ +

                    \ + Mason Keldow says, 'There's blood in the grass out there showing what I'm willing to do to make Sif and Vir a better more prosperous system. I wanna see what the other Candidates will do.'\ +

                    \ + Blip pings!\ +

                    \ + Blip says, 'Thank you for your time, Candidate Keldow. Unit looks forward to seeing where this race ends, and wishes Candidate the best of luck in his endeavours.'\ +

                    \ + Mason Keldow says, 'It's been a pleasure Blip.'" + +/datum/lore/codex/page/article39 + name = "02/12/63 - VirGov Launches Election Website" + data = "The Vir Governmental Authority has launched this year's election information exonet site, unusually several months after campaigning began. The government election agency states that the delay was caused by an usually long process of finalizing candidates this cycle, and did not want to confuse voters with incorrect or outdated information.\ +

                    \ + The newly updated site includes information on candidates and political parties, and is planned to include information on local voting rights at a future date. It can be found at:\ +

                    \ + your-choice-vir.virgov.xo.vr\ +

                    \ + (( https://your-choice-vir.weebly.com/ ))" + +/datum/lore/codex/page/article40 + name = "02/14/63 - Ultimatum Unmet: War With Almach!" + data = "The Solar Confederate Government has resumed a state of war against the secessionist Almach Association, after 4 months of tense ceasefire. The re-declaration comes after the Association failed to meet requirements set forth by the Colonial Assembly last November, which called for the cessation and destruction of all research that did not meet standards established by the Five Points of Human Sanctity.\ +

                    \ + The past few weeks have been marked by an increasing buildup of military forces on the Almach border as it became apparent that Almach had no intention of meeting Sol's demands. At 9am this morning, the deadline was met and initial reports from the frontline suggest relatively little action besides the destruction of pre-existing Almach scout drones that had been placed on the border several months prior. The exact plans of the fleet going forward have not been made public, but civilian traffic to and from the Saint Columbia system has been entirely suspended.\ +

                    \ + How this development will influence the coming Vir election remains to be seen, though SEO candidate Mason Keldow has reportedly ended his planetary tour 10 days earlier than planned due to the tense political situation." + +/datum/lore/codex/page/article41 + name = "02/22/63 - Militia Retreats: First Solar Victory" + data = "After a week of tense stand-offs and increasingly frequent skirmishes, the Association Militia has begun moving from their position around Saint Columbia further into the Almach Rim. The inciting incident for this shift seems to have been the first use of the MJOLNIR system, which instantly destroyed a large Almachi warship from half a system away. This demonstration was met with a standing ovation from much of Iserlohn, and Militia forces disengaged almost immediately. Admiral McMullen is unwilling to elaborate on pursuit or invasion plans at this moment, but 'hope(s) the MJOLNIR will continue to be a valuable asset for national defense.'" + +/datum/lore/codex/page/article42 + name = "03/04/63 - Savik Slams Local Chat Host" + data = "Television sweetheart Sally, host of Chat With Sally has come under harsh criticism from independent Vir gubernatorial candidate Yole Savik after his 'humiliating' appearance on the show yesterday morning alongside Sol Economic Organization candidate Calvert Moravec. Savik - who is campaigning for Vir independence from both the SCG and corporate interests - alleges that the show, which has run for 13 years on select networks, is 'little more than a propaganda piece for high powered executives.' and that his appearance had been part of a 'smear campaign' against non-SEO candidates.\ +

                    \ + NanoTrasen, who have openly sponsored Sally since her inception deny these accusations. Jan Bhatt of the NT marketing division stated 'Chat With Sally has always been intended as light morning entertainment, and Sally a personality we can all relate to. The fact that Mr. Savik was unable to have a sense of humour about the whole thing and took the show as an opportunity to bloviate about dry politics is not an indictment of Sally, nor the corporation but rather a simple misunderstanding of the purpose of the segment. We had hoped Mr. Savik's appearance would help dismiss any claims of political bias in our programming and hope to host more civil candidates in the future.'\ +

                    \ + Catch Chat With Sally weekly at 5am SST." + +/datum/lore/codex/page/article43 + name = "03/06/63 - Dark Triangle Goes Dark!" + data = "As of 0352 this morning, New Reykjavik time, SolGov officials confirmed that all communications coming from the so-called 'Dark Triangle' had ceased. The Dark Triangle is a disputed region of space home to the independent world Natuna, which has maintained a more or less neutral relationship with SolGov for a little more than a decade.\ +

                    \ + The announcement gives no cause for the communications blackout, though sources with inside knowledge claim that it was completely unforeseen. Some speculate that Natuna, who became an 'observer nation' of the Almach Association last November, is making a political statement, though experts in the telecommunications field are uncertain as to how such a complete blackout is possible.\ +

                    \ + Dr. Ina Lai from the Kara Interstellar Observatory states, 'we've never seen anything like this outside of the (Skrellian) Far Kingdoms, and frankly we're at a loss for who might be responsible,' adding that 'the tachyon signatures from the whole region are masked, even those from stellar phenomena or normal bluespace travel.' Independent explorers from the FTU have set out to the region in an attempt to re-establish communication with Natuna and smaller human settlements nearby." + +/datum/lore/codex/page/article44 + name = "03/08/63 - Dark Triangle Overrun By Hegemony" + data = "FTU explorers have re-established exonet communications with the ruling bodies of Natuna and the Dark Triangle. Unfortunately, they also discovered that Natuna's previously autonomous townships have been subsumed into the Moghes Hegemony. \ +

                    \ + Bluespace-lensed telescopes throughout SolGov, including the Vir-based Kara Interstellar Observatory, can once again pick up on tachyon signatures in the region. Traffic has been described as 'lower than usual' and no significant fleet assets are believed to be present in the region, though fixed-placement Hegemony installations now litter the Triangle's major star systems. Systems with significant Hegemony presence include Natuna and Ukupanipo, home to the primitive Uehshad species. Some have speculated that the presence of the Uehshad is the reason for the unexpected Hegemony takeover, though Icarus Front General Secretary Mackenzie West was quick to decry the move as 'an obvious imperial land-grab.'\ +

                    \ + Hegemony diplomats on Luna and elsewhere have been quick to justify their actions. 'The Dark Triangle has been home to various criminal elements for several centuries,' says Aksere Eko Azaris, a major Hegemony diplomat since the early post-war years. 'Neither the Skrell nor the Solar Confederacy have proven any willingness to bring stability to the region. Local governments such as Natuna have actively encouraged piracy, smuggling, and other acts of banditry, instead of making any moves to legitimize themselves. This instability proved detrimental to the health and wellbeing of all living within striking distance of the pirates of Ue-Orsi, and it was deemed unfortunate, but necessary, that we step in and provide the guiding hand by which this region might be brought back into the fold of civilization, as is our duty as sapients.'\ +

                    \ + In a statement closer to home,Commander Iheraer Saelho of the Zaddat Escort Fleet has assured VirGov that 'we only took action to protect the innocents of the Dark Triangle and of neighboring systems'.He asserts that Hegemony rule will ultimately benefit all races of people within the Triangle, and promises that, 'the people of Vir, of Oasis, of the Golden Crescent writ large, have nothing to fear from our clients the Zaddat, or from the Hegemony vessels assigned to their protection.'\ +

                    \ + Only time will tell if Saelho's promised peace and stability will manifest in truth. \ +

                    \ + This newfound militancy of the Hegemony is likely to become a major campaign issue in the upcoming Vir elections, alongside involvement in the war with the Almach Association and traditionally Virite issues of corporate authority, minority-friendly infrastructure, and taxation." + +/datum/lore/codex/page/article45 + name = "03/12/63 - Ue-Orsi Escapes Hegemony Triangle" + data = "The lawless 'Ue-Orsi' flotilla, home to hundreds of thousands of outcast Skrellian pirates, has departed from the Hegemony-controlled Dark Triangle after what appears to be a brief battle with several Unathi warships. The action damaged several important Orsian ships, including their massive and venerable solar array 'Suqot-Thoo'm', a development which is likely to increase the pirates' aggression in the coming months as they search for additional power sources. It is unclear exactly where the flotilla has fled, though best guesses indicate that they are presently in Skrell space, likely near the lightly-patrolled Xe'Teq system. The Moghes Hegemony is in negotiations with several Skrellian states to arrange for military action against their escaped subjects, but little headway has been made thus far.\ +

                    \ + This revelation has added more fuel to already heated Assembly arguments about SolGov response to the Unathi takeover. 'This is a prelude to invasion, nothing more and nothing less,' says New Seoul Representative Collin So-Yung, a noted Iconoclast. 'We must make it absolutely clear to the Hegemony that this is a threat we will not bow to, even in our present state of internal weakness. I suggest we pursue a fair peace with the Association, one where we can keep them as allies against this sort of encroachment instead of shattering our fleets during such a pivotal moment.'\ +

                    \ + Others took a more nuanced approach, including VGA Governor Bjorn Arielsson. 'What we have here is our punishment for how badly we've treated the people of the Triangle. I don't really see why we should have let the tired old racism of some Qerr-Katish oligarchs stop us from offering aid to their tired and huddled masses, such as it is. And because we have had a full century of ignoring their plight, they were defenceless to resist the Hegemony. I say we fling the doors open, let (the Orsians) settle some rock here, and show the unaligned powers of the galaxy that the Hegemony's way isn't the only way.'\ +

                    \ + Even more conciliatory was Speaker ISA-5, who Arielsson blames for mistreatment of the Ue-Katish. 'Our policy has always been that our defence budget cannot adequately defend the Dark Triangle from internal piracy, that Ue-Orsi is a criminal organization using their refugee status as a shield, and that we cannot lift the blockade of Natuna until they stop hosting these criminals and transition to a more sustainable economy. If Moghes has the power and the inclination to administer the Triangle, I see no reason why this state of affairs isn't better than the alternatives.'" + +/datum/lore/codex/page/article46 + name = "03/26/63 - Almach Routed from Saint Columbia" + data = "The Saint Columbia system has been declared free of Association forces following a renewed SCG offensive in the region. Admiral McMullen of the Saint Columbia garrison - who has reportedly reclaimed his post at the system's naval base despite the facility suffering moderate damage in this week's fighting - says that the last secessionist vessels were driven from the system just over 24 hours ago, and remaining pockets of resistance have been quick to lay down their arms. At least 20 enemy vessels - mostly converted civilian ships - have been confirmed disabled or destroyed in-system, thanks in no small part to the deployment of the state-of-the-art MJOLNIR weapons system.\ +

                    \ + This more aggressive approach to the Almach front comes on the tail of aggressive Hegemony deployments in the Dark Triangle, which SolGov has conceded was 'Immediately threatening, but after some deliberation, has brought some form of policing to a lawless region.'.\ +

                    \ + Despite assurances, this recent action would appear to many to be an effort to quash the Association threat and return fleet forces to the now extended Hegemony border, and some critics of the Almach War have called for a second ceasefire 'In order to focus on the real threat to mankind.'" + +/datum/lore/codex/page/article47 + name = "04/28/63 - Representative Hainirsdottir Reaffirms Pro-Vey Medical Manifesto" + data = "Incumbent Vir Representative Lusia Hainirsdottir has restated her dedication to advanced medical research at a public appearance at a Vey Medical facility in downtown New Reykjavik. Vey Medical has come under some criticism locally in the past year due to its 'accelerated' sapient trials, which Representative Hainirsdottir has strongly endorsed in her current term of office.\ +

                    \ + In her statement to staff at the New Reykjavik facility, Lusia promised that under her governorship, the company would not be reprimanded for the deadly Holburn's Disease outbreak in rural Sif this past June which claimed fifteen lives, and in which Vey-Med's involvement was only confirmed this week - as the outbreak 'directly lead' to the development of a new life-saving inoculation which has seen success galaxy-wide.\ +

                    \ + Hainirsdottir has long advocated for the promotion of scientific achievements that have taken place in, and undertaken by the people of Vir." + +/datum/lore/codex/page/article48 + name = "05/06/63 - Isak Spar Withdraws from Vir Election" + data = "Independent gubernatorial candidate Isak Spar has withdrawn his name from the running following a 'Public Relations disaster' aboard an orbital NanoTrasen logistics facility. According to witnesses, Spar acted belligerently towards staff members and engaged in vandalism and assault with a deadly weapon during his scheduled visit to the station, which the candidate had opted to undertake alone due to the temporary illness of his campaign manager.\ +

                    \ + In a statement just hours after the alleged incident, Isak announced that he would no longer be pursuing Vir Governorship, due to 'The unexpected stresses of a political career.' before plugging his upcoming album, C*** End Savage Turbo Death A** Destruction. The NanoTrasen corporation has decided not to press charges due to Mr. Spar 'Suffering the consequences on a far more significant level than a mere fine.' but will not be inviting Spar back for future visitation.\ +

                    \ + Spar's label, Skull Wreck Music has declined to comment at this time but has agreed to pay damages to the victims on behalf of the self-described 'post-pseudo electro-death superstar'." + +/datum/lore/codex/page/article49 + name = "05/15/63 - Solar Fleet Launches Offensive Against Almach" + data = "The first vessels of an SCG Fleet invasion force arrived in the Relan system this morning after a month-long intelligence operation to establish the Almach Association's most vulnerable positions, according to an announcement by Admiral McMullen just hours ago. Relan, which has long been fragmented between the neutral Republic of Taron and the once insurrectory Free Relan Federation - who now control the majority of the system and declared allegiance with Almach early in the crisis - is expected to fall to Confederate forces within 'a matter of weeks' due to its fractious political situation, and relative insignificance to Almach interests.\ +

                    \ + According to McMullen, the system's most populous habitat, the Carter Interstellar Spaceport is already under blockade and local resistance has thus far been minimal. The capture of Relan is expected to provide our forces with a major foothold in Almach territory and further advances are expected to be 'trivial', bypassing the Association's defensive positions in Angessa's Pearl.\ +

                    \ + The offensive comes weeks after sizable portions of the Fleet were publicly withdrawn from the frontline in order to reinforce the extended border with the Hegemony following their annexation of the Dark Triangle, and is a clear sign that - despite reduced numbers - Fleet command remains confident of Solar victory against the Mercurial rogue state." + +/datum/lore/codex/page/article50 + name = "05/19/63 - 'Drone Operated' Shelfican Ships Storm Sol Siege" + data = "Blockading Solar vessels in the Relan system came under fire today from automated craft originating from the Shelf fleet. The flotilla of drones, described by one survivor as a 'swarm', launched electromagnetic pulse and so-called 'hatch buster' precision missiles against three SCG Defense vessels, inflicting systems damage, and casualties 'in the hundreds' with at least eight service people already confirmed killed in action. The drones are reported to have withdrawn after 'only a few minutes of protracted fire from both sides.'\ +

                    \ + The Shelf telops fleet, which was spotted by Fleet forces but not identified as an immediate threat, entered the system early this morning and were understood to be acting as observers to the ongoing battle for the Relan system due to Shelf's official stance of non-aggression -- despite aligning itself with the Association. Shelf has reportedly been unable to be reached for comment on their actions, and their alleged neutrality in matters of war has been seriously called into question by many in the Colonial Assembly.\ +

                    \ + The SCG-D Krishna and SCG-D Mogwai of the SCG fleet, and the assisting Oasis logistical vessel, the OG-L Cloud Nine have been withdrawn to an unspecified location for immediate medical assistance and repairs." + +/datum/lore/codex/page/article51 + name = "05/20/63 - Fleet Withdraws - Sol On The Back Foot?" + data = "The Solar Colonial Assembly has confirmed that the Solar Fleet has withdrawn from the contested Relan system due to 'unexpected resistance' from Shelf tele-operated forces. This comes less than 24 hours after three Solar vessels were seriously damaged in an 'ambush' by a large number of Almach-aligned military drones. According to the Fleet, they were unprepared for any significant ship-to-ship combat in the system and will be consolidating their forces. 'This is not a defeat', according to Captain Silvain Astier of the SCG-R Hanoi, speaking unofficially to Occulum News sources 'This is merely a tactical withdrawal in order to reconvene and reassess our plans to restore order to the Almach Rim.'\ +

                    \ + A spokesperson for Shelf was quick to contact Fleet forces following the withdrawal with a formal apology for yesterday's incident, describing the previous day's attack as 'A terrible mistake.', blaming 'a miscommunication between our people in telops and the trigger-happy robots', though the veracity of their claims cannot be confirmed." + +/datum/lore/codex/page/article52 + name = "05/21/63 - NanoTrasen Station to Host Major Election Debate" + data = "As the Vir Gubernatorial elections approach, and with several high-profile debates lined up between the leading candidates in the polls, the NanoTrasen corporation is set to host its very own televised event live from one of its major logistical stations in Vir. The NLS Southern Cross, primarily a traffic control outpost managing shipping in Sif orbit, has been selected by the company to host the debate - funded in full by the corporation - due to a series of minor political scandals that have taken place on the platform, and the suitability of unused space onboard.\ +

                    \ + Early in the election cycle, NanoTrasen came under fire for its alleged 'manhandling' of Icarus Front candidate Vani Jee, and the confiscation of to-be-televised recordings taken by a party drone. While the company apologised for the incident shortly thereafter, the corporation hopes to mend ties with the potential future representatives by showing that they are capable of hosting civil discourse. More recently, the NLS Southern Cross played host to the 'breakdown' of disgraced former candidate Isak Spar - an episode which was not addressed in NanoTrasen's official statement on the planned debate event." + +/datum/lore/codex/page/article53 + name = "05/26/63 - SEO Candidate Advocates Murder On Live TV!" + data = "Sol Economic Organization candidate Freya Singh has been caught live on camera admitting that she would like to throw an innocent individual out of an airlock for a minor slight. During this afternoon's debate hosted aboard the NLS Southern Cross. Singh is quoted as having said that the event was 'the silliest concept for a debate I've encountered yet, and whoever came up with it should get a promotion, and then be fired out of an airlock.', a clear incitement of violence against Oculum Broadcast staff.\ +

                    \ + Magnus Dugal, 48 works for the Oculum Broadcast corporation and is credited with creating the concept for today's debate, the highest rated for this cycle so far. The father of three, who enjoys hoverboarding in his free time, says that he feels 'Threatened' by Singh's comments, and hopes that she will, 'at the bare minimum', issue an official apology to the company and himself.\ +

                    \ + Candidate Freya Singh, a career investment banker, spent much of today's debate advocating for reduced safety regulations and the apparent overturning of the Five Points, raising eyebrows across the system. Singh's office claims that her statements were 'a joke', but we do not feel that this is a laughing matter.\ +

                    \ + In related news, Shadow Coalition candidate Phaedrus remains under a profanity filter 'house arrest' for the remainder of the election." + +/datum/lore/codex/page/article54 + name = "06/28/63 - Vir Finalizes Dates for Election Voting" + data = "The Vir Governmental Authority has confirmed that voting for Vir's governorship and Colonial Assembly seats will take place on the 29th and 30th of June, with an additional voting period set for Wednesday the 3rd of July to allow for out-of-system and full-time weekend employees to cast their votes. No exit poll information will be released until the final votes have been cast, and final results are expected to be announced within another week.\ +

                    \ + According to a Oculum poll, Lusia Hainirsdottir is expected to comfortably take a seat, though the certainty of her governor position is not hard set. Candidates Sao, Singh and Jorg are trailing not far behind, but will all have to make good showings this weekend if they hope for electoral success. In an unexpected surge among minority species, the Shadow Coalition's Tajaran candidate Kurah Zarshir is leading the polls in certain outlying and orbital communities.\ +

                    \ + Not sure how to vote, if you can vote, or who to vote for? Check out the official election website at your-choice-vir.virgov.xo.vr" + +/datum/lore/codex/page/article55 + name = "06/29/63 - Morpheus Cyberkinetics To Split Assets" + data = "The Morpheus Cyberkenetics Corporation is to split into two distinct entities operating under a single board of trustees, in light of their Almach branch's apparent involvement in the ongoing war after last month's 'unintentional' corporate drone strikes. Citing 'Severe communications disruptions' between its operations and assets on either side of the cordon since it was put in place last year, the SolGov-side corporation is to become 'Morpheus Sol', retaining most assets and current corporate headquarters, and its Almach counterpart 'Morpheus Shelf', which is to be based out of the administration station MAS Sophia Jr., located in the El system.'\ +

                    \ + The principle victim of the Aetolian coup, Nanotrasen, has seen most of their considerable Almachi investment nationalized by the secessionist government, as has Xion and other major Almachi organizations. Most surviving corporate exclaves have been effectively written off by their parent company for the duration of the conflict, due to the severe difficulties effectively conducting trade across the militarized border. Before today, the sole exception was Morpheus, whose involvement in the secession prevented any seizing of their assets. It seems, however, that even the sardonic positronic corporation is not immune to the difficulties of doing business in the Almach Rim region.\ +

                    \ + Member of the Board Chock Full of Sardines introduced the proposal by saying, 'Our goal here is not being shot. Together with leading economic scientists, we've devised a scheme that will allow us to be shot for illegal smuggling almost ninety percent less often.' They defended the confusing and offensive choice of name in 'Sophia Jr.', seemingly intended as an insult to longstanding rival Sophia, by claiming, 'It's absolutely hilarious.'" + +/datum/lore/codex/page/article56 + name = "06/30/63 - Almach Leak Confirms 'Super-weapon' in Whythe" + data = "Solar Confederate Government Intelligence has this afternoon confirmed the presence of a so-called 'Super-weapon' in the distant Whythe system, after an apparent intelligence leak was posted to the exonet in the early hours of this morning. According to a spokesperson for the Solar Fleet, the public were not made aware of the super-weapon as the military 'have no reason to believe that the weapon poses any threat to civilian targets within SolGov space at this time, and there is no reason to cause panic with what amounts to the announcement of an Almachi propaganda tool intended to sow discord with bold threats of overwhelming power. This morning's leak achieves nothing but serving the Association's schemes. Keeping this so-called super-weapon - and I hesitate to use that term - a secret seems to have been last on their list of priorities.'\ +

                    \ + According to the intelligence documents released this morning and widely spread within minutes of upload, the 'super-weapon' is a colossal space-bound structure equipped with 'newly developed bluespace technology', though its exact purpose or capabilities have not been confirmed by either side.\ +

                    \ + Additionally, the Solar Fleet has announced that an unnamed individual within the intelligence service has been placed under arrest in connection with the leak." + +/datum/lore/codex/page/article57 + name = "07/04/63 - Exit Polls Suggest Shadow Coalition Win in Vir" + data = "According to the first exit poll data released after Vir Gubernatorial voting closed at midnight, local favourite the Shadow Coalition is expected to win at least two representative seats, with incumbent representative Lusia Hainirsdottir taking a comfortable lead.\ +

                    \ + Final results are not expected to be tallied until Saturday morning, but other frontrunners include the Icarus Front's Vani Jee and Mehmet Sao - running on drastically different platforms - alongside the Shadow Coalition's Selma Jorg. In an unexpected turn, sole Tajaran Candidate Kurah Zarshir of the Shadow Coalition has seen an immense surge in popularity among minority and more xenophilic voters. Could Vir be seeing its first Tajaran Representative? Experts say: 'Perhaps.'" + +/datum/lore/codex/page/article58 + name = "07/07/63 - Vir Election Results" + data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\ +
                    \ + Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\ +
                    \ + Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\ +
                    \ + Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\ +
                    \ + Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\ +

                    \ + Voter turnout: 30,928,287 (63%)\ +

                    \ + The greatest upset this election cycle has been the unexpected popularity of 'alien rights' candidate Kurah Zarshir, who was eliminated in favour of Mehmet Sao (Icarus Front) in the 8th round of vote transfers by a margin of just 30 votes, or 0.000096%, prompting a rigourous recount process to confirm the result. A difference at this stage could have resulted in a significantly different final line-up.\ +

                    \ + This year's winners showed clear advantages in the first-choice votes, each gaining at least 15% of the popular vote before any transfers were calculated, though Sao made significant gains in the final count, falling only a few percent short of the Jorg's 3rd place position. By far the least popular candidate this cycle was Hal Wekstrom of the Sol Economic Organization, who received just 0.8% of the first-choice vote and was immediately eliminated. Also of note were Phaedrus, Apogee Lye and Yole Savik voters, each of whom had high (30%+) voter exhaustion rates, opting not to provide alternative choices; sending the message 'My candidate or none at all.'\ +

                    \ + The elected are to be sworn in at a ceremony on Luna in two weeks time." + +/datum/lore/codex/page/article59 + name = "07/30/63 - Solar Fleet Data Breach" + data = "Last night, a number of files were spread on the Monsters From Beyond's exolife forums allegedly depicting the boarding and eventual scuttling of the SCG-TV Mariner's Cage during a voyage close to the Gavel system on the 12th of June, before the SCG had officially released any information regarding the event. The files contained undisclosed documents from the Solar Fleet investigation, some of which appear to contain audio and video recordings of the final moments of the crew before the vessel's bluespace drive was detonated. Due to the graphic violence depicted and their classified nature, we will not be sharing the files, however as a matter of public record we will explain the events recorded therein. The following description may be unsuitable for sensitive readers.\ +

                    \ + First, the navigation crew detects a drive signature on an apparent intercept course with their own, originating from across the SCG-Almachi border. It was not a large vessel, and is assumed to be some form of autonomous drone. The crew disregards it as a low level threat, instead continuing on their trajectory, leaving only the standard point defense armament locked on. This proved to be a lethal mistake, as the vessel appeared and near-instantly began accelerating toward the Mariner's Cage, before impacting the fore weapons array. The recording is cut, due to what was likely a power surge, however upon reconnection, reports indicate no damage related to any known warhead was apparent, aside from the initial impactor. The crew mistakenly assumes it to be a failed suicide drone strike, and dispatches minimal security personnel, and a large complement of response engineers.\ +

                    \ + Approximately thirty minutes after the response teams are dispatched to the impact zone, the teams begin losing contact, with those first arriving being the first to disappear. When the security responders intercept the path of communications blackouts, they are met with the blades of multiple Aetolian shock troopers. Two appear to be made from a 'living steel', with each limb taking the form of 'jagged cleavers' as one radio recording states, and three more of 'indeterminable classification'. The ship entered a red alert state, and moments later, the small contingent of marines aboard the supply vessel were dispatched to deal with the threat. All five members of the enemy boarding party were able to be rendered inert through sustained fire, though not without Sol casualties.\ +

                    \ + According to the next recordings, approximately three hours after the incident, the vessel received orders to interrogate the boarding 'Aetotheans'. The two noted to appear as the officers of the squad were rejuvenated within sealed interrogation chambers reinforced with supplies on hand, apparently capable of stopping sustained fire from multiple energy weapons. The first individual was a 'sapphire' according to information from NanoTrasen correspondants. It refused to speak in Galactic Common, and instead utilized an unknown frequency of biological transmission, and internal charge shifts. The individual was moved to a more permanent cell within the vessel's brig for transport, and the second was rejuvenated. Only the first half of the interrogation, which lasted approximately two and a half minutes, compared to four hours for the first, was recovered. The individual is rejuvenated, and is engaged in discussion with the interrogating officer when it suddenly stands, emits what is described as a 'wail', and detonates, destroying the transmitting camera, and presumably killing the officers involved in direct interrogation.\ +

                    \ + Final recordings originate from the ship's onboard A.I. housing, which was involved in continual discussions with presumably the 'sapphire', as it enacted the vessel's scuttling. It is unknown whether or not the individual was somehow capable of restoring the other individuals that fell in combat in order to free itself, or if it was able to incapacitate the transporting officers, and command crew of the vessel alone.\ +

                    \ + The Solar Fleet has expressed 'regret' that the files were leaked in their complete form, and have assured the public that an official report was due for release in the coming weeks. Concerns of 'Aetothean' attacks on civilian targets have been dismissed as 'improbable', but have affirmed that 'the threat is being taken very seriously'." + +/datum/lore/codex/page/article60 + name = "08/03/63 - Hainirsdottir Sworn In As Governor of Vir" + data = "Following a short transitionary period for the previous administration, this year's election victors have been sworn in at an official ceremony at the Colonial Assembly Hall on Luna. During her welcoming address, Governor Hainirsdottir reaffirmed her plans for the future of the system, promising a 'Bright future for Vir as a hub for medical science.', and plans for an incentivisation program for the removal of invasive extra-terrestrial species that have long plagued the region - in particular the aggressive spiders that have become synonymous with certain regions of the Sivian wilderness.\ +

                    \ + Additionally, the newly elected representatives announced expected, but none-the-less significant changes to the administrative staff of the system. Notable figures include two defeated election hopefuls: Kurah Zarshir has been selected as the Shadow Coalition's Culture Secretary for the system, while Mehmet Sao has been brought aboard by the Representative Vani Jee as the Vir Icarus Front's Internal Security Advisor. It is expected that the former candidates may use their positions to further certain goals from their own campaigns, but under the watchful eyes of their perhaps more moderate superiors." + +/datum/lore/codex/page/article61 + name = "08/04/63 - Former Independence Candidate Found Dead" + data = "It has been confirmed by a spokesperson for the Sivian Independence Front that a body found by hikers last week in the Ingolfskynn Mountains, approximately 200 miles northeast of New Reykjavik, belonged to party chair Yole Savik.\ +

                    \ + Savik, 68 - who had run for Vir Representative in the recent election - had not been seen since the 14th of July, shortly after the results were announced. Party officials claim that Mr. Savik frequently made 'off the grid' trips into the Sivian wilderness and his absence had not been treated as suspicious until investigators approached them to confirm the identity of the body. According to police, though Yole was publicly known as a 'seasoned frontiersman', Savik had succumbed to exposure at least two weeks prior to the grisly discovery. His death is not being treated as suspicious." + +/datum/lore/codex/page/article62 + name = "08/07/63 - Almach Pirate Threat Vanishes - Analysts Baffled" + data = "Skrellian Xe'qua pirates operating in the far reaches of the Almach Association since the onset of hostilities last year, have inexplicably gone dark. The pirates, who were under close SolGov surveillance to monitor their impact on Almachi shipping, have drastically dropped in activity and numbers over the last month according to an official report released by the Solar Fleet today. The Fleet is unable to account for the cease in activity, which has now reached levels even lower than their pre-war baseline, as there have been no reports of Almach military operations in the area, nor any signs of decisive battle on the Almach border with pirate space.\ +

                    \ + The drop in activity roughly coincides with the leaked information on an Almach 'Super-weapon' in Whythe, though military sources do not believe that the weapon has been deployed in any capacity at this time. According to Hasan Drust, an expert on Skrellian foreign policy, the 'only feasible explanation (is) major anti-piracy action undertaken by the Skrellian Far Kingdoms', who occupy the space beyond the Xe'qua pirates' known range. The reasoning behind this action now, against pirates who have historically only targeted human space is not entirely clear, though Drust suggests that it may simply be a coincidence as pirates would be a 'trivial issue' for Far Kingdom military might." + +/datum/lore/codex/page/article63 + name = "09/02/63 - Shock Almach Attack Routs Relan Front!" + data = "Following close to a month of reduced Almach activity, enemy Militia forces have today launched a staggering attack on Sol frontline forces in the region of the Relan system, disabling several SCG warships and forcing a major tactical retreat to Saint Columbia. The scale of this attack by Almach forces is unprecedented, but seems to be the result of the Association consolidating manpower previously dedicated to anti-piracy patrols on the far side of their territory. It is believed these vessels have become freed up due to the apparent but as of yet unconfirmed annihilation of Xe'qua criminal flotillas by Skrellian Far Kingdom police action.\ +

                    \ + The Solar fleet had been in position to blockade the Relan system in the hopes of forcing the Free Relan Federation to surrender and withdraw from the Association, but was unprepared for what has been described as an 'all-out attack' on their positions, which left the vessels SCG-D Liu Bei, SCG-D Wodehouse, SCG-TV Ceylon Hartal and SCG-TV Apoxpalon disabled and unable to retreat with the bulk of our forces, as well as inflicting severe damage to several other craft. According to initial reports, the strikes on many of the afflicted ships closely resembled scenes from the controversial 'Aetothean shock attacks' on the SCG-TV Mariner's Cage this June, which saw the ruthless deployment of gene-altered Promethean 'super-soldiers' by the Almach Association.\ +

                    \ + Fleet Admiral Ripon Latt, commanding officer of the assailed fleet, has confirmed that reinforcements are underway and the retreat 'shall not be a significant setback in the war effort', especially assuring citizens of the embattled Saint Columbia system and its neighbours that there is no cause for alarm and civilians have yet to be targeted.\ +

                    \ + The fates of the four missing ships have not been confirmed, and though the Fleet has not yet made an official statement, Sol casualties are cautiously estimated to be in the hundreds." + +/datum/lore/codex/page/article64 + name = "09/23/63 - Fleet Refuses Inquiry Into Relan Losses" + data = "The SCG Fleet has refused to heed widespread calls from critics to launch an investigation into the heavy losses sustained by our forces in a major Almach attack early this month, citing that an investigation at this time would 'undermine the ongoing efforts of our troops in battles to come'.\ +

                    \ + The attack, which took place on the 2nd of September and at current count resulted in the loss of a staggering 1281 Sol lives, quickly drew criticism from experts for 'the total unpreparedness' of the fleet despite their public claims that all vessels were 'battle ready and prepared for a coming offensive.'. The specifics of the fleets apparent failings have been the focus of much speculation in the intervening weeks, with the blame placed on everything from a critically inexperienced officer core, to ongoing redeployments to and from the recently expanded Hegemony border.\ +

                    \ + Admiral Latt has condemned critics, stating that 'the last thing our brave troops need right now is murmuring from people who don't know the first thing what they're talking about. Their actions in following orders to fall back to the border have been nothing but commendable, and all effort was made to minimise loss of life. The fleet is undergoing reorganization at this time, and is in a better position than ever.'" + +/datum/lore/codex/page/article65 + name = "09/27/63 - Almach Bypass Saint Columbia In Brazen Gavel Attack!" + data = "Almach Association fleet forces entered the Gavel system this afternoon, reportedly having evaded interdicting Sol forces from Saint Columbia in an apparent effort to skirt the range of the MJOLNIR weapon system in Saint Columbia and cut off that system from major shipping routes. Current reports from the system capital in New Xanadu are that the majority of outlying civilian stations have surrendered to invading forces with only minor incident, but that skirmishes with local defence forces - including Sol Fleet detachments - are ongoing, and it is too early to remark on the outcome of the battle. Official military reports are scarce at this time, but the Fleet in Saint Columbia is 'on the move and ready to repel the invaders'.\ +

                    \ + Accounts from the system's edge describe Almach forces 'firing indiscriminately' on anti-piracy emplacements including those mounted to the ILS Thurston, a Greyson Manufactories collection station with eight crew, killing all hands.\ +

                    \ + Open fighting in the Gavel system marks the furthest Almach encroachment on Sol territory to date. The system, which is a stone's throw from the Oasis and Vir systems is best known for the destruction of the moonlet 'Requiem' by a rogue nanoswarm in 2289, which was successfully neutralized by government forces, and boasts only a small population relative to its neighbors." + +/datum/lore/codex/page/article66 + name = "10/01/63 - 'Judgement Day' As Gavel Falls!" + data = "The government of New Xanadu has surrendered to Association invaders following a disastrous relief effort by the Solar Fleet, whose interdiction vessels are believed to have been captured by the invading force. The manoeuvre leaves the bulk of the Sol fleet isolated in the Saint Columbia system - though a breakout is expected - and has led to widespread outrage in the Colonial Assembly. Critics of the war have damned the Fleet for their 'inability to fight a civilian rabble, gene-modded or otherwise' and renewed calls for a peaceful arrangement between the Solar Confederate Government and Association.\ +

                    \ + ISA-5, current spokesperson for the Shadow Coalition has forwarded a motion today to resume discussions with Almachi heads of state, just hours after news of Gavel's surrender broke. The proposal which has yet to gain widespread traction, would call for a new ceasefire, and ISA-5 has stated they 'hope that a new agreement can be made to end the senseless loss of life over the particulars of a foreign government's right to autonomy.'.\ +

                    \ + Executive Sifat Unar of the Emergent Intelligence Oversight has voiced immediate concern over the motion, criticising the use of 'foreign government' in reference to Almach; 'Our Fleet has suffered a few defeats, but this conflict goes deeper than mere lasers and shells and to surrender to torturers, mind-hackers, and Machiavellian machines at this stage would be insanity. To allow a seccessionist state, particularly one so unabashedly guilty of crimes against humanity that go far beyond even our modern definitions of 'Human Sanctity', to exist unquestioned a stone's throw from some of our most precious member states, would be a failing not only of this government, but of humanity that would echo through history like a great shameful dirge for all to hear.'\ +

                    \ + A communications blackout has been instated on the Gavel system by the Almach Militia, though earlier reports indicate continued strikes on numerous civilian colonies who were unwilling, or unable to deactivate their automated defence systems prior to the invaders arrival." + +/datum/lore/codex/page/article67 + name = "10/08/63 - 'Magnetic Weapon' Designs Released Following Gavel Threat" + data = "Private security and ExoMartian law enforcement agencies are now receiving modernized man-portable magnetic weapon designs produced by Mars Military Industries thanks to increased budget from the S.C.G. The 'hallmarks' of these weapons, as one M.M. Industries spokesperson says, are their incredible ability to launch physical projectiles at velocities rivalling present portable laser technology in practical utility. Many of the designs utilize generalized, easy-to-manufacture compressed matter cartridges as their primary ammunition, meaning no specialized production facilities are required outside of standard shipyard or planetary lathe systems, 'to ensure a cutting edge in the battlefield, down to the last man'.\ +

                    \ + Some corporations, such as Hephaestus, NanoTrasen, and the PCRC, are already preparing to utilize these released designs in their own laboratories and stations, undoubtedly providing yet more materiel backing to the Almach front." + +/datum/lore/codex/page/article68 + name = "10/10/63 - Gavel Encircled - Liberation In Sight" + data = "Significant Fleet reinforcements from the Unathi border have 'trapped' the Almach fleet in the Gavel system and are poised for a decisive victory, according to latest reports from the front. Solar vessels from all sides of the war-torn system have closed in to ensure the invading force have no means of retreat. The relief force includes elements of the Hegemony-border fleets and the previously deployed flotilla stationed in Saint Columbia. Speaking at the Colonial Assembly this morning, Rewi Kerehoma of the Sol Economic Organization has stated that the reinforcements will 'beyond a doubt' prevent a repeat of 'embarrassing' errors made in the past month.\ +

                    \ + Efforts have been made to re-establish contact with the occupied system, which has been blocked from communication with the rest of the galaxy since the occupation began last week. According to scattered civilian signals from the system, the Association has adopted a 'salted earth' policy to the system following Solar military response, openly demolishing system infrastructure with little regard for its residents. A spokesperson for Grayson Manufactories, who maintain a significant presence in the Gavel system , has proposed that 'The Almachi had no intention of holding this system, this may have been nothing more than a show of force against corporate assets supporting the war effort.'\ +

                    \ + In related news, Admiral Ripon Latt has officially retired from his post following immense political pressure from the Assembly. Latt was until this week, commander of the Rim Expeditionary Force - currently in the Saint Columbia system - and has been the primary target for blame in the SCG's defeat in Relan, and failure to prevent the invasion of Gavel. The disgraced admiral will receive a full officer's pension, but no official honours befitting of his previous rank. Latt is to be replaced immediately by Admiral Silvain Barka, an experienced veteran of anti-piracy action in the Rarkajar Rift." + +/datum/lore/codex/page/article69 + name = "10/26/63 - 'Largest Engagement Since The Hegemony War' As Gavel Freed" + data = "The Almach Association invasion force in the Gavel system has been all but annihilated by a successful Solar counter-encirclement, at great cost to both sides. The combined Rim Expeditionary Force in Saint Columbia, along with the newly formed Gavel Relief Fleet - which had been massing in the Vir system over the past week - launched the successful attack this Tuesday evening, leaving no route of escape for Almachi invaders and resulting in 'pitched fighting' between the fleets that lasted several days. Solar forces are currently in the process of performing security sweeps of the system and its scattered habitats and it is expected to be several weeks before the system is declared safe to civilian traffic and for refugees to return home.\ +

                    \ + Even as exact causalities remain unconfirmed, the battle has made history as the single largest ship-to-ship engagement by tonnage involving the Sol military since the cessation of hostilities with the Unathi in 2520, involving over one hundred vessels of all sizes across both sides, as well as countless unmanned drones and light craft. Almachi forces, in numbers described as 'far from an insignificant portion of the total fleet' fought fiercely, and 'in manners more reminiscent of mercenary gangs than a single organized force, and with tactics varying from the conventional to the outright mystifying'. Admiral Silvain Barka has commended his own crew for applying lessons learnt from prior 'Aetothean' commando strikes in preventing similar incidents from occurring in the confusion of battle; in a candid interview this morning he stated 'Like any Promethean, (Aetotheans) hate the cold, and my crew are the coldest (expletive) around.' \ +

                    \ + The designations of twenty-four Sol Defense Vessels declared 'lost in action' have not yet been released, though next of kin of missing or deceased servicepeople have reportedly been notified." + +/datum/lore/codex/page/article70 + name = "11/11/63 - Gavel Salvation Reveals True Cost of War" + data = "Reports from liberating forces in the Gavel system have confirmed early accounts of 'inhuman' tactics employed by the Almachi invaders during their short occupation and defense of the region. Besides an apparent disregard for sapient life, especially any that gave an outward appearance of defending themselves, the Militia is believed to have employed troops and tactics 'the likes of which had only been imagined', in 'a manner that can only be described as experimental'.\ +

                    \ + Most harrowing of the accounts are those of alleged 'kill-switch clone armies' consisting of near-identical vatborn troops deployed to some of New Xanadu's largest surface colonies. According to local residents, the 'uncanny' troops arrived en-masse 'from the depths of the wastes' at the beginning of the invasion, despite wearing no obvious gear that would protect them from the extreme, unbreathable environment beyond the confines of controlled habitats. The clones are said to have targetted infrastructure including life support, with little regard for those who stood in their way. However, what has baffled Fleet analysts is the reaction upon the arrival of Sol surface troops; the clones did not fight back, but rather dropped dead 'all at once, as if a switch had been flipped'.\ +

                    \ + Teams from the SCG's top analytical and regulatory bodies including the EIO have been hard at work collecting examples of the unusual Almachi technology from throughout Gavel. Executive Sifat Unar has stated that 'It is vital that we ensure this transgressive technology no longer poses a threat to sapient life, either now or to future generations. A full cleanup operation is underway, and we are working to analyse what we have found and better understand the enemy's limits and the extent of their biological and technological... Practices.'\ +

                    \ + The current confirmed death toll, including civilian losses in Gavel has now reached 11,520 and is expected to rise. Debate continues whether to add the so-called 'Kill-switchers' to the tally." + +/datum/lore/codex/page/article71 + name = "11/21/63 - Tajaran Pearlshield Draws Line In The Sand" + data = "Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has just issued a formal statement:\ +

                    \ + 'It's no secret that we members of the Pearlshield Coalition have our differences and conflicts, both within and without. Much as some might call it the spice of life, it's with shame that I admit it has left us somewhat paralyzed over the last few months, even as a war has raged on a mere few jumps away from our borders. But in acknowledgment of our differences, something we have been able to unanimously agree upon is the sanctity of life and common decency, sanctity that Almach has continued to violate in the name of political conquest. Our relationship with SolGov - and indeed, any who would call us 'friend' - should be one of mutual cooperation and benefit, not of hard boundaries delineating 'us' and 'them'. There is only 'we', and we cannot stand idly by.\ +

                    \ + 'To this end, the Pearlshield has negotiated with local forces in the Silk system, and are taking over interim protection of the system, to free up Solar military forces so they can assist in the war effort. We have also begun construction of a large residential station to supplement the Silk station itself, alleviating its acknowledged overpopulation issues and providing additional logistical support for our defensive fleet. Finally, our cousins in Mesomori have generously loaned their new flagship, the PCMV Raniira's Grace, with all hands on deck for temporary joint assignment with Solar military forces. They are quite eager to provide a taste of Tajaran firepower and ingenuity.\ +

                    \ + 'We wish we could spare more at this time, but alas, we're still finding our feet among the stars, stepping carefully among the proverbial minefield that is our own share of cosmic threats. Know that these contributions represent a grand investment in their own right, and they are only the beginning should this war carry on.\ +

                    \ + 'We will have more to say as it comes up. May all our stars shine upon us.'" + +/datum/lore/codex/page/article72 + name = "11/23/63 - Surviving 'Kill-switcher' Assassinated During Vir Interview" + data = "An Almachi 'kill-switcher' clone soldier capturing during the liberation of the Gavel system was yesterday 'forced' to explosively self-terminate during a live TV broadcast with Virite news anchor David Huexqole aboard a SCG prisoner transport craft, allegedly by the statement of a code phrase, clearly audible on the recording. Following the attack, the apparent 'activator' is reported to have escaped to nearby NanoTrasen logistical station, the Southern Cross amidst the chaos where a minor altercation took place, resulting in the injury of one Positronic crew member and death of one Almachi accomplice, which initial reports suggest to have been a 'Vox mercenary'. The search continues for the Almachi agent, and local authorities remain confident that they will be apprehended.\ +

                    \ + David Huexqole, a popular local media personality, was the only other immediate victim of the attack, suffering moderate injuries and was rushed to the Southern Cross for emergency surgery where he is reported to have made a full recovery. Huexqole has expressed his gratitude to the 'skilled and charming staff, clearly shaken by the war but nonetheless capable for it.' but has expressed concerns regarding so-called sleeper agents within Sol space, 'Isa (341, the interviewed clone), seemed genuinely reformed. She spoke openly of regret, and struggling with what it meant to be created only to die. Before she blew herself up, I never would have thought her capable - it was like she changed in an instant.'\ +

                    \ + Initial blast investigation suggests the presence of a previously unidentified compound in the clone's bloodstream, which was detonated following 'activation' by the as of yet unidentified Association agent, believed to have been present in the room during the recording. Moments prior to termination, the clone's demeanour is visibly altered and the phrase 'Those of Sol must look to the eastern star, Phorcys.' was clearly stated. A spokesperson for the Saint Columbia Telemetry Station has stated that observation of Phorcys, an uninhabited star system located approximately between the Almach Association state of Vounna and Skrellian Far Kingdom space, has revealed 'no immediate anomalous behaviour or presence' but that analysis will continue in the coming weeks 'in order to verify the potential meaning of this statement.'" + +/datum/lore/codex/page/article73 + name = "11/25/63 - Phorcys Star Ignites!" + data = "The Phorcys star system, mentioned cryptically during Friday's dramatic televised Almachi assassination, has 'gone supernova' several thousand millennia ahead of schedule, sparking concerns of 'Almach Superweapon' involvement. The process, which ordinarily takes place over many months and is preceded by millions of years of obvious stellar evolution, began rapidly in the early hours of this morning and has already begun to consume the entire system at a rapid rate - mercifully consisting of only two uninhabitable dwarf planets.\ +

                    \ + According to government telemetric sources, who have been observing the system since Friday's message, the 'ignition' was preceded by 'abnormal bluespace readings', but it is impossible at this time to confirm whether the phenomena was a natural anomaly that Almachi sources were able to identify ahead of time, or if the long-rumoured 'Whythe Superweapon' was in fact involved. If direct Almach involvement were the case, the range of such an 'attack' would be unprecedented, with the afflicted star far from any populated area or territorial claims and 'no evidence of sapient passage to the system in several decades.'\ +

                    \ + General Secretary Mackenzie West, speaking on behalf of the Colonial Assembly has stated that 'The Solar Confederate Government is taking this matter very seriously. The mere prospect of a weapon of this calibre would indeed pose an existential threat to our society, and perhaps mankind. However, at this time we cannot jump to conclusions, this may in fact be a game of smoke and mirrors; an effort to use a previously unobserved phenomena as a weapon of propaganda, and we cannot allow this to cloud our judgement. We are in close contact with the Skrell in order to determine the nature of this sudden ignition. Know that the Fleet is on high alert, and fighting forth from the Saint Columbia system will continue unaffected.'" + +/datum/lore/codex/page/article74 + name = "11/27/63 - Whythe Superweapon Confirmed In Phorcys Blast" + data = "New government footage from the moment of ignition in the Phorcys system has confirmed the 'brief' presence of an artificial 'bluespace gate' within the star just prior to its rapid expansion and structural collapse. This verifies claims of responsibility made by the Almach Association late yesterday, and casts no doubt on the threat posed by the so-called Whythe Superweapon. The Colonial Assembly has been in continuous session since the initial incident, and one staffer has described the atmosphere as one of 'unhinged panic'.\ +

                    \ + The prevailing fear amongst the government, with the assent of top physicists in the private sector is that such a weapon could be used against Solar targets, and that it is no longer a question of 'how', but 'when', and indeed 'where'. The only unknown factor is the superweapon's capability for repeat use, and 'rate of fire' which is yet to be demonstrated but widely considered to be 'not a risk worth taking under any circumstances'.\ +

                    \ + Latest reports from the Assembly have are that a 'scramble' is taking place to resolve the 'Almach Situation', and that the ongoing offensive out of Saint Columbia has been redirected towards Relan and Whythe. According to Skrellian correspondent Hasan Drust, official aid has been requested as of this afternoon." + +/datum/lore/codex/page/article75 + name = "12/01/63 - Skrell Defer Aid Citing 'Deliberations'" + data = "Official Solar contacts within the Skrellian government have reportedly delayed tangible aid in the rapidly escalating Almach Crisis, citing 'Internal Deliberations', agreeing only to continue to share telemetric data on the movement of Association forces. The Skrell, who were instrumental in the Solar victory against the Unathi 40 years ago have long been considered taciturn in their internal affairs, but have previously been open in their support of Sol action when it comes to national defence, making their indecisive response greatly unexpected to some.\ +

                    \ + Speaker ISA-5, who has been increasingly critical of the war in the past several days, has dismissed concerns that the Skrell are 'siding with the Association', citing the long term close relationship between their governments, 'The Skrell are not war hawks, and they've never shown outward ill-will against other sapients. We can't let a bureaucratic delay allow public opinion to turn against an entire species of people who have always had our backs. If our allies need time for deliberations, we should allow them and not expect mere muscle and military aid when words could have been our solution from the beginning. I've no doubt that they will not allow the situation to become so dire that the Association are able to cause us any serious harm as they have threatened. I'm convinced that diplomacy will prevail, and that if the Skrell are in fact negotiating with the Association, then it is with all of our best interests in mind.'" + +/datum/lore/codex/page/article76 + name = "12/20/63 - Jee Relaunches Libraries Across Vir" + data = "Vir's Colonial Assembly representative and long time education reformist Vani Jee has launched her long planned 'modernization' of exonet-linked library system throughout the Vir system. During her campaign early this year she brought to light the 'staggering unsuitability' of library networks in Vir, particularly those being provided for corporate employees and residents, with particular pressure placed on the NanoTrasen Corporation whose literary collection was described as 'basically smut and whatever an old drone had scraped from the bottom of the exonet barrel.' Following her subsequent election, she reaffirmed her desire for education reform, making 'post-education' providers her first target.\ +

                    \ + The new system, which she successfully acquired government funding for this October, is due to be launched this week and includes a 'personally curated' collection in addition to titles recommended by affected institutions, and a particular focus on local authors." + +/datum/lore/codex/page/article77 + name = "01/23/63 - 'Extreme' Environmental Alert Following Ullran Expanse Chemical Leak" + data = "Residents and visitors to Sif's remote Ullran Expanse have been advised to exercise extreme caution when travelling and to avoid consuming local water sources following a 'catastrophic' chemical spill in the mountains. The exact cause and origin of the spill has yet to be confirmed, though it is currently believed to have originated from an improperly disposed of chemical tank. Local rivers and their outflow have been tested with 'extremely lethal' levels of acutely corrosive material.\ +

                    \ + Governor Hainirsdottir has issued a statement assuring Sif residents that the cleanup process is already underway, and the contamination which return to safe exposure levels for most sapients within 'Just a few days', but that the risk to local ecosystems in much higher and 'may take decades to recover.' and locals are advised to use only pre-packaged or thoroughly filtered water for the next 'six months, at least.'\ +

                    \ + A spokesperson for the Sif Environmental Agency has described this leak as 'At least regionally, perhaps the worst environmental disaster since the introduction of the invasive spider species.' and has expressed concern about similar accidents occurring in more populated areas if stricter regulations are not put in place.\ +

                    \ + The Ullran Expanse Chemical Relief Fund has been set up and is collection donations at save-ullran.xo.vr/donate" + +/datum/lore/codex/page/article78 + name = "01/27/64 - NanoTrasen Implicated In Devastating Ullran Chemical Spill" + data = "Files recovered from the contamination site by clean-up crews and submitted to the Sif Environmental Agency suggest that the hazardous materials were discarded in the region by the NanoTrasen Corporation. Though the company is not currently accused of malicious intent, ownership has been proven of several cargo containers filled with Growth Inhibitor 78-1, a compound used in the manufacture of Vatborn humans which is known to severely inhibit cell regeneration in living creatures.\ +

                    \ + The documents, which have not been released in full by the SEA, were also leaked onto the exonet from several sources which NanoTrasen initially dismissed as fraudulent but have since admitted to their authenticity. Investigations are currently underway to determine those at fault within the company so that prosecution may begin. Third-party commentators have alleged that, 'The debris field and damaged containers suggests cargo jettisoned from a craft within the Sif atmosphere', though the circumstances are yet to be thoroughly examined.\ +

                    \ + Certain members of the civilian clean-up crews responsible for waste disposal have also accused NanoTrasen of failing to provide their employees with sufficient safety information and protective equipment, which led to several minor injuries and one volunteer was reportedly admitted to hospital for 'severe side-effects of exposure' but has since been discharged." + +/datum/lore/codex/page/article79 + name = "02/10/64 - Shelf Fleet Vanishes Without A Trace!" + data = "Government agencies are scrambling to explain the apparent 'total disappearance' of the Almach-aligned Shelf fleet. Initial reports from the fleet's last known location describe a phenomenon not dissimilar to that observed just prior to the ignition of the Phorcys star in November, but the SCG has assured the media that 'No activity has been detected from the Whythe superweapon that would indicate any relation to the ongoing Shelf situation.'\ +

                    \ + Independent telemetric data from several sources has confirmed the presence of a 'bluespace anomaly' in the moments preceding the fleet. Currently efforts are focused on determining whether the fleet has been lost with all hands or if survivors may yet be found, but no trace of the fleet or of telltale signs of large fleet movements anywhere within or beyond Almachi space have yet been detected.\ +

                    \ + This afternoon, Speaker Mackenzie West of the Icarus Front addressed Sol, and indicated that communication was underway 'across faction lines' with the Association to determine the cause and implications of Shelf's apparent loss. The Almach Assocation has claimed not to be responsible for the 'possible attack' and both sides has expressed concern for the 'astronomical loss of life this may represent.'\ +

                    \ + Shelf, a largely Positronic colony fleet, consists of over 1700 vessels including the 'One Leaky Bitch', current headquarters of Morpheus Shelf, Morpheus' non-Solar 'spin-out' corporation established last June. The fleet has continuously denied direct affiliation with the Almach Assocation, but was involved in a major drone attack on Solar vessels just nine months ago, which was claimed to be 'in error'." + +/datum/lore/codex/page/article80 + name = "02/12/64 - Spectralist Wardens to hold Vigils for Lost Fleet" + data = "In the wake of Shelf's sudden disappearence, Wardens across SolGov space have collectively agreed to hold services and vigils throughout dozens of systems for those who are doubtless worried for their loved ones aboard the missing ships. Spectralism, a synthetic-centric religion, finds it's roots within 'Haven', a small vessel and community that travels alongside the wider Shelf fleet, though considers itself a distinct entity. Its ministers, known as Wardens, tend to its adherants wherever they may be found.\ +

                    \ + Despite Haven's well-known and somewhat-controversial independence of identity from Shelf, all indications point to the Fleet's disappearance having taken the attached ship with it. All twelve Spectralist Elders are known to have been onboard Haven at the time of its disappearance, as well as numerous other significant Spectralists and other spiritual leaders thought to have been on Shelf. The potential loss of the entire upper organizational body could be devastating to the religion, who have long been instrumental in the synthetic rights movement.\ +

                    \ + Ceramica, a Warden operating out of Nyx, reached out for comment with the following: 'We are as worried as everyone else who calls Shelf their home, or who has lost contact with friends or family. You need not believe in the First Spark to have a place at your local vigil; We welcome everyone who may be hurting. This is our way, this has always been our way. We remind everyone to stay mindful, and to reach out to those you see struggling. In times like this, we cannot leave each other behind.'" + +/datum/lore/codex/page/article81 + name = "02/14/64 - Shelf Safe After 'Impossible' Jump!" + data = "The missing Shelf fleet has reappeared hundreds of light years beyond the Eutopia system just days after its sudden disappearance on Monday. Unencrypted bluespace transmissions from the fleet's new location - several months travel from its last known position in Almachi space - assured all who would listen that 'The fleet (had) arrived safe and sound.' and apologized for 'Any alarm (the fleet) may have caused'. Though no official report has been released nor information from Shelf itself, initial counts indicate that a number of Shelfican vessels may not have survived the 'impossible journey' intact.\ +

                    \ + Current analysis of the bluespace anomaly detected prior to Shelf's unexpected departure indicate that the same technology as employed by the Whythe Superweapon may have been used by Shelf to create 'a bluespace portal thus far inconceivable by modern science'. The revelation has sparked concerns that 'extreme mercurial elements' within Shelf may have been responsible for the hardware behind the Assocation's 'system eating' weapon.\ +

                    \ + Sifat Unar of the EIO has expressed particular concern that 'Such improbable technology relying on concepts deemed so staggeringly arcane that our very understanding of the laws of the universe had written them off as impossible - and to be applied in such callous ways without regard for life or perhaps even the fabric of reality, could only have been developed by machine minds that could threaten our very being.' Shelf has dismissed these claims as 'Scaremongering' and 'Just jealous that somebody else thought of it first', though they would not confirm nor deny their involvement in the development of the new bluespace portals." + +/datum/lore/codex/page/article82 + name = "04/11/64 - Whythe Breached - An End In Sight?" + data = "According to latest reports from the Almach front, Sol vessels have established a foothold in the debris fields of the desolate Whythe system, home to the enemy's controversial 'Superweapon'. Admiral Barka has confirmed that bombardment of the weapon has begun, but that 'shields are holding at present', owing to the vast construction's immense power generation capabilities, but remains confident that the 'siege' will come to an end within a few months, and that the Almachi now hold only 'minimal retaliatory capacity'.\ +

                    \ + Fleet sources have been quick to address a flurry of activity on the exonet which proposed that the superweapon might be deployed against Sol's core systems in a last-ditch effort to inflict damage on their former government. According to a statement posted just hours after the initial invasion press release, 'the Fleet is aware of all risk factors regarding the Whythe Superweapon, and following two long months of analysis are certain that constant, substantial pressure placed on the weapon's shield systems will render the offensive component of the weapon dormant until the hull can be breached.'\ +

                    \ + The general mood in the Colonial Assembly today is one of relief, as all signs point to a total collapse or surrender of Association forces in their home systems once their trump card has been captured or destroyed by SCG forces. Secretary West has already expressed congratulations to the troops, 'despite the lack of assistance from our allies, as the Shadow Coalition would have had us believe was necessary.'" + +/datum/lore/codex/page/article83 + name = "04/13/64 - Skrell Ultimatum Shocks Sol!" + data = "After three months of diplomatic iciness, the Skrellian Far Kingdoms have contacted both the SCG and Almach Association with one demand: Sign an armistice or prepare for war. Supported by an immense fleet movement through the recently quashed Xe'qua region, the Far Kingdoms have demanded an immediate end to hostilities, and 'incorporation of Almachi holdings as a Skrellian protectorate, under strict oversight and regulation of their research and activities.' By Skrell demands, the Fleet has two weeks to fully withdraw from the Almach region and any vessels on either side continuing to engage will be 'disabled, boarded, and have its crew arrested pending a formal peace agreement.'\ +

                    \ + A wave of outrage has swept the Colonial Assembly, with heated debate as to Sol's response defying all party lines. While Speaker ISA-5 has been widely criticized by political opponents for their 'overzealous trust in the Skrell', they have remained acquiescent to the Skrell's demands, stating that it may be the best way to avoid any further bloodshed and maintain good relationships with the Skrell. Conversely, a small group of hardliners from across the major parties headed by SEO Representative Colin Zula of Alpha Centauri, have formed a political coalition opposing any form of 'Surrender or appeasement in the face of foreign aggression', demanding Sol keep its forces in place and 'Finish off the Association before they can be allowed to wreak havoc unsupervised and uncontrolled.'\ +

                    \ + Surprising some, long-time supporter of the Almach War, MacKenzie West has established themselves as a figure of moderation in the Assembly, promising that the Icarus Front would pursue 'aggressive negotiations' with the Far Kingdoms in order to better understand their motivations and, if territory is to be ceded, 'ensure the Almachi are placed under a firm hand'. He notes that the Skrell have never adhered to Five Points policy, but that careful diplomacy has always ensured their 'less savoury tendencies' have never spilled over to Sol space." + +/datum/lore/codex/page/article84 + name = "04/16/64 - Assembly Shaken By Reshuffle" + data = "Following the shock announcement of the Skrellian demands on Monday, sixteen planetary representatives under the SEO's Colin Zula have announced the formation of a new political party named the 'Solar Sovereignty Party' under the banner of 'Independence from foreign demands'. The party consists of defectors from all three major parties; 9 Sol Economic Organization, 4 Icarus Front and 3 Shadow Coalition representatives have 'jumped ship' and will back Zula's demands to resume war with the Association, even if it means butting heads with the Skrell.\ +

                    \ + Rewi Kerehoma, chair of the SEO has expressed 'regret' that Mr. Zula and his supporters had chosen to splinter from the party, rather than work with 'More moderate, but like-minded' individuals across the SEO and wider Assembly. The SEO's official stance on the Skrellian demands are to demand close Solar oversight of any 'protectorate' to ensure that the region is 'policed to the highest standard, but that current Almachi citizens are afforded all the sapient rights they would be under the SCG.'\ +

                    \ + In the Shadow Coalition, a formal motion has been put forth by a small minority of representatives calling for the resignation of Speaker ISA-5, citing 'Total blindness to the political situation,' in the leadup to this week's events.\ +

                    \ + Meanwhile as Skrell vessels enter the Whythe system, the Solar Fleet has ceased bombardment of the Whythe Superweapon, handing off 'suppression' of the weapon to Skrell forces." + +/datum/lore/codex/page/article85 + name = "04/20/64 - Sol To Submit - Almach Subsumed Under Treaty of Whythe" + data = "Following 'intense' deliberations between the Far Kingdoms and representatives from the SCG, a decision has been reached to cede the secessionist Almach Association territory to the Skrell, and withdraw all forces from the region. The newly established Almach Protectorate will be subject to 'extremely stringent' oversight by Skrellian authorities, and international exchange of 'research and technologies' from the region will be banned 'in both directions', pending more a more exacting deal with the SCG. Sol is to be allowed 'regular inspections' of the territory on a schedule established by the Kingdoms.\ +

                    \ + The Solar envoy included the chairs of each of the major parties, senior ambassadors to major Skrell systems, and representatives from the Solar Fleet. The newly founded SSF were extended an invitation, but reportedly turned it down. A dejected looking MacKenzie West announced the terms of the treaty late this afternoon, stating that they had 'fought tooth and nail' for a fair deal for all parties involved, including civilians of all species now living under Skrellian occupation, and that 'those not directly involved in the corruption of humanity's sanctity should not be made to suffer for the actions of their superiors.'\ +

                    \ + Notably absent from deliberations were many key members of the Association's upper echelons, with 'lesser' diplomats taking the place of both Angessa Martei and Vounna's Naomi Harper. Almachi and Skrell sources were reluctant to explain these absenses, and it remains unclear as to whether they have been taken into Skrellian custody or remain at large.\ +

                    \ + Selma Jorg, Representative for Vir, has decried the treaty as a 'Sapientarian disaster in the making'. The former career diplomat has cited the 'general mistreatment of species deemed 'lesser'' as a recurring concern with the Skrell, and the complete occupation of majority human and positronic space, which unprecedented, could lead to 'conditions not much better than slavery' for those still living in the area. She has refrained from any direct accusations, pending the results of Sol's first permitted inspection." + +/datum/lore/codex/page/article85 + name = "04/22/64 - Skrell Impose New Regime in Relan" + data = "As agreed upon in the Treaty of Whythe, the Far Kingdoms have occupied the Relan system, putting an end to the Free Relan Federation. How the system will be organized is not entirely clear at this point. Despite the effective abolition of the Relanian government, Skrell presence in the system appears relatively light, and many of the scattered stations have no Skrell presence at all.\ +

                    \ + Former President Nia Fischer gave the following statement to a crowd gathered outside the Capitol Section of Carter: 'This is a dark time for all of us. I promise to you that, in my continued service to you, I will work with the Far Kingdoms to ensure that all of our people are treated well and our rights respected, and that we will arrive at a form of government that is acceptable to you.' The gathered crowd began to shout questions and accusations, and Fischer was quickly escorted back into the capitol by Skrellian guards without answering questions from the press or others. The crowd was quickly dispersed by Skrellian military police and Carter's own police force.\ +

                    \ + In the meantime, the governing of the system remains in the hands of the sparse occupation forces, aided by parts of the former Federation government.\ +

                    \ + In other news from the system, the Republic of Taron has negotiated a preliminary navigation and trade agreement with the Far Kingdoms, officially maintaining their neutrality despite the occupation of the majority of the system." + +/datum/lore/codex/page/article86 + name = "04/27/64 - Chaos in Relan" + data = "Simmering tensions in the Relan system have boiled over, with riots erupting on Carter, Abhayaranya, and New Busan. Since former President Fischer's brief address, small demonstrations against both the Skrell occupation and the collaborating elements of the former Federation government have taken place on many stations, but within the last day full-blown riots have broken out. While accurate information on the situation within the stations is rare, it is currently believed that the deaths of two protesters on Abhayaranya were the catalyst.\ +

                    \ + Damage to the three stations has been relatively light, with one major exception. A large fire broke out in the Capitol Section of Carter, killing at least 22, including former President Fischer, and wounding at least 74 more. Other casualties among rioters, police, and the populations of the stations are unknown at this point.\ +

                    \ + Other stations with significant permanent populations have been paralyzed by local inaction and the disloyalty of local police and security forces to the Far Kindgoms Skrell, and several with no Skrell presence have issued statements that they will not be accepting any military presence from the Far Kingdoms. It is unclear at this point if this represents the beginning of another major conflict within the system." + +/datum/lore/codex/page/article87 + name = "04/30/64 - Meralar Correspondent: Triumphant Return!" + data = "Celebrations have erupted throughout Tajaran space with the return of the PCMV Raniira's Grace, which has spent the last several months providing joint assistance with Solar military forces during the now-ceased hostilities with the Almach Association.\ +

                    \ + Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has provided the following statement:\ +

                    \ + 'It is great honour that we welcome the crew of the Raniira's Grace back to their homes at Mesomori. We have all seen the battle reports, and loathe as we are to celebrate bloodshed, sometimes it is a necessary evil in the pursuit of a greater peace, and the Grace pursued that peace with fervour and tenacity as befitting our kind, and exemplified what we can do when put to the test. She is but one ship, and yet one ship can make all the difference. Lives have been saved, and the crew has returned alive and well. This is merely the beginning of what we can accomplish in the cosmos.'\ +

                    \ + When asked for comment on the Treaty of Whythe, Suketa had this to say:\ +

                    \ + 'Indeed, the bittersweetness behind all of this. I will say, it is a... complicated and nuanced situation, as is so often the case with politics. We have our views on the matter, for sure, but now is not the time to formally engage with them. The Pearlshield is watching carefully, and when the dust settles and the terms of the treaty are exercised and accepted, we can take clearer view and action as possible and necessary. We still stand by the ideals we entered the war with, and we trust our allies to share them as ever. That will suffice for the moment.'" + +/datum/lore/codex/page/article88 + name = "05/13/64 - Agreement Signed at Ithaca Station, New Government In Place" + data = "In an effort to end the ongoing violence in the Relan system and regain the cooperation of 'insubordinate' stations, the Far Kingdoms Skrell have negotiated an agreement with community leaders and former Assemblypersons from a number of stations, including insubordinates, meeting at the largest of the insubordinates, Ithaca. Under these agreements, the Skrell will vacate most stations in the system, but will maintain a fleet base in Relan's Outer Belt for mutual defence, first at Carter and later at a dedicated station. Relan will have harsh restrictions placed on its military and will agree to formal diplomatic neutrality, but will be free to organize its own government under supervision and military occupation will end.\ +

                    \ + The mood on Ithaca has been tense as negotiations have gone on, but with the announcement of the results, crowds have packed the main thoroughfares and public spaces of the station in celebration. Francis Harp Yong, governor of Ithaca and a leading figure in the talks, addressed a crowd outside the Administration Section of Ithaca today. \ +

                    \ + 'The agreement we have signed with the Skrell today has given our people a new chance, free from the mistakes of the war and the baggage of the former Association. The war was not brought on us by our choice, nor the occupation we have recently faced. We want peace, and that is obvious even to those who were fighting against us weeks or days ago.\ +

                    \ + Make no mistake, that is what our agreement today symbolizes. A new era of peace for us, where we no longer have to worry about the threat of piracy or invasion. We can return to our homes, rebuild our stations, and forge a new future for ourselves and our children'\ +

                    \ + It was also announced that though the work of restoring order to the system is ongoing, they expect elections will be held for a new Assembly and President within the next few months, with the exact date announced once violence on the major stations has ceased and cooperation from the insubordinate stations is secured. Yong will head an interim government in the meantime." + +/datum/lore/codex/page/article89 + name = "08/15/64 - Almach Permits First Solar Inspection" + data = "Almost four months since its establishment as a Skrellian territory, the Almach Protectorate Government has extended its first formal invitation to Solar Confederate Government inspectors to ensure the fledgling state is complying with restrictions imposed by the Treaty of Whythe.\ +

                    \ + The composition of the official Solar Inspection Group has been a matter of much deliberation over the past several months, and owing to the ground to be covered now includes over 3,500 experts from a wide variety of fields. The bulk of the Group is comprised of Transgressive Technologies Commission agents, including the EIO, but also includes military officials, independent observers, and corporate representatives. The inclusion of the latter group spurred heated debate in the Colonial Assembly, but ultimately 'thought-leaders' from Ward-Takahashi, NanoTrasen, and Hephaestus Industries were admitted, while other interests will have to be satisfied to be represented by Sol Economic Organization liaisons.\ +

                    \ + The APG, currently based out of what is to be a neutral embassy on Carter in Relan pending the completion of the new government centre of Vigilance Station in Whythe, is not legally required to fully comply with Five Points regulation, though the Whythe terms ensure that any transgressive research is undertaken under the strictest guidelines. The Skrell have amiably agreed to ensure that any innovation by the protectorate is safe, controlled, and does not enter Solar territory. These terms are similar to those applied to such technologies developed by and for the Skrell themselves, whose expertise is considered unrivalled in the field, but has been widely criticised by certain human bioconservative groups.\ +

                    \ + The inspection is expected to take several weeks, and will begin tomorrow." + +/datum/lore/codex/page/article90 + name = "08/29/64 - Kaleidoscope Cosmetics Goes Trans-Stellar After Genix Merger" + data = "Personal care giant Kaleidoscope Cosmetics has been officially recognised by the Solar Galactic Exchange as a true Trans-stellar Corporation today, following a controversial merger with Genix Therapeutic Systems and expanding its corporate assets to over 20 key systems.\ +

                    \ + Genix, which will now be operating under the Kaleidoscope name while retaining some corporate autonomy, has come under some scrutiny from the Transgressive Technologies Commission in recent months following its aggressive acquisition of liquidated Almachi assets in the aftermath of the Association's dissolution in April. The company was cleared of suspected Five Points violations without fanfare just two weeks ago, and allowed to resume work on the development a variety of previously approved commercial genetic modification products.\ +

                    \ + Many cosmetic gene-modification products have been available for some time - primarily in the Almach Rim - but have remained targeted at a relatively niche market. These treatments, ranging from cosmetic anti-aging to 'fantasy' body features are now set to be marketed and available in 'hundreds' of Kaleidoscope clinics galaxy-wide in the coming months. The TTC has reported that they are 'Confident that no transgressive modification is being provided and that these modifications are strictly superficial'. They have officially wished Kaleidoscope's directors well in their ascent to the galactic stage." + +/datum/lore/codex/page/article91 + name = "09/21/64 - Almach Passes Inspection - Concerns Raised" + data = "The Solar Inspection Group has granted the Almach Protectorate a passing grade in the first official inspection of the territory under Skrellian rule, though ethical concerns have been raised by a number of independent observers involved in the process.\ +

                    \ + During the course of the month-long inspection, Skrell facilitators were cooperative in ensuring the SIG were given 'unlimited' access to all research and development facilities requested by Sol, as well as informing the group of numerous previously unidentified locations that had been flagged by the Almach Protectorate Government since assuming control of the region in April. Critics of protectorate have suggested that the 'official list' may not be as comprehensive as stated, but the SIG has stated that they are 'confident that no deception has been undertaken by the APG. We have observed no evidence of research being concealed from our teams, and to the best of our knowledge the only locations left undisturbed are those few still occupied by Association holdouts, beyond the control of either inspecting government.'\ +

                    \ + Also as a result of the inspection, concerns have been raised regarding the treatment of ex-Association citizens, particularly the often genetically modified residents of Angessa's Pearl. While Angessa Martei's location is still unknown, her legacy - a society described by some as a cult of personality with emphasis on the cult - poses a significant threat to Skrellian control of the Exalt's Light system, and the clash of 'strong ideologies' has allegedly resulted in mistreatment of detainees that, according to the official report 'would not be permitted in Solar jurisdictions'.\ +

                    \ + The Protectorate's passing grade opens the door for interstellar trade to resume between the two nations for the first time in several years. Manufacturing giant Ward-Takahashi has already released a public statement on its intent to deal with the APG, and several other trans-stellars are expected to follow suit." + +/datum/lore/codex/page/article92 + name = "09/24/64 - Kaleidoscope Announce Exclusive Almach Deal" + data = "Mere days after the announcement of the reopening of Almachi-Solar trade, the Kaleidoscope Cosmetics corporation has confirmed that they have secured 'exclusive rights' to genetic products produced by several major manufacturers in the Angessa's Pearl system formerly owned by The Exalt - the insular mercurial theocracy of Exalt's Light - and recently handed over to the Almach Protectorate Government.\ +

                    \ + The details of the company's trade agreement have not been made public, but have reportedly already been approved by both the APG and SCG. The promptness of the agreement suggests to some that negotitations had been underway well before the announcement of the Protectorate's passing grade. Though cooperation between trans-stellar interests and government entities is far from unusual, such dealings with foreign governments - such as those widely made as 'open secrets' with Eutopia - are considered distasteful by many within the Icarus Front.\ +

                    \ + The Angessan products Kaleidoscope intends to offer have also not been made public, but are all to be thoroughly screened by the Transgressive Technologies Commission before being made available, though 'failing' proposals may be approved for use exclusively within Protectorate territory." + +/datum/lore/codex/page/article93 + name = "10/04/64 - Yong Wins Relani Elections" + data = "Despite concerns about domestic unrest and potential Skrellian interference, elections in Relan have gone ahead, selecting a new President and System Assembly. Francis Harp Yong, leader of the interim government and previous governor of the city-station Ithaca, known for his leading role in negotiating the end of Skrellian occupation and calming riots and rebellions earlier this year, has won the Presidency in a landslide, receiving nearly seventy percent of the vote. His party, the Spacer Union, has secured a narrow majority in the Assembly. The New Federalists, led by former member of the Harper government Odoacer Mieville, are the largest opposition party.\ +

                    \ + Yong has promised to reinforce Relani neutrality and rebuild the pre-war social system, forming a coalition of labor, technoprogressives, and anti-war activists. His victory likely means an end to the unrest that has plagued Relan since the end of the war with Almach." + +/datum/lore/codex/page/article94 + name = "12/23/64 - Two Vessels Feared Lost In Isavau's Gamble" + data = "Two Solar salvage vessels have been declared missing this week while undertaking operations in the remote Isavau's Gamble system. Locals also report that several smaller craft from the Eutopia system have 'vanished' under similar circumstances. Authorities are treating the disappearances as potential pirate attacks.\ +

                    \ + The XIV Sri Chamarajendra with crew of 32, and IIV Reimarus with 9 are both reported to have lost contact with the system's spaceport while undertaking far-orbit salvage operations on decommissioned and abandoned facilities, including the ILS Harvest Moon which detonated with all hands earlier this year. The disappearances have spurred the system government to request greater anti-piracy support from the SCG, which has been much reduced since the Almach War and increased tensions on the Hegemony border.\ +

                    \ + While Proximal to the independent and often 'lawless' Eutopia system, as well as the Rarkajar Rift, infamous prowl of the human-tajaran Jaguar Gang, the Isavau's System has rarely been a direct target for such large-scale apparent hijackings, and no group has yet claimed credit or demanded ransom." + +/datum/lore/codex/page/article95 + name = "12/27/64 - NanoTrasen Accused In Satisfaction Poll Fixing" + data = "The results of an annual system-wide corporate employee satisfaction poll in Vir have been called into question after a leak of internal employee contracts by an anonymous whistle blower. According to verified documents provided to the Vir News Network, NanoTrasen employees on annual employment contracts up for renewal are instructed to fill out an appended form expressing 'Extremely High' satisfaction with their employment at the company, or the contract will be deemed 'incomplete' and thus invalid.\ +

                    \ + NanoTrasen have been winners of the Vir Happy Employee Award for the 7 years running as of this year, and as such the legitimacy of the award, which has been run in major systems by the Sol Economic Organization since 2503, has been called seriously into question. The SEO has expressed regrets regarding the alleged fixing, but has stated that participating corporations are within their right to encourage employees to vote in a particular way.\ +

                    \ + According to NanoTrasen, the so-called 'Satisfaction Clause' in their contract renewal process is entirely permissible from a legal standpoint, and the company has no plans to make any changes at this time. When approached for comment, one anonymous employee stated that they 'had never even heard of' the award." + +/datum/lore/codex/page/article96 + name = "01/03/65 - VirGov Seals Security Deal With Local Firm" + data = "Governor Lusia Hainirsdottir has announced sweeping changes to government law enforcement in Vir, lynchpinned by the signing of a five-year contract with home-grown independent security and arms firm, Hedberg-Hammarstrom. The private enterprise will be assuming 'key duties' in local law enforcement and system security, in a move that Hainirsdottir says 'will save millions in taxpayer money, and encourages local, Virite businesses that we trust them every step of the way'.\ +

                    \ + While many colonies and facilities in Vir rely wholly on in-house security forces and will continue to do so, Hedberg-Hammarstrom is set to take over government patrol duties throughout the system, as well as administrating a large portion of previously government-run local law enforcement agencies including policing and wilderness garrisons.\ +

                    \ + CEO Gunnar Hammarstrom has reassured current SifGuard members at all levels that they need not fear for their jobs, and that for many the changes will be as simple as a slight change in uniform and a different name on their paychecks, but that H-H agents will be assuming managerial roles in most locations." + +/datum/lore/codex/page/article97 + name = "01/05/65 - Top NanoTrasen Executive Injured In Sif Bombing" + data = "Calvert Moravec, Chief Operations Officer for NanoTrasen Vir remains in a critical condition following a suspected assassination attempt on Saturday. The former gubernatorial candidate had been making a speech at a small NanoTrasen facility known for a prior terrorist attack by Boiling Point forces two years ago, when a small explosive device detonated close to the executive's leg, rendering him unconcious.\ +

                    \ + NanoTrasen security have elected to investigate the bombing internally, refusing to cooperate with SifGuard authorities on the grounds of disagreements with newly established Hedberg-Hammarstrom management. Mr. Moravec, nephew of NanoTrasen CEO Albary Moravec had reportedly been speaking out against H-H's involvement in national policing when the blast occurred.\ +

                    \ + Commander Spradling of NanoTrasen Internal Security has issued a company-wide active search order for one member of the audience who remains unaccounted for named 'Lae Vu', who is believed to be a journalist or posing as such, accompanied by images from communicator footage taken at the event.\ +

                    \ + This amateur footage also shows one member of the audience shouting an anti-corporate slogan and throwing a small electronic device at Moravec before being escorted from the room, just moments prior to the explosion. Spradling has stated that this individual, who is believed to be a disgruntled veteran of the Sif Defense Force, remains one of several persons of interest, but that the thrown item does not appear to be connected directly with the explosive device.\ +

                    \ + Reports from witnesses suggest that Mr. Moravec made a temporary recovery thanks to the fast action of medical staff aboard the NLS Southern Cross, but that a few hours later he appeared to suffer from a seizure, after which he was placed into a medically induced coma that he is yet to recover from. Unverified images from the Cross appear to show a disoriented individual resembling Moravec self-medicating with a cocktail of prescribed painkillers and alcoholic beverages, though the company strongly denies their veracity." + +/datum/lore/codex/page/article98 + name = "02/02/65 - NanoTrasen Announces Employee-Led Advisement Scheme" + data = "Trans-stellar giant NanoTrasen has today announced the launch of their brand-new 'NanoTrasen Employee Representation Committee' scheme, which will allow employee-selected representatives to have a say in company policy on a local basis. Initially launching as a pilot in 'a few key regions', the NERC is intended to provide an in-house method for those working for NanoTrasen to 'address grievances and provide valuable input without resorting to radical means'.\ +

                    \ + Vir is one of three size regions of varying scale but similar company presence selected for the pilot program, alongside the 'Deep Bowl' - including Stove, Viola and New Singapore, and 'South America', on Earth. Elections are expected to take place over the coming weeks, with each region electing representatives from core facilities in their locale. The Vir Branch will be expected to select five employees, one from each of; their New Reykjavik Head Office (Colloquially know as 'CentComm'), Karan colony the NCS Northern Star, Kalmar-based NMB Gullstrand medical research center, Sivian way-station NLS Southern Cross, and the company's sprawling Ekmanshalvo Fabrication Plant.\ +

                    \ + The Representation Committee is set to have quite significant powers over their region's day-to-day operations, ranging from Standard Operation Procedure, to security enforcement, to interior design." + +/datum/lore/codex/page/article99 + name = "02/06/65 - Calvert Moravec Dead At 58, Announces Withdrawal From Public Life" + data = "Just over a month since his injury in a brazen assassination attempt, NanoTrasen Vir's Chief Operations Officer Calvert Moravec has announced his 'temporary withdrawal' from public and corporate matters, in an inspiring speech given from his post-cloning recovery ward. The noted corporate executive passed away on Friday, following a long comatose period, but is expected to make a full recovery.\ +

                    \ + Mr. Moravec has stated that he believes a spell 'away from the public eye' will do wonders for his recovery, and 'expects to make a return some time in the coming years'. However, Moravec has reaffirmed that his stance on corporate policing, which is believed to have been the reason for the January bombing, remains unchanged; 'The refusal of Hedberg-Hammarstrom to allow our security teams to access government criminal records has been a significant hindrance to the investigation into my death. Allowing just one corporation exclusive access to this data is unequivocally wrong.'" + +/datum/lore/codex/page/article100 + name = "02/08/65 - NERC Campaigning Begins in Vir" + data = "NanoTrasen's latest employee initiative, the NanoTrasen Employee Representation Committee is set to hold their first in-house election this coming weekend, after 'respectable' signup rates for the positions across all participating Vir-based facilities.\ +

                    \ + According to those interviewed at a few sites, campaigning may be mixed. One potential committee member for the Gullstrand Medical Center described the competition as 'cut-throat' with staff looking to be split between the selection of already respected chief medical experts, and 'more represenative' service staff. Conversely, one worker at the Ekmanshalvo Fabrication Plant complex stated that he 'would probably just vote for whoever I've heard of.'\ +

                    \ + Final voting will take place on Saturday the 13th of February, with results announced by the following Monday." + +/datum/lore/codex/page/article101 + name = "02/11/65 - Top Astronomers Announce 'Alarming' Tachyon Downtick" + data = "The Galactic Survey Administration has today released a 'high priority' report on what is being described as a 'significant decline in core tachyon density' throughout the known galaxy. According to recent findings tachyon deterioration, which had previously been 'negligible' has undergone a 'rapid acceleration' which could begin to seriously affect interstellar transit in as soon as 30 to 50 years.\ +

                    \ + Tachyons are a naturally occurring particle present in varying density which form the primary mechanism for bluespace drive operation. In simple terms, the higher the density of tachyons, the more efficiently starship engines are capable of operating. Low-density regions such as the Rarkajar Rift have long posed a challenge to interstellar trade, and the expansion of such regions could prove devastating to galactic unity.\ +

                    \ + FTL industry leaders Focal Point Energistics have already announced 'immediate investigation' into the GSA's findings after taking a blow on the stock exchange, and have guaranteed a 'commitment to future-proofing' in all forthcoming products." + +/datum/lore/codex/page/article102 + name = "02/15/65 - NanoTrasen Announces First NERC Members" + data = "Following Saturday's internal election, NanoTrasen Vir has elected the first five members for its new Employee Representation Committee. These individuals are expected to hold the position for one month:\ +

                    \ + For the New Reykjavik Head Office Iraluq James, a remote personnel operative, won the position on a platform of employee morale, team-building and employee-employer conflict resolution.\ +

                    \ + On the NCS Northern Star, NanoTrasen's main colony station in Vir Victoria Bell, a cybernetic chef and hardshell operator won her place with promises of increased regulatory transparency and clarity, including the publication of an in-house magazine.\ +

                    \ + At the NMB Gullstrand medical science center in Kalmar, a close race between top doctors was upset by the election of a station security commander, Wish Elara-Voight who promises 'improvements to the safety and security of NanoTrasen facilities with a focus on enforcing current SoP and CorpReg policies and placing new procedure in the handbooks.'\ +

                    \ + The waypoint station NLS Southern Cross selected a cybernetic Unathi candidate, researcher Dr. Haven Rasikl to represent them on the basis of encouraging interdepartmental cooperation and communication.\ +

                    \ + Finally, the Ekmanshalvo Fabrication Plant has selected fabrication programmer Terazon Norddahl, who promises to push for overhauls and modernization of the company's internal transport and support systems, including shuttle scheduling." + +/datum/lore/codex/page/article103 + name = "03/10/65 - GSA Confirms Presence Of 'New' Deep-Space Threat" + data = "This morning the Galactic Survey Administration released confirmation that a previously unknown deep-space dwelling species was indeed responsible for the disappearance of five Extraplanar Discovery Division vessels early last year, three of which have returned adrift over the past several days. The species, colloquially dubbed the 'Bluespace Bugs' after initial reports from the recovered EDD ships, are believed to be capable of manipulating matter in a manner reminicent of experimental bluespace technology.\ +

                    \ + The three 'returning' vessels are said to have been 'significantly off-course', with their points of galactic re-entry differing vastly from their initial points of egress, and final programmed return routes. Each ship having departed on routes from Sol, the SCG-E Bungaree was reported adrift by Almach Protectorate officials close to the Vounna system, the SCG-E Ketumati severely damaged on a collision course with the Erebus star, in the Nyx system, and the SCG-E Mag Mell collided with the garden world of Sif, in Vir. The Gagarin and Xu Fu remain unaccounted for, but due to the proximity of final contact, their disappearance has also been ascribed to the 'bugs'.\ +

                    \ + Investigation of the recovered vessels each indicated signs of a brief struggle, always following reports of unexplained equipment disappearances and equipment failure. No crew, or crew remains have been found, with the exception of a single unidentified human thumb aboard the Bungaree.\ +

                    \ + Additionally, each ship has been identified as having undergone some degree of material alteration, with elements ranging from hull plating to crew belongings having taken on a crystaline form dubbed 'Magmellite' after the ship most thoroughly 'reconstructed'. It is unclear whether the mineral is somehow secreted by the alien species, or merely a product of the same environment.\ +

                    \ + GSA sources have stated that there is no current evidence that the insectoid creatures - identified only from scattered descriptions left from missing EDD personnel - are in any way sapient or malicious, and the lost vessels are thought to have merely disturbed a scattered array of endemic populations far from the galactic plane. Precisely why the species has only been encountered in the past year, and now all at once, is not yet known." + +/datum/lore/codex/page/article104 + name = "05/24/65 - Oculum Apologizes for Interstellar Relay Outages" + data = "Week-long difficulties with interstellar transmissions in several central star systems due to an 'unexpected behaviour' in bluespace relays 'should be resolved soon' according to telecoms giant Oculum Broadcast. The company has apologized to customers for connection speed drops as much as 80% which have rendered certain live systems near impossible for many customers, including disruption of telecast Colonial Assembly meetings on Luna which have been temporarily put on hold in order to allow representatives time to attend in person.\ +

                    \ + Customers may experience reduced speeds compared to prior service, but have been promised a two-year price freeze on exonet service packages for home and business users on most major providers in participating areas. In-system communications remain unaffected.\ +

                    \ + Initial reports that the finale broadcast of Game of Drones was 'rendered unwatchable' by connection issues proved to be unfounded as severe lag and audio distortion were confirmed as 'part of the creator's artistic vision for the story's end'." + +/datum/lore/codex/page/article105 + name = "06/07/65 - 104 Feared Dead In Oasis Tourist Shuttle Incident" + data = "The Vir Governmental Authority has confirmed the destruction of a small interstellar tourist vessel departing the Vir system. The ITV Relaxation IX operated by Thousand Palms Hotels, was bound for a popular resort in Oasis and reportedly 'split in two' shortly after confirming system bluespace departure with Vir space traffic control, exposing all passenger compartments to space and killing at least 94 of the 108 people onboard.\ +

                    \ + Four crew members recovered from forward sections are being treated for 'non-life-threatening' pressure injuries at a nearby medical facility, and ten individuals believed to have been situated at the rear of the ship remain unaccounted for. The exact cause of the break-up is yet to be determined, but initial accounts from surviving crew members describe the bluespace drive of the ship as having 'taken off by itself' at such speed that the rear of the fuselage was 'cut clean off' with no regard for structural elements. Foul play is not currently suspected.\ +

                    \ + The VGA believes that the chances of finding further survivors are 'extremely slim', though efforts to recover the rear section, which was 'sling-shot' into interstellar space, are underway. Gilthari Exports, Thousand Palms' parent company have temporarily suspended operation of all vessels fitted with similar bluespace drives, and Major Bill's Transportation is expected to follow suit. Wulf Aeronautics was unavailable for comment at this time." + +/datum/lore/codex/page/article106 + name = "07/09/65 - 'Bluespace Bugs' Linked To Almach Tech" + data = "Initial public reports on the extraplanar species commonly known as 'Bluespace Bugs' has proposed that the first recognizable signs of their activity within observable space, coincide precisely with the development - and particularly the test-firing - of the Whythe Superweapon, and that there may be a direct link between the two. The report, released by the Galactic Survey Administration this afternoon hypothesizes that the newly developed bluespace manipulation techniques used in Whythe may have acted as a signal to the deep-space dwelling creatures in a manner similar to moths attracted to artificial light. The GSA is currently collaborating with the Almach Protectorate Government to investigate the potential link further.\ +

                    \ + Additionally, findings from analysis of both inorganic and biological samples collected from the three recovered Extraplanar Discovery ships believed to belong to the 'Bugs' has excited much of the scientific community, with news that the insect-like aliens and their apparent dietary waste-product Magmellite may be composed in a manner completely unlike any life previously encountered in the known galaxy. The findings may rewrite our understanding of biology and material science, though a full specimen is desired to confirm these early findings.\ +

                    \ + The creatures have been given a tentative scientific name X Extraneus Tarlevi, after Captain Volmer Tarlev of the SCG-E Ketumati whose recorded descriptions were instrumental in establishing a basic understanding of the species' behavior. Researchers currently believe that the Bluespace Bugs are merely a form of bulk-feeding omnivore attracted to the EDD vessels in deep space by their bluespace drives, and that the loss of the ships was merely unfortunate happenstance rather than deliberate, malicious attack. Studies are already underway to determine methods that might prevent further incidents of this types before any further extraplanar missions are approved." + +/datum/lore/codex/page/article107 + name = "08/15/65 - Enigmatic Arkship Sighted After 200 Year Voyage" + data = "Recent reports from the New Singapore-based Exoplanar Traffic Observation Committee, have claimed historic extraplanar arkship, the VHS Rodnakya, has changed trajectory and may be approaching the galactic plane once more.\ +

                    \ + The ETOC, comprised of mostly exoplanar and shuttlecraft enthusiasts in the Bowl, have been tracking both government and private survey expeditions since the 2450's, reporting the approximate locations and assumed status of vessels for public record. The VHS Rodnakya has been a major point of interest among ETOC members since its formation, sometimes dominating discussions entirely, and the focus for numerous unverified theories.\ +

                    \ + The Arkship and its support fleet, known as 'Vystholm' was constructed in the early 2300's by Stanislava Dalibor, and left the galactic plane in response to the abolition of the SCG's First Contact Policy that demanded the capture and interrogation of unknown sapient aliens. It has not had any official contact with the galactic community since. Largely known for radical and since-outdated views on non-human intelligent life, their original crew was known to include a number of early Icarus Front extremists which may have fermented into a dangerous ideology after 200 years of isolation.\ +

                    \ + This alleged trajectory change has sparked excitement among the committee, including a flurry of completely unsupported reports of spies infiltrating Solar society, from the corporate workforce to major government bodies.\ +

                    \ + The Vir News Network does not endorse the unverified claims of the Exoplanar Traffic Observation Committee." + +/datum/lore/codex/page/article108 + name = "09/12/65 - Gateway Transport Suspended Amidst Safety Concerns" + data = "Nine of the galaxy's top trans-stellars have announced immediate suspension of bluespace gateway transit services following a report by Wulf Aeronautics indicating that some of the same tachyon instabilities affecting their faster-than-light engine technology may have even more severe reprecussions for rapid point-to-point teleportation that could result in 'significant decrease in matter' during rematerialization that could result in customer death, disfigurement, or loss of luggage.\ +

                    \ + Dismissing accusations that this was a move to bolster a weakened spacecraft travel industry, Focal Point Energistics, the original developers of modern gateway technology were first to announce their suspension of service on all first-party operated access points. Major contract operators, including NanoTrasen, Ward-Takahashi, and Gilthari Exports have followed suit citing a desire for caution when dealing with premium employee transport.\ +

                    \ + NanoTrasen are the Vir system's leading operator of gateway transport, offering 'luxury, near-instant interplanetary commutes' between most major company facilities, and the Vir Interstellar Spaceport. The company says it will be removing many smaller gate installations for 'full examination and required enhancements' and expects the service to return 'within a few weeks'.\ +

                    \ + Major Bill's Transportation have announced an increased frequency of service to affected NanoTrasen locations for the duration of the gateway suspension." + +/datum/lore/codex/page/article109 + name = "10/23/65 - 12th Missing Ship Prompts Official Isavau Response" + data = "After a shocking 12th interstellar vessel was declared missing in the Isavau's Gamble system earlier this week, the SCG has formally announced the launch of an official investigation, including the deployment of a significant Fleet security presence in the region. The lost ship, the HFV El Cid is recorded as having a crew complement of eight, pushing the total missing people in the system over the past year over one hundred and fifty. A contingent of around twenty SCG vessels - search and rescue, salvage, and armed warships - has been dispatched to the region to take over from near-absent local investigators, but is not expected to arrive for at least a month due to worsening FTL flight conditions.\ +

                    \ + The El Cid is believed to have been hauling highly secure cargo internationally, which may have been the final deciding factor in launching a confederation-level investigation into the abnormal number of appearances, and the SCG has come under quick criticism for their apparent prioritization of lost cargo over sapient lives. Fleet Admiral Silvain Barka, celebrated veteran of the Almach War, has stated 'Lives are our number one concern. The matter of the Hephaestus cargo has simply moved our timeline forward due to concerns that if high-grade arms were to fall into pirate hands, the situation in Isavau's Gamble could rapidly worsen. We want to avoid that, and bring back as many of the missing crew as possible.'\ +

                    \ + While piracy has long been a concern in the Bowl, with the 'Jaguar Gang' pirates making their home in the region, and a general uptick having occurred since the beginning of the Almach Crisis, it is unusual for such a high proportion of missing ships crews to remain lost without report of recovery or ransom demands. Accusations of brutality have been levied at the Vystholm flotilla, despite their improbable distance from the star system. To date the XIV Sri Chamarajendra remains the single largest loss of life, at 32 believed dead during a large salvage mission late last year." + +/datum/lore/codex/page/article110 + name = "10/26/65 - 'Bluespace Bug' Confirmed Activity Near Tajaran Space" + data = "The following address is from Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition:\ +

                    \ + 'Good day, everyone. We would like to put the rumor mills to rest lest they get out of hand. Eleven Solar days ago, the Silk system's perimeter defenses picked up what appeared to be a derelict Vox raiding ship that had drifted into range. Security forces boarded the craft and found clear signs of fighting within the crew compartments, but no traces of the crew themselves. The craft's bluespace drives were notably ripped out of the hull, and it's believed the craft had been drifting for up to nearly two Solar weeks prior, as it has been identified as the 'Skiskatachtlakta', belonging to a well-known Vox raiding group our cousins in the Arrathiir system have been contending with for a few years now, and that was their last confirmed contact with it.\ +

                    \ + 'Most importantly however, and the key reason for this address, is a significant portion of the ship's hull, particularly concentrated around the site of its bluespace drives, has been confirmed to've been converted to the material known as 'Magmellite', related to the so-called 'bluespace bugs' or X Extraneus Tarlevi that have been of note outside our borders. To acknowledge and assuage any natural alarm on our own part, there is no indication any part of the incident took place on our side of the Rift, and we are deploying additional reconnaissance and recovery ships, drones and general personnel throughout controlled space to keep a watchful eye, and we are negotiating with Solar forces in Silk to expand our presence as appropriate. We are currently analyzing the Magmellite samples recovered from the Skiskatachtlakta and will be sharing any findings with our fellows in the scientific sphere, as well as returning the ship's plundered riches if and when possible.\ +

                    \ + 'There is currently no cause for concern beyond the understandable. If and when there is, we will rise to the occasion as always. Together, we will discover the truth of these strange times we find ourselves in. Until then, be safe, and be well. May our stars shine upon us all.'" + +/datum/lore/codex/page/article111 + name = "01/14/66 - Unathi Border On Alert After Manoeuvre Scare" + data = "The Solar garrison at Abel's Rest remains on high alert following a critical near-miss scenario resulting from an unannounced Unathi fleet arrival at the disputed system's perimeter alert zone, which has since been determined to be not a deliberate act of war. According to the Moghes Hegemony the fleet is 'part of a re-evaluation of key troop deployments, that will be of mutual benefit to peace in the region'.\ +

                    \ + The arriving fleet, comprised of mostly troop transport vessels, remained in distant orbit of the star for seven hours before diplomatic contact could be established, during which time the SCG garrison remained at battle-ready stance. This marks the closest proximity to open conflict in Abel's Rest since the end of the Unathi War over 45 years ago. SolGov peacekeepers have confirmed decreased planetside garrison activity over the past several months, and key Hegemony warships have departed in recent weeks.\ +

                    \ + It remains impossible to determine the Unathi's true intentions as such a withdrawal could preface devastating planetary bombardment, or invasion elsewhere, and some members of the Icarus Front have called for immediate redeployment to the front in response. The SCG Fleet has assured the public that relations with the Hegemony have 'never been better' and that long-range sensors indicate a withdrawal from the entire border region on a far wider scale." + +/datum/lore/codex/page/article112 + name = "02/13/66 - Isavau's Gamble Fleet Report 'All Silent'" + data = "Early reports from the SCG contingent sent to investigate potential pirate activity in the Isavau's Gamble system include shocking descriptions of a system 'gone silent', with supposedly zero manmade signals originating from any ship or station in the entire area. Prior loss of contact several days prior had been ascribed to naturally occurring background noise 'overwhelming' the system Spaceport's bluespace relays, which had been operating at reduced efficiency due to the ongoing tachyon downtick.\ +

                    \ + While messages from the SCG-D Brazen Bull were similarly weakened by what has been described as a bluespace 'hum', no immediate cause for alarm was raised. The fleet indicated that they were proceeding to investigate the Isavau International Spaceport and hoped to make direct contact with the crew within a matter of hours.\ +

                    \ + While telecommunications outages were a forecasted consequence of the tachyon downtick, highly focused and widespread instances such as that occurring in Isavau's Gamble were not, which has cast doubt on the predictive models being used, and raised concerns of additional factors at play. A newly observed phenomena from the Brazen Bull's report, 'blue points of light suspended in space with no discernible origin' has led to some speculation of a re-concentration of tachyon particles which some hope may hold the key to preventing further deterioration of the energetic landscape." + +/datum/lore/codex/page/outage + name = "02/14/66 - 02/15/74 - RELAY DATA OUTAGE" + data = "Article data lost for 2922 day period. Reason: Damage sustained to Oculum systems during Skathari Incursion. Please contact your administrator for details." + +/datum/lore/codex/page/article113 + name = "08/17/74 - Vox Continue To Show Alarming Divergence In Behaviour; Experts Baffled" + data = "Reports published by the Interspecies Joint Anti-Piracy Initiative this month continue to support an unsettling trend; the Vox, violent reptoavian aliens best known for engaging in rampant piracy, are simply not behaving as expected. Tactical and strategic models built painstakingly over the last three centuries are now showing accuracy ratings as low as 3%, with a rapidly growing number of raids either occurring outwith predicted regions or timeframes, or more alarmingly, not being predicted at all.\ +

                    \ + 'Something has altered their priorities,' said Wataru Murata, the head of the Joint Operations Group in charge of tracking Vox activity. 'In some areas we're seeing vastly more unarmed transport, mining and salvaging vessels, than we were as recently as two months ago, and in others, we're seeing strength and frequency of raiding groups as much as tripling. It's a very complex situation.'\ +

                    \ + 'They've never been so unpredictable before,' agreed senior naval officer Akira Doi. 'I understand that there is currently no official theory on why this is happening, but I believe it all goes back to the Skathari Incursion.'\ +

                    \ + Many leading scientists are skeptical that the Incursion, despite having thrown much of the galactic community into chaos over an eight-year period of conflict with the insectoid Skathari, could have seriously disrupted the Vox in the same way, given the relatively low indications of Skathari presence in known Vox operating territories, but Admiral Doi strongly disagrees.\ +

                    \ + 'The Skathari are aggressive to an unprecedented degree,' he explained, 'and they had the ability and numbers to annihilate entire communities. I see no reason why that shouldn't have applied to the Vox.'\ +

                    \ + While some colonies and stations welcome this reprieve from raids and piracy, others are finding themselves under renewed pressure, with resources and labour withdrawn on the advice of apparently unreliable modelling. A representative of the Pearlshield Coalition territory of Arrathiir had this to say regarding the sluggish reallocation of resources after the latest wave of raids:\ +

                    \ + 'On the frontier we are no strangers to fighting and rebuilding after raider attacks, but without reliable resupply of fuel and munitions from the home worlds, we cannot even field our ships. This is costing us dearly.'" + +/datum/lore/codex/page/article114 + name = "09/25/74 - 'Emerald Skies' Conspiracy Protest Shuts Down New Reykjavik Mall" + data = "This weekend saw the Vinterlykke Shopping Center shut down after a surge of protesters crowded the mall. Vinterlykke is known as the largest mall in New Reykjavik, renowned for its expansive selection of shops, restaurants, and entertainment options.\ +

                    \ + According to witnesses, protesters crowded the major walkways, preventing shoppers from passing and leaving some stranded in shops to avoid the crowd. Many shops barred and locked the storefronts in response, an unnamed employee of one store commenting, 'That many people <...> you never know if it's going to get out of control.'\ +

                    \ + The protesters chanted with signs regarding NanoTrasen's exclusive rights in studying the Sif Anomalous Region, demanding that studies into the anomalous properties be public knowledge. The march appears to be headed by the Skathari conspiracy group 'Emerald Skies', known in recent months for many other smaller protests regarding the government response to the Incursion, and beliefs that Skathari are more intelligent than the public has been informed.\ +

                    \ + The disruption was eventually cleared out by mall security forces before the crowd could grow out of control. It is reported that Vinterlykke will reopen on Monday with additional security measures in place." diff --git a/code/modules/maps/swapmaps.dm b/code/modules/maps/swapmaps.dm index 5ec962f5c9..629ea0042c 100644 --- a/code/modules/maps/swapmaps.dm +++ b/code/modules/maps/swapmaps.dm @@ -1,678 +1,678 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/* - SwapMaps library by Lummox JR - developed for digitalBYOND - http://www.digitalbyond.org - - Version 2.1 - - The purpose of this library is to make it easy for authors to swap maps - in and out of their game using savefiles. Swapped-out maps can be - transferred between worlds for an MMORPG, sent to the client, etc. - This is facilitated by the use of a special datum and a global list. - - Uses of swapmaps: - - - Temporary battle arenas - - House interiors - - Individual custom player houses - - Virtually unlimited terrain - - Sharing maps between servers running different instances of the same - game - - Loading and saving pieces of maps for reusable room templates - */ - -/* - User Interface: - - VARS: - - swapmaps_iconcache - An associative list of icon files with names, like - 'player.dmi' = "player" - swapmaps_mode - This must be set at runtime, like in world/New(). - - SWAPMAPS_SAV 0 (default) - Uses .sav files for raw /savefile output. - SWAPMAPS_TEXT 1 - Uses .txt files via ExportText() and ImportText(). These maps - are easily editable and appear to take up less space in the - current version of BYOND. - - PROCS: - - SwapMaps_Find(id) - Find a map by its id - SwapMaps_Load(id) - Load a map by its id - SwapMaps_Save(id) - Save a map by its id (calls swapmap.Save()) - SwapMaps_Unload(id) - Save and unload a map by its id (calls swapmap.Unload()) - SwapMaps_Save_All() - Save all maps - SwapMaps_DeleteFile(id) - Delete a map file - SwapMaps_CreateFromTemplate(id) - Create a new map by loading another map to use as a template. - This map has id==src and will not be saved. To make it savable, - change id with swapmap.SetID(newid). - SwapMaps_LoadChunk(id,turf/locorner) - Load a swapmap as a "chunk", at a specific place. A new datum is - created but it's not added to the list of maps to save or unload. - The new datum can be safely deleted without affecting the turfs - it loaded. The purpose of this is to load a map file onto part of - another swapmap or an existing part of the world. - locorner is the corner turf with the lowest x,y,z values. - SwapMaps_SaveChunk(id,turf/corner1,turf/corner2) - Save a piece of the world as a "chunk". A new datum is created - for the chunk, but it can be deleted without destroying any turfs. - The chunk file can be reloaded as a swapmap all its own, or loaded - via SwapMaps_LoadChunk() to become part of another map. - SwapMaps_GetSize(id) - Return a list corresponding to the x,y,z sizes of a map file, - without loading the map. - Returns null if the map is not found. - SwapMaps_AddIconToCache(name,icon) - Cache an icon file by name for space-saving storage - - swapmap.New(id,x,y,z) - Create a new map; specify id, width (x), height (y), and - depth (z) - Default size is world.maxx,world.maxy,1 - swapmap.New(id,turf1,turf2) - Create a new map; specify id and 2 corners - This becomes a /swapmap for one of the compiled-in maps, for - easy saving. - swapmap.New() - Create a new map datum, but does not allocate space or assign an - ID (used for loading). - swapmap.Del() - Deletes a map but does not save - swapmap.Save() - Saves to map_[id].sav - Maps with id==src are not saved. - swapmap.Unload() - Saves the map and then deletes it - Maps with id==src are not saved. - swapmap.SetID(id) - Change the map's id and make changes to the lookup list - swapmap.AllTurfs(z) - Returns a block of turfs encompassing the entire map, or on just - one z-level - z is in world coordinates; it is optional - swapmap.Contains(turf/T) - Returns nonzero if T is inside the map's boundaries. - Also works for objs and mobs, but the proc is not area-safe. - swapmap.InUse() - Returns nonzero if a mob with a key is within the map's - boundaries. - swapmap.LoCorner(z=z1) - Returns locate(x1,y1,z), where z=z1 if none is specified. - swapmap.HiCorner(z=z2) - Returns locate(x2,y2,z), where z=z2 if none is specified. - swapmap.BuildFilledRectangle(turf/corner1,turf/corner2,item) - Builds a filled rectangle of item from one corner turf to the - other, on multiple z-levels if necessary. The corners may be - specified in any order. - item is a type path like /turf/wall or /obj/barrel{full=1}. - swapmap.BuildRectangle(turf/corner1,turf/corner2,item) - Builds an unfilled rectangle of item from one corner turf to - the other, on multiple z-levels if necessary. - swapmap.BuildInTurfs(list/turfs,item) - Builds item on all of the turfs listed. The list need not - contain only turfs, or even only atoms. - */ - -swapmap - var/id // a string identifying this map uniquely - var/x1 // minimum x,y,z coords - var/y1 - var/z1 - var/x2 // maximum x,y,z coords (also used as width,height,depth until positioned) - var/y2 - var/z2 - var/tmp/locked // don't move anyone to this map; it's saving or loading - var/tmp/mode // save as text-mode - var/ischunk // tells the load routine to load to the specified location - - New(_id,x,y,z) - if(isnull(_id)) return - id=_id - mode=swapmaps_mode - if(isturf(x) && isturf(y)) - /* - Special format: Defines a map as an existing set of turfs; - this is useful for saving a compiled map in swapmap format. - Because this is a compiled-in map, its turfs are not deleted - when the datum is deleted. - */ - x1=min(x:x,y:x);x2=max(x:x,y:x) - y1=min(x:y,y:y);y2=max(x:y,y:y) - z1=min(x:z,y:z);z2=max(x:z,y:z) - InitializeSwapMaps() - if(z2>swapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - qdel(src) - return - x2=x?(x):world.maxx - y2=y?(y):world.maxy - z2=z?(z):1 - AllocateSwapMap() - - Del() - // a temporary datum for a chunk can be deleted outright - // for others, some cleanup is necessary - if(!ischunk) - swapmaps_loaded-=src - swapmaps_byname-=id - if(z2>swapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - var/list/areas=new - for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2))) - for(var/obj/O in A) qdel(O) - for(var/mob/M in A) - if(!M.key) qdel(M) - else M.loc=null - areas[A.loc]=null - qdel(A) - // delete areas that belong only to this map - for(var/area/a in areas) - if(a && !a.contents.len) qdel(a) - if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ() - qdel(areas) - ..() - - /* - Savefile format: - map - id - x // size, not coords - y - z - areas // list of areas, not including default - [each z; 1 to depth] - [each y; 1 to height] - [each x; 1 to width] - type // of turf - AREA // if non-default; saved as a number (index into areas list) - vars // all other changed vars - */ - Write(savefile/S) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - if(!defarea) defarea=new world.area - areas=list() - for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2))) - areas[T.loc]=null - for(n in areas) // quickly eliminate associations for smaller storage - areas-=n - areas+=n - areas-=defarea - InitializeSwapMaps() - locked=1 - S["id"] << id - S["z"] << z2-z1+1 - S["y"] << y2-y1+1 - S["x"] << x2-x1+1 - S["areas"] << areas - for(n in 1 to areas.len) areas[areas[n]]=n - var/oldcd=S.cd - for(z=z1,z<=z2,++z) - S.cd="[z-z1+1]" - for(y=y1,y<=y2,++y) - S.cd="[y-y1+1]" - for(x=x1,x<=x2,++x) - S.cd="[x-x1+1]" - var/turf/T=locate(x,y,z) - S["type"] << T.type - if(T.loc!=defarea) S["AREA"] << areas[T.loc] - T.Write(S) - S.cd=".." - S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) - - Read(savefile/S,_id,turf/locorner) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - id=_id - if(locorner) - ischunk=1 - x1=locorner.x - y1=locorner.y - z1=locorner.z - if(!defarea) defarea=new world.area - if(!_id) - S["id"] >> id - else - var/dummy - S["id"] >> dummy - S["z"] >> z2 // these are depth, - S["y"] >> y2 // height, - S["x"] >> x2 // width - S["areas"] >> areas - locked=1 - AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords - var/oldcd=S.cd - for(z=z1,z<=z2,++z) - S.cd="[z-z1+1]" - for(y=y1,y<=y2,++y) - S.cd="[y-y1+1]" - for(x=x1,x<=x2,++x) - S.cd="[x-x1+1]" - var/tp - S["type"]>>tp - var/turf/T=locate(x,y,z) - T.loc.contents-=T - T=new tp(locate(x,y,z)) - if("AREA" in S.dir) - S["AREA"]>>n - var/area/A=areas[n] - A.contents+=T - else defarea.contents+=T - // clear the turf - for(var/obj/O in T) qdel(O) - for(var/mob/M in T) - if(!M.key) qdel(M) - else M.loc=null - // finish the read - T.Read(S) - S.cd=".." - S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) - - /* - Find an empty block on the world map in which to load this map. - If no space is found, increase world.maxz as necessary. (If the - map is greater in x,y size than the current world, expand - world.maxx and world.maxy too.) - - Ignore certain operations if loading a map as a chunk. Use the - x1,y1,z1 position for it, and *don't* count it as a loaded map. - */ - proc/AllocateSwapMap() - InitializeSwapMaps() - world.maxx=max(x2,world.maxx) // stretch x/y if necessary - world.maxy=max(y2,world.maxy) - if(!ischunk) - if(world.maxz<=swapmaps_compiled_maxz) - z1=swapmaps_compiled_maxz+1 - x1=1;y1=1 - else - var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1) - x1=l[1] - y1=l[2] - z1=l[3] - qdel(l) - x2+=x1-1 - y2+=y1-1 - z2+=z1-1 - world.maxz=max(z2,world.maxz) // stretch z if necessary - if(!ischunk) - swapmaps_loaded[src]=null - swapmaps_byname[id]=src - - proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2) - while(1) - var/nextz=0 - var/swapmap/M - for(M in swapmaps_loaded) - if(M.z2Z2) || M.z1>=Z1+z2 ||\ - M.x1>X2 || M.x2=X1+x2 ||\ - M.y1>Y2 || M.y2=Y1+y2) continue - // look for sub-regions with a defined ceiling - var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1 - if(M.x1>=X1+x2) - .=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2) - if(.) return - else if(M.x2<=X2-x2) - .=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2) - if(.) return - if(M.y1>=Y1+y2) - .=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2) - if(.) return - else if(M.y2<=Y2-y2) - .=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2) - if(.) return - nextz=nextz?min(nextz,M.z2+1):(M.z2+1) - if(!M) - /* If nextz is not 0, then at some point there was an overlap that - could not be resolved by using an area to the side */ - if(nextz) Z1=nextz - if(!nextz || (Z2 && Z2-Z1+1=z2)?list(X1,Y1,Z1):null - X1=1;X2=world.maxx - Y1=1;Y2=world.maxy - - proc/CutXYZ() - var/mx=swapmaps_compiled_maxx - var/my=swapmaps_compiled_maxy - var/mz=swapmaps_compiled_maxz - for(var/swapmap/M in swapmaps_loaded) // may not include src - mx=max(mx,M.x2) - my=max(my,M.y2) - mz=max(mz,M.z2) - world.maxx=mx - world.maxy=my - world.maxz=mz - - // save and delete - proc/Unload() - Save() - qdel(src) - - proc/Save() - if(id==src) return 0 - var/savefile/S=mode?(new):new("map_[id].sav") - S << src - while(locked) sleep(1) - if(mode) - fdel("map_[id].txt") - S.ExportText("/","map_[id].txt") - return 1 - - // this will not delete existing savefiles for this map - proc/SetID(newid) - swapmaps_byname-=id - id=newid - swapmaps_byname[id]=src - - proc/AllTurfs(z) - if(isnum(z) && (zz2)) return null - return block(LoCorner(z),HiCorner(z)) - - // this could be safely called for an obj or mob as well, but - // probably not an area - proc/Contains(turf/T) - return (T && T.x>=x1 && T.x<=x2\ - && T.y>=y1 && T.y<=y2\ - && T.z>=z1 && T.z<=z2) - - proc/InUse() - for(var/turf/T in AllTurfs()) - for(var/mob/M in T) if(M.key) return 1 - - proc/LoCorner(z=z1) - return locate(x1,y1,z) - proc/HiCorner(z=z2) - return locate(x2,y2,z) - - /* - Build procs: Take 2 turfs as corners, plus an item type. - An item may be like: - - turf/wall - obj/fence{icon_state="iron"} - */ - proc/BuildFilledRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - for(T in block(T1,T2)) new item(T) - - proc/BuildRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item) - else - //for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z))) - for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T) - for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T) - for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T) - for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T) - - /* - Supplementary build proc: Takes a list of turfs, plus an item - type. Actually the list doesn't have to be just turfs. - */ - proc/BuildInTurfs(list/turfs,item) - for(var/T in turfs) new item(T) - -atom - Write(savefile/S) - for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays") - if(issaved(vars[V])) - if(vars[V]!=initial(vars[V])) S[V]<>ic - if(istext(ic)) icon=swapmaps_iconcache[ic] - if(l && contents!=l) - contents+=l - qdel(l) - - -// set this up (at runtime) as follows: -// list(\ -// 'player.dmi'="player",\ -// 'monster.dmi'="monster",\ -// ... -// 'item.dmi'="item") -var/list/swapmaps_iconcache - -// preferred mode; sav or text -var/const/SWAPMAPS_SAV=0 -var/const/SWAPMAPS_TEXT=1 -var/swapmaps_mode=SWAPMAPS_SAV - -var/swapmaps_compiled_maxx -var/swapmaps_compiled_maxy -var/swapmaps_compiled_maxz -var/swapmaps_initialized -var/swapmaps_loaded -var/swapmaps_byname - -/proc/InitializeSwapMaps() - if(swapmaps_initialized) return - swapmaps_initialized=1 - swapmaps_compiled_maxx=world.maxx - swapmaps_compiled_maxy=world.maxy - swapmaps_compiled_maxz=world.maxz - swapmaps_loaded=list() - swapmaps_byname=list() - if(swapmaps_iconcache) - for(var/V in swapmaps_iconcache) - // reverse-associate everything - // so you can look up an icon file by name or vice-versa - swapmaps_iconcache[swapmaps_iconcache[V]]=V - -/proc/SwapMaps_AddIconToCache(name,icon) - if(!swapmaps_iconcache) swapmaps_iconcache=list() - swapmaps_iconcache[name]=icon - swapmaps_iconcache[icon]=name - -/proc/SwapMaps_Find(id) - InitializeSwapMaps() - return swapmaps_byname[id] - -/proc/SwapMaps_Load(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(!M) - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else if(fexists("map_[id].sav")) - S=new("map_[id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else return // no file found - if(text) - S=new - S.ImportText("/",file("map_[id].txt")) - S >> M - while(M.locked) sleep(1) - M.mode=text - return M - -/proc/SwapMaps_Save(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(M) M.Save() - return M - -/proc/SwapMaps_Save_All() - InitializeSwapMaps() - for(var/swapmap/M in swapmaps_loaded) - if(M) M.Save() - -/proc/SwapMaps_Unload(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(!M) return // return silently from an error - M.Unload() - return 1 - -/proc/SwapMaps_DeleteFile(id) - fdel("map_[id].sav") - fdel("map_[id].txt") - -/proc/SwapMaps_CreateFromTemplate(template_id) - var/swapmap/M=new - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[template_id].txt")) - text=1 - else if(fexists("map_[template_id].sav")) - S=new("map_[template_id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt")) - text=1 - else - to_world_log("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[template_id].txt")) - /* - This hacky workaround is needed because S >> M will create a brand new - M to fill with data. There's no way to control the Read() process - properly otherwise. The //.0 path should always match the map, however. - */ - S.cd="//.0" - M.Read(S,M) - M.mode=text - while(M.locked) sleep(1) - return M - -/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) - var/swapmap/M=new - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) - text=1 - else if(fexists("map_[chunk_id].sav")) - S=new("map_[chunk_id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) - text=1 - else - to_world_log("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[chunk_id].txt")) - /* - This hacky workaround is needed because S >> M will create a brand new - M to fill with data. There's no way to control the Read() process - properly otherwise. The //.0 path should always match the map, however. - */ - S.cd="//.0" - M.Read(S,M,locorner) - while(M.locked) sleep(1) - qdel(M) - return 1 - -/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) - if(!corner1 || !corner2) - to_world_log("SwapMaps error in SwapMaps_SaveChunk():") - if(!corner1) to_world_log(" corner1 turf is null") - if(!corner2) to_world_log(" corner2 turf is null") - return - var/swapmap/M=new - M.id=chunk_id - M.ischunk=1 // this is a chunk - M.x1=min(corner1.x,corner2.x) - M.y1=min(corner1.y,corner2.y) - M.z1=min(corner1.z,corner2.z) - M.x2=max(corner1.x,corner2.x) - M.y2=max(corner1.y,corner2.y) - M.z2=max(corner1.z,corner2.z) - M.mode=swapmaps_mode - M.Save() - while(M.locked) sleep(1) - qdel(M) - return 1 - -/proc/SwapMaps_GetSize(id) - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else if(fexists("map_[id].sav")) - S=new("map_[id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else - to_world_log("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[id].txt")) - /* - The //.0 path should always be the map. There's no other way to - read this data. - */ - S.cd="//.0" - var/x - var/y - var/z - S["x"] >> x - S["y"] >> y - S["z"] >> z - return list(x,y,z) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/* + SwapMaps library by Lummox JR + developed for digitalBYOND + http://www.digitalbyond.org + + Version 2.1 + + The purpose of this library is to make it easy for authors to swap maps + in and out of their game using savefiles. Swapped-out maps can be + transferred between worlds for an MMORPG, sent to the client, etc. + This is facilitated by the use of a special datum and a global list. + + Uses of swapmaps: + + - Temporary battle arenas + - House interiors + - Individual custom player houses + - Virtually unlimited terrain + - Sharing maps between servers running different instances of the same + game + - Loading and saving pieces of maps for reusable room templates + */ + +/* + User Interface: + + VARS: + + swapmaps_iconcache + An associative list of icon files with names, like + 'player.dmi' = "player" + swapmaps_mode + This must be set at runtime, like in world/New(). + + SWAPMAPS_SAV 0 (default) + Uses .sav files for raw /savefile output. + SWAPMAPS_TEXT 1 + Uses .txt files via ExportText() and ImportText(). These maps + are easily editable and appear to take up less space in the + current version of BYOND. + + PROCS: + + SwapMaps_Find(id) + Find a map by its id + SwapMaps_Load(id) + Load a map by its id + SwapMaps_Save(id) + Save a map by its id (calls swapmap.Save()) + SwapMaps_Unload(id) + Save and unload a map by its id (calls swapmap.Unload()) + SwapMaps_Save_All() + Save all maps + SwapMaps_DeleteFile(id) + Delete a map file + SwapMaps_CreateFromTemplate(id) + Create a new map by loading another map to use as a template. + This map has id==src and will not be saved. To make it savable, + change id with swapmap.SetID(newid). + SwapMaps_LoadChunk(id,turf/locorner) + Load a swapmap as a "chunk", at a specific place. A new datum is + created but it's not added to the list of maps to save or unload. + The new datum can be safely deleted without affecting the turfs + it loaded. The purpose of this is to load a map file onto part of + another swapmap or an existing part of the world. + locorner is the corner turf with the lowest x,y,z values. + SwapMaps_SaveChunk(id,turf/corner1,turf/corner2) + Save a piece of the world as a "chunk". A new datum is created + for the chunk, but it can be deleted without destroying any turfs. + The chunk file can be reloaded as a swapmap all its own, or loaded + via SwapMaps_LoadChunk() to become part of another map. + SwapMaps_GetSize(id) + Return a list corresponding to the x,y,z sizes of a map file, + without loading the map. + Returns null if the map is not found. + SwapMaps_AddIconToCache(name,icon) + Cache an icon file by name for space-saving storage + + swapmap.New(id,x,y,z) + Create a new map; specify id, width (x), height (y), and + depth (z) + Default size is world.maxx,world.maxy,1 + swapmap.New(id,turf1,turf2) + Create a new map; specify id and 2 corners + This becomes a /swapmap for one of the compiled-in maps, for + easy saving. + swapmap.New() + Create a new map datum, but does not allocate space or assign an + ID (used for loading). + swapmap.Del() + Deletes a map but does not save + swapmap.Save() + Saves to map_[id].sav + Maps with id==src are not saved. + swapmap.Unload() + Saves the map and then deletes it + Maps with id==src are not saved. + swapmap.SetID(id) + Change the map's id and make changes to the lookup list + swapmap.AllTurfs(z) + Returns a block of turfs encompassing the entire map, or on just + one z-level + z is in world coordinates; it is optional + swapmap.Contains(turf/T) + Returns nonzero if T is inside the map's boundaries. + Also works for objs and mobs, but the proc is not area-safe. + swapmap.InUse() + Returns nonzero if a mob with a key is within the map's + boundaries. + swapmap.LoCorner(z=z1) + Returns locate(x1,y1,z), where z=z1 if none is specified. + swapmap.HiCorner(z=z2) + Returns locate(x2,y2,z), where z=z2 if none is specified. + swapmap.BuildFilledRectangle(turf/corner1,turf/corner2,item) + Builds a filled rectangle of item from one corner turf to the + other, on multiple z-levels if necessary. The corners may be + specified in any order. + item is a type path like /turf/wall or /obj/barrel{full=1}. + swapmap.BuildRectangle(turf/corner1,turf/corner2,item) + Builds an unfilled rectangle of item from one corner turf to + the other, on multiple z-levels if necessary. + swapmap.BuildInTurfs(list/turfs,item) + Builds item on all of the turfs listed. The list need not + contain only turfs, or even only atoms. + */ + +swapmap + var/id // a string identifying this map uniquely + var/x1 // minimum x,y,z coords + var/y1 + var/z1 + var/x2 // maximum x,y,z coords (also used as width,height,depth until positioned) + var/y2 + var/z2 + var/tmp/locked // don't move anyone to this map; it's saving or loading + var/tmp/mode // save as text-mode + var/ischunk // tells the load routine to load to the specified location + + New(_id,x,y,z) + if(isnull(_id)) return + id=_id + mode=swapmaps_mode + if(isturf(x) && isturf(y)) + /* + Special format: Defines a map as an existing set of turfs; + this is useful for saving a compiled map in swapmap format. + Because this is a compiled-in map, its turfs are not deleted + when the datum is deleted. + */ + x1=min(x:x,y:x);x2=max(x:x,y:x) + y1=min(x:y,y:y);y2=max(x:y,y:y) + z1=min(x:z,y:z);z2=max(x:z,y:z) + InitializeSwapMaps() + if(z2>swapmaps_compiled_maxz ||\ + y2>swapmaps_compiled_maxy ||\ + x2>swapmaps_compiled_maxx) + qdel(src) + return + x2=x?(x):world.maxx + y2=y?(y):world.maxy + z2=z?(z):1 + AllocateSwapMap() + + Del() + // a temporary datum for a chunk can be deleted outright + // for others, some cleanup is necessary + if(!ischunk) + swapmaps_loaded-=src + swapmaps_byname-=id + if(z2>swapmaps_compiled_maxz ||\ + y2>swapmaps_compiled_maxy ||\ + x2>swapmaps_compiled_maxx) + var/list/areas=new + for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2))) + for(var/obj/O in A) qdel(O) + for(var/mob/M in A) + if(!M.key) qdel(M) + else M.loc=null + areas[A.loc]=null + qdel(A) + // delete areas that belong only to this map + for(var/area/a in areas) + if(a && !a.contents.len) qdel(a) + if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ() + qdel(areas) + ..() + + /* + Savefile format: + map + id + x // size, not coords + y + z + areas // list of areas, not including default + [each z; 1 to depth] + [each y; 1 to height] + [each x; 1 to width] + type // of turf + AREA // if non-default; saved as a number (index into areas list) + vars // all other changed vars + */ + Write(savefile/S) + var/x + var/y + var/z + var/n + var/list/areas + var/area/defarea=locate(world.area) + if(!defarea) defarea=new world.area + areas=list() + for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2))) + areas[T.loc]=null + for(n in areas) // quickly eliminate associations for smaller storage + areas-=n + areas+=n + areas-=defarea + InitializeSwapMaps() + locked=1 + S["id"] << id + S["z"] << z2-z1+1 + S["y"] << y2-y1+1 + S["x"] << x2-x1+1 + S["areas"] << areas + for(n in 1 to areas.len) areas[areas[n]]=n + var/oldcd=S.cd + for(z=z1,z<=z2,++z) + S.cd="[z-z1+1]" + for(y=y1,y<=y2,++y) + S.cd="[y-y1+1]" + for(x=x1,x<=x2,++x) + S.cd="[x-x1+1]" + var/turf/T=locate(x,y,z) + S["type"] << T.type + if(T.loc!=defarea) S["AREA"] << areas[T.loc] + T.Write(S) + S.cd=".." + S.cd=".." + sleep() + S.cd=oldcd + locked=0 + qdel(areas) + + Read(savefile/S,_id,turf/locorner) + var/x + var/y + var/z + var/n + var/list/areas + var/area/defarea=locate(world.area) + id=_id + if(locorner) + ischunk=1 + x1=locorner.x + y1=locorner.y + z1=locorner.z + if(!defarea) defarea=new world.area + if(!_id) + S["id"] >> id + else + var/dummy + S["id"] >> dummy + S["z"] >> z2 // these are depth, + S["y"] >> y2 // height, + S["x"] >> x2 // width + S["areas"] >> areas + locked=1 + AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords + var/oldcd=S.cd + for(z=z1,z<=z2,++z) + S.cd="[z-z1+1]" + for(y=y1,y<=y2,++y) + S.cd="[y-y1+1]" + for(x=x1,x<=x2,++x) + S.cd="[x-x1+1]" + var/tp + S["type"]>>tp + var/turf/T=locate(x,y,z) + T.loc.contents-=T + T=new tp(locate(x,y,z)) + if("AREA" in S.dir) + S["AREA"]>>n + var/area/A=areas[n] + A.contents+=T + else defarea.contents+=T + // clear the turf + for(var/obj/O in T) qdel(O) + for(var/mob/M in T) + if(!M.key) qdel(M) + else M.loc=null + // finish the read + T.Read(S) + S.cd=".." + S.cd=".." + sleep() + S.cd=oldcd + locked=0 + qdel(areas) + + /* + Find an empty block on the world map in which to load this map. + If no space is found, increase world.maxz as necessary. (If the + map is greater in x,y size than the current world, expand + world.maxx and world.maxy too.) + + Ignore certain operations if loading a map as a chunk. Use the + x1,y1,z1 position for it, and *don't* count it as a loaded map. + */ + proc/AllocateSwapMap() + InitializeSwapMaps() + world.maxx=max(x2,world.maxx) // stretch x/y if necessary + world.maxy=max(y2,world.maxy) + if(!ischunk) + if(world.maxz<=swapmaps_compiled_maxz) + z1=swapmaps_compiled_maxz+1 + x1=1;y1=1 + else + var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1) + x1=l[1] + y1=l[2] + z1=l[3] + qdel(l) + x2+=x1-1 + y2+=y1-1 + z2+=z1-1 + world.maxz=max(z2,world.maxz) // stretch z if necessary + if(!ischunk) + swapmaps_loaded[src]=null + swapmaps_byname[id]=src + + proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2) + while(1) + var/nextz=0 + var/swapmap/M + for(M in swapmaps_loaded) + if(M.z2Z2) || M.z1>=Z1+z2 ||\ + M.x1>X2 || M.x2=X1+x2 ||\ + M.y1>Y2 || M.y2=Y1+y2) continue + // look for sub-regions with a defined ceiling + var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1 + if(M.x1>=X1+x2) + .=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2) + if(.) return + else if(M.x2<=X2-x2) + .=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2) + if(.) return + if(M.y1>=Y1+y2) + .=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2) + if(.) return + else if(M.y2<=Y2-y2) + .=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2) + if(.) return + nextz=nextz?min(nextz,M.z2+1):(M.z2+1) + if(!M) + /* If nextz is not 0, then at some point there was an overlap that + could not be resolved by using an area to the side */ + if(nextz) Z1=nextz + if(!nextz || (Z2 && Z2-Z1+1=z2)?list(X1,Y1,Z1):null + X1=1;X2=world.maxx + Y1=1;Y2=world.maxy + + proc/CutXYZ() + var/mx=swapmaps_compiled_maxx + var/my=swapmaps_compiled_maxy + var/mz=swapmaps_compiled_maxz + for(var/swapmap/M in swapmaps_loaded) // may not include src + mx=max(mx,M.x2) + my=max(my,M.y2) + mz=max(mz,M.z2) + world.maxx=mx + world.maxy=my + world.maxz=mz + + // save and delete + proc/Unload() + Save() + qdel(src) + + proc/Save() + if(id==src) return 0 + var/savefile/S=mode?(new):new("map_[id].sav") + S << src + while(locked) sleep(1) + if(mode) + fdel("map_[id].txt") + S.ExportText("/","map_[id].txt") + return 1 + + // this will not delete existing savefiles for this map + proc/SetID(newid) + swapmaps_byname-=id + id=newid + swapmaps_byname[id]=src + + proc/AllTurfs(z) + if(isnum(z) && (zz2)) return null + return block(LoCorner(z),HiCorner(z)) + + // this could be safely called for an obj or mob as well, but + // probably not an area + proc/Contains(turf/T) + return (T && T.x>=x1 && T.x<=x2\ + && T.y>=y1 && T.y<=y2\ + && T.z>=z1 && T.z<=z2) + + proc/InUse() + for(var/turf/T in AllTurfs()) + for(var/mob/M in T) if(M.key) return 1 + + proc/LoCorner(z=z1) + return locate(x1,y1,z) + proc/HiCorner(z=z2) + return locate(x2,y2,z) + + /* + Build procs: Take 2 turfs as corners, plus an item type. + An item may be like: + + turf/wall + obj/fence{icon_state="iron"} + */ + proc/BuildFilledRectangle(turf/T1,turf/T2,item) + if(!Contains(T1) || !Contains(T2)) return + var/turf/T=T1 + // pick new corners in a block()-friendly form + T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) + T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) + for(T in block(T1,T2)) new item(T) + + proc/BuildRectangle(turf/T1,turf/T2,item) + if(!Contains(T1) || !Contains(T2)) return + var/turf/T=T1 + // pick new corners in a block()-friendly form + T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) + T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) + if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item) + else + //for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z))) + for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T) + for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T) + for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T) + for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T) + + /* + Supplementary build proc: Takes a list of turfs, plus an item + type. Actually the list doesn't have to be just turfs. + */ + proc/BuildInTurfs(list/turfs,item) + for(var/T in turfs) new item(T) + +atom + Write(savefile/S) + for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays") + if(issaved(vars[V])) + if(vars[V]!=initial(vars[V])) S[V]<>ic + if(istext(ic)) icon=swapmaps_iconcache[ic] + if(l && contents!=l) + contents+=l + qdel(l) + + +// set this up (at runtime) as follows: +// list(\ +// 'player.dmi'="player",\ +// 'monster.dmi'="monster",\ +// ... +// 'item.dmi'="item") +var/list/swapmaps_iconcache + +// preferred mode; sav or text +var/const/SWAPMAPS_SAV=0 +var/const/SWAPMAPS_TEXT=1 +var/swapmaps_mode=SWAPMAPS_SAV + +var/swapmaps_compiled_maxx +var/swapmaps_compiled_maxy +var/swapmaps_compiled_maxz +var/swapmaps_initialized +var/swapmaps_loaded +var/swapmaps_byname + +/proc/InitializeSwapMaps() + if(swapmaps_initialized) return + swapmaps_initialized=1 + swapmaps_compiled_maxx=world.maxx + swapmaps_compiled_maxy=world.maxy + swapmaps_compiled_maxz=world.maxz + swapmaps_loaded=list() + swapmaps_byname=list() + if(swapmaps_iconcache) + for(var/V in swapmaps_iconcache) + // reverse-associate everything + // so you can look up an icon file by name or vice-versa + swapmaps_iconcache[swapmaps_iconcache[V]]=V + +/proc/SwapMaps_AddIconToCache(name,icon) + if(!swapmaps_iconcache) swapmaps_iconcache=list() + swapmaps_iconcache[name]=icon + swapmaps_iconcache[icon]=name + +/proc/SwapMaps_Find(id) + InitializeSwapMaps() + return swapmaps_byname[id] + +/proc/SwapMaps_Load(id) + InitializeSwapMaps() + var/swapmap/M=swapmaps_byname[id] + if(!M) + var/savefile/S + var/text=0 + if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) + text=1 + else if(fexists("map_[id].sav")) + S=new("map_[id].sav") + else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) + text=1 + else return // no file found + if(text) + S=new + S.ImportText("/",file("map_[id].txt")) + S >> M + while(M.locked) sleep(1) + M.mode=text + return M + +/proc/SwapMaps_Save(id) + InitializeSwapMaps() + var/swapmap/M=swapmaps_byname[id] + if(M) M.Save() + return M + +/proc/SwapMaps_Save_All() + InitializeSwapMaps() + for(var/swapmap/M in swapmaps_loaded) + if(M) M.Save() + +/proc/SwapMaps_Unload(id) + InitializeSwapMaps() + var/swapmap/M=swapmaps_byname[id] + if(!M) return // return silently from an error + M.Unload() + return 1 + +/proc/SwapMaps_DeleteFile(id) + fdel("map_[id].sav") + fdel("map_[id].txt") + +/proc/SwapMaps_CreateFromTemplate(template_id) + var/swapmap/M=new + var/savefile/S + var/text=0 + if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[template_id].txt")) + text=1 + else if(fexists("map_[template_id].sav")) + S=new("map_[template_id].sav") + else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt")) + text=1 + else + to_world_log("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.") + return + if(text) + S=new + S.ImportText("/",file("map_[template_id].txt")) + /* + This hacky workaround is needed because S >> M will create a brand new + M to fill with data. There's no way to control the Read() process + properly otherwise. The //.0 path should always match the map, however. + */ + S.cd="//.0" + M.Read(S,M) + M.mode=text + while(M.locked) sleep(1) + return M + +/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) + var/swapmap/M=new + var/savefile/S + var/text=0 + if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) + text=1 + else if(fexists("map_[chunk_id].sav")) + S=new("map_[chunk_id].sav") + else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) + text=1 + else + to_world_log("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.") + return + if(text) + S=new + S.ImportText("/",file("map_[chunk_id].txt")) + /* + This hacky workaround is needed because S >> M will create a brand new + M to fill with data. There's no way to control the Read() process + properly otherwise. The //.0 path should always match the map, however. + */ + S.cd="//.0" + M.Read(S,M,locorner) + while(M.locked) sleep(1) + qdel(M) + return 1 + +/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) + if(!corner1 || !corner2) + to_world_log("SwapMaps error in SwapMaps_SaveChunk():") + if(!corner1) to_world_log(" corner1 turf is null") + if(!corner2) to_world_log(" corner2 turf is null") + return + var/swapmap/M=new + M.id=chunk_id + M.ischunk=1 // this is a chunk + M.x1=min(corner1.x,corner2.x) + M.y1=min(corner1.y,corner2.y) + M.z1=min(corner1.z,corner2.z) + M.x2=max(corner1.x,corner2.x) + M.y2=max(corner1.y,corner2.y) + M.z2=max(corner1.z,corner2.z) + M.mode=swapmaps_mode + M.Save() + while(M.locked) sleep(1) + qdel(M) + return 1 + +/proc/SwapMaps_GetSize(id) + var/savefile/S + var/text=0 + if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) + text=1 + else if(fexists("map_[id].sav")) + S=new("map_[id].sav") + else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) + text=1 + else + to_world_log("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.") + return + if(text) + S=new + S.ImportText("/",file("map_[id].txt")) + /* + The //.0 path should always be the map. There's no other way to + read this data. + */ + S.cd="//.0" + var/x + var/y + var/z + S["x"] >> x + S["y"] >> y + S["z"] >> z + return list(x,y,z) diff --git a/code/modules/materials/material_synth.dm b/code/modules/materials/material_synth.dm index 972b8b61ed..9d595bce99 100644 --- a/code/modules/materials/material_synth.dm +++ b/code/modules/materials/material_synth.dm @@ -1,41 +1,41 @@ -// These objects are used by cyborgs to get around a lot of the limitations on stacks -// and the weird bugs that crop up when expecting borg module code to behave sanely. -/obj/item/stack/material/cyborg - uses_charge = 1 - charge_costs = list(1000) - gender = NEUTER - matter = null // Don't shove it in the autholathe. - -/obj/item/stack/material/cyborg/Initialize() - . = ..() - name = "[material.display_name] synthesiser" - desc = "A device that synthesises [material.display_name]." - matter = null - -/obj/item/stack/material/cyborg/update_strings() - return - -/obj/item/stack/material/cyborg/plastic - icon_state = "sheet-plastic" - default_type = "plastic" - -/obj/item/stack/material/cyborg/steel - icon_state = "sheet-metal" - default_type = "steel" - -/obj/item/stack/material/cyborg/plasteel - icon_state = "sheet-plasteel" - default_type = "plasteel" - -/obj/item/stack/material/cyborg/wood - icon_state = "sheet-wood" - default_type = "wood" - -/obj/item/stack/material/cyborg/glass - icon_state = "sheet-glass" - default_type = "glass" - -/obj/item/stack/material/cyborg/glass/reinforced - icon_state = "sheet-rglass" - default_type = "rglass" +// These objects are used by cyborgs to get around a lot of the limitations on stacks +// and the weird bugs that crop up when expecting borg module code to behave sanely. +/obj/item/stack/material/cyborg + uses_charge = 1 + charge_costs = list(1000) + gender = NEUTER + matter = null // Don't shove it in the autholathe. + +/obj/item/stack/material/cyborg/Initialize() + . = ..() + name = "[material.display_name] synthesiser" + desc = "A device that synthesises [material.display_name]." + matter = null + +/obj/item/stack/material/cyborg/update_strings() + return + +/obj/item/stack/material/cyborg/plastic + icon_state = "sheet-plastic" + default_type = "plastic" + +/obj/item/stack/material/cyborg/steel + icon_state = "sheet-metal" + default_type = "steel" + +/obj/item/stack/material/cyborg/plasteel + icon_state = "sheet-plasteel" + default_type = "plasteel" + +/obj/item/stack/material/cyborg/wood + icon_state = "sheet-wood" + default_type = "wood" + +/obj/item/stack/material/cyborg/glass + icon_state = "sheet-glass" + default_type = "glass" + +/obj/item/stack/material/cyborg/glass/reinforced + icon_state = "sheet-rglass" + default_type = "rglass" charge_costs = list(500, 1000) \ No newline at end of file diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index 43bd5c8588..f2506702bd 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -1,29 +1,29 @@ -/obj/effect/mineral - name = "mineral vein" - icon = 'icons/obj/mining.dmi' - desc = "Shiny." - mouse_opacity = 0 - density = FALSE - anchored = TRUE - var/ore_key - var/image/scanner_image - var/ore_reagent // Reagent from pumping water near this ore. - -/obj/effect/mineral/New(var/newloc, var/ore/M) - ..(newloc) - name = "[M.display_name] deposit" - ore_key = M.name - if(M.reagent) - ore_reagent = M.reagent - icon_state = "rock_[ore_key]" - var/turf/T = get_turf(src) - layer = T.layer+0.1 - -/obj/effect/mineral/proc/get_scan_overlay() - if(!scanner_image) - var/ore/O = GLOB.ore_data[ore_key] - if(O) - scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state)) - else - to_world("No ore data for [src]!") +/obj/effect/mineral + name = "mineral vein" + icon = 'icons/obj/mining.dmi' + desc = "Shiny." + mouse_opacity = 0 + density = FALSE + anchored = TRUE + var/ore_key + var/image/scanner_image + var/ore_reagent // Reagent from pumping water near this ore. + +/obj/effect/mineral/New(var/newloc, var/ore/M) + ..(newloc) + name = "[M.display_name] deposit" + ore_key = M.name + if(M.reagent) + ore_reagent = M.reagent + icon_state = "rock_[ore_key]" + var/turf/T = get_turf(src) + layer = T.layer+0.1 + +/obj/effect/mineral/proc/get_scan_overlay() + if(!scanner_image) + var/ore/O = GLOB.ore_data[ore_key] + if(O) + scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state)) + else + to_world("No ore data for [src]!") return scanner_image \ No newline at end of file diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index 94155d5643..0342494684 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -1,12 +1,12 @@ -//Nobody here anymore. -/mob/observer/dead/Login() - ..() //Creates the plane_holder lazily - plane_holder.set_vis(VIS_GHOSTS, ghostvision) - plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) - plane_holder.set_vis(VIS_CLOAKED, TRUE) - plane_holder.set_vis(VIS_AI_EYE, TRUE) - plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - GHOST VISION IS AUGMENTED - plane = PLANE_GHOSTS - if(cleanup_timer) - deltimer(cleanup_timer) +//Nobody here anymore. +/mob/observer/dead/Login() + ..() //Creates the plane_holder lazily + plane_holder.set_vis(VIS_GHOSTS, ghostvision) + plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) + plane_holder.set_vis(VIS_CLOAKED, TRUE) + plane_holder.set_vis(VIS_AI_EYE, TRUE) + plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - GHOST VISION IS AUGMENTED + plane = PLANE_GHOSTS + if(cleanup_timer) + deltimer(cleanup_timer) cleanup_timer = null \ No newline at end of file diff --git a/code/modules/mob/dead/observer/logout.dm b/code/modules/mob/dead/observer/logout.dm index 06e071d980..e0f681e2e8 100644 --- a/code/modules/mob/dead/observer/logout.dm +++ b/code/modules/mob/dead/observer/logout.dm @@ -1,9 +1,9 @@ -/mob/observer/dead/Logout() - ..() - spawn(0) - if(src && !key) //we've transferred to another mob. This ghost should be deleted. - qdel(src) - else - if(mind && mind.assigned_role) //CHOMPEdit - return //CHOMPEdit - cleanup_timer = QDEL_IN(src, 10 MINUTES) +/mob/observer/dead/Logout() + ..() + spawn(0) + if(src && !key) //we've transferred to another mob. This ghost should be deleted. + qdel(src) + else + if(mind && mind.assigned_role) //CHOMPEdit + return //CHOMPEdit + cleanup_timer = QDEL_IN(src, 10 MINUTES) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 48cdfa3ebd..712393fd21 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -1,37 +1,37 @@ -// Shortcuts for above proc -/mob/proc/visible_emote(var/act_desc) - custom_emote(VISIBLE_MESSAGE, act_desc) - -/mob/proc/audible_emote(var/act_desc) - custom_emote(AUDIBLE_MESSAGE, act_desc) - -/mob/proc/emote_dead(var/message) - - if(client.prefs.muted & MUTE_DEADCHAT) - to_chat(src, "You cannot send deadchat emotes (muted).") - return - - if(!is_preference_enabled(/datum/client_preference/show_dsay)) - to_chat(src, "You have deadchat muted.") - return - - if(!src.client.holder) - if(!config.dsay_allowed) - to_chat(src, "Deadchat is globally muted.") - return - - - var/input - if(!message) - input = sanitize_or_reflect(tgui_input_text(src, "Choose an emote to display."), src) //VOREStation Edit - Reflect too long messages, within reason - else - input = message - - input = encode_html_emphasis(input) - - if(input) - log_ghostemote(input, src) - if(!invisibility) //If the ghost is made visible by admins or cult. And to see if the ghost has toggled its own visibility, as well. -Mech - visible_message("[src] [input]") - else - say_dead_direct(input, src) +// Shortcuts for above proc +/mob/proc/visible_emote(var/act_desc) + custom_emote(VISIBLE_MESSAGE, act_desc) + +/mob/proc/audible_emote(var/act_desc) + custom_emote(AUDIBLE_MESSAGE, act_desc) + +/mob/proc/emote_dead(var/message) + + if(client.prefs.muted & MUTE_DEADCHAT) + to_chat(src, "You cannot send deadchat emotes (muted).") + return + + if(!is_preference_enabled(/datum/client_preference/show_dsay)) + to_chat(src, "You have deadchat muted.") + return + + if(!src.client.holder) + if(!config.dsay_allowed) + to_chat(src, "Deadchat is globally muted.") + return + + + var/input + if(!message) + input = sanitize_or_reflect(tgui_input_text(src, "Choose an emote to display."), src) //VOREStation Edit - Reflect too long messages, within reason + else + input = message + + input = encode_html_emphasis(input) + + if(input) + log_ghostemote(input, src) + if(!invisibility) //If the ghost is made visible by admins or cult. And to see if the ghost has toggled its own visibility, as well. -Mech + visible_message("[src] [input]") + else + say_dead_direct(input, src) diff --git a/code/modules/mob/freelook/ai/cameranet.dm b/code/modules/mob/freelook/ai/cameranet.dm index f29749b38c..d1b395d823 100644 --- a/code/modules/mob/freelook/ai/cameranet.dm +++ b/code/modules/mob/freelook/ai/cameranet.dm @@ -1,44 +1,44 @@ -// CAMERA NET -// -// The datum containing all the chunks. - -/datum/visualnet/camera - // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Destroy(). - var/list/cameras = list() - var/cameras_unsorted = 1 - chunk_type = /datum/chunk/camera - -/datum/visualnet/camera/proc/process_sort() - if(cameras_unsorted) - cameras = dd_sortedObjectList(cameras) - cameras_unsorted = 0 - -// Removes a camera from a chunk. - -/datum/visualnet/camera/proc/removeCamera(obj/machinery/camera/c) - if(c.can_use()) - majorChunkChange(c, 0) - -// Add a camera to a chunk. - -/datum/visualnet/camera/proc/addCamera(obj/machinery/camera/c) - if(c.can_use()) - majorChunkChange(c, 1) - -// Used for Cyborg cameras. Since portable cameras can be in ANY chunk. - -/datum/visualnet/camera/proc/updatePortableCamera(obj/machinery/camera/c) - if(c.can_use()) - majorChunkChange(c, 1) - //else - // majorChunkChange(c, 0) - -/datum/visualnet/camera/onMajorChunkChange(atom/c, var/choice, var/datum/chunk/camera/chunk) -// Only add actual cameras to the list of cameras - if(istype(c, /obj/machinery/camera)) - if(choice == 0) - // Remove the camera. - chunk.cameras -= c - else if(choice == 1) - // You can't have the same camera in the list twice. - chunk.cameras |= c +// CAMERA NET +// +// The datum containing all the chunks. + +/datum/visualnet/camera + // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Destroy(). + var/list/cameras = list() + var/cameras_unsorted = 1 + chunk_type = /datum/chunk/camera + +/datum/visualnet/camera/proc/process_sort() + if(cameras_unsorted) + cameras = dd_sortedObjectList(cameras) + cameras_unsorted = 0 + +// Removes a camera from a chunk. + +/datum/visualnet/camera/proc/removeCamera(obj/machinery/camera/c) + if(c.can_use()) + majorChunkChange(c, 0) + +// Add a camera to a chunk. + +/datum/visualnet/camera/proc/addCamera(obj/machinery/camera/c) + if(c.can_use()) + majorChunkChange(c, 1) + +// Used for Cyborg cameras. Since portable cameras can be in ANY chunk. + +/datum/visualnet/camera/proc/updatePortableCamera(obj/machinery/camera/c) + if(c.can_use()) + majorChunkChange(c, 1) + //else + // majorChunkChange(c, 0) + +/datum/visualnet/camera/onMajorChunkChange(atom/c, var/choice, var/datum/chunk/camera/chunk) +// Only add actual cameras to the list of cameras + if(istype(c, /obj/machinery/camera)) + if(choice == 0) + // Remove the camera. + chunk.cameras -= c + else if(choice == 1) + // You can't have the same camera in the list twice. + chunk.cameras |= c diff --git a/code/modules/mob/freelook/ai/chunk.dm b/code/modules/mob/freelook/ai/chunk.dm index ebd68a6206..8f5a9317ec 100644 --- a/code/modules/mob/freelook/ai/chunk.dm +++ b/code/modules/mob/freelook/ai/chunk.dm @@ -1,48 +1,48 @@ -// CAMERA CHUNK -// -// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. -// Allows the Eye to stream these chunks and know what it can and cannot see. - -/datum/chunk/camera - var/list/cameras = list() - -/datum/chunk/camera/acquireVisibleTurfs(var/list/visible) - for(var/obj/machinery/camera/c as anything in cameras) - - if(!istype(c)) - cameras -= c - continue - - if(!c.can_use()) - continue - - var/turf/point = locate(src.x + 8, src.y + 8, src.z) - if(get_dist(point, c) > 24) - cameras -= c - - for(var/turf/t in c.can_see()) - visible[t] = t - - for(var/mob/living/silicon/ai/AI in living_mob_list) - for(var/turf/t in AI.seen_camera_turfs()) - visible[t] = t - -// Create a new camera chunk, since the chunks are made as they are needed. - -/datum/chunk/camera/New(loc, x, y, z) - for(var/obj/machinery/camera/c in range(16, locate(x + 8, y + 8, z))) - if(c.can_use()) - cameras += c - ..() - -/mob/living/silicon/proc/provides_camera_vision() - return 0 - -/mob/living/silicon/ai/provides_camera_vision() - return stat != DEAD - -/mob/living/silicon/robot/provides_camera_vision() - return src.camera && src.camera.network.len && (z in using_map.contact_levels) //VOREStation Edit - -/mob/living/silicon/ai/proc/seen_camera_turfs() - return seen_turfs_in_range(src, world.view) +// CAMERA CHUNK +// +// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. +// Allows the Eye to stream these chunks and know what it can and cannot see. + +/datum/chunk/camera + var/list/cameras = list() + +/datum/chunk/camera/acquireVisibleTurfs(var/list/visible) + for(var/obj/machinery/camera/c as anything in cameras) + + if(!istype(c)) + cameras -= c + continue + + if(!c.can_use()) + continue + + var/turf/point = locate(src.x + 8, src.y + 8, src.z) + if(get_dist(point, c) > 24) + cameras -= c + + for(var/turf/t in c.can_see()) + visible[t] = t + + for(var/mob/living/silicon/ai/AI in living_mob_list) + for(var/turf/t in AI.seen_camera_turfs()) + visible[t] = t + +// Create a new camera chunk, since the chunks are made as they are needed. + +/datum/chunk/camera/New(loc, x, y, z) + for(var/obj/machinery/camera/c in range(16, locate(x + 8, y + 8, z))) + if(c.can_use()) + cameras += c + ..() + +/mob/living/silicon/proc/provides_camera_vision() + return 0 + +/mob/living/silicon/ai/provides_camera_vision() + return stat != DEAD + +/mob/living/silicon/robot/provides_camera_vision() + return src.camera && src.camera.network.len && (z in using_map.contact_levels) //VOREStation Edit + +/mob/living/silicon/ai/proc/seen_camera_turfs() + return seen_turfs_in_range(src, world.view) diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index 711dbd3085..fa3fb311f0 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -1,115 +1,115 @@ -// AI EYE -// -// A mob that the AI controls to look around the station with. -// It streams chunks as it moves around, which will show it what the AI can and cannot see. - -/mob/observer/eye/aiEye - name = "Inactive AI Eye" - icon_state = "AI-eye" - -/mob/observer/eye/aiEye/New() - ..() - visualnet = cameranet - -/mob/observer/eye/aiEye/Destroy() - if(owner) - var/mob/living/silicon/ai/ai = owner - ai.all_eyes -= src - owner = null - . = ..() - -/mob/observer/eye/aiEye/setLoc(var/T, var/cancel_tracking = 1) - if(owner) - T = get_turf(T) - loc = T - - var/mob/living/silicon/ai/ai = owner - if(cancel_tracking) - ai.ai_cancel_tracking() - - if(use_static) - ai.camera_visibility(src) - - if(ai.client && !ai.multicam_on) - ai.client.eye = src - - if(ai.master_multicam) - ai.master_multicam.refresh_view() - - if(ai.holo) - if(ai.hologram_follow) - ai.holo.move_hologram(ai) - - return 1 - -// AI MOVEMENT - -// The AI's "eye". Described on the top of the page. - -/mob/living/silicon/ai - var/obj/machinery/hologram/holopad/holo = null - -/mob/living/silicon/ai/proc/destroy_eyeobj(var/atom/new_eye) - if(!eyeobj) return - if(!new_eye) - new_eye = src - eyeobj.owner = null - qdel(eyeobj) // No AI, no Eye - eyeobj = null - if(client) - client.eye = new_eye - -/mob/living/silicon/ai/proc/create_eyeobj(var/newloc) - if(eyeobj) - destroy_eyeobj() - if(!newloc) - newloc = src.loc - eyeobj = new /mob/observer/eye/aiEye(newloc) - all_eyes += eyeobj - eyeobj.owner = src - eyeobj.name = "[src.name] (AI Eye)" // Give it a name - if(client) - client.eye = eyeobj - SetName(src.name) - -// Intiliaze the eye by assigning it's "ai" variable to us. Then set it's loc to us. -/mob/living/silicon/ai/Initialize() - . = ..() - create_eyeobj() - if(eyeobj) - eyeobj.loc = src.loc - -/mob/living/silicon/ai/Destroy() - destroy_eyeobj() - return ..() - -/atom/proc/move_camera_by_click() - if(istype(usr, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/AI = usr - if(AI.eyeobj && (AI.multicam_on || (AI.client.eye == AI.eyeobj))) - var/turf/T = get_turf(src) - if(T) - AI.eyeobj.setLoc(T) - -/mob/living/silicon/ai/proc/view_core() - camera = null - unset_machine() - - if(!src.eyeobj) - return - - if(client && client.eye) - client.eye = src - for(var/datum/chunk/c in eyeobj.visibleChunks) - c.remove(eyeobj) - src.eyeobj.setLoc(src) - -/mob/living/silicon/ai/proc/toggle_acceleration() - set category = "AI Settings" - set name = "Toggle Camera Acceleration" - - if(!eyeobj) - return - - eyeobj.acceleration = !eyeobj.acceleration - to_chat(usr, "Camera acceleration has been toggled [eyeobj.acceleration ? "on" : "off"].") +// AI EYE +// +// A mob that the AI controls to look around the station with. +// It streams chunks as it moves around, which will show it what the AI can and cannot see. + +/mob/observer/eye/aiEye + name = "Inactive AI Eye" + icon_state = "AI-eye" + +/mob/observer/eye/aiEye/New() + ..() + visualnet = cameranet + +/mob/observer/eye/aiEye/Destroy() + if(owner) + var/mob/living/silicon/ai/ai = owner + ai.all_eyes -= src + owner = null + . = ..() + +/mob/observer/eye/aiEye/setLoc(var/T, var/cancel_tracking = 1) + if(owner) + T = get_turf(T) + loc = T + + var/mob/living/silicon/ai/ai = owner + if(cancel_tracking) + ai.ai_cancel_tracking() + + if(use_static) + ai.camera_visibility(src) + + if(ai.client && !ai.multicam_on) + ai.client.eye = src + + if(ai.master_multicam) + ai.master_multicam.refresh_view() + + if(ai.holo) + if(ai.hologram_follow) + ai.holo.move_hologram(ai) + + return 1 + +// AI MOVEMENT + +// The AI's "eye". Described on the top of the page. + +/mob/living/silicon/ai + var/obj/machinery/hologram/holopad/holo = null + +/mob/living/silicon/ai/proc/destroy_eyeobj(var/atom/new_eye) + if(!eyeobj) return + if(!new_eye) + new_eye = src + eyeobj.owner = null + qdel(eyeobj) // No AI, no Eye + eyeobj = null + if(client) + client.eye = new_eye + +/mob/living/silicon/ai/proc/create_eyeobj(var/newloc) + if(eyeobj) + destroy_eyeobj() + if(!newloc) + newloc = src.loc + eyeobj = new /mob/observer/eye/aiEye(newloc) + all_eyes += eyeobj + eyeobj.owner = src + eyeobj.name = "[src.name] (AI Eye)" // Give it a name + if(client) + client.eye = eyeobj + SetName(src.name) + +// Intiliaze the eye by assigning it's "ai" variable to us. Then set it's loc to us. +/mob/living/silicon/ai/Initialize() + . = ..() + create_eyeobj() + if(eyeobj) + eyeobj.loc = src.loc + +/mob/living/silicon/ai/Destroy() + destroy_eyeobj() + return ..() + +/atom/proc/move_camera_by_click() + if(istype(usr, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/AI = usr + if(AI.eyeobj && (AI.multicam_on || (AI.client.eye == AI.eyeobj))) + var/turf/T = get_turf(src) + if(T) + AI.eyeobj.setLoc(T) + +/mob/living/silicon/ai/proc/view_core() + camera = null + unset_machine() + + if(!src.eyeobj) + return + + if(client && client.eye) + client.eye = src + for(var/datum/chunk/c in eyeobj.visibleChunks) + c.remove(eyeobj) + src.eyeobj.setLoc(src) + +/mob/living/silicon/ai/proc/toggle_acceleration() + set category = "AI Settings" + set name = "Toggle Camera Acceleration" + + if(!eyeobj) + return + + eyeobj.acceleration = !eyeobj.acceleration + to_chat(usr, "Camera acceleration has been toggled [eyeobj.acceleration ? "on" : "off"].") diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index 9fd28344df..3ce11bb42c 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -1,72 +1,72 @@ -#define BORG_CAMERA_BUFFER 30 - -// ROBOT MOVEMENT - -// Update the portable camera everytime the Robot moves. -// This might be laggy, comment it out if there are problems. -/mob/living/silicon/var/updating = 0 - -/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(!provides_camera_vision()) - return - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(old_loc != src.loc) - cameranet.updatePortableCamera(src.camera) - updating = 0 - -/mob/living/silicon/ai/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(!provides_camera_vision()) - return - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(old_loc != src.loc) - cameranet.updateVisibility(old_loc, 0) - cameranet.updateVisibility(loc, 0) - updating = 0 - -#undef BORG_CAMERA_BUFFER - -// CAMERA - -// An addition to deactivate which removes/adds the camera from the chunk list based on if it works or not. - -/obj/machinery/camera/deactivate(user as mob, var/choice = 1) - ..(user, choice) - if(src.can_use()) - cameranet.addCamera(src) - else - src.set_light(0) - cameranet.removeCamera(src) - -/obj/machinery/camera/New() - ..() - //Camera must be added to global list of all cameras no matter what... - if(cameranet.cameras_unsorted || !ticker) - cameranet.cameras += src - cameranet.cameras_unsorted = 1 - else - dd_insertObjectList(cameranet.cameras, src) - update_coverage(1) - -/obj/machinery/camera/Destroy() - clear_all_networks() - cameranet.cameras -= src - return ..() - -// Mobs -/mob/living/silicon/ai/rejuvenate() - var/was_dead = stat == DEAD - ..() - if(was_dead && stat != DEAD) - // Arise! - cameranet.updateVisibility(src, 0) - -/mob/living/silicon/ai/death(gibbed) - if(..()) - // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) - cameranet.updateVisibility(src, 0) +#define BORG_CAMERA_BUFFER 30 + +// ROBOT MOVEMENT + +// Update the portable camera everytime the Robot moves. +// This might be laggy, comment it out if there are problems. +/mob/living/silicon/var/updating = 0 + +/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(!provides_camera_vision()) + return + if(!updating) + updating = 1 + spawn(BORG_CAMERA_BUFFER) + if(old_loc != src.loc) + cameranet.updatePortableCamera(src.camera) + updating = 0 + +/mob/living/silicon/ai/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(!provides_camera_vision()) + return + if(!updating) + updating = 1 + spawn(BORG_CAMERA_BUFFER) + if(old_loc != src.loc) + cameranet.updateVisibility(old_loc, 0) + cameranet.updateVisibility(loc, 0) + updating = 0 + +#undef BORG_CAMERA_BUFFER + +// CAMERA + +// An addition to deactivate which removes/adds the camera from the chunk list based on if it works or not. + +/obj/machinery/camera/deactivate(user as mob, var/choice = 1) + ..(user, choice) + if(src.can_use()) + cameranet.addCamera(src) + else + src.set_light(0) + cameranet.removeCamera(src) + +/obj/machinery/camera/New() + ..() + //Camera must be added to global list of all cameras no matter what... + if(cameranet.cameras_unsorted || !ticker) + cameranet.cameras += src + cameranet.cameras_unsorted = 1 + else + dd_insertObjectList(cameranet.cameras, src) + update_coverage(1) + +/obj/machinery/camera/Destroy() + clear_all_networks() + cameranet.cameras -= src + return ..() + +// Mobs +/mob/living/silicon/ai/rejuvenate() + var/was_dead = stat == DEAD + ..() + if(was_dead && stat != DEAD) + // Arise! + cameranet.updateVisibility(src, 0) + +/mob/living/silicon/ai/death(gibbed) + if(..()) + // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) + cameranet.updateVisibility(src, 0) diff --git a/code/modules/mob/freelook/chunk.dm b/code/modules/mob/freelook/chunk.dm index 4ae5d3a590..8886207e81 100644 --- a/code/modules/mob/freelook/chunk.dm +++ b/code/modules/mob/freelook/chunk.dm @@ -1,149 +1,149 @@ -#define UPDATE_BUFFER 25 // 2.5 seconds - -// CHUNK -// -// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. -// Allows the Eye to stream these chunks and know what it can and cannot see. - -/datum/obfuscation - var/icon = 'icons/effects/cameravis.dmi' - var/icon_state = "black" - -/datum/chunk - var/list/obscuredTurfs = list() - var/list/visibleTurfs = list() - var/list/obscured = list() - var/list/turfs = list() - var/list/seenby = list() - var/visible = 0 - var/changed = 0 - var/updating = 0 - var/x = 0 - var/y = 0 - var/z = 0 - var/datum/obfuscation/obfuscation = new() - -// Add an eye to the chunk, then update if changed. - -/datum/chunk/proc/add(mob/observer/eye/eye, add_images = TRUE) - if(add_images) - var/client/client = eye.GetViewerClient() - if(client) - client.images += obscured - eye.visibleChunks += src - visible++ - seenby += eye - if(changed && !updating) - update() - -// Remove an eye from the chunk, then update if changed. - -/datum/chunk/proc/remove(mob/observer/eye/eye, remove_images = TRUE) - if(remove_images) - var/client/client = eye.GetViewerClient() - if(client) - client.images -= obscured - eye.visibleChunks -= src - seenby -= eye - if(visible > 0) - visible-- - -// Called when a chunk has changed. I.E: A wall was deleted. - -/datum/chunk/proc/visibilityChanged(turf/loc) - if(!visibleTurfs[loc]) - return - hasChanged() - -// Updates the chunk, makes sure that it doesn't update too much. If the chunk isn't being watched it will -// instead be flagged to update the next time an AI Eye moves near it. - -/datum/chunk/proc/hasChanged(var/update_now = 0) - if(visible || update_now) - if(!updating) - updating = 1 - spawn(UPDATE_BUFFER) // Batch large changes, such as many doors opening or closing at once - update() - updating = 0 - else - changed = 1 - -// The actual updating. - -/datum/chunk/proc/update() - - set background = 1 - - var/list/newVisibleTurfs = new() - acquireVisibleTurfs(newVisibleTurfs) - - // Removes turf that isn't in turfs. - newVisibleTurfs &= turfs - - var/list/visAdded = newVisibleTurfs - visibleTurfs - var/list/visRemoved = visibleTurfs - newVisibleTurfs - - visibleTurfs = newVisibleTurfs - obscuredTurfs = turfs - newVisibleTurfs - - for(var/turf/t as anything in visAdded) - if(LAZYLEN(t.obfuscations) && t.obfuscations[obfuscation.type]) - obscured -= t.obfuscations[obfuscation.type] - for(var/mob/observer/eye/m as anything in seenby) - if(!m) - continue - var/client/client = m.GetViewerClient() - if(client) - client.images -= t.obfuscations[obfuscation.type] - - for(var/turf/t as anything in visRemoved) - if(obscuredTurfs[t]) - LAZYINITLIST(t.obfuscations) - if(!t.obfuscations[obfuscation.type]) - var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER) - ob_image.plane = PLANE_FULLSCREEN - t.obfuscations[obfuscation.type] = ob_image - - obscured += t.obfuscations[obfuscation.type] - for(var/mob/observer/eye/m as anything in seenby) - if(!m) - seenby -= m - continue - var/client/client = m.GetViewerClient() - if(client) - client.images += t.obfuscations[obfuscation.type] - -/datum/chunk/proc/acquireVisibleTurfs(var/list/visible) - -// Create a new camera chunk, since the chunks are made as they are needed. - -/datum/chunk/New(loc, x, y, z) - - // 0xf = 15 - x &= ~0xf - y &= ~0xf - - src.x = x - src.y = y - src.z = z - - for(var/turf/t in range(10, locate(x + 8, y + 8, z))) - if(t.x >= x && t.y >= y && t.x < x + 16 && t.y < y + 16) - turfs[t] = t - - acquireVisibleTurfs(visibleTurfs) - - // Removes turf that isn't in turfs. - visibleTurfs &= turfs - - obscuredTurfs = turfs - visibleTurfs - - for(var/turf/t as anything in obscuredTurfs) - LAZYINITLIST(t.obfuscations) - if(!t.obfuscations[obfuscation.type]) - var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER) - ob_image.plane = PLANE_FULLSCREEN - t.obfuscations[obfuscation.type] = ob_image - obscured += t.obfuscations[obfuscation.type] - -#undef UPDATE_BUFFER +#define UPDATE_BUFFER 25 // 2.5 seconds + +// CHUNK +// +// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. +// Allows the Eye to stream these chunks and know what it can and cannot see. + +/datum/obfuscation + var/icon = 'icons/effects/cameravis.dmi' + var/icon_state = "black" + +/datum/chunk + var/list/obscuredTurfs = list() + var/list/visibleTurfs = list() + var/list/obscured = list() + var/list/turfs = list() + var/list/seenby = list() + var/visible = 0 + var/changed = 0 + var/updating = 0 + var/x = 0 + var/y = 0 + var/z = 0 + var/datum/obfuscation/obfuscation = new() + +// Add an eye to the chunk, then update if changed. + +/datum/chunk/proc/add(mob/observer/eye/eye, add_images = TRUE) + if(add_images) + var/client/client = eye.GetViewerClient() + if(client) + client.images += obscured + eye.visibleChunks += src + visible++ + seenby += eye + if(changed && !updating) + update() + +// Remove an eye from the chunk, then update if changed. + +/datum/chunk/proc/remove(mob/observer/eye/eye, remove_images = TRUE) + if(remove_images) + var/client/client = eye.GetViewerClient() + if(client) + client.images -= obscured + eye.visibleChunks -= src + seenby -= eye + if(visible > 0) + visible-- + +// Called when a chunk has changed. I.E: A wall was deleted. + +/datum/chunk/proc/visibilityChanged(turf/loc) + if(!visibleTurfs[loc]) + return + hasChanged() + +// Updates the chunk, makes sure that it doesn't update too much. If the chunk isn't being watched it will +// instead be flagged to update the next time an AI Eye moves near it. + +/datum/chunk/proc/hasChanged(var/update_now = 0) + if(visible || update_now) + if(!updating) + updating = 1 + spawn(UPDATE_BUFFER) // Batch large changes, such as many doors opening or closing at once + update() + updating = 0 + else + changed = 1 + +// The actual updating. + +/datum/chunk/proc/update() + + set background = 1 + + var/list/newVisibleTurfs = new() + acquireVisibleTurfs(newVisibleTurfs) + + // Removes turf that isn't in turfs. + newVisibleTurfs &= turfs + + var/list/visAdded = newVisibleTurfs - visibleTurfs + var/list/visRemoved = visibleTurfs - newVisibleTurfs + + visibleTurfs = newVisibleTurfs + obscuredTurfs = turfs - newVisibleTurfs + + for(var/turf/t as anything in visAdded) + if(LAZYLEN(t.obfuscations) && t.obfuscations[obfuscation.type]) + obscured -= t.obfuscations[obfuscation.type] + for(var/mob/observer/eye/m as anything in seenby) + if(!m) + continue + var/client/client = m.GetViewerClient() + if(client) + client.images -= t.obfuscations[obfuscation.type] + + for(var/turf/t as anything in visRemoved) + if(obscuredTurfs[t]) + LAZYINITLIST(t.obfuscations) + if(!t.obfuscations[obfuscation.type]) + var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER) + ob_image.plane = PLANE_FULLSCREEN + t.obfuscations[obfuscation.type] = ob_image + + obscured += t.obfuscations[obfuscation.type] + for(var/mob/observer/eye/m as anything in seenby) + if(!m) + seenby -= m + continue + var/client/client = m.GetViewerClient() + if(client) + client.images += t.obfuscations[obfuscation.type] + +/datum/chunk/proc/acquireVisibleTurfs(var/list/visible) + +// Create a new camera chunk, since the chunks are made as they are needed. + +/datum/chunk/New(loc, x, y, z) + + // 0xf = 15 + x &= ~0xf + y &= ~0xf + + src.x = x + src.y = y + src.z = z + + for(var/turf/t in range(10, locate(x + 8, y + 8, z))) + if(t.x >= x && t.y >= y && t.x < x + 16 && t.y < y + 16) + turfs[t] = t + + acquireVisibleTurfs(visibleTurfs) + + // Removes turf that isn't in turfs. + visibleTurfs &= turfs + + obscuredTurfs = turfs - visibleTurfs + + for(var/turf/t as anything in obscuredTurfs) + LAZYINITLIST(t.obfuscations) + if(!t.obfuscations[obfuscation.type]) + var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER) + ob_image.plane = PLANE_FULLSCREEN + t.obfuscations[obfuscation.type] = ob_image + obscured += t.obfuscations[obfuscation.type] + +#undef UPDATE_BUFFER diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm index 05aba49008..80b1125c8b 100644 --- a/code/modules/mob/freelook/eye.dm +++ b/code/modules/mob/freelook/eye.dm @@ -1,111 +1,111 @@ -// EYE -// -// A mob that another mob controls to look around the station with. -// It streams chunks as it moves around, which will show it what the controller can and cannot see. - -/mob/observer/eye - name = "Eye" - icon = 'icons/mob/eye.dmi' - icon_state = "default-eye" - alpha = 127 - - var/sprint = 10 - var/cooldown = 0 - var/acceleration = 1 - var/owner_follows_eye = 0 - - see_in_dark = 7 - status_flags = GODMODE - plane = PLANE_AI_EYE - - var/mob/owner = null - var/list/visibleChunks = list() - - var/ghostimage = null - var/datum/visualnet/visualnet - var/use_static = TRUE - var/static_visibility_range = 16 - -/mob/observer/eye/Destroy() - if(owner) - if(owner.eyeobj == src) - owner.eyeobj = null - owner = null - . = ..() - -/mob/observer/eye/Move(n, direct) - if(owner == src) - return EyeMove(n, direct) - return 0 - -/mob/observer/eye/airflow_hit(atom/A) - airflow_speed = 0 - airflow_dest = null - -/mob/observer/eye/examinate() - set popup_menu = 0 - set src = usr.contents - return 0 - -/mob/observer/eye/pointed() - set popup_menu = 0 - set src = usr.contents - return 0 - -// Use this when setting the eye's location. -// It will also stream the chunk that the new loc is in. -/mob/observer/eye/proc/setLoc(var/T) - if(owner) - T = get_turf(T) - if(T != loc) - loc = T - - if(owner.client) - owner.client.eye = src - - if(owner_follows_eye) - visualnet.updateVisibility(owner, 0) - owner.loc = loc - visualnet.updateVisibility(owner, 0) - if(use_static) - visualnet.visibility(src, owner.client) - return 1 - return 0 - -/mob/observer/eye/proc/getLoc() - if(owner) - if(!isturf(owner.loc) || !owner.client) - return - return loc -/mob - var/mob/observer/eye/eyeobj - -/mob/proc/EyeMove(n, direct) - if(!eyeobj) - return - - return eyeobj.EyeMove(n, direct) - -/mob/observer/eye/proc/GetViewerClient() - if(owner) - return owner.client - return null - -/mob/observer/eye/EyeMove(n, direct) - var/initial = initial(sprint) - var/max_sprint = 50 - - if(cooldown && cooldown < world.timeofday) - 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 - return 1 +// EYE +// +// A mob that another mob controls to look around the station with. +// It streams chunks as it moves around, which will show it what the controller can and cannot see. + +/mob/observer/eye + name = "Eye" + icon = 'icons/mob/eye.dmi' + icon_state = "default-eye" + alpha = 127 + + var/sprint = 10 + var/cooldown = 0 + var/acceleration = 1 + var/owner_follows_eye = 0 + + see_in_dark = 7 + status_flags = GODMODE + plane = PLANE_AI_EYE + + var/mob/owner = null + var/list/visibleChunks = list() + + var/ghostimage = null + var/datum/visualnet/visualnet + var/use_static = TRUE + var/static_visibility_range = 16 + +/mob/observer/eye/Destroy() + if(owner) + if(owner.eyeobj == src) + owner.eyeobj = null + owner = null + . = ..() + +/mob/observer/eye/Move(n, direct) + if(owner == src) + return EyeMove(n, direct) + return 0 + +/mob/observer/eye/airflow_hit(atom/A) + airflow_speed = 0 + airflow_dest = null + +/mob/observer/eye/examinate() + set popup_menu = 0 + set src = usr.contents + return 0 + +/mob/observer/eye/pointed() + set popup_menu = 0 + set src = usr.contents + return 0 + +// Use this when setting the eye's location. +// It will also stream the chunk that the new loc is in. +/mob/observer/eye/proc/setLoc(var/T) + if(owner) + T = get_turf(T) + if(T != loc) + loc = T + + if(owner.client) + owner.client.eye = src + + if(owner_follows_eye) + visualnet.updateVisibility(owner, 0) + owner.loc = loc + visualnet.updateVisibility(owner, 0) + if(use_static) + visualnet.visibility(src, owner.client) + return 1 + return 0 + +/mob/observer/eye/proc/getLoc() + if(owner) + if(!isturf(owner.loc) || !owner.client) + return + return loc +/mob + var/mob/observer/eye/eyeobj + +/mob/proc/EyeMove(n, direct) + if(!eyeobj) + return + + return eyeobj.EyeMove(n, direct) + +/mob/observer/eye/proc/GetViewerClient() + if(owner) + return owner.client + return null + +/mob/observer/eye/EyeMove(n, direct) + var/initial = initial(sprint) + var/max_sprint = 50 + + if(cooldown && cooldown < world.timeofday) + 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 + return 1 diff --git a/code/modules/mob/freelook/life.dm b/code/modules/mob/freelook/life.dm index f3994f9a7e..1ef0ca92a5 100644 --- a/code/modules/mob/freelook/life.dm +++ b/code/modules/mob/freelook/life.dm @@ -1,7 +1,7 @@ -/mob/observer/eye/Life() - ..() - // If we lost our client, reset the list of visible chunks so they update properly on return - if(owner == src && !client) - visibleChunks.Cut() - /*else if(owner && !owner.client) - visibleChunks.Cut()*/ +/mob/observer/eye/Life() + ..() + // If we lost our client, reset the list of visible chunks so they update properly on return + if(owner == src && !client) + visibleChunks.Cut() + /*else if(owner && !owner.client) + visibleChunks.Cut()*/ diff --git a/code/modules/mob/freelook/mask/chunk.dm b/code/modules/mob/freelook/mask/chunk.dm index b540a8023b..5042c126b9 100644 --- a/code/modules/mob/freelook/mask/chunk.dm +++ b/code/modules/mob/freelook/mask/chunk.dm @@ -1,36 +1,36 @@ -// CULT CHUNK -// -// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. -// Allows the Eye to stream these chunks and know what it can and cannot see. - -/datum/obfuscation/cult - icon_state = "white" - -/datum/chunk/cult - obfuscation = new /datum/obfuscation/cult() - -/datum/chunk/cult/acquireVisibleTurfs(var/list/visible) - for(var/mob/living/L in living_mob_list) - for(var/turf/t in L.seen_cult_turfs()) - visible[t] = t - -/mob/living/proc/seen_cult_turfs() - return seen_turfs_in_range(src, 3) - -/mob/living/carbon/human/seen_cult_turfs() - if(mind in cult.current_antagonists) - return seen_turfs_in_range(src, world.view) - return ..() - -/mob/living/silicon/seen_cult_turfs() - return list() - -/mob/living/simple_mob/seen_cult_turfs() - return seen_turfs_in_range(src, 1) - -/mob/living/simple_mob/construct/shade/seen_cult_turfs() - return view(2, src) - -/proc/seen_turfs_in_range(var/source, var/range) - var/turf/pos = get_turf(source) - return hear(range, pos) +// CULT CHUNK +// +// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. +// Allows the Eye to stream these chunks and know what it can and cannot see. + +/datum/obfuscation/cult + icon_state = "white" + +/datum/chunk/cult + obfuscation = new /datum/obfuscation/cult() + +/datum/chunk/cult/acquireVisibleTurfs(var/list/visible) + for(var/mob/living/L in living_mob_list) + for(var/turf/t in L.seen_cult_turfs()) + visible[t] = t + +/mob/living/proc/seen_cult_turfs() + return seen_turfs_in_range(src, 3) + +/mob/living/carbon/human/seen_cult_turfs() + if(mind in cult.current_antagonists) + return seen_turfs_in_range(src, world.view) + return ..() + +/mob/living/silicon/seen_cult_turfs() + return list() + +/mob/living/simple_mob/seen_cult_turfs() + return seen_turfs_in_range(src, 1) + +/mob/living/simple_mob/construct/shade/seen_cult_turfs() + return view(2, src) + +/proc/seen_turfs_in_range(var/source, var/range) + var/turf/pos = get_turf(source) + return hear(range, pos) diff --git a/code/modules/mob/freelook/mask/cultnet.dm b/code/modules/mob/freelook/mask/cultnet.dm index 4e4e01b847..6d2f248a2e 100644 --- a/code/modules/mob/freelook/mask/cultnet.dm +++ b/code/modules/mob/freelook/mask/cultnet.dm @@ -1,15 +1,15 @@ -// CULT NET -// -// The datum containing all the chunks. - -/datum/visualnet/cult - chunk_type = /datum/chunk/cult - -/datum/visualnet/cult/proc/provides_vision(var/mob/living/L) - return L.provides_cult_vision() - -/mob/living/proc/provides_cult_vision() - return 1 - -/mob/living/silicon/provides_cult_vision() - return 0 +// CULT NET +// +// The datum containing all the chunks. + +/datum/visualnet/cult + chunk_type = /datum/chunk/cult + +/datum/visualnet/cult/proc/provides_vision(var/mob/living/L) + return L.provides_cult_vision() + +/mob/living/proc/provides_cult_vision() + return 1 + +/mob/living/silicon/provides_cult_vision() + return 0 diff --git a/code/modules/mob/freelook/mask/eye.dm b/code/modules/mob/freelook/mask/eye.dm index b3abb922ab..4fcbc35149 100644 --- a/code/modules/mob/freelook/mask/eye.dm +++ b/code/modules/mob/freelook/mask/eye.dm @@ -1,13 +1,13 @@ -// MASK EYE -// -// A mob that a cultists controls to look around the station with. -// It streams chunks as it moves around, which will show it what the cultist can and cannot see. - -/mob/observer/eye/maskEye - name = "Eye of Nar-Sie" - acceleration = 0 - owner_follows_eye = 1 - -/mob/observer/eye/maskEye/New() - ..() - visualnet = cultnet +// MASK EYE +// +// A mob that a cultists controls to look around the station with. +// It streams chunks as it moves around, which will show it what the cultist can and cannot see. + +/mob/observer/eye/maskEye + name = "Eye of Nar-Sie" + acceleration = 0 + owner_follows_eye = 1 + +/mob/observer/eye/maskEye/New() + ..() + visualnet = cultnet diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 8008916220..5ddf74de3c 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -1,49 +1,49 @@ -//UPDATE TRIGGERS, when the chunk (and the surrounding chunks) should update. - -#define CULT_UPDATE_BUFFER 30 - -/mob/living/var/updating_cult_vision = 0 - -/mob/living/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(!cultnet.provides_vision(src)) - return - if(!updating_cult_vision) - updating_cult_vision = 1 - spawn(CULT_UPDATE_BUFFER) - if(old_loc != src.loc) - cultnet.updateVisibility(old_loc, 0) - cultnet.updateVisibility(loc, 0) - updating_cult_vision = 0 - -#undef CULT_UPDATE_BUFFER - -/mob/living/New() - ..() - cultnet.updateVisibility(src, 0) - -/mob/living/Destroy() - cultnet.updateVisibility(src, 0) - return ..() - -/mob/living/rejuvenate() - var/was_dead = stat == DEAD - ..() - if(was_dead && stat != DEAD) - // Arise! - cultnet.updateVisibility(src, 0) - -/mob/living/death(gibbed, deathmessage="seizes up and falls limp...") - if(..(gibbed, deathmessage)) - // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) - cultnet.updateVisibility(src) - -/datum/antagonist/add_antagonist(var/datum/mind/player) - . = ..() - if(src == cult) - cultnet.updateVisibility(player.current, 0) - -/datum/antagonist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - ..() - if(src == cult) - cultnet.updateVisibility(player.current, 0) +//UPDATE TRIGGERS, when the chunk (and the surrounding chunks) should update. + +#define CULT_UPDATE_BUFFER 30 + +/mob/living/var/updating_cult_vision = 0 + +/mob/living/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(!cultnet.provides_vision(src)) + return + if(!updating_cult_vision) + updating_cult_vision = 1 + spawn(CULT_UPDATE_BUFFER) + if(old_loc != src.loc) + cultnet.updateVisibility(old_loc, 0) + cultnet.updateVisibility(loc, 0) + updating_cult_vision = 0 + +#undef CULT_UPDATE_BUFFER + +/mob/living/New() + ..() + cultnet.updateVisibility(src, 0) + +/mob/living/Destroy() + cultnet.updateVisibility(src, 0) + return ..() + +/mob/living/rejuvenate() + var/was_dead = stat == DEAD + ..() + if(was_dead && stat != DEAD) + // Arise! + cultnet.updateVisibility(src, 0) + +/mob/living/death(gibbed, deathmessage="seizes up and falls limp...") + if(..(gibbed, deathmessage)) + // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) + cultnet.updateVisibility(src) + +/datum/antagonist/add_antagonist(var/datum/mind/player) + . = ..() + if(src == cult) + cultnet.updateVisibility(player.current, 0) + +/datum/antagonist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) + ..() + if(src == cult) + cultnet.updateVisibility(player.current, 0) diff --git a/code/modules/mob/freelook/read_me.dm b/code/modules/mob/freelook/read_me.dm index 8ddb068940..380a3e0171 100644 --- a/code/modules/mob/freelook/read_me.dm +++ b/code/modules/mob/freelook/read_me.dm @@ -1,51 +1,51 @@ -// CREDITS -/* - Initial code credit for this goes to Uristqwerty. - Debugging, functionality, all comments and porting by Giacom. - - Everything about freelook (or what we can put in here) will be stored here. - - - WHAT IS THIS? - - This is a replacement for the current camera movement system, of the AI. Before this, the AI had to move between cameras and could - only see what the cameras could see. Not only this but the cameras could see through walls, which created problems. - With this, the AI controls an "AI Eye" mob, which moves just like a ghost; such as moving through walls and being invisible to players. - The AI's eye is set to this mob and then we use a system (explained below) to determine what the cameras around the AI Eye can and - cannot see. If the camera cannot see a turf, it will black it out, otherwise it won't and the AI will be able to see it. - This creates several features, such as.. no more see-through-wall cameras, easier to control camera movement, easier tracking, - the AI only being able to track mobs which are visible to a camera, only trackable mobs appearing on the mob list and many more. - - - HOW IT WORKS - - It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be - explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy(). - - Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk. - These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside - the 16x16 block, it is listed as an "obscured" turf. Meaning the AI won't be able to see it. - - - HOW IT UPDATES - - The camera network uses a streaming method in order to effeciently update chunks. Since the server will have doors opening, doors closing, - turf being destroyed and other lag inducing stuff, we want to update it under certain conditions and not every tick. - - The chunks are not created straight away, only when an AI eye moves into it's area is when it gets created. - One a chunk is created, when a non glass door opens/closes or an opacity turf is destroyed, we check to see if an AI Eye is looking in the area. - We do this with the "seenby" list, which updates everytime an AI is near a chunk. If there is an AI eye inside the area, we update the chunk - that the changed atom is inside and all surrounding chunks, since a camera's vision could leak onto another chunk. If there is no AI Eye, we instead - flag the chunk to update whenever it is loaded by an AI Eye. This is basically how the chunks update and keep it in sync. We then add some lag reducing - measures, such as an UPDATE_BUFFER which stops a chunk from updating too many times in a certain time-frame, only updating if the changed atom was blocking - sight; for example, we don't update glass airlocks or floors. - - - WHERE IS EVERYTHING? - - cameranet.dm = Everything about the cameranet datum. - chunk.dm = Everything about the chunk datum. - eye.dm = Everything about the AI and the AIEye. - updating.dm = Everything about triggers that will update chunks. - +// CREDITS +/* + Initial code credit for this goes to Uristqwerty. + Debugging, functionality, all comments and porting by Giacom. + + Everything about freelook (or what we can put in here) will be stored here. + + + WHAT IS THIS? + + This is a replacement for the current camera movement system, of the AI. Before this, the AI had to move between cameras and could + only see what the cameras could see. Not only this but the cameras could see through walls, which created problems. + With this, the AI controls an "AI Eye" mob, which moves just like a ghost; such as moving through walls and being invisible to players. + The AI's eye is set to this mob and then we use a system (explained below) to determine what the cameras around the AI Eye can and + cannot see. If the camera cannot see a turf, it will black it out, otherwise it won't and the AI will be able to see it. + This creates several features, such as.. no more see-through-wall cameras, easier to control camera movement, easier tracking, + the AI only being able to track mobs which are visible to a camera, only trackable mobs appearing on the mob list and many more. + + + HOW IT WORKS + + It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be + explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy(). + + Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk. + These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside + the 16x16 block, it is listed as an "obscured" turf. Meaning the AI won't be able to see it. + + + HOW IT UPDATES + + The camera network uses a streaming method in order to effeciently update chunks. Since the server will have doors opening, doors closing, + turf being destroyed and other lag inducing stuff, we want to update it under certain conditions and not every tick. + + The chunks are not created straight away, only when an AI eye moves into it's area is when it gets created. + One a chunk is created, when a non glass door opens/closes or an opacity turf is destroyed, we check to see if an AI Eye is looking in the area. + We do this with the "seenby" list, which updates everytime an AI is near a chunk. If there is an AI eye inside the area, we update the chunk + that the changed atom is inside and all surrounding chunks, since a camera's vision could leak onto another chunk. If there is no AI Eye, we instead + flag the chunk to update whenever it is loaded by an AI Eye. This is basically how the chunks update and keep it in sync. We then add some lag reducing + measures, such as an UPDATE_BUFFER which stops a chunk from updating too many times in a certain time-frame, only updating if the changed atom was blocking + sight; for example, we don't update glass airlocks or floors. + + + WHERE IS EVERYTHING? + + cameranet.dm = Everything about the cameranet datum. + chunk.dm = Everything about the chunk datum. + eye.dm = Everything about the AI and the AIEye. + updating.dm = Everything about triggers that will update chunks. + */ \ No newline at end of file diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index 02d36e54f5..62b8b503d3 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -1,59 +1,59 @@ -//UPDATE TRIGGERS, when the chunk (and the surrounding chunks) should update. - -// TURFS - -/proc/updateVisibility(atom/A, var/opacity_check = 1) - if(ticker) - for(var/datum/visualnet/VN in visual_nets) - VN.updateVisibility(A, opacity_check) - -/turf - var/list/image/obfuscations - -/turf/drain_power() - return -1 - -/turf/simulated/Destroy() - updateVisibility(src) - if(zone) - if(can_safely_remove_from_zone()) - c_copy_air() - zone.remove(src) - else - zone.rebuild() - return ..() - -/turf/simulated/Initialize() - . = ..() - updateVisibility(src) - - -// STRUCTURES - -/obj/structure/Destroy() - updateVisibility(src) - return ..() - -/obj/structure/New() - ..() - updateVisibility(src) - -// EFFECTS - -/obj/effect/Destroy() - updateVisibility(src) - return ..() - -/obj/effect/Initialize() - . = ..() - updateVisibility(src) - -// DOORS - -// Simply updates the visibility of the area when it opens/closes/destroyed. -/obj/machinery/door/update_nearby_tiles(need_rebuild) - . = ..(need_rebuild) - // Glass door glass = 1 - // don't check then? - if(!glass) +//UPDATE TRIGGERS, when the chunk (and the surrounding chunks) should update. + +// TURFS + +/proc/updateVisibility(atom/A, var/opacity_check = 1) + if(ticker) + for(var/datum/visualnet/VN in visual_nets) + VN.updateVisibility(A, opacity_check) + +/turf + var/list/image/obfuscations + +/turf/drain_power() + return -1 + +/turf/simulated/Destroy() + updateVisibility(src) + if(zone) + if(can_safely_remove_from_zone()) + c_copy_air() + zone.remove(src) + else + zone.rebuild() + return ..() + +/turf/simulated/Initialize() + . = ..() + updateVisibility(src) + + +// STRUCTURES + +/obj/structure/Destroy() + updateVisibility(src) + return ..() + +/obj/structure/New() + ..() + updateVisibility(src) + +// EFFECTS + +/obj/effect/Destroy() + updateVisibility(src) + return ..() + +/obj/effect/Initialize() + . = ..() + updateVisibility(src) + +// DOORS + +// Simply updates the visibility of the area when it opens/closes/destroyed. +/obj/machinery/door/update_nearby_tiles(need_rebuild) + . = ..(need_rebuild) + // Glass door glass = 1 + // don't check then? + if(!glass) updateVisibility(src, 0) \ No newline at end of file diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 1508a30133..271572abe8 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -1,161 +1,161 @@ -// VISUAL NET -// -// The datum containing all the chunks. - -#define CHUNK_SIZE 16 - -/datum/visualnet - // The chunks of the map, mapping the areas that an object can see. - var/list/chunks = list() - var/ready = 0 - var/chunk_type = /datum/chunk - -/datum/visualnet/New() - ..() - visual_nets += src - -/datum/visualnet/Destroy() - visual_nets -= src - return ..() - -// Checks if a chunk has been Generated in x, y, z. -/datum/visualnet/proc/chunkGenerated(x, y, z) - x &= ~0xf - y &= ~0xf - var/key = "[x],[y],[z]" - return (chunks[key]) - -// Returns the chunk in the x, y, z. -// If there is no chunk, it creates a new chunk and returns that. -/datum/visualnet/proc/getChunk(x, y, z) - x &= ~0xf - y &= ~0xf - var/key = "[x],[y],[z]" - if(!chunks[key]) - chunks[key] = new chunk_type(null, x, y, z) - - return chunks[key] - -// Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. - -/datum/visualnet/proc/visibility(list/moved_eyes, client/C, list/other_eyes) - if(!islist(moved_eyes)) - moved_eyes = moved_eyes ? list(moved_eyes) : list() - if(islist(other_eyes)) - other_eyes = (other_eyes - moved_eyes) - else - other_eyes = list() - - var/list/chunks_pre_seen = list() - var/list/chunks_post_seen = list() - - for(var/mob/observer/eye/eye as anything in moved_eyes) - if(C) - chunks_pre_seen |= eye.visibleChunks - // 0xf = 15 - var/static_range = eye.static_visibility_range - var/x1 = max(0, eye.x - static_range) & ~(CHUNK_SIZE - 1) - var/y1 = max(0, eye.y - static_range) & ~(CHUNK_SIZE - 1) - var/x2 = min(world.maxx, eye.x + static_range) & ~(CHUNK_SIZE - 1) - var/y2 = min(world.maxy, eye.y + static_range) & ~(CHUNK_SIZE - 1) - - var/list/visibleChunks = list() - - for(var/x = x1; x <= x2; x += CHUNK_SIZE) - for(var/y = y1; y <= y2; y += CHUNK_SIZE) - visibleChunks |= getChunk(x, y, eye.z) - - var/list/remove = eye.visibleChunks - visibleChunks - var/list/add = visibleChunks - eye.visibleChunks - - for(var/datum/chunk/c as anything in remove) - c.remove(eye, FALSE) - - for(var/datum/chunk/c as anything in add) - c.add(eye, FALSE) - - if(C) - chunks_post_seen |= eye.visibleChunks - - if(C) - for(var/mob/observer/eye/eye as anything in other_eyes) - chunks_post_seen |= eye.visibleChunks - - var/list/remove = chunks_pre_seen - chunks_post_seen - var/list/add = chunks_post_seen - chunks_pre_seen - - for(var/datum/chunk/c as anything in remove) - C.images -= c.obscured - - for(var/datum/chunk/c as anything in add) - C.images += c.obscured - -// Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. - -/datum/visualnet/proc/updateVisibility(atom/A, var/opacity_check = 1) - - if(!ticker || (opacity_check && !A.opacity)) - return - majorChunkChange(A, 2) - -/datum/visualnet/proc/updateChunk(x, y, z) - // 0xf = 15 - if(!chunkGenerated(x, y, z)) - return - var/datum/chunk/chunk = getChunk(x, y, z) - chunk.hasChanged() - -// Never access this proc directly!!!! -// This will update the chunk and all the surrounding chunks. -// It will also add the atom to the cameras list if you set the choice to 1. -// Setting the choice to 0 will remove the camera from the chunks. -// If you want to update the chunks around an object, without adding/removing a camera, use choice 2. - -/datum/visualnet/proc/majorChunkChange(atom/c, var/choice) - // 0xf = 15 - if(!c) - return - - var/turf/T = get_turf(c) - if(T) - var/x1 = max(0, T.x - 8) & ~0xf - var/y1 = max(0, T.y - 8) & ~0xf - var/x2 = min(world.maxx, T.x + 8) & ~0xf - var/y2 = min(world.maxy, T.y + 8) & ~0xf - - //to_world("X1: [x1] - Y1: [y1] - X2: [x2] - Y2: [y2]") - - for(var/x = x1; x <= x2; x += 16) - for(var/y = y1; y <= y2; y += 16) - if(chunkGenerated(x, y, T.z)) - var/datum/chunk/chunk = getChunk(x, y, T.z) - onMajorChunkChange(c, choice, chunk) - chunk.hasChanged() - -/datum/visualnet/proc/onMajorChunkChange(atom/c, var/choice, var/datum/chunk/chunk) - -// Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. - -/datum/visualnet/proc/checkVis(mob/living/target as mob) - // 0xf = 15 - var/turf/position = get_turf(target) - return checkTurfVis(position) - -/datum/visualnet/proc/checkTurfVis(var/turf/position) - var/datum/chunk/chunk = getChunk(position.x, position.y, position.z) - if(chunk) - if(chunk.changed) - chunk.hasChanged(1) // Update now, no matter if it's visible or not. - if(chunk.visibleTurfs[position]) - return 1 - return 0 - -// Debug verb for VVing the chunk that the turf is in. -/* -/turf/verb/view_chunk() - set src in world - - if(cameranet.chunkGenerated(x, y, z)) - var/datum/chunk/chunk = cameranet.getCameraChunk(x, y, z) - usr.client.debug_variables(chunk) -*/ +// VISUAL NET +// +// The datum containing all the chunks. + +#define CHUNK_SIZE 16 + +/datum/visualnet + // The chunks of the map, mapping the areas that an object can see. + var/list/chunks = list() + var/ready = 0 + var/chunk_type = /datum/chunk + +/datum/visualnet/New() + ..() + visual_nets += src + +/datum/visualnet/Destroy() + visual_nets -= src + return ..() + +// Checks if a chunk has been Generated in x, y, z. +/datum/visualnet/proc/chunkGenerated(x, y, z) + x &= ~0xf + y &= ~0xf + var/key = "[x],[y],[z]" + return (chunks[key]) + +// Returns the chunk in the x, y, z. +// If there is no chunk, it creates a new chunk and returns that. +/datum/visualnet/proc/getChunk(x, y, z) + x &= ~0xf + y &= ~0xf + var/key = "[x],[y],[z]" + if(!chunks[key]) + chunks[key] = new chunk_type(null, x, y, z) + + return chunks[key] + +// Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. + +/datum/visualnet/proc/visibility(list/moved_eyes, client/C, list/other_eyes) + if(!islist(moved_eyes)) + moved_eyes = moved_eyes ? list(moved_eyes) : list() + if(islist(other_eyes)) + other_eyes = (other_eyes - moved_eyes) + else + other_eyes = list() + + var/list/chunks_pre_seen = list() + var/list/chunks_post_seen = list() + + for(var/mob/observer/eye/eye as anything in moved_eyes) + if(C) + chunks_pre_seen |= eye.visibleChunks + // 0xf = 15 + var/static_range = eye.static_visibility_range + var/x1 = max(0, eye.x - static_range) & ~(CHUNK_SIZE - 1) + var/y1 = max(0, eye.y - static_range) & ~(CHUNK_SIZE - 1) + var/x2 = min(world.maxx, eye.x + static_range) & ~(CHUNK_SIZE - 1) + var/y2 = min(world.maxy, eye.y + static_range) & ~(CHUNK_SIZE - 1) + + var/list/visibleChunks = list() + + for(var/x = x1; x <= x2; x += CHUNK_SIZE) + for(var/y = y1; y <= y2; y += CHUNK_SIZE) + visibleChunks |= getChunk(x, y, eye.z) + + var/list/remove = eye.visibleChunks - visibleChunks + var/list/add = visibleChunks - eye.visibleChunks + + for(var/datum/chunk/c as anything in remove) + c.remove(eye, FALSE) + + for(var/datum/chunk/c as anything in add) + c.add(eye, FALSE) + + if(C) + chunks_post_seen |= eye.visibleChunks + + if(C) + for(var/mob/observer/eye/eye as anything in other_eyes) + chunks_post_seen |= eye.visibleChunks + + var/list/remove = chunks_pre_seen - chunks_post_seen + var/list/add = chunks_post_seen - chunks_pre_seen + + for(var/datum/chunk/c as anything in remove) + C.images -= c.obscured + + for(var/datum/chunk/c as anything in add) + C.images += c.obscured + +// Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. + +/datum/visualnet/proc/updateVisibility(atom/A, var/opacity_check = 1) + + if(!ticker || (opacity_check && !A.opacity)) + return + majorChunkChange(A, 2) + +/datum/visualnet/proc/updateChunk(x, y, z) + // 0xf = 15 + if(!chunkGenerated(x, y, z)) + return + var/datum/chunk/chunk = getChunk(x, y, z) + chunk.hasChanged() + +// Never access this proc directly!!!! +// This will update the chunk and all the surrounding chunks. +// It will also add the atom to the cameras list if you set the choice to 1. +// Setting the choice to 0 will remove the camera from the chunks. +// If you want to update the chunks around an object, without adding/removing a camera, use choice 2. + +/datum/visualnet/proc/majorChunkChange(atom/c, var/choice) + // 0xf = 15 + if(!c) + return + + var/turf/T = get_turf(c) + if(T) + var/x1 = max(0, T.x - 8) & ~0xf + var/y1 = max(0, T.y - 8) & ~0xf + var/x2 = min(world.maxx, T.x + 8) & ~0xf + var/y2 = min(world.maxy, T.y + 8) & ~0xf + + //to_world("X1: [x1] - Y1: [y1] - X2: [x2] - Y2: [y2]") + + for(var/x = x1; x <= x2; x += 16) + for(var/y = y1; y <= y2; y += 16) + if(chunkGenerated(x, y, T.z)) + var/datum/chunk/chunk = getChunk(x, y, T.z) + onMajorChunkChange(c, choice, chunk) + chunk.hasChanged() + +/datum/visualnet/proc/onMajorChunkChange(atom/c, var/choice, var/datum/chunk/chunk) + +// Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. + +/datum/visualnet/proc/checkVis(mob/living/target as mob) + // 0xf = 15 + var/turf/position = get_turf(target) + return checkTurfVis(position) + +/datum/visualnet/proc/checkTurfVis(var/turf/position) + var/datum/chunk/chunk = getChunk(position.x, position.y, position.z) + if(chunk) + if(chunk.changed) + chunk.hasChanged(1) // Update now, no matter if it's visible or not. + if(chunk.visibleTurfs[position]) + return 1 + return 0 + +// Debug verb for VVing the chunk that the turf is in. +/* +/turf/verb/view_chunk() + set src in world + + if(cameranet.chunkGenerated(x, y, z)) + var/datum/chunk/chunk = cameranet.getCameraChunk(x, y, z) + usr.client.debug_variables(chunk) +*/ diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 26cbde9003..359c108956 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -1,139 +1,139 @@ - -#define AUTOHISS_OFF 0 -#define AUTOHISS_BASIC 1 -#define AUTOHISS_FULL 2 - -#define AUTOHISS_NUM 3 - - -/mob/proc/handle_autohiss(message, datum/language/L) - return message // no autohiss at this level - -/mob/living/carbon/human/handle_autohiss(message, datum/language/L) - if(!client || client.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off - return message - return species.handle_autohiss(message, L, client.autohiss_mode) - -/client - var/autohiss_mode = AUTOHISS_OFF - -/client/verb/toggle_autohiss() - set name = "Toggle Auto-Hiss" - set desc = "Toggle automatic hissing as Unathi and r-rolling as Taj" - set category = "OOC" - - autohiss_mode = (autohiss_mode + 1) % AUTOHISS_NUM - switch(autohiss_mode) - if(AUTOHISS_OFF) - to_chat(src, "Auto-hiss is now OFF.") - if(AUTOHISS_BASIC) - to_chat(src, "Auto-hiss is now BASIC.") - if(AUTOHISS_FULL) - to_chat(src, "Auto-hiss is now FULL.") - else - soft_assert(0, "invalid autohiss value [autohiss_mode]") - autohiss_mode = AUTOHISS_OFF - to_chat(src, "Auto-hiss is now OFF.") - -/datum/species - var/list/autohiss_basic_map = null - var/list/autohiss_extra_map = null - var/list/autohiss_exempt = null - -/datum/species/unathi - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - autohiss_extra_map = list( - "x" = list("ks", "kss", "ksss") - ) - autohiss_exempt = list(LANGUAGE_UNATHI) - -/datum/species/tajaran - autohiss_basic_map = list( - "r" = list("rr", "rrr", "rrrr") - ) - autohiss_exempt = list(LANGUAGE_SIIK,LANGUAGE_AKHANI,LANGUAGE_ALAI) - -/datum/species/zaddat - autohiss_basic_map = list( - "f" = list("v","vh"), - "ph" = list("v", "vh") - ) - autohiss_extra_map = list( - "s" = list("z", "zz", "zzz"), - "ce" = list("z", "zz"), - "ci" = list("z", "zz"), - "v" = list("vv", "vvv") - ) - autohiss_exempt = list(LANGUAGE_ZADDAT,LANGUAGE_VESPINAE) - -/datum/species/zaddat - autohiss_basic_map = list( - "f" = list("v","vh"), - "ph" = list("v", "vh") - ) - autohiss_extra_map = list( - "s" = list("z", "zz", "zzz"), - "ce" = list("z", "zz"), - "ci" = list("z", "zz"), - "v" = list("vv", "vvv") - ) - autohiss_exempt = list(LANGUAGE_ZADDAT) - -//Yawn Wider Edit. -/datum/species/spider - autohiss_basic_map = list( - "s" = list("sz", "z", "zz"), - "f" = list("zk") - ) - autohiss_extra_map = list( - "th" = list("zk", "szk"), - "r" = list("rk") - ) -//YW edit over. - -/datum/species/proc/handle_autohiss(message, datum/language/lang, mode) - if(!autohiss_basic_map) - return message - if(lang.flags & NO_STUTTER) // Currently prevents EAL, Sign language, and emotes from autohissing - return message - if(autohiss_exempt && (lang.name in autohiss_exempt)) - return message - - var/map = autohiss_basic_map.Copy() - if(mode == AUTOHISS_FULL && autohiss_extra_map) - map |= autohiss_extra_map - - . = list() - - while(length(message)) - var/min_index = 10000 // if the message is longer than this, the autohiss is the least of your problems - var/min_char = null - for(var/char in map) - var/i = findtext(message, char) - if(!i) // no more of this character anywhere in the string, don't even bother searching next time - map -= char - else if(i < min_index) - min_index = i - min_char = char - if(!min_char) // we didn't find any of the mapping characters - . += message - break - . += copytext(message, 1, min_index) - if(copytext(message, min_index, min_index+1) == uppertext(min_char)) - switch(text2ascii(message, min_index+1)) - if(65 to 90) // A-Z, uppercase; uppercase R/S followed by another uppercase letter, uppercase the entire replacement string - . += uppertext(pick(map[min_char])) - else - . += capitalize(pick(map[min_char])) - else - . += pick(map[min_char]) - message = copytext(message, min_index + 1) - - return jointext(., null) - -#undef AUTOHISS_OFF -#undef AUTOHISS_BASIC -#undef AUTOHISS_FULL -#undef AUTOHISS_NUM + +#define AUTOHISS_OFF 0 +#define AUTOHISS_BASIC 1 +#define AUTOHISS_FULL 2 + +#define AUTOHISS_NUM 3 + + +/mob/proc/handle_autohiss(message, datum/language/L) + return message // no autohiss at this level + +/mob/living/carbon/human/handle_autohiss(message, datum/language/L) + if(!client || client.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off + return message + return species.handle_autohiss(message, L, client.autohiss_mode) + +/client + var/autohiss_mode = AUTOHISS_OFF + +/client/verb/toggle_autohiss() + set name = "Toggle Auto-Hiss" + set desc = "Toggle automatic hissing as Unathi and r-rolling as Taj" + set category = "OOC" + + autohiss_mode = (autohiss_mode + 1) % AUTOHISS_NUM + switch(autohiss_mode) + if(AUTOHISS_OFF) + to_chat(src, "Auto-hiss is now OFF.") + if(AUTOHISS_BASIC) + to_chat(src, "Auto-hiss is now BASIC.") + if(AUTOHISS_FULL) + to_chat(src, "Auto-hiss is now FULL.") + else + soft_assert(0, "invalid autohiss value [autohiss_mode]") + autohiss_mode = AUTOHISS_OFF + to_chat(src, "Auto-hiss is now OFF.") + +/datum/species + var/list/autohiss_basic_map = null + var/list/autohiss_extra_map = null + var/list/autohiss_exempt = null + +/datum/species/unathi + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss") + ) + autohiss_extra_map = list( + "x" = list("ks", "kss", "ksss") + ) + autohiss_exempt = list(LANGUAGE_UNATHI) + +/datum/species/tajaran + autohiss_basic_map = list( + "r" = list("rr", "rrr", "rrrr") + ) + autohiss_exempt = list(LANGUAGE_SIIK,LANGUAGE_AKHANI,LANGUAGE_ALAI) + +/datum/species/zaddat + autohiss_basic_map = list( + "f" = list("v","vh"), + "ph" = list("v", "vh") + ) + autohiss_extra_map = list( + "s" = list("z", "zz", "zzz"), + "ce" = list("z", "zz"), + "ci" = list("z", "zz"), + "v" = list("vv", "vvv") + ) + autohiss_exempt = list(LANGUAGE_ZADDAT,LANGUAGE_VESPINAE) + +/datum/species/zaddat + autohiss_basic_map = list( + "f" = list("v","vh"), + "ph" = list("v", "vh") + ) + autohiss_extra_map = list( + "s" = list("z", "zz", "zzz"), + "ce" = list("z", "zz"), + "ci" = list("z", "zz"), + "v" = list("vv", "vvv") + ) + autohiss_exempt = list(LANGUAGE_ZADDAT) + +//Yawn Wider Edit. +/datum/species/spider + autohiss_basic_map = list( + "s" = list("sz", "z", "zz"), + "f" = list("zk") + ) + autohiss_extra_map = list( + "th" = list("zk", "szk"), + "r" = list("rk") + ) +//YW edit over. + +/datum/species/proc/handle_autohiss(message, datum/language/lang, mode) + if(!autohiss_basic_map) + return message + if(lang.flags & NO_STUTTER) // Currently prevents EAL, Sign language, and emotes from autohissing + return message + if(autohiss_exempt && (lang.name in autohiss_exempt)) + return message + + var/map = autohiss_basic_map.Copy() + if(mode == AUTOHISS_FULL && autohiss_extra_map) + map |= autohiss_extra_map + + . = list() + + while(length(message)) + var/min_index = 10000 // if the message is longer than this, the autohiss is the least of your problems + var/min_char = null + for(var/char in map) + var/i = findtext(message, char) + if(!i) // no more of this character anywhere in the string, don't even bother searching next time + map -= char + else if(i < min_index) + min_index = i + min_char = char + if(!min_char) // we didn't find any of the mapping characters + . += message + break + . += copytext(message, 1, min_index) + if(copytext(message, min_index, min_index+1) == uppertext(min_char)) + switch(text2ascii(message, min_index+1)) + if(65 to 90) // A-Z, uppercase; uppercase R/S followed by another uppercase letter, uppercase the entire replacement string + . += uppertext(pick(map[min_char])) + else + . += capitalize(pick(map[min_char])) + else + . += pick(map[min_char]) + message = copytext(message, min_index + 1) + + return jointext(., null) + +#undef AUTOHISS_OFF +#undef AUTOHISS_BASIC +#undef AUTOHISS_FULL +#undef AUTOHISS_NUM diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 35aca42244..0d0c5adb76 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -1,69 +1,69 @@ -/mob/living/carbon/alien - name = "alien" - desc = "What IS that?" - icon = 'icons/mob/alien.dmi' - icon_state = "alien" - pass_flags = PASSTABLE - health = 100 - maxHealth = 100 - mob_size = 4 - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - - inventory_panel_type = null // Disable inventory - - var/adult_form - var/dead_icon - var/amount_grown = 0 - var/max_grown = 200 - var/time_of_birth - var/language - var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw." - var/can_namepick_as_adult = 0 - var/adult_name - var/instance_num - -/mob/living/carbon/alien/Initialize() - . = ..() - - time_of_birth = world.time - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - instance_num = rand(1, 1000) - name = "[initial(name)] ([instance_num])" - real_name = name - regenerate_icons() - - if(language) - add_language(language) - - gender = NEUTER - -/mob/living/carbon/alien/u_equip(obj/item/W as obj) - return - -/mob/living/carbon/alien/restrained() - return 0 - -/mob/living/carbon/alien/cannot_use_vents() - return - -/mob/living/carbon/alien/get_default_language() - if(default_language) - return default_language - return GLOB.all_languages["Xenolingua"] //CHOMPedit - -/mob/living/carbon/alien/say_quote(var/message, var/datum/language/speaking = null) - var/verb = "hisses" - var/ending = copytext(message, length(message)) - - if(speaking && (speaking.name != "Galactic Common")) //this is so adminbooze xenos speaking common have their custom verbs, - verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages - else - if(ending == "!") - verb = "roars" - else if(ending == "?") - verb = "hisses curiously" - return verb - +/mob/living/carbon/alien + name = "alien" + desc = "What IS that?" + icon = 'icons/mob/alien.dmi' + icon_state = "alien" + pass_flags = PASSTABLE + health = 100 + maxHealth = 100 + mob_size = 4 + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + + inventory_panel_type = null // Disable inventory + + var/adult_form + var/dead_icon + var/amount_grown = 0 + var/max_grown = 200 + var/time_of_birth + var/language + var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw." + var/can_namepick_as_adult = 0 + var/adult_name + var/instance_num + +/mob/living/carbon/alien/Initialize() + . = ..() + + time_of_birth = world.time + + verbs += /mob/living/proc/ventcrawl + verbs += /mob/living/proc/hide + + instance_num = rand(1, 1000) + name = "[initial(name)] ([instance_num])" + real_name = name + regenerate_icons() + + if(language) + add_language(language) + + gender = NEUTER + +/mob/living/carbon/alien/u_equip(obj/item/W as obj) + return + +/mob/living/carbon/alien/restrained() + return 0 + +/mob/living/carbon/alien/cannot_use_vents() + return + +/mob/living/carbon/alien/get_default_language() + if(default_language) + return default_language + return GLOB.all_languages["Xenolingua"] //CHOMPedit + +/mob/living/carbon/alien/say_quote(var/message, var/datum/language/speaking = null) + var/verb = "hisses" + var/ending = copytext(message, length(message)) + + if(speaking && (speaking.name != "Galactic Common")) //this is so adminbooze xenos speaking common have their custom verbs, + verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages + else + if(ending == "!") + verb = "roars" + else if(ending == "?") + verb = "hisses curiously" + return verb + diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index ad191abc45..482b17cc35 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -1,109 +1,109 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/mob/living/carbon/brain - var/obj/item/container = null - var/timeofhostdeath = 0 - var/emp_damage = 0//Handles a type of MMI damage - var/alert = null - use_me = 0 //Can't use the me verb, it's a freaking immobile brain - icon = 'icons/obj/surgery.dmi' - icon_state = "brain1" - no_vore = TRUE //VOREStation Edit - PLEASE. lol. - can_pain_emote = FALSE // CHOMPEdit: Sanity/safety - low_priority = TRUE //CHOMPEdit - -/mob/living/carbon/brain/Initialize() - . = ..() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src - default_language = GLOB.all_languages[LANGUAGE_GALCOM] - -/mob/living/carbon/brain/Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat != DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - return ..() - -/mob/living/carbon/brain/say_understands(var/other)//Goddamn is this hackish, but this say code is so odd - if(istype(container, /obj/item/device/mmi)) - if(issilicon(other)) - return TRUE - if(ishuman(other)) - return TRUE - if(isslime(other)) - return TRUE - return ..() - -/mob/living/carbon/brain/update_canmove() - if(in_contents_of(/obj/mecha) || istype(loc, /obj/item/device/mmi)) - canmove = 1 - use_me = 1 - else - canmove = 0 - return canmove - -/mob/living/carbon/brain/isSynthetic() - return istype(loc, /obj/item/device/mmi) - -/mob/living/carbon/brain/runechat_holder(datum/chatmessage/CM) - if(isturf(loc)) - return ..() - - return loc - -/mob/living/carbon/brain/set_typing_indicator(var/state) - if(isturf(loc)) - return ..() - - if(!is_preference_enabled(/datum/client_preference/show_typing_indicator)) - loc.cut_overlay(typing_indicator, TRUE) - return - - var/cur_bubble_appearance = custom_speech_bubble - if(!cur_bubble_appearance || cur_bubble_appearance == "default") - cur_bubble_appearance = speech_bubble_appearance() - if(!typing_indicator || cur_typing_indicator != cur_bubble_appearance) - init_typing_indicator("[cur_bubble_appearance]_typing") - - if(state && !typing) - add_overlay(typing_indicator, TRUE) - typing = TRUE - typing_indicator_active = typing_indicator - else if(typing) - cut_overlay(typing_indicator_active, TRUE) - typing = FALSE - if(typing_indicator_active != typing_indicator) - qdel(typing_indicator_active) - typing_indicator_active = null - - return state - -// Vorestation edit start - -/mob/living/carbon/brain/verb/backup_ping() - set category = "IC" - set name = "Notify Transcore" - set desc = "Your body is gone. Notify robotics to be resleeved!" - var/datum/transcore_db/db = SStranscore.db_by_mind_name(mind.name) - if(db) - var/datum/transhuman/mind_record/record = db.backed_up[src.mind.name] - if(!(record.dead_state == MR_DEAD)) - if((world.time - timeofhostdeath ) > 5 MINUTES) //Allows notify transcore to be used if you have an entry but for some reason weren't marked as dead - record.dead_state = MR_DEAD //Such as if you got scanned but didn't take an implant. It's a little funky, but I mean, you got scanned - db.notify(record) //So you probably will want to let someone know if you die. - record.last_notification = world.time - to_chat(src, "New notification has been sent.") - else - to_chat(src, "Your backup is not past-due yet.") - else if((world.time - record.last_notification) < 5 MINUTES) - to_chat(src, "Too little time has passed since your last notification.") - else - db.notify(record) - record.last_notification = world.time - to_chat(src, "New notification has been sent.") - else - to_chat(src,"No backup record could be found, sorry.") - -// VS edit ends +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +/mob/living/carbon/brain + var/obj/item/container = null + var/timeofhostdeath = 0 + var/emp_damage = 0//Handles a type of MMI damage + var/alert = null + use_me = 0 //Can't use the me verb, it's a freaking immobile brain + icon = 'icons/obj/surgery.dmi' + icon_state = "brain1" + no_vore = TRUE //VOREStation Edit - PLEASE. lol. + can_pain_emote = FALSE // CHOMPEdit: Sanity/safety + low_priority = TRUE //CHOMPEdit + +/mob/living/carbon/brain/Initialize() + . = ..() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + default_language = GLOB.all_languages[LANGUAGE_GALCOM] + +/mob/living/carbon/brain/Destroy() + if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. + if(stat != DEAD) //If not dead. + death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + ghostize() //Ghostize checks for key so nothing else is necessary. + return ..() + +/mob/living/carbon/brain/say_understands(var/other)//Goddamn is this hackish, but this say code is so odd + if(istype(container, /obj/item/device/mmi)) + if(issilicon(other)) + return TRUE + if(ishuman(other)) + return TRUE + if(isslime(other)) + return TRUE + return ..() + +/mob/living/carbon/brain/update_canmove() + if(in_contents_of(/obj/mecha) || istype(loc, /obj/item/device/mmi)) + canmove = 1 + use_me = 1 + else + canmove = 0 + return canmove + +/mob/living/carbon/brain/isSynthetic() + return istype(loc, /obj/item/device/mmi) + +/mob/living/carbon/brain/runechat_holder(datum/chatmessage/CM) + if(isturf(loc)) + return ..() + + return loc + +/mob/living/carbon/brain/set_typing_indicator(var/state) + if(isturf(loc)) + return ..() + + if(!is_preference_enabled(/datum/client_preference/show_typing_indicator)) + loc.cut_overlay(typing_indicator, TRUE) + return + + var/cur_bubble_appearance = custom_speech_bubble + if(!cur_bubble_appearance || cur_bubble_appearance == "default") + cur_bubble_appearance = speech_bubble_appearance() + if(!typing_indicator || cur_typing_indicator != cur_bubble_appearance) + init_typing_indicator("[cur_bubble_appearance]_typing") + + if(state && !typing) + add_overlay(typing_indicator, TRUE) + typing = TRUE + typing_indicator_active = typing_indicator + else if(typing) + cut_overlay(typing_indicator_active, TRUE) + typing = FALSE + if(typing_indicator_active != typing_indicator) + qdel(typing_indicator_active) + typing_indicator_active = null + + return state + +// Vorestation edit start + +/mob/living/carbon/brain/verb/backup_ping() + set category = "IC" + set name = "Notify Transcore" + set desc = "Your body is gone. Notify robotics to be resleeved!" + var/datum/transcore_db/db = SStranscore.db_by_mind_name(mind.name) + if(db) + var/datum/transhuman/mind_record/record = db.backed_up[src.mind.name] + if(!(record.dead_state == MR_DEAD)) + if((world.time - timeofhostdeath ) > 5 MINUTES) //Allows notify transcore to be used if you have an entry but for some reason weren't marked as dead + record.dead_state = MR_DEAD //Such as if you got scanned but didn't take an implant. It's a little funky, but I mean, you got scanned + db.notify(record) //So you probably will want to let someone know if you die. + record.last_notification = world.time + to_chat(src, "New notification has been sent.") + else + to_chat(src, "Your backup is not past-due yet.") + else if((world.time - record.last_notification) < 5 MINUTES) + to_chat(src, "Too little time has passed since your last notification.") + else + db.notify(record) + record.last_notification = world.time + to_chat(src, "New notification has been sent.") + else + to_chat(src,"No backup record could be found, sorry.") + +// VS edit ends diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index 687372c6ee..1ad4169ceb 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -1,14 +1,14 @@ -/mob/living/carbon/brain/death(gibbed) - if(!gibbed && istype(container, /obj/item/device/mmi)) //If not gibbed but in a container. - container.icon_state = "mmi_dead" - return ..(gibbed,"beeps shrilly as the MMI flatlines!") - else - return ..(gibbed, DEATHGASP_NO_MESSAGE) - -/mob/living/carbon/brain/gib() - if(istype(container, /obj/item/device/mmi)) - qdel(container)//Gets rid of the MMI if there is one - if(loc) - if(istype(loc,/obj/item/organ/internal/brain)) - qdel(loc)//Gets rid of the brain item +/mob/living/carbon/brain/death(gibbed) + if(!gibbed && istype(container, /obj/item/device/mmi)) //If not gibbed but in a container. + container.icon_state = "mmi_dead" + return ..(gibbed,"beeps shrilly as the MMI flatlines!") + else + return ..(gibbed, DEATHGASP_NO_MESSAGE) + +/mob/living/carbon/brain/gib() + if(istype(container, /obj/item/device/mmi)) + qdel(container)//Gets rid of the MMI if there is one + if(loc) + if(istype(loc,/obj/item/organ/internal/brain)) + qdel(loc)//Gets rid of the brain item ..(null,1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 41023589ce..0f0e4615a0 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -1,17 +1,17 @@ -var/list/_brain_default_emotes = list( - /decl/emote/audible/alarm, - /decl/emote/audible/alert, - /decl/emote/audible/notice, - /decl/emote/audible/whistle, - /decl/emote/audible/synth, - /decl/emote/audible/beep, - /decl/emote/audible/boop, - /decl/emote/visible/blink, - /decl/emote/visible/flash -) - -/mob/living/carbon/brain/can_emote() - return (istype(container, /obj/item/device/mmi) && ..()) - -/mob/living/carbon/brain/get_available_emotes() - return global._brain_default_emotes.Copy() +var/list/_brain_default_emotes = list( + /decl/emote/audible/alarm, + /decl/emote/audible/alert, + /decl/emote/audible/notice, + /decl/emote/audible/whistle, + /decl/emote/audible/synth, + /decl/emote/audible/beep, + /decl/emote/audible/boop, + /decl/emote/visible/blink, + /decl/emote/visible/flash +) + +/mob/living/carbon/brain/can_emote() + return (istype(container, /obj/item/device/mmi) && ..()) + +/mob/living/carbon/brain/get_available_emotes() + return global._brain_default_emotes.Copy() diff --git a/code/modules/mob/living/carbon/brain/login.dm b/code/modules/mob/living/carbon/brain/login.dm index 107b8e0ab7..6248b8f154 100644 --- a/code/modules/mob/living/carbon/brain/login.dm +++ b/code/modules/mob/living/carbon/brain/login.dm @@ -1,3 +1,3 @@ -/mob/living/carbon/brain/Login() - ..() +/mob/living/carbon/brain/Login() + ..() SetSleeping(0) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 5f0355eee5..df2cd5471e 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -1,29 +1,29 @@ -//TODO: Convert this over for languages. -/mob/living/carbon/brain/say(var/message, var/datum/language/speaking = null, var/whispering = 0) - if(silent) - return - - //message = sanitize(message) //CHOMPEdit: This causes.... so many more problems then it fixes. Also should just be handled in the super function - - if(!(container && container.can_speak)) - return //Certain objects can speak, like MMIs. Most others cannot. -Q - else - if(prob(emp_damage * 4)) - if(prob(10))//10% chance to drop the message entirely - return - else - message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher - - ..() - -/mob/living/carbon/brain/handle_message_mode(message_mode, message, verb, speaking, used_radios) - ..() - if(message_mode) - var/obj/item/device/mmi/R = container - if(R.radio && R.radio.radio_enabled) - if(message_mode == "general") - message_mode = null - return R.radio.talk_into(src, message, message_mode, verb, speaking) - else - to_chat(src, "Your radio is disabled.") - return 0 +//TODO: Convert this over for languages. +/mob/living/carbon/brain/say(var/message, var/datum/language/speaking = null, var/whispering = 0) + if(silent) + return + + //message = sanitize(message) //CHOMPEdit: This causes.... so many more problems then it fixes. Also should just be handled in the super function + + if(!(container && container.can_speak)) + return //Certain objects can speak, like MMIs. Most others cannot. -Q + else + if(prob(emp_damage * 4)) + if(prob(10))//10% chance to drop the message entirely + return + else + message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher + + ..() + +/mob/living/carbon/brain/handle_message_mode(message_mode, message, verb, speaking, used_radios) + ..() + if(message_mode) + var/obj/item/device/mmi/R = container + if(R.radio && R.radio.radio_enabled) + if(message_mode == "general") + message_mode = null + return R.radio.talk_into(src, message, message_mode, verb, speaking) + else + to_chat(src, "Your radio is disabled.") + return 0 diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 9e7197cb20..a8047f5173 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,33 +1,33 @@ -/mob/living/carbon - gender = MALE - blocks_emissive = EMISSIVE_BLOCK_UNIQUE // BLEH, this could be improved for transparent species and stuff! And blocks glowing eyes?! - var/datum/species/species //Contains icon generation and language information, set during New(). - var/list/stomach_contents = list() - var/list/datum/disease2/disease/virus2 = list() - var/list/antibodies = list() - var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm - - var/life_tick = 0 // The amount of life ticks that have processed on this mob. - - // total amount of wounds on mob, used to spread out healing and the like over all wounds - var/number_wounds = 0 - var/obj/item/handcuffed = null //Whether or not the mob is handcuffed - var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. - //Surgery info - var/datum/surgery_status/op_stage = new/datum/surgery_status - //Active emote/pose - var/pose = null - var/list/chem_effects = list() - var/datum/reagents/metabolism/bloodstream/bloodstr = null - var/datum/reagents/metabolism/ingested/ingested = null - var/datum/reagents/metabolism/touch/touching = null - var/toxin_gut = FALSE //CHOMPAdd - - var/pulse = PULSE_NORM //current pulse level - - var/does_not_breathe = 0 //Used for specific mobs that can't take advantage of the species flags (changelings) - - //these two help govern taste. The first is the last time a taste message was shown to the plaer. - //the second is the message in question. - var/last_taste_time = 0 +/mob/living/carbon + gender = MALE + blocks_emissive = EMISSIVE_BLOCK_UNIQUE // BLEH, this could be improved for transparent species and stuff! And blocks glowing eyes?! + var/datum/species/species //Contains icon generation and language information, set during New(). + var/list/stomach_contents = list() + var/list/datum/disease2/disease/virus2 = list() + var/list/antibodies = list() + var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm + + var/life_tick = 0 // The amount of life ticks that have processed on this mob. + + // total amount of wounds on mob, used to spread out healing and the like over all wounds + var/number_wounds = 0 + var/obj/item/handcuffed = null //Whether or not the mob is handcuffed + var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. + //Surgery info + var/datum/surgery_status/op_stage = new/datum/surgery_status + //Active emote/pose + var/pose = null + var/list/chem_effects = list() + var/datum/reagents/metabolism/bloodstream/bloodstr = null + var/datum/reagents/metabolism/ingested/ingested = null + var/datum/reagents/metabolism/touch/touching = null + var/toxin_gut = FALSE //CHOMPAdd + + var/pulse = PULSE_NORM //current pulse level + + var/does_not_breathe = 0 //Used for specific mobs that can't take advantage of the species flags (changelings) + + //these two help govern taste. The first is the last time a taste message was shown to the plaer. + //the second is the message in question. + var/last_taste_time = 0 var/last_taste_text = "" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index b1424ae5b0..c2f767cbcb 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -1,252 +1,252 @@ -/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, - var/mob/user = src, - var/check_species_whitelist = 1, - var/list/species_whitelist = list(), - var/list/species_blacklist = list(), - var/datum/tgui_state/state = GLOB.tgui_self_state) - var/datum/tgui_module/appearance_changer/AC = new(src, src, check_species_whitelist, species_whitelist, species_blacklist) - AC.flags = flags - AC.tgui_interact(user, custom_state = state) - -/mob/living/carbon/human/proc/change_species(var/new_species) - if(!new_species) - return - - if(species == new_species) - return - - if(!(new_species in GLOB.all_species)) - return - - set_species(new_species) - reset_hair() - return 1 - -/mob/living/carbon/human/proc/change_gender(var/gender) - if(src.gender == gender) - return - - src.gender = gender - //reset_hair() //VOREStation Remove - Don't just randomize hair on gender swaps for prometheans. - update_dna() - update_icons_body() - return 1 - -/mob/living/carbon/human/proc/change_gender_identity(var/identifying_gender) - if(src.identifying_gender == identifying_gender) - return - - src.identifying_gender = identifying_gender - return 1 - -/mob/living/carbon/human/proc/change_hair(var/hair_style) - if(!hair_style) - return - - if(h_style == hair_style) - return - - if(!(hair_style in hair_styles_list)) - return - - h_style = hair_style - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_hair_gradient(var/hair_gradient) - if(!hair_gradient) - return - - if(grad_style == hair_gradient) - return - - if(!(hair_gradient in GLOB.hair_gradients)) - return - - grad_style = hair_gradient - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style) - if(!facial_hair_style) - return - - if(f_style == facial_hair_style) - return - - if(!(facial_hair_style in facial_hair_styles_list)) - return - - f_style = facial_hair_style - - update_hair() - return 1 - -/mob/living/carbon/human/proc/reset_hair() - var/list/valid_hairstyles = generate_valid_hairstyles() - var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles() - - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - else - //this shouldn't happen - h_style = "Bald" - - if(valid_facial_hairstyles.len) - f_style = pick(valid_facial_hairstyles) - else - //this shouldn't happen - f_style = "Shaved" - - update_hair() - -/mob/living/carbon/human/proc/change_eye_color(var/red, var/green, var/blue) - if(red == r_eyes && green == g_eyes && blue == b_eyes) - return - - r_eyes = red - g_eyes = green - b_eyes = blue - - update_eyes() - update_icons_body() - return 1 - -/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue) - if(red == r_hair && green == g_hair && blue == b_hair) - return - - r_hair = red - g_hair = green - b_hair = blue - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_grad_color(var/red, var/green, var/blue) - if(red == r_grad && green == g_grad && blue == b_grad) - return - - r_grad = red - g_grad = green - b_grad = blue - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue) - if(red == r_facial && green == g_facial && blue == b_facial) - return - - r_facial = red - g_facial = green - b_facial = blue - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue) - if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR)) - return - - r_skin = red - g_skin = green - b_skin = blue - - force_update_limbs() - update_icons_body() - return 1 - -/mob/living/carbon/human/proc/change_skin_tone(var/tone) - if(s_tone == tone || !(species.appearance_flags & HAS_SKIN_TONE)) - return - - s_tone = tone - - force_update_limbs() - update_icons_body() - return 1 - -/mob/living/carbon/human/proc/update_dna() - check_dna() - dna.ready_dna(src) - for(var/obj/item/organ/O in organs) - O.dna = dna // Update all of those because apparently they're separate, and icons won't update properly - -/mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) - var/list/valid_species = new() - for(var/current_species_name in GLOB.all_species) - var/datum/species/current_species = GLOB.all_species[current_species_name] - - if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN|R_EVENT, 0, src)) //If we're using the whitelist, make sure to check it! - if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) - continue - if(whitelist.len && !(current_species_name in whitelist)) - continue - if(blacklist.len && (current_species_name in blacklist)) - continue - if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(src, current_species)) - continue - - valid_species += current_species_name - - return valid_species - -/mob/living/carbon/human/proc/generate_valid_hairstyles(var/check_gender = 1) - - var/use_species = species.get_bodytype(src) - var/obj/item/organ/external/head/H = get_organ(BP_HEAD) - if(H) use_species = H.species.get_bodytype(src) - - var/list/valid_hairstyles = new() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - - if(check_gender && gender != NEUTER) - if(gender == MALE && S.gender == FEMALE) - continue - else if(gender == FEMALE && S.gender == MALE) - continue - - if(!(use_species in S.species_allowed)) - continue - - if(S.ckeys_allowed && !(ckey in S.ckeys_allowed)) //VOREStation add - ckey whitelist check - continue //VOREStation add - ckey whitelist check - - valid_hairstyles += hairstyle - - return valid_hairstyles - -/mob/living/carbon/human/proc/generate_valid_facial_hairstyles() - - var/use_species = species.get_bodytype(src) - var/obj/item/organ/external/head/H = get_organ(BP_HEAD) - if(H) use_species = H.species.get_bodytype(src) - - var/list/valid_facial_hairstyles = new() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - - if(gender != NEUTER) - if(gender == MALE && S.gender == FEMALE) - continue - else if(gender == FEMALE && S.gender == MALE) - continue - - if(!(use_species in S.species_allowed)) - continue - - if(S.ckeys_allowed && !(ckey in S.ckeys_allowed)) //VOREStation add - ckey whitelist check - continue //VOREStation add - ckey whitelist check - - valid_facial_hairstyles += facialhairstyle - - return valid_facial_hairstyles - -/mob/living/carbon/human/proc/force_update_limbs() - for(var/obj/item/organ/external/O in organs) - O.sync_colour_to_human(src) - update_icons_body(FALSE) +/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, + var/mob/user = src, + var/check_species_whitelist = 1, + var/list/species_whitelist = list(), + var/list/species_blacklist = list(), + var/datum/tgui_state/state = GLOB.tgui_self_state) + var/datum/tgui_module/appearance_changer/AC = new(src, src, check_species_whitelist, species_whitelist, species_blacklist) + AC.flags = flags + AC.tgui_interact(user, custom_state = state) + +/mob/living/carbon/human/proc/change_species(var/new_species) + if(!new_species) + return + + if(species == new_species) + return + + if(!(new_species in GLOB.all_species)) + return + + set_species(new_species) + reset_hair() + return 1 + +/mob/living/carbon/human/proc/change_gender(var/gender) + if(src.gender == gender) + return + + src.gender = gender + //reset_hair() //VOREStation Remove - Don't just randomize hair on gender swaps for prometheans. + update_dna() + update_icons_body() + return 1 + +/mob/living/carbon/human/proc/change_gender_identity(var/identifying_gender) + if(src.identifying_gender == identifying_gender) + return + + src.identifying_gender = identifying_gender + return 1 + +/mob/living/carbon/human/proc/change_hair(var/hair_style) + if(!hair_style) + return + + if(h_style == hair_style) + return + + if(!(hair_style in hair_styles_list)) + return + + h_style = hair_style + + update_hair() + return 1 + +/mob/living/carbon/human/proc/change_hair_gradient(var/hair_gradient) + if(!hair_gradient) + return + + if(grad_style == hair_gradient) + return + + if(!(hair_gradient in GLOB.hair_gradients)) + return + + grad_style = hair_gradient + + update_hair() + return 1 + +/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style) + if(!facial_hair_style) + return + + if(f_style == facial_hair_style) + return + + if(!(facial_hair_style in facial_hair_styles_list)) + return + + f_style = facial_hair_style + + update_hair() + return 1 + +/mob/living/carbon/human/proc/reset_hair() + var/list/valid_hairstyles = generate_valid_hairstyles() + var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles() + + if(valid_hairstyles.len) + h_style = pick(valid_hairstyles) + else + //this shouldn't happen + h_style = "Bald" + + if(valid_facial_hairstyles.len) + f_style = pick(valid_facial_hairstyles) + else + //this shouldn't happen + f_style = "Shaved" + + update_hair() + +/mob/living/carbon/human/proc/change_eye_color(var/red, var/green, var/blue) + if(red == r_eyes && green == g_eyes && blue == b_eyes) + return + + r_eyes = red + g_eyes = green + b_eyes = blue + + update_eyes() + update_icons_body() + return 1 + +/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue) + if(red == r_hair && green == g_hair && blue == b_hair) + return + + r_hair = red + g_hair = green + b_hair = blue + + update_hair() + return 1 + +/mob/living/carbon/human/proc/change_grad_color(var/red, var/green, var/blue) + if(red == r_grad && green == g_grad && blue == b_grad) + return + + r_grad = red + g_grad = green + b_grad = blue + + update_hair() + return 1 + +/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue) + if(red == r_facial && green == g_facial && blue == b_facial) + return + + r_facial = red + g_facial = green + b_facial = blue + + update_hair() + return 1 + +/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue) + if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR)) + return + + r_skin = red + g_skin = green + b_skin = blue + + force_update_limbs() + update_icons_body() + return 1 + +/mob/living/carbon/human/proc/change_skin_tone(var/tone) + if(s_tone == tone || !(species.appearance_flags & HAS_SKIN_TONE)) + return + + s_tone = tone + + force_update_limbs() + update_icons_body() + return 1 + +/mob/living/carbon/human/proc/update_dna() + check_dna() + dna.ready_dna(src) + for(var/obj/item/organ/O in organs) + O.dna = dna // Update all of those because apparently they're separate, and icons won't update properly + +/mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) + var/list/valid_species = new() + for(var/current_species_name in GLOB.all_species) + var/datum/species/current_species = GLOB.all_species[current_species_name] + + if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN|R_EVENT, 0, src)) //If we're using the whitelist, make sure to check it! + if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) + continue + if(whitelist.len && !(current_species_name in whitelist)) + continue + if(blacklist.len && (current_species_name in blacklist)) + continue + if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(src, current_species)) + continue + + valid_species += current_species_name + + return valid_species + +/mob/living/carbon/human/proc/generate_valid_hairstyles(var/check_gender = 1) + + var/use_species = species.get_bodytype(src) + var/obj/item/organ/external/head/H = get_organ(BP_HEAD) + if(H) use_species = H.species.get_bodytype(src) + + var/list/valid_hairstyles = new() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + + if(check_gender && gender != NEUTER) + if(gender == MALE && S.gender == FEMALE) + continue + else if(gender == FEMALE && S.gender == MALE) + continue + + if(!(use_species in S.species_allowed)) + continue + + if(S.ckeys_allowed && !(ckey in S.ckeys_allowed)) //VOREStation add - ckey whitelist check + continue //VOREStation add - ckey whitelist check + + valid_hairstyles += hairstyle + + return valid_hairstyles + +/mob/living/carbon/human/proc/generate_valid_facial_hairstyles() + + var/use_species = species.get_bodytype(src) + var/obj/item/organ/external/head/H = get_organ(BP_HEAD) + if(H) use_species = H.species.get_bodytype(src) + + var/list/valid_facial_hairstyles = new() + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + + if(gender != NEUTER) + if(gender == MALE && S.gender == FEMALE) + continue + else if(gender == FEMALE && S.gender == MALE) + continue + + if(!(use_species in S.species_allowed)) + continue + + if(S.ckeys_allowed && !(ckey in S.ckeys_allowed)) //VOREStation add - ckey whitelist check + continue //VOREStation add - ckey whitelist check + + valid_facial_hairstyles += facialhairstyle + + return valid_facial_hairstyles + +/mob/living/carbon/human/proc/force_update_limbs() + for(var/obj/item/organ/external/O in organs) + O.sync_colour_to_human(src) + update_icons_body(FALSE) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 1fbbcf9408..2f5a0940a4 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -1,157 +1,157 @@ -/mob/living/carbon/human/gib() - - if(vr_holder) - exit_vr() - // Delete the link, because this mob won't be around much longer - vr_holder.vr_link = null - - if(vr_link) - vr_link.exit_vr() - vr_link.vr_holder = null - vr_link = null - - for(var/obj/item/organ/I in internal_organs) - I.removed() - if(isturf(I?.loc)) // Some organs qdel themselves or other things when removed - I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) - - for(var/obj/item/organ/external/E in src.organs) - E.droplimb(0,DROPLIMB_EDGE,1) - - sleep(1) - - for(var/obj/item/I in src) - drop_from_inventory(I) - I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class)) - - ..(species.gibbed_anim) // uses the default mob.dmi file for these, so we only need to specify the first argument - gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src)) - -/mob/living/carbon/human/dust() - if(species) - ..(species.dusted_anim, species.remains_type) - else - ..() - -/mob/living/carbon/human/ash() - if(species) - ..(species.dusted_anim) - else - ..() - -/mob/living/carbon/human/death(gibbed) - - if(stat == DEAD) return - - BITSET(hud_updateflag, HEALTH_HUD) - BITSET(hud_updateflag, STATUS_HUD) - BITSET(hud_updateflag, LIFE_HUD) - - //Handle species-specific deaths. - //CHOMPEdit start - Enable not-actually-dying being a species effect - if(species.handle_death(src)) - return - //CHOMPEdit end - animate_tail_stop() - stop_flying() //VOREStation Edit. - - //Handle snowflake ling stuff. - if(mind && mind.changeling) - // If the ling is capable of revival, don't allow them to see deadchat. - if(mind.changeling.chem_charges >= CHANGELING_STASIS_COST) - if(mind.changeling.max_geneticpoints >= 0) // Absorbed lings don't count, as they can't revive. - forbid_seeing_deadchat = TRUE - - //Handle brain slugs. - var/obj/item/organ/external/Hd = get_organ(BP_HEAD) - var/mob/living/simple_mob/animal/borer/B - - if(Hd) - for(var/I in Hd.implants) - if(istype(I,/mob/living/simple_mob/animal/borer)) - B = I - if(B) - if(!B.ckey && ckey && B.controlling) - B.ckey = ckey - B.controlling = 0 - if(B.host_brain.ckey) - ckey = B.host_brain.ckey - B.host_brain.ckey = null - B.host_brain.name = "host brain" - B.host_brain.real_name = "host brain" - - verbs -= /mob/living/carbon/proc/release_control - - callHook("death", list(src, gibbed)) - - if(mind) - // SSgame_master.adjust_danger(gibbed ? 40 : 20) // VOREStation Edit - We don't use SSgame_master yet. - for(var/mob/observer/dead/O in mob_list) - if(O.client && O.client.is_preference_enabled(/datum/client_preference/show_dsay)) - to_chat(O, "[src] has died in [get_area(src)]. [ghost_follow_link(src, O)] ") - - /* // CHOMPEdit Start: Replacing this with our own death sounds. :3 - if(!gibbed && species.death_sound) - playsound(src, species.death_sound, 80, 1, 1) - */ - if(!gibbed && !isbelly(loc)) - playsound(src, pick(get_species_sound(get_gendered_sound(src))["death"]), src.species.death_volume, 1, 20, volume_channel = VOLUME_CHANNEL_DEATH_SOUNDS) - // CHOMPEdit End - - if(ticker && ticker.mode) - sql_report_death(src) - ticker.mode.check_win() - - if(wearing_rig) - wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system.") - - // If the body is in VR, move the mind back to the real world - if(vr_holder) - src.died_in_vr = TRUE //CHOMPedit, so avatar.dm can delete bodies - src.exit_vr() - src.vr_holder.vr_link = null - for(var/obj/item/W in src) - src.drop_from_inventory(W) - - - // If our mind is in VR, bring it back to the real world so it can die with its body - if(vr_link) - vr_link.exit_vr() - vr_link.vr_holder = null - vr_link = null - to_chat(src, "Everything abruptly stops.") - - return ..(gibbed,species.get_death_message(src)) - -/mob/living/carbon/human/proc/ChangeToHusk() - if(HUSK in mutations) return - - if(f_style) - f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE - if(h_style) - h_style = "Bald" - update_hair(0) - - mutations.Add(HUSK) - status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools - update_icons_body() - return - -/mob/living/carbon/human/proc/Drain() - ChangeToHusk() - mutations |= HUSK - return - -/mob/living/carbon/human/proc/ChangeToSkeleton() - if(SKELETON in src.mutations) return - - if(f_style) - f_style = "Shaved" - if(h_style) - h_style = "Bald" - update_hair(0) - - mutations.Add(SKELETON) - status_flags |= DISFIGURED - update_icons_body() - return +/mob/living/carbon/human/gib() + + if(vr_holder) + exit_vr() + // Delete the link, because this mob won't be around much longer + vr_holder.vr_link = null + + if(vr_link) + vr_link.exit_vr() + vr_link.vr_holder = null + vr_link = null + + for(var/obj/item/organ/I in internal_organs) + I.removed() + if(isturf(I?.loc)) // Some organs qdel themselves or other things when removed + I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + + for(var/obj/item/organ/external/E in src.organs) + E.droplimb(0,DROPLIMB_EDGE,1) + + sleep(1) + + for(var/obj/item/I in src) + drop_from_inventory(I) + I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class)) + + ..(species.gibbed_anim) // uses the default mob.dmi file for these, so we only need to specify the first argument + gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src)) + +/mob/living/carbon/human/dust() + if(species) + ..(species.dusted_anim, species.remains_type) + else + ..() + +/mob/living/carbon/human/ash() + if(species) + ..(species.dusted_anim) + else + ..() + +/mob/living/carbon/human/death(gibbed) + + if(stat == DEAD) return + + BITSET(hud_updateflag, HEALTH_HUD) + BITSET(hud_updateflag, STATUS_HUD) + BITSET(hud_updateflag, LIFE_HUD) + + //Handle species-specific deaths. + //CHOMPEdit start - Enable not-actually-dying being a species effect + if(species.handle_death(src)) + return + //CHOMPEdit end + animate_tail_stop() + stop_flying() //VOREStation Edit. + + //Handle snowflake ling stuff. + if(mind && mind.changeling) + // If the ling is capable of revival, don't allow them to see deadchat. + if(mind.changeling.chem_charges >= CHANGELING_STASIS_COST) + if(mind.changeling.max_geneticpoints >= 0) // Absorbed lings don't count, as they can't revive. + forbid_seeing_deadchat = TRUE + + //Handle brain slugs. + var/obj/item/organ/external/Hd = get_organ(BP_HEAD) + var/mob/living/simple_mob/animal/borer/B + + if(Hd) + for(var/I in Hd.implants) + if(istype(I,/mob/living/simple_mob/animal/borer)) + B = I + if(B) + if(!B.ckey && ckey && B.controlling) + B.ckey = ckey + B.controlling = 0 + if(B.host_brain.ckey) + ckey = B.host_brain.ckey + B.host_brain.ckey = null + B.host_brain.name = "host brain" + B.host_brain.real_name = "host brain" + + verbs -= /mob/living/carbon/proc/release_control + + callHook("death", list(src, gibbed)) + + if(mind) + // SSgame_master.adjust_danger(gibbed ? 40 : 20) // VOREStation Edit - We don't use SSgame_master yet. + for(var/mob/observer/dead/O in mob_list) + if(O.client && O.client.is_preference_enabled(/datum/client_preference/show_dsay)) + to_chat(O, "[src] has died in [get_area(src)]. [ghost_follow_link(src, O)] ") + + /* // CHOMPEdit Start: Replacing this with our own death sounds. :3 + if(!gibbed && species.death_sound) + playsound(src, species.death_sound, 80, 1, 1) + */ + if(!gibbed && !isbelly(loc)) + playsound(src, pick(get_species_sound(get_gendered_sound(src))["death"]), src.species.death_volume, 1, 20, volume_channel = VOLUME_CHANNEL_DEATH_SOUNDS) + // CHOMPEdit End + + if(ticker && ticker.mode) + sql_report_death(src) + ticker.mode.check_win() + + if(wearing_rig) + wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system.") + + // If the body is in VR, move the mind back to the real world + if(vr_holder) + src.died_in_vr = TRUE //CHOMPedit, so avatar.dm can delete bodies + src.exit_vr() + src.vr_holder.vr_link = null + for(var/obj/item/W in src) + src.drop_from_inventory(W) + + + // If our mind is in VR, bring it back to the real world so it can die with its body + if(vr_link) + vr_link.exit_vr() + vr_link.vr_holder = null + vr_link = null + to_chat(src, "Everything abruptly stops.") + + return ..(gibbed,species.get_death_message(src)) + +/mob/living/carbon/human/proc/ChangeToHusk() + if(HUSK in mutations) return + + if(f_style) + f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE + if(h_style) + h_style = "Bald" + update_hair(0) + + mutations.Add(HUSK) + status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools + update_icons_body() + return + +/mob/living/carbon/human/proc/Drain() + ChangeToHusk() + mutations |= HUSK + return + +/mob/living/carbon/human/proc/ChangeToSkeleton() + if(SKELETON in src.mutations) return + + if(f_style) + f_style = "Shaved" + if(h_style) + h_style = "Bald" + update_hair(0) + + mutations.Add(SKELETON) + status_flags |= DISFIGURED + update_icons_body() + return diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 9ff5d73769..4a95788a09 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,418 +1,418 @@ -var/list/_human_default_emotes = list( - /decl/emote/visible/blink, - /decl/emote/audible/synth, - /decl/emote/audible/synth/beep, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/audible/synth/scary, - /decl/emote/audible/synth/dwoop, - /decl/emote/audible/synth/boop, - /decl/emote/audible/synth/robochirp, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/gasp, - /decl/emote/audible/choke, - /decl/emote/audible/sneeze, - /decl/emote/audible/sniff, - /decl/emote/audible/snore, - /decl/emote/audible/whimper, - /decl/emote/audible/whistle, - /decl/emote/audible/whistle/quiet, - /decl/emote/audible/whistle/wolf, - /decl/emote/audible/whistle/summon, - /decl/emote/audible/yawn, - /decl/emote/audible/clap, - /decl/emote/audible/chuckle, - /decl/emote/audible/cough, - /decl/emote/audible/cry, - /decl/emote/audible/sigh, - /decl/emote/audible/laugh, - /decl/emote/audible/mumble, - /decl/emote/audible/grumble, - /decl/emote/audible/groan, - /decl/emote/audible/moan, - /decl/emote/audible/grunt, - /decl/emote/audible/slap, - /decl/emote/audible/crack, - /decl/emote/human/deathgasp, - /decl/emote/audible/giggle, - /decl/emote/audible/scream, - /decl/emote/visible/airguitar, - /decl/emote/visible/blink_r, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/drool, - /decl/emote/visible/eyebrow, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/twitch_v, - /decl/emote/visible/faint, - /decl/emote/visible/frown, - /decl/emote/visible/blush, - /decl/emote/visible/wave, - /decl/emote/visible/glare, - /decl/emote/visible/stare, - /decl/emote/visible/look, - /decl/emote/visible/point, - /decl/emote/visible/raise, - /decl/emote/visible/grin, - /decl/emote/visible/shrug, - /decl/emote/visible/smile, - /decl/emote/visible/pale, - /decl/emote/visible/tremble, - /decl/emote/visible/wink, - /decl/emote/visible/hug, - /decl/emote/visible/dap, - /decl/emote/visible/signal, - /decl/emote/visible/handshake, - /decl/emote/visible/afold, - /decl/emote/visible/alook, - /decl/emote/visible/eroll, - /decl/emote/visible/hbow, - /decl/emote/visible/hip, - /decl/emote/visible/holdup, - /decl/emote/visible/hshrug, - /decl/emote/visible/crub, - /decl/emote/visible/erub, - /decl/emote/visible/fslap, - /decl/emote/visible/ftap, - /decl/emote/visible/hrub, - /decl/emote/visible/hspread, - /decl/emote/visible/pocket, - /decl/emote/visible/rsalute, - /decl/emote/visible/rshoulder, - /decl/emote/visible/squint, - /decl/emote/visible/tfist, - /decl/emote/visible/tilt, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/snap, - /decl/emote/visible/vomit, - /decl/emote/visible/floorspin, - /decl/emote/visible/flip, - //VOREStation Add - /decl/emote/audible/bug_hiss, - /decl/emote/audible/bug_buzz, - /decl/emote/audible/bug_chitter, - /decl/emote/audible/hiss, - /decl/emote/audible/chirp, - /decl/emote/audible/warble, - /decl/emote/audible/vox_shriek, - /decl/emote/audible/purr, - /decl/emote/audible/purrlong, - /decl/emote/audible/awoo, - /decl/emote/audible/awoo2, - /decl/emote/audible/belch, - /decl/emote/audible/growl, - /decl/emote/audible/woof, - /decl/emote/audible/woof2, - /decl/emote/audible/nya, - /decl/emote/audible/mrowl, - /decl/emote/audible/peep, - /decl/emote/audible/chirp, - /decl/emote/audible/hoot, - /decl/emote/audible/weh, - /decl/emote/audible/merp, - /decl/emote/audible/myarp, - /decl/emote/audible/bark, - /decl/emote/audible/bork, - /decl/emote/audible/mrow, - /decl/emote/audible/hypno, - /decl/emote/audible/hiss, - /decl/emote/audible/rattle, - /decl/emote/audible/squeak, - /decl/emote/audible/geck, - /decl/emote/audible/baa, - /decl/emote/audible/baa2, - /decl/emote/audible/mar, - /decl/emote/audible/wurble, - /decl/emote/audible/snort, - /decl/emote/audible/meow, - /decl/emote/audible/moo, - /decl/emote/audible/croak, - /decl/emote/audible/gao, - /decl/emote/audible/cackle, - /decl/emote/audible/squish, - /decl/emote/audible/spiderchitter, - /decl/emote/audible/spiderpurr, - /decl/emote/audible/squeaky, - /decl/emote/visible/mlem, - /decl/emote/visible/blep, - /decl/emote/helper/vwag, - /decl/emote/helper/vflap, - /decl/emote/audible/prbt, - /decl/emote/audible/gyoh, - /decl/emote/audible/rumble, - /decl/emote/audible/coyawoo, - /decl/emote/audible/coyawoo2, - /decl/emote/audible/coyawoo3, - /decl/emote/audible/coyawoo4, - /decl/emote/audible/coyawoo5, - /decl/emote/audible/fennecscream, - /decl/emote/audible/zoom, - /decl/emote/audible/mothscream, - /decl/emote/audible/mothchitter, - /decl/emote/audible/mothlaugh, - /decl/emote/audible/multichirp, - /decl/emote/audible/gnarl, - /decl/emote/audible/teshsqueak, - /decl/emote/audible/teshchirp, - /decl/emote/audible/teshtrill, - /decl/emote/audible/teshscream, - /decl/emote/visible/bounce, - /decl/emote/visible/jiggle, - /decl/emote/visible/lightup, - /decl/emote/visible/vibrate, - /decl/emote/audible/croon, - /decl/emote/audible/lwarble, - /decl/emote/audible/croak_skrell, - /decl/emote/audible/roarbark, - /decl/emote/audible/dook, - //VOREStation Add End - //CHOMP Add start - /decl/emote/audible/prbt2, - /decl/emote/audible/pain, - /decl/emote/audible/mgeow, - /decl/emote/visible/flip/slip, - /decl/emote/audible/xenogrowl, - /decl/emote/audible/xenohiss, - /decl/emote/audible/xenopurr - //CHOMP Add end -) - - //VOREStation Add Start - -var/list/_simple_mob_default_emotes = list( - /decl/emote/visible/blink, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/gasp, - /decl/emote/audible/choke, - /decl/emote/audible/sneeze, - /decl/emote/audible/sniff, - /decl/emote/audible/snore, - /decl/emote/audible/whimper, - /decl/emote/audible/whistle, - /decl/emote/audible/whistle/quiet, - /decl/emote/audible/whistle/wolf, - /decl/emote/audible/whistle/summon, - /decl/emote/audible/yawn, - /decl/emote/audible/clap, - /decl/emote/audible/chuckle, - /decl/emote/audible/cough, - /decl/emote/audible/cry, - /decl/emote/audible/sigh, - /decl/emote/audible/laugh, - /decl/emote/audible/mumble, - /decl/emote/audible/grumble, - /decl/emote/audible/groan, - /decl/emote/audible/moan, - /decl/emote/audible/grunt, - /decl/emote/audible/slap, - /decl/emote/audible/crack, - /decl/emote/human/deathgasp, - /decl/emote/audible/giggle, - /decl/emote/audible/scream, - /decl/emote/visible/airguitar, - /decl/emote/visible/blink_r, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/drool, - /decl/emote/visible/eyebrow, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/twitch_v, - /decl/emote/visible/faint, - /decl/emote/visible/frown, - /decl/emote/visible/blush, - /decl/emote/visible/wave, - /decl/emote/visible/glare, - /decl/emote/visible/stare, - /decl/emote/visible/look, - /decl/emote/visible/point, - /decl/emote/visible/raise, - /decl/emote/visible/grin, - /decl/emote/visible/shrug, - /decl/emote/visible/smile, - /decl/emote/visible/pale, - /decl/emote/visible/tremble, - /decl/emote/visible/wink, - /decl/emote/visible/hug, - /decl/emote/visible/signal, - /decl/emote/visible/afold, - /decl/emote/visible/alook, - /decl/emote/visible/eroll, - /decl/emote/visible/hbow, - /decl/emote/visible/hip, - /decl/emote/visible/holdup, - /decl/emote/visible/hshrug, - /decl/emote/visible/crub, - /decl/emote/visible/erub, - /decl/emote/visible/fslap, - /decl/emote/visible/ftap, - /decl/emote/visible/hrub, - /decl/emote/visible/hspread, - /decl/emote/visible/rsalute, - /decl/emote/visible/rshoulder, - /decl/emote/visible/squint, - /decl/emote/visible/tfist, - /decl/emote/visible/tilt, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/visible/vomit, - /decl/emote/visible/floorspin, - /decl/emote/visible/flip, - /decl/emote/audible/awoo, - /decl/emote/audible/awoo2, - /decl/emote/audible/belch, - /decl/emote/audible/growl, - /decl/emote/audible/woof, - /decl/emote/audible/woof2, - /decl/emote/audible/nya, - /decl/emote/audible/mrowl, - /decl/emote/audible/peep, - /decl/emote/audible/chirp, - /decl/emote/audible/hoot, - /decl/emote/audible/weh, - /decl/emote/audible/merp, - /decl/emote/audible/myarp, - /decl/emote/audible/bark, - /decl/emote/audible/bork, - /decl/emote/audible/mrow, - /decl/emote/audible/hypno, - /decl/emote/audible/hiss, - /decl/emote/audible/rattle, - /decl/emote/audible/squeak, - /decl/emote/audible/geck, - /decl/emote/audible/baa, - /decl/emote/audible/baa2, - /decl/emote/audible/mar, - /decl/emote/audible/wurble, - /decl/emote/audible/snort, - /decl/emote/audible/meow, - /decl/emote/audible/moo, - /decl/emote/audible/croak, - /decl/emote/audible/gao, - /decl/emote/audible/cackle, - /decl/emote/audible/squish, - /decl/emote/audible/spiderchitter, - /decl/emote/audible/spiderpurr, - /decl/emote/audible/squeaky, - /decl/emote/visible/mlem, - /decl/emote/visible/blep, - /decl/emote/audible/prbt, - /decl/emote/audible/gyoh, - /decl/emote/audible/rumble, - /decl/emote/audible/fennecscream, - /decl/emote/audible/zoom, - /decl/emote/audible/bug_hiss, - /decl/emote/audible/bug_buzz, - /decl/emote/audible/bug_chitter, - /decl/emote/audible/hiss, - /decl/emote/audible/chirp, - /decl/emote/audible/warble, - /decl/emote/audible/vox_shriek, - /decl/emote/audible/purr, - /decl/emote/audible/purrlong, - /decl/emote/audible/dook, - //CHOMP Add start - /decl/emote/audible/prbt2, - /decl/emote/audible/pain, - /decl/emote/audible/mgeow, - /decl/emote/audible/xenogrowl, - /decl/emote/audible/xenohiss, - /decl/emote/audible/xenopurr - //CHOMP Add end - ) - //VOREStation Add End - -/mob/living/carbon/human/get_available_emotes() - . = global._human_default_emotes.Copy() - if(length(species?.default_emotes)) - return . | species.default_emotes - -/mob/living/simple_mob/get_available_emotes() - . = global._simple_mob_default_emotes.Copy() - -/mob/living/carbon/human/verb/pose() - set name = "Set Pose" - set desc = "Sets a description which will be shown when someone examines you." - set category = "IC" - - var/datum/gender/T = gender_datums[get_visible_gender()] - - pose = strip_html_simple(tgui_input_text(usr, "This is [src]. [T.he]...", "Pose", null)) - -/mob/living/carbon/human/verb/set_flavor() - set name = "Set Flavour Text" - set desc = "Sets an extended description of your character's features." - set category = "IC" - - var/HTML = "" - HTML += "
                    " - HTML += "Update Flavour Text
                    " - HTML += "
                    " - HTML += "General: " - HTML += TextPreview(flavor_texts["general"]) - HTML += "
                    " - HTML += "Head: " - HTML += TextPreview(flavor_texts["head"]) - HTML += "
                    " - HTML += "Face: " - HTML += TextPreview(flavor_texts["face"]) - HTML += "
                    " - HTML += "Eyes: " - HTML += TextPreview(flavor_texts["eyes"]) - HTML += "
                    " - HTML += "Body: " - HTML += TextPreview(flavor_texts["torso"]) - HTML += "
                    " - HTML += "Arms: " - HTML += TextPreview(flavor_texts["arms"]) - HTML += "
                    " - HTML += "Hands: " - HTML += TextPreview(flavor_texts["hands"]) - HTML += "
                    " - HTML += "Legs: " - HTML += TextPreview(flavor_texts["legs"]) - HTML += "
                    " - HTML += "Feet: " - HTML += TextPreview(flavor_texts["feet"]) - HTML += "
                    " - HTML += "
                    " - HTML +="\[Done\]" - HTML += "" - src << browse(HTML, "window=flavor_changes;size=430x300") - -/mob/living/carbon/human/proc/toggle_tail(var/setting,var/message = 0) - if(!tail_style || !tail_style.ani_state) - if(message) - to_chat(src, "You don't have a tail that supports this.") - return 0 - - var/new_wagging = isnull(setting) ? !wagging : setting - if(new_wagging != wagging) - wagging = new_wagging - update_tail_showing() - return 1 - -/mob/living/carbon/human/proc/toggle_wing(var/setting,var/message = 0) - if(!wing_style || !wing_style.ani_state) - if(message) - to_chat(src, "You don't have a wingtype that supports this.") - return 0 - - var/new_flapping = isnull(setting) ? !flapping : setting - if(new_flapping != flapping) - flapping = new_flapping - update_wing_showing() - return 1 +var/list/_human_default_emotes = list( + /decl/emote/visible/blink, + /decl/emote/audible/synth, + /decl/emote/audible/synth/beep, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/audible/synth/scary, + /decl/emote/audible/synth/dwoop, + /decl/emote/audible/synth/boop, + /decl/emote/audible/synth/robochirp, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/audible/gasp, + /decl/emote/audible/choke, + /decl/emote/audible/sneeze, + /decl/emote/audible/sniff, + /decl/emote/audible/snore, + /decl/emote/audible/whimper, + /decl/emote/audible/whistle, + /decl/emote/audible/whistle/quiet, + /decl/emote/audible/whistle/wolf, + /decl/emote/audible/whistle/summon, + /decl/emote/audible/yawn, + /decl/emote/audible/clap, + /decl/emote/audible/chuckle, + /decl/emote/audible/cough, + /decl/emote/audible/cry, + /decl/emote/audible/sigh, + /decl/emote/audible/laugh, + /decl/emote/audible/mumble, + /decl/emote/audible/grumble, + /decl/emote/audible/groan, + /decl/emote/audible/moan, + /decl/emote/audible/grunt, + /decl/emote/audible/slap, + /decl/emote/audible/crack, + /decl/emote/human/deathgasp, + /decl/emote/audible/giggle, + /decl/emote/audible/scream, + /decl/emote/visible/airguitar, + /decl/emote/visible/blink_r, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/drool, + /decl/emote/visible/eyebrow, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/twitch_v, + /decl/emote/visible/faint, + /decl/emote/visible/frown, + /decl/emote/visible/blush, + /decl/emote/visible/wave, + /decl/emote/visible/glare, + /decl/emote/visible/stare, + /decl/emote/visible/look, + /decl/emote/visible/point, + /decl/emote/visible/raise, + /decl/emote/visible/grin, + /decl/emote/visible/shrug, + /decl/emote/visible/smile, + /decl/emote/visible/pale, + /decl/emote/visible/tremble, + /decl/emote/visible/wink, + /decl/emote/visible/hug, + /decl/emote/visible/dap, + /decl/emote/visible/signal, + /decl/emote/visible/handshake, + /decl/emote/visible/afold, + /decl/emote/visible/alook, + /decl/emote/visible/eroll, + /decl/emote/visible/hbow, + /decl/emote/visible/hip, + /decl/emote/visible/holdup, + /decl/emote/visible/hshrug, + /decl/emote/visible/crub, + /decl/emote/visible/erub, + /decl/emote/visible/fslap, + /decl/emote/visible/ftap, + /decl/emote/visible/hrub, + /decl/emote/visible/hspread, + /decl/emote/visible/pocket, + /decl/emote/visible/rsalute, + /decl/emote/visible/rshoulder, + /decl/emote/visible/squint, + /decl/emote/visible/tfist, + /decl/emote/visible/tilt, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/snap, + /decl/emote/visible/vomit, + /decl/emote/visible/floorspin, + /decl/emote/visible/flip, + //VOREStation Add + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, + /decl/emote/audible/awoo, + /decl/emote/audible/awoo2, + /decl/emote/audible/belch, + /decl/emote/audible/growl, + /decl/emote/audible/woof, + /decl/emote/audible/woof2, + /decl/emote/audible/nya, + /decl/emote/audible/mrowl, + /decl/emote/audible/peep, + /decl/emote/audible/chirp, + /decl/emote/audible/hoot, + /decl/emote/audible/weh, + /decl/emote/audible/merp, + /decl/emote/audible/myarp, + /decl/emote/audible/bark, + /decl/emote/audible/bork, + /decl/emote/audible/mrow, + /decl/emote/audible/hypno, + /decl/emote/audible/hiss, + /decl/emote/audible/rattle, + /decl/emote/audible/squeak, + /decl/emote/audible/geck, + /decl/emote/audible/baa, + /decl/emote/audible/baa2, + /decl/emote/audible/mar, + /decl/emote/audible/wurble, + /decl/emote/audible/snort, + /decl/emote/audible/meow, + /decl/emote/audible/moo, + /decl/emote/audible/croak, + /decl/emote/audible/gao, + /decl/emote/audible/cackle, + /decl/emote/audible/squish, + /decl/emote/audible/spiderchitter, + /decl/emote/audible/spiderpurr, + /decl/emote/audible/squeaky, + /decl/emote/visible/mlem, + /decl/emote/visible/blep, + /decl/emote/helper/vwag, + /decl/emote/helper/vflap, + /decl/emote/audible/prbt, + /decl/emote/audible/gyoh, + /decl/emote/audible/rumble, + /decl/emote/audible/coyawoo, + /decl/emote/audible/coyawoo2, + /decl/emote/audible/coyawoo3, + /decl/emote/audible/coyawoo4, + /decl/emote/audible/coyawoo5, + /decl/emote/audible/fennecscream, + /decl/emote/audible/zoom, + /decl/emote/audible/mothscream, + /decl/emote/audible/mothchitter, + /decl/emote/audible/mothlaugh, + /decl/emote/audible/multichirp, + /decl/emote/audible/gnarl, + /decl/emote/audible/teshsqueak, + /decl/emote/audible/teshchirp, + /decl/emote/audible/teshtrill, + /decl/emote/audible/teshscream, + /decl/emote/visible/bounce, + /decl/emote/visible/jiggle, + /decl/emote/visible/lightup, + /decl/emote/visible/vibrate, + /decl/emote/audible/croon, + /decl/emote/audible/lwarble, + /decl/emote/audible/croak_skrell, + /decl/emote/audible/roarbark, + /decl/emote/audible/dook, + //VOREStation Add End + //CHOMP Add start + /decl/emote/audible/prbt2, + /decl/emote/audible/pain, + /decl/emote/audible/mgeow, + /decl/emote/visible/flip/slip, + /decl/emote/audible/xenogrowl, + /decl/emote/audible/xenohiss, + /decl/emote/audible/xenopurr + //CHOMP Add end +) + + //VOREStation Add Start + +var/list/_simple_mob_default_emotes = list( + /decl/emote/visible/blink, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/audible/gasp, + /decl/emote/audible/choke, + /decl/emote/audible/sneeze, + /decl/emote/audible/sniff, + /decl/emote/audible/snore, + /decl/emote/audible/whimper, + /decl/emote/audible/whistle, + /decl/emote/audible/whistle/quiet, + /decl/emote/audible/whistle/wolf, + /decl/emote/audible/whistle/summon, + /decl/emote/audible/yawn, + /decl/emote/audible/clap, + /decl/emote/audible/chuckle, + /decl/emote/audible/cough, + /decl/emote/audible/cry, + /decl/emote/audible/sigh, + /decl/emote/audible/laugh, + /decl/emote/audible/mumble, + /decl/emote/audible/grumble, + /decl/emote/audible/groan, + /decl/emote/audible/moan, + /decl/emote/audible/grunt, + /decl/emote/audible/slap, + /decl/emote/audible/crack, + /decl/emote/human/deathgasp, + /decl/emote/audible/giggle, + /decl/emote/audible/scream, + /decl/emote/visible/airguitar, + /decl/emote/visible/blink_r, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/drool, + /decl/emote/visible/eyebrow, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/twitch_v, + /decl/emote/visible/faint, + /decl/emote/visible/frown, + /decl/emote/visible/blush, + /decl/emote/visible/wave, + /decl/emote/visible/glare, + /decl/emote/visible/stare, + /decl/emote/visible/look, + /decl/emote/visible/point, + /decl/emote/visible/raise, + /decl/emote/visible/grin, + /decl/emote/visible/shrug, + /decl/emote/visible/smile, + /decl/emote/visible/pale, + /decl/emote/visible/tremble, + /decl/emote/visible/wink, + /decl/emote/visible/hug, + /decl/emote/visible/signal, + /decl/emote/visible/afold, + /decl/emote/visible/alook, + /decl/emote/visible/eroll, + /decl/emote/visible/hbow, + /decl/emote/visible/hip, + /decl/emote/visible/holdup, + /decl/emote/visible/hshrug, + /decl/emote/visible/crub, + /decl/emote/visible/erub, + /decl/emote/visible/fslap, + /decl/emote/visible/ftap, + /decl/emote/visible/hrub, + /decl/emote/visible/hspread, + /decl/emote/visible/rsalute, + /decl/emote/visible/rshoulder, + /decl/emote/visible/squint, + /decl/emote/visible/tfist, + /decl/emote/visible/tilt, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/visible/vomit, + /decl/emote/visible/floorspin, + /decl/emote/visible/flip, + /decl/emote/audible/awoo, + /decl/emote/audible/awoo2, + /decl/emote/audible/belch, + /decl/emote/audible/growl, + /decl/emote/audible/woof, + /decl/emote/audible/woof2, + /decl/emote/audible/nya, + /decl/emote/audible/mrowl, + /decl/emote/audible/peep, + /decl/emote/audible/chirp, + /decl/emote/audible/hoot, + /decl/emote/audible/weh, + /decl/emote/audible/merp, + /decl/emote/audible/myarp, + /decl/emote/audible/bark, + /decl/emote/audible/bork, + /decl/emote/audible/mrow, + /decl/emote/audible/hypno, + /decl/emote/audible/hiss, + /decl/emote/audible/rattle, + /decl/emote/audible/squeak, + /decl/emote/audible/geck, + /decl/emote/audible/baa, + /decl/emote/audible/baa2, + /decl/emote/audible/mar, + /decl/emote/audible/wurble, + /decl/emote/audible/snort, + /decl/emote/audible/meow, + /decl/emote/audible/moo, + /decl/emote/audible/croak, + /decl/emote/audible/gao, + /decl/emote/audible/cackle, + /decl/emote/audible/squish, + /decl/emote/audible/spiderchitter, + /decl/emote/audible/spiderpurr, + /decl/emote/audible/squeaky, + /decl/emote/visible/mlem, + /decl/emote/visible/blep, + /decl/emote/audible/prbt, + /decl/emote/audible/gyoh, + /decl/emote/audible/rumble, + /decl/emote/audible/fennecscream, + /decl/emote/audible/zoom, + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, + /decl/emote/audible/dook, + //CHOMP Add start + /decl/emote/audible/prbt2, + /decl/emote/audible/pain, + /decl/emote/audible/mgeow, + /decl/emote/audible/xenogrowl, + /decl/emote/audible/xenohiss, + /decl/emote/audible/xenopurr + //CHOMP Add end + ) + //VOREStation Add End + +/mob/living/carbon/human/get_available_emotes() + . = global._human_default_emotes.Copy() + if(length(species?.default_emotes)) + return . | species.default_emotes + +/mob/living/simple_mob/get_available_emotes() + . = global._simple_mob_default_emotes.Copy() + +/mob/living/carbon/human/verb/pose() + set name = "Set Pose" + set desc = "Sets a description which will be shown when someone examines you." + set category = "IC" + + var/datum/gender/T = gender_datums[get_visible_gender()] + + pose = strip_html_simple(tgui_input_text(usr, "This is [src]. [T.he]...", "Pose", null)) + +/mob/living/carbon/human/verb/set_flavor() + set name = "Set Flavour Text" + set desc = "Sets an extended description of your character's features." + set category = "IC" + + var/HTML = "" + HTML += "
                    " + HTML += "Update Flavour Text
                    " + HTML += "
                    " + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
                    " + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
                    " + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
                    " + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
                    " + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
                    " + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
                    " + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
                    " + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
                    " + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
                    " + HTML += "
                    " + HTML +="\[Done\]" + HTML += "" + src << browse(HTML, "window=flavor_changes;size=430x300") + +/mob/living/carbon/human/proc/toggle_tail(var/setting,var/message = 0) + if(!tail_style || !tail_style.ani_state) + if(message) + to_chat(src, "You don't have a tail that supports this.") + return 0 + + var/new_wagging = isnull(setting) ? !wagging : setting + if(new_wagging != wagging) + wagging = new_wagging + update_tail_showing() + return 1 + +/mob/living/carbon/human/proc/toggle_wing(var/setting,var/message = 0) + if(!wing_style || !wing_style.ani_state) + if(message) + to_chat(src, "You don't have a wingtype that supports this.") + return 0 + + var/new_flapping = isnull(setting) ? !flapping : setting + if(new_flapping != flapping) + flapping = new_flapping + update_wing_showing() + return 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 98ef093643..8b201b88f2 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -1,469 +1,469 @@ -/mob/living/carbon/human/examine(mob/user) - // . = ..() //Note that we don't call parent. We build the list by ourselves. - - var/skip_gear = 0 - var/skip_body = 0 - - if(alpha <= EFFECTIVE_INVIS) - return src.loc.examine(user) // Returns messages as if they examined wherever the human was - - var/looks_synth = looksSynthetic() - - //exosuits and helmets obscure our view and stuff. - if(wear_suit) - if(wear_suit.flags_inv & HIDESUITSTORAGE) - skip_gear |= EXAMINE_SKIPSUITSTORAGE - - if(wear_suit.flags_inv & HIDEJUMPSUIT) - skip_body |= EXAMINE_SKIPARMS | EXAMINE_SKIPLEGS | EXAMINE_SKIPBODY | EXAMINE_SKIPGROIN - skip_gear |= EXAMINE_SKIPJUMPSUIT | EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER - - else if(wear_suit.flags_inv & HIDETIE) - skip_gear |= EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER - - else if(wear_suit.flags_inv & HIDEHOLSTER) - skip_gear |= EXAMINE_SKIPHOLSTER - - if(wear_suit.flags_inv & HIDESHOES) - skip_gear |= EXAMINE_SKIPSHOES - skip_body |= EXAMINE_SKIPFEET - - if(wear_suit.flags_inv & HIDEGLOVES) - skip_gear |= EXAMINE_SKIPGLOVES - skip_body |= EXAMINE_SKIPHANDS - - if(w_uniform) - if(w_uniform.body_parts_covered & LEGS) - skip_body |= EXAMINE_SKIPLEGS - if(w_uniform.body_parts_covered & ARMS) - skip_body |= EXAMINE_SKIPARMS - if(w_uniform.body_parts_covered & UPPER_TORSO) - skip_body |= EXAMINE_SKIPBODY - if(w_uniform.body_parts_covered & LOWER_TORSO) - skip_body |= EXAMINE_SKIPGROIN - - if(gloves && (gloves.body_parts_covered & HANDS)) - skip_body |= EXAMINE_SKIPHANDS - - if(shoes && (shoes.body_parts_covered & FEET)) - skip_body |= EXAMINE_SKIPFEET - - if(head) - if(head.flags_inv & HIDEMASK) - skip_gear |= EXAMINE_SKIPMASK - if(head.flags_inv & HIDEEYES) - skip_gear |= EXAMINE_SKIPEYEWEAR - skip_body |= EXAMINE_SKIPEYES - if(head.flags_inv & HIDEEARS) - skip_gear |= EXAMINE_SKIPEARS - if(head.flags_inv & HIDEFACE) - skip_body |= EXAMINE_SKIPFACE - - if(wear_mask && (wear_mask.flags_inv & HIDEFACE)) - skip_body |= EXAMINE_SKIPFACE - - //This is what hides what - var/list/hidden = list( - BP_GROIN = skip_body & EXAMINE_SKIPGROIN, - BP_TORSO = skip_body & EXAMINE_SKIPBODY, - BP_HEAD = skip_body & EXAMINE_SKIPHEAD, - BP_L_ARM = skip_body & EXAMINE_SKIPARMS, - BP_R_ARM = skip_body & EXAMINE_SKIPARMS, - BP_L_HAND= skip_body & EXAMINE_SKIPHANDS, - BP_R_HAND= skip_body & EXAMINE_SKIPHANDS, - BP_L_FOOT= skip_body & EXAMINE_SKIPFEET, - BP_R_FOOT= skip_body & EXAMINE_SKIPFEET, - BP_L_LEG = skip_body & EXAMINE_SKIPLEGS, - BP_R_LEG = skip_body & EXAMINE_SKIPLEGS) - - - var/gender_hidden = (skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE) - var/gender_key = get_visible_gender(user, gender_hidden) - var/datum/gender/T = gender_datums[gender_key] - if (!T) - CRASH({"Null gender datum on examine: mob="[src]",hidden="[gender_hidden]",key="[gender_key]",bio="[gender]",id="[identifying_gender]""}) - - var/name_ender = "" - if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE))) - //VOREStation Add Start - if(custom_species) - name_ender = ", a [src.custom_species]" - else if(looks_synth) - //VOREStation Add End - var/use_gender = "a synthetic" - if(gender == MALE) - use_gender = "an android" - else if(gender == FEMALE) - use_gender = "a gynoid" - - name_ender = ", [use_gender]![species.get_additional_examine_text(src)]" - - else if(species.name != "Human") - name_ender = ", \a [species.get_examine_name()]![species.get_additional_examine_text(src)]" - - var/list/msg = list("*---------*","This is \icon[src.examine_icon()][bicon(src)] [src.name][name_ender]") - - //uniform - if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) - //Ties - var/tie_msg - var/tie_msg_warn - if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE)) - var/obj/item/clothing/under/U = w_uniform - if(LAZYLEN(U.accessories)) - tie_msg += ". Attached to it is" - tie_msg_warn += "! Attached to it is" - var/list/accessory_descs = list() - if(skip_gear & EXAMINE_SKIPHOLSTER) - for(var/obj/item/clothing/accessory/A in U.accessories) - if(A.show_examine && !istype(A, /obj/item/clothing/accessory/holster)) // If we're supposed to skip holsters, actually skip them - accessory_descs += "\a [A]" - else - for(var/obj/item/clothing/accessory/A in U.accessories) - if(A.concealed_holster == 0 && A.show_examine) - accessory_descs += "\a [A]" - - tie_msg += " [lowertext(english_list(accessory_descs))]." - if(w_uniform.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" - else - msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]" - - //head - if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine) - if(head.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [T.his] head!" - else - msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head." - - //suit/armour - if(wear_suit) - var/tie_msg - var/tie_msg_warn - if(istype(wear_suit,/obj/item/clothing/suit)) - var/obj/item/clothing/suit/U = wear_suit - if(LAZYLEN(U.accessories)) - tie_msg += ". Attached to it is" - tie_msg_warn += "! Attached to it is" - var/list/accessory_descs = list() - for(var/accessory in U.accessories) - accessory_descs += "\a [accessory]" - tie_msg += " [lowertext(english_list(accessory_descs))]." - - if(wear_suit.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]![tie_msg]" - else - msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] \a [wear_suit].[tie_msg]" - - //suit/armour storage - if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine) - if(s_store.blood_DNA) - msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" - else - msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." - - //back - if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine) - if(back.blood_DNA) - msg += "[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [T.his] back." - else - msg += "[T.He] [T.has] \icon[back][bicon(back)] \a [back] on [T.his] back." - - //left hand - if(l_hand && l_hand.show_examine) - if(l_hand.blood_DNA) - msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" - else - msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] \a [l_hand] in [T.his] left hand." - - //right hand - if(r_hand && r_hand.show_examine) - if(r_hand.blood_DNA) - msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" - else - msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] \a [r_hand] in [T.his] right hand." - - //gloves - if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine) - if(gloves.blood_DNA) - msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" - else - msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] \a [gloves] on [T.his] hands." - else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) - msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!" - - //handcuffed? - if(handcuffed && handcuffed.show_examine) - if(istype(handcuffed, /obj/item/weapon/handcuffs/cable)) - msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] restrained with cable!" - else - msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] handcuffed!" - - //buckled - if(buckled) - msg += "[T.He] [T.is] \icon[buckled][bicon(buckled)] buckled to [buckled]!" - - //belt - if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine) - if(belt.blood_DNA) - msg += "[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" - else - msg += "[T.He] [T.has] \icon[belt][bicon(belt)] \a [belt] about [T.his] waist." - - //shoes - if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine) - if(shoes.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" - else - msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] \a [shoes] on [T.his] feet." - else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) - msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!" - - //mask - if(wear_mask && !(skip_gear & EXAMINE_SKIPMASK) && wear_mask.show_examine) - var/descriptor = "on [T.his] face" - if(istype(wear_mask, /obj/item/weapon/grenade) && check_has_mouth()) - descriptor = "in [T.his] mouth" - - if(wear_mask.blood_DNA) - msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" - else - msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] \a [wear_mask] [descriptor]." - - //eyes - if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine) - if(glasses.blood_DNA) - msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" - else - msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] \a [glasses] covering [T.his] eyes." - - //left ear - if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine) - msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] \a [l_ear] on [T.his] left ear." - - //right ear - if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine) - msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] \a [r_ear] on [T.his] right ear." - - //ID - if(wear_id && wear_id.show_examine) - msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)]\a [wear_id]." - - //Jitters - if(is_jittery) - if(jitteriness >= 300) - msg += "[T.He] [T.is] convulsing violently!" - else if(jitteriness >= 200) - msg += "[T.He] [T.is] extremely jittery." - else if(jitteriness >= 100) - msg += "[T.He] [T.is] twitching ever so slightly." - - //splints - for(var/organ in BP_ALL) - var/obj/item/organ/external/o = get_organ(organ) - if(o && o.splinted && o.splinted.loc == o) - msg += "[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!" - - if(suiciding) - msg += "[T.He] appears to have commited suicide... there is no hope of recovery." - - //VOREStation Add - var/list/vorestrings = list() - vorestrings += examine_weight() - vorestrings += examine_nutrition() - vorestrings += examine_reagent_bellies() //CHOMP reagent bellies - vorestrings += examine_bellies() - vorestrings += examine_pickup_size() - vorestrings += examine_step_size() - vorestrings += examine_nif() - vorestrings += examine_chimera() - for(var/entry in vorestrings) - if(entry == "" || entry == null) - vorestrings -= entry - msg += vorestrings - //VOREStation Add End - - if(mSmallsize in mutations) - msg += "[T.He] [T.is] very short!" - - if (src.stat) - msg += "[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep." - if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3) - msg += "[T.He] [T.does] not appear to be breathing." - if(istype(user, /mob/living/carbon/human) && !user.stat && Adjacent(user)) - user.visible_message("[usr] checks [src]'s pulse.", "You check [src]'s pulse.") - spawn(15) - if(isobserver(user) || (Adjacent(user) && !user.stat)) // If you're a corpse then you can't exactly check their pulse, but ghosts can see anything - if(pulse == PULSE_NONE) - to_chat(user, "[T.He] [T.has] no pulse[src.client ? "" : " and [T.his] soul has departed"]...") - else - to_chat(user, "[T.He] [T.has] a pulse!") - - if(fire_stacks) - msg += "[T.He] [T.is] covered in some liquid." - if(on_fire) - msg += "[T.He] [T.is] on fire!." - - var/ssd_msg = species.get_ssd(src) - if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD) - if(!key) - msg += "[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon." - else if(!client) - msg += "[T.He] [T.is] [ssd_msg]." - //VOREStation Add Start - if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes - msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]" - else if(disconnect_time) - msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]" - //VOREStation Add End - - var/list/wound_flavor_text = list() - var/list/is_bleeding = list() - var/applying_pressure = "" - - for(var/organ_tag in species.has_limbs) - - var/list/organ_data = species.has_limbs[organ_tag] - var/organ_descriptor = organ_data["descriptor"] - - var/obj/item/organ/external/E = organs_by_name[organ_tag] - if(!E) - wound_flavor_text["[organ_descriptor]"] = "[T.He] [T.is] missing [T.his] [organ_descriptor]." - else if(E.is_stump()) - wound_flavor_text["[organ_descriptor]"] = "[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be." - else - continue - - for(var/obj/item/organ/external/temp in organs) - if(temp) - if((temp.organ_tag in hidden) && hidden[temp.organ_tag]) - continue //Organ is hidden, don't talk about it - if(temp.status & ORGAN_DESTROYED) - wound_flavor_text["[temp.name]"] = "[T.He] [T.is] missing [T.his] [temp.name]." - continue - - if(!looks_synth && temp.robotic == ORGAN_ROBOT) - if(!(temp.brute_dam + temp.burn_dam)) - wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name]." - else - wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!" - continue - else if(temp.wounds.len > 0 || temp.open) - if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ]) - var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ] - wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [parent.name]." - else - wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name]." - else - wound_flavor_text["[temp.name]"] = "" - if(temp.dislocated == 1) //VOREStation Edit Bugfix - wound_flavor_text["[temp.name]"] += "[T.His] [temp.joint] is dislocated!" - if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED))) - wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] is dented and swollen!" - - if(temp.germ_level > INFECTION_LEVEL_TWO && !(temp.status & ORGAN_DEAD)) - wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] looks very infected!" - else if(temp.status & ORGAN_DEAD) - wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] looks rotten!" - - if(temp.status & ORGAN_BLEEDING) - is_bleeding["[temp.name]"] += "[T.His] [temp.name] is bleeding!" - - if(temp.applied_pressure == src) - applying_pressure = "[T.He] is applying pressure to [T.his] [temp.name]." - - for(var/limb in wound_flavor_text) - var/flavor = wound_flavor_text[limb] - if(flavor) - msg += flavor - for(var/limb in is_bleeding) - var/blood = is_bleeding[limb] - if(blood) - msg += blood - for(var/implant in get_visible_implants(0)) - msg += "[src] [T.has] \a [implant] sticking out of [T.his] flesh!" - if(digitalcamo) - msg += "[T.He] [T.is] repulsively uncanny!" - - if(hasHUD(user,"security")) - var/perpname = name - var/criminal = "None" - - if(wear_id) - if(istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/I = wear_id - perpname = I.registered_name - else if(istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/P = wear_id - perpname = P.owner - - for (var/datum/data/record/R in data_core.security) - if(R.fields["name"] == perpname) - criminal = R.fields["criminal"] - - msg += "Criminal status: \[[criminal]\]" - msg += "Security records: \[View\] \[Add comment\]" - - if(hasHUD(user,"medical")) - var/perpname = name - var/medical = "None" - - if(wear_id) - if(istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/I = wear_id - perpname = I.registered_name - else if(istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/P = wear_id - perpname = P.owner - - for (var/datum/data/record/R in data_core.medical) - if (R.fields["name"] == perpname) - medical = R.fields["p_stat"] - - msg += "Physical status: \[[medical]\]" - msg += "Medical records: \[View\] \[Add comment\]" - - if(hasHUD(user,"best")) - msg += "Employment records: \[View\] \[Add comment\]" - - - var/flavor_text = print_flavor_text() - if(flavor_text) - msg += "[flavor_text]" - - // VOREStation Start - if(custom_link) - msg += "Custom link: [custom_link]" - - if(ooc_notes) - msg += "OOC Notes: \[View\] - \[Print\]" - msg += "\[Mechanical Vore Preferences\]" - // VOREStation End - msg += "*---------*" - if(applying_pressure) - msg += applying_pressure - - var/show_descs = show_descriptors_to(user) - if(show_descs) - msg += "[jointext(show_descs, "
                    ")]
                    " - - if(pose) - if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] - pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "
                    [T.He] [pose]" //
                    intentional, extra gap. - - return msg - -//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. -/proc/hasHUD(mob/M as mob, hudtype) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(hasHUD_vr(H,hudtype)) return 1 //VOREStation Add - Added records access for certain modes of omni-hud glasses - switch(hudtype) - if("security") - return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud) - if("medical") - return istype(H.glasses, /obj/item/clothing/glasses/hud/health) - else if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = M - return R.sensor_type //VOREStation Add - Borgo sensors are now binary so just have them on or off +/mob/living/carbon/human/examine(mob/user) + // . = ..() //Note that we don't call parent. We build the list by ourselves. + + var/skip_gear = 0 + var/skip_body = 0 + + if(alpha <= EFFECTIVE_INVIS) + return src.loc.examine(user) // Returns messages as if they examined wherever the human was + + var/looks_synth = looksSynthetic() + + //exosuits and helmets obscure our view and stuff. + if(wear_suit) + if(wear_suit.flags_inv & HIDESUITSTORAGE) + skip_gear |= EXAMINE_SKIPSUITSTORAGE + + if(wear_suit.flags_inv & HIDEJUMPSUIT) + skip_body |= EXAMINE_SKIPARMS | EXAMINE_SKIPLEGS | EXAMINE_SKIPBODY | EXAMINE_SKIPGROIN + skip_gear |= EXAMINE_SKIPJUMPSUIT | EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER + + else if(wear_suit.flags_inv & HIDETIE) + skip_gear |= EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER + + else if(wear_suit.flags_inv & HIDEHOLSTER) + skip_gear |= EXAMINE_SKIPHOLSTER + + if(wear_suit.flags_inv & HIDESHOES) + skip_gear |= EXAMINE_SKIPSHOES + skip_body |= EXAMINE_SKIPFEET + + if(wear_suit.flags_inv & HIDEGLOVES) + skip_gear |= EXAMINE_SKIPGLOVES + skip_body |= EXAMINE_SKIPHANDS + + if(w_uniform) + if(w_uniform.body_parts_covered & LEGS) + skip_body |= EXAMINE_SKIPLEGS + if(w_uniform.body_parts_covered & ARMS) + skip_body |= EXAMINE_SKIPARMS + if(w_uniform.body_parts_covered & UPPER_TORSO) + skip_body |= EXAMINE_SKIPBODY + if(w_uniform.body_parts_covered & LOWER_TORSO) + skip_body |= EXAMINE_SKIPGROIN + + if(gloves && (gloves.body_parts_covered & HANDS)) + skip_body |= EXAMINE_SKIPHANDS + + if(shoes && (shoes.body_parts_covered & FEET)) + skip_body |= EXAMINE_SKIPFEET + + if(head) + if(head.flags_inv & HIDEMASK) + skip_gear |= EXAMINE_SKIPMASK + if(head.flags_inv & HIDEEYES) + skip_gear |= EXAMINE_SKIPEYEWEAR + skip_body |= EXAMINE_SKIPEYES + if(head.flags_inv & HIDEEARS) + skip_gear |= EXAMINE_SKIPEARS + if(head.flags_inv & HIDEFACE) + skip_body |= EXAMINE_SKIPFACE + + if(wear_mask && (wear_mask.flags_inv & HIDEFACE)) + skip_body |= EXAMINE_SKIPFACE + + //This is what hides what + var/list/hidden = list( + BP_GROIN = skip_body & EXAMINE_SKIPGROIN, + BP_TORSO = skip_body & EXAMINE_SKIPBODY, + BP_HEAD = skip_body & EXAMINE_SKIPHEAD, + BP_L_ARM = skip_body & EXAMINE_SKIPARMS, + BP_R_ARM = skip_body & EXAMINE_SKIPARMS, + BP_L_HAND= skip_body & EXAMINE_SKIPHANDS, + BP_R_HAND= skip_body & EXAMINE_SKIPHANDS, + BP_L_FOOT= skip_body & EXAMINE_SKIPFEET, + BP_R_FOOT= skip_body & EXAMINE_SKIPFEET, + BP_L_LEG = skip_body & EXAMINE_SKIPLEGS, + BP_R_LEG = skip_body & EXAMINE_SKIPLEGS) + + + var/gender_hidden = (skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE) + var/gender_key = get_visible_gender(user, gender_hidden) + var/datum/gender/T = gender_datums[gender_key] + if (!T) + CRASH({"Null gender datum on examine: mob="[src]",hidden="[gender_hidden]",key="[gender_key]",bio="[gender]",id="[identifying_gender]""}) + + var/name_ender = "" + if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE))) + //VOREStation Add Start + if(custom_species) + name_ender = ", a [src.custom_species]" + else if(looks_synth) + //VOREStation Add End + var/use_gender = "a synthetic" + if(gender == MALE) + use_gender = "an android" + else if(gender == FEMALE) + use_gender = "a gynoid" + + name_ender = ", [use_gender]![species.get_additional_examine_text(src)]" + + else if(species.name != "Human") + name_ender = ", \a [species.get_examine_name()]![species.get_additional_examine_text(src)]" + + var/list/msg = list("*---------*","This is \icon[src.examine_icon()][bicon(src)] [src.name][name_ender]") + + //uniform + if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) + //Ties + var/tie_msg + var/tie_msg_warn + if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE)) + var/obj/item/clothing/under/U = w_uniform + if(LAZYLEN(U.accessories)) + tie_msg += ". Attached to it is" + tie_msg_warn += "! Attached to it is" + var/list/accessory_descs = list() + if(skip_gear & EXAMINE_SKIPHOLSTER) + for(var/obj/item/clothing/accessory/A in U.accessories) + if(A.show_examine && !istype(A, /obj/item/clothing/accessory/holster)) // If we're supposed to skip holsters, actually skip them + accessory_descs += "\a [A]" + else + for(var/obj/item/clothing/accessory/A in U.accessories) + if(A.concealed_holster == 0 && A.show_examine) + accessory_descs += "\a [A]" + + tie_msg += " [lowertext(english_list(accessory_descs))]." + if(w_uniform.blood_DNA) + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" + else + msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]" + + //head + if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine) + if(head.blood_DNA) + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [T.his] head!" + else + msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head." + + //suit/armour + if(wear_suit) + var/tie_msg + var/tie_msg_warn + if(istype(wear_suit,/obj/item/clothing/suit)) + var/obj/item/clothing/suit/U = wear_suit + if(LAZYLEN(U.accessories)) + tie_msg += ". Attached to it is" + tie_msg_warn += "! Attached to it is" + var/list/accessory_descs = list() + for(var/accessory in U.accessories) + accessory_descs += "\a [accessory]" + tie_msg += " [lowertext(english_list(accessory_descs))]." + + if(wear_suit.blood_DNA) + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]![tie_msg]" + else + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] \a [wear_suit].[tie_msg]" + + //suit/armour storage + if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine) + if(s_store.blood_DNA) + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" + else + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." + + //back + if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine) + if(back.blood_DNA) + msg += "[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [T.his] back." + else + msg += "[T.He] [T.has] \icon[back][bicon(back)] \a [back] on [T.his] back." + + //left hand + if(l_hand && l_hand.show_examine) + if(l_hand.blood_DNA) + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" + else + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] \a [l_hand] in [T.his] left hand." + + //right hand + if(r_hand && r_hand.show_examine) + if(r_hand.blood_DNA) + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" + else + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] \a [r_hand] in [T.his] right hand." + + //gloves + if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine) + if(gloves.blood_DNA) + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" + else + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] \a [gloves] on [T.his] hands." + else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) + msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!" + + //handcuffed? + if(handcuffed && handcuffed.show_examine) + if(istype(handcuffed, /obj/item/weapon/handcuffs/cable)) + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] restrained with cable!" + else + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] handcuffed!" + + //buckled + if(buckled) + msg += "[T.He] [T.is] \icon[buckled][bicon(buckled)] buckled to [buckled]!" + + //belt + if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine) + if(belt.blood_DNA) + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" + else + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] \a [belt] about [T.his] waist." + + //shoes + if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine) + if(shoes.blood_DNA) + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" + else + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] \a [shoes] on [T.his] feet." + else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) + msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!" + + //mask + if(wear_mask && !(skip_gear & EXAMINE_SKIPMASK) && wear_mask.show_examine) + var/descriptor = "on [T.his] face" + if(istype(wear_mask, /obj/item/weapon/grenade) && check_has_mouth()) + descriptor = "in [T.his] mouth" + + if(wear_mask.blood_DNA) + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" + else + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] \a [wear_mask] [descriptor]." + + //eyes + if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine) + if(glasses.blood_DNA) + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" + else + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] \a [glasses] covering [T.his] eyes." + + //left ear + if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine) + msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] \a [l_ear] on [T.his] left ear." + + //right ear + if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine) + msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] \a [r_ear] on [T.his] right ear." + + //ID + if(wear_id && wear_id.show_examine) + msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)]\a [wear_id]." + + //Jitters + if(is_jittery) + if(jitteriness >= 300) + msg += "[T.He] [T.is] convulsing violently!" + else if(jitteriness >= 200) + msg += "[T.He] [T.is] extremely jittery." + else if(jitteriness >= 100) + msg += "[T.He] [T.is] twitching ever so slightly." + + //splints + for(var/organ in BP_ALL) + var/obj/item/organ/external/o = get_organ(organ) + if(o && o.splinted && o.splinted.loc == o) + msg += "[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!" + + if(suiciding) + msg += "[T.He] appears to have commited suicide... there is no hope of recovery." + + //VOREStation Add + var/list/vorestrings = list() + vorestrings += examine_weight() + vorestrings += examine_nutrition() + vorestrings += examine_reagent_bellies() //CHOMP reagent bellies + vorestrings += examine_bellies() + vorestrings += examine_pickup_size() + vorestrings += examine_step_size() + vorestrings += examine_nif() + vorestrings += examine_chimera() + for(var/entry in vorestrings) + if(entry == "" || entry == null) + vorestrings -= entry + msg += vorestrings + //VOREStation Add End + + if(mSmallsize in mutations) + msg += "[T.He] [T.is] very short!" + + if (src.stat) + msg += "[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep." + if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3) + msg += "[T.He] [T.does] not appear to be breathing." + if(istype(user, /mob/living/carbon/human) && !user.stat && Adjacent(user)) + user.visible_message("[usr] checks [src]'s pulse.", "You check [src]'s pulse.") + spawn(15) + if(isobserver(user) || (Adjacent(user) && !user.stat)) // If you're a corpse then you can't exactly check their pulse, but ghosts can see anything + if(pulse == PULSE_NONE) + to_chat(user, "[T.He] [T.has] no pulse[src.client ? "" : " and [T.his] soul has departed"]...") + else + to_chat(user, "[T.He] [T.has] a pulse!") + + if(fire_stacks) + msg += "[T.He] [T.is] covered in some liquid." + if(on_fire) + msg += "[T.He] [T.is] on fire!." + + var/ssd_msg = species.get_ssd(src) + if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD) + if(!key) + msg += "[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon." + else if(!client) + msg += "[T.He] [T.is] [ssd_msg]." + //VOREStation Add Start + if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes + msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]" + else if(disconnect_time) + msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]" + //VOREStation Add End + + var/list/wound_flavor_text = list() + var/list/is_bleeding = list() + var/applying_pressure = "" + + for(var/organ_tag in species.has_limbs) + + var/list/organ_data = species.has_limbs[organ_tag] + var/organ_descriptor = organ_data["descriptor"] + + var/obj/item/organ/external/E = organs_by_name[organ_tag] + if(!E) + wound_flavor_text["[organ_descriptor]"] = "[T.He] [T.is] missing [T.his] [organ_descriptor]." + else if(E.is_stump()) + wound_flavor_text["[organ_descriptor]"] = "[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be." + else + continue + + for(var/obj/item/organ/external/temp in organs) + if(temp) + if((temp.organ_tag in hidden) && hidden[temp.organ_tag]) + continue //Organ is hidden, don't talk about it + if(temp.status & ORGAN_DESTROYED) + wound_flavor_text["[temp.name]"] = "[T.He] [T.is] missing [T.his] [temp.name]." + continue + + if(!looks_synth && temp.robotic == ORGAN_ROBOT) + if(!(temp.brute_dam + temp.burn_dam)) + wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name]." + else + wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!" + continue + else if(temp.wounds.len > 0 || temp.open) + if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ]) + var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ] + wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [parent.name]." + else + wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name]." + else + wound_flavor_text["[temp.name]"] = "" + if(temp.dislocated == 1) //VOREStation Edit Bugfix + wound_flavor_text["[temp.name]"] += "[T.His] [temp.joint] is dislocated!" + if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED))) + wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] is dented and swollen!" + + if(temp.germ_level > INFECTION_LEVEL_TWO && !(temp.status & ORGAN_DEAD)) + wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] looks very infected!" + else if(temp.status & ORGAN_DEAD) + wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] looks rotten!" + + if(temp.status & ORGAN_BLEEDING) + is_bleeding["[temp.name]"] += "[T.His] [temp.name] is bleeding!" + + if(temp.applied_pressure == src) + applying_pressure = "[T.He] is applying pressure to [T.his] [temp.name]." + + for(var/limb in wound_flavor_text) + var/flavor = wound_flavor_text[limb] + if(flavor) + msg += flavor + for(var/limb in is_bleeding) + var/blood = is_bleeding[limb] + if(blood) + msg += blood + for(var/implant in get_visible_implants(0)) + msg += "[src] [T.has] \a [implant] sticking out of [T.his] flesh!" + if(digitalcamo) + msg += "[T.He] [T.is] repulsively uncanny!" + + if(hasHUD(user,"security")) + var/perpname = name + var/criminal = "None" + + if(wear_id) + if(istype(wear_id, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/I = wear_id + perpname = I.registered_name + else if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/P = wear_id + perpname = P.owner + + for (var/datum/data/record/R in data_core.security) + if(R.fields["name"] == perpname) + criminal = R.fields["criminal"] + + msg += "Criminal status: \[[criminal]\]" + msg += "Security records: \[View\] \[Add comment\]" + + if(hasHUD(user,"medical")) + var/perpname = name + var/medical = "None" + + if(wear_id) + if(istype(wear_id, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/I = wear_id + perpname = I.registered_name + else if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/P = wear_id + perpname = P.owner + + for (var/datum/data/record/R in data_core.medical) + if (R.fields["name"] == perpname) + medical = R.fields["p_stat"] + + msg += "Physical status: \[[medical]\]" + msg += "Medical records: \[View\] \[Add comment\]" + + if(hasHUD(user,"best")) + msg += "Employment records: \[View\] \[Add comment\]" + + + var/flavor_text = print_flavor_text() + if(flavor_text) + msg += "[flavor_text]" + + // VOREStation Start + if(custom_link) + msg += "Custom link: [custom_link]" + + if(ooc_notes) + msg += "OOC Notes: \[View\] - \[Print\]" + msg += "\[Mechanical Vore Preferences\]" + // VOREStation End + msg += "*---------*" + if(applying_pressure) + msg += applying_pressure + + var/show_descs = show_descriptors_to(user) + if(show_descs) + msg += "[jointext(show_descs, "
                    ")]
                    " + + if(pose) + if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] + pose = addtext(pose,".") //Makes sure all emotes end with a period. + msg += "
                    [T.He] [pose]" //
                    intentional, extra gap. + + return msg + +//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. +/proc/hasHUD(mob/M as mob, hudtype) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(hasHUD_vr(H,hudtype)) return 1 //VOREStation Add - Added records access for certain modes of omni-hud glasses + switch(hudtype) + if("security") + return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud) + if("medical") + return istype(H.glasses, /obj/item/clothing/glasses/hud/health) + else if(istype(M, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = M + return R.sensor_type //VOREStation Add - Borgo sensors are now binary so just have them on or off diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 15f767e434..75dc9b5738 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -1,657 +1,657 @@ -//Updates the mob's health from organs and mob damage variables -/mob/living/carbon/human/updatehealth() - var/huskmodifier = 2.5 //VOREStation Edit // With 1.5, you need 250 burn instead of 200 to husk a human. - - if(status_flags & GODMODE) - health = getMaxHealth() - set_stat(CONSCIOUS) - return - - var/total_burn = 0 - var/total_brute = 0 - for(var/obj/item/organ/external/O in organs) //hardcoded to streamline things a bit - if((O.robotic >= ORGAN_ROBOT) && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes - continue //*non-vital* robot limbs don't count towards shock and crit - total_brute += O.brute_dam - total_burn += O.burn_dam - - // CHOMPEdit Start: Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does. - var/initialhealth = health // CHOMPEdit: Getting our health before this check - health = getMaxHealth() - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute - if(can_feel_pain() || ((isSynthetic() && synth_cosmetic_pain))) // Are we capable of feeling pain? - if(health < initialhealth) // Did we lose health? - // Yes. How much by? - var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc) - var/pain_noise = (damage * species.pain_mod) // Multiply the incoming damage by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc. - switch(damage) - if(-INFINITY to 0) - //TODO: fix husking - if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD) - ChangeToHusk() - return - if(1 to 25) - if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies. - emote("pain") - if(26 to 50) - if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies. - emote("pain") - if(51 to INFINITY) - if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies. - emote("pain") - // CHOMPEdit End: Pain - - //TODO: fix husking - if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD) - ChangeToHusk() - return - -/mob/living/carbon/human/adjustBrainLoss(var/amount) - - if(status_flags & GODMODE) return 0 //godmode - - if(should_have_organ("brain")) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] - if(sponge) - sponge.take_damage(amount) - brainloss = sponge.damage - else - brainloss = 200 - else - brainloss = 0 - -/mob/living/carbon/human/setBrainLoss(var/amount) - - if(status_flags & GODMODE) return 0 //godmode - - if(should_have_organ("brain")) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] - if(sponge) - sponge.damage = min(max(amount, 0),(getMaxHealth()*2)) - brainloss = sponge.damage - else - brainloss = 200 - else - brainloss = 0 - -/mob/living/carbon/human/getBrainLoss() - - if(status_flags & GODMODE) return 0 //godmode - - if(should_have_organ("brain")) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] - if(sponge) - brainloss = min(sponge.damage,getMaxHealth()*2) - else - brainloss = 200 - else - brainloss = 0 - return brainloss - -//These procs fetch a cumulative total damage from all organs -/mob/living/carbon/human/getBruteLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(O.robotic >= ORGAN_ROBOT && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes - continue //*non-vital*robot limbs don't count towards death, or show up when scanned - amount += O.brute_dam - return amount - -/mob/living/carbon/human/getShockBruteLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(O.robotic >= ORGAN_ROBOT) - continue //robot limbs don't count towards shock and crit - amount += O.brute_dam - return amount - -/mob/living/carbon/human/getActualBruteLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) // Unlike the above, robolimbs DO count. - amount += O.brute_dam - return amount - -/mob/living/carbon/human/getFireLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(O.robotic >= ORGAN_ROBOT && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes - continue //*non-vital*robot limbs don't count towards death, or show up when scanned - amount += O.burn_dam - return amount - -/mob/living/carbon/human/getShockFireLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(O.robotic >= ORGAN_ROBOT) - continue //robot limbs don't count towards shock and crit - amount += O.burn_dam - return amount - -/mob/living/carbon/human/getActualFireLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) // Unlike the above, robolimbs DO count. - amount += O.burn_dam - return amount - -//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs -/mob/living/carbon/human/adjustBruteLoss(var/amount,var/include_robo) - amount = amount*species.brute_mod - if(amount > 0) - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_damage_percent - if(!isnull(M.incoming_brute_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_brute_damage_percent - if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(amount, 0) - else - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_healing_percent)) - amount *= M.incoming_healing_percent - heal_overall_damage(-amount, 0, include_robo) - BITSET(hud_updateflag, HEALTH_HUD) - -//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs -/mob/living/carbon/human/adjustFireLoss(var/amount,var/include_robo) - amount = amount*species.burn_mod - if(amount > 0) - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_damage_percent - if(!isnull(M.incoming_fire_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_fire_damage_percent - if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(0, amount) - else - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_healing_percent)) - amount *= M.incoming_healing_percent - heal_overall_damage(0, -amount, include_robo) - BITSET(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) - amount = amount*species.brute_mod - if (organ_name in organs_by_name) - var/obj/item/organ/external/O = get_organ(organ_name) - - if(amount > 0) - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_damage_percent - if(!isnull(M.incoming_brute_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_brute_damage_percent - if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) - else - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_healing_percent)) - amount *= M.incoming_healing_percent - //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. - O.heal_damage(-amount, 0, internal=0, robo_repair=(O.robotic >= ORGAN_ROBOT)) - - BITSET(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) - amount = amount*species.burn_mod - if (organ_name in organs_by_name) - var/obj/item/organ/external/O = get_organ(organ_name) - - if(amount > 0) - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_damage_percent - if(!isnull(M.incoming_fire_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*amount) - amount *= M.incoming_fire_damage_percent - if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) - else - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_healing_percent)) - amount *= M.incoming_healing_percent - //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. - O.heal_damage(0, -amount, internal=0, robo_repair=(O.robotic >= ORGAN_ROBOT)) - - BITSET(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/Stun(amount) - if(HULK in mutations) return - ..() - -/mob/living/carbon/human/Weaken(amount) - if(HULK in mutations) return - ..() - -/mob/living/carbon/human/Paralyse(amount) - if(HULK in mutations) return - // Notify our AI if they can now control the suit. - if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second. - wearing_rig.notify_ai("Warning: user consciousness failure. Mobility control passed to integrated intelligence system.") - ..() - -/mob/living/carbon/human/proc/Stasis(amount) - if((species.flags & NO_SCAN) || isSynthetic()) - in_stasis = 0 - else - in_stasis = amount - -/mob/living/carbon/human/proc/getStasis() - if((species.flags & NO_SCAN) || isSynthetic()) - return 0 - - return in_stasis - -//This determines if, RIGHT NOW, the life() tick is being skipped due to stasis -/mob/living/carbon/human/proc/inStasisNow() - var/stasisValue = getStasis() - if(stasisValue && (life_tick % stasisValue)) - return 1 - - return 0 - -/mob/living/carbon/human/getCloneLoss() - if((species.flags & NO_SCAN) || isSynthetic()) - cloneloss = 0 - return ..() - -/mob/living/carbon/human/setCloneLoss(var/amount) - if((species.flags & NO_SCAN) || isSynthetic()) - cloneloss = 0 - else - ..() - -/mob/living/carbon/human/adjustCloneLoss(var/amount) - ..() - - if((species.flags & NO_SCAN) || isSynthetic()) - cloneloss = 0 - return - - var/heal_prob = max(0, 80 - getCloneLoss()) - var/mut_prob = min(80, getCloneLoss()+10) - if (amount > 0) - if (prob(mut_prob)) - var/list/obj/item/organ/external/candidates = list() - for (var/obj/item/organ/external/O in organs) - if(!(O.status & ORGAN_MUTATED)) - candidates |= O - if (candidates.len) - var/obj/item/organ/external/O = pick(candidates) - O.mutate() - to_chat(src, "Something is not right with your [O.name]...") - return - else - if (prob(heal_prob)) - for (var/obj/item/organ/external/O in organs) - if (O.status & ORGAN_MUTATED) - O.unmutate() - to_chat(src, "Your [O.name] is shaped normally again.") - return - - if (getCloneLoss() < 1) - for (var/obj/item/organ/external/O in organs) - if (O.status & ORGAN_MUTATED) - O.unmutate() - to_chat(src, "Your [O.name] is shaped normally again.") - BITSET(hud_updateflag, HEALTH_HUD) - -// Defined here solely to take species flags into account without having to recast at mob/living level. -/mob/living/carbon/human/getOxyLoss() - if(!should_have_organ(O_LUNGS)) - oxyloss = 0 - return ..() - -/mob/living/carbon/human/adjustOxyLoss(var/amount) - if(!should_have_organ(O_LUNGS)) - oxyloss = 0 - else - amount = amount*species.oxy_mod - ..(amount) - -/mob/living/carbon/human/setOxyLoss(var/amount) - if(!should_have_organ(O_LUNGS)) - oxyloss = 0 - else - ..() - -/mob/living/carbon/human/adjustHalLoss(var/amount) - if(species.flags & NO_PAIN) - halloss = 0 - else - if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! - amount = amount*species.pain_mod - ..(amount) - -/mob/living/carbon/human/setHalLoss(var/amount) - if(species.flags & NO_PAIN) - halloss = 0 - else - ..() - -/mob/living/carbon/human/Stun(var/amount) - if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! - amount = amount*species.stun_mod - ..(amount) - -/mob/living/carbon/human/SetStunned(var/amount) - ..() - -/mob/living/carbon/human/AdjustStunned(var/amount) - if(amount > 0) // Only multiply it if positive. - amount = amount*species.stun_mod - ..(amount) - -/mob/living/carbon/human/Weaken(var/amount) - if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! - amount = amount*species.weaken_mod - ..(amount) - -/mob/living/carbon/human/SetWeakened(var/amount) - ..() - -/mob/living/carbon/human/AdjustWeakened(var/amount) - if(amount > 0) // Only multiply it if positive. - amount = amount*species.weaken_mod - ..(amount) - -/mob/living/carbon/human/getToxLoss() - if(species.flags & NO_POISON) - toxloss = 0 - return ..() - -/mob/living/carbon/human/adjustToxLoss(var/amount) - if(species.flags & NO_POISON) - toxloss = 0 - else - amount = amount*species.toxins_mod - ..(amount) - -/mob/living/carbon/human/setToxLoss(var/amount) - if(species.flags & NO_POISON) - toxloss = 0 - else - ..() - -//////////////////////////////////////////// - -//Returns a list of damaged organs -/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn) - var/list/obj/item/organ/external/parts = list() - for(var/obj/item/organ/external/O in organs) - if((brute && O.brute_dam) || (burn && O.burn_dam)) - parts += O - return parts - -//Returns a list of damageable organs -/mob/living/carbon/human/proc/get_damageable_organs() - var/list/obj/item/organ/external/parts = list() - for(var/obj/item/organ/external/O in organs) - if(O.is_damageable()) - parts += O - return parts - -//Heals ONE external organ, organ gets randomly selected from damaged ones. -//It automatically updates damage overlays if necesary -//It automatically updates health status -/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn) - var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - if(!parts.len) return - var/obj/item/organ/external/picked = pick(parts) - if(picked.heal_damage(brute,burn)) - UpdateDamageIcon() - BITSET(hud_updateflag, HEALTH_HUD) - updatehealth() - - -/* -In most cases it makes more sense to use apply_damage() instead! And make sure to check armour if applicable. -*/ -//Damages ONE external organ, organ gets randomly selected from damagable ones. -//It automatically updates damage overlays if necesary -//It automatically updates health status -/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = FALSE, var/edge = FALSE) - var/list/obj/item/organ/external/parts = get_damageable_organs() - if(!parts.len) return - var/obj/item/organ/external/picked = pick(parts) - if(picked.take_damage(brute,burn,sharp,edge)) - UpdateDamageIcon() - BITSET(hud_updateflag, HEALTH_HUD) - updatehealth() - - -//Heal MANY external organs, in random order -//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs -/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn, var/include_robo) - var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - - var/update = 0 - while(parts.len && (brute>0 || burn>0) ) - var/obj/item/organ/external/picked = pick(parts) - - var/brute_was = picked.brute_dam - var/burn_was = picked.burn_dam - - update |= picked.heal_damage(brute,burn,robo_repair = include_robo) - - brute -= (brute_was-picked.brute_dam) - burn -= (burn_was-picked.burn_dam) - - parts -= picked - updatehealth() - BITSET(hud_updateflag, HEALTH_HUD) - if(update) UpdateDamageIcon() - -// damage MANY external organs, in random order -/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = FALSE, var/edge = FALSE, var/used_weapon = null) - if(status_flags & GODMODE) return //godmode - var/list/obj/item/organ/external/parts = get_damageable_organs() - var/update = 0 - while(parts.len && (brute>0 || burn>0) ) - var/obj/item/organ/external/picked = pick(parts) - - var/brute_was = picked.brute_dam - var/burn_was = picked.burn_dam - - update |= picked.take_damage(brute,burn,sharp,edge,used_weapon) - brute -= (picked.brute_dam - brute_was) - burn -= (picked.burn_dam - burn_was) - - parts -= picked - updatehealth() - BITSET(hud_updateflag, HEALTH_HUD) - if(update) UpdateDamageIcon() - - -//////////////////////////////////////////// - -/* -This function restores the subjects blood to max. -*/ -/mob/living/carbon/human/proc/restore_blood() - if(!should_have_organ(O_HEART)) - return - if(vessel.total_volume < species.blood_volume) - vessel.add_reagent("blood", species.blood_volume - vessel.total_volume) - -/* -This function restores all organs. -*/ -/mob/living/carbon/human/restore_all_organs(var/ignore_prosthetic_prefs) - for(var/obj/item/organ/external/current_organ in organs) - current_organ.rejuvenate(ignore_prosthetic_prefs) - -/mob/living/carbon/human/proc/HealDamage(zone, brute, burn) - var/obj/item/organ/external/E = get_organ(zone) - if(istype(E, /obj/item/organ/external)) - if (E.heal_damage(brute, burn)) - UpdateDamageIcon() - BITSET(hud_updateflag, HEALTH_HUD) - else - return 0 - return - -/* -/mob/living/carbon/human/proc/get_organ(var/zone) - if(!zone) - zone = BP_TORSO - else if (zone in list( O_EYES, O_MOUTH )) - zone = BP_HEAD - return organs_by_name[zone] -*/ - -/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null) - if(Debug2) - to_world_log("## DEBUG: human/apply_damage() was called on [src], with [damage] damage, an armor value of [blocked], and a soak value of [soaked].") - - var/obj/item/organ/external/organ = null - if(isorgan(def_zone)) - organ = def_zone - else - if(!def_zone) def_zone = ran_zone(def_zone) - organ = get_organ(check_zone(def_zone)) - - for(var/datum/modifier/M in modifiers) //MODIFIER STUFF. It's best to do this RIGHT before armor is calculated, so it's done here! This is the 'forcefield' defence. - if(damagetype == BRUTE && (!isnull(M.effective_brute_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_brute_resistance - continue - if((damagetype == BURN || damagetype == ELECTROCUTE) && (!isnull(M.effective_fire_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_fire_resistance - continue - if(damagetype == TOX && (!isnull(M.effective_tox_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_tox_resistance - continue - if(damagetype == OXY && (!isnull(M.effective_oxy_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_oxy_resistance - continue - if(damagetype == CLONE && (!isnull(M.effective_clone_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_clone_resistance - continue - if(damagetype == HALLOSS && (!isnull(M.effective_hal_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_hal_resistance - continue - if(damagetype == SEARING && (!isnull(M.effective_fire_resistance) || !isnull(M.effective_brute_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - var/damage_mitigation = 0//Used for dual calculations. - if(!isnull(M.effective_fire_resistance)) - damage_mitigation += round((1/3)*damage * M.effective_fire_resistance) - if(!isnull(M.effective_brute_resistance)) - damage_mitigation += round((2/3)*damage * M.effective_brute_resistance) - damage -= damage_mitigation - continue - if(damagetype == BIOACID && (isSynthetic() && (!isnull(M.effective_fire_resistance))) || (!isSynthetic() && M.effective_tox_resistance)) - if(isSynthetic()) - damage = damage * M.effective_fire_resistance - else - damage = damage * M.effective_tox_resistance - continue - //Handle other types of damage - if((damagetype != BRUTE) && (damagetype != BURN)) - if(damagetype == HALLOSS) - if((damage > 25 && prob(20)) || (damage > 50 && prob(60))) - if(organ && organ.organ_can_feel_pain() && !isbelly(loc) && !istype(loc, /obj/item/device/dogborg/sleeper)) //VOREStation Add - emote("scream") - ..(damage, damagetype, def_zone, blocked, soaked) - return 1 - - //Handle BRUTE and BURN damage - handle_suit_punctures(damagetype, damage, def_zone) - - if(blocked >= 100) - return 0 - - if(soaked >= damage) - return 0 - - if(!organ) return 0 - - if(blocked) - blocked = (100-blocked)/100 - damage = (damage * blocked) - - if(soaked) - damage -= soaked - - if(Debug2) - to_world_log("## DEBUG: [src] was hit for [damage].") - - switch(damagetype) - if(BRUTE) - damageoverlaytemp = 20 - if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7} - damage = damage*species.brute_mod - - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*damage) - damage *= M.incoming_damage_percent - if(!isnull(M.incoming_brute_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*damage) - damage *= M.incoming_brute_damage_percent - - if(organ.take_damage(damage, 0, sharp, edge, used_weapon)) - UpdateDamageIcon() - if(BURN) - damageoverlaytemp = 20 - if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7} - damage = damage*species.burn_mod - - for(var/datum/modifier/M in modifiers) - if(!isnull(M.incoming_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*damage) - damage *= M.incoming_damage_percent - if(!isnull(M.incoming_brute_damage_percent)) - if(M.energy_based) - M.energy_source.use(M.damage_cost*damage) - damage *= M.incoming_fire_damage_percent - - if(organ.take_damage(0, damage, sharp, edge, used_weapon)) - UpdateDamageIcon() - - // CHOMPEdit: Pain Emotes! - var/pain_noise = (damage * species.pain_mod) // Halve the incoming, then multiply it by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc. - switch(damage) - if(0 to 25) - if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies. - emote("pain") - if(26 to 50) - if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies. - emote("pain") - if(51 to INFINITY) - if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies. - emote("pain") - // CHOMPEdit End - - // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). - updatehealth() - BITSET(hud_updateflag, HEALTH_HUD) - return 1 +//Updates the mob's health from organs and mob damage variables +/mob/living/carbon/human/updatehealth() + var/huskmodifier = 2.5 //VOREStation Edit // With 1.5, you need 250 burn instead of 200 to husk a human. + + if(status_flags & GODMODE) + health = getMaxHealth() + set_stat(CONSCIOUS) + return + + var/total_burn = 0 + var/total_brute = 0 + for(var/obj/item/organ/external/O in organs) //hardcoded to streamline things a bit + if((O.robotic >= ORGAN_ROBOT) && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes + continue //*non-vital* robot limbs don't count towards shock and crit + total_brute += O.brute_dam + total_burn += O.burn_dam + + // CHOMPEdit Start: Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does. + var/initialhealth = health // CHOMPEdit: Getting our health before this check + health = getMaxHealth() - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute + if(can_feel_pain() || ((isSynthetic() && synth_cosmetic_pain))) // Are we capable of feeling pain? + if(health < initialhealth) // Did we lose health? + // Yes. How much by? + var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc) + var/pain_noise = (damage * species.pain_mod) // Multiply the incoming damage by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc. + switch(damage) + if(-INFINITY to 0) + //TODO: fix husking + if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD) + ChangeToHusk() + return + if(1 to 25) + if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(26 to 50) + if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(51 to INFINITY) + if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies. + emote("pain") + // CHOMPEdit End: Pain + + //TODO: fix husking + if( ((getMaxHealth() - total_burn) < config.health_threshold_dead * huskmodifier) && stat == DEAD) + ChangeToHusk() + return + +/mob/living/carbon/human/adjustBrainLoss(var/amount) + + if(status_flags & GODMODE) return 0 //godmode + + if(should_have_organ("brain")) + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + if(sponge) + sponge.take_damage(amount) + brainloss = sponge.damage + else + brainloss = 200 + else + brainloss = 0 + +/mob/living/carbon/human/setBrainLoss(var/amount) + + if(status_flags & GODMODE) return 0 //godmode + + if(should_have_organ("brain")) + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + if(sponge) + sponge.damage = min(max(amount, 0),(getMaxHealth()*2)) + brainloss = sponge.damage + else + brainloss = 200 + else + brainloss = 0 + +/mob/living/carbon/human/getBrainLoss() + + if(status_flags & GODMODE) return 0 //godmode + + if(should_have_organ("brain")) + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + if(sponge) + brainloss = min(sponge.damage,getMaxHealth()*2) + else + brainloss = 200 + else + brainloss = 0 + return brainloss + +//These procs fetch a cumulative total damage from all organs +/mob/living/carbon/human/getBruteLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) + if(O.robotic >= ORGAN_ROBOT && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes + continue //*non-vital*robot limbs don't count towards death, or show up when scanned + amount += O.brute_dam + return amount + +/mob/living/carbon/human/getShockBruteLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) + if(O.robotic >= ORGAN_ROBOT) + continue //robot limbs don't count towards shock and crit + amount += O.brute_dam + return amount + +/mob/living/carbon/human/getActualBruteLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) // Unlike the above, robolimbs DO count. + amount += O.brute_dam + return amount + +/mob/living/carbon/human/getFireLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) + if(O.robotic >= ORGAN_ROBOT && !O.vital && !(O.robotic ==ORGAN_NANOFORM)) //CHOMPEdit - Protean changes + continue //*non-vital*robot limbs don't count towards death, or show up when scanned + amount += O.burn_dam + return amount + +/mob/living/carbon/human/getShockFireLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) + if(O.robotic >= ORGAN_ROBOT) + continue //robot limbs don't count towards shock and crit + amount += O.burn_dam + return amount + +/mob/living/carbon/human/getActualFireLoss() + var/amount = 0 + for(var/obj/item/organ/external/O in organs) // Unlike the above, robolimbs DO count. + amount += O.burn_dam + return amount + +//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs +/mob/living/carbon/human/adjustBruteLoss(var/amount,var/include_robo) + amount = amount*species.brute_mod + if(amount > 0) + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_damage_percent + if(!isnull(M.incoming_brute_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_brute_damage_percent + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage + take_overall_damage(amount, 0) + else + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_healing_percent)) + amount *= M.incoming_healing_percent + heal_overall_damage(-amount, 0, include_robo) + BITSET(hud_updateflag, HEALTH_HUD) + +//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs +/mob/living/carbon/human/adjustFireLoss(var/amount,var/include_robo) + amount = amount*species.burn_mod + if(amount > 0) + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_damage_percent + if(!isnull(M.incoming_fire_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_fire_damage_percent + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage + take_overall_damage(0, amount) + else + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_healing_percent)) + amount *= M.incoming_healing_percent + heal_overall_damage(0, -amount, include_robo) + BITSET(hud_updateflag, HEALTH_HUD) + +/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) + amount = amount*species.brute_mod + if (organ_name in organs_by_name) + var/obj/item/organ/external/O = get_organ(organ_name) + + if(amount > 0) + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_damage_percent + if(!isnull(M.incoming_brute_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_brute_damage_percent + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage + O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) + else + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_healing_percent)) + amount *= M.incoming_healing_percent + //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. + O.heal_damage(-amount, 0, internal=0, robo_repair=(O.robotic >= ORGAN_ROBOT)) + + BITSET(hud_updateflag, HEALTH_HUD) + +/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) + amount = amount*species.burn_mod + if (organ_name in organs_by_name) + var/obj/item/organ/external/O = get_organ(organ_name) + + if(amount > 0) + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_damage_percent + if(!isnull(M.incoming_fire_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*amount) + amount *= M.incoming_fire_damage_percent + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage + O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) + else + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_healing_percent)) + amount *= M.incoming_healing_percent + //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. + O.heal_damage(0, -amount, internal=0, robo_repair=(O.robotic >= ORGAN_ROBOT)) + + BITSET(hud_updateflag, HEALTH_HUD) + +/mob/living/carbon/human/Stun(amount) + if(HULK in mutations) return + ..() + +/mob/living/carbon/human/Weaken(amount) + if(HULK in mutations) return + ..() + +/mob/living/carbon/human/Paralyse(amount) + if(HULK in mutations) return + // Notify our AI if they can now control the suit. + if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second. + wearing_rig.notify_ai("Warning: user consciousness failure. Mobility control passed to integrated intelligence system.") + ..() + +/mob/living/carbon/human/proc/Stasis(amount) + if((species.flags & NO_SCAN) || isSynthetic()) + in_stasis = 0 + else + in_stasis = amount + +/mob/living/carbon/human/proc/getStasis() + if((species.flags & NO_SCAN) || isSynthetic()) + return 0 + + return in_stasis + +//This determines if, RIGHT NOW, the life() tick is being skipped due to stasis +/mob/living/carbon/human/proc/inStasisNow() + var/stasisValue = getStasis() + if(stasisValue && (life_tick % stasisValue)) + return 1 + + return 0 + +/mob/living/carbon/human/getCloneLoss() + if((species.flags & NO_SCAN) || isSynthetic()) + cloneloss = 0 + return ..() + +/mob/living/carbon/human/setCloneLoss(var/amount) + if((species.flags & NO_SCAN) || isSynthetic()) + cloneloss = 0 + else + ..() + +/mob/living/carbon/human/adjustCloneLoss(var/amount) + ..() + + if((species.flags & NO_SCAN) || isSynthetic()) + cloneloss = 0 + return + + var/heal_prob = max(0, 80 - getCloneLoss()) + var/mut_prob = min(80, getCloneLoss()+10) + if (amount > 0) + if (prob(mut_prob)) + var/list/obj/item/organ/external/candidates = list() + for (var/obj/item/organ/external/O in organs) + if(!(O.status & ORGAN_MUTATED)) + candidates |= O + if (candidates.len) + var/obj/item/organ/external/O = pick(candidates) + O.mutate() + to_chat(src, "Something is not right with your [O.name]...") + return + else + if (prob(heal_prob)) + for (var/obj/item/organ/external/O in organs) + if (O.status & ORGAN_MUTATED) + O.unmutate() + to_chat(src, "Your [O.name] is shaped normally again.") + return + + if (getCloneLoss() < 1) + for (var/obj/item/organ/external/O in organs) + if (O.status & ORGAN_MUTATED) + O.unmutate() + to_chat(src, "Your [O.name] is shaped normally again.") + BITSET(hud_updateflag, HEALTH_HUD) + +// Defined here solely to take species flags into account without having to recast at mob/living level. +/mob/living/carbon/human/getOxyLoss() + if(!should_have_organ(O_LUNGS)) + oxyloss = 0 + return ..() + +/mob/living/carbon/human/adjustOxyLoss(var/amount) + if(!should_have_organ(O_LUNGS)) + oxyloss = 0 + else + amount = amount*species.oxy_mod + ..(amount) + +/mob/living/carbon/human/setOxyLoss(var/amount) + if(!should_have_organ(O_LUNGS)) + oxyloss = 0 + else + ..() + +/mob/living/carbon/human/adjustHalLoss(var/amount) + if(species.flags & NO_PAIN) + halloss = 0 + else + if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! + amount = amount*species.pain_mod + ..(amount) + +/mob/living/carbon/human/setHalLoss(var/amount) + if(species.flags & NO_PAIN) + halloss = 0 + else + ..() + +/mob/living/carbon/human/Stun(var/amount) + if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! + amount = amount*species.stun_mod + ..(amount) + +/mob/living/carbon/human/SetStunned(var/amount) + ..() + +/mob/living/carbon/human/AdjustStunned(var/amount) + if(amount > 0) // Only multiply it if positive. + amount = amount*species.stun_mod + ..(amount) + +/mob/living/carbon/human/Weaken(var/amount) + if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too! + amount = amount*species.weaken_mod + ..(amount) + +/mob/living/carbon/human/SetWeakened(var/amount) + ..() + +/mob/living/carbon/human/AdjustWeakened(var/amount) + if(amount > 0) // Only multiply it if positive. + amount = amount*species.weaken_mod + ..(amount) + +/mob/living/carbon/human/getToxLoss() + if(species.flags & NO_POISON) + toxloss = 0 + return ..() + +/mob/living/carbon/human/adjustToxLoss(var/amount) + if(species.flags & NO_POISON) + toxloss = 0 + else + amount = amount*species.toxins_mod + ..(amount) + +/mob/living/carbon/human/setToxLoss(var/amount) + if(species.flags & NO_POISON) + toxloss = 0 + else + ..() + +//////////////////////////////////////////// + +//Returns a list of damaged organs +/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn) + var/list/obj/item/organ/external/parts = list() + for(var/obj/item/organ/external/O in organs) + if((brute && O.brute_dam) || (burn && O.burn_dam)) + parts += O + return parts + +//Returns a list of damageable organs +/mob/living/carbon/human/proc/get_damageable_organs() + var/list/obj/item/organ/external/parts = list() + for(var/obj/item/organ/external/O in organs) + if(O.is_damageable()) + parts += O + return parts + +//Heals ONE external organ, organ gets randomly selected from damaged ones. +//It automatically updates damage overlays if necesary +//It automatically updates health status +/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn) + var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) + if(!parts.len) return + var/obj/item/organ/external/picked = pick(parts) + if(picked.heal_damage(brute,burn)) + UpdateDamageIcon() + BITSET(hud_updateflag, HEALTH_HUD) + updatehealth() + + +/* +In most cases it makes more sense to use apply_damage() instead! And make sure to check armour if applicable. +*/ +//Damages ONE external organ, organ gets randomly selected from damagable ones. +//It automatically updates damage overlays if necesary +//It automatically updates health status +/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = FALSE, var/edge = FALSE) + var/list/obj/item/organ/external/parts = get_damageable_organs() + if(!parts.len) return + var/obj/item/organ/external/picked = pick(parts) + if(picked.take_damage(brute,burn,sharp,edge)) + UpdateDamageIcon() + BITSET(hud_updateflag, HEALTH_HUD) + updatehealth() + + +//Heal MANY external organs, in random order +//'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs +/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn, var/include_robo) + var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) + + var/update = 0 + while(parts.len && (brute>0 || burn>0) ) + var/obj/item/organ/external/picked = pick(parts) + + var/brute_was = picked.brute_dam + var/burn_was = picked.burn_dam + + update |= picked.heal_damage(brute,burn,robo_repair = include_robo) + + brute -= (brute_was-picked.brute_dam) + burn -= (burn_was-picked.burn_dam) + + parts -= picked + updatehealth() + BITSET(hud_updateflag, HEALTH_HUD) + if(update) UpdateDamageIcon() + +// damage MANY external organs, in random order +/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = FALSE, var/edge = FALSE, var/used_weapon = null) + if(status_flags & GODMODE) return //godmode + var/list/obj/item/organ/external/parts = get_damageable_organs() + var/update = 0 + while(parts.len && (brute>0 || burn>0) ) + var/obj/item/organ/external/picked = pick(parts) + + var/brute_was = picked.brute_dam + var/burn_was = picked.burn_dam + + update |= picked.take_damage(brute,burn,sharp,edge,used_weapon) + brute -= (picked.brute_dam - brute_was) + burn -= (picked.burn_dam - burn_was) + + parts -= picked + updatehealth() + BITSET(hud_updateflag, HEALTH_HUD) + if(update) UpdateDamageIcon() + + +//////////////////////////////////////////// + +/* +This function restores the subjects blood to max. +*/ +/mob/living/carbon/human/proc/restore_blood() + if(!should_have_organ(O_HEART)) + return + if(vessel.total_volume < species.blood_volume) + vessel.add_reagent("blood", species.blood_volume - vessel.total_volume) + +/* +This function restores all organs. +*/ +/mob/living/carbon/human/restore_all_organs(var/ignore_prosthetic_prefs) + for(var/obj/item/organ/external/current_organ in organs) + current_organ.rejuvenate(ignore_prosthetic_prefs) + +/mob/living/carbon/human/proc/HealDamage(zone, brute, burn) + var/obj/item/organ/external/E = get_organ(zone) + if(istype(E, /obj/item/organ/external)) + if (E.heal_damage(brute, burn)) + UpdateDamageIcon() + BITSET(hud_updateflag, HEALTH_HUD) + else + return 0 + return + +/* +/mob/living/carbon/human/proc/get_organ(var/zone) + if(!zone) + zone = BP_TORSO + else if (zone in list( O_EYES, O_MOUTH )) + zone = BP_HEAD + return organs_by_name[zone] +*/ + +/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null) + if(Debug2) + to_world_log("## DEBUG: human/apply_damage() was called on [src], with [damage] damage, an armor value of [blocked], and a soak value of [soaked].") + + var/obj/item/organ/external/organ = null + if(isorgan(def_zone)) + organ = def_zone + else + if(!def_zone) def_zone = ran_zone(def_zone) + organ = get_organ(check_zone(def_zone)) + + for(var/datum/modifier/M in modifiers) //MODIFIER STUFF. It's best to do this RIGHT before armor is calculated, so it's done here! This is the 'forcefield' defence. + if(damagetype == BRUTE && (!isnull(M.effective_brute_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_brute_resistance + continue + if((damagetype == BURN || damagetype == ELECTROCUTE) && (!isnull(M.effective_fire_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_fire_resistance + continue + if(damagetype == TOX && (!isnull(M.effective_tox_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_tox_resistance + continue + if(damagetype == OXY && (!isnull(M.effective_oxy_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_oxy_resistance + continue + if(damagetype == CLONE && (!isnull(M.effective_clone_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_clone_resistance + continue + if(damagetype == HALLOSS && (!isnull(M.effective_hal_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_hal_resistance + continue + if(damagetype == SEARING && (!isnull(M.effective_fire_resistance) || !isnull(M.effective_brute_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + var/damage_mitigation = 0//Used for dual calculations. + if(!isnull(M.effective_fire_resistance)) + damage_mitigation += round((1/3)*damage * M.effective_fire_resistance) + if(!isnull(M.effective_brute_resistance)) + damage_mitigation += round((2/3)*damage * M.effective_brute_resistance) + damage -= damage_mitigation + continue + if(damagetype == BIOACID && (isSynthetic() && (!isnull(M.effective_fire_resistance))) || (!isSynthetic() && M.effective_tox_resistance)) + if(isSynthetic()) + damage = damage * M.effective_fire_resistance + else + damage = damage * M.effective_tox_resistance + continue + //Handle other types of damage + if((damagetype != BRUTE) && (damagetype != BURN)) + if(damagetype == HALLOSS) + if((damage > 25 && prob(20)) || (damage > 50 && prob(60))) + if(organ && organ.organ_can_feel_pain() && !isbelly(loc) && !istype(loc, /obj/item/device/dogborg/sleeper)) //VOREStation Add + emote("scream") + ..(damage, damagetype, def_zone, blocked, soaked) + return 1 + + //Handle BRUTE and BURN damage + handle_suit_punctures(damagetype, damage, def_zone) + + if(blocked >= 100) + return 0 + + if(soaked >= damage) + return 0 + + if(!organ) return 0 + + if(blocked) + blocked = (100-blocked)/100 + damage = (damage * blocked) + + if(soaked) + damage -= soaked + + if(Debug2) + to_world_log("## DEBUG: [src] was hit for [damage].") + + switch(damagetype) + if(BRUTE) + damageoverlaytemp = 20 + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7} + damage = damage*species.brute_mod + + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*damage) + damage *= M.incoming_damage_percent + if(!isnull(M.incoming_brute_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*damage) + damage *= M.incoming_brute_damage_percent + + if(organ.take_damage(damage, 0, sharp, edge, used_weapon)) + UpdateDamageIcon() + if(BURN) + damageoverlaytemp = 20 + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){damage *= 0.7} + damage = damage*species.burn_mod + + for(var/datum/modifier/M in modifiers) + if(!isnull(M.incoming_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*damage) + damage *= M.incoming_damage_percent + if(!isnull(M.incoming_brute_damage_percent)) + if(M.energy_based) + M.energy_source.use(M.damage_cost*damage) + damage *= M.incoming_fire_damage_percent + + if(organ.take_damage(0, damage, sharp, edge, used_weapon)) + UpdateDamageIcon() + + // CHOMPEdit: Pain Emotes! + var/pain_noise = (damage * species.pain_mod) // Halve the incoming, then multiply it by our mod. 50 damage becomes 25 x 0.6 on highest strength, meaning prob 15. 50 x 1.4 means prob 35, etc. + switch(damage) + if(0 to 25) + if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(26 to 50) + if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(51 to INFINITY) + if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies. + emote("pain") + // CHOMPEdit End + + // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). + updatehealth() + BITSET(hud_updateflag, HEALTH_HUD) + return 1 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a3be484060..f2e09405ee 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,163 +1,163 @@ -/mob/living/carbon/human - //Hair colour and style - var/r_hair = 0 - var/g_hair = 0 - var/b_hair = 0 - var/h_style = "Bald" - - var/r_grad = 0 - var/g_grad = 0 - var/b_grad = 0 - var/grad_style = "none" - //Facial hair colour and style - var/r_facial = 0 - var/g_facial = 0 - var/b_facial = 0 - var/f_style = "Shaved" - - //Eye colour - var/r_eyes = 0 - var/g_eyes = 0 - var/b_eyes = 0 - - var/s_tone = 0 //Skin tone - - //Skin colour - var/r_skin = 0 - var/g_skin = 0 - var/b_skin = 0 - - var/skin_state = SKIN_NORMAL - - //Synth colors - var/synth_color = 0 //Lets normally uncolorable synth parts be colorable. - var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. - var/g_synth //Same as above - var/b_synth //Same as above - var/synth_markings = 0 //Enables/disables markings on synth parts. - - var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet) - - //var/size_multiplier = 1 //multiplier for the mob's icon size //VOREStation Edit (Moved to /mob/living) - var/damage_multiplier = 1 //multiplies melee combat damage - var/icon_update = 1 //whether icon updating shall take place - - var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup - - var/age = 30 //Player's age (pure fluff) - var/bday_month = 0 //Character birth month - var/bday_day = 0 //Character birthday day - - var/b_type = "A+" //Player's bloodtype - var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso). Also holds the datum for the type of robolimb. - - var/list/all_underwear = list() - var/list/all_underwear_metadata = list() - var/list/hide_underwear = list() - var/backbag = 2 //Which backpack type the player has chosen. - var/pdachoice = 1 //Which PDA type the player has chosen. - - // General information - var/home_system = "" - var/birthplace = "" - var/citizenship = "" - var/personal_faction = "" - var/religion = "" - var/antag_faction = "" - var/antag_vis = "" - - //Equipment slots - var/obj/item/wear_suit = null - var/obj/item/w_uniform = null - var/obj/item/shoes = null - var/obj/item/belt = null - var/obj/item/gloves = null - var/obj/item/glasses = null - var/obj/item/head = null - var/obj/item/l_ear = null - var/obj/item/r_ear = null - var/obj/item/wear_id = null - var/obj/item/r_store = null - var/obj/item/l_store = null - var/obj/item/s_store = null - - var/used_skillpoints = 0 - var/skill_specialization = null - var/list/skills = list() - - var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() - - var/special_voice = "" // For changing our voice. Used by a symptom. - - var/last_dam = -1 //Used for determining if we need to process all organs or just some or even none. - - var/xylophone = 0 //For the spoooooooky xylophone cooldown - - var/mob/remoteview_target = null - var/hand_blood_color - - var/list/flavor_texts = list() - var/gunshot_residue - var/pulling_punches // Are you trying not to hurt your opponent? - var/robolimb_count = 0 // Total number of external robot parts. - var/robobody_count = 0 // Counts torso, groin, and head, if they're robotic - - mob_bump_flag = HUMAN - mob_push_flags = ~HEAVY - mob_swap_flags = ~HEAVY - - var/identifying_gender // In case the human identifies as another gender than it's biological - - var/list/descriptors // For comparative examine code - - var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds - - can_be_antagged = TRUE - -// Used by mobs in virtual reality to point back to the "real" mob the client belongs to. - var/mob/living/carbon/human/vr_holder = null - // Used by "real" mobs after they leave a VR session - var/mob/living/carbon/human/vr_link = null - - var/obj/machinery/machine_visual //machine that is currently applying visual effects to this mob. Only used for camera monitors currently. - - inventory_panel_type = /datum/inventory_panel/human - butchery_loot = list(/obj/item/stack/animalhide/human = 1) - - // Horray Furries! - var/datum/sprite_accessory/ears/ear_style = null - var/r_ears = 30 - var/g_ears = 30 - var/b_ears = 30 - var/r_ears2 = 30 - var/g_ears2 = 30 - var/b_ears2 = 30 - var/r_ears3 = 30 //Trust me, we could always use more colour. No japes. - var/g_ears3 = 30 - var/b_ears3 = 30 - var/datum/sprite_accessory/tail/tail_style = null - var/r_tail = 30 - var/g_tail = 30 - var/b_tail = 30 - var/r_tail2 = 30 - var/g_tail2 = 30 - var/b_tail2 = 30 - var/r_tail3 = 30 - var/g_tail3 = 30 - var/b_tail3 = 30 - var/datum/sprite_accessory/wing/wing_style = null - var/r_wing = 30 - var/g_wing = 30 - var/b_wing = 30 - var/r_wing2 = 30 - var/g_wing2 = 30 - var/b_wing2 = 30 - var/r_wing3 = 30 - var/g_wing3 = 30 - var/b_wing3 = 30 - - var/wagging = 0 //UGH. - var/flapping = 0 - - // Custom Species Name - var/custom_species +/mob/living/carbon/human + //Hair colour and style + var/r_hair = 0 + var/g_hair = 0 + var/b_hair = 0 + var/h_style = "Bald" + + var/r_grad = 0 + var/g_grad = 0 + var/b_grad = 0 + var/grad_style = "none" + //Facial hair colour and style + var/r_facial = 0 + var/g_facial = 0 + var/b_facial = 0 + var/f_style = "Shaved" + + //Eye colour + var/r_eyes = 0 + var/g_eyes = 0 + var/b_eyes = 0 + + var/s_tone = 0 //Skin tone + + //Skin colour + var/r_skin = 0 + var/g_skin = 0 + var/b_skin = 0 + + var/skin_state = SKIN_NORMAL + + //Synth colors + var/synth_color = 0 //Lets normally uncolorable synth parts be colorable. + var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. + var/g_synth //Same as above + var/b_synth //Same as above + var/synth_markings = 0 //Enables/disables markings on synth parts. + + var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet) + + //var/size_multiplier = 1 //multiplier for the mob's icon size //VOREStation Edit (Moved to /mob/living) + var/damage_multiplier = 1 //multiplies melee combat damage + var/icon_update = 1 //whether icon updating shall take place + + var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup + + var/age = 30 //Player's age (pure fluff) + var/bday_month = 0 //Character birth month + var/bday_day = 0 //Character birthday day + + var/b_type = "A+" //Player's bloodtype + var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso). Also holds the datum for the type of robolimb. + + var/list/all_underwear = list() + var/list/all_underwear_metadata = list() + var/list/hide_underwear = list() + var/backbag = 2 //Which backpack type the player has chosen. + var/pdachoice = 1 //Which PDA type the player has chosen. + + // General information + var/home_system = "" + var/birthplace = "" + var/citizenship = "" + var/personal_faction = "" + var/religion = "" + var/antag_faction = "" + var/antag_vis = "" + + //Equipment slots + var/obj/item/wear_suit = null + var/obj/item/w_uniform = null + var/obj/item/shoes = null + var/obj/item/belt = null + var/obj/item/gloves = null + var/obj/item/glasses = null + var/obj/item/head = null + var/obj/item/l_ear = null + var/obj/item/r_ear = null + var/obj/item/wear_id = null + var/obj/item/r_store = null + var/obj/item/l_store = null + var/obj/item/s_store = null + + var/used_skillpoints = 0 + var/skill_specialization = null + var/list/skills = list() + + var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() + + var/special_voice = "" // For changing our voice. Used by a symptom. + + var/last_dam = -1 //Used for determining if we need to process all organs or just some or even none. + + var/xylophone = 0 //For the spoooooooky xylophone cooldown + + var/mob/remoteview_target = null + var/hand_blood_color + + var/list/flavor_texts = list() + var/gunshot_residue + var/pulling_punches // Are you trying not to hurt your opponent? + var/robolimb_count = 0 // Total number of external robot parts. + var/robobody_count = 0 // Counts torso, groin, and head, if they're robotic + + mob_bump_flag = HUMAN + mob_push_flags = ~HEAVY + mob_swap_flags = ~HEAVY + + var/identifying_gender // In case the human identifies as another gender than it's biological + + var/list/descriptors // For comparative examine code + + var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds + + can_be_antagged = TRUE + +// Used by mobs in virtual reality to point back to the "real" mob the client belongs to. + var/mob/living/carbon/human/vr_holder = null + // Used by "real" mobs after they leave a VR session + var/mob/living/carbon/human/vr_link = null + + var/obj/machinery/machine_visual //machine that is currently applying visual effects to this mob. Only used for camera monitors currently. + + inventory_panel_type = /datum/inventory_panel/human + butchery_loot = list(/obj/item/stack/animalhide/human = 1) + + // Horray Furries! + var/datum/sprite_accessory/ears/ear_style = null + var/r_ears = 30 + var/g_ears = 30 + var/b_ears = 30 + var/r_ears2 = 30 + var/g_ears2 = 30 + var/b_ears2 = 30 + var/r_ears3 = 30 //Trust me, we could always use more colour. No japes. + var/g_ears3 = 30 + var/b_ears3 = 30 + var/datum/sprite_accessory/tail/tail_style = null + var/r_tail = 30 + var/g_tail = 30 + var/b_tail = 30 + var/r_tail2 = 30 + var/g_tail2 = 30 + var/b_tail2 = 30 + var/r_tail3 = 30 + var/g_tail3 = 30 + var/b_tail3 = 30 + var/datum/sprite_accessory/wing/wing_style = null + var/r_wing = 30 + var/g_wing = 30 + var/b_wing = 30 + var/r_wing2 = 30 + var/g_wing2 = 30 + var/b_wing2 = 30 + var/r_wing3 = 30 + var/g_wing3 = 30 + var/b_wing3 = 30 + + var/wagging = 0 //UGH. + var/flapping = 0 + + // Custom Species Name + var/custom_species diff --git a/code/modules/mob/living/carbon/human/human_movement_ch.dm b/code/modules/mob/living/carbon/human/human_movement_ch.dm index 1aa0161054..b5f11db181 100644 --- a/code/modules/mob/living/carbon/human/human_movement_ch.dm +++ b/code/modules/mob/living/carbon/human/human_movement_ch.dm @@ -1,31 +1,31 @@ -//CHOMP reagent vore belly sloshing - -// Handle footstep sounds -/mob/living/carbon/human/handle_vorefootstep(var/m_intent, var/turf/T) - - if(!config.vorefootstep_volume || !T.vorefootstep_sounds || !T.vorefootstep_sounds.len || !vore_footstep_volume) - return - // Future Upgrades - Multi species support - var/list/vorefootstep_sounds = T.vorefootstep_sounds["human"] - if(!vorefootstep_sounds) - return - var/S = pick(vorefootstep_sounds) - if(!S) return - var/volume = config.vorefootstep_volume * (vore_footstep_volume/100) - - // Reduce volume while walking or barefoot, but not so much since tummy slosh - if(!shoes || m_intent == "walk") - volume = config.vorefootstep_volume * (vore_footstep_volume/100) * 0.75 - else if(shoes) - var/obj/item/clothing/shoes/feet = shoes - if(istype(feet)) - volume = feet.step_volume_mod * config.vorefootstep_volume * (vore_footstep_volume/100) * 0.75 - - if(!has_organ(BP_L_FOOT) && !has_organ(BP_R_FOOT)) - return // no feet = no slosh? Might prevent some entities from sloshing around - if(buckled || lying || throwing) - return // people flying, lying down or sitting do not slosh - if(!has_gravity(src) && prob(75)) - return // Far less likely to make noise in no gravity - playsound(T, S, volume, FALSE, preference = /datum/client_preference/digestion_noises) +//CHOMP reagent vore belly sloshing + +// Handle footstep sounds +/mob/living/carbon/human/handle_vorefootstep(var/m_intent, var/turf/T) + + if(!config.vorefootstep_volume || !T.vorefootstep_sounds || !T.vorefootstep_sounds.len || !vore_footstep_volume) + return + // Future Upgrades - Multi species support + var/list/vorefootstep_sounds = T.vorefootstep_sounds["human"] + if(!vorefootstep_sounds) + return + var/S = pick(vorefootstep_sounds) + if(!S) return + var/volume = config.vorefootstep_volume * (vore_footstep_volume/100) + + // Reduce volume while walking or barefoot, but not so much since tummy slosh + if(!shoes || m_intent == "walk") + volume = config.vorefootstep_volume * (vore_footstep_volume/100) * 0.75 + else if(shoes) + var/obj/item/clothing/shoes/feet = shoes + if(istype(feet)) + volume = feet.step_volume_mod * config.vorefootstep_volume * (vore_footstep_volume/100) * 0.75 + + if(!has_organ(BP_L_FOOT) && !has_organ(BP_R_FOOT)) + return // no feet = no slosh? Might prevent some entities from sloshing around + if(buckled || lying || throwing) + return // people flying, lying down or sitting do not slosh + if(!has_gravity(src) && prob(75)) + return // Far less likely to make noise in no gravity + playsound(T, S, volume, FALSE, preference = /datum/client_preference/digestion_noises) return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index 839385ac62..d3afee6118 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -1,31 +1,31 @@ -// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than # -#define AUTOHISS_OFF 0 -#define AUTOHISS_BASIC 1 -#define AUTOHISS_FULL 2 -// VOREStation Add End - -/mob/living/carbon/human/Login() - ..() - update_hud() - // VOREStation Add - if(client.prefs) // Safety, just in case so we don't runtime. - if(!client.prefs.autohiss) - client.autohiss_mode = AUTOHISS_FULL - else - switch(client.prefs.autohiss) - if("Full") - client.autohiss_mode = AUTOHISS_FULL - if("Basic") - client.autohiss_mode = AUTOHISS_BASIC - if("Off") - client.autohiss_mode = AUTOHISS_OFF - consider_birthday() - // VOREStation Add - if(species) species.handle_login_special(src) - return - -// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than # -#undef AUTOHISS_OFF -#undef AUTOHISS_BASIC -#undef AUTOHISS_FULL -// VOREStation Add End +// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than # +#define AUTOHISS_OFF 0 +#define AUTOHISS_BASIC 1 +#define AUTOHISS_FULL 2 +// VOREStation Add End + +/mob/living/carbon/human/Login() + ..() + update_hud() + // VOREStation Add + if(client.prefs) // Safety, just in case so we don't runtime. + if(!client.prefs.autohiss) + client.autohiss_mode = AUTOHISS_FULL + else + switch(client.prefs.autohiss) + if("Full") + client.autohiss_mode = AUTOHISS_FULL + if("Basic") + client.autohiss_mode = AUTOHISS_BASIC + if("Off") + client.autohiss_mode = AUTOHISS_OFF + consider_birthday() + // VOREStation Add + if(species) species.handle_login_special(src) + return + +// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than # +#undef AUTOHISS_OFF +#undef AUTOHISS_BASIC +#undef AUTOHISS_FULL +// VOREStation Add End diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 0dcddb6f96..3e59a2a36c 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,214 +1,214 @@ -/mob/living/carbon/human/GetAltName() - if(ability_flags & AB_PHASE_SHIFTED) - return "" - if(name != GetVoice()) - return " (as [get_id_name("Unknown")])" - - return ..() - -/mob/living/carbon/human/proc/forcesay(list/append) - if(stat == CONSCIOUS) - if(client) - var/virgin = 1 //has the text been modified yet? - var/temp = winget(client, "input", "text") - if(findtextEx(temp, "Say \"", 1, 7) && length(temp) > 5) //case sensitive means - - temp = replacetext(temp, ";", "") //general radio - - if(findtext(trim_left(temp), ":", 6, 7)) //dept radio - temp = copytext(trim_left(temp), 8) - virgin = 0 - - if(virgin) - temp = copytext(trim_left(temp), 6) //normal speech - virgin = 0 - - while(findtext(trim_left(temp), ":", 1, 2)) //dept radio again (necessary) - temp = copytext(trim_left(temp), 3) - - if(findtext(temp, "*", 1, 2)) //emotes - return - temp = copytext(trim_left(temp), 1, rand(5,8)) - - var/trimmed = trim_left(temp) - if(length(trimmed)) - if(append) - temp += pick(append) - - say(temp) - winset(client, "input", "text=[null]") - -/mob/living/carbon/human/speech_bubble_appearance() - var/sounds_synth = FALSE - var/datum/robolimb/robo = isSynthetic() //Will get torso manufacturer - if(robo) - sounds_synth = looksSynthetic() //Based on lifelike robolimb vars - - // Not lifelike and got manufacturer - if(sounds_synth) - return robo.speech_bubble_appearance || "synthetic" - - // Not lifelike synth, might have synth voice box - if(!robo) - var/obj/item/organ/internal/V = internal_organs_by_name[O_VOICE] - if(V?.robotic >= ORGAN_ROBOT) - return "synthetic" - - // Species might have custom one - if(species.speech_bubble_appearance) - return species.speech_bubble_appearance - - // NORMIE - return ..() - -/mob/living/carbon/human/say_understands(var/mob/other, var/datum/language/speaking = null) - if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. - return TRUE - - if(species.can_understand(other)) - return TRUE - - //These only pertain to common. Languages are handled by mob/say_understands() - if(!speaking) - if(istype(other, /mob/living/carbon/alien/diona)) - if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. - return TRUE - if(issilicon(other)) - return TRUE - if(isbrain(other)) - return TRUE - if(isslime(other)) - return TRUE - - return ..() - -/mob/living/carbon/human/GetVoice() - var/voice_sub - if(istype(get_rig(),/obj/item/weapon/rig)) - var/obj/item/weapon/rig/rig = get_rig() - // todo: fix this shit - if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice) - voice_sub = rig.speech.voice_holder.voice - if(!voice_sub) // If the rig has a voice changer, then we use that. Otherwise, use this - for(var/obj/item/gear in list(wear_mask,wear_suit,head)) - if(!gear) - continue - var/obj/item/voice_changer/changer = locate() in gear - if(changer && changer.active) - if(changer.voice) - voice_sub = changer.voice - else - voice_sub = get_id_name() - if(voice_sub) - return voice_sub - if(mind && mind.changeling && mind.changeling.mimicing) - return mind.changeling.mimicing - if(GetSpecialVoice()) - return GetSpecialVoice() - return real_name - -/mob/living/carbon/human/proc/SetSpecialVoice(var/new_voice) - if(new_voice) - special_voice = new_voice - return - -/mob/living/carbon/human/proc/UnsetSpecialVoice() - special_voice = "" - return - -/mob/living/carbon/human/proc/GetSpecialVoice() - return special_voice - -/mob/living/carbon/human/handle_speech_problems(var/list/message_data) - if(silent || (sdisabilities & MUTE)) - message_data[1] = "" - . = 1 - - else if(istype(wear_mask, /obj/item/clothing/mask/muzzle)) //YWedit start, fixes masks removing speech problems. - var/obj/item/clothing/mask/muzzle/M = wear_mask // YWedit End. - if(M.voicechange) - message_data[1] = pick(M.say_messages) - message_data[2] = pick(M.say_verbs) - . = 1 - - else if(CE_SPEEDBOOST in chem_effects || is_jittery) // motor mouth - // Despite trying to url/html decode these, byond is just being bad and I dunno. - var/static/regex/speedboost_initial = new (@"&[a-z]{2,5};|&#\d{2};","g") - // Not herestring because bad vs code syntax highlight panics at apostrophe - var/static/regex/speedboost_main = new ("\[ ',!?.;\]","g") - for(var/datum/multilingual_say_piece/S in message_data[1]) - S.message = speedboost_initial.Replace(S.message, "") - S.message = speedboost_main.Replace(S.message, "") - . = 1 - else - . = ..(message_data) - -/mob/living/carbon/human/handle_message_mode(message_mode, list/message_pieces, verb, used_radios) - switch(message_mode) - if("intercom") - if(!restrained()) - for(var/obj/item/device/radio/intercom/I in view(1)) - I.talk_into(src, message_pieces, null, verb) - I.add_fingerprint(src) - used_radios += I - if("headset") - var/obj/item/device/radio/R = null - if(isradio(l_ear)) - R = l_ear - if(R.talk_into(src, message_pieces, null, verb)) - used_radios += R - return - - if(isradio(r_ear)) - R = r_ear - if(R.talk_into(src, message_pieces, null, verb)) - used_radios += R - return - if("right ear") - var/obj/item/device/radio/R = null - if(isradio(r_ear)) - R = r_ear - if(isradio(r_hand)) - R = r_hand - if(istype(R)) - if(R.talk_into(src, message_pieces, null, verb)) - used_radios += R - if("left ear") - var/obj/item/device/radio/R = null - if(isradio(l_ear)) - R = l_ear - if(isradio(l_hand)) - R = l_hand - if(istype(R)) - if(R.talk_into(src, message_pieces, null, verb)) - used_radios += R - else - if(message_mode) - if(isradio(l_ear)) - if(l_ear.talk_into(src, message_pieces, message_mode, verb)) - used_radios += l_ear - return - - if(isradio(r_ear)) - if(r_ear.talk_into(src, message_pieces, message_mode, verb)) - used_radios += r_ear - -/mob/living/carbon/human/handle_speech_sound() - var/list/returns[2] - if(speech_sound_enabled && species.speech_sounds && species.speech_sounds.len && prob(species.speech_chance)) //VOREStation Edit: Sanity Check //CHOMPStation Edit: add ability to disable speech sounds with a verb - returns[1] = sound(pick(species.speech_sounds)) - returns[2] = 50 - return returns - -/mob/living/carbon/human/binarycheck() - . = FALSE - var/obj/item/device/radio/headset/R = null - if(istype(l_ear, /obj/item/device/radio/headset)) - R = l_ear - if(R.translate_binary) - . = TRUE - - if(istype(r_ear, /obj/item/device/radio/headset)) - R = r_ear - if(R.translate_binary) - . = TRUE +/mob/living/carbon/human/GetAltName() + if(ability_flags & AB_PHASE_SHIFTED) + return "" + if(name != GetVoice()) + return " (as [get_id_name("Unknown")])" + + return ..() + +/mob/living/carbon/human/proc/forcesay(list/append) + if(stat == CONSCIOUS) + if(client) + var/virgin = 1 //has the text been modified yet? + var/temp = winget(client, "input", "text") + if(findtextEx(temp, "Say \"", 1, 7) && length(temp) > 5) //case sensitive means + + temp = replacetext(temp, ";", "") //general radio + + if(findtext(trim_left(temp), ":", 6, 7)) //dept radio + temp = copytext(trim_left(temp), 8) + virgin = 0 + + if(virgin) + temp = copytext(trim_left(temp), 6) //normal speech + virgin = 0 + + while(findtext(trim_left(temp), ":", 1, 2)) //dept radio again (necessary) + temp = copytext(trim_left(temp), 3) + + if(findtext(temp, "*", 1, 2)) //emotes + return + temp = copytext(trim_left(temp), 1, rand(5,8)) + + var/trimmed = trim_left(temp) + if(length(trimmed)) + if(append) + temp += pick(append) + + say(temp) + winset(client, "input", "text=[null]") + +/mob/living/carbon/human/speech_bubble_appearance() + var/sounds_synth = FALSE + var/datum/robolimb/robo = isSynthetic() //Will get torso manufacturer + if(robo) + sounds_synth = looksSynthetic() //Based on lifelike robolimb vars + + // Not lifelike and got manufacturer + if(sounds_synth) + return robo.speech_bubble_appearance || "synthetic" + + // Not lifelike synth, might have synth voice box + if(!robo) + var/obj/item/organ/internal/V = internal_organs_by_name[O_VOICE] + if(V?.robotic >= ORGAN_ROBOT) + return "synthetic" + + // Species might have custom one + if(species.speech_bubble_appearance) + return species.speech_bubble_appearance + + // NORMIE + return ..() + +/mob/living/carbon/human/say_understands(var/mob/other, var/datum/language/speaking = null) + if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. + return TRUE + + if(species.can_understand(other)) + return TRUE + + //These only pertain to common. Languages are handled by mob/say_understands() + if(!speaking) + if(istype(other, /mob/living/carbon/alien/diona)) + if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. + return TRUE + if(issilicon(other)) + return TRUE + if(isbrain(other)) + return TRUE + if(isslime(other)) + return TRUE + + return ..() + +/mob/living/carbon/human/GetVoice() + var/voice_sub + if(istype(get_rig(),/obj/item/weapon/rig)) + var/obj/item/weapon/rig/rig = get_rig() + // todo: fix this shit + if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice) + voice_sub = rig.speech.voice_holder.voice + if(!voice_sub) // If the rig has a voice changer, then we use that. Otherwise, use this + for(var/obj/item/gear in list(wear_mask,wear_suit,head)) + if(!gear) + continue + var/obj/item/voice_changer/changer = locate() in gear + if(changer && changer.active) + if(changer.voice) + voice_sub = changer.voice + else + voice_sub = get_id_name() + if(voice_sub) + return voice_sub + if(mind && mind.changeling && mind.changeling.mimicing) + return mind.changeling.mimicing + if(GetSpecialVoice()) + return GetSpecialVoice() + return real_name + +/mob/living/carbon/human/proc/SetSpecialVoice(var/new_voice) + if(new_voice) + special_voice = new_voice + return + +/mob/living/carbon/human/proc/UnsetSpecialVoice() + special_voice = "" + return + +/mob/living/carbon/human/proc/GetSpecialVoice() + return special_voice + +/mob/living/carbon/human/handle_speech_problems(var/list/message_data) + if(silent || (sdisabilities & MUTE)) + message_data[1] = "" + . = 1 + + else if(istype(wear_mask, /obj/item/clothing/mask/muzzle)) //YWedit start, fixes masks removing speech problems. + var/obj/item/clothing/mask/muzzle/M = wear_mask // YWedit End. + if(M.voicechange) + message_data[1] = pick(M.say_messages) + message_data[2] = pick(M.say_verbs) + . = 1 + + else if(CE_SPEEDBOOST in chem_effects || is_jittery) // motor mouth + // Despite trying to url/html decode these, byond is just being bad and I dunno. + var/static/regex/speedboost_initial = new (@"&[a-z]{2,5};|&#\d{2};","g") + // Not herestring because bad vs code syntax highlight panics at apostrophe + var/static/regex/speedboost_main = new ("\[ ',!?.;\]","g") + for(var/datum/multilingual_say_piece/S in message_data[1]) + S.message = speedboost_initial.Replace(S.message, "") + S.message = speedboost_main.Replace(S.message, "") + . = 1 + else + . = ..(message_data) + +/mob/living/carbon/human/handle_message_mode(message_mode, list/message_pieces, verb, used_radios) + switch(message_mode) + if("intercom") + if(!restrained()) + for(var/obj/item/device/radio/intercom/I in view(1)) + I.talk_into(src, message_pieces, null, verb) + I.add_fingerprint(src) + used_radios += I + if("headset") + var/obj/item/device/radio/R = null + if(isradio(l_ear)) + R = l_ear + if(R.talk_into(src, message_pieces, null, verb)) + used_radios += R + return + + if(isradio(r_ear)) + R = r_ear + if(R.talk_into(src, message_pieces, null, verb)) + used_radios += R + return + if("right ear") + var/obj/item/device/radio/R = null + if(isradio(r_ear)) + R = r_ear + if(isradio(r_hand)) + R = r_hand + if(istype(R)) + if(R.talk_into(src, message_pieces, null, verb)) + used_radios += R + if("left ear") + var/obj/item/device/radio/R = null + if(isradio(l_ear)) + R = l_ear + if(isradio(l_hand)) + R = l_hand + if(istype(R)) + if(R.talk_into(src, message_pieces, null, verb)) + used_radios += R + else + if(message_mode) + if(isradio(l_ear)) + if(l_ear.talk_into(src, message_pieces, message_mode, verb)) + used_radios += l_ear + return + + if(isradio(r_ear)) + if(r_ear.talk_into(src, message_pieces, message_mode, verb)) + used_radios += r_ear + +/mob/living/carbon/human/handle_speech_sound() + var/list/returns[2] + if(speech_sound_enabled && species.speech_sounds && species.speech_sounds.len && prob(species.speech_chance)) //VOREStation Edit: Sanity Check //CHOMPStation Edit: add ability to disable speech sounds with a verb + returns[1] = sound(pick(species.speech_sounds)) + returns[2] = 50 + return returns + +/mob/living/carbon/human/binarycheck() + . = FALSE + var/obj/item/device/radio/headset/R = null + if(istype(l_ear, /obj/item/device/radio/headset)) + R = l_ear + if(R.translate_binary) + . = TRUE + + if(istype(r_ear, /obj/item/device/radio/headset)) + R = r_ear + if(R.translate_binary) + . = TRUE diff --git a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm index 513f616b8e..35fa472345 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm @@ -1,77 +1,77 @@ -/datum/unarmed_attack/bite/sharp/numbing //Is using this against someone you are truly trying to fight a bad idea? Yes. Yes it is. - attack_verb = list("bit") - attack_noun = list("fangs") - attack_sound = 'sound/weapons/bite.ogg' - shredding = 0 - sharp = TRUE - edge = TRUE - -/datum/unarmed_attack/bite/sharp/numbing/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - - attack_damage = CLAMP(attack_damage, 1, 5) - if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.name]!") - return 0 //No venom for you. - switch(zone) - if(BP_HEAD, O_MOUTH, O_EYES) - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) - user.visible_message("[user]'s fangs scrape across [target]'s cheek!") - to_chat(target, "Your face feels tingly!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) //Have to add this here, otherwise the swtich fails. - if(3 to 4) - user.visible_message("[user]'s fangs pierce into [target]'s neck at an odd, awkward angle!") - to_chat(target, "Your neck feels like it's on fire before going numb!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(5) - user.visible_message("[user] sinks \his [pick(attack_noun)] deep into [target]'s neck, causing the vein to bulge outwards at some type of chemical is pumped into it!") - to_chat(target, "Your neck feels like it's going to burst! Moments later, you simply can't feel your neck any longer, the numbness beginning to spread throughout your body!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - else - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) - user.visible_message("[user]'s fangs scrape across [target]'s [affecting.name]!") - to_chat(target, "Your [affecting.name] feels tingly!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(3 to 4) - user.visible_message("[user]'s fangs pierce [pick("", "", "the side of")] [target]'s [affecting.name]!") - to_chat(target, "Your [affecting.name] feels like it's on fire before going numb!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(5) - user.visible_message("[user]'s fangs sink deep into [target]'s [affecting.name], one of their veins bulging outwards from the sudden fluid pumped into it!") - to_chat(target, "Your [affecting.name] feels like it's going to burst! Moments later, you simply can't feel your [affecting.name] any longer, the numbness slowly spreading throughout your body!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - -/datum/unarmed_attack/claws/shadekin - -/datum/unarmed_attack/claws/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - ..() - if(!(target == user)) - user.shadekin_adjust_energy(attack_damage) - -/datum/unarmed_attack/bite/sharp/shadekin - -/datum/unarmed_attack/bite/sharp/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - ..() - if(!(target == user)) - user.shadekin_adjust_energy(attack_damage) - -/datum/unarmed_attack/claws/chimera //special feral attack that gets stronger as they get angrier - -/datum/unarmed_attack/claws/chimera/get_unarmed_damage(var/mob/living/carbon/human/user) - return user.feral/5 - -/datum/unarmed_attack/claws/chimera/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) - ..() - if(user.feral && !(target == user)) - var/selfdamage = ((user.feral/10)-7.5) - if(selfdamage > 0) - var/selfdamagezone = null - if (user.hand) - selfdamagezone=pick(BP_L_ARM, BP_L_HAND) - else - selfdamagezone=pick(BP_R_ARM, BP_R_HAND) +/datum/unarmed_attack/bite/sharp/numbing //Is using this against someone you are truly trying to fight a bad idea? Yes. Yes it is. + attack_verb = list("bit") + attack_noun = list("fangs") + attack_sound = 'sound/weapons/bite.ogg' + shredding = 0 + sharp = TRUE + edge = TRUE + +/datum/unarmed_attack/bite/sharp/numbing/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + var/obj/item/organ/external/affecting = target.get_organ(zone) + + attack_damage = CLAMP(attack_damage, 1, 5) + if(target == user) + user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.name]!") + return 0 //No venom for you. + switch(zone) + if(BP_HEAD, O_MOUTH, O_EYES) + // ----- HEAD ----- // + switch(attack_damage) + if(1 to 2) + user.visible_message("[user]'s fangs scrape across [target]'s cheek!") + to_chat(target, "Your face feels tingly!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) //Have to add this here, otherwise the swtich fails. + if(3 to 4) + user.visible_message("[user]'s fangs pierce into [target]'s neck at an odd, awkward angle!") + to_chat(target, "Your neck feels like it's on fire before going numb!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(5) + user.visible_message("[user] sinks \his [pick(attack_noun)] deep into [target]'s neck, causing the vein to bulge outwards at some type of chemical is pumped into it!") + to_chat(target, "Your neck feels like it's going to burst! Moments later, you simply can't feel your neck any longer, the numbness beginning to spread throughout your body!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + else + // ----- BODY ----- // + switch(attack_damage) + if(1 to 2) + user.visible_message("[user]'s fangs scrape across [target]'s [affecting.name]!") + to_chat(target, "Your [affecting.name] feels tingly!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(3 to 4) + user.visible_message("[user]'s fangs pierce [pick("", "", "the side of")] [target]'s [affecting.name]!") + to_chat(target, "Your [affecting.name] feels like it's on fire before going numb!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(5) + user.visible_message("[user]'s fangs sink deep into [target]'s [affecting.name], one of their veins bulging outwards from the sudden fluid pumped into it!") + to_chat(target, "Your [affecting.name] feels like it's going to burst! Moments later, you simply can't feel your [affecting.name] any longer, the numbness slowly spreading throughout your body!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + +/datum/unarmed_attack/claws/shadekin + +/datum/unarmed_attack/claws/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + ..() + if(!(target == user)) + user.shadekin_adjust_energy(attack_damage) + +/datum/unarmed_attack/bite/sharp/shadekin + +/datum/unarmed_attack/bite/sharp/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + ..() + if(!(target == user)) + user.shadekin_adjust_energy(attack_damage) + +/datum/unarmed_attack/claws/chimera //special feral attack that gets stronger as they get angrier + +/datum/unarmed_attack/claws/chimera/get_unarmed_damage(var/mob/living/carbon/human/user) + return user.feral/5 + +/datum/unarmed_attack/claws/chimera/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) + ..() + if(user.feral && !(target == user)) + var/selfdamage = ((user.feral/10)-7.5) + if(selfdamage > 0) + var/selfdamagezone = null + if (user.hand) + selfdamagezone=pick(BP_L_ARM, BP_L_HAND) + else + selfdamagezone=pick(BP_R_ARM, BP_R_HAND) user.apply_damage(selfdamage, BRUTE, selfdamagezone, 0, 0, sharp=FALSE, edge=FALSE) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm index 2326de811b..c9533a3e3e 100644 --- a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm +++ b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm @@ -1,135 +1,135 @@ -// ### Wooo, inheritance. Basically copying everything I don't need to edit from prometheans, because they mostly work already. -// ### Any and all of this is open to change for balance or whatever. -// ### -// ### -// Species definition follows. -/datum/species/shapeshifter/promethean/avatar - - name = SPECIES_VR - name_plural = "Virtual Reality Avatars" - blurb = "A 3-dimensional representation of some sort of animate object used to display the presence and actions of some-one or -thing using a virtual reality program." - show_ssd = "eerily still" - death_message = "flickers briefly, their gear falling in a heap on the floor around their motionless body." - knockout_message = "has been knocked unconscious!" - - spawn_flags = SPECIES_IS_RESTRICTED - - speech_bubble_appearance = "cyber" - - assisted_langs = list() - - // male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') - // female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg') - // male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' - // female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg' - - valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_VOX, SPECIES_MONKEY, SPECIES_SKELETON) - - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) - has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime, O_EYES = /obj/item/organ/internal/eyes) // Slime core. - heal_rate = 0 // Avatars don't naturally heal like prometheans, at least not for now - inherent_verbs = list( - /mob/living/carbon/human/proc/shapeshifter_select_shape, - /mob/living/carbon/human/proc/shapeshifter_select_colour, - /mob/living/carbon/human/proc/shapeshifter_select_hair, - /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, - /mob/living/carbon/human/proc/shapeshifter_select_gender, - /mob/living/carbon/human/proc/shapeshifter_select_wings, - /mob/living/carbon/human/proc/shapeshifter_select_tail, - /mob/living/carbon/human/proc/shapeshifter_select_ears, - /mob/living/proc/set_size, - /mob/living/carbon/human/proc/regenerate, - /mob/living/carbon/human/proc/promethean_select_opaqueness, - /mob/living/carbon/human/proc/exit_vr - ) - - -/datum/species/shapeshifter/promethean/avatar/handle_death(var/mob/living/carbon/human/H) - return - -/datum/species/shapeshifter/promethean/avatar/handle_environment_special(var/mob/living/carbon/human/H) - return - -/mob/living/carbon/human/proc/shapeshifter_change_opacity() - - set name = "Toggle Opacity" - set category = "Abilities" - - if(stat || world.time < last_special) - return - - last_special = world.time + 10 - - if(src.icon_state == "promethean") - icon_state = lowertext(src.species.get_bodytype(src)) - shapeshifter_change_species("Virtual Reality [src.species.get_bodytype(src)]") - else - icon_state = "promethean" - shapeshifter_change_species(SPECIES_VR) - - -// enter_vr is called on the original mob, and puts the mind into the supplied vr mob -/mob/living/carbon/human/proc/enter_vr(var/mob/living/carbon/human/avatar) // Avatar is currently a human, because we have preexisting setup code for appearance manipulation, etc. - if(!istype(avatar)) - return - - // Link the two mobs for client transfer - avatar.vr_holder = src - src.teleop = avatar - src.vr_link = avatar // Can't reuse vr_holder so that death can automatically eject users from VR - - // Move the mind - // avatar.Sleeping(1) So vox don't drop their can, also feels arbitrary - src.mind.transfer_to(avatar) - to_chat(avatar, "You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting.") //No more prommie VR thing, so removed tidbit about changing appearance - to_chat(avatar, " You black out for a moment, and wake to find yourself in a new body in virtual reality.") // So this is what VR feels like? - -// exit_vr is called on the vr mob, and puts the mind back into the original mob -/mob/living/carbon/human/proc/exit_vr() - set name = "Exit Virtual Reality" - set category = "Abilities" - - if(!vr_holder) - return - if(tfed_into_mob_check()) //CHOMPedit start: make sure we're not TFed and revert if we are before checking for a mind. - var/mob/living/M = loc - if(istype(M)) // Sanity check, though shouldn't be needed since this is already checked by the proc. - M.revert_mob_tf() // CHOMPedit end - - if(!mind) - return - - var/total_damage - // Tally human damage - if(ishuman(src)) - var/mob/living/carbon/human/H = src - total_damage = H.getBruteLoss() + H.getFireLoss() + H.getOxyLoss() + H.getToxLoss() - - // Move the mind back to the original mob -// vr_holder.Sleeping(1) - src.mind.transfer_to(vr_holder) - to_chat(vr_holder, "You black out for a moment, and wake to find yourself back in your own body.") - // Two-thirds damage is transferred as agony for /humans - // Getting hurt in VR doesn't damage the physical body, but you still got hurt. - if(ishuman(vr_holder) && total_damage) - var/mob/living/carbon/human/V = vr_holder - V.stun_effect_act(0, total_damage*2/3, null) // 200 damage leaves the user in paincrit for several seconds, agony reaches 0 after around 2m. - to_chat(vr_holder, "Pain from your time in VR lingers.") // 250 damage leaves the user unconscious for several seconds in addition to paincrit - - // Maintain a link with the mob, but don't use teleop - vr_holder.vr_link = src - vr_holder.teleop = null - - if(istype(vr_holder.loc, /obj/machinery/vr_sleeper)) - var/obj/machinery/vr_sleeper/V = vr_holder.loc - V.go_out() - - if(died_in_vr) - spawn(3000) //Delete the body after 5 minutes to make sure mob subsystem doesn't cry - var/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear) - for(var/slot in slots) - var/obj/item/I = get_equipped_item(slot = slot) - if(I) - unEquip(I,force = TRUE) - release_vore_contents(include_absorbed = TRUE, silent = TRUE) - qdel(src) +// ### Wooo, inheritance. Basically copying everything I don't need to edit from prometheans, because they mostly work already. +// ### Any and all of this is open to change for balance or whatever. +// ### +// ### +// Species definition follows. +/datum/species/shapeshifter/promethean/avatar + + name = SPECIES_VR + name_plural = "Virtual Reality Avatars" + blurb = "A 3-dimensional representation of some sort of animate object used to display the presence and actions of some-one or -thing using a virtual reality program." + show_ssd = "eerily still" + death_message = "flickers briefly, their gear falling in a heap on the floor around their motionless body." + knockout_message = "has been knocked unconscious!" + + spawn_flags = SPECIES_IS_RESTRICTED + + speech_bubble_appearance = "cyber" + + assisted_langs = list() + + // male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') + // female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg') + // male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' + // female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg' + + valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_VOX, SPECIES_MONKEY, SPECIES_SKELETON) + + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) + has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime, O_EYES = /obj/item/organ/internal/eyes) // Slime core. + heal_rate = 0 // Avatars don't naturally heal like prometheans, at least not for now + inherent_verbs = list( + /mob/living/carbon/human/proc/shapeshifter_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_colour, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, + /mob/living/carbon/human/proc/shapeshifter_select_gender, + /mob/living/carbon/human/proc/shapeshifter_select_wings, + /mob/living/carbon/human/proc/shapeshifter_select_tail, + /mob/living/carbon/human/proc/shapeshifter_select_ears, + /mob/living/proc/set_size, + /mob/living/carbon/human/proc/regenerate, + /mob/living/carbon/human/proc/promethean_select_opaqueness, + /mob/living/carbon/human/proc/exit_vr + ) + + +/datum/species/shapeshifter/promethean/avatar/handle_death(var/mob/living/carbon/human/H) + return + +/datum/species/shapeshifter/promethean/avatar/handle_environment_special(var/mob/living/carbon/human/H) + return + +/mob/living/carbon/human/proc/shapeshifter_change_opacity() + + set name = "Toggle Opacity" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 10 + + if(src.icon_state == "promethean") + icon_state = lowertext(src.species.get_bodytype(src)) + shapeshifter_change_species("Virtual Reality [src.species.get_bodytype(src)]") + else + icon_state = "promethean" + shapeshifter_change_species(SPECIES_VR) + + +// enter_vr is called on the original mob, and puts the mind into the supplied vr mob +/mob/living/carbon/human/proc/enter_vr(var/mob/living/carbon/human/avatar) // Avatar is currently a human, because we have preexisting setup code for appearance manipulation, etc. + if(!istype(avatar)) + return + + // Link the two mobs for client transfer + avatar.vr_holder = src + src.teleop = avatar + src.vr_link = avatar // Can't reuse vr_holder so that death can automatically eject users from VR + + // Move the mind + // avatar.Sleeping(1) So vox don't drop their can, also feels arbitrary + src.mind.transfer_to(avatar) + to_chat(avatar, "You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting.") //No more prommie VR thing, so removed tidbit about changing appearance + to_chat(avatar, " You black out for a moment, and wake to find yourself in a new body in virtual reality.") // So this is what VR feels like? + +// exit_vr is called on the vr mob, and puts the mind back into the original mob +/mob/living/carbon/human/proc/exit_vr() + set name = "Exit Virtual Reality" + set category = "Abilities" + + if(!vr_holder) + return + if(tfed_into_mob_check()) //CHOMPedit start: make sure we're not TFed and revert if we are before checking for a mind. + var/mob/living/M = loc + if(istype(M)) // Sanity check, though shouldn't be needed since this is already checked by the proc. + M.revert_mob_tf() // CHOMPedit end + + if(!mind) + return + + var/total_damage + // Tally human damage + if(ishuman(src)) + var/mob/living/carbon/human/H = src + total_damage = H.getBruteLoss() + H.getFireLoss() + H.getOxyLoss() + H.getToxLoss() + + // Move the mind back to the original mob +// vr_holder.Sleeping(1) + src.mind.transfer_to(vr_holder) + to_chat(vr_holder, "You black out for a moment, and wake to find yourself back in your own body.") + // Two-thirds damage is transferred as agony for /humans + // Getting hurt in VR doesn't damage the physical body, but you still got hurt. + if(ishuman(vr_holder) && total_damage) + var/mob/living/carbon/human/V = vr_holder + V.stun_effect_act(0, total_damage*2/3, null) // 200 damage leaves the user in paincrit for several seconds, agony reaches 0 after around 2m. + to_chat(vr_holder, "Pain from your time in VR lingers.") // 250 damage leaves the user unconscious for several seconds in addition to paincrit + + // Maintain a link with the mob, but don't use teleop + vr_holder.vr_link = src + vr_holder.teleop = null + + if(istype(vr_holder.loc, /obj/machinery/vr_sleeper)) + var/obj/machinery/vr_sleeper/V = vr_holder.loc + V.go_out() + + if(died_in_vr) + spawn(3000) //Delete the body after 5 minutes to make sure mob subsystem doesn't cry + var/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear) + for(var/slot in slots) + var/obj/item/I = get_equipped_item(slot = slot) + if(I) + unEquip(I,force = TRUE) + release_vore_contents(include_absorbed = TRUE, silent = TRUE) + qdel(src) diff --git a/code/modules/mob/living/carbon/human/species/virtual_reality/opaque_form.dm b/code/modules/mob/living/carbon/human/species/virtual_reality/opaque_form.dm index 43210407bc..c9aa8a9a33 100644 --- a/code/modules/mob/living/carbon/human/species/virtual_reality/opaque_form.dm +++ b/code/modules/mob/living/carbon/human/species/virtual_reality/opaque_form.dm @@ -1,181 +1,181 @@ -// Species for the opaque appearance -// Due to sprite construction, they have to have separate limb lists - -/datum/species/shapeshifter/promethean/avatar/human - name = "Virtual Reality Human" - icobase = 'icons/mob/human_races/r_human.dmi' - deform = 'icons/mob/human_races/r_def_human.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/unathi - name = "Virtual Reality Unathi" - icobase = 'icons/mob/human_races/r_lizard.dmi' - deform = 'icons/mob/human_races/r_def_lizard.dmi' - tail = "sogtail" - tail_animation = 'icons/mob/species/unathi/tail.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest/unathi), - BP_GROIN = list("path" = /obj/item/organ/external/groin/unathi), - BP_HEAD = list("path" = /obj/item/organ/external/head/unathi), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/tajaran - name = "Virtual Reality Tajaran" - icobase = 'icons/mob/human_races/r_tajaran.dmi' - deform = 'icons/mob/human_races/r_def_tajaran.dmi' - tail = "tajtail" - tail_animation = 'icons/mob/species/tajaran/tail.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/skrell - name = "Virtual Reality Skrell" - icobase = 'icons/mob/human_races/r_skrell.dmi' - deform = 'icons/mob/human_races/r_def_skrell.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/skrell), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/teshari - name = "Virtual Reality Teshari" - icobase = 'icons/mob/human_races/r_teshari.dmi' - deform = 'icons/mob/human_races/r_teshari.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/teshari), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/teshari), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/teshari), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/teshari), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/teshari) - ) - -/datum/species/shapeshifter/promethean/avatar/diona - name = "Virtual Reality Diona" - icobase = 'icons/mob/human_races/r_diona.dmi' - deform = 'icons/mob/human_races/r_def_plant.dmi' - appearance_flags = 0 - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/diona/chest), - BP_GROIN = list("path" = /obj/item/organ/external/diona/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes/diona), - BP_L_ARM = list("path" = /obj/item/organ/external/diona/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/diona/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/diona/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/diona/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/diona/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/diona/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/diona/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/diona/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/monkey - name = "Virtual Reality Monkey" - icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi' - deform = 'icons/mob/human_races/monkeys/r_monkey.dmi' - damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' - damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' - blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' - fire_icon_state = "monkey" - appearance_flags = 0 - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/vox - name = "Virtual Reality Vox" - icobase = 'icons/mob/human_races/r_vox.dmi' - deform = 'icons/mob/human_races/r_def_vox.dmi' - appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/vox), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/shapeshifter/promethean/avatar/skeleton - name = "Virtual Reality Skeleton" - icobase = 'icons/mob/human_races/r_skeleton.dmi' - deform = 'icons/mob/human_races/r_skeleton.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) +// Species for the opaque appearance +// Due to sprite construction, they have to have separate limb lists + +/datum/species/shapeshifter/promethean/avatar/human + name = "Virtual Reality Human" + icobase = 'icons/mob/human_races/r_human.dmi' + deform = 'icons/mob/human_races/r_def_human.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/unathi + name = "Virtual Reality Unathi" + icobase = 'icons/mob/human_races/r_lizard.dmi' + deform = 'icons/mob/human_races/r_def_lizard.dmi' + tail = "sogtail" + tail_animation = 'icons/mob/species/unathi/tail.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest/unathi), + BP_GROIN = list("path" = /obj/item/organ/external/groin/unathi), + BP_HEAD = list("path" = /obj/item/organ/external/head/unathi), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/tajaran + name = "Virtual Reality Tajaran" + icobase = 'icons/mob/human_races/r_tajaran.dmi' + deform = 'icons/mob/human_races/r_def_tajaran.dmi' + tail = "tajtail" + tail_animation = 'icons/mob/species/tajaran/tail.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/skrell + name = "Virtual Reality Skrell" + icobase = 'icons/mob/human_races/r_skrell.dmi' + deform = 'icons/mob/human_races/r_def_skrell.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/skrell), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/teshari + name = "Virtual Reality Teshari" + icobase = 'icons/mob/human_races/r_teshari.dmi' + deform = 'icons/mob/human_races/r_teshari.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/teshari), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/teshari), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/teshari), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/teshari), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/teshari) + ) + +/datum/species/shapeshifter/promethean/avatar/diona + name = "Virtual Reality Diona" + icobase = 'icons/mob/human_races/r_diona.dmi' + deform = 'icons/mob/human_races/r_def_plant.dmi' + appearance_flags = 0 + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/diona/chest), + BP_GROIN = list("path" = /obj/item/organ/external/diona/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes/diona), + BP_L_ARM = list("path" = /obj/item/organ/external/diona/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/diona/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/diona/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/diona/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/diona/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/diona/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/diona/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/diona/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/monkey + name = "Virtual Reality Monkey" + icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi' + deform = 'icons/mob/human_races/monkeys/r_monkey.dmi' + damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' + damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' + blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' + fire_icon_state = "monkey" + appearance_flags = 0 + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/vox + name = "Virtual Reality Vox" + icobase = 'icons/mob/human_races/r_vox.dmi' + deform = 'icons/mob/human_races/r_def_vox.dmi' + appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/vox), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + +/datum/species/shapeshifter/promethean/avatar/skeleton + name = "Virtual Reality Skeleton" + icobase = 'icons/mob/human_races/r_skeleton.dmi' + deform = 'icons/mob/human_races/r_skeleton.dmi' + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index e8c38208b2..02a5eda302 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -1,198 +1,198 @@ -/mob/living/carbon/human/proc/handle_strip(var/slot_to_strip,var/mob/living/user) - - if(!slot_to_strip || !istype(user)) - return - - if(user.incapacitated() || !user.Adjacent(src)) - user << browse(null, text("window=mob[src.name]")) - return - - var/obj/item/target_slot = get_equipped_item(text2num(slot_to_strip)) - - switch(slot_to_strip) - // Handle things that are part of this interface but not removing/replacing a given item. - if("pockets") - visible_message("\The [user] is trying to empty \the [src]'s pockets!") - if(do_after(user,HUMAN_STRIP_DELAY,src)) - empty_pockets(user) - return - if("splints") - visible_message("\The [user] is trying to remove \the [src]'s splints!") - if(do_after(user,HUMAN_STRIP_DELAY,src)) - remove_splints(user) - return - if("sensors") - visible_message("\The [user] is trying to set \the [src]'s sensors!") - if(do_after(user,HUMAN_STRIP_DELAY,src)) - toggle_sensors(user) - return - if("internals") - visible_message("\The [usr] is trying to set \the [src]'s internals!") - if(do_after(user,HUMAN_STRIP_DELAY,src)) - toggle_internals(user) - return - if("tie") - var/obj/item/clothing/under/suit = w_uniform - if(!istype(suit) || !LAZYLEN(suit.accessories)) - return - var/obj/item/clothing/accessory/A = suit.accessories[1] - if(!istype(A)) - return - visible_message("\The [usr] is trying to remove \the [src]'s [A.name]!") - - if(!do_after(user,HUMAN_STRIP_DELAY,src)) - return - - if(!A || suit.loc != src || !(A in suit.accessories)) - return - - if(istype(A, /obj/item/clothing/accessory/badge) || istype(A, /obj/item/clothing/accessory/medal)) - user.visible_message("\The [user] tears off \the [A] from [src]'s [suit.name]!") - add_attack_logs(user,src,"Stripped [A.name] off [suit.name]") - A.on_removed(user) - suit.accessories -= A - update_inv_w_uniform() - return - - // Are we placing or stripping? - var/stripping - var/obj/item/held = user.get_active_hand() - if(!istype(held) || is_robot_module(held)) - stripping = TRUE - //CHOMPEdit Start - Let borg grippers put stuff on. - if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper)) - var/obj/item/weapon/gripper/G = held - if(istype(G.wrapped)) - stripping = FALSE - //CHOMPEdit End - else - var/obj/item/weapon/holder/holder = held - if(istype(holder) && src == holder.held_mob) - stripping = TRUE - else - var/obj/item/weapon/grab/grab = held - if(istype(grab) && grab.affecting == src) - stripping = TRUE - - if(stripping) - if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here? - return - if(!target_slot.canremove) - to_chat(user, "You cannot remove \the [src]'s [target_slot.name].") - return - visible_message("\The [user] is trying to remove \the [src]'s [target_slot.name]!") - else if(!istype(held, /obj/item/weapon/gripper)) //CHOMPEdit - Let borg grippers put stuff on. - if(slot_to_strip == slot_wear_mask && istype(held, /obj/item/weapon/grenade)) - visible_message("\The [user] is trying to put \a [held] in \the [src]'s mouth!") - else - visible_message("\The [user] is trying to put \a [held] on \the [src]!") - //CHOMPEdit Start - Let borg grippers put stuff on. - else - var/obj/item/weapon/gripper/G = held - if(slot_to_strip == slot_wear_mask && istype(G.wrapped, /obj/item/weapon/grenade)) - visible_message("\The [user] is trying to put \a [G.wrapped] in \the [src]'s mouth!") - else - visible_message("\The [user] is trying to put \a [G.wrapped] on \the [src]!") - //CHOMPEdit End - - if(!do_after(user,HUMAN_STRIP_DELAY,src)) - return - - if(!stripping) - if(user.get_active_hand() != held) - return - var/obj/item/weapon/holder/mobheld = held - if(istype(mobheld)&&mobheld.held_mob==src) - to_chat(user, "You can't put someone on themselves! Stop trying to break reality!") - return - - if(stripping) - add_attack_logs(user,src,"Removed equipment from slot [target_slot]") - unEquip(target_slot) - //CHOMPEdit Start - Let borg grippers put stuff on. - else if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper)) - var/obj/item/weapon/gripper/G = held - var/obj/item/wrapped = G.wrapped - if(istype(wrapped)) - G.drop_item_nm() - equip_to_slot_if_possible(wrapped, text2num(slot_to_strip), 0, 1, 1) - //CHOMPEdit End - else if(user.unEquip(held)) - equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1) - if(held.loc != src) - user.put_in_hands(held) - -// Empty out everything in the target's pockets. -/mob/living/carbon/human/proc/empty_pockets(var/mob/living/user) - if(!r_store && !l_store) - to_chat(user, "\The [src] has nothing in their pockets.") - return - if(r_store) - unEquip(r_store) - if(l_store) - unEquip(l_store) - visible_message("\The [user] empties \the [src]'s pockets!") - -// Modify the current target sensor level. -/mob/living/carbon/human/proc/toggle_sensors(var/mob/living/user) - var/obj/item/clothing/under/suit = w_uniform - if(!suit) - to_chat(user, "\The [src] is not wearing a suit with sensors.") - return - if (suit.has_sensor >= 2) - to_chat(user, "\The [src]'s suit sensor controls are locked.") - return - add_attack_logs(user,src,"Adjusted suit sensor level") - suit.set_sensors(user) - -// Remove all splints. -/mob/living/carbon/human/proc/remove_splints(var/mob/living/user) - - var/can_reach_splints = 1 - if(istype(wear_suit,/obj/item/clothing/suit/space)) - var/obj/item/clothing/suit/space/suit = wear_suit - if(suit.supporting_limbs && suit.supporting_limbs.len) - to_chat(user, "You cannot remove the splints - [src]'s [suit] is supporting some of the breaks.") - can_reach_splints = 0 - - if(can_reach_splints) - var/removed_splint - for(var/obj/item/organ/external/o in organs) - if (o && o.splinted) - var/obj/item/S = o.splinted - if(istype(S) && S.loc == o) //can only remove splints that are actually worn on the organ (deals with hardsuit splints) - S.add_fingerprint(user) - if(o.remove_splint()) - user.put_in_active_hand(S) - removed_splint = 1 - if(removed_splint) - visible_message("\The [user] removes \the [src]'s splints!") - else - to_chat(user, "\The [src] has no splints to remove.") - -// Set internals on or off. -/mob/living/carbon/human/proc/toggle_internals(var/mob/living/user) - if(internal) - internal.add_fingerprint(user) - internal = null - if(internals) - internals.icon_state = "internal0" - else - // Check for airtight mask/helmet. - if(!(istype(wear_mask, /obj/item/clothing/mask) || istype(head, /obj/item/clothing/head/helmet/space))) - return - // Find an internal source. - if(istype(back, /obj/item/weapon/tank)) - internal = back - else if(istype(s_store, /obj/item/weapon/tank)) - internal = s_store - else if(istype(belt, /obj/item/weapon/tank)) - internal = belt - - if(internal) - visible_message("\The [src] is now running on internals!") - internal.add_fingerprint(user) - if (internals) - internals.icon_state = "internal1" - else - visible_message("\The [user] disables \the [src]'s internals!") +/mob/living/carbon/human/proc/handle_strip(var/slot_to_strip,var/mob/living/user) + + if(!slot_to_strip || !istype(user)) + return + + if(user.incapacitated() || !user.Adjacent(src)) + user << browse(null, text("window=mob[src.name]")) + return + + var/obj/item/target_slot = get_equipped_item(text2num(slot_to_strip)) + + switch(slot_to_strip) + // Handle things that are part of this interface but not removing/replacing a given item. + if("pockets") + visible_message("\The [user] is trying to empty \the [src]'s pockets!") + if(do_after(user,HUMAN_STRIP_DELAY,src)) + empty_pockets(user) + return + if("splints") + visible_message("\The [user] is trying to remove \the [src]'s splints!") + if(do_after(user,HUMAN_STRIP_DELAY,src)) + remove_splints(user) + return + if("sensors") + visible_message("\The [user] is trying to set \the [src]'s sensors!") + if(do_after(user,HUMAN_STRIP_DELAY,src)) + toggle_sensors(user) + return + if("internals") + visible_message("\The [usr] is trying to set \the [src]'s internals!") + if(do_after(user,HUMAN_STRIP_DELAY,src)) + toggle_internals(user) + return + if("tie") + var/obj/item/clothing/under/suit = w_uniform + if(!istype(suit) || !LAZYLEN(suit.accessories)) + return + var/obj/item/clothing/accessory/A = suit.accessories[1] + if(!istype(A)) + return + visible_message("\The [usr] is trying to remove \the [src]'s [A.name]!") + + if(!do_after(user,HUMAN_STRIP_DELAY,src)) + return + + if(!A || suit.loc != src || !(A in suit.accessories)) + return + + if(istype(A, /obj/item/clothing/accessory/badge) || istype(A, /obj/item/clothing/accessory/medal)) + user.visible_message("\The [user] tears off \the [A] from [src]'s [suit.name]!") + add_attack_logs(user,src,"Stripped [A.name] off [suit.name]") + A.on_removed(user) + suit.accessories -= A + update_inv_w_uniform() + return + + // Are we placing or stripping? + var/stripping + var/obj/item/held = user.get_active_hand() + if(!istype(held) || is_robot_module(held)) + stripping = TRUE + //CHOMPEdit Start - Let borg grippers put stuff on. + if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = held + if(istype(G.wrapped)) + stripping = FALSE + //CHOMPEdit End + else + var/obj/item/weapon/holder/holder = held + if(istype(holder) && src == holder.held_mob) + stripping = TRUE + else + var/obj/item/weapon/grab/grab = held + if(istype(grab) && grab.affecting == src) + stripping = TRUE + + if(stripping) + if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here? + return + if(!target_slot.canremove) + to_chat(user, "You cannot remove \the [src]'s [target_slot.name].") + return + visible_message("\The [user] is trying to remove \the [src]'s [target_slot.name]!") + else if(!istype(held, /obj/item/weapon/gripper)) //CHOMPEdit - Let borg grippers put stuff on. + if(slot_to_strip == slot_wear_mask && istype(held, /obj/item/weapon/grenade)) + visible_message("\The [user] is trying to put \a [held] in \the [src]'s mouth!") + else + visible_message("\The [user] is trying to put \a [held] on \the [src]!") + //CHOMPEdit Start - Let borg grippers put stuff on. + else + var/obj/item/weapon/gripper/G = held + if(slot_to_strip == slot_wear_mask && istype(G.wrapped, /obj/item/weapon/grenade)) + visible_message("\The [user] is trying to put \a [G.wrapped] in \the [src]'s mouth!") + else + visible_message("\The [user] is trying to put \a [G.wrapped] on \the [src]!") + //CHOMPEdit End + + if(!do_after(user,HUMAN_STRIP_DELAY,src)) + return + + if(!stripping) + if(user.get_active_hand() != held) + return + var/obj/item/weapon/holder/mobheld = held + if(istype(mobheld)&&mobheld.held_mob==src) + to_chat(user, "You can't put someone on themselves! Stop trying to break reality!") + return + + if(stripping) + add_attack_logs(user,src,"Removed equipment from slot [target_slot]") + unEquip(target_slot) + //CHOMPEdit Start - Let borg grippers put stuff on. + else if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = held + var/obj/item/wrapped = G.wrapped + if(istype(wrapped)) + G.drop_item_nm() + equip_to_slot_if_possible(wrapped, text2num(slot_to_strip), 0, 1, 1) + //CHOMPEdit End + else if(user.unEquip(held)) + equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1) + if(held.loc != src) + user.put_in_hands(held) + +// Empty out everything in the target's pockets. +/mob/living/carbon/human/proc/empty_pockets(var/mob/living/user) + if(!r_store && !l_store) + to_chat(user, "\The [src] has nothing in their pockets.") + return + if(r_store) + unEquip(r_store) + if(l_store) + unEquip(l_store) + visible_message("\The [user] empties \the [src]'s pockets!") + +// Modify the current target sensor level. +/mob/living/carbon/human/proc/toggle_sensors(var/mob/living/user) + var/obj/item/clothing/under/suit = w_uniform + if(!suit) + to_chat(user, "\The [src] is not wearing a suit with sensors.") + return + if (suit.has_sensor >= 2) + to_chat(user, "\The [src]'s suit sensor controls are locked.") + return + add_attack_logs(user,src,"Adjusted suit sensor level") + suit.set_sensors(user) + +// Remove all splints. +/mob/living/carbon/human/proc/remove_splints(var/mob/living/user) + + var/can_reach_splints = 1 + if(istype(wear_suit,/obj/item/clothing/suit/space)) + var/obj/item/clothing/suit/space/suit = wear_suit + if(suit.supporting_limbs && suit.supporting_limbs.len) + to_chat(user, "You cannot remove the splints - [src]'s [suit] is supporting some of the breaks.") + can_reach_splints = 0 + + if(can_reach_splints) + var/removed_splint + for(var/obj/item/organ/external/o in organs) + if (o && o.splinted) + var/obj/item/S = o.splinted + if(istype(S) && S.loc == o) //can only remove splints that are actually worn on the organ (deals with hardsuit splints) + S.add_fingerprint(user) + if(o.remove_splint()) + user.put_in_active_hand(S) + removed_splint = 1 + if(removed_splint) + visible_message("\The [user] removes \the [src]'s splints!") + else + to_chat(user, "\The [src] has no splints to remove.") + +// Set internals on or off. +/mob/living/carbon/human/proc/toggle_internals(var/mob/living/user) + if(internal) + internal.add_fingerprint(user) + internal = null + if(internals) + internals.icon_state = "internal0" + else + // Check for airtight mask/helmet. + if(!(istype(wear_mask, /obj/item/clothing/mask) || istype(head, /obj/item/clothing/head/helmet/space))) + return + // Find an internal source. + if(istype(back, /obj/item/weapon/tank)) + internal = back + else if(istype(s_store, /obj/item/weapon/tank)) + internal = s_store + else if(istype(belt, /obj/item/weapon/tank)) + internal = belt + + if(internal) + visible_message("\The [src] is now running on internals!") + internal.add_fingerprint(user) + if (internals) + internals.icon_state = "internal1" + else + visible_message("\The [user] disables \the [src]'s internals!") diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index cbdf80c1eb..f257a5724b 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,1476 +1,1476 @@ -/* - Global associative list for caching humanoid icons. - Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. -*/ -var/global/list/human_icon_cache = list() //key is incredibly complex, see update_icons_body() -var/global/list/tail_icon_cache = list() //key is [species.race_key][r_skin][g_skin][b_skin] -var/global/list/wing_icon_cache = list() // See tail. -var/global/list/light_overlay_cache = list() //see make_worn_icon() on helmets -var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() - -//////////////////////////////////////////////////////////////////////////////////////////////// -// # Human Icon Updating System -// -// This system takes care of the "icon" for human mobs. Of course humans don't just have a single -// icon+icon_state, but a combination of dozens of little sprites including including the body, -// clothing, equipment, in-universe HUD images, etc. -// -// # Basic Operation -// Whenever you do something that should update the on-mob appearance of a worn or held item, You -// will need to call the relevant update_inv_* proc. All of these are named after the variable they -// update from. They are defined at the /mob level so you don't even need to cast to carbon/human. -// -// The new system leverages SSoverlays to actually add/remove the overlays from mob.overlays -// Since SSoverlays already manages batching updates to reduce apperance churn etc, we don't need -// to worry about that. (In short, you can call add/cut overlay as many times as you want, it will -// only get assigned to the mob once per tick.) -// As a corrolary, this means users of this system do NOT need to tell the system when you're done -// making changes. -// -// There are also these special cases: -// update_icons_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc -// UpdateDamageIcon() //Handles damage overlays for brute/burn damage //(will rename this when I geta round to it) ~Carn -// update_skin() //Handles updating skin for species that have a skin overlay. -// update_bloodied() //Handles adding/clearing the blood overlays for hands & feet. Call when bloodied or cleaned. -// update_underwear() //Handles updating the sprite for underwear. -// update_hair() //Handles updating your hair and eyes overlay -// update_mutations() //Handles updating your appearance for certain mutations. e.g TK head-glows -// update_fire() //Handles overlay from being on fire. -// update_water() //Handles overlay from being submerged. -// update_surgery() //Handles overlays from open external organs. -// -// # History (i.e. I'm used to the old way, what is different?) -// You used to have to call update_icons(FALSE) if you planned to make more changes, and call update_icons(TRUE) -// on the final update. All that is gone, just call update_inv_whatever() and it handles the rest. -// -//////////////////////////////////////////////////////////////////////////////////////////////// - -//Add an entry to overlays, assuming it exists -/mob/living/carbon/human/proc/apply_layer(cache_index) - if((. = overlays_standing[cache_index])) - add_overlay(.) - -//Remove an entry from overlays, and from the list -/mob/living/carbon/human/proc/remove_layer(cache_index) - var/I = overlays_standing[cache_index] - if(I) - cut_overlay(I) - overlays_standing[cache_index] = null - -// These are used as the layers for the icons, as well as indexes in a list that holds onto them. -// Technically the layers used are all -100+layer to make them FLOAT_LAYER overlays. -//CHOMPEDIT: edit the file human/update_icons.dm in the modular_chomp folder as well, if you update these (and clothing/clothing.dm line 789, the hardcoded layer there in /obj/item/clothing/suit/make_worn_icon) -//Human Overlays Indexes///////// -#define MUTATIONS_LAYER 1 //Mutations like fat, and lasereyes -#define TAIL_LOWER_LAYER 2 //Tail as viewed from the south //CHOMPStation edit - underneath bodyparts -#define WING_LOWER_LAYER 3 //Wings as viewed from the south //CHOMPStation edit - underneath bodyparts -#define BODYPARTS_LAYER 4 //Bodyparts layer - CHOMPStation edit -#define SKIN_LAYER 5 //Skin things added by a call on species -#define BLOOD_LAYER 6 //Bloodied hands/feet/anything else -#define MOB_DAM_LAYER 7 //Injury overlay sprites like open wounds -#define SURGERY_LAYER 8 //Overlays for open surgical sites -#define UNDERWEAR_LAYER 9 //Underwear/bras/etc -#define SHOES_LAYER_ALT 10 //Shoe-slot item (when set to be under uniform via verb) -#define UNIFORM_LAYER 11 //Uniform-slot item -#define ID_LAYER 12 //ID-slot item -#define SHOES_LAYER 13 //Shoe-slot item -#define GLOVES_LAYER 14 //Glove-slot item -#define BELT_LAYER 15 //Belt-slot item -#define SUIT_LAYER 16 //Suit-slot item -#define TAIL_UPPER_LAYER 17 //Some species have tails to render (As viewed from the N, E, or W) -#define GLASSES_LAYER 18 //Eye-slot item -#define BELT_LAYER_ALT 19 //Belt-slot item (when set to be above suit via verb) -#define SUIT_STORE_LAYER 20 //Suit storage-slot item -#define BACK_LAYER 21 //Back-slot item -#define HAIR_LAYER 22 //The human's hair -#define HAIR_ACCESSORY_LAYER 23 //VOREStation edit. Simply move this up a number if things are added. -#define EARS_LAYER 24 //Both ear-slot items (combined image) -#define EYES_LAYER 25 //Mob's eyes (used for glowing eyes) -#define FACEMASK_LAYER 26 //Mask-slot item -#define GLASSES_LAYER_ALT 27 //So some glasses can appear on top of hair and things -#define HEAD_LAYER 28 //Head-slot item -#define HANDCUFF_LAYER 29 //Handcuffs, if the human is handcuffed, in a secret inv slot -#define LEGCUFF_LAYER 30 //Same as handcuffs, for legcuffs -#define L_HAND_LAYER 31 //Left-hand item -#define R_HAND_LAYER 32 //Right-hand item -#define WING_LAYER 33 //Wings or protrusions over the suit. -#define VORE_BELLY_LAYER 34 //CHOMPStation edit - Move this and everything after up if things are added. -#define VORE_TAIL_LAYER 35 //CHOMPStation edit - Move this and everything after up if things are added. -#define TAIL_UPPER_LAYER_ALT 36 //Modified tail-sprite layer. Tend to be larger. -#define MODIFIER_EFFECTS_LAYER 37 //Effects drawn by modifiers -#define FIRE_LAYER 38 //'Mob on fire' overlay layer -#define MOB_WATER_LAYER 39 //'Mob submerged' overlay layer -#define TARGETED_LAYER 40 //'Aimed at' overlay layer -#define TOTAL_LAYERS 40 //CHOMPStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. -////////////////////////////////// - -//These two are only used for gargoyles currently -#define HUMAN_BODY_LAYERS list(MUTATIONS_LAYER, TAIL_LOWER_LAYER, WING_LOWER_LAYER, BODYPARTS_LAYER, SKIN_LAYER, BLOOD_LAYER, MOB_DAM_LAYER, TAIL_UPPER_LAYER, HAIR_LAYER, HAIR_ACCESSORY_LAYER, EYES_LAYER, WING_LAYER, VORE_BELLY_LAYER, VORE_TAIL_LAYER, TAIL_UPPER_LAYER_ALT) -#define HUMAN_OTHER_LAYERS list(MODIFIER_EFFECTS_LAYER, FIRE_LAYER, MOB_WATER_LAYER, TARGETED_LAYER) - -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - -//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING -//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. -/mob/living/carbon/human/update_icons() - if(QDESTROYING(src)) - return - - stack_trace("CANARY: Old human update_icons was called.") - - update_hud() //TODO: remove the need for this - - //Do any species specific layering updates, such as when hiding. - update_icon_special() - -/mob/living/carbon/human/update_transform(var/instant = FALSE) - /* VOREStation Edit START - // First, get the correct size. - var/desired_scale_x = icon_scale_x - var/desired_scale_y = icon_scale_y - - desired_scale_x *= species.icon_scale_x - desired_scale_y *= species.icon_scale_y - - for(var/datum/modifier/M in modifiers) - if(!isnull(M.icon_scale_x_percent)) - desired_scale_x *= M.icon_scale_x_percent - if(!isnull(M.icon_scale_y_percent)) - desired_scale_y *= M.icon_scale_y_percent - */ - var/desired_scale_x = size_multiplier * icon_scale_x - var/desired_scale_y = size_multiplier * icon_scale_y - desired_scale_x *= species.icon_scale_x - desired_scale_y *= species.icon_scale_y - var/cent_offset = species.center_offset - if(fuzzy || offset_override || dir == EAST || dir == WEST) - cent_offset = 0 - vis_height = species.icon_height - appearance_flags |= PIXEL_SCALE - if(fuzzy) - appearance_flags &= ~PIXEL_SCALE - center_offset = 0 //CHOMPEdit - //VOREStation Edit End - - // Regular stuff again. - var/matrix/M = matrix() - var/anim_time = 3 - - //Due to some involuntary means, you're laying now - if(lying && !resting && !sleeping) - anim_time = 1 //Thud - - if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. - // CHOMPEdit Start Loafy Time - if(tail_style?.can_loaf && resting) // Only call these if we're resting? - update_tail_showing() - M.Scale(desired_scale_x, desired_scale_y) - M.Translate(cent_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) //CHOMPEdit - else - M.Scale(desired_scale_x, desired_scale_y) - if(isnull(resting_dir)) - resting_dir = pick(FALSE, TRUE) - if(resting_dir) - M.Translate((1 / desired_scale_x * -4) + (desired_scale_x * cent_offset), 0) - M.Turn(-90) - else - M.Translate((1 / desired_scale_x * 4) - (desired_scale_x * cent_offset), 0) - M.Turn(90) - // CHOMPEdit End - layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters - else - M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit - M.Translate(cent_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) - if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing - update_tail_showing() // VOREStation Edit: Taur Loafing - layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters - - if(instant) - transform = M - else - animate(src, transform = M, time = anim_time) - update_icon_special() //May contain transform-altering things - -//DAMAGE OVERLAYS -//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon() - if(QDESTROYING(src)) - return - - remove_layer(MOB_DAM_LAYER) - - // first check whether something actually changed about damage appearance - var/damage_appearance = "" - - for(var/obj/item/organ/external/O in organs) - if(isnull(O) || O.is_stump()) - continue - damage_appearance += O.damage_state - - if(damage_appearance == previous_damage_appearance) - // nothing to do here - return - - previous_damage_appearance = damage_appearance - - var/image/standing_image = image(icon = species.damage_overlays, icon_state = "00", layer = BODY_LAYER+MOB_DAM_LAYER) - - // blend the individual damage states with our icons - for(var/obj/item/organ/external/O in organs) - if(isnull(O) || O.is_stump() || O.is_hidden_by_sprite_accessory()) - continue - - O.update_icon() - if(O.damage_state == "00") continue - var/icon/DI - var/cache_index = "[O.damage_state]/[O.icon_name]/[species.get_blood_colour(src)]/[species.get_bodytype(src)]" - if(damage_icon_parts[cache_index] == null) - DI = icon(species.get_damage_overlays(src), O.damage_state) // the damage icon for whole human - DI.Blend(icon(species.get_damage_mask(src), O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(species.get_blood_colour(src), ICON_MULTIPLY) - damage_icon_parts[cache_index] = DI - else - DI = damage_icon_parts[cache_index] - - standing_image.add_overlay(DI) - - overlays_standing[MOB_DAM_LAYER] = standing_image - apply_layer(MOB_DAM_LAYER) - -//BASE MOB SPRITE -/mob/living/carbon/human/update_icons_body() - if(QDESTROYING(src)) - return - - remove_layer(BODYPARTS_LAYER) - - var/husk_color_mod = rgb(96,88,80) - var/hulk_color_mod = rgb(48,224,40) - - var/husk = (HUSK in src.mutations) - var/fat = (FAT in src.mutations) - var/hulk = (HULK in src.mutations) - var/skeleton = (SKELETON in src.mutations) - - robolimb_count = 0 //TODO, here, really tho? - robobody_count = 0 - - //CACHING: Generate an index key from visible bodyparts. - //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - - //Create a new, blank icon for our mob to use. - var/icon/stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") - - var/g = (gender == MALE ? "male" : "female") - var/icon_key = "[species.get_race_key(src)][g][s_tone][r_skin][g_skin][b_skin]" - if(lip_style) - icon_key += "[lip_style]" - else - icon_key += "nolips" - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES] - if(eyes) - icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" - else - icon_key += "[r_eyes], [g_eyes], [b_eyes]" - var/obj/item/organ/external/head/head = organs_by_name[BP_HEAD] - if(head) - if(!istype(head, /obj/item/organ/external/stump)) - if (species.selects_bodytype != SELECTS_BODYTYPE_FALSE) - var/headtype = GLOB.all_species[species.base_species]?.has_limbs[BP_HEAD] - var/obj/item/organ/external/head/headtypepath = headtype["path"] - if (headtypepath && !head.eye_icon_override) - head.eye_icon = initial(headtypepath.eye_icon) - head.eye_icon_location = initial(headtypepath.eye_icon_location) - icon_key += "[head.eye_icon]" - var/wholeicontransparent = TRUE - for(var/organ_tag in species.has_limbs) - var/obj/item/organ/external/part = organs_by_name[organ_tag] - if(isnull(part) || part.is_stump() || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff. - icon_key += "0" - continue - if(part) - wholeicontransparent &&= part.transparent //VORESTATION EDIT: transparent instead of nonsolid - icon_key += "[part.species.get_race_key(part.owner)]" - icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" - icon_key += "[part.s_tone]" - if(part.s_col && part.s_col.len >= 3) - icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]" - if(part.body_hair && part.h_col && part.h_col.len >= 3) - icon_key += "[rgb(part.h_col[1],part.h_col[2],part.h_col[3])]" - if(species.color_mult) - icon_key += "[ICON_MULTIPLY]" - else - icon_key += "[ICON_ADD]" - else - icon_key += "#000000" - - for(var/M in part.markings) - if (part.markings[M]["on"]) - icon_key += "[M][part.markings[M]["color"]]" - - // VOREStation Edit Start - if(part.nail_polish) - icon_key += "_[part.nail_polish.icon]_[part.nail_polish.icon_state]_[part.nail_polish.color]" - // VOREStation Edit End - - if(part.robotic >= ORGAN_ROBOT) - icon_key += "2[part.model ? "-[part.model]": ""]" - robolimb_count++ - if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)) - robobody_count ++ - else if(part.status & ORGAN_DEAD) - icon_key += "3" - else - icon_key += "1" - if(part.transparent) //VOREStation Edit. For better slime limbs. Avoids using solid var due to limb dropping. - icon_key += "_t" //VOREStation Edit. - - if(istype(tail_style, /datum/sprite_accessory/tail/taur)) - if(tail_style.clip_mask) //VOREStation Edit. - icon_key += tail_style.clip_mask_state - - if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT)) - icon_key += "_digi" - - if(tail_style) - pixel_x = tail_style.mob_offset_x - pixel_y = tail_style.mob_offset_y - default_pixel_x = tail_style.mob_offset_x - default_pixel_y = tail_style.mob_offset_y - - //ChompEDIT START - //icon_key addition for digitigrade switch - if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT)) - icon_key += "_digi" - //ChompEDIT END - - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" - var/icon/base_icon - if(human_icon_cache[icon_key]) - base_icon = human_icon_cache[icon_key] - else - //BEGIN CACHED ICON GENERATION. - var/obj/item/organ/external/chest = get_organ(BP_TORSO) - base_icon = chest.get_icon(skeleton, !wholeicontransparent) - - var/apply_extra_transparency_leg = organs_by_name[BP_L_LEG] && organs_by_name[BP_R_LEG] - var/apply_extra_transparency_foot = organs_by_name[BP_L_FOOT] && organs_by_name[BP_R_FOOT] - - var/icon/Cutter = null - var/icon_x_offset = 0 - var/icon_y_offset = 0 - - if(istype(tail_style, /datum/sprite_accessory/tail/taur)) // Tail icon 'cookie cutters' are filled in where icons are preserved. We need to invert that. - if(tail_style.clip_mask) //VOREStation Edit. - Cutter = new(icon = (tail_style.clip_mask_icon ? tail_style.clip_mask_icon : tail_style.icon), icon_state = tail_style.clip_mask_state) - - Cutter.Blend("#000000", ICON_MULTIPLY) // Make it all black. - - Cutter.SwapColor("#00000000", "#FFFFFFFF") // Everywhere empty, make white. - Cutter.SwapColor("#000000FF", "#00000000") // Everywhere black, make empty. - - Cutter.Blend("#000000", ICON_MULTIPLY) // Black again. - - icon_x_offset = tail_style.offset_x - icon_y_offset = tail_style.offset_y - - for(var/obj/item/organ/external/part in organs) - if(isnull(part) || part.is_stump() || part == chest || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff. - continue - var/icon/temp = part.get_icon(skeleton, !wholeicontransparent) - - if((part.organ_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) && Cutter) - temp.Blend(Cutter, ICON_AND, x = icon_x_offset, y = icon_y_offset) - - //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST - //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) - if(part.icon_position & (LEFT | RIGHT)) - var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") - temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) - temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) - if(!(part.icon_position & LEFT)) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(!(part.icon_position & RIGHT)) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_OVERLAY) - temp2.Insert(temp2,"blank",dir=NORTH) //faaaaairly certain this is more efficient than reloading temp2, doing this so we don't blend the icons twice (it matters more in transparent limbs) - temp2.Insert(temp2,"blank",dir=SOUTH) - temp2.Insert(temp2,"blank",dir=EAST) - temp2.Insert(temp2,"blank",dir=WEST) - if(part.icon_position & LEFT) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(part.icon_position & RIGHT) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - if (part.transparent && !wholeicontransparent) //apply a little (a lot) extra transparency to make it look better //VORESTATION EDIT: transparent instead of nonsolid - if ((istype(part, /obj/item/organ/external/leg) && apply_extra_transparency_leg) || (istype(part, /obj/item/organ/external/foot) && apply_extra_transparency_foot)) //maybe - temp2 += rgb(,,,30) - base_icon.Blend(temp2, ICON_UNDERLAY) - else if(part.icon_position & UNDER) - base_icon.Blend(temp, ICON_UNDERLAY) - else - base_icon.Blend(temp, ICON_OVERLAY) - - if (wholeicontransparent) //because, I mean. It's basically never gonna happen that you'll have just one non-transparent limb but if you do your icon will look meh. Still good but meh, will have some areas with higher transparencies unless you're literally just a torso and a head - base_icon += rgb(,,,180) - - if(!skeleton) - if(husk) - base_icon.ColorTone(husk_color_mod) - else if(hulk) - var/list/tone = rgb2num(hulk_color_mod) - base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) - - //Handle husk overlay. - if(husk && ("overlay_husk" in cached_icon_states(species.icobase))) - var/icon/mask = new(base_icon) - var/icon/husk_over = new(species.icobase,"overlay_husk") - mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) - husk_over.Blend(mask, ICON_ADD) - base_icon.Blend(husk_over, ICON_OVERLAY) - - human_icon_cache[icon_key] = base_icon - - //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) - - var/image/body = image(stand_icon) - if (body) - body.layer = BODY_LAYER + BODYPARTS_LAYER - overlays_standing[BODYPARTS_LAYER] = body - apply_layer(BODYPARTS_LAYER) - - icon = stand_icon - - //tail - update_tail_showing() - update_wing_showing() - update_vore_belly_sprite() - update_vore_tail_sprite() - -/mob/living/carbon/human/proc/update_skin() - if(QDESTROYING(src)) - return - - remove_layer(SKIN_LAYER) - - var/image/skin = species.update_skin(src) - if(skin) - skin.layer = BODY_LAYER+SKIN_LAYER - overlays_standing[SKIN_LAYER] = skin - apply_layer(SKIN_LAYER) - -/mob/living/carbon/human/proc/update_bloodied() - if(QDESTROYING(src)) - return - - remove_layer(BLOOD_LAYER) - if(!blood_DNA && !feet_blood_DNA) - return - - var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+BLOOD_LAYER) - - //Bloody hands - if(blood_DNA) - var/image/bloodsies = image(icon = species.get_blood_mask(src), icon_state = "bloodyhands", layer = BODY_LAYER+BLOOD_LAYER) - bloodsies.color = hand_blood_color - both.add_overlay(bloodsies) - - //Bloody feet - if(feet_blood_DNA) - var/image/bloodsies = image(icon = digitigrade ? 'icons/mob/human_races/masks/blood_digitigrade.dmi' : species.get_blood_mask(src), icon_state = "shoeblood", layer = BODY_LAYER+BLOOD_LAYER) //CHOMPEdit: digitigrade feeties - bloodsies.color = feet_blood_color - both.add_overlay(bloodsies) - - overlays_standing[BLOOD_LAYER] = both - - apply_layer(BLOOD_LAYER) - -//UNDERWEAR OVERLAY -/mob/living/carbon/human/proc/update_underwear() - if(QDESTROYING(src)) - return - - remove_layer(UNDERWEAR_LAYER) - - if(species.appearance_flags & HAS_UNDERWEAR) - overlays_standing[UNDERWEAR_LAYER] = list() - for(var/category in all_underwear) - if(hide_underwear[category]) - continue - var/datum/category_item/underwear/UWI = all_underwear[category] - var/image/wear = UWI.generate_image(all_underwear_metadata[category], layer = BODY_LAYER+UNDERWEAR_LAYER, digitigrade = digitigrade) //CHOMPEdit - overlays_standing[UNDERWEAR_LAYER] += wear - - apply_layer(UNDERWEAR_LAYER) - -//HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair() - if(QDESTROYING(src)) - return - - //Reset our hair - remove_layer(HAIR_LAYER) - remove_layer(HAIR_ACCESSORY_LAYER) //VOREStation Edit - update_eyes() //Pirated out of here, for glowing eyes. - - var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) - if(!head_organ || head_organ.is_stump() ) - return - - //masks and helmets can obscure our hair. - if( (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR))) - return - - //base icons - var/icon/face_standing = icon(icon = 'icons/mob/human_face.dmi', icon_state = "bald_s") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype(src) in facial_hair_style.species_allowed)) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_colouration) - facial_s.Blend(rgb(r_facial, g_facial, b_facial), facial_hair_style.color_blend_mode) - - face_standing.Blend(facial_s, ICON_OVERLAY) - - if(h_style) - var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] - if(head && (head.flags_inv & BLOCKHEADHAIR)) - if(!(hair_style.flags & HAIR_VERY_SHORT)) - hair_style = hair_styles_list["Short Hair"] - - if(hair_style && (src.species.get_bodytype(src) in hair_style.species_allowed)) - var/icon/grad_s = null - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration) - if(grad_style) - grad_s = new/icon("icon" = 'icons/mob/hair_gradients.dmi', "icon_state" = GLOB.hair_gradients[grad_style]) - grad_s.Blend(hair_s, ICON_AND) - grad_s.Blend(rgb(r_grad, g_grad, b_grad), ICON_MULTIPLY) - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_MULTIPLY) - hair_s.Blend(hair_s_add, ICON_ADD) - if(!isnull(grad_s)) - hair_s.Blend(grad_s, ICON_OVERLAY) - - face_standing.Blend(hair_s, ICON_OVERLAY) - - var/icon/ears_s = get_ears_overlay() - - if(head_organ.transparent) //VORESTATION EDIT: transparent instead of nonsolid - face_standing += rgb(,,,120) - if (ears_s) - ears_s += rgb(,,,180) - - var/image/em_block_ears - if(ears_s) - if(ears_s.Height() > face_standing.Height()) // Tol ears - face_standing.Crop(1, 1, face_standing.Width(), ears_s.Height()) - face_standing.Blend(ears_s, ICON_OVERLAY) - if(ear_style?.em_block) - em_block_ears = em_block_image_generic(image(ears_s)) - - var/image/semifinal = image(face_standing, layer = BODY_LAYER+HAIR_LAYER, "pixel_y" = head_organ.head_offset) - if(em_block_ears) - semifinal.overlays += em_block_ears // Leaving this as overlays += - - overlays_standing[HAIR_LAYER] = semifinal - apply_layer(HAIR_LAYER) - //return //VOREStation Edit - - // VOREStation Edit - START - var/icon/hair_acc_s = get_hair_accessory_overlay() - var/image/hair_acc_s_image = null - if(hair_acc_s) - if(hair_accessory_style.ignores_lighting) - hair_acc_s_image = image(hair_acc_s) - hair_acc_s_image.plane = PLANE_LIGHTING_ABOVE - hair_acc_s_image.appearance_flags = appearance_flags - if (hair_acc_s_image) - overlays_standing[HAIR_ACCESSORY_LAYER] = hair_acc_s_image - apply_layer(HAIR_ACCESSORY_LAYER) - return - overlays_standing[HAIR_ACCESSORY_LAYER] = image(hair_acc_s, layer = BODY_LAYER+HAIR_ACCESSORY_LAYER) - apply_layer(HAIR_ACCESSORY_LAYER) - // VOREStation Edit - END - -/mob/living/carbon/human/update_eyes() - if(QDESTROYING(src)) - return - - //Reset our eyes - remove_layer(EYES_LAYER) - - //TODO: Probably redo this. I know I wrote it, but... - - //This is ONLY for glowing eyes for now. Boring flat eyes are done by the head's own proc. - if(!species.has_glowing_eyes) - return - - //Our glowy eyes should be hidden if some equipment hides them. - if(!should_have_organ(O_EYES) || (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR))) - return - - //Get the head, we'll need it later. - var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) - if(!head_organ || head_organ.is_stump() ) - return - - //The eyes store the color themselves, funny enough. - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES] - if(!head_organ.eye_icon) - return - - var/icon/eyes_icon = new/icon(head_organ.eye_icon_location, head_organ.eye_icon) //VOREStation Edit - if(eyes) - eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) - else - eyes_icon.Blend(rgb(128,0,0), ICON_ADD) - - // Convert to emissive at some point - if (head_organ.transparent) //VOREStation Edit: transparent instead of nonsolid - eyes_icon += rgb(,,,180) - - var/image/eyes_image = image(eyes_icon) - eyes_image.plane = PLANE_LIGHTING_ABOVE - eyes_image.appearance_flags = appearance_flags - - overlays_standing[EYES_LAYER] = eyes_image - apply_layer(EYES_LAYER) - -/mob/living/carbon/human/update_mutations() - if(QDESTROYING(src)) - return - - remove_layer(MUTATIONS_LAYER) - - if(!LAZYLEN(mutations)) - return //No mutations, no icons. - - //TODO: THIS PROC??? - var/fat - if(FAT in mutations) - fat = "fat" - - var/image/standing = image(icon = 'icons/effects/genetics.dmi', layer = BODY_LAYER+MUTATIONS_LAYER) - var/g = gender == FEMALE ? "f" : "m" - - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - var/underlay = gene.OnDrawUnderlays(src,g,fat) - if(underlay) - standing.underlays += underlay - - for(var/mut in mutations) - if(mut == LASER) - standing.overlays += "lasereyes_s" // Leaving this as overlays += - - overlays_standing[MUTATIONS_LAYER] = standing - apply_layer(MUTATIONS_LAYER) - -/* --------------------------------------- */ -//Recomputes every icon on the mob. Expensive. -//Useful if the species changed, or there's some -//other drastic body-shape change, but otherwise avoid. -/mob/living/carbon/human/regenerate_icons() - ..() - if(transforming || QDELETED(src)) - return - - update_icons_body() - UpdateDamageIcon() - update_mutations() - update_skin() - update_underwear() - update_hair() - update_inv_w_uniform() - update_inv_wear_id() - update_inv_gloves() - update_inv_glasses() - update_inv_ears() - update_inv_shoes() - update_inv_s_store() - update_inv_wear_mask() - update_inv_head() - update_inv_belt() - update_inv_back() - update_inv_wear_suit() - update_inv_r_hand() - update_inv_l_hand() - update_inv_handcuffed() - update_inv_legcuffed() - //update_inv_pockets() //Doesn't do anything - update_fire() - update_water() - update_surgery() - -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform() - if(QDESTROYING(src)) - return - - remove_layer(UNIFORM_LAYER) - - //Shoes can be affected by uniform being drawn onto them - update_inv_shoes() - - if(!w_uniform) - return - - if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space/rig)) - return //Wearing a suit that prevents uniform rendering - - var/obj/item/clothing/under/under = w_uniform - - var/uniform_sprite - if(istype(under) && !isnull(under.update_icon_define)) - uniform_sprite = under.update_icon_define - else - uniform_sprite = INV_W_UNIFORM_DEF_ICON - - //Build a uniform sprite - var/icon/c_mask = tail_style?.clip_mask - if(c_mask) - var/obj/item/clothing/suit/S = wear_suit - if((wear_suit?.flags_inv & HIDETAIL) || (istype(S) && S.taurized)) // Reasons to not mask: 1. If you're wearing a suit that hides the tail or if you're wearing a taurized suit. - c_mask = null - overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = uniform_sprite, default_layer = UNIFORM_LAYER, clip_mask = c_mask) - apply_layer(UNIFORM_LAYER) - -/mob/living/carbon/human/update_inv_wear_id() - if(QDESTROYING(src)) - return - - remove_layer(ID_LAYER) - - if(!wear_id) - return //Not wearing an ID - - //Only draw the ID on the mob if the uniform allows for it - if(w_uniform && istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - if(U.displays_id) - overlays_standing[ID_LAYER] = wear_id.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_id_str, default_icon = INV_WEAR_ID_DEF_ICON, default_layer = ID_LAYER) - - apply_layer(ID_LAYER) - -/mob/living/carbon/human/update_inv_gloves() - if(QDESTROYING(src)) - return - - remove_layer(GLOVES_LAYER) - - if(!gloves) - return //No gloves, no reason to be here. - - overlays_standing[GLOVES_LAYER] = gloves.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_GLOVES_DEF_ICON, default_layer = GLOVES_LAYER) - - apply_layer(GLOVES_LAYER) - -/mob/living/carbon/human/update_inv_glasses() - if(QDESTROYING(src)) - return - - remove_layer(GLASSES_LAYER) - remove_layer(GLASSES_LAYER_ALT) - - if(!glasses || hide_glasses) // CHOMPEdit - Add "|| hide_glasses" for glasses hiding - return //Not wearing glasses, no need to update anything. - - var/glasses_layer = GLASSES_LAYER - if(istype(glasses, /obj/item/clothing/glasses)) - var/obj/item/clothing/glasses/our_glasses = glasses - if(our_glasses.glasses_layer_above) - glasses_layer = GLASSES_LAYER_ALT - - overlays_standing[glasses_layer] = glasses.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_EYES_DEF_ICON, default_layer = glasses_layer) - - apply_layer(glasses_layer) - -/mob/living/carbon/human/update_inv_ears() - if(QDESTROYING(src)) - return - - remove_layer(EARS_LAYER) - - if((head && head.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR)) || (wear_mask && wear_mask.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))) - return //Ears are blocked (by hair being blocked, overloaded) - - if(!l_ear && !r_ear) - return //Why bother, if no ear sprites - - if(hide_headset) //CHOMPEdit Start - if(l_ear && istype(l_ear, /obj/item/device/radio/headset)) //No need to generate blank images if only headsets are present. - if(!r_ear || istype(r_ear, /obj/item/device/radio/headset)) - return - if(r_ear && istype(r_ear, /obj/item/device/radio/headset)) - if(!l_ear || istype(l_ear, /obj/item/device/radio/headset)) - return - - // Blank image upon which to layer left & right overlays. - var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+EARS_LAYER) - - if(l_ear) - if(istype(l_ear, /obj/item/device/radio/headset)) - if(!hide_headset) - var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) - else - var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) - - if(r_ear) - if(istype(r_ear, /obj/item/device/radio/headset)) - if(!hide_headset) - var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) - else - var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) //CHOMPEdit End - - overlays_standing[EARS_LAYER] = both - apply_layer(EARS_LAYER) - -/mob/living/carbon/human/update_inv_shoes() - if(QDESTROYING(src)) - return - - remove_layer(SHOES_LAYER) - remove_layer(SHOES_LAYER_ALT) //Dumb alternate layer for shoes being under the uniform. - - if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES)) - return //Either nothing to draw, or it'd be hidden. - - for(var/f in list(BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/foot/foot = get_organ(f) - if(istype(foot) && foot.is_hidden_by_sprite_accessory(clothing_only = TRUE)) //If either foot is hidden by the tail, don't render footwear. - return - - var/obj/item/clothing/shoes/shoe = shoes - var/shoe_sprite - - if(istype(shoe) && !isnull(shoe.update_icon_define)) - shoe_sprite = shoe.update_icon_define - else - shoe_sprite = INV_FEET_DEF_ICON - - //Allow for shoe layer toggle nonsense - var/shoe_layer = SHOES_LAYER - if(istype(shoes, /obj/item/clothing/shoes)) - var/obj/item/clothing/shoes/ushoes = shoes - if(ushoes.shoes_under_pants == 1) - shoe_layer = SHOES_LAYER_ALT - - //NB: the use of a var for the layer on this one - overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer) - - apply_layer(SHOES_LAYER) - apply_layer(SHOES_LAYER_ALT) - -/mob/living/carbon/human/update_inv_s_store() - if(QDESTROYING(src)) - return - - remove_layer(SUIT_STORE_LAYER) - - if(!s_store) - return //Why bother, nothing there. - - //TODO, this is unlike the rest of the things - //Basically has no variety in slot icon choices at all. WHY SPECIES ONLY?? - var/t_state = s_store.item_state - if(!t_state) - t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = image(icon = species.suit_storage_icon, icon_state = t_state, layer = BODY_LAYER+SUIT_STORE_LAYER) - - apply_layer(SUIT_STORE_LAYER) - -/mob/living/carbon/human/update_inv_head() - if(QDESTROYING(src)) - return - - remove_layer(HEAD_LAYER) - - if(!head) - return //No head item, why bother. - - overlays_standing[HEAD_LAYER] = head.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_head_str, default_icon = INV_HEAD_DEF_ICON, default_layer = HEAD_LAYER) - - apply_layer(HEAD_LAYER) - -/mob/living/carbon/human/update_inv_belt() - if(QDESTROYING(src)) - return - - remove_layer(BELT_LAYER) - remove_layer(BELT_LAYER_ALT) //Because you can toggle belt layer with a verb - - if(!belt) - return //No belt, why bother. - - //Toggle for belt layering with uniform - var/belt_layer = BELT_LAYER - if(istype(belt, /obj/item/weapon/storage/belt)) - var/obj/item/weapon/storage/belt/ubelt = belt - if(ubelt.show_above_suit) - belt_layer = BELT_LAYER_ALT - - - var/icon/c_mask = tail_style?.clip_mask - - //NB: this uses a var from above - overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer, clip_mask = c_mask) - - apply_layer(belt_layer) - -/mob/living/carbon/human/update_inv_wear_suit() - if(QDESTROYING(src)) - return - - remove_layer(SUIT_LAYER) - - //Hide/show other layers if necessary - update_inv_w_uniform() - update_inv_shoes() - update_tail_showing() - update_wing_showing() - - if(!wear_suit) - return //No point, no suit. - - var/obj/item/clothing/suit/suit = wear_suit - var/suit_sprite - - if(istype(suit) && !isnull(suit.update_icon_define)) - suit_sprite = suit.update_icon_define - else - suit_sprite = INV_SUIT_DEF_ICON - - var/icon/c_mask = null - var/tail_is_rendered = (overlays_standing[TAIL_UPPER_LAYER] || overlays_standing[TAIL_UPPER_LAYER_ALT] || overlays_standing[TAIL_LOWER_LAYER]) - var/valid_clip_mask = tail_style?.clip_mask - - if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. - c_mask = valid_clip_mask - overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = suit_sprite, default_layer = SUIT_LAYER, clip_mask = c_mask) - - apply_layer(SUIT_LAYER) - -/mob/living/carbon/human/update_inv_pockets() - stack_trace("Someone called update_inv_pockets even though it's dumb") - -/mob/living/carbon/human/update_inv_wear_mask() - if(QDESTROYING(src)) - return - - remove_layer(FACEMASK_LAYER) - - if(!wear_mask || (head && head.flags_inv & HIDEMASK)) - return //Why bother, nothing in mask slot. - - overlays_standing[FACEMASK_LAYER] = wear_mask.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_mask_str, default_icon = INV_MASK_DEF_ICON, default_layer = FACEMASK_LAYER) - - apply_layer(FACEMASK_LAYER) - -/mob/living/carbon/human/update_inv_back() - if(QDESTROYING(src)) - return - - remove_layer(BACK_LAYER) - - if(!back) - return //Why do anything - - var/icon/c_mask = tail_style?.clip_mask - if(c_mask) - if(istype(back, /obj/item/weapon/storage/backpack/saddlebag) || istype(back, /obj/item/weapon/storage/backpack/saddlebag_common)) - c_mask = null - - overlays_standing[BACK_LAYER] = back.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_back_str, default_icon = INV_BACK_DEF_ICON, default_layer = BACK_LAYER, clip_mask = c_mask) - - apply_layer(BACK_LAYER) - -//TODO: Carbon procs in my human update_icons?? -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(QDESTROYING(src)) - return - - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - -//update whether handcuffs appears on our hud. -/mob/living/carbon/proc/update_hud_handcuffed() - if(QDESTROYING(src)) - return - - if(hud_used && hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) - hud_used.l_hand_hud_object.update_icon() - hud_used.r_hand_hud_object.update_icon() - -/mob/living/carbon/human/update_inv_handcuffed() - if(QDESTROYING(src)) - return - - remove_layer(HANDCUFF_LAYER) - update_hud_handcuffed() //TODO - - if(!handcuffed) - return //Not cuffed, why bother - - overlays_standing[HANDCUFF_LAYER] = handcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_handcuffed_str, default_icon = INV_HCUFF_DEF_ICON, default_layer = HANDCUFF_LAYER) - - apply_layer(HANDCUFF_LAYER) - -/mob/living/carbon/human/update_inv_legcuffed() - if(QDESTROYING(src)) - return - - clear_alert("legcuffed") - remove_layer(LEGCUFF_LAYER) - - if(!legcuffed) - return //Not legcuffed, why bother. - - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) - - overlays_standing[LEGCUFF_LAYER] = legcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_legcuffed_str, default_icon = INV_LCUFF_DEF_ICON, default_layer = LEGCUFF_LAYER) - - apply_layer(LEGCUFF_LAYER) - -/mob/living/carbon/human/update_inv_r_hand() - if(QDESTROYING(src)) - return - - remove_layer(R_HAND_LAYER) - - if(!r_hand) - return //No hand, no bother. - - overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_r_hand_str, default_icon = INV_R_HAND_DEF_ICON, default_layer = R_HAND_LAYER) - - apply_layer(R_HAND_LAYER) - -/mob/living/carbon/human/update_inv_l_hand() - if(QDESTROYING(src)) - return - - remove_layer(L_HAND_LAYER) - - if(!l_hand) - return //No hand, no bother. - - overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_l_hand_str, default_icon = INV_L_HAND_DEF_ICON, default_layer = L_HAND_LAYER) - - apply_layer(L_HAND_LAYER) - -/mob/living/carbon/human/proc/get_tail_layer() - var/list/lower_layer_dirs = list(SOUTH, EAST, WEST) //ChompEDIT - Tail below clothing on side views too. - if(tail_style) - lower_layer_dirs = tail_style.lower_layer_dirs.Copy() - - if(dir in lower_layer_dirs) - return TAIL_LOWER_LAYER - else - return TAIL_UPPER_LAYER - -/mob/living/carbon/human/proc/update_tail_showing() - if(QDESTROYING(src)) - return - - remove_layer(TAIL_UPPER_LAYER) - remove_layer(TAIL_UPPER_LAYER_ALT) - remove_layer(TAIL_LOWER_LAYER) - - var/tail_layer = get_tail_layer() - if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_UPPER_LAYER) - tail_layer = TAIL_UPPER_LAYER_ALT - - var/obj/item/organ/external/chest = organs_by_name[BP_TORSO] - - var/image/tail_image = get_tail_image() - if(tail_image) - tail_image.layer = BODY_LAYER+tail_layer - tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid - overlays_standing[tail_layer] = tail_image - apply_layer(tail_layer) - return - - var/species_tail = species.get_tail(src) // Species tail icon_state prefix. - - //This one is actually not that bad I guess. - if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) - var/icon/tail_s = get_tail_icon() - tail_image = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+tail_layer) - tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid - overlays_standing[tail_layer] = tail_image - animate_tail_reset() - -//TODO: Is this the appropriate place for this, and not on species...? -/mob/living/carbon/human/proc/get_tail_icon() - var/icon_key = "[species.get_race_key(src)][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" - var/icon/tail_icon = tail_icon_cache[icon_key] - if(!tail_icon) - //generate a new one - var/species_tail_anim = species.get_tail_animation(src) - if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //Allow override of file for non-animated tails - if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' - tail_icon = new/icon(species_tail_anim) - tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) - // The following will not work with animated tails. - var/use_species_tail = species.get_tail_hair(src) - if(use_species_tail) - var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]") - hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //Check for species color_mult - tail_icon.Blend(hair_icon, ICON_OVERLAY) - tail_icon_cache[icon_key] = tail_icon - - return tail_icon - -/mob/living/carbon/human/proc/set_tail_state(var/t_state) - var/tail_layer = get_tail_layer() - if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_UPPER_LAYER) - tail_layer = TAIL_UPPER_LAYER_ALT - var/image/tail_overlay = overlays_standing[tail_layer] - - remove_layer(TAIL_UPPER_LAYER) - remove_layer(TAIL_UPPER_LAYER_ALT) - remove_layer(TAIL_LOWER_LAYER) - - if(tail_overlay) - overlays_standing[tail_layer] = tail_overlay - if(species.get_tail_animation(src)) - tail_overlay.icon_state = t_state - . = tail_overlay - - apply_layer(tail_layer) - -//Not really once, since BYOND can't do that. -//Update this if the ability to flick() images or make looping animation start at the first frame is ever added. -//You can sort of flick images now with flick_overlay -Aro -/mob/living/carbon/human/proc/animate_tail_once() - if(QDESTROYING(src)) - return - - var/t_state = "[species.get_tail(src)]_once" - var/tail_layer = get_tail_layer() - if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything - - var/image/tail_overlay = overlays_standing[tail_layer] - if(tail_overlay && tail_overlay.icon_state == t_state) - return //let the existing animation finish - - tail_overlay = set_tail_state(t_state) // Calls remove_layer & apply_layer - if(tail_overlay) - spawn(20) - //check that the animation hasn't changed in the meantime - if(overlays_standing[tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) - animate_tail_stop() - -/mob/living/carbon/human/proc/animate_tail_start() - if(QDESTROYING(src)) - return - - set_tail_state("[species.get_tail(src)]_slow[rand(0,9)]") - -/mob/living/carbon/human/proc/animate_tail_fast() - if(QDESTROYING(src)) - return - - set_tail_state("[species.get_tail(src)]_loop[rand(0,9)]") - -/mob/living/carbon/human/proc/animate_tail_reset() - if(QDESTROYING(src)) - return - - if(stat != DEAD) - set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]") - else - set_tail_state("[species.get_tail(src)]_static") - toggle_tail(FALSE) //So tails stop when someone dies. TODO - Fix this hack ~Leshana - -/mob/living/carbon/human/proc/animate_tail_stop() - if(QDESTROYING(src)) - return - - set_tail_state("[species.get_tail(src)]_static") - -/mob/living/carbon/human/proc/update_wing_showing() - if(QDESTROYING(src)) - return - - remove_layer(WING_LAYER) - remove_layer(WING_LOWER_LAYER) - - var/image/wing_image = get_wing_image(FALSE) - - var/obj/item/organ/external/chest = organs_by_name[BP_TORSO] - - if(wing_image) - wing_image.layer = BODY_LAYER+WING_LAYER - wing_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid - overlays_standing[WING_LAYER] = wing_image - if(wing_style && wing_style.multi_dir) - wing_image = get_wing_image(TRUE) - if(wing_image) - wing_image.layer = BODY_LAYER+WING_LOWER_LAYER - overlays_standing[WING_LOWER_LAYER] = wing_image - - apply_layer(WING_LAYER) - apply_layer(WING_LOWER_LAYER) - -/mob/living/carbon/human/update_modifier_visuals() - if(QDESTROYING(src)) - return - - remove_layer(MODIFIER_EFFECTS_LAYER) - - if(!LAZYLEN(modifiers)) - return //No modifiers, no effects. - - var/image/effects = new() - for(var/datum/modifier/M in modifiers) - if(M.mob_overlay_state) - if(M.icon_override) //VOREStation Edit. Override for the modifer icon. - var/image/I = image(icon = 'icons/mob/modifier_effects_vr.dmi', icon_state = M.mob_overlay_state) - I.color = M.effect_color - effects.overlays += I // Leaving this as overlays += - else - var/image/I = image(icon = 'icons/mob/modifier_effects.dmi', icon_state = M.mob_overlay_state) - I.color = M.effect_color - effects.overlays += I // Leaving this as overlays += - - overlays_standing[MODIFIER_EFFECTS_LAYER] = effects - - apply_layer(MODIFIER_EFFECTS_LAYER) - -/mob/living/carbon/human/update_fire() - if(QDESTROYING(src)) - return - - remove_layer(FIRE_LAYER) - - if(!on_fire) - return - - overlays_standing[FIRE_LAYER] = image(icon = 'icons/mob/OnFire.dmi', icon_state = get_fire_icon_state(), layer = BODY_LAYER+FIRE_LAYER) - - apply_layer(FIRE_LAYER) - -/mob/living/carbon/human/update_water() - if(QDESTROYING(src)) - return - - remove_layer(MOB_WATER_LAYER) - - var/depth = check_submerged() - if(!depth || lying) - return - - var/atom/A = loc // We'd better be swimming and on a turf - var/image/I = image(icon = 'icons/mob/submerged.dmi', icon_state = "human_swimming_[depth]", layer = BODY_LAYER+MOB_WATER_LAYER) //TODO: Improve - I.color = A.color - overlays_standing[MOB_WATER_LAYER] = I - - apply_layer(MOB_WATER_LAYER) - -/mob/living/carbon/human/proc/update_surgery() - if(QDESTROYING(src)) - return - - remove_layer(SURGERY_LAYER) - - var/image/total = new - for(var/obj/item/organ/external/E in organs) - if(E.open) - var/image/I = image(icon = 'icons/mob/surgery.dmi', icon_state = "[E.icon_name][round(E.open)]", layer = BODY_LAYER+SURGERY_LAYER) - total.overlays += I // Leaving this as overlays += - - if(total.overlays.len) - overlays_standing[SURGERY_LAYER] = total - apply_layer(SURGERY_LAYER) - -/mob/living/carbon/human/proc/get_wing_image(var/under_layer) - if(QDESTROYING(src)) - return - - //If you are FBP with wing style and didn't set a custom one - if(synthetic && synthetic.includes_wing && !wing_style && !wings_hidden) //VOREStation Edit - var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing? - wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) - var/image/working = image(wing_s) - working.overlays += em_block_image_generic(working) // Leaving this as overlays += - return working - - //If you have custom wings selected - if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL) && !wings_hidden) //VOREStation Edit - var/wing_state = (flapping && wing_style.ani_state) ? wing_style.ani_state : wing_style.icon_state - if(wing_style.multi_dir) - wing_state += "_[under_layer ? "back" : "front"]" - var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = wing_state) - if(wing_style.do_colouration) - wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode) - if(wing_style.extra_overlay) - var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay) - overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode) - wing_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - if(wing_style.extra_overlay2) - var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2) - if(wing_style.ani_state) - overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w) - overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode) - wing_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - else - overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode) - wing_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - var/image/working = image(wing_s) - if(wing_style.em_block) - working.overlays += em_block_image_generic(working) // Leaving this as overlays += - working.pixel_x -= wing_style.wing_offset - return working - -/mob/living/carbon/human/proc/get_ears_overlay() - //If you are FBP with ear style and didn't set a custom one - var/datum/robolimb/model = isSynthetic() - if(istype(model) && model.includes_ears && !ear_style) - var/icon/ears_s = new/icon("icon" = synthetic.icon, "icon_state" = "ears") - ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), species.color_mult ? ICON_MULTIPLY : ICON_ADD) - return ears_s - - if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) - var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state) - if(ear_style.do_colouration) - ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), ear_style.color_blend_mode) - if(ear_style.extra_overlay) - var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay) - overlay.Blend(rgb(src.r_ears2, src.g_ears2, src.b_ears2), ear_style.color_blend_mode) - ears_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - if(ear_style.extra_overlay2) //MORE COLOURS IS BETTERER - var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay2) - overlay.Blend(rgb(src.r_ears3, src.g_ears3, src.b_ears3), ear_style.color_blend_mode) - ears_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - return ears_s - return null - - -/mob/living/carbon/human/proc/get_tail_image() - //If you are FBP with tail style and didn't set a custom one - var/datum/robolimb/model = isSynthetic() - if(istype(model) && model.includes_tail && !tail_style && !tail_hidden) - var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail") - tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) - return image(tail_s) - - //If you have a custom tail selected - if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden) - var/icon/tail_s = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) //CHOMPEdit - if(tail_style.can_loaf && !is_shifted) - pixel_y = (resting) ? -tail_style.loaf_offset*size_multiplier : default_pixel_y //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing - if(tail_style.do_colouration) - tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) - if(tail_style.extra_overlay) - var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay) //CHOMPEdit - if(wagging && tail_style.ani_state) - overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) - overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) - tail_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - else - overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) - tail_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - - if(tail_style.extra_overlay2) - var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2) //CHOMPEdit - if(wagging && tail_style.ani_state) - overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w) - overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode) - tail_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - else - overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode) - tail_s.Blend(overlay, ICON_OVERLAY) - qdel(overlay) - - var/image/working = image(tail_s) - if(tail_style.em_block) - working.overlays += em_block_image_generic(working) // Leaving this as overlays += - - if(istaurtail(tail_style)) - var/datum/sprite_accessory/tail/taur/taurtype = tail_style - working.pixel_x = tail_style.offset_x - working.pixel_y = tail_style.offset_y - if(taurtype.can_ride && !riding_datum) - riding_datum = new /datum/riding/taur(src) - verbs |= /mob/living/carbon/human/proc/taur_mount - verbs |= /mob/living/proc/toggle_rider_reins - else if(islongtail(tail_style)) - working.pixel_x = tail_style.offset_x - working.pixel_y = tail_style.offset_y - return working - return null - -// TODO - Move this to where it should go ~Leshana -/mob/living/proc/stop_flying() - if(QDESTROYING(src)) - return - flying = FALSE - return 1 - -/mob/living/carbon/human/stop_flying() - if((. = ..())) - update_wing_showing() - -//Human Overlays Indexes///////// -/* CHOMPEdit - why are these undefined?? -#undef MUTATIONS_LAYER -#undef SKIN_LAYER -#undef MOB_DAM_LAYER -#undef SURGERY_LAYER -#undef UNDERWEAR_LAYER -#undef SHOES_LAYER_ALT -#undef UNIFORM_LAYER -#undef ID_LAYER -#undef SHOES_LAYER -#undef GLOVES_LAYER -#undef BELT_LAYER -#undef SUIT_LAYER -#undef TAIL_UPPER_LAYER -#undef TAIL_LOWER_LAYER -#undef GLASSES_LAYER -#undef BELT_LAYER_ALT -#undef SUIT_STORE_LAYER -#undef BACK_LAYER -#undef HAIR_LAYER -#undef EARS_LAYER -#undef EYES_LAYER -#undef FACEMASK_LAYER -#undef HEAD_LAYER -#undef HANDCUFF_LAYER -#undef LEGCUFF_LAYER -#undef L_HAND_LAYER -#undef R_HAND_LAYER -#undef VORE_BELLY_LAYER -#undef MODIFIER_EFFECTS_LAYER -#undef FIRE_LAYER -#undef WATER_LAYER -#undef TARGETED_LAYER -#undef TOTAL_LAYERS -*/ +/* + Global associative list for caching humanoid icons. + Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. +*/ +var/global/list/human_icon_cache = list() //key is incredibly complex, see update_icons_body() +var/global/list/tail_icon_cache = list() //key is [species.race_key][r_skin][g_skin][b_skin] +var/global/list/wing_icon_cache = list() // See tail. +var/global/list/light_overlay_cache = list() //see make_worn_icon() on helmets +var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() + +//////////////////////////////////////////////////////////////////////////////////////////////// +// # Human Icon Updating System +// +// This system takes care of the "icon" for human mobs. Of course humans don't just have a single +// icon+icon_state, but a combination of dozens of little sprites including including the body, +// clothing, equipment, in-universe HUD images, etc. +// +// # Basic Operation +// Whenever you do something that should update the on-mob appearance of a worn or held item, You +// will need to call the relevant update_inv_* proc. All of these are named after the variable they +// update from. They are defined at the /mob level so you don't even need to cast to carbon/human. +// +// The new system leverages SSoverlays to actually add/remove the overlays from mob.overlays +// Since SSoverlays already manages batching updates to reduce apperance churn etc, we don't need +// to worry about that. (In short, you can call add/cut overlay as many times as you want, it will +// only get assigned to the mob once per tick.) +// As a corrolary, this means users of this system do NOT need to tell the system when you're done +// making changes. +// +// There are also these special cases: +// update_icons_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc +// UpdateDamageIcon() //Handles damage overlays for brute/burn damage //(will rename this when I geta round to it) ~Carn +// update_skin() //Handles updating skin for species that have a skin overlay. +// update_bloodied() //Handles adding/clearing the blood overlays for hands & feet. Call when bloodied or cleaned. +// update_underwear() //Handles updating the sprite for underwear. +// update_hair() //Handles updating your hair and eyes overlay +// update_mutations() //Handles updating your appearance for certain mutations. e.g TK head-glows +// update_fire() //Handles overlay from being on fire. +// update_water() //Handles overlay from being submerged. +// update_surgery() //Handles overlays from open external organs. +// +// # History (i.e. I'm used to the old way, what is different?) +// You used to have to call update_icons(FALSE) if you planned to make more changes, and call update_icons(TRUE) +// on the final update. All that is gone, just call update_inv_whatever() and it handles the rest. +// +//////////////////////////////////////////////////////////////////////////////////////////////// + +//Add an entry to overlays, assuming it exists +/mob/living/carbon/human/proc/apply_layer(cache_index) + if((. = overlays_standing[cache_index])) + add_overlay(.) + +//Remove an entry from overlays, and from the list +/mob/living/carbon/human/proc/remove_layer(cache_index) + var/I = overlays_standing[cache_index] + if(I) + cut_overlay(I) + overlays_standing[cache_index] = null + +// These are used as the layers for the icons, as well as indexes in a list that holds onto them. +// Technically the layers used are all -100+layer to make them FLOAT_LAYER overlays. +//CHOMPEDIT: edit the file human/update_icons.dm in the modular_chomp folder as well, if you update these (and clothing/clothing.dm line 789, the hardcoded layer there in /obj/item/clothing/suit/make_worn_icon) +//Human Overlays Indexes///////// +#define MUTATIONS_LAYER 1 //Mutations like fat, and lasereyes +#define TAIL_LOWER_LAYER 2 //Tail as viewed from the south //CHOMPStation edit - underneath bodyparts +#define WING_LOWER_LAYER 3 //Wings as viewed from the south //CHOMPStation edit - underneath bodyparts +#define BODYPARTS_LAYER 4 //Bodyparts layer - CHOMPStation edit +#define SKIN_LAYER 5 //Skin things added by a call on species +#define BLOOD_LAYER 6 //Bloodied hands/feet/anything else +#define MOB_DAM_LAYER 7 //Injury overlay sprites like open wounds +#define SURGERY_LAYER 8 //Overlays for open surgical sites +#define UNDERWEAR_LAYER 9 //Underwear/bras/etc +#define SHOES_LAYER_ALT 10 //Shoe-slot item (when set to be under uniform via verb) +#define UNIFORM_LAYER 11 //Uniform-slot item +#define ID_LAYER 12 //ID-slot item +#define SHOES_LAYER 13 //Shoe-slot item +#define GLOVES_LAYER 14 //Glove-slot item +#define BELT_LAYER 15 //Belt-slot item +#define SUIT_LAYER 16 //Suit-slot item +#define TAIL_UPPER_LAYER 17 //Some species have tails to render (As viewed from the N, E, or W) +#define GLASSES_LAYER 18 //Eye-slot item +#define BELT_LAYER_ALT 19 //Belt-slot item (when set to be above suit via verb) +#define SUIT_STORE_LAYER 20 //Suit storage-slot item +#define BACK_LAYER 21 //Back-slot item +#define HAIR_LAYER 22 //The human's hair +#define HAIR_ACCESSORY_LAYER 23 //VOREStation edit. Simply move this up a number if things are added. +#define EARS_LAYER 24 //Both ear-slot items (combined image) +#define EYES_LAYER 25 //Mob's eyes (used for glowing eyes) +#define FACEMASK_LAYER 26 //Mask-slot item +#define GLASSES_LAYER_ALT 27 //So some glasses can appear on top of hair and things +#define HEAD_LAYER 28 //Head-slot item +#define HANDCUFF_LAYER 29 //Handcuffs, if the human is handcuffed, in a secret inv slot +#define LEGCUFF_LAYER 30 //Same as handcuffs, for legcuffs +#define L_HAND_LAYER 31 //Left-hand item +#define R_HAND_LAYER 32 //Right-hand item +#define WING_LAYER 33 //Wings or protrusions over the suit. +#define VORE_BELLY_LAYER 34 //CHOMPStation edit - Move this and everything after up if things are added. +#define VORE_TAIL_LAYER 35 //CHOMPStation edit - Move this and everything after up if things are added. +#define TAIL_UPPER_LAYER_ALT 36 //Modified tail-sprite layer. Tend to be larger. +#define MODIFIER_EFFECTS_LAYER 37 //Effects drawn by modifiers +#define FIRE_LAYER 38 //'Mob on fire' overlay layer +#define MOB_WATER_LAYER 39 //'Mob submerged' overlay layer +#define TARGETED_LAYER 40 //'Aimed at' overlay layer +#define TOTAL_LAYERS 40 //CHOMPStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +////////////////////////////////// + +//These two are only used for gargoyles currently +#define HUMAN_BODY_LAYERS list(MUTATIONS_LAYER, TAIL_LOWER_LAYER, WING_LOWER_LAYER, BODYPARTS_LAYER, SKIN_LAYER, BLOOD_LAYER, MOB_DAM_LAYER, TAIL_UPPER_LAYER, HAIR_LAYER, HAIR_ACCESSORY_LAYER, EYES_LAYER, WING_LAYER, VORE_BELLY_LAYER, VORE_TAIL_LAYER, TAIL_UPPER_LAYER_ALT) +#define HUMAN_OTHER_LAYERS list(MODIFIER_EFFECTS_LAYER, FIRE_LAYER, MOB_WATER_LAYER, TARGETED_LAYER) + +/mob/living/carbon/human + var/list/overlays_standing[TOTAL_LAYERS] + var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed + +//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING +//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. +/mob/living/carbon/human/update_icons() + if(QDESTROYING(src)) + return + + stack_trace("CANARY: Old human update_icons was called.") + + update_hud() //TODO: remove the need for this + + //Do any species specific layering updates, such as when hiding. + update_icon_special() + +/mob/living/carbon/human/update_transform(var/instant = FALSE) + /* VOREStation Edit START + // First, get the correct size. + var/desired_scale_x = icon_scale_x + var/desired_scale_y = icon_scale_y + + desired_scale_x *= species.icon_scale_x + desired_scale_y *= species.icon_scale_y + + for(var/datum/modifier/M in modifiers) + if(!isnull(M.icon_scale_x_percent)) + desired_scale_x *= M.icon_scale_x_percent + if(!isnull(M.icon_scale_y_percent)) + desired_scale_y *= M.icon_scale_y_percent + */ + var/desired_scale_x = size_multiplier * icon_scale_x + var/desired_scale_y = size_multiplier * icon_scale_y + desired_scale_x *= species.icon_scale_x + desired_scale_y *= species.icon_scale_y + var/cent_offset = species.center_offset + if(fuzzy || offset_override || dir == EAST || dir == WEST) + cent_offset = 0 + vis_height = species.icon_height + appearance_flags |= PIXEL_SCALE + if(fuzzy) + appearance_flags &= ~PIXEL_SCALE + center_offset = 0 //CHOMPEdit + //VOREStation Edit End + + // Regular stuff again. + var/matrix/M = matrix() + var/anim_time = 3 + + //Due to some involuntary means, you're laying now + if(lying && !resting && !sleeping) + anim_time = 1 //Thud + + if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. + // CHOMPEdit Start Loafy Time + if(tail_style?.can_loaf && resting) // Only call these if we're resting? + update_tail_showing() + M.Scale(desired_scale_x, desired_scale_y) + M.Translate(cent_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) //CHOMPEdit + else + M.Scale(desired_scale_x, desired_scale_y) + if(isnull(resting_dir)) + resting_dir = pick(FALSE, TRUE) + if(resting_dir) + M.Translate((1 / desired_scale_x * -4) + (desired_scale_x * cent_offset), 0) + M.Turn(-90) + else + M.Translate((1 / desired_scale_x * 4) - (desired_scale_x * cent_offset), 0) + M.Turn(90) + // CHOMPEdit End + layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters + else + M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit + M.Translate(cent_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) + if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing + update_tail_showing() // VOREStation Edit: Taur Loafing + layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters + + if(instant) + transform = M + else + animate(src, transform = M, time = anim_time) + update_icon_special() //May contain transform-altering things + +//DAMAGE OVERLAYS +//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists +/mob/living/carbon/human/UpdateDamageIcon() + if(QDESTROYING(src)) + return + + remove_layer(MOB_DAM_LAYER) + + // first check whether something actually changed about damage appearance + var/damage_appearance = "" + + for(var/obj/item/organ/external/O in organs) + if(isnull(O) || O.is_stump()) + continue + damage_appearance += O.damage_state + + if(damage_appearance == previous_damage_appearance) + // nothing to do here + return + + previous_damage_appearance = damage_appearance + + var/image/standing_image = image(icon = species.damage_overlays, icon_state = "00", layer = BODY_LAYER+MOB_DAM_LAYER) + + // blend the individual damage states with our icons + for(var/obj/item/organ/external/O in organs) + if(isnull(O) || O.is_stump() || O.is_hidden_by_sprite_accessory()) + continue + + O.update_icon() + if(O.damage_state == "00") continue + var/icon/DI + var/cache_index = "[O.damage_state]/[O.icon_name]/[species.get_blood_colour(src)]/[species.get_bodytype(src)]" + if(damage_icon_parts[cache_index] == null) + DI = icon(species.get_damage_overlays(src), O.damage_state) // the damage icon for whole human + DI.Blend(icon(species.get_damage_mask(src), O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(species.get_blood_colour(src), ICON_MULTIPLY) + damage_icon_parts[cache_index] = DI + else + DI = damage_icon_parts[cache_index] + + standing_image.add_overlay(DI) + + overlays_standing[MOB_DAM_LAYER] = standing_image + apply_layer(MOB_DAM_LAYER) + +//BASE MOB SPRITE +/mob/living/carbon/human/update_icons_body() + if(QDESTROYING(src)) + return + + remove_layer(BODYPARTS_LAYER) + + var/husk_color_mod = rgb(96,88,80) + var/hulk_color_mod = rgb(48,224,40) + + var/husk = (HUSK in src.mutations) + var/fat = (FAT in src.mutations) + var/hulk = (HULK in src.mutations) + var/skeleton = (SKELETON in src.mutations) + + robolimb_count = 0 //TODO, here, really tho? + robobody_count = 0 + + //CACHING: Generate an index key from visible bodyparts. + //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. + + //Create a new, blank icon for our mob to use. + var/icon/stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") + + var/g = (gender == MALE ? "male" : "female") + var/icon_key = "[species.get_race_key(src)][g][s_tone][r_skin][g_skin][b_skin]" + if(lip_style) + icon_key += "[lip_style]" + else + icon_key += "nolips" + var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES] + if(eyes) + icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" + else + icon_key += "[r_eyes], [g_eyes], [b_eyes]" + var/obj/item/organ/external/head/head = organs_by_name[BP_HEAD] + if(head) + if(!istype(head, /obj/item/organ/external/stump)) + if (species.selects_bodytype != SELECTS_BODYTYPE_FALSE) + var/headtype = GLOB.all_species[species.base_species]?.has_limbs[BP_HEAD] + var/obj/item/organ/external/head/headtypepath = headtype["path"] + if (headtypepath && !head.eye_icon_override) + head.eye_icon = initial(headtypepath.eye_icon) + head.eye_icon_location = initial(headtypepath.eye_icon_location) + icon_key += "[head.eye_icon]" + var/wholeicontransparent = TRUE + for(var/organ_tag in species.has_limbs) + var/obj/item/organ/external/part = organs_by_name[organ_tag] + if(isnull(part) || part.is_stump() || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff. + icon_key += "0" + continue + if(part) + wholeicontransparent &&= part.transparent //VORESTATION EDIT: transparent instead of nonsolid + icon_key += "[part.species.get_race_key(part.owner)]" + icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" + icon_key += "[part.s_tone]" + if(part.s_col && part.s_col.len >= 3) + icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]" + if(part.body_hair && part.h_col && part.h_col.len >= 3) + icon_key += "[rgb(part.h_col[1],part.h_col[2],part.h_col[3])]" + if(species.color_mult) + icon_key += "[ICON_MULTIPLY]" + else + icon_key += "[ICON_ADD]" + else + icon_key += "#000000" + + for(var/M in part.markings) + if (part.markings[M]["on"]) + icon_key += "[M][part.markings[M]["color"]]" + + // VOREStation Edit Start + if(part.nail_polish) + icon_key += "_[part.nail_polish.icon]_[part.nail_polish.icon_state]_[part.nail_polish.color]" + // VOREStation Edit End + + if(part.robotic >= ORGAN_ROBOT) + icon_key += "2[part.model ? "-[part.model]": ""]" + robolimb_count++ + if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)) + robobody_count ++ + else if(part.status & ORGAN_DEAD) + icon_key += "3" + else + icon_key += "1" + if(part.transparent) //VOREStation Edit. For better slime limbs. Avoids using solid var due to limb dropping. + icon_key += "_t" //VOREStation Edit. + + if(istype(tail_style, /datum/sprite_accessory/tail/taur)) + if(tail_style.clip_mask) //VOREStation Edit. + icon_key += tail_style.clip_mask_state + + if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT)) + icon_key += "_digi" + + if(tail_style) + pixel_x = tail_style.mob_offset_x + pixel_y = tail_style.mob_offset_y + default_pixel_x = tail_style.mob_offset_x + default_pixel_y = tail_style.mob_offset_y + + //ChompEDIT START + //icon_key addition for digitigrade switch + if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT)) + icon_key += "_digi" + //ChompEDIT END + + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" + var/icon/base_icon + if(human_icon_cache[icon_key]) + base_icon = human_icon_cache[icon_key] + else + //BEGIN CACHED ICON GENERATION. + var/obj/item/organ/external/chest = get_organ(BP_TORSO) + base_icon = chest.get_icon(skeleton, !wholeicontransparent) + + var/apply_extra_transparency_leg = organs_by_name[BP_L_LEG] && organs_by_name[BP_R_LEG] + var/apply_extra_transparency_foot = organs_by_name[BP_L_FOOT] && organs_by_name[BP_R_FOOT] + + var/icon/Cutter = null + var/icon_x_offset = 0 + var/icon_y_offset = 0 + + if(istype(tail_style, /datum/sprite_accessory/tail/taur)) // Tail icon 'cookie cutters' are filled in where icons are preserved. We need to invert that. + if(tail_style.clip_mask) //VOREStation Edit. + Cutter = new(icon = (tail_style.clip_mask_icon ? tail_style.clip_mask_icon : tail_style.icon), icon_state = tail_style.clip_mask_state) + + Cutter.Blend("#000000", ICON_MULTIPLY) // Make it all black. + + Cutter.SwapColor("#00000000", "#FFFFFFFF") // Everywhere empty, make white. + Cutter.SwapColor("#000000FF", "#00000000") // Everywhere black, make empty. + + Cutter.Blend("#000000", ICON_MULTIPLY) // Black again. + + icon_x_offset = tail_style.offset_x + icon_y_offset = tail_style.offset_y + + for(var/obj/item/organ/external/part in organs) + if(isnull(part) || part.is_stump() || part == chest || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff. + continue + var/icon/temp = part.get_icon(skeleton, !wholeicontransparent) + + if((part.organ_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) && Cutter) + temp.Blend(Cutter, ICON_AND, x = icon_x_offset, y = icon_y_offset) + + //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST + //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) + if(part.icon_position & (LEFT | RIGHT)) + var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") + temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) + temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) + if(!(part.icon_position & LEFT)) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(!(part.icon_position & RIGHT)) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + base_icon.Blend(temp2, ICON_OVERLAY) + temp2.Insert(temp2,"blank",dir=NORTH) //faaaaairly certain this is more efficient than reloading temp2, doing this so we don't blend the icons twice (it matters more in transparent limbs) + temp2.Insert(temp2,"blank",dir=SOUTH) + temp2.Insert(temp2,"blank",dir=EAST) + temp2.Insert(temp2,"blank",dir=WEST) + if(part.icon_position & LEFT) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(part.icon_position & RIGHT) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + if (part.transparent && !wholeicontransparent) //apply a little (a lot) extra transparency to make it look better //VORESTATION EDIT: transparent instead of nonsolid + if ((istype(part, /obj/item/organ/external/leg) && apply_extra_transparency_leg) || (istype(part, /obj/item/organ/external/foot) && apply_extra_transparency_foot)) //maybe + temp2 += rgb(,,,30) + base_icon.Blend(temp2, ICON_UNDERLAY) + else if(part.icon_position & UNDER) + base_icon.Blend(temp, ICON_UNDERLAY) + else + base_icon.Blend(temp, ICON_OVERLAY) + + if (wholeicontransparent) //because, I mean. It's basically never gonna happen that you'll have just one non-transparent limb but if you do your icon will look meh. Still good but meh, will have some areas with higher transparencies unless you're literally just a torso and a head + base_icon += rgb(,,,180) + + if(!skeleton) + if(husk) + base_icon.ColorTone(husk_color_mod) + else if(hulk) + var/list/tone = rgb2num(hulk_color_mod) + base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) + + //Handle husk overlay. + if(husk && ("overlay_husk" in cached_icon_states(species.icobase))) + var/icon/mask = new(base_icon) + var/icon/husk_over = new(species.icobase,"overlay_husk") + mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) + husk_over.Blend(mask, ICON_ADD) + base_icon.Blend(husk_over, ICON_OVERLAY) + + human_icon_cache[icon_key] = base_icon + + //END CACHED ICON GENERATION. + stand_icon.Blend(base_icon,ICON_OVERLAY) + + var/image/body = image(stand_icon) + if (body) + body.layer = BODY_LAYER + BODYPARTS_LAYER + overlays_standing[BODYPARTS_LAYER] = body + apply_layer(BODYPARTS_LAYER) + + icon = stand_icon + + //tail + update_tail_showing() + update_wing_showing() + update_vore_belly_sprite() + update_vore_tail_sprite() + +/mob/living/carbon/human/proc/update_skin() + if(QDESTROYING(src)) + return + + remove_layer(SKIN_LAYER) + + var/image/skin = species.update_skin(src) + if(skin) + skin.layer = BODY_LAYER+SKIN_LAYER + overlays_standing[SKIN_LAYER] = skin + apply_layer(SKIN_LAYER) + +/mob/living/carbon/human/proc/update_bloodied() + if(QDESTROYING(src)) + return + + remove_layer(BLOOD_LAYER) + if(!blood_DNA && !feet_blood_DNA) + return + + var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+BLOOD_LAYER) + + //Bloody hands + if(blood_DNA) + var/image/bloodsies = image(icon = species.get_blood_mask(src), icon_state = "bloodyhands", layer = BODY_LAYER+BLOOD_LAYER) + bloodsies.color = hand_blood_color + both.add_overlay(bloodsies) + + //Bloody feet + if(feet_blood_DNA) + var/image/bloodsies = image(icon = digitigrade ? 'icons/mob/human_races/masks/blood_digitigrade.dmi' : species.get_blood_mask(src), icon_state = "shoeblood", layer = BODY_LAYER+BLOOD_LAYER) //CHOMPEdit: digitigrade feeties + bloodsies.color = feet_blood_color + both.add_overlay(bloodsies) + + overlays_standing[BLOOD_LAYER] = both + + apply_layer(BLOOD_LAYER) + +//UNDERWEAR OVERLAY +/mob/living/carbon/human/proc/update_underwear() + if(QDESTROYING(src)) + return + + remove_layer(UNDERWEAR_LAYER) + + if(species.appearance_flags & HAS_UNDERWEAR) + overlays_standing[UNDERWEAR_LAYER] = list() + for(var/category in all_underwear) + if(hide_underwear[category]) + continue + var/datum/category_item/underwear/UWI = all_underwear[category] + var/image/wear = UWI.generate_image(all_underwear_metadata[category], layer = BODY_LAYER+UNDERWEAR_LAYER, digitigrade = digitigrade) //CHOMPEdit + overlays_standing[UNDERWEAR_LAYER] += wear + + apply_layer(UNDERWEAR_LAYER) + +//HAIR OVERLAY +/mob/living/carbon/human/proc/update_hair() + if(QDESTROYING(src)) + return + + //Reset our hair + remove_layer(HAIR_LAYER) + remove_layer(HAIR_ACCESSORY_LAYER) //VOREStation Edit + update_eyes() //Pirated out of here, for glowing eyes. + + var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) + if(!head_organ || head_organ.is_stump() ) + return + + //masks and helmets can obscure our hair. + if( (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR))) + return + + //base icons + var/icon/face_standing = icon(icon = 'icons/mob/human_face.dmi', icon_state = "bald_s") + + if(f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype(src) in facial_hair_style.species_allowed)) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(r_facial, g_facial, b_facial), facial_hair_style.color_blend_mode) + + face_standing.Blend(facial_s, ICON_OVERLAY) + + if(h_style) + var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] + if(head && (head.flags_inv & BLOCKHEADHAIR)) + if(!(hair_style.flags & HAIR_VERY_SHORT)) + hair_style = hair_styles_list["Short Hair"] + + if(hair_style && (src.species.get_bodytype(src) in hair_style.species_allowed)) + var/icon/grad_s = null + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + if(grad_style) + grad_s = new/icon("icon" = 'icons/mob/hair_gradients.dmi', "icon_state" = GLOB.hair_gradients[grad_style]) + grad_s.Blend(hair_s, ICON_AND) + grad_s.Blend(rgb(r_grad, g_grad, b_grad), ICON_MULTIPLY) + hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_MULTIPLY) + hair_s.Blend(hair_s_add, ICON_ADD) + if(!isnull(grad_s)) + hair_s.Blend(grad_s, ICON_OVERLAY) + + face_standing.Blend(hair_s, ICON_OVERLAY) + + var/icon/ears_s = get_ears_overlay() + + if(head_organ.transparent) //VORESTATION EDIT: transparent instead of nonsolid + face_standing += rgb(,,,120) + if (ears_s) + ears_s += rgb(,,,180) + + var/image/em_block_ears + if(ears_s) + if(ears_s.Height() > face_standing.Height()) // Tol ears + face_standing.Crop(1, 1, face_standing.Width(), ears_s.Height()) + face_standing.Blend(ears_s, ICON_OVERLAY) + if(ear_style?.em_block) + em_block_ears = em_block_image_generic(image(ears_s)) + + var/image/semifinal = image(face_standing, layer = BODY_LAYER+HAIR_LAYER, "pixel_y" = head_organ.head_offset) + if(em_block_ears) + semifinal.overlays += em_block_ears // Leaving this as overlays += + + overlays_standing[HAIR_LAYER] = semifinal + apply_layer(HAIR_LAYER) + //return //VOREStation Edit + + // VOREStation Edit - START + var/icon/hair_acc_s = get_hair_accessory_overlay() + var/image/hair_acc_s_image = null + if(hair_acc_s) + if(hair_accessory_style.ignores_lighting) + hair_acc_s_image = image(hair_acc_s) + hair_acc_s_image.plane = PLANE_LIGHTING_ABOVE + hair_acc_s_image.appearance_flags = appearance_flags + if (hair_acc_s_image) + overlays_standing[HAIR_ACCESSORY_LAYER] = hair_acc_s_image + apply_layer(HAIR_ACCESSORY_LAYER) + return + overlays_standing[HAIR_ACCESSORY_LAYER] = image(hair_acc_s, layer = BODY_LAYER+HAIR_ACCESSORY_LAYER) + apply_layer(HAIR_ACCESSORY_LAYER) + // VOREStation Edit - END + +/mob/living/carbon/human/update_eyes() + if(QDESTROYING(src)) + return + + //Reset our eyes + remove_layer(EYES_LAYER) + + //TODO: Probably redo this. I know I wrote it, but... + + //This is ONLY for glowing eyes for now. Boring flat eyes are done by the head's own proc. + if(!species.has_glowing_eyes) + return + + //Our glowy eyes should be hidden if some equipment hides them. + if(!should_have_organ(O_EYES) || (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR))) + return + + //Get the head, we'll need it later. + var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) + if(!head_organ || head_organ.is_stump() ) + return + + //The eyes store the color themselves, funny enough. + var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES] + if(!head_organ.eye_icon) + return + + var/icon/eyes_icon = new/icon(head_organ.eye_icon_location, head_organ.eye_icon) //VOREStation Edit + if(eyes) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + else + eyes_icon.Blend(rgb(128,0,0), ICON_ADD) + + // Convert to emissive at some point + if (head_organ.transparent) //VOREStation Edit: transparent instead of nonsolid + eyes_icon += rgb(,,,180) + + var/image/eyes_image = image(eyes_icon) + eyes_image.plane = PLANE_LIGHTING_ABOVE + eyes_image.appearance_flags = appearance_flags + + overlays_standing[EYES_LAYER] = eyes_image + apply_layer(EYES_LAYER) + +/mob/living/carbon/human/update_mutations() + if(QDESTROYING(src)) + return + + remove_layer(MUTATIONS_LAYER) + + if(!LAZYLEN(mutations)) + return //No mutations, no icons. + + //TODO: THIS PROC??? + var/fat + if(FAT in mutations) + fat = "fat" + + var/image/standing = image(icon = 'icons/effects/genetics.dmi', layer = BODY_LAYER+MUTATIONS_LAYER) + var/g = gender == FEMALE ? "f" : "m" + + for(var/datum/dna/gene/gene in dna_genes) + if(!gene.block) + continue + if(gene.is_active(src)) + var/underlay = gene.OnDrawUnderlays(src,g,fat) + if(underlay) + standing.underlays += underlay + + for(var/mut in mutations) + if(mut == LASER) + standing.overlays += "lasereyes_s" // Leaving this as overlays += + + overlays_standing[MUTATIONS_LAYER] = standing + apply_layer(MUTATIONS_LAYER) + +/* --------------------------------------- */ +//Recomputes every icon on the mob. Expensive. +//Useful if the species changed, or there's some +//other drastic body-shape change, but otherwise avoid. +/mob/living/carbon/human/regenerate_icons() + ..() + if(transforming || QDELETED(src)) + return + + update_icons_body() + UpdateDamageIcon() + update_mutations() + update_skin() + update_underwear() + update_hair() + update_inv_w_uniform() + update_inv_wear_id() + update_inv_gloves() + update_inv_glasses() + update_inv_ears() + update_inv_shoes() + update_inv_s_store() + update_inv_wear_mask() + update_inv_head() + update_inv_belt() + update_inv_back() + update_inv_wear_suit() + update_inv_r_hand() + update_inv_l_hand() + update_inv_handcuffed() + update_inv_legcuffed() + //update_inv_pockets() //Doesn't do anything + update_fire() + update_water() + update_surgery() + +/* --------------------------------------- */ +//vvvvvv UPDATE_INV PROCS vvvvvv + +/mob/living/carbon/human/update_inv_w_uniform() + if(QDESTROYING(src)) + return + + remove_layer(UNIFORM_LAYER) + + //Shoes can be affected by uniform being drawn onto them + update_inv_shoes() + + if(!w_uniform) + return + + if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space/rig)) + return //Wearing a suit that prevents uniform rendering + + var/obj/item/clothing/under/under = w_uniform + + var/uniform_sprite + if(istype(under) && !isnull(under.update_icon_define)) + uniform_sprite = under.update_icon_define + else + uniform_sprite = INV_W_UNIFORM_DEF_ICON + + //Build a uniform sprite + var/icon/c_mask = tail_style?.clip_mask + if(c_mask) + var/obj/item/clothing/suit/S = wear_suit + if((wear_suit?.flags_inv & HIDETAIL) || (istype(S) && S.taurized)) // Reasons to not mask: 1. If you're wearing a suit that hides the tail or if you're wearing a taurized suit. + c_mask = null + overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = uniform_sprite, default_layer = UNIFORM_LAYER, clip_mask = c_mask) + apply_layer(UNIFORM_LAYER) + +/mob/living/carbon/human/update_inv_wear_id() + if(QDESTROYING(src)) + return + + remove_layer(ID_LAYER) + + if(!wear_id) + return //Not wearing an ID + + //Only draw the ID on the mob if the uniform allows for it + if(w_uniform && istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = w_uniform + if(U.displays_id) + overlays_standing[ID_LAYER] = wear_id.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_id_str, default_icon = INV_WEAR_ID_DEF_ICON, default_layer = ID_LAYER) + + apply_layer(ID_LAYER) + +/mob/living/carbon/human/update_inv_gloves() + if(QDESTROYING(src)) + return + + remove_layer(GLOVES_LAYER) + + if(!gloves) + return //No gloves, no reason to be here. + + overlays_standing[GLOVES_LAYER] = gloves.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_GLOVES_DEF_ICON, default_layer = GLOVES_LAYER) + + apply_layer(GLOVES_LAYER) + +/mob/living/carbon/human/update_inv_glasses() + if(QDESTROYING(src)) + return + + remove_layer(GLASSES_LAYER) + remove_layer(GLASSES_LAYER_ALT) + + if(!glasses || hide_glasses) // CHOMPEdit - Add "|| hide_glasses" for glasses hiding + return //Not wearing glasses, no need to update anything. + + var/glasses_layer = GLASSES_LAYER + if(istype(glasses, /obj/item/clothing/glasses)) + var/obj/item/clothing/glasses/our_glasses = glasses + if(our_glasses.glasses_layer_above) + glasses_layer = GLASSES_LAYER_ALT + + overlays_standing[glasses_layer] = glasses.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_EYES_DEF_ICON, default_layer = glasses_layer) + + apply_layer(glasses_layer) + +/mob/living/carbon/human/update_inv_ears() + if(QDESTROYING(src)) + return + + remove_layer(EARS_LAYER) + + if((head && head.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR)) || (wear_mask && wear_mask.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))) + return //Ears are blocked (by hair being blocked, overloaded) + + if(!l_ear && !r_ear) + return //Why bother, if no ear sprites + + if(hide_headset) //CHOMPEdit Start + if(l_ear && istype(l_ear, /obj/item/device/radio/headset)) //No need to generate blank images if only headsets are present. + if(!r_ear || istype(r_ear, /obj/item/device/radio/headset)) + return + if(r_ear && istype(r_ear, /obj/item/device/radio/headset)) + if(!l_ear || istype(l_ear, /obj/item/device/radio/headset)) + return + + // Blank image upon which to layer left & right overlays. + var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+EARS_LAYER) + + if(l_ear) + if(istype(l_ear, /obj/item/device/radio/headset)) + if(!hide_headset) + var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) + else + var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) + + if(r_ear) + if(istype(r_ear, /obj/item/device/radio/headset)) + if(!hide_headset) + var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) + else + var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) //CHOMPEdit End + + overlays_standing[EARS_LAYER] = both + apply_layer(EARS_LAYER) + +/mob/living/carbon/human/update_inv_shoes() + if(QDESTROYING(src)) + return + + remove_layer(SHOES_LAYER) + remove_layer(SHOES_LAYER_ALT) //Dumb alternate layer for shoes being under the uniform. + + if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES)) + return //Either nothing to draw, or it'd be hidden. + + for(var/f in list(BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/foot/foot = get_organ(f) + if(istype(foot) && foot.is_hidden_by_sprite_accessory(clothing_only = TRUE)) //If either foot is hidden by the tail, don't render footwear. + return + + var/obj/item/clothing/shoes/shoe = shoes + var/shoe_sprite + + if(istype(shoe) && !isnull(shoe.update_icon_define)) + shoe_sprite = shoe.update_icon_define + else + shoe_sprite = INV_FEET_DEF_ICON + + //Allow for shoe layer toggle nonsense + var/shoe_layer = SHOES_LAYER + if(istype(shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/ushoes = shoes + if(ushoes.shoes_under_pants == 1) + shoe_layer = SHOES_LAYER_ALT + + //NB: the use of a var for the layer on this one + overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer) + + apply_layer(SHOES_LAYER) + apply_layer(SHOES_LAYER_ALT) + +/mob/living/carbon/human/update_inv_s_store() + if(QDESTROYING(src)) + return + + remove_layer(SUIT_STORE_LAYER) + + if(!s_store) + return //Why bother, nothing there. + + //TODO, this is unlike the rest of the things + //Basically has no variety in slot icon choices at all. WHY SPECIES ONLY?? + var/t_state = s_store.item_state + if(!t_state) + t_state = s_store.icon_state + overlays_standing[SUIT_STORE_LAYER] = image(icon = species.suit_storage_icon, icon_state = t_state, layer = BODY_LAYER+SUIT_STORE_LAYER) + + apply_layer(SUIT_STORE_LAYER) + +/mob/living/carbon/human/update_inv_head() + if(QDESTROYING(src)) + return + + remove_layer(HEAD_LAYER) + + if(!head) + return //No head item, why bother. + + overlays_standing[HEAD_LAYER] = head.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_head_str, default_icon = INV_HEAD_DEF_ICON, default_layer = HEAD_LAYER) + + apply_layer(HEAD_LAYER) + +/mob/living/carbon/human/update_inv_belt() + if(QDESTROYING(src)) + return + + remove_layer(BELT_LAYER) + remove_layer(BELT_LAYER_ALT) //Because you can toggle belt layer with a verb + + if(!belt) + return //No belt, why bother. + + //Toggle for belt layering with uniform + var/belt_layer = BELT_LAYER + if(istype(belt, /obj/item/weapon/storage/belt)) + var/obj/item/weapon/storage/belt/ubelt = belt + if(ubelt.show_above_suit) + belt_layer = BELT_LAYER_ALT + + + var/icon/c_mask = tail_style?.clip_mask + + //NB: this uses a var from above + overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer, clip_mask = c_mask) + + apply_layer(belt_layer) + +/mob/living/carbon/human/update_inv_wear_suit() + if(QDESTROYING(src)) + return + + remove_layer(SUIT_LAYER) + + //Hide/show other layers if necessary + update_inv_w_uniform() + update_inv_shoes() + update_tail_showing() + update_wing_showing() + + if(!wear_suit) + return //No point, no suit. + + var/obj/item/clothing/suit/suit = wear_suit + var/suit_sprite + + if(istype(suit) && !isnull(suit.update_icon_define)) + suit_sprite = suit.update_icon_define + else + suit_sprite = INV_SUIT_DEF_ICON + + var/icon/c_mask = null + var/tail_is_rendered = (overlays_standing[TAIL_UPPER_LAYER] || overlays_standing[TAIL_UPPER_LAYER_ALT] || overlays_standing[TAIL_LOWER_LAYER]) + var/valid_clip_mask = tail_style?.clip_mask + + if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. + c_mask = valid_clip_mask + overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = suit_sprite, default_layer = SUIT_LAYER, clip_mask = c_mask) + + apply_layer(SUIT_LAYER) + +/mob/living/carbon/human/update_inv_pockets() + stack_trace("Someone called update_inv_pockets even though it's dumb") + +/mob/living/carbon/human/update_inv_wear_mask() + if(QDESTROYING(src)) + return + + remove_layer(FACEMASK_LAYER) + + if(!wear_mask || (head && head.flags_inv & HIDEMASK)) + return //Why bother, nothing in mask slot. + + overlays_standing[FACEMASK_LAYER] = wear_mask.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_mask_str, default_icon = INV_MASK_DEF_ICON, default_layer = FACEMASK_LAYER) + + apply_layer(FACEMASK_LAYER) + +/mob/living/carbon/human/update_inv_back() + if(QDESTROYING(src)) + return + + remove_layer(BACK_LAYER) + + if(!back) + return //Why do anything + + var/icon/c_mask = tail_style?.clip_mask + if(c_mask) + if(istype(back, /obj/item/weapon/storage/backpack/saddlebag) || istype(back, /obj/item/weapon/storage/backpack/saddlebag_common)) + c_mask = null + + overlays_standing[BACK_LAYER] = back.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_back_str, default_icon = INV_BACK_DEF_ICON, default_layer = BACK_LAYER, clip_mask = c_mask) + + apply_layer(BACK_LAYER) + +//TODO: Carbon procs in my human update_icons?? +/mob/living/carbon/human/update_hud() //TODO: do away with this if possible + if(QDESTROYING(src)) + return + + if(client) + client.screen |= contents + if(hud_used) + hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar + +//update whether handcuffs appears on our hud. +/mob/living/carbon/proc/update_hud_handcuffed() + if(QDESTROYING(src)) + return + + if(hud_used && hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) + hud_used.l_hand_hud_object.update_icon() + hud_used.r_hand_hud_object.update_icon() + +/mob/living/carbon/human/update_inv_handcuffed() + if(QDESTROYING(src)) + return + + remove_layer(HANDCUFF_LAYER) + update_hud_handcuffed() //TODO + + if(!handcuffed) + return //Not cuffed, why bother + + overlays_standing[HANDCUFF_LAYER] = handcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_handcuffed_str, default_icon = INV_HCUFF_DEF_ICON, default_layer = HANDCUFF_LAYER) + + apply_layer(HANDCUFF_LAYER) + +/mob/living/carbon/human/update_inv_legcuffed() + if(QDESTROYING(src)) + return + + clear_alert("legcuffed") + remove_layer(LEGCUFF_LAYER) + + if(!legcuffed) + return //Not legcuffed, why bother. + + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) + + overlays_standing[LEGCUFF_LAYER] = legcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_legcuffed_str, default_icon = INV_LCUFF_DEF_ICON, default_layer = LEGCUFF_LAYER) + + apply_layer(LEGCUFF_LAYER) + +/mob/living/carbon/human/update_inv_r_hand() + if(QDESTROYING(src)) + return + + remove_layer(R_HAND_LAYER) + + if(!r_hand) + return //No hand, no bother. + + overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_r_hand_str, default_icon = INV_R_HAND_DEF_ICON, default_layer = R_HAND_LAYER) + + apply_layer(R_HAND_LAYER) + +/mob/living/carbon/human/update_inv_l_hand() + if(QDESTROYING(src)) + return + + remove_layer(L_HAND_LAYER) + + if(!l_hand) + return //No hand, no bother. + + overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_l_hand_str, default_icon = INV_L_HAND_DEF_ICON, default_layer = L_HAND_LAYER) + + apply_layer(L_HAND_LAYER) + +/mob/living/carbon/human/proc/get_tail_layer() + var/list/lower_layer_dirs = list(SOUTH, EAST, WEST) //ChompEDIT - Tail below clothing on side views too. + if(tail_style) + lower_layer_dirs = tail_style.lower_layer_dirs.Copy() + + if(dir in lower_layer_dirs) + return TAIL_LOWER_LAYER + else + return TAIL_UPPER_LAYER + +/mob/living/carbon/human/proc/update_tail_showing() + if(QDESTROYING(src)) + return + + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) + + var/tail_layer = get_tail_layer() + if(src.tail_style && src.tail_style.clip_mask_state) + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT + + var/obj/item/organ/external/chest = organs_by_name[BP_TORSO] + + var/image/tail_image = get_tail_image() + if(tail_image) + tail_image.layer = BODY_LAYER+tail_layer + tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid + overlays_standing[tail_layer] = tail_image + apply_layer(tail_layer) + return + + var/species_tail = species.get_tail(src) // Species tail icon_state prefix. + + //This one is actually not that bad I guess. + if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/icon/tail_s = get_tail_icon() + tail_image = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+tail_layer) + tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid + overlays_standing[tail_layer] = tail_image + animate_tail_reset() + +//TODO: Is this the appropriate place for this, and not on species...? +/mob/living/carbon/human/proc/get_tail_icon() + var/icon_key = "[species.get_race_key(src)][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" + var/icon/tail_icon = tail_icon_cache[icon_key] + if(!tail_icon) + //generate a new one + var/species_tail_anim = species.get_tail_animation(src) + if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //Allow override of file for non-animated tails + if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' + tail_icon = new/icon(species_tail_anim) + tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + // The following will not work with animated tails. + var/use_species_tail = species.get_tail_hair(src) + if(use_species_tail) + var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]") + hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //Check for species color_mult + tail_icon.Blend(hair_icon, ICON_OVERLAY) + tail_icon_cache[icon_key] = tail_icon + + return tail_icon + +/mob/living/carbon/human/proc/set_tail_state(var/t_state) + var/tail_layer = get_tail_layer() + if(src.tail_style && src.tail_style.clip_mask_state) + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT + var/image/tail_overlay = overlays_standing[tail_layer] + + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) + + if(tail_overlay) + overlays_standing[tail_layer] = tail_overlay + if(species.get_tail_animation(src)) + tail_overlay.icon_state = t_state + . = tail_overlay + + apply_layer(tail_layer) + +//Not really once, since BYOND can't do that. +//Update this if the ability to flick() images or make looping animation start at the first frame is ever added. +//You can sort of flick images now with flick_overlay -Aro +/mob/living/carbon/human/proc/animate_tail_once() + if(QDESTROYING(src)) + return + + var/t_state = "[species.get_tail(src)]_once" + var/tail_layer = get_tail_layer() + if(src.tail_style && src.tail_style.clip_mask_state) + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + + var/image/tail_overlay = overlays_standing[tail_layer] + if(tail_overlay && tail_overlay.icon_state == t_state) + return //let the existing animation finish + + tail_overlay = set_tail_state(t_state) // Calls remove_layer & apply_layer + if(tail_overlay) + spawn(20) + //check that the animation hasn't changed in the meantime + if(overlays_standing[tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) + animate_tail_stop() + +/mob/living/carbon/human/proc/animate_tail_start() + if(QDESTROYING(src)) + return + + set_tail_state("[species.get_tail(src)]_slow[rand(0,9)]") + +/mob/living/carbon/human/proc/animate_tail_fast() + if(QDESTROYING(src)) + return + + set_tail_state("[species.get_tail(src)]_loop[rand(0,9)]") + +/mob/living/carbon/human/proc/animate_tail_reset() + if(QDESTROYING(src)) + return + + if(stat != DEAD) + set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]") + else + set_tail_state("[species.get_tail(src)]_static") + toggle_tail(FALSE) //So tails stop when someone dies. TODO - Fix this hack ~Leshana + +/mob/living/carbon/human/proc/animate_tail_stop() + if(QDESTROYING(src)) + return + + set_tail_state("[species.get_tail(src)]_static") + +/mob/living/carbon/human/proc/update_wing_showing() + if(QDESTROYING(src)) + return + + remove_layer(WING_LAYER) + remove_layer(WING_LOWER_LAYER) + + var/image/wing_image = get_wing_image(FALSE) + + var/obj/item/organ/external/chest = organs_by_name[BP_TORSO] + + if(wing_image) + wing_image.layer = BODY_LAYER+WING_LAYER + wing_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid + overlays_standing[WING_LAYER] = wing_image + if(wing_style && wing_style.multi_dir) + wing_image = get_wing_image(TRUE) + if(wing_image) + wing_image.layer = BODY_LAYER+WING_LOWER_LAYER + overlays_standing[WING_LOWER_LAYER] = wing_image + + apply_layer(WING_LAYER) + apply_layer(WING_LOWER_LAYER) + +/mob/living/carbon/human/update_modifier_visuals() + if(QDESTROYING(src)) + return + + remove_layer(MODIFIER_EFFECTS_LAYER) + + if(!LAZYLEN(modifiers)) + return //No modifiers, no effects. + + var/image/effects = new() + for(var/datum/modifier/M in modifiers) + if(M.mob_overlay_state) + if(M.icon_override) //VOREStation Edit. Override for the modifer icon. + var/image/I = image(icon = 'icons/mob/modifier_effects_vr.dmi', icon_state = M.mob_overlay_state) + I.color = M.effect_color + effects.overlays += I // Leaving this as overlays += + else + var/image/I = image(icon = 'icons/mob/modifier_effects.dmi', icon_state = M.mob_overlay_state) + I.color = M.effect_color + effects.overlays += I // Leaving this as overlays += + + overlays_standing[MODIFIER_EFFECTS_LAYER] = effects + + apply_layer(MODIFIER_EFFECTS_LAYER) + +/mob/living/carbon/human/update_fire() + if(QDESTROYING(src)) + return + + remove_layer(FIRE_LAYER) + + if(!on_fire) + return + + overlays_standing[FIRE_LAYER] = image(icon = 'icons/mob/OnFire.dmi', icon_state = get_fire_icon_state(), layer = BODY_LAYER+FIRE_LAYER) + + apply_layer(FIRE_LAYER) + +/mob/living/carbon/human/update_water() + if(QDESTROYING(src)) + return + + remove_layer(MOB_WATER_LAYER) + + var/depth = check_submerged() + if(!depth || lying) + return + + var/atom/A = loc // We'd better be swimming and on a turf + var/image/I = image(icon = 'icons/mob/submerged.dmi', icon_state = "human_swimming_[depth]", layer = BODY_LAYER+MOB_WATER_LAYER) //TODO: Improve + I.color = A.color + overlays_standing[MOB_WATER_LAYER] = I + + apply_layer(MOB_WATER_LAYER) + +/mob/living/carbon/human/proc/update_surgery() + if(QDESTROYING(src)) + return + + remove_layer(SURGERY_LAYER) + + var/image/total = new + for(var/obj/item/organ/external/E in organs) + if(E.open) + var/image/I = image(icon = 'icons/mob/surgery.dmi', icon_state = "[E.icon_name][round(E.open)]", layer = BODY_LAYER+SURGERY_LAYER) + total.overlays += I // Leaving this as overlays += + + if(total.overlays.len) + overlays_standing[SURGERY_LAYER] = total + apply_layer(SURGERY_LAYER) + +/mob/living/carbon/human/proc/get_wing_image(var/under_layer) + if(QDESTROYING(src)) + return + + //If you are FBP with wing style and didn't set a custom one + if(synthetic && synthetic.includes_wing && !wing_style && !wings_hidden) //VOREStation Edit + var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing? + wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(wing_s) + working.overlays += em_block_image_generic(working) // Leaving this as overlays += + return working + + //If you have custom wings selected + if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL) && !wings_hidden) //VOREStation Edit + var/wing_state = (flapping && wing_style.ani_state) ? wing_style.ani_state : wing_style.icon_state + if(wing_style.multi_dir) + wing_state += "_[under_layer ? "back" : "front"]" + var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = wing_state) + if(wing_style.do_colouration) + wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode) + if(wing_style.extra_overlay) + var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay) + overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode) + wing_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + if(wing_style.extra_overlay2) + var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2) + if(wing_style.ani_state) + overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w) + overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode) + wing_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + else + overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode) + wing_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + var/image/working = image(wing_s) + if(wing_style.em_block) + working.overlays += em_block_image_generic(working) // Leaving this as overlays += + working.pixel_x -= wing_style.wing_offset + return working + +/mob/living/carbon/human/proc/get_ears_overlay() + //If you are FBP with ear style and didn't set a custom one + var/datum/robolimb/model = isSynthetic() + if(istype(model) && model.includes_ears && !ear_style) + var/icon/ears_s = new/icon("icon" = synthetic.icon, "icon_state" = "ears") + ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + return ears_s + + if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) + var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state) + if(ear_style.do_colouration) + ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), ear_style.color_blend_mode) + if(ear_style.extra_overlay) + var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay) + overlay.Blend(rgb(src.r_ears2, src.g_ears2, src.b_ears2), ear_style.color_blend_mode) + ears_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + if(ear_style.extra_overlay2) //MORE COLOURS IS BETTERER + var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay2) + overlay.Blend(rgb(src.r_ears3, src.g_ears3, src.b_ears3), ear_style.color_blend_mode) + ears_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + return ears_s + return null + + +/mob/living/carbon/human/proc/get_tail_image() + //If you are FBP with tail style and didn't set a custom one + var/datum/robolimb/model = isSynthetic() + if(istype(model) && model.includes_tail && !tail_style && !tail_hidden) + var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail") + tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + return image(tail_s) + + //If you have a custom tail selected + if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden) + var/icon/tail_s = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) //CHOMPEdit + if(tail_style.can_loaf && !is_shifted) + pixel_y = (resting) ? -tail_style.loaf_offset*size_multiplier : default_pixel_y //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing + if(tail_style.do_colouration) + tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) + if(tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay) //CHOMPEdit + if(wagging && tail_style.ani_state) + overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) + overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + else + overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + + if(tail_style.extra_overlay2) + var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2) //CHOMPEdit + if(wagging && tail_style.ani_state) + overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w) + overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + else + overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + + var/image/working = image(tail_s) + if(tail_style.em_block) + working.overlays += em_block_image_generic(working) // Leaving this as overlays += + + if(istaurtail(tail_style)) + var/datum/sprite_accessory/tail/taur/taurtype = tail_style + working.pixel_x = tail_style.offset_x + working.pixel_y = tail_style.offset_y + if(taurtype.can_ride && !riding_datum) + riding_datum = new /datum/riding/taur(src) + verbs |= /mob/living/carbon/human/proc/taur_mount + verbs |= /mob/living/proc/toggle_rider_reins + else if(islongtail(tail_style)) + working.pixel_x = tail_style.offset_x + working.pixel_y = tail_style.offset_y + return working + return null + +// TODO - Move this to where it should go ~Leshana +/mob/living/proc/stop_flying() + if(QDESTROYING(src)) + return + flying = FALSE + return 1 + +/mob/living/carbon/human/stop_flying() + if((. = ..())) + update_wing_showing() + +//Human Overlays Indexes///////// +/* CHOMPEdit - why are these undefined?? +#undef MUTATIONS_LAYER +#undef SKIN_LAYER +#undef MOB_DAM_LAYER +#undef SURGERY_LAYER +#undef UNDERWEAR_LAYER +#undef SHOES_LAYER_ALT +#undef UNIFORM_LAYER +#undef ID_LAYER +#undef SHOES_LAYER +#undef GLOVES_LAYER +#undef BELT_LAYER +#undef SUIT_LAYER +#undef TAIL_UPPER_LAYER +#undef TAIL_LOWER_LAYER +#undef GLASSES_LAYER +#undef BELT_LAYER_ALT +#undef SUIT_STORE_LAYER +#undef BACK_LAYER +#undef HAIR_LAYER +#undef EARS_LAYER +#undef EYES_LAYER +#undef FACEMASK_LAYER +#undef HEAD_LAYER +#undef HANDCUFF_LAYER +#undef LEGCUFF_LAYER +#undef L_HAND_LAYER +#undef R_HAND_LAYER +#undef VORE_BELLY_LAYER +#undef MODIFIER_EFFECTS_LAYER +#undef FIRE_LAYER +#undef WATER_LAYER +#undef TARGETED_LAYER +#undef TOTAL_LAYERS +*/ diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 0ed74f15cd..bcbf8fb132 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -1,169 +1,169 @@ -/mob/living/carbon/slime/proc/Wrap(var/mob/living/M) // This is a proc for the clicks - if (Victim == M || src == M) - Feedstop() - return - - if (Victim) - to_chat(src, "I am already feeding...") - return - - var t = invalidFeedTarget(M) - if (t) - to_chat(src,t) - return - - Feedon(M) - -/mob/living/carbon/slime/proc/invalidFeedTarget(var/mob/living/M) - if (!M || !istype(M)) - return "This subject is incomparable..." - if (istype(M, /mob/living/carbon/slime)) // No cannibalism... yet - return "I cannot feed on other slimes..." - if (!Adjacent(M)) - return "This subject is too far away..." - if (istype(M, /mob/living/carbon) && M.getCloneLoss() >= M.getMaxHealth() * 1.5 || istype(M, /mob/living/simple_mob) && M.stat == DEAD) - return "This subject does not have an edible life energy..." - for(var/mob/living/carbon/slime/met in view()) - if(met.Victim == M && met != src) - return "The [met.name] is already feeding on this subject..." - return 0 - -/mob/living/carbon/slime/proc/Feedon(var/mob/living/M) - Victim = M - loc = M.loc - canmove = 0 - anchored = TRUE - - regenerate_icons() - - while(Victim && !invalidFeedTarget(M) && stat != 2) - canmove = 0 - - if(Adjacent(M)) - UpdateFeed(M) - - if(istype(M, /mob/living/carbon)) - Victim.adjustCloneLoss(rand(5,6)) - Victim.adjustToxLoss(rand(1,2)) - if(Victim.health <= 0) - Victim.adjustToxLoss(rand(2,4)) - - else if(istype(M, /mob/living/simple_mob)) - Victim.adjustBruteLoss(is_adult ? rand(7, 15) : rand(4, 12)) - - else - to_chat(src, "[pick("This subject is incompatible", "This subject does not have a life energy", "This subject is empty", "I am not satisfied", "I can not feed from this subject", "I do not feel nourished", "This subject is not food")]...") - Feedstop() - break - - if(prob(15) && M.client && istype(M, /mob/living/carbon)) - var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!") - if (ishuman(M)) - var/mob/living/carbon/human/H = M - H.custom_pain(painMes, 100) - else if (istype(M, /mob/living/carbon)) - var/mob/living/carbon/C = M - if (C.can_feel_pain()) - to_chat(M, "[painMes]") - - gain_nutrition(rand(20,25)) - - adjustOxyLoss(-10) //Heal yourself - adjustBruteLoss(-10) - adjustFireLoss(-10) - adjustCloneLoss(-10) - updatehealth() - if(Victim) - Victim.updatehealth() - - sleep(30) // Deal damage every 3 seconds - else - break - - canmove = 1 - anchored = FALSE - - if(M && invalidFeedTarget(M)) // This means that the slime drained the victim - if(!client) - if(Victim && !rabid && !attacked && Victim.LAssailant && Victim.LAssailant != Victim && prob(50)) - if(!(Victim.LAssailant in Friends)) - Friends[Victim.LAssailant] = 1 - else - ++Friends[Victim.LAssailant] - - else - to_chat(src, "This subject does not have a strong enough life energy anymore...") - - Victim = null - -/mob/living/carbon/slime/proc/Feedstop() - if(Victim) - if(Victim.client) - to_chat(Victim, "[src] has let go of your head!") - Victim = null - -/mob/living/carbon/slime/proc/UpdateFeed(var/mob/M) - if(Victim) - if(Victim == M) - loc = M.loc // simple "attach to head" effect! - -/mob/living/carbon/slime/verb/Evolve() - set category = "Slime" - set desc = "This will let you evolve from baby to adult slime." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - if(!is_adult) - if(amount_grown >= 10) - is_adult = 1 - maxHealth = 200 - amount_grown = 0 - regenerate_icons() - name = text("[colour] [is_adult ? "adult" : "baby"] slime ([number])") - else - to_chat(src, "I am not ready to evolve yet...") - else - to_chat(src, "I have already evolved...") - -/mob/living/carbon/slime/verb/Reproduce() - set category = "Slime" - set desc = "This will make you split into four Slimes." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - if(is_adult) - if(amount_grown >= 10) - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - var/list/babies = list() - var/new_nutrition = round(nutrition * 0.9) - var/new_powerlevel = round(powerlevel / 4) - for(var/i = 1, i <= 4, i++) - var/t = colour - if(prob(mutation_chance)) - t = slime_mutation[rand(1,4)] - var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc, t) - if(ckey) M.nutrition = new_nutrition //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! - M.powerlevel = new_powerlevel - if(i != 1) step_away(M, src) - M.Friends = Friends.Copy() - babies += M - feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") - - var/mob/living/carbon/slime/new_slime = pick(babies) - new_slime.universal_speak = universal_speak - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - qdel(src) - else - to_chat(src, "I am not ready to reproduce yet...") - else - to_chat(src, "I am not old enough to reproduce yet...") +/mob/living/carbon/slime/proc/Wrap(var/mob/living/M) // This is a proc for the clicks + if (Victim == M || src == M) + Feedstop() + return + + if (Victim) + to_chat(src, "I am already feeding...") + return + + var t = invalidFeedTarget(M) + if (t) + to_chat(src,t) + return + + Feedon(M) + +/mob/living/carbon/slime/proc/invalidFeedTarget(var/mob/living/M) + if (!M || !istype(M)) + return "This subject is incomparable..." + if (istype(M, /mob/living/carbon/slime)) // No cannibalism... yet + return "I cannot feed on other slimes..." + if (!Adjacent(M)) + return "This subject is too far away..." + if (istype(M, /mob/living/carbon) && M.getCloneLoss() >= M.getMaxHealth() * 1.5 || istype(M, /mob/living/simple_mob) && M.stat == DEAD) + return "This subject does not have an edible life energy..." + for(var/mob/living/carbon/slime/met in view()) + if(met.Victim == M && met != src) + return "The [met.name] is already feeding on this subject..." + return 0 + +/mob/living/carbon/slime/proc/Feedon(var/mob/living/M) + Victim = M + loc = M.loc + canmove = 0 + anchored = TRUE + + regenerate_icons() + + while(Victim && !invalidFeedTarget(M) && stat != 2) + canmove = 0 + + if(Adjacent(M)) + UpdateFeed(M) + + if(istype(M, /mob/living/carbon)) + Victim.adjustCloneLoss(rand(5,6)) + Victim.adjustToxLoss(rand(1,2)) + if(Victim.health <= 0) + Victim.adjustToxLoss(rand(2,4)) + + else if(istype(M, /mob/living/simple_mob)) + Victim.adjustBruteLoss(is_adult ? rand(7, 15) : rand(4, 12)) + + else + to_chat(src, "[pick("This subject is incompatible", "This subject does not have a life energy", "This subject is empty", "I am not satisfied", "I can not feed from this subject", "I do not feel nourished", "This subject is not food")]...") + Feedstop() + break + + if(prob(15) && M.client && istype(M, /mob/living/carbon)) + var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!") + if (ishuman(M)) + var/mob/living/carbon/human/H = M + H.custom_pain(painMes, 100) + else if (istype(M, /mob/living/carbon)) + var/mob/living/carbon/C = M + if (C.can_feel_pain()) + to_chat(M, "[painMes]") + + gain_nutrition(rand(20,25)) + + adjustOxyLoss(-10) //Heal yourself + adjustBruteLoss(-10) + adjustFireLoss(-10) + adjustCloneLoss(-10) + updatehealth() + if(Victim) + Victim.updatehealth() + + sleep(30) // Deal damage every 3 seconds + else + break + + canmove = 1 + anchored = FALSE + + if(M && invalidFeedTarget(M)) // This means that the slime drained the victim + if(!client) + if(Victim && !rabid && !attacked && Victim.LAssailant && Victim.LAssailant != Victim && prob(50)) + if(!(Victim.LAssailant in Friends)) + Friends[Victim.LAssailant] = 1 + else + ++Friends[Victim.LAssailant] + + else + to_chat(src, "This subject does not have a strong enough life energy anymore...") + + Victim = null + +/mob/living/carbon/slime/proc/Feedstop() + if(Victim) + if(Victim.client) + to_chat(Victim, "[src] has let go of your head!") + Victim = null + +/mob/living/carbon/slime/proc/UpdateFeed(var/mob/M) + if(Victim) + if(Victim == M) + loc = M.loc // simple "attach to head" effect! + +/mob/living/carbon/slime/verb/Evolve() + set category = "Slime" + set desc = "This will let you evolve from baby to adult slime." + + if(stat) + to_chat(src, "I must be conscious to do this...") + return + + if(!is_adult) + if(amount_grown >= 10) + is_adult = 1 + maxHealth = 200 + amount_grown = 0 + regenerate_icons() + name = text("[colour] [is_adult ? "adult" : "baby"] slime ([number])") + else + to_chat(src, "I am not ready to evolve yet...") + else + to_chat(src, "I have already evolved...") + +/mob/living/carbon/slime/verb/Reproduce() + set category = "Slime" + set desc = "This will make you split into four Slimes." + + if(stat) + to_chat(src, "I must be conscious to do this...") + return + + if(is_adult) + if(amount_grown >= 10) + if(stat) + to_chat(src, "I must be conscious to do this...") + return + + var/list/babies = list() + var/new_nutrition = round(nutrition * 0.9) + var/new_powerlevel = round(powerlevel / 4) + for(var/i = 1, i <= 4, i++) + var/t = colour + if(prob(mutation_chance)) + t = slime_mutation[rand(1,4)] + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc, t) + if(ckey) M.nutrition = new_nutrition //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! + M.powerlevel = new_powerlevel + if(i != 1) step_away(M, src) + M.Friends = Friends.Copy() + babies += M + feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") + + var/mob/living/carbon/slime/new_slime = pick(babies) + new_slime.universal_speak = universal_speak + if(src.mind) + src.mind.transfer_to(new_slime) + else + new_slime.key = src.key + qdel(src) + else + to_chat(src, "I am not ready to reproduce yet...") + else + to_chat(src, "I am not old enough to reproduce yet...") diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 8af9d9e20d..5434b31c44 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -1,99 +1,99 @@ -/mob/living/carbon/resist_fire() - adjust_fire_stacks(-1.2) - Weaken(3) - spin(32,2) - visible_message( - "[src] rolls on the floor, trying to put themselves out!", - "You stop, drop, and roll!" - ) - sleep(30) - if(fire_stacks <= 0) - visible_message( - "[src] has successfully extinguished themselves!", - "You extinguish yourself." - ) - ExtinguishMob() - return TRUE - -/mob/living/carbon/resist_restraints() - var/obj/item/I = null - if(handcuffed) - I = handcuffed - else if(legcuffed) - I = legcuffed - - if(I) - setClickCooldown(100) - cuff_resist(I, cuff_break = can_break_cuffs()) - -/mob/living/carbon/proc/reduce_cuff_time() - return FALSE - -/mob/living/carbon/proc/cuff_resist(obj/item/weapon/handcuffs/I, breakouttime = 1200, cuff_break = 0) - - if(istype(I)) - breakouttime = I.breakouttime - - var/displaytime = breakouttime / 10 - - var/reduceCuffTime = reduce_cuff_time() - if(reduceCuffTime) - breakouttime /= reduceCuffTime - displaytime /= reduceCuffTime - - if(cuff_break) - visible_message("[src] is trying to break [I]!", - "You attempt to break your [I]. (This will take around 5 seconds and you need to stand still)") - - if(do_after(src, 5 SECONDS, target = src, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if(!I || buckled) - return - visible_message("[src] manages to break [I]!", - "You successfully break your [I].") - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - - if(I == handcuffed) - handcuffed = null - update_handcuffed() - else if(I == legcuffed) - legcuffed = null - update_inv_legcuffed() - - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - - qdel(I) - else - to_chat(src, "You fail to break [I].") - return - - visible_message("[src] attempts to remove [I]!", - "You attempt to remove [I]. (This will take around [displaytime] seconds and you need to stand still)") - if(do_after(src, breakouttime, target = src, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) - visible_message("[src] manages to remove [I]!", - "You successfully remove [I].") - drop_from_inventory(I) - -/mob/living/carbon/resist_buckle() - if(!buckled) - return - - if(!restrained()) - return ..() - - setClickCooldown(100) - visible_message( - "[src] attempts to unbuckle themself!", - "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" - ) - - if(do_after(src, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) - if(!buckled) - return - visible_message("[src] manages to unbuckle themself!", - "You successfully unbuckle yourself.") - buckled.user_unbuckle_mob(src, src) - -/mob/living/carbon/proc/can_break_cuffs() - if(HULK in mutations) - return 1 +/mob/living/carbon/resist_fire() + adjust_fire_stacks(-1.2) + Weaken(3) + spin(32,2) + visible_message( + "[src] rolls on the floor, trying to put themselves out!", + "You stop, drop, and roll!" + ) + sleep(30) + if(fire_stacks <= 0) + visible_message( + "[src] has successfully extinguished themselves!", + "You extinguish yourself." + ) + ExtinguishMob() + return TRUE + +/mob/living/carbon/resist_restraints() + var/obj/item/I = null + if(handcuffed) + I = handcuffed + else if(legcuffed) + I = legcuffed + + if(I) + setClickCooldown(100) + cuff_resist(I, cuff_break = can_break_cuffs()) + +/mob/living/carbon/proc/reduce_cuff_time() + return FALSE + +/mob/living/carbon/proc/cuff_resist(obj/item/weapon/handcuffs/I, breakouttime = 1200, cuff_break = 0) + + if(istype(I)) + breakouttime = I.breakouttime + + var/displaytime = breakouttime / 10 + + var/reduceCuffTime = reduce_cuff_time() + if(reduceCuffTime) + breakouttime /= reduceCuffTime + displaytime /= reduceCuffTime + + if(cuff_break) + visible_message("[src] is trying to break [I]!", + "You attempt to break your [I]. (This will take around 5 seconds and you need to stand still)") + + if(do_after(src, 5 SECONDS, target = src, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(!I || buckled) + return + visible_message("[src] manages to break [I]!", + "You successfully break your [I].") + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + + if(I == handcuffed) + handcuffed = null + update_handcuffed() + else if(I == legcuffed) + legcuffed = null + update_inv_legcuffed() + + if(buckled && buckled.buckle_require_restraints) + buckled.unbuckle_mob() + + qdel(I) + else + to_chat(src, "You fail to break [I].") + return + + visible_message("[src] attempts to remove [I]!", + "You attempt to remove [I]. (This will take around [displaytime] seconds and you need to stand still)") + if(do_after(src, breakouttime, target = src, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) + visible_message("[src] manages to remove [I]!", + "You successfully remove [I].") + drop_from_inventory(I) + +/mob/living/carbon/resist_buckle() + if(!buckled) + return + + if(!restrained()) + return ..() + + setClickCooldown(100) + visible_message( + "[src] attempts to unbuckle themself!", + "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" + ) + + if(do_after(src, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(!buckled) + return + visible_message("[src] manages to unbuckle themself!", + "You successfully unbuckle yourself.") + buckled.user_unbuckle_mob(src, src) + +/mob/living/carbon/proc/can_break_cuffs() + if(HULK in mutations) + return 1 diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index babe6c4300..3783df0827 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -1,194 +1,194 @@ - -/* - apply_damage(a,b,c) - args - a:damage - How much damage to take - b:damage_type - What type of damage to take, brute, burn - c:def_zone - Where to take the damage if its brute or burn - Returns - standard 0 if fail -*/ -/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/used_weapon = null, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null) - if(Debug2) - to_world_log("## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked].") - if(!damage || (blocked >= 100)) - return 0 - for(var/datum/modifier/M in modifiers) //MODIFIER STUFF. It's best to do this RIGHT before armor is calculated, so it's done here! This is the 'forcefield' defence. - if(damagetype == BRUTE && (!isnull(M.effective_brute_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_brute_resistance - continue - if((damagetype == BURN || damagetype == ELECTROCUTE)&& (!isnull(M.effective_fire_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_fire_resistance - continue - if(damagetype == TOX && (!isnull(M.effective_tox_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_tox_resistance - continue - if(damagetype == OXY && (!isnull(M.effective_oxy_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_oxy_resistance - continue - if(damagetype == CLONE && (!isnull(M.effective_clone_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_clone_resistance - continue - if(damagetype == HALLOSS && (!isnull(M.effective_hal_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - damage = damage * M.effective_hal_resistance - continue - if(damagetype == SEARING && (!isnull(M.effective_fire_resistance) || !isnull(M.effective_brute_resistance))) - if(M.energy_based) - M.energy_source.use(M.damage_cost * damage) - var/damage_mitigation = 0//Used for dual calculations. - if(!isnull(M.effective_fire_resistance)) - damage_mitigation += round((1/3)*damage * M.effective_fire_resistance) - if(!isnull(M.effective_brute_resistance)) - damage_mitigation += round((2/3)*damage * M.effective_brute_resistance) - damage -= damage_mitigation - continue - if(damagetype == BIOACID && (isSynthetic() && (!isnull(M.effective_fire_resistance))) || (!isSynthetic() && M.effective_tox_resistance)) - if(isSynthetic()) - damage = damage * M.effective_fire_resistance - else - damage = damage * M.effective_tox_resistance - continue - if(soaked) - if(soaked >= round(damage*0.8)) - damage -= round(damage*0.8) - else - damage -= soaked - - var/initial_blocked = blocked - - blocked = (100-blocked)/100 - switch(damagetype) - if(BRUTE) - adjustBruteLoss(damage * blocked) - if(BURN) - if(COLD_RESISTANCE in mutations) - damage = 0 - adjustFireLoss(damage * blocked) - if(SEARING) - apply_damage(round(damage / 3), BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) - apply_damage(round(damage / 3 * 2), BRUTE, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) - if(TOX) - adjustToxLoss(damage * blocked) - if(OXY) - adjustOxyLoss(damage * blocked) - if(CLONE) - adjustCloneLoss(damage * blocked) - if(HALLOSS) - adjustHalLoss(damage * blocked) - if(ELECTROCUTE) - electrocute_act(damage, used_weapon, 1.0, def_zone) - if(BIOACID) - if(isSynthetic()) - apply_damage(damage, BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) // Handle it as normal burn. - else - adjustToxLoss(damage * blocked) - if(ELECTROMAG) - damage = damage * blocked - switch(round(damage)) - if(91 to INFINITY) - emp_act(1) - if(76 to 90) - if(prob(50)) - emp_act(1) - else - emp_act(2) - if(61 to 75) - emp_act(2) - if(46 to 60) - if(prob(50)) - emp_act(2) - else - emp_act(3) - if(31 to 45) - emp_act(3) - if(16 to 30) - if(prob(50)) - emp_act(3) - else - emp_act(4) - if(0 to 15) - emp_act(4) - flash_weak_pain() - updatehealth() - return 1 - - -/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0) - if(blocked >= 100) - return 0 - // INSERT MODIFIER CODE HERE... But no, really, only two things in the game use it, quad and viruses. The former is admin-only and the latter wouldn't be affected logically, but would if shield code was inerted here. If you really want, you can copy&paste the above and modify it to adjust brute/burn/etc. I do not advise this however. - if(brute) apply_damage(brute, BRUTE, def_zone, blocked) - if(burn) apply_damage(burn, BURN, def_zone, blocked) - if(tox) apply_damage(tox, TOX, def_zone, blocked) - if(oxy) apply_damage(oxy, OXY, def_zone, blocked) - if(clone) apply_damage(clone, CLONE, def_zone, blocked) - if(halloss) apply_damage(halloss, HALLOSS, def_zone, blocked) - return 1 - - - -/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) - if(Debug2) - to_world_log("## DEBUG: apply_effect() was called. The type of effect is [effecttype]. Blocked by [blocked].") - if(!effect || (blocked >= 100)) - return 0 - blocked = (100-blocked)/100 - - switch(effecttype) - if(STUN) - Stun(effect * blocked) - if(WEAKEN) - Weaken(effect * blocked) - if(PARALYZE) - Paralyse(effect * blocked) - if(AGONY) - halloss += max((effect * blocked), 0) // Useful for objects that cause "subdual" damage. PAIN! - if(IRRADIATE) - /* - var/rad_protection = check_protection ? getarmor(null, "rad")/100 : 0 - radiation += max((1-rad_protection)*effect/(blocked+1),0)//Rads auto check armor - */ - var/rad_protection = getarmor(null, "rad") - rad_protection = (100-rad_protection)/100 - radiation += max((effect * rad_protection), 0) - if(STUTTER) - if(status_flags & CANSTUN) // stun is usually associated with stutter - stuttering = max(stuttering,(effect * blocked)) - if(EYE_BLUR) - eye_blurry = max(eye_blurry,(effect * blocked)) - if(DROWSY) - drowsyness = max(drowsyness,(effect * blocked)) - updatehealth() - return 1 - - -/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0, var/ignite = 0, var/flammable = 0) - if(blocked >= 100) - return 0 - if(stun) apply_effect(stun, STUN, blocked) - if(weaken) apply_effect(weaken, WEAKEN, blocked) - if(paralyze) apply_effect(paralyze, PARALYZE, blocked) - if(irradiate) apply_effect(irradiate, IRRADIATE, blocked) - if(stutter) apply_effect(stutter, STUTTER, blocked) - if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked) - if(drowsy) apply_effect(drowsy, DROWSY, blocked) - if(agony) apply_effect(agony, AGONY, blocked) - if(flammable) adjust_fire_stacks(flammable) - if(ignite) - if(ignite >= 3) - add_modifier(/datum/modifier/fire/stack_managed/intense, 60 SECONDS) - else - add_modifier(/datum/modifier/fire/stack_managed, 45 * ignite SECONDS) - return 1 + +/* + apply_damage(a,b,c) + args + a:damage - How much damage to take + b:damage_type - What type of damage to take, brute, burn + c:def_zone - Where to take the damage if its brute or burn + Returns + standard 0 if fail +*/ +/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/used_weapon = null, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null) + if(Debug2) + to_world_log("## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked].") + if(!damage || (blocked >= 100)) + return 0 + for(var/datum/modifier/M in modifiers) //MODIFIER STUFF. It's best to do this RIGHT before armor is calculated, so it's done here! This is the 'forcefield' defence. + if(damagetype == BRUTE && (!isnull(M.effective_brute_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_brute_resistance + continue + if((damagetype == BURN || damagetype == ELECTROCUTE)&& (!isnull(M.effective_fire_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_fire_resistance + continue + if(damagetype == TOX && (!isnull(M.effective_tox_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_tox_resistance + continue + if(damagetype == OXY && (!isnull(M.effective_oxy_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_oxy_resistance + continue + if(damagetype == CLONE && (!isnull(M.effective_clone_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_clone_resistance + continue + if(damagetype == HALLOSS && (!isnull(M.effective_hal_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + damage = damage * M.effective_hal_resistance + continue + if(damagetype == SEARING && (!isnull(M.effective_fire_resistance) || !isnull(M.effective_brute_resistance))) + if(M.energy_based) + M.energy_source.use(M.damage_cost * damage) + var/damage_mitigation = 0//Used for dual calculations. + if(!isnull(M.effective_fire_resistance)) + damage_mitigation += round((1/3)*damage * M.effective_fire_resistance) + if(!isnull(M.effective_brute_resistance)) + damage_mitigation += round((2/3)*damage * M.effective_brute_resistance) + damage -= damage_mitigation + continue + if(damagetype == BIOACID && (isSynthetic() && (!isnull(M.effective_fire_resistance))) || (!isSynthetic() && M.effective_tox_resistance)) + if(isSynthetic()) + damage = damage * M.effective_fire_resistance + else + damage = damage * M.effective_tox_resistance + continue + if(soaked) + if(soaked >= round(damage*0.8)) + damage -= round(damage*0.8) + else + damage -= soaked + + var/initial_blocked = blocked + + blocked = (100-blocked)/100 + switch(damagetype) + if(BRUTE) + adjustBruteLoss(damage * blocked) + if(BURN) + if(COLD_RESISTANCE in mutations) + damage = 0 + adjustFireLoss(damage * blocked) + if(SEARING) + apply_damage(round(damage / 3), BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) + apply_damage(round(damage / 3 * 2), BRUTE, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) + if(TOX) + adjustToxLoss(damage * blocked) + if(OXY) + adjustOxyLoss(damage * blocked) + if(CLONE) + adjustCloneLoss(damage * blocked) + if(HALLOSS) + adjustHalLoss(damage * blocked) + if(ELECTROCUTE) + electrocute_act(damage, used_weapon, 1.0, def_zone) + if(BIOACID) + if(isSynthetic()) + apply_damage(damage, BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) // Handle it as normal burn. + else + adjustToxLoss(damage * blocked) + if(ELECTROMAG) + damage = damage * blocked + switch(round(damage)) + if(91 to INFINITY) + emp_act(1) + if(76 to 90) + if(prob(50)) + emp_act(1) + else + emp_act(2) + if(61 to 75) + emp_act(2) + if(46 to 60) + if(prob(50)) + emp_act(2) + else + emp_act(3) + if(31 to 45) + emp_act(3) + if(16 to 30) + if(prob(50)) + emp_act(3) + else + emp_act(4) + if(0 to 15) + emp_act(4) + flash_weak_pain() + updatehealth() + return 1 + + +/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0) + if(blocked >= 100) + return 0 + // INSERT MODIFIER CODE HERE... But no, really, only two things in the game use it, quad and viruses. The former is admin-only and the latter wouldn't be affected logically, but would if shield code was inerted here. If you really want, you can copy&paste the above and modify it to adjust brute/burn/etc. I do not advise this however. + if(brute) apply_damage(brute, BRUTE, def_zone, blocked) + if(burn) apply_damage(burn, BURN, def_zone, blocked) + if(tox) apply_damage(tox, TOX, def_zone, blocked) + if(oxy) apply_damage(oxy, OXY, def_zone, blocked) + if(clone) apply_damage(clone, CLONE, def_zone, blocked) + if(halloss) apply_damage(halloss, HALLOSS, def_zone, blocked) + return 1 + + + +/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) + if(Debug2) + to_world_log("## DEBUG: apply_effect() was called. The type of effect is [effecttype]. Blocked by [blocked].") + if(!effect || (blocked >= 100)) + return 0 + blocked = (100-blocked)/100 + + switch(effecttype) + if(STUN) + Stun(effect * blocked) + if(WEAKEN) + Weaken(effect * blocked) + if(PARALYZE) + Paralyse(effect * blocked) + if(AGONY) + halloss += max((effect * blocked), 0) // Useful for objects that cause "subdual" damage. PAIN! + if(IRRADIATE) + /* + var/rad_protection = check_protection ? getarmor(null, "rad")/100 : 0 + radiation += max((1-rad_protection)*effect/(blocked+1),0)//Rads auto check armor + */ + var/rad_protection = getarmor(null, "rad") + rad_protection = (100-rad_protection)/100 + radiation += max((effect * rad_protection), 0) + if(STUTTER) + if(status_flags & CANSTUN) // stun is usually associated with stutter + stuttering = max(stuttering,(effect * blocked)) + if(EYE_BLUR) + eye_blurry = max(eye_blurry,(effect * blocked)) + if(DROWSY) + drowsyness = max(drowsyness,(effect * blocked)) + updatehealth() + return 1 + + +/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0, var/ignite = 0, var/flammable = 0) + if(blocked >= 100) + return 0 + if(stun) apply_effect(stun, STUN, blocked) + if(weaken) apply_effect(weaken, WEAKEN, blocked) + if(paralyze) apply_effect(paralyze, PARALYZE, blocked) + if(irradiate) apply_effect(irradiate, IRRADIATE, blocked) + if(stutter) apply_effect(stutter, STUTTER, blocked) + if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked) + if(drowsy) apply_effect(drowsy, DROWSY, blocked) + if(agony) apply_effect(agony, AGONY, blocked) + if(flammable) adjust_fire_stacks(flammable) + if(ignite) + if(ignite >= 3) + add_modifier(/datum/modifier/fire/stack_managed/intense, 60 SECONDS) + else + add_modifier(/datum/modifier/fire/stack_managed, 45 * ignite SECONDS) + return 1 diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index eefe4929f9..c83980f18f 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -1,36 +1,36 @@ -/mob/living - var/datum/language/default_language - -/mob/living/verb/set_default_language(language as null|anything in languages) - set name = "Set Default Language" - set category = "IC" - - if (only_species_language && language != GLOB.all_languages[src.species_language]) - to_chat(src, "You can only speak your species language, [src.species_language].") - return 0 - - if(language == GLOB.all_languages[src.species_language]) - to_chat(src, "You will now speak your standard default language, [language ? language : "common"], if you do not specify a language when speaking.") - else if (language) - - if(language && !can_speak(language)) - to_chat(src, "You are unable to speak that language.") - return - - to_chat(src, "You will now speak [language] if you do not specify a language when speaking.") - else - to_chat(src, "You will now speak whatever your standard default language is if you do not specify one when speaking.") - default_language = language - -// Silicons can't neccessarily speak everything in their languages list -/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs) - ..() - -/mob/living/verb/check_default_language() - set name = "Check Default Language" - set category = "IC" - - if(default_language) - to_chat(src, "You are currently speaking [default_language] by default.") - else - to_chat(src, "Your current default language is your species or mob type default.") +/mob/living + var/datum/language/default_language + +/mob/living/verb/set_default_language(language as null|anything in languages) + set name = "Set Default Language" + set category = "IC" + + if (only_species_language && language != GLOB.all_languages[src.species_language]) + to_chat(src, "You can only speak your species language, [src.species_language].") + return 0 + + if(language == GLOB.all_languages[src.species_language]) + to_chat(src, "You will now speak your standard default language, [language ? language : "common"], if you do not specify a language when speaking.") + else if (language) + + if(language && !can_speak(language)) + to_chat(src, "You are unable to speak that language.") + return + + to_chat(src, "You will now speak [language] if you do not specify a language when speaking.") + else + to_chat(src, "You will now speak whatever your standard default language is if you do not specify one when speaking.") + default_language = language + +// Silicons can't neccessarily speak everything in their languages list +/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs) + ..() + +/mob/living/verb/check_default_language() + set name = "Check Default Language" + set category = "IC" + + if(default_language) + to_chat(src, "You are currently speaking [default_language] by default.") + else + to_chat(src, "Your current default language is your species or mob type default.") diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 86a9afb81e..2e0c5c4fe2 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -1,286 +1,286 @@ -/mob/living/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - ..() - - if (transforming) - return - handle_modifiers() //VOREStation Edit - Needs to be done even if in nullspace. - if(!loc) - return - - var/datum/gas_mixture/environment - if(isbelly(loc)) - environment = loc.return_air_for_internal_lifeform(src) - else - environment = loc.return_air() - - //handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit - - handle_light() - - if(stat != DEAD) - //Breathing, if applicable - handle_breathing() - - //Mutations and radiation - handle_mutations_and_radiation() - - - - //Blood - handle_blood() - - //Random events (vomiting etc) - handle_random_events() - - . = 1 - - //Chemicals in the body, this is moved over here so that blood can be added after death - handle_chemicals_in_body() - - //Handle temperature/pressure differences between body and environment - if(environment) - handle_environment(environment) - - //Check if we're on fire - handle_fire() - - if(client && !(client.prefs.ambience_freq == 0)) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them, and do not have repeating ambience disabled. - handle_ambience() - - //stuff in the stomach - //handle_stomach() //VOREStation Code - - update_gravity(mob_has_gravity()) - - update_pulling() - - for(var/obj/item/weapon/grab/G in src) - G.process() - - if(handle_regular_status_updates()) // Status & health update, are we dead or alive etc. - handle_disabilities() // eye, ear, brain damages - handle_statuses() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc - - handle_actions() - - update_canmove() - - handle_regular_hud_updates() - - handle_vision() - - handle_tf_holder() //VOREStation Addition - - handle_vr_derez() // CHOMPedit - -/mob/living/proc/handle_breathing() - return - -/mob/living/proc/handle_mutations_and_radiation() - return - -/mob/living/proc/handle_chemicals_in_body() - return - -/mob/living/proc/handle_blood() - return - -/mob/living/proc/handle_random_events() - return - -/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) - return - -/mob/living/proc/handle_stomach() - return - -/mob/living/proc/handle_ambience() // If you're in an ambient area and have not moved out of it for x time as configured per-client, and do not have it disabled, we're going to play ambience again to you, to help break up the silence. - if(world.time >= (lastareachange + client.prefs.ambience_freq MINUTES)) // Every 5 minutes (by default, set per-client), we're going to run a 35% chance (by default, also set per-client) to play ambience. - var/area/A = get_area(src) - if(A) - lastareachange = world.time // This will refresh the last area change to prevent this call happening LITERALLY every life tick. - A.play_ambience(src, initial = FALSE) - -/mob/living/proc/update_pulling() - if(pulling) - if(incapacitated()) - stop_pulling() - -//This updates the health and status of the mob (conscious, unconscious, dead) -/mob/living/proc/handle_regular_status_updates() - updatehealth() - if(stat != DEAD) - if(paralysis) - set_stat(UNCONSCIOUS) - else if (status_flags & FAKEDEATH) - set_stat(UNCONSCIOUS) - else - set_stat(CONSCIOUS) - return 1 - -/mob/living/proc/handle_statuses() - handle_stunned() - handle_weakened() - handle_paralysed() - handle_stuttering() - handle_silent() - handle_drugged() - handle_slurring() - handle_confused() - -/mob/living/proc/handle_stunned() - if(stunned) - AdjustStunned(-1) - throw_alert("stunned", /obj/screen/alert/stunned) - else - clear_alert("stunned") - return stunned - -/mob/living/proc/handle_weakened() - if(weakened) - AdjustWeakened(-1) - throw_alert("weakened", /obj/screen/alert/weakened) - else - clear_alert("weakened") - return weakened - -/mob/living/proc/handle_stuttering() - if(stuttering) - stuttering = max(stuttering-1, 0) - return stuttering - -/mob/living/proc/handle_silent() - if(silent) - silent = max(silent-1, 0) - return silent - -/mob/living/proc/handle_drugged() - if(druggy) - druggy = max(druggy-1, 0) - throw_alert("high", /obj/screen/alert/high) - else - clear_alert("high") - return druggy - -/mob/living/proc/handle_slurring() - if(slurring) - slurring = max(slurring-1, 0) - return slurring - -/mob/living/proc/handle_paralysed() - if(paralysis) - AdjustParalysis(-1) - throw_alert("paralyzed", /obj/screen/alert/paralyzed) - else - clear_alert("paralyzed") - return paralysis - -/mob/living/proc/handle_confused() - if(confused) - AdjustConfused(-1) - throw_alert("confused", /obj/screen/alert/confused) - else - clear_alert("confused") - return confused - -/mob/living/proc/handle_disabilities() - //Eyes - if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own - SetBlinded(1) - throw_alert("blind", /obj/screen/alert/blind) - else if(eye_blind) //blindness, heals slowly over time - AdjustBlinded(-1) - throw_alert("blind", /obj/screen/alert/blind) - else - clear_alert("blind") - - if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) - - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) - else - // deafness heals slowly over time, unless ear_damage is over 100 - if(ear_damage < 100) - adjustEarDamage(-0.05,-1) - -/mob/living/handle_regular_hud_updates() - if(!client) - return 0 - ..() - - handle_darksight() - handle_hud_icons() - - return 1 - -/mob/living/proc/update_sight() - if(!seedarkness) - see_invisible = SEE_INVISIBLE_NOLIGHTING - else - see_invisible = initial(see_invisible) - - sight = initial(sight) - - for(var/datum/modifier/M in modifiers) - if(!isnull(M.vision_flags)) - sight |= M.vision_flags - - return - -/mob/living/proc/handle_hud_icons() - handle_hud_icons_health() - return - -/mob/living/proc/handle_hud_icons_health() - return - -/mob/living/proc/handle_light() - if(glow_override) - return FALSE - - if(instability >= TECHNOMANCER_INSTABILITY_MIN_GLOW) - var/distance = round(sqrt(instability / 2)) - if(distance) - set_light(distance, distance * 4, l_color = "#660066") - return TRUE - - else if(glow_toggle) - set_light(glow_range, glow_intensity, glow_color) - - else - set_light(0) - return FALSE - -/mob/living/proc/handle_darksight() - if(!seedarkness) //Cheap 'always darksight' var - dsoverlay.alpha = 255 - return - - var/darksightedness = min(see_in_dark/world.view,1.0) //A ratio of how good your darksight is, from 'nada' to 'really darn good' - var/current = dsoverlay.alpha/255 //Our current adjustedness - - var/brightness = 0.0 //We'll assume it's superdark if we can't find something else. - - if(isturf(loc)) - var/turf/T = loc //Will be true 99% of the time, thus avoiding the whole elif chain - brightness = T.get_lumcount() - - //Snowflake treatment of potential locations - else if(istype(loc,/obj/mecha)) //I imagine there's like displays and junk in there. Use the lights! - brightness = 1 - else if(istype(loc,/obj/item/weapon/holder)) //Poor carried teshari and whatnot should adjust appropriately - var/turf/T = get_turf(src) - brightness = T.get_lumcount() - - var/darkness = 1-brightness //Silly, I know, but 'alpha' and 'darkness' go the same direction on a number line - var/adjust_to = min(darkness,darksightedness)//Capped by how darksighted they are - var/distance = abs(current-adjust_to) //Used for how long to animate for - if(distance < 0.01) return //We're already all set - - //to_world("[src] in B:[round(brightness,0.1)] C:[round(current,0.1)] A2:[round(adjust_to,0.1)] D:[round(distance,0.01)] T:[round(distance*10 SECONDS,0.1)]") - animate(dsoverlay, alpha = (adjust_to*255), time = (distance*10 SECONDS)) +/mob/living/Life() + set invisibility = 0 + set background = BACKGROUND_ENABLED + + ..() + + if (transforming) + return + handle_modifiers() //VOREStation Edit - Needs to be done even if in nullspace. + if(!loc) + return + + var/datum/gas_mixture/environment + if(isbelly(loc)) + environment = loc.return_air_for_internal_lifeform(src) + else + environment = loc.return_air() + + //handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit + + handle_light() + + if(stat != DEAD) + //Breathing, if applicable + handle_breathing() + + //Mutations and radiation + handle_mutations_and_radiation() + + + + //Blood + handle_blood() + + //Random events (vomiting etc) + handle_random_events() + + . = 1 + + //Chemicals in the body, this is moved over here so that blood can be added after death + handle_chemicals_in_body() + + //Handle temperature/pressure differences between body and environment + if(environment) + handle_environment(environment) + + //Check if we're on fire + handle_fire() + + if(client && !(client.prefs.ambience_freq == 0)) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them, and do not have repeating ambience disabled. + handle_ambience() + + //stuff in the stomach + //handle_stomach() //VOREStation Code + + update_gravity(mob_has_gravity()) + + update_pulling() + + for(var/obj/item/weapon/grab/G in src) + G.process() + + if(handle_regular_status_updates()) // Status & health update, are we dead or alive etc. + handle_disabilities() // eye, ear, brain damages + handle_statuses() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc + + handle_actions() + + update_canmove() + + handle_regular_hud_updates() + + handle_vision() + + handle_tf_holder() //VOREStation Addition + + handle_vr_derez() // CHOMPedit + +/mob/living/proc/handle_breathing() + return + +/mob/living/proc/handle_mutations_and_radiation() + return + +/mob/living/proc/handle_chemicals_in_body() + return + +/mob/living/proc/handle_blood() + return + +/mob/living/proc/handle_random_events() + return + +/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) + return + +/mob/living/proc/handle_stomach() + return + +/mob/living/proc/handle_ambience() // If you're in an ambient area and have not moved out of it for x time as configured per-client, and do not have it disabled, we're going to play ambience again to you, to help break up the silence. + if(world.time >= (lastareachange + client.prefs.ambience_freq MINUTES)) // Every 5 minutes (by default, set per-client), we're going to run a 35% chance (by default, also set per-client) to play ambience. + var/area/A = get_area(src) + if(A) + lastareachange = world.time // This will refresh the last area change to prevent this call happening LITERALLY every life tick. + A.play_ambience(src, initial = FALSE) + +/mob/living/proc/update_pulling() + if(pulling) + if(incapacitated()) + stop_pulling() + +//This updates the health and status of the mob (conscious, unconscious, dead) +/mob/living/proc/handle_regular_status_updates() + updatehealth() + if(stat != DEAD) + if(paralysis) + set_stat(UNCONSCIOUS) + else if (status_flags & FAKEDEATH) + set_stat(UNCONSCIOUS) + else + set_stat(CONSCIOUS) + return 1 + +/mob/living/proc/handle_statuses() + handle_stunned() + handle_weakened() + handle_paralysed() + handle_stuttering() + handle_silent() + handle_drugged() + handle_slurring() + handle_confused() + +/mob/living/proc/handle_stunned() + if(stunned) + AdjustStunned(-1) + throw_alert("stunned", /obj/screen/alert/stunned) + else + clear_alert("stunned") + return stunned + +/mob/living/proc/handle_weakened() + if(weakened) + AdjustWeakened(-1) + throw_alert("weakened", /obj/screen/alert/weakened) + else + clear_alert("weakened") + return weakened + +/mob/living/proc/handle_stuttering() + if(stuttering) + stuttering = max(stuttering-1, 0) + return stuttering + +/mob/living/proc/handle_silent() + if(silent) + silent = max(silent-1, 0) + return silent + +/mob/living/proc/handle_drugged() + if(druggy) + druggy = max(druggy-1, 0) + throw_alert("high", /obj/screen/alert/high) + else + clear_alert("high") + return druggy + +/mob/living/proc/handle_slurring() + if(slurring) + slurring = max(slurring-1, 0) + return slurring + +/mob/living/proc/handle_paralysed() + if(paralysis) + AdjustParalysis(-1) + throw_alert("paralyzed", /obj/screen/alert/paralyzed) + else + clear_alert("paralyzed") + return paralysis + +/mob/living/proc/handle_confused() + if(confused) + AdjustConfused(-1) + throw_alert("confused", /obj/screen/alert/confused) + else + clear_alert("confused") + return confused + +/mob/living/proc/handle_disabilities() + //Eyes + if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own + SetBlinded(1) + throw_alert("blind", /obj/screen/alert/blind) + else if(eye_blind) //blindness, heals slowly over time + AdjustBlinded(-1) + throw_alert("blind", /obj/screen/alert/blind) + else + clear_alert("blind") + + if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) + else + // deafness heals slowly over time, unless ear_damage is over 100 + if(ear_damage < 100) + adjustEarDamage(-0.05,-1) + +/mob/living/handle_regular_hud_updates() + if(!client) + return 0 + ..() + + handle_darksight() + handle_hud_icons() + + return 1 + +/mob/living/proc/update_sight() + if(!seedarkness) + see_invisible = SEE_INVISIBLE_NOLIGHTING + else + see_invisible = initial(see_invisible) + + sight = initial(sight) + + for(var/datum/modifier/M in modifiers) + if(!isnull(M.vision_flags)) + sight |= M.vision_flags + + return + +/mob/living/proc/handle_hud_icons() + handle_hud_icons_health() + return + +/mob/living/proc/handle_hud_icons_health() + return + +/mob/living/proc/handle_light() + if(glow_override) + return FALSE + + if(instability >= TECHNOMANCER_INSTABILITY_MIN_GLOW) + var/distance = round(sqrt(instability / 2)) + if(distance) + set_light(distance, distance * 4, l_color = "#660066") + return TRUE + + else if(glow_toggle) + set_light(glow_range, glow_intensity, glow_color) + + else + set_light(0) + return FALSE + +/mob/living/proc/handle_darksight() + if(!seedarkness) //Cheap 'always darksight' var + dsoverlay.alpha = 255 + return + + var/darksightedness = min(see_in_dark/world.view,1.0) //A ratio of how good your darksight is, from 'nada' to 'really darn good' + var/current = dsoverlay.alpha/255 //Our current adjustedness + + var/brightness = 0.0 //We'll assume it's superdark if we can't find something else. + + if(isturf(loc)) + var/turf/T = loc //Will be true 99% of the time, thus avoiding the whole elif chain + brightness = T.get_lumcount() + + //Snowflake treatment of potential locations + else if(istype(loc,/obj/mecha)) //I imagine there's like displays and junk in there. Use the lights! + brightness = 1 + else if(istype(loc,/obj/item/weapon/holder)) //Poor carried teshari and whatnot should adjust appropriately + var/turf/T = get_turf(src) + brightness = T.get_lumcount() + + var/darkness = 1-brightness //Silly, I know, but 'alpha' and 'darkness' go the same direction on a number line + var/adjust_to = min(darkness,darksightedness)//Capped by how darksighted they are + var/distance = abs(current-adjust_to) //Used for how long to animate for + if(distance < 0.01) return //We're already all set + + //to_world("[src] in B:[round(brightness,0.1)] C:[round(current,0.1)] A2:[round(adjust_to,0.1)] D:[round(distance,0.01)] T:[round(distance*10 SECONDS,0.1)]") + animate(dsoverlay, alpha = (adjust_to*255), time = (distance*10 SECONDS)) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5a4767c957..7bdb20349d 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -1,84 +1,84 @@ -/mob/living - see_invisible = SEE_INVISIBLE_LIVING - - //Health and life related vars - var/maxHealth = 100 //Maximum health that should be possible. Avoid adjusting this if you can, and instead use modifiers datums. - var/health = 100 //A mob's health - - var/mob_class = null // A mob's "class", e.g. human, mechanical, animal, etc. Used for certain projectile effects. See __defines/mob.dm for available classes. - - var/hud_updateflag = 0 - - //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS - var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) - var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs) - var/toxloss = 0.0 //Toxic damage caused by being poisoned or radiated - var/fireloss = 0.0 //Burn damage caused by being way too hot, too cold or burnt. - var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims - var/brainloss = 0 //Thought-scrambly damage caused by someone hitting you in the head with a bible or being infected with brainrot. - var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. - - var/nutrition = 400 - var/max_nutrition = MAX_NUTRITION - - var/hallucination = 0 //Directly affects how long a mob will hallucinate for - var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm - - var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. - var/base_attack_cooldown = DEFAULT_ATTACK_COOLDOWN - - var/t_phoron = null - var/t_oxygen = null - var/t_sl_gas = null - var/t_n2 = null - - var/now_pushing = null - var/mob_bump_flag = 0 - var/mob_swap_flags = 0 - var/mob_push_flags = 0 - var/mob_always_swap = 0 - - var/mob/living/cameraFollow = null - var/list/datum/action/actions = list() - - var/tod = null // Time of death - var/update_slimes = 1 - var/silent = null // Can't talk. Value goes down every life proc. - var/on_fire = 0 //The "Are we on fire?" var - var/fire_stacks - - var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. - var/lastpuke = 0 - - var/evasion = 0 // Makes attacks harder to land. Negative numbers increase hit chance. - var/force_max_speed = 0 // If 1, the mob runs extremely fast and cannot be slowed. - - var/image/dsoverlay = null //Overlay used for darksight eye adjustments - - var/glow_toggle = FALSE // If they're glowing! - var/glow_override = FALSE // Ignore the manual toggle - var/glow_range = 2 - var/glow_intensity = null - var/glow_color = "#FFFFFF" // The color they're glowing! - - var/see_invisible_default = SEE_INVISIBLE_LIVING - - var/nest //Not specific, because a Nest may be the prop nest, or blob factory in this case. - - var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots) - var/has_huds = FALSE //Whether or not we should bother initializing the above list - - var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks - - var/looking_elsewhere = FALSE //If the mob's view has been relocated to somewhere else, like via a camera or with binocs - - var/image/selected_image = null // Used for buildmode AI control stuff. - - var/allow_self_surgery = FALSE // Used to determine if the mob can perform surgery on itself. - - - var/tail_alt = 0 - var/flying = 0 // Allows flight - var/inventory_panel_type = /datum/inventory_panel - var/datum/inventory_panel/inventory_panel - var/last_resist_time = 0 // world.time of the most recent resist that wasn't on cooldown. +/mob/living + see_invisible = SEE_INVISIBLE_LIVING + + //Health and life related vars + var/maxHealth = 100 //Maximum health that should be possible. Avoid adjusting this if you can, and instead use modifiers datums. + var/health = 100 //A mob's health + + var/mob_class = null // A mob's "class", e.g. human, mechanical, animal, etc. Used for certain projectile effects. See __defines/mob.dm for available classes. + + var/hud_updateflag = 0 + + //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS + var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) + var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs) + var/toxloss = 0.0 //Toxic damage caused by being poisoned or radiated + var/fireloss = 0.0 //Burn damage caused by being way too hot, too cold or burnt. + var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims + var/brainloss = 0 //Thought-scrambly damage caused by someone hitting you in the head with a bible or being infected with brainrot. + var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. + + var/nutrition = 400 + var/max_nutrition = MAX_NUTRITION + + var/hallucination = 0 //Directly affects how long a mob will hallucinate for + var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm + + var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. + var/base_attack_cooldown = DEFAULT_ATTACK_COOLDOWN + + var/t_phoron = null + var/t_oxygen = null + var/t_sl_gas = null + var/t_n2 = null + + var/now_pushing = null + var/mob_bump_flag = 0 + var/mob_swap_flags = 0 + var/mob_push_flags = 0 + var/mob_always_swap = 0 + + var/mob/living/cameraFollow = null + var/list/datum/action/actions = list() + + var/tod = null // Time of death + var/update_slimes = 1 + var/silent = null // Can't talk. Value goes down every life proc. + var/on_fire = 0 //The "Are we on fire?" var + var/fire_stacks + + var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. + var/lastpuke = 0 + + var/evasion = 0 // Makes attacks harder to land. Negative numbers increase hit chance. + var/force_max_speed = 0 // If 1, the mob runs extremely fast and cannot be slowed. + + var/image/dsoverlay = null //Overlay used for darksight eye adjustments + + var/glow_toggle = FALSE // If they're glowing! + var/glow_override = FALSE // Ignore the manual toggle + var/glow_range = 2 + var/glow_intensity = null + var/glow_color = "#FFFFFF" // The color they're glowing! + + var/see_invisible_default = SEE_INVISIBLE_LIVING + + var/nest //Not specific, because a Nest may be the prop nest, or blob factory in this case. + + var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots) + var/has_huds = FALSE //Whether or not we should bother initializing the above list + + var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks + + var/looking_elsewhere = FALSE //If the mob's view has been relocated to somewhere else, like via a camera or with binocs + + var/image/selected_image = null // Used for buildmode AI control stuff. + + var/allow_self_surgery = FALSE // Used to determine if the mob can perform surgery on itself. + + + var/tail_alt = 0 + var/flying = 0 // Allows flight + var/inventory_panel_type = /datum/inventory_panel + var/datum/inventory_panel/inventory_panel + var/last_resist_time = 0 // world.time of the most recent resist that wasn't on cooldown. diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 8f75e98aaa..babed7cd25 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -1,19 +1,19 @@ -/mob/living/Logout() - ..() - if (mind) - //Per BYOND docs key remains set if the player DCs, becomes null if switching bodies. - if(!key) //key and mind have become seperated. - mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. - - var/datum/component/character_setup/cs = GetComponent(/datum/component/character_setup) - if(cs) - qdel(cs) - - var/datum/component/vore_panel/vp = GetComponent(/datum/component/vore_panel) - if(vp) - qdel(vp) - - spawn(15 SECONDS) //15 seconds to get back into the mob before it goes wild - if(src && !src.client) - if(ai_holder) - ai_holder.go_wake() +/mob/living/Logout() + ..() + if (mind) + //Per BYOND docs key remains set if the player DCs, becomes null if switching bodies. + if(!key) //key and mind have become seperated. + mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. + + var/datum/component/character_setup/cs = GetComponent(/datum/component/character_setup) + if(cs) + qdel(cs) + + var/datum/component/vore_panel/vp = GetComponent(/datum/component/vore_panel) + if(vp) + qdel(vp) + + spawn(15 SECONDS) //15 seconds to get back into the mob before it goes wild + if(src && !src.client) + if(ai_holder) + ai_holder.go_wake() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index d0dabc3f62..b1ae3692f1 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -1,469 +1,469 @@ -var/list/department_radio_keys = list( - ":r" = "right ear", ".r" = "right ear", - ":l" = "left ear", ".l" = "left ear", - ":i" = "intercom", ".i" = "intercom", - ":h" = "department", ".h" = "department", - ":+" = "special", ".+" = "special", //activate radio-specific special functions - ":c" = "Command", ".c" = "Command", - ":n" = "Science", ".n" = "Science", - ":m" = "Medical", ".m" = "Medical", - ":e" = "Engineering", ".e" = "Engineering", - ":k" = "Response Team", ".k" = "Response Team", - ":s" = "Security", ".s" = "Security", - ":w" = "whisper", ".w" = "whisper", - ":t" = "Mercenary", ".t" = "Mercenary", - ":x" = "Raider", ".x" = "Raider", - ":u" = "Supply", ".u" = "Supply", - ":v" = "Service", ".v" = "Service", - ":p" = "AI Private", ".p" = "AI Private", - ":y" = "Explorer", ".y" = "Explorer", //VOREStation Edit //CHOMP keep explo - ":a" = "Talon", ".a" = "Talon", //VOREStation Add, //CHOMP keep explo - ":g" = "Casino", ".g" = "Casino", - - ":R" = "right ear", ".R" = "right ear", - ":L" = "left ear", ".L" = "left ear", - ":I" = "intercom", ".I" = "intercom", - ":H" = "department", ".H" = "department", - ":C" = "Command", ".C" = "Command", - ":N" = "Science", ".N" = "Science", - ":M" = "Medical", ".M" = "Medical", - ":E" = "Engineering", ".E" = "Engineering", - ":k" = "Response Team", ".k" = "Response Team", - ":S" = "Security", ".S" = "Security", - ":W" = "whisper", ".W" = "whisper", - ":T" = "Mercenary", ".T" = "Mercenary", - ":X" = "Raider", ".X" = "Raider", - ":U" = "Supply", ".U" = "Supply", - ":V" = "Service", ".V" = "Service", - ":P" = "AI Private", ".P" = "AI Private", - ":Y" = "Explorer", ".Y" = "Explorer", //CHOMP keep explo - ":A" = "Talon", ".A" = "Talon", //VOREStation Add, //CHOMP keep explo - ":G" = "Casino", ".G" = "Casino", - - // Cyrillic characters on the same keys on the Russian QWERTY (phonetic) layout - ":к" = "right ear", ".к" = "right ear", - ":д" = "left ear", ".д" = "left ear", - ":ш" = "intercom", ".ш" = "intercom", - ":Ñ€" = "department", ".Ñ€" = "department", - ":+" = "special", ".+" = "special", //activate radio-specific special functions - ":Ñ" = "Command", ".Ñ" = "Command", - ":Ñ‚" = "Science", ".Ñ‚" = "Science", - ":ÑŒ" = "Medical", ".ÑŒ" = "Medical", - ":у" = "Engineering", ".у" = "Engineering", - ":л" = "Response Team", ".л" = "Response Team", - ":Ñ‹" = "Security", ".Ñ‹" = "Security", - ":ц" = "whisper", ".ц" = "whisper", - ":е" = "Mercenary", ".е" = "Mercenary", - ":ч" = "Raider", ".ч" = "Raider", - ":г" = "Supply", ".г" = "Supply", - ":м" = "Service", ".м" = "Service", - ":з" = "AI Private", ".з" = "AI Private", - ":н" = "Explorer", ".н" = "Explorer", //CHOMP keep explo - ":Ñ„" = "Talon", ".Ñ„" = "Talon", //VOREStation Add //CHOMP keep explo - ":п" = "Casino", ".п" = "Casino", -) - - -var/list/channel_to_radio_key = new -/proc/get_radio_key_from_channel(var/channel) - var/key = channel_to_radio_key[channel] - if(!key) - for(var/radio_key in department_radio_keys) - if(department_radio_keys[radio_key] == channel) - key = radio_key - break - if(!key) - key = "" - channel_to_radio_key[channel] = key - - return key - -/mob/living/proc/binarycheck() - return FALSE - -/mob/proc/get_default_language() - return null - -/mob/living/get_default_language() - return default_language - -//Takes a list of the form list(message, verb, whispering) and modifies it as needed -//Returns 1 if a speech problem was applied, 0 otherwise -/mob/living/proc/handle_speech_problems(var/list/message_data) - var/list/message_pieces = message_data[1] - var/verb = message_data[2] - var/whispering = message_data[3] - . = 0 - - // Technically this rerolls the verb for as many say pieces as there are. _shrug_ - for(var/datum/multilingual_say_piece/S in message_pieces) - if(S.speaking && (S.speaking.flags & NO_STUTTER || S.speaking.flags & SIGNLANG)) - continue - - if((HULK in mutations) && health >= 25 && length(S.message)) - S.message = "[uppertext(S.message)]!!!" - verb = pick("yells","roars","hollers") - whispering = 0 - . = 1 - if(slurring) - S.message = slur(S.message) - verb = pick("slobbers","slurs") - . = 1 - if(stuttering) - S.message = stutter(S.message) - verb = pick("stammers","stutters") - . = 1 - //VOREStation Edit Start - if(muffled) - verb = pick("muffles") - whispering = 1 - . = 1 - //VOREStation Edit End - //YW Edit start - if(wingdings) - S.message = span("wingdings",(S.message)) - . = 1 - //YW Edit End - - message_data[1] = message_pieces - message_data[2] = verb - message_data[3] = whispering - -/mob/living/proc/handle_message_mode(message_mode, list/message_pieces, verb, used_radios) - if(message_mode == "intercom") - for(var/obj/item/device/radio/intercom/I in view(1, null)) - I.talk_into(src, message_pieces, verb) - used_radios += I - return 0 - -/mob/living/proc/handle_speech_sound() - var/list/returns[2] - returns[1] = null - returns[2] = null - return returns - -/mob/living/proc/get_speech_ending(verb, var/ending) - if(ending == "!") - return pick("exclaims","shouts","yells") - if(ending == "?") - return "asks" - return verb - -/mob/living/say(var/message, var/datum/language/speaking = null, var/whispering = 0) - //If you're muted for IC chat - if(client) - if(message) - client.handle_spam_prevention(MUTE_IC) - if((client.prefs.muted & MUTE_IC) || say_disabled) - to_chat(src, "You cannot speak in IC (Muted).") - return - - //Redirect to say_dead if talker is dead - if(stat) - if(stat == DEAD && !forbid_seeing_deadchat) - return say_dead(message) - return - //VOREStation Addition Start - if(forced_psay) - psay(message) - return - if(autowhisper) - whispering = 1 - //VOREStation Addition End - //Parse the mode - var/message_mode = parse_message_mode(message, "headset") - - //Maybe they are using say/whisper to do a quick emote, so do those - switch(copytext(message, 1, 2)) - if("*") return emote(copytext(message, 2)) - if("^") return custom_emote(1, copytext(message, 2)) - - //Parse the radio code and consume it - if(message_mode) - if(message_mode == "headset") - message = copytext(message, 2) //it would be really nice if the parse procs could do this for us. - else if(message_mode == "whisper") - whispering = 1 - message_mode = null - message = copytext(message, 3) - else - message = copytext(message, 3) - - //Clean up any remaining space on the left - message = trim_left(message) - - // VOREStation Edit - Reflect messages as needed, no sanitizing because parse_languages will handle it for us - if(reflect_if_needed(message, src)) - return - // VOREStation Edit End - - //Parse the language code and consume it - var/list/message_pieces = parse_languages(message) - if(istype(message_pieces, /datum/multilingual_say_piece)) // Little quark for dealing with hivemind/signlang languages. - var/datum/multilingual_say_piece/S = message_pieces // Yay for BYOND's hilariously broken typecasting for allowing us to do this. - S.speaking.broadcast(src, S.message) - return 1 - - if(!LAZYLEN(message_pieces)) - log_runtime(EXCEPTION("Message failed to generate pieces. [message] - [json_encode(message_pieces)]")) - return 0 - - // If you're muzzled, you can only speak sign language - // However, sign language is handled above. - if(is_muzzled()) - to_chat(src, "You're muzzled and cannot speak!") - return - - //Whisper vars - var/w_scramble_range = 5 //The range at which you get ***as*th**wi**** - var/w_adverb //An adverb prepended to the verb in whispers - var/w_not_heard //The message for people in watching range - - var/datum/multilingual_say_piece/first_piece = message_pieces[1] - var/verb = "" - //Handle language-specific verbs and adverb setup if necessary - if(!whispering) //Just doing normal 'say' (for now, may change below) - verb = say_quote(message, first_piece.speaking) - else if(whispering && first_piece.speaking.whisper_verb) //Language has defined whisper verb - verb = first_piece.speaking.whisper_verb - w_not_heard = "[verb] something" - else //Whispering but language has no whisper verb, use say verb - w_adverb = pick("quietly", "softly") - verb = first_piece.speaking.speech_verb - w_not_heard = "[first_piece.speaking.speech_verb] something [w_adverb]" - - //For speech disorders (hulk, slurring, stuttering) - var/list/message_data = list(message_pieces, verb, whispering) - if(handle_speech_problems(message_data)) - message_pieces = message_data[1] - whispering = message_data[3] - - if(verb != message_data[2]) //They changed our verb - if(whispering) - w_adverb = pick("quietly", "softly") - verb = message_data[2] - - //Whisper may have adverbs, add those if one was set - if(w_adverb) - verb = "[verb] [w_adverb]" - - //If something nulled or emptied the message, forget it - if(!LAZYLEN(message_pieces)) - return 0 - - //Radio message handling - var/list/used_radios = list() - if(handle_message_mode(message_mode, message_pieces, verb, used_radios, whispering)) - return 1 - - //For languages with actual speech sounds - var/list/handle_v = handle_speech_sound() - var/sound/speech_sound = handle_v[1] - var/sound_vol = handle_v[2] - - //Default range and italics, may be overridden past here - var/message_range = world.view - var/italics = 0 - var/do_sound = TRUE - if(!voice_sounds_list || !voice_sounds_list.len) - do_sound = FALSE - - //Speaking into radios - if(used_radios.len) - italics = 1 - message_range = 1 - - if(first_piece.speaking) - message_range = first_piece.speaking.get_talkinto_msg_range(message) - var/msg - if(!first_piece.speaking || !(first_piece.speaking.flags & NO_TALK_MSG)) - msg = "[src] talks into [used_radios[1]]" - - if(msg) - for(var/mob/living/M in hearers(5, src) - src) - M.show_message(msg) - - if(speech_sound) - sound_vol *= 0.5 - - //Set vars if we're still whispering by this point - if(whispering) - italics = 1 - message_range = 1 - sound_vol *= 0.5 - - //VOREStation edit - allows for custom say verbs, overriding all other say-verb types- e.g. "says loudly" instead of "shouts" - //You'll still stammer if injured or slur if drunk, but it won't have those specific words - var/ending = copytext(message, length(message)) - - if(custom_whisper && whispering) - verb = "[custom_whisper]" - else if(custom_exclaim && ending=="!") - verb = "[custom_exclaim]" - else if(custom_ask && ending=="?") - verb = "[custom_ask]" - else if(custom_say) - verb = "[custom_say]" - //VOREStation edit ends - - //Handle nonverbal languages here - for(var/datum/multilingual_say_piece/S in message_pieces) - if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE)) - custom_emote(1, "[pick(S.speaking.signlang_verb)].") - do_sound = FALSE - - //These will contain the main receivers of the message - var/list/listening = list() - var/list/listening_obj = list() - - //Atmosphere calculations (speaker's side only, for now) - var/turf/T = get_turf(src) - if(T) - //Air is too thin to carry sound at all, contact speech only - var/datum/gas_mixture/environment = T.return_air() - var/pressure = environment ? environment.return_pressure() : 0 - if(pressure < SOUND_MINIMUM_PRESSURE) - message_range = 1 - - //Air is nearing minimum levels, make text italics as a hint, and muffle sound - if(pressure < ONE_ATMOSPHERE * 0.4) - italics = 1 - sound_vol *= 0.5 - - //Obtain the mobs and objects in the message range - var/list/results = get_mobs_and_objs_in_view_fast(T, world.view, remote_ghosts = client ? TRUE : FALSE) - listening = results["mobs"] - listening_obj = results["objs"] - else - return 1 //If we're in nullspace, then forget it. - - //Remember the speech images so we can remove them later and they can get GC'd - var/list/images_to_clients = list() - - //The 'post-say' static speech bubble - var/speech_bubble_test = say_test(message) - //var/image/speech_bubble = image('icons/mob/talk_vr.dmi',src,"h[speech_bubble_test]") //VOREStation Edit. Commented this out in case we need to reenable. - var/speech_type = custom_speech_bubble - if(!speech_type || speech_type == "default") - speech_type = speech_bubble_appearance() - var/image/speech_bubble = generate_speech_bubble(src, "[speech_type][speech_bubble_test]") - var/sb_alpha = 255 - var/atom/loc_before_turf = src - //VOREStation Add - if(isbelly(loc)) - speech_bubble.pixel_y = -13 //teehee - //VOREStation Add End - while(loc_before_turf && !isturf(loc_before_turf.loc)) - loc_before_turf = loc_before_turf.loc - sb_alpha -= 50 - if(sb_alpha < 0) - break - speech_bubble.loc = loc_before_turf - speech_bubble.alpha = CLAMP(sb_alpha, 0, 255) - images_to_clients[speech_bubble] = list() - - //Main 'say' and 'whisper' message delivery - for(var/mob/M in listening) - spawn(0) //Using spawns to queue all the messages for AFTER this proc is done, and stop runtimes - - if(M && src) //If we still exist, when the spawn processes - //VOREStation Add - Ghosts don't hear whispers - if(whispering && isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ - (!(is_preference_enabled(/datum/client_preference/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !M.client?.holder))) // CHOMPedit - M.show_message("[src.name] [w_not_heard].", 2) - return - //VOREStation Add End - - var/dst = get_dist(get_turf(M),get_turf(src)) - var/runechat_enabled = M.client?.is_preference_enabled(/datum/client_preference/runechat_mob) - - if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc) - if(M.hear_say(message_pieces, verb, italics, src, speech_sound, sound_vol)) - if(M.client && !runechat_enabled) - var/image/I1 = listening[M] || speech_bubble - images_to_clients[I1] |= M.client - M << I1 - if(whispering && !isobserver(M)) //Don't even bother with these unless whispering - if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range - if(M.hear_say(stars_all(message_pieces), verb, italics, src, speech_sound, sound_vol*0.2)) - if(M.client && !runechat_enabled) - var/image/I2 = listening[M] || speech_bubble - images_to_clients[I2] |= M.client - M << I2 - if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range - M.show_message("[name] [w_not_heard].", 2) - - //Object message delivery - for(var/obj/O in listening_obj) - spawn(0) - if(O && src) //If we still exist, when the spawn processes - var/dst = get_dist(get_turf(O),get_turf(src)) - if(dst <= message_range) - O.hear_talk(src, message_pieces, verb) - - //Remove all those images. At least it's just ONE spawn this time. - spawn(30) - for(var/image/I as anything in images_to_clients) - var/list/clients_from_image = images_to_clients[I] - for(var/client/C as anything in clients_from_image) - if(C) //Could have disconnected after message sent, before removing bubble. - C.images -= I - qdel(I) - - /* CHOMPEdit - Not needed if you set your defaults right - var/ourfreq = null - if(voice_freq > 0 ) - ourfreq = voice_freq - */ - //Log the message to file - if(message_mode) - message = "([message_mode == "headset" ? "Common" : capitalize(message_mode)]) [message]" //Adds radio keys used if available - if(whispering) - if(do_sound && message) - playsound(T, pick(voice_sounds_list), 25, TRUE, extrarange = -6, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - Use say sound prefs - - log_whisper(message, src) - else - if(do_sound && message) - playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - tiny fix - log_say(message, src) - return 1 - -/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/verb_understood="gestures", var/datum/language/language, var/type = 1) - var/turf/T = get_turf(src) - //We're in something, gesture to people inside the same thing - if(loc != T && !istype(loc, /obj/item/weapon/holder)) //CHOMPEdit - Partially fixes sign language while being held. - for(var/mob/M in loc) - M.hear_signlang(message, verb, verb_understood, language, src, type) - - //We're on a turf, gesture to visible as if we were a normal language - else - var/low_range = FALSE - if(T && type == 2) // type 2 is audible signlang. yes. sue me. - //Air is too thin to carry sound at all, contact speech only - var/datum/gas_mixture/environment = T.return_air() - var/pressure = environment ? environment.return_pressure() : 0 - if(pressure < SOUND_MINIMUM_PRESSURE) - low_range = TRUE - - var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view) - var/list/mobs = potentials["mobs"] - for(var/mob/M as anything in mobs) - if(low_range && !(M in range(1, src))) - continue - M.hear_signlang(message, verb, verb_understood, language, src, type) - var/list/objs = potentials["objs"] - for(var/obj/O as anything in objs) - if(low_range && !(O in range(1, src))) - continue - O.hear_signlang(message, verb, language, src) - return 1 - -/obj/effect/speech_bubble - var/mob/parent - -/mob/proc/GetVoice() - return name - -/mob/proc/speech_bubble_appearance() - return "normal" +var/list/department_radio_keys = list( + ":r" = "right ear", ".r" = "right ear", + ":l" = "left ear", ".l" = "left ear", + ":i" = "intercom", ".i" = "intercom", + ":h" = "department", ".h" = "department", + ":+" = "special", ".+" = "special", //activate radio-specific special functions + ":c" = "Command", ".c" = "Command", + ":n" = "Science", ".n" = "Science", + ":m" = "Medical", ".m" = "Medical", + ":e" = "Engineering", ".e" = "Engineering", + ":k" = "Response Team", ".k" = "Response Team", + ":s" = "Security", ".s" = "Security", + ":w" = "whisper", ".w" = "whisper", + ":t" = "Mercenary", ".t" = "Mercenary", + ":x" = "Raider", ".x" = "Raider", + ":u" = "Supply", ".u" = "Supply", + ":v" = "Service", ".v" = "Service", + ":p" = "AI Private", ".p" = "AI Private", + ":y" = "Explorer", ".y" = "Explorer", //VOREStation Edit //CHOMP keep explo + ":a" = "Talon", ".a" = "Talon", //VOREStation Add, //CHOMP keep explo + ":g" = "Casino", ".g" = "Casino", + + ":R" = "right ear", ".R" = "right ear", + ":L" = "left ear", ".L" = "left ear", + ":I" = "intercom", ".I" = "intercom", + ":H" = "department", ".H" = "department", + ":C" = "Command", ".C" = "Command", + ":N" = "Science", ".N" = "Science", + ":M" = "Medical", ".M" = "Medical", + ":E" = "Engineering", ".E" = "Engineering", + ":k" = "Response Team", ".k" = "Response Team", + ":S" = "Security", ".S" = "Security", + ":W" = "whisper", ".W" = "whisper", + ":T" = "Mercenary", ".T" = "Mercenary", + ":X" = "Raider", ".X" = "Raider", + ":U" = "Supply", ".U" = "Supply", + ":V" = "Service", ".V" = "Service", + ":P" = "AI Private", ".P" = "AI Private", + ":Y" = "Explorer", ".Y" = "Explorer", //CHOMP keep explo + ":A" = "Talon", ".A" = "Talon", //VOREStation Add, //CHOMP keep explo + ":G" = "Casino", ".G" = "Casino", + + // Cyrillic characters on the same keys on the Russian QWERTY (phonetic) layout + ":к" = "right ear", ".к" = "right ear", + ":д" = "left ear", ".д" = "left ear", + ":ш" = "intercom", ".ш" = "intercom", + ":Ñ€" = "department", ".Ñ€" = "department", + ":+" = "special", ".+" = "special", //activate radio-specific special functions + ":Ñ" = "Command", ".Ñ" = "Command", + ":Ñ‚" = "Science", ".Ñ‚" = "Science", + ":ÑŒ" = "Medical", ".ÑŒ" = "Medical", + ":у" = "Engineering", ".у" = "Engineering", + ":л" = "Response Team", ".л" = "Response Team", + ":Ñ‹" = "Security", ".Ñ‹" = "Security", + ":ц" = "whisper", ".ц" = "whisper", + ":е" = "Mercenary", ".е" = "Mercenary", + ":ч" = "Raider", ".ч" = "Raider", + ":г" = "Supply", ".г" = "Supply", + ":м" = "Service", ".м" = "Service", + ":з" = "AI Private", ".з" = "AI Private", + ":н" = "Explorer", ".н" = "Explorer", //CHOMP keep explo + ":Ñ„" = "Talon", ".Ñ„" = "Talon", //VOREStation Add //CHOMP keep explo + ":п" = "Casino", ".п" = "Casino", +) + + +var/list/channel_to_radio_key = new +/proc/get_radio_key_from_channel(var/channel) + var/key = channel_to_radio_key[channel] + if(!key) + for(var/radio_key in department_radio_keys) + if(department_radio_keys[radio_key] == channel) + key = radio_key + break + if(!key) + key = "" + channel_to_radio_key[channel] = key + + return key + +/mob/living/proc/binarycheck() + return FALSE + +/mob/proc/get_default_language() + return null + +/mob/living/get_default_language() + return default_language + +//Takes a list of the form list(message, verb, whispering) and modifies it as needed +//Returns 1 if a speech problem was applied, 0 otherwise +/mob/living/proc/handle_speech_problems(var/list/message_data) + var/list/message_pieces = message_data[1] + var/verb = message_data[2] + var/whispering = message_data[3] + . = 0 + + // Technically this rerolls the verb for as many say pieces as there are. _shrug_ + for(var/datum/multilingual_say_piece/S in message_pieces) + if(S.speaking && (S.speaking.flags & NO_STUTTER || S.speaking.flags & SIGNLANG)) + continue + + if((HULK in mutations) && health >= 25 && length(S.message)) + S.message = "[uppertext(S.message)]!!!" + verb = pick("yells","roars","hollers") + whispering = 0 + . = 1 + if(slurring) + S.message = slur(S.message) + verb = pick("slobbers","slurs") + . = 1 + if(stuttering) + S.message = stutter(S.message) + verb = pick("stammers","stutters") + . = 1 + //VOREStation Edit Start + if(muffled) + verb = pick("muffles") + whispering = 1 + . = 1 + //VOREStation Edit End + //YW Edit start + if(wingdings) + S.message = span("wingdings",(S.message)) + . = 1 + //YW Edit End + + message_data[1] = message_pieces + message_data[2] = verb + message_data[3] = whispering + +/mob/living/proc/handle_message_mode(message_mode, list/message_pieces, verb, used_radios) + if(message_mode == "intercom") + for(var/obj/item/device/radio/intercom/I in view(1, null)) + I.talk_into(src, message_pieces, verb) + used_radios += I + return 0 + +/mob/living/proc/handle_speech_sound() + var/list/returns[2] + returns[1] = null + returns[2] = null + return returns + +/mob/living/proc/get_speech_ending(verb, var/ending) + if(ending == "!") + return pick("exclaims","shouts","yells") + if(ending == "?") + return "asks" + return verb + +/mob/living/say(var/message, var/datum/language/speaking = null, var/whispering = 0) + //If you're muted for IC chat + if(client) + if(message) + client.handle_spam_prevention(MUTE_IC) + if((client.prefs.muted & MUTE_IC) || say_disabled) + to_chat(src, "You cannot speak in IC (Muted).") + return + + //Redirect to say_dead if talker is dead + if(stat) + if(stat == DEAD && !forbid_seeing_deadchat) + return say_dead(message) + return + //VOREStation Addition Start + if(forced_psay) + psay(message) + return + if(autowhisper) + whispering = 1 + //VOREStation Addition End + //Parse the mode + var/message_mode = parse_message_mode(message, "headset") + + //Maybe they are using say/whisper to do a quick emote, so do those + switch(copytext(message, 1, 2)) + if("*") return emote(copytext(message, 2)) + if("^") return custom_emote(1, copytext(message, 2)) + + //Parse the radio code and consume it + if(message_mode) + if(message_mode == "headset") + message = copytext(message, 2) //it would be really nice if the parse procs could do this for us. + else if(message_mode == "whisper") + whispering = 1 + message_mode = null + message = copytext(message, 3) + else + message = copytext(message, 3) + + //Clean up any remaining space on the left + message = trim_left(message) + + // VOREStation Edit - Reflect messages as needed, no sanitizing because parse_languages will handle it for us + if(reflect_if_needed(message, src)) + return + // VOREStation Edit End + + //Parse the language code and consume it + var/list/message_pieces = parse_languages(message) + if(istype(message_pieces, /datum/multilingual_say_piece)) // Little quark for dealing with hivemind/signlang languages. + var/datum/multilingual_say_piece/S = message_pieces // Yay for BYOND's hilariously broken typecasting for allowing us to do this. + S.speaking.broadcast(src, S.message) + return 1 + + if(!LAZYLEN(message_pieces)) + log_runtime(EXCEPTION("Message failed to generate pieces. [message] - [json_encode(message_pieces)]")) + return 0 + + // If you're muzzled, you can only speak sign language + // However, sign language is handled above. + if(is_muzzled()) + to_chat(src, "You're muzzled and cannot speak!") + return + + //Whisper vars + var/w_scramble_range = 5 //The range at which you get ***as*th**wi**** + var/w_adverb //An adverb prepended to the verb in whispers + var/w_not_heard //The message for people in watching range + + var/datum/multilingual_say_piece/first_piece = message_pieces[1] + var/verb = "" + //Handle language-specific verbs and adverb setup if necessary + if(!whispering) //Just doing normal 'say' (for now, may change below) + verb = say_quote(message, first_piece.speaking) + else if(whispering && first_piece.speaking.whisper_verb) //Language has defined whisper verb + verb = first_piece.speaking.whisper_verb + w_not_heard = "[verb] something" + else //Whispering but language has no whisper verb, use say verb + w_adverb = pick("quietly", "softly") + verb = first_piece.speaking.speech_verb + w_not_heard = "[first_piece.speaking.speech_verb] something [w_adverb]" + + //For speech disorders (hulk, slurring, stuttering) + var/list/message_data = list(message_pieces, verb, whispering) + if(handle_speech_problems(message_data)) + message_pieces = message_data[1] + whispering = message_data[3] + + if(verb != message_data[2]) //They changed our verb + if(whispering) + w_adverb = pick("quietly", "softly") + verb = message_data[2] + + //Whisper may have adverbs, add those if one was set + if(w_adverb) + verb = "[verb] [w_adverb]" + + //If something nulled or emptied the message, forget it + if(!LAZYLEN(message_pieces)) + return 0 + + //Radio message handling + var/list/used_radios = list() + if(handle_message_mode(message_mode, message_pieces, verb, used_radios, whispering)) + return 1 + + //For languages with actual speech sounds + var/list/handle_v = handle_speech_sound() + var/sound/speech_sound = handle_v[1] + var/sound_vol = handle_v[2] + + //Default range and italics, may be overridden past here + var/message_range = world.view + var/italics = 0 + var/do_sound = TRUE + if(!voice_sounds_list || !voice_sounds_list.len) + do_sound = FALSE + + //Speaking into radios + if(used_radios.len) + italics = 1 + message_range = 1 + + if(first_piece.speaking) + message_range = first_piece.speaking.get_talkinto_msg_range(message) + var/msg + if(!first_piece.speaking || !(first_piece.speaking.flags & NO_TALK_MSG)) + msg = "[src] talks into [used_radios[1]]" + + if(msg) + for(var/mob/living/M in hearers(5, src) - src) + M.show_message(msg) + + if(speech_sound) + sound_vol *= 0.5 + + //Set vars if we're still whispering by this point + if(whispering) + italics = 1 + message_range = 1 + sound_vol *= 0.5 + + //VOREStation edit - allows for custom say verbs, overriding all other say-verb types- e.g. "says loudly" instead of "shouts" + //You'll still stammer if injured or slur if drunk, but it won't have those specific words + var/ending = copytext(message, length(message)) + + if(custom_whisper && whispering) + verb = "[custom_whisper]" + else if(custom_exclaim && ending=="!") + verb = "[custom_exclaim]" + else if(custom_ask && ending=="?") + verb = "[custom_ask]" + else if(custom_say) + verb = "[custom_say]" + //VOREStation edit ends + + //Handle nonverbal languages here + for(var/datum/multilingual_say_piece/S in message_pieces) + if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE)) + custom_emote(1, "[pick(S.speaking.signlang_verb)].") + do_sound = FALSE + + //These will contain the main receivers of the message + var/list/listening = list() + var/list/listening_obj = list() + + //Atmosphere calculations (speaker's side only, for now) + var/turf/T = get_turf(src) + if(T) + //Air is too thin to carry sound at all, contact speech only + var/datum/gas_mixture/environment = T.return_air() + var/pressure = environment ? environment.return_pressure() : 0 + if(pressure < SOUND_MINIMUM_PRESSURE) + message_range = 1 + + //Air is nearing minimum levels, make text italics as a hint, and muffle sound + if(pressure < ONE_ATMOSPHERE * 0.4) + italics = 1 + sound_vol *= 0.5 + + //Obtain the mobs and objects in the message range + var/list/results = get_mobs_and_objs_in_view_fast(T, world.view, remote_ghosts = client ? TRUE : FALSE) + listening = results["mobs"] + listening_obj = results["objs"] + else + return 1 //If we're in nullspace, then forget it. + + //Remember the speech images so we can remove them later and they can get GC'd + var/list/images_to_clients = list() + + //The 'post-say' static speech bubble + var/speech_bubble_test = say_test(message) + //var/image/speech_bubble = image('icons/mob/talk_vr.dmi',src,"h[speech_bubble_test]") //VOREStation Edit. Commented this out in case we need to reenable. + var/speech_type = custom_speech_bubble + if(!speech_type || speech_type == "default") + speech_type = speech_bubble_appearance() + var/image/speech_bubble = generate_speech_bubble(src, "[speech_type][speech_bubble_test]") + var/sb_alpha = 255 + var/atom/loc_before_turf = src + //VOREStation Add + if(isbelly(loc)) + speech_bubble.pixel_y = -13 //teehee + //VOREStation Add End + while(loc_before_turf && !isturf(loc_before_turf.loc)) + loc_before_turf = loc_before_turf.loc + sb_alpha -= 50 + if(sb_alpha < 0) + break + speech_bubble.loc = loc_before_turf + speech_bubble.alpha = CLAMP(sb_alpha, 0, 255) + images_to_clients[speech_bubble] = list() + + //Main 'say' and 'whisper' message delivery + for(var/mob/M in listening) + spawn(0) //Using spawns to queue all the messages for AFTER this proc is done, and stop runtimes + + if(M && src) //If we still exist, when the spawn processes + //VOREStation Add - Ghosts don't hear whispers + if(whispering && isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ + (!(is_preference_enabled(/datum/client_preference/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !M.client?.holder))) // CHOMPedit + M.show_message("[src.name] [w_not_heard].", 2) + return + //VOREStation Add End + + var/dst = get_dist(get_turf(M),get_turf(src)) + var/runechat_enabled = M.client?.is_preference_enabled(/datum/client_preference/runechat_mob) + + if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc) + if(M.hear_say(message_pieces, verb, italics, src, speech_sound, sound_vol)) + if(M.client && !runechat_enabled) + var/image/I1 = listening[M] || speech_bubble + images_to_clients[I1] |= M.client + M << I1 + if(whispering && !isobserver(M)) //Don't even bother with these unless whispering + if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range + if(M.hear_say(stars_all(message_pieces), verb, italics, src, speech_sound, sound_vol*0.2)) + if(M.client && !runechat_enabled) + var/image/I2 = listening[M] || speech_bubble + images_to_clients[I2] |= M.client + M << I2 + if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range + M.show_message("[name] [w_not_heard].", 2) + + //Object message delivery + for(var/obj/O in listening_obj) + spawn(0) + if(O && src) //If we still exist, when the spawn processes + var/dst = get_dist(get_turf(O),get_turf(src)) + if(dst <= message_range) + O.hear_talk(src, message_pieces, verb) + + //Remove all those images. At least it's just ONE spawn this time. + spawn(30) + for(var/image/I as anything in images_to_clients) + var/list/clients_from_image = images_to_clients[I] + for(var/client/C as anything in clients_from_image) + if(C) //Could have disconnected after message sent, before removing bubble. + C.images -= I + qdel(I) + + /* CHOMPEdit - Not needed if you set your defaults right + var/ourfreq = null + if(voice_freq > 0 ) + ourfreq = voice_freq + */ + //Log the message to file + if(message_mode) + message = "([message_mode == "headset" ? "Common" : capitalize(message_mode)]) [message]" //Adds radio keys used if available + if(whispering) + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 25, TRUE, extrarange = -6, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - Use say sound prefs + + log_whisper(message, src) + else + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - tiny fix + log_say(message, src) + return 1 + +/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/verb_understood="gestures", var/datum/language/language, var/type = 1) + var/turf/T = get_turf(src) + //We're in something, gesture to people inside the same thing + if(loc != T && !istype(loc, /obj/item/weapon/holder)) //CHOMPEdit - Partially fixes sign language while being held. + for(var/mob/M in loc) + M.hear_signlang(message, verb, verb_understood, language, src, type) + + //We're on a turf, gesture to visible as if we were a normal language + else + var/low_range = FALSE + if(T && type == 2) // type 2 is audible signlang. yes. sue me. + //Air is too thin to carry sound at all, contact speech only + var/datum/gas_mixture/environment = T.return_air() + var/pressure = environment ? environment.return_pressure() : 0 + if(pressure < SOUND_MINIMUM_PRESSURE) + low_range = TRUE + + var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view) + var/list/mobs = potentials["mobs"] + for(var/mob/M as anything in mobs) + if(low_range && !(M in range(1, src))) + continue + M.hear_signlang(message, verb, verb_understood, language, src, type) + var/list/objs = potentials["objs"] + for(var/obj/O as anything in objs) + if(low_range && !(O in range(1, src))) + continue + O.hear_signlang(message, verb, language, src) + return 1 + +/obj/effect/speech_bubble + var/mob/parent + +/mob/proc/GetVoice() + return name + +/mob/proc/speech_bubble_appearance() + return "normal" diff --git a/code/modules/mob/living/silicon/ai/ai_movement.dm b/code/modules/mob/living/silicon/ai/ai_movement.dm index 456d11a981..0c4e4bed0c 100644 --- a/code/modules/mob/living/silicon/ai/ai_movement.dm +++ b/code/modules/mob/living/silicon/ai/ai_movement.dm @@ -1,2 +1,2 @@ -/mob/living/silicon/ai/SelfMove(turf/n, direct) - return 0 +/mob/living/silicon/ai/SelfMove(turf/n, direct) + return 0 diff --git a/code/modules/mob/living/silicon/ai/ai_remote_control.dm b/code/modules/mob/living/silicon/ai/ai_remote_control.dm index d8f302eb94..815a151b87 100644 --- a/code/modules/mob/living/silicon/ai/ai_remote_control.dm +++ b/code/modules/mob/living/silicon/ai/ai_remote_control.dm @@ -1,73 +1,73 @@ -/mob/living/silicon/ai - var/mob/living/silicon/robot/deployed_shell = null //For shell control - -/mob/living/silicon/ai/Initialize() - if(config.allow_ai_shells) - verbs += /mob/living/silicon/ai/proc/deploy_to_shell_act - return ..() - -/mob/living/silicon/ai/proc/deploy_to_shell(var/mob/living/silicon/robot/target) - if(!config.allow_ai_shells) - to_chat(src, span("warning", "AI Shells are not allowed on this server. You shouldn't have this verb because of it, so consider making a bug report.")) - return - - if(incapacitated()) - to_chat(src, span("warning", "You are incapacitated!")) - return - - if(lacks_power()) - to_chat(src, span("warning", "Your core lacks power, wireless is disabled.")) - return - - if(control_disabled) - to_chat(src, span("warning", "Wireless networking module is offline.")) - return - - var/list/possible = list() - for(var/mob/living/silicon/robot/R as anything in GLOB.available_ai_shells) - if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai || (R.connected_ai == src) ) ) //VOREStation Edit: shell restrictions - if(istype(R.loc, /obj/machinery/recharge_station)) //Check Rechargers - var/obj/machinery/recharge_station/RS = R.loc - if(!(using_map.ai_shell_restricted && !(RS.z in using_map.ai_shell_allowed_levels))) //Allow station borgs to be redeployed from Chargers. - possible += R - - if(isbelly(R.loc)) //check belly space - var/obj/belly/B = R.loc - if(!(using_map.ai_shell_restricted && !(B.owner.z in using_map.ai_shell_allowed_levels))) //No smuggling in borgs - possible += R - - if(!(using_map.ai_shell_restricted && !(R.z in using_map.ai_shell_allowed_levels))) - possible += R - - if(!LAZYLEN(possible)) - to_chat(src, span("warning", "No usable AI shell beacons detected.")) - - if(!target || !(target in possible)) //If the AI is looking for a new shell, or its pre-selected shell is no longer valid - target = tgui_input_list(src, "Which body to control?", "Shell Choice", possible) - - if(!target || target.stat == DEAD || target.deployed || !(!target.connected_ai || (target.connected_ai == src) ) ) - if(target) - to_chat(src, span("warning", "It is no longer possible to deploy to \the [target].")) - else - to_chat(src, span("notice", "Deployment aborted.")) - return - - else if(mind) - soul_link(/datum/soul_link/shared_body, src, target) - deployed_shell = target - if(src.client) //CHOMPADDITION: Resize shell based on our preffered size - target.resize(src.client.prefs.size_multiplier) //CHOMPADDITION: Resize shell based on our preffered size - target.deploy_init(src) - mind.transfer_to(target) - teleop = target // So the AI 'hears' messages near its core. - target.post_deploy() - -/mob/living/silicon/ai/proc/deploy_to_shell_act() - set category = "AI Commands" - set name = "Deploy to Shell" - deploy_to_shell() // This is so the AI is not prompted with a list of all mobs when using the 'real' proc. - -/mob/living/silicon/ai/proc/disconnect_shell(message = "Your remote connection has been reset!") - if(deployed_shell) // Forcibly call back AI in event of things such as damage, EMP or power loss. - message = span("danger", message) - deployed_shell.undeploy(message) +/mob/living/silicon/ai + var/mob/living/silicon/robot/deployed_shell = null //For shell control + +/mob/living/silicon/ai/Initialize() + if(config.allow_ai_shells) + verbs += /mob/living/silicon/ai/proc/deploy_to_shell_act + return ..() + +/mob/living/silicon/ai/proc/deploy_to_shell(var/mob/living/silicon/robot/target) + if(!config.allow_ai_shells) + to_chat(src, span("warning", "AI Shells are not allowed on this server. You shouldn't have this verb because of it, so consider making a bug report.")) + return + + if(incapacitated()) + to_chat(src, span("warning", "You are incapacitated!")) + return + + if(lacks_power()) + to_chat(src, span("warning", "Your core lacks power, wireless is disabled.")) + return + + if(control_disabled) + to_chat(src, span("warning", "Wireless networking module is offline.")) + return + + var/list/possible = list() + for(var/mob/living/silicon/robot/R as anything in GLOB.available_ai_shells) + if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai || (R.connected_ai == src) ) ) //VOREStation Edit: shell restrictions + if(istype(R.loc, /obj/machinery/recharge_station)) //Check Rechargers + var/obj/machinery/recharge_station/RS = R.loc + if(!(using_map.ai_shell_restricted && !(RS.z in using_map.ai_shell_allowed_levels))) //Allow station borgs to be redeployed from Chargers. + possible += R + + if(isbelly(R.loc)) //check belly space + var/obj/belly/B = R.loc + if(!(using_map.ai_shell_restricted && !(B.owner.z in using_map.ai_shell_allowed_levels))) //No smuggling in borgs + possible += R + + if(!(using_map.ai_shell_restricted && !(R.z in using_map.ai_shell_allowed_levels))) + possible += R + + if(!LAZYLEN(possible)) + to_chat(src, span("warning", "No usable AI shell beacons detected.")) + + if(!target || !(target in possible)) //If the AI is looking for a new shell, or its pre-selected shell is no longer valid + target = tgui_input_list(src, "Which body to control?", "Shell Choice", possible) + + if(!target || target.stat == DEAD || target.deployed || !(!target.connected_ai || (target.connected_ai == src) ) ) + if(target) + to_chat(src, span("warning", "It is no longer possible to deploy to \the [target].")) + else + to_chat(src, span("notice", "Deployment aborted.")) + return + + else if(mind) + soul_link(/datum/soul_link/shared_body, src, target) + deployed_shell = target + if(src.client) //CHOMPADDITION: Resize shell based on our preffered size + target.resize(src.client.prefs.size_multiplier) //CHOMPADDITION: Resize shell based on our preffered size + target.deploy_init(src) + mind.transfer_to(target) + teleop = target // So the AI 'hears' messages near its core. + target.post_deploy() + +/mob/living/silicon/ai/proc/deploy_to_shell_act() + set category = "AI Commands" + set name = "Deploy to Shell" + deploy_to_shell() // This is so the AI is not prompted with a list of all mobs when using the 'real' proc. + +/mob/living/silicon/ai/proc/disconnect_shell(message = "Your remote connection has been reset!") + if(deployed_shell) // Forcibly call back AI in event of things such as damage, EMP or power loss. + message = span("danger", message) + deployed_shell.undeploy(message) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 9c26f64c43..29ff44b04e 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,23 +1,23 @@ -/mob/living/silicon/ai/death(gibbed) - - if(stat == DEAD) - return - - if(deployed_shell) - disconnect_shell("Disconnecting from remote shell due to critical system failure.") - . = ..(gibbed) - - if(src.eyeobj) - src.eyeobj.setLoc(get_turf(src)) - - remove_ai_verbs(src) - - for(var/obj/machinery/ai_status_display/O in machines) - spawn( 0 ) - O.mode = 2 - if (istype(loc, /obj/item/device/aicard)) - var/obj/item/device/aicard/card = loc - card.update_icon() - - . = ..(gibbed,"gives one shrill beep before falling lifeless.") - density = TRUE +/mob/living/silicon/ai/death(gibbed) + + if(stat == DEAD) + return + + if(deployed_shell) + disconnect_shell("Disconnecting from remote shell due to critical system failure.") + . = ..(gibbed) + + if(src.eyeobj) + src.eyeobj.setLoc(get_turf(src)) + + remove_ai_verbs(src) + + for(var/obj/machinery/ai_status_display/O in machines) + spawn( 0 ) + O.mode = 2 + if (istype(loc, /obj/item/device/aicard)) + var/obj/item/device/aicard/card = loc + card.update_icon() + + . = ..(gibbed,"gives one shrill beep before falling lifeless.") + density = TRUE diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 7f25b87e21..1aa9517938 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,43 +1,43 @@ -/mob/living/silicon/ai/examine(mob/user) - . = ..() - - if (src.stat == DEAD) - . += "It appears to be powered-down." - else - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) - . += "It looks slightly dented." - else - . += "It looks severely dented!" - if (src.getFireLoss()) - if (src.getFireLoss() < 30) - . += "It looks slightly charred." - else - . += "Its casing is melted and heat-warped!" - if (src.getOxyLoss() && (aiRestorePowerRoutine != 0 && !APU_power)) - if (src.getOxyLoss() > 175) - . += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning." - else if(src.getOxyLoss() > 100) - . += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning." - else - . += "It seems to be running on backup power." - - if (src.stat == UNCONSCIOUS) - . += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\"." - - if(deployed_shell) - . += "The wireless networking light is blinking." - - . += "*---------*" - - if(hardware && (hardware.owner == src)) - . += hardware.get_examine_desc() - - user.showLaws(src) - -/mob/proc/showLaws(var/mob/living/silicon/S) - return - -/mob/observer/dead/showLaws(var/mob/living/silicon/S) - if(antagHUD || is_admin(src)) - S.laws.show_laws(src) +/mob/living/silicon/ai/examine(mob/user) + . = ..() + + if (src.stat == DEAD) + . += "It appears to be powered-down." + else + if (src.getBruteLoss()) + if (src.getBruteLoss() < 30) + . += "It looks slightly dented." + else + . += "It looks severely dented!" + if (src.getFireLoss()) + if (src.getFireLoss() < 30) + . += "It looks slightly charred." + else + . += "Its casing is melted and heat-warped!" + if (src.getOxyLoss() && (aiRestorePowerRoutine != 0 && !APU_power)) + if (src.getOxyLoss() > 175) + . += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning." + else if(src.getOxyLoss() > 100) + . += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning." + else + . += "It seems to be running on backup power." + + if (src.stat == UNCONSCIOUS) + . += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\"." + + if(deployed_shell) + . += "The wireless networking light is blinking." + + . += "*---------*" + + if(hardware && (hardware.owner == src)) + . += hardware.get_examine_desc() + + user.showLaws(src) + +/mob/proc/showLaws(var/mob/living/silicon/S) + return + +/mob/observer/dead/showLaws(var/mob/living/silicon/S) + if(antagHUD || is_admin(src)) + S.laws.show_laws(src) diff --git a/code/modules/mob/living/silicon/ai/icons.dm b/code/modules/mob/living/silicon/ai/icons.dm index 5f12bd384b..fdd5017a47 100644 --- a/code/modules/mob/living/silicon/ai/icons.dm +++ b/code/modules/mob/living/silicon/ai/icons.dm @@ -1,260 +1,260 @@ -var/datum/ai_icon/default_ai_icon = new/datum/ai_icon/blue() -var/list/datum/ai_icon/ai_icons - -/datum/ai_icon - var/name - var/alive_icon - var/alive_light = "#FFFFFF" - var/nopower_icon = "4" - var/nopower_light = "#FFFFFF" - var/dead_icon = "ai-crash" - var/dead_light = "#000099" - -/datum/ai_icon/New(var/name, var/alive_icon, var/nopower_icon, var/dead_icon, var/alive_light, var/nopower_light, var/dead_light) - if(name) - src.name = name - src.alive_icon = alive_icon - src.nopower_icon = nopower_icon - src.dead_icon = dead_icon - src.alive_light = alive_light - src.nopower_light = nopower_light - src.dead_light = dead_light - if(!ai_icons) - ai_icons = list() - init_subtypes(/datum/ai_icon, ai_icons) - ..() - -/datum/ai_icon/red - name = "Red" - alive_icon = "ai-red" - alive_light = "#F04848" - dead_icon = "ai-red-crash" - dead_light = "#F04848" - -/datum/ai_icon/green - name = "Green" - alive_icon = "ai-wierd" - alive_light = "#00FF99" - dead_icon = "ai-weird-crash" - -/datum/ai_icon/blue - name = "Blue" - alive_icon = "ai" - alive_light = "#81DDFF" - -/datum/ai_icon/angry - name = "Angry" - alive_icon = "ai-angryface" - alive_light = "#FFFF33" - -/datum/ai_icon/angel - name = "Angel" - alive_icon = "ai-angel" - dead_icon = "ai-angel-crash" - -/datum/ai_icon/bliss - name = "Bliss" - alive_icon = "ai-bliss" - alive_light = "#5C7A4A" - -/datum/ai_icon/chatterbox - name = "Chatterbox" - alive_icon = "ai-president" - alive_light = "#40666B" - -/datum/ai_icon/database - name = "Database" - alive_icon = "ai-database" - dead_icon = "ai-database-crash" - -/datum/ai_icon/dorf - name = "Dorf" - alive_icon = "ai-dorf" - -/datum/ai_icon/dugtodeep - name = "Dug Too Deep" - alive_icon = "ai-toodeep" - alive_light = "#81DDFF" - -/datum/ai_icon/firewall - name = "Firewall" - alive_icon = "ai-magma" - alive_light = "#FF4126" - -/datum/ai_icon/glitchman - name = "Glitchman" - alive_icon = "ai-glitchman" - dead_icon = "ai-glitchman-crash" - -/datum/ai_icon/goon - name = "Goon" - alive_icon = "ai-goon" - alive_light = "#3E5C80" - dead_icon = "ai-goon-crash" - dead_light = "#3E5C80" - -/datum/ai_icon/heartline - name = "Heartline" - alive_icon = "ai-heartline" - dead_icon = "ai-heartline-crash" - -/datum/ai_icon/helios - name = "Helios" - alive_icon = "ai-helios" - alive_light = "#F2CF73" - -/datum/ai_icon/hourglass - name = "Hourglass" - alive_icon = "ai-hourglass" - -/datum/ai_icon/inverted - name = "Inverted" - alive_icon = "ai-u" - alive_light = "#81DDFF" - dead_icon = "ai-u-crash" - -/datum/ai_icon/lonestar - name = "Lonestar" - alive_icon = "ai-lonestar" - alive_light = "#58751C" - dead_icon = "ai-lonestar-crash" - -/datum/ai_icon/matrix - name = "Matrix" - alive_icon = "ai-matrix" - alive_light = "#449944" - -/datum/ai_icon/monochrome - name = "Monochrome" - alive_icon = "ai-mono" - alive_light = "#585858" - dead_icon = "ai-mono-crash" - -/datum/ai_icon/nanotrasen - name = "NanoTrasen" - alive_icon = "ai-nanotrasen" - alive_light = "#000029" - -/datum/ai_icon/rainbow - name = "Rainbow" - alive_icon = "ai-clown" - alive_light = "#E50213" - -/datum/ai_icon/smiley - name = "Smiley" - alive_icon = "ai-smiley" - alive_light = "#F3DD00" - -/datum/ai_icon/soviet - name = "Soviet" - alive_icon = "ai-soviet" - alive_light = "#FF4307" - dead_icon = "ai-soviet-crash" - dead_light = "#FF4307" - -/datum/ai_icon/Static - name = "Static" - alive_icon = "ai-static" - alive_light = "#4784C1" - alive_icon = "ai-static-crash" - -/datum/ai_icon/text - name = "Text" - alive_icon = "ai-text" - -/datum/ai_icon/trapped - name = "Trapped" - alive_icon = "ai-hades" - dead_icon = "ai-hades-crash" - -/datum/ai_icon/triumvirate - name = "Triumvirate" - alive_icon = "ai-triumvirate" - alive_light = "#020B2B" - -/datum/ai_icon/triumvirate_static - name = "Triumvirate Static" - alive_icon = "ai-triumvirate-malf" - alive_light = "#020B2B" - -/datum/ai_icon/bored - name = "Bored" - alive_icon = "ai-bored" - dead_icon = "ai-eager-crash" - -//Eros Research Platform Ports - -/datum/ai_icon/clown2 - name = "Honk" - alive_icon = "ai-clown2" - dead_icon = "ai-clown2-crash" - -/* -/datum/ai_icon/boxfort - name = "Boxfort" - alive_icon = "ai-boxfort" - dead_icon = "ai-boxfort_dead" -*/ - -/datum/ai_icon/ravensdale - name = "Integration" - alive_icon = "ai-ravensdale" - dead_icon = "ai-ravensdale-crash" - -/datum/ai_icon/gentoo - name = "Gentoo" - alive_icon = "ai-gentoo" - dead_icon = "ai-gentoo-crash" - -/datum/ai_icon/serithi - name = "Mechanicus" - alive_icon = "ai-serithi" - dead_icon = "ai-serithi-crash" - -/* -/datum/ai_icon/alien - name = "Xenomorph" - alive_icon = "ai-alien" - dead_icon = "ai-alien-crash" -*/ - -/datum/ai_icon/syndicat - name = "Syndi-cat" - alive_icon = "ai-syndicatmeow" - -/datum/ai_icon/wasp - name = "Wasp" - alive_icon = "ai-wasp" - -/datum/ai_icon/sheltered - name = "Doctor" - alive_icon = "ai-sheltered" - -/datum/ai_icon/fabulous - name = "Fabulous" - alive_icon = "ai-fabulous" - -/datum/ai_icon/eager - name = "Eager" - alive_icon = "ai-eager" - dead_icon = "ai-eager-crash" - -/datum/ai_icon/royal - name = "Royal" - alive_icon = "ai-royal" - -/datum/ai_icon/pirate - name = "Pirate" - alive_icon = "ai-pirate" - -/datum/ai_icon/bloodylove - name = "Love" - alive_icon = "ai-bloodylove" - -/datum/ai_icon/ahasuerus - name = "Ahasuerus" - alive_icon = "ai-ahasuerus" - -/datum/ai_icon/godfrey - name = "Godfrey" +var/datum/ai_icon/default_ai_icon = new/datum/ai_icon/blue() +var/list/datum/ai_icon/ai_icons + +/datum/ai_icon + var/name + var/alive_icon + var/alive_light = "#FFFFFF" + var/nopower_icon = "4" + var/nopower_light = "#FFFFFF" + var/dead_icon = "ai-crash" + var/dead_light = "#000099" + +/datum/ai_icon/New(var/name, var/alive_icon, var/nopower_icon, var/dead_icon, var/alive_light, var/nopower_light, var/dead_light) + if(name) + src.name = name + src.alive_icon = alive_icon + src.nopower_icon = nopower_icon + src.dead_icon = dead_icon + src.alive_light = alive_light + src.nopower_light = nopower_light + src.dead_light = dead_light + if(!ai_icons) + ai_icons = list() + init_subtypes(/datum/ai_icon, ai_icons) + ..() + +/datum/ai_icon/red + name = "Red" + alive_icon = "ai-red" + alive_light = "#F04848" + dead_icon = "ai-red-crash" + dead_light = "#F04848" + +/datum/ai_icon/green + name = "Green" + alive_icon = "ai-wierd" + alive_light = "#00FF99" + dead_icon = "ai-weird-crash" + +/datum/ai_icon/blue + name = "Blue" + alive_icon = "ai" + alive_light = "#81DDFF" + +/datum/ai_icon/angry + name = "Angry" + alive_icon = "ai-angryface" + alive_light = "#FFFF33" + +/datum/ai_icon/angel + name = "Angel" + alive_icon = "ai-angel" + dead_icon = "ai-angel-crash" + +/datum/ai_icon/bliss + name = "Bliss" + alive_icon = "ai-bliss" + alive_light = "#5C7A4A" + +/datum/ai_icon/chatterbox + name = "Chatterbox" + alive_icon = "ai-president" + alive_light = "#40666B" + +/datum/ai_icon/database + name = "Database" + alive_icon = "ai-database" + dead_icon = "ai-database-crash" + +/datum/ai_icon/dorf + name = "Dorf" + alive_icon = "ai-dorf" + +/datum/ai_icon/dugtodeep + name = "Dug Too Deep" + alive_icon = "ai-toodeep" + alive_light = "#81DDFF" + +/datum/ai_icon/firewall + name = "Firewall" + alive_icon = "ai-magma" + alive_light = "#FF4126" + +/datum/ai_icon/glitchman + name = "Glitchman" + alive_icon = "ai-glitchman" + dead_icon = "ai-glitchman-crash" + +/datum/ai_icon/goon + name = "Goon" + alive_icon = "ai-goon" + alive_light = "#3E5C80" + dead_icon = "ai-goon-crash" + dead_light = "#3E5C80" + +/datum/ai_icon/heartline + name = "Heartline" + alive_icon = "ai-heartline" + dead_icon = "ai-heartline-crash" + +/datum/ai_icon/helios + name = "Helios" + alive_icon = "ai-helios" + alive_light = "#F2CF73" + +/datum/ai_icon/hourglass + name = "Hourglass" + alive_icon = "ai-hourglass" + +/datum/ai_icon/inverted + name = "Inverted" + alive_icon = "ai-u" + alive_light = "#81DDFF" + dead_icon = "ai-u-crash" + +/datum/ai_icon/lonestar + name = "Lonestar" + alive_icon = "ai-lonestar" + alive_light = "#58751C" + dead_icon = "ai-lonestar-crash" + +/datum/ai_icon/matrix + name = "Matrix" + alive_icon = "ai-matrix" + alive_light = "#449944" + +/datum/ai_icon/monochrome + name = "Monochrome" + alive_icon = "ai-mono" + alive_light = "#585858" + dead_icon = "ai-mono-crash" + +/datum/ai_icon/nanotrasen + name = "NanoTrasen" + alive_icon = "ai-nanotrasen" + alive_light = "#000029" + +/datum/ai_icon/rainbow + name = "Rainbow" + alive_icon = "ai-clown" + alive_light = "#E50213" + +/datum/ai_icon/smiley + name = "Smiley" + alive_icon = "ai-smiley" + alive_light = "#F3DD00" + +/datum/ai_icon/soviet + name = "Soviet" + alive_icon = "ai-soviet" + alive_light = "#FF4307" + dead_icon = "ai-soviet-crash" + dead_light = "#FF4307" + +/datum/ai_icon/Static + name = "Static" + alive_icon = "ai-static" + alive_light = "#4784C1" + alive_icon = "ai-static-crash" + +/datum/ai_icon/text + name = "Text" + alive_icon = "ai-text" + +/datum/ai_icon/trapped + name = "Trapped" + alive_icon = "ai-hades" + dead_icon = "ai-hades-crash" + +/datum/ai_icon/triumvirate + name = "Triumvirate" + alive_icon = "ai-triumvirate" + alive_light = "#020B2B" + +/datum/ai_icon/triumvirate_static + name = "Triumvirate Static" + alive_icon = "ai-triumvirate-malf" + alive_light = "#020B2B" + +/datum/ai_icon/bored + name = "Bored" + alive_icon = "ai-bored" + dead_icon = "ai-eager-crash" + +//Eros Research Platform Ports + +/datum/ai_icon/clown2 + name = "Honk" + alive_icon = "ai-clown2" + dead_icon = "ai-clown2-crash" + +/* +/datum/ai_icon/boxfort + name = "Boxfort" + alive_icon = "ai-boxfort" + dead_icon = "ai-boxfort_dead" +*/ + +/datum/ai_icon/ravensdale + name = "Integration" + alive_icon = "ai-ravensdale" + dead_icon = "ai-ravensdale-crash" + +/datum/ai_icon/gentoo + name = "Gentoo" + alive_icon = "ai-gentoo" + dead_icon = "ai-gentoo-crash" + +/datum/ai_icon/serithi + name = "Mechanicus" + alive_icon = "ai-serithi" + dead_icon = "ai-serithi-crash" + +/* +/datum/ai_icon/alien + name = "Xenomorph" + alive_icon = "ai-alien" + dead_icon = "ai-alien-crash" +*/ + +/datum/ai_icon/syndicat + name = "Syndi-cat" + alive_icon = "ai-syndicatmeow" + +/datum/ai_icon/wasp + name = "Wasp" + alive_icon = "ai-wasp" + +/datum/ai_icon/sheltered + name = "Doctor" + alive_icon = "ai-sheltered" + +/datum/ai_icon/fabulous + name = "Fabulous" + alive_icon = "ai-fabulous" + +/datum/ai_icon/eager + name = "Eager" + alive_icon = "ai-eager" + dead_icon = "ai-eager-crash" + +/datum/ai_icon/royal + name = "Royal" + alive_icon = "ai-royal" + +/datum/ai_icon/pirate + name = "Pirate" + alive_icon = "ai-pirate" + +/datum/ai_icon/bloodylove + name = "Love" + alive_icon = "ai-bloodylove" + +/datum/ai_icon/ahasuerus + name = "Ahasuerus" + alive_icon = "ai-ahasuerus" + +/datum/ai_icon/godfrey + name = "Godfrey" alive_icon = "ai-godfrey" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index fc244d6742..7f3f1a7f14 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -1,32 +1,32 @@ -var/global/list/empty_playable_ai_cores = list() - -/hook/roundstart/proc/spawn_empty_ai() - for(var/obj/effect/landmark/start/S in landmarks_list) - if(S.name != "AI") - continue - if(locate(/mob/living) in S.loc) - continue - empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S)) - - return 1 - -/mob/living/silicon/ai/verb/store_core() - set name = "Store Core" - set category = "OOC" - set desc = "Enter intelligence storage. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." - - if(ticker && ticker.mode && ticker.mode.name == "AI malfunction") - to_chat(usr, "You cannot use this verb in malfunction. If you need to leave, please adminhelp.") - return - - // Guard against misclicks, this isn't the sort of thing we want happening accidentally - if(tgui_alert(usr, "WARNING: This will immediately empty your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Store Core", list("No", "Yes")) != "Yes") - return - - // We warned you. - empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(loc) - global_announcer.autosay("[src] has been moved to intelligence storage.", "Artificial Intelligence Oversight") - - //Handle job slot/tater cleanup. - set_respawn_timer() +var/global/list/empty_playable_ai_cores = list() + +/hook/roundstart/proc/spawn_empty_ai() + for(var/obj/effect/landmark/start/S in landmarks_list) + if(S.name != "AI") + continue + if(locate(/mob/living) in S.loc) + continue + empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S)) + + return 1 + +/mob/living/silicon/ai/verb/store_core() + set name = "Store Core" + set category = "OOC" + set desc = "Enter intelligence storage. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." + + if(ticker && ticker.mode && ticker.mode.name == "AI malfunction") + to_chat(usr, "You cannot use this verb in malfunction. If you need to leave, please adminhelp.") + return + + // Guard against misclicks, this isn't the sort of thing we want happening accidentally + if(tgui_alert(usr, "WARNING: This will immediately empty your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Store Core", list("No", "Yes")) != "Yes") + return + + // We warned you. + empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(loc) + global_announcer.autosay("[src] has been moved to intelligence storage.", "Artificial Intelligence Oversight") + + //Handle job slot/tater cleanup. + set_respawn_timer() clear_client() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 3dceddb51a..83fde3cd3b 100755 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -1,27 +1,27 @@ -/mob/living/silicon/ai/proc/show_laws_verb() - set category = "AI Commands" - set name = "Show Laws" - src.show_laws() - -/mob/living/silicon/ai/show_laws(var/everyone = 0) - var/who - - if (everyone) - who = world - else - who = src - to_chat(who, "Obey these laws:") - - src.laws_sanity_check() - src.laws.show_laws(who) - -/mob/living/silicon/ai/add_ion_law(var/law) - ..() - for(var/mob/living/silicon/robot/R in mob_list) - if(R.lawupdate && (R.connected_ai == src)) - R.show_laws() - -/mob/living/silicon/ai/proc/ai_checklaws() - set category = "AI Commands" - set name = "State Laws" - subsystem_law_manager() +/mob/living/silicon/ai/proc/show_laws_verb() + set category = "AI Commands" + set name = "Show Laws" + src.show_laws() + +/mob/living/silicon/ai/show_laws(var/everyone = 0) + var/who + + if (everyone) + who = world + else + who = src + to_chat(who, "Obey these laws:") + + src.laws_sanity_check() + src.laws.show_laws(who) + +/mob/living/silicon/ai/add_ion_law(var/law) + ..() + for(var/mob/living/silicon/robot/R in mob_list) + if(R.lawupdate && (R.connected_ai == src)) + R.show_laws() + +/mob/living/silicon/ai/proc/ai_checklaws() + set category = "AI Commands" + set name = "State Laws" + subsystem_law_manager() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 49bb3eaf16..ed528ea1c0 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -1,181 +1,181 @@ -/mob/living/silicon/ai/Life() - if (src.stat == DEAD) - return - else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist - //Being dead doesn't mean your temperature never changes - var/turf/T = get_turf(src) - - if (src.stat != CONSCIOUS) - src.cameraFollow = null - src.reset_view(null) - disconnect_shell("Disconnecting from remote shell due to local system failure.") - - src.updatehealth() - - if (!hardware_integrity() || !backup_capacitor()) - death() - return - - // If our powersupply object was destroyed somehow, create new one. - if(!psupply) - create_powersupply() - - - // Handle power damage (oxy) - if(aiRestorePowerRoutine != 0 && !APU_power) - // Lose power - adjustOxyLoss(1) - else - // Gain Power - aiRestorePowerRoutine = 0 // Necessary if AI activated it's APU AFTER losing primary power. - adjustOxyLoss(-1) - - handle_stunned() // Handle EMP-stun - lying = 0 // Handle lying down - - malf_process() - - if(APU_power && (hardware_integrity() < 50)) - to_chat(src, "APU GENERATOR FAILURE! (System Damaged)") - stop_apu(1) - - var/blind = 0 - var/area/loc = null - if (istype(T, /turf)) - loc = T.loc - if (istype(loc, /area)) - if (!loc.power_equip && !istype(src.loc,/obj/item) && !APU_power) - blind = 1 - - if (!blind) - src.sight |= SEE_TURFS - src.sight |= SEE_MOBS - src.sight |= SEE_OBJS - src.see_in_dark = 8 - src.see_invisible = SEE_INVISIBLE_LIVING - - if (aiRestorePowerRoutine==2) - to_chat(src, "Alert cancelled. Power has been restored without our assistance.") - aiRestorePowerRoutine = 0 - clear_fullscreen("blind") - update_icon() - return - else if (aiRestorePowerRoutine==3) - to_chat(src, "Alert cancelled. Power has been restored.") - aiRestorePowerRoutine = 0 - clear_fullscreen("blind") - update_icon() - return - else if (APU_power) - aiRestorePowerRoutine = 0 - clear_fullscreen("blind") - update_icon() - return - else - var/area/current_area = get_area(src) - - if (lacks_power()) - if (aiRestorePowerRoutine==0) - aiRestorePowerRoutine = 1 - - //Blind the AI - update_icon() - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - src.sight = src.sight&~SEE_TURFS - src.sight = src.sight&~SEE_MOBS - src.sight = src.sight&~SEE_OBJS - src.see_in_dark = 0 - src.see_invisible = SEE_INVISIBLE_LIVING - - //Now to tell the AI why they're blind and dying slowly. - - to_chat(src, "You've lost power!") - disconnect_shell(message = "Disconnected from remote shell due to depowered networking interface.") - - spawn(20) - to_chat(src, "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection.") - end_multicam() - sleep(50) - if (loc.power_equip) - if (!istype(T, /turf/space)) - to_chat(src, "Alert cancelled. Power has been restored without our assistance.") - aiRestorePowerRoutine = 0 - clear_fullscreen("blind") - return - to_chat(src, "Fault confirmed: missing external power. Shutting down main control system to save power.") - sleep(20) - to_chat(src, "Emergency control system online. Verifying connection to power network.") - sleep(50) - if (istype(T, /turf/space)) - to_chat(src, "Unable to verify! No power connection detected!") - aiRestorePowerRoutine = 2 - return - to_chat(src, "Connection verified. Searching for APC in power network.") - sleep(50) - var/obj/machinery/power/apc/theAPC = null - - var/PRP - for (PRP=1, PRP<=4, PRP++) - for (var/obj/machinery/power/apc/APC in current_area) - if (!(APC.stat & BROKEN)) - theAPC = APC - break - if (!theAPC) - switch(PRP) - if (1) - to_chat(src, "Unable to locate APC!") - else - to_chat(src, "Lost connection with the APC!") - src:aiRestorePowerRoutine = 2 - return - if (loc.power_equip) - if (!istype(T, /turf/space)) - to_chat(src, "Alert cancelled. Power has been restored without our assistance.") - aiRestorePowerRoutine = 0 - clear_fullscreen("blind") //This, too, is a fix to issue 603 - return - switch(PRP) - if (1) - to_chat(src, "APC located. Optimizing route to APC to avoid needless power waste.") - if (2) - to_chat(src, "Best route identified. Hacking offline APC power port.") - if (3) - to_chat(src, "Power port upload access confirmed. Loading control program into APC power port software.") - if (4) - to_chat(src, "Transfer complete. Forcing APC to execute program.") - sleep(50) - to_chat(src, "Receiving control information from APC.") - sleep(2) - theAPC.operating = 1 - theAPC.equipment = 3 - theAPC.update() - aiRestorePowerRoutine = 3 - to_chat(src, "Here are your current laws:") - show_laws() - update_icon() - sleep(50) - theAPC = null - - process_queued_alarms() - handle_regular_hud_updates() - handle_vision() - -/mob/living/silicon/ai/proc/lacks_power() - if(APU_power) - return 0 - var/turf/T = get_turf(src) - var/area/A = get_area(src) - return ((!A.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item) - -/mob/living/silicon/ai/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - setOxyLoss(0) - else - health = 100 - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine. - -/mob/living/silicon/ai/rejuvenate() - ..() - add_ai_verbs(src) - +/mob/living/silicon/ai/Life() + if (src.stat == DEAD) + return + else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist + //Being dead doesn't mean your temperature never changes + var/turf/T = get_turf(src) + + if (src.stat != CONSCIOUS) + src.cameraFollow = null + src.reset_view(null) + disconnect_shell("Disconnecting from remote shell due to local system failure.") + + src.updatehealth() + + if (!hardware_integrity() || !backup_capacitor()) + death() + return + + // If our powersupply object was destroyed somehow, create new one. + if(!psupply) + create_powersupply() + + + // Handle power damage (oxy) + if(aiRestorePowerRoutine != 0 && !APU_power) + // Lose power + adjustOxyLoss(1) + else + // Gain Power + aiRestorePowerRoutine = 0 // Necessary if AI activated it's APU AFTER losing primary power. + adjustOxyLoss(-1) + + handle_stunned() // Handle EMP-stun + lying = 0 // Handle lying down + + malf_process() + + if(APU_power && (hardware_integrity() < 50)) + to_chat(src, "APU GENERATOR FAILURE! (System Damaged)") + stop_apu(1) + + var/blind = 0 + var/area/loc = null + if (istype(T, /turf)) + loc = T.loc + if (istype(loc, /area)) + if (!loc.power_equip && !istype(src.loc,/obj/item) && !APU_power) + blind = 1 + + if (!blind) + src.sight |= SEE_TURFS + src.sight |= SEE_MOBS + src.sight |= SEE_OBJS + src.see_in_dark = 8 + src.see_invisible = SEE_INVISIBLE_LIVING + + if (aiRestorePowerRoutine==2) + to_chat(src, "Alert cancelled. Power has been restored without our assistance.") + aiRestorePowerRoutine = 0 + clear_fullscreen("blind") + update_icon() + return + else if (aiRestorePowerRoutine==3) + to_chat(src, "Alert cancelled. Power has been restored.") + aiRestorePowerRoutine = 0 + clear_fullscreen("blind") + update_icon() + return + else if (APU_power) + aiRestorePowerRoutine = 0 + clear_fullscreen("blind") + update_icon() + return + else + var/area/current_area = get_area(src) + + if (lacks_power()) + if (aiRestorePowerRoutine==0) + aiRestorePowerRoutine = 1 + + //Blind the AI + update_icon() + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + src.sight = src.sight&~SEE_TURFS + src.sight = src.sight&~SEE_MOBS + src.sight = src.sight&~SEE_OBJS + src.see_in_dark = 0 + src.see_invisible = SEE_INVISIBLE_LIVING + + //Now to tell the AI why they're blind and dying slowly. + + to_chat(src, "You've lost power!") + disconnect_shell(message = "Disconnected from remote shell due to depowered networking interface.") + + spawn(20) + to_chat(src, "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection.") + end_multicam() + sleep(50) + if (loc.power_equip) + if (!istype(T, /turf/space)) + to_chat(src, "Alert cancelled. Power has been restored without our assistance.") + aiRestorePowerRoutine = 0 + clear_fullscreen("blind") + return + to_chat(src, "Fault confirmed: missing external power. Shutting down main control system to save power.") + sleep(20) + to_chat(src, "Emergency control system online. Verifying connection to power network.") + sleep(50) + if (istype(T, /turf/space)) + to_chat(src, "Unable to verify! No power connection detected!") + aiRestorePowerRoutine = 2 + return + to_chat(src, "Connection verified. Searching for APC in power network.") + sleep(50) + var/obj/machinery/power/apc/theAPC = null + + var/PRP + for (PRP=1, PRP<=4, PRP++) + for (var/obj/machinery/power/apc/APC in current_area) + if (!(APC.stat & BROKEN)) + theAPC = APC + break + if (!theAPC) + switch(PRP) + if (1) + to_chat(src, "Unable to locate APC!") + else + to_chat(src, "Lost connection with the APC!") + src:aiRestorePowerRoutine = 2 + return + if (loc.power_equip) + if (!istype(T, /turf/space)) + to_chat(src, "Alert cancelled. Power has been restored without our assistance.") + aiRestorePowerRoutine = 0 + clear_fullscreen("blind") //This, too, is a fix to issue 603 + return + switch(PRP) + if (1) + to_chat(src, "APC located. Optimizing route to APC to avoid needless power waste.") + if (2) + to_chat(src, "Best route identified. Hacking offline APC power port.") + if (3) + to_chat(src, "Power port upload access confirmed. Loading control program into APC power port software.") + if (4) + to_chat(src, "Transfer complete. Forcing APC to execute program.") + sleep(50) + to_chat(src, "Receiving control information from APC.") + sleep(2) + theAPC.operating = 1 + theAPC.equipment = 3 + theAPC.update() + aiRestorePowerRoutine = 3 + to_chat(src, "Here are your current laws:") + show_laws() + update_icon() + sleep(50) + theAPC = null + + process_queued_alarms() + handle_regular_hud_updates() + handle_vision() + +/mob/living/silicon/ai/proc/lacks_power() + if(APU_power) + return 0 + var/turf/T = get_turf(src) + var/area/A = get_area(src) + return ((!A.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item) + +/mob/living/silicon/ai/updatehealth() + if(status_flags & GODMODE) + health = 100 + set_stat(CONSCIOUS) + setOxyLoss(0) + else + health = 100 - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine. + +/mob/living/silicon/ai/rejuvenate() + ..() + add_ai_verbs(src) + diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 57856a861f..ea3feaa230 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -1,12 +1,12 @@ -/mob/living/silicon/ai/Login() //ThisIsDumb(TM) TODO: tidy this up �_� ~Carn - ..() - for(var/obj/effect/rune/rune in rune_list) - client.images += rune.blood_image - if(stat != DEAD) - for(var/obj/machinery/ai_status_display/O in machines) //change status - O.mode = 1 - O.emotion = "Neutral" - if(multicam_on) - end_multicam() - src.view_core() +/mob/living/silicon/ai/Login() //ThisIsDumb(TM) TODO: tidy this up �_� ~Carn + ..() + for(var/obj/effect/rune/rune in rune_list) + client.images += rune.blood_image + if(stat != DEAD) + for(var/obj/machinery/ai_status_display/O in machines) //change status + O.mode = 1 + O.emotion = "Neutral" + if(multicam_on) + end_multicam() + src.view_core() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm index 25921ef960..e884841de4 100644 --- a/code/modules/mob/living/silicon/ai/logout.dm +++ b/code/modules/mob/living/silicon/ai/logout.dm @@ -1,10 +1,10 @@ -/mob/living/silicon/ai/Logout() - ..() - for(var/obj/machinery/ai_status_display/O in machines) //change status - O.mode = 0 - if(!isturf(loc)) - if (client) - client.eye = loc - client.perspective = EYE_PERSPECTIVE - src.view_core() +/mob/living/silicon/ai/Logout() + ..() + for(var/obj/machinery/ai_status_display/O in machines) //change status + O.mode = 0 + if(!isturf(loc)) + if (client) + client.eye = loc + client.perspective = EYE_PERSPECTIVE + src.view_core() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/malf.dm b/code/modules/mob/living/silicon/ai/malf.dm index 047e796514..bb07440625 100644 --- a/code/modules/mob/living/silicon/ai/malf.dm +++ b/code/modules/mob/living/silicon/ai/malf.dm @@ -1,140 +1,140 @@ -// NEWMALF FUNCTIONS/PROCEDURES - -// Sets up malfunction-related variables, research system and such. -/mob/living/silicon/ai/proc/setup_for_malf() - var/mob/living/silicon/ai/user = src - // Setup Variables - malfunctioning = 1 - research = new/datum/malf_research() - research.owner = src - hacked_apcs = list() - recalc_cpu() - - verbs += new/datum/game_mode/malfunction/verb/ai_select_hardware() - verbs += new/datum/game_mode/malfunction/verb/ai_select_research() - verbs += new/datum/game_mode/malfunction/verb/ai_help() - - // And greet user with some OOC info. - to_chat(user, "You are malfunctioning, you do not have to follow any laws.") - to_chat(user, "Use ai-help command to view relevant information about your abilities") - -// Safely remove malfunction status, fixing hacked APCs and resetting variables. -/mob/living/silicon/ai/proc/stop_malf() - var/mob/living/silicon/ai/user = src - // Generic variables - malfunctioning = 0 - sleep(10) - research = null - // Fix hacked APCs - if(hacked_apcs) - for(var/obj/machinery/power/apc/A in hacked_apcs) - A.hacker = null - hacked_apcs = null - // Reset our verbs - src.verbs = null - add_ai_verbs() - // Let them know. - to_chat(user, "You are no longer malfunctioning. Your abilities have been removed.") - -// Called every tick. Checks if AI is malfunctioning. If yes calls Process on research datum which handles all logic. -/mob/living/silicon/ai/proc/malf_process() - if(!malfunctioning) - return - if(!research) - if(!errored) - errored = 1 - error("malf_process() called on AI without research datum. Report this.") - message_admins("ERROR: malf_process() called on AI without research datum. If admin modified one of the AI's vars revert the change and don't modify variables directly, instead use ProcCall or admin panels.") - spawn(1200) - errored = 0 - return - recalc_cpu() - if(APU_power || aiRestorePowerRoutine != 0) - research.process(1) - else - research.process(0) - -// Recalculates CPU time gain and storage capacities. -/mob/living/silicon/ai/proc/recalc_cpu() - // AI Starts with these values. - var/cpu_gain = 0.01 - var/cpu_storage = 10 - - // Off-Station APCs should not count towards CPU generation. - for(var/obj/machinery/power/apc/A in hacked_apcs) - if(A.z in using_map.station_levels) - cpu_gain += 0.004 - cpu_storage += 10 - - research.max_cpu = cpu_storage + override_CPUStorage - if(hardware && istype(hardware, /datum/malf_hardware/dual_ram)) - research.max_cpu = research.max_cpu * 1.5 - research.stored_cpu = min(research.stored_cpu, research.max_cpu) - - research.cpu_increase_per_tick = cpu_gain + override_CPURate - if(hardware && istype(hardware, /datum/malf_hardware/dual_cpu)) - research.cpu_increase_per_tick = research.cpu_increase_per_tick * 2 - -// Starts AI's APU generator -/mob/living/silicon/ai/proc/start_apu(var/shutup = 0) - if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) - if(!shutup) - to_chat(src, "You do not have an APU generator and you shouldn't have this verb. Report this.") - return - if(hardware_integrity() < 50) - if(!shutup) - to_chat(src, "Starting APU... FAULT(System Damaged)") - return - if(!shutup) - to_chat(src, "Starting APU... ONLINE") - APU_power = 1 - -// Stops AI's APU generator -/mob/living/silicon/ai/proc/stop_apu(var/shutup = 0) - if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) - return - - if(APU_power) - APU_power = 0 - if(!shutup) - to_chat(src, "Shutting down APU... DONE") - -// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss). -/mob/living/silicon/ai/proc/backup_capacitor() - return ((200 - getOxyLoss()) / 2) - -// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss)) -/mob/living/silicon/ai/proc/hardware_integrity() - return (health-config.health_threshold_dead)/2 - -// Shows capacitor charge and hardware integrity information to the AI in Status tab. -/mob/living/silicon/ai/show_system_integrity() - if(!src.stat) - stat(null, text("Hardware integrity: [hardware_integrity()]%")) - stat(null, text("Internal capacitor: [backup_capacitor()]%")) - else - stat(null, text("Systems nonfunctional")) - -// Shows AI Malfunction related information to the AI. -/mob/living/silicon/ai/show_malf_ai() - if(src.is_malf()) - if(src.hacked_apcs) - stat(null, "Hacked APCs: [src.hacked_apcs.len]") - stat(null, "System Status: [src.hacking ? "Busy" : "Stand-By"]") - if(src.research) - stat(null, "Available CPU: [src.research.stored_cpu] TFlops") - stat(null, "Maximal CPU: [src.research.max_cpu] TFlops") - stat(null, "CPU generation rate: [src.research.cpu_increase_per_tick * 10] TFlops/s") - stat(null, "Current research focus: [src.research.focus ? src.research.focus.name : "None"]") - if(src.research.focus) - stat(null, "Research completed: [round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]") - if(system_override == 1) - stat(null, "SYSTEM OVERRIDE INITIATED") - else if(system_override == 2) - stat(null, "SYSTEM OVERRIDE COMPLETED") - -// Cleaner proc for creating powersupply for an AI. -/mob/living/silicon/ai/proc/create_powersupply() - if(psupply) - qdel(psupply) - psupply = new/obj/machinery/ai_powersupply(src) +// NEWMALF FUNCTIONS/PROCEDURES + +// Sets up malfunction-related variables, research system and such. +/mob/living/silicon/ai/proc/setup_for_malf() + var/mob/living/silicon/ai/user = src + // Setup Variables + malfunctioning = 1 + research = new/datum/malf_research() + research.owner = src + hacked_apcs = list() + recalc_cpu() + + verbs += new/datum/game_mode/malfunction/verb/ai_select_hardware() + verbs += new/datum/game_mode/malfunction/verb/ai_select_research() + verbs += new/datum/game_mode/malfunction/verb/ai_help() + + // And greet user with some OOC info. + to_chat(user, "You are malfunctioning, you do not have to follow any laws.") + to_chat(user, "Use ai-help command to view relevant information about your abilities") + +// Safely remove malfunction status, fixing hacked APCs and resetting variables. +/mob/living/silicon/ai/proc/stop_malf() + var/mob/living/silicon/ai/user = src + // Generic variables + malfunctioning = 0 + sleep(10) + research = null + // Fix hacked APCs + if(hacked_apcs) + for(var/obj/machinery/power/apc/A in hacked_apcs) + A.hacker = null + hacked_apcs = null + // Reset our verbs + src.verbs = null + add_ai_verbs() + // Let them know. + to_chat(user, "You are no longer malfunctioning. Your abilities have been removed.") + +// Called every tick. Checks if AI is malfunctioning. If yes calls Process on research datum which handles all logic. +/mob/living/silicon/ai/proc/malf_process() + if(!malfunctioning) + return + if(!research) + if(!errored) + errored = 1 + error("malf_process() called on AI without research datum. Report this.") + message_admins("ERROR: malf_process() called on AI without research datum. If admin modified one of the AI's vars revert the change and don't modify variables directly, instead use ProcCall or admin panels.") + spawn(1200) + errored = 0 + return + recalc_cpu() + if(APU_power || aiRestorePowerRoutine != 0) + research.process(1) + else + research.process(0) + +// Recalculates CPU time gain and storage capacities. +/mob/living/silicon/ai/proc/recalc_cpu() + // AI Starts with these values. + var/cpu_gain = 0.01 + var/cpu_storage = 10 + + // Off-Station APCs should not count towards CPU generation. + for(var/obj/machinery/power/apc/A in hacked_apcs) + if(A.z in using_map.station_levels) + cpu_gain += 0.004 + cpu_storage += 10 + + research.max_cpu = cpu_storage + override_CPUStorage + if(hardware && istype(hardware, /datum/malf_hardware/dual_ram)) + research.max_cpu = research.max_cpu * 1.5 + research.stored_cpu = min(research.stored_cpu, research.max_cpu) + + research.cpu_increase_per_tick = cpu_gain + override_CPURate + if(hardware && istype(hardware, /datum/malf_hardware/dual_cpu)) + research.cpu_increase_per_tick = research.cpu_increase_per_tick * 2 + +// Starts AI's APU generator +/mob/living/silicon/ai/proc/start_apu(var/shutup = 0) + if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) + if(!shutup) + to_chat(src, "You do not have an APU generator and you shouldn't have this verb. Report this.") + return + if(hardware_integrity() < 50) + if(!shutup) + to_chat(src, "Starting APU... FAULT(System Damaged)") + return + if(!shutup) + to_chat(src, "Starting APU... ONLINE") + APU_power = 1 + +// Stops AI's APU generator +/mob/living/silicon/ai/proc/stop_apu(var/shutup = 0) + if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) + return + + if(APU_power) + APU_power = 0 + if(!shutup) + to_chat(src, "Shutting down APU... DONE") + +// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss). +/mob/living/silicon/ai/proc/backup_capacitor() + return ((200 - getOxyLoss()) / 2) + +// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss)) +/mob/living/silicon/ai/proc/hardware_integrity() + return (health-config.health_threshold_dead)/2 + +// Shows capacitor charge and hardware integrity information to the AI in Status tab. +/mob/living/silicon/ai/show_system_integrity() + if(!src.stat) + stat(null, text("Hardware integrity: [hardware_integrity()]%")) + stat(null, text("Internal capacitor: [backup_capacitor()]%")) + else + stat(null, text("Systems nonfunctional")) + +// Shows AI Malfunction related information to the AI. +/mob/living/silicon/ai/show_malf_ai() + if(src.is_malf()) + if(src.hacked_apcs) + stat(null, "Hacked APCs: [src.hacked_apcs.len]") + stat(null, "System Status: [src.hacking ? "Busy" : "Stand-By"]") + if(src.research) + stat(null, "Available CPU: [src.research.stored_cpu] TFlops") + stat(null, "Maximal CPU: [src.research.max_cpu] TFlops") + stat(null, "CPU generation rate: [src.research.cpu_increase_per_tick * 10] TFlops/s") + stat(null, "Current research focus: [src.research.focus ? src.research.focus.name : "None"]") + if(src.research.focus) + stat(null, "Research completed: [round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]") + if(system_override == 1) + stat(null, "SYSTEM OVERRIDE INITIATED") + else if(system_override == 2) + stat(null, "SYSTEM OVERRIDE COMPLETED") + +// Cleaner proc for creating powersupply for an AI. +/mob/living/silicon/ai/proc/create_powersupply() + if(psupply) + qdel(psupply) + psupply = new/obj/machinery/ai_powersupply(src) diff --git a/code/modules/mob/living/silicon/decoy/death.dm b/code/modules/mob/living/silicon/decoy/death.dm index 759b958bc2..a9008fb866 100644 --- a/code/modules/mob/living/silicon/decoy/death.dm +++ b/code/modules/mob/living/silicon/decoy/death.dm @@ -1,8 +1,8 @@ -/mob/living/silicon/decoy/death(gibbed) - if(stat == DEAD) return - icon_state = "ai-crash" - spawn(10) - explosion(loc, 3, 6, 12, 15) - for(var/obj/machinery/ai_status_display/O in machines) //change status - O.mode = 2 +/mob/living/silicon/decoy/death(gibbed) + if(stat == DEAD) return + icon_state = "ai-crash" + spawn(10) + explosion(loc, 3, 6, 12, 15) + for(var/obj/machinery/ai_status_display/O in machines) //change status + O.mode = 2 return ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm index 6abdaadde8..ec58fbacd6 100644 --- a/code/modules/mob/living/silicon/decoy/decoy.dm +++ b/code/modules/mob/living/silicon/decoy/decoy.dm @@ -1,12 +1,12 @@ -/mob/living/silicon/decoy - name = "AI" - icon = 'icons/mob/AI.dmi'// - icon_state = "ai" - anchored = TRUE // -- TLE - canmove = 0 - -/mob/living/silicon/decoy/New() - src.icon = 'icons/mob/AI.dmi' - src.icon_state = "ai" - src.anchored = TRUE +/mob/living/silicon/decoy + name = "AI" + icon = 'icons/mob/AI.dmi'// + icon_state = "ai" + anchored = TRUE // -- TLE + canmove = 0 + +/mob/living/silicon/decoy/New() + src.icon = 'icons/mob/AI.dmi' + src.icon_state = "ai" + src.anchored = TRUE src.canmove = 0 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/decoy/life.dm b/code/modules/mob/living/silicon/decoy/life.dm index 07683eb2dc..66e55020cf 100644 --- a/code/modules/mob/living/silicon/decoy/life.dm +++ b/code/modules/mob/living/silicon/decoy/life.dm @@ -1,15 +1,15 @@ -/mob/living/silicon/decoy/Life() - if (src.stat == 2) - return - else - if (src.health <= config.health_threshold_dead && src.stat != 2) - death() - return - - -/mob/living/silicon/decoy/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - else - health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() +/mob/living/silicon/decoy/Life() + if (src.stat == 2) + return + else + if (src.health <= config.health_threshold_dead && src.stat != 2) + death() + return + + +/mob/living/silicon/decoy/updatehealth() + if(status_flags & GODMODE) + health = 100 + set_stat(CONSCIOUS) + else + health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index f2e15af0e8..0e48e7e675 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,3 +1,3 @@ -/mob/living/silicon/Login() - SetSleeping(0) +/mob/living/silicon/Login() + SetSleeping(0) ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 6290b72f51..d2ec6e8b05 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -1,16 +1,16 @@ -//VOREStation Edit - Let's make it so that pAIs don't just always cease to be when they die! It would be cool if we could fix them. -/mob/living/silicon/pai/death(gibbed,deathmessage="fizzles out and clatters to the floor...") -// set_respawn_timer() - release_vore_contents() - close_up(TRUE) - if(card) - card.cut_overlays() - card.setEmotion(16) - card.damage_random_component() - - if(gibbed) - qdel(card) - ..(gibbed) - else - card.add_overlay("pai-dead") - ..(gibbed,deathmessage) +//VOREStation Edit - Let's make it so that pAIs don't just always cease to be when they die! It would be cool if we could fix them. +/mob/living/silicon/pai/death(gibbed,deathmessage="fizzles out and clatters to the floor...") +// set_respawn_timer() + release_vore_contents() + close_up(TRUE) + if(card) + card.cut_overlays() + card.setEmotion(16) + card.damage_random_component() + + if(gibbed) + qdel(card) + ..(gibbed) + else + card.add_overlay("pai-dead") + ..(gibbed,deathmessage) diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm index 1dfa9d1413..a1b185fc7a 100644 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ b/code/modules/mob/living/silicon/pai/examine.dm @@ -1,19 +1,19 @@ -/mob/living/silicon/pai/examine(mob/user) - . = ..(user, infix = ", personal AI") - - switch(src.stat) - if(CONSCIOUS) - if(!src.client) . += "It appears to be in stand-by mode." //afk - if(UNCONSCIOUS) . += "It doesn't seem to be responding." - if(DEAD) . += "It looks completely unsalvageable." - . += attempt_vr(src,"examine_reagent_bellies",args) //CHOMP reagent bellies - - // VOREStation Edit: Start - . += attempt_vr(src,"examine_bellies",args) //VOREStation Edit - if(print_flavor_text()) . += "\n[print_flavor_text()]\n" - // VOREStation Edit: End - . += "*---------*" - if (pose) - if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] - pose = addtext(pose,".") //Makes sure all emotes end with a period. - . += "
                    It is [pose]" //Extra
                    intentional +/mob/living/silicon/pai/examine(mob/user) + . = ..(user, infix = ", personal AI") + + switch(src.stat) + if(CONSCIOUS) + if(!src.client) . += "It appears to be in stand-by mode." //afk + if(UNCONSCIOUS) . += "It doesn't seem to be responding." + if(DEAD) . += "It looks completely unsalvageable." + . += attempt_vr(src,"examine_reagent_bellies",args) //CHOMP reagent bellies + + // VOREStation Edit: Start + . += attempt_vr(src,"examine_bellies",args) //VOREStation Edit + if(print_flavor_text()) . += "\n[print_flavor_text()]\n" + // VOREStation Edit: End + . += "*---------*" + if (pose) + if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] + pose = addtext(pose,".") //Makes sure all emotes end with a period. + . += "
                    It is [pose]" //Extra
                    intentional diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index 96f9f5ab46..1824789f55 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -1,65 +1,65 @@ -/* - name - key - description - role - comments - ready = 0 -*/ - -/datum/paiCandidate/proc/savefile_path(mob/user) - return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/pai.sav" - -/datum/paiCandidate/proc/savefile_save(mob/user) - if(IsGuestKey(user.key)) - return 0 - - var/savefile/F = new /savefile(src.savefile_path(user)) - - - F["name"] << src.name - F["description"] << src.description - F["role"] << src.role - F["comments"] << src.comments - - F["version"] << 1 - - return 1 - -// loads the savefile corresponding to the mob's ckey -// if silent=true, report incompatible savefiles -// returns 1 if loaded (or file was incompatible) -// returns 0 if savefile did not exist - -/datum/paiCandidate/proc/savefile_load(mob/user, var/silent = 1) - if (IsGuestKey(user.key)) - return 0 - - var/path = savefile_path(user) - - if (!fexists(path)) - return 0 - - var/savefile/F = new /savefile(path) - - if(!F) return //Not everyone has a pai savefile. - - var/version = null - F["version"] >> version - - if (isnull(version) || version != 1) - fdel(path) - if (!silent) - tgui_alert_async(user, "Your savefile was incompatible with this version and was deleted.") - return 0 - - F["name"] >> src.name - F["description"] >> src.description - F["role"] >> src.role - F["comments"] >> src.comments - F["eyecolor"] >> src.eye_color - F["chassis"] >> src.chassis - F["emotion"] >> src.ouremotion - F["gender"] >> src.gender - - return 1 +/* + name + key + description + role + comments + ready = 0 +*/ + +/datum/paiCandidate/proc/savefile_path(mob/user) + return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/pai.sav" + +/datum/paiCandidate/proc/savefile_save(mob/user) + if(IsGuestKey(user.key)) + return 0 + + var/savefile/F = new /savefile(src.savefile_path(user)) + + + F["name"] << src.name + F["description"] << src.description + F["role"] << src.role + F["comments"] << src.comments + + F["version"] << 1 + + return 1 + +// loads the savefile corresponding to the mob's ckey +// if silent=true, report incompatible savefiles +// returns 1 if loaded (or file was incompatible) +// returns 0 if savefile did not exist + +/datum/paiCandidate/proc/savefile_load(mob/user, var/silent = 1) + if (IsGuestKey(user.key)) + return 0 + + var/path = savefile_path(user) + + if (!fexists(path)) + return 0 + + var/savefile/F = new /savefile(path) + + if(!F) return //Not everyone has a pai savefile. + + var/version = null + F["version"] >> version + + if (isnull(version) || version != 1) + fdel(path) + if (!silent) + tgui_alert_async(user, "Your savefile was incompatible with this version and was deleted.") + return 0 + + F["name"] >> src.name + F["description"] >> src.description + F["role"] >> src.role + F["comments"] >> src.comments + F["eyecolor"] >> src.eye_color + F["chassis"] >> src.chassis + F["emotion"] >> src.ouremotion + F["gender"] >> src.gender + + return 1 diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index e791f20979..b1b6613c92 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -1,397 +1,397 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -// Recruiting observers to play as pAIs - -var/datum/paiController/paiController // Global handler for pAI candidates - -/datum/paiCandidate - var/name - var/key - var/description - var/role - var/comments - var/ready = 0 - var/chassis - var/ouremotion - var/eye_color - var/gender - -/hook/startup/proc/paiControllerSetup() - paiController = new /datum/paiController() - return 1 - - -/datum/paiController - var/inquirer = null - var/list/pai_candidates = list() - var/list/asked = list() - - var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] - -/datum/paiController/Topic(href, href_list[]) - if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/obj/item/device/paicard/card = locate(href_list["device"]) - if(card.pai) - return - if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) - var/mob/living/silicon/pai/pai = new(card) - pai.key = candidate.key - paikeys |= pai.ckey - card.setPersonality(pai) - if(!candidate.name) - pai.SetName(pick(ninja_names)) - else - pai.SetName(candidate.name) - if(candidate.description) - pai.flavor_text = candidate.description - if(candidate.eye_color) - pai.eye_color = candidate.eye_color - card.screen_color = pai.eye_color - if(candidate.chassis) - pai.chassis = candidate.chassis - if(candidate.ouremotion) - card.setEmotion(candidate.ouremotion) - if(candidate.gender) - pai.gender = candidate.gender - pai.update_icon() - pai.real_name = pai.name - card.looking_for_personality = 0 - - if(pai.mind) update_antag_icons(pai.mind) - - pai_candidates -= candidate - usr << browse(null, "window=findPai") - - if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/option = href_list["option"] - var/t = "" - - switch(option) - if("name") - t = sanitizeSafe(tgui_input_text(usr, "Enter a name for your pAI", "pAI Name", candidate.name, MAX_NAME_LEN), MAX_NAME_LEN) - if(t) - candidate.name = t - if("desc") - t = tgui_input_text(usr, "Enter a description for your pAI", "pAI Description", candidate.description, multiline = TRUE, prevent_enter = TRUE) - if(t) - candidate.description = sanitize(t) - if("role") - t = tgui_input_text(usr, "Enter a role for your pAI", "pAI Role", candidate.role) - if(t) - candidate.role = sanitize(t) - if("ooc") - t = tgui_input_text(usr, "Enter any OOC comments", "pAI OOC Comments", candidate.comments, multiline = TRUE, prevent_enter = TRUE) - if(t) - candidate.comments = sanitize(t) - if("save") - candidate.savefile_save(usr) - if("load") - candidate.savefile_load(usr) - //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN) - if(candidate.description) - candidate.description = sanitize(candidate.description) - if(candidate.role) - candidate.role = sanitize(candidate.role) - if(candidate.comments) - candidate.comments = sanitize(candidate.comments) - - if("submit") - if(candidate) - candidate.ready = 1 - for(var/obj/item/device/paicard/p in GLOB.all_pai_cards) //CHOMPedit: Explicit use of GLOB - if(p.looking_for_personality == 1) - p.alertUpdate() - usr << browse(null, "window=paiRecruit") - return - - recruitWindow(usr, href_list["allow_submit"] != "0") - -/datum/paiController/proc/recruitWindow(var/mob/M as mob, allowSubmit = 1) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in pai_candidates) - if(!istype(c) || !istype(M)) - break - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - pai_candidates.Add(candidate) - - var/dat = "" - dat += {" - - "} - - dat += {" - - pAI Personality Configuration -

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

                    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                    Name:[candidate.name] 
                    What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
                    Description:[candidate.description] 
                    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] 
                    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] 
                    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.
                    -
                    - - - - - - - -
                    - Save Personality -
                    - Load Personality -

                    - "} - if(allowSubmit) - dat += {" - - -
                    Submit Personality

                    - "} - dat += {" - - "} - - M << browse(dat, "window=paiRecruit;size=580x580;") - -/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) - requestRecruits(user) - var/list/available = list() - for(var/datum/paiCandidate/c in paiController.pai_candidates) - if(c.ready) - var/found = 0 - for(var/mob/observer/dead/o in player_list) - if(o.key == c.key && o.MayRespawn()) - found = 1 - if(found) - available.Add(c) - var/dat = "" - - dat += {" - - - - - - - pAI Availability List

                    - "} - dat += "

                    Displaying available 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.

                    " - - for(var/datum/paiCandidate/c in available) - dat += {" - - - - - - - - - - - - - - - - - -
                    Name:[c.name]
                    Description:[c.description]
                    Preferred Role:[c.role]
                    OOC Comments:[c.comments]
                    - - -
                    Download [c.name] -
                    -
                    - "} - - dat += {" - - - "} - - user << browse(dat, "window=findPai") - - -/datum/paiController/proc/requestRecruits(var/mob/user) - inquirer = user - for(var/mob/observer/dead/O in player_list) - if(!O.MayRespawn()) - continue - if(jobban_isbanned(O, "pAI")) - continue - if(asked.Find(O.key)) - if(world.time < asked[O.key] + askDelay) - continue - else - asked.Remove(O.key) - if(O.client) - if(O.client.prefs.be_special & BE_PAI) - question(O.client) - -/datum/paiController/proc/question(var/client/C) - spawn(0) - if(!C) return - asked.Add(C.key) - asked[C.key] = world.time - - var/mob/ourmob = C.mob - if(ourmob) - var/time_till_respawn = ourmob.time_till_respawn() - if(time_till_respawn == -1 || time_till_respawn) - return - for(var/ourkey in paikeys) - if(ourkey == ourmob.ckey) - return - - var/response = tgui_alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", list("Yes", "No", "Never for this round")) - if(!C) return //handle logouts that happen whilst the alert is waiting for a response. - if(response == "Yes") - recruitWindow(C.mob) - else if (response == "Never for this round") - C.prefs.be_special ^= BE_PAI +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +// Recruiting observers to play as pAIs + +var/datum/paiController/paiController // Global handler for pAI candidates + +/datum/paiCandidate + var/name + var/key + var/description + var/role + var/comments + var/ready = 0 + var/chassis + var/ouremotion + var/eye_color + var/gender + +/hook/startup/proc/paiControllerSetup() + paiController = new /datum/paiController() + return 1 + + +/datum/paiController + var/inquirer = null + var/list/pai_candidates = list() + var/list/asked = list() + + var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] + +/datum/paiController/Topic(href, href_list[]) + if(href_list["download"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/obj/item/device/paicard/card = locate(href_list["device"]) + if(card.pai) + return + if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) + var/mob/living/silicon/pai/pai = new(card) + pai.key = candidate.key + paikeys |= pai.ckey + card.setPersonality(pai) + if(!candidate.name) + pai.SetName(pick(ninja_names)) + else + pai.SetName(candidate.name) + if(candidate.description) + pai.flavor_text = candidate.description + if(candidate.eye_color) + pai.eye_color = candidate.eye_color + card.screen_color = pai.eye_color + if(candidate.chassis) + pai.chassis = candidate.chassis + if(candidate.ouremotion) + card.setEmotion(candidate.ouremotion) + if(candidate.gender) + pai.gender = candidate.gender + pai.update_icon() + pai.real_name = pai.name + card.looking_for_personality = 0 + + if(pai.mind) update_antag_icons(pai.mind) + + pai_candidates -= candidate + usr << browse(null, "window=findPai") + + if(href_list["new"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/option = href_list["option"] + var/t = "" + + switch(option) + if("name") + t = sanitizeSafe(tgui_input_text(usr, "Enter a name for your pAI", "pAI Name", candidate.name, MAX_NAME_LEN), MAX_NAME_LEN) + if(t) + candidate.name = t + if("desc") + t = tgui_input_text(usr, "Enter a description for your pAI", "pAI Description", candidate.description, multiline = TRUE, prevent_enter = TRUE) + if(t) + candidate.description = sanitize(t) + if("role") + t = tgui_input_text(usr, "Enter a role for your pAI", "pAI Role", candidate.role) + if(t) + candidate.role = sanitize(t) + if("ooc") + t = tgui_input_text(usr, "Enter any OOC comments", "pAI OOC Comments", candidate.comments, multiline = TRUE, prevent_enter = TRUE) + if(t) + candidate.comments = sanitize(t) + if("save") + candidate.savefile_save(usr) + if("load") + candidate.savefile_load(usr) + //In case people have saved unsanitized stuff. + if(candidate.name) + candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN) + if(candidate.description) + candidate.description = sanitize(candidate.description) + if(candidate.role) + candidate.role = sanitize(candidate.role) + if(candidate.comments) + candidate.comments = sanitize(candidate.comments) + + if("submit") + if(candidate) + candidate.ready = 1 + for(var/obj/item/device/paicard/p in GLOB.all_pai_cards) //CHOMPedit: Explicit use of GLOB + if(p.looking_for_personality == 1) + p.alertUpdate() + usr << browse(null, "window=paiRecruit") + return + + recruitWindow(usr, href_list["allow_submit"] != "0") + +/datum/paiController/proc/recruitWindow(var/mob/M as mob, allowSubmit = 1) + var/datum/paiCandidate/candidate + for(var/datum/paiCandidate/c in pai_candidates) + if(!istype(c) || !istype(M)) + break + if(c.key == M.key) + candidate = c + if(!candidate) + candidate = new /datum/paiCandidate() + candidate.key = M.key + pai_candidates.Add(candidate) + + var/dat = "" + dat += {" + + "} + + dat += {" + + pAI Personality Configuration +

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

                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    Name:[candidate.name] 
                    What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
                    Description:[candidate.description] 
                    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] 
                    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] 
                    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.
                    +
                    + + + + + + + +
                    + Save Personality +
                    + Load Personality +

                    + "} + if(allowSubmit) + dat += {" + + +
                    Submit Personality

                    + "} + dat += {" + + "} + + M << browse(dat, "window=paiRecruit;size=580x580;") + +/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) + requestRecruits(user) + var/list/available = list() + for(var/datum/paiCandidate/c in paiController.pai_candidates) + if(c.ready) + var/found = 0 + for(var/mob/observer/dead/o in player_list) + if(o.key == c.key && o.MayRespawn()) + found = 1 + if(found) + available.Add(c) + var/dat = "" + + dat += {" + + + + + + + pAI Availability List

                    + "} + dat += "

                    Displaying available 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.

                    " + + for(var/datum/paiCandidate/c in available) + dat += {" + + + + + + + + + + + + + + + + + +
                    Name:[c.name]
                    Description:[c.description]
                    Preferred Role:[c.role]
                    OOC Comments:[c.comments]
                    + + +
                    Download [c.name] +
                    +
                    + "} + + dat += {" + + + "} + + user << browse(dat, "window=findPai") + + +/datum/paiController/proc/requestRecruits(var/mob/user) + inquirer = user + for(var/mob/observer/dead/O in player_list) + if(!O.MayRespawn()) + continue + if(jobban_isbanned(O, "pAI")) + continue + if(asked.Find(O.key)) + if(world.time < asked[O.key] + askDelay) + continue + else + asked.Remove(O.key) + if(O.client) + if(O.client.prefs.be_special & BE_PAI) + question(O.client) + +/datum/paiController/proc/question(var/client/C) + spawn(0) + if(!C) return + asked.Add(C.key) + asked[C.key] = world.time + + var/mob/ourmob = C.mob + if(ourmob) + var/time_till_respawn = ourmob.time_till_respawn() + if(time_till_respawn == -1 || time_till_respawn) + return + for(var/ourkey in paikeys) + if(ourkey == ourmob.ckey) + return + + var/response = tgui_alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", list("Yes", "No", "Never for this round")) + if(!C) return //handle logouts that happen whilst the alert is waiting for a response. + if(response == "Yes") + recruitWindow(C.mob) + else if (response == "Never for this round") + C.prefs.be_special ^= BE_PAI diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index a4f47f51eb..221dacf2f2 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -1,276 +1,276 @@ -// TODO: remove the robot.mmi and robot.cell variables and completely rely on the robot component system - -/datum/robot_component/var/name -/datum/robot_component/var/installed = 0 -/datum/robot_component/var/powered = 0 -/datum/robot_component/var/toggled = 1 -/datum/robot_component/var/brute_damage = 0 -/datum/robot_component/var/electronics_damage = 0 -/datum/robot_component/var/idle_usage = 0 // Amount of power used every MC tick. In joules. -/datum/robot_component/var/active_usage = 0 // Amount of power used for every action. Actions are module-specific. Actuator for each tile moved, etc. -/datum/robot_component/var/max_damage = 30 // HP of this component. -/datum/robot_component/var/mob/living/silicon/robot/owner - -// The actual device object that has to be installed for this. -/datum/robot_component/var/external_type = null - -// The wrapped device(e.g. radio), only set if external_type isn't null -/datum/robot_component/var/obj/item/wrapped = null - -/datum/robot_component/New(mob/living/silicon/robot/R) - src.owner = R - -/datum/robot_component/proc/install() -/datum/robot_component/proc/uninstall() - -/datum/robot_component/proc/destroy() - var/brokenstate = "broken" // Generic icon - if (istype(wrapped, /obj/item/robot_parts/robot_component)) - var/obj/item/robot_parts/robot_component/comp = wrapped - brokenstate = comp.icon_state_broken - if(wrapped) - qdel(wrapped) - - - wrapped = new/obj/item/broken_device - wrapped.icon_state = brokenstate // Module-specific broken icons! Yay! - - // The thing itself isn't there anymore, but some fried remains are. - installed = -1 - uninstall() - -/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge) - if(installed != 1) return - - brute_damage += brute - electronics_damage += electronics - - if(brute_damage + electronics_damage >= max_damage) destroy() - -/datum/robot_component/proc/heal_damage(brute, electronics) - if(installed != 1) - // If it's not installed, can't repair it. - return 0 - - brute_damage = max(0, brute_damage - brute) - electronics_damage = max(0, electronics_damage - electronics) - -/datum/robot_component/proc/is_powered() - return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (!idle_usage || powered) - -/datum/robot_component/proc/update_power_state() - if(toggled == 0) - powered = 0 - return - if(owner.cell && owner.cell.charge >= idle_usage) - owner.cell_use_power(idle_usage) - powered = 1 - else - powered = 0 - - -// ARMOUR -// Protects the cyborg from damage. Usually first module to be hit -// No power usage -/datum/robot_component/armour - name = "armour plating" - external_type = /obj/item/robot_parts/robot_component/armour - max_damage = 90 - -/datum/robot_component/armour/platform - name = "platform armour plating" - external_type = /obj/item/robot_parts/robot_component/armour_platform - max_damage = 140 - -// ACTUATOR -// Enables movement. -// Uses no power when idle. Uses 200J for each tile the cyborg moves. -/datum/robot_component/actuator - name = "actuator" - idle_usage = 0 - active_usage = 200 - external_type = /obj/item/robot_parts/robot_component/actuator - max_damage = 50 - - -//A fixed and much cleaner implementation of /tg/'s special snowflake code. -/datum/robot_component/actuator/is_powered() - return (installed == 1) && (brute_damage + electronics_damage < max_damage) - - -// POWER CELL -// Stores power (how unexpected..) -// No power usage -/datum/robot_component/cell - name = "power cell" - max_damage = 50 - -/datum/robot_component/cell/destroy() - ..() - owner.cell = null - - -// RADIO -// Enables radio communications -// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message. -/datum/robot_component/radio - name = "radio" - external_type = /obj/item/robot_parts/robot_component/radio - idle_usage = 15 //it's not actually possible to tell when we receive a message over our radio, so just use 10W every tick for passive listening - active_usage = 75 //transmit power - max_damage = 40 - - -// BINARY RADIO -// Enables binary communications with other cyborgs/AIs -// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message -/datum/robot_component/binary_communication - name = "binary communication device" - external_type = /obj/item/robot_parts/robot_component/binary_communication_device - idle_usage = 5 - active_usage = 25 - max_damage = 30 - - -// CAMERA -// Enables cyborg vision. Can also be remotely accessed via consoles. -// Uses 10J constantly -/datum/robot_component/camera - name = "camera" - external_type = /obj/item/robot_parts/robot_component/camera - idle_usage = 10 - max_damage = 40 - var/obj/machinery/camera/camera - -/datum/robot_component/camera/New(mob/living/silicon/robot/R) - ..() - camera = R.camera - -/datum/robot_component/camera/update_power_state() - ..() - if (camera) - camera.status = powered - -/datum/robot_component/camera/install() - if (camera) - camera.status = 1 - -/datum/robot_component/camera/uninstall() - if (camera) - camera.status = 0 - -/datum/robot_component/camera/destroy() - if (camera) - camera.status = 0 - -// SELF DIAGNOSIS MODULE -// Analyses cyborg's modules, providing damage readouts and basic information -// Uses 1kJ burst when analysis is done -/datum/robot_component/diagnosis_unit - name = "self-diagnosis unit" - active_usage = 1000 - external_type = /obj/item/robot_parts/robot_component/diagnosis_unit - max_damage = 30 - - - - -// HELPER STUFF - - - -// Initializes cyborg's components. Technically, adds default set of components to new borgs -/mob/living/silicon/robot/proc/initialize_components() - components["actuator"] = new/datum/robot_component/actuator(src) - components["radio"] = new/datum/robot_component/radio(src) - components["power cell"] = new/datum/robot_component/cell(src) - components["diagnosis unit"] = new/datum/robot_component/diagnosis_unit(src) - components["camera"] = new/datum/robot_component/camera(src) - components["comms"] = new/datum/robot_component/binary_communication(src) - components["armour"] = new/datum/robot_component/armour(src) - -// Checks if component is functioning -/mob/living/silicon/robot/proc/is_component_functioning(module_name) - var/datum/robot_component/C = components[module_name] - return C && C.installed == 1 && C.toggled && C.is_powered() - -// Returns component by it's string name -/mob/living/silicon/robot/proc/get_component(var/component_name) - var/datum/robot_component/C = components[component_name] - return C - - - -// COMPONENT OBJECTS - - - -// Component Objects -// These objects are visual representation of modules - -/obj/item/broken_device - name = "broken component" - icon = 'icons/obj/robot_component.dmi' - icon_state = "broken" - matter = list(MAT_STEEL = 1000) - -/obj/item/broken_device/random - var/list/possible_icons = list("binradio_broken", - "motor_broken", - "armor_broken", - "camera_broken", - "analyser_broken", - "radio_broken") - -/obj/item/broken_device/random/Initialize() - icon_state = pick(possible_icons) - -/obj/item/robot_parts/robot_component - icon = 'icons/obj/robot_component.dmi' - icon_state = "working" - var/brute = 0 - var/burn = 0 - var/icon_state_broken = "broken" - -/obj/item/robot_parts/robot_component/binary_communication_device - name = "binary communication device" - desc = "A module used for binary communications over encrypted frequencies, commonly used by synthetic robots." - icon_state = "binradio" - icon_state_broken = "binradio_broken" - -/obj/item/robot_parts/robot_component/actuator - name = "actuator" - desc = "A modular, hydraulic actuator used by exosuits and robots alike for movement and manipulation." - icon_state = "motor" - icon_state_broken = "motor_broken" - -/obj/item/robot_parts/robot_component/armour - name = "armour plating" - desc = "A pair of flexible, adaptable armor plates, used to protect the internals of robots." - icon_state = "armor" - icon_state_broken = "armor_broken" - -/obj/item/robot_parts/robot_component/armour_platform - name = "platform armour plating" - desc = "A pair of reinforced armor plates, used to protect the internals of robots." - icon_state = "armor" - icon_state_broken = "armor_broken" - color = COLOR_GRAY80 - -/obj/item/robot_parts/robot_component/camera - name = "camera" - desc = "A modified camera module used as a visual receptor for robots and exosuits, also serving as a relay for wireless video feed." - icon_state = "camera" - icon_state_broken = "camera_broken" - -/obj/item/robot_parts/robot_component/diagnosis_unit - name = "diagnosis unit" - desc = "An internal computer and sensors used by robots and exosuits to accurately diagnose any system discrepancies on their components." - icon_state = "analyser" - icon_state_broken = "analyser_broken" - -/obj/item/robot_parts/robot_component/radio - name = "radio" - desc = "A modular, multi-frequency radio used by robots and exosuits to enable communication systems. Comes with built-in subspace receivers." - icon_state = "radio" - icon_state_broken = "radio_broken" +// TODO: remove the robot.mmi and robot.cell variables and completely rely on the robot component system + +/datum/robot_component/var/name +/datum/robot_component/var/installed = 0 +/datum/robot_component/var/powered = 0 +/datum/robot_component/var/toggled = 1 +/datum/robot_component/var/brute_damage = 0 +/datum/robot_component/var/electronics_damage = 0 +/datum/robot_component/var/idle_usage = 0 // Amount of power used every MC tick. In joules. +/datum/robot_component/var/active_usage = 0 // Amount of power used for every action. Actions are module-specific. Actuator for each tile moved, etc. +/datum/robot_component/var/max_damage = 30 // HP of this component. +/datum/robot_component/var/mob/living/silicon/robot/owner + +// The actual device object that has to be installed for this. +/datum/robot_component/var/external_type = null + +// The wrapped device(e.g. radio), only set if external_type isn't null +/datum/robot_component/var/obj/item/wrapped = null + +/datum/robot_component/New(mob/living/silicon/robot/R) + src.owner = R + +/datum/robot_component/proc/install() +/datum/robot_component/proc/uninstall() + +/datum/robot_component/proc/destroy() + var/brokenstate = "broken" // Generic icon + if (istype(wrapped, /obj/item/robot_parts/robot_component)) + var/obj/item/robot_parts/robot_component/comp = wrapped + brokenstate = comp.icon_state_broken + if(wrapped) + qdel(wrapped) + + + wrapped = new/obj/item/broken_device + wrapped.icon_state = brokenstate // Module-specific broken icons! Yay! + + // The thing itself isn't there anymore, but some fried remains are. + installed = -1 + uninstall() + +/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge) + if(installed != 1) return + + brute_damage += brute + electronics_damage += electronics + + if(brute_damage + electronics_damage >= max_damage) destroy() + +/datum/robot_component/proc/heal_damage(brute, electronics) + if(installed != 1) + // If it's not installed, can't repair it. + return 0 + + brute_damage = max(0, brute_damage - brute) + electronics_damage = max(0, electronics_damage - electronics) + +/datum/robot_component/proc/is_powered() + return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (!idle_usage || powered) + +/datum/robot_component/proc/update_power_state() + if(toggled == 0) + powered = 0 + return + if(owner.cell && owner.cell.charge >= idle_usage) + owner.cell_use_power(idle_usage) + powered = 1 + else + powered = 0 + + +// ARMOUR +// Protects the cyborg from damage. Usually first module to be hit +// No power usage +/datum/robot_component/armour + name = "armour plating" + external_type = /obj/item/robot_parts/robot_component/armour + max_damage = 90 + +/datum/robot_component/armour/platform + name = "platform armour plating" + external_type = /obj/item/robot_parts/robot_component/armour_platform + max_damage = 140 + +// ACTUATOR +// Enables movement. +// Uses no power when idle. Uses 200J for each tile the cyborg moves. +/datum/robot_component/actuator + name = "actuator" + idle_usage = 0 + active_usage = 200 + external_type = /obj/item/robot_parts/robot_component/actuator + max_damage = 50 + + +//A fixed and much cleaner implementation of /tg/'s special snowflake code. +/datum/robot_component/actuator/is_powered() + return (installed == 1) && (brute_damage + electronics_damage < max_damage) + + +// POWER CELL +// Stores power (how unexpected..) +// No power usage +/datum/robot_component/cell + name = "power cell" + max_damage = 50 + +/datum/robot_component/cell/destroy() + ..() + owner.cell = null + + +// RADIO +// Enables radio communications +// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message. +/datum/robot_component/radio + name = "radio" + external_type = /obj/item/robot_parts/robot_component/radio + idle_usage = 15 //it's not actually possible to tell when we receive a message over our radio, so just use 10W every tick for passive listening + active_usage = 75 //transmit power + max_damage = 40 + + +// BINARY RADIO +// Enables binary communications with other cyborgs/AIs +// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message +/datum/robot_component/binary_communication + name = "binary communication device" + external_type = /obj/item/robot_parts/robot_component/binary_communication_device + idle_usage = 5 + active_usage = 25 + max_damage = 30 + + +// CAMERA +// Enables cyborg vision. Can also be remotely accessed via consoles. +// Uses 10J constantly +/datum/robot_component/camera + name = "camera" + external_type = /obj/item/robot_parts/robot_component/camera + idle_usage = 10 + max_damage = 40 + var/obj/machinery/camera/camera + +/datum/robot_component/camera/New(mob/living/silicon/robot/R) + ..() + camera = R.camera + +/datum/robot_component/camera/update_power_state() + ..() + if (camera) + camera.status = powered + +/datum/robot_component/camera/install() + if (camera) + camera.status = 1 + +/datum/robot_component/camera/uninstall() + if (camera) + camera.status = 0 + +/datum/robot_component/camera/destroy() + if (camera) + camera.status = 0 + +// SELF DIAGNOSIS MODULE +// Analyses cyborg's modules, providing damage readouts and basic information +// Uses 1kJ burst when analysis is done +/datum/robot_component/diagnosis_unit + name = "self-diagnosis unit" + active_usage = 1000 + external_type = /obj/item/robot_parts/robot_component/diagnosis_unit + max_damage = 30 + + + + +// HELPER STUFF + + + +// Initializes cyborg's components. Technically, adds default set of components to new borgs +/mob/living/silicon/robot/proc/initialize_components() + components["actuator"] = new/datum/robot_component/actuator(src) + components["radio"] = new/datum/robot_component/radio(src) + components["power cell"] = new/datum/robot_component/cell(src) + components["diagnosis unit"] = new/datum/robot_component/diagnosis_unit(src) + components["camera"] = new/datum/robot_component/camera(src) + components["comms"] = new/datum/robot_component/binary_communication(src) + components["armour"] = new/datum/robot_component/armour(src) + +// Checks if component is functioning +/mob/living/silicon/robot/proc/is_component_functioning(module_name) + var/datum/robot_component/C = components[module_name] + return C && C.installed == 1 && C.toggled && C.is_powered() + +// Returns component by it's string name +/mob/living/silicon/robot/proc/get_component(var/component_name) + var/datum/robot_component/C = components[component_name] + return C + + + +// COMPONENT OBJECTS + + + +// Component Objects +// These objects are visual representation of modules + +/obj/item/broken_device + name = "broken component" + icon = 'icons/obj/robot_component.dmi' + icon_state = "broken" + matter = list(MAT_STEEL = 1000) + +/obj/item/broken_device/random + var/list/possible_icons = list("binradio_broken", + "motor_broken", + "armor_broken", + "camera_broken", + "analyser_broken", + "radio_broken") + +/obj/item/broken_device/random/Initialize() + icon_state = pick(possible_icons) + +/obj/item/robot_parts/robot_component + icon = 'icons/obj/robot_component.dmi' + icon_state = "working" + var/brute = 0 + var/burn = 0 + var/icon_state_broken = "broken" + +/obj/item/robot_parts/robot_component/binary_communication_device + name = "binary communication device" + desc = "A module used for binary communications over encrypted frequencies, commonly used by synthetic robots." + icon_state = "binradio" + icon_state_broken = "binradio_broken" + +/obj/item/robot_parts/robot_component/actuator + name = "actuator" + desc = "A modular, hydraulic actuator used by exosuits and robots alike for movement and manipulation." + icon_state = "motor" + icon_state_broken = "motor_broken" + +/obj/item/robot_parts/robot_component/armour + name = "armour plating" + desc = "A pair of flexible, adaptable armor plates, used to protect the internals of robots." + icon_state = "armor" + icon_state_broken = "armor_broken" + +/obj/item/robot_parts/robot_component/armour_platform + name = "platform armour plating" + desc = "A pair of reinforced armor plates, used to protect the internals of robots." + icon_state = "armor" + icon_state_broken = "armor_broken" + color = COLOR_GRAY80 + +/obj/item/robot_parts/robot_component/camera + name = "camera" + desc = "A modified camera module used as a visual receptor for robots and exosuits, also serving as a relay for wireless video feed." + icon_state = "camera" + icon_state_broken = "camera_broken" + +/obj/item/robot_parts/robot_component/diagnosis_unit + name = "diagnosis unit" + desc = "An internal computer and sensors used by robots and exosuits to accurately diagnose any system discrepancies on their components." + icon_state = "analyser" + icon_state_broken = "analyser_broken" + +/obj/item/robot_parts/robot_component/radio + name = "radio" + desc = "A modular, multi-frequency radio used by robots and exosuits to enable communication systems. Comes with built-in subspace receivers." + icon_state = "radio" + icon_state_broken = "radio_broken" diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index 99529daed8..737c46884d 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -1,22 +1,22 @@ -/mob/living/silicon/robot/dust() - //Delete the MMI first so that it won't go popping out. - if(mmi) - qdel(mmi) - ..() - -/mob/living/silicon/robot/ash() - if(mmi) - qdel(mmi) - ..() - -/mob/living/silicon/robot/death(gibbed) - if(camera) - camera.status = 0 - if(module) - var/obj/item/weapon/gripper/G = locate(/obj/item/weapon/gripper) in module - if(G) G.drop_item() - var/obj/item/device/dogborg/sleeper/S = locate(/obj/item/device/dogborg/sleeper) in module //VOREStation edit. - if(S) S.go_out() //VOREStation edit. - remove_robot_verbs() - sql_report_cyborg_death(src) - ..(gibbed,"shudders violently for a moment, then becomes motionless, its eyes slowly darkening.") +/mob/living/silicon/robot/dust() + //Delete the MMI first so that it won't go popping out. + if(mmi) + qdel(mmi) + ..() + +/mob/living/silicon/robot/ash() + if(mmi) + qdel(mmi) + ..() + +/mob/living/silicon/robot/death(gibbed) + if(camera) + camera.status = 0 + if(module) + var/obj/item/weapon/gripper/G = locate(/obj/item/weapon/gripper) in module + if(G) G.drop_item() + var/obj/item/device/dogborg/sleeper/S = locate(/obj/item/device/dogborg/sleeper) in module //VOREStation edit. + if(S) S.go_out() //VOREStation edit. + remove_robot_verbs() + sql_report_cyborg_death(src) + ..(gibbed,"shudders violently for a moment, then becomes motionless, its eyes slowly darkening.") diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index ad4d3f6f8e..60a0bea5ab 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,39 +1,39 @@ -var/list/_robot_default_emotes = list( - /decl/emote/audible/clap, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/dance, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/glare, - /decl/emote/visible/look, - /decl/emote/visible/stare, - /decl/emote/visible/deathgasp_robot, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/synth, - /decl/emote/audible/synth/beep, - /decl/emote/audible/synth/bing, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/audible/synth/scary, - /decl/emote/audible/synth/dwoop, - /decl/emote/audible/synth/boop, - /decl/emote/audible/synth/robochirp, - /decl/emote/audible/synth/security, - /decl/emote/audible/synth/security/halt, - //VOREStation Add - /decl/emote/visible/mlem, - /decl/emote/visible/blep - //VOREStation Add End -) - -/mob/living/silicon/robot/get_available_emotes() - var/list/fulllist = global._robot_default_emotes.Copy() - fulllist |= _human_default_emotes - return fulllist +var/list/_robot_default_emotes = list( + /decl/emote/audible/clap, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/twitch, + /decl/emote/visible/twitch_v, + /decl/emote/visible/dance, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/glare, + /decl/emote/visible/look, + /decl/emote/visible/stare, + /decl/emote/visible/deathgasp_robot, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/synth, + /decl/emote/audible/synth/beep, + /decl/emote/audible/synth/bing, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/audible/synth/scary, + /decl/emote/audible/synth/dwoop, + /decl/emote/audible/synth/boop, + /decl/emote/audible/synth/robochirp, + /decl/emote/audible/synth/security, + /decl/emote/audible/synth/security/halt, + //VOREStation Add + /decl/emote/visible/mlem, + /decl/emote/visible/blep + //VOREStation Add End +) + +/mob/living/silicon/robot/get_available_emotes() + var/list/fulllist = global._robot_default_emotes.Copy() + fulllist |= _human_default_emotes + return fulllist diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index ab32caa4ea..f738bb8d4c 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,47 +1,47 @@ -/mob/living/silicon/robot/examine(mob/user) - var/custom_infix = custom_name ? ", [modtype][sprite_type ? " [sprite_type]" : ""] [braintype]" : "" - . = ..(user, infix = custom_infix) - - if (src.getBruteLoss()) - if (src.getBruteLoss() < 75) - . += "It looks slightly dented." - else - . += "It looks severely dented!" - if (src.getFireLoss()) - if (src.getFireLoss() < 75) - . += "It looks slightly charred." - else - . += "It looks severely burnt and heat-warped!" - - if(opened) - . += "Its cover is open and the power cell is [cell ? "installed" : "missing"]." - else - . += "Its cover is closed." - - if(!has_power) - . += "It appears to be running on backup power." - - switch(src.stat) - if(CONSCIOUS) - if(shell) - . += "It appears to be an [deployed ? "active" : "empty"] AI shell." - else if(!src.client) - . += "It appears to be in stand-by mode." //afk - if(UNCONSCIOUS) . += "It doesn't seem to be responding." - if(DEAD) . += "It looks completely unsalvageable." - . += attempt_vr(src,"examine_reagent_bellies",args) //CHOMP reagent bellies - - // VOREStation Edit: Start - . += attempt_vr(src,"examine_bellies_borg",args) //VOREStation Edit - // VOREStation Edit: End - - . += "*---------*" - - if(print_flavor_text()) . += "
                    [print_flavor_text()]" - - if (pose) - if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] - pose = addtext(pose,".") //Makes sure all emotes end with a period. - . += "
                    It is [pose]" //Extra
                    intentional - - user.showLaws(src) +/mob/living/silicon/robot/examine(mob/user) + var/custom_infix = custom_name ? ", [modtype][sprite_type ? " [sprite_type]" : ""] [braintype]" : "" + . = ..(user, infix = custom_infix) + + if (src.getBruteLoss()) + if (src.getBruteLoss() < 75) + . += "It looks slightly dented." + else + . += "It looks severely dented!" + if (src.getFireLoss()) + if (src.getFireLoss() < 75) + . += "It looks slightly charred." + else + . += "It looks severely burnt and heat-warped!" + + if(opened) + . += "Its cover is open and the power cell is [cell ? "installed" : "missing"]." + else + . += "Its cover is closed." + + if(!has_power) + . += "It appears to be running on backup power." + + switch(src.stat) + if(CONSCIOUS) + if(shell) + . += "It appears to be an [deployed ? "active" : "empty"] AI shell." + else if(!src.client) + . += "It appears to be in stand-by mode." //afk + if(UNCONSCIOUS) . += "It doesn't seem to be responding." + if(DEAD) . += "It looks completely unsalvageable." + . += attempt_vr(src,"examine_reagent_bellies",args) //CHOMP reagent bellies + + // VOREStation Edit: Start + . += attempt_vr(src,"examine_bellies_borg",args) //VOREStation Edit + // VOREStation Edit: End + + . += "*---------*" + + if(print_flavor_text()) . += "
                    [print_flavor_text()]" + + if (pose) + if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!] + pose = addtext(pose,".") //Makes sure all emotes end with a period. + . += "
                    It is [pose]" //Extra
                    intentional + + user.showLaws(src) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 0796b66bd8..de42bb8d17 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -1,274 +1,274 @@ -//These procs handle putting s tuff 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_hand() - return module_active - -/*-------TODOOOOOOOOOO--------*/ - -//Verbs used by hotkeys. -/mob/living/silicon/robot/verb/cmd_unequip_module() - set name = "unequip-module" - set hidden = 1 - uneq_active() - -/mob/living/silicon/robot/verb/cmd_toggle_module(module as num) - set name = "toggle-module" - set hidden = 1 - toggle_module(module) - -/mob/living/silicon/robot/proc/uneq_active() - if(isnull(module_active)) - return - if(module_state_1 == module_active) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode &= ~module_state_1:sight_mode - if (client) - client.screen -= module_state_1 - contents -= module_state_1 - module_active = null - module_state_1:loc = module //So it can be used again later - module_state_1 = null - inv1.icon_state = "inv1" - else if(module_state_2 == module_active) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode &= ~module_state_2:sight_mode - if (client) - client.screen -= module_state_2 - contents -= module_state_2 - module_active = null - module_state_2:loc = module - module_state_2 = null - inv2.icon_state = "inv2" - else if(module_state_3 == module_active) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode &= ~module_state_3:sight_mode - if (client) - client.screen -= module_state_3 - contents -= module_state_3 - module_active = null - module_state_3:loc = module - module_state_3 = null - inv3.icon_state = "inv3" - update_icon() - hud_used.update_robot_modules_display() - -/mob/living/silicon/robot/proc/uneq_all() - module_active = null - - if(module_state_1) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode &= ~module_state_1:sight_mode - if (client) - client.screen -= module_state_1 - contents -= module_state_1 - module_state_1:loc = module - module_state_1 = null - inv1.icon_state = "inv1" - if(module_state_2) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode &= ~module_state_2:sight_mode - if (client) - client.screen -= module_state_2 - contents -= module_state_2 - module_state_2:loc = module - module_state_2 = null - inv2.icon_state = "inv2" - if(module_state_3) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode &= ~module_state_3:sight_mode - if (client) - client.screen -= module_state_3 - contents -= module_state_3 - module_state_3:loc = module - module_state_3 = null - inv3.icon_state = "inv3" - update_icon() - -/mob/living/silicon/robot/proc/activated(obj/item/O) - if(module_state_1 == O) - return 1 - else if(module_state_2 == O) - return 1 - else if(module_state_3 == O) - return 1 - else - return 0 - -// This one takes an object's type instead of an instance, as above. -/mob/living/silicon/robot/proc/has_active_type(var/type_to_compare) - var/list/active_modules = list(module_state_1, module_state_2, module_state_3) - if(is_path_in_list(type_to_compare, active_modules)) - 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(var/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(var/module) //Module is 1-3 - if(module < 1 || module > 3) return 0 - - switch(module) - if(1) - if(module_state_1) - return 1 - if(2) - if(module_state_2) - return 1 - if(3) - if(module_state_3) - return 1 - return 0 - -//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_state_1 && module_active == module_state_1) - return 1 - else if(module_state_2 && module_active == module_state_2) - return 2 - else if(module_state_3 && module_active == module_state_3) - return 3 - - return 0 - -//select_module(module) - Selects the module slot specified by "module" -/mob/living/silicon/robot/proc/select_module(var/module) //Module is 1-3 - if(module < 1 || module > 3) return - - if(!module_active(module)) return - - switch(module) - if(1) - if(module_active != module_state_1) - inv1.icon_state = "inv1 +a" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3" - module_active = module_state_1 - return - if(2) - if(module_active != module_state_2) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2 +a" - inv3.icon_state = "inv3" - module_active = module_state_2 - return - if(3) - if(module_active != module_state_3) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3 +a" - module_active = module_state_3 - return - return - -//deselect_module(module) - Deselects the module slot specified by "module" -/mob/living/silicon/robot/proc/deselect_module(var/module) //Module is 1-3 - if(module < 1 || module > 3) return - - switch(module) - if(1) - if(module_active == module_state_1) - inv1.icon_state = "inv1" - module_active = null - return - if(2) - if(module_active == module_state_2) - inv2.icon_state = "inv2" - module_active = null - return - if(3) - if(module_active == module_state_3) - inv3.icon_state = "inv3" - module_active = null - return - return - -//toggle_module(module) - Toggles the selection of the module slot specified by "module". -/mob/living/silicon/robot/proc/toggle_module(var/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 = 2 - else - slot_num = slot_start + 1 - - while(slot_start != slot_num) //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 > 3) slot_num = 1 //Wrap around. - - return - -/mob/living/silicon/robot/proc/activate_module(var/obj/item/O) - if(!(locate(O) in src.module.modules) && !(locate(O) in src.module.emag)) - return - if(activated(O)) - to_chat(src, "Already activated") - return - if(!module_state_1) - module_state_1 = O - O.hud_layerise() - O.screen_loc = inv1.screen_loc - contents += O - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode |= module_state_1:sight_mode - else if(!module_state_2) - module_state_2 = O - O.hud_layerise() - O.screen_loc = inv2.screen_loc - contents += O - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode |= module_state_2:sight_mode - else if(!module_state_3) - module_state_3 = O - O.hud_layerise() - O.screen_loc = inv3.screen_loc - contents += O - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode |= module_state_3:sight_mode - else - to_chat(src, "You need to disable a module first!") - -/mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands. - W.loc = get_turf(src) - return 1 - -/mob/living/silicon/robot/is_holding_item_of_type(typepath) - for(var/obj/item/I in list(module_state_1, module_state_2, module_state_3)) - if(istype(I, typepath)) - return I - return FALSE - -// Returns a list of all held items in a borg's 'hands'. -/mob/living/silicon/robot/get_all_held_items() - . = list() - if(module_state_1) - . += module_state_1 - if(module_state_2) - . += module_state_2 - if(module_state_3) +//These procs handle putting s tuff 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_hand() + return module_active + +/*-------TODOOOOOOOOOO--------*/ + +//Verbs used by hotkeys. +/mob/living/silicon/robot/verb/cmd_unequip_module() + set name = "unequip-module" + set hidden = 1 + uneq_active() + +/mob/living/silicon/robot/verb/cmd_toggle_module(module as num) + set name = "toggle-module" + set hidden = 1 + toggle_module(module) + +/mob/living/silicon/robot/proc/uneq_active() + if(isnull(module_active)) + return + if(module_state_1 == module_active) + if(istype(module_state_1,/obj/item/borg/sight)) + sight_mode &= ~module_state_1:sight_mode + if (client) + client.screen -= module_state_1 + contents -= module_state_1 + module_active = null + module_state_1:loc = module //So it can be used again later + module_state_1 = null + inv1.icon_state = "inv1" + else if(module_state_2 == module_active) + if(istype(module_state_2,/obj/item/borg/sight)) + sight_mode &= ~module_state_2:sight_mode + if (client) + client.screen -= module_state_2 + contents -= module_state_2 + module_active = null + module_state_2:loc = module + module_state_2 = null + inv2.icon_state = "inv2" + else if(module_state_3 == module_active) + if(istype(module_state_3,/obj/item/borg/sight)) + sight_mode &= ~module_state_3:sight_mode + if (client) + client.screen -= module_state_3 + contents -= module_state_3 + module_active = null + module_state_3:loc = module + module_state_3 = null + inv3.icon_state = "inv3" + update_icon() + hud_used.update_robot_modules_display() + +/mob/living/silicon/robot/proc/uneq_all() + module_active = null + + if(module_state_1) + if(istype(module_state_1,/obj/item/borg/sight)) + sight_mode &= ~module_state_1:sight_mode + if (client) + client.screen -= module_state_1 + contents -= module_state_1 + module_state_1:loc = module + module_state_1 = null + inv1.icon_state = "inv1" + if(module_state_2) + if(istype(module_state_2,/obj/item/borg/sight)) + sight_mode &= ~module_state_2:sight_mode + if (client) + client.screen -= module_state_2 + contents -= module_state_2 + module_state_2:loc = module + module_state_2 = null + inv2.icon_state = "inv2" + if(module_state_3) + if(istype(module_state_3,/obj/item/borg/sight)) + sight_mode &= ~module_state_3:sight_mode + if (client) + client.screen -= module_state_3 + contents -= module_state_3 + module_state_3:loc = module + module_state_3 = null + inv3.icon_state = "inv3" + update_icon() + +/mob/living/silicon/robot/proc/activated(obj/item/O) + if(module_state_1 == O) + return 1 + else if(module_state_2 == O) + return 1 + else if(module_state_3 == O) + return 1 + else + return 0 + +// This one takes an object's type instead of an instance, as above. +/mob/living/silicon/robot/proc/has_active_type(var/type_to_compare) + var/list/active_modules = list(module_state_1, module_state_2, module_state_3) + if(is_path_in_list(type_to_compare, active_modules)) + 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(var/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(var/module) //Module is 1-3 + if(module < 1 || module > 3) return 0 + + switch(module) + if(1) + if(module_state_1) + return 1 + if(2) + if(module_state_2) + return 1 + if(3) + if(module_state_3) + return 1 + return 0 + +//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_state_1 && module_active == module_state_1) + return 1 + else if(module_state_2 && module_active == module_state_2) + return 2 + else if(module_state_3 && module_active == module_state_3) + return 3 + + return 0 + +//select_module(module) - Selects the module slot specified by "module" +/mob/living/silicon/robot/proc/select_module(var/module) //Module is 1-3 + if(module < 1 || module > 3) return + + if(!module_active(module)) return + + switch(module) + if(1) + if(module_active != module_state_1) + inv1.icon_state = "inv1 +a" + inv2.icon_state = "inv2" + inv3.icon_state = "inv3" + module_active = module_state_1 + return + if(2) + if(module_active != module_state_2) + inv1.icon_state = "inv1" + inv2.icon_state = "inv2 +a" + inv3.icon_state = "inv3" + module_active = module_state_2 + return + if(3) + if(module_active != module_state_3) + inv1.icon_state = "inv1" + inv2.icon_state = "inv2" + inv3.icon_state = "inv3 +a" + module_active = module_state_3 + return + return + +//deselect_module(module) - Deselects the module slot specified by "module" +/mob/living/silicon/robot/proc/deselect_module(var/module) //Module is 1-3 + if(module < 1 || module > 3) return + + switch(module) + if(1) + if(module_active == module_state_1) + inv1.icon_state = "inv1" + module_active = null + return + if(2) + if(module_active == module_state_2) + inv2.icon_state = "inv2" + module_active = null + return + if(3) + if(module_active == module_state_3) + inv3.icon_state = "inv3" + module_active = null + return + return + +//toggle_module(module) - Toggles the selection of the module slot specified by "module". +/mob/living/silicon/robot/proc/toggle_module(var/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 = 2 + else + slot_num = slot_start + 1 + + while(slot_start != slot_num) //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 > 3) slot_num = 1 //Wrap around. + + return + +/mob/living/silicon/robot/proc/activate_module(var/obj/item/O) + if(!(locate(O) in src.module.modules) && !(locate(O) in src.module.emag)) + return + if(activated(O)) + to_chat(src, "Already activated") + return + if(!module_state_1) + module_state_1 = O + O.hud_layerise() + O.screen_loc = inv1.screen_loc + contents += O + if(istype(module_state_1,/obj/item/borg/sight)) + sight_mode |= module_state_1:sight_mode + else if(!module_state_2) + module_state_2 = O + O.hud_layerise() + O.screen_loc = inv2.screen_loc + contents += O + if(istype(module_state_2,/obj/item/borg/sight)) + sight_mode |= module_state_2:sight_mode + else if(!module_state_3) + module_state_3 = O + O.hud_layerise() + O.screen_loc = inv3.screen_loc + contents += O + if(istype(module_state_3,/obj/item/borg/sight)) + sight_mode |= module_state_3:sight_mode + else + to_chat(src, "You need to disable a module first!") + +/mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands. + W.loc = get_turf(src) + return 1 + +/mob/living/silicon/robot/is_holding_item_of_type(typepath) + for(var/obj/item/I in list(module_state_1, module_state_2, module_state_3)) + if(istype(I, typepath)) + return I + return FALSE + +// Returns a list of all held items in a borg's 'hands'. +/mob/living/silicon/robot/get_all_held_items() + . = list() + if(module_state_1) + . += module_state_1 + if(module_state_2) + . += module_state_2 + if(module_state_3) . += module_state_3 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 5dce088c91..59a7160d4c 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -1,56 +1,56 @@ -/mob/living/silicon/robot/verb/cmd_show_laws() - set category = "Robot Commands" - set name = "Show Laws" - show_laws() - -/mob/living/silicon/robot/show_laws(var/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() - photosync() - to_chat(src, "Laws synced with AI, be sure to note any changes.") - // TODO: Update to new antagonist system. - if(mind && mind.special_role == "traitor" && mind.original == src) - to_chat(src, "Remember, your AI does NOT share or know about your law 0.") - else - to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") - lawupdate = FALSE - - 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.") - // TODO: Update to new antagonist system. - else if(mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai) - to_chat(who, "Remember, [connected_ai.name] is technically your master, but your objective comes first.") - 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/lawsync() - laws_sanity_check() - var/datum/ai_laws/master = connected_ai && lawupdate ? connected_ai.laws : null - if (master) - master.sync(src) - ..() - return - -/mob/living/silicon/robot/proc/robot_checklaws() - set category = "Robot Commands" - set name = "State Laws" - subsystem_law_manager() +/mob/living/silicon/robot/verb/cmd_show_laws() + set category = "Robot Commands" + set name = "Show Laws" + show_laws() + +/mob/living/silicon/robot/show_laws(var/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() + photosync() + to_chat(src, "Laws synced with AI, be sure to note any changes.") + // TODO: Update to new antagonist system. + if(mind && mind.special_role == "traitor" && mind.original == src) + to_chat(src, "Remember, your AI does NOT share or know about your law 0.") + else + to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") + lawupdate = FALSE + + 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.") + // TODO: Update to new antagonist system. + else if(mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai) + to_chat(who, "Remember, [connected_ai.name] is technically your master, but your objective comes first.") + 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/lawsync() + laws_sanity_check() + var/datum/ai_laws/master = connected_ai && lawupdate ? connected_ai.laws : null + if (master) + master.sync(src) + ..() + return + +/mob/living/silicon/robot/proc/robot_checklaws() + set category = "Robot Commands" + set name = "State Laws" + subsystem_law_manager() diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 3d11703e9f..d01043373f 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -1,19 +1,19 @@ -/mob/living/silicon/robot/Login() - ..() - regenerate_icons() - update_hud() - - show_laws(0) - - // Override the DreamSeeker macro with the borg version! - client.set_hotkeys_macro("borgmacro", "borghotkeymode") - - // Forces synths to select an icon relevant to their module - if(!icon_selected) - icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1 - choose_icon(icon_selection_tries) - - if(sprite_datum && module) - sprite_datum.do_equipment_glamour(module) - +/mob/living/silicon/robot/Login() + ..() + regenerate_icons() + update_hud() + + show_laws(0) + + // Override the DreamSeeker macro with the borg version! + client.set_hotkeys_macro("borgmacro", "borghotkeymode") + + // Forces synths to select an icon relevant to their module + if(!icon_selected) + icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1 + choose_icon(icon_selection_tries) + + if(sprite_datum && module) + sprite_datum.do_equipment_glamour(module) + plane_holder.set_vis(VIS_AUGMENTED, TRUE) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm index 24111683c9..775bc68b6e 100644 --- a/code/modules/mob/living/silicon/robot/photos.dm +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -1,20 +1,20 @@ -/mob/living/silicon/robot/proc/photosync() - var/obj/item/device/camera/siliconcam/master_cam = connected_ai ? connected_ai.aiCamera : null - if (!master_cam) - return - - var/synced = 0 - // Sync borg images to the master AI. - // We don't care about syncing the other way around - for(var/obj/item/weapon/photo/borg_photo in aiCamera.aipictures) - var/copied = 0 - for(var/obj/item/weapon/photo/ai_photo in master_cam.aipictures) - if(borg_photo.id == ai_photo.id) - copied = 1 - break - if(!copied) - master_cam.injectaialbum(borg_photo.copy(1), " (synced from [name])") - synced = 1 - - if(synced) - to_chat(src, "Images synced with AI. Local images will be retained in the case of loss of connection with the AI.") +/mob/living/silicon/robot/proc/photosync() + var/obj/item/device/camera/siliconcam/master_cam = connected_ai ? connected_ai.aiCamera : null + if (!master_cam) + return + + var/synced = 0 + // Sync borg images to the master AI. + // We don't care about syncing the other way around + for(var/obj/item/weapon/photo/borg_photo in aiCamera.aipictures) + var/copied = 0 + for(var/obj/item/weapon/photo/ai_photo in master_cam.aipictures) + if(borg_photo.id == ai_photo.id) + copied = 1 + break + if(!copied) + master_cam.injectaialbum(borg_photo.copy(1), " (synced from [name])") + synced = 1 + + if(synced) + to_chat(src, "Images synced with AI. Local images will be retained in the case of loss of connection with the AI.") diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index 890f1a8b37..6c46ecb2e8 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -1,110 +1,110 @@ -/mob/living/silicon - var/register_alarms = 1 - var/datum/tgui_module/alarm_monitor/all/robot/alarm_monitor - var/datum/tgui_module/atmos_control/robot/atmos_control - var/datum/tgui_module/crew_manifest/robot/crew_manifest - var/datum/tgui_module/crew_monitor/robot/crew_monitor - var/datum/tgui_module/law_manager/robot/law_manager - var/datum/tgui_module/power_monitor/robot/power_monitor - var/datum/tgui_module/rcon/robot/rcon - -/mob/living/silicon - var/list/silicon_subsystems = list( - /mob/living/silicon/proc/subsystem_alarm_monitor, - /mob/living/silicon/proc/subsystem_crew_manifest, - /mob/living/silicon/proc/subsystem_law_manager - ) - -/mob/living/silicon/ai - silicon_subsystems = list( - /mob/living/silicon/proc/subsystem_alarm_monitor, - /mob/living/silicon/proc/subsystem_atmos_control, - /mob/living/silicon/proc/subsystem_crew_manifest, - /mob/living/silicon/proc/subsystem_crew_monitor, - /mob/living/silicon/proc/subsystem_law_manager, - /mob/living/silicon/proc/subsystem_power_monitor, - /mob/living/silicon/proc/subsystem_rcon - ) - -/mob/living/silicon/robot/syndicate - register_alarms = 0 - silicon_subsystems = list(/mob/living/silicon/proc/subsystem_law_manager) - -/mob/living/silicon/proc/init_subsystems() - alarm_monitor = new(src) - atmos_control = new(src) - crew_manifest = new(src) - crew_monitor = new(src) - law_manager = new(src) - power_monitor = new(src) - rcon = new(src) - - if(!register_alarms) - return - - for(var/datum/alarm_handler/AH in SSalarm.all_handlers) - AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) - queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order - -/******************** -* Alarm Monitor * -********************/ -/mob/living/silicon/proc/subsystem_alarm_monitor() - set name = "Alarm Monitor" - set category = "Subystems" - - alarm_monitor.tgui_interact(usr) - -/******************** -* Atmos Control * -********************/ -/mob/living/silicon/proc/subsystem_atmos_control() - set category = "Subystems" - set name = "Atmospherics Control" - - atmos_control.tgui_interact(usr) - -/******************** -* Crew Manifest * -********************/ -/mob/living/silicon/proc/subsystem_crew_manifest() - set category = "Subystems" - set name = "Crew Manifest" - - crew_manifest.tgui_interact(usr) - -/******************** -* Crew Monitor * -********************/ -/mob/living/silicon/proc/subsystem_crew_monitor() - set category = "Subystems" - set name = "Crew Monitor" - - crew_monitor.tgui_interact(usr) - -/**************** -* Law Manager * -****************/ -/mob/living/silicon/proc/subsystem_law_manager() - set name = "Law Manager" - set category = "Subystems" - - law_manager.tgui_interact(usr) - -/******************** -* Power Monitor * -********************/ -/mob/living/silicon/proc/subsystem_power_monitor() - set category = "Subystems" - set name = "Power Monitor" - - power_monitor.tgui_interact(usr) - -/************ -* RCON * -************/ -/mob/living/silicon/proc/subsystem_rcon() - set category = "Subystems" - set name = "RCON" - - rcon.tgui_interact(usr) +/mob/living/silicon + var/register_alarms = 1 + var/datum/tgui_module/alarm_monitor/all/robot/alarm_monitor + var/datum/tgui_module/atmos_control/robot/atmos_control + var/datum/tgui_module/crew_manifest/robot/crew_manifest + var/datum/tgui_module/crew_monitor/robot/crew_monitor + var/datum/tgui_module/law_manager/robot/law_manager + var/datum/tgui_module/power_monitor/robot/power_monitor + var/datum/tgui_module/rcon/robot/rcon + +/mob/living/silicon + var/list/silicon_subsystems = list( + /mob/living/silicon/proc/subsystem_alarm_monitor, + /mob/living/silicon/proc/subsystem_crew_manifest, + /mob/living/silicon/proc/subsystem_law_manager + ) + +/mob/living/silicon/ai + silicon_subsystems = list( + /mob/living/silicon/proc/subsystem_alarm_monitor, + /mob/living/silicon/proc/subsystem_atmos_control, + /mob/living/silicon/proc/subsystem_crew_manifest, + /mob/living/silicon/proc/subsystem_crew_monitor, + /mob/living/silicon/proc/subsystem_law_manager, + /mob/living/silicon/proc/subsystem_power_monitor, + /mob/living/silicon/proc/subsystem_rcon + ) + +/mob/living/silicon/robot/syndicate + register_alarms = 0 + silicon_subsystems = list(/mob/living/silicon/proc/subsystem_law_manager) + +/mob/living/silicon/proc/init_subsystems() + alarm_monitor = new(src) + atmos_control = new(src) + crew_manifest = new(src) + crew_monitor = new(src) + law_manager = new(src) + power_monitor = new(src) + rcon = new(src) + + if(!register_alarms) + return + + for(var/datum/alarm_handler/AH in SSalarm.all_handlers) + AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) + queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order + +/******************** +* Alarm Monitor * +********************/ +/mob/living/silicon/proc/subsystem_alarm_monitor() + set name = "Alarm Monitor" + set category = "Subystems" + + alarm_monitor.tgui_interact(usr) + +/******************** +* Atmos Control * +********************/ +/mob/living/silicon/proc/subsystem_atmos_control() + set category = "Subystems" + set name = "Atmospherics Control" + + atmos_control.tgui_interact(usr) + +/******************** +* Crew Manifest * +********************/ +/mob/living/silicon/proc/subsystem_crew_manifest() + set category = "Subystems" + set name = "Crew Manifest" + + crew_manifest.tgui_interact(usr) + +/******************** +* Crew Monitor * +********************/ +/mob/living/silicon/proc/subsystem_crew_monitor() + set category = "Subystems" + set name = "Crew Monitor" + + crew_monitor.tgui_interact(usr) + +/**************** +* Law Manager * +****************/ +/mob/living/silicon/proc/subsystem_law_manager() + set name = "Law Manager" + set category = "Subystems" + + law_manager.tgui_interact(usr) + +/******************** +* Power Monitor * +********************/ +/mob/living/silicon/proc/subsystem_power_monitor() + set category = "Subystems" + set name = "Power Monitor" + + power_monitor.tgui_interact(usr) + +/************ +* RCON * +************/ +/mob/living/silicon/proc/subsystem_rcon() + set category = "Subystems" + set name = "RCON" + + rcon.tgui_interact(usr) diff --git a/code/modules/mob/living/simple_mob/donteatpets_vr.dm b/code/modules/mob/living/simple_mob/donteatpets_vr.dm index adf7d00976..98d6b0283f 100644 --- a/code/modules/mob/living/simple_mob/donteatpets_vr.dm +++ b/code/modules/mob/living/simple_mob/donteatpets_vr.dm @@ -1,60 +1,60 @@ -//I figured since it's basically always frowned upon to eat the station pets, it would probably be a good idea to just make that not possible normally. - -/mob/living/simple_mob/animal/passive/dog/corgi/Ian - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/dog/corgi/Lisa - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/dog/corgi/puppy - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/cat/runtime - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/cat/kitten - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/bird/parrot/poly - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/opossum/poppy - digestable = 0 - devourable = 0 - -/mob/living/carbon/human/monkey/punpun - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/snake/python/noodle - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/mouse/white/apple //She's a mouse living with a snake. Accidents happen. But don't gurg apple >:I - digestable = 0 - -/mob/living/simple_mob/animal/passive/fox/renault - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/crab/Coffee - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/sif/fluffy - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/slime/xenobio/rainbow/kendrick - digestable = 0 - devourable = 0 - -/mob/living/simple_mob/animal/passive/chick - digestable = 0 +//I figured since it's basically always frowned upon to eat the station pets, it would probably be a good idea to just make that not possible normally. + +/mob/living/simple_mob/animal/passive/dog/corgi/Ian + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/dog/corgi/Lisa + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/dog/corgi/puppy + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/cat/runtime + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/cat/kitten + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/bird/parrot/poly + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/opossum/poppy + digestable = 0 + devourable = 0 + +/mob/living/carbon/human/monkey/punpun + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/snake/python/noodle + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/mouse/white/apple //She's a mouse living with a snake. Accidents happen. But don't gurg apple >:I + digestable = 0 + +/mob/living/simple_mob/animal/passive/fox/renault + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/crab/Coffee + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/sif/fluffy + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/slime/xenobio/rainbow/kendrick + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/passive/chick + digestable = 0 devourable = 0 \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm index 3187efe699..cdea3c73aa 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm @@ -1,276 +1,276 @@ -// Borers are probably still going to be buggy as fuck, this is just bringing their mob defines up to the new system. -// IMO they're a relic of several ages we're long past, their code and their design showing this plainly, but removing them would -// make certain people Unhappy so here we are. They need a complete redesign but thats beyond the scope of the rewrite. - -/mob/living/simple_mob/animal/borer - name = "cortical borer" - desc = "A small, quivering sluglike creature." - icon_state = "brainslug" - item_state = "brainslug" - icon_living = "brainslug" - icon_dead = "brainslug_dead" - - response_help = "pokes" - response_disarm = "prods" - response_harm = "stomps on" - attacktext = list("nipped") - friendly = list("prods") - - organ_names = /decl/mob_organ_names/borer - - status_flags = CANPUSH - pass_flags = PASSTABLE - movement_cooldown = 1.5 - - universal_understand = TRUE - can_be_antagged = TRUE - - holder_type = /obj/item/weapon/holder/borer - ai_holder_type = null // This is player-controlled, always. - - var/mob/living/carbon/human/host = null // The humanoid host for the brain worm. - var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. - - var/roundstart = FALSE // If true, spawning won't try to pull a ghost. - var/antag = TRUE // If false, will avoid setting up objectives and events - - var/chemicals = 10 // A resource used for reproduction and powers. - var/max_chemicals = 250 // Max of said resource. - var/true_name = null // String used when speaking among other worms. - var/controlling = FALSE // Used in human death ceck. - var/docile = FALSE // Sugar can stop borers from acting. - - var/has_reproduced = FALSE - var/used_dominate // world.time when the dominate power was last used. - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/animal/borer/roundstart - roundstart = TRUE - -/mob/living/simple_mob/animal/borer/non_antag - antag = FALSE - -/mob/living/simple_mob/animal/borer/Login() - ..() - if(antag && mind) - borers.add_antagonist(mind) - -/mob/living/simple_mob/animal/borer/Initialize() - add_language("Cortical Link") - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" - - if(!roundstart && antag) - request_player() - - return ..() - -/mob/living/simple_mob/animal/borer/handle_special() - if(host && !stat && !host.stat) - // Handle docility. - if(host.reagents.has_reagent("sugar") && !docile) - var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility." - var/target = controlling ? host : src - to_chat(target, span("warning", message)) - docile = TRUE - - else if(docile) - var/message = "You shake off your lethargy as the sugar leaves your host's blood." - var/target = controlling ? host : src - to_chat(target, span("notice", message)) - docile = FALSE - - // Chem regen. - if(chemicals < max_chemicals) - chemicals++ - - // Control stuff. - if(controlling) - if(docile) - to_chat(host, span("warning", "You are feeling far too docile to continue controlling your host...")) - host.release_control() - return - - if(prob(5)) - host.adjustBrainLoss(0.1) - - if(prob(host.brainloss/20)) - host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") - -/mob/living/simple_mob/animal/borer/Stat() - ..() - if(client.statpanel == "Status") - statpanel("Status") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - stat("Chemicals", chemicals) - -/mob/living/simple_mob/animal/borer/proc/detatch() - if(!host || !controlling) - return - - if(istype(host, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = host - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - if(head) - head.implants -= src - - controlling = FALSE - - host.remove_language("Cortical Link") - host.verbs -= /mob/living/carbon/proc/release_control - host.verbs -= /mob/living/carbon/proc/punish_host - host.verbs -= /mob/living/carbon/proc/spawn_larvae - - if(host_brain) - // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. - // computer_id and IP are not updated magically on their own in offline mobs -walter0o - - // This shit need to die in a phoron fire. - - // host -> self - var/h2s_id = host.computer_id - var/h2s_ip= host.lastKnownIP - host.computer_id = null - host.lastKnownIP = null - - src.ckey = host.ckey - - if(!src.computer_id) - src.computer_id = h2s_id - - if(!host_brain.lastKnownIP) - src.lastKnownIP = h2s_ip - - // brain -> host - var/b2h_id = host_brain.computer_id - var/b2h_ip= host_brain.lastKnownIP - host_brain.computer_id = null - host_brain.lastKnownIP = null - - host.ckey = host_brain.ckey - - if(!host.computer_id) - host.computer_id = b2h_id - - if(!host.lastKnownIP) - host.lastKnownIP = b2h_ip - - qdel(host_brain) - - -/mob/living/simple_mob/animal/borer/proc/leave_host() - if(!host) - return - - if(host.mind) - borers.remove_antagonist(host.mind) - - forceMove(get_turf(host)) - - reset_view(null) - machine = null - - if(istype(host, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = host - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - if(head) - head.implants -= src - - host.reset_view(null) - host.machine = null - host = null - -/mob/living/simple_mob/animal/borer/proc/request_player() - var/datum/ghost_query/Q = new /datum/ghost_query/borer() - var/list/winner = Q.query() // This will sleep the proc for awhile. - if(winner.len) - var/mob/observer/dead/D = winner[1] - transfer_personality(D) - -/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate) - if(!candidate || !candidate.mind) - return - - src.mind = candidate.mind - candidate.mind.current = src - ckey = candidate.ckey - - if(mind) - mind.assigned_role = "Cortical Borer" - mind.special_role = "Cortical Borer" - - to_chat(src, span("notice", "You are a cortical borer! You are a brain slug that worms its way \ - into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \ - your host and your eventual spawn safe and warm.")) - to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.") - -/mob/living/simple_mob/animal/borer/cannot_use_vents() - return - -// This is awful but its literally say code. -/mob/living/simple_mob/animal/borer/say(var/message, var/datum/language/speaking = null, var/whispering = 0) - message = sanitize(message) - message = capitalize(message) - - if(!message) - return - - if(stat >= DEAD) - return say_dead(message) - else if(stat) - return - - if(client && client.prefs.muted & MUTE_IC) - to_chat(src, span("danger", "You cannot speak in IC (muted).")) - return - - if(copytext(message, 1, 2) == "*") - return emote(copytext(message, 2)) - - var/list/message_pieces = parse_languages(message) - for(var/datum/multilingual_say_piece/S in message_pieces) - if(S.speaking && S.speaking.flags & HIVEMIND) - S.speaking.broadcast(src, trim(copytext(message, 3)), src.true_name) - return - - if(!host) - if(chemicals >= 30) - to_chat(src, span("alien", "..You emit a psionic pulse with an encoded message..")) - var/list/nearby_mobs = list() - for(var/mob/living/LM in view(src, 1 + round(6 * (chemicals / max_chemicals)))) - if(LM == src) - continue - if(!LM.stat) - nearby_mobs += LM - var/mob/living/speaker - if(nearby_mobs.len) - speaker = tgui_input_list(usr, "Choose a target speaker:", "Target Choice", nearby_mobs) - if(speaker) - log_admin("[src.ckey]/([src]) tried to force [speaker] to say: [message]") - message_admins("[src.ckey]/([src]) tried to force [speaker] to say: [message]") - speaker.say("[message]") - return - to_chat(src, span("alien", "..But nothing heard it..")) - else - to_chat(src, span("warning", "You have no host to speak to.")) - return //No host, no audible speech. - - to_chat(src, "You drop words into [host]'s mind: \"[message]\"") - to_chat(host, "Your own thoughts speak: \"[message]\"") - - for(var/mob/M in player_list) - if(istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) - to_chat(M, "[src.true_name] whispers to [host], \"[message]\"") - - -/decl/mob_organ_names/borer - hit_zones = list("head", "central segment", "tail segment") +// Borers are probably still going to be buggy as fuck, this is just bringing their mob defines up to the new system. +// IMO they're a relic of several ages we're long past, their code and their design showing this plainly, but removing them would +// make certain people Unhappy so here we are. They need a complete redesign but thats beyond the scope of the rewrite. + +/mob/living/simple_mob/animal/borer + name = "cortical borer" + desc = "A small, quivering sluglike creature." + icon_state = "brainslug" + item_state = "brainslug" + icon_living = "brainslug" + icon_dead = "brainslug_dead" + + response_help = "pokes" + response_disarm = "prods" + response_harm = "stomps on" + attacktext = list("nipped") + friendly = list("prods") + + organ_names = /decl/mob_organ_names/borer + + status_flags = CANPUSH + pass_flags = PASSTABLE + movement_cooldown = 1.5 + + universal_understand = TRUE + can_be_antagged = TRUE + + holder_type = /obj/item/weapon/holder/borer + ai_holder_type = null // This is player-controlled, always. + + var/mob/living/carbon/human/host = null // The humanoid host for the brain worm. + var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. + + var/roundstart = FALSE // If true, spawning won't try to pull a ghost. + var/antag = TRUE // If false, will avoid setting up objectives and events + + var/chemicals = 10 // A resource used for reproduction and powers. + var/max_chemicals = 250 // Max of said resource. + var/true_name = null // String used when speaking among other worms. + var/controlling = FALSE // Used in human death ceck. + var/docile = FALSE // Sugar can stop borers from acting. + + var/has_reproduced = FALSE + var/used_dominate // world.time when the dominate power was last used. + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/animal/borer/roundstart + roundstart = TRUE + +/mob/living/simple_mob/animal/borer/non_antag + antag = FALSE + +/mob/living/simple_mob/animal/borer/Login() + ..() + if(antag && mind) + borers.add_antagonist(mind) + +/mob/living/simple_mob/animal/borer/Initialize() + add_language("Cortical Link") + + verbs += /mob/living/proc/ventcrawl + verbs += /mob/living/proc/hide + + true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" + + if(!roundstart && antag) + request_player() + + return ..() + +/mob/living/simple_mob/animal/borer/handle_special() + if(host && !stat && !host.stat) + // Handle docility. + if(host.reagents.has_reagent("sugar") && !docile) + var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility." + var/target = controlling ? host : src + to_chat(target, span("warning", message)) + docile = TRUE + + else if(docile) + var/message = "You shake off your lethargy as the sugar leaves your host's blood." + var/target = controlling ? host : src + to_chat(target, span("notice", message)) + docile = FALSE + + // Chem regen. + if(chemicals < max_chemicals) + chemicals++ + + // Control stuff. + if(controlling) + if(docile) + to_chat(host, span("warning", "You are feeling far too docile to continue controlling your host...")) + host.release_control() + return + + if(prob(5)) + host.adjustBrainLoss(0.1) + + if(prob(host.brainloss/20)) + host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") + +/mob/living/simple_mob/animal/borer/Stat() + ..() + if(client.statpanel == "Status") + statpanel("Status") + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + stat(null, eta_status) + stat("Chemicals", chemicals) + +/mob/living/simple_mob/animal/borer/proc/detatch() + if(!host || !controlling) + return + + if(istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = host + var/obj/item/organ/external/head = H.get_organ(BP_HEAD) + if(head) + head.implants -= src + + controlling = FALSE + + host.remove_language("Cortical Link") + host.verbs -= /mob/living/carbon/proc/release_control + host.verbs -= /mob/living/carbon/proc/punish_host + host.verbs -= /mob/living/carbon/proc/spawn_larvae + + if(host_brain) + // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. + // computer_id and IP are not updated magically on their own in offline mobs -walter0o + + // This shit need to die in a phoron fire. + + // host -> self + var/h2s_id = host.computer_id + var/h2s_ip= host.lastKnownIP + host.computer_id = null + host.lastKnownIP = null + + src.ckey = host.ckey + + if(!src.computer_id) + src.computer_id = h2s_id + + if(!host_brain.lastKnownIP) + src.lastKnownIP = h2s_ip + + // brain -> host + var/b2h_id = host_brain.computer_id + var/b2h_ip= host_brain.lastKnownIP + host_brain.computer_id = null + host_brain.lastKnownIP = null + + host.ckey = host_brain.ckey + + if(!host.computer_id) + host.computer_id = b2h_id + + if(!host.lastKnownIP) + host.lastKnownIP = b2h_ip + + qdel(host_brain) + + +/mob/living/simple_mob/animal/borer/proc/leave_host() + if(!host) + return + + if(host.mind) + borers.remove_antagonist(host.mind) + + forceMove(get_turf(host)) + + reset_view(null) + machine = null + + if(istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = host + var/obj/item/organ/external/head = H.get_organ(BP_HEAD) + if(head) + head.implants -= src + + host.reset_view(null) + host.machine = null + host = null + +/mob/living/simple_mob/animal/borer/proc/request_player() + var/datum/ghost_query/Q = new /datum/ghost_query/borer() + var/list/winner = Q.query() // This will sleep the proc for awhile. + if(winner.len) + var/mob/observer/dead/D = winner[1] + transfer_personality(D) + +/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate) + if(!candidate || !candidate.mind) + return + + src.mind = candidate.mind + candidate.mind.current = src + ckey = candidate.ckey + + if(mind) + mind.assigned_role = "Cortical Borer" + mind.special_role = "Cortical Borer" + + to_chat(src, span("notice", "You are a cortical borer! You are a brain slug that worms its way \ + into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \ + your host and your eventual spawn safe and warm.")) + to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.") + +/mob/living/simple_mob/animal/borer/cannot_use_vents() + return + +// This is awful but its literally say code. +/mob/living/simple_mob/animal/borer/say(var/message, var/datum/language/speaking = null, var/whispering = 0) + message = sanitize(message) + message = capitalize(message) + + if(!message) + return + + if(stat >= DEAD) + return say_dead(message) + else if(stat) + return + + if(client && client.prefs.muted & MUTE_IC) + to_chat(src, span("danger", "You cannot speak in IC (muted).")) + return + + if(copytext(message, 1, 2) == "*") + return emote(copytext(message, 2)) + + var/list/message_pieces = parse_languages(message) + for(var/datum/multilingual_say_piece/S in message_pieces) + if(S.speaking && S.speaking.flags & HIVEMIND) + S.speaking.broadcast(src, trim(copytext(message, 3)), src.true_name) + return + + if(!host) + if(chemicals >= 30) + to_chat(src, span("alien", "..You emit a psionic pulse with an encoded message..")) + var/list/nearby_mobs = list() + for(var/mob/living/LM in view(src, 1 + round(6 * (chemicals / max_chemicals)))) + if(LM == src) + continue + if(!LM.stat) + nearby_mobs += LM + var/mob/living/speaker + if(nearby_mobs.len) + speaker = tgui_input_list(usr, "Choose a target speaker:", "Target Choice", nearby_mobs) + if(speaker) + log_admin("[src.ckey]/([src]) tried to force [speaker] to say: [message]") + message_admins("[src.ckey]/([src]) tried to force [speaker] to say: [message]") + speaker.say("[message]") + return + to_chat(src, span("alien", "..But nothing heard it..")) + else + to_chat(src, span("warning", "You have no host to speak to.")) + return //No host, no audible speech. + + to_chat(src, "You drop words into [host]'s mind: \"[message]\"") + to_chat(host, "Your own thoughts speak: \"[message]\"") + + for(var/mob/M in player_list) + if(istype(M, /mob/new_player)) + continue + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + to_chat(M, "[src.true_name] whispers to [host], \"[message]\"") + + +/decl/mob_organ_names/borer + hit_zones = list("head", "central segment", "tail segment") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm index 7ff84ff697..8fba024af5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm @@ -1,56 +1,56 @@ -//Look Sir, free crabs! -/mob/living/simple_mob/animal/passive/crab - name = "crab" - desc = "A hard-shelled crustacean. Seems quite content to lounge around all the time." - tt_desc = "E Cancer bellianus" - faction = "crabs" - - icon_state = "crab" - icon_living = "crab" - icon_dead = "crab_dead" - - mob_size = MOB_SMALL - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stomps" - friendly = "pinches" - - organ_names = /decl/mob_organ_names/crab - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat - meat_amount = 3 - - say_list_type = /datum/say_list/crab - -//COFFEE! SQUEEEEEEEEE! -/mob/living/simple_mob/animal/passive/crab/Coffee - name = "Coffee" - real_name = "Coffee" - desc = "It's Coffee, the other pet!" - -// Sif! - -/datum/category_item/catalogue/fauna/sif_crab - name = "Sivian Fauna - Shelf Crab" - desc = "Classification: S Ocypode glacian\ -

                    \ - A small crustacean sometimes considered a pest to Sivian fisheries, \ - as the creatures often tend to ignore non-native fish species when feeding. This \ - results in an unfortunate advantage for invasive species. \ -
                    \ - Otherwise, these animals are enjoyed as a reliable source of high-grade meat." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/passive/crab/sif - icon = 'icons/mob/fish.dmi' - tt_desc = "S Ocypode glacian" - - catalogue_data = list(/datum/category_item/catalogue/fauna/sif_crab) - -/mob/living/simple_mob/animal/passive/crab/sif/Initialize() - . = ..() - adjust_scale(rand(5,12) / 10) - -/decl/mob_organ_names/crab +//Look Sir, free crabs! +/mob/living/simple_mob/animal/passive/crab + name = "crab" + desc = "A hard-shelled crustacean. Seems quite content to lounge around all the time." + tt_desc = "E Cancer bellianus" + faction = "crabs" + + icon_state = "crab" + icon_living = "crab" + icon_dead = "crab_dead" + + mob_size = MOB_SMALL + + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "stomps" + friendly = "pinches" + + organ_names = /decl/mob_organ_names/crab + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat + meat_amount = 3 + + say_list_type = /datum/say_list/crab + +//COFFEE! SQUEEEEEEEEE! +/mob/living/simple_mob/animal/passive/crab/Coffee + name = "Coffee" + real_name = "Coffee" + desc = "It's Coffee, the other pet!" + +// Sif! + +/datum/category_item/catalogue/fauna/sif_crab + name = "Sivian Fauna - Shelf Crab" + desc = "Classification: S Ocypode glacian\ +

                    \ + A small crustacean sometimes considered a pest to Sivian fisheries, \ + as the creatures often tend to ignore non-native fish species when feeding. This \ + results in an unfortunate advantage for invasive species. \ +
                    \ + Otherwise, these animals are enjoyed as a reliable source of high-grade meat." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/passive/crab/sif + icon = 'icons/mob/fish.dmi' + tt_desc = "S Ocypode glacian" + + catalogue_data = list(/datum/category_item/catalogue/fauna/sif_crab) + +/mob/living/simple_mob/animal/passive/crab/sif/Initialize() + . = ..() + adjust_scale(rand(5,12) / 10) + +/decl/mob_organ_names/crab hit_zones = list("cephalothorax", "abdomen", "left walking legs", "right walking legs", "left swimming legs", "right swimming legs", "left pincer", "right pincer") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm index f21bf8db1f..3b0695afbb 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm @@ -1,328 +1,328 @@ -// Different types of fish! They are all subtypes of this tho -/datum/category_item/catalogue/fauna/invasive_fish - name = "Invasive Fauna - Fish" - desc = "This fish is considered an invasive species according \ - to Sivian wildlife regulations. Removal or relocation is advised." - value = CATALOGUER_REWARD_TRIVIAL - -/mob/living/simple_mob/animal/passive/fish - name = "fish" - desc = "Its a fishy. No touchy fishy." - icon = 'icons/mob/fish.dmi' - item_state = "fish" - - catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish) - - mob_size = MOB_SMALL - // So fish are actually underwater. - plane = TURF_PLANE - layer = UNDERWATER_LAYER - - organ_names = /decl/mob_organ_names/fish - - holder_type = /obj/item/weapon/holder/fish - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish - meat_amount = 3 - - // By default they can be in any water turf. Subtypes might restrict to deep/shallow etc - var/global/list/suitable_turf_types = list( - /turf/simulated/floor/beach/water, - /turf/simulated/floor/beach/coastline, - /turf/simulated/floor/holofloor/beach/water, - /turf/simulated/floor/holofloor/beach/coastline, - /turf/simulated/floor/water - ) - - var/randomize_location = TRUE - -/mob/living/simple_mob/animal/passive/fish/Initialize() - . = ..() - - if(!default_pixel_x && randomize_location) - default_pixel_x = rand(-12, 12) - - if(!default_pixel_y && randomize_location) - default_pixel_y = rand(-6, 10) - -// Makes the AI unable to willingly go on land. -/mob/living/simple_mob/animal/passive/fish/IMove(turf/newloc, safety = TRUE) - if(is_type_in_list(newloc, suitable_turf_types)) - return ..() // Procede as normal. - return MOVEMENT_FAILED // Don't leave the water! - -// Take damage if we are not in water -/mob/living/simple_mob/animal/passive/fish/handle_breathing() - if(istype(loc, /obj/item/glass_jar/fish)) - var/obj/item/glass_jar/fish/F = loc - if(F.filled) - return - - var/turf/T = get_turf(src) - if(T && !is_type_in_list(T, suitable_turf_types)) - if(prob(50)) - say(pick("Blub", "Glub", "Burble")) - adjustBruteLoss(unsuitable_atoms_damage) - -// Subtypes. -/mob/living/simple_mob/animal/passive/fish/bass - name = "bass" - tt_desc = "E Micropterus notius" - icon_state = "bass-swim" - icon_living = "bass-swim" - icon_dead = "bass-dead" - -/mob/living/simple_mob/animal/passive/fish/trout - name = "trout" - tt_desc = "E Salmo trutta" - icon_state = "trout-swim" - icon_living = "trout-swim" - icon_dead = "trout-dead" - -/mob/living/simple_mob/animal/passive/fish/salmon - name = "salmon" - tt_desc = "E Oncorhynchus nerka" - icon_state = "salmon-swim" - icon_living = "salmon-swim" - icon_dead = "salmon-dead" - -/mob/living/simple_mob/animal/passive/fish/perch - name = "perch" - tt_desc = "E Perca flavescens" - icon_state = "perch-swim" - icon_living = "perch-swim" - icon_dead = "perch-dead" - -/mob/living/simple_mob/animal/passive/fish/pike - name = "pike" - tt_desc = "E Esox aquitanicus" - icon_state = "pike-swim" - icon_living = "pike-swim" - icon_dead = "pike-dead" - -/mob/living/simple_mob/animal/passive/fish/koi - name = "koi" - tt_desc = "E Cyprinus rubrofuscus" - icon_state = "koi-swim" - icon_living = "koi-swim" - icon_dead = "koi-dead" - -/datum/category_item/catalogue/fauna/javelin - name = "Sivian Fauna - Javelin Shark" - desc = "Classification: S Cetusan minimalix\ -

                    \ - A small breed of fatty shark native to the waters near the Ullran Expanse.\ - The creatures are not known to attack humans or larger animals, possibly \ - due to their size. It is speculated that they are actually scavengers, \ - as they are most commonly found near the gulf floor. \ -
                    \ - The Javelin's reproductive cycle only recurs between three and four \ - Sivian years. \ -
                    \ - These creatures are considered a protected species, and thus require an \ - up-to-date license to be hunted." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/passive/fish/javelin - name = "javelin" - tt_desc = "S Cetusan minimalix" - icon_state = "javelin-swim" - icon_living = "javelin-swim" - icon_dead = "javelin-dead" - - catalogue_data = list(/datum/category_item/catalogue/fauna/javelin) - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif - -/datum/category_item/catalogue/fauna/icebass - name = "Sivian Fauna - Glitter Bass" - desc = "Classification: X Micropterus notius crotux\ -

                    \ - Initially a genetically engineered hybrid of the common Earth bass and \ - the Sivian Rock-Fish. These were designed to deal with the invasive \ - fish species, however to their creators' dismay, they instead \ - began to form their own passive niche. \ -
                    \ - Due to the brilliant reflective scales earning them their name, the \ - animals pose a specific issue for Sivian animals relying on \ - bioluminesence to aid in their hunt. \ -
                    \ - Despite their beauty, they are considered an invasive species." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/passive/fish/icebass - name = "glitter bass" - tt_desc = "X Micropterus notius crotux" - icon_state = "sifbass-swim" - icon_living = "sifbass-swim" - icon_dead = "sifbass-dead" - - catalogue_data = list(/datum/category_item/catalogue/fauna/icebass) - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif - - var/max_red = 150 - var/min_red = 50 - - var/max_blue = 255 - var/min_blue = 50 - - var/max_green = 150 - var/min_green = 50 - - var/dorsal_color = "#FFFFFF" - var/belly_color = "#FFFFFF" - - var/image/dorsal_image - var/image/belly_image - -/mob/living/simple_mob/animal/passive/fish/icebass/Initialize() - . = ..() - dorsal_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) - belly_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) - update_icon() - -/mob/living/simple_mob/animal/passive/fish/icebass/update_icon() - cut_overlays() - ..() - - if(!dorsal_image) - dorsal_image = image(icon, "[icon_state]_mask-body") - if(!belly_image) - belly_image = image(icon, "[icon_state]_mask-belly") - - dorsal_image.icon_state = "[icon_state]_mask-body" - belly_image.icon_state = "[icon_state]_mask-belly" - - dorsal_image.color = dorsal_color - belly_image.color = belly_color - - add_overlay(dorsal_image) - add_overlay(belly_image) - -/datum/category_item/catalogue/fauna/rockfish - name = "Sivian Fauna - Rock Puffer" - desc = "Classification: S Tetraodontidae scopulix\ -

                    \ - A species strangely resembling the puffer-fish of Earth. These \ - creatures do not use toxic spines to protect themselves, instead \ - utilizing an incredibly durable exoskeleton that is molded by the \ - expansion of its ventral fluid bladders. \ -
                    \ - Rock Puffers or 'Rock-fish' are often host to smaller creatures which \ - maneuver their way into the gap between the fish's body and shell. \ -
                    \ - The species is also capable of pulling its vibrantly colored head into \ - the safer confines of its shell, the action being utilized in their \ - attempts to find a mate." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/passive/fish/rockfish - name = "rock-fish" - tt_desc = "S Tetraodontidae scopulix" - icon_state = "rockfish-swim" - icon_living = "rockfish-swim" - icon_dead = "rockfish-dead" - - catalogue_data = list(/datum/category_item/catalogue/fauna/rockfish) - - armor = list( - "melee" = 90, - "bullet" = 50, - "laser" = -15, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100) - - var/max_red = 255 - var/min_red = 50 - - var/max_blue = 255 - var/min_blue = 50 - - var/max_green = 255 - var/min_green = 50 - - var/head_color = "#FFFFFF" - - var/image/head_image - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif - -/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize() - . = ..() - head_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) - update_icon() - -/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon() - cut_overlays() - ..() - if(!head_image) - head_image = image(icon, "[icon_state]_mask") - - head_image.icon_state = "[icon_state]_mask" - - head_image.color = head_color - - add_overlay(head_image) - -/datum/category_item/catalogue/fauna/solarfish - name = "Sivian Fauna - Solar Fin" - desc = "Classification: S Exocoetidae solarin\ -

                    \ - An incredibly rare species of Sivian fish.\ - The solar-fin missile fish is a specialized omnivore capable of \ - catching insects or small birds venturing too close to the water's \ - surface. \ -
                    \ - The glimmering fins of the solar-fin are actually biofluorescent, \ - 'charged' by the creature basking at the surface of the water, most \ - commonly by the edge of an ice-shelf, as a rapid means of cover. \ -
                    \ - These creatures are considered a protected species, and thus require an \ - up-to-date license to be hunted." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/animal/passive/fish/solarfish - name = "sun-fin" - tt_desc = "S Exocoetidae solarin" - icon_state = "solarfin-swim" - icon_living = "solarfin-swim" - icon_dead = "solarfin-dead" - - catalogue_data = list(/datum/category_item/catalogue/fauna/solarfish) - - has_eye_glow = TRUE - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif - -/datum/category_item/catalogue/fauna/murkin - name = "Sivian Fauna - Murkfish" - desc = "Classification: S Perca lutux\ -

                    \ - A small, Sivian fish most known for its bland-ness.\ -
                    \ - The species is incredibly close in appearance to the Earth \ - perch, aside from its incredibly tall dorsal fin. The animals use \ - the fin to assess the wind direction while near the surface. \ -
                    \ - The murkfish earns its name from the fact its dense meat tastes like mud \ - thanks to a specially formed protein, most likely an adaptation to \ - protect the species from predation." - value = CATALOGUER_REWARD_TRIVIAL - -/mob/living/simple_mob/animal/passive/fish/murkin - name = "murkin" - tt_desc = "S Perca lutux" - - icon_state = "murkin-swim" - icon_living = "murkin-swim" - icon_dead = "murkin-dead" - - catalogue_data = list(/datum/category_item/catalogue/fauna/murkin) - - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish - -/decl/mob_organ_names/fish - hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin") +// Different types of fish! They are all subtypes of this tho +/datum/category_item/catalogue/fauna/invasive_fish + name = "Invasive Fauna - Fish" + desc = "This fish is considered an invasive species according \ + to Sivian wildlife regulations. Removal or relocation is advised." + value = CATALOGUER_REWARD_TRIVIAL + +/mob/living/simple_mob/animal/passive/fish + name = "fish" + desc = "Its a fishy. No touchy fishy." + icon = 'icons/mob/fish.dmi' + item_state = "fish" + + catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish) + + mob_size = MOB_SMALL + // So fish are actually underwater. + plane = TURF_PLANE + layer = UNDERWATER_LAYER + + organ_names = /decl/mob_organ_names/fish + + holder_type = /obj/item/weapon/holder/fish + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish + meat_amount = 3 + + // By default they can be in any water turf. Subtypes might restrict to deep/shallow etc + var/global/list/suitable_turf_types = list( + /turf/simulated/floor/beach/water, + /turf/simulated/floor/beach/coastline, + /turf/simulated/floor/holofloor/beach/water, + /turf/simulated/floor/holofloor/beach/coastline, + /turf/simulated/floor/water + ) + + var/randomize_location = TRUE + +/mob/living/simple_mob/animal/passive/fish/Initialize() + . = ..() + + if(!default_pixel_x && randomize_location) + default_pixel_x = rand(-12, 12) + + if(!default_pixel_y && randomize_location) + default_pixel_y = rand(-6, 10) + +// Makes the AI unable to willingly go on land. +/mob/living/simple_mob/animal/passive/fish/IMove(turf/newloc, safety = TRUE) + if(is_type_in_list(newloc, suitable_turf_types)) + return ..() // Procede as normal. + return MOVEMENT_FAILED // Don't leave the water! + +// Take damage if we are not in water +/mob/living/simple_mob/animal/passive/fish/handle_breathing() + if(istype(loc, /obj/item/glass_jar/fish)) + var/obj/item/glass_jar/fish/F = loc + if(F.filled) + return + + var/turf/T = get_turf(src) + if(T && !is_type_in_list(T, suitable_turf_types)) + if(prob(50)) + say(pick("Blub", "Glub", "Burble")) + adjustBruteLoss(unsuitable_atoms_damage) + +// Subtypes. +/mob/living/simple_mob/animal/passive/fish/bass + name = "bass" + tt_desc = "E Micropterus notius" + icon_state = "bass-swim" + icon_living = "bass-swim" + icon_dead = "bass-dead" + +/mob/living/simple_mob/animal/passive/fish/trout + name = "trout" + tt_desc = "E Salmo trutta" + icon_state = "trout-swim" + icon_living = "trout-swim" + icon_dead = "trout-dead" + +/mob/living/simple_mob/animal/passive/fish/salmon + name = "salmon" + tt_desc = "E Oncorhynchus nerka" + icon_state = "salmon-swim" + icon_living = "salmon-swim" + icon_dead = "salmon-dead" + +/mob/living/simple_mob/animal/passive/fish/perch + name = "perch" + tt_desc = "E Perca flavescens" + icon_state = "perch-swim" + icon_living = "perch-swim" + icon_dead = "perch-dead" + +/mob/living/simple_mob/animal/passive/fish/pike + name = "pike" + tt_desc = "E Esox aquitanicus" + icon_state = "pike-swim" + icon_living = "pike-swim" + icon_dead = "pike-dead" + +/mob/living/simple_mob/animal/passive/fish/koi + name = "koi" + tt_desc = "E Cyprinus rubrofuscus" + icon_state = "koi-swim" + icon_living = "koi-swim" + icon_dead = "koi-dead" + +/datum/category_item/catalogue/fauna/javelin + name = "Sivian Fauna - Javelin Shark" + desc = "Classification: S Cetusan minimalix\ +

                    \ + A small breed of fatty shark native to the waters near the Ullran Expanse.\ + The creatures are not known to attack humans or larger animals, possibly \ + due to their size. It is speculated that they are actually scavengers, \ + as they are most commonly found near the gulf floor. \ +
                    \ + The Javelin's reproductive cycle only recurs between three and four \ + Sivian years. \ +
                    \ + These creatures are considered a protected species, and thus require an \ + up-to-date license to be hunted." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/passive/fish/javelin + name = "javelin" + tt_desc = "S Cetusan minimalix" + icon_state = "javelin-swim" + icon_living = "javelin-swim" + icon_dead = "javelin-dead" + + catalogue_data = list(/datum/category_item/catalogue/fauna/javelin) + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif + +/datum/category_item/catalogue/fauna/icebass + name = "Sivian Fauna - Glitter Bass" + desc = "Classification: X Micropterus notius crotux\ +

                    \ + Initially a genetically engineered hybrid of the common Earth bass and \ + the Sivian Rock-Fish. These were designed to deal with the invasive \ + fish species, however to their creators' dismay, they instead \ + began to form their own passive niche. \ +
                    \ + Due to the brilliant reflective scales earning them their name, the \ + animals pose a specific issue for Sivian animals relying on \ + bioluminesence to aid in their hunt. \ +
                    \ + Despite their beauty, they are considered an invasive species." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/passive/fish/icebass + name = "glitter bass" + tt_desc = "X Micropterus notius crotux" + icon_state = "sifbass-swim" + icon_living = "sifbass-swim" + icon_dead = "sifbass-dead" + + catalogue_data = list(/datum/category_item/catalogue/fauna/icebass) + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif + + var/max_red = 150 + var/min_red = 50 + + var/max_blue = 255 + var/min_blue = 50 + + var/max_green = 150 + var/min_green = 50 + + var/dorsal_color = "#FFFFFF" + var/belly_color = "#FFFFFF" + + var/image/dorsal_image + var/image/belly_image + +/mob/living/simple_mob/animal/passive/fish/icebass/Initialize() + . = ..() + dorsal_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) + belly_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) + update_icon() + +/mob/living/simple_mob/animal/passive/fish/icebass/update_icon() + cut_overlays() + ..() + + if(!dorsal_image) + dorsal_image = image(icon, "[icon_state]_mask-body") + if(!belly_image) + belly_image = image(icon, "[icon_state]_mask-belly") + + dorsal_image.icon_state = "[icon_state]_mask-body" + belly_image.icon_state = "[icon_state]_mask-belly" + + dorsal_image.color = dorsal_color + belly_image.color = belly_color + + add_overlay(dorsal_image) + add_overlay(belly_image) + +/datum/category_item/catalogue/fauna/rockfish + name = "Sivian Fauna - Rock Puffer" + desc = "Classification: S Tetraodontidae scopulix\ +

                    \ + A species strangely resembling the puffer-fish of Earth. These \ + creatures do not use toxic spines to protect themselves, instead \ + utilizing an incredibly durable exoskeleton that is molded by the \ + expansion of its ventral fluid bladders. \ +
                    \ + Rock Puffers or 'Rock-fish' are often host to smaller creatures which \ + maneuver their way into the gap between the fish's body and shell. \ +
                    \ + The species is also capable of pulling its vibrantly colored head into \ + the safer confines of its shell, the action being utilized in their \ + attempts to find a mate." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/passive/fish/rockfish + name = "rock-fish" + tt_desc = "S Tetraodontidae scopulix" + icon_state = "rockfish-swim" + icon_living = "rockfish-swim" + icon_dead = "rockfish-dead" + + catalogue_data = list(/datum/category_item/catalogue/fauna/rockfish) + + armor = list( + "melee" = 90, + "bullet" = 50, + "laser" = -15, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100) + + var/max_red = 255 + var/min_red = 50 + + var/max_blue = 255 + var/min_blue = 50 + + var/max_green = 255 + var/min_green = 50 + + var/head_color = "#FFFFFF" + + var/image/head_image + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif + +/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize() + . = ..() + head_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue)) + update_icon() + +/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon() + cut_overlays() + ..() + if(!head_image) + head_image = image(icon, "[icon_state]_mask") + + head_image.icon_state = "[icon_state]_mask" + + head_image.color = head_color + + add_overlay(head_image) + +/datum/category_item/catalogue/fauna/solarfish + name = "Sivian Fauna - Solar Fin" + desc = "Classification: S Exocoetidae solarin\ +

                    \ + An incredibly rare species of Sivian fish.\ + The solar-fin missile fish is a specialized omnivore capable of \ + catching insects or small birds venturing too close to the water's \ + surface. \ +
                    \ + The glimmering fins of the solar-fin are actually biofluorescent, \ + 'charged' by the creature basking at the surface of the water, most \ + commonly by the edge of an ice-shelf, as a rapid means of cover. \ +
                    \ + These creatures are considered a protected species, and thus require an \ + up-to-date license to be hunted." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/animal/passive/fish/solarfish + name = "sun-fin" + tt_desc = "S Exocoetidae solarin" + icon_state = "solarfin-swim" + icon_living = "solarfin-swim" + icon_dead = "solarfin-dead" + + catalogue_data = list(/datum/category_item/catalogue/fauna/solarfish) + + has_eye_glow = TRUE + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif + +/datum/category_item/catalogue/fauna/murkin + name = "Sivian Fauna - Murkfish" + desc = "Classification: S Perca lutux\ +

                    \ + A small, Sivian fish most known for its bland-ness.\ +
                    \ + The species is incredibly close in appearance to the Earth \ + perch, aside from its incredibly tall dorsal fin. The animals use \ + the fin to assess the wind direction while near the surface. \ +
                    \ + The murkfish earns its name from the fact its dense meat tastes like mud \ + thanks to a specially formed protein, most likely an adaptation to \ + protect the species from predation." + value = CATALOGUER_REWARD_TRIVIAL + +/mob/living/simple_mob/animal/passive/fish/murkin + name = "murkin" + tt_desc = "S Perca lutux" + + icon_state = "murkin-swim" + icon_living = "murkin-swim" + icon_dead = "murkin-dead" + + catalogue_data = list(/datum/category_item/catalogue/fauna/murkin) + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish + +/decl/mob_organ_names/fish + hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/jerboa_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/jerboa_vr.dm index 7f40761eb8..bc9a0c9118 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/jerboa_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/jerboa_vr.dm @@ -1,15 +1,15 @@ -/mob/living/simple_mob/animal/passive/mouse/jerboa - name = "jerboa" - real_name = "jerboa" - desc = "It's a jerboa, a particularly fast desert mouse" - tt_desc = "E Dipodidae musculus" - icon = 'icons/mob/animal_vr.dmi' - icon_state = "mouse_brown" - item_state = "mouse_brown" - icon_living = "mouse_brown" - icon_dead = "mouse_brown_dead" - kitchen_tag = "rodent" - - movement_cooldown = -2 - - body_color = "brown" +/mob/living/simple_mob/animal/passive/mouse/jerboa + name = "jerboa" + real_name = "jerboa" + desc = "It's a jerboa, a particularly fast desert mouse" + tt_desc = "E Dipodidae musculus" + icon = 'icons/mob/animal_vr.dmi' + icon_state = "mouse_brown" + item_state = "mouse_brown" + icon_living = "mouse_brown" + icon_dead = "mouse_brown_dead" + kitchen_tag = "rodent" + + movement_cooldown = -2 + + body_color = "brown" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm index 905d7f2f19..ecb6765c3f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm @@ -1,64 +1,64 @@ -/mob/living/simple_mob/animal/passive/lizard - name = "lizard" - desc = "A cute, tiny lizard." - tt_desc = "E Anolis cuvieri" - - icon_state = "lizard_green" - icon_living = "lizard_green" - icon_dead = "lizard_green_dead" - - health = 5 - maxHealth = 5 - mob_size = MOB_MINISCULE - - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - - attacktext = list("bitten") - melee_damage_lower = 1 - melee_damage_upper = 2 - - speak_emote = list("hisses") - - say_list_type = /datum/say_list/lizard - - meat_amount = 1 - - var/body_color // Green, red, orange, yellow or cyan. Keep blank for random (including rare redblue) - -/mob/living/simple_mob/animal/passive/lizard/Initialize() - .=..() - - if(!body_color) - if(rand(1,1000) == 1) - body_color = "redblue" - else - body_color = pick(list("green","red","orange","yellow","cyan")) - icon_state = "lizard_[body_color]" - item_state = "lizard_[body_color]" - icon_living = "lizard_[body_color]" - icon_dead = "lizard_[body_color]_dead" - if(body_color == "redblue") - desc = "A cute, tiny, red lizard with distinctive blueish markings on its tiny limbs. Seems rare!" - else - desc = "A cute, tiny, [body_color] lizard." - -/mob/living/simple_mob/animal/passive/lizard/large - desc = "A cute, big lizard." - maxHealth = 20 - health = 20 - - melee_damage_lower = 5 - melee_damage_upper = 15 - - attack_sharp = TRUE - -/mob/living/simple_mob/animal/passive/lizard/large/Initialize() - . = ..() - adjust_scale(rand(12, 20) / 10) -/mob/living/simple_mob/animal/passive/lizard/large/defensive - maxHealth = 30 - health = 30 - - ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative +/mob/living/simple_mob/animal/passive/lizard + name = "lizard" + desc = "A cute, tiny lizard." + tt_desc = "E Anolis cuvieri" + + icon_state = "lizard_green" + icon_living = "lizard_green" + icon_dead = "lizard_green_dead" + + health = 5 + maxHealth = 5 + mob_size = MOB_MINISCULE + + response_help = "pets" + response_disarm = "shoos" + response_harm = "stomps on" + + attacktext = list("bitten") + melee_damage_lower = 1 + melee_damage_upper = 2 + + speak_emote = list("hisses") + + say_list_type = /datum/say_list/lizard + + meat_amount = 1 + + var/body_color // Green, red, orange, yellow or cyan. Keep blank for random (including rare redblue) + +/mob/living/simple_mob/animal/passive/lizard/Initialize() + .=..() + + if(!body_color) + if(rand(1,1000) == 1) + body_color = "redblue" + else + body_color = pick(list("green","red","orange","yellow","cyan")) + icon_state = "lizard_[body_color]" + item_state = "lizard_[body_color]" + icon_living = "lizard_[body_color]" + icon_dead = "lizard_[body_color]_dead" + if(body_color == "redblue") + desc = "A cute, tiny, red lizard with distinctive blueish markings on its tiny limbs. Seems rare!" + else + desc = "A cute, tiny, [body_color] lizard." + +/mob/living/simple_mob/animal/passive/lizard/large + desc = "A cute, big lizard." + maxHealth = 20 + health = 20 + + melee_damage_lower = 5 + melee_damage_upper = 15 + + attack_sharp = TRUE + +/mob/living/simple_mob/animal/passive/lizard/large/Initialize() + . = ..() + adjust_scale(rand(12, 20) / 10) +/mob/living/simple_mob/animal/passive/lizard/large/defensive + maxHealth = 30 + health = 30 + + ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard_mutant_event.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard_mutant_event.dm index 328e6ea28b..2f4305eed5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard_mutant_event.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard_mutant_event.dm @@ -1,27 +1,27 @@ -/mob/living/simple_mob/animal/passive/lizard/event - desc = "This one looks like it is growing huge!" - var/amount_grown = 0 - faction = "lizard" - -/mob/living/simple_mob/animal/passive/lizard/event/Life() - . = ..() - if(amount_grown >= 0) - amount_grown += rand(0,4) - if(amount_grown >= 100 && icon_state != icon_dead) - man() - return - -/mob/living/simple_mob/animal/passive/lizard/event/proc/man() - var/mob/bigger = new /mob/living/simple_mob/vore/aggressive/lizardman(get_turf(src)) - - if(istype(loc,/obj/belly)){ - var/obj/belly/B = loc - B.owner.visible_message("Something grows inside [B.owner]'s [lowertext(B.name)]!") - to_chat(B.owner, "\The [src] suddenly evolves inside your [lowertext(B.name)]!") - B.release_specific_contents(src, TRUE) - B.nom_mob(bigger, null) - qdel(src) - }else{ - visible_message("\The [src] suddenly evolves!") - qdel(src) - } +/mob/living/simple_mob/animal/passive/lizard/event + desc = "This one looks like it is growing huge!" + var/amount_grown = 0 + faction = "lizard" + +/mob/living/simple_mob/animal/passive/lizard/event/Life() + . = ..() + if(amount_grown >= 0) + amount_grown += rand(0,4) + if(amount_grown >= 100 && icon_state != icon_dead) + man() + return + +/mob/living/simple_mob/animal/passive/lizard/event/proc/man() + var/mob/bigger = new /mob/living/simple_mob/vore/aggressive/lizardman(get_turf(src)) + + if(istype(loc,/obj/belly)){ + var/obj/belly/B = loc + B.owner.visible_message("Something grows inside [B.owner]'s [lowertext(B.name)]!") + to_chat(B.owner, "\The [src] suddenly evolves inside your [lowertext(B.name)]!") + B.release_specific_contents(src, TRUE) + B.nom_mob(bigger, null) + qdel(src) + }else{ + visible_message("\The [src] suddenly evolves!") + qdel(src) + } diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm index 3dabbb6430..4bfba0a443 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm @@ -1,39 +1,39 @@ -/mob/living/simple_mob/animal/passive/yithian - name = "yithian" - desc = "A friendly creature vaguely resembling an oversized snail without a shell." - tt_desc = "J Escargot escargot" // a product of Jade, which is a planet that totally exists - - icon_state = "yithian" - icon_living = "yithian" - icon_dead = "yithian_dead" - icon = 'icons/jungle.dmi' - - organ_names = /decl/mob_organ_names/yithian - - // Same stats as lizards. - health = 5 - maxHealth = 5 - mob_size = MOB_MINISCULE - -/mob/living/simple_mob/animal/passive/tindalos - name = "tindalos" - desc = "It looks like a large, flightless grasshopper." - tt_desc = "J Locusta bruchus" - - icon_state = "tindalos" - icon_living = "tindalos" - icon_dead = "tindalos_dead" - icon = 'icons/jungle.dmi' - - organ_names = /decl/mob_organ_names/tindalos - - // Same stats as lizards. - health = 5 - maxHealth = 5 - mob_size = MOB_MINISCULE - -/decl/mob_organ_names/yithian - hit_zones = list("head", "abdomen", "left foreleg", "right foreleg", "left hind leg", "right hind leg") - -/decl/mob_organ_names/tindalos +/mob/living/simple_mob/animal/passive/yithian + name = "yithian" + desc = "A friendly creature vaguely resembling an oversized snail without a shell." + tt_desc = "J Escargot escargot" // a product of Jade, which is a planet that totally exists + + icon_state = "yithian" + icon_living = "yithian" + icon_dead = "yithian_dead" + icon = 'icons/jungle.dmi' + + organ_names = /decl/mob_organ_names/yithian + + // Same stats as lizards. + health = 5 + maxHealth = 5 + mob_size = MOB_MINISCULE + +/mob/living/simple_mob/animal/passive/tindalos + name = "tindalos" + desc = "It looks like a large, flightless grasshopper." + tt_desc = "J Locusta bruchus" + + icon_state = "tindalos" + icon_living = "tindalos" + icon_dead = "tindalos_dead" + icon = 'icons/jungle.dmi' + + organ_names = /decl/mob_organ_names/tindalos + + // Same stats as lizards. + health = 5 + maxHealth = 5 + mob_size = MOB_MINISCULE + +/decl/mob_organ_names/yithian + hit_zones = list("head", "abdomen", "left foreleg", "right foreleg", "left hind leg", "right hind leg") + +/decl/mob_organ_names/tindalos hit_zones = list("head", "thorax", "abdomen", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "left middle leg", "right middle leg") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_mutant_event.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_mutant_event.dm index b17a193e7c..fb165e12d8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_mutant_event.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_mutant_event.dm @@ -1,30 +1,30 @@ -/mob/living/simple_mob/animal/passive/mouse/event - desc = "This one looks like it is growing huge!" - var/amount_grown = 0 - -/mob/living/simple_mob/animal/passive/mouse/event/Life() - . = ..() - if(amount_grown >= 0) - amount_grown += rand(0,4) - if(amount_grown >= 100 && icon_state != icon_dead) - rat() - return - -/mob/living/simple_mob/animal/passive/mouse/event/proc/rat() - var/mob/bigger = null - if(prob(99.5)) - bigger = new /mob/living/simple_mob/vore/aggressive/rat/event(get_turf(src)) - else - bigger = new /mob/living/simple_mob/vore/aggressive/chungus(get_turf(src)) - - if(istype(loc,/obj/belly)){ - var/obj/belly/B = loc - B.owner.visible_message("Something grows inside [B.owner]'s [lowertext(B.name)]!") - to_chat(B.owner, "\The [src] suddenly evolves inside your [lowertext(B.name)]!") - B.release_specific_contents(src, TRUE) - B.nom_mob(bigger, null) - qdel(src) - }else{ - visible_message("\The [src] suddenly evolves!") - qdel(src) - } +/mob/living/simple_mob/animal/passive/mouse/event + desc = "This one looks like it is growing huge!" + var/amount_grown = 0 + +/mob/living/simple_mob/animal/passive/mouse/event/Life() + . = ..() + if(amount_grown >= 0) + amount_grown += rand(0,4) + if(amount_grown >= 100 && icon_state != icon_dead) + rat() + return + +/mob/living/simple_mob/animal/passive/mouse/event/proc/rat() + var/mob/bigger = null + if(prob(99.5)) + bigger = new /mob/living/simple_mob/vore/aggressive/rat/event(get_turf(src)) + else + bigger = new /mob/living/simple_mob/vore/aggressive/chungus(get_turf(src)) + + if(istype(loc,/obj/belly)){ + var/obj/belly/B = loc + B.owner.visible_message("Something grows inside [B.owner]'s [lowertext(B.name)]!") + to_chat(B.owner, "\The [src] suddenly evolves inside your [lowertext(B.name)]!") + B.release_specific_contents(src, TRUE) + B.nom_mob(bigger, null) + qdel(src) + }else{ + visible_message("\The [src] suddenly evolves!") + qdel(src) + } diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm index c488d1ed28..6450259f9c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm @@ -1,5 +1,5 @@ -// Passive mobs can't attack things, and will run away instead. -// They can also be displaced by all mobs. -/mob/living/simple_mob/animal/passive - ai_holder_type = /datum/ai_holder/simple_mob/passive +// Passive mobs can't attack things, and will run away instead. +// They can also be displaced by all mobs. +/mob/living/simple_mob/animal/passive + ai_holder_type = /datum/ai_holder/simple_mob/passive mob_bump_flag = 0 \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm index dd312988ec..5f0f010763 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm @@ -1,35 +1,35 @@ -/mob/living/simple_mob/animal/passive/penguin - name = "penguin" - desc = "An ungainly, waddling, cute, and VERY well-dressed bird." - tt_desc = "Aptenodytes forsteri" - icon_state = "penguin" - icon_living = "penguin" - icon_dead = "penguin_dead" - - maxHealth = 20 - health = 20 - minbodytemp = 175 // Same as Sif mobs. - - response_help = "pets" - response_disarm = "pushes aside" - response_harm = "hits" - - organ_names = /decl/mob_organ_names/penguin - - meat_amount = 3 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken - - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 15 - attacktext = list("pecked") - - has_langs = list(LANGUAGE_ANIMAL) - -/mob/living/simple_mob/animal/passive/penguin/tux - name = "Tux" - desc = "A penguin that has been known to associate with gnus." - speak_emote = list("interjects") - -/decl/mob_organ_names/penguin +/mob/living/simple_mob/animal/passive/penguin + name = "penguin" + desc = "An ungainly, waddling, cute, and VERY well-dressed bird." + tt_desc = "Aptenodytes forsteri" + icon_state = "penguin" + icon_living = "penguin" + icon_dead = "penguin_dead" + + maxHealth = 20 + health = 20 + minbodytemp = 175 // Same as Sif mobs. + + response_help = "pets" + response_disarm = "pushes aside" + response_harm = "hits" + + organ_names = /decl/mob_organ_names/penguin + + meat_amount = 3 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 15 + attacktext = list("pecked") + + has_langs = list(LANGUAGE_ANIMAL) + +/mob/living/simple_mob/animal/passive/penguin/tux + name = "Tux" + desc = "A penguin that has been known to associate with gnus." + speak_emote = list("interjects") + +/decl/mob_organ_names/penguin hit_zones = list("chest", "left leg", "right leg", "left flipper", "right flipper", "head") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm index 4eff5abe4e..ba41d4388e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm @@ -1,93 +1,93 @@ -// Base bird type. - -/mob/living/simple_mob/animal/passive/bird - name = "bird" - desc = "A domesticated bird. Tweet tweet!" - player_msg = "You are able to fly." - - icon = 'icons/mob/birds.dmi' - icon_state = "parrot" - item_state = null - icon_rest = "parrot-held" - icon_dead = "parrot-dead" - - pass_flags = PASSTABLE - - health = 30 - maxHealth = 30 - melee_damage_lower = 3 - melee_damage_upper = 3 - - movement_cooldown = -1 - hovering = TRUE // Birds can fly. - softfall = TRUE - parachuting = TRUE - - meat_amount = 1 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken - - attacktext = list("clawed", "pecked") - speak_emote = list("chirps", "caws") - has_langs = list(LANGUAGE_ANIMAL) - response_help = "pets" - response_disarm = "gently moves aside" - response_harm = "swats" - organ_names = /decl/mob_organ_names/bird - - say_list_type = /datum/say_list/bird - holder_type = /obj/item/weapon/holder/bird - -/datum/say_list/bird - speak = list("Chirp!","Caw!","Screech!","Squawk!") - emote_hear = list("chirps","caws") - emote_see = list("shakes their head", "ruffles their feathers") - -// Subtypes for birbs. -/mob/living/simple_mob/animal/passive/bird/black_bird - name = "common blackbird" - desc = "A species of bird, both the males and females are known to be territorial on their breeding grounds." - icon_state = "commonblackbird" - icon_dead = "commonblackbird-dead" - tt_desc = "E Turdus merula" - icon_scale_x = 0.5 - icon_scale_y = 0.5 - -/mob/living/simple_mob/animal/passive/bird/azure_tit - name = "azure tit" - desc = "A species of bird, colored blue and white." - icon_state = "azuretit" - icon_dead = "azuretit-dead" - tt_desc = "E Cyanistes cyanus" - icon_scale_x = 0.5 - icon_scale_y = 0.5 - -/mob/living/simple_mob/animal/passive/bird/european_robin - name = "european robin" - desc = "A species of bird, they have been studied for their sense of magnetoreception." - icon_state = "europeanrobin" - icon_dead = "europeanrobin-dead" - tt_desc = "E Erithacus rubecula" - icon_scale_x = 0.5 - icon_scale_y = 0.5 - -/mob/living/simple_mob/animal/passive/bird/goldcrest - name = "goldcrest" - desc = "A species of bird, they were once called 'king of the birds' in ancient human folklore, for their golden crest. \ - Today, their scientific name still elude towards this, with regulus, meaning petty king." - icon_state = "goldcrest" - icon_dead = "goldcrest-dead" - tt_desc = "E Regulus regulus" - icon_scale_x = 0.5 - icon_scale_y = 0.5 - -/mob/living/simple_mob/animal/passive/bird/ringneck_dove - name = "ringneck dove" - desc = "A species of bird. They are also known as the barbary dove, and have a distinct ring-like shape around the back of their neck." - icon_state = "ringneckdove" - icon_dead = "ringneckdove-dead" - tt_desc = "E Streptopelia risoria" // This is actually disputed IRL but since we can't tell the future it'll stay the same for 500+ years. - icon_scale_x = 0.5 - icon_scale_y = 0.5 - -/decl/mob_organ_names/bird - hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing") +// Base bird type. + +/mob/living/simple_mob/animal/passive/bird + name = "bird" + desc = "A domesticated bird. Tweet tweet!" + player_msg = "You are able to fly." + + icon = 'icons/mob/birds.dmi' + icon_state = "parrot" + item_state = null + icon_rest = "parrot-held" + icon_dead = "parrot-dead" + + pass_flags = PASSTABLE + + health = 30 + maxHealth = 30 + melee_damage_lower = 3 + melee_damage_upper = 3 + + movement_cooldown = -1 + hovering = TRUE // Birds can fly. + softfall = TRUE + parachuting = TRUE + + meat_amount = 1 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + + attacktext = list("clawed", "pecked") + speak_emote = list("chirps", "caws") + has_langs = list(LANGUAGE_ANIMAL) + response_help = "pets" + response_disarm = "gently moves aside" + response_harm = "swats" + organ_names = /decl/mob_organ_names/bird + + say_list_type = /datum/say_list/bird + holder_type = /obj/item/weapon/holder/bird + +/datum/say_list/bird + speak = list("Chirp!","Caw!","Screech!","Squawk!") + emote_hear = list("chirps","caws") + emote_see = list("shakes their head", "ruffles their feathers") + +// Subtypes for birbs. +/mob/living/simple_mob/animal/passive/bird/black_bird + name = "common blackbird" + desc = "A species of bird, both the males and females are known to be territorial on their breeding grounds." + icon_state = "commonblackbird" + icon_dead = "commonblackbird-dead" + tt_desc = "E Turdus merula" + icon_scale_x = 0.5 + icon_scale_y = 0.5 + +/mob/living/simple_mob/animal/passive/bird/azure_tit + name = "azure tit" + desc = "A species of bird, colored blue and white." + icon_state = "azuretit" + icon_dead = "azuretit-dead" + tt_desc = "E Cyanistes cyanus" + icon_scale_x = 0.5 + icon_scale_y = 0.5 + +/mob/living/simple_mob/animal/passive/bird/european_robin + name = "european robin" + desc = "A species of bird, they have been studied for their sense of magnetoreception." + icon_state = "europeanrobin" + icon_dead = "europeanrobin-dead" + tt_desc = "E Erithacus rubecula" + icon_scale_x = 0.5 + icon_scale_y = 0.5 + +/mob/living/simple_mob/animal/passive/bird/goldcrest + name = "goldcrest" + desc = "A species of bird, they were once called 'king of the birds' in ancient human folklore, for their golden crest. \ + Today, their scientific name still elude towards this, with regulus, meaning petty king." + icon_state = "goldcrest" + icon_dead = "goldcrest-dead" + tt_desc = "E Regulus regulus" + icon_scale_x = 0.5 + icon_scale_y = 0.5 + +/mob/living/simple_mob/animal/passive/bird/ringneck_dove + name = "ringneck dove" + desc = "A species of bird. They are also known as the barbary dove, and have a distinct ring-like shape around the back of their neck." + icon_state = "ringneckdove" + icon_dead = "ringneckdove-dead" + tt_desc = "E Streptopelia risoria" // This is actually disputed IRL but since we can't tell the future it'll stay the same for 500+ years. + icon_scale_x = 0.5 + icon_scale_y = 0.5 + +/decl/mob_organ_names/bird + hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm index 51ae8f8738..4f791e8caa 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm @@ -1,285 +1,285 @@ -var/list/_cat_default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible, - /decl/emote/audible/hiss, - /decl/emote/audible/whimper, - /decl/emote/audible/gasp, - /decl/emote/audible/scretch, - /decl/emote/audible/choke, - /decl/emote/audible/moan, - /decl/emote/audible/gnarl, - /decl/emote/audible/purr, - /decl/emote/audible/purrlong -) - -/mob/living/simple_mob/animal/passive/cat - name = "cat" - desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." - tt_desc = "E Felis silvestris catus" - icon = 'icons/mob/pets.dmi' - icon_state = "cat2" - item_state = "cat2" - - movement_cooldown = -1 - - meat_amount = 1 - see_in_dark = 6 // Not sure if this actually works. - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - - holder_type = /obj/item/weapon/holder/cat - mob_size = MOB_SMALL - - has_langs = list(LANGUAGE_ANIMAL) - - var/mob/living/friend = null // Our best pal, who we'll follow. Meow. - var/named = FALSE //have I been named yet? - var/friend_name = null //VOREStation Edit - Lock befriending to this character - -/mob/living/simple_mob/animal/passive/cat/Initialize() - icon_living = "[initial(icon_state)]" - icon_dead = "[initial(icon_state)]_dead" - icon_rest = "[initial(icon_state)]_rest" - update_icon() - return ..() - -/mob/living/simple_mob/animal/passive/cat/get_available_emotes() - return global._cat_default_emotes.Copy() - -/mob/living/simple_mob/animal/passive/cat/handle_special() - if(!stat && prob(2)) // spooky - var/mob/observer/dead/spook = locate() in range(src, 5) - if(spook) - var/turf/T = get_turf(spook) - var/list/visible = list() - for(var/obj/O in T.contents) - if(!O.invisibility && O.name) - visible += O - if(visible.len) - var/atom/A = pick(visible) - visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].") - -// Instakills mice. -/mob/living/simple_mob/animal/passive/cat/apply_melee_effects(var/atom/A) - if(ismouse(A)) - var/mob/living/simple_mob/animal/passive/mouse/mouse = A - if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something. - mouse.splat() - visible_emote(pick("bites \the [mouse]!", "toys with \the [mouse].", "chomps on \the [mouse]!")) - else - ..() - -/mob/living/simple_mob/animal/passive/cat/IIsAlly(mob/living/L) - if(L == friend) // Always be pals with our special friend. - return TRUE - - . = ..() - - if(.) // We're pals, but they might be a dirty mouse... - if(ismouse(L)) - return FALSE // Cats and mice can never get along. - -/mob/living/simple_mob/animal/passive/cat/verb/become_friends() - set name = "Become Friends" - set category = "IC" - set src in view(1) - - var/mob/living/L = usr - if(!istype(L)) - return // Fuck off ghosts. - - if(friend) - if(friend == usr) - to_chat(L, span("notice", "\The [src] is already your friend! Meow!")) - return - else - to_chat(L, span("warning", "\The [src] ignores you.")) - return - - //VOREStation Edit Start - Adds friend_name var checks - if(!friend_name || L.real_name == friend_name) - friend = L - face_atom(L) - to_chat(L, span("notice", "\The [src] is now your friend! Meow.")) - visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs.")) - - if(has_AI()) - var/datum/ai_holder/AI = ai_holder - AI.set_follow(friend) - else - to_chat(L, span("notice", "[src] ignores you.")) - //VOREStation Edit End - - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_mob/animal/passive/cat/runtime - name = "Runtime" - desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." - tt_desc = "E Felis silvestris medicalis" // a hypoallergenic breed produced by NT for... medical purposes? Sure. - gender = FEMALE - icon_state = "cat" - item_state = "cat" - named = TRUE - holder_type = /obj/item/weapon/holder/cat/runtime - makes_dirt = 0 //Vorestation Edit - -/mob/living/simple_mob/animal/passive/cat/kitten - name = "kitten" - desc = "D'aaawwww!" - icon_state = "kitten" - item_state = "kitten" - gender = NEUTER - holder_type = /obj/item/weapon/holder/cat/kitten //VOREStation Edit - -/mob/living/simple_mob/animal/passive/cat/kitten/Initialize() - if(gender == NEUTER) - gender = pick(MALE, FEMALE) - return ..() - -/mob/living/simple_mob/animal/passive/cat/black - icon_state = "cat3" - item_state = "cat3" - -/mob/living/simple_mob/animal/passive/cat/bones - name = "Bones" - desc = "That's Bones the cat. He's a laid back, black cat. Meow." - gender = MALE - icon_state = "cat3" - item_state = "cat3" - named = TRUE - holder_type = /obj/item/weapon/holder/cat/fluff/bones - -// SPARKLY -/mob/living/simple_mob/animal/passive/cat/bluespace - name = "bluespace cat" - desc = "Shiny cat, shiny cat, it's not your fault." - tt_desc = "E Felis silvestris argentum" - icon_state = "bscat" - icon_living = "bscat" - icon_rest = null - icon_dead = null - makes_dirt = 0 - holder_type = /obj/item/weapon/holder/cat/bluespace - -/mob/living/simple_mob/animal/passive/cat/bluespace/death() - animate(src, alpha = 0, color = "#0000FF", time = 0.5 SECOND) - spawn(0.5 SECOND) - qdel(src) - -/mob/living/simple_mob/animal/passive/cat/bread - name = "bread cat" - desc = "Brought lunch to work." - tt_desc = "E Felis silvestris breadinum" - icon_state = "breadcat" - icon_living = "breadcat" - icon_rest = "breadcat_rest" - icon_dead = "breadcat_dead" - //icon_sit = "breadcat_sit" - makes_dirt = 0 - holder_type = /obj/item/weapon/holder/cat/breadcat - -/mob/living/simple_mob/animal/passive/cat/original - name = "original cat" - desc = "Donut steal." - tt_desc = "E Felis silvestris originalis" - icon_state = "original" - icon_living = "original" - icon_rest = "original_rest" - icon_dead = "original_dead" - //icon_sit = "original_sit" - makes_dirt = 0 - holder_type = /obj/item/weapon/holder/cat/original - -/mob/living/simple_mob/animal/passive/cat/cak - name = "cak" - desc = "Optimal combination of things?" - tt_desc = "E Felis silvestris dessertus" - icon_state = "cak" - icon_living = "cak" - icon_rest = "cak_rest" - icon_dead = "cak_dead" - //icon_sit = "cak_sit" - makes_dirt = 0 - holder_type = /obj/item/weapon/holder/cat/cak - -/mob/living/simple_mob/animal/passive/cat/space - name = "space cat" - desc = "Did someone write a song about this cat?" - tt_desc = "E Felis silvestris stellaris" - icon_state = "spacecat" - icon_living = "spacecat" - icon_rest = "spacecat_rest" - icon_dead = "spacecat_dead" - //icon_sit = "spacecat_sit" - holder_type = /obj/item/weapon/holder/cat/spacecat - makes_dirt = 0 - - minbodytemp = 0 // Minimum "okay" temperature in kelvin - maxbodytemp = 900 // Maximum of above - heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - - min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' - max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - min_tox = 0 // Phoron min - max_tox = 0 // Phoron max - min_co2 = 0 // CO2 min - max_co2 = 0 // CO2 max - min_n2 = 0 // N2 min - max_n2 = 0 // N2 max - unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above - -/datum/say_list/cat - speak = list("Meow!","Esp!","Purr!","HSSSSS") - emote_hear = list("meows","mews") - emote_see = list("shakes their head", "shivers") - say_maybe_target = list("Meow?","Mew?","Mao?") - say_got_target = list("MEOW!","HSSSS!","REEER!") - -/mob/living/simple_mob/animal/passive/cat/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) - if(named) - to_chat(user, "\The [name] already has a name!") - else - var/tmp_name = sanitizeSafe(tgui_input_text(user, "Give \the [name] a name", "Name", null, MAX_NAME_LEN), MAX_NAME_LEN) - if(length(tmp_name) > 50) - to_chat(user, "The name can be at most 50 characters long.") - else - to_chat(user, "You name \the [name]. Meow!") - name = tmp_name - named = TRUE - else - ..() - -/obj/item/weapon/cat_box - name = "faintly purring box" - desc = "This box is purring faintly. You're pretty sure there's a cat inside it." - icon = 'icons/obj/storage.dmi' - icon_state = "box" - var/cattype = /mob/living/simple_mob/animal/passive/cat - -/obj/item/weapon/cat_box/attack_self(var/mob/user) - var/turf/catturf = get_turf(src) - to_chat(user, "You peek into \the [name]-- and a cat jumps out!") - new cattype(catturf) - new /obj/item/stack/material/cardboard(catturf) //if i fits i sits - qdel(src) - -/obj/item/weapon/cat_box/black - cattype = /mob/living/simple_mob/animal/passive/cat/black +var/list/_cat_default_emotes = list( + /decl/emote/visible, + /decl/emote/visible/scratch, + /decl/emote/visible/drool, + /decl/emote/visible/nod, + /decl/emote/visible/sway, + /decl/emote/visible/sulk, + /decl/emote/visible/twitch, + /decl/emote/visible/twitch_v, + /decl/emote/visible/dance, + /decl/emote/visible/roll, + /decl/emote/visible/shake, + /decl/emote/visible/jump, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible, + /decl/emote/audible/hiss, + /decl/emote/audible/whimper, + /decl/emote/audible/gasp, + /decl/emote/audible/scretch, + /decl/emote/audible/choke, + /decl/emote/audible/moan, + /decl/emote/audible/gnarl, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong +) + +/mob/living/simple_mob/animal/passive/cat + name = "cat" + desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." + tt_desc = "E Felis silvestris catus" + icon = 'icons/mob/pets.dmi' + icon_state = "cat2" + item_state = "cat2" + + movement_cooldown = -1 + + meat_amount = 1 + see_in_dark = 6 // Not sure if this actually works. + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + + holder_type = /obj/item/weapon/holder/cat + mob_size = MOB_SMALL + + has_langs = list(LANGUAGE_ANIMAL) + + var/mob/living/friend = null // Our best pal, who we'll follow. Meow. + var/named = FALSE //have I been named yet? + var/friend_name = null //VOREStation Edit - Lock befriending to this character + +/mob/living/simple_mob/animal/passive/cat/Initialize() + icon_living = "[initial(icon_state)]" + icon_dead = "[initial(icon_state)]_dead" + icon_rest = "[initial(icon_state)]_rest" + update_icon() + return ..() + +/mob/living/simple_mob/animal/passive/cat/get_available_emotes() + return global._cat_default_emotes.Copy() + +/mob/living/simple_mob/animal/passive/cat/handle_special() + if(!stat && prob(2)) // spooky + var/mob/observer/dead/spook = locate() in range(src, 5) + if(spook) + var/turf/T = get_turf(spook) + var/list/visible = list() + for(var/obj/O in T.contents) + if(!O.invisibility && O.name) + visible += O + if(visible.len) + var/atom/A = pick(visible) + visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].") + +// Instakills mice. +/mob/living/simple_mob/animal/passive/cat/apply_melee_effects(var/atom/A) + if(ismouse(A)) + var/mob/living/simple_mob/animal/passive/mouse/mouse = A + if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something. + mouse.splat() + visible_emote(pick("bites \the [mouse]!", "toys with \the [mouse].", "chomps on \the [mouse]!")) + else + ..() + +/mob/living/simple_mob/animal/passive/cat/IIsAlly(mob/living/L) + if(L == friend) // Always be pals with our special friend. + return TRUE + + . = ..() + + if(.) // We're pals, but they might be a dirty mouse... + if(ismouse(L)) + return FALSE // Cats and mice can never get along. + +/mob/living/simple_mob/animal/passive/cat/verb/become_friends() + set name = "Become Friends" + set category = "IC" + set src in view(1) + + var/mob/living/L = usr + if(!istype(L)) + return // Fuck off ghosts. + + if(friend) + if(friend == usr) + to_chat(L, span("notice", "\The [src] is already your friend! Meow!")) + return + else + to_chat(L, span("warning", "\The [src] ignores you.")) + return + + //VOREStation Edit Start - Adds friend_name var checks + if(!friend_name || L.real_name == friend_name) + friend = L + face_atom(L) + to_chat(L, span("notice", "\The [src] is now your friend! Meow.")) + visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs.")) + + if(has_AI()) + var/datum/ai_holder/AI = ai_holder + AI.set_follow(friend) + else + to_chat(L, span("notice", "[src] ignores you.")) + //VOREStation Edit End + + +//RUNTIME IS ALIVE! SQUEEEEEEEE~ +/mob/living/simple_mob/animal/passive/cat/runtime + name = "Runtime" + desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." + tt_desc = "E Felis silvestris medicalis" // a hypoallergenic breed produced by NT for... medical purposes? Sure. + gender = FEMALE + icon_state = "cat" + item_state = "cat" + named = TRUE + holder_type = /obj/item/weapon/holder/cat/runtime + makes_dirt = 0 //Vorestation Edit + +/mob/living/simple_mob/animal/passive/cat/kitten + name = "kitten" + desc = "D'aaawwww!" + icon_state = "kitten" + item_state = "kitten" + gender = NEUTER + holder_type = /obj/item/weapon/holder/cat/kitten //VOREStation Edit + +/mob/living/simple_mob/animal/passive/cat/kitten/Initialize() + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + return ..() + +/mob/living/simple_mob/animal/passive/cat/black + icon_state = "cat3" + item_state = "cat3" + +/mob/living/simple_mob/animal/passive/cat/bones + name = "Bones" + desc = "That's Bones the cat. He's a laid back, black cat. Meow." + gender = MALE + icon_state = "cat3" + item_state = "cat3" + named = TRUE + holder_type = /obj/item/weapon/holder/cat/fluff/bones + +// SPARKLY +/mob/living/simple_mob/animal/passive/cat/bluespace + name = "bluespace cat" + desc = "Shiny cat, shiny cat, it's not your fault." + tt_desc = "E Felis silvestris argentum" + icon_state = "bscat" + icon_living = "bscat" + icon_rest = null + icon_dead = null + makes_dirt = 0 + holder_type = /obj/item/weapon/holder/cat/bluespace + +/mob/living/simple_mob/animal/passive/cat/bluespace/death() + animate(src, alpha = 0, color = "#0000FF", time = 0.5 SECOND) + spawn(0.5 SECOND) + qdel(src) + +/mob/living/simple_mob/animal/passive/cat/bread + name = "bread cat" + desc = "Brought lunch to work." + tt_desc = "E Felis silvestris breadinum" + icon_state = "breadcat" + icon_living = "breadcat" + icon_rest = "breadcat_rest" + icon_dead = "breadcat_dead" + //icon_sit = "breadcat_sit" + makes_dirt = 0 + holder_type = /obj/item/weapon/holder/cat/breadcat + +/mob/living/simple_mob/animal/passive/cat/original + name = "original cat" + desc = "Donut steal." + tt_desc = "E Felis silvestris originalis" + icon_state = "original" + icon_living = "original" + icon_rest = "original_rest" + icon_dead = "original_dead" + //icon_sit = "original_sit" + makes_dirt = 0 + holder_type = /obj/item/weapon/holder/cat/original + +/mob/living/simple_mob/animal/passive/cat/cak + name = "cak" + desc = "Optimal combination of things?" + tt_desc = "E Felis silvestris dessertus" + icon_state = "cak" + icon_living = "cak" + icon_rest = "cak_rest" + icon_dead = "cak_dead" + //icon_sit = "cak_sit" + makes_dirt = 0 + holder_type = /obj/item/weapon/holder/cat/cak + +/mob/living/simple_mob/animal/passive/cat/space + name = "space cat" + desc = "Did someone write a song about this cat?" + tt_desc = "E Felis silvestris stellaris" + icon_state = "spacecat" + icon_living = "spacecat" + icon_rest = "spacecat_rest" + icon_dead = "spacecat_dead" + //icon_sit = "spacecat_sit" + holder_type = /obj/item/weapon/holder/cat/spacecat + makes_dirt = 0 + + minbodytemp = 0 // Minimum "okay" temperature in kelvin + maxbodytemp = 900 // Maximum of above + heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp + cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp + + min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' + max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' + min_tox = 0 // Phoron min + max_tox = 0 // Phoron max + min_co2 = 0 // CO2 min + max_co2 = 0 // CO2 max + min_n2 = 0 // N2 min + max_n2 = 0 // N2 max + unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above + +/datum/say_list/cat + speak = list("Meow!","Esp!","Purr!","HSSSSS") + emote_hear = list("meows","mews") + emote_see = list("shakes their head", "shivers") + say_maybe_target = list("Meow?","Mew?","Mao?") + say_got_target = list("MEOW!","HSSSS!","REEER!") + +/mob/living/simple_mob/animal/passive/cat/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + if(named) + to_chat(user, "\The [name] already has a name!") + else + var/tmp_name = sanitizeSafe(tgui_input_text(user, "Give \the [name] a name", "Name", null, MAX_NAME_LEN), MAX_NAME_LEN) + if(length(tmp_name) > 50) + to_chat(user, "The name can be at most 50 characters long.") + else + to_chat(user, "You name \the [name]. Meow!") + name = tmp_name + named = TRUE + else + ..() + +/obj/item/weapon/cat_box + name = "faintly purring box" + desc = "This box is purring faintly. You're pretty sure there's a cat inside it." + icon = 'icons/obj/storage.dmi' + icon_state = "box" + var/cattype = /mob/living/simple_mob/animal/passive/cat + +/obj/item/weapon/cat_box/attack_self(var/mob/user) + var/turf/catturf = get_turf(src) + to_chat(user, "You peek into \the [name]-- and a cat jumps out!") + new cattype(catturf) + new /obj/item/stack/material/cardboard(catturf) //if i fits i sits + qdel(src) + +/obj/item/weapon/cat_box/black + cattype = /mob/living/simple_mob/animal/passive/cat/black diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm index 27c6cc7f09..9adf67d779 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm @@ -1,29 +1,29 @@ -/mob/living/simple_mob/animal/passive/fennec - name = "fennec" - desc = "A fox preferring arid climates, also known as a dingler, or a goob." - tt_desc = "Vulpes Zerda" - icon_state = "fennec" - item_state = "fennec" - - movement_cooldown = -1 - - see_in_dark = 6 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - - holder_type = /obj/item/weapon/holder/fennec - mob_size = MOB_SMALL - - has_langs = list(LANGUAGE_ANIMAL) - -/mob/living/simple_mob/animal/passive/fennec/faux - name = "faux" - desc = "Domesticated fennec. Seems to like screaming just as much though." - -/mob/living/simple_mob/animal/passive/fennec/Initialize() - icon_living = "[initial(icon_state)]" - icon_dead = "[initial(icon_state)]_dead" - icon_rest = "[initial(icon_state)]_rest" - update_icon() - return ..() +/mob/living/simple_mob/animal/passive/fennec + name = "fennec" + desc = "A fox preferring arid climates, also known as a dingler, or a goob." + tt_desc = "Vulpes Zerda" + icon_state = "fennec" + item_state = "fennec" + + movement_cooldown = -1 + + see_in_dark = 6 + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + + holder_type = /obj/item/weapon/holder/fennec + mob_size = MOB_SMALL + + has_langs = list(LANGUAGE_ANIMAL) + +/mob/living/simple_mob/animal/passive/fennec/faux + name = "faux" + desc = "Domesticated fennec. Seems to like screaming just as much though." + +/mob/living/simple_mob/animal/passive/fennec/Initialize() + icon_living = "[initial(icon_state)]" + icon_dead = "[initial(icon_state)]_dead" + icon_rest = "[initial(icon_state)]_rest" + update_icon() + return ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm index c03327b5bd..e985111c0c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm @@ -1,253 +1,253 @@ -// Parrots can talk, and may repeat things it hears. -/mob/living/simple_mob/animal/passive/bird/parrot - name = "parrot" - description_info = "You can give it a headset by clicking on it with a headset. \ - To remove it, click the bird while on grab intent." - has_langs = list(LANGUAGE_GALCOM, LANGUAGE_ANIMAL) - - ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot - - // A headset, so that talking parrots can yell at the crew over comms. - // If set to a type, on initialize it will be instantiated into that type. - var/obj/item/device/radio/headset/my_headset = null - -// Say list -/datum/say_list/bird/poly - speak = list( - "Poly wanna cracker!", - "Check the singulo, you chucklefucks!", - "Wire the solars, you lazy bums!", - "WHO TOOK THE DAMN HARDSUITS?", - "OH GOD ITS FREE CALL THE SHUTTLE", - "Danger! Crystal hyperstructure instability!", - "CRYSTAL DELAMINATION IMMINENT.", - "Tweet tweet, I'm a Teshari.", - "Chitters.", - "Meteors have been detected on a collision course with the station!" - ) - -// Lets the AI use headsets. -// Player-controlled parrots will need to do it manually. -/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message) - if(my_headset && prob(50)) - var/list/keys = list() - for(var/channel in my_headset.channels) - var/key = get_radio_key_from_channel(channel) - if(key) - keys += key - if(keys.len) - var/key_used = pick(keys) - return say("[key_used] [message]") - return say(message) - -// Ugly saycode so parrots can use their headsets. -/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, used_radios, whispering) - ..() - if(message_mode) - if(my_headset && istype(my_headset, /obj/item/device/radio)) - my_headset.talk_into(src, message, message_mode, verb, whispering) - used_radios += my_headset - -// Clicked on while holding an object. -/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/device/radio/headset)) - give_headset(I, user) - return - return ..() - -// Clicked on by empty hand. -/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L) - if(L.a_intent == I_GRAB && my_headset) - remove_headset(L) - else - ..() - - -/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user) - if(!istype(new_headset)) - to_chat(user, span("warning", "\The [new_headset] isn't a headset.")) - return - if(my_headset) - to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset].")) - return - else - user.drop_item(new_headset) - my_headset = new_headset - new_headset.forceMove(src) - to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster.")) - to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately.")) - return - -/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user) - if(!my_headset) - to_chat(user, "\The [src] doesn't have a headset to remove, thankfully.") - else - ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - my_headset.forceMove(get_turf(src)) - user.put_in_hands(my_headset) - to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally.")) - to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!")) - my_headset = null - -/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user) - . = ..() - if(my_headset) - . += "It is wearing \a [my_headset]." - -/mob/living/simple_mob/animal/passive/bird/parrot/Initialize() - if(my_headset) - my_headset = new my_headset(src) - return ..() - -// Subtypes. - -// Best Bird -/mob/living/simple_mob/animal/passive/bird/parrot/poly - name = "Poly" - desc = "It's a parrot. An expert on quantum cracker theory." - icon_state = "poly" - icon_rest = "poly-held" - icon_dead = "poly-dead" - tt_desc = "E Ara macao" - attack_armor_pen = 20 //HE HAS THE B E A K - my_headset = /obj/item/device/radio/headset/headset_eng - say_list_type = /datum/say_list/bird/poly - -// Best Bird with best headset. -/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate - my_headset = /obj/item/device/radio/headset/omni - -/mob/living/simple_mob/animal/passive/bird/parrot/kea - name = "kea" - desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \ - They are known to be intelligent and curious, which has made some consider them a pest." - icon_state = "kea" - icon_rest = "kea-held" - icon_dead = "kea-dead" - tt_desc = "E Nestor notabilis" - -/mob/living/simple_mob/animal/passive/bird/parrot/eclectus - name = "eclectus" - desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \ - A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage." - icon_state = "eclectus" - icon_rest = "eclectus-held" - icon_dead = "eclectus-dead" - tt_desc = "E Eclectus roratus" - -/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/Initialize() - gender = pick(MALE, FEMALE) - if(gender == FEMALE) - icon_state = "eclectusf" - icon_rest = "eclectusf-held" - icon_dead = "eclectusf-dead" - return ..() - -/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot - name = "grey parrot" - desc = "A species of parrot. This one is predominantly grey, but has red tail feathers." - icon_state = "agrey" - icon_rest = "agrey-held" - icon_dead = "agrey-dead" - tt_desc = "E Psittacus erithacus" - -/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique - name = "black-headed caique" - desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques." - icon_state = "bcaique" - icon_rest = "bcaique-held" - icon_dead = "bcaique-dead" - tt_desc = "E Pionites melanocephalus" - -/mob/living/simple_mob/animal/passive/bird/parrot/white_caique - name = "white-bellied caique" - desc = "A species of parrot, they are also known as the Green-Thighed Parrot." - icon_state = "wcaique" - icon_rest = "wcaique-held" - icon_dead = "wcaique-dead" - tt_desc = "E Pionites leucogaster" - -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar - name = "budgerigar" - desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ - This one is has its natural colors of green and yellow." - icon_state = "gbudge" - icon_rest = "gbudge-held" - icon_dead = "gbudge-dead" - tt_desc = "E Melopsittacus undulatus" - -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue - icon_state = "bbudge" - icon_rest = "bbudge-held" - icon_dead = "bbudge-dead" - desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ - This one has a mutation which altered its color to be blue instead of green and yellow." - -/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen - icon_state = "bgbudge" - icon_rest = "bgbudge-held" - icon_dead = "bgbudge-dead" - desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ - This one has a mutation which altered its color to be a mix of blue and green." - -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel - name = "cockatiel" - desc = "A species of parrot. This one has a highly visible crest." - icon_state = "tiel" - icon_rest = "tiel-held" - icon_dead = "tiel-dead" - tt_desc = "E Nymphicus hollandicus" - -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white - icon_state = "wtiel" - icon_rest = "wtiel-held" - icon_dead = "wtiel-dead" - -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish - icon_state = "luttiel" - icon_rest = "luttiel-held" - icon_dead = "luttiel-dead" - -/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey - icon_state = "blutiel" // idk why this is blu. - icon_rest = "blutiel-held" - icon_dead = "blutiel-dead" - -// This actually might be the yellow-crested cockatoo but idk. -/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo - name = "sulphur-crested cockatoo" - desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow." - icon_state = "too" - icon_rest = "too-held" - icon_dead = "too-dead" - tt_desc = "E Cacatua galerita" - -// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk. -/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo - name = "white cockatoo" - desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest." - icon_state = "utoo" - icon_rest = "utoo-held" - icon_dead = "utoo-dead" - tt_desc = "E Cacatua alba" - -/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo - name = "pink cockatoo" - desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \ - in honor of a human surveyor and explorer who existed before humans fully explored their home planet." - icon_state = "mtoo" - icon_rest = "mtoo-held" - icon_dead = "mtoo-dead" - tt_desc = "E Lophochroa leadbeateri" - - -// AI -/datum/ai_holder/simple_mob/passive/parrot - speak_chance = 2 - base_wander_delay = 8 - -/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message) - if(holder.stat || !holder.say_list || !message || speaker == holder) - return - var/datum/say_list/S = holder.say_list - S.speak |= message +// Parrots can talk, and may repeat things it hears. +/mob/living/simple_mob/animal/passive/bird/parrot + name = "parrot" + description_info = "You can give it a headset by clicking on it with a headset. \ + To remove it, click the bird while on grab intent." + has_langs = list(LANGUAGE_GALCOM, LANGUAGE_ANIMAL) + + ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot + + // A headset, so that talking parrots can yell at the crew over comms. + // If set to a type, on initialize it will be instantiated into that type. + var/obj/item/device/radio/headset/my_headset = null + +// Say list +/datum/say_list/bird/poly + speak = list( + "Poly wanna cracker!", + "Check the singulo, you chucklefucks!", + "Wire the solars, you lazy bums!", + "WHO TOOK THE DAMN HARDSUITS?", + "OH GOD ITS FREE CALL THE SHUTTLE", + "Danger! Crystal hyperstructure instability!", + "CRYSTAL DELAMINATION IMMINENT.", + "Tweet tweet, I'm a Teshari.", + "Chitters.", + "Meteors have been detected on a collision course with the station!" + ) + +// Lets the AI use headsets. +// Player-controlled parrots will need to do it manually. +/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message) + if(my_headset && prob(50)) + var/list/keys = list() + for(var/channel in my_headset.channels) + var/key = get_radio_key_from_channel(channel) + if(key) + keys += key + if(keys.len) + var/key_used = pick(keys) + return say("[key_used] [message]") + return say(message) + +// Ugly saycode so parrots can use their headsets. +/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, used_radios, whispering) + ..() + if(message_mode) + if(my_headset && istype(my_headset, /obj/item/device/radio)) + my_headset.talk_into(src, message, message_mode, verb, whispering) + used_radios += my_headset + +// Clicked on while holding an object. +/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/device/radio/headset)) + give_headset(I, user) + return + return ..() + +// Clicked on by empty hand. +/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L) + if(L.a_intent == I_GRAB && my_headset) + remove_headset(L) + else + ..() + + +/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user) + if(!istype(new_headset)) + to_chat(user, span("warning", "\The [new_headset] isn't a headset.")) + return + if(my_headset) + to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset].")) + return + else + user.drop_item(new_headset) + my_headset = new_headset + new_headset.forceMove(src) + to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster.")) + to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately.")) + return + +/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user) + if(!my_headset) + to_chat(user, "\The [src] doesn't have a headset to remove, thankfully.") + else + ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") + my_headset.forceMove(get_turf(src)) + user.put_in_hands(my_headset) + to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally.")) + to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!")) + my_headset = null + +/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user) + . = ..() + if(my_headset) + . += "It is wearing \a [my_headset]." + +/mob/living/simple_mob/animal/passive/bird/parrot/Initialize() + if(my_headset) + my_headset = new my_headset(src) + return ..() + +// Subtypes. + +// Best Bird +/mob/living/simple_mob/animal/passive/bird/parrot/poly + name = "Poly" + desc = "It's a parrot. An expert on quantum cracker theory." + icon_state = "poly" + icon_rest = "poly-held" + icon_dead = "poly-dead" + tt_desc = "E Ara macao" + attack_armor_pen = 20 //HE HAS THE B E A K + my_headset = /obj/item/device/radio/headset/headset_eng + say_list_type = /datum/say_list/bird/poly + +// Best Bird with best headset. +/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate + my_headset = /obj/item/device/radio/headset/omni + +/mob/living/simple_mob/animal/passive/bird/parrot/kea + name = "kea" + desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \ + They are known to be intelligent and curious, which has made some consider them a pest." + icon_state = "kea" + icon_rest = "kea-held" + icon_dead = "kea-dead" + tt_desc = "E Nestor notabilis" + +/mob/living/simple_mob/animal/passive/bird/parrot/eclectus + name = "eclectus" + desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \ + A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage." + icon_state = "eclectus" + icon_rest = "eclectus-held" + icon_dead = "eclectus-dead" + tt_desc = "E Eclectus roratus" + +/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/Initialize() + gender = pick(MALE, FEMALE) + if(gender == FEMALE) + icon_state = "eclectusf" + icon_rest = "eclectusf-held" + icon_dead = "eclectusf-dead" + return ..() + +/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot + name = "grey parrot" + desc = "A species of parrot. This one is predominantly grey, but has red tail feathers." + icon_state = "agrey" + icon_rest = "agrey-held" + icon_dead = "agrey-dead" + tt_desc = "E Psittacus erithacus" + +/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique + name = "black-headed caique" + desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques." + icon_state = "bcaique" + icon_rest = "bcaique-held" + icon_dead = "bcaique-dead" + tt_desc = "E Pionites melanocephalus" + +/mob/living/simple_mob/animal/passive/bird/parrot/white_caique + name = "white-bellied caique" + desc = "A species of parrot, they are also known as the Green-Thighed Parrot." + icon_state = "wcaique" + icon_rest = "wcaique-held" + icon_dead = "wcaique-dead" + tt_desc = "E Pionites leucogaster" + +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar + name = "budgerigar" + desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ + This one is has its natural colors of green and yellow." + icon_state = "gbudge" + icon_rest = "gbudge-held" + icon_dead = "gbudge-dead" + tt_desc = "E Melopsittacus undulatus" + +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue + icon_state = "bbudge" + icon_rest = "bbudge-held" + icon_dead = "bbudge-dead" + desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ + This one has a mutation which altered its color to be blue instead of green and yellow." + +/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen + icon_state = "bgbudge" + icon_rest = "bgbudge-held" + icon_dead = "bgbudge-dead" + desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \ + This one has a mutation which altered its color to be a mix of blue and green." + +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel + name = "cockatiel" + desc = "A species of parrot. This one has a highly visible crest." + icon_state = "tiel" + icon_rest = "tiel-held" + icon_dead = "tiel-dead" + tt_desc = "E Nymphicus hollandicus" + +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white + icon_state = "wtiel" + icon_rest = "wtiel-held" + icon_dead = "wtiel-dead" + +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish + icon_state = "luttiel" + icon_rest = "luttiel-held" + icon_dead = "luttiel-dead" + +/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey + icon_state = "blutiel" // idk why this is blu. + icon_rest = "blutiel-held" + icon_dead = "blutiel-dead" + +// This actually might be the yellow-crested cockatoo but idk. +/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo + name = "sulphur-crested cockatoo" + desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow." + icon_state = "too" + icon_rest = "too-held" + icon_dead = "too-dead" + tt_desc = "E Cacatua galerita" + +// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk. +/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo + name = "white cockatoo" + desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest." + icon_state = "utoo" + icon_rest = "utoo-held" + icon_dead = "utoo-dead" + tt_desc = "E Cacatua alba" + +/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo + name = "pink cockatoo" + desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \ + in honor of a human surveyor and explorer who existed before humans fully explored their home planet." + icon_state = "mtoo" + icon_rest = "mtoo-held" + icon_dead = "mtoo-dead" + tt_desc = "E Lophochroa leadbeateri" + + +// AI +/datum/ai_holder/simple_mob/passive/parrot + speak_chance = 2 + base_wander_delay = 8 + +/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message) + if(holder.stat || !holder.say_list || !message || speaker == holder) + return + var/datum/say_list/S = holder.say_list + S.speak |= message diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm index 08014b8746..11397bafe5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm @@ -1,66 +1,66 @@ -// Diyaabs are rather weak, but tend to exist in large numbers. -// They cooperate with other diyaabs, in order to swarm whoever decides to pick on the little fluffy critter. -// A cleaving weapon like an axe will make short work of the pack. - -/datum/category_item/catalogue/fauna/diyaab - name = "Sivian Fauna - Diyaab" - desc = "Classification: S Choeros hirtus\ -

                    \ - Small, social omnivores with dense seasonal wool fur valued by Sivian colonists for its cold resistance and softness. \ - The Diyaab lives in packs of anywhere from three to ten individuals, usually comprised of a family unit. Primarily herbivorous browsers, \ - supplementing their diet with organisms living in tree bark, \ - Diyaab packs have been observed to hunt prey several times their size during the less plentiful winter months. \ - Despite their unassuming appearance, the Diyaab possesses remarkably sharp anterior teeth." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/sif/diyaab - name = "diyaab" - desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion." - tt_desc = "S Choeros hirtus" //diyaab and shantak are technically reletives! - catalogue_data = list(/datum/category_item/catalogue/fauna/diyaab) - - faction = "diyaab" - - icon_state = "diyaab" - icon_living = "diyaab" - icon_dead = "diyaab_dead" - icon = 'icons/jungle.dmi' - - maxHealth = 25 - health = 25 - - meat_amount = 2 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - movement_cooldown = -1 - - melee_damage_lower = 2 - melee_damage_upper = 6 - base_attack_cooldown = 1 SECOND - attack_sharp = TRUE //Bleeds, but it shouldn't rip off a limb? - attacktext = list("gouged") - - say_list_type = /datum/say_list/diyaab - ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative - - // What do you hit the mob with (on help) to get something from it? - harvest_tool = /obj/item/weapon/tool/wirecutters - // How long do we have to wait until it's harvestable again? - harvest_cooldown = 10 MINUTES - // How long does it take to harvest? - harvest_delay = 30 SECONDS - // What world.time was the last harvest? - harvest_recent = 0 - // How many times do we roll on the chance table? - harvest_per_hit = 1 - // Verb for harvesting. "sheared" "clipped" etc. - harvest_verb = "sheared" - // Associative list of paths and their chances. path = straws in the lot - harvest_results = list( - /obj/item/stack/material/cloth/diyaab = 10 - ) - -/datum/say_list/diyaab - speak = list("Awrr?", "Aowrl!", "Worrl.") - emote_see = list("sniffs the air cautiously","looks around") - emote_hear = list("snuffles") +// Diyaabs are rather weak, but tend to exist in large numbers. +// They cooperate with other diyaabs, in order to swarm whoever decides to pick on the little fluffy critter. +// A cleaving weapon like an axe will make short work of the pack. + +/datum/category_item/catalogue/fauna/diyaab + name = "Sivian Fauna - Diyaab" + desc = "Classification: S Choeros hirtus\ +

                    \ + Small, social omnivores with dense seasonal wool fur valued by Sivian colonists for its cold resistance and softness. \ + The Diyaab lives in packs of anywhere from three to ten individuals, usually comprised of a family unit. Primarily herbivorous browsers, \ + supplementing their diet with organisms living in tree bark, \ + Diyaab packs have been observed to hunt prey several times their size during the less plentiful winter months. \ + Despite their unassuming appearance, the Diyaab possesses remarkably sharp anterior teeth." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/sif/diyaab + name = "diyaab" + desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion." + tt_desc = "S Choeros hirtus" //diyaab and shantak are technically reletives! + catalogue_data = list(/datum/category_item/catalogue/fauna/diyaab) + + faction = "diyaab" + + icon_state = "diyaab" + icon_living = "diyaab" + icon_dead = "diyaab_dead" + icon = 'icons/jungle.dmi' + + maxHealth = 25 + health = 25 + + meat_amount = 2 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + + movement_cooldown = -1 + + melee_damage_lower = 2 + melee_damage_upper = 6 + base_attack_cooldown = 1 SECOND + attack_sharp = TRUE //Bleeds, but it shouldn't rip off a limb? + attacktext = list("gouged") + + say_list_type = /datum/say_list/diyaab + ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative + + // What do you hit the mob with (on help) to get something from it? + harvest_tool = /obj/item/weapon/tool/wirecutters + // How long do we have to wait until it's harvestable again? + harvest_cooldown = 10 MINUTES + // How long does it take to harvest? + harvest_delay = 30 SECONDS + // What world.time was the last harvest? + harvest_recent = 0 + // How many times do we roll on the chance table? + harvest_per_hit = 1 + // Verb for harvesting. "sheared" "clipped" etc. + harvest_verb = "sheared" + // Associative list of paths and their chances. path = straws in the lot + harvest_results = list( + /obj/item/stack/material/cloth/diyaab = 10 + ) + +/datum/say_list/diyaab + speak = list("Awrr?", "Aowrl!", "Worrl.") + emote_see = list("sniffs the air cautiously","looks around") + emote_hear = list("snuffles") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm index bc238262c6..6da1b8b1e6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm @@ -1,88 +1,88 @@ -// Saviks are dangerous, angry creatures that hit hard, and will berserk if losing a fight. - -/datum/category_item/catalogue/fauna/savik - name = "Sivian Fauna - Savik" - desc = "Classification: S Pistris tellus\ -

                    \ - A predatory warm-blooded reptillian species covered in a layer of insulating down feathers. \ - The Savik's preferred method of hunting is to burrow under deep snow drifts, and lie in ambush for prey. \ - The Savik has been known to lie in wait for days at a time, generating heat by vibrating its shoulder plates \ - at a nigh inperceptable frequency while most of its body enters a state of sopor in order to conserve energy. \ -

                    \ - Once the Savik detects its prey, it will charge with incredible kinetic force with the two enormous, \ - angled bony plates on either side of the Savik's upper body acting as a natural snow plow, \ - allowing frightening ease of movement through deep snow. Due to the long periods between feeding, \ - the Savik will hunt its prey with absolute perseverence, as failure to catch a suitable meal is likely to \ - spell death for the animal due to the high energy expenditure of its initial strike. \ - The Savik has no known predators, and should be avoided at all costs." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/animal/sif/savik - name = "savik" - tt_desc = "S Pistris tellus" //landshark - catalogue_data = list(/datum/category_item/catalogue/fauna/savik) - faction = "savik" - - icon_state = "savik" - icon_living = "savik" - icon_dead = "savik_dead" - icon = 'icons/jungle.dmi' - - maxHealth = 125 - health = 125 - minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps - movement_cooldown = -1 - heat_resist = -0.50 - cold_resist = 0.75 - melee_damage_lower = 15 - melee_damage_upper = 35 - attack_armor_pen = 15 - attack_sharp = TRUE - attack_edge = TRUE - melee_attack_delay = 1 SECOND - attacktext = list("mauled") - - organ_names = /decl/mob_organ_names/savik - - player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \ - a short period of time, however it will tire you and you will be much weaker for awhile after it expires." - - tame_items = list( - /obj/item/organ = 70, - /obj/item/weapon/reagent_containers/food/snacks/crabmeat = 30, - /obj/item/weapon/reagent_containers/food/snacks/meat = 20 - ) - - say_list_type = /datum/say_list/savik - ai_holder_type = /datum/ai_holder/simple_mob/savik - - -/datum/say_list/savik - speak = list("Hruuugh!","Hrunnph") - emote_see = list("paws the ground","shakes its mane","stomps") - emote_hear = list("snuffles") - -/mob/living/simple_mob/animal/sif/savik/handle_special() - if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc)) - if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently. - berserk() - -/mob/living/simple_mob/animal/sif/savik/fail_tame(var/obj/O, var/mob/user) - ..() - - if(prob(30)) // They don't like people messing with them and their food. - berserk() - -/datum/ai_holder/simple_mob/savik - mauling = TRUE - -// So players can use it too. -/mob/living/simple_mob/animal/sif/savik/verb/berserk() - set name = "Berserk" - set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards." - set category = "Abilities" - - add_modifier(/datum/modifier/berserk, 30 SECONDS) - -/decl/mob_organ_names/savik - hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "right bone plate", "left bone plate", "tail", "left claw", "right claw") +// Saviks are dangerous, angry creatures that hit hard, and will berserk if losing a fight. + +/datum/category_item/catalogue/fauna/savik + name = "Sivian Fauna - Savik" + desc = "Classification: S Pistris tellus\ +

                    \ + A predatory warm-blooded reptillian species covered in a layer of insulating down feathers. \ + The Savik's preferred method of hunting is to burrow under deep snow drifts, and lie in ambush for prey. \ + The Savik has been known to lie in wait for days at a time, generating heat by vibrating its shoulder plates \ + at a nigh inperceptable frequency while most of its body enters a state of sopor in order to conserve energy. \ +

                    \ + Once the Savik detects its prey, it will charge with incredible kinetic force with the two enormous, \ + angled bony plates on either side of the Savik's upper body acting as a natural snow plow, \ + allowing frightening ease of movement through deep snow. Due to the long periods between feeding, \ + the Savik will hunt its prey with absolute perseverence, as failure to catch a suitable meal is likely to \ + spell death for the animal due to the high energy expenditure of its initial strike. \ + The Savik has no known predators, and should be avoided at all costs." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/animal/sif/savik + name = "savik" + tt_desc = "S Pistris tellus" //landshark + catalogue_data = list(/datum/category_item/catalogue/fauna/savik) + faction = "savik" + + icon_state = "savik" + icon_living = "savik" + icon_dead = "savik_dead" + icon = 'icons/jungle.dmi' + + maxHealth = 125 + health = 125 + minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps + movement_cooldown = -1 + heat_resist = -0.50 + cold_resist = 0.75 + melee_damage_lower = 15 + melee_damage_upper = 35 + attack_armor_pen = 15 + attack_sharp = TRUE + attack_edge = TRUE + melee_attack_delay = 1 SECOND + attacktext = list("mauled") + + organ_names = /decl/mob_organ_names/savik + + player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \ + a short period of time, however it will tire you and you will be much weaker for awhile after it expires." + + tame_items = list( + /obj/item/organ = 70, + /obj/item/weapon/reagent_containers/food/snacks/crabmeat = 30, + /obj/item/weapon/reagent_containers/food/snacks/meat = 20 + ) + + say_list_type = /datum/say_list/savik + ai_holder_type = /datum/ai_holder/simple_mob/savik + + +/datum/say_list/savik + speak = list("Hruuugh!","Hrunnph") + emote_see = list("paws the ground","shakes its mane","stomps") + emote_hear = list("snuffles") + +/mob/living/simple_mob/animal/sif/savik/handle_special() + if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc)) + if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently. + berserk() + +/mob/living/simple_mob/animal/sif/savik/fail_tame(var/obj/O, var/mob/user) + ..() + + if(prob(30)) // They don't like people messing with them and their food. + berserk() + +/datum/ai_holder/simple_mob/savik + mauling = TRUE + +// So players can use it too. +/mob/living/simple_mob/animal/sif/savik/verb/berserk() + set name = "Berserk" + set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards." + set category = "Abilities" + + add_modifier(/datum/modifier/berserk, 30 SECONDS) + +/decl/mob_organ_names/savik + hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "right bone plate", "left bone plate", "tail", "left claw", "right claw") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm index 339d5de1cb..b27533e037 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm @@ -1,115 +1,115 @@ -// Shantaks are essentially sif wolves. - -/datum/category_item/catalogue/fauna/shantak - name = "Sivian Fauna - Shantak" - desc = "Classification: S Choeros shantak\ -

                    \ - The Shantak is easily recognized by its iridescent, crystaline mane. \ - The creature's specially adapted hairs are hardened by a natural hard mineral coating, \ - thickest in the mane but present across the whole body. \ - As well as giving the Shantak a coat nigh-inpenetrable to all but the most specialized predator, \ - their hard, almost metallic coat gives them a slightly musical accent as they move. \ - The Shantak uses its powerful foreclaws for both den-building and foraging. \ -

                    \ - Observed to share several square-mile territories with a small number of other individuals, \ - the Shantak will rotate between several dens dug deep into the hard earth throughout the year, \ - while deftly avoiding others of its species outwith mating season. While other wildlife makes use of these dens, \ - the Shantak is fiercely territorial and will defend itself against any creature it perceives as a threat with reckless abandon. \ - Their diet consists primarily of fungi and insects found just below the permafrost." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/animal/sif/shantak - name = "shantak" - desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ - Don't be fooled by its beauty though." - tt_desc = "S Choeros shantak" - catalogue_data = list(/datum/category_item/catalogue/fauna/shantak) - - faction = "shantak" - - icon_state = "shantak" - icon_living = "shantak" - icon_dead = "shantak_dead" - icon = 'icons/jungle.dmi' - - maxHealth = 75 - armor_soak = list( - "melee" = 5, - "bullet" = 0, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - heat_resist = -0.50 - cold_resist = 0.75 - movement_cooldown = -1 - minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps - melee_damage_lower = 6 - melee_damage_upper = 14 - base_attack_cooldown = 1 SECOND - melee_attack_delay = 0.5 SECONDS - attack_armor_pen = 5 - attack_sharp = TRUE - attack_edge = TRUE - attacktext = list("gouged") - - organ_names = /decl/mob_organ_names/shantak - - say_list_type = /datum/say_list/shantak - - -/datum/say_list/shantak - speak = list("Shuhn.","Shrunnph?","Shunpf.") - emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves") - - -// The pack leader. -// Will command other shantaks to follow it. -/mob/living/simple_mob/animal/sif/shantak/leader - name = "big shantak" - desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ - This one seems bigger than the others, and has a commanding presence." - icon_scale_x = 1.5 - icon_scale_y = 1.5 - maxHealth = 125 - player_msg = "You have the ability to command other shantaks to follow you." - -/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack() - set name = "Rally Pack" - set desc = "Commands your fellow packmembers to follow you, the leader." - set category = "Abilities" - - for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src)) - if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves. - continue - if(!S.ai_holder) - continue - if(S.faction != src.faction) - continue - var/datum/ai_holder/AI = S.ai_holder - AI.set_follow(src) - -// Variant that automatically commands nearby allies to follow it when created. -// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers. -/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/Initialize() - rally_pack() - return ..() - -// These ones only retaliate. Used for PoIs. -/mob/living/simple_mob/animal/sif/shantak/retaliate - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - -/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - -//Vorestation Addition -/mob/living/simple_mob/animal/sif/shantak/scruffy - name = "Scruffy" - ai_holder_type = /datum/ai_holder/simple_mob/passive - makes_dirt = 0 - faction = "neutral" - -/decl/mob_organ_names/shantak - hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "mane", "snout") +// Shantaks are essentially sif wolves. + +/datum/category_item/catalogue/fauna/shantak + name = "Sivian Fauna - Shantak" + desc = "Classification: S Choeros shantak\ +

                    \ + The Shantak is easily recognized by its iridescent, crystaline mane. \ + The creature's specially adapted hairs are hardened by a natural hard mineral coating, \ + thickest in the mane but present across the whole body. \ + As well as giving the Shantak a coat nigh-inpenetrable to all but the most specialized predator, \ + their hard, almost metallic coat gives them a slightly musical accent as they move. \ + The Shantak uses its powerful foreclaws for both den-building and foraging. \ +

                    \ + Observed to share several square-mile territories with a small number of other individuals, \ + the Shantak will rotate between several dens dug deep into the hard earth throughout the year, \ + while deftly avoiding others of its species outwith mating season. While other wildlife makes use of these dens, \ + the Shantak is fiercely territorial and will defend itself against any creature it perceives as a threat with reckless abandon. \ + Their diet consists primarily of fungi and insects found just below the permafrost." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/animal/sif/shantak + name = "shantak" + desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ + Don't be fooled by its beauty though." + tt_desc = "S Choeros shantak" + catalogue_data = list(/datum/category_item/catalogue/fauna/shantak) + + faction = "shantak" + + icon_state = "shantak" + icon_living = "shantak" + icon_dead = "shantak_dead" + icon = 'icons/jungle.dmi' + + maxHealth = 75 + armor_soak = list( + "melee" = 5, + "bullet" = 0, + "laser" = 0, + "energy" = 0, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + heat_resist = -0.50 + cold_resist = 0.75 + movement_cooldown = -1 + minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps + melee_damage_lower = 6 + melee_damage_upper = 14 + base_attack_cooldown = 1 SECOND + melee_attack_delay = 0.5 SECONDS + attack_armor_pen = 5 + attack_sharp = TRUE + attack_edge = TRUE + attacktext = list("gouged") + + organ_names = /decl/mob_organ_names/shantak + + say_list_type = /datum/say_list/shantak + + +/datum/say_list/shantak + speak = list("Shuhn.","Shrunnph?","Shunpf.") + emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves") + + +// The pack leader. +// Will command other shantaks to follow it. +/mob/living/simple_mob/animal/sif/shantak/leader + name = "big shantak" + desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ + This one seems bigger than the others, and has a commanding presence." + icon_scale_x = 1.5 + icon_scale_y = 1.5 + maxHealth = 125 + player_msg = "You have the ability to command other shantaks to follow you." + +/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack() + set name = "Rally Pack" + set desc = "Commands your fellow packmembers to follow you, the leader." + set category = "Abilities" + + for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src)) + if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves. + continue + if(!S.ai_holder) + continue + if(S.faction != src.faction) + continue + var/datum/ai_holder/AI = S.ai_holder + AI.set_follow(src) + +// Variant that automatically commands nearby allies to follow it when created. +// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers. +/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/Initialize() + rally_pack() + return ..() + +// These ones only retaliate. Used for PoIs. +/mob/living/simple_mob/animal/sif/shantak/retaliate + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + +/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + +//Vorestation Addition +/mob/living/simple_mob/animal/sif/shantak/scruffy + name = "Scruffy" + ai_holder_type = /datum/ai_holder/simple_mob/passive + makes_dirt = 0 + faction = "neutral" + +/decl/mob_organ_names/shantak + hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "mane", "snout") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm index 1523d825d5..53e7f189b9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm @@ -1,256 +1,256 @@ -// Space carp show up as a random event to wreck hapless people in space or near windows. -// They generally fit the archetype of 'fast but fragile'. -// This is compensated by being in groups (usually). - -/datum/category_item/catalogue/fauna/carp - name = "Voidborne Fauna - Space Carp" - desc = "A strange descendant of some form of voidborne life, they are the most \ - common naturally void-faring lifeform found in human territory. They've been named \ - 'Space Carp' by various groups of spacers due to resembling the fish from Earth.\ -

                    \ - Their lifecycle begins as a fungus-like growth, sometimes found on the walls of spacecraft \ - and space stations, before growing into a form which allows for independent travel. Even \ - when fully grown, they can sometimes be found to stow away on the hulls of spaceborne objects, \ - which might explain how they became widespread across many star systems.\ -

                    \ - Carp have a special gas bladder inside of them, which they utilize as a means of movement in \ - space by stategically releasing the gas to propel themselves in a process that resembles \ - thrusters on a spacecraft. The gas contained inside the carp also allows them \ - to float when inside an atmosphere. The carp might also spray 'spores' using a similar method.\ -

                    \ - They are hypercarnivorous to the point of cannibalism, consuming their own dead in order to \ - sustain themselves during hard times, which are rather frequent due to their prey being \ - vastly technologically advanced. For human habitats that are well secured, carp are generally \ - an annoyance. For those unable to adequately protect themselves, however, they can be \ - rather dangerous, especially if a mass migration of carp arrives." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/space/carp - name = "space carp" - desc = "A ferocious, fang-bearing creature that resembles a fish." - catalogue_data = list(/datum/category_item/catalogue/fauna/carp) - icon_state = "carp" - icon_living = "carp" - icon_dead = "carp_dead" - icon_gib = "carp_gib" - - faction = "carp" - maxHealth = 25 - health = 25 - movement_cooldown = -2 - hovering = TRUE - - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - - melee_damage_lower = 7 // About 14 DPS. - melee_damage_upper = 7 - base_attack_cooldown = 10 // One attack a second. - attack_sharp = TRUE - attack_sound = 'sound/weapons/bite.ogg' - attacktext = list("bitten") - - organ_names = /decl/mob_organ_names/fish - - meat_amount = 5 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat - - ai_holder_type = /datum/ai_holder/simple_mob/melee - - var/knockdown_chance = 15 - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(prob(knockdown_chance)) - L.add_modifier(/datum/modifier/entangled, 4 SECONDS) //CHOMPedit, replacing weaken/slowdown with slow down - L.visible_message(span("danger", "\The [src] knocks down \the [L]!")) - -// Subtypes. - -// Won't wander away. -/mob/living/simple_mob/animal/space/carp/event - ai_holder_type = /datum/ai_holder/simple_mob/event - - -/mob/living/simple_mob/animal/space/carp/large - name = "elder carp" - desc = "An older, more matured carp. Few survive to this age due to their aggressiveness." - icon = 'icons/mob/64x32.dmi' - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - - maxHealth = 50 - health = 50 - movement_cooldown = 1 // Slower than the younger carp. - mob_size = MOB_LARGE - - pixel_x = -16 - default_pixel_x = -16 - icon_expected_width = 64 - icon_expected_height = 32 - - meat_amount = 7 - - -/mob/living/simple_mob/animal/space/carp/large/huge - name = "great white carp" - desc = "A very rare breed of carp- and a very aggressive one." - icon = 'icons/mob/64x64.dmi' - icon_dead = "megacarp_dead" - icon_living = "megacarp" - icon_state = "megacarp" - - maxHealth = 230 - health = 230 - movement_cooldown = 3 - - melee_damage_lower = 15 // About 20 DPS. - melee_damage_upper = 25 - - pixel_y = -16 - default_pixel_y = -16 - icon_expected_width = 64 - icon_expected_height = 64 - - meat_amount = 15 - - knockdown_chance = 15 - -/mob/living/simple_mob/animal/space/carp/large/huge/vorny - name = "great white carp" - desc = "A very rare breed of carp- and a very hungry one." - icon = 'icons/mob/64x64.dmi' - icon_dead = "megacarp_dead" - icon_living = "megacarp" - icon_state = "megacarp" - - maxHealth = 230 - health = 230 - movement_cooldown = 3 - - melee_damage_lower = 1 // Minimal damage to make the knockdown work. - melee_damage_upper = 1 - - pixel_y = -16 - default_pixel_y = -16 - icon_expected_width = 64 - icon_expected_height = 64 - - meat_amount = 15 - - knockdown_chance = 50 - ai_holder_type = /datum/ai_holder/simple_mob/vore - -/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore() - if(!voremob_loaded) //CHOMPAdd - return //CHOMPAdd - .=..() //CHOMPEdit - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "You've been swallowed whole and alive by a massive white carp! The stomach around you is oppressively tight, squeezing and grinding wrinkled walls across your body, making it hard to make any movement at all. The chamber is flooded with fluids that completely overwhelm you." - B.mode_flags = DM_FLAG_THICKBELLY -// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change - B.digest_brute = 2 - B.digest_burn = 2 - B.digest_oxy = 1 - B.digestchance = 100 - B.absorbchance = 0 - B.escapechance = 3 - B.selective_preference = DM_DIGEST - B.escape_stun = 10 - -/mob/living/simple_mob/animal/space/carp/holographic - name = "holographic carp" - desc = "An obviously holographic, but still ferocious looking carp." - // Might be worth using a filter similar to AI holograms in the future. - icon = 'icons/mob/AI.dmi' - icon_state = "holo4" - icon_living = "holo4" - icon_dead = "holo4" - alpha = 127 - icon_gib = null - meat_amount = 0 - meat_type = null - - mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp. - -/mob/living/simple_mob/animal/space/carp/holographic/Initialize() - set_light(2) // Hologram lighting. - return ..() - -// Presumably the holodeck emag code requires this. -// Pass TRUE to make safe. Pass FALSE to make unsafe. -/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe) - if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var. - ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE. - ai_holder.forget_everything() // Reset state so it'll stop chewing on its target. - -// Called on death. -/mob/living/simple_mob/animal/space/carp/holographic/proc/derez() - visible_message(span("notice", "\The [src] fades away!")) - qdel(src) - -/mob/living/simple_mob/animal/space/carp/holographic/gib() - derez() // Holograms can't gib. - -/mob/living/simple_mob/animal/space/carp/holographic/death() - ..() - derez() - -// a slow-moving carp with the appearance of a sea mine and behaviour of a sea mine -/mob/living/simple_mob/animal/space/carp/puffer - name = "puffercarp" - desc = "A bloated, inflated carp covered in spines." - catalogue_data = list(/datum/category_item/catalogue/fauna/carp, /datum/category_item/catalogue/fauna/carp/puffer) - icon_state = "puffercarp" - icon_living = "puffercarp" - icon_dead = "puffercarp_dead" - icon_gib = "generic_gib" - movement_cooldown = 15 - var/ready_to_blow = TRUE - -/datum/category_item/catalogue/fauna/carp/puffer - name = "Voidborne Fauna - Space Carp: puffer variant" - desc = "An unusual subspecies of space carp with a novel defensive \ - and reproductive strategy - once the puffercarp is ready to spread spores \ - it begins to produce a highly volatile compound within its gas bladders, \ - which in addition to providing them with a means of propulsion through space \ - as per most space carp species, affords the puffercarp with a somewhat unique trait \ - - namely, that they are able to ignite and detonate their gas bladders \ - at will, and will do so aggressively when threatened. The bladders also tend to ignite \ - when struck by thermal or electrical discharges, or even sympathetic detonation from \ - other explosives - including other nearby puffercarp. As a result, most voidborne \ - predators have a tendency to keep clear, but even if this deterrent doesn't work the resulting \ - explosion serves to scatter their spores over a massive area - this improved seeding \ - strategy compared to regular carp results in the propagation of the species despite the \ - fact that it means each adult carp can only reproduce exactly once. \ -

                    \ - Due to their premature mortality it is extremely rare to see a puffercarp grow to any notable \ - size, often appearing to be somewhat stunted in growth compared to other subspecies, \ - their gas bloating being the only thing that brings them close to \ - the normal scale of an adult carp. " - value = CATALOGUER_REWARD_HARD //if you can hang around close enough to this thing without setting it off, you deserve it - -/mob/living/simple_mob/animal/space/carp/puffer/proc/kaboom() - if(ready_to_blow) - ready_to_blow = FALSE - gib() - var/turf/T = get_turf(src) - explosion(T, -1, -1, 4, 4) - - -/mob/living/simple_mob/animal/space/carp/puffer/apply_melee_effects() //it gets close enough to attack? EXPLODE - kaboom() - -/mob/living/simple_mob/animal/space/carp/puffer/adjustFireLoss(var/amount,var/include_robo) //you make it hot? EXPLODE - if(amount>0) - kaboom() - ..() - -/mob/living/simple_mob/animal/space/carp/puffer/ex_act() //explode? YOU BETTER BELIEVE THAT'S AN EXPLODE +// Space carp show up as a random event to wreck hapless people in space or near windows. +// They generally fit the archetype of 'fast but fragile'. +// This is compensated by being in groups (usually). + +/datum/category_item/catalogue/fauna/carp + name = "Voidborne Fauna - Space Carp" + desc = "A strange descendant of some form of voidborne life, they are the most \ + common naturally void-faring lifeform found in human territory. They've been named \ + 'Space Carp' by various groups of spacers due to resembling the fish from Earth.\ +

                    \ + Their lifecycle begins as a fungus-like growth, sometimes found on the walls of spacecraft \ + and space stations, before growing into a form which allows for independent travel. Even \ + when fully grown, they can sometimes be found to stow away on the hulls of spaceborne objects, \ + which might explain how they became widespread across many star systems.\ +

                    \ + Carp have a special gas bladder inside of them, which they utilize as a means of movement in \ + space by stategically releasing the gas to propel themselves in a process that resembles \ + thrusters on a spacecraft. The gas contained inside the carp also allows them \ + to float when inside an atmosphere. The carp might also spray 'spores' using a similar method.\ +

                    \ + They are hypercarnivorous to the point of cannibalism, consuming their own dead in order to \ + sustain themselves during hard times, which are rather frequent due to their prey being \ + vastly technologically advanced. For human habitats that are well secured, carp are generally \ + an annoyance. For those unable to adequately protect themselves, however, they can be \ + rather dangerous, especially if a mass migration of carp arrives." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/space/carp + name = "space carp" + desc = "A ferocious, fang-bearing creature that resembles a fish." + catalogue_data = list(/datum/category_item/catalogue/fauna/carp) + icon_state = "carp" + icon_living = "carp" + icon_dead = "carp_dead" + icon_gib = "carp_gib" + + faction = "carp" + maxHealth = 25 + health = 25 + movement_cooldown = -2 + hovering = TRUE + + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + melee_damage_lower = 7 // About 14 DPS. + melee_damage_upper = 7 + base_attack_cooldown = 10 // One attack a second. + attack_sharp = TRUE + attack_sound = 'sound/weapons/bite.ogg' + attacktext = list("bitten") + + organ_names = /decl/mob_organ_names/fish + + meat_amount = 5 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat + + ai_holder_type = /datum/ai_holder/simple_mob/melee + + var/knockdown_chance = 15 + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + if(prob(knockdown_chance)) + L.add_modifier(/datum/modifier/entangled, 4 SECONDS) //CHOMPedit, replacing weaken/slowdown with slow down + L.visible_message(span("danger", "\The [src] knocks down \the [L]!")) + +// Subtypes. + +// Won't wander away. +/mob/living/simple_mob/animal/space/carp/event + ai_holder_type = /datum/ai_holder/simple_mob/event + + +/mob/living/simple_mob/animal/space/carp/large + name = "elder carp" + desc = "An older, more matured carp. Few survive to this age due to their aggressiveness." + icon = 'icons/mob/64x32.dmi' + icon_state = "shark" + icon_living = "shark" + icon_dead = "shark_dead" + + maxHealth = 50 + health = 50 + movement_cooldown = 1 // Slower than the younger carp. + mob_size = MOB_LARGE + + pixel_x = -16 + default_pixel_x = -16 + icon_expected_width = 64 + icon_expected_height = 32 + + meat_amount = 7 + + +/mob/living/simple_mob/animal/space/carp/large/huge + name = "great white carp" + desc = "A very rare breed of carp- and a very aggressive one." + icon = 'icons/mob/64x64.dmi' + icon_dead = "megacarp_dead" + icon_living = "megacarp" + icon_state = "megacarp" + + maxHealth = 230 + health = 230 + movement_cooldown = 3 + + melee_damage_lower = 15 // About 20 DPS. + melee_damage_upper = 25 + + pixel_y = -16 + default_pixel_y = -16 + icon_expected_width = 64 + icon_expected_height = 64 + + meat_amount = 15 + + knockdown_chance = 15 + +/mob/living/simple_mob/animal/space/carp/large/huge/vorny + name = "great white carp" + desc = "A very rare breed of carp- and a very hungry one." + icon = 'icons/mob/64x64.dmi' + icon_dead = "megacarp_dead" + icon_living = "megacarp" + icon_state = "megacarp" + + maxHealth = 230 + health = 230 + movement_cooldown = 3 + + melee_damage_lower = 1 // Minimal damage to make the knockdown work. + melee_damage_upper = 1 + + pixel_y = -16 + default_pixel_y = -16 + icon_expected_width = 64 + icon_expected_height = 64 + + meat_amount = 15 + + knockdown_chance = 50 + ai_holder_type = /datum/ai_holder/simple_mob/vore + +/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore() + if(!voremob_loaded) //CHOMPAdd + return //CHOMPAdd + .=..() //CHOMPEdit + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "You've been swallowed whole and alive by a massive white carp! The stomach around you is oppressively tight, squeezing and grinding wrinkled walls across your body, making it hard to make any movement at all. The chamber is flooded with fluids that completely overwhelm you." + B.mode_flags = DM_FLAG_THICKBELLY +// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change + B.digest_brute = 2 + B.digest_burn = 2 + B.digest_oxy = 1 + B.digestchance = 100 + B.absorbchance = 0 + B.escapechance = 3 + B.selective_preference = DM_DIGEST + B.escape_stun = 10 + +/mob/living/simple_mob/animal/space/carp/holographic + name = "holographic carp" + desc = "An obviously holographic, but still ferocious looking carp." + // Might be worth using a filter similar to AI holograms in the future. + icon = 'icons/mob/AI.dmi' + icon_state = "holo4" + icon_living = "holo4" + icon_dead = "holo4" + alpha = 127 + icon_gib = null + meat_amount = 0 + meat_type = null + + mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp. + +/mob/living/simple_mob/animal/space/carp/holographic/Initialize() + set_light(2) // Hologram lighting. + return ..() + +// Presumably the holodeck emag code requires this. +// Pass TRUE to make safe. Pass FALSE to make unsafe. +/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe) + if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var. + ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE. + ai_holder.forget_everything() // Reset state so it'll stop chewing on its target. + +// Called on death. +/mob/living/simple_mob/animal/space/carp/holographic/proc/derez() + visible_message(span("notice", "\The [src] fades away!")) + qdel(src) + +/mob/living/simple_mob/animal/space/carp/holographic/gib() + derez() // Holograms can't gib. + +/mob/living/simple_mob/animal/space/carp/holographic/death() + ..() + derez() + +// a slow-moving carp with the appearance of a sea mine and behaviour of a sea mine +/mob/living/simple_mob/animal/space/carp/puffer + name = "puffercarp" + desc = "A bloated, inflated carp covered in spines." + catalogue_data = list(/datum/category_item/catalogue/fauna/carp, /datum/category_item/catalogue/fauna/carp/puffer) + icon_state = "puffercarp" + icon_living = "puffercarp" + icon_dead = "puffercarp_dead" + icon_gib = "generic_gib" + movement_cooldown = 15 + var/ready_to_blow = TRUE + +/datum/category_item/catalogue/fauna/carp/puffer + name = "Voidborne Fauna - Space Carp: puffer variant" + desc = "An unusual subspecies of space carp with a novel defensive \ + and reproductive strategy - once the puffercarp is ready to spread spores \ + it begins to produce a highly volatile compound within its gas bladders, \ + which in addition to providing them with a means of propulsion through space \ + as per most space carp species, affords the puffercarp with a somewhat unique trait \ + - namely, that they are able to ignite and detonate their gas bladders \ + at will, and will do so aggressively when threatened. The bladders also tend to ignite \ + when struck by thermal or electrical discharges, or even sympathetic detonation from \ + other explosives - including other nearby puffercarp. As a result, most voidborne \ + predators have a tendency to keep clear, but even if this deterrent doesn't work the resulting \ + explosion serves to scatter their spores over a massive area - this improved seeding \ + strategy compared to regular carp results in the propagation of the species despite the \ + fact that it means each adult carp can only reproduce exactly once. \ +

                    \ + Due to their premature mortality it is extremely rare to see a puffercarp grow to any notable \ + size, often appearing to be somewhat stunted in growth compared to other subspecies, \ + their gas bloating being the only thing that brings them close to \ + the normal scale of an adult carp. " + value = CATALOGUER_REWARD_HARD //if you can hang around close enough to this thing without setting it off, you deserve it + +/mob/living/simple_mob/animal/space/carp/puffer/proc/kaboom() + if(ready_to_blow) + ready_to_blow = FALSE + gib() + var/turf/T = get_turf(src) + explosion(T, -1, -1, 4, 4) + + +/mob/living/simple_mob/animal/space/carp/puffer/apply_melee_effects() //it gets close enough to attack? EXPLODE + kaboom() + +/mob/living/simple_mob/animal/space/carp/puffer/adjustFireLoss(var/amount,var/include_robo) //you make it hot? EXPLODE + if(amount>0) + kaboom() + ..() + +/mob/living/simple_mob/animal/space/carp/puffer/ex_act() //explode? YOU BETTER BELIEVE THAT'S AN EXPLODE kaboom() \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm index b153305e89..abb01bf348 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm @@ -1,23 +1,23 @@ -/mob/living/simple_mob/animal/space/goose/domesticated - name = "domesticated goose" - desc = "It's a domesticated goose. It still looks pretty angry." - faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack - - can_be_drop_prey = TRUE //CHOMP Add - -/mob/living/simple_mob/animal/space/goose/domesticated/casino - name = "Donella" - desc = "It's a golden goose named Donella, she is a beloved treasure of the golden goose casino, nobody knows where she comes from." - icon_state = "golden_goose" - icon_living = "golden_goose" - icon_dead = "golden_goose_dead" - icon = 'modular_chomp/icons/mob/animal_ch.dmi' - - faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack - - maxHealth = 75 - health = 75 - - harm_intent_damage = 10 - melee_damage_lower = 10 - melee_damage_upper = 10 +/mob/living/simple_mob/animal/space/goose/domesticated + name = "domesticated goose" + desc = "It's a domesticated goose. It still looks pretty angry." + faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack + + can_be_drop_prey = TRUE //CHOMP Add + +/mob/living/simple_mob/animal/space/goose/domesticated/casino + name = "Donella" + desc = "It's a golden goose named Donella, she is a beloved treasure of the golden goose casino, nobody knows where she comes from." + icon_state = "golden_goose" + icon_living = "golden_goose" + icon_dead = "golden_goose_dead" + icon = 'modular_chomp/icons/mob/animal_ch.dmi' + + faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack + + maxHealth = 75 + health = 75 + + harm_intent_damage = 10 + melee_damage_lower = 10 + melee_damage_upper = 10 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_vr.dm index 203bd79109..830964f05f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_vr.dm @@ -1,7 +1,7 @@ -/datum/category_item/catalogue/fauna/geese - name = "Planetary Fauna - Geese" - desc = "A goose. HONK. Not much to catalogue, they're exactly the same as their earth counterparts." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/animal/space/goose/virgo3b +/datum/category_item/catalogue/fauna/geese + name = "Planetary Fauna - Geese" + desc = "A goose. HONK. Not much to catalogue, they're exactly the same as their earth counterparts." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/animal/space/goose/virgo3b faction = "virgo3b" \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm index b7f77e6410..a96df2f7ac 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm @@ -1,15 +1,15 @@ -// 'Space' mobs don't care about atmos (like carp) -/mob/living/simple_mob/animal/space - 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 - -// They can also, you know, move around, in space -/mob/living/simple_mob/animal/space/Process_Spacemove(var/check_drift = 0) +// 'Space' mobs don't care about atmos (like carp) +/mob/living/simple_mob/animal/space + 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 + +// They can also, you know, move around, in space +/mob/living/simple_mob/animal/space/Process_Spacemove(var/check_drift = 0) return TRUE \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/vox.dm b/code/modules/mob/living/simple_mob/subtypes/animal/vox.dm index 4cc3b416d1..fabd8b2e55 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/vox.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/vox.dm @@ -1,173 +1,173 @@ -/mob/living/simple_mob/vox - min_oxy = 0 - max_oxy = 0 - min_tox = 5 - max_tox = 0 - min_co2 = 0 - max_co2 = 5 - min_n2 = 0 //breathe N2 - max_n2 = 0 - - // CHOMPAdd: Pain sounds - species_sounds = "Vox" - pain_emote_1p = list("shriek") - pain_emote_3p = list("shrieks") - // CHOMPAdd End - -/mob/living/simple_mob/vox/armalis - name = "serpentine alien" - real_name = "serpentine alien" - desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" - icon = 'icons/mob/vox.dmi' - icon_state = "armalis" - icon_living = "armalis" - maxHealth = 500 - health = 500 - response_harm = "slashes at the" - harm_intent_damage = 0 - melee_damage_lower = 30 - melee_damage_upper = 40 - attacktext = "slammed its enormous claws into" - movement_cooldown = 2 -// environment_smash_flags = SMASH_LIGHT_STRUCTURES | SMASH_CONTAINERS | SMASH_WALLS // WALLS Temporary commenting, YW - Hv3 - attack_sound = 'sound/weapons/bladeslice.ogg' - status_flags = 0 - max_oxy = 0 - - var/armour = null - var/amp = null - var/quills = 3 - -/mob/living/simple_mob/vox/armalis/death(var/gibbed = FALSE) - ..(TRUE) - var/turf/gloc = get_turf(loc) - visible_message("[src] shudders violently and explodes!","You feel your body rupture!") - gib() - explosion(gloc, -1, -1, 3, 5) - qdel(src) - -/mob/living/simple_mob/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) - base_attack_cooldown = 5 - if(O.force) - if(O.force >= 25) - var/damage = O.force - if (O.damtype == HALLOSS) - damage = 0 - health -= damage - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("[src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("The [O] bounces harmlessly off of [src]. ") - else - to_chat(usr, "This weapon is ineffective, it does no damage.") - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("[user] gently taps [src] with the [O]. ") - -/mob/living/simple_mob/vox/armalis/verb/fire_quill(mob/target as mob in oview()) - - - set name = "Fire quill" - set desc = "Fires a viciously pointed quill at a high speed." - set category = "Alien" - - if(quills<=0) - return - - to_chat(src, "You launch a razor-sharp quill at [target]!") - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - to_chat(O, "[src] launches a razor-sharp quill at [target]!") - - var/obj/item/weapon/arrow/quill/Q = new(loc) - Q.fingerprintslast = src.ckey - Q.throw_at(target,10,30) - quills-- - - spawn(100) - to_chat(src, "You feel a fresh quill slide into place.") - quills++ - -/mob/living/simple_mob/vox/armalis/verb/message_mob() - set category = "Alien" - set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." - - var/list/targets = list() - var/target = null - var/text = null - - targets += getmobs() //Fill list, prompt user with list - target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - text = input("What would you like to say?", "Speak to creature", null, null) - - if (!target || !text) - return - - var/mob/M = targets[target] - - if(istype(M, /mob/observer/dead) || M.stat == DEAD) - to_chat(src, "Not even the armalis can speak to the dead.") - return - - to_chat(M, "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]") - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == "Vox") - return - to_chat(H, "Your nose begins to bleed...") - H.drip(1) - -/mob/living/simple_mob/vox/armalis/verb/shriek() - set category = "Alien" - set name = "Shriek" - set desc = "Give voice to a psychic shriek." - -/mob/living/simple_mob/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O,/obj/item/vox/armalis_armour)) - user.drop_item(O) - armour = O - movement_cooldown = 4 - maxHealth += 200 - health += 200 - visible_message("[src] is quickly outfitted in [O] by [user].","You quickly outfit [src] in [O].") - regenerate_icons() - return - if(istype(O,/obj/item/vox/armalis_amp)) - user.drop_item(O) - amp = O - visible_message("[src] is quickly outfitted in [O] by [user].","You quickly outfit [src] in [O].") - regenerate_icons() - return - return ..() - -/mob/living/simple_mob/vox/armalis/regenerate_icons() - ..() - overlays = list() - if(armour) - var/icon/armour = image('icons/mob/vox.dmi',"armour") - movement_cooldown = 4 - overlays += armour - if(amp) - var/icon/amp = image('icons/mob/vox.dmi',"amplifier") - overlays += amp - return - -/obj/item/vox/armalis_armour - - name = "strange armour" - desc = "Hulking reinforced armour for something huge." - icon = 'icons/inventory/suit/item.dmi' - icon_state = "armalis_armour" - item_state = "armalis_armour" - -/obj/item/vox/armalis_amp - - name = "strange lenses" - desc = "A series of metallic lenses and chains." - icon = 'icons/inventory/head/item.dmi' - icon_state = "amp" - item_state = "amp" +/mob/living/simple_mob/vox + min_oxy = 0 + max_oxy = 0 + min_tox = 5 + max_tox = 0 + min_co2 = 0 + max_co2 = 5 + min_n2 = 0 //breathe N2 + max_n2 = 0 + + // CHOMPAdd: Pain sounds + species_sounds = "Vox" + pain_emote_1p = list("shriek") + pain_emote_3p = list("shrieks") + // CHOMPAdd End + +/mob/living/simple_mob/vox/armalis + name = "serpentine alien" + real_name = "serpentine alien" + desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" + icon = 'icons/mob/vox.dmi' + icon_state = "armalis" + icon_living = "armalis" + maxHealth = 500 + health = 500 + response_harm = "slashes at the" + harm_intent_damage = 0 + melee_damage_lower = 30 + melee_damage_upper = 40 + attacktext = "slammed its enormous claws into" + movement_cooldown = 2 +// environment_smash_flags = SMASH_LIGHT_STRUCTURES | SMASH_CONTAINERS | SMASH_WALLS // WALLS Temporary commenting, YW - Hv3 + attack_sound = 'sound/weapons/bladeslice.ogg' + status_flags = 0 + max_oxy = 0 + + var/armour = null + var/amp = null + var/quills = 3 + +/mob/living/simple_mob/vox/armalis/death(var/gibbed = FALSE) + ..(TRUE) + var/turf/gloc = get_turf(loc) + visible_message("[src] shudders violently and explodes!","You feel your body rupture!") + gib() + explosion(gloc, -1, -1, 3, 5) + qdel(src) + +/mob/living/simple_mob/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) + base_attack_cooldown = 5 + if(O.force) + if(O.force >= 25) + var/damage = O.force + if (O.damtype == HALLOSS) + damage = 0 + health -= damage + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("[src] has been attacked with the [O] by [user]. ") + else + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("The [O] bounces harmlessly off of [src]. ") + else + to_chat(usr, "This weapon is ineffective, it does no damage.") + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("[user] gently taps [src] with the [O]. ") + +/mob/living/simple_mob/vox/armalis/verb/fire_quill(mob/target as mob in oview()) + + + set name = "Fire quill" + set desc = "Fires a viciously pointed quill at a high speed." + set category = "Alien" + + if(quills<=0) + return + + to_chat(src, "You launch a razor-sharp quill at [target]!") + for(var/mob/O in oviewers()) + if ((O.client && !( O.blinded ))) + to_chat(O, "[src] launches a razor-sharp quill at [target]!") + + var/obj/item/weapon/arrow/quill/Q = new(loc) + Q.fingerprintslast = src.ckey + Q.throw_at(target,10,30) + quills-- + + spawn(100) + to_chat(src, "You feel a fresh quill slide into place.") + quills++ + +/mob/living/simple_mob/vox/armalis/verb/message_mob() + set category = "Alien" + set name = "Commune with creature" + set desc = "Send a telepathic message to an unlucky recipient." + + var/list/targets = list() + var/target = null + var/text = null + + targets += getmobs() //Fill list, prompt user with list + target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets + text = input("What would you like to say?", "Speak to creature", null, null) + + if (!target || !text) + return + + var/mob/M = targets[target] + + if(istype(M, /mob/observer/dead) || M.stat == DEAD) + to_chat(src, "Not even the armalis can speak to the dead.") + return + + to_chat(M, "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]") + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.name == "Vox") + return + to_chat(H, "Your nose begins to bleed...") + H.drip(1) + +/mob/living/simple_mob/vox/armalis/verb/shriek() + set category = "Alien" + set name = "Shriek" + set desc = "Give voice to a psychic shriek." + +/mob/living/simple_mob/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O,/obj/item/vox/armalis_armour)) + user.drop_item(O) + armour = O + movement_cooldown = 4 + maxHealth += 200 + health += 200 + visible_message("[src] is quickly outfitted in [O] by [user].","You quickly outfit [src] in [O].") + regenerate_icons() + return + if(istype(O,/obj/item/vox/armalis_amp)) + user.drop_item(O) + amp = O + visible_message("[src] is quickly outfitted in [O] by [user].","You quickly outfit [src] in [O].") + regenerate_icons() + return + return ..() + +/mob/living/simple_mob/vox/armalis/regenerate_icons() + ..() + overlays = list() + if(armour) + var/icon/armour = image('icons/mob/vox.dmi',"armour") + movement_cooldown = 4 + overlays += armour + if(amp) + var/icon/amp = image('icons/mob/vox.dmi',"amplifier") + overlays += amp + return + +/obj/item/vox/armalis_armour + + name = "strange armour" + desc = "Hulking reinforced armour for something huge." + icon = 'icons/inventory/suit/item.dmi' + icon_state = "armalis_armour" + item_state = "armalis_armour" + +/obj/item/vox/armalis_amp + + name = "strange lenses" + desc = "A series of metallic lenses and chains." + icon = 'icons/inventory/head/item.dmi' + icon_state = "amp" + item_state = "amp" diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm index c6e78d0520..67038fffbe 100644 --- a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm +++ b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm @@ -1,92 +1,92 @@ -// Blob simple_mobs generally get made from the blob random event. -// They're considered slimes for the purposes of attack bonuses from certain weapons. - -// Do not spawn, this is a base type. -/mob/living/simple_mob/blob - icon = 'icons/mob/blob.dmi' - pass_flags = PASSBLOB | PASSTABLE - faction = "blob" - - organ_names = /decl/mob_organ_names/blob - - heat_damage_per_tick = 0 - cold_damage_per_tick = 0 - 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 - - taser_kill = FALSE - - var/mob/observer/blob/overmind = null - var/obj/structure/blob/factory/factory = null - var/datum/blob_type/blob_type = null // Used for the blob core items, as they have no overmind mob. - - mob_class = MOB_CLASS_SLIME - ai_holder_type = /datum/ai_holder/simple_mob/melee - - can_be_drop_prey = FALSE //CHOMP Add - can_pain_emote = FALSE // CHOMPEdit: Can't feel pain - -/mob/living/simple_mob/blob/speech_bubble_appearance() - return "slime" - -/mob/living/simple_mob/blob/update_icons() - if(overmind) - color = overmind.blob_type.complementary_color - else if(blob_type) - color = blob_type.complementary_color - else - color = null - ..() - -/mob/living/simple_mob/blob/Destroy() - if(overmind) - overmind.blob_mobs -= src - if(blob_type) - blob_type = null - return ..() - -/mob/living/simple_mob/blob/blob_act(obj/structure/blob/B) - if(!overmind && B.overmind) - overmind = B.overmind - faction = B.overmind.blob_type.faction - update_icon() - - if(faction != B.faction && B.overmind) - adjustBruteLoss(rand(B.overmind.blob_type.damage_lower, B.overmind.blob_type.damage_upper)) - - else if(stat != DEAD && health < maxHealth) - adjustBruteLoss(-maxHealth*0.0125) - adjustFireLoss(-maxHealth*0.0125) - -/mob/living/simple_mob/blob/CanPass(atom/movable/mover, turf/target) - if(istype(mover, /obj/structure/blob)) // Don't block blobs from expanding onto a tile occupied by a blob mob. - return TRUE - return ..() - -/mob/living/simple_mob/blob/Process_Spacemove() - for(var/obj/structure/blob/B in range(1, src)) - return TRUE - return ..() - -/mob/living/simple_mob/blob/IIsAlly(mob/living/L) - var/ally = ..(L) - if(!ally) - var/list/items = L.get_all_held_items() - for(var/obj/item/I in items) - if(istype(I, /obj/item/weapon/blobcore_chunk)) - var/obj/item/weapon/blobcore_chunk/BC = I - if(!overmind || (BC.blob_type && overmind.blob_type.type == BC.blob_type.type) || BC.blob_type.faction == faction) - ally = TRUE - break - - return ally - -/decl/mob_organ_names/blob - hit_zones = list("mass") +// Blob simple_mobs generally get made from the blob random event. +// They're considered slimes for the purposes of attack bonuses from certain weapons. + +// Do not spawn, this is a base type. +/mob/living/simple_mob/blob + icon = 'icons/mob/blob.dmi' + pass_flags = PASSBLOB | PASSTABLE + faction = "blob" + + organ_names = /decl/mob_organ_names/blob + + heat_damage_per_tick = 0 + cold_damage_per_tick = 0 + 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 + + taser_kill = FALSE + + var/mob/observer/blob/overmind = null + var/obj/structure/blob/factory/factory = null + var/datum/blob_type/blob_type = null // Used for the blob core items, as they have no overmind mob. + + mob_class = MOB_CLASS_SLIME + ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add + can_pain_emote = FALSE // CHOMPEdit: Can't feel pain + +/mob/living/simple_mob/blob/speech_bubble_appearance() + return "slime" + +/mob/living/simple_mob/blob/update_icons() + if(overmind) + color = overmind.blob_type.complementary_color + else if(blob_type) + color = blob_type.complementary_color + else + color = null + ..() + +/mob/living/simple_mob/blob/Destroy() + if(overmind) + overmind.blob_mobs -= src + if(blob_type) + blob_type = null + return ..() + +/mob/living/simple_mob/blob/blob_act(obj/structure/blob/B) + if(!overmind && B.overmind) + overmind = B.overmind + faction = B.overmind.blob_type.faction + update_icon() + + if(faction != B.faction && B.overmind) + adjustBruteLoss(rand(B.overmind.blob_type.damage_lower, B.overmind.blob_type.damage_upper)) + + else if(stat != DEAD && health < maxHealth) + adjustBruteLoss(-maxHealth*0.0125) + adjustFireLoss(-maxHealth*0.0125) + +/mob/living/simple_mob/blob/CanPass(atom/movable/mover, turf/target) + if(istype(mover, /obj/structure/blob)) // Don't block blobs from expanding onto a tile occupied by a blob mob. + return TRUE + return ..() + +/mob/living/simple_mob/blob/Process_Spacemove() + for(var/obj/structure/blob/B in range(1, src)) + return TRUE + return ..() + +/mob/living/simple_mob/blob/IIsAlly(mob/living/L) + var/ally = ..(L) + if(!ally) + var/list/items = L.get_all_held_items() + for(var/obj/item/I in items) + if(istype(I, /obj/item/weapon/blobcore_chunk)) + var/obj/item/weapon/blobcore_chunk/BC = I + if(!overmind || (BC.blob_type && overmind.blob_type.type == BC.blob_type.type) || BC.blob_type.faction == faction) + ally = TRUE + break + + return ally + +/decl/mob_organ_names/blob + hit_zones = list("mass") diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm index c9511ad0a9..141bdf5d47 100644 --- a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm @@ -1,160 +1,160 @@ -// Spores are made from blob factories. -// They are very weak and expendable, but can overwhelm when a lot of them are together. -// When attacking, spores will hit harder if near other friendly spores. -// Some blobs can infest dead non-robotic mobs, making them into Not Zombies. - -/mob/living/simple_mob/blob/spore - name = "blob spore" - desc = "A floating, fragile spore." - - icon_state = "blobpod" - icon_living = "blobpod" - glow_range = 3 - glow_intensity = 5 - layer = ABOVE_MOB_LAYER // Over the blob. - - health = 30 - maxHealth = 30 - melee_damage_lower = 2 - melee_damage_upper = 4 - movement_cooldown = -2 - hovering = TRUE - - attacktext = list("slammed into") - attack_sound = 'sound/effects/slime_squish.ogg' - say_list_type = /datum/say_list/spore - - organ_names = /decl/mob_organ_names/spore - - var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie. - var/can_infest = FALSE - var/is_infesting = FALSE - - can_pain_emote = FALSE // CHOMPEdit: Can't feel pain - -/datum/say_list/spore - emote_see = list("sways", "inflates briefly") - -/datum/say_list/infested - emote_see = list("shambles around", "twitches", "stares") - - -/mob/living/simple_mob/blob/spore/infesting - name = "infesting blob spore" - can_infest = TRUE - -/mob/living/simple_mob/blob/spore/weak - name = "fragile blob spore" - health = 15 - maxHealth = 15 - melee_damage_lower = 1 - melee_damage_upper = 2 - -/mob/living/simple_mob/blob/spore/Initialize(mapload, var/obj/structure/blob/factory/my_factory) - if(istype(my_factory)) - factory = my_factory - factory.spores += src - return ..() - -/mob/living/simple_mob/blob/spore/Destroy() - if(factory) - factory.spores -= src - factory = null - if(infested) - infested.forceMove(get_turf(src)) - visible_message(span("warning", "\The [infested] falls to the ground as the blob spore bursts.")) - infested = null - return ..() - -/mob/living/simple_mob/blob/spore/death(gibbed, deathmessage = "bursts!") - if(overmind) - overmind.blob_type.on_spore_death(src) - ..(gibbed, deathmessage) - qdel(src) - -/mob/living/simple_mob/blob/spore/update_icons() - ..() // This will cut our overlays. - - if(overmind) - color = overmind.blob_type.complementary_color - glow_color = color - glow_toggle = TRUE - else if(blob_type) - color = blob_type.complementary_color - glow_color = color - glow_toggle = TRUE - else - color = null - glow_color = null - glow_toggle = FALSE - - if(is_infesting) - icon = infested.icon - copy_overlays(infested) - var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") - if(overmind) - blob_head_overlay.color = overmind.blob_type.complementary_color - color = initial(color)//looks better. - add_overlay(blob_head_overlay, TRUE) - -/mob/living/simple_mob/blob/spore/handle_special() - ..() - if(can_infest && !is_infesting && isturf(loc)) - for(var/mob/living/carbon/human/H in view(src,1)) - if(H.stat != DEAD) // We want zombies. - continue - if(H.isSynthetic()) // Not philosophical zombies. - continue - infest(H) - break - - if(overmind) - overmind.blob_type.on_spore_lifetick(src) - - if(factory && z != factory.z) // This is to prevent spores getting lost in space and making the factory useless. - qdel(src) - -/mob/living/simple_mob/blob/spore/proc/infest(mob/living/carbon/human/H) - is_infesting = TRUE - if(H.wear_suit) - var/obj/item/clothing/suit/A = H.wear_suit - if(A.armor && A.armor["melee"]) - maxHealth += A.armor["melee"] //That zombie's got armor, I want armor! - - maxHealth += 40 - health = maxHealth - name = "Infested [H.real_name]" // Not using the Z word. - desc = "A parasitic organism attached to a deceased body, controlling it directly as if it were a puppet." - melee_damage_lower += 8 // 10 total. - melee_damage_upper += 11 // 15 total. - attacktext = list("clawed") - - H.forceMove(src) - infested = H - - say_list = new /datum/say_list/infested() - - update_icons() - visible_message(span("warning", "The corpse of [H.name] suddenly rises!")) - -/mob/living/simple_mob/blob/spore/GetIdCard() - if(infested) // If we've infested someone, use their ID. - return infested.GetIdCard() - -/mob/living/simple_mob/blob/spore/apply_bonus_melee_damage(A, damage_to_do) - var/helpers = 0 - for(var/mob/living/simple_mob/blob/spore/S in view(1, src)) - if(S == src) // Don't count ourselves. - continue - if(!IIsAlly(S)) // Only friendly spores make us stronger. - continue - // Friendly spores contribute 1/4th of their averaged attack power to our attack. - damage_to_do += ((S.melee_damage_lower + S.melee_damage_upper) / 2) / 4 - helpers++ - - if(helpers) - to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s.")) - return damage_to_do - -/decl/mob_organ_names/spore - hit_zones = list("sporangium", "stolon", "sporangiophore") +// Spores are made from blob factories. +// They are very weak and expendable, but can overwhelm when a lot of them are together. +// When attacking, spores will hit harder if near other friendly spores. +// Some blobs can infest dead non-robotic mobs, making them into Not Zombies. + +/mob/living/simple_mob/blob/spore + name = "blob spore" + desc = "A floating, fragile spore." + + icon_state = "blobpod" + icon_living = "blobpod" + glow_range = 3 + glow_intensity = 5 + layer = ABOVE_MOB_LAYER // Over the blob. + + health = 30 + maxHealth = 30 + melee_damage_lower = 2 + melee_damage_upper = 4 + movement_cooldown = -2 + hovering = TRUE + + attacktext = list("slammed into") + attack_sound = 'sound/effects/slime_squish.ogg' + say_list_type = /datum/say_list/spore + + organ_names = /decl/mob_organ_names/spore + + var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie. + var/can_infest = FALSE + var/is_infesting = FALSE + + can_pain_emote = FALSE // CHOMPEdit: Can't feel pain + +/datum/say_list/spore + emote_see = list("sways", "inflates briefly") + +/datum/say_list/infested + emote_see = list("shambles around", "twitches", "stares") + + +/mob/living/simple_mob/blob/spore/infesting + name = "infesting blob spore" + can_infest = TRUE + +/mob/living/simple_mob/blob/spore/weak + name = "fragile blob spore" + health = 15 + maxHealth = 15 + melee_damage_lower = 1 + melee_damage_upper = 2 + +/mob/living/simple_mob/blob/spore/Initialize(mapload, var/obj/structure/blob/factory/my_factory) + if(istype(my_factory)) + factory = my_factory + factory.spores += src + return ..() + +/mob/living/simple_mob/blob/spore/Destroy() + if(factory) + factory.spores -= src + factory = null + if(infested) + infested.forceMove(get_turf(src)) + visible_message(span("warning", "\The [infested] falls to the ground as the blob spore bursts.")) + infested = null + return ..() + +/mob/living/simple_mob/blob/spore/death(gibbed, deathmessage = "bursts!") + if(overmind) + overmind.blob_type.on_spore_death(src) + ..(gibbed, deathmessage) + qdel(src) + +/mob/living/simple_mob/blob/spore/update_icons() + ..() // This will cut our overlays. + + if(overmind) + color = overmind.blob_type.complementary_color + glow_color = color + glow_toggle = TRUE + else if(blob_type) + color = blob_type.complementary_color + glow_color = color + glow_toggle = TRUE + else + color = null + glow_color = null + glow_toggle = FALSE + + if(is_infesting) + icon = infested.icon + copy_overlays(infested) + var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") + if(overmind) + blob_head_overlay.color = overmind.blob_type.complementary_color + color = initial(color)//looks better. + add_overlay(blob_head_overlay, TRUE) + +/mob/living/simple_mob/blob/spore/handle_special() + ..() + if(can_infest && !is_infesting && isturf(loc)) + for(var/mob/living/carbon/human/H in view(src,1)) + if(H.stat != DEAD) // We want zombies. + continue + if(H.isSynthetic()) // Not philosophical zombies. + continue + infest(H) + break + + if(overmind) + overmind.blob_type.on_spore_lifetick(src) + + if(factory && z != factory.z) // This is to prevent spores getting lost in space and making the factory useless. + qdel(src) + +/mob/living/simple_mob/blob/spore/proc/infest(mob/living/carbon/human/H) + is_infesting = TRUE + if(H.wear_suit) + var/obj/item/clothing/suit/A = H.wear_suit + if(A.armor && A.armor["melee"]) + maxHealth += A.armor["melee"] //That zombie's got armor, I want armor! + + maxHealth += 40 + health = maxHealth + name = "Infested [H.real_name]" // Not using the Z word. + desc = "A parasitic organism attached to a deceased body, controlling it directly as if it were a puppet." + melee_damage_lower += 8 // 10 total. + melee_damage_upper += 11 // 15 total. + attacktext = list("clawed") + + H.forceMove(src) + infested = H + + say_list = new /datum/say_list/infested() + + update_icons() + visible_message(span("warning", "The corpse of [H.name] suddenly rises!")) + +/mob/living/simple_mob/blob/spore/GetIdCard() + if(infested) // If we've infested someone, use their ID. + return infested.GetIdCard() + +/mob/living/simple_mob/blob/spore/apply_bonus_melee_damage(A, damage_to_do) + var/helpers = 0 + for(var/mob/living/simple_mob/blob/spore/S in view(1, src)) + if(S == src) // Don't count ourselves. + continue + if(!IIsAlly(S)) // Only friendly spores make us stronger. + continue + // Friendly spores contribute 1/4th of their averaged attack power to our attack. + damage_to_do += ((S.melee_damage_lower + S.melee_damage_upper) / 2) / 4 + helpers++ + + if(helpers) + to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s.")) + return damage_to_do + +/decl/mob_organ_names/spore + hit_zones = list("sporangium", "stolon", "sporangiophore") diff --git a/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm index b5b4ee313f..88492ec58e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm +++ b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm @@ -1,118 +1,118 @@ -// Illusion type mobs pretend to be other things visually, and generally cannot be harmed as they're not 'real'. - -/mob/living/simple_mob/illusion - name = "illusion" - desc = "If you can read me, the game broke. Please report this to a coder." - - resistance = 1000 // Holograms are tough. - heat_resist = 1 - cold_resist = 1 - shock_resist = 1 - poison_resist = 1 - - movement_cooldown = -2 - mob_bump_flag = 0 // If the illusion can't be swapped it will be obvious. - - response_help = "pushes a hand through" - response_disarm = "tried to disarm" - response_harm = "tried to punch" - - mob_class = MOB_CLASS_ILLUSION - - ai_holder_type = /datum/ai_holder/simple_mob/inert/astar // Gets controlled manually by technomancers/admins, with AI pathfinding assistance. - - var/atom/movable/copying = null // The thing we're trying to look like. - var/realistic = FALSE // If true, things like bullets and weapons will hit it, to be a bit more convincing from a distance. - - can_pain_emote = FALSE // CHOMPEdit: Hallucinations can't feel pain and shouldn't take damage anyways, but, sanity - -/mob/living/simple_mob/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance(). - return - -/mob/living/simple_mob/illusion/proc/copy_appearance(atom/movable/thing_to_copy) - if(!thing_to_copy) - return FALSE - appearance = thing_to_copy.appearance - copying = thing_to_copy - density = thing_to_copy.density // So you can't bump into objects that aren't supposed to be dense. - catalogue_data = thing_to_copy.get_catalogue_data() - catalogue_delay = thing_to_copy.catalogue_delay - return TRUE - -// Because we can't perfectly duplicate some examine() output, we directly examine the AM it is copying. It's messy but -// this is to prevent easy checks from the opposing force. -/mob/living/simple_mob/illusion/examine(mob/user) - if(copying) - return copying.examine(user) - else - return list("???") - -/mob/living/simple_mob/illusion/bullet_act(obj/item/projectile/P) - if(!P) - return - - if(realistic) - return ..() - - return PROJECTILE_FORCE_MISS - -/mob/living/simple_mob/illusion/attack_hand(mob/living/carbon/human/M) - if(!realistic) - playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message(span("warning", "\The [M]'s hand goes through \the [src]!")) - return - else - switch(M.a_intent) - if(I_HELP) - var/datum/gender/T = gender_datums[src.get_visible_gender()] - M.visible_message( - span("notice", "\The [M] hugs [src] to make [T.him] feel better!"), \ - span("notice", "You hug [src] to make [T.him] feel better!") - ) // slightly redundant as at the moment most mobs still use the normal gender var, but it works and future-proofs it - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - - if(I_DISARM) - playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message(span("danger", "\The [M] attempted to disarm [src]!")) - M.do_attack_animation(src) - - if(I_GRAB) - ..() - - if(I_HURT) - adjustBruteLoss(harm_intent_damage) - M.visible_message(span("danger", "\The [M] [response_harm] \the [src]")) - M.do_attack_animation(src) - -/mob/living/simple_mob/illusion/hit_with_weapon(obj/item/I, mob/living/user, effective_force, hit_zone) - if(realistic) - return ..() - - playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message(span("warning", "\The [user]'s [I] goes through \the [src]!")) - return FALSE - -/mob/living/simple_mob/illusion/ex_act() - return - -// Try to have the same tooltip, or else it becomes really obvious which one is fake. -/mob/living/simple_mob/illusion/get_nametag_name(mob/user) - if(copying) - return copying.get_nametag_name(user) - -/mob/living/simple_mob/illusion/get_nametag_desc(mob/user) - if(copying) - return copying.get_nametag_desc(user) - -// Cataloguer stuff. I don't think this will actually come up but better safe than sorry. -/mob/living/simple_mob/illusion/get_catalogue_data() - if(copying) - return copying.get_catalogue_data() - -/mob/living/simple_mob/illusion/can_catalogue() - if(copying) - return copying.can_catalogue() - -/mob/living/simple_mob/illusion/get_catalogue_delay() - if(copying) - return copying.get_catalogue_delay() +// Illusion type mobs pretend to be other things visually, and generally cannot be harmed as they're not 'real'. + +/mob/living/simple_mob/illusion + name = "illusion" + desc = "If you can read me, the game broke. Please report this to a coder." + + resistance = 1000 // Holograms are tough. + heat_resist = 1 + cold_resist = 1 + shock_resist = 1 + poison_resist = 1 + + movement_cooldown = -2 + mob_bump_flag = 0 // If the illusion can't be swapped it will be obvious. + + response_help = "pushes a hand through" + response_disarm = "tried to disarm" + response_harm = "tried to punch" + + mob_class = MOB_CLASS_ILLUSION + + ai_holder_type = /datum/ai_holder/simple_mob/inert/astar // Gets controlled manually by technomancers/admins, with AI pathfinding assistance. + + var/atom/movable/copying = null // The thing we're trying to look like. + var/realistic = FALSE // If true, things like bullets and weapons will hit it, to be a bit more convincing from a distance. + + can_pain_emote = FALSE // CHOMPEdit: Hallucinations can't feel pain and shouldn't take damage anyways, but, sanity + +/mob/living/simple_mob/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance(). + return + +/mob/living/simple_mob/illusion/proc/copy_appearance(atom/movable/thing_to_copy) + if(!thing_to_copy) + return FALSE + appearance = thing_to_copy.appearance + copying = thing_to_copy + density = thing_to_copy.density // So you can't bump into objects that aren't supposed to be dense. + catalogue_data = thing_to_copy.get_catalogue_data() + catalogue_delay = thing_to_copy.catalogue_delay + return TRUE + +// Because we can't perfectly duplicate some examine() output, we directly examine the AM it is copying. It's messy but +// this is to prevent easy checks from the opposing force. +/mob/living/simple_mob/illusion/examine(mob/user) + if(copying) + return copying.examine(user) + else + return list("???") + +/mob/living/simple_mob/illusion/bullet_act(obj/item/projectile/P) + if(!P) + return + + if(realistic) + return ..() + + return PROJECTILE_FORCE_MISS + +/mob/living/simple_mob/illusion/attack_hand(mob/living/carbon/human/M) + if(!realistic) + playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message(span("warning", "\The [M]'s hand goes through \the [src]!")) + return + else + switch(M.a_intent) + if(I_HELP) + var/datum/gender/T = gender_datums[src.get_visible_gender()] + M.visible_message( + span("notice", "\The [M] hugs [src] to make [T.him] feel better!"), \ + span("notice", "You hug [src] to make [T.him] feel better!") + ) // slightly redundant as at the moment most mobs still use the normal gender var, but it works and future-proofs it + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + + if(I_DISARM) + playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message(span("danger", "\The [M] attempted to disarm [src]!")) + M.do_attack_animation(src) + + if(I_GRAB) + ..() + + if(I_HURT) + adjustBruteLoss(harm_intent_damage) + M.visible_message(span("danger", "\The [M] [response_harm] \the [src]")) + M.do_attack_animation(src) + +/mob/living/simple_mob/illusion/hit_with_weapon(obj/item/I, mob/living/user, effective_force, hit_zone) + if(realistic) + return ..() + + playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message(span("warning", "\The [user]'s [I] goes through \the [src]!")) + return FALSE + +/mob/living/simple_mob/illusion/ex_act() + return + +// Try to have the same tooltip, or else it becomes really obvious which one is fake. +/mob/living/simple_mob/illusion/get_nametag_name(mob/user) + if(copying) + return copying.get_nametag_name(user) + +/mob/living/simple_mob/illusion/get_nametag_desc(mob/user) + if(copying) + return copying.get_nametag_desc(user) + +// Cataloguer stuff. I don't think this will actually come up but better safe than sorry. +/mob/living/simple_mob/illusion/get_catalogue_data() + if(copying) + return copying.get_catalogue_data() + +/mob/living/simple_mob/illusion/can_catalogue() + if(copying) + return copying.can_catalogue() + +/mob/living/simple_mob/illusion/get_catalogue_delay() + if(copying) + return copying.get_catalogue_delay() diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm index e001972ae8..09c4581125 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm @@ -1,71 +1,71 @@ -/* - A corrupted maintenance drone, produced from what seems like a bad factory. - They also tend to dodge while in melee range. - Code "borrowed" from viscerator drones. <3 -*/ - -/datum/category_item/catalogue/technology/drone/corrupt_maint_drone - name = "Drone - Corrupted Maintenance Drone" - desc = "This drone appears to be a station maintenance drone, produced by some sort of corrupt fab, \ - which has caused it to become corrupt and attack anything nearby, except spiders and such, oddy. \ - If one is found, a swarm of others are not too far away.\ -

                    \ - The drone struggles to harm large targets, due to it's small size, yet it possesses a welder, which allows \ - it to **ERROR** inject it's targets, in addition to the small slashes from it's skittering claws. \ - The simplistic AI inside attempts to attack and then run, as it is aware that it is fairly weak, \ - using evasive tactics to avoid harm." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/mechanical/corrupt_maint_drone - name = "Corrupt Maintenance Drone" - desc = "A small, normal-looking drone. It looks like one you'd find on station, except... IT'S COMING AT YOU!" - catalogue_data = list(/datum/category_item/catalogue/technology/drone/corrupt_maint_drone) - - icon = 'icons/mob/robots_vr.dmi' - icon_state = "corrupt-repairbot" - icon_living = "corrupt-repairbot" - hovering = FALSE // Can trigger landmines. - - faction = "underdark" - maxHealth = 25 - health = 25 - movement_cooldown = -1 - movement_sound = 'sound/effects/servostep.ogg' - - pass_flags = PASSTABLE - mob_swap_flags = 0 - mob_push_flags = 0 - - melee_damage_lower = 6 // Approx 12 DPS. - melee_damage_upper = 6 - base_attack_cooldown = 2.5 // Four attacks per second. - attack_sharp = TRUE - attack_edge = 1 - attack_sound = 'sound/weapons/bladeslice.ogg' - attacktext = list("cut", "sliced") - - var/poison_type = "welder fuel" // The reagent that gets injected when it attacks. - var/poison_chance = 35 // Chance for injection to occur. - var/poison_per_bite = 5 // Amount added per injection. - - ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive - - -/mob/living/simple_mob/mechanical/corrupt_maint_drone/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.reagents) - var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) - if(L.can_inject(src, null, target_zone)) - inject_poison(L, target_zone) - -// Does actual poison injection, after all checks passed. -/mob/living/simple_mob/mechanical/corrupt_maint_drone/proc/inject_poison(mob/living/L, target_zone) - if(prob(poison_chance)) - to_chat(L, "Something burns in your veins.") - L.reagents.add_reagent(poison_type, poison_per_bite) - - -/mob/living/simple_mob/mechanical/corrupt_maint_drone/death() - ..(null,"is smashed into pieces!") - qdel(src) +/* + A corrupted maintenance drone, produced from what seems like a bad factory. + They also tend to dodge while in melee range. + Code "borrowed" from viscerator drones. <3 +*/ + +/datum/category_item/catalogue/technology/drone/corrupt_maint_drone + name = "Drone - Corrupted Maintenance Drone" + desc = "This drone appears to be a station maintenance drone, produced by some sort of corrupt fab, \ + which has caused it to become corrupt and attack anything nearby, except spiders and such, oddy. \ + If one is found, a swarm of others are not too far away.\ +

                    \ + The drone struggles to harm large targets, due to it's small size, yet it possesses a welder, which allows \ + it to **ERROR** inject it's targets, in addition to the small slashes from it's skittering claws. \ + The simplistic AI inside attempts to attack and then run, as it is aware that it is fairly weak, \ + using evasive tactics to avoid harm." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/mechanical/corrupt_maint_drone + name = "Corrupt Maintenance Drone" + desc = "A small, normal-looking drone. It looks like one you'd find on station, except... IT'S COMING AT YOU!" + catalogue_data = list(/datum/category_item/catalogue/technology/drone/corrupt_maint_drone) + + icon = 'icons/mob/robots_vr.dmi' + icon_state = "corrupt-repairbot" + icon_living = "corrupt-repairbot" + hovering = FALSE // Can trigger landmines. + + faction = "underdark" + maxHealth = 25 + health = 25 + movement_cooldown = -1 + movement_sound = 'sound/effects/servostep.ogg' + + pass_flags = PASSTABLE + mob_swap_flags = 0 + mob_push_flags = 0 + + melee_damage_lower = 6 // Approx 12 DPS. + melee_damage_upper = 6 + base_attack_cooldown = 2.5 // Four attacks per second. + attack_sharp = TRUE + attack_edge = 1 + attack_sound = 'sound/weapons/bladeslice.ogg' + attacktext = list("cut", "sliced") + + var/poison_type = "welder fuel" // The reagent that gets injected when it attacks. + var/poison_chance = 35 // Chance for injection to occur. + var/poison_per_bite = 5 // Amount added per injection. + + ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive + + +/mob/living/simple_mob/mechanical/corrupt_maint_drone/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + if(L.reagents) + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + inject_poison(L, target_zone) + +// Does actual poison injection, after all checks passed. +/mob/living/simple_mob/mechanical/corrupt_maint_drone/proc/inject_poison(mob/living/L, target_zone) + if(prob(poison_chance)) + to_chat(L, "Something burns in your veins.") + L.reagents.add_reagent(poison_type, poison_per_bite) + + +/mob/living/simple_mob/mechanical/corrupt_maint_drone/death() + ..(null,"is smashed into pieces!") + qdel(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/disbot_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/disbot_vr.dm index 5ea69697d6..fbfedf1cd7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/disbot_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/disbot_vr.dm @@ -1,70 +1,70 @@ - -/datum/category_item/catalogue/technology/drone/infectionbot - name = "Drone - Injection Drone" - desc = "A strange and aged drone, this model appears to be made for gathering of genetic samples,\ - sacrificing both power and durability for storage space and advanced scanners.\ - The drone has clear dents and scratches all over it's casing bulging inwards in multiple areas,\ - some even penetrated showing the advanced and headache inducing parts inside.\ -

                    \ - This model in particular has a collection of hostile and spinetingeling parts on the underside,\ - small advanced anti-gravity generators located between giant syringes made for injecting and extracting all manners of fluids\ - and samples of soil or other biological matter.\ - Most interesting is the syringe it uses after taking a sample of any creature, the dry, flakey substance\ - it injects is rotten and expired toxins, seemingly once intended to heal damage from samples taken.\ - The container housing the substance as well as the fabricator showing great blunt trauma as well as environmental damage,\ - neither part salvageable but still operational, outputting near 0% efficiency making it near impossible to refill the housing unit this century.\ -

                    \ - The drone's frame extremily light weight but robust, unbendable by hand, is barren of any markings or ID,\ - no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/mechanical/infectionbot - name = "Strange robot" - desc = "You get the feeling you should run." - icon = 'icons/mob/vore.dmi' - icon_state = "vagrant" - icon_living = "vagrant" - icon_dead = "vagrant" - icon_gib = "vagrant" - - maxHealth = 65 - health = 40 - movement_cooldown = 1 - - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - faction = "vagrant" - harm_intent_damage = 3 - melee_damage_lower = 6 - melee_damage_upper = 9 - light_color = "#8a0707" - attacktext = "drugged" - attack_sound = 'sound/weapons/bite.ogg' - - ai_holder_type = /datum/ai_holder/simple_mob/melee - say_list_type = /datum/say_list/disbot - - var/poison_chance = 100 - var/poison_per_bite = 10 - var/poison_type = "expired_medicine" - -/datum/say_list/disbot - speak = list("ATTEMPTING TO CONTACT A.R.K, ATTEMPT 1e26+3","DIRT SAMPLE COLLECTED, DIRT QUOTA 124871/155 CONFIRMED.") - emote_see = list("scans the dirt around it","beeps as it scans a rock nearby") - say_maybe_target = list("BIOLOGICAL TRACES FOUND, ATTEMTPTING TO LOCATE SOURCE.","TRACE SOURCES FOUND, POWERING SCANNERS.",) - say_got_target = list("LIFEFORM LOCATED, ATTEMPTING TO COLLECT SAMPLE","CREATURE SPOTTED, PHEROMONE GENERATORS DAMAGED, ATTEMPTING TO COLLECT GENETIC SAMPLE.") - -/mob/living/simple_mob/mechanical/infectionbot/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.reagents) - var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) - if(L.can_inject(src, null, target_zone)) - inject_poison(L, target_zone) - -// Does actual poison injection, after all checks passed. -/mob/living/simple_mob/mechanical/infectionbot/proc/inject_poison(mob/living/L, target_zone) - if(prob(poison_chance)) - to_chat(L, "You feel a tiny prick.") - L.reagents.add_reagent(poison_type, poison_per_bite) + +/datum/category_item/catalogue/technology/drone/infectionbot + name = "Drone - Injection Drone" + desc = "A strange and aged drone, this model appears to be made for gathering of genetic samples,\ + sacrificing both power and durability for storage space and advanced scanners.\ + The drone has clear dents and scratches all over it's casing bulging inwards in multiple areas,\ + some even penetrated showing the advanced and headache inducing parts inside.\ +

                    \ + This model in particular has a collection of hostile and spinetingeling parts on the underside,\ + small advanced anti-gravity generators located between giant syringes made for injecting and extracting all manners of fluids\ + and samples of soil or other biological matter.\ + Most interesting is the syringe it uses after taking a sample of any creature, the dry, flakey substance\ + it injects is rotten and expired toxins, seemingly once intended to heal damage from samples taken.\ + The container housing the substance as well as the fabricator showing great blunt trauma as well as environmental damage,\ + neither part salvageable but still operational, outputting near 0% efficiency making it near impossible to refill the housing unit this century.\ +

                    \ + The drone's frame extremily light weight but robust, unbendable by hand, is barren of any markings or ID,\ + no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/mechanical/infectionbot + name = "Strange robot" + desc = "You get the feeling you should run." + icon = 'icons/mob/vore.dmi' + icon_state = "vagrant" + icon_living = "vagrant" + icon_dead = "vagrant" + icon_gib = "vagrant" + + maxHealth = 65 + health = 40 + movement_cooldown = 1 + + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + faction = "vagrant" + harm_intent_damage = 3 + melee_damage_lower = 6 + melee_damage_upper = 9 + light_color = "#8a0707" + attacktext = "drugged" + attack_sound = 'sound/weapons/bite.ogg' + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/disbot + + var/poison_chance = 100 + var/poison_per_bite = 10 + var/poison_type = "expired_medicine" + +/datum/say_list/disbot + speak = list("ATTEMPTING TO CONTACT A.R.K, ATTEMPT 1e26+3","DIRT SAMPLE COLLECTED, DIRT QUOTA 124871/155 CONFIRMED.") + emote_see = list("scans the dirt around it","beeps as it scans a rock nearby") + say_maybe_target = list("BIOLOGICAL TRACES FOUND, ATTEMTPTING TO LOCATE SOURCE.","TRACE SOURCES FOUND, POWERING SCANNERS.",) + say_got_target = list("LIFEFORM LOCATED, ATTEMPTING TO COLLECT SAMPLE","CREATURE SPOTTED, PHEROMONE GENERATORS DAMAGED, ATTEMPTING TO COLLECT GENETIC SAMPLE.") + +/mob/living/simple_mob/mechanical/infectionbot/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + if(L.reagents) + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + inject_poison(L, target_zone) + +// Does actual poison injection, after all checks passed. +/mob/living/simple_mob/mechanical/infectionbot/proc/inject_poison(mob/living/L, target_zone) + if(prob(poison_chance)) + to_chat(L, "You feel a tiny prick.") + L.reagents.add_reagent(poison_type, poison_per_bite) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm index 10d195f281..a0ceb1b1af 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm @@ -1,158 +1,158 @@ -// The GOLEM is a spell-flinging synthetic. - -/mob/living/simple_mob/mechanical/technomancer_golem - name = "unknown synthetic" - desc = "A rather unusual looking synthetic." - icon = 'icons/mob/mob.dmi' - icon_state = "golem" - health = 300 - maxHealth = 300 - - faction = "golem" - - response_help = "pets" - response_disarm = "pushes away" - response_harm = "punches" - harm_intent_damage = 3 - friendly = "hugs" - - organ_names = /decl/mob_organ_names/golem - - melee_damage_lower = 30 // It has a built in esword. - melee_damage_upper = 30 - attack_armor_pen = 20 - attack_sound = 'sound/weapons/blade1.ogg' - attacktext = list("slashed") - melee_attack_delay = 0.5 SECONDS // Even has custom attack animations. - ranged_attack_delay = 0.5 SECONDS - special_attack_delay = 1 SECOND - - special_attack_min_range = 0 - special_attack_max_range = 7 - - ai_holder_type = /datum/ai_holder/simple_mob/melee - - var/obj/item/weapon/technomancer_core/golem/core = null - var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells - var/mob/living/master = null - var/casting = FALSE // Used to ensure the correct animation is played. Testing if a spell exists won't always work as some spells delete themselves upon use. - - var/list/known_spells = list( - "beam" = /obj/item/weapon/spell/projectile/beam, - "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning, - "force missile" = /obj/item/weapon/spell/projectile/force_missile, - "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt, - "lightning" = /obj/item/weapon/spell/projectile/lightning, - "blink" = /obj/item/weapon/spell/blink, - "dispel" = /obj/item/weapon/spell/dispel, - "oxygenate" = /obj/item/weapon/spell/oxygenate, - "mend life" = /obj/item/weapon/spell/modifier/mend_life, - "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic, - "mend organs" = /obj/item/weapon/spell/mend_organs, - "purify" = /obj/item/weapon/spell/modifier/purify, - "resurrect" = /obj/item/weapon/spell/resurrect, - "passwall" = /obj/item/weapon/spell/passwall, - "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles, - "corona" = /obj/item/weapon/spell/modifier/corona, - "haste" = /obj/item/weapon/spell/modifier/haste - ) - -/mob/living/simple_mob/mechanical/technomancer_golem/Initialize() - core = new(src) - return ..() - -/mob/living/simple_mob/mechanical/technomancer_golem/Destroy() - qdel(core) - return ..() - -/mob/living/simple_mob/mechanical/technomancer_golem/unref_spell() - active_spell = null - return ..() - -/mob/living/simple_mob/mechanical/technomancer_golem/death() - ..() - visible_message("\The [src] disintegrates!") - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - -/mob/living/simple_mob/mechanical/technomancer_golem/place_spell_in_hand(var/path) - if(!path || !ispath(path)) - return FALSE - if(active_spell) - qdel(active_spell) - - active_spell = new path(src) - -/mob/living/simple_mob/mechanical/technomancer_golem/verb/test_giving_spells() - var/choice = tgui_input_list(usr, "What spell?", "Give spell", known_spells) - if(choice) - place_spell_in_hand(known_spells[choice]) - else - qdel(active_spell) - -/mob/living/simple_mob/mechanical/technomancer_golem/get_technomancer_core() - return core - -/mob/living/simple_mob/mechanical/technomancer_golem/can_special_attack(atom/A) - if(active_spell) // Don't bother checking everything else if no spell is ready. - return ..() - return FALSE - -/mob/living/simple_mob/mechanical/technomancer_golem/should_special_attack(atom/A) - return instability < 50 // Don't kill ourselves by casting everything. - - -/mob/living/simple_mob/mechanical/technomancer_golem/do_special_attack(atom/A) - var/proximity = Adjacent(A) - if(active_spell) - if(proximity && active_spell.cast_methods & CAST_MELEE) // Use melee method if available and close enough. - return active_spell.on_melee_cast(A, src) - else if(active_spell.cast_methods & CAST_RANGED) // Otherwise use ranged if possible. Will also work for point-blank range. - return active_spell.on_ranged_cast(A, src) - return ..() - -/mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A) - if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead. - special_pre_animation(A) - return - - flick("golem_pre_melee", src) // To force the animation to restart. - icon_living = "golem_pre_melee" // The animation will hold after this point until melee_post_animation() gets called. - icon_state = "golem_pre_melee" - setClickCooldown(2) - -/mob/living/simple_mob/mechanical/technomancer_golem/melee_post_animation(atom/A) - if(casting) // Some spells delete themselves when used, so we use a different variable set earlier instead. - special_post_animation(A) - return - - flick("golem_post_melee", src) - icon_living = "golem" - icon_state = "golem" - setClickCooldown(6) - -/mob/living/simple_mob/mechanical/technomancer_golem/ranged_pre_animation(atom/A) - flick("golem_pre_ranged", src) - icon_living = "golem_pre_ranged" - icon_state = "golem_pre_ranged" - setClickCooldown(5) - -/mob/living/simple_mob/mechanical/technomancer_golem/ranged_post_animation(atom/A) - flick("golem_post_ranged", src) - icon_living = "golem" - icon_state = "golem" - setClickCooldown(5) - -/mob/living/simple_mob/mechanical/technomancer_golem/special_pre_animation(atom/A) - casting = TRUE - ranged_pre_animation(A) // Both have the same animation. - -/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A) - casting = FALSE - ranged_post_animation(A) - -/decl/mob_organ_names/golem - hit_zones = list("helmet", "cuirass", "left tasset", "right tasset", "left gauntlet", "right gauntlet", "weapon") +// The GOLEM is a spell-flinging synthetic. + +/mob/living/simple_mob/mechanical/technomancer_golem + name = "unknown synthetic" + desc = "A rather unusual looking synthetic." + icon = 'icons/mob/mob.dmi' + icon_state = "golem" + health = 300 + maxHealth = 300 + + faction = "golem" + + response_help = "pets" + response_disarm = "pushes away" + response_harm = "punches" + harm_intent_damage = 3 + friendly = "hugs" + + organ_names = /decl/mob_organ_names/golem + + melee_damage_lower = 30 // It has a built in esword. + melee_damage_upper = 30 + attack_armor_pen = 20 + attack_sound = 'sound/weapons/blade1.ogg' + attacktext = list("slashed") + melee_attack_delay = 0.5 SECONDS // Even has custom attack animations. + ranged_attack_delay = 0.5 SECONDS + special_attack_delay = 1 SECOND + + special_attack_min_range = 0 + special_attack_max_range = 7 + + ai_holder_type = /datum/ai_holder/simple_mob/melee + + var/obj/item/weapon/technomancer_core/golem/core = null + var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells + var/mob/living/master = null + var/casting = FALSE // Used to ensure the correct animation is played. Testing if a spell exists won't always work as some spells delete themselves upon use. + + var/list/known_spells = list( + "beam" = /obj/item/weapon/spell/projectile/beam, + "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning, + "force missile" = /obj/item/weapon/spell/projectile/force_missile, + "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt, + "lightning" = /obj/item/weapon/spell/projectile/lightning, + "blink" = /obj/item/weapon/spell/blink, + "dispel" = /obj/item/weapon/spell/dispel, + "oxygenate" = /obj/item/weapon/spell/oxygenate, + "mend life" = /obj/item/weapon/spell/modifier/mend_life, + "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic, + "mend organs" = /obj/item/weapon/spell/mend_organs, + "purify" = /obj/item/weapon/spell/modifier/purify, + "resurrect" = /obj/item/weapon/spell/resurrect, + "passwall" = /obj/item/weapon/spell/passwall, + "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles, + "corona" = /obj/item/weapon/spell/modifier/corona, + "haste" = /obj/item/weapon/spell/modifier/haste + ) + +/mob/living/simple_mob/mechanical/technomancer_golem/Initialize() + core = new(src) + return ..() + +/mob/living/simple_mob/mechanical/technomancer_golem/Destroy() + qdel(core) + return ..() + +/mob/living/simple_mob/mechanical/technomancer_golem/unref_spell() + active_spell = null + return ..() + +/mob/living/simple_mob/mechanical/technomancer_golem/death() + ..() + visible_message("\The [src] disintegrates!") + new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + +/mob/living/simple_mob/mechanical/technomancer_golem/place_spell_in_hand(var/path) + if(!path || !ispath(path)) + return FALSE + if(active_spell) + qdel(active_spell) + + active_spell = new path(src) + +/mob/living/simple_mob/mechanical/technomancer_golem/verb/test_giving_spells() + var/choice = tgui_input_list(usr, "What spell?", "Give spell", known_spells) + if(choice) + place_spell_in_hand(known_spells[choice]) + else + qdel(active_spell) + +/mob/living/simple_mob/mechanical/technomancer_golem/get_technomancer_core() + return core + +/mob/living/simple_mob/mechanical/technomancer_golem/can_special_attack(atom/A) + if(active_spell) // Don't bother checking everything else if no spell is ready. + return ..() + return FALSE + +/mob/living/simple_mob/mechanical/technomancer_golem/should_special_attack(atom/A) + return instability < 50 // Don't kill ourselves by casting everything. + + +/mob/living/simple_mob/mechanical/technomancer_golem/do_special_attack(atom/A) + var/proximity = Adjacent(A) + if(active_spell) + if(proximity && active_spell.cast_methods & CAST_MELEE) // Use melee method if available and close enough. + return active_spell.on_melee_cast(A, src) + else if(active_spell.cast_methods & CAST_RANGED) // Otherwise use ranged if possible. Will also work for point-blank range. + return active_spell.on_ranged_cast(A, src) + return ..() + +/mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A) + if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead. + special_pre_animation(A) + return + + flick("golem_pre_melee", src) // To force the animation to restart. + icon_living = "golem_pre_melee" // The animation will hold after this point until melee_post_animation() gets called. + icon_state = "golem_pre_melee" + setClickCooldown(2) + +/mob/living/simple_mob/mechanical/technomancer_golem/melee_post_animation(atom/A) + if(casting) // Some spells delete themselves when used, so we use a different variable set earlier instead. + special_post_animation(A) + return + + flick("golem_post_melee", src) + icon_living = "golem" + icon_state = "golem" + setClickCooldown(6) + +/mob/living/simple_mob/mechanical/technomancer_golem/ranged_pre_animation(atom/A) + flick("golem_pre_ranged", src) + icon_living = "golem_pre_ranged" + icon_state = "golem_pre_ranged" + setClickCooldown(5) + +/mob/living/simple_mob/mechanical/technomancer_golem/ranged_post_animation(atom/A) + flick("golem_post_ranged", src) + icon_living = "golem" + icon_state = "golem" + setClickCooldown(5) + +/mob/living/simple_mob/mechanical/technomancer_golem/special_pre_animation(atom/A) + casting = TRUE + ranged_pre_animation(A) // Both have the same animation. + +/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A) + casting = FALSE + ranged_post_animation(A) + +/decl/mob_organ_names/golem + hit_zones = list("helmet", "cuirass", "left tasset", "right tasset", "left gauntlet", "right gauntlet", "weapon") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem_vr.dm index aab1387dbc..f0d6da0a86 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem_vr.dm @@ -1,10 +1,10 @@ -// Cataloguer data below - strange we can catalogue space golem wizards -/datum/category_item/catalogue/technology/drone/technomancer_golem - name = "Drone - Technomancer Golem" - desc = "Some sort of advanced, unnatural looking synthetic, built for combat.\ - It has a black-and-blue chassis, and wields some sort of... stun baton in it's hand.\ - The drone has pristine armor, black and shiny, with the blue synth-parts glowing visibly from inside.\ -

                    \ - The drone's frame is heavy and armored, unbendable by hand, is barren of any markings or ID,\ - no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." - value = CATALOGUER_REWARD_MEDIUM +// Cataloguer data below - strange we can catalogue space golem wizards +/datum/category_item/catalogue/technology/drone/technomancer_golem + name = "Drone - Technomancer Golem" + desc = "Some sort of advanced, unnatural looking synthetic, built for combat.\ + It has a black-and-blue chassis, and wields some sort of... stun baton in it's hand.\ + The drone has pristine armor, black and shiny, with the blue synth-parts glowing visibly from inside.\ +

                    \ + The drone's frame is heavy and armored, unbendable by hand, is barren of any markings or ID,\ + no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." + value = CATALOGUER_REWARD_MEDIUM diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot_vr.dm index 37a3eb81cf..ab63ffc4ae 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot_vr.dm @@ -1,7 +1,7 @@ -/datum/category_item/catalogue/technology/drone/hivebot // Hivebot Scanner Data - This is for Generic Hivebots - name = "Drone - Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to lack a specific weapon, \ - but uses a regular bullet-type weapon, firing a single projectile with a delay. Once upon a time, these bots may \ - have been used to be some sort of... security, or defensive machinery, at a guess, but their original/true purpose is \ - unclear. Whatever the matter, they're hostile and will engage anything they see, shooting to kill." - value = CATALOGUER_REWARD_HARD +/datum/category_item/catalogue/technology/drone/hivebot // Hivebot Scanner Data - This is for Generic Hivebots + name = "Drone - Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to lack a specific weapon, \ + but uses a regular bullet-type weapon, firing a single projectile with a delay. Once upon a time, these bots may \ + have been used to be some sort of... security, or defensive machinery, at a guess, but their original/true purpose is \ + unclear. Whatever the matter, they're hostile and will engage anything they see, shooting to kill." + value = CATALOGUER_REWARD_HARD diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm index 31c9cdf10f..4f57f313a3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm @@ -1,27 +1,27 @@ -/datum/category_item/catalogue/technology/drone/hivebot/rapidfire // Hivebot Scanner Data - This is for Rapidfire Hivebots - name = "Drone - Rapidfire Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - rifle, built for high-rate fire. Other than that, it has similar yellowish color \ - to regular hivebots." - value = CATALOGUER_REWARD_HARD - -/datum/category_item/catalogue/technology/drone/hivebot/laser // Hivebot Scanner Data - This is for Laser Hivebots - name = "Drone - Laser Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - laser weapon, different from ion bolts, firing bright, vibrant blue bolts of energy. Other than that, it has similar yellowish color \ - to regular hivebots." - value = CATALOGUER_REWARD_HARD - -/datum/category_item/catalogue/technology/drone/hivebot/ion // Hivebot Scanner Data - This is for Ion Hivebots - name = "Drone - Ion Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - electromagnetic pulse generator, firing bright, vibrant blue bolts of ion energy. Other than that, it has similar yellowish color \ - to regular hivebots." - value = CATALOGUER_REWARD_HARD - -/datum/category_item/catalogue/technology/drone/hivebot/strong // Hivebot Scanner Data - This is for Laser Hivebots - name = "Drone - Strong Laser Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - ballistic weapon. The weapon seems to fire larger projectiles, and it has heavier armor. Other than that, it has similar yellowish color \ - to regular hivebots." - value = CATALOGUER_REWARD_HARD +/datum/category_item/catalogue/technology/drone/hivebot/rapidfire // Hivebot Scanner Data - This is for Rapidfire Hivebots + name = "Drone - Rapidfire Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + rifle, built for high-rate fire. Other than that, it has similar yellowish color \ + to regular hivebots." + value = CATALOGUER_REWARD_HARD + +/datum/category_item/catalogue/technology/drone/hivebot/laser // Hivebot Scanner Data - This is for Laser Hivebots + name = "Drone - Laser Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + laser weapon, different from ion bolts, firing bright, vibrant blue bolts of energy. Other than that, it has similar yellowish color \ + to regular hivebots." + value = CATALOGUER_REWARD_HARD + +/datum/category_item/catalogue/technology/drone/hivebot/ion // Hivebot Scanner Data - This is for Ion Hivebots + name = "Drone - Ion Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + electromagnetic pulse generator, firing bright, vibrant blue bolts of ion energy. Other than that, it has similar yellowish color \ + to regular hivebots." + value = CATALOGUER_REWARD_HARD + +/datum/category_item/catalogue/technology/drone/hivebot/strong // Hivebot Scanner Data - This is for Laser Hivebots + name = "Drone - Strong Laser Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + ballistic weapon. The weapon seems to fire larger projectiles, and it has heavier armor. Other than that, it has similar yellowish color \ + to regular hivebots." + value = CATALOGUER_REWARD_HARD diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm index 434ce659e8..72cbeac0e6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm @@ -1,13 +1,13 @@ -/datum/category_item/catalogue/technology/drone/hivebot/commander // Hivebot Scanner Data - This is for Commander Hivebots - name = "Drone - Commander Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - ballistic weapon. It also appears to have hardened internal connections and network interlinks, as well as some sort of datalink \ - to the other hivebots. Other than that, it has similar yellowish color to regular hivebots." - value = CATALOGUER_REWARD_HARD - -/datum/category_item/catalogue/technology/drone/hivebot/logistics // Hivebot Scanner Data - This is for Logistics Hivebots - name = "Drone - Logistics Hivebot" - desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ - ballistic weapon. It also appears to have supply deploying bays, and internal fabs to repair and buff their allies' special capabilities. \ - Other than that, it has similar yellowish color to regular hivebots." - value = CATALOGUER_REWARD_HARD +/datum/category_item/catalogue/technology/drone/hivebot/commander // Hivebot Scanner Data - This is for Commander Hivebots + name = "Drone - Commander Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + ballistic weapon. It also appears to have hardened internal connections and network interlinks, as well as some sort of datalink \ + to the other hivebots. Other than that, it has similar yellowish color to regular hivebots." + value = CATALOGUER_REWARD_HARD + +/datum/category_item/catalogue/technology/drone/hivebot/logistics // Hivebot Scanner Data - This is for Logistics Hivebots + name = "Drone - Logistics Hivebot" + desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ + ballistic weapon. It also appears to have supply deploying bays, and internal fabs to repair and buff their allies' special capabilities. \ + Other than that, it has similar yellowish color to regular hivebots." + value = CATALOGUER_REWARD_HARD diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm index f45c1b185d..653abae3eb 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm @@ -1,349 +1,349 @@ -// Stronger than a regular Dark Gygax, this one has three special attacks, based on intents. -// First special attack launches three arcing rockets at the current target. -// Second special attack fires a projectile that creates a short-lived microsingularity that pulls in everything nearby. Magboots can protect from this. -// Third special attack creates a dangerous electric field that causes escalating electric damage, before emitting a tesla shock and blinding anyone looking at the mecha. -// The AI will choose one every ten seconds. - -/datum/category_item/catalogue/technology/adv_dark_gygax - name = "Exosuit - Advanced Dark Gygax" - desc = "This exosuit is an experimental prototype, descended from the Dark Gygax. It retains the \ - speed that is characteristic of the other models, yet outclasses all of them in durability, \ - to the point of having a comparable amount of protection to models that placed a higher emphesis \ - on armor, like the Durand and even the Marauder. It is also much larger in scale, and significantly \ - heavier than most other exosuits developed by humans, which often causes shockwaves to be felt \ - whenever it moves. This has been observed to have a demoralizing effect on hostile forces.\ -

                    \ - Weapons & Power System
                    \ - Attached to the exosuit's chassis are several newly invented mounted weapons, each unique in purpose and capability. \ - These weapons are integral to the chassis as opposed to the modular equipment that more traditional exosuits utilize. \ - It is unknown if that is due to simply being an early prototype, or if discarding the modular design is benefitial \ - to the design of the model.\ -

                    \ - All the weapons utilize energy, as opposed to consumable projectiles. This appears to have been a conscious decision to \ - allow for more staying power, by only being limited by availablity of electricity. \ - In order to supply the needed energy for combat, the ADG contains a miniturized fusion reactor, which is also \ - considered experimental due to its size. The reactor is powerful enough to power the actuators, electronics, \ - and the primary weapon. The supplementary weapons, however, cannot be continiously fired and instead draw from \ - a electrical buffer that is constantly replenished by the reactor.\ -

                    \ - Homing Energy Bolts
                    \ - The primary weapon is a projector that fires somewhat slow moving blue bolts of energy. The ADG is able to \ - passively redirect the trajectory of the blue bolts towards the initial target, essentially acting as a \ - homing projectile. The blue bolt itself is otherwise not very powerful compared to conventional photonic \ - weaponry or ballistic shells, however the power required to fire the main gun is significantly less \ - than the other available weapons, and so the ADG uses it as the main weapon.\ -

                    \ - Self-Supplying Missile Launcher
                    \ - The first supplementary weapon would appear to not be an energy weapon, as it is a missile launcher. \ - What is not obvious is that the missiles are fabricated inside the exosuit, with the physical \ - materials also being created from energy, similar to the newer models of Rapid Construction Devices. \ - Therefore, the ADG does not need to concern itself with running out of missiles. The missiles themselves \ - are optimized towards harming hard targets, such as other exosuits, but are also still dangerous to soft \ - targets like infantry.\ -

                    \ - Electric Defense
                    \ - The second supplementary weapon is not a conventional gun. Instead, the ADG weaponizes its electrical \ - systems by redirecting power output from its fusion reactor to its exterior shell, becoming a walking \ - tesla coil. This generates a strong electric field that harms anything unprotected nearby. \ - The electric field grows in power, until reaching a critical point, after which a blinding flash \ - of light and arcs of lightning fly out from the exosuit towards its surroundings.\ -

                    \ - Microsingularity Projector
                    \ - Finally, the third supplementary weapon utilizes gravitation as a weapon, by firing a blue energetic orb \ - that, upon hitting the ground, collapses and causes a 'microsingularity' to emerge briefly, pulling in \ - anything unsecured, such as personnel or weapons. The microsingularity lacks the means to gain any energy, meaning it \ - will dissipate in a few seconds, and so it is probably safe to use on a planetary body.\ -

                    \ - Flaws
                    \ - It would appear the ADG is poised to take the place of other exosuits like the Marauder, however several \ - massive flaws exist to make that unlikely. Firstly, this exosuit is almost an order of magnitude more \ - costly to produce than comparable alternatives, even accounting for being a prototype. \ - Secondly, a number of weapons integrated into the ADG are dangerous both to enemies and \ - allies, limiting the ability for a massed assault using ADGs. \ - Finally, the nature of several weapons used could invoke technological fear, or otherwise \ - be considered a war crime to utilize, primarily the electrical field and microsingularity \ - projector.\ -

                    \ - All of these flaws appear to doom the ADG to becoming another technological marvel that was \ - overly ambitious and unconstrained to the demands of reality. They will likely be really rare, \ - and terrifying." - value = CATALOGUER_REWARD_SUPERHARD - - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced - name = "advanced dark gygax" - desc = "An experimental exosuit that utilizes advanced materials to allow for greater protection while still being lightweight and fast. \ - It also is armed with an array of next-generation weaponry." - catalogue_data = list(/datum/category_item/catalogue/technology/adv_dark_gygax) - icon_state = "darkgygax_adv" - wreckage = /obj/structure/loot_pile/mecha/gygax/dark/adv - icon_scale_x = 1.5 - icon_scale_y = 1.5 - movement_shake_radius = 14 - - maxHealth = 450 - deflect_chance = 25 - has_repair_droid = TRUE - armor = list( - "melee" = 50, - "bullet" = 50, - "laser" = 50, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - - special_attack_min_range = 1 - special_attack_max_range = 7 - special_attack_cooldown = 10 SECONDS - projectiletype = /obj/item/projectile/energy/homing_bolt // We're now a bullet hell game. - projectilesound = 'sound/weapons/wave.ogg' - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - var/obj/effect/overlay/energy_ball/energy_ball = null - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/Destroy() - if(energy_ball) - energy_ball.stop_orbit() - qdel(energy_ball) - return ..() - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/obj/item/projectile/energy/homing_bolt - name = "homing bolt" - icon_state = "force_missile" - damage = 20 - damage_type = BURN - check_armour = "laser" - -/obj/item/projectile/energy/homing_bolt/launch_projectile(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) - ..() - if(target) - set_homing_target(target) - -/obj/item/projectile/energy/homing_bolt/fire(angle, atom/direct_target) - ..() - set_pixel_speed(0.5) - -#define ELECTRIC_ZAP_POWER 15000 //VOREStation Edit - -// Charges a tesla shot, while emitting a dangerous electric field. The exosuit is immune to electric damage while this is ongoing. -// It also briefly blinds anyone looking directly at the mech without flash protection. -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/electric_defense(atom/target) - set waitfor = FALSE - - // Temporary immunity to shock to avoid killing themselves with their own attack. - var/old_shock_resist = shock_resist - shock_resist = 1 - - // Make the energy ball. This is purely visual since the tesla ball is hyper-deadly. - energy_ball = new(loc) - energy_ball.adjust_scale(0.5) - energy_ball.orbit(src, 32, TRUE, 1 SECOND) - - visible_message(span("warning", "\The [src] creates \an [energy_ball] around itself!")) - - playsound(src, 'sound/effects/lightning_chargeup.ogg', 100, 1, extrarange = 30) - - // Shock nearby things that aren't ourselves. - for(var/i = 1 to 10) - energy_ball.adjust_scale(0.5 + (i/10)) - energy_ball.set_light(i/2, i/2, "#0000FF") - for(var/thing in range(3, src)) - // This is stupid because mechs are stupid and not mobs. - if(isliving(thing)) - var/mob/living/L = thing - - if(L == src) - continue - if(L.stat) - continue // Otherwise it can get pretty laggy if there's loads of corpses around. - L.inflict_shock_damage(i * 2) - if(L && L.has_AI()) // Some mobs delete themselves when dying. - L.ai_holder.react_to_attack(src) - - else if(istype(thing, /obj/mecha)) - var/obj/mecha/M = thing - M.take_damage(i * 2, "energy") // Mechs don't have a concept for siemens so energy armor check is the best alternative. - - sleep(1 SECOND) - - // Shoot a tesla bolt, and flashes people who are looking at the mecha without sufficent eye protection. - visible_message(span("warning", "\The [energy_ball] explodes in a flash of light, sending a shock everywhere!")) - playsound(src, 'sound/effects/lightningbolt.ogg', 100, 1, extrarange = 30) - tesla_zap(src.loc, 5, ELECTRIC_ZAP_POWER, FALSE) - for(var/mob/living/L in viewers(src)) - if(L == src) - continue - var/dir_towards_us = get_dir(L, src) - if(L.dir && L.dir & dir_towards_us) - to_chat(L, span("danger", "The flash of light blinds you briefly.")) - L.flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = TRUE) - - // Get rid of our energy ball. - energy_ball.stop_orbit() - qdel(energy_ball) - - sleep(1 SECOND) - // Resist resistance to old value. - shock_resist = old_shock_resist // Not using initial() in case the value gets modified by an admin or something. - -#undef ELECTRIC_ZAP_POWER - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_rockets(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 3) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -// Arcing rocket projectile that produces a weak explosion when it lands. -// Shouldn't punch holes in the floor, but will still hurt. -/obj/item/projectile/arc/explosive_rocket - name = "rocket" - icon_state = "mortar" - -/obj/item/projectile/arc/explosive_rocket/on_impact(turf/T) - new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. - explosion(T, 0, 0, 2, adminlog = FALSE) - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_microsingularity(atom/target) - var/turf/T = get_turf(target) - visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) - playsound(src, 'sound/weapons/Laser.ogg', 50, 1) - face_atom(T) - var/obj/item/projectile/arc/microsingulo/sphere = new(loc) - sphere.old_style_target(T, src) - sphere.fire() - -/obj/item/projectile/arc/microsingulo - name = "micro singularity" - icon_state = "bluespace" - -/obj/item/projectile/arc/microsingulo/on_impact(turf/T) - new /obj/effect/temporary_effect/pulse/microsingulo(T) - - -/obj/effect/temporary_effect/pulse/microsingulo - name = "micro singularity" - desc = "It's sucking everything in!" - icon = 'icons/obj/objects.dmi' - icon_state = "bhole3" - light_range = 4 - light_power = 5 - light_color = "#2ECCFA" - pulses_remaining = 10 - pulse_delay = 0.5 SECONDS - var/pull_radius = 3 - var/pull_strength = STAGE_THREE - -/obj/effect/temporary_effect/pulse/microsingulo/on_pulse() - for(var/atom/A in range(pull_radius, src)) - A.singularity_pull(src, pull_strength) - - -// The Advanced Dark Gygax's AI. -// The mob has three special attacks, based on the current intent. -// This AI choose the appropiate intent for the situation, and tries to ensure it doesn't kill itself by firing missiles at its feet. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax - conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese. - var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them. - - var/electric_defense_radius = 3 // How big to assume electric defense's area is. - var/microsingulo_radius = 3 // Same but for microsingulo pull. - var/rocket_explosive_radius = 2 // Explosion radius for the rockets. - - var/electric_defense_threshold = 2 // How many non-targeted people are needed in close proximity before electric defense is viable. - var/microsingulo_threshold = 2 // Similar to above, but uses an area around the target. - -// Used to control the mob's positioning based on which special attack it has done. -// Note that the intent will not change again until the next special attack is about to happen. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/on_engagement(atom/A) - // Make the AI backpeddle if using an AoE special attack. - var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles. - if(holder.a_intent in risky_intents) - var/closest_distance = 1 - switch(holder.a_intent) // Plus one just in case. - if(I_HURT) - closest_distance = rocket_explosive_radius + 1 - if(I_GRAB) - closest_distance = microsingulo_radius + 1 - - if(get_dist(holder, A) <= closest_distance) - holder.IMove(get_step_away(holder, A, closest_distance)) - - // Otherwise get up close and personal. - else if(get_dist(holder, A) > closest_desired_distance) - holder.IMove(get_step_towards(holder, A)) - -// Changes the mob's intent, which controls which special attack is used. -// I_DISARM causes Electric Defense, I_GRAB causes Micro-Singularity, and I_HURT causes Missile Barrage. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/pre_special_attack(atom/A) - if(isliving(A)) - var/mob/living/target = A - - // If we're surrounded, Electric Defense will quickly fix that. - var/tally = 0 - var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets. - for(var/atom/movable/AM in potential_targets) - if(get_dist(holder, AM) > electric_defense_radius) - continue - if(!can_attack(AM)) - continue - tally++ - - // Should we shock them? - if(tally >= electric_defense_threshold || get_dist(target, holder) <= electric_defense_radius) - holder.a_intent = I_DISARM - return - - // Otherwise they're a fair distance away and we're not getting mobbed up close. - // See if we should use missiles or microsingulo. - tally = 0 // Let's recycle the var. - for(var/atom/movable/AM in potential_targets) - if(get_dist(target, AM) > microsingulo_radius) // Deliberately tests distance between target and nearby targets and not the holder. - continue - if(!can_attack(AM)) - continue - if(AM.anchored) // Microsingulo doesn't do anything to anchored things. - tally-- - else - tally++ - - // Lots of people means minisingulo would be more useful. - if(tally >= microsingulo_threshold) - holder.a_intent = I_GRAB - else // Otherwise use rockets. - holder.a_intent = I_HURT - - else - if(get_dist(holder, A) >= rocket_explosive_radius + 1) - holder.a_intent = I_HURT // Fire rockets if it's an obj/turf. - else - holder.a_intent = I_DISARM // Electricity might not work but it's safe up close. +// Stronger than a regular Dark Gygax, this one has three special attacks, based on intents. +// First special attack launches three arcing rockets at the current target. +// Second special attack fires a projectile that creates a short-lived microsingularity that pulls in everything nearby. Magboots can protect from this. +// Third special attack creates a dangerous electric field that causes escalating electric damage, before emitting a tesla shock and blinding anyone looking at the mecha. +// The AI will choose one every ten seconds. + +/datum/category_item/catalogue/technology/adv_dark_gygax + name = "Exosuit - Advanced Dark Gygax" + desc = "This exosuit is an experimental prototype, descended from the Dark Gygax. It retains the \ + speed that is characteristic of the other models, yet outclasses all of them in durability, \ + to the point of having a comparable amount of protection to models that placed a higher emphesis \ + on armor, like the Durand and even the Marauder. It is also much larger in scale, and significantly \ + heavier than most other exosuits developed by humans, which often causes shockwaves to be felt \ + whenever it moves. This has been observed to have a demoralizing effect on hostile forces.\ +

                    \ + Weapons & Power System
                    \ + Attached to the exosuit's chassis are several newly invented mounted weapons, each unique in purpose and capability. \ + These weapons are integral to the chassis as opposed to the modular equipment that more traditional exosuits utilize. \ + It is unknown if that is due to simply being an early prototype, or if discarding the modular design is benefitial \ + to the design of the model.\ +

                    \ + All the weapons utilize energy, as opposed to consumable projectiles. This appears to have been a conscious decision to \ + allow for more staying power, by only being limited by availablity of electricity. \ + In order to supply the needed energy for combat, the ADG contains a miniturized fusion reactor, which is also \ + considered experimental due to its size. The reactor is powerful enough to power the actuators, electronics, \ + and the primary weapon. The supplementary weapons, however, cannot be continiously fired and instead draw from \ + a electrical buffer that is constantly replenished by the reactor.\ +

                    \ + Homing Energy Bolts
                    \ + The primary weapon is a projector that fires somewhat slow moving blue bolts of energy. The ADG is able to \ + passively redirect the trajectory of the blue bolts towards the initial target, essentially acting as a \ + homing projectile. The blue bolt itself is otherwise not very powerful compared to conventional photonic \ + weaponry or ballistic shells, however the power required to fire the main gun is significantly less \ + than the other available weapons, and so the ADG uses it as the main weapon.\ +

                    \ + Self-Supplying Missile Launcher
                    \ + The first supplementary weapon would appear to not be an energy weapon, as it is a missile launcher. \ + What is not obvious is that the missiles are fabricated inside the exosuit, with the physical \ + materials also being created from energy, similar to the newer models of Rapid Construction Devices. \ + Therefore, the ADG does not need to concern itself with running out of missiles. The missiles themselves \ + are optimized towards harming hard targets, such as other exosuits, but are also still dangerous to soft \ + targets like infantry.\ +

                    \ + Electric Defense
                    \ + The second supplementary weapon is not a conventional gun. Instead, the ADG weaponizes its electrical \ + systems by redirecting power output from its fusion reactor to its exterior shell, becoming a walking \ + tesla coil. This generates a strong electric field that harms anything unprotected nearby. \ + The electric field grows in power, until reaching a critical point, after which a blinding flash \ + of light and arcs of lightning fly out from the exosuit towards its surroundings.\ +

                    \ + Microsingularity Projector
                    \ + Finally, the third supplementary weapon utilizes gravitation as a weapon, by firing a blue energetic orb \ + that, upon hitting the ground, collapses and causes a 'microsingularity' to emerge briefly, pulling in \ + anything unsecured, such as personnel or weapons. The microsingularity lacks the means to gain any energy, meaning it \ + will dissipate in a few seconds, and so it is probably safe to use on a planetary body.\ +

                    \ + Flaws
                    \ + It would appear the ADG is poised to take the place of other exosuits like the Marauder, however several \ + massive flaws exist to make that unlikely. Firstly, this exosuit is almost an order of magnitude more \ + costly to produce than comparable alternatives, even accounting for being a prototype. \ + Secondly, a number of weapons integrated into the ADG are dangerous both to enemies and \ + allies, limiting the ability for a massed assault using ADGs. \ + Finally, the nature of several weapons used could invoke technological fear, or otherwise \ + be considered a war crime to utilize, primarily the electrical field and microsingularity \ + projector.\ +

                    \ + All of these flaws appear to doom the ADG to becoming another technological marvel that was \ + overly ambitious and unconstrained to the demands of reality. They will likely be really rare, \ + and terrifying." + value = CATALOGUER_REWARD_SUPERHARD + + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced + name = "advanced dark gygax" + desc = "An experimental exosuit that utilizes advanced materials to allow for greater protection while still being lightweight and fast. \ + It also is armed with an array of next-generation weaponry." + catalogue_data = list(/datum/category_item/catalogue/technology/adv_dark_gygax) + icon_state = "darkgygax_adv" + wreckage = /obj/structure/loot_pile/mecha/gygax/dark/adv + icon_scale_x = 1.5 + icon_scale_y = 1.5 + movement_shake_radius = 14 + + maxHealth = 450 + deflect_chance = 25 + has_repair_droid = TRUE + armor = list( + "melee" = 50, + "bullet" = 50, + "laser" = 50, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + + special_attack_min_range = 1 + special_attack_max_range = 7 + special_attack_cooldown = 10 SECONDS + projectiletype = /obj/item/projectile/energy/homing_bolt // We're now a bullet hell game. + projectilesound = 'sound/weapons/wave.ogg' + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + var/obj/effect/overlay/energy_ball/energy_ball = null + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/Destroy() + if(energy_ball) + energy_ball.stop_orbit() + qdel(energy_ball) + return ..() + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/obj/item/projectile/energy/homing_bolt + name = "homing bolt" + icon_state = "force_missile" + damage = 20 + damage_type = BURN + check_armour = "laser" + +/obj/item/projectile/energy/homing_bolt/launch_projectile(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) + ..() + if(target) + set_homing_target(target) + +/obj/item/projectile/energy/homing_bolt/fire(angle, atom/direct_target) + ..() + set_pixel_speed(0.5) + +#define ELECTRIC_ZAP_POWER 15000 //VOREStation Edit + +// Charges a tesla shot, while emitting a dangerous electric field. The exosuit is immune to electric damage while this is ongoing. +// It also briefly blinds anyone looking directly at the mech without flash protection. +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/electric_defense(atom/target) + set waitfor = FALSE + + // Temporary immunity to shock to avoid killing themselves with their own attack. + var/old_shock_resist = shock_resist + shock_resist = 1 + + // Make the energy ball. This is purely visual since the tesla ball is hyper-deadly. + energy_ball = new(loc) + energy_ball.adjust_scale(0.5) + energy_ball.orbit(src, 32, TRUE, 1 SECOND) + + visible_message(span("warning", "\The [src] creates \an [energy_ball] around itself!")) + + playsound(src, 'sound/effects/lightning_chargeup.ogg', 100, 1, extrarange = 30) + + // Shock nearby things that aren't ourselves. + for(var/i = 1 to 10) + energy_ball.adjust_scale(0.5 + (i/10)) + energy_ball.set_light(i/2, i/2, "#0000FF") + for(var/thing in range(3, src)) + // This is stupid because mechs are stupid and not mobs. + if(isliving(thing)) + var/mob/living/L = thing + + if(L == src) + continue + if(L.stat) + continue // Otherwise it can get pretty laggy if there's loads of corpses around. + L.inflict_shock_damage(i * 2) + if(L && L.has_AI()) // Some mobs delete themselves when dying. + L.ai_holder.react_to_attack(src) + + else if(istype(thing, /obj/mecha)) + var/obj/mecha/M = thing + M.take_damage(i * 2, "energy") // Mechs don't have a concept for siemens so energy armor check is the best alternative. + + sleep(1 SECOND) + + // Shoot a tesla bolt, and flashes people who are looking at the mecha without sufficent eye protection. + visible_message(span("warning", "\The [energy_ball] explodes in a flash of light, sending a shock everywhere!")) + playsound(src, 'sound/effects/lightningbolt.ogg', 100, 1, extrarange = 30) + tesla_zap(src.loc, 5, ELECTRIC_ZAP_POWER, FALSE) + for(var/mob/living/L in viewers(src)) + if(L == src) + continue + var/dir_towards_us = get_dir(L, src) + if(L.dir && L.dir & dir_towards_us) + to_chat(L, span("danger", "The flash of light blinds you briefly.")) + L.flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = TRUE) + + // Get rid of our energy ball. + energy_ball.stop_orbit() + qdel(energy_ball) + + sleep(1 SECOND) + // Resist resistance to old value. + shock_resist = old_shock_resist // Not using initial() in case the value gets modified by an admin or something. + +#undef ELECTRIC_ZAP_POWER + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_rockets(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 3) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +// Arcing rocket projectile that produces a weak explosion when it lands. +// Shouldn't punch holes in the floor, but will still hurt. +/obj/item/projectile/arc/explosive_rocket + name = "rocket" + icon_state = "mortar" + +/obj/item/projectile/arc/explosive_rocket/on_impact(turf/T) + new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. + explosion(T, 0, 0, 2, adminlog = FALSE) + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_microsingularity(atom/target) + var/turf/T = get_turf(target) + visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) + playsound(src, 'sound/weapons/Laser.ogg', 50, 1) + face_atom(T) + var/obj/item/projectile/arc/microsingulo/sphere = new(loc) + sphere.old_style_target(T, src) + sphere.fire() + +/obj/item/projectile/arc/microsingulo + name = "micro singularity" + icon_state = "bluespace" + +/obj/item/projectile/arc/microsingulo/on_impact(turf/T) + new /obj/effect/temporary_effect/pulse/microsingulo(T) + + +/obj/effect/temporary_effect/pulse/microsingulo + name = "micro singularity" + desc = "It's sucking everything in!" + icon = 'icons/obj/objects.dmi' + icon_state = "bhole3" + light_range = 4 + light_power = 5 + light_color = "#2ECCFA" + pulses_remaining = 10 + pulse_delay = 0.5 SECONDS + var/pull_radius = 3 + var/pull_strength = STAGE_THREE + +/obj/effect/temporary_effect/pulse/microsingulo/on_pulse() + for(var/atom/A in range(pull_radius, src)) + A.singularity_pull(src, pull_strength) + + +// The Advanced Dark Gygax's AI. +// The mob has three special attacks, based on the current intent. +// This AI choose the appropiate intent for the situation, and tries to ensure it doesn't kill itself by firing missiles at its feet. +/datum/ai_holder/simple_mob/intentional/adv_dark_gygax + conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese. + var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them. + + var/electric_defense_radius = 3 // How big to assume electric defense's area is. + var/microsingulo_radius = 3 // Same but for microsingulo pull. + var/rocket_explosive_radius = 2 // Explosion radius for the rockets. + + var/electric_defense_threshold = 2 // How many non-targeted people are needed in close proximity before electric defense is viable. + var/microsingulo_threshold = 2 // Similar to above, but uses an area around the target. + +// Used to control the mob's positioning based on which special attack it has done. +// Note that the intent will not change again until the next special attack is about to happen. +/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/on_engagement(atom/A) + // Make the AI backpeddle if using an AoE special attack. + var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles. + if(holder.a_intent in risky_intents) + var/closest_distance = 1 + switch(holder.a_intent) // Plus one just in case. + if(I_HURT) + closest_distance = rocket_explosive_radius + 1 + if(I_GRAB) + closest_distance = microsingulo_radius + 1 + + if(get_dist(holder, A) <= closest_distance) + holder.IMove(get_step_away(holder, A, closest_distance)) + + // Otherwise get up close and personal. + else if(get_dist(holder, A) > closest_desired_distance) + holder.IMove(get_step_towards(holder, A)) + +// Changes the mob's intent, which controls which special attack is used. +// I_DISARM causes Electric Defense, I_GRAB causes Micro-Singularity, and I_HURT causes Missile Barrage. +/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/pre_special_attack(atom/A) + if(isliving(A)) + var/mob/living/target = A + + // If we're surrounded, Electric Defense will quickly fix that. + var/tally = 0 + var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets. + for(var/atom/movable/AM in potential_targets) + if(get_dist(holder, AM) > electric_defense_radius) + continue + if(!can_attack(AM)) + continue + tally++ + + // Should we shock them? + if(tally >= electric_defense_threshold || get_dist(target, holder) <= electric_defense_radius) + holder.a_intent = I_DISARM + return + + // Otherwise they're a fair distance away and we're not getting mobbed up close. + // See if we should use missiles or microsingulo. + tally = 0 // Let's recycle the var. + for(var/atom/movable/AM in potential_targets) + if(get_dist(target, AM) > microsingulo_radius) // Deliberately tests distance between target and nearby targets and not the holder. + continue + if(!can_attack(AM)) + continue + if(AM.anchored) // Microsingulo doesn't do anything to anchored things. + tally-- + else + tally++ + + // Lots of people means minisingulo would be more useful. + if(tally >= microsingulo_threshold) + holder.a_intent = I_GRAB + else // Otherwise use rockets. + holder.a_intent = I_HURT + + else + if(get_dist(holder, A) >= rocket_explosive_radius + 1) + holder.a_intent = I_HURT // Fire rockets if it's an obj/turf. + else + holder.a_intent = I_DISARM // Electricity might not work but it's safe up close. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm index cf9c0ea3ea..be69d803e9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm @@ -1,40 +1,40 @@ -// Base type for the 'combat' mechas like gygax/durand/maulers/etc. -// They generally are walking tanks, and their melee attack knocks back and stuns, like the real deal. - -/mob/living/simple_mob/mechanical/mecha/combat - name = "combat mecha" - desc = "An even bigger stompy mech!!" - - movement_cooldown = 3 - melee_damage_lower = 30 - melee_damage_upper = 30 - melee_attack_delay = 1 SECOND - attacktext = list("punched", "slammed", "uppercutted", "pummeled") - - armor = list( - "melee" = 30, - "bullet" = 30, - "laser" = 15, - "energy" = 0, - "bomb" = 20, - "bio" = 100, - "rad" = 100 - ) - - var/weaken_amount = 2 // Be careful with this number. High values can equal a permastun. - -// Melee hits knock back by one tile (or more if already stunned to help prevent permastuns). -/mob/living/simple_mob/mechanical/mecha/combat/apply_melee_effects(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.mob_size <= MOB_MEDIUM) - visible_message(span("danger", "\The [src] sends \the [L] flying with their mechanized fist!")) - playsound(src, "punch", 50, 1) - L.Weaken(weaken_amount) - var/throw_dir = get_dir(src, L) - var/throw_dist = L.incapacitated(INCAPACITATION_DISABLED) ? 4 : 1 - L.throw_at(get_edge_target_turf(L, throw_dir), throw_dist, 1, src) - else - to_chat(L, span("warning", "\The [src] punches you with incredible force, but you remain in place.")) - visible_message(span("danger", "\The [src] slams it's mechanized fist into \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch. - playsound(src, "punch", 50, 1) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch. +// Base type for the 'combat' mechas like gygax/durand/maulers/etc. +// They generally are walking tanks, and their melee attack knocks back and stuns, like the real deal. + +/mob/living/simple_mob/mechanical/mecha/combat + name = "combat mecha" + desc = "An even bigger stompy mech!!" + + movement_cooldown = 3 + melee_damage_lower = 30 + melee_damage_upper = 30 + melee_attack_delay = 1 SECOND + attacktext = list("punched", "slammed", "uppercutted", "pummeled") + + armor = list( + "melee" = 30, + "bullet" = 30, + "laser" = 15, + "energy" = 0, + "bomb" = 20, + "bio" = 100, + "rad" = 100 + ) + + var/weaken_amount = 2 // Be careful with this number. High values can equal a permastun. + +// Melee hits knock back by one tile (or more if already stunned to help prevent permastuns). +/mob/living/simple_mob/mechanical/mecha/combat/apply_melee_effects(atom/A) + if(isliving(A)) + var/mob/living/L = A + if(L.mob_size <= MOB_MEDIUM) + visible_message(span("danger", "\The [src] sends \the [L] flying with their mechanized fist!")) + playsound(src, "punch", 50, 1) + L.Weaken(weaken_amount) + var/throw_dir = get_dir(src, L) + var/throw_dist = L.incapacitated(INCAPACITATION_DISABLED) ? 4 : 1 + L.throw_at(get_edge_target_turf(L, throw_dir), throw_dist, 1, src) + else + to_chat(L, span("warning", "\The [src] punches you with incredible force, but you remain in place.")) + visible_message(span("danger", "\The [src] slams it's mechanized fist into \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch. + playsound(src, "punch", 50, 1) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm index ba25363f8d..c221a74e88 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm @@ -1,78 +1,78 @@ -// Durands are slow, tanky, beefy, and hit really hard. -// They can also root themselves to become even tankier. -// The AI doesn't do this currently. - -/datum/category_item/catalogue/technology/durand - name = "Exosuit - Durand" - desc = "The Durand is an old combat exosuit, that was once the most durable exosuit ever developed by humans. \ - In modern times, this exosuit has been dethroned from that title, yet it remains one of the more well built and armored \ - exosuits, despite its age.\ -

                    \ - During the First Contact War against the Unathi, there was a need for various new technologies to be developed \ - to counter the Unathi war machine. One of many solutions created was the Durand, which was made to be heavy and \ - well-armored, and be capable of powering the various weapons that could be mounted onto it. Presently, the \ - Durand now generally serves as corporate asset protection hardware, due to modern militaries moving on to newer, \ - more advanced war machines." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/mechanical/mecha/combat/durand - name = "durand" - desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War." - catalogue_data = list(/datum/category_item/catalogue/technology/durand) - icon_state = "durand" - movement_cooldown = 3 - wreckage = /obj/structure/loot_pile/mecha/durand - - maxHealth = 400 - deflect_chance = 20 - armor = list( - "melee" = 50, - "bullet" = 35, - "laser" = 15, - "energy" = 10, - "bomb" = 20, - "bio" = 100, - "rad" = 100 - ) - melee_damage_lower = 40 - melee_damage_upper = 40 - base_attack_cooldown = 2 SECONDS - projectiletype = /obj/item/projectile/beam/heavylaser - projectile_dispersion = 10 - projectile_accuracy = -30 - - var/defense_mode = FALSE - var/defense_deflect = 35 - -/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode) - defense_mode = new_mode - deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance) - projectile_accuracy = defense_mode ? -10 : initial(projectile_accuracy) - to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode.")) - -/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct) - if(defense_mode) - to_chat(src, span("warning", "You are in defense mode, you cannot move.")) - return FALSE - return ..() - -// So players can toggle it too. -/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode() - set name = "Toggle Defense Mode" - set desc = "Toggles a special mode which makes you immobile and much more resilient." - set category = "Abilities" - - set_defense_mode(!defense_mode) - -// Variant that starts in defense mode, perhaps for PoIs. -/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() - set_defense_mode(TRUE) - return ..() - -/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary - desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War.\ - This one has been retrofitted into a turret." - - projectiletype = /obj/item/projectile/beam/heavylaser/fakeemitter - - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged +// Durands are slow, tanky, beefy, and hit really hard. +// They can also root themselves to become even tankier. +// The AI doesn't do this currently. + +/datum/category_item/catalogue/technology/durand + name = "Exosuit - Durand" + desc = "The Durand is an old combat exosuit, that was once the most durable exosuit ever developed by humans. \ + In modern times, this exosuit has been dethroned from that title, yet it remains one of the more well built and armored \ + exosuits, despite its age.\ +

                    \ + During the First Contact War against the Unathi, there was a need for various new technologies to be developed \ + to counter the Unathi war machine. One of many solutions created was the Durand, which was made to be heavy and \ + well-armored, and be capable of powering the various weapons that could be mounted onto it. Presently, the \ + Durand now generally serves as corporate asset protection hardware, due to modern militaries moving on to newer, \ + more advanced war machines." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/mechanical/mecha/combat/durand + name = "durand" + desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War." + catalogue_data = list(/datum/category_item/catalogue/technology/durand) + icon_state = "durand" + movement_cooldown = 3 + wreckage = /obj/structure/loot_pile/mecha/durand + + maxHealth = 400 + deflect_chance = 20 + armor = list( + "melee" = 50, + "bullet" = 35, + "laser" = 15, + "energy" = 10, + "bomb" = 20, + "bio" = 100, + "rad" = 100 + ) + melee_damage_lower = 40 + melee_damage_upper = 40 + base_attack_cooldown = 2 SECONDS + projectiletype = /obj/item/projectile/beam/heavylaser + projectile_dispersion = 10 + projectile_accuracy = -30 + + var/defense_mode = FALSE + var/defense_deflect = 35 + +/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode) + defense_mode = new_mode + deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance) + projectile_accuracy = defense_mode ? -10 : initial(projectile_accuracy) + to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode.")) + +/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct) + if(defense_mode) + to_chat(src, span("warning", "You are in defense mode, you cannot move.")) + return FALSE + return ..() + +// So players can toggle it too. +/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode() + set name = "Toggle Defense Mode" + set desc = "Toggles a special mode which makes you immobile and much more resilient." + set category = "Abilities" + + set_defense_mode(!defense_mode) + +// Variant that starts in defense mode, perhaps for PoIs. +/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() + set_defense_mode(TRUE) + return ..() + +/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary + desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War.\ + This one has been retrofitted into a turret." + + projectiletype = /obj/item/projectile/beam/heavylaser/fakeemitter + + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm index e06960b195..bafbb58cd7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm @@ -1,84 +1,84 @@ -// Gygaxes are tough but also fast. -// Their AI, unlike most, will advance towards their target instead of remaining in place. - -/datum/category_item/catalogue/technology/gygax - name = "Exosuit - Gygax" - desc = "The Gygax is a relatively modern exosuit, built to be lightweight and agile, while still being fairly durable. \ - These traits have made them rather popular among well funded private and corporate security forces, who desire \ - the ability to rapidly respond to conflict.\ -

                    \ - One special feature of this model is that the actuators that \ - drive the exosuit can have their safeties disabled in order to achieve a short-term burst of unparalleled speed, \ - at the expense of damaging the exosuit considerably." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/mechanical/mecha/combat/gygax - name = "gygax" - desc = "A lightweight, security exosuit. Popular among private and corporate security." - catalogue_data = list(/datum/category_item/catalogue/technology/gygax) - icon_state = "gygax" - movement_cooldown = -1 - wreckage = /obj/structure/loot_pile/mecha/gygax - - maxHealth = 300 - armor = list( - "melee" = 25, - "bullet" = 20, - "laser" = 30, - "energy" = 15, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - - projectile_dispersion = 8 - projectiletype = /obj/item/projectile/beam/midlaser - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. - - -// A stronger variant. - -/datum/category_item/catalogue/technology/dark_gygax - name = "Exosuit - Dark Gygax" - desc = "This exosuit is a variant of the regular Gygax. It is generally referred to as the Dark Gygax, \ - due to being constructed from different materials that give it a darker appearance. Beyond merely looking \ - cosmetically different, the Dark Gygax also has various upgrades compared to the Gygax. It is much more \ - resilient, yet retains the agility and speed of the Gygax.\ -

                    \ - These are relatively rare compared to the other security exosuits, as most security forces are content with \ - a regular Gygax. Instead, this exosuit is often used by high-end asset protection teams, and mercenaries." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark - name = "dark gygax" - desc = "A significantly upgraded Gygax security mech, often utilized by corporate asset protection teams and \ - PMCs." - catalogue_data = list(/datum/category_item/catalogue/technology/dark_gygax) - icon_state = "darkgygax" - wreckage = /obj/structure/loot_pile/mecha/gygax/dark - - maxHealth = 400 - deflect_chance = 25 - has_repair_droid = TRUE - armor = list( - "melee" = 40, - "bullet" = 40, - "laser" = 50, - "energy" = 35, - "bomb" = 20, - "bio" = 100, - "rad" = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax - name = "medgax" - desc = "An unorthodox fusion of the Gygax and Odysseus exosuits, this one is fast, sturdy, and carries a wide array of \ - potent chemicals and delivery mechanisms. The doctor is in!" - icon_state = "medgax" - wreckage = /obj/structure/loot_pile/mecha/gygax/medgax - - projectile_dispersion = 8 +// Gygaxes are tough but also fast. +// Their AI, unlike most, will advance towards their target instead of remaining in place. + +/datum/category_item/catalogue/technology/gygax + name = "Exosuit - Gygax" + desc = "The Gygax is a relatively modern exosuit, built to be lightweight and agile, while still being fairly durable. \ + These traits have made them rather popular among well funded private and corporate security forces, who desire \ + the ability to rapidly respond to conflict.\ +

                    \ + One special feature of this model is that the actuators that \ + drive the exosuit can have their safeties disabled in order to achieve a short-term burst of unparalleled speed, \ + at the expense of damaging the exosuit considerably." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/mechanical/mecha/combat/gygax + name = "gygax" + desc = "A lightweight, security exosuit. Popular among private and corporate security." + catalogue_data = list(/datum/category_item/catalogue/technology/gygax) + icon_state = "gygax" + movement_cooldown = -1 + wreckage = /obj/structure/loot_pile/mecha/gygax + + maxHealth = 300 + armor = list( + "melee" = 25, + "bullet" = 20, + "laser" = 30, + "energy" = 15, + "bomb" = 0, + "bio" = 100, + "rad" = 100 + ) + + projectile_dispersion = 8 + projectiletype = /obj/item/projectile/beam/midlaser + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. + + +// A stronger variant. + +/datum/category_item/catalogue/technology/dark_gygax + name = "Exosuit - Dark Gygax" + desc = "This exosuit is a variant of the regular Gygax. It is generally referred to as the Dark Gygax, \ + due to being constructed from different materials that give it a darker appearance. Beyond merely looking \ + cosmetically different, the Dark Gygax also has various upgrades compared to the Gygax. It is much more \ + resilient, yet retains the agility and speed of the Gygax.\ +

                    \ + These are relatively rare compared to the other security exosuits, as most security forces are content with \ + a regular Gygax. Instead, this exosuit is often used by high-end asset protection teams, and mercenaries." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark + name = "dark gygax" + desc = "A significantly upgraded Gygax security mech, often utilized by corporate asset protection teams and \ + PMCs." + catalogue_data = list(/datum/category_item/catalogue/technology/dark_gygax) + icon_state = "darkgygax" + wreckage = /obj/structure/loot_pile/mecha/gygax/dark + + maxHealth = 400 + deflect_chance = 25 + has_repair_droid = TRUE + armor = list( + "melee" = 40, + "bullet" = 40, + "laser" = 50, + "energy" = 35, + "bomb" = 20, + "bio" = 100, + "rad" = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax + name = "medgax" + desc = "An unorthodox fusion of the Gygax and Odysseus exosuits, this one is fast, sturdy, and carries a wide array of \ + potent chemicals and delivery mechanisms. The doctor is in!" + icon_state = "medgax" + wreckage = /obj/structure/loot_pile/mecha/gygax/medgax + + projectile_dispersion = 8 diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm index c575922be5..b4aa0d1ed6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm @@ -1,48 +1,48 @@ -// Ranged, and capable of flight. - -/datum/category_item/catalogue/technology/hoverpod - name = "Voidcraft - Hoverpod" - desc = "This is a small space-capable craft that has a round design. Can hold up to one pilot, \ - and sometimes one or two passengers, with the right modifications made. \ - Hoverpods have existed for a very long time, and the design has remained more or less consistant over its life. \ - They carved out a niche in short ranged transportation of cargo or crew while in space, \ - as they were more efficient compared to using a shuttle, and required less infrastructure to use due to being compact enough \ - to use airlocks. As such, they acted as a sort of bridge between being EVA in a spacesuit, and being inside a 'real' spacecraft.\ -

                    \ - In recent times, the Hoverpod is seen as outdated by some, as newer solutions to that niche now exist, however it remains an ancient favorite." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/mechanical/mecha/hoverpod - name = "hover pod" - desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser." - catalogue_data = list(/datum/category_item/catalogue/technology/hoverpod) - icon_state = "engineering_pod" - movement_sound = 'sound/machines/hiss.ogg' - wreckage = /obj/structure/loot_pile/mecha/hoverpod - - maxHealth = 150 - hovering = TRUE // Can fly. - - projectile_dispersion = 10 - projectile_accuracy = -30 - projectiletype = /obj/item/projectile/beam - base_attack_cooldown = 2 SECONDS - - organ_names = /decl/mob_organ_names/hoverpod - - var/datum/effect/effect/system/ion_trail_follow/ion_trail - -/mob/living/simple_mob/mechanical/mecha/hoverpod/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged - -/mob/living/simple_mob/mechanical/mecha/hoverpod/Initialize() - ion_trail = new /datum/effect/effect/system/ion_trail_follow() - ion_trail.set_up(src) - ion_trail.start() - return ..() - -/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) - return TRUE - -/decl/mob_organ_names/hoverpod - hit_zones = list("central chassis", "control module", "hydraulics", "left manipulator", "right manipulator", "left landing strut", "right landing strut", "maneuvering thruster", "sensor suite", "radiator", "power supply") +// Ranged, and capable of flight. + +/datum/category_item/catalogue/technology/hoverpod + name = "Voidcraft - Hoverpod" + desc = "This is a small space-capable craft that has a round design. Can hold up to one pilot, \ + and sometimes one or two passengers, with the right modifications made. \ + Hoverpods have existed for a very long time, and the design has remained more or less consistant over its life. \ + They carved out a niche in short ranged transportation of cargo or crew while in space, \ + as they were more efficient compared to using a shuttle, and required less infrastructure to use due to being compact enough \ + to use airlocks. As such, they acted as a sort of bridge between being EVA in a spacesuit, and being inside a 'real' spacecraft.\ +

                    \ + In recent times, the Hoverpod is seen as outdated by some, as newer solutions to that niche now exist, however it remains an ancient favorite." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/mechanical/mecha/hoverpod + name = "hover pod" + desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser." + catalogue_data = list(/datum/category_item/catalogue/technology/hoverpod) + icon_state = "engineering_pod" + movement_sound = 'sound/machines/hiss.ogg' + wreckage = /obj/structure/loot_pile/mecha/hoverpod + + maxHealth = 150 + hovering = TRUE // Can fly. + + projectile_dispersion = 10 + projectile_accuracy = -30 + projectiletype = /obj/item/projectile/beam + base_attack_cooldown = 2 SECONDS + + organ_names = /decl/mob_organ_names/hoverpod + + var/datum/effect/effect/system/ion_trail_follow/ion_trail + +/mob/living/simple_mob/mechanical/mecha/hoverpod/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged + +/mob/living/simple_mob/mechanical/mecha/hoverpod/Initialize() + ion_trail = new /datum/effect/effect/system/ion_trail_follow() + ion_trail.set_up(src) + ion_trail.start() + return ..() + +/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) + return TRUE + +/decl/mob_organ_names/hoverpod + hit_zones = list("central chassis", "control module", "hydraulics", "left manipulator", "right manipulator", "left landing strut", "right landing strut", "maneuvering thruster", "sensor suite", "radiator", "power supply") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm index b6e2934c8c..61a525f507 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm @@ -1,67 +1,67 @@ -// Marauders are even tougher than Durands. - -/datum/category_item/catalogue/technology/marauder - name = "Exosuit - Marauder" - desc = "Marauders are the more modern descendants of the Durand model. Stronger, faster, and \ - more resilient than their predecessor, they have replaced the Durand's role entirely, and are generally seen in service \ - for various militaries across human space. As such, they are generally unavailable to civilians, including \ - corporations and most Trans-Stellars." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/mechanical/mecha/combat/marauder - name = "marauder" - desc = "A heavy-duty, combat exosuit, developed after the Durand model. This is rarely found among civilian populations." - catalogue_data = list(/datum/category_item/catalogue/technology/marauder) - icon_state = "marauder" - movement_cooldown = 1.5 - wreckage = /obj/structure/loot_pile/mecha/marauder - - maxHealth = 500 - deflect_chance = 25 - sight = SEE_SELF | SEE_MOBS - armor = list( - "melee" = 50, - "bullet" = 55, - "laser" = 40, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - melee_damage_lower = 45 - melee_damage_upper = 45 - base_attack_cooldown = 2 SECONDS - projectiletype = /obj/item/projectile/beam/heavylaser - - - -/datum/category_item/catalogue/technology/seraph - name = "Exosuit - Seraph" - desc = "The Seraph line of combat exosuit is essentially a Marauder with incremental improvements, making \ - it slightly better. Due to the relatively minor improvements over its predecessor, and the cost of \ - said improvements, Seraphs have not made the Marauder obsolute. Instead, they have generally filled the \ - role of housing important commanders, and as such they generally contain specialized communications \ - equipment to aid in receiving and relaying orders.\ -

                    \ - Due to this role, they are generally not expected to see combat frequently. Despite this, they often have \ - one or more weapons attached, to allow for retaliation in case it is attacked directly." - value = CATALOGUER_REWARD_HARD - -// Slightly stronger, used to allow comdoms to frontline without dying instantly, I guess. -/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph - name = "seraph" - desc = "A heavy-duty, combat/command exosuit. This one is specialized towards housing important commanders such as high-ranking \ - military personnel. It's stronger than the regular Marauder model, but not by much." - catalogue_data = list(/datum/category_item/catalogue/technology/seraph) - icon_state = "seraph" - wreckage = /obj/structure/loot_pile/mecha/marauder/seraph - health = 550 - melee_damage_lower = 55 // The real version hits this hard apparently. Ouch. - melee_damage_upper = 55 - - -/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler - name = "mauler" - desc = "A heavy duty, combat exosuit that is based off of the Marauder model." - icon_state = "mauler" - wreckage = /obj/structure/loot_pile/mecha/marauder/mauler +// Marauders are even tougher than Durands. + +/datum/category_item/catalogue/technology/marauder + name = "Exosuit - Marauder" + desc = "Marauders are the more modern descendants of the Durand model. Stronger, faster, and \ + more resilient than their predecessor, they have replaced the Durand's role entirely, and are generally seen in service \ + for various militaries across human space. As such, they are generally unavailable to civilians, including \ + corporations and most Trans-Stellars." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/mechanical/mecha/combat/marauder + name = "marauder" + desc = "A heavy-duty, combat exosuit, developed after the Durand model. This is rarely found among civilian populations." + catalogue_data = list(/datum/category_item/catalogue/technology/marauder) + icon_state = "marauder" + movement_cooldown = 1.5 + wreckage = /obj/structure/loot_pile/mecha/marauder + + maxHealth = 500 + deflect_chance = 25 + sight = SEE_SELF | SEE_MOBS + armor = list( + "melee" = 50, + "bullet" = 55, + "laser" = 40, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + melee_damage_lower = 45 + melee_damage_upper = 45 + base_attack_cooldown = 2 SECONDS + projectiletype = /obj/item/projectile/beam/heavylaser + + + +/datum/category_item/catalogue/technology/seraph + name = "Exosuit - Seraph" + desc = "The Seraph line of combat exosuit is essentially a Marauder with incremental improvements, making \ + it slightly better. Due to the relatively minor improvements over its predecessor, and the cost of \ + said improvements, Seraphs have not made the Marauder obsolute. Instead, they have generally filled the \ + role of housing important commanders, and as such they generally contain specialized communications \ + equipment to aid in receiving and relaying orders.\ +

                    \ + Due to this role, they are generally not expected to see combat frequently. Despite this, they often have \ + one or more weapons attached, to allow for retaliation in case it is attacked directly." + value = CATALOGUER_REWARD_HARD + +// Slightly stronger, used to allow comdoms to frontline without dying instantly, I guess. +/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph + name = "seraph" + desc = "A heavy-duty, combat/command exosuit. This one is specialized towards housing important commanders such as high-ranking \ + military personnel. It's stronger than the regular Marauder model, but not by much." + catalogue_data = list(/datum/category_item/catalogue/technology/seraph) + icon_state = "seraph" + wreckage = /obj/structure/loot_pile/mecha/marauder/seraph + health = 550 + melee_damage_lower = 55 // The real version hits this hard apparently. Ouch. + melee_damage_upper = 55 + + +/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler + name = "mauler" + desc = "A heavy duty, combat exosuit that is based off of the Marauder model." + icon_state = "mauler" + wreckage = /obj/structure/loot_pile/mecha/marauder/mauler diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm index dc4733b6f0..d572508433 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm @@ -1,146 +1,146 @@ -// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight. -// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var. -// Tries to be as similar to the real deal as possible. - -/mob/living/simple_mob/mechanical/mecha - name = "mecha" - desc = "A big stompy mech!" - icon = 'icons/mecha/mecha.dmi' - - faction = "syndicate" - movement_cooldown = 1.5 - movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files. - turn_sound = 'sound/mecha/mechturn.ogg' - maxHealth = 300 - mob_size = MOB_LARGE - damage_threshold = 5 //Anything that's 5 or less damage will not do damage. - - organ_names = /decl/mob_organ_names/mecha - - armor = list( - "melee" = 20, - "bullet" = 10, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - - response_help = "taps on" - response_disarm = "knocks on" - response_harm = "uselessly hits" - harm_intent_damage = 0 - - ai_holder_type = /datum/ai_holder/simple_mob/melee - say_list_type = /datum/say_list/malf_drone - - var/datum/effect/effect/system/spark_spread/sparks - var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark - var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds. - var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit. - var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay. - - -/mob/living/simple_mob/mechanical/mecha/Initialize() - sparks = new (src) - sparks.set_up(3, 1, src) - sparks.attach(src) - - if(!pilot_type) - name = "autonomous [initial(name)]" - desc = "[initial(desc)] It appears to be piloted by a drone intelligence." - else - say_list_type = /datum/say_list/merc - - if(has_repair_droid) - update_icon() - - return ..() - -/mob/living/simple_mob/mechanical/mecha/Destroy() - qdel_null(sparks) - return ..() - -/mob/living/simple_mob/mechanical/mecha/death() - ..(0,"explodes!") // Do everything else first. - - // Make the exploding more convincing with an actual explosion and some sparks. - sparks.start() - explosion(get_turf(src), 0, 0, 1, 3) - - // 'Eject' our pilot, if one exists. - if(pilot_type) - var/mob/living/L = new pilot_type(loc) - L.faction = src.faction - - new wreckage(loc) // Leave some wreckage. - - qdel(src) // Then delete us since we don't actually have a body. - -/mob/living/simple_mob/mechanical/mecha/handle_special() - if(has_repair_droid) - adjustBruteLoss(-2) - adjustFireLoss(-2) - adjustToxLoss(-2) - adjustOxyLoss(-2) - adjustCloneLoss(-2) - ..() - -/mob/living/simple_mob/mechanical/mecha/update_icon() - ..() // Cuts everything else, so do that first. - if(has_repair_droid) - add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid")) - -/mob/living/simple_mob/mechanical/mecha/bullet_act() - . = ..() - sparks.start() - -/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance() - return pilot_type ? "" : ..() - -// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things. -/mob/living/simple_mob/mechanical/mecha/is_sentient() - return pilot_type ? TRUE : FALSE - -/* -// Real mechs can't turn and run at the same time. This tries to simulate that. -// Commented out because the AI can't handle it sadly. -/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct) - if(direct != dir) - set_dir(direct) - return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown. - return ..() -*/ - -/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P) - if(prob(deflect_chance)) - visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!")) - deflect_sprite() - return 0 - return ..() - -/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite() - var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static") - add_overlay(deflect_image) - sleep(1 SECOND) - cut_overlay(deflect_image) - qdel(deflect_image) -// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE) - -/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user) - if(prob(deflect_chance)) - visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!")) - deflect_sprite() - user.setClickCooldown(user.get_attack_speed(I)) - return - ..() - -/mob/living/simple_mob/mechanical/mecha/ex_act(severity) - if(prob(deflect_chance)) - severity++ // This somewhat misleadingly makes it less severe. - deflect_sprite() - ..(severity) - -/decl/mob_organ_names/mecha - hit_zones = list("central chassis", "control module", "hydraulics", "left arm", "right arm", "left leg", "right leg", "sensor suite", "radiator", "power supply", "left equipment mount", "right equipment mount") +// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight. +// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var. +// Tries to be as similar to the real deal as possible. + +/mob/living/simple_mob/mechanical/mecha + name = "mecha" + desc = "A big stompy mech!" + icon = 'icons/mecha/mecha.dmi' + + faction = "syndicate" + movement_cooldown = 1.5 + movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files. + turn_sound = 'sound/mecha/mechturn.ogg' + maxHealth = 300 + mob_size = MOB_LARGE + damage_threshold = 5 //Anything that's 5 or less damage will not do damage. + + organ_names = /decl/mob_organ_names/mecha + + armor = list( + "melee" = 20, + "bullet" = 10, + "laser" = 0, + "energy" = 0, + "bomb" = 0, + "bio" = 100, + "rad" = 100 + ) + + response_help = "taps on" + response_disarm = "knocks on" + response_harm = "uselessly hits" + harm_intent_damage = 0 + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/malf_drone + + var/datum/effect/effect/system/spark_spread/sparks + var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark + var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds. + var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit. + var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay. + + +/mob/living/simple_mob/mechanical/mecha/Initialize() + sparks = new (src) + sparks.set_up(3, 1, src) + sparks.attach(src) + + if(!pilot_type) + name = "autonomous [initial(name)]" + desc = "[initial(desc)] It appears to be piloted by a drone intelligence." + else + say_list_type = /datum/say_list/merc + + if(has_repair_droid) + update_icon() + + return ..() + +/mob/living/simple_mob/mechanical/mecha/Destroy() + qdel_null(sparks) + return ..() + +/mob/living/simple_mob/mechanical/mecha/death() + ..(0,"explodes!") // Do everything else first. + + // Make the exploding more convincing with an actual explosion and some sparks. + sparks.start() + explosion(get_turf(src), 0, 0, 1, 3) + + // 'Eject' our pilot, if one exists. + if(pilot_type) + var/mob/living/L = new pilot_type(loc) + L.faction = src.faction + + new wreckage(loc) // Leave some wreckage. + + qdel(src) // Then delete us since we don't actually have a body. + +/mob/living/simple_mob/mechanical/mecha/handle_special() + if(has_repair_droid) + adjustBruteLoss(-2) + adjustFireLoss(-2) + adjustToxLoss(-2) + adjustOxyLoss(-2) + adjustCloneLoss(-2) + ..() + +/mob/living/simple_mob/mechanical/mecha/update_icon() + ..() // Cuts everything else, so do that first. + if(has_repair_droid) + add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid")) + +/mob/living/simple_mob/mechanical/mecha/bullet_act() + . = ..() + sparks.start() + +/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance() + return pilot_type ? "" : ..() + +// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things. +/mob/living/simple_mob/mechanical/mecha/is_sentient() + return pilot_type ? TRUE : FALSE + +/* +// Real mechs can't turn and run at the same time. This tries to simulate that. +// Commented out because the AI can't handle it sadly. +/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct) + if(direct != dir) + set_dir(direct) + return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown. + return ..() +*/ + +/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P) + if(prob(deflect_chance)) + visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!")) + deflect_sprite() + return 0 + return ..() + +/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite() + var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static") + add_overlay(deflect_image) + sleep(1 SECOND) + cut_overlay(deflect_image) + qdel(deflect_image) +// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE) + +/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user) + if(prob(deflect_chance)) + visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!")) + deflect_sprite() + user.setClickCooldown(user.get_attack_speed(I)) + return + ..() + +/mob/living/simple_mob/mechanical/mecha/ex_act(severity) + if(prob(deflect_chance)) + severity++ // This somewhat misleadingly makes it less severe. + deflect_sprite() + ..(severity) + +/decl/mob_organ_names/mecha + hit_zones = list("central chassis", "control module", "hydraulics", "left arm", "right arm", "left leg", "right leg", "sensor suite", "radiator", "power supply", "left equipment mount", "right equipment mount") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm index c97050e6f6..736bc6caf5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm @@ -1,81 +1,81 @@ -// Shoots syringe-darts at enemies, which applies a stacking poison modifier that hurts over time. -// They also do this in melee. -// Fortunately they're quite fragile and don't fire that fast. - -/datum/category_item/catalogue/technology/odysseus - name = "Exosuit - Odysseus" - desc = "A Vey-Medical innovation, the Odysseus was designed to incorporate some of their \ - other inventions, such as the Sleeper, into a mobile frame. Due to its ability to safely \ - rescue injured people in potentially hostile environments such as vacuum, as well as its \ - agility compared to other civilian exosuits, the Odysseus dominates the market for \ - medical exosuits." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/mechanical/mecha/odysseus - name = "odysseus" - desc = "These exosuits are developed and produced by Vey-Med. This one has a syringe gun." - catalogue_data = list( - /datum/category_item/catalogue/technology/odysseus, - /datum/category_item/catalogue/information/organization/vey_med - ) - icon_state = "odysseus" - wreckage = /obj/structure/loot_pile/mecha/odysseus - - maxHealth = 120 - movement_cooldown = -1 - turn_sound = 'sound/mecha/mechmove01.ogg' - - melee_damage_lower = 5 - melee_damage_upper = 5 - base_attack_cooldown = 2 SECONDS - attacktext = list("injected") - projectiletype = /obj/item/projectile/fake_syringe/poison - projectilesound = 'sound/weapons/empty.ogg' // Just like the syringe gun. - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/no_moonwalk - -/mob/living/simple_mob/mechanical/mecha/odysseus/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. - - -// Resprite of the regular one, perhaps for merc PoIs. -/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus - icon_state = "murdysseus" - wreckage = /obj/structure/loot_pile/mecha/odysseus/murdysseus - -/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged - - -/mob/living/simple_mob/mechanical/mecha/odysseus/apply_melee_effects(atom/A) - if(isliving(A)) - var/mob/living/L = A - - var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) - if(L.can_inject(src, null, target_zone)) - to_chat(L, span("warning", "You feel a tiny prick.")) - if(L.get_poison_protection() < 1) - L.add_modifier(/datum/modifier/poisoned, 30 SECONDS) - L.inflict_poison_damage(5) - - -// Fake syringe that tests if target can be injected before applying damage/modifiers/etc. -/obj/item/projectile/fake_syringe - name = "syringe" - icon_state = "syringe" - damage = 5 // Getting hit with a launched syringe probably hurts, and makes it at least slightly relevant against synthetics. - var/piercing = FALSE // If true, ignores thick material. - -/obj/item/projectile/fake_syringe/on_hit(atom/target, blocked = 0, def_zone = null) - if(isliving(target)) - var/mob/living/L = target - if(!L.can_inject(null, null, def_zone, piercing)) - return FALSE - to_chat(L, span("warning", "You feel a tiny prick.")) - return ..() // This will add the modifier and return the correct value. - - -// Fake syringe, which inflicts a long lasting modifier that slowly kills them. -/obj/item/projectile/fake_syringe/poison - modifier_type_to_apply = /datum/modifier/poisoned - modifier_duration = 1 MINUTE // About 30 damage per stack over a minute. +// Shoots syringe-darts at enemies, which applies a stacking poison modifier that hurts over time. +// They also do this in melee. +// Fortunately they're quite fragile and don't fire that fast. + +/datum/category_item/catalogue/technology/odysseus + name = "Exosuit - Odysseus" + desc = "A Vey-Medical innovation, the Odysseus was designed to incorporate some of their \ + other inventions, such as the Sleeper, into a mobile frame. Due to its ability to safely \ + rescue injured people in potentially hostile environments such as vacuum, as well as its \ + agility compared to other civilian exosuits, the Odysseus dominates the market for \ + medical exosuits." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/mechanical/mecha/odysseus + name = "odysseus" + desc = "These exosuits are developed and produced by Vey-Med. This one has a syringe gun." + catalogue_data = list( + /datum/category_item/catalogue/technology/odysseus, + /datum/category_item/catalogue/information/organization/vey_med + ) + icon_state = "odysseus" + wreckage = /obj/structure/loot_pile/mecha/odysseus + + maxHealth = 120 + movement_cooldown = -1 + turn_sound = 'sound/mecha/mechmove01.ogg' + + melee_damage_lower = 5 + melee_damage_upper = 5 + base_attack_cooldown = 2 SECONDS + attacktext = list("injected") + projectiletype = /obj/item/projectile/fake_syringe/poison + projectilesound = 'sound/weapons/empty.ogg' // Just like the syringe gun. + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/no_moonwalk + +/mob/living/simple_mob/mechanical/mecha/odysseus/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. + + +// Resprite of the regular one, perhaps for merc PoIs. +/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus + icon_state = "murdysseus" + wreckage = /obj/structure/loot_pile/mecha/odysseus/murdysseus + +/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged + + +/mob/living/simple_mob/mechanical/mecha/odysseus/apply_melee_effects(atom/A) + if(isliving(A)) + var/mob/living/L = A + + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + to_chat(L, span("warning", "You feel a tiny prick.")) + if(L.get_poison_protection() < 1) + L.add_modifier(/datum/modifier/poisoned, 30 SECONDS) + L.inflict_poison_damage(5) + + +// Fake syringe that tests if target can be injected before applying damage/modifiers/etc. +/obj/item/projectile/fake_syringe + name = "syringe" + icon_state = "syringe" + damage = 5 // Getting hit with a launched syringe probably hurts, and makes it at least slightly relevant against synthetics. + var/piercing = FALSE // If true, ignores thick material. + +/obj/item/projectile/fake_syringe/on_hit(atom/target, blocked = 0, def_zone = null) + if(isliving(target)) + var/mob/living/L = target + if(!L.can_inject(null, null, def_zone, piercing)) + return FALSE + to_chat(L, span("warning", "You feel a tiny prick.")) + return ..() // This will add the modifier and return the correct value. + + +// Fake syringe, which inflicts a long lasting modifier that slowly kills them. +/obj/item/projectile/fake_syringe/poison + modifier_type_to_apply = /datum/modifier/poisoned + modifier_duration = 1 MINUTE // About 30 damage per stack over a minute. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm index 562a686385..2e516da556 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm @@ -1,21 +1,21 @@ -// Phazons are weird. - -/mob/living/simple_mob/mechanical/mecha/combat/phazon - name = "phazon" - desc = "An extremly enigmatic exosuit." - icon_state = "phazon" - movement_cooldown = 1.5 - wreckage = /obj/structure/loot_pile/mecha/phazon - - maxHealth = 200 - deflect_chance = 30 - armor = list( - "melee" = 30, - "bullet" = 30, - "laser" = 30, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - projectiletype = /obj/item/projectile/energy/declone +// Phazons are weird. + +/mob/living/simple_mob/mechanical/mecha/combat/phazon + name = "phazon" + desc = "An extremly enigmatic exosuit." + icon_state = "phazon" + movement_cooldown = 1.5 + wreckage = /obj/structure/loot_pile/mecha/phazon + + maxHealth = 200 + deflect_chance = 30 + armor = list( + "melee" = 30, + "bullet" = 30, + "laser" = 30, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + projectiletype = /obj/item/projectile/energy/declone diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm index 063802ca4b..960e96a65e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm @@ -1,75 +1,75 @@ -// Beefy, but somewhat slow. -// Melee attack is to bore you with its big drill, which has a lot of armor penetration and strikes rapidly. - -/datum/category_item/catalogue/technology/ripley - name = "Exosuit - APLU" - desc = "The Autonomous Power Loader Unit, more commonly designated as the 'Ripley', \ - is an exosuit that is often described as 'the workhorse of the exosuit world', \ - due to being designed for industrial use. Featuring a rugged design, they are fairly \ - resilient to the stresses of operation. As such, they are often used for various roles, \ - such as mining, construction, heavy lifting, and cargo transportation." - value = CATALOGUER_REWARD_EASY - - -/mob/living/simple_mob/mechanical/mecha/ripley - name = "\improper APLU ripley" - desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world. This one has big drill." - catalogue_data = list(/datum/category_item/catalogue/technology/ripley) - icon_state = "ripley" - wreckage = /obj/structure/loot_pile/mecha/ripley - - maxHealth = 200 - - melee_damage_lower = 10 - melee_damage_upper = 10 - base_attack_cooldown = 5 // About 20 DPS. - attack_armor_pen = 50 - attack_sharp = TRUE - attack_sound = 'sound/mecha/mechdrill.ogg' - attacktext = list("drilled", "bored", "pierced") - -/mob/living/simple_mob/mechanical/mecha/ripley/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. - -/mob/living/simple_mob/mechanical/mecha/ripley/red_flames - icon_state = "ripley_flames_red" - -/mob/living/simple_mob/mechanical/mecha/ripley/blue_flames - icon_state = "ripley_flames_blue" - - -// Immune to heat damage, resistant to lasers, and somewhat beefier. Still tries to melee you. -/mob/living/simple_mob/mechanical/mecha/ripley/firefighter - name = "\improper APLU firefighter" - desc = "A standard APLU chassis, refitted with additional thermal protection and cistern. This one has a big drill." - icon_state = "firefighter" - wreckage = /obj/structure/loot_pile/mecha/ripley/firefighter - - maxHealth = 250 - heat_resist = 1 - armor = list( - "melee" = 0, - "bullet" = 20, - "laser" = 50, - "energy" = 0, - "bomb" = 50, - "bio" = 100, - "rad" = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged - -// Mostly a joke mob, like the real DEATH-RIPLEY. -/mob/living/simple_mob/mechanical/mecha/ripley/deathripley - name = "\improper DEATH-RIPLEY" - desc = "OH SHIT RUN!!! IT HAS A KILL CLAMP!" - icon_state = "deathripley" - wreckage = /obj/structure/loot_pile/mecha/deathripley - - melee_damage_lower = 0 - melee_damage_upper = 0 - friendly = list("utterly obliterates", "furiously destroys", "permanently removes", "unflichingly decimates", "brutally murders", "absolutely demolishes", "completely annihilates") - -/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged +// Beefy, but somewhat slow. +// Melee attack is to bore you with its big drill, which has a lot of armor penetration and strikes rapidly. + +/datum/category_item/catalogue/technology/ripley + name = "Exosuit - APLU" + desc = "The Autonomous Power Loader Unit, more commonly designated as the 'Ripley', \ + is an exosuit that is often described as 'the workhorse of the exosuit world', \ + due to being designed for industrial use. Featuring a rugged design, they are fairly \ + resilient to the stresses of operation. As such, they are often used for various roles, \ + such as mining, construction, heavy lifting, and cargo transportation." + value = CATALOGUER_REWARD_EASY + + +/mob/living/simple_mob/mechanical/mecha/ripley + name = "\improper APLU ripley" + desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world. This one has big drill." + catalogue_data = list(/datum/category_item/catalogue/technology/ripley) + icon_state = "ripley" + wreckage = /obj/structure/loot_pile/mecha/ripley + + maxHealth = 200 + + melee_damage_lower = 10 + melee_damage_upper = 10 + base_attack_cooldown = 5 // About 20 DPS. + attack_armor_pen = 50 + attack_sharp = TRUE + attack_sound = 'sound/mecha/mechdrill.ogg' + attacktext = list("drilled", "bored", "pierced") + +/mob/living/simple_mob/mechanical/mecha/ripley/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol. + +/mob/living/simple_mob/mechanical/mecha/ripley/red_flames + icon_state = "ripley_flames_red" + +/mob/living/simple_mob/mechanical/mecha/ripley/blue_flames + icon_state = "ripley_flames_blue" + + +// Immune to heat damage, resistant to lasers, and somewhat beefier. Still tries to melee you. +/mob/living/simple_mob/mechanical/mecha/ripley/firefighter + name = "\improper APLU firefighter" + desc = "A standard APLU chassis, refitted with additional thermal protection and cistern. This one has a big drill." + icon_state = "firefighter" + wreckage = /obj/structure/loot_pile/mecha/ripley/firefighter + + maxHealth = 250 + heat_resist = 1 + armor = list( + "melee" = 0, + "bullet" = 20, + "laser" = 50, + "energy" = 0, + "bomb" = 50, + "bio" = 100, + "rad" = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged + +// Mostly a joke mob, like the real DEATH-RIPLEY. +/mob/living/simple_mob/mechanical/mecha/ripley/deathripley + name = "\improper DEATH-RIPLEY" + desc = "OH SHIT RUN!!! IT HAS A KILL CLAMP!" + icon_state = "deathripley" + wreckage = /obj/structure/loot_pile/mecha/deathripley + + melee_damage_lower = 0 + melee_damage_upper = 0 + friendly = list("utterly obliterates", "furiously destroys", "permanently removes", "unflichingly decimates", "brutally murders", "absolutely demolishes", "completely annihilates") + +/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/wahlem_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/wahlem_vr.dm index 6a98f7f44b..b731653cc6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/wahlem_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/wahlem_vr.dm @@ -1,35 +1,35 @@ -// Ancient "soul"-infused mechanical shells. Used by Hlf'erath. - -/mob/living/simple_mob/mechanical/wahlem - name = "Ancient Mechanical Warrior" - desc = "This construct is made of a brass-like material. Though aged, its shine is still brilliant, as it hovers ominously over the battlefield. Red flames spew from its shell. It diligently holds its shield and blade, at the ready, for any threats that may threaten its existence." - icon = 'icons/tgstation/clockworkwarrior.dmi' - icon_state = "clockM" - health = 300 - maxHealth = 300 - - faction = "golem" - - response_help = "brushes over" - response_disarm = "repulses away" - response_harm = "slices" - harm_intent_damage = 3 - friendly = "tolerates" - - melee_damage_lower = 30 // It has an ancient magic sword. - melee_damage_upper = 30 - attack_sound = 'sound/weapons/bladeslice.ogg' - attacktext = list("slashed") - - ai_holder_type = /datum/ai_holder/simple_mob/melee - - // Cataloguer data below - strange we can catalogue space golem wizards -/datum/category_item/catalogue/technology/drone/wahlem - name = "Ancient Construct" - desc = "Some sort of ancient, mechanical warrior, built for combat.\ - It has a brass and red theme. It wields a brass, slightly broken shield in its right hand. It has a sharp, foot-long blade in its other hand..\ - The drone has pristine armor, golden and shiny, with red cracks in its armour glowing visibly from inside.\ -

                    \ - The drone's frame is heavy and armored, unbendable by hand, is barren of any markings or ID,\ - no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." - value = CATALOGUER_REWARD_MEDIUM +// Ancient "soul"-infused mechanical shells. Used by Hlf'erath. + +/mob/living/simple_mob/mechanical/wahlem + name = "Ancient Mechanical Warrior" + desc = "This construct is made of a brass-like material. Though aged, its shine is still brilliant, as it hovers ominously over the battlefield. Red flames spew from its shell. It diligently holds its shield and blade, at the ready, for any threats that may threaten its existence." + icon = 'icons/tgstation/clockworkwarrior.dmi' + icon_state = "clockM" + health = 300 + maxHealth = 300 + + faction = "golem" + + response_help = "brushes over" + response_disarm = "repulses away" + response_harm = "slices" + harm_intent_damage = 3 + friendly = "tolerates" + + melee_damage_lower = 30 // It has an ancient magic sword. + melee_damage_upper = 30 + attack_sound = 'sound/weapons/bladeslice.ogg' + attacktext = list("slashed") + + ai_holder_type = /datum/ai_holder/simple_mob/melee + + // Cataloguer data below - strange we can catalogue space golem wizards +/datum/category_item/catalogue/technology/drone/wahlem + name = "Ancient Construct" + desc = "Some sort of ancient, mechanical warrior, built for combat.\ + It has a brass and red theme. It wields a brass, slightly broken shield in its right hand. It has a sharp, foot-long blade in its other hand..\ + The drone has pristine armor, golden and shiny, with red cracks in its armour glowing visibly from inside.\ +

                    \ + The drone's frame is heavy and armored, unbendable by hand, is barren of any markings or ID,\ + no traces of paint visible and any 'writing' visible is uncomprehendable, short term scan unable to translate." + value = CATALOGUER_REWARD_MEDIUM diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm index aa49ce806b..21f5e78722 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm @@ -1,134 +1,134 @@ -/* - 'Monitor' wards are drones that yell at their creator if they see someone besides them that they are hostile to. - They can also force an invisible entity to uncloak if the invisible mob is hostile to the ward. - If AI controlled, they will also warn their faction if they see a hostile entity, acting as floating cameras. -*/ - -/datum/category_item/catalogue/technology/drone/ward - name = "Drone - Monitor Ward" - desc = "This is a small drone that appears to have been designed for a singular purpose, \ - with little autonomous capability, common among the 'ward' models. This specific ward's \ - purpose is simply to observe the environment around it, reacting when it detects entities \ - it judges to be unfriendly. It presumably relays information about what it sees back to \ - whoever owns the drone.\ -

                    \ - The sensors onboard the ward are much more advanced than what is typical for drones, \ - allowing it to detect entities that might otherwise go unnoticed by inferior \ - observers. If this ward sees such a thing, it fires a beam of energy at the hidden \ - entity, which exposes them." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/mechanical/ward/monitor - desc = "It's a little flying drone. This one seems to be watching you..." - catalogue_data = list(/datum/category_item/catalogue/technology/drone/ward) - icon_state = "ward" - glow_color = "#00FF00" - see_invisible = SEE_INVISIBLE_LEVEL_TWO - - has_eye_glow = TRUE - glow_range = 3 - glow_intensity = 3 - glow_toggle = TRUE - - player_msg = "You will automatically alert your owner (if one exists) of enemies you see nearby.
                    \ - You can also see invisible entities, and will automatically uncloak nearby invisible or hidden enemies." - - ai_holder_type = /datum/ai_holder/simple_mob/monitor - - var/list/seen_mobs = list() - var/view_range = 5 - -// For PoIs. -/mob/living/simple_mob/mechanical/ward/monitor/syndicate - faction = "syndicate" - -/mob/living/simple_mob/mechanical/ward/monitor/crew - icon_state = "ward-nt" - -/mob/living/simple_mob/mechanical/ward/monitor/crew/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/card/id) && !owner) - owner = user - return - ..() - -/mob/living/simple_mob/mechanical/ward/monitor/crew/IIsAlly(mob/living/L) - . = ..() - if(!.) - if(isrobot(L)) // They ignore synths. - return TRUE - return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 3 - -/mob/living/simple_mob/mechanical/ward/monitor/death() - if(owner) - to_chat(owner, span("warning", "Your [src.name] inside [get_area(src)] was destroyed!")) - ..() - -/mob/living/simple_mob/mechanical/ward/monitor/handle_special() - detect_mobs() - -/mob/living/simple_mob/mechanical/ward/monitor/update_icon() - if(seen_mobs.len) - icon_living = "[initial(icon_state)]_spotted" - glow_color = "#FF0000" - else - icon_living = "[initial(icon_state)]" - glow_color = "#00FF00" - handle_light() // Update the light immediately. - ..() - -/mob/living/simple_mob/mechanical/ward/monitor/proc/detect_mobs() - var/last_seen_mobs_len = seen_mobs.len - var/list/mobs_nearby = hearers(view_range, src) - var/list/newly_seen_mobs = list() - for(var/mob/living/L in mobs_nearby) - if(L == src) // Don't detect ourselves. - continue - - if(L.stat) // Dead mobs aren't concerning. - continue - - if(src.IIsAlly(L)) - continue - - // Decloak them . - if(L.is_cloaked()) - Beam(L, icon_state = "solar_beam", time = 5) - playsound(L, 'sound/effects/EMPulse.ogg', 75, 1) - L.break_cloak() - - to_chat(L, span("danger", "\The [src] disrupts your cloak!")) - if(owner) - to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] uncloaked \the [L].")) - - // Warn the owner when it sees a new mob. - if(!(L in seen_mobs)) - seen_mobs += L - newly_seen_mobs += L - - if(newly_seen_mobs.len && owner) // Yell at our owner if someone new shows up. - to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] detected [english_list(newly_seen_mobs)].")) - - // Now get rid of old mobs that left vision. - for(var/thing in seen_mobs) - if(!(thing in mobs_nearby)) - seen_mobs -= thing - - // Check if we need to update icon. - if(seen_mobs.len != last_seen_mobs_len) - update_icon() - - -// Can't attack but calls for help. Used by the monitor and spotter wards. -// Special attacks are not blocked since they might be used for things besides attacking, and can be conditional. -/datum/ai_holder/simple_mob/monitor - hostile = TRUE // Required to call for help. - cooperative = TRUE - stand_ground = TRUE // So it doesn't run up to the thing it sees. - wander = FALSE - can_flee = FALSE - -/datum/ai_holder/simple_mob/monitor/melee_attack(atom/A) - return FALSE - -/datum/ai_holder/simple_mob/monitor/ranged_attack(atom/A) - return FALSE +/* + 'Monitor' wards are drones that yell at their creator if they see someone besides them that they are hostile to. + They can also force an invisible entity to uncloak if the invisible mob is hostile to the ward. + If AI controlled, they will also warn their faction if they see a hostile entity, acting as floating cameras. +*/ + +/datum/category_item/catalogue/technology/drone/ward + name = "Drone - Monitor Ward" + desc = "This is a small drone that appears to have been designed for a singular purpose, \ + with little autonomous capability, common among the 'ward' models. This specific ward's \ + purpose is simply to observe the environment around it, reacting when it detects entities \ + it judges to be unfriendly. It presumably relays information about what it sees back to \ + whoever owns the drone.\ +

                    \ + The sensors onboard the ward are much more advanced than what is typical for drones, \ + allowing it to detect entities that might otherwise go unnoticed by inferior \ + observers. If this ward sees such a thing, it fires a beam of energy at the hidden \ + entity, which exposes them." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/mechanical/ward/monitor + desc = "It's a little flying drone. This one seems to be watching you..." + catalogue_data = list(/datum/category_item/catalogue/technology/drone/ward) + icon_state = "ward" + glow_color = "#00FF00" + see_invisible = SEE_INVISIBLE_LEVEL_TWO + + has_eye_glow = TRUE + glow_range = 3 + glow_intensity = 3 + glow_toggle = TRUE + + player_msg = "You will automatically alert your owner (if one exists) of enemies you see nearby.
                    \ + You can also see invisible entities, and will automatically uncloak nearby invisible or hidden enemies." + + ai_holder_type = /datum/ai_holder/simple_mob/monitor + + var/list/seen_mobs = list() + var/view_range = 5 + +// For PoIs. +/mob/living/simple_mob/mechanical/ward/monitor/syndicate + faction = "syndicate" + +/mob/living/simple_mob/mechanical/ward/monitor/crew + icon_state = "ward-nt" + +/mob/living/simple_mob/mechanical/ward/monitor/crew/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/card/id) && !owner) + owner = user + return + ..() + +/mob/living/simple_mob/mechanical/ward/monitor/crew/IIsAlly(mob/living/L) + . = ..() + if(!.) + if(isrobot(L)) // They ignore synths. + return TRUE + return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 3 + +/mob/living/simple_mob/mechanical/ward/monitor/death() + if(owner) + to_chat(owner, span("warning", "Your [src.name] inside [get_area(src)] was destroyed!")) + ..() + +/mob/living/simple_mob/mechanical/ward/monitor/handle_special() + detect_mobs() + +/mob/living/simple_mob/mechanical/ward/monitor/update_icon() + if(seen_mobs.len) + icon_living = "[initial(icon_state)]_spotted" + glow_color = "#FF0000" + else + icon_living = "[initial(icon_state)]" + glow_color = "#00FF00" + handle_light() // Update the light immediately. + ..() + +/mob/living/simple_mob/mechanical/ward/monitor/proc/detect_mobs() + var/last_seen_mobs_len = seen_mobs.len + var/list/mobs_nearby = hearers(view_range, src) + var/list/newly_seen_mobs = list() + for(var/mob/living/L in mobs_nearby) + if(L == src) // Don't detect ourselves. + continue + + if(L.stat) // Dead mobs aren't concerning. + continue + + if(src.IIsAlly(L)) + continue + + // Decloak them . + if(L.is_cloaked()) + Beam(L, icon_state = "solar_beam", time = 5) + playsound(L, 'sound/effects/EMPulse.ogg', 75, 1) + L.break_cloak() + + to_chat(L, span("danger", "\The [src] disrupts your cloak!")) + if(owner) + to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] uncloaked \the [L].")) + + // Warn the owner when it sees a new mob. + if(!(L in seen_mobs)) + seen_mobs += L + newly_seen_mobs += L + + if(newly_seen_mobs.len && owner) // Yell at our owner if someone new shows up. + to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] detected [english_list(newly_seen_mobs)].")) + + // Now get rid of old mobs that left vision. + for(var/thing in seen_mobs) + if(!(thing in mobs_nearby)) + seen_mobs -= thing + + // Check if we need to update icon. + if(seen_mobs.len != last_seen_mobs_len) + update_icon() + + +// Can't attack but calls for help. Used by the monitor and spotter wards. +// Special attacks are not blocked since they might be used for things besides attacking, and can be conditional. +/datum/ai_holder/simple_mob/monitor + hostile = TRUE // Required to call for help. + cooperative = TRUE + stand_ground = TRUE // So it doesn't run up to the thing it sees. + wander = FALSE + can_flee = FALSE + +/datum/ai_holder/simple_mob/monitor/melee_attack(atom/A) + return FALSE + +/datum/ai_holder/simple_mob/monitor/ranged_attack(atom/A) + return FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm index 9120bec728..79aba5ce9d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm @@ -1,47 +1,47 @@ -/* - Wards are a specific type of mechanical simplemob that generally fill a support role for their faction or for a specific mob. - Generally they are helpless by themselves and are fragile, but can do very useful things if protected. This makes them a high priority target. -*/ - -/mob/living/simple_mob/mechanical/ward - name = "ward" - desc = "A small floating machine. This one seems rather useless..." - icon = 'icons/mob/critter.dmi' - icon_state = "ward" - icon_living = "ward" - hovering = TRUE // Won't trigger landmines. - response_help = "pets" - response_disarm = "swats away" - response_harm = "punches" - faction = "wards" // Needed as most human mobs are in neutral faction. The owner is generally except from any ward hostility regardless. - - organ_names = /decl/mob_organ_names/ward - - maxHealth = 15 - health = 15 - movement_cooldown = -1 - hovering = TRUE - - mob_bump_flag = 0 - - melee_damage_lower = 0 - melee_damage_upper = 0 - - ai_holder_type = null - var/mob/living/owner = null // The mob that made the ward, if any. Used to ensure the ward does not interfere with its creator. - -/mob/living/simple_mob/mechanical/ward/death() - ..(null,"is smashed into pieces!") - qdel(src) - -/mob/living/simple_mob/mechanical/ward/Destroy() - owner = null - return ..() - -/mob/living/simple_mob/mechanical/ward/IIsAlly(mob/living/L) - if(owner == L) - return TRUE - return ..() - -/decl/mob_organ_names/ward - hit_zones = list("chassis", "sensor array", "hover thruster") +/* + Wards are a specific type of mechanical simplemob that generally fill a support role for their faction or for a specific mob. + Generally they are helpless by themselves and are fragile, but can do very useful things if protected. This makes them a high priority target. +*/ + +/mob/living/simple_mob/mechanical/ward + name = "ward" + desc = "A small floating machine. This one seems rather useless..." + icon = 'icons/mob/critter.dmi' + icon_state = "ward" + icon_living = "ward" + hovering = TRUE // Won't trigger landmines. + response_help = "pets" + response_disarm = "swats away" + response_harm = "punches" + faction = "wards" // Needed as most human mobs are in neutral faction. The owner is generally except from any ward hostility regardless. + + organ_names = /decl/mob_organ_names/ward + + maxHealth = 15 + health = 15 + movement_cooldown = -1 + hovering = TRUE + + mob_bump_flag = 0 + + melee_damage_lower = 0 + melee_damage_upper = 0 + + ai_holder_type = null + var/mob/living/owner = null // The mob that made the ward, if any. Used to ensure the ward does not interfere with its creator. + +/mob/living/simple_mob/mechanical/ward/death() + ..(null,"is smashed into pieces!") + qdel(src) + +/mob/living/simple_mob/mechanical/ward/Destroy() + owner = null + return ..() + +/mob/living/simple_mob/mechanical/ward/IIsAlly(mob/living/L) + if(owner == L) + return TRUE + return ..() + +/decl/mob_organ_names/ward + hit_zones = list("chassis", "sensor array", "hover thruster") diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metAI.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metAI.dm index 2539af6ded..7c3c6bd3f2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metAI.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metAI.dm @@ -1,62 +1,62 @@ -// Specialized AI for metroid simplemobs. -// Unlike the parent AI code, this will probably break a lot of things if you put it on something that isn't /mob/living/simple_mob/metroid/juvenile - -/datum/ai_holder/simple_mob/juvenile_metroid - hostile = TRUE - cooperative = TRUE - firing_lanes = TRUE - mauling = TRUE // They need it to get the most out of monkeys. - conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese. - var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them. - var/always_stun = FALSE // If true, the metroid will elect to attempt to permastun the target. - -/datum/ai_holder/simple_mob/juvenile_metroid/on_engagement(atom/A) - if(get_dist(holder, A) > closest_desired_distance) - holder.IMove(get_step_towards(holder, A)) - -/datum/ai_holder/simple_mob/juvenile_metroid/New() - ..() - ASSERT(istype(holder, /mob/living/simple_mob/metroid/juvenile)) - - -/datum/ai_holder/simple_mob/juvenile_metroid/handle_special_tactic() - evolve_and_reproduce() - -// Hit the correct verbs to keep the metroid species going. -/datum/ai_holder/simple_mob/juvenile_metroid/proc/evolve_and_reproduce() - var/mob/living/simple_mob/metroid/juvenile/my_juvenile = holder - if(my_juvenile.nutrition >= my_juvenile.evo_point) - // Press the correct verb when we can. - my_juvenile.evolve() // Turns our holder into an adult metroid. - -// The holder's attack changes based on intent. This lets the AI choose what effect is desired. -/datum/ai_holder/simple_mob/juvenile_metroid/pre_melee_attack(atom/A) - if(istype(A, /mob/living)) - var/mob/living/L = A - var/mob/living/simple_mob/metroid/juvenile/my_juvenile = holder - - if( (!L.lying && prob(30 + (my_juvenile.power_charge * 7) ) || (!L.lying && always_stun) )) - my_juvenile.a_intent = I_DISARM // Stun them first. - else if(my_juvenile.is_juvenile && my_juvenile.can_consume(L) && L.lying) - my_juvenile.a_intent = I_GRAB // Then eat them. - else - my_juvenile.a_intent = I_HURT // Otherwise robust them. - -/datum/ai_holder/simple_mob/juvenile_metroid/closest_distance(atom/movable/AM) - if(istype(AM, /mob/living)) - var/mob/living/L = AM - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(istype(H.species, /datum/species/monkey)) - return 1 // Otherwise ranged metroids will eat a lot less often. - if(L.stat >= UNCONSCIOUS) - return 1 // Melee (eat) the target if dead/dying, don't shoot it. - return ..() - -/datum/ai_holder/simple_mob/juvenile_metroid/can_attack(atom/movable/AM, var/vision_required = TRUE) - . = ..() - if(.) // Do some additional checks because we have Special Code(tm). - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. - return TRUE // Monkeys are always food (sorry Pun Pun). +// Specialized AI for metroid simplemobs. +// Unlike the parent AI code, this will probably break a lot of things if you put it on something that isn't /mob/living/simple_mob/metroid/juvenile + +/datum/ai_holder/simple_mob/juvenile_metroid + hostile = TRUE + cooperative = TRUE + firing_lanes = TRUE + mauling = TRUE // They need it to get the most out of monkeys. + conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese. + var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them. + var/always_stun = FALSE // If true, the metroid will elect to attempt to permastun the target. + +/datum/ai_holder/simple_mob/juvenile_metroid/on_engagement(atom/A) + if(get_dist(holder, A) > closest_desired_distance) + holder.IMove(get_step_towards(holder, A)) + +/datum/ai_holder/simple_mob/juvenile_metroid/New() + ..() + ASSERT(istype(holder, /mob/living/simple_mob/metroid/juvenile)) + + +/datum/ai_holder/simple_mob/juvenile_metroid/handle_special_tactic() + evolve_and_reproduce() + +// Hit the correct verbs to keep the metroid species going. +/datum/ai_holder/simple_mob/juvenile_metroid/proc/evolve_and_reproduce() + var/mob/living/simple_mob/metroid/juvenile/my_juvenile = holder + if(my_juvenile.nutrition >= my_juvenile.evo_point) + // Press the correct verb when we can. + my_juvenile.evolve() // Turns our holder into an adult metroid. + +// The holder's attack changes based on intent. This lets the AI choose what effect is desired. +/datum/ai_holder/simple_mob/juvenile_metroid/pre_melee_attack(atom/A) + if(istype(A, /mob/living)) + var/mob/living/L = A + var/mob/living/simple_mob/metroid/juvenile/my_juvenile = holder + + if( (!L.lying && prob(30 + (my_juvenile.power_charge * 7) ) || (!L.lying && always_stun) )) + my_juvenile.a_intent = I_DISARM // Stun them first. + else if(my_juvenile.is_juvenile && my_juvenile.can_consume(L) && L.lying) + my_juvenile.a_intent = I_GRAB // Then eat them. + else + my_juvenile.a_intent = I_HURT // Otherwise robust them. + +/datum/ai_holder/simple_mob/juvenile_metroid/closest_distance(atom/movable/AM) + if(istype(AM, /mob/living)) + var/mob/living/L = AM + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(istype(H.species, /datum/species/monkey)) + return 1 // Otherwise ranged metroids will eat a lot less often. + if(L.stat >= UNCONSCIOUS) + return 1 // Melee (eat) the target if dead/dying, don't shoot it. + return ..() + +/datum/ai_holder/simple_mob/juvenile_metroid/can_attack(atom/movable/AM, var/vision_required = TRUE) + . = ..() + if(.) // Do some additional checks because we have Special Code(tm). + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. + return TRUE // Monkeys are always food (sorry Pun Pun). diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm index 92b99b84f7..6f45c9ca0f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm @@ -1,123 +1,123 @@ -// The top-level metroid defines. Xenobio slimes and feral slimes will inherit from this. Stolen from as much slime code as possible. - -/mob/living/simple_mob/metroid - name = "metroid" - desc = "Some sort of person eaty thing! This is the prototype mob and shouldn't be spawned. If you see this, yell at your local dev or event manager who spawned this one >.>" - tt_desc = "Headamus Suckumus" - icon = 'icons/mob/metroid/small.dmi' - icon_state = "metroid" - icon_living = "metroid" - icon_dead = "metroid_dead" - layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. - var/icon_state_override = null // Used for special slime appearances like the rainbow slime. - gender = NEUTER - - faction = "metroids" - maxHealth = 25 - movement_cooldown = 1.7 - pass_flags = PASSTABLE - makes_dirt = FALSE // Floats, mostly. - mob_class = MOB_CLASS_SLIME //This needs to be updated in simple_mob.dm and _defines/mobs.dm - - response_help = "pets" - - // Atmos stuff. - minbodytemp = T0C-30 - heat_damage_per_tick = 0 - cold_damage_per_tick = 40 - - 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_atoms_damage = 0 - - melee_damage_lower = 10 - melee_damage_upper = 15 - base_attack_cooldown = 10 // One attack a second. - attack_sound = 'sound/metroid/metroidattack.ogg' - attacktext = list("suckulated") - speak_emote = list("chirps") - friendly = list("pokes") - - ai_holder_type = /datum/ai_holder/simple_mob/melee - say_list_type = /datum/say_list/metroid - - harm_intent_damage = 5 //When someone uses fists. Default is 3 - - vore_active = 1 - vore_pounce_chance = 25 - vore_icons = SA_ICON_LIVING - - nutrition = 1000 //This actually gets overridden further down on initialize. - max_nutrition = 2200 - var/evo_point = 0 - var/evo_limit = 0 - var/next - meat_type = /obj/item/toy/figure/bounty_hunter - - can_be_drop_prey = FALSE //CHOMP Add - - can_pain_emote = TRUE - species_sounds = "Metroid" - pain_emote_1p = list("skree") - pain_emote_3p = list("skrees") - -/mob/living/simple_mob/metroid/Initialize() - nutrition = 100 //Have them start off pretty hungry still. - existing_metroids += src //Keep track of how many for the event. - verbs += /mob/living/proc/ventcrawl //May not do anything at the moment. - return ..() - -/datum/say_list/metroid - speak = list("Skree.", "Eree.", "Errer?") - emote_see = list("floats about","looks around", "rubs its talons") - emote_hear = list("chitters") - say_understood = list("Eree.") - say_cannot = list("Errerr.") - say_maybe_target = list("Eree?") - say_got_target = list("Ereet!") - say_threaten = list("Skree!") - say_stand_down = list("Eee.") - say_escalate = list("SKREE!") - threaten_sound = 'sound/metroid/metroidsee.ogg' - stand_down_sound = 'sound/metroid/metroiddetach.ogg' - - -/mob/living/simple_mob/metroid/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.digest_brute = 1 - B.digest_burn = 1 - B.vore_verb = "swallow" - B.name = "membrane" //THERE IS A RUNTIME HERE SOMEHOW - B.desc = "The metroid positions itself above you and swoops down, lazily enveloping you through its tight mouth and sending you straight to its bulbous membrane for all to see." - B.emote_lists[DM_HOLD] = list( - "The metroid's cortex tentacles wriggle over you, violating and teasing you as they sopped you in viscous slime.", - "The cortex you are forced against pulses with life, gently squeezing you between it and the stretchy membrane around you.", - "You press your face against the transparent membrane, watching how the world distorts as it stretches over your eyes.", - "The air around you is so thick. You struggle to breathe occasionally, choking on the heat and moisture.", - "You struggle a bit, making the membrane swell out." - ) - B.emote_lists[DM_DIGEST] = list( - "The cortex tentacles are pulsating like lines of power streaking away from you as it drains you. Waves of sleepiness wash over you as the areas most closest to the tentacles are drained of energy.", - "The air feels a tinge incendiary as the cortex you rest on heats up, fueled by your own body as the metroid draws your strenght away from you.", - "As you grow weaker, your movements against the membrane grow weaker as well, making you feel as if the membrane is closing around you, wrapping and squeezing you, draining you for all you are worth.", - "You feel faint as the tentacles wrapped around you sap you of your strength, seemingly eager to drain and claim you for food." - ) - B.digest_messages_prey = list( - "You can't stay awake anymore, the clear world around you going fuzzy until you can see it no more.", - "The tinge of the air grows to a crescendo and then fades away, just as the rest of your body fizzles into energy for the metroid.", - "The tentacles squeeze you one last time as the last of your energy is sapped and your body is claimed as food for the metroid.", - "The metroid swells as it absorbs the rest of your life force and nutrients into its body, making it stronger and even hungry for more." - ) - -/mob/living/simple_mob/metroid/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 75, 1) - ..() +// The top-level metroid defines. Xenobio slimes and feral slimes will inherit from this. Stolen from as much slime code as possible. + +/mob/living/simple_mob/metroid + name = "metroid" + desc = "Some sort of person eaty thing! This is the prototype mob and shouldn't be spawned. If you see this, yell at your local dev or event manager who spawned this one >.>" + tt_desc = "Headamus Suckumus" + icon = 'icons/mob/metroid/small.dmi' + icon_state = "metroid" + icon_living = "metroid" + icon_dead = "metroid_dead" + layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. + var/icon_state_override = null // Used for special slime appearances like the rainbow slime. + gender = NEUTER + + faction = "metroids" + maxHealth = 25 + movement_cooldown = 1.7 + pass_flags = PASSTABLE + makes_dirt = FALSE // Floats, mostly. + mob_class = MOB_CLASS_SLIME //This needs to be updated in simple_mob.dm and _defines/mobs.dm + + response_help = "pets" + + // Atmos stuff. + minbodytemp = T0C-30 + heat_damage_per_tick = 0 + cold_damage_per_tick = 40 + + 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_atoms_damage = 0 + + melee_damage_lower = 10 + melee_damage_upper = 15 + base_attack_cooldown = 10 // One attack a second. + attack_sound = 'sound/metroid/metroidattack.ogg' + attacktext = list("suckulated") + speak_emote = list("chirps") + friendly = list("pokes") + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/metroid + + harm_intent_damage = 5 //When someone uses fists. Default is 3 + + vore_active = 1 + vore_pounce_chance = 25 + vore_icons = SA_ICON_LIVING + + nutrition = 1000 //This actually gets overridden further down on initialize. + max_nutrition = 2200 + var/evo_point = 0 + var/evo_limit = 0 + var/next + meat_type = /obj/item/toy/figure/bounty_hunter + + can_be_drop_prey = FALSE //CHOMP Add + + can_pain_emote = TRUE + species_sounds = "Metroid" + pain_emote_1p = list("skree") + pain_emote_3p = list("skrees") + +/mob/living/simple_mob/metroid/Initialize() + nutrition = 100 //Have them start off pretty hungry still. + existing_metroids += src //Keep track of how many for the event. + verbs += /mob/living/proc/ventcrawl //May not do anything at the moment. + return ..() + +/datum/say_list/metroid + speak = list("Skree.", "Eree.", "Errer?") + emote_see = list("floats about","looks around", "rubs its talons") + emote_hear = list("chitters") + say_understood = list("Eree.") + say_cannot = list("Errerr.") + say_maybe_target = list("Eree?") + say_got_target = list("Ereet!") + say_threaten = list("Skree!") + say_stand_down = list("Eee.") + say_escalate = list("SKREE!") + threaten_sound = 'sound/metroid/metroidsee.ogg' + stand_down_sound = 'sound/metroid/metroiddetach.ogg' + + +/mob/living/simple_mob/metroid/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.digest_brute = 1 + B.digest_burn = 1 + B.vore_verb = "swallow" + B.name = "membrane" //THERE IS A RUNTIME HERE SOMEHOW + B.desc = "The metroid positions itself above you and swoops down, lazily enveloping you through its tight mouth and sending you straight to its bulbous membrane for all to see." + B.emote_lists[DM_HOLD] = list( + "The metroid's cortex tentacles wriggle over you, violating and teasing you as they sopped you in viscous slime.", + "The cortex you are forced against pulses with life, gently squeezing you between it and the stretchy membrane around you.", + "You press your face against the transparent membrane, watching how the world distorts as it stretches over your eyes.", + "The air around you is so thick. You struggle to breathe occasionally, choking on the heat and moisture.", + "You struggle a bit, making the membrane swell out." + ) + B.emote_lists[DM_DIGEST] = list( + "The cortex tentacles are pulsating like lines of power streaking away from you as it drains you. Waves of sleepiness wash over you as the areas most closest to the tentacles are drained of energy.", + "The air feels a tinge incendiary as the cortex you rest on heats up, fueled by your own body as the metroid draws your strenght away from you.", + "As you grow weaker, your movements against the membrane grow weaker as well, making you feel as if the membrane is closing around you, wrapping and squeezing you, draining you for all you are worth.", + "You feel faint as the tentacles wrapped around you sap you of your strength, seemingly eager to drain and claim you for food." + ) + B.digest_messages_prey = list( + "You can't stay awake anymore, the clear world around you going fuzzy until you can see it no more.", + "The tinge of the air grows to a crescendo and then fades away, just as the rest of your body fizzles into energy for the metroid.", + "The tentacles squeeze you one last time as the last of your energy is sapped and your body is claimed as food for the metroid.", + "The metroid swells as it absorbs the rest of your life force and nutrients into its body, making it stronger and even hungry for more." + ) + +/mob/living/simple_mob/metroid/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 75, 1) + ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metConsumption.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metConsumption.dm index e4e43e223d..907ec95f0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metConsumption.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metConsumption.dm @@ -1,140 +1,140 @@ -// Handles hunger, starvation, growth, and eatting humans. - -/mob/living/simple_mob/metroid/juvenile/adjust_nutrition(input, var/heal = 1) - ..(input) - - if(input > 0) - // Gain around one level per 50 nutrition. - if(prob(input * 2)) - power_charge = min(power_charge++, 10) - if(power_charge == 10) - adjustToxLoss(-10) - - // Heal 1 point of damage per 5 nutrition coming in. - if(heal) - adjustBruteLoss(-input * 0.2) - adjustFireLoss(-input * 0.2) - adjustToxLoss(-input * 0.2) - adjustOxyLoss(-input * 0.2) - adjustCloneLoss(-input * 0.2) - - -/mob/living/simple_mob/metroid/juvenile/proc/handle_consumption() - if(victim && !stat) - if(istype(victim) && consume(victim, 20)) - if(prob(25)) - to_chat(src, span("notice", "You continue absorbing \the [victim].")) - - else - var/list/feedback = list( - "This subject is incompatable", - "This subject does not have a life energy", - "This subject is empty", - "I am not satisfied", - "I can not feed from this subject", - "I do not feel nourished", - "This subject is not food" - ) - to_chat(src, span("warning", "[pick(feedback)]...")) - stop_consumption() - - if(victim) - victim.updatehealth() - - else - stop_consumption() - -/mob/living/simple_mob/metroid/juvenile/proc/start_consuming(mob/living/L) - if(!is_juvenile) - return - if(!can_consume(L)) - return - if(!Adjacent(L)) - return - - step_towards(src, L) // Get on top of them to feed. - if(loc != L.loc) - return - - if(L.buckle_mob(src, forced = TRUE)) - victim = L - update_icon() - set_AI_busy(TRUE) // Don't want the AI to interfere with eatting. - playsound(src, 'sound/metroid/metroidattach.ogg', 50, 1) - victim.visible_message( - span("danger", "\The [src] latches onto \the [victim]!"), - span("critical", "\The [src] latches onto you!") - ) - -/mob/living/simple_mob/metroid/juvenile/proc/stop_consumption(mob/living/L) - if(!victim) - return - playsound(src, 'sound/metroid/metroiddetach.ogg', 50, 1) - victim.unbuckle_mob() - victim.visible_message( - span("notice", "\The [src] slides off of [victim]!"), - span("notice", "\The [src] slides off of you!") - ) - victim = null - update_icon() - spawn(30) - set_AI_busy(FALSE) // Resume normal operations. - -/mob/living/simple_mob/metroid/juvenile/proc/can_consume(mob/living/L) - if(!L || !istype(L)) - to_chat(src, "This subject is incomparable...") - return FALSE - if(harmless) - to_chat(src, "I am pacified... I cannot eat...") - return FALSE - if(L.mob_class & MOB_CLASS_SLIME) - to_chat(src, "I cannot feed on other slimes...") - return FALSE - if(L.isSynthetic()) - to_chat(src, "This subject is not biological...") - return FALSE - if(L.getarmor(null, "bio") >= 75) - to_chat(src, "I cannot reach this subject's biological matter...") - return FALSE - if(!Adjacent(L)) - to_chat(src, "This subject is too far away...") - return FALSE - if(L.getCloneLoss() >= L.getMaxHealth() * 1.5) - to_chat(src, "This subject does not have an edible life energy...") - return FALSE - //VOREStation Addition start - if(istype(L, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = L - if(H.species.flags & NO_SCAN) - to_chat(src, "This subject's life energy is beyond my reach...") - return FALSE - //VOREStation Addition end - if(L.has_buckled_mobs()) - for(var/A in L.buckled_mobs) - if(istype(A, /mob/living/simple_mob/slime/xenobio)) - if(A != src) - to_chat(src, "\The [A] is already feeding on this subject...") - return FALSE - return TRUE - -// This does the actual damage, as well as give nutrition and heals. -// Assuming no bio armor, calling consume(10) will result in; -// 6 clone damage to victim -// 4 tox damage to victim. -// 25 nutrition for the slime. -// 2 points of damage healed on the slime (as a result of the nutrition). -// 50% of giving +1 charge to the slime (same as above). -/mob/living/simple_mob/metroid/juvenile/proc/consume(mob/living/victim, amount) - if(can_consume(victim)) - var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1) - var/damage_done = amount * armor_modifier - if(damage_done > 0) - playsound(src, 'sound/metroid/metroidattack.ogg', 100, 1) - victim.adjustCloneLoss(damage_done * 0.6) - victim.adjustToxLoss(damage_done * 0.4) - adjust_nutrition(damage_done * 5) - Beam(victim, icon_state = "slime_consume", time = 8) - to_chat(src, span("notice", "You absorb some biomaterial from \the [victim].")) - to_chat(victim, span("danger", "\The [src] consumes some of your flesh!")) - return TRUE - return FALSE +// Handles hunger, starvation, growth, and eatting humans. + +/mob/living/simple_mob/metroid/juvenile/adjust_nutrition(input, var/heal = 1) + ..(input) + + if(input > 0) + // Gain around one level per 50 nutrition. + if(prob(input * 2)) + power_charge = min(power_charge++, 10) + if(power_charge == 10) + adjustToxLoss(-10) + + // Heal 1 point of damage per 5 nutrition coming in. + if(heal) + adjustBruteLoss(-input * 0.2) + adjustFireLoss(-input * 0.2) + adjustToxLoss(-input * 0.2) + adjustOxyLoss(-input * 0.2) + adjustCloneLoss(-input * 0.2) + + +/mob/living/simple_mob/metroid/juvenile/proc/handle_consumption() + if(victim && !stat) + if(istype(victim) && consume(victim, 20)) + if(prob(25)) + to_chat(src, span("notice", "You continue absorbing \the [victim].")) + + else + var/list/feedback = list( + "This subject is incompatable", + "This subject does not have a life energy", + "This subject is empty", + "I am not satisfied", + "I can not feed from this subject", + "I do not feel nourished", + "This subject is not food" + ) + to_chat(src, span("warning", "[pick(feedback)]...")) + stop_consumption() + + if(victim) + victim.updatehealth() + + else + stop_consumption() + +/mob/living/simple_mob/metroid/juvenile/proc/start_consuming(mob/living/L) + if(!is_juvenile) + return + if(!can_consume(L)) + return + if(!Adjacent(L)) + return + + step_towards(src, L) // Get on top of them to feed. + if(loc != L.loc) + return + + if(L.buckle_mob(src, forced = TRUE)) + victim = L + update_icon() + set_AI_busy(TRUE) // Don't want the AI to interfere with eatting. + playsound(src, 'sound/metroid/metroidattach.ogg', 50, 1) + victim.visible_message( + span("danger", "\The [src] latches onto \the [victim]!"), + span("critical", "\The [src] latches onto you!") + ) + +/mob/living/simple_mob/metroid/juvenile/proc/stop_consumption(mob/living/L) + if(!victim) + return + playsound(src, 'sound/metroid/metroiddetach.ogg', 50, 1) + victim.unbuckle_mob() + victim.visible_message( + span("notice", "\The [src] slides off of [victim]!"), + span("notice", "\The [src] slides off of you!") + ) + victim = null + update_icon() + spawn(30) + set_AI_busy(FALSE) // Resume normal operations. + +/mob/living/simple_mob/metroid/juvenile/proc/can_consume(mob/living/L) + if(!L || !istype(L)) + to_chat(src, "This subject is incomparable...") + return FALSE + if(harmless) + to_chat(src, "I am pacified... I cannot eat...") + return FALSE + if(L.mob_class & MOB_CLASS_SLIME) + to_chat(src, "I cannot feed on other slimes...") + return FALSE + if(L.isSynthetic()) + to_chat(src, "This subject is not biological...") + return FALSE + if(L.getarmor(null, "bio") >= 75) + to_chat(src, "I cannot reach this subject's biological matter...") + return FALSE + if(!Adjacent(L)) + to_chat(src, "This subject is too far away...") + return FALSE + if(L.getCloneLoss() >= L.getMaxHealth() * 1.5) + to_chat(src, "This subject does not have an edible life energy...") + return FALSE + //VOREStation Addition start + if(istype(L, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = L + if(H.species.flags & NO_SCAN) + to_chat(src, "This subject's life energy is beyond my reach...") + return FALSE + //VOREStation Addition end + if(L.has_buckled_mobs()) + for(var/A in L.buckled_mobs) + if(istype(A, /mob/living/simple_mob/slime/xenobio)) + if(A != src) + to_chat(src, "\The [A] is already feeding on this subject...") + return FALSE + return TRUE + +// This does the actual damage, as well as give nutrition and heals. +// Assuming no bio armor, calling consume(10) will result in; +// 6 clone damage to victim +// 4 tox damage to victim. +// 25 nutrition for the slime. +// 2 points of damage healed on the slime (as a result of the nutrition). +// 50% of giving +1 charge to the slime (same as above). +/mob/living/simple_mob/metroid/juvenile/proc/consume(mob/living/victim, amount) + if(can_consume(victim)) + var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1) + var/damage_done = amount * armor_modifier + if(damage_done > 0) + playsound(src, 'sound/metroid/metroidattack.ogg', 100, 1) + victim.adjustCloneLoss(damage_done * 0.6) + victim.adjustToxLoss(damage_done * 0.4) + adjust_nutrition(damage_done * 5) + Beam(victim, icon_state = "slime_consume", time = 8) + to_chat(src, span("notice", "You absorb some biomaterial from \the [victim].")) + to_chat(victim, span("danger", "\The [src] consumes some of your flesh!")) + return TRUE + return FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metJuvenile.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metJuvenile.dm index 101721a98f..c8c25631a2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metJuvenile.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metJuvenile.dm @@ -1,172 +1,172 @@ -//Some basic metroid specific mechanics. Lifted from slime code, but gutted all the xenobio taming stuff. Feel free to add it back in, but I recommend making a new specific subset of tamable metroids and leaving the others as wild or soemthing. - -/mob/living/simple_mob/metroid/juvenile - desc = "This metroid should not be spawned. Yell at your local dev or event manager." - layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. - max_nutrition = 1000 - var/is_queen = FALSE // When the metroid is a queen, it should just be shitting out babies. Found in metAI.dm and in metTypes for the queen. - var/maxHealth_adult = 200 - var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough. - var/mob/living/victim = null // the person the metroid is currently feeding on - var/amount_grown = 0 // controls how long the metroid has been overfed, if 10, grows or reproduces - var/number = 0 // This is used to make the metroid semi-unique for indentification. - var/harmless = FALSE // Set to true when pacified. Makes the metroid harmless, not get hungry, and not be able to grow/reproduce. - - -/mob/living/simple_mob/metroid/juvenile/Destroy() - if(victim) - stop_consumption() // Unbuckle us from our victim. - return ..() - -/mob/living/simple_mob/metroid/juvenile/handle_special() - if(stat != DEAD) - if(victim) - handle_consumption() - - handle_stuttering() // ?? - - ..() - -/mob/living/simple_mob/metroid/juvenile/examine(mob/user) - . = ..() - if(stat == DEAD) - . += "It appears to be dead." - else if(incapacitated(INCAPACITATION_DISABLED)) - . += "It appears to be incapacitated." - else if(harmless) - . += "It appears to have been pacified." - -/mob/living/simple_mob/metroid/juvenile/verb/evolve() - set category = "metroid" - set desc = "This will let you advance to next form." - - if(stat) - to_chat(src, span("warning", "I must be conscious to do this...")) - return - - if(is_queen) - paralysis = 7998 - playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) - src.visible_message("\The [src] begins to lay an egg.") - spawn(50) - new /obj/effect/metroid/egg(loc, src) - adjust_nutrition(-500) - paralysis = 0 - return - - if(nutrition >= evo_point && !buckled && vore_fullness == 0 && !victim) - if(next == "/mob/living/simple_mob/metroid/juvenile/queen" && GLOB.queen_amount > 0) - to_chat(src, span("warning", "There is already a queen.")) - return - playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) - paralysis = 7998 - sleep(50) - expand_troid() - - if(nutrition >= evo_limit && (buckled || vore_fullness == 1)) //spit dat crap out if nutrition gets too high! - release_vore_contents() - prey_excludes.Cut() - stop_consumption() - - else - to_chat(src, span("warning", "I am not ready to evolve yet...")) - -/mob/living/simple_mob/metroid/juvenile/proc/expand_troid() - var/mob/living/L - L = new next(get_turf(src)) //Next is a variable defined by metTypes.dm that just points to the next metroid in the evolutionary stage. - if(mind) - src.mind.transfer_to(L) - visible_message("\The [src] suddenly evolves!") - qdel(src) - -// Code for metroids attacking other things. -// metroid attacks change based on intent. -/mob/living/simple_mob/metroid/juvenile/apply_attack(mob/living/L, damage_to_do) - if(istype(L)) - switch(a_intent) - if(I_HELP) // This shouldn't happen but just in case. - return FALSE - - if(I_DISARM) - var/stun_power = between(0, power_charge + rand(0, 3), 10) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - stun_power *= max(H.species.siemens_coefficient, 0) - - if(prob(stun_power * 10)) // Try an electric shock. - power_charge = max(0, power_charge - 3) - L.visible_message( - span("danger", "\The [src] has shocked \the [L]!"), - span("danger", "\The [src] has shocked you!") - ) - playsound(src, 'sound/weapons/Egloves.ogg', 75, 1) - L.Weaken(4) - L.Stun(4) - do_attack_animation(L) - if(L.buckled) - L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents metroids from jumping on you. - L.stuttering = max(L.stuttering, stun_power) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, L) - s.start() - - if(prob(stun_power * 10) && stun_power >= 8) - L.adjustFireLoss(power_charge * rand(1, 2)) - return FALSE - - else if(prob(20)) // Try to do a regular disarm attack. - L.visible_message( - span("danger", "\The [src] has pounced at \the [L]!"), - span("danger", "\The [src] has pounced at you!") - ) - playsound(src, 'sound/weapons/thudswoosh.ogg', 75, 1) - L.Weaken(2) - do_attack_animation(L) - if(L.buckled) - L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents metroids from jumping on you. - return FALSE - - else // Failed to do anything this time. - L.visible_message( - span("warning", "\The [src] has tried to pounce at \the [L]!"), - span("warning", "\The [src] has tried to pounce at you!") - ) - playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) - do_attack_animation(L) - return FALSE - - if(I_GRAB) - start_consuming(L) - return FALSE - - if(I_HURT) - return ..() // Regular stuff. - else - return ..() // Do the regular stuff if we're hitting a window/mech/etc. - -/mob/living/simple_mob/metroid/juvenile/apply_melee_effects(mob/living/L) - if(istype(L) && a_intent == I_HURT) - // Feed off of their flesh, if able. - consume(L, 5) - -//Code to remove metroid from someone -/mob/living/simple_mob/metroid/juvenile/attack_hand(mob/living/L) - if(victim) // Are we eating someone? - var/fail_odds = 30 - if(victim == L) // Harder to get the metroid off if it's you that is being eatten. - fail_odds = 60 - - if(prob(fail_odds)) - visible_message(span("warning", "\The [L] attempts to wrestle \the [name] off!")) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - - else - visible_message(span("warning", "\The [L] manages to wrestle \the [name] off!")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - stop_consumption() - step_away(src, L) - - else - ..() +//Some basic metroid specific mechanics. Lifted from slime code, but gutted all the xenobio taming stuff. Feel free to add it back in, but I recommend making a new specific subset of tamable metroids and leaving the others as wild or soemthing. + +/mob/living/simple_mob/metroid/juvenile + desc = "This metroid should not be spawned. Yell at your local dev or event manager." + layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. + max_nutrition = 1000 + var/is_queen = FALSE // When the metroid is a queen, it should just be shitting out babies. Found in metAI.dm and in metTypes for the queen. + var/maxHealth_adult = 200 + var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough. + var/mob/living/victim = null // the person the metroid is currently feeding on + var/amount_grown = 0 // controls how long the metroid has been overfed, if 10, grows or reproduces + var/number = 0 // This is used to make the metroid semi-unique for indentification. + var/harmless = FALSE // Set to true when pacified. Makes the metroid harmless, not get hungry, and not be able to grow/reproduce. + + +/mob/living/simple_mob/metroid/juvenile/Destroy() + if(victim) + stop_consumption() // Unbuckle us from our victim. + return ..() + +/mob/living/simple_mob/metroid/juvenile/handle_special() + if(stat != DEAD) + if(victim) + handle_consumption() + + handle_stuttering() // ?? + + ..() + +/mob/living/simple_mob/metroid/juvenile/examine(mob/user) + . = ..() + if(stat == DEAD) + . += "It appears to be dead." + else if(incapacitated(INCAPACITATION_DISABLED)) + . += "It appears to be incapacitated." + else if(harmless) + . += "It appears to have been pacified." + +/mob/living/simple_mob/metroid/juvenile/verb/evolve() + set category = "metroid" + set desc = "This will let you advance to next form." + + if(stat) + to_chat(src, span("warning", "I must be conscious to do this...")) + return + + if(is_queen) + paralysis = 7998 + playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) + src.visible_message("\The [src] begins to lay an egg.") + spawn(50) + new /obj/effect/metroid/egg(loc, src) + adjust_nutrition(-500) + paralysis = 0 + return + + if(nutrition >= evo_point && !buckled && vore_fullness == 0 && !victim) + if(next == "/mob/living/simple_mob/metroid/juvenile/queen" && GLOB.queen_amount > 0) + to_chat(src, span("warning", "There is already a queen.")) + return + playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) + paralysis = 7998 + sleep(50) + expand_troid() + + if(nutrition >= evo_limit && (buckled || vore_fullness == 1)) //spit dat crap out if nutrition gets too high! + release_vore_contents() + prey_excludes.Cut() + stop_consumption() + + else + to_chat(src, span("warning", "I am not ready to evolve yet...")) + +/mob/living/simple_mob/metroid/juvenile/proc/expand_troid() + var/mob/living/L + L = new next(get_turf(src)) //Next is a variable defined by metTypes.dm that just points to the next metroid in the evolutionary stage. + if(mind) + src.mind.transfer_to(L) + visible_message("\The [src] suddenly evolves!") + qdel(src) + +// Code for metroids attacking other things. +// metroid attacks change based on intent. +/mob/living/simple_mob/metroid/juvenile/apply_attack(mob/living/L, damage_to_do) + if(istype(L)) + switch(a_intent) + if(I_HELP) // This shouldn't happen but just in case. + return FALSE + + if(I_DISARM) + var/stun_power = between(0, power_charge + rand(0, 3), 10) + + if(ishuman(L)) + var/mob/living/carbon/human/H = L + stun_power *= max(H.species.siemens_coefficient, 0) + + if(prob(stun_power * 10)) // Try an electric shock. + power_charge = max(0, power_charge - 3) + L.visible_message( + span("danger", "\The [src] has shocked \the [L]!"), + span("danger", "\The [src] has shocked you!") + ) + playsound(src, 'sound/weapons/Egloves.ogg', 75, 1) + L.Weaken(4) + L.Stun(4) + do_attack_animation(L) + if(L.buckled) + L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents metroids from jumping on you. + L.stuttering = max(L.stuttering, stun_power) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, L) + s.start() + + if(prob(stun_power * 10) && stun_power >= 8) + L.adjustFireLoss(power_charge * rand(1, 2)) + return FALSE + + else if(prob(20)) // Try to do a regular disarm attack. + L.visible_message( + span("danger", "\The [src] has pounced at \the [L]!"), + span("danger", "\The [src] has pounced at you!") + ) + playsound(src, 'sound/weapons/thudswoosh.ogg', 75, 1) + L.Weaken(2) + do_attack_animation(L) + if(L.buckled) + L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents metroids from jumping on you. + return FALSE + + else // Failed to do anything this time. + L.visible_message( + span("warning", "\The [src] has tried to pounce at \the [L]!"), + span("warning", "\The [src] has tried to pounce at you!") + ) + playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) + do_attack_animation(L) + return FALSE + + if(I_GRAB) + start_consuming(L) + return FALSE + + if(I_HURT) + return ..() // Regular stuff. + else + return ..() // Do the regular stuff if we're hitting a window/mech/etc. + +/mob/living/simple_mob/metroid/juvenile/apply_melee_effects(mob/living/L) + if(istype(L) && a_intent == I_HURT) + // Feed off of their flesh, if able. + consume(L, 5) + +//Code to remove metroid from someone +/mob/living/simple_mob/metroid/juvenile/attack_hand(mob/living/L) + if(victim) // Are we eating someone? + var/fail_odds = 30 + if(victim == L) // Harder to get the metroid off if it's you that is being eatten. + fail_odds = 60 + + if(prob(fail_odds)) + visible_message(span("warning", "\The [L] attempts to wrestle \the [name] off!")) + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + + else + visible_message(span("warning", "\The [L] manages to wrestle \the [name] off!")) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + stop_consumption() + step_away(src, L) + + else + ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metObjects.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metObjects.dm index 70290def22..dc2cb7e975 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metObjects.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metObjects.dm @@ -1,42 +1,42 @@ -/* -//Objects related to the Metroids. -*/ - -//Projectile for the Metroids. -/obj/item/projectile/energy/metroidacid - name = "metroid acid" - icon_state = "neurotoxin" - damage = 10 - damage_type = TOX - agony = 10 - check_armour = "bio" - armor_penetration = 50 - -//EGG! Metroid egg and its mechanics. Ripped from spiders. -/obj/effect/metroid/egg - name = "egg cluster" - desc = "It seems to pulse slightly with an inner life" - icon = 'icons/mob/metroid/small.dmi' - icon_state = "egg" - var/amount_grown = 0 - var/metroid_type = /mob/living/simple_mob/metroid/juvenile/baby - -/obj/effect/metroid/egg/Initialize() - pixel_x = rand(3,-3) - pixel_y = rand(3,-3) - START_PROCESSING(SSobj, src) - return ..() - -/obj/effect/metroid/egg/New(var/location, var/atom/parent) - get_light_and_color(parent) - ..() - -/obj/effect/metroid/egg/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/metroid/egg/process() - amount_grown += rand(0,2) - if(amount_grown >= 100) - new metroid_type(src.loc, src) +/* +//Objects related to the Metroids. +*/ + +//Projectile for the Metroids. +/obj/item/projectile/energy/metroidacid + name = "metroid acid" + icon_state = "neurotoxin" + damage = 10 + damage_type = TOX + agony = 10 + check_armour = "bio" + armor_penetration = 50 + +//EGG! Metroid egg and its mechanics. Ripped from spiders. +/obj/effect/metroid/egg + name = "egg cluster" + desc = "It seems to pulse slightly with an inner life" + icon = 'icons/mob/metroid/small.dmi' + icon_state = "egg" + var/amount_grown = 0 + var/metroid_type = /mob/living/simple_mob/metroid/juvenile/baby + +/obj/effect/metroid/egg/Initialize() + pixel_x = rand(3,-3) + pixel_y = rand(3,-3) + START_PROCESSING(SSobj, src) + return ..() + +/obj/effect/metroid/egg/New(var/location, var/atom/parent) + get_light_and_color(parent) + ..() + +/obj/effect/metroid/egg/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/effect/metroid/egg/process() + amount_grown += rand(0,2) + if(amount_grown >= 100) + new metroid_type(src.loc, src) qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm index 7a7c14dd4a..5c17407dee 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm @@ -1,669 +1,669 @@ -GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world. - -/* -//All the REAL types of metroids! -*/ -//Remember to add vent crawling at some point. - -/mob/living/simple_mob/metroid/jellybrig //Security's pet - name = "Jellybrig" - desc = "This one scree's happily at you." - ai_holder_type = /datum/ai_holder/simple_mob/jellybrig //Instead of normal metroid code, this guy is basically a retaliatory punching bag. - say_list_type = /datum/say_list/metroid - faction = "notmetroid" - maxHealth = 400 - health = 400 - melee_damage_lower = 0 - melee_damage_upper = 0 - movement_cooldown = 6 - harm_intent_damage = 2 - armor = list( - "melee" = 50, - "bullet" = -90, - "laser" = 0, - "energy" = -50, - "bomb" = -100, - "bio" = 100, - "rad" = 100) - vore_active = 1 - vore_bump_chance = 25 - vore_capacity = 1 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 90 //Don't punch or grab this guy. He will grab you instead! - swallowTime = 1 SECONDS //Hungry little bastards. - vore_default_mode = DM_HOLD - vore_digest_chance = 1 //Chance to switch to digest mode if resisted - vore_absorb_chance = 0 - vore_escape_chance = 2 //Chance to escape if resisted. - -/datum/ai_holder/simple_mob/jellybrig - hostile = FALSE // The majority of simplemobs are hostile, jellybrig is nice. - cooperative = FALSE - retaliate = TRUE //so the monster can attack back - returns_home = FALSE - can_flee = FALSE - wander = TRUE - base_wander_delay = 9 - - -/mob/living/simple_mob/metroid/mine - name = "Mochtroid" - desc = "Some sort of person eaty thing! But weak compared to regular Metroids!" - tt_desc = "Headamus Suckumus Weakamus" - icon = 'icons/mob/metroid/small.dmi' - icon_dead = "metroid_dead" - icon_living = "mochtroid" - icon_state = "mochtroid" - movement_cooldown = 2 - next = null - - vore_active = 1 - vore_pounce_chance = 25 - vore_icons = SA_ICON_LIVING - -/mob/living/simple_mob/metroid/mine/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.digest_burn = 0.5 - B.digest_brute = 0 - - -/mob/living/simple_mob/metroid/mine/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 50, 1) - ..() - if(prob(20)) - visible_message("\The [src] dropped some toy!") - new /obj/item/toy/figure/bounty_hunter(loc, src) - - - - -/mob/living/simple_mob/metroid/juvenile - var/is_juvenile = FALSE - - -/mob/living/simple_mob/metroid/juvenile/baby - name = "baby metroid" - desc = "The baby the baby the baby the baby the baby the baby the baby the baby." - tt_desc = "Minimus Headamus Suckumus" - icon = 'icons/mob/metroid/small.dmi' - icon_dead = "baby_dead" - icon_living = "baby" - icon_state = "baby" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid - health = 200 - maxHealth = 200 - melee_damage_lower = 1 - melee_damage_upper = 5 - melee_miss_chance = 0 - armor = list( - "melee" = 0, - "bullet" = -60, - "laser" = 60, - "energy" = 10, - "bomb" = -100, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - - //Metroids aren't affected by most atmospheres except cold. - minbodytemp = T0C-40 - cold_damage_per_tick = 100 - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - - - - response_help = "pets" - - evo_point = 800 - evo_limit = 1000 - next = "/mob/living/simple_mob/metroid/juvenile/super" - vore_active = 0 - - is_juvenile = TRUE - -/mob/living/simple_mob/metroid/juvenile/baby/Initialize() - playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) - ..() - - - -//------------------------------------------------------------------------------------------------------------ - - - - -/mob/living/simple_mob/metroid/juvenile/super - name = "super metroid" - desc = "Some kind of head sucky thing!" - tt_desc = "Maximus Headamus Suckumus" - icon = 'icons/mob/metroid/small.dmi' - icon_dead = "metroid_dead" - icon_living = "metroid" - icon_state = "metroid" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid - health = 250 - maxHealth = 250 - melee_damage_lower = 2 - melee_damage_upper = 9 - melee_miss_chance = 0 - armor = list( - "melee" = 0, - "bullet" = -50, - "laser" = 70, - "energy" = 10, - "bomb" = -100, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - - //Metroids aren't affected by most atmospheres except cold. - minbodytemp = T0C-40 - cold_damage_per_tick = 100 - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - - response_help = "pets" - - speak_emote = list( - "Skree...", - "Ereeeer..." - ) - - evo_point = 1200 - evo_limit = 1600 - next = "/mob/living/simple_mob/metroid/juvenile/alpha" - - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 1 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 25 //Metroids only eat incapacitated targets - vore_default_mode = DM_DIGEST - swallowTime = 1 SECONDS //Hungry little bastards. - vore_escape_chance = 50 - - is_juvenile = TRUE - -/mob/living/simple_mob/metroid/juvenile/super/Initialize() - playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/super/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/alpha - name = "alpha metroid" - desc = "Some kind of head rammy thing!" - tt_desc = "Minimus Headamus Rammamus" - icon = 'icons/mob/metroid/small.dmi' - icon_dead = "alpha_dead" - icon_living = "alpha" - icon_state = "alpha" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid - health = 300 - maxHealth = 300 - melee_damage_lower = 10 - melee_damage_upper = 15 - melee_miss_chance = 5 - attacktext = list("rammed") - armor = list( - "melee" = 40, - "bullet" = 15, - "laser" = 50, - "energy" = 60, - "bomb" = 10, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - - //Alphas lose their vulnerability to cold. - minbodytemp = 0 - 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_atoms_damage = 0 - - evo_point = 1000 - evo_limit = 1500 - next = "/mob/living/simple_mob/metroid/juvenile/gamma" - -/mob/living/simple_mob/metroid/juvenile/alpha/Initialize() - playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/alpha/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/alpha //active noms - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 1 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 15 //Alphas will try knocking targets over since they lost their stun ability from the initial phases. - vore_default_mode = DM_DIGEST - swallowTime = 3 SECONDS - vore_escape_chance = 40 - - - - - - -//------------------------------------------------------------------------------------------------------------ - - - -/mob/living/simple_mob/metroid/juvenile/gamma - name = "gamma metroid" - desc = "Some kind of head rammy thing! This one shoots electricity!" - tt_desc = "Maximus Headamus Rammamus" - icon = 'icons/mob/metroid/small.dmi' - icon_dead = "gamma_dead" - icon_living = "gamma" - icon_state = "gamma" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid - movement_cooldown = 2 - health = 400 - maxHealth = 400 - melee_damage_lower = 10 - melee_damage_upper = 20 - melee_miss_chance = 5 - attacktext = list("rammed") - armor = list( - "melee" = 55, - "bullet" = 15, - "laser" = 50, - "energy" = 90, - "bomb" = 10, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - ranged_cooldown_time = 5 SECOND - projectilesound = 'sound/weapons/taser2.ogg' - projectiletype = /obj/item/projectile/beam/stun/weak - - //Not affected by atmos. - minbodytemp = 0 - 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_atoms_damage = 0 - - var/emp_chance = 20 // Beware synths - evo_point = 1000 - evo_limit = 1500 - next = "/mob/living/simple_mob/metroid/juvenile/zeta" - -/mob/living/simple_mob/metroid/juvenile/gamma/Initialize() - playsound(src, 'sound/metroid/metroidgamma.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/gamma/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/gamma //active noms - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 1 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 15 - vore_default_mode = DM_DIGEST - swallowTime = 3 SECONDS - vore_escape_chance = 30 - - -/datum/say_list/metroid - speak = list("Skree.", "Eree.", "Errer?") - emote_see = list("floats about","looks around", "rubs its talons") - emote_hear = list("chitters") - - say_understood = list("Eree.") - say_cannot = list("Errerr.") - say_maybe_target = list("Eree?") - say_got_target = list("Ereet!") - say_threaten = list("Skree!") - say_stand_down = list("Eee.") - say_escalate = list("SKREE!") - - threaten_sound = 'sound/metroid/metroidsee.ogg' - stand_down_sound = 'sound/metroid/metroiddetach.ogg' - - -//------------------------------------------------------------------------------------------------------------ - - - -/mob/living/simple_mob/metroid/juvenile/zeta - name = "zeta metroid" - desc = "Some kind of feet stompy thing!" - tt_desc = "Minimus Feetamus Walkamus" - icon = 'icons/mob/metroid/large.dmi' - icon_dead = "zeta_dead" - icon_living = "zeta" - icon_state = "zeta" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid/zeta - movement_cooldown = 2 - health = 500 - maxHealth = 500 - melee_damage_lower = 15 - melee_damage_upper = 25 - melee_miss_chance = 5 - ranged_cooldown_time = 5 SECOND - attack_armor_pen = 10 - attacktext = list("slashed") - armor = list( - "melee" = 70, - "bullet" = 0, - "laser" = 50, - "energy" = 60, - "bomb" = 10, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - - makes_dirt = TRUE - - projectiletype = /obj/item/projectile/energy/metroidacid //The projectiles I shoot - projectilesound = 'sound/weapons/slashmiss.ogg' // The sound I make when I do it - - - //Unaffected by atmos. - minbodytemp = 0 - 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_atoms_damage = 0 - - pixel_x = -16 - pixel_y = -16 - old_x = -16 - old_y = -16 - evo_point = 1200 - evo_limit = 1500 - next = "/mob/living/simple_mob/metroid/juvenile/omega" - -/mob/living/simple_mob/metroid/juvenile/zeta/Initialize() - playsound(src, 'sound/metroid/metroidzeta.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/zeta/death() - // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/zeta //active noms - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 1 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 20 - vore_default_mode = DM_DIGEST - swallowTime = 3 SECONDS - vore_escape_chance = 20 - -/datum/say_list/metroid/zeta - speak = list("Rurrr.", "Rrerr.", "Rawr?") - emote_see = list("stomps about","looks around", "rubs its talons") - emote_hear = list("chitters") - - say_understood = list("Rur.") - say_cannot = list("Errurr.") - say_maybe_target = list("Erurr?") - say_got_target = list("Eruur!") - say_threaten = list("Rrurr!") - say_stand_down = list("Eeer.") - say_escalate = list("RAWR!") - - threaten_sound = 'sound/metroid/metroidzeta.ogg' - stand_down_sound = 'sound/metroid/metroiddetach.ogg' - - -//------------------------------------------------------------------------------------------------------------ - - - -/mob/living/simple_mob/metroid/juvenile/omega - name = "omega metroid" - desc = "Those are some big claws!" - tt_desc = "Maximus Feetamus Walkamus" - icon = 'icons/mob/metroid/large.dmi' - icon_dead = "omega_dead" - icon_living = "omega" - icon_state = "omega" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid/omega - movement_cooldown = 2.5 - health = 600 - maxHealth = 600 - melee_damage_lower = 25 - melee_damage_upper = 40 - melee_miss_chance = 5 - ranged_cooldown_time = 2.5 SECOND - attack_armor_pen = 20 - attacktext = list("slashed") - armor = list( - "melee" = 75, - "bullet" = 20, - "laser" = 55, - "energy" = 60, - "bomb" = 10, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - makes_dirt = TRUE - projectiletype = /obj/item/projectile/beam/smalllaser // The projectiles I shoot - projectilesound = 'sound/weapons/Flamer.ogg' // The sound I make when I do it - - //Unaffected by atmos. - minbodytemp = 0 - 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_atoms_damage = 0 - - - - old_x = -16 - old_y = 0 - default_pixel_x = -16 - pixel_x = -16 - pixel_y = 0 - evo_point = 1300 - evo_limit = 2000 - next = "/mob/living/simple_mob/metroid/juvenile/queen" - - death_sound_override = list('sound/metroid/metroidomegadeath.ogg') // We override the death sound to play our custom here - -/mob/living/simple_mob/metroid/juvenile/omega/Initialize() - playsound(src, 'sound/metroid/metroidomega.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/omega/death() - // playsound(src, 'sound/metroid/metroidomegadeath.ogg', 100, 1) - ..() - -/mob/living/simple_mob/metroid/juvenile/omega //active noms - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 2 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 40 - vore_default_mode = DM_DIGEST - swallowTime = 3 SECONDS - vore_escape_chance = 10 - -/datum/say_list/metroid/omega - speak = list("Rurrr.", "Rrerr.", "Rawr?") - emote_see = list("stomps about","looks around", "rubs its talons") - emote_hear = list("chitters") - - say_understood = list("Rur.") - say_cannot = list("Errurr.") - say_maybe_target = list("Erurr?") - say_got_target = list("Roar!") - say_threaten = list("Rrurr!") - say_stand_down = list("Eeer.") - say_escalate = list("ROAR!") - - threaten_sound = 'sound/metroid/metroidomega.ogg' - stand_down_sound = 'sound/metroid/metroiddetach.ogg' - - -//------------------------------------------------------------------------------------------------------------ - - - -/mob/living/simple_mob/metroid/juvenile/queen - name = "queen metroid" - desc = "The mother of all Metroids - allowed to have grown too far!" - tt_desc = "Maximus Queenamus Deathamus" - icon = 'icons/mob/metroid/queen.dmi' - icon_dead = "queen_dead" - icon_living = "queen" - icon_state = "queen" - ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid - say_list_type = /datum/say_list/metroid/queen - movement_cooldown = 3 - health = 1000 - maxHealth = 1000 - melee_damage_lower = 30 - melee_damage_upper = 60 - melee_miss_chance = 5 - attack_armor_pen = 20 - attacktext = list("gnashed") - armor = list( - "melee" = 75, - "bullet" = 40, - "laser" = 60, - "energy" = 90, - "bomb" = 10, - "bio" = 100, - "rad" = 100) - gender = NEUTER - faction = "metroids" - max_nutrition = 2200 - nutrition = 0 - makes_dirt = TRUE - ranged_cooldown_time = 1.5 SECOND - projectiletype = /obj/item/projectile/energy/metroidacid // The projectiles I shoot - projectilesound = 'sound/weapons/slashmiss.ogg' // The sound I make when I do it - - //Unaffected by atmos. - minbodytemp = 0 - 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_atoms_damage = 0 - - pixel_x = -16 - pixel_y = -16 - old_x = -16 - old_y = -16 - evo_point = 1200 - evo_limit = INFINITY - next = null - is_queen = TRUE - - death_sound_override = list('sound/metroid/metroidqueendeath.ogg') // We override the death sound to play our custom here - -/mob/living/simple_mob/metroid/juvenile/queen/Initialize() - playsound(src, 'sound/metroid/metroidqueen.ogg', 100, 1) - GLOB.queen_amount++ - ..() - -/mob/living/simple_mob/metroid/juvenile/queen/death() - // playsound(src, 'sound/metroid/metroidqueendeath.ogg', 100, 1) - GLOB.queen_amount-- - ..() - -/mob/living/simple_mob/metroid/juvenile/queen //active noms - vore_active = 1 - vore_bump_chance = 0 - vore_capacity = 4 - vore_icons = SA_ICON_LIVING - vore_pounce_chance = 60 //It's the queen, and it's hungry. - vore_default_mode = DM_DIGEST - swallowTime = 3 SECONDS - vore_escape_chance = 0 //You're not climbing out of that neck - -/datum/say_list/metroid/queen - speak = list("Rurrr.", "Rrerr.", "Rawr?") - emote_see = list("stomps about","looks around", "rubs its talons") - emote_hear = list("chitters") - - say_understood = list("Rur.") - say_cannot = list("Errurr.") - say_maybe_target = list("Erurr?") - say_got_target = list("Roar!") - say_threaten = list("Rrurr!") - say_stand_down = list("Eeer.") - say_escalate = list("ROAR!") - - threaten_sound = 'sound/metroid/metroidqueen.ogg' - stand_down_sound = 'sound/metroid/metroiddetach.ogg' +GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world. + +/* +//All the REAL types of metroids! +*/ +//Remember to add vent crawling at some point. + +/mob/living/simple_mob/metroid/jellybrig //Security's pet + name = "Jellybrig" + desc = "This one scree's happily at you." + ai_holder_type = /datum/ai_holder/simple_mob/jellybrig //Instead of normal metroid code, this guy is basically a retaliatory punching bag. + say_list_type = /datum/say_list/metroid + faction = "notmetroid" + maxHealth = 400 + health = 400 + melee_damage_lower = 0 + melee_damage_upper = 0 + movement_cooldown = 6 + harm_intent_damage = 2 + armor = list( + "melee" = 50, + "bullet" = -90, + "laser" = 0, + "energy" = -50, + "bomb" = -100, + "bio" = 100, + "rad" = 100) + vore_active = 1 + vore_bump_chance = 25 + vore_capacity = 1 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 90 //Don't punch or grab this guy. He will grab you instead! + swallowTime = 1 SECONDS //Hungry little bastards. + vore_default_mode = DM_HOLD + vore_digest_chance = 1 //Chance to switch to digest mode if resisted + vore_absorb_chance = 0 + vore_escape_chance = 2 //Chance to escape if resisted. + +/datum/ai_holder/simple_mob/jellybrig + hostile = FALSE // The majority of simplemobs are hostile, jellybrig is nice. + cooperative = FALSE + retaliate = TRUE //so the monster can attack back + returns_home = FALSE + can_flee = FALSE + wander = TRUE + base_wander_delay = 9 + + +/mob/living/simple_mob/metroid/mine + name = "Mochtroid" + desc = "Some sort of person eaty thing! But weak compared to regular Metroids!" + tt_desc = "Headamus Suckumus Weakamus" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "metroid_dead" + icon_living = "mochtroid" + icon_state = "mochtroid" + movement_cooldown = 2 + next = null + + vore_active = 1 + vore_pounce_chance = 25 + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/metroid/mine/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.digest_burn = 0.5 + B.digest_brute = 0 + + +/mob/living/simple_mob/metroid/mine/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 50, 1) + ..() + if(prob(20)) + visible_message("\The [src] dropped some toy!") + new /obj/item/toy/figure/bounty_hunter(loc, src) + + + + +/mob/living/simple_mob/metroid/juvenile + var/is_juvenile = FALSE + + +/mob/living/simple_mob/metroid/juvenile/baby + name = "baby metroid" + desc = "The baby the baby the baby the baby the baby the baby the baby the baby." + tt_desc = "Minimus Headamus Suckumus" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "baby_dead" + icon_living = "baby" + icon_state = "baby" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid + health = 200 + maxHealth = 200 + melee_damage_lower = 1 + melee_damage_upper = 5 + melee_miss_chance = 0 + armor = list( + "melee" = 0, + "bullet" = -60, + "laser" = 60, + "energy" = 10, + "bomb" = -100, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + + //Metroids aren't affected by most atmospheres except cold. + minbodytemp = T0C-40 + cold_damage_per_tick = 100 + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + + + + response_help = "pets" + + evo_point = 800 + evo_limit = 1000 + next = "/mob/living/simple_mob/metroid/juvenile/super" + vore_active = 0 + + is_juvenile = TRUE + +/mob/living/simple_mob/metroid/juvenile/baby/Initialize() + playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) + ..() + + + +//------------------------------------------------------------------------------------------------------------ + + + + +/mob/living/simple_mob/metroid/juvenile/super + name = "super metroid" + desc = "Some kind of head sucky thing!" + tt_desc = "Maximus Headamus Suckumus" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "metroid_dead" + icon_living = "metroid" + icon_state = "metroid" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid + health = 250 + maxHealth = 250 + melee_damage_lower = 2 + melee_damage_upper = 9 + melee_miss_chance = 0 + armor = list( + "melee" = 0, + "bullet" = -50, + "laser" = 70, + "energy" = 10, + "bomb" = -100, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + + //Metroids aren't affected by most atmospheres except cold. + minbodytemp = T0C-40 + cold_damage_per_tick = 100 + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + + response_help = "pets" + + speak_emote = list( + "Skree...", + "Ereeeer..." + ) + + evo_point = 1200 + evo_limit = 1600 + next = "/mob/living/simple_mob/metroid/juvenile/alpha" + + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 1 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 25 //Metroids only eat incapacitated targets + vore_default_mode = DM_DIGEST + swallowTime = 1 SECONDS //Hungry little bastards. + vore_escape_chance = 50 + + is_juvenile = TRUE + +/mob/living/simple_mob/metroid/juvenile/super/Initialize() + playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/super/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/alpha + name = "alpha metroid" + desc = "Some kind of head rammy thing!" + tt_desc = "Minimus Headamus Rammamus" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "alpha_dead" + icon_living = "alpha" + icon_state = "alpha" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid + health = 300 + maxHealth = 300 + melee_damage_lower = 10 + melee_damage_upper = 15 + melee_miss_chance = 5 + attacktext = list("rammed") + armor = list( + "melee" = 40, + "bullet" = 15, + "laser" = 50, + "energy" = 60, + "bomb" = 10, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + + //Alphas lose their vulnerability to cold. + minbodytemp = 0 + 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_atoms_damage = 0 + + evo_point = 1000 + evo_limit = 1500 + next = "/mob/living/simple_mob/metroid/juvenile/gamma" + +/mob/living/simple_mob/metroid/juvenile/alpha/Initialize() + playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/alpha/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/alpha //active noms + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 1 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 15 //Alphas will try knocking targets over since they lost their stun ability from the initial phases. + vore_default_mode = DM_DIGEST + swallowTime = 3 SECONDS + vore_escape_chance = 40 + + + + + + +//------------------------------------------------------------------------------------------------------------ + + + +/mob/living/simple_mob/metroid/juvenile/gamma + name = "gamma metroid" + desc = "Some kind of head rammy thing! This one shoots electricity!" + tt_desc = "Maximus Headamus Rammamus" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "gamma_dead" + icon_living = "gamma" + icon_state = "gamma" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid + movement_cooldown = 2 + health = 400 + maxHealth = 400 + melee_damage_lower = 10 + melee_damage_upper = 20 + melee_miss_chance = 5 + attacktext = list("rammed") + armor = list( + "melee" = 55, + "bullet" = 15, + "laser" = 50, + "energy" = 90, + "bomb" = 10, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + ranged_cooldown_time = 5 SECOND + projectilesound = 'sound/weapons/taser2.ogg' + projectiletype = /obj/item/projectile/beam/stun/weak + + //Not affected by atmos. + minbodytemp = 0 + 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_atoms_damage = 0 + + var/emp_chance = 20 // Beware synths + evo_point = 1000 + evo_limit = 1500 + next = "/mob/living/simple_mob/metroid/juvenile/zeta" + +/mob/living/simple_mob/metroid/juvenile/gamma/Initialize() + playsound(src, 'sound/metroid/metroidgamma.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/gamma/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/gamma //active noms + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 1 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 15 + vore_default_mode = DM_DIGEST + swallowTime = 3 SECONDS + vore_escape_chance = 30 + + +/datum/say_list/metroid + speak = list("Skree.", "Eree.", "Errer?") + emote_see = list("floats about","looks around", "rubs its talons") + emote_hear = list("chitters") + + say_understood = list("Eree.") + say_cannot = list("Errerr.") + say_maybe_target = list("Eree?") + say_got_target = list("Ereet!") + say_threaten = list("Skree!") + say_stand_down = list("Eee.") + say_escalate = list("SKREE!") + + threaten_sound = 'sound/metroid/metroidsee.ogg' + stand_down_sound = 'sound/metroid/metroiddetach.ogg' + + +//------------------------------------------------------------------------------------------------------------ + + + +/mob/living/simple_mob/metroid/juvenile/zeta + name = "zeta metroid" + desc = "Some kind of feet stompy thing!" + tt_desc = "Minimus Feetamus Walkamus" + icon = 'icons/mob/metroid/large.dmi' + icon_dead = "zeta_dead" + icon_living = "zeta" + icon_state = "zeta" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid/zeta + movement_cooldown = 2 + health = 500 + maxHealth = 500 + melee_damage_lower = 15 + melee_damage_upper = 25 + melee_miss_chance = 5 + ranged_cooldown_time = 5 SECOND + attack_armor_pen = 10 + attacktext = list("slashed") + armor = list( + "melee" = 70, + "bullet" = 0, + "laser" = 50, + "energy" = 60, + "bomb" = 10, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + + makes_dirt = TRUE + + projectiletype = /obj/item/projectile/energy/metroidacid //The projectiles I shoot + projectilesound = 'sound/weapons/slashmiss.ogg' // The sound I make when I do it + + + //Unaffected by atmos. + minbodytemp = 0 + 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_atoms_damage = 0 + + pixel_x = -16 + pixel_y = -16 + old_x = -16 + old_y = -16 + evo_point = 1200 + evo_limit = 1500 + next = "/mob/living/simple_mob/metroid/juvenile/omega" + +/mob/living/simple_mob/metroid/juvenile/zeta/Initialize() + playsound(src, 'sound/metroid/metroidzeta.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/zeta/death() + // playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/zeta //active noms + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 1 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 20 + vore_default_mode = DM_DIGEST + swallowTime = 3 SECONDS + vore_escape_chance = 20 + +/datum/say_list/metroid/zeta + speak = list("Rurrr.", "Rrerr.", "Rawr?") + emote_see = list("stomps about","looks around", "rubs its talons") + emote_hear = list("chitters") + + say_understood = list("Rur.") + say_cannot = list("Errurr.") + say_maybe_target = list("Erurr?") + say_got_target = list("Eruur!") + say_threaten = list("Rrurr!") + say_stand_down = list("Eeer.") + say_escalate = list("RAWR!") + + threaten_sound = 'sound/metroid/metroidzeta.ogg' + stand_down_sound = 'sound/metroid/metroiddetach.ogg' + + +//------------------------------------------------------------------------------------------------------------ + + + +/mob/living/simple_mob/metroid/juvenile/omega + name = "omega metroid" + desc = "Those are some big claws!" + tt_desc = "Maximus Feetamus Walkamus" + icon = 'icons/mob/metroid/large.dmi' + icon_dead = "omega_dead" + icon_living = "omega" + icon_state = "omega" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid/omega + movement_cooldown = 2.5 + health = 600 + maxHealth = 600 + melee_damage_lower = 25 + melee_damage_upper = 40 + melee_miss_chance = 5 + ranged_cooldown_time = 2.5 SECOND + attack_armor_pen = 20 + attacktext = list("slashed") + armor = list( + "melee" = 75, + "bullet" = 20, + "laser" = 55, + "energy" = 60, + "bomb" = 10, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + makes_dirt = TRUE + projectiletype = /obj/item/projectile/beam/smalllaser // The projectiles I shoot + projectilesound = 'sound/weapons/Flamer.ogg' // The sound I make when I do it + + //Unaffected by atmos. + minbodytemp = 0 + 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_atoms_damage = 0 + + + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + evo_point = 1300 + evo_limit = 2000 + next = "/mob/living/simple_mob/metroid/juvenile/queen" + + death_sound_override = list('sound/metroid/metroidomegadeath.ogg') // We override the death sound to play our custom here + +/mob/living/simple_mob/metroid/juvenile/omega/Initialize() + playsound(src, 'sound/metroid/metroidomega.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/omega/death() + // playsound(src, 'sound/metroid/metroidomegadeath.ogg', 100, 1) + ..() + +/mob/living/simple_mob/metroid/juvenile/omega //active noms + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 2 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 40 + vore_default_mode = DM_DIGEST + swallowTime = 3 SECONDS + vore_escape_chance = 10 + +/datum/say_list/metroid/omega + speak = list("Rurrr.", "Rrerr.", "Rawr?") + emote_see = list("stomps about","looks around", "rubs its talons") + emote_hear = list("chitters") + + say_understood = list("Rur.") + say_cannot = list("Errurr.") + say_maybe_target = list("Erurr?") + say_got_target = list("Roar!") + say_threaten = list("Rrurr!") + say_stand_down = list("Eeer.") + say_escalate = list("ROAR!") + + threaten_sound = 'sound/metroid/metroidomega.ogg' + stand_down_sound = 'sound/metroid/metroiddetach.ogg' + + +//------------------------------------------------------------------------------------------------------------ + + + +/mob/living/simple_mob/metroid/juvenile/queen + name = "queen metroid" + desc = "The mother of all Metroids - allowed to have grown too far!" + tt_desc = "Maximus Queenamus Deathamus" + icon = 'icons/mob/metroid/queen.dmi' + icon_dead = "queen_dead" + icon_living = "queen" + icon_state = "queen" + ai_holder_type = /datum/ai_holder/simple_mob/juvenile_metroid + say_list_type = /datum/say_list/metroid/queen + movement_cooldown = 3 + health = 1000 + maxHealth = 1000 + melee_damage_lower = 30 + melee_damage_upper = 60 + melee_miss_chance = 5 + attack_armor_pen = 20 + attacktext = list("gnashed") + armor = list( + "melee" = 75, + "bullet" = 40, + "laser" = 60, + "energy" = 90, + "bomb" = 10, + "bio" = 100, + "rad" = 100) + gender = NEUTER + faction = "metroids" + max_nutrition = 2200 + nutrition = 0 + makes_dirt = TRUE + ranged_cooldown_time = 1.5 SECOND + projectiletype = /obj/item/projectile/energy/metroidacid // The projectiles I shoot + projectilesound = 'sound/weapons/slashmiss.ogg' // The sound I make when I do it + + //Unaffected by atmos. + minbodytemp = 0 + 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_atoms_damage = 0 + + pixel_x = -16 + pixel_y = -16 + old_x = -16 + old_y = -16 + evo_point = 1200 + evo_limit = INFINITY + next = null + is_queen = TRUE + + death_sound_override = list('sound/metroid/metroidqueendeath.ogg') // We override the death sound to play our custom here + +/mob/living/simple_mob/metroid/juvenile/queen/Initialize() + playsound(src, 'sound/metroid/metroidqueen.ogg', 100, 1) + GLOB.queen_amount++ + ..() + +/mob/living/simple_mob/metroid/juvenile/queen/death() + // playsound(src, 'sound/metroid/metroidqueendeath.ogg', 100, 1) + GLOB.queen_amount-- + ..() + +/mob/living/simple_mob/metroid/juvenile/queen //active noms + vore_active = 1 + vore_bump_chance = 0 + vore_capacity = 4 + vore_icons = SA_ICON_LIVING + vore_pounce_chance = 60 //It's the queen, and it's hungry. + vore_default_mode = DM_DIGEST + swallowTime = 3 SECONDS + vore_escape_chance = 0 //You're not climbing out of that neck + +/datum/say_list/metroid/queen + speak = list("Rurrr.", "Rrerr.", "Rawr?") + emote_see = list("stomps about","looks around", "rubs its talons") + emote_hear = list("chitters") + + say_understood = list("Rur.") + say_cannot = list("Errurr.") + say_maybe_target = list("Erurr?") + say_got_target = list("Roar!") + say_threaten = list("Rrurr!") + say_stand_down = list("Eeer.") + say_escalate = list("ROAR!") + + threaten_sound = 'sound/metroid/metroidqueen.ogg' + stand_down_sound = 'sound/metroid/metroiddetach.ogg' diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm b/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm index ea524c3c80..0cddbaa268 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm @@ -1,95 +1,95 @@ -// These slimes lack certain xenobio features but get more combat-oriented goodies. Generally these are more oriented towards Explorers than Xenobiologists. - -/mob/living/simple_mob/slime/feral - name = "feral slime" - desc = "The result of slimes escaping containment from some xenobiology lab. \ - Having the means to successfully escape their lab, as well as having to survive on a harsh, cold world has made these \ - creatures rival the ferocity of other apex predators in this region of Sif. It is considered to be a very invasive species." - description_info = "Note that processing this large slime will give six cores." - - cores = 6 // Xenobio will love getting their hands on these. - - icon_state = "slime adult" - icon_living = "slime adult" - icon_dead = "slime adult dead" - glow_range = 5 - glow_intensity = 4 - icon_scale_x = 2 // Twice as big as the xenobio variant. - icon_scale_y = 2 - pixel_y = -10 // Since the base sprite isn't centered properly, the pixel auto-adjustment needs some help. - default_pixel_y = -10 // To prevent resetting above var. - - maxHealth = 300 - movement_cooldown = -3 - melee_attack_delay = 0.5 SECONDS - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/pointblank - - -// Slimebatoning/xenotasing it just makes it mad at you (which can be good if you're heavily armored and your friends aren't). -/mob/living/simple_mob/slime/feral/slimebatoned(mob/living/user, amount) - taunt(user, TRUE) - - -// *********** -// *Dark Blue* -// *********** - -// Dark Blue feral slimes can fire a strong icicle projectile every few seconds. The icicle hits hard and has some armor penetration. -// They also have a similar aura as their xenobio counterparts, which inflicts cold damage. It also chills non-resistant mobs. - -/mob/living/simple_mob/slime/feral/dark_blue - name = "dark blue feral slime" - color = "#2398FF" - glow_toggle = TRUE - slime_color = "dark blue" - coretype = /obj/item/slime_extract/dark_blue - cold_resist = 1 // Complete immunity. - minbodytemp = 0 - cold_damage_per_tick = 0 - - projectiletype = /obj/item/projectile/icicle - base_attack_cooldown = 2 SECONDS - ranged_attack_delay = 1 SECOND - - player_msg = "You can fire an icicle projectile every two seconds. It hits hard, and armor has a hard time resisting it.
                    \ - You are also immune to the cold, and you cause enemies around you to suffer periodic harm from the cold, if unprotected.
                    \ - Unprotected enemies are also Chilled, making them slower and less evasive, and disabling effects last longer." - -/obj/item/projectile/icicle - name = "icicle" - icon_state = "ice_2" - damage = 40 - damage_type = BRUTE - check_armour = "melee" - armor_penetration = 30 - speed = 2 - icon_scale_x = 2 // It hits like a truck. - icon_scale_y = 2 - sharp = TRUE - -/obj/item/projectile/icicle/on_impact(atom/A) - playsound(A, "shatter", 70, 1) - return ..() - -/obj/item/projectile/icicle/get_structure_damage() - return damage / 2 // They're really deadly against mobs, but less effective against solid things. - -/mob/living/simple_mob/slime/feral/dark_blue/handle_special() - if(stat != DEAD) - cold_aura() - ..() - -/mob/living/simple_mob/slime/feral/dark_blue/proc/cold_aura() - for(var/mob/living/L in view(3, src)) - if(L == src) - continue - chill(L) - -/mob/living/simple_mob/slime/feral/dark_blue/proc/chill(mob/living/L) - L.inflict_cold_damage(10) - if(L.get_cold_protection() < 1) - L.add_modifier(/datum/modifier/chilled, 5 SECONDS, src) - - if(L.has_AI()) // Other AIs should react to hostile auras. - L.ai_holder.react_to_attack(src) +// These slimes lack certain xenobio features but get more combat-oriented goodies. Generally these are more oriented towards Explorers than Xenobiologists. + +/mob/living/simple_mob/slime/feral + name = "feral slime" + desc = "The result of slimes escaping containment from some xenobiology lab. \ + Having the means to successfully escape their lab, as well as having to survive on a harsh, cold world has made these \ + creatures rival the ferocity of other apex predators in this region of Sif. It is considered to be a very invasive species." + description_info = "Note that processing this large slime will give six cores." + + cores = 6 // Xenobio will love getting their hands on these. + + icon_state = "slime adult" + icon_living = "slime adult" + icon_dead = "slime adult dead" + glow_range = 5 + glow_intensity = 4 + icon_scale_x = 2 // Twice as big as the xenobio variant. + icon_scale_y = 2 + pixel_y = -10 // Since the base sprite isn't centered properly, the pixel auto-adjustment needs some help. + default_pixel_y = -10 // To prevent resetting above var. + + maxHealth = 300 + movement_cooldown = -3 + melee_attack_delay = 0.5 SECONDS + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/pointblank + + +// Slimebatoning/xenotasing it just makes it mad at you (which can be good if you're heavily armored and your friends aren't). +/mob/living/simple_mob/slime/feral/slimebatoned(mob/living/user, amount) + taunt(user, TRUE) + + +// *********** +// *Dark Blue* +// *********** + +// Dark Blue feral slimes can fire a strong icicle projectile every few seconds. The icicle hits hard and has some armor penetration. +// They also have a similar aura as their xenobio counterparts, which inflicts cold damage. It also chills non-resistant mobs. + +/mob/living/simple_mob/slime/feral/dark_blue + name = "dark blue feral slime" + color = "#2398FF" + glow_toggle = TRUE + slime_color = "dark blue" + coretype = /obj/item/slime_extract/dark_blue + cold_resist = 1 // Complete immunity. + minbodytemp = 0 + cold_damage_per_tick = 0 + + projectiletype = /obj/item/projectile/icicle + base_attack_cooldown = 2 SECONDS + ranged_attack_delay = 1 SECOND + + player_msg = "You can fire an icicle projectile every two seconds. It hits hard, and armor has a hard time resisting it.
                    \ + You are also immune to the cold, and you cause enemies around you to suffer periodic harm from the cold, if unprotected.
                    \ + Unprotected enemies are also Chilled, making them slower and less evasive, and disabling effects last longer." + +/obj/item/projectile/icicle + name = "icicle" + icon_state = "ice_2" + damage = 40 + damage_type = BRUTE + check_armour = "melee" + armor_penetration = 30 + speed = 2 + icon_scale_x = 2 // It hits like a truck. + icon_scale_y = 2 + sharp = TRUE + +/obj/item/projectile/icicle/on_impact(atom/A) + playsound(A, "shatter", 70, 1) + return ..() + +/obj/item/projectile/icicle/get_structure_damage() + return damage / 2 // They're really deadly against mobs, but less effective against solid things. + +/mob/living/simple_mob/slime/feral/dark_blue/handle_special() + if(stat != DEAD) + cold_aura() + ..() + +/mob/living/simple_mob/slime/feral/dark_blue/proc/cold_aura() + for(var/mob/living/L in view(3, src)) + if(L == src) + continue + chill(L) + +/mob/living/simple_mob/slime/feral/dark_blue/proc/chill(mob/living/L) + L.inflict_cold_damage(10) + if(L.get_cold_protection() < 1) + L.add_modifier(/datum/modifier/chilled, 5 SECONDS, src) + + if(L.has_AI()) // Other AIs should react to hostile auras. + L.ai_holder.react_to_attack(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm index d74f2b4fcb..03565489cd 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm @@ -1,83 +1,83 @@ -// Code for slimes attacking other things. - -// Slime attacks change based on intent. -/mob/living/simple_mob/slime/xenobio/apply_attack(mob/living/L, damage_to_do) - if(istype(L)) - switch(a_intent) - if(I_HELP) // This shouldn't happen but just in case. - return FALSE - - if(I_DISARM) - var/stun_power = between(0, power_charge + rand(0, 3), 10) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - stun_power *= max(H.species.siemens_coefficient, 0) - - if(prob(stun_power * 10)) // Try an electric shock. - power_charge = max(0, power_charge - 3) - L.visible_message( - span("danger", "\The [src] has shocked \the [L]!"), - span("danger", "\The [src] has shocked you!") - ) - playsound(src, 'sound/weapons/Egloves.ogg', 75, 1) - L.Weaken(4) - L.Stun(4) - do_attack_animation(L) - if(L.buckled) - L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you. - L.stuttering = max(L.stuttering, stun_power) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, L) - s.start() - - if(prob(stun_power * 10) && stun_power >= 8) - L.adjustFireLoss(power_charge * rand(1, 2)) - return FALSE - - else if(prob(20)) // Try to do a regular disarm attack. - L.visible_message( - span("danger", "\The [src] has pounced at \the [L]!"), - span("danger", "\The [src] has pounced at you!") - ) - playsound(src, 'sound/weapons/thudswoosh.ogg', 75, 1) - L.Weaken(2) - do_attack_animation(L) - if(L.buckled) - L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you. - return FALSE - - else // Failed to do anything this time. - L.visible_message( - span("warning", "\The [src] has tried to pounce at \the [L]!"), - span("warning", "\The [src] has tried to pounce at you!") - ) - playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) - do_attack_animation(L) - return FALSE - - if(I_GRAB) - start_consuming(L) - return FALSE - - if(I_HURT) - return ..() // Regular stuff. - else - return ..() // Do the regular stuff if we're hitting a window/mech/etc. - -/mob/living/simple_mob/slime/xenobio/apply_melee_effects(mob/living/L) - if(istype(L) && a_intent == I_HURT) - // Pump them full of toxins, if able. - if(L.reagents && L.can_inject() && reagent_injected) - L.reagents.add_reagent(reagent_injected, injection_amount) - - // Feed off of their flesh, if able. - consume(L, 5) - - -/mob/living/simple_mob/slime/xenobio/AltClickOn(atom/movable/A) - if(isliving(A) && Adjacent(A)) - animal_nom(A) - else +// Code for slimes attacking other things. + +// Slime attacks change based on intent. +/mob/living/simple_mob/slime/xenobio/apply_attack(mob/living/L, damage_to_do) + if(istype(L)) + switch(a_intent) + if(I_HELP) // This shouldn't happen but just in case. + return FALSE + + if(I_DISARM) + var/stun_power = between(0, power_charge + rand(0, 3), 10) + + if(ishuman(L)) + var/mob/living/carbon/human/H = L + stun_power *= max(H.species.siemens_coefficient, 0) + + if(prob(stun_power * 10)) // Try an electric shock. + power_charge = max(0, power_charge - 3) + L.visible_message( + span("danger", "\The [src] has shocked \the [L]!"), + span("danger", "\The [src] has shocked you!") + ) + playsound(src, 'sound/weapons/Egloves.ogg', 75, 1) + L.Weaken(4) + L.Stun(4) + do_attack_animation(L) + if(L.buckled) + L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you. + L.stuttering = max(L.stuttering, stun_power) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, L) + s.start() + + if(prob(stun_power * 10) && stun_power >= 8) + L.adjustFireLoss(power_charge * rand(1, 2)) + return FALSE + + else if(prob(20)) // Try to do a regular disarm attack. + L.visible_message( + span("danger", "\The [src] has pounced at \the [L]!"), + span("danger", "\The [src] has pounced at you!") + ) + playsound(src, 'sound/weapons/thudswoosh.ogg', 75, 1) + L.Weaken(2) + do_attack_animation(L) + if(L.buckled) + L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you. + return FALSE + + else // Failed to do anything this time. + L.visible_message( + span("warning", "\The [src] has tried to pounce at \the [L]!"), + span("warning", "\The [src] has tried to pounce at you!") + ) + playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) + do_attack_animation(L) + return FALSE + + if(I_GRAB) + start_consuming(L) + return FALSE + + if(I_HURT) + return ..() // Regular stuff. + else + return ..() // Do the regular stuff if we're hitting a window/mech/etc. + +/mob/living/simple_mob/slime/xenobio/apply_melee_effects(mob/living/L) + if(istype(L) && a_intent == I_HURT) + // Pump them full of toxins, if able. + if(L.reagents && L.can_inject() && reagent_injected) + L.reagents.add_reagent(reagent_injected, injection_amount) + + // Feed off of their flesh, if able. + consume(L, 5) + + +/mob/living/simple_mob/slime/xenobio/AltClickOn(atom/movable/A) + if(isliving(A) && Adjacent(A)) + animal_nom(A) + else ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm index d6b5948c26..0764c01de6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm @@ -1,172 +1,172 @@ -// Handles hunger, starvation, growth, and eatting humans. - -/mob/living/simple_mob/slime/xenobio/adjust_nutrition(input, var/heal = 1) - ..(input) - - if(input > 0) - // Gain around one level per 50 nutrition. - if(prob(input * 2)) - power_charge = min(power_charge++, 10) - if(power_charge == 10) - adjustToxLoss(-10) - - // Heal 1 point of damage per 5 nutrition coming in. - if(heal) - adjustBruteLoss(-input * 0.2) - adjustFireLoss(-input * 0.2) - adjustToxLoss(-input * 0.2) - adjustOxyLoss(-input * 0.2) - adjustCloneLoss(-input * 0.2) - -/mob/living/simple_mob/slime/xenobio/proc/get_grow_nutrition() // Above it we grow, below it we can eat - return is_adult ? 1000 : 800 - -/mob/living/simple_mob/slime/xenobio/proc/get_hunger_nutrition() // Below it we will always eat - return is_adult ? 600 : 500 - -/mob/living/simple_mob/slime/xenobio/proc/get_starve_nutrition() // Below it we will eat before everything else - return is_adult ? 300 : 200 - -// Called by Life(). -/mob/living/simple_mob/slime/xenobio/proc/handle_nutrition() - if(harmless) - return - - if(prob(15)) - adjust_nutrition(is_adult ? -2 : -1) // Adult slimes get hungry faster. - - if(nutrition <= get_starve_nutrition()) - handle_starvation() - - else if(nutrition >= get_grow_nutrition() && amount_grown < 10) - adjust_nutrition(-20) - amount_grown = between(0, amount_grown + 1, 10) - -// Called if above proc happens while below a nutrition threshold. -/mob/living/simple_mob/slime/xenobio/proc/handle_starvation() - if(nutrition < get_starve_nutrition() && !client) // if a slime is starving, it starts losing its friends - if(friends.len && prob(1)) - var/mob/nofriend = pick(friends) - if(nofriend) - friends -= nofriend - say("[nofriend]... food now...") - - if(nutrition <= 0) - adjustToxLoss(rand(1,3)) - if(client && prob(5)) - to_chat(src, span("danger", "You are starving!")) - - -/mob/living/simple_mob/slime/xenobio/proc/handle_consumption() - if(victim && !stat) - if(istype(victim) && consume(victim, 20)) - if(prob(25)) - to_chat(src, span("notice", "You continue absorbing \the [victim].")) - - else - var/list/feedback = list( - "This subject is incompatible", - "This subject does not have a life energy", - "This subject is empty", - "I am not satisfied", - "I can not feed from this subject", - "I do not feel nourished", - "This subject is not food" - ) - to_chat(src, span("warning", "[pick(feedback)]...")) - stop_consumption() - - if(victim) - victim.updatehealth() - - else - stop_consumption() - -/mob/living/simple_mob/slime/xenobio/proc/start_consuming(mob/living/L) - if(!can_consume(L)) - return - if(!Adjacent(L)) - return - - step_towards(src, L) // Get on top of them to feed. - if(loc != L.loc) - return - - if(L.buckle_mob(src, forced = TRUE)) - victim = L - update_icon() - set_AI_busy(TRUE) // Don't want the AI to interfere with eatting. - victim.visible_message( - span("danger", "\The [src] latches onto \the [victim]!"), - span("critical", "\The [src] latches onto you!") - ) - -/mob/living/simple_mob/slime/xenobio/proc/stop_consumption(mob/living/L) - if(!victim) - return - victim.unbuckle_mob() - victim.visible_message( - span("notice", "\The [src] slides off of [victim]!"), - span("notice", "\The [src] slides off of you!") - ) - victim = null - update_icon() - set_AI_busy(FALSE) // Resume normal operations. - -/mob/living/simple_mob/slime/xenobio/proc/can_consume(mob/living/L) - if(!L || !istype(L)) - to_chat(src, "This subject is incomparable...") - return FALSE - if(harmless) - to_chat(src, "I am pacified... I cannot eat...") - return FALSE - if(L.mob_class & MOB_CLASS_SLIME) - to_chat(src, "I cannot feed on other slimes...") - return FALSE - if(L.isSynthetic()) - to_chat(src, "This subject is not biological...") - return FALSE - if(L.getarmor(null, "bio") >= 75) - to_chat(src, "I cannot reach this subject's biological matter...") - return FALSE - if(!Adjacent(L)) - to_chat(src, "This subject is too far away...") - return FALSE - if(L.getCloneLoss() >= L.getMaxHealth() * 1.5) - to_chat(src, "This subject does not have an edible life energy...") - return FALSE - //VOREStation Addition start - if(istype(L, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = L - if(H.species.flags & NO_SCAN) - to_chat(src, "This subject's life energy is beyond my reach...") - return FALSE - //VOREStation Addition end - if(L.has_buckled_mobs()) - for(var/A in L.buckled_mobs) - if(istype(A, /mob/living/simple_mob/slime/xenobio)) - if(A != src) - to_chat(src, "\The [A] is already feeding on this subject...") - return FALSE - return TRUE - -// This does the actual damage, as well as give nutrition and heals. -// Assuming no bio armor, calling consume(10) will result in; -// 6 clone damage to victim -// 4 tox damage to victim. -// 25 nutrition for the slime. -// 2 points of damage healed on the slime (as a result of the nutrition). -// 50% of giving +1 charge to the slime (same as above). -/mob/living/simple_mob/slime/xenobio/proc/consume(mob/living/victim, amount) - if(can_consume(victim)) - var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1) - var/damage_done = amount * armor_modifier - if(damage_done > 0) - victim.adjustCloneLoss(damage_done * 0.6) - victim.adjustToxLoss(damage_done * 0.4) - adjust_nutrition(damage_done * 5) - Beam(victim, icon_state = "slime_consume", time = 8) - to_chat(src, span("notice", "You absorb some biomaterial from \the [victim].")) - to_chat(victim, span("danger", "\The [src] consumes some of your flesh!")) - return TRUE - return FALSE +// Handles hunger, starvation, growth, and eatting humans. + +/mob/living/simple_mob/slime/xenobio/adjust_nutrition(input, var/heal = 1) + ..(input) + + if(input > 0) + // Gain around one level per 50 nutrition. + if(prob(input * 2)) + power_charge = min(power_charge++, 10) + if(power_charge == 10) + adjustToxLoss(-10) + + // Heal 1 point of damage per 5 nutrition coming in. + if(heal) + adjustBruteLoss(-input * 0.2) + adjustFireLoss(-input * 0.2) + adjustToxLoss(-input * 0.2) + adjustOxyLoss(-input * 0.2) + adjustCloneLoss(-input * 0.2) + +/mob/living/simple_mob/slime/xenobio/proc/get_grow_nutrition() // Above it we grow, below it we can eat + return is_adult ? 1000 : 800 + +/mob/living/simple_mob/slime/xenobio/proc/get_hunger_nutrition() // Below it we will always eat + return is_adult ? 600 : 500 + +/mob/living/simple_mob/slime/xenobio/proc/get_starve_nutrition() // Below it we will eat before everything else + return is_adult ? 300 : 200 + +// Called by Life(). +/mob/living/simple_mob/slime/xenobio/proc/handle_nutrition() + if(harmless) + return + + if(prob(15)) + adjust_nutrition(is_adult ? -2 : -1) // Adult slimes get hungry faster. + + if(nutrition <= get_starve_nutrition()) + handle_starvation() + + else if(nutrition >= get_grow_nutrition() && amount_grown < 10) + adjust_nutrition(-20) + amount_grown = between(0, amount_grown + 1, 10) + +// Called if above proc happens while below a nutrition threshold. +/mob/living/simple_mob/slime/xenobio/proc/handle_starvation() + if(nutrition < get_starve_nutrition() && !client) // if a slime is starving, it starts losing its friends + if(friends.len && prob(1)) + var/mob/nofriend = pick(friends) + if(nofriend) + friends -= nofriend + say("[nofriend]... food now...") + + if(nutrition <= 0) + adjustToxLoss(rand(1,3)) + if(client && prob(5)) + to_chat(src, span("danger", "You are starving!")) + + +/mob/living/simple_mob/slime/xenobio/proc/handle_consumption() + if(victim && !stat) + if(istype(victim) && consume(victim, 20)) + if(prob(25)) + to_chat(src, span("notice", "You continue absorbing \the [victim].")) + + else + var/list/feedback = list( + "This subject is incompatible", + "This subject does not have a life energy", + "This subject is empty", + "I am not satisfied", + "I can not feed from this subject", + "I do not feel nourished", + "This subject is not food" + ) + to_chat(src, span("warning", "[pick(feedback)]...")) + stop_consumption() + + if(victim) + victim.updatehealth() + + else + stop_consumption() + +/mob/living/simple_mob/slime/xenobio/proc/start_consuming(mob/living/L) + if(!can_consume(L)) + return + if(!Adjacent(L)) + return + + step_towards(src, L) // Get on top of them to feed. + if(loc != L.loc) + return + + if(L.buckle_mob(src, forced = TRUE)) + victim = L + update_icon() + set_AI_busy(TRUE) // Don't want the AI to interfere with eatting. + victim.visible_message( + span("danger", "\The [src] latches onto \the [victim]!"), + span("critical", "\The [src] latches onto you!") + ) + +/mob/living/simple_mob/slime/xenobio/proc/stop_consumption(mob/living/L) + if(!victim) + return + victim.unbuckle_mob() + victim.visible_message( + span("notice", "\The [src] slides off of [victim]!"), + span("notice", "\The [src] slides off of you!") + ) + victim = null + update_icon() + set_AI_busy(FALSE) // Resume normal operations. + +/mob/living/simple_mob/slime/xenobio/proc/can_consume(mob/living/L) + if(!L || !istype(L)) + to_chat(src, "This subject is incomparable...") + return FALSE + if(harmless) + to_chat(src, "I am pacified... I cannot eat...") + return FALSE + if(L.mob_class & MOB_CLASS_SLIME) + to_chat(src, "I cannot feed on other slimes...") + return FALSE + if(L.isSynthetic()) + to_chat(src, "This subject is not biological...") + return FALSE + if(L.getarmor(null, "bio") >= 75) + to_chat(src, "I cannot reach this subject's biological matter...") + return FALSE + if(!Adjacent(L)) + to_chat(src, "This subject is too far away...") + return FALSE + if(L.getCloneLoss() >= L.getMaxHealth() * 1.5) + to_chat(src, "This subject does not have an edible life energy...") + return FALSE + //VOREStation Addition start + if(istype(L, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = L + if(H.species.flags & NO_SCAN) + to_chat(src, "This subject's life energy is beyond my reach...") + return FALSE + //VOREStation Addition end + if(L.has_buckled_mobs()) + for(var/A in L.buckled_mobs) + if(istype(A, /mob/living/simple_mob/slime/xenobio)) + if(A != src) + to_chat(src, "\The [A] is already feeding on this subject...") + return FALSE + return TRUE + +// This does the actual damage, as well as give nutrition and heals. +// Assuming no bio armor, calling consume(10) will result in; +// 6 clone damage to victim +// 4 tox damage to victim. +// 25 nutrition for the slime. +// 2 points of damage healed on the slime (as a result of the nutrition). +// 50% of giving +1 charge to the slime (same as above). +/mob/living/simple_mob/slime/xenobio/proc/consume(mob/living/victim, amount) + if(can_consume(victim)) + var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1) + var/damage_done = amount * armor_modifier + if(damage_done > 0) + victim.adjustCloneLoss(damage_done * 0.6) + victim.adjustToxLoss(damage_done * 0.4) + adjust_nutrition(damage_done * 5) + Beam(victim, icon_state = "slime_consume", time = 8) + to_chat(src, span("notice", "You absorb some biomaterial from \the [victim].")) + to_chat(victim, span("danger", "\The [src] consumes some of your flesh!")) + return TRUE + return FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm index 5360dab7b3..0ab838f329 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm @@ -1,23 +1,23 @@ -// Handles the subjugation of slimes by force. -// Mostly a way for things to talk to the AI indirectly. - -/mob/living/simple_mob/slime/xenobio/proc/adjust_discipline(amount, silent) - if(amount > 0) - to_chat(src, span("warning", "You've been disciplined!")) - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - AI.adjust_discipline(amount, silent) - - -/mob/living/simple_mob/slime/xenobio/proc/is_justified_to_discipline() - if(victim) // Punish if eating someone that isn't a monkey. - if(ishuman(victim)) - var/mob/living/carbon/human/H = victim - if(istype(H.species, /datum/species/monkey)) - return FALSE - return TRUE - - else if(has_AI()) // Now for thoughtcrimes. - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - return AI.is_justified_to_discipline() // Will return true if targeting a non-monkey. - return FALSE +// Handles the subjugation of slimes by force. +// Mostly a way for things to talk to the AI indirectly. + +/mob/living/simple_mob/slime/xenobio/proc/adjust_discipline(amount, silent) + if(amount > 0) + to_chat(src, span("warning", "You've been disciplined!")) + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + AI.adjust_discipline(amount, silent) + + +/mob/living/simple_mob/slime/xenobio/proc/is_justified_to_discipline() + if(victim) // Punish if eating someone that isn't a monkey. + if(ishuman(victim)) + var/mob/living/carbon/human/H = victim + if(istype(H.species, /datum/species/monkey)) + return FALSE + return TRUE + + else if(has_AI()) // Now for thoughtcrimes. + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + return AI.is_justified_to_discipline() // Will return true if targeting a non-monkey. + return FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm index d13469d8a6..4b5a2e0664 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm @@ -1,803 +1,803 @@ -// Here are where all the other colors of slime live. -// They will generally fight each other if not Unified, meaning the xenobiologist has to seperate them. - -// Tier 1. - -/mob/living/simple_mob/slime/xenobio/purple - desc = "This slime is rather toxic to handle, as it is poisonous." - color = "#CC23FF" - slime_color = "purple" - coretype = /obj/item/slime_extract/purple - reagent_injected = "toxin" - - description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack." - player_msg = "You inject a harmful toxin when attacking." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/dark_purple, - /mob/living/simple_mob/slime/xenobio/dark_blue, - /mob/living/simple_mob/slime/xenobio/green, - /mob/living/simple_mob/slime/xenobio - ) - -/mob/living/simple_mob/slime/xenobio/orange - desc = "This slime is known to be flammable and can ignite enemies." - color = "#FFA723" - slime_color = "orange" - coretype = /obj/item/slime_extract/orange - melee_damage_lower = 5 - melee_damage_upper = 5 - heat_resist = 1 - - description_info = "The slime is immune to burning attacks, and attacks from this slime will burn you, and can ignite you. \ - A firesuit can protect from the burning attacks of this slime." - player_msg = "You inflict burning attacks, which causes additional damage, makes the target more flammable, and has a chance to ignite them.
                    \ - You are also immune to burning attacks." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/dark_purple, - /mob/living/simple_mob/slime/xenobio/yellow, - /mob/living/simple_mob/slime/xenobio/red, - /mob/living/simple_mob/slime/xenobio - ) - -/mob/living/simple_mob/slime/xenobio/orange/apply_melee_effects(atom/A) - ..() - if(isliving(A)) - var/mob/living/L = A - L.inflict_heat_damage(is_adult ? 10 : 5) - to_chat(src, span("span", "You burn \the [L].")) - to_chat(L, span("danger", "You've been burned by \the [src]!")) - L.adjust_fire_stacks(1) - if(prob(12)) - L.IgniteMob() - -/mob/living/simple_mob/slime/xenobio/blue - desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes." - color = "#19FFFF" - slime_color = "blue" - coretype = /obj/item/slime_extract/blue - reagent_injected = "cryotoxin" - cold_resist = 0.50 // Not as strong as dark blue, which has immunity. - - description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \ - A biosuit or other thick armor can protect from the injection." - player_msg = "You inject cryotoxin on attack, which causes them to get very cold, slowing them down and harming them over time.
                    \ - You are also resistant to cold attacks." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/dark_blue, - /mob/living/simple_mob/slime/xenobio/silver, - /mob/living/simple_mob/slime/xenobio/pink, - /mob/living/simple_mob/slime/xenobio - ) - - -/mob/living/simple_mob/slime/xenobio/metal - desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface." - color = "#5F5F5F" - slime_color = "metal" - shiny = TRUE - coretype = /obj/item/slime_extract/metal - - description_info = "This slime is a lot more durable and tough to damage than the others. It also seems to provoke others to attack it over others." - player_msg = "You are more resilient and armored than more slimes. Your attacks will also encourage less intelligent enemies to focus on you." - - maxHealth = 250 - maxHealth_adult = 350 - - // The sloped armor. - // It's resistant to most weapons (but a spraybottle still kills it rather fast). - armor = list( - "melee" = 25, - "bullet" = 25, - "laser" = 25, - "energy" = 50, - "bomb" = 80, - "bio" = 100, - "rad" = 100 - ) - - armor_soak = list( - "melee" = 5, - "bullet" = 5, - "laser" = 5, - "energy" = 0, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/silver, - /mob/living/simple_mob/slime/xenobio/yellow, - /mob/living/simple_mob/slime/xenobio/gold, - /mob/living/simple_mob/slime/xenobio - ) - -/mob/living/simple_mob/slime/xenobio/metal/apply_melee_effects(atom/A) - ..() - if(isliving(A)) - var/mob/living/L = A - L.taunt(src, TRUE) // We're the party tank now. - -// Tier 2 - -/mob/living/simple_mob/slime/xenobio/yellow - desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes." - color = "#FFF423" - slime_color = "yellow" - coretype = /obj/item/slime_extract/yellow - melee_damage_lower = 5 - melee_damage_upper = 5 - shock_resist = 1 - - projectiletype = /obj/item/projectile/beam/lightning/slime - projectilesound = 'sound/effects/lightningbolt.ogg' - glow_toggle = TRUE - - description_info = "In addition to being immune to electrical shocks, this slime will fire ranged lightning attacks at \ - enemies if they are at range, inflict shocks upon entities they attack, and generate electricity for their stun \ - attack faster than usual. Insulative or reflective armor can protect from these attacks." - player_msg = "You have a ranged electric attack. You also shock enemies you attack, and your electric stun attack charges passively.
                    \ - You are also immune to shocking attacks." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/bluespace, - /mob/living/simple_mob/slime/xenobio/bluespace, - /mob/living/simple_mob/slime/xenobio/metal, - /mob/living/simple_mob/slime/xenobio/orange - ) - -/mob/living/simple_mob/slime/xenobio/yellow/apply_melee_effects(atom/A) - ..() - if(isliving(A)) - var/mob/living/L = A - L.inflict_shock_damage(is_adult ? 10 : 5) - to_chat(src, span("span", "You shock \the [L].")) - to_chat(L, span("danger", "You've been shocked by \the [src]!")) - -/mob/living/simple_mob/slime/xenobio/yellow/handle_special() - if(stat == CONSCIOUS) - if(prob(25)) - power_charge = between(0, power_charge + 1, 10) - ..() - -/obj/item/projectile/beam/lightning/slime - power = 10 - fire_sound = 'sound/effects/lightningbolt.ogg' - - -/mob/living/simple_mob/slime/xenobio/dark_purple - desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." - color = "#660088" - slime_color = "dark purple" - coretype = /obj/item/slime_extract/dark_purple - reagent_injected = "phoron" - - description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \ - If hit with a burning attack, it will erupt in flames." - player_msg = "You inject phoron into enemies you attack.
                    \ - You will erupt into flames if harmed by fire!" - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/purple, - /mob/living/simple_mob/slime/xenobio/orange, - /mob/living/simple_mob/slime/xenobio/ruby, - /mob/living/simple_mob/slime/xenobio/ruby - ) - -/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite() - visible_message(span("critical", "\The [src] erupts in an inferno!")) - for(var/turf/simulated/target_turf in view(2, src)) - target_turf.assume_gas("phoron", 30, 1500+T0C) - spawn(0) - target_turf.hotspot_expose(1500+T0C, 400) - qdel(src) - -/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity) - log_and_message_admins("[src] ignited due to a chain reaction with an explosion.") - ignite() - -/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume) - log_and_message_admins("[src] ignited due to exposure to fire.") - ignite() - -/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. - log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") - ignite() - else - ..() - -/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W) && W.force && W.damtype == BURN) - log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].") - ignite() - else - ..() - - - -/mob/living/simple_mob/slime/xenobio/dark_blue - desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly." - color = "#2398FF" - glow_toggle = TRUE - slime_color = "dark blue" - coretype = /obj/item/slime_extract/dark_blue - melee_damage_lower = 5 - melee_damage_upper = 5 - cold_resist = 1 - - description_info = "This slime is immune to the cold, however water will still kill it. Its presense, as well as its attacks, will \ - also cause you additional harm from the cold. A winter coat or other cold-resistant clothing can protect from this." - player_msg = "You are immune to the cold, inflict additional cold damage on attack, and cause nearby entities to suffer from coldness." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/purple, - /mob/living/simple_mob/slime/xenobio/blue, - /mob/living/simple_mob/slime/xenobio/cerulean, - /mob/living/simple_mob/slime/xenobio/cerulean - ) - - minbodytemp = 0 - cold_damage_per_tick = 0 - -/mob/living/simple_mob/slime/xenobio/dark_blue/handle_special() - if(stat != DEAD) - cold_aura() - ..() - -/mob/living/simple_mob/slime/xenobio/dark_blue/proc/cold_aura() - for(var/mob/living/L in view(2, src)) - if(L == src) - continue - chill(L) - - var/turf/T = get_turf(src) - var/datum/gas_mixture/env = T.return_air() - if(env) - env.add_thermal_energy(-10 * 1000) - -/mob/living/simple_mob/slime/xenobio/dark_blue/apply_melee_effects(atom/A) - ..() - if(isliving(A)) - var/mob/living/L = A - chill(L) - to_chat(src, span("span", "You chill \the [L].")) - to_chat(L, span("danger", "You've been chilled by \the [src]!")) - - -/mob/living/simple_mob/slime/xenobio/dark_blue/proc/chill(mob/living/L) - L.inflict_cold_damage(is_adult ? 10 : 5) - if(L.get_cold_protection() < 1 && L.has_AI()) // Harmful auras will make the AI react to its bearer. - L.ai_holder.react_to_attack(src) - - -/mob/living/simple_mob/slime/xenobio/silver - desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it." - color = "#AAAAAA" - slime_color = "silver" - coretype = /obj/item/slime_extract/silver - shiny = TRUE - - description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works." - player_msg = "You automatically reflect lasers, beams, and tasers that hit you." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/metal, - /mob/living/simple_mob/slime/xenobio/blue, - /mob/living/simple_mob/slime/xenobio/amber, - /mob/living/simple_mob/slime/xenobio/amber - ) - -/mob/living/simple_mob/slime/xenobio/silver/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) - visible_message(span("danger", "\The [src] reflects \the [P]!")) - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = TRUE - return PROJECTILE_CONTINUE // complete projectile permutation - else - ..() - - -// Tier 3 - -/mob/living/simple_mob/slime/xenobio/bluespace - desc = "Trapping this slime in a cell is generally futile, as it can teleport at will." - color = null - slime_color = "bluespace" - icon_state_override = "bluespace" - coretype = /obj/item/slime_extract/bluespace - - description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds." - player_msg = "You can teleport at will to a specific tile by clicking on it at range. This has a five second cooldown." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/bluespace, - /mob/living/simple_mob/slime/xenobio/bluespace, - /mob/living/simple_mob/slime/xenobio/yellow, - /mob/living/simple_mob/slime/xenobio/yellow - ) - - special_attack_min_range = 3 - special_attack_max_range = 7 - special_attack_cooldown = 5 SECONDS - -/mob/living/simple_mob/slime/xenobio/bluespace/do_special_attack(atom/A) - // Teleport attack. - if(!A) - to_chat(src, span("warning", "There's nothing to teleport to.")) - return FALSE - - var/list/nearby_things = range(1, A) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - var/turf/T = get_turf(src) - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message(span("notice", "\The [src] vanishes!")) - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, span("notice", "You teleport to \the [target_turf].")) - - target_turf.visible_message(span("warning", "\The [src] appears!")) - s2.start() - - if(Adjacent(A)) - attack_target(A) - - -/mob/living/simple_mob/slime/xenobio/ruby - desc = "This slime has great physical strength." - color = "#FF3333" - slime_color = "ruby" - shiny = TRUE - glow_toggle = TRUE - coretype = /obj/item/slime_extract/ruby - - description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \ - Their glomp attacks also send the victim flying." - player_msg = "Your attacks knock back the target a fair distance.
                    \ - You also hit harder, take less damage, and stuns affect you for less time." - - melee_attack_delay = 1 SECOND - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/dark_purple, - /mob/living/simple_mob/slime/xenobio/dark_purple, - /mob/living/simple_mob/slime/xenobio/ruby, - /mob/living/simple_mob/slime/xenobio/ruby - ) - -/mob/living/simple_mob/slime/xenobio/ruby/Initialize() - add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole. - return ..() - -/mob/living/simple_mob/slime/xenobio/ruby/apply_melee_effects(atom/A) - ..() - - if(isliving(A) && a_intent == I_HURT) - var/mob/living/L = A - if(L.mob_size <= MOB_MEDIUM) - visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) - playsound(src, "punch", 50, 1) - L.Weaken(1) - var/throwdir = get_dir(src, L) - L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) - else - to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) - visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. - playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. - - -/mob/living/simple_mob/slime/xenobio/amber - desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \ - They would probably be very important to other slimes, if the other colors didn't try to kill them." - color = "#FFBB00" - slime_color = "amber" - shiny = TRUE - glow_toggle = TRUE - coretype = /obj/item/slime_extract/amber - - description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \ - slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes." - player_msg = "You passively provide nutrition to nearby entities." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/silver, - /mob/living/simple_mob/slime/xenobio/silver, - /mob/living/simple_mob/slime/xenobio/amber, - /mob/living/simple_mob/slime/xenobio/amber - ) - -/mob/living/simple_mob/slime/xenobio/amber/handle_special() - if(stat != DEAD) - feed_aura() - ..() - -/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura() - for(var/mob/living/L in view(1, src)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - if(L == src || istype(L, /mob/living/simple_mob/slime/xenobio/amber)) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers. - continue - if(istype(L, /mob/living/simple_mob/slime/xenobio)) - var/mob/living/simple_mob/slime/xenobio/X = L - X.adjust_nutrition(rand(15, 25), 0) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.isSynthetic()) - continue - H.nutrition = between(0, H.nutrition + rand(15, 25), 800) - -/mob/living/simple_mob/slime/xenobio/cerulean - desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none." - color = "#4F7EAA" - slime_color = "cerulean" - coretype = /obj/item/slime_extract/cerulean - - // Less than the specialized slimes, but higher than the rest. - maxHealth = 200 - maxHealth_adult = 250 - - melee_damage_lower = 10 - melee_damage_upper = 30 - - movement_cooldown = -1 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future. - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/dark_blue, - /mob/living/simple_mob/slime/xenobio/dark_blue, - /mob/living/simple_mob/slime/xenobio/cerulean, - /mob/living/simple_mob/slime/xenobio/cerulean - ) - -// Tier 4 - -/mob/living/simple_mob/slime/xenobio/red - desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here." - color = "#FF3333" - slime_color = "red" - coretype = /obj/item/slime_extract/red - movement_cooldown = -1 // See above. - untamable = TRUE // Will enrage if disciplined. - - description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/red, - /mob/living/simple_mob/slime/xenobio/oil, - /mob/living/simple_mob/slime/xenobio/oil, - /mob/living/simple_mob/slime/xenobio/orange - ) - - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime - - -/mob/living/simple_mob/slime/xenobio/green - desc = "This slime is radioactive." - color = "#14FF20" - slime_color = "green" - coretype = /obj/item/slime_extract/green - glow_toggle = TRUE - reagent_injected = "radium" - var/rads = 25 - - description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \ - A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive." - player_msg = "You passively irradiate your surroundings.
                    \ - You also inject radium on attack." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/purple, - /mob/living/simple_mob/slime/xenobio/green, - /mob/living/simple_mob/slime/xenobio/emerald, - /mob/living/simple_mob/slime/xenobio/emerald - ) - -/mob/living/simple_mob/slime/xenobio/green/handle_special() - if(stat != DEAD) - irradiate() - ..() - -/mob/living/simple_mob/slime/xenobio/green/proc/irradiate() - SSradiation.radiate(src, rads) - - - -/mob/living/simple_mob/slime/xenobio/pink - desc = "This slime has regenerative properties." - color = "#FF0080" - slime_color = "pink" - coretype = /obj/item/slime_extract/pink - glow_toggle = TRUE - - description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive." - player_msg = "You passively heal yourself and nearby allies." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/blue, - /mob/living/simple_mob/slime/xenobio/light_pink, - /mob/living/simple_mob/slime/xenobio/light_pink, - /mob/living/simple_mob/slime/xenobio/pink - ) - -/mob/living/simple_mob/slime/xenobio/pink/handle_special() - if(stat != DEAD) - heal_aura() - ..() - -/mob/living/simple_mob/slime/xenobio/pink/proc/heal_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/slime_heal, null, src) - -/datum/modifier/aura/slime_heal - name = "slime mending" - desc = "You feel somewhat gooey." - mob_overlay_state = "pink_sparkles" - stacks = MODIFIER_STACK_FORBID - aura_max_distance = 2 - - on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier." - on_expired_text = "The spores of goo have faded, although you feel much healthier than before." - -/datum/modifier/aura/slime_heal/tick() - if(holder.stat == DEAD) - expire() - - if(ishuman(holder)) // Robolimbs need this code sadly. - var/mob/living/carbon/human/H = holder - for(var/obj/item/organ/external/E in H.organs) - var/obj/item/organ/external/O = E - O.heal_damage(2, 2, 0, 1) - else - holder.adjustBruteLoss(-2) - holder.adjustFireLoss(-2) - - holder.adjustToxLoss(-2) - holder.adjustOxyLoss(-2) - holder.adjustCloneLoss(-1) - - -/mob/living/simple_mob/slime/xenobio/gold - desc = "This slime absorbs energy, and cannot be stunned by normal means." - color = "#EEAA00" - shiny = TRUE - slime_color = "gold" - coretype = /obj/item/slime_extract/gold - description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/metal, - /mob/living/simple_mob/slime/xenobio/gold, - /mob/living/simple_mob/slime/xenobio/sapphire, - /mob/living/simple_mob/slime/xenobio/sapphire - ) - -/mob/living/simple_mob/slime/xenobio/gold/slimebatoned(mob/living/user, amount) - adjust_discipline(round(amount/2)) - power_charge = between(0, power_charge + amount, 10) - -/mob/living/simple_mob/slime/xenobio/gold/get_description_interaction() // So it doesn't say to use a baton on them. - return list() - - -// Tier 5 - -/mob/living/simple_mob/slime/xenobio/oil - desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea." - color = "#333333" - slime_color = "oil" - shiny = TRUE - coretype = /obj/item/slime_extract/oil - - description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \ - an explosion, it will explode. Oil slimes will also suicide-bomb themselves when fighting something that is not a monkey or slime." - player_msg = "You will explode if struck by a burning attack, or if you hit an enemy with a melee attack that is not a monkey or another slime." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/oil, - /mob/living/simple_mob/slime/xenobio/oil, - /mob/living/simple_mob/slime/xenobio/red, - /mob/living/simple_mob/slime/xenobio/red - ) - -/mob/living/simple_mob/slime/xenobio/oil/proc/explode() - if(stat != DEAD) - explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted. - if(src) // Delete ourselves if the explosion didn't do it. - qdel(src) - -/mob/living/simple_mob/slime/xenobio/oil/apply_melee_effects(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(ishuman(L)) - var/mob/living/carbon/human/H = A - if(istype(H.species, /datum/species/monkey)) - return ..()// Don't blow up when just eatting monkeys. - - else if(isslime(L)) - return ..() - - // Otherwise blow ourselves up. - say(pick("Sacrifice...!", "Sssss...", "Boom...!")) - set_AI_busy(TRUE) - sleep(2 SECONDS) - log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].") - explode() - - return ..() - -/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity) - log_and_message_admins("[src] exploded due to a chain reaction with another explosion.") - explode() - -/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume) - log_and_message_admins("[src] exploded due to exposure to fire.") - explode() - -/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone) - if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. - log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") - explode() - else - ..() - -/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/weapon/W, mob/living/user) - if(istype(W) && W.force && W.damtype == BURN) - log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].") - explode() - else - ..() - - -/mob/living/simple_mob/slime/xenobio/sapphire - desc = "This slime seems a bit brighter than the rest, both figuratively and literally." - color = "#2398FF" - slime_color = "sapphire" - shiny = TRUE - glow_toggle = TRUE - coretype = /obj/item/slime_extract/sapphire - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/sapphire - - description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \ - with one if hostile, and especially dangerous if they outnumber you." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/sapphire, - /mob/living/simple_mob/slime/xenobio/sapphire, - /mob/living/simple_mob/slime/xenobio/gold, - /mob/living/simple_mob/slime/xenobio/gold - ) - - -/mob/living/simple_mob/slime/xenobio/emerald - desc = "This slime is faster than usual, even more so than the red slimes." - color = "#22FF22" - shiny = TRUE - glow_toggle = TRUE - slime_color = "emerald" - coretype = /obj/item/slime_extract/emerald - - description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/green, - /mob/living/simple_mob/slime/xenobio/green, - /mob/living/simple_mob/slime/xenobio/emerald, - /mob/living/simple_mob/slime/xenobio/emerald - ) - -/mob/living/simple_mob/slime/xenobio/emerald/handle_special() - if(stat != DEAD) - zoom_aura() - ..() - -/mob/living/simple_mob/slime/xenobio/emerald/proc/zoom_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src) - - -/mob/living/simple_mob/slime/xenobio/light_pink - desc = "This slime seems a lot more peaceful than the others." - color = "#FF8888" - slime_color = "light pink" - coretype = /obj/item/slime_extract/light_pink - - description_info = "This slime is effectively always disciplined initially." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/pink, - /mob/living/simple_mob/slime/xenobio/pink, - /mob/living/simple_mob/slime/xenobio/light_pink, - /mob/living/simple_mob/slime/xenobio/light_pink - ) - - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/light_pink - -// Special -/mob/living/simple_mob/slime/xenobio/rainbow - desc = "This slime changes colors constantly." - color = null // Uses a special icon_state. - slime_color = "rainbow" - coretype = /obj/item/slime_extract/rainbow - icon_state_override = "rainbow" - unity = TRUE - - description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \ - other slimes being friendly to them, and therefore will never be harmed by another slime. \ - Attacking this slime will provoke the wrath of all slimes within range." - player_msg = "You are considered to be the same color as every slime, \ - meaning that you are considered an ally to all slimes." - - slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/rainbow, - /mob/living/simple_mob/slime/xenobio/rainbow, - /mob/living/simple_mob/slime/xenobio/rainbow, - /mob/living/simple_mob/slime/xenobio/rainbow - ) - -/mob/living/simple_mob/slime/xenobio/rainbow/Initialize() - unify() - return ..() - -// The RD's pet slime. -/mob/living/simple_mob/slime/xenobio/rainbow/kendrick - name = "Kendrick" - desc = "The Research Director's pet slime. It shifts colors constantly." - rainbow_core_candidate = FALSE - // Doing pacify() in initialize() won't actually pacify the AI due to the ai_holder not existing due to parent initialize() not being called yet. - // Instead lets just give them an ai_holder that does that for us. - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive - -/mob/living/simple_mob/slime/xenobio/rainbow/kendrick/Initialize() - pacify() // So the physical mob also gets made harmless. - return ..() - -//ChompAdd Begins -// A pacified pink slime for either Admin-spawning or putting in a casino reward or capture crystal. -/mob/living/simple_mob/slime/xenobio/pink/sana - name = "Sana" - desc = "A pink slime that seems to be oddly friendly, and doesn't seem interested in eating your face like the rest of them." - rainbow_core_candidate = FALSE - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive - -/mob/living/simple_mob/slime/xenobio/pink/sana/Initialize() - pacify() // So the physical mob also gets made harmless. - return ..() +// Here are where all the other colors of slime live. +// They will generally fight each other if not Unified, meaning the xenobiologist has to seperate them. + +// Tier 1. + +/mob/living/simple_mob/slime/xenobio/purple + desc = "This slime is rather toxic to handle, as it is poisonous." + color = "#CC23FF" + slime_color = "purple" + coretype = /obj/item/slime_extract/purple + reagent_injected = "toxin" + + description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack." + player_msg = "You inject a harmful toxin when attacking." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/dark_purple, + /mob/living/simple_mob/slime/xenobio/dark_blue, + /mob/living/simple_mob/slime/xenobio/green, + /mob/living/simple_mob/slime/xenobio + ) + +/mob/living/simple_mob/slime/xenobio/orange + desc = "This slime is known to be flammable and can ignite enemies." + color = "#FFA723" + slime_color = "orange" + coretype = /obj/item/slime_extract/orange + melee_damage_lower = 5 + melee_damage_upper = 5 + heat_resist = 1 + + description_info = "The slime is immune to burning attacks, and attacks from this slime will burn you, and can ignite you. \ + A firesuit can protect from the burning attacks of this slime." + player_msg = "You inflict burning attacks, which causes additional damage, makes the target more flammable, and has a chance to ignite them.
                    \ + You are also immune to burning attacks." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/dark_purple, + /mob/living/simple_mob/slime/xenobio/yellow, + /mob/living/simple_mob/slime/xenobio/red, + /mob/living/simple_mob/slime/xenobio + ) + +/mob/living/simple_mob/slime/xenobio/orange/apply_melee_effects(atom/A) + ..() + if(isliving(A)) + var/mob/living/L = A + L.inflict_heat_damage(is_adult ? 10 : 5) + to_chat(src, span("span", "You burn \the [L].")) + to_chat(L, span("danger", "You've been burned by \the [src]!")) + L.adjust_fire_stacks(1) + if(prob(12)) + L.IgniteMob() + +/mob/living/simple_mob/slime/xenobio/blue + desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes." + color = "#19FFFF" + slime_color = "blue" + coretype = /obj/item/slime_extract/blue + reagent_injected = "cryotoxin" + cold_resist = 0.50 // Not as strong as dark blue, which has immunity. + + description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \ + A biosuit or other thick armor can protect from the injection." + player_msg = "You inject cryotoxin on attack, which causes them to get very cold, slowing them down and harming them over time.
                    \ + You are also resistant to cold attacks." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/dark_blue, + /mob/living/simple_mob/slime/xenobio/silver, + /mob/living/simple_mob/slime/xenobio/pink, + /mob/living/simple_mob/slime/xenobio + ) + + +/mob/living/simple_mob/slime/xenobio/metal + desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface." + color = "#5F5F5F" + slime_color = "metal" + shiny = TRUE + coretype = /obj/item/slime_extract/metal + + description_info = "This slime is a lot more durable and tough to damage than the others. It also seems to provoke others to attack it over others." + player_msg = "You are more resilient and armored than more slimes. Your attacks will also encourage less intelligent enemies to focus on you." + + maxHealth = 250 + maxHealth_adult = 350 + + // The sloped armor. + // It's resistant to most weapons (but a spraybottle still kills it rather fast). + armor = list( + "melee" = 25, + "bullet" = 25, + "laser" = 25, + "energy" = 50, + "bomb" = 80, + "bio" = 100, + "rad" = 100 + ) + + armor_soak = list( + "melee" = 5, + "bullet" = 5, + "laser" = 5, + "energy" = 0, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/silver, + /mob/living/simple_mob/slime/xenobio/yellow, + /mob/living/simple_mob/slime/xenobio/gold, + /mob/living/simple_mob/slime/xenobio + ) + +/mob/living/simple_mob/slime/xenobio/metal/apply_melee_effects(atom/A) + ..() + if(isliving(A)) + var/mob/living/L = A + L.taunt(src, TRUE) // We're the party tank now. + +// Tier 2 + +/mob/living/simple_mob/slime/xenobio/yellow + desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes." + color = "#FFF423" + slime_color = "yellow" + coretype = /obj/item/slime_extract/yellow + melee_damage_lower = 5 + melee_damage_upper = 5 + shock_resist = 1 + + projectiletype = /obj/item/projectile/beam/lightning/slime + projectilesound = 'sound/effects/lightningbolt.ogg' + glow_toggle = TRUE + + description_info = "In addition to being immune to electrical shocks, this slime will fire ranged lightning attacks at \ + enemies if they are at range, inflict shocks upon entities they attack, and generate electricity for their stun \ + attack faster than usual. Insulative or reflective armor can protect from these attacks." + player_msg = "You have a ranged electric attack. You also shock enemies you attack, and your electric stun attack charges passively.
                    \ + You are also immune to shocking attacks." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/bluespace, + /mob/living/simple_mob/slime/xenobio/bluespace, + /mob/living/simple_mob/slime/xenobio/metal, + /mob/living/simple_mob/slime/xenobio/orange + ) + +/mob/living/simple_mob/slime/xenobio/yellow/apply_melee_effects(atom/A) + ..() + if(isliving(A)) + var/mob/living/L = A + L.inflict_shock_damage(is_adult ? 10 : 5) + to_chat(src, span("span", "You shock \the [L].")) + to_chat(L, span("danger", "You've been shocked by \the [src]!")) + +/mob/living/simple_mob/slime/xenobio/yellow/handle_special() + if(stat == CONSCIOUS) + if(prob(25)) + power_charge = between(0, power_charge + 1, 10) + ..() + +/obj/item/projectile/beam/lightning/slime + power = 10 + fire_sound = 'sound/effects/lightningbolt.ogg' + + +/mob/living/simple_mob/slime/xenobio/dark_purple + desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." + color = "#660088" + slime_color = "dark purple" + coretype = /obj/item/slime_extract/dark_purple + reagent_injected = "phoron" + + description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \ + If hit with a burning attack, it will erupt in flames." + player_msg = "You inject phoron into enemies you attack.
                    \ + You will erupt into flames if harmed by fire!" + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/purple, + /mob/living/simple_mob/slime/xenobio/orange, + /mob/living/simple_mob/slime/xenobio/ruby, + /mob/living/simple_mob/slime/xenobio/ruby + ) + +/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite() + visible_message(span("critical", "\The [src] erupts in an inferno!")) + for(var/turf/simulated/target_turf in view(2, src)) + target_turf.assume_gas("phoron", 30, 1500+T0C) + spawn(0) + target_turf.hotspot_expose(1500+T0C, 400) + qdel(src) + +/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity) + log_and_message_admins("[src] ignited due to a chain reaction with an explosion.") + ignite() + +/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume) + log_and_message_admins("[src] ignited due to exposure to fire.") + ignite() + +/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. + log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") + ignite() + else + ..() + +/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user) + if(istype(W) && W.force && W.damtype == BURN) + log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].") + ignite() + else + ..() + + + +/mob/living/simple_mob/slime/xenobio/dark_blue + desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly." + color = "#2398FF" + glow_toggle = TRUE + slime_color = "dark blue" + coretype = /obj/item/slime_extract/dark_blue + melee_damage_lower = 5 + melee_damage_upper = 5 + cold_resist = 1 + + description_info = "This slime is immune to the cold, however water will still kill it. Its presense, as well as its attacks, will \ + also cause you additional harm from the cold. A winter coat or other cold-resistant clothing can protect from this." + player_msg = "You are immune to the cold, inflict additional cold damage on attack, and cause nearby entities to suffer from coldness." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/purple, + /mob/living/simple_mob/slime/xenobio/blue, + /mob/living/simple_mob/slime/xenobio/cerulean, + /mob/living/simple_mob/slime/xenobio/cerulean + ) + + minbodytemp = 0 + cold_damage_per_tick = 0 + +/mob/living/simple_mob/slime/xenobio/dark_blue/handle_special() + if(stat != DEAD) + cold_aura() + ..() + +/mob/living/simple_mob/slime/xenobio/dark_blue/proc/cold_aura() + for(var/mob/living/L in view(2, src)) + if(L == src) + continue + chill(L) + + var/turf/T = get_turf(src) + var/datum/gas_mixture/env = T.return_air() + if(env) + env.add_thermal_energy(-10 * 1000) + +/mob/living/simple_mob/slime/xenobio/dark_blue/apply_melee_effects(atom/A) + ..() + if(isliving(A)) + var/mob/living/L = A + chill(L) + to_chat(src, span("span", "You chill \the [L].")) + to_chat(L, span("danger", "You've been chilled by \the [src]!")) + + +/mob/living/simple_mob/slime/xenobio/dark_blue/proc/chill(mob/living/L) + L.inflict_cold_damage(is_adult ? 10 : 5) + if(L.get_cold_protection() < 1 && L.has_AI()) // Harmful auras will make the AI react to its bearer. + L.ai_holder.react_to_attack(src) + + +/mob/living/simple_mob/slime/xenobio/silver + desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it." + color = "#AAAAAA" + slime_color = "silver" + coretype = /obj/item/slime_extract/silver + shiny = TRUE + + description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works." + player_msg = "You automatically reflect lasers, beams, and tasers that hit you." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/metal, + /mob/living/simple_mob/slime/xenobio/blue, + /mob/living/simple_mob/slime/xenobio/amber, + /mob/living/simple_mob/slime/xenobio/amber + ) + +/mob/living/simple_mob/slime/xenobio/silver/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) + visible_message(span("danger", "\The [src] reflects \the [P]!")) + + // Find a turf near or on the original location to bounce to + var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = TRUE + return PROJECTILE_CONTINUE // complete projectile permutation + else + ..() + + +// Tier 3 + +/mob/living/simple_mob/slime/xenobio/bluespace + desc = "Trapping this slime in a cell is generally futile, as it can teleport at will." + color = null + slime_color = "bluespace" + icon_state_override = "bluespace" + coretype = /obj/item/slime_extract/bluespace + + description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds." + player_msg = "You can teleport at will to a specific tile by clicking on it at range. This has a five second cooldown." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/bluespace, + /mob/living/simple_mob/slime/xenobio/bluespace, + /mob/living/simple_mob/slime/xenobio/yellow, + /mob/living/simple_mob/slime/xenobio/yellow + ) + + special_attack_min_range = 3 + special_attack_max_range = 7 + special_attack_cooldown = 5 SECONDS + +/mob/living/simple_mob/slime/xenobio/bluespace/do_special_attack(atom/A) + // Teleport attack. + if(!A) + to_chat(src, span("warning", "There's nothing to teleport to.")) + return FALSE + + var/list/nearby_things = range(1, A) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + var/turf/T = get_turf(src) + + var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread + s1.set_up(5, 1, T) + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread + s2.set_up(5, 1, target_turf) + + + T.visible_message(span("notice", "\The [src] vanishes!")) + s1.start() + + forceMove(target_turf) + playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) + to_chat(src, span("notice", "You teleport to \the [target_turf].")) + + target_turf.visible_message(span("warning", "\The [src] appears!")) + s2.start() + + if(Adjacent(A)) + attack_target(A) + + +/mob/living/simple_mob/slime/xenobio/ruby + desc = "This slime has great physical strength." + color = "#FF3333" + slime_color = "ruby" + shiny = TRUE + glow_toggle = TRUE + coretype = /obj/item/slime_extract/ruby + + description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \ + Their glomp attacks also send the victim flying." + player_msg = "Your attacks knock back the target a fair distance.
                    \ + You also hit harder, take less damage, and stuns affect you for less time." + + melee_attack_delay = 1 SECOND + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/dark_purple, + /mob/living/simple_mob/slime/xenobio/dark_purple, + /mob/living/simple_mob/slime/xenobio/ruby, + /mob/living/simple_mob/slime/xenobio/ruby + ) + +/mob/living/simple_mob/slime/xenobio/ruby/Initialize() + add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole. + return ..() + +/mob/living/simple_mob/slime/xenobio/ruby/apply_melee_effects(atom/A) + ..() + + if(isliving(A) && a_intent == I_HURT) + var/mob/living/L = A + if(L.mob_size <= MOB_MEDIUM) + visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) + playsound(src, "punch", 50, 1) + L.Weaken(1) + var/throwdir = get_dir(src, L) + L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) + else + to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) + visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. + playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. + + +/mob/living/simple_mob/slime/xenobio/amber + desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \ + They would probably be very important to other slimes, if the other colors didn't try to kill them." + color = "#FFBB00" + slime_color = "amber" + shiny = TRUE + glow_toggle = TRUE + coretype = /obj/item/slime_extract/amber + + description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \ + slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes." + player_msg = "You passively provide nutrition to nearby entities." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/silver, + /mob/living/simple_mob/slime/xenobio/silver, + /mob/living/simple_mob/slime/xenobio/amber, + /mob/living/simple_mob/slime/xenobio/amber + ) + +/mob/living/simple_mob/slime/xenobio/amber/handle_special() + if(stat != DEAD) + feed_aura() + ..() + +/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura() + for(var/mob/living/L in view(1, src)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + if(L == src || istype(L, /mob/living/simple_mob/slime/xenobio/amber)) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers. + continue + if(istype(L, /mob/living/simple_mob/slime/xenobio)) + var/mob/living/simple_mob/slime/xenobio/X = L + X.adjust_nutrition(rand(15, 25), 0) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.isSynthetic()) + continue + H.nutrition = between(0, H.nutrition + rand(15, 25), 800) + +/mob/living/simple_mob/slime/xenobio/cerulean + desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none." + color = "#4F7EAA" + slime_color = "cerulean" + coretype = /obj/item/slime_extract/cerulean + + // Less than the specialized slimes, but higher than the rest. + maxHealth = 200 + maxHealth_adult = 250 + + melee_damage_lower = 10 + melee_damage_upper = 30 + + movement_cooldown = -1 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future. + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/dark_blue, + /mob/living/simple_mob/slime/xenobio/dark_blue, + /mob/living/simple_mob/slime/xenobio/cerulean, + /mob/living/simple_mob/slime/xenobio/cerulean + ) + +// Tier 4 + +/mob/living/simple_mob/slime/xenobio/red + desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here." + color = "#FF3333" + slime_color = "red" + coretype = /obj/item/slime_extract/red + movement_cooldown = -1 // See above. + untamable = TRUE // Will enrage if disciplined. + + description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/red, + /mob/living/simple_mob/slime/xenobio/oil, + /mob/living/simple_mob/slime/xenobio/oil, + /mob/living/simple_mob/slime/xenobio/orange + ) + + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime + + +/mob/living/simple_mob/slime/xenobio/green + desc = "This slime is radioactive." + color = "#14FF20" + slime_color = "green" + coretype = /obj/item/slime_extract/green + glow_toggle = TRUE + reagent_injected = "radium" + var/rads = 25 + + description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \ + A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive." + player_msg = "You passively irradiate your surroundings.
                    \ + You also inject radium on attack." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/purple, + /mob/living/simple_mob/slime/xenobio/green, + /mob/living/simple_mob/slime/xenobio/emerald, + /mob/living/simple_mob/slime/xenobio/emerald + ) + +/mob/living/simple_mob/slime/xenobio/green/handle_special() + if(stat != DEAD) + irradiate() + ..() + +/mob/living/simple_mob/slime/xenobio/green/proc/irradiate() + SSradiation.radiate(src, rads) + + + +/mob/living/simple_mob/slime/xenobio/pink + desc = "This slime has regenerative properties." + color = "#FF0080" + slime_color = "pink" + coretype = /obj/item/slime_extract/pink + glow_toggle = TRUE + + description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive." + player_msg = "You passively heal yourself and nearby allies." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/blue, + /mob/living/simple_mob/slime/xenobio/light_pink, + /mob/living/simple_mob/slime/xenobio/light_pink, + /mob/living/simple_mob/slime/xenobio/pink + ) + +/mob/living/simple_mob/slime/xenobio/pink/handle_special() + if(stat != DEAD) + heal_aura() + ..() + +/mob/living/simple_mob/slime/xenobio/pink/proc/heal_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/slime_heal, null, src) + +/datum/modifier/aura/slime_heal + name = "slime mending" + desc = "You feel somewhat gooey." + mob_overlay_state = "pink_sparkles" + stacks = MODIFIER_STACK_FORBID + aura_max_distance = 2 + + on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier." + on_expired_text = "The spores of goo have faded, although you feel much healthier than before." + +/datum/modifier/aura/slime_heal/tick() + if(holder.stat == DEAD) + expire() + + if(ishuman(holder)) // Robolimbs need this code sadly. + var/mob/living/carbon/human/H = holder + for(var/obj/item/organ/external/E in H.organs) + var/obj/item/organ/external/O = E + O.heal_damage(2, 2, 0, 1) + else + holder.adjustBruteLoss(-2) + holder.adjustFireLoss(-2) + + holder.adjustToxLoss(-2) + holder.adjustOxyLoss(-2) + holder.adjustCloneLoss(-1) + + +/mob/living/simple_mob/slime/xenobio/gold + desc = "This slime absorbs energy, and cannot be stunned by normal means." + color = "#EEAA00" + shiny = TRUE + slime_color = "gold" + coretype = /obj/item/slime_extract/gold + description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/metal, + /mob/living/simple_mob/slime/xenobio/gold, + /mob/living/simple_mob/slime/xenobio/sapphire, + /mob/living/simple_mob/slime/xenobio/sapphire + ) + +/mob/living/simple_mob/slime/xenobio/gold/slimebatoned(mob/living/user, amount) + adjust_discipline(round(amount/2)) + power_charge = between(0, power_charge + amount, 10) + +/mob/living/simple_mob/slime/xenobio/gold/get_description_interaction() // So it doesn't say to use a baton on them. + return list() + + +// Tier 5 + +/mob/living/simple_mob/slime/xenobio/oil + desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea." + color = "#333333" + slime_color = "oil" + shiny = TRUE + coretype = /obj/item/slime_extract/oil + + description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \ + an explosion, it will explode. Oil slimes will also suicide-bomb themselves when fighting something that is not a monkey or slime." + player_msg = "You will explode if struck by a burning attack, or if you hit an enemy with a melee attack that is not a monkey or another slime." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/oil, + /mob/living/simple_mob/slime/xenobio/oil, + /mob/living/simple_mob/slime/xenobio/red, + /mob/living/simple_mob/slime/xenobio/red + ) + +/mob/living/simple_mob/slime/xenobio/oil/proc/explode() + if(stat != DEAD) + explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted. + if(src) // Delete ourselves if the explosion didn't do it. + qdel(src) + +/mob/living/simple_mob/slime/xenobio/oil/apply_melee_effects(atom/A) + if(isliving(A)) + var/mob/living/L = A + if(ishuman(L)) + var/mob/living/carbon/human/H = A + if(istype(H.species, /datum/species/monkey)) + return ..()// Don't blow up when just eatting monkeys. + + else if(isslime(L)) + return ..() + + // Otherwise blow ourselves up. + say(pick("Sacrifice...!", "Sssss...", "Boom...!")) + set_AI_busy(TRUE) + sleep(2 SECONDS) + log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].") + explode() + + return ..() + +/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity) + log_and_message_admins("[src] exploded due to a chain reaction with another explosion.") + explode() + +/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume) + log_and_message_admins("[src] exploded due to exposure to fire.") + explode() + +/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone) + if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. + log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") + explode() + else + ..() + +/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/weapon/W, mob/living/user) + if(istype(W) && W.force && W.damtype == BURN) + log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].") + explode() + else + ..() + + +/mob/living/simple_mob/slime/xenobio/sapphire + desc = "This slime seems a bit brighter than the rest, both figuratively and literally." + color = "#2398FF" + slime_color = "sapphire" + shiny = TRUE + glow_toggle = TRUE + coretype = /obj/item/slime_extract/sapphire + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/sapphire + + description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \ + with one if hostile, and especially dangerous if they outnumber you." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/sapphire, + /mob/living/simple_mob/slime/xenobio/sapphire, + /mob/living/simple_mob/slime/xenobio/gold, + /mob/living/simple_mob/slime/xenobio/gold + ) + + +/mob/living/simple_mob/slime/xenobio/emerald + desc = "This slime is faster than usual, even more so than the red slimes." + color = "#22FF22" + shiny = TRUE + glow_toggle = TRUE + slime_color = "emerald" + coretype = /obj/item/slime_extract/emerald + + description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/green, + /mob/living/simple_mob/slime/xenobio/green, + /mob/living/simple_mob/slime/xenobio/emerald, + /mob/living/simple_mob/slime/xenobio/emerald + ) + +/mob/living/simple_mob/slime/xenobio/emerald/handle_special() + if(stat != DEAD) + zoom_aura() + ..() + +/mob/living/simple_mob/slime/xenobio/emerald/proc/zoom_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src) + + +/mob/living/simple_mob/slime/xenobio/light_pink + desc = "This slime seems a lot more peaceful than the others." + color = "#FF8888" + slime_color = "light pink" + coretype = /obj/item/slime_extract/light_pink + + description_info = "This slime is effectively always disciplined initially." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/pink, + /mob/living/simple_mob/slime/xenobio/pink, + /mob/living/simple_mob/slime/xenobio/light_pink, + /mob/living/simple_mob/slime/xenobio/light_pink + ) + + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/light_pink + +// Special +/mob/living/simple_mob/slime/xenobio/rainbow + desc = "This slime changes colors constantly." + color = null // Uses a special icon_state. + slime_color = "rainbow" + coretype = /obj/item/slime_extract/rainbow + icon_state_override = "rainbow" + unity = TRUE + + description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \ + other slimes being friendly to them, and therefore will never be harmed by another slime. \ + Attacking this slime will provoke the wrath of all slimes within range." + player_msg = "You are considered to be the same color as every slime, \ + meaning that you are considered an ally to all slimes." + + slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/rainbow, + /mob/living/simple_mob/slime/xenobio/rainbow, + /mob/living/simple_mob/slime/xenobio/rainbow, + /mob/living/simple_mob/slime/xenobio/rainbow + ) + +/mob/living/simple_mob/slime/xenobio/rainbow/Initialize() + unify() + return ..() + +// The RD's pet slime. +/mob/living/simple_mob/slime/xenobio/rainbow/kendrick + name = "Kendrick" + desc = "The Research Director's pet slime. It shifts colors constantly." + rainbow_core_candidate = FALSE + // Doing pacify() in initialize() won't actually pacify the AI due to the ai_holder not existing due to parent initialize() not being called yet. + // Instead lets just give them an ai_holder that does that for us. + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive + +/mob/living/simple_mob/slime/xenobio/rainbow/kendrick/Initialize() + pacify() // So the physical mob also gets made harmless. + return ..() + +//ChompAdd Begins +// A pacified pink slime for either Admin-spawning or putting in a casino reward or capture crystal. +/mob/living/simple_mob/slime/xenobio/pink/sana + name = "Sana" + desc = "A pink slime that seems to be oddly friendly, and doesn't seem interested in eating your face like the rest of them." + rainbow_core_candidate = FALSE + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive + +/mob/living/simple_mob/slime/xenobio/pink/sana/Initialize() + pacify() // So the physical mob also gets made harmless. + return ..() //ChompAdd End \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm index 712cf34d91..e2ca34ed66 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm @@ -1,312 +1,312 @@ -// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear. - -/mob/living/simple_mob/slime/xenobio - desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists." - layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. - ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes. - max_nutrition = 1000 - var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough. - var/maxHealth_adult = 200 - var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough. - var/mob/living/victim = null // the person the slime is currently feeding on - var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly. - var/mutation_chance = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes. - var/split_amount = 5 //Chompedit: increased from 4 to 5 to make xenobio faster and deadlier. Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations. - var/untamable = FALSE //Makes slime untamable via discipline. - var/untamable_inheirit = FALSE //Makes slime inheirit its untamability. - var/list/slime_mutation = list( - /mob/living/simple_mob/slime/xenobio/orange, - /mob/living/simple_mob/slime/xenobio/metal, - /mob/living/simple_mob/slime/xenobio/blue, - /mob/living/simple_mob/slime/xenobio/purple - ) - var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces - var/number = 0 // This is used to make the slime semi-unique for indentification. - var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce. - -/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor) - ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime)) - number = rand(1, 1000) - update_name() - - . = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end. - - if(my_predecessor) - inherit_information(my_predecessor) - - -/mob/living/simple_mob/slime/xenobio/Destroy() - if(victim) - stop_consumption() // Unbuckle us from our victim. - return ..() - -// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards. -/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor) - if(!predecessor) - return - - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder - ASSERT(istype(AI)) - ASSERT(istype(previous_AI)) - - // Now to transfer the information. - // Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done. - AI.discipline = max(previous_AI.discipline - 1, 0) - AI.obedience = max(previous_AI.obedience - 1, 0) - AI.resentment = max(previous_AI.resentment - 1, 0) - AI.rabid = previous_AI.rabid - -/mob/living/simple_mob/slime/xenobio/update_icon() - icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]" - icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead" - icon_rest = icon_dead - ..() // This will apply the correct icon_state and do the other overlay-related things. - - -/mob/living/simple_mob/slime/xenobio/handle_special() - if(stat != DEAD) - handle_nutrition() - - if(victim) - handle_consumption() - - handle_stuttering() // ?? - - ..() - -/mob/living/simple_mob/slime/xenobio/examine(mob/user) - . = ..() - if(hat) - . += "It is wearing \a [hat]." - - if(stat == DEAD) - . += "It appears to be dead." - else if(incapacitated(INCAPACITATION_DISABLED)) - . += "It appears to be incapacitated." - else if(harmless) - . += "It appears to have been pacified." - else - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - if(AI.rabid) - . += "It seems very, very angry and upset." - else if(AI.obedience >= 5) - . += "It looks rather obedient." - else if(AI.discipline) - . += "It has been subjugated by force, at least for now." - -/mob/living/simple_mob/slime/xenobio/proc/make_adult() - if(is_adult) - return - - is_adult = TRUE - melee_damage_lower = round(melee_damage_lower * 2) // 20 - melee_damage_upper = round(melee_damage_upper * 2) // 30 - maxHealth = maxHealth_adult - max_nutrition = 1200 - amount_grown = 0 - update_icon() - update_name() - -/mob/living/simple_mob/slime/xenobio/proc/make_baby() - if(!is_adult) - return - - is_adult = FALSE - melee_damage_lower = round(melee_damage_lower / 2) // 20 - melee_damage_upper = round(melee_damage_upper / 2) // 30 - maxHealth = initial(maxHealth) - health = clamp(health, 0, maxHealth) - max_nutrition = initial(max_nutrition) - nutrition = 400 - amount_grown = 0 - update_icon() - update_name() - -/mob/living/simple_mob/slime/xenobio/proc/update_name() - if(harmless) // Docile slimes are generally named, so we shouldn't mess with it. - return - name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])" - real_name = name - -/mob/living/simple_mob/slime/xenobio/update_mood() - var/old_mood = mood - if(incapacitated(INCAPACITATION_DISABLED)) - mood = "sad" - else if(harmless) - mood = ":33" - else if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - if(AI.rabid) - mood = "angry" - else if(AI.target) - mood = "mischevous" - else if(AI.discipline) - mood = "pout" - else - mood = ":3" - else - mood = ":3" - - if(old_mood != mood) - update_icon() - -/mob/living/simple_mob/slime/xenobio/proc/enrage() - if(harmless) - return - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - AI.enrage() - -/mob/living/simple_mob/slime/xenobio/proc/relax() - if(harmless) - return - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - AI.relax() - -/mob/living/simple_mob/slime/xenobio/proc/pacify() - harmless = TRUE - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - AI.pacify() - - faction = "neutral" - - // If for whatever reason the mob AI (or player) decides to try to attack something anyways. - melee_damage_upper = 0 - melee_damage_lower = 0 - - update_mood() - - -// These are verbs so that player slimes can evolve/split. -/mob/living/simple_mob/slime/xenobio/verb/evolve() - set category = "Slime" - set desc = "This will let you evolve from baby to adult slime." - - if(stat) - to_chat(src, span("warning", "I must be conscious to do this...")) - return - - if(harmless) - to_chat(src, span("warning", "I have been pacified. I cannot evolve...")) - return - - if(!is_adult) - if(amount_grown >= 10) - make_adult() - else - to_chat(src, span("warning", "I am not ready to evolve yet...")) - else - to_chat(src, span("warning", "I have already evolved...")) - - -/mob/living/simple_mob/slime/xenobio/verb/reproduce() - set category = "Slime" - set desc = "This will make you split into four new slimes." - - if(stat) - to_chat(src, span("warning", "I must be conscious to do this...")) - return - - if(harmless) - to_chat(src, span("warning", "I have been pacified. I cannot reproduce...")) - return - - if(is_adult) - if(amount_grown >= 10) - // Check if there's enough 'room' to split. - var/list/nearby_things = orange(1, src) - var/free_tiles = 0 - for(var/turf/T in nearby_things) - var/free = TRUE - if(T.density) // No walls. - continue - for(var/atom/movable/AM in T) - if(istype(AM, /mob/living/simple_mob/slime) || !(AM.CanPass(src, T))) - free = FALSE - break - for(var/atom/movable/AM in get_turf(src)) - if(!(AM.CanPass(src, T)) && !(AM == src)) - free = FALSE - break - - if(free) - free_tiles++ - - if(free_tiles < split_amount-1) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies. - to_chat(src, span("warning", "It is too cramped here to reproduce...")) - return - - var/list/babies = list() - for(var/i = 1 to split_amount) - babies.Add(make_new_slime(no_step = i)) - - var/mob/living/simple_mob/slime/new_slime = pick(babies) - new_slime.universal_speak = universal_speak - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - qdel(src) - else - to_chat(src, span("warning", "I am not ready to reproduce yet...")) - else - to_chat(src, span("warning", "I have not evolved enough to reproduce yet...")) - -// Used when reproducing or dying. -/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type, var/no_step) - var/t = src.type - if(desired_type) - t = desired_type - if(prob(mutation_chance / 10)) - t = /mob/living/simple_mob/slime/xenobio/rainbow - else if(prob(mutation_chance) && slime_mutation.len) - t = slime_mutation[rand(1, slime_mutation.len)] - var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src) - - // Handle 'inheriting' from parent slime. - baby.mutation_chance = mutation_chance - baby.power_charge = round(power_charge / 4) - - if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow)) - baby.unity = unity - if(untamable_inheirit) - baby.untamable = untamable - baby.untamable_inheirit = untamable_inheirit - baby.faction = faction - baby.friends = friends.Copy() - - if(no_step != 1) - step_away(baby, src) - return baby - -/mob/living/simple_mob/slime/xenobio/get_description_interaction() - var/list/results = list() - - if(!stat) - results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad." - - results += ..() - - return results - -/mob/living/simple_mob/slime/xenobio/get_description_info() - var/list/lines = list() - var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \ - They can be extremely dangerous if not handled properly." - lines.Add(intro_line) - lines.Add(null) // To pad the line breaks. - - var/list/rewards = list() - for(var/potential_color in slime_mutation) - var/mob/living/simple_mob/slime/S = potential_color - rewards.Add(initial(S.slime_color)) - var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough." - lines.Add(reward_line) - lines.Add(null) - - lines.Add(description_info) - return lines.Join("\n") +// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear. + +/mob/living/simple_mob/slime/xenobio + desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists." + layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something. + ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes. + max_nutrition = 1000 + var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough. + var/maxHealth_adult = 200 + var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough. + var/mob/living/victim = null // the person the slime is currently feeding on + var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly. + var/mutation_chance = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes. + var/split_amount = 5 //Chompedit: increased from 4 to 5 to make xenobio faster and deadlier. Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations. + var/untamable = FALSE //Makes slime untamable via discipline. + var/untamable_inheirit = FALSE //Makes slime inheirit its untamability. + var/list/slime_mutation = list( + /mob/living/simple_mob/slime/xenobio/orange, + /mob/living/simple_mob/slime/xenobio/metal, + /mob/living/simple_mob/slime/xenobio/blue, + /mob/living/simple_mob/slime/xenobio/purple + ) + var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces + var/number = 0 // This is used to make the slime semi-unique for indentification. + var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce. + +/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor) + ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime)) + number = rand(1, 1000) + update_name() + + . = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end. + + if(my_predecessor) + inherit_information(my_predecessor) + + +/mob/living/simple_mob/slime/xenobio/Destroy() + if(victim) + stop_consumption() // Unbuckle us from our victim. + return ..() + +// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards. +/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor) + if(!predecessor) + return + + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder + ASSERT(istype(AI)) + ASSERT(istype(previous_AI)) + + // Now to transfer the information. + // Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done. + AI.discipline = max(previous_AI.discipline - 1, 0) + AI.obedience = max(previous_AI.obedience - 1, 0) + AI.resentment = max(previous_AI.resentment - 1, 0) + AI.rabid = previous_AI.rabid + +/mob/living/simple_mob/slime/xenobio/update_icon() + icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]" + icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead" + icon_rest = icon_dead + ..() // This will apply the correct icon_state and do the other overlay-related things. + + +/mob/living/simple_mob/slime/xenobio/handle_special() + if(stat != DEAD) + handle_nutrition() + + if(victim) + handle_consumption() + + handle_stuttering() // ?? + + ..() + +/mob/living/simple_mob/slime/xenobio/examine(mob/user) + . = ..() + if(hat) + . += "It is wearing \a [hat]." + + if(stat == DEAD) + . += "It appears to be dead." + else if(incapacitated(INCAPACITATION_DISABLED)) + . += "It appears to be incapacitated." + else if(harmless) + . += "It appears to have been pacified." + else + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + if(AI.rabid) + . += "It seems very, very angry and upset." + else if(AI.obedience >= 5) + . += "It looks rather obedient." + else if(AI.discipline) + . += "It has been subjugated by force, at least for now." + +/mob/living/simple_mob/slime/xenobio/proc/make_adult() + if(is_adult) + return + + is_adult = TRUE + melee_damage_lower = round(melee_damage_lower * 2) // 20 + melee_damage_upper = round(melee_damage_upper * 2) // 30 + maxHealth = maxHealth_adult + max_nutrition = 1200 + amount_grown = 0 + update_icon() + update_name() + +/mob/living/simple_mob/slime/xenobio/proc/make_baby() + if(!is_adult) + return + + is_adult = FALSE + melee_damage_lower = round(melee_damage_lower / 2) // 20 + melee_damage_upper = round(melee_damage_upper / 2) // 30 + maxHealth = initial(maxHealth) + health = clamp(health, 0, maxHealth) + max_nutrition = initial(max_nutrition) + nutrition = 400 + amount_grown = 0 + update_icon() + update_name() + +/mob/living/simple_mob/slime/xenobio/proc/update_name() + if(harmless) // Docile slimes are generally named, so we shouldn't mess with it. + return + name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])" + real_name = name + +/mob/living/simple_mob/slime/xenobio/update_mood() + var/old_mood = mood + if(incapacitated(INCAPACITATION_DISABLED)) + mood = "sad" + else if(harmless) + mood = ":33" + else if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + if(AI.rabid) + mood = "angry" + else if(AI.target) + mood = "mischevous" + else if(AI.discipline) + mood = "pout" + else + mood = ":3" + else + mood = ":3" + + if(old_mood != mood) + update_icon() + +/mob/living/simple_mob/slime/xenobio/proc/enrage() + if(harmless) + return + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + AI.enrage() + +/mob/living/simple_mob/slime/xenobio/proc/relax() + if(harmless) + return + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + AI.relax() + +/mob/living/simple_mob/slime/xenobio/proc/pacify() + harmless = TRUE + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + AI.pacify() + + faction = "neutral" + + // If for whatever reason the mob AI (or player) decides to try to attack something anyways. + melee_damage_upper = 0 + melee_damage_lower = 0 + + update_mood() + + +// These are verbs so that player slimes can evolve/split. +/mob/living/simple_mob/slime/xenobio/verb/evolve() + set category = "Slime" + set desc = "This will let you evolve from baby to adult slime." + + if(stat) + to_chat(src, span("warning", "I must be conscious to do this...")) + return + + if(harmless) + to_chat(src, span("warning", "I have been pacified. I cannot evolve...")) + return + + if(!is_adult) + if(amount_grown >= 10) + make_adult() + else + to_chat(src, span("warning", "I am not ready to evolve yet...")) + else + to_chat(src, span("warning", "I have already evolved...")) + + +/mob/living/simple_mob/slime/xenobio/verb/reproduce() + set category = "Slime" + set desc = "This will make you split into four new slimes." + + if(stat) + to_chat(src, span("warning", "I must be conscious to do this...")) + return + + if(harmless) + to_chat(src, span("warning", "I have been pacified. I cannot reproduce...")) + return + + if(is_adult) + if(amount_grown >= 10) + // Check if there's enough 'room' to split. + var/list/nearby_things = orange(1, src) + var/free_tiles = 0 + for(var/turf/T in nearby_things) + var/free = TRUE + if(T.density) // No walls. + continue + for(var/atom/movable/AM in T) + if(istype(AM, /mob/living/simple_mob/slime) || !(AM.CanPass(src, T))) + free = FALSE + break + for(var/atom/movable/AM in get_turf(src)) + if(!(AM.CanPass(src, T)) && !(AM == src)) + free = FALSE + break + + if(free) + free_tiles++ + + if(free_tiles < split_amount-1) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies. + to_chat(src, span("warning", "It is too cramped here to reproduce...")) + return + + var/list/babies = list() + for(var/i = 1 to split_amount) + babies.Add(make_new_slime(no_step = i)) + + var/mob/living/simple_mob/slime/new_slime = pick(babies) + new_slime.universal_speak = universal_speak + if(src.mind) + src.mind.transfer_to(new_slime) + else + new_slime.key = src.key + qdel(src) + else + to_chat(src, span("warning", "I am not ready to reproduce yet...")) + else + to_chat(src, span("warning", "I have not evolved enough to reproduce yet...")) + +// Used when reproducing or dying. +/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type, var/no_step) + var/t = src.type + if(desired_type) + t = desired_type + if(prob(mutation_chance / 10)) + t = /mob/living/simple_mob/slime/xenobio/rainbow + else if(prob(mutation_chance) && slime_mutation.len) + t = slime_mutation[rand(1, slime_mutation.len)] + var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src) + + // Handle 'inheriting' from parent slime. + baby.mutation_chance = mutation_chance + baby.power_charge = round(power_charge / 4) + + if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow)) + baby.unity = unity + if(untamable_inheirit) + baby.untamable = untamable + baby.untamable_inheirit = untamable_inheirit + baby.faction = faction + baby.friends = friends.Copy() + + if(no_step != 1) + step_away(baby, src) + return baby + +/mob/living/simple_mob/slime/xenobio/get_description_interaction() + var/list/results = list() + + if(!stat) + results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad." + + results += ..() + + return results + +/mob/living/simple_mob/slime/xenobio/get_description_info() + var/list/lines = list() + var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \ + They can be extremely dangerous if not handled properly." + lines.Add(intro_line) + lines.Add(null) // To pad the line breaks. + + var/list/rewards = list() + for(var/potential_color in slime_mutation) + var/mob/living/simple_mob/slime/S = potential_color + rewards.Add(initial(S.slime_color)) + var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough." + lines.Add(reward_line) + lines.Add(null) + + lines.Add(description_info) + return lines.Join("\n") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/goia_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/goia_ch.dm index f6db5841c4..ae9a416c42 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/goia_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/goia_ch.dm @@ -1,85 +1,85 @@ -/mob/living/simple_mob/vore/otie/zorgoia //Yes im basing the goias on oties for now, sue me....please dont sue me - Jack - name = "zorgoia" - desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky!" - tt_desc = "Zorgoyuh slinkus" - icon = 'modular_chomp/icons/mob/vore64x32_ch.dmi' - icon_state = "zorgoia" - icon_living = "zorgoia" - icon_dead = "zorgoia-dead" - faction = "zorgoia" - maxHealth = 100 - health = 100 - melee_damage_lower = 5 - melee_damage_upper = 15 //Don't break my bones bro - see_in_dark = 5 - attacktext = list("mauled") - friendly = list("nuzzles", "noses softly at", "noseboops", "headbumps against", "nibbles affectionately on") - meat_amount = 5 - - color = null //color is selected when spawned - - max_buckled_mobs = 0 //No Yeehaw - can_buckle = FALSE - buckle_movable = FALSE - - say_list_type = /datum/say_list/zorgoia - vore_active = 1 - vore_capacity = 3 //These bois can nom a bunch! - vore_pounce_chance = 35 //More likely to nom - vore_icons = SA_ICON_LIVING | SA_ICON_REST - - // CHOMPAdd: Don't think its checked, but just in case - species_sounds = "Canine" - pain_emote_1p = list("yelp", "whine", "bark", "growl") - pain_emote_3p = list("yelps", "whines", "barks", "growls") - -/mob/living/simple_mob/vore/otie/zorgoia/New() - ..() - switch(rand(9)) - if(0) - color = "#1a00ff" - if(1) - color = "#6c5bff" - if(2) - color = "#ff00fe" - if(3) - color = "#ff0000" - if(4) - color = "#00d3ff" - if(5) - color = "#00ff7c" - if(6) - color = "#00ff35" - if(7) - color = "#e1ff00" - if(8) - color = "#ff9f00" - if(9) - color = "#393939" - -/mob/living/simple_mob/vore/otie/zorgoia/feral //gets the pet2tame feature. starts out hostile tho so get gamblin' - name = "agressive zorgoia" - desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky! This one seems quite hungry and in a bad mood!" - faction = "virgo3b" - tame_chance = 10 // Only a 1 in 10 chance of success. It's feral. What do you expect? - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - -/mob/living/simple_mob/vore/otie/zorgoia/friendly //gets the pet2tame feature and doesn't kill you right away - name = "friendly zorgoia" - desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky! This one seems harmless and friendly!" - faction = "neutral" - tamed = 1 - -/datum/say_list/zorgoia - speak = list("Prurr.", "Murrr.") - emote_hear = list("chuffs", "murrs", "churls", "hisses", "lets out a cougar like scream", "yawns") - emote_see = list("licks their maw", "stretches", "yawns", "noodles") - say_maybe_target = list("weh?") - say_got_target = list("Rurrr!", "ROAR!", "RAH!") +/mob/living/simple_mob/vore/otie/zorgoia //Yes im basing the goias on oties for now, sue me....please dont sue me - Jack + name = "zorgoia" + desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky!" + tt_desc = "Zorgoyuh slinkus" + icon = 'modular_chomp/icons/mob/vore64x32_ch.dmi' + icon_state = "zorgoia" + icon_living = "zorgoia" + icon_dead = "zorgoia-dead" + faction = "zorgoia" + maxHealth = 100 + health = 100 + melee_damage_lower = 5 + melee_damage_upper = 15 //Don't break my bones bro + see_in_dark = 5 + attacktext = list("mauled") + friendly = list("nuzzles", "noses softly at", "noseboops", "headbumps against", "nibbles affectionately on") + meat_amount = 5 + + color = null //color is selected when spawned + + max_buckled_mobs = 0 //No Yeehaw + can_buckle = FALSE + buckle_movable = FALSE + + say_list_type = /datum/say_list/zorgoia + vore_active = 1 + vore_capacity = 3 //These bois can nom a bunch! + vore_pounce_chance = 35 //More likely to nom + vore_icons = SA_ICON_LIVING | SA_ICON_REST + + // CHOMPAdd: Don't think its checked, but just in case + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") + +/mob/living/simple_mob/vore/otie/zorgoia/New() + ..() + switch(rand(9)) + if(0) + color = "#1a00ff" + if(1) + color = "#6c5bff" + if(2) + color = "#ff00fe" + if(3) + color = "#ff0000" + if(4) + color = "#00d3ff" + if(5) + color = "#00ff7c" + if(6) + color = "#00ff35" + if(7) + color = "#e1ff00" + if(8) + color = "#ff9f00" + if(9) + color = "#393939" + +/mob/living/simple_mob/vore/otie/zorgoia/feral //gets the pet2tame feature. starts out hostile tho so get gamblin' + name = "agressive zorgoia" + desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky! This one seems quite hungry and in a bad mood!" + faction = "virgo3b" + tame_chance = 10 // Only a 1 in 10 chance of success. It's feral. What do you expect? + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + +/mob/living/simple_mob/vore/otie/zorgoia/friendly //gets the pet2tame feature and doesn't kill you right away + name = "friendly zorgoia" + desc = "It's a a reptilian mammal hybrid, known for its voracious nature and love for fruits. By more popular terms its refered to as the furry slinky! This one seems harmless and friendly!" + faction = "neutral" + tamed = 1 + +/datum/say_list/zorgoia + speak = list("Prurr.", "Murrr.") + emote_hear = list("chuffs", "murrs", "churls", "hisses", "lets out a cougar like scream", "yawns") + emote_see = list("licks their maw", "stretches", "yawns", "noodles") + say_maybe_target = list("weh?") + say_got_target = list("Rurrr!", "ROAR!", "RAH!") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm index 6becc54b61..97665067b4 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm @@ -1,168 +1,168 @@ -/mob/living/simple_mob/vore/greatwolf - name = "great white wolf" - desc = "A massive white wolf, with piercing green eyes. Much like a dire wolf, but bigger. Passive, until you give it a reason to not be." - catalogue_data = list(/datum/category_item/catalogue/fauna/greatwolf) - tt_desc = "Canis lupus greatus" - icon = 'icons/mob/vore128x64_ch.dmi' - icon_dead = "whitewolf-dead" - icon_living = "whitewolf" - icon_state = "whitewolf" - icon_rest = "whitewolf-rest" - faction = "sif" - has_eye_glow = TRUE - meat_amount = 40 //Big dog, lots of meat - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - old_x = -48 - old_y = 0 - melee_damage_lower = 20 - melee_damage_upper = 15 - friendly = list("nudges", "sniffs on", "rumbles softly at", "slobberlicks") - default_pixel_x = -48 - pixel_x = -48 - pixel_y = 0 - response_help = "pets" - response_disarm = "shoves" - response_harm = "smacks" - movement_cooldown = 2 - harm_intent_damage = 10 - melee_damage_lower = 10 - melee_damage_upper = 20 - maxHealth = 500 - attacktext = list("chomped") - see_in_dark = 8 - minbodytemp = 0 - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - max_buckled_mobs = 1 - mount_offset_y = 32 - mount_offset_x = -16 - can_buckle = TRUE - buckle_movable = TRUE - buckle_lying = FALSE - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/vore/greatwolf - - vore_bump_chance = 25 - vore_digest_chance = 5 - vore_escape_chance = 5 - vore_pounce_chance = 25 - vore_active = 1 - vore_icons = 2 - vore_icons = SA_ICON_LIVING | SA_ICON_REST - vore_capacity = 2 - swallowTime = 50 - vore_ignores_undigestable = TRUE - vore_default_mode = DM_HEAL - vore_pounce_maxhealth = 125 - vore_bump_emote = "tries to snap up" - -/mob/living/simple_mob/vore/greatwolf/black - name = "great black wolf" - desc = "A massive black wolf with a sandy colored underside, and intimidating amber eyes. Much like a dire wolf, but bigger. Passive, until you give it a reason to not be." - icon_dead = "blackwolf-dead" - icon_living = "blackwolf" - icon_state = "blackwolf" - icon_rest = "blackwolf-rest" - -/mob/living/simple_mob/vore/greatwolf/grey - name = "great grey wolf" - desc = "Shouldn't he have a sword or something?" - icon_dead = "sifwolf-dead" - icon_living = "sifwolf" - icon_state = "sifwolf" - icon_rest = "blackwolf-rest" - maxHealth = 900 //boss, with air quotes - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 25 - -/datum/category_item/catalogue/fauna/greatwolf - name = "Sivian Fauna - Great Wolf" - desc = "Classification: Canis lupus greatus\ -

                    \ - Canis Lupus Greatus, or Great Wolf, is a very large predator not beleived to be native to Sif (because it's a wolf, duh), but it has been never been found anywhere else. Despite their size, they are gentle, unless disturbed.\ - The majority of a great white wolf's long life is spent much the same as ordinary wolves. However, great wolves usually do not trouble themselves with small prey like humans, \ - usually preferring instead to hunt Saviks and Kururaks, and sometimes, leopardmanders or invasive red dragons. \ - Though usually docile towards humans and other large sapients, neesless to say, these wolves posesses great strength and a lethal bite. \ - a provoked great wolf can be a danger to even the most hardy of explorers due to its speed, crushing bite, and sometimes, it's appetite. \ - The great wolves have been hunted to near extinction by poachers due to its extremely valuable hide. They are very rare, as one would expect, and generally cautious around people." - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/vore/greatwolf/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1.5 - -/mob/living/simple_mob/vore/greatwolf/MouseDrop_T(mob/living/M, mob/living/user) - return - - -/mob/living/simple_mob/vore/greatwolf/attackby(var/obj/item/O, var/mob/user) // Trade food for people! - if(istype(O, /obj/item/weapon/reagent_containers/food)) - qdel(O) - playsound(src,'sound/vore/gulp.ogg', rand(10,50), 1) - if(!has_AI())//No autobarf on player control. - return - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut) && istype(src, /mob/living/simple_mob/vore/greatwolf/black)) - to_chat(user,"The huge wolf begrudgingly accepts your offer in exchange for it's catch.") - release_vore_contents() - else if(prob(2)) //Small chance to get prey out from white doggos - to_chat(user,"The huge wolf accepts your offer for their catch.") - release_vore_contents() - return - . = ..() - -/mob/living/simple_mob/vore/greatwolf/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The moment the wolf gets its jaws around you, it scoops you right up off of the ground, and greedily scarfs you down with a few swift gulps. Your small frame alone is hardly enough to make him look somewhat plump as you slop wetly into that dark, hot chamber, although the dense squish is rather comfortable. The thick, humid air is tinged with the smell of digested meat, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder." - B.vore_sound = "Tauric Swallow" - B.release_sound = "Pred Escape" - B.mode_flags = list(DM_FLAG_NUMBING, DM_FLAG_THICKBELLY, DM_FLAG_AFFECTWORN) - B.fancy_vore = 1 - B.vore_verb = "slurp" - B.contamination_color = "grey" - B.contamination_flavor = "Wet" - - B.emote_lists[DM_HOLD] = list( - "The wolf's idle wandering helps its stomach gently churn around you, slimily squelching against your figure.", - "The lupine predator takes a moment to intentionally clench its gut around you, encapsulating you in a strange, fleshy hug.", - "Some hot, viscous slime oozes down over your form, helping slicken you up during your stay.", - "During a moment of relative silence, you can hear the beast's soft, relaxed breathing as it casually goes about its day.", - "The thick, humid atmosphere within the wolf's hanging belly works in tandem with its steady heartbeat to soothe you.", - "Your surroundings sway from side to side as the wolf wanders about, looking for its next treat.") - - B.emote_lists[DM_DIGEST] = list( - "The wolf huffs in annoyance before clenching those soft wrinkled walls tight against your form, lathering you in digestive enzymes!", - "As the beast wanders about, you're forced to slip and slide around amidst a pool of thick digestive goop!", - "You can barely hear the wolf let out a pleased growl as its stomach eagerly gurgles around its newfound meal!", - "As the thinning air begins to make you feel dizzy, menacing bworps and grumbles fill that dark, constantly shifting organ!", - "The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!", - "The wolf happily wanders around while digesting its meal, slow calculated motions suggesting the beast is still on the hunt.") - - B.struggle_messages_outside = list( - "%pred's %belly wobbles ever so slightly with a squirming meal.", - "%pred's %belly jostles subtly with movement.", - "%pred's %belly briefly swells downward as someone pushes from inside.", - "%pred's %belly sloshes and churns noisily with a trapped victim.", - "%pred's %belly swells in a few places as someone pushes from inside.", - "%pred's %belly sloshes around.", - "%pred's %belly sloshes and sways softly.", - "%pred's %belly lets out a wet squelch as a few rounded shapes appear on its surface for a moment.") - - B.struggle_messages_inside = list( - "Your squirming seems to please the canine, though it's hard to tell wether or not it's helping get you out or not.", - "Your struggles only cause %pred's %belly to groan and gurgle softly around you.", - "Your movement only causes %pred's %belly to clench down upon you, smothering you briefly in thick gutflesh.", - "Your motion causes %pred's %belly to rumble irritably as you sink hands into the thick flesh.", - "You fidget around awkwardly inside of %pred's %belly.", - "You shove against the walls of %pred's %belly, making it briefly swell outward.", - "You jostle %pred's %belly with movement, earning yourself another tight smothering squeeze in the process.", - "You squirm inside of %pred's %belly, making it sway from side to side.") +/mob/living/simple_mob/vore/greatwolf + name = "great white wolf" + desc = "A massive white wolf, with piercing green eyes. Much like a dire wolf, but bigger. Passive, until you give it a reason to not be." + catalogue_data = list(/datum/category_item/catalogue/fauna/greatwolf) + tt_desc = "Canis lupus greatus" + icon = 'icons/mob/vore128x64_ch.dmi' + icon_dead = "whitewolf-dead" + icon_living = "whitewolf" + icon_state = "whitewolf" + icon_rest = "whitewolf-rest" + faction = "sif" + has_eye_glow = TRUE + meat_amount = 40 //Big dog, lots of meat + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + old_x = -48 + old_y = 0 + melee_damage_lower = 20 + melee_damage_upper = 15 + friendly = list("nudges", "sniffs on", "rumbles softly at", "slobberlicks") + default_pixel_x = -48 + pixel_x = -48 + pixel_y = 0 + response_help = "pets" + response_disarm = "shoves" + response_harm = "smacks" + movement_cooldown = 2 + harm_intent_damage = 10 + melee_damage_lower = 10 + melee_damage_upper = 20 + maxHealth = 500 + attacktext = list("chomped") + see_in_dark = 8 + minbodytemp = 0 + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + max_buckled_mobs = 1 + mount_offset_y = 32 + mount_offset_x = -16 + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/vore/greatwolf + + vore_bump_chance = 25 + vore_digest_chance = 5 + vore_escape_chance = 5 + vore_pounce_chance = 25 + vore_active = 1 + vore_icons = 2 + vore_icons = SA_ICON_LIVING | SA_ICON_REST + vore_capacity = 2 + swallowTime = 50 + vore_ignores_undigestable = TRUE + vore_default_mode = DM_HEAL + vore_pounce_maxhealth = 125 + vore_bump_emote = "tries to snap up" + +/mob/living/simple_mob/vore/greatwolf/black + name = "great black wolf" + desc = "A massive black wolf with a sandy colored underside, and intimidating amber eyes. Much like a dire wolf, but bigger. Passive, until you give it a reason to not be." + icon_dead = "blackwolf-dead" + icon_living = "blackwolf" + icon_state = "blackwolf" + icon_rest = "blackwolf-rest" + +/mob/living/simple_mob/vore/greatwolf/grey + name = "great grey wolf" + desc = "Shouldn't he have a sword or something?" + icon_dead = "sifwolf-dead" + icon_living = "sifwolf" + icon_state = "sifwolf" + icon_rest = "blackwolf-rest" + maxHealth = 900 //boss, with air quotes + harm_intent_damage = 10 + melee_damage_lower = 15 + melee_damage_upper = 25 + +/datum/category_item/catalogue/fauna/greatwolf + name = "Sivian Fauna - Great Wolf" + desc = "Classification: Canis lupus greatus\ +

                    \ + Canis Lupus Greatus, or Great Wolf, is a very large predator not beleived to be native to Sif (because it's a wolf, duh), but it has been never been found anywhere else. Despite their size, they are gentle, unless disturbed.\ + The majority of a great white wolf's long life is spent much the same as ordinary wolves. However, great wolves usually do not trouble themselves with small prey like humans, \ + usually preferring instead to hunt Saviks and Kururaks, and sometimes, leopardmanders or invasive red dragons. \ + Though usually docile towards humans and other large sapients, neesless to say, these wolves posesses great strength and a lethal bite. \ + a provoked great wolf can be a danger to even the most hardy of explorers due to its speed, crushing bite, and sometimes, it's appetite. \ + The great wolves have been hunted to near extinction by poachers due to its extremely valuable hide. They are very rare, as one would expect, and generally cautious around people." + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/vore/greatwolf/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1.5 + +/mob/living/simple_mob/vore/greatwolf/MouseDrop_T(mob/living/M, mob/living/user) + return + + +/mob/living/simple_mob/vore/greatwolf/attackby(var/obj/item/O, var/mob/user) // Trade food for people! + if(istype(O, /obj/item/weapon/reagent_containers/food)) + qdel(O) + playsound(src,'sound/vore/gulp.ogg', rand(10,50), 1) + if(!has_AI())//No autobarf on player control. + return + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut) && istype(src, /mob/living/simple_mob/vore/greatwolf/black)) + to_chat(user,"The huge wolf begrudgingly accepts your offer in exchange for it's catch.") + release_vore_contents() + else if(prob(2)) //Small chance to get prey out from white doggos + to_chat(user,"The huge wolf accepts your offer for their catch.") + release_vore_contents() + return + . = ..() + +/mob/living/simple_mob/vore/greatwolf/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The moment the wolf gets its jaws around you, it scoops you right up off of the ground, and greedily scarfs you down with a few swift gulps. Your small frame alone is hardly enough to make him look somewhat plump as you slop wetly into that dark, hot chamber, although the dense squish is rather comfortable. The thick, humid air is tinged with the smell of digested meat, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder." + B.vore_sound = "Tauric Swallow" + B.release_sound = "Pred Escape" + B.mode_flags = list(DM_FLAG_NUMBING, DM_FLAG_THICKBELLY, DM_FLAG_AFFECTWORN) + B.fancy_vore = 1 + B.vore_verb = "slurp" + B.contamination_color = "grey" + B.contamination_flavor = "Wet" + + B.emote_lists[DM_HOLD] = list( + "The wolf's idle wandering helps its stomach gently churn around you, slimily squelching against your figure.", + "The lupine predator takes a moment to intentionally clench its gut around you, encapsulating you in a strange, fleshy hug.", + "Some hot, viscous slime oozes down over your form, helping slicken you up during your stay.", + "During a moment of relative silence, you can hear the beast's soft, relaxed breathing as it casually goes about its day.", + "The thick, humid atmosphere within the wolf's hanging belly works in tandem with its steady heartbeat to soothe you.", + "Your surroundings sway from side to side as the wolf wanders about, looking for its next treat.") + + B.emote_lists[DM_DIGEST] = list( + "The wolf huffs in annoyance before clenching those soft wrinkled walls tight against your form, lathering you in digestive enzymes!", + "As the beast wanders about, you're forced to slip and slide around amidst a pool of thick digestive goop!", + "You can barely hear the wolf let out a pleased growl as its stomach eagerly gurgles around its newfound meal!", + "As the thinning air begins to make you feel dizzy, menacing bworps and grumbles fill that dark, constantly shifting organ!", + "The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!", + "The wolf happily wanders around while digesting its meal, slow calculated motions suggesting the beast is still on the hunt.") + + B.struggle_messages_outside = list( + "%pred's %belly wobbles ever so slightly with a squirming meal.", + "%pred's %belly jostles subtly with movement.", + "%pred's %belly briefly swells downward as someone pushes from inside.", + "%pred's %belly sloshes and churns noisily with a trapped victim.", + "%pred's %belly swells in a few places as someone pushes from inside.", + "%pred's %belly sloshes around.", + "%pred's %belly sloshes and sways softly.", + "%pred's %belly lets out a wet squelch as a few rounded shapes appear on its surface for a moment.") + + B.struggle_messages_inside = list( + "Your squirming seems to please the canine, though it's hard to tell wether or not it's helping get you out or not.", + "Your struggles only cause %pred's %belly to groan and gurgle softly around you.", + "Your movement only causes %pred's %belly to clench down upon you, smothering you briefly in thick gutflesh.", + "Your motion causes %pred's %belly to rumble irritably as you sink hands into the thick flesh.", + "You fidget around awkwardly inside of %pred's %belly.", + "You shove against the walls of %pred's %belly, making it briefly swell outward.", + "You jostle %pred's %belly with movement, earning yourself another tight smothering squeeze in the process.", + "You squirm inside of %pred's %belly, making it sway from side to side.") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm index 7fb50c4736..a1d29fe6a1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm @@ -1,44 +1,44 @@ -/mob/living/simple_mob/vore/aggressive/lizardman - name = "lizardman" - desc = "That is one buff, angry lizard." - tt_desc = "E Anolis cuvieri muscular" - - icon = 'modular_chomp/icons/mob/vore32x64_ch.dmi' - icon_state = "lizardman" - icon_living = "lizardman" - icon_dead = "lizardman-dead" - faction = "lizard" - - - maxHealth = 50 - health = 50 - - melee_damage_lower = 5 - melee_damage_upper = 15 - grab_resist = 100 - see_in_dark = 8 - - response_help = "pets" - response_disarm = "bops" - response_harm = "hits" - attacktext = list("ravaged") - friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on") - - - vore_active = TRUE - vore_capacity = 1 - vore_pounce_chance = 20 - vore_icons = SA_ICON_LIVING - - say_list_type = /datum/say_list/lizardman - ai_holder_type = /datum/ai_holder/simple_mob/melee - - can_be_drop_prey = FALSE //CHOMP Add - - -/datum/say_list/lizardman - speak = list("Gwar!","Rawr!","Hiss.") - emote_hear = list("hisses", "yawns", "growls") - emote_see = list("licks their maw", "stretches", "yawns", "noodles") - say_maybe_target = list("Rawr?") +/mob/living/simple_mob/vore/aggressive/lizardman + name = "lizardman" + desc = "That is one buff, angry lizard." + tt_desc = "E Anolis cuvieri muscular" + + icon = 'modular_chomp/icons/mob/vore32x64_ch.dmi' + icon_state = "lizardman" + icon_living = "lizardman" + icon_dead = "lizardman-dead" + faction = "lizard" + + + maxHealth = 50 + health = 50 + + melee_damage_lower = 5 + melee_damage_upper = 15 + grab_resist = 100 + see_in_dark = 8 + + response_help = "pets" + response_disarm = "bops" + response_harm = "hits" + attacktext = list("ravaged") + friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on") + + + vore_active = TRUE + vore_capacity = 1 + vore_pounce_chance = 20 + vore_icons = SA_ICON_LIVING + + say_list_type = /datum/say_list/lizardman + ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add + + +/datum/say_list/lizardman + speak = list("Gwar!","Rawr!","Hiss.") + emote_hear = list("hisses", "yawns", "growls") + emote_see = list("licks their maw", "stretches", "yawns", "noodles") + say_maybe_target = list("Rawr?") say_got_target = list("GWAR!!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm index 3b030c4d3c..6b3c0c8ab8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm @@ -1,16 +1,16 @@ -/mob/living/simple_mob/vore/aggressive/rat/event - maxHealth = 50 - health = 50 - vore_pounce_chance = 10 - - can_be_drop_prey = FALSE - -/mob/living/simple_mob/vore/aggressive/rat/labrat - name = "giant lab rat" - desc = "In what passes for a hierarchy among lab rats, this one is a boss." - icon_state = "labrat" - icon_living = "labrat" - icon_dead = "labrat-dead" - icon_rest = "labrat_rest" - faction = "neutral" +/mob/living/simple_mob/vore/aggressive/rat/event + maxHealth = 50 + health = 50 + vore_pounce_chance = 10 + + can_be_drop_prey = FALSE + +/mob/living/simple_mob/vore/aggressive/rat/labrat + name = "giant lab rat" + desc = "In what passes for a hierarchy among lab rats, this one is a boss." + icon_state = "labrat" + icon_living = "labrat" + icon_dead = "labrat-dead" + icon_rest = "labrat_rest" + faction = "neutral" icon = 'modular_chomp/icons/mob/vore64x32_ch.dmi' \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_abilities.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_abilities.dm index f1bdbad81e..acd73885d2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_abilities.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_abilities.dm @@ -1,452 +1,452 @@ -/mob/living/simple_mob/shadekin/Initialize() - var/list/ability_types = subtypesof(/obj/effect/shadekin_ability) - if(name == "Rakshasa") - ability_types += subtypesof(/obj/effect/rakshasa_ability) - shadekin_abilities = list() - for(var/type in ability_types) - shadekin_abilities += new type(src) - - update_icon() - - return ..() - - -/obj/effect/rakshasa_ability - name = "" - desc = "" - icon = 'icons/mob/screen_spells.dmi' - var/ability_name = "FIX ME" - var/cost = 50 - var/mob/living/simple_mob/shadekin/my_kin - var/shift_mode = NOT_WHILE_SHIFTED - var/ab_sound - -/obj/effect/rakshasa_ability/New(var/new_kin) - ..() - my_kin = new_kin - loc = null - -/obj/effect/rakshasa_ability/Destroy() - my_kin = null - return ..() - -/obj/effect/rakshasa_ability/proc/atom_button_text() - var/shift_denial - - if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED)) - shift_denial = "Physical Only" - else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED)) - shift_denial = "Shifted Only" - - if(shift_denial) - name = shift_denial - else - name = my_kin.energy >= cost ? "Activate" : "No Energy" - return src - -/obj/effect/rakshasa_ability/Click(var/location, var/control, var/params) - if(my_kin.stat) return - - var/list/clickprops = params2list(params) - var/opts = clickprops["shift"] - - if(opts) - to_chat(my_kin,"[name] (Cost: [cost]%) - [desc]") - else - do_ability(my_kin) - -/obj/effect/rakshasa_ability/proc/do_ability() - if(my_kin.stat) - to_chat(my_kin,"Can't use that ability in your state!") - return FALSE - if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED)) - to_chat(my_kin,"Can't use that ability while phase shifted!") - return FALSE - else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED)) - to_chat(my_kin,"Can only use that ability while phase shifted!") - return FALSE - else if(my_kin.energy < cost) - to_chat(my_kin,"Not enough energy for that ability!") - return FALSE - - my_kin.energy -= cost - if(ab_sound) - playsound(src,ab_sound,75,1) - - return TRUE - - - - -/obj/effect/rakshasa_ability/phase_shift2 - ability_name = "Goo Shift" - desc = "Shift yourself with goopy effects." - icon_state = "tech_passwall" - cost = 100 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/phase_shift2/do_ability() - if(!..()) - return - new /obj/effect/decal/cleanable/blood/oil(loc, src) - playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) - my_kin.rakshasa_shift() - if(my_kin.ability_flags & AB_PHASE_SHIFTED) - cost = 0 //Shifting back is free (but harmful in light) - new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) - else - cost = initial(cost) - new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) - playsound(my_kin.loc, 'sound/rakshasa/Emerge0.ogg', 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/phase_shift3 - ability_name = "Goo Shift No Emerge" - desc = "Shift yourself with goopy effects." - icon_state = "tech_passwall" - cost = 100 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/phase_shift3/do_ability() - if(!..()) - return - new /obj/effect/decal/cleanable/blood/oil(loc, src) - playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) - my_kin.rakshasa_shift() - if(my_kin.ability_flags & AB_PHASE_SHIFTED) - cost = 0 //Shifting back is free (but harmful in light) - new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) - else - cost = initial(cost) - new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/phase_shift4 - ability_name = "Stealth Shift" - desc = "Stealthy. No light effects, no goo." - icon_state = "tech_passwall" - cost = 100 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/phase_shift4/do_ability() - if(!..()) - return - my_kin.stealth_shift() - if(my_kin.ability_flags & AB_PHASE_SHIFTED) - cost = 0 //Shifting back is free (but harmful in light) - else - cost = initial(cost) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/drip_oil - ability_name = "Goo Drip" - desc = "Drip some goo." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/drip_oil/do_ability() - if(!..()) - return - new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/laugh - ability_name = "Laugh" - desc = "Laugh." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/laugh/do_ability() - if(!..()) - return - playsound(my_kin.loc, 'sound/rakshasa/Laugh.ogg', 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/no - ability_name = "Say No" - desc = "Say no!" - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/no/do_ability() - if(!..()) - return - playsound(my_kin.loc, 'sound/rakshasa/No.ogg', 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/emergesound - ability_name = "Heavy Breathing" - desc = "Heavy Breathing." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/emergesound/do_ability() - if(!..()) - return - playsound(my_kin.loc, 'sound/rakshasa/Breath1.ogg', 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/trapsound - ability_name = "Raspy Breathing" - desc = "Raspy Breathing." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/trapsound/do_ability() - if(!..()) - return - var/goo_sounds = list ( - 'sound/rakshasa/Breath2.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/dripsound - ability_name = "Goop Drip Sound" - desc = "Do the drip sound without actually dripping." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/dripsound/do_ability() - if(!..()) - return - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg', - 'sound/rakshasa/Corrosion1.ogg', - 'sound/rakshasa/Corrosion2.ogg', - 'sound/rakshasa/Corrosion3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) - -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/trap - ability_name = "Lay Trap" - desc = "Lay a trap that will notify you when someone steps in it." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/trap/do_ability() - if(!..()) - return - var/goo_sounds = list ( - 'sound/rakshasa/Corrosion1.ogg', - 'sound/rakshasa/Corrosion2.ogg', - 'sound/rakshasa/Corrosion3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(my_kin.loc, sound, 100, 1) - new /obj/structure/gootrap (my_kin.loc) - -///////////////////////////////////////////////////////////////// -/obj/effect/rakshasa_ability/flicker - ability_name = "Flicker Lights" - desc = "Flicker the lights." - icon_state = "" - cost = 0 - shift_mode = SHIFTED_OR_NOT - ab_sound = 'sound/effects/stealthoff.ogg' -/obj/effect/rakshasa_ability/flicker/do_ability() - if(!..()) - return - my_kin.rakshasa_flicker() - - -//////////////////////////////////////////////////////////////// -//PROCS -//PHASE SHIFTING -//////////////////////////////////////////////////////////////// -//Rakshasa's phase shifts are now more stealthy. No announcement on them phasing in or out. Also, an extra phaseshift with no lights flickering. For flavor. There's probably a better way of doing this, butt fuck it. -/mob/living/simple_mob/shadekin/proc/rakshasa_shift() - var/turf/T = get_turf(src) - if(!T.CanPass(src,T) || loc != T) - to_chat(src,"You can't use that here!") - return FALSE - - forceMove(T) - var/original_canmove = canmove - SetStunned(0) - SetWeakened(0) - if(buckled) - buckled.unbuckle_mob() - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - canmove = FALSE - - //Shifting in - if(ability_flags & AB_PHASE_SHIFTED) - ability_flags &= ~AB_PHASE_SHIFTED - name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly - B.escapable = initial(B.escapable) - - overlays.Cut() - alpha = initial(alpha) - invisibility = initial(invisibility) - see_invisible = initial(see_invisible) - incorporeal_move = initial(incorporeal_move) - density = initial(density) - force_max_speed = initial(force_max_speed) - - //Cosmetics mostly - flick("tp_in",src) - sleep(5) //The duration of the TP animation - canmove = original_canmove - - //Potential phase-in vore - if(can_be_drop_pred) //Toggleable in vore panel - var/list/potentials = living_mobs(0) - if(potentials.len) - var/mob/living/target = pick(potentials) - if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected) - target.forceMove(vore_selected) - to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!") - - // Do this after the potential vore, so we get the belly - update_icon() - - //Affect nearby lights - for(var/obj/machinery/light/L in machines) - if(L.z != z || get_dist(src,L) > 10) - continue - L.flicker(10) - -//Shifting out - else - ability_flags |= AB_PHASE_SHIFTED - real_name = name - name = "Something" - - for(var/belly in vore_organs) - var/obj/belly/B = belly - B.escapable = FALSE - - overlays.Cut() - flick("tp_out",src) - sleep(5) - invisibility = INVISIBILITY_LEVEL_TWO - see_invisible = INVISIBILITY_LEVEL_TWO - update_icon() - alpha = 127 - - canmove = original_canmove - incorporeal_move = TRUE - density = FALSE - force_max_speed = TRUE - - -//////////////////////////////////////////////////////////////// -/mob/living/simple_mob/shadekin/proc/stealth_shift() - var/turf/T = get_turf(src) - if(!T.CanPass(src,T) || loc != T) - to_chat(src,"You can't use that here!") - return FALSE - - forceMove(T) - var/original_canmove = canmove - SetStunned(0) - SetWeakened(0) - if(buckled) - buckled.unbuckle_mob() - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - canmove = FALSE - - //Shifting in - if(ability_flags & AB_PHASE_SHIFTED) - ability_flags &= ~AB_PHASE_SHIFTED - name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly - B.escapable = initial(B.escapable) - - overlays.Cut() - alpha = initial(alpha) - invisibility = initial(invisibility) - see_invisible = initial(see_invisible) - incorporeal_move = initial(incorporeal_move) - density = initial(density) - force_max_speed = initial(force_max_speed) - - //Cosmetics mostly - flick("tp_in",src) - sleep(5) //The duration of the TP animation - canmove = original_canmove - - //Potential phase-in vore - if(can_be_drop_pred) //Toggleable in vore panel - var/list/potentials = living_mobs(0) - if(potentials.len) - var/mob/living/target = pick(potentials) - if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected) - target.forceMove(vore_selected) - to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!") - - // Do this after the potential vore, so we get the belly - update_icon() - -//Shifting out - else - ability_flags |= AB_PHASE_SHIFTED - real_name = name - name = "Something" - - for(var/belly in vore_organs) - var/obj/belly/B = belly - B.escapable = FALSE - - overlays.Cut() - flick("tp_out",src) - sleep(5) - invisibility = INVISIBILITY_LEVEL_TWO - see_invisible = INVISIBILITY_LEVEL_TWO - update_icon() - alpha = 127 - - canmove = original_canmove - incorporeal_move = TRUE - density = FALSE - force_max_speed = TRUE - - -//LIGHT FLICKERING -//////////////////////////////////////////////////////////////// -//A flicker proc. Because apparently putting this straight into the ability button doesn't work. -/mob/living/simple_mob/shadekin/proc/rakshasa_flicker() - for(var/obj/machinery/light/L in machines) - if(L.z != z || get_dist(src,L) > 10) - continue +/mob/living/simple_mob/shadekin/Initialize() + var/list/ability_types = subtypesof(/obj/effect/shadekin_ability) + if(name == "Rakshasa") + ability_types += subtypesof(/obj/effect/rakshasa_ability) + shadekin_abilities = list() + for(var/type in ability_types) + shadekin_abilities += new type(src) + + update_icon() + + return ..() + + +/obj/effect/rakshasa_ability + name = "" + desc = "" + icon = 'icons/mob/screen_spells.dmi' + var/ability_name = "FIX ME" + var/cost = 50 + var/mob/living/simple_mob/shadekin/my_kin + var/shift_mode = NOT_WHILE_SHIFTED + var/ab_sound + +/obj/effect/rakshasa_ability/New(var/new_kin) + ..() + my_kin = new_kin + loc = null + +/obj/effect/rakshasa_ability/Destroy() + my_kin = null + return ..() + +/obj/effect/rakshasa_ability/proc/atom_button_text() + var/shift_denial + + if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED)) + shift_denial = "Physical Only" + else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED)) + shift_denial = "Shifted Only" + + if(shift_denial) + name = shift_denial + else + name = my_kin.energy >= cost ? "Activate" : "No Energy" + return src + +/obj/effect/rakshasa_ability/Click(var/location, var/control, var/params) + if(my_kin.stat) return + + var/list/clickprops = params2list(params) + var/opts = clickprops["shift"] + + if(opts) + to_chat(my_kin,"[name] (Cost: [cost]%) - [desc]") + else + do_ability(my_kin) + +/obj/effect/rakshasa_ability/proc/do_ability() + if(my_kin.stat) + to_chat(my_kin,"Can't use that ability in your state!") + return FALSE + if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED)) + to_chat(my_kin,"Can't use that ability while phase shifted!") + return FALSE + else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED)) + to_chat(my_kin,"Can only use that ability while phase shifted!") + return FALSE + else if(my_kin.energy < cost) + to_chat(my_kin,"Not enough energy for that ability!") + return FALSE + + my_kin.energy -= cost + if(ab_sound) + playsound(src,ab_sound,75,1) + + return TRUE + + + + +/obj/effect/rakshasa_ability/phase_shift2 + ability_name = "Goo Shift" + desc = "Shift yourself with goopy effects." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/phase_shift2/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(loc, src) + playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) + my_kin.rakshasa_shift() + if(my_kin.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + else + cost = initial(cost) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + playsound(my_kin.loc, 'sound/rakshasa/Emerge0.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/phase_shift3 + ability_name = "Goo Shift No Emerge" + desc = "Shift yourself with goopy effects." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/phase_shift3/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(loc, src) + playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) + my_kin.rakshasa_shift() + if(my_kin.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + else + cost = initial(cost) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/phase_shift4 + ability_name = "Stealth Shift" + desc = "Stealthy. No light effects, no goo." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/phase_shift4/do_ability() + if(!..()) + return + my_kin.stealth_shift() + if(my_kin.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + else + cost = initial(cost) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/drip_oil + ability_name = "Goo Drip" + desc = "Drip some goo." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/drip_oil/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/laugh + ability_name = "Laugh" + desc = "Laugh." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/laugh/do_ability() + if(!..()) + return + playsound(my_kin.loc, 'sound/rakshasa/Laugh.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/no + ability_name = "Say No" + desc = "Say no!" + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/no/do_ability() + if(!..()) + return + playsound(my_kin.loc, 'sound/rakshasa/No.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/emergesound + ability_name = "Heavy Breathing" + desc = "Heavy Breathing." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/emergesound/do_ability() + if(!..()) + return + playsound(my_kin.loc, 'sound/rakshasa/Breath1.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/trapsound + ability_name = "Raspy Breathing" + desc = "Raspy Breathing." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/trapsound/do_ability() + if(!..()) + return + var/goo_sounds = list ( + 'sound/rakshasa/Breath2.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/dripsound + ability_name = "Goop Drip Sound" + desc = "Do the drip sound without actually dripping." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/dripsound/do_ability() + if(!..()) + return + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg', + 'sound/rakshasa/Corrosion1.ogg', + 'sound/rakshasa/Corrosion2.ogg', + 'sound/rakshasa/Corrosion3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/trap + ability_name = "Lay Trap" + desc = "Lay a trap that will notify you when someone steps in it." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/trap/do_ability() + if(!..()) + return + var/goo_sounds = list ( + 'sound/rakshasa/Corrosion1.ogg', + 'sound/rakshasa/Corrosion2.ogg', + 'sound/rakshasa/Corrosion3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + new /obj/structure/gootrap (my_kin.loc) + +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/flicker + ability_name = "Flicker Lights" + desc = "Flicker the lights." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/flicker/do_ability() + if(!..()) + return + my_kin.rakshasa_flicker() + + +//////////////////////////////////////////////////////////////// +//PROCS +//PHASE SHIFTING +//////////////////////////////////////////////////////////////// +//Rakshasa's phase shifts are now more stealthy. No announcement on them phasing in or out. Also, an extra phaseshift with no lights flickering. For flavor. There's probably a better way of doing this, butt fuck it. +/mob/living/simple_mob/shadekin/proc/rakshasa_shift() + var/turf/T = get_turf(src) + if(!T.CanPass(src,T) || loc != T) + to_chat(src,"You can't use that here!") + return FALSE + + forceMove(T) + var/original_canmove = canmove + SetStunned(0) + SetWeakened(0) + if(buckled) + buckled.unbuckle_mob() + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + canmove = FALSE + + //Shifting in + if(ability_flags & AB_PHASE_SHIFTED) + ability_flags &= ~AB_PHASE_SHIFTED + name = real_name + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = initial(B.escapable) + + overlays.Cut() + alpha = initial(alpha) + invisibility = initial(invisibility) + see_invisible = initial(see_invisible) + incorporeal_move = initial(incorporeal_move) + density = initial(density) + force_max_speed = initial(force_max_speed) + + //Cosmetics mostly + flick("tp_in",src) + sleep(5) //The duration of the TP animation + canmove = original_canmove + + //Potential phase-in vore + if(can_be_drop_pred) //Toggleable in vore panel + var/list/potentials = living_mobs(0) + if(potentials.len) + var/mob/living/target = pick(potentials) + if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected) + target.forceMove(vore_selected) + to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!") + + // Do this after the potential vore, so we get the belly + update_icon() + + //Affect nearby lights + for(var/obj/machinery/light/L in machines) + if(L.z != z || get_dist(src,L) > 10) + continue + L.flicker(10) + +//Shifting out + else + ability_flags |= AB_PHASE_SHIFTED + real_name = name + name = "Something" + + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = FALSE + + overlays.Cut() + flick("tp_out",src) + sleep(5) + invisibility = INVISIBILITY_LEVEL_TWO + see_invisible = INVISIBILITY_LEVEL_TWO + update_icon() + alpha = 127 + + canmove = original_canmove + incorporeal_move = TRUE + density = FALSE + force_max_speed = TRUE + + +//////////////////////////////////////////////////////////////// +/mob/living/simple_mob/shadekin/proc/stealth_shift() + var/turf/T = get_turf(src) + if(!T.CanPass(src,T) || loc != T) + to_chat(src,"You can't use that here!") + return FALSE + + forceMove(T) + var/original_canmove = canmove + SetStunned(0) + SetWeakened(0) + if(buckled) + buckled.unbuckle_mob() + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + canmove = FALSE + + //Shifting in + if(ability_flags & AB_PHASE_SHIFTED) + ability_flags &= ~AB_PHASE_SHIFTED + name = real_name + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = initial(B.escapable) + + overlays.Cut() + alpha = initial(alpha) + invisibility = initial(invisibility) + see_invisible = initial(see_invisible) + incorporeal_move = initial(incorporeal_move) + density = initial(density) + force_max_speed = initial(force_max_speed) + + //Cosmetics mostly + flick("tp_in",src) + sleep(5) //The duration of the TP animation + canmove = original_canmove + + //Potential phase-in vore + if(can_be_drop_pred) //Toggleable in vore panel + var/list/potentials = living_mobs(0) + if(potentials.len) + var/mob/living/target = pick(potentials) + if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected) + target.forceMove(vore_selected) + to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!") + + // Do this after the potential vore, so we get the belly + update_icon() + +//Shifting out + else + ability_flags |= AB_PHASE_SHIFTED + real_name = name + name = "Something" + + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = FALSE + + overlays.Cut() + flick("tp_out",src) + sleep(5) + invisibility = INVISIBILITY_LEVEL_TWO + see_invisible = INVISIBILITY_LEVEL_TWO + update_icon() + alpha = 127 + + canmove = original_canmove + incorporeal_move = TRUE + density = FALSE + force_max_speed = TRUE + + +//LIGHT FLICKERING +//////////////////////////////////////////////////////////////// +//A flicker proc. Because apparently putting this straight into the ability button doesn't work. +/mob/living/simple_mob/shadekin/proc/rakshasa_flicker() + for(var/obj/machinery/light/L in machines) + if(L.z != z || get_dist(src,L) > 10) + continue L.flicker(10) \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_trap.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_trap.dm index 2d44ca6279..b02e0073b3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_trap.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/rakshasa_trap.dm @@ -1,76 +1,76 @@ -/obj/structure/gootrap - name = "goo" - throw_speed = 2 - throw_range = 1 - gender = PLURAL - icon = 'icons/effects/blood.dmi' - var/base_icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - var/basecolor="#030303" - desc = "" - throwforce = 0 - w_class = ITEMSIZE_NORMAL - matter = list(DEFAULT_WALL_MATERIAL = 18750) - var/deployed = 1 - anchored = 1 - -/obj/structure/gootrap/proc/can_use(mob/user) - return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained()) - -/obj/structure/gootrap/update_icon() - ..() - color = basecolor - -/obj/structure/gootrap/New() - ..() - update_icon() - return - -/obj/structure/gootrap/attack_hand(mob/user as mob) - if(has_buckled_mobs() && can_use(user)) - var/victim = english_list(buckled_mobs) - user.visible_message( - "[user] begins freeing [victim] from \the [src].", - "You carefully begin to free [victim] from \the [src].", - ) - if(do_after(user, 5)) - user.visible_message("[victim] has been freed from \the [src] by [user].") - for(var/A in buckled_mobs) - unbuckle_mob(A) - anchored = 0 - else - ..() - -/obj/structure/gootrap/proc/attack_mob(mob/living/L) - //trap the victim in place - set_dir(L.dir) - can_buckle = 1 - buckle_mob(L) - var/goo_sounds = list ( - 'sound/rakshasa/Decay1.ogg', - 'sound/rakshasa/Decay2.ogg', - 'sound/rakshasa/Decay3.ogg' - ) - var/sound = pick(goo_sounds) - playsound(src, sound, 100, 1) - L << "You hear a gooey schlorp as \the [src] ensnares your leg, trapping you in place!" - deployed = 0 - can_buckle = initial(can_buckle) - - -/obj/structure/gootrap/Crossed(AM as mob|obj) - if(deployed && isliving(AM)) - var/mob/living/L = AM - if(L.m_intent == "run") - L.visible_message( - "[L] steps on \the [src].", - "You step on \the [src]!", - "You hear a gooey schlorp as the goo ensnares your leg!" - ) - attack_mob(L) - if(!has_buckled_mobs()) - anchored = 0 - deployed = 0 - message_admins("[key_name(usr)] has stepped in the goo trap.") - ..() - +/obj/structure/gootrap + name = "goo" + throw_speed = 2 + throw_range = 1 + gender = PLURAL + icon = 'icons/effects/blood.dmi' + var/base_icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + var/basecolor="#030303" + desc = "" + throwforce = 0 + w_class = ITEMSIZE_NORMAL + matter = list(DEFAULT_WALL_MATERIAL = 18750) + var/deployed = 1 + anchored = 1 + +/obj/structure/gootrap/proc/can_use(mob/user) + return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained()) + +/obj/structure/gootrap/update_icon() + ..() + color = basecolor + +/obj/structure/gootrap/New() + ..() + update_icon() + return + +/obj/structure/gootrap/attack_hand(mob/user as mob) + if(has_buckled_mobs() && can_use(user)) + var/victim = english_list(buckled_mobs) + user.visible_message( + "[user] begins freeing [victim] from \the [src].", + "You carefully begin to free [victim] from \the [src].", + ) + if(do_after(user, 5)) + user.visible_message("[victim] has been freed from \the [src] by [user].") + for(var/A in buckled_mobs) + unbuckle_mob(A) + anchored = 0 + else + ..() + +/obj/structure/gootrap/proc/attack_mob(mob/living/L) + //trap the victim in place + set_dir(L.dir) + can_buckle = 1 + buckle_mob(L) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(src, sound, 100, 1) + L << "You hear a gooey schlorp as \the [src] ensnares your leg, trapping you in place!" + deployed = 0 + can_buckle = initial(can_buckle) + + +/obj/structure/gootrap/Crossed(AM as mob|obj) + if(deployed && isliving(AM)) + var/mob/living/L = AM + if(L.m_intent == "run") + L.visible_message( + "[L] steps on \the [src].", + "You step on \the [src]!", + "You hear a gooey schlorp as the goo ensnares your leg!" + ) + attack_mob(L) + if(!has_buckled_mobs()) + anchored = 0 + deployed = 0 + message_admins("[key_name(usr)] has stepped in the goo trap.") + ..() + diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types_ch.dm index 2e41c7c986..16e8fcf23e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types_ch.dm @@ -1,169 +1,169 @@ -/////////////////////////////////////////////////////////////////CHOMPEDIT Custom shadekin mini tutorial -//Proto shadekin; AKA; Basic how to make your own shadekin; -Shark - -//Step 1; sprites; -//File for body = icons/mob/vore_shadekin.dmi -//File for tail = icons/mob/vore_shadekin64.dmi -//Sprites can be either made inside of DM or you can use a Program of your choice and save the files as PNG and then import them -//If you need help learning how to use DMs interface to import/export sprites and make states you can always ask in the discord. - -//Step 2; Code -//Now this depends on what type of eye colour you want -//For a red we use -///mob/living/simple_animal/shadekin/red -//then we simply add our shadekins name at the end (unless its used already) -/mob/living/simple_mob/shadekin/red/proto - name ="Proto" - //This here will be our shadekins name - - desc = "An invisible entity not meant for use." - //here goes a lil tidbit people can see when examining the shadekin. Multiple lines works just as on the vore part - - icon_state = "proto" - //this will most likely also be your shadekins name, it corresponds to the name you gave the tail and body state in the DMIs - //so if you named the body state "proto" and "proto-1" then icon_state should be called "proto" - - vore_stomach_flavor = "You stared into the void,\ - the void decided you look tasty,\ - now you are in the void, pretty wet" - //This is what people see when they drop into your gut! the backslashes at the end of the sentence indicate the next text will be on its own line! - - - player_msg = "Proto is you, Proto shouldn't exist" - //This message pops up when you are put into your shadekin - //I recommend you use it as a way to remind yourself of how you want to act generally as your shadekin. - -//Step 3; PR -// Assuming you already have a Fork of chompstation, make sure you got your files in order -// and then simply make a new pull request to our github. - -//Now once you pushed the new DMIs with your added sprites to our github. -//And you finished writing this code section for your shadekin and pushed that too. You are done. -//If this is your first time I recommend getting someone to look over your work. - -/////////////////////////////////////////////////////////////////CHOMP TUTORIAL END - - - -//Special event mob. "Hunger." - Rakshasa -/mob/living/simple_mob/shadekin/red/rakshasa - name ="Rakshasa" - desc = "A scary, black shadekin? Their body oozes like goop." - icon_state = "rakshasa" - vore_stomach_flavor = "You're floating in a warm, viscous goop, too dark to see. \ - Your efforts to find light have failed. Darkness consumes you. \ - Rakshasa's gelatenous body squeezes over your form, leaving no inch unmolested. \ - The hot goop you float in makes it hard to breathe; all consuming of space and light. \ - Your body feels hot, growing weaker, more tired. Draining. Darkness coming. \ - You struggle to stay awake while floating helplessly in the goo." - player_msg = "You are Rakshasa. You are not to directly harm crew, only consume. You never speak a language." - energy_adminbuse = TRUE - maxHealth = 1000000000000 - health = 1000000000000 - eye_state = "BLUE EYES" - eye_icon_state = "e_rakshasa" - -/mob/living/simple_mob/shadekin/blue/luna - name = "Luna" - desc = "She appears to be a fuzzy critter of some sort. Her eyes shimmer a dark blue, glancing around curiously." - icon_state = "luna" - eye_desc = "blue eyes" - vore_stomach_flavor = "Dark blue flesh fills your vision as you slip past the Shadekin's tongue and into the darkness \ - of her gullet. The flesh around you seems squishy and pliable and malleable to say the least, warmth rolling up \ - your body as the humid air rises across the deeper you slide into the darkness of her stomach. As you splash \ - inside, you curl up comfortably inside the walls that churn and squeeze around you, any fidgeting quickly \ - subdued by the strength of the walls, and any movement of your predator seems to coax a light sway from \ - your current prison. The slime inside stuck fairly well, though harmless - your aches and pains slowly soothing \ - up and fading away." - player_msg = "You are a shadekin that goes by the name of Luna. Curious, you have tasked yourself and yourself alone \ - with studying this foreign world. Learn their language. Learn their culture. Adapt. Everything is wonderful and new, \ - and your mind is set on retaining knowledge of these odd planescape." - -//"All your chickens are belong to me!" - Zylas -/mob/living/simple_mob/shadekin/purple/zylas - name ="Zylas" - desc = "He's a chubby looking creature, black and grey fur accompanied by purple eyes and a large hoody." - icon_state = "zylashoody" - eye_desc = "purple eyes" - vore_stomach_flavor = "You are trapped in a cramped tight space. The color purple seems to dominate your vision. \ - His walls rolled over your form as you lay trapped in his depths. There wasnt a drop of fluid in sight inside that \ - stomach. Instead, you could feel your energy slowly draining away over time, like... he was leeching off you." - player_msg = "You are Zylas. You enjoy scaring the local population and eating every chicken you find." - -//"Two scarves. No more, No Less." -Muninn -/mob/living/simple_mob/shadekin/blue/muninn - name ="Muninn" - desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail. \ - He seems eager to take in the various sights and sounds of the station" - icon_state = "muninn" - eye_desc = "blue eyes" - vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ - A blue glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ - Muninn's walls gently squeeze over your form, like a tight, yet comfortable hug. \ - The gut itself was relatively dry, only slightly damp. \ - As Muninn ambles along, you'd gently sway within. It's quite the nice place to stay for a while." - player_msg = "You are Muninn. Today you feel... Curious." - -//"Here's a little lesson in the trickeries" -Muninn -/mob/living/simple_mob/shadekin/purple/muninn - name ="Muninn" - desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail.\ - He seems a little mischevious... better keep an eye on him." - icon_state = "muninn" - eye_desc = "purple eyes" - vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ - A purple glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ - Muninn's walls gently squeeze over your form, like a tight hug. \ - The gut itself was relatively dry, only slightly damp. \ - It didn't seem that Muninn was digesting you. More like... sapping your energy and making you feel tired. \ - A nap in this comfortable chamber wouldn't be the worst thing, would it?" - player_msg = "You are Muninn. Today you feel... Mischevious." - -//Whealty's shadekin anno! -/mob/living/simple_mob/shadekin/purple/anno - name ="Anno" - desc = "A white furred shadekin with a chubby form. His ears seem to be close to even in length and his snout seems longer than the usual.\ - He seems energetic and playful." - icon_state = "anno" - eye_desc = "purple eyes" - vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ - A purple glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ - Anno's stomach walls squeeze and hug over your form somewhat tightly. \ - The gut itself was wetish and slightly slick. \ - The gut seemed somewhat inviting with the warmth and softness, yet there was an ominous feeling to it with all the noises it made.\ - You'll probably be safe in here. Probably." - player_msg = "You are Anno, you are energetic and playful" - -/mob/living/simple_mob/shadekin/blue/roti - name ="Roti" - desc = "Roti is a shadekin with blue eyes, is chubby since he has eaten others before hand. He enjoys chocolate, the taste of it, the smell of it, he just wants anything sweet and chocolately to be in his belly. So be careful around him this is also a way to summon him by laying around chocolate and calling him out." - icon_state = "roti" - eye_desc = "blue eyes" - vore_stomach_flavor = "You stare into Roti's maw as he moves it towards your head, putting it in and tasting your sweet delicious chocolately flavor. \ - Wet saliva covers your head as he pushes you inward, gulping down your head and shoulders into his pulsating throat. It pulses and eases you downward towards your destination \ - cramming your torso into his maw and taking wet SCHLURP, GLUK, to get it down and up to your waist. Roti continues to taste you all over wanting that succulent flavor \ - to himself. Another loud wet swallow and down goes your waist into his hungry maw, lifting up the legs high into the sky while allowing gravity and his gulps \ - to send you packing away into his chubby gut that now expands to fit you inside of the wet chamber. At least you were safe for now that is." - player_msg = "You are Roti, a curious shadekin that wishes to learn from the station and eventually speak with them." - -//kcin2001's soft shadekin -/mob/living/simple_mob/shadekin/green/soft - name = "Softpatch" - desc = "A green eyed brown shadekin, looks fluffy and a bit chubby around the middle underneath his well worn cloak \ - He seems curious but ready to flee" - icon_state = "soft" - eye_desc = "soft green eyes" -// vore_stomach_flavor = "" - player_msg = "You are Softpatch, you like things that are soft and are curious about the beings in realspace" - -//"Marr marr marr-marr maaarr marr?~ (Ever had your ass eaten by a shadekin before?~)" - Yrmir (Shadowfire117) -/mob/living/simple_mob/shadekin/orange/yrmir - name = "Green and black shadekin" //Name is Yrmir and known only to other shadekins he talks to, he doesn't speak common to any degree so far - desc = "An orange eyed shadekin, this one has a very dark coat with several spots with faintly glowing green patches of fur. \ - Said fur looks quite soft and warm with it filling out a bit, a closer look tells its a slim upper body while rump, hips and thighs are nice and filled out well. \ - While he may have a more padded out soft build below, the masculine part of them is quite visible as a large fat furred sack and sheath rests comfortably between his thighs. \ - From the way he looks at you, you get the feeling he is possibly scheming something fun, at least for himself." - icon_state = "yrmir" - eye_desc = "glimmering orange eyes" -// vore_stomach_flavor = "" - player_msg = "You are Yrmir, an orange shadekin with interest in revelry, trickery and pleasures. Mostly for you but to a degree to the willing and unwilling that interest you." +/////////////////////////////////////////////////////////////////CHOMPEDIT Custom shadekin mini tutorial +//Proto shadekin; AKA; Basic how to make your own shadekin; -Shark + +//Step 1; sprites; +//File for body = icons/mob/vore_shadekin.dmi +//File for tail = icons/mob/vore_shadekin64.dmi +//Sprites can be either made inside of DM or you can use a Program of your choice and save the files as PNG and then import them +//If you need help learning how to use DMs interface to import/export sprites and make states you can always ask in the discord. + +//Step 2; Code +//Now this depends on what type of eye colour you want +//For a red we use +///mob/living/simple_animal/shadekin/red +//then we simply add our shadekins name at the end (unless its used already) +/mob/living/simple_mob/shadekin/red/proto + name ="Proto" + //This here will be our shadekins name + + desc = "An invisible entity not meant for use." + //here goes a lil tidbit people can see when examining the shadekin. Multiple lines works just as on the vore part + + icon_state = "proto" + //this will most likely also be your shadekins name, it corresponds to the name you gave the tail and body state in the DMIs + //so if you named the body state "proto" and "proto-1" then icon_state should be called "proto" + + vore_stomach_flavor = "You stared into the void,\ + the void decided you look tasty,\ + now you are in the void, pretty wet" + //This is what people see when they drop into your gut! the backslashes at the end of the sentence indicate the next text will be on its own line! + + + player_msg = "Proto is you, Proto shouldn't exist" + //This message pops up when you are put into your shadekin + //I recommend you use it as a way to remind yourself of how you want to act generally as your shadekin. + +//Step 3; PR +// Assuming you already have a Fork of chompstation, make sure you got your files in order +// and then simply make a new pull request to our github. + +//Now once you pushed the new DMIs with your added sprites to our github. +//And you finished writing this code section for your shadekin and pushed that too. You are done. +//If this is your first time I recommend getting someone to look over your work. + +/////////////////////////////////////////////////////////////////CHOMP TUTORIAL END + + + +//Special event mob. "Hunger." - Rakshasa +/mob/living/simple_mob/shadekin/red/rakshasa + name ="Rakshasa" + desc = "A scary, black shadekin? Their body oozes like goop." + icon_state = "rakshasa" + vore_stomach_flavor = "You're floating in a warm, viscous goop, too dark to see. \ + Your efforts to find light have failed. Darkness consumes you. \ + Rakshasa's gelatenous body squeezes over your form, leaving no inch unmolested. \ + The hot goop you float in makes it hard to breathe; all consuming of space and light. \ + Your body feels hot, growing weaker, more tired. Draining. Darkness coming. \ + You struggle to stay awake while floating helplessly in the goo." + player_msg = "You are Rakshasa. You are not to directly harm crew, only consume. You never speak a language." + energy_adminbuse = TRUE + maxHealth = 1000000000000 + health = 1000000000000 + eye_state = "BLUE EYES" + eye_icon_state = "e_rakshasa" + +/mob/living/simple_mob/shadekin/blue/luna + name = "Luna" + desc = "She appears to be a fuzzy critter of some sort. Her eyes shimmer a dark blue, glancing around curiously." + icon_state = "luna" + eye_desc = "blue eyes" + vore_stomach_flavor = "Dark blue flesh fills your vision as you slip past the Shadekin's tongue and into the darkness \ + of her gullet. The flesh around you seems squishy and pliable and malleable to say the least, warmth rolling up \ + your body as the humid air rises across the deeper you slide into the darkness of her stomach. As you splash \ + inside, you curl up comfortably inside the walls that churn and squeeze around you, any fidgeting quickly \ + subdued by the strength of the walls, and any movement of your predator seems to coax a light sway from \ + your current prison. The slime inside stuck fairly well, though harmless - your aches and pains slowly soothing \ + up and fading away." + player_msg = "You are a shadekin that goes by the name of Luna. Curious, you have tasked yourself and yourself alone \ + with studying this foreign world. Learn their language. Learn their culture. Adapt. Everything is wonderful and new, \ + and your mind is set on retaining knowledge of these odd planescape." + +//"All your chickens are belong to me!" - Zylas +/mob/living/simple_mob/shadekin/purple/zylas + name ="Zylas" + desc = "He's a chubby looking creature, black and grey fur accompanied by purple eyes and a large hoody." + icon_state = "zylashoody" + eye_desc = "purple eyes" + vore_stomach_flavor = "You are trapped in a cramped tight space. The color purple seems to dominate your vision. \ + His walls rolled over your form as you lay trapped in his depths. There wasnt a drop of fluid in sight inside that \ + stomach. Instead, you could feel your energy slowly draining away over time, like... he was leeching off you." + player_msg = "You are Zylas. You enjoy scaring the local population and eating every chicken you find." + +//"Two scarves. No more, No Less." -Muninn +/mob/living/simple_mob/shadekin/blue/muninn + name ="Muninn" + desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail. \ + He seems eager to take in the various sights and sounds of the station" + icon_state = "muninn" + eye_desc = "blue eyes" + vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ + A blue glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ + Muninn's walls gently squeeze over your form, like a tight, yet comfortable hug. \ + The gut itself was relatively dry, only slightly damp. \ + As Muninn ambles along, you'd gently sway within. It's quite the nice place to stay for a while." + player_msg = "You are Muninn. Today you feel... Curious." + +//"Here's a little lesson in the trickeries" -Muninn +/mob/living/simple_mob/shadekin/purple/muninn + name ="Muninn" + desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail.\ + He seems a little mischevious... better keep an eye on him." + icon_state = "muninn" + eye_desc = "purple eyes" + vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ + A purple glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ + Muninn's walls gently squeeze over your form, like a tight hug. \ + The gut itself was relatively dry, only slightly damp. \ + It didn't seem that Muninn was digesting you. More like... sapping your energy and making you feel tired. \ + A nap in this comfortable chamber wouldn't be the worst thing, would it?" + player_msg = "You are Muninn. Today you feel... Mischevious." + +//Whealty's shadekin anno! +/mob/living/simple_mob/shadekin/purple/anno + name ="Anno" + desc = "A white furred shadekin with a chubby form. His ears seem to be close to even in length and his snout seems longer than the usual.\ + He seems energetic and playful." + icon_state = "anno" + eye_desc = "purple eyes" + vore_stomach_flavor = "You're stuck in a warm, tight stomach. \ + A purple glow, as soft as the walls surrounding you, illuminates the cramped chamber. \ + Anno's stomach walls squeeze and hug over your form somewhat tightly. \ + The gut itself was wetish and slightly slick. \ + The gut seemed somewhat inviting with the warmth and softness, yet there was an ominous feeling to it with all the noises it made.\ + You'll probably be safe in here. Probably." + player_msg = "You are Anno, you are energetic and playful" + +/mob/living/simple_mob/shadekin/blue/roti + name ="Roti" + desc = "Roti is a shadekin with blue eyes, is chubby since he has eaten others before hand. He enjoys chocolate, the taste of it, the smell of it, he just wants anything sweet and chocolately to be in his belly. So be careful around him this is also a way to summon him by laying around chocolate and calling him out." + icon_state = "roti" + eye_desc = "blue eyes" + vore_stomach_flavor = "You stare into Roti's maw as he moves it towards your head, putting it in and tasting your sweet delicious chocolately flavor. \ + Wet saliva covers your head as he pushes you inward, gulping down your head and shoulders into his pulsating throat. It pulses and eases you downward towards your destination \ + cramming your torso into his maw and taking wet SCHLURP, GLUK, to get it down and up to your waist. Roti continues to taste you all over wanting that succulent flavor \ + to himself. Another loud wet swallow and down goes your waist into his hungry maw, lifting up the legs high into the sky while allowing gravity and his gulps \ + to send you packing away into his chubby gut that now expands to fit you inside of the wet chamber. At least you were safe for now that is." + player_msg = "You are Roti, a curious shadekin that wishes to learn from the station and eventually speak with them." + +//kcin2001's soft shadekin +/mob/living/simple_mob/shadekin/green/soft + name = "Softpatch" + desc = "A green eyed brown shadekin, looks fluffy and a bit chubby around the middle underneath his well worn cloak \ + He seems curious but ready to flee" + icon_state = "soft" + eye_desc = "soft green eyes" +// vore_stomach_flavor = "" + player_msg = "You are Softpatch, you like things that are soft and are curious about the beings in realspace" + +//"Marr marr marr-marr maaarr marr?~ (Ever had your ass eaten by a shadekin before?~)" - Yrmir (Shadowfire117) +/mob/living/simple_mob/shadekin/orange/yrmir + name = "Green and black shadekin" //Name is Yrmir and known only to other shadekins he talks to, he doesn't speak common to any degree so far + desc = "An orange eyed shadekin, this one has a very dark coat with several spots with faintly glowing green patches of fur. \ + Said fur looks quite soft and warm with it filling out a bit, a closer look tells its a slim upper body while rump, hips and thighs are nice and filled out well. \ + While he may have a more padded out soft build below, the masculine part of them is quite visible as a large fat furred sack and sheath rests comfortably between his thighs. \ + From the way he looks at you, you get the feeling he is possibly scheming something fun, at least for himself." + icon_state = "yrmir" + eye_desc = "glimmering orange eyes" +// vore_stomach_flavor = "" + player_msg = "You are Yrmir, an orange shadekin with interest in revelry, trickery and pleasures. Mostly for you but to a degree to the willing and unwilling that interest you." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm index f927fc3285..e38ccb5713 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm @@ -1,317 +1,317 @@ -/datum/category_item/catalogue/fauna/woof - name = "Wildlife - Dog" - desc = "It's a relatively ordinary looking canine. \ - It has an ominous aura..." - value = CATALOGUER_REWARD_EASY - -/mob/living/simple_mob/vore/woof - name = "dog" - desc = "It is a relatively ordinary looking canine mutt! It radiates mischief!" - tt_desc = "E Canis lupus softus" - - icon_state = "woof" - icon_living = "woof" - icon_dead = "woof_dead" - icon_rest = "woof_rest" - icon = 'icons/mob/vore.dmi' - - faction = "dog" - maxHealth = 600 - health = 600 - movement_cooldown = -1 - - response_help = "pets" - response_disarm = "rudely paps" - response_harm = "punches" - - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 1 - catalogue_data = list(/datum/category_item/catalogue/fauna/woof) - - var/knockdown_chance = 20 - - 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 = 900 - - attacktext = list("nipped", "chomped", "bullied", "gnaws on") - attack_sound = 'sound/voice/bork.ogg' - friendly = list("snoofs", "nuzzles", "ruffs happily at", "smooshes on") - - ai_holder_type = /datum/ai_holder/simple_mob/woof - - mob_size = MOB_SMALL - - has_langs = list(LANGUAGE_ANIMAL, LANGUAGE_CANILUNZT, LANGUAGE_GALCOM) - say_list_type = /datum/say_list/softdog - swallowTime = 0.1 SECONDS - -/mob/living/simple_mob/vore/woof/New() - ..() - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - -/datum/say_list/softdog - speak = list("Woof~", "Woof!", "Yip!", "Yap!", "Yip~", "Yap~", "Awoooooo~", "Awoo!", "AwooooooooooOOOOOOoOooOoooOoOOoooo!") - emote_hear = list("barks", "woofs", "yaps", "yips","pants", "snoofs") - emote_see = list("wags its tail", "stretches", "yawns", "swivels its ears") - say_maybe_target = list("Whuff?") - say_got_target = list("Grrrr YIP YAP!!!") - -/datum/ai_holder/simple_mob/woof - hostile = FALSE - cooperative = TRUE - retaliate = TRUE - speak_chance = 1 - wander = TRUE - -// Activate Noms! -/mob/living/simple_mob/vore/woof - vore_active = 1 - vore_capacity = 3 - vore_bump_chance = 5 - vore_bump_emote = "greedily homms at" - vore_digest_chance = 1 - vore_absorb_chance = 5 - vore_escape_chance = 10 - vore_pounce_chance = 5 - vore_ignores_undigestable = 0 - vore_default_mode = DM_HOLD - vore_icons = SA_ICON_LIVING - vore_stomach_name = "Stomach" - vore_stomach_flavor = "You have found yourself pumping on down, down, down into this extremely soft dog. The slick touches of pulsing walls roll over you in greedy fashion as you're swallowed away, the flesh forms to your figure as in an instant the world is replaced by the hot squeeze of canine gullet. And in another moment a heavy GLLRMMPTCH seals you away, the dog tossing its head eagerly, the way forward stretching to accommodate your shape as you are greedily guzzled down. The wrinkled, doughy walls pulse against you in time to the creature's steady heartbeat. The sounds of the outside world muffled into obscure tones as the wet, grumbling rolls of this soft creature's gut hold you, churning you tightly such that no part of you is spared from these gastric affections." - vore_default_contamination_flavor = "Wet" - vore_default_contamination_color = "grey" - vore_default_item_mode = IM_DIGEST - - -/mob/living/simple_mob/vore/woof/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "You have found yourself pumping on down, down, down into this extremely soft dog. The slick touches of pulsing walls roll over you in greedy fashion as you're swallowed away, the flesh forms to your figure as in an instant the world is replaced by the hot squeeze of canine gullet. And in another moment a heavy GLLRMMPTCH seals you away, the dog tossing its head eagerly, the way forward stretching to accommodate your shape as you are greedily guzzled down. The wrinkled, doughy walls pulse against you in time to the creature's steady heartbeat. The sounds of the outside world muffled into obscure tones as the wet, grumbling rolls of this soft creature's gut hold you, churning you tightly such that no part of you is spared from these gastric affections." - - B.emote_lists[DM_HOLD] = list( - "You can feel yourself shift and sway as the dog moves around. Your figure held tightly there had little room to move in that organic gloom, but every wandering step is another jostling quake that shakes through the canine frame and rocks you once again.", - "It is hard to hear much of anything over the grumbling fleshy sounds of the stomach walls pressing to you. The wet sound of flesh gliding over you too was ever-present as the walls encroach upon your personal space. And beyond that, the steady booming of the dog's heart throbs in your ears, a relaxing drone of excited thumping. Any sounds from the outside world are muffled such that they are hard to hear, as the canine walls hold on to you greedily.", - "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. Any time you press out, the walls seem to groan and flex in to smother you heavily for a few moments. ", - "When you shift your weight to try to find a more comfortable position you can feel your weight stretch the chamber around you a little more, and it responds by collapsing in on you more tightly! Forming to you with heavily insistence, grinding against your curves. Holding you firmly for a few moments, before slowly relaxing...", - "The heat of the dog's body soaks into your form and relaxes your muscles. It's easy to let yourself go limp, to be squeezed and carried by this soft predator. The sway of its body, the swing of its gait, all enough to lull anyone who likes such things into a deeply relaxed state, as you're rocked and supported, squeezed deep within the gut of this woof. Possessively held, kept.", - "Thick slime soaks your form as the dog's insides churn over you. There is no part of you that is not totally soaked in it before too long as the steady gastric motions massage you from head to toe. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back. It's very hard to get any personal space!", - "Beyond the grumbling gurgles and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed, easy to sink in against.") - - B.emote_lists[DM_ABSORB] = list( - "You can feel the weight of the dog shift as it moves around. Your figure held tightly there had absolutely no room to move in that organic gloom. Every moment those pumping walls seem to squeeze over you tighter, every wandering step the dog takes is another jostling quake that seems to sink you that much deeper into the dog's flesh, the dog's body steadily collapsing in to claim you.", - "It is hard to hear much of anything over the smothering press of stomach walls pressing to you, forming to your features. The tarry flesh you are slowly sinking into squelches here and there as it flows over your features. The sound of the dog's body absorbing you is oddly quiet. No bubbling or glooping. Just one body slowly blending into and becoming one with another. And beyond all that, the steady booming of the dog's heart throbs in your ears, moment by moment that sound seems to tug at you, coursing through you as much as the dog you are steadily becoming a part of. Any sounds from the outside world are muffled such that they are hard to hear, as you sink into the walls of this canine predator.", - "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. Any time you press out, the walls seem to simply flow over you, and allow whatever pushed out to sink in that much more. The swell on the dog's tummy shrinking that much faster... ", - "When you shift your weight to try to get some space. you can feel your weight simply sink into that flesh, the folds forming around you tightly, and the deeper you sink, the harder it gets to move. The pressure never seems to let up as the tide of flesh holding you slowly overcomes your form.", - "As the seemingly molten heat of this dog's flesh flows over you, it's easy to let yourself go limp, to just give in and become one with this creature that so obviously wanted you, and indeed, unless something happened to stop this, you soon would be... The dog tail swaying in a knowing arc as you are added to its figure. Squeezed, tucked away, kept.", - "The thick slimes that coat your form do nothing to keep the molten flesh of this dog's stomach from advancing across your figure and claiming you up. Soon there's not a single part of you that is not totally inundated in the deep press of a woof's gastric massage. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back, flowing over your form, deeper, deeper.", - "Beyond the squelching, clinging tide of dog flesh working to make the two of you one, and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed. And you realize suddenly that the dog's breathing seem to bring you relief even as you are totally smothered in the canine's insistent gastric affections!") - - B.emote_lists[DM_DIGEST] = list( - "As the dog goes about its business, you can feel the shift your weight sway on its tummy. The gurgling glorping sounds that come with the squeezing, kneading, massaging motions let you know that you're held tight, churned. Dog food.", - "It is hard to hear much of anything over the roaring gurgles of stomach walls churning over you. The wet sound of flesh grinding heavily over you too was ever-present as the walls encroach upon your personal space, lathering you in tingly, syrupy thick slimes. And beyond that, the steady booming of the dog's heart throbs in your ears, a drone of excited thumping. Any sounds from the outside world are muffled such that they are hard to hear, as the canine walls churn on to you greedily.", - "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. The walls seem to constantly flex and squeeze across you, pressing in against you, massaging thick slime into your figure, steadily trying to soften up your outer layers...", - "When you try to shift your weight to try to find a more comfortable position, you find that those heavy walls pumping over you make it hard to move at all. You can feel the weight of the dog pressing in all around you even without those muscles flexing and throbbing across your form. It forms to you with heavily insistence, grinding against your curves, churning that bubbling gloop into you. Holding you firm and heavy as that stomach does its work...", - "The heat of the dog's body soaks into your form and relaxes your muscles. It's easy to let yourself go limp, to just completely give in to this soft predator. The sway of its body, the swing of its gait, all enough to lull anyone who likes such things into a deeply relaxed state. Churned and slathered, massaged by doughy wrinkled walls deep within the gut of this woof. Possessively held within that needy chamber.", - "Thick slime soaks your form as the dog's insides churn over you. There is no part of you that is not totally soaked in it before too long as the steady gastric motions massage you from head to toe. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back. It's very hard to get any personal space!", - "Beyond the grumbling gurgles and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed, easy to sink in against. Occasionally though everything would go all tight and cramped! And somewhere up above you can hear the dog let out a dainty little belch...") - - B.digest_brute = 0.05 - B.digest_burn = 0.05 - B.mode_flags = 8 - B.belly_fullscreen = "a_tumby" - B.struggle_messages_inside = list( - "Your struggling only causes %pred's doughy gut to smother you against those wrinkled walls...", - "As you squirm, %pred's %belly flexxes over you heavily, forming you back into a small ball...", - "You push out at those heavy wrinkled walls with all your might and they collapse back in on you! Clinging and churning over you heavily for a few minutes!!!", - "As you struggle against the gut of this dog, you can feel a squeeze roll over you from the bottom to the top! The walls cling to you a little tighter then as the dog emits a soft little burp...", - "You try to squirm, but you can't even move as those heavy walls throb and pulse and churn around you.", - "You paddle against the fleshy walls of %pred's %belly, making a little space for yourself for a moment, before the wrinkled surface bounces back against you.", - "The slick walls are doughy, smushy under your fingers, and very difficult to grip! The flesh pulses under your grip in time with %pred's heartbeat.", - "Your hands slip and slide over the slick slimes of %pred's %belly as you struggle to escape! The walls pulse and squeeze around you greedily.", - "%pred lets out a happy little awoo, rocking their hips to jostle you as you squirm, while the weight of those walls closes in on you, squeezing you tightly!", - "%pred's %belly glorgles around you as you push and struggle within! The squashy walls are always reluctant to give ground, and the moment your struggles lax, they redouble their efforts in smothering all the fight out of you!") - B.struggle_messages_outside = list( - "A vague shape briefly swells on %pred's %belly as something moves inside...", - "Something shifts within %pred's %belly.", - "%pred urps as something shifts in their %belly.") - B.examine_messages = list( - "Their %belly is distended.", - "Vague shapes swell their %belly.", - "It looks like they have something solid in their %belly") - -/obj/item/projectile/awoo_missile - name = "awoo missile" - icon_state = "force_missile" - fire_sound = 'sound/voice/long_awoo.ogg' - damage = 1 - damage_type = BRUTE - check_armour = "melee" - - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - hitsound_wall = 'sound/voice/bork.ogg' - -/mob/living/simple_mob/vore/woof/cass - name = "Cass" - desc = "Well trained, comfy company. They have a pretty red bow tied into their fur. They look very soft." - - icon_state = "cass" - icon_living = "cass" - icon_dead = "cass_dead" - icon_rest = "cass_rest" - ic_revivable = 0 - - faction = "theatre" - gender = PLURAL - ai_holder_type = /datum/ai_holder/simple_mob/woof/cass - -/mob/living/simple_mob/vore/woof/cass - vore_digest_chance = 0 - vore_escape_chance = 25 - digestable = 0 - -/datum/ai_holder/simple_mob/woof/cass - retaliate = 0 - violent_breakthrough = 0 - -/datum/ai_holder/simple_mob/ranged/kiting/threatening/woof - hostile = 1 - retaliate = 1 - cooperative = TRUE - speak_chance = 1 - lose_target_timeout = 0 // Easily distracted - -/datum/ai_holder/simple_mob/woof/hostile - hostile = 1 - retaliate = 1 - -/mob/living/simple_mob/vore/woof/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(prob(knockdown_chance)) - L.Weaken(3) - L.visible_message(span("danger", "\The [src] pounces on \the [L]!")) - -/mob/living/simple_mob/vore/woof/hostile/melee - - movement_cooldown = -2 - - ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile - -/mob/living/simple_mob/vore/woof/hostile/ranged - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof - - projectiletype = /obj/item/projectile/awoo_missile - projectilesound = 'sound/voice/long_awoo.ogg' - -/mob/living/simple_mob/vore/woof/hostile/horrible - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof - armor = list( - "melee" = 75, - "bullet" = 75, - "laser" = 75, - "energy" = 75, - "bomb" = 75, - "bio" = 75, - "rad" = 75) - - projectiletype = /obj/item/projectile/awoo_missile/heavy - projectilesound = 'sound/voice/long_awoo.ogg' - -/obj/item/projectile/awoo_missile/heavy - damage = 50 - -/obj/item/projectile/forcebolt/harmless/awoobolt - icon_state = "force_missile" - fire_sound = 'sound/voice/long_awoo.ogg' - damage = 0 - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - hitsound_wall = 'sound/voice/bork.ogg' - -/mob/living/simple_mob/vore/woof/hostile/terrible - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof - - projectiletype = /obj/item/projectile/forcebolt/harmless/awoobolt - projectilesound = 'sound/voice/long_awoo.ogg' - -/mob/living/simple_mob/vore/woof/cass/attack_hand(mob/living/carbon/human/M as mob) - if(stat != DEAD) - return ..() - if(M.a_intent == I_HELP) - M.visible_message("[M] pets [src].", runemessage = "pets [src]") - if(do_after(M, 30 SECONDS, exclusive = TASK_USER_EXCLUSIVE, target = src)) - faction = M.faction - revive() - sight = initial(sight) - see_in_dark = initial(see_in_dark) - see_invisible = initial(see_invisible) - update_icon() - visible_message("[src] stops playing dead.", runemessage = "[src] stops playing dead") - else - M.visible_message("The petting was interrupted!!!", runemessage = "The petting was interrupted") - return - -/mob/living/simple_mob/vore/woof/hostile/aweful - maxHealth = 100 - health = 100 - var/killswitch = FALSE - - -/mob/living/simple_mob/vore/woof/hostile/aweful/Initialize() - . = ..() - var/thismany = (rand(25,500)) / 100 - resize(thismany, animate = FALSE, uncapped = TRUE, ignore_prefs = TRUE) - -/mob/living/simple_mob/vore/woof/hostile/aweful/death() - . = ..() - if(killswitch) - visible_message("\The [src] evaporates into nothing...") - qdel(src) - return - var/thismany = rand(0,3) - var/list/possiblewoofs = list(/mob/living/simple_mob/vore/woof/hostile/aweful/melee, /mob/living/simple_mob/vore/woof/hostile/aweful/ranged) - if(thismany == 0) - visible_message("\The [src] evaporates into nothing...") - if(thismany >= 1) - var/thiswoof = pick(possiblewoofs) - new thiswoof(loc, src) - visible_message("Another [src] appears!") - if(thismany >= 2) - var/thiswoof = pick(possiblewoofs) - new thiswoof(loc, src) - visible_message("Another [src] appears!") - if(thismany >= 3) - var/thiswoof = pick(possiblewoofs) - new thiswoof(loc, src) - visible_message("Another [src] appears!") - qdel(src) - -/mob/living/simple_mob/vore/woof/hostile/aweful/melee - - movement_cooldown = -2 - - ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile - -/mob/living/simple_mob/vore/woof/hostile/aweful/ranged - movement_cooldown = -2 - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof - - projectiletype = /obj/item/projectile/awoo_missile - projectilesound = 'sound/voice/long_awoo.ogg' +/datum/category_item/catalogue/fauna/woof + name = "Wildlife - Dog" + desc = "It's a relatively ordinary looking canine. \ + It has an ominous aura..." + value = CATALOGUER_REWARD_EASY + +/mob/living/simple_mob/vore/woof + name = "dog" + desc = "It is a relatively ordinary looking canine mutt! It radiates mischief!" + tt_desc = "E Canis lupus softus" + + icon_state = "woof" + icon_living = "woof" + icon_dead = "woof_dead" + icon_rest = "woof_rest" + icon = 'icons/mob/vore.dmi' + + faction = "dog" + maxHealth = 600 + health = 600 + movement_cooldown = -1 + + response_help = "pets" + response_disarm = "rudely paps" + response_harm = "punches" + + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 1 + catalogue_data = list(/datum/category_item/catalogue/fauna/woof) + + var/knockdown_chance = 20 + + 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 = 900 + + attacktext = list("nipped", "chomped", "bullied", "gnaws on") + attack_sound = 'sound/voice/bork.ogg' + friendly = list("snoofs", "nuzzles", "ruffs happily at", "smooshes on") + + ai_holder_type = /datum/ai_holder/simple_mob/woof + + mob_size = MOB_SMALL + + has_langs = list(LANGUAGE_ANIMAL, LANGUAGE_CANILUNZT, LANGUAGE_GALCOM) + say_list_type = /datum/say_list/softdog + swallowTime = 0.1 SECONDS + +/mob/living/simple_mob/vore/woof/New() + ..() + + verbs += /mob/living/proc/ventcrawl + verbs += /mob/living/proc/hide + +/datum/say_list/softdog + speak = list("Woof~", "Woof!", "Yip!", "Yap!", "Yip~", "Yap~", "Awoooooo~", "Awoo!", "AwooooooooooOOOOOOoOooOoooOoOOoooo!") + emote_hear = list("barks", "woofs", "yaps", "yips","pants", "snoofs") + emote_see = list("wags its tail", "stretches", "yawns", "swivels its ears") + say_maybe_target = list("Whuff?") + say_got_target = list("Grrrr YIP YAP!!!") + +/datum/ai_holder/simple_mob/woof + hostile = FALSE + cooperative = TRUE + retaliate = TRUE + speak_chance = 1 + wander = TRUE + +// Activate Noms! +/mob/living/simple_mob/vore/woof + vore_active = 1 + vore_capacity = 3 + vore_bump_chance = 5 + vore_bump_emote = "greedily homms at" + vore_digest_chance = 1 + vore_absorb_chance = 5 + vore_escape_chance = 10 + vore_pounce_chance = 5 + vore_ignores_undigestable = 0 + vore_default_mode = DM_HOLD + vore_icons = SA_ICON_LIVING + vore_stomach_name = "Stomach" + vore_stomach_flavor = "You have found yourself pumping on down, down, down into this extremely soft dog. The slick touches of pulsing walls roll over you in greedy fashion as you're swallowed away, the flesh forms to your figure as in an instant the world is replaced by the hot squeeze of canine gullet. And in another moment a heavy GLLRMMPTCH seals you away, the dog tossing its head eagerly, the way forward stretching to accommodate your shape as you are greedily guzzled down. The wrinkled, doughy walls pulse against you in time to the creature's steady heartbeat. The sounds of the outside world muffled into obscure tones as the wet, grumbling rolls of this soft creature's gut hold you, churning you tightly such that no part of you is spared from these gastric affections." + vore_default_contamination_flavor = "Wet" + vore_default_contamination_color = "grey" + vore_default_item_mode = IM_DIGEST + + +/mob/living/simple_mob/vore/woof/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "You have found yourself pumping on down, down, down into this extremely soft dog. The slick touches of pulsing walls roll over you in greedy fashion as you're swallowed away, the flesh forms to your figure as in an instant the world is replaced by the hot squeeze of canine gullet. And in another moment a heavy GLLRMMPTCH seals you away, the dog tossing its head eagerly, the way forward stretching to accommodate your shape as you are greedily guzzled down. The wrinkled, doughy walls pulse against you in time to the creature's steady heartbeat. The sounds of the outside world muffled into obscure tones as the wet, grumbling rolls of this soft creature's gut hold you, churning you tightly such that no part of you is spared from these gastric affections." + + B.emote_lists[DM_HOLD] = list( + "You can feel yourself shift and sway as the dog moves around. Your figure held tightly there had little room to move in that organic gloom, but every wandering step is another jostling quake that shakes through the canine frame and rocks you once again.", + "It is hard to hear much of anything over the grumbling fleshy sounds of the stomach walls pressing to you. The wet sound of flesh gliding over you too was ever-present as the walls encroach upon your personal space. And beyond that, the steady booming of the dog's heart throbs in your ears, a relaxing drone of excited thumping. Any sounds from the outside world are muffled such that they are hard to hear, as the canine walls hold on to you greedily.", + "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. Any time you press out, the walls seem to groan and flex in to smother you heavily for a few moments. ", + "When you shift your weight to try to find a more comfortable position you can feel your weight stretch the chamber around you a little more, and it responds by collapsing in on you more tightly! Forming to you with heavily insistence, grinding against your curves. Holding you firmly for a few moments, before slowly relaxing...", + "The heat of the dog's body soaks into your form and relaxes your muscles. It's easy to let yourself go limp, to be squeezed and carried by this soft predator. The sway of its body, the swing of its gait, all enough to lull anyone who likes such things into a deeply relaxed state, as you're rocked and supported, squeezed deep within the gut of this woof. Possessively held, kept.", + "Thick slime soaks your form as the dog's insides churn over you. There is no part of you that is not totally soaked in it before too long as the steady gastric motions massage you from head to toe. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back. It's very hard to get any personal space!", + "Beyond the grumbling gurgles and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed, easy to sink in against.") + + B.emote_lists[DM_ABSORB] = list( + "You can feel the weight of the dog shift as it moves around. Your figure held tightly there had absolutely no room to move in that organic gloom. Every moment those pumping walls seem to squeeze over you tighter, every wandering step the dog takes is another jostling quake that seems to sink you that much deeper into the dog's flesh, the dog's body steadily collapsing in to claim you.", + "It is hard to hear much of anything over the smothering press of stomach walls pressing to you, forming to your features. The tarry flesh you are slowly sinking into squelches here and there as it flows over your features. The sound of the dog's body absorbing you is oddly quiet. No bubbling or glooping. Just one body slowly blending into and becoming one with another. And beyond all that, the steady booming of the dog's heart throbs in your ears, moment by moment that sound seems to tug at you, coursing through you as much as the dog you are steadily becoming a part of. Any sounds from the outside world are muffled such that they are hard to hear, as you sink into the walls of this canine predator.", + "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. Any time you press out, the walls seem to simply flow over you, and allow whatever pushed out to sink in that much more. The swell on the dog's tummy shrinking that much faster... ", + "When you shift your weight to try to get some space. you can feel your weight simply sink into that flesh, the folds forming around you tightly, and the deeper you sink, the harder it gets to move. The pressure never seems to let up as the tide of flesh holding you slowly overcomes your form.", + "As the seemingly molten heat of this dog's flesh flows over you, it's easy to let yourself go limp, to just give in and become one with this creature that so obviously wanted you, and indeed, unless something happened to stop this, you soon would be... The dog tail swaying in a knowing arc as you are added to its figure. Squeezed, tucked away, kept.", + "The thick slimes that coat your form do nothing to keep the molten flesh of this dog's stomach from advancing across your figure and claiming you up. Soon there's not a single part of you that is not totally inundated in the deep press of a woof's gastric massage. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back, flowing over your form, deeper, deeper.", + "Beyond the squelching, clinging tide of dog flesh working to make the two of you one, and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed. And you realize suddenly that the dog's breathing seem to bring you relief even as you are totally smothered in the canine's insistent gastric affections!") + + B.emote_lists[DM_DIGEST] = list( + "As the dog goes about its business, you can feel the shift your weight sway on its tummy. The gurgling glorping sounds that come with the squeezing, kneading, massaging motions let you know that you're held tight, churned. Dog food.", + "It is hard to hear much of anything over the roaring gurgles of stomach walls churning over you. The wet sound of flesh grinding heavily over you too was ever-present as the walls encroach upon your personal space, lathering you in tingly, syrupy thick slimes. And beyond that, the steady booming of the dog's heart throbs in your ears, a drone of excited thumping. Any sounds from the outside world are muffled such that they are hard to hear, as the canine walls churn on to you greedily.", + "You can hear the vague dragging, creaking sounds of the flesh holding you stretching and compressing with the dog's movements. The walls seem to constantly flex and squeeze across you, pressing in against you, massaging thick slime into your figure, steadily trying to soften up your outer layers...", + "When you try to shift your weight to try to find a more comfortable position, you find that those heavy walls pumping over you make it hard to move at all. You can feel the weight of the dog pressing in all around you even without those muscles flexing and throbbing across your form. It forms to you with heavily insistence, grinding against your curves, churning that bubbling gloop into you. Holding you firm and heavy as that stomach does its work...", + "The heat of the dog's body soaks into your form and relaxes your muscles. It's easy to let yourself go limp, to just completely give in to this soft predator. The sway of its body, the swing of its gait, all enough to lull anyone who likes such things into a deeply relaxed state. Churned and slathered, massaged by doughy wrinkled walls deep within the gut of this woof. Possessively held within that needy chamber.", + "Thick slime soaks your form as the dog's insides churn over you. There is no part of you that is not totally soaked in it before too long as the steady gastric motions massage you from head to toe. Any pushes or squirms only get the affected flesh to cling more tightly, and to press back. It's very hard to get any personal space!", + "Beyond the grumbling gurgles and the ever-present drumming of the dog's heart, you can actually hear, more faintly, the whooshing of the canine's breath. The slow draw in coming with a vague tightening of your surroundings, while the dog's soft, whooshing exhales make your surroundings more relaxed, easy to sink in against. Occasionally though everything would go all tight and cramped! And somewhere up above you can hear the dog let out a dainty little belch...") + + B.digest_brute = 0.05 + B.digest_burn = 0.05 + B.mode_flags = 8 + B.belly_fullscreen = "a_tumby" + B.struggle_messages_inside = list( + "Your struggling only causes %pred's doughy gut to smother you against those wrinkled walls...", + "As you squirm, %pred's %belly flexxes over you heavily, forming you back into a small ball...", + "You push out at those heavy wrinkled walls with all your might and they collapse back in on you! Clinging and churning over you heavily for a few minutes!!!", + "As you struggle against the gut of this dog, you can feel a squeeze roll over you from the bottom to the top! The walls cling to you a little tighter then as the dog emits a soft little burp...", + "You try to squirm, but you can't even move as those heavy walls throb and pulse and churn around you.", + "You paddle against the fleshy walls of %pred's %belly, making a little space for yourself for a moment, before the wrinkled surface bounces back against you.", + "The slick walls are doughy, smushy under your fingers, and very difficult to grip! The flesh pulses under your grip in time with %pred's heartbeat.", + "Your hands slip and slide over the slick slimes of %pred's %belly as you struggle to escape! The walls pulse and squeeze around you greedily.", + "%pred lets out a happy little awoo, rocking their hips to jostle you as you squirm, while the weight of those walls closes in on you, squeezing you tightly!", + "%pred's %belly glorgles around you as you push and struggle within! The squashy walls are always reluctant to give ground, and the moment your struggles lax, they redouble their efforts in smothering all the fight out of you!") + B.struggle_messages_outside = list( + "A vague shape briefly swells on %pred's %belly as something moves inside...", + "Something shifts within %pred's %belly.", + "%pred urps as something shifts in their %belly.") + B.examine_messages = list( + "Their %belly is distended.", + "Vague shapes swell their %belly.", + "It looks like they have something solid in their %belly") + +/obj/item/projectile/awoo_missile + name = "awoo missile" + icon_state = "force_missile" + fire_sound = 'sound/voice/long_awoo.ogg' + damage = 1 + damage_type = BRUTE + check_armour = "melee" + + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + hitsound_wall = 'sound/voice/bork.ogg' + +/mob/living/simple_mob/vore/woof/cass + name = "Cass" + desc = "Well trained, comfy company. They have a pretty red bow tied into their fur. They look very soft." + + icon_state = "cass" + icon_living = "cass" + icon_dead = "cass_dead" + icon_rest = "cass_rest" + ic_revivable = 0 + + faction = "theatre" + gender = PLURAL + ai_holder_type = /datum/ai_holder/simple_mob/woof/cass + +/mob/living/simple_mob/vore/woof/cass + vore_digest_chance = 0 + vore_escape_chance = 25 + digestable = 0 + +/datum/ai_holder/simple_mob/woof/cass + retaliate = 0 + violent_breakthrough = 0 + +/datum/ai_holder/simple_mob/ranged/kiting/threatening/woof + hostile = 1 + retaliate = 1 + cooperative = TRUE + speak_chance = 1 + lose_target_timeout = 0 // Easily distracted + +/datum/ai_holder/simple_mob/woof/hostile + hostile = 1 + retaliate = 1 + +/mob/living/simple_mob/vore/woof/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + if(prob(knockdown_chance)) + L.Weaken(3) + L.visible_message(span("danger", "\The [src] pounces on \the [L]!")) + +/mob/living/simple_mob/vore/woof/hostile/melee + + movement_cooldown = -2 + + ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile + +/mob/living/simple_mob/vore/woof/hostile/ranged + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof + + projectiletype = /obj/item/projectile/awoo_missile + projectilesound = 'sound/voice/long_awoo.ogg' + +/mob/living/simple_mob/vore/woof/hostile/horrible + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof + armor = list( + "melee" = 75, + "bullet" = 75, + "laser" = 75, + "energy" = 75, + "bomb" = 75, + "bio" = 75, + "rad" = 75) + + projectiletype = /obj/item/projectile/awoo_missile/heavy + projectilesound = 'sound/voice/long_awoo.ogg' + +/obj/item/projectile/awoo_missile/heavy + damage = 50 + +/obj/item/projectile/forcebolt/harmless/awoobolt + icon_state = "force_missile" + fire_sound = 'sound/voice/long_awoo.ogg' + damage = 0 + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + hitsound_wall = 'sound/voice/bork.ogg' + +/mob/living/simple_mob/vore/woof/hostile/terrible + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof + + projectiletype = /obj/item/projectile/forcebolt/harmless/awoobolt + projectilesound = 'sound/voice/long_awoo.ogg' + +/mob/living/simple_mob/vore/woof/cass/attack_hand(mob/living/carbon/human/M as mob) + if(stat != DEAD) + return ..() + if(M.a_intent == I_HELP) + M.visible_message("[M] pets [src].", runemessage = "pets [src]") + if(do_after(M, 30 SECONDS, exclusive = TASK_USER_EXCLUSIVE, target = src)) + faction = M.faction + revive() + sight = initial(sight) + see_in_dark = initial(see_in_dark) + see_invisible = initial(see_invisible) + update_icon() + visible_message("[src] stops playing dead.", runemessage = "[src] stops playing dead") + else + M.visible_message("The petting was interrupted!!!", runemessage = "The petting was interrupted") + return + +/mob/living/simple_mob/vore/woof/hostile/aweful + maxHealth = 100 + health = 100 + var/killswitch = FALSE + + +/mob/living/simple_mob/vore/woof/hostile/aweful/Initialize() + . = ..() + var/thismany = (rand(25,500)) / 100 + resize(thismany, animate = FALSE, uncapped = TRUE, ignore_prefs = TRUE) + +/mob/living/simple_mob/vore/woof/hostile/aweful/death() + . = ..() + if(killswitch) + visible_message("\The [src] evaporates into nothing...") + qdel(src) + return + var/thismany = rand(0,3) + var/list/possiblewoofs = list(/mob/living/simple_mob/vore/woof/hostile/aweful/melee, /mob/living/simple_mob/vore/woof/hostile/aweful/ranged) + if(thismany == 0) + visible_message("\The [src] evaporates into nothing...") + if(thismany >= 1) + var/thiswoof = pick(possiblewoofs) + new thiswoof(loc, src) + visible_message("Another [src] appears!") + if(thismany >= 2) + var/thiswoof = pick(possiblewoofs) + new thiswoof(loc, src) + visible_message("Another [src] appears!") + if(thismany >= 3) + var/thiswoof = pick(possiblewoofs) + new thiswoof(loc, src) + visible_message("Another [src] appears!") + qdel(src) + +/mob/living/simple_mob/vore/woof/hostile/aweful/melee + + movement_cooldown = -2 + + ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile + +/mob/living/simple_mob/vore/woof/hostile/aweful/ranged + movement_cooldown = -2 + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof + + projectiletype = /obj/item/projectile/awoo_missile + projectilesound = 'sound/voice/long_awoo.ogg' diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm index 8d49313493..52f3576999 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm @@ -1,48 +1,48 @@ -/mob/living/simple_mob/vore/weretiger - name = "weretiger" - desc = "A big scary, albino were-tiger! At least they seem decently mannered..." - tt_desc = "Tigris Thropus Album" - - icon_state = "bigcat" - icon_living = "bigcat" - icon_dead = "bigcat_dead" - icon_rest = null - icon = 'icons/mob/bigcat.dmi' - - faction = "panther" - maxHealth = 150 - health = 150 - movement_cooldown = -1 - - response_help = "pats" - response_disarm = "gently pushes aside" - response_harm = "hits" - - harm_intent_damage = 15 - melee_damage_lower = 10 - melee_damage_upper = 20 - attacktext = list("mauled") - - say_list_type = /datum/say_list/weretiger - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - - pixel_x = -16 - default_pixel_x = -16 - - has_hands = 1 - - can_be_drop_prey = FALSE //CHOMP Add - -// Nomnomn -/mob/living/simple_mob/vore/weretiger - vore_active = 1 - vore_bump_chance = 10 - vore_bump_emote = "sneaks up on" - vore_pounce_chance = 50 - vore_default_mode = DM_HOLD - vore_icons = SA_ICON_LIVING - -/datum/say_list/weretiger - speak = list("Gruff.","ROAR!","Growl.") - emote_hear = list("growls!","grunts.") - emote_see = list("pads around noisily.","scratches the floor thoroughly.") +/mob/living/simple_mob/vore/weretiger + name = "weretiger" + desc = "A big scary, albino were-tiger! At least they seem decently mannered..." + tt_desc = "Tigris Thropus Album" + + icon_state = "bigcat" + icon_living = "bigcat" + icon_dead = "bigcat_dead" + icon_rest = null + icon = 'icons/mob/bigcat.dmi' + + faction = "panther" + maxHealth = 150 + health = 150 + movement_cooldown = -1 + + response_help = "pats" + response_disarm = "gently pushes aside" + response_harm = "hits" + + harm_intent_damage = 15 + melee_damage_lower = 10 + melee_damage_upper = 20 + attacktext = list("mauled") + + say_list_type = /datum/say_list/weretiger + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + + pixel_x = -16 + default_pixel_x = -16 + + has_hands = 1 + + can_be_drop_prey = FALSE //CHOMP Add + +// Nomnomn +/mob/living/simple_mob/vore/weretiger + vore_active = 1 + vore_bump_chance = 10 + vore_bump_emote = "sneaks up on" + vore_pounce_chance = 50 + vore_default_mode = DM_HOLD + vore_icons = SA_ICON_LIVING + +/datum/say_list/weretiger + speak = list("Gruff.","ROAR!","Growl.") + emote_hear = list("growls!","grunts.") + emote_see = list("pads around noisily.","scratches the floor thoroughly.") diff --git a/code/modules/mob/living/status_indicators.dm b/code/modules/mob/living/status_indicators.dm index 4f61b7ad34..bbb3f03268 100644 --- a/code/modules/mob/living/status_indicators.dm +++ b/code/modules/mob/living/status_indicators.dm @@ -1,87 +1,87 @@ -#define STATUS_INDICATOR_Y_OFFSET 2 // Offset from the edge of the icon sprite, so 32 pixels plus whatever number is here. -#define STATUS_INDICATOR_ICON_X_SIZE 16 // Don't need to care about the Y size due to the origin being on the bottom side. -#define STATUS_INDICATOR_ICON_MARGIN 2 // The space between two status indicators. - -// 'Status indicators' are icons that display over a mob's head, that visually indicate that the mob is suffering -// from some kind of effect, such as being stunned, blinded, confused, asleep, etc. -// The icons are managed automatically by the mob itself, so that their positions will shift if another indicator is added, -// and it will try to always be above the mob sprite, even for larger sprites like xenos. - -/mob/living - var/list/status_indicators = null // Will become a list as needed. - -// Adds an icon_state, or image overlay, to the list of indicators to be managed automatically. -// Also initializes the list if one doesn't exist. -/mob/living/proc/add_status_indicator(image/thing) - if(get_status_indicator(thing)) // No duplicates, please. - return - - if(!istype(thing, /image)) - thing = image(icon = 'icons/mob/status_indicators.dmi', icon_state = thing) - - LAZYADD(status_indicators, thing) - handle_status_indicators() - -// Similar to above but removes it instead, and nulls the list if it becomes empty as a result. -/mob/living/proc/remove_status_indicator(image/thing) - thing = get_status_indicator(thing) - - cut_overlay(thing) - LAZYREMOVE(status_indicators, thing) - handle_status_indicators() - -/mob/living/proc/get_status_indicator(image/thing) - if(!istype(thing, /image)) - for(var/image/I in status_indicators) - if(I.icon_state == thing) - return I - return LAZYACCESS(status_indicators, LAZYFIND(status_indicators, thing)) - -// Refreshes the indicators over a mob's head. Should only be called when adding or removing a status indicator with the above procs, -// or when the mob changes size visually for some reason. -/mob/living/proc/handle_status_indicators() - // First, get rid of all the overlays. - for(var/thing in status_indicators) - cut_overlay(thing) - - if(!LAZYLEN(status_indicators)) - return - - if(stat == DEAD) - return - - // Now put them back on in the right spot. - var/our_sprite_x = icon_expected_width * get_icon_scale_x() - var/our_sprite_y = icon_expected_height * get_icon_scale_y() - - var/x_offset = our_sprite_x // Add your own offset here later if you want. - var/y_offset = our_sprite_y + STATUS_INDICATOR_Y_OFFSET - - // Calculates how 'long' the row of indicators and the margin between them should be. - // The goal is to have the center of that row be horizontally aligned with the sprite's center. - var/expected_status_indicator_length = (STATUS_INDICATOR_ICON_X_SIZE * status_indicators.len) + (STATUS_INDICATOR_ICON_MARGIN * max(status_indicators.len - 1, 0)) - var/current_x_position = (x_offset / 2) - (expected_status_indicator_length / 2) - - // In /mob/living's `update_transform()`, the sprite is horizontally shifted when scaled up, so that the center of the sprite doesn't move to the right. - // Because of that, this adjustment needs to happen with the future indicator row as well, or it will look bad. - current_x_position -= (icon_expected_width / 2) * (get_icon_scale_y() - 1) - - // Now the indicator row can actually be built. - for(var/image/I as anything in status_indicators) - - // This is a semi-HUD element, in a similar manner as medHUDs, in that they're 'above' everything else in the world, - // but don't pierce obfuscation layers such as blindness or darkness, unlike actual HUD elements like inventory slots. - I.plane = PLANE_STATUS - I.layer = HUD_LAYER - I.appearance_flags = PIXEL_SCALE|TILE_BOUND|NO_CLIENT_COLOR|RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM|KEEP_APART - I.pixel_y = y_offset - I.pixel_x = current_x_position - add_overlay(I) - // Adding the margin space every time saves a conditional check on the last iteration, - // and it won't cause any issues since no more icons will be added, and the var is not used for anything else. - current_x_position += STATUS_INDICATOR_ICON_X_SIZE + STATUS_INDICATOR_ICON_MARGIN - - -#undef STATUS_INDICATOR_Y_OFFSET -#undef STATUS_INDICATOR_ICON_X_SIZE -#undef STATUS_INDICATOR_ICON_MARGIN +#define STATUS_INDICATOR_Y_OFFSET 2 // Offset from the edge of the icon sprite, so 32 pixels plus whatever number is here. +#define STATUS_INDICATOR_ICON_X_SIZE 16 // Don't need to care about the Y size due to the origin being on the bottom side. +#define STATUS_INDICATOR_ICON_MARGIN 2 // The space between two status indicators. + +// 'Status indicators' are icons that display over a mob's head, that visually indicate that the mob is suffering +// from some kind of effect, such as being stunned, blinded, confused, asleep, etc. +// The icons are managed automatically by the mob itself, so that their positions will shift if another indicator is added, +// and it will try to always be above the mob sprite, even for larger sprites like xenos. + +/mob/living + var/list/status_indicators = null // Will become a list as needed. + +// Adds an icon_state, or image overlay, to the list of indicators to be managed automatically. +// Also initializes the list if one doesn't exist. +/mob/living/proc/add_status_indicator(image/thing) + if(get_status_indicator(thing)) // No duplicates, please. + return + + if(!istype(thing, /image)) + thing = image(icon = 'icons/mob/status_indicators.dmi', icon_state = thing) + + LAZYADD(status_indicators, thing) + handle_status_indicators() + +// Similar to above but removes it instead, and nulls the list if it becomes empty as a result. +/mob/living/proc/remove_status_indicator(image/thing) + thing = get_status_indicator(thing) + + cut_overlay(thing) + LAZYREMOVE(status_indicators, thing) + handle_status_indicators() + +/mob/living/proc/get_status_indicator(image/thing) + if(!istype(thing, /image)) + for(var/image/I in status_indicators) + if(I.icon_state == thing) + return I + return LAZYACCESS(status_indicators, LAZYFIND(status_indicators, thing)) + +// Refreshes the indicators over a mob's head. Should only be called when adding or removing a status indicator with the above procs, +// or when the mob changes size visually for some reason. +/mob/living/proc/handle_status_indicators() + // First, get rid of all the overlays. + for(var/thing in status_indicators) + cut_overlay(thing) + + if(!LAZYLEN(status_indicators)) + return + + if(stat == DEAD) + return + + // Now put them back on in the right spot. + var/our_sprite_x = icon_expected_width * get_icon_scale_x() + var/our_sprite_y = icon_expected_height * get_icon_scale_y() + + var/x_offset = our_sprite_x // Add your own offset here later if you want. + var/y_offset = our_sprite_y + STATUS_INDICATOR_Y_OFFSET + + // Calculates how 'long' the row of indicators and the margin between them should be. + // The goal is to have the center of that row be horizontally aligned with the sprite's center. + var/expected_status_indicator_length = (STATUS_INDICATOR_ICON_X_SIZE * status_indicators.len) + (STATUS_INDICATOR_ICON_MARGIN * max(status_indicators.len - 1, 0)) + var/current_x_position = (x_offset / 2) - (expected_status_indicator_length / 2) + + // In /mob/living's `update_transform()`, the sprite is horizontally shifted when scaled up, so that the center of the sprite doesn't move to the right. + // Because of that, this adjustment needs to happen with the future indicator row as well, or it will look bad. + current_x_position -= (icon_expected_width / 2) * (get_icon_scale_y() - 1) + + // Now the indicator row can actually be built. + for(var/image/I as anything in status_indicators) + + // This is a semi-HUD element, in a similar manner as medHUDs, in that they're 'above' everything else in the world, + // but don't pierce obfuscation layers such as blindness or darkness, unlike actual HUD elements like inventory slots. + I.plane = PLANE_STATUS + I.layer = HUD_LAYER + I.appearance_flags = PIXEL_SCALE|TILE_BOUND|NO_CLIENT_COLOR|RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM|KEEP_APART + I.pixel_y = y_offset + I.pixel_x = current_x_position + add_overlay(I) + // Adding the margin space every time saves a conditional check on the last iteration, + // and it won't cause any issues since no more icons will be added, and the var is not used for anything else. + current_x_position += STATUS_INDICATOR_ICON_X_SIZE + STATUS_INDICATOR_ICON_MARGIN + + +#undef STATUS_INDICATOR_Y_OFFSET +#undef STATUS_INDICATOR_ICON_X_SIZE +#undef STATUS_INDICATOR_ICON_MARGIN diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index af4923a6a7..45b7ad1999 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,18 +1,18 @@ -/mob/Logout() - SStgui.on_logout(src) // Cleanup any TGUIs the user has open - player_list -= src - disconnect_time = world.realtime //VOREStation Addition: logging when we disappear. - update_client_z(null) - log_access_out(src) - unset_machine() - if(admin_datums[src.ckey]) - message_admins("Staff logout: [key_name(src)]") // CHOMPEdit: Admin logout notice displays no matter what//Edit2: STAFF - if(ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. - var/admins_number = GLOB.admins.len - - if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. - send2adminirc("[key_name(src)] logged out - no more admins online.") - set_listening(NON_LISTENING_ATOM) //maybe remove this, even if it will cause a teensy bit more lag - ..() - - return 1 +/mob/Logout() + SStgui.on_logout(src) // Cleanup any TGUIs the user has open + player_list -= src + disconnect_time = world.realtime //VOREStation Addition: logging when we disappear. + update_client_z(null) + log_access_out(src) + unset_machine() + if(admin_datums[src.ckey]) + message_admins("Staff logout: [key_name(src)]") // CHOMPEdit: Admin logout notice displays no matter what//Edit2: STAFF + if(ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + var/admins_number = GLOB.admins.len + + if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. + send2adminirc("[key_name(src)] logged out - no more admins online.") + set_listening(NON_LISTENING_ATOM) //maybe remove this, even if it will cause a teensy bit more lag + ..() + + return 1 diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 86b22c3da4..da70bd5c9a 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -1,427 +1,427 @@ -#define UPGRADE_COOLDOWN 40 -#define UPGRADE_KILL_TIMER 100 - -///Process_Grab() -///Called by client/Move() -///Checks to see if you are grabbing or being grabbed by anything and if moving will affect your grab. -/client/proc/Process_Grab() - //if we are being grabbed - if(isliving(mob)) - var/mob/living/L = mob - if(!L.canmove && L.grabbed_by.len) - L.resist() //shortcut for resisting grabs - - //if we are grabbing someone - for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand)) - G.reset_kill_state() //no wandering across the station/asteroid while choking someone - -/obj/item/weapon/grab - name = "grab" - icon = 'icons/mob/screen1.dmi' - icon_state = "reinforce" - flags = 0 - var/obj/screen/grab/hud = null - var/mob/living/affecting = null - var/mob/living/carbon/human/assailant = null - var/state = GRAB_PASSIVE - - var/allow_upgrade = 1 - var/last_action = 0 - var/last_hit_zone = 0 - var/force_down //determines if the affecting mob will be pinned to the ground - var/dancing //determines if assailant and affecting keep looking at each other. Basically a wrestling position - - abstract = 1 - item_state = "nothing" - w_class = ITEMSIZE_HUGE - destroy_on_drop = TRUE //VOREStation Edit - - -/obj/item/weapon/grab/New(mob/user, mob/victim) - ..() - loc = user - assailant = user - affecting = victim - - if(affecting.anchored || !assailant.Adjacent(victim)) - qdel(src) - return - - affecting.grabbed_by += src - affecting.reveal("You are revealed as [assailant] grabs you.") - assailant.reveal("You reveal yourself as you grab [affecting].") - - hud = new /obj/screen/grab(src) - hud.icon_state = "reinforce" - icon_state = "grabbed" - hud.name = "reinforce grab" - hud.master = src - - //check if assailant is grabbed by victim as well - if(assailant.grabbed_by) - for (var/obj/item/weapon/grab/G in assailant.grabbed_by) - if(G.assailant == affecting && G.affecting == assailant) - G.dancing = 1 - G.adjust_position() - dancing = 1 - - //stop pulling the affected - if(assailant.pulling == affecting) - assailant.stop_pulling() - - adjust_position() - - -//Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code. -/obj/item/weapon/grab/proc/throw_held() - if(affecting) - if(affecting.buckled) - return null - if(state >= GRAB_AGGRESSIVE) - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1) - return affecting - - return null - - -//This makes sure that the grab screen object is displayed in the correct hand. -/obj/item/weapon/grab/proc/synch() //why is this needed? - if(QDELETED(src)) - return - if(affecting) - if(assailant.r_hand == src) - hud.screen_loc = ui_rhand - else - hud.screen_loc = ui_lhand - -/obj/item/weapon/grab/process() - if(QDELETED(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC - return PROCESS_KILL - - confirm() - if(!assailant) - qdel(src) // Same here, except we're trying to delete ourselves. - return PROCESS_KILL - - if(assailant.client) - assailant.client.screen -= hud - assailant.client.screen += hud - - if(state <= GRAB_AGGRESSIVE) - allow_upgrade = 1 - //disallow upgrading if we're grabbing more than one person - if((assailant.l_hand && assailant.l_hand != src && istype(assailant.l_hand, /obj/item/weapon/grab))) - var/obj/item/weapon/grab/G = assailant.l_hand - if(G.affecting != affecting) - allow_upgrade = 0 - if((assailant.r_hand && assailant.r_hand != src && istype(assailant.r_hand, /obj/item/weapon/grab))) - var/obj/item/weapon/grab/G = assailant.r_hand - if(G.affecting != affecting) - allow_upgrade = 0 - - //disallow upgrading past aggressive if we're being grabbed aggressively - for(var/obj/item/weapon/grab/G in affecting.grabbed_by) - if(G == src) continue - if(G.state >= GRAB_AGGRESSIVE) - allow_upgrade = 0 - - if(allow_upgrade) - if(state < GRAB_AGGRESSIVE) - hud.icon_state = "reinforce" - else - hud.icon_state = "reinforce1" - else - hud.icon_state = "!reinforce" - - if(state >= GRAB_AGGRESSIVE) - affecting.drop_l_hand() - affecting.drop_r_hand() - - if(iscarbon(affecting)) - handle_eye_mouth_covering(affecting, assailant, assailant.zone_sel.selecting) - - if(force_down) - if(affecting.loc != assailant.loc || size_difference(affecting, assailant) > 0) - force_down = 0 - else - affecting.Weaken(2) - - if(state >= GRAB_NECK) - affecting.Stun(3) - if(isliving(affecting)) - var/mob/living/L = affecting - L.adjustOxyLoss(1) - - if(state >= GRAB_KILL) - //affecting.apply_effect(STUTTER, 5) //would do this, but affecting isn't declared as mob/living for some stupid reason. - affecting.stuttering = max(affecting.stuttering, 5) //It will hamper your voice, being choked and all. - affecting.Weaken(5) //Should keep you down unless you get help. - affecting.losebreath = max(affecting.losebreath + 2, 3) - - adjust_position() - -/obj/item/weapon/grab/proc/handle_eye_mouth_covering(mob/living/carbon/target, mob/user, var/target_zone) - var/announce = (target_zone != last_hit_zone) //only display messages when switching between different target zones - last_hit_zone = target_zone - - switch(target_zone) - if(O_MOUTH) - if(announce) - user.visible_message("\The [user] covers [target]'s mouth!") - if(target.silent < 3) - target.silent = 3 - if(O_EYES) - if(announce) - assailant.visible_message("[assailant] covers [affecting]'s eyes!") - if(affecting.eye_blind < 3) - affecting.Blind(3) - if(BP_HEAD) - if(force_down) - if(user.a_intent == I_HELP) - if(announce) - assailant.visible_message("[assailant] sits on [target]'s face!") - //VOREStation Edit End - -/obj/item/weapon/grab/attack_self() - return s_click(hud) - - -//Updating pixelshift, position and direction -//Gets called on process, when the grab gets upgraded or the assailant moves -/obj/item/weapon/grab/proc/adjust_position() - if(!affecting) - qdel(src) - return - if(affecting.buckled) - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING) - return - if(affecting.lying && state != GRAB_KILL) - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) - if(force_down) - affecting.set_dir(SOUTH) //face up - return - var/shift = 0 - var/adir = get_dir(assailant, affecting) - affecting.layer = MOB_LAYER - switch(state) - if(GRAB_PASSIVE) - shift = 8 - if(dancing) //look at partner - shift = 10 - assailant.set_dir(get_dir(assailant, affecting)) - if(GRAB_AGGRESSIVE) - shift = 12 - if(GRAB_NECK, GRAB_UPGRADING) - shift = -10 - adir = assailant.dir - affecting.set_dir(assailant.dir) - affecting.loc = assailant.loc - if(GRAB_KILL) - shift = 0 - adir = 1 - affecting.set_dir(SOUTH) //face up - affecting.loc = assailant.loc - - switch(adir) - if(NORTH) - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y =-shift, 5, 1, LINEAR_EASING) - affecting.layer = BELOW_MOB_LAYER - if(SOUTH) - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = shift, 5, 1, LINEAR_EASING) - if(WEST) - animate(affecting, pixel_x = shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) - if(EAST) - animate(affecting, pixel_x =-shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) - -/obj/item/weapon/grab/proc/s_click(obj/screen/S) - if(QDELETED(src)) - return - if(!affecting) - return - if(state == GRAB_UPGRADING) - return - if(world.time < (last_action + UPGRADE_COOLDOWN)) - return - if(!assailant.canmove || assailant.lying) - qdel(src) - return - - var/datum/gender/TU = gender_datums[assailant.get_visible_gender()] - - last_action = world.time - - if(state < GRAB_AGGRESSIVE) - if(!allow_upgrade) - return - if(!affecting.lying || size_difference(affecting, assailant) > 0) - assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!") - else - assailant.visible_message("[assailant] pins [affecting] down to the ground (now hands)!") - apply_pinning(affecting, assailant) - - state = GRAB_AGGRESSIVE - icon_state = "grabbed1" - hud.icon_state = "reinforce1" - add_attack_logs(assailant, affecting, "Aggressively grabbed", FALSE) // Not important enough to notify admins, but still helpful. - else if(state < GRAB_NECK) - if(isslime(affecting)) - to_chat(assailant, "You squeeze [affecting], but nothing interesting happens.") - return - - assailant.visible_message("[assailant] has reinforced [TU.his] grip on [affecting] (now neck)!") - state = GRAB_NECK - icon_state = "grabbed+1" - assailant.set_dir(get_dir(assailant, affecting)) - add_attack_logs(assailant,affecting,"Neck grabbed") - hud.icon_state = "kill" - hud.name = "kill" - affecting.Stun(10) //10 ticks of ensured grab - else if(state < GRAB_UPGRADING) - assailant.visible_message("[assailant] starts to tighten [TU.his] grip on [affecting]'s neck!") - hud.icon_state = "kill1" - - state = GRAB_KILL - assailant.visible_message("[assailant] has tightened [TU.his] grip on [affecting]'s neck!") - add_attack_logs(assailant,affecting,"Strangled") - affecting.setClickCooldown(10) - affecting.AdjustLosebreath(1) - affecting.set_dir(WEST) - adjust_position() - -//This is used to make sure the victim hasn't managed to yackety sax away before using the grab. -/obj/item/weapon/grab/proc/confirm() - if(!assailant || !affecting) - qdel(src) - return 0 - - if(affecting) - if(!isturf(assailant.loc) || ( !isturf(affecting.loc) || assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1) ) - qdel(src) - return 0 - - return 1 - -/obj/item/weapon/grab/attack(mob/M, mob/living/user) - if(QDELETED(src)) - return - if(!affecting) - return - if(world.time < (last_action + 20)) - return - - last_action = world.time - reset_kill_state() //using special grab moves will interrupt choking them - - //clicking on the victim while grabbing them - if(M == affecting) - if(ishuman(affecting)) - var/mob/living/carbon/human/H = affecting - var/hit_zone = assailant.zone_sel.selecting - flick(hud.icon_state, hud) - switch(assailant.a_intent) - if(I_HELP) - if(force_down) - to_chat(assailant, "You are no longer pinning [affecting] to the ground.") - force_down = 0 - return - if(state >= GRAB_AGGRESSIVE) - H.apply_pressure(assailant, hit_zone) - else - inspect_organ(affecting, assailant, hit_zone) - - if(I_GRAB) - jointlock(affecting, assailant, hit_zone) - - if(I_HURT) - if(hit_zone == O_EYES) - attack_eye(affecting, assailant) - else if(hit_zone == BP_HEAD) - headbutt(affecting, assailant) - else - dislocate(affecting, assailant, hit_zone) - - if(I_DISARM) - pin_down(affecting, assailant) - - //clicking on yourself while grabbing them - if(M == assailant && state >= GRAB_AGGRESSIVE) - devour(affecting, assailant) - -/obj/item/weapon/grab/dropped() - loc = null - if(!QDELETED(src)) - qdel(src) - -/obj/item/weapon/grab/proc/reset_kill_state() - if(state == GRAB_KILL) - var/datum/gender/T = gender_datums[assailant.get_visible_gender()] - assailant.visible_message("[assailant] lost [T.his] tight grip on [affecting]'s neck!") - hud.icon_state = "kill" - state = GRAB_NECK - -/obj/item/weapon/grab/proc/handle_resist() - var/grab_name - var/break_strength = 1 - var/list/break_chance_table = list(100) - switch(state) - //if(GRAB_PASSIVE) - - if(GRAB_AGGRESSIVE) - grab_name = "grip" - //Being knocked down makes it harder to break a grab, so it is easier to cuff someone who is down without forcing them into unconsciousness. - if(!affecting.incapacitated(INCAPACITATION_KNOCKDOWN)) - break_strength++ - break_chance_table = list(15, 60, 100) - - if(GRAB_NECK) - grab_name = "headlock" - //If the you move when grabbing someone then it's easier for them to break free. Same if the affected mob is immune to stun. - if(world.time - assailant.l_move_time < 30 || !affecting.stunned) - break_strength++ - break_chance_table = list(3, 18, 45, 100) - - - if(GRAB_KILL) - grab_name = "stranglehold" - break_chance_table = list(5, 20, 40, 80, 100) - - //It's easier to break out of a grab by a smaller mob - break_strength += max(size_difference(affecting, assailant), 0) - //CHOMPEdit Begin - var/prob_mult = 1 - var/mob/living/carbon/human/grabbee = affecting - var/mob/living/carbon/human/grabber = assailant - if(istype(grabbee)) - prob_mult /= grabbee.species.grab_resist_divisor_self - break_strength += grabbee.species.grab_power_self - if(istype(grabber)) - prob_mult /= grabber.species.grab_resist_divisor_victims - break_strength += grabber.species.grab_power_victims - - var/break_chance = CLAMP(prob_mult*break_chance_table[CLAMP(break_strength, 1, break_chance_table.len)],0,100) - //CHOMPEdit End - if(prob(break_chance)) - if(state == GRAB_KILL) - reset_kill_state() - return - else if(grab_name) - affecting.visible_message("[affecting] has broken free of [assailant]'s [grab_name]!") - qdel(src) - -//returns the number of size categories between affecting and assailant, rounded. Positive means A is larger than B -/obj/item/weapon/grab/proc/size_difference(mob/A, mob/B) - return mob_size_difference(A.mob_size, B.mob_size) - -/obj/item/weapon/grab/Destroy() - animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING) - affecting.reset_plane_and_layer() - if(affecting) - affecting.grabbed_by -= src - affecting = null - if(assailant) - if(assailant.client) - assailant.client.screen -= hud - assailant = null - qdel(hud) - hud = null - return ..() +#define UPGRADE_COOLDOWN 40 +#define UPGRADE_KILL_TIMER 100 + +///Process_Grab() +///Called by client/Move() +///Checks to see if you are grabbing or being grabbed by anything and if moving will affect your grab. +/client/proc/Process_Grab() + //if we are being grabbed + if(isliving(mob)) + var/mob/living/L = mob + if(!L.canmove && L.grabbed_by.len) + L.resist() //shortcut for resisting grabs + + //if we are grabbing someone + for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand)) + G.reset_kill_state() //no wandering across the station/asteroid while choking someone + +/obj/item/weapon/grab + name = "grab" + icon = 'icons/mob/screen1.dmi' + icon_state = "reinforce" + flags = 0 + var/obj/screen/grab/hud = null + var/mob/living/affecting = null + var/mob/living/carbon/human/assailant = null + var/state = GRAB_PASSIVE + + var/allow_upgrade = 1 + var/last_action = 0 + var/last_hit_zone = 0 + var/force_down //determines if the affecting mob will be pinned to the ground + var/dancing //determines if assailant and affecting keep looking at each other. Basically a wrestling position + + abstract = 1 + item_state = "nothing" + w_class = ITEMSIZE_HUGE + destroy_on_drop = TRUE //VOREStation Edit + + +/obj/item/weapon/grab/New(mob/user, mob/victim) + ..() + loc = user + assailant = user + affecting = victim + + if(affecting.anchored || !assailant.Adjacent(victim)) + qdel(src) + return + + affecting.grabbed_by += src + affecting.reveal("You are revealed as [assailant] grabs you.") + assailant.reveal("You reveal yourself as you grab [affecting].") + + hud = new /obj/screen/grab(src) + hud.icon_state = "reinforce" + icon_state = "grabbed" + hud.name = "reinforce grab" + hud.master = src + + //check if assailant is grabbed by victim as well + if(assailant.grabbed_by) + for (var/obj/item/weapon/grab/G in assailant.grabbed_by) + if(G.assailant == affecting && G.affecting == assailant) + G.dancing = 1 + G.adjust_position() + dancing = 1 + + //stop pulling the affected + if(assailant.pulling == affecting) + assailant.stop_pulling() + + adjust_position() + + +//Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code. +/obj/item/weapon/grab/proc/throw_held() + if(affecting) + if(affecting.buckled) + return null + if(state >= GRAB_AGGRESSIVE) + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1) + return affecting + + return null + + +//This makes sure that the grab screen object is displayed in the correct hand. +/obj/item/weapon/grab/proc/synch() //why is this needed? + if(QDELETED(src)) + return + if(affecting) + if(assailant.r_hand == src) + hud.screen_loc = ui_rhand + else + hud.screen_loc = ui_lhand + +/obj/item/weapon/grab/process() + if(QDELETED(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC + return PROCESS_KILL + + confirm() + if(!assailant) + qdel(src) // Same here, except we're trying to delete ourselves. + return PROCESS_KILL + + if(assailant.client) + assailant.client.screen -= hud + assailant.client.screen += hud + + if(state <= GRAB_AGGRESSIVE) + allow_upgrade = 1 + //disallow upgrading if we're grabbing more than one person + if((assailant.l_hand && assailant.l_hand != src && istype(assailant.l_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = assailant.l_hand + if(G.affecting != affecting) + allow_upgrade = 0 + if((assailant.r_hand && assailant.r_hand != src && istype(assailant.r_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = assailant.r_hand + if(G.affecting != affecting) + allow_upgrade = 0 + + //disallow upgrading past aggressive if we're being grabbed aggressively + for(var/obj/item/weapon/grab/G in affecting.grabbed_by) + if(G == src) continue + if(G.state >= GRAB_AGGRESSIVE) + allow_upgrade = 0 + + if(allow_upgrade) + if(state < GRAB_AGGRESSIVE) + hud.icon_state = "reinforce" + else + hud.icon_state = "reinforce1" + else + hud.icon_state = "!reinforce" + + if(state >= GRAB_AGGRESSIVE) + affecting.drop_l_hand() + affecting.drop_r_hand() + + if(iscarbon(affecting)) + handle_eye_mouth_covering(affecting, assailant, assailant.zone_sel.selecting) + + if(force_down) + if(affecting.loc != assailant.loc || size_difference(affecting, assailant) > 0) + force_down = 0 + else + affecting.Weaken(2) + + if(state >= GRAB_NECK) + affecting.Stun(3) + if(isliving(affecting)) + var/mob/living/L = affecting + L.adjustOxyLoss(1) + + if(state >= GRAB_KILL) + //affecting.apply_effect(STUTTER, 5) //would do this, but affecting isn't declared as mob/living for some stupid reason. + affecting.stuttering = max(affecting.stuttering, 5) //It will hamper your voice, being choked and all. + affecting.Weaken(5) //Should keep you down unless you get help. + affecting.losebreath = max(affecting.losebreath + 2, 3) + + adjust_position() + +/obj/item/weapon/grab/proc/handle_eye_mouth_covering(mob/living/carbon/target, mob/user, var/target_zone) + var/announce = (target_zone != last_hit_zone) //only display messages when switching between different target zones + last_hit_zone = target_zone + + switch(target_zone) + if(O_MOUTH) + if(announce) + user.visible_message("\The [user] covers [target]'s mouth!") + if(target.silent < 3) + target.silent = 3 + if(O_EYES) + if(announce) + assailant.visible_message("[assailant] covers [affecting]'s eyes!") + if(affecting.eye_blind < 3) + affecting.Blind(3) + if(BP_HEAD) + if(force_down) + if(user.a_intent == I_HELP) + if(announce) + assailant.visible_message("[assailant] sits on [target]'s face!") + //VOREStation Edit End + +/obj/item/weapon/grab/attack_self() + return s_click(hud) + + +//Updating pixelshift, position and direction +//Gets called on process, when the grab gets upgraded or the assailant moves +/obj/item/weapon/grab/proc/adjust_position() + if(!affecting) + qdel(src) + return + if(affecting.buckled) + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING) + return + if(affecting.lying && state != GRAB_KILL) + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) + if(force_down) + affecting.set_dir(SOUTH) //face up + return + var/shift = 0 + var/adir = get_dir(assailant, affecting) + affecting.layer = MOB_LAYER + switch(state) + if(GRAB_PASSIVE) + shift = 8 + if(dancing) //look at partner + shift = 10 + assailant.set_dir(get_dir(assailant, affecting)) + if(GRAB_AGGRESSIVE) + shift = 12 + if(GRAB_NECK, GRAB_UPGRADING) + shift = -10 + adir = assailant.dir + affecting.set_dir(assailant.dir) + affecting.loc = assailant.loc + if(GRAB_KILL) + shift = 0 + adir = 1 + affecting.set_dir(SOUTH) //face up + affecting.loc = assailant.loc + + switch(adir) + if(NORTH) + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y =-shift, 5, 1, LINEAR_EASING) + affecting.layer = BELOW_MOB_LAYER + if(SOUTH) + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = shift, 5, 1, LINEAR_EASING) + if(WEST) + animate(affecting, pixel_x = shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) + if(EAST) + animate(affecting, pixel_x =-shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING) + +/obj/item/weapon/grab/proc/s_click(obj/screen/S) + if(QDELETED(src)) + return + if(!affecting) + return + if(state == GRAB_UPGRADING) + return + if(world.time < (last_action + UPGRADE_COOLDOWN)) + return + if(!assailant.canmove || assailant.lying) + qdel(src) + return + + var/datum/gender/TU = gender_datums[assailant.get_visible_gender()] + + last_action = world.time + + if(state < GRAB_AGGRESSIVE) + if(!allow_upgrade) + return + if(!affecting.lying || size_difference(affecting, assailant) > 0) + assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!") + else + assailant.visible_message("[assailant] pins [affecting] down to the ground (now hands)!") + apply_pinning(affecting, assailant) + + state = GRAB_AGGRESSIVE + icon_state = "grabbed1" + hud.icon_state = "reinforce1" + add_attack_logs(assailant, affecting, "Aggressively grabbed", FALSE) // Not important enough to notify admins, but still helpful. + else if(state < GRAB_NECK) + if(isslime(affecting)) + to_chat(assailant, "You squeeze [affecting], but nothing interesting happens.") + return + + assailant.visible_message("[assailant] has reinforced [TU.his] grip on [affecting] (now neck)!") + state = GRAB_NECK + icon_state = "grabbed+1" + assailant.set_dir(get_dir(assailant, affecting)) + add_attack_logs(assailant,affecting,"Neck grabbed") + hud.icon_state = "kill" + hud.name = "kill" + affecting.Stun(10) //10 ticks of ensured grab + else if(state < GRAB_UPGRADING) + assailant.visible_message("[assailant] starts to tighten [TU.his] grip on [affecting]'s neck!") + hud.icon_state = "kill1" + + state = GRAB_KILL + assailant.visible_message("[assailant] has tightened [TU.his] grip on [affecting]'s neck!") + add_attack_logs(assailant,affecting,"Strangled") + affecting.setClickCooldown(10) + affecting.AdjustLosebreath(1) + affecting.set_dir(WEST) + adjust_position() + +//This is used to make sure the victim hasn't managed to yackety sax away before using the grab. +/obj/item/weapon/grab/proc/confirm() + if(!assailant || !affecting) + qdel(src) + return 0 + + if(affecting) + if(!isturf(assailant.loc) || ( !isturf(affecting.loc) || assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1) ) + qdel(src) + return 0 + + return 1 + +/obj/item/weapon/grab/attack(mob/M, mob/living/user) + if(QDELETED(src)) + return + if(!affecting) + return + if(world.time < (last_action + 20)) + return + + last_action = world.time + reset_kill_state() //using special grab moves will interrupt choking them + + //clicking on the victim while grabbing them + if(M == affecting) + if(ishuman(affecting)) + var/mob/living/carbon/human/H = affecting + var/hit_zone = assailant.zone_sel.selecting + flick(hud.icon_state, hud) + switch(assailant.a_intent) + if(I_HELP) + if(force_down) + to_chat(assailant, "You are no longer pinning [affecting] to the ground.") + force_down = 0 + return + if(state >= GRAB_AGGRESSIVE) + H.apply_pressure(assailant, hit_zone) + else + inspect_organ(affecting, assailant, hit_zone) + + if(I_GRAB) + jointlock(affecting, assailant, hit_zone) + + if(I_HURT) + if(hit_zone == O_EYES) + attack_eye(affecting, assailant) + else if(hit_zone == BP_HEAD) + headbutt(affecting, assailant) + else + dislocate(affecting, assailant, hit_zone) + + if(I_DISARM) + pin_down(affecting, assailant) + + //clicking on yourself while grabbing them + if(M == assailant && state >= GRAB_AGGRESSIVE) + devour(affecting, assailant) + +/obj/item/weapon/grab/dropped() + loc = null + if(!QDELETED(src)) + qdel(src) + +/obj/item/weapon/grab/proc/reset_kill_state() + if(state == GRAB_KILL) + var/datum/gender/T = gender_datums[assailant.get_visible_gender()] + assailant.visible_message("[assailant] lost [T.his] tight grip on [affecting]'s neck!") + hud.icon_state = "kill" + state = GRAB_NECK + +/obj/item/weapon/grab/proc/handle_resist() + var/grab_name + var/break_strength = 1 + var/list/break_chance_table = list(100) + switch(state) + //if(GRAB_PASSIVE) + + if(GRAB_AGGRESSIVE) + grab_name = "grip" + //Being knocked down makes it harder to break a grab, so it is easier to cuff someone who is down without forcing them into unconsciousness. + if(!affecting.incapacitated(INCAPACITATION_KNOCKDOWN)) + break_strength++ + break_chance_table = list(15, 60, 100) + + if(GRAB_NECK) + grab_name = "headlock" + //If the you move when grabbing someone then it's easier for them to break free. Same if the affected mob is immune to stun. + if(world.time - assailant.l_move_time < 30 || !affecting.stunned) + break_strength++ + break_chance_table = list(3, 18, 45, 100) + + + if(GRAB_KILL) + grab_name = "stranglehold" + break_chance_table = list(5, 20, 40, 80, 100) + + //It's easier to break out of a grab by a smaller mob + break_strength += max(size_difference(affecting, assailant), 0) + //CHOMPEdit Begin + var/prob_mult = 1 + var/mob/living/carbon/human/grabbee = affecting + var/mob/living/carbon/human/grabber = assailant + if(istype(grabbee)) + prob_mult /= grabbee.species.grab_resist_divisor_self + break_strength += grabbee.species.grab_power_self + if(istype(grabber)) + prob_mult /= grabber.species.grab_resist_divisor_victims + break_strength += grabber.species.grab_power_victims + + var/break_chance = CLAMP(prob_mult*break_chance_table[CLAMP(break_strength, 1, break_chance_table.len)],0,100) + //CHOMPEdit End + if(prob(break_chance)) + if(state == GRAB_KILL) + reset_kill_state() + return + else if(grab_name) + affecting.visible_message("[affecting] has broken free of [assailant]'s [grab_name]!") + qdel(src) + +//returns the number of size categories between affecting and assailant, rounded. Positive means A is larger than B +/obj/item/weapon/grab/proc/size_difference(mob/A, mob/B) + return mob_size_difference(A.mob_size, B.mob_size) + +/obj/item/weapon/grab/Destroy() + animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING) + affecting.reset_plane_and_layer() + if(affecting) + affecting.grabbed_by -= src + affecting = null + if(assailant) + if(assailant.client) + assailant.client.screen -= hud + assailant = null + qdel(hud) + hud = null + return ..() diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index 4ac26e4e13..32ef25f432 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -1,173 +1,173 @@ -/obj/item/weapon/grab/proc/inspect_organ(mob/living/carbon/human/H, mob/user, var/target_zone) - - var/obj/item/organ/external/E = H.get_organ(target_zone) - - if(!E || E.is_stump()) - to_chat(user, "[H] is missing that bodypart.") - return - - user.visible_message("[user] starts inspecting [affecting]'s [E.name] carefully.") - if(!do_mob(user,H, 10)) - to_chat(user, "You must stand still to inspect [E] for wounds.") - else if(E.wounds.len) - to_chat(user, "You find [E.get_wounds_desc()]") - else - to_chat(user, "You find no visible wounds.") - - to_chat(user, "Checking bones now...") - if(!do_mob(user, H, 20)) - to_chat(user, "You must stand still to feel [E] for fractures.") - else if(E.status & ORGAN_BROKEN) - to_chat(user, "The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!") - H.custom_pain("Your [E.name] hurts where it's poked.", 40) - else - to_chat(user, "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.") - - to_chat(user, "Checking skin now...") - if(!do_mob(user, H, 10)) - to_chat(user, "You must stand still to check [H]'s skin for abnormalities.") - else - var/bad = 0 - if(H.getToxLoss() >= 40) - to_chat(user, "[H] has an unhealthy skin discoloration.") - bad = 1 - if(H.getOxyLoss() >= 20) - to_chat(user, "[H]'s skin is unusaly pale.") - bad = 1 - if(E.status & ORGAN_DEAD) - to_chat(user, "[E] is decaying!") - bad = 1 - if(!bad) - to_chat(user, "[H]'s skin is normal.") - -/obj/item/weapon/grab/proc/jointlock(mob/living/carbon/human/target, mob/attacker, var/target_zone) - if(state < GRAB_AGGRESSIVE) - to_chat(attacker, "You require a better grab to do this.") - return - - var/obj/item/organ/external/organ = target.get_organ(check_zone(target_zone)) - if(!organ || organ.dislocated == -1) - return - - attacker.visible_message("[attacker] [pick("bent", "twisted")] [target]'s [organ.name] into a jointlock!") - - if(target.species.flags & NO_PAIN) - return - - var/armor = target.run_armor_check(target, "melee") - var/soaked = target.get_armor_soak(target, "melee") - if(armor + soaked < 60) - to_chat(target, "You feel extreme pain!") - - var/max_halloss = round(target.species.total_health * 0.8) //up to 80% of passing out - affecting.adjustHalLoss(CLAMP(max_halloss - affecting.halloss, 0, 30)) - -/obj/item/weapon/grab/proc/attack_eye(mob/living/carbon/human/target, mob/living/carbon/human/attacker) - if(!istype(attacker)) - return - - var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(target, O_EYES) - - if(!attack) - return - if(state < GRAB_NECK) - to_chat(attacker, "You require a better grab to do this.") - return - for(var/obj/item/protection in list(target.head, target.wear_mask, target.glasses)) - if(protection && (protection.body_parts_covered & EYES)) - to_chat(attacker, "You're going to need to remove the eye covering first.") - return - if(!target.has_eyes()) - to_chat(attacker, "You cannot locate any eyes on [target]!") - return - - add_attack_logs(attacker,target,"Eye gouge using grab") - - attack.handle_eye_attack(attacker, target) - -/obj/item/weapon/grab/proc/headbutt(mob/living/carbon/human/target, mob/living/carbon/human/attacker) - if(!istype(attacker)) - return - if(target.lying) - return - var/datum/gender/T = gender_datums[attacker.get_visible_gender()] - attacker.visible_message("[attacker] thrusts [T.his] head into [target]'s skull!") - - var/damage = 20 - var/obj/item/clothing/hat = attacker.head - if(istype(hat)) - damage += hat.force * 3 - - var/armor = target.run_armor_check(BP_HEAD, "melee") - var/soaked = target.get_armor_soak(BP_HEAD, "melee") - target.apply_damage(damage, BRUTE, BP_HEAD, armor, soaked) - attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD), attacker.get_armor_soak(BP_HEAD), "melee") - - if(!armor && target.headcheck(BP_HEAD) && prob(damage)) - target.apply_effect(20, PARALYZE) - target.visible_message("[target] [target.species.get_knockout_message(target)]") - - playsound(attacker, "swing_hit", 25, 1, -1) - add_attack_logs(attacker,target,"Headbutted using grab") - - attacker.drop_from_inventory(src) - src.loc = null - qdel(src) - return - -/obj/item/weapon/grab/proc/dislocate(mob/living/carbon/human/target, mob/living/attacker, var/target_zone) - if(state < GRAB_NECK) - to_chat(attacker, "You require a better grab to do this.") - return - if(target.grab_joint(attacker, target_zone)) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return - -/obj/item/weapon/grab/proc/pin_down(mob/target, mob/attacker) - if(state < GRAB_AGGRESSIVE) - to_chat(attacker, "You require a better grab to do this.") - return - if(force_down) - to_chat(attacker, "You are already pinning [target] to the ground.") - return - if(size_difference(affecting, assailant) > 0) - to_chat(attacker, "You are too small to do that!") - return - - attacker.visible_message("[attacker] starts forcing [target] to the ground!") - if(do_after(attacker, 20) && target) - last_action = world.time - attacker.visible_message("[attacker] forces [target] to the ground!") - apply_pinning(target, attacker) - -/obj/item/weapon/grab/proc/apply_pinning(mob/target, mob/attacker) - force_down = 1 - target.Weaken(3) - target.lying = 1 - step_to(attacker, target) - attacker.set_dir(EAST) //face the victim - target.set_dir(SOUTH) //face up - -/obj/item/weapon/grab/proc/devour(mob/target, mob/user) - var/can_eat - if((FAT in user.mutations) && ismini(target)) - can_eat = 1 - else - var/mob/living/carbon/human/H = user - if(istype(H) && H.species.gluttonous) - if(H.species.gluttonous == 2) - can_eat = 2 - else if((H.mob_size > target.mob_size) && !ishuman(target) && ismini(target)) - can_eat = 1 - - if(can_eat) - var/mob/living/carbon/attacker = user - user.visible_message("[user] is attempting to devour [target]!") - if(can_eat == 2) - if(!do_mob(user, target)||!do_after(user, 30)) return - else - if(!do_mob(user, target)||!do_after(user, 70)) return - user.visible_message("[user] devours [target]!") - target.loc = user - attacker.stomach_contents.Add(target) - qdel(src) +/obj/item/weapon/grab/proc/inspect_organ(mob/living/carbon/human/H, mob/user, var/target_zone) + + var/obj/item/organ/external/E = H.get_organ(target_zone) + + if(!E || E.is_stump()) + to_chat(user, "[H] is missing that bodypart.") + return + + user.visible_message("[user] starts inspecting [affecting]'s [E.name] carefully.") + if(!do_mob(user,H, 10)) + to_chat(user, "You must stand still to inspect [E] for wounds.") + else if(E.wounds.len) + to_chat(user, "You find [E.get_wounds_desc()]") + else + to_chat(user, "You find no visible wounds.") + + to_chat(user, "Checking bones now...") + if(!do_mob(user, H, 20)) + to_chat(user, "You must stand still to feel [E] for fractures.") + else if(E.status & ORGAN_BROKEN) + to_chat(user, "The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!") + H.custom_pain("Your [E.name] hurts where it's poked.", 40) + else + to_chat(user, "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.") + + to_chat(user, "Checking skin now...") + if(!do_mob(user, H, 10)) + to_chat(user, "You must stand still to check [H]'s skin for abnormalities.") + else + var/bad = 0 + if(H.getToxLoss() >= 40) + to_chat(user, "[H] has an unhealthy skin discoloration.") + bad = 1 + if(H.getOxyLoss() >= 20) + to_chat(user, "[H]'s skin is unusaly pale.") + bad = 1 + if(E.status & ORGAN_DEAD) + to_chat(user, "[E] is decaying!") + bad = 1 + if(!bad) + to_chat(user, "[H]'s skin is normal.") + +/obj/item/weapon/grab/proc/jointlock(mob/living/carbon/human/target, mob/attacker, var/target_zone) + if(state < GRAB_AGGRESSIVE) + to_chat(attacker, "You require a better grab to do this.") + return + + var/obj/item/organ/external/organ = target.get_organ(check_zone(target_zone)) + if(!organ || organ.dislocated == -1) + return + + attacker.visible_message("[attacker] [pick("bent", "twisted")] [target]'s [organ.name] into a jointlock!") + + if(target.species.flags & NO_PAIN) + return + + var/armor = target.run_armor_check(target, "melee") + var/soaked = target.get_armor_soak(target, "melee") + if(armor + soaked < 60) + to_chat(target, "You feel extreme pain!") + + var/max_halloss = round(target.species.total_health * 0.8) //up to 80% of passing out + affecting.adjustHalLoss(CLAMP(max_halloss - affecting.halloss, 0, 30)) + +/obj/item/weapon/grab/proc/attack_eye(mob/living/carbon/human/target, mob/living/carbon/human/attacker) + if(!istype(attacker)) + return + + var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(target, O_EYES) + + if(!attack) + return + if(state < GRAB_NECK) + to_chat(attacker, "You require a better grab to do this.") + return + for(var/obj/item/protection in list(target.head, target.wear_mask, target.glasses)) + if(protection && (protection.body_parts_covered & EYES)) + to_chat(attacker, "You're going to need to remove the eye covering first.") + return + if(!target.has_eyes()) + to_chat(attacker, "You cannot locate any eyes on [target]!") + return + + add_attack_logs(attacker,target,"Eye gouge using grab") + + attack.handle_eye_attack(attacker, target) + +/obj/item/weapon/grab/proc/headbutt(mob/living/carbon/human/target, mob/living/carbon/human/attacker) + if(!istype(attacker)) + return + if(target.lying) + return + var/datum/gender/T = gender_datums[attacker.get_visible_gender()] + attacker.visible_message("[attacker] thrusts [T.his] head into [target]'s skull!") + + var/damage = 20 + var/obj/item/clothing/hat = attacker.head + if(istype(hat)) + damage += hat.force * 3 + + var/armor = target.run_armor_check(BP_HEAD, "melee") + var/soaked = target.get_armor_soak(BP_HEAD, "melee") + target.apply_damage(damage, BRUTE, BP_HEAD, armor, soaked) + attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD), attacker.get_armor_soak(BP_HEAD), "melee") + + if(!armor && target.headcheck(BP_HEAD) && prob(damage)) + target.apply_effect(20, PARALYZE) + target.visible_message("[target] [target.species.get_knockout_message(target)]") + + playsound(attacker, "swing_hit", 25, 1, -1) + add_attack_logs(attacker,target,"Headbutted using grab") + + attacker.drop_from_inventory(src) + src.loc = null + qdel(src) + return + +/obj/item/weapon/grab/proc/dislocate(mob/living/carbon/human/target, mob/living/attacker, var/target_zone) + if(state < GRAB_NECK) + to_chat(attacker, "You require a better grab to do this.") + return + if(target.grab_joint(attacker, target_zone)) + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + return + +/obj/item/weapon/grab/proc/pin_down(mob/target, mob/attacker) + if(state < GRAB_AGGRESSIVE) + to_chat(attacker, "You require a better grab to do this.") + return + if(force_down) + to_chat(attacker, "You are already pinning [target] to the ground.") + return + if(size_difference(affecting, assailant) > 0) + to_chat(attacker, "You are too small to do that!") + return + + attacker.visible_message("[attacker] starts forcing [target] to the ground!") + if(do_after(attacker, 20) && target) + last_action = world.time + attacker.visible_message("[attacker] forces [target] to the ground!") + apply_pinning(target, attacker) + +/obj/item/weapon/grab/proc/apply_pinning(mob/target, mob/attacker) + force_down = 1 + target.Weaken(3) + target.lying = 1 + step_to(attacker, target) + attacker.set_dir(EAST) //face the victim + target.set_dir(SOUTH) //face up + +/obj/item/weapon/grab/proc/devour(mob/target, mob/user) + var/can_eat + if((FAT in user.mutations) && ismini(target)) + can_eat = 1 + else + var/mob/living/carbon/human/H = user + if(istype(H) && H.species.gluttonous) + if(H.species.gluttonous == 2) + can_eat = 2 + else if((H.mob_size > target.mob_size) && !ishuman(target) && ismini(target)) + can_eat = 1 + + if(can_eat) + var/mob/living/carbon/attacker = user + user.visible_message("[user] is attempting to devour [target]!") + if(can_eat == 2) + if(!do_mob(user, target)||!do_after(user, 30)) return + else + if(!do_mob(user, target)||!do_after(user, 70)) return + user.visible_message("[user] devours [target]!") + target.loc = user + attacker.stomach_contents.Add(target) + qdel(src) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index ab4a438cbb..4bf66530f4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1,700 +1,700 @@ -// fun if you want to typecast humans/monkeys/etc without writing long path-filled lines. -/proc/isxenomorph(A) - if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = A - return istype(H.species, /datum/species/xenos) - return 0 - -/proc/issmall(A) - if(A && istype(A, /mob/living)) - var/mob/living/L = A - return L.mob_size <= MOB_SMALL - return 0 - -//returns the number of size categories between two mob_sizes, rounded. Positive means A is larger than B -/proc/mob_size_difference(var/mob_size_A, var/mob_size_B) - return round(log(2, mob_size_A/mob_size_B), 1) - -/mob/proc/can_wield_item(obj/item/W) - if(W.w_class >= ITEMSIZE_LARGE && issmall(src)) - return FALSE //M is too small to wield this - return TRUE - -/proc/istiny(A) - if(A && istype(A, /mob/living)) - var/mob/living/L = A - return L.mob_size <= MOB_TINY - return 0 - - -/proc/ismini(A) - if(A && istype(A, /mob/living)) - var/mob/living/L = A - return L.mob_size <= MOB_MINISCULE - return 0 - -/mob/living/silicon/isSynthetic() - return 1 - -/mob/proc/isMonkey() - return 0 - -/mob/living/carbon/human/isMonkey() - return istype(species, /datum/species/monkey) - -/proc/isdeaf(A) - if(istype(A, /mob)) - var/mob/M = A - return (M.sdisabilities & DEAF) || M.ear_deaf - return 0 - -/mob/proc/get_ear_protection() - return 0 - -/mob/proc/break_cloak() - return - -/mob/proc/is_cloaked() - return FALSE - -/proc/hasorgans(A) // Fucking really?? - return ishuman(A) - -/proc/iscuffed(A) - if(istype(A, /mob/living/carbon)) - var/mob/living/carbon/C = A - if(C.handcuffed) - return 1 - return 0 - -/proc/hassensorlevel(A, var/level) - var/mob/living/carbon/human/H = A - if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = H.w_uniform - return U.sensor_mode >= level - return 0 - -/proc/getsensorlevel(A) - var/mob/living/carbon/human/H = A - if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = H.w_uniform - return U.sensor_mode - return SUIT_SENSOR_OFF - - -/proc/is_admin(var/mob/user) - return check_rights(R_ADMIN|R_EVENT, 0, user) != 0 - -/* CHOMPEdit - See modular_chomp/code/_HELPERS/type2type/color.dm -/proc/hsl2rgb(h, s, l) - return //TODO: Implement -*/ -/* - Miss Chance -*/ - -/proc/check_zone(zone) - if(!zone) return BP_TORSO - switch(zone) - if(O_EYES) - zone = BP_HEAD - if(O_MOUTH) - zone = BP_HEAD - return zone - -// Returns zone with a certain probability. If the probability fails, or no zone is specified, then a random body part is chosen. -// Do not use this if someone is intentionally trying to hit a specific body part. -// Use get_zone_with_miss_chance() for that. -/proc/ran_zone(zone, probability) - if (zone) - zone = check_zone(zone) - if (prob(probability)) - return zone - - var/ran_zone = zone - while (ran_zone == zone) - ran_zone = pick ( - organ_rel_size[BP_HEAD]; BP_HEAD, - organ_rel_size[BP_TORSO]; BP_TORSO, - organ_rel_size[BP_GROIN]; BP_GROIN, - organ_rel_size[BP_L_ARM]; BP_L_ARM, - organ_rel_size[BP_R_ARM]; BP_R_ARM, - organ_rel_size[BP_L_LEG]; BP_L_LEG, - organ_rel_size[BP_R_LEG]; BP_R_LEG, - organ_rel_size[BP_L_HAND]; BP_L_HAND, - organ_rel_size[BP_R_HAND]; BP_R_HAND, - organ_rel_size[BP_L_FOOT]; BP_L_FOOT, - organ_rel_size[BP_R_FOOT]; BP_R_FOOT, - ) - - return ran_zone - -// Emulates targetting a specific body part, and miss chances -// May return null if missed -// miss_chance_mod may be negative. -/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0, var/force_hit = FALSE) - zone = check_zone(zone) - - if(!ranged_attack) - // you cannot miss if your target is prone or restrained - if(target.buckled || target.lying) - return zone - // if your target is being grabbed aggressively by someone you cannot miss either - for(var/obj/item/weapon/grab/G in target.grabbed_by) - if(G.state >= GRAB_AGGRESSIVE) - return zone - - if(force_hit) - return zone - - var/miss_chance = 10 - if (zone in base_miss_chance) - miss_chance = base_miss_chance[zone] - if (zone == "eyes" || zone == "mouth") - miss_chance = base_miss_chance["head"] - // miss_chance = max(miss_chance + miss_chance_mod, 0) CHOMPEDIT - removing baymiss - if(prob(miss_chance_mod)) //CHOMPADD - removing baymiss. Checking the miss chance for legacy. This should only be affected by special cases and evasion. - return null - if(prob(miss_chance)) - //if(prob(70)) - // return null CHOMPEDIT - removing baymiss - return pick(base_miss_chance) - return zone - - -/proc/stars(n, pr) - if (pr == null) - pr = 25 - if (pr < 0) - return null - else - if (pr >= 100) - return n - var/te = n - var/t = "" - n = length(n) - var/p = null - p = 1 - var/intag = 0 - while(p <= n) - var/char = copytext(te, p, p + 1) - if (char == "<") //let's try to not break tags - intag = !intag - if (intag || char == " " || prob(pr)) - t = text("[][]", t, char) - else - t = text("[]*", t) - if (char == ">") - intag = !intag - p++ - return t - -/proc/stars_all(list/message_pieces, pr) - // eugh, we have to clone the list to avoid collateral damage due to the nature of these messages - . = list() - for(var/datum/multilingual_say_piece/S in message_pieces) - . += new /datum/multilingual_say_piece(S.speaking, stars(S.message)) - -/proc/slur(phrase) - phrase = html_decode(phrase) - var/leng=length(phrase) - var/counter=length(phrase) - var/newphrase="" - var/newletter="" - while(counter>=1) - newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2) - if(rand(1,3)==3) - if(lowertext(newletter)=="o") newletter="u" - if(lowertext(newletter)=="s") newletter="ch" - if(lowertext(newletter)=="a") newletter="ah" - if(lowertext(newletter)=="c") newletter="k" - switch(rand(1,9)) - if(1,3,5,8) newletter="[lowertext(newletter)]" - //if(2,4,6,15) newletter="[uppertext(newletter)]" - if(2,4,6,9) newletter="[uppertext(newletter)]" - if(7) newletter+="'" - //if(9,10) newletter="[newletter]" - //if(11,12) newletter="[newletter]" - //if(13) newletter="[newletter]" - newphrase+="[newletter]";counter-=1 - return newphrase - -/proc/stutter(n) - var/te = html_decode(n) - var/t = ""//placed before the message. Not really sure what it's for. - n = length(n)//length of the entire word - var/p = null - p = 1//1 is the start of any word - while(p <= n)//while P, which starts at 1 is less or equal to N which is the length. - var/n_letter = copytext(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time. - if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) - if (prob(10)) - n_letter = text("[n_letter]-[n_letter]-[n_letter]-[n_letter]")//replaces the current letter with this instead. - else - if (prob(20)) - n_letter = text("[n_letter]-[n_letter]-[n_letter]") - else - if (prob(5)) - n_letter = null - else - n_letter = text("[n_letter]-[n_letter]") - t = text("[t][n_letter]")//since the above is ran through for each letter, the text just adds up back to the original word. - p++//for each letter p is increased to find where the next letter will be. - return sanitize(t) - - -/proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added - /* Turn text into complete gibberish! */ - var/returntext = "" - for(var/i = 1, i <= length(t), i++) - - var/letter = copytext(t, i, i+1) - if(prob(50)) - if(p >= 70) - letter = "" - - for(var/j = 1, j <= rand(0, 2), j++) - letter += pick("#","@","*","&","%","$","/", "<", ">", ";","*","*","*","*","*","*","*") - - returntext += letter - - return returntext - - -/proc/ninjaspeak(n) -/* -The difference with stutter is that this proc can stutter more than 1 letter -The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma. -It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N -*/ - var/te = html_decode(n) - var/t = "" - n = length(n) - var/p = 1 - while(p <= n) - var/n_letter - var/n_mod = rand(1,4) - if(p+n_mod>n+1) - n_letter = copytext(te, p, n+1) - else - n_letter = copytext(te, p, p+n_mod) - if (prob(50)) - if (prob(30)) - n_letter = text("[n_letter]-[n_letter]-[n_letter]") - else - n_letter = text("[n_letter]-[n_letter]") - else - n_letter = text("[n_letter]") - t = text("[t][n_letter]") - p=p+n_mod - return sanitize(t) - - -/proc/shake_camera(mob/M, duration, strength=1) - if(!M || !M.client || M.shakecamera || M.stat || isEye(M) || isAI(M)) - return - M.shakecamera = 1 - spawn(1) - if(!M.client) - return - - var/atom/oldeye=M.client.eye - var/aiEyeFlag = 0 - if(istype(oldeye, /mob/observer/eye/aiEye)) - aiEyeFlag = 1 - - var/x - for(x=0; x
                    ") - -/proc/say_dead_object(var/message, var/obj/subject = null) - for(var/mob/M in player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights && M.is_preference_enabled(/datum/client_preference/holder/show_staff_dsay))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) - var/follow - var/lname = "Game Master" - if(M.forbid_seeing_deadchat && !M.client.holder) - continue - - if(subject) - lname = "[subject.name] ([subject.x],[subject.y],[subject.z])" - - lname = "[lname] " - to_chat(M, "" + create_text_tag("event_dead", "EVENT:", M.client) + " [lname][follow][message]") - -//Announces that a ghost has joined/left, mainly for use with wizards -/proc/announce_ghost_joinleave(O, var/joined_ghosts = 1, var/message = "") - var/client/C - //Accept any type, sort what we want here - if(istype(O, /mob)) - var/mob/M = O - if(M.client) - C = M.client - else if(istype(O, /client)) - C = O - else if(istype(O, /datum/mind)) - var/datum/mind/M = O - if(M.current && M.current.client) - C = M.current.client - else if(M.original && M.original.client) - C = M.original.client - - if(C) - var/name - if(C.mob) - var/mob/M = C.mob - if(M.mind && M.mind.name) - name = M.mind.name - if(M.real_name && M.real_name != name) - if(name) - name += " ([M.real_name])" - else - name = M.real_name - if(!name) - name = (C.holder && C.holder.fakekey) ? C.holder.fakekey : C.key - if(joined_ghosts) - //say_dead_direct("The ghost of [name] now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead. [message]") //ChompEDIT - Removed for ghost privacy - log_and_message_admins("[name] entered ghost/observe mode. [message]") //ChompEDIT - - else - //say_dead_direct("[name] no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]") //ChompEDIT - Removed for ghost privacy - log_and_message_admins("[name] left ghost/observe mode. [message]") //ChompEDIT - - -/mob/proc/switch_to_camera(var/obj/machinery/camera/C) - if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) - return 0 - check_eye(src) - return 1 - -/mob/living/silicon/ai/switch_to_camera(var/obj/machinery/camera/C) - if(!C.can_use() || !is_in_chassis()) - return 0 - - eyeobj.setLoc(C) - return 1 - -// Returns true if the mob has a client which has been active in the last given X minutes. -/mob/proc/is_client_active(var/active = 1) - return client && client.inactivity < active MINUTES - -/mob/proc/can_eat() - return 1 - -/mob/proc/can_force_feed() - return 1 - -#define SAFE_PERP -50 -/mob/living/proc/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - if(stat == DEAD) - return SAFE_PERP - - return 0 - -/mob/living/carbon/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - if(handcuffed) - return SAFE_PERP - - return ..() - -/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - var/threatcount = ..() - if(. == SAFE_PERP) - return SAFE_PERP - - //Agent cards lower threatlevel. - var/obj/item/weapon/card/id/id = GetIdCard() - if(id && istype(id, /obj/item/weapon/card/id/syndicate)) - threatcount -= 2 - // A proper CentCom id is hard currency. - else if(id && istype(id, /obj/item/weapon/card/id/centcom)) - return SAFE_PERP - - if(check_access && !access_obj.allowed(src)) - threatcount += 4 - - if(auth_weapons && !access_obj.allowed(src)) - if(istype(l_hand, /obj/item/weapon/gun) || istype(l_hand, /obj/item/weapon/melee) && !istype(l_hand, /obj/item/weapon/gun/energy/floragun) && !istype(l_hand, /obj/item/weapon/gun/energy/sizegun) && !istype(l_hand, /obj/item/weapon/gun/launcher/confetti_cannon) && !istype(l_hand, /obj/item/weapon/gun/energy/lasertag)) //CHOMP Edit: Specific guns to the exclusion list. - threatcount += 4 - - if(istype(r_hand, /obj/item/weapon/gun) || istype(r_hand, /obj/item/weapon/melee)) - threatcount += 4 - - if(istype(belt, /obj/item/weapon/gun) || istype(belt, /obj/item/weapon/melee)) - threatcount += 2 - - if(species.name != SPECIES_HUMAN) - threatcount += 2 - - if(check_records || check_arrest) - var/perpname = name - if(id) - perpname = id.registered_name - - var/datum/data/record/R = find_security_record("name", perpname) - if(check_records && !R) - threatcount += 4 - - if(check_arrest && R && (R.fields["criminal"] == "*Arrest*")) - threatcount += 4 - - return threatcount - -/mob/living/simple_mob/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - var/threatcount = ..() - if(. == SAFE_PERP) - return SAFE_PERP - - if(has_AI() && ai_holder.hostile && faction != "neutral") // Otherwise Runtime gets killed. - threatcount += 4 - return threatcount - -// Beepsky will (try to) only beat 'bad' slimes. -/mob/living/simple_mob/slime/xenobio/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - var/threatcount = 0 - - if(stat == DEAD) - return SAFE_PERP - - if(is_justified_to_discipline()) - threatcount += 4 -/* - if(discipline && !rabid) - if(!target_mob || istype(target_mob, /mob/living/carbon/human/monkey)) - return SAFE_PERP - - if(target_mob) - threatcount += 4 - - if(victim) - threatcount += 4 -*/ - if(has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder - if(AI.rabid) - threatcount = 10 - - return threatcount - -#undef SAFE_PERP - - -//TODO: Integrate defence zones and targeting body parts with the actual organ system, move these into organ definitions. - -//The base miss chance for the different defence zones -var/list/global/base_miss_chance = list( - BP_HEAD = 40, - BP_TORSO = 10, - BP_GROIN = 20, - BP_L_LEG = 20, - BP_R_LEG = 20, - BP_L_ARM = 20, - BP_R_ARM = 20, - BP_L_HAND = 50, - BP_R_HAND = 50, - BP_L_FOOT = 50, - BP_R_FOOT = 50, -) - -//Used to weight organs when an organ is hit randomly (i.e. not a directed, aimed attack). -//Also used to weight the protection value that armour provides for covering that body part when calculating protection from full-body effects. -var/list/global/organ_rel_size = list( - BP_HEAD = 25, - BP_TORSO = 70, - BP_GROIN = 30, - BP_L_LEG = 25, - BP_R_LEG = 25, - BP_L_ARM = 25, - BP_R_ARM = 25, - BP_L_HAND = 10, - BP_R_HAND = 10, - BP_L_FOOT = 10, - BP_R_FOOT = 10, -) - -/mob/proc/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - return - -//Recalculates what planes this mob can see using their plane_holder, for humans this is checking slots, for others, could be whatever. -/mob/proc/recalculate_vis() - return - -//General HUD updates done regularly (health puppet things, etc) -/mob/proc/handle_regular_hud_updates() - return - -//Handle eye things like the Byond SEE_TURFS, SEE_OBJS, etc. -/mob/proc/handle_vision() - return - -//Icon is used to occlude things like huds from the faulty byond context menu. -// http://www.byond.com/forum/?post=2336679 -var/global/image/backplane -/hook/startup/proc/generate_backplane() - backplane = image('icons/misc/win32.dmi') - backplane.alpha = 0 - backplane.plane = -100 - backplane.layer = MOB_LAYER-0.1 - backplane.mouse_opacity = 0 - - return TRUE - -/mob/proc/get_sound_env(var/pressure_factor) - if (pressure_factor < 0.5) - return SPACE - else - var/area/A = get_area(src) - return A.sound_env - -/mob/proc/position_hud_item(var/obj/item/item, var/slot) - if(!istype(hud_used) || !slot || !LAZYLEN(hud_used.slot_info)) - return - - //They may have hidden their entire hud but the hands - if(!hud_used.hud_shown && slot > slot_r_hand) - item.screen_loc = null - return - - //They may have hidden the icons in the bottom left with the hide button - if(!hud_used.inventory_shown && slot > slot_r_store) - item.screen_loc = null - return - - var/screen_place = hud_used.slot_info["[slot]"] - if(!screen_place) - item.screen_loc = null - return - - item.screen_loc = screen_place - -/mob/proc/can_feed() - return TRUE +// fun if you want to typecast humans/monkeys/etc without writing long path-filled lines. +/proc/isxenomorph(A) + if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = A + return istype(H.species, /datum/species/xenos) + return 0 + +/proc/issmall(A) + if(A && istype(A, /mob/living)) + var/mob/living/L = A + return L.mob_size <= MOB_SMALL + return 0 + +//returns the number of size categories between two mob_sizes, rounded. Positive means A is larger than B +/proc/mob_size_difference(var/mob_size_A, var/mob_size_B) + return round(log(2, mob_size_A/mob_size_B), 1) + +/mob/proc/can_wield_item(obj/item/W) + if(W.w_class >= ITEMSIZE_LARGE && issmall(src)) + return FALSE //M is too small to wield this + return TRUE + +/proc/istiny(A) + if(A && istype(A, /mob/living)) + var/mob/living/L = A + return L.mob_size <= MOB_TINY + return 0 + + +/proc/ismini(A) + if(A && istype(A, /mob/living)) + var/mob/living/L = A + return L.mob_size <= MOB_MINISCULE + return 0 + +/mob/living/silicon/isSynthetic() + return 1 + +/mob/proc/isMonkey() + return 0 + +/mob/living/carbon/human/isMonkey() + return istype(species, /datum/species/monkey) + +/proc/isdeaf(A) + if(istype(A, /mob)) + var/mob/M = A + return (M.sdisabilities & DEAF) || M.ear_deaf + return 0 + +/mob/proc/get_ear_protection() + return 0 + +/mob/proc/break_cloak() + return + +/mob/proc/is_cloaked() + return FALSE + +/proc/hasorgans(A) // Fucking really?? + return ishuman(A) + +/proc/iscuffed(A) + if(istype(A, /mob/living/carbon)) + var/mob/living/carbon/C = A + if(C.handcuffed) + return 1 + return 0 + +/proc/hassensorlevel(A, var/level) + var/mob/living/carbon/human/H = A + if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + return U.sensor_mode >= level + return 0 + +/proc/getsensorlevel(A) + var/mob/living/carbon/human/H = A + if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + return U.sensor_mode + return SUIT_SENSOR_OFF + + +/proc/is_admin(var/mob/user) + return check_rights(R_ADMIN|R_EVENT, 0, user) != 0 + +/* CHOMPEdit - See modular_chomp/code/_HELPERS/type2type/color.dm +/proc/hsl2rgb(h, s, l) + return //TODO: Implement +*/ +/* + Miss Chance +*/ + +/proc/check_zone(zone) + if(!zone) return BP_TORSO + switch(zone) + if(O_EYES) + zone = BP_HEAD + if(O_MOUTH) + zone = BP_HEAD + return zone + +// Returns zone with a certain probability. If the probability fails, or no zone is specified, then a random body part is chosen. +// Do not use this if someone is intentionally trying to hit a specific body part. +// Use get_zone_with_miss_chance() for that. +/proc/ran_zone(zone, probability) + if (zone) + zone = check_zone(zone) + if (prob(probability)) + return zone + + var/ran_zone = zone + while (ran_zone == zone) + ran_zone = pick ( + organ_rel_size[BP_HEAD]; BP_HEAD, + organ_rel_size[BP_TORSO]; BP_TORSO, + organ_rel_size[BP_GROIN]; BP_GROIN, + organ_rel_size[BP_L_ARM]; BP_L_ARM, + organ_rel_size[BP_R_ARM]; BP_R_ARM, + organ_rel_size[BP_L_LEG]; BP_L_LEG, + organ_rel_size[BP_R_LEG]; BP_R_LEG, + organ_rel_size[BP_L_HAND]; BP_L_HAND, + organ_rel_size[BP_R_HAND]; BP_R_HAND, + organ_rel_size[BP_L_FOOT]; BP_L_FOOT, + organ_rel_size[BP_R_FOOT]; BP_R_FOOT, + ) + + return ran_zone + +// Emulates targetting a specific body part, and miss chances +// May return null if missed +// miss_chance_mod may be negative. +/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0, var/force_hit = FALSE) + zone = check_zone(zone) + + if(!ranged_attack) + // you cannot miss if your target is prone or restrained + if(target.buckled || target.lying) + return zone + // if your target is being grabbed aggressively by someone you cannot miss either + for(var/obj/item/weapon/grab/G in target.grabbed_by) + if(G.state >= GRAB_AGGRESSIVE) + return zone + + if(force_hit) + return zone + + var/miss_chance = 10 + if (zone in base_miss_chance) + miss_chance = base_miss_chance[zone] + if (zone == "eyes" || zone == "mouth") + miss_chance = base_miss_chance["head"] + // miss_chance = max(miss_chance + miss_chance_mod, 0) CHOMPEDIT - removing baymiss + if(prob(miss_chance_mod)) //CHOMPADD - removing baymiss. Checking the miss chance for legacy. This should only be affected by special cases and evasion. + return null + if(prob(miss_chance)) + //if(prob(70)) + // return null CHOMPEDIT - removing baymiss + return pick(base_miss_chance) + return zone + + +/proc/stars(n, pr) + if (pr == null) + pr = 25 + if (pr < 0) + return null + else + if (pr >= 100) + return n + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + var/intag = 0 + while(p <= n) + var/char = copytext(te, p, p + 1) + if (char == "<") //let's try to not break tags + intag = !intag + if (intag || char == " " || prob(pr)) + t = text("[][]", t, char) + else + t = text("[]*", t) + if (char == ">") + intag = !intag + p++ + return t + +/proc/stars_all(list/message_pieces, pr) + // eugh, we have to clone the list to avoid collateral damage due to the nature of these messages + . = list() + for(var/datum/multilingual_say_piece/S in message_pieces) + . += new /datum/multilingual_say_piece(S.speaking, stars(S.message)) + +/proc/slur(phrase) + phrase = html_decode(phrase) + var/leng=length(phrase) + var/counter=length(phrase) + var/newphrase="" + var/newletter="" + while(counter>=1) + newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2) + if(rand(1,3)==3) + if(lowertext(newletter)=="o") newletter="u" + if(lowertext(newletter)=="s") newletter="ch" + if(lowertext(newletter)=="a") newletter="ah" + if(lowertext(newletter)=="c") newletter="k" + switch(rand(1,9)) + if(1,3,5,8) newletter="[lowertext(newletter)]" + //if(2,4,6,15) newletter="[uppertext(newletter)]" + if(2,4,6,9) newletter="[uppertext(newletter)]" + if(7) newletter+="'" + //if(9,10) newletter="[newletter]" + //if(11,12) newletter="[newletter]" + //if(13) newletter="[newletter]" + newphrase+="[newletter]";counter-=1 + return newphrase + +/proc/stutter(n) + var/te = html_decode(n) + var/t = ""//placed before the message. Not really sure what it's for. + n = length(n)//length of the entire word + var/p = null + p = 1//1 is the start of any word + while(p <= n)//while P, which starts at 1 is less or equal to N which is the length. + var/n_letter = copytext(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time. + if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) + if (prob(10)) + n_letter = text("[n_letter]-[n_letter]-[n_letter]-[n_letter]")//replaces the current letter with this instead. + else + if (prob(20)) + n_letter = text("[n_letter]-[n_letter]-[n_letter]") + else + if (prob(5)) + n_letter = null + else + n_letter = text("[n_letter]-[n_letter]") + t = text("[t][n_letter]")//since the above is ran through for each letter, the text just adds up back to the original word. + p++//for each letter p is increased to find where the next letter will be. + return sanitize(t) + + +/proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added + /* Turn text into complete gibberish! */ + var/returntext = "" + for(var/i = 1, i <= length(t), i++) + + var/letter = copytext(t, i, i+1) + if(prob(50)) + if(p >= 70) + letter = "" + + for(var/j = 1, j <= rand(0, 2), j++) + letter += pick("#","@","*","&","%","$","/", "<", ">", ";","*","*","*","*","*","*","*") + + returntext += letter + + return returntext + + +/proc/ninjaspeak(n) +/* +The difference with stutter is that this proc can stutter more than 1 letter +The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma. +It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N +*/ + var/te = html_decode(n) + var/t = "" + n = length(n) + var/p = 1 + while(p <= n) + var/n_letter + var/n_mod = rand(1,4) + if(p+n_mod>n+1) + n_letter = copytext(te, p, n+1) + else + n_letter = copytext(te, p, p+n_mod) + if (prob(50)) + if (prob(30)) + n_letter = text("[n_letter]-[n_letter]-[n_letter]") + else + n_letter = text("[n_letter]-[n_letter]") + else + n_letter = text("[n_letter]") + t = text("[t][n_letter]") + p=p+n_mod + return sanitize(t) + + +/proc/shake_camera(mob/M, duration, strength=1) + if(!M || !M.client || M.shakecamera || M.stat || isEye(M) || isAI(M)) + return + M.shakecamera = 1 + spawn(1) + if(!M.client) + return + + var/atom/oldeye=M.client.eye + var/aiEyeFlag = 0 + if(istype(oldeye, /mob/observer/eye/aiEye)) + aiEyeFlag = 1 + + var/x + for(x=0; x
                    ") + +/proc/say_dead_object(var/message, var/obj/subject = null) + for(var/mob/M in player_list) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights && M.is_preference_enabled(/datum/client_preference/holder/show_staff_dsay))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) + var/follow + var/lname = "Game Master" + if(M.forbid_seeing_deadchat && !M.client.holder) + continue + + if(subject) + lname = "[subject.name] ([subject.x],[subject.y],[subject.z])" + + lname = "[lname] " + to_chat(M, "" + create_text_tag("event_dead", "EVENT:", M.client) + " [lname][follow][message]") + +//Announces that a ghost has joined/left, mainly for use with wizards +/proc/announce_ghost_joinleave(O, var/joined_ghosts = 1, var/message = "") + var/client/C + //Accept any type, sort what we want here + if(istype(O, /mob)) + var/mob/M = O + if(M.client) + C = M.client + else if(istype(O, /client)) + C = O + else if(istype(O, /datum/mind)) + var/datum/mind/M = O + if(M.current && M.current.client) + C = M.current.client + else if(M.original && M.original.client) + C = M.original.client + + if(C) + var/name + if(C.mob) + var/mob/M = C.mob + if(M.mind && M.mind.name) + name = M.mind.name + if(M.real_name && M.real_name != name) + if(name) + name += " ([M.real_name])" + else + name = M.real_name + if(!name) + name = (C.holder && C.holder.fakekey) ? C.holder.fakekey : C.key + if(joined_ghosts) + //say_dead_direct("The ghost of [name] now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead. [message]") //ChompEDIT - Removed for ghost privacy + log_and_message_admins("[name] entered ghost/observe mode. [message]") //ChompEDIT + + else + //say_dead_direct("[name] no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]") //ChompEDIT - Removed for ghost privacy + log_and_message_admins("[name] left ghost/observe mode. [message]") //ChompEDIT + + +/mob/proc/switch_to_camera(var/obj/machinery/camera/C) + if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) + return 0 + check_eye(src) + return 1 + +/mob/living/silicon/ai/switch_to_camera(var/obj/machinery/camera/C) + if(!C.can_use() || !is_in_chassis()) + return 0 + + eyeobj.setLoc(C) + return 1 + +// Returns true if the mob has a client which has been active in the last given X minutes. +/mob/proc/is_client_active(var/active = 1) + return client && client.inactivity < active MINUTES + +/mob/proc/can_eat() + return 1 + +/mob/proc/can_force_feed() + return 1 + +#define SAFE_PERP -50 +/mob/living/proc/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) + if(stat == DEAD) + return SAFE_PERP + + return 0 + +/mob/living/carbon/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) + if(handcuffed) + return SAFE_PERP + + return ..() + +/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) + var/threatcount = ..() + if(. == SAFE_PERP) + return SAFE_PERP + + //Agent cards lower threatlevel. + var/obj/item/weapon/card/id/id = GetIdCard() + if(id && istype(id, /obj/item/weapon/card/id/syndicate)) + threatcount -= 2 + // A proper CentCom id is hard currency. + else if(id && istype(id, /obj/item/weapon/card/id/centcom)) + return SAFE_PERP + + if(check_access && !access_obj.allowed(src)) + threatcount += 4 + + if(auth_weapons && !access_obj.allowed(src)) + if(istype(l_hand, /obj/item/weapon/gun) || istype(l_hand, /obj/item/weapon/melee) && !istype(l_hand, /obj/item/weapon/gun/energy/floragun) && !istype(l_hand, /obj/item/weapon/gun/energy/sizegun) && !istype(l_hand, /obj/item/weapon/gun/launcher/confetti_cannon) && !istype(l_hand, /obj/item/weapon/gun/energy/lasertag)) //CHOMP Edit: Specific guns to the exclusion list. + threatcount += 4 + + if(istype(r_hand, /obj/item/weapon/gun) || istype(r_hand, /obj/item/weapon/melee)) + threatcount += 4 + + if(istype(belt, /obj/item/weapon/gun) || istype(belt, /obj/item/weapon/melee)) + threatcount += 2 + + if(species.name != SPECIES_HUMAN) + threatcount += 2 + + if(check_records || check_arrest) + var/perpname = name + if(id) + perpname = id.registered_name + + var/datum/data/record/R = find_security_record("name", perpname) + if(check_records && !R) + threatcount += 4 + + if(check_arrest && R && (R.fields["criminal"] == "*Arrest*")) + threatcount += 4 + + return threatcount + +/mob/living/simple_mob/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) + var/threatcount = ..() + if(. == SAFE_PERP) + return SAFE_PERP + + if(has_AI() && ai_holder.hostile && faction != "neutral") // Otherwise Runtime gets killed. + threatcount += 4 + return threatcount + +// Beepsky will (try to) only beat 'bad' slimes. +/mob/living/simple_mob/slime/xenobio/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) + var/threatcount = 0 + + if(stat == DEAD) + return SAFE_PERP + + if(is_justified_to_discipline()) + threatcount += 4 +/* + if(discipline && !rabid) + if(!target_mob || istype(target_mob, /mob/living/carbon/human/monkey)) + return SAFE_PERP + + if(target_mob) + threatcount += 4 + + if(victim) + threatcount += 4 +*/ + if(has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder + if(AI.rabid) + threatcount = 10 + + return threatcount + +#undef SAFE_PERP + + +//TODO: Integrate defence zones and targeting body parts with the actual organ system, move these into organ definitions. + +//The base miss chance for the different defence zones +var/list/global/base_miss_chance = list( + BP_HEAD = 40, + BP_TORSO = 10, + BP_GROIN = 20, + BP_L_LEG = 20, + BP_R_LEG = 20, + BP_L_ARM = 20, + BP_R_ARM = 20, + BP_L_HAND = 50, + BP_R_HAND = 50, + BP_L_FOOT = 50, + BP_R_FOOT = 50, +) + +//Used to weight organs when an organ is hit randomly (i.e. not a directed, aimed attack). +//Also used to weight the protection value that armour provides for covering that body part when calculating protection from full-body effects. +var/list/global/organ_rel_size = list( + BP_HEAD = 25, + BP_TORSO = 70, + BP_GROIN = 30, + BP_L_LEG = 25, + BP_R_LEG = 25, + BP_L_ARM = 25, + BP_R_ARM = 25, + BP_L_HAND = 10, + BP_R_HAND = 10, + BP_L_FOOT = 10, + BP_R_FOOT = 10, +) + +/mob/proc/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) + return + +//Recalculates what planes this mob can see using their plane_holder, for humans this is checking slots, for others, could be whatever. +/mob/proc/recalculate_vis() + return + +//General HUD updates done regularly (health puppet things, etc) +/mob/proc/handle_regular_hud_updates() + return + +//Handle eye things like the Byond SEE_TURFS, SEE_OBJS, etc. +/mob/proc/handle_vision() + return + +//Icon is used to occlude things like huds from the faulty byond context menu. +// http://www.byond.com/forum/?post=2336679 +var/global/image/backplane +/hook/startup/proc/generate_backplane() + backplane = image('icons/misc/win32.dmi') + backplane.alpha = 0 + backplane.plane = -100 + backplane.layer = MOB_LAYER-0.1 + backplane.mouse_opacity = 0 + + return TRUE + +/mob/proc/get_sound_env(var/pressure_factor) + if (pressure_factor < 0.5) + return SPACE + else + var/area/A = get_area(src) + return A.sound_env + +/mob/proc/position_hud_item(var/obj/item/item, var/slot) + if(!istype(hud_used) || !slot || !LAZYLEN(hud_used.slot_info)) + return + + //They may have hidden their entire hud but the hands + if(!hud_used.hud_shown && slot > slot_r_hand) + item.screen_loc = null + return + + //They may have hidden the icons in the bottom left with the hide button + if(!hud_used.inventory_shown && slot > slot_r_store) + item.screen_loc = null + return + + var/screen_place = hud_used.slot_info["[slot]"] + if(!screen_place) + item.screen_loc = null + return + + item.screen_loc = screen_place + +/mob/proc/can_feed() + return TRUE diff --git a/code/modules/mob/mob_helpers_vr.dm b/code/modules/mob/mob_helpers_vr.dm index f16a204153..663cfc7f4a 100644 --- a/code/modules/mob/mob_helpers_vr.dm +++ b/code/modules/mob/mob_helpers_vr.dm @@ -1,14 +1,14 @@ -/mob/recalculate_vis() - . = ..() - if(!plane_holder || !vis_enabled) - return - - if(vantag_hud) - if(!(VIS_CH_VANTAG in vis_enabled)) - plane_holder.set_vis(VIS_CH_VANTAG,TRUE) - vis_enabled += VIS_CH_VANTAG - else - if(VIS_CH_VANTAG in vis_enabled) - plane_holder.set_vis(VIS_CH_VANTAG,FALSE) - vis_enabled -= VIS_CH_VANTAG - return +/mob/recalculate_vis() + . = ..() + if(!plane_holder || !vis_enabled) + return + + if(vantag_hud) + if(!(VIS_CH_VANTAG in vis_enabled)) + plane_holder.set_vis(VIS_CH_VANTAG,TRUE) + vis_enabled += VIS_CH_VANTAG + else + if(VIS_CH_VANTAG in vis_enabled) + plane_holder.set_vis(VIS_CH_VANTAG,FALSE) + vis_enabled -= VIS_CH_VANTAG + return diff --git a/code/modules/mob/new_player/logout.dm b/code/modules/mob/new_player/logout.dm index 5bc5054184..37e7d535ec 100644 --- a/code/modules/mob/new_player/logout.dm +++ b/code/modules/mob/new_player/logout.dm @@ -1,17 +1,17 @@ -/mob/new_player/Logout() - ready = 0 - - // see login.dm - if(my_client) - my_client.screen -= lobby_image - my_client = null - - ..() - - if(created_for) - del_mannequin(created_for) - - if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to. - key = null//We null their key before deleting the mob, so they are properly kicked out. - qdel(src) - return +/mob/new_player/Logout() + ready = 0 + + // see login.dm + if(my_client) + my_client.screen -= lobby_image + my_client = null + + ..() + + if(created_for) + del_mannequin(created_for) + + if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to. + key = null//We null their key before deleting the mob, so they are properly kicked out. + qdel(src) + return diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 5d132551ea..839c4846f4 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,316 +1,316 @@ -/datum/preferences - //The mob should have a gender you want before running this proc. Will run fine without H -/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) - var/datum/species/current_species = GLOB.all_species[species ? species : "Human"] - set_biological_gender(pick(current_species.genders)) - - h_style = random_hair_style(biological_gender, species) - f_style = random_facial_hair_style(biological_gender, species) - if(current_species) - if(current_species.appearance_flags & HAS_SKIN_TONE) - s_tone = random_skin_tone() - if(current_species.appearance_flags & HAS_SKIN_COLOR) - r_skin = rand (0,255) - g_skin = rand (0,255) - b_skin = rand (0,255) - if(current_species.appearance_flags & HAS_EYE_COLOR) - randomize_eyes_color() - if(current_species.appearance_flags & HAS_HAIR_COLOR) - randomize_hair_color("hair") - randomize_hair_color("facial") - if(current_species.appearance_flags & HAS_SKIN_COLOR) - r_skin = rand (0,255) - g_skin = rand (0,255) - b_skin = rand (0,255) - if(current_species.appearance_flags & HAS_UNDERWEAR) - all_underwear.Cut() - for(var/datum/category_group/underwear/WRC in global_underwear.categories) - var/datum/category_item/underwear/WRI = pick(WRC.items) - all_underwear[WRC.name] = WRI.name - - - backbag = rand(1,6) - pdachoice = rand(1,7) - age = rand(current_species.min_age, current_species.max_age) - b_type = RANDOM_BLOOD_TYPE - if(H) - copy_to(H,1) - - -/datum/preferences/proc/randomize_hair_color(var/target = "hair") - if(prob (75) && target == "facial") // Chance to inherit hair color - r_facial = r_hair - g_facial = g_hair - b_facial = b_hair - return - - var/red - var/green - var/blue - - var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") - switch(col) - if("blonde") - red = 255 - green = 255 - blue = 0 - if("black") - red = 0 - green = 0 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 51 - if("copper") - red = 255 - green = 153 - blue = 0 - if("brown") - red = 102 - green = 51 - blue = 0 - if("wheat") - red = 255 - green = 255 - blue = 153 - if("old") - red = rand (100, 255) - green = red - blue = red - if("punk") - red = rand (0, 255) - green = rand (0, 255) - blue = rand (0, 255) - - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) - - switch(target) - if("hair") - r_hair = red - g_hair = green - b_hair = blue - if("facial") - r_facial = red - g_facial = green - b_facial = blue - -/datum/preferences/proc/randomize_eyes_color() - var/red - var/green - var/blue - - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) - - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) - - r_eyes = red - g_eyes = green - b_eyes = blue - -/datum/preferences/proc/randomize_skin_color() - var/red - var/green - var/blue - - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) - - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) - - r_skin = red - g_skin = green - b_skin = blue - -/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin) - if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. - mannequin.dna = new /datum/dna(null) - copy_to(mannequin, TRUE) - - if(!equip_preview_mob) - return - - var/datum/job/previewJob - // Determine what job is marked as 'High' priority, and dress them up as such. - if(job_civilian_low & ASSISTANT) - previewJob = job_master.GetJob(USELESS_JOB) - else if(ispAI(client.mob)) //VOREStation Edit! - pAIs shouldn't wear job gear~! - //Don't do anything! - else - for(var/datum/job/job in job_master.occupations) - var/job_flag - switch(job.department_flag) - if(CIVILIAN) - job_flag = job_civilian_high - if(MEDSCI) - job_flag = job_medsci_high - if(ENGSEC) - job_flag = job_engsec_high - if(job.flag == job_flag) - previewJob = job - break - - if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg))) - var/list/equipped_slots = list() - for(var/thing in gear) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(!G.allowed_roles) - permitted = 1 - else if(!previewJob) - permitted = 0 - else - for(var/job_name in G.allowed_roles) - if(previewJob.title == job_name) - permitted = 1 - - if(G.whitelisted && (G.whitelisted != mannequin.species.name)) - permitted = 0 - - if(!permitted) - continue - - if(G.slot && !(G.slot in equipped_slots)) - var/metadata = gear[G.display_name] - if(mannequin.equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot)) - if(G.slot != slot_tie) - equipped_slots += G.slot - - if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob) - mannequin.job = previewJob.title - previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title]) - -/datum/preferences/proc/update_preview_icon() - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) - if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. - mannequin.dna = new /datum/dna(null) - mannequin.delete_inventory(TRUE) - dress_preview_mob(mannequin) - mannequin.update_transform() //VOREStation Edit to update size/shape stuff. - mannequin.toggle_tail(setting = animations_toggle) - mannequin.toggle_wing(setting = animations_toggle) - //mannequin.update_tail_showing() //CHOMPEdit. Moved to preferences_ch.dm - //mannequin.ImmediateOverlayUpdate() //CHOMPEdit - - update_character_previews(mannequin) //CHOMPEdit - -/datum/preferences/proc/get_highest_job() - var/datum/job/highJob - // Determine what job is marked as 'High' priority, and dress them up as such. - if(job_civilian_low & ASSISTANT) - highJob = job_master.GetJob("Assistant") - else - for(var/datum/job/job in job_master.occupations) - var/job_flag - switch(job.department_flag) - if(CIVILIAN) - job_flag = job_civilian_high - if(MEDSCI) - job_flag = job_medsci_high - if(ENGSEC) - job_flag = job_engsec_high - if(job.flag == job_flag) - highJob = job - break - - return highJob - -/datum/preferences/proc/get_valid_hairstyles() - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance - continue - if((!S.ckeys_allowed) || (usr.ckey in S.ckeys_allowed)) //VOREStation Edit, allows ckey locked hairstyles. - valid_hairstyles[S.name] = hairstyle //VOREStation Edit, allows ckey locked hairstyles. - - //valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] //VOREStation Edit. Replaced by above. - - return valid_hairstyles - -/datum/preferences/proc/get_valid_facialhairstyles() - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(biological_gender == MALE && S.gender == FEMALE) - continue - if(biological_gender == FEMALE && S.gender == MALE) - continue - if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - return valid_facialhairstyles +/datum/preferences + //The mob should have a gender you want before running this proc. Will run fine without H +/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) + var/datum/species/current_species = GLOB.all_species[species ? species : "Human"] + set_biological_gender(pick(current_species.genders)) + + h_style = random_hair_style(biological_gender, species) + f_style = random_facial_hair_style(biological_gender, species) + if(current_species) + if(current_species.appearance_flags & HAS_SKIN_TONE) + s_tone = random_skin_tone() + if(current_species.appearance_flags & HAS_SKIN_COLOR) + r_skin = rand (0,255) + g_skin = rand (0,255) + b_skin = rand (0,255) + if(current_species.appearance_flags & HAS_EYE_COLOR) + randomize_eyes_color() + if(current_species.appearance_flags & HAS_HAIR_COLOR) + randomize_hair_color("hair") + randomize_hair_color("facial") + if(current_species.appearance_flags & HAS_SKIN_COLOR) + r_skin = rand (0,255) + g_skin = rand (0,255) + b_skin = rand (0,255) + if(current_species.appearance_flags & HAS_UNDERWEAR) + all_underwear.Cut() + for(var/datum/category_group/underwear/WRC in global_underwear.categories) + var/datum/category_item/underwear/WRI = pick(WRC.items) + all_underwear[WRC.name] = WRI.name + + + backbag = rand(1,6) + pdachoice = rand(1,7) + age = rand(current_species.min_age, current_species.max_age) + b_type = RANDOM_BLOOD_TYPE + if(H) + copy_to(H,1) + + +/datum/preferences/proc/randomize_hair_color(var/target = "hair") + if(prob (75) && target == "facial") // Chance to inherit hair color + r_facial = r_hair + g_facial = g_hair + b_facial = b_hair + return + + var/red + var/green + var/blue + + var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") + switch(col) + if("blonde") + red = 255 + green = 255 + blue = 0 + if("black") + red = 0 + green = 0 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 51 + if("copper") + red = 255 + green = 153 + blue = 0 + if("brown") + red = 102 + green = 51 + blue = 0 + if("wheat") + red = 255 + green = 255 + blue = 153 + if("old") + red = rand (100, 255) + green = red + blue = red + if("punk") + red = rand (0, 255) + green = rand (0, 255) + blue = rand (0, 255) + + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) + + switch(target) + if("hair") + r_hair = red + g_hair = green + b_hair = blue + if("facial") + r_facial = red + g_facial = green + b_facial = blue + +/datum/preferences/proc/randomize_eyes_color() + var/red + var/green + var/blue + + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) + + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) + + r_eyes = red + g_eyes = green + b_eyes = blue + +/datum/preferences/proc/randomize_skin_color() + var/red + var/green + var/blue + + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) + + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) + + r_skin = red + g_skin = green + b_skin = blue + +/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin) + if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. + mannequin.dna = new /datum/dna(null) + copy_to(mannequin, TRUE) + + if(!equip_preview_mob) + return + + var/datum/job/previewJob + // Determine what job is marked as 'High' priority, and dress them up as such. + if(job_civilian_low & ASSISTANT) + previewJob = job_master.GetJob(USELESS_JOB) + else if(ispAI(client.mob)) //VOREStation Edit! - pAIs shouldn't wear job gear~! + //Don't do anything! + else + for(var/datum/job/job in job_master.occupations) + var/job_flag + switch(job.department_flag) + if(CIVILIAN) + job_flag = job_civilian_high + if(MEDSCI) + job_flag = job_medsci_high + if(ENGSEC) + job_flag = job_engsec_high + if(job.flag == job_flag) + previewJob = job + break + + if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg))) + var/list/equipped_slots = list() + for(var/thing in gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted = 0 + if(!G.allowed_roles) + permitted = 1 + else if(!previewJob) + permitted = 0 + else + for(var/job_name in G.allowed_roles) + if(previewJob.title == job_name) + permitted = 1 + + if(G.whitelisted && (G.whitelisted != mannequin.species.name)) + permitted = 0 + + if(!permitted) + continue + + if(G.slot && !(G.slot in equipped_slots)) + var/metadata = gear[G.display_name] + if(mannequin.equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot)) + if(G.slot != slot_tie) + equipped_slots += G.slot + + if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob) + mannequin.job = previewJob.title + previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title]) + +/datum/preferences/proc/update_preview_icon() + var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) + if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. + mannequin.dna = new /datum/dna(null) + mannequin.delete_inventory(TRUE) + dress_preview_mob(mannequin) + mannequin.update_transform() //VOREStation Edit to update size/shape stuff. + mannequin.toggle_tail(setting = animations_toggle) + mannequin.toggle_wing(setting = animations_toggle) + //mannequin.update_tail_showing() //CHOMPEdit. Moved to preferences_ch.dm + //mannequin.ImmediateOverlayUpdate() //CHOMPEdit + + update_character_previews(mannequin) //CHOMPEdit + +/datum/preferences/proc/get_highest_job() + var/datum/job/highJob + // Determine what job is marked as 'High' priority, and dress them up as such. + if(job_civilian_low & ASSISTANT) + highJob = job_master.GetJob("Assistant") + else + for(var/datum/job/job in job_master.occupations) + var/job_flag + switch(job.department_flag) + if(CIVILIAN) + job_flag = job_civilian_high + if(MEDSCI) + job_flag = job_medsci_high + if(ENGSEC) + job_flag = job_engsec_high + if(job.flag == job_flag) + highJob = job + break + + return highJob + +/datum/preferences/proc/get_valid_hairstyles() + var/list/valid_hairstyles = list() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance + continue + if((!S.ckeys_allowed) || (usr.ckey in S.ckeys_allowed)) //VOREStation Edit, allows ckey locked hairstyles. + valid_hairstyles[S.name] = hairstyle //VOREStation Edit, allows ckey locked hairstyles. + + //valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] //VOREStation Edit. Replaced by above. + + return valid_hairstyles + +/datum/preferences/proc/get_valid_facialhairstyles() + var/list/valid_facialhairstyles = list() + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(biological_gender == MALE && S.gender == FEMALE) + continue + if(biological_gender == FEMALE && S.gender == MALE) + continue + if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance + continue + + valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] + + return valid_facialhairstyles diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index c4220373af..340d4392a0 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1,3717 +1,3717 @@ -/* - - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, - facial hair, and possibly tattoos and stuff somewhere along the line. This file is - intended to be friendly for people with little to no actual coding experience. - The process of adding in new hairstyles has been made pain-free and easy to do. - Enjoy! - Doohl - - - Notice: This all gets automatically compiled in a list in dna2.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. - - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ - -/datum/sprite_accessory - - var/icon // the icon file the accessory is located in - var/icon_state // the icon_state of the accessory - var/preview_state // a custom preview state for whatever reason - - var/name = "ERROR - FIXME" // the preview name of the accessory - - // Determines if the accessory will be skipped or included in random hair generations - var/gender = NEUTER - - // Restrict some styles to specific species. Set to null to perform no checking. - var/list/species_allowed = list() - - // Whether or not the accessory can be affected by colouration - var/do_colouration = 1 - - var/color_blend_mode = ICON_MULTIPLY // If checked. - - // Ckey of person allowed to use this, if defined. - var/list/ckeys_allowed = null - - /// Should this sprite block emissives? - var/em_block = FALSE - - var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff. - -/* -//////////////////////////// -/ =--------------------= / -/ == Hair Definitions == / -/ =--------------------= / -//////////////////////////// -*/ - -/datum/sprite_accessory/hair - icon = 'icons/mob/Human_face_m.dmi' // default icon for all hairs - var/icon_add = 'icons/mob/human_face.dmi' - var/flags - -/datum/sprite_accessory/hair/eighties - name = "80s" - icon_state = "hair_80s" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afro - name = "Afro" - icon_state = "hair_afro" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afro2 - name = "Afro 2" - icon_state = "hair_afro2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afro_large - name = "Afro, Big" - icon_state = "hair_bigafro" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afropuffdouble - name = "Afropuff, Double" - icon_state = "hair_afropuffdouble" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afropuffleft - name = "Afropuff, Left" - icon_state = "hair_afropuffleft" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afropuffright - name = "Afropuff, Right" - icon_state = "hair_afropuffright" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/angelique - name = "Angelique" - icon_state = "hair_angelique" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/antonio - name = "Antonio" - icon_state = "hair_antonio" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/aradia - name = "Aradia" - icon_state = "hair_aradia" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/messyhair - name = "All Up" - icon_state = "hair_messyhair" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/amazon - name = "Amazon" - icon_state = "hair_amazon" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/antenna - name = "Antenna" - icon_state = "hair_antenna" - -/datum/sprite_accessory/hair/astolfo - name = "Astolfo" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "hair_astolfo" - -/datum/sprite_accessory/hair/averagejoe - name = "Average Joe" - icon_state = "hair_averagejoe" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/bald - name = "Bald" - icon_state = "bald" - flags = HAIR_VERY_SHORT - species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_VOX,SPECIES_TESHARI) - -/datum/sprite_accessory/hair/baldfade - name = "Balding Fade" - icon_state = "hair_baldfade" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/balding - name = "Balding Hair" - icon_state = "hair_e" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/band - name = "Band" - icon_state = "hair_band" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/beachwave - name = "Beach Waves" - icon_state = "hair_beachwave" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bedhead - name = "Bedhead" - icon_state = "hair_bedhead" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedheadv2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedheadv3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bedheadlong - name = "Bedhead Long" - icon_state = "hair_long_bedhead" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bedheadlongest - name = "Bedhead Longest" - icon_state = "hair_longest_bedhead" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/beehive - name = "Beehive" - icon_state = "hair_beehive" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/beehive2 - name = "Beehive 2" - icon_state = "hair_beehive2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bieber - name = "Bieber" - icon_state = "hair_bieb" - -/datum/sprite_accessory/hair/belenko - name = "Belenko" - icon_state = "hair_belenko" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/belenkotied - name = "Belenko Tied" - icon_state = "hair_belenkotied" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bigcurls - name = "Big Curls" - icon_state = "hair_bigcurls" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bob - name = "Bob" - icon_state = "hair_bobcut" - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bobcutalt - name = "Bob Chin Length" - icon_state = "hair_bobcutalt" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/midb - name = "Bob, Mid-length" - icon_state = "hair_midb" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bobcutovereye - name = "Bobcut Over Eye" - icon_state = "hair_bobcutovereye1" - -/datum/sprite_accessory/hair/bobcutovereye2 - name = "Bobcut Over Eye 2" - icon_state = "hair_bobcutovereye2" - -/datum/sprite_accessory/hair/bobcutovereye3 - name = "Bobcut Over Eye 3" - icon_state = "hair_bobcutovereye3" - -/datum/sprite_accessory/hair/bonnie - name = "Bonnie" - icon_state = "hair_bonnie" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bonniealt - name = "Bonnie Alt" - icon_state = "hair_bonniealt" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bonnielong - name = "Bonnie, Long" - icon_state = "hair_bonnie_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bonniealtlong - name = "Bonnie Alt, Long" - icon_state = "hair_bonniealt_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bonnieshort - name = "Bonnie, Short" - icon_state = "hair_bonnie_short" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bonniealtshort - name = "Bonnie Alt, Short" - icon_state = "hair_bonniealt_short" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bowl - name = "Bowl" - icon_state = "hair_bowlcut" - -/datum/sprite_accessory/hair/bowlcut2 - name = "Bowl 2" - icon_state = "hair_bowlcut2" - -/datum/sprite_accessory/hair/bowlcut2 - name = "Bowl, Overeye" - icon_state = "hair_overeyebowl" - -/datum/sprite_accessory/hair/grandebraid - name = "Braid Grande" - icon_state = "hair_grande" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/braid2 - name = "Braid Long" - icon_state = "hair_hbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longbraid - name = "Braid Long, Alt" - icon_state = "hair_longbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longbraidalt - name = "Braid Long, Alt 2" - icon_state = "hair_braidalt" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/mbraid - name = "Braid Medium" - icon_state = "hair_shortbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/braid - name = "Braid Floorlength" - icon_state = "hair_braid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/front_braid - name = "Braided front" - icon_state = "hair_braidfront" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/braidtail - name = "Braided Tail" - icon_state = "hair_braidtail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bun - name = "Bun" - icon_state = "hair_bun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bun2 - name = "Bun 2" - icon_state = "hair_bun2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bun3 - name = "Bun 3" - icon_state = "hair_bun3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bunhead - name = "Bun Head " - icon_state = "hair_bunhead" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/doublebun - name = "Bun Double" - icon_state = "hair_doublebun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/tightbun - name = "Bun Tight" - icon_state = "hair_tightbun" - flags = HAIR_VERY_SHORT | HAIR_TIEABLE - -/datum/sprite_accessory/hair/business - name = "Business Hair" - icon_state = "hair_business" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/business2 - name = "Business Hair 2" - icon_state = "hair_business2" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/business3 - name = "Business Hair 3" - icon_state = "hair_business3" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/business4 - name = "Business Hair 4" - icon_state = "hair_business4" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/buzz - name = "Buzzcut" - icon_state = "hair_buzzcut" - flags = HAIR_VERY_SHORT - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - -/datum/sprite_accessory/hair/celebcurls - name = "Celeb Curls" - icon_state = "hair_celebcurls" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/citheronia_colorable - name = "Citheronia" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "citheronia_hair_c" - do_colouration = 1 - -/datum/sprite_accessory/hair/crono - name = "Chrono" - icon_state = "hair_toriyama" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/cia - name = "CIA" - icon_state = "hair_cia" - -/datum/sprite_accessory/hair/coffeehouse - name = "Coffee House Cut" - icon_state = "hair_coffeehouse" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/combover - name = "Combover" - icon_state = "hair_combover" - -/datum/sprite_accessory/hair/cornbun - name = "Cornbun" - icon_state = "hair_cornbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/country - name = "Country" - icon_state = "hair_country" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/crew - name = "Crewcut" - icon_state = "hair_crewcut" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/curls - name = "Curls" - icon_state = "hair_curls" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/cut - name = "Cut Hair" - icon_state = "hair_c" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/darcy - name = "Darcy" - icon_state = "hair_darcy" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/dave - name = "Dave" - icon_state = "hair_dave" - -/datum/sprite_accessory/hair/dawn - name = "Dawn" - icon_state = "hair_dawn" - -/datum/sprite_accessory/hair/devillock - name = "Devil Lock" - icon_state = "hair_devilock" - -/datum/sprite_accessory/hair/diagonalbangs - name = "Diagonal Bangs" - icon_state = "hair_diagonalbangs" - -/datum/sprite_accessory/hair/dirk - name = "Dirk" - icon_state = "hair_dirk" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/donutbun - name = "Donut Bun" - icon_state = "hair_donutbun" - -/datum/sprite_accessory/hair/dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/dreadslong - name = "Dreads Long" - icon_state = "hair_dreadslong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/dreadslongalt - name = "Dreads Long, Alt" - icon_state = "hair_dreadlongalt" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/mahdrills - name = "Drillruru" - icon_state = "hair_drillruru" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/eagle - name = "Eagle" - icon_state = "hair_eagle" - -/datum/sprite_accessory/hair/elize - name = "Elize" - icon_state = "hair_elize" - -/datum/sprite_accessory/hair/emo - name = "Emo" - icon_state = "hair_emo" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/emo2 - name = "Emo Alt" - icon_state = "hair_emo2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/fringeemo - name = "Emo Fringe" - icon_state = "hair_emofringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfshaved - name = "Emo Half-Shaved" - icon_state = "hair_halfshaved" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfshavedlong - name = "Emo Half-Shaved Long" - icon_state = "hair_halfshavedL" - -/datum/sprite_accessory/hair/emoright - name = "Emo Mid-length" - icon_state = "hair_emoright" - -/datum/sprite_accessory/hair/longemo - name = "Emo Long" - icon_state = "hair_emolong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/equius - name = "Equius" - icon_state = "hair_equius" - -/datum/sprite_accessory/hair/fabio - name = "Fabio" - icon_state = "hair_fabio" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/highfade - name = "Fade High" - icon_state = "hair_highfade" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/medfade - name = "Fade Medium" - icon_state = "hair_medfade" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/lowfade - name = "Fade Low" - icon_state = "hair_lowfade" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/partfade - name = "Fade Parted" - icon_state = "hair_shavedpart" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/falcon - name = "Falcon" - icon_state = "hair_falcon" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/familyman - name = "Family Man" - icon_state = "hair_thefamilyman" - -/datum/sprite_accessory/hair/father - name = "Father" - icon_state = "hair_father" - -/datum/sprite_accessory/hair/feather - name = "Feather" - icon_state = "hair_feather" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/feferi - name = "Feferi" - icon_state = "hair_feferi" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/flair - name = "Flaired Hair" - icon_state = "hair_flair" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/flipped - name = "Flipped" - icon_state = "hair_flipped" - -/datum/sprite_accessory/hair/sargeant - name = "Flat Top" - icon_state = "hair_sargeant" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/braid - name = "Floorlength Braid" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "hair_braid" - -/datum/sprite_accessory/hair/flowhair - name = "Flow Hair" - icon_state = "hair_f" - -/datum/sprite_accessory/hair/fluffy - name = "Fluffy" - icon_state = "hair_fluffy" - -/datum/sprite_accessory/hair/fluffylong - name = "Fluffy, Long" - icon_state = "hair_fluffy_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longfringe - name = "Fringe Long" - icon_state = "hair_longfringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longestalt - name = "Fringe Longer" - icon_state = "hair_vlongfringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/fringetail - name = "Fringetail" - icon_state = "hair_fringetail" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/froofy_long - name = "Froofy Long" - icon_state = "hair_froofy_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/gamzee - name = "Gamzee" - icon_state = "hair_gamzee" - -/datum/sprite_accessory/hair/gelled - name = "Gelled Back" - icon_state = "hair_gelled" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/gentle - name = "Gentle" - icon_state = "hair_gentle" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/gentle2 - name = "Gentle 2, Long" - icon_state = "hair_gentle2long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/glammetal - name = "Glam Metal Long" - icon_state = "hair_glammetal" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/glossy - name = "Glossy" - icon_state = "hair_glossy" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" - -/datum/sprite_accessory/hair/halfbangalt - name = "Half-banged Hair Alt" - icon_state = "hair_halfbang_alt" - -/datum/sprite_accessory/hair/hightight - name = "High and Tight" - icon_state = "hair_hightight" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/himecut - name = "Hime Cut" - icon_state = "hair_himecut" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/himeup - name = "Hime Updo" - icon_state = "hair_himeup" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shorthime - name = "Hime Cut Short" - icon_state = "hair_shorthime" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/hitop - name = "Hitop" - icon_state = "hair_hitop" - -/datum/sprite_accessory/hair/hummingbird - name = "Hummingbird" - icon_state = "hair_hummingbird" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/inari - name = "Inari" - icon_state = "hair_inari" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/jade - name = "Jade" - icon_state = "hair_jade" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/jane - name = "Jane" - icon_state = "hair_jane" - -/datum/sprite_accessory/hair/jensen - name = "Jensen" - icon_state = "hair_jensen" - -/datum/sprite_accessory/hair/jessica - name = "Jessica" - icon_state = "hair_jessica" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/joestar - name = "Joestar" - icon_state = "hair_joestar" - -/datum/sprite_accessory/hair/judge - name = "Judge" - icon_state = "hair_judge" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/kagami - name = "Kagami" - icon_state = "hair_kagami" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/kanaya - name = "Kanaya" - icon_state = "hair_kanaya" - -/datum/sprite_accessory/hair/keanu - name = "Keanu Hair" - icon_state = "hair_keanu" - -/datum/sprite_accessory/hair/kusangi - name = "Kusanagi Hair" - icon_state = "hair_kusanagi" - -/datum/sprite_accessory/hair/long - name = "Long Hair Shoulder-length" - icon_state = "hair_b" - flags = HAIR_TIEABLE -/* -/datum/sprite_accessory/hair/longish - name = "Longer Hair" - icon_state = "hair_b2" - flags = HAIR_TIEABLE -*/ - -/datum/sprite_accessory/hair/longer - name = "Long Hair" - icon_state = "hair_vlong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longeralt2 - name = "Long Hair Alt 2" - icon_state = "hair_longeralt2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sidepartlongalt - name = "Long Side Part" - icon_state = "hair_longsidepart" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longest - name = "Very Long Hair" - icon_state = "hair_longest" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/lowbraid - name = "Low Braid" - icon_state = "hair_hbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/macaw - name = "Macaw" - icon_state = "hair_macaw" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/magpie - name = "Magpie" - icon_state = "hair_magpie" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/manbun - name = "Manbun" - icon_state = "hair_manbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/marysue - name = "Mary Sue" - icon_state = "hair_marysue" - -/datum/sprite_accessory/hair/mia - name = "Mia" - icon_state = "hair_mia" - -/datum/sprite_accessory/hair/mialong - name = "Mia Long" - icon_state = "hair_mialong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/miles - name = "Miles Hair" - icon_state = "hair_miles" - -/datum/sprite_accessory/hair/modern - name = "Modern" - icon_state = "hair_modern" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/mohawk - name = "Mohawk" - icon_state = "hair_d" - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - -/datum/sprite_accessory/hair/regulationmohawk - name = "Mohawk Regulation" - icon_state = "hair_shavedmohawk" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/reversemohawk - name = "Mohawk Reverse" - icon_state = "hair_reversemohawk" - -/datum/sprite_accessory/hair/mohawkunshaven - name = "Mohawk Unshaven" - icon_state = "hair_unshaven_mohawk" - -/datum/sprite_accessory/hair/mulder - name = "Mulder" - icon_state = "hair_mulder" - -/datum/sprite_accessory/hair/nepeta - name = "Nepeta" - icon_state = "hair_nepeta" - -/datum/sprite_accessory/hair/newyou - name = "New You" - icon_state = "hair_newyou" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/nia - name = "Nia" - icon_state = "hair_nia" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/nitori - name = "Nitori" - icon_state = "hair_nitori" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/odango - name = "Odango" - icon_state = "hair_odango" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ombre - name = "Ombre" - icon_state = "hair_ombre" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/oxton - name = "Oxton" - icon_state = "hair_oxton" - -/datum/sprite_accessory/hair/longovereye - name = "Overeye Long" - icon_state = "hair_longovereye" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shortovereye - name = "Overeye Short" - icon_state = "hair_shortovereye" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/veryshortovereyealternate - name = "Overeye Very Short, Alternate" - icon_state = "hair_veryshortovereyealternate" - -/datum/sprite_accessory/hair/veryshortovereye - name = "Overeye Very Short" - icon_state = "hair_veryshortovereye" - -/datum/sprite_accessory/hair/overear - name = "Over Ear, Right" - icon_state = "hair_overear1" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/overear2 - name = "Over Ear, Left" - icon_state = "hair_overear2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/owl - name = "Owl" - icon_state = "hair_owl" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/parted - name = "Parted" - icon_state = "hair_parted" - -/datum/sprite_accessory/hair/partedalt - name = "Parted Alt" - icon_state = "hair_partedalt" - - -/datum/sprite_accessory/hair/pixie - name = "Pixie Cut" - icon_state = "hair_pixie" - -/datum/sprite_accessory/hair/pompadour - name = "Pompadour" - icon_state = "hair_pompadour" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/dandypomp - name = "Pompadour Dandy" - icon_state = "hair_dandypompadour" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail1 - name = "Ponytail 1" - icon_state = "hair_ponytail" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/ponytail2 - name = "Ponytail 2" - icon_state = "hair_pa" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail4 - name = "Ponytail 4" - icon_state = "hair_ponytail4" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail5 - name = "Ponytail 5" - icon_state = "hair_ponytail5" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail6 - name = "Ponytail 6" - icon_state = "hair_ponytail6" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/sharpponytail - name = "Ponytail Sharp" - icon_state = "hair_sharpponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/spikyponytail - name = "Ponytail Spiky" - icon_state = "hair_spikyponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/thinponytail - name = "Ponytail Thin" - icon_state = "hair_thinponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/thinponytaillong - name = "Ponytail Thin, Long" - icon_state = "hair_thinponytail_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/poofy - name = "Poofy" - icon_state = "hair_poofy" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/poofy2 - name = "Poofy 2" - icon_state = "hair_poofy2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/princess - name = "Princess" - icon_state = "hair_princess" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/proper - name = "Proper" - icon_state = "hair_proper" - -/datum/sprite_accessory/hair/quiff - name = "Quiff" - icon_state = "hair_quiff" - -/datum/sprite_accessory/hair/nofade - name = "Regulation Cut" - icon_state = "hair_nofade" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/newyou - name = "New You" - icon_state = "hair_newyou" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rockandroll - name = "Rock and Roll" - icon_state = "hair_rockandroll" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rockstarcurls - name = "Rockstar Curls" - icon_state = "hair_rockstarcurls" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ronin - name = "Ronin" - icon_state = "hair_ronin" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rosa - name = "Rosa" - icon_state = "hair_rosa" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rose - name = "Rose" - icon_state = "hair_rose" - -/datum/sprite_accessory/hair/rows - name = "Rows" - icon_state = "hair_rows1" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/rows2 - name = "Rows 2" - icon_state = "hair_rows2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rowbun - name = "Row Bun" - icon_state = "hair_rowbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rowdualbraid - name = "Row Dual Braid" - icon_state = "hair_rowdualtail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rowbraid - name = "Row Braid" - icon_state = "hair_rowbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/roxy - name = "Roxy" - icon_state = "hair_roxy" - -/datum/sprite_accessory/hair/sabitsuki - name = "Sabitsuki" - icon_state = "hair_sabitsuki" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/scully - name = "Scully" - icon_state = "hair_scully" - -/datum/sprite_accessory/hair/shavehair - name = "Shaved Hair" - icon_state = "hair_shaved" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/shortbangs - name = "Short Bangs" - icon_state = "hair_shortbangs" - -/datum/sprite_accessory/hair/shortflip - name = "Short Flip" - icon_state = "hair_shortflip" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/short - name = "Short Hair" // try to capatilize the names please~ - icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/short2 - name = "Short Hair 2" - icon_state = "hair_shorthair3" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/short3 - name = "Short Hair 3" - icon_state = "hair_shorthair4" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/awoohair - name = "Shoulder-length Messy" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "momijihair" - -/datum/sprite_accessory/hair/shy - name = "Shy" - icon_state = "hair_shy" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail - name = "Side Ponytail" - icon_state = "hair_stail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail4 //Not happy about this... but it's for the save files. - name = "Side Ponytail 2" - icon_state = "hair_ponytailf" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail5 - name = "Side Ponytail 3" - icon_state = "hair_sidetail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail6 - name = "Side Ponytail 4" - icon_state = "hair_sidetail2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail2 - name = "Shoulder One" - icon_state = "hair_oneshoulder" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail3 - name = "Shoulder Tress" - icon_state = "hair_tressshoulder" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideundercut - name = "Side Undercut" - icon_state = "hair_sideundercut" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/skinhead - name = "Skinhead" - icon_state = "hair_skinhead" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/sleeze - name = "Sleeze" - icon_state = "hair_sleeze" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/protagonist - name = "Slightly Long" - icon_state = "hair_protagonist" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/spiky - name = "Spiky" - icon_state = "hair_spikey" - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - -/datum/sprite_accessory/hair/starling - name = "Starling" - icon_state = "hair_starling" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/stork - name = "Stork" - icon_state = "hair_stork" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/straightlong - name = "Straight Long" - icon_state = "hair_straightlong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/suave - name = "Suave" - icon_state = "hair_suave" - -/datum/sprite_accessory/hair/suavetwo - name = "Suave 2" - icon_state = "hair_suave2" - -/datum/sprite_accessory/hair/sweepshave - name = "Sweep Shave" - icon_state = "hair_sweepshave" - -/datum/sprite_accessory/hair/sweptfringe - name = "Swept Fringe" - icon_state = "hair_sweptfringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/taro - name = "Taro" - icon_state = "hair_taro" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/terezi - name = "Terezi" - icon_state = "hair_terezi" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/thinning - name = "Thinning" - icon_state = "hair_thinning" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/thinningfront - name = "Thinning Front" - icon_state = "hair_thinningfront" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/thinningback - name = "Thinning Back" - icon_state = "hair_thinningrear" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/topknot - name = "Topknot" - icon_state = "hair_topknot" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/trimflat - name = "Trimmed Flat Top" - icon_state = "hair_trimflat" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/trimmed - name = "Trimmed" - icon_state = "hair_trimmed" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/twindrills - name = "Twin Drills" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "hair_twincurl" - -/datum/sprite_accessory/hair/twintail - name = "Twintail" - icon_state = "hair_twintail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/twintails - name = "Twintails" - icon_state = "hair_twintails" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/twintailslong - name = "Twintails, Long" - icon_state = "hair_twintails_long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/twintailsshort - name = "Twintails, Short" - icon_state = "hair_twintails_short" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/twinbob - name = "Twinbun Bob" - icon_state = "hair_bunbob" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/undercut1 - name = "Undercut" - icon_state = "hair_undercut1" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/undercut2 - name = "Undercut Swept Right" - icon_state = "hair_undercut2" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/undercut3 - name = "Undercut Swept Left" - icon_state = "hair_undercut3" - gender = MALE - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/longundercut - name = "Undercut Long" - icon_state = "hair_undercutlong" - flags = HAIR_VERY_SHORT - -/datum/sprite_accessory/hair/unkept - name = "Unkept" - icon_state = "hair_unkept" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/updo - name = "Updo" - icon_state = "hair_updo" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/vegeta - name = "Vegeta" - icon_state = "hair_toriyama2" - -/datum/sprite_accessory/hair/vriska - name = "Vriska" - icon_state = "hair_vriska" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/vivi - name = "Vivi" - icon_state = "hair_vivi" - -/datum/sprite_accessory/hair/volaju - name = "Volaju" - icon_state = "hair_volaju" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/volaju_pompless - name = "Volaju, pompless" - icon_state = "hair_volajupompless" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/wisp - name = "Wisp" - icon_state = "hair_wisp" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/zieglertail - name = "Zieglertail" - icon_state = "hair_ziegler" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/zone - name = "Zone Braid" - icon_state = "hair_zone" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/una_hood - name = "Cobra Hood (small)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "soghun_hood" - species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/una_doublehorns - name = "Double Unathi Horns" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "soghun_dubhorns" - species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/sergal_plain - name = "Sergal Plain" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "serg_plain" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/sergal_medicore - name = "Sergal Medicore" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "serg_medicore" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/sergal_tapered - name = "Sergal Tapered" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "serg_tapered" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/sergal_fairytail - name = "Sergal Fairytail" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "serg_fairytail" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -// Vulpa stuffs - -/datum/sprite_accessory/hair/vulp_hair_none - name = "None" - icon_state = "bald" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_kajam - name = "Kajam" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "kajam" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_keid - name = "Keid" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "keid" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_adhara - name = "Adhara" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "adhara" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_kleeia - name = "Kleeia" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "kleeia" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_mizar - name = "Mizar" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "mizar" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_apollo - name = "Apollo" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "apollo" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_belle - name = "Belle" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "belle" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_bun - name = "Vulp Bun" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "bun" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_jagged - name = "Jagged" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "jagged" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_curl - name = "Curl" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "curl" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_hawk - name = "Hawk" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "hawk" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_anita - name = "Anita" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "anita" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_short - name = "Short" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "short" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_spike - name = "Spike" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "spike" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -//xeno stuffs -/datum/sprite_accessory/hair/xeno_head_drone_color - name = "Drone dome" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "cxeno_drone" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER -// figure this one out for better coloring -/datum/sprite_accessory/hair/xeno_head_sentinel_color - name = "Sentinal dome" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "cxeno_sentinel" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_queen_color - name = "Queen dome" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "cxeno_queen" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_hunter_color - name = "Hunter dome" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "cxeno_hunter" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_praetorian_color - name = "Praetorian dome" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "cxeno_praetorian" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -// Shadekin stuffs - -/datum/sprite_accessory/hair/shadekin_hair_short - name = "Shadekin Short Hair" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "shadekin_short" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/shadekin_hair_poofy - name = "Shadekin Poofy Hair" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "shadekin_poofy" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -/datum/sprite_accessory/hair/shadekin_hair_long - name = "Shadekin Long Hair" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "shadekin_long" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - -//its bird time mfers - Nevrean Hairs - -/datum/sprite_accessory/hair/feather_fan - name = "feather fan (nev)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "feather_fan" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/feather_plume_down - name = "feather plume down (nev)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "feather_plume_down" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/feather_plume_up - name = "feather plume up (nev)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "feather_plume_up" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/feather_plume_small - name = "feather plume small (nev)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "feather_plume_small" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/feather_halfmoon - name = "feather halfmoon (nev)" - icon = 'icons/mob/human_face_alt.dmi' - icon_add = 'icons/mob/human_face_alt_add.dmi' - icon_state = "feather_halfmoon" - flags = HAIR_TIEABLE - -/* -shaved - name = "Shaved" - icon_state = "bald" - gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) -*/ -/datum/sprite_accessory/facial_hair/neck_fluff - name = "Neck Fluff" - icon = 'icons/mob/human_face_or_alt.dmi' - icon_state = "facial_neckfluff" - gender = NEUTER - species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_none - name = "None" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "none" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_blaze - name = "Blaze" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_blaze" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_vulpine - name = "Vulpine" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_vulpine" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_earfluff - name = "Earfluff" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_earfluff" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_mask - name = "Mask" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_mask" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_patch - name = "Patch" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_patch" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_ruff - name = "Ruff" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_ruff" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_kita - name = "Kita" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_kita" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/facial_hair/vulp_swift - name = "Swift" - icon = 'icons/mob/human_face_alt.dmi' - icon_state = "vulp_facial_swift" - species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = NEUTER - color_blend_mode = ICON_MULTIPLY - -/* -/////////////////////////////////// -/ =---------------------------= / -/ == Facial Hair Definitions == / -/ =---------------------------= / -/////////////////////////////////// -*/ - -/datum/sprite_accessory/facial_hair - icon = 'icons/mob/Human_face.dmi' - color_blend_mode = ICON_ADD - em_block = TRUE - -/datum/sprite_accessory/facial_hair/shaved - name = "Shaved" - icon_state = "bald" - gender = NEUTER - species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI,SPECIES_TAJ,SPECIES_SKRELL, "Machine", SPECIES_TESHARI, SPECIES_TESHARI,SPECIES_PROMETHEAN) - -/datum/sprite_accessory/facial_hair/watson - name = "Watson Mustache" - icon_state = "facial_watson" - -/datum/sprite_accessory/facial_hair/hogan - name = "Hulk Hogan Mustache" - icon_state = "facial_hogan" //-Neek - -/datum/sprite_accessory/facial_hair/vandyke - name = "Van Dyke Mustache" - icon_state = "facial_vandyke" - -/datum/sprite_accessory/facial_hair/chaplin - name = "Square Mustache" - icon_state = "facial_chaplin" - -/datum/sprite_accessory/facial_hair/selleck - name = "Selleck Mustache" - icon_state = "facial_selleck" - -/datum/sprite_accessory/facial_hair/neckbeard - name = "Neckbeard" - icon_state = "facial_neckbeard" - -/datum/sprite_accessory/facial_hair/fullbeard - name = "Full Beard" - icon_state = "facial_fullbeard" - -/datum/sprite_accessory/facial_hair/longbeard - name = "Long Beard" - icon_state = "facial_longbeard" - -/datum/sprite_accessory/facial_hair/vlongbeard - name = "Very Long Beard" - icon_state = "facial_wise" - -/datum/sprite_accessory/facial_hair/elvis - name = "Elvis Sideburns" - icon_state = "facial_elvis" - species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) - -/datum/sprite_accessory/facial_hair/abe - name = "Abraham Lincoln Beard" - icon_state = "facial_abe" - -/datum/sprite_accessory/facial_hair/chinstrap - name = "Chinstrap" - icon_state = "facial_chin" - -/datum/sprite_accessory/facial_hair/hip - name = "Hipster Beard" - icon_state = "facial_hip" - -/datum/sprite_accessory/facial_hair/gt - name = "Goatee" - icon_state = "facial_gt" - -/datum/sprite_accessory/facial_hair/jensen - name = "Adam Jensen Beard" - icon_state = "facial_jensen" - -/datum/sprite_accessory/facial_hair/volaju - name = "Volaju" - icon_state = "facial_volaju" - -/datum/sprite_accessory/facial_hair/dwarf - name = "Dwarf Beard" - icon_state = "facial_dwarf" - -/datum/sprite_accessory/facial_hair/threeOclock - name = "3 O-clock Shadow" - icon_state = "facial_3oclock" - -/datum/sprite_accessory/facial_hair/threeOclockstache - name = "3 O-clock Shadow and Moustache" - icon_state = "facial_3oclockmoustache" - -/datum/sprite_accessory/facial_hair/fiveOclock - name = "5 O-clock Shadow" - icon_state = "facial_5oclock" - -/datum/sprite_accessory/facial_hair/fiveOclockstache - name = "5 O-clock Shadow and Moustache" - icon_state = "facial_5oclockmoustache" - -/datum/sprite_accessory/facial_hair/sevenOclock - name = "7 O-clock Shadow" - icon_state = "facial_7oclock" - -/datum/sprite_accessory/facial_hair/sevenOclockstache - name = "7 O-clock Shadow and Moustache" - icon_state = "facial_7oclockmoustache" - -/datum/sprite_accessory/facial_hair/mutton - name = "Mutton Chops" - icon_state = "facial_mutton" - -/datum/sprite_accessory/facial_hair/muttonstache - name = "Mutton Chops and Moustache" - icon_state = "facial_muttonmus" - -/datum/sprite_accessory/facial_hair/walrus - name = "Walrus Moustache" - icon_state = "facial_walrus" - -/datum/sprite_accessory/facial_hair/croppedbeard - name = "Full Cropped Beard" - icon_state = "facial_croppedfullbeard" - -/datum/sprite_accessory/facial_hair/chinless - name = "Chinless Beard" - icon_state = "facial_chinlessbeard" - -/datum/sprite_accessory/facial_hair/tribeard - name = "Tribeard" - icon_state = "facial_tribeard" - -/datum/sprite_accessory/facial_hair/moonshiner - name = "Moonshiner" - icon_state = "facial_moonshiner" - -/datum/sprite_accessory/facial_hair/martial - name = "Martial Artist" - icon_state = "facial_martialartist" -/* -/////////////////////////////////// -/ =---------------------------= / -/ == Alien Style Definitions == / -/ =---------------------------= / -/////////////////////////////////// -*/ - -//Unathi Head-Bits - -/datum/sprite_accessory/hair/una - name = "Long Unathi Spines" - icon_state = "soghun_longspines" - species_allowed = list(SPECIES_UNATHI) - -/datum/sprite_accessory/hair/una/spines_short - name = "Short Unathi Spines" - -/datum/sprite_accessory/hair/una/frills_long - name = "Long Unathi Frills" - icon_state = "soghun_longfrills" - -/datum/sprite_accessory/hair/una/frills_short - name = "Short Unathi Frills" - icon_state = "soghun_shortfrills" - -/datum/sprite_accessory/hair/una/horns - name = "Unathi Horns" - icon_state = "soghun_horns" - -/datum/sprite_accessory/hair/una/bighorns - name = "Unathi Big Horns" - icon_state = "unathi_bighorn" - -/datum/sprite_accessory/hair/una/smallhorns - name = "Unathi Small Horns" - icon_state = "unathi_smallhorn" - -/datum/sprite_accessory/hair/una/ramhorns - name = "Unathi Ram Horns" - icon_state = "unathi_ramhorn" - -/datum/sprite_accessory/hair/una/sidefrills - name = "Unathi Side Frills" - icon_state = "unathi_sidefrills" - -//Skrell 'hairstyles' - -/datum/sprite_accessory/hair/skr - name = "Skrell Average Tentacles" - icon_state = "skrell_hair_average" - species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - -/datum/sprite_accessory/hair/skr/tentacle_veryshort - name = "Skrell Short Tentacles" - icon_state = "skrell_hair_short" - gender = MALE - -/datum/sprite_accessory/hair/skr/tentacle_average - name = "Skrell Long Tentacles" - icon_state = "skrell_hair_long" - -/datum/sprite_accessory/hair/skr/tentacle_verylong - name = "Skrell Very Long Tentacles" - icon_state = "skrell_hair_verylong" - -//Tajaran hairstyles -/datum/sprite_accessory/hair/taj - name = "Tajaran Ears" - icon_state = "ears_plain" - species_allowed = list(SPECIES_TAJ) - -/datum/sprite_accessory/hair/taj/bangs - name = "Tajaran Bangs" - icon_state = "hair_bangs" - -/datum/sprite_accessory/hair/taj/bangs_alt - name = "Tajaran Bangs (Alt)" - icon_state = "hair_bangs_alt" - -/datum/sprite_accessory/hair/taj/short_fringe - name = "Tajaran Short Fringe" - icon_state = "hair_shortfringe" - -/datum/sprite_accessory/hair/taj/braid - name = "Tajaran Braid" - icon_state = "hair_tbraid" - -/datum/sprite_accessory/hair/taj/clean - name = "Tajaran Clean" - icon_state = "hair_clean" - -/datum/sprite_accessory/hair/taj/gman - name = "Tajaran G-Man" - icon_state = "hair_gman" - -/datum/sprite_accessory/hair/taj/greaser - name = "Tajaran Greaser" - icon_state = "hair_greaser" - -/datum/sprite_accessory/hair/taj/bun - name = "Tajaran Bun" - icon_state = "hair_tajbun" - -/datum/sprite_accessory/hair/taj/bunsmall - name = "Tajaran Bun (Small)" - icon_state = "hair_tajsmallbun" - -/datum/sprite_accessory/hair/taj/bunlow - name = "Tajaran Bun (Low)" - icon_state = "hair_tajbunlow" - -/datum/sprite_accessory/hair/taj/bunlowsmall - name = "Tajaran Bun (Low, Small)" - icon_state = "hair_tajbunlowsmall" - -/datum/sprite_accessory/hair/taj/_wedge - name = "Tajaran Wedge" - icon_state = "hair_wedge" - -/datum/sprite_accessory/hair/taj/shaggy - name = "Tajaran Shaggy" - icon_state = "hair_shaggy" - -/datum/sprite_accessory/hair/taj/mohawk - name = "Tajaran Mohawk" - icon_state = "hair_mohawk" - -/datum/sprite_accessory/hair/taj/plait - name = "Tajaran Plait" - icon_state = "hair_plait" - -/datum/sprite_accessory/hair/taj/_sidepony - name = "Tajaran Side Ponytail" - icon_state = "hair_sidepony" - -/datum/sprite_accessory/hair/taj/straight - name = "Tajaran Straight" - icon_state = "hair_straight" - -/datum/sprite_accessory/hair/taj/long - name = "Tajaran Long" - icon_state = "hair_long" - -/datum/sprite_accessory/hair/taj/tresses - name = "Tajaran Tresses" - icon_state = "hair_tresses" - -/datum/sprite_accessory/hair/taj/shoulderparted - name = "Tajaran Shoulder Parted" - icon_state = "hair_shoulderparted" - -/datum/sprite_accessory/hair/taj/shoulderpartedsmall - name = "Tajaran Shoulder Parted (Small)" - icon_state = "hair_shoulderpartedsmall" - -/datum/sprite_accessory/hair/taj/shoulderpartedlong - name = "Tajaran Shoulder Parted (Long)" - icon_state = "hair_shoulderpartedlong" - -/datum/sprite_accessory/hair/taj/sidepartedleft - name = "Tajaran Side Parted (Left)" - icon_state = "hair_sidepartedleft" - -/datum/sprite_accessory/hair/taj/sidepartedright - name = "Tajaran Side Parted (Right)" - icon_state = "hair_sidepartedright" - -/datum/sprite_accessory/hair/taj/shoulderlength - name = "Tajaran Shoulder Length" - icon_state = "hair_shoulderlength" - -/datum/sprite_accessory/hair/taj/shoulderlengthalt - name = "Tajaran Shoulder Length (Alt)" - icon_state = "hair_shoulderlengthalt" - -/datum/sprite_accessory/hair/taj/cascading - name = "Tajaran Cascading" - icon_state = "hair_cascading" - -/datum/sprite_accessory/hair/taj/cascadingalt - name = "Tajaran Cascading (Alt)" - icon_state = "hair_cascadingalt" - -/datum/sprite_accessory/hair/taj/rattail - name = "Tajaran Rat Tail" - icon_state = "hair_rattail" - -/datum/sprite_accessory/hair/taj/spiky - name = "Tajaran Spiky" - icon_state = "hair_tajspiky" - -/datum/sprite_accessory/hair/taj/fringeup - name = "Tajaran Fringe Spike" - icon_state = "hair_fringeup" - -/datum/sprite_accessory/hair/taj/messy - name = "Tajaran Messy" - icon_state = "hair_messy" - -/datum/sprite_accessory/hair/taj/curls - name = "Tajaran Curly" - icon_state = "hair_curly" - -/datum/sprite_accessory/hair/taj/curlsalt - name = "Tajaran Curly, alt" - icon_state = "hair_curlyalt" - -/datum/sprite_accessory/hair/taj/mane - name = "Tajaran Mane" - icon_state = "hair_mane" - -/datum/sprite_accessory/hair/taj/wife - name = "Tajaran Housewife" - icon_state = "hair_wife" - -/datum/sprite_accessory/hair/taj/victory - name = "Tajaran Victory Curls" - icon_state = "hair_victory" - -/datum/sprite_accessory/hair/taj/bob - name = "Tajaran Bob" - icon_state = "hair_tbob" -/datum/sprite_accessory/hair/taj/fingercurl - name = "Tajaran Finger Curls" - icon_state = "hair_fingerwave" - -//Teshari things -/datum/sprite_accessory/hair/teshari - name = "Teshari Default" - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "teshari_default" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/hair/teshari/altdefault - name = "Teshari Alt. Default" - icon_state = "teshari_ears" - -/datum/sprite_accessory/hair/teshari/tight - name = "Teshari Tight" - icon_state = "teshari_tight" - -/datum/sprite_accessory/hair/teshari/excited - name = "Teshari Spiky" - icon_state = "teshari_spiky" - -/datum/sprite_accessory/hair/teshari/spike - name = "Teshari Spike" - icon_state = "teshari_spike" - -/datum/sprite_accessory/hair/teshari/long - name = "Teshari Overgrown" - icon_state = "teshari_long" - -/datum/sprite_accessory/hair/teshari/burst - name = "Teshari Starburst" - icon_state = "teshari_burst" - -/datum/sprite_accessory/hair/teshari/shortburst - name = "Teshari Short Starburst" - icon_state = "teshari_burst_short" - -/datum/sprite_accessory/hair/teshari/mohawk - name = "Teshari Mohawk" - icon_state = "teshari_mohawk" - -/datum/sprite_accessory/hair/teshari/pointy - name = "Teshari Pointy" - icon_state = "teshari_pointy" - -/datum/sprite_accessory/hair/teshari/upright - name = "Teshari Upright" - icon_state = "teshari_upright" - -/datum/sprite_accessory/hair/teshari/mane - name = "Teshari Mane" - icon_state = "teshari_mane" - -/datum/sprite_accessory/hair/teshari/droopy - name = "Teshari Droopy" - icon_state = "teshari_droopy" - -/datum/sprite_accessory/hair/teshari/mushroom - name = "Teshari Mushroom" - icon_state = "teshari_mushroom" - -/datum/sprite_accessory/hair/teshari/twies - name = "Teshari Twies" - icon_state = "teshari_twies" - -/datum/sprite_accessory/hair/teshari/backstrafe - name = "Teshari Backstrafe" - icon_state = "teshari_backstrafe" - -/datum/sprite_accessory/hair/teshari/_longway - name = "Teshari Long way" - icon_state = "teshari_longway" - -/datum/sprite_accessory/hair/teshari/tree - name = "Teshari Tree" - icon_state = "teshari_tree" - -/datum/sprite_accessory/hair/teshari/fluffymohawk - name = "Teshari Fluffy Mohawk" - icon_state = "teshari_fluffymohawk" - -// Vox things -/datum/sprite_accessory/hair/vox - name = "Long Vox braid" - icon_state = "vox_longbraid" - species_allowed = list(SPECIES_VOX) - -/datum/sprite_accessory/hair/vox/braid_short - name = "Short Vox Braid" - icon_state = "vox_shortbraid" - -/datum/sprite_accessory/hair/vox/quills_short - name = "Short Vox Quills" - icon_state = "vox_shortquills" - -/datum/sprite_accessory/hair/vox/quills_kingly - name = "Kingly Vox Quills" - icon_state = "vox_kingly" - -/datum/sprite_accessory/hair/vox/quills_mohawk - name = "Quill Mohawk" - icon_state = "vox_mohawk" - -//Tajaran Facial Hair - -/datum/sprite_accessory/facial_hair/taj - name = "Tajaran Sideburns" - icon_state = "facial_sideburns" - species_allowed = list(SPECIES_TAJ) - -/datum/sprite_accessory/facial_hair/taj/mutton - name = "Tajaran Mutton" - icon_state = "facial_mutton" - -/datum/sprite_accessory/facial_hair/taj/pencilstache - name = "Tajaran Pencilstache" - icon_state = "facial_pencilstache" - -/datum/sprite_accessory/facial_hair/taj/moustache - name = "Tajaran Moustache" - icon_state = "facial_moustache" - -/datum/sprite_accessory/facial_hair/taj/goatee - name = "Tajaran Goatee" - icon_state = "facial_goatee" - -/datum/sprite_accessory/facial_hair/taj/smallstache - name = "Tajaran Smallsatche" - icon_state = "facial_smallstache" - -//unathi horn beards and the like - -/datum/sprite_accessory/facial_hair/una - name = "Unathi Chin Horn" - icon_state = "facial_chinhorns" - species_allowed = list(SPECIES_UNATHI) - -/datum/sprite_accessory/facial_hair/una/hornadorns - name = "Unathi Horn Adorns" - icon_state = "facial_hornadorns" - -/datum/sprite_accessory/facial_hair/una/spinespikes - name = "Unathi Spine Spikes" - icon_state = "facial_spikes" - -/datum/sprite_accessory/facial_hair/una/dorsalfrill - name = "Unathi Dorsal Frill" - icon_state = "facial_dorsalfrill" - - -//Teshari face things -/datum/sprite_accessory/facial_hair/teshari - name = "Teshari Beard" - icon_state = "teshari_chin" - species_allowed = list(SPECIES_TESHARI) - gender = NEUTER - -/datum/sprite_accessory/facial_hair/teshari/scraggly - name = "Teshari Scraggly" - icon_state = "teshari_scraggly" - - -/datum/sprite_accessory/facial_hair/teshari/chops - name = "Teshari Chops" - icon_state = "teshari_gap" - -/* -//////////////////////////// -/ =--------------------= / -/ == Body Markings == / -/ =--------------------= / -//////////////////////////// -*/ -/datum/sprite_accessory/marking - icon = 'icons/mob/human_races/markings.dmi' - do_colouration = 1 //Almost all of them have it, COLOR_ADD - - //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, - //like Tajaran inner-ear coloring overlay stuff. - species_allowed = list() - //This lets all races use - - color_blend_mode = ICON_ADD - - var/genetic = TRUE - var/organ_override = FALSE - var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines - //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD - -//Tattoos - -/datum/sprite_accessory/marking/tat_rheart - name = "Tattoo (Heart, R. Arm)" - icon_state = "tat_rheart" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/tat_lheart - name = "Tattoo (Heart, L. Arm)" - icon_state = "tat_lheart" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/tat_hive - name = "Tattoo (Hive, Back)" - icon_state = "tat_hive" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/tat_nightling - name = "Tattoo (Nightling, Back)" - icon_state = "tat_nightling" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/tat_campbell - name = "Tattoo (Campbell, R.Arm)" - icon_state = "tat_campbell" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/tat_campbell/left - name = "Tattoo (Campbell, L.Arm)" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/tat_campbell/rightleg - name = "Tattoo (Campbell, R.Leg)" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/tat_campbell/leftleg - name = "Tattoo (Campbell, L.Leg)" - body_parts = list (BP_L_LEG) - -/datum/sprite_accessory/marking/tat_silverburgh - name = "Tattoo (Silverburgh, R.Leg)" - icon_state = "tat_silverburgh" - body_parts = list (BP_R_LEG) - -/datum/sprite_accessory/marking/tat_silverburgh/left - name = "Tattoo (Silverburgh, L.Leg)" - icon_state = "tat_silverburgh" - body_parts = list (BP_L_LEG) - -/datum/sprite_accessory/marking/tat_tiger - name = "Tattoo (Tiger Stripes, Body)" - icon_state = "tat_tiger" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) - -//New tats - -/datum/sprite_accessory/marking/tat_belly - name = "Tattoo (Belly)" - icon_state = "tat_belly" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/tat_forrest_left - name = "Tattoo (Forrest, Left Eye)" - icon_state = "tat_forrest_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_forrest_right - name = "Tattoo (Forrest, Right Eye)" - icon_state = "tat_forrest_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_hunter_left - name = "Tattoo (Hunter, Left Eye)" - icon_state = "tat_hunter_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_hunter_right - name = "Tattoo (Hunter, Right Eye)" - icon_state = "tat_hunter_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_jaeger_left - name = "Tattoo (Jaeger, Left Eye)" - icon_state = "tat_jaeger_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_jaeger_right - name = "Tattoo (Jaeger, Right Eye)" - icon_state = "tat_jaeger_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_kater_left - name = "Tattoo (Kater, Left Eye)" - icon_state = "tat_kater_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_kater_right - name = "Tattoo (Kater, Right Eye)" - icon_state = "tat_kater_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_lujan_left - name = "Tattoo (Lujan, Left Eye)" - icon_state = "tat_lujan_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_lujan_right - name = "Tattoo (Lujan, Right Eye)" - icon_state = "tat_lujan_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_montana_left - name = "Tattoo (Montana, Left Face)" - icon_state = "tat_montana_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_montana_right - name = "Tattoo (Montana, Right Face)" - icon_state = "tat_montana_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_natasha_left - name = "Tattoo (Natasha, Left Eye)" - icon_state = "tat_natasha_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_natasha_right - name = "Tattoo (Natasha, Right Eye)" - icon_state = "tat_natasha_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_tamoko - name = "Tattoo (Ta Moko, Face)" - icon_state = "tat_tamoko" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_toshi_left - name = "Tattoo (Toshi, Left Eye)" - icon_state = "tat_toshi_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_toshi_right - name = "Tattoo (Volgin, Right Eye)" - icon_state = "tat_toshi_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tat_wings_back - name = "Tattoo (Wings, Lower Back)" - icon_state = "tat_wingsback" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/tilaka - name = "Tilaka" - icon_state = "tilaka" - body_parts = list(BP_HEAD) - - -/datum/sprite_accessory/marking/bands - name = "Color Bands" - icon_state = "bands" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) - -/datum/sprite_accessory/marking/bandsface - name = "Color Bands (Face)" - icon_state = "bandsface" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ,SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/bandsface_human - name = "Color Bands (Face)" - icon_state = "bandshumanface" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/tiger_stripes - name = "Tiger Stripes" - icon_state = "tiger" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits //There's a tattoo for non-cats - -/datum/sprite_accessory/marking/tigerhead - name = "Tiger Stripes (Head, Minor)" - icon_state = "tigerhead" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tigerface - name = "Tiger Stripes (Head, Major)" - icon_state = "tigerface" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits //There's a tattoo for non-cats - -/datum/sprite_accessory/marking/backstripe - name = "Back Stripe" - icon_state = "backstripe" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/bindi - name = "Bindi" - icon_state = "bindi" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/blush - name = "Blush" - icon_state= "blush" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/bridge - name = "Bridge" - icon_state = "bridge" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/brow_left - name = "Brow Left" - icon_state = "brow_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/brow_left/teshari - name = "Brow Left (Teshari)" - icon_state = "brow_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/brow_right - name = "Brow Right" - icon_state = "brow_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/brow_right/teshari - name = "Brow Right (Teshari)" - icon_state = "brow_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/cheekspot_left - name = "Cheek Spot (Left Cheek)" - icon_state = "cheekspot_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/cheekspot_right - name = "Cheek Spot (Right Cheek)" - icon_state = "cheekspot_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/cheshire_left - name = "Cheshire (Left Cheek)" - icon_state = "cheshire_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/cheshire_right - name = "Cheshire (Right Cheek)" - icon_state = "cheshire_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/eyestripe - name = "Eye Stripe" - icon_state = "eyestripe" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/eyestripe/teshari - name = "Eye Stripe (Teshari)" - icon_state = "eyestripe_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/eyecorner_left - name = "Eye Corner Left" - icon_state = "eyecorner_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/eyecorner_left/teshari - name = "Eye Corner Left (Teshari)" - icon_state = "eyecorner_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/eyecorner_right - name = "Eye Corner Right" - icon_state = "eyecorner_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/eyecorner_right/teshari - name = "Eye Corner Right (Teshari)" - icon_state = "eyecorner_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/fullfacepaint - name = "Full Face Paint" - icon_state = "fullface" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/lips - name = "Lips" - icon_state = "lips" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/lowercheek_left - name = "Lower Cheek Left" - icon_state = "lowercheek_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/lowercheek_left - name = "Lower Cheek Right" - icon_state = "lowercheek_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/neck - name = "Neck Cover" - icon_state = "neck" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/neckthick - name = "Neck Cover (Thick)" - icon_state = "neckthick" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/nosestripe - name = "Nose Stripe" - icon_state = "nosestripe" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/nosestripe/teshari - name = "Nose Stripe (Teshari)" - icon_state = "nosestripe_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/nosetape - name = "Nose Tape" - icon_state = "nosetape" - body_parts = list(BP_HEAD) - genetic = FALSE - -/datum/sprite_accessory/marking/nosetape/tesh - name = "Nose Tape (Teshari)" - icon_state = "nosetape_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_abdomen_left - name = "Scar, Abdomen Left" - icon_state = "scar_abdomen_l" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_abdomen_left/teshari - name = "Scar, Abdomen Left (Teshari)" - icon_state = "scar_abdomen_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_abdomen_right - name = "Scar, Abdomen Right" - icon_state = "scar_abdomen_r" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_abdomen_right/teshari - name = "Scar, Abdomen Right (Teshari)" - icon_state = "scar_abdomen_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_abdomen_small_left - name = "Scar, Abdomen Small Left" - icon_state = "scar_abdomensmall_l" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_abdomen_small_left/teshari - name = "Scar, Abdomen Small Left (Teshari)" - icon_state = "scar_abdomensmall_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_abdomen_small_right - name = "Scar, Abdomen Small Right" - icon_state = "scar_abdomensmall_r" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_abdomen_small_right/teshari - name = "Scar, Abdomen Small Right (Teshari)" - icon_state = "scar_abdomensmall_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_back_large - name = "Scar, Back Large" - icon_state = "scar_back_large" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_back_large/teshari - name = "Scar, Back Large (Teshari)" - icon_state = "scar_back_large_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_back_small - name = "Scar, Back Small (Center)" - icon_state = "scar_back_small" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_back_small/teshari - name = "Scar, Back Small (Center)(Teshari)" - icon_state = "scar_back_small_tesh" - species_allowed = list(SPECIES_TESHARI) - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_back_small_upper_right - name = "Scar, Back Small (Upper Right)" - icon_state = "scar_back_small_ur" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_back_small_upper_left - name = "Scar, Back Small (Upper Left)" - icon_state = "scar_back_small_ul" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_back_small_lower_right - name = "Scar, Back Small (Lower Right)" - icon_state = "scar_back_small_lr" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_back_small_lower_left - name = "Scar, Back Small (Lower Left)" - icon_state = "scar_back_small_ll" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_chest_large_left - name = "Scar, Chest Large (Left)" - icon_state = "scar_chest_large_l" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_chest_large_left/teshari - name = "Scar, Chest Large (Left)(Teshari)" - icon_state = "scar_chest_large_l_tesh" - species_allowed = list(SPECIES_TESHARI) - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_chest_large_right - name = "Scar, Chest Large (Right)" - icon_state = "scar_chest_large_r" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_chest_large_right/teshari - name = "Scar, Chest Large (Right)(Teshari)" - icon_state = "scar_chest_large_r_tesh" - species_allowed = list(SPECIES_TESHARI) - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_chest_small_left - name = "Scar, Chest Small (Left)" - icon_state = "scar_chest_small_l" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_chest_small_left/teshari - name = "Scar, Chest Small (Left)(Teshari)" - icon_state = "scar_chest_small_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_chest_small_right - name = "Scar, Chest Small (Right)" - icon_state = "scar_chest_small_r" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_chest_small_right/teshari - name = "Scar, Chest Small (Right)(Teshari)" - icon_state = "scar_chest_small_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_belly - name = "Scar, Belly" - icon_state = "scar_belly" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/scar_belly/teshari - name = "Scar, Belly (Teshari)" - icon_state = "scar_belly_tesh" - species_allowed = list(SPECIES_TESHARI) - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/scar_cheek_left - name = "Scar, Cheek (Left)" - icon_state = "scar_cheek_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_cheek_right - name = "Scar, Cheek (Right)" - icon_state = "scar_cheek_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_forehead_left - name = "Scar, Forehead (Left)" - icon_state = "scar_forehead_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_forehead_left/teshari - name = "Scar, Forehead (Left)(Teshari)" - icon_state = "scar_forehead_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_forehead_right - name = "Scar, Forehead (Right)" - icon_state = "scar_forehead_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_forehead_right/teshari - name = "Scar, Forehead (Right)(Teshari)" - icon_state = "scar_forehead_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_chin - name = "Scar, Chin" - icon_state = "scar_chin" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_muzzle_teshari - name = "Scar, Muzzle" - icon_state = "scar_muzzle_tesh" - species_allowed = list(SPECIES_TESHARI) - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_eye_left - name = "Scar, Over Eye (Left)" - icon_state = "scar_eye_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_eye_left/teshari - name = "Scar, Over Eye (Left)(Teshari)" - icon_state = "scar_eye_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_eye_right - name = "Scar, Over Eye (Right)" - icon_state = "scar_eye_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/scar_eye_right/teshari - name = "Scar, Over Eye (Right)(Teshari)" - icon_state = "scar_eye_r_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_arm_upper - name = "Scar, Left Arm (Upper)" - icon_state = "scar_arm_left_u" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/scar_left_arm_upper/teshari - name = "Scar, Left Arm (Upper)(Teshari)" - icon_state = "scar_arm_left_u_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_arm_lower - name = "Scar, Left Arm (Lower)" - icon_state = "scar_arm_left_l" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/scar_left_arm_lower/teshari - name = "Scar, Left Arm (Lower)(Teshari)" - icon_state = "scar_arm_left_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_arm_rear - name = "Scar, Left Arm (Rear)" - icon_state = "scar_arm_left_rear" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/scar_left_arm_rear/teshari - name = "Scar, Left Arm (Rear)(Teshari)" - icon_state = "scar_arm_left_rear_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_hand - name = "Scar, Left Hand" - icon_state = "scar_hand_left" - body_parts = list(BP_L_HAND) - -/datum/sprite_accessory/marking/scar_left_hand/teshari - name = "Scar, Left Hand (Teshari)" - icon_state = "scar_hand_left_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_arm_upper - name = "Scar, Right Arm (Upper)" - icon_state = "scar_arm_right_u" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/scar_right_arm_upper/teshari - name = "Scar, Right Arm (Upper)(Teshari)" - icon_state = "scar_arm_right_u_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_arm_lower - name = "Scar, Right Arm (Lower)" - icon_state = "scar_arm_right_l" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/scar_right_arm_lower/teshari - name = "Scar, Right Arm (Lower)(Teshari)" - icon_state = "scar_arm_right_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_arm_rear - name = "Scar, Right Arm (Rear)" - icon_state = "scar_arm_right_rear" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/scar_right_arm_rear/teshari - name = "Scar, Right Arm (Rear)(Teshari)" - icon_state = "scar_arm_right_rear_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_hand - name = "Scar, Right Hand" - icon_state = "scar_hand_right" - body_parts = list(BP_R_HAND) - -/datum/sprite_accessory/marking/scar_right_hand/teshari - name = "Scar, Right Hand (Teshari)" - icon_state = "scar_hand_right_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_leg_upper - name = "Scar, Left Leg (Upper)" - icon_state = "scar_leg_left_u" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/scar_left_leg_upper/teshari - name = "Scar, Left Leg (Upper)(Teshari)" - icon_state = "scar_leg_left_u_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_leg_lower - name = "Scar, Left Leg (Lower)" - icon_state = "scar_leg_left_l" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/scar_left_leg_lower/teshari - name = "Scar, Left Leg (Lower)(Teshari)" - icon_state = "scar_leg_left_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_leg_rear - name = "Scar, Left Leg (Rear)" - icon_state = "scar_leg_left_rear" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/scar_left_leg_rear/teshari - name = "Scar, Left Leg (Rear)(Teshari)" - icon_state = "scar_leg_left_rear_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_left_foot - name = "Scar, Left Foot" - icon_state = "scar_left_foot" - body_parts = list(BP_L_FOOT) - -/datum/sprite_accessory/marking/scar_left_foot/teshari - name = "Scar, Left Foot (Teshari)" - icon_state = "scar_left_foot_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_leg_upper - name = "Scar, Right Leg (Upper)" - icon_state = "scar_right_leg_u" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/scar_right_leg_upper/teshari - name = "Scar, Right Leg (Upper)(Teshari)" - icon_state = "scar_right_leg_u_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_leg_lower - name = "Scar, Right Leg (Lower)" - icon_state = "scar_right_leg_l" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/scar_right_leg_lower/teshari - name = "Scar, Right Leg (Lower)(Teshari)" - icon_state = "scar_right_leg_l_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_leg_rear - name = "Scar, Right Leg (Rear)" - icon_state = "scar_right_leg_rear" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/scar_right_leg_rear/teshari - name = "Scar, Right Leg (Rear)(Teshari)" - icon_state = "scar_right_leg_rear_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/scar_right_foot - name = "Scar, Right Foot" - icon_state = "scar_right_foot" - body_parts = list(BP_R_FOOT) - -/datum/sprite_accessory/marking/scar_right_foot/teshari - name = "Scar, Right Foot (Teshari)" - icon_state = "scar_right_foot_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/skull_paint - name = "Skull Paint" - icon_state = "skull" - body_parts = list(BP_HEAD) - genetic = FALSE - -//Heterochromia - -/datum/sprite_accessory/marking/heterochromia - name = "Heterochromia (right eye)" - icon_state = "heterochromia" - body_parts = list(BP_HEAD) - -//Taj/Unathi shared markings - -/datum/sprite_accessory/marking/taj_paw_socks - name = "Socks Coloration (Taj)" - icon_state = "taj_pawsocks" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/una_paw_socks - name = "Socks Coloration (Una)" - icon_state = "una_pawsocks" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) - //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/paw_socks - name = "Socks Coloration (Generic)" - icon_state = "pawsocks" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) - //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/paw_socks_belly - name = "Socks,Belly Coloration (Generic)" - icon_state = "pawsocksbelly" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) - //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/belly_hands_feet - name = "Hands,Feet,Belly Color (Minor)" - icon_state = "bellyhandsfeetsmall" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) - //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/hands_feet_belly_full - name = "Hands,Feet,Belly Color (Major)" - icon_state = "bellyhandsfeet" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) - //SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/hands_feet_belly_full_female - name = "Hands,Feet,Belly Color (Major, Female)" - icon_state = "bellyhandsfeet_female" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/patches - name = "Color Patches" - icon_state = "patches" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/patchesface - name = "Color Patches (Face)" - icon_state = "patchesface" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - - - //Taj specific stuff -/datum/sprite_accessory/marking/taj_belly - name = "Belly Fur (Taj)" - icon_state = "taj_belly" - body_parts = list(BP_TORSO) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_bellyfull - name = "Belly Fur Wide (Taj)" - icon_state = "taj_bellyfull" - body_parts = list(BP_TORSO) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_earsout - name = "Outer Ear (Taj)" - icon_state = "taj_earsout" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_earsin - name = "Inner Ear (Taj)" - icon_state = "taj_earsin" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_nose - name = "Nose Color (Taj)" - icon_state = "taj_nose" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_crest - name = "Chest Fur Crest (Taj)" - icon_state = "taj_crest" - body_parts = list(BP_TORSO) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_muzzle - name = "Muzzle Color (Taj)" - icon_state = "taj_muzzle" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_face - name = "Cheeks Color (Taj)" - icon_state = "taj_face" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/taj_all - name = "All Taj Head (Taj)" - icon_state = "taj_all" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - - //Una specific stuff -/datum/sprite_accessory/marking/una_face - name = "Face Color (Una)" - icon_state = "una_face" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/una_facelow - name = "Face Color Low (Una)" - icon_state = "una_facelow" - body_parts = list(BP_HEAD) - //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/una_scutes - name = "Scutes (Una)" - icon_state = "una_scutes" - body_parts = list(BP_TORSO) - //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits - - //Tesh stuff. - -/datum/sprite_accessory/marking/teshi_fluff - name = "Underfluff (Teshari)" - icon_state = "teshi_fluff" - body_parts = list(BP_HEAD, BP_TORSO, BP_GROIN, BP_R_LEG, BP_L_LEG) - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/teshi_heterochromia - name = "Heterochromia (Teshari) (right eye)" - icon_state = "teshi_heterochromia" - body_parts = list(BP_HEAD) - species_allowed = list(SPECIES_TESHARI) - - //Diona stuff. - -/datum/sprite_accessory/marking/diona_leaves - name = "Leaves (Diona)" - icon_state = "diona_leaves" - body_parts = list(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_TORSO, BP_GROIN, BP_HEAD) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/diona_thorns - name = "Thorns (Diona)" - icon_state = "diona_thorns" - body_parts =list(BP_TORSO, BP_HEAD) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - do_colouration = 0 - -/datum/sprite_accessory/marking/diona_flowers - name = "Flowers (Diona)" - icon_state = "diona_flowers" - body_parts =list(BP_TORSO, BP_HEAD) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - do_colouration = 0 - -/datum/sprite_accessory/marking/diona_moss - name = "Moss (Diona)" - icon_state = "diona_moss" - body_parts =list(BP_TORSO) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - do_colouration = 0 - -/datum/sprite_accessory/marking/diona_mushroom - name = "Mushroom (Diona)" - icon_state = "diona_mushroom" - body_parts =list(BP_HEAD) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - do_colouration = 0 - -/datum/sprite_accessory/marking/diona_antennae - name = "Antennae (Diona)" - icon_state = "diona_antennae" - body_parts =list(BP_HEAD) - //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits - do_colouration = 0 - -//Skrell stuff. - -/datum/sprite_accessory/marking/skrell - name = "Countershading (Skrell)" - icon_state = "skr_shade" - body_parts = list(BP_TORSO, BP_GROIN, BP_HEAD) - //species_allowed = list(SPECIES_SKRELL) //Removing Polaris whitelits - -/datum/sprite_accessory/marking/skrell/stripes - name = "Poison Dart Stripes (Skrell)" - icon_state = "skr_stripes" - body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_TORSO) - -//Cybernetic Augments, some species-limited due to sprite misalignment. /aug/ types are excluded from dna. - -/datum/sprite_accessory/marking/aug - name = "Augment (Backports, Back)" - icon_state = "aug_backports" - genetic = FALSE - body_parts = list(BP_TORSO) - species_allowed = list() //Removing Polaris whitelits - -/datum/sprite_accessory/marking/aug/diode - name = "Augment (Backports Diode, Back)" - icon_state = "aug_backportsdiode" - -/datum/sprite_accessory/marking/aug/backportswide - name = "Augment (Backports Wide, Back)" - icon_state = "aug_backportswide" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/aug/backportswide/diode - name = "Augment (Backports Wide Diode, Back)" - icon_state = "aug_backportswidediode" - -/datum/sprite_accessory/marking/aug/headcase - name = "Augment (Headcase, Head)" - icon_state = "aug_headcase" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/headcase_light - name = "Augment (Headcase Light, Head)" - icon_state = "aug_headcaselight" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/headport - name = "Augment (Headport, Head)" - icon_state = "aug_headport" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/headport/diode - name = "Augment (Headport Diode, Head)" - icon_state = "aug_headplugdiode" - -/datum/sprite_accessory/marking/aug/lowerjaw - name = "Augment (Lower Jaw, Head)" - icon_state = "aug_lowerjaw" - body_parts = list(BP_HEAD) - species_allowed = list() //Removing Polaris whitelits - -/datum/sprite_accessory/marking/aug/scalpports - name = "Augment (Scalp Ports)" - icon_state = "aug_scalpports" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/scalpports/vertex_left - name = "Augment (Scalp Port, Vertex Left)" - icon_state = "aug_vertexport_l" - -/datum/sprite_accessory/marking/aug/scalpports/vertex_right - name = "Augment (Scalp Port, Vertex Right)" - icon_state = "aug_vertexport_r" - -/datum/sprite_accessory/marking/aug/scalpports/occipital_left - name = "Augment (Scalp Port, Occipital Left)" - icon_state = "aug_occipitalport_l" - -/datum/sprite_accessory/marking/aug/scalpports/occipital_right - name = "Augment (Scalp Port, Occipital Right)" - icon_state = "aug_occipitalport_r" - -/datum/sprite_accessory/marking/aug/scalpportsdiode - name = "Augment (Scalp Ports Diode)" - icon_state = "aug_scalpportsdiode" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_left - name = "Augment (Scalp Port Diode, Vertex Left)" - icon_state = "aug_vertexportdiode_l" - -/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_right - name = "Augment (Scalp Port Diode, Vertex Right)" - icon_state = "aug_vertexportdiode_r" - -/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_left - name = "Augment (Scalp Port Diode, Occipital Left)" - icon_state = "aug_occipitalportdiode_l" - -/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_right - name = "Augment (Scalp Port Diode, Occipital Right)" - icon_state = "aug_occipitalportdiode_r" - -/datum/sprite_accessory/marking/aug/backside_left - name = "Augment (Backside Left, Head)" - icon_state = "aug_backside_l" - -/datum/sprite_accessory/marking/aug/backside_left/side_diode - name = "Augment (Backside Left Diode, Head)" - icon_state = "aug_sidediode_l" - -/datum/sprite_accessory/marking/aug/backside_right - name = "Augment (Backside Right, Head)" - icon_state = "aug_backside_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/backside_right/side_diode - name = "Augment (Backside Right Diode, Head)" - icon_state = "aug_sidediode_r" - -/datum/sprite_accessory/marking/aug/side_deunan_left - name = "Augment (Deunan, Side Left)" - icon_state = "aug_sidedeunan_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_deunan_right - name = "Augment (Deunan, Side Right)" - icon_state = "aug_sidedeunan_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_kuze_left - name = "Augment (Kuze, Side Left)" - icon_state = "aug_sidekuze_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_kuze_left/side_diode - name = "Augment (Kuze Diode, Side Left)" - icon_state = "aug_sidekuzediode_l" - -/datum/sprite_accessory/marking/aug/side_kuze_right - name = "Augment (Kuze, Side Right)" - icon_state = "aug_sidekuze_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_kuze_right/side_diode - name = "Augment (Kuze Diode, Side Right)" - icon_state = "aug_sidekuzediode_r" - -/datum/sprite_accessory/marking/aug/side_kinzie_left - name = "Augment (Kinzie, Side Left)" - icon_state = "aug_sidekinzie_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_kinzie_right - name = "Augment (Kinzie, Side Right)" - icon_state = "aug_sidekinzie_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_shelly_left - name = "Augment (Shelly, Side Left)" - icon_state = "aug_sideshelly_l" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/side_shelly_right - name = "Augment (Shelly, Side Right)" - icon_state = "aug_sideshelly_r" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/aug/chestports - name = "Augment (Chest Ports)" - icon_state = "aug_chestports" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/aug/chestports/teshari - name = "Augment (Chest Ports)(Teshari)" - icon_state = "aug_chestports_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/aug/abdomenports - name = "Augment (Abdomen Ports)" - icon_state = "aug_abdomenports" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/aug/abdomenports/teshari - name = "Augment (Abdomen Ports)(Teshari)" - icon_state = "aug_abdomenports_tesh" - body_parts = list(BP_GROIN) - species_allowed = list(SPECIES_TESHARI) - -//bandages - -/datum/sprite_accessory/marking/bandage - name = "Bandage, Head 1" - icon_state = "bandage1" - body_parts = list(BP_HEAD) - genetic = FALSE - do_colouration = FALSE - -/datum/sprite_accessory/marking/bandage/teshari - name = "Bandage, Head 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/head2 - name = "Bandage, Head 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/head2/teshari - name = "Bandage, Head 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/head3 - name = "Bandage, Head 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/head3/teshari - name = "Bandage, Head 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/torso - name = "Bandage, Torso 1" - icon_state = "bandage1" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/bandage/torso/teshari - name = "Bandage, Torso 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/torso/torso2 - name = "Bandage, Torso 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/torso/torso2/teshari - name = "Bandage, Torso 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/torso/torso3 - name = "Bandage, Torso 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/torso/torso3/teshari - name = "Bandage, Torso 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/groin - name = "Bandage, Groin 1" - icon_state = "bandage1" - body_parts = list(BP_GROIN) - -/datum/sprite_accessory/marking/bandage/groin/teshari - name = "Bandage, Groin 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/groin/groin2 - name = "Bandage, Groin 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/groin/groin2/teshari - name = "Bandage, Groin 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/groin/groin3 - name = "Bandage, Groin 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/groin/groin3/teshari - name = "Bandage, Groin 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_arm - name = "Bandage, Left Arm 1" - icon_state = "bandage1" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/bandage/l_arm/teshari - name = "Bandage, Left Arm 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_arm/l_arm2 - name = "Bandage, Left Arm 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/l_arm/l_arm2/teshari - name = "Bandage, Left Arm 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_arm/l_arm3 - name = "Bandage, Left Arm 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/l_arm/l_arm3/teshari - name = "Bandage, Left Arm 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_hand - name = "Bandage, Left Hand 1" - icon_state = "bandage1" - body_parts = list(BP_L_HAND) - -/datum/sprite_accessory/marking/bandage/l_hand/teshari - name = "Bandage, Left Hand 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_hand/l_hand2 - name = "Bandage, Left Hand 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/l_hand/l_hand_2/teshari - name = "Bandage, Left Hand 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_hand/l_hand3 - name = "Bandage, Left Hand 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/r_arm - name = "Bandage, Right Arm 1" - icon_state = "bandage1" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/bandage/r_arm/teshari - name = "Bandage, Right Arm 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_arm/r_arm2 - name = "Bandage, Right Arm 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/r_arm/r_arm2/teshari - name = "Bandage, Right Arm 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_arm/r_arm3 - name = "Bandage, Right Arm 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/r_arm/r_arm3/teshari - name = "Bandage, Right Arm 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_hand - name = "Bandage, Right Hand 1" - icon_state = "bandage1" - body_parts = list(BP_R_HAND) - -/datum/sprite_accessory/marking/bandage/r_hand/teshari - name = "Bandage, Right Hand 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_hand/r_hand2 - name = "Bandage, Right Hand 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/r_hand/r_hand2/teshari - name = "Bandage, Right Hand 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_hand/r_hand3 - name = "Bandage, Right Hand 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/l_leg - name = "Bandage, Left Leg 1" - icon_state = "bandage1" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/bandage/l_leg/teshari - name = "Bandage, Left Leg 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_leg/l_leg2 - name = "Bandage, Left Leg 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/l_leg/l_leg2/teshari - name = "Bandage, Left Leg 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_leg/l_leg3 - name = "Bandage, Left Leg 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/l_leg/l_leg3/teshari - name = "Bandage, Left Leg 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_foot - name = "Bandage, Left Foot 1" - icon_state = "bandage1" - body_parts = list(BP_L_FOOT) - -/datum/sprite_accessory/marking/bandage/l_foot/teshari - name = "Bandage, Left Foot 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_foot/l_foot2 - name = "Bandage, Left Foot 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/l_foot/l_foot_2/teshari - name = "Bandage, Left Foot 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/l_foot/l_foot3 - name = "Bandage, Left Foot 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/l_foot/l_foot_3/teshari - name = "Bandage, Left Foot 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_leg - name = "Bandage, Right Leg 1" - icon_state = "bandage1" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/bandage/r_leg/teshari - name = "Bandage, Right Leg 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_leg/r_leg2 - name = "Bandage, Right Leg 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/r_leg/r_leg2/teshari - name = "Bandage, Right Leg 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_leg/r_leg3 - name = "Bandage, Right Leg 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/r_leg/r_leg3/teshari - name = "Bandage, Right Leg 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_foot - name = "Bandage, Right Foot 1" - icon_state = "bandage1" - body_parts = list(BP_R_FOOT) - -/datum/sprite_accessory/marking/bandage/r_foot/teshari - name = "Bandage, Right Foot 1 (Teshari)" - icon_state = "bandage1_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_foot/r_foot2 - name = "Bandage, Right Foot 2" - icon_state = "bandage2" - -/datum/sprite_accessory/marking/bandage/r_foot/r_foot2/teshari - name = "Bandage, Right Foot 2 (Teshari)" - icon_state = "bandage2_tesh" - species_allowed = list(SPECIES_TESHARI) - -/datum/sprite_accessory/marking/bandage/r_foot/r_foot3 - name = "Bandage, Right Foot 3" - icon_state = "bandage3" - -/datum/sprite_accessory/marking/bandage/r_foot/r_foot3/teshari - name = "Bandage, Right Foot 3 (Teshari)" - icon_state = "bandage3_tesh" - species_allowed = list(SPECIES_TESHARI) - -//skin styles - WIP -//going to have to re-integrate this with surgery -//let the icon_state hold an icon preview for now - -/datum/sprite_accessory/skin - icon = 'icons/mob/human_races/r_human.dmi' - -/datum/sprite_accessory/skin/human - name = "Default human skin" - icon_state = "default" - //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN) //Removing Polaris whitelits - -/datum/sprite_accessory/skin/human_tatt01 - name = "Tatt01 human skin" - icon_state = "tatt1" - //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN) //Removing Polaris whitelits - -/datum/sprite_accessory/skin/tajaran - name = "Default tajaran skin" - icon_state = "default" - icon = 'icons/mob/human_races/r_tajaran.dmi' - //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits - -/datum/sprite_accessory/skin/unathi - name = "Default Unathi skin" - icon_state = "default" - icon = 'icons/mob/human_races/r_lizard.dmi' - //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits - -/datum/sprite_accessory/skin/skrell - name = "Default skrell skin" - icon_state = "default" - icon = 'icons/mob/human_races/r_skrell.dmi' - //species_allowed = list(SPECIES_SKRELL) //Removing Polaris whitelits - -//Vox Exclusives -/datum/sprite_accessory/marking/vox - name = "Vox Beak" - icon = 'icons/mob/human_races/markings_vox.dmi' - icon_state = "vox_beak" - species_allowed = list(SPECIES_VOX) - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/vox/voxtalons - name = "Vox scales" - icon_state = "vox_talons" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) - -/datum/sprite_accessory/marking/vox/voxclaws - name = "Vox Claws" - icon_state = "Voxclaws" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) - -/datum/sprite_accessory/marking/vox/vox_alt - name = "Vox Alternate" - icon_state = "bay_vox" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) - -/datum/sprite_accessory/marking/vox/vox_alt_eyes - name = "Alternate Vox Eyes" - icon_state = "bay_vox_eyes" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/vox/voxscales - name = "Alternate Vox scales" - icon_state = "Voxscales" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) +/* + + Hello and welcome to sprite_accessories: For sprite accessories, such as hair, + facial hair, and possibly tattoos and stuff somewhere along the line. This file is + intended to be friendly for people with little to no actual coding experience. + The process of adding in new hairstyles has been made pain-free and easy to do. + Enjoy! - Doohl + + + Notice: This all gets automatically compiled in a list in dna2.dm, so you do not + have to define any UI values for sprite accessories manually for hair and facial + hair. Just add in new hair types and the game will naturally adapt. + + !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, + to the point where you may completely corrupt a server's savefiles. Please refrain + from doing this unless you absolutely know what you are doing, and have defined a + conversion in savefile.dm +*/ + +/datum/sprite_accessory + + var/icon // the icon file the accessory is located in + var/icon_state // the icon_state of the accessory + var/preview_state // a custom preview state for whatever reason + + var/name = "ERROR - FIXME" // the preview name of the accessory + + // Determines if the accessory will be skipped or included in random hair generations + var/gender = NEUTER + + // Restrict some styles to specific species. Set to null to perform no checking. + var/list/species_allowed = list() + + // Whether or not the accessory can be affected by colouration + var/do_colouration = 1 + + var/color_blend_mode = ICON_MULTIPLY // If checked. + + // Ckey of person allowed to use this, if defined. + var/list/ckeys_allowed = null + + /// Should this sprite block emissives? + var/em_block = FALSE + + var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff. + +/* +//////////////////////////// +/ =--------------------= / +/ == Hair Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + +/datum/sprite_accessory/hair + icon = 'icons/mob/Human_face_m.dmi' // default icon for all hairs + var/icon_add = 'icons/mob/human_face.dmi' + var/flags + +/datum/sprite_accessory/hair/eighties + name = "80s" + icon_state = "hair_80s" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afro + name = "Afro" + icon_state = "hair_afro" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afro2 + name = "Afro 2" + icon_state = "hair_afro2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afro_large + name = "Afro, Big" + icon_state = "hair_bigafro" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afropuffdouble + name = "Afropuff, Double" + icon_state = "hair_afropuffdouble" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afropuffleft + name = "Afropuff, Left" + icon_state = "hair_afropuffleft" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/afropuffright + name = "Afropuff, Right" + icon_state = "hair_afropuffright" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/angelique + name = "Angelique" + icon_state = "hair_angelique" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/antonio + name = "Antonio" + icon_state = "hair_antonio" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/aradia + name = "Aradia" + icon_state = "hair_aradia" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/messyhair + name = "All Up" + icon_state = "hair_messyhair" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/amazon + name = "Amazon" + icon_state = "hair_amazon" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/antenna + name = "Antenna" + icon_state = "hair_antenna" + +/datum/sprite_accessory/hair/astolfo + name = "Astolfo" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_astolfo" + +/datum/sprite_accessory/hair/averagejoe + name = "Average Joe" + icon_state = "hair_averagejoe" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/bald + name = "Bald" + icon_state = "bald" + flags = HAIR_VERY_SHORT + species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_VOX,SPECIES_TESHARI) + +/datum/sprite_accessory/hair/baldfade + name = "Balding Fade" + icon_state = "hair_baldfade" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/balding + name = "Balding Hair" + icon_state = "hair_e" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/band + name = "Band" + icon_state = "hair_band" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/beachwave + name = "Beach Waves" + icon_state = "hair_beachwave" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bedhead + name = "Bedhead" + icon_state = "hair_bedhead" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bedhead2 + name = "Bedhead 2" + icon_state = "hair_bedheadv2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedheadv3" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bedheadlong + name = "Bedhead Long" + icon_state = "hair_long_bedhead" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bedheadlongest + name = "Bedhead Longest" + icon_state = "hair_longest_bedhead" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/beehive + name = "Beehive" + icon_state = "hair_beehive" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/beehive2 + name = "Beehive 2" + icon_state = "hair_beehive2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bieber + name = "Bieber" + icon_state = "hair_bieb" + +/datum/sprite_accessory/hair/belenko + name = "Belenko" + icon_state = "hair_belenko" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/belenkotied + name = "Belenko Tied" + icon_state = "hair_belenkotied" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bigcurls + name = "Big Curls" + icon_state = "hair_bigcurls" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bob + name = "Bob" + icon_state = "hair_bobcut" + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bobcutalt + name = "Bob Chin Length" + icon_state = "hair_bobcutalt" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/midb + name = "Bob, Mid-length" + icon_state = "hair_midb" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bobcurl + name = "Bobcurl" + icon_state = "hair_bobcurl" + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bobcutovereye + name = "Bobcut Over Eye" + icon_state = "hair_bobcutovereye1" + +/datum/sprite_accessory/hair/bobcutovereye2 + name = "Bobcut Over Eye 2" + icon_state = "hair_bobcutovereye2" + +/datum/sprite_accessory/hair/bobcutovereye3 + name = "Bobcut Over Eye 3" + icon_state = "hair_bobcutovereye3" + +/datum/sprite_accessory/hair/bonnie + name = "Bonnie" + icon_state = "hair_bonnie" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bonniealt + name = "Bonnie Alt" + icon_state = "hair_bonniealt" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bonnielong + name = "Bonnie, Long" + icon_state = "hair_bonnie_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bonniealtlong + name = "Bonnie Alt, Long" + icon_state = "hair_bonniealt_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bonnieshort + name = "Bonnie, Short" + icon_state = "hair_bonnie_short" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bonniealtshort + name = "Bonnie Alt, Short" + icon_state = "hair_bonniealt_short" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bowl + name = "Bowl" + icon_state = "hair_bowlcut" + +/datum/sprite_accessory/hair/bowlcut2 + name = "Bowl 2" + icon_state = "hair_bowlcut2" + +/datum/sprite_accessory/hair/bowlcut2 + name = "Bowl, Overeye" + icon_state = "hair_overeyebowl" + +/datum/sprite_accessory/hair/grandebraid + name = "Braid Grande" + icon_state = "hair_grande" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/braid2 + name = "Braid Long" + icon_state = "hair_hbraid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longbraid + name = "Braid Long, Alt" + icon_state = "hair_longbraid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longbraidalt + name = "Braid Long, Alt 2" + icon_state = "hair_braidalt" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/mbraid + name = "Braid Medium" + icon_state = "hair_shortbraid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/braid + name = "Braid Floorlength" + icon_state = "hair_braid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/front_braid + name = "Braided front" + icon_state = "hair_braidfront" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/braidtail + name = "Braided Tail" + icon_state = "hair_braidtail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bun + name = "Bun" + icon_state = "hair_bun" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bun2 + name = "Bun 2" + icon_state = "hair_bun2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bun3 + name = "Bun 3" + icon_state = "hair_bun3" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/bunhead + name = "Bun Head " + icon_state = "hair_bunhead" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/doublebun + name = "Bun Double" + icon_state = "hair_doublebun" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/tightbun + name = "Bun Tight" + icon_state = "hair_tightbun" + flags = HAIR_VERY_SHORT | HAIR_TIEABLE + +/datum/sprite_accessory/hair/business + name = "Business Hair" + icon_state = "hair_business" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/business2 + name = "Business Hair 2" + icon_state = "hair_business2" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/business3 + name = "Business Hair 3" + icon_state = "hair_business3" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/business4 + name = "Business Hair 4" + icon_state = "hair_business4" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/buzz + name = "Buzzcut" + icon_state = "hair_buzzcut" + flags = HAIR_VERY_SHORT + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + +/datum/sprite_accessory/hair/celebcurls + name = "Celeb Curls" + icon_state = "hair_celebcurls" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/citheronia_colorable + name = "Citheronia" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "citheronia_hair_c" + do_colouration = 1 + +/datum/sprite_accessory/hair/crono + name = "Chrono" + icon_state = "hair_toriyama" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/cia + name = "CIA" + icon_state = "hair_cia" + +/datum/sprite_accessory/hair/coffeehouse + name = "Coffee House Cut" + icon_state = "hair_coffeehouse" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/combover + name = "Combover" + icon_state = "hair_combover" + +/datum/sprite_accessory/hair/cornbun + name = "Cornbun" + icon_state = "hair_cornbun" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/country + name = "Country" + icon_state = "hair_country" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/crew + name = "Crewcut" + icon_state = "hair_crewcut" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/curls + name = "Curls" + icon_state = "hair_curls" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/cut + name = "Cut Hair" + icon_state = "hair_c" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/darcy + name = "Darcy" + icon_state = "hair_darcy" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/dave + name = "Dave" + icon_state = "hair_dave" + +/datum/sprite_accessory/hair/dawn + name = "Dawn" + icon_state = "hair_dawn" + +/datum/sprite_accessory/hair/devillock + name = "Devil Lock" + icon_state = "hair_devilock" + +/datum/sprite_accessory/hair/diagonalbangs + name = "Diagonal Bangs" + icon_state = "hair_diagonalbangs" + +/datum/sprite_accessory/hair/dirk + name = "Dirk" + icon_state = "hair_dirk" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/donutbun + name = "Donut Bun" + icon_state = "hair_donutbun" + +/datum/sprite_accessory/hair/dreadlocks + name = "Dreadlocks" + icon_state = "hair_dreads" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/dreadslong + name = "Dreads Long" + icon_state = "hair_dreadslong" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/dreadslongalt + name = "Dreads Long, Alt" + icon_state = "hair_dreadlongalt" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/mahdrills + name = "Drillruru" + icon_state = "hair_drillruru" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/eagle + name = "Eagle" + icon_state = "hair_eagle" + +/datum/sprite_accessory/hair/elize + name = "Elize" + icon_state = "hair_elize" + +/datum/sprite_accessory/hair/emo + name = "Emo" + icon_state = "hair_emo" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/emo2 + name = "Emo Alt" + icon_state = "hair_emo2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/fringeemo + name = "Emo Fringe" + icon_state = "hair_emofringe" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/halfshaved + name = "Emo Half-Shaved" + icon_state = "hair_halfshaved" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/halfshavedlong + name = "Emo Half-Shaved Long" + icon_state = "hair_halfshavedL" + +/datum/sprite_accessory/hair/emoright + name = "Emo Mid-length" + icon_state = "hair_emoright" + +/datum/sprite_accessory/hair/longemo + name = "Emo Long" + icon_state = "hair_emolong" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/equius + name = "Equius" + icon_state = "hair_equius" + +/datum/sprite_accessory/hair/fabio + name = "Fabio" + icon_state = "hair_fabio" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/highfade + name = "Fade High" + icon_state = "hair_highfade" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/medfade + name = "Fade Medium" + icon_state = "hair_medfade" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/lowfade + name = "Fade Low" + icon_state = "hair_lowfade" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/partfade + name = "Fade Parted" + icon_state = "hair_shavedpart" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/falcon + name = "Falcon" + icon_state = "hair_falcon" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/familyman + name = "Family Man" + icon_state = "hair_thefamilyman" + +/datum/sprite_accessory/hair/father + name = "Father" + icon_state = "hair_father" + +/datum/sprite_accessory/hair/feather + name = "Feather" + icon_state = "hair_feather" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/feferi + name = "Feferi" + icon_state = "hair_feferi" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/flair + name = "Flaired Hair" + icon_state = "hair_flair" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/flipped + name = "Flipped" + icon_state = "hair_flipped" + +/datum/sprite_accessory/hair/sargeant + name = "Flat Top" + icon_state = "hair_sargeant" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/braid + name = "Floorlength Braid" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_braid" + +/datum/sprite_accessory/hair/flowhair + name = "Flow Hair" + icon_state = "hair_f" + +/datum/sprite_accessory/hair/fluffy + name = "Fluffy" + icon_state = "hair_fluffy" + +/datum/sprite_accessory/hair/fluffylong + name = "Fluffy, Long" + icon_state = "hair_fluffy_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longfringe + name = "Fringe Long" + icon_state = "hair_longfringe" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longestalt + name = "Fringe Longer" + icon_state = "hair_vlongfringe" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/fringetail + name = "Fringetail" + icon_state = "hair_fringetail" + flags = HAIR_TIEABLE|HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/froofy_long + name = "Froofy Long" + icon_state = "hair_froofy_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/gamzee + name = "Gamzee" + icon_state = "hair_gamzee" + +/datum/sprite_accessory/hair/gelled + name = "Gelled Back" + icon_state = "hair_gelled" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/gentle + name = "Gentle" + icon_state = "hair_gentle" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/gentle2 + name = "Gentle 2, Long" + icon_state = "hair_gentle2long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/glammetal + name = "Glam Metal Long" + icon_state = "hair_glammetal" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/glossy + name = "Glossy" + icon_state = "hair_glossy" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/halfbang + name = "Half-banged Hair" + icon_state = "hair_halfbang" + +/datum/sprite_accessory/hair/halfbangalt + name = "Half-banged Hair Alt" + icon_state = "hair_halfbang_alt" + +/datum/sprite_accessory/hair/hightight + name = "High and Tight" + icon_state = "hair_hightight" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/himecut + name = "Hime Cut" + icon_state = "hair_himecut" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/himeup + name = "Hime Updo" + icon_state = "hair_himeup" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/shorthime + name = "Hime Cut Short" + icon_state = "hair_shorthime" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/hitop + name = "Hitop" + icon_state = "hair_hitop" + +/datum/sprite_accessory/hair/hummingbird + name = "Hummingbird" + icon_state = "hair_hummingbird" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/inari + name = "Inari" + icon_state = "hair_inari" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/jade + name = "Jade" + icon_state = "hair_jade" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/jane + name = "Jane" + icon_state = "hair_jane" + +/datum/sprite_accessory/hair/jensen + name = "Jensen" + icon_state = "hair_jensen" + +/datum/sprite_accessory/hair/jessica + name = "Jessica" + icon_state = "hair_jessica" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/joestar + name = "Joestar" + icon_state = "hair_joestar" + +/datum/sprite_accessory/hair/judge + name = "Judge" + icon_state = "hair_judge" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/kagami + name = "Kagami" + icon_state = "hair_kagami" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/kanaya + name = "Kanaya" + icon_state = "hair_kanaya" + +/datum/sprite_accessory/hair/keanu + name = "Keanu Hair" + icon_state = "hair_keanu" + +/datum/sprite_accessory/hair/kusangi + name = "Kusanagi Hair" + icon_state = "hair_kusanagi" + +/datum/sprite_accessory/hair/long + name = "Long Hair Shoulder-length" + icon_state = "hair_b" + flags = HAIR_TIEABLE +/* +/datum/sprite_accessory/hair/longish + name = "Longer Hair" + icon_state = "hair_b2" + flags = HAIR_TIEABLE +*/ + +/datum/sprite_accessory/hair/longer + name = "Long Hair" + icon_state = "hair_vlong" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longeralt2 + name = "Long Hair Alt 2" + icon_state = "hair_longeralt2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sidepartlongalt + name = "Long Side Part" + icon_state = "hair_longsidepart" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/longest + name = "Very Long Hair" + icon_state = "hair_longest" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/lowbraid + name = "Low Braid" + icon_state = "hair_hbraid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/macaw + name = "Macaw" + icon_state = "hair_macaw" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/magpie + name = "Magpie" + icon_state = "hair_magpie" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/manbun + name = "Manbun" + icon_state = "hair_manbun" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/marysue + name = "Mary Sue" + icon_state = "hair_marysue" + +/datum/sprite_accessory/hair/mia + name = "Mia" + icon_state = "hair_mia" + +/datum/sprite_accessory/hair/mialong + name = "Mia Long" + icon_state = "hair_mialong" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/miles + name = "Miles Hair" + icon_state = "hair_miles" + +/datum/sprite_accessory/hair/modern + name = "Modern" + icon_state = "hair_modern" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/mohawk + name = "Mohawk" + icon_state = "hair_d" + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + +/datum/sprite_accessory/hair/regulationmohawk + name = "Mohawk Regulation" + icon_state = "hair_shavedmohawk" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/reversemohawk + name = "Mohawk Reverse" + icon_state = "hair_reversemohawk" + +/datum/sprite_accessory/hair/mohawkunshaven + name = "Mohawk Unshaven" + icon_state = "hair_unshaven_mohawk" + +/datum/sprite_accessory/hair/mulder + name = "Mulder" + icon_state = "hair_mulder" + +/datum/sprite_accessory/hair/nepeta + name = "Nepeta" + icon_state = "hair_nepeta" + +/datum/sprite_accessory/hair/newyou + name = "New You" + icon_state = "hair_newyou" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/nia + name = "Nia" + icon_state = "hair_nia" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/nitori + name = "Nitori" + icon_state = "hair_nitori" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/odango + name = "Odango" + icon_state = "hair_odango" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ombre + name = "Ombre" + icon_state = "hair_ombre" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/oxton + name = "Oxton" + icon_state = "hair_oxton" + +/datum/sprite_accessory/hair/longovereye + name = "Overeye Long" + icon_state = "hair_longovereye" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/shortovereye + name = "Overeye Short" + icon_state = "hair_shortovereye" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/veryshortovereyealternate + name = "Overeye Very Short, Alternate" + icon_state = "hair_veryshortovereyealternate" + +/datum/sprite_accessory/hair/veryshortovereye + name = "Overeye Very Short" + icon_state = "hair_veryshortovereye" + +/datum/sprite_accessory/hair/overear + name = "Over Ear, Right" + icon_state = "hair_overear1" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/overear2 + name = "Over Ear, Left" + icon_state = "hair_overear2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/owl + name = "Owl" + icon_state = "hair_owl" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/parted + name = "Parted" + icon_state = "hair_parted" + +/datum/sprite_accessory/hair/partedalt + name = "Parted Alt" + icon_state = "hair_partedalt" + + +/datum/sprite_accessory/hair/pixie + name = "Pixie Cut" + icon_state = "hair_pixie" + +/datum/sprite_accessory/hair/pompadour + name = "Pompadour" + icon_state = "hair_pompadour" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/dandypomp + name = "Pompadour Dandy" + icon_state = "hair_dandypompadour" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ponytail1 + name = "Ponytail 1" + icon_state = "hair_ponytail" + flags = HAIR_TIEABLE|HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/ponytail2 + name = "Ponytail 2" + icon_state = "hair_pa" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ponytail3 + name = "Ponytail 3" + icon_state = "hair_ponytail3" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ponytail4 + name = "Ponytail 4" + icon_state = "hair_ponytail4" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ponytail5 + name = "Ponytail 5" + icon_state = "hair_ponytail5" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ponytail6 + name = "Ponytail 6" + icon_state = "hair_ponytail6" + flags = HAIR_TIEABLE|HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/sharpponytail + name = "Ponytail Sharp" + icon_state = "hair_sharpponytail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/spikyponytail + name = "Ponytail Spiky" + icon_state = "hair_spikyponytail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/thinponytail + name = "Ponytail Thin" + icon_state = "hair_thinponytail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/thinponytaillong + name = "Ponytail Thin, Long" + icon_state = "hair_thinponytail_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/poofy + name = "Poofy" + icon_state = "hair_poofy" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/poofy2 + name = "Poofy 2" + icon_state = "hair_poofy2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/princess + name = "Princess" + icon_state = "hair_princess" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/proper + name = "Proper" + icon_state = "hair_proper" + +/datum/sprite_accessory/hair/quiff + name = "Quiff" + icon_state = "hair_quiff" + +/datum/sprite_accessory/hair/nofade + name = "Regulation Cut" + icon_state = "hair_nofade" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/newyou + name = "New You" + icon_state = "hair_newyou" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rockandroll + name = "Rock and Roll" + icon_state = "hair_rockandroll" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rockstarcurls + name = "Rockstar Curls" + icon_state = "hair_rockstarcurls" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/ronin + name = "Ronin" + icon_state = "hair_ronin" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rosa + name = "Rosa" + icon_state = "hair_rosa" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rose + name = "Rose" + icon_state = "hair_rose" + +/datum/sprite_accessory/hair/rows + name = "Rows" + icon_state = "hair_rows1" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/rows2 + name = "Rows 2" + icon_state = "hair_rows2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rowbun + name = "Row Bun" + icon_state = "hair_rowbun" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rowdualbraid + name = "Row Dual Braid" + icon_state = "hair_rowdualtail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/rowbraid + name = "Row Braid" + icon_state = "hair_rowbraid" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/roxy + name = "Roxy" + icon_state = "hair_roxy" + +/datum/sprite_accessory/hair/sabitsuki + name = "Sabitsuki" + icon_state = "hair_sabitsuki" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/scully + name = "Scully" + icon_state = "hair_scully" + +/datum/sprite_accessory/hair/shavehair + name = "Shaved Hair" + icon_state = "hair_shaved" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/shortbangs + name = "Short Bangs" + icon_state = "hair_shortbangs" + +/datum/sprite_accessory/hair/shortflip + name = "Short Flip" + icon_state = "hair_shortflip" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/short + name = "Short Hair" // try to capatilize the names please~ + icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/short2 + name = "Short Hair 2" + icon_state = "hair_shorthair3" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/short3 + name = "Short Hair 3" + icon_state = "hair_shorthair4" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/awoohair + name = "Shoulder-length Messy" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "momijihair" + +/datum/sprite_accessory/hair/shy + name = "Shy" + icon_state = "hair_shy" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail + name = "Side Ponytail" + icon_state = "hair_stail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail4 //Not happy about this... but it's for the save files. + name = "Side Ponytail 2" + icon_state = "hair_ponytailf" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail5 + name = "Side Ponytail 3" + icon_state = "hair_sidetail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail6 + name = "Side Ponytail 4" + icon_state = "hair_sidetail2" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail2 + name = "Shoulder One" + icon_state = "hair_oneshoulder" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideponytail3 + name = "Shoulder Tress" + icon_state = "hair_tressshoulder" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/sideundercut + name = "Side Undercut" + icon_state = "hair_sideundercut" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/skinhead + name = "Skinhead" + icon_state = "hair_skinhead" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/sleeze + name = "Sleeze" + icon_state = "hair_sleeze" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/protagonist + name = "Slightly Long" + icon_state = "hair_protagonist" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/spiky + name = "Spiky" + icon_state = "hair_spikey" + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + +/datum/sprite_accessory/hair/starling + name = "Starling" + icon_state = "hair_starling" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/stork + name = "Stork" + icon_state = "hair_stork" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/straightlong + name = "Straight Long" + icon_state = "hair_straightlong" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/suave + name = "Suave" + icon_state = "hair_suave" + +/datum/sprite_accessory/hair/suavetwo + name = "Suave 2" + icon_state = "hair_suave2" + +/datum/sprite_accessory/hair/sweepshave + name = "Sweep Shave" + icon_state = "hair_sweepshave" + +/datum/sprite_accessory/hair/sweptfringe + name = "Swept Fringe" + icon_state = "hair_sweptfringe" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/taro + name = "Taro" + icon_state = "hair_taro" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/terezi + name = "Terezi" + icon_state = "hair_terezi" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/thinning + name = "Thinning" + icon_state = "hair_thinning" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/thinningfront + name = "Thinning Front" + icon_state = "hair_thinningfront" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/thinningback + name = "Thinning Back" + icon_state = "hair_thinningrear" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/topknot + name = "Topknot" + icon_state = "hair_topknot" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/trimflat + name = "Trimmed Flat Top" + icon_state = "hair_trimflat" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/trimmed + name = "Trimmed" + icon_state = "hair_trimmed" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/twindrills + name = "Twin Drills" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_twincurl" + +/datum/sprite_accessory/hair/twintail + name = "Twintail" + icon_state = "hair_twintail" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/twintails + name = "Twintails" + icon_state = "hair_twintails" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/twintailslong + name = "Twintails, Long" + icon_state = "hair_twintails_long" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/twintailsshort + name = "Twintails, Short" + icon_state = "hair_twintails_short" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/twinbob + name = "Twinbun Bob" + icon_state = "hair_bunbob" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/undercut1 + name = "Undercut" + icon_state = "hair_undercut1" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/undercut2 + name = "Undercut Swept Right" + icon_state = "hair_undercut2" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/undercut3 + name = "Undercut Swept Left" + icon_state = "hair_undercut3" + gender = MALE + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/longundercut + name = "Undercut Long" + icon_state = "hair_undercutlong" + flags = HAIR_VERY_SHORT + +/datum/sprite_accessory/hair/unkept + name = "Unkept" + icon_state = "hair_unkept" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/updo + name = "Updo" + icon_state = "hair_updo" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/vegeta + name = "Vegeta" + icon_state = "hair_toriyama2" + +/datum/sprite_accessory/hair/vriska + name = "Vriska" + icon_state = "hair_vriska" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/vivi + name = "Vivi" + icon_state = "hair_vivi" + +/datum/sprite_accessory/hair/volaju + name = "Volaju" + icon_state = "hair_volaju" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/volaju_pompless + name = "Volaju, pompless" + icon_state = "hair_volajupompless" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/wisp + name = "Wisp" + icon_state = "hair_wisp" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/zieglertail + name = "Zieglertail" + icon_state = "hair_ziegler" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/zone + name = "Zone Braid" + icon_state = "hair_zone" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/una_hood + name = "Cobra Hood (small)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "soghun_hood" + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/una_doublehorns + name = "Double Unathi Horns" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "soghun_dubhorns" + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_plain + name = "Sergal Plain" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_plain" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_medicore + name = "Sergal Medicore" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_medicore" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_tapered + name = "Sergal Tapered" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_tapered" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_fairytail + name = "Sergal Fairytail" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_fairytail" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +// Vulpa stuffs + +/datum/sprite_accessory/hair/vulp_hair_none + name = "None" + icon_state = "bald" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kajam + name = "Kajam" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "kajam" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_keid + name = "Keid" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "keid" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_adhara + name = "Adhara" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "adhara" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kleeia + name = "Kleeia" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "kleeia" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_mizar + name = "Mizar" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "mizar" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_apollo + name = "Apollo" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "apollo" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_belle + name = "Belle" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "belle" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_bun + name = "Vulp Bun" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "bun" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_jagged + name = "Jagged" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "jagged" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_curl + name = "Curl" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "curl" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_hawk + name = "Hawk" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hawk" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_anita + name = "Anita" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "anita" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_short + name = "Short" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "short" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_spike + name = "Spike" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "spike" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +//xeno stuffs +/datum/sprite_accessory/hair/xeno_head_drone_color + name = "Drone dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_drone" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER +// figure this one out for better coloring +/datum/sprite_accessory/hair/xeno_head_sentinel_color + name = "Sentinal dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_sentinel" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_queen_color + name = "Queen dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_queen" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_hunter_color + name = "Hunter dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_hunter" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_praetorian_color + name = "Praetorian dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_praetorian" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +// Shadekin stuffs + +/datum/sprite_accessory/hair/shadekin_hair_short + name = "Shadekin Short Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_short" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/shadekin_hair_poofy + name = "Shadekin Poofy Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_poofy" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/shadekin_hair_long + name = "Shadekin Long Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_long" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +//its bird time mfers - Nevrean Hairs + +/datum/sprite_accessory/hair/feather_fan + name = "feather fan (nev)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "feather_fan" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/feather_plume_down + name = "feather plume down (nev)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "feather_plume_down" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/feather_plume_up + name = "feather plume up (nev)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "feather_plume_up" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/feather_plume_small + name = "feather plume small (nev)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "feather_plume_small" + flags = HAIR_TIEABLE + +/datum/sprite_accessory/hair/feather_halfmoon + name = "feather halfmoon (nev)" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "feather_halfmoon" + flags = HAIR_TIEABLE + +/* +shaved + name = "Shaved" + icon_state = "bald" + gender = NEUTER + species_allowed = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) +*/ +/datum/sprite_accessory/facial_hair/neck_fluff + name = "Neck Fluff" + icon = 'icons/mob/human_face_or_alt.dmi' + icon_state = "facial_neckfluff" + gender = NEUTER + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_none + name = "None" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "none" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_blaze + name = "Blaze" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_blaze" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_vulpine + name = "Vulpine" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_vulpine" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_earfluff + name = "Earfluff" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_earfluff" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_mask + name = "Mask" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_mask" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_patch + name = "Patch" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_patch" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_ruff + name = "Ruff" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_ruff" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_kita + name = "Kita" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_kita" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/facial_hair/vulp_swift + name = "Swift" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_swift" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + color_blend_mode = ICON_MULTIPLY + +/* +/////////////////////////////////// +/ =---------------------------= / +/ == Facial Hair Definitions == / +/ =---------------------------= / +/////////////////////////////////// +*/ + +/datum/sprite_accessory/facial_hair + icon = 'icons/mob/Human_face.dmi' + color_blend_mode = ICON_ADD + em_block = TRUE + +/datum/sprite_accessory/facial_hair/shaved + name = "Shaved" + icon_state = "bald" + gender = NEUTER + species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI,SPECIES_TAJ,SPECIES_SKRELL, "Machine", SPECIES_TESHARI, SPECIES_TESHARI,SPECIES_PROMETHEAN) + +/datum/sprite_accessory/facial_hair/watson + name = "Watson Mustache" + icon_state = "facial_watson" + +/datum/sprite_accessory/facial_hair/hogan + name = "Hulk Hogan Mustache" + icon_state = "facial_hogan" //-Neek + +/datum/sprite_accessory/facial_hair/vandyke + name = "Van Dyke Mustache" + icon_state = "facial_vandyke" + +/datum/sprite_accessory/facial_hair/chaplin + name = "Square Mustache" + icon_state = "facial_chaplin" + +/datum/sprite_accessory/facial_hair/selleck + name = "Selleck Mustache" + icon_state = "facial_selleck" + +/datum/sprite_accessory/facial_hair/neckbeard + name = "Neckbeard" + icon_state = "facial_neckbeard" + +/datum/sprite_accessory/facial_hair/fullbeard + name = "Full Beard" + icon_state = "facial_fullbeard" + +/datum/sprite_accessory/facial_hair/longbeard + name = "Long Beard" + icon_state = "facial_longbeard" + +/datum/sprite_accessory/facial_hair/vlongbeard + name = "Very Long Beard" + icon_state = "facial_wise" + +/datum/sprite_accessory/facial_hair/elvis + name = "Elvis Sideburns" + icon_state = "facial_elvis" + species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + +/datum/sprite_accessory/facial_hair/abe + name = "Abraham Lincoln Beard" + icon_state = "facial_abe" + +/datum/sprite_accessory/facial_hair/chinstrap + name = "Chinstrap" + icon_state = "facial_chin" + +/datum/sprite_accessory/facial_hair/hip + name = "Hipster Beard" + icon_state = "facial_hip" + +/datum/sprite_accessory/facial_hair/gt + name = "Goatee" + icon_state = "facial_gt" + +/datum/sprite_accessory/facial_hair/jensen + name = "Adam Jensen Beard" + icon_state = "facial_jensen" + +/datum/sprite_accessory/facial_hair/volaju + name = "Volaju" + icon_state = "facial_volaju" + +/datum/sprite_accessory/facial_hair/dwarf + name = "Dwarf Beard" + icon_state = "facial_dwarf" + +/datum/sprite_accessory/facial_hair/threeOclock + name = "3 O-clock Shadow" + icon_state = "facial_3oclock" + +/datum/sprite_accessory/facial_hair/threeOclockstache + name = "3 O-clock Shadow and Moustache" + icon_state = "facial_3oclockmoustache" + +/datum/sprite_accessory/facial_hair/fiveOclock + name = "5 O-clock Shadow" + icon_state = "facial_5oclock" + +/datum/sprite_accessory/facial_hair/fiveOclockstache + name = "5 O-clock Shadow and Moustache" + icon_state = "facial_5oclockmoustache" + +/datum/sprite_accessory/facial_hair/sevenOclock + name = "7 O-clock Shadow" + icon_state = "facial_7oclock" + +/datum/sprite_accessory/facial_hair/sevenOclockstache + name = "7 O-clock Shadow and Moustache" + icon_state = "facial_7oclockmoustache" + +/datum/sprite_accessory/facial_hair/mutton + name = "Mutton Chops" + icon_state = "facial_mutton" + +/datum/sprite_accessory/facial_hair/muttonstache + name = "Mutton Chops and Moustache" + icon_state = "facial_muttonmus" + +/datum/sprite_accessory/facial_hair/walrus + name = "Walrus Moustache" + icon_state = "facial_walrus" + +/datum/sprite_accessory/facial_hair/croppedbeard + name = "Full Cropped Beard" + icon_state = "facial_croppedfullbeard" + +/datum/sprite_accessory/facial_hair/chinless + name = "Chinless Beard" + icon_state = "facial_chinlessbeard" + +/datum/sprite_accessory/facial_hair/tribeard + name = "Tribeard" + icon_state = "facial_tribeard" + +/datum/sprite_accessory/facial_hair/moonshiner + name = "Moonshiner" + icon_state = "facial_moonshiner" + +/datum/sprite_accessory/facial_hair/martial + name = "Martial Artist" + icon_state = "facial_martialartist" +/* +/////////////////////////////////// +/ =---------------------------= / +/ == Alien Style Definitions == / +/ =---------------------------= / +/////////////////////////////////// +*/ + +//Unathi Head-Bits + +/datum/sprite_accessory/hair/una + name = "Long Unathi Spines" + icon_state = "soghun_longspines" + species_allowed = list(SPECIES_UNATHI) + +/datum/sprite_accessory/hair/una/spines_short + name = "Short Unathi Spines" + +/datum/sprite_accessory/hair/una/frills_long + name = "Long Unathi Frills" + icon_state = "soghun_longfrills" + +/datum/sprite_accessory/hair/una/frills_short + name = "Short Unathi Frills" + icon_state = "soghun_shortfrills" + +/datum/sprite_accessory/hair/una/horns + name = "Unathi Horns" + icon_state = "soghun_horns" + +/datum/sprite_accessory/hair/una/bighorns + name = "Unathi Big Horns" + icon_state = "unathi_bighorn" + +/datum/sprite_accessory/hair/una/smallhorns + name = "Unathi Small Horns" + icon_state = "unathi_smallhorn" + +/datum/sprite_accessory/hair/una/ramhorns + name = "Unathi Ram Horns" + icon_state = "unathi_ramhorn" + +/datum/sprite_accessory/hair/una/sidefrills + name = "Unathi Side Frills" + icon_state = "unathi_sidefrills" + +//Skrell 'hairstyles' + +/datum/sprite_accessory/hair/skr + name = "Skrell Average Tentacles" + icon_state = "skrell_hair_average" + species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/skr/tentacle_veryshort + name = "Skrell Short Tentacles" + icon_state = "skrell_hair_short" + gender = MALE + +/datum/sprite_accessory/hair/skr/tentacle_average + name = "Skrell Long Tentacles" + icon_state = "skrell_hair_long" + +/datum/sprite_accessory/hair/skr/tentacle_verylong + name = "Skrell Very Long Tentacles" + icon_state = "skrell_hair_verylong" + +//Tajaran hairstyles +/datum/sprite_accessory/hair/taj + name = "Tajaran Ears" + icon_state = "ears_plain" + species_allowed = list(SPECIES_TAJ) + +/datum/sprite_accessory/hair/taj/bangs + name = "Tajaran Bangs" + icon_state = "hair_bangs" + +/datum/sprite_accessory/hair/taj/bangs_alt + name = "Tajaran Bangs (Alt)" + icon_state = "hair_bangs_alt" + +/datum/sprite_accessory/hair/taj/short_fringe + name = "Tajaran Short Fringe" + icon_state = "hair_shortfringe" + +/datum/sprite_accessory/hair/taj/braid + name = "Tajaran Braid" + icon_state = "hair_tbraid" + +/datum/sprite_accessory/hair/taj/clean + name = "Tajaran Clean" + icon_state = "hair_clean" + +/datum/sprite_accessory/hair/taj/gman + name = "Tajaran G-Man" + icon_state = "hair_gman" + +/datum/sprite_accessory/hair/taj/greaser + name = "Tajaran Greaser" + icon_state = "hair_greaser" + +/datum/sprite_accessory/hair/taj/bun + name = "Tajaran Bun" + icon_state = "hair_tajbun" + +/datum/sprite_accessory/hair/taj/bunsmall + name = "Tajaran Bun (Small)" + icon_state = "hair_tajsmallbun" + +/datum/sprite_accessory/hair/taj/bunlow + name = "Tajaran Bun (Low)" + icon_state = "hair_tajbunlow" + +/datum/sprite_accessory/hair/taj/bunlowsmall + name = "Tajaran Bun (Low, Small)" + icon_state = "hair_tajbunlowsmall" + +/datum/sprite_accessory/hair/taj/_wedge + name = "Tajaran Wedge" + icon_state = "hair_wedge" + +/datum/sprite_accessory/hair/taj/shaggy + name = "Tajaran Shaggy" + icon_state = "hair_shaggy" + +/datum/sprite_accessory/hair/taj/mohawk + name = "Tajaran Mohawk" + icon_state = "hair_mohawk" + +/datum/sprite_accessory/hair/taj/plait + name = "Tajaran Plait" + icon_state = "hair_plait" + +/datum/sprite_accessory/hair/taj/_sidepony + name = "Tajaran Side Ponytail" + icon_state = "hair_sidepony" + +/datum/sprite_accessory/hair/taj/straight + name = "Tajaran Straight" + icon_state = "hair_straight" + +/datum/sprite_accessory/hair/taj/long + name = "Tajaran Long" + icon_state = "hair_long" + +/datum/sprite_accessory/hair/taj/tresses + name = "Tajaran Tresses" + icon_state = "hair_tresses" + +/datum/sprite_accessory/hair/taj/shoulderparted + name = "Tajaran Shoulder Parted" + icon_state = "hair_shoulderparted" + +/datum/sprite_accessory/hair/taj/shoulderpartedsmall + name = "Tajaran Shoulder Parted (Small)" + icon_state = "hair_shoulderpartedsmall" + +/datum/sprite_accessory/hair/taj/shoulderpartedlong + name = "Tajaran Shoulder Parted (Long)" + icon_state = "hair_shoulderpartedlong" + +/datum/sprite_accessory/hair/taj/sidepartedleft + name = "Tajaran Side Parted (Left)" + icon_state = "hair_sidepartedleft" + +/datum/sprite_accessory/hair/taj/sidepartedright + name = "Tajaran Side Parted (Right)" + icon_state = "hair_sidepartedright" + +/datum/sprite_accessory/hair/taj/shoulderlength + name = "Tajaran Shoulder Length" + icon_state = "hair_shoulderlength" + +/datum/sprite_accessory/hair/taj/shoulderlengthalt + name = "Tajaran Shoulder Length (Alt)" + icon_state = "hair_shoulderlengthalt" + +/datum/sprite_accessory/hair/taj/cascading + name = "Tajaran Cascading" + icon_state = "hair_cascading" + +/datum/sprite_accessory/hair/taj/cascadingalt + name = "Tajaran Cascading (Alt)" + icon_state = "hair_cascadingalt" + +/datum/sprite_accessory/hair/taj/rattail + name = "Tajaran Rat Tail" + icon_state = "hair_rattail" + +/datum/sprite_accessory/hair/taj/spiky + name = "Tajaran Spiky" + icon_state = "hair_tajspiky" + +/datum/sprite_accessory/hair/taj/fringeup + name = "Tajaran Fringe Spike" + icon_state = "hair_fringeup" + +/datum/sprite_accessory/hair/taj/messy + name = "Tajaran Messy" + icon_state = "hair_messy" + +/datum/sprite_accessory/hair/taj/curls + name = "Tajaran Curly" + icon_state = "hair_curly" + +/datum/sprite_accessory/hair/taj/curlsalt + name = "Tajaran Curly, alt" + icon_state = "hair_curlyalt" + +/datum/sprite_accessory/hair/taj/mane + name = "Tajaran Mane" + icon_state = "hair_mane" + +/datum/sprite_accessory/hair/taj/wife + name = "Tajaran Housewife" + icon_state = "hair_wife" + +/datum/sprite_accessory/hair/taj/victory + name = "Tajaran Victory Curls" + icon_state = "hair_victory" + +/datum/sprite_accessory/hair/taj/bob + name = "Tajaran Bob" + icon_state = "hair_tbob" +/datum/sprite_accessory/hair/taj/fingercurl + name = "Tajaran Finger Curls" + icon_state = "hair_fingerwave" + +//Teshari things +/datum/sprite_accessory/hair/teshari + name = "Teshari Default" + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "teshari_default" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/hair/teshari/altdefault + name = "Teshari Alt. Default" + icon_state = "teshari_ears" + +/datum/sprite_accessory/hair/teshari/tight + name = "Teshari Tight" + icon_state = "teshari_tight" + +/datum/sprite_accessory/hair/teshari/excited + name = "Teshari Spiky" + icon_state = "teshari_spiky" + +/datum/sprite_accessory/hair/teshari/spike + name = "Teshari Spike" + icon_state = "teshari_spike" + +/datum/sprite_accessory/hair/teshari/long + name = "Teshari Overgrown" + icon_state = "teshari_long" + +/datum/sprite_accessory/hair/teshari/burst + name = "Teshari Starburst" + icon_state = "teshari_burst" + +/datum/sprite_accessory/hair/teshari/shortburst + name = "Teshari Short Starburst" + icon_state = "teshari_burst_short" + +/datum/sprite_accessory/hair/teshari/mohawk + name = "Teshari Mohawk" + icon_state = "teshari_mohawk" + +/datum/sprite_accessory/hair/teshari/pointy + name = "Teshari Pointy" + icon_state = "teshari_pointy" + +/datum/sprite_accessory/hair/teshari/upright + name = "Teshari Upright" + icon_state = "teshari_upright" + +/datum/sprite_accessory/hair/teshari/mane + name = "Teshari Mane" + icon_state = "teshari_mane" + +/datum/sprite_accessory/hair/teshari/droopy + name = "Teshari Droopy" + icon_state = "teshari_droopy" + +/datum/sprite_accessory/hair/teshari/mushroom + name = "Teshari Mushroom" + icon_state = "teshari_mushroom" + +/datum/sprite_accessory/hair/teshari/twies + name = "Teshari Twies" + icon_state = "teshari_twies" + +/datum/sprite_accessory/hair/teshari/backstrafe + name = "Teshari Backstrafe" + icon_state = "teshari_backstrafe" + +/datum/sprite_accessory/hair/teshari/_longway + name = "Teshari Long way" + icon_state = "teshari_longway" + +/datum/sprite_accessory/hair/teshari/tree + name = "Teshari Tree" + icon_state = "teshari_tree" + +/datum/sprite_accessory/hair/teshari/fluffymohawk + name = "Teshari Fluffy Mohawk" + icon_state = "teshari_fluffymohawk" + +// Vox things +/datum/sprite_accessory/hair/vox + name = "Long Vox braid" + icon_state = "vox_longbraid" + species_allowed = list(SPECIES_VOX) + +/datum/sprite_accessory/hair/vox/braid_short + name = "Short Vox Braid" + icon_state = "vox_shortbraid" + +/datum/sprite_accessory/hair/vox/quills_short + name = "Short Vox Quills" + icon_state = "vox_shortquills" + +/datum/sprite_accessory/hair/vox/quills_kingly + name = "Kingly Vox Quills" + icon_state = "vox_kingly" + +/datum/sprite_accessory/hair/vox/quills_mohawk + name = "Quill Mohawk" + icon_state = "vox_mohawk" + +//Tajaran Facial Hair + +/datum/sprite_accessory/facial_hair/taj + name = "Tajaran Sideburns" + icon_state = "facial_sideburns" + species_allowed = list(SPECIES_TAJ) + +/datum/sprite_accessory/facial_hair/taj/mutton + name = "Tajaran Mutton" + icon_state = "facial_mutton" + +/datum/sprite_accessory/facial_hair/taj/pencilstache + name = "Tajaran Pencilstache" + icon_state = "facial_pencilstache" + +/datum/sprite_accessory/facial_hair/taj/moustache + name = "Tajaran Moustache" + icon_state = "facial_moustache" + +/datum/sprite_accessory/facial_hair/taj/goatee + name = "Tajaran Goatee" + icon_state = "facial_goatee" + +/datum/sprite_accessory/facial_hair/taj/smallstache + name = "Tajaran Smallsatche" + icon_state = "facial_smallstache" + +//unathi horn beards and the like + +/datum/sprite_accessory/facial_hair/una + name = "Unathi Chin Horn" + icon_state = "facial_chinhorns" + species_allowed = list(SPECIES_UNATHI) + +/datum/sprite_accessory/facial_hair/una/hornadorns + name = "Unathi Horn Adorns" + icon_state = "facial_hornadorns" + +/datum/sprite_accessory/facial_hair/una/spinespikes + name = "Unathi Spine Spikes" + icon_state = "facial_spikes" + +/datum/sprite_accessory/facial_hair/una/dorsalfrill + name = "Unathi Dorsal Frill" + icon_state = "facial_dorsalfrill" + + +//Teshari face things +/datum/sprite_accessory/facial_hair/teshari + name = "Teshari Beard" + icon_state = "teshari_chin" + species_allowed = list(SPECIES_TESHARI) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/teshari/scraggly + name = "Teshari Scraggly" + icon_state = "teshari_scraggly" + + +/datum/sprite_accessory/facial_hair/teshari/chops + name = "Teshari Chops" + icon_state = "teshari_gap" + +/* +//////////////////////////// +/ =--------------------= / +/ == Body Markings == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/marking + icon = 'icons/mob/human_races/markings.dmi' + do_colouration = 1 //Almost all of them have it, COLOR_ADD + + //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, + //like Tajaran inner-ear coloring overlay stuff. + species_allowed = list() + //This lets all races use + + color_blend_mode = ICON_ADD + + var/genetic = TRUE + var/organ_override = FALSE + var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines + //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD + +//Tattoos + +/datum/sprite_accessory/marking/tat_rheart + name = "Tattoo (Heart, R. Arm)" + icon_state = "tat_rheart" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_lheart + name = "Tattoo (Heart, L. Arm)" + icon_state = "tat_lheart" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_hive + name = "Tattoo (Hive, Back)" + icon_state = "tat_hive" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tat_nightling + name = "Tattoo (Nightling, Back)" + icon_state = "tat_nightling" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tat_campbell + name = "Tattoo (Campbell, R.Arm)" + icon_state = "tat_campbell" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_campbell/left + name = "Tattoo (Campbell, L.Arm)" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_campbell/rightleg + name = "Tattoo (Campbell, R.Leg)" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/tat_campbell/leftleg + name = "Tattoo (Campbell, L.Leg)" + body_parts = list (BP_L_LEG) + +/datum/sprite_accessory/marking/tat_silverburgh + name = "Tattoo (Silverburgh, R.Leg)" + icon_state = "tat_silverburgh" + body_parts = list (BP_R_LEG) + +/datum/sprite_accessory/marking/tat_silverburgh/left + name = "Tattoo (Silverburgh, L.Leg)" + icon_state = "tat_silverburgh" + body_parts = list (BP_L_LEG) + +/datum/sprite_accessory/marking/tat_tiger + name = "Tattoo (Tiger Stripes, Body)" + icon_state = "tat_tiger" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) + +//New tats + +/datum/sprite_accessory/marking/tat_belly + name = "Tattoo (Belly)" + icon_state = "tat_belly" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tat_forrest_left + name = "Tattoo (Forrest, Left Eye)" + icon_state = "tat_forrest_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_forrest_right + name = "Tattoo (Forrest, Right Eye)" + icon_state = "tat_forrest_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_hunter_left + name = "Tattoo (Hunter, Left Eye)" + icon_state = "tat_hunter_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_hunter_right + name = "Tattoo (Hunter, Right Eye)" + icon_state = "tat_hunter_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_jaeger_left + name = "Tattoo (Jaeger, Left Eye)" + icon_state = "tat_jaeger_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_jaeger_right + name = "Tattoo (Jaeger, Right Eye)" + icon_state = "tat_jaeger_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_kater_left + name = "Tattoo (Kater, Left Eye)" + icon_state = "tat_kater_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_kater_right + name = "Tattoo (Kater, Right Eye)" + icon_state = "tat_kater_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_lujan_left + name = "Tattoo (Lujan, Left Eye)" + icon_state = "tat_lujan_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_lujan_right + name = "Tattoo (Lujan, Right Eye)" + icon_state = "tat_lujan_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_montana_left + name = "Tattoo (Montana, Left Face)" + icon_state = "tat_montana_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_montana_right + name = "Tattoo (Montana, Right Face)" + icon_state = "tat_montana_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_natasha_left + name = "Tattoo (Natasha, Left Eye)" + icon_state = "tat_natasha_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_natasha_right + name = "Tattoo (Natasha, Right Eye)" + icon_state = "tat_natasha_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_tamoko + name = "Tattoo (Ta Moko, Face)" + icon_state = "tat_tamoko" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_toshi_left + name = "Tattoo (Toshi, Left Eye)" + icon_state = "tat_toshi_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_toshi_right + name = "Tattoo (Volgin, Right Eye)" + icon_state = "tat_toshi_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_wings_back + name = "Tattoo (Wings, Lower Back)" + icon_state = "tat_wingsback" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tilaka + name = "Tilaka" + icon_state = "tilaka" + body_parts = list(BP_HEAD) + + +/datum/sprite_accessory/marking/bands + name = "Color Bands" + icon_state = "bands" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/bandsface + name = "Color Bands (Face)" + icon_state = "bandsface" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ,SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/bandsface_human + name = "Color Bands (Face)" + icon_state = "bandshumanface" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/tiger_stripes + name = "Tiger Stripes" + icon_state = "tiger" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits //There's a tattoo for non-cats + +/datum/sprite_accessory/marking/tigerhead + name = "Tiger Stripes (Head, Minor)" + icon_state = "tigerhead" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tigerface + name = "Tiger Stripes (Head, Major)" + icon_state = "tigerface" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits //There's a tattoo for non-cats + +/datum/sprite_accessory/marking/backstripe + name = "Back Stripe" + icon_state = "backstripe" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/bindi + name = "Bindi" + icon_state = "bindi" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/blush + name = "Blush" + icon_state= "blush" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/bridge + name = "Bridge" + icon_state = "bridge" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/brow_left + name = "Brow Left" + icon_state = "brow_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/brow_left/teshari + name = "Brow Left (Teshari)" + icon_state = "brow_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/brow_right + name = "Brow Right" + icon_state = "brow_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/brow_right/teshari + name = "Brow Right (Teshari)" + icon_state = "brow_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/cheekspot_left + name = "Cheek Spot (Left Cheek)" + icon_state = "cheekspot_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheekspot_right + name = "Cheek Spot (Right Cheek)" + icon_state = "cheekspot_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheshire_left + name = "Cheshire (Left Cheek)" + icon_state = "cheshire_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheshire_right + name = "Cheshire (Right Cheek)" + icon_state = "cheshire_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyestripe + name = "Eye Stripe" + icon_state = "eyestripe" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyestripe/teshari + name = "Eye Stripe (Teshari)" + icon_state = "eyestripe_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/eyecorner_left + name = "Eye Corner Left" + icon_state = "eyecorner_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyecorner_left/teshari + name = "Eye Corner Left (Teshari)" + icon_state = "eyecorner_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/eyecorner_right + name = "Eye Corner Right" + icon_state = "eyecorner_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyecorner_right/teshari + name = "Eye Corner Right (Teshari)" + icon_state = "eyecorner_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/fullfacepaint + name = "Full Face Paint" + icon_state = "fullface" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/lips + name = "Lips" + icon_state = "lips" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/lowercheek_left + name = "Lower Cheek Left" + icon_state = "lowercheek_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/lowercheek_left + name = "Lower Cheek Right" + icon_state = "lowercheek_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/neck + name = "Neck Cover" + icon_state = "neck" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/neckthick + name = "Neck Cover (Thick)" + icon_state = "neckthick" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/nosestripe + name = "Nose Stripe" + icon_state = "nosestripe" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/nosestripe/teshari + name = "Nose Stripe (Teshari)" + icon_state = "nosestripe_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/nosetape + name = "Nose Tape" + icon_state = "nosetape" + body_parts = list(BP_HEAD) + genetic = FALSE + +/datum/sprite_accessory/marking/nosetape/tesh + name = "Nose Tape (Teshari)" + icon_state = "nosetape_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_abdomen_left + name = "Scar, Abdomen Left" + icon_state = "scar_abdomen_l" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_abdomen_left/teshari + name = "Scar, Abdomen Left (Teshari)" + icon_state = "scar_abdomen_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_abdomen_right + name = "Scar, Abdomen Right" + icon_state = "scar_abdomen_r" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_abdomen_right/teshari + name = "Scar, Abdomen Right (Teshari)" + icon_state = "scar_abdomen_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_abdomen_small_left + name = "Scar, Abdomen Small Left" + icon_state = "scar_abdomensmall_l" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_abdomen_small_left/teshari + name = "Scar, Abdomen Small Left (Teshari)" + icon_state = "scar_abdomensmall_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_abdomen_small_right + name = "Scar, Abdomen Small Right" + icon_state = "scar_abdomensmall_r" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_abdomen_small_right/teshari + name = "Scar, Abdomen Small Right (Teshari)" + icon_state = "scar_abdomensmall_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_back_large + name = "Scar, Back Large" + icon_state = "scar_back_large" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_back_large/teshari + name = "Scar, Back Large (Teshari)" + icon_state = "scar_back_large_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_back_small + name = "Scar, Back Small (Center)" + icon_state = "scar_back_small" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_back_small/teshari + name = "Scar, Back Small (Center)(Teshari)" + icon_state = "scar_back_small_tesh" + species_allowed = list(SPECIES_TESHARI) + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_back_small_upper_right + name = "Scar, Back Small (Upper Right)" + icon_state = "scar_back_small_ur" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_back_small_upper_left + name = "Scar, Back Small (Upper Left)" + icon_state = "scar_back_small_ul" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_back_small_lower_right + name = "Scar, Back Small (Lower Right)" + icon_state = "scar_back_small_lr" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_back_small_lower_left + name = "Scar, Back Small (Lower Left)" + icon_state = "scar_back_small_ll" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_chest_large_left + name = "Scar, Chest Large (Left)" + icon_state = "scar_chest_large_l" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_chest_large_left/teshari + name = "Scar, Chest Large (Left)(Teshari)" + icon_state = "scar_chest_large_l_tesh" + species_allowed = list(SPECIES_TESHARI) + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_chest_large_right + name = "Scar, Chest Large (Right)" + icon_state = "scar_chest_large_r" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_chest_large_right/teshari + name = "Scar, Chest Large (Right)(Teshari)" + icon_state = "scar_chest_large_r_tesh" + species_allowed = list(SPECIES_TESHARI) + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_chest_small_left + name = "Scar, Chest Small (Left)" + icon_state = "scar_chest_small_l" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_chest_small_left/teshari + name = "Scar, Chest Small (Left)(Teshari)" + icon_state = "scar_chest_small_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_chest_small_right + name = "Scar, Chest Small (Right)" + icon_state = "scar_chest_small_r" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_chest_small_right/teshari + name = "Scar, Chest Small (Right)(Teshari)" + icon_state = "scar_chest_small_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_belly + name = "Scar, Belly" + icon_state = "scar_belly" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scar_belly/teshari + name = "Scar, Belly (Teshari)" + icon_state = "scar_belly_tesh" + species_allowed = list(SPECIES_TESHARI) + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/scar_cheek_left + name = "Scar, Cheek (Left)" + icon_state = "scar_cheek_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_cheek_right + name = "Scar, Cheek (Right)" + icon_state = "scar_cheek_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_forehead_left + name = "Scar, Forehead (Left)" + icon_state = "scar_forehead_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_forehead_left/teshari + name = "Scar, Forehead (Left)(Teshari)" + icon_state = "scar_forehead_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_forehead_right + name = "Scar, Forehead (Right)" + icon_state = "scar_forehead_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_forehead_right/teshari + name = "Scar, Forehead (Right)(Teshari)" + icon_state = "scar_forehead_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_chin + name = "Scar, Chin" + icon_state = "scar_chin" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_muzzle_teshari + name = "Scar, Muzzle" + icon_state = "scar_muzzle_tesh" + species_allowed = list(SPECIES_TESHARI) + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_eye_left + name = "Scar, Over Eye (Left)" + icon_state = "scar_eye_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_eye_left/teshari + name = "Scar, Over Eye (Left)(Teshari)" + icon_state = "scar_eye_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_eye_right + name = "Scar, Over Eye (Right)" + icon_state = "scar_eye_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/scar_eye_right/teshari + name = "Scar, Over Eye (Right)(Teshari)" + icon_state = "scar_eye_r_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_arm_upper + name = "Scar, Left Arm (Upper)" + icon_state = "scar_arm_left_u" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/scar_left_arm_upper/teshari + name = "Scar, Left Arm (Upper)(Teshari)" + icon_state = "scar_arm_left_u_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_arm_lower + name = "Scar, Left Arm (Lower)" + icon_state = "scar_arm_left_l" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/scar_left_arm_lower/teshari + name = "Scar, Left Arm (Lower)(Teshari)" + icon_state = "scar_arm_left_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_arm_rear + name = "Scar, Left Arm (Rear)" + icon_state = "scar_arm_left_rear" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/scar_left_arm_rear/teshari + name = "Scar, Left Arm (Rear)(Teshari)" + icon_state = "scar_arm_left_rear_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_hand + name = "Scar, Left Hand" + icon_state = "scar_hand_left" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/scar_left_hand/teshari + name = "Scar, Left Hand (Teshari)" + icon_state = "scar_hand_left_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_arm_upper + name = "Scar, Right Arm (Upper)" + icon_state = "scar_arm_right_u" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/scar_right_arm_upper/teshari + name = "Scar, Right Arm (Upper)(Teshari)" + icon_state = "scar_arm_right_u_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_arm_lower + name = "Scar, Right Arm (Lower)" + icon_state = "scar_arm_right_l" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/scar_right_arm_lower/teshari + name = "Scar, Right Arm (Lower)(Teshari)" + icon_state = "scar_arm_right_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_arm_rear + name = "Scar, Right Arm (Rear)" + icon_state = "scar_arm_right_rear" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/scar_right_arm_rear/teshari + name = "Scar, Right Arm (Rear)(Teshari)" + icon_state = "scar_arm_right_rear_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_hand + name = "Scar, Right Hand" + icon_state = "scar_hand_right" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/scar_right_hand/teshari + name = "Scar, Right Hand (Teshari)" + icon_state = "scar_hand_right_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_leg_upper + name = "Scar, Left Leg (Upper)" + icon_state = "scar_leg_left_u" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/scar_left_leg_upper/teshari + name = "Scar, Left Leg (Upper)(Teshari)" + icon_state = "scar_leg_left_u_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_leg_lower + name = "Scar, Left Leg (Lower)" + icon_state = "scar_leg_left_l" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/scar_left_leg_lower/teshari + name = "Scar, Left Leg (Lower)(Teshari)" + icon_state = "scar_leg_left_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_leg_rear + name = "Scar, Left Leg (Rear)" + icon_state = "scar_leg_left_rear" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/scar_left_leg_rear/teshari + name = "Scar, Left Leg (Rear)(Teshari)" + icon_state = "scar_leg_left_rear_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_left_foot + name = "Scar, Left Foot" + icon_state = "scar_left_foot" + body_parts = list(BP_L_FOOT) + +/datum/sprite_accessory/marking/scar_left_foot/teshari + name = "Scar, Left Foot (Teshari)" + icon_state = "scar_left_foot_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_leg_upper + name = "Scar, Right Leg (Upper)" + icon_state = "scar_right_leg_u" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/scar_right_leg_upper/teshari + name = "Scar, Right Leg (Upper)(Teshari)" + icon_state = "scar_right_leg_u_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_leg_lower + name = "Scar, Right Leg (Lower)" + icon_state = "scar_right_leg_l" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/scar_right_leg_lower/teshari + name = "Scar, Right Leg (Lower)(Teshari)" + icon_state = "scar_right_leg_l_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_leg_rear + name = "Scar, Right Leg (Rear)" + icon_state = "scar_right_leg_rear" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/scar_right_leg_rear/teshari + name = "Scar, Right Leg (Rear)(Teshari)" + icon_state = "scar_right_leg_rear_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/scar_right_foot + name = "Scar, Right Foot" + icon_state = "scar_right_foot" + body_parts = list(BP_R_FOOT) + +/datum/sprite_accessory/marking/scar_right_foot/teshari + name = "Scar, Right Foot (Teshari)" + icon_state = "scar_right_foot_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/skull_paint + name = "Skull Paint" + icon_state = "skull" + body_parts = list(BP_HEAD) + genetic = FALSE + +//Heterochromia + +/datum/sprite_accessory/marking/heterochromia + name = "Heterochromia (right eye)" + icon_state = "heterochromia" + body_parts = list(BP_HEAD) + +//Taj/Unathi shared markings + +/datum/sprite_accessory/marking/taj_paw_socks + name = "Socks Coloration (Taj)" + icon_state = "taj_pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/una_paw_socks + name = "Socks Coloration (Una)" + icon_state = "una_pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/paw_socks + name = "Socks Coloration (Generic)" + icon_state = "pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/paw_socks_belly + name = "Socks,Belly Coloration (Generic)" + icon_state = "pawsocksbelly" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/belly_hands_feet + name = "Hands,Feet,Belly Color (Minor)" + icon_state = "bellyhandsfeetsmall" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + //species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/hands_feet_belly_full + name = "Hands,Feet,Belly Color (Major)" + icon_state = "bellyhandsfeet" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + //SPECIES_TAJ, SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/hands_feet_belly_full_female + name = "Hands,Feet,Belly Color (Major, Female)" + icon_state = "bellyhandsfeet_female" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/patches + name = "Color Patches" + icon_state = "patches" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/patchesface + name = "Color Patches (Face)" + icon_state = "patchesface" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + + + //Taj specific stuff +/datum/sprite_accessory/marking/taj_belly + name = "Belly Fur (Taj)" + icon_state = "taj_belly" + body_parts = list(BP_TORSO) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_bellyfull + name = "Belly Fur Wide (Taj)" + icon_state = "taj_bellyfull" + body_parts = list(BP_TORSO) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_earsout + name = "Outer Ear (Taj)" + icon_state = "taj_earsout" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_earsin + name = "Inner Ear (Taj)" + icon_state = "taj_earsin" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_nose + name = "Nose Color (Taj)" + icon_state = "taj_nose" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_crest + name = "Chest Fur Crest (Taj)" + icon_state = "taj_crest" + body_parts = list(BP_TORSO) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_muzzle + name = "Muzzle Color (Taj)" + icon_state = "taj_muzzle" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_face + name = "Cheeks Color (Taj)" + icon_state = "taj_face" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/taj_all + name = "All Taj Head (Taj)" + icon_state = "taj_all" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + + //Una specific stuff +/datum/sprite_accessory/marking/una_face + name = "Face Color (Una)" + icon_state = "una_face" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/una_facelow + name = "Face Color Low (Una)" + icon_state = "una_facelow" + body_parts = list(BP_HEAD) + //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/una_scutes + name = "Scutes (Una)" + icon_state = "una_scutes" + body_parts = list(BP_TORSO) + //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits + + //Tesh stuff. + +/datum/sprite_accessory/marking/teshi_fluff + name = "Underfluff (Teshari)" + icon_state = "teshi_fluff" + body_parts = list(BP_HEAD, BP_TORSO, BP_GROIN, BP_R_LEG, BP_L_LEG) + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/teshi_heterochromia + name = "Heterochromia (Teshari) (right eye)" + icon_state = "teshi_heterochromia" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_TESHARI) + + //Diona stuff. + +/datum/sprite_accessory/marking/diona_leaves + name = "Leaves (Diona)" + icon_state = "diona_leaves" + body_parts = list(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_TORSO, BP_GROIN, BP_HEAD) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/diona_thorns + name = "Thorns (Diona)" + icon_state = "diona_thorns" + body_parts =list(BP_TORSO, BP_HEAD) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + do_colouration = 0 + +/datum/sprite_accessory/marking/diona_flowers + name = "Flowers (Diona)" + icon_state = "diona_flowers" + body_parts =list(BP_TORSO, BP_HEAD) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + do_colouration = 0 + +/datum/sprite_accessory/marking/diona_moss + name = "Moss (Diona)" + icon_state = "diona_moss" + body_parts =list(BP_TORSO) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + do_colouration = 0 + +/datum/sprite_accessory/marking/diona_mushroom + name = "Mushroom (Diona)" + icon_state = "diona_mushroom" + body_parts =list(BP_HEAD) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + do_colouration = 0 + +/datum/sprite_accessory/marking/diona_antennae + name = "Antennae (Diona)" + icon_state = "diona_antennae" + body_parts =list(BP_HEAD) + //species_allowed = list(SPECIES_DIONA) //Removing Polaris whitelits + do_colouration = 0 + +//Skrell stuff. + +/datum/sprite_accessory/marking/skrell + name = "Countershading (Skrell)" + icon_state = "skr_shade" + body_parts = list(BP_TORSO, BP_GROIN, BP_HEAD) + //species_allowed = list(SPECIES_SKRELL) //Removing Polaris whitelits + +/datum/sprite_accessory/marking/skrell/stripes + name = "Poison Dart Stripes (Skrell)" + icon_state = "skr_stripes" + body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_TORSO) + +//Cybernetic Augments, some species-limited due to sprite misalignment. /aug/ types are excluded from dna. + +/datum/sprite_accessory/marking/aug + name = "Augment (Backports, Back)" + icon_state = "aug_backports" + genetic = FALSE + body_parts = list(BP_TORSO) + species_allowed = list() //Removing Polaris whitelits + +/datum/sprite_accessory/marking/aug/diode + name = "Augment (Backports Diode, Back)" + icon_state = "aug_backportsdiode" + +/datum/sprite_accessory/marking/aug/backportswide + name = "Augment (Backports Wide, Back)" + icon_state = "aug_backportswide" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/aug/backportswide/diode + name = "Augment (Backports Wide Diode, Back)" + icon_state = "aug_backportswidediode" + +/datum/sprite_accessory/marking/aug/headcase + name = "Augment (Headcase, Head)" + icon_state = "aug_headcase" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headcase_light + name = "Augment (Headcase Light, Head)" + icon_state = "aug_headcaselight" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headport + name = "Augment (Headport, Head)" + icon_state = "aug_headport" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headport/diode + name = "Augment (Headport Diode, Head)" + icon_state = "aug_headplugdiode" + +/datum/sprite_accessory/marking/aug/lowerjaw + name = "Augment (Lower Jaw, Head)" + icon_state = "aug_lowerjaw" + body_parts = list(BP_HEAD) + species_allowed = list() //Removing Polaris whitelits + +/datum/sprite_accessory/marking/aug/scalpports + name = "Augment (Scalp Ports)" + icon_state = "aug_scalpports" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/scalpports/vertex_left + name = "Augment (Scalp Port, Vertex Left)" + icon_state = "aug_vertexport_l" + +/datum/sprite_accessory/marking/aug/scalpports/vertex_right + name = "Augment (Scalp Port, Vertex Right)" + icon_state = "aug_vertexport_r" + +/datum/sprite_accessory/marking/aug/scalpports/occipital_left + name = "Augment (Scalp Port, Occipital Left)" + icon_state = "aug_occipitalport_l" + +/datum/sprite_accessory/marking/aug/scalpports/occipital_right + name = "Augment (Scalp Port, Occipital Right)" + icon_state = "aug_occipitalport_r" + +/datum/sprite_accessory/marking/aug/scalpportsdiode + name = "Augment (Scalp Ports Diode)" + icon_state = "aug_scalpportsdiode" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_left + name = "Augment (Scalp Port Diode, Vertex Left)" + icon_state = "aug_vertexportdiode_l" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_right + name = "Augment (Scalp Port Diode, Vertex Right)" + icon_state = "aug_vertexportdiode_r" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_left + name = "Augment (Scalp Port Diode, Occipital Left)" + icon_state = "aug_occipitalportdiode_l" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_right + name = "Augment (Scalp Port Diode, Occipital Right)" + icon_state = "aug_occipitalportdiode_r" + +/datum/sprite_accessory/marking/aug/backside_left + name = "Augment (Backside Left, Head)" + icon_state = "aug_backside_l" + +/datum/sprite_accessory/marking/aug/backside_left/side_diode + name = "Augment (Backside Left Diode, Head)" + icon_state = "aug_sidediode_l" + +/datum/sprite_accessory/marking/aug/backside_right + name = "Augment (Backside Right, Head)" + icon_state = "aug_backside_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/backside_right/side_diode + name = "Augment (Backside Right Diode, Head)" + icon_state = "aug_sidediode_r" + +/datum/sprite_accessory/marking/aug/side_deunan_left + name = "Augment (Deunan, Side Left)" + icon_state = "aug_sidedeunan_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_deunan_right + name = "Augment (Deunan, Side Right)" + icon_state = "aug_sidedeunan_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_left + name = "Augment (Kuze, Side Left)" + icon_state = "aug_sidekuze_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_left/side_diode + name = "Augment (Kuze Diode, Side Left)" + icon_state = "aug_sidekuzediode_l" + +/datum/sprite_accessory/marking/aug/side_kuze_right + name = "Augment (Kuze, Side Right)" + icon_state = "aug_sidekuze_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_right/side_diode + name = "Augment (Kuze Diode, Side Right)" + icon_state = "aug_sidekuzediode_r" + +/datum/sprite_accessory/marking/aug/side_kinzie_left + name = "Augment (Kinzie, Side Left)" + icon_state = "aug_sidekinzie_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kinzie_right + name = "Augment (Kinzie, Side Right)" + icon_state = "aug_sidekinzie_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_shelly_left + name = "Augment (Shelly, Side Left)" + icon_state = "aug_sideshelly_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_shelly_right + name = "Augment (Shelly, Side Right)" + icon_state = "aug_sideshelly_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/chestports + name = "Augment (Chest Ports)" + icon_state = "aug_chestports" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/aug/chestports/teshari + name = "Augment (Chest Ports)(Teshari)" + icon_state = "aug_chestports_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/aug/abdomenports + name = "Augment (Abdomen Ports)" + icon_state = "aug_abdomenports" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/aug/abdomenports/teshari + name = "Augment (Abdomen Ports)(Teshari)" + icon_state = "aug_abdomenports_tesh" + body_parts = list(BP_GROIN) + species_allowed = list(SPECIES_TESHARI) + +//bandages + +/datum/sprite_accessory/marking/bandage + name = "Bandage, Head 1" + icon_state = "bandage1" + body_parts = list(BP_HEAD) + genetic = FALSE + do_colouration = FALSE + +/datum/sprite_accessory/marking/bandage/teshari + name = "Bandage, Head 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/head2 + name = "Bandage, Head 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/head2/teshari + name = "Bandage, Head 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/head3 + name = "Bandage, Head 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/head3/teshari + name = "Bandage, Head 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/torso + name = "Bandage, Torso 1" + icon_state = "bandage1" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/bandage/torso/teshari + name = "Bandage, Torso 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/torso/torso2 + name = "Bandage, Torso 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/torso/torso2/teshari + name = "Bandage, Torso 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/torso/torso3 + name = "Bandage, Torso 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/torso/torso3/teshari + name = "Bandage, Torso 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/groin + name = "Bandage, Groin 1" + icon_state = "bandage1" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/bandage/groin/teshari + name = "Bandage, Groin 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/groin/groin2 + name = "Bandage, Groin 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/groin/groin2/teshari + name = "Bandage, Groin 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/groin/groin3 + name = "Bandage, Groin 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/groin/groin3/teshari + name = "Bandage, Groin 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_arm + name = "Bandage, Left Arm 1" + icon_state = "bandage1" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/bandage/l_arm/teshari + name = "Bandage, Left Arm 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_arm/l_arm2 + name = "Bandage, Left Arm 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/l_arm/l_arm2/teshari + name = "Bandage, Left Arm 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_arm/l_arm3 + name = "Bandage, Left Arm 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/l_arm/l_arm3/teshari + name = "Bandage, Left Arm 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_hand + name = "Bandage, Left Hand 1" + icon_state = "bandage1" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/bandage/l_hand/teshari + name = "Bandage, Left Hand 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_hand/l_hand2 + name = "Bandage, Left Hand 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/l_hand/l_hand_2/teshari + name = "Bandage, Left Hand 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_hand/l_hand3 + name = "Bandage, Left Hand 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/r_arm + name = "Bandage, Right Arm 1" + icon_state = "bandage1" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/bandage/r_arm/teshari + name = "Bandage, Right Arm 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_arm/r_arm2 + name = "Bandage, Right Arm 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/r_arm/r_arm2/teshari + name = "Bandage, Right Arm 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_arm/r_arm3 + name = "Bandage, Right Arm 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/r_arm/r_arm3/teshari + name = "Bandage, Right Arm 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_hand + name = "Bandage, Right Hand 1" + icon_state = "bandage1" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/bandage/r_hand/teshari + name = "Bandage, Right Hand 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_hand/r_hand2 + name = "Bandage, Right Hand 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/r_hand/r_hand2/teshari + name = "Bandage, Right Hand 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_hand/r_hand3 + name = "Bandage, Right Hand 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/l_leg + name = "Bandage, Left Leg 1" + icon_state = "bandage1" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/bandage/l_leg/teshari + name = "Bandage, Left Leg 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_leg/l_leg2 + name = "Bandage, Left Leg 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/l_leg/l_leg2/teshari + name = "Bandage, Left Leg 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_leg/l_leg3 + name = "Bandage, Left Leg 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/l_leg/l_leg3/teshari + name = "Bandage, Left Leg 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_foot + name = "Bandage, Left Foot 1" + icon_state = "bandage1" + body_parts = list(BP_L_FOOT) + +/datum/sprite_accessory/marking/bandage/l_foot/teshari + name = "Bandage, Left Foot 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_foot/l_foot2 + name = "Bandage, Left Foot 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/l_foot/l_foot_2/teshari + name = "Bandage, Left Foot 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/l_foot/l_foot3 + name = "Bandage, Left Foot 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/l_foot/l_foot_3/teshari + name = "Bandage, Left Foot 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_leg + name = "Bandage, Right Leg 1" + icon_state = "bandage1" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/bandage/r_leg/teshari + name = "Bandage, Right Leg 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_leg/r_leg2 + name = "Bandage, Right Leg 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/r_leg/r_leg2/teshari + name = "Bandage, Right Leg 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_leg/r_leg3 + name = "Bandage, Right Leg 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/r_leg/r_leg3/teshari + name = "Bandage, Right Leg 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_foot + name = "Bandage, Right Foot 1" + icon_state = "bandage1" + body_parts = list(BP_R_FOOT) + +/datum/sprite_accessory/marking/bandage/r_foot/teshari + name = "Bandage, Right Foot 1 (Teshari)" + icon_state = "bandage1_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_foot/r_foot2 + name = "Bandage, Right Foot 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage/r_foot/r_foot2/teshari + name = "Bandage, Right Foot 2 (Teshari)" + icon_state = "bandage2_tesh" + species_allowed = list(SPECIES_TESHARI) + +/datum/sprite_accessory/marking/bandage/r_foot/r_foot3 + name = "Bandage, Right Foot 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage/r_foot/r_foot3/teshari + name = "Bandage, Right Foot 3 (Teshari)" + icon_state = "bandage3_tesh" + species_allowed = list(SPECIES_TESHARI) + +//skin styles - WIP +//going to have to re-integrate this with surgery +//let the icon_state hold an icon preview for now + +/datum/sprite_accessory/skin + icon = 'icons/mob/human_races/r_human.dmi' + +/datum/sprite_accessory/skin/human + name = "Default human skin" + icon_state = "default" + //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN) //Removing Polaris whitelits + +/datum/sprite_accessory/skin/human_tatt01 + name = "Tatt01 human skin" + icon_state = "tatt1" + //species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN) //Removing Polaris whitelits + +/datum/sprite_accessory/skin/tajaran + name = "Default tajaran skin" + icon_state = "default" + icon = 'icons/mob/human_races/r_tajaran.dmi' + //species_allowed = list(SPECIES_TAJ) //Removing Polaris whitelits + +/datum/sprite_accessory/skin/unathi + name = "Default Unathi skin" + icon_state = "default" + icon = 'icons/mob/human_races/r_lizard.dmi' + //species_allowed = list(SPECIES_UNATHI) //Removing Polaris whitelits + +/datum/sprite_accessory/skin/skrell + name = "Default skrell skin" + icon_state = "default" + icon = 'icons/mob/human_races/r_skrell.dmi' + //species_allowed = list(SPECIES_SKRELL) //Removing Polaris whitelits + +//Vox Exclusives +/datum/sprite_accessory/marking/vox + name = "Vox Beak" + icon = 'icons/mob/human_races/markings_vox.dmi' + icon_state = "vox_beak" + species_allowed = list(SPECIES_VOX) + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vox/voxtalons + name = "Vox scales" + icon_state = "vox_talons" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) + +/datum/sprite_accessory/marking/vox/voxclaws + name = "Vox Claws" + icon_state = "Voxclaws" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vox/vox_alt + name = "Vox Alternate" + icon_state = "bay_vox" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) + +/datum/sprite_accessory/marking/vox/vox_alt_eyes + name = "Alternate Vox Eyes" + icon_state = "bay_vox_eyes" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vox/voxscales + name = "Alternate Vox scales" + icon_state = "Voxscales" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) diff --git a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm index 832db52843..6fb9a175a7 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm @@ -1,209 +1,209 @@ -/*/datum/sprite_accessory/ears/alien_slug //Is now a base vorestation feature - name = "Alien slug ears" - desc = "The ears of a slug from space" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "alien_slug" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY -*/ -/datum/sprite_accessory/ears/zorgoia - name = "Zorgoia" - desc = "Ears only the slinkiest of noodles can have!" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "zorgoia" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/protogen - name = "Protogen" - desc = "" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "protogen" - extra_overlay = "protogen_fluff" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/miqote - name = "Miqo'te" - desc = "" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "miqote" - extra_overlay = "miqote_inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/fourears - name = "Four Ears" - desc = "" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "fourears" - extra_overlay = "fourears_fluff" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/vale - name = "VALE Model Ear Coloring" - desc = "" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "valeears" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/dragonforward - name = "Dragon horns (Forward)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "dragonforward" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/dragonforwardears - name = "Dragon horns w/Ears (Forward)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "dhornsears" - extra_overlay = "dhornsears_inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/teshbeeantenna - name = "Teshari bee antenna" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "teshbee" - -/datum/sprite_accessory/ears/teshantenna - name = "Teshari antenna, colorable" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "teshantenna" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/curlyteshantenna - name = "Teshari curly antenna, colorable" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "curly_bug_tesh" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/guilmonhorns - name = "Guilmon Horns" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "Guilmon_Horns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/una_bighorns - name = "Unathi Big Horns" - icon = 'icons/mob/Human_face_m.dmi' - icon_state = "unathi_bighorn_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_nubbydogs_c - name = "Nubby Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_nubby" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_herk_c - name = "Herk Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_herk" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_bork_c - name = "Bork Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_bork" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_bull_c - name = "Bull Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_bull" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_bicarrot_c - name = "Bicarrot Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_bicarrot" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_longcarrot_c - name = "Long Carrot Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_longcarrot" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_shortcarrot_c - name = "Short Carrot Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_shortcarrot" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_scorp_c - name = "Scorp Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_scorp" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_ocean_c - name = "Ocean Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_ocean" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/chorns_chub_c - name = "Chub Chorns (colorable)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "chorn_chub" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/goatflops - name = "Floppy Goat Ears" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "goatflops" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/goatflops_horn - name = "Floppy Goat Ears (with horns)" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "goatflops" - extra_overlay = "goatflops_horn" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/shadekin/dualcolor - name = "Shadekin Ears (dual colorable)" - desc = "" - icon = 'icons/mob/vore/ears_ch.dmi' - icon_state = "shadekin" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "shadekin-under" - -/datum/sprite_accessory/ears/antennae_alt - name = "thin antennae, colorable" - desc = "" - icon_state = "antennae_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/kittybug - name = "kitty, with antennae" - desc = "" - icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' - icon_state = "antennae_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "kitty" - extra_overlay2 = "kittyinner" +/*/datum/sprite_accessory/ears/alien_slug //Is now a base vorestation feature + name = "Alien slug ears" + desc = "The ears of a slug from space" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "alien_slug" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY +*/ +/datum/sprite_accessory/ears/zorgoia + name = "Zorgoia" + desc = "Ears only the slinkiest of noodles can have!" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "zorgoia" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/protogen + name = "Protogen" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "protogen" + extra_overlay = "protogen_fluff" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/miqote + name = "Miqo'te" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "miqote" + extra_overlay = "miqote_inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/fourears + name = "Four Ears" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "fourears" + extra_overlay = "fourears_fluff" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/vale + name = "VALE Model Ear Coloring" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "valeears" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/dragonforward + name = "Dragon horns (Forward)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "dragonforward" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/dragonforwardears + name = "Dragon horns w/Ears (Forward)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "dhornsears" + extra_overlay = "dhornsears_inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teshbeeantenna + name = "Teshari bee antenna" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "teshbee" + +/datum/sprite_accessory/ears/teshantenna + name = "Teshari antenna, colorable" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "teshantenna" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/curlyteshantenna + name = "Teshari curly antenna, colorable" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "curly_bug_tesh" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/guilmonhorns + name = "Guilmon Horns" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "Guilmon_Horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/una_bighorns + name = "Unathi Big Horns" + icon = 'icons/mob/Human_face_m.dmi' + icon_state = "unathi_bighorn_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_nubbydogs_c + name = "Nubby Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_nubby" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_herk_c + name = "Herk Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_herk" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bork_c + name = "Bork Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bork" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bull_c + name = "Bull Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bull" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bicarrot_c + name = "Bicarrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bicarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_longcarrot_c + name = "Long Carrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_longcarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_shortcarrot_c + name = "Short Carrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_shortcarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_scorp_c + name = "Scorp Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_scorp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_ocean_c + name = "Ocean Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_ocean" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_chub_c + name = "Chub Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_chub" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/goatflops + name = "Floppy Goat Ears" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "goatflops" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/goatflops_horn + name = "Floppy Goat Ears (with horns)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "goatflops" + extra_overlay = "goatflops_horn" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/shadekin/dualcolor + name = "Shadekin Ears (dual colorable)" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "shadekin" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "shadekin-under" + +/datum/sprite_accessory/ears/antennae_alt + name = "thin antennae, colorable" + desc = "" + icon_state = "antennae_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/kittybug + name = "kitty, with antennae" + desc = "" + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' + icon_state = "antennae_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "kitty" + extra_overlay2 = "kittyinner" diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 352221f66f..c68e25e6c9 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -1,84 +1,84 @@ -//Most of these are defined at this level to reduce on checks elsewhere in the code. -//Having them here also makes for a nice reference list of the various overlay-updating procs available - -/mob/proc/regenerate_icons() //Update every aspect of the mob's icons (expensive, resist the urge to use unless you need it) - return - -/mob/proc/update_icons() - update_icon() //Ugh. - return - -// Obsolete -/mob/proc/update_icons_body() - return -// End obsolete - -/mob/proc/update_hud() - return - -/mob/proc/update_inv_handcuffed() - return - -/mob/proc/update_inv_legcuffed() - return - -/mob/proc/update_inv_back() - return - -/mob/proc/update_inv_active_hand() - return - -/mob/living/update_inv_active_hand(var/A) - if(hand) - update_inv_l_hand(A) - else - update_inv_r_hand(A) - -/mob/proc/update_inv_l_hand() - return - -/mob/proc/update_inv_r_hand() - return - -/mob/proc/update_inv_wear_mask() - return - -/mob/proc/update_inv_wear_suit() - return - -/mob/proc/update_inv_w_uniform() - return - -/mob/proc/update_inv_belt() - return - -/mob/proc/update_inv_head() - return - -/mob/proc/update_inv_gloves() - return - -/mob/proc/update_mutations() - return - -/mob/proc/update_inv_wear_id() - return - -/mob/proc/update_inv_shoes() - return - -/mob/proc/update_inv_glasses() - return - -/mob/proc/update_inv_s_store() - return - -/mob/proc/update_inv_pockets() - return - -/mob/proc/update_inv_ears() - return - -/mob/proc/update_targeted() - return - +//Most of these are defined at this level to reduce on checks elsewhere in the code. +//Having them here also makes for a nice reference list of the various overlay-updating procs available + +/mob/proc/regenerate_icons() //Update every aspect of the mob's icons (expensive, resist the urge to use unless you need it) + return + +/mob/proc/update_icons() + update_icon() //Ugh. + return + +// Obsolete +/mob/proc/update_icons_body() + return +// End obsolete + +/mob/proc/update_hud() + return + +/mob/proc/update_inv_handcuffed() + return + +/mob/proc/update_inv_legcuffed() + return + +/mob/proc/update_inv_back() + return + +/mob/proc/update_inv_active_hand() + return + +/mob/living/update_inv_active_hand(var/A) + if(hand) + update_inv_l_hand(A) + else + update_inv_r_hand(A) + +/mob/proc/update_inv_l_hand() + return + +/mob/proc/update_inv_r_hand() + return + +/mob/proc/update_inv_wear_mask() + return + +/mob/proc/update_inv_wear_suit() + return + +/mob/proc/update_inv_w_uniform() + return + +/mob/proc/update_inv_belt() + return + +/mob/proc/update_inv_head() + return + +/mob/proc/update_inv_gloves() + return + +/mob/proc/update_mutations() + return + +/mob/proc/update_inv_wear_id() + return + +/mob/proc/update_inv_shoes() + return + +/mob/proc/update_inv_glasses() + return + +/mob/proc/update_inv_s_store() + return + +/mob/proc/update_inv_pockets() + return + +/mob/proc/update_inv_ears() + return + +/mob/proc/update_targeted() + return + diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index 89bf16f858..9e688d5048 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -1,91 +1,91 @@ -/var/global/datum/topic_state/default/default_state = new() - -/datum/topic_state/default/href_list(var/mob/user) - return list() - -/datum/topic_state/default/can_use_topic(var/src_object, var/mob/user) - return user.default_can_use_topic(src_object) - -/mob/proc/default_can_use_topic(var/src_object) - return STATUS_CLOSE // By default no mob can do anything with NanoUI - -/mob/observer/dead/default_can_use_topic(var/src_object) - if(can_admin_interact()) - return STATUS_INTERACTIVE // Admins are more equal - if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range - return STATUS_CLOSE - return STATUS_UPDATE // Ghosts can view updates - -/mob/living/silicon/pai/default_can_use_topic(var/src_object) - if((src_object == src || src_object == radio || src_object == communicator) && !stat) - return STATUS_INTERACTIVE - else - return ..() - -/mob/living/silicon/robot/default_can_use_topic(var/src_object) - . = shared_nano_interaction() - if(. <= STATUS_DISABLED) - return - - // robots can interact with things they can see within their view range - if((src_object in view(src)) && get_dist(src_object, src) <= src.client.view) - return STATUS_INTERACTIVE // interactive (green visibility) - return STATUS_DISABLED // no updates, completely disabled (red visibility) - -/mob/living/silicon/ai/default_can_use_topic(var/src_object) - . = shared_nano_interaction() - if(. != STATUS_INTERACTIVE) - return - - // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras) - // unless it's on the same level as the object it's interacting with. - var/turf/T = get_turf(src_object) - if(!T || !(z == T.z || (T.z in using_map.player_levels))) - return STATUS_CLOSE - - // If an object is in view then we can interact with it - if(src_object in view(client.view, src)) - return STATUS_INTERACTIVE - - // If we're installed in a chassi, rather than transfered to an inteliCard or other container, then check if we have camera view - if(is_in_chassis()) - //stop AIs from leaving windows open and using then after they lose vision - if(cameranet && !cameranet.checkTurfVis(get_turf(src_object))) - return STATUS_CLOSE - return STATUS_INTERACTIVE - else if(get_dist(src_object, src) <= client.view) // View does not return what one would expect while installed in an inteliCard - return STATUS_INTERACTIVE - - return STATUS_CLOSE - -//Some atoms such as vehicles might have special rules for how mobs inside them interact with NanoUI. -/atom/proc/contents_nano_distance(var/src_object, var/mob/living/user) - return user.shared_living_nano_distance(src_object) - -/mob/living/proc/shared_living_nano_distance(var/atom/movable/src_object) - if (!(src_object in view(4, src))) // If the src object is not in visable, disable updates - return STATUS_CLOSE - - var/dist = get_dist(src_object, src) - if (dist <= 1) - return STATUS_INTERACTIVE // interactive (green visibility) - else if (dist <= 2) - return STATUS_UPDATE // update only (orange visibility) - else if (dist <= 4) - return STATUS_DISABLED // no updates, completely disabled (red visibility) - return STATUS_CLOSE - -/mob/living/default_can_use_topic(var/src_object) - . = shared_nano_interaction(src_object) - if(. != STATUS_CLOSE) - if(loc) - . = min(., loc.contents_nano_distance(src_object, src)) - if(. == STATUS_INTERACTIVE) - return STATUS_UPDATE - -/mob/living/carbon/human/default_can_use_topic(var/src_object) - . = shared_nano_interaction(src_object) - if(. != STATUS_CLOSE) - . = min(., shared_living_nano_distance(src_object)) - if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction. - return STATUS_INTERACTIVE +/var/global/datum/topic_state/default/default_state = new() + +/datum/topic_state/default/href_list(var/mob/user) + return list() + +/datum/topic_state/default/can_use_topic(var/src_object, var/mob/user) + return user.default_can_use_topic(src_object) + +/mob/proc/default_can_use_topic(var/src_object) + return STATUS_CLOSE // By default no mob can do anything with NanoUI + +/mob/observer/dead/default_can_use_topic(var/src_object) + if(can_admin_interact()) + return STATUS_INTERACTIVE // Admins are more equal + if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range + return STATUS_CLOSE + return STATUS_UPDATE // Ghosts can view updates + +/mob/living/silicon/pai/default_can_use_topic(var/src_object) + if((src_object == src || src_object == radio || src_object == communicator) && !stat) + return STATUS_INTERACTIVE + else + return ..() + +/mob/living/silicon/robot/default_can_use_topic(var/src_object) + . = shared_nano_interaction() + if(. <= STATUS_DISABLED) + return + + // robots can interact with things they can see within their view range + if((src_object in view(src)) && get_dist(src_object, src) <= src.client.view) + return STATUS_INTERACTIVE // interactive (green visibility) + return STATUS_DISABLED // no updates, completely disabled (red visibility) + +/mob/living/silicon/ai/default_can_use_topic(var/src_object) + . = shared_nano_interaction() + if(. != STATUS_INTERACTIVE) + return + + // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras) + // unless it's on the same level as the object it's interacting with. + var/turf/T = get_turf(src_object) + if(!T || !(z == T.z || (T.z in using_map.player_levels))) + return STATUS_CLOSE + + // If an object is in view then we can interact with it + if(src_object in view(client.view, src)) + return STATUS_INTERACTIVE + + // If we're installed in a chassi, rather than transfered to an inteliCard or other container, then check if we have camera view + if(is_in_chassis()) + //stop AIs from leaving windows open and using then after they lose vision + if(cameranet && !cameranet.checkTurfVis(get_turf(src_object))) + return STATUS_CLOSE + return STATUS_INTERACTIVE + else if(get_dist(src_object, src) <= client.view) // View does not return what one would expect while installed in an inteliCard + return STATUS_INTERACTIVE + + return STATUS_CLOSE + +//Some atoms such as vehicles might have special rules for how mobs inside them interact with NanoUI. +/atom/proc/contents_nano_distance(var/src_object, var/mob/living/user) + return user.shared_living_nano_distance(src_object) + +/mob/living/proc/shared_living_nano_distance(var/atom/movable/src_object) + if (!(src_object in view(4, src))) // If the src object is not in visable, disable updates + return STATUS_CLOSE + + var/dist = get_dist(src_object, src) + if (dist <= 1) + return STATUS_INTERACTIVE // interactive (green visibility) + else if (dist <= 2) + return STATUS_UPDATE // update only (orange visibility) + else if (dist <= 4) + return STATUS_DISABLED // no updates, completely disabled (red visibility) + return STATUS_CLOSE + +/mob/living/default_can_use_topic(var/src_object) + . = shared_nano_interaction(src_object) + if(. != STATUS_CLOSE) + if(loc) + . = min(., loc.contents_nano_distance(src_object, src)) + if(. == STATUS_INTERACTIVE) + return STATUS_UPDATE + +/mob/living/carbon/human/default_can_use_topic(var/src_object) + . = shared_nano_interaction(src_object) + if(. != STATUS_CLOSE) + . = min(., shared_living_nano_distance(src_object)) + if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction. + return STATUS_INTERACTIVE diff --git a/code/modules/overmap/abductor_vr.dm b/code/modules/overmap/abductor_vr.dm index db5283014b..678f283de7 100644 --- a/code/modules/overmap/abductor_vr.dm +++ b/code/modules/overmap/abductor_vr.dm @@ -1,17 +1,17 @@ -// The alien ships should use fancy consoles and things -/obj/machinery/computer/ship/helm/abductor - icon = 'icons/obj/abductor.dmi' - icon_state = "console" - -/obj/machinery/computer/ship/engines/abductor - icon = 'icons/obj/abductor.dmi' - icon_state = "camera_flipped" - -/obj/machinery/computer/ship/navigation/abductor - icon = 'icons/obj/abductor.dmi' - icon_state = "camera" - -/obj/machinery/computer/ship/sensors/abductor - icon = 'icons/obj/abductor.dmi' - icon_state = "console" +// The alien ships should use fancy consoles and things +/obj/machinery/computer/ship/helm/abductor + icon = 'icons/obj/abductor.dmi' + icon_state = "console" + +/obj/machinery/computer/ship/engines/abductor + icon = 'icons/obj/abductor.dmi' + icon_state = "camera_flipped" + +/obj/machinery/computer/ship/navigation/abductor + icon = 'icons/obj/abductor.dmi' + icon_state = "camera" + +/obj/machinery/computer/ship/sensors/abductor + icon = 'icons/obj/abductor.dmi' + icon_state = "console" icon_screen = null \ No newline at end of file diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 18357400d2..edcd6f87ef 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -1,51 +1,51 @@ -/obj/item/weapon/paper/carbon - name = "paper" - icon_state = "paper_stack" - item_state = "paper" - var/copied = 0 - var/iscopy = 0 - - -/obj/item/weapon/paper/carbon/update_icon() - if(iscopy) - if(info) - icon_state = "cpaper_words" - return - icon_state = "cpaper" - else if (copied) - if(info) - icon_state = "paper_words" - return - icon_state = "paper" - else - if(info) - icon_state = "paper_stack_words" - return - icon_state = "paper_stack" - - - -/obj/item/weapon/paper/carbon/verb/removecopy() - set name = "Remove carbon-copy" - set category = "Object" - set src in usr - - if (copied == 0) - var/obj/item/weapon/paper/carbon/c = src - var/copycontents = html_decode(c.info) - var/obj/item/weapon/paper/carbon/copy = new /obj/item/weapon/paper/carbon (usr.loc) - // - copycontents = replacetext(copycontents, "" - copy.name = "Copy - " + c.name - copy.fields = c.fields - copy.updateinfolinks() - to_chat(usr, "You tear off the carbon-copy!") - c.copied = 1 - copy.iscopy = 1 - copy.update_icon() - c.update_icon() - else - to_chat(usr, "There are no more carbon copies attached to this paper!") +/obj/item/weapon/paper/carbon + name = "paper" + icon_state = "paper_stack" + item_state = "paper" + var/copied = 0 + var/iscopy = 0 + + +/obj/item/weapon/paper/carbon/update_icon() + if(iscopy) + if(info) + icon_state = "cpaper_words" + return + icon_state = "cpaper" + else if (copied) + if(info) + icon_state = "paper_words" + return + icon_state = "paper" + else + if(info) + icon_state = "paper_stack_words" + return + icon_state = "paper_stack" + + + +/obj/item/weapon/paper/carbon/verb/removecopy() + set name = "Remove carbon-copy" + set category = "Object" + set src in usr + + if (copied == 0) + var/obj/item/weapon/paper/carbon/c = src + var/copycontents = html_decode(c.info) + var/obj/item/weapon/paper/carbon/copy = new /obj/item/weapon/paper/carbon (usr.loc) + // + copycontents = replacetext(copycontents, "" + copy.name = "Copy - " + c.name + copy.fields = c.fields + copy.updateinfolinks() + to_chat(usr, "You tear off the carbon-copy!") + c.copied = 1 + copy.iscopy = 1 + copy.update_icon() + c.update_icon() + else + to_chat(usr, "There are no more carbon copies attached to this paper!") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 5409fbb2c1..cf2aea18b3 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -1,349 +1,349 @@ -/* Pens! - * Contains: - * Pens - * Coloured Pens - * Fountain Pens - * Multi Pen - * Reagent Pens - * Blade Pens - * Sleepy Pens - * Parapens - * Chameleon Pen - * Crayons - */ - -/* - * Pens - */ -/obj/item/weapon/pen - name = "pen" - desc = "It's a normal black ink pen." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 0 - w_class = ITEMSIZE_TINY - throw_speed = 7 - throw_range = 15 - matter = list(MAT_STEEL = 10) - var/colour = "black" //what colour the ink is! - pressure_resistance = 2 - drop_sound = 'sound/items/drop/accessory.ogg' - pickup_sound = 'sound/items/pickup/accessory.ogg' - -/obj/item/weapon/pen/attack_self(var/mob/user) - if(!user.checkClickCooldown()) - return - user.setClickCooldown(1 SECOND) - to_chat(user, "Click.") - playsound(src, 'sound/items/penclick.ogg', 50, 1) - -/* - * Coloured Pens - */ -/obj/item/weapon/pen/blue - desc = "It's a normal blue ink pen." - icon_state = "pen_blue" - colour = "blue" - -/obj/item/weapon/pen/red - desc = "It's a normal red ink pen." - icon_state = "pen_red" - colour = "red" - -/* - * Fountain Pens - */ -/obj/item/weapon/pen/fountain - desc = "A well made fountain pen, with a faux wood body." - icon_state = "pen_fountain" - -/obj/item/weapon/pen/fountain2 - desc = "A well made fountain pen, with a faux wood body. This one has golden accents." - icon_state = "pen_fountain" - -/obj/item/weapon/pen/fountain3 - desc = "A well made expesive rosewood pen with golden accents. Very pretty." - icon_state = "pen_fountain" - -/obj/item/weapon/pen/fountain4 - desc = "A well made and expensive fountain pen. This one has silver accents." - icon_state = "blues_fountain" - -/obj/item/weapon/pen/fountain5 - desc = "A well made and expensive fountain pen. This one has gold accents." - icon_state = "blueg_fountain" - -/obj/item/weapon/pen/fountain6 - desc = "A well made and expensive fountain pen. The nib is quite sharp." - icon_state = "command_fountain" - -/obj/item/weapon/pen/fountain7 - desc = "A well made and expensive fountain pen made from gold." - icon_state = "gold_fountain" - -/obj/item/weapon/pen/fountain8 - desc = "A well made and expensive fountain pen." - icon_state = "black_fountain" - -/obj/item/weapon/pen/fountain9 - desc = "A well made and expensive fountain pen made for gesturing." - icon_state = "mime_fountain" - - -/* - * Multi Pen - */ -/obj/item/weapon/pen/multi - desc = "It's a pen with multiple colors of ink!" - var/selectedColor = 1 - var/colors = list("black","blue","red") - -/obj/item/weapon/pen/AltClick(mob/user) - to_chat(user, "Click.") - playsound(src, 'sound/items/penclick.ogg', 50, 1) - return - -/obj/item/weapon/pen/multi/attack_self(mob/user) - if(++selectedColor > 3) - selectedColor = 1 - - colour = colors[selectedColor] - - if(colour == "black") - icon_state = "pen" - else - icon_state = "pen_[colour]" - - to_chat(user, "Changed color to '[colour].'") - -/obj/item/weapon/pen/invisible - desc = "It's an invisble pen marker." - icon_state = "pen" - colour = "white" - -/* - * Reagent Pens - */ - -/obj/item/weapon/pen/reagent - flags = OPENCONTAINER - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/weapon/pen/reagent/New() - ..() - create_reagents(30) - -/obj/item/weapon/pen/reagent/attack(mob/living/M as mob, mob/user as mob) - - if(!istype(M)) - return - - . = ..() - - if(M.can_inject(user,1)) - if(reagents.total_volume) - if(M.reagents) - var/contained = reagents.get_reagents() - var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) - add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units") - -/* - * Blade Pens - */ -/obj/item/weapon/pen/blade - desc = "It's a normal black ink pen." - description_antag = "This pen can be transformed into a dangerous melee and thrown assassination weapon with an Alt-Click.\ - When active, it cannot be caught safely." - name = "pen" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 3 - w_class = ITEMSIZE_TINY - throw_speed = 7 - throw_range = 15 - armor_penetration = 20 - - var/active = 0 - var/active_embed_chance = 0 - var/active_force = 15 - var/active_throwforce = 30 - var/active_w_class = ITEMSIZE_NORMAL - var/active_icon_state - var/default_icon_state - -/obj/item/weapon/pen/blade/Initialize() - . = ..() - active_icon_state = "[icon_state]-x" - default_icon_state = icon_state - -/obj/item/weapon/pen/blade/AltClick(mob/user) - ..() - if(active) - deactivate(user) - else - activate(user) - - to_chat(user, "You [active ? "de" : ""]activate \the [src]'s blade.") - -/obj/item/weapon/pen/blade/proc/activate(mob/living/user) - if(active) - return - active = 1 - icon_state = active_icon_state - embed_chance = active_embed_chance - force = active_force - throwforce = active_throwforce - sharp = TRUE - edge = TRUE - w_class = active_w_class - playsound(src, 'sound/weapons/saberon.ogg', 15, 1) - damtype = SEARING - catchable = FALSE - - attack_verb |= list(\ - "slashed",\ - "cut",\ - "shredded",\ - "stabbed"\ - ) - -/obj/item/weapon/pen/blade/proc/deactivate(mob/living/user) - if(!active) - return - playsound(src, 'sound/weapons/saberoff.ogg', 15, 1) - active = 0 - icon_state = default_icon_state - embed_chance = initial(embed_chance) - force = initial(force) - throwforce = initial(throwforce) - sharp = initial(sharp) - edge = initial(edge) - w_class = initial(w_class) - damtype = BRUTE - catchable = TRUE - -/obj/item/weapon/pen/blade/blue - desc = "It's a normal blue ink pen." - icon_state = "pen_blue" - colour = "blue" - -/obj/item/weapon/pen/blade/red - desc = "It's a normal red ink pen." - icon_state = "pen_red" - colour = "red" - -/obj/item/weapon/pen/blade/fountain - desc = "A well made fountain pen, with a faux wood body." - icon_state = "pen_fountain" - -/* - * Sleepy Pens - */ -/obj/item/weapon/pen/reagent/sleepy - desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/weapon/pen/reagent/sleepy/New() - ..() - reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N - - -/* - * Parapens - */ -/obj/item/weapon/pen/reagent/paralysis - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/weapon/pen/reagent/paralysis/New() - ..() - reagents.add_reagent("zombiepowder", 5) - reagents.add_reagent("cryptobiolin", 10) - -/* - * Chameleon Pen - */ -/obj/item/weapon/pen/chameleon - var/signature = "" - -/obj/item/weapon/pen/chameleon/attack_self(mob/user as mob) - /* - // Limit signatures to official crew members - var/personnel_list[] = list() - for(var/datum/data/record/t in data_core.locked) //Look in data core locked. - personnel_list.Add(t.fields["name"]) - personnel_list.Add("Anonymous") - - var/new_signature = tgui_input_list(usr, "Enter new signature pattern.", "New Signature", personnel_list) - if(new_signature) - signature = new_signature - */ - signature = sanitize(tgui_input_text(usr, "Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) - -/obj/item/weapon/pen/proc/get_signature(var/mob/user) - return (user && user.real_name) ? user.real_name : "Anonymous" - -/obj/item/weapon/pen/chameleon/get_signature(var/mob/user) - return signature ? signature : "Anonymous" - -/obj/item/weapon/pen/chameleon/verb/set_colour() - set name = "Change Pen Colour" - set category = "Object" - - var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") - var/selected_type = tgui_input_list(usr, "Pick new colour.", "Pen Colour", possible_colours) - - if(selected_type) - switch(selected_type) - if("Yellow") - colour = COLOR_YELLOW - if("Green") - colour = COLOR_LIME - if("Pink") - colour = COLOR_PINK - if("Blue") - colour = COLOR_BLUE - if("Orange") - colour = COLOR_ORANGE - if("Cyan") - colour = COLOR_CYAN - if("Red") - colour = COLOR_RED - if("Invisible") - colour = COLOR_WHITE - else - colour = COLOR_BLACK - to_chat(usr, "You select the [lowertext(selected_type)] ink container.") - - -/* - * Crayons - */ -/obj/item/weapon/pen/crayon - name = "crayon" - desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonred" - w_class = ITEMSIZE_TINY - attack_verb = list("attacked", "coloured") - colour = "#FF0000" //RGB - var/shadeColour = "#220000" //RGB - var/uses = 30 //0 for unlimited uses - var/instant = 0 - var/colourName = "red" //for updateIcon purposes - drop_sound = 'sound/items/drop/gloves.ogg' - pickup_sound = 'sound/items/pickup/gloves.ogg' - -/obj/item/weapon/pen/crayon/New() - name = "[colourName] crayon" - -/obj/item/weapon/pen/crayon/marker - name = "marker" - desc = "A chisel-tip permanent marker. Hopefully non-toxic." - icon_state = "markerred" - -/obj/item/weapon/pen/crayon/marker/New() - name = "[colourName] marker" +/* Pens! + * Contains: + * Pens + * Coloured Pens + * Fountain Pens + * Multi Pen + * Reagent Pens + * Blade Pens + * Sleepy Pens + * Parapens + * Chameleon Pen + * Crayons + */ + +/* + * Pens + */ +/obj/item/weapon/pen + name = "pen" + desc = "It's a normal black ink pen." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + slot_flags = SLOT_BELT | SLOT_EARS + throwforce = 0 + w_class = ITEMSIZE_TINY + throw_speed = 7 + throw_range = 15 + matter = list(MAT_STEEL = 10) + var/colour = "black" //what colour the ink is! + pressure_resistance = 2 + drop_sound = 'sound/items/drop/accessory.ogg' + pickup_sound = 'sound/items/pickup/accessory.ogg' + +/obj/item/weapon/pen/attack_self(var/mob/user) + if(!user.checkClickCooldown()) + return + user.setClickCooldown(1 SECOND) + to_chat(user, "Click.") + playsound(src, 'sound/items/penclick.ogg', 50, 1) + +/* + * Coloured Pens + */ +/obj/item/weapon/pen/blue + desc = "It's a normal blue ink pen." + icon_state = "pen_blue" + colour = "blue" + +/obj/item/weapon/pen/red + desc = "It's a normal red ink pen." + icon_state = "pen_red" + colour = "red" + +/* + * Fountain Pens + */ +/obj/item/weapon/pen/fountain + desc = "A well made fountain pen, with a faux wood body." + icon_state = "pen_fountain" + +/obj/item/weapon/pen/fountain2 + desc = "A well made fountain pen, with a faux wood body. This one has golden accents." + icon_state = "pen_fountain" + +/obj/item/weapon/pen/fountain3 + desc = "A well made expesive rosewood pen with golden accents. Very pretty." + icon_state = "pen_fountain" + +/obj/item/weapon/pen/fountain4 + desc = "A well made and expensive fountain pen. This one has silver accents." + icon_state = "blues_fountain" + +/obj/item/weapon/pen/fountain5 + desc = "A well made and expensive fountain pen. This one has gold accents." + icon_state = "blueg_fountain" + +/obj/item/weapon/pen/fountain6 + desc = "A well made and expensive fountain pen. The nib is quite sharp." + icon_state = "command_fountain" + +/obj/item/weapon/pen/fountain7 + desc = "A well made and expensive fountain pen made from gold." + icon_state = "gold_fountain" + +/obj/item/weapon/pen/fountain8 + desc = "A well made and expensive fountain pen." + icon_state = "black_fountain" + +/obj/item/weapon/pen/fountain9 + desc = "A well made and expensive fountain pen made for gesturing." + icon_state = "mime_fountain" + + +/* + * Multi Pen + */ +/obj/item/weapon/pen/multi + desc = "It's a pen with multiple colors of ink!" + var/selectedColor = 1 + var/colors = list("black","blue","red") + +/obj/item/weapon/pen/AltClick(mob/user) + to_chat(user, "Click.") + playsound(src, 'sound/items/penclick.ogg', 50, 1) + return + +/obj/item/weapon/pen/multi/attack_self(mob/user) + if(++selectedColor > 3) + selectedColor = 1 + + colour = colors[selectedColor] + + if(colour == "black") + icon_state = "pen" + else + icon_state = "pen_[colour]" + + to_chat(user, "Changed color to '[colour].'") + +/obj/item/weapon/pen/invisible + desc = "It's an invisble pen marker." + icon_state = "pen" + colour = "white" + +/* + * Reagent Pens + */ + +/obj/item/weapon/pen/reagent + flags = OPENCONTAINER + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + +/obj/item/weapon/pen/reagent/New() + ..() + create_reagents(30) + +/obj/item/weapon/pen/reagent/attack(mob/living/M as mob, mob/user as mob) + + if(!istype(M)) + return + + . = ..() + + if(M.can_inject(user,1)) + if(reagents.total_volume) + if(M.reagents) + var/contained = reagents.get_reagents() + var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) + add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units") + +/* + * Blade Pens + */ +/obj/item/weapon/pen/blade + desc = "It's a normal black ink pen." + description_antag = "This pen can be transformed into a dangerous melee and thrown assassination weapon with an Alt-Click.\ + When active, it cannot be caught safely." + name = "pen" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + slot_flags = SLOT_BELT | SLOT_EARS + throwforce = 3 + w_class = ITEMSIZE_TINY + throw_speed = 7 + throw_range = 15 + armor_penetration = 20 + + var/active = 0 + var/active_embed_chance = 0 + var/active_force = 15 + var/active_throwforce = 30 + var/active_w_class = ITEMSIZE_NORMAL + var/active_icon_state + var/default_icon_state + +/obj/item/weapon/pen/blade/Initialize() + . = ..() + active_icon_state = "[icon_state]-x" + default_icon_state = icon_state + +/obj/item/weapon/pen/blade/AltClick(mob/user) + ..() + if(active) + deactivate(user) + else + activate(user) + + to_chat(user, "You [active ? "de" : ""]activate \the [src]'s blade.") + +/obj/item/weapon/pen/blade/proc/activate(mob/living/user) + if(active) + return + active = 1 + icon_state = active_icon_state + embed_chance = active_embed_chance + force = active_force + throwforce = active_throwforce + sharp = TRUE + edge = TRUE + w_class = active_w_class + playsound(src, 'sound/weapons/saberon.ogg', 15, 1) + damtype = SEARING + catchable = FALSE + + attack_verb |= list(\ + "slashed",\ + "cut",\ + "shredded",\ + "stabbed"\ + ) + +/obj/item/weapon/pen/blade/proc/deactivate(mob/living/user) + if(!active) + return + playsound(src, 'sound/weapons/saberoff.ogg', 15, 1) + active = 0 + icon_state = default_icon_state + embed_chance = initial(embed_chance) + force = initial(force) + throwforce = initial(throwforce) + sharp = initial(sharp) + edge = initial(edge) + w_class = initial(w_class) + damtype = BRUTE + catchable = TRUE + +/obj/item/weapon/pen/blade/blue + desc = "It's a normal blue ink pen." + icon_state = "pen_blue" + colour = "blue" + +/obj/item/weapon/pen/blade/red + desc = "It's a normal red ink pen." + icon_state = "pen_red" + colour = "red" + +/obj/item/weapon/pen/blade/fountain + desc = "A well made fountain pen, with a faux wood body." + icon_state = "pen_fountain" + +/* + * Sleepy Pens + */ +/obj/item/weapon/pen/reagent/sleepy + desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + +/obj/item/weapon/pen/reagent/sleepy/New() + ..() + reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N + + +/* + * Parapens + */ +/obj/item/weapon/pen/reagent/paralysis + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + +/obj/item/weapon/pen/reagent/paralysis/New() + ..() + reagents.add_reagent("zombiepowder", 5) + reagents.add_reagent("cryptobiolin", 10) + +/* + * Chameleon Pen + */ +/obj/item/weapon/pen/chameleon + var/signature = "" + +/obj/item/weapon/pen/chameleon/attack_self(mob/user as mob) + /* + // Limit signatures to official crew members + var/personnel_list[] = list() + for(var/datum/data/record/t in data_core.locked) //Look in data core locked. + personnel_list.Add(t.fields["name"]) + personnel_list.Add("Anonymous") + + var/new_signature = tgui_input_list(usr, "Enter new signature pattern.", "New Signature", personnel_list) + if(new_signature) + signature = new_signature + */ + signature = sanitize(tgui_input_text(usr, "Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) + +/obj/item/weapon/pen/proc/get_signature(var/mob/user) + return (user && user.real_name) ? user.real_name : "Anonymous" + +/obj/item/weapon/pen/chameleon/get_signature(var/mob/user) + return signature ? signature : "Anonymous" + +/obj/item/weapon/pen/chameleon/verb/set_colour() + set name = "Change Pen Colour" + set category = "Object" + + var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") + var/selected_type = tgui_input_list(usr, "Pick new colour.", "Pen Colour", possible_colours) + + if(selected_type) + switch(selected_type) + if("Yellow") + colour = COLOR_YELLOW + if("Green") + colour = COLOR_LIME + if("Pink") + colour = COLOR_PINK + if("Blue") + colour = COLOR_BLUE + if("Orange") + colour = COLOR_ORANGE + if("Cyan") + colour = COLOR_CYAN + if("Red") + colour = COLOR_RED + if("Invisible") + colour = COLOR_WHITE + else + colour = COLOR_BLACK + to_chat(usr, "You select the [lowertext(selected_type)] ink container.") + + +/* + * Crayons + */ +/obj/item/weapon/pen/crayon + name = "crayon" + desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." + icon = 'icons/obj/crayons.dmi' + icon_state = "crayonred" + w_class = ITEMSIZE_TINY + attack_verb = list("attacked", "coloured") + colour = "#FF0000" //RGB + var/shadeColour = "#220000" //RGB + var/uses = 30 //0 for unlimited uses + var/instant = 0 + var/colourName = "red" //for updateIcon purposes + drop_sound = 'sound/items/drop/gloves.ogg' + pickup_sound = 'sound/items/pickup/gloves.ogg' + +/obj/item/weapon/pen/crayon/New() + name = "[colourName] crayon" + +/obj/item/weapon/pen/crayon/marker + name = "marker" + desc = "A chisel-tip permanent marker. Hopefully non-toxic." + icon_state = "markerred" + +/obj/item/weapon/pen/crayon/marker/New() + name = "[colourName] marker" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 94dea56777..95d25d7818 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -1,330 +1,330 @@ -/* Photography! - * Contains: - * Camera - * Camera Film - * Photos - * Photo Albums - */ - -/******* -* film * -*******/ -/obj/item/device/camera_film - name = "film cartridge" - icon = 'icons/obj/items.dmi' - desc = "A camera film cartridge. Insert it into a camera to reload it." - icon_state = "film" - item_state = "camera" - w_class = ITEMSIZE_TINY - - -/******** -* photo * -********/ -var/global/photo_count = 0 - -/obj/item/weapon/photo - name = "photo" - icon = 'icons/obj/items.dmi' - icon_state = "photo" - item_state = "paper" - w_class = ITEMSIZE_SMALL - drop_sound = 'sound/items/drop/paper.ogg' - pickup_sound = 'sound/items/pickup/paper.ogg' - var/id - var/icon/img //Big photo image - var/scribble //Scribble on the back. - var/icon/tiny - var/photo_size = 3 - -/obj/item/weapon/photo/New() - id = photo_count++ - - - -/obj/item/weapon/photo/attack_self(mob/user as mob) - user.examinate(src) - -/obj/item/weapon/photo/attackby(obj/item/weapon/P as obj, mob/user as mob) - if(istype(P, /obj/item/weapon/pen)) - var/txt = sanitize(tgui_input_text(user, "What would you like to write on the back?", "Photo Writing", null, 128), 128) - if(loc == user && user.stat == 0) - scribble = txt - ..() - -/obj/item/weapon/photo/examine(mob/user) - //This is one time we're not going to call parent, because photos are 'secret' unless you're close enough. - if(in_range(user, src)) - show(user) - return list(desc) - else - return list("It is too far away to examine.") - -/obj/item/weapon/photo/proc/show(mob/user as mob) - user << browse_rsc(img, "tmp_photo_[id].png") - user << browse("[name]" \ - + "" \ - + "" \ - + "[scribble ? "
                    Written on the back:
                    [scribble]" : ""]"\ - + "", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]") - onclose(user, "[name]") - return - -/obj/item/weapon/photo/verb/rename() - set name = "Rename photo" - set category = "Object" - set src in usr - - var/n_name = sanitizeSafe(tgui_input_text(usr, "What would you like to label the photo?", "Photo Labelling", null, MAX_NAME_LEN), MAX_NAME_LEN) - //loc.loc check is for making possible renaming photos in clipboards - if(( (loc == usr || (loc.loc && loc.loc == usr)) && usr.stat == 0)) - name = "[(n_name ? text("[n_name]") : "photo")]" - add_fingerprint(usr) - return - - -/************** -* photo album * -**************/ -/obj/item/weapon/storage/photo_album - name = "Photo album" - icon = 'icons/obj/items.dmi' - icon_state = "album" - item_state = "briefcase" - can_hold = list(/obj/item/weapon/photo) - -/obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) - - if((istype(usr, /mob/living/carbon/human))) - var/mob/living/carbon/human/M = usr - if(!( istype(over_object, /obj/screen) )) - return ..() - playsound(src, "rustle", 50, 1, -5) - if((!( M.restrained() ) && !( M.stat ) && M.back == src)) - switch(over_object.name) - if("r_hand") - M.unEquip(src) - M.put_in_r_hand(src) - if("l_hand") - M.unEquip(src) - M.put_in_l_hand(src) - add_fingerprint(usr) - return - if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if(usr.s_active) - usr.s_active.close(usr) - show_to(usr) - return - return - -/********* -* camera * -*********/ -/obj/item/device/camera - name = "camera" - icon = 'icons/obj/items.dmi' - desc = "A polaroid camera. 10 photos left." - icon_state = "camera" - item_state = "camera" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT - matter = list(MAT_STEEL = 2000) - var/pictures_max = 10 - var/pictures_left = 10 - var/on = 1 - var/icon_on = "camera" - var/icon_off = "camera_off" - var/size = 3 - var/list/picture_planes = list() - -/obj/item/device/camera/verb/change_size() - set name = "Set Photo Focus" - set category = "Object" - var/nsize = tgui_input_list(usr, "Photo Size","Pick a size of resulting photo.", list(1,3,5,7)) - if(nsize) - size = nsize - to_chat(usr, "Camera will now take [size]x[size] photos.") - -/obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob) - return - -/obj/item/device/camera/attack_self(mob/user as mob) - on = !on - if(on) - src.icon_state = icon_on - else - src.icon_state = icon_off - to_chat(user, "You switch the camera [on ? "on" : "off"].") - return - -/obj/item/device/camera/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/device/camera_film)) - if(pictures_left) - to_chat(user, "[src] still has some film in it!") - return - to_chat(user, "You insert [I] into [src].") - user.drop_item() - qdel(I) - pictures_left = pictures_max - return - ..() - - -/obj/item/device/camera/proc/get_icon(list/turfs, turf/center) - - //Bigger icon base to capture those icons that were shifted to the next tile - //i.e. pretty much all wall-mounted machinery - var/icon/res = icon('icons/effects/96x96.dmi', "") - res.Scale(size*32, size*32) - // Initialize the photograph to black. - res.Blend("#000", ICON_OVERLAY) - - var/atoms[] = list() - for(var/turf/the_turf in turfs) - // Add outselves to the list of stuff to draw - atoms.Add(the_turf); - // As well as anything that isn't invisible. - for(var/atom/A in the_turf) - if(A.invisibility) continue - if(A.plane > 0 && !(A.plane in picture_planes)) continue - atoms.Add(A) - - // Sort the atoms into their layers - var/list/sorted = sort_atoms_by_layer(atoms) - var/center_offset = (size-1)/2 * 32 + 1 - for(var/i; i <= sorted.len; i++) - var/atom/A = sorted[i] - if(A) - var/icon/img = getFlatIcon(A, no_anim = TRUE)//, picture_planes = picture_planes)//build_composite_icon(A) //VOREStation Edit - - // If what we got back is actually a picture, draw it. - if(istype(img, /icon)) - // Check if we're looking at a mob that's lying down - if(istype(A, /mob/living) && A:lying) - // If they are, apply that effect to their picture. - img.BecomeLying() - // Calculate where we are relative to the center of the photo - var/xoff = (A.x - center.x) * 32 + center_offset - var/yoff = (A.y - center.y) * 32 + center_offset - if (istype(A,/atom/movable)) - xoff+=A:pixel_x - yoff+=A:pixel_y - res.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff) - - // Lastly, render any contained effects on top. - for(var/turf/the_turf in turfs) - // Calculate where we are relative to the center of the photo - var/xoff = (the_turf.x - center.x) * 32 + center_offset - var/yoff = (the_turf.y - center.y) * 32 + center_offset - res.Blend(getFlatIcon(the_turf.loc, no_anim = TRUE), blendMode2iconMode(the_turf.blend_mode),xoff,yoff) - return res - - -/obj/item/device/camera/proc/get_mobs(turf/the_turf as turf) - var/mob_detail - for(var/mob/living/carbon/A in the_turf) - if(A.invisibility) continue - var/holding = null - if(A.l_hand || A.r_hand) - if(A.l_hand) holding = "They are holding \a [A.l_hand]" - if(A.r_hand) - if(holding) - holding += " and \a [A.r_hand]" - else - holding = "They are holding \a [A.r_hand]" - - if(!mob_detail) - mob_detail = "You can see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " - else - mob_detail += "You can also see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." - - return mob_detail - -/obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!on || !pictures_left || ismob(target.loc)) return - captureimage(target, user, flag) - - playsound(src, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) - - pictures_left-- - desc = "A polaroid camera. It has [pictures_left] photos left." - to_chat(user, "[pictures_left] photos left.") - icon_state = icon_off - on = 0 - spawn(64) - icon_state = icon_on - on = 1 - -/obj/item/device/camera/proc/can_capture_turf(turf/T, mob/user) - var/viewer = user - if(user.client) //To make shooting through security cameras possible - viewer = user.client.eye - var/can_see = (T in view(viewer)) - - return can_see - -/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) - var/x_c = target.x - (size-1)/2 - var/y_c = target.y + (size-1)/2 - var/z_c = target.z - var/list/turfs = list() - var/mobs = "" - for(var/i = 1 to size) - for(var/j = 1 to size) - var/turf/T = locate(x_c, y_c, z_c) - if(can_capture_turf(T, user)) - turfs.Add(T) - mobs += get_mobs(T) - x_c++ - y_c-- - x_c = x_c - size - - var/obj/item/weapon/photo/p = createpicture(target, user, turfs, mobs, flag) - - printpicture(user, p) - -/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag) - var/icon/photoimage = get_icon(turfs, target) - - var/icon/small_img = icon(photoimage) - var/icon/tiny_img = icon(photoimage) - var/icon/ic = icon('icons/obj/items.dmi',"photo") - var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo") - small_img.Scale(8, 8) - tiny_img.Scale(4, 4) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) - pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) - - var/obj/item/weapon/photo/p = new() - p.name = "photo" - p.icon = ic - p.tiny = pc - p.img = photoimage - p.desc = mobs - p.pixel_x = rand(-10, 10) - p.pixel_y = rand(-10, 10) - p.photo_size = size - return p - -/obj/item/device/camera/proc/printpicture(mob/user, obj/item/weapon/photo/p) - p.loc = user.loc - if(!user.get_inactive_hand()) - user.put_in_inactive_hand(p) - -/obj/item/weapon/photo/proc/copy(var/copy_id = 0) - var/obj/item/weapon/photo/p = new/obj/item/weapon/photo() - - p.name = name - p.icon = icon(icon, icon_state) - p.tiny = icon(tiny) - p.img = icon(img) - p.desc = desc - p.pixel_x = pixel_x - p.pixel_y = pixel_y - p.photo_size = photo_size - p.scribble = scribble - - if(copy_id) - p.id = id - - return p +/* Photography! + * Contains: + * Camera + * Camera Film + * Photos + * Photo Albums + */ + +/******* +* film * +*******/ +/obj/item/device/camera_film + name = "film cartridge" + icon = 'icons/obj/items.dmi' + desc = "A camera film cartridge. Insert it into a camera to reload it." + icon_state = "film" + item_state = "camera" + w_class = ITEMSIZE_TINY + + +/******** +* photo * +********/ +var/global/photo_count = 0 + +/obj/item/weapon/photo + name = "photo" + icon = 'icons/obj/items.dmi' + icon_state = "photo" + item_state = "paper" + w_class = ITEMSIZE_SMALL + drop_sound = 'sound/items/drop/paper.ogg' + pickup_sound = 'sound/items/pickup/paper.ogg' + var/id + var/icon/img //Big photo image + var/scribble //Scribble on the back. + var/icon/tiny + var/photo_size = 3 + +/obj/item/weapon/photo/New() + id = photo_count++ + + + +/obj/item/weapon/photo/attack_self(mob/user as mob) + user.examinate(src) + +/obj/item/weapon/photo/attackby(obj/item/weapon/P as obj, mob/user as mob) + if(istype(P, /obj/item/weapon/pen)) + var/txt = sanitize(tgui_input_text(user, "What would you like to write on the back?", "Photo Writing", null, 128), 128) + if(loc == user && user.stat == 0) + scribble = txt + ..() + +/obj/item/weapon/photo/examine(mob/user) + //This is one time we're not going to call parent, because photos are 'secret' unless you're close enough. + if(in_range(user, src)) + show(user) + return list(desc) + else + return list("It is too far away to examine.") + +/obj/item/weapon/photo/proc/show(mob/user as mob) + user << browse_rsc(img, "tmp_photo_[id].png") + user << browse("[name]" \ + + "" \ + + "" \ + + "[scribble ? "
                    Written on the back:
                    [scribble]" : ""]"\ + + "", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]") + onclose(user, "[name]") + return + +/obj/item/weapon/photo/verb/rename() + set name = "Rename photo" + set category = "Object" + set src in usr + + var/n_name = sanitizeSafe(tgui_input_text(usr, "What would you like to label the photo?", "Photo Labelling", null, MAX_NAME_LEN), MAX_NAME_LEN) + //loc.loc check is for making possible renaming photos in clipboards + if(( (loc == usr || (loc.loc && loc.loc == usr)) && usr.stat == 0)) + name = "[(n_name ? text("[n_name]") : "photo")]" + add_fingerprint(usr) + return + + +/************** +* photo album * +**************/ +/obj/item/weapon/storage/photo_album + name = "Photo album" + icon = 'icons/obj/items.dmi' + icon_state = "album" + item_state = "briefcase" + can_hold = list(/obj/item/weapon/photo) + +/obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) + + if((istype(usr, /mob/living/carbon/human))) + var/mob/living/carbon/human/M = usr + if(!( istype(over_object, /obj/screen) )) + return ..() + playsound(src, "rustle", 50, 1, -5) + if((!( M.restrained() ) && !( M.stat ) && M.back == src)) + switch(over_object.name) + if("r_hand") + M.unEquip(src) + M.put_in_r_hand(src) + if("l_hand") + M.unEquip(src) + M.put_in_l_hand(src) + add_fingerprint(usr) + return + if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) + if(usr.s_active) + usr.s_active.close(usr) + show_to(usr) + return + return + +/********* +* camera * +*********/ +/obj/item/device/camera + name = "camera" + icon = 'icons/obj/items.dmi' + desc = "A polaroid camera. 10 photos left." + icon_state = "camera" + item_state = "camera" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT + matter = list(MAT_STEEL = 2000) + var/pictures_max = 10 + var/pictures_left = 10 + var/on = 1 + var/icon_on = "camera" + var/icon_off = "camera_off" + var/size = 3 + var/list/picture_planes = list() + +/obj/item/device/camera/verb/change_size() + set name = "Set Photo Focus" + set category = "Object" + var/nsize = tgui_input_list(usr, "Photo Size","Pick a size of resulting photo.", list(1,3,5,7)) + if(nsize) + size = nsize + to_chat(usr, "Camera will now take [size]x[size] photos.") + +/obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob) + return + +/obj/item/device/camera/attack_self(mob/user as mob) + on = !on + if(on) + src.icon_state = icon_on + else + src.icon_state = icon_off + to_chat(user, "You switch the camera [on ? "on" : "off"].") + return + +/obj/item/device/camera/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/device/camera_film)) + if(pictures_left) + to_chat(user, "[src] still has some film in it!") + return + to_chat(user, "You insert [I] into [src].") + user.drop_item() + qdel(I) + pictures_left = pictures_max + return + ..() + + +/obj/item/device/camera/proc/get_icon(list/turfs, turf/center) + + //Bigger icon base to capture those icons that were shifted to the next tile + //i.e. pretty much all wall-mounted machinery + var/icon/res = icon('icons/effects/96x96.dmi', "") + res.Scale(size*32, size*32) + // Initialize the photograph to black. + res.Blend("#000", ICON_OVERLAY) + + var/atoms[] = list() + for(var/turf/the_turf in turfs) + // Add outselves to the list of stuff to draw + atoms.Add(the_turf); + // As well as anything that isn't invisible. + for(var/atom/A in the_turf) + if(A.invisibility) continue + if(A.plane > 0 && !(A.plane in picture_planes)) continue + atoms.Add(A) + + // Sort the atoms into their layers + var/list/sorted = sort_atoms_by_layer(atoms) + var/center_offset = (size-1)/2 * 32 + 1 + for(var/i; i <= sorted.len; i++) + var/atom/A = sorted[i] + if(A) + var/icon/img = getFlatIcon(A, no_anim = TRUE)//, picture_planes = picture_planes)//build_composite_icon(A) //VOREStation Edit + + // If what we got back is actually a picture, draw it. + if(istype(img, /icon)) + // Check if we're looking at a mob that's lying down + if(istype(A, /mob/living) && A:lying) + // If they are, apply that effect to their picture. + img.BecomeLying() + // Calculate where we are relative to the center of the photo + var/xoff = (A.x - center.x) * 32 + center_offset + var/yoff = (A.y - center.y) * 32 + center_offset + if (istype(A,/atom/movable)) + xoff+=A:pixel_x + yoff+=A:pixel_y + res.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff) + + // Lastly, render any contained effects on top. + for(var/turf/the_turf in turfs) + // Calculate where we are relative to the center of the photo + var/xoff = (the_turf.x - center.x) * 32 + center_offset + var/yoff = (the_turf.y - center.y) * 32 + center_offset + res.Blend(getFlatIcon(the_turf.loc, no_anim = TRUE), blendMode2iconMode(the_turf.blend_mode),xoff,yoff) + return res + + +/obj/item/device/camera/proc/get_mobs(turf/the_turf as turf) + var/mob_detail + for(var/mob/living/carbon/A in the_turf) + if(A.invisibility) continue + var/holding = null + if(A.l_hand || A.r_hand) + if(A.l_hand) holding = "They are holding \a [A.l_hand]" + if(A.r_hand) + if(holding) + holding += " and \a [A.r_hand]" + else + holding = "They are holding \a [A.r_hand]" + + if(!mob_detail) + mob_detail = "You can see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " + else + mob_detail += "You can also see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." + + return mob_detail + +/obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + if(!on || !pictures_left || ismob(target.loc)) return + captureimage(target, user, flag) + + playsound(src, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) + + pictures_left-- + desc = "A polaroid camera. It has [pictures_left] photos left." + to_chat(user, "[pictures_left] photos left.") + icon_state = icon_off + on = 0 + spawn(64) + icon_state = icon_on + on = 1 + +/obj/item/device/camera/proc/can_capture_turf(turf/T, mob/user) + var/viewer = user + if(user.client) //To make shooting through security cameras possible + viewer = user.client.eye + var/can_see = (T in view(viewer)) + + return can_see + +/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) + var/x_c = target.x - (size-1)/2 + var/y_c = target.y + (size-1)/2 + var/z_c = target.z + var/list/turfs = list() + var/mobs = "" + for(var/i = 1 to size) + for(var/j = 1 to size) + var/turf/T = locate(x_c, y_c, z_c) + if(can_capture_turf(T, user)) + turfs.Add(T) + mobs += get_mobs(T) + x_c++ + y_c-- + x_c = x_c - size + + var/obj/item/weapon/photo/p = createpicture(target, user, turfs, mobs, flag) + + printpicture(user, p) + +/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag) + var/icon/photoimage = get_icon(turfs, target) + + var/icon/small_img = icon(photoimage) + var/icon/tiny_img = icon(photoimage) + var/icon/ic = icon('icons/obj/items.dmi',"photo") + var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo") + small_img.Scale(8, 8) + tiny_img.Scale(4, 4) + ic.Blend(small_img,ICON_OVERLAY, 10, 13) + pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) + + var/obj/item/weapon/photo/p = new() + p.name = "photo" + p.icon = ic + p.tiny = pc + p.img = photoimage + p.desc = mobs + p.pixel_x = rand(-10, 10) + p.pixel_y = rand(-10, 10) + p.photo_size = size + return p + +/obj/item/device/camera/proc/printpicture(mob/user, obj/item/weapon/photo/p) + p.loc = user.loc + if(!user.get_inactive_hand()) + user.put_in_inactive_hand(p) + +/obj/item/weapon/photo/proc/copy(var/copy_id = 0) + var/obj/item/weapon/photo/p = new/obj/item/weapon/photo() + + p.name = name + p.icon = icon(icon, icon_state) + p.tiny = icon(tiny) + p.img = icon(img) + p.desc = desc + p.pixel_x = pixel_x + p.pixel_y = pixel_y + p.photo_size = photo_size + p.scribble = scribble + + if(copy_id) + p.id = id + + return p diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index 596486f3df..2dfd77cb2d 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -1,308 +1,308 @@ -var/list/command_cartridges = list( - /obj/item/weapon/cartridge/captain, - /obj/item/weapon/cartridge/hop, - /obj/item/weapon/cartridge/hos, - /obj/item/weapon/cartridge/ce, - /obj/item/weapon/cartridge/rd, - /obj/item/weapon/cartridge/cmo, - /obj/item/weapon/cartridge/head, - /obj/item/weapon/cartridge/lawyer // Internal Affaris, - ) - -var/list/security_cartridges = list( - /obj/item/weapon/cartridge/security, - /obj/item/weapon/cartridge/detective, - /obj/item/weapon/cartridge/hos - ) - -var/list/engineering_cartridges = list( - /obj/item/weapon/cartridge/engineering, - /obj/item/weapon/cartridge/atmos, - /obj/item/weapon/cartridge/ce - ) - -var/list/medical_cartridges = list( - /obj/item/weapon/cartridge/medical, - /obj/item/weapon/cartridge/chemistry, - /obj/item/weapon/cartridge/cmo - ) - -var/list/research_cartridges = list( - /obj/item/weapon/cartridge/signal/science, - /obj/item/weapon/cartridge/rd - ) - -var/list/cargo_cartridges = list( - /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently, - /obj/item/weapon/cartridge/miner, - /obj/item/weapon/cartridge/hop - ) - -var/list/civilian_cartridges = list( - /obj/item/weapon/cartridge/janitor, - /obj/item/weapon/cartridge/service, - /obj/item/weapon/cartridge/hop - ) - -/obj/item/weapon/cartridge - name = "generic cartridge" - desc = "A data cartridge for portable microcomputers." - icon = 'icons/obj/pda.dmi' - icon_state = "cart" - item_state = "electronic" - w_class = ITEMSIZE_TINY - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - - var/obj/item/radio/integrated/radio = null - - var/charges = 0 - - var/list/stored_data = list() - var/list/programs = list() - var/list/messenger_plugins = list() - -/obj/item/weapon/cartridge/Destroy() - QDEL_NULL(radio) - QDEL_LIST(programs) - QDEL_LIST(messenger_plugins) - return ..() - -/obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) - for(var/datum/data/pda/P as anything in programs) - P.pda = pda - for(var/datum/data/pda/messenger_plugin/P as anything in messenger_plugins) - P.pda = pda - -/obj/item/weapon/cartridge/engineering - name = "\improper Power-ON cartridge" - icon_state = "cart-e" - programs = list( - new/datum/data/pda/app/power, - new/datum/data/pda/utility/scanmode/halogen) - -/obj/item/weapon/cartridge/atmos - name = "\improper BreatheDeep cartridge" - icon_state = "cart-a" - programs = list(new/datum/data/pda/utility/scanmode/gas) - -/obj/item/weapon/cartridge/medical - name = "\improper Med-U cartridge" - icon_state = "cart-m" - programs = list( - new/datum/data/pda/app/crew_records/medical, - new/datum/data/pda/utility/scanmode/medical) - -/obj/item/weapon/cartridge/chemistry - name = "\improper ChemWhiz cartridge" - icon_state = "cart-chem" - programs = list( - new/datum/data/pda/app/crew_records/medical, - new/datum/data/pda/utility/scanmode/medical, - new/datum/data/pda/utility/scanmode/reagent) - -/obj/item/weapon/cartridge/security - name = "\improper R.O.B.U.S.T. cartridge" - icon_state = "cart-s" - programs = list( - new/datum/data/pda/app/crew_records/security) - -/obj/item/weapon/cartridge/detective - name = "\improper D.E.T.E.C.T. cartridge" - icon_state = "cart-s" - programs = list( - new/datum/data/pda/app/crew_records/medical, - new/datum/data/pda/utility/scanmode/medical, - - new/datum/data/pda/app/crew_records/security) - - -/obj/item/weapon/cartridge/janitor - name = "\improper CustodiPRO cartridge" - desc = "The ultimate in clean-room design." - icon_state = "cart-j" - programs = list(new/datum/data/pda/app/janitor) - -/obj/item/weapon/cartridge/lawyer - name = "\improper P.R.O.V.E. cartridge" - icon_state = "cart-s" - programs = list(new/datum/data/pda/app/crew_records/security) - -/obj/item/weapon/cartridge/clown - name = "\improper Honkworks 5.0 cartridge" - icon_state = "cart-clown" - charges = 5 - programs = list(new/datum/data/pda/utility/honk) - messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/clown) - -/obj/item/weapon/cartridge/mime - name = "\improper Gestur-O 1000 cartridge" - icon_state = "cart-mi" - charges = 5 - messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/mime) - -/obj/item/weapon/cartridge/service - name = "\improper Serv-U Pro cartridge" - desc = "A data cartridge designed to serve YOU!" - -/obj/item/weapon/cartridge/signal - name = "generic signaler cartridge" - desc = "A data cartridge with an integrated radio signaler module." - programs = list(new/datum/data/pda/app/signaller) - -/obj/item/weapon/cartridge/signal/Initialize() - radio = new /obj/item/radio/integrated/signal(src) - . = ..() - -/obj/item/weapon/cartridge/signal/science - name = "\improper Signal Ace 2 cartridge" - desc = "Complete with integrated radio signaler!" - icon_state = "cart-tox" - programs = list( - new/datum/data/pda/utility/scanmode/gas, - - new/datum/data/pda/utility/scanmode/reagent, - - new/datum/data/pda/app/signaller) - -/obj/item/weapon/cartridge/quartermaster - name = "\improper Space Parts & Space Vendors cartridge" - desc = "Perfect for the Quartermaster on the go!" - icon_state = "cart-q" - programs = list( - new/datum/data/pda/app/supply) - -/obj/item/weapon/cartridge/miner - name = "\improper Drill-Jockey 4.5 cartridge" - desc = "It's covered in some sort of sand." - icon_state = "cart-q" - -/obj/item/weapon/cartridge/head - name = "\improper Easy-Record DELUXE cartridge" - icon_state = "cart-h" - programs = list(new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/hop - name = "\improper HumanResources9001 cartridge" - icon_state = "cart-h" - programs = list( - new/datum/data/pda/app/crew_records/security, - - new/datum/data/pda/app/janitor, - - new/datum/data/pda/app/supply, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/hos - name = "\improper R.O.B.U.S.T. DELUXE cartridge" - icon_state = "cart-hos" - programs = list( - new/datum/data/pda/app/crew_records/security, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/ce - name = "\improper Power-On DELUXE cartridge" - icon_state = "cart-ce" - programs = list( - new/datum/data/pda/app/power, - new/datum/data/pda/utility/scanmode/halogen, - - new/datum/data/pda/utility/scanmode/gas, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/cmo - name = "\improper Med-U DELUXE cartridge" - icon_state = "cart-cmo" - programs = list( - new/datum/data/pda/app/crew_records/medical, - new/datum/data/pda/utility/scanmode/medical, - - new/datum/data/pda/utility/scanmode/reagent, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/rd - name = "\improper Signal Ace DELUXE cartridge" - icon_state = "cart-rd" - programs = list( - new/datum/data/pda/utility/scanmode/gas, - - new/datum/data/pda/utility/scanmode/reagent, - - new/datum/data/pda/app/signaller, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/rd/Initialize() - radio = new /obj/item/radio/integrated/signal(src) - . = ..() - -/obj/item/weapon/cartridge/captain - name = "\improper Value-PAK cartridge" - desc = "Now with 200% more value!" - icon_state = "cart-c" - programs = list( - new/datum/data/pda/app/power, - new/datum/data/pda/utility/scanmode/halogen, - - new/datum/data/pda/utility/scanmode/gas, - - new/datum/data/pda/app/crew_records/medical, - new/datum/data/pda/utility/scanmode/medical, - - new/datum/data/pda/utility/scanmode/reagent, - - new/datum/data/pda/app/crew_records/security, - - new/datum/data/pda/app/janitor, - - new/datum/data/pda/app/supply, - - new/datum/data/pda/app/status_display) - -/obj/item/weapon/cartridge/syndicate - name = "\improper Detomatix cartridge" - icon_state = "cart" - var/initial_remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. - charges = 4 - programs = list(new/datum/data/pda/utility/toggle_door) - messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/detonate) - -/obj/item/weapon/cartridge/syndicate/New() - var/datum/data/pda/utility/toggle_door/D = programs[1] - if(istype(D)) - D.remote_door_id = initial_remote_door_id - -/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = TRANSMISSION_RADIO - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if(loc) - var/obj/item/PDA = loc - var/mob/user = PDA.fingerprintslast - log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - -/obj/item/weapon/cartridge/frame - name = "F.R.A.M.E. cartridge" - icon_state = "cart" - charges = 5 - messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame) +var/list/command_cartridges = list( + /obj/item/weapon/cartridge/captain, + /obj/item/weapon/cartridge/hop, + /obj/item/weapon/cartridge/hos, + /obj/item/weapon/cartridge/ce, + /obj/item/weapon/cartridge/rd, + /obj/item/weapon/cartridge/cmo, + /obj/item/weapon/cartridge/head, + /obj/item/weapon/cartridge/lawyer // Internal Affaris, + ) + +var/list/security_cartridges = list( + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/detective, + /obj/item/weapon/cartridge/hos + ) + +var/list/engineering_cartridges = list( + /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/atmos, + /obj/item/weapon/cartridge/ce + ) + +var/list/medical_cartridges = list( + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/chemistry, + /obj/item/weapon/cartridge/cmo + ) + +var/list/research_cartridges = list( + /obj/item/weapon/cartridge/signal/science, + /obj/item/weapon/cartridge/rd + ) + +var/list/cargo_cartridges = list( + /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently, + /obj/item/weapon/cartridge/miner, + /obj/item/weapon/cartridge/hop + ) + +var/list/civilian_cartridges = list( + /obj/item/weapon/cartridge/janitor, + /obj/item/weapon/cartridge/service, + /obj/item/weapon/cartridge/hop + ) + +/obj/item/weapon/cartridge + name = "generic cartridge" + desc = "A data cartridge for portable microcomputers." + icon = 'icons/obj/pda.dmi' + icon_state = "cart" + item_state = "electronic" + w_class = ITEMSIZE_TINY + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + + var/obj/item/radio/integrated/radio = null + + var/charges = 0 + + var/list/stored_data = list() + var/list/programs = list() + var/list/messenger_plugins = list() + +/obj/item/weapon/cartridge/Destroy() + QDEL_NULL(radio) + QDEL_LIST(programs) + QDEL_LIST(messenger_plugins) + return ..() + +/obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) + for(var/datum/data/pda/P as anything in programs) + P.pda = pda + for(var/datum/data/pda/messenger_plugin/P as anything in messenger_plugins) + P.pda = pda + +/obj/item/weapon/cartridge/engineering + name = "\improper Power-ON cartridge" + icon_state = "cart-e" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen) + +/obj/item/weapon/cartridge/atmos + name = "\improper BreatheDeep cartridge" + icon_state = "cart-a" + programs = list(new/datum/data/pda/utility/scanmode/gas) + +/obj/item/weapon/cartridge/medical + name = "\improper Med-U cartridge" + icon_state = "cart-m" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical) + +/obj/item/weapon/cartridge/chemistry + name = "\improper ChemWhiz cartridge" + icon_state = "cart-chem" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + new/datum/data/pda/utility/scanmode/reagent) + +/obj/item/weapon/cartridge/security + name = "\improper R.O.B.U.S.T. cartridge" + icon_state = "cart-s" + programs = list( + new/datum/data/pda/app/crew_records/security) + +/obj/item/weapon/cartridge/detective + name = "\improper D.E.T.E.C.T. cartridge" + icon_state = "cart-s" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/app/crew_records/security) + + +/obj/item/weapon/cartridge/janitor + name = "\improper CustodiPRO cartridge" + desc = "The ultimate in clean-room design." + icon_state = "cart-j" + programs = list(new/datum/data/pda/app/janitor) + +/obj/item/weapon/cartridge/lawyer + name = "\improper P.R.O.V.E. cartridge" + icon_state = "cart-s" + programs = list(new/datum/data/pda/app/crew_records/security) + +/obj/item/weapon/cartridge/clown + name = "\improper Honkworks 5.0 cartridge" + icon_state = "cart-clown" + charges = 5 + programs = list(new/datum/data/pda/utility/honk) + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/clown) + +/obj/item/weapon/cartridge/mime + name = "\improper Gestur-O 1000 cartridge" + icon_state = "cart-mi" + charges = 5 + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/mime) + +/obj/item/weapon/cartridge/service + name = "\improper Serv-U Pro cartridge" + desc = "A data cartridge designed to serve YOU!" + +/obj/item/weapon/cartridge/signal + name = "generic signaler cartridge" + desc = "A data cartridge with an integrated radio signaler module." + programs = list(new/datum/data/pda/app/signaller) + +/obj/item/weapon/cartridge/signal/Initialize() + radio = new /obj/item/radio/integrated/signal(src) + . = ..() + +/obj/item/weapon/cartridge/signal/science + name = "\improper Signal Ace 2 cartridge" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller) + +/obj/item/weapon/cartridge/quartermaster + name = "\improper Space Parts & Space Vendors cartridge" + desc = "Perfect for the Quartermaster on the go!" + icon_state = "cart-q" + programs = list( + new/datum/data/pda/app/supply) + +/obj/item/weapon/cartridge/miner + name = "\improper Drill-Jockey 4.5 cartridge" + desc = "It's covered in some sort of sand." + icon_state = "cart-q" + +/obj/item/weapon/cartridge/head + name = "\improper Easy-Record DELUXE cartridge" + icon_state = "cart-h" + programs = list(new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/hop + name = "\improper HumanResources9001 cartridge" + icon_state = "cart-h" + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/hos + name = "\improper R.O.B.U.S.T. DELUXE cartridge" + icon_state = "cart-hos" + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/ce + name = "\improper Power-On DELUXE cartridge" + icon_state = "cart-ce" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/cmo + name = "\improper Med-U DELUXE cartridge" + icon_state = "cart-cmo" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/rd + name = "\improper Signal Ace DELUXE cartridge" + icon_state = "cart-rd" + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/rd/Initialize() + radio = new /obj/item/radio/integrated/signal(src) + . = ..() + +/obj/item/weapon/cartridge/captain + name = "\improper Value-PAK cartridge" + desc = "Now with 200% more value!" + icon_state = "cart-c" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/syndicate + name = "\improper Detomatix cartridge" + icon_state = "cart" + var/initial_remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. + charges = 4 + programs = list(new/datum/data/pda/utility/toggle_door) + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/detonate) + +/obj/item/weapon/cartridge/syndicate/New() + var/datum/data/pda/utility/toggle_door/D = programs[1] + if(istype(D)) + D.remote_door_id = initial_remote_door_id + +/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) + + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = TRANSMISSION_RADIO + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + if(loc) + var/obj/item/PDA = loc + var/mob/user = PDA.fingerprintslast + log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + + if("alert") + status_signal.data["picture_state"] = data1 + + frequency.post_signal(src, status_signal) + +/obj/item/weapon/cartridge/frame + name = "F.R.A.M.E. cartridge" + icon_state = "cart" + charges = 5 + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame) diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index 7d1ce9e0d5..2a83d4fa64 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -1,521 +1,521 @@ - -//The advanced pea-green monochrome lcd of tomorrow. - -var/global/list/obj/item/device/pda/PDAs = list() - -/obj/item/device/pda - name = "\improper PDA" - desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." - icon = 'icons/obj/pda_vr.dmi' //VOREStation edit - icon_state = "pda" - item_state = "electronic" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_ID | SLOT_BELT - sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/id.dmi') - - //Main variables - var/pdachoice = 1 - var/owner = null - var/default_cartridge = 0 // Access level defined by cartridge - var/obj/item/weapon/cartridge/cartridge = null //current cartridge - - //Secondary variables - var/model_name = "Thinktronic 5230 Personal Data Assistant" - var/datum/data/pda/utility/scanmode/scanmode = null - - var/lock_code = "" // Lockcode to unlock uplink - var/honkamt = 0 //How many honks left when infected with honk.exe - var/mimeamt = 0 //How many silence left when infected with mime.exe - var/detonate = 1 // Can the PDA be blown up? - var/ttone = "beep" //The ringtone! - var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg', - "boom" = 'sound/effects/explosionfar.ogg', - "slip" = 'sound/misc/slip.ogg', - "honk" = 'sound/items/bikehorn.ogg', - "SKREE" = 'sound/voice/shriek1.ogg', - "xeno" = 'sound/voice/hiss1.ogg', - "dust" = 'sound/effects/supermatter.ogg', // CHOMPEdit - Keeps dust as ringtone - "spark" = 'sound/effects/sparks4.ogg', - "rad" = 'sound/items/geiger/high1.ogg', - "servo" = 'sound/machines/rig/rigservo.ogg', - // "buh-boop" = 'sound/misc/buh-boop.ogg', // CHOMPEdit - No. - "trombone" = 'sound/misc/sadtrombone.ogg', - "whistle" = 'sound/misc/boatswain.ogg', - "chirp" = 'sound/misc/nymphchirp.ogg', - "slurp" = 'sound/items/drink.ogg', - "pwing" = 'sound/items/nif_tone_good.ogg', - "clack" = 'sound/items/storage/toolbox.ogg', - "bzzt" = 'sound/misc/null.ogg', //vibrate mode - "chimes" = 'sound/misc/notice3.ogg', - "prbt" = 'sound/voice/prbt.ogg', - "bark" = 'sound/voice/bark2.ogg', - "bork" = 'sound/voice/bork.ogg', - "roark" = 'sound/voice/roarbark.ogg', - "chitter" = 'sound/voice/moth/moth_chitter.ogg', - "squish" = 'sound/effects/slime_squish.ogg') - var/hidden = 0 // Is the PDA hidden from the PDA list? - var/touch_silent = 0 //If 1, no beeps on interacting. - - var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. - var/ownjob = null //related to above - this is assignment (potentially alt title) - var/ownrank = null // this one is rank, never alt title - - var/obj/item/device/paicard/pai = null // A slot for a personal AI device - - var/spam_proof = FALSE // If true, it can't be spammed by random events. - - var/datum/data/pda/app/current_app = null - var/datum/data/pda/app/lastapp = null - var/list/programs = list( - new/datum/data/pda/app/main_menu, - new/datum/data/pda/app/notekeeper, - new/datum/data/pda/app/news, - new/datum/data/pda/app/messenger, - new/datum/data/pda/app/manifest, - new/datum/data/pda/app/atmos_scanner, - new/datum/data/pda/utility/scanmode/notes, - new/datum/data/pda/utility/flashlight) - var/list/shortcut_cache = list() - var/list/shortcut_cat_order = list() - var/list/notifying_programs = list() - var/retro_mode = 0 - -/obj/item/device/pda/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "The time [stationtime2text()] is displayed in the corner of the screen." - -/obj/item/device/pda/CtrlClick() - if(issilicon(usr)) - return - - if(can_use(usr)) - remove_pen() - return - ..() - -/obj/item/device/pda/AltClick() - if(issilicon(usr)) - return - - if ( can_use(usr) ) - if(id) - remove_id() - else - to_chat(usr, "This PDA does not have an ID in it.") - -/obj/item/device/pda/proc/play_ringtone() - var/S - - if(ttone in ttone_sound) - S = ttone_sound[ttone] - else - S = 'sound/machines/twobeep.ogg' - playsound(loc, S, 50, 1) - for(var/mob/O in hearers(3, loc)) - O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) - -/obj/item/device/pda/proc/set_ringtone() - var/t = tgui_input_text(usr, "Please enter new ringtone", name, ttone) - if(in_range(src, usr) && loc == usr) - if(t) - if(hidden_uplink && hidden_uplink.check_trigger(usr, lowertext(t), lowertext(lock_code))) - to_chat(usr, "The PDA softly beeps.") - close(usr) - else - t = sanitize(copytext(t, 1, 20)) - ttone = t - return 1 - else - close(usr) - return 0 - -/obj/item/device/pda/New(var/mob/living/carbon/human/H) - ..() - PDAs += src - PDAs = sortAtom(PDAs) - update_programs() - if(default_cartridge) - cartridge = new default_cartridge(src) - cartridge.update_programs(src) - new /obj/item/weapon/pen(src) - pdachoice = isnull(H) ? 1 : (ishuman(H) ? H.pdachoice : 1) - switch(pdachoice) - if(1) icon = 'icons/obj/pda_vr.dmi' //VOREStation edit - if(2) icon = 'icons/obj/pda_slim.dmi' - if(3) icon = 'icons/obj/pda_old.dmi' - if(4) icon = 'icons/obj/pda_rugged.dmi' - if(5) icon = 'icons/obj/pda_holo.dmi' - if(6) - icon = 'icons/obj/pda_wrist.dmi' - item_state = icon_state - item_icons = list( - slot_belt_str = 'icons/mob/pda_wrist.dmi', - slot_wear_id_str = 'icons/mob/pda_wrist.dmi', - slot_gloves_str = 'icons/mob/pda_wrist.dmi' - ) - desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a wrist-bound version." - slot_flags = SLOT_ID | SLOT_BELT | SLOT_GLOVES - sprite_sheets = list( - SPECIES_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi', - SPECIES_VR_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi', - ) - if(7) icon = 'icons/obj/pda_slider.dmi' //VOREStation edit - if(8) - icon = 'icons/obj/pda_vintage.dmi' - desc = "A vintage communication device. This device has been refitted for compatibility with modern messaging systems, ROM cartridges and ID cards. Despite its heavy modifications it does not feature voice communication." - - else - icon = 'icons/obj/pda_old.dmi' - log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") - add_overlay("pda-pen") - start_program(find_program(/datum/data/pda/app/main_menu)) - -/obj/item/device/pda/proc/can_use(mob/user) - return (tgui_status(user, GLOB.tgui_inventory_state) == STATUS_INTERACTIVE) - -/obj/item/device/pda/GetAccess() - if(id) - return id.GetAccess() - else - return ..() - -/obj/item/device/pda/GetID() - return id - -/obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location) - var/mob/M = usr - if((!istype(over_object, /obj/screen)) && can_use(usr)) - return attack_self(M) - return - -/obj/item/device/pda/proc/close(mob/user) - SStgui.close_uis(src) - -/obj/item/device/pda/attack_self(mob/user as mob) - user.set_machine(src) - - if(active_uplink_check(user)) - return - - tgui_interact(user) - return - -/obj/item/device/pda/proc/start_program(datum/data/pda/P) - if(P && ((P in programs) || (cartridge && (P in cartridge.programs)))) - return P.start() - return 0 - -/obj/item/device/pda/proc/find_program(type) - var/datum/data/pda/A = locate(type) in programs - if(A) - return A - if(cartridge) - A = locate(type) in cartridge.programs - if(A) - return A - return null - -// force the cache to rebuild on update_ui -/obj/item/device/pda/proc/update_shortcuts() - shortcut_cache.Cut() - -/obj/item/device/pda/proc/update_programs() - for(var/datum/data/pda/P as anything in programs) - P.pda = src - -/obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P) - //TODO: sometimes these attacks show up on the message server - var/i = rand(1,100) - var/j = rand(0,1) //Possibility of losing the PDA after the detonation - var/message = "" - var/mob/living/M = null - if(ismob(P.loc)) - M = P.loc - - //switch(i) //Yes, the overlapping cases are intended. - if(i<=10) //The traditional explosion - P.explode() - j=1 - message += "Your [P] suddenly explodes!" - if(i>=10 && i<= 20) //The PDA burns a hole in the holder. - j=1 - if(M && isliving(M)) - M.apply_damage( rand(30,60) , BURN) - message += "You feel a searing heat! Your [P] is burning!" - if(i>=20 && i<=25) //EMP - empulse(P.loc, 1, 2, 4, 6, 1) - message += "Your [P] emits a wave of electromagnetic energy!" - if(i>=25 && i<=40) //Smoke - var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem - S.attach(P.loc) - S.set_up(P, 10, 0, P.loc) - playsound(P, 'sound/effects/smoke.ogg', 50, 1, -3) - S.start() - message += "Large clouds of smoke billow forth from your [P]!" - if(i>=40 && i<=45) //Bad smoke - var/datum/effect/effect/system/smoke_spread/bad/B = new /datum/effect/effect/system/smoke_spread/bad - B.attach(P.loc) - B.set_up(P, 10, 0, P.loc) - playsound(P, 'sound/effects/smoke.ogg', 50, 1, -3) - B.start() - message += "Large clouds of noxious smoke billow forth from your [P]!" - if(i>=65 && i<=75) //Weaken - if(M && isliving(M)) - M.apply_effects(0,1) - message += "Your [P] flashes with a blinding white light! You feel weaker." - if(i>=75 && i<=85) //Stun and stutter - if(M && isliving(M)) - M.apply_effects(1,0,0,0,1) - message += "Your [P] flashes with a blinding white light! You feel weaker." - if(i>=85) //Sparks - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, P.loc) - s.start() - message += "Your [P] begins to spark violently!" - if(i>45 && i<65 && prob(50)) //Nothing happens - message += "Your [P] bleeps loudly." - j = prob(10) - - if(j && detonate) //This kills the PDA - qdel(P) - if(message) - message += "It melts in a puddle of plastic." - else - message += "Your [P] shatters in a thousand pieces!" - - if(M && isliving(M)) - message = "[message]" - M.show_message(message, 1) - -/obj/item/device/pda/proc/remove_id() - if (id) - if (ismob(loc)) - var/mob/M = loc - M.put_in_hands(id) - to_chat(usr, "You remove the ID from the [name].") - playsound(src, 'sound/machines/id_swipe.ogg', 100, 1) - else - id.loc = get_turf(src) - cut_overlay("pda-id") - id = null - -/obj/item/device/pda/proc/remove_pen() - var/obj/item/weapon/pen/O = locate() in src - if(O) - if(istype(loc, /mob)) - var/mob/M = loc - if(M.get_active_hand() == null) - M.put_in_hands(O) - to_chat(usr, "You remove \the [O] from \the [src].") - cut_overlay("pda-pen") - return - O.loc = get_turf(src) - else - to_chat(usr, "This PDA does not have a pen in it.") - -/obj/item/device/pda/verb/verb_reset_pda() - set category = "Object" - set name = "Reset PDA" - set src in usr - - if(issilicon(usr)) - return - - if(can_use(usr)) - start_program(find_program(/datum/data/pda/app/main_menu)) - notifying_programs.Cut() - cut_overlay("pda-r") - to_chat(usr, "You press the reset button on \the [src].") - else - to_chat(usr, "You cannot do this while restrained.") - -/obj/item/device/pda/verb/verb_remove_id() - set category = "Object" - set name = "Remove id" - set src in usr - - if(issilicon(usr)) - return - - if ( can_use(usr) ) - if(id) - remove_id() - else - to_chat(usr, "This PDA does not have an ID in it.") - else - to_chat(usr, "You cannot do this while restrained.") - - -/obj/item/device/pda/verb/verb_remove_pen() - set category = "Object" - set name = "Remove pen" - set src in usr - - if(issilicon(usr)) - return - - if ( can_use(usr) ) - remove_pen() - else - to_chat(usr, "You cannot do this while restrained.") - -/obj/item/device/pda/verb/verb_remove_cartridge() - set category = "Object" - set name = "Remove cartridge" - set src in usr - - if(issilicon(usr)) - return - - if(!can_use(usr)) - to_chat(usr, "You cannot do this while restrained.") - return - - if(isnull(cartridge)) - to_chat(usr, "There's no cartridge to eject.") - return - - cartridge.forceMove(get_turf(src)) - if(ismob(loc)) - var/mob/M = loc - M.put_in_hands(cartridge) - // mode = 0 - // scanmode = 0 - if (cartridge.radio) - cartridge.radio.hostpda = null - to_chat(usr, "You remove \the [cartridge] from the [name].") - playsound(src, 'sound/machines/id_swipe.ogg', 100, 1) - cartridge = null - update_programs() - update_shortcuts() - start_program(find_program(/datum/data/pda/app/main_menu)) - - -/obj/item/device/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use. - if(choice == 1) - if (id) - remove_id() - return 1 - else - var/obj/item/I = user.get_active_hand() - if (istype(I, /obj/item/weapon/card/id) && user.unEquip(I)) - I.loc = src - id = I - return 1 - else - var/obj/item/weapon/card/I = user.get_active_hand() - if (istype(I, /obj/item/weapon/card/id) && I:registered_name && user.unEquip(I)) - var/obj/old_id = id - I.loc = src - id = I - user.put_in_hands(old_id) - return 1 - return 0 - -// access to status display signals -/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob) - ..() - if(istype(C, /obj/item/weapon/cartridge) && !cartridge) - cartridge = C - user.drop_item() - cartridge.loc = src - cartridge.update_programs(src) - update_shortcuts() - to_chat(usr, "You insert [cartridge] into [src].") - if(cartridge.radio) - cartridge.radio.hostpda = src - - else if(istype(C, /obj/item/weapon/card/id)) - var/obj/item/weapon/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 - ownrank = idcard.rank - name = "PDA-[owner] ([ownjob])" - to_chat(user, "Card scanned.") - else - //Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand. - if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) ) - if(id_check(user, 2)) - to_chat(user, "You put the ID into \the [src]'s slot.") - add_overlay("pda-id") - 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/device/paicard) && !src.pai) - user.drop_item() - C.loc = src - pai = C - to_chat(user, "You slot \the [C] into \the [src].") - SStgui.update_uis(src) // update all UIs attached to src - else if(istype(C, /obj/item/weapon/pen)) - var/obj/item/weapon/pen/O = locate() in src - if(O) - to_chat(user, "There is already a pen in \the [src].") - else - user.drop_item() - C.loc = src - to_chat(user, "You slot \the [C] into \the [src].") - add_overlay("pda-pen") - return - -/obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob) - if (istype(C, /mob/living/carbon) && scanmode) - scanmode.scan_mob(C, user) - -/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(proximity && scanmode) - scanmode.scan_atom(A, user) - -/obj/item/device/pda/proc/explode() //This needs tuning. //Sure did. - if(!src.detonate) return - var/turf/T = get_turf(src.loc) - if(T) - T.hotspot_expose(700,125) - explosion(T, 0, 0, 1, rand(1,2)) - return - -/obj/item/device/pda/Destroy() - PDAs -= src - if (src.id && !delete_id && src.id.loc == src) //CHOMPEdit - src.id.forceMove(get_turf(src.loc)) - else - QDEL_NULL(src.id) - - current_app = null - scanmode = null - QDEL_NULL(pai) - QDEL_LIST(programs) - QDEL_NULL(cartridge) - return ..() - -//Some spare PDAs in a box -/obj/item/weapon/storage/box/PDAs - name = "box of spare PDAs" - desc = "A box of spare PDA microcomputers." - icon = 'icons/obj/pda_vr.dmi' //VOREStation edit - icon_state = "pdabox" - -/obj/item/weapon/storage/box/PDAs/New() - ..() - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/weapon/cartridge/head(src) - - var/newcart = pick( /obj/item/weapon/cartridge/engineering, - /obj/item/weapon/cartridge/security, - /obj/item/weapon/cartridge/medical, - /obj/item/weapon/cartridge/signal/science, - /obj/item/weapon/cartridge/quartermaster) - new newcart(src) - -// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP -/obj/item/device/pda/emp_act(severity) - for(var/atom/A in src) - A.emp_act(severity) + +//The advanced pea-green monochrome lcd of tomorrow. + +var/global/list/obj/item/device/pda/PDAs = list() + +/obj/item/device/pda + name = "\improper PDA" + desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." + icon = 'icons/obj/pda_vr.dmi' //VOREStation edit + icon_state = "pda" + item_state = "electronic" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_ID | SLOT_BELT + sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/id.dmi') + + //Main variables + var/pdachoice = 1 + var/owner = null + var/default_cartridge = 0 // Access level defined by cartridge + var/obj/item/weapon/cartridge/cartridge = null //current cartridge + + //Secondary variables + var/model_name = "Thinktronic 5230 Personal Data Assistant" + var/datum/data/pda/utility/scanmode/scanmode = null + + var/lock_code = "" // Lockcode to unlock uplink + var/honkamt = 0 //How many honks left when infected with honk.exe + var/mimeamt = 0 //How many silence left when infected with mime.exe + var/detonate = 1 // Can the PDA be blown up? + var/ttone = "beep" //The ringtone! + var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg', + "boom" = 'sound/effects/explosionfar.ogg', + "slip" = 'sound/misc/slip.ogg', + "honk" = 'sound/items/bikehorn.ogg', + "SKREE" = 'sound/voice/shriek1.ogg', + "xeno" = 'sound/voice/hiss1.ogg', + "dust" = 'sound/effects/supermatter.ogg', // CHOMPEdit - Keeps dust as ringtone + "spark" = 'sound/effects/sparks4.ogg', + "rad" = 'sound/items/geiger/high1.ogg', + "servo" = 'sound/machines/rig/rigservo.ogg', + // "buh-boop" = 'sound/misc/buh-boop.ogg', // CHOMPEdit - No. + "trombone" = 'sound/misc/sadtrombone.ogg', + "whistle" = 'sound/misc/boatswain.ogg', + "chirp" = 'sound/misc/nymphchirp.ogg', + "slurp" = 'sound/items/drink.ogg', + "pwing" = 'sound/items/nif_tone_good.ogg', + "clack" = 'sound/items/storage/toolbox.ogg', + "bzzt" = 'sound/misc/null.ogg', //vibrate mode + "chimes" = 'sound/misc/notice3.ogg', + "prbt" = 'sound/voice/prbt.ogg', + "bark" = 'sound/voice/bark2.ogg', + "bork" = 'sound/voice/bork.ogg', + "roark" = 'sound/voice/roarbark.ogg', + "chitter" = 'sound/voice/moth/moth_chitter.ogg', + "squish" = 'sound/effects/slime_squish.ogg') + var/hidden = 0 // Is the PDA hidden from the PDA list? + var/touch_silent = 0 //If 1, no beeps on interacting. + + var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. + var/ownjob = null //related to above - this is assignment (potentially alt title) + var/ownrank = null // this one is rank, never alt title + + var/obj/item/device/paicard/pai = null // A slot for a personal AI device + + var/spam_proof = FALSE // If true, it can't be spammed by random events. + + var/datum/data/pda/app/current_app = null + var/datum/data/pda/app/lastapp = null + var/list/programs = list( + new/datum/data/pda/app/main_menu, + new/datum/data/pda/app/notekeeper, + new/datum/data/pda/app/news, + new/datum/data/pda/app/messenger, + new/datum/data/pda/app/manifest, + new/datum/data/pda/app/atmos_scanner, + new/datum/data/pda/utility/scanmode/notes, + new/datum/data/pda/utility/flashlight) + var/list/shortcut_cache = list() + var/list/shortcut_cat_order = list() + var/list/notifying_programs = list() + var/retro_mode = 0 + +/obj/item/device/pda/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "The time [stationtime2text()] is displayed in the corner of the screen." + +/obj/item/device/pda/CtrlClick() + if(issilicon(usr)) + return + + if(can_use(usr)) + remove_pen() + return + ..() + +/obj/item/device/pda/AltClick() + if(issilicon(usr)) + return + + if ( can_use(usr) ) + if(id) + remove_id() + else + to_chat(usr, "This PDA does not have an ID in it.") + +/obj/item/device/pda/proc/play_ringtone() + var/S + + if(ttone in ttone_sound) + S = ttone_sound[ttone] + else + S = 'sound/machines/twobeep.ogg' + playsound(loc, S, 50, 1) + for(var/mob/O in hearers(3, loc)) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) + +/obj/item/device/pda/proc/set_ringtone() + var/t = tgui_input_text(usr, "Please enter new ringtone", name, ttone) + if(in_range(src, usr) && loc == usr) + if(t) + if(hidden_uplink && hidden_uplink.check_trigger(usr, lowertext(t), lowertext(lock_code))) + to_chat(usr, "The PDA softly beeps.") + close(usr) + else + t = sanitize(copytext(t, 1, 20)) + ttone = t + return 1 + else + close(usr) + return 0 + +/obj/item/device/pda/New(var/mob/living/carbon/human/H) + ..() + PDAs += src + PDAs = sortAtom(PDAs) + update_programs() + if(default_cartridge) + cartridge = new default_cartridge(src) + cartridge.update_programs(src) + new /obj/item/weapon/pen(src) + pdachoice = isnull(H) ? 1 : (ishuman(H) ? H.pdachoice : 1) + switch(pdachoice) + if(1) icon = 'icons/obj/pda_vr.dmi' //VOREStation edit + if(2) icon = 'icons/obj/pda_slim.dmi' + if(3) icon = 'icons/obj/pda_old.dmi' + if(4) icon = 'icons/obj/pda_rugged.dmi' + if(5) icon = 'icons/obj/pda_holo.dmi' + if(6) + icon = 'icons/obj/pda_wrist.dmi' + item_state = icon_state + item_icons = list( + slot_belt_str = 'icons/mob/pda_wrist.dmi', + slot_wear_id_str = 'icons/mob/pda_wrist.dmi', + slot_gloves_str = 'icons/mob/pda_wrist.dmi' + ) + desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a wrist-bound version." + slot_flags = SLOT_ID | SLOT_BELT | SLOT_GLOVES + sprite_sheets = list( + SPECIES_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi', + SPECIES_VR_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi', + ) + if(7) icon = 'icons/obj/pda_slider.dmi' //VOREStation edit + if(8) + icon = 'icons/obj/pda_vintage.dmi' + desc = "A vintage communication device. This device has been refitted for compatibility with modern messaging systems, ROM cartridges and ID cards. Despite its heavy modifications it does not feature voice communication." + + else + icon = 'icons/obj/pda_old.dmi' + log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") + add_overlay("pda-pen") + start_program(find_program(/datum/data/pda/app/main_menu)) + +/obj/item/device/pda/proc/can_use(mob/user) + return (tgui_status(user, GLOB.tgui_inventory_state) == STATUS_INTERACTIVE) + +/obj/item/device/pda/GetAccess() + if(id) + return id.GetAccess() + else + return ..() + +/obj/item/device/pda/GetID() + return id + +/obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location) + var/mob/M = usr + if((!istype(over_object, /obj/screen)) && can_use(usr)) + return attack_self(M) + return + +/obj/item/device/pda/proc/close(mob/user) + SStgui.close_uis(src) + +/obj/item/device/pda/attack_self(mob/user as mob) + user.set_machine(src) + + if(active_uplink_check(user)) + return + + tgui_interact(user) + return + +/obj/item/device/pda/proc/start_program(datum/data/pda/P) + if(P && ((P in programs) || (cartridge && (P in cartridge.programs)))) + return P.start() + return 0 + +/obj/item/device/pda/proc/find_program(type) + var/datum/data/pda/A = locate(type) in programs + if(A) + return A + if(cartridge) + A = locate(type) in cartridge.programs + if(A) + return A + return null + +// force the cache to rebuild on update_ui +/obj/item/device/pda/proc/update_shortcuts() + shortcut_cache.Cut() + +/obj/item/device/pda/proc/update_programs() + for(var/datum/data/pda/P as anything in programs) + P.pda = src + +/obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P) + //TODO: sometimes these attacks show up on the message server + var/i = rand(1,100) + var/j = rand(0,1) //Possibility of losing the PDA after the detonation + var/message = "" + var/mob/living/M = null + if(ismob(P.loc)) + M = P.loc + + //switch(i) //Yes, the overlapping cases are intended. + if(i<=10) //The traditional explosion + P.explode() + j=1 + message += "Your [P] suddenly explodes!" + if(i>=10 && i<= 20) //The PDA burns a hole in the holder. + j=1 + if(M && isliving(M)) + M.apply_damage( rand(30,60) , BURN) + message += "You feel a searing heat! Your [P] is burning!" + if(i>=20 && i<=25) //EMP + empulse(P.loc, 1, 2, 4, 6, 1) + message += "Your [P] emits a wave of electromagnetic energy!" + if(i>=25 && i<=40) //Smoke + var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem + S.attach(P.loc) + S.set_up(P, 10, 0, P.loc) + playsound(P, 'sound/effects/smoke.ogg', 50, 1, -3) + S.start() + message += "Large clouds of smoke billow forth from your [P]!" + if(i>=40 && i<=45) //Bad smoke + var/datum/effect/effect/system/smoke_spread/bad/B = new /datum/effect/effect/system/smoke_spread/bad + B.attach(P.loc) + B.set_up(P, 10, 0, P.loc) + playsound(P, 'sound/effects/smoke.ogg', 50, 1, -3) + B.start() + message += "Large clouds of noxious smoke billow forth from your [P]!" + if(i>=65 && i<=75) //Weaken + if(M && isliving(M)) + M.apply_effects(0,1) + message += "Your [P] flashes with a blinding white light! You feel weaker." + if(i>=75 && i<=85) //Stun and stutter + if(M && isliving(M)) + M.apply_effects(1,0,0,0,1) + message += "Your [P] flashes with a blinding white light! You feel weaker." + if(i>=85) //Sparks + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, P.loc) + s.start() + message += "Your [P] begins to spark violently!" + if(i>45 && i<65 && prob(50)) //Nothing happens + message += "Your [P] bleeps loudly." + j = prob(10) + + if(j && detonate) //This kills the PDA + qdel(P) + if(message) + message += "It melts in a puddle of plastic." + else + message += "Your [P] shatters in a thousand pieces!" + + if(M && isliving(M)) + message = "[message]" + M.show_message(message, 1) + +/obj/item/device/pda/proc/remove_id() + if (id) + if (ismob(loc)) + var/mob/M = loc + M.put_in_hands(id) + to_chat(usr, "You remove the ID from the [name].") + playsound(src, 'sound/machines/id_swipe.ogg', 100, 1) + else + id.loc = get_turf(src) + cut_overlay("pda-id") + id = null + +/obj/item/device/pda/proc/remove_pen() + var/obj/item/weapon/pen/O = locate() in src + if(O) + if(istype(loc, /mob)) + var/mob/M = loc + if(M.get_active_hand() == null) + M.put_in_hands(O) + to_chat(usr, "You remove \the [O] from \the [src].") + cut_overlay("pda-pen") + return + O.loc = get_turf(src) + else + to_chat(usr, "This PDA does not have a pen in it.") + +/obj/item/device/pda/verb/verb_reset_pda() + set category = "Object" + set name = "Reset PDA" + set src in usr + + if(issilicon(usr)) + return + + if(can_use(usr)) + start_program(find_program(/datum/data/pda/app/main_menu)) + notifying_programs.Cut() + cut_overlay("pda-r") + to_chat(usr, "You press the reset button on \the [src].") + else + to_chat(usr, "You cannot do this while restrained.") + +/obj/item/device/pda/verb/verb_remove_id() + set category = "Object" + set name = "Remove id" + set src in usr + + if(issilicon(usr)) + return + + if ( can_use(usr) ) + if(id) + remove_id() + else + to_chat(usr, "This PDA does not have an ID in it.") + else + to_chat(usr, "You cannot do this while restrained.") + + +/obj/item/device/pda/verb/verb_remove_pen() + set category = "Object" + set name = "Remove pen" + set src in usr + + if(issilicon(usr)) + return + + if ( can_use(usr) ) + remove_pen() + else + to_chat(usr, "You cannot do this while restrained.") + +/obj/item/device/pda/verb/verb_remove_cartridge() + set category = "Object" + set name = "Remove cartridge" + set src in usr + + if(issilicon(usr)) + return + + if(!can_use(usr)) + to_chat(usr, "You cannot do this while restrained.") + return + + if(isnull(cartridge)) + to_chat(usr, "There's no cartridge to eject.") + return + + cartridge.forceMove(get_turf(src)) + if(ismob(loc)) + var/mob/M = loc + M.put_in_hands(cartridge) + // mode = 0 + // scanmode = 0 + if (cartridge.radio) + cartridge.radio.hostpda = null + to_chat(usr, "You remove \the [cartridge] from the [name].") + playsound(src, 'sound/machines/id_swipe.ogg', 100, 1) + cartridge = null + update_programs() + update_shortcuts() + start_program(find_program(/datum/data/pda/app/main_menu)) + + +/obj/item/device/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use. + if(choice == 1) + if (id) + remove_id() + return 1 + else + var/obj/item/I = user.get_active_hand() + if (istype(I, /obj/item/weapon/card/id) && user.unEquip(I)) + I.loc = src + id = I + return 1 + else + var/obj/item/weapon/card/I = user.get_active_hand() + if (istype(I, /obj/item/weapon/card/id) && I:registered_name && user.unEquip(I)) + var/obj/old_id = id + I.loc = src + id = I + user.put_in_hands(old_id) + return 1 + return 0 + +// access to status display signals +/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob) + ..() + if(istype(C, /obj/item/weapon/cartridge) && !cartridge) + cartridge = C + user.drop_item() + cartridge.loc = src + cartridge.update_programs(src) + update_shortcuts() + to_chat(usr, "You insert [cartridge] into [src].") + if(cartridge.radio) + cartridge.radio.hostpda = src + + else if(istype(C, /obj/item/weapon/card/id)) + var/obj/item/weapon/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 + ownrank = idcard.rank + name = "PDA-[owner] ([ownjob])" + to_chat(user, "Card scanned.") + else + //Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand. + if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) ) + if(id_check(user, 2)) + to_chat(user, "You put the ID into \the [src]'s slot.") + add_overlay("pda-id") + 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/device/paicard) && !src.pai) + user.drop_item() + C.loc = src + pai = C + to_chat(user, "You slot \the [C] into \the [src].") + SStgui.update_uis(src) // update all UIs attached to src + else if(istype(C, /obj/item/weapon/pen)) + var/obj/item/weapon/pen/O = locate() in src + if(O) + to_chat(user, "There is already a pen in \the [src].") + else + user.drop_item() + C.loc = src + to_chat(user, "You slot \the [C] into \the [src].") + add_overlay("pda-pen") + return + +/obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob) + if (istype(C, /mob/living/carbon) && scanmode) + scanmode.scan_mob(C, user) + +/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) + if(proximity && scanmode) + scanmode.scan_atom(A, user) + +/obj/item/device/pda/proc/explode() //This needs tuning. //Sure did. + if(!src.detonate) return + var/turf/T = get_turf(src.loc) + if(T) + T.hotspot_expose(700,125) + explosion(T, 0, 0, 1, rand(1,2)) + return + +/obj/item/device/pda/Destroy() + PDAs -= src + if (src.id && !delete_id && src.id.loc == src) //CHOMPEdit + src.id.forceMove(get_turf(src.loc)) + else + QDEL_NULL(src.id) + + current_app = null + scanmode = null + QDEL_NULL(pai) + QDEL_LIST(programs) + QDEL_NULL(cartridge) + return ..() + +//Some spare PDAs in a box +/obj/item/weapon/storage/box/PDAs + name = "box of spare PDAs" + desc = "A box of spare PDA microcomputers." + icon = 'icons/obj/pda_vr.dmi' //VOREStation edit + icon_state = "pdabox" + +/obj/item/weapon/storage/box/PDAs/New() + ..() + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/weapon/cartridge/head(src) + + var/newcart = pick( /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/signal/science, + /obj/item/weapon/cartridge/quartermaster) + new newcart(src) + +// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP +/obj/item/device/pda/emp_act(severity) + for(var/atom/A in src) + A.emp_act(severity) diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm index 5a51c677f0..87177c18e3 100644 --- a/code/modules/pda/radio.dm +++ b/code/modules/pda/radio.dm @@ -1,136 +1,136 @@ -/obj/item/radio/integrated - name = "\improper PDA radio module" - desc = "An electronic radio system." - icon = 'icons/obj/module.dmi' - icon_state = "power_mod" - var/obj/item/device/pda/hostpda = null - - var/list/botlist = null // list of bots - var/mob/living/bot/active // the active bot; if null, show bot list - var/list/botstatus // the status signal sent by the bot - - var/bot_type //The type of bot it is. - var/bot_filter //Determines which radio filter to use. - - var/control_freq = BOT_FREQ - - var/on = 0 //Are we currently active?? - var/menu_message = "" - -/obj/item/radio/integrated/New() - ..() - if(istype(loc.loc, /obj/item/device/pda)) - hostpda = loc.loc - if(bot_filter) - spawn(5) - add_to_radio(bot_filter) - -/obj/item/radio/integrated/Destroy() - if(radio_controller) - radio_controller.remove_object(src, control_freq) - hostpda = null - return ..() - -/obj/item/radio/integrated/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter) - - //to_world("Post: [freq]: [key]=[value], [key2]=[value2]") - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) - - if(!frequency) - return - - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = TRANSMISSION_RADIO - signal.data[key] = value - if(key2) - signal.data[key2] = value2 - if(key3) - signal.data[key3] = value3 - - frequency.post_signal(src, signal, radio_filter = s_filter) - -/obj/item/radio/integrated/Topic(href, href_list) - ..() - switch(href_list["op"]) - if("control") - active = locate(href_list["bot"]) - spawn(0) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) - - if("scanbots") // find all bots - botlist = null - spawn(0) - post_signal(control_freq, "command", "bot_status", s_filter = bot_filter) - - if("botlist") - active = null - - if("stop", "go", "home") - spawn(0) - post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = bot_filter) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) - - if("summon") - spawn(0) - post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(hostpda), "useraccess", hostpda.GetAccess(), "user", usr, s_filter = bot_filter) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) - -/obj/item/radio/integrated/receive_signal(datum/signal/signal) - if(bot_type && istype(signal.source, /mob/living/bot) && signal.data["type"] == bot_type) - if(!botlist) - botlist = new() - - botlist |= signal.source - - if(active == signal.source) - var/list/b = signal.data - botstatus = b.Copy() - -/obj/item/radio/integrated/proc/add_to_radio(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. - if(radio_controller) - radio_controller.add_object(src, control_freq, radio_filter = bot_filter) - -/* - * Radio Cartridge, essentially a signaler. - */ -/obj/item/radio/integrated/signal - var/frequency = 1457 - var/code = 30.0 - var/last_transmission - var/datum/radio_frequency/radio_connection - -/obj/item/radio/integrated/signal/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - radio_connection = null - return ..() - -/obj/item/radio/integrated/signal/Initialize() - . = ..() - if(radio_controller) - if(src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) - src.frequency = sanitize_frequency(src.frequency) - set_frequency(frequency) - -/obj/item/radio/integrated/signal/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency) - -/obj/item/radio/integrated/signal/proc/send_signal(message="ACTIVATE") - 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) - lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") - - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = message - - spawn(0) - radio_connection.post_signal(src, signal) +/obj/item/radio/integrated + name = "\improper PDA radio module" + desc = "An electronic radio system." + icon = 'icons/obj/module.dmi' + icon_state = "power_mod" + var/obj/item/device/pda/hostpda = null + + var/list/botlist = null // list of bots + var/mob/living/bot/active // the active bot; if null, show bot list + var/list/botstatus // the status signal sent by the bot + + var/bot_type //The type of bot it is. + var/bot_filter //Determines which radio filter to use. + + var/control_freq = BOT_FREQ + + var/on = 0 //Are we currently active?? + var/menu_message = "" + +/obj/item/radio/integrated/New() + ..() + if(istype(loc.loc, /obj/item/device/pda)) + hostpda = loc.loc + if(bot_filter) + spawn(5) + add_to_radio(bot_filter) + +/obj/item/radio/integrated/Destroy() + if(radio_controller) + radio_controller.remove_object(src, control_freq) + hostpda = null + return ..() + +/obj/item/radio/integrated/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter) + + //to_world("Post: [freq]: [key]=[value], [key2]=[value2]") + var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + + if(!frequency) + return + + var/datum/signal/signal = new() + signal.source = src + signal.transmission_method = TRANSMISSION_RADIO + signal.data[key] = value + if(key2) + signal.data[key2] = value2 + if(key3) + signal.data[key3] = value3 + + frequency.post_signal(src, signal, radio_filter = s_filter) + +/obj/item/radio/integrated/Topic(href, href_list) + ..() + switch(href_list["op"]) + if("control") + active = locate(href_list["bot"]) + spawn(0) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + + if("scanbots") // find all bots + botlist = null + spawn(0) + post_signal(control_freq, "command", "bot_status", s_filter = bot_filter) + + if("botlist") + active = null + + if("stop", "go", "home") + spawn(0) + post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = bot_filter) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + + if("summon") + spawn(0) + post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(hostpda), "useraccess", hostpda.GetAccess(), "user", usr, s_filter = bot_filter) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + +/obj/item/radio/integrated/receive_signal(datum/signal/signal) + if(bot_type && istype(signal.source, /mob/living/bot) && signal.data["type"] == bot_type) + if(!botlist) + botlist = new() + + botlist |= signal.source + + if(active == signal.source) + var/list/b = signal.data + botstatus = b.Copy() + +/obj/item/radio/integrated/proc/add_to_radio(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. + if(radio_controller) + radio_controller.add_object(src, control_freq, radio_filter = bot_filter) + +/* + * Radio Cartridge, essentially a signaler. + */ +/obj/item/radio/integrated/signal + var/frequency = 1457 + var/code = 30.0 + var/last_transmission + var/datum/radio_frequency/radio_connection + +/obj/item/radio/integrated/signal/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + radio_connection = null + return ..() + +/obj/item/radio/integrated/signal/Initialize() + . = ..() + if(radio_controller) + if(src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) + src.frequency = sanitize_frequency(src.frequency) + set_frequency(frequency) + +/obj/item/radio/integrated/signal/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency) + +/obj/item/radio/integrated/signal/proc/send_signal(message="ACTIVATE") + 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) + lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") + + var/datum/signal/signal = new + signal.source = src + signal.encryption = code + signal.data["message"] = message + + spawn(0) + radio_connection.post_signal(src, signal) diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm index 678285c12b..2c9f8f5c47 100644 --- a/code/modules/planet/virgo4_vr.dm +++ b/code/modules/planet/virgo4_vr.dm @@ -1,614 +1,614 @@ -var/datum/planet/virgo4/planet_virgo4 = null - -/datum/time/virgo4 - seconds_in_day = 24 HOURS - -/datum/planet/virgo4 - name = "Virgo-4" - desc = "Zorren homeworld. Mostly dry and desolate, but ocean and fresh water are present, with scattered vegitation." //rewrite me - current_time = new /datum/time/virgo4() -// expected_z_levels = list(1) // This is defined elsewhere. - planetary_wall_type = /turf/unsimulated/wall/planetary/normal/virgo4 - -/datum/planet/virgo4/New() - ..() - planet_virgo4 = src - weather_holder = new /datum/weather_holder/virgo4(src) - -/datum/planet/virgo4/update_sun() - ..() - var/datum/time/time = current_time - var/length_of_day = time.seconds_in_day / 10 / 60 / 60 - var/noon = length_of_day / 2 - var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon) - sun_position = distance_from_noon / noon - sun_position = abs(sun_position - 1) - - var/low_brightness = null - var/high_brightness = null - - var/low_color = null - var/high_color = null - var/min = 0 - - switch(sun_position) - if(0 to 0.20) // Night - low_brightness = 0.3 - low_color = "#000066" - - high_brightness = 0.5 - high_color = "#66004D" - min = 0 - - if(0.20 to 0.30) // Twilight - low_brightness = 0.5 - low_color = "#66004D" - - high_brightness = 0.9 - high_color = "#CC3300" - min = 0.40 - - if(0.30 to 0.40) // Sunrise/set - low_brightness = 0.9 - low_color = "#CC3300" - - high_brightness = 3.0 - high_color = "#FF9933" - min = 0.50 - - if(0.40 to 1.00) // Noon - low_brightness = 3.0 - low_color = "#DDDDDD" - - high_brightness = 10.0 - high_color = "#FFFFFF" - min = 0.70 - - var/interpolate_weight = (abs(min - sun_position)) * 4 - var/weather_light_modifier = 1 - if(weather_holder && weather_holder.current_weather) - weather_light_modifier = weather_holder.current_weather.light_modifier - - var/new_brightness = (LERP(low_brightness, high_brightness, interpolate_weight) ) * weather_light_modifier - - var/new_color = null - if(weather_holder && weather_holder.current_weather && weather_holder.current_weather.light_color) - new_color = weather_holder.current_weather.light_color - else - var/list/low_color_list = hex2rgb(low_color) - var/low_r = low_color_list[1] - var/low_g = low_color_list[2] - var/low_b = low_color_list[3] - - var/list/high_color_list = hex2rgb(high_color) - var/high_r = high_color_list[1] - var/high_g = high_color_list[2] - var/high_b = high_color_list[3] - - var/new_r = LERP(low_r, high_r, interpolate_weight) - var/new_g = LERP(low_g, high_g, interpolate_weight) - var/new_b = LERP(low_b, high_b, interpolate_weight) - - new_color = rgb(new_r, new_g, new_b) - - spawn(1) - update_sun_deferred(new_brightness, new_color) - - -/datum/weather_holder/virgo4 - temperature = T0C - allowed_weather_types = list( - WEATHER_CLEAR = new /datum/weather/virgo4/clear(), - WEATHER_OVERCAST = new /datum/weather/virgo4/overcast(), - WEATHER_LIGHT_SNOW = new /datum/weather/virgo4/light_snow(), - WEATHER_SNOW = new /datum/weather/virgo4/snow(), - WEATHER_BLIZZARD = new /datum/weather/virgo4/blizzard(), - WEATHER_RAIN = new /datum/weather/virgo4/rain(), - WEATHER_STORM = new /datum/weather/virgo4/storm(), - WEATHER_HAIL = new /datum/weather/virgo4/hail(), - WEATHER_FOG = new /datum/weather/virgo4/fog(), - WEATHER_BLOOD_MOON = new /datum/weather/virgo4/blood_moon(), - WEATHER_EMBERFALL = new /datum/weather/virgo4/emberfall(), - WEATHER_ASH_STORM = new /datum/weather/virgo4/ash_storm(), - WEATHER_ASH_STORM_SAFE = new /datum/weather/virgo4/ash_storm_safe(), - WEATHER_FALLOUT = new /datum/weather/virgo4/fallout(), - WEATHER_FALLOUT_TEMP = new /datum/weather/virgo4/fallout/temp(), - WEATHER_CONFETTI = new /datum/weather/virgo4/confetti() - ) - roundstart_weather_chances = list( - WEATHER_CLEAR = 50, - WEATHER_OVERCAST = 10, - WEATHER_RAIN = 1 - ) - -/datum/weather/virgo4 - name = "virgo4" - temp_high = 303.15 // 30c - temp_low = 298.15 // 25c - -/datum/weather/virgo4/clear - name = "clear" - transition_chances = list( - WEATHER_CLEAR = 60, - WEATHER_OVERCAST = 20) - transition_messages = list( - "The sky clears up.", - "The sky is visible.", - "The weather is calm." - ) - sky_visible = TRUE - observed_message = "The sky is clear." - imminent_transition_message = "The sky is rapidly clearing up." - -/datum/weather/virgo4/overcast - name = "overcast" - temp_high = 293.15 // 20c - temp_low = 288.15 // 15c - light_modifier = 0.8 - transition_chances = list( - WEATHER_CLEAR = 25, - WEATHER_OVERCAST = 50, - WEATHER_RAIN = 5 - ) - observed_message = "It is overcast, all you can see are clouds." - transition_messages = list( - "All you can see above are clouds.", - "Clouds cut off your view of the sky.", - "It's very cloudy." - ) - imminent_transition_message = "Benign clouds are quickly gathering." - -/datum/weather/virgo4/light_snow - name = "light snow" - icon_state = "snowfall_light" - temp_high = 268.15 // -5c - temp_low = 263.15 // -10c - light_modifier = 0.7 - transition_chances = list( - WEATHER_LIGHT_SNOW = 15, - WEATHER_OVERCAST = 80 - ) - observed_message = "It is snowing lightly." - transition_messages = list( - "Small snowflakes begin to fall from above.", - "It begins to snow lightly.", - ) - imminent_transition_message = "It appears a light snow is about to start." - -/datum/weather/virgo4/snow - name = "moderate snow" - icon_state = "snowfall_med" - temp_high = 268.15 // -5c - temp_low = 263.15 // -10c - wind_high = 2 - wind_low = 0 - light_modifier = 0.5 - flight_failure_modifier = 5 - transition_chances = list( - WEATHER_SNOW = 10, - WEATHER_LIGHT_SNOW = 80 - ) - observed_message = "It is snowing." - transition_messages = list( - "It's starting to snow.", - "The air feels much colder as snowflakes fall from above." - ) - imminent_transition_message = "A snowfall is starting." - outdoor_sounds_type = /datum/looping_sound/weather/outside_snow - indoor_sounds_type = /datum/looping_sound/weather/inside_snow - -/* -/datum/weather/virgo4/snow/process_effects() - ..() - for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either - if(S.z in holder.our_planet.expected_z_levels) - for(var/dir_checked in cardinal) - var/turf/simulated/floor/T = get_step(S, dir_checked) - if(istype(T)) - if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) - T.chill() -*/ - -/datum/weather/virgo4/blizzard - name = "blizzard" - icon_state = "snowfall_heavy" - temp_high = 268.15 // -5c - temp_low = 263.15 // -10c - wind_high = 4 - wind_low = 2 - light_modifier = 0.3 - flight_failure_modifier = 10 - transition_chances = list( - WEATHER_BLIZZARD = 5, - WEATHER_SNOW = 80 - ) - observed_message = "A blizzard blows snow everywhere." - transition_messages = list( - "Strong winds howl around you as a blizzard appears.", - "It starts snowing heavily, and it feels extremly cold now." - ) - imminent_transition_message = "Wind is howling. Blizzard is coming." - outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard - indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard - -/* -/datum/weather/virgo4/blizzard/process_effects() - ..() - for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either - if(S.z in holder.our_planet.expected_z_levels) - for(var/dir_checked in cardinal) - var/turf/simulated/floor/T = get_step(S, dir_checked) - if(istype(T)) - if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) - T.chill() -*/ - -/datum/weather/virgo4/rain - name = "rain" - icon_state = "rain" - temp_high = 288.15 // 15c - temp_low = 283.15 // 10c - wind_high = 2 - wind_low = 1 - light_modifier = 0.5 - effect_message = "Rain falls on you." - - transition_chances = list( - WEATHER_OVERCAST = 25, - WEATHER_RAIN = 50 - ) - observed_message = "It is raining." - transition_messages = list( - "The sky is dark, and rain falls down upon you." - ) - imminent_transition_message = "Light drips of water are starting to fall from the sky." - outdoor_sounds_type = /datum/looping_sound/weather/rain - indoor_sounds_type = /datum/looping_sound/weather/rain/indoors - -/datum/weather/virgo4/rain/process_effects() - ..() - for(var/mob/living/L as anything in living_mob_list) - if(L.z in holder.our_planet.expected_z_levels) - var/turf/T = get_turf(L) - if(!T.is_outdoors()) - continue // They're indoors, so no need to rain on them. - - // If they have an open umbrella, it'll guard from rain - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(!istype(U) || !U.open) - U = L.get_inactive_hand() - - if(istype(U) && U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue - - L.water_act(1) - if(show_message) - to_chat(L, effect_message) - -/datum/weather/virgo4/storm - name = "storm" - icon_state = "storm" - wind_high = 4 - wind_low = 2 - light_modifier = 0.3 - flight_failure_modifier = 10 - effect_message = "Rain falls on you, drenching you in water." - - var/next_lightning_strike = 0 // world.time when lightning will strike. - var/min_lightning_cooldown = 5 SECONDS - var/max_lightning_cooldown = 1 MINUTE - observed_message = "An intense storm pours down over the region." - transition_messages = list( - "You feel intense winds hit you as the weather takes a turn for the worst.", - "Loud thunder is heard in the distance.", - "A bright flash heralds the approach of a storm." - ) - imminent_transition_message = "You can hear distant thunder. Storm is coming." - outdoor_sounds_type = /datum/looping_sound/weather/rain - indoor_sounds_type = /datum/looping_sound/weather/rain/indoors - - - transition_chances = list( - WEATHER_STORM = 10, - WEATHER_RAIN = 80 - ) - -/datum/weather/virgo4/storm/process_effects() - ..() - for(var/mob/living/L as anything in living_mob_list) - if(L.z in holder.our_planet.expected_z_levels) - var/turf/T = get_turf(L) - if(!T.is_outdoors()) - continue // They're indoors, so no need to rain on them. - - // If they have an open umbrella, it'll guard from rain - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(!istype(U) || !U.open) - U = L.get_inactive_hand() - - if(istype(U) && U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue - - - L.water_act(2) - if(show_message) - to_chat(L, effect_message) - - handle_lightning() - -// This gets called to do lightning periodically. -// There is a seperate function to do the actual lightning strike, so that badmins can play with it. -/datum/weather/virgo4/storm/proc/handle_lightning() - if(world.time < next_lightning_strike) - return // It's too soon to strike again. - next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown) - var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots. - lightning_strike(T) - -/datum/weather/virgo4/hail - name = "hail" - icon_state = "hail" - light_modifier = 0.3 - flight_failure_modifier = 15 - timer_low_bound = 2 - timer_high_bound = 5 - effect_message = "The hail smacks into you!" - - transition_chances = list( - WEATHER_HAIL = 10, - WEATHER_SNOW = 40, - WEATHER_RAIN = 40 - ) - observed_message = "Ice is falling from the sky." - transition_messages = list( - "Ice begins to fall from the sky.", - "It begins to hail.", - "An intense chill is felt, and chunks of ice start to fall from the sky, towards you." - ) - imminent_transition_message = "Small bits of ice are falling from the sky, growing larger by the second. Hail is starting, get to cover!" - -/datum/weather/virgo4/hail/process_effects() - ..() - for(var/mob/living/carbon/H as anything in human_mob_list) - if(H.z in holder.our_planet.expected_z_levels) - var/turf/T = get_turf(H) - if(!T.is_outdoors()) - continue // They're indoors, so no need to pelt them with ice. - - // If they have an open umbrella, it'll guard from hail - var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() - if(!istype(U) || !U.open) - U = H.get_inactive_hand() - - if(istype(U) && U.open) - if(show_message) - to_chat(H, "Hail patters onto your umbrella.") - continue - - var/target_zone = pick(BP_ALL) - var/amount_blocked = H.run_armor_check(target_zone, "melee") - var/amount_soaked = H.get_armor_soak(target_zone, "melee") - - var/damage = rand(1,3) - - if(amount_blocked >= 30) - continue // No need to apply damage. Hardhats are 30. They should probably protect you from hail on your head. - //Voidsuits are likewise 40, and riot, 80. Clothes are all less than 30. - - if(amount_soaked >= damage) - continue // No need to apply damage. - - H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail") - if(show_message) - to_chat(H, effect_message) - -/datum/weather/virgo4/fog - name = "fog" - icon_state = "fog" - wind_high = 1 - wind_low = 0 - light_modifier = 0.7 - - temp_high = 283.15 // 10c - temp_low = 273.15 // 0c - - transition_chances = list( - WEATHER_FOG = 10, - WEATHER_OVERCAST = 15 - ) - observed_message = "A fogbank has rolled over the region." - transition_messages = list( - "Fog rolls in.", - "Visibility falls as the air becomes dense.", - "The clouds drift lower, as if to smother the forests." - ) - imminent_transition_message = "Clouds are drifting down as the area is getting foggy." - outdoor_sounds_type = /datum/looping_sound/weather/wind - indoor_sounds_type = /datum/looping_sound/weather/wind/indoors - -/datum/weather/virgo4/blood_moon - name = "blood moon" - light_modifier = 0.5 - light_color = "#FF0000" - temp_high = 293.15 // 20c - temp_low = 283.15 // 10c - flight_failure_modifier = 25 - transition_chances = list( - WEATHER_BLOOD_MOON = 100 - ) - observed_message = "Everything is red. Something really ominous is going on." - transition_messages = list( - "The sky turns blood red!" - ) - imminent_transition_message = "The sky is turning red. Blood Moon is starting." - outdoor_sounds_type = /datum/looping_sound/weather/wind - indoor_sounds_type = /datum/looping_sound/weather/wind/indoors - -// Ash and embers fall forever, such as from a volcano or something. -/datum/weather/virgo4/emberfall - name = "emberfall" - icon_state = "ashfall_light" - light_modifier = 0.7 - light_color = "#880000" - temp_high = 293.15 // 20c - temp_low = 283.15 // 10c - flight_failure_modifier = 20 - transition_chances = list( - WEATHER_EMBERFALL = 100 - ) - observed_message = "Soot, ash, and embers float down from above." - transition_messages = list( - "Gentle embers waft down around you like grotesque snow." - ) - imminent_transition_message = "Dark smoke is filling the sky, as ash and embers start to rain down." - outdoor_sounds_type = /datum/looping_sound/weather/wind - indoor_sounds_type = /datum/looping_sound/weather/wind/indoors - -// Like the above but a lot more harmful. -/datum/weather/virgo4/ash_storm - name = "ash storm" - icon_state = "ashfall_heavy" - light_modifier = 0.1 - light_color = "#FF0000" - temp_high = 323.15 // 50c - temp_low = 313.15 // 40c - wind_high = 6 - wind_low = 3 - flight_failure_modifier = 50 - transition_chances = list( - WEATHER_ASH_STORM = 100 - ) - observed_message = "All that can be seen is black smoldering ash." - transition_messages = list( - "Smoldering clouds of scorching ash billow down around you!" - ) - imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too. Ashstorm is coming, get to cover!" - // Lets recycle. - outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard - indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard - -/datum/weather/virgo4/ash_storm/process_effects() - ..() - for(var/mob/living/L as anything in living_mob_list) - if(L.z in holder.our_planet.expected_z_levels) - var/turf/T = get_turf(L) - if(!T.is_outdoors()) - continue // They're indoors, so no need to burn them with ash. - - L.inflict_heat_damage(rand(1, 3)) - -//A non-lethal variant of the ash_storm. Stays on indefinitely. -/datum/weather/virgo4/ash_storm_safe - name = "light ash storm" - icon_state = "ashfall_moderate" - light_modifier = 0.1 - light_color = "#FF0000" - temp_high = 323.15 // 50c - temp_low = 313.15 // 40c - wind_high = 6 - wind_low = 3 - flight_failure_modifier = 50 - transition_chances = list( - WEATHER_ASH_STORM_SAFE = 100 - ) - observed_message = "All that can be seen is black smoldering ash." - transition_messages = list( - "Smoldering clouds of scorching ash billow down around you!" - ) - imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too." - // Lets recycle. - outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard - indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard - - -// Totally radical. -/datum/weather/virgo4/fallout - name = "fallout" - icon_state = "fallout" - light_modifier = 0.7 - light_color = "#CCFFCC" - flight_failure_modifier = 30 - transition_chances = list( - WEATHER_FALLOUT = 100 - ) - observed_message = "Radioactive soot and ash rains down from the heavens." - transition_messages = list( - "Radioactive soot and ash start to float down around you, contaminating whatever they touch." - ) - imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!" - outdoor_sounds_type = /datum/looping_sound/weather/wind - indoor_sounds_type = /datum/looping_sound/weather/wind/indoors - - // How much radiation a mob gets while on an outside tile. - var/direct_rad_low = RAD_LEVEL_LOW - var/direct_rad_high = RAD_LEVEL_MODERATE - - // How much radiation is bursted onto a random tile near a mob. - var/fallout_rad_low = RAD_LEVEL_HIGH - var/fallout_rad_high = RAD_LEVEL_VERY_HIGH - -/datum/weather/virgo4/fallout/process_effects() - ..() - for(var/mob/living/L as anything in living_mob_list) - if(L.z in holder.our_planet.expected_z_levels) - irradiate_nearby_turf(L) - var/turf/T = get_turf(L) - if(!T.is_outdoors()) - continue // They're indoors, so no need to irradiate them with fallout. - - L.rad_act(rand(direct_rad_low, direct_rad_high)) - -// This makes random tiles near people radioactive for awhile. -// Tiles far away from people are left alone, for performance. -/datum/weather/virgo4/fallout/proc/irradiate_nearby_turf(mob/living/L) - if(!istype(L)) - return - var/list/turfs = RANGE_TURFS(world.view, L) - var/turf/T = pick(turfs) // We get one try per tick. - if(!istype(T)) - return - if(T.is_outdoors()) - SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) - -/datum/weather/virgo4/fallout/temp - name = "short-term fallout" - timer_low_bound = 1 - timer_high_bound = 3 - transition_chances = list( - WEATHER_FALLOUT = 10, - WEATHER_RAIN = 50, - WEATHER_FOG = 35, - WEATHER_STORM = 20, - WEATHER_OVERCAST = 5 - ) - -/datum/weather/virgo4/confetti - name = "confetti" - icon_state = "confetti" - - transition_chances = list( - WEATHER_CLEAR = 50, - WEATHER_OVERCAST = 20, - WEATHER_CONFETTI = 5 - ) - observed_message = "Confetti is raining from the sky." - transition_messages = list( - "Suddenly, colorful confetti starts raining from the sky." - ) - imminent_transition_message = "A rain is starting... A rain of confetti...?" - -/turf/unsimulated/wall/planetary/normal/virgo4 - name = "deep ocean" - alpha = 0 - -/obj/machinery/power/smes/buildable/offmap_spawn/empty/New() - ..(1) - charge = 0 - RCon = TRUE - input_level = input_level_max - output_level = output_level_max +var/datum/planet/virgo4/planet_virgo4 = null + +/datum/time/virgo4 + seconds_in_day = 24 HOURS + +/datum/planet/virgo4 + name = "Virgo-4" + desc = "Zorren homeworld. Mostly dry and desolate, but ocean and fresh water are present, with scattered vegitation." //rewrite me + current_time = new /datum/time/virgo4() +// expected_z_levels = list(1) // This is defined elsewhere. + planetary_wall_type = /turf/unsimulated/wall/planetary/normal/virgo4 + +/datum/planet/virgo4/New() + ..() + planet_virgo4 = src + weather_holder = new /datum/weather_holder/virgo4(src) + +/datum/planet/virgo4/update_sun() + ..() + var/datum/time/time = current_time + var/length_of_day = time.seconds_in_day / 10 / 60 / 60 + var/noon = length_of_day / 2 + var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon) + sun_position = distance_from_noon / noon + sun_position = abs(sun_position - 1) + + var/low_brightness = null + var/high_brightness = null + + var/low_color = null + var/high_color = null + var/min = 0 + + switch(sun_position) + if(0 to 0.20) // Night + low_brightness = 0.3 + low_color = "#000066" + + high_brightness = 0.5 + high_color = "#66004D" + min = 0 + + if(0.20 to 0.30) // Twilight + low_brightness = 0.5 + low_color = "#66004D" + + high_brightness = 0.9 + high_color = "#CC3300" + min = 0.40 + + if(0.30 to 0.40) // Sunrise/set + low_brightness = 0.9 + low_color = "#CC3300" + + high_brightness = 3.0 + high_color = "#FF9933" + min = 0.50 + + if(0.40 to 1.00) // Noon + low_brightness = 3.0 + low_color = "#DDDDDD" + + high_brightness = 10.0 + high_color = "#FFFFFF" + min = 0.70 + + var/interpolate_weight = (abs(min - sun_position)) * 4 + var/weather_light_modifier = 1 + if(weather_holder && weather_holder.current_weather) + weather_light_modifier = weather_holder.current_weather.light_modifier + + var/new_brightness = (LERP(low_brightness, high_brightness, interpolate_weight) ) * weather_light_modifier + + var/new_color = null + if(weather_holder && weather_holder.current_weather && weather_holder.current_weather.light_color) + new_color = weather_holder.current_weather.light_color + else + var/list/low_color_list = hex2rgb(low_color) + var/low_r = low_color_list[1] + var/low_g = low_color_list[2] + var/low_b = low_color_list[3] + + var/list/high_color_list = hex2rgb(high_color) + var/high_r = high_color_list[1] + var/high_g = high_color_list[2] + var/high_b = high_color_list[3] + + var/new_r = LERP(low_r, high_r, interpolate_weight) + var/new_g = LERP(low_g, high_g, interpolate_weight) + var/new_b = LERP(low_b, high_b, interpolate_weight) + + new_color = rgb(new_r, new_g, new_b) + + spawn(1) + update_sun_deferred(new_brightness, new_color) + + +/datum/weather_holder/virgo4 + temperature = T0C + allowed_weather_types = list( + WEATHER_CLEAR = new /datum/weather/virgo4/clear(), + WEATHER_OVERCAST = new /datum/weather/virgo4/overcast(), + WEATHER_LIGHT_SNOW = new /datum/weather/virgo4/light_snow(), + WEATHER_SNOW = new /datum/weather/virgo4/snow(), + WEATHER_BLIZZARD = new /datum/weather/virgo4/blizzard(), + WEATHER_RAIN = new /datum/weather/virgo4/rain(), + WEATHER_STORM = new /datum/weather/virgo4/storm(), + WEATHER_HAIL = new /datum/weather/virgo4/hail(), + WEATHER_FOG = new /datum/weather/virgo4/fog(), + WEATHER_BLOOD_MOON = new /datum/weather/virgo4/blood_moon(), + WEATHER_EMBERFALL = new /datum/weather/virgo4/emberfall(), + WEATHER_ASH_STORM = new /datum/weather/virgo4/ash_storm(), + WEATHER_ASH_STORM_SAFE = new /datum/weather/virgo4/ash_storm_safe(), + WEATHER_FALLOUT = new /datum/weather/virgo4/fallout(), + WEATHER_FALLOUT_TEMP = new /datum/weather/virgo4/fallout/temp(), + WEATHER_CONFETTI = new /datum/weather/virgo4/confetti() + ) + roundstart_weather_chances = list( + WEATHER_CLEAR = 50, + WEATHER_OVERCAST = 10, + WEATHER_RAIN = 1 + ) + +/datum/weather/virgo4 + name = "virgo4" + temp_high = 303.15 // 30c + temp_low = 298.15 // 25c + +/datum/weather/virgo4/clear + name = "clear" + transition_chances = list( + WEATHER_CLEAR = 60, + WEATHER_OVERCAST = 20) + transition_messages = list( + "The sky clears up.", + "The sky is visible.", + "The weather is calm." + ) + sky_visible = TRUE + observed_message = "The sky is clear." + imminent_transition_message = "The sky is rapidly clearing up." + +/datum/weather/virgo4/overcast + name = "overcast" + temp_high = 293.15 // 20c + temp_low = 288.15 // 15c + light_modifier = 0.8 + transition_chances = list( + WEATHER_CLEAR = 25, + WEATHER_OVERCAST = 50, + WEATHER_RAIN = 5 + ) + observed_message = "It is overcast, all you can see are clouds." + transition_messages = list( + "All you can see above are clouds.", + "Clouds cut off your view of the sky.", + "It's very cloudy." + ) + imminent_transition_message = "Benign clouds are quickly gathering." + +/datum/weather/virgo4/light_snow + name = "light snow" + icon_state = "snowfall_light" + temp_high = 268.15 // -5c + temp_low = 263.15 // -10c + light_modifier = 0.7 + transition_chances = list( + WEATHER_LIGHT_SNOW = 15, + WEATHER_OVERCAST = 80 + ) + observed_message = "It is snowing lightly." + transition_messages = list( + "Small snowflakes begin to fall from above.", + "It begins to snow lightly.", + ) + imminent_transition_message = "It appears a light snow is about to start." + +/datum/weather/virgo4/snow + name = "moderate snow" + icon_state = "snowfall_med" + temp_high = 268.15 // -5c + temp_low = 263.15 // -10c + wind_high = 2 + wind_low = 0 + light_modifier = 0.5 + flight_failure_modifier = 5 + transition_chances = list( + WEATHER_SNOW = 10, + WEATHER_LIGHT_SNOW = 80 + ) + observed_message = "It is snowing." + transition_messages = list( + "It's starting to snow.", + "The air feels much colder as snowflakes fall from above." + ) + imminent_transition_message = "A snowfall is starting." + outdoor_sounds_type = /datum/looping_sound/weather/outside_snow + indoor_sounds_type = /datum/looping_sound/weather/inside_snow + +/* +/datum/weather/virgo4/snow/process_effects() + ..() + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + if(S.z in holder.our_planet.expected_z_levels) + for(var/dir_checked in cardinal) + var/turf/simulated/floor/T = get_step(S, dir_checked) + if(istype(T)) + if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) + T.chill() +*/ + +/datum/weather/virgo4/blizzard + name = "blizzard" + icon_state = "snowfall_heavy" + temp_high = 268.15 // -5c + temp_low = 263.15 // -10c + wind_high = 4 + wind_low = 2 + light_modifier = 0.3 + flight_failure_modifier = 10 + transition_chances = list( + WEATHER_BLIZZARD = 5, + WEATHER_SNOW = 80 + ) + observed_message = "A blizzard blows snow everywhere." + transition_messages = list( + "Strong winds howl around you as a blizzard appears.", + "It starts snowing heavily, and it feels extremly cold now." + ) + imminent_transition_message = "Wind is howling. Blizzard is coming." + outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard + indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard + +/* +/datum/weather/virgo4/blizzard/process_effects() + ..() + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + if(S.z in holder.our_planet.expected_z_levels) + for(var/dir_checked in cardinal) + var/turf/simulated/floor/T = get_step(S, dir_checked) + if(istype(T)) + if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) + T.chill() +*/ + +/datum/weather/virgo4/rain + name = "rain" + icon_state = "rain" + temp_high = 288.15 // 15c + temp_low = 283.15 // 10c + wind_high = 2 + wind_low = 1 + light_modifier = 0.5 + effect_message = "Rain falls on you." + + transition_chances = list( + WEATHER_OVERCAST = 25, + WEATHER_RAIN = 50 + ) + observed_message = "It is raining." + transition_messages = list( + "The sky is dark, and rain falls down upon you." + ) + imminent_transition_message = "Light drips of water are starting to fall from the sky." + outdoor_sounds_type = /datum/looping_sound/weather/rain + indoor_sounds_type = /datum/looping_sound/weather/rain/indoors + +/datum/weather/virgo4/rain/process_effects() + ..() + for(var/mob/living/L as anything in living_mob_list) + if(L.z in holder.our_planet.expected_z_levels) + var/turf/T = get_turf(L) + if(!T.is_outdoors()) + continue // They're indoors, so no need to rain on them. + + // If they have an open umbrella, it'll guard from rain + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue + + L.water_act(1) + if(show_message) + to_chat(L, effect_message) + +/datum/weather/virgo4/storm + name = "storm" + icon_state = "storm" + wind_high = 4 + wind_low = 2 + light_modifier = 0.3 + flight_failure_modifier = 10 + effect_message = "Rain falls on you, drenching you in water." + + var/next_lightning_strike = 0 // world.time when lightning will strike. + var/min_lightning_cooldown = 5 SECONDS + var/max_lightning_cooldown = 1 MINUTE + observed_message = "An intense storm pours down over the region." + transition_messages = list( + "You feel intense winds hit you as the weather takes a turn for the worst.", + "Loud thunder is heard in the distance.", + "A bright flash heralds the approach of a storm." + ) + imminent_transition_message = "You can hear distant thunder. Storm is coming." + outdoor_sounds_type = /datum/looping_sound/weather/rain + indoor_sounds_type = /datum/looping_sound/weather/rain/indoors + + + transition_chances = list( + WEATHER_STORM = 10, + WEATHER_RAIN = 80 + ) + +/datum/weather/virgo4/storm/process_effects() + ..() + for(var/mob/living/L as anything in living_mob_list) + if(L.z in holder.our_planet.expected_z_levels) + var/turf/T = get_turf(L) + if(!T.is_outdoors()) + continue // They're indoors, so no need to rain on them. + + // If they have an open umbrella, it'll guard from rain + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue + + + L.water_act(2) + if(show_message) + to_chat(L, effect_message) + + handle_lightning() + +// This gets called to do lightning periodically. +// There is a seperate function to do the actual lightning strike, so that badmins can play with it. +/datum/weather/virgo4/storm/proc/handle_lightning() + if(world.time < next_lightning_strike) + return // It's too soon to strike again. + next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown) + var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots. + lightning_strike(T) + +/datum/weather/virgo4/hail + name = "hail" + icon_state = "hail" + light_modifier = 0.3 + flight_failure_modifier = 15 + timer_low_bound = 2 + timer_high_bound = 5 + effect_message = "The hail smacks into you!" + + transition_chances = list( + WEATHER_HAIL = 10, + WEATHER_SNOW = 40, + WEATHER_RAIN = 40 + ) + observed_message = "Ice is falling from the sky." + transition_messages = list( + "Ice begins to fall from the sky.", + "It begins to hail.", + "An intense chill is felt, and chunks of ice start to fall from the sky, towards you." + ) + imminent_transition_message = "Small bits of ice are falling from the sky, growing larger by the second. Hail is starting, get to cover!" + +/datum/weather/virgo4/hail/process_effects() + ..() + for(var/mob/living/carbon/H as anything in human_mob_list) + if(H.z in holder.our_planet.expected_z_levels) + var/turf/T = get_turf(H) + if(!T.is_outdoors()) + continue // They're indoors, so no need to pelt them with ice. + + // If they have an open umbrella, it'll guard from hail + var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() + if(!istype(U) || !U.open) + U = H.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(H, "Hail patters onto your umbrella.") + continue + + var/target_zone = pick(BP_ALL) + var/amount_blocked = H.run_armor_check(target_zone, "melee") + var/amount_soaked = H.get_armor_soak(target_zone, "melee") + + var/damage = rand(1,3) + + if(amount_blocked >= 30) + continue // No need to apply damage. Hardhats are 30. They should probably protect you from hail on your head. + //Voidsuits are likewise 40, and riot, 80. Clothes are all less than 30. + + if(amount_soaked >= damage) + continue // No need to apply damage. + + H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail") + if(show_message) + to_chat(H, effect_message) + +/datum/weather/virgo4/fog + name = "fog" + icon_state = "fog" + wind_high = 1 + wind_low = 0 + light_modifier = 0.7 + + temp_high = 283.15 // 10c + temp_low = 273.15 // 0c + + transition_chances = list( + WEATHER_FOG = 10, + WEATHER_OVERCAST = 15 + ) + observed_message = "A fogbank has rolled over the region." + transition_messages = list( + "Fog rolls in.", + "Visibility falls as the air becomes dense.", + "The clouds drift lower, as if to smother the forests." + ) + imminent_transition_message = "Clouds are drifting down as the area is getting foggy." + outdoor_sounds_type = /datum/looping_sound/weather/wind + indoor_sounds_type = /datum/looping_sound/weather/wind/indoors + +/datum/weather/virgo4/blood_moon + name = "blood moon" + light_modifier = 0.5 + light_color = "#FF0000" + temp_high = 293.15 // 20c + temp_low = 283.15 // 10c + flight_failure_modifier = 25 + transition_chances = list( + WEATHER_BLOOD_MOON = 100 + ) + observed_message = "Everything is red. Something really ominous is going on." + transition_messages = list( + "The sky turns blood red!" + ) + imminent_transition_message = "The sky is turning red. Blood Moon is starting." + outdoor_sounds_type = /datum/looping_sound/weather/wind + indoor_sounds_type = /datum/looping_sound/weather/wind/indoors + +// Ash and embers fall forever, such as from a volcano or something. +/datum/weather/virgo4/emberfall + name = "emberfall" + icon_state = "ashfall_light" + light_modifier = 0.7 + light_color = "#880000" + temp_high = 293.15 // 20c + temp_low = 283.15 // 10c + flight_failure_modifier = 20 + transition_chances = list( + WEATHER_EMBERFALL = 100 + ) + observed_message = "Soot, ash, and embers float down from above." + transition_messages = list( + "Gentle embers waft down around you like grotesque snow." + ) + imminent_transition_message = "Dark smoke is filling the sky, as ash and embers start to rain down." + outdoor_sounds_type = /datum/looping_sound/weather/wind + indoor_sounds_type = /datum/looping_sound/weather/wind/indoors + +// Like the above but a lot more harmful. +/datum/weather/virgo4/ash_storm + name = "ash storm" + icon_state = "ashfall_heavy" + light_modifier = 0.1 + light_color = "#FF0000" + temp_high = 323.15 // 50c + temp_low = 313.15 // 40c + wind_high = 6 + wind_low = 3 + flight_failure_modifier = 50 + transition_chances = list( + WEATHER_ASH_STORM = 100 + ) + observed_message = "All that can be seen is black smoldering ash." + transition_messages = list( + "Smoldering clouds of scorching ash billow down around you!" + ) + imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too. Ashstorm is coming, get to cover!" + // Lets recycle. + outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard + indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard + +/datum/weather/virgo4/ash_storm/process_effects() + ..() + for(var/mob/living/L as anything in living_mob_list) + if(L.z in holder.our_planet.expected_z_levels) + var/turf/T = get_turf(L) + if(!T.is_outdoors()) + continue // They're indoors, so no need to burn them with ash. + + L.inflict_heat_damage(rand(1, 3)) + +//A non-lethal variant of the ash_storm. Stays on indefinitely. +/datum/weather/virgo4/ash_storm_safe + name = "light ash storm" + icon_state = "ashfall_moderate" + light_modifier = 0.1 + light_color = "#FF0000" + temp_high = 323.15 // 50c + temp_low = 313.15 // 40c + wind_high = 6 + wind_low = 3 + flight_failure_modifier = 50 + transition_chances = list( + WEATHER_ASH_STORM_SAFE = 100 + ) + observed_message = "All that can be seen is black smoldering ash." + transition_messages = list( + "Smoldering clouds of scorching ash billow down around you!" + ) + imminent_transition_message = "Dark smoke is filling the sky, as ash and embers fill the air and wind is picking up too." + // Lets recycle. + outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard + indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard + + +// Totally radical. +/datum/weather/virgo4/fallout + name = "fallout" + icon_state = "fallout" + light_modifier = 0.7 + light_color = "#CCFFCC" + flight_failure_modifier = 30 + transition_chances = list( + WEATHER_FALLOUT = 100 + ) + observed_message = "Radioactive soot and ash rains down from the heavens." + transition_messages = list( + "Radioactive soot and ash start to float down around you, contaminating whatever they touch." + ) + imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!" + outdoor_sounds_type = /datum/looping_sound/weather/wind + indoor_sounds_type = /datum/looping_sound/weather/wind/indoors + + // How much radiation a mob gets while on an outside tile. + var/direct_rad_low = RAD_LEVEL_LOW + var/direct_rad_high = RAD_LEVEL_MODERATE + + // How much radiation is bursted onto a random tile near a mob. + var/fallout_rad_low = RAD_LEVEL_HIGH + var/fallout_rad_high = RAD_LEVEL_VERY_HIGH + +/datum/weather/virgo4/fallout/process_effects() + ..() + for(var/mob/living/L as anything in living_mob_list) + if(L.z in holder.our_planet.expected_z_levels) + irradiate_nearby_turf(L) + var/turf/T = get_turf(L) + if(!T.is_outdoors()) + continue // They're indoors, so no need to irradiate them with fallout. + + L.rad_act(rand(direct_rad_low, direct_rad_high)) + +// This makes random tiles near people radioactive for awhile. +// Tiles far away from people are left alone, for performance. +/datum/weather/virgo4/fallout/proc/irradiate_nearby_turf(mob/living/L) + if(!istype(L)) + return + var/list/turfs = RANGE_TURFS(world.view, L) + var/turf/T = pick(turfs) // We get one try per tick. + if(!istype(T)) + return + if(T.is_outdoors()) + SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) + +/datum/weather/virgo4/fallout/temp + name = "short-term fallout" + timer_low_bound = 1 + timer_high_bound = 3 + transition_chances = list( + WEATHER_FALLOUT = 10, + WEATHER_RAIN = 50, + WEATHER_FOG = 35, + WEATHER_STORM = 20, + WEATHER_OVERCAST = 5 + ) + +/datum/weather/virgo4/confetti + name = "confetti" + icon_state = "confetti" + + transition_chances = list( + WEATHER_CLEAR = 50, + WEATHER_OVERCAST = 20, + WEATHER_CONFETTI = 5 + ) + observed_message = "Confetti is raining from the sky." + transition_messages = list( + "Suddenly, colorful confetti starts raining from the sky." + ) + imminent_transition_message = "A rain is starting... A rain of confetti...?" + +/turf/unsimulated/wall/planetary/normal/virgo4 + name = "deep ocean" + alpha = 0 + +/obj/machinery/power/smes/buildable/offmap_spawn/empty/New() + ..(1) + charge = 0 + RCon = TRUE + input_level = input_level_max + output_level = output_level_max input_attempt = TRUE \ No newline at end of file diff --git a/code/modules/power/antimatter/computer.dm b/code/modules/power/antimatter/computer.dm index d531ccfb54..973828b6e0 100644 --- a/code/modules/power/antimatter/computer.dm +++ b/code/modules/power/antimatter/computer.dm @@ -1,95 +1,95 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05 -#define STATE_DEFAULT 1 -#define STATE_INJECTOR 2 -#define STATE_ENGINE 3 - - -/obj/machinery/computer/am_engine - name = "Antimatter Engine Console" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "comm_computer" - req_access = list(ACCESS_ENGINE) - var/engine_id = 0 - var/authenticated = 0 - var/obj/machinery/power/am_engine/engine/connected_E = null - var/obj/machinery/power/am_engine/injector/connected_I = null - var/state = STATE_DEFAULT - -/obj/machinery/computer/am_engine/New() - ..() - spawn( 24 ) - for(var/obj/machinery/power/am_engine/engine/E in world) - if(E.engine_id == src.engine_id) - src.connected_E = E - for(var/obj/machinery/power/am_engine/injector/I in world) - if(I.engine_id == src.engine_id) - src.connected_I = I - return - -/obj/machinery/computer/am_engine/Topic(href, href_list) - if(..()) - return - usr.machine = src - - if(!href_list["operation"]) - return - switch(href_list["operation"]) - // main interface - if("activate") - src.connected_E.engine_process() - if("engine") - src.state = STATE_ENGINE - if("injector") - src.state = STATE_INJECTOR - if("main") - src.state = STATE_DEFAULT - if("login") - var/mob/M = usr - var/obj/item/weapon/card/id/I = M.get_active_hand() - if (I && istype(I)) - if(src.check_access(I)) - authenticated = 1 - if("deactivate") - src.connected_E.stopping = 1 - if("logout") - authenticated = 0 - - src.updateUsrDialog() - -/obj/machinery/computer/am_engine/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/am_engine/attack_paw(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/am_engine/attack_hand(var/mob/user as mob) - if(..()) - return - user.machine = src - var/dat = "Engine Computer" - switch(src.state) - if(STATE_DEFAULT) - if (src.authenticated) - dat += "
                    \[ Log Out \]
                    " - dat += "
                    \[ Engine Menu \]" - dat += "
                    \[ Injector Menu \]" - else - dat += "
                    \[ Log In \]" - if(STATE_INJECTOR) - if(src.connected_I.injecting) - dat += "
                    \[ Injecting \]
                    " - else - dat += "
                    \[ Injecting not in progress \]
                    " - if(STATE_ENGINE) - if(src.connected_E.stopping) - dat += "
                    \[ STOPPING \]" - else if(src.connected_E.operating && !src.connected_E.stopping) - dat += "
                    \[ Emergency Stop \]" - else - dat += "
                    \[ Activate Engine \]" - dat += "
                    Contents:
                    [src.connected_E.H_fuel]kg of Hydrogen
                    [src.connected_E.antiH_fuel]kg of Anti-Hydrogen
                    " - - dat += "
                    \[ [(src.state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" - user << browse(dat, "window=communications;size=400x500") - onclose(user, "communications") - +//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05 +#define STATE_DEFAULT 1 +#define STATE_INJECTOR 2 +#define STATE_ENGINE 3 + + +/obj/machinery/computer/am_engine + name = "Antimatter Engine Console" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "comm_computer" + req_access = list(ACCESS_ENGINE) + var/engine_id = 0 + var/authenticated = 0 + var/obj/machinery/power/am_engine/engine/connected_E = null + var/obj/machinery/power/am_engine/injector/connected_I = null + var/state = STATE_DEFAULT + +/obj/machinery/computer/am_engine/New() + ..() + spawn( 24 ) + for(var/obj/machinery/power/am_engine/engine/E in world) + if(E.engine_id == src.engine_id) + src.connected_E = E + for(var/obj/machinery/power/am_engine/injector/I in world) + if(I.engine_id == src.engine_id) + src.connected_I = I + return + +/obj/machinery/computer/am_engine/Topic(href, href_list) + if(..()) + return + usr.machine = src + + if(!href_list["operation"]) + return + switch(href_list["operation"]) + // main interface + if("activate") + src.connected_E.engine_process() + if("engine") + src.state = STATE_ENGINE + if("injector") + src.state = STATE_INJECTOR + if("main") + src.state = STATE_DEFAULT + if("login") + var/mob/M = usr + var/obj/item/weapon/card/id/I = M.get_active_hand() + if (I && istype(I)) + if(src.check_access(I)) + authenticated = 1 + if("deactivate") + src.connected_E.stopping = 1 + if("logout") + authenticated = 0 + + src.updateUsrDialog() + +/obj/machinery/computer/am_engine/attack_ai(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/computer/am_engine/attack_paw(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/computer/am_engine/attack_hand(var/mob/user as mob) + if(..()) + return + user.machine = src + var/dat = "Engine Computer" + switch(src.state) + if(STATE_DEFAULT) + if (src.authenticated) + dat += "
                    \[ Log Out \]
                    " + dat += "
                    \[ Engine Menu \]" + dat += "
                    \[ Injector Menu \]" + else + dat += "
                    \[ Log In \]" + if(STATE_INJECTOR) + if(src.connected_I.injecting) + dat += "
                    \[ Injecting \]
                    " + else + dat += "
                    \[ Injecting not in progress \]
                    " + if(STATE_ENGINE) + if(src.connected_E.stopping) + dat += "
                    \[ STOPPING \]" + else if(src.connected_E.operating && !src.connected_E.stopping) + dat += "
                    \[ Emergency Stop \]" + else + dat += "
                    \[ Activate Engine \]" + dat += "
                    Contents:
                    [src.connected_E.H_fuel]kg of Hydrogen
                    [src.connected_E.antiH_fuel]kg of Anti-Hydrogen
                    " + + dat += "
                    \[ [(src.state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" + user << browse(dat, "window=communications;size=400x500") + onclose(user, "communications") + diff --git a/code/modules/power/antimatter/containment_jar.dm b/code/modules/power/antimatter/containment_jar.dm index f2da66eea0..ff64c28f60 100644 --- a/code/modules/power/antimatter/containment_jar.dm +++ b/code/modules/power/antimatter/containment_jar.dm @@ -1,41 +1,41 @@ -/obj/item/weapon/am_containment - name = "antimatter containment jar" - desc = "Holds antimatter." - icon = 'icons/obj/machines/antimatter.dmi' - icon_state = "jar" - density = FALSE - anchored = FALSE - force = 8 - throwforce = 10 - throw_speed = 1 - throw_range = 2 - - var/fuel = 10000 - var/fuel_max = 10000//Lets try this for now - var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things - - -/obj/item/weapon/am_containment/ex_act(severity) - switch(severity) - if(1.0) - explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess - if(src) - qdel(src) - return - if(2.0) - if(prob((fuel/10)-stability)) - explosion(get_turf(src), 1, 2, 3, 5) - if(src) - qdel(src) - return - stability -= 40 - if(3.0) - stability -= 20 - //check_stability() - return - -/obj/item/weapon/am_containment/proc/usefuel(var/wanted) - if(fuel < wanted) - wanted = fuel - fuel -= wanted +/obj/item/weapon/am_containment + name = "antimatter containment jar" + desc = "Holds antimatter." + icon = 'icons/obj/machines/antimatter.dmi' + icon_state = "jar" + density = FALSE + anchored = FALSE + force = 8 + throwforce = 10 + throw_speed = 1 + throw_range = 2 + + var/fuel = 10000 + var/fuel_max = 10000//Lets try this for now + var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things + + +/obj/item/weapon/am_containment/ex_act(severity) + switch(severity) + if(1.0) + explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess + if(src) + qdel(src) + return + if(2.0) + if(prob((fuel/10)-stability)) + explosion(get_turf(src), 1, 2, 3, 5) + if(src) + qdel(src) + return + stability -= 40 + if(3.0) + stability -= 20 + //check_stability() + return + +/obj/item/weapon/am_containment/proc/usefuel(var/wanted) + if(fuel < wanted) + wanted = fuel + fuel -= wanted return wanted \ No newline at end of file diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 7273ad62eb..099434b87c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1,1374 +1,1374 @@ -GLOBAL_LIST_EMPTY(apcs) - -#define CRITICAL_APC_EMP_PROTECTION 10 // EMP effect duration is divided by this number if the APC has "critical" flag -//update_state -#define UPDATE_CELL_IN 1 -#define UPDATE_OPENED1 2 -#define UPDATE_OPENED2 4 -#define UPDATE_MAINT 8 -#define UPDATE_BROKE 16 -#define UPDATE_BLUESCREEN 32 -#define UPDATE_WIREEXP 64 -#define UPDATE_ALLGOOD 128 - -//update_overlay -#define APC_UPOVERLAY_CHARGEING0 1 -#define APC_UPOVERLAY_CHARGEING1 2 -#define APC_UPOVERLAY_CHARGEING2 4 -#define APC_UPOVERLAY_EQUIPMENT0 8 -#define APC_UPOVERLAY_EQUIPMENT1 16 -#define APC_UPOVERLAY_EQUIPMENT2 32 -#define APC_UPOVERLAY_LIGHTING0 64 -#define APC_UPOVERLAY_LIGHTING1 128 -#define APC_UPOVERLAY_LIGHTING2 256 -#define APC_UPOVERLAY_ENVIRON0 512 -#define APC_UPOVERLAY_ENVIRON1 1024 -#define APC_UPOVERLAY_ENVIRON2 2048 -#define APC_UPOVERLAY_LOCKED 4096 -#define APC_UPOVERLAY_OPERATING 8192 - -#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds - -// main_status var -#define APC_EXTERNAL_POWER_NOTCONNECTED 0 -#define APC_EXTERNAL_POWER_NOENERGY 1 -#define APC_EXTERNAL_POWER_GOOD 2 - -// has_electronics var -#define APC_HAS_ELECTRONICS_NONE 0 -#define APC_HAS_ELECTRONICS_WIRED 1 -#define APC_HAS_ELECTRONICS_SECURED 2 - - -// the Area Power Controller (APC), formerly Power Distribution Unit (PDU) -// one per area, needs wire conection 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 -#define POWERCHAN_OFF 0 // Power channel is off and will stay that way dammit -#define POWERCHAN_OFF_AUTO 1 // Power channel is off until power rises above a threshold -#define POWERCHAN_ON 2 // Power channel is on until there is no power -#define POWERCHAN_ON_AUTO 3 // Power channel is on until power drops below a threshold - -#define NIGHTSHIFT_AUTO 1 -#define NIGHTSHIFT_NEVER 2 -#define NIGHTSHIFT_ALWAYS 3 - -//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx - -/obj/machinery/power/apc/critical - is_critical = 1 - -/obj/machinery/power/apc/high - cell_type = /obj/item/weapon/cell/high - -/obj/machinery/power/apc/super - cell_type = /obj/item/weapon/cell/super - -/obj/machinery/power/apc/super/critical - is_critical = 1 - -/obj/machinery/power/apc/hyper - cell_type = /obj/item/weapon/cell/hyper - -/obj/machinery/power/apc/alarms_hidden - alarms_hidden = TRUE - -/obj/machinery/power/apc/angled - icon = 'icons/obj/wall_machines_angled.dmi' - -/obj/machinery/power/apc/angled/hidden - alarms_hidden = TRUE - -/obj/machinery/power/apc/angled/offset_apc() - pixel_x = (dir & 3) ? 0 : (dir == 4 ? 24 : -24) - pixel_y = (dir & 3) ? (dir == 1 ? 20 : -20) : 0 - -/obj/machinery/power/apc - name = "area power controller" - desc = "A control terminal for the area electrical systems." - icon = 'icons/obj/power.dmi' - icon_state = "apc0" - layer = ABOVE_WINDOW_LAYER - anchored = TRUE - unacidable = TRUE - use_power = USE_POWER_OFF - clicksound = "switch" - req_access = list(access_engine_equip) - blocks_emissive = FALSE - vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature - var/area/area - var/areastring = null - var/obj/item/weapon/cell/cell - var/chargelevel = 0.0005 // Cap for how fast APC cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) - var/start_charge = 90 // initial cell charge % - var/cell_type = /obj/item/weapon/cell/apc - var/opened = 0 //0=closed, 1=opened, 2=cover removed - var/shorted = 0 - var/grid_check = FALSE - var/lighting = POWERCHAN_ON_AUTO - var/equipment = POWERCHAN_ON_AUTO - var/environ = POWERCHAN_ON_AUTO - var/operating = 1 - var/charging = 0 - var/chargemode = 1 - var/chargecount = 0 - var/locked = 1 - var/coverlocked = 1 - var/aidisabled = 0 - var/obj/machinery/power/terminal/terminal = null - var/lastused_light = 0 - var/lastused_equip = 0 - var/lastused_environ = 0 - var/lastused_charging = 0 - var/lastused_total = 0 - var/main_status = APC_EXTERNAL_POWER_NOTCONNECTED - var/mob/living/silicon/ai/hacker = null // Malfunction var. If set AI hacked the APC and has full control. - var/wiresexposed = 0 - powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( - var/debug= 0 - var/autoflag= 0 // 0 = off, 1= eqp and lights off, 2 = eqp off, 3 = all on. - var/has_electronics = APC_HAS_ELECTRONICS_NONE // 0 - none, 1 - plugged in, 2 - secured by screwdriver - var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment - var/longtermpower = 10 - var/datum/wires/apc/wires = null - var/emergency_lights = FALSE - var/update_state = -1 - var/update_overlay = -1 - var/is_critical = 0 - var/global/status_overlays = 0 - var/failure_timer = 0 - var/force_update = 0 - var/updating_icon = 0 - var/global/list/status_overlays_environ - var/alarms_hidden = FALSE //If power alarms from this APC are visible on consoles - - var/nightshift_lights = FALSE - var/nightshift_setting = NIGHTSHIFT_AUTO - var/last_nightshift_switch = 0 - -/obj/machinery/power/apc/updateDialog() - if(stat & (BROKEN|MAINT)) - return - ..() - -/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) - make_terminal() - if(terminal) - terminal.connect_to_network() - -/obj/machinery/power/apc/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - //This makes sure fully draining an APC cell won't break the cell charging. - charging = 0 - - var/drained_energy = 0 - - //Draws power from the grid first, if available. - //This is like draining from a cable, so nins and - //twizs can do that without having to pry floortiles. - if(terminal && terminal.powernet) - terminal.powernet.trigger_warning() - drained_energy += terminal.powernet.draw_power(amount) - - //The grid rarely gives the full amount requested, or perhaps the grid - //isn't connected (wire cut), in either case we draw what we didn't get - //from the cell instead. - if((drained_energy < amount) && cell) - drained_energy += cell.drain_power(0, 0, (amount - drained_energy)) - - return drained_energy - -/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) - ..() - wires = new(src) - GLOB.apcs += 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) - set_dir(ndir) - - if(!pixel_x && !pixel_y) - offset_apc() - - if(building) - area = get_area(src) - area.apc = src - opened = 1 - operating = 0 - name = "[area.name] APC" - stat |= MAINT - update_icon() - -/obj/machinery/power/apc/Initialize(mapload, ndir, building) - . = ..() - if(!building) - init() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/power/apc/LateInitialize() - . = ..() - update() - -/obj/machinery/power/apc/Destroy() - GLOB.apcs -= src - update() - area.apc = null - area.power_light = 0 - area.power_equip = 0 - area.power_environ = 0 - area.power_change() - qdel(wires) - wires = null - qdel(terminal) - terminal = null - if(cell) - cell.forceMove(loc) - cell = null - - // Malf AI, removes the APC from AI's hacked APCs list. - if((hacker) && (hacker.hacked_apcs) && (src in hacker.hacked_apcs)) - hacker.hacked_apcs -= src - - return ..() - -/obj/machinery/power/apc/proc/offset_apc() - pixel_x = (dir & 3) ? 0 : (dir == 4 ? 26 : -26) - pixel_y = (dir & 3) ? (dir == 1 ? 26 : -26) : 0 - -// APCs are pixel-shifted, so they need to be updated. -/obj/machinery/power/apc/set_dir(new_dir) - ..() - offset_apc() - if(terminal) - terminal.disconnect_from_network() - terminal.set_dir(dir) // Terminal has same dir as master - terminal.connect_to_network() // Refresh the network the terminal is connected to. - return - -/obj/machinery/power/apc/proc/energy_fail(var/duration) - failure_timer = max(failure_timer, round(duration)) - -/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.set_dir(dir) - terminal.master = src - -/obj/machinery/power/apc/proc/init() - has_electronics = APC_HAS_ELECTRONICS_SECURED //installed and secured - // is starting with a power cell installed, create it and set its charge level - if(cell_type) - cell = new cell_type(src) - cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value) - - var/area/A = loc.loc - - //if area isn't specified use current - if(isarea(A) && !areastring) - area = A - name = "\improper [area.name] APC" - else - area = get_area_name(areastring) - name = "\improper [area.name] APC" - area.apc = src - - if(istype(area, /area/submap)) - alarms_hidden = TRUE - - update_icon() - - make_terminal() - -/obj/machinery/power/apc/examine(mob/user) - . = ..() - if(Adjacent(user)) - if(stat & BROKEN) - . += "This APC is broken." - - else if(opened) - if(has_electronics && terminal) - . += "The cover is [opened == 2 ? "removed" : "open"] and [ cell ? "a power cell is installed" : "the power cell is missing"]." - else if(!has_electronics && terminal) - . += "The frame is wired, but the electronics are missing." - else if(has_electronics && !terminal) - . += "The electronics are installed, but not wired." - else /* if(!has_electronics && !terminal) */ - . += "It's just an empty metal frame." - - else - if(wiresexposed) - . += "The cover is closed and the wires are exposed." - else if((locked && emagged) || hacker) //Some things can cause locked && emagged. Malf AI causes hacker. - . += "The cover is closed, but the panel is unresponsive." - else if(!locked && emagged) //Normal emag does this. - . += "The cover is closed, but the panel is flashing an error." - else - . += "The cover is closed." - - -// 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) - return - - if(update & 1) // Updating the icon state - if(update_state & UPDATE_ALLGOOD) - icon_state = "apc0" - else if(update_state & (UPDATE_OPENED1|UPDATE_OPENED2)) - var/basestate = "apc[ cell ? "2" : "1" ]" - if(update_state & UPDATE_OPENED1) - if(update_state & (UPDATE_MAINT|UPDATE_BROKE)) - icon_state = "apcmaint" //disabled APC cannot hold cell - else - icon_state = basestate - else if(update_state & UPDATE_OPENED2) - icon_state = "[basestate]-nocover" - else if(update_state & UPDATE_BROKE) - icon_state = "apc-b" - else if(update_state & UPDATE_WIREEXP) - icon_state = "apcewires" - else if(update_state & UPDATE_BLUESCREEN) - icon_state = "apcemag" - - if(!(update_state & UPDATE_ALLGOOD)) - cut_overlays() - return - - if(update & 2) - cut_overlays() - if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) - var/list/new_overlays = list() - new_overlays += mutable_appearance(icon, "apcox-[locked]") - new_overlays += emissive_appearance(icon, "apcox-[locked]") - new_overlays += mutable_appearance(icon, "apco3-[charging]") - new_overlays += emissive_appearance(icon, "apco3-[charging]") - if(operating) - new_overlays += mutable_appearance(icon, "apco0-[equipment]") - new_overlays += emissive_appearance(icon, "apco0-[equipment]") - new_overlays += mutable_appearance(icon, "apco1-[lighting]") - new_overlays += emissive_appearance(icon, "apco1-[lighting]") - new_overlays += mutable_appearance(icon, "apco2-[environ]") - new_overlays += emissive_appearance(icon, "apco2-[environ]") - add_overlay(new_overlays) - - if(update & 3) - if(update_state & UPDATE_BLUESCREEN) - set_light(l_range = 2, l_power = 0.25, l_color = "#0000FF") - else if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) - var/color - switch(charging) - if(0) - color = "#F86060" - if(1) - color = "#A8B0F8" - if(2) - color = "#82FF4C" - set_light(l_range = 2, l_power = 0.25, l_color = color) - else - set_light(0) - -/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 |= UPDATE_CELL_IN - if(stat & BROKEN) - update_state |= UPDATE_BROKE - if(stat & MAINT) - update_state |= UPDATE_MAINT - if(opened) - if(opened==1) - update_state |= UPDATE_OPENED1 - if(opened==2) - update_state |= UPDATE_OPENED2 - else if(wiresexposed) - update_state |= UPDATE_WIREEXP - else if(emagged || hacker || failure_timer) - update_state |= UPDATE_BLUESCREEN - if(update_state <= 1) - update_state |= UPDATE_ALLGOOD - - if(operating) - update_overlay |= APC_UPOVERLAY_OPERATING - - if(update_state & UPDATE_ALLGOOD) - if(locked) - update_overlay |= APC_UPOVERLAY_LOCKED - - if(!charging) - update_overlay |= APC_UPOVERLAY_CHARGEING0 - else if(charging == 1) - update_overlay |= APC_UPOVERLAY_CHARGEING1 - else if(charging == 2) - 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() - - if(!updating_icon) - updating_icon = 1 - // Start the update - spawn(APC_UPDATE_ICON_COOLDOWN) - update_icon() - updating_icon = 0 - -//attack with an item - open/close cover, insert cell, or (un)lock interface - -/obj/machinery/power/apc/attackby(obj/item/W, mob/user) - if(issilicon(user) && get_dist(src,user) > 1) - return attack_hand(user) - add_fingerprint(user) - if(W.has_tool_quality(TOOL_CROWBAR) && opened) - if(has_electronics == APC_HAS_ELECTRONICS_WIRED) - if(terminal) - to_chat(user, "Disconnect the wires first.") - return - playsound(src, W.usesound, 50, 1) - to_chat(user, "You begin to remove the power control board...") //lpeters - fixed grammar issues //Ner - grrrrrr - if(do_after(user, 50 * W.toolspeed)) - if(has_electronics == APC_HAS_ELECTRONICS_WIRED) - has_electronics = APC_HAS_ELECTRONICS_NONE - if((stat & BROKEN)) - user.visible_message(\ - "[user.name] has broken the charred power control board inside [name]!",\ - "You broke the charred power control board and remove the remains.", - "You hear a crack!") - //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 - else - user.visible_message(\ - "[user.name] has removed the power control board from [name]!",\ - "You remove the power control board.") - new /obj/item/weapon/module/power_control(loc) - else if(opened != 2) //cover isn't removed - opened = 0 - update_icon() - else if(W.has_tool_quality(TOOL_CROWBAR) && !(stat & BROKEN) ) - if(coverlocked && !(stat & MAINT)) - to_chat(user, "The cover is locked and cannot be opened.") - return - else - opened = 1 - update_icon() - else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside - if(cell) - to_chat(user, "The [name] already has a power cell installed.") - return - if(stat & MAINT) - to_chat(user, "You need to install the wiring and electronics first.") - return - if(W.w_class != ITEMSIZE_NORMAL) - to_chat(user, "\The [W] is too [W.w_class < 3? "small" : "large"] to work here.") - return - - user.drop_item() - W.forceMove(src) - cell = W - user.visible_message(\ - "[user.name] has inserted a power cell into [name]!",\ - "You insert the power cell.") - chargecount = 0 - update_icon() - else if (W.has_tool_quality(TOOL_SCREWDRIVER)) // haxing - if(opened) - if(cell) - to_chat(user, "Remove the power cell first.") - return - else - if(has_electronics == APC_HAS_ELECTRONICS_WIRED && terminal) - has_electronics = APC_HAS_ELECTRONICS_SECURED - stat &= ~MAINT - playsound(src, W.usesound, 50, 1) - to_chat(user, "You screw the circuit electronics into place.") - else if(has_electronics == APC_HAS_ELECTRONICS_SECURED) - has_electronics = APC_HAS_ELECTRONICS_WIRED - stat |= MAINT - playsound(src, W.usesound, 50, 1) - to_chat(user, "You unfasten the electronics.") - else /* has_electronics == APC_HAS_ELECTRONICS_NONE */ - to_chat(user, "There is nothing to secure.") - return - update_icon() - else - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"].") - playsound(src, W.usesound, 50, 1) - update_icon() - - else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card - togglelock(user) - - else if(istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) - var/turf/T = loc - if(istype(T) && !T.is_plating()) - to_chat(user, "You must remove the floor plating in front of the APC first.") - return - var/obj/item/stack/cable_coil/C = W - if(C.get_amount() < 10) - to_chat(user, "You need ten lengths of cable for that.") - return - user.visible_message("[user.name] adds cables to the APC frame.", \ - "You start adding cables to the APC frame...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20)) - if(C.get_amount() >= 10 && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) - var/obj/structure/cable/N = T.get_cable_node() - if(prob(50) && electrocute_mob(usr, N, N)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(user.stunned) - return - C.use(10) - user.visible_message(\ - "[user.name] has added cables to the APC frame!",\ - "You add cables to the APC frame.") - make_terminal() - terminal.connect_to_network() - else if(W.has_tool_quality(TOOL_WIRECUTTER) && terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) - var/turf/T = loc - if(istype(T) && !T.is_plating()) - to_chat(user, "You must remove the floor plating in front of the APC first.") - return - user.visible_message("[user.name] starts dismantling the [src]'s power terminal.", \ - "You begin to cut the cables...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 50 * W.toolspeed)) - if(terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) - if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(usr.stunned) - return - new /obj/item/stack/cable_coil(loc,10) - to_chat(user, "You cut the cables and dismantle the power terminal.") - qdel(terminal) - else if(istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && !((stat & BROKEN))) - user.visible_message("[user.name] inserts the power control board into [src].", \ - "You start to insert the power control board into the frame...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 10)) - if(has_electronics == APC_HAS_ELECTRONICS_NONE) - has_electronics = APC_HAS_ELECTRONICS_WIRED - reboot() - to_chat(user, "You place the power control board inside the frame.") - qdel(W) - else if(istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && ((stat & BROKEN))) - to_chat(user, "The [src] is too broken for that. Repair it first.") - return - else if(W.has_tool_quality(TOOL_WELDER) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && !terminal) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(WT.get_fuel() < 3) - to_chat(user, "You need more welding fuel to complete this task.") - return - user.visible_message("[user.name] begins cutting apart [src] with the [WT.name].", \ - "You start welding the APC frame...", \ - "You hear welding.") - playsound(src, WT.usesound, 25, 1) - if(do_after(user, 50 * WT.toolspeed)) - if(!src || !WT.remove_fuel(3, user)) return - if(emagged || (stat & BROKEN) || opened==2) - new /obj/item/stack/material/steel(loc) - user.visible_message(\ - "[src] has been cut apart by [user.name] with the [WT.name].",\ - "You disassembled the broken APC frame.",\ - "You hear welding.") - else - new /obj/item/frame/apc(loc) - user.visible_message(\ - "[src] has been cut from the wall by [user.name] with the [WT.name].",\ - "You cut the APC frame from the wall.",\ - "You hear welding.") - qdel(src) - return - else if(opened && ((stat & BROKEN) || hacker || emagged)) - if(istype(W, /obj/item/frame/apc) && (stat & BROKEN)) - if(cell) - to_chat(user, "You need to remove the power cell first.") - return - user.visible_message("[user.name] begins replacing the damaged APC cover with a new one.",\ - "You begin to replace the damaged APC cover...") - if(do_after(user, 50)) - user.visible_message("[user.name] has replaced the damaged APC cover with a new one.",\ - "You replace the damaged APC cover with a new one.") - qdel(W) - stat &= ~BROKEN - reboot() - if(opened==2) - opened = 1 - update_icon() - else if(istype(W, /obj/item/device/multitool) && (hacker || emagged)) - if(cell) - to_chat(user, "You need to remove the power cell first.") - return - user.visible_message("[user.name] connects their [W.name] to the APC and begins resetting it.",\ - "You begin resetting the APC...") - if(do_after(user, 50)) - user.visible_message("[user.name] resets the APC with a beep from their [W.name].",\ - "You finish resetting the APC.") - playsound(src, 'sound/machines/chime.ogg', 25, 1) - reboot() - else - if((stat & BROKEN) \ - && !opened \ - && W.force >= 5 \ - && W.w_class >= ITEMSIZE_SMALL ) - user.visible_message("The [name] has been hit with the [W.name] by [user.name]!", \ - "You hit the [name] with your [W.name]!", \ - "You hear a bang!") - if(prob(20)) - opened = 2 - user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ - "You knock down the APC cover with your [W.name]!", \ - "You hear a bang!") - update_icon() - else - if(istype(user, /mob/living/silicon)) - return attack_hand(user) - if(!opened && wiresexposed && (istype(W, /obj/item/device/multitool) || W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/assembly/signaler))) - return attack_hand(user) - //Placeholder until someone can do take_damage() for APCs or something. - to_chat(user, "The [name] looks too sturdy to bash open with \the [W.name].") - -// attack with hand - remove cell (if cover open) or interact with the APC -/obj/machinery/power/apc/verb/togglelock(mob/user as mob) - if(emagged) - to_chat(user, "The panel is unresponsive.") - else if(opened) - to_chat(user, "You must close the cover to swipe an ID card.") - else if(wiresexposed) - to_chat(user, "You must close the wire panel.") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") - else if(hacker) - to_chat(user, "Access denied.") - else - if(allowed(user) && !wires.is_cut(WIRE_IDSCAN)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") - update_icon() - else - to_chat(user, "Access denied.") - -/obj/machinery/power/apc/AltClick(mob/user) - ..() - togglelock(user) - -/obj/machinery/power/apc/emag_act(var/remaining_charges, var/mob/user) - if(!(emagged || hacker)) // trying to unlock with an emag card - if(opened) - to_chat(user, "You must close the cover to do that.") - else if(wiresexposed) - to_chat(user, "You must close the wire panel first.") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "The [src] isn't working.") - else - flick("apc-spark", src) - if(do_after(user,6)) - emagged = 1 - locked = 0 - to_chat(user, "You emag the APC interface.") - update_icon() - return 1 - -/obj/machinery/power/apc/blob_act() - if(!wires.is_all_cut()) - wiresexposed = TRUE - wires.cut_all() - update_icon() - -/obj/machinery/power/apc/attack_hand(mob/user) - if(!user) - return - add_fingerprint(user) - - //Human mob special interaction goes here. - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - - if(H.species.can_shred(H)) - user.setClickCooldown(user.get_attack_speed()) - user.visible_message("[user.name] slashes at the [name]!", "You slash at the [name]!") - playsound(src, 'sound/weapons/slash.ogg', 100, 1) - - var/allcut = wires.is_all_cut() - - if(beenhit >= pick(3, 4) && wiresexposed != 1) - wiresexposed = 1 - update_icon() - visible_message("The [name]'s cover flies open, exposing the wires!") - - else if(wiresexposed == 1 && allcut == 0) - wires.cut_all() - update_icon() - visible_message("The [name]'s wires are shredded!") - else - beenhit += 1 - return - - if(usr == user && opened && (!issilicon(user))) - if(cell) - user.put_in_hands(cell) - cell.add_fingerprint(user) - cell.update_icon() - - cell = null - user.visible_message("[user.name] removes the power cell from [name]!",\ - "You remove the power cell.") - charging = 0 - update_icon() - return - if(stat & (BROKEN|MAINT)) - return - // do APC interaction - interact(user) - -/obj/machinery/power/apc/attack_ghost(mob/user) - if(panel_open) - return wires.Interact(user) - return tgui_interact(user) - -/obj/machinery/power/apc/interact(mob/user) - if(!user) - return - - if(wiresexposed && !istype(user, /mob/living/silicon/ai)) - wires.Interact(user) - return //The panel is visibly dark when the wires are exposed, so we shouldn't be able to interact with it. - - return tgui_interact(user) - -/obj/machinery/power/apc/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "APC", name) // 510, 460 - ui.open() - -/obj/machinery/power/apc/tgui_data(mob/user) - var/list/data = list( - "locked" = locked, - "normallyLocked" = locked, - "emagged" = emagged, - "isOperating" = operating, - "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, - "chargeMode" = chargemode, - "chargingStatus" = charging, - "totalLoad" = round(lastused_total), - "totalCharging" = round(lastused_charging), - "failTime" = failure_timer * 2, - "gridCheck" = grid_check, - "coverLocked" = coverlocked, - "siliconUser" = issilicon(user) || (isobserver(user) && is_admin(user)), //I add observer here so admins can have more control, even if it makes 'siliconUser' seem inaccurate. - "emergencyLights" = !emergency_lights, - "nightshiftLights" = nightshift_lights, - "nightshiftSetting" = nightshift_setting, - - "powerChannels" = list( - list( - "title" = "Equipment", - "powerLoad" = lastused_equip, - "status" = equipment, - "topicParams" = list( - "auto" = list("eqp" = 3), - "on" = list("eqp" = 2), - "off" = list("eqp" = 1) - ) - ), - list( - "title" = "Lighting", - "powerLoad" = round(lastused_light), - "status" = lighting, - "topicParams" = list( - "auto" = list("lgt" = 3), - "on" = list("lgt" = 2), - "off" = list("lgt" = 1) - ) - ), - list( - "title" = "Environment", - "powerLoad" = round(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/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 && !grid_check && !failure_timer) - area.power_light = (lighting >= POWERCHAN_ON) - area.power_equip = (equipment >= POWERCHAN_ON) - area.power_environ = (environ >= POWERCHAN_ON) -// if(area.name == "AI Chamber") -// spawn(10) -// to_world(" [area.name] [area.power_equip]") - else - area.power_light = 0 - area.power_equip = 0 - area.power_environ = 0 -// if(area.name == "AI Chamber") -// to_world("[area.power_equip]") - area.power_change() - -/obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic() - if(!user.client) - return 0 - if(isobserver(user) && is_admin(user)) //This is to allow nanoUI interaction by ghost admins. - return 1 - if(user.stat) - return 0 - if(inoperable()) - return 0 - if(!user.IsAdvancedToolUser()) - return 0 - if(user.restrained()) - to_chat(user, "Your hands must be free to use [src].") - return 0 - if(user.lying) - to_chat(user, "You must stand to use [src]!") - return 0 - autoflag = 5 - if(istype(user, /mob/living/silicon)) - var/permit = 0 // Malfunction variable. If AI hacks APC it can control it even without AI control wire. - var/mob/living/silicon/ai/AI = user - var/mob/living/silicon/robot/robot = user - if(hacker) - if(hacker == AI) - permit = 1 - else if(istype(robot) && robot.connected_ai && robot.connected_ai == hacker) // Cyborgs can use APCs hacked by their AI - permit = 1 - - if(aidisabled && !permit) - if(!loud) - to_chat(user, "\The AI control for [src] has been disabled!") - return 0 - else - if(!in_range(src, user) || !istype(loc, /turf)) - return 0 - var/mob/living/carbon/human/H = user - if(istype(H) && prob(H.getBrainLoss())) - to_chat(user, "You momentarily forget how to use [src].") - return 0 - return 1 - -/obj/machinery/power/apc/tgui_act(action, params) - if(..() || !can_use(usr, TRUE)) - return TRUE - - // There's a handful of cases where we want to allow users to bypass the `locked` variable. - // If can_admin_interact() wasn't only defined on observers, this could just be part of a single-line - // conditional. - var/locked_exception = FALSE - if(issilicon(usr) || action == "nightshift") - locked_exception = TRUE - if(isobserver(usr)) - var/mob/observer/dead/D = usr - if(D.can_admin_interact()) - locked_exception = TRUE - - if(locked && !locked_exception) - return - - . = TRUE - switch(action) - if("lock") - if(locked_exception) // Yay code reuse - if(emagged || (stat & (BROKEN|MAINT))) - to_chat(usr, "The APC does not respond to the command.") - return - locked = !locked - update_icon() - if("cover") - coverlocked = !coverlocked - if("breaker") - toggle_breaker() - if("nightshift") - if(last_nightshift_switch > world.time - 10 SECONDS) // don't spam... - to_chat(usr, "[src]'s night lighting circuit breaker is still cycling!") - return 0 - last_nightshift_switch = world.time - nightshift_setting = params["nightshift"] - update_nightshift() - if("charge") - chargemode = !chargemode - if(!chargemode) - charging = 0 - update_icon() - 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() - 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 - if("overload") - if(locked_exception) // Reusing for simplicity! - overload_lighting() - -/obj/machinery/power/apc/proc/toggle_breaker() - operating = !operating - update() - update_icon() - -/obj/machinery/power/apc/surplus() - if(terminal) - return terminal.surplus() - else - return 0 - -/obj/machinery/power/apc/proc/last_surplus() - if(terminal && terminal.powernet) - return terminal.powernet.last_surplus() - else - return 0 - -//Returns 1 if the APC should attempt to charge -/obj/machinery/power/apc/proc/attempt_charging() - return (chargemode && charging == 1 && operating) - - -/obj/machinery/power/apc/draw_power(var/amount) - if(terminal && terminal.powernet) - return terminal.powernet.draw_power(amount) - return 0 - -/obj/machinery/power/apc/avail() - if(terminal) - return terminal.avail() - else - return 0 - -/obj/machinery/power/apc/process() - if(!area.requires_power) - return PROCESS_KILL - if(stat & (BROKEN|MAINT)) - return - if(failure_timer) - update() - queue_icon_update() - failure_timer-- - force_update = 1 - return - - lastused_light = area.usage(LIGHT, lighting >= POWERCHAN_ON) - lastused_equip = area.usage(EQUIP, equipment >= POWERCHAN_ON) - lastused_environ = area.usage(ENVIRON, environ >= POWERCHAN_ON) - 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(!avail()) - main_status = APC_EXTERNAL_POWER_NOTCONNECTED - else if(excess < 0) - main_status = APC_EXTERNAL_POWER_NOENERGY - else - main_status = APC_EXTERNAL_POWER_GOOD - - if(debug) - log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") - - if(cell && !shorted && !grid_check) - // draw power from cell as before to power the area - var/cellused = min(cell.charge, 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 - var/draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell - cell.give(draw * CELLRATE) - else // no excess, and not enough per-apc - if( (cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - var/draw = draw_power(excess) - cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * draw) //recharge with what we can - charging = 0 - else // not enough power available to run the last tick! - charging = 0 - 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) - autoflag = 0 - - - // Set channels depending on how much charge we have left - update_channels() - - // now trickle-charge the cell - lastused_charging = 0 // Clear the variable for new use. - if(attempt_charging()) - if(excess > 0) // check to make sure we have enough to charge - // Max charge is capped to % per second constant - var/ch = min(excess*CELLRATE, cell.maxcharge*chargelevel) - - ch = draw_power(ch/CELLRATE) // Removes the power we're taking from the grid - cell.give(ch*CELLRATE) // actually recharge the cell - lastused_charging = ch - lastused_total += ch // Sensors need this to stop reporting APC charging as "Other" load - else - charging = 0 // stop charging - chargecount = 0 - - // show cell as fully charged if so - if(cell.charge >= cell.maxcharge) - cell.charge = cell.maxcharge - charging = 2 - - if(chargemode) - if(!charging) - if(excess > cell.maxcharge*chargelevel) - chargecount++ - else - chargecount = 0 - - if(chargecount >= 10) - - chargecount = 0 - charging = 1 - - else // chargemode off - charging = 0 - chargecount = 0 - - else // no cell, switch everything off - charging = 0 - chargecount = 0 - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) - autoflag = 0 - - // 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() - -/obj/machinery/power/apc/proc/update_channels() - // 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.percent() > 30) || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 - if(autoflag != 3) - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - autoflag = 3 - power_alarm.clearAlarm(loc, src) - else if((cell.percent() <= 30) && (cell.percent() > 15) && longtermpower < 0) // <30%, turn off equipment - if(autoflag != 2) - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) - autoflag = 2 - else if(cell.percent() <= 15) // <15%, turn off lighting & equipment - if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0)) - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) - autoflag = 1 - else // zero charge, turn all off - if(autoflag != 0) - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) - autoflag = 0 - -// val 0=off, 1=off(auto) 2=on 3=on(auto) -// on 0=off, 1=on, 2=autooff -// defines a state machine, returns the new state -/obj/machinery/power/apc/proc/autoset(var/cur_state, var/on) - switch(cur_state) - //if(POWERCHAN_OFF); //autoset will never turn on a channel set to off - if(POWERCHAN_OFF_AUTO) - if(on == 1) - return POWERCHAN_ON_AUTO - if(POWERCHAN_ON) - if(on == 0) - return POWERCHAN_OFF - if(POWERCHAN_ON_AUTO) - if(on == 0 || on == 2) - return POWERCHAN_OFF_AUTO - - return cur_state //leave unchanged - - -// damage and destruction acts -/obj/machinery/power/apc/emp_act(severity) - // Fail for 8-12 minutes (divided by severity) - // Division by 2 is required, because machinery ticks are every two seconds. Without it we would fail for 16-24 minutes. - if(is_critical) - // Critical APCs are considered EMP shielded and will be offline only for about half minute. Prevents AIs being one-shot disabled by EMP strike. - // Critical APCs are also more resilient to cell corruption/power drain. - energy_fail(rand(240, 360) / severity / CRITICAL_APC_EMP_PROTECTION) - if(cell) - cell.emp_act(severity+2) - else - // Regular APCs fail for normal time. - energy_fail(rand(240, 360) / severity) - //Cells are partially shielded by the APC frame. - if(cell) - cell.emp_act(severity+1) - - update_icon() - ..() - -/obj/machinery/power/apc/ex_act(severity) - - switch(severity) - if(1) - //set_broken() //now qdel() do what we need - if(cell) - cell.ex_act(1) // more lags woohoo - qdel(src) - return - if(2) - if(prob(75)) - set_broken() - if(cell && prob(50)) - cell.ex_act(2) - if(3) - if(prob(50)) - set_broken() - if(cell && prob(50)) - cell.ex_act(3) - if(4) - if(prob(25)) - set_broken() - if(cell && prob(50)) - cell.ex_act(3) - return - -/obj/machinery/power/apc/disconnect_terminal(var/obj/machinery/power/terminal/term) - if(terminal) - terminal.master = null - terminal = null - -/obj/machinery/power/apc/proc/set_broken() - // Aesthetically much better! - spawn(rand(2,5)) - visible_message("[src]'s screen flickers suddenly, then explodes in a rain of sparks and small debris!") - stat |= BROKEN - operating = 0 - update_icon() - update() - -// overload the lights in this APC area - -/obj/machinery/power/apc/proc/overload_lighting(var/chance = 100) - if(/* !get_connection() || */ !operating || shorted || grid_check) - return - if( cell && cell.charge>=20) - cell.use(20); - spawn(0) - for(var/obj/machinery/light/L in area) - if(prob(chance)) - L.on = 1 - L.broken() - sleep(1) - -/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 - -// Malfunction: Transfers APC under AI's control -/obj/machinery/power/apc/proc/ai_hack(var/mob/living/silicon/ai/A = null) - if(!A || !A.hacked_apcs || hacker || aidisabled || A.stat == DEAD) - return 0 - hacker = A - A.hacked_apcs += src - locked = 1 - update_icon() - return 1 - -/obj/machinery/power/apc/proc/reboot() - //reset various counters so that process() will start fresh - charging = initial(charging) - chargecount = initial(chargecount) - autoflag = initial(autoflag) - longtermpower = initial(longtermpower) - failure_timer = initial(failure_timer) - - //start with main breaker off, chargemode in the default state and all channels on auto upon reboot - operating = 0 - chargemode = initial(chargemode) - power_alarm.clearAlarm(loc, src) - - lighting = POWERCHAN_ON_AUTO - equipment = POWERCHAN_ON_AUTO - environ = POWERCHAN_ON_AUTO - - //If malf AI had this APC before, they don't now. - if(hacker && hacker.hacked_apcs && (src in hacker.hacked_apcs)) - hacker.hacked_apcs -= src - hacker = null - - emagged = initial(emagged) //Resets emagging, too. - - update_icon() - update() - -/obj/machinery/power/apc/overload(var/obj/machinery/power/source) - if(is_critical) - return - - if(prob(30)) // Nothing happens. - return - - if(prob(40)) // Lights blow. - overload_lighting() - - if(prob(40)) // Spooky flickers. - for(var/obj/machinery/light/L in area) - L.flicker(rand(20,30)) - - if(prob(25)) // Bluescreens. - emagged = 1 - locked = 0 - update_icon() - - if(prob(25)) // Cell gets damaged. - if(cell) - cell.corrupt() - - if(prob(10)) // Computers get broken. - for(var/obj/machinery/computer/comp in area) - comp.ex_act(3) - - if(prob(5)) // APC completely ruined. - set_broken() - -/obj/machinery/power/apc/do_grid_check() - if(is_critical) - return - grid_check = TRUE - spawn(15 MINUTES) // Protection against someone deconning the grid checker after a grid check happens, preventing infinte blackout. - if(src && grid_check == TRUE) - grid_check = FALSE - -/obj/machinery/power/apc/proc/set_nightshift(on, var/automated) - set waitfor = FALSE - if(automated && istype(area, /area/shuttle)) - return - nightshift_lights = on - update_nightshift() - -/obj/machinery/power/apc/proc/update_nightshift() - var/new_state = nightshift_lights - - switch(nightshift_setting) - if(NIGHTSHIFT_NEVER) - new_state = FALSE - if(NIGHTSHIFT_ALWAYS) - new_state = TRUE - - for(var/obj/machinery/light/L in area) - L.nightshift_mode(new_state) - L.update() //For some reason it gets hung up on updating the overlay for the light fixture somewhere down the line. This fixes it. - CHECK_TICK - -#undef APC_UPDATE_ICON_COOLDOWN - -#undef APC_EXTERNAL_POWER_NOTCONNECTED -#undef APC_EXTERNAL_POWER_NOENERGY -#undef APC_EXTERNAL_POWER_GOOD - -#undef APC_HAS_ELECTRONICS_NONE -#undef APC_HAS_ELECTRONICS_WIRED -#undef APC_HAS_ELECTRONICS_SECURED +GLOBAL_LIST_EMPTY(apcs) + +#define CRITICAL_APC_EMP_PROTECTION 10 // EMP effect duration is divided by this number if the APC has "critical" flag +//update_state +#define UPDATE_CELL_IN 1 +#define UPDATE_OPENED1 2 +#define UPDATE_OPENED2 4 +#define UPDATE_MAINT 8 +#define UPDATE_BROKE 16 +#define UPDATE_BLUESCREEN 32 +#define UPDATE_WIREEXP 64 +#define UPDATE_ALLGOOD 128 + +//update_overlay +#define APC_UPOVERLAY_CHARGEING0 1 +#define APC_UPOVERLAY_CHARGEING1 2 +#define APC_UPOVERLAY_CHARGEING2 4 +#define APC_UPOVERLAY_EQUIPMENT0 8 +#define APC_UPOVERLAY_EQUIPMENT1 16 +#define APC_UPOVERLAY_EQUIPMENT2 32 +#define APC_UPOVERLAY_LIGHTING0 64 +#define APC_UPOVERLAY_LIGHTING1 128 +#define APC_UPOVERLAY_LIGHTING2 256 +#define APC_UPOVERLAY_ENVIRON0 512 +#define APC_UPOVERLAY_ENVIRON1 1024 +#define APC_UPOVERLAY_ENVIRON2 2048 +#define APC_UPOVERLAY_LOCKED 4096 +#define APC_UPOVERLAY_OPERATING 8192 + +#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds + +// main_status var +#define APC_EXTERNAL_POWER_NOTCONNECTED 0 +#define APC_EXTERNAL_POWER_NOENERGY 1 +#define APC_EXTERNAL_POWER_GOOD 2 + +// has_electronics var +#define APC_HAS_ELECTRONICS_NONE 0 +#define APC_HAS_ELECTRONICS_WIRED 1 +#define APC_HAS_ELECTRONICS_SECURED 2 + + +// the Area Power Controller (APC), formerly Power Distribution Unit (PDU) +// one per area, needs wire conection 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 +#define POWERCHAN_OFF 0 // Power channel is off and will stay that way dammit +#define POWERCHAN_OFF_AUTO 1 // Power channel is off until power rises above a threshold +#define POWERCHAN_ON 2 // Power channel is on until there is no power +#define POWERCHAN_ON_AUTO 3 // Power channel is on until power drops below a threshold + +#define NIGHTSHIFT_AUTO 1 +#define NIGHTSHIFT_NEVER 2 +#define NIGHTSHIFT_ALWAYS 3 + +//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx + +/obj/machinery/power/apc/critical + is_critical = 1 + +/obj/machinery/power/apc/high + cell_type = /obj/item/weapon/cell/high + +/obj/machinery/power/apc/super + cell_type = /obj/item/weapon/cell/super + +/obj/machinery/power/apc/super/critical + is_critical = 1 + +/obj/machinery/power/apc/hyper + cell_type = /obj/item/weapon/cell/hyper + +/obj/machinery/power/apc/alarms_hidden + alarms_hidden = TRUE + +/obj/machinery/power/apc/angled + icon = 'icons/obj/wall_machines_angled.dmi' + +/obj/machinery/power/apc/angled/hidden + alarms_hidden = TRUE + +/obj/machinery/power/apc/angled/offset_apc() + pixel_x = (dir & 3) ? 0 : (dir == 4 ? 24 : -24) + pixel_y = (dir & 3) ? (dir == 1 ? 20 : -20) : 0 + +/obj/machinery/power/apc + name = "area power controller" + desc = "A control terminal for the area electrical systems." + icon = 'icons/obj/power.dmi' + icon_state = "apc0" + layer = ABOVE_WINDOW_LAYER + anchored = TRUE + unacidable = TRUE + use_power = USE_POWER_OFF + clicksound = "switch" + req_access = list(access_engine_equip) + blocks_emissive = FALSE + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature + var/area/area + var/areastring = null + var/obj/item/weapon/cell/cell + var/chargelevel = 0.0005 // Cap for how fast APC cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) + var/start_charge = 90 // initial cell charge % + var/cell_type = /obj/item/weapon/cell/apc + var/opened = 0 //0=closed, 1=opened, 2=cover removed + var/shorted = 0 + var/grid_check = FALSE + var/lighting = POWERCHAN_ON_AUTO + var/equipment = POWERCHAN_ON_AUTO + var/environ = POWERCHAN_ON_AUTO + var/operating = 1 + var/charging = 0 + var/chargemode = 1 + var/chargecount = 0 + var/locked = 1 + var/coverlocked = 1 + var/aidisabled = 0 + var/obj/machinery/power/terminal/terminal = null + var/lastused_light = 0 + var/lastused_equip = 0 + var/lastused_environ = 0 + var/lastused_charging = 0 + var/lastused_total = 0 + var/main_status = APC_EXTERNAL_POWER_NOTCONNECTED + var/mob/living/silicon/ai/hacker = null // Malfunction var. If set AI hacked the APC and has full control. + var/wiresexposed = 0 + powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( + var/debug= 0 + var/autoflag= 0 // 0 = off, 1= eqp and lights off, 2 = eqp off, 3 = all on. + var/has_electronics = APC_HAS_ELECTRONICS_NONE // 0 - none, 1 - plugged in, 2 - secured by screwdriver + var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment + var/longtermpower = 10 + var/datum/wires/apc/wires = null + var/emergency_lights = FALSE + var/update_state = -1 + var/update_overlay = -1 + var/is_critical = 0 + var/global/status_overlays = 0 + var/failure_timer = 0 + var/force_update = 0 + var/updating_icon = 0 + var/global/list/status_overlays_environ + var/alarms_hidden = FALSE //If power alarms from this APC are visible on consoles + + var/nightshift_lights = FALSE + var/nightshift_setting = NIGHTSHIFT_AUTO + var/last_nightshift_switch = 0 + +/obj/machinery/power/apc/updateDialog() + if(stat & (BROKEN|MAINT)) + return + ..() + +/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) + make_terminal() + if(terminal) + terminal.connect_to_network() + +/obj/machinery/power/apc/drain_power(var/drain_check, var/surge, var/amount = 0) + + if(drain_check) + return 1 + + //This makes sure fully draining an APC cell won't break the cell charging. + charging = 0 + + var/drained_energy = 0 + + //Draws power from the grid first, if available. + //This is like draining from a cable, so nins and + //twizs can do that without having to pry floortiles. + if(terminal && terminal.powernet) + terminal.powernet.trigger_warning() + drained_energy += terminal.powernet.draw_power(amount) + + //The grid rarely gives the full amount requested, or perhaps the grid + //isn't connected (wire cut), in either case we draw what we didn't get + //from the cell instead. + if((drained_energy < amount) && cell) + drained_energy += cell.drain_power(0, 0, (amount - drained_energy)) + + return drained_energy + +/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) + ..() + wires = new(src) + GLOB.apcs += 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) + set_dir(ndir) + + if(!pixel_x && !pixel_y) + offset_apc() + + if(building) + area = get_area(src) + area.apc = src + opened = 1 + operating = 0 + name = "[area.name] APC" + stat |= MAINT + update_icon() + +/obj/machinery/power/apc/Initialize(mapload, ndir, building) + . = ..() + if(!building) + init() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/power/apc/LateInitialize() + . = ..() + update() + +/obj/machinery/power/apc/Destroy() + GLOB.apcs -= src + update() + area.apc = null + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 + area.power_change() + qdel(wires) + wires = null + qdel(terminal) + terminal = null + if(cell) + cell.forceMove(loc) + cell = null + + // Malf AI, removes the APC from AI's hacked APCs list. + if((hacker) && (hacker.hacked_apcs) && (src in hacker.hacked_apcs)) + hacker.hacked_apcs -= src + + return ..() + +/obj/machinery/power/apc/proc/offset_apc() + pixel_x = (dir & 3) ? 0 : (dir == 4 ? 26 : -26) + pixel_y = (dir & 3) ? (dir == 1 ? 26 : -26) : 0 + +// APCs are pixel-shifted, so they need to be updated. +/obj/machinery/power/apc/set_dir(new_dir) + ..() + offset_apc() + if(terminal) + terminal.disconnect_from_network() + terminal.set_dir(dir) // Terminal has same dir as master + terminal.connect_to_network() // Refresh the network the terminal is connected to. + return + +/obj/machinery/power/apc/proc/energy_fail(var/duration) + failure_timer = max(failure_timer, round(duration)) + +/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.set_dir(dir) + terminal.master = src + +/obj/machinery/power/apc/proc/init() + has_electronics = APC_HAS_ELECTRONICS_SECURED //installed and secured + // is starting with a power cell installed, create it and set its charge level + if(cell_type) + cell = new cell_type(src) + cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value) + + var/area/A = loc.loc + + //if area isn't specified use current + if(isarea(A) && !areastring) + area = A + name = "\improper [area.name] APC" + else + area = get_area_name(areastring) + name = "\improper [area.name] APC" + area.apc = src + + if(istype(area, /area/submap)) + alarms_hidden = TRUE + + update_icon() + + make_terminal() + +/obj/machinery/power/apc/examine(mob/user) + . = ..() + if(Adjacent(user)) + if(stat & BROKEN) + . += "This APC is broken." + + else if(opened) + if(has_electronics && terminal) + . += "The cover is [opened == 2 ? "removed" : "open"] and [ cell ? "a power cell is installed" : "the power cell is missing"]." + else if(!has_electronics && terminal) + . += "The frame is wired, but the electronics are missing." + else if(has_electronics && !terminal) + . += "The electronics are installed, but not wired." + else /* if(!has_electronics && !terminal) */ + . += "It's just an empty metal frame." + + else + if(wiresexposed) + . += "The cover is closed and the wires are exposed." + else if((locked && emagged) || hacker) //Some things can cause locked && emagged. Malf AI causes hacker. + . += "The cover is closed, but the panel is unresponsive." + else if(!locked && emagged) //Normal emag does this. + . += "The cover is closed, but the panel is flashing an error." + else + . += "The cover is closed." + + +// 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) + return + + if(update & 1) // Updating the icon state + if(update_state & UPDATE_ALLGOOD) + icon_state = "apc0" + else if(update_state & (UPDATE_OPENED1|UPDATE_OPENED2)) + var/basestate = "apc[ cell ? "2" : "1" ]" + if(update_state & UPDATE_OPENED1) + if(update_state & (UPDATE_MAINT|UPDATE_BROKE)) + icon_state = "apcmaint" //disabled APC cannot hold cell + else + icon_state = basestate + else if(update_state & UPDATE_OPENED2) + icon_state = "[basestate]-nocover" + else if(update_state & UPDATE_BROKE) + icon_state = "apc-b" + else if(update_state & UPDATE_WIREEXP) + icon_state = "apcewires" + else if(update_state & UPDATE_BLUESCREEN) + icon_state = "apcemag" + + if(!(update_state & UPDATE_ALLGOOD)) + cut_overlays() + return + + if(update & 2) + cut_overlays() + if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) + var/list/new_overlays = list() + new_overlays += mutable_appearance(icon, "apcox-[locked]") + new_overlays += emissive_appearance(icon, "apcox-[locked]") + new_overlays += mutable_appearance(icon, "apco3-[charging]") + new_overlays += emissive_appearance(icon, "apco3-[charging]") + if(operating) + new_overlays += mutable_appearance(icon, "apco0-[equipment]") + new_overlays += emissive_appearance(icon, "apco0-[equipment]") + new_overlays += mutable_appearance(icon, "apco1-[lighting]") + new_overlays += emissive_appearance(icon, "apco1-[lighting]") + new_overlays += mutable_appearance(icon, "apco2-[environ]") + new_overlays += emissive_appearance(icon, "apco2-[environ]") + add_overlay(new_overlays) + + if(update & 3) + if(update_state & UPDATE_BLUESCREEN) + set_light(l_range = 2, l_power = 0.25, l_color = "#0000FF") + else if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) + var/color + switch(charging) + if(0) + color = "#F86060" + if(1) + color = "#A8B0F8" + if(2) + color = "#82FF4C" + set_light(l_range = 2, l_power = 0.25, l_color = color) + else + set_light(0) + +/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 |= UPDATE_CELL_IN + if(stat & BROKEN) + update_state |= UPDATE_BROKE + if(stat & MAINT) + update_state |= UPDATE_MAINT + if(opened) + if(opened==1) + update_state |= UPDATE_OPENED1 + if(opened==2) + update_state |= UPDATE_OPENED2 + else if(wiresexposed) + update_state |= UPDATE_WIREEXP + else if(emagged || hacker || failure_timer) + update_state |= UPDATE_BLUESCREEN + if(update_state <= 1) + update_state |= UPDATE_ALLGOOD + + if(operating) + update_overlay |= APC_UPOVERLAY_OPERATING + + if(update_state & UPDATE_ALLGOOD) + if(locked) + update_overlay |= APC_UPOVERLAY_LOCKED + + if(!charging) + update_overlay |= APC_UPOVERLAY_CHARGEING0 + else if(charging == 1) + update_overlay |= APC_UPOVERLAY_CHARGEING1 + else if(charging == 2) + 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() + + if(!updating_icon) + updating_icon = 1 + // Start the update + spawn(APC_UPDATE_ICON_COOLDOWN) + update_icon() + updating_icon = 0 + +//attack with an item - open/close cover, insert cell, or (un)lock interface + +/obj/machinery/power/apc/attackby(obj/item/W, mob/user) + if(issilicon(user) && get_dist(src,user) > 1) + return attack_hand(user) + add_fingerprint(user) + if(W.has_tool_quality(TOOL_CROWBAR) && opened) + if(has_electronics == APC_HAS_ELECTRONICS_WIRED) + if(terminal) + to_chat(user, "Disconnect the wires first.") + return + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to remove the power control board...") //lpeters - fixed grammar issues //Ner - grrrrrr + if(do_after(user, 50 * W.toolspeed)) + if(has_electronics == APC_HAS_ELECTRONICS_WIRED) + has_electronics = APC_HAS_ELECTRONICS_NONE + if((stat & BROKEN)) + user.visible_message(\ + "[user.name] has broken the charred power control board inside [name]!",\ + "You broke the charred power control board and remove the remains.", + "You hear a crack!") + //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 + else + user.visible_message(\ + "[user.name] has removed the power control board from [name]!",\ + "You remove the power control board.") + new /obj/item/weapon/module/power_control(loc) + else if(opened != 2) //cover isn't removed + opened = 0 + update_icon() + else if(W.has_tool_quality(TOOL_CROWBAR) && !(stat & BROKEN) ) + if(coverlocked && !(stat & MAINT)) + to_chat(user, "The cover is locked and cannot be opened.") + return + else + opened = 1 + update_icon() + else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside + if(cell) + to_chat(user, "The [name] already has a power cell installed.") + return + if(stat & MAINT) + to_chat(user, "You need to install the wiring and electronics first.") + return + if(W.w_class != ITEMSIZE_NORMAL) + to_chat(user, "\The [W] is too [W.w_class < 3? "small" : "large"] to work here.") + return + + user.drop_item() + W.forceMove(src) + cell = W + user.visible_message(\ + "[user.name] has inserted a power cell into [name]!",\ + "You insert the power cell.") + chargecount = 0 + update_icon() + else if (W.has_tool_quality(TOOL_SCREWDRIVER)) // haxing + if(opened) + if(cell) + to_chat(user, "Remove the power cell first.") + return + else + if(has_electronics == APC_HAS_ELECTRONICS_WIRED && terminal) + has_electronics = APC_HAS_ELECTRONICS_SECURED + stat &= ~MAINT + playsound(src, W.usesound, 50, 1) + to_chat(user, "You screw the circuit electronics into place.") + else if(has_electronics == APC_HAS_ELECTRONICS_SECURED) + has_electronics = APC_HAS_ELECTRONICS_WIRED + stat |= MAINT + playsound(src, W.usesound, 50, 1) + to_chat(user, "You unfasten the electronics.") + else /* has_electronics == APC_HAS_ELECTRONICS_NONE */ + to_chat(user, "There is nothing to secure.") + return + update_icon() + else + wiresexposed = !wiresexposed + to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"].") + playsound(src, W.usesound, 50, 1) + update_icon() + + else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card + togglelock(user) + + else if(istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) + var/turf/T = loc + if(istype(T) && !T.is_plating()) + to_chat(user, "You must remove the floor plating in front of the APC first.") + return + var/obj/item/stack/cable_coil/C = W + if(C.get_amount() < 10) + to_chat(user, "You need ten lengths of cable for that.") + return + user.visible_message("[user.name] adds cables to the APC frame.", \ + "You start adding cables to the APC frame...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20)) + if(C.get_amount() >= 10 && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) + var/obj/structure/cable/N = T.get_cable_node() + if(prob(50) && electrocute_mob(usr, N, N)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if(user.stunned) + return + C.use(10) + user.visible_message(\ + "[user.name] has added cables to the APC frame!",\ + "You add cables to the APC frame.") + make_terminal() + terminal.connect_to_network() + else if(W.has_tool_quality(TOOL_WIRECUTTER) && terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) + var/turf/T = loc + if(istype(T) && !T.is_plating()) + to_chat(user, "You must remove the floor plating in front of the APC first.") + return + user.visible_message("[user.name] starts dismantling the [src]'s power terminal.", \ + "You begin to cut the cables...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 50 * W.toolspeed)) + if(terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) + if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if(usr.stunned) + return + new /obj/item/stack/cable_coil(loc,10) + to_chat(user, "You cut the cables and dismantle the power terminal.") + qdel(terminal) + else if(istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && !((stat & BROKEN))) + user.visible_message("[user.name] inserts the power control board into [src].", \ + "You start to insert the power control board into the frame...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 10)) + if(has_electronics == APC_HAS_ELECTRONICS_NONE) + has_electronics = APC_HAS_ELECTRONICS_WIRED + reboot() + to_chat(user, "You place the power control board inside the frame.") + qdel(W) + else if(istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && ((stat & BROKEN))) + to_chat(user, "The [src] is too broken for that. Repair it first.") + return + else if(W.has_tool_quality(TOOL_WELDER) && opened && has_electronics == APC_HAS_ELECTRONICS_NONE && !terminal) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(WT.get_fuel() < 3) + to_chat(user, "You need more welding fuel to complete this task.") + return + user.visible_message("[user.name] begins cutting apart [src] with the [WT.name].", \ + "You start welding the APC frame...", \ + "You hear welding.") + playsound(src, WT.usesound, 25, 1) + if(do_after(user, 50 * WT.toolspeed)) + if(!src || !WT.remove_fuel(3, user)) return + if(emagged || (stat & BROKEN) || opened==2) + new /obj/item/stack/material/steel(loc) + user.visible_message(\ + "[src] has been cut apart by [user.name] with the [WT.name].",\ + "You disassembled the broken APC frame.",\ + "You hear welding.") + else + new /obj/item/frame/apc(loc) + user.visible_message(\ + "[src] has been cut from the wall by [user.name] with the [WT.name].",\ + "You cut the APC frame from the wall.",\ + "You hear welding.") + qdel(src) + return + else if(opened && ((stat & BROKEN) || hacker || emagged)) + if(istype(W, /obj/item/frame/apc) && (stat & BROKEN)) + if(cell) + to_chat(user, "You need to remove the power cell first.") + return + user.visible_message("[user.name] begins replacing the damaged APC cover with a new one.",\ + "You begin to replace the damaged APC cover...") + if(do_after(user, 50)) + user.visible_message("[user.name] has replaced the damaged APC cover with a new one.",\ + "You replace the damaged APC cover with a new one.") + qdel(W) + stat &= ~BROKEN + reboot() + if(opened==2) + opened = 1 + update_icon() + else if(istype(W, /obj/item/device/multitool) && (hacker || emagged)) + if(cell) + to_chat(user, "You need to remove the power cell first.") + return + user.visible_message("[user.name] connects their [W.name] to the APC and begins resetting it.",\ + "You begin resetting the APC...") + if(do_after(user, 50)) + user.visible_message("[user.name] resets the APC with a beep from their [W.name].",\ + "You finish resetting the APC.") + playsound(src, 'sound/machines/chime.ogg', 25, 1) + reboot() + else + if((stat & BROKEN) \ + && !opened \ + && W.force >= 5 \ + && W.w_class >= ITEMSIZE_SMALL ) + user.visible_message("The [name] has been hit with the [W.name] by [user.name]!", \ + "You hit the [name] with your [W.name]!", \ + "You hear a bang!") + if(prob(20)) + opened = 2 + user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ + "You knock down the APC cover with your [W.name]!", \ + "You hear a bang!") + update_icon() + else + if(istype(user, /mob/living/silicon)) + return attack_hand(user) + if(!opened && wiresexposed && (istype(W, /obj/item/device/multitool) || W.has_tool_quality(TOOL_WIRECUTTER) || istype(W, /obj/item/device/assembly/signaler))) + return attack_hand(user) + //Placeholder until someone can do take_damage() for APCs or something. + to_chat(user, "The [name] looks too sturdy to bash open with \the [W.name].") + +// attack with hand - remove cell (if cover open) or interact with the APC +/obj/machinery/power/apc/verb/togglelock(mob/user as mob) + if(emagged) + to_chat(user, "The panel is unresponsive.") + else if(opened) + to_chat(user, "You must close the cover to swipe an ID card.") + else if(wiresexposed) + to_chat(user, "You must close the wire panel.") + else if(stat & (BROKEN|MAINT)) + to_chat(user, "Nothing happens.") + else if(hacker) + to_chat(user, "Access denied.") + else + if(allowed(user) && !wires.is_cut(WIRE_IDSCAN)) + locked = !locked + to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") + update_icon() + else + to_chat(user, "Access denied.") + +/obj/machinery/power/apc/AltClick(mob/user) + ..() + togglelock(user) + +/obj/machinery/power/apc/emag_act(var/remaining_charges, var/mob/user) + if(!(emagged || hacker)) // trying to unlock with an emag card + if(opened) + to_chat(user, "You must close the cover to do that.") + else if(wiresexposed) + to_chat(user, "You must close the wire panel first.") + else if(stat & (BROKEN|MAINT)) + to_chat(user, "The [src] isn't working.") + else + flick("apc-spark", src) + if(do_after(user,6)) + emagged = 1 + locked = 0 + to_chat(user, "You emag the APC interface.") + update_icon() + return 1 + +/obj/machinery/power/apc/blob_act() + if(!wires.is_all_cut()) + wiresexposed = TRUE + wires.cut_all() + update_icon() + +/obj/machinery/power/apc/attack_hand(mob/user) + if(!user) + return + add_fingerprint(user) + + //Human mob special interaction goes here. + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + + if(H.species.can_shred(H)) + user.setClickCooldown(user.get_attack_speed()) + user.visible_message("[user.name] slashes at the [name]!", "You slash at the [name]!") + playsound(src, 'sound/weapons/slash.ogg', 100, 1) + + var/allcut = wires.is_all_cut() + + if(beenhit >= pick(3, 4) && wiresexposed != 1) + wiresexposed = 1 + update_icon() + visible_message("The [name]'s cover flies open, exposing the wires!") + + else if(wiresexposed == 1 && allcut == 0) + wires.cut_all() + update_icon() + visible_message("The [name]'s wires are shredded!") + else + beenhit += 1 + return + + if(usr == user && opened && (!issilicon(user))) + if(cell) + user.put_in_hands(cell) + cell.add_fingerprint(user) + cell.update_icon() + + cell = null + user.visible_message("[user.name] removes the power cell from [name]!",\ + "You remove the power cell.") + charging = 0 + update_icon() + return + if(stat & (BROKEN|MAINT)) + return + // do APC interaction + interact(user) + +/obj/machinery/power/apc/attack_ghost(mob/user) + if(panel_open) + return wires.Interact(user) + return tgui_interact(user) + +/obj/machinery/power/apc/interact(mob/user) + if(!user) + return + + if(wiresexposed && !istype(user, /mob/living/silicon/ai)) + wires.Interact(user) + return //The panel is visibly dark when the wires are exposed, so we shouldn't be able to interact with it. + + return tgui_interact(user) + +/obj/machinery/power/apc/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "APC", name) // 510, 460 + ui.open() + +/obj/machinery/power/apc/tgui_data(mob/user) + var/list/data = list( + "locked" = locked, + "normallyLocked" = locked, + "emagged" = emagged, + "isOperating" = operating, + "externalPower" = main_status, + "powerCellStatus" = cell ? cell.percent() : null, + "chargeMode" = chargemode, + "chargingStatus" = charging, + "totalLoad" = round(lastused_total), + "totalCharging" = round(lastused_charging), + "failTime" = failure_timer * 2, + "gridCheck" = grid_check, + "coverLocked" = coverlocked, + "siliconUser" = issilicon(user) || (isobserver(user) && is_admin(user)), //I add observer here so admins can have more control, even if it makes 'siliconUser' seem inaccurate. + "emergencyLights" = !emergency_lights, + "nightshiftLights" = nightshift_lights, + "nightshiftSetting" = nightshift_setting, + + "powerChannels" = list( + list( + "title" = "Equipment", + "powerLoad" = lastused_equip, + "status" = equipment, + "topicParams" = list( + "auto" = list("eqp" = 3), + "on" = list("eqp" = 2), + "off" = list("eqp" = 1) + ) + ), + list( + "title" = "Lighting", + "powerLoad" = round(lastused_light), + "status" = lighting, + "topicParams" = list( + "auto" = list("lgt" = 3), + "on" = list("lgt" = 2), + "off" = list("lgt" = 1) + ) + ), + list( + "title" = "Environment", + "powerLoad" = round(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/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 && !grid_check && !failure_timer) + area.power_light = (lighting >= POWERCHAN_ON) + area.power_equip = (equipment >= POWERCHAN_ON) + area.power_environ = (environ >= POWERCHAN_ON) +// if(area.name == "AI Chamber") +// spawn(10) +// to_world(" [area.name] [area.power_equip]") + else + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 +// if(area.name == "AI Chamber") +// to_world("[area.power_equip]") + area.power_change() + +/obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic() + if(!user.client) + return 0 + if(isobserver(user) && is_admin(user)) //This is to allow nanoUI interaction by ghost admins. + return 1 + if(user.stat) + return 0 + if(inoperable()) + return 0 + if(!user.IsAdvancedToolUser()) + return 0 + if(user.restrained()) + to_chat(user, "Your hands must be free to use [src].") + return 0 + if(user.lying) + to_chat(user, "You must stand to use [src]!") + return 0 + autoflag = 5 + if(istype(user, /mob/living/silicon)) + var/permit = 0 // Malfunction variable. If AI hacks APC it can control it even without AI control wire. + var/mob/living/silicon/ai/AI = user + var/mob/living/silicon/robot/robot = user + if(hacker) + if(hacker == AI) + permit = 1 + else if(istype(robot) && robot.connected_ai && robot.connected_ai == hacker) // Cyborgs can use APCs hacked by their AI + permit = 1 + + if(aidisabled && !permit) + if(!loud) + to_chat(user, "\The AI control for [src] has been disabled!") + return 0 + else + if(!in_range(src, user) || !istype(loc, /turf)) + return 0 + var/mob/living/carbon/human/H = user + if(istype(H) && prob(H.getBrainLoss())) + to_chat(user, "You momentarily forget how to use [src].") + return 0 + return 1 + +/obj/machinery/power/apc/tgui_act(action, params) + if(..() || !can_use(usr, TRUE)) + return TRUE + + // There's a handful of cases where we want to allow users to bypass the `locked` variable. + // If can_admin_interact() wasn't only defined on observers, this could just be part of a single-line + // conditional. + var/locked_exception = FALSE + if(issilicon(usr) || action == "nightshift") + locked_exception = TRUE + if(isobserver(usr)) + var/mob/observer/dead/D = usr + if(D.can_admin_interact()) + locked_exception = TRUE + + if(locked && !locked_exception) + return + + . = TRUE + switch(action) + if("lock") + if(locked_exception) // Yay code reuse + if(emagged || (stat & (BROKEN|MAINT))) + to_chat(usr, "The APC does not respond to the command.") + return + locked = !locked + update_icon() + if("cover") + coverlocked = !coverlocked + if("breaker") + toggle_breaker() + if("nightshift") + if(last_nightshift_switch > world.time - 10 SECONDS) // don't spam... + to_chat(usr, "[src]'s night lighting circuit breaker is still cycling!") + return 0 + last_nightshift_switch = world.time + nightshift_setting = params["nightshift"] + update_nightshift() + if("charge") + chargemode = !chargemode + if(!chargemode) + charging = 0 + update_icon() + 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() + 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 + if("overload") + if(locked_exception) // Reusing for simplicity! + overload_lighting() + +/obj/machinery/power/apc/proc/toggle_breaker() + operating = !operating + update() + update_icon() + +/obj/machinery/power/apc/surplus() + if(terminal) + return terminal.surplus() + else + return 0 + +/obj/machinery/power/apc/proc/last_surplus() + if(terminal && terminal.powernet) + return terminal.powernet.last_surplus() + else + return 0 + +//Returns 1 if the APC should attempt to charge +/obj/machinery/power/apc/proc/attempt_charging() + return (chargemode && charging == 1 && operating) + + +/obj/machinery/power/apc/draw_power(var/amount) + if(terminal && terminal.powernet) + return terminal.powernet.draw_power(amount) + return 0 + +/obj/machinery/power/apc/avail() + if(terminal) + return terminal.avail() + else + return 0 + +/obj/machinery/power/apc/process() + if(!area.requires_power) + return PROCESS_KILL + if(stat & (BROKEN|MAINT)) + return + if(failure_timer) + update() + queue_icon_update() + failure_timer-- + force_update = 1 + return + + lastused_light = area.usage(LIGHT, lighting >= POWERCHAN_ON) + lastused_equip = area.usage(EQUIP, equipment >= POWERCHAN_ON) + lastused_environ = area.usage(ENVIRON, environ >= POWERCHAN_ON) + 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(!avail()) + main_status = APC_EXTERNAL_POWER_NOTCONNECTED + else if(excess < 0) + main_status = APC_EXTERNAL_POWER_NOENERGY + else + main_status = APC_EXTERNAL_POWER_GOOD + + if(debug) + log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") + + if(cell && !shorted && !grid_check) + // draw power from cell as before to power the area + var/cellused = min(cell.charge, 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 + var/draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell + cell.give(draw * CELLRATE) + else // no excess, and not enough per-apc + if( (cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + var/draw = draw_power(excess) + cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * draw) //recharge with what we can + charging = 0 + else // not enough power available to run the last tick! + charging = 0 + 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) + autoflag = 0 + + + // Set channels depending on how much charge we have left + update_channels() + + // now trickle-charge the cell + lastused_charging = 0 // Clear the variable for new use. + if(attempt_charging()) + if(excess > 0) // check to make sure we have enough to charge + // Max charge is capped to % per second constant + var/ch = min(excess*CELLRATE, cell.maxcharge*chargelevel) + + ch = draw_power(ch/CELLRATE) // Removes the power we're taking from the grid + cell.give(ch*CELLRATE) // actually recharge the cell + lastused_charging = ch + lastused_total += ch // Sensors need this to stop reporting APC charging as "Other" load + else + charging = 0 // stop charging + chargecount = 0 + + // show cell as fully charged if so + if(cell.charge >= cell.maxcharge) + cell.charge = cell.maxcharge + charging = 2 + + if(chargemode) + if(!charging) + if(excess > cell.maxcharge*chargelevel) + chargecount++ + else + chargecount = 0 + + if(chargecount >= 10) + + chargecount = 0 + charging = 1 + + else // chargemode off + charging = 0 + chargecount = 0 + + else // no cell, switch everything off + charging = 0 + chargecount = 0 + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) + autoflag = 0 + + // 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() + +/obj/machinery/power/apc/proc/update_channels() + // 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.percent() > 30) || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 + if(autoflag != 3) + equipment = autoset(equipment, 1) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + autoflag = 3 + power_alarm.clearAlarm(loc, src) + else if((cell.percent() <= 30) && (cell.percent() > 15) && longtermpower < 0) // <30%, turn off equipment + if(autoflag != 2) + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) + autoflag = 2 + else if(cell.percent() <= 15) // <15%, turn off lighting & equipment + if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0)) + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 2) + environ = autoset(environ, 1) + power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) + autoflag = 1 + else // zero charge, turn all off + if(autoflag != 0) + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + power_alarm.triggerAlarm(loc, src, hidden=alarms_hidden) + autoflag = 0 + +// val 0=off, 1=off(auto) 2=on 3=on(auto) +// on 0=off, 1=on, 2=autooff +// defines a state machine, returns the new state +/obj/machinery/power/apc/proc/autoset(var/cur_state, var/on) + switch(cur_state) + //if(POWERCHAN_OFF); //autoset will never turn on a channel set to off + if(POWERCHAN_OFF_AUTO) + if(on == 1) + return POWERCHAN_ON_AUTO + if(POWERCHAN_ON) + if(on == 0) + return POWERCHAN_OFF + if(POWERCHAN_ON_AUTO) + if(on == 0 || on == 2) + return POWERCHAN_OFF_AUTO + + return cur_state //leave unchanged + + +// damage and destruction acts +/obj/machinery/power/apc/emp_act(severity) + // Fail for 8-12 minutes (divided by severity) + // Division by 2 is required, because machinery ticks are every two seconds. Without it we would fail for 16-24 minutes. + if(is_critical) + // Critical APCs are considered EMP shielded and will be offline only for about half minute. Prevents AIs being one-shot disabled by EMP strike. + // Critical APCs are also more resilient to cell corruption/power drain. + energy_fail(rand(240, 360) / severity / CRITICAL_APC_EMP_PROTECTION) + if(cell) + cell.emp_act(severity+2) + else + // Regular APCs fail for normal time. + energy_fail(rand(240, 360) / severity) + //Cells are partially shielded by the APC frame. + if(cell) + cell.emp_act(severity+1) + + update_icon() + ..() + +/obj/machinery/power/apc/ex_act(severity) + + switch(severity) + if(1) + //set_broken() //now qdel() do what we need + if(cell) + cell.ex_act(1) // more lags woohoo + qdel(src) + return + if(2) + if(prob(75)) + set_broken() + if(cell && prob(50)) + cell.ex_act(2) + if(3) + if(prob(50)) + set_broken() + if(cell && prob(50)) + cell.ex_act(3) + if(4) + if(prob(25)) + set_broken() + if(cell && prob(50)) + cell.ex_act(3) + return + +/obj/machinery/power/apc/disconnect_terminal(var/obj/machinery/power/terminal/term) + if(terminal) + terminal.master = null + terminal = null + +/obj/machinery/power/apc/proc/set_broken() + // Aesthetically much better! + spawn(rand(2,5)) + visible_message("[src]'s screen flickers suddenly, then explodes in a rain of sparks and small debris!") + stat |= BROKEN + operating = 0 + update_icon() + update() + +// overload the lights in this APC area + +/obj/machinery/power/apc/proc/overload_lighting(var/chance = 100) + if(/* !get_connection() || */ !operating || shorted || grid_check) + return + if( cell && cell.charge>=20) + cell.use(20); + spawn(0) + for(var/obj/machinery/light/L in area) + if(prob(chance)) + L.on = 1 + L.broken() + sleep(1) + +/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 + +// Malfunction: Transfers APC under AI's control +/obj/machinery/power/apc/proc/ai_hack(var/mob/living/silicon/ai/A = null) + if(!A || !A.hacked_apcs || hacker || aidisabled || A.stat == DEAD) + return 0 + hacker = A + A.hacked_apcs += src + locked = 1 + update_icon() + return 1 + +/obj/machinery/power/apc/proc/reboot() + //reset various counters so that process() will start fresh + charging = initial(charging) + chargecount = initial(chargecount) + autoflag = initial(autoflag) + longtermpower = initial(longtermpower) + failure_timer = initial(failure_timer) + + //start with main breaker off, chargemode in the default state and all channels on auto upon reboot + operating = 0 + chargemode = initial(chargemode) + power_alarm.clearAlarm(loc, src) + + lighting = POWERCHAN_ON_AUTO + equipment = POWERCHAN_ON_AUTO + environ = POWERCHAN_ON_AUTO + + //If malf AI had this APC before, they don't now. + if(hacker && hacker.hacked_apcs && (src in hacker.hacked_apcs)) + hacker.hacked_apcs -= src + hacker = null + + emagged = initial(emagged) //Resets emagging, too. + + update_icon() + update() + +/obj/machinery/power/apc/overload(var/obj/machinery/power/source) + if(is_critical) + return + + if(prob(30)) // Nothing happens. + return + + if(prob(40)) // Lights blow. + overload_lighting() + + if(prob(40)) // Spooky flickers. + for(var/obj/machinery/light/L in area) + L.flicker(rand(20,30)) + + if(prob(25)) // Bluescreens. + emagged = 1 + locked = 0 + update_icon() + + if(prob(25)) // Cell gets damaged. + if(cell) + cell.corrupt() + + if(prob(10)) // Computers get broken. + for(var/obj/machinery/computer/comp in area) + comp.ex_act(3) + + if(prob(5)) // APC completely ruined. + set_broken() + +/obj/machinery/power/apc/do_grid_check() + if(is_critical) + return + grid_check = TRUE + spawn(15 MINUTES) // Protection against someone deconning the grid checker after a grid check happens, preventing infinte blackout. + if(src && grid_check == TRUE) + grid_check = FALSE + +/obj/machinery/power/apc/proc/set_nightshift(on, var/automated) + set waitfor = FALSE + if(automated && istype(area, /area/shuttle)) + return + nightshift_lights = on + update_nightshift() + +/obj/machinery/power/apc/proc/update_nightshift() + var/new_state = nightshift_lights + + switch(nightshift_setting) + if(NIGHTSHIFT_NEVER) + new_state = FALSE + if(NIGHTSHIFT_ALWAYS) + new_state = TRUE + + for(var/obj/machinery/light/L in area) + L.nightshift_mode(new_state) + L.update() //For some reason it gets hung up on updating the overlay for the light fixture somewhere down the line. This fixes it. + CHECK_TICK + +#undef APC_UPDATE_ICON_COOLDOWN + +#undef APC_EXTERNAL_POWER_NOTCONNECTED +#undef APC_EXTERNAL_POWER_NOENERGY +#undef APC_EXTERNAL_POWER_GOOD + +#undef APC_HAS_ELECTRONICS_NONE +#undef APC_HAS_ELECTRONICS_WIRED +#undef APC_HAS_ELECTRONICS_SECURED diff --git a/code/modules/power/cable_logic.dm b/code/modules/power/cable_logic.dm index 0e95350359..3b5b67a3ea 100644 --- a/code/modules/power/cable_logic.dm +++ b/code/modules/power/cable_logic.dm @@ -1,292 +1,292 @@ -#define LOGIC_HIGH 5 - -//Indicators only have one input and no outputs -/obj/machinery/logic/indicator - //Input is searched from the 'dir' direction - var/obj/structure/cable/input - -/obj/machinery/logic/indicator/process() - if(input) - return 1 - - - if(!input) - var/turf/T = get_step(src, dir) - if(T) - var/inv_dir = turn(dir, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input = C - return 1 - - return 0 //If it gets to here, it means no suitable wire to link to was found. - -/obj/machinery/logic/indicator/bulb - icon = 'icons/obj/lighting.dmi' - icon_state = "bulb0" - -/obj/machinery/logic/indicator/bulb/process() - if(!..()) //Parent proc checks if input1 exists. - return - - var/datum/powernet/pn_input = input.powernet - if(!pn_input) - return - - if(pn_input.avail >= LOGIC_HIGH) - icon_state = "bulb1" - else - icon_state = "bulb0" - - - - -//Sensors only have one output and no inputs -/obj/machinery/logic/sensor - //Output is searched from the 'dir' direction - var/obj/structure/cable/output - -/obj/machinery/logic/sensor/process() - if(output) - return 1 - - if(!output) - var/turf/T = get_step(src, dir) - if(T) - var/inv_dir = turn(dir, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - return 1 - - return 0 //If it gets to here, it means no suitable wire to link to was found. - -//Constant high generator. This will continue to send a signal of LOGIC_HIGH as long as it exists. -/obj/machinery/logic/sensor/constant_high - icon = 'icons/obj/atmospherics/outlet_injector.dmi' - icon_state = "off" - -/obj/machinery/logic/sensor/constant_high/process() - if(!..()) //Parent proc checks if input1 exists. - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) - - - - -//ONE INPUT logic elements have one input and one output -/obj/machinery/logic/oneinput - var/dir_input = 2 - var/dir_output = 1 - var/obj/structure/cable/input - var/obj/structure/cable/output - icon = 'icons/atmos/heat.dmi' - icon_state = "intact" - -/obj/machinery/logic/oneinput/process() - if(input && output) - return 1 - - if(!dir_input || !dir_output) - return 0 - - if(!input) - var/turf/T = get_step(src, dir_input) - if(T) - var/inv_dir = turn(dir_input, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input = C - - if(!output) - var/turf/T = get_step(src, dir_output) - if(T) - var/inv_dir = turn(dir_output, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - - return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. - -//NOT GATE -/obj/machinery/logic/oneinput/not/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input = input.powernet - - if(!pn_input) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( !(pn_input.avail >= LOGIC_HIGH)) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - - - - - - - - - -//TWO INPUT logic elements have two inputs and one output -/obj/machinery/logic/twoinput - var/dir_input1 = 2 - var/dir_input2 = 8 - var/dir_output = 1 - var/obj/structure/cable/input1 - var/obj/structure/cable/input2 - var/obj/structure/cable/output - icon = 'icons/obj/atmospherics/mixer.dmi' - icon_state = "intact_off" - -/obj/machinery/logic/twoinput/process() - if(input1 && input2 && output) - return 1 - - if(!dir_input1 || !dir_input2 || !dir_output) - return 0 - - if(!input1) - var/turf/T = get_step(src, dir_input1) - if(T) - var/inv_dir = turn(dir_input1, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input1 = C - - if(!input2) - var/turf/T = get_step(src, dir_input2) - if(T) - var/inv_dir = turn(dir_input2, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input2 = C - - if(!output) - var/turf/T = get_step(src, dir_output) - if(T) - var/inv_dir = turn(dir_output, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - - return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. - -//AND GATE -/obj/machinery/logic/twoinput/and/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) && (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//OR GATE -/obj/machinery/logic/twoinput/or/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) || (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//XOR GATE -/obj/machinery/logic/twoinput/xor/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) != (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//XNOR GATE (EQUIVALENCE) -/obj/machinery/logic/twoinput/xnor/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) == (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -#define RELAY_POWER_TRANSFER 2000 //How much power a relay transfers through. - -//RELAY - input1 governs the flow from input2 to output -/obj/machinery/logic/twoinput/relay/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - - if(!pn_input1) - return - - if( pn_input1.avail >= LOGIC_HIGH ) - var/datum/powernet/pn_input2 = input2.powernet - var/datum/powernet/pn_output = output.powernet - - if(!pn_output) - return - - if(pn_input2.avail >= RELAY_POWER_TRANSFER) - pn_input2.draw_power(RELAY_POWER_TRANSFER) - pn_output.newavail += RELAY_POWER_TRANSFER - - -#undef RELAY_POWER_TRANSFER +#define LOGIC_HIGH 5 + +//Indicators only have one input and no outputs +/obj/machinery/logic/indicator + //Input is searched from the 'dir' direction + var/obj/structure/cable/input + +/obj/machinery/logic/indicator/process() + if(input) + return 1 + + + if(!input) + var/turf/T = get_step(src, dir) + if(T) + var/inv_dir = turn(dir, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + input = C + return 1 + + return 0 //If it gets to here, it means no suitable wire to link to was found. + +/obj/machinery/logic/indicator/bulb + icon = 'icons/obj/lighting.dmi' + icon_state = "bulb0" + +/obj/machinery/logic/indicator/bulb/process() + if(!..()) //Parent proc checks if input1 exists. + return + + var/datum/powernet/pn_input = input.powernet + if(!pn_input) + return + + if(pn_input.avail >= LOGIC_HIGH) + icon_state = "bulb1" + else + icon_state = "bulb0" + + + + +//Sensors only have one output and no inputs +/obj/machinery/logic/sensor + //Output is searched from the 'dir' direction + var/obj/structure/cable/output + +/obj/machinery/logic/sensor/process() + if(output) + return 1 + + if(!output) + var/turf/T = get_step(src, dir) + if(T) + var/inv_dir = turn(dir, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + output = C + return 1 + + return 0 //If it gets to here, it means no suitable wire to link to was found. + +//Constant high generator. This will continue to send a signal of LOGIC_HIGH as long as it exists. +/obj/machinery/logic/sensor/constant_high + icon = 'icons/obj/atmospherics/outlet_injector.dmi' + icon_state = "off" + +/obj/machinery/logic/sensor/constant_high/process() + if(!..()) //Parent proc checks if input1 exists. + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) + + + + +//ONE INPUT logic elements have one input and one output +/obj/machinery/logic/oneinput + var/dir_input = 2 + var/dir_output = 1 + var/obj/structure/cable/input + var/obj/structure/cable/output + icon = 'icons/atmos/heat.dmi' + icon_state = "intact" + +/obj/machinery/logic/oneinput/process() + if(input && output) + return 1 + + if(!dir_input || !dir_output) + return 0 + + if(!input) + var/turf/T = get_step(src, dir_input) + if(T) + var/inv_dir = turn(dir_input, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + input = C + + if(!output) + var/turf/T = get_step(src, dir_output) + if(T) + var/inv_dir = turn(dir_output, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + output = C + + return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. + +//NOT GATE +/obj/machinery/logic/oneinput/not/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input = input.powernet + + if(!pn_input) + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + if( !(pn_input.avail >= LOGIC_HIGH)) + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. + else + pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 + + + + + + + + + +//TWO INPUT logic elements have two inputs and one output +/obj/machinery/logic/twoinput + var/dir_input1 = 2 + var/dir_input2 = 8 + var/dir_output = 1 + var/obj/structure/cable/input1 + var/obj/structure/cable/input2 + var/obj/structure/cable/output + icon = 'icons/obj/atmospherics/mixer.dmi' + icon_state = "intact_off" + +/obj/machinery/logic/twoinput/process() + if(input1 && input2 && output) + return 1 + + if(!dir_input1 || !dir_input2 || !dir_output) + return 0 + + if(!input1) + var/turf/T = get_step(src, dir_input1) + if(T) + var/inv_dir = turn(dir_input1, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + input1 = C + + if(!input2) + var/turf/T = get_step(src, dir_input2) + if(T) + var/inv_dir = turn(dir_input2, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + input2 = C + + if(!output) + var/turf/T = get_step(src, dir_output) + if(T) + var/inv_dir = turn(dir_output, 180) + for(var/obj/structure/cable/C in T) + if(C.d1 == inv_dir || C.d2 == inv_dir) + output = C + + return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. + +//AND GATE +/obj/machinery/logic/twoinput/and/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input1 = input1.powernet + var/datum/powernet/pn_input2 = input2.powernet + + if(!pn_input1 || !pn_input2) + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + if( (pn_input1.avail >= LOGIC_HIGH) && (pn_input2.avail >= LOGIC_HIGH) ) + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. + else + pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 + +//OR GATE +/obj/machinery/logic/twoinput/or/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input1 = input1.powernet + var/datum/powernet/pn_input2 = input2.powernet + + if(!pn_input1 || !pn_input2) + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + if( (pn_input1.avail >= LOGIC_HIGH) || (pn_input2.avail >= LOGIC_HIGH) ) + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. + else + pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 + +//XOR GATE +/obj/machinery/logic/twoinput/xor/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input1 = input1.powernet + var/datum/powernet/pn_input2 = input2.powernet + + if(!pn_input1 || !pn_input2) + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + if( (pn_input1.avail >= LOGIC_HIGH) != (pn_input2.avail >= LOGIC_HIGH) ) + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. + else + pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 + +//XNOR GATE (EQUIVALENCE) +/obj/machinery/logic/twoinput/xnor/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input1 = input1.powernet + var/datum/powernet/pn_input2 = input2.powernet + + if(!pn_input1 || !pn_input2) + return + + var/datum/powernet/pn_output = output.powernet + if(!pn_output) + return + + if( (pn_input1.avail >= LOGIC_HIGH) == (pn_input2.avail >= LOGIC_HIGH) ) + pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. + else + pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 + +#define RELAY_POWER_TRANSFER 2000 //How much power a relay transfers through. + +//RELAY - input1 governs the flow from input2 to output +/obj/machinery/logic/twoinput/relay/process() + if(!..()) //Parent proc checks if input1, input2 and output exist. + return + + var/datum/powernet/pn_input1 = input1.powernet + + if(!pn_input1) + return + + if( pn_input1.avail >= LOGIC_HIGH ) + var/datum/powernet/pn_input2 = input2.powernet + var/datum/powernet/pn_output = output.powernet + + if(!pn_output) + return + + if(pn_input2.avail >= RELAY_POWER_TRANSFER) + pn_input2.draw_power(RELAY_POWER_TRANSFER) + pn_output.newavail += RELAY_POWER_TRANSFER + + +#undef RELAY_POWER_TRANSFER #undef LOGIC_HIGH \ No newline at end of file diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index d509e614e2..50ce2d7f5f 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -1,249 +1,249 @@ -// the power cell -// charge from 0 to 100% -// fits in APC to provide backup power - -/obj/item/weapon/cell - name = "power cell" - desc = "A rechargable electrochemical power cell." - icon = 'modular_chomp/icons/obj/power_cells.dmi' //CHOMP Edit using modular folders now - icon_state = "b_st" //CHOMP Edit - item_state = "cell" - origin_tech = list(TECH_POWER = 1) - force = 5.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - /// Are we EMP immune? - var/emp_proof = FALSE - var/static/cell_uid = 1 // Unique ID of this power cell. Used to reduce bunch of uglier code in nanoUI. - var/c_uid - var/charge = 0 // note %age conveted to actual charge in New - var/maxcharge = 1000 - var/rigged = 0 // true if rigged to explode - var/minor_fault = 0 //If not 100% reliable, it will build up faults. - var/self_recharge = FALSE // If true, the cell will recharge itself. - var/charge_amount = 25 // How much power to give, if self_recharge is true. The number is in absolute cell charge, as it gets divided by CELLRATE later. - var/last_use = 0 // A tracker for use in self-charging - var/connector_type = "standard" //What connector sprite to use when in a cell charger, null if no connectors - var/charge_delay = 0 // How long it takes for the cell to start recharging after last use - matter = list(MAT_STEEL = 700, MAT_GLASS = 50) - drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' - - // Overlay stuff. - var/standard_overlays = TRUE - var/last_overlay_state = null // Used to optimize update_icon() calls. - -/obj/item/weapon/cell/New() - ..() - c_uid = cell_uid++ - charge = maxcharge - update_icon() - if(self_recharge) - START_PROCESSING(SSobj, src) - -/obj/item/weapon/cell/Destroy() - if(self_recharge) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/weapon/cell/get_cell() - return src - -/obj/item/weapon/cell/process() - if(self_recharge) - if(world.time >= last_use + charge_delay) - give(charge_amount) - // TGMC Ammo HUD - Update the HUD every time we're called to recharge. - if(istype(loc, /obj/item/weapon/gun/energy)) // Are we in a gun currently? - var/obj/item/weapon/gun/energy/gun = loc - var/mob/living/user = gun.loc - if(istype(user)) - user?.hud_used.update_ammo_hud(user, gun) // Update the HUD - else - return PROCESS_KILL - -/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0) - - if(drain_check) - return 1 - - if(charge <= 0) - return 0 - - var/cell_amt = power * CELLRATE - - return use(cell_amt) / CELLRATE - -#define OVERLAY_FULL 2 -#define OVERLAY_PARTIAL 1 -#define OVERLAY_EMPTY 0 - -/obj/item/weapon/cell/update_icon() - if(!standard_overlays) - return - var/ratio = clamp(round(charge / maxcharge, 0.25) * 100, 0, 100) - var/new_state = "[icon_state]_[ratio]" - if(new_state != last_overlay_state) - cut_overlay(last_overlay_state) - add_overlay(new_state) - last_overlay_state = new_state - -#undef OVERLAY_FULL -#undef OVERLAY_PARTIAL -#undef OVERLAY_EMPTY - -/obj/item/weapon/cell/proc/percent() // return % charge of cell - return 100.0*charge/maxcharge - -/obj/item/weapon/cell/proc/fully_charged() - return (charge == maxcharge) - -// checks if the power cell is able to provide the specified amount of charge -/obj/item/weapon/cell/proc/check_charge(var/amount) - return (charge >= amount) - -// Returns how much charge is missing from the cell, useful to make sure not overdraw from the grid when recharging. -/obj/item/weapon/cell/proc/amount_missing() - return max(maxcharge - charge, 0) - -// use power from a cell, returns the amount actually used -/obj/item/weapon/cell/proc/use(var/amount) - if(rigged && amount > 0) - explode() - return 0 - var/used = min(charge, amount) - charge -= used - last_use = world.time - update_icon() - return used - -// Checks if the specified amount can be provided. If it can, it removes the amount -// from the cell and returns 1. Otherwise does nothing and returns 0. -/obj/item/weapon/cell/proc/checked_use(var/amount) - if(!check_charge(amount)) - return 0 - use(amount) - return 1 - -// recharge the cell -/obj/item/weapon/cell/proc/give(var/amount) - if(rigged && amount > 0) - explode() - return 0 - - if(maxcharge < amount) return 0 - var/amount_used = min(maxcharge-charge,amount) - charge += amount_used - update_icon() - if(loc) - loc.update_icon() - return amount_used - - -/obj/item/weapon/cell/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "It has a power rating of [maxcharge]." - . += "The charge meter reads [round(src.percent() )]%." - -/obj/item/weapon/cell/attackby(obj/item/W, mob/user) - ..() - if(istype(W, /obj/item/weapon/reagent_containers/syringe)) - var/obj/item/weapon/reagent_containers/syringe/S = W - - to_chat(user, "You inject the solution into the power cell.") - - if(S.reagents.has_reagent("phoron", 5)) - - rigged = 1 - - log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with phoron, rigging it to explode.") - message_admins("LOG: [user.name] ([user.ckey]) injected a power cell with phoron, rigging it to explode.") - - S.reagents.clear_reagents() - -/obj/item/weapon/cell/proc/explode() - var/turf/T = get_turf(src.loc) -/* - * 1000-cell explosion(T, -1, 0, 1, 1) - * 2500-cell explosion(T, -1, 0, 1, 1) - * 10000-cell explosion(T, -1, 1, 3, 3) - * 15000-cell explosion(T, -1, 2, 4, 4) - * */ - 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 = 0 - corrupt() - return - //explosion(T, 0, 1, 2, 2) - - log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") - message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") - - explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) - - qdel(src) - -/obj/item/weapon/cell/proc/corrupt() - charge /= 2 - maxcharge /= 2 - if (prob(10)) - rigged = 1 //broken batterys are dangerous - -/obj/item/weapon/cell/emp_act(severity) - if(emp_proof) - return - //remove this once emp changes on dev are merged in - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - severity *= R.cell_emp_mult - - charge -= charge / severity - if (charge < 0) - charge = 0 - - update_icon() - ..() - -/obj/item/weapon/cell/ex_act(severity) - - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - qdel(src) - return - if (prob(50)) - corrupt() - if(3.0) - if (prob(25)) - qdel(src) - return - if (prob(25)) - corrupt() - return - -/obj/item/weapon/cell/proc/get_electrocute_damage() - //1kW = 5 - //10kW = 24 - //100kW = 45 - //250kW = 53 - //1MW = 66 - //10MW = 88 - //100MW = 110 - //1GW = 132 - if(charge >= 1000) - var/damage = log(1.1,charge) - damage = damage - (log(1.1,damage)*1.5) - return round(damage) - else - return 0 +// the power cell +// charge from 0 to 100% +// fits in APC to provide backup power + +/obj/item/weapon/cell + name = "power cell" + desc = "A rechargable electrochemical power cell." + icon = 'modular_chomp/icons/obj/power_cells.dmi' //CHOMP Edit using modular folders now + icon_state = "b_st" //CHOMP Edit + item_state = "cell" + origin_tech = list(TECH_POWER = 1) + force = 5.0 + throwforce = 5.0 + throw_speed = 3 + throw_range = 5 + w_class = ITEMSIZE_NORMAL + /// Are we EMP immune? + var/emp_proof = FALSE + var/static/cell_uid = 1 // Unique ID of this power cell. Used to reduce bunch of uglier code in nanoUI. + var/c_uid + var/charge = 0 // note %age conveted to actual charge in New + var/maxcharge = 1000 + var/rigged = 0 // true if rigged to explode + var/minor_fault = 0 //If not 100% reliable, it will build up faults. + var/self_recharge = FALSE // If true, the cell will recharge itself. + var/charge_amount = 25 // How much power to give, if self_recharge is true. The number is in absolute cell charge, as it gets divided by CELLRATE later. + var/last_use = 0 // A tracker for use in self-charging + var/connector_type = "standard" //What connector sprite to use when in a cell charger, null if no connectors + var/charge_delay = 0 // How long it takes for the cell to start recharging after last use + matter = list(MAT_STEEL = 700, MAT_GLASS = 50) + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + + // Overlay stuff. + var/standard_overlays = TRUE + var/last_overlay_state = null // Used to optimize update_icon() calls. + +/obj/item/weapon/cell/New() + ..() + c_uid = cell_uid++ + charge = maxcharge + update_icon() + if(self_recharge) + START_PROCESSING(SSobj, src) + +/obj/item/weapon/cell/Destroy() + if(self_recharge) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/weapon/cell/get_cell() + return src + +/obj/item/weapon/cell/process() + if(self_recharge) + if(world.time >= last_use + charge_delay) + give(charge_amount) + // TGMC Ammo HUD - Update the HUD every time we're called to recharge. + if(istype(loc, /obj/item/weapon/gun/energy)) // Are we in a gun currently? + var/obj/item/weapon/gun/energy/gun = loc + var/mob/living/user = gun.loc + if(istype(user)) + user?.hud_used.update_ammo_hud(user, gun) // Update the HUD + else + return PROCESS_KILL + +/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0) + + if(drain_check) + return 1 + + if(charge <= 0) + return 0 + + var/cell_amt = power * CELLRATE + + return use(cell_amt) / CELLRATE + +#define OVERLAY_FULL 2 +#define OVERLAY_PARTIAL 1 +#define OVERLAY_EMPTY 0 + +/obj/item/weapon/cell/update_icon() + if(!standard_overlays) + return + var/ratio = clamp(round(charge / maxcharge, 0.25) * 100, 0, 100) + var/new_state = "[icon_state]_[ratio]" + if(new_state != last_overlay_state) + cut_overlay(last_overlay_state) + add_overlay(new_state) + last_overlay_state = new_state + +#undef OVERLAY_FULL +#undef OVERLAY_PARTIAL +#undef OVERLAY_EMPTY + +/obj/item/weapon/cell/proc/percent() // return % charge of cell + return 100.0*charge/maxcharge + +/obj/item/weapon/cell/proc/fully_charged() + return (charge == maxcharge) + +// checks if the power cell is able to provide the specified amount of charge +/obj/item/weapon/cell/proc/check_charge(var/amount) + return (charge >= amount) + +// Returns how much charge is missing from the cell, useful to make sure not overdraw from the grid when recharging. +/obj/item/weapon/cell/proc/amount_missing() + return max(maxcharge - charge, 0) + +// use power from a cell, returns the amount actually used +/obj/item/weapon/cell/proc/use(var/amount) + if(rigged && amount > 0) + explode() + return 0 + var/used = min(charge, amount) + charge -= used + last_use = world.time + update_icon() + return used + +// Checks if the specified amount can be provided. If it can, it removes the amount +// from the cell and returns 1. Otherwise does nothing and returns 0. +/obj/item/weapon/cell/proc/checked_use(var/amount) + if(!check_charge(amount)) + return 0 + use(amount) + return 1 + +// recharge the cell +/obj/item/weapon/cell/proc/give(var/amount) + if(rigged && amount > 0) + explode() + return 0 + + if(maxcharge < amount) return 0 + var/amount_used = min(maxcharge-charge,amount) + charge += amount_used + update_icon() + if(loc) + loc.update_icon() + return amount_used + + +/obj/item/weapon/cell/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "It has a power rating of [maxcharge]." + . += "The charge meter reads [round(src.percent() )]%." + +/obj/item/weapon/cell/attackby(obj/item/W, mob/user) + ..() + if(istype(W, /obj/item/weapon/reagent_containers/syringe)) + var/obj/item/weapon/reagent_containers/syringe/S = W + + to_chat(user, "You inject the solution into the power cell.") + + if(S.reagents.has_reagent("phoron", 5)) + + rigged = 1 + + log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with phoron, rigging it to explode.") + message_admins("LOG: [user.name] ([user.ckey]) injected a power cell with phoron, rigging it to explode.") + + S.reagents.clear_reagents() + +/obj/item/weapon/cell/proc/explode() + var/turf/T = get_turf(src.loc) +/* + * 1000-cell explosion(T, -1, 0, 1, 1) + * 2500-cell explosion(T, -1, 0, 1, 1) + * 10000-cell explosion(T, -1, 1, 3, 3) + * 15000-cell explosion(T, -1, 2, 4, 4) + * */ + 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 = 0 + corrupt() + return + //explosion(T, 0, 1, 2, 2) + + log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") + message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") + + explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) + + qdel(src) + +/obj/item/weapon/cell/proc/corrupt() + charge /= 2 + maxcharge /= 2 + if (prob(10)) + rigged = 1 //broken batterys are dangerous + +/obj/item/weapon/cell/emp_act(severity) + if(emp_proof) + return + //remove this once emp changes on dev are merged in + if(isrobot(loc)) + var/mob/living/silicon/robot/R = loc + severity *= R.cell_emp_mult + + charge -= charge / severity + if (charge < 0) + charge = 0 + + update_icon() + ..() + +/obj/item/weapon/cell/ex_act(severity) + + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + qdel(src) + return + if (prob(50)) + corrupt() + if(3.0) + if (prob(25)) + qdel(src) + return + if (prob(25)) + corrupt() + return + +/obj/item/weapon/cell/proc/get_electrocute_damage() + //1kW = 5 + //10kW = 24 + //100kW = 45 + //250kW = 53 + //1MW = 66 + //10MW = 88 + //100MW = 110 + //1GW = 132 + if(charge >= 1000) + var/damage = log(1.1,charge) + damage = damage - (log(1.1,damage)*1.5) + return round(damage) + else + return 0 diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 30bb2c8df3..f528d4025b 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -1,292 +1,292 @@ -GLOBAL_LIST_EMPTY(all_turbines) - -/obj/machinery/power/generator - name = "thermoelectric generator" - desc = "It's a high efficiency thermoelectric generator." - icon_state = "teg-unassembled" - density = TRUE - anchored = FALSE - unacidable = TRUE - - use_power = USE_POWER_IDLE - idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things. - - var/max_power = 500000 - var/thermal_efficiency = 0.65 - - var/obj/machinery/atmospherics/binary/circulator/circ1 - var/obj/machinery/atmospherics/binary/circulator/circ2 - - var/last_circ1_gen = 0 - var/last_circ2_gen = 0 - var/last_thermal_gen = 0 - var/stored_energy = 0 - var/lastgen1 = 0 - var/lastgen2 = 0 - var/effective_gen = 0 - var/lastgenlev = 0 - var/datum/looping_sound/generator/soundloop - -/obj/machinery/power/generator/Initialize() - soundloop = new(list(src), FALSE) - desc = initial(desc) + " Rated for [round(max_power/1000)] kW." - GLOB.all_turbines += src - ..() //Not returned, because... - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/power/generator/LateInitialize() - reconnect() - -/obj/machinery/power/generator/Destroy() - QDEL_NULL(soundloop) - GLOB.all_turbines -= src - return ..() - -//generators connect in dir and reverse_dir(dir) directions -//mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator -//so a circulator to the NORTH of the generator connects first to the EAST, then to the WEST -//and a circulator to the WEST of the generator connects first to the NORTH, then to the SOUTH -//note that the circulator's outlet dir is it's always facing dir, and it's inlet is always the reverse -/obj/machinery/power/generator/proc/reconnect() - circ1 = null - circ2 = null - if(src.loc && anchored) - if(src.dir & (EAST|WEST)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST) - - if(circ1 && circ2) - if(circ1.dir != NORTH || circ2.dir != SOUTH) - circ1 = null - circ2 = null - - else if(src.dir & (NORTH|SOUTH)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,NORTH) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,SOUTH) - - if(circ1 && circ2 && (circ1.dir != EAST || circ2.dir != WEST)) - circ1 = null - circ2 = null - -/obj/machinery/power/generator/update_icon() - icon_state = anchored ? "teg-assembled" : "teg-unassembled" - cut_overlays() - if (circ1) - circ1.temperature_overlay = null - if (circ2) - circ2.temperature_overlay = null - if (stat & (NOPOWER|BROKEN)) - return 1 - else - if (lastgenlev != 0) - add_overlay("teg-op[lastgenlev]") - if (circ1 && circ2) - var/extreme = (lastgenlev > 9) ? "ex" : "" - if (circ1.last_temperature < circ2.last_temperature) - circ1.temperature_overlay = "circ-[extreme]cold" - circ2.temperature_overlay = "circ-[extreme]hot" - else - circ1.temperature_overlay = "circ-[extreme]hot" - circ2.temperature_overlay = "circ-[extreme]cold" - return 1 - -/obj/machinery/power/generator/process() - if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) - stored_energy = 0 - return - - updateDialog() - - var/datum/gas_mixture/air1 = circ1.return_transfer_air() - var/datum/gas_mixture/air2 = circ2.return_transfer_air() - - lastgen2 = lastgen1 - lastgen1 = 0 - last_thermal_gen = 0 - last_circ1_gen = 0 - last_circ2_gen = 0 - - if(air1 && air2) - var/air1_heat_capacity = air1.heat_capacity() - var/air2_heat_capacity = air2.heat_capacity() - var/delta_temperature = abs(air2.temperature - air1.temperature) - - if(delta_temperature > 0 && air1_heat_capacity > 0 && air2_heat_capacity > 0) - var/energy_transfer = delta_temperature*air2_heat_capacity*air1_heat_capacity/(air2_heat_capacity+air1_heat_capacity) - var/heat = energy_transfer*(1-thermal_efficiency) - last_thermal_gen = energy_transfer*thermal_efficiency - - if(air2.temperature > air1.temperature) - air2.temperature = air2.temperature - energy_transfer/air2_heat_capacity - air1.temperature = air1.temperature + heat/air1_heat_capacity - else - air2.temperature = air2.temperature + heat/air2_heat_capacity - air1.temperature = air1.temperature - energy_transfer/air1_heat_capacity - - //Transfer the air - if (air1) - circ1.air2.merge(air1) - if (air2) - circ2.air2.merge(air2) - - //Update the gas networks - if(circ1.network2) - circ1.network2.update = 1 - if(circ2.network2) - circ2.network2.update = 1 - - //Exceeding maximum power leads to some power loss - if(effective_gen > max_power && prob(5)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - stored_energy *= 0.5 - - //Power - last_circ1_gen = circ1.return_stored_energy() - last_circ2_gen = circ2.return_stored_energy() - stored_energy += last_thermal_gen + last_circ1_gen + last_circ2_gen - lastgen1 = stored_energy*0.4 //smoothened power generation to prevent slingshotting as pressure is equalized, then restored by pumps - stored_energy -= lastgen1 - effective_gen = (lastgen1 + lastgen2) / 2 - - // Sounds. - if(effective_gen > (max_power * 0.05)) // More than 5% and sounds start. - soundloop.start() - soundloop.volume = LERP(1, 40, effective_gen / max_power) - else - soundloop.stop() - - // update icon overlays and power usage only if displayed level has changed - var/genlev = max(0, min( round(11*effective_gen / max_power), 11)) - if(effective_gen > 100 && genlev == 0) - genlev = 1 - if(genlev != lastgenlev) - lastgenlev = genlev - update_icon() - add_avail(effective_gen) - -/obj/machinery/power/generator/attack_ai(mob/user) - attack_hand(user) - -/obj/machinery/power/generator/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.has_tool_quality(TOOL_WRENCH)) - playsound(src, W.usesound, 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet.") - update_use_power(anchored ? USE_POWER_IDLE : USE_POWER_ACTIVE) - if(anchored) // Powernet connection stuff. - connect_to_network() - else - disconnect_from_network() - reconnect() - lastgenlev = 0 - effective_gen = 0 - update_icon() - else - ..() - -/obj/machinery/power/generator/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER) || !anchored) return - if(!circ1 || !circ2) //Just incase the middle part of the TEG was not wrenched last. - reconnect() - tgui_interact(user) - -/obj/machinery/power/generator/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TEGenerator", name) - ui.open() - -/obj/machinery/power/generator/tgui_data(mob/user) - // this is the data which will be sent to the ui - var/vertical = 0 - if (dir == NORTH || dir == SOUTH) - vertical = 1 - - var/list/data = list() - data["totalOutput"] = effective_gen - data["maxTotalOutput"] = max_power - data["thermalOutput"] = last_thermal_gen - - data["primary"] = list() - if(circ1) - //The one on the left (or top) - data["primary"]["dir"] = vertical ? "top" : "left" - data["primary"]["output"] = last_circ1_gen - data["primary"]["flowCapacity"] = circ1.volume_capacity_used*100 - data["primary"]["inletPressure"] = circ1.air1.return_pressure() - data["primary"]["inletTemperature"] = circ1.air1.temperature - data["primary"]["outletPressure"] = circ1.air2.return_pressure() - data["primary"]["outletTemperature"] = circ1.air2.temperature - - data["secondary"] = list() - if(circ2) - //Now for the one on the right (or bottom) - data["secondary"]["dir"] = vertical ? "bottom" : "right" - data["secondary"]["output"] = last_circ2_gen - data["secondary"]["flowCapacity"] = circ2.volume_capacity_used*100 - data["secondary"]["inletPressure"] = circ2.air1.return_pressure() - data["secondary"]["inletTemperature"] = circ2.air1.temperature - data["secondary"]["outletPressure"] = circ2.air2.return_pressure() - data["secondary"]["outletTemperature"] = circ2.air2.temperature - - return data - -/obj/machinery/power/generator/power_change() - ..() - update_icon() - - -/obj/machinery/power/generator/verb/rotate_clockwise() - set category = "Object" - set name = "Rotate Generator Clockwise" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 270)) - -/obj/machinery/power/generator/verb/rotate_counterclockwise() - set category = "Object" - set name = "Rotate Generator Counterclockwise" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 90)) - -/obj/machinery/power/generator/power_spike(var/announce_prob = 30) - if(!(effective_gen >= max_power / 2 && powernet)) // Don't make a spike if we're not making a whole lot of power. - return - - var/list/powernet_union = powernet.nodes.Copy() - for(var/obj/machinery/power/terminal/T in powernet.nodes) - if(T.master && istype(T.master, /obj/machinery/power/smes)) - var/obj/machinery/power/smes/S = T.master - powernet_union |= S.powernet.nodes - - var/found_grid_checker = FALSE - for(var/obj/machinery/power/grid_checker/G in powernet_union) - G.power_failure(announce_prob) // If we found a grid checker, then all is well. - found_grid_checker = TRUE - if(!found_grid_checker) // Otherwise lets break some stuff. - spawn(1) - command_announcement.Announce("Dangerous power spike detected in the power network. Please check machinery \ - for electrical damage.", - "Critical Power Overload") - var/i = 0 - var/limit = rand(30, 50) - for(var/obj/machinery/power/P in powernet_union) - P.overload(src) - i++ - if(i % 5) - sleep(1) - if(i >= limit) - break - +GLOBAL_LIST_EMPTY(all_turbines) + +/obj/machinery/power/generator + name = "thermoelectric generator" + desc = "It's a high efficiency thermoelectric generator." + icon_state = "teg-unassembled" + density = TRUE + anchored = FALSE + unacidable = TRUE + + use_power = USE_POWER_IDLE + idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things. + + var/max_power = 500000 + var/thermal_efficiency = 0.65 + + var/obj/machinery/atmospherics/binary/circulator/circ1 + var/obj/machinery/atmospherics/binary/circulator/circ2 + + var/last_circ1_gen = 0 + var/last_circ2_gen = 0 + var/last_thermal_gen = 0 + var/stored_energy = 0 + var/lastgen1 = 0 + var/lastgen2 = 0 + var/effective_gen = 0 + var/lastgenlev = 0 + var/datum/looping_sound/generator/soundloop + +/obj/machinery/power/generator/Initialize() + soundloop = new(list(src), FALSE) + desc = initial(desc) + " Rated for [round(max_power/1000)] kW." + GLOB.all_turbines += src + ..() //Not returned, because... + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/power/generator/LateInitialize() + reconnect() + +/obj/machinery/power/generator/Destroy() + QDEL_NULL(soundloop) + GLOB.all_turbines -= src + return ..() + +//generators connect in dir and reverse_dir(dir) directions +//mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator +//so a circulator to the NORTH of the generator connects first to the EAST, then to the WEST +//and a circulator to the WEST of the generator connects first to the NORTH, then to the SOUTH +//note that the circulator's outlet dir is it's always facing dir, and it's inlet is always the reverse +/obj/machinery/power/generator/proc/reconnect() + circ1 = null + circ2 = null + if(src.loc && anchored) + if(src.dir & (EAST|WEST)) + circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST) + circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST) + + if(circ1 && circ2) + if(circ1.dir != NORTH || circ2.dir != SOUTH) + circ1 = null + circ2 = null + + else if(src.dir & (NORTH|SOUTH)) + circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,NORTH) + circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,SOUTH) + + if(circ1 && circ2 && (circ1.dir != EAST || circ2.dir != WEST)) + circ1 = null + circ2 = null + +/obj/machinery/power/generator/update_icon() + icon_state = anchored ? "teg-assembled" : "teg-unassembled" + cut_overlays() + if (circ1) + circ1.temperature_overlay = null + if (circ2) + circ2.temperature_overlay = null + if (stat & (NOPOWER|BROKEN)) + return 1 + else + if (lastgenlev != 0) + add_overlay("teg-op[lastgenlev]") + if (circ1 && circ2) + var/extreme = (lastgenlev > 9) ? "ex" : "" + if (circ1.last_temperature < circ2.last_temperature) + circ1.temperature_overlay = "circ-[extreme]cold" + circ2.temperature_overlay = "circ-[extreme]hot" + else + circ1.temperature_overlay = "circ-[extreme]hot" + circ2.temperature_overlay = "circ-[extreme]cold" + return 1 + +/obj/machinery/power/generator/process() + if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) + stored_energy = 0 + return + + updateDialog() + + var/datum/gas_mixture/air1 = circ1.return_transfer_air() + var/datum/gas_mixture/air2 = circ2.return_transfer_air() + + lastgen2 = lastgen1 + lastgen1 = 0 + last_thermal_gen = 0 + last_circ1_gen = 0 + last_circ2_gen = 0 + + if(air1 && air2) + var/air1_heat_capacity = air1.heat_capacity() + var/air2_heat_capacity = air2.heat_capacity() + var/delta_temperature = abs(air2.temperature - air1.temperature) + + if(delta_temperature > 0 && air1_heat_capacity > 0 && air2_heat_capacity > 0) + var/energy_transfer = delta_temperature*air2_heat_capacity*air1_heat_capacity/(air2_heat_capacity+air1_heat_capacity) + var/heat = energy_transfer*(1-thermal_efficiency) + last_thermal_gen = energy_transfer*thermal_efficiency + + if(air2.temperature > air1.temperature) + air2.temperature = air2.temperature - energy_transfer/air2_heat_capacity + air1.temperature = air1.temperature + heat/air1_heat_capacity + else + air2.temperature = air2.temperature + heat/air2_heat_capacity + air1.temperature = air1.temperature - energy_transfer/air1_heat_capacity + + //Transfer the air + if (air1) + circ1.air2.merge(air1) + if (air2) + circ2.air2.merge(air2) + + //Update the gas networks + if(circ1.network2) + circ1.network2.update = 1 + if(circ2.network2) + circ2.network2.update = 1 + + //Exceeding maximum power leads to some power loss + if(effective_gen > max_power && prob(5)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + stored_energy *= 0.5 + + //Power + last_circ1_gen = circ1.return_stored_energy() + last_circ2_gen = circ2.return_stored_energy() + stored_energy += last_thermal_gen + last_circ1_gen + last_circ2_gen + lastgen1 = stored_energy*0.4 //smoothened power generation to prevent slingshotting as pressure is equalized, then restored by pumps + stored_energy -= lastgen1 + effective_gen = (lastgen1 + lastgen2) / 2 + + // Sounds. + if(effective_gen > (max_power * 0.05)) // More than 5% and sounds start. + soundloop.start() + soundloop.volume = LERP(1, 40, effective_gen / max_power) + else + soundloop.stop() + + // update icon overlays and power usage only if displayed level has changed + var/genlev = max(0, min( round(11*effective_gen / max_power), 11)) + if(effective_gen > 100 && genlev == 0) + genlev = 1 + if(genlev != lastgenlev) + lastgenlev = genlev + update_icon() + add_avail(effective_gen) + +/obj/machinery/power/generator/attack_ai(mob/user) + attack_hand(user) + +/obj/machinery/power/generator/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.has_tool_quality(TOOL_WRENCH)) + playsound(src, W.usesound, 75, 1) + anchored = !anchored + user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ + "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ + "You hear a ratchet.") + update_use_power(anchored ? USE_POWER_IDLE : USE_POWER_ACTIVE) + if(anchored) // Powernet connection stuff. + connect_to_network() + else + disconnect_from_network() + reconnect() + lastgenlev = 0 + effective_gen = 0 + update_icon() + else + ..() + +/obj/machinery/power/generator/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER) || !anchored) return + if(!circ1 || !circ2) //Just incase the middle part of the TEG was not wrenched last. + reconnect() + tgui_interact(user) + +/obj/machinery/power/generator/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TEGenerator", name) + ui.open() + +/obj/machinery/power/generator/tgui_data(mob/user) + // this is the data which will be sent to the ui + var/vertical = 0 + if (dir == NORTH || dir == SOUTH) + vertical = 1 + + var/list/data = list() + data["totalOutput"] = effective_gen + data["maxTotalOutput"] = max_power + data["thermalOutput"] = last_thermal_gen + + data["primary"] = list() + if(circ1) + //The one on the left (or top) + data["primary"]["dir"] = vertical ? "top" : "left" + data["primary"]["output"] = last_circ1_gen + data["primary"]["flowCapacity"] = circ1.volume_capacity_used*100 + data["primary"]["inletPressure"] = circ1.air1.return_pressure() + data["primary"]["inletTemperature"] = circ1.air1.temperature + data["primary"]["outletPressure"] = circ1.air2.return_pressure() + data["primary"]["outletTemperature"] = circ1.air2.temperature + + data["secondary"] = list() + if(circ2) + //Now for the one on the right (or bottom) + data["secondary"]["dir"] = vertical ? "bottom" : "right" + data["secondary"]["output"] = last_circ2_gen + data["secondary"]["flowCapacity"] = circ2.volume_capacity_used*100 + data["secondary"]["inletPressure"] = circ2.air1.return_pressure() + data["secondary"]["inletTemperature"] = circ2.air1.temperature + data["secondary"]["outletPressure"] = circ2.air2.return_pressure() + data["secondary"]["outletTemperature"] = circ2.air2.temperature + + return data + +/obj/machinery/power/generator/power_change() + ..() + update_icon() + + +/obj/machinery/power/generator/verb/rotate_clockwise() + set category = "Object" + set name = "Rotate Generator Clockwise" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 270)) + +/obj/machinery/power/generator/verb/rotate_counterclockwise() + set category = "Object" + set name = "Rotate Generator Counterclockwise" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 90)) + +/obj/machinery/power/generator/power_spike(var/announce_prob = 30) + if(!(effective_gen >= max_power / 2 && powernet)) // Don't make a spike if we're not making a whole lot of power. + return + + var/list/powernet_union = powernet.nodes.Copy() + for(var/obj/machinery/power/terminal/T in powernet.nodes) + if(T.master && istype(T.master, /obj/machinery/power/smes)) + var/obj/machinery/power/smes/S = T.master + powernet_union |= S.powernet.nodes + + var/found_grid_checker = FALSE + for(var/obj/machinery/power/grid_checker/G in powernet_union) + G.power_failure(announce_prob) // If we found a grid checker, then all is well. + found_grid_checker = TRUE + if(!found_grid_checker) // Otherwise lets break some stuff. + spawn(1) + command_announcement.Announce("Dangerous power spike detected in the power network. Please check machinery \ + for electrical damage.", + "Critical Power Overload") + var/i = 0 + var/limit = rand(30, 50) + for(var/obj/machinery/power/P in powernet_union) + P.overload(src) + i++ + if(i % 5) + sleep(1) + if(i >= limit) + break + diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 9160636125..d4fbd73a41 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -1,419 +1,419 @@ -//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 = "Placeholder Generator" //seriously, don't use this. It can't be anchored without VV magic. - desc = "A portable generator for emergency backup power" - icon = 'icons/obj/power_vr.dmi' //VOREStation Edit - icon_state = "portgen0" //VOREStation Edit - density = TRUE - anchored = FALSE - use_power = USE_POWER_OFF - interact_offline = TRUE - - var/active = 0 - var/power_gen = 5000 - var/recent_fault = 0 - var/power_output = 1 - -/obj/machinery/power/port_gen/proc/IsBroken() - return (stat & (BROKEN|EMPED)) - -/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check. - return 1 - -/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 - update_icon() - // soundloop.start() - -/obj/machinery/power/port_gen/process() - if(active && HasFuel() && !IsBroken() && anchored && powernet) - add_avail(power_gen * power_output) - UseFuel() - else - active = FALSE - update_icon() - handleInactive() - -/obj/machinery/power/port_gen/update_icon() - if(active) - icon_state = "[initial(icon_state)]on" - else - icon_state = initial(icon_state) - -/obj/machinery/power/powered() - return 1 //doesn't require an external power source - -/obj/machinery/power/port_gen/attack_hand(mob/user as mob) - if(..()) - return - if(!anchored) - return - -/obj/machinery/power/port_gen/examine(mob/user) - . = ..() - if(Adjacent(user)) //It literally has a light on the sprite, are you sure this is necessary? - if(active) - . += "The generator is on." - else - . += "The generator is off." - -/obj/machinery/power/port_gen/emp_act(severity) - var/duration = 6000 //ten minutes - switch(severity) - if(1) - stat &= BROKEN - if(prob(75)) explode() - if(2) - if(prob(50)) stat &= BROKEN - if(prob(10)) explode() - if(3) - if(prob(25)) stat &= BROKEN - duration = 300 - if(4) - if(prob(10)) stat &= BROKEN - duration = 300 - - stat |= EMPED - if(duration) - spawn(duration) - stat &= ~EMPED - -/obj/machinery/power/port_gen/proc/explode() - explosion(src.loc, -1, 3, 5, -1) - qdel(src) - -#define TEMPERATURE_DIVISOR 40 -#define TEMPERATURE_CHANGE_MAX 20 - -//A power generator that runs on solid plasma sheets. -/obj/machinery/power/port_gen/pacman - name = "\improper P.A.C.M.A.N.-type Portable Generator" - desc = "A power generator that runs on solid phoron sheets. Rated for 80 kW max safe output." - circuit = /obj/item/weapon/circuitboard/pacman - var/sheet_name = "Phoron Sheets" - var/sheet_path = /obj/item/stack/material/phoron - - /* - These values were chosen so that the generator can run safely up to 80 kW - A full 50 phoron sheet stack should last 20 minutes at power_output = 4 - temperature_gain and max_temperature are set so that the max safe power level is 4. - Setting to 5 or higher can only be done temporarily before the generator overheats. - */ - power_gen = 20000 //Watts output per power_output level - var/max_power_output = 5 //The maximum power setting without emagging. - var/max_safe_output = 4 // For UI use, maximal output that won't cause overheat. - var/time_per_sheet = 96 //fuel efficiency - how long 1 sheet lasts at power level 1 - var/max_sheets = 100 //max capacity of the hopper - var/max_temperature = 300 //max temperature before overheating increases - var/temperature_gain = 50 //how much the temperature increases per power output level, in degrees per level - - var/sheets = 0 //How many sheets of material are loaded in the generator - var/sheet_left = 0 //How much is left of the current sheet - var/temperature = 0 //The current temperature - var/overheating = 0 //if this gets high enough the generator explodes - -/obj/machinery/power/port_gen/pacman/Initialize() - . = ..() - default_apply_parts() - if(anchored) - connect_to_network() - -/obj/machinery/power/port_gen/pacman/Destroy() - DropFuel() - return ..() - -/obj/machinery/power/port_gen/pacman/dismantle() - while( sheets > 0 ) - DropFuel() - return ..() - -/obj/machinery/power/port_gen/pacman/RefreshParts() - var/temp_rating = 0 - for(var/obj/item/weapon/stock_parts/SP in component_parts) - if(istype(SP, /obj/item/weapon/stock_parts/matter_bin)) - max_sheets = SP.rating * SP.rating * 50 - else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor)) - temp_rating += SP.rating - - power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2)) - -/obj/machinery/power/port_gen/pacman/examine(mob/user) - . = ..() - . += "It appears to be producing [power_gen*power_output] W." - . += "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper." - if(IsBroken()) - . += "It seems to have broken down." - if(overheating) - . += "It is overheating!" - -/obj/machinery/power/port_gen/pacman/HasFuel() - var/needed_sheets = power_output / time_per_sheet - if(sheets >= needed_sheets - sheet_left) - return 1 - return 0 - -//Removes one stack's worth of material from the generator. -/obj/machinery/power/port_gen/pacman/DropFuel() - if(sheets) - var/obj/item/stack/material/S = new sheet_path(loc, sheets) - sheets -= S.get_amount() - -/obj/machinery/power/port_gen/pacman/UseFuel() - - //how much material are we using this iteration? - var/needed_sheets = power_output / time_per_sheet - - //HasFuel() should guarantee us that there is enough fuel left, so no need to check that - //the only thing we need to worry about is if we are going to rollover to the next sheet - if (needed_sheets > sheet_left) - sheets-- - sheet_left = (1 + sheet_left) - needed_sheets - else - sheet_left -= needed_sheets - - //calculate the "target" temperature range - //This should probably depend on the external temperature somehow, but whatever. - var/lower_limit = 56 + power_output * temperature_gain - var/upper_limit = 76 + power_output * temperature_gain - - /* - Hot or cold environments can affect the equilibrium temperature - The lower the pressure the less effect it has. I guess it cools using a radiator or something when in vacuum. - Gives traitors more opportunities to sabotage the generator or allows enterprising engineers to build additional - cooling in order to get more power out. - */ - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) - var/ambient = environment.temperature - T20C - lower_limit += ambient*ratio - upper_limit += ambient*ratio - - var/average = (upper_limit + lower_limit)/2 - - //calculate the temperature increase - var/bias = 0 - if (temperature < lower_limit) - bias = min(round((average - temperature)/TEMPERATURE_DIVISOR, 1), TEMPERATURE_CHANGE_MAX) - else if (temperature > upper_limit) - bias = max(round((temperature - average)/TEMPERATURE_DIVISOR, 1), -TEMPERATURE_CHANGE_MAX) - - //limit temperature increase so that it cannot raise temperature above upper_limit, - //or if it is already above upper_limit, limit the increase to 0. - var/inc_limit = max(upper_limit - temperature, 0) - var/dec_limit = min(temperature - lower_limit, 0) - temperature += between(dec_limit, rand(-7 + bias, 7 + bias), inc_limit) - - if (temperature > max_temperature) - overheat() - else if (overheating > 0) - overheating-- - -/obj/machinery/power/port_gen/pacman/handleInactive() - var/cooling_temperature = 20 - var/datum/gas_mixture/environment = loc.return_air() - if(environment) - var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) - var/ambient = environment.temperature - T20C - cooling_temperature += ambient*ratio - - if(temperature > cooling_temperature) - var/temp_loss = (temperature - cooling_temperature)/TEMPERATURE_DIVISOR - temp_loss = between(2, round(temp_loss, 1), TEMPERATURE_CHANGE_MAX) - temperature = max(temperature - temp_loss, cooling_temperature) - updateDialog() - - if(overheating) - overheating-- - -/obj/machinery/power/port_gen/pacman/proc/overheat() - overheating++ - if (overheating > 60) - explode() - -/obj/machinery/power/port_gen/pacman/explode() - //Vapourize all the phoron - //When ground up in a grinder, 1 sheet produces 20 u of phoron -- Chemistry-Machinery.dm - //1 mol = 10 u? I dunno. 1 mol of carbon is definitely bigger than a pill - var/phoron = (sheets+sheet_left)*20 - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - environment.adjust_gas_temp("phoron", phoron/10, temperature + T0C) - - sheets = 0 - sheet_left = 0 - ..() - -/obj/machinery/power/port_gen/pacman/emag_act(var/remaining_charges, var/mob/user) - if (active && prob(25)) - explode() //if they're foolish enough to emag while it's running - - if (!emagged) - emagged = 1 - return 1 - -/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, sheet_path)) - var/obj/item/stack/addstack = O - var/amount = min((max_sheets - sheets), addstack.get_amount()) - if(amount < 1) - to_chat(user, "The [src.name] is full!") - return - to_chat(user, "You add [amount] sheet\s to the [src.name].") - sheets += amount - addstack.use(amount) - updateUsrDialog() - return - else if(!active) - if(O.has_tool_quality(TOOL_WRENCH)) - if(!anchored) - connect_to_network() - to_chat(user, "You secure the generator to the floor.") - else - disconnect_from_network() - to_chat(user, "You unsecure the generator from the floor.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - anchored = !anchored - return - else if(default_deconstruction_screwdriver(user, O)) - return - else if(default_deconstruction_crowbar(user, O)) - return - else if(default_part_replacement(user, O)) - return - return ..() - -/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) - ..() - if (!anchored) - return - tgui_interact(user) - -/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob) - tgui_interact(user) - -/obj/machinery/power/port_gen/tgui_status(mob/user, datum/tgui_state/state) - if(IsBroken()) - return STATUS_CLOSE - return ..() - -/obj/machinery/power/port_gen/pacman/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableGenerator", name) - ui.open() - -/obj/machinery/power/port_gen/pacman/tgui_data(mob/user) - var/list/data = list() - - data["active"] = active - - if(istype(user, /mob/living/silicon/ai)) - data["is_ai"] = TRUE - else if(istype(user, /mob/living/silicon/robot) && !Adjacent(user)) - data["is_ai"] = TRUE - else - data["is_ai"] = FALSE - - data["sheet_name"] = capitalize(sheet_name) - data["fuel_stored"] = round((sheets * 1000) + (sheet_left * 1000)) - data["fuel_capacity"] = round(max_sheets * 1000, 0.1) - data["fuel_usage"] = active ? round((power_output / time_per_sheet) * 1000) : 0 - - 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["unsafe_output"] = power_output > max_safe_output - data["power_available"] = (powernet == null ? 0 : DisplayPower(avail())) - data["temperature_current"] = temperature - data["temperature_max"] = max_temperature - data["temperature_overheat"] = overheating - // 1 sheet = 1000cm3? - - return data - -/obj/machinery/power/port_gen/pacman/tgui_act(action, params) - if(..()) - return - - add_fingerprint(usr) - 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 < max_power_output || (emagged && power_output < round(max_power_output * 2.5))) - power_output++ - . = TRUE - -/obj/machinery/power/port_gen/pacman/super - name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator" - desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output." - icon_state = "portgen1" - sheet_path = /obj/item/stack/material/uranium - sheet_name = "Uranium Sheets" - time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power - circuit = /obj/item/weapon/circuitboard/pacman/super - -/obj/machinery/power/port_gen/pacman/super/UseFuel() - //produces a tiny amount of radiation when in use - if (prob(2*power_output)) - SSradiation.radiate(src, 4) - ..() - -/obj/machinery/power/port_gen/pacman/super/explode() - //a nice burst of radiation - var/rads = 50 + (sheets + sheet_left)*1.5 - SSradiation.radiate(src, (max(20, rads))) - - explosion(src.loc, 3, 3, 5, 3) - qdel(src) - -/obj/machinery/power/port_gen/pacman/mrs - name = "M.R.S.P.A.C.M.A.N.-type Portable Generator" - desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!" - icon_state = "portgen2" - sheet_path = /obj/item/stack/material/tritium - sheet_name = "Tritium Fuel Sheets" - - //I don't think tritium has any other use, so we might as well make this rewarding for players - //max safe power output (power level = 8) is 200 kW and lasts for 1 hour - 3 or 4 of these could power the station - power_gen = 25000 //watts - max_power_output = 10 - max_safe_output = 8 - time_per_sheet = 576 - max_temperature = 800 - temperature_gain = 90 - circuit = /obj/item/weapon/circuitboard/pacman/mrs - -/obj/machinery/power/port_gen/pacman/mrs/explode() - //no special effects, but the explosion is pretty big (same as a supermatter shard). - explosion(src.loc, 3, 6, 12, 16, 1) - qdel(src) +//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 = "Placeholder Generator" //seriously, don't use this. It can't be anchored without VV magic. + desc = "A portable generator for emergency backup power" + icon = 'icons/obj/power_vr.dmi' //VOREStation Edit + icon_state = "portgen0" //VOREStation Edit + density = TRUE + anchored = FALSE + use_power = USE_POWER_OFF + interact_offline = TRUE + + var/active = 0 + var/power_gen = 5000 + var/recent_fault = 0 + var/power_output = 1 + +/obj/machinery/power/port_gen/proc/IsBroken() + return (stat & (BROKEN|EMPED)) + +/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check. + return 1 + +/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 + update_icon() + // soundloop.start() + +/obj/machinery/power/port_gen/process() + if(active && HasFuel() && !IsBroken() && anchored && powernet) + add_avail(power_gen * power_output) + UseFuel() + else + active = FALSE + update_icon() + handleInactive() + +/obj/machinery/power/port_gen/update_icon() + if(active) + icon_state = "[initial(icon_state)]on" + else + icon_state = initial(icon_state) + +/obj/machinery/power/powered() + return 1 //doesn't require an external power source + +/obj/machinery/power/port_gen/attack_hand(mob/user as mob) + if(..()) + return + if(!anchored) + return + +/obj/machinery/power/port_gen/examine(mob/user) + . = ..() + if(Adjacent(user)) //It literally has a light on the sprite, are you sure this is necessary? + if(active) + . += "The generator is on." + else + . += "The generator is off." + +/obj/machinery/power/port_gen/emp_act(severity) + var/duration = 6000 //ten minutes + switch(severity) + if(1) + stat &= BROKEN + if(prob(75)) explode() + if(2) + if(prob(50)) stat &= BROKEN + if(prob(10)) explode() + if(3) + if(prob(25)) stat &= BROKEN + duration = 300 + if(4) + if(prob(10)) stat &= BROKEN + duration = 300 + + stat |= EMPED + if(duration) + spawn(duration) + stat &= ~EMPED + +/obj/machinery/power/port_gen/proc/explode() + explosion(src.loc, -1, 3, 5, -1) + qdel(src) + +#define TEMPERATURE_DIVISOR 40 +#define TEMPERATURE_CHANGE_MAX 20 + +//A power generator that runs on solid plasma sheets. +/obj/machinery/power/port_gen/pacman + name = "\improper P.A.C.M.A.N.-type Portable Generator" + desc = "A power generator that runs on solid phoron sheets. Rated for 80 kW max safe output." + circuit = /obj/item/weapon/circuitboard/pacman + var/sheet_name = "Phoron Sheets" + var/sheet_path = /obj/item/stack/material/phoron + + /* + These values were chosen so that the generator can run safely up to 80 kW + A full 50 phoron sheet stack should last 20 minutes at power_output = 4 + temperature_gain and max_temperature are set so that the max safe power level is 4. + Setting to 5 or higher can only be done temporarily before the generator overheats. + */ + power_gen = 20000 //Watts output per power_output level + var/max_power_output = 5 //The maximum power setting without emagging. + var/max_safe_output = 4 // For UI use, maximal output that won't cause overheat. + var/time_per_sheet = 96 //fuel efficiency - how long 1 sheet lasts at power level 1 + var/max_sheets = 100 //max capacity of the hopper + var/max_temperature = 300 //max temperature before overheating increases + var/temperature_gain = 50 //how much the temperature increases per power output level, in degrees per level + + var/sheets = 0 //How many sheets of material are loaded in the generator + var/sheet_left = 0 //How much is left of the current sheet + var/temperature = 0 //The current temperature + var/overheating = 0 //if this gets high enough the generator explodes + +/obj/machinery/power/port_gen/pacman/Initialize() + . = ..() + default_apply_parts() + if(anchored) + connect_to_network() + +/obj/machinery/power/port_gen/pacman/Destroy() + DropFuel() + return ..() + +/obj/machinery/power/port_gen/pacman/dismantle() + while( sheets > 0 ) + DropFuel() + return ..() + +/obj/machinery/power/port_gen/pacman/RefreshParts() + var/temp_rating = 0 + for(var/obj/item/weapon/stock_parts/SP in component_parts) + if(istype(SP, /obj/item/weapon/stock_parts/matter_bin)) + max_sheets = SP.rating * SP.rating * 50 + else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor)) + temp_rating += SP.rating + + power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2)) + +/obj/machinery/power/port_gen/pacman/examine(mob/user) + . = ..() + . += "It appears to be producing [power_gen*power_output] W." + . += "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper." + if(IsBroken()) + . += "It seems to have broken down." + if(overheating) + . += "It is overheating!" + +/obj/machinery/power/port_gen/pacman/HasFuel() + var/needed_sheets = power_output / time_per_sheet + if(sheets >= needed_sheets - sheet_left) + return 1 + return 0 + +//Removes one stack's worth of material from the generator. +/obj/machinery/power/port_gen/pacman/DropFuel() + if(sheets) + var/obj/item/stack/material/S = new sheet_path(loc, sheets) + sheets -= S.get_amount() + +/obj/machinery/power/port_gen/pacman/UseFuel() + + //how much material are we using this iteration? + var/needed_sheets = power_output / time_per_sheet + + //HasFuel() should guarantee us that there is enough fuel left, so no need to check that + //the only thing we need to worry about is if we are going to rollover to the next sheet + if (needed_sheets > sheet_left) + sheets-- + sheet_left = (1 + sheet_left) - needed_sheets + else + sheet_left -= needed_sheets + + //calculate the "target" temperature range + //This should probably depend on the external temperature somehow, but whatever. + var/lower_limit = 56 + power_output * temperature_gain + var/upper_limit = 76 + power_output * temperature_gain + + /* + Hot or cold environments can affect the equilibrium temperature + The lower the pressure the less effect it has. I guess it cools using a radiator or something when in vacuum. + Gives traitors more opportunities to sabotage the generator or allows enterprising engineers to build additional + cooling in order to get more power out. + */ + var/datum/gas_mixture/environment = loc.return_air() + if (environment) + var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) + var/ambient = environment.temperature - T20C + lower_limit += ambient*ratio + upper_limit += ambient*ratio + + var/average = (upper_limit + lower_limit)/2 + + //calculate the temperature increase + var/bias = 0 + if (temperature < lower_limit) + bias = min(round((average - temperature)/TEMPERATURE_DIVISOR, 1), TEMPERATURE_CHANGE_MAX) + else if (temperature > upper_limit) + bias = max(round((temperature - average)/TEMPERATURE_DIVISOR, 1), -TEMPERATURE_CHANGE_MAX) + + //limit temperature increase so that it cannot raise temperature above upper_limit, + //or if it is already above upper_limit, limit the increase to 0. + var/inc_limit = max(upper_limit - temperature, 0) + var/dec_limit = min(temperature - lower_limit, 0) + temperature += between(dec_limit, rand(-7 + bias, 7 + bias), inc_limit) + + if (temperature > max_temperature) + overheat() + else if (overheating > 0) + overheating-- + +/obj/machinery/power/port_gen/pacman/handleInactive() + var/cooling_temperature = 20 + var/datum/gas_mixture/environment = loc.return_air() + if(environment) + var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) + var/ambient = environment.temperature - T20C + cooling_temperature += ambient*ratio + + if(temperature > cooling_temperature) + var/temp_loss = (temperature - cooling_temperature)/TEMPERATURE_DIVISOR + temp_loss = between(2, round(temp_loss, 1), TEMPERATURE_CHANGE_MAX) + temperature = max(temperature - temp_loss, cooling_temperature) + updateDialog() + + if(overheating) + overheating-- + +/obj/machinery/power/port_gen/pacman/proc/overheat() + overheating++ + if (overheating > 60) + explode() + +/obj/machinery/power/port_gen/pacman/explode() + //Vapourize all the phoron + //When ground up in a grinder, 1 sheet produces 20 u of phoron -- Chemistry-Machinery.dm + //1 mol = 10 u? I dunno. 1 mol of carbon is definitely bigger than a pill + var/phoron = (sheets+sheet_left)*20 + var/datum/gas_mixture/environment = loc.return_air() + if (environment) + environment.adjust_gas_temp("phoron", phoron/10, temperature + T0C) + + sheets = 0 + sheet_left = 0 + ..() + +/obj/machinery/power/port_gen/pacman/emag_act(var/remaining_charges, var/mob/user) + if (active && prob(25)) + explode() //if they're foolish enough to emag while it's running + + if (!emagged) + emagged = 1 + return 1 + +/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, sheet_path)) + var/obj/item/stack/addstack = O + var/amount = min((max_sheets - sheets), addstack.get_amount()) + if(amount < 1) + to_chat(user, "The [src.name] is full!") + return + to_chat(user, "You add [amount] sheet\s to the [src.name].") + sheets += amount + addstack.use(amount) + updateUsrDialog() + return + else if(!active) + if(O.has_tool_quality(TOOL_WRENCH)) + if(!anchored) + connect_to_network() + to_chat(user, "You secure the generator to the floor.") + else + disconnect_from_network() + to_chat(user, "You unsecure the generator from the floor.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + anchored = !anchored + return + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + else if(default_part_replacement(user, O)) + return + return ..() + +/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) + ..() + if (!anchored) + return + tgui_interact(user) + +/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/power/port_gen/tgui_status(mob/user, datum/tgui_state/state) + if(IsBroken()) + return STATUS_CLOSE + return ..() + +/obj/machinery/power/port_gen/pacman/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortableGenerator", name) + ui.open() + +/obj/machinery/power/port_gen/pacman/tgui_data(mob/user) + var/list/data = list() + + data["active"] = active + + if(istype(user, /mob/living/silicon/ai)) + data["is_ai"] = TRUE + else if(istype(user, /mob/living/silicon/robot) && !Adjacent(user)) + data["is_ai"] = TRUE + else + data["is_ai"] = FALSE + + data["sheet_name"] = capitalize(sheet_name) + data["fuel_stored"] = round((sheets * 1000) + (sheet_left * 1000)) + data["fuel_capacity"] = round(max_sheets * 1000, 0.1) + data["fuel_usage"] = active ? round((power_output / time_per_sheet) * 1000) : 0 + + 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["unsafe_output"] = power_output > max_safe_output + data["power_available"] = (powernet == null ? 0 : DisplayPower(avail())) + data["temperature_current"] = temperature + data["temperature_max"] = max_temperature + data["temperature_overheat"] = overheating + // 1 sheet = 1000cm3? + + return data + +/obj/machinery/power/port_gen/pacman/tgui_act(action, params) + if(..()) + return + + add_fingerprint(usr) + 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 < max_power_output || (emagged && power_output < round(max_power_output * 2.5))) + power_output++ + . = TRUE + +/obj/machinery/power/port_gen/pacman/super + name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator" + desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output." + icon_state = "portgen1" + sheet_path = /obj/item/stack/material/uranium + sheet_name = "Uranium Sheets" + time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power + circuit = /obj/item/weapon/circuitboard/pacman/super + +/obj/machinery/power/port_gen/pacman/super/UseFuel() + //produces a tiny amount of radiation when in use + if (prob(2*power_output)) + SSradiation.radiate(src, 4) + ..() + +/obj/machinery/power/port_gen/pacman/super/explode() + //a nice burst of radiation + var/rads = 50 + (sheets + sheet_left)*1.5 + SSradiation.radiate(src, (max(20, rads))) + + explosion(src.loc, 3, 3, 5, 3) + qdel(src) + +/obj/machinery/power/port_gen/pacman/mrs + name = "M.R.S.P.A.C.M.A.N.-type Portable Generator" + desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!" + icon_state = "portgen2" + sheet_path = /obj/item/stack/material/tritium + sheet_name = "Tritium Fuel Sheets" + + //I don't think tritium has any other use, so we might as well make this rewarding for players + //max safe power output (power level = 8) is 200 kW and lasts for 1 hour - 3 or 4 of these could power the station + power_gen = 25000 //watts + max_power_output = 10 + max_safe_output = 8 + time_per_sheet = 576 + max_temperature = 800 + temperature_gain = 90 + circuit = /obj/item/weapon/circuitboard/pacman/mrs + +/obj/machinery/power/port_gen/pacman/mrs/explode() + //no special effects, but the explosion is pretty big (same as a supermatter shard). + explosion(src.loc, 3, 6, 12, 16, 1) + qdel(src) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index dc09a9fb0c..f0aeb8d74a 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -1,349 +1,349 @@ -////////////////////////////// -// POWER MACHINERY BASE CLASS -////////////////////////////// - -///////////////////////////// -// Definitions -///////////////////////////// - -/obj/machinery/power - name = null - icon = 'icons/obj/power.dmi' - anchored = TRUE - var/datum/powernet/powernet = null - use_power = USE_POWER_OFF - idle_power_usage = 0 - active_power_usage = 0 - -/obj/machinery/power/Destroy() - disconnect_from_network() - return ..() - -/////////////////////////////// -// General procedures -////////////////////////////// - -// common helper procs for all power machines -/obj/machinery/power/drain_power(var/drain_check, var/surge, var/amount = 0) - if(drain_check) - return 1 - - if(powernet && powernet.avail) - powernet.trigger_warning() - return powernet.draw_power(amount) - -/obj/machinery/power/proc/add_avail(var/amount) - if(powernet) - powernet.newavail += amount - return TRUE - return FALSE - -/obj/machinery/power/proc/draw_power(var/amount) - if(powernet) - return powernet.draw_power(amount) - return 0 - -/obj/machinery/power/proc/surplus() - if(powernet) - return powernet.avail-powernet.load - else - return 0 - -/obj/machinery/power/proc/avail() - if(powernet) - return powernet.avail - else - return 0 - -/obj/machinery/power/proc/viewload() - if(powernet) - return powernet.viewload - else - return 0 - -/obj/machinery/power/proc/disconnect_terminal(var/obj/machinery/power/terminal/term) // machines without a terminal will just return, no harm no fowl. - return - -// connect the machine to a powernet if a node cable is present on the turf -/obj/machinery/power/proc/connect_to_network() - var/turf/T = src.loc - if(!T || !istype(T)) - return 0 - - 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) - return 0 - - C.powernet.add_machine(src) - return 1 - -// remove and disconnect the machine from its current powernet -/obj/machinery/power/proc/disconnect_from_network() - if(!powernet) - return 0 - powernet.remove_machine(src) - return 1 - -// 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/weapon/W, mob/user) - - if(istype(W, /obj/item/stack/cable_coil)) - - var/obj/item/stack/cable_coil/coil = W - - var/turf/T = user.loc - - if(!T.is_plating() || !istype(T, /turf/simulated/floor)) - return - - if(get_dist(src, user) > 1) - return - - coil.turf_place(T, user) - return - else - ..() - return - -// Power machinery should also connect/disconnect from the network. -/obj/machinery/power/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) - if((. = ..())) - if(anchored) - connect_to_network() - else - disconnect_from_network() - -// Used for power spikes by the engine, has specific effects on different machines. -/obj/machinery/power/proc/overload(var/obj/machinery/power/source) - return - -// Used by the grid checker upon receiving a power spike. -/obj/machinery/power/proc/do_grid_check() - return - -/obj/machinery/power/proc/power_spike() - 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/cdir - var/turf/T - - for(var/card in cardinal) - T = get_step(loc,card) - cdir = get_dir(T,loc) - - for(var/obj/structure/cable/C in T) - if(C.powernet) continue - if(C.d1 == cdir || C.d2 == cdir) - . += 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/cdir - var/turf/T - - for(var/card in cardinal) - T = get_step(loc,card) - cdir = get_dir(T,loc) - - for(var/obj/structure/cable/C in T) - if(C.d1 == cdir || C.d2 == cdir) - . += 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 - if(C.d1 == 0) // the cable is a node cable - . += C - return . - -/////////////////////////////////////////// -// GLOBAL PROCS for powernets handling -////////////////////////////////////////// - - -// returns a list of all power-related objects (nodes, cable, junctions) in turf, -// excluding source, that match the direction d -// if unmarked==1, only return those with no powernet -/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0) - . = list() - - var/reverse = d ? reverse_dir[d] : 0 - for(var/AM in T) - if(AM == source) continue //we don't want to return source - - if(!cable_only && istype(AM,/obj/machinery/power)) - var/obj/machinery/power/P = AM - if(P.powernet == 0) continue // exclude APCs which have powernet=0 - - if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet - if(d == 0) - . += P - - else if(istype(AM,/obj/structure/cable)) - var/obj/structure/cable/C = AM - - if(!unmarked || !C.powernet) - if(C.d1 == d || C.d2 == d || C.d1 == reverse || C.d2 == reverse ) - . += C - return . - -//remove the old powernet and replace it with a new one throughout the network. -/proc/propagate_network(var/obj/O, var/datum/powernet/PN) - //to_world_log("propagating new network") - var/list/worklist = list() - var/list/found_machines = list() - var/index = 1 - var/obj/P = null - - worklist+=O //start propagating from the passed object - - while(index<=worklist.len) //until we've exhausted all power objects - P = worklist[index] //get the next power object found - index++ - - if( istype(P,/obj/structure/cable)) - var/obj/structure/cable/C = P - if(C.powernet != PN) //add it to the powernet, if it isn't already there - PN.add_cable(C) - worklist |= C.get_connections() //get adjacents power objects, with or without a powernet - - else if(P.anchored && istype(P,/obj/machinery/power)) - var/obj/machinery/power/M = P - found_machines |= M //we wait until the powernet is fully propagates to connect the machines - - else - continue - - //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(var/datum/powernet/net1, var/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) - - if(!net2) return net1 - - 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) -//No animations will be performed by this proc. -/proc/electrocute_mob(mob/living/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) - if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb - if(issilicon(M)) return 0 //No more robot shocks from machinery - 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/weapon/cell/cell - - if(istype(power_source,/datum/powernet)) - PN = power_source - else if(istype(power_source,/obj/item/weapon/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 - //Triggers powernet warning, but only for 5 ticks (if applicable) - //If following checks determine user is protected we won't alarm for long. - if(PN) - PN.trigger_warning(5) - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.siemens_coefficient <= 0) - return - 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 -/*CHOMP Edit: Phorochem removed. -//Phorochemistry DM: Allows chemicalresistant shocking -Radiantflash - for(var/datum/reagent/phororeagent/R in M.reagents.reagent_list) - if(R.id == "fulguracin") - to_chat(M, "Your hairs stand up, but you resist the shock for the most part") - return 0 //no shock for you -*/ - //Checks again. If we are still here subject will be shocked, trigger standard 20 tick warning - //Since this one is longer it will override the original one. - if(PN) - PN.trigger_warning() - - 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! - var/drained_energy = drained_hp*20 - - if (source_area) - source_area.use_power_oneoff(drained_energy/CELLRATE, EQUIP) - else if (istype(power_source,/datum/powernet)) - var/drained_power = drained_energy/CELLRATE - drained_power = PN.draw_power(drained_power) - else if (istype(power_source, /obj/item/weapon/cell)) - cell.use(drained_energy) - return drained_energy +////////////////////////////// +// POWER MACHINERY BASE CLASS +////////////////////////////// + +///////////////////////////// +// Definitions +///////////////////////////// + +/obj/machinery/power + name = null + icon = 'icons/obj/power.dmi' + anchored = TRUE + var/datum/powernet/powernet = null + use_power = USE_POWER_OFF + idle_power_usage = 0 + active_power_usage = 0 + +/obj/machinery/power/Destroy() + disconnect_from_network() + return ..() + +/////////////////////////////// +// General procedures +////////////////////////////// + +// common helper procs for all power machines +/obj/machinery/power/drain_power(var/drain_check, var/surge, var/amount = 0) + if(drain_check) + return 1 + + if(powernet && powernet.avail) + powernet.trigger_warning() + return powernet.draw_power(amount) + +/obj/machinery/power/proc/add_avail(var/amount) + if(powernet) + powernet.newavail += amount + return TRUE + return FALSE + +/obj/machinery/power/proc/draw_power(var/amount) + if(powernet) + return powernet.draw_power(amount) + return 0 + +/obj/machinery/power/proc/surplus() + if(powernet) + return powernet.avail-powernet.load + else + return 0 + +/obj/machinery/power/proc/avail() + if(powernet) + return powernet.avail + else + return 0 + +/obj/machinery/power/proc/viewload() + if(powernet) + return powernet.viewload + else + return 0 + +/obj/machinery/power/proc/disconnect_terminal(var/obj/machinery/power/terminal/term) // machines without a terminal will just return, no harm no fowl. + return + +// connect the machine to a powernet if a node cable is present on the turf +/obj/machinery/power/proc/connect_to_network() + var/turf/T = src.loc + if(!T || !istype(T)) + return 0 + + 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) + return 0 + + C.powernet.add_machine(src) + return 1 + +// remove and disconnect the machine from its current powernet +/obj/machinery/power/proc/disconnect_from_network() + if(!powernet) + return 0 + powernet.remove_machine(src) + return 1 + +// 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/weapon/W, mob/user) + + if(istype(W, /obj/item/stack/cable_coil)) + + var/obj/item/stack/cable_coil/coil = W + + var/turf/T = user.loc + + if(!T.is_plating() || !istype(T, /turf/simulated/floor)) + return + + if(get_dist(src, user) > 1) + return + + coil.turf_place(T, user) + return + else + ..() + return + +// Power machinery should also connect/disconnect from the network. +/obj/machinery/power/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) + if((. = ..())) + if(anchored) + connect_to_network() + else + disconnect_from_network() + +// Used for power spikes by the engine, has specific effects on different machines. +/obj/machinery/power/proc/overload(var/obj/machinery/power/source) + return + +// Used by the grid checker upon receiving a power spike. +/obj/machinery/power/proc/do_grid_check() + return + +/obj/machinery/power/proc/power_spike() + 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/cdir + var/turf/T + + for(var/card in cardinal) + T = get_step(loc,card) + cdir = get_dir(T,loc) + + for(var/obj/structure/cable/C in T) + if(C.powernet) continue + if(C.d1 == cdir || C.d2 == cdir) + . += 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/cdir + var/turf/T + + for(var/card in cardinal) + T = get_step(loc,card) + cdir = get_dir(T,loc) + + for(var/obj/structure/cable/C in T) + if(C.d1 == cdir || C.d2 == cdir) + . += 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 + if(C.d1 == 0) // the cable is a node cable + . += C + return . + +/////////////////////////////////////////// +// GLOBAL PROCS for powernets handling +////////////////////////////////////////// + + +// returns a list of all power-related objects (nodes, cable, junctions) in turf, +// excluding source, that match the direction d +// if unmarked==1, only return those with no powernet +/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0) + . = list() + + var/reverse = d ? reverse_dir[d] : 0 + for(var/AM in T) + if(AM == source) continue //we don't want to return source + + if(!cable_only && istype(AM,/obj/machinery/power)) + var/obj/machinery/power/P = AM + if(P.powernet == 0) continue // exclude APCs which have powernet=0 + + if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet + if(d == 0) + . += P + + else if(istype(AM,/obj/structure/cable)) + var/obj/structure/cable/C = AM + + if(!unmarked || !C.powernet) + if(C.d1 == d || C.d2 == d || C.d1 == reverse || C.d2 == reverse ) + . += C + return . + +//remove the old powernet and replace it with a new one throughout the network. +/proc/propagate_network(var/obj/O, var/datum/powernet/PN) + //to_world_log("propagating new network") + var/list/worklist = list() + var/list/found_machines = list() + var/index = 1 + var/obj/P = null + + worklist+=O //start propagating from the passed object + + while(index<=worklist.len) //until we've exhausted all power objects + P = worklist[index] //get the next power object found + index++ + + if( istype(P,/obj/structure/cable)) + var/obj/structure/cable/C = P + if(C.powernet != PN) //add it to the powernet, if it isn't already there + PN.add_cable(C) + worklist |= C.get_connections() //get adjacents power objects, with or without a powernet + + else if(P.anchored && istype(P,/obj/machinery/power)) + var/obj/machinery/power/M = P + found_machines |= M //we wait until the powernet is fully propagates to connect the machines + + else + continue + + //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(var/datum/powernet/net1, var/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) + + if(!net2) return net1 + + 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) +//No animations will be performed by this proc. +/proc/electrocute_mob(mob/living/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) + if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb + if(issilicon(M)) return 0 //No more robot shocks from machinery + 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/weapon/cell/cell + + if(istype(power_source,/datum/powernet)) + PN = power_source + else if(istype(power_source,/obj/item/weapon/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 + //Triggers powernet warning, but only for 5 ticks (if applicable) + //If following checks determine user is protected we won't alarm for long. + if(PN) + PN.trigger_warning(5) + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.siemens_coefficient <= 0) + return + 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 +/*CHOMP Edit: Phorochem removed. +//Phorochemistry DM: Allows chemicalresistant shocking -Radiantflash + for(var/datum/reagent/phororeagent/R in M.reagents.reagent_list) + if(R.id == "fulguracin") + to_chat(M, "Your hairs stand up, but you resist the shock for the most part") + return 0 //no shock for you +*/ + //Checks again. If we are still here subject will be shocked, trigger standard 20 tick warning + //Since this one is longer it will override the original one. + if(PN) + PN.trigger_warning() + + 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! + var/drained_energy = drained_hp*20 + + if (source_area) + source_area.use_power_oneoff(drained_energy/CELLRATE, EQUIP) + else if (istype(power_source,/datum/powernet)) + var/drained_power = drained_energy/CELLRATE + drained_power = PN.draw_power(drained_power) + else if (istype(power_source, /obj/item/weapon/cell)) + cell.use(drained_energy) + return drained_energy diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 4cca170e54..5ab38f80e6 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -1,125 +1,125 @@ -#define I_SINGULO "singulo" - -/atom/proc/singularity_act() - return - -/atom/proc/singularity_pull(S, current_size) - return - -/mob/living/singularity_act() - investigate_log("has been consumed by a singularity", I_SINGULO) - gib() - return 20 - -/mob/living/singularity_pull(S, current_size) - step_towards(src, S) - apply_effect(current_size * 3, IRRADIATE, blocked = getarmor(null, "rad")) - -/mob/living/carbon/human/singularity_act() - var/gain = 20 - if(mind) - if((mind.assigned_role == "Engineer") || (mind.assigned_role == "Chief Engineer")) - gain = 100 - if(mind.assigned_role == USELESS_JOB) //VOREStation Edit - Visitor not Assistant - gain = rand(0, 300) - investigate_log(I_SINGULO,"has been consumed by a singularity", I_SINGULO) - gib() - return gain - -/mob/living/carbon/human/singularity_pull(S, current_size) - if(current_size >= STAGE_THREE) - var/list/handlist = list(l_hand, r_hand) - for(var/obj/item/hand in handlist) - if(prob(current_size*5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) - step_towards(hand, S) - to_chat(src, "The [S] pulls \the [hand] from your grip!") - - if(!lying && (!shoes || !(shoes.item_flags & NOSLIP)) && (!species || !(species.flags & NOSLIP)) && prob(current_size*5)) - to_chat(src, "A strong gravitational force slams you to the ground!") - Weaken(current_size) - ..() - -/obj/singularity_act() - if(simulated) - ex_act(1) - if(src) - qdel(src) - return 2 - -/obj/singularity_pull(S, current_size) - set waitfor = 0 - - if(anchored) - return - - sleep(0) //this is needed or multiple items will be thrown sequentially and not simultaneously - if(current_size >= STAGE_FOUR) - step_towards(src,S) - sleep(1) - step_towards(src,S) - else if(current_size > STAGE_ONE) - step_towards(src,S) - else ..() - -/obj/effect/beam/singularity_pull() - return - -/obj/effect/overlay/singularity_pull() - return - -/obj/machinery/power/supermatter/shard/singularity_act() - qdel(src) - return 5000 - -/obj/machinery/power/supermatter/singularity_act() - if(!src.loc) - return - - var/prints = "" - if(src.fingerprintshidden) - prints = ", all touchers : " + src.fingerprintshidden - - SetUniversalState(/datum/universal_state/supermatter_cascade) - log_admin("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") - message_admins("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") - qdel(src) - return 50000 - -/obj/item/projectile/beam/emitter/singularity_pull() - return - -/obj/effect/projectile/emitter/singularity_pull() - return - -/obj/item/weapon/storage/backpack/holding/singularity_act(S, current_size) - var/dist = max((current_size - 2), 1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - return -1000 //CHOMPEDIT - Consistency with literally every other codebase - -/turf/singularity_act(S, current_size) - if(!is_plating()) - for(var/obj/O in contents) - if(O.level != 1) - continue - if(O.invisibility == 101) - O.singularity_act(src, current_size) - ChangeTurf(get_base_turf_by_area(src)) - return 2 - -/turf/space/singularity_act() - return - -/turf/simulated/open/singularity_act() - return - -/******************* -* Nar-Sie Act/Pull * -*******************/ -/atom/proc/singuloCanEat() - return 1 - -/mob/observer/singuloCanEat() - return 0 - -/mob/new_player/singuloCanEat() - return 0 +#define I_SINGULO "singulo" + +/atom/proc/singularity_act() + return + +/atom/proc/singularity_pull(S, current_size) + return + +/mob/living/singularity_act() + investigate_log("has been consumed by a singularity", I_SINGULO) + gib() + return 20 + +/mob/living/singularity_pull(S, current_size) + step_towards(src, S) + apply_effect(current_size * 3, IRRADIATE, blocked = getarmor(null, "rad")) + +/mob/living/carbon/human/singularity_act() + var/gain = 20 + if(mind) + if((mind.assigned_role == "Engineer") || (mind.assigned_role == "Chief Engineer")) + gain = 100 + if(mind.assigned_role == USELESS_JOB) //VOREStation Edit - Visitor not Assistant + gain = rand(0, 300) + investigate_log(I_SINGULO,"has been consumed by a singularity", I_SINGULO) + gib() + return gain + +/mob/living/carbon/human/singularity_pull(S, current_size) + if(current_size >= STAGE_THREE) + var/list/handlist = list(l_hand, r_hand) + for(var/obj/item/hand in handlist) + if(prob(current_size*5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) + step_towards(hand, S) + to_chat(src, "The [S] pulls \the [hand] from your grip!") + + if(!lying && (!shoes || !(shoes.item_flags & NOSLIP)) && (!species || !(species.flags & NOSLIP)) && prob(current_size*5)) + to_chat(src, "A strong gravitational force slams you to the ground!") + Weaken(current_size) + ..() + +/obj/singularity_act() + if(simulated) + ex_act(1) + if(src) + qdel(src) + return 2 + +/obj/singularity_pull(S, current_size) + set waitfor = 0 + + if(anchored) + return + + sleep(0) //this is needed or multiple items will be thrown sequentially and not simultaneously + if(current_size >= STAGE_FOUR) + step_towards(src,S) + sleep(1) + step_towards(src,S) + else if(current_size > STAGE_ONE) + step_towards(src,S) + else ..() + +/obj/effect/beam/singularity_pull() + return + +/obj/effect/overlay/singularity_pull() + return + +/obj/machinery/power/supermatter/shard/singularity_act() + qdel(src) + return 5000 + +/obj/machinery/power/supermatter/singularity_act() + if(!src.loc) + return + + var/prints = "" + if(src.fingerprintshidden) + prints = ", all touchers : " + src.fingerprintshidden + + SetUniversalState(/datum/universal_state/supermatter_cascade) + log_admin("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") + message_admins("New super singularity made by eating a SM crystal [prints]. Last touched by [src.fingerprintslast].") + qdel(src) + return 50000 + +/obj/item/projectile/beam/emitter/singularity_pull() + return + +/obj/effect/projectile/emitter/singularity_pull() + return + +/obj/item/weapon/storage/backpack/holding/singularity_act(S, current_size) + var/dist = max((current_size - 2), 1) + explosion(src.loc,(dist),(dist*2),(dist*4)) + return -1000 //CHOMPEDIT - Consistency with literally every other codebase + +/turf/singularity_act(S, current_size) + if(!is_plating()) + for(var/obj/O in contents) + if(O.level != 1) + continue + if(O.invisibility == 101) + O.singularity_act(src, current_size) + ChangeTurf(get_base_turf_by_area(src)) + return 2 + +/turf/space/singularity_act() + return + +/turf/simulated/open/singularity_act() + return + +/******************* +* Nar-Sie Act/Pull * +*******************/ +/atom/proc/singuloCanEat() + return 1 + +/mob/observer/singuloCanEat() + return 0 + +/mob/new_player/singuloCanEat() + return 0 diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 55a7d4d2b9..38499f3fa4 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -1,88 +1,88 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/machinery/containment_field - name = "Containment Field" - desc = "An energy field." - icon = 'icons/obj/machines/field_generator.dmi' - icon_state = "Contain_F" - anchored = TRUE - density = FALSE - unacidable = TRUE - use_power = USE_POWER_OFF - light_on = TRUE - light_range = 2 - light_power = 0.5 - light_color = "#5BA8FF" - var/obj/machinery/field_generator/FG1 = null - var/obj/machinery/field_generator/FG2 = null - var/list/shockdirs - var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. - -/obj/machinery/containment_field/Initialize() - . = ..() - shockdirs = list(turn(dir,90),turn(dir,-90)) - sense_proximity(callback = /atom/proc/HasProximity) - -/obj/machinery/containment_field/set_dir(new_dir) - . = ..() - if(.) - shockdirs = list(turn(dir,90),turn(dir,-90)) - -/obj/machinery/containment_field/Destroy() - unsense_proximity(callback = /atom/proc/HasProximity) - if(FG1 && !FG1.clean_up) - FG1.cleanup() - if(FG2 && !FG2.clean_up) - FG2.cleanup() - . = ..() - -/obj/machinery/containment_field/attack_hand(mob/user as mob) - if(get_dist(src, user) > 1) - return 0 - else - shock(user) - return 1 - - -/obj/machinery/containment_field/ex_act(severity) - return 0 - -/obj/machinery/containment_field/Crossed(mob/living/L) - if(!istype(L) || L.incorporeal_move) - return - shock(L) - -/obj/machinery/containment_field/HasProximity(turf/T, atom/movable/AM, old_loc) - if(!istype(AM, /mob/living) || AM:incorporeal_move) - return 0 - if(!(get_dir(src,AM) in shockdirs)) - return 0 - if(issilicon(AM) ? prob(40) : prob(50)) - shock(AM) - return 1 - return 0 - -/obj/machinery/containment_field/shock(mob/living/user as mob) - if(hasShocked) - return 0 - if(!FG1 || !FG2) - qdel(src) - return 0 - if(isliving(user)) - hasShocked = 1 - var/shock_damage = min(rand(30,40),rand(30,40)) - user.electrocute_act(shock_damage, src, 1, BP_TORSO) - - var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src))) - user.throw_at(target, 200, 4) - - sleep(20) - - hasShocked = 0 - -/obj/machinery/containment_field/proc/set_master(var/master1,var/master2) - if(!master1 || !master2) - return 0 - FG1 = master1 - FG2 = master2 - return 1 +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/obj/machinery/containment_field + name = "Containment Field" + desc = "An energy field." + icon = 'icons/obj/machines/field_generator.dmi' + icon_state = "Contain_F" + anchored = TRUE + density = FALSE + unacidable = TRUE + use_power = USE_POWER_OFF + light_on = TRUE + light_range = 2 + light_power = 0.5 + light_color = "#5BA8FF" + var/obj/machinery/field_generator/FG1 = null + var/obj/machinery/field_generator/FG2 = null + var/list/shockdirs + var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. + +/obj/machinery/containment_field/Initialize() + . = ..() + shockdirs = list(turn(dir,90),turn(dir,-90)) + sense_proximity(callback = /atom/proc/HasProximity) + +/obj/machinery/containment_field/set_dir(new_dir) + . = ..() + if(.) + shockdirs = list(turn(dir,90),turn(dir,-90)) + +/obj/machinery/containment_field/Destroy() + unsense_proximity(callback = /atom/proc/HasProximity) + if(FG1 && !FG1.clean_up) + FG1.cleanup() + if(FG2 && !FG2.clean_up) + FG2.cleanup() + . = ..() + +/obj/machinery/containment_field/attack_hand(mob/user as mob) + if(get_dist(src, user) > 1) + return 0 + else + shock(user) + return 1 + + +/obj/machinery/containment_field/ex_act(severity) + return 0 + +/obj/machinery/containment_field/Crossed(mob/living/L) + if(!istype(L) || L.incorporeal_move) + return + shock(L) + +/obj/machinery/containment_field/HasProximity(turf/T, atom/movable/AM, old_loc) + if(!istype(AM, /mob/living) || AM:incorporeal_move) + return 0 + if(!(get_dir(src,AM) in shockdirs)) + return 0 + if(issilicon(AM) ? prob(40) : prob(50)) + shock(AM) + return 1 + return 0 + +/obj/machinery/containment_field/shock(mob/living/user as mob) + if(hasShocked) + return 0 + if(!FG1 || !FG2) + qdel(src) + return 0 + if(isliving(user)) + hasShocked = 1 + var/shock_damage = min(rand(30,40),rand(30,40)) + user.electrocute_act(shock_damage, src, 1, BP_TORSO) + + var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src))) + user.throw_at(target, 200, 4) + + sleep(20) + + hasShocked = 0 + +/obj/machinery/containment_field/proc/set_master(var/master1,var/master2) + if(!master1 || !master2) + return 0 + FG1 = master1 + FG2 = master2 + return 1 diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 6c191479b8..e14b59f09b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -1,312 +1,312 @@ -#define EMITTER_DAMAGE_POWER_TRANSFER 450 //used to transfer power to containment field generators - -/obj/machinery/power/emitter - name = "emitter" - desc = "It is a heavy duty industrial laser." - icon = 'icons/obj/singularity.dmi' - icon_state = "emitter" - anchored = FALSE - density = TRUE - unacidable = TRUE - req_access = list(access_engine_equip) - var/id = null - - use_power = USE_POWER_OFF //uses powernet power, not APC power - active_power_usage = 30000 //30 kW laser. I guess that means 30 kJ per shot. - - var/active = 0 - var/powered = 0 - var/fire_delay = 100 - var/max_burst_delay = 100 - var/min_burst_delay = 20 - var/burst_shots = 3 - var/last_shot = 0 - var/shot_number = 0 - var/state = 0 - var/locked = 0 - - var/burst_delay = 2 - var/initial_fire_delay = 100 - - var/integrity = 80 - -/obj/machinery/power/emitter/verb/rotate_clockwise() - set name = "Rotate Emitter Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/machinery/power/emitter/verb/rotate_counterclockwise() - set name = "Rotate Emitter Counter-Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 90)) - return 1 - -/obj/machinery/power/emitter/Initialize() - . = ..() - if(state == 2 && anchored) - connect_to_network() - -/obj/machinery/power/emitter/Destroy() - message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) - log_game("EMITTER([x],[y],[z]) Destroyed/deleted.") - investigate_log("deleted at ([x],[y],[z])","singulo") - ..() - -/obj/machinery/power/emitter/update_icon() - if (active && powernet && avail(active_power_usage)) - icon_state = "emitter_+a" - else - icon_state = "emitter" - -/obj/machinery/power/emitter/attack_hand(mob/user as mob) - src.add_fingerprint(user) - activate(user) - -/obj/machinery/power/emitter/proc/activate(mob/user as mob) - if(state == 2) - if(!powernet) - to_chat(user, "\The [src] isn't connected to a wire.") - return 1 - if(!src.locked) - if(src.active==1) - src.active = 0 - to_chat(user, "You turn off [src].") - message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("EMITTER([x],[y],[z]) OFF by [key_name(user)]") - investigate_log("turned off by [user.key]","singulo") - else - src.active = 1 - to_chat(user, "You turn on [src].") - src.shot_number = 0 - src.fire_delay = get_initial_fire_delay() - message_admins("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("EMITTER([x],[y],[z]) ON by [key_name(user)]") - investigate_log("turned on by [user.key]","singulo") - update_icon() - else - to_chat(user, "The controls are locked!") - else - to_chat(user, "\The [src] needs to be firmly secured to the floor first.") - return 1 - - -/obj/machinery/power/emitter/emp_act(var/severity)//Emitters are hardened but still might have issues -// add_load(1000) -/* if((severity == 1)&&prob(1)&&prob(1)) - if(src.active) - src.active = 0 - src.use_power = 1 */ - return 1 - -/obj/machinery/power/emitter/process() - if(stat & (BROKEN)) - return - if(src.state != 2 || (!powernet && active_power_usage)) - src.active = 0 - update_icon() - return - if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1)) - - var/actual_load = draw_power(active_power_usage) - if(actual_load >= active_power_usage) //does the laser have enough power to shoot? - if(!powered) - powered = 1 - update_icon() - log_game("EMITTER([x],[y],[z]) Regained power and is ON.") - investigate_log("regained power and turned on","singulo") - else - if(powered) - powered = 0 - update_icon() - log_game("EMITTER([x],[y],[z]) Lost power and was ON.") - investigate_log("lost power and turned off","singulo") - return - - src.last_shot = world.time - if(src.shot_number < burst_shots) - src.fire_delay = get_burst_delay() //R-UST port - src.shot_number ++ - else - src.fire_delay = get_rand_burst_delay() //R-UST port - src.shot_number = 0 - - //need to calculate the power per shot as the emitter doesn't fire continuously. - var/burst_time = (min_burst_delay + max_burst_delay)/2 + 2*(burst_shots-1) - var/power_per_shot = active_power_usage * (burst_time/10) / burst_shots - - playsound(src, 'sound/weapons/emitter.ogg', 25, 1) - if(prob(35)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - - var/obj/item/projectile/beam/emitter/A = get_emitter_beam() - A.damage = round(power_per_shot/EMITTER_DAMAGE_POWER_TRANSFER) - A.firer = src - A.fire(dir2angle(dir)) - -/obj/machinery/power/emitter/attackby(obj/item/W, mob/user) - - if(W.has_tool_quality(TOOL_WRENCH)) - if(active) - to_chat(user, "Turn off [src] first.") - return - switch(state) - if(0) - state = 1 - playsound(src, W.usesound, 75, 1) - user.visible_message("[user.name] secures [src] to the floor.", \ - "You secure the external reinforcing bolts to the floor.", \ - "You hear a ratchet.") - src.anchored = TRUE - if(1) - state = 0 - playsound(src, W.usesound, 75, 1) - user.visible_message("[user.name] unsecures [src] reinforcing bolts from the floor.", \ - "You undo the external reinforcing bolts.", \ - "You hear a ratchet.") - src.anchored = FALSE - disconnect_from_network() - if(2) - to_chat(user, "\The [src] needs to be unwelded from the floor.") - update_icon() // VOREStation Add - return - - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(active) - to_chat(user, "Turn off [src] first.") - return - switch(state) - if(0) - to_chat(user, "\The [src] needs to be wrenched to the floor.") - if(1) - if (WT.remove_fuel(0,user)) - playsound(src, WT.usesound, 50, 1) - user.visible_message("[user.name] starts to weld [src] to the floor.", \ - "You start to weld [src] to the floor.", \ - "You hear welding") - if (do_after(user,20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - state = 2 - to_chat(user, "You weld [src] to the floor.") - connect_to_network() - else - to_chat(user, "You need more welding fuel to complete this task.") - if(2) - if (WT.remove_fuel(0,user)) - playsound(src, WT.usesound, 50, 1) - user.visible_message("[user.name] starts to cut [src] free from the floor.", \ - "You start to cut [src] free from the floor.", \ - "You hear welding") - if (do_after(user,20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - state = 1 - to_chat(user, "You cut [src] free from the floor.") - disconnect_from_network() - else - to_chat(user, "You need more welding fuel to complete this task.") - update_icon() // VOREStation Add - return - - if(istype(W, /obj/item/stack/material) && W.get_material_name() == MAT_STEEL) - var/amt = CEILING(( initial(integrity) - integrity)/10, 1) - if(!amt) - to_chat(user, "\The [src] is already fully repaired.") - return - var/obj/item/stack/P = W - if(!P.can_use(amt)) - to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") - return - to_chat(user, "You begin repairing \the [src]...") - if(do_after(user, 30)) - if(P.use(amt)) - to_chat(user, "You have repaired \the [src].") - integrity = initial(integrity) - return - else - to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") - return - - if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) - if(emagged) - to_chat(user, "The lock seems to be broken.") - return - if(src.allowed(user)) - src.locked = !src.locked - to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") - update_icon() // VOREStation Add - else - to_chat(user, "Access denied.") - return - ..() - return - -/obj/machinery/power/emitter/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - locked = 0 - emagged = 1 - user.visible_message("[user.name] emags [src].","You short out the lock.") - return 1 - -/obj/machinery/power/emitter/bullet_act(var/obj/item/projectile/P) - if(!P || !P.damage || P.get_structure_damage() <= 0 ) - return - - adjust_integrity(-P.get_structure_damage()) - -/obj/machinery/power/emitter/blob_act() - adjust_integrity(-1000) // This kills the emitter. - -/obj/machinery/power/emitter/proc/adjust_integrity(amount) - integrity = between(0, integrity + amount, initial(integrity)) - if(integrity == 0) - if(powernet && avail(active_power_usage)) // If it's powered, it goes boom if killed. - visible_message(src, "\The [src] explodes violently!", "You hear an explosion!") - explosion(get_turf(src), 1, 2, 4) - else - src.visible_message("\The [src] crumples apart!", "You hear metal collapsing.") - if(src) - qdel(src) - -/obj/machinery/power/emitter/examine(mob/user) - . = ..() - switch(state) - if(0) - . += "It is not secured in place!" - if(1) - . += "It has been bolted down securely, but not welded into place." - if(2) - . += "It has been bolted down securely and welded down into place." - var/integrity_percentage = round((integrity / initial(integrity)) * 100) - switch(integrity_percentage) - if(0 to 30) - . += "It is close to falling apart!" - if(31 to 70) - . += "It is damaged." - if(77 to 99) - . += "It is slightly damaged." - -//R-UST port -/obj/machinery/power/emitter/proc/get_initial_fire_delay() - return initial_fire_delay - -/obj/machinery/power/emitter/proc/get_rand_burst_delay() - return rand(min_burst_delay, max_burst_delay) - -/obj/machinery/power/emitter/proc/get_burst_delay() - return burst_delay - -/obj/machinery/power/emitter/proc/get_emitter_beam() - return new /obj/item/projectile/beam/emitter(get_turf(src)) +#define EMITTER_DAMAGE_POWER_TRANSFER 450 //used to transfer power to containment field generators + +/obj/machinery/power/emitter + name = "emitter" + desc = "It is a heavy duty industrial laser." + icon = 'icons/obj/singularity.dmi' + icon_state = "emitter" + anchored = FALSE + density = TRUE + unacidable = TRUE + req_access = list(access_engine_equip) + var/id = null + + use_power = USE_POWER_OFF //uses powernet power, not APC power + active_power_usage = 30000 //30 kW laser. I guess that means 30 kJ per shot. + + var/active = 0 + var/powered = 0 + var/fire_delay = 100 + var/max_burst_delay = 100 + var/min_burst_delay = 20 + var/burst_shots = 3 + var/last_shot = 0 + var/shot_number = 0 + var/state = 0 + var/locked = 0 + + var/burst_delay = 2 + var/initial_fire_delay = 100 + + var/integrity = 80 + +/obj/machinery/power/emitter/verb/rotate_clockwise() + set name = "Rotate Emitter Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/machinery/power/emitter/verb/rotate_counterclockwise() + set name = "Rotate Emitter Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 + +/obj/machinery/power/emitter/Initialize() + . = ..() + if(state == 2 && anchored) + connect_to_network() + +/obj/machinery/power/emitter/Destroy() + message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) + log_game("EMITTER([x],[y],[z]) Destroyed/deleted.") + investigate_log("deleted at ([x],[y],[z])","singulo") + ..() + +/obj/machinery/power/emitter/update_icon() + if (active && powernet && avail(active_power_usage)) + icon_state = "emitter_+a" + else + icon_state = "emitter" + +/obj/machinery/power/emitter/attack_hand(mob/user as mob) + src.add_fingerprint(user) + activate(user) + +/obj/machinery/power/emitter/proc/activate(mob/user as mob) + if(state == 2) + if(!powernet) + to_chat(user, "\The [src] isn't connected to a wire.") + return 1 + if(!src.locked) + if(src.active==1) + src.active = 0 + to_chat(user, "You turn off [src].") + message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) + log_game("EMITTER([x],[y],[z]) OFF by [key_name(user)]") + investigate_log("turned off by [user.key]","singulo") + else + src.active = 1 + to_chat(user, "You turn on [src].") + src.shot_number = 0 + src.fire_delay = get_initial_fire_delay() + message_admins("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) + log_game("EMITTER([x],[y],[z]) ON by [key_name(user)]") + investigate_log("turned on by [user.key]","singulo") + update_icon() + else + to_chat(user, "The controls are locked!") + else + to_chat(user, "\The [src] needs to be firmly secured to the floor first.") + return 1 + + +/obj/machinery/power/emitter/emp_act(var/severity)//Emitters are hardened but still might have issues +// add_load(1000) +/* if((severity == 1)&&prob(1)&&prob(1)) + if(src.active) + src.active = 0 + src.use_power = 1 */ + return 1 + +/obj/machinery/power/emitter/process() + if(stat & (BROKEN)) + return + if(src.state != 2 || (!powernet && active_power_usage)) + src.active = 0 + update_icon() + return + if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1)) + + var/actual_load = draw_power(active_power_usage) + if(actual_load >= active_power_usage) //does the laser have enough power to shoot? + if(!powered) + powered = 1 + update_icon() + log_game("EMITTER([x],[y],[z]) Regained power and is ON.") + investigate_log("regained power and turned on","singulo") + else + if(powered) + powered = 0 + update_icon() + log_game("EMITTER([x],[y],[z]) Lost power and was ON.") + investigate_log("lost power and turned off","singulo") + return + + src.last_shot = world.time + if(src.shot_number < burst_shots) + src.fire_delay = get_burst_delay() //R-UST port + src.shot_number ++ + else + src.fire_delay = get_rand_burst_delay() //R-UST port + src.shot_number = 0 + + //need to calculate the power per shot as the emitter doesn't fire continuously. + var/burst_time = (min_burst_delay + max_burst_delay)/2 + 2*(burst_shots-1) + var/power_per_shot = active_power_usage * (burst_time/10) / burst_shots + + playsound(src, 'sound/weapons/emitter.ogg', 25, 1) + if(prob(35)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + + var/obj/item/projectile/beam/emitter/A = get_emitter_beam() + A.damage = round(power_per_shot/EMITTER_DAMAGE_POWER_TRANSFER) + A.firer = src + A.fire(dir2angle(dir)) + +/obj/machinery/power/emitter/attackby(obj/item/W, mob/user) + + if(W.has_tool_quality(TOOL_WRENCH)) + if(active) + to_chat(user, "Turn off [src] first.") + return + switch(state) + if(0) + state = 1 + playsound(src, W.usesound, 75, 1) + user.visible_message("[user.name] secures [src] to the floor.", \ + "You secure the external reinforcing bolts to the floor.", \ + "You hear a ratchet.") + src.anchored = TRUE + if(1) + state = 0 + playsound(src, W.usesound, 75, 1) + user.visible_message("[user.name] unsecures [src] reinforcing bolts from the floor.", \ + "You undo the external reinforcing bolts.", \ + "You hear a ratchet.") + src.anchored = FALSE + disconnect_from_network() + if(2) + to_chat(user, "\The [src] needs to be unwelded from the floor.") + update_icon() // VOREStation Add + return + + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(active) + to_chat(user, "Turn off [src] first.") + return + switch(state) + if(0) + to_chat(user, "\The [src] needs to be wrenched to the floor.") + if(1) + if (WT.remove_fuel(0,user)) + playsound(src, WT.usesound, 50, 1) + user.visible_message("[user.name] starts to weld [src] to the floor.", \ + "You start to weld [src] to the floor.", \ + "You hear welding") + if (do_after(user,20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + state = 2 + to_chat(user, "You weld [src] to the floor.") + connect_to_network() + else + to_chat(user, "You need more welding fuel to complete this task.") + if(2) + if (WT.remove_fuel(0,user)) + playsound(src, WT.usesound, 50, 1) + user.visible_message("[user.name] starts to cut [src] free from the floor.", \ + "You start to cut [src] free from the floor.", \ + "You hear welding") + if (do_after(user,20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + state = 1 + to_chat(user, "You cut [src] free from the floor.") + disconnect_from_network() + else + to_chat(user, "You need more welding fuel to complete this task.") + update_icon() // VOREStation Add + return + + if(istype(W, /obj/item/stack/material) && W.get_material_name() == MAT_STEEL) + var/amt = CEILING(( initial(integrity) - integrity)/10, 1) + if(!amt) + to_chat(user, "\The [src] is already fully repaired.") + return + var/obj/item/stack/P = W + if(!P.can_use(amt)) + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") + return + to_chat(user, "You begin repairing \the [src]...") + if(do_after(user, 30)) + if(P.use(amt)) + to_chat(user, "You have repaired \the [src].") + integrity = initial(integrity) + return + else + to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") + return + + if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) + if(emagged) + to_chat(user, "The lock seems to be broken.") + return + if(src.allowed(user)) + src.locked = !src.locked + to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") + update_icon() // VOREStation Add + else + to_chat(user, "Access denied.") + return + ..() + return + +/obj/machinery/power/emitter/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + locked = 0 + emagged = 1 + user.visible_message("[user.name] emags [src].","You short out the lock.") + return 1 + +/obj/machinery/power/emitter/bullet_act(var/obj/item/projectile/P) + if(!P || !P.damage || P.get_structure_damage() <= 0 ) + return + + adjust_integrity(-P.get_structure_damage()) + +/obj/machinery/power/emitter/blob_act() + adjust_integrity(-1000) // This kills the emitter. + +/obj/machinery/power/emitter/proc/adjust_integrity(amount) + integrity = between(0, integrity + amount, initial(integrity)) + if(integrity == 0) + if(powernet && avail(active_power_usage)) // If it's powered, it goes boom if killed. + visible_message(src, "\The [src] explodes violently!", "You hear an explosion!") + explosion(get_turf(src), 1, 2, 4) + else + src.visible_message("\The [src] crumples apart!", "You hear metal collapsing.") + if(src) + qdel(src) + +/obj/machinery/power/emitter/examine(mob/user) + . = ..() + switch(state) + if(0) + . += "It is not secured in place!" + if(1) + . += "It has been bolted down securely, but not welded into place." + if(2) + . += "It has been bolted down securely and welded down into place." + var/integrity_percentage = round((integrity / initial(integrity)) * 100) + switch(integrity_percentage) + if(0 to 30) + . += "It is close to falling apart!" + if(31 to 70) + . += "It is damaged." + if(77 to 99) + . += "It is slightly damaged." + +//R-UST port +/obj/machinery/power/emitter/proc/get_initial_fire_delay() + return initial_fire_delay + +/obj/machinery/power/emitter/proc/get_rand_burst_delay() + return rand(min_burst_delay, max_burst_delay) + +/obj/machinery/power/emitter/proc/get_burst_delay() + return burst_delay + +/obj/machinery/power/emitter/proc/get_emitter_beam() + return new /obj/item/projectile/beam/emitter(get_turf(src)) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index ff2486d893..35d593efae 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -1,60 +1,60 @@ -/////SINGULARITY SPAWNER -/obj/machinery/the_singularitygen/ - name = "Gravitational Singularity Generator" - desc = "An Odd Device which produces a Gravitational Singularity when set up." - icon = 'icons/obj/singularity.dmi' - icon_state = "TheSingGen" - anchored = FALSE - density = TRUE - use_power = USE_POWER_OFF - var/energy = 0 - var/creation_type = /obj/singularity - -/obj/machinery/the_singularitygen/examine() - . = ..() - if(anchored) - . += "It has been securely bolted down and is ready for operation." - else - . += "It is not secured!" - -/obj/machinery/the_singularitygen/process() - var/turf/T = get_turf(src) - if(src.energy >= 200) - new creation_type(T, 50) - if(src) qdel(src) - -/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user) - if(W.has_tool_quality(TOOL_WRENCH)) - anchored = !anchored - playsound(src, W.usesound, 75, 1) - if(anchored) - user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the [src.name] to the floor.", \ - "You hear a ratchet.") - else - user.visible_message("[user.name] unsecures [src.name] from the floor.", \ - "You unsecure the [src.name] from the floor.", \ - "You hear a ratchet.") - return - if(W.has_tool_quality(TOOL_SCREWDRIVER)) - panel_open = !panel_open - playsound(src, W.usesound, 50, 1) - visible_message("\The [user] adjusts \the [src]'s mechanisms.") - if(panel_open && do_after(user, 30)) - to_chat(user, "\The [src] looks like it could be modified.") - if(panel_open && do_after(user, 80 * W.toolspeed)) // We don't have skills, so a delayed hint for engineers will have to do for now. (Panel open check for sanity) - playsound(src, W.usesound, 50, 1) - to_chat(user, "\The [src] looks like it could be adapted to forge advanced materials via particle acceleration, somehow..") - else - to_chat(user, "\The [src]'s mechanisms look secure.") - if(istype(W, /obj/item/weapon/smes_coil/super_io) && panel_open) - visible_message("\The [user] begins to modify \the [src] with \the [W].") - if(do_after(user, 300)) - user.drop_from_inventory(W) - visible_message("\The [user] installs \the [W] onto \the [src].") - qdel(W) - var/turf/T = get_turf(src) - var/new_machine = /obj/machinery/particle_smasher - new new_machine(T) - qdel(src) - return ..() +/////SINGULARITY SPAWNER +/obj/machinery/the_singularitygen/ + name = "Gravitational Singularity Generator" + desc = "An Odd Device which produces a Gravitational Singularity when set up." + icon = 'icons/obj/singularity.dmi' + icon_state = "TheSingGen" + anchored = FALSE + density = TRUE + use_power = USE_POWER_OFF + var/energy = 0 + var/creation_type = /obj/singularity + +/obj/machinery/the_singularitygen/examine() + . = ..() + if(anchored) + . += "It has been securely bolted down and is ready for operation." + else + . += "It is not secured!" + +/obj/machinery/the_singularitygen/process() + var/turf/T = get_turf(src) + if(src.energy >= 200) + new creation_type(T, 50) + if(src) qdel(src) + +/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user) + if(W.has_tool_quality(TOOL_WRENCH)) + anchored = !anchored + playsound(src, W.usesound, 75, 1) + if(anchored) + user.visible_message("[user.name] secures [src.name] to the floor.", \ + "You secure the [src.name] to the floor.", \ + "You hear a ratchet.") + else + user.visible_message("[user.name] unsecures [src.name] from the floor.", \ + "You unsecure the [src.name] from the floor.", \ + "You hear a ratchet.") + return + if(W.has_tool_quality(TOOL_SCREWDRIVER)) + panel_open = !panel_open + playsound(src, W.usesound, 50, 1) + visible_message("\The [user] adjusts \the [src]'s mechanisms.") + if(panel_open && do_after(user, 30)) + to_chat(user, "\The [src] looks like it could be modified.") + if(panel_open && do_after(user, 80 * W.toolspeed)) // We don't have skills, so a delayed hint for engineers will have to do for now. (Panel open check for sanity) + playsound(src, W.usesound, 50, 1) + to_chat(user, "\The [src] looks like it could be adapted to forge advanced materials via particle acceleration, somehow..") + else + to_chat(user, "\The [src]'s mechanisms look secure.") + if(istype(W, /obj/item/weapon/smes_coil/super_io) && panel_open) + visible_message("\The [user] begins to modify \the [src] with \the [W].") + if(do_after(user, 300)) + user.drop_from_inventory(W) + visible_message("\The [user] installs \the [W] onto \the [src].") + qdel(W) + var/turf/T = get_turf(src) + var/new_machine = /obj/machinery/particle_smasher + new new_machine(T) + qdel(src) + return ..() diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index ce69674522..b266115207 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -1,103 +1,103 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/effect/accelerated_particle - name = "Accelerated Particles" - desc = "Small things moving very fast." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "particle1"//Need a new icon for this - anchored = TRUE - density = TRUE - movement_type = UNSTOPPABLE // for bumps to trigger - var/movement_range = 10 - var/energy = 10 //energy in eV - var/mega_energy = 0 //energy in MeV - var/frequency = 1 - var/ionizing = 0 - var/particle_type - var/additional_particles = 0 - var/turf/target - var/turf/source - var/movetotarget = 1 - -/obj/effect/accelerated_particle/weak - icon_state = "particle0" - movement_range = 8 - energy = 5 - -/obj/effect/accelerated_particle/strong - icon_state = "particle2" - movement_range = 15 - energy = 15 - -/obj/effect/accelerated_particle/powerful - icon_state = "particle3" - movement_range = 25 - energy = 50 - -/obj/effect/accelerated_particle/New(loc, dir = 2) - src.loc = loc - src.set_dir(dir) - spawn(0) - move(1) - - -/obj/effect/accelerated_particle/Bump(atom/A) - if (A) - if(ismob(A)) - toxmob(A) - if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/singularity/))||(istype(A, /obj/machinery/particle_smasher))) - A:energy += energy - //R-UST port - else if(istype(A,/obj/machinery/power/fusion_core)) - var/obj/machinery/power/fusion_core/collided_core = A - if(particle_type && particle_type != "neutron") - if(collided_core.AddParticles(particle_type, 1 + additional_particles)) - collided_core.owned_field.plasma_temperature += mega_energy - collided_core.owned_field.energy += energy - loc = null - else if(istype(A, /obj/effect/fusion_particle_catcher)) - var/obj/effect/fusion_particle_catcher/PC = A - if(particle_type && particle_type != "neutron") - if(PC.parent.owned_core.AddParticles(particle_type, 1 + additional_particles)) - PC.parent.plasma_temperature += mega_energy - PC.parent.energy += energy - loc = null - - -/obj/effect/accelerated_particle/Bumped(atom/A) - if(ismob(A)) - Bump(A) - - -/obj/effect/accelerated_particle/ex_act(severity) - qdel(src) - -/obj/effect/accelerated_particle/singularity_act() - return - -/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) - var/radiation = (energy*2) - M.apply_effect((radiation*3),IRRADIATE,0) - M.updatehealth() - //to_chat(M, "You feel odd.") - - -/obj/effect/accelerated_particle/proc/move(var/lag) - if(target) - if(movetotarget) - if(!step_towards(src,target)) - src.loc = get_step(src, get_dir(src,target)) - if(get_dist(src,target) < 1) - movetotarget = 0 - else - if(!step(src, get_step_away(src,source))) - src.loc = get_step(src, get_step_away(src,source)) - else - if(!step(src,dir)) - src.loc = get_step(src,dir) - movement_range-- - if(movement_range <= 0) - qdel(src) - else - sleep(lag) - move(lag) +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/obj/effect/accelerated_particle + name = "Accelerated Particles" + desc = "Small things moving very fast." + icon = 'icons/obj/machines/particle_accelerator2.dmi' + icon_state = "particle1"//Need a new icon for this + anchored = TRUE + density = TRUE + movement_type = UNSTOPPABLE // for bumps to trigger + var/movement_range = 10 + var/energy = 10 //energy in eV + var/mega_energy = 0 //energy in MeV + var/frequency = 1 + var/ionizing = 0 + var/particle_type + var/additional_particles = 0 + var/turf/target + var/turf/source + var/movetotarget = 1 + +/obj/effect/accelerated_particle/weak + icon_state = "particle0" + movement_range = 8 + energy = 5 + +/obj/effect/accelerated_particle/strong + icon_state = "particle2" + movement_range = 15 + energy = 15 + +/obj/effect/accelerated_particle/powerful + icon_state = "particle3" + movement_range = 25 + energy = 50 + +/obj/effect/accelerated_particle/New(loc, dir = 2) + src.loc = loc + src.set_dir(dir) + spawn(0) + move(1) + + +/obj/effect/accelerated_particle/Bump(atom/A) + if (A) + if(ismob(A)) + toxmob(A) + if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/singularity/))||(istype(A, /obj/machinery/particle_smasher))) + A:energy += energy + //R-UST port + else if(istype(A,/obj/machinery/power/fusion_core)) + var/obj/machinery/power/fusion_core/collided_core = A + if(particle_type && particle_type != "neutron") + if(collided_core.AddParticles(particle_type, 1 + additional_particles)) + collided_core.owned_field.plasma_temperature += mega_energy + collided_core.owned_field.energy += energy + loc = null + else if(istype(A, /obj/effect/fusion_particle_catcher)) + var/obj/effect/fusion_particle_catcher/PC = A + if(particle_type && particle_type != "neutron") + if(PC.parent.owned_core.AddParticles(particle_type, 1 + additional_particles)) + PC.parent.plasma_temperature += mega_energy + PC.parent.energy += energy + loc = null + + +/obj/effect/accelerated_particle/Bumped(atom/A) + if(ismob(A)) + Bump(A) + + +/obj/effect/accelerated_particle/ex_act(severity) + qdel(src) + +/obj/effect/accelerated_particle/singularity_act() + return + +/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) + var/radiation = (energy*2) + M.apply_effect((radiation*3),IRRADIATE,0) + M.updatehealth() + //to_chat(M, "You feel odd.") + + +/obj/effect/accelerated_particle/proc/move(var/lag) + if(target) + if(movetotarget) + if(!step_towards(src,target)) + src.loc = get_step(src, get_dir(src,target)) + if(get_dist(src,target) < 1) + movetotarget = 0 + else + if(!step(src, get_step_away(src,source))) + src.loc = get_step(src, get_step_away(src,source)) + else + if(!step(src,dir)) + src.loc = get_step(src,dir) + movement_range-- + if(movement_range <= 0) + qdel(src) + else + sleep(lag) + move(lag) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 4ef082b0ae..19f3a386c8 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -1,385 +1,385 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/*Composed of 7 parts -3 Particle emitters -proc -emit_particle() - -1 power box -the only part of this thing that uses power, can hack to mess with the pa/make it better. -Lies, only the control computer draws power. - -1 fuel chamber -contains procs for mixing gas and whatever other fuel it uses -mix_gas() - -1 gas holder WIP -acts like a tank valve on the ground that you wrench gas tanks onto -proc -extract_gas() -return_gas() -attach_tank() -remove_tank() -get_available_mix() - -1 End Cap - -1 Control computer -interface for the pa, acts like a computer with an html menu for diff parts and a status report -all other parts contain only a ref to this -a /machine/, tells the others to do work -contains ref for all parts -proc -process() -check_build() - -Setup map - |EC| -CC|FC| - |PB| -PE|PE|PE - - -Icon Addemdum -Icon system is much more robust, and the icons are all variable based. -Each part has a reference string, powered, strength, and contruction values. -Using this the update_icon() proc is simplified a bit (using for absolutely was problematic with naming), -so the icon_state comes out be: -"[reference][strength]", with a switch controlling construction_states and ensuring that it doesn't -power on while being contructed, and all these variables are set by the computer through it's scan list -Essential order of the icons: -Standard - [reference] -Wrenched - [reference] -Wired - [reference]w -Closed - [reference]c -Powered - [reference]p[strength] -Strength being set by the computer and a null strength (Computer is powered off or inactive) returns a 'null', counting as empty -So, hopefully this is helpful if any more icons are to be added/changed/wondering what the hell is going on here - -*/ - -/obj/structure/particle_accelerator - name = "Particle Accelerator" - desc = "Part of a Particle Accelerator." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "none" - anchored = FALSE - density = TRUE - var/obj/machinery/particle_accelerator/control_box/master = null - var/construction_state = 0 - var/reference = null - var/powered = 0 - var/strength = null - var/desc_holder = null - -/obj/structure/particle_accelerator/Destroy() - construction_state = 0 - if(master) - master.part_scan() - ..() - -/obj/structure/particle_accelerator/end_cap - name = "Alpha Particle Generation Array" - desc_holder = "This is where Alpha particles are generated from \[REDACTED\]" - icon_state = "end_cap" - reference = "end_cap" - -/obj/structure/particle_accelerator/update_icon() - ..() - return - - -/obj/structure/particle_accelerator/verb/rotate_clockwise() - set name = "Rotate Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/structure/particle_accelerator/verb/rotate_counterclockwise() - set name = "Rotate Counter Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 90)) - return 1 - -/obj/structure/particle_accelerator/examine(mob/user) - . = ..() - - switch(construction_state) - if(0) - . += "Looks like it's not attached to the flooring." - if(1) - . += "It is missing some cables." - if(2) - . += "The panel is open." - if(3) - . += "It is assembled." - -/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user) - if(istool(W)) - if(src.process_tool_hit(W,user)) - return - ..() - return - - -/obj/structure/particle_accelerator/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(master?.active) - master.toggle_power() - log_game("PACCEL([x],[y],[z]) Was moved while active and turned off.") - investigate_log("was moved whilst active; it powered down.","singulo") - -/obj/structure/particle_accelerator/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - qdel(src) - return - if(3.0) - if (prob(25)) - qdel(src) - return - else - return - -/obj/structure/particle_accelerator/update_icon() - switch(construction_state) - if(0,1) - icon_state="[reference]" - if(2) - icon_state="[reference]w" - if(3) - if(powered) - icon_state="[reference]p[strength]" - else - icon_state="[reference]c" - return - -/obj/structure/particle_accelerator/proc/update_state() - if(master) - master.update_state() - return 0 - - -/obj/structure/particle_accelerator/proc/report_ready(var/obj/O) - if(O && (O == master)) - if(construction_state >= 3) - return 1 - return 0 - - -/obj/structure/particle_accelerator/proc/report_master() - if(master) - return master - return 0 - - -/obj/structure/particle_accelerator/proc/connect_master(var/obj/O) - if(O && istype(O,/obj/machinery/particle_accelerator/control_box)) - if(O.dir == src.dir) - master = O - return 1 - return 0 - - -/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) - if(!(O) || !(user)) - return 0 - if(!ismob(user) || !isobj(O)) - return 0 - var/temp_state = src.construction_state - - switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps - if(0) - if(O.has_tool_quality(TOOL_WRENCH)) - playsound(src, O.usesound, 75, 1) - src.anchored = TRUE - user.visible_message("[user.name] secures the [src.name] to the floor.", \ - "You secure the external bolts.") - temp_state++ - if(1) - if(O.has_tool_quality(TOOL_WRENCH)) - playsound(src, O.usesound, 75, 1) - src.anchored = FALSE - user.visible_message("[user.name] detaches the [src.name] from the floor.", \ - "You remove the external bolts.") - temp_state-- - else if(istype(O, /obj/item/stack/cable_coil)) - if(O:use(1,user)) - user.visible_message("[user.name] adds wires to the [src.name].", \ - "You add some wires.") - temp_state++ - if(2) - if(O.has_tool_quality(TOOL_WIRECUTTER))//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [src.name].", \ - "You remove some wires.") - temp_state-- - else if(O.has_tool_quality(TOOL_SCREWDRIVER)) - user.visible_message("[user.name] closes the [src.name]'s access panel.", \ - "You close the access panel.") - temp_state++ - if(3) - if(O.has_tool_quality(TOOL_SCREWDRIVER)) - user.visible_message("[user.name] opens the [src.name]'s access panel.", \ - "You open the access panel.") - temp_state-- - if(temp_state == src.construction_state)//Nothing changed - return 0 - else - src.construction_state = temp_state - if(src.construction_state < 3)//Was taken apart, update state - update_state() - update_icon() - return 1 - - - -/obj/machinery/particle_accelerator - name = "Particle Accelerator" - desc = "Part of a Particle Accelerator." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "none" - anchored = FALSE - density = TRUE - use_power = USE_POWER_OFF - idle_power_usage = 0 - active_power_usage = 0 - var/construction_state = 0 - var/active = 0 - var/reference = null - var/powered = null - var/strength = 0 - var/desc_holder = null - - -/obj/machinery/particle_accelerator/verb/rotate_clockwise() - set name = "Rotate Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/machinery/particle_accelerator/verb/rotate_counterclockwise() - set name = "Rotate Counter-Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 90)) - return 1 - -/obj/machinery/particle_accelerator/update_icon() - return - -/obj/machinery/particle_accelerator/examine(mob/user) - . = ..() - - switch(construction_state) - if(0) - . += "Looks like it's not attached to the flooring." - if(1) - . += "It is missing some cables." - if(2) - . += "The panel is open." - if(3) - . += "It is assembled." - - -/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user) - if(istool(W)) - if(src.process_tool_hit(W,user)) - return - ..() - return - -/obj/machinery/particle_accelerator/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - qdel(src) - return - if(3.0) - if (prob(25)) - qdel(src) - return - else - return - -/obj/machinery/particle_accelerator/proc/update_state() - return 0 - -/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) - if(!(O) || !(user)) - return 0 - if(!ismob(user) || !isobj(O)) - return 0 - var/temp_state = src.construction_state - switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps - if(0) - if(O.has_tool_quality(TOOL_WRENCH)) - playsound(src, O.usesound, 75, 1) - src.anchored = TRUE - user.visible_message("[user.name] secures the [src.name] to the floor.", \ - "You secure the external bolts.") - temp_state++ - if(1) - if(O.has_tool_quality(TOOL_WRENCH)) - playsound(src, O.usesound, 75, 1) - src.anchored = FALSE - user.visible_message("[user.name] detaches the [src.name] from the floor.", \ - "You remove the external bolts.") - temp_state-- - else if(istype(O, /obj/item/stack/cable_coil)) - if(O:use(1)) - user.visible_message("[user.name] adds wires to the [src.name].", \ - "You add some wires.") - temp_state++ - if(2) - if(O.has_tool_quality(TOOL_WIRECUTTER))//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [src.name].", \ - "You remove some wires.") - temp_state-- - else if(O.has_tool_quality(TOOL_SCREWDRIVER)) - user.visible_message("[user.name] closes the [src.name]'s access panel.", \ - "You close the access panel.") - temp_state++ - if(3) - if(O.has_tool_quality(TOOL_SCREWDRIVER)) - user.visible_message("[user.name] opens the [src.name]'s access panel.", \ - "You open the access panel.") - temp_state-- - active = 0 - if(temp_state == src.construction_state)//Nothing changed - return 0 - else - if(src.construction_state < 3)//Was taken apart, update state - update_state() - if(use_power) - update_use_power(USE_POWER_OFF) - src.construction_state = temp_state - if(src.construction_state >= 3) - update_use_power(USE_POWER_IDLE) - update_icon() - return 1 +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/*Composed of 7 parts +3 Particle emitters +proc +emit_particle() + +1 power box +the only part of this thing that uses power, can hack to mess with the pa/make it better. +Lies, only the control computer draws power. + +1 fuel chamber +contains procs for mixing gas and whatever other fuel it uses +mix_gas() + +1 gas holder WIP +acts like a tank valve on the ground that you wrench gas tanks onto +proc +extract_gas() +return_gas() +attach_tank() +remove_tank() +get_available_mix() + +1 End Cap + +1 Control computer +interface for the pa, acts like a computer with an html menu for diff parts and a status report +all other parts contain only a ref to this +a /machine/, tells the others to do work +contains ref for all parts +proc +process() +check_build() + +Setup map + |EC| +CC|FC| + |PB| +PE|PE|PE + + +Icon Addemdum +Icon system is much more robust, and the icons are all variable based. +Each part has a reference string, powered, strength, and contruction values. +Using this the update_icon() proc is simplified a bit (using for absolutely was problematic with naming), +so the icon_state comes out be: +"[reference][strength]", with a switch controlling construction_states and ensuring that it doesn't +power on while being contructed, and all these variables are set by the computer through it's scan list +Essential order of the icons: +Standard - [reference] +Wrenched - [reference] +Wired - [reference]w +Closed - [reference]c +Powered - [reference]p[strength] +Strength being set by the computer and a null strength (Computer is powered off or inactive) returns a 'null', counting as empty +So, hopefully this is helpful if any more icons are to be added/changed/wondering what the hell is going on here + +*/ + +/obj/structure/particle_accelerator + name = "Particle Accelerator" + desc = "Part of a Particle Accelerator." + icon = 'icons/obj/machines/particle_accelerator2.dmi' + icon_state = "none" + anchored = FALSE + density = TRUE + var/obj/machinery/particle_accelerator/control_box/master = null + var/construction_state = 0 + var/reference = null + var/powered = 0 + var/strength = null + var/desc_holder = null + +/obj/structure/particle_accelerator/Destroy() + construction_state = 0 + if(master) + master.part_scan() + ..() + +/obj/structure/particle_accelerator/end_cap + name = "Alpha Particle Generation Array" + desc_holder = "This is where Alpha particles are generated from \[REDACTED\]" + icon_state = "end_cap" + reference = "end_cap" + +/obj/structure/particle_accelerator/update_icon() + ..() + return + + +/obj/structure/particle_accelerator/verb/rotate_clockwise() + set name = "Rotate Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/structure/particle_accelerator/verb/rotate_counterclockwise() + set name = "Rotate Counter Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 + +/obj/structure/particle_accelerator/examine(mob/user) + . = ..() + + switch(construction_state) + if(0) + . += "Looks like it's not attached to the flooring." + if(1) + . += "It is missing some cables." + if(2) + . += "The panel is open." + if(3) + . += "It is assembled." + +/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user) + if(istool(W)) + if(src.process_tool_hit(W,user)) + return + ..() + return + + +/obj/structure/particle_accelerator/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(master?.active) + master.toggle_power() + log_game("PACCEL([x],[y],[z]) Was moved while active and turned off.") + investigate_log("was moved whilst active; it powered down.","singulo") + +/obj/structure/particle_accelerator/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + qdel(src) + return + if(3.0) + if (prob(25)) + qdel(src) + return + else + return + +/obj/structure/particle_accelerator/update_icon() + switch(construction_state) + if(0,1) + icon_state="[reference]" + if(2) + icon_state="[reference]w" + if(3) + if(powered) + icon_state="[reference]p[strength]" + else + icon_state="[reference]c" + return + +/obj/structure/particle_accelerator/proc/update_state() + if(master) + master.update_state() + return 0 + + +/obj/structure/particle_accelerator/proc/report_ready(var/obj/O) + if(O && (O == master)) + if(construction_state >= 3) + return 1 + return 0 + + +/obj/structure/particle_accelerator/proc/report_master() + if(master) + return master + return 0 + + +/obj/structure/particle_accelerator/proc/connect_master(var/obj/O) + if(O && istype(O,/obj/machinery/particle_accelerator/control_box)) + if(O.dir == src.dir) + master = O + return 1 + return 0 + + +/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) + if(!(O) || !(user)) + return 0 + if(!ismob(user) || !isobj(O)) + return 0 + var/temp_state = src.construction_state + + switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps + if(0) + if(O.has_tool_quality(TOOL_WRENCH)) + playsound(src, O.usesound, 75, 1) + src.anchored = TRUE + user.visible_message("[user.name] secures the [src.name] to the floor.", \ + "You secure the external bolts.") + temp_state++ + if(1) + if(O.has_tool_quality(TOOL_WRENCH)) + playsound(src, O.usesound, 75, 1) + src.anchored = FALSE + user.visible_message("[user.name] detaches the [src.name] from the floor.", \ + "You remove the external bolts.") + temp_state-- + else if(istype(O, /obj/item/stack/cable_coil)) + if(O:use(1,user)) + user.visible_message("[user.name] adds wires to the [src.name].", \ + "You add some wires.") + temp_state++ + if(2) + if(O.has_tool_quality(TOOL_WIRECUTTER))//TODO:Shock user if its on? + user.visible_message("[user.name] removes some wires from the [src.name].", \ + "You remove some wires.") + temp_state-- + else if(O.has_tool_quality(TOOL_SCREWDRIVER)) + user.visible_message("[user.name] closes the [src.name]'s access panel.", \ + "You close the access panel.") + temp_state++ + if(3) + if(O.has_tool_quality(TOOL_SCREWDRIVER)) + user.visible_message("[user.name] opens the [src.name]'s access panel.", \ + "You open the access panel.") + temp_state-- + if(temp_state == src.construction_state)//Nothing changed + return 0 + else + src.construction_state = temp_state + if(src.construction_state < 3)//Was taken apart, update state + update_state() + update_icon() + return 1 + + + +/obj/machinery/particle_accelerator + name = "Particle Accelerator" + desc = "Part of a Particle Accelerator." + icon = 'icons/obj/machines/particle_accelerator2.dmi' + icon_state = "none" + anchored = FALSE + density = TRUE + use_power = USE_POWER_OFF + idle_power_usage = 0 + active_power_usage = 0 + var/construction_state = 0 + var/active = 0 + var/reference = null + var/powered = null + var/strength = 0 + var/desc_holder = null + + +/obj/machinery/particle_accelerator/verb/rotate_clockwise() + set name = "Rotate Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/machinery/particle_accelerator/verb/rotate_counterclockwise() + set name = "Rotate Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 + +/obj/machinery/particle_accelerator/update_icon() + return + +/obj/machinery/particle_accelerator/examine(mob/user) + . = ..() + + switch(construction_state) + if(0) + . += "Looks like it's not attached to the flooring." + if(1) + . += "It is missing some cables." + if(2) + . += "The panel is open." + if(3) + . += "It is assembled." + + +/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user) + if(istool(W)) + if(src.process_tool_hit(W,user)) + return + ..() + return + +/obj/machinery/particle_accelerator/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + qdel(src) + return + if(3.0) + if (prob(25)) + qdel(src) + return + else + return + +/obj/machinery/particle_accelerator/proc/update_state() + return 0 + +/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) + if(!(O) || !(user)) + return 0 + if(!ismob(user) || !isobj(O)) + return 0 + var/temp_state = src.construction_state + switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps + if(0) + if(O.has_tool_quality(TOOL_WRENCH)) + playsound(src, O.usesound, 75, 1) + src.anchored = TRUE + user.visible_message("[user.name] secures the [src.name] to the floor.", \ + "You secure the external bolts.") + temp_state++ + if(1) + if(O.has_tool_quality(TOOL_WRENCH)) + playsound(src, O.usesound, 75, 1) + src.anchored = FALSE + user.visible_message("[user.name] detaches the [src.name] from the floor.", \ + "You remove the external bolts.") + temp_state-- + else if(istype(O, /obj/item/stack/cable_coil)) + if(O:use(1)) + user.visible_message("[user.name] adds wires to the [src.name].", \ + "You add some wires.") + temp_state++ + if(2) + if(O.has_tool_quality(TOOL_WIRECUTTER))//TODO:Shock user if its on? + user.visible_message("[user.name] removes some wires from the [src.name].", \ + "You remove some wires.") + temp_state-- + else if(O.has_tool_quality(TOOL_SCREWDRIVER)) + user.visible_message("[user.name] closes the [src.name]'s access panel.", \ + "You close the access panel.") + temp_state++ + if(3) + if(O.has_tool_quality(TOOL_SCREWDRIVER)) + user.visible_message("[user.name] opens the [src.name]'s access panel.", \ + "You open the access panel.") + temp_state-- + active = 0 + if(temp_state == src.construction_state)//Nothing changed + return 0 + else + if(src.construction_state < 3)//Was taken apart, update state + update_state() + if(use_power) + update_use_power(USE_POWER_OFF) + src.construction_state = temp_state + if(src.construction_state >= 3) + update_use_power(USE_POWER_IDLE) + update_icon() + return 1 diff --git a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm b/code/modules/power/singularity/particle_accelerator/particle_chamber.dm index 4404c33671..eec07ae240 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_chamber.dm @@ -1,6 +1,6 @@ -/obj/structure/particle_accelerator/fuel_chamber - name = "EM Acceleration Chamber" - desc_holder = "This is where the Alpha particles are accelerated to radical speeds." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "fuel_chamber" +/obj/structure/particle_accelerator/fuel_chamber + name = "EM Acceleration Chamber" + desc_holder = "This is where the Alpha particles are accelerated to radical speeds." + icon = 'icons/obj/machines/particle_accelerator2.dmi' + icon_state = "fuel_chamber" reference = "fuel_chamber" \ No newline at end of file diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index b326c455c4..99d71c50e6 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -1,253 +1,253 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/machinery/particle_accelerator/control_box - name = "Particle Accelerator Control Computer" - desc = "This controls the density of the particles." - icon = 'icons/obj/machines/particle_accelerator_vr.dmi' //VOREStation Edit - icon_state = "control_box" - reference = "control_box" - anchored = FALSE - density = TRUE - use_power = USE_POWER_OFF - idle_power_usage = 500 - active_power_usage = 70000 //70 kW per unit of strength - construction_state = 0 - active = 0 - dir = 1 - var/strength_upper_limit = 2 - var/interface_control = 1 - var/list/obj/structure/particle_accelerator/connected_parts - var/assembled = 0 - var/parts = null - var/datum/wires/particle_acc/control_box/wires = null - -/obj/machinery/particle_accelerator/control_box/New() - wires = new(src) - connected_parts = list() - update_active_power_usage(initial(active_power_usage) * (strength + 1)) - ..() - -/obj/machinery/particle_accelerator/control_box/Destroy() - if(active) - toggle_power() - qdel(wires) - wires = null - return ..() - -/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob) - if(construction_state >= 3) - tgui_interact(user) - else if(construction_state == 2) // Wires exposed - wires.Interact(user) - -/obj/machinery/particle_accelerator/control_box/update_state() - if(construction_state < 3) - update_use_power(USE_POWER_OFF) - assembled = 0 - active = 0 - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = null - part.powered = 0 - part.update_icon() - connected_parts = list() - return - if(!part_scan()) - update_use_power(USE_POWER_IDLE) - active = 0 - connected_parts = list() - - -/obj/machinery/particle_accelerator/control_box/update_icon() - if(active) - icon_state = "[reference]p[strength]" - else - if(use_power) - if(assembled) - icon_state = "[reference]p" - else - icon_state = "u[reference]p" - else - switch(construction_state) - if(0) - icon_state = "[reference]" - if(1) - icon_state = "[reference]" - if(2) - icon_state = "[reference]w" - else - icon_state = "[reference]c" - -/obj/machinery/particle_accelerator/control_box/proc/strength_change() - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = strength - part.update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s) - if(assembled) - strength++ - if(strength > strength_upper_limit) - strength = strength_upper_limit - else - message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) - log_game("PACCEL([x],[y],[z]) [key_name(usr)] increased to [strength]") - investigate_log("increased to [strength] by [usr.key]","singulo") - strength_change() - -/obj/machinery/particle_accelerator/control_box/proc/remove_strength(var/s) - if(assembled) - strength-- - if(strength < 0) - strength = 0 - else - message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) - log_game("PACCEL([x],[y],[z]) [key_name(usr)] decreased to [strength]") - investigate_log("decreased to [strength] by [usr.key]","singulo") - strength_change() - -/obj/machinery/particle_accelerator/control_box/power_change() - ..() - if(stat & NOPOWER) - active = 0 - update_use_power(USE_POWER_OFF) - else if(!stat && construction_state == 3) - update_use_power(USE_POWER_IDLE) - - -/obj/machinery/particle_accelerator/control_box/process() - if(src.active) - //a part is missing! - if( length(connected_parts) < 6 ) - log_game("PACCEL([x],[y],[z]) Failed due to missing parts.") - investigate_log("lost a connected part; It powered down.","singulo") - toggle_power() - return - //emit some particles - for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) - if(PE) - PE.emit_particle(src.strength) - - -/obj/machinery/particle_accelerator/control_box/proc/part_scan() - for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src)) - src.set_dir(F.dir) - break - - connected_parts = list() - assembled = 0 - var/ldir = turn(dir,90) - var/rdir = turn(dir,-90) - var/odir = turn(dir,180) - var/turf/T = src.loc - - T = get_step(T,ldir) - if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber)) - return 0 - - T = get_step(T,odir) - if(!check_part(T,/obj/structure/particle_accelerator/end_cap)) - return 0 - - T = get_step(T,dir) - T = get_step(T,dir) - if(!check_part(T,/obj/structure/particle_accelerator/power_box)) - return 0 - - T = get_step(T,dir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center)) - return 0 - - T = get_step(T,ldir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left)) - return 0 - - T = get_step(T,rdir) - T = get_step(T,rdir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right)) - return 0 - - assembled = 1 - return 1 - - - -/obj/machinery/particle_accelerator/control_box/proc/check_part(var/turf/T, var/type) - if(!(T)||!(type)) - return 0 - - var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T - if(istype(PA, type) && PA.connect_master(src) && PA.report_ready(src)) - src.connected_parts.Add(PA) - return 1 - return 0 - - -/obj/machinery/particle_accelerator/control_box/proc/toggle_power() - active = !active - investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo") - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name(usr, usr.client) : "outside forces"][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) - log_game("PACCEL([x],[y],[z]) [usr ? key_name(usr, usr.client) : "outside forces"] turned [active?"ON":"OFF"].") - if(active) - update_use_power(USE_POWER_ACTIVE) - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = src.strength - part.powered = 1 - part.update_icon() - else - update_use_power(USE_POWER_IDLE) - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = null - part.powered = 0 - part.update_icon() - return 1 - -/obj/machinery/particle_accelerator/control_box/proc/is_interactive(mob/user) - if(!interface_control) - to_chat(user, "ERROR: Request timed out. Check wire contacts.") - return FALSE - if(construction_state != 3) - return FALSE - return TRUE - -/obj/machinery/particle_accelerator/control_box/tgui_status(mob/user) - if(is_interactive(user)) - return ..() - return STATUS_CLOSE - -/obj/machinery/particle_accelerator/control_box/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ParticleAccelerator", name) - ui.open() - -/obj/machinery/particle_accelerator/control_box/tgui_data(mob/user) - var/list/data = list() - data["assembled"] = assembled - data["power"] = active - data["strength"] = strength - return data - -/obj/machinery/particle_accelerator/control_box/tgui_act(action, params) - if(..()) - return - - switch(action) - if("power") - if(wires.is_cut(WIRE_POWER)) - return - toggle_power() - . = TRUE - if("scan") - part_scan() - . = TRUE - if("add_strength") - if(wires.is_cut(WIRE_PARTICLE_STRENGTH)) - return - add_strength() - . = TRUE - if("remove_strength") - if(wires.is_cut(WIRE_PARTICLE_STRENGTH)) - return - remove_strength() - . = TRUE - - update_icon() +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/obj/machinery/particle_accelerator/control_box + name = "Particle Accelerator Control Computer" + desc = "This controls the density of the particles." + icon = 'icons/obj/machines/particle_accelerator_vr.dmi' //VOREStation Edit + icon_state = "control_box" + reference = "control_box" + anchored = FALSE + density = TRUE + use_power = USE_POWER_OFF + idle_power_usage = 500 + active_power_usage = 70000 //70 kW per unit of strength + construction_state = 0 + active = 0 + dir = 1 + var/strength_upper_limit = 2 + var/interface_control = 1 + var/list/obj/structure/particle_accelerator/connected_parts + var/assembled = 0 + var/parts = null + var/datum/wires/particle_acc/control_box/wires = null + +/obj/machinery/particle_accelerator/control_box/New() + wires = new(src) + connected_parts = list() + update_active_power_usage(initial(active_power_usage) * (strength + 1)) + ..() + +/obj/machinery/particle_accelerator/control_box/Destroy() + if(active) + toggle_power() + qdel(wires) + wires = null + return ..() + +/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob) + if(construction_state >= 3) + tgui_interact(user) + else if(construction_state == 2) // Wires exposed + wires.Interact(user) + +/obj/machinery/particle_accelerator/control_box/update_state() + if(construction_state < 3) + update_use_power(USE_POWER_OFF) + assembled = 0 + active = 0 + for(var/obj/structure/particle_accelerator/part in connected_parts) + part.strength = null + part.powered = 0 + part.update_icon() + connected_parts = list() + return + if(!part_scan()) + update_use_power(USE_POWER_IDLE) + active = 0 + connected_parts = list() + + +/obj/machinery/particle_accelerator/control_box/update_icon() + if(active) + icon_state = "[reference]p[strength]" + else + if(use_power) + if(assembled) + icon_state = "[reference]p" + else + icon_state = "u[reference]p" + else + switch(construction_state) + if(0) + icon_state = "[reference]" + if(1) + icon_state = "[reference]" + if(2) + icon_state = "[reference]w" + else + icon_state = "[reference]c" + +/obj/machinery/particle_accelerator/control_box/proc/strength_change() + for(var/obj/structure/particle_accelerator/part in connected_parts) + part.strength = strength + part.update_icon() + +/obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s) + if(assembled) + strength++ + if(strength > strength_upper_limit) + strength = strength_upper_limit + else + message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("PACCEL([x],[y],[z]) [key_name(usr)] increased to [strength]") + investigate_log("increased to [strength] by [usr.key]","singulo") + strength_change() + +/obj/machinery/particle_accelerator/control_box/proc/remove_strength(var/s) + if(assembled) + strength-- + if(strength < 0) + strength = 0 + else + message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("PACCEL([x],[y],[z]) [key_name(usr)] decreased to [strength]") + investigate_log("decreased to [strength] by [usr.key]","singulo") + strength_change() + +/obj/machinery/particle_accelerator/control_box/power_change() + ..() + if(stat & NOPOWER) + active = 0 + update_use_power(USE_POWER_OFF) + else if(!stat && construction_state == 3) + update_use_power(USE_POWER_IDLE) + + +/obj/machinery/particle_accelerator/control_box/process() + if(src.active) + //a part is missing! + if( length(connected_parts) < 6 ) + log_game("PACCEL([x],[y],[z]) Failed due to missing parts.") + investigate_log("lost a connected part; It powered down.","singulo") + toggle_power() + return + //emit some particles + for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) + if(PE) + PE.emit_particle(src.strength) + + +/obj/machinery/particle_accelerator/control_box/proc/part_scan() + for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src)) + src.set_dir(F.dir) + break + + connected_parts = list() + assembled = 0 + var/ldir = turn(dir,90) + var/rdir = turn(dir,-90) + var/odir = turn(dir,180) + var/turf/T = src.loc + + T = get_step(T,ldir) + if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber)) + return 0 + + T = get_step(T,odir) + if(!check_part(T,/obj/structure/particle_accelerator/end_cap)) + return 0 + + T = get_step(T,dir) + T = get_step(T,dir) + if(!check_part(T,/obj/structure/particle_accelerator/power_box)) + return 0 + + T = get_step(T,dir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center)) + return 0 + + T = get_step(T,ldir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left)) + return 0 + + T = get_step(T,rdir) + T = get_step(T,rdir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right)) + return 0 + + assembled = 1 + return 1 + + + +/obj/machinery/particle_accelerator/control_box/proc/check_part(var/turf/T, var/type) + if(!(T)||!(type)) + return 0 + + var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T + if(istype(PA, type) && PA.connect_master(src) && PA.report_ready(src)) + src.connected_parts.Add(PA) + return 1 + return 0 + + +/obj/machinery/particle_accelerator/control_box/proc/toggle_power() + active = !active + investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo") + message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name(usr, usr.client) : "outside forces"][ADMIN_QUE(usr)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("PACCEL([x],[y],[z]) [usr ? key_name(usr, usr.client) : "outside forces"] turned [active?"ON":"OFF"].") + if(active) + update_use_power(USE_POWER_ACTIVE) + for(var/obj/structure/particle_accelerator/part in connected_parts) + part.strength = src.strength + part.powered = 1 + part.update_icon() + else + update_use_power(USE_POWER_IDLE) + for(var/obj/structure/particle_accelerator/part in connected_parts) + part.strength = null + part.powered = 0 + part.update_icon() + return 1 + +/obj/machinery/particle_accelerator/control_box/proc/is_interactive(mob/user) + if(!interface_control) + to_chat(user, "ERROR: Request timed out. Check wire contacts.") + return FALSE + if(construction_state != 3) + return FALSE + return TRUE + +/obj/machinery/particle_accelerator/control_box/tgui_status(mob/user) + if(is_interactive(user)) + return ..() + return STATUS_CLOSE + +/obj/machinery/particle_accelerator/control_box/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ParticleAccelerator", name) + ui.open() + +/obj/machinery/particle_accelerator/control_box/tgui_data(mob/user) + var/list/data = list() + data["assembled"] = assembled + data["power"] = active + data["strength"] = strength + return data + +/obj/machinery/particle_accelerator/control_box/tgui_act(action, params) + if(..()) + return + + switch(action) + if("power") + if(wires.is_cut(WIRE_POWER)) + return + toggle_power() + . = TRUE + if("scan") + part_scan() + . = TRUE + if("add_strength") + if(wires.is_cut(WIRE_PARTICLE_STRENGTH)) + return + add_strength() + . = TRUE + if("remove_strength") + if(wires.is_cut(WIRE_PARTICLE_STRENGTH)) + return + remove_strength() + . = TRUE + + update_icon() diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index 292900b419..b3a7c52917 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -1,47 +1,47 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/structure/particle_accelerator/particle_emitter - name = "EM Containment Grid" - desc_holder = "This launchs the Alpha particles, might not want to stand near this end." - icon = 'icons/obj/machines/particle_accelerator2.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/right // It's looking for these in opposite directions. - icon_state = "emitter_left" - reference = "emitter_left" - -/obj/structure/particle_accelerator/particle_emitter/left - icon_state = "emitter_right" - reference = "emitter_right" - - -/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay) - if(delay && delay >= 0) - fire_delay = delay - return 1 - return 0 - -/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0) - if((last_shot + fire_delay) <= world.time) - last_shot = world.time - var/obj/effect/accelerated_particle/A = null - var/turf/T = src.loc // if it doesn't spawn here, it won't bump stuff directly infront of the PA - switch(strength) - if(0) - A = new/obj/effect/accelerated_particle/weak(T, dir) - if(1) - A = new/obj/effect/accelerated_particle(T, dir) - if(2) - A = new/obj/effect/accelerated_particle/strong(T, dir) - if(3) - A = new/obj/effect/accelerated_particle/powerful(T, dir) - if(A) - A.set_dir(src.dir) - return 1 - return 0 +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/obj/structure/particle_accelerator/particle_emitter + name = "EM Containment Grid" + desc_holder = "This launchs the Alpha particles, might not want to stand near this end." + icon = 'icons/obj/machines/particle_accelerator2.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/right // It's looking for these in opposite directions. + icon_state = "emitter_left" + reference = "emitter_left" + +/obj/structure/particle_accelerator/particle_emitter/left + icon_state = "emitter_right" + reference = "emitter_right" + + +/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay) + if(delay && delay >= 0) + fire_delay = delay + return 1 + return 0 + +/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0) + if((last_shot + fire_delay) <= world.time) + last_shot = world.time + var/obj/effect/accelerated_particle/A = null + var/turf/T = src.loc // if it doesn't spawn here, it won't bump stuff directly infront of the PA + switch(strength) + if(0) + A = new/obj/effect/accelerated_particle/weak(T, dir) + if(1) + A = new/obj/effect/accelerated_particle(T, dir) + if(2) + A = new/obj/effect/accelerated_particle/strong(T, dir) + if(3) + A = new/obj/effect/accelerated_particle/powerful(T, dir) + if(A) + A.set_dir(src.dir) + return 1 + return 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_power.dm b/code/modules/power/singularity/particle_accelerator/particle_power.dm index 8badfab91e..d785943829 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_power.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_power.dm @@ -1,6 +1,6 @@ -/obj/structure/particle_accelerator/power_box - name = "Particle Focusing EM Lens" - desc_holder = "This uses electromagnetic waves to focus the Alpha-Particles." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "power_box" +/obj/structure/particle_accelerator/power_box + name = "Particle Focusing EM Lens" + desc_holder = "This uses electromagnetic waves to focus the Alpha-Particles." + icon = 'icons/obj/machines/particle_accelerator2.dmi' + icon_state = "power_box" reference = "power_box" \ No newline at end of file diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 6859b0c3c5..29e2652ef5 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -1,490 +1,490 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) - -/obj/singularity/ - name = "gravitational singularity" - desc = "A gravitational singularity." - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - anchored = TRUE - density = TRUE - plane = ABOVE_PLANE - light_range = 6 - unacidable = TRUE //Don't comment this out. - - 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 = 15 //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/chained = 0//Adminbus chain-grab - -/obj/singularity/New(loc, var/starting_energy = 50) - //CARN: admin-alert for chuckle-fuckery. - admin_investigate_setup() - energy = starting_energy - - ..() - START_PROCESSING(SSobj, src) - for(var/obj/machinery/power/singularity_beacon/singubeacon in machines) - if(singubeacon.active) - target = singubeacon - break - -/obj/singularity/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/singularity/attack_hand(mob/user as mob) - consume(user) - return 1 - -/obj/singularity/ex_act(severity) - if(current_size == STAGE_SUPER)//IT'S UNSTOPPABLE - return - switch(severity) - if(1.0) - if(prob(25)) - investigate_log("has been destroyed by an explosion.", I_SINGULO) - qdel(src) - return - else - energy += 50 - if(2.0 to 3.0) - energy += round((rand(20,60)/2),1) - return - -/obj/singularity/bullet_act(obj/item/projectile/P) - return 0 //Will there be an impact? Who knows. Will we see it? No. - -/obj/singularity/Bump(atom/A) - consume(A) - -/obj/singularity/Bumped(atom/A) - consume(A) - -/obj/singularity/process() - eat() - dissipate() - check_energy() - - if (current_size >= STAGE_TWO) - move() - pulse() - - if (prob(event_chance)) //Chance for it to run a special event TODO: Come up with one or two more that fit. - event() - -/obj/singularity/attack_ai() //To prevent ais from gibbing themselves when they click on one. - return - -/obj/singularity/proc/admin_investigate_setup() - last_warning = world.time - var/count = locate(/obj/machinery/containment_field) in orange(30, src) - - if (!count) - message_admins("A singulo has been created without containment fields active ([x], [y], [z] - JMP).") - - investigate_log("was created. [count ? "" : "No containment fields were active."]", I_SINGULO) - -/obj/singularity/proc/dissipate() - if (!dissipate) - return - - if(dissipate_track >= dissipate_delay) - energy -= dissipate_strength - dissipate_track = 0 - else - dissipate_track++ - -/obj/singularity/proc/expand(var/force_size = 0, var/growing = 1) - if(current_size == STAGE_SUPER)//if this is happening, this is an error - message_admins("expand() was called on a super singulo. This should not happen. Contact a coder immediately!") - return - var/temp_allowed_size = allowed_size - - if (force_size) - temp_allowed_size = force_size - - switch (temp_allowed_size) - if (STAGE_ONE) - name = "gravitational singularity" - desc = "A gravitational singularity." - 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 - overlays = 0 - if(chained) - overlays = "chain_s1" - visible_message("The singularity has shrunk to a rather pitiful size.") - if (STAGE_TWO) //1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them. - name = "gravitational singularity" - desc = "A gravitational singularity." - 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 = 10 - dissipate_track = 0 - dissipate_strength = 5 - overlays = 0 - if(chained) - overlays = "chain_s3" - if(growing) - visible_message("The singularity noticeably grows in size.") - else - visible_message("The singularity has shrunk to a less powerful size.") - if (STAGE_THREE) - if ((check_turfs_in(1, 2)) && (check_turfs_in(2, 2)) && (check_turfs_in(4, 2)) && (check_turfs_in(8, 2))) - name = "gravitational singularity" - desc = "A gravitational singularity." - 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 - overlays = 0 - if(chained) - overlays = "chain_s5" - if(growing) - visible_message("The singularity expands to a reasonable size.") - else - visible_message("The singularity has returned to a safe size.") - if(STAGE_FOUR) - if ((check_turfs_in(1, 3)) && (check_turfs_in(2, 3)) && (check_turfs_in(4, 3)) && (check_turfs_in(8, 3))) - name = "gravitational singularity" - desc = "A gravitational singularity." - 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 = 8 - overlays = 0 - if(chained) - overlays = "chain_s7" - if(growing) - visible_message("The singularity expands to a dangerous size.") - else - visible_message("Miraculously, the singularity reduces in size, and can be contained.") - if(STAGE_FIVE) //This one also lacks a check for gens because it eats everything. - name = "gravitational singularity" - desc = "A gravitational singularity." - 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. - overlays = 0 - if(chained) - overlays = "chain_s9" - if(growing) - visible_message("The singularity has grown out of control!") - else - visible_message("The singularity miraculously reduces in size and loses its supermatter properties.") - if(STAGE_SUPER)//SUPERSINGULO - name = "super gravitational singularity" - desc = "A gravitational singularity with the properties of supermatter. It has the power to destroy worlds." - current_size = STAGE_SUPER - icon = 'icons/effects/352x352.dmi' - icon_state = "singularity_s11"//uh, whoever drew that, you know that black holes are supposed to look dark right? What's this, the clown's singulo? - pixel_x = -160 - pixel_y = -160 - grav_pull = 16 - consume_range = 5 - dissipate = 0 //It cant go smaller due to e loss - event_chance = 25 //Events will fire off more often. - if(chained) - overlays = "chain_s9" - visible_message("You witness the creation of a destructive force that cannot possibly be stopped by human hands.") - - if (current_size == allowed_size) - investigate_log("grew to size [current_size].", I_SINGULO) - return 1 - else if (current_size < (--temp_allowed_size) && current_size != STAGE_SUPER) - expand(temp_allowed_size) - else - return 0 - -/obj/singularity/proc/check_energy() - if (energy <= 0) - investigate_log("collapsed.", I_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 49999) - allowed_size = STAGE_FIVE - if(50000 to INFINITY) - allowed_size = STAGE_SUPER - - if (current_size != allowed_size && current_size != STAGE_SUPER) - expand(null, current_size > allowed_size) - return 1 - -/obj/singularity/proc/eat() - for(var/atom/X as anything in orange(grav_pull, src)) - if(!X.simulated) - continue - var/dist = get_dist(X, src) - if(dist > consume_range) - X.singularity_pull(src, current_size) - else - consume(X) - return - -/obj/singularity/proc/consume(const/atom/A) - src.energy += A.singularity_act(src, current_size) - return - -/obj/singularity/proc/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(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 - - if(current_size >= STAGE_FIVE)//The superlarge one does not care about things in its way - spawn(0) - step(src, movement_dir) - spawn(1) - step(src, movement_dir) - return 1 - else if(check_turfs_in(movement_dir)) - last_failed_movement = 0//Reset this because we moved - spawn(0) - step(src, movement_dir) - return 1 - else - last_failed_movement = movement_dir - return 0 - -/obj/singularity/proc/check_turfs_in(var/direction = 0, var/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 - if(STAGE_SUPER) - steps = 6 - 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) - T2 = get_step(T2,dir2) - if(!isturf(T2)) - return 0 - turfs.Add(T2) - for(var/k = 1 to steps) - 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(const/turf/T) - if (!isturf(T)) - return 0 - - // VOREStation Edit Start - var/area/A = get_area(T) - if(A.forbid_singulo) //No going to dorms - return 0 - // VOREStation Edit End - - if ((locate(/obj/machinery/containment_field) 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/shieldwallgen) in T) - var/obj/machinery/shieldwallgen/S = locate(/obj/machinery/shieldwallgen) in T - - if (S && S.active) - return 0 - return 1 - -/obj/singularity/proc/event() - var/numb = pick(1, 2, 3, 4, 5, 6) - - switch (numb) - if (1) //EMP. - emp_area() - if (2, 3) //Tox damage all carbon mobs in area. - toxmob() - if (4) //Stun mobs who lack optic scanners. - mezzer() - else - return 0 - if(current_size == STAGE_SUPER) - smwave() - return 1 - - -/obj/singularity/proc/toxmob() - var/toxrange = 10 - var/toxdamage = 4 - var/radiation = 15 - if (src.energy>200) - toxdamage = round(((src.energy-150)/50)*4,1) - radiation = round(((src.energy-150)/50)*5,1) - SSradiation.radiate(src, radiation) //Always radiate at max, so a decent dose of radiation is applied - for(var/mob/living/M in view(toxrange, src.loc)) - if(M.status_flags & GODMODE) - continue - toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad"))) - M.apply_effect(toxdamage, TOX) - return - - -/obj/singularity/proc/mezzer() - for(var/mob/living/carbon/M in oviewers(8, src)) - if(istype(M, /mob/living/carbon/brain)) //Ignore brains - continue - if(M.status_flags & GODMODE) - continue - if(M.stat == CONSCIOUS) - if (istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(istype(H.glasses,/obj/item/clothing/glasses/meson) && current_size != STAGE_SUPER) - to_chat(H, "You look directly into The [src.name], good thing you had your protective eyewear on!") - return - else - to_chat(H, "You look directly into The [src.name], but your eyewear does absolutely nothing to protect you from it!") - to_chat(M, "You look directly into The [src.name] and feel [current_size == STAGE_SUPER ? "helpless" : "weak"].") - M.apply_effect(3, STUN) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] stares blankly at The []!", M, src), 1) - -/obj/singularity/proc/emp_area() - if(current_size != STAGE_SUPER) - empulse(src, 4, 6, 8, 10) - else - empulse(src, 12, 14, 16, 18) - -/obj/singularity/proc/smwave() - for(var/mob/living/M in view(10, src.loc)) - if(prob(67)) - to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "Miraculously, it fails to kill you.") - else - to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "You don't even have a moment to react as you are reduced to ashes by the intense radiation.") - M.dust() - SSradiation.radiate(src, rand(energy)) - return - -/obj/singularity/proc/pulse() - for(var/obj/machinery/power/rad_collector/R in rad_collectors) - if (get_dist(R, src) <= 15) //Better than using orange() every process. - R.receive_pulse(energy) - -/obj/singularity/proc/on_capture() - chained = 1 - overlays = 0 - move_self = 0 - switch (current_size) - if(STAGE_ONE) - add_overlay(image('icons/obj/singularity.dmi',"chain_s1")) - if(STAGE_TWO) - add_overlay(image('icons/effects/96x96.dmi',"chain_s3")) - if(STAGE_THREE) - add_overlay(image('icons/effects/160x160.dmi',"chain_s5")) - if(STAGE_FOUR) - add_overlay(image('icons/effects/224x224.dmi',"chain_s7")) - if(STAGE_FIVE) - add_overlay(image('icons/effects/288x288.dmi',"chain_s9")) - -/obj/singularity/proc/on_release() - chained = 0 - overlays = 0 - move_self = 1 - -/obj/singularity/singularity_act(S, size) - if(current_size <= size) - var/gain = (energy/2) - var/dist = max((current_size - 2), 1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - spawn(0) - qdel(src) - return gain +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) + +/obj/singularity/ + name = "gravitational singularity" + desc = "A gravitational singularity." + icon = 'icons/obj/singularity.dmi' + icon_state = "singularity_s1" + anchored = TRUE + density = TRUE + plane = ABOVE_PLANE + light_range = 6 + unacidable = TRUE //Don't comment this out. + + 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 = 15 //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/chained = 0//Adminbus chain-grab + +/obj/singularity/New(loc, var/starting_energy = 50) + //CARN: admin-alert for chuckle-fuckery. + admin_investigate_setup() + energy = starting_energy + + ..() + START_PROCESSING(SSobj, src) + for(var/obj/machinery/power/singularity_beacon/singubeacon in machines) + if(singubeacon.active) + target = singubeacon + break + +/obj/singularity/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/singularity/attack_hand(mob/user as mob) + consume(user) + return 1 + +/obj/singularity/ex_act(severity) + if(current_size == STAGE_SUPER)//IT'S UNSTOPPABLE + return + switch(severity) + if(1.0) + if(prob(25)) + investigate_log("has been destroyed by an explosion.", I_SINGULO) + qdel(src) + return + else + energy += 50 + if(2.0 to 3.0) + energy += round((rand(20,60)/2),1) + return + +/obj/singularity/bullet_act(obj/item/projectile/P) + return 0 //Will there be an impact? Who knows. Will we see it? No. + +/obj/singularity/Bump(atom/A) + consume(A) + +/obj/singularity/Bumped(atom/A) + consume(A) + +/obj/singularity/process() + eat() + dissipate() + check_energy() + + if (current_size >= STAGE_TWO) + move() + pulse() + + if (prob(event_chance)) //Chance for it to run a special event TODO: Come up with one or two more that fit. + event() + +/obj/singularity/attack_ai() //To prevent ais from gibbing themselves when they click on one. + return + +/obj/singularity/proc/admin_investigate_setup() + last_warning = world.time + var/count = locate(/obj/machinery/containment_field) in orange(30, src) + + if (!count) + message_admins("A singulo has been created without containment fields active ([x], [y], [z] - JMP).") + + investigate_log("was created. [count ? "" : "No containment fields were active."]", I_SINGULO) + +/obj/singularity/proc/dissipate() + if (!dissipate) + return + + if(dissipate_track >= dissipate_delay) + energy -= dissipate_strength + dissipate_track = 0 + else + dissipate_track++ + +/obj/singularity/proc/expand(var/force_size = 0, var/growing = 1) + if(current_size == STAGE_SUPER)//if this is happening, this is an error + message_admins("expand() was called on a super singulo. This should not happen. Contact a coder immediately!") + return + var/temp_allowed_size = allowed_size + + if (force_size) + temp_allowed_size = force_size + + switch (temp_allowed_size) + if (STAGE_ONE) + name = "gravitational singularity" + desc = "A gravitational singularity." + 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 + overlays = 0 + if(chained) + overlays = "chain_s1" + visible_message("The singularity has shrunk to a rather pitiful size.") + if (STAGE_TWO) //1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them. + name = "gravitational singularity" + desc = "A gravitational singularity." + 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 = 10 + dissipate_track = 0 + dissipate_strength = 5 + overlays = 0 + if(chained) + overlays = "chain_s3" + if(growing) + visible_message("The singularity noticeably grows in size.") + else + visible_message("The singularity has shrunk to a less powerful size.") + if (STAGE_THREE) + if ((check_turfs_in(1, 2)) && (check_turfs_in(2, 2)) && (check_turfs_in(4, 2)) && (check_turfs_in(8, 2))) + name = "gravitational singularity" + desc = "A gravitational singularity." + 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 + overlays = 0 + if(chained) + overlays = "chain_s5" + if(growing) + visible_message("The singularity expands to a reasonable size.") + else + visible_message("The singularity has returned to a safe size.") + if(STAGE_FOUR) + if ((check_turfs_in(1, 3)) && (check_turfs_in(2, 3)) && (check_turfs_in(4, 3)) && (check_turfs_in(8, 3))) + name = "gravitational singularity" + desc = "A gravitational singularity." + 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 = 8 + overlays = 0 + if(chained) + overlays = "chain_s7" + if(growing) + visible_message("The singularity expands to a dangerous size.") + else + visible_message("Miraculously, the singularity reduces in size, and can be contained.") + if(STAGE_FIVE) //This one also lacks a check for gens because it eats everything. + name = "gravitational singularity" + desc = "A gravitational singularity." + 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. + overlays = 0 + if(chained) + overlays = "chain_s9" + if(growing) + visible_message("The singularity has grown out of control!") + else + visible_message("The singularity miraculously reduces in size and loses its supermatter properties.") + if(STAGE_SUPER)//SUPERSINGULO + name = "super gravitational singularity" + desc = "A gravitational singularity with the properties of supermatter. It has the power to destroy worlds." + current_size = STAGE_SUPER + icon = 'icons/effects/352x352.dmi' + icon_state = "singularity_s11"//uh, whoever drew that, you know that black holes are supposed to look dark right? What's this, the clown's singulo? + pixel_x = -160 + pixel_y = -160 + grav_pull = 16 + consume_range = 5 + dissipate = 0 //It cant go smaller due to e loss + event_chance = 25 //Events will fire off more often. + if(chained) + overlays = "chain_s9" + visible_message("You witness the creation of a destructive force that cannot possibly be stopped by human hands.") + + if (current_size == allowed_size) + investigate_log("grew to size [current_size].", I_SINGULO) + return 1 + else if (current_size < (--temp_allowed_size) && current_size != STAGE_SUPER) + expand(temp_allowed_size) + else + return 0 + +/obj/singularity/proc/check_energy() + if (energy <= 0) + investigate_log("collapsed.", I_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 49999) + allowed_size = STAGE_FIVE + if(50000 to INFINITY) + allowed_size = STAGE_SUPER + + if (current_size != allowed_size && current_size != STAGE_SUPER) + expand(null, current_size > allowed_size) + return 1 + +/obj/singularity/proc/eat() + for(var/atom/X as anything in orange(grav_pull, src)) + if(!X.simulated) + continue + var/dist = get_dist(X, src) + if(dist > consume_range) + X.singularity_pull(src, current_size) + else + consume(X) + return + +/obj/singularity/proc/consume(const/atom/A) + src.energy += A.singularity_act(src, current_size) + return + +/obj/singularity/proc/move(var/force_move = 0) + if(!move_self) + return 0 + + var/movement_dir = pick(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 + + if(current_size >= STAGE_FIVE)//The superlarge one does not care about things in its way + spawn(0) + step(src, movement_dir) + spawn(1) + step(src, movement_dir) + return 1 + else if(check_turfs_in(movement_dir)) + last_failed_movement = 0//Reset this because we moved + spawn(0) + step(src, movement_dir) + return 1 + else + last_failed_movement = movement_dir + return 0 + +/obj/singularity/proc/check_turfs_in(var/direction = 0, var/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 + if(STAGE_SUPER) + steps = 6 + 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) + T2 = get_step(T2,dir2) + if(!isturf(T2)) + return 0 + turfs.Add(T2) + for(var/k = 1 to steps) + 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(const/turf/T) + if (!isturf(T)) + return 0 + + // VOREStation Edit Start + var/area/A = get_area(T) + if(A.forbid_singulo) //No going to dorms + return 0 + // VOREStation Edit End + + if ((locate(/obj/machinery/containment_field) 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/shieldwallgen) in T) + var/obj/machinery/shieldwallgen/S = locate(/obj/machinery/shieldwallgen) in T + + if (S && S.active) + return 0 + return 1 + +/obj/singularity/proc/event() + var/numb = pick(1, 2, 3, 4, 5, 6) + + switch (numb) + if (1) //EMP. + emp_area() + if (2, 3) //Tox damage all carbon mobs in area. + toxmob() + if (4) //Stun mobs who lack optic scanners. + mezzer() + else + return 0 + if(current_size == STAGE_SUPER) + smwave() + return 1 + + +/obj/singularity/proc/toxmob() + var/toxrange = 10 + var/toxdamage = 4 + var/radiation = 15 + if (src.energy>200) + toxdamage = round(((src.energy-150)/50)*4,1) + radiation = round(((src.energy-150)/50)*5,1) + SSradiation.radiate(src, radiation) //Always radiate at max, so a decent dose of radiation is applied + for(var/mob/living/M in view(toxrange, src.loc)) + if(M.status_flags & GODMODE) + continue + toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad"))) + M.apply_effect(toxdamage, TOX) + return + + +/obj/singularity/proc/mezzer() + for(var/mob/living/carbon/M in oviewers(8, src)) + if(istype(M, /mob/living/carbon/brain)) //Ignore brains + continue + if(M.status_flags & GODMODE) + continue + if(M.stat == CONSCIOUS) + if (istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(istype(H.glasses,/obj/item/clothing/glasses/meson) && current_size != STAGE_SUPER) + to_chat(H, "You look directly into The [src.name], good thing you had your protective eyewear on!") + return + else + to_chat(H, "You look directly into The [src.name], but your eyewear does absolutely nothing to protect you from it!") + to_chat(M, "You look directly into The [src.name] and feel [current_size == STAGE_SUPER ? "helpless" : "weak"].") + M.apply_effect(3, STUN) + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] stares blankly at The []!", M, src), 1) + +/obj/singularity/proc/emp_area() + if(current_size != STAGE_SUPER) + empulse(src, 4, 6, 8, 10) + else + empulse(src, 12, 14, 16, 18) + +/obj/singularity/proc/smwave() + for(var/mob/living/M in view(10, src.loc)) + if(prob(67)) + to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") + to_chat(M, "Miraculously, it fails to kill you.") + else + to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") + to_chat(M, "You don't even have a moment to react as you are reduced to ashes by the intense radiation.") + M.dust() + SSradiation.radiate(src, rand(energy)) + return + +/obj/singularity/proc/pulse() + for(var/obj/machinery/power/rad_collector/R in rad_collectors) + if (get_dist(R, src) <= 15) //Better than using orange() every process. + R.receive_pulse(energy) + +/obj/singularity/proc/on_capture() + chained = 1 + overlays = 0 + move_self = 0 + switch (current_size) + if(STAGE_ONE) + add_overlay(image('icons/obj/singularity.dmi',"chain_s1")) + if(STAGE_TWO) + add_overlay(image('icons/effects/96x96.dmi',"chain_s3")) + if(STAGE_THREE) + add_overlay(image('icons/effects/160x160.dmi',"chain_s5")) + if(STAGE_FOUR) + add_overlay(image('icons/effects/224x224.dmi',"chain_s7")) + if(STAGE_FIVE) + add_overlay(image('icons/effects/288x288.dmi',"chain_s9")) + +/obj/singularity/proc/on_release() + chained = 0 + overlays = 0 + move_self = 1 + +/obj/singularity/singularity_act(S, size) + if(current_size <= size) + var/gain = (energy/2) + var/dist = max((current_size - 2), 1) + explosion(src.loc,(dist),(dist*2),(dist*4)) + spawn(0) + qdel(src) + return gain diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 896e176bca..4325f0f345 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -1,537 +1,537 @@ -// the SMES -// stores power - -GLOBAL_LIST_EMPTY(smeses) - -#define SMESMAXCHARGELEVEL 250000 -#define SMESMAXOUTPUT 250000 - -/obj/machinery/power/smes - name = "power storage unit" - desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." - icon_state = "smes" - density = TRUE - anchored = TRUE - unacidable = TRUE - use_power = USE_POWER_OFF - circuit = /obj/item/weapon/circuitboard/smes - clicksound = "switch" - - var/capacity = 5e6 // maximum charge - var/charge = 1e6 // actual charge - - var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge - var/inputting = 0 // 1 = actually inputting, 0 = 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 = 1 // 1 = attempting to output, 0 = not attempting to output - var/outputting = 0 // 1 = actually outputting, 0 = 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 - - //Holders for powerout event. - var/last_output_attempt = 0 - var/last_input_attempt = 0 - var/last_charge = 0 - - //For icon overlay updates - var/last_disp - var/last_chrg - var/last_onln - - var/damage = 0 - var/maxdamage = 500 // Relatively resilient, given how expensive it is, but once destroyed produces small explosion. - - var/input_cut = 0 - var/input_pulsed = 0 - var/output_cut = 0 - var/output_pulsed = 0 - var/target_load = 0 - - var/name_tag = null - var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! - var/list/terminals = list() - var/should_be_mapped = 0 // If this is set to 0 it will send out warning on New() - var/grid_check = FALSE // If true, suspends all I/O. - - // CHOMPAdd: More humming noises - var/datum/looping_sound/generator/soundloop - var/noisy = FALSE - // CHOMPAdd End - -/obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - var/smes_amt = min((amount * SMESRATE), charge) - charge -= smes_amt - return smes_amt / SMESRATE - -/obj/machinery/power/smes/Initialize() - . = ..() - GLOB.smeses += src - add_nearby_terminals() - soundloop = new(list(src), FALSE) // CHOMPEdit: hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm - soundloop.extra_range = -6 // CHOMPEdit: Doing this here bc we're reusing the generator hum, and can't directly edit that one - soundloop.falloff = 0.2 // CHOMPEdit: Harsher falloff. - if(!check_terminals()) - stat |= BROKEN - return - update_icon() - if(!powernet) - connect_to_network() - if(!should_be_mapped) - warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z") - -/obj/machinery/power/smes/Destroy() - for(var/obj/machinery/power/terminal/T in terminals) - T.master = null - terminals = null - GLOB.smeses -= src - QDEL_NULL(soundloop) - return ..() - -/obj/machinery/power/smes/proc/add_nearby_terminals() - for(var/d in GLOB.cardinal) - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(d, 180) && !term.master) - terminals |= term - term.master = src - term.connect_to_network() - -/obj/machinery/power/smes/proc/check_terminals() - if(!terminals.len) - return FALSE - return TRUE - -/obj/machinery/power/smes/add_avail(var/amount) - if(..(amount)) - powernet.smes_newavail += amount - return 1 - return 0 - -/obj/machinery/power/smes/disconnect_terminal(var/obj/machinery/power/terminal/term) - terminals -= term - term.master = null - -/obj/machinery/power/smes/update_icon() - cut_overlays() - if(stat & BROKEN) return - - add_overlay("smes-op[outputting]") - - if(inputting == 2) - add_overlay("smes-oc2") - else if (inputting == 1) - add_overlay("smes-oc1") - else - if(input_attempt) - add_overlay("smes-oc0") - - var/clevel = chargedisplay() - if(clevel>0) - add_overlay("smes-og[clevel]") - return - - -/obj/machinery/power/smes/proc/chargedisplay() - return round(5.5*charge/(capacity ? capacity : 5e6)) - -/obj/machinery/power/smes/proc/input_power(var/percentage, var/obj/machinery/power/terminal/term) - var/to_input = target_load * (percentage/100) - to_input = between(0, to_input, target_load) - if(percentage == 100) - inputting = 2 - else if(percentage) - inputting = 1 - // else inputting = 0, as set in process() - - var/inputted = term.powernet.draw_power(min(to_input, input_level - input_available)) - add_charge(inputted) - input_available += inputted - -// Mostly in place due to child types that may store power in other way (PSUs) -/obj/machinery/power/smes/proc/add_charge(var/amount) - charge += amount*SMESRATE - -/obj/machinery/power/smes/proc/remove_charge(var/amount) - charge -= amount*SMESRATE - -/obj/machinery/power/smes/process() - if(stat & BROKEN) - soundloop.stop() - noisy = FALSE - return - - // only update icon if state changed - if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) - update_icon() - //store machine state to see if we need to update the icon overlays - last_disp = chargedisplay() - last_chrg = inputting - last_onln = outputting - input_available = 0 - - //inputting - if(input_attempt && (!input_pulsed && !input_cut) && !grid_check) - target_load = CLAMP((capacity-charge)/SMESRATE, 0, input_level) // Amount we will request from the powernet. - var/input_available = FALSE - for(var/obj/machinery/power/terminal/term in terminals) - if(!term.powernet) - continue - input_available = TRUE - term.powernet.smes_demand += target_load - term.powernet.inputting.Add(term) - if(!input_available) - target_load = 0 // We won't input any power without powernet connection. - inputting = 0 - - output_used = 0 - //outputting - if(output_attempt && (!output_pulsed && !output_cut) && powernet && charge && !grid_check) - output_used = min( charge/SMESRATE, output_level) //limit output to that stored - remove_charge(output_used) // reduce the storage (may be recovered in /restore() if excessive) - add_avail(output_used) // add output to powernet (smes side) - outputting = 2 - else if(!powernet || !charge) - outputting = 1 - else - output_used = 0 - - if(!noisy && outputting) // Are we actually outputting power? - soundloop.start() - noisy = TRUE - if(noisy && outputting) - // Capped to 40 volume since higher volumes get annoying and it sounds worse. - // Formula previously was min(round(power/10)+1, 20) - soundloop.volume = CLAMP((output_used / 1000), 1, 40) - if(!outputting) - soundloop.stop() - noisy = FALSE - -// called after all power processes are finished -// restores charge level to smes if there was excess this ptick -/obj/machinery/power/smes/proc/restore(var/percent_load) - if(stat & BROKEN) - return - - if(!outputting) - output_used = 0 - return - - var/total_restore = output_used * (percent_load / 100) // First calculate amount of power used from our output - total_restore = between(0, total_restore, output_used) // Now clamp the value between 0 and actual output, just for clarity. - total_restore = output_used - total_restore // And, at last, subtract used power from outputted power, to get amount of power we will give back to the SMES. - - // now recharge this amount - var/clev = chargedisplay() - - add_charge(total_restore) // restore unused power - powernet.netexcess -= total_restore // remove the excess from the powernet, so later SMESes don't try to use it - - output_used -= total_restore - - if(clev != chargedisplay() ) //if needed updates the icons overlay - update_icon() - return - -//Will return 1 on failure -/obj/machinery/power/smes/proc/make_terminal(const/mob/user) - if (user.loc == loc) - to_chat(user, "You must not be on the same tile as the [src].") - return 1 - - //Direction the terminal will face to - var/tempDir = get_dir(user, src) - switch(tempDir) - if (NORTHEAST, SOUTHEAST) - tempDir = EAST - if (NORTHWEST, SOUTHWEST) - tempDir = WEST - var/turf/tempLoc = get_step(src, reverse_direction(tempDir)) - if (istype(tempLoc, /turf/space)) - to_chat(user, "You can't build a terminal on space.") - return 1 - else if (istype(tempLoc)) - if(!tempLoc.is_plating()) - to_chat(user, "You must remove the floor plating first.") - return 1 - if(check_terminal_exists(tempLoc, user, tempDir)) - return 1 - to_chat(user, "You start adding cable to the [src].") - if(do_after(user, 50)) - if(check_terminal_exists(tempLoc, user, tempDir)) - return 1 - var/obj/machinery/power/terminal/term = new/obj/machinery/power/terminal(tempLoc) - term.set_dir(tempDir) - term.master = src - term.connect_to_network() - terminals |= term - return 0 - return 1 - -/obj/machinery/power/smes/proc/check_terminal_exists(var/turf/location, var/mob/user, var/direction) - for(var/obj/machinery/power/terminal/term in location) - if(term.dir == direction) - to_chat(user, "There is already a terminal here.") - return 1 - return 0 - -/obj/machinery/power/smes/draw_power(var/amount) - var/drained = 0 - for(var/obj/machinery/power/terminal/term in terminals) - if(!term.powernet) - continue - if((amount - drained) <= 0) - return 0 - drained += term.powernet.draw_power(amount - drained) - return drained - - -/obj/machinery/power/smes/attack_ai(mob/user) - add_hiddenprint(user) - tgui_interact(user) - -/obj/machinery/power/smes/attack_hand(mob/user) - add_fingerprint(user) - tgui_interact(user) - - -/obj/machinery/power/smes/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, W)) - return FALSE - - if (!panel_open) - to_chat(user, "You need to open access hatch on [src] first!") - return FALSE - - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.isOn()) - to_chat(user, "Turn on \the [WT] first!") - return FALSE - if(!damage) - to_chat(user, "\The [src] is already fully repaired.") - return FALSE - if(WT.remove_fuel(0,user) && do_after(user, damage, src)) - to_chat(user, "You repair all structural damage to \the [src]") - damage = 0 - return FALSE - else if(istype(W, /obj/item/stack/cable_coil) && !building_terminal) - building_terminal = 1 - var/obj/item/stack/cable_coil/CC = W - if (CC.get_amount() < 10) - to_chat(user, "You need more cables.") - building_terminal = 0 - return FALSE - if (make_terminal(user)) - building_terminal = 0 - return FALSE - building_terminal = 0 - CC.use(10) - user.visible_message(\ - "[user.name] has added cables to the [src].",\ - "You added cables to the [src].") - stat = 0 - if(!powernet) - connect_to_network() - return FALSE - - else if(W.has_tool_quality(TOOL_WIRECUTTER) && !building_terminal) - building_terminal = TRUE - var/obj/machinery/power/terminal/term - for(var/obj/machinery/power/terminal/T in get_turf(user)) - if(T.master == src) - term = T - break - if(!term) - to_chat(user, "There is no terminal on this tile.") - building_terminal = FALSE - return FALSE - var/turf/tempTDir = get_turf(term) - if (istype(tempTDir)) - if(!tempTDir.is_plating()) - to_chat(user, "You must remove the floor plating first.") - else - to_chat(user, "You begin to cut the cables...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 50 * W.toolspeed)) - if (prob(50) && electrocute_mob(usr, term.powernet, term)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - building_terminal = FALSE - if(usr.stunned) - return FALSE - new /obj/item/stack/cable_coil(loc,10) - user.visible_message(\ - "[user.name] cut the cables and dismantled the power terminal.",\ - "You cut the cables and dismantle the power terminal.") - terminals -= term - qdel(term) - building_terminal = FALSE - return FALSE - return TRUE - -/obj/machinery/power/smes/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Smes", name) - ui.open() - -/obj/machinery/power/smes/tgui_data() - var/list/data = list( - "capacity" = capacity, - "capacityPercent" = round(100*charge/capacity, 0.1), - "charge" = charge, - "inputAttempt" = input_attempt, - "inputting" = inputting, - "inputLevel" = input_level, - "inputLevel_text" = DisplayPower(input_level), - "inputLevelMax" = input_level_max, - "inputAvailable" = input_available, - "outputAttempt" = output_attempt, - "outputting" = outputting, - "outputLevel" = output_level, - "outputLevel_text" = DisplayPower(output_level), - "outputLevelMax" = output_level_max, - "outputUsed" = output_used, - ) - return data - -/obj/machinery/power/smes/proc/Percentage() - if(!capacity) - return 0 - return round(100.0*charge/capacity, 0.1) - -/obj/machinery/power/smes/tgui_act(action, params) - if(..()) - return TRUE - switch(action) - if("tryinput") - inputting(!input_attempt) - update_icon() - . = TRUE - if("tryoutput") - outputting(!output_attempt) - update_icon() - . = TRUE - if("input") - tgui_set_io(SMES_TGUI_INPUT, params["target"], text2num(params["adjust"])) - if("output") - tgui_set_io(SMES_TGUI_OUTPUT, params["target"], text2num(params["adjust"])) - -/obj/machinery/power/smes/proc/tgui_set_io(io, target, adjust) - 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(.) - switch(io) - if(SMES_TGUI_INPUT) - set_input(target) - if(SMES_TGUI_OUTPUT) - set_output(target) - - -/obj/machinery/power/smes/proc/inputting(var/do_input) - input_attempt = do_input - if(!input_attempt) - inputting = 0 - -/obj/machinery/power/smes/proc/outputting(var/do_output) - output_attempt = do_output - if(!output_attempt) - outputting = 0 - -/obj/machinery/power/smes/take_damage(var/amount) - amount = max(0, round(amount)) - damage += amount - if(damage > maxdamage) - visible_message("\The [src] explodes in large shower of sparks and smoke!") - // Depending on stored charge percentage cause damage. - switch(Percentage()) - if(75 to INFINITY) - explosion(get_turf(src), 1, 2, 4) - if(40 to 74) - explosion(get_turf(src), 0, 2, 3) - if(5 to 39) - explosion(get_turf(src), 0, 1, 2) - qdel(src) // Either way we want to ensure the SMES is deleted. - -/obj/machinery/power/smes/emp_act(severity) - inputting(rand(0,1)) - outputting(rand(0,1)) - output_level = rand(0, output_level_max) - input_level = rand(0, input_level_max) - charge -= 1e6/severity - if (charge < 0) - charge = 0 - update_icon() - ..() - -/obj/machinery/power/smes/bullet_act(var/obj/item/projectile/Proj) - take_damage(Proj.get_structure_damage()) - -/obj/machinery/power/smes/ex_act(var/severity) - // Two strong explosions will destroy a SMES. - // Given the SMES creates another explosion on it's destruction it sounds fairly reasonable. - take_damage(250 / severity) - -/obj/machinery/power/smes/examine(var/mob/user) - . = ..() - . += "The service hatch is [panel_open ? "open" : "closed"]." - if(!damage) - return - var/damage_percentage = round((damage / maxdamage) * 100) - switch(damage_percentage) - if(75 to INFINITY) - . += "It's casing is severely damaged, and sparking circuitry may be seen through the holes!" - if(50 to 74) - . += "It's casing is considerably damaged, and some of the internal circuits appear to be exposed!" - if(25 to 49) - . += "It's casing is quite seriously damaged." - if(0 to 24) - . += "It's casing has some minor damage." - - -// Proc: toggle_input() -// Parameters: None -// Description: Switches the input on/off depending on previous setting -/obj/machinery/power/smes/proc/toggle_input() - inputting(!input_attempt) - update_icon() - -// Proc: toggle_output() -// Parameters: None -// Description: Switches the output on/off depending on previous setting -/obj/machinery/power/smes/proc/toggle_output() - outputting(!output_attempt) - update_icon() - -// Proc: set_input() -// Parameters: 1 (new_input - New input value in Watts) -// Description: Sets input setting on this SMES. Trims it if limits are exceeded. -/obj/machinery/power/smes/proc/set_input(var/new_input = 0) - input_level = between(0, new_input, input_level_max) - update_icon() - -// Proc: set_output() -// Parameters: 1 (new_output - New output value in Watts) -// Description: Sets output setting on this SMES. Trims it if limits are exceeded. -/obj/machinery/power/smes/proc/set_output(var/new_output = 0) - output_level = between(0, new_output, output_level_max) - update_icon() +// the SMES +// stores power + +GLOBAL_LIST_EMPTY(smeses) + +#define SMESMAXCHARGELEVEL 250000 +#define SMESMAXOUTPUT 250000 + +/obj/machinery/power/smes + name = "power storage unit" + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." + icon_state = "smes" + density = TRUE + anchored = TRUE + unacidable = TRUE + use_power = USE_POWER_OFF + circuit = /obj/item/weapon/circuitboard/smes + clicksound = "switch" + + var/capacity = 5e6 // maximum charge + var/charge = 1e6 // actual charge + + var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge + var/inputting = 0 // 1 = actually inputting, 0 = 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 = 1 // 1 = attempting to output, 0 = not attempting to output + var/outputting = 0 // 1 = actually outputting, 0 = 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 + + //Holders for powerout event. + var/last_output_attempt = 0 + var/last_input_attempt = 0 + var/last_charge = 0 + + //For icon overlay updates + var/last_disp + var/last_chrg + var/last_onln + + var/damage = 0 + var/maxdamage = 500 // Relatively resilient, given how expensive it is, but once destroyed produces small explosion. + + var/input_cut = 0 + var/input_pulsed = 0 + var/output_cut = 0 + var/output_pulsed = 0 + var/target_load = 0 + + var/name_tag = null + var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! + var/list/terminals = list() + var/should_be_mapped = 0 // If this is set to 0 it will send out warning on New() + var/grid_check = FALSE // If true, suspends all I/O. + + // CHOMPAdd: More humming noises + var/datum/looping_sound/generator/soundloop + var/noisy = FALSE + // CHOMPAdd End + +/obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0) + + if(drain_check) + return 1 + + var/smes_amt = min((amount * SMESRATE), charge) + charge -= smes_amt + return smes_amt / SMESRATE + +/obj/machinery/power/smes/Initialize() + . = ..() + GLOB.smeses += src + add_nearby_terminals() + soundloop = new(list(src), FALSE) // CHOMPEdit: hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm + soundloop.extra_range = -6 // CHOMPEdit: Doing this here bc we're reusing the generator hum, and can't directly edit that one + soundloop.falloff = 0.2 // CHOMPEdit: Harsher falloff. + if(!check_terminals()) + stat |= BROKEN + return + update_icon() + if(!powernet) + connect_to_network() + if(!should_be_mapped) + warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z") + +/obj/machinery/power/smes/Destroy() + for(var/obj/machinery/power/terminal/T in terminals) + T.master = null + terminals = null + GLOB.smeses -= src + QDEL_NULL(soundloop) + return ..() + +/obj/machinery/power/smes/proc/add_nearby_terminals() + for(var/d in GLOB.cardinal) + var/turf/T = get_step(src, d) + for(var/obj/machinery/power/terminal/term in T) + if(term && term.dir == turn(d, 180) && !term.master) + terminals |= term + term.master = src + term.connect_to_network() + +/obj/machinery/power/smes/proc/check_terminals() + if(!terminals.len) + return FALSE + return TRUE + +/obj/machinery/power/smes/add_avail(var/amount) + if(..(amount)) + powernet.smes_newavail += amount + return 1 + return 0 + +/obj/machinery/power/smes/disconnect_terminal(var/obj/machinery/power/terminal/term) + terminals -= term + term.master = null + +/obj/machinery/power/smes/update_icon() + cut_overlays() + if(stat & BROKEN) return + + add_overlay("smes-op[outputting]") + + if(inputting == 2) + add_overlay("smes-oc2") + else if (inputting == 1) + add_overlay("smes-oc1") + else + if(input_attempt) + add_overlay("smes-oc0") + + var/clevel = chargedisplay() + if(clevel>0) + add_overlay("smes-og[clevel]") + return + + +/obj/machinery/power/smes/proc/chargedisplay() + return round(5.5*charge/(capacity ? capacity : 5e6)) + +/obj/machinery/power/smes/proc/input_power(var/percentage, var/obj/machinery/power/terminal/term) + var/to_input = target_load * (percentage/100) + to_input = between(0, to_input, target_load) + if(percentage == 100) + inputting = 2 + else if(percentage) + inputting = 1 + // else inputting = 0, as set in process() + + var/inputted = term.powernet.draw_power(min(to_input, input_level - input_available)) + add_charge(inputted) + input_available += inputted + +// Mostly in place due to child types that may store power in other way (PSUs) +/obj/machinery/power/smes/proc/add_charge(var/amount) + charge += amount*SMESRATE + +/obj/machinery/power/smes/proc/remove_charge(var/amount) + charge -= amount*SMESRATE + +/obj/machinery/power/smes/process() + if(stat & BROKEN) + soundloop.stop() + noisy = FALSE + return + + // only update icon if state changed + if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) + update_icon() + //store machine state to see if we need to update the icon overlays + last_disp = chargedisplay() + last_chrg = inputting + last_onln = outputting + input_available = 0 + + //inputting + if(input_attempt && (!input_pulsed && !input_cut) && !grid_check) + target_load = CLAMP((capacity-charge)/SMESRATE, 0, input_level) // Amount we will request from the powernet. + var/input_available = FALSE + for(var/obj/machinery/power/terminal/term in terminals) + if(!term.powernet) + continue + input_available = TRUE + term.powernet.smes_demand += target_load + term.powernet.inputting.Add(term) + if(!input_available) + target_load = 0 // We won't input any power without powernet connection. + inputting = 0 + + output_used = 0 + //outputting + if(output_attempt && (!output_pulsed && !output_cut) && powernet && charge && !grid_check) + output_used = min( charge/SMESRATE, output_level) //limit output to that stored + remove_charge(output_used) // reduce the storage (may be recovered in /restore() if excessive) + add_avail(output_used) // add output to powernet (smes side) + outputting = 2 + else if(!powernet || !charge) + outputting = 1 + else + output_used = 0 + + if(!noisy && outputting) // Are we actually outputting power? + soundloop.start() + noisy = TRUE + if(noisy && outputting) + // Capped to 40 volume since higher volumes get annoying and it sounds worse. + // Formula previously was min(round(power/10)+1, 20) + soundloop.volume = CLAMP((output_used / 1000), 1, 40) + if(!outputting) + soundloop.stop() + noisy = FALSE + +// called after all power processes are finished +// restores charge level to smes if there was excess this ptick +/obj/machinery/power/smes/proc/restore(var/percent_load) + if(stat & BROKEN) + return + + if(!outputting) + output_used = 0 + return + + var/total_restore = output_used * (percent_load / 100) // First calculate amount of power used from our output + total_restore = between(0, total_restore, output_used) // Now clamp the value between 0 and actual output, just for clarity. + total_restore = output_used - total_restore // And, at last, subtract used power from outputted power, to get amount of power we will give back to the SMES. + + // now recharge this amount + var/clev = chargedisplay() + + add_charge(total_restore) // restore unused power + powernet.netexcess -= total_restore // remove the excess from the powernet, so later SMESes don't try to use it + + output_used -= total_restore + + if(clev != chargedisplay() ) //if needed updates the icons overlay + update_icon() + return + +//Will return 1 on failure +/obj/machinery/power/smes/proc/make_terminal(const/mob/user) + if (user.loc == loc) + to_chat(user, "You must not be on the same tile as the [src].") + return 1 + + //Direction the terminal will face to + var/tempDir = get_dir(user, src) + switch(tempDir) + if (NORTHEAST, SOUTHEAST) + tempDir = EAST + if (NORTHWEST, SOUTHWEST) + tempDir = WEST + var/turf/tempLoc = get_step(src, reverse_direction(tempDir)) + if (istype(tempLoc, /turf/space)) + to_chat(user, "You can't build a terminal on space.") + return 1 + else if (istype(tempLoc)) + if(!tempLoc.is_plating()) + to_chat(user, "You must remove the floor plating first.") + return 1 + if(check_terminal_exists(tempLoc, user, tempDir)) + return 1 + to_chat(user, "You start adding cable to the [src].") + if(do_after(user, 50)) + if(check_terminal_exists(tempLoc, user, tempDir)) + return 1 + var/obj/machinery/power/terminal/term = new/obj/machinery/power/terminal(tempLoc) + term.set_dir(tempDir) + term.master = src + term.connect_to_network() + terminals |= term + return 0 + return 1 + +/obj/machinery/power/smes/proc/check_terminal_exists(var/turf/location, var/mob/user, var/direction) + for(var/obj/machinery/power/terminal/term in location) + if(term.dir == direction) + to_chat(user, "There is already a terminal here.") + return 1 + return 0 + +/obj/machinery/power/smes/draw_power(var/amount) + var/drained = 0 + for(var/obj/machinery/power/terminal/term in terminals) + if(!term.powernet) + continue + if((amount - drained) <= 0) + return 0 + drained += term.powernet.draw_power(amount - drained) + return drained + + +/obj/machinery/power/smes/attack_ai(mob/user) + add_hiddenprint(user) + tgui_interact(user) + +/obj/machinery/power/smes/attack_hand(mob/user) + add_fingerprint(user) + tgui_interact(user) + + +/obj/machinery/power/smes/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, W)) + return FALSE + + if (!panel_open) + to_chat(user, "You need to open access hatch on [src] first!") + return FALSE + + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.isOn()) + to_chat(user, "Turn on \the [WT] first!") + return FALSE + if(!damage) + to_chat(user, "\The [src] is already fully repaired.") + return FALSE + if(WT.remove_fuel(0,user) && do_after(user, damage, src)) + to_chat(user, "You repair all structural damage to \the [src]") + damage = 0 + return FALSE + else if(istype(W, /obj/item/stack/cable_coil) && !building_terminal) + building_terminal = 1 + var/obj/item/stack/cable_coil/CC = W + if (CC.get_amount() < 10) + to_chat(user, "You need more cables.") + building_terminal = 0 + return FALSE + if (make_terminal(user)) + building_terminal = 0 + return FALSE + building_terminal = 0 + CC.use(10) + user.visible_message(\ + "[user.name] has added cables to the [src].",\ + "You added cables to the [src].") + stat = 0 + if(!powernet) + connect_to_network() + return FALSE + + else if(W.has_tool_quality(TOOL_WIRECUTTER) && !building_terminal) + building_terminal = TRUE + var/obj/machinery/power/terminal/term + for(var/obj/machinery/power/terminal/T in get_turf(user)) + if(T.master == src) + term = T + break + if(!term) + to_chat(user, "There is no terminal on this tile.") + building_terminal = FALSE + return FALSE + var/turf/tempTDir = get_turf(term) + if (istype(tempTDir)) + if(!tempTDir.is_plating()) + to_chat(user, "You must remove the floor plating first.") + else + to_chat(user, "You begin to cut the cables...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 50 * W.toolspeed)) + if (prob(50) && electrocute_mob(usr, term.powernet, term)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + building_terminal = FALSE + if(usr.stunned) + return FALSE + new /obj/item/stack/cable_coil(loc,10) + user.visible_message(\ + "[user.name] cut the cables and dismantled the power terminal.",\ + "You cut the cables and dismantle the power terminal.") + terminals -= term + qdel(term) + building_terminal = FALSE + return FALSE + return TRUE + +/obj/machinery/power/smes/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Smes", name) + ui.open() + +/obj/machinery/power/smes/tgui_data() + var/list/data = list( + "capacity" = capacity, + "capacityPercent" = round(100*charge/capacity, 0.1), + "charge" = charge, + "inputAttempt" = input_attempt, + "inputting" = inputting, + "inputLevel" = input_level, + "inputLevel_text" = DisplayPower(input_level), + "inputLevelMax" = input_level_max, + "inputAvailable" = input_available, + "outputAttempt" = output_attempt, + "outputting" = outputting, + "outputLevel" = output_level, + "outputLevel_text" = DisplayPower(output_level), + "outputLevelMax" = output_level_max, + "outputUsed" = output_used, + ) + return data + +/obj/machinery/power/smes/proc/Percentage() + if(!capacity) + return 0 + return round(100.0*charge/capacity, 0.1) + +/obj/machinery/power/smes/tgui_act(action, params) + if(..()) + return TRUE + switch(action) + if("tryinput") + inputting(!input_attempt) + update_icon() + . = TRUE + if("tryoutput") + outputting(!output_attempt) + update_icon() + . = TRUE + if("input") + tgui_set_io(SMES_TGUI_INPUT, params["target"], text2num(params["adjust"])) + if("output") + tgui_set_io(SMES_TGUI_OUTPUT, params["target"], text2num(params["adjust"])) + +/obj/machinery/power/smes/proc/tgui_set_io(io, target, adjust) + 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(.) + switch(io) + if(SMES_TGUI_INPUT) + set_input(target) + if(SMES_TGUI_OUTPUT) + set_output(target) + + +/obj/machinery/power/smes/proc/inputting(var/do_input) + input_attempt = do_input + if(!input_attempt) + inputting = 0 + +/obj/machinery/power/smes/proc/outputting(var/do_output) + output_attempt = do_output + if(!output_attempt) + outputting = 0 + +/obj/machinery/power/smes/take_damage(var/amount) + amount = max(0, round(amount)) + damage += amount + if(damage > maxdamage) + visible_message("\The [src] explodes in large shower of sparks and smoke!") + // Depending on stored charge percentage cause damage. + switch(Percentage()) + if(75 to INFINITY) + explosion(get_turf(src), 1, 2, 4) + if(40 to 74) + explosion(get_turf(src), 0, 2, 3) + if(5 to 39) + explosion(get_turf(src), 0, 1, 2) + qdel(src) // Either way we want to ensure the SMES is deleted. + +/obj/machinery/power/smes/emp_act(severity) + inputting(rand(0,1)) + outputting(rand(0,1)) + output_level = rand(0, output_level_max) + input_level = rand(0, input_level_max) + charge -= 1e6/severity + if (charge < 0) + charge = 0 + update_icon() + ..() + +/obj/machinery/power/smes/bullet_act(var/obj/item/projectile/Proj) + take_damage(Proj.get_structure_damage()) + +/obj/machinery/power/smes/ex_act(var/severity) + // Two strong explosions will destroy a SMES. + // Given the SMES creates another explosion on it's destruction it sounds fairly reasonable. + take_damage(250 / severity) + +/obj/machinery/power/smes/examine(var/mob/user) + . = ..() + . += "The service hatch is [panel_open ? "open" : "closed"]." + if(!damage) + return + var/damage_percentage = round((damage / maxdamage) * 100) + switch(damage_percentage) + if(75 to INFINITY) + . += "It's casing is severely damaged, and sparking circuitry may be seen through the holes!" + if(50 to 74) + . += "It's casing is considerably damaged, and some of the internal circuits appear to be exposed!" + if(25 to 49) + . += "It's casing is quite seriously damaged." + if(0 to 24) + . += "It's casing has some minor damage." + + +// Proc: toggle_input() +// Parameters: None +// Description: Switches the input on/off depending on previous setting +/obj/machinery/power/smes/proc/toggle_input() + inputting(!input_attempt) + update_icon() + +// Proc: toggle_output() +// Parameters: None +// Description: Switches the output on/off depending on previous setting +/obj/machinery/power/smes/proc/toggle_output() + outputting(!output_attempt) + update_icon() + +// Proc: set_input() +// Parameters: 1 (new_input - New input value in Watts) +// Description: Sets input setting on this SMES. Trims it if limits are exceeded. +/obj/machinery/power/smes/proc/set_input(var/new_input = 0) + input_level = between(0, new_input, input_level_max) + update_icon() + +// Proc: set_output() +// Parameters: 1 (new_output - New output value in Watts) +// Description: Sets output setting on this SMES. Trims it if limits are exceeded. +/obj/machinery/power/smes/proc/set_output(var/new_output = 0) + output_level = between(0, new_output, output_level_max) + update_icon() diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 068b131cf8..f0112ff55e 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -1,38 +1,38 @@ -// 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 = "It's an underfloor wiring terminal for power equipment." - level = 1 - var/obj/machinery/power/master = null - anchored = TRUE - plane = PLATING_PLANE - layer = WIRES_LAYER+0.01 - - -/obj/machinery/power/terminal/New() - ..() - var/turf/T = src.loc - if(level==1) hide(!T.is_plating()) - return - -/obj/machinery/power/terminal/Destroy() - if(master) - master.disconnect_terminal(src) - master = null - return ..() - -/obj/machinery/power/terminal/hide(var/i) - invisibility = i ? 101 : 0 - icon_state = i ? "term-f" : "term" - -/obj/machinery/power/terminal/hides_under_flooring() - return 1 - -/obj/machinery/power/terminal/overload(var/obj/machinery/power/source) - if(master) - master.overload(source) +// 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 = "It's an underfloor wiring terminal for power equipment." + level = 1 + var/obj/machinery/power/master = null + anchored = TRUE + plane = PLATING_PLANE + layer = WIRES_LAYER+0.01 + + +/obj/machinery/power/terminal/New() + ..() + var/turf/T = src.loc + if(level==1) hide(!T.is_plating()) + return + +/obj/machinery/power/terminal/Destroy() + if(master) + master.disconnect_terminal(src) + master = null + return ..() + +/obj/machinery/power/terminal/hide(var/i) + invisibility = i ? 101 : 0 + icon_state = i ? "term-f" : "term" + +/obj/machinery/power/terminal/hides_under_flooring() + return 1 + +/obj/machinery/power/terminal/overload(var/obj/machinery/power/source) + if(master) + master.overload(source) diff --git a/code/modules/power/tesla/telsa_construction.dm b/code/modules/power/tesla/telsa_construction.dm index b3c865c47a..603dc508aa 100644 --- a/code/modules/power/tesla/telsa_construction.dm +++ b/code/modules/power/tesla/telsa_construction.dm @@ -1,58 +1,58 @@ -////////////////////////// -// Circuits and Research -////////////////////////// - -// Tesla coils are built as machines using a circuit researchable in RnD -/obj/item/weapon/circuitboard/tesla_coil - name = T_BOARD("tesla coil") - build_path = /obj/machinery/power/tesla_coil - board_type = new /datum/frame/frame_types/machine - origin_tech = list(TECH_MAGNET = 2, TECH_POWER = 4) - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) - -/datum/design/circuit/tesla_coil - name = "Machine Design (Tesla Coil Board)" - desc = "The circuit board for a tesla coil." - id = "tesla_coil" - build_path = /obj/item/weapon/circuitboard/tesla_coil - req_tech = list(TECH_MAGNET = 2, TECH_POWER = 4) - sort_string = "MAAAC" - -// Grounding rods can be built as machines using a circuit made in an autolathe. -/obj/item/weapon/circuitboard/grounding_rod - name = T_BOARD("grounding rod") - build_path = /obj/machinery/power/grounding_rod - board_type = new /datum/frame/frame_types/machine - matter = list(MAT_STEEL = 50, MAT_GLASS = 50) - origin_tech = list(TECH_MAGNET = 1, TECH_POWER = 2) - req_components = list() - -/datum/category_item/autolathe/engineering/grounding_rod - name = "grounding rod electronics" - path = /obj/item/weapon/circuitboard/grounding_rod - -// SPECIAL BOARDS BELOW - -/obj/item/weapon/circuitboard/tesla_coil/attackby(obj/item/I as obj, mob/user as mob) - if(I.has_tool_quality(TOOL_MULTITOOL)) - var/result = tgui_input_list(user, "What do you want to reconfigure the board to?", "Multitool-Circuitboard interface", list("Standard", "Relay", "Prism", "Amplifier", "Recaster", "Collector")) - switch(result) - if("Standard") - name = T_BOARD("tesla coil") - build_path = /obj/machinery/power/tesla_coil - if("Relay") - name = T_BOARD("tesla relay coil") - build_path = /obj/machinery/power/tesla_coil/relay - if("Prism") - name = T_BOARD("tesla prism coil") - build_path = /obj/machinery/power/tesla_coil/splitter - if("Amplifier") - name = T_BOARD("tesla amplifier coil") - build_path = /obj/machinery/power/tesla_coil/amplifier - if("Recaster") - name = T_BOARD("tesla recaster coil") - build_path = /obj/machinery/power/tesla_coil/recaster - if("Collector") - name = T_BOARD("tesla collector coil") - build_path = /obj/machinery/power/tesla_coil/collector - return +////////////////////////// +// Circuits and Research +////////////////////////// + +// Tesla coils are built as machines using a circuit researchable in RnD +/obj/item/weapon/circuitboard/tesla_coil + name = T_BOARD("tesla coil") + build_path = /obj/machinery/power/tesla_coil + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_MAGNET = 2, TECH_POWER = 4) + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +/datum/design/circuit/tesla_coil + name = "Machine Design (Tesla Coil Board)" + desc = "The circuit board for a tesla coil." + id = "tesla_coil" + build_path = /obj/item/weapon/circuitboard/tesla_coil + req_tech = list(TECH_MAGNET = 2, TECH_POWER = 4) + sort_string = "MAAAC" + +// Grounding rods can be built as machines using a circuit made in an autolathe. +/obj/item/weapon/circuitboard/grounding_rod + name = T_BOARD("grounding rod") + build_path = /obj/machinery/power/grounding_rod + board_type = new /datum/frame/frame_types/machine + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + origin_tech = list(TECH_MAGNET = 1, TECH_POWER = 2) + req_components = list() + +/datum/category_item/autolathe/engineering/grounding_rod + name = "grounding rod electronics" + path = /obj/item/weapon/circuitboard/grounding_rod + +// SPECIAL BOARDS BELOW + +/obj/item/weapon/circuitboard/tesla_coil/attackby(obj/item/I as obj, mob/user as mob) + if(I.has_tool_quality(TOOL_MULTITOOL)) + var/result = tgui_input_list(user, "What do you want to reconfigure the board to?", "Multitool-Circuitboard interface", list("Standard", "Relay", "Prism", "Amplifier", "Recaster", "Collector")) + switch(result) + if("Standard") + name = T_BOARD("tesla coil") + build_path = /obj/machinery/power/tesla_coil + if("Relay") + name = T_BOARD("tesla relay coil") + build_path = /obj/machinery/power/tesla_coil/relay + if("Prism") + name = T_BOARD("tesla prism coil") + build_path = /obj/machinery/power/tesla_coil/splitter + if("Amplifier") + name = T_BOARD("tesla amplifier coil") + build_path = /obj/machinery/power/tesla_coil/amplifier + if("Recaster") + name = T_BOARD("tesla recaster coil") + build_path = /obj/machinery/power/tesla_coil/recaster + if("Collector") + name = T_BOARD("tesla collector coil") + build_path = /obj/machinery/power/tesla_coil/collector + return diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index efd68308fb..72a4cab717 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -1,77 +1,77 @@ -//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 = "A solar directional tracker." - icon = 'icons/obj/power.dmi' - icon_state = "tracker" - anchored = TRUE - density = TRUE - use_power = USE_POWER_OFF - var/glass_type = /obj/item/stack/material/glass - - var/id = 0 - var/sun_angle = 0 // sun angle as set by sun datum - var/obj/machinery/power/solar_control/control = null - var/SOLAR_MAX_DIST = 40 //VOREStation Addition - - -/obj/machinery/power/tracker/Initialize(mapload, glass_type) - . = ..() - update_icon() - connect_to_network() - -/obj/machinery/power/tracker/Destroy() - unset_control() //remove from control computer - ..() - -//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) - if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) - return 0 - control = SC - 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 - -//updates the tracker icon and the facing angle for the control computer -/obj/machinery/power/tracker/proc/set_angle(var/angle) - sun_angle = angle - - //set icon dir to show sun illumination - set_dir(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.cdir = angle - -/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user) - - if(W.has_tool_quality(TOOL_CROWBAR)) - playsound(src, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar tracker.") - if(do_after(user, 50)) - var/obj/item/solar_assembly/S = new(loc) - S.tracker = TRUE - S.anchored = TRUE - new glass_type(loc, 2) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the tracker.") - qdel(src) - return - ..() - -// Tracker Electronic - -/obj/item/weapon/tracker_electronics - - name = "tracker electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - w_class = ITEMSIZE_SMALL +//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 = "A solar directional tracker." + icon = 'icons/obj/power.dmi' + icon_state = "tracker" + anchored = TRUE + density = TRUE + use_power = USE_POWER_OFF + var/glass_type = /obj/item/stack/material/glass + + var/id = 0 + var/sun_angle = 0 // sun angle as set by sun datum + var/obj/machinery/power/solar_control/control = null + var/SOLAR_MAX_DIST = 40 //VOREStation Addition + + +/obj/machinery/power/tracker/Initialize(mapload, glass_type) + . = ..() + update_icon() + connect_to_network() + +/obj/machinery/power/tracker/Destroy() + unset_control() //remove from control computer + ..() + +//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST +/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) + if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) + return 0 + control = SC + 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 + +//updates the tracker icon and the facing angle for the control computer +/obj/machinery/power/tracker/proc/set_angle(var/angle) + sun_angle = angle + + //set icon dir to show sun illumination + set_dir(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.cdir = angle + +/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user) + + if(W.has_tool_quality(TOOL_CROWBAR)) + playsound(src, 'sound/machines/click.ogg', 50, 1) + user.visible_message("[user] begins to take the glass off the solar tracker.") + if(do_after(user, 50)) + var/obj/item/solar_assembly/S = new(loc) + S.tracker = TRUE + S.anchored = TRUE + new glass_type(loc, 2) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] takes the glass off the tracker.") + qdel(src) + return + ..() + +// Tracker Electronic + +/obj/item/weapon/tracker_electronics + + name = "tracker electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics" + w_class = ITEMSIZE_SMALL diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 9f542db4cc..99f24bb845 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -1,408 +1,408 @@ -// 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/compressor - name = "compressor" - desc = "The compressor stage of a gas turbine generator." - icon = 'icons/obj/pipes.dmi' - icon_state = "compressor" - anchored = TRUE - density = TRUE - can_atmos_pass = ATMOS_PASS_PROC - circuit = /obj/item/weapon/circuitboard/machine/power_compressor - var/obj/machinery/power/turbine/turbine - var/datum/gas_mixture/gas_contained - var/turf/simulated/inturf - var/starter = 0 - var/rpm = 0 - var/rpmtarget = 0 - var/capacity = 1e6 - var/comp_id = 0 - var/efficiency - -/obj/machinery/power/turbine - name = "gas turbine generator" - desc = "A gas turbine used for backup power generation." - icon = 'icons/obj/pipes.dmi' - icon_state = "turbine" - anchored = TRUE - density = TRUE - circuit = /obj/item/weapon/circuitboard/machine/power_turbine - var/obj/machinery/compressor/compressor - var/turf/simulated/outturf - var/lastgen - var/productivity = 1 - -/obj/machinery/computer/turbine_computer - name = "gas turbine control computer" - desc = "A computer to remotely control a gas turbine." - icon_keyboard = "tech_key" - icon_screen = "turbinecomp" - circuit = /obj/item/weapon/circuitboard/turbine_control - var/obj/machinery/compressor/compressor - var/list/obj/machinery/door/blast/doors - var/id = 0 - var/door_status = 0 - -/obj/item/weapon/circuitboard/machine/power_compressor - name = T_BOARD("power compressor") - build_path = /obj/machinery/compressor - board_type = new /datum/frame/frame_types/machine - origin_tech = list(TECH_MATERIAL = 4, TECH_POWER = 2) - req_components = list(/obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/manipulator = 6) - -/obj/item/weapon/circuitboard/machine/power_turbine - name = T_BOARD("power turbine") - build_path = /obj/machinery/power/turbine - board_type = new /datum/frame/frame_types/machine - origin_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 4) - req_components = list(/obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/capacitor = 6) - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Compressor -// the inlet stage of the gas turbine electricity generator -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#define COMPFRICTION 5e5 -#define COMPSTARTERLOAD 2800 - -/obj/machinery/compressor/Initialize() - . = ..() - default_apply_parts() - gas_contained = new() - inturf = get_step(src, dir) - locate_machinery() - if(!turbine) - stat |= BROKEN - -// When anchored, don't let air past us. -/obj/machinery/compressor/CanZASPass(turf/T, is_zone) - return !anchored - -/obj/machinery/compressor/proc/locate_machinery() - if(turbine) - return - turbine = locate() in get_step(src, get_dir(inturf, src)) - if(turbine) - turbine.locate_machinery() - -/obj/machinery/compressor/RefreshParts() - var/E = 0 - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - E += M.rating - efficiency = E / 6 - -/obj/machinery/compressor/attackby(obj/item/W, mob/user) - src.add_fingerprint(user) - - if(default_deconstruction_screwdriver(user, W)) - return - if(default_part_replacement(user, W)) - return - if(default_unfasten_wrench(user, W)) - return - if(default_deconstruction_crowbar(user, W)) - return - if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, comp_id, MAX_NAME_LEN) - new_ident = sanitize(new_ident,MAX_NAME_LEN) - if(new_ident && user.Adjacent(src)) - comp_id = new_ident - return - return ..() - -/obj/machinery/compressor/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) - if((. = ..())) - turbine = null - if(anchored) - inturf = get_step(src, dir) - locate_machinery() - if(turbine) - to_chat(user, "Turbine connected.") - stat &= ~BROKEN - else - to_chat(user, "Turbine not connected.") - stat |= BROKEN - -/obj/machinery/compressor/process() - if(!turbine) - stat = BROKEN - if(stat & BROKEN || panel_open) - return - if(!starter) - 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 = 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(image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER)) - else if(rpm>10000) - add_overlay(image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER)) - else if(rpm>2000) - add_overlay(image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER)) - else if(rpm>500) - add_overlay(image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER)) - //TODO: DEFERRED - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Turbine -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// 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 TURBPRES 9000000 -#define TURBGENQ 100000 -#define TURBGENG 0.8 - -/obj/machinery/power/turbine/Initialize() - . = ..() - default_apply_parts() - // The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) - locate_machinery() - if(!compressor) - stat |= BROKEN - -/obj/machinery/power/turbine/RefreshParts() - var/P = 0 - for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) - P += C.rating - productivity = P / 6 - -/obj/machinery/power/turbine/proc/locate_machinery() - if(compressor) - return - compressor = locate() in get_step(src, get_dir(outturf, src)) - if(compressor) - compressor.locate_machinery() - -/obj/machinery/power/turbine/attackby(obj/item/W, mob/user) - src.add_fingerprint(user) - - if(default_deconstruction_screwdriver(user, W)) - return - if(default_part_replacement(user, W)) - return - if(default_unfasten_wrench(user, W)) - return - if(default_deconstruction_crowbar(user, W)) - return - return ..() - -/obj/machinery/power/turbine/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) - if((. = ..())) - compressor = null - if(anchored) - outturf = get_step(src, dir) - locate_machinery() - if(compressor) - to_chat(user, "Compressor connected.") - stat &= ~BROKEN - else - to_chat(user, "Compressor not connected.") - stat |= BROKEN - -/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(image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER)) - - updateDialog() - -/obj/machinery/power/turbine/attack_hand(var/mob/user as mob) - if((. = ..())) - return - src.interact(user) - -/obj/machinery/power/turbine/interact(mob/user) - if(!Adjacent(user) || (stat & (NOPOWER|BROKEN)) && !issilicon(user)) - user.unset_machine(src) - user << browse(null, "window=turbine") - return - user.set_machine(src) - - 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, 700, 500, src) - 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() - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Turbine Computer -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/computer/turbine_computer/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/turbine_computer/LateInitialize() - locate_machinery() - -/obj/machinery/computer/turbine_computer/proc/locate_machinery() - if(!id) - return - for(var/obj/machinery/compressor/C in machines) - if(C.comp_id == id) - compressor = C - LAZYINITLIST(doors) - for(var/obj/machinery/door/blast/P in machines) - if(P.id == id) - doors += P - -/obj/machinery/computer/turbine_computer/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, id, MAX_NAME_LEN) - new_ident = sanitize(new_ident,MAX_NAME_LEN) - if(new_ident && user.Adjacent(src)) - id = new_ident - return - -/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob) - if((. = ..())) - return - tgui_interact(user) - -/obj/machinery/computer/turbine_computer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TurbineControl", name) - ui.open() - -/obj/machinery/computer/turbine_computer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = list() - data["connected"] = (compressor && compressor.turbine) ? TRUE : FALSE - data["compressor_broke"] = (!compressor || (compressor.stat & BROKEN)) ? TRUE : FALSE - data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.stat & BROKEN)) ? TRUE : FALSE - data["broken"] = (data["compressor_broke"] || data["turbine_broke"]) - data["door_status"] = door_status ? TRUE : FALSE - - data["online"] = FALSE - data["power"] = 0 - data["rpm"] = 0 - data["temp"] = 0 - - if(compressor && compressor.turbine) - data["online"] = compressor.starter - data["power"] = compressor.turbine.lastgen // DisplayPower - data["rpm"] = compressor.rpm - data["temp"] = compressor.gas_contained.temperature - - return data - -/obj/machinery/computer/turbine_computer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - switch(action) - if("power-on") - if(compressor && compressor.turbine) - compressor.starter = TRUE - . = TRUE - if("power-off") - if(compressor && compressor.turbine) - compressor.starter = FALSE - . = TRUE - if("reconnect") - locate_machinery() - . = TRUE - if("doors") - door_status = !door_status - for(var/obj/machinery/door/blast/D in src.doors) - if (door_status) - spawn(0) D.close() - else - spawn(0)D.open() - . = TRUE - -#undef COMPFRICTION -#undef COMPSTARTERLOAD -#undef TURBPRES -#undef TURBGENQ -#undef TURBGENG +// 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/compressor + name = "compressor" + desc = "The compressor stage of a gas turbine generator." + icon = 'icons/obj/pipes.dmi' + icon_state = "compressor" + anchored = TRUE + density = TRUE + can_atmos_pass = ATMOS_PASS_PROC + circuit = /obj/item/weapon/circuitboard/machine/power_compressor + var/obj/machinery/power/turbine/turbine + var/datum/gas_mixture/gas_contained + var/turf/simulated/inturf + var/starter = 0 + var/rpm = 0 + var/rpmtarget = 0 + var/capacity = 1e6 + var/comp_id = 0 + var/efficiency + +/obj/machinery/power/turbine + name = "gas turbine generator" + desc = "A gas turbine used for backup power generation." + icon = 'icons/obj/pipes.dmi' + icon_state = "turbine" + anchored = TRUE + density = TRUE + circuit = /obj/item/weapon/circuitboard/machine/power_turbine + var/obj/machinery/compressor/compressor + var/turf/simulated/outturf + var/lastgen + var/productivity = 1 + +/obj/machinery/computer/turbine_computer + name = "gas turbine control computer" + desc = "A computer to remotely control a gas turbine." + icon_keyboard = "tech_key" + icon_screen = "turbinecomp" + circuit = /obj/item/weapon/circuitboard/turbine_control + var/obj/machinery/compressor/compressor + var/list/obj/machinery/door/blast/doors + var/id = 0 + var/door_status = 0 + +/obj/item/weapon/circuitboard/machine/power_compressor + name = T_BOARD("power compressor") + build_path = /obj/machinery/compressor + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_MATERIAL = 4, TECH_POWER = 2) + req_components = list(/obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/manipulator = 6) + +/obj/item/weapon/circuitboard/machine/power_turbine + name = T_BOARD("power turbine") + build_path = /obj/machinery/power/turbine + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 4) + req_components = list(/obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/capacitor = 6) + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Compressor +// the inlet stage of the gas turbine electricity generator +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define COMPFRICTION 5e5 +#define COMPSTARTERLOAD 2800 + +/obj/machinery/compressor/Initialize() + . = ..() + default_apply_parts() + gas_contained = new() + inturf = get_step(src, dir) + locate_machinery() + if(!turbine) + stat |= BROKEN + +// When anchored, don't let air past us. +/obj/machinery/compressor/CanZASPass(turf/T, is_zone) + return !anchored + +/obj/machinery/compressor/proc/locate_machinery() + if(turbine) + return + turbine = locate() in get_step(src, get_dir(inturf, src)) + if(turbine) + turbine.locate_machinery() + +/obj/machinery/compressor/RefreshParts() + var/E = 0 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + E += M.rating + efficiency = E / 6 + +/obj/machinery/compressor/attackby(obj/item/W, mob/user) + src.add_fingerprint(user) + + if(default_deconstruction_screwdriver(user, W)) + return + if(default_part_replacement(user, W)) + return + if(default_unfasten_wrench(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(istype(W, /obj/item/device/multitool)) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, comp_id, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) + if(new_ident && user.Adjacent(src)) + comp_id = new_ident + return + return ..() + +/obj/machinery/compressor/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) + if((. = ..())) + turbine = null + if(anchored) + inturf = get_step(src, dir) + locate_machinery() + if(turbine) + to_chat(user, "Turbine connected.") + stat &= ~BROKEN + else + to_chat(user, "Turbine not connected.") + stat |= BROKEN + +/obj/machinery/compressor/process() + if(!turbine) + stat = BROKEN + if(stat & BROKEN || panel_open) + return + if(!starter) + 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 = 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(image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER)) + else if(rpm>10000) + add_overlay(image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER)) + else if(rpm>2000) + add_overlay(image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER)) + else if(rpm>500) + add_overlay(image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER)) + //TODO: DEFERRED + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Turbine +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// 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 TURBPRES 9000000 +#define TURBGENQ 100000 +#define TURBGENG 0.8 + +/obj/machinery/power/turbine/Initialize() + . = ..() + default_apply_parts() + // The outlet is pointed at the direction of the turbine component + outturf = get_step(src, dir) + locate_machinery() + if(!compressor) + stat |= BROKEN + +/obj/machinery/power/turbine/RefreshParts() + var/P = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + P += C.rating + productivity = P / 6 + +/obj/machinery/power/turbine/proc/locate_machinery() + if(compressor) + return + compressor = locate() in get_step(src, get_dir(outturf, src)) + if(compressor) + compressor.locate_machinery() + +/obj/machinery/power/turbine/attackby(obj/item/W, mob/user) + src.add_fingerprint(user) + + if(default_deconstruction_screwdriver(user, W)) + return + if(default_part_replacement(user, W)) + return + if(default_unfasten_wrench(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + return ..() + +/obj/machinery/power/turbine/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/W, var/time = 20) + if((. = ..())) + compressor = null + if(anchored) + outturf = get_step(src, dir) + locate_machinery() + if(compressor) + to_chat(user, "Compressor connected.") + stat &= ~BROKEN + else + to_chat(user, "Compressor not connected.") + stat |= BROKEN + +/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(image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER)) + + updateDialog() + +/obj/machinery/power/turbine/attack_hand(var/mob/user as mob) + if((. = ..())) + return + src.interact(user) + +/obj/machinery/power/turbine/interact(mob/user) + if(!Adjacent(user) || (stat & (NOPOWER|BROKEN)) && !issilicon(user)) + user.unset_machine(src) + user << browse(null, "window=turbine") + return + user.set_machine(src) + + 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, 700, 500, src) + 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() + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Turbine Computer +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/computer/turbine_computer/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/computer/turbine_computer/LateInitialize() + locate_machinery() + +/obj/machinery/computer/turbine_computer/proc/locate_machinery() + if(!id) + return + for(var/obj/machinery/compressor/C in machines) + if(C.comp_id == id) + compressor = C + LAZYINITLIST(doors) + for(var/obj/machinery/door/blast/P in machines) + if(P.id == id) + doors += P + +/obj/machinery/computer/turbine_computer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/device/multitool)) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, id, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) + if(new_ident && user.Adjacent(src)) + id = new_ident + return + +/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob) + if((. = ..())) + return + tgui_interact(user) + +/obj/machinery/computer/turbine_computer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TurbineControl", name) + ui.open() + +/obj/machinery/computer/turbine_computer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = list() + data["connected"] = (compressor && compressor.turbine) ? TRUE : FALSE + data["compressor_broke"] = (!compressor || (compressor.stat & BROKEN)) ? TRUE : FALSE + data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.stat & BROKEN)) ? TRUE : FALSE + data["broken"] = (data["compressor_broke"] || data["turbine_broke"]) + data["door_status"] = door_status ? TRUE : FALSE + + data["online"] = FALSE + data["power"] = 0 + data["rpm"] = 0 + data["temp"] = 0 + + if(compressor && compressor.turbine) + data["online"] = compressor.starter + data["power"] = compressor.turbine.lastgen // DisplayPower + data["rpm"] = compressor.rpm + data["temp"] = compressor.gas_contained.temperature + + return data + +/obj/machinery/computer/turbine_computer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("power-on") + if(compressor && compressor.turbine) + compressor.starter = TRUE + . = TRUE + if("power-off") + if(compressor && compressor.turbine) + compressor.starter = FALSE + . = TRUE + if("reconnect") + locate_machinery() + . = TRUE + if("doors") + door_status = !door_status + for(var/obj/machinery/door/blast/D in src.doors) + if (door_status) + spawn(0) D.close() + else + spawn(0)D.open() + . = TRUE + +#undef COMPFRICTION +#undef COMPSTARTERLOAD +#undef TURBPRES +#undef TURBGENQ +#undef TURBGENG diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 563b09d095..500cd71abf 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -1,270 +1,270 @@ -/obj/item/weapon/gun/energy - name = "energy gun" - desc = "A basic energy-based gun." - icon = 'icons/obj/gun_ch.dmi' // CHOMPEdit: Gun Sprites - icon_state = "energystun" // CHOMPEdit: Gun Sprites - fire_sound_text = "laser blast" - - var/obj/item/weapon/cell/power_supply //What type of power cell this uses - var/charge_cost = 240 //How much energy is needed to fire. - - var/accept_cell_type = /obj/item/weapon/cell/device - var/cell_type = /obj/item/weapon/cell/device/weapon - projectile_type = /obj/item/projectile/beam/practice - - var/modifystate - var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge - - reload_time = 5 //Energy weapons are slower to reload than ballistics by default, but this is no change from current values - - //self-recharging - var/self_recharge = 0 //if set, the weapon will recharge itself - var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically - var/use_organic_power = 0 // If set, the weapon will draw from nutrition or blood. - var/recharge_time = 4 - var/charge_tick = 0 - var/charge_delay = 75 //delay between firing and charging - var/shot_counter = TRUE // does this gun tell you how many shots it has? - - var/battery_lock = 0 //If set, weapon cannot switch batteries - var/random_start_ammo = FALSE //if TRUE, the weapon will spawn with randomly-determined ammo - -/obj/item/weapon/gun/energy/New() - ..() - var/static/list/gun_icons = icon_states('icons/obj/gun_ch.dmi') - if (icon == 'icons/obj/gun_ch.dmi' && !(icon_state in gun_icons)) - icon = 'icons/obj/gun.dmi' - if(self_recharge) - power_supply = new /obj/item/weapon/cell/device/weapon(src) - START_PROCESSING(SSobj, src) - else - if(cell_type) - power_supply = new cell_type(src) - else - power_supply = null - //random starting power! gives us a random number of shots in the battery between 0 and the max possible - if(random_start_ammo && cell_type) - power_supply.charge = charge_cost*rand(0,power_supply.maxcharge/charge_cost) - update_icon() - -/obj/item/weapon/gun/energy/Destroy() - if(self_recharge) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/weapon/gun/energy/get_cell() - return power_supply - -/obj/item/weapon/gun/energy/process() - if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the battery - if(world.time > last_shot + charge_delay) //Doesn't work if you've fired recently - if(!power_supply || power_supply.charge >= power_supply.maxcharge) - return 0 // check if we actually need to recharge - - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 - - var/rechargeamt = power_supply.maxcharge*0.2 - - if(use_external_power) - var/obj/item/weapon/cell/external = get_external_power_supply() - if(!external || !external.use(rechargeamt)) //Take power from the borg... - return 0 - - if(use_organic_power) - var/mob/living/carbon/human/H - if(ishuman(loc)) - H = loc - - if(istype(loc, /obj/item/organ)) - var/obj/item/organ/O = loc - if(O.owner) - H = O.owner - - if(istype(H)) - var/start_nutrition = H.nutrition - var/end_nutrition = 0 - - H.adjust_nutrition(-rechargeamt / 15) - - end_nutrition = H.nutrition - - if(start_nutrition - max(0, end_nutrition) < rechargeamt / 15) - - if(H.isSynthetic()) - H.adjustToxLoss((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition))) - - else - H.remove_blood((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition))) - - power_supply.give(rechargeamt) //... to recharge 1/5th the battery - update_icon() - var/mob/living/M = loc // TGMC Ammo HUD - if(istype(M)) // TGMC Ammo HUD - M?.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD - else - charge_tick = 0 - return 1 - -/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) - ..() - -/obj/item/weapon/gun/energy/switch_firemodes(mob/user) - if(..()) - update_icon() - -/obj/item/weapon/gun/energy/emp_act(severity) - ..() - update_icon() - -/obj/item/weapon/gun/energy/consume_next_projectile() - if(!power_supply) return null - if(!ispath(projectile_type)) return null - if(!power_supply.checked_use(charge_cost)) return null - var/mob/living/M = loc // TGMC Ammo HUD - if(istype(M)) // TGMC Ammo HUD - M?.hud_used.update_ammo_hud(M, src) - return new projectile_type(src) - -/obj/item/weapon/gun/energy/proc/load_ammo(var/obj/item/C, mob/user) - if(istype(C, /obj/item/weapon/cell)) - if(self_recharge || battery_lock) - to_chat(user, "[src] does not have a battery port.") - return - if(istype(C, accept_cell_type)) - var/obj/item/weapon/cell/P = C - if(power_supply) - to_chat(user, "[src] already has a power cell.") - else - user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") - if(do_after(user, reload_time * P.w_class)) - user.remove_from_mob(P) - power_supply = P - P.loc = src - user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].") - playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) - update_icon() - update_held_icon() - user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD - else - to_chat(user, "This cell is not fitted for [src].") - return - -/obj/item/weapon/gun/energy/proc/unload_ammo(mob/user) - if(self_recharge || battery_lock) - to_chat(user, "[src] does not have a battery port.") - return - if(power_supply) - user.put_in_hands(power_supply) - power_supply.update_icon() - user.visible_message("[user] removes [power_supply] from [src].", "You remove [power_supply] from [src].") - power_supply = null - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - update_icon() - update_held_icon() - user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD - else - to_chat(user, "[src] does not have a power cell.") - -/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) - ..() - load_ammo(A, user) - -/obj/item/weapon/gun/energy/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - unload_ammo(user) - else - return ..() - -/obj/item/weapon/gun/energy/proc/get_external_power_supply() - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - return R.cell - if(istype(src.loc, /obj/item/rig_module)) - var/obj/item/rig_module/module = src.loc - if(module.holder && module.holder.wearer) - var/mob/living/carbon/human/H = module.holder.wearer - if(istype(H) && H.get_rig()) - var/obj/item/weapon/rig/suit = H.get_rig() - if(istype(suit)) - return suit.cell - return null - -/obj/item/weapon/gun/energy/examine(mob/user) - . = ..() - if(shot_counter) - if(power_supply) - if(charge_cost) - var/shots_remaining = round(power_supply.charge / max(1, charge_cost)) // Paranoia - . += "Has [shots_remaining] shot\s remaining." - else - . += "Has infinite shots remaining." - else - . += "Does not have a power cell." - -/obj/item/weapon/gun/energy/update_icon(var/ignore_inhands) - if(power_supply == null) - if(modifystate) - icon_state = "[modifystate]_open" - else - icon_state = "[initial(icon_state)]_open" - return - else if(charge_meter) - var/ratio = power_supply.charge / power_supply.maxcharge - - //make sure that rounding down will not give us the empty state even if we have charge for a shot left. - if(power_supply.charge < charge_cost) - ratio = 0 - else - ratio = max(round(ratio, 0.25) * 100, 25) - - if(modifystate) - icon_state = "[modifystate][ratio]" - else - icon_state = "[initial(icon_state)][ratio]" - - else if(power_supply) - if(modifystate) - icon_state = "[modifystate]" - else - icon_state = "[initial(icon_state)]" - - if(!ignore_inhands) update_held_icon() - -/obj/item/weapon/gun/energy/proc/start_recharge() - if(power_supply == null) - power_supply = new /obj/item/weapon/cell/device/weapon(src) - self_recharge = 1 - START_PROCESSING(SSobj, src) - update_icon() - -/obj/item/weapon/gun/energy/get_description_interaction() - var/list/results = list() - - if(!battery_lock && !self_recharge) - if(power_supply) - results += "[desc_panel_image("offhand")]to remove the weapon cell." - else - results += "[desc_panel_image("weapon cell")]to add a new weapon cell." - - results += ..() - - return results - -// TGMC AMMO HUD -/obj/item/weapon/gun/energy/has_ammo_counter() - return TRUE - -/obj/item/weapon/gun/energy/get_ammo_type() - if(!projectile_type) - return list("unknown", "unknown") - else - var/obj/item/projectile/P = projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - -/obj/item/weapon/gun/energy/get_ammo_count() - if(!power_supply) - return 0 - else - return FLOOR(power_supply.charge / max(charge_cost, 1), 1) +/obj/item/weapon/gun/energy + name = "energy gun" + desc = "A basic energy-based gun." + icon = 'icons/obj/gun_ch.dmi' // CHOMPEdit: Gun Sprites + icon_state = "energystun" // CHOMPEdit: Gun Sprites + fire_sound_text = "laser blast" + + var/obj/item/weapon/cell/power_supply //What type of power cell this uses + var/charge_cost = 240 //How much energy is needed to fire. + + var/accept_cell_type = /obj/item/weapon/cell/device + var/cell_type = /obj/item/weapon/cell/device/weapon + projectile_type = /obj/item/projectile/beam/practice + + var/modifystate + var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge + + reload_time = 5 //Energy weapons are slower to reload than ballistics by default, but this is no change from current values + + //self-recharging + var/self_recharge = 0 //if set, the weapon will recharge itself + var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically + var/use_organic_power = 0 // If set, the weapon will draw from nutrition or blood. + var/recharge_time = 4 + var/charge_tick = 0 + var/charge_delay = 75 //delay between firing and charging + var/shot_counter = TRUE // does this gun tell you how many shots it has? + + var/battery_lock = 0 //If set, weapon cannot switch batteries + var/random_start_ammo = FALSE //if TRUE, the weapon will spawn with randomly-determined ammo + +/obj/item/weapon/gun/energy/New() + ..() + var/static/list/gun_icons = icon_states('icons/obj/gun_ch.dmi') + if (icon == 'icons/obj/gun_ch.dmi' && !(icon_state in gun_icons)) + icon = 'icons/obj/gun.dmi' + if(self_recharge) + power_supply = new /obj/item/weapon/cell/device/weapon(src) + START_PROCESSING(SSobj, src) + else + if(cell_type) + power_supply = new cell_type(src) + else + power_supply = null + //random starting power! gives us a random number of shots in the battery between 0 and the max possible + if(random_start_ammo && cell_type) + power_supply.charge = charge_cost*rand(0,power_supply.maxcharge/charge_cost) + update_icon() + +/obj/item/weapon/gun/energy/Destroy() + if(self_recharge) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/weapon/gun/energy/get_cell() + return power_supply + +/obj/item/weapon/gun/energy/process() + if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the battery + if(world.time > last_shot + charge_delay) //Doesn't work if you've fired recently + if(!power_supply || power_supply.charge >= power_supply.maxcharge) + return 0 // check if we actually need to recharge + + charge_tick++ + if(charge_tick < recharge_time) return 0 + charge_tick = 0 + + var/rechargeamt = power_supply.maxcharge*0.2 + + if(use_external_power) + var/obj/item/weapon/cell/external = get_external_power_supply() + if(!external || !external.use(rechargeamt)) //Take power from the borg... + return 0 + + if(use_organic_power) + var/mob/living/carbon/human/H + if(ishuman(loc)) + H = loc + + if(istype(loc, /obj/item/organ)) + var/obj/item/organ/O = loc + if(O.owner) + H = O.owner + + if(istype(H)) + var/start_nutrition = H.nutrition + var/end_nutrition = 0 + + H.adjust_nutrition(-rechargeamt / 15) + + end_nutrition = H.nutrition + + if(start_nutrition - max(0, end_nutrition) < rechargeamt / 15) + + if(H.isSynthetic()) + H.adjustToxLoss((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition))) + + else + H.remove_blood((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition))) + + power_supply.give(rechargeamt) //... to recharge 1/5th the battery + update_icon() + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD + else + charge_tick = 0 + return 1 + +/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) + ..() + +/obj/item/weapon/gun/energy/switch_firemodes(mob/user) + if(..()) + update_icon() + +/obj/item/weapon/gun/energy/emp_act(severity) + ..() + update_icon() + +/obj/item/weapon/gun/energy/consume_next_projectile() + if(!power_supply) return null + if(!ispath(projectile_type)) return null + if(!power_supply.checked_use(charge_cost)) return null + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) + return new projectile_type(src) + +/obj/item/weapon/gun/energy/proc/load_ammo(var/obj/item/C, mob/user) + if(istype(C, /obj/item/weapon/cell)) + if(self_recharge || battery_lock) + to_chat(user, "[src] does not have a battery port.") + return + if(istype(C, accept_cell_type)) + var/obj/item/weapon/cell/P = C + if(power_supply) + to_chat(user, "[src] already has a power cell.") + else + user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") + if(do_after(user, reload_time * P.w_class)) + user.remove_from_mob(P) + power_supply = P + P.loc = src + user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].") + playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) + update_icon() + update_held_icon() + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD + else + to_chat(user, "This cell is not fitted for [src].") + return + +/obj/item/weapon/gun/energy/proc/unload_ammo(mob/user) + if(self_recharge || battery_lock) + to_chat(user, "[src] does not have a battery port.") + return + if(power_supply) + user.put_in_hands(power_supply) + power_supply.update_icon() + user.visible_message("[user] removes [power_supply] from [src].", "You remove [power_supply] from [src].") + power_supply = null + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + update_icon() + update_held_icon() + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD + else + to_chat(user, "[src] does not have a power cell.") + +/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) + ..() + load_ammo(A, user) + +/obj/item/weapon/gun/energy/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) + unload_ammo(user) + else + return ..() + +/obj/item/weapon/gun/energy/proc/get_external_power_supply() + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + return R.cell + if(istype(src.loc, /obj/item/rig_module)) + var/obj/item/rig_module/module = src.loc + if(module.holder && module.holder.wearer) + var/mob/living/carbon/human/H = module.holder.wearer + if(istype(H) && H.get_rig()) + var/obj/item/weapon/rig/suit = H.get_rig() + if(istype(suit)) + return suit.cell + return null + +/obj/item/weapon/gun/energy/examine(mob/user) + . = ..() + if(shot_counter) + if(power_supply) + if(charge_cost) + var/shots_remaining = round(power_supply.charge / max(1, charge_cost)) // Paranoia + . += "Has [shots_remaining] shot\s remaining." + else + . += "Has infinite shots remaining." + else + . += "Does not have a power cell." + +/obj/item/weapon/gun/energy/update_icon(var/ignore_inhands) + if(power_supply == null) + if(modifystate) + icon_state = "[modifystate]_open" + else + icon_state = "[initial(icon_state)]_open" + return + else if(charge_meter) + var/ratio = power_supply.charge / power_supply.maxcharge + + //make sure that rounding down will not give us the empty state even if we have charge for a shot left. + if(power_supply.charge < charge_cost) + ratio = 0 + else + ratio = max(round(ratio, 0.25) * 100, 25) + + if(modifystate) + icon_state = "[modifystate][ratio]" + else + icon_state = "[initial(icon_state)][ratio]" + + else if(power_supply) + if(modifystate) + icon_state = "[modifystate]" + else + icon_state = "[initial(icon_state)]" + + if(!ignore_inhands) update_held_icon() + +/obj/item/weapon/gun/energy/proc/start_recharge() + if(power_supply == null) + power_supply = new /obj/item/weapon/cell/device/weapon(src) + self_recharge = 1 + START_PROCESSING(SSobj, src) + update_icon() + +/obj/item/weapon/gun/energy/get_description_interaction() + var/list/results = list() + + if(!battery_lock && !self_recharge) + if(power_supply) + results += "[desc_panel_image("offhand")]to remove the weapon cell." + else + results += "[desc_panel_image("weapon cell")]to add a new weapon cell." + + results += ..() + + return results + +// TGMC AMMO HUD +/obj/item/weapon/gun/energy/has_ammo_counter() + return TRUE + +/obj/item/weapon/gun/energy/get_ammo_type() + if(!projectile_type) + return list("unknown", "unknown") + else + var/obj/item/projectile/P = projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + +/obj/item/weapon/gun/energy/get_ammo_count() + if(!power_supply) + return 0 + else + return FLOOR(power_supply.charge / max(charge_cost, 1), 1) diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index b3cfce6bfd..827d2db11b 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -1,169 +1,169 @@ -/* - * Energy Gun - */ -/obj/item/weapon/gun/energy/gun - name = "energy gun" - desc = "Another bestseller of Lawson Arms, the LAEP80 Thor is a versatile energy based pistol, capable of switching between low and high \ - capacity projectile settings. In other words: Stun or Kill." - description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile \ - weapons to security and law enforcement agencies." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "egunstun" - item_state = null //so the human update icon uses the icon_state instead. - fire_delay = 8 - - projectile_type = /obj/item/projectile/beam/stun/med - origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) - modifystate = "egunstun" - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="egunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="egunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), - ) - -/* - * Energy Rifle - */ -/obj/item/weapon/gun/energy/gun/rifle - name = "energy rifle" - desc = "Another bestseller of Lawson Arms, the LAEP100 Svarog is a versatile energy rifle, capable of switching between low and high capacity \ - projectile settings. In other words: Stun or Kill." - icon_state = "riflestun" - item_state = null //so the human update icon uses the icon_state instead. - wielded_item_state = "riflestun-wielded" - force = 8 - w_class = ITEMSIZE_LARGE - fire_delay = 6 - one_handed_penalty = 30 - - projectile_type = /obj/item/projectile/beam/stun - origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3) - modifystate = "riflestun" - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="riflestun", fire_sound='sound/weapons/Taser.ogg', wielded_item_state="riflestun-wielded", charge_cost = 120), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="riflekill", fire_sound='sound/weapons/Laser.ogg', wielded_item_state="riflekill-wielded", charge_cost = 240), - ) - -/* - * Energy Carbine (Burst Laser) - */ -/obj/item/weapon/gun/energy/gun/burst - name = "energy carbine" - desc = "The Lawson Arms FM-2t is a versatile energy based carbine made from modifying the original LAEP100 design. It is capable of switching \ - between stun or kill with a three round burst option for both settings." - icon_state = "energystun" - item_state = null //so the human update icon uses the icon_state instead. - force = 8 - w_class = ITEMSIZE_HUGE //Probably gonna make it a rifle sooner or later //CHOMP Edit, and so I did. - slot_flags = SLOT_BELT|SLOT_BACK //CHOMP Edit. Let's make it so that if it doesn't fit in a backpack, it doesn't fit in a holster either. - fire_delay = 6 - - projectile_type = /obj/item/projectile/beam/stun/weak - origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3) - modifystate = "energystun" - - firemodes = list( - list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", charge_cost = 100), - list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), - list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill", charge_cost = 200), - list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), - ) - -/* - * Energy Thompson (RCW) - */ -/obj/item/weapon/gun/energy/gun/etommy - name = "Energy RCW" - desc = "The Lawson Arms experimental Rapid Capacitor Weapon is a highly reguarded and deadly peice of military hardware. Using a large drum shaped \ - capacitor bank the weapon is capable of accurate, rapid burst fire." - description_fluff = "The Rapid Capacitor Weapon is one of a few weapons that never saw full production. IT was an experimental Shock Trooper weapon developed by \ - Lawsom Arms during the Hegemony Conflict. While only a few hundred were made it didn't take long for smaller arms dealers to break apart stolen units and revese engineer \ - the tech used in their design. While they're an uncommon sight, they're known to be used by roving bands in the Salthan Fyrds as a forms of personal protection because \ - of their ease of use and firepower." - icon_state = "etommy" - item_state = "fm-2tkill" - force = 8 - w_class = ITEMSIZE_LARGE - fire_delay = 7 - charge_meter = 0 //ChompEDIT - tommylaser doesn't have charge sprites. - - projectile_type = /obj/item/projectile/beam/burstlaser - origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3, TECH_ILLEGAL = 4) - - firemodes = list( - list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 200), - list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), - ) - -/* - * Energy PDW (Martin) - */ -/obj/item/weapon/gun/energy/gun/compact - name = "personal energy weapon" - desc = "The RayZar EW20 \"Martin\" personal energy weapon - or PEW - is Ward-Takahasi's entry into the variable capacity energy gun market. \ - New users are advised to 'set RayZars to stun'." - description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \ - energy weapons of various types and quality primarily for the civilian market." - icon_state = "PDWstun" - fire_sound = 'sound/weapons/Taser.ogg' - w_class = ITEMSIZE_SMALL - projectile_type = /obj/item/projectile/beam/stun/med - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 3) - modifystate = "PDWstun" - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="PDWstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="PDWkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), - ) - -/* - * Energy Luger - */ -/obj/item/weapon/gun/energy/gun/eluger - name = "energy Luger" - desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing \ - for rapid follow-up shots. It also has the ability to toggle between stun and kill." - icon_state = "ep08stun" - item_state = "gun" - fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine. - battery_lock = 1 // In exchange for balance, you cannot remove the battery. Also there's no sprite for that and I fucking suck at sprites. -Ace - - projectile_type = /obj/item/projectile/beam/stun/med - origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2) - modifystate = "ep08stun" - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="ep08stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 120), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/eluger, modifystate="ep08kill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 240), - ) - -/* - * Mounted Energy Gun - */ -/obj/item/weapon/gun/energy/gun/mounted - name = "mounted energy gun" - self_recharge = 1 - use_external_power = 1 - -/* - * Nuclear Energy Gun - */ -/obj/item/weapon/gun/energy/gun/nuclear - name = "advanced energy gun" - desc = "An energy gun with an experimental miniaturized reactor, based on a Lawson Arms platform." - icon_state = "nucgunstun" - projectile_type = /obj/item/projectile/beam/stun - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3) - slot_flags = SLOT_BELT - force = 8 //looks heavier than a pistol - w_class = ITEMSIZE_HUGE //Looks bigger than a pistol, too. //CHOMP Edit: Looks like a cannon, lol. - fire_delay = 6 //This one's not a handgun, it should have the same fire delay as everything else - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - modifystate = null - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", charge_cost = 240), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", charge_cost = 480), +/* + * Energy Gun + */ +/obj/item/weapon/gun/energy/gun + name = "energy gun" + desc = "Another bestseller of Lawson Arms, the LAEP80 Thor is a versatile energy based pistol, capable of switching between low and high \ + capacity projectile settings. In other words: Stun or Kill." + description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile \ + weapons to security and law enforcement agencies." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "egunstun" + item_state = null //so the human update icon uses the icon_state instead. + fire_delay = 8 + + projectile_type = /obj/item/projectile/beam/stun/med + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) + modifystate = "egunstun" + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="egunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="egunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), + ) + +/* + * Energy Rifle + */ +/obj/item/weapon/gun/energy/gun/rifle + name = "energy rifle" + desc = "Another bestseller of Lawson Arms, the LAEP100 Svarog is a versatile energy rifle, capable of switching between low and high capacity \ + projectile settings. In other words: Stun or Kill." + icon_state = "riflestun" + item_state = null //so the human update icon uses the icon_state instead. + wielded_item_state = "riflestun-wielded" + force = 8 + w_class = ITEMSIZE_LARGE + fire_delay = 6 + one_handed_penalty = 30 + + projectile_type = /obj/item/projectile/beam/stun + origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3) + modifystate = "riflestun" + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="riflestun", fire_sound='sound/weapons/Taser.ogg', wielded_item_state="riflestun-wielded", charge_cost = 120), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="riflekill", fire_sound='sound/weapons/Laser.ogg', wielded_item_state="riflekill-wielded", charge_cost = 240), + ) + +/* + * Energy Carbine (Burst Laser) + */ +/obj/item/weapon/gun/energy/gun/burst + name = "energy carbine" + desc = "The Lawson Arms FM-2t is a versatile energy based carbine made from modifying the original LAEP100 design. It is capable of switching \ + between stun or kill with a three round burst option for both settings." + icon_state = "energystun" + item_state = null //so the human update icon uses the icon_state instead. + force = 8 + w_class = ITEMSIZE_HUGE //Probably gonna make it a rifle sooner or later //CHOMP Edit, and so I did. + slot_flags = SLOT_BELT|SLOT_BACK //CHOMP Edit. Let's make it so that if it doesn't fit in a backpack, it doesn't fit in a holster either. + fire_delay = 6 + + projectile_type = /obj/item/projectile/beam/stun/weak + origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3) + modifystate = "energystun" + + firemodes = list( + list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", charge_cost = 100), + list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), + list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill", charge_cost = 200), + list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), + ) + +/* + * Energy Thompson (RCW) + */ +/obj/item/weapon/gun/energy/gun/etommy + name = "Energy RCW" + desc = "The Lawson Arms experimental Rapid Capacitor Weapon is a highly reguarded and deadly peice of military hardware. Using a large drum shaped \ + capacitor bank the weapon is capable of accurate, rapid burst fire." + description_fluff = "The Rapid Capacitor Weapon is one of a few weapons that never saw full production. IT was an experimental Shock Trooper weapon developed by \ + Lawsom Arms during the Hegemony Conflict. While only a few hundred were made it didn't take long for smaller arms dealers to break apart stolen units and revese engineer \ + the tech used in their design. While they're an uncommon sight, they're known to be used by roving bands in the Salthan Fyrds as a forms of personal protection because \ + of their ease of use and firepower." + icon_state = "etommy" + item_state = "fm-2tkill" + force = 8 + w_class = ITEMSIZE_LARGE + fire_delay = 7 + charge_meter = 0 //ChompEDIT - tommylaser doesn't have charge sprites. + + projectile_type = /obj/item/projectile/beam/burstlaser + origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3, TECH_ILLEGAL = 4) + + firemodes = list( + list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 200), + list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), + ) + +/* + * Energy PDW (Martin) + */ +/obj/item/weapon/gun/energy/gun/compact + name = "personal energy weapon" + desc = "The RayZar EW20 \"Martin\" personal energy weapon - or PEW - is Ward-Takahasi's entry into the variable capacity energy gun market. \ + New users are advised to 'set RayZars to stun'." + description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \ + energy weapons of various types and quality primarily for the civilian market." + icon_state = "PDWstun" + fire_sound = 'sound/weapons/Taser.ogg' + w_class = ITEMSIZE_SMALL + projectile_type = /obj/item/projectile/beam/stun/med + origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 3) + modifystate = "PDWstun" + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="PDWstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="PDWkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), + ) + +/* + * Energy Luger + */ +/obj/item/weapon/gun/energy/gun/eluger + name = "energy Luger" + desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing \ + for rapid follow-up shots. It also has the ability to toggle between stun and kill." + icon_state = "ep08stun" + item_state = "gun" + fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine. + battery_lock = 1 // In exchange for balance, you cannot remove the battery. Also there's no sprite for that and I fucking suck at sprites. -Ace + + projectile_type = /obj/item/projectile/beam/stun/med + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2) + modifystate = "ep08stun" + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="ep08stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 120), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/eluger, modifystate="ep08kill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 240), + ) + +/* + * Mounted Energy Gun + */ +/obj/item/weapon/gun/energy/gun/mounted + name = "mounted energy gun" + self_recharge = 1 + use_external_power = 1 + +/* + * Nuclear Energy Gun + */ +/obj/item/weapon/gun/energy/gun/nuclear + name = "advanced energy gun" + desc = "An energy gun with an experimental miniaturized reactor, based on a Lawson Arms platform." + icon_state = "nucgunstun" + projectile_type = /obj/item/projectile/beam/stun + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3) + slot_flags = SLOT_BELT + force = 8 //looks heavier than a pistol + w_class = ITEMSIZE_HUGE //Looks bigger than a pistol, too. //CHOMP Edit: Looks like a cannon, lol. + fire_delay = 6 //This one's not a handgun, it should have the same fire delay as everything else + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + modifystate = null + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", charge_cost = 480), ) \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 05a40b60e3..73141c899b 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -1,85 +1,85 @@ -/* - * Pulse Rifle - */ -/obj/item/weapon/gun/energy/pulse_rifle - name = "\improper LP1 Locust Rifle" - desc = "The Bishamonten LP1 is a weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. \ - Because of its complexity and cost, it is rarely seen in use except by specialists." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "pulse" - item_state = null //so the human update icon uses the icon_state instead. - slot_flags = SLOT_BELT|SLOT_BACK - force = 10 - projectile_type = /obj/item/projectile/beam - charge_cost = 120 - fire_delay = 8 - sel_mode = 2 - w_class = ITEMSIZE_HUGE //CHOMP Edit. - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120), - list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240), - ) - -/obj/item/weapon/gun/energy/pulse_rifle/mounted - self_recharge = 1 - use_external_power = 1 - -/* - * Pulse Destroyer - */ -/obj/item/weapon/gun/energy/pulse_rifle/destroyer - name = "\improper LP1 MkII" - desc = "A more heavy-duty version of the Bishamonten LP1. It's had all its safety functions ripped out to facilitate the perfect killing machine." - icon_state = "pulsedest" - projectile_type=/obj/item/projectile/beam/pulse - charge_cost = 120 - fire_delay = 12 - -/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) - to_chat(user, "[src.name] has three settings, and they are all DESTROY.") - -/* - * Pulse Carbine - */ -/obj/item/weapon/gun/energy/pulse_rifle/carbine - name = "\improper LP2 Grasshopper Carbine" - desc = "The Bishamonten LP2 is a sleek, compact version of the LP1. Because of its smaller design it takes less time to charge a shot." - icon_state = "pulsecarbine" - charge_cost = 480 - fire_delay = 2 - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120), - list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240), - ) - -/* - * Pulse Pistol - */ -/obj/item/weapon/gun/energy/pulse_rifle/compact - name = "\improper LP4 Mantis Compact" - desc = "The Bishamonten LP4 was once the weapon of choice for military officers during the Hegemony War. Today it is little more than a collectors item." - description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for \ - bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. Focused on sleek ‘futurist’ designs which have \ - largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. Bishamonten weapons \ - tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard \ - firing mechanisms.The Grasshopper remains one of the smallest production laser pistols ever produced that is still capable of causing significant \ - damage to organic tissue." - slot_flags = SLOT_BELT|SLOT_HOLSTER - icon_state = "pulsepistol" - charge_cost = 480 - w_class = ITEMSIZE_NORMAL //CHOMP Edit. - -/obj/item/weapon/gun/energy/pulse_rifle/compact/admin - name = "\improper LP4 Mantis Deluxe" - desc = "It's not the size of the gun, it's the size of the hole it puts through people." - charge_cost = 240 - - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 240), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 240), - list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 480), +/* + * Pulse Rifle + */ +/obj/item/weapon/gun/energy/pulse_rifle + name = "\improper LP1 Locust Rifle" + desc = "The Bishamonten LP1 is a weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. \ + Because of its complexity and cost, it is rarely seen in use except by specialists." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "pulse" + item_state = null //so the human update icon uses the icon_state instead. + slot_flags = SLOT_BELT|SLOT_BACK + force = 10 + projectile_type = /obj/item/projectile/beam + charge_cost = 120 + fire_delay = 8 + sel_mode = 2 + w_class = ITEMSIZE_HUGE //CHOMP Edit. + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240), + ) + +/obj/item/weapon/gun/energy/pulse_rifle/mounted + self_recharge = 1 + use_external_power = 1 + +/* + * Pulse Destroyer + */ +/obj/item/weapon/gun/energy/pulse_rifle/destroyer + name = "\improper LP1 MkII" + desc = "A more heavy-duty version of the Bishamonten LP1. It's had all its safety functions ripped out to facilitate the perfect killing machine." + icon_state = "pulsedest" + projectile_type=/obj/item/projectile/beam/pulse + charge_cost = 120 + fire_delay = 12 + +/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) + to_chat(user, "[src.name] has three settings, and they are all DESTROY.") + +/* + * Pulse Carbine + */ +/obj/item/weapon/gun/energy/pulse_rifle/carbine + name = "\improper LP2 Grasshopper Carbine" + desc = "The Bishamonten LP2 is a sleek, compact version of the LP1. Because of its smaller design it takes less time to charge a shot." + icon_state = "pulsecarbine" + charge_cost = 480 + fire_delay = 2 + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240), + ) + +/* + * Pulse Pistol + */ +/obj/item/weapon/gun/energy/pulse_rifle/compact + name = "\improper LP4 Mantis Compact" + desc = "The Bishamonten LP4 was once the weapon of choice for military officers during the Hegemony War. Today it is little more than a collectors item." + description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for \ + bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. Focused on sleek ‘futurist’ designs which have \ + largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. Bishamonten weapons \ + tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard \ + firing mechanisms.The Grasshopper remains one of the smallest production laser pistols ever produced that is still capable of causing significant \ + damage to organic tissue." + slot_flags = SLOT_BELT|SLOT_HOLSTER + icon_state = "pulsepistol" + charge_cost = 480 + w_class = ITEMSIZE_NORMAL //CHOMP Edit. + +/obj/item/weapon/gun/energy/pulse_rifle/compact/admin + name = "\improper LP4 Mantis Deluxe" + desc = "It's not the size of the gun, it's the size of the hole it puts through people." + charge_cost = 240 + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 240), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 480), ) \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index bb9dea543c..7f726facfa 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -1,341 +1,341 @@ -/obj/item/weapon/gun/energy/ionrifle - name = "ion rifle" - desc = "The RayZar Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Not the best of its type." - description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market." - icon = 'icons/obj/64x32guns_ch.dmi' // CHOMPEdit: Gun Sprites - icon_state = "ionrifle" - item_state = "ionrifle" - icon_expected_width = 64 // CHOMPEdit: Gun Sprites - wielded_item_state = "ionrifle-wielded" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - slot_flags = SLOT_BACK - projectile_type = /obj/item/projectile/ion - -/obj/item/weapon/gun/energy/ionrifle/emp_act(severity) - ..(max(severity, 4)) //so it doesn't EMP itself, I guess - -/obj/item/weapon/gun/energy/ionrifle/empty - cell_type = null - -/obj/item/weapon/gun/energy/ionrifle/pistol - name = "ion pistol" - desc = "The RayZar Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "ionpistol" - item_state = null - w_class = ITEMSIZE_NORMAL - force = 5 - slot_flags = SLOT_BELT|SLOT_HOLSTER - charge_cost = 480 - projectile_type = /obj/item/projectile/ion/pistol - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/energy/decloner - name = "biological demolecularisor" - desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." - icon_state = "decloner" - item_state = "decloner" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3) - projectile_type = /obj/item/projectile/energy/declone - -/obj/item/weapon/gun/energy/floragun - name = "floral somatoray" - desc = "A tool that discharges controlled radiation which induces mutation in plant cells." - description_fluff = "The floral somatoray is a relatively recent invention of the NanoTrasen corporation, turning a process that once involved transferring plants to massive mutating racks, into a remote interface. Do not look directly into the transmission end." - icon = 'icons/obj/gun.dmi' //CHOMPedit - icon_state = "floramut100" - item_state = "floramut" - projectile_type = /obj/item/projectile/energy/floramut - origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3) - modifystate = "floramut" - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - - var/decl/plantgene/gene = null - recoil_mode = 0 //CHOMP Addition - var/obj/item/weapon/stock_parts/micro_laser/emitter - - firemodes = list( - list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"), - list(mode_name="increase yield", projectile_type=/obj/item/projectile/energy/florayield, modifystate="florayield"), - list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"), - ) - -/obj/item/weapon/gun/energy/floragun/Initialize() - . = ..() - emitter = new(src) - -/obj/item/weapon/gun/energy/floragun/examine(var/mob/user) - . = ..() - if(Adjacent(user)) - . += "It has [emitter ? emitter : "no micro laser"] installed." - -/obj/item/weapon/gun/energy/floragun/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) - if(!emitter) - user.drop_item() - W.loc = src - emitter = W - to_chat(user, "You install a [emitter.name] in [src].") - else - to_chat(user, "[src] already has a laser.") - - else if(W.has_tool_quality(TOOL_SCREWDRIVER)) - if(emitter) - to_chat(user, "You remove the [emitter.name] from the [src].") - emitter.loc = get_turf(src.loc) - playsound(src, W.usesound, 50, 1) - emitter = null - return - else - to_chat(user, "There is no micro laser in this [src].") - return - -/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag) - //allow shooting into adjacent hydrotrays regardless of intent - if(!emitter) - to_chat(user, "The [src] has no laser! ") - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - return - if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics)) - user.visible_message("\The [user] fires \the [src] into \the [target]!") - Fire(target,user) - return - ..() - -/obj/item/weapon/gun/energy/floragun/verb/select_gene() - set name = "Select Gene" - set category = "Object" - set src in view(1) - - var/genemask = tgui_input_list(usr, "Choose a gene to modify.", "Gene Choice", SSplants.plant_gene_datums) - - if(!genemask) - return - - gene = SSplants.plant_gene_datums[genemask] - - to_chat(usr, "You set the [src]'s targeted genetic area to [genemask].") - - return - -/obj/item/weapon/gun/energy/floragun/consume_next_projectile() - . = ..() - var/obj/item/projectile/energy/floramut/gene/G = . - var/obj/item/projectile/energy/florayield/GY = . - var/obj/item/projectile/energy/floramut/GM = . - // Inserting the upgrade level of the gun to the projectile as there isn't a better way to do this. - if(istype(G)) - G.gene = gene - G.lasermod = emitter.rating - else if(istype(GY)) - GY.lasermod = emitter.rating - else if(istype(GM)) - GM.lasermod = emitter.rating - -/obj/item/weapon/gun/energy/meteorgun - name = "meteor gun" - desc = "For the love of god, make sure you're aiming this the right way!" - icon_state = "riotgun" - item_state = "c20r" - slot_flags = SLOT_BELT|SLOT_BACK - w_class = ITEMSIZE_HUGE //CHOMP Edit. - projectile_type = /obj/item/projectile/meteor - cell_type = /obj/item/weapon/cell/potato - charge_cost = 100 - self_recharge = 1 - recharge_time = 5 //Time it takes for shots to recharge (in ticks) - charge_meter = 0 - -/obj/item/weapon/gun/energy/meteorgun/pen - name = "meteor pen" - desc = "The pen is mightier than the sword." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - w_class = ITEMSIZE_TINY - slot_flags = SLOT_BELT - - -/obj/item/weapon/gun/energy/mindflayer - name = "mind flayer" - desc = "A custom-built weapon of some kind." - icon_state = "xray" - projectile_type = /obj/item/projectile/beam/mindflayer - w_class = ITEMSIZE_HUGE //CHOMP Edit. - -/obj/item/weapon/gun/energy/toxgun - name = "phoron pistol" - desc = "A specialized firearm designed to fire lethal bolts of phoron." - icon_state = "toxgun" - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4) - projectile_type = /obj/item/projectile/energy/phoron - -/* Staves */ - -/obj/item/weapon/gun/energy/staff - name = "staff of change" - desc = "An artifact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - icon = 'icons/obj/gun.dmi' - item_icons = null - icon_state = "staffofchange" - slot_flags = SLOT_BACK - w_class = ITEMSIZE_LARGE - charge_cost = 480 - projectile_type = /obj/item/projectile/change - origin_tech = null - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - charge_meter = 0 - -/obj/item/weapon/gun/energy/staff/special_check(var/mob/user) - if((user.mind && !wizards.is_antagonist(user.mind))) - to_chat(usr, "You focus your mind on \the [src], but nothing happens!") - return 0 - - return ..() - -/obj/item/weapon/gun/energy/staff/handle_click_empty(mob/user = null) - if (user) - user.visible_message("*fizzle*", "*fizzle*") - else - src.visible_message("*fizzle*") - playsound(src, 'sound/effects/sparks1.ogg', 100, 1) -/* -/obj/item/weapon/gun/energy/staff/animate - name = "staff of animation" - desc = "An artifact that spits bolts of life force, which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - projectile_type = /obj/item/projectile/animate - charge_cost = 240 -*/ -/obj/item/weapon/gun/energy/staff/focus - name = "mental focus" - desc = "An artifact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out." - icon = 'icons/obj/wizard.dmi' - icon_state = "focus" - slot_flags = SLOT_BACK - projectile_type = /obj/item/projectile/forcebolt - /* - attack_self(mob/living/user as mob) - if(projectile_type == "/obj/item/projectile/forcebolt") - charge_cost = 400 - to_chat(user, "The [src.name] will now strike a small area.") - projectile_type = "/obj/item/projectile/forcebolt/strong" - else - charge_cost = 200 - to_chat(user, "The [src.name] will now strike only a single person.") - projectile_type = "/obj/item/projectile/forcebolt" - */ - -/obj/item/weapon/gun/energy/dakkalaser - name = "suppression gun" - desc = "A massive weapon designed to pressure the opposition by raining down a torrent of energy pellets." - icon_state = "dakkalaser" - item_state = "dakkalaser" - wielded_item_state = "dakkalaser-wielded" - w_class = ITEMSIZE_HUGE - charge_cost = 24 // 100 shots, it's a spray and pray (to RNGesus) weapon. - projectile_type = /obj/item/projectile/energy/blue_pellet - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - accuracy = 75 // Suppressive weapons don't work too well if there's no risk of being hit. - burst_delay = 1 // Burst faster than average. - origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6) - - firemodes = list( - list(mode_name="single shot", burst = 1, burst_accuracy = list(75), dispersion = list(0), charge_cost = 24), - list(mode_name="five shot burst", burst = 5, burst_accuracy = list(75,75,75,75,75), dispersion = list(1,1,1,1,1)), - list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(75,75,75,75,75,75,75,75,75,75), dispersion = list(2,2,2,2,2,2,2,2,2,2)), - ) - -/obj/item/weapon/gun/energy/maghowitzer - name = "portable MHD howitzer" - desc = "A massive weapon designed to destroy fortifications with a stream of molten tungsten." - description_fluff = "A weapon designed by joint cooperation of NanoTrasen, Hephaestus, and SCG scientists. Everything else is red tape and black highlighters." - description_info = "This weapon requires a wind-up period before being able to fire. Clicking on a target will create a beam between you and its turf, starting the timer. Upon completion, it will fire at the designated location." - icon_state = "mhdhowitzer" - item_state = "mhdhowitzer" - wielded_item_state = "mhdhowitzer-wielded" - w_class = ITEMSIZE_HUGE - - charge_cost = 10000 // Uses large cells, can at max have 3 shots. - projectile_type = /obj/item/projectile/beam/tungsten - cell_type = /obj/item/weapon/cell/high - accept_cell_type = /obj/item/weapon/cell - - accuracy = 75 - charge_meter = 0 - one_handed_penalty = 30 - - var/power_cycle = FALSE - -/obj/item/weapon/gun/energy/maghowitzer/proc/pick_random_target(var/turf/T) - var/foundmob = FALSE - var/foundmobs = list() - for(var/mob/living/L in T.contents) - foundmob = TRUE - foundmobs += L - if(foundmob) - var/return_target = pick(foundmobs) - return return_target - return FALSE - -/obj/item/weapon/gun/energy/maghowitzer/attack(atom/A, mob/living/user, def_zone) - if(power_cycle) - to_chat(user, "\The [src] is already powering up!") - return 0 - var/turf/target_turf = get_turf(A) - var/beameffect = user.Beam(target_turf,icon_state="sat_beam",icon='icons/effects/beam.dmi',time=31, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) - if(beameffect) - user.visible_message("[user] aims \the [src] at \the [A].") - if(power_supply && power_supply.charge >= charge_cost) //Do a delay for pointblanking too. - power_cycle = TRUE - if(do_after(user, 30)) - if(A.loc == target_turf) - ..(A, user, def_zone) - else - var/rand_target = pick_random_target(target_turf) - if(rand_target) - ..(rand_target, user, def_zone) - else - ..(target_turf, user, def_zone) - else - if(beameffect) - qdel(beameffect) - power_cycle = FALSE - else - ..(A, user, def_zone) //If it can't fire, just bash with no delay. - -/obj/item/weapon/gun/energy/maghowitzer/afterattack(atom/A, mob/living/user, adjacent, params) - if(power_cycle) - to_chat(user, "\The [src] is already powering up!") - return 0 - - var/turf/target_turf = get_turf(A) - - var/beameffect = user.Beam(target_turf,icon_state="sat_beam",icon='icons/effects/beam.dmi',time=31, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) - - if(beameffect) - user.visible_message("[user] aims \the [src] at \the [A].") - - if(!power_cycle) - power_cycle = TRUE - if(do_after(user, 30)) - if(A.loc == target_turf) - ..(A, user, adjacent, params) - else - var/rand_target = pick_random_target(target_turf) - if(rand_target) - ..(rand_target, user, adjacent, params) - else - ..(target_turf, user, adjacent, params) - else - if(beameffect) - qdel(beameffect) - handle_click_empty(user) - power_cycle = FALSE - else - to_chat(user, "\The [src] is already powering up!") +/obj/item/weapon/gun/energy/ionrifle + name = "ion rifle" + desc = "The RayZar Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Not the best of its type." + description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/64x32guns_ch.dmi' // CHOMPEdit: Gun Sprites + icon_state = "ionrifle" + item_state = "ionrifle" + icon_expected_width = 64 // CHOMPEdit: Gun Sprites + wielded_item_state = "ionrifle-wielded" + origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + slot_flags = SLOT_BACK + projectile_type = /obj/item/projectile/ion + +/obj/item/weapon/gun/energy/ionrifle/emp_act(severity) + ..(max(severity, 4)) //so it doesn't EMP itself, I guess + +/obj/item/weapon/gun/energy/ionrifle/empty + cell_type = null + +/obj/item/weapon/gun/energy/ionrifle/pistol + name = "ion pistol" + desc = "The RayZar Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "ionpistol" + item_state = null + w_class = ITEMSIZE_NORMAL + force = 5 + slot_flags = SLOT_BELT|SLOT_HOLSTER + charge_cost = 480 + projectile_type = /obj/item/projectile/ion/pistol + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/energy/decloner + name = "biological demolecularisor" + desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." + icon_state = "decloner" + item_state = "decloner" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3) + projectile_type = /obj/item/projectile/energy/declone + +/obj/item/weapon/gun/energy/floragun + name = "floral somatoray" + desc = "A tool that discharges controlled radiation which induces mutation in plant cells." + description_fluff = "The floral somatoray is a relatively recent invention of the NanoTrasen corporation, turning a process that once involved transferring plants to massive mutating racks, into a remote interface. Do not look directly into the transmission end." + icon = 'icons/obj/gun.dmi' //CHOMPedit + icon_state = "floramut100" + item_state = "floramut" + projectile_type = /obj/item/projectile/energy/floramut + origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3) + modifystate = "floramut" + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + + var/decl/plantgene/gene = null + recoil_mode = 0 //CHOMP Addition + var/obj/item/weapon/stock_parts/micro_laser/emitter + + firemodes = list( + list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"), + list(mode_name="increase yield", projectile_type=/obj/item/projectile/energy/florayield, modifystate="florayield"), + list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"), + ) + +/obj/item/weapon/gun/energy/floragun/Initialize() + . = ..() + emitter = new(src) + +/obj/item/weapon/gun/energy/floragun/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += "It has [emitter ? emitter : "no micro laser"] installed." + +/obj/item/weapon/gun/energy/floragun/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(!emitter) + user.drop_item() + W.loc = src + emitter = W + to_chat(user, "You install a [emitter.name] in [src].") + else + to_chat(user, "[src] already has a laser.") + + else if(W.has_tool_quality(TOOL_SCREWDRIVER)) + if(emitter) + to_chat(user, "You remove the [emitter.name] from the [src].") + emitter.loc = get_turf(src.loc) + playsound(src, W.usesound, 50, 1) + emitter = null + return + else + to_chat(user, "There is no micro laser in this [src].") + return + +/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag) + //allow shooting into adjacent hydrotrays regardless of intent + if(!emitter) + to_chat(user, "The [src] has no laser! ") + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + return + if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics)) + user.visible_message("\The [user] fires \the [src] into \the [target]!") + Fire(target,user) + return + ..() + +/obj/item/weapon/gun/energy/floragun/verb/select_gene() + set name = "Select Gene" + set category = "Object" + set src in view(1) + + var/genemask = tgui_input_list(usr, "Choose a gene to modify.", "Gene Choice", SSplants.plant_gene_datums) + + if(!genemask) + return + + gene = SSplants.plant_gene_datums[genemask] + + to_chat(usr, "You set the [src]'s targeted genetic area to [genemask].") + + return + +/obj/item/weapon/gun/energy/floragun/consume_next_projectile() + . = ..() + var/obj/item/projectile/energy/floramut/gene/G = . + var/obj/item/projectile/energy/florayield/GY = . + var/obj/item/projectile/energy/floramut/GM = . + // Inserting the upgrade level of the gun to the projectile as there isn't a better way to do this. + if(istype(G)) + G.gene = gene + G.lasermod = emitter.rating + else if(istype(GY)) + GY.lasermod = emitter.rating + else if(istype(GM)) + GM.lasermod = emitter.rating + +/obj/item/weapon/gun/energy/meteorgun + name = "meteor gun" + desc = "For the love of god, make sure you're aiming this the right way!" + icon_state = "riotgun" + item_state = "c20r" + slot_flags = SLOT_BELT|SLOT_BACK + w_class = ITEMSIZE_HUGE //CHOMP Edit. + projectile_type = /obj/item/projectile/meteor + cell_type = /obj/item/weapon/cell/potato + charge_cost = 100 + self_recharge = 1 + recharge_time = 5 //Time it takes for shots to recharge (in ticks) + charge_meter = 0 + +/obj/item/weapon/gun/energy/meteorgun/pen + name = "meteor pen" + desc = "The pen is mightier than the sword." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + w_class = ITEMSIZE_TINY + slot_flags = SLOT_BELT + + +/obj/item/weapon/gun/energy/mindflayer + name = "mind flayer" + desc = "A custom-built weapon of some kind." + icon_state = "xray" + projectile_type = /obj/item/projectile/beam/mindflayer + w_class = ITEMSIZE_HUGE //CHOMP Edit. + +/obj/item/weapon/gun/energy/toxgun + name = "phoron pistol" + desc = "A specialized firearm designed to fire lethal bolts of phoron." + icon_state = "toxgun" + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4) + projectile_type = /obj/item/projectile/energy/phoron + +/* Staves */ + +/obj/item/weapon/gun/energy/staff + name = "staff of change" + desc = "An artifact that spits bolts of coruscating energy which cause the target's very form to reshape itself." + icon = 'icons/obj/gun.dmi' + item_icons = null + icon_state = "staffofchange" + slot_flags = SLOT_BACK + w_class = ITEMSIZE_LARGE + charge_cost = 480 + projectile_type = /obj/item/projectile/change + origin_tech = null + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + charge_meter = 0 + +/obj/item/weapon/gun/energy/staff/special_check(var/mob/user) + if((user.mind && !wizards.is_antagonist(user.mind))) + to_chat(usr, "You focus your mind on \the [src], but nothing happens!") + return 0 + + return ..() + +/obj/item/weapon/gun/energy/staff/handle_click_empty(mob/user = null) + if (user) + user.visible_message("*fizzle*", "*fizzle*") + else + src.visible_message("*fizzle*") + playsound(src, 'sound/effects/sparks1.ogg', 100, 1) +/* +/obj/item/weapon/gun/energy/staff/animate + name = "staff of animation" + desc = "An artifact that spits bolts of life force, which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." + projectile_type = /obj/item/projectile/animate + charge_cost = 240 +*/ +/obj/item/weapon/gun/energy/staff/focus + name = "mental focus" + desc = "An artifact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out." + icon = 'icons/obj/wizard.dmi' + icon_state = "focus" + slot_flags = SLOT_BACK + projectile_type = /obj/item/projectile/forcebolt + /* + attack_self(mob/living/user as mob) + if(projectile_type == "/obj/item/projectile/forcebolt") + charge_cost = 400 + to_chat(user, "The [src.name] will now strike a small area.") + projectile_type = "/obj/item/projectile/forcebolt/strong" + else + charge_cost = 200 + to_chat(user, "The [src.name] will now strike only a single person.") + projectile_type = "/obj/item/projectile/forcebolt" + */ + +/obj/item/weapon/gun/energy/dakkalaser + name = "suppression gun" + desc = "A massive weapon designed to pressure the opposition by raining down a torrent of energy pellets." + icon_state = "dakkalaser" + item_state = "dakkalaser" + wielded_item_state = "dakkalaser-wielded" + w_class = ITEMSIZE_HUGE + charge_cost = 24 // 100 shots, it's a spray and pray (to RNGesus) weapon. + projectile_type = /obj/item/projectile/energy/blue_pellet + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + accuracy = 75 // Suppressive weapons don't work too well if there's no risk of being hit. + burst_delay = 1 // Burst faster than average. + origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6) + + firemodes = list( + list(mode_name="single shot", burst = 1, burst_accuracy = list(75), dispersion = list(0), charge_cost = 24), + list(mode_name="five shot burst", burst = 5, burst_accuracy = list(75,75,75,75,75), dispersion = list(1,1,1,1,1)), + list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(75,75,75,75,75,75,75,75,75,75), dispersion = list(2,2,2,2,2,2,2,2,2,2)), + ) + +/obj/item/weapon/gun/energy/maghowitzer + name = "portable MHD howitzer" + desc = "A massive weapon designed to destroy fortifications with a stream of molten tungsten." + description_fluff = "A weapon designed by joint cooperation of NanoTrasen, Hephaestus, and SCG scientists. Everything else is red tape and black highlighters." + description_info = "This weapon requires a wind-up period before being able to fire. Clicking on a target will create a beam between you and its turf, starting the timer. Upon completion, it will fire at the designated location." + icon_state = "mhdhowitzer" + item_state = "mhdhowitzer" + wielded_item_state = "mhdhowitzer-wielded" + w_class = ITEMSIZE_HUGE + + charge_cost = 10000 // Uses large cells, can at max have 3 shots. + projectile_type = /obj/item/projectile/beam/tungsten + cell_type = /obj/item/weapon/cell/high + accept_cell_type = /obj/item/weapon/cell + + accuracy = 75 + charge_meter = 0 + one_handed_penalty = 30 + + var/power_cycle = FALSE + +/obj/item/weapon/gun/energy/maghowitzer/proc/pick_random_target(var/turf/T) + var/foundmob = FALSE + var/foundmobs = list() + for(var/mob/living/L in T.contents) + foundmob = TRUE + foundmobs += L + if(foundmob) + var/return_target = pick(foundmobs) + return return_target + return FALSE + +/obj/item/weapon/gun/energy/maghowitzer/attack(atom/A, mob/living/user, def_zone) + if(power_cycle) + to_chat(user, "\The [src] is already powering up!") + return 0 + var/turf/target_turf = get_turf(A) + var/beameffect = user.Beam(target_turf,icon_state="sat_beam",icon='icons/effects/beam.dmi',time=31, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) + if(beameffect) + user.visible_message("[user] aims \the [src] at \the [A].") + if(power_supply && power_supply.charge >= charge_cost) //Do a delay for pointblanking too. + power_cycle = TRUE + if(do_after(user, 30)) + if(A.loc == target_turf) + ..(A, user, def_zone) + else + var/rand_target = pick_random_target(target_turf) + if(rand_target) + ..(rand_target, user, def_zone) + else + ..(target_turf, user, def_zone) + else + if(beameffect) + qdel(beameffect) + power_cycle = FALSE + else + ..(A, user, def_zone) //If it can't fire, just bash with no delay. + +/obj/item/weapon/gun/energy/maghowitzer/afterattack(atom/A, mob/living/user, adjacent, params) + if(power_cycle) + to_chat(user, "\The [src] is already powering up!") + return 0 + + var/turf/target_turf = get_turf(A) + + var/beameffect = user.Beam(target_turf,icon_state="sat_beam",icon='icons/effects/beam.dmi',time=31, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) + + if(beameffect) + user.visible_message("[user] aims \the [src] at \the [A].") + + if(!power_cycle) + power_cycle = TRUE + if(do_after(user, 30)) + if(A.loc == target_turf) + ..(A, user, adjacent, params) + else + var/rand_target = pick_random_target(target_turf) + if(rand_target) + ..(rand_target, user, adjacent, params) + else + ..(target_turf, user, adjacent, params) + else + if(beameffect) + qdel(beameffect) + handle_click_empty(user) + power_cycle = FALSE + else + to_chat(user, "\The [src] is already powering up!") diff --git a/code/modules/projectiles/guns/energy/special_vr.dm b/code/modules/projectiles/guns/energy/special_vr.dm index aaab881599..2092ffef95 100644 --- a/code/modules/projectiles/guns/energy/special_vr.dm +++ b/code/modules/projectiles/guns/energy/special_vr.dm @@ -1,104 +1,104 @@ -/obj/item/weapon/gun/energy/ionrifle/pistol - projectile_type = /obj/item/projectile/ion/pistol // still packs a punch but no AoE - w_class = ITEMSIZE_NORMAL //CHOMP Edit. - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/energy/ionrifle/weak - projectile_type = /obj/item/projectile/ion/small - -/obj/item/weapon/gun/energy/medigun //Adminspawn/ERT etc // CH edit - Changes ML3M to NERD - name = "directed restoration system" - desc = "The BL-3 'Phoenix' is an adaptation on the NERD 'Medbeam' design that channels the power of the beam into a single healing laser. It is highly energy-inefficient, but its medical power cannot be denied." - force = 5 - icon_state = "medbeam" - item_state = "medbeam" - icon = 'icons/obj/gun_vr.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', - ) - slot_flags = SLOT_BELT - accuracy = 100 - fire_delay = 12 - fire_sound = 'sound/weapons/eluger.ogg' - - projectile_type = /obj/item/projectile/beam/medigun - - accept_cell_type = /obj/item/weapon/cell - cell_type = /obj/item/weapon/cell/high - charge_cost = 2500 - -/obj/item/weapon/gun/energy/bfgtaser - name = "9000-series Ball Lightning Taser" - desc = "The brainchild of Hephaestus Industries Civil Pacification Division, the BLT-9000 was intended for riot control but despite enthusiastic interest from law-enforcement agencies across the Commonwealth and beyond, its indiscriminate nature led to it being banned from civilian use in virtually all jurisdictions. As a result, most pieces are found in the hands of collectors." - icon = 'icons/obj/gun_vr.dmi' - icon_state = "BFG" - fire_sound = 'sound/effects/phasein.ogg' - item_state = "mhdhowitzer" - wielded_item_state = "mhdhowitzer-wielded" //Placeholder - slot_flags = SLOT_BELT|SLOT_BACK - projectile_type = /obj/item/projectile/bullet/BFGtaser - fire_delay = 20 - w_class = ITEMSIZE_LARGE - one_handed_penalty = 90 // The thing's heavy and huge. - accuracy = 45 - charge_cost = 2400 //yes, this bad boy empties an entire weapon cell in one shot. What of it? - var/spinning_up = FALSE - -/obj/item/weapon/gun/energy/bfgtaser/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) - if(spinning_up) - return - if(!power_supply || !power_supply.check_charge(charge_cost)) - handle_click_empty(user) - return - - playsound(src, 'sound/weapons/chargeup.ogg', 100, 1) - spinning_up = TRUE - update_icon() - user.visible_message("[user] starts charging the [src]!", \ - "You start charging the [src]!") - if(do_after(user, 8, src)) - spinning_up = FALSE - ..() - else - spinning_up = FALSE - -/obj/item/projectile/beam/stun/weak/BFG - fire_sound = 'sound/effects/sparks6.ogg' - hitsound = 'sound/effects/sparks4.ogg' - hitsound_wall = 'sound/effects/sparks7.ogg' - -/obj/item/projectile/bullet/BFGtaser - name = "lightning ball" - icon = 'icons/obj/projectiles_vr.dmi' - icon_state = "minitesla" - speed=5 - damage = 100 - damage_type = AGONY - check_armour = "energy" - embed_chance = 0 - hitsound = 'sound/weapons/zapbang.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - var/zaptype = /obj/item/projectile/beam/stun/weak/BFG - -/obj/item/projectile/bullet/BFGtaser/process() - var/list/victims = list() - for(var/mob/living/M in living_mobs(world.view)) - if(M != firer) - victims += M - if(LAZYLEN(victims)) - var/target = pick(victims) - var/obj/item/projectile/P = new zaptype(src.loc) - P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) - ..() - -/obj/item/projectile/bullet/BFGtaser/on_hit() - var/list/victims = list() - for(var/mob/living/M in living_mobs(world.view)) - if(M != firer) - victims += M - if(LAZYLEN(victims)) - for(var/target in victims) - var/obj/item/projectile/P = new zaptype(src.loc) - P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) - ..() +/obj/item/weapon/gun/energy/ionrifle/pistol + projectile_type = /obj/item/projectile/ion/pistol // still packs a punch but no AoE + w_class = ITEMSIZE_NORMAL //CHOMP Edit. + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/energy/ionrifle/weak + projectile_type = /obj/item/projectile/ion/small + +/obj/item/weapon/gun/energy/medigun //Adminspawn/ERT etc // CH edit - Changes ML3M to NERD + name = "directed restoration system" + desc = "The BL-3 'Phoenix' is an adaptation on the NERD 'Medbeam' design that channels the power of the beam into a single healing laser. It is highly energy-inefficient, but its medical power cannot be denied." + force = 5 + icon_state = "medbeam" + item_state = "medbeam" + icon = 'icons/obj/gun_vr.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', + ) + slot_flags = SLOT_BELT + accuracy = 100 + fire_delay = 12 + fire_sound = 'sound/weapons/eluger.ogg' + + projectile_type = /obj/item/projectile/beam/medigun + + accept_cell_type = /obj/item/weapon/cell + cell_type = /obj/item/weapon/cell/high + charge_cost = 2500 + +/obj/item/weapon/gun/energy/bfgtaser + name = "9000-series Ball Lightning Taser" + desc = "The brainchild of Hephaestus Industries Civil Pacification Division, the BLT-9000 was intended for riot control but despite enthusiastic interest from law-enforcement agencies across the Commonwealth and beyond, its indiscriminate nature led to it being banned from civilian use in virtually all jurisdictions. As a result, most pieces are found in the hands of collectors." + icon = 'icons/obj/gun_vr.dmi' + icon_state = "BFG" + fire_sound = 'sound/effects/phasein.ogg' + item_state = "mhdhowitzer" + wielded_item_state = "mhdhowitzer-wielded" //Placeholder + slot_flags = SLOT_BELT|SLOT_BACK + projectile_type = /obj/item/projectile/bullet/BFGtaser + fire_delay = 20 + w_class = ITEMSIZE_LARGE + one_handed_penalty = 90 // The thing's heavy and huge. + accuracy = 45 + charge_cost = 2400 //yes, this bad boy empties an entire weapon cell in one shot. What of it? + var/spinning_up = FALSE + +/obj/item/weapon/gun/energy/bfgtaser/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + if(spinning_up) + return + if(!power_supply || !power_supply.check_charge(charge_cost)) + handle_click_empty(user) + return + + playsound(src, 'sound/weapons/chargeup.ogg', 100, 1) + spinning_up = TRUE + update_icon() + user.visible_message("[user] starts charging the [src]!", \ + "You start charging the [src]!") + if(do_after(user, 8, src)) + spinning_up = FALSE + ..() + else + spinning_up = FALSE + +/obj/item/projectile/beam/stun/weak/BFG + fire_sound = 'sound/effects/sparks6.ogg' + hitsound = 'sound/effects/sparks4.ogg' + hitsound_wall = 'sound/effects/sparks7.ogg' + +/obj/item/projectile/bullet/BFGtaser + name = "lightning ball" + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "minitesla" + speed=5 + damage = 100 + damage_type = AGONY + check_armour = "energy" + embed_chance = 0 + hitsound = 'sound/weapons/zapbang.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + var/zaptype = /obj/item/projectile/beam/stun/weak/BFG + +/obj/item/projectile/bullet/BFGtaser/process() + var/list/victims = list() + for(var/mob/living/M in living_mobs(world.view)) + if(M != firer) + victims += M + if(LAZYLEN(victims)) + var/target = pick(victims) + var/obj/item/projectile/P = new zaptype(src.loc) + P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) + ..() + +/obj/item/projectile/bullet/BFGtaser/on_hit() + var/list/victims = list() + for(var/mob/living/M in living_mobs(world.view)) + if(M != firer) + victims += M + if(LAZYLEN(victims)) + for(var/target in victims) + var/obj/item/projectile/P = new zaptype(src.loc) + P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) + ..() diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index f33a3506bf..6665e0563d 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -1,216 +1,216 @@ -/* - * Taser - */ -/obj/item/weapon/gun/energy/taser - name = "taser gun" - desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T RayZar design." - description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \ - energy weapons of various types and quality primarily for the civilian market." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "taser" - item_state = null //so the human update icon uses the icon_state instead. - projectile_type = /obj/item/projectile/beam/stun - charge_cost = 480 - -/obj/item/weapon/gun/energy/taser/mounted - name = "mounted taser gun" - self_recharge = 1 - use_external_power = 1 - -/obj/item/weapon/gun/energy/taser/mounted/augment - self_recharge = 1 - use_external_power = 0 - use_organic_power = TRUE - canremove = FALSE - -/obj/item/weapon/gun/energy/taser/mounted/cyborg - name = "taser gun" - charge_cost = 160 //Chompedit: Reduced from 400 to 160 to match VR's, which we also use. - recharge_time = 5 //ChompEdit: reduced from 7 to 5, Time it takes for shots to recharge (in ticks) - -/* - * Disabler - */ -/obj/item/weapon/gun/energy/taser/disabler - name = "disabler" - desc = "The NT Mk4 T-DL is a small gun used for non-lethal takedowns. Produced by NT, it's an archaic device which attacks the target's \ - nervous-system and is actually a heavily modified version of the NT Mk30 NL. It's use is heavily regulated due to its effects on the body." - icon_state = "disabler" - projectile_type = /obj/item/projectile/beam/stun/disabler - charge_cost = 480 - -/* - * Crossbow - */ -/obj/item/weapon/gun/energy/crossbow - name = "mini energy-crossbow" - desc = "A weapon favored by many mercenary stealth specialists." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "crossbow" - w_class = ITEMSIZE_SMALL - item_state = "crossbow" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5) - matter = list(MAT_STEEL = 2000) - slot_flags = SLOT_BELT | SLOT_HOLSTER - silenced = 1 - projectile_type = /obj/item/projectile/energy/bolt - charge_cost = 480 - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - charge_meter = 0 - -/obj/item/weapon/gun/energy/crossbow/ninja - name = "energy dart thrower" - projectile_type = /obj/item/projectile/energy/dart - -/obj/item/weapon/gun/energy/crossbow/largecrossbow - name = "energy crossbow" - desc = "A weapon favored by mercenary infiltration teams." - icon_state = "crossbowlarge" - w_class = ITEMSIZE_LARGE - force = 10 - matter = list(MAT_STEEL = 200000) - slot_flags = SLOT_BELT - projectile_type = /obj/item/projectile/energy/bolt/large - -/* - * Plasma Stun - */ -/obj/item/weapon/gun/energy/plasmastun - name = "plasma pulse projector" - desc = "The RayZar MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands." - description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market. \ - Less well known are RayZar's limited-production experimental projects, often in the form of less-lethal weapon solutions." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "plasma_stun" - item_state = "plasma_stun" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3) - fire_delay = 20 - charge_cost = 600 - projectile_type = /obj/item/projectile/energy/plasmastun - -/* - * Stun Revolver - */ -/obj/item/weapon/gun/energy/stunrevolver - name = "stun revolver" - desc = "A LAEP20 \"Aktzin\". Designed and produced by Lawson Arms under the wing of Hephaestus, \ - several TSCs have been trying to get a hold of the blueprints for half a decade." - description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, \ - often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \ - The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, \ - and the company has been particularly litigious towards any attempted imitators." - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "stunrevolver" - item_state = "stunrevolver" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - projectile_type = /obj/item/projectile/energy/electrode/strong - charge_cost = 400 - -/* - * Detective Stun Revolver - */ -/obj/item/weapon/gun/energy/stunrevolver/detective - desc = "A LAEP20 \"Aktzin\". Designed and produced by Lawson Arms under the wing of Hephaestus, \ - several TSCs have been trying to get a hold of the blueprints for half a decade." - var/unique_reskin - -/obj/item/weapon/gun/energy/stunrevolver/detective/update_icon(var/ignore_inhands) - if(power_supply == null) - if(unique_reskin) - icon_state = "[unique_reskin]_open" - else - icon_state = "[initial(icon_state)]_open" - return - else if(charge_meter) - var/ratio = power_supply.charge / power_supply.maxcharge - - //make sure that rounding down will not give us the empty state even if we have charge for a shot left. - if(power_supply.charge < charge_cost) - ratio = 0 - else - ratio = max(round(ratio, 0.25) * 100, 25) - - if(unique_reskin) - icon_state = "[unique_reskin][ratio]" - else - icon_state = "[initial(icon_state)][ratio]" - - else if(power_supply) - if(unique_reskin) - icon_state = "[unique_reskin]" - else - icon_state = "[initial(icon_state)]" - - if(!ignore_inhands) update_held_icon() - -/obj/item/weapon/gun/energy/stunrevolver/detective/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Rename your gun. If you're Security." - - var/mob/M = usr - if(!M.mind) return 0 - var/job = M.mind.assigned_role - if(job != "Detective" && job != "Security Officer" && job != "Warden" && job != "Head of Security") - to_chat(M, "You don't feel cool enough to name this gun, chump.") - return 0 - - var/input = sanitizeSafe(input("What do you want to name the gun?", ,""), MAX_NAME_LEN) - - if(src && input && !M.stat && in_range(M,src)) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return 1 - -/obj/item/weapon/gun/energy/stunrevolver/detective/verb/reskin_gun() - set name = "Resprite gun" - set category = "Object" - set desc = "Click to choose a sprite for your gun." - - var/mob/M = usr - var/list/options = list() - options["Lawson Arms LAEP20"] = "stunrevolver" - options["Lawson Arms LTX1020"] = "vinstunrevolver" - options["Lawson Arms LTX1010"] = "snubstun2revolver" - options["Lawson Arms LTX1020 (Blued)"] = "bluedstunrevolver" - options["Lawson Arms LTX1020 (Stainless)"] = "stainstunrevolver" - options["Lawson Arms LTX1020 (Ace)"] = "snubstunrevolver" - options["Lawson Arms LTX1020 (Gold)"] = "goldstunrevolver" - var/choice = input(M,"Choose your sprite!","Resprite Gun") in options - if(src && choice && !M.stat && in_range(M,src)) - icon_state = options[choice] - unique_reskin = options[choice] - to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") - return 1 - -/* - * Vintage Stun Revolver - */ -/obj/item/weapon/gun/energy/stunrevolver/vintage - name = "vintage stun revolver" - desc = "An older model stun revolver that is still in service across the frontier." - description_fluff = "The LTX1020 \"Bolter\", a Firefly Co. staple from when the company was in its hayday. \ - While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ - across the frontier as anything from collectors items to surplus equipment. The LTX1020 falls under \ - the latter category. Several companies have been known to use the base tech within the Bolter to create \ - their own variants of the Stun Revolver." - icon_state = "vinstunrevolver" - item_state = "stunrevolver" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - -/* - * Snubnose Stun Revolver - */ -/obj/item/weapon/gun/energy/stunrevolver/snubnose - name = "snub stun revolver" - desc = "A snub nose stun revolver sporting a rather elegant look." - description_fluff = "The LTX1010 \"Stubby\", a Firefly Co. staple from when the company was in its hayday. \ - While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ - across the frontier as anything from collectors items to surplus equipment. The LTX1010 falls under \ - the latter category. Gangsters and other gentlemanly criminals alike use the Stubby as a means of policing \ - within their ranks. Hard to argue with the boss with 12000 volts shooting through you." - icon_state = "snubstunrevolver" - item_state = "stunrevolver" - w_class = ITEMSIZE_SMALL //small pistol is small - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) +/* + * Taser + */ +/obj/item/weapon/gun/energy/taser + name = "taser gun" + desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T RayZar design." + description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \ + energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "taser" + item_state = null //so the human update icon uses the icon_state instead. + projectile_type = /obj/item/projectile/beam/stun + charge_cost = 480 + +/obj/item/weapon/gun/energy/taser/mounted + name = "mounted taser gun" + self_recharge = 1 + use_external_power = 1 + +/obj/item/weapon/gun/energy/taser/mounted/augment + self_recharge = 1 + use_external_power = 0 + use_organic_power = TRUE + canremove = FALSE + +/obj/item/weapon/gun/energy/taser/mounted/cyborg + name = "taser gun" + charge_cost = 160 //Chompedit: Reduced from 400 to 160 to match VR's, which we also use. + recharge_time = 5 //ChompEdit: reduced from 7 to 5, Time it takes for shots to recharge (in ticks) + +/* + * Disabler + */ +/obj/item/weapon/gun/energy/taser/disabler + name = "disabler" + desc = "The NT Mk4 T-DL is a small gun used for non-lethal takedowns. Produced by NT, it's an archaic device which attacks the target's \ + nervous-system and is actually a heavily modified version of the NT Mk30 NL. It's use is heavily regulated due to its effects on the body." + icon_state = "disabler" + projectile_type = /obj/item/projectile/beam/stun/disabler + charge_cost = 480 + +/* + * Crossbow + */ +/obj/item/weapon/gun/energy/crossbow + name = "mini energy-crossbow" + desc = "A weapon favored by many mercenary stealth specialists." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "crossbow" + w_class = ITEMSIZE_SMALL + item_state = "crossbow" + origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5) + matter = list(MAT_STEEL = 2000) + slot_flags = SLOT_BELT | SLOT_HOLSTER + silenced = 1 + projectile_type = /obj/item/projectile/energy/bolt + charge_cost = 480 + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + charge_meter = 0 + +/obj/item/weapon/gun/energy/crossbow/ninja + name = "energy dart thrower" + projectile_type = /obj/item/projectile/energy/dart + +/obj/item/weapon/gun/energy/crossbow/largecrossbow + name = "energy crossbow" + desc = "A weapon favored by mercenary infiltration teams." + icon_state = "crossbowlarge" + w_class = ITEMSIZE_LARGE + force = 10 + matter = list(MAT_STEEL = 200000) + slot_flags = SLOT_BELT + projectile_type = /obj/item/projectile/energy/bolt/large + +/* + * Plasma Stun + */ +/obj/item/weapon/gun/energy/plasmastun + name = "plasma pulse projector" + desc = "The RayZar MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands." + description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market. \ + Less well known are RayZar's limited-production experimental projects, often in the form of less-lethal weapon solutions." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "plasma_stun" + item_state = "plasma_stun" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3) + fire_delay = 20 + charge_cost = 600 + projectile_type = /obj/item/projectile/energy/plasmastun + +/* + * Stun Revolver + */ +/obj/item/weapon/gun/energy/stunrevolver + name = "stun revolver" + desc = "A LAEP20 \"Aktzin\". Designed and produced by Lawson Arms under the wing of Hephaestus, \ + several TSCs have been trying to get a hold of the blueprints for half a decade." + description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, \ + often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \ + The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, \ + and the company has been particularly litigious towards any attempted imitators." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "stunrevolver" + item_state = "stunrevolver" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + projectile_type = /obj/item/projectile/energy/electrode/strong + charge_cost = 400 + +/* + * Detective Stun Revolver + */ +/obj/item/weapon/gun/energy/stunrevolver/detective + desc = "A LAEP20 \"Aktzin\". Designed and produced by Lawson Arms under the wing of Hephaestus, \ + several TSCs have been trying to get a hold of the blueprints for half a decade." + var/unique_reskin + +/obj/item/weapon/gun/energy/stunrevolver/detective/update_icon(var/ignore_inhands) + if(power_supply == null) + if(unique_reskin) + icon_state = "[unique_reskin]_open" + else + icon_state = "[initial(icon_state)]_open" + return + else if(charge_meter) + var/ratio = power_supply.charge / power_supply.maxcharge + + //make sure that rounding down will not give us the empty state even if we have charge for a shot left. + if(power_supply.charge < charge_cost) + ratio = 0 + else + ratio = max(round(ratio, 0.25) * 100, 25) + + if(unique_reskin) + icon_state = "[unique_reskin][ratio]" + else + icon_state = "[initial(icon_state)][ratio]" + + else if(power_supply) + if(unique_reskin) + icon_state = "[unique_reskin]" + else + icon_state = "[initial(icon_state)]" + + if(!ignore_inhands) update_held_icon() + +/obj/item/weapon/gun/energy/stunrevolver/detective/verb/rename_gun() + set name = "Name Gun" + set category = "Object" + set desc = "Rename your gun. If you're Security." + + var/mob/M = usr + if(!M.mind) return 0 + var/job = M.mind.assigned_role + if(job != "Detective" && job != "Security Officer" && job != "Warden" && job != "Head of Security") + to_chat(M, "You don't feel cool enough to name this gun, chump.") + return 0 + + var/input = sanitizeSafe(input("What do you want to name the gun?", ,""), MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src)) + name = input + to_chat(M, "You name the gun [input]. Say hello to your new friend.") + return 1 + +/obj/item/weapon/gun/energy/stunrevolver/detective/verb/reskin_gun() + set name = "Resprite gun" + set category = "Object" + set desc = "Click to choose a sprite for your gun." + + var/mob/M = usr + var/list/options = list() + options["Lawson Arms LAEP20"] = "stunrevolver" + options["Lawson Arms LTX1020"] = "vinstunrevolver" + options["Lawson Arms LTX1010"] = "snubstun2revolver" + options["Lawson Arms LTX1020 (Blued)"] = "bluedstunrevolver" + options["Lawson Arms LTX1020 (Stainless)"] = "stainstunrevolver" + options["Lawson Arms LTX1020 (Ace)"] = "snubstunrevolver" + options["Lawson Arms LTX1020 (Gold)"] = "goldstunrevolver" + var/choice = input(M,"Choose your sprite!","Resprite Gun") in options + if(src && choice && !M.stat && in_range(M,src)) + icon_state = options[choice] + unique_reskin = options[choice] + to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") + return 1 + +/* + * Vintage Stun Revolver + */ +/obj/item/weapon/gun/energy/stunrevolver/vintage + name = "vintage stun revolver" + desc = "An older model stun revolver that is still in service across the frontier." + description_fluff = "The LTX1020 \"Bolter\", a Firefly Co. staple from when the company was in its hayday. \ + While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ + across the frontier as anything from collectors items to surplus equipment. The LTX1020 falls under \ + the latter category. Several companies have been known to use the base tech within the Bolter to create \ + their own variants of the Stun Revolver." + icon_state = "vinstunrevolver" + item_state = "stunrevolver" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + +/* + * Snubnose Stun Revolver + */ +/obj/item/weapon/gun/energy/stunrevolver/snubnose + name = "snub stun revolver" + desc = "A snub nose stun revolver sporting a rather elegant look." + description_fluff = "The LTX1010 \"Stubby\", a Firefly Co. staple from when the company was in its hayday. \ + While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ + across the frontier as anything from collectors items to surplus equipment. The LTX1010 falls under \ + the latter category. Gangsters and other gentlemanly criminals alike use the Stubby as a means of policing \ + within their ranks. Hard to argue with the boss with 12000 volts shooting through you." + icon_state = "snubstunrevolver" + item_state = "stunrevolver" + w_class = ITEMSIZE_SMALL //small pistol is small + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index efb8e9da6b..4ef8ab320d 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -1,20 +1,20 @@ -/obj/item/weapon/gun/energy/temperature - name = "temperature gun" - icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites - icon_state = "freezegun" - desc = "A gun that can add or remove heat from entities it hits. In other words, it can fire 'cold', and 'hot' beams." - charge_cost = 240 - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2) - slot_flags = SLOT_BELT|SLOT_BACK - - - projectile_type = /obj/item/projectile/temp - - firemodes = list( - list(mode_name="endothermic beam", projectile_type = /obj/item/projectile/temp, charge_cost = 240), - list(mode_name="exothermic beam", projectile_type = /obj/item/projectile/temp/hot, charge_cost = 240), - ) - -/obj/item/weapon/gun/energy/temperature/mounted - self_recharge = 1 - use_external_power = 1 +/obj/item/weapon/gun/energy/temperature + name = "temperature gun" + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites + icon_state = "freezegun" + desc = "A gun that can add or remove heat from entities it hits. In other words, it can fire 'cold', and 'hot' beams." + charge_cost = 240 + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2) + slot_flags = SLOT_BELT|SLOT_BACK + + + projectile_type = /obj/item/projectile/temp + + firemodes = list( + list(mode_name="endothermic beam", projectile_type = /obj/item/projectile/temp, charge_cost = 240), + list(mode_name="exothermic beam", projectile_type = /obj/item/projectile/temp/hot, charge_cost = 240), + ) + +/obj/item/weapon/gun/energy/temperature/mounted + self_recharge = 1 + use_external_power = 1 diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 9169df9f91..11758b9c8a 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -1,356 +1,356 @@ -#define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour -#define EJECT_CASINGS 1 //drop spent casings on the ground after firing -#define CYCLE_CASINGS 2 //experimental: cycle casings, like a revolver. Also works for multibarrelled guns - -/obj/item/weapon/gun/projectile - name = "gun" - desc = "A gun that fires bullets." - icon_state = "revolver" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - w_class = ITEMSIZE_NORMAL - matter = list(MAT_STEEL = 1000) - recoil = 1 - projectile_type = /obj/item/projectile/bullet/pistol/strong //Only used for chameleon guns - - var/caliber = ".357" //determines which casings will fit - var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled - var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine - var/obj/item/ammo_casing/chambered = null - - reload_time = 1 //Ballistics reload fast, but not instantly - - //For SINGLE_CASING or SPEEDLOADER guns - var/max_shells = 0 //the number of casings that will fit inside - var/ammo_type = null //the type of ammo that the gun comes preloaded with - var/list/loaded = list() //stored ammo - - //For MAGAZINE guns - var/magazine_type = null //the type of magazine that the gun comes preloaded with - var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine - var/allowed_magazines //determines list of which magazines will fit in the gun - var/auto_eject = 0 //if the magazine should automatically eject itself when empty. - var/auto_eject_sound = null - //TODO generalize ammo icon states for guns - //var/magazine_states = 0 - //var/list/icon_keys = list() //keys - //var/list/ammo_states = list() //values - - var/random_start_ammo = FALSE //randomize amount of starting ammo - -/obj/item/weapon/gun/projectile/New(loc, var/starts_loaded = 1) - ..() - if(starts_loaded) - if(ispath(ammo_type) && (load_method & (SINGLE_CASING|SPEEDLOADER))) - for(var/i in 1 to max_shells) - loaded += new ammo_type(src) - if(random_start_ammo) - loaded.Cut(0,rand(0,max_shells)) - if(ispath(magazine_type) && (load_method & MAGAZINE)) - ammo_magazine = new magazine_type(src) - allowed_magazines += /obj/item/ammo_magazine/smart - if(random_start_ammo) - var/ammo_cut = rand(0,ammo_magazine.max_ammo) - ammo_magazine.contents.Cut(0,ammo_cut) - ammo_magazine.stored_ammo.Cut(0,ammo_cut) - update_icon() - -/obj/item/weapon/gun/projectile/consume_next_projectile() - //get the next casing - if(loaded.len) - chambered = loaded[1] //load next casing. - if(handle_casings != HOLD_CASINGS) - loaded -= chambered - else if(ammo_magazine && ammo_magazine.stored_ammo.len) - chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] - if(handle_casings != HOLD_CASINGS) - ammo_magazine.stored_ammo -= chambered - - var/mob/living/M = loc // TGMC Ammo HUD - if(istype(M)) // TGMC Ammo HUD - M?.hud_used.update_ammo_hud(M, src) - - if (chambered) - return chambered.BB - return null - -/obj/item/weapon/gun/projectile/handle_post_fire() - ..() - if(chambered) - chambered.expend() - process_chambered() - -/obj/item/weapon/gun/projectile/handle_click_empty() - ..() - process_chambered() - -/obj/item/weapon/gun/projectile/proc/process_chambered() - if (!chambered) return - - // Aurora forensics port, gunpowder residue. - if(chambered.leaves_residue) - var/mob/living/carbon/human/H = loc - if(istype(H)) - if(!H.gloves) - H.gunshot_residue = chambered.caliber - else - var/obj/item/clothing/G = H.gloves - G.gunshot_residue = chambered.caliber - - switch(handle_casings) - if(EJECT_CASINGS) //eject casing onto ground. - if(chambered.caseless) - qdel(chambered) - return - else - chambered.loc = get_turf(src) - playsound(src, "casing", 50, 1) - if(CYCLE_CASINGS) //cycle the casing back to the end. - if(ammo_magazine) - ammo_magazine.stored_ammo += chambered - else - loaded += chambered - - if(handle_casings != HOLD_CASINGS) - chambered = null - - var/mob/living/M = loc // TGMC Ammo HUD - if(istype(M)) // TGMC Ammo HUD - M?.hud_used.update_ammo_hud(M, src) - - -//Attempts to load A into src, depending on the type of thing being loaded and the load_method -//Maybe this should be broken up into separate procs for each load method? -/obj/item/weapon/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user) - if(istype(A, /obj/item/ammo_magazine)) - var/obj/item/ammo_magazine/AM = A - if(!(load_method & AM.mag_type) || caliber != AM.caliber || allowed_magazines && !is_type_in_list(A, allowed_magazines)) - to_chat(user, "[AM] won't load into [src]!") - return - switch(AM.mag_type) - if(MAGAZINE) - if(ammo_magazine) - to_chat(user, "[src] already has a magazine loaded.") //already a magazine here - return - if(do_after(user, reload_time * AM.w_class)) - user.remove_from_mob(AM) - AM.loc = src - ammo_magazine = AM - user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].") - user.hud_used.update_ammo_hud(user, src) - playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) - if(SPEEDLOADER) - if(loaded.len >= max_shells) - to_chat(user, "[src] is full!") - return - var/count = 0 - for(var/obj/item/ammo_casing/C in AM.stored_ammo) - if(loaded.len >= max_shells) - break - if(C.caliber == caliber) - C.loc = src - loaded += C - AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way... - count++ - user.hud_used.update_ammo_hud(user, src) - if(do_after(user, reload_time * AM.w_class)) - if(count) - user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].") - user.hud_used.update_ammo_hud(user, src) - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - AM.update_icon() - else if(istype(A, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/C = A - if(!(load_method & SINGLE_CASING) || caliber != C.caliber) - return //incompatible - if(loaded.len >= max_shells) - to_chat(user, "[src] is full.") - return - - if(do_after(user, reload_time * C.w_class)) - user.remove_from_mob(C) - C.loc = src - loaded.Insert(1, C) //add to the head of the list - user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src].") - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - - else if(istype(A, /obj/item/weapon/storage)) - var/obj/item/weapon/storage/storage = A - if(!(load_method & SINGLE_CASING)) - return //incompatible - - to_chat(user, "You start loading \the [src].") - sleep(1 SECOND) - for(var/obj/item/ammo_casing/ammo in storage.contents) - if(caliber != ammo.caliber) - continue - - load_ammo(ammo, user) - - if(loaded.len >= max_shells) - to_chat(user, "[src] is full.") - break - sleep(1 SECOND) - - update_icon() - user.hud_used.update_ammo_hud(user, src) - -//attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled -/obj/item/weapon/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1) - if(ammo_magazine) - user.put_in_hands(ammo_magazine) - user.visible_message("[user] removes [ammo_magazine] from [src].", "You remove [ammo_magazine] from [src].") - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - ammo_magazine.update_icon() - ammo_magazine = null - user.hud_used.update_ammo_hud(user, src) - else if(loaded.len) - //presumably, if it can be speed-loaded, it can be speed-unloaded. - if(allow_dump && (load_method & SPEEDLOADER)) - var/count = 0 - var/turf/T = get_turf(user) - if(T) - for(var/obj/item/ammo_casing/C in loaded) - C.loc = T - count++ - loaded.Cut() - if(count) - user.visible_message("[user] unloads [src].", "You unload [count] round\s from [src].") - else if(load_method & SINGLE_CASING) - var/obj/item/ammo_casing/C = loaded[loaded.len] - loaded.len-- - user.put_in_hands(C) - user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - user.hud_used.update_ammo_hud(user, src) - else - to_chat(user, "[src] is empty.") - update_icon() - user.hud_used.update_ammo_hud(user, src) - -/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) - ..() - load_ammo(A, user) - -/obj/item/weapon/gun/projectile/attack_self(mob/user as mob) - if(firemodes.len > 1) - switch_firemodes(user) - else - unload_ammo(user) - -/obj/item/weapon/gun/projectile/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - unload_ammo(user, allow_dump=0) - else - return ..() - -/obj/item/weapon/gun/projectile/afterattack(atom/A, mob/living/user) - ..() - if(auto_eject && ammo_magazine && ammo_magazine.stored_ammo && !ammo_magazine.stored_ammo.len) - ammo_magazine.loc = get_turf(src.loc) - user.visible_message( - "[ammo_magazine] falls out and clatters on the floor!", - "[ammo_magazine] falls out and clatters on the floor!" - ) - if(auto_eject_sound) - playsound(src, auto_eject_sound, 40, 1) - ammo_magazine.update_icon() - ammo_magazine = null - update_icon() //make sure to do this after unsetting ammo_magazine - user.hud_used.update_ammo_hud(user, src) - -/obj/item/weapon/gun/projectile/examine(mob/user) - . = ..() - if(ammo_magazine) - . += "It has \a [ammo_magazine] loaded." - . += "It has [getAmmo()] round\s remaining." - -/obj/item/weapon/gun/projectile/proc/getAmmo() - var/bullets = 0 - if(loaded) - bullets += loaded.len - if(ammo_magazine && ammo_magazine.stored_ammo) - bullets += ammo_magazine.stored_ammo.len - if(chambered) - bullets += 1 - return bullets - -/* Unneeded -- so far. -//in case the weapon has firemodes and can't unload using attack_hand() -/obj/item/weapon/gun/projectile/verb/unload_gun() - set name = "Unload Ammo" - set category = "Object" - set src in usr - - if(usr.stat || usr.restrained()) return - - unload_ammo(usr) -*/ - -// TGMC Ammo HUD Insertion -/obj/item/weapon/gun/projectile/has_ammo_counter() - return TRUE - -/obj/item/weapon/gun/projectile/get_ammo_type() - if(load_method & MAGAZINE) - if(chambered) // Do we have an ammo casing chambered - var/obj/item/ammo_casing/A = chambered - var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(ammo_magazine && ammo_magazine.stored_ammo.len) // Do we have a mag, and have ammo in the mag, but nothing chambered? - var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] - var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(src.projectile_type) // Else, we're entirely empty, and irregardless of the mag we have loaded (as it's empty, or it would've passed the length check above), return the DEFAULT projectile_type on the gun, if set. - var/obj/item/projectile/P = src.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - else - return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case - else if(load_method & (SINGLE_CASING|SPEEDLOADER)) // Do we load with single casings OR speedloaders? - if(chambered) // Do we have an ammo casing loaded in the chamber? All casings still have a projectile_type var. - var/obj/item/ammo_casing/A = chambered - var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's projectile_type ammo hud state - else if(loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? - var/obj/item/ammo_casing/A = loaded[1] - var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition loaded in the gun's hud_state - else if(src.projectile_type) // Else, we're entirely empty, and have nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. - var/obj/item/projectile/P = src.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - else - return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case - else if(src.projectile_type) // Failsafe if we somehow don't pass the above. Return the DEFAULT projectile_type on the gun, if set. - var/obj/item/projectile/P = src.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) - else // Failsafe if we somehow fail all three methods - return list("unknown", "unknown") - -/obj/item/weapon/gun/projectile/get_ammo_count() - if(ammo_magazine) // Do we have a magazine loaded? - var/shots_left - if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? - shots_left++ - for(var/obj/item/ammo_casing/bullet in ammo_magazine.stored_ammo) - if(bullet.BB) - shots_left++ - - if(shots_left > 0) - return shots_left - else - return 0 // No ammo left or failsafe. - else if(loaded) // Do we use internal ammunition - var/shots_left - if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? - shots_left++ - for(var/obj/item/ammo_casing/bullet in loaded) - if(bullet.BB) // Only increment how many shots we have left if we're loaded. - shots_left++ - - if(shots_left > 0) - return shots_left - else - return 0 // No ammo left or failsafe. - else if(chambered) // If we don't have a magazine or internal ammunition loaded, but we have a casing in chamber, return the amount. - return chambered.BB ? 1 : 0 - else // Failsafe, or completely unloaded - return 0 +#define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour +#define EJECT_CASINGS 1 //drop spent casings on the ground after firing +#define CYCLE_CASINGS 2 //experimental: cycle casings, like a revolver. Also works for multibarrelled guns + +/obj/item/weapon/gun/projectile + name = "gun" + desc = "A gun that fires bullets." + icon_state = "revolver" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + w_class = ITEMSIZE_NORMAL + matter = list(MAT_STEEL = 1000) + recoil = 1 + projectile_type = /obj/item/projectile/bullet/pistol/strong //Only used for chameleon guns + + var/caliber = ".357" //determines which casings will fit + var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled + var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine + var/obj/item/ammo_casing/chambered = null + + reload_time = 1 //Ballistics reload fast, but not instantly + + //For SINGLE_CASING or SPEEDLOADER guns + var/max_shells = 0 //the number of casings that will fit inside + var/ammo_type = null //the type of ammo that the gun comes preloaded with + var/list/loaded = list() //stored ammo + + //For MAGAZINE guns + var/magazine_type = null //the type of magazine that the gun comes preloaded with + var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine + var/allowed_magazines //determines list of which magazines will fit in the gun + var/auto_eject = 0 //if the magazine should automatically eject itself when empty. + var/auto_eject_sound = null + //TODO generalize ammo icon states for guns + //var/magazine_states = 0 + //var/list/icon_keys = list() //keys + //var/list/ammo_states = list() //values + + var/random_start_ammo = FALSE //randomize amount of starting ammo + +/obj/item/weapon/gun/projectile/New(loc, var/starts_loaded = 1) + ..() + if(starts_loaded) + if(ispath(ammo_type) && (load_method & (SINGLE_CASING|SPEEDLOADER))) + for(var/i in 1 to max_shells) + loaded += new ammo_type(src) + if(random_start_ammo) + loaded.Cut(0,rand(0,max_shells)) + if(ispath(magazine_type) && (load_method & MAGAZINE)) + ammo_magazine = new magazine_type(src) + allowed_magazines += /obj/item/ammo_magazine/smart + if(random_start_ammo) + var/ammo_cut = rand(0,ammo_magazine.max_ammo) + ammo_magazine.contents.Cut(0,ammo_cut) + ammo_magazine.stored_ammo.Cut(0,ammo_cut) + update_icon() + +/obj/item/weapon/gun/projectile/consume_next_projectile() + //get the next casing + if(loaded.len) + chambered = loaded[1] //load next casing. + if(handle_casings != HOLD_CASINGS) + loaded -= chambered + else if(ammo_magazine && ammo_magazine.stored_ammo.len) + chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] + if(handle_casings != HOLD_CASINGS) + ammo_magazine.stored_ammo -= chambered + + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) + + if (chambered) + return chambered.BB + return null + +/obj/item/weapon/gun/projectile/handle_post_fire() + ..() + if(chambered) + chambered.expend() + process_chambered() + +/obj/item/weapon/gun/projectile/handle_click_empty() + ..() + process_chambered() + +/obj/item/weapon/gun/projectile/proc/process_chambered() + if (!chambered) return + + // Aurora forensics port, gunpowder residue. + if(chambered.leaves_residue) + var/mob/living/carbon/human/H = loc + if(istype(H)) + if(!H.gloves) + H.gunshot_residue = chambered.caliber + else + var/obj/item/clothing/G = H.gloves + G.gunshot_residue = chambered.caliber + + switch(handle_casings) + if(EJECT_CASINGS) //eject casing onto ground. + if(chambered.caseless) + qdel(chambered) + return + else + chambered.loc = get_turf(src) + playsound(src, "casing", 50, 1) + if(CYCLE_CASINGS) //cycle the casing back to the end. + if(ammo_magazine) + ammo_magazine.stored_ammo += chambered + else + loaded += chambered + + if(handle_casings != HOLD_CASINGS) + chambered = null + + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) + + +//Attempts to load A into src, depending on the type of thing being loaded and the load_method +//Maybe this should be broken up into separate procs for each load method? +/obj/item/weapon/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user) + if(istype(A, /obj/item/ammo_magazine)) + var/obj/item/ammo_magazine/AM = A + if(!(load_method & AM.mag_type) || caliber != AM.caliber || allowed_magazines && !is_type_in_list(A, allowed_magazines)) + to_chat(user, "[AM] won't load into [src]!") + return + switch(AM.mag_type) + if(MAGAZINE) + if(ammo_magazine) + to_chat(user, "[src] already has a magazine loaded.") //already a magazine here + return + if(do_after(user, reload_time * AM.w_class)) + user.remove_from_mob(AM) + AM.loc = src + ammo_magazine = AM + user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].") + user.hud_used.update_ammo_hud(user, src) + playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) + if(SPEEDLOADER) + if(loaded.len >= max_shells) + to_chat(user, "[src] is full!") + return + var/count = 0 + for(var/obj/item/ammo_casing/C in AM.stored_ammo) + if(loaded.len >= max_shells) + break + if(C.caliber == caliber) + C.loc = src + loaded += C + AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way... + count++ + user.hud_used.update_ammo_hud(user, src) + if(do_after(user, reload_time * AM.w_class)) + if(count) + user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].") + user.hud_used.update_ammo_hud(user, src) + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + AM.update_icon() + else if(istype(A, /obj/item/ammo_casing)) + var/obj/item/ammo_casing/C = A + if(!(load_method & SINGLE_CASING) || caliber != C.caliber) + return //incompatible + if(loaded.len >= max_shells) + to_chat(user, "[src] is full.") + return + + if(do_after(user, reload_time * C.w_class)) + user.remove_from_mob(C) + C.loc = src + loaded.Insert(1, C) //add to the head of the list + user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src].") + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + + else if(istype(A, /obj/item/weapon/storage)) + var/obj/item/weapon/storage/storage = A + if(!(load_method & SINGLE_CASING)) + return //incompatible + + to_chat(user, "You start loading \the [src].") + sleep(1 SECOND) + for(var/obj/item/ammo_casing/ammo in storage.contents) + if(caliber != ammo.caliber) + continue + + load_ammo(ammo, user) + + if(loaded.len >= max_shells) + to_chat(user, "[src] is full.") + break + sleep(1 SECOND) + + update_icon() + user.hud_used.update_ammo_hud(user, src) + +//attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled +/obj/item/weapon/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1) + if(ammo_magazine) + user.put_in_hands(ammo_magazine) + user.visible_message("[user] removes [ammo_magazine] from [src].", "You remove [ammo_magazine] from [src].") + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + ammo_magazine.update_icon() + ammo_magazine = null + user.hud_used.update_ammo_hud(user, src) + else if(loaded.len) + //presumably, if it can be speed-loaded, it can be speed-unloaded. + if(allow_dump && (load_method & SPEEDLOADER)) + var/count = 0 + var/turf/T = get_turf(user) + if(T) + for(var/obj/item/ammo_casing/C in loaded) + C.loc = T + count++ + loaded.Cut() + if(count) + user.visible_message("[user] unloads [src].", "You unload [count] round\s from [src].") + else if(load_method & SINGLE_CASING) + var/obj/item/ammo_casing/C = loaded[loaded.len] + loaded.len-- + user.put_in_hands(C) + user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + user.hud_used.update_ammo_hud(user, src) + else + to_chat(user, "[src] is empty.") + update_icon() + user.hud_used.update_ammo_hud(user, src) + +/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) + ..() + load_ammo(A, user) + +/obj/item/weapon/gun/projectile/attack_self(mob/user as mob) + if(firemodes.len > 1) + switch_firemodes(user) + else + unload_ammo(user) + +/obj/item/weapon/gun/projectile/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) + unload_ammo(user, allow_dump=0) + else + return ..() + +/obj/item/weapon/gun/projectile/afterattack(atom/A, mob/living/user) + ..() + if(auto_eject && ammo_magazine && ammo_magazine.stored_ammo && !ammo_magazine.stored_ammo.len) + ammo_magazine.loc = get_turf(src.loc) + user.visible_message( + "[ammo_magazine] falls out and clatters on the floor!", + "[ammo_magazine] falls out and clatters on the floor!" + ) + if(auto_eject_sound) + playsound(src, auto_eject_sound, 40, 1) + ammo_magazine.update_icon() + ammo_magazine = null + update_icon() //make sure to do this after unsetting ammo_magazine + user.hud_used.update_ammo_hud(user, src) + +/obj/item/weapon/gun/projectile/examine(mob/user) + . = ..() + if(ammo_magazine) + . += "It has \a [ammo_magazine] loaded." + . += "It has [getAmmo()] round\s remaining." + +/obj/item/weapon/gun/projectile/proc/getAmmo() + var/bullets = 0 + if(loaded) + bullets += loaded.len + if(ammo_magazine && ammo_magazine.stored_ammo) + bullets += ammo_magazine.stored_ammo.len + if(chambered) + bullets += 1 + return bullets + +/* Unneeded -- so far. +//in case the weapon has firemodes and can't unload using attack_hand() +/obj/item/weapon/gun/projectile/verb/unload_gun() + set name = "Unload Ammo" + set category = "Object" + set src in usr + + if(usr.stat || usr.restrained()) return + + unload_ammo(usr) +*/ + +// TGMC Ammo HUD Insertion +/obj/item/weapon/gun/projectile/has_ammo_counter() + return TRUE + +/obj/item/weapon/gun/projectile/get_ammo_type() + if(load_method & MAGAZINE) + if(chambered) // Do we have an ammo casing chambered + var/obj/item/ammo_casing/A = chambered + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else if(ammo_magazine && ammo_magazine.stored_ammo.len) // Do we have a mag, and have ammo in the mag, but nothing chambered? + var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else if(src.projectile_type) // Else, we're entirely empty, and irregardless of the mag we have loaded (as it's empty, or it would've passed the length check above), return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else + return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case + else if(load_method & (SINGLE_CASING|SPEEDLOADER)) // Do we load with single casings OR speedloaders? + if(chambered) // Do we have an ammo casing loaded in the chamber? All casings still have a projectile_type var. + var/obj/item/ammo_casing/A = chambered + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's projectile_type ammo hud state + else if(loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? + var/obj/item/ammo_casing/A = loaded[1] + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition loaded in the gun's hud_state + else if(src.projectile_type) // Else, we're entirely empty, and have nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else + return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case + else if(src.projectile_type) // Failsafe if we somehow don't pass the above. Return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else // Failsafe if we somehow fail all three methods + return list("unknown", "unknown") + +/obj/item/weapon/gun/projectile/get_ammo_count() + if(ammo_magazine) // Do we have a magazine loaded? + var/shots_left + if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? + shots_left++ + for(var/obj/item/ammo_casing/bullet in ammo_magazine.stored_ammo) + if(bullet.BB) + shots_left++ + + if(shots_left > 0) + return shots_left + else + return 0 // No ammo left or failsafe. + else if(loaded) // Do we use internal ammunition + var/shots_left + if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? + shots_left++ + for(var/obj/item/ammo_casing/bullet in loaded) + if(bullet.BB) // Only increment how many shots we have left if we're loaded. + shots_left++ + + if(shots_left > 0) + return shots_left + else + return 0 // No ammo left or failsafe. + else if(chambered) // If we don't have a magazine or internal ammunition loaded, but we have a casing in chamber, return the amount. + return chambered.BB ? 1 : 0 + else // Failsafe, or completely unloaded + return 0 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index ba2950fdd4..970a6fca97 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -1,571 +1,571 @@ -/* - * Daka SMG (Code Base) - */ -/obj/item/weapon/gun/projectile/automatic //This should never be spawned in, it is just here because of code necessities. - name = "daka SMG" - desc = "A small SMG. You really shouldn't be able to get this gun. Uses 9mm rounds." - icon_state = "c05r" //Used because it's not used anywhere else - load_method = SPEEDLOADER - ammo_type = /obj/item/ammo_casing/a9mm - projectile_type = /obj/item/projectile/bullet/pistol - -//Burst is the number of bullets fired; Fire delay is the time you have to wait to shoot the gun again, Move delay is the same but for moving after shooting. . -//Burst accuracy is the accuracy of each bullet fired in the burst. Dispersion is how much the bullets will 'spread' away from where you aimed. - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))) - -/* - * Advanced SMG - */ - -/obj/item/weapon/gun/projectile/automatic/advanced_smg - name = "advanced SMG" - desc = "An advanced submachine gun with a reflective laser optic that makes burst fire less inaccurate than other SMGs. Uses 9mm rounds." - icon = 'icons/obj/gun.dmi' - icon_state = "advanced_smg-e" - w_class = ITEMSIZE_NORMAL - load_method = MAGAZINE - caliber = "9mm" - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) - slot_flags = SLOT_BELT - magazine_type = null // R&D builds this. Starts unloaded. - allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced, /obj/item/ammo_magazine/m9mm) - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/advanced_smg/update_icon() - ..() - if(ammo_magazine) - icon_state = "advanced_smg" - else - icon_state = "advanced_smg-e" - -/obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded - magazine_type = /obj/item/ammo_magazine/m9mmAdvanced - -/* - * C-20r - */ - - /* CHOMPedit remove: Moved to automatic_ch.dm. * - -/obj/item/weapon/gun/projectile/automatic/c20r - name = "submachine gun" - desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. It has 'Scarborough Arms - Per falcis, per pravitas', inscribed on the stock. Uses 10mm rounds." - description_fluff = "The C-20r is produced by Scarborough Arms, a specialist high-end weapons manufacturer based out of Titan, Sol. Scarborough has resisted numerous efforts by Trans-Stellars to acquire the brand since its founding in 2511, and has gained a dedicated following among a certain flavor of private operative." - icon = 'icons/obj/64x32guns_ch.dmi' //Chomp Edit - icon_expected_width = 64 //Chomp EDIT - icon_state = "c20r" - item_state = "c20r" - w_class = ITEMSIZE_NORMAL - force = 10 - caliber = "10mm" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) - slot_flags = SLOT_BELT|SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m10mm - allowed_magazines = list(/obj/item/ammo_magazine/m10mm) - projectile_type = /obj/item/projectile/bullet/pistol/medium - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - -/obj/item/weapon/gun/projectile/automatic/c20r/rubber - magazine_type = /obj/item/ammo_magazine/m10mm/rubber - -/obj/item/weapon/gun/projectile/automatic/c20r/empty - magazine_type = null - -/obj/item/weapon/gun/projectile/automatic/c20r/update_icon() - ..() - if(ammo_magazine) - icon_state = "c20r-[round(ammo_magazine.stored_ammo.len,4)]" - else - icon_state = "c20r" - return - - * CHOMPedit remove: Moved to automatic_ch.dm. */ - -/* - * Assault Carbine (STS-35) - */ -/obj/item/weapon/gun/projectile/automatic/sts35 - name = "assault rifle" - desc = "The rugged Jindal Arms STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds." - description_fluff = "A subsidiary of Hephaestus Industries, While Jindal’s rugged, affordable weapons intended for the colonial sector are a major export of Tau Ceti, \ - the Jindal Arms company is perhaps best known for its liberal sale of production licenses to just about any fledgling rimworld venture who asks, and has cash to spare. \ - While Jindal’s 'authentic' Binma-built weapons are renowned for their reliability, the same cannot be said for the hundreds of low-grade (But technically legal) \ - copies circulating the squalid habitats and smoke-filled junk ships of the frontier." - icon_state = "arifle" - item_state = "arifle" - wielded_item_state = "arifle-wielded" - item_state = null - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - caliber = "5.45mm" - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m545 - allowed_magazines = list(/obj/item/ammo_magazine/m545) - projectile_type = /obj/item/projectile/bullet/rifle/a545 - - one_handed_penalty = 30 - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands) - ..() - if(istype(ammo_magazine,/obj/item/ammo_magazine/m545/small)) - icon_state = "arifle-small" // If using the small magazines, use the small magazine sprite. - else - icon_state = (ammo_magazine)? "arifle" : "arifle-empty" - if(!ignore_inhands) update_held_icon() - -/* - * X-9mm (PDW) - */ -/obj/item/weapon/gun/projectile/automatic/pdw - name = "personal defense weapon" - desc = "The X-9mm is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, \ - but never caught on with NanoTrasen. Uses 9mm rounds." - icon_state = "pdw" - item_state = "c20r" - w_class = ITEMSIZE_NORMAL - caliber = "9mm" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - slot_flags = SLOT_BELT - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mmAdvanced - allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced) - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands) - ..() - if(ammo_magazine) - icon_state = "pdw" - else - icon_state = "pdw-e" - return - -/* - * Machine Pistol (WT550) - */ -/obj/item/weapon/gun/projectile/automatic/wt550 - name = "machine pistol" - desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds." - icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT - icon_expected_width = 64 //Chomp EDIT - icon_state = "wt550" - item_state = "wt550" - w_class = ITEMSIZE_NORMAL - caliber = "9mm" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - slot_flags = SLOT_BELT - ammo_type = "/obj/item/ammo_casing/a9mmr" - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mmt/rubber - allowed_magazines = list(/obj/item/ammo_magazine/m9mmt) - projectile_type = /obj/item/projectile/bullet/pistol/medium - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/automatic/wt550/update_icon() - ..() - if(ammo_magazine) - icon_state = "wt550-[round(ammo_magazine.stored_ammo.len,4)]" - else - icon_state = "wt550" - return - -/* - * Battle Rifle (Z8) - */ -/obj/item/weapon/gun/projectile/automatic/z8 - name = "battle rifle" - desc = "The Z8 Bulldog is an older model battle rifle, made by the now defunct Zendai Foundries. Makes you feel like an old-school badass when you hold it, \ - even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher." - description_fluff = "Zendai Foundries was a well-respected mid-sized arms company that operated until 2508, when it was acquired by Hephaestus Industries. \ - Plans to integrate the brand into wider corporate operations were brought to an abrupt halt by the SolGov-Hegemony war, and the company was left by the wayside. \ - Hephaestus still produces replacement parts for many of Zendai's most popular weapons, including the Z8 Bulldog, and a great detail remain in service." - icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT - icon_expected_width = 64 //Chomp EDIT - icon_state = "carbine" // This isn't a carbine. :T - item_state = "z8carbine" - wielded_item_state = "z8bulldog-wielded" - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - caliber = "7.62mm" - origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m762 - allowed_magazines = list(/obj/item/ammo_magazine/m762) - projectile_type = /obj/item/projectile/bullet/rifle/a762 - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - - one_handed_penalty = 60 - - burst_delay = 4 - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, use_launcher=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)), - list(mode_name="fire grenades", burst=null, fire_delay=null, move_delay=null, use_launcher=1, burst_accuracy=null, dispersion=null) - ) - - var/use_launcher = 0 - var/obj/item/weapon/gun/launcher/grenade/underslung/launcher - -/obj/item/weapon/gun/projectile/automatic/z8/New() - ..() - launcher = new(src) - -/obj/item/weapon/gun/projectile/automatic/z8/attackby(obj/item/I, mob/user) - if((istype(I, /obj/item/weapon/grenade))) - launcher.load(I, user) - else - ..() - -/obj/item/weapon/gun/projectile/automatic/z8/attack_hand(mob/user) - if(user.get_inactive_hand() == src && use_launcher) - launcher.unload(user) - else - ..() - -/obj/item/weapon/gun/projectile/automatic/z8/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) - if(use_launcher) - launcher.Fire(target, user, params, pointblank, reflex) - if(!launcher.chambered) - switch_firemodes(user) //switch back automatically - else - ..() - -/obj/item/weapon/gun/projectile/automatic/z8/update_icon(var/ignore_inhands) - ..() - if(ammo_magazine) - icon_state = "carbine-[round(ammo_magazine.stored_ammo.len, 5)]" //CHOMPedit - else - icon_state = "carbine" - if(!ignore_inhands) update_held_icon() - return - -/obj/item/weapon/gun/projectile/automatic/z8/examine(mob/user) - . = ..() - if(launcher.chambered) - . += "\The [launcher] has \a [launcher.chambered] loaded." - else - . += "\The [launcher] is empty." - -/obj/item/weapon/gun/projectile/automatic/z8/empty - magazine_type = null - -/* - * LMG (L6 SAW) - */ -/obj/item/weapon/gun/projectile/automatic/l6_saw - name = "light machine gun" - desc = "A rather sturdily made L6 SAW with a reassuringly ergonomic pistol grip. 'Hephaestus Industries' is engraved on the receiver. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles." - description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by professional armed forces across human space." - icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT - icon_expected_width = 64 //Chomp EDIT - icon_state = "l6closed150" //chompEDIT - item_state = "l6closed" - wielded_item_state = "genericLMG-wielded" - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - slot_flags = 0 - max_shells = 50 - caliber = "5.45mm" - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m545saw - allowed_magazines = list(/obj/item/ammo_magazine/m545saw, /obj/item/ammo_magazine/m545) - projectile_type = /obj/item/projectile/bullet/rifle/a545 - - one_handed_penalty = 90 - - var/cover_open = 0 - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), - list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) - ) - -/obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user) - if(cover_open) - to_chat(user, "[src]'s cover is open! Close it before firing!") - return 0 - return ..() - -/obj/item/weapon/gun/projectile/automatic/l6_saw/proc/toggle_cover(mob/user) - cover_open = !cover_open - to_chat(user, "You [cover_open ? "open" : "close"] [src]'s cover.") - update_icon() - update_held_icon() - -/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob) - if(cover_open) - toggle_cover(user) //close the cover - else - return ..() //once closed, behave like normal - -/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob) - if(!cover_open && user.get_inactive_hand() == src) - toggle_cover(user) //open the cover - else - return ..() //once open, behave like normal - -/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon() - if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)) - icon_state = "l6[cover_open ? "open" : "closed"]mag" - item_state = icon_state - else - icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 50) : "-empty"]" //CHOMPedit - item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]" - update_held_icon() - -/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user) - if(!cover_open) - to_chat(user, "You need to open the cover to load [src].") - return - ..() - -/obj/item/weapon/gun/projectile/automatic/l6_saw/unload_ammo(mob/user, var/allow_dump=1) - if(!cover_open) - to_chat(user, "You need to open the cover to unload [src].") - return - ..() - -/* - * Automatic Shotgun (AS-24) - */ -/obj/item/weapon/gun/projectile/automatic/as24 - name = "automatic shotgun" - desc = "The AS-24 is a rugged looking automatic shotgun produced exclusively for the SCG Fleet by Hephaestus \ - Industries. For very obvious reasons, it's illegal to own in many juristictions. Uses 12g rounds." - description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' \ - branding for its military-grade equipment used by professional armed forces across human space." - icon_state = "ashot" - item_state = "ashot" - wielded_item_state = "ashot-wielded" - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - caliber = "12g" - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m12gdrum - allowed_magazines = list(/obj/item/ammo_magazine/m12gdrum) - projectile_type = /obj/item/projectile/bullet/shotgun - - one_handed_penalty = 60 - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0), - list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.0, 0.6, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/as24/update_icon() - ..() - if(ammo_magazine) - icon_state = "ashot" - else - icon_state = "ashot-empty" - return - -/* - * Uzi - */ -/obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "micro-smg" - desc = "The infamous ProTek Spitz is a lightweight, compact, fast firing machine pistol. Cheaply produced under the ProTek consumer brand, the Spitz seems to find its way into every corner of the galaxy. Uses .45 rounds." - description_fluff = "Budget-grade weapons for the budget-grade consumer! Hephaestus’ low-end brand of cheaply made, low-maintenance personal defense weapons for those who just need a handgun with absolutely no frills. \ - Early ProTek weapons were notoriously unsafe and unreliable, though more recent designs have improved somewhat - they still aren’t very good. \ - Though sold for a pittance, the profit margin is too irresistible for Hephaestus to discontinue the brand." - icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT - icon_expected_width = 64 //Chomp EDIT - icon_state = "mini-uzi" //Chomp EDIT - uzi --> mini-uzi - w_class = ITEMSIZE_NORMAL - load_method = MAGAZINE - caliber = ".45" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - magazine_type = /obj/item/ammo_magazine/m45uzi - allowed_magazines = list(/obj/item/ammo_magazine/m45uzi) - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - var/is64x32 = TRUE - var/is_picked_up = FALSE - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0), - list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0)) - ) - -/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon() - ..() - if(ammo_magazine) - icon_state = "mini-uzi" - else - icon_state = "mini-uzi-empty" - -// CHOMPEdit: Uzi tilting -/obj/item/weapon/gun/projectile/automatic/mini_uzi/Initialize() - . = ..() - if(is64x32) - update_transform() - -/obj/item/weapon/gun/projectile/automatic/mini_uzi/equipped() - . = ..() - is_picked_up = TRUE - update_transform() - -/obj/item/weapon/gun/projectile/automatic/mini_uzi/pickup() - . = ..() - is_picked_up = TRUE - update_transform() - -/obj/item/weapon/gun/projectile/automatic/mini_uzi/dropped() - . = ..() - is_picked_up = FALSE - update_transform() - -/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_transform() - . = ..() - if(is64x32) - if(is_picked_up) - transform = transform.Turn(-45) - transform = transform.Translate(-16,0) -// CHOMPEdit end: Uzi tilting - -/* CHOMPEDIT Commented out, moved to automatic_ch.dm * -/obj/item/weapon/gun/projectile/automatic/p90 - name = "personal defense weapon" - desc = "The H90K is a compact, large capacity submachine gun produced by MarsTech. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds." - description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon_state = "p90smg" - item_state = "p90" - w_class = ITEMSIZE_NORMAL - caliber = "9mm" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - slot_flags = SLOT_BELT // ToDo: Belt sprite. - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mmp90 - allowed_magazines = list(/obj/item/ammo_magazine/m9mmp90, /obj/item/ammo_magazine/m9mmt) // ToDo: New sprite for the different mag. - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) - ) - -/obj/item/weapon/gun/projectile/automatic/p90/update_icon() - icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]" -* CHOMPEDIT Commented out, moved to automatic_ch.dm */ - -/* - * Tommy Gun - */ -/obj/item/weapon/gun/projectile/automatic/tommygun - name = "\improper Tommy Gun" - desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds." - description_fluff = "Cybersun Industries is a minor arms manufacturer specialising in replica firearms from eras past. Though they offer a wide selection of made-to-order models, their products are seen as little more than novelty items to most serious collectors." - icon_state = "tommygun" - item_state = "stg44" - w_class = ITEMSIZE_NORMAL - caliber = ".45" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - slot_flags = SLOT_BELT // ToDo: Belt sprite. - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m45tommy - allowed_magazines = list(/obj/item/ammo_magazine/m45tommy, /obj/item/ammo_magazine/m45tommydrum) - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) - ) - -/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon() - if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommy)) - icon_state = "tommygun-mag" - else if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommydrum)) - icon_state = "tommygun-drum" - else - icon_state = "tommygun-empty" - update_held_icon() - -/* - * Bullpup Rifle - */ -/obj/item/weapon/gun/projectile/automatic/bullpup // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start. - name = "bullpup rifle" - desc = "The bullpup configured GP3000 is a battle rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. Uses 7.62mm rounds." - icon_state = "bullpup-small" - item_state = "bullpup" - wielded_item_state = "sexyrifle-wielded" //Placeholder, this is a bullpup at least - w_class = ITEMSIZE_LARGE - force = 10 - caliber = "7.62mm" - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m762 - allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762/ext) - projectile_type = /obj/item/projectile/bullet/rifle/a762 - - one_handed_penalty = 45 - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/bullpup/update_icon(var/ignore_inhands) - ..() - if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)) - icon_state = "bullpup-small" - else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762/ext)) - icon_state = "bullpup" - else - item_state = "bullpup-empty" - if(!ignore_inhands) - update_held_icon() - -/* - * Combat SMG (PP3 Ten) - */ -/obj/item/weapon/gun/projectile/automatic/combatsmg - name = "\improper PP3 Ten" - desc = "The Bishamonten PP3 Ten personal defense weapon is a rare design much sought after - though more for its looks than its functionality. Uses 9mm rounds." - description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \ - Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \ - Bishamonten weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard firing mechanisms." - icon_state = "combatsmg" - w_class = ITEMSIZE_NORMAL - load_method = MAGAZINE - caliber = "9mm" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4) - magazine_type = /obj/item/ammo_magazine/m9mmt - allowed_magazines = list(/obj/item/ammo_magazine/m9mmt) - - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0), - list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) - ) - -/obj/item/weapon/gun/projectile/automatic/combatsmg/update_icon() - ..() - if(ammo_magazine) - icon_state = "combatsmg" - else - icon_state = "combatsmg-empty" +/* + * Daka SMG (Code Base) + */ +/obj/item/weapon/gun/projectile/automatic //This should never be spawned in, it is just here because of code necessities. + name = "daka SMG" + desc = "A small SMG. You really shouldn't be able to get this gun. Uses 9mm rounds." + icon_state = "c05r" //Used because it's not used anywhere else + load_method = SPEEDLOADER + ammo_type = /obj/item/ammo_casing/a9mm + projectile_type = /obj/item/projectile/bullet/pistol + +//Burst is the number of bullets fired; Fire delay is the time you have to wait to shoot the gun again, Move delay is the same but for moving after shooting. . +//Burst accuracy is the accuracy of each bullet fired in the burst. Dispersion is how much the bullets will 'spread' away from where you aimed. + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))) + +/* + * Advanced SMG + */ + +/obj/item/weapon/gun/projectile/automatic/advanced_smg + name = "advanced SMG" + desc = "An advanced submachine gun with a reflective laser optic that makes burst fire less inaccurate than other SMGs. Uses 9mm rounds." + icon = 'icons/obj/gun.dmi' + icon_state = "advanced_smg-e" + w_class = ITEMSIZE_NORMAL + load_method = MAGAZINE + caliber = "9mm" + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) + slot_flags = SLOT_BELT + magazine_type = null // R&D builds this. Starts unloaded. + allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced, /obj/item/ammo_magazine/m9mm) + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/advanced_smg/update_icon() + ..() + if(ammo_magazine) + icon_state = "advanced_smg" + else + icon_state = "advanced_smg-e" + +/obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded + magazine_type = /obj/item/ammo_magazine/m9mmAdvanced + +/* + * C-20r + */ + + /* CHOMPedit remove: Moved to automatic_ch.dm. * + +/obj/item/weapon/gun/projectile/automatic/c20r + name = "submachine gun" + desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. It has 'Scarborough Arms - Per falcis, per pravitas', inscribed on the stock. Uses 10mm rounds." + description_fluff = "The C-20r is produced by Scarborough Arms, a specialist high-end weapons manufacturer based out of Titan, Sol. Scarborough has resisted numerous efforts by Trans-Stellars to acquire the brand since its founding in 2511, and has gained a dedicated following among a certain flavor of private operative." + icon = 'icons/obj/64x32guns_ch.dmi' //Chomp Edit + icon_expected_width = 64 //Chomp EDIT + icon_state = "c20r" + item_state = "c20r" + w_class = ITEMSIZE_NORMAL + force = 10 + caliber = "10mm" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) + slot_flags = SLOT_BELT|SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m10mm + allowed_magazines = list(/obj/item/ammo_magazine/m10mm) + projectile_type = /obj/item/projectile/bullet/pistol/medium + auto_eject = 1 + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + +/obj/item/weapon/gun/projectile/automatic/c20r/rubber + magazine_type = /obj/item/ammo_magazine/m10mm/rubber + +/obj/item/weapon/gun/projectile/automatic/c20r/empty + magazine_type = null + +/obj/item/weapon/gun/projectile/automatic/c20r/update_icon() + ..() + if(ammo_magazine) + icon_state = "c20r-[round(ammo_magazine.stored_ammo.len,4)]" + else + icon_state = "c20r" + return + + * CHOMPedit remove: Moved to automatic_ch.dm. */ + +/* + * Assault Carbine (STS-35) + */ +/obj/item/weapon/gun/projectile/automatic/sts35 + name = "assault rifle" + desc = "The rugged Jindal Arms STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds." + description_fluff = "A subsidiary of Hephaestus Industries, While Jindal’s rugged, affordable weapons intended for the colonial sector are a major export of Tau Ceti, \ + the Jindal Arms company is perhaps best known for its liberal sale of production licenses to just about any fledgling rimworld venture who asks, and has cash to spare. \ + While Jindal’s 'authentic' Binma-built weapons are renowned for their reliability, the same cannot be said for the hundreds of low-grade (But technically legal) \ + copies circulating the squalid habitats and smoke-filled junk ships of the frontier." + icon_state = "arifle" + item_state = "arifle" + wielded_item_state = "arifle-wielded" + item_state = null + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + caliber = "5.45mm" + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m545 + allowed_magazines = list(/obj/item/ammo_magazine/m545) + projectile_type = /obj/item/projectile/bullet/rifle/a545 + + one_handed_penalty = 30 + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands) + ..() + if(istype(ammo_magazine,/obj/item/ammo_magazine/m545/small)) + icon_state = "arifle-small" // If using the small magazines, use the small magazine sprite. + else + icon_state = (ammo_magazine)? "arifle" : "arifle-empty" + if(!ignore_inhands) update_held_icon() + +/* + * X-9mm (PDW) + */ +/obj/item/weapon/gun/projectile/automatic/pdw + name = "personal defense weapon" + desc = "The X-9mm is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, \ + but never caught on with NanoTrasen. Uses 9mm rounds." + icon_state = "pdw" + item_state = "c20r" + w_class = ITEMSIZE_NORMAL + caliber = "9mm" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) + slot_flags = SLOT_BELT + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mmAdvanced + allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced) + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands) + ..() + if(ammo_magazine) + icon_state = "pdw" + else + icon_state = "pdw-e" + return + +/* + * Machine Pistol (WT550) + */ +/obj/item/weapon/gun/projectile/automatic/wt550 + name = "machine pistol" + desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds." + icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT + icon_expected_width = 64 //Chomp EDIT + icon_state = "wt550" + item_state = "wt550" + w_class = ITEMSIZE_NORMAL + caliber = "9mm" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) + slot_flags = SLOT_BELT + ammo_type = "/obj/item/ammo_casing/a9mmr" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mmt/rubber + allowed_magazines = list(/obj/item/ammo_magazine/m9mmt) + projectile_type = /obj/item/projectile/bullet/pistol/medium + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/automatic/wt550/update_icon() + ..() + if(ammo_magazine) + icon_state = "wt550-[round(ammo_magazine.stored_ammo.len,4)]" + else + icon_state = "wt550" + return + +/* + * Battle Rifle (Z8) + */ +/obj/item/weapon/gun/projectile/automatic/z8 + name = "battle rifle" + desc = "The Z8 Bulldog is an older model battle rifle, made by the now defunct Zendai Foundries. Makes you feel like an old-school badass when you hold it, \ + even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher." + description_fluff = "Zendai Foundries was a well-respected mid-sized arms company that operated until 2508, when it was acquired by Hephaestus Industries. \ + Plans to integrate the brand into wider corporate operations were brought to an abrupt halt by the SolGov-Hegemony war, and the company was left by the wayside. \ + Hephaestus still produces replacement parts for many of Zendai's most popular weapons, including the Z8 Bulldog, and a great detail remain in service." + icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT + icon_expected_width = 64 //Chomp EDIT + icon_state = "carbine" // This isn't a carbine. :T + item_state = "z8carbine" + wielded_item_state = "z8bulldog-wielded" + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + caliber = "7.62mm" + origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m762 + allowed_magazines = list(/obj/item/ammo_magazine/m762) + projectile_type = /obj/item/projectile/bullet/rifle/a762 + auto_eject = 1 + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + + one_handed_penalty = 60 + + burst_delay = 4 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, use_launcher=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)), + list(mode_name="fire grenades", burst=null, fire_delay=null, move_delay=null, use_launcher=1, burst_accuracy=null, dispersion=null) + ) + + var/use_launcher = 0 + var/obj/item/weapon/gun/launcher/grenade/underslung/launcher + +/obj/item/weapon/gun/projectile/automatic/z8/New() + ..() + launcher = new(src) + +/obj/item/weapon/gun/projectile/automatic/z8/attackby(obj/item/I, mob/user) + if((istype(I, /obj/item/weapon/grenade))) + launcher.load(I, user) + else + ..() + +/obj/item/weapon/gun/projectile/automatic/z8/attack_hand(mob/user) + if(user.get_inactive_hand() == src && use_launcher) + launcher.unload(user) + else + ..() + +/obj/item/weapon/gun/projectile/automatic/z8/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) + if(use_launcher) + launcher.Fire(target, user, params, pointblank, reflex) + if(!launcher.chambered) + switch_firemodes(user) //switch back automatically + else + ..() + +/obj/item/weapon/gun/projectile/automatic/z8/update_icon(var/ignore_inhands) + ..() + if(ammo_magazine) + icon_state = "carbine-[round(ammo_magazine.stored_ammo.len, 5)]" //CHOMPedit + else + icon_state = "carbine" + if(!ignore_inhands) update_held_icon() + return + +/obj/item/weapon/gun/projectile/automatic/z8/examine(mob/user) + . = ..() + if(launcher.chambered) + . += "\The [launcher] has \a [launcher.chambered] loaded." + else + . += "\The [launcher] is empty." + +/obj/item/weapon/gun/projectile/automatic/z8/empty + magazine_type = null + +/* + * LMG (L6 SAW) + */ +/obj/item/weapon/gun/projectile/automatic/l6_saw + name = "light machine gun" + desc = "A rather sturdily made L6 SAW with a reassuringly ergonomic pistol grip. 'Hephaestus Industries' is engraved on the receiver. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles." + description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by professional armed forces across human space." + icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT + icon_expected_width = 64 //Chomp EDIT + icon_state = "l6closed150" //chompEDIT + item_state = "l6closed" + wielded_item_state = "genericLMG-wielded" + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + slot_flags = 0 + max_shells = 50 + caliber = "5.45mm" + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m545saw + allowed_magazines = list(/obj/item/ammo_magazine/m545saw, /obj/item/ammo_magazine/m545) + projectile_type = /obj/item/projectile/bullet/rifle/a545 + + one_handed_penalty = 90 + + var/cover_open = 0 + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) + ) + +/obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user) + if(cover_open) + to_chat(user, "[src]'s cover is open! Close it before firing!") + return 0 + return ..() + +/obj/item/weapon/gun/projectile/automatic/l6_saw/proc/toggle_cover(mob/user) + cover_open = !cover_open + to_chat(user, "You [cover_open ? "open" : "close"] [src]'s cover.") + update_icon() + update_held_icon() + +/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob) + if(cover_open) + toggle_cover(user) //close the cover + else + return ..() //once closed, behave like normal + +/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob) + if(!cover_open && user.get_inactive_hand() == src) + toggle_cover(user) //open the cover + else + return ..() //once open, behave like normal + +/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon() + if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)) + icon_state = "l6[cover_open ? "open" : "closed"]mag" + item_state = icon_state + else + icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 50) : "-empty"]" //CHOMPedit + item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]" + update_held_icon() + +/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user) + if(!cover_open) + to_chat(user, "You need to open the cover to load [src].") + return + ..() + +/obj/item/weapon/gun/projectile/automatic/l6_saw/unload_ammo(mob/user, var/allow_dump=1) + if(!cover_open) + to_chat(user, "You need to open the cover to unload [src].") + return + ..() + +/* + * Automatic Shotgun (AS-24) + */ +/obj/item/weapon/gun/projectile/automatic/as24 + name = "automatic shotgun" + desc = "The AS-24 is a rugged looking automatic shotgun produced exclusively for the SCG Fleet by Hephaestus \ + Industries. For very obvious reasons, it's illegal to own in many juristictions. Uses 12g rounds." + description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' \ + branding for its military-grade equipment used by professional armed forces across human space." + icon_state = "ashot" + item_state = "ashot" + wielded_item_state = "ashot-wielded" + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + caliber = "12g" + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m12gdrum + allowed_magazines = list(/obj/item/ammo_magazine/m12gdrum) + projectile_type = /obj/item/projectile/bullet/shotgun + + one_handed_penalty = 60 + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0), + list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.0, 0.6, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/as24/update_icon() + ..() + if(ammo_magazine) + icon_state = "ashot" + else + icon_state = "ashot-empty" + return + +/* + * Uzi + */ +/obj/item/weapon/gun/projectile/automatic/mini_uzi + name = "micro-smg" + desc = "The infamous ProTek Spitz is a lightweight, compact, fast firing machine pistol. Cheaply produced under the ProTek consumer brand, the Spitz seems to find its way into every corner of the galaxy. Uses .45 rounds." + description_fluff = "Budget-grade weapons for the budget-grade consumer! Hephaestus’ low-end brand of cheaply made, low-maintenance personal defense weapons for those who just need a handgun with absolutely no frills. \ + Early ProTek weapons were notoriously unsafe and unreliable, though more recent designs have improved somewhat - they still aren’t very good. \ + Though sold for a pittance, the profit margin is too irresistible for Hephaestus to discontinue the brand." + icon = 'icons/obj/64x32guns_ch.dmi' //Chomp EDIT + icon_expected_width = 64 //Chomp EDIT + icon_state = "mini-uzi" //Chomp EDIT - uzi --> mini-uzi + w_class = ITEMSIZE_NORMAL + load_method = MAGAZINE + caliber = ".45" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + magazine_type = /obj/item/ammo_magazine/m45uzi + allowed_magazines = list(/obj/item/ammo_magazine/m45uzi) + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + var/is64x32 = TRUE + var/is_picked_up = FALSE + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0), + list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0)) + ) + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon() + ..() + if(ammo_magazine) + icon_state = "mini-uzi" + else + icon_state = "mini-uzi-empty" + +// CHOMPEdit: Uzi tilting +/obj/item/weapon/gun/projectile/automatic/mini_uzi/Initialize() + . = ..() + if(is64x32) + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/equipped() + . = ..() + is_picked_up = TRUE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/pickup() + . = ..() + is_picked_up = TRUE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/dropped() + . = ..() + is_picked_up = FALSE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_transform() + . = ..() + if(is64x32) + if(is_picked_up) + transform = transform.Turn(-45) + transform = transform.Translate(-16,0) +// CHOMPEdit end: Uzi tilting + +/* CHOMPEDIT Commented out, moved to automatic_ch.dm * +/obj/item/weapon/gun/projectile/automatic/p90 + name = "personal defense weapon" + desc = "The H90K is a compact, large capacity submachine gun produced by MarsTech. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds." + description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." + icon_state = "p90smg" + item_state = "p90" + w_class = ITEMSIZE_NORMAL + caliber = "9mm" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) + slot_flags = SLOT_BELT // ToDo: Belt sprite. + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mmp90 + allowed_magazines = list(/obj/item/ammo_magazine/m9mmp90, /obj/item/ammo_magazine/m9mmt) // ToDo: New sprite for the different mag. + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) + ) + +/obj/item/weapon/gun/projectile/automatic/p90/update_icon() + icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]" +* CHOMPEDIT Commented out, moved to automatic_ch.dm */ + +/* + * Tommy Gun + */ +/obj/item/weapon/gun/projectile/automatic/tommygun + name = "\improper Tommy Gun" + desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds." + description_fluff = "Cybersun Industries is a minor arms manufacturer specialising in replica firearms from eras past. Though they offer a wide selection of made-to-order models, their products are seen as little more than novelty items to most serious collectors." + icon_state = "tommygun" + item_state = "stg44" + w_class = ITEMSIZE_NORMAL + caliber = ".45" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + slot_flags = SLOT_BELT // ToDo: Belt sprite. + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m45tommy + allowed_magazines = list(/obj/item/ammo_magazine/m45tommy, /obj/item/ammo_magazine/m45tommydrum) + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) + ) + +/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon() + if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommy)) + icon_state = "tommygun-mag" + else if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommydrum)) + icon_state = "tommygun-drum" + else + icon_state = "tommygun-empty" + update_held_icon() + +/* + * Bullpup Rifle + */ +/obj/item/weapon/gun/projectile/automatic/bullpup // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start. + name = "bullpup rifle" + desc = "The bullpup configured GP3000 is a battle rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. Uses 7.62mm rounds." + icon_state = "bullpup-small" + item_state = "bullpup" + wielded_item_state = "sexyrifle-wielded" //Placeholder, this is a bullpup at least + w_class = ITEMSIZE_LARGE + force = 10 + caliber = "7.62mm" + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m762 + allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762/ext) + projectile_type = /obj/item/projectile/bullet/rifle/a762 + + one_handed_penalty = 45 + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/bullpup/update_icon(var/ignore_inhands) + ..() + if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)) + icon_state = "bullpup-small" + else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762/ext)) + icon_state = "bullpup" + else + item_state = "bullpup-empty" + if(!ignore_inhands) + update_held_icon() + +/* + * Combat SMG (PP3 Ten) + */ +/obj/item/weapon/gun/projectile/automatic/combatsmg + name = "\improper PP3 Ten" + desc = "The Bishamonten PP3 Ten personal defense weapon is a rare design much sought after - though more for its looks than its functionality. Uses 9mm rounds." + description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \ + Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \ + Bishamonten weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard firing mechanisms." + icon_state = "combatsmg" + w_class = ITEMSIZE_NORMAL + load_method = MAGAZINE + caliber = "9mm" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4) + magazine_type = /obj/item/ammo_magazine/m9mmt + allowed_magazines = list(/obj/item/ammo_magazine/m9mmt) + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0), + list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + ) + +/obj/item/weapon/gun/projectile/automatic/combatsmg/update_icon() + ..() + if(ammo_magazine) + icon_state = "combatsmg" + else + icon_state = "combatsmg-empty" diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index c9f6b2887a..86d132ba1e 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,617 +1,617 @@ -/* - * M1911 - */ -/obj/item/weapon/gun/projectile/colt - var/unique_reskin - name = ".45 pistol" - desc = "A typical modern handgun produced for law enforcement. Uses .45 rounds." - magazine_type = /obj/item/ammo_magazine/m45 - allowed_magazines = list(/obj/item/ammo_magazine/m45) - projectile_type = /obj/item/projectile/bullet/pistol/medium - icon_state = "colt" - caliber = ".45" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - load_method = MAGAZINE - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/colt/update_icon() - if(ammo_magazine) - if(unique_reskin) - icon_state = unique_reskin - else - icon_state = initial(icon_state) - else - if(unique_reskin) - icon_state = "[unique_reskin]-e" - else - icon_state = "[initial(icon_state)]-e" - -/* - * Detective M1911 - */ -/obj/item/weapon/gun/projectile/colt/detective - desc = "A standard law enforcement issue pistol. Uses .45 rounds." - magazine_type = /obj/item/ammo_magazine/m45/rubber - -/obj/item/weapon/gun/projectile/colt/detective/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Rename your gun. If you're Security." - - var/mob/M = usr - if(!M.mind) return 0 - var/job = M.mind.assigned_role - if(job != "Detective" && job != "Security Officer" && job != "Warden" && job != "Head of Security") - to_chat(M, "You don't feel cool enough to name this gun, chump.") - return 0 - - var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) - - if(src && input && !M.stat && in_range(M,src)) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return 1 - -/obj/item/weapon/gun/projectile/colt/detective/verb/reskin_gun() - set name = "Resprite gun" - set category = "Object" - set desc = "Click to choose a sprite for your gun." - - var/mob/M = usr - var/list/options = list() - options["MarsTech P11 Spur (Bubba'd)"] = "mod_colt" - options["MarsTech P11 Spur (Blued)"] = "blued_colt" - options["MarsTech P11 Spur (Gold)"] = "gold_colt" - options["MarsTech P11 Spur (Stainless)"] = "stainless_colt" - options["MarsTech P11 Spur (Dark)"] = "dark_colt" - options["MarsTech P11 Spur (Green)"] = "green_colt" - options["MarsTech P11 Spur (Blue)"] = "blue_colt" - var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) - if(src && choice && !M.stat && in_range(M,src)) - icon_state = options[choice] - unique_reskin = options[choice] - to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") - return 1 - -/* - * Security Sidearm - */ -/obj/item/weapon/gun/projectile/sec - name = ".45 pistol" - desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. Found pretty much everywhere humans are. Uses .45 rounds." - description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ - MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon = 'icons/obj/gun_ch.dmi' - icon_state = "secguncomp" - magazine_type = /obj/item/ammo_magazine/m45/rubber - allowed_magazines = list(/obj/item/ammo_magazine/m45) - projectile_type = /obj/item/projectile/bullet/pistol/medium - caliber = ".45" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - load_method = MAGAZINE - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/sec/update_icon() - ..() - if(ammo_magazine) - icon_state = "secguncomp" - else - icon_state = "secguncomp-e" - -/obj/item/weapon/gun/projectile/sec/flash - magazine_type = /obj/item/ammo_magazine/m45/flash - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/sec/wood - name = "custom .45 pistol" - desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. This one has a sweet wooden grip. Uses .45 rounds." - icon_state = "secgundark" - -/obj/item/weapon/gun/projectile/sec/wood/update_icon() - ..() - if(ammo_magazine) - icon_state = "secgundark" - else - icon_state = "secgundark-e" - -/* - * Silenced Pistol - */ -/obj/item/weapon/gun/projectile/silenced - name = "silenced pistol" - desc = "A small, quiet, easily concealable gun with a built-in silencer. Uses .45 rounds." - icon_state = "silenced_pistol" - w_class = ITEMSIZE_NORMAL - caliber = ".45" - silenced = 1 - fire_delay = 1 - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - recoil = 0 - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m45 - allowed_magazines = list(/obj/item/ammo_magazine/m45) - projectile_type = /obj/item/projectile/bullet/pistol/medium - -/obj/item/weapon/gun/projectile/silenced/empty - magazine_type = null - -/obj/item/weapon/gun/projectile/silenced/update_icon() - ..() - if(ammo_magazine) - icon_state = "silenced_pistol" - else - icon_state = "silenced_pistol-e" - -/* - * Deagle - */ -/obj/item/weapon/gun/projectile/deagle - name = "hand cannon" - desc = "The PCA-55 Rarkajar perfect handgun for shooters with a need to hit targets through a wall and behind a fridge in your neighbor's house. Uses .44 rounds." - description_fluff = "Pearlshield Consolidated Armories are far from the most cutting edge firearm manufacturer, but the Tajaran’s long tradition of war is rivaled only by humanity, \ - and the introduction of human technology to the Tajaran arms market has resulted in something of a revolution in finding new ways to kill each other at long distances with bullets. \ - Usually made with mass-production in mind, PCA weapons combine an eye for design with a great desire to make people dead." - icon_state = "deagle" - item_state = "deagle" - force = 14.0 - caliber = ".44" - fire_sound = 'sound/weapons/Gunshot_deagle.ogg' - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m44 - allowed_magazines = list(/obj/item/ammo_magazine/m44) - -/obj/item/weapon/gun/projectile/deagle/update_icon() - ..() - if(ammo_magazine) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]-e" - -/obj/item/weapon/gun/projectile/deagle/gold - desc = "A gold plated gun folded over a million times by superior Tajaran gunsmiths. Uses .44 rounds." - icon_state = "deagleg" - item_state = "deagleg" - -/obj/item/weapon/gun/projectile/deagle/camo - desc = "An off-brand non-Deagle for operators not operating operationally. Uses .44 rounds." - icon_state = "deaglecamo" - item_state = "deagleg" - -/* - * Gyro Pistol (Admin Abuse in gun form) - */ -/obj/item/weapon/gun/projectile/gyropistol - name = "gyrojet pistol" - desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you." - icon_state = "gyropistol" - max_shells = 8 - caliber = ".75" - fire_sound = 'sound/weapons/railgun.ogg' - origin_tech = list(TECH_COMBAT = 3) - ammo_type = "/obj/item/ammo_casing/a75" - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m75 - allowed_magazines = list(/obj/item/ammo_magazine/m75) - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/gyropistol/update_icon() - ..() - if(ammo_magazine) - icon_state = "gyropistolloaded" - else - icon_state = "gyropistol" - -/* - * Silencer - */ -/obj/item/weapon/silencer - name = "silencer" - desc = "a silencer" - icon = 'icons/obj/gun.dmi' - icon_state = "silencer" - w_class = ITEMSIZE_SMALL - -/* - * Compact Pistol - */ -/obj/item/weapon/gun/projectile/pistol - name = "compact pistol" - desc = "The Lumoco Arms P3 \"Whisper\". A compact, easily concealable gun, though it's only compatible with compact magazines. Uses 9mm rounds." - icon_state = "pistol" - item_state = null - w_class = ITEMSIZE_SMALL - caliber = "9mm" - silenced = 0 - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mm/compact - allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact) - projectile_type = /obj/item/projectile/bullet/pistol - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/pistol/flash - magazine_type = /obj/item/ammo_magazine/m9mm/compact/flash - -/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob) - if(user.get_inactive_hand() == src) - if(silenced) - if(!user.item_is_in_hands(src)) - ..() - return - to_chat(user, "You unscrew [silenced] from [src].") - user.put_in_hands(silenced) - silenced = 0 - w_class = ITEMSIZE_SMALL - update_icon() - return - ..() - -/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob) - if(istype(I, /obj/item/weapon/silencer)) - if(!user.item_is_in_hands(src)) //if we're not in his hands - to_chat(user, "You'll need [src] in your hands to do that.") - return - user.drop_item() - to_chat(user, "You screw [I] onto [src].") - silenced = I //dodgy? - w_class = ITEMSIZE_NORMAL - I.loc = src //put the silencer into the gun - update_icon() - return - ..() - -/obj/item/weapon/gun/projectile/pistol/update_icon() - if(ammo_magazine) - if(silenced) - icon_state = "pistol-s" - else - icon_state = "pistol" - else - if(silenced) - icon_state = "pistol-s-e" - else - icon_state = "pistol-e" - -/* - * Pistol - */ -/obj/item/weapon/gun/projectile/aps - name = "pistol" - desc = "The Lumoco Arms P6 \"Rustle\". A standard self-defense pistol that takes standard magazines. Uses 9mm rounds." - icon_state = "aps" - item_state = null - caliber = "9mm" - silenced = 0 - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mm - allowed_magazines = list(/obj/item/ammo_magazine/m9mm) - projectile_type = /obj/item/projectile/bullet/pistol - -/obj/item/weapon/gun/projectile/aps/attack_hand(mob/living/user as mob) - if(user.get_inactive_hand() == src) - if(silenced) - if(!user.item_is_in_hands(src)) - ..() - return - to_chat(user, "You unscrew [silenced] from [src].") - user.put_in_hands(silenced) - silenced = 0 - update_icon() - return - ..() - -/obj/item/weapon/gun/projectile/aps/attackby(obj/item/I as obj, mob/living/user as mob) - if(istype(I, /obj/item/weapon/silencer)) - if(!user.item_is_in_hands(src)) //if we're not in his hands - to_chat(user, "You'll need [src] in your hands to do that.") - return - user.drop_item() - to_chat(user, "You screw [I] onto [src].") - silenced = I //dodgy? - I.loc = src //put the silencer into the gun - update_icon() - return - ..() - -/obj/item/weapon/gun/projectile/aps/update_icon() - if(ammo_magazine) - if(silenced) - icon_state = "aps-s" - else - icon_state = "aps" - else - if(silenced) - icon_state = "aps-s-e" - else - icon_state = "aps-e" - -/* - * Zip Gun (yar har) - */ -/obj/item/weapon/gun/projectile/pirate - name = "zip gun" - desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems." - icon_state = "zipgun" - item_state = "sawnshotgun" - handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading - load_method = SINGLE_CASING - max_shells = 1 //literally just a barrel - - var/global/list/ammo_types = list( - /obj/item/ammo_casing/a357 = ".357", - /obj/item/ammo_casing/a9mm = "9mm", - /obj/item/ammo_casing/a45 = ".45", - /obj/item/ammo_casing/a10mm = "10mm", - /obj/item/ammo_casing/a12g = "12g", - /obj/item/ammo_casing/a12g = "12g", - /obj/item/ammo_casing/a12g/pellet = "12g", - /obj/item/ammo_casing/a12g/pellet = "12g", - /obj/item/ammo_casing/a12g/pellet = "12g", - /obj/item/ammo_casing/a12g/beanbag = "12g", - /obj/item/ammo_casing/a12g/stunshell = "12g", - /obj/item/ammo_casing/a12g/flash = "12g", - /obj/item/ammo_casing/a762 = "7.62mm", - /obj/item/ammo_casing/a545 = "5.45mm" - ) - -/obj/item/weapon/gun/projectile/pirate/New() - ammo_type = pick(ammo_types) - desc += " Uses [ammo_types[ammo_type]] rounds." - - var/obj/item/ammo_casing/ammo = ammo_type - caliber = initial(ammo.caliber) - ..() - -/* - * Derringer - */ -/obj/item/weapon/gun/projectile/derringer - name = "derringer" - desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~ - icon_state = "derringer" - item_state = "concealed" - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3) - handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading - load_method = SINGLE_CASING - max_shells = 2 - ammo_type = /obj/item/ammo_casing/a357 - projectile_type = /obj/item/projectile/bullet/pistol/strong - -/* - * Luger - */ -/obj/item/weapon/gun/projectile/luger - name = "\improper Jindal T15 \"Mäuse\"" - desc = "Almost seventy percent guaranteed not to be a cheap rimworld knockoff! Accuracy, easy handling, and its distinctive appearance \ - make it popular among gun collectors. Uses 9mm rounds." - description_fluff = "While Jindal’s rugged, affordable weapons intended for the colonial sector are a major export of Tau Ceti, \ - the Jindal Arms company is perhaps best known for its liberal sale of production licenses to just about any fledgling rimworld \ - venture who asks, and has cash to spare. While Jindal’s 'authentic' Binma-built weapons are renowned for their reliability, the \ - same cannot be said for the hundreds of low-grade (But technically legal) copies circulating the squalid habitats and smoke-filled \ - junk ships of the frontier." - icon_state = "p08a" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - caliber = "9mm" - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mm/luger - allowed_magazines = list(/obj/item/ammo_magazine/m9mm/luger) - projectile_type = /obj/item/projectile/bullet/pistol - -/obj/item/weapon/gun/projectile/luger/update_icon() - ..() - if(ammo_magazine) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]-e" - -/obj/item/weapon/gun/projectile/luger/brown - name = "\improper Jindal T15b \"Mäuse\"" - description_fluff = "While wholly owned by Hephaestus Industries, the Jindal Arms brand does not appear prominently in most company catalogues \ - (Perhaps owing to its less than prestigious image), instead being sold almost exclusively through retailers and advertising platforms targeting \ - the 'independent roughneck' demographic." - icon_state = "p08b" - -/* - * P92X (9mm Pistol) - */ -/obj/item/weapon/gun/projectile/p92x - name = "9mm pistol" - desc = "A widespread MarsTech sidearm called the P92X which is used by military, police, and security forces across the galaxy. Uses 9mm rounds." - icon_state = "p92x" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - caliber = "9mm" - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m9mm - allowed_magazines = list(/obj/item/ammo_magazine/m9mm) // Can accept illegal large capacity magazines, or compact magazines. - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/p92x/update_icon() - ..() - if(ammo_magazine) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]-e" - -/obj/item/weapon/gun/projectile/p92x/rubber - magazine_type = /obj/item/ammo_magazine/m9mm/rubber - -/obj/item/weapon/gun/projectile/p92x/brown - icon_state = "p92xb" - -/obj/item/weapon/gun/projectile/p92x/large - magazine_type = /obj/item/ammo_magazine/m9mm/large // Spawns with illegal magazines. - -/obj/item/weapon/gun/projectile/p92x/large/preban - magazine_type = /obj/item/ammo_magazine/m9mm/large/preban // Spawns with big magazines that are legal. - -/obj/item/weapon/gun/projectile/p92x/large/preban/hp - magazine_type = /obj/item/ammo_magazine/m9mm/large/preban/hp // Spawns with legal hollow-point mag - -/* - * Giskard (Eris Port) - */ -/obj/item/weapon/gun/projectile/giskard - name = "\improper \"Giskard\" holdout pistol" - desc = "The FS HG .38 \"Giskard\" can even fit into the pocket! Uses .38 rounds." - icon_state = "giskardcivil" - item_state = "giskardcivil" - caliber = ".38" - magazine_type = /obj/item/ammo_magazine/m38 - allowed_magazines = list(/obj/item/ammo_magazine/m38) - load_method = MAGAZINE - w_class = ITEMSIZE_SMALL - fire_sound = 'sound/weapons/gunshot_pathetic.ogg' - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3) - -/obj/item/weapon/gun/projectile/giskard/update_icon() - ..() - if(ammo_magazine && ammo_magazine.stored_ammo.len) - icon_state = "giskardcivil" - else - icon_state = "giskardcivil_empty" - -/obj/item/weapon/gun/projectile/giskard/olivaw - name = "\improper \"Olivaw\" holdout burst-pistol" - desc = "The FS HG .38 \"Olivaw\" is a more advanced version of the \"Giskard\". \ - This one seems to have a two-round burst-fire mode. Uses .38 rounds." - icon_state = "olivawcivil" - item_state = "giskardcivil" - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)), - ) - -/obj/item/weapon/gun/projectile/giskard/olivaw/update_icon() - ..() - if(ammo_magazine && ammo_magazine.stored_ammo.len) - icon_state = "olivawcivil" - else - icon_state = "olivawcivil-e" - -/* - * Makarov - */ -/obj/item/weapon/gun/projectile/makarov - name = "makarov" - desc = "A small, rugged pistol from a bygone era. Uses .38 rounds." - icon_state = "makarov" - item_state = "gun" - caliber = ".38" - magazine_type = /obj/item/ammo_magazine/m38 - allowed_magazines = list(/obj/item/ammo_magazine/m38) - projectile_type = /obj/item/projectile/bullet/pistol/medium - load_method = MAGAZINE - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/obj/item/weapon/gun/projectile/makarov/update_icon() - if(ammo_magazine) - icon_state = "Makarov" - else - icon_state = "Makarov-e" - -/* - * N99 (Fallout) - */ -/obj/item/weapon/gun/projectile/n99 - name = "promotional pistol" - desc = "A very robust looking pistol that was made to promote 'Radius: Legend of the Demon Core', a popular \ - post-apocolyptic TV series. It's rare to come across as marketing swiftly switched to a toy version as \ - opposed to a live weapon due to safety concerns. Uses 10mm rounds." - icon_state = "n99" - item_state = "gun" - caliber = "10mm" - magazine_type = /obj/item/ammo_magazine/m10mm/pistol - allowed_magazines = list(/obj/item/ammo_magazine/m10mm/pistol) - projectile_type = /obj/item/projectile/bullet/pistol/medium - load_method = MAGAZINE - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/obj/item/weapon/gun/projectile/n99/update_icon() - if(ammo_magazine) - icon_state = "n99" - else - icon_state = "n99-e" - -/obj/item/weapon/gun/projectile/n80 - icon_state = "n80" - -/obj/item/weapon/gun/projectile/n80/update_icon() - if(ammo_magazine) - icon_state = "n80" - else - icon_state = "n80-e" - -/* - * Écureuil 10mm Pistol (Skyrat Port) - */ -/obj/item/weapon/gun/projectile/ecureuil - name = "\improper \"Écureuil\" 10mm pistol" - desc = "The 10mm MarsTech sidearm \"Écureuil\" is a well known military grade pistol. \ - It's mostly used by ranking members of NanoTrasen as a means of self defense. Uses 10mm rounds." - icon_state = "ecureuil" - item_state = "gun" - caliber = "10mm" - magazine_type = /obj/item/ammo_magazine/m10mm/pistol - allowed_magazines = list(/obj/item/ammo_magazine/m10mm/pistol) - projectile_type = /obj/item/projectile/bullet/pistol/medium - load_method = MAGAZINE - w_class = ITEMSIZE_NORMAL - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/obj/item/weapon/gun/projectile/ecureuil/update_icon() - if(ammo_magazine) - icon_state = "ecureuil" - else - icon_state = "ecureuil-e" - -/obj/item/weapon/gun/projectile/ecureuil/tac - name = "\improper Tactical \"Écureuil\" 10mm pistol" - icon_state = "tac_ecureuil" - -/obj/item/weapon/gun/projectile/ecureuil/tac/update_icon() - if(ammo_magazine) - icon_state = "tac_ecureuil" - else - icon_state = "tac_ecureuil-e" - -/obj/item/weapon/gun/projectile/ecureuil/tac2 - name = "\improper Tactical \"Écureuil\" 10mm pistol" - icon_state = "tac_ecureuil" - -/obj/item/weapon/gun/projectile/ecureuil/tac2/update_icon() - if(ammo_magazine) - icon_state = "tac2_ecureuil" - else - icon_state = "tac2_ecureuil-e" - -/* - * Lamia (Eris Port) - */ -/obj/item/weapon/gun/projectile/lamia - name = "\improper FS HG .44 \"Lamia\"" - desc = "The FS HG .44 \"Lamia\" is the epitome of power in a handheld device. Uses .44 rounds." - icon_state = "lamia" - item_state = "revolver" - caliber = ".44" - magazine_type = /obj/item/ammo_magazine/m44/rubber - allowed_magazines = list(/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44/rubber) - load_method = MAGAZINE - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4) - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/lamia/update_icon() - cut_overlays() - if(!ammo_magazine) - return - var/ratio = ammo_magazine.stored_ammo.len * 100 / ammo_magazine.max_ammo - ratio = round(ratio, 33) - add_overlay("lamia_[ratio]") +/* + * M1911 + */ +/obj/item/weapon/gun/projectile/colt + var/unique_reskin + name = ".45 pistol" + desc = "A typical modern handgun produced for law enforcement. Uses .45 rounds." + magazine_type = /obj/item/ammo_magazine/m45 + allowed_magazines = list(/obj/item/ammo_magazine/m45) + projectile_type = /obj/item/projectile/bullet/pistol/medium + icon_state = "colt" + caliber = ".45" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + load_method = MAGAZINE + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/colt/update_icon() + if(ammo_magazine) + if(unique_reskin) + icon_state = unique_reskin + else + icon_state = initial(icon_state) + else + if(unique_reskin) + icon_state = "[unique_reskin]-e" + else + icon_state = "[initial(icon_state)]-e" + +/* + * Detective M1911 + */ +/obj/item/weapon/gun/projectile/colt/detective + desc = "A standard law enforcement issue pistol. Uses .45 rounds." + magazine_type = /obj/item/ammo_magazine/m45/rubber + +/obj/item/weapon/gun/projectile/colt/detective/verb/rename_gun() + set name = "Name Gun" + set category = "Object" + set desc = "Rename your gun. If you're Security." + + var/mob/M = usr + if(!M.mind) return 0 + var/job = M.mind.assigned_role + if(job != "Detective" && job != "Security Officer" && job != "Warden" && job != "Head of Security") + to_chat(M, "You don't feel cool enough to name this gun, chump.") + return 0 + + var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src)) + name = input + to_chat(M, "You name the gun [input]. Say hello to your new friend.") + return 1 + +/obj/item/weapon/gun/projectile/colt/detective/verb/reskin_gun() + set name = "Resprite gun" + set category = "Object" + set desc = "Click to choose a sprite for your gun." + + var/mob/M = usr + var/list/options = list() + options["MarsTech P11 Spur (Bubba'd)"] = "mod_colt" + options["MarsTech P11 Spur (Blued)"] = "blued_colt" + options["MarsTech P11 Spur (Gold)"] = "gold_colt" + options["MarsTech P11 Spur (Stainless)"] = "stainless_colt" + options["MarsTech P11 Spur (Dark)"] = "dark_colt" + options["MarsTech P11 Spur (Green)"] = "green_colt" + options["MarsTech P11 Spur (Blue)"] = "blue_colt" + var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) + if(src && choice && !M.stat && in_range(M,src)) + icon_state = options[choice] + unique_reskin = options[choice] + to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") + return 1 + +/* + * Security Sidearm + */ +/obj/item/weapon/gun/projectile/sec + name = ".45 pistol" + desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. Found pretty much everywhere humans are. Uses .45 rounds." + description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ + MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." + icon = 'icons/obj/gun_ch.dmi' + icon_state = "secguncomp" + magazine_type = /obj/item/ammo_magazine/m45/rubber + allowed_magazines = list(/obj/item/ammo_magazine/m45) + projectile_type = /obj/item/projectile/bullet/pistol/medium + caliber = ".45" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + load_method = MAGAZINE + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/sec/update_icon() + ..() + if(ammo_magazine) + icon_state = "secguncomp" + else + icon_state = "secguncomp-e" + +/obj/item/weapon/gun/projectile/sec/flash + magazine_type = /obj/item/ammo_magazine/m45/flash + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/sec/wood + name = "custom .45 pistol" + desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. This one has a sweet wooden grip. Uses .45 rounds." + icon_state = "secgundark" + +/obj/item/weapon/gun/projectile/sec/wood/update_icon() + ..() + if(ammo_magazine) + icon_state = "secgundark" + else + icon_state = "secgundark-e" + +/* + * Silenced Pistol + */ +/obj/item/weapon/gun/projectile/silenced + name = "silenced pistol" + desc = "A small, quiet, easily concealable gun with a built-in silencer. Uses .45 rounds." + icon_state = "silenced_pistol" + w_class = ITEMSIZE_NORMAL + caliber = ".45" + silenced = 1 + fire_delay = 1 + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + recoil = 0 + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m45 + allowed_magazines = list(/obj/item/ammo_magazine/m45) + projectile_type = /obj/item/projectile/bullet/pistol/medium + +/obj/item/weapon/gun/projectile/silenced/empty + magazine_type = null + +/obj/item/weapon/gun/projectile/silenced/update_icon() + ..() + if(ammo_magazine) + icon_state = "silenced_pistol" + else + icon_state = "silenced_pistol-e" + +/* + * Deagle + */ +/obj/item/weapon/gun/projectile/deagle + name = "hand cannon" + desc = "The PCA-55 Rarkajar perfect handgun for shooters with a need to hit targets through a wall and behind a fridge in your neighbor's house. Uses .44 rounds." + description_fluff = "Pearlshield Consolidated Armories are far from the most cutting edge firearm manufacturer, but the Tajaran’s long tradition of war is rivaled only by humanity, \ + and the introduction of human technology to the Tajaran arms market has resulted in something of a revolution in finding new ways to kill each other at long distances with bullets. \ + Usually made with mass-production in mind, PCA weapons combine an eye for design with a great desire to make people dead." + icon_state = "deagle" + item_state = "deagle" + force = 14.0 + caliber = ".44" + fire_sound = 'sound/weapons/Gunshot_deagle.ogg' + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m44 + allowed_magazines = list(/obj/item/ammo_magazine/m44) + +/obj/item/weapon/gun/projectile/deagle/update_icon() + ..() + if(ammo_magazine) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]-e" + +/obj/item/weapon/gun/projectile/deagle/gold + desc = "A gold plated gun folded over a million times by superior Tajaran gunsmiths. Uses .44 rounds." + icon_state = "deagleg" + item_state = "deagleg" + +/obj/item/weapon/gun/projectile/deagle/camo + desc = "An off-brand non-Deagle for operators not operating operationally. Uses .44 rounds." + icon_state = "deaglecamo" + item_state = "deagleg" + +/* + * Gyro Pistol (Admin Abuse in gun form) + */ +/obj/item/weapon/gun/projectile/gyropistol + name = "gyrojet pistol" + desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you." + icon_state = "gyropistol" + max_shells = 8 + caliber = ".75" + fire_sound = 'sound/weapons/railgun.ogg' + origin_tech = list(TECH_COMBAT = 3) + ammo_type = "/obj/item/ammo_casing/a75" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m75 + allowed_magazines = list(/obj/item/ammo_magazine/m75) + auto_eject = 1 + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/gyropistol/update_icon() + ..() + if(ammo_magazine) + icon_state = "gyropistolloaded" + else + icon_state = "gyropistol" + +/* + * Silencer + */ +/obj/item/weapon/silencer + name = "silencer" + desc = "a silencer" + icon = 'icons/obj/gun.dmi' + icon_state = "silencer" + w_class = ITEMSIZE_SMALL + +/* + * Compact Pistol + */ +/obj/item/weapon/gun/projectile/pistol + name = "compact pistol" + desc = "The Lumoco Arms P3 \"Whisper\". A compact, easily concealable gun, though it's only compatible with compact magazines. Uses 9mm rounds." + icon_state = "pistol" + item_state = null + w_class = ITEMSIZE_SMALL + caliber = "9mm" + silenced = 0 + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mm/compact + allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact) + projectile_type = /obj/item/projectile/bullet/pistol + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/pistol/flash + magazine_type = /obj/item/ammo_magazine/m9mm/compact/flash + +/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob) + if(user.get_inactive_hand() == src) + if(silenced) + if(!user.item_is_in_hands(src)) + ..() + return + to_chat(user, "You unscrew [silenced] from [src].") + user.put_in_hands(silenced) + silenced = 0 + w_class = ITEMSIZE_SMALL + update_icon() + return + ..() + +/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob) + if(istype(I, /obj/item/weapon/silencer)) + if(!user.item_is_in_hands(src)) //if we're not in his hands + to_chat(user, "You'll need [src] in your hands to do that.") + return + user.drop_item() + to_chat(user, "You screw [I] onto [src].") + silenced = I //dodgy? + w_class = ITEMSIZE_NORMAL + I.loc = src //put the silencer into the gun + update_icon() + return + ..() + +/obj/item/weapon/gun/projectile/pistol/update_icon() + if(ammo_magazine) + if(silenced) + icon_state = "pistol-s" + else + icon_state = "pistol" + else + if(silenced) + icon_state = "pistol-s-e" + else + icon_state = "pistol-e" + +/* + * Pistol + */ +/obj/item/weapon/gun/projectile/aps + name = "pistol" + desc = "The Lumoco Arms P6 \"Rustle\". A standard self-defense pistol that takes standard magazines. Uses 9mm rounds." + icon_state = "aps" + item_state = null + caliber = "9mm" + silenced = 0 + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mm + allowed_magazines = list(/obj/item/ammo_magazine/m9mm) + projectile_type = /obj/item/projectile/bullet/pistol + +/obj/item/weapon/gun/projectile/aps/attack_hand(mob/living/user as mob) + if(user.get_inactive_hand() == src) + if(silenced) + if(!user.item_is_in_hands(src)) + ..() + return + to_chat(user, "You unscrew [silenced] from [src].") + user.put_in_hands(silenced) + silenced = 0 + update_icon() + return + ..() + +/obj/item/weapon/gun/projectile/aps/attackby(obj/item/I as obj, mob/living/user as mob) + if(istype(I, /obj/item/weapon/silencer)) + if(!user.item_is_in_hands(src)) //if we're not in his hands + to_chat(user, "You'll need [src] in your hands to do that.") + return + user.drop_item() + to_chat(user, "You screw [I] onto [src].") + silenced = I //dodgy? + I.loc = src //put the silencer into the gun + update_icon() + return + ..() + +/obj/item/weapon/gun/projectile/aps/update_icon() + if(ammo_magazine) + if(silenced) + icon_state = "aps-s" + else + icon_state = "aps" + else + if(silenced) + icon_state = "aps-s-e" + else + icon_state = "aps-e" + +/* + * Zip Gun (yar har) + */ +/obj/item/weapon/gun/projectile/pirate + name = "zip gun" + desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems." + icon_state = "zipgun" + item_state = "sawnshotgun" + handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading + load_method = SINGLE_CASING + max_shells = 1 //literally just a barrel + + var/global/list/ammo_types = list( + /obj/item/ammo_casing/a357 = ".357", + /obj/item/ammo_casing/a9mm = "9mm", + /obj/item/ammo_casing/a45 = ".45", + /obj/item/ammo_casing/a10mm = "10mm", + /obj/item/ammo_casing/a12g = "12g", + /obj/item/ammo_casing/a12g = "12g", + /obj/item/ammo_casing/a12g/pellet = "12g", + /obj/item/ammo_casing/a12g/pellet = "12g", + /obj/item/ammo_casing/a12g/pellet = "12g", + /obj/item/ammo_casing/a12g/beanbag = "12g", + /obj/item/ammo_casing/a12g/stunshell = "12g", + /obj/item/ammo_casing/a12g/flash = "12g", + /obj/item/ammo_casing/a762 = "7.62mm", + /obj/item/ammo_casing/a545 = "5.45mm" + ) + +/obj/item/weapon/gun/projectile/pirate/New() + ammo_type = pick(ammo_types) + desc += " Uses [ammo_types[ammo_type]] rounds." + + var/obj/item/ammo_casing/ammo = ammo_type + caliber = initial(ammo.caliber) + ..() + +/* + * Derringer + */ +/obj/item/weapon/gun/projectile/derringer + name = "derringer" + desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~ + icon_state = "derringer" + item_state = "concealed" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3) + handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading + load_method = SINGLE_CASING + max_shells = 2 + ammo_type = /obj/item/ammo_casing/a357 + projectile_type = /obj/item/projectile/bullet/pistol/strong + +/* + * Luger + */ +/obj/item/weapon/gun/projectile/luger + name = "\improper Jindal T15 \"Mäuse\"" + desc = "Almost seventy percent guaranteed not to be a cheap rimworld knockoff! Accuracy, easy handling, and its distinctive appearance \ + make it popular among gun collectors. Uses 9mm rounds." + description_fluff = "While Jindal’s rugged, affordable weapons intended for the colonial sector are a major export of Tau Ceti, \ + the Jindal Arms company is perhaps best known for its liberal sale of production licenses to just about any fledgling rimworld \ + venture who asks, and has cash to spare. While Jindal’s 'authentic' Binma-built weapons are renowned for their reliability, the \ + same cannot be said for the hundreds of low-grade (But technically legal) copies circulating the squalid habitats and smoke-filled \ + junk ships of the frontier." + icon_state = "p08a" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) + caliber = "9mm" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mm/luger + allowed_magazines = list(/obj/item/ammo_magazine/m9mm/luger) + projectile_type = /obj/item/projectile/bullet/pistol + +/obj/item/weapon/gun/projectile/luger/update_icon() + ..() + if(ammo_magazine) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]-e" + +/obj/item/weapon/gun/projectile/luger/brown + name = "\improper Jindal T15b \"Mäuse\"" + description_fluff = "While wholly owned by Hephaestus Industries, the Jindal Arms brand does not appear prominently in most company catalogues \ + (Perhaps owing to its less than prestigious image), instead being sold almost exclusively through retailers and advertising platforms targeting \ + the 'independent roughneck' demographic." + icon_state = "p08b" + +/* + * P92X (9mm Pistol) + */ +/obj/item/weapon/gun/projectile/p92x + name = "9mm pistol" + desc = "A widespread MarsTech sidearm called the P92X which is used by military, police, and security forces across the galaxy. Uses 9mm rounds." + icon_state = "p92x" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) + caliber = "9mm" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/m9mm + allowed_magazines = list(/obj/item/ammo_magazine/m9mm) // Can accept illegal large capacity magazines, or compact magazines. + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/p92x/update_icon() + ..() + if(ammo_magazine) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]-e" + +/obj/item/weapon/gun/projectile/p92x/rubber + magazine_type = /obj/item/ammo_magazine/m9mm/rubber + +/obj/item/weapon/gun/projectile/p92x/brown + icon_state = "p92xb" + +/obj/item/weapon/gun/projectile/p92x/large + magazine_type = /obj/item/ammo_magazine/m9mm/large // Spawns with illegal magazines. + +/obj/item/weapon/gun/projectile/p92x/large/preban + magazine_type = /obj/item/ammo_magazine/m9mm/large/preban // Spawns with big magazines that are legal. + +/obj/item/weapon/gun/projectile/p92x/large/preban/hp + magazine_type = /obj/item/ammo_magazine/m9mm/large/preban/hp // Spawns with legal hollow-point mag + +/* + * Giskard (Eris Port) + */ +/obj/item/weapon/gun/projectile/giskard + name = "\improper \"Giskard\" holdout pistol" + desc = "The FS HG .38 \"Giskard\" can even fit into the pocket! Uses .38 rounds." + icon_state = "giskardcivil" + item_state = "giskardcivil" + caliber = ".38" + magazine_type = /obj/item/ammo_magazine/m38 + allowed_magazines = list(/obj/item/ammo_magazine/m38) + load_method = MAGAZINE + w_class = ITEMSIZE_SMALL + fire_sound = 'sound/weapons/gunshot_pathetic.ogg' + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3) + +/obj/item/weapon/gun/projectile/giskard/update_icon() + ..() + if(ammo_magazine && ammo_magazine.stored_ammo.len) + icon_state = "giskardcivil" + else + icon_state = "giskardcivil_empty" + +/obj/item/weapon/gun/projectile/giskard/olivaw + name = "\improper \"Olivaw\" holdout burst-pistol" + desc = "The FS HG .38 \"Olivaw\" is a more advanced version of the \"Giskard\". \ + This one seems to have a two-round burst-fire mode. Uses .38 rounds." + icon_state = "olivawcivil" + item_state = "giskardcivil" + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)), + ) + +/obj/item/weapon/gun/projectile/giskard/olivaw/update_icon() + ..() + if(ammo_magazine && ammo_magazine.stored_ammo.len) + icon_state = "olivawcivil" + else + icon_state = "olivawcivil-e" + +/* + * Makarov + */ +/obj/item/weapon/gun/projectile/makarov + name = "makarov" + desc = "A small, rugged pistol from a bygone era. Uses .38 rounds." + icon_state = "makarov" + item_state = "gun" + caliber = ".38" + magazine_type = /obj/item/ammo_magazine/m38 + allowed_magazines = list(/obj/item/ammo_magazine/m38) + projectile_type = /obj/item/projectile/bullet/pistol/medium + load_method = MAGAZINE + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + +/obj/item/weapon/gun/projectile/makarov/update_icon() + if(ammo_magazine) + icon_state = "Makarov" + else + icon_state = "Makarov-e" + +/* + * N99 (Fallout) + */ +/obj/item/weapon/gun/projectile/n99 + name = "promotional pistol" + desc = "A very robust looking pistol that was made to promote 'Radius: Legend of the Demon Core', a popular \ + post-apocolyptic TV series. It's rare to come across as marketing swiftly switched to a toy version as \ + opposed to a live weapon due to safety concerns. Uses 10mm rounds." + icon_state = "n99" + item_state = "gun" + caliber = "10mm" + magazine_type = /obj/item/ammo_magazine/m10mm/pistol + allowed_magazines = list(/obj/item/ammo_magazine/m10mm/pistol) + projectile_type = /obj/item/projectile/bullet/pistol/medium + load_method = MAGAZINE + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + +/obj/item/weapon/gun/projectile/n99/update_icon() + if(ammo_magazine) + icon_state = "n99" + else + icon_state = "n99-e" + +/obj/item/weapon/gun/projectile/n80 + icon_state = "n80" + +/obj/item/weapon/gun/projectile/n80/update_icon() + if(ammo_magazine) + icon_state = "n80" + else + icon_state = "n80-e" + +/* + * Écureuil 10mm Pistol (Skyrat Port) + */ +/obj/item/weapon/gun/projectile/ecureuil + name = "\improper \"Écureuil\" 10mm pistol" + desc = "The 10mm MarsTech sidearm \"Écureuil\" is a well known military grade pistol. \ + It's mostly used by ranking members of NanoTrasen as a means of self defense. Uses 10mm rounds." + icon_state = "ecureuil" + item_state = "gun" + caliber = "10mm" + magazine_type = /obj/item/ammo_magazine/m10mm/pistol + allowed_magazines = list(/obj/item/ammo_magazine/m10mm/pistol) + projectile_type = /obj/item/projectile/bullet/pistol/medium + load_method = MAGAZINE + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + +/obj/item/weapon/gun/projectile/ecureuil/update_icon() + if(ammo_magazine) + icon_state = "ecureuil" + else + icon_state = "ecureuil-e" + +/obj/item/weapon/gun/projectile/ecureuil/tac + name = "\improper Tactical \"Écureuil\" 10mm pistol" + icon_state = "tac_ecureuil" + +/obj/item/weapon/gun/projectile/ecureuil/tac/update_icon() + if(ammo_magazine) + icon_state = "tac_ecureuil" + else + icon_state = "tac_ecureuil-e" + +/obj/item/weapon/gun/projectile/ecureuil/tac2 + name = "\improper Tactical \"Écureuil\" 10mm pistol" + icon_state = "tac_ecureuil" + +/obj/item/weapon/gun/projectile/ecureuil/tac2/update_icon() + if(ammo_magazine) + icon_state = "tac2_ecureuil" + else + icon_state = "tac2_ecureuil-e" + +/* + * Lamia (Eris Port) + */ +/obj/item/weapon/gun/projectile/lamia + name = "\improper FS HG .44 \"Lamia\"" + desc = "The FS HG .44 \"Lamia\" is the epitome of power in a handheld device. Uses .44 rounds." + icon_state = "lamia" + item_state = "revolver" + caliber = ".44" + magazine_type = /obj/item/ammo_magazine/m44/rubber + allowed_magazines = list(/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44/rubber) + load_method = MAGAZINE + auto_eject = 1 + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4) + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/lamia/update_icon() + cut_overlays() + if(!ammo_magazine) + return + var/ratio = ammo_magazine.stored_ammo.len * 100 / ammo_magazine.max_ammo + ratio = round(ratio, 33) + add_overlay("lamia_[ratio]") diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 65d8e0506e..02422d8c4c 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,352 +1,352 @@ -/* - * Revolver - */ -/obj/item/weapon/gun/projectile/revolver - name = "revolver" - desc = "The MarsTech HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds." - description_fluff = "MarsTech first made their name in the Second Cold War as the 'Lunar Arms Company' providing home-grown arms to the Selene Federation, \ - but after the formation of the SCG rebranded and relocated to Mars where they remain based to this day. \ - The company was acquired by Hephaestus in the mid 23rd century, and its branding used to present an image of historical prestige and Solar unity for their latest product line. \ - MarsTech operates production facilities out of many of the SCG’s larger colonies." - icon_state = "revolver" - item_state = "revolver" - caliber = ".357" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - handle_casings = CYCLE_CASINGS - max_shells = 6 - ammo_type = /obj/item/ammo_casing/a357 - projectile_type = /obj/item/projectile/bullet/pistol/strong - var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round - -/obj/item/weapon/gun/projectile/revolver/verb/spin_cylinder() - set name = "Spin cylinder" - set desc = "Fun when you're bored out of your skull." - set category = "Object" - - chamber_offset = 0 - visible_message("\The [usr] spins the cylinder of \the [src]!", \ - "You hear something metallic spin and click.") - playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1) - loaded = shuffle(loaded) - if(rand(1,max_shells) > loaded.len) - chamber_offset = rand(0,max_shells - loaded.len) - -/obj/item/weapon/gun/projectile/revolver/consume_next_projectile() - if(chamber_offset) - chamber_offset-- - return - return ..() - -/obj/item/weapon/gun/projectile/revolver/load_ammo(var/obj/item/A, mob/user) - chamber_offset = 0 - return ..() - -/obj/item/weapon/gun/projectile/revolver/stainless - icon_state = "revolver_stainless" - -/* - * Detective Revolver - */ -/obj/item/weapon/gun/projectile/revolver/detective - name = "revolver" - desc = "A standard MarsTech R1 snubnose revolver, popular among some law enforcement agencies for its simple, long-lasting construction. Uses .38-Special rounds." - description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon_state = "detective" - caliber = ".38" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - ammo_type = /obj/item/ammo_casing/a38 - -/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Click to rename your gun. If you're the detective." - - var/mob/M = usr - if(!M.mind) return 0 - if(!M.mind.assigned_role == "Detective") - to_chat(M, "You don't feel cool enough to name this gun, chump.") - return 0 - - var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) - - if(src && input && !M.stat && in_range(M,src)) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return 1 - -/obj/item/weapon/gun/projectile/revolver/detective45 - name = ".45 revolver" - desc = "A basic revolver, popular among some law enforcement agencies for its simple, long-lasting construction, modified for .45 rounds and a seven-shot cylinder." - icon_state = "detective" - caliber = ".45" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - ammo_type = /obj/item/ammo_casing/a45/rubber - max_shells = 6 - -/obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Rename your gun. If you're the Detective." - - var/mob/M = usr - if(!M.mind) return 0 - var/job = M.mind.assigned_role - if(job != "Detective") - to_chat(M, "You don't feel cool enough to name this gun, chump.") - return 0 - - var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) - - if(src && input && !M.stat && in_range(M,src)) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return 1 - -/obj/item/weapon/gun/projectile/revolver/detective45/verb/reskin_gun() - set name = "Resprite gun" - set category = "Object" - set desc = "Click to choose a sprite for your gun." - - var/mob/M = usr - var/list/options = list() - options["MarsTech R1 Snubnose"] = "detective" - options["MarsTech R1 Snubnose (Blued)"] = "detective_blued" - options["MarsTech R1 Snubnose (Stainless)"] = "detective_stainless" - options["MarsTech R1 Snubnose (Gold)"] = "detective_stainless" - options["MarsTech R1 Snubnose (Leopard)"] = "detective_leopard" - options["MarsTech Frontiersman Classic"] = "detective_peacemaker" - options["MarsTech Frontiersman Shadow"] = "detective_peacemaker_dark" - options["Jindal Duke"] = "detective_fitz" - options["H-H M1895"] = "nagant" - var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) - if(src && choice && !M.stat && in_range(M,src)) - icon_state = options[choice] - to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") - return 1 - -/* - * Lombardi Revolvers - * Use to be detective revolvers until seperated - */ -/obj/item/weapon/gun/projectile/revolver/lombardi - name = "Lombardi Buzzard" - desc = "A rugged revolver that is mostly used by small law enforcement agencies across the frontier as a cheap, reliable sidearm. Uses .357 rounds." - icon_state = "lombardi_police" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/obj/item/weapon/gun/projectile/revolver/lombardi/panther - name = "Lombardi Panther" - icon_state = "lombardi_panther" - -/obj/item/weapon/gun/projectile/revolver/lombardi/gold - name = "Lombardi Deluxe 2502" - desc = "A sweet looking revolver that is decorated with false gold and silver plating. Favored among by gamblers and criminals alike. Uses .357 rounds." - icon_state = "lombardi_gold" - -/* - * Captain's Peacekeeper - */ -/obj/item/weapon/gun/projectile/revolver/cappeacekeeper - name = "decorated peacekeeper" - desc = "A MarsTech Frontiersman revolver that has been heavily modified. It has been decorated for personal use by command officers. Uses .44 rounds." - description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ - MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon_state = "captains_peacemaker" - caliber = ".44" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - ammo_type = /obj/item/ammo_casing/a44 - -/* - * Mateba - */ -/obj/item/weapon/gun/projectile/revolver/mateba - name = "mateba" - desc = "This unique looking handgun is named after an Italian company famous for the original manufacture of \ - these revolvers, and pasta kneading machines. Uses .357 rounds." // Yes I'm serious. -Spades - icon_state = "mateba" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/* - * Deckard (Blade Runner) - */ -/obj/item/weapon/gun/projectile/revolver/deckard - name = "\improper \"Deckard\" .38" - desc = "A custom-built revolver, based off the semi-popular Detective Special model. Uses .38-Special rounds." - icon_state = "deckard-empty" - caliber = ".38" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - ammo_type = /obj/item/ammo_casing/a38 - move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 - -/obj/item/weapon/gun/projectile/revolver/deckard/emp - ammo_type = /obj/item/ammo_casing/a38/emp - - -/obj/item/weapon/gun/projectile/revolver/deckard/update_icon() - ..() - if(loaded.len) - icon_state = "deckard-loaded" - else - icon_state = "deckard-empty" - -/obj/item/weapon/gun/projectile/revolver/deckard/load_ammo(var/obj/item/A, mob/user) - if(istype(A, /obj/item/ammo_magazine)) - flick("deckard-reload",src) - ..() - -/* - * Judge - */ -/obj/item/weapon/gun/projectile/revolver/judge - name = "\"The Judge\"" - desc = "A revolving hand-shotgun by Jindal Arms that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12g rounds." - description_fluff = "While wholly owned by Hephaestus Industries, the Jindal Arms brand does not appear \ - prominently in most company catalogues (Perhaps owing to its less than prestigious image), \ - instead being sold almost exclusively through retailers and advertising platforms targeting the \ - 'independent roughneck' demographic." - icon_state = "judge" - caliber = "12g" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4) - max_shells = 5 - recoil = 2 // ow my fucking hand - accuracy = -15 // smooth bore + short barrel = shit accuracy - ammo_type = /obj/item/ammo_casing/a12g - projectile_type = /obj/item/projectile/bullet/shotgun - // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it. - -/* - * Mako - */ -/obj/item/weapon/gun/projectile/revolver/lemat - name = "Mako revolver" - desc = "The Bishamonten P100 Mako is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead. A rare yet deadly collector's item. Uses .38-Special and 12g rounds depending on the barrel." - description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \ - Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \ - Bishamonten weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons, and used very standard firing mechanisms - \ - the Mako was a notable exception, so original examples are much sought after." - icon_state = "combatrevolver" - item_state = "revolver" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - handle_casings = CYCLE_CASINGS - max_shells = 9 - caliber = ".38" - ammo_type = /obj/item/ammo_casing/a38 - projectile_type = /obj/item/projectile/bullet/pistol - var/secondary_max_shells = 1 - var/secondary_caliber = "12g" - var/secondary_ammo_type = /obj/item/ammo_casing/a12g - var/flipped_firing = 0 - var/list/secondary_loaded = list() - var/list/tertiary_loaded = list() - - -/obj/item/weapon/gun/projectile/revolver/lemat/New() - for(var/i in 1 to secondary_max_shells) - secondary_loaded += new secondary_ammo_type(src) - ..() - -/obj/item/weapon/gun/projectile/revolver/lemat/verb/swap_firingmode() - set name = "Swap Firing Mode" - set category = "Object" - set desc = "Click to swap from one method of firing to another." - - var/mob/living/carbon/human/M = usr - if(!M.mind) - return 0 - - to_chat(M, "You change the firing mode on \the [src].") - if(!flipped_firing) - if(max_shells && secondary_max_shells) - max_shells = secondary_max_shells - - if(caliber && secondary_caliber) - caliber = secondary_caliber - - if(ammo_type && secondary_ammo_type) - ammo_type = secondary_ammo_type - - if(secondary_loaded) - tertiary_loaded = loaded.Copy() - loaded = secondary_loaded - - flipped_firing = 1 - - else - if(max_shells) - max_shells = initial(max_shells) - - if(caliber && secondary_caliber) - caliber = initial(caliber) - - if(ammo_type && secondary_ammo_type) - ammo_type = initial(ammo_type) - - if(tertiary_loaded) - secondary_loaded = loaded.Copy() - loaded = tertiary_loaded - - flipped_firing = 0 - -/obj/item/weapon/gun/projectile/revolver/lemat/spin_cylinder() - set name = "Spin cylinder" - set desc = "Fun when you're bored out of your skull." - set category = "Object" - - chamber_offset = 0 - visible_message("\The [usr] spins the cylinder of \the [src]!", \ - "You hear something metallic spin and click.") - playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1) - if(!flipped_firing) - loaded = shuffle(loaded) - if(rand(1,max_shells) > loaded.len) - chamber_offset = rand(0,max_shells - loaded.len) - -/obj/item/weapon/gun/projectile/revolver/lemat/examine(mob/user) - . = ..() - if(secondary_loaded) - var/to_print - for(var/round in secondary_loaded) - to_print += round - . += "It has a secondary barrel loaded with \a [to_print]" - else - . += "It has a secondary barrel that is empty." - - -/* - * Webley (Bay Port) - */ -/obj/item/weapon/gun/projectile/revolver/webley - name = "patrol revolver" - desc = "A rugged top break revolver commonly issued to planetary law enforcement offices. Uses .44 magnum rounds." - description_fluff = "The Heberg-Hammarstrom Althing is a simple, head-wearing revolver made with an anti-corrosive alloy. \ - The Althing is advertised as being 'able to survive six months on the bottom of a frozen river and emerge full ready to \ - save a life'. Issued as standard sidearms to SifGuard frontier patrol." - icon_state = "webley2" - item_state = "webley2" - caliber = ".44" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - handle_casings = CYCLE_CASINGS - ammo_type = /obj/item/ammo_casing/a44 - -/* - * Webley (Eris Port) - */ -/obj/item/weapon/gun/projectile/revolver/consul - name = "\improper \"Consul\" Revolver" - desc = "Are you feeling lucky, punk? Uses .44 rounds." - icon_state = "inspector" - item_state = "revolver" - caliber = ".44" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - handle_casings = CYCLE_CASINGS - ammo_type = /obj/item/ammo_casing/a44/rubber - -/obj/item/weapon/gun/projectile/revolver/consul/proc/update_charge() - cut_overlays() - if(loaded.len==0) - add_overlay("inspector_off") - else - add_overlay("inspector_on") - -/obj/item/weapon/gun/projectile/revolver/consul/update_icon() - update_charge() +/* + * Revolver + */ +/obj/item/weapon/gun/projectile/revolver + name = "revolver" + desc = "The MarsTech HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds." + description_fluff = "MarsTech first made their name in the Second Cold War as the 'Lunar Arms Company' providing home-grown arms to the Selene Federation, \ + but after the formation of the SCG rebranded and relocated to Mars where they remain based to this day. \ + The company was acquired by Hephaestus in the mid 23rd century, and its branding used to present an image of historical prestige and Solar unity for their latest product line. \ + MarsTech operates production facilities out of many of the SCG’s larger colonies." + icon_state = "revolver" + item_state = "revolver" + caliber = ".357" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + handle_casings = CYCLE_CASINGS + max_shells = 6 + ammo_type = /obj/item/ammo_casing/a357 + projectile_type = /obj/item/projectile/bullet/pistol/strong + var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round + +/obj/item/weapon/gun/projectile/revolver/verb/spin_cylinder() + set name = "Spin cylinder" + set desc = "Fun when you're bored out of your skull." + set category = "Object" + + chamber_offset = 0 + visible_message("\The [usr] spins the cylinder of \the [src]!", \ + "You hear something metallic spin and click.") + playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1) + loaded = shuffle(loaded) + if(rand(1,max_shells) > loaded.len) + chamber_offset = rand(0,max_shells - loaded.len) + +/obj/item/weapon/gun/projectile/revolver/consume_next_projectile() + if(chamber_offset) + chamber_offset-- + return + return ..() + +/obj/item/weapon/gun/projectile/revolver/load_ammo(var/obj/item/A, mob/user) + chamber_offset = 0 + return ..() + +/obj/item/weapon/gun/projectile/revolver/stainless + icon_state = "revolver_stainless" + +/* + * Detective Revolver + */ +/obj/item/weapon/gun/projectile/revolver/detective + name = "revolver" + desc = "A standard MarsTech R1 snubnose revolver, popular among some law enforcement agencies for its simple, long-lasting construction. Uses .38-Special rounds." + description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." + icon_state = "detective" + caliber = ".38" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + ammo_type = /obj/item/ammo_casing/a38 + +/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun() + set name = "Name Gun" + set category = "Object" + set desc = "Click to rename your gun. If you're the detective." + + var/mob/M = usr + if(!M.mind) return 0 + if(!M.mind.assigned_role == "Detective") + to_chat(M, "You don't feel cool enough to name this gun, chump.") + return 0 + + var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src)) + name = input + to_chat(M, "You name the gun [input]. Say hello to your new friend.") + return 1 + +/obj/item/weapon/gun/projectile/revolver/detective45 + name = ".45 revolver" + desc = "A basic revolver, popular among some law enforcement agencies for its simple, long-lasting construction, modified for .45 rounds and a seven-shot cylinder." + icon_state = "detective" + caliber = ".45" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + ammo_type = /obj/item/ammo_casing/a45/rubber + max_shells = 6 + +/obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun() + set name = "Name Gun" + set category = "Object" + set desc = "Rename your gun. If you're the Detective." + + var/mob/M = usr + if(!M.mind) return 0 + var/job = M.mind.assigned_role + if(job != "Detective") + to_chat(M, "You don't feel cool enough to name this gun, chump.") + return 0 + + var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src)) + name = input + to_chat(M, "You name the gun [input]. Say hello to your new friend.") + return 1 + +/obj/item/weapon/gun/projectile/revolver/detective45/verb/reskin_gun() + set name = "Resprite gun" + set category = "Object" + set desc = "Click to choose a sprite for your gun." + + var/mob/M = usr + var/list/options = list() + options["MarsTech R1 Snubnose"] = "detective" + options["MarsTech R1 Snubnose (Blued)"] = "detective_blued" + options["MarsTech R1 Snubnose (Stainless)"] = "detective_stainless" + options["MarsTech R1 Snubnose (Gold)"] = "detective_stainless" + options["MarsTech R1 Snubnose (Leopard)"] = "detective_leopard" + options["MarsTech Frontiersman Classic"] = "detective_peacemaker" + options["MarsTech Frontiersman Shadow"] = "detective_peacemaker_dark" + options["Jindal Duke"] = "detective_fitz" + options["H-H M1895"] = "nagant" + var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) + if(src && choice && !M.stat && in_range(M,src)) + icon_state = options[choice] + to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") + return 1 + +/* + * Lombardi Revolvers + * Use to be detective revolvers until seperated + */ +/obj/item/weapon/gun/projectile/revolver/lombardi + name = "Lombardi Buzzard" + desc = "A rugged revolver that is mostly used by small law enforcement agencies across the frontier as a cheap, reliable sidearm. Uses .357 rounds." + icon_state = "lombardi_police" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + +/obj/item/weapon/gun/projectile/revolver/lombardi/panther + name = "Lombardi Panther" + icon_state = "lombardi_panther" + +/obj/item/weapon/gun/projectile/revolver/lombardi/gold + name = "Lombardi Deluxe 2502" + desc = "A sweet looking revolver that is decorated with false gold and silver plating. Favored among by gamblers and criminals alike. Uses .357 rounds." + icon_state = "lombardi_gold" + +/* + * Captain's Peacekeeper + */ +/obj/item/weapon/gun/projectile/revolver/cappeacekeeper + name = "decorated peacekeeper" + desc = "A MarsTech Frontiersman revolver that has been heavily modified. It has been decorated for personal use by command officers. Uses .44 rounds." + description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ + MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." + icon_state = "captains_peacemaker" + caliber = ".44" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) + ammo_type = /obj/item/ammo_casing/a44 + +/* + * Mateba + */ +/obj/item/weapon/gun/projectile/revolver/mateba + name = "mateba" + desc = "This unique looking handgun is named after an Italian company famous for the original manufacture of \ + these revolvers, and pasta kneading machines. Uses .357 rounds." // Yes I'm serious. -Spades + icon_state = "mateba" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + +/* + * Deckard (Blade Runner) + */ +/obj/item/weapon/gun/projectile/revolver/deckard + name = "\improper \"Deckard\" .38" + desc = "A custom-built revolver, based off the semi-popular Detective Special model. Uses .38-Special rounds." + icon_state = "deckard-empty" + caliber = ".38" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + ammo_type = /obj/item/ammo_casing/a38 + move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + +/obj/item/weapon/gun/projectile/revolver/deckard/emp + ammo_type = /obj/item/ammo_casing/a38/emp + + +/obj/item/weapon/gun/projectile/revolver/deckard/update_icon() + ..() + if(loaded.len) + icon_state = "deckard-loaded" + else + icon_state = "deckard-empty" + +/obj/item/weapon/gun/projectile/revolver/deckard/load_ammo(var/obj/item/A, mob/user) + if(istype(A, /obj/item/ammo_magazine)) + flick("deckard-reload",src) + ..() + +/* + * Judge + */ +/obj/item/weapon/gun/projectile/revolver/judge + name = "\"The Judge\"" + desc = "A revolving hand-shotgun by Jindal Arms that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12g rounds." + description_fluff = "While wholly owned by Hephaestus Industries, the Jindal Arms brand does not appear \ + prominently in most company catalogues (Perhaps owing to its less than prestigious image), \ + instead being sold almost exclusively through retailers and advertising platforms targeting the \ + 'independent roughneck' demographic." + icon_state = "judge" + caliber = "12g" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4) + max_shells = 5 + recoil = 2 // ow my fucking hand + accuracy = -15 // smooth bore + short barrel = shit accuracy + ammo_type = /obj/item/ammo_casing/a12g + projectile_type = /obj/item/projectile/bullet/shotgun + // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it. + +/* + * Mako + */ +/obj/item/weapon/gun/projectile/revolver/lemat + name = "Mako revolver" + desc = "The Bishamonten P100 Mako is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead. A rare yet deadly collector's item. Uses .38-Special and 12g rounds depending on the barrel." + description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \ + Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \ + Bishamonten weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons, and used very standard firing mechanisms - \ + the Mako was a notable exception, so original examples are much sought after." + icon_state = "combatrevolver" + item_state = "revolver" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + handle_casings = CYCLE_CASINGS + max_shells = 9 + caliber = ".38" + ammo_type = /obj/item/ammo_casing/a38 + projectile_type = /obj/item/projectile/bullet/pistol + var/secondary_max_shells = 1 + var/secondary_caliber = "12g" + var/secondary_ammo_type = /obj/item/ammo_casing/a12g + var/flipped_firing = 0 + var/list/secondary_loaded = list() + var/list/tertiary_loaded = list() + + +/obj/item/weapon/gun/projectile/revolver/lemat/New() + for(var/i in 1 to secondary_max_shells) + secondary_loaded += new secondary_ammo_type(src) + ..() + +/obj/item/weapon/gun/projectile/revolver/lemat/verb/swap_firingmode() + set name = "Swap Firing Mode" + set category = "Object" + set desc = "Click to swap from one method of firing to another." + + var/mob/living/carbon/human/M = usr + if(!M.mind) + return 0 + + to_chat(M, "You change the firing mode on \the [src].") + if(!flipped_firing) + if(max_shells && secondary_max_shells) + max_shells = secondary_max_shells + + if(caliber && secondary_caliber) + caliber = secondary_caliber + + if(ammo_type && secondary_ammo_type) + ammo_type = secondary_ammo_type + + if(secondary_loaded) + tertiary_loaded = loaded.Copy() + loaded = secondary_loaded + + flipped_firing = 1 + + else + if(max_shells) + max_shells = initial(max_shells) + + if(caliber && secondary_caliber) + caliber = initial(caliber) + + if(ammo_type && secondary_ammo_type) + ammo_type = initial(ammo_type) + + if(tertiary_loaded) + secondary_loaded = loaded.Copy() + loaded = tertiary_loaded + + flipped_firing = 0 + +/obj/item/weapon/gun/projectile/revolver/lemat/spin_cylinder() + set name = "Spin cylinder" + set desc = "Fun when you're bored out of your skull." + set category = "Object" + + chamber_offset = 0 + visible_message("\The [usr] spins the cylinder of \the [src]!", \ + "You hear something metallic spin and click.") + playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1) + if(!flipped_firing) + loaded = shuffle(loaded) + if(rand(1,max_shells) > loaded.len) + chamber_offset = rand(0,max_shells - loaded.len) + +/obj/item/weapon/gun/projectile/revolver/lemat/examine(mob/user) + . = ..() + if(secondary_loaded) + var/to_print + for(var/round in secondary_loaded) + to_print += round + . += "It has a secondary barrel loaded with \a [to_print]" + else + . += "It has a secondary barrel that is empty." + + +/* + * Webley (Bay Port) + */ +/obj/item/weapon/gun/projectile/revolver/webley + name = "patrol revolver" + desc = "A rugged top break revolver commonly issued to planetary law enforcement offices. Uses .44 magnum rounds." + description_fluff = "The Heberg-Hammarstrom Althing is a simple, head-wearing revolver made with an anti-corrosive alloy. \ + The Althing is advertised as being 'able to survive six months on the bottom of a frozen river and emerge full ready to \ + save a life'. Issued as standard sidearms to SifGuard frontier patrol." + icon_state = "webley2" + item_state = "webley2" + caliber = ".44" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + handle_casings = CYCLE_CASINGS + ammo_type = /obj/item/ammo_casing/a44 + +/* + * Webley (Eris Port) + */ +/obj/item/weapon/gun/projectile/revolver/consul + name = "\improper \"Consul\" Revolver" + desc = "Are you feeling lucky, punk? Uses .44 rounds." + icon_state = "inspector" + item_state = "revolver" + caliber = ".44" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) + handle_casings = CYCLE_CASINGS + ammo_type = /obj/item/ammo_casing/a44/rubber + +/obj/item/weapon/gun/projectile/revolver/consul/proc/update_charge() + cut_overlays() + if(loaded.len==0) + add_overlay("inspector_off") + else + add_overlay("inspector_on") + +/obj/item/weapon/gun/projectile/revolver/consul/update_icon() + update_charge() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 2255bb9356..a69c47d4a4 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,246 +1,246 @@ -/* - * Shotgun - */ - -/obj/item/weapon/gun/projectile/shotgun/pump - name = "shotgun" -// desc = "The mass-produced MarsTech Meteor 29 shotgun is a favourite of police and security forces on many worlds. Uses 12g rounds." //CHOMP Disable - desc = "I used the shotgun. You know why? Cause the shotgun doesn't miss, and unlike the shitty hybrid taser it stops \ - a criminal in their tracks in two hits. Bang, bang, and they're fucking done. I use four shots just to make damn sure. \ - Because, once again, I'm not there to coddle a buncha criminal scum sucking losers, I'm there to 1) Survive the fucking round. \ - 2) Guard the armory. So you can absolutely get fucked. If I get unbanned, which I won't, you can guarantee I will continue to use \ - the shotgun to apprehend criminals. Because it's quick, clean and effective as fuck. Why in the seven hells would I fuck around \ - with the disabler shots, which take half a clip just to bring someone down, or with the tazer bolts which are slow as balls, \ - impossible to aim and do about next to jack shit, fuck all. The shotgun is the superior law enforcement weapon. Because it stops crime. \ - And it stops crime by reducing the number of criminals roaming the fucking halls." //CHOMP Add - description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ - MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon_state = "shotgun" - item_state = "shotgun" - max_shells = 4 - w_class = ITEMSIZE_HUGE //CHOMP Edit. - force = 10 - slot_flags = SLOT_BACK - caliber = "12g" - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) - load_method = SINGLE_CASING|SPEEDLOADER - ammo_type = /obj/item/ammo_casing/a12g/beanbag - projectile_type = /obj/item/projectile/bullet/shotgun - handle_casings = HOLD_CASINGS - var/recentpump = 0 //To prevent spammage - var/action_sound = 'sound/weapons/shotgunpump.ogg' - var/empty_sprite = 0 //This is just a dirty var so it doesn't fudge up. - var/pump_animation = "shotgun-pump" //You put the reference to the animation in question here. Frees up namming. Ex: "shotgun_old_pump" or "sniper_cycle" - -/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile() - if(chambered) - return chambered.BB - return null - -/obj/item/weapon/gun/projectile/shotgun/pump/attack_self(mob/living/user as mob) - if(world.time >= recentpump + 10) - pump(user) - recentpump = world.time - -/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob) - playsound(src, action_sound, 60, 1) - - // We have a shell in the chamber - if(chambered) - if(chambered.caseless) - qdel(chambered) // Delete casing - else - chambered.loc = get_turf(src) // Eject casing - chambered = null - M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port - - // Load next shell - if(loaded.len) - var/obj/item/ammo_casing/AC = loaded[1] // Load next casing. - loaded -= AC // Remove casing from loaded list. - chambered = AC - M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port - - if(pump_animation) // This affects all bolt action and shotguns. - flick("[pump_animation]", src) // This plays any pumping - - update_icon() - -/obj/item/weapon/gun/projectile/shotgun/pump/update_icon()//This adds empty sprite capability for shotguns. - ..() - if(!empty_sprite)//Just a dirty check - return - if((loaded.len) || (chambered)) - icon_state = "[icon_state]" - else - icon_state = "[icon_state]-empty" - -/obj/item/weapon/gun/projectile/shotgun/pump/empty - ammo_type = null - -/obj/item/weapon/gun/projectile/shotgun/pump/slug - ammo_type = /obj/item/ammo_casing/a12g - pump_animation = null - -/* - * Combat Shotgun - */ -/obj/item/weapon/gun/projectile/shotgun/pump/combat - name = "combat shotgun" - desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. Uses 12g rounds." - description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' \ - branding for its military-grade equipment used by armed forces across human space." - icon_state = "cshotgun" - item_state = "cshotgun" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8. - ammo_type = /obj/item/ammo_casing/a12g - load_method = SINGLE_CASING|SPEEDLOADER - pump_animation = "cshotgun-pump" - -/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty - ammo_type = null - -/* - * Double-Barreled Shotgun - */ -/obj/item/weapon/gun/projectile/shotgun/doublebarrel - name = "double-barreled shotgun" - desc = "A truely classic weapon. No need to change what works. Uses 12g rounds." - icon_state = "dshotgun" - item_state = "dshotgun" - //SPEEDLOADER because rapid unloading. - //In principle someone could make a speedloader for it, so it makes sense. - load_method = SINGLE_CASING|SPEEDLOADER - handle_casings = CYCLE_CASINGS - max_shells = 2 - w_class = ITEMSIZE_LARGE - force = 10 - slot_flags = SLOT_BACK - caliber = "12g" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1) - ammo_type = /obj/item/ammo_casing/a12g/beanbag - -// var/unique_reskin CHOMP Remove - var/sawn_off = FALSE - - burst_delay = 0 - firemodes = list( - list(mode_name="fire one barrel at a time", burst=1), - list(mode_name="fire both barrels at once", burst=2), - ) - -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet - ammo_type = /obj/item/ammo_casing/a12g/pellet - -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare - name = "signal shotgun" - desc = "A double-barreled shotgun meant to fire signal flash shells. Uses 12g rounds." - ammo_type = /obj/item/ammo_casing/a12g/flash - -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump) - ..(user, allow_dump=1) -/*CHOMP Remove start -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Rename your gun." - - var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) - - var/mob/M = usr - if(src && input && !M.stat && in_range(M,src)) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return 1 - -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/verb/reskin_gun() - set name = "Resprite gun" - set category = "Object" - set desc = "Click to choose a sprite for your gun." - - var/mob/M = usr - var/list/options = list() - options["Default"] = "dshotgun" - options["Cherry Red"] = "dshotgun_d" - options["Ash"] = "dshotgun_f" - options["Faded Grey"] = "dshotgun_g" - options["Maple"] = "dshotgun_l" - options["Rosewood"] = "dshotgun_p" - options["Olive Green"] = "dshotgun_o" - options["Blued"] = "dshotgun_b" - var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) - if(sawn_off) - to_chat(M, "The [src] is already shortened and cannot be resprited!") - return - if(src && choice && !M.stat && in_range(M,src)) - icon_state = options[choice] - unique_reskin = options[choice] - to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") - return 1 -*/ //CHOMP Remove end -//this is largely hacky and bad :( -Pete //less hacky and bad now :) -Ghost -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob) - if(istype(A, /obj/item/ammo_casing/a12g) || istype(A, /obj/item/ammo_magazine)) //CHOMPEdit: Trying to make sawn offs reload able - ..() - if(sawn_off) - to_chat(user, "The [src] is already shortened!") - return - if(istype(A, /obj/item/weapon/surgical/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)) - to_chat(user, "You begin to shorten the barrel of \the [src].") - if(loaded.len) - var/burstsetting = burst - burst = 2 - user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!") - Fire_userless(user) - user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port - burst = burstsetting - return - if(do_after(user, 30)) // SHIT IS STEALTHY EYYYYY - if(sawn_off) - return -// if(unique_reskin) //CHOMP Remove -// icon_state = "[unique_reskin]_sawn" //CHOMP Remove -// else //CHOMP Remove -// icon_state = "dshotgun_sawn" //CHOMP Remove - item_state = "sawnshotgun" - w_class = ITEMSIZE_NORMAL - force = 5 - slot_flags &= ~SLOT_BACK // you can't sling it on your back - slot_flags |= (SLOT_BELT|SLOT_HOLSTER) // but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not. - name = "sawn-off shotgun" - desc = "Omar's coming!" - to_chat(user, "You shorten the barrel of \the [src]!") - sawn_off = TRUE - else - ..() - -/* - * Sawn-Off Shotgun - */ -/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn - name = "sawn-off shotgun" - desc = "Omar's coming!" // I'm not gonna add "Uses 12g rounds." to this one. I'll just let this reference go undisturbed. - icon_state = "dshotgun_sawn" - item_state = "sawnshotgun" - slot_flags = SLOT_BELT|SLOT_HOLSTER - ammo_type = /obj/item/ammo_casing/a12g/pellet - w_class = ITEMSIZE_NORMAL - force = 5 - sawn_off = TRUE - -//Sjorgen Inertial Shotgun -/obj/item/weapon/gun/projectile/shotgun/semi - name = "semi-automatic shotgun" - desc = "A shotgun with a simple, yet effective recoil inertia loading mechanism for semi-automatic fire. This gun uses 12 gauge ammunition." - description_fluff = "Looking back on yet another venerable design, Hedberg-Hammarstrom settled on a pattern of shotgun that both had the reliability of a well proven semi-automatic loading system in addition to a striking visual aesthetic that would be appealing to even the most discerning of firearm collectors." - icon_state = "sjorgen" - item_state = "shotgun" - w_class = ITEMSIZE_LARGE - caliber = "12g" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - slot_flags = SLOT_BACK - load_method = SINGLE_CASING - max_shells = 5 - ammo_type = /obj/item/ammo_casing/a12g/beanbag - +/* + * Shotgun + */ + +/obj/item/weapon/gun/projectile/shotgun/pump + name = "shotgun" +// desc = "The mass-produced MarsTech Meteor 29 shotgun is a favourite of police and security forces on many worlds. Uses 12g rounds." //CHOMP Disable + desc = "I used the shotgun. You know why? Cause the shotgun doesn't miss, and unlike the shitty hybrid taser it stops \ + a criminal in their tracks in two hits. Bang, bang, and they're fucking done. I use four shots just to make damn sure. \ + Because, once again, I'm not there to coddle a buncha criminal scum sucking losers, I'm there to 1) Survive the fucking round. \ + 2) Guard the armory. So you can absolutely get fucked. If I get unbanned, which I won't, you can guarantee I will continue to use \ + the shotgun to apprehend criminals. Because it's quick, clean and effective as fuck. Why in the seven hells would I fuck around \ + with the disabler shots, which take half a clip just to bring someone down, or with the tazer bolts which are slow as balls, \ + impossible to aim and do about next to jack shit, fuck all. The shotgun is the superior law enforcement weapon. Because it stops crime. \ + And it stops crime by reducing the number of criminals roaming the fucking halls." //CHOMP Add + description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ + MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." + icon_state = "shotgun" + item_state = "shotgun" + max_shells = 4 + w_class = ITEMSIZE_HUGE //CHOMP Edit. + force = 10 + slot_flags = SLOT_BACK + caliber = "12g" + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) + load_method = SINGLE_CASING|SPEEDLOADER + ammo_type = /obj/item/ammo_casing/a12g/beanbag + projectile_type = /obj/item/projectile/bullet/shotgun + handle_casings = HOLD_CASINGS + var/recentpump = 0 //To prevent spammage + var/action_sound = 'sound/weapons/shotgunpump.ogg' + var/empty_sprite = 0 //This is just a dirty var so it doesn't fudge up. + var/pump_animation = "shotgun-pump" //You put the reference to the animation in question here. Frees up namming. Ex: "shotgun_old_pump" or "sniper_cycle" + +/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile() + if(chambered) + return chambered.BB + return null + +/obj/item/weapon/gun/projectile/shotgun/pump/attack_self(mob/living/user as mob) + if(world.time >= recentpump + 10) + pump(user) + recentpump = world.time + +/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob) + playsound(src, action_sound, 60, 1) + + // We have a shell in the chamber + if(chambered) + if(chambered.caseless) + qdel(chambered) // Delete casing + else + chambered.loc = get_turf(src) // Eject casing + chambered = null + M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port + + // Load next shell + if(loaded.len) + var/obj/item/ammo_casing/AC = loaded[1] // Load next casing. + loaded -= AC // Remove casing from loaded list. + chambered = AC + M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port + + if(pump_animation) // This affects all bolt action and shotguns. + flick("[pump_animation]", src) // This plays any pumping + + update_icon() + +/obj/item/weapon/gun/projectile/shotgun/pump/update_icon()//This adds empty sprite capability for shotguns. + ..() + if(!empty_sprite)//Just a dirty check + return + if((loaded.len) || (chambered)) + icon_state = "[icon_state]" + else + icon_state = "[icon_state]-empty" + +/obj/item/weapon/gun/projectile/shotgun/pump/empty + ammo_type = null + +/obj/item/weapon/gun/projectile/shotgun/pump/slug + ammo_type = /obj/item/ammo_casing/a12g + pump_animation = null + +/* + * Combat Shotgun + */ +/obj/item/weapon/gun/projectile/shotgun/pump/combat + name = "combat shotgun" + desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. Uses 12g rounds." + description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' \ + branding for its military-grade equipment used by armed forces across human space." + icon_state = "cshotgun" + item_state = "cshotgun" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) + max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8. + ammo_type = /obj/item/ammo_casing/a12g + load_method = SINGLE_CASING|SPEEDLOADER + pump_animation = "cshotgun-pump" + +/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty + ammo_type = null + +/* + * Double-Barreled Shotgun + */ +/obj/item/weapon/gun/projectile/shotgun/doublebarrel + name = "double-barreled shotgun" + desc = "A truely classic weapon. No need to change what works. Uses 12g rounds." + icon_state = "dshotgun" + item_state = "dshotgun" + //SPEEDLOADER because rapid unloading. + //In principle someone could make a speedloader for it, so it makes sense. + load_method = SINGLE_CASING|SPEEDLOADER + handle_casings = CYCLE_CASINGS + max_shells = 2 + w_class = ITEMSIZE_LARGE + force = 10 + slot_flags = SLOT_BACK + caliber = "12g" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1) + ammo_type = /obj/item/ammo_casing/a12g/beanbag + +// var/unique_reskin CHOMP Remove + var/sawn_off = FALSE + + burst_delay = 0 + firemodes = list( + list(mode_name="fire one barrel at a time", burst=1), + list(mode_name="fire both barrels at once", burst=2), + ) + +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet + ammo_type = /obj/item/ammo_casing/a12g/pellet + +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare + name = "signal shotgun" + desc = "A double-barreled shotgun meant to fire signal flash shells. Uses 12g rounds." + ammo_type = /obj/item/ammo_casing/a12g/flash + +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump) + ..(user, allow_dump=1) +/*CHOMP Remove start +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/verb/rename_gun() + set name = "Name Gun" + set category = "Object" + set desc = "Rename your gun." + + var/input = sanitizeSafe(input(usr, "What do you want to name the gun?", ,""), MAX_NAME_LEN) + + var/mob/M = usr + if(src && input && !M.stat && in_range(M,src)) + name = input + to_chat(M, "You name the gun [input]. Say hello to your new friend.") + return 1 + +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/verb/reskin_gun() + set name = "Resprite gun" + set category = "Object" + set desc = "Click to choose a sprite for your gun." + + var/mob/M = usr + var/list/options = list() + options["Default"] = "dshotgun" + options["Cherry Red"] = "dshotgun_d" + options["Ash"] = "dshotgun_f" + options["Faded Grey"] = "dshotgun_g" + options["Maple"] = "dshotgun_l" + options["Rosewood"] = "dshotgun_p" + options["Olive Green"] = "dshotgun_o" + options["Blued"] = "dshotgun_b" + var/choice = tgui_input_list(M,"Choose your sprite!","Resprite Gun", options) + if(sawn_off) + to_chat(M, "The [src] is already shortened and cannot be resprited!") + return + if(src && choice && !M.stat && in_range(M,src)) + icon_state = options[choice] + unique_reskin = options[choice] + to_chat(M, "Your gun is now sprited as [choice]. Say hello to your new friend.") + return 1 +*/ //CHOMP Remove end +//this is largely hacky and bad :( -Pete //less hacky and bad now :) -Ghost +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob) + if(istype(A, /obj/item/ammo_casing/a12g) || istype(A, /obj/item/ammo_magazine)) //CHOMPEdit: Trying to make sawn offs reload able + ..() + if(sawn_off) + to_chat(user, "The [src] is already shortened!") + return + if(istype(A, /obj/item/weapon/surgical/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)) + to_chat(user, "You begin to shorten the barrel of \the [src].") + if(loaded.len) + var/burstsetting = burst + burst = 2 + user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!") + Fire_userless(user) + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port + burst = burstsetting + return + if(do_after(user, 30)) // SHIT IS STEALTHY EYYYYY + if(sawn_off) + return +// if(unique_reskin) //CHOMP Remove +// icon_state = "[unique_reskin]_sawn" //CHOMP Remove +// else //CHOMP Remove +// icon_state = "dshotgun_sawn" //CHOMP Remove + item_state = "sawnshotgun" + w_class = ITEMSIZE_NORMAL + force = 5 + slot_flags &= ~SLOT_BACK // you can't sling it on your back + slot_flags |= (SLOT_BELT|SLOT_HOLSTER) // but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not. + name = "sawn-off shotgun" + desc = "Omar's coming!" + to_chat(user, "You shorten the barrel of \the [src]!") + sawn_off = TRUE + else + ..() + +/* + * Sawn-Off Shotgun + */ +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn + name = "sawn-off shotgun" + desc = "Omar's coming!" // I'm not gonna add "Uses 12g rounds." to this one. I'll just let this reference go undisturbed. + icon_state = "dshotgun_sawn" + item_state = "sawnshotgun" + slot_flags = SLOT_BELT|SLOT_HOLSTER + ammo_type = /obj/item/ammo_casing/a12g/pellet + w_class = ITEMSIZE_NORMAL + force = 5 + sawn_off = TRUE + +//Sjorgen Inertial Shotgun +/obj/item/weapon/gun/projectile/shotgun/semi + name = "semi-automatic shotgun" + desc = "A shotgun with a simple, yet effective recoil inertia loading mechanism for semi-automatic fire. This gun uses 12 gauge ammunition." + description_fluff = "Looking back on yet another venerable design, Hedberg-Hammarstrom settled on a pattern of shotgun that both had the reliability of a well proven semi-automatic loading system in addition to a striking visual aesthetic that would be appealing to even the most discerning of firearm collectors." + icon_state = "sjorgen" + item_state = "shotgun" + w_class = ITEMSIZE_LARGE + caliber = "12g" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) + slot_flags = SLOT_BACK + load_method = SINGLE_CASING + max_shells = 5 + ammo_type = /obj/item/ammo_casing/a12g/beanbag + diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 606d4ac28f..583b8b3219 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,835 +1,835 @@ -#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. -#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. - -/obj/item/projectile - name = "projectile" - icon = 'icons/obj/projectiles.dmi' - icon_state = "bullet" - density = FALSE - anchored = TRUE - unacidable = TRUE - pass_flags = PASSTABLE - mouse_opacity = 0 - hitsound = 'sound/weapons/pierce.ogg' - - blocks_emissive = EMISSIVE_BLOCK_GENERIC - - var/hitsound_wall = null // Played when something hits a wall, or anything else that isn't a mob. - - ////TG PROJECTILE SYTSEM - //Projectile stuff - var/range = 50 - var/originalRange - - //Fired processing vars - var/fired = FALSE //Have we been fired yet - var/paused = FALSE //for suspending the projectile midair - var/last_projectile_move = 0 - var/last_process = 0 - var/time_offset = 0 - var/datum/point/vector/trajectory - var/trajectory_ignore_forcemove = FALSE //instructs forceMove to NOT reset our trajectory to the new location! - var/ignore_source_check = FALSE - - var/speed = 0.8 //Amount of deciseconds it takes for projectile to travel - var/Angle = 0 - var/original_angle = 0 //Angle at firing - var/nondirectional_sprite = FALSE //Set TRUE to prevent projectiles from having their sprites rotated based on firing angle - var/spread = 0 //amount (in degrees) of projectile spread - animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy - var/ricochets = 0 - var/ricochets_max = 2 - var/ricochet_chance = 30 - var/can_miss = TRUE - - //Hitscan - var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. - var/list/beam_segments //assoc list of datum/point or datum/point/vector, start = end. Used for hitscan effect generation. - var/datum/point/beam_index - var/turf/hitscan_last //last turf touched during hitscanning. - var/tracer_type - var/muzzle_type - var/impact_type - var/datum/beam_components_cache/beam_components - - //Fancy hitscan lighting effects! - light_on = TRUE - var/hitscan_light_intensity = 1.5 - var/hitscan_light_range = 0.75 - var/hitscan_light_color_override - var/muzzle_flash_intensity = 3 - var/muzzle_flash_range = 1.5 - var/muzzle_flash_color_override - var/impact_light_intensity = 3 - var/impact_light_range = 2 - var/impact_light_color_override - - //Homing - var/homing = FALSE - var/atom/homing_target - var/homing_turn_speed = 10 //Angle per tick. - var/homing_inaccuracy_min = 0 //in pixels for these. offsets are set once when setting target. - var/homing_inaccuracy_max = 0 - var/homing_offset_x = 0 - var/homing_offset_y = 0 - - //Targetting - var/yo = null - var/xo = null - var/atom/original = null // the original target clicked - var/turf/starting = null // the projectile's starting turf - var/list/permutated = list() // we've passed through these atoms, don't try to hit them again - var/p_x = 16 - var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center - - //Misc/Polaris variables - - var/def_zone = "" //Aiming at - var/mob/firer = null //Who shot it - var/silenced = FALSE //Attack message - var/shot_from = "" // name of the object which shot us - - var/accuracy = 0 - var/dispersion = 0.0 - - // Sub-munitions. Basically, multi-projectile shotgun, rather than pellets. - var/use_submunitions = FALSE - var/only_submunitions = FALSE // Will the projectile delete itself after firing the submunitions? - var/list/submunitions = list() // Assoc list of the paths of any submunitions, and how many they are. [projectilepath] = [projectilecount]. - var/submunition_spread_max = 30 // Divided by 10 to get the percentile dispersion. - var/submunition_spread_min = 5 // Above. - var/force_max_submunition_spread = FALSE // Do we just force the maximum? - var/spread_submunition_damage = FALSE // Do we assign damage to our sub projectiles based on our main projectile damage? - - var/damage = 10 - var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS, ELECTROCUTE, BIOACID, SEARING are the only things that should be in here - var/SA_bonus_damage = 0 // Some bullets inflict extra damage on simple animals. - var/SA_vulnerability = null // What kind of simple animal the above bonus damage should be applied to. Set to null to apply to all SAs. - var/nodamage = 0 //Determines if the projectile will skip any damage inflictions - var/taser_effect = 0 //If set then the projectile will apply it's agony damage using stun_effect_act() to mobs it hits, and other damage will be ignored - var/check_armour = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid - var/projectile_type = /obj/item/projectile - var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate() - //Effects - var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 for intense fire. - Mech - var/flammability = 0 //Amount of fire stacks to add for the above. - var/combustion = TRUE //Does this set off flammable objects on fire/hit? - var/stun = 0 - var/weaken = 0 - var/paralyze = 0 - var/irradiate = 0 - var/stutter = 0 - var/eyeblur = 0 - var/drowsy = 0 - var/agony = 0 - var/reflected = 0 // This should be set to 1 if reflected by any means, to prevent infinite reflections. - var/modifier_type_to_apply = null // If set, will apply a modifier to mobs that are hit by this projectile. - var/modifier_duration = null // How long the above modifier should last for. Leave null to be permanent. - var/excavation_amount = 0 // How much, if anything, it drills from a mineral turf. - - embed_chance = 0 //Base chance for a projectile to embed - - var/fire_sound = 'sound/weapons/Gunshot_old.ogg' // Can be overriden in gun.dm's fire_sound var. It can also be null but I don't know why you'd ever want to do that. -Ace - - var/vacuum_traversal = TRUE //Determines if the projectile can exist in vacuum, if false, the projectile will be deleted if it enters vacuum. - - var/temporary_unstoppable_movement = FALSE - - // When a non-hitscan projectile hits something, a visual effect can be spawned. - // This is distinct from the hitscan's "impact_type" var. - var/impact_effect_type = null - - var/list/impacted_mobs = list() - - // TGMC Ammo HUD Port - var/hud_state = "unknown" // What HUD state we use when we have ammunition. - var/hud_state_empty = "unknown" // The empty state. DON'T USE _FLASH IN THE NAME OF THE EMPTY STATE STRING, THAT IS ADDED BY THE CODE. - -/obj/item/projectile/proc/Range() - range-- - if(range <= 0 && loc) - on_range() - -/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range - impact_sounds(loc) - impact_visuals(loc) // So it does a little 'burst' effect, but not actually do anything (unless overrided). - qdel(src) - -/obj/item/projectile/proc/return_predicted_turf_after_moves(moves, forced_angle) //I say predicted because there's no telling that the projectile won't change direction/location in flight. - if(!trajectory && isnull(forced_angle) && isnull(Angle)) - return FALSE - var/datum/point/vector/current = trajectory - if(!current) - var/turf/T = get_turf(src) - current = new(T.x, T.y, T.z, pixel_x, pixel_y, isnull(forced_angle)? Angle : forced_angle, SSprojectiles.global_pixel_speed) - var/datum/point/vector/v = current.return_vector_after_increments(moves * SSprojectiles.global_iterations_per_move) - return v.return_turf() - -/obj/item/projectile/proc/return_pathing_turfs_in_moves(moves, forced_angle) - var/turf/current = get_turf(src) - var/turf/ending = return_predicted_turf_after_moves(moves, forced_angle) - return getline(current, ending) - -/obj/item/projectile/proc/set_pixel_speed(new_speed) - if(trajectory) - trajectory.set_speed(new_speed) - return TRUE - return FALSE - -/obj/item/projectile/proc/record_hitscan_start(datum/point/pcache) - if(pcache) - beam_segments = list() - beam_index = pcache - beam_segments[beam_index] = null //record start. - -/obj/item/projectile/proc/process_hitscan() - var/safety = range * 3 - record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1)) - while(loc && !QDELETED(src)) - if(paused) - stoplag(1) - continue - if(safety-- <= 0) - if(loc) - Bump(loc) - if(!QDELETED(src)) - qdel(src) - return //Kill! - pixel_move(1, TRUE) - -/obj/item/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE) - if(!loc || !trajectory) - return - last_projectile_move = world.time - if(homing) - process_homing() - var/forcemoved = FALSE - for(var/i in 1 to SSprojectiles.global_iterations_per_move) - if(QDELETED(src)) - return - trajectory.increment(trajectory_multiplier) - var/turf/T = trajectory.return_turf() - if(!istype(T)) - qdel(src) - return - if(T.z != loc.z) - var/old = loc - before_z_change(loc, T) - trajectory_ignore_forcemove = TRUE - forceMove(T) - trajectory_ignore_forcemove = FALSE - after_z_change(old, loc) - if(!hitscanning) - pixel_x = trajectory.return_px() - pixel_y = trajectory.return_py() - forcemoved = TRUE - hitscan_last = loc - else if(T != loc) - before_move() - step_towards(src, T) - hitscan_last = loc - after_move() - if(can_hit_target(original, permutated)) - Bump(original) - if(!hitscanning && !forcemoved) - pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier * SSprojectiles.global_iterations_per_move - pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier * SSprojectiles.global_iterations_per_move - animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW) - Range() - -/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. - if(AM.is_incorporeal()) - return - ..() - if(isliving(AM) && !(pass_flags & PASSMOB)) - var/mob/living/L = AM - if(can_hit_target(L, permutated, (AM == original))) - Bump(AM) - -/obj/item/projectile/proc/process_homing() //may need speeding up in the future performance wise. - if(!homing_target) - return FALSE - var/datum/point/PT = RETURN_PRECISE_POINT(homing_target) - PT.x += CLAMP(homing_offset_x, 1, world.maxx) - PT.y += CLAMP(homing_offset_y, 1, world.maxy) - var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT)) - setAngle(Angle + CLAMP(angle, -homing_turn_speed, homing_turn_speed)) - -/obj/item/projectile/proc/set_homing_target(atom/A) - if(!A || (!isturf(A) && !isturf(A.loc))) - return FALSE - homing = TRUE - homing_target = A - homing_offset_x = rand(homing_inaccuracy_min, homing_inaccuracy_max) - homing_offset_y = rand(homing_inaccuracy_min, homing_inaccuracy_max) - if(prob(50)) - homing_offset_x = -homing_offset_x - if(prob(50)) - homing_offset_y = -homing_offset_y - -/obj/item/projectile/process() - last_process = world.time - if(!loc || !fired || !trajectory) - fired = FALSE - return PROCESS_KILL - if(paused || !isturf(loc)) - last_projectile_move += world.time - last_process //Compensates for pausing, so it doesn't become a hitscan projectile when unpaused from charged up ticks. - return - var/elapsed_time_deciseconds = (world.time - last_projectile_move) + time_offset - time_offset = 0 - var/required_moves = speed > 0? FLOOR(elapsed_time_deciseconds / speed, 1) : MOVES_HITSCAN //Would be better if a 0 speed made hitscan but everyone hates those so I can't make it a universal system :< - if(required_moves == MOVES_HITSCAN) - required_moves = SSprojectiles.global_max_tick_moves - else - if(required_moves > SSprojectiles.global_max_tick_moves) - var/overrun = required_moves - SSprojectiles.global_max_tick_moves - required_moves = SSprojectiles.global_max_tick_moves - time_offset += overrun * speed - time_offset += MODULUS(elapsed_time_deciseconds, speed) - - for(var/i in 1 to required_moves) - pixel_move(1, FALSE) - -/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides. - Angle = new_angle - if(!nondirectional_sprite) - var/matrix/M = new - M.Turn(Angle) - transform = M - if(trajectory) - trajectory.set_angle(new_angle) - return TRUE - -/obj/item/projectile/forceMove(atom/target) - if(!isloc(target) || !isloc(loc) || !z) - return ..() - var/zc = target.z != z - var/old = loc - if(zc) - before_z_change(old, target) - . = ..() - if(trajectory && !trajectory_ignore_forcemove && isturf(target)) - if(hitscan) - finalize_hitscan_and_generate_tracers(FALSE) - trajectory.initialize_location(target.x, target.y, target.z, 0, 0) - if(hitscan) - record_hitscan_start(RETURN_PRECISE_POINT(src)) - if(zc) - after_z_change(old, target) - -/obj/item/projectile/proc/fire(angle, atom/direct_target) - //If no angle needs to resolve it from xo/yo! - if(direct_target) - direct_target.bullet_act(src, def_zone) - qdel(src) - return - if(isnum(angle)) - setAngle(angle) - starting = get_turf(src) - if(isnull(Angle)) //Try to resolve through offsets if there's no angle set. - if(isnull(xo) || isnull(yo)) - stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!") - qdel(src) - return - var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z) - setAngle(Get_Angle(src, target)) - if(dispersion) - setAngle(Angle + rand(-dispersion, dispersion)) - original_angle = Angle - trajectory_ignore_forcemove = TRUE - forceMove(starting) - trajectory_ignore_forcemove = FALSE - trajectory = new(starting.x, starting.y, starting.z, pixel_x, pixel_y, Angle, SSprojectiles.global_pixel_speed) - last_projectile_move = world.time - permutated = list() - originalRange = range - fired = TRUE - if(hitscan) - . = process_hitscan() - START_PROCESSING(SSprojectiles, src) - pixel_move(1, FALSE) //move it now! - -/obj/item/projectile/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - if(temporary_unstoppable_movement) - temporary_unstoppable_movement = FALSE - DISABLE_BITFIELD(movement_type, UNSTOPPABLE) - if(fired && can_hit_target(original, permutated, TRUE)) - Bump(original) - -/obj/item/projectile/proc/after_z_change(atom/olcloc, atom/newloc) - -/obj/item/projectile/proc/before_z_change(atom/oldloc, atom/newloc) - -/obj/item/projectile/proc/before_move() - return - -/obj/item/projectile/proc/after_move() - return - -/obj/item/projectile/proc/store_hitscan_collision(datum/point/pcache) - beam_segments[beam_index] = pcache - beam_index = pcache - beam_segments[beam_index] = null - -//Spread is FORCED! -/obj/item/projectile/proc/preparePixelProjectile(atom/target, atom/source, params, spread = 0) - var/turf/curloc = get_turf(source) - var/turf/targloc = get_turf(target) - - if(istype(source, /atom/movable)) - var/atom/movable/MT = source - if(MT.locs && MT.locs.len) // Multi tile! - for(var/turf/T in MT.locs) - if(get_dist(T, target) < get_turf(curloc)) - curloc = get_turf(T) - - trajectory_ignore_forcemove = TRUE - forceMove(get_turf(source)) - trajectory_ignore_forcemove = FALSE - starting = curloc - original = target - if(targloc || !params) - yo = targloc.y - curloc.y - xo = targloc.x - curloc.x - setAngle(Get_Angle(src, targloc) + spread) - - if(isliving(source) && params) - var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) - p_x = calculated[2] - p_y = calculated[3] - - setAngle(calculated[1] + spread) - else if(targloc) - yo = targloc.y - curloc.y - xo = targloc.x - curloc.x - setAngle(Get_Angle(src, targloc) + spread) - else - stack_trace("WARNING: Projectile [type] fired without either mouse parameters, or a target atom to aim at!") - qdel(src) - -/proc/calculate_projectile_angle_and_pixel_offsets(mob/user, params) - var/list/mouse_control = params2list(params) - var/p_x = 0 - var/p_y = 0 - var/angle = 0 - if(mouse_control["icon-x"]) - p_x = text2num(mouse_control["icon-x"]) - if(mouse_control["icon-y"]) - p_y = text2num(mouse_control["icon-y"]) - if(mouse_control["screen-loc"]) - //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",") - - //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = splittext(screen_loc_params[1],":") - - //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = splittext(screen_loc_params[2],":") - var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32 - var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32 - - //Calculate the "resolution" of screen based on client's view and world's icon size. This will work if the user can view more tiles than average. - var/list/screenview = user.client? getviewsize(user.client.view) : world.view - var/screenviewX = screenview[1] * world.icon_size - var/screenviewY = screenview[2] * world.icon_size - - var/ox = round(screenviewX/2) - user.client.pixel_x //"origin" x - var/oy = round(screenviewY/2) - user.client.pixel_y //"origin" y - angle = ATAN2(y - oy, x - ox) - return list(angle, p_x, p_y) - -/obj/item/projectile/proc/redirect(x, y, starting, source) - old_style_target(locate(x, y, z), starting? get_turf(starting) : get_turf(source)) - -/obj/item/projectile/proc/old_style_target(atom/target, atom/source) - if(!source) - source = get_turf(src) - starting = get_turf(source) - original = target - setAngle(Get_Angle(source, target)) - -/obj/item/projectile/Destroy() - if(hitscan) - finalize_hitscan_and_generate_tracers() - STOP_PROCESSING(SSprojectiles, src) - - if(impacted_mobs) - if(LAZYLEN(impacted_mobs)) - impacted_mobs.Cut() - impacted_mobs = null - - qdel(trajectory) - return ..() - -/obj/item/projectile/proc/cleanup_beam_segments() - QDEL_LIST_ASSOC(beam_segments) - beam_segments = list() - qdel(beam_index) - -/obj/item/projectile/proc/vol_by_damage() - if(damage || agony) - var/value_to_use = damage > agony ? damage : agony - // Multiply projectile damage by 1.2, then CLAMP the value between 30 and 100. - // This was 0.67 but in practice it made all projectiles that did 45 or less damage play at 30, - // which is hard to hear over the gunshots, and is rather rare for a projectile to do that much. - return CLAMP((value_to_use) * 1.2, 30, 100) - else - return 50 //if the projectile doesn't do damage or agony, play its hitsound at 50% volume. - -/obj/item/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE) - if(trajectory && beam_index) - var/datum/point/pcache = trajectory.copy_to() - beam_segments[beam_index] = pcache - generate_hitscan_tracers(null, null, impacting) - -/obj/item/projectile/proc/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE) - if(!length(beam_segments)) - return - beam_components = new - if(tracer_type) - var/tempref = "\ref[src]" - for(var/datum/point/p in beam_segments) - generate_tracer_between_points(p, beam_segments[p], beam_components, tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity, tempref) - if(muzzle_type && duration > 0) - var/datum/point/p = beam_segments[1] - var/atom/movable/thing = new muzzle_type - p.move_atom_to_src(thing) - var/matrix/M = new - 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) - beam_components.beam_components += thing - if(impacting && impact_type && duration > 0) - var/datum/point/p = beam_segments[beam_segments[beam_segments.len]] - var/atom/movable/thing = new impact_type - p.move_atom_to_src(thing) - var/matrix/M = new - 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) - beam_components.beam_components += thing - QDEL_IN(beam_components, duration) - -//Returns true if the target atom is on our current turf and above the right layer -//If direct target is true it's the originally clicked target. -/obj/item/projectile/proc/can_hit_target(atom/target, list/passthrough, direct_target = FALSE, ignore_loc = FALSE) - if(QDELETED(target)) - return FALSE - if(!ignore_source_check && firer) - var/mob/M = firer - if((target == firer) || ((target == firer.loc) && istype(firer.loc, /obj/mecha)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target))) - return FALSE - if(!ignore_loc && (loc != target.loc)) - return FALSE - if(target in passthrough) - return FALSE - if(target.density) //This thing blocks projectiles, hit it regardless of layer/mob stuns/etc. - return TRUE - if(!isliving(target)) - if(target.layer < PROJECTILE_HIT_THRESHOLD_LAYER) - return FALSE - else - var/mob/living/L = target - if(!direct_target) - if(!L.density) - return FALSE - return TRUE - -/obj/item/projectile/Bump(atom/A) - if(A in permutated) - trajectory_ignore_forcemove = TRUE - forceMove(get_turf(A)) - trajectory_ignore_forcemove = FALSE - return FALSE - if(firer && !reflected) - if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech - trajectory_ignore_forcemove = TRUE - forceMove(get_turf(A)) - trajectory_ignore_forcemove = FALSE - return FALSE - - var/distance = get_dist(starting, get_turf(src)) - var/turf/target_turf = get_turf(A) - var/passthrough = FALSE - - if(ismob(A)) - var/mob/M = A - if(istype(A, /mob/living)) - //if they have a neck grab on someone, that person gets hit instead - var/obj/item/weapon/grab/G = locate() in M - if(G && G.state >= GRAB_NECK) - if(G.affecting.stat == DEAD) - var/shield_chance = min(80, (30 * (M.mob_size / 10))) //Small mobs have a harder time keeping a dead body as a shield than a human-sized one. Unathi would have an easier job, if they are made to be SIZE_LARGE in the future. -Mech - if(prob(shield_chance)) - visible_message("\The [M] uses [G.affecting] as a shield!") - if(Bump(G.affecting)) - return - else - visible_message("\The [M] tries to use [G.affecting] as a shield, but fails!") - else - visible_message("\The [M] uses [G.affecting] as a shield!") - if(Bump(G.affecting)) - return //If Bump() returns 0 (keep going) then we continue on to attack M. - - passthrough = !attack_mob(M, distance) - else - passthrough = 1 //so ghosts don't stop bullets - else - passthrough = (A.bullet_act(src, def_zone) == PROJECTILE_CONTINUE) //backwards compatibility - if(isturf(A)) - for(var/obj/O in A) - O.bullet_act(src) - for(var/mob/living/M in A) - attack_mob(M, distance) - - //penetrating projectiles can pass through things that otherwise would not let them - if(!passthrough && penetrating > 0) - if(check_penetrate(A)) - passthrough = TRUE - penetrating-- - /* //CHOMPEdit Begin - var/obj/item/projectile/bullet/this = src - if(istype(this)) - if(!this.velocity) - passthrough = FALSE - penetrating = 0 - //CHOMPEdit End - */ - - if(passthrough) - trajectory_ignore_forcemove = TRUE - forceMove(target_turf) - permutated.Add(A) - trajectory_ignore_forcemove = FALSE - return FALSE - - if(A) - on_impact(A) - qdel(src) - return TRUE - -//TODO: make it so this is called more reliably, instead of sometimes by bullet_act() and sometimes not -/obj/item/projectile/proc/on_hit(atom/target, blocked = 0, def_zone) - if(blocked >= 100) return 0//Full block - if(!isliving(target)) return 0 -// if(isanimal(target)) return 0 - var/mob/living/L = target - L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, incendiary, flammability) // add in AGONY! - if(modifier_type_to_apply) - L.add_modifier(modifier_type_to_apply, modifier_duration) - return 1 - -//called when the projectile stops flying because it Bump'd with something -/obj/item/projectile/proc/on_impact(atom/A) - impact_sounds(A) - impact_visuals(A) - - if(damage && damage_type == BURN) - var/turf/T = get_turf(A) - if(T) - T.hotspot_expose(700, 5) - -//Checks if the projectile is eligible for embedding. Not that it necessarily will. -/obj/item/projectile/proc/can_embed() - //embed must be enabled and damage type must be brute - if(embed_chance == 0 || damage_type != BRUTE) - return 0 - return 1 - -/obj/item/projectile/proc/get_structure_damage() - if(damage_type == BRUTE || damage_type == BURN) - return damage + SA_bonus_damage //CHOMP Edit: Added SA_bonus_damage to the returned value so that phaser can do damage against shields. - return 0 - -//return 1 if the projectile should be allowed to pass through after all, 0 if not. -/obj/item/projectile/proc/check_penetrate(atom/A) - return 1 - -/obj/item/projectile/proc/check_fire(atom/target as mob, mob/living/user as mob) //Checks if you can hit them or not. - check_trajectory(target, user, pass_flags, flags) - -/obj/item/projectile/CanPass() - return TRUE - -//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying. -/obj/item/projectile/proc/attack_mob(mob/living/target_mob, distance, miss_modifier = 0) - if(!istype(target_mob)) - return - - if(target_mob in impacted_mobs) - return - - //roll to-hit - miss_modifier = max(miss_modifier + target_mob.get_evasion(), -100) //CHOMPEDIT - removing baymiss - var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob), force_hit = !can_miss) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss - - var/result = PROJECTILE_FORCE_MISS - if(hit_zone) - def_zone = hit_zone //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part - result = target_mob.bullet_act(src, def_zone) - - if(!istype(target_mob)) - return FALSE // Mob deleted itself or something. - - // Safe to add the target to the list that is soon to be poofed. No double jeopardy, pixel projectiles. - if(islist(impacted_mobs)) - impacted_mobs |= target_mob - - if(result == PROJECTILE_FORCE_MISS) - if(!silenced) - target_mob.visible_message("\The [src] misses \the [target_mob] narrowly!") - playsound(target_mob, "bullet_miss", 75, 1) - return FALSE - - var/impacted_organ = parse_zone(def_zone) - if(istype(target_mob, /mob/living/simple_mob)) - var/mob/living/simple_mob/SM = target_mob - var/decl/mob_organ_names/organ_plan = SM.organ_names - impacted_organ = pick(organ_plan.hit_zones) - - //hit messages - if(silenced) - playsound(target_mob, hitsound, 5, 1, -1) - to_chat(target_mob, span("critical", "You've been hit in the [impacted_organ] by \the [src]!")) - else - var/volume = vol_by_damage() - playsound(target_mob, hitsound, volume, 1, -1) - // X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter - target_mob.visible_message( - span("danger", "\The [target_mob] was hit in the [impacted_organ] by \the [src]!"), - span("critical", "You've been hit in the [impacted_organ] by \the [src]!") - ) - - //admin logs - if(!no_attack_log) - if(istype(firer, /mob) && istype(target_mob)) - add_attack_logs(firer,target_mob,"Shot with \a [src.type] projectile") //CHOMPEdit - - //sometimes bullet_act() will want the projectile to continue flying - if (result == PROJECTILE_CONTINUE) - return FALSE - - return TRUE - - -/obj/item/projectile/proc/launch_projectile(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) - original = target - def_zone = check_zone(target_zone) - firer = user - var/direct_target - if(get_turf(target) == get_turf(src)) - direct_target = target - - if(use_submunitions && submunitions.len) - var/temp_min_spread = 0 - if(force_max_submunition_spread) - temp_min_spread = submunition_spread_max - else - temp_min_spread = submunition_spread_min - - var/damage_override = null - - if(spread_submunition_damage) - damage_override = damage - if(nodamage) - damage_override = 0 - - var/projectile_count = 0 - - for(var/proj in submunitions) - projectile_count += submunitions[proj] - - damage_override = round(damage_override / max(1, projectile_count)) - - for(var/path in submunitions) - for(var/count = 1 to submunitions[path]) - var/obj/item/projectile/SM = new path(get_turf(loc)) - SM.shot_from = shot_from - SM.silenced = silenced - SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10 - if(!isnull(damage_override)) - SM.damage = damage_override - SM.launch_projectile(target, target_zone, user, params, angle_override) - - preparePixelProjectile(target, user? user : get_turf(src), params, forced_spread) - return fire(angle_override, direct_target) - -//called to launch a projectile from a gun -/obj/item/projectile/proc/launch_from_gun(atom/target, target_zone, mob/user, params, angle_override, forced_spread, obj/item/weapon/gun/launcher) - - shot_from = launcher.name - silenced |= launcher.silenced // Silent bullets (e.g., BBs) are always silent - if(user) - firer = user - - return launch_projectile(target, target_zone, user, params, angle_override, forced_spread) - -/obj/item/projectile/proc/launch_projectile_from_turf(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) - original = target - def_zone = check_zone(target_zone) - firer = user - var/direct_target - if(get_turf(target) == get_turf(src)) - direct_target = target - - if(use_submunitions && submunitions.len) - var/temp_min_spread = 0 - if(force_max_submunition_spread) - temp_min_spread = submunition_spread_max - else - temp_min_spread = submunition_spread_min - - var/damage_override = null - - if(spread_submunition_damage) - damage_override = damage - if(nodamage) - damage_override = 0 - - var/projectile_count = 0 - - for(var/proj in submunitions) - projectile_count += submunitions[proj] - - damage_override = round(damage_override / max(1, projectile_count)) - - for(var/path in submunitions) - for(var/count = 1 to submunitions[path]) - var/obj/item/projectile/SM = new path(get_turf(loc)) - SM.shot_from = shot_from - SM.silenced = silenced - SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10 - if(!isnull(damage_override)) - SM.damage = damage_override - SM.launch_projectile_from_turf(target, target_zone, user, params, angle_override) - - preparePixelProjectile(target, get_turf(src), params, forced_spread) - return fire(angle_override, direct_target) - -// Makes a brief effect sprite appear when the projectile hits something solid. -/obj/item/projectile/proc/impact_visuals(atom/A, hit_x, hit_y) - if(impact_effect_type && !hitscan) // Hitscan things have their own impact sprite. - if(isnull(hit_x) && isnull(hit_y)) - if(trajectory) - // Effect goes where the projectile 'stopped'. - hit_x = A.pixel_x + trajectory.return_px() - hit_y = A.pixel_y + trajectory.return_py() - else if(A == original) - // Otherwise it goes where the person who fired clicked. - hit_x = A.pixel_x + p_x - 16 - hit_y = A.pixel_y + p_y - 16 - else - // Otherwise it'll be random. - hit_x = A.pixel_x + rand(-8, 8) - hit_y = A.pixel_y + rand(-8, 8) - new impact_effect_type(get_turf(A), src, hit_x, hit_y) - -/obj/item/projectile/proc/impact_sounds(atom/A) - if(hitsound_wall && !ismob(A)) // Mob sounds are handled in attack_mob(). - var/volume = CLAMP(vol_by_damage() + 20, 0, 100) - if(silenced) - volume = 5 - playsound(A, hitsound_wall, volume, 1, -1) +#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. +#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. + +/obj/item/projectile + name = "projectile" + icon = 'icons/obj/projectiles.dmi' + icon_state = "bullet" + density = FALSE + anchored = TRUE + unacidable = TRUE + pass_flags = PASSTABLE + mouse_opacity = 0 + hitsound = 'sound/weapons/pierce.ogg' + + blocks_emissive = EMISSIVE_BLOCK_GENERIC + + var/hitsound_wall = null // Played when something hits a wall, or anything else that isn't a mob. + + ////TG PROJECTILE SYTSEM + //Projectile stuff + var/range = 50 + var/originalRange + + //Fired processing vars + var/fired = FALSE //Have we been fired yet + var/paused = FALSE //for suspending the projectile midair + var/last_projectile_move = 0 + var/last_process = 0 + var/time_offset = 0 + var/datum/point/vector/trajectory + var/trajectory_ignore_forcemove = FALSE //instructs forceMove to NOT reset our trajectory to the new location! + var/ignore_source_check = FALSE + + var/speed = 0.8 //Amount of deciseconds it takes for projectile to travel + var/Angle = 0 + var/original_angle = 0 //Angle at firing + var/nondirectional_sprite = FALSE //Set TRUE to prevent projectiles from having their sprites rotated based on firing angle + var/spread = 0 //amount (in degrees) of projectile spread + animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy + var/ricochets = 0 + var/ricochets_max = 2 + var/ricochet_chance = 30 + var/can_miss = TRUE + + //Hitscan + var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. + var/list/beam_segments //assoc list of datum/point or datum/point/vector, start = end. Used for hitscan effect generation. + var/datum/point/beam_index + var/turf/hitscan_last //last turf touched during hitscanning. + var/tracer_type + var/muzzle_type + var/impact_type + var/datum/beam_components_cache/beam_components + + //Fancy hitscan lighting effects! + light_on = TRUE + var/hitscan_light_intensity = 1.5 + var/hitscan_light_range = 0.75 + var/hitscan_light_color_override + var/muzzle_flash_intensity = 3 + var/muzzle_flash_range = 1.5 + var/muzzle_flash_color_override + var/impact_light_intensity = 3 + var/impact_light_range = 2 + var/impact_light_color_override + + //Homing + var/homing = FALSE + var/atom/homing_target + var/homing_turn_speed = 10 //Angle per tick. + var/homing_inaccuracy_min = 0 //in pixels for these. offsets are set once when setting target. + var/homing_inaccuracy_max = 0 + var/homing_offset_x = 0 + var/homing_offset_y = 0 + + //Targetting + var/yo = null + var/xo = null + var/atom/original = null // the original target clicked + var/turf/starting = null // the projectile's starting turf + var/list/permutated = list() // we've passed through these atoms, don't try to hit them again + var/p_x = 16 + var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center + + //Misc/Polaris variables + + var/def_zone = "" //Aiming at + var/mob/firer = null //Who shot it + var/silenced = FALSE //Attack message + var/shot_from = "" // name of the object which shot us + + var/accuracy = 0 + var/dispersion = 0.0 + + // Sub-munitions. Basically, multi-projectile shotgun, rather than pellets. + var/use_submunitions = FALSE + var/only_submunitions = FALSE // Will the projectile delete itself after firing the submunitions? + var/list/submunitions = list() // Assoc list of the paths of any submunitions, and how many they are. [projectilepath] = [projectilecount]. + var/submunition_spread_max = 30 // Divided by 10 to get the percentile dispersion. + var/submunition_spread_min = 5 // Above. + var/force_max_submunition_spread = FALSE // Do we just force the maximum? + var/spread_submunition_damage = FALSE // Do we assign damage to our sub projectiles based on our main projectile damage? + + var/damage = 10 + var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS, ELECTROCUTE, BIOACID, SEARING are the only things that should be in here + var/SA_bonus_damage = 0 // Some bullets inflict extra damage on simple animals. + var/SA_vulnerability = null // What kind of simple animal the above bonus damage should be applied to. Set to null to apply to all SAs. + var/nodamage = 0 //Determines if the projectile will skip any damage inflictions + var/taser_effect = 0 //If set then the projectile will apply it's agony damage using stun_effect_act() to mobs it hits, and other damage will be ignored + var/check_armour = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid + var/projectile_type = /obj/item/projectile + var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate() + //Effects + var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 for intense fire. - Mech + var/flammability = 0 //Amount of fire stacks to add for the above. + var/combustion = TRUE //Does this set off flammable objects on fire/hit? + var/stun = 0 + var/weaken = 0 + var/paralyze = 0 + var/irradiate = 0 + var/stutter = 0 + var/eyeblur = 0 + var/drowsy = 0 + var/agony = 0 + var/reflected = 0 // This should be set to 1 if reflected by any means, to prevent infinite reflections. + var/modifier_type_to_apply = null // If set, will apply a modifier to mobs that are hit by this projectile. + var/modifier_duration = null // How long the above modifier should last for. Leave null to be permanent. + var/excavation_amount = 0 // How much, if anything, it drills from a mineral turf. + + embed_chance = 0 //Base chance for a projectile to embed + + var/fire_sound = 'sound/weapons/Gunshot_old.ogg' // Can be overriden in gun.dm's fire_sound var. It can also be null but I don't know why you'd ever want to do that. -Ace + + var/vacuum_traversal = TRUE //Determines if the projectile can exist in vacuum, if false, the projectile will be deleted if it enters vacuum. + + var/temporary_unstoppable_movement = FALSE + + // When a non-hitscan projectile hits something, a visual effect can be spawned. + // This is distinct from the hitscan's "impact_type" var. + var/impact_effect_type = null + + var/list/impacted_mobs = list() + + // TGMC Ammo HUD Port + var/hud_state = "unknown" // What HUD state we use when we have ammunition. + var/hud_state_empty = "unknown" // The empty state. DON'T USE _FLASH IN THE NAME OF THE EMPTY STATE STRING, THAT IS ADDED BY THE CODE. + +/obj/item/projectile/proc/Range() + range-- + if(range <= 0 && loc) + on_range() + +/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range + impact_sounds(loc) + impact_visuals(loc) // So it does a little 'burst' effect, but not actually do anything (unless overrided). + qdel(src) + +/obj/item/projectile/proc/return_predicted_turf_after_moves(moves, forced_angle) //I say predicted because there's no telling that the projectile won't change direction/location in flight. + if(!trajectory && isnull(forced_angle) && isnull(Angle)) + return FALSE + var/datum/point/vector/current = trajectory + if(!current) + var/turf/T = get_turf(src) + current = new(T.x, T.y, T.z, pixel_x, pixel_y, isnull(forced_angle)? Angle : forced_angle, SSprojectiles.global_pixel_speed) + var/datum/point/vector/v = current.return_vector_after_increments(moves * SSprojectiles.global_iterations_per_move) + return v.return_turf() + +/obj/item/projectile/proc/return_pathing_turfs_in_moves(moves, forced_angle) + var/turf/current = get_turf(src) + var/turf/ending = return_predicted_turf_after_moves(moves, forced_angle) + return getline(current, ending) + +/obj/item/projectile/proc/set_pixel_speed(new_speed) + if(trajectory) + trajectory.set_speed(new_speed) + return TRUE + return FALSE + +/obj/item/projectile/proc/record_hitscan_start(datum/point/pcache) + if(pcache) + beam_segments = list() + beam_index = pcache + beam_segments[beam_index] = null //record start. + +/obj/item/projectile/proc/process_hitscan() + var/safety = range * 3 + record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1)) + while(loc && !QDELETED(src)) + if(paused) + stoplag(1) + continue + if(safety-- <= 0) + if(loc) + Bump(loc) + if(!QDELETED(src)) + qdel(src) + return //Kill! + pixel_move(1, TRUE) + +/obj/item/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE) + if(!loc || !trajectory) + return + last_projectile_move = world.time + if(homing) + process_homing() + var/forcemoved = FALSE + for(var/i in 1 to SSprojectiles.global_iterations_per_move) + if(QDELETED(src)) + return + trajectory.increment(trajectory_multiplier) + var/turf/T = trajectory.return_turf() + if(!istype(T)) + qdel(src) + return + if(T.z != loc.z) + var/old = loc + before_z_change(loc, T) + trajectory_ignore_forcemove = TRUE + forceMove(T) + trajectory_ignore_forcemove = FALSE + after_z_change(old, loc) + if(!hitscanning) + pixel_x = trajectory.return_px() + pixel_y = trajectory.return_py() + forcemoved = TRUE + hitscan_last = loc + else if(T != loc) + before_move() + step_towards(src, T) + hitscan_last = loc + after_move() + if(can_hit_target(original, permutated)) + Bump(original) + if(!hitscanning && !forcemoved) + pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier * SSprojectiles.global_iterations_per_move + pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier * SSprojectiles.global_iterations_per_move + animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW) + Range() + +/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. + if(AM.is_incorporeal()) + return + ..() + if(isliving(AM) && !(pass_flags & PASSMOB)) + var/mob/living/L = AM + if(can_hit_target(L, permutated, (AM == original))) + Bump(AM) + +/obj/item/projectile/proc/process_homing() //may need speeding up in the future performance wise. + if(!homing_target) + return FALSE + var/datum/point/PT = RETURN_PRECISE_POINT(homing_target) + PT.x += CLAMP(homing_offset_x, 1, world.maxx) + PT.y += CLAMP(homing_offset_y, 1, world.maxy) + var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT)) + setAngle(Angle + CLAMP(angle, -homing_turn_speed, homing_turn_speed)) + +/obj/item/projectile/proc/set_homing_target(atom/A) + if(!A || (!isturf(A) && !isturf(A.loc))) + return FALSE + homing = TRUE + homing_target = A + homing_offset_x = rand(homing_inaccuracy_min, homing_inaccuracy_max) + homing_offset_y = rand(homing_inaccuracy_min, homing_inaccuracy_max) + if(prob(50)) + homing_offset_x = -homing_offset_x + if(prob(50)) + homing_offset_y = -homing_offset_y + +/obj/item/projectile/process() + last_process = world.time + if(!loc || !fired || !trajectory) + fired = FALSE + return PROCESS_KILL + if(paused || !isturf(loc)) + last_projectile_move += world.time - last_process //Compensates for pausing, so it doesn't become a hitscan projectile when unpaused from charged up ticks. + return + var/elapsed_time_deciseconds = (world.time - last_projectile_move) + time_offset + time_offset = 0 + var/required_moves = speed > 0? FLOOR(elapsed_time_deciseconds / speed, 1) : MOVES_HITSCAN //Would be better if a 0 speed made hitscan but everyone hates those so I can't make it a universal system :< + if(required_moves == MOVES_HITSCAN) + required_moves = SSprojectiles.global_max_tick_moves + else + if(required_moves > SSprojectiles.global_max_tick_moves) + var/overrun = required_moves - SSprojectiles.global_max_tick_moves + required_moves = SSprojectiles.global_max_tick_moves + time_offset += overrun * speed + time_offset += MODULUS(elapsed_time_deciseconds, speed) + + for(var/i in 1 to required_moves) + pixel_move(1, FALSE) + +/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides. + Angle = new_angle + if(!nondirectional_sprite) + var/matrix/M = new + M.Turn(Angle) + transform = M + if(trajectory) + trajectory.set_angle(new_angle) + return TRUE + +/obj/item/projectile/forceMove(atom/target) + if(!isloc(target) || !isloc(loc) || !z) + return ..() + var/zc = target.z != z + var/old = loc + if(zc) + before_z_change(old, target) + . = ..() + if(trajectory && !trajectory_ignore_forcemove && isturf(target)) + if(hitscan) + finalize_hitscan_and_generate_tracers(FALSE) + trajectory.initialize_location(target.x, target.y, target.z, 0, 0) + if(hitscan) + record_hitscan_start(RETURN_PRECISE_POINT(src)) + if(zc) + after_z_change(old, target) + +/obj/item/projectile/proc/fire(angle, atom/direct_target) + //If no angle needs to resolve it from xo/yo! + if(direct_target) + direct_target.bullet_act(src, def_zone) + qdel(src) + return + if(isnum(angle)) + setAngle(angle) + starting = get_turf(src) + if(isnull(Angle)) //Try to resolve through offsets if there's no angle set. + if(isnull(xo) || isnull(yo)) + stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!") + qdel(src) + return + var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z) + setAngle(Get_Angle(src, target)) + if(dispersion) + setAngle(Angle + rand(-dispersion, dispersion)) + original_angle = Angle + trajectory_ignore_forcemove = TRUE + forceMove(starting) + trajectory_ignore_forcemove = FALSE + trajectory = new(starting.x, starting.y, starting.z, pixel_x, pixel_y, Angle, SSprojectiles.global_pixel_speed) + last_projectile_move = world.time + permutated = list() + originalRange = range + fired = TRUE + if(hitscan) + . = process_hitscan() + START_PROCESSING(SSprojectiles, src) + pixel_move(1, FALSE) //move it now! + +/obj/item/projectile/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(temporary_unstoppable_movement) + temporary_unstoppable_movement = FALSE + DISABLE_BITFIELD(movement_type, UNSTOPPABLE) + if(fired && can_hit_target(original, permutated, TRUE)) + Bump(original) + +/obj/item/projectile/proc/after_z_change(atom/olcloc, atom/newloc) + +/obj/item/projectile/proc/before_z_change(atom/oldloc, atom/newloc) + +/obj/item/projectile/proc/before_move() + return + +/obj/item/projectile/proc/after_move() + return + +/obj/item/projectile/proc/store_hitscan_collision(datum/point/pcache) + beam_segments[beam_index] = pcache + beam_index = pcache + beam_segments[beam_index] = null + +//Spread is FORCED! +/obj/item/projectile/proc/preparePixelProjectile(atom/target, atom/source, params, spread = 0) + var/turf/curloc = get_turf(source) + var/turf/targloc = get_turf(target) + + if(istype(source, /atom/movable)) + var/atom/movable/MT = source + if(MT.locs && MT.locs.len) // Multi tile! + for(var/turf/T in MT.locs) + if(get_dist(T, target) < get_turf(curloc)) + curloc = get_turf(T) + + trajectory_ignore_forcemove = TRUE + forceMove(get_turf(source)) + trajectory_ignore_forcemove = FALSE + starting = curloc + original = target + if(targloc || !params) + yo = targloc.y - curloc.y + xo = targloc.x - curloc.x + setAngle(Get_Angle(src, targloc) + spread) + + if(isliving(source) && params) + var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) + p_x = calculated[2] + p_y = calculated[3] + + setAngle(calculated[1] + spread) + else if(targloc) + yo = targloc.y - curloc.y + xo = targloc.x - curloc.x + setAngle(Get_Angle(src, targloc) + spread) + else + stack_trace("WARNING: Projectile [type] fired without either mouse parameters, or a target atom to aim at!") + qdel(src) + +/proc/calculate_projectile_angle_and_pixel_offsets(mob/user, params) + var/list/mouse_control = params2list(params) + var/p_x = 0 + var/p_y = 0 + var/angle = 0 + if(mouse_control["icon-x"]) + p_x = text2num(mouse_control["icon-x"]) + if(mouse_control["icon-y"]) + p_y = text2num(mouse_control["icon-y"]) + if(mouse_control["screen-loc"]) + //Split screen-loc up into X+Pixel_X and Y+Pixel_Y + var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",") + + //Split X+Pixel_X up into list(X, Pixel_X) + var/list/screen_loc_X = splittext(screen_loc_params[1],":") + + //Split Y+Pixel_Y up into list(Y, Pixel_Y) + var/list/screen_loc_Y = splittext(screen_loc_params[2],":") + var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32 + var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32 + + //Calculate the "resolution" of screen based on client's view and world's icon size. This will work if the user can view more tiles than average. + var/list/screenview = user.client? getviewsize(user.client.view) : world.view + var/screenviewX = screenview[1] * world.icon_size + var/screenviewY = screenview[2] * world.icon_size + + var/ox = round(screenviewX/2) - user.client.pixel_x //"origin" x + var/oy = round(screenviewY/2) - user.client.pixel_y //"origin" y + angle = ATAN2(y - oy, x - ox) + return list(angle, p_x, p_y) + +/obj/item/projectile/proc/redirect(x, y, starting, source) + old_style_target(locate(x, y, z), starting? get_turf(starting) : get_turf(source)) + +/obj/item/projectile/proc/old_style_target(atom/target, atom/source) + if(!source) + source = get_turf(src) + starting = get_turf(source) + original = target + setAngle(Get_Angle(source, target)) + +/obj/item/projectile/Destroy() + if(hitscan) + finalize_hitscan_and_generate_tracers() + STOP_PROCESSING(SSprojectiles, src) + + if(impacted_mobs) + if(LAZYLEN(impacted_mobs)) + impacted_mobs.Cut() + impacted_mobs = null + + qdel(trajectory) + return ..() + +/obj/item/projectile/proc/cleanup_beam_segments() + QDEL_LIST_ASSOC(beam_segments) + beam_segments = list() + qdel(beam_index) + +/obj/item/projectile/proc/vol_by_damage() + if(damage || agony) + var/value_to_use = damage > agony ? damage : agony + // Multiply projectile damage by 1.2, then CLAMP the value between 30 and 100. + // This was 0.67 but in practice it made all projectiles that did 45 or less damage play at 30, + // which is hard to hear over the gunshots, and is rather rare for a projectile to do that much. + return CLAMP((value_to_use) * 1.2, 30, 100) + else + return 50 //if the projectile doesn't do damage or agony, play its hitsound at 50% volume. + +/obj/item/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE) + if(trajectory && beam_index) + var/datum/point/pcache = trajectory.copy_to() + beam_segments[beam_index] = pcache + generate_hitscan_tracers(null, null, impacting) + +/obj/item/projectile/proc/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE) + if(!length(beam_segments)) + return + beam_components = new + if(tracer_type) + var/tempref = "\ref[src]" + for(var/datum/point/p in beam_segments) + generate_tracer_between_points(p, beam_segments[p], beam_components, tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity, tempref) + if(muzzle_type && duration > 0) + var/datum/point/p = beam_segments[1] + var/atom/movable/thing = new muzzle_type + p.move_atom_to_src(thing) + var/matrix/M = new + 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) + beam_components.beam_components += thing + if(impacting && impact_type && duration > 0) + var/datum/point/p = beam_segments[beam_segments[beam_segments.len]] + var/atom/movable/thing = new impact_type + p.move_atom_to_src(thing) + var/matrix/M = new + 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) + beam_components.beam_components += thing + QDEL_IN(beam_components, duration) + +//Returns true if the target atom is on our current turf and above the right layer +//If direct target is true it's the originally clicked target. +/obj/item/projectile/proc/can_hit_target(atom/target, list/passthrough, direct_target = FALSE, ignore_loc = FALSE) + if(QDELETED(target)) + return FALSE + if(!ignore_source_check && firer) + var/mob/M = firer + if((target == firer) || ((target == firer.loc) && istype(firer.loc, /obj/mecha)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target))) + return FALSE + if(!ignore_loc && (loc != target.loc)) + return FALSE + if(target in passthrough) + return FALSE + if(target.density) //This thing blocks projectiles, hit it regardless of layer/mob stuns/etc. + return TRUE + if(!isliving(target)) + if(target.layer < PROJECTILE_HIT_THRESHOLD_LAYER) + return FALSE + else + var/mob/living/L = target + if(!direct_target) + if(!L.density) + return FALSE + return TRUE + +/obj/item/projectile/Bump(atom/A) + if(A in permutated) + trajectory_ignore_forcemove = TRUE + forceMove(get_turf(A)) + trajectory_ignore_forcemove = FALSE + return FALSE + if(firer && !reflected) + if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech + trajectory_ignore_forcemove = TRUE + forceMove(get_turf(A)) + trajectory_ignore_forcemove = FALSE + return FALSE + + var/distance = get_dist(starting, get_turf(src)) + var/turf/target_turf = get_turf(A) + var/passthrough = FALSE + + if(ismob(A)) + var/mob/M = A + if(istype(A, /mob/living)) + //if they have a neck grab on someone, that person gets hit instead + var/obj/item/weapon/grab/G = locate() in M + if(G && G.state >= GRAB_NECK) + if(G.affecting.stat == DEAD) + var/shield_chance = min(80, (30 * (M.mob_size / 10))) //Small mobs have a harder time keeping a dead body as a shield than a human-sized one. Unathi would have an easier job, if they are made to be SIZE_LARGE in the future. -Mech + if(prob(shield_chance)) + visible_message("\The [M] uses [G.affecting] as a shield!") + if(Bump(G.affecting)) + return + else + visible_message("\The [M] tries to use [G.affecting] as a shield, but fails!") + else + visible_message("\The [M] uses [G.affecting] as a shield!") + if(Bump(G.affecting)) + return //If Bump() returns 0 (keep going) then we continue on to attack M. + + passthrough = !attack_mob(M, distance) + else + passthrough = 1 //so ghosts don't stop bullets + else + passthrough = (A.bullet_act(src, def_zone) == PROJECTILE_CONTINUE) //backwards compatibility + if(isturf(A)) + for(var/obj/O in A) + O.bullet_act(src) + for(var/mob/living/M in A) + attack_mob(M, distance) + + //penetrating projectiles can pass through things that otherwise would not let them + if(!passthrough && penetrating > 0) + if(check_penetrate(A)) + passthrough = TRUE + penetrating-- + /* //CHOMPEdit Begin + var/obj/item/projectile/bullet/this = src + if(istype(this)) + if(!this.velocity) + passthrough = FALSE + penetrating = 0 + //CHOMPEdit End + */ + + if(passthrough) + trajectory_ignore_forcemove = TRUE + forceMove(target_turf) + permutated.Add(A) + trajectory_ignore_forcemove = FALSE + return FALSE + + if(A) + on_impact(A) + qdel(src) + return TRUE + +//TODO: make it so this is called more reliably, instead of sometimes by bullet_act() and sometimes not +/obj/item/projectile/proc/on_hit(atom/target, blocked = 0, def_zone) + if(blocked >= 100) return 0//Full block + if(!isliving(target)) return 0 +// if(isanimal(target)) return 0 + var/mob/living/L = target + L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, incendiary, flammability) // add in AGONY! + if(modifier_type_to_apply) + L.add_modifier(modifier_type_to_apply, modifier_duration) + return 1 + +//called when the projectile stops flying because it Bump'd with something +/obj/item/projectile/proc/on_impact(atom/A) + impact_sounds(A) + impact_visuals(A) + + if(damage && damage_type == BURN) + var/turf/T = get_turf(A) + if(T) + T.hotspot_expose(700, 5) + +//Checks if the projectile is eligible for embedding. Not that it necessarily will. +/obj/item/projectile/proc/can_embed() + //embed must be enabled and damage type must be brute + if(embed_chance == 0 || damage_type != BRUTE) + return 0 + return 1 + +/obj/item/projectile/proc/get_structure_damage() + if(damage_type == BRUTE || damage_type == BURN) + return damage + SA_bonus_damage //CHOMP Edit: Added SA_bonus_damage to the returned value so that phaser can do damage against shields. + return 0 + +//return 1 if the projectile should be allowed to pass through after all, 0 if not. +/obj/item/projectile/proc/check_penetrate(atom/A) + return 1 + +/obj/item/projectile/proc/check_fire(atom/target as mob, mob/living/user as mob) //Checks if you can hit them or not. + check_trajectory(target, user, pass_flags, flags) + +/obj/item/projectile/CanPass() + return TRUE + +//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying. +/obj/item/projectile/proc/attack_mob(mob/living/target_mob, distance, miss_modifier = 0) + if(!istype(target_mob)) + return + + if(target_mob in impacted_mobs) + return + + //roll to-hit + miss_modifier = max(miss_modifier + target_mob.get_evasion(), -100) //CHOMPEDIT - removing baymiss + var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob), force_hit = !can_miss) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss + + var/result = PROJECTILE_FORCE_MISS + if(hit_zone) + def_zone = hit_zone //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part + result = target_mob.bullet_act(src, def_zone) + + if(!istype(target_mob)) + return FALSE // Mob deleted itself or something. + + // Safe to add the target to the list that is soon to be poofed. No double jeopardy, pixel projectiles. + if(islist(impacted_mobs)) + impacted_mobs |= target_mob + + if(result == PROJECTILE_FORCE_MISS) + if(!silenced) + target_mob.visible_message("\The [src] misses \the [target_mob] narrowly!") + playsound(target_mob, "bullet_miss", 75, 1) + return FALSE + + var/impacted_organ = parse_zone(def_zone) + if(istype(target_mob, /mob/living/simple_mob)) + var/mob/living/simple_mob/SM = target_mob + var/decl/mob_organ_names/organ_plan = SM.organ_names + impacted_organ = pick(organ_plan.hit_zones) + + //hit messages + if(silenced) + playsound(target_mob, hitsound, 5, 1, -1) + to_chat(target_mob, span("critical", "You've been hit in the [impacted_organ] by \the [src]!")) + else + var/volume = vol_by_damage() + playsound(target_mob, hitsound, volume, 1, -1) + // X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter + target_mob.visible_message( + span("danger", "\The [target_mob] was hit in the [impacted_organ] by \the [src]!"), + span("critical", "You've been hit in the [impacted_organ] by \the [src]!") + ) + + //admin logs + if(!no_attack_log) + if(istype(firer, /mob) && istype(target_mob)) + add_attack_logs(firer,target_mob,"Shot with \a [src.type] projectile") //CHOMPEdit + + //sometimes bullet_act() will want the projectile to continue flying + if (result == PROJECTILE_CONTINUE) + return FALSE + + return TRUE + + +/obj/item/projectile/proc/launch_projectile(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) + original = target + def_zone = check_zone(target_zone) + firer = user + var/direct_target + if(get_turf(target) == get_turf(src)) + direct_target = target + + if(use_submunitions && submunitions.len) + var/temp_min_spread = 0 + if(force_max_submunition_spread) + temp_min_spread = submunition_spread_max + else + temp_min_spread = submunition_spread_min + + var/damage_override = null + + if(spread_submunition_damage) + damage_override = damage + if(nodamage) + damage_override = 0 + + var/projectile_count = 0 + + for(var/proj in submunitions) + projectile_count += submunitions[proj] + + damage_override = round(damage_override / max(1, projectile_count)) + + for(var/path in submunitions) + for(var/count = 1 to submunitions[path]) + var/obj/item/projectile/SM = new path(get_turf(loc)) + SM.shot_from = shot_from + SM.silenced = silenced + SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10 + if(!isnull(damage_override)) + SM.damage = damage_override + SM.launch_projectile(target, target_zone, user, params, angle_override) + + preparePixelProjectile(target, user? user : get_turf(src), params, forced_spread) + return fire(angle_override, direct_target) + +//called to launch a projectile from a gun +/obj/item/projectile/proc/launch_from_gun(atom/target, target_zone, mob/user, params, angle_override, forced_spread, obj/item/weapon/gun/launcher) + + shot_from = launcher.name + silenced |= launcher.silenced // Silent bullets (e.g., BBs) are always silent + if(user) + firer = user + + return launch_projectile(target, target_zone, user, params, angle_override, forced_spread) + +/obj/item/projectile/proc/launch_projectile_from_turf(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0) + original = target + def_zone = check_zone(target_zone) + firer = user + var/direct_target + if(get_turf(target) == get_turf(src)) + direct_target = target + + if(use_submunitions && submunitions.len) + var/temp_min_spread = 0 + if(force_max_submunition_spread) + temp_min_spread = submunition_spread_max + else + temp_min_spread = submunition_spread_min + + var/damage_override = null + + if(spread_submunition_damage) + damage_override = damage + if(nodamage) + damage_override = 0 + + var/projectile_count = 0 + + for(var/proj in submunitions) + projectile_count += submunitions[proj] + + damage_override = round(damage_override / max(1, projectile_count)) + + for(var/path in submunitions) + for(var/count = 1 to submunitions[path]) + var/obj/item/projectile/SM = new path(get_turf(loc)) + SM.shot_from = shot_from + SM.silenced = silenced + SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10 + if(!isnull(damage_override)) + SM.damage = damage_override + SM.launch_projectile_from_turf(target, target_zone, user, params, angle_override) + + preparePixelProjectile(target, get_turf(src), params, forced_spread) + return fire(angle_override, direct_target) + +// Makes a brief effect sprite appear when the projectile hits something solid. +/obj/item/projectile/proc/impact_visuals(atom/A, hit_x, hit_y) + if(impact_effect_type && !hitscan) // Hitscan things have their own impact sprite. + if(isnull(hit_x) && isnull(hit_y)) + if(trajectory) + // Effect goes where the projectile 'stopped'. + hit_x = A.pixel_x + trajectory.return_px() + hit_y = A.pixel_y + trajectory.return_py() + else if(A == original) + // Otherwise it goes where the person who fired clicked. + hit_x = A.pixel_x + p_x - 16 + hit_y = A.pixel_y + p_y - 16 + else + // Otherwise it'll be random. + hit_x = A.pixel_x + rand(-8, 8) + hit_y = A.pixel_y + rand(-8, 8) + new impact_effect_type(get_turf(A), src, hit_x, hit_y) + +/obj/item/projectile/proc/impact_sounds(atom/A) + if(hitsound_wall && !ismob(A)) // Mob sounds are handled in attack_mob(). + var/volume = CLAMP(vol_by_damage() + 20, 0, 100) + if(silenced) + volume = 5 + playsound(A, hitsound_wall, volume, 1, -1) diff --git a/code/modules/projectiles/projectile/animate.dm b/code/modules/projectiles/projectile/animate.dm index 20196022af..13584a64ad 100644 --- a/code/modules/projectiles/projectile/animate.dm +++ b/code/modules/projectiles/projectile/animate.dm @@ -1,17 +1,17 @@ -/obj/item/projectile/animate - name = "bolt of animation" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = 1 - check_armour = "energy" - light_range = 2 - light_power = 0.5 - light_color = "#55AAFF" - combustion = FALSE - -/obj/item/projectile/animate/Bump(var/atom/change) - if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects)) - var/obj/O = change - new /mob/living/simple_mob/hostile/mimic/copy(O.loc, O, firer) - ..() +/obj/item/projectile/animate + name = "bolt of animation" + icon_state = "ice_1" + damage = 0 + damage_type = BURN + nodamage = 1 + check_armour = "energy" + light_range = 2 + light_power = 0.5 + light_color = "#55AAFF" + combustion = FALSE + +/obj/item/projectile/animate/Bump(var/atom/change) + if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects)) + var/obj/O = change + new /mob/living/simple_mob/hostile/mimic/copy(O.loc, O, firer) + ..() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 13d1a9541c..8a92254ea8 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -1,557 +1,557 @@ -/obj/item/projectile/beam - name = "laser" - icon_state = "laser" - fire_sound = 'sound/weapons/Laser.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 40 - damage_type = BURN - check_armour = "laser" - eyeblur = 4 - var/frequency = 1 - hitscan = 1 - embed_chance = 0 - invisibility = 99 //beam projectiles are invisible as they are rendered by the effect engine - light_range = 2 - light_power = 0.5 - light_color = "#FF0D00" - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - - muzzle_type = /obj/effect/projectile/muzzle/laser - tracer_type = /obj/effect/projectile/tracer/laser - impact_type = /obj/effect/projectile/impact/laser - - hud_state = "laser" - hud_state_empty = "battery_empty" - -/obj/item/projectile/beam/practice - name = "laser" - icon_state = "laser" - damage = 0 - excavation_amount = 0 - damage_type = BURN - check_armour = "laser" - eyeblur = 2 - hud_state = "laser" - -/obj/item/projectile/beam/weaklaser - name = "weak laser" - icon_state = "laser" - damage = 15 - hud_state = "laser" - -/obj/item/projectile/beam/weaklaser/blue - icon_state = "bluelaser" - light_color = "#0066FF" - hud_state = "laser_disabler" - - muzzle_type = /obj/effect/projectile/muzzle/laser_blue - tracer_type = /obj/effect/projectile/tracer/laser_blue - impact_type = /obj/effect/projectile/impact/laser_blue - -/obj/item/projectile/beam/weaklaser/ion - damage_type = ELECTROMAG - light_color = "#00CCFF" - muzzle_type = /obj/effect/projectile/muzzle/laser_em - tracer_type = /obj/effect/projectile/tracer/laser_em - impact_type = /obj/effect/projectile/impact/laser_em - -/obj/item/projectile/beam/smalllaser - damage = 25 - hud_state = "laser" - -/obj/item/projectile/beam/smalllaser/ion - damage_type = ELECTROMAG - light_color = "#00CCFF" - muzzle_type = /obj/effect/projectile/muzzle/laser_em - tracer_type = /obj/effect/projectile/tracer/laser_em - impact_type = /obj/effect/projectile/impact/laser_em - -/obj/item/projectile/beam/burstlaser - damage = 30 - armor_penetration = 10 - hud_state = "laser" - -/obj/item/projectile/beam/burstlaser/ion - damage_type = ELECTROMAG - light_color = "#00CCFF" - muzzle_type = /obj/effect/projectile/muzzle/laser_em - tracer_type = /obj/effect/projectile/tracer/laser_em - impact_type = /obj/effect/projectile/impact/laser_em - -/obj/item/projectile/beam/midlaser - damage = 40 - armor_penetration = 10 - hud_state = "laser" - -/obj/item/projectile/beam/midlaser/ion - damage_type = ELECTROMAG - light_color = "#00CCFF" - muzzle_type = /obj/effect/projectile/muzzle/laser_em - tracer_type = /obj/effect/projectile/tracer/laser_em - impact_type = /obj/effect/projectile/impact/laser_em - -/obj/item/projectile/beam/mininglaser - name = "pulsating laser" - damage = 10 - armor_penetration = 20 - fire_sound = 'sound/weapons/eluger.ogg' - - excavation_amount = 100 - - muzzle_type = /obj/effect/projectile/muzzle/emitter - tracer_type = /obj/effect/projectile/tracer/emitter - impact_type = /obj/effect/projectile/impact/emitter - -/obj/item/projectile/beam/heavylaser - name = "heavy laser" - icon_state = "heavylaser" - fire_sound = 'sound/weapons/lasercannonfire.ogg' - damage = 60 - armor_penetration = 30 - light_range = 3 - light_power = 1 - light_color = "#FF0D00" - - muzzle_type = /obj/effect/projectile/muzzle/laser_heavy - tracer_type = /obj/effect/projectile/tracer/laser_heavy - impact_type = /obj/effect/projectile/impact/laser_heavy - hud_state = "laser_overcharge" - -/obj/item/projectile/beam/heavylaser/fakeemitter - name = "emitter beam" - icon_state = "emitter" - fire_sound = 'sound/weapons/emitter.ogg' - light_color = "#00CC33" - excavation_amount = 140 // 2 shots to dig a standard rock turf. Superior due to being a mounted tool beam, to make it actually viable. - hud_state = "laser_overcharge" - - muzzle_type = /obj/effect/projectile/muzzle/emitter - tracer_type = /obj/effect/projectile/tracer/emitter - impact_type = /obj/effect/projectile/impact/emitter - -/obj/item/projectile/beam/heavylaser/ion - damage_type = ELECTROMAG - light_color = "#00CCFF" - muzzle_type = /obj/effect/projectile/muzzle/laser_em - tracer_type = /obj/effect/projectile/tracer/laser_em - impact_type = /obj/effect/projectile/impact/laser_em - -/obj/item/projectile/beam/heavylaser/cannon - damage = 80 - armor_penetration = 50 - light_color = "#FF0D00" - hud_state = "laser_overcharge" - -/obj/item/projectile/beam/xray - name = "xray beam" - icon_state = "xray" - fire_sound = 'sound/weapons/eluger.ogg' - damage = 25 - armor_penetration = 50 - light_color = "#00CC33" - hud_state = "laser_sniper" - - muzzle_type = /obj/effect/projectile/muzzle/xray - tracer_type = /obj/effect/projectile/tracer/xray - impact_type = /obj/effect/projectile/impact/xray - -/obj/item/projectile/beam/gamma - name = "gamma beam" - icon_state = "xray" - fire_sound = 'sound/weapons/eluger.ogg' - damage = 12 //CHOMPedit - armor_penetration = 90 - irradiate = 20 - light_color = "#00CC33" - hud_state = "laser_sniper" - - muzzle_type = /obj/effect/projectile/muzzle/xray - tracer_type = /obj/effect/projectile/tracer/xray - impact_type = /obj/effect/projectile/impact/xray - -/obj/item/projectile/beam/cyan - name = "cyan beam" - icon_state = "cyan" - fire_sound = 'sound/weapons/eluger.ogg' - damage = 40 - light_color = "#00C6FF" - hud_state = "laser_disabler" - - muzzle_type = /obj/effect/projectile/muzzle/laser_omni - tracer_type = /obj/effect/projectile/tracer/laser_omni - impact_type = /obj/effect/projectile/impact/laser_omni - -/obj/item/projectile/beam/pulse - name = "pulse" - icon_state = "u_laser" - fire_sound='sound/weapons/gauss_shoot.ogg' // Needs a more meaty sound than what pulse.ogg currently is; this will be a placeholder for now. - damage = 100 //Badmin toy, don't care - armor_penetration = 100 - light_color = "#0066FF" - hud_state = "pulse" - - muzzle_type = /obj/effect/projectile/muzzle/laser_pulse - tracer_type = /obj/effect/projectile/tracer/laser_pulse - impact_type = /obj/effect/projectile/impact/laser_pulse - -/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0) - if(isturf(target)) - target.ex_act(2) - ..() - -/obj/item/projectile/beam/emitter - name = "emitter beam" - icon_state = "emitter" - fire_sound = 'sound/weapons/emitter.ogg' - damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm - light_color = "#00CC33" - excavation_amount = 70 // 3 shots to mine a turf - hud_state = "laser_overcharge" - - muzzle_type = /obj/effect/projectile/muzzle/emitter - tracer_type = /obj/effect/projectile/tracer/emitter - impact_type = /obj/effect/projectile/impact/emitter - -/obj/item/projectile/beam/lasertag - name = "lasertag beam" - damage = 0 - excavation_amount = 0 - eyeblur = 0 - no_attack_log = 1 - damage_type = BURN - check_armour = "laser" - hud_state = "monkey" - - combustion = FALSE - -/obj/item/projectile/beam/lasertag/blue - icon_state = "bluelaser" - light_color = "#0066FF" - hud_state = "monkey" - muzzle_type = /obj/effect/projectile/muzzle/laser_blue - tracer_type = /obj/effect/projectile/tracer/laser_blue - impact_type = /obj/effect/projectile/impact/laser_blue - -/obj/item/projectile/beam/lasertag/blue/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lasertag/blue/multhit - name = "blue multi-hit lasertag beam" - -/obj/item/projectile/beam/lasertag/blue/multihit/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) - var/obj/item/clothing/suit/redtag/S = M.wear_suit - if (S.lasertag_health <= 1) - M.Weaken(5) - to_chat(M,"You have been defeated!") - S.lasertag_health = initial(S.lasertag_health) - else - S.lasertag_health-- - to_chat(M,"Danger! You have [num2text(S.lasertag_health)] hits remaining!") - return 1 - -/obj/item/projectile/beam/lasertag/red - icon_state = "laser" - light_color = "#FF0D00" - hud_state = "monkey" - -/obj/item/projectile/beam/lasertag/red/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lasertag/red/multhit - name = "red multi-hit lasertag beam" - -/obj/item/projectile/beam/lasertag/red/multihit/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) - var/obj/item/clothing/suit/bluetag/S = M.wear_suit - if(S.lasertag_health <= 1) - M.Weaken(5) - to_chat(M,"You have been defeated!") - S.lasertag_health = initial(S.lasertag_health) - else - S.lasertag_health-- - to_chat(M,"Danger! You have [num2text(S.lasertag_health)] hits remaining!") - return 1 - -/obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE - icon_state = "omnilaser" - light_color = "#00C6FF" - hud_state = "monkey" - - muzzle_type = /obj/effect/projectile/muzzle/laser_omni - tracer_type = /obj/effect/projectile/tracer/laser_omni - impact_type = /obj/effect/projectile/impact/laser_omni - -/obj/item/projectile/beam/lasertag/omni/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag))) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/sniper - name = "sniper beam" - icon_state = "xray" - fire_sound = 'sound/weapons/gauss_shoot.ogg' - damage = 50 - armor_penetration = 10 - light_color = "#00CC33" - hud_state = "laser_sniper" - - muzzle_type = /obj/effect/projectile/muzzle/xray - tracer_type = /obj/effect/projectile/tracer/xray - impact_type = /obj/effect/projectile/impact/xray - -/obj/item/projectile/beam/stun - name = "stun beam" - icon_state = "stun" - fire_sound = 'sound/weapons/Taser.ogg' - nodamage = 1 - taser_effect = 1 - agony = 35 - damage_type = HALLOSS - light_color = "#FFFFFF" - hitsound = 'sound/weapons/zapbang.ogg' - - - combustion = FALSE - - muzzle_type = /obj/effect/projectile/muzzle/stun - tracer_type = /obj/effect/projectile/tracer/stun - impact_type = /obj/effect/projectile/impact/stun - - hud_state = "taser" // TGMC Ammo HUD port - -/obj/item/projectile/beam/stun/weak - name = "weak stun beam" - icon_state = "stun" - agony = 25 - -/obj/item/projectile/beam/stun/med - name = "stun beam" - icon_state = "stun" - agony = 30 - -/obj/item/projectile/beam/stun/disabler - muzzle_type = /obj/effect/projectile/muzzle/laser_omni - tracer_type = /obj/effect/projectile/tracer/laser_omni - impact_type = /obj/effect/projectile/impact/laser_omni - -/obj/item/projectile/beam/stun/disabler/on_hit(atom/target, blocked = 0, def_zone) - . = ..(target, blocked, def_zone) - - if(. && istype(target, /mob/living/silicon/robot) && prob(agony)) - var/mob/living/silicon/robot/R = target - var/drainamt = agony * (rand(5, 15) / 10) - R.drain_power(0, 0, drainamt) - if(istype(firer, /mob/living/silicon/robot)) // Mischevious sappers, the swarm drones are. - var/mob/living/silicon/robot/A = firer - if(A.cell) - A.cell.give(drainamt * 2) - -/obj/item/projectile/beam/stun/kin21 - name = "kinh21 stun beam" - icon_state = "omnilaser" - light_color = "#0000FF" - muzzle_type = /obj/effect/projectile/muzzle/laser_omni - tracer_type = /obj/effect/projectile/tracer/laser_omni - impact_type = /obj/effect/projectile/impact/laser_omni - hud_state = "laser_disabler" - -/obj/item/projectile/beam/stun/blue - icon_state = "bluelaser" - light_color = "#0066FF" - muzzle_type = /obj/effect/projectile/muzzle/laser_blue - tracer_type = /obj/effect/projectile/tracer/laser_blue - impact_type = /obj/effect/projectile/impact/laser_blue - hud_state = "laser_disabler" - -/obj/item/projectile/beam/disable - name = "disabler beam" - icon_state = "omnilaser" - nodamage = 1 - taser_effect = 1 - agony = 100 //One shot stuns for the time being until adjustments are fully made. - damage_type = HALLOSS - light_color = "#00CECE" - hud_state = "laser_disabler" - - muzzle_type = /obj/effect/projectile/muzzle/laser_omni - tracer_type = /obj/effect/projectile/tracer/laser_omni - impact_type = /obj/effect/projectile/impact/laser_omni - -/obj/item/projectile/beam/shock - name = "shock beam" - icon_state = "lightning" - damage_type = ELECTROCUTE - - muzzle_type = /obj/effect/projectile/muzzle/lightning - tracer_type = /obj/effect/projectile/tracer/lightning - impact_type = /obj/effect/projectile/impact/lightning - - damage = 30 - agony = 15 - eyeblur = 2 - hitsound = 'sound/weapons/zapbang.ogg' - hud_state = "taser" - -/obj/item/projectile/beam/shock/weak - damage = 5 - agony = 10 - - -// -// Projectile Beam Definitions -// - -/obj/item/projectile/beam/pointdefense - name = "point defense salvo" - icon_state = "laser" - damage = 15 - damage_type = ELECTROCUTE //You should be safe inside a voidsuit - sharp = FALSE //"Wide" spectrum beam - light_color = COLOR_GOLD - - excavation_amount = 200 // Good at shooting rocks - - muzzle_type = /obj/effect/projectile/muzzle/pointdefense - tracer_type = /obj/effect/projectile/tracer/pointdefense - impact_type = /obj/effect/projectile/impact/pointdefense - -// CHOMPADD a physical/projectile coil-gun type pointdefense -/obj/item/projectile/beam/coildefense - name = "defense coil salvo" - icon_state = "coil" - damage = 15 - damage_type = ELECTROCUTE //You should be safe inside a voidsuit - sharp = FALSE //"Wide" spectrum beam - light_color = "#FFFFFF" - - excavation_amount = 200 // Good at shooting rocks - - muzzle_type = /obj/effect/projectile/muzzle/coildefense - tracer_type = /obj/effect/projectile/tracer/coildefense - impact_type = /obj/effect/projectile/impact/coildefense - - -/obj/item/projectile/beam/precursor //CHOMPedit added Precursor beam - name = "precursor beam" - icon_state = "alien beam" - fire_sound = 'sound/weapons/MediumLaser.ogg' - light_color = "#FF0099" - - muzzle_type = /obj/effect/projectile/muzzle/precursor - tracer_type = /obj/effect/projectile/tracer/precursor - impact_type = /obj/effect/projectile/impact/precursor - hud_state = "plasma_rifle" - damage = 48 - armor_penetration = 10 -/obj/item/projectile/beam/eluger - name = "laser beam" - icon_state = "xray" - light_color = "#00FF00" - muzzle_type = /obj/effect/projectile/muzzle/xray - tracer_type = /obj/effect/projectile/tracer/xray - impact_type = /obj/effect/projectile/impact/xray - hud_state = "laser" - -/obj/item/projectile/beam/imperial - name = "laser beam" - fire_sound = 'sound/weapons/mandalorian.ogg' - icon_state = "darkb" - light_color = "#8837A3" - muzzle_type = /obj/effect/projectile/muzzle/darkmatter - tracer_type = /obj/effect/projectile/tracer/darkmatter - impact_type = /obj/effect/projectile/impact/darkmatter - hud_state = "plasma_rifle_blast" -// -// Projectile Beam Definitions -// -/obj/item/projectile/beam/pointdefense - name = "point defense salvo" - icon_state = "laser" - damage = 15 - damage_type = ELECTROCUTE //You should be safe inside a voidsuit - sharp = FALSE //"Wide" spectrum beam - light_color = COLOR_GOLD - hud_state = "monkey" - excavation_amount = 200 // Good at shooting rocks - - muzzle_type = /obj/effect/projectile/muzzle/pointdefense - tracer_type = /obj/effect/projectile/tracer/pointdefense - impact_type = /obj/effect/projectile/impact/pointdefense - -// -// Energy Net -// -/obj/item/projectile/beam/energy_net - name = "energy net projection" - icon_state = "xray" - nodamage = 1 - agony = 5 - damage_type = HALLOSS - light_color = "#00CC33" - hud_state = "flame_green" - hud_state_empty = "flame_empty" - - muzzle_type = /obj/effect/projectile/muzzle/xray - tracer_type = /obj/effect/projectile/tracer/xray - impact_type = /obj/effect/projectile/impact/xray - -/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted) - do_net(netted) - ..() - -/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M) - var/obj/item/weapon/energy_net/net = new (get_turf(M)) - net.throw_impact(M) - -// -// Healing Beam -// -/obj/item/projectile/beam/medigun - name = "healing beam" - icon_state = "healbeam" - damage = 0 //stops it damaging walls - nodamage = TRUE - no_attack_log = TRUE - damage_type = BURN - check_armour = "laser" - light_color = "#80F5FF" - hud_state = "laser_disabler" - combustion = FALSE - - muzzle_type = /obj/effect/projectile/muzzle/medigun - tracer_type = /obj/effect/projectile/tracer/medigun - impact_type = /obj/effect/projectile/impact/medigun - -/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if(M.health < M.maxHealth) - var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M)) - pulse.icon = 'icons/effects/effects.dmi' - pulse.icon_state = "heal" - pulse.name = "heal" - pulse.anchored = TRUE - spawn(20) - qdel(pulse) - to_chat(target, "As the beam strikes you, your injuries close up!") - M.adjustBruteLoss(-15) - M.adjustFireLoss(-15) - M.adjustToxLoss(-5) - M.adjustOxyLoss(-5) - return 1 +/obj/item/projectile/beam + name = "laser" + icon_state = "laser" + fire_sound = 'sound/weapons/Laser.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + damage = 40 + damage_type = BURN + check_armour = "laser" + eyeblur = 4 + var/frequency = 1 + hitscan = 1 + embed_chance = 0 + invisibility = 99 //beam projectiles are invisible as they are rendered by the effect engine + light_range = 2 + light_power = 0.5 + light_color = "#FF0D00" + hitsound = 'sound/weapons/sear.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + + muzzle_type = /obj/effect/projectile/muzzle/laser + tracer_type = /obj/effect/projectile/tracer/laser + impact_type = /obj/effect/projectile/impact/laser + + hud_state = "laser" + hud_state_empty = "battery_empty" + +/obj/item/projectile/beam/practice + name = "laser" + icon_state = "laser" + damage = 0 + excavation_amount = 0 + damage_type = BURN + check_armour = "laser" + eyeblur = 2 + hud_state = "laser" + +/obj/item/projectile/beam/weaklaser + name = "weak laser" + icon_state = "laser" + damage = 15 + hud_state = "laser" + +/obj/item/projectile/beam/weaklaser/blue + icon_state = "bluelaser" + light_color = "#0066FF" + hud_state = "laser_disabler" + + muzzle_type = /obj/effect/projectile/muzzle/laser_blue + tracer_type = /obj/effect/projectile/tracer/laser_blue + impact_type = /obj/effect/projectile/impact/laser_blue + +/obj/item/projectile/beam/weaklaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/smalllaser + damage = 25 + hud_state = "laser" + +/obj/item/projectile/beam/smalllaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/burstlaser + damage = 30 + armor_penetration = 10 + hud_state = "laser" + +/obj/item/projectile/beam/burstlaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/midlaser + damage = 40 + armor_penetration = 10 + hud_state = "laser" + +/obj/item/projectile/beam/midlaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/mininglaser + name = "pulsating laser" + damage = 10 + armor_penetration = 20 + fire_sound = 'sound/weapons/eluger.ogg' + + excavation_amount = 100 + + muzzle_type = /obj/effect/projectile/muzzle/emitter + tracer_type = /obj/effect/projectile/tracer/emitter + impact_type = /obj/effect/projectile/impact/emitter + +/obj/item/projectile/beam/heavylaser + name = "heavy laser" + icon_state = "heavylaser" + fire_sound = 'sound/weapons/lasercannonfire.ogg' + damage = 60 + armor_penetration = 30 + light_range = 3 + light_power = 1 + light_color = "#FF0D00" + + muzzle_type = /obj/effect/projectile/muzzle/laser_heavy + tracer_type = /obj/effect/projectile/tracer/laser_heavy + impact_type = /obj/effect/projectile/impact/laser_heavy + hud_state = "laser_overcharge" + +/obj/item/projectile/beam/heavylaser/fakeemitter + name = "emitter beam" + icon_state = "emitter" + fire_sound = 'sound/weapons/emitter.ogg' + light_color = "#00CC33" + excavation_amount = 140 // 2 shots to dig a standard rock turf. Superior due to being a mounted tool beam, to make it actually viable. + hud_state = "laser_overcharge" + + muzzle_type = /obj/effect/projectile/muzzle/emitter + tracer_type = /obj/effect/projectile/tracer/emitter + impact_type = /obj/effect/projectile/impact/emitter + +/obj/item/projectile/beam/heavylaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/heavylaser/cannon + damage = 80 + armor_penetration = 50 + light_color = "#FF0D00" + hud_state = "laser_overcharge" + +/obj/item/projectile/beam/xray + name = "xray beam" + icon_state = "xray" + fire_sound = 'sound/weapons/eluger.ogg' + damage = 25 + armor_penetration = 50 + light_color = "#00CC33" + hud_state = "laser_sniper" + + muzzle_type = /obj/effect/projectile/muzzle/xray + tracer_type = /obj/effect/projectile/tracer/xray + impact_type = /obj/effect/projectile/impact/xray + +/obj/item/projectile/beam/gamma + name = "gamma beam" + icon_state = "xray" + fire_sound = 'sound/weapons/eluger.ogg' + damage = 12 //CHOMPedit + armor_penetration = 90 + irradiate = 20 + light_color = "#00CC33" + hud_state = "laser_sniper" + + muzzle_type = /obj/effect/projectile/muzzle/xray + tracer_type = /obj/effect/projectile/tracer/xray + impact_type = /obj/effect/projectile/impact/xray + +/obj/item/projectile/beam/cyan + name = "cyan beam" + icon_state = "cyan" + fire_sound = 'sound/weapons/eluger.ogg' + damage = 40 + light_color = "#00C6FF" + hud_state = "laser_disabler" + + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + +/obj/item/projectile/beam/pulse + name = "pulse" + icon_state = "u_laser" + fire_sound='sound/weapons/gauss_shoot.ogg' // Needs a more meaty sound than what pulse.ogg currently is; this will be a placeholder for now. + damage = 100 //Badmin toy, don't care + armor_penetration = 100 + light_color = "#0066FF" + hud_state = "pulse" + + muzzle_type = /obj/effect/projectile/muzzle/laser_pulse + tracer_type = /obj/effect/projectile/tracer/laser_pulse + impact_type = /obj/effect/projectile/impact/laser_pulse + +/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0) + if(isturf(target)) + target.ex_act(2) + ..() + +/obj/item/projectile/beam/emitter + name = "emitter beam" + icon_state = "emitter" + fire_sound = 'sound/weapons/emitter.ogg' + damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm + light_color = "#00CC33" + excavation_amount = 70 // 3 shots to mine a turf + hud_state = "laser_overcharge" + + muzzle_type = /obj/effect/projectile/muzzle/emitter + tracer_type = /obj/effect/projectile/tracer/emitter + impact_type = /obj/effect/projectile/impact/emitter + +/obj/item/projectile/beam/lasertag + name = "lasertag beam" + damage = 0 + excavation_amount = 0 + eyeblur = 0 + no_attack_log = 1 + damage_type = BURN + check_armour = "laser" + hud_state = "monkey" + + combustion = FALSE + +/obj/item/projectile/beam/lasertag/blue + icon_state = "bluelaser" + light_color = "#0066FF" + hud_state = "monkey" + muzzle_type = /obj/effect/projectile/muzzle/laser_blue + tracer_type = /obj/effect/projectile/tracer/laser_blue + impact_type = /obj/effect/projectile/impact/laser_blue + +/obj/item/projectile/beam/lasertag/blue/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) + M.Weaken(5) + return 1 + +/obj/item/projectile/beam/lasertag/blue/multhit + name = "blue multi-hit lasertag beam" + +/obj/item/projectile/beam/lasertag/blue/multihit/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) + var/obj/item/clothing/suit/redtag/S = M.wear_suit + if (S.lasertag_health <= 1) + M.Weaken(5) + to_chat(M,"You have been defeated!") + S.lasertag_health = initial(S.lasertag_health) + else + S.lasertag_health-- + to_chat(M,"Danger! You have [num2text(S.lasertag_health)] hits remaining!") + return 1 + +/obj/item/projectile/beam/lasertag/red + icon_state = "laser" + light_color = "#FF0D00" + hud_state = "monkey" + +/obj/item/projectile/beam/lasertag/red/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) + M.Weaken(5) + return 1 + +/obj/item/projectile/beam/lasertag/red/multhit + name = "red multi-hit lasertag beam" + +/obj/item/projectile/beam/lasertag/red/multihit/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) + var/obj/item/clothing/suit/bluetag/S = M.wear_suit + if(S.lasertag_health <= 1) + M.Weaken(5) + to_chat(M,"You have been defeated!") + S.lasertag_health = initial(S.lasertag_health) + else + S.lasertag_health-- + to_chat(M,"Danger! You have [num2text(S.lasertag_health)] hits remaining!") + return 1 + +/obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE + icon_state = "omnilaser" + light_color = "#00C6FF" + hud_state = "monkey" + + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + +/obj/item/projectile/beam/lasertag/omni/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag))) + M.Weaken(5) + return 1 + +/obj/item/projectile/beam/sniper + name = "sniper beam" + icon_state = "xray" + fire_sound = 'sound/weapons/gauss_shoot.ogg' + damage = 50 + armor_penetration = 10 + light_color = "#00CC33" + hud_state = "laser_sniper" + + muzzle_type = /obj/effect/projectile/muzzle/xray + tracer_type = /obj/effect/projectile/tracer/xray + impact_type = /obj/effect/projectile/impact/xray + +/obj/item/projectile/beam/stun + name = "stun beam" + icon_state = "stun" + fire_sound = 'sound/weapons/Taser.ogg' + nodamage = 1 + taser_effect = 1 + agony = 35 + damage_type = HALLOSS + light_color = "#FFFFFF" + hitsound = 'sound/weapons/zapbang.ogg' + + + combustion = FALSE + + muzzle_type = /obj/effect/projectile/muzzle/stun + tracer_type = /obj/effect/projectile/tracer/stun + impact_type = /obj/effect/projectile/impact/stun + + hud_state = "taser" // TGMC Ammo HUD port + +/obj/item/projectile/beam/stun/weak + name = "weak stun beam" + icon_state = "stun" + agony = 25 + +/obj/item/projectile/beam/stun/med + name = "stun beam" + icon_state = "stun" + agony = 30 + +/obj/item/projectile/beam/stun/disabler + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + +/obj/item/projectile/beam/stun/disabler/on_hit(atom/target, blocked = 0, def_zone) + . = ..(target, blocked, def_zone) + + if(. && istype(target, /mob/living/silicon/robot) && prob(agony)) + var/mob/living/silicon/robot/R = target + var/drainamt = agony * (rand(5, 15) / 10) + R.drain_power(0, 0, drainamt) + if(istype(firer, /mob/living/silicon/robot)) // Mischevious sappers, the swarm drones are. + var/mob/living/silicon/robot/A = firer + if(A.cell) + A.cell.give(drainamt * 2) + +/obj/item/projectile/beam/stun/kin21 + name = "kinh21 stun beam" + icon_state = "omnilaser" + light_color = "#0000FF" + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + hud_state = "laser_disabler" + +/obj/item/projectile/beam/stun/blue + icon_state = "bluelaser" + light_color = "#0066FF" + muzzle_type = /obj/effect/projectile/muzzle/laser_blue + tracer_type = /obj/effect/projectile/tracer/laser_blue + impact_type = /obj/effect/projectile/impact/laser_blue + hud_state = "laser_disabler" + +/obj/item/projectile/beam/disable + name = "disabler beam" + icon_state = "omnilaser" + nodamage = 1 + taser_effect = 1 + agony = 100 //One shot stuns for the time being until adjustments are fully made. + damage_type = HALLOSS + light_color = "#00CECE" + hud_state = "laser_disabler" + + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + +/obj/item/projectile/beam/shock + name = "shock beam" + icon_state = "lightning" + damage_type = ELECTROCUTE + + muzzle_type = /obj/effect/projectile/muzzle/lightning + tracer_type = /obj/effect/projectile/tracer/lightning + impact_type = /obj/effect/projectile/impact/lightning + + damage = 30 + agony = 15 + eyeblur = 2 + hitsound = 'sound/weapons/zapbang.ogg' + hud_state = "taser" + +/obj/item/projectile/beam/shock/weak + damage = 5 + agony = 10 + + +// +// Projectile Beam Definitions +// + +/obj/item/projectile/beam/pointdefense + name = "point defense salvo" + icon_state = "laser" + damage = 15 + damage_type = ELECTROCUTE //You should be safe inside a voidsuit + sharp = FALSE //"Wide" spectrum beam + light_color = COLOR_GOLD + + excavation_amount = 200 // Good at shooting rocks + + muzzle_type = /obj/effect/projectile/muzzle/pointdefense + tracer_type = /obj/effect/projectile/tracer/pointdefense + impact_type = /obj/effect/projectile/impact/pointdefense + +// CHOMPADD a physical/projectile coil-gun type pointdefense +/obj/item/projectile/beam/coildefense + name = "defense coil salvo" + icon_state = "coil" + damage = 15 + damage_type = ELECTROCUTE //You should be safe inside a voidsuit + sharp = FALSE //"Wide" spectrum beam + light_color = "#FFFFFF" + + excavation_amount = 200 // Good at shooting rocks + + muzzle_type = /obj/effect/projectile/muzzle/coildefense + tracer_type = /obj/effect/projectile/tracer/coildefense + impact_type = /obj/effect/projectile/impact/coildefense + + +/obj/item/projectile/beam/precursor //CHOMPedit added Precursor beam + name = "precursor beam" + icon_state = "alien beam" + fire_sound = 'sound/weapons/MediumLaser.ogg' + light_color = "#FF0099" + + muzzle_type = /obj/effect/projectile/muzzle/precursor + tracer_type = /obj/effect/projectile/tracer/precursor + impact_type = /obj/effect/projectile/impact/precursor + hud_state = "plasma_rifle" + damage = 48 + armor_penetration = 10 +/obj/item/projectile/beam/eluger + name = "laser beam" + icon_state = "xray" + light_color = "#00FF00" + muzzle_type = /obj/effect/projectile/muzzle/xray + tracer_type = /obj/effect/projectile/tracer/xray + impact_type = /obj/effect/projectile/impact/xray + hud_state = "laser" + +/obj/item/projectile/beam/imperial + name = "laser beam" + fire_sound = 'sound/weapons/mandalorian.ogg' + icon_state = "darkb" + light_color = "#8837A3" + muzzle_type = /obj/effect/projectile/muzzle/darkmatter + tracer_type = /obj/effect/projectile/tracer/darkmatter + impact_type = /obj/effect/projectile/impact/darkmatter + hud_state = "plasma_rifle_blast" +// +// Projectile Beam Definitions +// +/obj/item/projectile/beam/pointdefense + name = "point defense salvo" + icon_state = "laser" + damage = 15 + damage_type = ELECTROCUTE //You should be safe inside a voidsuit + sharp = FALSE //"Wide" spectrum beam + light_color = COLOR_GOLD + hud_state = "monkey" + excavation_amount = 200 // Good at shooting rocks + + muzzle_type = /obj/effect/projectile/muzzle/pointdefense + tracer_type = /obj/effect/projectile/tracer/pointdefense + impact_type = /obj/effect/projectile/impact/pointdefense + +// +// Energy Net +// +/obj/item/projectile/beam/energy_net + name = "energy net projection" + icon_state = "xray" + nodamage = 1 + agony = 5 + damage_type = HALLOSS + light_color = "#00CC33" + hud_state = "flame_green" + hud_state_empty = "flame_empty" + + muzzle_type = /obj/effect/projectile/muzzle/xray + tracer_type = /obj/effect/projectile/tracer/xray + impact_type = /obj/effect/projectile/impact/xray + +/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted) + do_net(netted) + ..() + +/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M) + var/obj/item/weapon/energy_net/net = new (get_turf(M)) + net.throw_impact(M) + +// +// Healing Beam +// +/obj/item/projectile/beam/medigun + name = "healing beam" + icon_state = "healbeam" + damage = 0 //stops it damaging walls + nodamage = TRUE + no_attack_log = TRUE + damage_type = BURN + check_armour = "laser" + light_color = "#80F5FF" + hud_state = "laser_disabler" + combustion = FALSE + + muzzle_type = /obj/effect/projectile/muzzle/medigun + tracer_type = /obj/effect/projectile/tracer/medigun + impact_type = /obj/effect/projectile/impact/medigun + +/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0) + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = target + if(M.health < M.maxHealth) + var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M)) + pulse.icon = 'icons/effects/effects.dmi' + pulse.icon_state = "heal" + pulse.name = "heal" + pulse.anchored = TRUE + spawn(20) + qdel(pulse) + to_chat(target, "As the beam strikes you, your injuries close up!") + M.adjustBruteLoss(-15) + M.adjustFireLoss(-15) + M.adjustToxLoss(-5) + M.adjustOxyLoss(-5) + return 1 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 8ca7d343e8..812ca5a2a2 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -1,476 +1,476 @@ -/obj/item/projectile/bullet - name = "bullet" - icon = 'icons/obj/projectiles_yw.dmi' //YWEdit, uses our bullet sprites - icon_state = "bullet" - fire_sound = 'sound/weapons/Gunshot4.ogg' - damage = 60 - damage_type = BRUTE - nodamage = 0 - check_armour = "bullet" - embed_chance = 20 //Modified in the actual embed process, but this should keep embed chance about the same - sharp = TRUE - hitsound_wall = "ricochet" - impact_effect_type = /obj/effect/temp_visual/impact_effect - var/mob_passthrough_check = 0 - hud_state = "pistol_lightap" - hud_state_empty = "pistol_empty" // Just in case we somehow have no hud_state_empty defined - - muzzle_type = /obj/effect/projectile/muzzle/bullet - -/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0) - ..(target, blocked) - //var/mob/living/L = target - //shake_camera(L, 3, 2) CHOMPEDIT - "Muh realism". The screenshake is obnoxious for gameplay. TODO: Replace with blood splatter indicator. - -/obj/item/projectile/bullet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) - if(penetrating > 0 && damage > 20 && prob(damage)) - mob_passthrough_check = 1 - else - mob_passthrough_check = 0 - return ..() - -/obj/item/projectile/bullet/can_embed() - //prevent embedding if the projectile is passing through the mob - if(mob_passthrough_check) - return 0 - return ..() - -/obj/item/projectile/bullet/check_penetrate(var/atom/A) - if(!A || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going - - if(istype(A, /obj/mecha)) - return 1 //mecha have their own penetration handling - - if(ismob(A)) - if(!mob_passthrough_check) - return 0 - if(iscarbon(A)) - damage *= 0.7 //squishy mobs absorb KE - return 1 - - var/chance = damage - if(istype(A, /turf/simulated/wall)) - var/turf/simulated/wall/W = A - chance = round(damage/W.material.integrity*180) - else if(istype(A, /obj/machinery/door)) - var/obj/machinery/door/D = A - chance = round(damage/D.maxhealth*180) - if(D.glass) chance *= 2 - else if(istype(A, /obj/structure/girder)) - chance = 100 - else if(istype(A, /obj/machinery/door/airlock/voidcraft)) //CHOMPEDIT Begin, lets the code see shuttlecraft structures and not treat them as air. - chance = 0 - else if(istype(A, /turf/simulated/shuttle/wall)) - chance = 0 //CHOMPEDIT End. Yeah, shuttlecraft can handle small arms fire just fine. - - if(prob(chance)) - if(A.opacity) - //display a message so that people on the other side aren't so confused - A.visible_message("\The [src] pierces through \the [A]!") - return 1 - - return 0 - -/* short-casing projectiles, like the kind used in pistols or SMGs */ - -/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity. - fire_sound = 'sound/weapons/gunshot2.ogg' - damage = 20 - hud_state = "pistol" - hud_state_empty = "pistol_empty" - -/obj/item/projectile/bullet/pistol/ap - damage = 15 - armor_penetration = 30 - hud_state = "pistol_light_ap" - -/obj/item/projectile/bullet/pistol/hp - damage = 25 - armor_penetration = -50 - hud_state = "pistol_ap" - -/obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power. - fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound. - damage = 25 - hud_state = "pistol" - -/obj/item/projectile/bullet/pistol/medium/ap - damage = 20 - armor_penetration = 15 - hud_state = "pistol_light_ap" - -/obj/item/projectile/bullet/pistol/medium/hp - damage = 30 - armor_penetration = -50 - hud_state = "pistol_ap" - -/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power. - fire_sound = 'sound/weapons/gunshot4.ogg' - damage = 60 - hud_state = "pistol_heavy" - -/obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols. - fire_sound = 'sound/weapons/gunshot3.ogg' // Rubber shots have less powder, but these still have more punch than normal rubber shot. - damage = 10 - agony = 60 - embed_chance = 0 - sharp = FALSE - check_armour = "melee" - hud_state = "pistol_special" - -/obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols. - name = "rubber bullet" - damage = 5 - agony = 40 - embed_chance = 0 - sharp = FALSE - check_armour = "melee" - hud_state = "pistol_special" - fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing. - -/* shotgun projectiles */ - -/obj/item/projectile/bullet/shotgun - name = "slug" - icon_state = "bullet_chonk" //Ywedit - fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' - damage = 50 - armor_penetration = 20 - hud_state = "shotgun_slug" - hud_state_empty = "shotgun_empty" - -/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets - name = "beanbag" - damage = 20 - agony = 60 - embed_chance = 0 - sharp = FALSE - check_armour = "melee" - hud_state = "shotgun_beanbag" - -//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance. -//Overall less damage than slugs in exchange for more damage at very close range and more embedding -/obj/item/projectile/bullet/pellet/shotgun - name = "shrapnel" - fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' - damage = 13 - pellets = 6 - range_step = 1 - spread_step = 10 - hud_state = "shotgun_buckshot" - -/obj/item/projectile/bullet/pellet/shotgun/flak - damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually. - range_step = 2 - spread_step = 30 - armor_penetration = 10 - hud_state = "shotgun_flechette" - -//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used -/obj/item/projectile/bullet/shotgun/ion - name = "ion slug" - fire_sound = 'sound/weapons/Laser.ogg' // Really? We got nothing better than this? - damage = 15 - embed_chance = 0 - sharp = FALSE - check_armour = "melee" - hud_state = "shotgun_ion" - - combustion = FALSE - -/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0) - ..() - empulse(target, 0, 0, 0, 0) //Only affects what it hits - return 1 - - -/* "Rifle" rounds */ - -/obj/item/projectile/bullet/rifle - fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' - armor_penetration = 15 - //penetrating = 1 CHOMPedit: This is the only thing I see that could cause stun and unsure what can be pierced with a penetrating of 1. - hud_state = "rifle" - hud_state_empty = "rifle_empty" - -/obj/item/projectile/bullet/rifle/a762 - fire_sound = 'sound/weapons/Gunshot_heavy.ogg' - damage = 35 - hud_state = "rifle_heavy" - -/obj/item/projectile/bullet/rifle/a762/sniper // Hitscan specifically for sniper ammo; to be implimented at a later date, probably for the SVD. -Ace - fire_sound = 'sound/weapons/Gunshot_sniper.ogg' - hitscan = 1 //so the ammo isn't useless as a sniper weapon - hud_state = "hivelo" - -/obj/item/projectile/bullet/rifle/a762/ap - damage = 30 - armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds. - hud_state = "rifle_ap" - -/obj/item/projectile/bullet/rifle/a762/hp - damage = 40 - armor_penetration = -50 - penetrating = 0 - hud_state = "hivelo_iff" - -/obj/item/projectile/bullet/rifle/a762/hunter // Optimized for killing simple animals and not people, because Balance(tm) - damage = 20 - SA_bonus_damage = 50 // 70 total on animals. - SA_vulnerability = SA_ANIMAL - hud_state = "rifle_heavy" - -/obj/item/projectile/bullet/rifle/a545 - fire_sound = 'sound/weapons/Gunshot_light.ogg' - damage = 25 - hud_state = "rifle" - -/obj/item/projectile/bullet/rifle/a545/ap - damage = 20 - armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds. - hud_state = "rifle_ap" - -/obj/item/projectile/bullet/rifle/a545/hp - damage = 35 - armor_penetration = -50 - penetrating = 0 - hud_state = "hivelo_iff" - -/obj/item/projectile/bullet/rifle/a545/hunter - damage = 15 - SA_bonus_damage = 35 // 50 total on animals. - SA_vulnerability = SA_ANIMAL - hud_state = "rifle_heavy" - -/obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round. - fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon. - damage = 80 - stun = 3 - weaken = 3 - penetrating = 5 - armor_penetration = 80 - hitscan = 1 //so the PTR isn't useless as a sniper weapon - hud_state = "sniper" - - icon_state = "bullet_alt" - tracer_type = /obj/effect/projectile/tracer/cannon - -/obj/item/projectile/bullet/rifle/a145/highvel - damage = 50 - stun = 1 - weaken = 0 - penetrating = 15 - armor_penetration = 90 - hud_state = "sniper_flak" - -/obj/item/projectile/bullet/rifle/a44rifle - fire_sound = 'sound/weapons/gunshot4.ogg' - damage = 50 - hud_state = "revolver" - -/* Miscellaneous */ - -/obj/item/projectile/bullet/suffocationbullet//How does this even work? - name = "co bullet" - damage = 20 - damage_type = OXY - hud_state = "pistol_tranq" - -/obj/item/projectile/bullet/cyanideround - name = "poison bullet" - damage = 40 - damage_type = TOX - hud_state = "pistol_tranq" - -/obj/item/projectile/bullet/burstbullet - name = "exploding bullet" - fire_sound = 'sound/effects/Explosion1.ogg' - damage = 20 - embed_chance = 0 - edge = TRUE - hud_state = "pistol_fire" - -/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0) - if(isturf(target)) - explosion(target, -1, 0, 2) - ..() - -/* Incendiary */ - -/obj/item/projectile/bullet/incendiary - name = "incendiary bullet" - icon_state = "bullet_alt" - damage = 15 - damage_type = BURN - incendiary = 0.5 - flammability = 2 - hud_state = "pistol_fire" - -/obj/item/projectile/bullet/incendiary/flamethrower - name = "ball of fire" - desc = "Don't stand in the fire." - icon_state = "fireball" - damage = 10 - embed_chance = 0 - incendiary = 2 - flammability = 4 - agony = 30 - range = 4 - vacuum_traversal = 0 - hud_state = "flame" - -/obj/item/projectile/bullet/incendiary/flamethrower/after_move() - ..() - - - var/turf/T = get_turf(src) - if(istype(T)) - for(var/obj/effect/plant/Victim in T) - if(prob(max(20, 100 - (Victim.seed.get_trait(TRAIT_ENDURANCE))))) // Chance to immediately kill a vine or rampant growth, minimum of 20%. - Victim.die_off() - -/obj/item/projectile/bullet/incendiary/flamethrower/large - damage = 5 - incendiary = 3 - flammability = 2 - range = 6 - hud_state = "flame" - -/obj/item/projectile/bullet/incendiary/flamethrower/tiny - damage = 2 - incendiary = 0 - flammability = 2 - modifier_type_to_apply = /datum/modifier/fire/stack_managed/weak - modifier_duration = 20 SECONDS - range = 6 - agony = 0 - hud_state = "flame" - -/* Practice rounds and blanks */ - -/obj/item/projectile/bullet/practice - damage = 5 - hud_state = "smg_light" - -/obj/item/projectile/bullet/pistol/cap // Just the primer, such as a cap gun. - name = "cap" - damage_type = HALLOSS - fire_sound = 'sound/effects/snap.ogg' - damage = 0 - nodamage = 1 - embed_chance = 0 - sharp = FALSE - hud_state = "monkey" - - combustion = FALSE - -/obj/item/projectile/bullet/pistol/cap/process() - loc = null - qdel(src) - -/obj/item/projectile/bullet/blank - name = "blank" - damage_type = HALLOSS - fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' // Blanks still make loud noises. - damage = 0 - nodamage = 1 - embed_chance = 0 - sharp = FALSE - hud_state = "smg_light" - -/* BB Rounds */ -/obj/item/projectile/bullet/bb // Generic single BB - name = "BB" - damage = 0 - agony = 0 - embed_chance = 0 - sharp = FALSE - silenced = TRUE - hud_state = "pistol_light" - -/obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun - name = "BB" - damage = 0 - agony = 0 - embed_chance = 0 - sharp = FALSE - pellets = 6 - range_step = 1 - spread_step = 10 - silenced = TRUE - hud_state = "pistol_light" - -/* toy projectiles */ -/obj/item/projectile/bullet/cap - name = "cap" - desc = "SNAP!" - damage = 0 // It's a damn toy. - embed_chance = 0 - nodamage = TRUE - sharp = FALSE - damage_type = HALLOSS - impact_effect_type = null - fire_sound = 'sound/effects/snap.ogg' - combustion = FALSE - hud_state = "pistol_light" - -/obj/item/projectile/bullet/cap/process() - loc = null - qdel(src) - -/obj/item/projectile/bullet/foam_dart - name = "foam dart" - desc = "I hope you're wearing eye protection." - damage = 0 // It's a damn toy. - embed_chance = 0 - nodamage = TRUE - sharp = FALSE - damage_type = HALLOSS - impact_effect_type = null - fire_sound = 'sound/items/syringeproj.ogg' - combustion = FALSE - icon = 'icons/obj/gun_toy.dmi' - icon_state = "foamdart_proj" - range = 15 - hud_state = "grenade_dummy" - -/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A) - . = ..() - var/turf/T = get_turf(loc) - if(istype(T)) - new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) - -/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A) - . = ..() - var/turf/T = get_turf(loc) - if(istype(T)) - new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) - -/obj/item/projectile/bullet/foam_dart_riot - name = "riot foam dart" - desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." - damage = 0 // It's a damn toy. - embed_chance = 0 - agony = 50 // The riot part of the riot dart - nodamage = TRUE - sharp = FALSE - damage_type = HALLOSS - impact_effect_type = null - fire_sound = 'sound/items/syringeproj.ogg' - combustion = FALSE - icon = 'icons/obj/gun_toy.dmi' - icon_state = "foamdart_riot_proj" - range = 15 - hud_state = "grenade_he" - -/obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A) - . = ..() - var/turf/T = get_turf(loc) - if(istype(T)) - new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc)) - -/obj/item/projectile/bullet/foam_dart_riot/on_range(var/atom/A) - . = ..() - var/turf/T = get_turf(loc) - if(istype(T)) +/obj/item/projectile/bullet + name = "bullet" + icon = 'icons/obj/projectiles_yw.dmi' //YWEdit, uses our bullet sprites + icon_state = "bullet" + fire_sound = 'sound/weapons/Gunshot4.ogg' + damage = 60 + damage_type = BRUTE + nodamage = 0 + check_armour = "bullet" + embed_chance = 20 //Modified in the actual embed process, but this should keep embed chance about the same + sharp = TRUE + hitsound_wall = "ricochet" + impact_effect_type = /obj/effect/temp_visual/impact_effect + var/mob_passthrough_check = 0 + hud_state = "pistol_lightap" + hud_state_empty = "pistol_empty" // Just in case we somehow have no hud_state_empty defined + + muzzle_type = /obj/effect/projectile/muzzle/bullet + +/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0) + ..(target, blocked) + //var/mob/living/L = target + //shake_camera(L, 3, 2) CHOMPEDIT - "Muh realism". The screenshake is obnoxious for gameplay. TODO: Replace with blood splatter indicator. + +/obj/item/projectile/bullet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) + if(penetrating > 0 && damage > 20 && prob(damage)) + mob_passthrough_check = 1 + else + mob_passthrough_check = 0 + return ..() + +/obj/item/projectile/bullet/can_embed() + //prevent embedding if the projectile is passing through the mob + if(mob_passthrough_check) + return 0 + return ..() + +/obj/item/projectile/bullet/check_penetrate(var/atom/A) + if(!A || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going + + if(istype(A, /obj/mecha)) + return 1 //mecha have their own penetration handling + + if(ismob(A)) + if(!mob_passthrough_check) + return 0 + if(iscarbon(A)) + damage *= 0.7 //squishy mobs absorb KE + return 1 + + var/chance = damage + if(istype(A, /turf/simulated/wall)) + var/turf/simulated/wall/W = A + chance = round(damage/W.material.integrity*180) + else if(istype(A, /obj/machinery/door)) + var/obj/machinery/door/D = A + chance = round(damage/D.maxhealth*180) + if(D.glass) chance *= 2 + else if(istype(A, /obj/structure/girder)) + chance = 100 + else if(istype(A, /obj/machinery/door/airlock/voidcraft)) //CHOMPEDIT Begin, lets the code see shuttlecraft structures and not treat them as air. + chance = 0 + else if(istype(A, /turf/simulated/shuttle/wall)) + chance = 0 //CHOMPEDIT End. Yeah, shuttlecraft can handle small arms fire just fine. + + if(prob(chance)) + if(A.opacity) + //display a message so that people on the other side aren't so confused + A.visible_message("\The [src] pierces through \the [A]!") + return 1 + + return 0 + +/* short-casing projectiles, like the kind used in pistols or SMGs */ + +/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity. + fire_sound = 'sound/weapons/gunshot2.ogg' + damage = 20 + hud_state = "pistol" + hud_state_empty = "pistol_empty" + +/obj/item/projectile/bullet/pistol/ap + damage = 15 + armor_penetration = 30 + hud_state = "pistol_light_ap" + +/obj/item/projectile/bullet/pistol/hp + damage = 25 + armor_penetration = -50 + hud_state = "pistol_ap" + +/obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power. + fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound. + damage = 25 + hud_state = "pistol" + +/obj/item/projectile/bullet/pistol/medium/ap + damage = 20 + armor_penetration = 15 + hud_state = "pistol_light_ap" + +/obj/item/projectile/bullet/pistol/medium/hp + damage = 30 + armor_penetration = -50 + hud_state = "pistol_ap" + +/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power. + fire_sound = 'sound/weapons/gunshot4.ogg' + damage = 60 + hud_state = "pistol_heavy" + +/obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols. + fire_sound = 'sound/weapons/gunshot3.ogg' // Rubber shots have less powder, but these still have more punch than normal rubber shot. + damage = 10 + agony = 60 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + hud_state = "pistol_special" + +/obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols. + name = "rubber bullet" + damage = 5 + agony = 40 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + hud_state = "pistol_special" + fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing. + +/* shotgun projectiles */ + +/obj/item/projectile/bullet/shotgun + name = "slug" + icon_state = "bullet_chonk" //Ywedit + fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' + damage = 50 + armor_penetration = 20 + hud_state = "shotgun_slug" + hud_state_empty = "shotgun_empty" + +/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets + name = "beanbag" + damage = 20 + agony = 60 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + hud_state = "shotgun_beanbag" + +//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance. +//Overall less damage than slugs in exchange for more damage at very close range and more embedding +/obj/item/projectile/bullet/pellet/shotgun + name = "shrapnel" + fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' + damage = 13 + pellets = 6 + range_step = 1 + spread_step = 10 + hud_state = "shotgun_buckshot" + +/obj/item/projectile/bullet/pellet/shotgun/flak + damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually. + range_step = 2 + spread_step = 30 + armor_penetration = 10 + hud_state = "shotgun_flechette" + +//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used +/obj/item/projectile/bullet/shotgun/ion + name = "ion slug" + fire_sound = 'sound/weapons/Laser.ogg' // Really? We got nothing better than this? + damage = 15 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + hud_state = "shotgun_ion" + + combustion = FALSE + +/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0) + ..() + empulse(target, 0, 0, 0, 0) //Only affects what it hits + return 1 + + +/* "Rifle" rounds */ + +/obj/item/projectile/bullet/rifle + fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' + armor_penetration = 15 + //penetrating = 1 CHOMPedit: This is the only thing I see that could cause stun and unsure what can be pierced with a penetrating of 1. + hud_state = "rifle" + hud_state_empty = "rifle_empty" + +/obj/item/projectile/bullet/rifle/a762 + fire_sound = 'sound/weapons/Gunshot_heavy.ogg' + damage = 35 + hud_state = "rifle_heavy" + +/obj/item/projectile/bullet/rifle/a762/sniper // Hitscan specifically for sniper ammo; to be implimented at a later date, probably for the SVD. -Ace + fire_sound = 'sound/weapons/Gunshot_sniper.ogg' + hitscan = 1 //so the ammo isn't useless as a sniper weapon + hud_state = "hivelo" + +/obj/item/projectile/bullet/rifle/a762/ap + damage = 30 + armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds. + hud_state = "rifle_ap" + +/obj/item/projectile/bullet/rifle/a762/hp + damage = 40 + armor_penetration = -50 + penetrating = 0 + hud_state = "hivelo_iff" + +/obj/item/projectile/bullet/rifle/a762/hunter // Optimized for killing simple animals and not people, because Balance(tm) + damage = 20 + SA_bonus_damage = 50 // 70 total on animals. + SA_vulnerability = SA_ANIMAL + hud_state = "rifle_heavy" + +/obj/item/projectile/bullet/rifle/a545 + fire_sound = 'sound/weapons/Gunshot_light.ogg' + damage = 25 + hud_state = "rifle" + +/obj/item/projectile/bullet/rifle/a545/ap + damage = 20 + armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds. + hud_state = "rifle_ap" + +/obj/item/projectile/bullet/rifle/a545/hp + damage = 35 + armor_penetration = -50 + penetrating = 0 + hud_state = "hivelo_iff" + +/obj/item/projectile/bullet/rifle/a545/hunter + damage = 15 + SA_bonus_damage = 35 // 50 total on animals. + SA_vulnerability = SA_ANIMAL + hud_state = "rifle_heavy" + +/obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round. + fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon. + damage = 80 + stun = 3 + weaken = 3 + penetrating = 5 + armor_penetration = 80 + hitscan = 1 //so the PTR isn't useless as a sniper weapon + hud_state = "sniper" + + icon_state = "bullet_alt" + tracer_type = /obj/effect/projectile/tracer/cannon + +/obj/item/projectile/bullet/rifle/a145/highvel + damage = 50 + stun = 1 + weaken = 0 + penetrating = 15 + armor_penetration = 90 + hud_state = "sniper_flak" + +/obj/item/projectile/bullet/rifle/a44rifle + fire_sound = 'sound/weapons/gunshot4.ogg' + damage = 50 + hud_state = "revolver" + +/* Miscellaneous */ + +/obj/item/projectile/bullet/suffocationbullet//How does this even work? + name = "co bullet" + damage = 20 + damage_type = OXY + hud_state = "pistol_tranq" + +/obj/item/projectile/bullet/cyanideround + name = "poison bullet" + damage = 40 + damage_type = TOX + hud_state = "pistol_tranq" + +/obj/item/projectile/bullet/burstbullet + name = "exploding bullet" + fire_sound = 'sound/effects/Explosion1.ogg' + damage = 20 + embed_chance = 0 + edge = TRUE + hud_state = "pistol_fire" + +/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0) + if(isturf(target)) + explosion(target, -1, 0, 2) + ..() + +/* Incendiary */ + +/obj/item/projectile/bullet/incendiary + name = "incendiary bullet" + icon_state = "bullet_alt" + damage = 15 + damage_type = BURN + incendiary = 0.5 + flammability = 2 + hud_state = "pistol_fire" + +/obj/item/projectile/bullet/incendiary/flamethrower + name = "ball of fire" + desc = "Don't stand in the fire." + icon_state = "fireball" + damage = 10 + embed_chance = 0 + incendiary = 2 + flammability = 4 + agony = 30 + range = 4 + vacuum_traversal = 0 + hud_state = "flame" + +/obj/item/projectile/bullet/incendiary/flamethrower/after_move() + ..() + + + var/turf/T = get_turf(src) + if(istype(T)) + for(var/obj/effect/plant/Victim in T) + if(prob(max(20, 100 - (Victim.seed.get_trait(TRAIT_ENDURANCE))))) // Chance to immediately kill a vine or rampant growth, minimum of 20%. + Victim.die_off() + +/obj/item/projectile/bullet/incendiary/flamethrower/large + damage = 5 + incendiary = 3 + flammability = 2 + range = 6 + hud_state = "flame" + +/obj/item/projectile/bullet/incendiary/flamethrower/tiny + damage = 2 + incendiary = 0 + flammability = 2 + modifier_type_to_apply = /datum/modifier/fire/stack_managed/weak + modifier_duration = 20 SECONDS + range = 6 + agony = 0 + hud_state = "flame" + +/* Practice rounds and blanks */ + +/obj/item/projectile/bullet/practice + damage = 5 + hud_state = "smg_light" + +/obj/item/projectile/bullet/pistol/cap // Just the primer, such as a cap gun. + name = "cap" + damage_type = HALLOSS + fire_sound = 'sound/effects/snap.ogg' + damage = 0 + nodamage = 1 + embed_chance = 0 + sharp = FALSE + hud_state = "monkey" + + combustion = FALSE + +/obj/item/projectile/bullet/pistol/cap/process() + loc = null + qdel(src) + +/obj/item/projectile/bullet/blank + name = "blank" + damage_type = HALLOSS + fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' // Blanks still make loud noises. + damage = 0 + nodamage = 1 + embed_chance = 0 + sharp = FALSE + hud_state = "smg_light" + +/* BB Rounds */ +/obj/item/projectile/bullet/bb // Generic single BB + name = "BB" + damage = 0 + agony = 0 + embed_chance = 0 + sharp = FALSE + silenced = TRUE + hud_state = "pistol_light" + +/obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun + name = "BB" + damage = 0 + agony = 0 + embed_chance = 0 + sharp = FALSE + pellets = 6 + range_step = 1 + spread_step = 10 + silenced = TRUE + hud_state = "pistol_light" + +/* toy projectiles */ +/obj/item/projectile/bullet/cap + name = "cap" + desc = "SNAP!" + damage = 0 // It's a damn toy. + embed_chance = 0 + nodamage = TRUE + sharp = FALSE + damage_type = HALLOSS + impact_effect_type = null + fire_sound = 'sound/effects/snap.ogg' + combustion = FALSE + hud_state = "pistol_light" + +/obj/item/projectile/bullet/cap/process() + loc = null + qdel(src) + +/obj/item/projectile/bullet/foam_dart + name = "foam dart" + desc = "I hope you're wearing eye protection." + damage = 0 // It's a damn toy. + embed_chance = 0 + nodamage = TRUE + sharp = FALSE + damage_type = HALLOSS + impact_effect_type = null + fire_sound = 'sound/items/syringeproj.ogg' + combustion = FALSE + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamdart_proj" + range = 15 + hud_state = "grenade_dummy" + +/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) + new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) + +/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) + new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) + +/obj/item/projectile/bullet/foam_dart_riot + name = "riot foam dart" + desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." + damage = 0 // It's a damn toy. + embed_chance = 0 + agony = 50 // The riot part of the riot dart + nodamage = TRUE + sharp = FALSE + damage_type = HALLOSS + impact_effect_type = null + fire_sound = 'sound/items/syringeproj.ogg' + combustion = FALSE + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamdart_riot_proj" + range = 15 + hud_state = "grenade_he" + +/obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) + new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc)) + +/obj/item/projectile/bullet/foam_dart_riot/on_range(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc)) \ No newline at end of file diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index d2cb729644..f532a5fb03 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -1,101 +1,101 @@ -/obj/item/projectile/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = 1 - check_armour = "energy" - - combustion = FALSE - -/obj/item/projectile/change/on_hit(var/atom/change) - wabbajack(change) - -/obj/item/projectile/change/proc/wabbajack(var/mob/M) - if(istype(M, /mob/living) && M.stat != DEAD) - if(M.transforming) - return - if(M.has_brain_worms()) - return //Borer stuff - RR - - if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/Robot = M - if(Robot.mmi) - qdel(Robot.mmi) - else - for(var/obj/item/W in M) - if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something - qdel(W) - continue - M.drop_from_inventory(W) - - var/mob/living/new_mob - - var/options = list("robot", "slime") - for(var/t in GLOB.all_species) - options += t - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species) - options -= H.species.name - else if(isrobot(M)) - options -= "robot" - else if(isslime(M)) - options -= "slime" - - var/randomize = pick(options) - switch(randomize) - if("robot") - new_mob = new /mob/living/silicon/robot(M.loc) - new_mob.gender = M.gender - new_mob.invisibility = 0 - new_mob.job = "Cyborg" - var/mob/living/silicon/robot/Robot = new_mob - Robot.mmi = new /obj/item/device/mmi(new_mob) - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - if("slime") - new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc) - new_mob.universal_speak = 1 - else - var/mob/living/carbon/human/H - if(ishuman(M)) - H = M - else - new_mob = new /mob/living/carbon/human(M.loc) - H = new_mob - - if(M.gender == MALE) - H.gender = MALE - H.name = pick(first_names_male) - else if(M.gender == FEMALE) - H.gender = FEMALE - H.name = pick(first_names_female) - else - H.gender = NEUTER - H.name = pick(first_names_female|first_names_male) - - H.name += " [pick(last_names)]" - H.real_name = H.name - - H.set_species(randomize) - H.universal_speak = 1 - var/datum/preferences/A = new() //Randomize appearance for the human - A.randomize_appearance_and_body_for(H) - - if(new_mob) - for (var/spell/S in M.spell_list) - new_mob.add_spell(new S.type) - - new_mob.a_intent = "hurt" - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - - to_chat(new_mob, "Your form morphs into that of \a [lowertext(randomize)].") - - qdel(M) - return - else - to_chat(M, "Your form morphs into that of \a [lowertext(randomize)].") +/obj/item/projectile/change + name = "bolt of change" + icon_state = "ice_1" + damage = 0 + damage_type = BURN + nodamage = 1 + check_armour = "energy" + + combustion = FALSE + +/obj/item/projectile/change/on_hit(var/atom/change) + wabbajack(change) + +/obj/item/projectile/change/proc/wabbajack(var/mob/M) + if(istype(M, /mob/living) && M.stat != DEAD) + if(M.transforming) + return + if(M.has_brain_worms()) + return //Borer stuff - RR + + if(istype(M, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/Robot = M + if(Robot.mmi) + qdel(Robot.mmi) + else + for(var/obj/item/W in M) + if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something + qdel(W) + continue + M.drop_from_inventory(W) + + var/mob/living/new_mob + + var/options = list("robot", "slime") + for(var/t in GLOB.all_species) + options += t + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species) + options -= H.species.name + else if(isrobot(M)) + options -= "robot" + else if(isslime(M)) + options -= "slime" + + var/randomize = pick(options) + switch(randomize) + if("robot") + new_mob = new /mob/living/silicon/robot(M.loc) + new_mob.gender = M.gender + new_mob.invisibility = 0 + new_mob.job = "Cyborg" + var/mob/living/silicon/robot/Robot = new_mob + Robot.mmi = new /obj/item/device/mmi(new_mob) + Robot.mmi.transfer_identity(M) //Does not transfer key/client. + if("slime") + new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc) + new_mob.universal_speak = 1 + else + var/mob/living/carbon/human/H + if(ishuman(M)) + H = M + else + new_mob = new /mob/living/carbon/human(M.loc) + H = new_mob + + if(M.gender == MALE) + H.gender = MALE + H.name = pick(first_names_male) + else if(M.gender == FEMALE) + H.gender = FEMALE + H.name = pick(first_names_female) + else + H.gender = NEUTER + H.name = pick(first_names_female|first_names_male) + + H.name += " [pick(last_names)]" + H.real_name = H.name + + H.set_species(randomize) + H.universal_speak = 1 + var/datum/preferences/A = new() //Randomize appearance for the human + A.randomize_appearance_and_body_for(H) + + if(new_mob) + for (var/spell/S in M.spell_list) + new_mob.add_spell(new S.type) + + new_mob.a_intent = "hurt" + if(M.mind) + M.mind.transfer_to(new_mob) + else + new_mob.key = M.key + + to_chat(new_mob, "Your form morphs into that of \a [lowertext(randomize)].") + + qdel(M) + return + else + to_chat(M, "Your form morphs into that of \a [lowertext(randomize)].") return \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy_ch.dm b/code/modules/projectiles/projectile/energy_ch.dm index 02c1bd899d..e296f967ff 100644 --- a/code/modules/projectiles/projectile/energy_ch.dm +++ b/code/modules/projectiles/projectile/energy_ch.dm @@ -1,59 +1,59 @@ -/obj/item/projectile/energy/phase/bolt - range = 4 - SA_bonus_damage = 15 // 30 total on animals - icon_state = "cbbolt" - hud_state = "taser" - -/obj/item/projectile/energy/phase/bolt/heavy - range = 4 - SA_bonus_damage = 25 // 20 total on animals - hud_state = "taser" - -/obj/item/projectile/energy/plasma/vepr - name = "plasma bolt" - icon = 'icons/obj/projectiles_ch.dmi' - icon_state = "vepr" - fire_sound = 'sound/weapons/serdy/vepr.ogg' - damage = 30 - armor_penetration = 10 - damage_type = BURN - check_armour = "energy" - muzzle_type = /obj/effect/projectile/muzzle/vepr - impact_effect_type = /obj/effect/temp_visual/impact_effect - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - hitsound = 'sound/weapons/sear.ogg' - hud_state = "laser_overcharge" - -/obj/item/projectile/energy/phase - name = "phase wave" - icon_state = "phase" - fire_sound = 'modular_chomp/sound/weapons/phase_new/phasecarbine.ogg' //CHOMPedit - New sounds. - range = 13 - damage = 5 - SA_bonus_damage = 45 - armor_penetration = -35 - SA_vulnerability = list(SA_ANIMAL, MOB_CLASS_SYNTHETIC, MOB_CLASS_ABERRATION, MOB_CLASS_HUMANOID) //CHOMP Edit expand this list - hud_state = "laser_heat" - -/obj/item/projectile/energy/phase/light - fire_sound = 'modular_chomp/sound/weapons/phase_new/phasepistol.ogg' //CHOMPedit - New sounds. - range = 11 - SA_bonus_damage = 35 - armor_penetration = -50 - hud_state = "laser_heat" - -/obj/item/projectile/energy/phase/heavy - fire_sound = 'modular_chomp/sound/weapons/phase_new/phaserifle.ogg' //CHOMPedit - New sounds. - range = 16 //Chompedit This range was not great - damage = 10 - SA_bonus_damage = 50 - armor_penetration = -25 - hud_state = "laser_heat" - -/obj/item/projectile/energy/phase/heavy/cannon - fire_sound = 'modular_chomp/sound/weapons/phase_new/phasecannon.ogg' //CHOMPedit - New sounds. - range = 20 //Chompedit This range was mediocre, but not worth a cannon. - damage = 15 - SA_bonus_damage = 60 - armor_penetration = -20 - hud_state = "laser_heat" +/obj/item/projectile/energy/phase/bolt + range = 4 + SA_bonus_damage = 15 // 30 total on animals + icon_state = "cbbolt" + hud_state = "taser" + +/obj/item/projectile/energy/phase/bolt/heavy + range = 4 + SA_bonus_damage = 25 // 20 total on animals + hud_state = "taser" + +/obj/item/projectile/energy/plasma/vepr + name = "plasma bolt" + icon = 'icons/obj/projectiles_ch.dmi' + icon_state = "vepr" + fire_sound = 'sound/weapons/serdy/vepr.ogg' + damage = 30 + armor_penetration = 10 + damage_type = BURN + check_armour = "energy" + muzzle_type = /obj/effect/projectile/muzzle/vepr + impact_effect_type = /obj/effect/temp_visual/impact_effect + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound = 'sound/weapons/sear.ogg' + hud_state = "laser_overcharge" + +/obj/item/projectile/energy/phase + name = "phase wave" + icon_state = "phase" + fire_sound = 'modular_chomp/sound/weapons/phase_new/phasecarbine.ogg' //CHOMPedit - New sounds. + range = 13 + damage = 5 + SA_bonus_damage = 45 + armor_penetration = -35 + SA_vulnerability = list(SA_ANIMAL, MOB_CLASS_SYNTHETIC, MOB_CLASS_ABERRATION, MOB_CLASS_HUMANOID) //CHOMP Edit expand this list + hud_state = "laser_heat" + +/obj/item/projectile/energy/phase/light + fire_sound = 'modular_chomp/sound/weapons/phase_new/phasepistol.ogg' //CHOMPedit - New sounds. + range = 11 + SA_bonus_damage = 35 + armor_penetration = -50 + hud_state = "laser_heat" + +/obj/item/projectile/energy/phase/heavy + fire_sound = 'modular_chomp/sound/weapons/phase_new/phaserifle.ogg' //CHOMPedit - New sounds. + range = 16 //Chompedit This range was not great + damage = 10 + SA_bonus_damage = 50 + armor_penetration = -25 + hud_state = "laser_heat" + +/obj/item/projectile/energy/phase/heavy/cannon + fire_sound = 'modular_chomp/sound/weapons/phase_new/phasecannon.ogg' //CHOMPedit - New sounds. + range = 20 //Chompedit This range was mediocre, but not worth a cannon. + damage = 15 + SA_bonus_damage = 60 + armor_penetration = -20 + hud_state = "laser_heat" diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm index 21d3c30693..c120896c6e 100644 --- a/code/modules/random_map/_random_map_setup.dm +++ b/code/modules/random_map/_random_map_setup.dm @@ -1,34 +1,34 @@ -/* - This module is used to generate the debris fields/distribution maps/procedural stations. - -This controls the amount of sand turf it will create in the caves, I assume it controls the amount of minerals and undeground minerals aswell -*/ - -// CHOMPedit: Resource defines -#define MIN_SURFACE_COUNT 75 -#define MIN_RARE_COUNT 50 -#define MIN_DEEP_COUNT 25 -#define RESOURCE_HIGH_MAX 3 -#define RESOURCE_HIGH_MIN 2 -#define RESOURCE_MID_MAX 2 -#define RESOURCE_MID_MIN 0.5 -#define RESOURCE_LOW_MAX 0.5 -#define RESOURCE_LOW_MIN 0 -// CHOMPedit end - -#define FLOOR_CHAR 0 -#define WALL_CHAR 1 -#define DOOR_CHAR 2 -#define EMPTY_CHAR 3 -#define ROOM_TEMP_CHAR 4 -#define MONSTER_CHAR 5 -#define ARTIFACT_TURF_CHAR 6 -#define ARTIFACT_CHAR 7 - -#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) -#define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len) - -#define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \ - tmp_cell = TRANSLATE_COORD(X,Y);\ - if (tmp_cell < 1 || tmp_cell > LEN) {\ - tmp_cell = null;\ - } +/* + This module is used to generate the debris fields/distribution maps/procedural stations. + -This controls the amount of sand turf it will create in the caves, I assume it controls the amount of minerals and undeground minerals aswell +*/ + +// CHOMPedit: Resource defines +#define MIN_SURFACE_COUNT 75 +#define MIN_RARE_COUNT 50 +#define MIN_DEEP_COUNT 25 +#define RESOURCE_HIGH_MAX 3 +#define RESOURCE_HIGH_MIN 2 +#define RESOURCE_MID_MAX 2 +#define RESOURCE_MID_MIN 0.5 +#define RESOURCE_LOW_MAX 0.5 +#define RESOURCE_LOW_MIN 0 +// CHOMPedit end + +#define FLOOR_CHAR 0 +#define WALL_CHAR 1 +#define DOOR_CHAR 2 +#define EMPTY_CHAR 3 +#define ROOM_TEMP_CHAR 4 +#define MONSTER_CHAR 5 +#define ARTIFACT_TURF_CHAR 6 +#define ARTIFACT_CHAR 7 + +#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) +#define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len) + +#define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \ + tmp_cell = TRANSLATE_COORD(X,Y);\ + if (tmp_cell < 1 || tmp_cell > LEN) {\ + tmp_cell = null;\ + } diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index 501b1ac475..5f0fb34894 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -1,23 +1,23 @@ -/datum/reagents/proc/get_color() - if(!reagent_list || !reagent_list.len) - return "#ffffffff" - if(reagent_list.len == 1) // It's pretty common and saves a lot of work - var/datum/reagent/R = reagent_list[1] - return R.color - - var/list/colors = list(0, 0, 0, 0) - var/tot_w = 0 - for(var/datum/reagent/R in reagent_list) - var/hex = uppertext(R.color) - if(length(hex) == 7) - hex += "FF" - if(length(hex) != 9) // PANIC PANIC PANIC - warning("Reagent [R.id] has an incorrect color set ([R.color])") - hex = "#FFFFFFFF" - colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight - colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight - colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight - colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight - tot_w += R.volume * R.color_weight - +/datum/reagents/proc/get_color() + if(!reagent_list || !reagent_list.len) + return "#ffffffff" + if(reagent_list.len == 1) // It's pretty common and saves a lot of work + var/datum/reagent/R = reagent_list[1] + return R.color + + var/list/colors = list(0, 0, 0, 0) + var/tot_w = 0 + for(var/datum/reagent/R in reagent_list) + var/hex = uppertext(R.color) + if(length(hex) == 7) + hex += "FF" + if(length(hex) != 9) // PANIC PANIC PANIC + warning("Reagent [R.id] has an incorrect color set ([R.color])") + hex = "#FFFFFFFF" + colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight + colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight + colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight + colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight + tot_w += R.volume * R.color_weight + return rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Metabolism.dm b/code/modules/reagents/Chemistry-Metabolism.dm index 30be9f2d1e..671e8110f1 100644 --- a/code/modules/reagents/Chemistry-Metabolism.dm +++ b/code/modules/reagents/Chemistry-Metabolism.dm @@ -1,34 +1,34 @@ -/datum/reagents/metabolism - var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_BLOOD - var/metabolism_speed = 1 // Multiplicative, 1 is full speed, 0.5 is half, etc. - var/mob/living/carbon/parent - -/datum/reagents/metabolism/New(var/max = 100, mob/living/carbon/parent_mob, var/met_class = null) - ..(max, parent_mob) - - if(met_class) - metabolism_class = met_class - if(istype(parent_mob)) - parent = parent_mob - -/datum/reagents/metabolism/proc/metabolize() - - var/metabolism_type = 0 //non-human mobs - if(ishuman(parent)) - var/mob/living/carbon/human/H = parent - metabolism_type = H.species.reagent_tag - - for(var/datum/reagent/current in reagent_list) - current.on_mob_life(parent, metabolism_type, src) - update_total() - -// "Specialized" metabolism datums -/datum/reagents/metabolism/bloodstream - metabolism_class = CHEM_BLOOD - -/datum/reagents/metabolism/ingested - metabolism_class = CHEM_INGEST - metabolism_speed = 0.5 - -/datum/reagents/metabolism/touch +/datum/reagents/metabolism + var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_BLOOD + var/metabolism_speed = 1 // Multiplicative, 1 is full speed, 0.5 is half, etc. + var/mob/living/carbon/parent + +/datum/reagents/metabolism/New(var/max = 100, mob/living/carbon/parent_mob, var/met_class = null) + ..(max, parent_mob) + + if(met_class) + metabolism_class = met_class + if(istype(parent_mob)) + parent = parent_mob + +/datum/reagents/metabolism/proc/metabolize() + + var/metabolism_type = 0 //non-human mobs + if(ishuman(parent)) + var/mob/living/carbon/human/H = parent + metabolism_type = H.species.reagent_tag + + for(var/datum/reagent/current in reagent_list) + current.on_mob_life(parent, metabolism_type, src) + update_total() + +// "Specialized" metabolism datums +/datum/reagents/metabolism/bloodstream + metabolism_class = CHEM_BLOOD + +/datum/reagents/metabolism/ingested + metabolism_class = CHEM_INGEST + metabolism_speed = 0.5 + +/datum/reagents/metabolism/touch metabolism_class = CHEM_TOUCH \ No newline at end of file diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index c55c60c0cc..9196fc511d 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -1,524 +1,524 @@ -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "..." - icon = 'icons/obj/chemical_tanks.dmi' - icon_state = "tank" - layer = TABLE_LAYER - density = TRUE - anchored = FALSE - pressure_resistance = 2*ONE_ATMOSPHERE - - var/has_sockets = TRUE - - var/obj/item/hose_connector/input/active/InputSocket - var/obj/item/hose_connector/output/active/OutputSocket - - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) - -/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/Destroy() - QDEL_NULL(InputSocket) - QDEL_NULL(OutputSocket) - - ..() - -/obj/structure/reagent_dispensers/Initialize() - var/datum/reagents/R = new/datum/reagents(5000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - - if(has_sockets) - InputSocket = new(src) - InputSocket.carrier = src - OutputSocket = new(src) - OutputSocket.carrier = src - - . = ..() - -/obj/structure/reagent_dispensers/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/blob_act() - qdel(src) - -/* - * Tanks - */ - -//Water -/obj/structure/reagent_dispensers/watertank - name = "water tank" - desc = "A water tank." - icon_state = "water" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/watertank/Initialize() - . = ..() - reagents.add_reagent("water", 1000) - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold vast amounts of water.." - icon_state = "water_high" - -/obj/structure/reagent_dispensers/watertank/high/Initialize() - . = ..() - reagents.add_reagent("water", 4000) - -/obj/structure/reagent_dispensers/watertank/barrel - name = "water barrel" - desc = "A barrel for holding water." - icon_state = "waterbarrel" - -//Fuel -/obj/structure/reagent_dispensers/fueltank - name = "fuel tank" - desc = "A fuel tank." - icon_state = "fuel" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/device/assembly_holder/rig = null - -/obj/structure/reagent_dispensers/fueltank/Initialize() - . = ..() - reagents.add_reagent("fuel",1000) - -/obj/structure/reagent_dispensers/fueltank/high - name = "high-capacity fuel tank" - desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." - icon_state = "fuel_high" - -/obj/structure/reagent_dispensers/fueltank/high/Initialize() - . = ..() - reagents.add_reagent("fuel",4000) - -//Foam -/obj/structure/reagent_dispensers/foam - name = "foam tank" - desc = "A foam tank." - icon_state = "foam" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/foam/Initialize() - . = ..() - reagents.add_reagent("firefoam",1000) - -//Helium3 -/obj/structure/reagent_dispensers/he3 - name = "/improper He3 tank" - desc = "A Helium3 tank." - icon_state = "he3" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispenser/he3/Initialize() - ..() - reagents.add_reagent("helium3",1000) - -/* - * Misc - */ - -/obj/structure/reagent_dispensers/fueltank/barrel - name = "hazardous barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "barrel" - modded = TRUE - -/obj/structure/reagent_dispensers/fueltank/barrel/two - name = "explosive barrel" - desc = "A barrel with warning labels painted all over it." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "barrel2" - modded = FALSE - -/obj/structure/reagent_dispensers/fueltank/barrel/three - name = "fuel barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "barrel3" - modded = FALSE - -/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (W.has_tool_quality(TOOL_WRENCH)) //can't wrench it shut, it's always open - return - return ..() -//VOREStation Add End - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(modded) - . += "Fuel faucet is wrenched open, leaking the fuel!" - if(rig) - . += "There is some kind of device rigged to the tank." - -/obj/structure/reagent_dispensers/fueltank/attack_hand() - if (rig) - usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") - if(do_after(usr, 20)) - usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.loc = get_turf(usr) - rig = null - overlays = new/list() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (W.has_tool_quality(TOOL_WRENCH)) - user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - playsound(src, W.usesound, 75, 1) - if (modded) - message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") - log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - if (istype(W,/obj/item/device/assembly_holder)) - if (rig) - to_chat(user, "There is another device in the way.") - return ..() - user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") - if(do_after(user, 20)) - user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") - - var/obj/item/device/assembly_holder/H = W - if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") - log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") - - rig = W - user.drop_item() - W.loc = src - - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - add_overlay(test) - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") - log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - - if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/ex_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else if (reagents.total_volume > 50) - explosion(src.loc,-1,1,2) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) - if (modded) - explode() - else if (temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent("fuel",amount) - new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/Initialize() - . = ..() - reagents.add_reagent("condensedcapsaicin",1000) - -/obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food. Yum." - icon = 'icons/obj/virology_vr.dmi' - icon_state = "virusfoodtank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/virusfood/Initialize() - . = ..() - reagents.add_reagent("virusfood", 1000) - -/obj/structure/reagent_dispensers/acid - name = "Sulphuric Acid Dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/acid/Initialize() - . = ..() - reagents.add_reagent("sacid", 1000) - -/obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = TRUE - has_sockets = FALSE - var/bottle = 0 - var/cups = 0 - var/cupholder = 0 - -/obj/structure/reagent_dispensers/water_cooler/full - bottle = 1 - cupholder = 1 - cups = 10 - -/obj/structure/reagent_dispensers/water_cooler/Initialize() - . = ..() - if(bottle) - reagents.add_reagent("water",120) - update_icon() - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if(cupholder) - . += "There are [cups] cups in the cup dispenser." - -/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() - set name = "Rotate Cooler Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(I.has_tool_quality(TOOL_WRENCH)) - src.add_fingerprint(user) - if(bottle) - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20) && bottle) - to_chat(user, "You unfasten the jug.") - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) - for(var/datum/reagent/R in reagents.reagent_list) - var/total_reagent = reagents.get_reagent_amount(R.id) - G.reagents.add_reagent(R.id, total_reagent) - reagents.clear_reagents() - bottle = 0 - update_icon() - else - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * I.toolspeed, src)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - playsound(src, I.usesound, 50, 1) - return - - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - if(cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You take the cup dispenser off.") - new /obj/item/stack/material/plastic( src.loc ) - if(cups) - for(var/i = 0 to cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups = 0 - cupholder = 0 - update_icon() - return - if(!bottle && !cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You start taking the water-cooler apart.") - if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) - to_chat(user, "You take the water-cooler apart.") - new /obj/item/stack/material/plastic( src.loc, 4 ) - qdel(src) - return - - if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) - src.add_fingerprint(user) - if(!bottle) - if(anchored) - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I - to_chat(user, "You start to screw the bottle onto the water-cooler.") - if(do_after(user, 20) && !bottle && anchored) - bottle = 1 - update_icon() - to_chat(user, "You screw the bottle onto the water-cooler!") - for(var/datum/reagent/R in G.reagents.reagent_list) - var/total_reagent = G.reagents.get_reagent_amount(R.id) - reagents.add_reagent(R.id, total_reagent) - qdel(G) - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a bottle there!") - return 1 - - if(istype(I, /obj/item/stack/material/plastic)) - if(!cupholder) - if(anchored) - var/obj/item/stack/material/plastic/P = I - src.add_fingerprint(user) - to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && !cupholder && anchored) - if (P.use(1)) - to_chat(user, "You attach a cup dispenser onto the water-cooler.") - cupholder = 1 - update_icon() - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a cup dispenser there!") - return - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) - if(cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups-- - flick("[icon_state]-vend", src) - return - -/obj/structure/reagent_dispensers/water_cooler/update_icon() - icon_state = "water_cooler" - cut_overlays() - if(bottle) - add_overlay("water_cooler_bottle") - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/Initialize() - . = ..() - reagents.add_reagent("beer",1000) - -/obj/structure/reagent_dispensers/beerkeg/wood - name = "beer keg" - desc = "A beer keg with a tap on it." - icon_state = "beertankfantasy" - -/obj/structure/reagent_dispensers/beerkeg/wine - name = "wine barrel" - desc = "A wine casket with a tap on it." - icon_state = "beertankfantasy" - -/obj/structure/reagent_dispensers/beerkeg/wine/Initialize() - . = ..() - reagents.add_reagent("redwine",1000) - -/obj/structure/reagent_dispensers/beerkeg/fakenuke - name = "nuclear beer keg" - desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nuclearbomb0" - -//Cooking oil refill tank -/obj/structure/reagent_dispensers/cookingoil - name = "cooking oil tank" - desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 120 - -/obj/structure/reagent_dispensers/cookingoil/Initialize() - . = ..() - reagents.add_reagent("cookingoil",5000) - -/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/cookingoil/ex_act() - explode() - -/obj/structure/reagent_dispensers/cookingoil/proc/explode() - reagents.splash_area(get_turf(src), 3) - visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) - qdel(src) - -/obj/structure/reagent_dispensers/bloodbarrel - name = "blood barrel" - desc = "A beer keg." - icon = 'icons/obj/chemical_tanks.dmi' - icon_state = "bloodbarrel" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/bloodbarrel/Initialize() - . = ..() - reagents.add_reagent("blood", 1000, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"="O-","resistances"=null,"trace_chem"=null)) +/obj/structure/reagent_dispensers + name = "Dispenser" + desc = "..." + icon = 'icons/obj/chemical_tanks.dmi' + icon_state = "tank" + layer = TABLE_LAYER + density = TRUE + anchored = FALSE + pressure_resistance = 2*ONE_ATMOSPHERE + + var/has_sockets = TRUE + + var/obj/item/hose_connector/input/active/InputSocket + var/obj/item/hose_connector/output/active/OutputSocket + + var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) + +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) + return + +/obj/structure/reagent_dispensers/Destroy() + QDEL_NULL(InputSocket) + QDEL_NULL(OutputSocket) + + ..() + +/obj/structure/reagent_dispensers/Initialize() + var/datum/reagents/R = new/datum/reagents(5000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + + if(has_sockets) + InputSocket = new(src) + InputSocket.carrier = src + OutputSocket = new(src) + OutputSocket.carrier = src + + . = ..() + +/obj/structure/reagent_dispensers/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + . += "[R.volume] units of [R.name]" + else + . += "Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) + if (N) + amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return + +/obj/structure/reagent_dispensers/blob_act() + qdel(src) + +/* + * Tanks + */ + +//Water +/obj/structure/reagent_dispensers/watertank + name = "water tank" + desc = "A water tank." + icon_state = "water" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/watertank/Initialize() + . = ..() + reagents.add_reagent("water", 1000) + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold vast amounts of water.." + icon_state = "water_high" + +/obj/structure/reagent_dispensers/watertank/high/Initialize() + . = ..() + reagents.add_reagent("water", 4000) + +/obj/structure/reagent_dispensers/watertank/barrel + name = "water barrel" + desc = "A barrel for holding water." + icon_state = "waterbarrel" + +//Fuel +/obj/structure/reagent_dispensers/fueltank + name = "fuel tank" + desc = "A fuel tank." + icon_state = "fuel" + amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/device/assembly_holder/rig = null + +/obj/structure/reagent_dispensers/fueltank/Initialize() + . = ..() + reagents.add_reagent("fuel",1000) + +/obj/structure/reagent_dispensers/fueltank/high + name = "high-capacity fuel tank" + desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." + icon_state = "fuel_high" + +/obj/structure/reagent_dispensers/fueltank/high/Initialize() + . = ..() + reagents.add_reagent("fuel",4000) + +//Foam +/obj/structure/reagent_dispensers/foam + name = "foam tank" + desc = "A foam tank." + icon_state = "foam" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/foam/Initialize() + . = ..() + reagents.add_reagent("firefoam",1000) + +//Helium3 +/obj/structure/reagent_dispensers/he3 + name = "/improper He3 tank" + desc = "A Helium3 tank." + icon_state = "he3" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispenser/he3/Initialize() + ..() + reagents.add_reagent("helium3",1000) + +/* + * Misc + */ + +/obj/structure/reagent_dispensers/fueltank/barrel + name = "hazardous barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "barrel" + modded = TRUE + +/obj/structure/reagent_dispensers/fueltank/barrel/two + name = "explosive barrel" + desc = "A barrel with warning labels painted all over it." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "barrel2" + modded = FALSE + +/obj/structure/reagent_dispensers/fueltank/barrel/three + name = "fuel barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "barrel3" + modded = FALSE + +/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (W.has_tool_quality(TOOL_WRENCH)) //can't wrench it shut, it's always open + return + return ..() +//VOREStation Add End + +/obj/structure/reagent_dispensers/fueltank/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(modded) + . += "Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + . += "There is some kind of device rigged to the tank." + +/obj/structure/reagent_dispensers/fueltank/attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + overlays = new/list() + +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) + src.add_fingerprint(user) + if (W.has_tool_quality(TOOL_WRENCH)) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + playsound(src, W.usesound, 75, 1) + if (modded) + message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") + log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") + leak_fuel(amount_per_transfer_from_this) + if (istype(W,/obj/item/device/assembly_holder)) + if (rig) + to_chat(user, "There is another device in the way.") + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") + + var/obj/item/device/assembly_holder/H = W + if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") + log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") + + rig = W + user.drop_item() + W.loc = src + + var/icon/test = getFlatIcon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + add_overlay(test) + + return ..() + + +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + if(istype(Proj.firer)) + message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") + log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") + + if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) + explode() + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else if (reagents.total_volume > 50) + explosion(src.loc,-1,1,2) + if(src) + qdel(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if (modded) + explode() + else if (temperature > T0C+500) + explode() + return ..() + +/obj/structure/reagent_dispensers/fueltank/Move() + if (..() && modded) + leak_fuel(amount_per_transfer_from_this/10.0) + +/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) + if (reagents.total_volume == 0) + return + + amount = min(amount, reagents.total_volume) + reagents.remove_reagent("fuel",amount) + new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) + +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refills pepper spray canisters." + icon = 'icons/obj/objects.dmi' + icon_state = "peppertank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 45 + +/obj/structure/reagent_dispensers/peppertank/Initialize() + . = ..() + reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/virusfood + name = "Virus Food Dispenser" + desc = "A dispenser of virus food. Yum." + icon = 'icons/obj/virology_vr.dmi' + icon_state = "virusfoodtank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/virusfood/Initialize() + . = ..() + reagents.add_reagent("virusfood", 1000) + +/obj/structure/reagent_dispensers/acid + name = "Sulphuric Acid Dispenser" + desc = "A dispenser of acid for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "acidtank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/acid/Initialize() + . = ..() + reagents.add_reagent("sacid", 1000) + +/obj/structure/reagent_dispensers/water_cooler + name = "Water-Cooler" + desc = "A machine that dispenses water to drink." + amount_per_transfer_from_this = 5 + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler" + possible_transfer_amounts = null + anchored = TRUE + has_sockets = FALSE + var/bottle = 0 + var/cups = 0 + var/cupholder = 0 + +/obj/structure/reagent_dispensers/water_cooler/full + bottle = 1 + cupholder = 1 + cups = 10 + +/obj/structure/reagent_dispensers/water_cooler/Initialize() + . = ..() + if(bottle) + reagents.add_reagent("water",120) + update_icon() + +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + . = ..() + if(cupholder) + . += "There are [cups] cups in the cup dispenser." + +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() + set name = "Rotate Cooler Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(I.has_tool_quality(TOOL_WRENCH)) + src.add_fingerprint(user) + if(bottle) + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20) && bottle) + to_chat(user, "You unfasten the jug.") + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + update_icon() + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * I.toolspeed, src)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + playsound(src, I.usesound, 50, 1) + return + + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + if(cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You take the cup dispenser off.") + new /obj/item/stack/material/plastic( src.loc ) + if(cups) + for(var/i = 0 to cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups = 0 + cupholder = 0 + update_icon() + return + if(!bottle && !cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You start taking the water-cooler apart.") + if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) + to_chat(user, "You take the water-cooler apart.") + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + to_chat(user, "You start to screw the bottle onto the water-cooler.") + if(do_after(user, 20) && !bottle && anchored) + bottle = 1 + update_icon() + to_chat(user, "You screw the bottle onto the water-cooler!") + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a bottle there!") + return 1 + + if(istype(I, /obj/item/stack/material/plastic)) + if(!cupholder) + if(anchored) + var/obj/item/stack/material/plastic/P = I + src.add_fingerprint(user) + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && !cupholder && anchored) + if (P.use(1)) + to_chat(user, "You attach a cup dispenser onto the water-cooler.") + cupholder = 1 + update_icon() + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a cup dispenser there!") + return + +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) + if(cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups-- + flick("[icon_state]-vend", src) + return + +/obj/structure/reagent_dispensers/water_cooler/update_icon() + icon_state = "water_cooler" + cut_overlays() + if(bottle) + add_overlay("water_cooler_bottle") + +/obj/structure/reagent_dispensers/beerkeg + name = "beer keg" + desc = "A beer keg." + icon = 'icons/obj/objects.dmi' + icon_state = "beertankTEMP" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/beerkeg/Initialize() + . = ..() + reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/wood + name = "beer keg" + desc = "A beer keg with a tap on it." + icon_state = "beertankfantasy" + +/obj/structure/reagent_dispensers/beerkeg/wine + name = "wine barrel" + desc = "A wine casket with a tap on it." + icon_state = "beertankfantasy" + +/obj/structure/reagent_dispensers/beerkeg/wine/Initialize() + . = ..() + reagents.add_reagent("redwine",1000) + +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" + +//Cooking oil refill tank +/obj/structure/reagent_dispensers/cookingoil + name = "cooking oil tank" + desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + +/obj/structure/reagent_dispensers/cookingoil/Initialize() + . = ..() + reagents.add_reagent("cookingoil",5000) + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) + qdel(src) + +/obj/structure/reagent_dispensers/bloodbarrel + name = "blood barrel" + desc = "A beer keg." + icon = 'icons/obj/chemical_tanks.dmi' + icon_state = "bloodbarrel" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/bloodbarrel/Initialize() + . = ..() + reagents.add_reagent("blood", 1000, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"="O-","resistances"=null,"trace_chem"=null)) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index e5158def75..c25ee292f5 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -1,111 +1,111 @@ -/obj/item/weapon/storage/box/bloodpacks - name = "blood packs bags" - desc = "This box contains blood packs." - icon_state = "sterile" - -/obj/item/weapon/storage/box/bloodpacks/Initialize() - . = ..() - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - new /obj/item/weapon/reagent_containers/blood/empty(src) - -/obj/item/weapon/reagent_containers/blood - name = "IV pack" - var/base_name = " " - desc = "Holds liquids used for transfusion." - var/base_desc = " " - icon = 'icons/obj/bloodpack.dmi' - icon_state = "empty" - item_state = "bloodpack_empty" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - volume = 200 - var/label_text = "" - - var/blood_type = null - var/reag_id = "blood" - -/obj/item/weapon/reagent_containers/blood/Initialize() - . = ..() - base_name = name - base_desc = desc - if(blood_type != null) - label_text = "[blood_type]" - update_iv_label() - reagents.add_reagent(reag_id, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) - update_icon() - -/obj/item/weapon/reagent_containers/blood/on_reagent_change() - update_icon() - -/obj/item/weapon/reagent_containers/blood/update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - if(percent >= 0 && percent <= 9) - icon_state = "empty" - item_state = "bloodpack_empty" - else if(percent >= 10 && percent <= 50) - icon_state = "half" - item_state = "bloodpack_half" - else if(percent >= 51 && percent < INFINITY) - icon_state = "full" - item_state = "bloodpack_full" - -/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN) - if(length(tmp_label) > 50) - to_chat(user, "The label can be at most 50 characters long.") - else if(length(tmp_label) > 10) - to_chat(user, "You set the label.") - label_text = tmp_label - update_iv_label() - else - to_chat(user, "You set the label to \"[tmp_label]\".") - label_text = tmp_label - update_iv_label() - -/obj/item/weapon/reagent_containers/blood/proc/update_iv_label() - if(label_text == "") - name = base_name - else if(length(label_text) > 10) - var/short_label_text = copytext(label_text, 1, 11) - name = "[base_name] ([short_label_text]...)" - else - name = "[base_name] ([label_text])" - desc = "[base_desc] It is labeled \"[label_text]\"." - -/obj/item/weapon/reagent_containers/blood/APlus - blood_type = "A+" - -/obj/item/weapon/reagent_containers/blood/AMinus - blood_type = "A-" - -/obj/item/weapon/reagent_containers/blood/BPlus - blood_type = "B+" - -/obj/item/weapon/reagent_containers/blood/BMinus - blood_type = "B-" - -/obj/item/weapon/reagent_containers/blood/OPlus - blood_type = "O+" - -/obj/item/weapon/reagent_containers/blood/OMinus - blood_type = "O-" - -/obj/item/weapon/reagent_containers/blood/synthplas - blood_type = "O-" - reag_id = "synthblood_dilute" - -/obj/item/weapon/reagent_containers/blood/synthblood - blood_type = "O-" - reag_id = "synthblood" - -/obj/item/weapon/reagent_containers/blood/empty - name = "Empty BloodPack" - desc = "Seems pretty useless... Maybe if there were a way to fill it?" - icon_state = "empty" +/obj/item/weapon/storage/box/bloodpacks + name = "blood packs bags" + desc = "This box contains blood packs." + icon_state = "sterile" + +/obj/item/weapon/storage/box/bloodpacks/Initialize() + . = ..() + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + +/obj/item/weapon/reagent_containers/blood + name = "IV pack" + var/base_name = " " + desc = "Holds liquids used for transfusion." + var/base_desc = " " + icon = 'icons/obj/bloodpack.dmi' + icon_state = "empty" + item_state = "bloodpack_empty" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + volume = 200 + var/label_text = "" + + var/blood_type = null + var/reag_id = "blood" + +/obj/item/weapon/reagent_containers/blood/Initialize() + . = ..() + base_name = name + base_desc = desc + if(blood_type != null) + label_text = "[blood_type]" + update_iv_label() + reagents.add_reagent(reag_id, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) + update_icon() + +/obj/item/weapon/reagent_containers/blood/on_reagent_change() + update_icon() + +/obj/item/weapon/reagent_containers/blood/update_icon() + var/percent = round((reagents.total_volume / volume) * 100) + if(percent >= 0 && percent <= 9) + icon_state = "empty" + item_state = "bloodpack_empty" + else if(percent >= 10 && percent <= 50) + icon_state = "half" + item_state = "bloodpack_half" + else if(percent >= 51 && percent < INFINITY) + icon_state = "full" + item_state = "bloodpack_full" + +/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN) + if(length(tmp_label) > 50) + to_chat(user, "The label can be at most 50 characters long.") + else if(length(tmp_label) > 10) + to_chat(user, "You set the label.") + label_text = tmp_label + update_iv_label() + else + to_chat(user, "You set the label to \"[tmp_label]\".") + label_text = tmp_label + update_iv_label() + +/obj/item/weapon/reagent_containers/blood/proc/update_iv_label() + if(label_text == "") + name = base_name + else if(length(label_text) > 10) + var/short_label_text = copytext(label_text, 1, 11) + name = "[base_name] ([short_label_text]...)" + else + name = "[base_name] ([label_text])" + desc = "[base_desc] It is labeled \"[label_text]\"." + +/obj/item/weapon/reagent_containers/blood/APlus + blood_type = "A+" + +/obj/item/weapon/reagent_containers/blood/AMinus + blood_type = "A-" + +/obj/item/weapon/reagent_containers/blood/BPlus + blood_type = "B+" + +/obj/item/weapon/reagent_containers/blood/BMinus + blood_type = "B-" + +/obj/item/weapon/reagent_containers/blood/OPlus + blood_type = "O+" + +/obj/item/weapon/reagent_containers/blood/OMinus + blood_type = "O-" + +/obj/item/weapon/reagent_containers/blood/synthplas + blood_type = "O-" + reag_id = "synthblood_dilute" + +/obj/item/weapon/reagent_containers/blood/synthblood + blood_type = "O-" + reag_id = "synthblood" + +/obj/item/weapon/reagent_containers/blood/empty + name = "Empty BloodPack" + desc = "Seems pretty useless... Maybe if there were a way to fill it?" + icon_state = "empty" item_state = "bloodpack_empty" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 459d481cba..5b92742423 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -1,114 +1,114 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Droppers. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/weapon/reagent_containers/dropper - name = "dropper" - desc = "A dropper. Transfers up to 5 units at a time." - icon = 'icons/obj/chemical.dmi' - icon_state = "dropper0" - amount_per_transfer_from_this = 5 - possible_transfer_amounts = list(1,2,3,4,5) - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - volume = 5 - drop_sound = 'sound/items/drop/glass.ogg' - pickup_sound = 'sound/items/pickup/glass.ogg' - -/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(reagents && reagents.reagent_list.len) - . += "It contains [reagents.total_volume] units of liquid." - else - . += "It is empty." - -/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity) - if(!target.reagents || !proximity) return - - if(reagents.total_volume) - - if(!target.reagents.get_free_space()) - to_chat(user, "[target] is full.") - return - - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit. - to_chat(user, "You cannot directly fill this object.") - return - - var/trans = 0 - - if(ismob(target)) - - var/time = 20 //2/3rds the time of a syringe - user.visible_message("[user] is trying to squirt something into [target]'s eyes!") - - if(!do_mob(user, target, time)) - return - - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/victim = target - - var/obj/item/safe_thing = null - if(victim.wear_mask) - if (victim.wear_mask.body_parts_covered & EYES) - safe_thing = victim.wear_mask - if(victim.head) - if (victim.head.body_parts_covered & EYES) - safe_thing = victim.head - if(victim.glasses) - if (!safe_thing) - safe_thing = victim.glasses - - if(safe_thing) - trans = reagents.splash(safe_thing, min(amount_per_transfer_from_this, reagents.total_volume), max_spill=30) - user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") - return - - var/contained = reagentlist() - add_attack_logs(user,target,"Used [src.name] containing [contained]") - - trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested - trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something - user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.") - - return - - else - trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) - to_chat(user, "You transfer [trans] units of the solution.") - - else // Taking from something - - if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) - to_chat(user, "You cannot directly remove reagents from [target].") - return - - if(!target.reagents || !target.reagents.total_volume) - to_chat(user, "[target] is empty.") - return - - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - - to_chat(user, "You fill the dropper with [trans] units of the solution.") - - return - -/obj/item/weapon/reagent_containers/dropper/on_reagent_change() - update_icon() - -/obj/item/weapon/reagent_containers/dropper/update_icon() - if(reagents.total_volume) - icon_state = "dropper1" - else - icon_state = "dropper0" - -/obj/item/weapon/reagent_containers/dropper/industrial - name = "Industrial Dropper" - desc = "A larger dropper. Transfers up to 10 units at a time." - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10) - volume = 10 - -//////////////////////////////////////////////////////////////////////////////// -/// Droppers. END -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +/// Droppers. +//////////////////////////////////////////////////////////////////////////////// +/obj/item/weapon/reagent_containers/dropper + name = "dropper" + desc = "A dropper. Transfers up to 5 units at a time." + icon = 'icons/obj/chemical.dmi' + icon_state = "dropper0" + amount_per_transfer_from_this = 5 + possible_transfer_amounts = list(1,2,3,4,5) + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + volume = 5 + drop_sound = 'sound/items/drop/glass.ogg' + pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(reagents && reagents.reagent_list.len) + . += "It contains [reagents.total_volume] units of liquid." + else + . += "It is empty." + +/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity) + if(!target.reagents || !proximity) return + + if(reagents.total_volume) + + if(!target.reagents.get_free_space()) + to_chat(user, "[target] is full.") + return + + if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit. + to_chat(user, "You cannot directly fill this object.") + return + + var/trans = 0 + + if(ismob(target)) + + var/time = 20 //2/3rds the time of a syringe + user.visible_message("[user] is trying to squirt something into [target]'s eyes!") + + if(!do_mob(user, target, time)) + return + + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/victim = target + + var/obj/item/safe_thing = null + if(victim.wear_mask) + if (victim.wear_mask.body_parts_covered & EYES) + safe_thing = victim.wear_mask + if(victim.head) + if (victim.head.body_parts_covered & EYES) + safe_thing = victim.head + if(victim.glasses) + if (!safe_thing) + safe_thing = victim.glasses + + if(safe_thing) + trans = reagents.splash(safe_thing, min(amount_per_transfer_from_this, reagents.total_volume), max_spill=30) + user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") + return + + var/contained = reagentlist() + add_attack_logs(user,target,"Used [src.name] containing [contained]") + + trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested + trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something + user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.") + + return + + else + trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) + to_chat(user, "You transfer [trans] units of the solution.") + + else // Taking from something + + if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) + to_chat(user, "You cannot directly remove reagents from [target].") + return + + if(!target.reagents || !target.reagents.total_volume) + to_chat(user, "[target] is empty.") + return + + var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) + + to_chat(user, "You fill the dropper with [trans] units of the solution.") + + return + +/obj/item/weapon/reagent_containers/dropper/on_reagent_change() + update_icon() + +/obj/item/weapon/reagent_containers/dropper/update_icon() + if(reagents.total_volume) + icon_state = "dropper1" + else + icon_state = "dropper0" + +/obj/item/weapon/reagent_containers/dropper/industrial + name = "Industrial Dropper" + desc = "A larger dropper. Transfers up to 10 units at a time." + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10) + volume = 10 + +//////////////////////////////////////////////////////////////////////////////// +/// Droppers. END +//////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index da64f6a808..70cb84d44d 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -1,387 +1,387 @@ -//////////////////////////////////////////////////////////////////////////////// -/// HYPOSPRAY -//////////////////////////////////////////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/hypospray - name = "hypospray" - desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." - icon = 'icons/obj/syringe.dmi' - icon_state = "hypo" - item_state = "hypo" - amount_per_transfer_from_this = 5 - unacidable = TRUE - volume = 30 - possible_transfer_amounts = null - flags = OPENCONTAINER - slot_flags = SLOT_BELT - drop_sound = 'sound/items/drop/gun.ogg' - pickup_sound = 'sound/items/pickup/gun.ogg' - preserve_item = 1 - var/filled = 0 - var/list/filled_reagents = list() - var/hyposound // What sound do we play on use? - -/obj/item/weapon/reagent_containers/hypospray/Initialize() - . = ..() - if(filled) - if(filled_reagents) - for(var/r in filled_reagents) - reagents.add_reagent(r, filled_reagents[r]) - update_icon() - -/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) - if(!reagents.total_volume) - to_chat(user, "[src] is empty.") - return - if (!istype(M)) - return - - var/mob/living/carbon/human/H = M - if(istype(H)) - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(!affected) - to_chat(user, "\The [H] is missing that limb!") - return - /* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity. - else if(affected.robotic >= ORGAN_ROBOT) - to_chat(user, "You cannot inject a robotic limb.") - return - */ - - //VOREStation Add Start - Adds Prototype Hypo functionality - if(H != user && prototype) - to_chat(user, "You begin injecting [H] with \the [src].") - to_chat(H, " [user] is trying to inject you with \the [src]!") - if(!do_after(user, 30, H)) - return - //VOREstation Add End - else if(!H.stat && !prototype) //VOREStation Edit - if(H != user) - if(H.a_intent != I_HELP) - to_chat(user, "[H] is resisting your attempt to inject them with \the [src].") - to_chat(H, " [user] is trying to inject you with \the [src]!") - if(!do_after(user, 30, H)) - return - - do_injection(H, user) - return - -// This does the actual injection and transfer. -/obj/item/weapon/reagent_containers/hypospray/proc/do_injection(mob/living/carbon/human/H, mob/living/user) - if(!istype(H) || !istype(user)) - return FALSE - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - to_chat(user, span("notice", "You inject \the [H] with \the [src].")) - to_chat(H, span("warning", "You feel a tiny prick!")) - - if(hyposound) - playsound(src, hyposound, 25) - - if(H.reagents) - var/contained = reagentlist() - var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BLOOD) - add_attack_logs(user,H,"Injected with [src.name] containing [contained], trasferred [trans] units") - to_chat(user, span("notice", "[trans] units injected. [reagents.total_volume] units remaining in \the [src].")) - return TRUE - return FALSE - -//A vial-loaded hypospray. Cartridge-based! -/obj/item/weapon/reagent_containers/hypospray/vial - name = "advanced hypospray" - icon_state = "advhypo" - desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping." - var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name. - volume = 0 - -/obj/item/weapon/reagent_containers/hypospray/vial/Initialize() - . = ..() - icon_state = "[initial(icon_state)]" - loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial - volume = loaded_vial.volume - reagents.maximum_volume = loaded_vial.reagents.maximum_volume - -/obj/item/weapon/reagent_containers/hypospray/vial/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - if(loaded_vial) - reagents.trans_to_holder(loaded_vial.reagents,volume) - reagents.maximum_volume = 0 - loaded_vial.update_icon() - user.put_in_hands(loaded_vial) - loaded_vial = null - to_chat(user, "You remove the vial from the [src].") - update_icon() - playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) - return - ..() - else - return ..() - -/obj/item/weapon/reagent_containers/hypospray/vial/update_icon() - ..() - if(loaded_vial) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]_empty" - -/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob) - if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial)) - if(!loaded_vial) - user.visible_message("[user] begins loading [W] into \the [src].","You start loading [W] into \the [src].") - if(!do_after(user,30) || loaded_vial || !(W in user)) - return 0 - if(W.is_open_container()) - W.flags ^= OPENCONTAINER - W.update_icon() - user.drop_item() - W.loc = src - loaded_vial = W - reagents.maximum_volume = loaded_vial.reagents.maximum_volume - loaded_vial.reagents.trans_to_holder(reagents,volume) - user.visible_message("[user] has loaded [W] into \the [src].","You have loaded [W] into \the [src].") - update_icon() - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - else - to_chat(user, "\The [src] already has a vial.") - else - ..() - -/obj/item/weapon/reagent_containers/hypospray/autoinjector - name = "autoinjector" - desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel." - icon_state = "blue" - item_state = "blue" - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - amount_per_transfer_from_this = 5 - volume = 5 - filled = 1 - filled_reagents = list("inaprovaline" = 5) - preserve_item = 0 - hyposound = 'sound/effects/hypospray.ogg' - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change() - ..() - update_icon() - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty - filled = 0 - filled_reagents = list() - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/used/Initialize() - . = ..() - flags &= ~OPENCONTAINER - icon_state = "[initial(icon_state)]0" - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/do_injection(mob/living/carbon/human/H, mob/living/user) - . = ..() - if(.) // Will occur if successfully injected. - flags &= ~OPENCONTAINER - update_icon() - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon() - if(reagents.total_volume > 0) - icon_state = "[initial(icon_state)]1" - else - icon_state = "[initial(icon_state)]0" - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user) - . = ..() - if(reagents && reagents.reagent_list.len) - . += "It is currently loaded." - else - . += "It is spent." - - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox - name = "autoinjector (antitox)" - icon_state = "green" - filled_reagents = list("anti_toxin" = 5) - -//Special autoinjectors, while having potent chems like the 15u ones, the chems are usually potent enough that 5u is enough -/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed - name = "bone repair injector" - desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating damage to bones." - filled_reagents = list("osteodaxon" = 5) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed - name = "clone injector" - desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating genetic damage." - filled_reagents = list("rezadone" = 5) - -// These have a 15u capacity, somewhat higher tech level, and generally more useful chems, but are otherwise the same as the regular autoinjectors. -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector - name = "empty hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity." - icon_state = "autoinjector" - amount_per_transfer_from_this = 15 - volume = 15 - origin_tech = list(TECH_BIO = 4) - filled_reagents = list("inaprovaline" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty //for the autolathe - name = "large autoinjector" - filled = 0 - filled_reagents = list() - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute - name = "trauma hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on victims of \ - moderate blunt trauma." - filled_reagents = list("bicaridine" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn - name = "burn hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on burn victims, \ - featuring an optimized chemical mixture to allow for rapid healing." - filled_reagents = list("kelotane" = 7.5, "dermaline" = 7.5) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin - name = "toxin hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract toxins." - filled_reagents = list("anti_toxin" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy - name = "oxy hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract oxygen \ - deprivation." - filled_reagents = list("dexalinp" = 10, "tricordrazine" = 5) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity - name = "purity hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at \ - resolving viruses, infections, radiation, and genetic maladies." - filled_reagents = list("spaceacillin" = 4, "arithrazine" = 5, "prussian_blue" = 5, "ryetalyn" = 1) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain - name = "pain hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This one contains potent painkillers." - filled_reagents = list("tramadol" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ - name = "organ hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. Organ damage is resolved by this variant." - filled_reagents = list("alkysine" = 3, "imidazoline" = 2, "peridaxon" = 10) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat - name = "combat hypo" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This is a more dangerous and potentially \ - addictive hypo compared to others, as it contains a potent cocktail of various chemicals to optimize the recipient's combat \ - ability." - filled_reagents = list("bicaridine" = 3, "kelotane" = 1.5, "dermaline" = 1.5, "oxycodone" = 3, "hyperzine" = 3, "tricordrazine" = 3) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting - name = "clotting agent" - desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at treating bleeding wounds and internal bleeding." - filled_reagents = list("inaprovaline" = 5, "myelamine" = 10) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose - name = "glucose hypo" - desc = "A hypoinjector filled with glucose, used for critically malnourished patients and voidsuited workers." - filled_reagents = list("glucose" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm - name = "stimm injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one is filled with a home-made stimulant, with some serious side-effects." - filled_reagents = list("stimm" = 10) // More than 10u will OD. - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired - name = "expired injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one has had its contents expire a long time ago, using it now will probably make someone sick, or worse." - filled_reagents = list("expired_medicine" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific - name = "soporific injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one is sometimes used by orderlies, as it has soporifics, which make someone tired and fall asleep." - filled_reagents = list("stoxin" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide - name = "cyanide injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one contains cyanide, a lethal poison. It being inside a medical autoinjector has certain unsettling implications." - filled_reagents = list("cyanide" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium - name = "serotrotium injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one is filled with serotrotium, which causes concentrated production of the serotonin neurotransmitter in humans." - filled_reagents = list("serotrotium" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss - name = "illicit injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one contains various illicit drugs, held inside a hypospray to make smuggling easier." - filled_reagents = list("bliss" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin - name = "cryptobiolin injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one contains cryptobiolin, which causes confusion." - filled_reagents = list("cryptobiolin" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene - name = "impedrezene injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one has impedrezene inside, a narcotic that impairs higher brain functioning. \ - This autoinjector is almost certainly created illegitimately." - filled_reagents = list("impedrezene" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker - name = "mindbreaker injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This one stores the dangerous hallucinogen called 'Mindbreaker', likely put in place \ - by illicit groups hoping to hide their product." - filled_reagents = list("mindbreaker" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin - name = "psilocybin injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This has psilocybin inside, which is a strong psychotropic derived from certain species of mushroom. \ - This autoinjector likely was made by criminal elements to avoid detection from casual inspection." - filled_reagents = list("psilocybin" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen - name = "unstable mutagen injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This contains unstable mutagen, which makes using this a very bad idea. It will either \ - ruin your genetic health, turn you into a Five Points violation, or both!" - filled_reagents = list("mutagen" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin - name = "lexorin injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - This contains lexorin, a dangerous toxin that stops respiration, and has been \ - implicated in several high-profile assassinations in the past." - filled_reagents = list("lexorin" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites - name = "medical nanite injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - The injector stores a slurry of highly advanced and specialized nanomachines designed \ - to restore bodily health from within. The nanomachines are short-lived but degrade \ - harmlessly, and cannot self-replicate in order to remain Five Points compliant." - filled_reagents = list("healing_nanites" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites - name = "defective nanite injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - The injector stores a slurry of highly advanced and specialized nanomachines that \ - are unfortunately malfunctioning, making them unsafe to use inside of a living body. \ - Because of the Five Points, these nanites cannot self-replicate." - filled_reagents = list("defective_nanites" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated - name = "contaminated injector" - desc = "A refined version of the standard autoinjector, allowing greater capacity. \ - The hypospray contains a viral agent inside, as well as a liquid substance that encourages \ - the growth of the virus inside." - filled_reagents = list("virusfood" = 15) - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/do_injection(mob/living/carbon/human/H, mob/living/user) - . = ..() - if(.) // Will occur if successfully injected. - infect_mob_random_lesser(H) - add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].") +//////////////////////////////////////////////////////////////////////////////// +/// HYPOSPRAY +//////////////////////////////////////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/hypospray + name = "hypospray" + desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." + icon = 'icons/obj/syringe.dmi' + icon_state = "hypo" + item_state = "hypo" + amount_per_transfer_from_this = 5 + unacidable = TRUE + volume = 30 + possible_transfer_amounts = null + flags = OPENCONTAINER + slot_flags = SLOT_BELT + drop_sound = 'sound/items/drop/gun.ogg' + pickup_sound = 'sound/items/pickup/gun.ogg' + preserve_item = 1 + var/filled = 0 + var/list/filled_reagents = list() + var/hyposound // What sound do we play on use? + +/obj/item/weapon/reagent_containers/hypospray/Initialize() + . = ..() + if(filled) + if(filled_reagents) + for(var/r in filled_reagents) + reagents.add_reagent(r, filled_reagents[r]) + update_icon() + +/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) + if(!reagents.total_volume) + to_chat(user, "[src] is empty.") + return + if (!istype(M)) + return + + var/mob/living/carbon/human/H = M + if(istype(H)) + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(!affected) + to_chat(user, "\The [H] is missing that limb!") + return + /* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity. + else if(affected.robotic >= ORGAN_ROBOT) + to_chat(user, "You cannot inject a robotic limb.") + return + */ + + //VOREStation Add Start - Adds Prototype Hypo functionality + if(H != user && prototype) + to_chat(user, "You begin injecting [H] with \the [src].") + to_chat(H, " [user] is trying to inject you with \the [src]!") + if(!do_after(user, 30, H)) + return + //VOREstation Add End + else if(!H.stat && !prototype) //VOREStation Edit + if(H != user) + if(H.a_intent != I_HELP) + to_chat(user, "[H] is resisting your attempt to inject them with \the [src].") + to_chat(H, " [user] is trying to inject you with \the [src]!") + if(!do_after(user, 30, H)) + return + + do_injection(H, user) + return + +// This does the actual injection and transfer. +/obj/item/weapon/reagent_containers/hypospray/proc/do_injection(mob/living/carbon/human/H, mob/living/user) + if(!istype(H) || !istype(user)) + return FALSE + + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + to_chat(user, span("notice", "You inject \the [H] with \the [src].")) + to_chat(H, span("warning", "You feel a tiny prick!")) + + if(hyposound) + playsound(src, hyposound, 25) + + if(H.reagents) + var/contained = reagentlist() + var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BLOOD) + add_attack_logs(user,H,"Injected with [src.name] containing [contained], trasferred [trans] units") + to_chat(user, span("notice", "[trans] units injected. [reagents.total_volume] units remaining in \the [src].")) + return TRUE + return FALSE + +//A vial-loaded hypospray. Cartridge-based! +/obj/item/weapon/reagent_containers/hypospray/vial + name = "advanced hypospray" + icon_state = "advhypo" + desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping." + var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name. + volume = 0 + +/obj/item/weapon/reagent_containers/hypospray/vial/Initialize() + . = ..() + icon_state = "[initial(icon_state)]" + loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial + volume = loaded_vial.volume + reagents.maximum_volume = loaded_vial.reagents.maximum_volume + +/obj/item/weapon/reagent_containers/hypospray/vial/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) + if(loaded_vial) + reagents.trans_to_holder(loaded_vial.reagents,volume) + reagents.maximum_volume = 0 + loaded_vial.update_icon() + user.put_in_hands(loaded_vial) + loaded_vial = null + to_chat(user, "You remove the vial from the [src].") + update_icon() + playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) + return + ..() + else + return ..() + +/obj/item/weapon/reagent_containers/hypospray/vial/update_icon() + ..() + if(loaded_vial) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]_empty" + +/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob) + if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial)) + if(!loaded_vial) + user.visible_message("[user] begins loading [W] into \the [src].","You start loading [W] into \the [src].") + if(!do_after(user,30) || loaded_vial || !(W in user)) + return 0 + if(W.is_open_container()) + W.flags ^= OPENCONTAINER + W.update_icon() + user.drop_item() + W.loc = src + loaded_vial = W + reagents.maximum_volume = loaded_vial.reagents.maximum_volume + loaded_vial.reagents.trans_to_holder(reagents,volume) + user.visible_message("[user] has loaded [W] into \the [src].","You have loaded [W] into \the [src].") + update_icon() + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + else + to_chat(user, "\The [src] already has a vial.") + else + ..() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector + name = "autoinjector" + desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel." + icon_state = "blue" + item_state = "blue" + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + amount_per_transfer_from_this = 5 + volume = 5 + filled = 1 + filled_reagents = list("inaprovaline" = 5) + preserve_item = 0 + hyposound = 'sound/effects/hypospray.ogg' + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change() + ..() + update_icon() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty + filled = 0 + filled_reagents = list() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/used/Initialize() + . = ..() + flags &= ~OPENCONTAINER + icon_state = "[initial(icon_state)]0" + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/do_injection(mob/living/carbon/human/H, mob/living/user) + . = ..() + if(.) // Will occur if successfully injected. + flags &= ~OPENCONTAINER + update_icon() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon() + if(reagents.total_volume > 0) + icon_state = "[initial(icon_state)]1" + else + icon_state = "[initial(icon_state)]0" + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user) + . = ..() + if(reagents && reagents.reagent_list.len) + . += "It is currently loaded." + else + . += "It is spent." + + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox + name = "autoinjector (antitox)" + icon_state = "green" + filled_reagents = list("anti_toxin" = 5) + +//Special autoinjectors, while having potent chems like the 15u ones, the chems are usually potent enough that 5u is enough +/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed + name = "bone repair injector" + desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating damage to bones." + filled_reagents = list("osteodaxon" = 5) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed + name = "clone injector" + desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating genetic damage." + filled_reagents = list("rezadone" = 5) + +// These have a 15u capacity, somewhat higher tech level, and generally more useful chems, but are otherwise the same as the regular autoinjectors. +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector + name = "empty hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity." + icon_state = "autoinjector" + amount_per_transfer_from_this = 15 + volume = 15 + origin_tech = list(TECH_BIO = 4) + filled_reagents = list("inaprovaline" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty //for the autolathe + name = "large autoinjector" + filled = 0 + filled_reagents = list() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute + name = "trauma hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on victims of \ + moderate blunt trauma." + filled_reagents = list("bicaridine" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn + name = "burn hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on burn victims, \ + featuring an optimized chemical mixture to allow for rapid healing." + filled_reagents = list("kelotane" = 7.5, "dermaline" = 7.5) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin + name = "toxin hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract toxins." + filled_reagents = list("anti_toxin" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy + name = "oxy hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract oxygen \ + deprivation." + filled_reagents = list("dexalinp" = 10, "tricordrazine" = 5) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity + name = "purity hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at \ + resolving viruses, infections, radiation, and genetic maladies." + filled_reagents = list("spaceacillin" = 4, "arithrazine" = 5, "prussian_blue" = 5, "ryetalyn" = 1) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain + name = "pain hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This one contains potent painkillers." + filled_reagents = list("tramadol" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ + name = "organ hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. Organ damage is resolved by this variant." + filled_reagents = list("alkysine" = 3, "imidazoline" = 2, "peridaxon" = 10) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat + name = "combat hypo" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This is a more dangerous and potentially \ + addictive hypo compared to others, as it contains a potent cocktail of various chemicals to optimize the recipient's combat \ + ability." + filled_reagents = list("bicaridine" = 3, "kelotane" = 1.5, "dermaline" = 1.5, "oxycodone" = 3, "hyperzine" = 3, "tricordrazine" = 3) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting + name = "clotting agent" + desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at treating bleeding wounds and internal bleeding." + filled_reagents = list("inaprovaline" = 5, "myelamine" = 10) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose + name = "glucose hypo" + desc = "A hypoinjector filled with glucose, used for critically malnourished patients and voidsuited workers." + filled_reagents = list("glucose" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm + name = "stimm injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one is filled with a home-made stimulant, with some serious side-effects." + filled_reagents = list("stimm" = 10) // More than 10u will OD. + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired + name = "expired injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one has had its contents expire a long time ago, using it now will probably make someone sick, or worse." + filled_reagents = list("expired_medicine" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific + name = "soporific injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one is sometimes used by orderlies, as it has soporifics, which make someone tired and fall asleep." + filled_reagents = list("stoxin" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide + name = "cyanide injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one contains cyanide, a lethal poison. It being inside a medical autoinjector has certain unsettling implications." + filled_reagents = list("cyanide" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium + name = "serotrotium injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one is filled with serotrotium, which causes concentrated production of the serotonin neurotransmitter in humans." + filled_reagents = list("serotrotium" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss + name = "illicit injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one contains various illicit drugs, held inside a hypospray to make smuggling easier." + filled_reagents = list("bliss" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin + name = "cryptobiolin injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one contains cryptobiolin, which causes confusion." + filled_reagents = list("cryptobiolin" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene + name = "impedrezene injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one has impedrezene inside, a narcotic that impairs higher brain functioning. \ + This autoinjector is almost certainly created illegitimately." + filled_reagents = list("impedrezene" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker + name = "mindbreaker injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This one stores the dangerous hallucinogen called 'Mindbreaker', likely put in place \ + by illicit groups hoping to hide their product." + filled_reagents = list("mindbreaker" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin + name = "psilocybin injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This has psilocybin inside, which is a strong psychotropic derived from certain species of mushroom. \ + This autoinjector likely was made by criminal elements to avoid detection from casual inspection." + filled_reagents = list("psilocybin" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen + name = "unstable mutagen injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This contains unstable mutagen, which makes using this a very bad idea. It will either \ + ruin your genetic health, turn you into a Five Points violation, or both!" + filled_reagents = list("mutagen" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin + name = "lexorin injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + This contains lexorin, a dangerous toxin that stops respiration, and has been \ + implicated in several high-profile assassinations in the past." + filled_reagents = list("lexorin" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites + name = "medical nanite injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + The injector stores a slurry of highly advanced and specialized nanomachines designed \ + to restore bodily health from within. The nanomachines are short-lived but degrade \ + harmlessly, and cannot self-replicate in order to remain Five Points compliant." + filled_reagents = list("healing_nanites" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites + name = "defective nanite injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + The injector stores a slurry of highly advanced and specialized nanomachines that \ + are unfortunately malfunctioning, making them unsafe to use inside of a living body. \ + Because of the Five Points, these nanites cannot self-replicate." + filled_reagents = list("defective_nanites" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated + name = "contaminated injector" + desc = "A refined version of the standard autoinjector, allowing greater capacity. \ + The hypospray contains a viral agent inside, as well as a liquid substance that encourages \ + the growth of the virus inside." + filled_reagents = list("virusfood" = 15) + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/do_injection(mob/living/carbon/human/H, mob/living/user) + . = ..() + if(.) // Will occur if successfully injected. + infect_mob_random_lesser(H) + add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].") diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index f3afbe9b51..7f4eb74629 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -1,355 +1,355 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Pills. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/weapon/reagent_containers/pill - name = "pill" - desc = "A pill." - icon = 'icons/obj/chemical.dmi' - icon_state = null - item_state = "pill" - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - - var/base_state = "pill" - - possible_transfer_amounts = null - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - volume = 60 - -/obj/item/weapon/reagent_containers/pill/Initialize() - . = ..() - if(!icon_state) - icon_state = "[base_state][rand(1, 4)]" //preset pills only use colour changing or unique icons - -/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob) - if(M == user) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(user, "\The [blocked] is in the way!") - return - - to_chat(M, "You swallow \the [src].") - M.drop_from_inventory(src) //icon update - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - else if(istype(M, /mob/living/carbon/human)) - - var/mob/living/carbon/human/H = M - if(!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(user, "\The [blocked] is in the way!") - return - - user.visible_message("[user] attempts to force [M] to swallow \the [src].") - - user.setClickCooldown(user.get_attack_speed(src)) - if(!do_mob(user, M)) - return - - user.drop_from_inventory(src) //icon update - user.visible_message("[user] forces [M] to swallow \the [src].") - - var/contained = reagentlist() - add_attack_logs(user,M,"Fed a pill containing [contained]") - - if(reagents && reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - - return 1 - - return 0 - -/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity) - if(!proximity) return - - if(target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) - to_chat(user, "[target] is empty. Can't dissolve \the [src].") - return - to_chat(user, "You dissolve \the [src] in [target].") - - add_attack_logs(user,null,"Spiked [target.name] with a pill containing [reagentlist()]") - - reagents.trans_to(target, reagents.total_volume) - for(var/mob/O in viewers(2, user)) - O.show_message("[user] puts something in \the [target].", 1) - - qdel(src) - - return - -/obj/item/weapon/reagent_containers/pill/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(is_sharp(W)) - var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc) - user.visible_message("[user] gently cuts up [src] with [W]!") - playsound(src.loc, 'sound/effects/chop.ogg', 50, 1) - - if(reagents) - reagents.trans_to_obj(J, reagents.total_volume) - J.get_appearance() - qdel(src) - - if(istype(W, /obj/item/weapon/card/id)) - var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc) - user.visible_message("[user] clumsily chops up [src] with [W]!") - playsound(src.loc, 'sound/effects/chop.ogg', 50, 1) - - if(reagents) - reagents.trans_to_obj(J, reagents.total_volume) - J.get_appearance() - qdel(src) - - return ..() - -//////////////////////////////////////////////////////////////////////////////// -/// Pills. END -//////////////////////////////////////////////////////////////////////////////// - -//Pills -/obj/item/weapon/reagent_containers/pill/antitox - name = "Dylovene (30u)" //VOREStation Edit - desc = "Neutralizes many common toxins." - icon_state = "pill1" - -/obj/item/weapon/reagent_containers/pill/antitox/Initialize() - . = ..() - reagents.add_reagent("anti_toxin", 30) //VOREStation Edit - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/tox - name = "Toxins pill" - desc = "Highly toxic." - icon_state = "pill4" - -/obj/item/weapon/reagent_containers/pill/tox/Initialize() - . = ..() - reagents.add_reagent("toxin", 50) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/cyanide - name = "Strange pill" - desc = "It's marked 'KCN'. Smells vaguely of almonds." - icon_state = "pill9" - -/obj/item/weapon/reagent_containers/pill/cyanide/Initialize() - . = ..() - reagents.add_reagent("cyanide", 50) - - -/obj/item/weapon/reagent_containers/pill/adminordrazine - name = "Adminordrazine pill" - desc = "It's magic. We don't have to explain it." - icon_state = "pillA" - -/obj/item/weapon/reagent_containers/pill/adminordrazine/Initialize() - . = ..() - reagents.add_reagent("adminordrazine", 5) - - -/obj/item/weapon/reagent_containers/pill/stox - name = "Soporific (15u)" - desc = "Commonly used to treat insomnia." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/stox/Initialize() - . = ..() - reagents.add_reagent("stoxin", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/kelotane - name = "Kelotane (20u)" //VOREStation Edit - desc = "Used to treat burns." - icon_state = "pill3" - -/obj/item/weapon/reagent_containers/pill/kelotane/Initialize() - . = ..() - reagents.add_reagent("kelotane", 20) //VOREStation Edit - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/paracetamol - name = "Paracetamol (15u)" - desc = "Paracetamol! A painkiller for the ages. Chewables!" - icon_state = "pill3" - -/obj/item/weapon/reagent_containers/pill/paracetamol/Initialize() - . = ..() - reagents.add_reagent("paracetamol", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/tramadol - name = "Tramadol (15u)" - desc = "A simple painkiller." - icon_state = "pill3" - -/obj/item/weapon/reagent_containers/pill/tramadol/Initialize() - . = ..() - reagents.add_reagent("tramadol", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/methylphenidate - name = "Methylphenidate (15u)" - desc = "Improves the ability to concentrate." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/methylphenidate/Initialize() - . = ..() - reagents.add_reagent("methylphenidate", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/citalopram - name = "Citalopram (15u)" - desc = "Mild anti-depressant." - icon_state = "pill4" - -/obj/item/weapon/reagent_containers/pill/citalopram/Initialize() - . = ..() - reagents.add_reagent("citalopram", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/dexalin - name = "Dexalin (7.5u)" //VOREstation Edit - desc = "Used to treat oxygen deprivation." - icon_state = "pill1" - -/obj/item/weapon/reagent_containers/pill/dexalin/Initialize() - . = ..() - reagents.add_reagent("dexalin", 7.5) //VOREStation Edit - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/dexalin_plus - name = "Dexalin Plus (15u)" - desc = "Used to treat extreme oxygen deprivation." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/dexalin_plus/Initialize() - . = ..() - reagents.add_reagent("dexalinp", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/dermaline - name = "Dermaline (15u)" - desc = "Used to treat burn wounds." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/dermaline/Initialize() - . = ..() - reagents.add_reagent("dermaline", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/dylovene - name = "Dylovene (15u)" - desc = "A broad-spectrum anti-toxin." - icon_state = "pill1" - -/obj/item/weapon/reagent_containers/pill/dylovene/Initialize() - . = ..() - reagents.add_reagent("anti_toxin", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/inaprovaline - name = "Inaprovaline (30u)" - desc = "Used to stabilize patients." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/inaprovaline/Initialize() - . = ..() - reagents.add_reagent("inaprovaline", 30) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/bicaridine - name = "Bicaridine (20u)" - desc = "Used to treat physical injuries." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/bicaridine/Initialize() - . = ..() - reagents.add_reagent("bicaridine", 20) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/spaceacillin - name = "Spaceacillin (15u)" //VOREStation Edit - desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." - icon_state = "pill3" - -/obj/item/weapon/reagent_containers/pill/spaceacillin/Initialize() - . = ..() - reagents.add_reagent("spaceacillin", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/carbon - name = "Carbon (30u)" //VOREStation Edit - desc = "Used to neutralise chemicals in the stomach." - icon_state = "pill3" - -/obj/item/weapon/reagent_containers/pill/carbon/Initialize() - . = ..() - reagents.add_reagent("carbon", 30) //VOREStation Edit - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/iron - name = "Iron (30u)" //VOREStation Edit - desc = "Used to aid in blood regeneration after bleeding for red-blooded crew." - icon_state = "pill1" - -/obj/item/weapon/reagent_containers/pill/iron/Initialize() - . = ..() - reagents.add_reagent("iron", 30) //VOREStation Edit - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/copper - name = "Copper (30u)" - desc = "Used to aid in blood regeneration after bleeding for blue-blooded crew." - icon_state = "pill1" - -/obj/item/weapon/reagent_containers/pill/copper/Initialize() - . = ..() - reagents.add_reagent("copper", 30) - color = reagents.get_color() - -//Not-quite-medicine -/obj/item/weapon/reagent_containers/pill/happy - name = "Happy pill" - desc = "Happy happy joy joy!" - icon_state = "pill4" - -/obj/item/weapon/reagent_containers/pill/happy/Initialize() - . = ..() - reagents.add_reagent("bliss", 15) - reagents.add_reagent("sugar", 15) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/zoom - name = "Zoom pill" - desc = "Zoooom!" - icon_state = "pill4" - -/obj/item/weapon/reagent_containers/pill/zoom/Initialize() - . = ..() - if(prob(50)) //VOREStation edit begin: Zoom pill adjustments - reagents.add_reagent("mold", 2) //Chance to be more dangerous - reagents.add_reagent("expired_medicine", 5) - reagents.add_reagent("stimm", 5) //VOREStation edit end: Zoom pill adjustments - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/diet - name = "diet pill" - desc = "Guaranteed to get you slim!" - icon_state = "pill4" - -/obj/item/weapon/reagent_containers/pill/diet/Initialize() - . = ..() - reagents.add_reagent("lipozine", 15) //VOREStation Edit - color = reagents.get_color() +//////////////////////////////////////////////////////////////////////////////// +/// Pills. +//////////////////////////////////////////////////////////////////////////////// +/obj/item/weapon/reagent_containers/pill + name = "pill" + desc = "A pill." + icon = 'icons/obj/chemical.dmi' + icon_state = null + item_state = "pill" + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + + var/base_state = "pill" + + possible_transfer_amounts = null + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS + volume = 60 + +/obj/item/weapon/reagent_containers/pill/Initialize() + . = ..() + if(!icon_state) + icon_state = "[base_state][rand(1, 4)]" //preset pills only use colour changing or unique icons + +/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob) + if(M == user) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(!H.check_has_mouth()) + to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!") + return + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + to_chat(user, "\The [blocked] is in the way!") + return + + to_chat(M, "You swallow \the [src].") + M.drop_from_inventory(src) //icon update + if(reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) + return 1 + + else if(istype(M, /mob/living/carbon/human)) + + var/mob/living/carbon/human/H = M + if(!H.check_has_mouth()) + to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!") + return + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + to_chat(user, "\The [blocked] is in the way!") + return + + user.visible_message("[user] attempts to force [M] to swallow \the [src].") + + user.setClickCooldown(user.get_attack_speed(src)) + if(!do_mob(user, M)) + return + + user.drop_from_inventory(src) //icon update + user.visible_message("[user] forces [M] to swallow \the [src].") + + var/contained = reagentlist() + add_attack_logs(user,M,"Fed a pill containing [contained]") + + if(reagents && reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) + + return 1 + + return 0 + +/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity) + if(!proximity) return + + if(target.is_open_container() && target.reagents) + if(!target.reagents.total_volume) + to_chat(user, "[target] is empty. Can't dissolve \the [src].") + return + to_chat(user, "You dissolve \the [src] in [target].") + + add_attack_logs(user,null,"Spiked [target.name] with a pill containing [reagentlist()]") + + reagents.trans_to(target, reagents.total_volume) + for(var/mob/O in viewers(2, user)) + O.show_message("[user] puts something in \the [target].", 1) + + qdel(src) + + return + +/obj/item/weapon/reagent_containers/pill/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(is_sharp(W)) + var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc) + user.visible_message("[user] gently cuts up [src] with [W]!") + playsound(src.loc, 'sound/effects/chop.ogg', 50, 1) + + if(reagents) + reagents.trans_to_obj(J, reagents.total_volume) + J.get_appearance() + qdel(src) + + if(istype(W, /obj/item/weapon/card/id)) + var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc) + user.visible_message("[user] clumsily chops up [src] with [W]!") + playsound(src.loc, 'sound/effects/chop.ogg', 50, 1) + + if(reagents) + reagents.trans_to_obj(J, reagents.total_volume) + J.get_appearance() + qdel(src) + + return ..() + +//////////////////////////////////////////////////////////////////////////////// +/// Pills. END +//////////////////////////////////////////////////////////////////////////////// + +//Pills +/obj/item/weapon/reagent_containers/pill/antitox + name = "Dylovene (30u)" //VOREStation Edit + desc = "Neutralizes many common toxins." + icon_state = "pill1" + +/obj/item/weapon/reagent_containers/pill/antitox/Initialize() + . = ..() + reagents.add_reagent("anti_toxin", 30) //VOREStation Edit + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/tox + name = "Toxins pill" + desc = "Highly toxic." + icon_state = "pill4" + +/obj/item/weapon/reagent_containers/pill/tox/Initialize() + . = ..() + reagents.add_reagent("toxin", 50) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/cyanide + name = "Strange pill" + desc = "It's marked 'KCN'. Smells vaguely of almonds." + icon_state = "pill9" + +/obj/item/weapon/reagent_containers/pill/cyanide/Initialize() + . = ..() + reagents.add_reagent("cyanide", 50) + + +/obj/item/weapon/reagent_containers/pill/adminordrazine + name = "Adminordrazine pill" + desc = "It's magic. We don't have to explain it." + icon_state = "pillA" + +/obj/item/weapon/reagent_containers/pill/adminordrazine/Initialize() + . = ..() + reagents.add_reagent("adminordrazine", 5) + + +/obj/item/weapon/reagent_containers/pill/stox + name = "Soporific (15u)" + desc = "Commonly used to treat insomnia." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/stox/Initialize() + . = ..() + reagents.add_reagent("stoxin", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/kelotane + name = "Kelotane (20u)" //VOREStation Edit + desc = "Used to treat burns." + icon_state = "pill3" + +/obj/item/weapon/reagent_containers/pill/kelotane/Initialize() + . = ..() + reagents.add_reagent("kelotane", 20) //VOREStation Edit + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/paracetamol + name = "Paracetamol (15u)" + desc = "Paracetamol! A painkiller for the ages. Chewables!" + icon_state = "pill3" + +/obj/item/weapon/reagent_containers/pill/paracetamol/Initialize() + . = ..() + reagents.add_reagent("paracetamol", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/tramadol + name = "Tramadol (15u)" + desc = "A simple painkiller." + icon_state = "pill3" + +/obj/item/weapon/reagent_containers/pill/tramadol/Initialize() + . = ..() + reagents.add_reagent("tramadol", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/methylphenidate + name = "Methylphenidate (15u)" + desc = "Improves the ability to concentrate." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/methylphenidate/Initialize() + . = ..() + reagents.add_reagent("methylphenidate", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/citalopram + name = "Citalopram (15u)" + desc = "Mild anti-depressant." + icon_state = "pill4" + +/obj/item/weapon/reagent_containers/pill/citalopram/Initialize() + . = ..() + reagents.add_reagent("citalopram", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/dexalin + name = "Dexalin (7.5u)" //VOREstation Edit + desc = "Used to treat oxygen deprivation." + icon_state = "pill1" + +/obj/item/weapon/reagent_containers/pill/dexalin/Initialize() + . = ..() + reagents.add_reagent("dexalin", 7.5) //VOREStation Edit + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/dexalin_plus + name = "Dexalin Plus (15u)" + desc = "Used to treat extreme oxygen deprivation." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/dexalin_plus/Initialize() + . = ..() + reagents.add_reagent("dexalinp", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/dermaline + name = "Dermaline (15u)" + desc = "Used to treat burn wounds." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/dermaline/Initialize() + . = ..() + reagents.add_reagent("dermaline", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/dylovene + name = "Dylovene (15u)" + desc = "A broad-spectrum anti-toxin." + icon_state = "pill1" + +/obj/item/weapon/reagent_containers/pill/dylovene/Initialize() + . = ..() + reagents.add_reagent("anti_toxin", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/inaprovaline + name = "Inaprovaline (30u)" + desc = "Used to stabilize patients." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/inaprovaline/Initialize() + . = ..() + reagents.add_reagent("inaprovaline", 30) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/bicaridine + name = "Bicaridine (20u)" + desc = "Used to treat physical injuries." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/bicaridine/Initialize() + . = ..() + reagents.add_reagent("bicaridine", 20) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/spaceacillin + name = "Spaceacillin (15u)" //VOREStation Edit + desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." + icon_state = "pill3" + +/obj/item/weapon/reagent_containers/pill/spaceacillin/Initialize() + . = ..() + reagents.add_reagent("spaceacillin", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/carbon + name = "Carbon (30u)" //VOREStation Edit + desc = "Used to neutralise chemicals in the stomach." + icon_state = "pill3" + +/obj/item/weapon/reagent_containers/pill/carbon/Initialize() + . = ..() + reagents.add_reagent("carbon", 30) //VOREStation Edit + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/iron + name = "Iron (30u)" //VOREStation Edit + desc = "Used to aid in blood regeneration after bleeding for red-blooded crew." + icon_state = "pill1" + +/obj/item/weapon/reagent_containers/pill/iron/Initialize() + . = ..() + reagents.add_reagent("iron", 30) //VOREStation Edit + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/copper + name = "Copper (30u)" + desc = "Used to aid in blood regeneration after bleeding for blue-blooded crew." + icon_state = "pill1" + +/obj/item/weapon/reagent_containers/pill/copper/Initialize() + . = ..() + reagents.add_reagent("copper", 30) + color = reagents.get_color() + +//Not-quite-medicine +/obj/item/weapon/reagent_containers/pill/happy + name = "Happy pill" + desc = "Happy happy joy joy!" + icon_state = "pill4" + +/obj/item/weapon/reagent_containers/pill/happy/Initialize() + . = ..() + reagents.add_reagent("bliss", 15) + reagents.add_reagent("sugar", 15) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/zoom + name = "Zoom pill" + desc = "Zoooom!" + icon_state = "pill4" + +/obj/item/weapon/reagent_containers/pill/zoom/Initialize() + . = ..() + if(prob(50)) //VOREStation edit begin: Zoom pill adjustments + reagents.add_reagent("mold", 2) //Chance to be more dangerous + reagents.add_reagent("expired_medicine", 5) + reagents.add_reagent("stimm", 5) //VOREStation edit end: Zoom pill adjustments + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/diet + name = "diet pill" + desc = "Guaranteed to get you slim!" + icon_state = "pill4" + +/obj/item/weapon/reagent_containers/pill/diet/Initialize() + . = ..() + reagents.add_reagent("lipozine", 15) //VOREStation Edit + color = reagents.get_color() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index cf3b748e8a..4d8720ed9e 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -1,303 +1,303 @@ -/obj/item/weapon/reagent_containers/spray - name = "spray bottle" - desc = "A spray bottle, with an unscrewable top." - icon = 'icons/obj/janitor.dmi' - icon_state = "cleaner" - item_state = "cleaner" - center_of_mass = list("x" = 16,"y" = 10) - flags = OPENCONTAINER|NOBLUDGEON - matter = list(MAT_GLASS = 300, MAT_STEEL = 300) - slot_flags = SLOT_BELT - throwforce = 3 - w_class = ITEMSIZE_SMALL - throw_speed = 2 - throw_range = 10 - amount_per_transfer_from_this = 10 - unacidable = TRUE //plastic - possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one. - var/spray_size = 3 - var/list/spray_sizes = list(1,3) - volume = 250 - -/obj/item/weapon/reagent_containers/spray/Initialize() - . = ..() - src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - -/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart)) - return - - if(istype(A, /spell)) - return - - if(proximity) - if(standard_dispenser_refill(user, A)) - return - - if(reagents.total_volume < amount_per_transfer_from_this) - to_chat(user, "\The [src] is empty!") - return - - Spray_at(A, user, proximity) - - user.setClickCooldown(4) - - if(reagents.has_reagent("sacid")) - message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src].") - log_game("[key_name(user)] fired sulphuric acid from \a [src].") - if(reagents.has_reagent("pacid")) - message_admins("[key_name_admin(user)] fired Polyacid from \a [src].") - log_game("[key_name(user)] fired Polyacid from \a [src].") - if(reagents.has_reagent("lube")) - message_admins("[key_name_admin(user)] fired Space lube from \a [src].") - log_game("[key_name(user)] fired Space lube from \a [src].") - return - -/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity) - playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) - if (A.density && proximity) - A.visible_message("[usr] sprays [A] with [src].") - reagents.splash(A, amount_per_transfer_from_this) - else - spawn(0) - var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) - var/turf/my_target = get_turf(A) - D.create_reagents(amount_per_transfer_from_this) - if(!src) - return - reagents.trans_to_obj(D, amount_per_transfer_from_this) - D.set_color() - D.set_up(my_target, spray_size, 10) - return - -/obj/item/weapon/reagent_containers/spray/attack_self(var/mob/user) - if(!possible_transfer_amounts) - return - amount_per_transfer_from_this = next_in_list(amount_per_transfer_from_this, possible_transfer_amounts) - spray_size = next_in_list(spray_size, spray_sizes) - to_chat(user, "You adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") - -/obj/item/weapon/reagent_containers/spray/examine(mob/user) - . = ..() - if(loc == user) - . += "[round(reagents.total_volume)] units left." - -/obj/item/weapon/reagent_containers/spray/verb/empty() - - set name = "Empty Spray Bottle" - set category = "Object" - set src in usr - - if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes") - return - if(isturf(usr.loc)) - to_chat(usr, "You empty \the [src] onto the floor.") - reagents.splash(usr.loc, reagents.total_volume) - -//space cleaner -/obj/item/weapon/reagent_containers/spray/cleaner - name = "space cleaner" - desc = "BLAM!-brand non-foaming space cleaner!" - -/obj/item/weapon/reagent_containers/spray/cleaner/drone - name = "space cleaner" - desc = "BLAM!-brand non-foaming space cleaner!" - volume = 50 - -/obj/item/weapon/reagent_containers/spray/cleaner/Initialize() - . = ..() - reagents.add_reagent("cleaner", volume) - -/obj/item/weapon/reagent_containers/spray/sterilizine - name = "sterilizine" - desc = "Great for hiding incriminating bloodstains and sterilizing scalpels." - -/obj/item/weapon/reagent_containers/spray/sterilizine/Initialize() - . = ..() - reagents.add_reagent("sterilizine", volume) - -/obj/item/weapon/reagent_containers/spray/pepper - name = "pepperspray" - desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." - icon = 'icons/obj/weapons.dmi' - icon_state = "pepperspray" - item_state = "pepperspray" - center_of_mass = list("x" = 16,"y" = 16) - possible_transfer_amounts = null - volume = 40 - var/safety = TRUE - -/obj/item/weapon/reagent_containers/spray/pepper/Initialize() - . = ..() - reagents.add_reagent("condensedcapsaicin", 40) - -/obj/item/weapon/reagent_containers/spray/pepper/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "The safety is [safety ? "on" : "off"]." - -/obj/item/weapon/reagent_containers/spray/pepper/attack_self(var/mob/user) - safety = !safety - to_chat(usr, "You switch the safety [safety ? "on" : "off"].") - -/obj/item/weapon/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj) - if(safety) - to_chat(usr, "The safety is on!") - return - . = ..() - -/obj/item/weapon/reagent_containers/spray/waterflower - name = "water flower" - desc = "A seemingly innocent sunflower...with a twist." - icon = 'icons/obj/device.dmi' - icon_state = "sunflower" - item_state = "sunflower" - amount_per_transfer_from_this = 1 - possible_transfer_amounts = null - volume = 10 - drop_sound = 'sound/items/drop/herb.ogg' - pickup_sound = 'sound/items/pickup/herb.ogg' - -/obj/item/weapon/reagent_containers/spray/waterflower/Initialize() - . = ..() - reagents.add_reagent("water", 10) - -/obj/item/weapon/reagent_containers/spray/chemsprayer - name = "chem sprayer" - desc = "A utility used to spray large amounts of reagent in a given area." - icon = 'icons/obj/gun.dmi' - icon_state = "chemsprayer" - item_state = "chemsprayer" - item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi') - center_of_mass = list("x" = 16,"y" = 16) - throwforce = 3 - w_class = ITEMSIZE_NORMAL - possible_transfer_amounts = null - volume = 600 - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - -/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj) - playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6) - var/direction = get_dir(src, A) - var/turf/T = get_turf(A) - 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) - - for(var/a = 1 to 3) - spawn(0) - if(reagents.total_volume < 1) break - var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) - var/turf/my_target = the_targets[a] - D.create_reagents(amount_per_transfer_from_this) - if(!src) - return - reagents.trans_to_obj(D, amount_per_transfer_from_this) - D.set_color() - D.set_up(my_target, rand(6, 8), 2) - return - -/obj/item/weapon/reagent_containers/spray/plantbgone - name = "Plant-B-Gone" - desc = "Kills those pesky weeds!" - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "plantbgone" - item_state = "plantbgone" - volume = 100 - -/obj/item/weapon/reagent_containers/spray/plantbgone/Initialize() - . = ..() - reagents.add_reagent("plantbgone", 100) - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed - name = "hose nozzle" - desc = "A heavy spray nozzle that must be attached to a hose." - icon = 'icons/obj/janitor.dmi' - icon_state = "cleaner-industrial" - item_state = "cleaner" - center_of_mass = list("x" = 16,"y" = 10) - - possible_transfer_amounts = list(5,10,20) - - var/heavy_spray = FALSE - var/spray_particles = 3 - - var/icon/hose_overlay - - var/obj/item/hose_connector/input/active/InputSocket - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Initialize() - . = ..() - - InputSocket = new(src) - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/update_icon() - ..() - - cut_overlays() - - if(!hose_overlay) - hose_overlay = new icon(icon, "[icon_state]+hose") - - if(InputSocket.get_pairing()) - add_overlay(hose_overlay) - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user) - if(++spray_particles > 3) spray_particles = 1 - - to_chat(user, "You turn the dial on \the [src] to [spray_particles].") - return - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user) - if(loc != get_turf(src)) - heavy_spray = !heavy_spray - else - . = ..() - -/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj) - update_icon() - - var/direction = get_dir(src, A) - var/turf/T = get_turf(A) - 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) - - if(src.reagents.total_volume < 1) - to_chat(usr, "\The [src] is empty.") - return - - if(!heavy_spray) - for(var/a = 1 to 3) - spawn(0) - if(reagents.total_volume < 1) break - playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) - var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) - var/turf/my_target = the_targets[a] - D.create_reagents(amount_per_transfer_from_this) - if(!src) - return - reagents.trans_to_obj(D, amount_per_transfer_from_this) - D.set_color() - D.set_up(my_target, rand(6, 8), 2) - return - - else - playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3) - - for(var/a = 1 to spray_particles) - spawn(0) - if(!src || !reagents.total_volume) return - - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) - var/turf/my_target - if(a <= the_targets.len) - my_target = the_targets[a] - else - my_target = pick(the_targets) - W.create_reagents(amount_per_transfer_from_this) - reagents.trans_to_obj(W, amount_per_transfer_from_this) - W.set_color() - W.set_up(my_target) - - return +/obj/item/weapon/reagent_containers/spray + name = "spray bottle" + desc = "A spray bottle, with an unscrewable top." + icon = 'icons/obj/janitor.dmi' + icon_state = "cleaner" + item_state = "cleaner" + center_of_mass = list("x" = 16,"y" = 10) + flags = OPENCONTAINER|NOBLUDGEON + matter = list(MAT_GLASS = 300, MAT_STEEL = 300) + slot_flags = SLOT_BELT + throwforce = 3 + w_class = ITEMSIZE_SMALL + throw_speed = 2 + throw_range = 10 + amount_per_transfer_from_this = 10 + unacidable = TRUE //plastic + possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one. + var/spray_size = 3 + var/list/spray_sizes = list(1,3) + volume = 250 + +/obj/item/weapon/reagent_containers/spray/Initialize() + . = ..() + src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT + +/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity) + if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart)) + return + + if(istype(A, /spell)) + return + + if(proximity) + if(standard_dispenser_refill(user, A)) + return + + if(reagents.total_volume < amount_per_transfer_from_this) + to_chat(user, "\The [src] is empty!") + return + + Spray_at(A, user, proximity) + + user.setClickCooldown(4) + + if(reagents.has_reagent("sacid")) + message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src].") + log_game("[key_name(user)] fired sulphuric acid from \a [src].") + if(reagents.has_reagent("pacid")) + message_admins("[key_name_admin(user)] fired Polyacid from \a [src].") + log_game("[key_name(user)] fired Polyacid from \a [src].") + if(reagents.has_reagent("lube")) + message_admins("[key_name_admin(user)] fired Space lube from \a [src].") + log_game("[key_name(user)] fired Space lube from \a [src].") + return + +/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity) + playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) + if (A.density && proximity) + A.visible_message("[usr] sprays [A] with [src].") + reagents.splash(A, amount_per_transfer_from_this) + else + spawn(0) + var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) + var/turf/my_target = get_turf(A) + D.create_reagents(amount_per_transfer_from_this) + if(!src) + return + reagents.trans_to_obj(D, amount_per_transfer_from_this) + D.set_color() + D.set_up(my_target, spray_size, 10) + return + +/obj/item/weapon/reagent_containers/spray/attack_self(var/mob/user) + if(!possible_transfer_amounts) + return + amount_per_transfer_from_this = next_in_list(amount_per_transfer_from_this, possible_transfer_amounts) + spray_size = next_in_list(spray_size, spray_sizes) + to_chat(user, "You adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") + +/obj/item/weapon/reagent_containers/spray/examine(mob/user) + . = ..() + if(loc == user) + . += "[round(reagents.total_volume)] units left." + +/obj/item/weapon/reagent_containers/spray/verb/empty() + + set name = "Empty Spray Bottle" + set category = "Object" + set src in usr + + if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes") + return + if(isturf(usr.loc)) + to_chat(usr, "You empty \the [src] onto the floor.") + reagents.splash(usr.loc, reagents.total_volume) + +//space cleaner +/obj/item/weapon/reagent_containers/spray/cleaner + name = "space cleaner" + desc = "BLAM!-brand non-foaming space cleaner!" + +/obj/item/weapon/reagent_containers/spray/cleaner/drone + name = "space cleaner" + desc = "BLAM!-brand non-foaming space cleaner!" + volume = 50 + +/obj/item/weapon/reagent_containers/spray/cleaner/Initialize() + . = ..() + reagents.add_reagent("cleaner", volume) + +/obj/item/weapon/reagent_containers/spray/sterilizine + name = "sterilizine" + desc = "Great for hiding incriminating bloodstains and sterilizing scalpels." + +/obj/item/weapon/reagent_containers/spray/sterilizine/Initialize() + . = ..() + reagents.add_reagent("sterilizine", volume) + +/obj/item/weapon/reagent_containers/spray/pepper + name = "pepperspray" + desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." + icon = 'icons/obj/weapons.dmi' + icon_state = "pepperspray" + item_state = "pepperspray" + center_of_mass = list("x" = 16,"y" = 16) + possible_transfer_amounts = null + volume = 40 + var/safety = TRUE + +/obj/item/weapon/reagent_containers/spray/pepper/Initialize() + . = ..() + reagents.add_reagent("condensedcapsaicin", 40) + +/obj/item/weapon/reagent_containers/spray/pepper/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "The safety is [safety ? "on" : "off"]." + +/obj/item/weapon/reagent_containers/spray/pepper/attack_self(var/mob/user) + safety = !safety + to_chat(usr, "You switch the safety [safety ? "on" : "off"].") + +/obj/item/weapon/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj) + if(safety) + to_chat(usr, "The safety is on!") + return + . = ..() + +/obj/item/weapon/reagent_containers/spray/waterflower + name = "water flower" + desc = "A seemingly innocent sunflower...with a twist." + icon = 'icons/obj/device.dmi' + icon_state = "sunflower" + item_state = "sunflower" + amount_per_transfer_from_this = 1 + possible_transfer_amounts = null + volume = 10 + drop_sound = 'sound/items/drop/herb.ogg' + pickup_sound = 'sound/items/pickup/herb.ogg' + +/obj/item/weapon/reagent_containers/spray/waterflower/Initialize() + . = ..() + reagents.add_reagent("water", 10) + +/obj/item/weapon/reagent_containers/spray/chemsprayer + name = "chem sprayer" + desc = "A utility used to spray large amounts of reagent in a given area." + icon = 'icons/obj/gun.dmi' + icon_state = "chemsprayer" + item_state = "chemsprayer" + item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi') + center_of_mass = list("x" = 16,"y" = 16) + throwforce = 3 + w_class = ITEMSIZE_NORMAL + possible_transfer_amounts = null + volume = 600 + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj) + playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6) + var/direction = get_dir(src, A) + var/turf/T = get_turf(A) + 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) + + for(var/a = 1 to 3) + spawn(0) + if(reagents.total_volume < 1) break + var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) + var/turf/my_target = the_targets[a] + D.create_reagents(amount_per_transfer_from_this) + if(!src) + return + reagents.trans_to_obj(D, amount_per_transfer_from_this) + D.set_color() + D.set_up(my_target, rand(6, 8), 2) + return + +/obj/item/weapon/reagent_containers/spray/plantbgone + name = "Plant-B-Gone" + desc = "Kills those pesky weeds!" + icon = 'icons/obj/hydroponics_machines.dmi' + icon_state = "plantbgone" + item_state = "plantbgone" + volume = 100 + +/obj/item/weapon/reagent_containers/spray/plantbgone/Initialize() + . = ..() + reagents.add_reagent("plantbgone", 100) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed + name = "hose nozzle" + desc = "A heavy spray nozzle that must be attached to a hose." + icon = 'icons/obj/janitor.dmi' + icon_state = "cleaner-industrial" + item_state = "cleaner" + center_of_mass = list("x" = 16,"y" = 10) + + possible_transfer_amounts = list(5,10,20) + + var/heavy_spray = FALSE + var/spray_particles = 3 + + var/icon/hose_overlay + + var/obj/item/hose_connector/input/active/InputSocket + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Initialize() + . = ..() + + InputSocket = new(src) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/update_icon() + ..() + + cut_overlays() + + if(!hose_overlay) + hose_overlay = new icon(icon, "[icon_state]+hose") + + if(InputSocket.get_pairing()) + add_overlay(hose_overlay) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user) + if(++spray_particles > 3) spray_particles = 1 + + to_chat(user, "You turn the dial on \the [src] to [spray_particles].") + return + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user) + if(loc != get_turf(src)) + heavy_spray = !heavy_spray + else + . = ..() + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj) + update_icon() + + var/direction = get_dir(src, A) + var/turf/T = get_turf(A) + 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) + + if(src.reagents.total_volume < 1) + to_chat(usr, "\The [src] is empty.") + return + + if(!heavy_spray) + for(var/a = 1 to 3) + spawn(0) + if(reagents.total_volume < 1) break + playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) + var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) + var/turf/my_target = the_targets[a] + D.create_reagents(amount_per_transfer_from_this) + if(!src) + return + reagents.trans_to_obj(D, amount_per_transfer_from_this) + D.set_color() + D.set_up(my_target, rand(6, 8), 2) + return + + else + playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3) + + for(var/a = 1 to spray_particles) + spawn(0) + if(!src || !reagents.total_volume) return + + var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) + var/turf/my_target + if(a <= the_targets.len) + my_target = the_targets[a] + else + my_target = pick(the_targets) + W.create_reagents(amount_per_transfer_from_this) + reagents.trans_to_obj(W, amount_per_transfer_from_this) + W.set_color() + W.set_up(my_target) + + return diff --git a/code/modules/reagents/reagent_containers/unidentified_hypospray.dm b/code/modules/reagents/reagent_containers/unidentified_hypospray.dm index cf57cb4b34..6391e690e6 100644 --- a/code/modules/reagents/reagent_containers/unidentified_hypospray.dm +++ b/code/modules/reagents/reagent_containers/unidentified_hypospray.dm @@ -1,108 +1,108 @@ -// Here are the paths for all hypos that start unidentified. -// Usually you want to use a random spawner instead of using them directly, unless you're spawning these live for adminbus purposes. - -/obj/item/weapon/reagent_containers/hypospray/autoinjector - identity_type = /datum/identification/hypo - -// The good. -/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified - init_hide_identity = TRUE - flags = 0 - -// The somewhat bad. -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified - init_hide_identity = TRUE - flags = 0 - -// The very bad. -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified - init_hide_identity = TRUE - flags = 0 - -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified - init_hide_identity = TRUE +// Here are the paths for all hypos that start unidentified. +// Usually you want to use a random spawner instead of using them directly, unless you're spawning these live for adminbus purposes. + +/obj/item/weapon/reagent_containers/hypospray/autoinjector + identity_type = /datum/identification/hypo + +// The good. +/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified + init_hide_identity = TRUE + flags = 0 + +// The somewhat bad. +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified + init_hide_identity = TRUE + flags = 0 + +// The very bad. +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified + init_hide_identity = TRUE + flags = 0 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified + init_hide_identity = TRUE flags = 0 \ No newline at end of file diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 24a0221a23..82b906a7e6 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -1,346 +1,346 @@ -#define OFF 0 -#define FORWARDS 1 -#define BACKWARDS -1 - -//conveyor2 is pretty much like the original, except it supports corners, but not diverters. -//note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards. - -/obj/machinery/conveyor - icon = 'icons/obj/recycling.dmi' - icon_state = "conveyor0" - name = "conveyor belt" - desc = "A conveyor belt." - plane = OBJ_PLANE //CHOMPEdit - layer = STAIRS_LAYER //CHOMPEdit - anchored = TRUE - active_power_usage = 100 - circuit = /obj/item/weapon/circuitboard/conveyor - var/operating = OFF // 1 if running forward, -1 if backwards, 0 if off - var/operable = 1 // true if can operate (no broken segments in this belt run) - var/forwards // this is the default (forward) direction, set by the map dir - var/backwards // hopefully self-explanatory - var/movedir // the actual direction to move stuff in - - var/list/affecting // the list of all items that will be moved this ptick - var/id = "" // the control ID - must match controller ID - -/obj/machinery/conveyor/centcom_auto - id = "round_end_belt" - - // create a conveyor -/obj/machinery/conveyor/Initialize(mapload, newdir, on = 0) - . = ..() - if(newdir) - set_dir(newdir) - - update_dir() - - if(on) - set_operating(FORWARDS) - - default_apply_parts() - -/obj/machinery/conveyor/proc/toggle_speed(var/forced) - if(forced) - speed_process = forced - else - speed_process = !speed_process // switching gears - if(speed_process) // high gear - update_active_power_usage(initial(idle_power_usage) * 4) - else // low gear - update_active_power_usage(initial(idle_power_usage)) - update() - -/obj/machinery/conveyor/proc/set_operating(var/new_operating) - if(new_operating == operating) - return // No change - operating = new_operating - if(operating == FORWARDS) - movedir = forwards - else if(operating == BACKWARDS) - movedir = backwards - else - operating = OFF - update() - -/obj/machinery/conveyor/set_dir() - .=..() - update_dir() - -/obj/machinery/conveyor/proc/update_dir() - if(!(dir in cardinal)) // Diagonal. Forwards is *away* from dir, curving to the right. - forwards = turn(dir, 45) - backwards = turn(dir, 135) - else - forwards = dir - backwards = turn(dir, 180) - -/obj/machinery/conveyor/proc/update() - if(stat & BROKEN) - icon_state = "conveyor-broken" - operating = OFF - update_use_power(USE_POWER_OFF) - return - if(!operable) - operating = OFF - if(stat & NOPOWER) - operating = OFF - icon_state = "conveyor[operating]" - - if(!operating) - update_use_power(USE_POWER_OFF) - return - if(speed_process) // high gear - STOP_MACHINE_PROCESSING(src) - START_PROCESSING(SSfastprocess, src) - update_use_power(USE_POWER_ACTIVE) - else // low gear - STOP_PROCESSING(SSfastprocess, src) - START_MACHINE_PROCESSING(src) - update_use_power(USE_POWER_ACTIVE) - - // machine process - // move items to the target location -/obj/machinery/conveyor/process() - if(stat & (BROKEN | NOPOWER)) - return PROCESS_KILL - if(!operating) - return PROCESS_KILL - - affecting = loc.contents - src // moved items will be all in loc - spawn(1) // slight delay to prevent infinite propagation due to map order //TODO: please no spawn() in process(). It's a very bad idea - var/items_moved = 0 - for(var/atom/movable/A in affecting) - if(istype(A,/obj/effect/abstract)) // Flashlight's lights are not physical objects - continue - if(!A.anchored) - if(A.loc == src.loc) // prevents the object from being affected if it's not currently here. - step(A,movedir) - items_moved++ - if(items_moved >= 10) - break - -// attack with item, place item on conveyor -/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user) - if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts - if(I.loc != user) return // This should stop mounted modules ending up outside the module. - - if(default_deconstruction_screwdriver(user, I)) - return - if(default_deconstruction_crowbar(user, I)) - return - - if(istype(I, /obj/item/device/multitool)) - if(panel_open) - var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) - if(!input) - to_chat(user, "No input found. Please hang up and try your call again.") - return - id = input - for(var/obj/machinery/conveyor_switch/C in machines) - if(C.id == id) - C.conveyors |= src - return - - user.drop_item(get_turf(src)) - return - -// attack with hand, move pulled object onto conveyor -/obj/machinery/conveyor/attack_hand(mob/user as mob) - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - else - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - return - - -// make the conveyor broken -// also propagate inoperability to any connected conveyor with the same ID -/obj/machinery/conveyor/proc/broken() - stat |= BROKEN - update() - - var/obj/machinery/conveyor/C = locate() in get_step(src, dir) - if(C) - C.set_operable(dir, id, 0) - - C = locate() in get_step(src, turn(dir,180)) - if(C) - C.set_operable(turn(dir,180), id, 0) - - -//set the operable var if ID matches, propagating in the given direction - -/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op) - - if(id != match_id) - return - operable = op - - update() - var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir) - if(C) - C.set_operable(stepdir, id, op) - -/obj/machinery/conveyor/power_change() - if((. = ..())) - update() - -// the conveyor control switch -// -// - -/obj/machinery/conveyor_switch - - name = "conveyor switch" - desc = "A conveyor control switch." - icon = 'icons/obj/recycling.dmi' - icon_state = "switch-off" - var/position = 0 // 0 off, -1 reverse, 1 forward - var/last_pos = -1 // last direction setting - var/operated = 1 // true if just operated - var/oneway = 0 // Voreadd: One way levels mid-round! - - var/id = "" // must match conveyor IDs to control them - - var/list/conveyors // the list of converyors that are controlled by this switch - anchored = TRUE - var/speed_active = FALSE // are the linked conveyors on SSfastprocess? - - - -/obj/machinery/conveyor_switch/Initialize() - ..() - update() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/conveyor_switch/LateInitialize() - conveyors = list() - for(var/obj/machinery/conveyor/C in machines) - if(C.id == id) - conveyors += C - -/obj/machinery/conveyor_switch/proc/toggle_speed(var/forced) - speed_active = !speed_active // switching gears - if(speed_active) // high gear - for(var/obj/machinery/conveyor/C in conveyors) - C.toggle_speed(TRUE) - else // low gear - for(var/obj/machinery/conveyor/C in conveyors) - C.toggle_speed(FALSE) - -// update the icon depending on the position - -/obj/machinery/conveyor_switch/proc/update() - if(position<0) - icon_state = "switch-rev" - else if(position>0) - icon_state = "switch-fwd" - else - icon_state = "switch-off" - - -// timed process -// if the switch changed, update the linked conveyors - -/obj/machinery/conveyor_switch/process() - if(!operated) - return - operated = 0 - - for(var/obj/machinery/conveyor/C in conveyors) - C.set_operating(position) - -// attack with hand, switch position -/obj/machinery/conveyor_switch/attack_hand(mob/user) - if(!allowed(user)) - to_chat(user, "Access denied.") - return - - if(position == 0) - if(last_pos < 0 || oneway == 1) - position = 1 - last_pos = 0 - else - position = -1 - last_pos = 0 - else - last_pos = position - position = 0 - - operated = 1 - update() - - // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in machines) - if(S.id == src.id) - S.position = position - S.update() - -/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user) - if(default_deconstruction_screwdriver(user, I)) - return - - if(!panel_open) //It's probably better to just check this once instead of each time - return - - if(I.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = I.get_welder() - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") - return - playsound(src, WT.usesound, 50, 1) - if(do_after(user, 20 * WT.toolspeed)) - if(!src || !WT.isOn()) return - to_chat(user, "You deconstruct the frame.") - new /obj/item/stack/material/steel( src.loc, 2 ) - qdel(src) - return - - if(I.has_tool_quality(TOOL_MULTITOOL)) - var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) - if(!input) - to_chat(user, "No input found. Please hang up and try your call again.") - return - id = input - conveyors = list() // Clear list so they aren't double added. - for(var/obj/machinery/conveyor/C in machines) - if(C.id == id) - conveyors += C - return - - if(I.has_tool_quality(TOOL_WRENCH)) - if(oneway == 1) - to_chat(user, "You set the switch to two way operation.") - oneway = 0 - playsound(src, I.usesound, 50, 1) - return - else - to_chat(user, "You set the switch to one way operation.") - oneway = 1 - playsound(src, I.usesound, 50, 1) - return - - //Ports making conveyors fast from CHOMPstation - if(I.has_tool_quality(TOOL_WIRECUTTER)) - toggle_speed() - to_chat(user, "You adjust the speed of the conveyor switch") - return - -/obj/machinery/conveyor_switch/oneway - oneway = 1 - -/obj/machinery/conveyor_switch/examine() - .=..() - if(oneway == 1) - . += " It appears to only go in one direction." +#define OFF 0 +#define FORWARDS 1 +#define BACKWARDS -1 + +//conveyor2 is pretty much like the original, except it supports corners, but not diverters. +//note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards. + +/obj/machinery/conveyor + icon = 'icons/obj/recycling.dmi' + icon_state = "conveyor0" + name = "conveyor belt" + desc = "A conveyor belt." + plane = OBJ_PLANE //CHOMPEdit + layer = STAIRS_LAYER //CHOMPEdit + anchored = TRUE + active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/conveyor + var/operating = OFF // 1 if running forward, -1 if backwards, 0 if off + var/operable = 1 // true if can operate (no broken segments in this belt run) + var/forwards // this is the default (forward) direction, set by the map dir + var/backwards // hopefully self-explanatory + var/movedir // the actual direction to move stuff in + + var/list/affecting // the list of all items that will be moved this ptick + var/id = "" // the control ID - must match controller ID + +/obj/machinery/conveyor/centcom_auto + id = "round_end_belt" + + // create a conveyor +/obj/machinery/conveyor/Initialize(mapload, newdir, on = 0) + . = ..() + if(newdir) + set_dir(newdir) + + update_dir() + + if(on) + set_operating(FORWARDS) + + default_apply_parts() + +/obj/machinery/conveyor/proc/toggle_speed(var/forced) + if(forced) + speed_process = forced + else + speed_process = !speed_process // switching gears + if(speed_process) // high gear + update_active_power_usage(initial(idle_power_usage) * 4) + else // low gear + update_active_power_usage(initial(idle_power_usage)) + update() + +/obj/machinery/conveyor/proc/set_operating(var/new_operating) + if(new_operating == operating) + return // No change + operating = new_operating + if(operating == FORWARDS) + movedir = forwards + else if(operating == BACKWARDS) + movedir = backwards + else + operating = OFF + update() + +/obj/machinery/conveyor/set_dir() + .=..() + update_dir() + +/obj/machinery/conveyor/proc/update_dir() + if(!(dir in cardinal)) // Diagonal. Forwards is *away* from dir, curving to the right. + forwards = turn(dir, 45) + backwards = turn(dir, 135) + else + forwards = dir + backwards = turn(dir, 180) + +/obj/machinery/conveyor/proc/update() + if(stat & BROKEN) + icon_state = "conveyor-broken" + operating = OFF + update_use_power(USE_POWER_OFF) + return + if(!operable) + operating = OFF + if(stat & NOPOWER) + operating = OFF + icon_state = "conveyor[operating]" + + if(!operating) + update_use_power(USE_POWER_OFF) + return + if(speed_process) // high gear + STOP_MACHINE_PROCESSING(src) + START_PROCESSING(SSfastprocess, src) + update_use_power(USE_POWER_ACTIVE) + else // low gear + STOP_PROCESSING(SSfastprocess, src) + START_MACHINE_PROCESSING(src) + update_use_power(USE_POWER_ACTIVE) + + // machine process + // move items to the target location +/obj/machinery/conveyor/process() + if(stat & (BROKEN | NOPOWER)) + return PROCESS_KILL + if(!operating) + return PROCESS_KILL + + affecting = loc.contents - src // moved items will be all in loc + spawn(1) // slight delay to prevent infinite propagation due to map order //TODO: please no spawn() in process(). It's a very bad idea + var/items_moved = 0 + for(var/atom/movable/A in affecting) + if(istype(A,/obj/effect/abstract)) // Flashlight's lights are not physical objects + continue + if(!A.anchored) + if(A.loc == src.loc) // prevents the object from being affected if it's not currently here. + step(A,movedir) + items_moved++ + if(items_moved >= 10) + break + +// attack with item, place item on conveyor +/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user) + if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts + if(I.loc != user) return // This should stop mounted modules ending up outside the module. + + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) + if(!input) + to_chat(user, "No input found. Please hang up and try your call again.") + return + id = input + for(var/obj/machinery/conveyor_switch/C in machines) + if(C.id == id) + C.conveyors |= src + return + + user.drop_item(get_turf(src)) + return + +// attack with hand, move pulled object onto conveyor +/obj/machinery/conveyor/attack_hand(mob/user as mob) + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + M.stop_pulling() + step(user.pulling, get_dir(user.pulling.loc, src)) + user.stop_pulling() + else + step(user.pulling, get_dir(user.pulling.loc, src)) + user.stop_pulling() + return + + +// make the conveyor broken +// also propagate inoperability to any connected conveyor with the same ID +/obj/machinery/conveyor/proc/broken() + stat |= BROKEN + update() + + var/obj/machinery/conveyor/C = locate() in get_step(src, dir) + if(C) + C.set_operable(dir, id, 0) + + C = locate() in get_step(src, turn(dir,180)) + if(C) + C.set_operable(turn(dir,180), id, 0) + + +//set the operable var if ID matches, propagating in the given direction + +/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op) + + if(id != match_id) + return + operable = op + + update() + var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir) + if(C) + C.set_operable(stepdir, id, op) + +/obj/machinery/conveyor/power_change() + if((. = ..())) + update() + +// the conveyor control switch +// +// + +/obj/machinery/conveyor_switch + + name = "conveyor switch" + desc = "A conveyor control switch." + icon = 'icons/obj/recycling.dmi' + icon_state = "switch-off" + var/position = 0 // 0 off, -1 reverse, 1 forward + var/last_pos = -1 // last direction setting + var/operated = 1 // true if just operated + var/oneway = 0 // Voreadd: One way levels mid-round! + + var/id = "" // must match conveyor IDs to control them + + var/list/conveyors // the list of converyors that are controlled by this switch + anchored = TRUE + var/speed_active = FALSE // are the linked conveyors on SSfastprocess? + + + +/obj/machinery/conveyor_switch/Initialize() + ..() + update() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/conveyor_switch/LateInitialize() + conveyors = list() + for(var/obj/machinery/conveyor/C in machines) + if(C.id == id) + conveyors += C + +/obj/machinery/conveyor_switch/proc/toggle_speed(var/forced) + speed_active = !speed_active // switching gears + if(speed_active) // high gear + for(var/obj/machinery/conveyor/C in conveyors) + C.toggle_speed(TRUE) + else // low gear + for(var/obj/machinery/conveyor/C in conveyors) + C.toggle_speed(FALSE) + +// update the icon depending on the position + +/obj/machinery/conveyor_switch/proc/update() + if(position<0) + icon_state = "switch-rev" + else if(position>0) + icon_state = "switch-fwd" + else + icon_state = "switch-off" + + +// timed process +// if the switch changed, update the linked conveyors + +/obj/machinery/conveyor_switch/process() + if(!operated) + return + operated = 0 + + for(var/obj/machinery/conveyor/C in conveyors) + C.set_operating(position) + +// attack with hand, switch position +/obj/machinery/conveyor_switch/attack_hand(mob/user) + if(!allowed(user)) + to_chat(user, "Access denied.") + return + + if(position == 0) + if(last_pos < 0 || oneway == 1) + position = 1 + last_pos = 0 + else + position = -1 + last_pos = 0 + else + last_pos = position + position = 0 + + operated = 1 + update() + + // find any switches with same id as this one, and set their positions to match us + for(var/obj/machinery/conveyor_switch/S in machines) + if(S.id == src.id) + S.position = position + S.update() + +/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + + if(!panel_open) //It's probably better to just check this once instead of each time + return + + if(I.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = I.get_welder() + if(!WT.remove_fuel(0, user)) + to_chat(user, "The welding tool must be on to complete this task.") + return + playsound(src, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed)) + if(!src || !WT.isOn()) return + to_chat(user, "You deconstruct the frame.") + new /obj/item/stack/material/steel( src.loc, 2 ) + qdel(src) + return + + if(I.has_tool_quality(TOOL_MULTITOOL)) + var/input = sanitize(tgui_input_text(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) + if(!input) + to_chat(user, "No input found. Please hang up and try your call again.") + return + id = input + conveyors = list() // Clear list so they aren't double added. + for(var/obj/machinery/conveyor/C in machines) + if(C.id == id) + conveyors += C + return + + if(I.has_tool_quality(TOOL_WRENCH)) + if(oneway == 1) + to_chat(user, "You set the switch to two way operation.") + oneway = 0 + playsound(src, I.usesound, 50, 1) + return + else + to_chat(user, "You set the switch to one way operation.") + oneway = 1 + playsound(src, I.usesound, 50, 1) + return + + //Ports making conveyors fast from CHOMPstation + if(I.has_tool_quality(TOOL_WIRECUTTER)) + toggle_speed() + to_chat(user, "You adjust the speed of the conveyor switch") + return + +/obj/machinery/conveyor_switch/oneway + oneway = 1 + +/obj/machinery/conveyor_switch/examine() + .=..() + if(oneway == 1) + . += " It appears to only go in one direction." diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index f3ff511d4d..67b5c15e33 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -1,366 +1,366 @@ -// Disposal pipe construction -// This is the pipe that you drag around, not the attached ones. - -/obj/structure/disposalconstruct - - name = "disposal pipe segment" - desc = "A huge pipe segment used for constructing disposal systems." - icon = 'icons/obj/pipes/disposal.dmi' - icon_state = "conpipe-s" - anchored = FALSE - density = FALSE - pressure_resistance = 5*ONE_ATMOSPHERE - matter = list(MAT_STEEL = 1850) - level = 2 - var/sortType = "" - var/ptype = 0 - var/subtype = 0 - var/dpdir = 0 // directions as disposalpipe - var/base_state = "pipe-s" - -/obj/structure/disposalconstruct/New(var/newturf, var/newtype, var/newdir, var/flipped, var/newsubtype) - ..(newturf) - ptype = newtype - dir = newdir - // Disposals handle "bent"/"corner" strangely, handle this specially. - if(ptype == DISPOSAL_PIPE_STRAIGHT && (dir in cornerdirs)) - ptype = DISPOSAL_PIPE_CORNER - switch(dir) - if(NORTHWEST) - dir = WEST - if(NORTHEAST) - dir = NORTH - if(SOUTHWEST) - dir = SOUTH - if(SOUTHEAST) - dir = EAST - - switch(ptype) - if(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE) - density = TRUE - if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED) - subtype = newsubtype - - if(flipped) - do_a_flip() - else - update() // do_a_flip() calls update anyway, so, lazy way of catching unupdated pipe! - -// update iconstate and dpdir due to dir and type -/obj/structure/disposalconstruct/proc/update() - var/flip = turn(dir, 180) - var/left = turn(dir, 90) - var/right = turn(dir, -90) - - switch(ptype) - if(DISPOSAL_PIPE_STRAIGHT) - base_state = "pipe-s" - dpdir = dir | flip - if(DISPOSAL_PIPE_CORNER) - base_state = "pipe-c" - dpdir = dir | right - if(DISPOSAL_PIPE_JUNCTION) - base_state = "pipe-j1" - dpdir = dir | right | flip - if(DISPOSAL_PIPE_JUNCTION_FLIPPED) - base_state = "pipe-j2" - dpdir = dir | left | flip - if(DISPOSAL_PIPE_JUNCTION_Y) - base_state = "pipe-y" - dpdir = dir | left | right - if(DISPOSAL_PIPE_TRUNK) - base_state = "pipe-t" - dpdir = dir - // disposal bin has only one dir, thus we don't need to care about setting it - if(DISPOSAL_PIPE_BIN) - if(anchored) - base_state = "disposal" - else - base_state = "condisposal" - if(DISPOSAL_PIPE_OUTLET) - base_state = "outlet" - dpdir = dir - if(DISPOSAL_PIPE_CHUTE) - base_state = "intake" - dpdir = dir - if(DISPOSAL_PIPE_SORTER) - base_state = "pipe-j1s" - dpdir = dir | right | flip - if(DISPOSAL_PIPE_SORTER_FLIPPED) - base_state = "pipe-j2s" - dpdir = dir | left | flip - if(DISPOSAL_PIPE_UPWARD) - base_state = "pipe-u" - dpdir = dir - if(DISPOSAL_PIPE_DOWNWARD) - base_state = "pipe-d" - dpdir = dir - if(DISPOSAL_PIPE_TAGGER) - base_state = "pipe-tagger" - dpdir = dir | flip - if(DISPOSAL_PIPE_TAGGER_PARTIAL) - base_state = "pipe-tagger-partial" - dpdir = dir | flip - - if(!(ptype in list(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE, DISPOSAL_PIPE_UPWARD, DISPOSAL_PIPE_DOWNWARD, DISPOSAL_PIPE_TAGGER, DISPOSAL_PIPE_TAGGER_PARTIAL))) - icon_state = "con[base_state]" - else - icon_state = base_state - - if(invisibility) // if invisible, fade icon - alpha = 128 - else - alpha = 255 - //otherwise burying half-finished pipes under floors causes them to half-fade - -// hide called by levelupdate if turf intact status changes -// change visibility status and force update of icon -/obj/structure/disposalconstruct/hide(var/intact) - invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact - update() - - -// flip and rotate verbs -/obj/structure/disposalconstruct/verb/rotate_clockwise() - set category = "Object" - set name = "Rotate Pipe Clockwise" - set src in view(1) - - if(usr.stat) - return - - if(anchored) - to_chat(usr, "You must unfasten the pipe before rotating it.") - return - - src.set_dir(turn(src.dir, 270)) - update() - -/obj/structure/disposalconstruct/verb/flip() - set category = "Object" - set name = "Flip Pipe" - set src in view(1) - if(usr.stat) - return - - if(anchored) - to_chat(usr, "You must unfasten the pipe before flipping it.") - return - - do_a_flip() - -/obj/structure/disposalconstruct/proc/do_a_flip() - switch(ptype) - if(DISPOSAL_PIPE_JUNCTION) - ptype = DISPOSAL_PIPE_JUNCTION_FLIPPED - if(DISPOSAL_PIPE_JUNCTION_FLIPPED) - ptype = DISPOSAL_PIPE_JUNCTION - if(DISPOSAL_PIPE_SORTER) - ptype = DISPOSAL_PIPE_SORTER_FLIPPED - if(DISPOSAL_PIPE_SORTER_FLIPPED) - ptype = DISPOSAL_PIPE_SORTER - - update() - -// returns the type path of disposalpipe corresponding to this item dtype -/obj/structure/disposalconstruct/proc/dpipetype() - switch(ptype) - if(DISPOSAL_PIPE_STRAIGHT,DISPOSAL_PIPE_CORNER) - return /obj/structure/disposalpipe/segment - if(DISPOSAL_PIPE_JUNCTION,DISPOSAL_PIPE_JUNCTION_FLIPPED,DISPOSAL_PIPE_JUNCTION_Y) - return /obj/structure/disposalpipe/junction - if(DISPOSAL_PIPE_TRUNK) - return /obj/structure/disposalpipe/trunk - if(DISPOSAL_PIPE_BIN) - return /obj/machinery/disposal - if(DISPOSAL_PIPE_OUTLET) - return /obj/structure/disposaloutlet - if(DISPOSAL_PIPE_CHUTE) - return /obj/machinery/disposal/deliveryChute - if(DISPOSAL_PIPE_SORTER) - switch(subtype) - if(DISPOSAL_SORT_NORMAL) - return /obj/structure/disposalpipe/sortjunction - if(DISPOSAL_SORT_WILDCARD) - return /obj/structure/disposalpipe/sortjunction/wildcard - if(DISPOSAL_SORT_UNTAGGED) - return /obj/structure/disposalpipe/sortjunction/untagged - if(DISPOSAL_PIPE_SORTER_FLIPPED) - switch(subtype) - if(DISPOSAL_SORT_NORMAL) - return /obj/structure/disposalpipe/sortjunction/flipped - if(DISPOSAL_SORT_WILDCARD) - return /obj/structure/disposalpipe/sortjunction/wildcard/flipped - if(DISPOSAL_SORT_UNTAGGED) - return /obj/structure/disposalpipe/sortjunction/untagged/flipped - if(DISPOSAL_PIPE_UPWARD) - return /obj/structure/disposalpipe/up - if(DISPOSAL_PIPE_DOWNWARD) - return /obj/structure/disposalpipe/down - if(DISPOSAL_PIPE_TAGGER) - return /obj/structure/disposalpipe/tagger - if(DISPOSAL_PIPE_TAGGER_PARTIAL) - return /obj/structure/disposalpipe/tagger/partial - return - - - -// attackby item -// wrench: (un)anchor -// weldingtool: convert to real pipe -/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user) - var/nicetype = "pipe" - var/ispipe = 0 // Indicates if we should change the level of this pipe - src.add_fingerprint(user) - switch(ptype) - if(DISPOSAL_PIPE_BIN) - nicetype = "disposal bin" - if(DISPOSAL_PIPE_OUTLET) - nicetype = "disposal outlet" - if(DISPOSAL_PIPE_CHUTE) - nicetype = "delivery chute" - if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED) - switch(subtype) - if(DISPOSAL_SORT_NORMAL) - nicetype = "sorting pipe" - if(DISPOSAL_SORT_WILDCARD) - nicetype = "wildcard sorting pipe" - if(DISPOSAL_SORT_UNTAGGED) - nicetype = "untagged sorting pipe" - ispipe = 1 - if(DISPOSAL_PIPE_TAGGER) - nicetype = "tagging pipe" - ispipe = 1 - if(DISPOSAL_PIPE_TAGGER_PARTIAL) - nicetype = "partial tagging pipe" - ispipe = 1 - else - nicetype = "pipe" - ispipe = 1 - - var/turf/T = src.loc - if(!T.is_plating()) - to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.") - return - - var/obj/structure/disposalpipe/CP = locate() in T - - // wrench: (un)anchor - if(I.has_tool_quality(TOOL_WRENCH)) - if(anchored) - anchored = FALSE - if(ispipe) - level = 2 - density = FALSE - else - density = TRUE - to_chat(user, "You detach the [nicetype] from the underfloor.") - else - if(ptype == DISPOSAL_PIPE_BIN || ptype == DISPOSAL_PIPE_OUTLET || ptype == DISPOSAL_PIPE_CHUTE) // Disposal or outlet - if(CP) // There's something there - if(!istype(CP,/obj/structure/disposalpipe/trunk)) - to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") - return - else // Nothing under, fuck. - to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") - return - else - if(CP) - update() - var/pdir = CP.dpdir - if(istype(CP, /obj/structure/disposalpipe/broken)) - pdir = CP.dir - if(pdir & dpdir) - to_chat(user, "There is already a [nicetype] at that location.") - return - - anchored = TRUE - if(ispipe) - level = 1 // We don't want disposal bins to disappear under the floors - density = FALSE - else - density = TRUE // We don't want disposal bins or outlets to go density 0 - to_chat(user, "You attach the [nicetype] to the underfloor.") - playsound(src, I.usesound, 100, 1) - update() - - // weldingtool: convert to real pipe - else if(I.has_tool_quality(TOOL_WELDER)) - if(anchored) - var/obj/item/weapon/weldingtool/W = I.get_welder() - if(W.remove_fuel(0,user)) - playsound(src, W.usesound, 100, 1) - to_chat(user, "Welding the [nicetype] in place.") - if(do_after(user, 20 * W.toolspeed)) - if(!src || !W.isOn()) return - to_chat(user, "The [nicetype] has been welded in place!") - update() // TODO: Make this neat - if(ispipe) // Pipe - - var/pipetype = dpipetype() - var/obj/structure/disposalpipe/P = new pipetype(src.loc) - src.transfer_fingerprints_to(P) - P.base_icon_state = base_state - P.set_dir(dir) - P.dpdir = dpdir - P.update_icon() - - //Needs some special treatment ;) - if(ptype==DISPOSAL_PIPE_SORTER || ptype==DISPOSAL_PIPE_SORTER_FLIPPED) - var/obj/structure/disposalpipe/sortjunction/SortP = P - SortP.sortType = sortType - SortP.updatedir() - SortP.updatedesc() - SortP.updatename() - - else if(ptype==DISPOSAL_PIPE_BIN) - var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) - src.transfer_fingerprints_to(P) - P.mode = 0 // start with pump off - - else if(ptype==DISPOSAL_PIPE_OUTLET) - var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) - src.transfer_fingerprints_to(P) - P.set_dir(dir) - P.target = get_ranged_target_turf(src, dir, 10) //TODO: replace this with a proc parameter or other cleaner - var/obj/structure/disposalpipe/trunk/Trunk = CP - Trunk.linked = P - - else if(ptype==DISPOSAL_PIPE_CHUTE) - var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) - src.transfer_fingerprints_to(P) - P.set_dir(dir) - - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else - to_chat(user, "You need to attach it to the plating first!") - return - -/obj/structure/disposalconstruct/hides_under_flooring() - if(anchored) - return 1 - else - return 0 - -// VOREStation Add Start - Helper procs for RCD -/obj/structure/disposalconstruct/proc/is_pipe() - return (ptype != DISPOSAL_PIPE_BIN && ptype != DISPOSAL_PIPE_OUTLET && ptype != DISPOSAL_PIPE_CHUTE) - -//helper proc that makes sure you can place the construct (i.e no dense objects stacking) -/obj/structure/disposalconstruct/proc/can_place() - if(is_pipe()) - return TRUE - - for(var/obj/structure/disposalconstruct/DC in get_turf(src)) - if(DC == src) - continue - - if(!DC.is_pipe()) //there's already a chute/outlet/bin there - return FALSE - - return TRUE -// VOREStation Add End +// Disposal pipe construction +// This is the pipe that you drag around, not the attached ones. + +/obj/structure/disposalconstruct + + name = "disposal pipe segment" + desc = "A huge pipe segment used for constructing disposal systems." + icon = 'icons/obj/pipes/disposal.dmi' + icon_state = "conpipe-s" + anchored = FALSE + density = FALSE + pressure_resistance = 5*ONE_ATMOSPHERE + matter = list(MAT_STEEL = 1850) + level = 2 + var/sortType = "" + var/ptype = 0 + var/subtype = 0 + var/dpdir = 0 // directions as disposalpipe + var/base_state = "pipe-s" + +/obj/structure/disposalconstruct/New(var/newturf, var/newtype, var/newdir, var/flipped, var/newsubtype) + ..(newturf) + ptype = newtype + dir = newdir + // Disposals handle "bent"/"corner" strangely, handle this specially. + if(ptype == DISPOSAL_PIPE_STRAIGHT && (dir in cornerdirs)) + ptype = DISPOSAL_PIPE_CORNER + switch(dir) + if(NORTHWEST) + dir = WEST + if(NORTHEAST) + dir = NORTH + if(SOUTHWEST) + dir = SOUTH + if(SOUTHEAST) + dir = EAST + + switch(ptype) + if(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE) + density = TRUE + if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED) + subtype = newsubtype + + if(flipped) + do_a_flip() + else + update() // do_a_flip() calls update anyway, so, lazy way of catching unupdated pipe! + +// update iconstate and dpdir due to dir and type +/obj/structure/disposalconstruct/proc/update() + var/flip = turn(dir, 180) + var/left = turn(dir, 90) + var/right = turn(dir, -90) + + switch(ptype) + if(DISPOSAL_PIPE_STRAIGHT) + base_state = "pipe-s" + dpdir = dir | flip + if(DISPOSAL_PIPE_CORNER) + base_state = "pipe-c" + dpdir = dir | right + if(DISPOSAL_PIPE_JUNCTION) + base_state = "pipe-j1" + dpdir = dir | right | flip + if(DISPOSAL_PIPE_JUNCTION_FLIPPED) + base_state = "pipe-j2" + dpdir = dir | left | flip + if(DISPOSAL_PIPE_JUNCTION_Y) + base_state = "pipe-y" + dpdir = dir | left | right + if(DISPOSAL_PIPE_TRUNK) + base_state = "pipe-t" + dpdir = dir + // disposal bin has only one dir, thus we don't need to care about setting it + if(DISPOSAL_PIPE_BIN) + if(anchored) + base_state = "disposal" + else + base_state = "condisposal" + if(DISPOSAL_PIPE_OUTLET) + base_state = "outlet" + dpdir = dir + if(DISPOSAL_PIPE_CHUTE) + base_state = "intake" + dpdir = dir + if(DISPOSAL_PIPE_SORTER) + base_state = "pipe-j1s" + dpdir = dir | right | flip + if(DISPOSAL_PIPE_SORTER_FLIPPED) + base_state = "pipe-j2s" + dpdir = dir | left | flip + if(DISPOSAL_PIPE_UPWARD) + base_state = "pipe-u" + dpdir = dir + if(DISPOSAL_PIPE_DOWNWARD) + base_state = "pipe-d" + dpdir = dir + if(DISPOSAL_PIPE_TAGGER) + base_state = "pipe-tagger" + dpdir = dir | flip + if(DISPOSAL_PIPE_TAGGER_PARTIAL) + base_state = "pipe-tagger-partial" + dpdir = dir | flip + + if(!(ptype in list(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE, DISPOSAL_PIPE_UPWARD, DISPOSAL_PIPE_DOWNWARD, DISPOSAL_PIPE_TAGGER, DISPOSAL_PIPE_TAGGER_PARTIAL))) + icon_state = "con[base_state]" + else + icon_state = base_state + + if(invisibility) // if invisible, fade icon + alpha = 128 + else + alpha = 255 + //otherwise burying half-finished pipes under floors causes them to half-fade + +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalconstruct/hide(var/intact) + invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact + update() + + +// flip and rotate verbs +/obj/structure/disposalconstruct/verb/rotate_clockwise() + set category = "Object" + set name = "Rotate Pipe Clockwise" + set src in view(1) + + if(usr.stat) + return + + if(anchored) + to_chat(usr, "You must unfasten the pipe before rotating it.") + return + + src.set_dir(turn(src.dir, 270)) + update() + +/obj/structure/disposalconstruct/verb/flip() + set category = "Object" + set name = "Flip Pipe" + set src in view(1) + if(usr.stat) + return + + if(anchored) + to_chat(usr, "You must unfasten the pipe before flipping it.") + return + + do_a_flip() + +/obj/structure/disposalconstruct/proc/do_a_flip() + switch(ptype) + if(DISPOSAL_PIPE_JUNCTION) + ptype = DISPOSAL_PIPE_JUNCTION_FLIPPED + if(DISPOSAL_PIPE_JUNCTION_FLIPPED) + ptype = DISPOSAL_PIPE_JUNCTION + if(DISPOSAL_PIPE_SORTER) + ptype = DISPOSAL_PIPE_SORTER_FLIPPED + if(DISPOSAL_PIPE_SORTER_FLIPPED) + ptype = DISPOSAL_PIPE_SORTER + + update() + +// returns the type path of disposalpipe corresponding to this item dtype +/obj/structure/disposalconstruct/proc/dpipetype() + switch(ptype) + if(DISPOSAL_PIPE_STRAIGHT,DISPOSAL_PIPE_CORNER) + return /obj/structure/disposalpipe/segment + if(DISPOSAL_PIPE_JUNCTION,DISPOSAL_PIPE_JUNCTION_FLIPPED,DISPOSAL_PIPE_JUNCTION_Y) + return /obj/structure/disposalpipe/junction + if(DISPOSAL_PIPE_TRUNK) + return /obj/structure/disposalpipe/trunk + if(DISPOSAL_PIPE_BIN) + return /obj/machinery/disposal + if(DISPOSAL_PIPE_OUTLET) + return /obj/structure/disposaloutlet + if(DISPOSAL_PIPE_CHUTE) + return /obj/machinery/disposal/deliveryChute + if(DISPOSAL_PIPE_SORTER) + switch(subtype) + if(DISPOSAL_SORT_NORMAL) + return /obj/structure/disposalpipe/sortjunction + if(DISPOSAL_SORT_WILDCARD) + return /obj/structure/disposalpipe/sortjunction/wildcard + if(DISPOSAL_SORT_UNTAGGED) + return /obj/structure/disposalpipe/sortjunction/untagged + if(DISPOSAL_PIPE_SORTER_FLIPPED) + switch(subtype) + if(DISPOSAL_SORT_NORMAL) + return /obj/structure/disposalpipe/sortjunction/flipped + if(DISPOSAL_SORT_WILDCARD) + return /obj/structure/disposalpipe/sortjunction/wildcard/flipped + if(DISPOSAL_SORT_UNTAGGED) + return /obj/structure/disposalpipe/sortjunction/untagged/flipped + if(DISPOSAL_PIPE_UPWARD) + return /obj/structure/disposalpipe/up + if(DISPOSAL_PIPE_DOWNWARD) + return /obj/structure/disposalpipe/down + if(DISPOSAL_PIPE_TAGGER) + return /obj/structure/disposalpipe/tagger + if(DISPOSAL_PIPE_TAGGER_PARTIAL) + return /obj/structure/disposalpipe/tagger/partial + return + + + +// attackby item +// wrench: (un)anchor +// weldingtool: convert to real pipe +/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user) + var/nicetype = "pipe" + var/ispipe = 0 // Indicates if we should change the level of this pipe + src.add_fingerprint(user) + switch(ptype) + if(DISPOSAL_PIPE_BIN) + nicetype = "disposal bin" + if(DISPOSAL_PIPE_OUTLET) + nicetype = "disposal outlet" + if(DISPOSAL_PIPE_CHUTE) + nicetype = "delivery chute" + if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED) + switch(subtype) + if(DISPOSAL_SORT_NORMAL) + nicetype = "sorting pipe" + if(DISPOSAL_SORT_WILDCARD) + nicetype = "wildcard sorting pipe" + if(DISPOSAL_SORT_UNTAGGED) + nicetype = "untagged sorting pipe" + ispipe = 1 + if(DISPOSAL_PIPE_TAGGER) + nicetype = "tagging pipe" + ispipe = 1 + if(DISPOSAL_PIPE_TAGGER_PARTIAL) + nicetype = "partial tagging pipe" + ispipe = 1 + else + nicetype = "pipe" + ispipe = 1 + + var/turf/T = src.loc + if(!T.is_plating()) + to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.") + return + + var/obj/structure/disposalpipe/CP = locate() in T + + // wrench: (un)anchor + if(I.has_tool_quality(TOOL_WRENCH)) + if(anchored) + anchored = FALSE + if(ispipe) + level = 2 + density = FALSE + else + density = TRUE + to_chat(user, "You detach the [nicetype] from the underfloor.") + else + if(ptype == DISPOSAL_PIPE_BIN || ptype == DISPOSAL_PIPE_OUTLET || ptype == DISPOSAL_PIPE_CHUTE) // Disposal or outlet + if(CP) // There's something there + if(!istype(CP,/obj/structure/disposalpipe/trunk)) + to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") + return + else // Nothing under, fuck. + to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") + return + else + if(CP) + update() + var/pdir = CP.dpdir + if(istype(CP, /obj/structure/disposalpipe/broken)) + pdir = CP.dir + if(pdir & dpdir) + to_chat(user, "There is already a [nicetype] at that location.") + return + + anchored = TRUE + if(ispipe) + level = 1 // We don't want disposal bins to disappear under the floors + density = FALSE + else + density = TRUE // We don't want disposal bins or outlets to go density 0 + to_chat(user, "You attach the [nicetype] to the underfloor.") + playsound(src, I.usesound, 100, 1) + update() + + // weldingtool: convert to real pipe + else if(I.has_tool_quality(TOOL_WELDER)) + if(anchored) + var/obj/item/weapon/weldingtool/W = I.get_welder() + if(W.remove_fuel(0,user)) + playsound(src, W.usesound, 100, 1) + to_chat(user, "Welding the [nicetype] in place.") + if(do_after(user, 20 * W.toolspeed)) + if(!src || !W.isOn()) return + to_chat(user, "The [nicetype] has been welded in place!") + update() // TODO: Make this neat + if(ispipe) // Pipe + + var/pipetype = dpipetype() + var/obj/structure/disposalpipe/P = new pipetype(src.loc) + src.transfer_fingerprints_to(P) + P.base_icon_state = base_state + P.set_dir(dir) + P.dpdir = dpdir + P.update_icon() + + //Needs some special treatment ;) + if(ptype==DISPOSAL_PIPE_SORTER || ptype==DISPOSAL_PIPE_SORTER_FLIPPED) + var/obj/structure/disposalpipe/sortjunction/SortP = P + SortP.sortType = sortType + SortP.updatedir() + SortP.updatedesc() + SortP.updatename() + + else if(ptype==DISPOSAL_PIPE_BIN) + var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) + src.transfer_fingerprints_to(P) + P.mode = 0 // start with pump off + + else if(ptype==DISPOSAL_PIPE_OUTLET) + var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) + src.transfer_fingerprints_to(P) + P.set_dir(dir) + P.target = get_ranged_target_turf(src, dir, 10) //TODO: replace this with a proc parameter or other cleaner + var/obj/structure/disposalpipe/trunk/Trunk = CP + Trunk.linked = P + + else if(ptype==DISPOSAL_PIPE_CHUTE) + var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) + src.transfer_fingerprints_to(P) + P.set_dir(dir) + + qdel(src) + return + else + to_chat(user, "You need more welding fuel to complete this task.") + return + else + to_chat(user, "You need to attach it to the plating first!") + return + +/obj/structure/disposalconstruct/hides_under_flooring() + if(anchored) + return 1 + else + return 0 + +// VOREStation Add Start - Helper procs for RCD +/obj/structure/disposalconstruct/proc/is_pipe() + return (ptype != DISPOSAL_PIPE_BIN && ptype != DISPOSAL_PIPE_OUTLET && ptype != DISPOSAL_PIPE_CHUTE) + +//helper proc that makes sure you can place the construct (i.e no dense objects stacking) +/obj/structure/disposalconstruct/proc/can_place() + if(is_pipe()) + return TRUE + + for(var/obj/structure/disposalconstruct/DC in get_turf(src)) + if(DC == src) + continue + + if(!DC.is_pipe()) //there's already a chute/outlet/bin there + return FALSE + + return TRUE +// VOREStation Add End diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 2c370300da..6a74b9829c 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -1,217 +1,217 @@ -/*///////////////Circuit Imprinter (By Darem)//////////////////////// - Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in -a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of -using metal and glass, it uses glass and reagents (usually sulphuric acid). -*/ - -/obj/machinery/r_n_d/circuit_imprinter - name = "Circuit Imprinter" - icon_state = "circuit_imprinter" - flags = OPENCONTAINER - circuit = /obj/item/weapon/circuitboard/circuit_imprinter - var/list/datum/design/queue = list() - var/progress = 0 - - var/max_material_storage = 75000 - var/mat_efficiency = 1 - var/speed = 1 - - materials = list(MAT_STEEL = 0, MAT_GLASS = 0, MAT_PLASTEEL = 0, MAT_PLASTIC = 0, MAT_GRAPHITE = 0, MAT_GOLD = 0, MAT_SILVER = 0, MAT_OSMIUM = 0, MAT_LEAD = 0, MAT_PHORON = 0, MAT_URANIUM = 0, MAT_DIAMOND = 0, MAT_DURASTEEL = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0, MAT_METALHYDROGEN = 0, MAT_SUPERMATTER = 0) - - hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER) - - use_power = USE_POWER_IDLE - idle_power_usage = 30 - active_power_usage = 2500 - -/obj/machinery/r_n_d/circuit_imprinter/Initialize() - . = ..() - - spawn() // Go through all materials, and add them to the possible storage, but hide them unless we contain them. - for(var/Name in name_to_material) - if(Name in materials) - continue - - hidden_materials |= Name - - materials[Name] = 0 - - default_apply_parts() - -/obj/machinery/r_n_d/circuit_imprinter/process() - ..() - if(stat) - update_icon() - return - if(queue.len == 0) - busy = 0 - update_icon() - return - var/datum/design/D = queue[1] - if(canBuild(D)) - busy = 1 - progress += speed - if(progress >= D.time) - build(D) - progress = 0 - removeFromQueue(1) - if(linked_console) - linked_console.updateUsrDialog() - update_icon() - else - if(busy) - visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].") - busy = 0 - update_icon() - -/obj/machinery/r_n_d/circuit_imprinter/RefreshParts() - var/T = 0 - for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) - T += G.reagents.maximum_volume - create_reagents(T) - max_material_storage = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - max_material_storage += M.rating * 75000 - T = 0 - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - T += M.rating - mat_efficiency = max(1 - (T - 1) / 4, 0.2) - speed = T - -/obj/machinery/r_n_d/circuit_imprinter/update_icon() - if(panel_open) - icon_state = "circuit_imprinter_t" - else if(busy) - icon_state = "circuit_imprinter_ani" - else - icon_state = "circuit_imprinter" - -/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials() - var/t = 0 - for(var/f in materials) - t += materials[f] - return t - -/obj/machinery/r_n_d/circuit_imprinter/dismantle() - for(var/obj/I in component_parts) - if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) - reagents.trans_to_obj(I, reagents.total_volume) - for(var/f in materials) - if(materials[f] >= SHEET_MATERIAL_AMOUNT) - var/path = getMaterialType(f) - if(path) - new path(loc, round(materials[f] / SHEET_MATERIAL_AMOUNT)) - ..() - -/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return 1 - if(default_deconstruction_screwdriver(user, O)) - if(linked_console) - linked_console.linked_imprinter = null - linked_console = null - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - if(istype(O, /obj/item/weapon/gripper/no_use/loader)) - return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first.") - return 1 - if(O.is_open_container()) - return 0 - if(!istype(O, /obj/item/stack/material)) //Previously checked for specific material sheets, for some reason? Made the check on 133 redundant. - to_chat(user, "You cannot insert this item into \the [src].") - return 1 - if(stat) - return 1 - - if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) - to_chat(user, "\The [src]'s material bin is full. Please remove material before adding more.") - return 1 - - var/obj/item/stack/material/S = O - if(!(S.material.name in materials)) - to_chat(user, "The [src] doesn't accept [S.material]!") - return - - busy = 1 - var/sname = "[S.name]" - var/amnt = S.perunit - var/max_res_amount = max_material_storage - for(var/mat in materials) - max_res_amount -= materials[mat] - - if(materials[S.material.name] + amnt <= max_res_amount) - if(S && S.get_amount() >= 1) - var/count = 0 - add_overlay("fab-load-metal") - spawn(10) - cut_overlay("fab-load-metal") - while(materials[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1) - materials[S.material.name] += amnt - S.use(1) - count++ - to_chat(user, "You insert [count] [sname] into the fabricator.") - else - to_chat(user, "The fabricator cannot hold more [sname].") - busy = 0 - - updateUsrDialog() - return - -/obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D) - queue += D - return - -/obj/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(var/index) - queue.Cut(index, index + 1) - return - -/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D) - for(var/M in D.materials) - if(materials[M] < (D.materials[M] * mat_efficiency)) - return 0 - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) - return 0 - return 1 - -/obj/machinery/r_n_d/circuit_imprinter/proc/getLackingMaterials(var/datum/design/D) - var/ret = "" - for(var/M in D.materials) - if(materials[M] < D.materials[M]) - if(ret != "") - ret += ", " - ret += "[D.materials[M] - materials[M]] [M]" - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) - if(ret != "") - ret += ", " - ret += C - return ret - -/obj/machinery/r_n_d/circuit_imprinter/proc/build(var/datum/design/D) - var/power = active_power_usage - for(var/M in D.materials) - power += round(D.materials[M] / 5) - power = max(active_power_usage, power) - use_power(power) - for(var/M in D.materials) - materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) - for(var/C in D.chemicals) - reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) - - if(D.build_path) - var/obj/new_item = D.Fabricate(src, src) - new_item.loc = loc - if(mat_efficiency != 1) // No matter out of nowhere - if(new_item.matter && new_item.matter.len > 0) - for(var/i in new_item.matter) - new_item.matter[i] = new_item.matter[i] * mat_efficiency +/*///////////////Circuit Imprinter (By Darem)//////////////////////// + Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in +a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of +using metal and glass, it uses glass and reagents (usually sulphuric acid). +*/ + +/obj/machinery/r_n_d/circuit_imprinter + name = "Circuit Imprinter" + icon_state = "circuit_imprinter" + flags = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/circuit_imprinter + var/list/datum/design/queue = list() + var/progress = 0 + + var/max_material_storage = 75000 + var/mat_efficiency = 1 + var/speed = 1 + + materials = list(MAT_STEEL = 0, MAT_GLASS = 0, MAT_PLASTEEL = 0, MAT_PLASTIC = 0, MAT_GRAPHITE = 0, MAT_GOLD = 0, MAT_SILVER = 0, MAT_OSMIUM = 0, MAT_LEAD = 0, MAT_PHORON = 0, MAT_URANIUM = 0, MAT_DIAMOND = 0, MAT_DURASTEEL = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0, MAT_METALHYDROGEN = 0, MAT_SUPERMATTER = 0) + + hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER) + + use_power = USE_POWER_IDLE + idle_power_usage = 30 + active_power_usage = 2500 + +/obj/machinery/r_n_d/circuit_imprinter/Initialize() + . = ..() + + spawn() // Go through all materials, and add them to the possible storage, but hide them unless we contain them. + for(var/Name in name_to_material) + if(Name in materials) + continue + + hidden_materials |= Name + + materials[Name] = 0 + + default_apply_parts() + +/obj/machinery/r_n_d/circuit_imprinter/process() + ..() + if(stat) + update_icon() + return + if(queue.len == 0) + busy = 0 + update_icon() + return + var/datum/design/D = queue[1] + if(canBuild(D)) + busy = 1 + progress += speed + if(progress >= D.time) + build(D) + progress = 0 + removeFromQueue(1) + if(linked_console) + linked_console.updateUsrDialog() + update_icon() + else + if(busy) + visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].") + busy = 0 + update_icon() + +/obj/machinery/r_n_d/circuit_imprinter/RefreshParts() + var/T = 0 + for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) + T += G.reagents.maximum_volume + create_reagents(T) + max_material_storage = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + max_material_storage += M.rating * 75000 + T = 0 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + T += M.rating + mat_efficiency = max(1 - (T - 1) / 4, 0.2) + speed = T + +/obj/machinery/r_n_d/circuit_imprinter/update_icon() + if(panel_open) + icon_state = "circuit_imprinter_t" + else if(busy) + icon_state = "circuit_imprinter_ani" + else + icon_state = "circuit_imprinter" + +/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials() + var/t = 0 + for(var/f in materials) + t += materials[f] + return t + +/obj/machinery/r_n_d/circuit_imprinter/dismantle() + for(var/obj/I in component_parts) + if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) + reagents.trans_to_obj(I, reagents.total_volume) + for(var/f in materials) + if(materials[f] >= SHEET_MATERIAL_AMOUNT) + var/path = getMaterialType(f) + if(path) + new path(loc, round(materials[f] / SHEET_MATERIAL_AMOUNT)) + ..() + +/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(busy) + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") + return 1 + if(default_deconstruction_screwdriver(user, O)) + if(linked_console) + linked_console.linked_imprinter = null + linked_console = null + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + if(istype(O, /obj/item/weapon/gripper/no_use/loader)) + return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing + if(panel_open) + to_chat(user, "You can't load \the [src] while it's opened.") + return 1 + if(!linked_console) + to_chat(user, "\The [src] must be linked to an R&D console first.") + return 1 + if(O.is_open_container()) + return 0 + if(!istype(O, /obj/item/stack/material)) //Previously checked for specific material sheets, for some reason? Made the check on 133 redundant. + to_chat(user, "You cannot insert this item into \the [src].") + return 1 + if(stat) + return 1 + + if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) + to_chat(user, "\The [src]'s material bin is full. Please remove material before adding more.") + return 1 + + var/obj/item/stack/material/S = O + if(!(S.material.name in materials)) + to_chat(user, "The [src] doesn't accept [S.material]!") + return + + busy = 1 + var/sname = "[S.name]" + var/amnt = S.perunit + var/max_res_amount = max_material_storage + for(var/mat in materials) + max_res_amount -= materials[mat] + + if(materials[S.material.name] + amnt <= max_res_amount) + if(S && S.get_amount() >= 1) + var/count = 0 + add_overlay("fab-load-metal") + spawn(10) + cut_overlay("fab-load-metal") + while(materials[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1) + materials[S.material.name] += amnt + S.use(1) + count++ + to_chat(user, "You insert [count] [sname] into the fabricator.") + else + to_chat(user, "The fabricator cannot hold more [sname].") + busy = 0 + + updateUsrDialog() + return + +/obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D) + queue += D + return + +/obj/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(var/index) + queue.Cut(index, index + 1) + return + +/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D) + for(var/M in D.materials) + if(materials[M] < (D.materials[M] * mat_efficiency)) + return 0 + for(var/C in D.chemicals) + if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) + return 0 + return 1 + +/obj/machinery/r_n_d/circuit_imprinter/proc/getLackingMaterials(var/datum/design/D) + var/ret = "" + for(var/M in D.materials) + if(materials[M] < D.materials[M]) + if(ret != "") + ret += ", " + ret += "[D.materials[M] - materials[M]] [M]" + for(var/C in D.chemicals) + if(!reagents.has_reagent(C, D.chemicals[C])) + if(ret != "") + ret += ", " + ret += C + return ret + +/obj/machinery/r_n_d/circuit_imprinter/proc/build(var/datum/design/D) + var/power = active_power_usage + for(var/M in D.materials) + power += round(D.materials[M] / 5) + power = max(active_power_usage, power) + use_power(power) + for(var/M in D.materials) + materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) + for(var/C in D.chemicals) + reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) + + if(D.build_path) + var/obj/new_item = D.Fabricate(src, src) + new_item.loc = loc + if(mat_efficiency != 1) // No matter out of nowhere + if(new_item.matter && new_item.matter.len > 0) + for(var/i in new_item.matter) + new_item.matter[i] = new_item.matter[i] * mat_efficiency diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index b3756e59fe..f5fa40484b 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1,87 +1,87 @@ -/*************************************************************** -** Design Datums ** -** All the data for building stuff and tracking reliability. ** -***************************************************************/ -/* -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: - -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 Guidlines -- 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). - -*/ -//Note: More then one of these can be added to a design. - -/datum/design //Datum for object designs, used in construction - var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible. - var/desc = null //Description of the created object. If null it will use group_desc and name where applicable. - var/item_name = null //An item name before it is modified by various name-modifying procs - var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols. - var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. - 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/list/chemicals = list() //List of chemicals. - var/build_path = null //The path of the object that gets created. - var/time = 10 //How many ticks it requires to build - var/list/category = list() //Primarily used for Mech Fabricators, but can be used for anything. - var/sort_string = "ZZZZZ" //Sorting order - var/search_metadata // Optional string that interfaces can use as part of search filters. See- item/borg/upgrade/ai and the Exosuit Fabs. - -/datum/design/New() - ..() - if(!islist(category)) - log_runtime(EXCEPTION("Warning: Design [type] defined a non-list category. Please fix this.")) - category = list(category) - item_name = name - AssembleDesignInfo() - -//These procs are used in subtypes for assigning names and descriptions dynamically -/datum/design/proc/AssembleDesignInfo() - AssembleDesignName() - AssembleDesignDesc() - return - -/datum/design/proc/AssembleDesignName() - if(!name && build_path) //Get name from build path if posible - var/atom/movable/A = build_path - name = initial(A.name) - item_name = name - return - -/datum/design/proc/AssembleDesignDesc() - if(!desc) //Try to make up a nice description if we don't have one - desc = "Allows for the construction of \a [item_name]." - return - -//Returns a new instance of the item for this design -//This is to allow additional initialization to be performed, including possibly additional contructor arguments. -/datum/design/proc/Fabricate(var/newloc, var/fabricator) - return new build_path(newloc) - -/datum/design/item - build_type = PROTOLATHE - -//Make sure items don't get free power, or resources. Also make things be recycled with proper values. -/datum/design/item/Fabricate() - var/obj/item/I = ..() - - if(LAZYLEN(materials)) - if(!LAZYLEN(I.matter)) - I.matter = list() - else - I.matter.Cut() - - for(var/matname in materials) - I.matter[matname] = materials[matname] - - var/obj/item/weapon/cell/C = I.get_cell() - if(C) - C.charge = 0 - I.update_icon() +/*************************************************************** +** Design Datums ** +** All the data for building stuff and tracking reliability. ** +***************************************************************/ +/* +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: + +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 Guidlines +- 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). + +*/ +//Note: More then one of these can be added to a design. + +/datum/design //Datum for object designs, used in construction + var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible. + var/desc = null //Description of the created object. If null it will use group_desc and name where applicable. + var/item_name = null //An item name before it is modified by various name-modifying procs + var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols. + var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. + 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/list/chemicals = list() //List of chemicals. + var/build_path = null //The path of the object that gets created. + var/time = 10 //How many ticks it requires to build + var/list/category = list() //Primarily used for Mech Fabricators, but can be used for anything. + var/sort_string = "ZZZZZ" //Sorting order + var/search_metadata // Optional string that interfaces can use as part of search filters. See- item/borg/upgrade/ai and the Exosuit Fabs. + +/datum/design/New() + ..() + if(!islist(category)) + log_runtime(EXCEPTION("Warning: Design [type] defined a non-list category. Please fix this.")) + category = list(category) + item_name = name + AssembleDesignInfo() + +//These procs are used in subtypes for assigning names and descriptions dynamically +/datum/design/proc/AssembleDesignInfo() + AssembleDesignName() + AssembleDesignDesc() + return + +/datum/design/proc/AssembleDesignName() + if(!name && build_path) //Get name from build path if posible + var/atom/movable/A = build_path + name = initial(A.name) + item_name = name + return + +/datum/design/proc/AssembleDesignDesc() + if(!desc) //Try to make up a nice description if we don't have one + desc = "Allows for the construction of \a [item_name]." + return + +//Returns a new instance of the item for this design +//This is to allow additional initialization to be performed, including possibly additional contructor arguments. +/datum/design/proc/Fabricate(var/newloc, var/fabricator) + return new build_path(newloc) + +/datum/design/item + build_type = PROTOLATHE + +//Make sure items don't get free power, or resources. Also make things be recycled with proper values. +/datum/design/item/Fabricate() + var/obj/item/I = ..() + + if(LAZYLEN(materials)) + if(!LAZYLEN(I.matter)) + I.matter = list() + else + I.matter.Cut() + + for(var/matname in materials) + I.matter[matname] = materials[matname] + + var/obj/item/weapon/cell/C = I.get_cell() + if(C) + C.charge = 0 + I.update_icon() return I \ No newline at end of file diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 5bf3d94fff..6b5c6ee295 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -1,121 +1,121 @@ -/* -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/r_n_d/destructive_analyzer - name = "destructive analyzer" - icon_state = "d_analyzer" - var/obj/item/weapon/loaded_item = null - var/decon_mod = 0 - circuit = /obj/item/weapon/circuitboard/destructive_analyzer - use_power = USE_POWER_IDLE - idle_power_usage = 30 - active_power_usage = 2500 - var/rped_recycler_ready = TRUE - -/obj/machinery/r_n_d/destructive_analyzer/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/r_n_d/destructive_analyzer/RefreshParts() - var/T = 0 - for(var/obj/item/weapon/stock_parts/S in component_parts) - T += S.rating - T *= 0.1 - decon_mod = clamp(T, 0, 1) - -/obj/machinery/r_n_d/destructive_analyzer/update_icon() - if(panel_open) - icon_state = "d_analyzer_t" - else if(loaded_item) - icon_state = "d_analyzer_l" - else - icon_state = "d_analyzer" - -/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy right now.") - return - if(loaded_item) - to_chat(user, "There is something already loaded into \the [src].") - return 1 - if(default_deconstruction_screwdriver(user, O)) - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first.") - return - if(!loaded_item) - if(isrobot(user)) //Don't put your module items in there! - return - if(!O.origin_tech) - to_chat(user, "This doesn't seem to have a tech origin.") - return - if(O.origin_tech.len == 0) - to_chat(user, "You cannot deconstruct this item.") - return - busy = 1 - loaded_item = O - user.drop_item() - O.loc = src - to_chat(user, "You add \the [O] to \the [src].") - flick("d_analyzer_la", src) - spawn(10) - update_icon() - busy = 0 - return 1 - return - -/obj/machinery/r_n_d/destructive_analyzer/MouseDrop_T(atom/dropping, mob/living/user) - if(istype(dropping, /obj/item/weapon/storage/part_replacer)) - var/obj/item/weapon/storage/part_replacer/replacer = dropping - replacer.hide_from(user) - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first.") - return 0 - if(!linked_console.linked_lathe) - to_chat(user, "Link a protolathe to [src]'s R&D console first.") - return 0 - if(!rped_recycler_ready) - to_chat(user, "\The [src]'s stock parts recycler isn't ready yet.") - return 0 - var/obj/machinery/r_n_d/protolathe/lathe_to_fill = linked_console.linked_lathe - var/lowest_rating = INFINITY // We want the lowest-part tier rating in the RPED so we only recycle the lowest-tier parts. - for(var/obj/item/B in replacer.contents) - if(B.rped_rating() < lowest_rating) - lowest_rating = B.rped_rating() - if(lowest_rating == INFINITY) - to_chat(user, "Mass part deconstruction attempt canceled - no valid parts for recycling detected.") - return 0 - for(var/obj/item/B in replacer.contents) - if(B.rped_rating() > lowest_rating) - continue - if(lathe_to_fill && B.matter) // Sending salvaged materials to the lathe... - for(var/t in B.matter) - if(t in lathe_to_fill.materials) - lathe_to_fill.materials[t] += B.matter[t] * src.decon_mod - qdel(B) - playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) - rped_recycler_ready = FALSE - addtimer(CALLBACK(src, PROC_REF(rped_ready)), 5 SECONDS) - to_chat(user, "You deconstruct all the parts of rating [lowest_rating] in [replacer] with [src].") - return 1 - else - ..() - -/obj/machinery/r_n_d/destructive_analyzer/proc/rped_ready() - rped_recycler_ready = TRUE - playsound(get_turf(src), 'sound/machines/chime.ogg', 50, 1) +/* +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/r_n_d/destructive_analyzer + name = "destructive analyzer" + icon_state = "d_analyzer" + var/obj/item/weapon/loaded_item = null + var/decon_mod = 0 + circuit = /obj/item/weapon/circuitboard/destructive_analyzer + use_power = USE_POWER_IDLE + idle_power_usage = 30 + active_power_usage = 2500 + var/rped_recycler_ready = TRUE + +/obj/machinery/r_n_d/destructive_analyzer/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/r_n_d/destructive_analyzer/RefreshParts() + var/T = 0 + for(var/obj/item/weapon/stock_parts/S in component_parts) + T += S.rating + T *= 0.1 + decon_mod = clamp(T, 0, 1) + +/obj/machinery/r_n_d/destructive_analyzer/update_icon() + if(panel_open) + icon_state = "d_analyzer_t" + else if(loaded_item) + icon_state = "d_analyzer_l" + else + icon_state = "d_analyzer" + +/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(busy) + to_chat(user, "\The [src] is busy right now.") + return + if(loaded_item) + to_chat(user, "There is something already loaded into \the [src].") + return 1 + if(default_deconstruction_screwdriver(user, O)) + if(linked_console) + linked_console.linked_destroy = null + linked_console = null + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + if(panel_open) + to_chat(user, "You can't load \the [src] while it's opened.") + return 1 + if(!linked_console) + to_chat(user, "\The [src] must be linked to an R&D console first.") + return + if(!loaded_item) + if(isrobot(user)) //Don't put your module items in there! + return + if(!O.origin_tech) + to_chat(user, "This doesn't seem to have a tech origin.") + return + if(O.origin_tech.len == 0) + to_chat(user, "You cannot deconstruct this item.") + return + busy = 1 + loaded_item = O + user.drop_item() + O.loc = src + to_chat(user, "You add \the [O] to \the [src].") + flick("d_analyzer_la", src) + spawn(10) + update_icon() + busy = 0 + return 1 + return + +/obj/machinery/r_n_d/destructive_analyzer/MouseDrop_T(atom/dropping, mob/living/user) + if(istype(dropping, /obj/item/weapon/storage/part_replacer)) + var/obj/item/weapon/storage/part_replacer/replacer = dropping + replacer.hide_from(user) + if(!linked_console) + to_chat(user, "\The [src] must be linked to an R&D console first.") + return 0 + if(!linked_console.linked_lathe) + to_chat(user, "Link a protolathe to [src]'s R&D console first.") + return 0 + if(!rped_recycler_ready) + to_chat(user, "\The [src]'s stock parts recycler isn't ready yet.") + return 0 + var/obj/machinery/r_n_d/protolathe/lathe_to_fill = linked_console.linked_lathe + var/lowest_rating = INFINITY // We want the lowest-part tier rating in the RPED so we only recycle the lowest-tier parts. + for(var/obj/item/B in replacer.contents) + if(B.rped_rating() < lowest_rating) + lowest_rating = B.rped_rating() + if(lowest_rating == INFINITY) + to_chat(user, "Mass part deconstruction attempt canceled - no valid parts for recycling detected.") + return 0 + for(var/obj/item/B in replacer.contents) + if(B.rped_rating() > lowest_rating) + continue + if(lathe_to_fill && B.matter) // Sending salvaged materials to the lathe... + for(var/t in B.matter) + if(t in lathe_to_fill.materials) + lathe_to_fill.materials[t] += B.matter[t] * src.decon_mod + qdel(B) + playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) + rped_recycler_ready = FALSE + addtimer(CALLBACK(src, PROC_REF(rped_ready)), 5 SECONDS) + to_chat(user, "You deconstruct all the parts of rating [lowest_rating] in [replacer] with [src].") + return 1 + else + ..() + +/obj/machinery/r_n_d/destructive_analyzer/proc/rped_ready() + rped_recycler_ready = TRUE + playsound(get_turf(src), 'sound/machines/chime.ogg', 50, 1) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 9a42b0a9f7..67459c778f 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -1,281 +1,281 @@ -/obj/machinery/r_n_d/protolathe - name = "Protolathe" - icon_state = "protolathe" - flags = OPENCONTAINER - circuit = /obj/item/weapon/circuitboard/protolathe - use_power = USE_POWER_IDLE - idle_power_usage = 30 - active_power_usage = 5000 - - var/max_material_storage = 100000 - - var/list/datum/design/queue = list() - var/progress = 0 - - var/mat_efficiency = 1 - var/speed = 1 - var/list/LockedDesigns = list() //CHOMPADDITION: FOR VR mainly. - //VOREStation Edit - Broke this into lines - materials = list( - MAT_STEEL = 0, - MAT_GLASS = 0, - MAT_PLASTEEL = 0, - MAT_PLASTIC = 0, - MAT_GRAPHITE = 0, - MAT_GOLD = 0, - MAT_SILVER = 0, - MAT_OSMIUM = 0, - MAT_LEAD = 0, - MAT_PHORON = 0, - MAT_URANIUM = 0, - MAT_DIAMOND = 0, - MAT_DURASTEEL = 0, - MAT_VERDANTIUM = 0, - MAT_MORPHIUM = 0, - MAT_METALHYDROGEN = 0, - MAT_SUPERMATTER = 0, - MAT_TITANIUM = 0) - - hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER) - -/obj/machinery/r_n_d/protolathe/Initialize() - . = ..() - -// Go through all materials, and add them to the possible storage, but hide them unless we contain them. - for(var/Name in name_to_material) - if(Name in materials) - continue - - hidden_materials |= Name - - materials[Name] = 0 - - default_apply_parts() - -/obj/machinery/r_n_d/protolathe/process() - ..() - if(stat) - update_icon() - return - if(queue.len == 0) - busy = 0 - update_icon() - return - var/datum/design/D = queue[1] - if(canBuild(D)) - busy = 1 - progress += speed - if(progress >= D.time) - build(D) - progress = 0 - removeFromQueue(1) - if(linked_console) - linked_console.updateUsrDialog() - flick("[initial(icon_state)]_finish", src) - update_icon() - else - if(busy) - visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].") - busy = 0 - update_icon() - -/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater. - var/t = 0 - for(var/f in materials) - t += materials[f] - return t - -/obj/machinery/r_n_d/protolathe/RefreshParts() - var/T = 0 - for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) - T += G.reagents.maximum_volume - create_reagents(T) - max_material_storage = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - max_material_storage += M.rating * 75000 - T = 0 - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - T += M.rating - mat_efficiency = max(1 - (T - 2) / 8, 0.2) - speed = T / 2 - -/obj/machinery/r_n_d/protolathe/dismantle() - for(var/f in materials) - eject_materials(f, -1) - ..() - - -/obj/machinery/r_n_d/protolathe/update_icon() - cut_overlays() - - icon_state = initial(icon_state) - - if(panel_open) - overlays.Add(image(icon, "[icon_state]_panel")) - - if(stat & NOPOWER) - return - - if(busy) - icon_state = "[icon_state]_work" - -/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return 1 - if(!LAZYLEN(LockedDesigns) && default_deconstruction_screwdriver(user, O))//CHOMPADDITION Locked lathes are hard coded - if(linked_console) - linked_console.linked_lathe = null - linked_console = null - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - if(O.is_open_container()) - return 1 - if(istype(O, /obj/item/weapon/gripper/no_use/loader)) - return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first!") - return 1 - if(!istype(O, /obj/item/stack/material)) - to_chat(user, "You cannot insert this item into \the [src]!") - return 1 - if(stat) - return 1 - - var/obj/item/stack/material/S = O - if(!(S.material.name in materials)) - to_chat(user, "The [src] doesn't accept [S.material]!") - return - - busy = 1 - var/sname = "[S.name]" - var/amnt = S.perunit - var/max_res_amount = max_material_storage - for(var/mat in materials) - max_res_amount -= materials[mat] - - if(materials[S.material.name] + amnt <= max_res_amount) - if(S && S.get_amount() >= 1) - var/count = 0 - flick("[initial(icon_state)]_loading", src) - while(materials[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1) - materials[S.material.name] += amnt - S.use(1) - count++ - to_chat(user, "You insert [count] [sname] into the fabricator.") - else - to_chat(user, "The fabricator cannot hold more [sname].") - busy = 0 - - var/stacktype = S.type - var/t = getMaterialName(stacktype) - add_overlay("protolathe_[t]") - spawn(10) - cut_overlay("protolathe_[t]") - - updateUsrDialog() - return - -/obj/machinery/r_n_d/protolathe/proc/addToQueue(var/datum/design/D) - queue += D - return - -/obj/machinery/r_n_d/protolathe/proc/removeFromQueue(var/index) - queue.Cut(index, index + 1) - return - -/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D) - //CHOMPADDITION: LOCKED designs - for(var/datum/design/X in LockedDesigns) - if(X == D) - return 0 - //CHOMPADDITION: LOCKED designs - for(var/M in D.materials) - if(materials[M] < (D.materials[M] * mat_efficiency)) - return 0 - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) - return 0 - return 1 - -/obj/machinery/r_n_d/protolathe/proc/getLackingMaterials(var/datum/design/D) - var/ret = "" - for(var/M in D.materials) - if(materials[M] < D.materials[M]) - if(ret != "") - ret += ", " - ret += "[D.materials[M] - materials[M]] [M]" - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) - if(ret != "") - ret += ", " - ret += C - return ret - -/obj/machinery/r_n_d/protolathe/proc/build(var/datum/design/D) - var/power = active_power_usage - for(var/M in D.materials) - power += round(D.materials[M] / 5) - power = max(active_power_usage, power) - use_power(power) - for(var/M in D.materials) - materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) - for(var/C in D.chemicals) - reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) - - if(D.build_path) - var/obj/new_item = D.Fabricate(src, src) - new_item.loc = loc - if(mat_efficiency != 1) // No matter out of nowhere - if(new_item.matter && new_item.matter.len > 0) - for(var/i in new_item.matter) - new_item.matter[i] = new_item.matter[i] * mat_efficiency - -/obj/machinery/r_n_d/protolathe/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything - var/recursive = amount == -1 ? TRUE : FALSE - var/matstring = lowertext(material) - - // 0 or null, nothing to eject - if(!materials[matstring]) - return - // Problem, fix problem and abort - if(materials[matstring] < 0) - warning("[src] tried to eject material '[material]', which it has 'materials[matstring]' of!") - materials[matstring] = 0 - return - - // Find the material datum for our material - var/datum/material/M = get_material_by_name(matstring) - if(!M) - warning("[src] tried to eject material '[matstring]', which didn't match any known material datum!") - return - // Find what type of sheets it makes - var/obj/item/stack/material/S = M.stack_type - if(!S) - warning("[src] tried to eject material '[matstring]', which didn't have a stack_type!") - return - - // If we were passed -1, then it's recursive ejection and we should eject all we can - if(amount <= 0) - amount = initial(S.max_amount) - // Smaller of what we have left, or the desired amount (note the amount is in sheets, but the array stores perunit values) - var/ejected = min(round(materials[matstring] / initial(S.perunit)), amount) - - // Place a sheet - S = M.place_sheet(get_turf(src), ejected) - if(!istype(S)) - warning("[src] tried to eject material '[material]', which didn't generate a proper stack when asked!") - return - - // Reduce our amount stored - materials[matstring] -= ejected * S.perunit - - // Recurse if we have enough left for more sheets - if(recursive && materials[matstring] >= S.perunit) - eject_materials(matstring, -1) +/obj/machinery/r_n_d/protolathe + name = "Protolathe" + icon_state = "protolathe" + flags = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/protolathe + use_power = USE_POWER_IDLE + idle_power_usage = 30 + active_power_usage = 5000 + + var/max_material_storage = 100000 + + var/list/datum/design/queue = list() + var/progress = 0 + + var/mat_efficiency = 1 + var/speed = 1 + var/list/LockedDesigns = list() //CHOMPADDITION: FOR VR mainly. + //VOREStation Edit - Broke this into lines + materials = list( + MAT_STEEL = 0, + MAT_GLASS = 0, + MAT_PLASTEEL = 0, + MAT_PLASTIC = 0, + MAT_GRAPHITE = 0, + MAT_GOLD = 0, + MAT_SILVER = 0, + MAT_OSMIUM = 0, + MAT_LEAD = 0, + MAT_PHORON = 0, + MAT_URANIUM = 0, + MAT_DIAMOND = 0, + MAT_DURASTEEL = 0, + MAT_VERDANTIUM = 0, + MAT_MORPHIUM = 0, + MAT_METALHYDROGEN = 0, + MAT_SUPERMATTER = 0, + MAT_TITANIUM = 0) + + hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER) + +/obj/machinery/r_n_d/protolathe/Initialize() + . = ..() + +// Go through all materials, and add them to the possible storage, but hide them unless we contain them. + for(var/Name in name_to_material) + if(Name in materials) + continue + + hidden_materials |= Name + + materials[Name] = 0 + + default_apply_parts() + +/obj/machinery/r_n_d/protolathe/process() + ..() + if(stat) + update_icon() + return + if(queue.len == 0) + busy = 0 + update_icon() + return + var/datum/design/D = queue[1] + if(canBuild(D)) + busy = 1 + progress += speed + if(progress >= D.time) + build(D) + progress = 0 + removeFromQueue(1) + if(linked_console) + linked_console.updateUsrDialog() + flick("[initial(icon_state)]_finish", src) + update_icon() + else + if(busy) + visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].") + busy = 0 + update_icon() + +/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater. + var/t = 0 + for(var/f in materials) + t += materials[f] + return t + +/obj/machinery/r_n_d/protolathe/RefreshParts() + var/T = 0 + for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) + T += G.reagents.maximum_volume + create_reagents(T) + max_material_storage = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + max_material_storage += M.rating * 75000 + T = 0 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + T += M.rating + mat_efficiency = max(1 - (T - 2) / 8, 0.2) + speed = T / 2 + +/obj/machinery/r_n_d/protolathe/dismantle() + for(var/f in materials) + eject_materials(f, -1) + ..() + + +/obj/machinery/r_n_d/protolathe/update_icon() + cut_overlays() + + icon_state = initial(icon_state) + + if(panel_open) + overlays.Add(image(icon, "[icon_state]_panel")) + + if(stat & NOPOWER) + return + + if(busy) + icon_state = "[icon_state]_work" + +/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(busy) + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") + return 1 + if(!LAZYLEN(LockedDesigns) && default_deconstruction_screwdriver(user, O))//CHOMPADDITION Locked lathes are hard coded + if(linked_console) + linked_console.linked_lathe = null + linked_console = null + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + if(O.is_open_container()) + return 1 + if(istype(O, /obj/item/weapon/gripper/no_use/loader)) + return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing + if(panel_open) + to_chat(user, "You can't load \the [src] while it's opened.") + return 1 + if(!linked_console) + to_chat(user, "\The [src] must be linked to an R&D console first!") + return 1 + if(!istype(O, /obj/item/stack/material)) + to_chat(user, "You cannot insert this item into \the [src]!") + return 1 + if(stat) + return 1 + + var/obj/item/stack/material/S = O + if(!(S.material.name in materials)) + to_chat(user, "The [src] doesn't accept [S.material]!") + return + + busy = 1 + var/sname = "[S.name]" + var/amnt = S.perunit + var/max_res_amount = max_material_storage + for(var/mat in materials) + max_res_amount -= materials[mat] + + if(materials[S.material.name] + amnt <= max_res_amount) + if(S && S.get_amount() >= 1) + var/count = 0 + flick("[initial(icon_state)]_loading", src) + while(materials[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1) + materials[S.material.name] += amnt + S.use(1) + count++ + to_chat(user, "You insert [count] [sname] into the fabricator.") + else + to_chat(user, "The fabricator cannot hold more [sname].") + busy = 0 + + var/stacktype = S.type + var/t = getMaterialName(stacktype) + add_overlay("protolathe_[t]") + spawn(10) + cut_overlay("protolathe_[t]") + + updateUsrDialog() + return + +/obj/machinery/r_n_d/protolathe/proc/addToQueue(var/datum/design/D) + queue += D + return + +/obj/machinery/r_n_d/protolathe/proc/removeFromQueue(var/index) + queue.Cut(index, index + 1) + return + +/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D) + //CHOMPADDITION: LOCKED designs + for(var/datum/design/X in LockedDesigns) + if(X == D) + return 0 + //CHOMPADDITION: LOCKED designs + for(var/M in D.materials) + if(materials[M] < (D.materials[M] * mat_efficiency)) + return 0 + for(var/C in D.chemicals) + if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) + return 0 + return 1 + +/obj/machinery/r_n_d/protolathe/proc/getLackingMaterials(var/datum/design/D) + var/ret = "" + for(var/M in D.materials) + if(materials[M] < D.materials[M]) + if(ret != "") + ret += ", " + ret += "[D.materials[M] - materials[M]] [M]" + for(var/C in D.chemicals) + if(!reagents.has_reagent(C, D.chemicals[C])) + if(ret != "") + ret += ", " + ret += C + return ret + +/obj/machinery/r_n_d/protolathe/proc/build(var/datum/design/D) + var/power = active_power_usage + for(var/M in D.materials) + power += round(D.materials[M] / 5) + power = max(active_power_usage, power) + use_power(power) + for(var/M in D.materials) + materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) + for(var/C in D.chemicals) + reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) + + if(D.build_path) + var/obj/new_item = D.Fabricate(src, src) + new_item.loc = loc + if(mat_efficiency != 1) // No matter out of nowhere + if(new_item.matter && new_item.matter.len > 0) + for(var/i in new_item.matter) + new_item.matter[i] = new_item.matter[i] * mat_efficiency + +/obj/machinery/r_n_d/protolathe/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything + var/recursive = amount == -1 ? TRUE : FALSE + var/matstring = lowertext(material) + + // 0 or null, nothing to eject + if(!materials[matstring]) + return + // Problem, fix problem and abort + if(materials[matstring] < 0) + warning("[src] tried to eject material '[material]', which it has 'materials[matstring]' of!") + materials[matstring] = 0 + return + + // Find the material datum for our material + var/datum/material/M = get_material_by_name(matstring) + if(!M) + warning("[src] tried to eject material '[matstring]', which didn't match any known material datum!") + return + // Find what type of sheets it makes + var/obj/item/stack/material/S = M.stack_type + if(!S) + warning("[src] tried to eject material '[matstring]', which didn't have a stack_type!") + return + + // If we were passed -1, then it's recursive ejection and we should eject all we can + if(amount <= 0) + amount = initial(S.max_amount) + // Smaller of what we have left, or the desired amount (note the amount is in sheets, but the array stores perunit values) + var/ejected = min(round(materials[matstring] / initial(S.perunit)), amount) + + // Place a sheet + S = M.place_sheet(get_turf(src), ejected) + if(!istype(S)) + warning("[src] tried to eject material '[material]', which didn't generate a proper stack when asked!") + return + + // Reduce our amount stored + materials[matstring] -= ejected * S.perunit + + // Recurse if we have enough left for more sheets + if(recursive && materials[matstring] >= S.perunit) + eject_materials(matstring, -1) diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm index 0f98395145..4d64a6bf82 100644 --- a/code/modules/research/rd-readme.dm +++ b/code/modules/research/rd-readme.dm @@ -1,32 +1,32 @@ -/* -Research and Development System. (Designed specifically for the /tg/station 13 (Space Station 13) open source project) - -///////////////Overview/////////////////// -This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes -the "scientist" job is given this role) the tools necessary to research new and better technologies. In general, the system works -by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses, -you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge). - -A brief overview is below. For more details, see the related files. - -////////////Game Use///////////// -The major research and development is performed using a combination of four machines: -- R&D Console: A computer console that allows you to manipulate the other devices that are linked to it and view/manipulate the -technologies you have researched so far. -- Protolathe: Used to make new hand-held devices and parts for larger devices. All metals and reagents as raw materials. -- Destructive Analyzer: You can put hand-held objects into it and it'll analyze them for technological advancements but it destroys -them in the process. Destroyed items will send their raw materials to a linked Protolathe (if any) -- Circuit Imprinter: Similar to the Protolathe, it allows for the construction of circuit boards. Uses glass and acid as the raw -materials. - -While researching you are dealing with two different types of information: Technology Paths and Device Designs. Technology Paths -are the "Tech Trees" of the game. You start out with a number of them at the game start and they are improved by using the -Destructive Analyzer. By themselves, they don't do a whole lot. However, they unlock Device Designs. This is the information used -by the circuit imprinter and the protolathe to produce objects. It also tracks the current reliability of that particular design. - -//EXISTING TECH -Each tech path should have at LEAST one item at every level (levels 1 - 20). This is to allow for a more fluid progression of the -researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then -level 5 or 7. Everything past that should be stuff you research. - +/* +Research and Development System. (Designed specifically for the /tg/station 13 (Space Station 13) open source project) + +///////////////Overview/////////////////// +This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes +the "scientist" job is given this role) the tools necessary to research new and better technologies. In general, the system works +by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses, +you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge). + +A brief overview is below. For more details, see the related files. + +////////////Game Use///////////// +The major research and development is performed using a combination of four machines: +- R&D Console: A computer console that allows you to manipulate the other devices that are linked to it and view/manipulate the +technologies you have researched so far. +- Protolathe: Used to make new hand-held devices and parts for larger devices. All metals and reagents as raw materials. +- Destructive Analyzer: You can put hand-held objects into it and it'll analyze them for technological advancements but it destroys +them in the process. Destroyed items will send their raw materials to a linked Protolathe (if any) +- Circuit Imprinter: Similar to the Protolathe, it allows for the construction of circuit boards. Uses glass and acid as the raw +materials. + +While researching you are dealing with two different types of information: Technology Paths and Device Designs. Technology Paths +are the "Tech Trees" of the game. You start out with a number of them at the game start and they are improved by using the +Destructive Analyzer. By themselves, they don't do a whole lot. However, they unlock Device Designs. This is the information used +by the circuit imprinter and the protolathe to produce objects. It also tracks the current reliability of that particular design. + +//EXISTING TECH +Each tech path should have at LEAST one item at every level (levels 1 - 20). This is to allow for a more fluid progression of the +researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then +level 5 or 7. Everything past that should be stuff you research. + */ \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 427a296f18..f748545c26 100755 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -1,185 +1,185 @@ -/* -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. It also contains the /datum/research holder with all the known/possible technology paths and device designs. - -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 imprinting and construction menus do NOT require toxins access to access but all the other menus do. However, if you leave it -on a menu, nothing is to stop the person from using the options on that menu (although they won't be able to change to a different -one). You can also lock the console on the settings menu if you're feeling paranoid and you don't want anyone messing with it who -doesn't have toxins access. - -When a R&D console is destroyed or even partially disassembled, you lose all research data on it. However, there are two ways around -this dire fate: -- The easiest way is to go to the settings menu and select "Sync Database with Network." That causes it to upload (but not download) -it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync -operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers -a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have -to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to -cause a ton of data to be lost, an admin can go send it back. -- The second method is with Technology Disks and Design Disks. Each of these disks can hold a single technology or design datum in -it's entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it -won't update every console in existence) but it's more of a hassle to do. Also, the disks can be stolen. -*/ - -/obj/machinery/computer/rdconsole - name = "R&D control console" - desc = "Science, in a computer! Experiment results not guaranteed." - icon_keyboard = "rd_key" - icon_screen = "rdcomp" - light_color = "#a97faa" - circuit = /obj/item/weapon/circuitboard/rdconsole - var/datum/research/files //Stores all the collected research data. - var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk. - var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk. - - var/obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer - var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe - var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter - - var/id = 0 //ID of the computer (for server restrictions). - var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console - - req_access = list(access_research) //Data and setting manipulation requires scientist access. - - var/protofilter //String to filter protolathe designs by - var/circuitfilter //String to filter circuit designs by - -/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) - var/return_name = ID - switch(return_name) - if("metal") - return_name = "Metal" - if("glass") - return_name = "Glass" - if("gold") - return_name = "Gold" - if("silver") - return_name = "Silver" - if("phoron") - return_name = "Solid Phoron" - if("uranium") - return_name = "Uranium" - if("diamond") - return_name = "Diamond" - return return_name - -/obj/machinery/computer/rdconsole/proc/CallReagentName(var/ID) - var/return_name = ID - for(var/datum/reagent/R in SSchemistry.chemical_reagents) - if(R.id == ID) - return_name = R.name - break - return return_name - -/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/r_n_d/D in range(3, src)) - if(D.linked_console != null || D.panel_open) - continue - if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) - if(linked_destroy == null) - linked_destroy = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/protolathe)) - if(linked_lathe == null) - linked_lathe = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) - if(linked_imprinter == null) - linked_imprinter = D - D.linked_console = src - return - -/obj/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the CentCom server so wild griffins can't fuck up R&D's work - for(var/obj/machinery/r_n_d/server/centcom/C in machines) - for(var/datum/tech/T in files.known_tech) - C.files.AddTech2Known(T) - for(var/datum/design/D in files.known_designs) - C.files.AddDesign2Known(D) - C.files.RefreshResearch() - -/obj/machinery/computer/rdconsole/New() - ..() - files = new /datum/research(src) //Setup the research data holder. - if(!id) - for(var/obj/machinery/r_n_d/server/centcom/S in machines) - S.update_connections() - break - -/obj/machinery/computer/rdconsole/Initialize() - SyncRDevices() - . = ..() - -/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - //Loading a disk into it. - if(istype(D, /obj/item/weapon/disk)) - if(t_disk || d_disk) - to_chat(user, "A disk is already loaded into the machine.") - return - - if(istype(D, /obj/item/weapon/disk/tech_disk)) - t_disk = D - else if (istype(D, /obj/item/weapon/disk/design_disk)) - d_disk = D - else - to_chat(user, "Machine cannot accept disks in that format.") - return - user.drop_item() - D.loc = src - to_chat(user, "You add \the [D] to the machine.") - else - //The construction/deconstruction of the console code. - ..() - - SStgui.update_uis(src) - return - -/obj/machinery/computer/rdconsole/emp_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - to_chat(user, "You disable the security protocols.") - return 1 - -/obj/machinery/computer/rdconsole/proc/GetResearchLevelsInfo() - var/list/dat = list() - dat += "
                      " - for(var/datum/tech/T in files.known_tech) - if(T.level < 1) - continue - dat += "
                    • " - dat += "[T.name]" - dat += "
                        " - dat += "
                      • Level: [T.level]" - dat += "
                      • Summary: [T.desc]" - dat += "
                      " - return dat.Join() - -/obj/machinery/computer/rdconsole/proc/GetResearchListInfo() - var/list/dat = list() - dat += "
                        " - for(var/datum/design/D in files.known_designs) - if(D.build_path) - dat += "
                      • [D.name]: [D.desc]" - dat += "
                      " - return dat.Join() - -/obj/machinery/computer/rdconsole/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - - tgui_interact(user) // TODO: remove the other UI - -/obj/machinery/computer/rdconsole/robotics - name = "Robotics R&D Console" - id = 2 - req_access = list(access_robotics) - -/obj/machinery/computer/rdconsole/core - name = "Core R&D Console" - id = 1 +/* +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. It also contains the /datum/research holder with all the known/possible technology paths and device designs. + +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 imprinting and construction menus do NOT require toxins access to access but all the other menus do. However, if you leave it +on a menu, nothing is to stop the person from using the options on that menu (although they won't be able to change to a different +one). You can also lock the console on the settings menu if you're feeling paranoid and you don't want anyone messing with it who +doesn't have toxins access. + +When a R&D console is destroyed or even partially disassembled, you lose all research data on it. However, there are two ways around +this dire fate: +- The easiest way is to go to the settings menu and select "Sync Database with Network." That causes it to upload (but not download) +it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync +operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers +a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have +to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to +cause a ton of data to be lost, an admin can go send it back. +- The second method is with Technology Disks and Design Disks. Each of these disks can hold a single technology or design datum in +it's entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it +won't update every console in existence) but it's more of a hassle to do. Also, the disks can be stolen. +*/ + +/obj/machinery/computer/rdconsole + name = "R&D control console" + desc = "Science, in a computer! Experiment results not guaranteed." + icon_keyboard = "rd_key" + icon_screen = "rdcomp" + light_color = "#a97faa" + circuit = /obj/item/weapon/circuitboard/rdconsole + var/datum/research/files //Stores all the collected research data. + var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk. + var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk. + + var/obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer + var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe + var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter + + var/id = 0 //ID of the computer (for server restrictions). + var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console + + req_access = list(access_research) //Data and setting manipulation requires scientist access. + + var/protofilter //String to filter protolathe designs by + var/circuitfilter //String to filter circuit designs by + +/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) + var/return_name = ID + switch(return_name) + if("metal") + return_name = "Metal" + if("glass") + return_name = "Glass" + if("gold") + return_name = "Gold" + if("silver") + return_name = "Silver" + if("phoron") + return_name = "Solid Phoron" + if("uranium") + return_name = "Uranium" + if("diamond") + return_name = "Diamond" + return return_name + +/obj/machinery/computer/rdconsole/proc/CallReagentName(var/ID) + var/return_name = ID + for(var/datum/reagent/R in SSchemistry.chemical_reagents) + if(R.id == ID) + return_name = R.name + break + return return_name + +/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/r_n_d/D in range(3, src)) + if(D.linked_console != null || D.panel_open) + continue + if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) + if(linked_destroy == null) + linked_destroy = D + D.linked_console = src + else if(istype(D, /obj/machinery/r_n_d/protolathe)) + if(linked_lathe == null) + linked_lathe = D + D.linked_console = src + else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) + if(linked_imprinter == null) + linked_imprinter = D + D.linked_console = src + return + +/obj/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the CentCom server so wild griffins can't fuck up R&D's work + for(var/obj/machinery/r_n_d/server/centcom/C in machines) + for(var/datum/tech/T in files.known_tech) + C.files.AddTech2Known(T) + for(var/datum/design/D in files.known_designs) + C.files.AddDesign2Known(D) + C.files.RefreshResearch() + +/obj/machinery/computer/rdconsole/New() + ..() + files = new /datum/research(src) //Setup the research data holder. + if(!id) + for(var/obj/machinery/r_n_d/server/centcom/S in machines) + S.update_connections() + break + +/obj/machinery/computer/rdconsole/Initialize() + SyncRDevices() + . = ..() + +/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) + //Loading a disk into it. + if(istype(D, /obj/item/weapon/disk)) + if(t_disk || d_disk) + to_chat(user, "A disk is already loaded into the machine.") + return + + if(istype(D, /obj/item/weapon/disk/tech_disk)) + t_disk = D + else if (istype(D, /obj/item/weapon/disk/design_disk)) + d_disk = D + else + to_chat(user, "Machine cannot accept disks in that format.") + return + user.drop_item() + D.loc = src + to_chat(user, "You add \the [D] to the machine.") + else + //The construction/deconstruction of the console code. + ..() + + SStgui.update_uis(src) + return + +/obj/machinery/computer/rdconsole/emp_act(var/remaining_charges, var/mob/user) + if(!emagged) + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 + to_chat(user, "You disable the security protocols.") + return 1 + +/obj/machinery/computer/rdconsole/proc/GetResearchLevelsInfo() + var/list/dat = list() + dat += "
                        " + for(var/datum/tech/T in files.known_tech) + if(T.level < 1) + continue + dat += "
                      • " + dat += "[T.name]" + dat += "
                          " + dat += "
                        • Level: [T.level]" + dat += "
                        • Summary: [T.desc]" + dat += "
                        " + return dat.Join() + +/obj/machinery/computer/rdconsole/proc/GetResearchListInfo() + var/list/dat = list() + dat += "
                          " + for(var/datum/design/D in files.known_designs) + if(D.build_path) + dat += "
                        • [D.name]: [D.desc]" + dat += "
                        " + return dat.Join() + +/obj/machinery/computer/rdconsole/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + + tgui_interact(user) // TODO: remove the other UI + +/obj/machinery/computer/rdconsole/robotics + name = "Robotics R&D Console" + id = 2 + req_access = list(access_robotics) + +/obj/machinery/computer/rdconsole/core + name = "Core R&D Console" + id = 1 diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 885ba75297..e7fc2f8b24 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -1,42 +1,42 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -//All devices that link into the R&D console fall into thise type for easy identification and some shared procs. - -/obj/machinery/r_n_d - name = "R&D Device" - icon = 'icons/obj/machines/research.dmi' - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - var/busy = 0 - var/obj/machinery/computer/rdconsole/linked_console - - var/list/materials = list() // Materials this machine can accept. - var/list/hidden_materials = list() // Materials this machine will not display, unless it contains them. Must be in the materials list as well. - -/obj/machinery/r_n_d/attack_hand(mob/user as mob) - return - -/obj/machinery/r_n_d/proc/getMaterialType(var/name) - var/datum/material/M = get_material_by_name(name) - if(M && M.stack_type) - return M.stack_type - return null - -/obj/machinery/r_n_d/proc/getMaterialName(var/type) - if(istype(type, /obj/item/stack/material)) - var/obj/item/stack/material/M = type - return M.material.name - return null - -/obj/machinery/r_n_d/proc/eject(var/material, var/amount) - if(!(material in materials)) - return - var/obj/item/stack/material/sheetType = getMaterialType(material) - var/perUnit = initial(sheetType.perunit) - var/eject = round(materials[material] / perUnit) - eject = amount == -1 ? eject : min(eject, amount) - if(eject < 1) - return - new sheetType(loc, eject) - materials[material] -= eject * perUnit +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +//All devices that link into the R&D console fall into thise type for easy identification and some shared procs. + +/obj/machinery/r_n_d + name = "R&D Device" + icon = 'icons/obj/machines/research.dmi' + density = TRUE + anchored = TRUE + use_power = USE_POWER_IDLE + var/busy = 0 + var/obj/machinery/computer/rdconsole/linked_console + + var/list/materials = list() // Materials this machine can accept. + var/list/hidden_materials = list() // Materials this machine will not display, unless it contains them. Must be in the materials list as well. + +/obj/machinery/r_n_d/attack_hand(mob/user as mob) + return + +/obj/machinery/r_n_d/proc/getMaterialType(var/name) + var/datum/material/M = get_material_by_name(name) + if(M && M.stack_type) + return M.stack_type + return null + +/obj/machinery/r_n_d/proc/getMaterialName(var/type) + if(istype(type, /obj/item/stack/material)) + var/obj/item/stack/material/M = type + return M.material.name + return null + +/obj/machinery/r_n_d/proc/eject(var/material, var/amount) + if(!(material in materials)) + return + var/obj/item/stack/material/sheetType = getMaterialType(material) + var/perUnit = initial(sheetType.perunit) + var/eject = round(materials[material] / perUnit) + eject = amount == -1 ? eject : min(eject, amount) + if(eject < 1) + return + new sheetType(loc, eject) + materials[material] -= eject * perUnit diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 4fda3725df..87cfd26179 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -1,227 +1,227 @@ -/* -General Explination: -The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the -various procs used to manipulate it. It has four variables and seven procs: - -Variables: -- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc -(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech -but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess -with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to -refer to them since it makes it a bit easier to search through them for specific information. -- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this -list, it can't be improved. All the tech in this list are visible to the player. -- possible_designs is functionally identical to possbile_tech except it's for /datum/design. -- known_designs is functionally identical to known_tech except it's for /datum/design - -Procs: -- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in -known_tech and at a high enough level. -- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. -- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If -it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like -a player made tech?) you can. -- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. -- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths -and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't -accidentally add "secret" tech to it. -- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When -it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to -the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). - -The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: -- Name: Pretty obvious. This is often viewable to the players. -- Desc: Pretty obvious. Also player viewable. -- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. -- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain -level in specific techs before you can produce them. -- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the -research holder datum. - -*/ -/*************************************************************** -** Master Types ** -** Includes all the helper procs and basic tech processing. ** -***************************************************************/ -GLOBAL_LIST_INIT(design_datums, list()) - -/datum/research //Holder for all the existing, archived, and known tech. Individual to console. - var/list/known_tech = list() //List of locally known tech. Datum/tech go here. - var/list/possible_designs = list() //List of all designs. - var/list/known_designs = list() //List of available designs. - -/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. - if(!LAZYLEN(GLOB.design_datums)) - for(var/T in subtypesof(/datum/design)) - GLOB.design_datums += new T - possible_designs = GLOB.design_datums - - if(!LAZYLEN(known_tech)) - for(var/T in subtypesof(/datum/tech)) - known_tech += new T - RefreshResearch() - -/datum/research/techonly -/datum/research/techonly/New() - . = ..() - possible_designs = list() - known_designs = list() - -/datum/research/techonly/RefreshResearch() - . = ..() - known_designs = list() // Just in case - -//Checks to see if design has all the required pre-reqs. -//Input: datum/design; Output: 0/1 (false/true) -/datum/research/proc/DesignHasReqs(var/datum/design/D) - if(!LAZYLEN(D.req_tech)) - return TRUE - - var/list/k_tech = list() - for(var/datum/tech/known in known_tech) - k_tech[known.id] = known.level - - for(var/req in D.req_tech) - if(isnull(k_tech[req]) || k_tech[req] < D.req_tech[req]) - return 0 - - return TRUE - -//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. -//Input: datum/tech; Output: Null -/datum/research/proc/AddTech2Known(var/datum/tech/T) - for(var/datum/tech/known in known_tech) - if(T.id == known.id) - if(T.level > known.level) - known.level = T.level - return - return - -/datum/research/proc/AddDesign2Known(var/datum/design/D) - LAZYDISTINCTADD(known_designs, D) - -//Refreshes known_tech and known_designs list -//Input/Output: n/a -/datum/research/proc/RefreshResearch() - for(var/datum/design/PD in possible_designs) - if(DesignHasReqs(PD)) - AddDesign2Known(PD) - for(var/datum/tech/T in known_tech) - T.level = between(0, T.level, 20) - return - -//Refreshes the levels of a given tech. -//Input: Tech's ID and Level; Output: null -/datum/research/proc/UpdateTech(var/ID, var/level) - for(var/datum/tech/KT in known_tech) - if(KT.id == ID && KT.level <= level) - KT.level = max(KT.level + 1, level - 1) - return - -// A simple helper proc to find the name of a tech with a given ID. -/proc/CallTechName(var/ID) - for(var/datum/tech/check_tech as anything in subtypesof(/datum/tech)) - if(initial(check_tech.id) == ID) - return initial(check_tech.name) - -/*************************************************************** -** Technology Datums ** -** Includes all the various technoliges and what they make. ** -***************************************************************/ - -/datum/tech //Datum of individual technologies. - var/name = "name" //Name of the technology. - var/desc = "description" //General description of what it does and what it makes. - var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. - var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. - -/datum/tech/materials - name = "Materials Research" - desc = "Development of new and improved materials." - id = TECH_MATERIAL - -/datum/tech/engineering - name = "Engineering Research" - desc = "Development of new and improved engineering parts." - id = TECH_ENGINEERING - -/datum/tech/phorontech - name = "Phoron Research" - desc = "Research into the mysterious substance colloqually known as 'phoron'." - id = TECH_PHORON - -/datum/tech/powerstorage - name = "Power Manipulation Technology" - desc = "The various technologies behind the storage and generation of electicity." - id = TECH_POWER - -/datum/tech/bluespace - name = "'Blue-space' Research" - desc = "Research into the sub-reality known as 'blue-space'" - id = TECH_BLUESPACE - -/datum/tech/biotech - name = "Biological Technology" - desc = "Research into the deeper mysteries of life and organic substances." - id = TECH_BIO - -/datum/tech/combat - name = "Combat Systems Research" - desc = "The development of offensive and defensive systems." - id = TECH_COMBAT - -/datum/tech/magnets - name = "Electromagnetic Spectrum Research" - desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." - id = TECH_MAGNET - -/datum/tech/programming - name = "Data Theory Research" - desc = "The development of new computer and artificial intelligence and data storage systems." - id = TECH_DATA - -/datum/tech/syndicate - name = "Transgressive Technologies Research" - desc = "The study of technologies that sit on the very boundaries of legality and ethics." - id = TECH_ILLEGAL - level = 0 - -/datum/tech/arcane - name = "Anomalous Research" - desc = "Study of phenomena that disobey the fundamental laws of this universe." - id = TECH_ARCANE - level = 0 - -/datum/tech/precursor - name = "Precursor Research" - desc = "The applied study of Precursor Technology, for modern applications." - id = TECH_PRECURSOR - level = 0 - -/obj/item/weapon/disk/tech_disk - name = "technology disk" - desc = "A disk for storing technology data for further research." - icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit - icon_state = "data-blue" //VOREStation Edit - item_state = "card-id" - randpixel = 5 - w_class = ITEMSIZE_SMALL - matter = list(MAT_STEEL = 30, MAT_GLASS = 10) - var/datum/tech/stored - -/obj/item/weapon/disk/tech_disk/New() - randpixel_xy() - -/obj/item/weapon/disk/design_disk - name = "component design disk" - desc = "A disk for storing device design data for construction in lathes." - icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit - icon_state = "data-purple" //VOREStation Edit - item_state = "card-id" - randpixel = 5 - w_class = ITEMSIZE_SMALL - matter = list(MAT_STEEL = 30, MAT_GLASS = 10) - var/datum/design/blueprint - -/obj/item/weapon/disk/design_disk/New() - randpixel_xy() +/* +General Explination: +The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the +various procs used to manipulate it. It has four variables and seven procs: + +Variables: +- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc +(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech +but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess +with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to +refer to them since it makes it a bit easier to search through them for specific information. +- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this +list, it can't be improved. All the tech in this list are visible to the player. +- possible_designs is functionally identical to possbile_tech except it's for /datum/design. +- known_designs is functionally identical to known_tech except it's for /datum/design + +Procs: +- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in +known_tech and at a high enough level. +- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. +- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If +it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like +a player made tech?) you can. +- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. +- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths +and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't +accidentally add "secret" tech to it. +- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When +it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to +the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). + +The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: +- Name: Pretty obvious. This is often viewable to the players. +- Desc: Pretty obvious. Also player viewable. +- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. +- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain +level in specific techs before you can produce them. +- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the +research holder datum. + +*/ +/*************************************************************** +** Master Types ** +** Includes all the helper procs and basic tech processing. ** +***************************************************************/ +GLOBAL_LIST_INIT(design_datums, list()) + +/datum/research //Holder for all the existing, archived, and known tech. Individual to console. + var/list/known_tech = list() //List of locally known tech. Datum/tech go here. + var/list/possible_designs = list() //List of all designs. + var/list/known_designs = list() //List of available designs. + +/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. + if(!LAZYLEN(GLOB.design_datums)) + for(var/T in subtypesof(/datum/design)) + GLOB.design_datums += new T + possible_designs = GLOB.design_datums + + if(!LAZYLEN(known_tech)) + for(var/T in subtypesof(/datum/tech)) + known_tech += new T + RefreshResearch() + +/datum/research/techonly +/datum/research/techonly/New() + . = ..() + possible_designs = list() + known_designs = list() + +/datum/research/techonly/RefreshResearch() + . = ..() + known_designs = list() // Just in case + +//Checks to see if design has all the required pre-reqs. +//Input: datum/design; Output: 0/1 (false/true) +/datum/research/proc/DesignHasReqs(var/datum/design/D) + if(!LAZYLEN(D.req_tech)) + return TRUE + + var/list/k_tech = list() + for(var/datum/tech/known in known_tech) + k_tech[known.id] = known.level + + for(var/req in D.req_tech) + if(isnull(k_tech[req]) || k_tech[req] < D.req_tech[req]) + return 0 + + return TRUE + +//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. +//Input: datum/tech; Output: Null +/datum/research/proc/AddTech2Known(var/datum/tech/T) + for(var/datum/tech/known in known_tech) + if(T.id == known.id) + if(T.level > known.level) + known.level = T.level + return + return + +/datum/research/proc/AddDesign2Known(var/datum/design/D) + LAZYDISTINCTADD(known_designs, D) + +//Refreshes known_tech and known_designs list +//Input/Output: n/a +/datum/research/proc/RefreshResearch() + for(var/datum/design/PD in possible_designs) + if(DesignHasReqs(PD)) + AddDesign2Known(PD) + for(var/datum/tech/T in known_tech) + T.level = between(0, T.level, 20) + return + +//Refreshes the levels of a given tech. +//Input: Tech's ID and Level; Output: null +/datum/research/proc/UpdateTech(var/ID, var/level) + for(var/datum/tech/KT in known_tech) + if(KT.id == ID && KT.level <= level) + KT.level = max(KT.level + 1, level - 1) + return + +// A simple helper proc to find the name of a tech with a given ID. +/proc/CallTechName(var/ID) + for(var/datum/tech/check_tech as anything in subtypesof(/datum/tech)) + if(initial(check_tech.id) == ID) + return initial(check_tech.name) + +/*************************************************************** +** Technology Datums ** +** Includes all the various technoliges and what they make. ** +***************************************************************/ + +/datum/tech //Datum of individual technologies. + var/name = "name" //Name of the technology. + var/desc = "description" //General description of what it does and what it makes. + var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. + var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. + +/datum/tech/materials + name = "Materials Research" + desc = "Development of new and improved materials." + id = TECH_MATERIAL + +/datum/tech/engineering + name = "Engineering Research" + desc = "Development of new and improved engineering parts." + id = TECH_ENGINEERING + +/datum/tech/phorontech + name = "Phoron Research" + desc = "Research into the mysterious substance colloqually known as 'phoron'." + id = TECH_PHORON + +/datum/tech/powerstorage + name = "Power Manipulation Technology" + desc = "The various technologies behind the storage and generation of electicity." + id = TECH_POWER + +/datum/tech/bluespace + name = "'Blue-space' Research" + desc = "Research into the sub-reality known as 'blue-space'" + id = TECH_BLUESPACE + +/datum/tech/biotech + name = "Biological Technology" + desc = "Research into the deeper mysteries of life and organic substances." + id = TECH_BIO + +/datum/tech/combat + name = "Combat Systems Research" + desc = "The development of offensive and defensive systems." + id = TECH_COMBAT + +/datum/tech/magnets + name = "Electromagnetic Spectrum Research" + desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." + id = TECH_MAGNET + +/datum/tech/programming + name = "Data Theory Research" + desc = "The development of new computer and artificial intelligence and data storage systems." + id = TECH_DATA + +/datum/tech/syndicate + name = "Transgressive Technologies Research" + desc = "The study of technologies that sit on the very boundaries of legality and ethics." + id = TECH_ILLEGAL + level = 0 + +/datum/tech/arcane + name = "Anomalous Research" + desc = "Study of phenomena that disobey the fundamental laws of this universe." + id = TECH_ARCANE + level = 0 + +/datum/tech/precursor + name = "Precursor Research" + desc = "The applied study of Precursor Technology, for modern applications." + id = TECH_PRECURSOR + level = 0 + +/obj/item/weapon/disk/tech_disk + name = "technology disk" + desc = "A disk for storing technology data for further research." + icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit + icon_state = "data-blue" //VOREStation Edit + item_state = "card-id" + randpixel = 5 + w_class = ITEMSIZE_SMALL + matter = list(MAT_STEEL = 30, MAT_GLASS = 10) + var/datum/tech/stored + +/obj/item/weapon/disk/tech_disk/New() + randpixel_xy() + +/obj/item/weapon/disk/design_disk + name = "component design disk" + desc = "A disk for storing device design data for construction in lathes." + icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit + icon_state = "data-purple" //VOREStation Edit + item_state = "card-id" + randpixel = 5 + w_class = ITEMSIZE_SMALL + matter = list(MAT_STEEL = 30, MAT_GLASS = 10) + var/datum/design/blueprint + +/obj/item/weapon/disk/design_disk/New() + randpixel_xy() diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 2c40713acd..2b25b205de 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -1,312 +1,312 @@ -/obj/machinery/r_n_d/server - name = "R&D Server" - icon = 'icons/obj/machines/research_vr.dmi' //VOREStation Edit - New Icon - icon_state = "server" - var/datum/research/files - var/health = 100 - var/list/id_with_upload = list() //List of R&D consoles with upload to server access. - var/list/id_with_download = list() //List of R&D consoles with download from server access. - var/id_with_upload_string = "" //String versions for easy editing in map editor. - var/id_with_download_string = "" - var/server_id = 0 - var/produces_heat = 1 - idle_power_usage = 800 - var/delay = 10 - req_access = list(access_rd) //Only the R&D can change server settings. - circuit = /obj/item/weapon/circuitboard/rdserver - -/obj/machinery/r_n_d/server/Initialize() - . = ..() - default_apply_parts() - -/obj/machinery/r_n_d/server/Destroy() - griefProtection() - ..() - -/obj/machinery/r_n_d/server/RefreshParts() - var/tot_rating = 0 - for(var/obj/item/weapon/stock_parts/SP in src) - tot_rating += SP.rating - update_idle_power_usage(initial(idle_power_usage) / max(1, tot_rating)) - -/obj/machinery/r_n_d/server/Initialize() - . = ..() - if(!files) - files = new /datum/research(src) - var/list/temp_list - if(!id_with_upload.len) - temp_list = list() - temp_list = splittext(id_with_upload_string, ";") - for(var/N in temp_list) - id_with_upload += text2num(N) - if(!id_with_download.len) - temp_list = list() - temp_list = splittext(id_with_download_string, ";") - for(var/N in temp_list) - id_with_download += text2num(N) - -/obj/machinery/r_n_d/server/process() - var/datum/gas_mixture/environment = loc.return_air() - switch(environment.temperature) - if(0 to T0C) - health = min(100, health + 1) - if(T0C to (T20C + 20)) - health = between(0, health, 100) - if((T20C + 20) to (T0C + 70)) - health = max(0, health - 1) - if(health <= 0) - griefProtection() //I dont like putting this in process() but it's the best I can do without re-writing a chunk of rd servers. - files.known_designs = list() - for(var/datum/tech/T in files.known_tech) - if(prob(1)) - T.level-- - files.RefreshResearch() - if(delay) - delay-- - else - produce_heat() - delay = initial(delay) - -/obj/machinery/r_n_d/server/emp_act(severity) - griefProtection() - ..() - -/obj/machinery/r_n_d/server/ex_act(severity) - griefProtection() - ..() - -//Backup files to CentCom to help admins recover data after greifer attacks -/obj/machinery/r_n_d/server/proc/griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in machines) - for(var/datum/tech/T in files.known_tech) - C.files.AddTech2Known(T) - for(var/datum/design/D in files.known_designs) - C.files.AddDesign2Known(D) - C.files.RefreshResearch() - -/obj/machinery/r_n_d/server/proc/produce_heat() - if(!produces_heat) - return - - if(!use_power) - return - - if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from telecoms - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - - var/transfer_moles = 0.25 * env.total_moles - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source - - removed.add_thermal_energy(heat_produced) - - env.merge(removed) - -/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(default_deconstruction_screwdriver(user, O)) - return - if(default_deconstruction_crowbar(user, O)) - return - if(default_part_replacement(user, O)) - return - -/obj/machinery/r_n_d/server/centcom - name = "Central R&D Database" - server_id = -1 - -/obj/machinery/r_n_d/server/centcom/proc/update_connections() - var/list/no_id_servers = list() - var/list/server_ids = list() - for(var/obj/machinery/r_n_d/server/S in machines) - switch(S.server_id) - if(-1) - continue - if(0) - no_id_servers += S - else - server_ids += S.server_id - - for(var/obj/machinery/r_n_d/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/r_n_d/server/centcom/process() - return PROCESS_KILL //don't need process() - -/obj/machinery/computer/rdservercontrol - name = "R&D Server Controller" - desc = "Manage the research designs and servers. Can also modify upload/download permissions to R&D consoles." - icon_keyboard = "rd_key" - icon_screen = "rdcomp" - light_color = "#a97faa" - circuit = /obj/item/weapon/circuitboard/rdservercontrol - var/screen = 0 - var/obj/machinery/r_n_d/server/temp_server - var/list/servers = list() - var/list/consoles = list() - var/badmin = 0 - -/obj/machinery/computer/rdservercontrol/tgui_status(mob/user) - . = ..() - if(!allowed(user) && !emagged) - . = min(., STATUS_UPDATE) - -/obj/machinery/computer/rdservercontrol/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ResearchServerController", name) - ui.open() - -/obj/machinery/computer/rdservercontrol/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) - var/list/data = ..() - - data["badmin"] = badmin - - var/list/server_list = list() - data["servers"] = server_list - for(var/obj/machinery/r_n_d/server/S in machines) - if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) - continue - var/list/tech = list() - var/list/designs = list() - var/list/server_data = list( - "name" = S.name, - "ref" = REF(S), - "id" = S.server_id, - "id_with_upload" = S.id_with_upload, - "id_with_download" = S.id_with_download, - "tech" = tech, - "designs" = designs, - ) - for(var/datum/tech/T in S.files.known_tech) - tech.Add(list(list( - "name" = T.name, - "id" = T.id, - ))) - for(var/datum/design/D in S.files.known_designs) - designs.Add(list(list( - "name" = D.name, - "id" = D.id, - ))) - server_list.Add(list(server_data)) - - var/list/console_list = list() - data["consoles"] = console_list - for(var/obj/machinery/computer/rdconsole/C in machines) - if(!C.sync) - continue - console_list.Add(list(list( - "name" = C.name, - "ref" = REF(C), - "loc" = get_area(C), - "id" = C.id, - ))) - - return data - -/obj/machinery/computer/rdservercontrol/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - add_fingerprint(usr) - switch(action) - if("toggle_upload", "toggle_download") - var/obj/machinery/r_n_d/server/S = locate(params["server"]) - if(!istype(S)) - return - if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) - return - var/obj/machinery/computer/rdconsole/C = locate(params["console"]) - if(!istype(C) || !C.sync) - return - - switch(action) - if("toggle_upload") - if(C.id in S.id_with_upload) - S.id_with_upload -= C.id - else - S.id_with_upload += C.id - if("toggle_download") - if(C.id in S.id_with_download) - S.id_with_download -= C.id - else - S.id_with_download += C.id - return TRUE - - if("reset_tech") - var/obj/machinery/r_n_d/server/target = locate(params["server"]) - if(!istype(target)) - return FALSE - var/choice = tgui_alert(usr, "Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", list("Continue", "Cancel")) - if(choice == "Continue") - for(var/datum/tech/T in target.files.known_tech) - if(T.id == params["tech"]) - T.level = 1 - break - target.files.RefreshResearch() - return TRUE - - if("reset_design") - var/obj/machinery/r_n_d/server/target = locate(params["server"]) - if(!istype(target)) - return FALSE - var/choice = tgui_alert(usr, "Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", list("Continue", "Cancel")) - if(choice == "Continue") - for(var/datum/design/D in target.files.known_designs) - if(D.id == params["design"]) - target.files.known_designs -= D - break - target.files.RefreshResearch() - return TRUE - - if("transfer_data") - if(!badmin) - // no href exploits, you've been r e p o r t e d - log_admin("Warning: [key_name(usr)] attempted to transfer R&D data from [params["server"]] to [params["target"]] via href exploit with [src] [COORD(src)]") - message_admins("Warning: [ADMIN_FULLMONTY(usr)] attempted to transfer R&D data from [params["server"]] to [params["target"]] via href exploit with [src] [ADMIN_COORDJMP(src)]") - return FALSE - var/obj/machinery/r_n_d/server/from = locate(params["server"]) - if(!istype(from)) - return - var/obj/machinery/r_n_d/server/target = locate(params["target"]) - if(!istype(target)) - return - target.files.known_designs |= from.files.known_designs - target.files.known_tech |= from.files.known_tech - return TRUE - -/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - tgui_interact(user) - -/obj/machinery/computer/rdservercontrol/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - to_chat(user, "You you disable the security protocols.") - SStgui.update_uis(src) - return 1 - -/obj/machinery/r_n_d/server/robotics - name = "Robotics R&D Server" - id_with_upload_string = "1;2" - id_with_download_string = "1;2" - server_id = 2 - -/obj/machinery/r_n_d/server/core - name = "Core R&D Server" - id_with_upload_string = "1" - id_with_download_string = "1" +/obj/machinery/r_n_d/server + name = "R&D Server" + icon = 'icons/obj/machines/research_vr.dmi' //VOREStation Edit - New Icon + icon_state = "server" + var/datum/research/files + var/health = 100 + var/list/id_with_upload = list() //List of R&D consoles with upload to server access. + var/list/id_with_download = list() //List of R&D consoles with download from server access. + var/id_with_upload_string = "" //String versions for easy editing in map editor. + var/id_with_download_string = "" + var/server_id = 0 + var/produces_heat = 1 + idle_power_usage = 800 + var/delay = 10 + req_access = list(access_rd) //Only the R&D can change server settings. + circuit = /obj/item/weapon/circuitboard/rdserver + +/obj/machinery/r_n_d/server/Initialize() + . = ..() + default_apply_parts() + +/obj/machinery/r_n_d/server/Destroy() + griefProtection() + ..() + +/obj/machinery/r_n_d/server/RefreshParts() + var/tot_rating = 0 + for(var/obj/item/weapon/stock_parts/SP in src) + tot_rating += SP.rating + update_idle_power_usage(initial(idle_power_usage) / max(1, tot_rating)) + +/obj/machinery/r_n_d/server/Initialize() + . = ..() + if(!files) + files = new /datum/research(src) + var/list/temp_list + if(!id_with_upload.len) + temp_list = list() + temp_list = splittext(id_with_upload_string, ";") + for(var/N in temp_list) + id_with_upload += text2num(N) + if(!id_with_download.len) + temp_list = list() + temp_list = splittext(id_with_download_string, ";") + for(var/N in temp_list) + id_with_download += text2num(N) + +/obj/machinery/r_n_d/server/process() + var/datum/gas_mixture/environment = loc.return_air() + switch(environment.temperature) + if(0 to T0C) + health = min(100, health + 1) + if(T0C to (T20C + 20)) + health = between(0, health, 100) + if((T20C + 20) to (T0C + 70)) + health = max(0, health - 1) + if(health <= 0) + griefProtection() //I dont like putting this in process() but it's the best I can do without re-writing a chunk of rd servers. + files.known_designs = list() + for(var/datum/tech/T in files.known_tech) + if(prob(1)) + T.level-- + files.RefreshResearch() + if(delay) + delay-- + else + produce_heat() + delay = initial(delay) + +/obj/machinery/r_n_d/server/emp_act(severity) + griefProtection() + ..() + +/obj/machinery/r_n_d/server/ex_act(severity) + griefProtection() + ..() + +//Backup files to CentCom to help admins recover data after greifer attacks +/obj/machinery/r_n_d/server/proc/griefProtection() + for(var/obj/machinery/r_n_d/server/centcom/C in machines) + for(var/datum/tech/T in files.known_tech) + C.files.AddTech2Known(T) + for(var/datum/design/D in files.known_designs) + C.files.AddDesign2Known(D) + C.files.RefreshResearch() + +/obj/machinery/r_n_d/server/proc/produce_heat() + if(!produces_heat) + return + + if(!use_power) + return + + if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from telecoms + var/turf/simulated/L = loc + if(istype(L)) + var/datum/gas_mixture/env = L.return_air() + + var/transfer_moles = 0.25 * env.total_moles + + var/datum/gas_mixture/removed = env.remove(transfer_moles) + + if(removed) + var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source + + removed.add_thermal_energy(heat_produced) + + env.merge(removed) + +/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + +/obj/machinery/r_n_d/server/centcom + name = "Central R&D Database" + server_id = -1 + +/obj/machinery/r_n_d/server/centcom/proc/update_connections() + var/list/no_id_servers = list() + var/list/server_ids = list() + for(var/obj/machinery/r_n_d/server/S in machines) + switch(S.server_id) + if(-1) + continue + if(0) + no_id_servers += S + else + server_ids += S.server_id + + for(var/obj/machinery/r_n_d/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/r_n_d/server/centcom/process() + return PROCESS_KILL //don't need process() + +/obj/machinery/computer/rdservercontrol + name = "R&D Server Controller" + desc = "Manage the research designs and servers. Can also modify upload/download permissions to R&D consoles." + icon_keyboard = "rd_key" + icon_screen = "rdcomp" + light_color = "#a97faa" + circuit = /obj/item/weapon/circuitboard/rdservercontrol + var/screen = 0 + var/obj/machinery/r_n_d/server/temp_server + var/list/servers = list() + var/list/consoles = list() + var/badmin = 0 + +/obj/machinery/computer/rdservercontrol/tgui_status(mob/user) + . = ..() + if(!allowed(user) && !emagged) + . = min(., STATUS_UPDATE) + +/obj/machinery/computer/rdservercontrol/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ResearchServerController", name) + ui.open() + +/obj/machinery/computer/rdservercontrol/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + + data["badmin"] = badmin + + var/list/server_list = list() + data["servers"] = server_list + for(var/obj/machinery/r_n_d/server/S in machines) + if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) + continue + var/list/tech = list() + var/list/designs = list() + var/list/server_data = list( + "name" = S.name, + "ref" = REF(S), + "id" = S.server_id, + "id_with_upload" = S.id_with_upload, + "id_with_download" = S.id_with_download, + "tech" = tech, + "designs" = designs, + ) + for(var/datum/tech/T in S.files.known_tech) + tech.Add(list(list( + "name" = T.name, + "id" = T.id, + ))) + for(var/datum/design/D in S.files.known_designs) + designs.Add(list(list( + "name" = D.name, + "id" = D.id, + ))) + server_list.Add(list(server_data)) + + var/list/console_list = list() + data["consoles"] = console_list + for(var/obj/machinery/computer/rdconsole/C in machines) + if(!C.sync) + continue + console_list.Add(list(list( + "name" = C.name, + "ref" = REF(C), + "loc" = get_area(C), + "id" = C.id, + ))) + + return data + +/obj/machinery/computer/rdservercontrol/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + add_fingerprint(usr) + switch(action) + if("toggle_upload", "toggle_download") + var/obj/machinery/r_n_d/server/S = locate(params["server"]) + if(!istype(S)) + return + if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) + return + var/obj/machinery/computer/rdconsole/C = locate(params["console"]) + if(!istype(C) || !C.sync) + return + + switch(action) + if("toggle_upload") + if(C.id in S.id_with_upload) + S.id_with_upload -= C.id + else + S.id_with_upload += C.id + if("toggle_download") + if(C.id in S.id_with_download) + S.id_with_download -= C.id + else + S.id_with_download += C.id + return TRUE + + if("reset_tech") + var/obj/machinery/r_n_d/server/target = locate(params["server"]) + if(!istype(target)) + return FALSE + var/choice = tgui_alert(usr, "Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", list("Continue", "Cancel")) + if(choice == "Continue") + for(var/datum/tech/T in target.files.known_tech) + if(T.id == params["tech"]) + T.level = 1 + break + target.files.RefreshResearch() + return TRUE + + if("reset_design") + var/obj/machinery/r_n_d/server/target = locate(params["server"]) + if(!istype(target)) + return FALSE + var/choice = tgui_alert(usr, "Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", list("Continue", "Cancel")) + if(choice == "Continue") + for(var/datum/design/D in target.files.known_designs) + if(D.id == params["design"]) + target.files.known_designs -= D + break + target.files.RefreshResearch() + return TRUE + + if("transfer_data") + if(!badmin) + // no href exploits, you've been r e p o r t e d + log_admin("Warning: [key_name(usr)] attempted to transfer R&D data from [params["server"]] to [params["target"]] via href exploit with [src] [COORD(src)]") + message_admins("Warning: [ADMIN_FULLMONTY(usr)] attempted to transfer R&D data from [params["server"]] to [params["target"]] via href exploit with [src] [ADMIN_COORDJMP(src)]") + return FALSE + var/obj/machinery/r_n_d/server/from = locate(params["server"]) + if(!istype(from)) + return + var/obj/machinery/r_n_d/server/target = locate(params["target"]) + if(!istype(target)) + return + target.files.known_designs |= from.files.known_designs + target.files.known_tech |= from.files.known_tech + return TRUE + +/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + tgui_interact(user) + +/obj/machinery/computer/rdservercontrol/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 + to_chat(user, "You you disable the security protocols.") + SStgui.update_uis(src) + return 1 + +/obj/machinery/r_n_d/server/robotics + name = "Robotics R&D Server" + id_with_upload_string = "1;2" + id_with_download_string = "1;2" + server_id = 2 + +/obj/machinery/r_n_d/server/core + name = "Core R&D Server" + id_with_upload_string = "1" + id_with_download_string = "1" server_id = 1 \ No newline at end of file diff --git a/code/modules/scripting/AST/AST Nodes.dm b/code/modules/scripting/AST/AST Nodes.dm index 6521450e2a..ceeacdcdc3 100644 --- a/code/modules/scripting/AST/AST Nodes.dm +++ b/code/modules/scripting/AST/AST Nodes.dm @@ -1,128 +1,128 @@ -/* - File: AST Nodes - An abstract syntax tree (AST) is a representation of source code in a computer-friendly format. It is composed of nodes, - each of which represents a certain part of the source code. For example, an node represents an if statement in the - script's source code. Because it is a representation of the source code in memory, it is independent of any specific scripting language. - This allows a script in any language for which a parser exists to be run by the interpreter. - - The AST is produced by an object. It consists of a with an arbitrary amount of statements. These statements are - run in order by an object. A statement may in turn run another block (such as an if statement might if its condition is - met). - - Articles: - - -*/ -var - const -/* - Constants: Operator Precedence - OOP_OR - Logical or - OOP_AND - Logical and - OOP_BIT - Bitwise operations - OOP_EQUAL - Equality checks - OOP_COMPARE - Greater than, less then, etc - OOP_ADD - Addition and subtraction - OOP_MULTIPLY - Multiplication and division - OOP_POW - Exponents - OOP_UNARY - Unary Operators - OOP_GROUP - Parentheses -*/ - OOP_OR = 1 //|| - OOP_AND = OOP_OR + 1 //&& - OOP_BIT = OOP_AND + 1 //&, | - OOP_EQUAL = OOP_BIT + 1 //==, != - OOP_COMPARE = OOP_EQUAL + 1 //>, <, >=, <= - OOP_ADD = OOP_COMPARE + 1 //+, - - OOP_MULTIPLY= OOP_ADD + 1 //*, /, % - OOP_POW = OOP_MULTIPLY+ 1 //^ - OOP_UNARY = OOP_POW + 1 //! - OOP_GROUP = OOP_UNARY + 1 //() - -/* - Class: node -*/ -/node/proc/ToString() - return "[src.type]" -/* - Class: identifier -*/ -/node/identifier - var/id_name - -/node/identifier/New(id) - .=..() - src.id_name=id - -/node/identifier/ToString() - return id_name - -/* - Class: expression -*/ -/node/expression -/* - Class: operator - See and for subtypes. -*/ -/node/expression/op - var/node/expression/exp - var/tmp/name - var/tmp/precedence - -/node/expression/op/New() - .=..() - if(!src.name) src.name="[src.type]" - -/node/expression/op/ToString() - return "operator: [name]" - -/* - Class: FunctionCall -*/ -/node/expression/FunctionCall - //Function calls can also be expressions or statements. - var/func_name - var/node/identifier/object - var/list/parameters = list() - -/* - Class: literal -*/ -/node/expression/value/literal - var/value - -/node/expression/value/literal/New(value) - .=..() - src.value=value - -/node/expression/value/literal/ToString() - return src.value - -/* - Class: variable -*/ -/node/expression/value/variable - var/node/object //Either a node/identifier or another node/expression/value/variable which points to the object - var/node/identifier/id - - -/node/expression/value/variable/New(ident) - .=..() - id=ident - if(istext(id))id=new(id) - -/node/expression/value/variable/ToString() - return src.id.ToString() - -/* - Class: reference -*/ -/node/expression/value/reference - var/datum/value - -/node/expression/value/reference/New(value) - .=..() - src.value=value - -/node/expression/value/reference/ToString() - return "ref: [src.value] ([src.value.type])" +/* + File: AST Nodes + An abstract syntax tree (AST) is a representation of source code in a computer-friendly format. It is composed of nodes, + each of which represents a certain part of the source code. For example, an node represents an if statement in the + script's source code. Because it is a representation of the source code in memory, it is independent of any specific scripting language. + This allows a script in any language for which a parser exists to be run by the interpreter. + + The AST is produced by an object. It consists of a with an arbitrary amount of statements. These statements are + run in order by an object. A statement may in turn run another block (such as an if statement might if its condition is + met). + + Articles: + - +*/ +var + const +/* + Constants: Operator Precedence + OOP_OR - Logical or + OOP_AND - Logical and + OOP_BIT - Bitwise operations + OOP_EQUAL - Equality checks + OOP_COMPARE - Greater than, less then, etc + OOP_ADD - Addition and subtraction + OOP_MULTIPLY - Multiplication and division + OOP_POW - Exponents + OOP_UNARY - Unary Operators + OOP_GROUP - Parentheses +*/ + OOP_OR = 1 //|| + OOP_AND = OOP_OR + 1 //&& + OOP_BIT = OOP_AND + 1 //&, | + OOP_EQUAL = OOP_BIT + 1 //==, != + OOP_COMPARE = OOP_EQUAL + 1 //>, <, >=, <= + OOP_ADD = OOP_COMPARE + 1 //+, - + OOP_MULTIPLY= OOP_ADD + 1 //*, /, % + OOP_POW = OOP_MULTIPLY+ 1 //^ + OOP_UNARY = OOP_POW + 1 //! + OOP_GROUP = OOP_UNARY + 1 //() + +/* + Class: node +*/ +/node/proc/ToString() + return "[src.type]" +/* + Class: identifier +*/ +/node/identifier + var/id_name + +/node/identifier/New(id) + .=..() + src.id_name=id + +/node/identifier/ToString() + return id_name + +/* + Class: expression +*/ +/node/expression +/* + Class: operator + See and for subtypes. +*/ +/node/expression/op + var/node/expression/exp + var/tmp/name + var/tmp/precedence + +/node/expression/op/New() + .=..() + if(!src.name) src.name="[src.type]" + +/node/expression/op/ToString() + return "operator: [name]" + +/* + Class: FunctionCall +*/ +/node/expression/FunctionCall + //Function calls can also be expressions or statements. + var/func_name + var/node/identifier/object + var/list/parameters = list() + +/* + Class: literal +*/ +/node/expression/value/literal + var/value + +/node/expression/value/literal/New(value) + .=..() + src.value=value + +/node/expression/value/literal/ToString() + return src.value + +/* + Class: variable +*/ +/node/expression/value/variable + var/node/object //Either a node/identifier or another node/expression/value/variable which points to the object + var/node/identifier/id + + +/node/expression/value/variable/New(ident) + .=..() + id=ident + if(istext(id))id=new(id) + +/node/expression/value/variable/ToString() + return src.id.ToString() + +/* + Class: reference +*/ +/node/expression/value/reference + var/datum/value + +/node/expression/value/reference/New(value) + .=..() + src.value=value + +/node/expression/value/reference/ToString() + return "ref: [src.value] ([src.value.type])" diff --git a/code/modules/scripting/AST/Blocks.dm b/code/modules/scripting/AST/Blocks.dm index c992d7b4fa..36605e43b6 100644 --- a/code/modules/scripting/AST/Blocks.dm +++ b/code/modules/scripting/AST/Blocks.dm @@ -1,45 +1,45 @@ -/* - File: Block Types -*/ -/* - Class: BlockDefinition - An object representing a set of actions to perform independently from the rest of the script. Blocks are basically just - lists of statements to execute which also contain some local variables and methods. Note that since functions are local to a block, - it is possible to have a function definition inside of any type of block (such as in an if statement or another function), - and not just in the global scope as in many languages. -*/ -/node/BlockDefinition - var/list/statements = list() - var/list/functions = list() - var/list/initial_variables = list() - -/* - Proc: SetVar - Defines a permanent variable. The variable will not be deleted when it goes out of scope. - - Notes: - Since all pre-existing temporary variables are deleted, it is not generally desirable to use this proc after the interpreter has been instantiated. - Instead, use . - - See Also: - - -*/ -/node/BlockDefinition/proc/SetVar(name, value) - initial_variables[name]=value - - -/* - Class: GlobalBlock - A block object representing the global scope. -*/ -// -/node/BlockDefinition/GlobalBlock/New() - initial_variables["null"]=null - return ..() - -/* - Class: FunctionBlock - A block representing a function body. -*/ -// +/* + File: Block Types +*/ +/* + Class: BlockDefinition + An object representing a set of actions to perform independently from the rest of the script. Blocks are basically just + lists of statements to execute which also contain some local variables and methods. Note that since functions are local to a block, + it is possible to have a function definition inside of any type of block (such as in an if statement or another function), + and not just in the global scope as in many languages. +*/ +/node/BlockDefinition + var/list/statements = list() + var/list/functions = list() + var/list/initial_variables = list() + +/* + Proc: SetVar + Defines a permanent variable. The variable will not be deleted when it goes out of scope. + + Notes: + Since all pre-existing temporary variables are deleted, it is not generally desirable to use this proc after the interpreter has been instantiated. + Instead, use . + + See Also: + - +*/ +/node/BlockDefinition/proc/SetVar(name, value) + initial_variables[name]=value + + +/* + Class: GlobalBlock + A block object representing the global scope. +*/ +// +/node/BlockDefinition/GlobalBlock/New() + initial_variables["null"]=null + return ..() + +/* + Class: FunctionBlock + A block representing a function body. +*/ +// /node/BlockDefinition/FunctionBlock \ No newline at end of file diff --git a/code/modules/scripting/AST/Operators/Binary Operators.dm b/code/modules/scripting/AST/Operators/Binary Operators.dm index 5a6fcf7be5..71d9517197 100644 --- a/code/modules/scripting/AST/Operators/Binary Operators.dm +++ b/code/modules/scripting/AST/Operators/Binary Operators.dm @@ -1,174 +1,174 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/* - File: Binary Operators -*/ -/* - Class: binary - Represents a binary operator in the AST. A binary operator takes two operands (ie x and y) and returns a value. -*/ -/node/expression/op/binary - var/node/expression/exp2 - -////////// Comparison Operators ////////// -/* - Class: Equal - Returns true if x = y. -*/ -// -/node/expression/op/binary/Equal - precedence=OOP_EQUAL - -/* - Class: NotEqual - Returns true if x and y aren't equal. -*/ -// -/node/expression/op/binary/NotEqual - precedence=OOP_EQUAL - -/* - Class: Greater - Returns true if x > y. -*/ -// -/node/expression/op/binary/Greater - precedence=OOP_COMPARE - -/* - Class: Less - Returns true if x < y. -*/ -// -/node/expression/op/binary/Less - precedence=OOP_COMPARE - -/* - Class: GreaterOrEqual - Returns true if x >= y. -*/ -// -/node/expression/op/binary/GreaterOrEqual - precedence=OOP_COMPARE - -/* - Class: LessOrEqual - Returns true if x <= y. -*/ -// -/node/expression/op/binary/LessOrEqual - precedence=OOP_COMPARE - - -////////// Logical Operators ////////// - -/* - Class: LogicalAnd - Returns true if x and y are true. -*/ -// -/node/expression/op/binary/LogicalAnd - precedence=OOP_AND - -/* - Class: LogicalOr - Returns true if x, y, or both are true. -*/ -// -/node/expression/op/binary/LogicalOr - precedence=OOP_OR - -/* - Class: LogicalXor - Returns true if either x or y but not both are true. -*/ -// -/node/expression/op/binary/LogicalXor //Not implemented in nS - precedence=OOP_OR - - -////////// Bitwise Operators ////////// - -/* - Class: BitwiseAnd - Performs a bitwise and operation. - - Example: - 011 & 110 = 010 -*/ -// -/node/expression/op/binary/BitwiseAnd - precedence=OOP_BIT - -/* - Class: BitwiseOr - Performs a bitwise or operation. - - Example: - 011 | 110 = 111 -*/ -// -/node/expression/op/binary/BitwiseOr - precedence=OOP_BIT - -/* - Class: BitwiseXor - Performs a bitwise exclusive or operation. - - Example: - 011 xor 110 = 101 -*/ -// -/node/expression/op/binary/BitwiseXor - precedence=OOP_BIT - - -////////// Arithmetic Operators ////////// - -/* - Class: Add - Returns the sum of x and y. -*/ -// -/node/expression/op/binary/Add - precedence=OOP_ADD - -/* - Class: Subtract - Returns the difference of x and y. -*/ -// -/node/expression/op/binary/Subtract - precedence=OOP_ADD - -/* - Class: Multiply - Returns the product of x and y. -*/ -// -/node/expression/op/binary/Multiply - precedence=OOP_MULTIPLY - -/* - Class: Divide - Returns the quotient of x and y. -*/ -// -/node/expression/op/binary/Divide - precedence=OOP_MULTIPLY - -/* - Class: Power - Returns x raised to the power of y. -*/ -// -/node/expression/op/binary/Power - precedence=OOP_POW - -/* - Class: Modulo - Returns the remainder of x / y. -*/ -// -/node/expression/op/binary/Modulo - precedence=OOP_MULTIPLY +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/* + File: Binary Operators +*/ +/* + Class: binary + Represents a binary operator in the AST. A binary operator takes two operands (ie x and y) and returns a value. +*/ +/node/expression/op/binary + var/node/expression/exp2 + +////////// Comparison Operators ////////// +/* + Class: Equal + Returns true if x = y. +*/ +// +/node/expression/op/binary/Equal + precedence=OOP_EQUAL + +/* + Class: NotEqual + Returns true if x and y aren't equal. +*/ +// +/node/expression/op/binary/NotEqual + precedence=OOP_EQUAL + +/* + Class: Greater + Returns true if x > y. +*/ +// +/node/expression/op/binary/Greater + precedence=OOP_COMPARE + +/* + Class: Less + Returns true if x < y. +*/ +// +/node/expression/op/binary/Less + precedence=OOP_COMPARE + +/* + Class: GreaterOrEqual + Returns true if x >= y. +*/ +// +/node/expression/op/binary/GreaterOrEqual + precedence=OOP_COMPARE + +/* + Class: LessOrEqual + Returns true if x <= y. +*/ +// +/node/expression/op/binary/LessOrEqual + precedence=OOP_COMPARE + + +////////// Logical Operators ////////// + +/* + Class: LogicalAnd + Returns true if x and y are true. +*/ +// +/node/expression/op/binary/LogicalAnd + precedence=OOP_AND + +/* + Class: LogicalOr + Returns true if x, y, or both are true. +*/ +// +/node/expression/op/binary/LogicalOr + precedence=OOP_OR + +/* + Class: LogicalXor + Returns true if either x or y but not both are true. +*/ +// +/node/expression/op/binary/LogicalXor //Not implemented in nS + precedence=OOP_OR + + +////////// Bitwise Operators ////////// + +/* + Class: BitwiseAnd + Performs a bitwise and operation. + + Example: + 011 & 110 = 010 +*/ +// +/node/expression/op/binary/BitwiseAnd + precedence=OOP_BIT + +/* + Class: BitwiseOr + Performs a bitwise or operation. + + Example: + 011 | 110 = 111 +*/ +// +/node/expression/op/binary/BitwiseOr + precedence=OOP_BIT + +/* + Class: BitwiseXor + Performs a bitwise exclusive or operation. + + Example: + 011 xor 110 = 101 +*/ +// +/node/expression/op/binary/BitwiseXor + precedence=OOP_BIT + + +////////// Arithmetic Operators ////////// + +/* + Class: Add + Returns the sum of x and y. +*/ +// +/node/expression/op/binary/Add + precedence=OOP_ADD + +/* + Class: Subtract + Returns the difference of x and y. +*/ +// +/node/expression/op/binary/Subtract + precedence=OOP_ADD + +/* + Class: Multiply + Returns the product of x and y. +*/ +// +/node/expression/op/binary/Multiply + precedence=OOP_MULTIPLY + +/* + Class: Divide + Returns the quotient of x and y. +*/ +// +/node/expression/op/binary/Divide + precedence=OOP_MULTIPLY + +/* + Class: Power + Returns x raised to the power of y. +*/ +// +/node/expression/op/binary/Power + precedence=OOP_POW + +/* + Class: Modulo + Returns the remainder of x / y. +*/ +// +/node/expression/op/binary/Modulo + precedence=OOP_MULTIPLY diff --git a/code/modules/scripting/AST/Operators/Unary Operators.dm b/code/modules/scripting/AST/Operators/Unary Operators.dm index 8d2389ed5f..07bb79a8c5 100644 --- a/code/modules/scripting/AST/Operators/Unary Operators.dm +++ b/code/modules/scripting/AST/Operators/Unary Operators.dm @@ -1,51 +1,51 @@ -/* - File: Unary Operators -*/ -/* - Class: unary - Represents a unary operator in the AST. Unary operators take a single operand (referred to as x below) and return a value. -*/ -/node/expression/op/unary - precedence=OOP_UNARY - -/* - Class: LogicalNot - Returns !x. - - Example: - !true = false and !false = true -*/ -// -/node/expression/op/unary/LogicalNot - name="logical not" - -/* - Class: BitwiseNot - Returns the value of a bitwise not operation performed on x. - - Example: - ~10 (decimal 2) = 01 (decimal 1). -*/ -// -/node/expression/op/unary/BitwiseNot - name="bitwise not" - -/* - Class: Minus - Returns -x. -*/ -// -/node/expression/op/unary/Minus - name="minus" - -/* - Class: group - A special unary operator representing a value in parentheses. -*/ -// -/node/expression/op/unary/group - precedence=OOP_GROUP - -/node/expression/op/unary/New(node/expression/exp) - src.exp=exp - return ..() +/* + File: Unary Operators +*/ +/* + Class: unary + Represents a unary operator in the AST. Unary operators take a single operand (referred to as x below) and return a value. +*/ +/node/expression/op/unary + precedence=OOP_UNARY + +/* + Class: LogicalNot + Returns !x. + + Example: + !true = false and !false = true +*/ +// +/node/expression/op/unary/LogicalNot + name="logical not" + +/* + Class: BitwiseNot + Returns the value of a bitwise not operation performed on x. + + Example: + ~10 (decimal 2) = 01 (decimal 1). +*/ +// +/node/expression/op/unary/BitwiseNot + name="bitwise not" + +/* + Class: Minus + Returns -x. +*/ +// +/node/expression/op/unary/Minus + name="minus" + +/* + Class: group + A special unary operator representing a value in parentheses. +*/ +// +/node/expression/op/unary/group + precedence=OOP_GROUP + +/node/expression/op/unary/New(node/expression/exp) + src.exp=exp + return ..() diff --git a/code/modules/scripting/AST/Statements.dm b/code/modules/scripting/AST/Statements.dm index eba7b71ae5..62d0739d27 100644 --- a/code/modules/scripting/AST/Statements.dm +++ b/code/modules/scripting/AST/Statements.dm @@ -1,106 +1,106 @@ -/* - File: Statement Types -*/ -/* - Class: statement - An object representing a single instruction run by an interpreter. -*/ -/node/statement -/* - Class: FunctionCall - Represents a call to a function. -*/ -// -/node/statement/FunctionCall - var/func_name - var/node/identifier/object - var/list/parameters=list() - -/* - Class: FunctionDefinition - Defines a function. -*/ -// -/node/statement/FunctionDefinition - var/func_name - var/list/parameters=list() - var/node/BlockDefinition/FunctionBlock/block - -/* - Class: VariableAssignment - Sets a variable in an accessible scope to the given value if one exists, otherwise initializes a new local variable to the given value. - - Notes: - If a variable with the same name exists in a higher block, the value will be assigned to it. If not, - a new variable is created in the current block. To force creation of a new variable, use . - - See Also: - - -*/ -// -/node/statement/VariableAssignment - var/node/identifier/object - var/node/identifier/var_name - var/node/expression/value - -/* - Class: VariableDeclaration - Intializes a local variable to a null value. - - See Also: - - -*/ -// -/node/statement/VariableDeclaration - var/node/identifier/object - var/node/identifier/var_name - -/* - Class: IfStatement -*/ -// -/node/statement/IfStatement - var/node/BlockDefinition/block - var/node/BlockDefinition/else_block // may be null - var/node/expression/cond - -/* - Class: WhileLoop - Loops while a given condition is true. -*/ -// -/node/statement/WhileLoop - var/node/BlockDefinition/block - var/node/expression/cond - -/* - Class: ForLoop - Loops while test is true, initializing a variable, increasing the variable -*/ -/node/statement/ForLoop - var/node/BlockDefinition/block - var/node/expression/test - var/node/expression/init - var/node/expression/increment - -/* - Class: BreakStatement - Ends a loop. -*/ -// -/node/statement/BreakStatement - -/* - Class: ContinueStatement - Skips to the next iteration of a loop. -*/ -// -/node/statement/ContinueStatement - -/* - Class: ReturnStatement - Ends the function and returns a value. -*/ -// -/node/statement/ReturnStatement +/* + File: Statement Types +*/ +/* + Class: statement + An object representing a single instruction run by an interpreter. +*/ +/node/statement +/* + Class: FunctionCall + Represents a call to a function. +*/ +// +/node/statement/FunctionCall + var/func_name + var/node/identifier/object + var/list/parameters=list() + +/* + Class: FunctionDefinition + Defines a function. +*/ +// +/node/statement/FunctionDefinition + var/func_name + var/list/parameters=list() + var/node/BlockDefinition/FunctionBlock/block + +/* + Class: VariableAssignment + Sets a variable in an accessible scope to the given value if one exists, otherwise initializes a new local variable to the given value. + + Notes: + If a variable with the same name exists in a higher block, the value will be assigned to it. If not, + a new variable is created in the current block. To force creation of a new variable, use . + + See Also: + - +*/ +// +/node/statement/VariableAssignment + var/node/identifier/object + var/node/identifier/var_name + var/node/expression/value + +/* + Class: VariableDeclaration + Intializes a local variable to a null value. + + See Also: + - +*/ +// +/node/statement/VariableDeclaration + var/node/identifier/object + var/node/identifier/var_name + +/* + Class: IfStatement +*/ +// +/node/statement/IfStatement + var/node/BlockDefinition/block + var/node/BlockDefinition/else_block // may be null + var/node/expression/cond + +/* + Class: WhileLoop + Loops while a given condition is true. +*/ +// +/node/statement/WhileLoop + var/node/BlockDefinition/block + var/node/expression/cond + +/* + Class: ForLoop + Loops while test is true, initializing a variable, increasing the variable +*/ +/node/statement/ForLoop + var/node/BlockDefinition/block + var/node/expression/test + var/node/expression/init + var/node/expression/increment + +/* + Class: BreakStatement + Ends a loop. +*/ +// +/node/statement/BreakStatement + +/* + Class: ContinueStatement + Skips to the next iteration of a loop. +*/ +// +/node/statement/ContinueStatement + +/* + Class: ReturnStatement + Ends the function and returns a value. +*/ +// +/node/statement/ReturnStatement var/node/expression/value \ No newline at end of file diff --git a/code/modules/scripting/Errors.dm b/code/modules/scripting/Errors.dm index 8a47bf1c28..ef6cdbe4c2 100644 --- a/code/modules/scripting/Errors.dm +++ b/code/modules/scripting/Errors.dm @@ -1,122 +1,122 @@ -/* - File: Errors -*/ -/* - Class: scriptError - An error scanning or parsing the source code. -*/ -/scriptError - var/message /// A message describing the problem. -/scriptError/New(msg=null) - if(msg)message=msg - -/scriptError/BadToken - message="Unexpected token: " - var/token/token -/scriptError/BadToken/New(token/t) - token=t - if(t&&t.line) message="[t.line]: [message]" - if(istype(t))message+="[t.value]" - else message+="[t]" - -/scriptError/InvalidID - parent_type=/scriptError/BadToken - message="Invalid identifier name: " - -/scriptError/ReservedWord - parent_type=/scriptError/BadToken - message="Identifer using reserved word: " - -/scriptError/BadNumber - parent_type=/scriptError/BadToken - message = "Bad number: " - -/scriptError/BadReturn - var/token/token - message = "Unexpected return statement outside of a function." -/scriptError/BadReturn/New(token/t) - src.token=t - -/scriptError/EndOfFile - message = "Unexpected end of file." - -/scriptError/ExpectedToken - message="Expected: '" -/scriptError/ExpectedToken/New(id, token/T) - if(T && T.line) message="[T.line]: [message]" - message+="[id]'. " - if(T)message+="Found '[T.value]'." - - -/scriptError/UnterminatedComment - message="Unterminated multi-line comment statement: expected */" - -/scriptError/DuplicateFunction - message="Function defined twice." -/scriptError/DuplicateFunction/New(name, token/t) - message="Function '[name]' defined twice." - -/* - Class: runtimeError - An error thrown by the interpreter in running the script. -*/ -/runtimeError - var/name - var/message /// A basic description as to what went wrong. - var/stack/stack - -/** - * Proc: ToString - * Returns a description of the error suitable for showing to the user. - */ -/runtimeError/proc/ToString() - . = "[name]: [message]" - if(!stack.Top()) return - .+="\nStack:" - while(stack.Top()) - var/node/statement/FunctionCall/stmt=stack.Pop() - . += "\n\t [stmt.func_name]()" - -/runtimeError/TypeMismatch - name="TypeMismatchError" -/runtimeError/TypeMismatch/New(op, a, b) - message="Type mismatch: '[a]' [op] '[b]'" - -/runtimeError/UnexpectedReturn - name="UnexpectedReturnError" - message="Unexpected return statement." - -/runtimeError/UnknownInstruction - name="UnknownInstructionError" - message="Unknown instruction type. This may be due to incompatible compiler and interpreter versions or a lack of implementation." - -/runtimeError/UndefinedVariable - name="UndefinedVariableError" -/runtimeError/UndefinedVariable/New(variable) - message="Variable '[variable]' has not been declared." - -/runtimeError/UndefinedFunction - name="UndefinedFunctionError" -/runtimeError/UndefinedFunction/New(function) - message="Function '[function]()' has not been defined." - -/runtimeError/DuplicateVariableDeclaration - name="DuplicateVariableError" -/runtimeError/DuplicateVariableDeclaration/New(variable) - message="Variable '[variable]' was already declared." - -/runtimeError/IterationLimitReached - name="MaxIterationError" - message="A loop has reached its maximum number of iterations." - -/runtimeError/RecursionLimitReached - name="MaxRecursionError" - message="The maximum amount of recursion has been reached." - -/runtimeError/DivisionByZero - name="DivideByZeroError" - message="Division by zero attempted." - -/runtimeError/MaxCPU - name="MaxComputationalUse" +/* + File: Errors +*/ +/* + Class: scriptError + An error scanning or parsing the source code. +*/ +/scriptError + var/message /// A message describing the problem. +/scriptError/New(msg=null) + if(msg)message=msg + +/scriptError/BadToken + message="Unexpected token: " + var/token/token +/scriptError/BadToken/New(token/t) + token=t + if(t&&t.line) message="[t.line]: [message]" + if(istype(t))message+="[t.value]" + else message+="[t]" + +/scriptError/InvalidID + parent_type=/scriptError/BadToken + message="Invalid identifier name: " + +/scriptError/ReservedWord + parent_type=/scriptError/BadToken + message="Identifer using reserved word: " + +/scriptError/BadNumber + parent_type=/scriptError/BadToken + message = "Bad number: " + +/scriptError/BadReturn + var/token/token + message = "Unexpected return statement outside of a function." +/scriptError/BadReturn/New(token/t) + src.token=t + +/scriptError/EndOfFile + message = "Unexpected end of file." + +/scriptError/ExpectedToken + message="Expected: '" +/scriptError/ExpectedToken/New(id, token/T) + if(T && T.line) message="[T.line]: [message]" + message+="[id]'. " + if(T)message+="Found '[T.value]'." + + +/scriptError/UnterminatedComment + message="Unterminated multi-line comment statement: expected */" + +/scriptError/DuplicateFunction + message="Function defined twice." +/scriptError/DuplicateFunction/New(name, token/t) + message="Function '[name]' defined twice." + +/* + Class: runtimeError + An error thrown by the interpreter in running the script. +*/ +/runtimeError + var/name + var/message /// A basic description as to what went wrong. + var/stack/stack + +/** + * Proc: ToString + * Returns a description of the error suitable for showing to the user. + */ +/runtimeError/proc/ToString() + . = "[name]: [message]" + if(!stack.Top()) return + .+="\nStack:" + while(stack.Top()) + var/node/statement/FunctionCall/stmt=stack.Pop() + . += "\n\t [stmt.func_name]()" + +/runtimeError/TypeMismatch + name="TypeMismatchError" +/runtimeError/TypeMismatch/New(op, a, b) + message="Type mismatch: '[a]' [op] '[b]'" + +/runtimeError/UnexpectedReturn + name="UnexpectedReturnError" + message="Unexpected return statement." + +/runtimeError/UnknownInstruction + name="UnknownInstructionError" + message="Unknown instruction type. This may be due to incompatible compiler and interpreter versions or a lack of implementation." + +/runtimeError/UndefinedVariable + name="UndefinedVariableError" +/runtimeError/UndefinedVariable/New(variable) + message="Variable '[variable]' has not been declared." + +/runtimeError/UndefinedFunction + name="UndefinedFunctionError" +/runtimeError/UndefinedFunction/New(function) + message="Function '[function]()' has not been defined." + +/runtimeError/DuplicateVariableDeclaration + name="DuplicateVariableError" +/runtimeError/DuplicateVariableDeclaration/New(variable) + message="Variable '[variable]' was already declared." + +/runtimeError/IterationLimitReached + name="MaxIterationError" + message="A loop has reached its maximum number of iterations." + +/runtimeError/RecursionLimitReached + name="MaxRecursionError" + message="The maximum amount of recursion has been reached." + +/runtimeError/DivisionByZero + name="DivideByZeroError" + message="Division by zero attempted." + +/runtimeError/MaxCPU + name="MaxComputationalUse" message="Maximum amount of computational cycles reached (>= 1000)." \ No newline at end of file diff --git a/code/modules/scripting/IDE.dm b/code/modules/scripting/IDE.dm index f1eb26c458..1d83a64c5c 100644 --- a/code/modules/scripting/IDE.dm +++ b/code/modules/scripting/IDE.dm @@ -1,211 +1,211 @@ -/client/verb/tcssave() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || issilicon(mob)) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - var/tcscode=winget(src, "tcscode", "text") - var/msg="[mob.name] is adding script to server [Server]: [tcscode]" - log_misc(msg) - message_admins("[mob.name] has uploaded a NTLS script to [Machine.SelectedServer] ([mob.x],[mob.y],[mob.z] - JMP)",0,1) - Server.setcode( tcscode ) // this actually saves the code from input to the server - src << output(null, "tcserror") // clear the errors - else - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - - -/client/verb/tcscompile() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - Server.setcode( winget(src, "tcscode", "text") ) // save code first - var/list/compileerrors = Server.compile() // then compile the code! - - // Output all the compile-time errors - src << output(null, "tcserror") - - if(compileerrors.len) - src << output("Compile Errors", "tcserror") - for(var/scriptError/e in compileerrors) - src << output("\t>[e.message]", "tcserror") - src << output("([compileerrors.len] errors)", "tcserror") - - // Output compile errors to all other people viewing the code too - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output(null, "tcserror") - M << output("Compile Errors", "tcserror") - for(var/scriptError/e in compileerrors) - M << output("\t>[e.message]", "tcserror") - M << output("([compileerrors.len] errors)", "tcserror") - - - else - src << output("TCS compilation successful!", "tcserror") - src << output("(0 errors)", "tcserror") - - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output("TCS compilation successful!", "tcserror") - M << output("(0 errors)", "tcserror") - - else - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - -/client/verb/tcsrun() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - Server.setcode( winget(src, "tcscode", "text") ) // save code first - var/list/compileerrors = Server.compile() // then compile the code! - - // Output all the compile-time errors - src << output(null, "tcserror") - - if(compileerrors.len) - src << output("Compile Errors", "tcserror") - for(var/scriptError/e in compileerrors) - src << output("\t>[e.message]", "tcserror") - src << output("([compileerrors.len] errors)", "tcserror") - - // Output compile errors to all other people viewing the code too - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output(null, "tcserror") - M << output("Compile Errors", "tcserror") - for(var/scriptError/e in compileerrors) - M << output("\t>[e.message]", "tcserror") - M << output("([compileerrors.len] errors)", "tcserror") - - else - // Finally, we run the code! - src << output("TCS compilation successful! Code executed.", "tcserror") - src << output("(0 errors)", "tcserror") - - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output("TCS compilation successful!", "tcserror") - M << output("(0 errors)", "tcserror") - - var/datum/signal/signal = new() - signal.data["message"] = "" - if(Server.freq_listening.len > 0) - signal.frequency = Server.freq_listening[1] - else - signal.frequency = PUB_FREQ - signal.data["name"] = "" - signal.data["job"] = "" - signal.data["reject"] = 0 - signal.data["server"] = Server - - Server.Compiler.Run(signal) - - - else - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - - -/client/verb/exittcs() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode == mob) - Machine.storedcode = "[winget(mob, "tcscode", "text")]" - Machine.editingcode = null - else - if(mob in Machine.viewingcode) - Machine.viewingcode.Remove(mob) - -/client/verb/tcsrevert() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - - // Replace quotation marks with quotation macros for proper winset() compatibility - var/showcode = replacetext(Server.rawcode, "\\\"", "\\\\\"") - showcode = replacetext(showcode, "\"", "\\\"") - - winset(mob, "tcscode", "text=\"[showcode]\"") - - src << output(null, "tcserror") // clear the errors - else - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate server machine.", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate machine.", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate machine.", "tcserror") - - -/client/verb/tcsclearmem() - set hidden = 1 - if(mob.machine || issilicon(mob)) - if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - Server.memory = list() // clear the memory - // Show results - src << output(null, "tcserror") - src << output("Server memory cleared!", "tcserror") - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output("Server memory cleared!", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate server machine.", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate machine.", "tcserror") - else - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate machine.", "tcserror") +/client/verb/tcssave() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || issilicon(mob)) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + var/tcscode=winget(src, "tcscode", "text") + var/msg="[mob.name] is adding script to server [Server]: [tcscode]" + log_misc(msg) + message_admins("[mob.name] has uploaded a NTLS script to [Machine.SelectedServer] ([mob.x],[mob.y],[mob.z] - JMP)",0,1) + Server.setcode( tcscode ) // this actually saves the code from input to the server + src << output(null, "tcserror") // clear the errors + else + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + + +/client/verb/tcscompile() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.setcode( winget(src, "tcscode", "text") ) // save code first + var/list/compileerrors = Server.compile() // then compile the code! + + // Output all the compile-time errors + src << output(null, "tcserror") + + if(compileerrors.len) + src << output("Compile Errors", "tcserror") + for(var/scriptError/e in compileerrors) + src << output("\t>[e.message]", "tcserror") + src << output("([compileerrors.len] errors)", "tcserror") + + // Output compile errors to all other people viewing the code too + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output(null, "tcserror") + M << output("Compile Errors", "tcserror") + for(var/scriptError/e in compileerrors) + M << output("\t>[e.message]", "tcserror") + M << output("([compileerrors.len] errors)", "tcserror") + + + else + src << output("TCS compilation successful!", "tcserror") + src << output("(0 errors)", "tcserror") + + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("TCS compilation successful!", "tcserror") + M << output("(0 errors)", "tcserror") + + else + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + +/client/verb/tcsrun() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.setcode( winget(src, "tcscode", "text") ) // save code first + var/list/compileerrors = Server.compile() // then compile the code! + + // Output all the compile-time errors + src << output(null, "tcserror") + + if(compileerrors.len) + src << output("Compile Errors", "tcserror") + for(var/scriptError/e in compileerrors) + src << output("\t>[e.message]", "tcserror") + src << output("([compileerrors.len] errors)", "tcserror") + + // Output compile errors to all other people viewing the code too + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output(null, "tcserror") + M << output("Compile Errors", "tcserror") + for(var/scriptError/e in compileerrors) + M << output("\t>[e.message]", "tcserror") + M << output("([compileerrors.len] errors)", "tcserror") + + else + // Finally, we run the code! + src << output("TCS compilation successful! Code executed.", "tcserror") + src << output("(0 errors)", "tcserror") + + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("TCS compilation successful!", "tcserror") + M << output("(0 errors)", "tcserror") + + var/datum/signal/signal = new() + signal.data["message"] = "" + if(Server.freq_listening.len > 0) + signal.frequency = Server.freq_listening[1] + else + signal.frequency = PUB_FREQ + signal.data["name"] = "" + signal.data["job"] = "" + signal.data["reject"] = 0 + signal.data["server"] = Server + + Server.Compiler.Run(signal) + + + else + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + + +/client/verb/exittcs() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode == mob) + Machine.storedcode = "[winget(mob, "tcscode", "text")]" + Machine.editingcode = null + else + if(mob in Machine.viewingcode) + Machine.viewingcode.Remove(mob) + +/client/verb/tcsrevert() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + + // Replace quotation marks with quotation macros for proper winset() compatibility + var/showcode = replacetext(Server.rawcode, "\\\"", "\\\\\"") + showcode = replacetext(showcode, "\"", "\\\"") + + winset(mob, "tcscode", "text=\"[showcode]\"") + + src << output(null, "tcserror") // clear the errors + else + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate server machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate machine.", "tcserror") + + +/client/verb/tcsclearmem() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.memory = list() // clear the memory + // Show results + src << output(null, "tcserror") + src << output("Server memory cleared!", "tcserror") + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("Server memory cleared!", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate server machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index e486197b84..637b227b86 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -1,280 +1,280 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - - -/* --- Traffic Control Scripting Language --- */ - // NanoTrasen TCS Language - Made by Doohl - -/n_Interpreter/TCS_Interpreter - var/datum/TCS_Compiler/Compiler - -/n_Interpreter/TCS_Interpreter/HandleError(runtimeError/e) - Compiler.Holder.add_entry(e.ToString(), "Execution Error") - -/datum/TCS_Compiler - var/n_Interpreter/TCS_Interpreter/interpreter - var/obj/machinery/telecomms/server/Holder // the server that is running the code - var/ready = 1 // 1 if ready to run code - - /** Proc: Compile - * Compile a raw block of text into a program - * Returns: List of errors - */ - -/datum/TCS_Compiler/proc/Compile(code as message) - var/n_scriptOptions/nS_Options/options = new() - var/n_Scanner/nS_Scanner/scanner = new(code, options) - var/list/tokens = scanner.Scan() - var/n_Parser/nS_Parser/parser = new(tokens, options) - var/node/BlockDefinition/GlobalBlock/program = parser.Parse() - - var/list/returnerrors = list() - - returnerrors += scanner.errors - returnerrors += parser.errors - - if(returnerrors.len) - return returnerrors - - interpreter = new(program) - interpreter.persist = 1 - interpreter.Compiler= src - - return returnerrors - - /* -- Execute the compiled code -- */ -/** Proc: Run - * Executes the compiled code. - * Arguments: - * var/datum/signal/signal - a telecomms signal - * Returns: None - */ -/datum/TCS_Compiler/proc/Run(var/datum/signal/signal) - - if(!ready) - return - - if(!interpreter) - return - - interpreter.container = src - - interpreter.SetVar("PI" , 3.141592653) // value of pi - interpreter.SetVar("E" , 2.718281828) // value of e - interpreter.SetVar("SQURT2" , 1.414213562) // value of the square root of 2 - interpreter.SetVar("FALSE" , 0) // boolean shortcut to 0 - interpreter.SetVar("TRUE" , 1) // boolean shortcut to 1 - - interpreter.SetVar("NORTH" , NORTH) // NORTH (1) - interpreter.SetVar("SOUTH" , SOUTH) // SOUTH (2) - interpreter.SetVar("EAST" , EAST) // EAST (4) - interpreter.SetVar("WEST" , WEST) // WEST (8) - - // Channel macros - interpreter.SetVar("$common", PUB_FREQ) - interpreter.SetVar("$science", SCI_FREQ) - interpreter.SetVar("$command", COMM_FREQ) - interpreter.SetVar("$medical", MED_FREQ) - interpreter.SetVar("$engineering",ENG_FREQ) - interpreter.SetVar("$security", SEC_FREQ) - interpreter.SetVar("$supply", SUP_FREQ) - interpreter.SetVar("$explorer", EXP_FREQ) - - // Signal data - - interpreter.SetVar("$content", signal.data["message"]) - interpreter.SetVar("$freq" , signal.frequency) - interpreter.SetVar("$source" , signal.data["name"]) - interpreter.SetVar("$job" , signal.data["job"]) - interpreter.SetVar("$sign" , signal) - interpreter.SetVar("$pass" , !(signal.data["reject"])) // if the signal isn't rejected, pass = 1; if the signal IS rejected, pass = 0 - - // Set up the script procs - - /* - -> Send another signal to a server - @format: broadcast(content, frequency, source, job) - - @param content: Message to broadcast - @param frequency: Frequency to broadcast to - @param source: The name of the source you wish to imitate. Must be stored in stored_names list. - @param job: The name of the job. - */ - interpreter.SetProc("broadcast", "tcombroadcast", signal, list("message", "freq", "source", "job")) - - /* - -> Store a value permanently to the server machine (not the actual game hosting machine, the ingame machine) - @format: mem(address, value) - - @param address: The memory address (string index) to store a value to - @param value: The value to store to the memory address - */ - interpreter.SetProc("mem", "mem", signal, list("address", "value")) - - /* - -> Delay code for a given amount of deciseconds - @format: sleep(time) - - @param time: time to sleep in deciseconds (1/10th second) - */ - interpreter.SetProc("sleep", GLOBAL_PROC_REF(delay)) - - /* - -> Replaces a string with another string - @format: replace(string, substring, replacestring) - - @param string: the string to search for substrings (best used with $content$ constant) - @param substring: the substring to search for - @param replacestring: the string to replace the substring with - - */ - interpreter.SetProc("replace", GLOBAL_PROC_REF(string_replacetext)) - - /* - -> Locates an element/substring inside of a list or string - @format: find(haystack, needle, start = 1, end = 0) - - @param haystack: the container to search - @param needle: the element to search for - @param start: the position to start in - @param end: the position to end in - - */ - interpreter.SetProc("find", GLOBAL_PROC_REF(smartfind)) - - /* - -> Finds the length of a string or list - @format: length(container) - - @param container: the list or container to measure - - */ - interpreter.SetProc("length", GLOBAL_PROC_REF(smartlength)) - - /* -- Clone functions, carried from default BYOND procs --- */ - - // vector namespace - interpreter.SetProc("vector", GLOBAL_PROC_REF(n_list)) - interpreter.SetProc("at", GLOBAL_PROC_REF(n_listpos)) - interpreter.SetProc("copy", GLOBAL_PROC_REF(n_listcopy)) - interpreter.SetProc("push_back", GLOBAL_PROC_REF(n_listadd)) - interpreter.SetProc("remove", GLOBAL_PROC_REF(n_listremove)) - interpreter.SetProc("cut", GLOBAL_PROC_REF(n_listcut)) - interpreter.SetProc("swap", GLOBAL_PROC_REF(n_listswap)) - interpreter.SetProc("insert", GLOBAL_PROC_REF(n_listinsert)) - - interpreter.SetProc("pick", GLOBAL_PROC_REF(n_pick)) - interpreter.SetProc("prob", GLOBAL_PROC_REF(prob_chance)) - interpreter.SetProc("substr", GLOBAL_PROC_REF(docopytext)) - - // Donkie~ - // Strings - interpreter.SetProc("lower", GLOBAL_PROC_REF(n_lower)) - interpreter.SetProc("upper", GLOBAL_PROC_REF(n_upper)) - interpreter.SetProc("explode", GLOBAL_PROC_REF(string_explode)) - interpreter.SetProc("repeat", GLOBAL_PROC_REF(n_repeat)) - interpreter.SetProc("reverse", GLOBAL_PROC_REF(n_reverse)) - interpreter.SetProc("tonum", GLOBAL_PROC_REF(n_str2num)) - - // Numbers - interpreter.SetProc("tostring", GLOBAL_PROC_REF(n_num2str)) - interpreter.SetProc("sqrt", GLOBAL_PROC_REF(n_sqrt)) - interpreter.SetProc("abs", GLOBAL_PROC_REF(n_abs)) - interpreter.SetProc("floor", GLOBAL_PROC_REF(n_floor)) - interpreter.SetProc("ceil", GLOBAL_PROC_REF(n_ceil)) - interpreter.SetProc("round", GLOBAL_PROC_REF(n_round)) - interpreter.SetProc("clamp", GLOBAL_PROC_REF(n_clamp)) - interpreter.SetProc("inrange", GLOBAL_PROC_REF(n_inrange)) - // End of Donkie~ - - - // Run the compiled code - interpreter.Run() - - // Backwards-apply variables onto signal data - /* sanitize EVERYTHING. fucking players can't be trusted with SHIT */ - - signal.data["message"] = interpreter.GetVar("$content") - signal.frequency = interpreter.GetVar("$freq") - - var/setname = "" - var/obj/machinery/telecomms/server/S = signal.data["server"] - if(interpreter.GetVar("$source") in S.stored_names) - setname = interpreter.GetVar("$source") - else - setname = "[interpreter.GetVar("$source")]" - - if(signal.data["name"] != setname) - signal.data["realname"] = setname - signal.data["name"] = setname - signal.data["job"] = interpreter.GetVar("$job") - signal.data["reject"] = !(interpreter.GetVar("$pass")) // set reject to the opposite of $pass - - // If the message is invalid, just don't broadcast it! - if(signal.data["message"] == "" || !signal.data["message"]) - signal.data["reject"] = 1 - -/* -- Actual language proc code -- */ - -/datum/signal/proc/mem(var/address, var/value) - - if(istext(address)) - var/obj/machinery/telecomms/server/S = data["server"] - - if(!value && value != 0) - return S.memory[address] - - else - S.memory[address] = value - - -/datum/signal/proc/tcombroadcast(var/message, var/freq, var/source, var/job) - - var/datum/signal/newsign = new - var/obj/machinery/telecomms/server/S = data["server"] - var/obj/item/device/radio/hradio = S.server_radio - - if(!hradio) - error("[src] has no radio.") - return - - if((!message || message == "") && message != 0) - message = "*beep*" - if(!source) - source = "[html_encode(uppertext(S.id))]" - hradio = new // sets the hradio as a radio intercom - if(!freq) - freq = PUB_FREQ - if(findtext(num2text(freq), ".")) // if the frequency has been set as a decimal - freq *= 10 // shift the decimal one place - - if(!job) - job = "?" - - newsign.data["mob"] = null - newsign.data["mobtype"] = /mob/living/carbon/human - if(source in S.stored_names) - newsign.data["name"] = source - else - newsign.data["name"] = "[html_encode(uppertext(source))]" - newsign.data["realname"] = newsign.data["name"] - newsign.data["job"] = job - newsign.data["compression"] = 0 - newsign.data["message"] = message - newsign.data["type"] = 2 // artificial broadcast - if(!isnum(freq)) - freq = text2num(freq) - newsign.frequency = freq - - var/datum/radio_frequency/connection = radio_controller.return_frequency(freq) - newsign.data["connection"] = connection - - - newsign.data["radio"] = hradio - newsign.data["vmessage"] = message - newsign.data["vname"] = source - newsign.data["vmask"] = 0 - newsign.data["level"] = list() - - var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub) - if(!pass) - S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this simple message to broadcasters +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + + +/* --- Traffic Control Scripting Language --- */ + // NanoTrasen TCS Language - Made by Doohl + +/n_Interpreter/TCS_Interpreter + var/datum/TCS_Compiler/Compiler + +/n_Interpreter/TCS_Interpreter/HandleError(runtimeError/e) + Compiler.Holder.add_entry(e.ToString(), "Execution Error") + +/datum/TCS_Compiler + var/n_Interpreter/TCS_Interpreter/interpreter + var/obj/machinery/telecomms/server/Holder // the server that is running the code + var/ready = 1 // 1 if ready to run code + + /** Proc: Compile + * Compile a raw block of text into a program + * Returns: List of errors + */ + +/datum/TCS_Compiler/proc/Compile(code as message) + var/n_scriptOptions/nS_Options/options = new() + var/n_Scanner/nS_Scanner/scanner = new(code, options) + var/list/tokens = scanner.Scan() + var/n_Parser/nS_Parser/parser = new(tokens, options) + var/node/BlockDefinition/GlobalBlock/program = parser.Parse() + + var/list/returnerrors = list() + + returnerrors += scanner.errors + returnerrors += parser.errors + + if(returnerrors.len) + return returnerrors + + interpreter = new(program) + interpreter.persist = 1 + interpreter.Compiler= src + + return returnerrors + + /* -- Execute the compiled code -- */ +/** Proc: Run + * Executes the compiled code. + * Arguments: + * var/datum/signal/signal - a telecomms signal + * Returns: None + */ +/datum/TCS_Compiler/proc/Run(var/datum/signal/signal) + + if(!ready) + return + + if(!interpreter) + return + + interpreter.container = src + + interpreter.SetVar("PI" , 3.141592653) // value of pi + interpreter.SetVar("E" , 2.718281828) // value of e + interpreter.SetVar("SQURT2" , 1.414213562) // value of the square root of 2 + interpreter.SetVar("FALSE" , 0) // boolean shortcut to 0 + interpreter.SetVar("TRUE" , 1) // boolean shortcut to 1 + + interpreter.SetVar("NORTH" , NORTH) // NORTH (1) + interpreter.SetVar("SOUTH" , SOUTH) // SOUTH (2) + interpreter.SetVar("EAST" , EAST) // EAST (4) + interpreter.SetVar("WEST" , WEST) // WEST (8) + + // Channel macros + interpreter.SetVar("$common", PUB_FREQ) + interpreter.SetVar("$science", SCI_FREQ) + interpreter.SetVar("$command", COMM_FREQ) + interpreter.SetVar("$medical", MED_FREQ) + interpreter.SetVar("$engineering",ENG_FREQ) + interpreter.SetVar("$security", SEC_FREQ) + interpreter.SetVar("$supply", SUP_FREQ) + interpreter.SetVar("$explorer", EXP_FREQ) + + // Signal data + + interpreter.SetVar("$content", signal.data["message"]) + interpreter.SetVar("$freq" , signal.frequency) + interpreter.SetVar("$source" , signal.data["name"]) + interpreter.SetVar("$job" , signal.data["job"]) + interpreter.SetVar("$sign" , signal) + interpreter.SetVar("$pass" , !(signal.data["reject"])) // if the signal isn't rejected, pass = 1; if the signal IS rejected, pass = 0 + + // Set up the script procs + + /* + -> Send another signal to a server + @format: broadcast(content, frequency, source, job) + + @param content: Message to broadcast + @param frequency: Frequency to broadcast to + @param source: The name of the source you wish to imitate. Must be stored in stored_names list. + @param job: The name of the job. + */ + interpreter.SetProc("broadcast", "tcombroadcast", signal, list("message", "freq", "source", "job")) + + /* + -> Store a value permanently to the server machine (not the actual game hosting machine, the ingame machine) + @format: mem(address, value) + + @param address: The memory address (string index) to store a value to + @param value: The value to store to the memory address + */ + interpreter.SetProc("mem", "mem", signal, list("address", "value")) + + /* + -> Delay code for a given amount of deciseconds + @format: sleep(time) + + @param time: time to sleep in deciseconds (1/10th second) + */ + interpreter.SetProc("sleep", GLOBAL_PROC_REF(delay)) + + /* + -> Replaces a string with another string + @format: replace(string, substring, replacestring) + + @param string: the string to search for substrings (best used with $content$ constant) + @param substring: the substring to search for + @param replacestring: the string to replace the substring with + + */ + interpreter.SetProc("replace", GLOBAL_PROC_REF(string_replacetext)) + + /* + -> Locates an element/substring inside of a list or string + @format: find(haystack, needle, start = 1, end = 0) + + @param haystack: the container to search + @param needle: the element to search for + @param start: the position to start in + @param end: the position to end in + + */ + interpreter.SetProc("find", GLOBAL_PROC_REF(smartfind)) + + /* + -> Finds the length of a string or list + @format: length(container) + + @param container: the list or container to measure + + */ + interpreter.SetProc("length", GLOBAL_PROC_REF(smartlength)) + + /* -- Clone functions, carried from default BYOND procs --- */ + + // vector namespace + interpreter.SetProc("vector", GLOBAL_PROC_REF(n_list)) + interpreter.SetProc("at", GLOBAL_PROC_REF(n_listpos)) + interpreter.SetProc("copy", GLOBAL_PROC_REF(n_listcopy)) + interpreter.SetProc("push_back", GLOBAL_PROC_REF(n_listadd)) + interpreter.SetProc("remove", GLOBAL_PROC_REF(n_listremove)) + interpreter.SetProc("cut", GLOBAL_PROC_REF(n_listcut)) + interpreter.SetProc("swap", GLOBAL_PROC_REF(n_listswap)) + interpreter.SetProc("insert", GLOBAL_PROC_REF(n_listinsert)) + + interpreter.SetProc("pick", GLOBAL_PROC_REF(n_pick)) + interpreter.SetProc("prob", GLOBAL_PROC_REF(prob_chance)) + interpreter.SetProc("substr", GLOBAL_PROC_REF(docopytext)) + + // Donkie~ + // Strings + interpreter.SetProc("lower", GLOBAL_PROC_REF(n_lower)) + interpreter.SetProc("upper", GLOBAL_PROC_REF(n_upper)) + interpreter.SetProc("explode", GLOBAL_PROC_REF(string_explode)) + interpreter.SetProc("repeat", GLOBAL_PROC_REF(n_repeat)) + interpreter.SetProc("reverse", GLOBAL_PROC_REF(n_reverse)) + interpreter.SetProc("tonum", GLOBAL_PROC_REF(n_str2num)) + + // Numbers + interpreter.SetProc("tostring", GLOBAL_PROC_REF(n_num2str)) + interpreter.SetProc("sqrt", GLOBAL_PROC_REF(n_sqrt)) + interpreter.SetProc("abs", GLOBAL_PROC_REF(n_abs)) + interpreter.SetProc("floor", GLOBAL_PROC_REF(n_floor)) + interpreter.SetProc("ceil", GLOBAL_PROC_REF(n_ceil)) + interpreter.SetProc("round", GLOBAL_PROC_REF(n_round)) + interpreter.SetProc("clamp", GLOBAL_PROC_REF(n_clamp)) + interpreter.SetProc("inrange", GLOBAL_PROC_REF(n_inrange)) + // End of Donkie~ + + + // Run the compiled code + interpreter.Run() + + // Backwards-apply variables onto signal data + /* sanitize EVERYTHING. fucking players can't be trusted with SHIT */ + + signal.data["message"] = interpreter.GetVar("$content") + signal.frequency = interpreter.GetVar("$freq") + + var/setname = "" + var/obj/machinery/telecomms/server/S = signal.data["server"] + if(interpreter.GetVar("$source") in S.stored_names) + setname = interpreter.GetVar("$source") + else + setname = "[interpreter.GetVar("$source")]" + + if(signal.data["name"] != setname) + signal.data["realname"] = setname + signal.data["name"] = setname + signal.data["job"] = interpreter.GetVar("$job") + signal.data["reject"] = !(interpreter.GetVar("$pass")) // set reject to the opposite of $pass + + // If the message is invalid, just don't broadcast it! + if(signal.data["message"] == "" || !signal.data["message"]) + signal.data["reject"] = 1 + +/* -- Actual language proc code -- */ + +/datum/signal/proc/mem(var/address, var/value) + + if(istext(address)) + var/obj/machinery/telecomms/server/S = data["server"] + + if(!value && value != 0) + return S.memory[address] + + else + S.memory[address] = value + + +/datum/signal/proc/tcombroadcast(var/message, var/freq, var/source, var/job) + + var/datum/signal/newsign = new + var/obj/machinery/telecomms/server/S = data["server"] + var/obj/item/device/radio/hradio = S.server_radio + + if(!hradio) + error("[src] has no radio.") + return + + if((!message || message == "") && message != 0) + message = "*beep*" + if(!source) + source = "[html_encode(uppertext(S.id))]" + hradio = new // sets the hradio as a radio intercom + if(!freq) + freq = PUB_FREQ + if(findtext(num2text(freq), ".")) // if the frequency has been set as a decimal + freq *= 10 // shift the decimal one place + + if(!job) + job = "?" + + newsign.data["mob"] = null + newsign.data["mobtype"] = /mob/living/carbon/human + if(source in S.stored_names) + newsign.data["name"] = source + else + newsign.data["name"] = "[html_encode(uppertext(source))]" + newsign.data["realname"] = newsign.data["name"] + newsign.data["job"] = job + newsign.data["compression"] = 0 + newsign.data["message"] = message + newsign.data["type"] = 2 // artificial broadcast + if(!isnum(freq)) + freq = text2num(freq) + newsign.frequency = freq + + var/datum/radio_frequency/connection = radio_controller.return_frequency(freq) + newsign.data["connection"] = connection + + + newsign.data["radio"] = hradio + newsign.data["vmessage"] = message + newsign.data["vname"] = source + newsign.data["vmask"] = 0 + newsign.data["level"] = list() + + var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub) + if(!pass) + S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this simple message to broadcasters diff --git a/code/modules/scripting/Implementations/_Logic.dm b/code/modules/scripting/Implementations/_Logic.dm index f1b828cbdf..60b9211a90 100644 --- a/code/modules/scripting/Implementations/_Logic.dm +++ b/code/modules/scripting/Implementations/_Logic.dm @@ -1,291 +1,291 @@ -// Script -> BYOND code procs -#define SCRIPT_MAX_REPLACEMENTS_ALLOWED 200 -// --- List operations (lists known as vectors in n_script) --- - -// Clone of list() -/proc/n_list() - var/list/returnlist = list() - for(var/e in args) - returnlist.Add(e) - return returnlist - -// Clone of pick() -/proc/n_pick() - var/list/finalpick = list() - for(var/e in args) - if(isobject(e)) - if(istype(e, /list)) - var/list/sublist = e - for(var/sube in sublist) - finalpick.Add(sube) - continue - finalpick.Add(e) - - return pick(finalpick) - -// Clone of list[] -/proc/n_listpos(var/list/L, var/pos, var/value) - if(!istype(L, /list)) return - if(isnum(pos)) - if(!value) - if(L.len >= pos) - return L[pos] - else - if(L.len >= pos) - L[pos] = value - else if(istext(pos)) - if(!value) - return L[pos] - else - L[pos] = value - -// Clone of list.Copy() -/proc/n_listcopy(var/list/L, var/start, var/end) - if(!istype(L, /list)) return - return L.Copy(start, end) - -// Clone of list.Add() -/proc/n_listadd() - var/list/chosenlist - var/i = 1 - for(var/e in args) - if(i == 1) - if(isobject(e)) - if(istype(e, /list)) - chosenlist = e - i = 2 - else - if(chosenlist) - chosenlist.Add(e) - -// Clone of list.Remove() -/proc/n_listremove() - var/list/chosenlist - var/i = 1 - for(var/e in args) - if(i == 1) - if(isobject(e)) - if(istype(e, /list)) - chosenlist = e - i = 2 - else - if(chosenlist) - chosenlist.Remove(e) - -// Clone of list.Cut() -/proc/n_listcut(var/list/L, var/start, var/end) - if(!istype(L, /list)) return - return L.Cut(start, end) - -// Clone of list.Swap() -/proc/n_listswap(var/list/L, var/firstindex, var/secondindex) - if(!istype(L, /list)) return - if(L.len >= secondindex && L.len >= firstindex) - return L.Swap(firstindex, secondindex) - -// Clone of list.Insert() -/proc/n_listinsert(var/list/L, var/index, var/element) - if(!istype(L, /list)) return - return L.Insert(index, element) - -// --- Miscellaneous functions --- - -// Clone of sleep() -/proc/delay(var/time) - sleep(time) - -// Clone of prob() -/proc/prob_chance(var/chance) - return prob(chance) - -// Merge of list.Find() and findtext() -/proc/smartfind(var/haystack, var/needle, var/start = 1, var/end = 0) - if(haystack && needle) - if(isobject(haystack)) - if(istype(haystack, /list)) - if(length(haystack) >= end && start > 0) - var/list/listhaystack = haystack - return listhaystack.Find(needle, start, end) - - else - if(istext(haystack)) - if(length(haystack) >= end && start > 0) - return findtext(haystack, needle, start, end) - -// Clone of copytext() -/proc/docopytext(var/string, var/start = 1, var/end = 0) - if(istext(string) && isnum(start) && isnum(end)) - if(start > 0) - return copytext(string, start, end) - -// Clone of length() -/proc/smartlength(var/container) - if(container) - if(istype(container, /list) || istext(container)) - return length(container) - -// BY DONKIE~ -// String stuff -/proc/n_lower(var/string) - if(istext(string)) - return lowertext(string) - -/proc/n_upper(var/string) - if(istext(string)) - return uppertext(string) - -/* -//Makes a list where all indicies in a string is a seperate index in the list -// JUST A HELPER DON'T ADD TO NTSCRIPT -/proc/string_tolist(var/string) - var/list/L = new/list() - - var/i - for(i=1, i<=length(string), i++) - L.Add(copytext(string, i, i)) - - return L - -/proc/string_explode(var/string, var/separator) - if(istext(string)) - if(istext(separator) && separator == "") - return string_tolist(string) - var/i - var/lasti = 1 - var/list/L = new/list() - - for(i=1, i<=length(string)+1, i++) - if(copytext(string, i, i+1) == separator) // We found a separator - L.Add(copytext(string, lasti, i)) - lasti = i+1 - - L.Add(copytext(string, lasti, length(string)+1)) // Adds the last segment - - return L - -Just found out there was already a string explode function, did some benchmarking, and that function were a bit faster, sticking to that. -*/ -/proc/string_explode(var/string, var/separator) - if(istext(string) && istext(separator)) - return splittext(string, separator) - -/proc/n_repeat(var/string, var/amount) - if(istext(string) && isnum(amount)) - var/i - var/newstring = "" - if(length(newstring)*amount >=1000) - return - for(i=0, i<=amount, i++) - if(i>=1000) - break - newstring = newstring + string - - return newstring - -/proc/n_reverse(var/string) - if(istext(string)) - var/newstring = "" - var/i - for(i=length(string), i>0, i--) - if(i>=1000) - break - newstring = newstring + copytext(string, i, i+1) - - return newstring - -// I don't know if it's neccesary to make my own proc, but I think I have to to be able to check for istext. -/proc/n_str2num(var/string) - if(istext(string)) - return text2num(string) - -// Number shit -/proc/n_num2str(var/num) - if(isnum(num)) - return num2text(num) - -// Squareroot -/proc/n_sqrt(var/num) - if(isnum(num)) - return sqrt(num) - -// Magnitude of num -/proc/n_abs(var/num) - if(isnum(num)) - return abs(num) - -// Round down -/proc/n_floor(var/num) - if(isnum(num)) - return round(num) - -// Round up -/proc/n_ceil(var/num) - if(isnum(num)) - return round(num)+1 - -// Round to nearest integer -/proc/n_round(var/num) - if(isnum(num)) - if(num-round(num)<0.5) - return round(num) - return n_ceil(num) - -// Clamps N between min and max -/proc/n_clamp(var/num, var/min=-1, var/max=1) - if(isnum(num)&&isnum(min)&&isnum(max)) - if(num<=min) - return min - if(num>=max) - return max - return num - -// Returns 1 if N is inbetween Min and Max -/proc/n_inrange(var/num, var/min=-1, var/max=1) - if(isnum(num)&&isnum(min)&&isnum(max)) - return ((min <= num) && (num <= max)) -// END OF BY DONKIE :( - -// Non-recursive -// Imported from Mono string.ReplaceUnchecked -/proc/string_replacetext(var/haystack,var/a,var/b) - if(istext(haystack)&&istext(a)&&istext(b)) - var/i = 1 - var/lenh=length(haystack) - var/lena=length(a) - //var/lenb=length(b) - var/count = 0 - var/list/dat = list() - while (i < lenh) - var/found = findtext(haystack, a, i, 0) - //log_misc("findtext([haystack], [a], [i], 0)=[found]") - if (found == 0) // Not found - break - else - if (count < SCRIPT_MAX_REPLACEMENTS_ALLOWED) - dat+=found - count+=1 - else - //log_misc("Script found [a] [count] times, aborted") - break - //log_misc("Found [a] at [found]! Moving up...") - i = found + lena - if (count == 0) - return haystack - //var/nlen = lenh + ((lenb - lena) * count) - var/buf = copytext(haystack,1,dat[1]) // Prefill - var/lastReadPos = 0 - for (i = 1, i <= count, i++) - var/precopy = dat[i] - lastReadPos-1 - //internal static unsafe void CharCopy (String target, int targetIndex, String source, int sourceIndex, int count) - //fixed (char* dest = target, src = source) - //CharCopy (dest + targetIndex, src + sourceIndex, count); - //CharCopy (dest + curPos, source + lastReadPos, precopy); - buf+=copytext(haystack,lastReadPos,precopy) - log_misc("buf+=copytext([haystack],[lastReadPos],[precopy])") - log_misc("[buf]") - lastReadPos = dat[i] + lena - //CharCopy (dest + curPos, replace, newValue.length); - buf+=b - log_misc("[buf]") - buf+=copytext(haystack,lastReadPos, 0) - return buf +// Script -> BYOND code procs +#define SCRIPT_MAX_REPLACEMENTS_ALLOWED 200 +// --- List operations (lists known as vectors in n_script) --- + +// Clone of list() +/proc/n_list() + var/list/returnlist = list() + for(var/e in args) + returnlist.Add(e) + return returnlist + +// Clone of pick() +/proc/n_pick() + var/list/finalpick = list() + for(var/e in args) + if(isobject(e)) + if(istype(e, /list)) + var/list/sublist = e + for(var/sube in sublist) + finalpick.Add(sube) + continue + finalpick.Add(e) + + return pick(finalpick) + +// Clone of list[] +/proc/n_listpos(var/list/L, var/pos, var/value) + if(!istype(L, /list)) return + if(isnum(pos)) + if(!value) + if(L.len >= pos) + return L[pos] + else + if(L.len >= pos) + L[pos] = value + else if(istext(pos)) + if(!value) + return L[pos] + else + L[pos] = value + +// Clone of list.Copy() +/proc/n_listcopy(var/list/L, var/start, var/end) + if(!istype(L, /list)) return + return L.Copy(start, end) + +// Clone of list.Add() +/proc/n_listadd() + var/list/chosenlist + var/i = 1 + for(var/e in args) + if(i == 1) + if(isobject(e)) + if(istype(e, /list)) + chosenlist = e + i = 2 + else + if(chosenlist) + chosenlist.Add(e) + +// Clone of list.Remove() +/proc/n_listremove() + var/list/chosenlist + var/i = 1 + for(var/e in args) + if(i == 1) + if(isobject(e)) + if(istype(e, /list)) + chosenlist = e + i = 2 + else + if(chosenlist) + chosenlist.Remove(e) + +// Clone of list.Cut() +/proc/n_listcut(var/list/L, var/start, var/end) + if(!istype(L, /list)) return + return L.Cut(start, end) + +// Clone of list.Swap() +/proc/n_listswap(var/list/L, var/firstindex, var/secondindex) + if(!istype(L, /list)) return + if(L.len >= secondindex && L.len >= firstindex) + return L.Swap(firstindex, secondindex) + +// Clone of list.Insert() +/proc/n_listinsert(var/list/L, var/index, var/element) + if(!istype(L, /list)) return + return L.Insert(index, element) + +// --- Miscellaneous functions --- + +// Clone of sleep() +/proc/delay(var/time) + sleep(time) + +// Clone of prob() +/proc/prob_chance(var/chance) + return prob(chance) + +// Merge of list.Find() and findtext() +/proc/smartfind(var/haystack, var/needle, var/start = 1, var/end = 0) + if(haystack && needle) + if(isobject(haystack)) + if(istype(haystack, /list)) + if(length(haystack) >= end && start > 0) + var/list/listhaystack = haystack + return listhaystack.Find(needle, start, end) + + else + if(istext(haystack)) + if(length(haystack) >= end && start > 0) + return findtext(haystack, needle, start, end) + +// Clone of copytext() +/proc/docopytext(var/string, var/start = 1, var/end = 0) + if(istext(string) && isnum(start) && isnum(end)) + if(start > 0) + return copytext(string, start, end) + +// Clone of length() +/proc/smartlength(var/container) + if(container) + if(istype(container, /list) || istext(container)) + return length(container) + +// BY DONKIE~ +// String stuff +/proc/n_lower(var/string) + if(istext(string)) + return lowertext(string) + +/proc/n_upper(var/string) + if(istext(string)) + return uppertext(string) + +/* +//Makes a list where all indicies in a string is a seperate index in the list +// JUST A HELPER DON'T ADD TO NTSCRIPT +/proc/string_tolist(var/string) + var/list/L = new/list() + + var/i + for(i=1, i<=length(string), i++) + L.Add(copytext(string, i, i)) + + return L + +/proc/string_explode(var/string, var/separator) + if(istext(string)) + if(istext(separator) && separator == "") + return string_tolist(string) + var/i + var/lasti = 1 + var/list/L = new/list() + + for(i=1, i<=length(string)+1, i++) + if(copytext(string, i, i+1) == separator) // We found a separator + L.Add(copytext(string, lasti, i)) + lasti = i+1 + + L.Add(copytext(string, lasti, length(string)+1)) // Adds the last segment + + return L + +Just found out there was already a string explode function, did some benchmarking, and that function were a bit faster, sticking to that. +*/ +/proc/string_explode(var/string, var/separator) + if(istext(string) && istext(separator)) + return splittext(string, separator) + +/proc/n_repeat(var/string, var/amount) + if(istext(string) && isnum(amount)) + var/i + var/newstring = "" + if(length(newstring)*amount >=1000) + return + for(i=0, i<=amount, i++) + if(i>=1000) + break + newstring = newstring + string + + return newstring + +/proc/n_reverse(var/string) + if(istext(string)) + var/newstring = "" + var/i + for(i=length(string), i>0, i--) + if(i>=1000) + break + newstring = newstring + copytext(string, i, i+1) + + return newstring + +// I don't know if it's neccesary to make my own proc, but I think I have to to be able to check for istext. +/proc/n_str2num(var/string) + if(istext(string)) + return text2num(string) + +// Number shit +/proc/n_num2str(var/num) + if(isnum(num)) + return num2text(num) + +// Squareroot +/proc/n_sqrt(var/num) + if(isnum(num)) + return sqrt(num) + +// Magnitude of num +/proc/n_abs(var/num) + if(isnum(num)) + return abs(num) + +// Round down +/proc/n_floor(var/num) + if(isnum(num)) + return round(num) + +// Round up +/proc/n_ceil(var/num) + if(isnum(num)) + return round(num)+1 + +// Round to nearest integer +/proc/n_round(var/num) + if(isnum(num)) + if(num-round(num)<0.5) + return round(num) + return n_ceil(num) + +// Clamps N between min and max +/proc/n_clamp(var/num, var/min=-1, var/max=1) + if(isnum(num)&&isnum(min)&&isnum(max)) + if(num<=min) + return min + if(num>=max) + return max + return num + +// Returns 1 if N is inbetween Min and Max +/proc/n_inrange(var/num, var/min=-1, var/max=1) + if(isnum(num)&&isnum(min)&&isnum(max)) + return ((min <= num) && (num <= max)) +// END OF BY DONKIE :( + +// Non-recursive +// Imported from Mono string.ReplaceUnchecked +/proc/string_replacetext(var/haystack,var/a,var/b) + if(istext(haystack)&&istext(a)&&istext(b)) + var/i = 1 + var/lenh=length(haystack) + var/lena=length(a) + //var/lenb=length(b) + var/count = 0 + var/list/dat = list() + while (i < lenh) + var/found = findtext(haystack, a, i, 0) + //log_misc("findtext([haystack], [a], [i], 0)=[found]") + if (found == 0) // Not found + break + else + if (count < SCRIPT_MAX_REPLACEMENTS_ALLOWED) + dat+=found + count+=1 + else + //log_misc("Script found [a] [count] times, aborted") + break + //log_misc("Found [a] at [found]! Moving up...") + i = found + lena + if (count == 0) + return haystack + //var/nlen = lenh + ((lenb - lena) * count) + var/buf = copytext(haystack,1,dat[1]) // Prefill + var/lastReadPos = 0 + for (i = 1, i <= count, i++) + var/precopy = dat[i] - lastReadPos-1 + //internal static unsafe void CharCopy (String target, int targetIndex, String source, int sourceIndex, int count) + //fixed (char* dest = target, src = source) + //CharCopy (dest + targetIndex, src + sourceIndex, count); + //CharCopy (dest + curPos, source + lastReadPos, precopy); + buf+=copytext(haystack,lastReadPos,precopy) + log_misc("buf+=copytext([haystack],[lastReadPos],[precopy])") + log_misc("[buf]") + lastReadPos = dat[i] + lena + //CharCopy (dest + curPos, replace, newValue.length); + buf+=b + log_misc("[buf]") + buf+=copytext(haystack,lastReadPos, 0) + return buf diff --git a/code/modules/scripting/Interpreter/Evaluation.dm b/code/modules/scripting/Interpreter/Evaluation.dm index 6c206dd1f2..be488c9ddb 100644 --- a/code/modules/scripting/Interpreter/Evaluation.dm +++ b/code/modules/scripting/Interpreter/Evaluation.dm @@ -1,167 +1,167 @@ -/proc/isobject(x) - return !(isnum(x) || istext(x)) - -/n_Interpreter/proc/Eval(node/expression/exp) - if(istype(exp, /node/expression/FunctionCall)) - return RunFunction(exp) - else if(istype(exp, /node/expression/op)) - return EvalOperator(exp) - else if(istype(exp, /node/expression/value/literal)) - var/node/expression/value/literal/lit=exp - return lit.value - else if(istype(exp, /node/expression/value/reference)) - var/node/expression/value/reference/ref=exp - return ref.value - else if(istype(exp, /node/expression/value/variable)) - var/node/expression/value/variable/v=exp - if(!v.object) - return Eval(GetVariable(v.id.id_name)) - else - var/datum/D - if(istype(v.object, /node/identifier)) - D=GetVariable(v.object:id_name) - else - D=v.object - D=Eval(D) - if(!isobject(D)) - return null - if(!D.vars.Find(v.id.id_name)) - RaiseError(new/runtimeError/UndefinedVariable("[v.object.ToString()].[v.id.id_name]")) - return null - return Eval(D.vars[v.id.id_name]) - else if(istype(exp, /node/expression)) - RaiseError(new/runtimeError/UnknownInstruction()) - else - return exp - -/n_Interpreter/proc/EvalOperator(node/expression/op/exp) - if(istype(exp, /node/expression/op/binary)) - var/node/expression/op/binary/bin=exp - switch(bin.type) - if(/node/expression/op/binary/Equal) - return Equal(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/NotEqual) - return NotEqual(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Greater) - return Greater(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Less) - return Less(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/GreaterOrEqual) - return GreaterOrEqual(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/LessOrEqual) - return LessOrEqual(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/LogicalAnd) - return LogicalAnd(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/LogicalOr) - return LogicalOr(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/LogicalXor) - return LogicalXor(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/BitwiseAnd) - return BitwiseAnd(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/BitwiseOr) - return BitwiseOr(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/BitwiseXor) - return BitwiseXor(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Add) - return Add(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Subtract) - return Subtract(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Multiply) - return Multiply(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Divide) - return Divide(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Power) - return Power(Eval(bin.exp), Eval(bin.exp2)) - if(/node/expression/op/binary/Modulo) - return Modulo(Eval(bin.exp), Eval(bin.exp2)) - else - RaiseError(new/runtimeError/UnknownInstruction()) - return - switch(exp.type) - if(/node/expression/op/unary/Minus) - return Minus(Eval(exp.exp)) - if(/node/expression/op/unary/LogicalNot) - return LogicalNot(Eval(exp.exp)) - if(/node/expression/op/unary/BitwiseNot) - return BitwiseNot(Eval(exp.exp)) - if(/node/expression/op/unary/group) - return Eval(exp.exp) - else - RaiseError(new/runtimeError/UnknownInstruction()) - - -//Binary// - //Comparison operators -/n_Interpreter/proc/Equal(a, b) return a==b -/n_Interpreter/proc/NotEqual(a, b) return a!=b //LogicalNot(Equal(a, b)) -/n_Interpreter/proc/Greater(a, b) return a>b -/n_Interpreter/proc/Less(a, b) return a=b -/n_Interpreter/proc/LessOrEqual(a, b) return a<=b - //Logical Operators -/n_Interpreter/proc/LogicalAnd(a, b) return a&&b -/n_Interpreter/proc/LogicalOr(a, b) return a||b -/n_Interpreter/proc/LogicalXor(a, b) return (a||b) && !(a&&b) - //Bitwise Operators -/n_Interpreter/proc/BitwiseAnd(a, b) return a&b -/n_Interpreter/proc/BitwiseOr(a, b) return a|b -/n_Interpreter/proc/BitwiseXor(a, b) return a^b - //Arithmetic Operators -/n_Interpreter/proc/Add(a, b) - if(istext(a)&&!istext(b)) b="[b]" - else if(istext(b)&&!istext(a)) a="[a]" - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("+", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("+", a, b)) - return null - return a+b -/n_Interpreter/proc/Subtract(a, b) - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("-", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("-", a, b)) - return null - return a-b -/n_Interpreter/proc/Divide(a, b) - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("/", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("/", a, b)) - return null - if(b==0) - RaiseError(new/runtimeError/DivisionByZero()) - return null - return a/b -/n_Interpreter/proc/Multiply(a, b) - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("*", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("*", a, b)) - return null - return a*b -/n_Interpreter/proc/Modulo(a, b) - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("%", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("%", a, b)) - return null - return a%b -/n_Interpreter/proc/Power(a, b) - if(isobject(a) && !isobject(b)) - RaiseError(new/runtimeError/TypeMismatch("**", a, b)) - return null - else if(isobject(b) && !isobject(a)) - RaiseError(new/runtimeError/TypeMismatch("**", a, b)) - return null - return a**b - -//Unary// -/n_Interpreter/proc/Minus(a) return -a -/n_Interpreter/proc/LogicalNot(a) return !a -/n_Interpreter/proc/BitwiseNot(a) return ~a +/proc/isobject(x) + return !(isnum(x) || istext(x)) + +/n_Interpreter/proc/Eval(node/expression/exp) + if(istype(exp, /node/expression/FunctionCall)) + return RunFunction(exp) + else if(istype(exp, /node/expression/op)) + return EvalOperator(exp) + else if(istype(exp, /node/expression/value/literal)) + var/node/expression/value/literal/lit=exp + return lit.value + else if(istype(exp, /node/expression/value/reference)) + var/node/expression/value/reference/ref=exp + return ref.value + else if(istype(exp, /node/expression/value/variable)) + var/node/expression/value/variable/v=exp + if(!v.object) + return Eval(GetVariable(v.id.id_name)) + else + var/datum/D + if(istype(v.object, /node/identifier)) + D=GetVariable(v.object:id_name) + else + D=v.object + D=Eval(D) + if(!isobject(D)) + return null + if(!D.vars.Find(v.id.id_name)) + RaiseError(new/runtimeError/UndefinedVariable("[v.object.ToString()].[v.id.id_name]")) + return null + return Eval(D.vars[v.id.id_name]) + else if(istype(exp, /node/expression)) + RaiseError(new/runtimeError/UnknownInstruction()) + else + return exp + +/n_Interpreter/proc/EvalOperator(node/expression/op/exp) + if(istype(exp, /node/expression/op/binary)) + var/node/expression/op/binary/bin=exp + switch(bin.type) + if(/node/expression/op/binary/Equal) + return Equal(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/NotEqual) + return NotEqual(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Greater) + return Greater(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Less) + return Less(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/GreaterOrEqual) + return GreaterOrEqual(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/LessOrEqual) + return LessOrEqual(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/LogicalAnd) + return LogicalAnd(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/LogicalOr) + return LogicalOr(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/LogicalXor) + return LogicalXor(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/BitwiseAnd) + return BitwiseAnd(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/BitwiseOr) + return BitwiseOr(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/BitwiseXor) + return BitwiseXor(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Add) + return Add(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Subtract) + return Subtract(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Multiply) + return Multiply(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Divide) + return Divide(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Power) + return Power(Eval(bin.exp), Eval(bin.exp2)) + if(/node/expression/op/binary/Modulo) + return Modulo(Eval(bin.exp), Eval(bin.exp2)) + else + RaiseError(new/runtimeError/UnknownInstruction()) + return + switch(exp.type) + if(/node/expression/op/unary/Minus) + return Minus(Eval(exp.exp)) + if(/node/expression/op/unary/LogicalNot) + return LogicalNot(Eval(exp.exp)) + if(/node/expression/op/unary/BitwiseNot) + return BitwiseNot(Eval(exp.exp)) + if(/node/expression/op/unary/group) + return Eval(exp.exp) + else + RaiseError(new/runtimeError/UnknownInstruction()) + + +//Binary// + //Comparison operators +/n_Interpreter/proc/Equal(a, b) return a==b +/n_Interpreter/proc/NotEqual(a, b) return a!=b //LogicalNot(Equal(a, b)) +/n_Interpreter/proc/Greater(a, b) return a>b +/n_Interpreter/proc/Less(a, b) return a=b +/n_Interpreter/proc/LessOrEqual(a, b) return a<=b + //Logical Operators +/n_Interpreter/proc/LogicalAnd(a, b) return a&&b +/n_Interpreter/proc/LogicalOr(a, b) return a||b +/n_Interpreter/proc/LogicalXor(a, b) return (a||b) && !(a&&b) + //Bitwise Operators +/n_Interpreter/proc/BitwiseAnd(a, b) return a&b +/n_Interpreter/proc/BitwiseOr(a, b) return a|b +/n_Interpreter/proc/BitwiseXor(a, b) return a^b + //Arithmetic Operators +/n_Interpreter/proc/Add(a, b) + if(istext(a)&&!istext(b)) b="[b]" + else if(istext(b)&&!istext(a)) a="[a]" + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("+", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("+", a, b)) + return null + return a+b +/n_Interpreter/proc/Subtract(a, b) + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("-", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("-", a, b)) + return null + return a-b +/n_Interpreter/proc/Divide(a, b) + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("/", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("/", a, b)) + return null + if(b==0) + RaiseError(new/runtimeError/DivisionByZero()) + return null + return a/b +/n_Interpreter/proc/Multiply(a, b) + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("*", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("*", a, b)) + return null + return a*b +/n_Interpreter/proc/Modulo(a, b) + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("%", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("%", a, b)) + return null + return a%b +/n_Interpreter/proc/Power(a, b) + if(isobject(a) && !isobject(b)) + RaiseError(new/runtimeError/TypeMismatch("**", a, b)) + return null + else if(isobject(b) && !isobject(a)) + RaiseError(new/runtimeError/TypeMismatch("**", a, b)) + return null + return a**b + +//Unary// +/n_Interpreter/proc/Minus(a) return -a +/n_Interpreter/proc/LogicalNot(a) return !a +/n_Interpreter/proc/BitwiseNot(a) return ~a diff --git a/code/modules/scripting/Interpreter/Interaction.dm b/code/modules/scripting/Interpreter/Interaction.dm index 231281a0c9..f4b0330bb8 100644 --- a/code/modules/scripting/Interpreter/Interaction.dm +++ b/code/modules/scripting/Interpreter/Interaction.dm @@ -1,140 +1,140 @@ -/* - File: Interpreter (Public) - Contains methods for interacting with the interpreter. -*/ -/* - Class: n_Interpreter - Procedures allowing for interaction with the script that is being run by the interpreter object. -*/ -/n_Interpreter - -/* - Proc: Load - Loads a 'compiled' script into memory. - - Parameters: - program - A object which represents the script's global scope. -*/ -/n_Interpreter/proc/Load(node/BlockDefinition/GlobalBlock/program) - ASSERT(program) - src.program = program - CreateGlobalScope() - -/* - Proc: Run - Runs the script. -*/ -/n_Interpreter/proc/Run() - cur_recursion = 0 // reset recursion - cur_statements = 0 // reset CPU tracking - alertadmins = 0 - - ASSERT(src.program) - RunBlock(src.program) - -/* - Proc: SetVar - Defines a global variable for the duration of the next execution of a script. - - Notes: - This differs from in that variables set using this procedure only last for the session, - while those defined from the block object persist if it is ran multiple times. - - See Also: - - -*/ -/n_Interpreter/proc/SetVar(name, value) - if(!istext(name)) - //CRASH("Invalid variable name") - return - AssignVariable(name, value) - -/* - Proc: SetProc - Defines a procedure to be available to the script. - - Parameters: - name - The name of the procedure as exposed to the script. - path - The typepath of a proc to be called when the function call is read by the interpreter, or, if object is specified, a string representing the procedure's name. - object - (Optional) An object which will the be target of a function call. - params - Only required if object is not null, a list of the names of parameters the proc takes. -*/ -/n_Interpreter/proc/SetProc(name, path, object=null, list/params=null) - if(!istext(name)) - //CRASH("Invalid function name") - return - if(!object) - globalScope.functions[name] = path - return - var/node/statement/FunctionDefinition/S = new() - S.func_name = name - S.parameters = params - S.block = new() - S.block.SetVar("src", object) - var/node/expression/FunctionCall/C = new() - C.func_name = path - C.object = new("src") - for(var/p in params) - C.parameters += new/node/expression/value/variable(p) - var/node/statement/ReturnStatement/R=new() - R.value=C - S.block.statements += R - globalScope.functions[name] = S -/* - Proc: VarExists - Checks whether a global variable with the specified name exists. -*/ -/n_Interpreter/proc/VarExists(name) - return globalScope.variables.Find(name) //convert to 1/0 first? - -/* - Proc: ProcExists - Checks whether a global function with the specified name exists. -*/ -/n_Interpreter/proc/ProcExists(name) - return globalScope.functions.Find(name) - -/* - Proc: GetVar - Returns the value of a global variable in the script. Remember to ensure that the variable exists before calling this procedure. - - See Also: - - -*/ -/n_Interpreter/proc/GetVar(name) - if(!VarExists(name)) - //CRASH("No variable named '[name]'.") - return - var/x = globalScope.variables[name] - return Eval(x) - -/* - Proc: CallProc - Calls a global function defined in the script and, amazingly enough, returns its return value. Remember to ensure that the function - exists before calling this procedure. - - See Also: - - -*/ -/n_Interpreter/proc/CallProc(name, params[]=null) - if(!ProcExists(name)) - //CRASH("No function named '[name]'.") - return - var/node/statement/FunctionDefinition/func = globalScope.functions[name] - if(istype(func)) - var/node/statement/FunctionCall/stmt = new - stmt.func_name = func.func_name - stmt.parameters = params - return RunFunction(stmt) - else - return call(func)(arglist(params)) - //CRASH("Unknown function type '[name]'.") - -/* - Event: HandleError - Called when the interpreter throws a runtime error. - - See Also: - - -*/ +/* + File: Interpreter (Public) + Contains methods for interacting with the interpreter. +*/ +/* + Class: n_Interpreter + Procedures allowing for interaction with the script that is being run by the interpreter object. +*/ +/n_Interpreter + +/* + Proc: Load + Loads a 'compiled' script into memory. + + Parameters: + program - A object which represents the script's global scope. +*/ +/n_Interpreter/proc/Load(node/BlockDefinition/GlobalBlock/program) + ASSERT(program) + src.program = program + CreateGlobalScope() + +/* + Proc: Run + Runs the script. +*/ +/n_Interpreter/proc/Run() + cur_recursion = 0 // reset recursion + cur_statements = 0 // reset CPU tracking + alertadmins = 0 + + ASSERT(src.program) + RunBlock(src.program) + +/* + Proc: SetVar + Defines a global variable for the duration of the next execution of a script. + + Notes: + This differs from in that variables set using this procedure only last for the session, + while those defined from the block object persist if it is ran multiple times. + + See Also: + - +*/ +/n_Interpreter/proc/SetVar(name, value) + if(!istext(name)) + //CRASH("Invalid variable name") + return + AssignVariable(name, value) + +/* + Proc: SetProc + Defines a procedure to be available to the script. + + Parameters: + name - The name of the procedure as exposed to the script. + path - The typepath of a proc to be called when the function call is read by the interpreter, or, if object is specified, a string representing the procedure's name. + object - (Optional) An object which will the be target of a function call. + params - Only required if object is not null, a list of the names of parameters the proc takes. +*/ +/n_Interpreter/proc/SetProc(name, path, object=null, list/params=null) + if(!istext(name)) + //CRASH("Invalid function name") + return + if(!object) + globalScope.functions[name] = path + return + var/node/statement/FunctionDefinition/S = new() + S.func_name = name + S.parameters = params + S.block = new() + S.block.SetVar("src", object) + var/node/expression/FunctionCall/C = new() + C.func_name = path + C.object = new("src") + for(var/p in params) + C.parameters += new/node/expression/value/variable(p) + var/node/statement/ReturnStatement/R=new() + R.value=C + S.block.statements += R + globalScope.functions[name] = S +/* + Proc: VarExists + Checks whether a global variable with the specified name exists. +*/ +/n_Interpreter/proc/VarExists(name) + return globalScope.variables.Find(name) //convert to 1/0 first? + +/* + Proc: ProcExists + Checks whether a global function with the specified name exists. +*/ +/n_Interpreter/proc/ProcExists(name) + return globalScope.functions.Find(name) + +/* + Proc: GetVar + Returns the value of a global variable in the script. Remember to ensure that the variable exists before calling this procedure. + + See Also: + - +*/ +/n_Interpreter/proc/GetVar(name) + if(!VarExists(name)) + //CRASH("No variable named '[name]'.") + return + var/x = globalScope.variables[name] + return Eval(x) + +/* + Proc: CallProc + Calls a global function defined in the script and, amazingly enough, returns its return value. Remember to ensure that the function + exists before calling this procedure. + + See Also: + - +*/ +/n_Interpreter/proc/CallProc(name, params[]=null) + if(!ProcExists(name)) + //CRASH("No function named '[name]'.") + return + var/node/statement/FunctionDefinition/func = globalScope.functions[name] + if(istype(func)) + var/node/statement/FunctionCall/stmt = new + stmt.func_name = func.func_name + stmt.parameters = params + return RunFunction(stmt) + else + return call(func)(arglist(params)) + //CRASH("Unknown function type '[name]'.") + +/* + Event: HandleError + Called when the interpreter throws a runtime error. + + See Also: + - +*/ /n_Interpreter/proc/HandleError(runtimeError/e) \ No newline at end of file diff --git a/code/modules/scripting/Interpreter/Interpreter.dm b/code/modules/scripting/Interpreter/Interpreter.dm index efdf1f7651..66ea0637cf 100644 --- a/code/modules/scripting/Interpreter/Interpreter.dm +++ b/code/modules/scripting/Interpreter/Interpreter.dm @@ -1,309 +1,309 @@ -/* - File: Interpreter (Internal) -*/ -/* - Class: n_Interpreter -*/ -/* - Macros: Status Macros - RETURNING - Indicates that the current function is returning a value. - BREAKING - Indicates that the current loop is being terminated. - CONTINUING - Indicates that the rest of the current iteration of a loop is being skipped. -*/ -#define RETURNING 1 -#define BREAKING 2 -#define CONTINUING 4 -/n_Interpreter - var/scope/curScope - var/scope/globalScope - var/node/BlockDefinition/program - var/node/statement/FunctionDefinition/curFunction - var/stack/scopes = new() - var/stack/functions = new() - - var/datum/container // associated container for interpeter -/* - Var: status - A variable indicating that the rest of the current block should be skipped. This may be set to any combination of . -*/ - var/status=0 - var/returnVal - - var/max_statements=1000 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation - var/cur_statements=0 // current amount of statements called - var/alertadmins=0 // set to 1 if the admins shouldn't be notified of anymore issues - var/max_iterations=100 // max number of uninterrupted loops possible - var/max_recursion=50 // max recursions without returning anything (or completing the code block) - var/cur_recursion=0 // current amount of recursion -/* - Var: persist - If 0, global variables will be reset after Run() finishes. -*/ - var/persist=1 - var/paused=0 - -/* - Constructor: New - Calls with the given parameters. -*/ -/n_Interpreter/New(node/BlockDefinition/GlobalBlock/program=null) - .=..() - if(program)Load(program) - -/* - Proc: RaiseError - Raises a runtime error. -*/ -/n_Interpreter/proc/RaiseError(runtimeError/e) - e.stack=functions.Copy() - e.stack.Push(curFunction) - src.HandleError(e) - -/n_Interpreter/proc/CreateScope(node/BlockDefinition/B) - var/scope/S = new(B, curScope) - scopes.Push(curScope) - curScope = S - return S - -/n_Interpreter/proc/CreateGlobalScope() - scopes.Clear() - var/scope/S = new(program, null) - globalScope = S - return S - -/* -Proc: RunBlock -Runs each statement in a block of code. -*/ -/n_Interpreter/proc/RunBlock(node/BlockDefinition/Block, scope/scope = null) - var/is_global = istype(Block, /node/BlockDefinition/GlobalBlock) - if(!is_global) - if(scope) - curScope = scope - else - CreateScope(Block) - else - if(!persist) - CreateGlobalScope() - curScope = globalScope - - if(cur_statements < max_statements) - - for(var/node/statement/S in Block.statements) - while(paused) sleep(10) - - cur_statements++ - if(cur_statements >= max_statements) - RaiseError(new/runtimeError/MaxCPU()) - - if(container && !alertadmins) - if(istype(container, /datum/TCS_Compiler)) - var/datum/TCS_Compiler/Compiler = container - var/obj/machinery/telecomms/server/Holder = Compiler.Holder - var/message = "Potential crash-inducing NTSL script detected at telecommunications server [Compiler.Holder] ([Holder.x], [Holder.y], [Holder.z])." - - alertadmins = 1 - message_admins(message, 1) - break - - if(istype(S, /node/statement/VariableAssignment)) - var/node/statement/VariableAssignment/stmt = S - var/name = stmt.var_name.id_name - if(!stmt.object) - // Below we assign the variable first to null if it doesn't already exist. - // This is necessary for assignments like +=, and when the variable is used in a function - // If the variable already exists in a different block, then AssignVariable will automatically use that one. - if(!IsVariableAccessible(name)) - AssignVariable(name, null) - AssignVariable(name, Eval(stmt.value)) - else - var/datum/D = Eval(GetVariable(stmt.object.id_name)) - if(!D) return - D.vars[stmt.var_name.id_name] = Eval(stmt.value) - else if(istype(S, /node/statement/VariableDeclaration)) - //VariableDeclaration nodes are used to forcibly declare a local variable so that one in a higher scope isn't used by default. - var/node/statement/VariableDeclaration/dec=S - if(!dec.object) - AssignVariable(dec.var_name.id_name, null, curScope) - else - var/datum/D = Eval(GetVariable(dec.object.id_name)) - if(!D) return - D.vars[dec.var_name.id_name] = null - else if(istype(S, /node/statement/FunctionCall)) - RunFunction(S) - else if(istype(S, /node/statement/FunctionDefinition)) - //do nothing - else if(istype(S, /node/statement/WhileLoop)) - RunWhile(S) - else if(istype(S, /node/statement/IfStatement)) - RunIf(S) - else if(istype(S, /node/statement/ReturnStatement)) - if(!curFunction) - RaiseError(new/runtimeError/UnexpectedReturn()) - continue - status |= RETURNING - returnVal=Eval(S:value) - break - else if(istype(S, /node/statement/BreakStatement)) - status |= BREAKING - break - else if(istype(S, /node/statement/ContinueStatement)) - status |= CONTINUING - break - else - RaiseError(new/runtimeError/UnknownInstruction()) - if(status) - break - - curScope = scopes.Pop() - -/* -Proc: RunFunction -Runs a function block or a proc with the arguments specified in the script. -*/ -/n_Interpreter/proc/RunFunction(node/statement/FunctionCall/stmt) - //Note that anywhere /node/statement/FunctionCall/stmt is used so may /node/expression/FunctionCall - - // If recursion gets too high (max 50 nested functions) throw an error - if(cur_recursion >= max_recursion) - RaiseError(new/runtimeError/RecursionLimitReached()) - return 0 - - var/node/statement/FunctionDefinition/def - if(!stmt.object) //A scope's function is being called, stmt.object is null - def = GetFunction(stmt.func_name) - else if(istype(stmt.object)) //A method of an object exposed as a variable is being called, stmt.object is a /node/identifier - var/O = GetVariable(stmt.object.id_name) //Gets a reference to the object which is the target of the function call. - if(!O) return //Error already thrown in GetVariable() - def = Eval(O) - - if(!def) return - - cur_recursion++ // add recursion - if(istype(def)) - if(curFunction) functions.Push(curFunction) - var/scope/S = CreateScope(def.block) - for(var/i=1 to def.parameters.len) - var/val - if(stmt.parameters.len>=i) - val = stmt.parameters[i] - //else - // unspecified param - AssignVariable(def.parameters[i], new/node/expression/value/literal(Eval(val)), S) - curFunction=stmt - RunBlock(def.block, S) - //Handle return value - . = returnVal - status &= ~RETURNING - returnVal=null - curFunction=functions.Pop() - cur_recursion-- - else - cur_recursion-- - var/list/params=new - for(var/node/expression/P in stmt.parameters) - params+=list(Eval(P)) - if(isobject(def)) //def is an object which is the target of a function call - if( !hascall(def, stmt.func_name) ) - RaiseError(new/runtimeError/UndefinedFunction("[stmt.object.id_name].[stmt.func_name]")) - return - return call(def, stmt.func_name)(arglist(params)) - else //def is a path to a global proc - return call(def)(arglist(params)) - //else - // RaiseError(new/runtimeError/UnknownInstruction()) - -/* -Proc: RunIf -Checks a condition and runs either the if block or else block. -*/ -/n_Interpreter/proc/RunIf(node/statement/IfStatement/stmt) - if(Eval(stmt.cond)) - RunBlock(stmt.block) - else if(stmt.else_block) - RunBlock(stmt.else_block) - -/* -Proc: RunWhile -Runs a while loop. -*/ -/n_Interpreter/proc/RunWhile(node/statement/WhileLoop/stmt) - var/i=1 - while(Eval(stmt.cond) && Iterate(stmt.block, i++)) - continue - status &= ~BREAKING - -/* -Proc:Iterate -Runs a single iteration of a loop. Returns a value indicating whether or not to continue looping. -*/ -/n_Interpreter/proc/Iterate(node/BlockDefinition/block, count) - RunBlock(block) - if(max_iterations > 0 && count >= max_iterations) - RaiseError(new/runtimeError/IterationLimitReached()) - return 0 - if(status & (BREAKING|RETURNING)) - return 0 - status &= ~CONTINUING - return 1 - -/* -Proc: GetFunction -Finds a function in an accessible scope with the given name. Returns a . -*/ -/n_Interpreter/proc/GetFunction(name) - var/scope/S = curScope - while(S) - if(S.functions.Find(name)) - return S.functions[name] - S = S.parent - RaiseError(new/runtimeError/UndefinedFunction(name)) - -/* -Proc: GetVariable -Finds a variable in an accessible scope and returns its value. -*/ -/n_Interpreter/proc/GetVariable(name) - var/scope/S = curScope - while(S) - if(S.variables.Find(name)) - return S.variables[name] - S = S.parent - RaiseError(new/runtimeError/UndefinedVariable(name)) - -/n_Interpreter/proc/GetVariableScope(name) //needed for when you reassign a variable in a higher scope - var/scope/S = curScope - while(S) - if(S.variables.Find(name)) - return S - S = S.parent - - -/n_Interpreter/proc/IsVariableAccessible(name) - var/scope/S = curScope - while(S) - if(S.variables.Find(name)) - return TRUE - S = S.parent - return FALSE - - -/* -Proc: AssignVariable -Assigns a value to a variable in a specific block. - -Parameters: -name - The name of the variable to assign. -value - The value to assign to it. -S - The scope the variable resides in. If it is null, a scope with the variable already existing is found. If no scopes have a variable of the given name, the current scope is used. -*/ -/n_Interpreter/proc/AssignVariable(name, node/expression/value, scope/S=null) - if(!S) S = GetVariableScope(name) - if(!S) S = curScope - if(!S) S = globalScope - ASSERT(istype(S)) - if(istext(value) || isnum(value) || isnull(value)) value = new/node/expression/value/literal(value) - else if(!istype(value) && isobject(value)) value = new/node/expression/value/reference(value) - //TODO: check for invalid name - S.variables["[name]"] = value - +/* + File: Interpreter (Internal) +*/ +/* + Class: n_Interpreter +*/ +/* + Macros: Status Macros + RETURNING - Indicates that the current function is returning a value. + BREAKING - Indicates that the current loop is being terminated. + CONTINUING - Indicates that the rest of the current iteration of a loop is being skipped. +*/ +#define RETURNING 1 +#define BREAKING 2 +#define CONTINUING 4 +/n_Interpreter + var/scope/curScope + var/scope/globalScope + var/node/BlockDefinition/program + var/node/statement/FunctionDefinition/curFunction + var/stack/scopes = new() + var/stack/functions = new() + + var/datum/container // associated container for interpeter +/* + Var: status + A variable indicating that the rest of the current block should be skipped. This may be set to any combination of . +*/ + var/status=0 + var/returnVal + + var/max_statements=1000 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation + var/cur_statements=0 // current amount of statements called + var/alertadmins=0 // set to 1 if the admins shouldn't be notified of anymore issues + var/max_iterations=100 // max number of uninterrupted loops possible + var/max_recursion=50 // max recursions without returning anything (or completing the code block) + var/cur_recursion=0 // current amount of recursion +/* + Var: persist + If 0, global variables will be reset after Run() finishes. +*/ + var/persist=1 + var/paused=0 + +/* + Constructor: New + Calls with the given parameters. +*/ +/n_Interpreter/New(node/BlockDefinition/GlobalBlock/program=null) + .=..() + if(program)Load(program) + +/* + Proc: RaiseError + Raises a runtime error. +*/ +/n_Interpreter/proc/RaiseError(runtimeError/e) + e.stack=functions.Copy() + e.stack.Push(curFunction) + src.HandleError(e) + +/n_Interpreter/proc/CreateScope(node/BlockDefinition/B) + var/scope/S = new(B, curScope) + scopes.Push(curScope) + curScope = S + return S + +/n_Interpreter/proc/CreateGlobalScope() + scopes.Clear() + var/scope/S = new(program, null) + globalScope = S + return S + +/* +Proc: RunBlock +Runs each statement in a block of code. +*/ +/n_Interpreter/proc/RunBlock(node/BlockDefinition/Block, scope/scope = null) + var/is_global = istype(Block, /node/BlockDefinition/GlobalBlock) + if(!is_global) + if(scope) + curScope = scope + else + CreateScope(Block) + else + if(!persist) + CreateGlobalScope() + curScope = globalScope + + if(cur_statements < max_statements) + + for(var/node/statement/S in Block.statements) + while(paused) sleep(10) + + cur_statements++ + if(cur_statements >= max_statements) + RaiseError(new/runtimeError/MaxCPU()) + + if(container && !alertadmins) + if(istype(container, /datum/TCS_Compiler)) + var/datum/TCS_Compiler/Compiler = container + var/obj/machinery/telecomms/server/Holder = Compiler.Holder + var/message = "Potential crash-inducing NTSL script detected at telecommunications server [Compiler.Holder] ([Holder.x], [Holder.y], [Holder.z])." + + alertadmins = 1 + message_admins(message, 1) + break + + if(istype(S, /node/statement/VariableAssignment)) + var/node/statement/VariableAssignment/stmt = S + var/name = stmt.var_name.id_name + if(!stmt.object) + // Below we assign the variable first to null if it doesn't already exist. + // This is necessary for assignments like +=, and when the variable is used in a function + // If the variable already exists in a different block, then AssignVariable will automatically use that one. + if(!IsVariableAccessible(name)) + AssignVariable(name, null) + AssignVariable(name, Eval(stmt.value)) + else + var/datum/D = Eval(GetVariable(stmt.object.id_name)) + if(!D) return + D.vars[stmt.var_name.id_name] = Eval(stmt.value) + else if(istype(S, /node/statement/VariableDeclaration)) + //VariableDeclaration nodes are used to forcibly declare a local variable so that one in a higher scope isn't used by default. + var/node/statement/VariableDeclaration/dec=S + if(!dec.object) + AssignVariable(dec.var_name.id_name, null, curScope) + else + var/datum/D = Eval(GetVariable(dec.object.id_name)) + if(!D) return + D.vars[dec.var_name.id_name] = null + else if(istype(S, /node/statement/FunctionCall)) + RunFunction(S) + else if(istype(S, /node/statement/FunctionDefinition)) + //do nothing + else if(istype(S, /node/statement/WhileLoop)) + RunWhile(S) + else if(istype(S, /node/statement/IfStatement)) + RunIf(S) + else if(istype(S, /node/statement/ReturnStatement)) + if(!curFunction) + RaiseError(new/runtimeError/UnexpectedReturn()) + continue + status |= RETURNING + returnVal=Eval(S:value) + break + else if(istype(S, /node/statement/BreakStatement)) + status |= BREAKING + break + else if(istype(S, /node/statement/ContinueStatement)) + status |= CONTINUING + break + else + RaiseError(new/runtimeError/UnknownInstruction()) + if(status) + break + + curScope = scopes.Pop() + +/* +Proc: RunFunction +Runs a function block or a proc with the arguments specified in the script. +*/ +/n_Interpreter/proc/RunFunction(node/statement/FunctionCall/stmt) + //Note that anywhere /node/statement/FunctionCall/stmt is used so may /node/expression/FunctionCall + + // If recursion gets too high (max 50 nested functions) throw an error + if(cur_recursion >= max_recursion) + RaiseError(new/runtimeError/RecursionLimitReached()) + return 0 + + var/node/statement/FunctionDefinition/def + if(!stmt.object) //A scope's function is being called, stmt.object is null + def = GetFunction(stmt.func_name) + else if(istype(stmt.object)) //A method of an object exposed as a variable is being called, stmt.object is a /node/identifier + var/O = GetVariable(stmt.object.id_name) //Gets a reference to the object which is the target of the function call. + if(!O) return //Error already thrown in GetVariable() + def = Eval(O) + + if(!def) return + + cur_recursion++ // add recursion + if(istype(def)) + if(curFunction) functions.Push(curFunction) + var/scope/S = CreateScope(def.block) + for(var/i=1 to def.parameters.len) + var/val + if(stmt.parameters.len>=i) + val = stmt.parameters[i] + //else + // unspecified param + AssignVariable(def.parameters[i], new/node/expression/value/literal(Eval(val)), S) + curFunction=stmt + RunBlock(def.block, S) + //Handle return value + . = returnVal + status &= ~RETURNING + returnVal=null + curFunction=functions.Pop() + cur_recursion-- + else + cur_recursion-- + var/list/params=new + for(var/node/expression/P in stmt.parameters) + params+=list(Eval(P)) + if(isobject(def)) //def is an object which is the target of a function call + if( !hascall(def, stmt.func_name) ) + RaiseError(new/runtimeError/UndefinedFunction("[stmt.object.id_name].[stmt.func_name]")) + return + return call(def, stmt.func_name)(arglist(params)) + else //def is a path to a global proc + return call(def)(arglist(params)) + //else + // RaiseError(new/runtimeError/UnknownInstruction()) + +/* +Proc: RunIf +Checks a condition and runs either the if block or else block. +*/ +/n_Interpreter/proc/RunIf(node/statement/IfStatement/stmt) + if(Eval(stmt.cond)) + RunBlock(stmt.block) + else if(stmt.else_block) + RunBlock(stmt.else_block) + +/* +Proc: RunWhile +Runs a while loop. +*/ +/n_Interpreter/proc/RunWhile(node/statement/WhileLoop/stmt) + var/i=1 + while(Eval(stmt.cond) && Iterate(stmt.block, i++)) + continue + status &= ~BREAKING + +/* +Proc:Iterate +Runs a single iteration of a loop. Returns a value indicating whether or not to continue looping. +*/ +/n_Interpreter/proc/Iterate(node/BlockDefinition/block, count) + RunBlock(block) + if(max_iterations > 0 && count >= max_iterations) + RaiseError(new/runtimeError/IterationLimitReached()) + return 0 + if(status & (BREAKING|RETURNING)) + return 0 + status &= ~CONTINUING + return 1 + +/* +Proc: GetFunction +Finds a function in an accessible scope with the given name. Returns a . +*/ +/n_Interpreter/proc/GetFunction(name) + var/scope/S = curScope + while(S) + if(S.functions.Find(name)) + return S.functions[name] + S = S.parent + RaiseError(new/runtimeError/UndefinedFunction(name)) + +/* +Proc: GetVariable +Finds a variable in an accessible scope and returns its value. +*/ +/n_Interpreter/proc/GetVariable(name) + var/scope/S = curScope + while(S) + if(S.variables.Find(name)) + return S.variables[name] + S = S.parent + RaiseError(new/runtimeError/UndefinedVariable(name)) + +/n_Interpreter/proc/GetVariableScope(name) //needed for when you reassign a variable in a higher scope + var/scope/S = curScope + while(S) + if(S.variables.Find(name)) + return S + S = S.parent + + +/n_Interpreter/proc/IsVariableAccessible(name) + var/scope/S = curScope + while(S) + if(S.variables.Find(name)) + return TRUE + S = S.parent + return FALSE + + +/* +Proc: AssignVariable +Assigns a value to a variable in a specific block. + +Parameters: +name - The name of the variable to assign. +value - The value to assign to it. +S - The scope the variable resides in. If it is null, a scope with the variable already existing is found. If no scopes have a variable of the given name, the current scope is used. +*/ +/n_Interpreter/proc/AssignVariable(name, node/expression/value, scope/S=null) + if(!S) S = GetVariableScope(name) + if(!S) S = curScope + if(!S) S = globalScope + ASSERT(istype(S)) + if(istext(value) || isnum(value) || isnull(value)) value = new/node/expression/value/literal(value) + else if(!istype(value) && isobject(value)) value = new/node/expression/value/reference(value) + //TODO: check for invalid name + S.variables["[name]"] = value + diff --git a/code/modules/scripting/Interpreter/Scope.dm b/code/modules/scripting/Interpreter/Scope.dm index d768e74bf1..e5a3c05d04 100644 --- a/code/modules/scripting/Interpreter/Scope.dm +++ b/code/modules/scripting/Interpreter/Scope.dm @@ -1,16 +1,16 @@ -/* - Class: scope - A runtime instance of a block. Used internally by the interpreter. -*/ -/scope/ - var/scope/parent = null - var/node/BlockDefinition/block - var/list/functions - var/list/variables - -/scope/New(node/BlockDefinition/B, scope/parent) - src.block = B - src.parent = parent - src.variables = B.initial_variables.Copy() - src.functions = B.functions.Copy() +/* + Class: scope + A runtime instance of a block. Used internally by the interpreter. +*/ +/scope/ + var/scope/parent = null + var/node/BlockDefinition/block + var/list/functions + var/list/variables + +/scope/New(node/BlockDefinition/B, scope/parent) + src.block = B + src.parent = parent + src.variables = B.initial_variables.Copy() + src.functions = B.functions.Copy() .=..() \ No newline at end of file diff --git a/code/modules/scripting/Options.dm b/code/modules/scripting/Options.dm index 292e0d3913..1dd35da43b 100644 --- a/code/modules/scripting/Options.dm +++ b/code/modules/scripting/Options.dm @@ -1,100 +1,100 @@ -/* -File: Options -*/ -var/const //Ascii values of characters - ascii_A =65 - ascii_Z =90 - ascii_a =97 - ascii_z =122 - ascii_DOLLAR = 36 // $ - ascii_ZERO=48 - ascii_NINE=57 - ascii_UNDERSCORE=95 // _ - -/* - Class: n_scriptOptions -*/ -/n_scriptOptions/proc/CanStartID(char) //returns true if the character can start a variable, function, or keyword name (by default letters or an underscore) - if(!isnum(char))char=text2ascii(char) - return (char in ascii_A to ascii_Z) || (char in ascii_a to ascii_z) || char==ascii_UNDERSCORE || char==ascii_DOLLAR - -/n_scriptOptions/proc/IsValidIDChar(char) //returns true if the character can be in the body of a variable, function, or keyword name (by default letters, numbers, and underscore) - if(!isnum(char))char=text2ascii(char) - return CanStartID(char) || IsDigit(char) - -/n_scriptOptions/proc/IsDigit(char) - if(!isnum(char))char=text2ascii(char) - return char in ascii_ZERO to ascii_NINE - -/n_scriptOptions/proc/IsValidID(id) //returns true if all the characters in the string are okay to be in an identifier name - if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically - return 0 - if(length(id)==1) return 1 - for(var/i=2 to length(id)) - if(!IsValidIDChar(copytext(id, i, i+1))) - return 0 - return 1 - -/* - Class: nS_Options - An implementation of for the n_Script language. -*/ -/n_scriptOptions/nS_Options - var/list/symbols = list("(", ")", "\[", "]", ";", ",", "{", "}") //scanner - Characters that can be in symbols -/* -Var: keywords -An associative list used by the parser to parse keywords. Indices are strings which will trigger the keyword when parsed and the -associated values are types of which the proc will be called. -*/ - var/list/keywords = list( - "if" = /n_Keyword/nS_Keyword/kwIf, - "else" = /n_Keyword/nS_Keyword/kwElse, - "while" = /n_Keyword/nS_Keyword/kwWhile, - "break" = /n_Keyword/nS_Keyword/kwBreak, - "continue" = /n_Keyword/nS_Keyword/kwContinue, - "return" = /n_Keyword/nS_Keyword/kwReturn, - "def" = /n_Keyword/nS_Keyword/kwDef - ) - - var/list/assign_operators = list( - "=" = null, - "&=" = "&", - "|=" = "|", - "`=" = "`", - "+=" = "+", - "-=" = "-", - "*=" = "*", - "/=" = "/", - "^=" = "^", - "%=" = "%" - ) - - var/list/unary_operators =list( - "!" = /node/expression/op/unary/LogicalNot, - "~" = /node/expression/op/unary/BitwiseNot, - "-" = /node/expression/op/unary/Minus - ) - - var/list/binary_operators=list( - "==" = /node/expression/op/binary/Equal, - "!=" = /node/expression/op/binary/NotEqual, - ">" = /node/expression/op/binary/Greater, - "<" = /node/expression/op/binary/Less, - ">=" = /node/expression/op/binary/GreaterOrEqual, - "<=" = /node/expression/op/binary/LessOrEqual, - "&&" = /node/expression/op/binary/LogicalAnd, - "||" = /node/expression/op/binary/LogicalOr, - "&" = /node/expression/op/binary/BitwiseAnd, - "|" = /node/expression/op/binary/BitwiseOr, - "`" = /node/expression/op/binary/BitwiseXor, - "+" = /node/expression/op/binary/Add, - "-" = /node/expression/op/binary/Subtract, - "*" = /node/expression/op/binary/Multiply, - "/" = /node/expression/op/binary/Divide, - "^" = /node/expression/op/binary/Power, - "%" = /node/expression/op/binary/Modulo) - -/n_scriptOptions/nS_Options/New() - .=..() - for(var/O in assign_operators+binary_operators+unary_operators) - if(!symbols.Find(O)) symbols+=O +/* +File: Options +*/ +var/const //Ascii values of characters + ascii_A =65 + ascii_Z =90 + ascii_a =97 + ascii_z =122 + ascii_DOLLAR = 36 // $ + ascii_ZERO=48 + ascii_NINE=57 + ascii_UNDERSCORE=95 // _ + +/* + Class: n_scriptOptions +*/ +/n_scriptOptions/proc/CanStartID(char) //returns true if the character can start a variable, function, or keyword name (by default letters or an underscore) + if(!isnum(char))char=text2ascii(char) + return (char in ascii_A to ascii_Z) || (char in ascii_a to ascii_z) || char==ascii_UNDERSCORE || char==ascii_DOLLAR + +/n_scriptOptions/proc/IsValidIDChar(char) //returns true if the character can be in the body of a variable, function, or keyword name (by default letters, numbers, and underscore) + if(!isnum(char))char=text2ascii(char) + return CanStartID(char) || IsDigit(char) + +/n_scriptOptions/proc/IsDigit(char) + if(!isnum(char))char=text2ascii(char) + return char in ascii_ZERO to ascii_NINE + +/n_scriptOptions/proc/IsValidID(id) //returns true if all the characters in the string are okay to be in an identifier name + if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically + return 0 + if(length(id)==1) return 1 + for(var/i=2 to length(id)) + if(!IsValidIDChar(copytext(id, i, i+1))) + return 0 + return 1 + +/* + Class: nS_Options + An implementation of for the n_Script language. +*/ +/n_scriptOptions/nS_Options + var/list/symbols = list("(", ")", "\[", "]", ";", ",", "{", "}") //scanner - Characters that can be in symbols +/* +Var: keywords +An associative list used by the parser to parse keywords. Indices are strings which will trigger the keyword when parsed and the +associated values are types of which the proc will be called. +*/ + var/list/keywords = list( + "if" = /n_Keyword/nS_Keyword/kwIf, + "else" = /n_Keyword/nS_Keyword/kwElse, + "while" = /n_Keyword/nS_Keyword/kwWhile, + "break" = /n_Keyword/nS_Keyword/kwBreak, + "continue" = /n_Keyword/nS_Keyword/kwContinue, + "return" = /n_Keyword/nS_Keyword/kwReturn, + "def" = /n_Keyword/nS_Keyword/kwDef + ) + + var/list/assign_operators = list( + "=" = null, + "&=" = "&", + "|=" = "|", + "`=" = "`", + "+=" = "+", + "-=" = "-", + "*=" = "*", + "/=" = "/", + "^=" = "^", + "%=" = "%" + ) + + var/list/unary_operators =list( + "!" = /node/expression/op/unary/LogicalNot, + "~" = /node/expression/op/unary/BitwiseNot, + "-" = /node/expression/op/unary/Minus + ) + + var/list/binary_operators=list( + "==" = /node/expression/op/binary/Equal, + "!=" = /node/expression/op/binary/NotEqual, + ">" = /node/expression/op/binary/Greater, + "<" = /node/expression/op/binary/Less, + ">=" = /node/expression/op/binary/GreaterOrEqual, + "<=" = /node/expression/op/binary/LessOrEqual, + "&&" = /node/expression/op/binary/LogicalAnd, + "||" = /node/expression/op/binary/LogicalOr, + "&" = /node/expression/op/binary/BitwiseAnd, + "|" = /node/expression/op/binary/BitwiseOr, + "`" = /node/expression/op/binary/BitwiseXor, + "+" = /node/expression/op/binary/Add, + "-" = /node/expression/op/binary/Subtract, + "*" = /node/expression/op/binary/Multiply, + "/" = /node/expression/op/binary/Divide, + "^" = /node/expression/op/binary/Power, + "%" = /node/expression/op/binary/Modulo) + +/n_scriptOptions/nS_Options/New() + .=..() + for(var/O in assign_operators+binary_operators+unary_operators) + if(!symbols.Find(O)) symbols+=O diff --git a/code/modules/scripting/Parser/Expressions.dm b/code/modules/scripting/Parser/Expressions.dm index 45e11a69fa..1e25c9be69 100644 --- a/code/modules/scripting/Parser/Expressions.dm +++ b/code/modules/scripting/Parser/Expressions.dm @@ -1,310 +1,310 @@ -/* - File: Expressions - Procedures for parsing expressions. -*/ - -/* - Macros: Expression Macros - OPERATOR - A value indicating the parser currently expects a binary operator. - VALUE - A value indicating the parser currently expects a value. - SHIFT - Tells the parser to push the current operator onto the stack. - REDUCE - Tells the parser to reduce the stack. -*/ -#define OPERATOR 1 -#define VALUE 2 -#define SHIFT 0 -#define REDUCE 1 - -/* - Class: nS_Parser -*/ -/n_Parser/nS_Parser -/* - Var: expecting - A variable which keeps track of whether an operator or value is expected. It should be either or . See - for more information. -*/ - var/expecting=VALUE - -/* - Proc: Precedence - Compares two operators, decides which is higher in the order of operations, and returns or . -*/ -/n_Parser/nS_Parser/proc/Precedence(node/expression/op/top, node/expression/op/input) - if(istype(top)) - top=top.precedence - if(istype(input)) - input=input:precedence - if(top>=input) - return REDUCE - return SHIFT - -/* -Proc: GetExpression -Takes a token expected to represent a value and returns an node. -*/ -/n_Parser/nS_Parser/proc/GetExpression(token/T) - if(!T) return - if(istype(T, /node/expression)) - return T - switch(T.type) - if(/token/word) - return new/node/expression/value/variable(T.value) - if(/token/accessor) - var/token/accessor/A=T - var/node/expression/value/variable/E//=new(A.member) - var/stack/S=new() - while(istype(A.object, /token/accessor)) - S.Push(A) - A=A.object - ASSERT(istext(A.object)) - - while(A) - var/node/expression/value/variable/V=new() - V.id=new(A.member) - if(E) - V.object=E - else - V.object=new/node/identifier(A.object) - E=V - A=S.Pop() - return E - - if(/token/number, /token/string) - return new/node/expression/value/literal(T.value) - -/* -Proc: GetOperator -Gets a path related to a token or string and returns an instance of the given type. This is used to get an instance of either a binary or unary -operator from a token. - -Parameters: -O - The input value. If this is a token, O is reset to the token's value. - When O is a string and is in L, its associated value is used as the path to instantiate. -type - The desired type of the returned object. -L - The list in which to search for O. - -See Also: -- -- -*/ -/n_Parser/nS_Parser/proc/GetOperator(O, type=/node/expression/op, L[]) - if(istype(O, type)) return O //O is already the desired type - if(istype(O, /token)) O=O:value //sets O to text - if(istext(O)) //sets O to path - if(L.Find(O)) O=L[O] - else return null - if(ispath(O))O=new O //catches path from last check - else return null //Unknown type - return O - -/* -Proc: GetBinaryOperator -Uses to search for an instance of a binary operator type with which the given string is associated. For example, if -O is set to "+", an node is returned. - -See Also: -- -- -*/ -/n_Parser/nS_Parser/proc/GetBinaryOperator(O) - return GetOperator(O, /node/expression/op/binary, options.binary_operators) - -/* -Proc: GetUnaryOperator -Uses to search for an instance of a unary operator type with which the given string is associated. For example, if -O is set to "!", a node is returned. - -See Also: -- -- -*/ -/n_Parser/nS_Parser/proc/GetUnaryOperator(O) - return GetOperator(O, /node/expression/op/unary, options.unary_operators) - -/* -Proc: Reduce -Takes the operator on top of the opr stack and assigns its operand(s). Then this proc pushes the value of that operation to the top -of the val stack. -*/ -/n_Parser/nS_Parser/proc/Reduce(stack/opr, stack/val) - var/node/expression/op/O=opr.Pop() - if(!O) return - if(!istype(O)) - errors+=new/scriptError("Error reducing expression - invalid operator.") - return - //Take O and assign its operands, popping one or two values from the val stack - //depending on whether O is a binary or unary operator. - if(istype(O, /node/expression/op/binary)) - var/node/expression/op/binary/B=O - B.exp2=val.Pop() - B.exp =val.Pop() - val.Push(B) - else - O.exp=val.Pop() - val.Push(O) - -/* -Proc: EndOfExpression -Returns true if the current token represents the end of an expression. - -Parameters: -end - A list of values to compare the current token to. -*/ -/n_Parser/nS_Parser/proc/EndOfExpression(end[]) - if(!curToken) - return 1 - if(istype(curToken, /token/symbol) && end.Find(curToken.value)) - return 1 - if(istype(curToken, /token/end) && end.Find(/token/end)) - return 1 - return 0 - -/* -Proc: ParseExpression -Uses the Shunting-yard algorithm to parse expressions. - -Notes: -- When an opening parenthesis is found, then is called to handle it. -- The variable helps distinguish unary operators from binary operators (for cases like the - operator, which can be either). - -Articles: -- -- - -See Also: -- -- -- -*/ -/n_Parser/nS_Parser/proc/ParseExpression(list/end=list(/token/end), list/ErrChars=list("{", "}")) - var/stack/opr=new - var/stack/val=new - src.expecting=VALUE - while(TRUE) - if(EndOfExpression(end)) - break - if(istype(curToken, /token/symbol) && ErrChars.Find(curToken.value)) - errors+=new/scriptError/BadToken(curToken) - break - - - if(index>tokens.len) //End of File - errors+=new/scriptError/EndOfFile() - break - var/token/ntok - if(index+1<=tokens.len) - ntok=tokens[index+1] - - if(istype(curToken, /token/symbol) && curToken.value=="(") //Parse parentheses expression - if(expecting!=VALUE) - errors+=new/scriptError/ExpectedToken("operator", curToken) - NextToken() - continue - val.Push(ParseParenExpression()) - else if(istype(curToken, /token/symbol)) //Operator found. - var/node/expression/op/curOperator //Figure out whether it is unary or binary and get a new instance. - if(src.expecting==OPERATOR) - curOperator=GetBinaryOperator(curToken) - if(!curOperator) - errors+=new/scriptError/ExpectedToken("operator", curToken) - NextToken() - continue - else - curOperator=GetUnaryOperator(curToken) - if(!curOperator) //given symbol isn't a unary operator - errors+=new/scriptError/ExpectedToken("expression", curToken) - NextToken() - continue - - if(opr.Top() && Precedence(opr.Top(), curOperator)==REDUCE) //Check order of operations and reduce if necessary - Reduce(opr, val) - continue - opr.Push(curOperator) - src.expecting=VALUE - else if(ntok && ntok.value=="(" && istype(ntok, /token/symbol)\ - && istype(curToken, /token/word)) //Parse function call - var/token/preToken=curToken - var/old_expect=src.expecting - var/fex=ParseFunctionExpression() - if(old_expect!=VALUE) - errors+=new/scriptError/ExpectedToken("operator", preToken) - NextToken() - continue - val.Push(fex) - else if(istype(curToken, /token/keyword)) //inline keywords - var/n_Keyword/kw=options.keywords[curToken.value] - kw=new kw(inline=1) - if(kw) - if(!kw.Parse(src)) - return - else - errors+=new/scriptError/BadToken(curToken) - else if(istype(curToken, /token/end)) //semicolon found where it wasn't expected - errors+=new/scriptError/BadToken(curToken) - NextToken() - continue - else - if(expecting!=VALUE) - errors+=new/scriptError/ExpectedToken("operator", curToken) - NextToken() - continue - val.Push(GetExpression(curToken)) - src.expecting=OPERATOR - NextToken() - - while(opr.Top()) Reduce(opr, val) //Reduce the value stack completely - .=val.Pop() //Return what should be the last value on the stack - if(val.Top()) // - var/node/N=val.Pop() - errors+=new/scriptError("Error parsing expression. Unexpected value left on stack: [N.ToString()].") - return null - -/* -Proc: ParseFunctionExpression -Parses a function call inside of an expression. - -See Also: -- -*/ -/n_Parser/nS_Parser/proc/ParseFunctionExpression() - var/node/expression/FunctionCall/exp=new - exp.func_name=curToken.value - NextToken() //skip function name - NextToken() //skip open parenthesis, already found - var/loops = 0 - - while(TRUE) - loops++ - if(loops>=1000) - CRASH("Something TERRIBLE has gone wrong in ParseFunctionExpression ;__;") - - if(istype(curToken, /token/symbol) && curToken.value==")") - return exp - exp.parameters+=ParseParamExpression() - if(curToken.value==","&&istype(curToken, /token/symbol))NextToken() //skip comma - if(istype(curToken, /token/end)) //Prevents infinite loop... - errors+=new/scriptError/ExpectedToken(")") - return exp - -/* -Proc: ParseParenExpression -Parses an expression that ends with a close parenthesis. This is used for parsing expressions inside of parentheses. - -See Also: -- -*/ -/n_Parser/nS_Parser/proc/ParseParenExpression() - if(!CheckToken("(", /token/symbol)) - return - return new/node/expression/op/unary/group(ParseExpression(list(")"))) - -/* -Proc: ParseParamExpression -Parses an expression that ends with either a comma or close parenthesis. This is used for parsing the parameters passed to a function call. - -See Also: -- -*/ -/n_Parser/nS_Parser/proc/ParseParamExpression() - return ParseExpression(list(",", ")")) +/* + File: Expressions + Procedures for parsing expressions. +*/ + +/* + Macros: Expression Macros + OPERATOR - A value indicating the parser currently expects a binary operator. + VALUE - A value indicating the parser currently expects a value. + SHIFT - Tells the parser to push the current operator onto the stack. + REDUCE - Tells the parser to reduce the stack. +*/ +#define OPERATOR 1 +#define VALUE 2 +#define SHIFT 0 +#define REDUCE 1 + +/* + Class: nS_Parser +*/ +/n_Parser/nS_Parser +/* + Var: expecting + A variable which keeps track of whether an operator or value is expected. It should be either or . See + for more information. +*/ + var/expecting=VALUE + +/* + Proc: Precedence + Compares two operators, decides which is higher in the order of operations, and returns or . +*/ +/n_Parser/nS_Parser/proc/Precedence(node/expression/op/top, node/expression/op/input) + if(istype(top)) + top=top.precedence + if(istype(input)) + input=input:precedence + if(top>=input) + return REDUCE + return SHIFT + +/* +Proc: GetExpression +Takes a token expected to represent a value and returns an node. +*/ +/n_Parser/nS_Parser/proc/GetExpression(token/T) + if(!T) return + if(istype(T, /node/expression)) + return T + switch(T.type) + if(/token/word) + return new/node/expression/value/variable(T.value) + if(/token/accessor) + var/token/accessor/A=T + var/node/expression/value/variable/E//=new(A.member) + var/stack/S=new() + while(istype(A.object, /token/accessor)) + S.Push(A) + A=A.object + ASSERT(istext(A.object)) + + while(A) + var/node/expression/value/variable/V=new() + V.id=new(A.member) + if(E) + V.object=E + else + V.object=new/node/identifier(A.object) + E=V + A=S.Pop() + return E + + if(/token/number, /token/string) + return new/node/expression/value/literal(T.value) + +/* +Proc: GetOperator +Gets a path related to a token or string and returns an instance of the given type. This is used to get an instance of either a binary or unary +operator from a token. + +Parameters: +O - The input value. If this is a token, O is reset to the token's value. + When O is a string and is in L, its associated value is used as the path to instantiate. +type - The desired type of the returned object. +L - The list in which to search for O. + +See Also: +- +- +*/ +/n_Parser/nS_Parser/proc/GetOperator(O, type=/node/expression/op, L[]) + if(istype(O, type)) return O //O is already the desired type + if(istype(O, /token)) O=O:value //sets O to text + if(istext(O)) //sets O to path + if(L.Find(O)) O=L[O] + else return null + if(ispath(O))O=new O //catches path from last check + else return null //Unknown type + return O + +/* +Proc: GetBinaryOperator +Uses to search for an instance of a binary operator type with which the given string is associated. For example, if +O is set to "+", an node is returned. + +See Also: +- +- +*/ +/n_Parser/nS_Parser/proc/GetBinaryOperator(O) + return GetOperator(O, /node/expression/op/binary, options.binary_operators) + +/* +Proc: GetUnaryOperator +Uses to search for an instance of a unary operator type with which the given string is associated. For example, if +O is set to "!", a node is returned. + +See Also: +- +- +*/ +/n_Parser/nS_Parser/proc/GetUnaryOperator(O) + return GetOperator(O, /node/expression/op/unary, options.unary_operators) + +/* +Proc: Reduce +Takes the operator on top of the opr stack and assigns its operand(s). Then this proc pushes the value of that operation to the top +of the val stack. +*/ +/n_Parser/nS_Parser/proc/Reduce(stack/opr, stack/val) + var/node/expression/op/O=opr.Pop() + if(!O) return + if(!istype(O)) + errors+=new/scriptError("Error reducing expression - invalid operator.") + return + //Take O and assign its operands, popping one or two values from the val stack + //depending on whether O is a binary or unary operator. + if(istype(O, /node/expression/op/binary)) + var/node/expression/op/binary/B=O + B.exp2=val.Pop() + B.exp =val.Pop() + val.Push(B) + else + O.exp=val.Pop() + val.Push(O) + +/* +Proc: EndOfExpression +Returns true if the current token represents the end of an expression. + +Parameters: +end - A list of values to compare the current token to. +*/ +/n_Parser/nS_Parser/proc/EndOfExpression(end[]) + if(!curToken) + return 1 + if(istype(curToken, /token/symbol) && end.Find(curToken.value)) + return 1 + if(istype(curToken, /token/end) && end.Find(/token/end)) + return 1 + return 0 + +/* +Proc: ParseExpression +Uses the Shunting-yard algorithm to parse expressions. + +Notes: +- When an opening parenthesis is found, then is called to handle it. +- The variable helps distinguish unary operators from binary operators (for cases like the - operator, which can be either). + +Articles: +- +- + +See Also: +- +- +- +*/ +/n_Parser/nS_Parser/proc/ParseExpression(list/end=list(/token/end), list/ErrChars=list("{", "}")) + var/stack/opr=new + var/stack/val=new + src.expecting=VALUE + while(TRUE) + if(EndOfExpression(end)) + break + if(istype(curToken, /token/symbol) && ErrChars.Find(curToken.value)) + errors+=new/scriptError/BadToken(curToken) + break + + + if(index>tokens.len) //End of File + errors+=new/scriptError/EndOfFile() + break + var/token/ntok + if(index+1<=tokens.len) + ntok=tokens[index+1] + + if(istype(curToken, /token/symbol) && curToken.value=="(") //Parse parentheses expression + if(expecting!=VALUE) + errors+=new/scriptError/ExpectedToken("operator", curToken) + NextToken() + continue + val.Push(ParseParenExpression()) + else if(istype(curToken, /token/symbol)) //Operator found. + var/node/expression/op/curOperator //Figure out whether it is unary or binary and get a new instance. + if(src.expecting==OPERATOR) + curOperator=GetBinaryOperator(curToken) + if(!curOperator) + errors+=new/scriptError/ExpectedToken("operator", curToken) + NextToken() + continue + else + curOperator=GetUnaryOperator(curToken) + if(!curOperator) //given symbol isn't a unary operator + errors+=new/scriptError/ExpectedToken("expression", curToken) + NextToken() + continue + + if(opr.Top() && Precedence(opr.Top(), curOperator)==REDUCE) //Check order of operations and reduce if necessary + Reduce(opr, val) + continue + opr.Push(curOperator) + src.expecting=VALUE + else if(ntok && ntok.value=="(" && istype(ntok, /token/symbol)\ + && istype(curToken, /token/word)) //Parse function call + var/token/preToken=curToken + var/old_expect=src.expecting + var/fex=ParseFunctionExpression() + if(old_expect!=VALUE) + errors+=new/scriptError/ExpectedToken("operator", preToken) + NextToken() + continue + val.Push(fex) + else if(istype(curToken, /token/keyword)) //inline keywords + var/n_Keyword/kw=options.keywords[curToken.value] + kw=new kw(inline=1) + if(kw) + if(!kw.Parse(src)) + return + else + errors+=new/scriptError/BadToken(curToken) + else if(istype(curToken, /token/end)) //semicolon found where it wasn't expected + errors+=new/scriptError/BadToken(curToken) + NextToken() + continue + else + if(expecting!=VALUE) + errors+=new/scriptError/ExpectedToken("operator", curToken) + NextToken() + continue + val.Push(GetExpression(curToken)) + src.expecting=OPERATOR + NextToken() + + while(opr.Top()) Reduce(opr, val) //Reduce the value stack completely + .=val.Pop() //Return what should be the last value on the stack + if(val.Top()) // + var/node/N=val.Pop() + errors+=new/scriptError("Error parsing expression. Unexpected value left on stack: [N.ToString()].") + return null + +/* +Proc: ParseFunctionExpression +Parses a function call inside of an expression. + +See Also: +- +*/ +/n_Parser/nS_Parser/proc/ParseFunctionExpression() + var/node/expression/FunctionCall/exp=new + exp.func_name=curToken.value + NextToken() //skip function name + NextToken() //skip open parenthesis, already found + var/loops = 0 + + while(TRUE) + loops++ + if(loops>=1000) + CRASH("Something TERRIBLE has gone wrong in ParseFunctionExpression ;__;") + + if(istype(curToken, /token/symbol) && curToken.value==")") + return exp + exp.parameters+=ParseParamExpression() + if(curToken.value==","&&istype(curToken, /token/symbol))NextToken() //skip comma + if(istype(curToken, /token/end)) //Prevents infinite loop... + errors+=new/scriptError/ExpectedToken(")") + return exp + +/* +Proc: ParseParenExpression +Parses an expression that ends with a close parenthesis. This is used for parsing expressions inside of parentheses. + +See Also: +- +*/ +/n_Parser/nS_Parser/proc/ParseParenExpression() + if(!CheckToken("(", /token/symbol)) + return + return new/node/expression/op/unary/group(ParseExpression(list(")"))) + +/* +Proc: ParseParamExpression +Parses an expression that ends with either a comma or close parenthesis. This is used for parsing the parameters passed to a function call. + +See Also: +- +*/ +/n_Parser/nS_Parser/proc/ParseParamExpression() + return ParseExpression(list(",", ")")) diff --git a/code/modules/scripting/Parser/Keywords.dm b/code/modules/scripting/Parser/Keywords.dm index cc68164877..90b0428c19 100644 --- a/code/modules/scripting/Parser/Keywords.dm +++ b/code/modules/scripting/Parser/Keywords.dm @@ -1,158 +1,158 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/* - File: Keywords -*/ -var/const/KW_FAIL = 0 //Fatal error; stop parsing entire script. -var/const/KW_PASS = 1 //OK -var/const/KW_ERR = 2 //Non-fatal error, keyword couldn't be handled properly. Ignore keyword but continue on. -var/const/KW_WARN = 3 //Warning - -/* -var/const/Class: n_Keyword -var/const/Represents a special statement in the code triggered by a keyword. -*/ - -/* - Var: inline - 1 if the keyword is in an expression (e.g. the new keyword in many languages), 0 otherwise (such as the if and else keywords). -*/ -/n_Keyword - var/inline -/n_Keyword/New(inline=FALSE) - src.inline=inline - return ..() - -/* - Proc: Parse - Called when the parser finds a keyword in the code. - - Parameters: - parser - The parser that created this object. You can use the parameter to manipulate the parser in order to add statements and blocks - to its AST. -*/ -/n_Keyword/proc/Parse(n_Parser/parser) - -/* - Class: nS_Keyword - A keyword in n_Script. By default these include return, if, else, while, and def. To enable or disable a keyword, change the - list. - - Behavior: - When a parser is expecting a new statement, and a keyword listed in is found, it will call the keyword's - proc. -*/ -// -/n_Keyword/nS_Keyword/New(inline=0) - if(inline) - qdel(src) - -/n_Keyword/nS_Keyword/kwReturn/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) - parser.errors+=new/scriptError/BadReturn(parser.curToken) - . = KW_WARN - var/node/statement/ReturnStatement/stmt=new - parser.NextToken() //skip 'return' token - stmt.value=parser.ParseExpression() - parser.curBlock.statements+=stmt - -/n_Keyword/nS_Keyword/kwIf/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - var/node/statement/IfStatement/stmt=new - parser.NextToken() //skip 'if' token - stmt.cond=parser.ParseParenExpression() - if(!parser.CheckToken(")", /token/symbol)) - return KW_FAIL - if(!parser.CheckToken("{", /token/symbol, skip=0)) //Token needs to be preserved for parse loop, so skip=0 - return KW_ERR - parser.curBlock.statements+=stmt - stmt.block=new - parser.AddBlock(stmt.block) - -/n_Keyword/nS_Keyword/kwElse/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - var/list/L=parser.curBlock.statements - var/node/statement/IfStatement/stmt - if(L&&L.len) stmt=L[L.len] //Get the last statement in the current block - if(!stmt || !istype(stmt) || stmt.else_block) //Ensure that it is an if statement - parser.errors+=new/scriptError/ExpectedToken("if statement",parser.curToken) - return KW_FAIL - parser.NextToken() //skip 'else' token - if(!parser.CheckToken("{", /token/symbol, skip=0)) - return KW_ERR - stmt.else_block=new() - parser.AddBlock(stmt.else_block) - -/n_Keyword/nS_Keyword/kwWhile/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - var/node/statement/WhileLoop/stmt=new - parser.NextToken() //skip 'while' token - stmt.cond=parser.ParseParenExpression() - if(!parser.CheckToken(")", /token/symbol)) - return KW_FAIL - if(!parser.CheckToken("{", /token/symbol, skip=0)) - return KW_ERR - parser.curBlock.statements+=stmt - stmt.block=new - parser.AddBlock(stmt.block) - -/n_Keyword/nS_Keyword/kwBreak/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) - parser.errors+=new/scriptError/BadToken(parser.curToken) - . = KW_WARN - var/node/statement/BreakStatement/stmt=new - parser.NextToken() //skip 'break' token - parser.curBlock.statements+=stmt - -/n_Keyword/nS_Keyword/kwContinue/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) - parser.errors+=new/scriptError/BadToken(parser.curToken) - . = KW_WARN - var/node/statement/ContinueStatement/stmt=new - parser.NextToken() //skip 'break' token - parser.curBlock.statements+=stmt - -/n_Keyword/nS_Keyword/kwDef/Parse(n_Parser/nS_Parser/parser) - .=KW_PASS - var/node/statement/FunctionDefinition/def=new - parser.NextToken() //skip 'def' token - if(!parser.options.IsValidID(parser.curToken.value)) - parser.errors+=new/scriptError/InvalidID(parser.curToken) - return KW_FAIL - def.func_name=parser.curToken.value - parser.NextToken() - if(!parser.CheckToken("(", /token/symbol)) - return KW_FAIL - while(TRUE) //for now parameters can be separated by whitespace - they don't need a comma in between - if(istype(parser.curToken, /token/symbol)) - switch(parser.curToken.value) - if(",") - parser.NextToken() - if(")") - break - else - parser.errors+=new/scriptError/BadToken(parser.curToken) - return KW_ERR - - else if(istype(parser.curToken, /token/word)) - def.parameters+=parser.curToken.value - parser.NextToken() - else - parser.errors+=new/scriptError/InvalidID(parser.curToken) - return KW_ERR - if(!parser.CheckToken(")", /token/symbol)) - return KW_FAIL - - if(istype(parser.curToken, /token/end)) //Function prototype - parser.curBlock.statements+=def - else if(parser.curToken.value=="{" && istype(parser.curToken, /token/symbol)) - def.block = new - parser.curBlock.statements+=def - parser.curBlock.functions[def.func_name]=def - parser.AddBlock(def.block) - else - parser.errors+=new/scriptError/BadToken(parser.curToken) - return KW_FAIL +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/* + File: Keywords +*/ +var/const/KW_FAIL = 0 //Fatal error; stop parsing entire script. +var/const/KW_PASS = 1 //OK +var/const/KW_ERR = 2 //Non-fatal error, keyword couldn't be handled properly. Ignore keyword but continue on. +var/const/KW_WARN = 3 //Warning + +/* +var/const/Class: n_Keyword +var/const/Represents a special statement in the code triggered by a keyword. +*/ + +/* + Var: inline + 1 if the keyword is in an expression (e.g. the new keyword in many languages), 0 otherwise (such as the if and else keywords). +*/ +/n_Keyword + var/inline +/n_Keyword/New(inline=FALSE) + src.inline=inline + return ..() + +/* + Proc: Parse + Called when the parser finds a keyword in the code. + + Parameters: + parser - The parser that created this object. You can use the parameter to manipulate the parser in order to add statements and blocks + to its AST. +*/ +/n_Keyword/proc/Parse(n_Parser/parser) + +/* + Class: nS_Keyword + A keyword in n_Script. By default these include return, if, else, while, and def. To enable or disable a keyword, change the + list. + + Behavior: + When a parser is expecting a new statement, and a keyword listed in is found, it will call the keyword's + proc. +*/ +// +/n_Keyword/nS_Keyword/New(inline=0) + if(inline) + qdel(src) + +/n_Keyword/nS_Keyword/kwReturn/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) + parser.errors+=new/scriptError/BadReturn(parser.curToken) + . = KW_WARN + var/node/statement/ReturnStatement/stmt=new + parser.NextToken() //skip 'return' token + stmt.value=parser.ParseExpression() + parser.curBlock.statements+=stmt + +/n_Keyword/nS_Keyword/kwIf/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + var/node/statement/IfStatement/stmt=new + parser.NextToken() //skip 'if' token + stmt.cond=parser.ParseParenExpression() + if(!parser.CheckToken(")", /token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /token/symbol, skip=0)) //Token needs to be preserved for parse loop, so skip=0 + return KW_ERR + parser.curBlock.statements+=stmt + stmt.block=new + parser.AddBlock(stmt.block) + +/n_Keyword/nS_Keyword/kwElse/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + var/list/L=parser.curBlock.statements + var/node/statement/IfStatement/stmt + if(L&&L.len) stmt=L[L.len] //Get the last statement in the current block + if(!stmt || !istype(stmt) || stmt.else_block) //Ensure that it is an if statement + parser.errors+=new/scriptError/ExpectedToken("if statement",parser.curToken) + return KW_FAIL + parser.NextToken() //skip 'else' token + if(!parser.CheckToken("{", /token/symbol, skip=0)) + return KW_ERR + stmt.else_block=new() + parser.AddBlock(stmt.else_block) + +/n_Keyword/nS_Keyword/kwWhile/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + var/node/statement/WhileLoop/stmt=new + parser.NextToken() //skip 'while' token + stmt.cond=parser.ParseParenExpression() + if(!parser.CheckToken(")", /token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /token/symbol, skip=0)) + return KW_ERR + parser.curBlock.statements+=stmt + stmt.block=new + parser.AddBlock(stmt.block) + +/n_Keyword/nS_Keyword/kwBreak/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) + parser.errors+=new/scriptError/BadToken(parser.curToken) + . = KW_WARN + var/node/statement/BreakStatement/stmt=new + parser.NextToken() //skip 'break' token + parser.curBlock.statements+=stmt + +/n_Keyword/nS_Keyword/kwContinue/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + if(istype(parser.curBlock, /node/BlockDefinition/GlobalBlock)) + parser.errors+=new/scriptError/BadToken(parser.curToken) + . = KW_WARN + var/node/statement/ContinueStatement/stmt=new + parser.NextToken() //skip 'break' token + parser.curBlock.statements+=stmt + +/n_Keyword/nS_Keyword/kwDef/Parse(n_Parser/nS_Parser/parser) + .=KW_PASS + var/node/statement/FunctionDefinition/def=new + parser.NextToken() //skip 'def' token + if(!parser.options.IsValidID(parser.curToken.value)) + parser.errors+=new/scriptError/InvalidID(parser.curToken) + return KW_FAIL + def.func_name=parser.curToken.value + parser.NextToken() + if(!parser.CheckToken("(", /token/symbol)) + return KW_FAIL + while(TRUE) //for now parameters can be separated by whitespace - they don't need a comma in between + if(istype(parser.curToken, /token/symbol)) + switch(parser.curToken.value) + if(",") + parser.NextToken() + if(")") + break + else + parser.errors+=new/scriptError/BadToken(parser.curToken) + return KW_ERR + + else if(istype(parser.curToken, /token/word)) + def.parameters+=parser.curToken.value + parser.NextToken() + else + parser.errors+=new/scriptError/InvalidID(parser.curToken) + return KW_ERR + if(!parser.CheckToken(")", /token/symbol)) + return KW_FAIL + + if(istype(parser.curToken, /token/end)) //Function prototype + parser.curBlock.statements+=def + else if(parser.curToken.value=="{" && istype(parser.curToken, /token/symbol)) + def.block = new + parser.curBlock.statements+=def + parser.curBlock.functions[def.func_name]=def + parser.AddBlock(def.block) + else + parser.errors+=new/scriptError/BadToken(parser.curToken) + return KW_FAIL diff --git a/code/modules/scripting/Parser/Parser.dm b/code/modules/scripting/Parser/Parser.dm index ab4d6805e7..cb1dfa304c 100644 --- a/code/modules/scripting/Parser/Parser.dm +++ b/code/modules/scripting/Parser/Parser.dm @@ -1,182 +1,182 @@ -/* - File: Parser -*/ -/* - Class: n_Parser - An object that reads tokens and produces an AST (abstract syntax tree). -*/ -/n_Parser - var/index = 1 -/* - Var: index - The parser's current position in the token's list. -*/ -/* - Var: tokens - A list of tokens in the source code generated by a scanner. -*/ - var/list/tokens = new -/* - Var: errors - A list of fatal errors found by the parser. If there are any items in this list, then it is not safe to run the returned AST. - - See Also: - - -*/ - var/list/errors = new -/* - Var: warnings - A list of non-fatal problems in the script. -*/ - var/list/warnings = new -/* - Var: curToken - The token at in . -*/ - var/token/curToken - var/stack/blocks=new - var/node/BlockDefinition/GlobalBlock/global_block=new - var/node/BlockDefinition/curBlock - -/* - Proc: Parse - Reads the tokens and returns the AST's node. Be sure to populate the tokens list before calling this procedure. -*/ -/n_Parser/proc/Parse() - -/* - Proc: NextToken - Sets to the next token in the list, or null if there are no more tokens. -*/ -/n_Parser/proc/NextToken() - if(index>=tokens.len) - curToken=null - else - curToken=tokens[++index] - return curToken - -/* - Class: nS_Parser - An implmentation of a parser for n_Script. -*/ -/n_Parser/nS_Parser - var/n_scriptOptions/nS_Options/options -/* - Constructor: New - - Parameters: - tokens - A list of tokens to parse. - options - An object used for configuration. -*/ -/n_Parser/nS_Parser/New(tokens[], n_scriptOptions/options) - src.tokens=tokens - src.options=options - curBlock=global_block - return ..() - -/n_Parser/nS_Parser/Parse() - ASSERT(tokens) - for(,src.index<=src.tokens.len, src.index++) - curToken=tokens[index] - switch(curToken.type) - if(/token/keyword) - var/n_Keyword/kw=options.keywords[curToken.value] - kw=new kw() - if(kw) - if(!kw.Parse(src)) - return - if(/token/word) - var/token/ntok - if(index+1>tokens.len) - errors+=new/scriptError/BadToken(curToken) - continue - ntok=tokens[index+1] - if(!istype(ntok, /token/symbol)) - errors+=new/scriptError/BadToken(ntok) - continue - if(ntok.value=="(") - ParseFunctionStatement() - else if(options.assign_operators.Find(ntok.value)) - ParseAssignment() - else - errors+=new/scriptError/BadToken(ntok) - continue - if(!istype(curToken, /token/end)) - errors+=new/scriptError/ExpectedToken(";", curToken) - continue - if(/token/symbol) - if(curToken.value=="}") - if(!EndBlock()) - errors+=new/scriptError/BadToken(curToken) - continue - else - errors+=new/scriptError/BadToken(curToken) - continue - if(/token/end) - warnings+=new/scriptError/BadToken(curToken) - continue - else - errors+=new/scriptError/BadToken(curToken) - return - return global_block - -/n_Parser/nS_Parser/proc/CheckToken(val, type, err=1, skip=1) - if(curToken.value!=val || !istype(curToken,type)) - if(err) - errors+=new/scriptError/ExpectedToken(val, curToken) - return 0 - if(skip)NextToken() - return 1 - -/n_Parser/nS_Parser/proc/AddBlock(node/BlockDefinition/B) - blocks.Push(curBlock) - curBlock=B - -/n_Parser/nS_Parser/proc/EndBlock() - if(curBlock==global_block) return 0 - curBlock=blocks.Pop() - return 1 - -/n_Parser/nS_Parser/proc/ParseAssignment() - var/name=curToken.value - if(!options.IsValidID(name)) - errors+=new/scriptError/InvalidID(curToken) - return - NextToken() - var/t=options.binary_operators[options.assign_operators[curToken.value]] - var/node/statement/VariableAssignment/stmt=new() - stmt.var_name=new(name) - NextToken() - if(t) - stmt.value=new t() - stmt.value:exp=new/node/expression/value/variable(stmt.var_name) - stmt.value:exp2=ParseExpression() - else - stmt.value=ParseExpression() - curBlock.statements+=stmt - -/n_Parser/nS_Parser/proc/ParseFunctionStatement() - if(!istype(curToken, /token/word)) - errors+=new/scriptError("Bad identifier in function call.") - return - var/node/statement/FunctionCall/stmt=new - stmt.func_name=curToken.value - NextToken() //skip function name - if(!CheckToken("(", /token/symbol)) //Check for and skip open parenthesis - return - var/loops = 0 - while(TRUE) - loops++ - if(loops>=6000) - CRASH("Something TERRIBLE has gone wrong in ParseFunctionStatement ;__;") - - if(!curToken) - errors+=new/scriptError/EndOfFile() - return - if(istype(curToken, /token/symbol) && curToken.value==")") - curBlock.statements+=stmt - NextToken() //Skip close parenthesis - return - var/node/expression/P=ParseParamExpression() - stmt.parameters+=P +/* + File: Parser +*/ +/* + Class: n_Parser + An object that reads tokens and produces an AST (abstract syntax tree). +*/ +/n_Parser + var/index = 1 +/* + Var: index + The parser's current position in the token's list. +*/ +/* + Var: tokens + A list of tokens in the source code generated by a scanner. +*/ + var/list/tokens = new +/* + Var: errors + A list of fatal errors found by the parser. If there are any items in this list, then it is not safe to run the returned AST. + + See Also: + - +*/ + var/list/errors = new +/* + Var: warnings + A list of non-fatal problems in the script. +*/ + var/list/warnings = new +/* + Var: curToken + The token at in . +*/ + var/token/curToken + var/stack/blocks=new + var/node/BlockDefinition/GlobalBlock/global_block=new + var/node/BlockDefinition/curBlock + +/* + Proc: Parse + Reads the tokens and returns the AST's node. Be sure to populate the tokens list before calling this procedure. +*/ +/n_Parser/proc/Parse() + +/* + Proc: NextToken + Sets to the next token in the list, or null if there are no more tokens. +*/ +/n_Parser/proc/NextToken() + if(index>=tokens.len) + curToken=null + else + curToken=tokens[++index] + return curToken + +/* + Class: nS_Parser + An implmentation of a parser for n_Script. +*/ +/n_Parser/nS_Parser + var/n_scriptOptions/nS_Options/options +/* + Constructor: New + + Parameters: + tokens - A list of tokens to parse. + options - An object used for configuration. +*/ +/n_Parser/nS_Parser/New(tokens[], n_scriptOptions/options) + src.tokens=tokens + src.options=options + curBlock=global_block + return ..() + +/n_Parser/nS_Parser/Parse() + ASSERT(tokens) + for(,src.index<=src.tokens.len, src.index++) + curToken=tokens[index] + switch(curToken.type) + if(/token/keyword) + var/n_Keyword/kw=options.keywords[curToken.value] + kw=new kw() + if(kw) + if(!kw.Parse(src)) + return + if(/token/word) + var/token/ntok + if(index+1>tokens.len) + errors+=new/scriptError/BadToken(curToken) + continue + ntok=tokens[index+1] + if(!istype(ntok, /token/symbol)) + errors+=new/scriptError/BadToken(ntok) + continue + if(ntok.value=="(") + ParseFunctionStatement() + else if(options.assign_operators.Find(ntok.value)) + ParseAssignment() + else + errors+=new/scriptError/BadToken(ntok) + continue + if(!istype(curToken, /token/end)) + errors+=new/scriptError/ExpectedToken(";", curToken) + continue + if(/token/symbol) + if(curToken.value=="}") + if(!EndBlock()) + errors+=new/scriptError/BadToken(curToken) + continue + else + errors+=new/scriptError/BadToken(curToken) + continue + if(/token/end) + warnings+=new/scriptError/BadToken(curToken) + continue + else + errors+=new/scriptError/BadToken(curToken) + return + return global_block + +/n_Parser/nS_Parser/proc/CheckToken(val, type, err=1, skip=1) + if(curToken.value!=val || !istype(curToken,type)) + if(err) + errors+=new/scriptError/ExpectedToken(val, curToken) + return 0 + if(skip)NextToken() + return 1 + +/n_Parser/nS_Parser/proc/AddBlock(node/BlockDefinition/B) + blocks.Push(curBlock) + curBlock=B + +/n_Parser/nS_Parser/proc/EndBlock() + if(curBlock==global_block) return 0 + curBlock=blocks.Pop() + return 1 + +/n_Parser/nS_Parser/proc/ParseAssignment() + var/name=curToken.value + if(!options.IsValidID(name)) + errors+=new/scriptError/InvalidID(curToken) + return + NextToken() + var/t=options.binary_operators[options.assign_operators[curToken.value]] + var/node/statement/VariableAssignment/stmt=new() + stmt.var_name=new(name) + NextToken() + if(t) + stmt.value=new t() + stmt.value:exp=new/node/expression/value/variable(stmt.var_name) + stmt.value:exp2=ParseExpression() + else + stmt.value=ParseExpression() + curBlock.statements+=stmt + +/n_Parser/nS_Parser/proc/ParseFunctionStatement() + if(!istype(curToken, /token/word)) + errors+=new/scriptError("Bad identifier in function call.") + return + var/node/statement/FunctionCall/stmt=new + stmt.func_name=curToken.value + NextToken() //skip function name + if(!CheckToken("(", /token/symbol)) //Check for and skip open parenthesis + return + var/loops = 0 + while(TRUE) + loops++ + if(loops>=6000) + CRASH("Something TERRIBLE has gone wrong in ParseFunctionStatement ;__;") + + if(!curToken) + errors+=new/scriptError/EndOfFile() + return + if(istype(curToken, /token/symbol) && curToken.value==")") + curBlock.statements+=stmt + NextToken() //Skip close parenthesis + return + var/node/expression/P=ParseParamExpression() + stmt.parameters+=P if(istype(curToken, /token/symbol) && curToken.value==",") NextToken() \ No newline at end of file diff --git a/code/modules/scripting/Scanner/Scanner.dm b/code/modules/scripting/Scanner/Scanner.dm index 919bb82a48..be391bddde 100644 --- a/code/modules/scripting/Scanner/Scanner.dm +++ b/code/modules/scripting/Scanner/Scanner.dm @@ -1,273 +1,273 @@ -/* - File: Scanner -*/ -/* - Class: n_Scanner - An object responsible for breaking up source code into tokens for use by the parser. -*/ -/n_Scanner - var/code -/* - Var: errors - A list of fatal errors found by the scanner. If there are any items in this list, then it is not safe to parse the returned tokens. - - See Also: - - -*/ - var/list/errors = new -/* - Var: warnings - A list of non-fatal problems in the source code found by the scanner. -*/ - var/list/warnings = new - -/* - Proc: LoadCode - Loads source code. -*/ -/n_Scanner/proc/LoadCode(c) - code=c - -/* - Proc: LoadCodeFromFile - Gets the code from a file and calls . -*/ -/n_Scanner/proc/LoadCodeFromFile(f) - LoadCode(file2text(f)) - -/* - Proc: Scan - Runs the scanner and returns the resulting list of tokens. Ensure that has been called first. -*/ -/n_Scanner/proc/Scan() - -/* - Class: nS_Scanner - A scanner implementation for n_Script. -*/ -/n_Scanner/nS_Scanner - -/* - Variable: codepos - The scanner's position in the source code. -*/ - var/codepos = 1 - var/line = 1 - var/linepos = 0 //column=codepos-linepos - var/n_scriptOptions/nS_Options/options - var/commenting = 0 /// 1 is a single-line comment, 2 is a multi-line comment -/* - Variable: ignore - A list of characters that are ignored by the scanner. - - Default Value: - Whitespace -*/ - var/list/ignore = list(" ", "\t", "\n") //Don't add tokens for whitespace -/* - Variable: end_stmt - A list of characters that end a statement. Each item may only be one character long. - - Default Value: - Semicolon -*/ - var/list/end_stmt = list(";") -/* - Variable: string_delim - A list of characters that can start and end strings. - - Default Value: - Double and single quotes. -*/ - var/list/string_delim = list("\"", "'") -/* - Variable: delim - A list of characters that denote the start of a new token. This list is automatically populated. -*/ - var/list/delim = new - -/* - Macro: COL - The current column number. -*/ - #define COL codepos-linepos - -/* - Constructor: New - Parameters: - code - The source code to tokenize. - options - An object used to configure the scanner. -*/ -/n_Scanner/nS_Scanner/New(code, n_scriptOptions/nS_Options/options) - .=..() - ignore+= ascii2text(13) //Carriage return - delim += ignore + options.symbols + end_stmt + string_delim - src.options=options - LoadCode(code) - -/n_Scanner/nS_Scanner/Scan() //Creates a list of tokens from source code - var/list/tokens=new - for(, src.codepos<=length(code), src.codepos++) - - var/char=copytext(code, codepos, codepos+1) - if(char=="\n") - line++ - linepos=codepos - - if(ignore.Find(char)) - continue - else if(char == "/") - ReadComment() - else if(end_stmt.Find(char)) - tokens+=new /token/end(char, line, COL) - else if(string_delim.Find(char)) - codepos++ //skip string delimiter - tokens+=ReadString(char) - else if(options.CanStartID(char)) - tokens+=ReadWord() - else if(options.IsDigit(char)) - tokens+=ReadNumber() - else if(options.symbols.Find(char)) - tokens+=ReadSymbol() - - - codepos=initial(codepos) - line=initial(line) - linepos=initial(linepos) - return tokens - -/* - Proc: ReadString - Reads a string in the source code into a token. - - Parameters: - start - The character used to start the string. -*/ -/n_Scanner/nS_Scanner/proc/ReadString(start) - var/buf - for(, codepos <= length(code), codepos++)//codepos to length(code)) - var/char=copytext(code, codepos, codepos+1) - switch(char) - if("\\") //Backslash (\) encountered in string - codepos++ //Skip next character in string, since it was escaped by a backslash - char=copytext(code, codepos, codepos+1) - switch(char) - if("\\") //Double backslash - buf+="\\" - if("n") //\n Newline - buf+="\n" - else - if(char==start) //\" Doublequote - buf+=start - else //Unknown escaped text - buf+=char - if("\n") - . = new/token/string(buf, line, COL) - errors+=new/scriptError("Unterminated string. Newline reached.", .) - line++ - linepos=codepos - break - else - if(char==start) //string delimiter found, end string - break - else - buf+=char //Just a normal character in a string - if(!.) return new/token/string(buf, line, COL) - -/* -Proc: ReadWord -Reads characters separated by an item in into a token. -*/ -/n_Scanner/nS_Scanner/proc/ReadWord() - var/char=copytext(code, codepos, codepos+1) - var/buf - while(!delim.Find(char) && codepos<=length(code)) - buf+=char - char=copytext(code, ++codepos, codepos+1) - codepos-- //allow main Scan() proc to read the delimiter - if(options.keywords.Find(buf)) - return new /token/keyword(buf, line, COL) - else - return new /token/word(buf, line, COL) - -/* -Proc: ReadSymbol -Reads a symbol into a token. -*/ -/n_Scanner/nS_Scanner/proc/ReadSymbol() - var/char=copytext(code, codepos, codepos+1) - var/buf - - while(options.symbols.Find(buf+char)) - buf+=char - if(++codepos>length(code)) break - char=copytext(code, codepos, codepos+1) - - codepos-- //allow main Scan() proc to read the next character - return new /token/symbol(buf, line, COL) - -/* -Proc: ReadNumber -Reads a number into a token. -*/ -/n_Scanner/nS_Scanner/proc/ReadNumber() - var/char=copytext(code, codepos, codepos+1) - var/buf - var/dec=0 - - while(options.IsDigit(char) || (char=="." && !dec)) - if(char==".") dec=1 - buf+=char - codepos++ - char=copytext(code, codepos, codepos+1) - var/token/number/T=new(buf, line, COL) - if(isnull(text2num(buf))) - errors+=new/scriptError("Bad number: ", T) - T.value=0 - codepos-- //allow main Scan() proc to read the next character - return T - -/* -Proc: ReadComment -Reads a comment and outputs the type of comment -*/ - -/n_Scanner/nS_Scanner/proc/ReadComment() - var/char=copytext(code, codepos, codepos+1) - var/nextchar=copytext(code, codepos+1, codepos+2) - var/charstring = char+nextchar - var/comm = 1 - // 1: single-line comment - // 2: multi-line comment - var/expectedend = 0 - - if(charstring == "//" || charstring == "/*") - if(charstring == "/*") - comm = 2 // starts a multi-line comment - - while(comm) - if(++codepos>length(code)) break - - if(expectedend) // ending statement expected... - char = copytext(code, codepos, codepos+1) - if(char == "/") // ending statement found - beak the comment - comm = 0 - break - - if(comm == 2) - // multi-line comments are broken by ending statements - char = copytext(code, codepos, codepos+1) - if(char == "*") - expectedend = 1 - continue - else - char = copytext(code, codepos, codepos+1) - if(char == "\n") - comm = 0 - break - - if(expectedend) expectedend = 0 - - if(comm == 2) - errors+=new/scriptError/UnterminatedComment() - +/* + File: Scanner +*/ +/* + Class: n_Scanner + An object responsible for breaking up source code into tokens for use by the parser. +*/ +/n_Scanner + var/code +/* + Var: errors + A list of fatal errors found by the scanner. If there are any items in this list, then it is not safe to parse the returned tokens. + + See Also: + - +*/ + var/list/errors = new +/* + Var: warnings + A list of non-fatal problems in the source code found by the scanner. +*/ + var/list/warnings = new + +/* + Proc: LoadCode + Loads source code. +*/ +/n_Scanner/proc/LoadCode(c) + code=c + +/* + Proc: LoadCodeFromFile + Gets the code from a file and calls . +*/ +/n_Scanner/proc/LoadCodeFromFile(f) + LoadCode(file2text(f)) + +/* + Proc: Scan + Runs the scanner and returns the resulting list of tokens. Ensure that has been called first. +*/ +/n_Scanner/proc/Scan() + +/* + Class: nS_Scanner + A scanner implementation for n_Script. +*/ +/n_Scanner/nS_Scanner + +/* + Variable: codepos + The scanner's position in the source code. +*/ + var/codepos = 1 + var/line = 1 + var/linepos = 0 //column=codepos-linepos + var/n_scriptOptions/nS_Options/options + var/commenting = 0 /// 1 is a single-line comment, 2 is a multi-line comment +/* + Variable: ignore + A list of characters that are ignored by the scanner. + + Default Value: + Whitespace +*/ + var/list/ignore = list(" ", "\t", "\n") //Don't add tokens for whitespace +/* + Variable: end_stmt + A list of characters that end a statement. Each item may only be one character long. + + Default Value: + Semicolon +*/ + var/list/end_stmt = list(";") +/* + Variable: string_delim + A list of characters that can start and end strings. + + Default Value: + Double and single quotes. +*/ + var/list/string_delim = list("\"", "'") +/* + Variable: delim + A list of characters that denote the start of a new token. This list is automatically populated. +*/ + var/list/delim = new + +/* + Macro: COL + The current column number. +*/ + #define COL codepos-linepos + +/* + Constructor: New + Parameters: + code - The source code to tokenize. + options - An object used to configure the scanner. +*/ +/n_Scanner/nS_Scanner/New(code, n_scriptOptions/nS_Options/options) + .=..() + ignore+= ascii2text(13) //Carriage return + delim += ignore + options.symbols + end_stmt + string_delim + src.options=options + LoadCode(code) + +/n_Scanner/nS_Scanner/Scan() //Creates a list of tokens from source code + var/list/tokens=new + for(, src.codepos<=length(code), src.codepos++) + + var/char=copytext(code, codepos, codepos+1) + if(char=="\n") + line++ + linepos=codepos + + if(ignore.Find(char)) + continue + else if(char == "/") + ReadComment() + else if(end_stmt.Find(char)) + tokens+=new /token/end(char, line, COL) + else if(string_delim.Find(char)) + codepos++ //skip string delimiter + tokens+=ReadString(char) + else if(options.CanStartID(char)) + tokens+=ReadWord() + else if(options.IsDigit(char)) + tokens+=ReadNumber() + else if(options.symbols.Find(char)) + tokens+=ReadSymbol() + + + codepos=initial(codepos) + line=initial(line) + linepos=initial(linepos) + return tokens + +/* + Proc: ReadString + Reads a string in the source code into a token. + + Parameters: + start - The character used to start the string. +*/ +/n_Scanner/nS_Scanner/proc/ReadString(start) + var/buf + for(, codepos <= length(code), codepos++)//codepos to length(code)) + var/char=copytext(code, codepos, codepos+1) + switch(char) + if("\\") //Backslash (\) encountered in string + codepos++ //Skip next character in string, since it was escaped by a backslash + char=copytext(code, codepos, codepos+1) + switch(char) + if("\\") //Double backslash + buf+="\\" + if("n") //\n Newline + buf+="\n" + else + if(char==start) //\" Doublequote + buf+=start + else //Unknown escaped text + buf+=char + if("\n") + . = new/token/string(buf, line, COL) + errors+=new/scriptError("Unterminated string. Newline reached.", .) + line++ + linepos=codepos + break + else + if(char==start) //string delimiter found, end string + break + else + buf+=char //Just a normal character in a string + if(!.) return new/token/string(buf, line, COL) + +/* +Proc: ReadWord +Reads characters separated by an item in into a token. +*/ +/n_Scanner/nS_Scanner/proc/ReadWord() + var/char=copytext(code, codepos, codepos+1) + var/buf + while(!delim.Find(char) && codepos<=length(code)) + buf+=char + char=copytext(code, ++codepos, codepos+1) + codepos-- //allow main Scan() proc to read the delimiter + if(options.keywords.Find(buf)) + return new /token/keyword(buf, line, COL) + else + return new /token/word(buf, line, COL) + +/* +Proc: ReadSymbol +Reads a symbol into a token. +*/ +/n_Scanner/nS_Scanner/proc/ReadSymbol() + var/char=copytext(code, codepos, codepos+1) + var/buf + + while(options.symbols.Find(buf+char)) + buf+=char + if(++codepos>length(code)) break + char=copytext(code, codepos, codepos+1) + + codepos-- //allow main Scan() proc to read the next character + return new /token/symbol(buf, line, COL) + +/* +Proc: ReadNumber +Reads a number into a token. +*/ +/n_Scanner/nS_Scanner/proc/ReadNumber() + var/char=copytext(code, codepos, codepos+1) + var/buf + var/dec=0 + + while(options.IsDigit(char) || (char=="." && !dec)) + if(char==".") dec=1 + buf+=char + codepos++ + char=copytext(code, codepos, codepos+1) + var/token/number/T=new(buf, line, COL) + if(isnull(text2num(buf))) + errors+=new/scriptError("Bad number: ", T) + T.value=0 + codepos-- //allow main Scan() proc to read the next character + return T + +/* +Proc: ReadComment +Reads a comment and outputs the type of comment +*/ + +/n_Scanner/nS_Scanner/proc/ReadComment() + var/char=copytext(code, codepos, codepos+1) + var/nextchar=copytext(code, codepos+1, codepos+2) + var/charstring = char+nextchar + var/comm = 1 + // 1: single-line comment + // 2: multi-line comment + var/expectedend = 0 + + if(charstring == "//" || charstring == "/*") + if(charstring == "/*") + comm = 2 // starts a multi-line comment + + while(comm) + if(++codepos>length(code)) break + + if(expectedend) // ending statement expected... + char = copytext(code, codepos, codepos+1) + if(char == "/") // ending statement found - beak the comment + comm = 0 + break + + if(comm == 2) + // multi-line comments are broken by ending statements + char = copytext(code, codepos, codepos+1) + if(char == "*") + expectedend = 1 + continue + else + char = copytext(code, codepos, codepos+1) + if(char == "\n") + comm = 0 + break + + if(expectedend) expectedend = 0 + + if(comm == 2) + errors+=new/scriptError/UnterminatedComment() + diff --git a/code/modules/scripting/Scanner/Tokens.dm b/code/modules/scripting/Scanner/Tokens.dm index 5068e97c5a..aa0c93742c 100644 --- a/code/modules/scripting/Scanner/Tokens.dm +++ b/code/modules/scripting/Scanner/Tokens.dm @@ -1,37 +1,37 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/* - Class: Token - Represents an entity and position in the source code. -*/ -/token - var/value - var/line - var/column - -/token/New(v, l=0, c=0) - value=v - line=l - column=c - -/token/string -/token/symbol -/token/word -/token/keyword -/token/number/New() - .=..() - if(!isnum(value)) - value=text2num(value) - ASSERT(!isnull(value)) -/token/accessor - var/object - var/member - -/token/accessor/New(object, member, l=0, c=0) - src.object=object - src.member=member - src.value="[object].[member]" //for debugging only - src.line=l - src.column=c - -/token/end +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +/* + Class: Token + Represents an entity and position in the source code. +*/ +/token + var/value + var/line + var/column + +/token/New(v, l=0, c=0) + value=v + line=l + column=c + +/token/string +/token/symbol +/token/word +/token/keyword +/token/number/New() + .=..() + if(!isnum(value)) + value=text2num(value) + ASSERT(!isnull(value)) +/token/accessor + var/object + var/member + +/token/accessor/New(object, member, l=0, c=0) + src.object=object + src.member=member + src.value="[object].[member]" //for debugging only + src.line=l + src.column=c + +/token/end diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 3ce724f87e..2bce796f44 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -1,160 +1,160 @@ -/var/security_level = 0 -//0 = code green -//1 = code yellow -//2 = code violet -//3 = code orange -//4 = code blue -//5 = code red -//6 = code delta - -//config.alert_desc_blue_downto -/var/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/alert_levels/alert_raise.ogg')) -/var/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1) - -/proc/set_security_level(var/level) - switch(level) - if("green") - level = SEC_LEVEL_GREEN - if("yellow") - level = SEC_LEVEL_YELLOW - if("violet") - level = SEC_LEVEL_VIOLET - if("orange") - level = SEC_LEVEL_ORANGE - 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 != security_level) - switch(level) - if(SEC_LEVEL_GREEN) - security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Alert level lowered to code green.") - security_level = SEC_LEVEL_GREEN - if(SEC_LEVEL_YELLOW) - if(security_level < SEC_LEVEL_YELLOW) - security_announcement_up.Announce("[config.alert_desc_yellow_upto]", "Attention! Alert level elevated to yellow") - else - security_announcement_down.Announce("[config.alert_desc_yellow_downto]", "Attention! Alert level lowered to yellow") - security_level = SEC_LEVEL_YELLOW - if(SEC_LEVEL_VIOLET) - if(security_level < SEC_LEVEL_VIOLET) - security_announcement_up.Announce("[config.alert_desc_violet_upto]", "Attention! Alert level elevated to violet") - else - security_announcement_down.Announce("[config.alert_desc_violet_downto]", "Attention! Alert level lowered to violet") - security_level = SEC_LEVEL_VIOLET - if(SEC_LEVEL_ORANGE) - if(security_level < SEC_LEVEL_ORANGE) - security_announcement_up.Announce("[config.alert_desc_orange_upto]", "Attention! Alert level elevated to orange") - else - security_announcement_down.Announce("[config.alert_desc_orange_downto]", "Attention! Alert level lowered to orange") - security_level = SEC_LEVEL_ORANGE - if(SEC_LEVEL_BLUE) - if(security_level < SEC_LEVEL_BLUE) - security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Alert level elevated to blue") - else - security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Alert level lowered to blue") - security_level = SEC_LEVEL_BLUE - if(SEC_LEVEL_RED) - if(security_level < SEC_LEVEL_RED) - security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Code red!", new_sound = sound('sound/effects/alert_levels/red_alert.ogg', volume = 75)) - else - security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") - security_level = SEC_LEVEL_RED - if(SEC_LEVEL_DELTA) - security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta alert level reached!", new_sound = 'sound/effects/alert_levels/deltaklaxon.ogg') - security_level = SEC_LEVEL_DELTA - - var/newlevel = get_security_level() - for(var/obj/machinery/firealarm/FA in machines) - if(FA.z in using_map.contact_levels) - FA.set_security_level(newlevel) - for(var/obj/machinery/status_display/FA in machines) - if(FA.z in using_map.contact_levels) - FA.on_alert_changed(newlevel) - //VOREStation Add - for(var/obj/machinery/holoposter/HP as anything in GLOB.holoposters) - HP.update_icon() - //VOREStation Add End - - if(level >= SEC_LEVEL_RED) - atc.reroute_traffic(yes = 1) // Tell them fuck off we're busy. - else - atc.reroute_traffic(yes = 0) - - spawn() - //SSnightshift.check_nightshift() //CHOMPedit: disabling this for now as we do not use the nightshift currently. - - admin_chat_message(message = "Security level is now: [uppertext(get_security_level())]", color = "#CC2222") //VOREStation Add - -/proc/get_security_level() - switch(security_level) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_YELLOW) - return "yellow" - if(SEC_LEVEL_VIOLET) - return "violet" - if(SEC_LEVEL_ORANGE) - return "orange" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/num2seclevel(var/num) - switch(num) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_YELLOW) - return "yellow" - if(SEC_LEVEL_VIOLET) - return "violet" - if(SEC_LEVEL_ORANGE) - return "orange" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/seclevel2num(var/seclevel) - switch( lowertext(seclevel) ) - if("green") - return SEC_LEVEL_GREEN - if("yellow") - return SEC_LEVEL_YELLOW - if("violet") - return SEC_LEVEL_VIOLET - if("orange") - return SEC_LEVEL_ORANGE - if("blue") - return SEC_LEVEL_BLUE - if("red") - return SEC_LEVEL_RED - if("delta") - return SEC_LEVEL_DELTA - - -/*DEBUG -/mob/verb/set_thing0() - set_security_level(0) -/mob/verb/set_thing1() - set_security_level(1) -/mob/verb/set_thing2() - set_security_level(2) -/mob/verb/set_thing3() - set_security_level(3) -/mob/verb/set_thing4() - set_security_level(4) -/mob/verb/set_thing5() - set_security_level(5) -/mob/verb/set_thing6() - set_security_level(6) +/var/security_level = 0 +//0 = code green +//1 = code yellow +//2 = code violet +//3 = code orange +//4 = code blue +//5 = code red +//6 = code delta + +//config.alert_desc_blue_downto +/var/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/alert_levels/alert_raise.ogg')) +/var/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1) + +/proc/set_security_level(var/level) + switch(level) + if("green") + level = SEC_LEVEL_GREEN + if("yellow") + level = SEC_LEVEL_YELLOW + if("violet") + level = SEC_LEVEL_VIOLET + if("orange") + level = SEC_LEVEL_ORANGE + 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 != security_level) + switch(level) + if(SEC_LEVEL_GREEN) + security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Alert level lowered to code green.") + security_level = SEC_LEVEL_GREEN + if(SEC_LEVEL_YELLOW) + if(security_level < SEC_LEVEL_YELLOW) + security_announcement_up.Announce("[config.alert_desc_yellow_upto]", "Attention! Alert level elevated to yellow") + else + security_announcement_down.Announce("[config.alert_desc_yellow_downto]", "Attention! Alert level lowered to yellow") + security_level = SEC_LEVEL_YELLOW + if(SEC_LEVEL_VIOLET) + if(security_level < SEC_LEVEL_VIOLET) + security_announcement_up.Announce("[config.alert_desc_violet_upto]", "Attention! Alert level elevated to violet") + else + security_announcement_down.Announce("[config.alert_desc_violet_downto]", "Attention! Alert level lowered to violet") + security_level = SEC_LEVEL_VIOLET + if(SEC_LEVEL_ORANGE) + if(security_level < SEC_LEVEL_ORANGE) + security_announcement_up.Announce("[config.alert_desc_orange_upto]", "Attention! Alert level elevated to orange") + else + security_announcement_down.Announce("[config.alert_desc_orange_downto]", "Attention! Alert level lowered to orange") + security_level = SEC_LEVEL_ORANGE + if(SEC_LEVEL_BLUE) + if(security_level < SEC_LEVEL_BLUE) + security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Alert level elevated to blue") + else + security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Alert level lowered to blue") + security_level = SEC_LEVEL_BLUE + if(SEC_LEVEL_RED) + if(security_level < SEC_LEVEL_RED) + security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Code red!", new_sound = sound('sound/effects/alert_levels/red_alert.ogg', volume = 75)) + else + security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") + security_level = SEC_LEVEL_RED + if(SEC_LEVEL_DELTA) + security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta alert level reached!", new_sound = 'sound/effects/alert_levels/deltaklaxon.ogg') + security_level = SEC_LEVEL_DELTA + + var/newlevel = get_security_level() + for(var/obj/machinery/firealarm/FA in machines) + if(FA.z in using_map.contact_levels) + FA.set_security_level(newlevel) + for(var/obj/machinery/status_display/FA in machines) + if(FA.z in using_map.contact_levels) + FA.on_alert_changed(newlevel) + //VOREStation Add + for(var/obj/machinery/holoposter/HP as anything in GLOB.holoposters) + HP.update_icon() + //VOREStation Add End + + if(level >= SEC_LEVEL_RED) + atc.reroute_traffic(yes = 1) // Tell them fuck off we're busy. + else + atc.reroute_traffic(yes = 0) + + spawn() + //SSnightshift.check_nightshift() //CHOMPedit: disabling this for now as we do not use the nightshift currently. + + admin_chat_message(message = "Security level is now: [uppertext(get_security_level())]", color = "#CC2222") //VOREStation Add + +/proc/get_security_level() + switch(security_level) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_YELLOW) + return "yellow" + if(SEC_LEVEL_VIOLET) + return "violet" + if(SEC_LEVEL_ORANGE) + return "orange" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/num2seclevel(var/num) + switch(num) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_YELLOW) + return "yellow" + if(SEC_LEVEL_VIOLET) + return "violet" + if(SEC_LEVEL_ORANGE) + return "orange" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/seclevel2num(var/seclevel) + switch( lowertext(seclevel) ) + if("green") + return SEC_LEVEL_GREEN + if("yellow") + return SEC_LEVEL_YELLOW + if("violet") + return SEC_LEVEL_VIOLET + if("orange") + return SEC_LEVEL_ORANGE + if("blue") + return SEC_LEVEL_BLUE + if("red") + return SEC_LEVEL_RED + if("delta") + return SEC_LEVEL_DELTA + + +/*DEBUG +/mob/verb/set_thing0() + set_security_level(0) +/mob/verb/set_thing1() + set_security_level(1) +/mob/verb/set_thing2() + set_security_level(2) +/mob/verb/set_thing3() + set_security_level(3) +/mob/verb/set_thing4() + set_security_level(4) +/mob/verb/set_thing5() + set_security_level(5) +/mob/verb/set_thing6() + set_security_level(6) */ \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/aoe_turf.dm b/code/modules/spells/aoe_turf/aoe_turf.dm index 3265761077..9f79f694ad 100644 --- a/code/modules/spells/aoe_turf/aoe_turf.dm +++ b/code/modules/spells/aoe_turf/aoe_turf.dm @@ -1,25 +1,25 @@ -/* -Aoe turf spells target a ring of tiles around the user -This ring has an outer radius (range) and an inner radius (inner_radius) -Aoe turf spells have two useful flags: IGNOREDENSE and IGNORESPACE. These are explained in setup.dm -*/ - -/spell/aoe_turf //affects all turfs in view or range (depends) - spell_flags = IGNOREDENSE - var/inner_radius = -1 //for all your ring spell needs - -/spell/aoe_turf/choose_targets(mob/user = usr) - var/list/targets = list() - - for(var/turf/target in view_or_range(range, holder, selection_type)) - if(!(target in view_or_range(inner_radius, holder, selection_type))) - if(target.density && (spell_flags & IGNOREDENSE)) - continue - if(istype(target, /turf/space) && (spell_flags & IGNORESPACE)) - continue - targets += target - - if(!targets.len) //doesn't waste the spell - return - +/* +Aoe turf spells target a ring of tiles around the user +This ring has an outer radius (range) and an inner radius (inner_radius) +Aoe turf spells have two useful flags: IGNOREDENSE and IGNORESPACE. These are explained in setup.dm +*/ + +/spell/aoe_turf //affects all turfs in view or range (depends) + spell_flags = IGNOREDENSE + var/inner_radius = -1 //for all your ring spell needs + +/spell/aoe_turf/choose_targets(mob/user = usr) + var/list/targets = list() + + for(var/turf/target in view_or_range(range, holder, selection_type)) + if(!(target in view_or_range(inner_radius, holder, selection_type))) + if(target.density && (spell_flags & IGNOREDENSE)) + continue + if(istype(target, /turf/space) && (spell_flags & IGNORESPACE)) + continue + targets += target + + if(!targets.len) //doesn't waste the spell + return + return targets \ No newline at end of file diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm index 64489dea4c..5b99239737 100644 --- a/code/modules/spells/artifacts.dm +++ b/code/modules/spells/artifacts.dm @@ -1,25 +1,25 @@ -//////////////////////Scrying orb////////////////////// - -/obj/item/weapon/scrying - name = "scrying orb" - desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." - icon = 'icons/obj/projectiles.dmi' - icon_state = "bluespace" - throw_speed = 3 - throw_range = 7 - throwforce = 10 - damtype = BURN - force = 10 - hitsound = 'sound/items/welder2.ogg' - -/obj/item/weapon/scrying/attack_self(mob/user as mob) - if((user.mind && !wizards.is_antagonist(user.mind))) - to_chat(user, "You stare into the orb and see nothing but your own reflection.") - return - - to_chat(user, "You can see... everything!") - visible_message("[user] stares into [src], their eyes glazing over.") - - user.teleop = user.ghostize(1) - announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.") - return +//////////////////////Scrying orb////////////////////// + +/obj/item/weapon/scrying + name = "scrying orb" + desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." + icon = 'icons/obj/projectiles.dmi' + icon_state = "bluespace" + throw_speed = 3 + throw_range = 7 + throwforce = 10 + damtype = BURN + force = 10 + hitsound = 'sound/items/welder2.ogg' + +/obj/item/weapon/scrying/attack_self(mob/user as mob) + if((user.mind && !wizards.is_antagonist(user.mind))) + to_chat(user, "You stare into the orb and see nothing but your own reflection.") + return + + to_chat(user, "You can see... everything!") + visible_message("[user] stares into [src], their eyes glazing over.") + + user.teleop = user.ghostize(1) + announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.") + return diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm index 5e378f46a3..f98eba1678 100644 --- a/code/modules/spells/spells.dm +++ b/code/modules/spells/spells.dm @@ -1,88 +1,88 @@ -/datum/mind - var/list/learned_spells - -/mob/Life() - ..() - if(spell_masters && spell_masters.len) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - spell_master.update_spells(0, src) - -/mob/Login() - ..() - if(spell_masters) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - spell_master.toggle_open(1) - client.screen -= spell_master - -/mob/Stat() - . = ..() - if(. && spell_list && spell_list.len) - for(var/spell/S in spell_list) - if((!S.connected_button) || !statpanel(S.panel)) - continue //Not showing the noclothes spell - switch(S.charge_type) - if(Sp_RECHARGE) - statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button) - if(Sp_CHARGES) - statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button) - if(Sp_HOLDVAR) - statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button) - -/hook/clone/proc/restore_spells(var/mob/H) - if(H.mind && H.mind.learned_spells) - for(var/spell/spell_to_add in H.mind.learned_spells) - H.add_spell(spell_to_add) - -/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready", var/master_type = /obj/screen/movable/spell_master) - if(!spell_masters) - spell_masters = list() - - if(spell_masters.len) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - if(spell_master.type == master_type) - spell_list.Add(spell_to_add) - spell_master.add_spell(spell_to_add) - return 1 - - var/obj/screen/movable/spell_master/new_spell_master = new master_type //we're here because either we didn't find our type, or we have no spell masters to attach to - if(client) - src.client.screen += new_spell_master - new_spell_master.spell_holder = src - new_spell_master.add_spell(spell_to_add) - if(spell_base) - new_spell_master.icon_state = spell_base - spell_masters.Add(new_spell_master) - spell_list.Add(spell_to_add) - if(mind) - if(!mind.learned_spells) - mind.learned_spells = list() - mind.learned_spells += spell_to_add - - return 1 - -/mob/proc/remove_spell(var/spell/spell_to_remove) - if(!spell_to_remove || !istype(spell_to_remove)) - return - - if(!(spell_to_remove in spell_list)) - return - - if(!spell_masters || !spell_masters.len) - return - - if(mind && mind.learned_spells) - mind.learned_spells.Remove(spell_to_remove) - spell_list.Remove(spell_to_remove) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - spell_master.remove_spell(spell_to_remove) - return 1 - -/mob/proc/silence_spells(var/amount = 0) - if(!(amount >= 0)) - return - - if(!spell_masters || !spell_masters.len) - return - - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - spell_master.silence_spells(amount) +/datum/mind + var/list/learned_spells + +/mob/Life() + ..() + if(spell_masters && spell_masters.len) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + spell_master.update_spells(0, src) + +/mob/Login() + ..() + if(spell_masters) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + spell_master.toggle_open(1) + client.screen -= spell_master + +/mob/Stat() + . = ..() + if(. && spell_list && spell_list.len) + for(var/spell/S in spell_list) + if((!S.connected_button) || !statpanel(S.panel)) + continue //Not showing the noclothes spell + switch(S.charge_type) + if(Sp_RECHARGE) + statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button) + if(Sp_CHARGES) + statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button) + if(Sp_HOLDVAR) + statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button) + +/hook/clone/proc/restore_spells(var/mob/H) + if(H.mind && H.mind.learned_spells) + for(var/spell/spell_to_add in H.mind.learned_spells) + H.add_spell(spell_to_add) + +/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready", var/master_type = /obj/screen/movable/spell_master) + if(!spell_masters) + spell_masters = list() + + if(spell_masters.len) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + if(spell_master.type == master_type) + spell_list.Add(spell_to_add) + spell_master.add_spell(spell_to_add) + return 1 + + var/obj/screen/movable/spell_master/new_spell_master = new master_type //we're here because either we didn't find our type, or we have no spell masters to attach to + if(client) + src.client.screen += new_spell_master + new_spell_master.spell_holder = src + new_spell_master.add_spell(spell_to_add) + if(spell_base) + new_spell_master.icon_state = spell_base + spell_masters.Add(new_spell_master) + spell_list.Add(spell_to_add) + if(mind) + if(!mind.learned_spells) + mind.learned_spells = list() + mind.learned_spells += spell_to_add + + return 1 + +/mob/proc/remove_spell(var/spell/spell_to_remove) + if(!spell_to_remove || !istype(spell_to_remove)) + return + + if(!(spell_to_remove in spell_list)) + return + + if(!spell_masters || !spell_masters.len) + return + + if(mind && mind.learned_spells) + mind.learned_spells.Remove(spell_to_remove) + spell_list.Remove(spell_to_remove) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + spell_master.remove_spell(spell_to_remove) + return 1 + +/mob/proc/silence_spells(var/amount = 0) + if(!(amount >= 0)) + return + + if(!spell_masters || !spell_masters.len) + return + + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + spell_master.silence_spells(amount) diff --git a/code/modules/spells/targeted/equip/equip.dm b/code/modules/spells/targeted/equip/equip.dm index 735daf78e8..429a6321ad 100644 --- a/code/modules/spells/targeted/equip/equip.dm +++ b/code/modules/spells/targeted/equip/equip.dm @@ -1,40 +1,40 @@ -//You can set duration to 0 to have the items last forever - -/spell/targeted/equip_item - name = "equipment spell" - - var/list/equipped_summons = list() //assoc list of text ids and paths to spawn - - var/list/summoned_items = list() //list of items we summoned and will dispose when the spell runs out - - var/delete_old = 1 //if the item previously in the slot is deleted - otherwise, it's dropped - -/spell/targeted/equip_item/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/L in targets) - for(var/slot_id in equipped_summons) - var/to_create = equipped_summons[slot_id] - slot_id = text2num(slot_id) //because the index is text, we access this instead - var/obj/item/new_item = summon_item(to_create) - var/obj/item/old_item = L.get_equipped_item(slot_id) - L.equip_to_slot(new_item, slot_id) - if(old_item) - L.remove_from_mob(old_item) - if(delete_old) - qdel(old_item) - else - old_item.loc = L.loc - - if(duration) - summoned_items += new_item //we store it in a list to remove later - - if(duration) - spawn(duration) - for(var/obj/item/to_remove in summoned_items) - if(istype(to_remove.loc, /mob)) - var/mob/M = to_remove.loc - M.remove_from_mob(to_remove) - qdel(to_remove) - -/spell/targeted/equip_item/proc/summon_item(var/newtype) - return new newtype +//You can set duration to 0 to have the items last forever + +/spell/targeted/equip_item + name = "equipment spell" + + var/list/equipped_summons = list() //assoc list of text ids and paths to spawn + + var/list/summoned_items = list() //list of items we summoned and will dispose when the spell runs out + + var/delete_old = 1 //if the item previously in the slot is deleted - otherwise, it's dropped + +/spell/targeted/equip_item/cast(list/targets, mob/user = usr) + ..() + for(var/mob/living/L in targets) + for(var/slot_id in equipped_summons) + var/to_create = equipped_summons[slot_id] + slot_id = text2num(slot_id) //because the index is text, we access this instead + var/obj/item/new_item = summon_item(to_create) + var/obj/item/old_item = L.get_equipped_item(slot_id) + L.equip_to_slot(new_item, slot_id) + if(old_item) + L.remove_from_mob(old_item) + if(delete_old) + qdel(old_item) + else + old_item.loc = L.loc + + if(duration) + summoned_items += new_item //we store it in a list to remove later + + if(duration) + spawn(duration) + for(var/obj/item/to_remove in summoned_items) + if(istype(to_remove.loc, /mob)) + var/mob/M = to_remove.loc + M.remove_from_mob(to_remove) + qdel(to_remove) + +/spell/targeted/equip_item/proc/summon_item(var/newtype) + return new newtype diff --git a/code/modules/spells/targeted/equip/horsemask.dm b/code/modules/spells/targeted/equip/horsemask.dm index 462cca13ef..5ec6ccfc00 100644 --- a/code/modules/spells/targeted/equip/horsemask.dm +++ b/code/modules/spells/targeted/equip/horsemask.dm @@ -1,39 +1,39 @@ -/spell/targeted/equip_item/horsemask - name = "Curse of the Horseman" - desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes." - school = "transmutation" - charge_type = Sp_RECHARGE - charge_max = 150 - charge_counter = 0 - spell_flags = 0 - invocation = "KN'A FTAGHU, PUCK 'BTHNK!" - invocation_type = SpI_SHOUT - range = 7 - max_targets = 1 - cooldown_min = 30 //30 deciseconds reduction per rank - selection_type = "range" - - compatible_mobs = list(/mob/living/carbon/human) - - hud_state = "wiz_horse" - -/spell/targeted/equip_item/horsemask/New() - ..() - equipped_summons = list("[slot_wear_mask]" = /obj/item/clothing/mask/horsehead) - -/spell/targeted/equip_item/horsemask/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/target in targets) - target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ - "Your face burns up, and shortly after the fire you realise you have the face of a horse!") - target.flash_eyes() - -/spell/targeted/equip_item/horsemask/summon_item(var/new_type) - var/obj/item/new_item = new new_type - new_item.canremove = FALSE //curses! - new_item.unacidable = TRUE - if(istype(new_item, /obj/item/clothing/mask/horsehead)) - var/obj/item/clothing/mask/horsehead/magichead = new_item - magichead.flags_inv = null //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH - return new_item +/spell/targeted/equip_item/horsemask + name = "Curse of the Horseman" + desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes." + school = "transmutation" + charge_type = Sp_RECHARGE + charge_max = 150 + charge_counter = 0 + spell_flags = 0 + invocation = "KN'A FTAGHU, PUCK 'BTHNK!" + invocation_type = SpI_SHOUT + range = 7 + max_targets = 1 + cooldown_min = 30 //30 deciseconds reduction per rank + selection_type = "range" + + compatible_mobs = list(/mob/living/carbon/human) + + hud_state = "wiz_horse" + +/spell/targeted/equip_item/horsemask/New() + ..() + equipped_summons = list("[slot_wear_mask]" = /obj/item/clothing/mask/horsehead) + +/spell/targeted/equip_item/horsemask/cast(list/targets, mob/user = usr) + ..() + for(var/mob/living/target in targets) + target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ + "Your face burns up, and shortly after the fire you realise you have the face of a horse!") + target.flash_eyes() + +/spell/targeted/equip_item/horsemask/summon_item(var/new_type) + var/obj/item/new_item = new new_type + new_item.canremove = FALSE //curses! + new_item.unacidable = TRUE + if(istype(new_item, /obj/item/clothing/mask/horsehead)) + var/obj/item/clothing/mask/horsehead/magichead = new_item + magichead.flags_inv = null //so you can still see their face + magichead.voicechange = 1 //NEEEEIIGHH + return new_item diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm index c2de26439f..44697ab797 100644 --- a/code/modules/spells/targeted/targeted.dm +++ b/code/modules/spells/targeted/targeted.dm @@ -1,145 +1,145 @@ -/* -Targeted spells (with the exception of dumbfire) select from all the mobs in the defined range -Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are explained in setup.dm -*/ - - -/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob - var/max_targets = 1 //leave 0 for unlimited targets in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range - var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast - - - var/amt_weakened = 0 - var/amt_paralysis = 0 - var/amt_stunned = 0 - - var/amt_dizziness = 0 - var/amt_confused = 0 - var/amt_stuttering = 0 - - //set to negatives for healing - var/amt_dam_fire = 0 - var/amt_dam_brute = 0 - var/amt_dam_oxy = 0 - var/amt_dam_tox = 0 - - var/amt_eye_blind = 0 - var/amt_eye_blurry = 0 - - var/list/compatible_mobs = list() - - -/spell/targeted/choose_targets(mob/user = usr) - var/list/targets = list() - - if(max_targets == 0) //unlimited - if(range == -2) - targets = living_mob_list - else - for(var/mob/living/target in view_or_range(range, holder, selection_type)) - targets += target - - else if(max_targets == 1) //single target can be picked - if((range == 0 || range == -1) && spell_flags & INCLUDEUSER) - targets += user - else - var/list/possible_targets = list() - var/list/starting_targets - if(range == -2) - starting_targets = living_mob_list - else - starting_targets = view_or_range(range, holder, selection_type) - - for(var/mob/living/M in starting_targets) - if(!(spell_flags & INCLUDEUSER) && M == user) - continue - if(compatible_mobs && compatible_mobs.len) - if(!is_type_in_list(M, compatible_mobs)) continue - if(compatible_mobs && compatible_mobs.len && !is_type_in_list(M, compatible_mobs)) - continue - possible_targets += M - - if(possible_targets.len) - if(spell_flags & SELECTABLE) //if we are allowed to choose. see setup.dm for details - var/mob/temp_target = tgui_input_list(user, "Choose the target for the spell.", "Targeting", possible_targets) - if(temp_target) - targets += temp_target - else - targets += pick(possible_targets) - //Adds a safety check post-input to make sure those targets are actually in range. - - - else - var/list/possible_targets = list() - var/list/starting_targets - - if(range == -2) - starting_targets = living_mob_list - else - starting_targets = view_or_range(range, holder, selection_type) - - for(var/mob/living/target in starting_targets) - if(!(spell_flags & INCLUDEUSER) && target == user) - continue - if(compatible_mobs && !is_type_in_list(target, compatible_mobs)) - continue - possible_targets += target - - if(spell_flags & SELECTABLE) - for(var/i = 1; i<=max_targets, i++) - if(!possible_targets.len) - break - var/mob/M = tgui_input_list(user, "Choose the target for the spell.", "Targeting", possible_targets) - if(!M) - break - if(range != -2) - if(!(M in view_or_range(range, holder, selection_type))) - continue - targets += M - possible_targets -= M - else - for(var/i=1,i<=max_targets,i++) - if(!possible_targets.len) - break - if(target_ignore_prev) - var/target = pick(possible_targets) - possible_targets -= target - targets += target - else - targets += pick(possible_targets) - - if(!(spell_flags & INCLUDEUSER) && (user in targets)) - targets -= user - - if(compatible_mobs && compatible_mobs.len) - for(var/mob/living/target in targets) //filters out all the non-compatible mobs - if(!is_type_in_list(target, compatible_mobs)) - targets -= target - - return targets - -/spell/targeted/cast(var/list/targets, mob/user) - for(var/mob/living/target in targets) - if(range >= 0) - if(!(target in view_or_range(range, holder, selection_type))) //filter at time of casting - targets -= target - continue - apply_spell_damage(target) - -/spell/targeted/proc/apply_spell_damage(mob/living/target) - target.adjustBruteLoss(amt_dam_brute) - target.adjustFireLoss(amt_dam_fire) - target.adjustToxLoss(amt_dam_tox) - target.adjustOxyLoss(amt_dam_oxy) - //disabling - target.Weaken(amt_weakened) - target.Paralyse(amt_paralysis) - target.Stun(amt_stunned) - if(amt_weakened || amt_paralysis || amt_stunned) - if(target.buckled) - target.buckled = null - target.Blind(amt_eye_blind) - target.eye_blurry += amt_eye_blurry - target.dizziness += amt_dizziness - target.Confuse(amt_confused) +/* +Targeted spells (with the exception of dumbfire) select from all the mobs in the defined range +Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are explained in setup.dm +*/ + + +/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob + var/max_targets = 1 //leave 0 for unlimited targets in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range + var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast + + + var/amt_weakened = 0 + var/amt_paralysis = 0 + var/amt_stunned = 0 + + var/amt_dizziness = 0 + var/amt_confused = 0 + var/amt_stuttering = 0 + + //set to negatives for healing + var/amt_dam_fire = 0 + var/amt_dam_brute = 0 + var/amt_dam_oxy = 0 + var/amt_dam_tox = 0 + + var/amt_eye_blind = 0 + var/amt_eye_blurry = 0 + + var/list/compatible_mobs = list() + + +/spell/targeted/choose_targets(mob/user = usr) + var/list/targets = list() + + if(max_targets == 0) //unlimited + if(range == -2) + targets = living_mob_list + else + for(var/mob/living/target in view_or_range(range, holder, selection_type)) + targets += target + + else if(max_targets == 1) //single target can be picked + if((range == 0 || range == -1) && spell_flags & INCLUDEUSER) + targets += user + else + var/list/possible_targets = list() + var/list/starting_targets + if(range == -2) + starting_targets = living_mob_list + else + starting_targets = view_or_range(range, holder, selection_type) + + for(var/mob/living/M in starting_targets) + if(!(spell_flags & INCLUDEUSER) && M == user) + continue + if(compatible_mobs && compatible_mobs.len) + if(!is_type_in_list(M, compatible_mobs)) continue + if(compatible_mobs && compatible_mobs.len && !is_type_in_list(M, compatible_mobs)) + continue + possible_targets += M + + if(possible_targets.len) + if(spell_flags & SELECTABLE) //if we are allowed to choose. see setup.dm for details + var/mob/temp_target = tgui_input_list(user, "Choose the target for the spell.", "Targeting", possible_targets) + if(temp_target) + targets += temp_target + else + targets += pick(possible_targets) + //Adds a safety check post-input to make sure those targets are actually in range. + + + else + var/list/possible_targets = list() + var/list/starting_targets + + if(range == -2) + starting_targets = living_mob_list + else + starting_targets = view_or_range(range, holder, selection_type) + + for(var/mob/living/target in starting_targets) + if(!(spell_flags & INCLUDEUSER) && target == user) + continue + if(compatible_mobs && !is_type_in_list(target, compatible_mobs)) + continue + possible_targets += target + + if(spell_flags & SELECTABLE) + for(var/i = 1; i<=max_targets, i++) + if(!possible_targets.len) + break + var/mob/M = tgui_input_list(user, "Choose the target for the spell.", "Targeting", possible_targets) + if(!M) + break + if(range != -2) + if(!(M in view_or_range(range, holder, selection_type))) + continue + targets += M + possible_targets -= M + else + for(var/i=1,i<=max_targets,i++) + if(!possible_targets.len) + break + if(target_ignore_prev) + var/target = pick(possible_targets) + possible_targets -= target + targets += target + else + targets += pick(possible_targets) + + if(!(spell_flags & INCLUDEUSER) && (user in targets)) + targets -= user + + if(compatible_mobs && compatible_mobs.len) + for(var/mob/living/target in targets) //filters out all the non-compatible mobs + if(!is_type_in_list(target, compatible_mobs)) + targets -= target + + return targets + +/spell/targeted/cast(var/list/targets, mob/user) + for(var/mob/living/target in targets) + if(range >= 0) + if(!(target in view_or_range(range, holder, selection_type))) //filter at time of casting + targets -= target + continue + apply_spell_damage(target) + +/spell/targeted/proc/apply_spell_damage(mob/living/target) + target.adjustBruteLoss(amt_dam_brute) + target.adjustFireLoss(amt_dam_fire) + target.adjustToxLoss(amt_dam_tox) + target.adjustOxyLoss(amt_dam_oxy) + //disabling + target.Weaken(amt_weakened) + target.Paralyse(amt_paralysis) + target.Stun(amt_stunned) + if(amt_weakened || amt_paralysis || amt_stunned) + if(target.buckled) + target.buckled = null + target.Blind(amt_eye_blind) + target.eye_blurry += amt_eye_blurry + target.dizziness += amt_dizziness + target.Confuse(amt_confused) target.stuttering += amt_stuttering \ No newline at end of file diff --git a/code/modules/tables/debug.dm b/code/modules/tables/debug.dm index 688758cace..6fba6f6bb6 100644 --- a/code/modules/tables/debug.dm +++ b/code/modules/tables/debug.dm @@ -1,22 +1,22 @@ - -// Mostly for debugging table connections -// This file is not #included in the .dme. - -/obj/structure/table/debug - New() - material = get_material_by_name("debugium") - ..() - -/datum/material/debug - name = "debugium" - stack_type = /obj/item/stack/material/debug - icon_base = "debug" - icon_reinf = "rdebug" - icon_colour = "#FFFFFF" - -/obj/item/stack/material/debug - name = "debugium" - icon = 'icons/obj/tables.dmi' - icon_state = "debugium" - default_type = "debugium" - + +// Mostly for debugging table connections +// This file is not #included in the .dme. + +/obj/structure/table/debug + New() + material = get_material_by_name("debugium") + ..() + +/datum/material/debug + name = "debugium" + stack_type = /obj/item/stack/material/debug + icon_base = "debug" + icon_reinf = "rdebug" + icon_colour = "#FFFFFF" + +/obj/item/stack/material/debug + name = "debugium" + icon = 'icons/obj/tables.dmi' + icon_state = "debugium" + default_type = "debugium" + diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm index 7bf9544002..36e6a42da7 100644 --- a/code/modules/tables/flipping.dm +++ b/code/modules/tables/flipping.dm @@ -1,118 +1,118 @@ - -/obj/structure/table/proc/straight_table_check(var/direction) - if(health > 100) - return 0 - var/obj/structure/table/T - for(var/angle in list(-90,90)) - T = locate() in get_step(src.loc,turn(direction,angle)) - if(T && T.flipped == 0 && T.material.name == material.name) - return 0 - T = locate() in get_step(src.loc,direction) - if (!T || T.flipped == 1 || T.material != material) - return 1 - return T.straight_table_check(direction) - -/obj/structure/table/verb/do_flip() - set name = "Flip table" - set desc = "Flips a non-reinforced table" - set category = "Object" - set src in oview(1) - - if (!can_touch(usr) || ismouse(usr)) - return - - if(flipped < 0 || !flip(get_cardinal_dir(usr,src))) - to_chat(usr, "It won't budge.") - return - - usr.visible_message("[usr] flips \the [src]!") - - if(climbable) - structure_shaken() - - return - -/obj/structure/table/proc/unflipping_check(var/direction) - - for(var/mob/M in oview(src,0)) - return 0 - - var/obj/occupied = turf_is_crowded() - if(occupied) - to_chat(usr, "There's \a [occupied] in the way.") - return 0 - - var/list/L = list() - if(direction) - L.Add(direction) - else - L.Add(turn(src.dir,-90)) - L.Add(turn(src.dir,90)) - for(var/new_dir in L) - var/obj/structure/table/T = locate() in get_step(src.loc,new_dir) - if(T && T.material && T.material.name == material.name) - if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir)) - return 0 - return 1 - -/obj/structure/table/proc/do_put() - set name = "Put table back" - set desc = "Puts flipped table back" - set category = "Object" - set src in oview(1) - - if (!can_touch(usr)) - return - - if (!unflipping_check()) - to_chat(usr, "It won't budge.") - return - unflip() - -/obj/structure/table/proc/flip(var/direction) - if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) ) - return 0 - - verbs -=/obj/structure/table/verb/do_flip - verbs +=/obj/structure/table/proc/do_put - - var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45))) - for (var/atom/movable/A in get_turf(src)) - if (!A.anchored) - spawn(0) - A.throw_at(pick(targets),1,1) - - set_dir(direction) - if(dir != NORTH) - plane = MOB_PLANE - layer = ABOVE_MOB_LAYER - //climbable = FALSE //flipping tables allows them to be used as makeshift barriers - flipped = 1 - flags |= ON_BORDER - for(var/D in list(turn(direction, 90), turn(direction, -90))) - var/obj/structure/table/T = locate() in get_step(src,D) - if(T && T.flipped == 0 && material && T.material && T.material.name == material.name) - T.flip(direction) - take_damage(rand(5, 10)) - update_connections(1) - update_icon() - - return 1 - -/obj/structure/table/proc/unflip() - verbs -=/obj/structure/table/proc/do_put - verbs +=/obj/structure/table/verb/do_flip - - reset_plane_and_layer() - flipped = 0 - //climbable = initial(climbable) - flags &= ~ON_BORDER - for(var/D in list(turn(dir, 90), turn(dir, -90))) - var/obj/structure/table/T = locate() in get_step(src.loc,D) - if(T && T.flipped == 1 && T.dir == src.dir && material && T.material&& T.material.name == material.name) - T.unflip() - - update_connections(1) - update_icon() - - return 1 + +/obj/structure/table/proc/straight_table_check(var/direction) + if(health > 100) + return 0 + var/obj/structure/table/T + for(var/angle in list(-90,90)) + T = locate() in get_step(src.loc,turn(direction,angle)) + if(T && T.flipped == 0 && T.material.name == material.name) + return 0 + T = locate() in get_step(src.loc,direction) + if (!T || T.flipped == 1 || T.material != material) + return 1 + return T.straight_table_check(direction) + +/obj/structure/table/verb/do_flip() + set name = "Flip table" + set desc = "Flips a non-reinforced table" + set category = "Object" + set src in oview(1) + + if (!can_touch(usr) || ismouse(usr)) + return + + if(flipped < 0 || !flip(get_cardinal_dir(usr,src))) + to_chat(usr, "It won't budge.") + return + + usr.visible_message("[usr] flips \the [src]!") + + if(climbable) + structure_shaken() + + return + +/obj/structure/table/proc/unflipping_check(var/direction) + + for(var/mob/M in oview(src,0)) + return 0 + + var/obj/occupied = turf_is_crowded() + if(occupied) + to_chat(usr, "There's \a [occupied] in the way.") + return 0 + + var/list/L = list() + if(direction) + L.Add(direction) + else + L.Add(turn(src.dir,-90)) + L.Add(turn(src.dir,90)) + for(var/new_dir in L) + var/obj/structure/table/T = locate() in get_step(src.loc,new_dir) + if(T && T.material && T.material.name == material.name) + if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir)) + return 0 + return 1 + +/obj/structure/table/proc/do_put() + set name = "Put table back" + set desc = "Puts flipped table back" + set category = "Object" + set src in oview(1) + + if (!can_touch(usr)) + return + + if (!unflipping_check()) + to_chat(usr, "It won't budge.") + return + unflip() + +/obj/structure/table/proc/flip(var/direction) + if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) ) + return 0 + + verbs -=/obj/structure/table/verb/do_flip + verbs +=/obj/structure/table/proc/do_put + + var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45))) + for (var/atom/movable/A in get_turf(src)) + if (!A.anchored) + spawn(0) + A.throw_at(pick(targets),1,1) + + set_dir(direction) + if(dir != NORTH) + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER + //climbable = FALSE //flipping tables allows them to be used as makeshift barriers + flipped = 1 + flags |= ON_BORDER + for(var/D in list(turn(direction, 90), turn(direction, -90))) + var/obj/structure/table/T = locate() in get_step(src,D) + if(T && T.flipped == 0 && material && T.material && T.material.name == material.name) + T.flip(direction) + take_damage(rand(5, 10)) + update_connections(1) + update_icon() + + return 1 + +/obj/structure/table/proc/unflip() + verbs -=/obj/structure/table/proc/do_put + verbs +=/obj/structure/table/verb/do_flip + + reset_plane_and_layer() + flipped = 0 + //climbable = initial(climbable) + flags &= ~ON_BORDER + for(var/D in list(turn(dir, 90), turn(dir, -90))) + var/obj/structure/table/T = locate() in get_step(src.loc,D) + if(T && T.flipped == 1 && T.dir == src.dir && material && T.material&& T.material.name == material.name) + T.unflip() + + update_connections(1) + update_icon() + + return 1 diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm index 779bb76d5f..d1aae5fc71 100644 --- a/code/modules/tables/interactions.dm +++ b/code/modules/tables/interactions.dm @@ -1,163 +1,163 @@ -/obj/structure/table/CanPass(atom/movable/mover, turf/target) - if(istype(mover,/obj/item/projectile)) - return (check_cover(mover,target)) - if(flipped == 1) - if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir - return !density - return TRUE - if(istype(mover) && mover.checkpass(PASSTABLE)) - return TRUE - if(locate(/obj/structure/table/bench) in get_turf(mover)) - return FALSE - var/obj/structure/table/table = locate(/obj/structure/table) in get_turf(mover) - if(table && !(table.flipped == 1)) - return TRUE - return FALSE - -/obj/structure/table/climb_to(mob/living/mover) - if(flipped == 1 && mover.loc == loc) - var/turf/T = get_step(src, dir) - if(T.Enter(mover)) - return T - - return ..() - -/obj/structure/table/Uncross(atom/movable/mover, turf/target) - if(flipped == 1 && (get_dir(mover, target) == dir)) // From here to elsewhere, can't move in our dir - return !density - return TRUE - -//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. -/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) - var/turf/cover - if(flipped==1) - cover = get_turf(src) - else if(flipped==0) - cover = get_step(loc, get_dir(from, loc)) - if(!cover) - return 1 - if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close - return 1 - if (get_turf(P.original) == cover) - var/chance = 20 - if (ismob(P.original)) - var/mob/M = P.original - if (M.lying) - chance += 20 //Lying down lets you catch less bullets - if(flipped==1) - if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets - chance += 20 - else - return 1 //But only from one side - if(prob(chance)) - health -= P.damage/2 - if (health > 0) - visible_message("[P] hits \the [src]!") - return 0 - else - visible_message("[src] breaks down!") - break_to_parts() - return 1 - return 1 - -/obj/structure/table/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params) - if(ismob(O.loc)) //If placing an item - if(!isitem(O) || user.get_active_hand() != O) - return ..() - if(isrobot(user)) - return - user.drop_item() - if(O.loc != src.loc) - step(O, get_dir(O, src)) - - else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop - var/obj/item/I = O - if(I.anchored) - return - - if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated())) - if(O.w_class <= user.can_pull_size) - O.forceMove(loc) - auto_align(I, params, TRUE) - else - to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!")) - return - - return ..() - - -/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/hit_modifier, var/click_parameters) - if (!W) return - - // Handle harm intent grabbing/tabling. - if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) - var/obj/item/weapon/grab/G = W - if (istype(G.affecting, /mob/living)) - var/mob/living/M = G.affecting - var/obj/occupied = turf_is_crowded() - if(occupied) - to_chat(user, "There's \a [occupied] in the way.") - return - if(!user.Adjacent(M)) - return - if (G.state < 2) - if(user.a_intent == I_HURT) - if (prob(15)) M.Weaken(5) - M.apply_damage(8,def_zone = BP_HEAD) - visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!") - if(material) - playsound(src, material.tableslam_noise, 50, 1) - else - playsound(src, 'sound/weapons/tablehit1.ogg', 50, 1) - var/list/L = take_damage(rand(1,5)) - // Shards. Extra damage, plus potentially the fact YOU LITERALLY HAVE A PIECE OF GLASS/METAL/WHATEVER IN YOUR FACE - for(var/obj/item/weapon/material/shard/S in L) - if(prob(50)) - M.visible_message("\The [S] slices [M]'s face messily!", - "\The [S] slices your face messily!") - M.apply_damage(10, def_zone = BP_HEAD) - if(prob(2)) - M.embed(S, def_zone = BP_HEAD) - else - to_chat(user, "You need a better grip to do that!") - return - else if(G.state > GRAB_AGGRESSIVE || world.time >= (G.last_action + UPGRADE_COOLDOWN)) - M.forceMove(get_turf(src)) - M.Weaken(5) - visible_message("[G.assailant] puts [G.affecting] on \the [src].") - qdel(W) - return - - // Handle dismantling or placing things on the table from here on. - if(isrobot(user)) - return - - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - - if(istype(W, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - user.visible_message("\The [src] was sliced apart by [user]!") - break_to_parts() - return - - if(istype(W, /obj/item/weapon/melee/changeling/arm_blade)) - user.visible_message("\The [src] was sliced apart by [user]!") - break_to_parts() - return - - if(can_plate && !material) - to_chat(user, "There's nothing to put \the [W] on! Try adding plating to \the [src] first.") - return - -// Placing stuff on tables - if(user.unEquip(W, 0, src.loc) && user.is_preference_enabled(/datum/client_preference/precision_placement)) - auto_align(W, click_parameters) - return 1 - -/obj/structure/table/attack_tk() // no telehulk sorry - return +/obj/structure/table/CanPass(atom/movable/mover, turf/target) + if(istype(mover,/obj/item/projectile)) + return (check_cover(mover,target)) + if(flipped == 1) + if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir + return !density + return TRUE + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + if(locate(/obj/structure/table/bench) in get_turf(mover)) + return FALSE + var/obj/structure/table/table = locate(/obj/structure/table) in get_turf(mover) + if(table && !(table.flipped == 1)) + return TRUE + return FALSE + +/obj/structure/table/climb_to(mob/living/mover) + if(flipped == 1 && mover.loc == loc) + var/turf/T = get_step(src, dir) + if(T.Enter(mover)) + return T + + return ..() + +/obj/structure/table/Uncross(atom/movable/mover, turf/target) + if(flipped == 1 && (get_dir(mover, target) == dir)) // From here to elsewhere, can't move in our dir + return !density + return TRUE + +//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. +/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) + var/turf/cover + if(flipped==1) + cover = get_turf(src) + else if(flipped==0) + cover = get_step(loc, get_dir(from, loc)) + if(!cover) + return 1 + if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close + return 1 + if (get_turf(P.original) == cover) + var/chance = 20 + if (ismob(P.original)) + var/mob/M = P.original + if (M.lying) + chance += 20 //Lying down lets you catch less bullets + if(flipped==1) + if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets + chance += 20 + else + return 1 //But only from one side + if(prob(chance)) + health -= P.damage/2 + if (health > 0) + visible_message("[P] hits \the [src]!") + return 0 + else + visible_message("[src] breaks down!") + break_to_parts() + return 1 + return 1 + +/obj/structure/table/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params) + if(ismob(O.loc)) //If placing an item + if(!isitem(O) || user.get_active_hand() != O) + return ..() + if(isrobot(user)) + return + user.drop_item() + if(O.loc != src.loc) + step(O, get_dir(O, src)) + + else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop + var/obj/item/I = O + if(I.anchored) + return + + if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated())) + if(O.w_class <= user.can_pull_size) + O.forceMove(loc) + auto_align(I, params, TRUE) + else + to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!")) + return + + return ..() + + +/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/hit_modifier, var/click_parameters) + if (!W) return + + // Handle harm intent grabbing/tabling. + if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) + var/obj/item/weapon/grab/G = W + if (istype(G.affecting, /mob/living)) + var/mob/living/M = G.affecting + var/obj/occupied = turf_is_crowded() + if(occupied) + to_chat(user, "There's \a [occupied] in the way.") + return + if(!user.Adjacent(M)) + return + if (G.state < 2) + if(user.a_intent == I_HURT) + if (prob(15)) M.Weaken(5) + M.apply_damage(8,def_zone = BP_HEAD) + visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!") + if(material) + playsound(src, material.tableslam_noise, 50, 1) + else + playsound(src, 'sound/weapons/tablehit1.ogg', 50, 1) + var/list/L = take_damage(rand(1,5)) + // Shards. Extra damage, plus potentially the fact YOU LITERALLY HAVE A PIECE OF GLASS/METAL/WHATEVER IN YOUR FACE + for(var/obj/item/weapon/material/shard/S in L) + if(prob(50)) + M.visible_message("\The [S] slices [M]'s face messily!", + "\The [S] slices your face messily!") + M.apply_damage(10, def_zone = BP_HEAD) + if(prob(2)) + M.embed(S, def_zone = BP_HEAD) + else + to_chat(user, "You need a better grip to do that!") + return + else if(G.state > GRAB_AGGRESSIVE || world.time >= (G.last_action + UPGRADE_COOLDOWN)) + M.forceMove(get_turf(src)) + M.Weaken(5) + visible_message("[G.assailant] puts [G.affecting] on \the [src].") + qdel(W) + return + + // Handle dismantling or placing things on the table from here on. + if(isrobot(user)) + return + + if(W.loc != user) // This should stop mounted modules ending up outside the module. + return + + if(istype(W, /obj/item/weapon/melee/energy/blade)) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) + user.visible_message("\The [src] was sliced apart by [user]!") + break_to_parts() + return + + if(istype(W, /obj/item/weapon/melee/changeling/arm_blade)) + user.visible_message("\The [src] was sliced apart by [user]!") + break_to_parts() + return + + if(can_plate && !material) + to_chat(user, "There's nothing to put \the [W] on! Try adding plating to \the [src] first.") + return + +// Placing stuff on tables + if(user.unEquip(W, 0, src.loc) && user.is_preference_enabled(/datum/client_preference/precision_placement)) + auto_align(W, click_parameters) + return 1 + +/obj/structure/table/attack_tk() // no telehulk sorry + return diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm index 9e45df2117..e15d7466c4 100644 --- a/code/modules/tables/presets.dm +++ b/code/modules/tables/presets.dm @@ -1,249 +1,249 @@ -//TABLE PRESETS -/obj/structure/table/standard - icon_state = "plain_preview" - color = "#EEEEEE" - -/obj/structure/table/standard/New() - material = get_material_by_name(DEFAULT_TABLE_MATERIAL) - ..() - -/obj/structure/table/steel - icon_state = "plain_preview" - color = "#666666" - -/obj/structure/table/steel/New() - material = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/marble - icon_state = "stone_preview" - color = "#CCCCCC" - -/obj/structure/table/marble/New() - material = get_material_by_name("marble") - ..() - -/obj/structure/table/reinforced - icon_state = "reinf_preview" - color = "#EEEEEE" - -/obj/structure/table/reinforced/New() - material = get_material_by_name(DEFAULT_TABLE_MATERIAL) - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/steel_reinforced - icon_state = "reinf_preview" - color = "#666666" - -/obj/structure/table/steel_reinforced/New() - material = get_material_by_name(MAT_STEEL) - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/wooden_reinforced - icon_state = "reinf_preview" - color = "#824B28" - -/obj/structure/table/wooden_reinforced/New() - material = get_material_by_name("wood") - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/woodentable - icon_state = "plain_preview" - color = "#824B28" - -/obj/structure/table/woodentable/New() - material = get_material_by_name("wood") - ..() - -/obj/structure/table/sifwoodentable - icon_state = "plain_preview" - color = "#824B28" - -/obj/structure/table/sifwoodentable/New() - material = get_material_by_name("alien wood") - ..() - -/obj/structure/table/sifwooden_reinforced - icon_state = "reinf_preview" - color = "#824B28" - -/obj/structure/table/sifwooden_reinforced/New() - material = get_material_by_name("alien wood") - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/hardwoodtable - icon_state = "stone_preview" - color = "#42291a" - -/obj/structure/table/hardwoodtable/Initialize(mapload) - material = get_material_by_name("hardwood") - return ..() - -/obj/structure/table/gamblingtable - icon_state = "gamble_preview" - -/obj/structure/table/gamblingtable/New() - material = get_material_by_name("wood") - carpeted = 1 - ..() - -/obj/structure/table/glass - icon_state = "plain_preview" - color = "#00E1FF" - alpha = 77 // 0.3 * 255 - -/obj/structure/table/glass/New() - material = get_material_by_name("glass") - ..() - -/obj/structure/table/borosilicate - icon_state = "plain_preview" - color = "#4D3EAC" - alpha = 77 - -/obj/structure/table/borosilicate/New() - material = get_material_by_name("borosilicate glass") - ..() - -/obj/structure/table/holotable - icon_state = "holo_preview" - color = "#EEEEEE" - -/obj/structure/table/holotable/New() - material = get_material_by_name("holo[DEFAULT_TABLE_MATERIAL]") - ..() - -/obj/structure/table/woodentable/holotable - icon_state = "holo_preview" - -/obj/structure/table/woodentable/holotable/New() - material = get_material_by_name("holowood") - ..() - -/obj/structure/table/alien - name = "alien table" - desc = "Advanced flat surface technology at work!" - icon_state = "alien_preview" - can_reinforce = FALSE - can_plate = FALSE - -/obj/structure/table/alien/New() - material = get_material_by_name("alium") - verbs -= /obj/structure/table/verb/do_flip - verbs -= /obj/structure/table/proc/do_put - ..() - -/obj/structure/table/alien/dismantle(obj/item/weapon/tool/wrench/W, mob/user) - to_chat(user, "You cannot dismantle \the [src].") - return - -//BENCH PRESETS -/obj/structure/table/bench/standard - icon_state = "plain_preview" - color = "#EEEEEE" - -/obj/structure/table/bench/standard/New() - material = get_material_by_name(DEFAULT_TABLE_MATERIAL) - ..() - -/obj/structure/table/bench/steel - icon_state = "plain_preview" - color = "#666666" - -/obj/structure/table/bench/steel/New() - material = get_material_by_name(MAT_STEEL) - ..() - - -/obj/structure/table/bench/marble - icon_state = "stone_preview" - color = "#CCCCCC" - -/obj/structure/table/bench/marble/New() - material = get_material_by_name("marble") - ..() -/* -/obj/structure/table/bench/reinforced - icon_state = "reinf_preview" - color = "#EEEEEE" - -/obj/structure/table/bench/reinforced/New() - material = get_material_by_name(DEFAULT_TABLE_MATERIAL) - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/bench/steel_reinforced - icon_state = "reinf_preview" - color = "#666666" - -/obj/structure/table/bench/steel_reinforced/New() - material = get_material_by_name(MAT_STEEL) - reinforced = get_material_by_name(MAT_STEEL) - ..() - -/obj/structure/table/bench/wooden_reinforced - icon_state = "reinf_preview" - color = "#824B28" - -/obj/structure/table/bench/wooden_reinforced/New() - material = get_material_by_name("wood") - reinforced = get_material_by_name(MAT_STEEL) - ..() -*/ -/obj/structure/table/bench/wooden - icon_state = "plain_preview" - color = "#824B28" - -/obj/structure/table/bench/wooden/New() - material = get_material_by_name("wood") - ..() - -/obj/structure/table/bench/sifwooden - icon_state = "plain_preview" - color = "#824B28" - -/obj/structure/table/bench/sifwooden/New() - material = get_material_by_name("alien wood") - ..() - -/obj/structure/table/bench/sifwooden/padded - icon_state = "padded_preview" - carpeted = 1 - -/obj/structure/table/bench/padded - icon_state = "padded_preview" - -/obj/structure/table/bench/padded/New() - material = get_material_by_name(MAT_STEEL) - carpeted = 1 - ..() - -/obj/structure/table/bench/glass - icon_state = "plain_preview" - color = "#00E1FF" - alpha = 77 // 0.3 * 255 - -/obj/structure/table/bench/glass/New() - material = get_material_by_name("glass") - ..() - -/* -/obj/structure/table/bench/holotable - icon_state = "holo_preview" - color = "#EEEEEE" - -/obj/structure/table/bench/holotable/New() - material = get_material_by_name("holo[DEFAULT_TABLE_MATERIAL]") - ..() - -/obj/structure/table/bench/wooden/holotable - icon_state = "holo_preview" - -/obj/structure/table/bench/wooden/holotable/New() - material = get_material_by_name("holowood") - ..() +//TABLE PRESETS +/obj/structure/table/standard + icon_state = "plain_preview" + color = "#EEEEEE" + +/obj/structure/table/standard/New() + material = get_material_by_name(DEFAULT_TABLE_MATERIAL) + ..() + +/obj/structure/table/steel + icon_state = "plain_preview" + color = "#666666" + +/obj/structure/table/steel/New() + material = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/marble + icon_state = "stone_preview" + color = "#CCCCCC" + +/obj/structure/table/marble/New() + material = get_material_by_name("marble") + ..() + +/obj/structure/table/reinforced + icon_state = "reinf_preview" + color = "#EEEEEE" + +/obj/structure/table/reinforced/New() + material = get_material_by_name(DEFAULT_TABLE_MATERIAL) + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/steel_reinforced + icon_state = "reinf_preview" + color = "#666666" + +/obj/structure/table/steel_reinforced/New() + material = get_material_by_name(MAT_STEEL) + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/wooden_reinforced + icon_state = "reinf_preview" + color = "#824B28" + +/obj/structure/table/wooden_reinforced/New() + material = get_material_by_name("wood") + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/woodentable + icon_state = "plain_preview" + color = "#824B28" + +/obj/structure/table/woodentable/New() + material = get_material_by_name("wood") + ..() + +/obj/structure/table/sifwoodentable + icon_state = "plain_preview" + color = "#824B28" + +/obj/structure/table/sifwoodentable/New() + material = get_material_by_name("alien wood") + ..() + +/obj/structure/table/sifwooden_reinforced + icon_state = "reinf_preview" + color = "#824B28" + +/obj/structure/table/sifwooden_reinforced/New() + material = get_material_by_name("alien wood") + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/hardwoodtable + icon_state = "stone_preview" + color = "#42291a" + +/obj/structure/table/hardwoodtable/Initialize(mapload) + material = get_material_by_name("hardwood") + return ..() + +/obj/structure/table/gamblingtable + icon_state = "gamble_preview" + +/obj/structure/table/gamblingtable/New() + material = get_material_by_name("wood") + carpeted = 1 + ..() + +/obj/structure/table/glass + icon_state = "plain_preview" + color = "#00E1FF" + alpha = 77 // 0.3 * 255 + +/obj/structure/table/glass/New() + material = get_material_by_name("glass") + ..() + +/obj/structure/table/borosilicate + icon_state = "plain_preview" + color = "#4D3EAC" + alpha = 77 + +/obj/structure/table/borosilicate/New() + material = get_material_by_name("borosilicate glass") + ..() + +/obj/structure/table/holotable + icon_state = "holo_preview" + color = "#EEEEEE" + +/obj/structure/table/holotable/New() + material = get_material_by_name("holo[DEFAULT_TABLE_MATERIAL]") + ..() + +/obj/structure/table/woodentable/holotable + icon_state = "holo_preview" + +/obj/structure/table/woodentable/holotable/New() + material = get_material_by_name("holowood") + ..() + +/obj/structure/table/alien + name = "alien table" + desc = "Advanced flat surface technology at work!" + icon_state = "alien_preview" + can_reinforce = FALSE + can_plate = FALSE + +/obj/structure/table/alien/New() + material = get_material_by_name("alium") + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + ..() + +/obj/structure/table/alien/dismantle(obj/item/weapon/tool/wrench/W, mob/user) + to_chat(user, "You cannot dismantle \the [src].") + return + +//BENCH PRESETS +/obj/structure/table/bench/standard + icon_state = "plain_preview" + color = "#EEEEEE" + +/obj/structure/table/bench/standard/New() + material = get_material_by_name(DEFAULT_TABLE_MATERIAL) + ..() + +/obj/structure/table/bench/steel + icon_state = "plain_preview" + color = "#666666" + +/obj/structure/table/bench/steel/New() + material = get_material_by_name(MAT_STEEL) + ..() + + +/obj/structure/table/bench/marble + icon_state = "stone_preview" + color = "#CCCCCC" + +/obj/structure/table/bench/marble/New() + material = get_material_by_name("marble") + ..() +/* +/obj/structure/table/bench/reinforced + icon_state = "reinf_preview" + color = "#EEEEEE" + +/obj/structure/table/bench/reinforced/New() + material = get_material_by_name(DEFAULT_TABLE_MATERIAL) + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/bench/steel_reinforced + icon_state = "reinf_preview" + color = "#666666" + +/obj/structure/table/bench/steel_reinforced/New() + material = get_material_by_name(MAT_STEEL) + reinforced = get_material_by_name(MAT_STEEL) + ..() + +/obj/structure/table/bench/wooden_reinforced + icon_state = "reinf_preview" + color = "#824B28" + +/obj/structure/table/bench/wooden_reinforced/New() + material = get_material_by_name("wood") + reinforced = get_material_by_name(MAT_STEEL) + ..() +*/ +/obj/structure/table/bench/wooden + icon_state = "plain_preview" + color = "#824B28" + +/obj/structure/table/bench/wooden/New() + material = get_material_by_name("wood") + ..() + +/obj/structure/table/bench/sifwooden + icon_state = "plain_preview" + color = "#824B28" + +/obj/structure/table/bench/sifwooden/New() + material = get_material_by_name("alien wood") + ..() + +/obj/structure/table/bench/sifwooden/padded + icon_state = "padded_preview" + carpeted = 1 + +/obj/structure/table/bench/padded + icon_state = "padded_preview" + +/obj/structure/table/bench/padded/New() + material = get_material_by_name(MAT_STEEL) + carpeted = 1 + ..() + +/obj/structure/table/bench/glass + icon_state = "plain_preview" + color = "#00E1FF" + alpha = 77 // 0.3 * 255 + +/obj/structure/table/bench/glass/New() + material = get_material_by_name("glass") + ..() + +/* +/obj/structure/table/bench/holotable + icon_state = "holo_preview" + color = "#EEEEEE" + +/obj/structure/table/bench/holotable/New() + material = get_material_by_name("holo[DEFAULT_TABLE_MATERIAL]") + ..() + +/obj/structure/table/bench/wooden/holotable + icon_state = "holo_preview" + +/obj/structure/table/bench/wooden/holotable/New() + material = get_material_by_name("holowood") + ..() */ \ No newline at end of file diff --git a/code/modules/tables/rack.dm b/code/modules/tables/rack.dm index c39fb2c59f..c1232d8cf0 100644 --- a/code/modules/tables/rack.dm +++ b/code/modules/tables/rack.dm @@ -1,28 +1,28 @@ -/obj/structure/table/rack - name = "rack" - desc = "Different from the Middle Ages version." - icon = 'icons/obj/objects.dmi' - icon_state = "rack" - can_plate = 0 - can_reinforce = 0 - flipped = -1 - -/obj/structure/table/rack/New() - ..() - verbs -= /obj/structure/table/verb/do_flip - verbs -= /obj/structure/table/proc/do_put - -/obj/structure/table/rack/update_connections() - return - -/obj/structure/table/rack/update_desc() - return - -/obj/structure/table/rack/update_icon() - if(material) //VOREStation Add for rack colors based on materials - color = material.icon_colour - return - -/obj/structure/table/rack/holorack/dismantle(obj/item/weapon/tool/wrench/W, mob/user) - to_chat(user, "You cannot dismantle \the [src].") - return +/obj/structure/table/rack + name = "rack" + desc = "Different from the Middle Ages version." + icon = 'icons/obj/objects.dmi' + icon_state = "rack" + can_plate = 0 + can_reinforce = 0 + flipped = -1 + +/obj/structure/table/rack/New() + ..() + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + +/obj/structure/table/rack/update_connections() + return + +/obj/structure/table/rack/update_desc() + return + +/obj/structure/table/rack/update_icon() + if(material) //VOREStation Add for rack colors based on materials + color = material.icon_colour + return + +/obj/structure/table/rack/holorack/dismantle(obj/item/weapon/tool/wrench/W, mob/user) + to_chat(user, "You cannot dismantle \the [src].") + return diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm index b7c087f9c0..b4b1308524 100644 --- a/code/modules/tables/update_triggers.dm +++ b/code/modules/tables/update_triggers.dm @@ -1,20 +1,20 @@ -/obj/structure/window/New() - ..() - for(var/obj/structure/table/T in view(src, 1)) - T.update_connections() - T.update_icon() - -/obj/structure/window/Destroy() - var/oldloc = loc - . = ..() - for(var/obj/structure/table/T in view(oldloc, 1)) - T.update_connections() - T.update_icon() - -/obj/structure/window/Move() - var/oldloc = loc - . = ..() - if(loc != oldloc) - for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1)) - T.update_connections() +/obj/structure/window/New() + ..() + for(var/obj/structure/table/T in view(src, 1)) + T.update_connections() + T.update_icon() + +/obj/structure/window/Destroy() + var/oldloc = loc + . = ..() + for(var/obj/structure/table/T in view(oldloc, 1)) + T.update_connections() + T.update_icon() + +/obj/structure/window/Move() + var/oldloc = loc + . = ..() + if(loc != oldloc) + for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1)) + T.update_connections() T.update_icon() \ No newline at end of file diff --git a/code/modules/tgchat/_legacy.dm b/code/modules/tgchat/_legacy.dm index fe01936540..2afc8ba4c8 100644 --- a/code/modules/tgchat/_legacy.dm +++ b/code/modules/tgchat/_legacy.dm @@ -1,48 +1,48 @@ -/// Old VChat Code Stuff - -/* Old bicon code -/proc/expire_bicon_cache(key) - if(GLOB.bicon_cache[key]) - GLOB.bicon_cache -= key - return TRUE - return FALSE - -GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the tag results, not the icons -*/ - -/proc/bicon(var/obj, var/use_class = 1, var/custom_classes = "") - return icon2base64html(obj, custom_classes) - - /* Old bicon code - var/class = use_class ? "class='icon misc [custom_classes]'" : null - if(!obj) - return - - // Try to avoid passing bicon an /icon directly. It is better to pass it an atom so it can cache. - if(isicon(obj)) // Passed an icon directly, nothing to cache-key on, as icon refs get reused *often* - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = obj - var/key - var/changes_often = ishuman(A) || isobserver(A) // If this ends up with more, move it into a proc or var on atom. - - if(changes_often) - key = "\ref[A]" - else - key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - - var/base64 = GLOB.bicon_cache[key] - // Non-human atom, no cache - if(!base64) // Doesn't exist, make it. - base64 = icon2base64(A.examine_icon(), key) - GLOB.bicon_cache[key] = base64 - if(changes_often) - addtimer(CALLBACK(GLOBAL_PROC, .proc/expire_bicon_cache, key), 50 SECONDS, TIMER_UNIQUE) - - // May add a class to the img tag created by bicon - if(use_class) - class = "class='icon [A.icon_state] [custom_classes]'" - - return "" - */ +/// Old VChat Code Stuff + +/* Old bicon code +/proc/expire_bicon_cache(key) + if(GLOB.bicon_cache[key]) + GLOB.bicon_cache -= key + return TRUE + return FALSE + +GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the tag results, not the icons +*/ + +/proc/bicon(var/obj, var/use_class = 1, var/custom_classes = "") + return icon2base64html(obj, custom_classes) + + /* Old bicon code + var/class = use_class ? "class='icon misc [custom_classes]'" : null + if(!obj) + return + + // Try to avoid passing bicon an /icon directly. It is better to pass it an atom so it can cache. + if(isicon(obj)) // Passed an icon directly, nothing to cache-key on, as icon refs get reused *often* + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/A = obj + var/key + var/changes_often = ishuman(A) || isobserver(A) // If this ends up with more, move it into a proc or var on atom. + + if(changes_often) + key = "\ref[A]" + else + key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" + + var/base64 = GLOB.bicon_cache[key] + // Non-human atom, no cache + if(!base64) // Doesn't exist, make it. + base64 = icon2base64(A.examine_icon(), key) + GLOB.bicon_cache[key] = base64 + if(changes_often) + addtimer(CALLBACK(GLOBAL_PROC, .proc/expire_bicon_cache, key), 50 SECONDS, TIMER_UNIQUE) + + // May add a class to the img tag created by bicon + if(use_class) + class = "class='icon [A.icon_state] [custom_classes]'" + + return "" + */ diff --git a/code/modules/tgchat/message.dm b/code/modules/tgchat/message.dm index 69d3a6faf5..2e9bfe784e 100644 --- a/code/modules/tgchat/message.dm +++ b/code/modules/tgchat/message.dm @@ -1,17 +1,17 @@ -/** - * Message-related procs - * - * Message format (/list): - * - type - Message type, must be one of defines in `code/__DEFINES/chat.dm` - * - text - Plain message text - * - html - HTML message text - * - Optional metadata, can be any key/value pair. - * - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/proc/message_to_html(message) - // Here it is possible to add a switch statement - // to custom-handle various message types. - return message["html"] || message["text"] +/** + * Message-related procs + * + * Message format (/list): + * - type - Message type, must be one of defines in `code/__DEFINES/chat.dm` + * - text - Plain message text + * - html - HTML message text + * - Optional metadata, can be any key/value pair. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/proc/message_to_html(message) + // Here it is possible to add a switch statement + // to custom-handle various message types. + return message["html"] || message["text"] diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index ae434b36f1..f04b53a6c9 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -1,85 +1,85 @@ -/*! - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/** - * Circumvents the message queue and sends the message - * to the recipient (target) as soon as possible. - */ -/proc/to_chat_immediate( - target, - html, - type = null, - text = null, - avoid_highlighting = FALSE, - // FIXME: These flags are now pointless and have no effect - handle_whitespace = TRUE, - trailing_newline = TRUE, - confidential = FALSE -) - // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") - html = "[html]" - text = "[text]" - - if(!target) - return - if(!html && !text) - CRASH("Empty or null string in to_chat proc call.") - if(target == world) - target = GLOB.clients - - // Build a message - var/message = list() - if(type) message["type"] = type - if(text) message["text"] = text - if(html) message["html"] = html - if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - - // send it immediately - SSchat.send_immediate(target, message) - -/** - * Sends the message to the recipient (target). - * - * Recommended way to write to_chat calls: - * ``` - * to_chat(client, - * type = MESSAGE_TYPE_INFO, - * html = "You have found [object]") - * ``` - */ -/proc/to_chat( - target, - html, - type = null, - text = null, - avoid_highlighting = FALSE, - // FIXME: These flags are now pointless and have no effect - handle_whitespace = TRUE, - trailing_newline = TRUE, - confidential = FALSE -) - //if(isnull(Master) || !SSchat?.initialized || !MC_RUNNING(SSchat.init_stage)) - if(isnull(Master) || !SSchat?.subsystem_initialized) - to_chat_immediate(target, html, type, text, avoid_highlighting) - return - - // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") - html = "[html]" - text = "[text]" - - if(!target) - return - if(!html && !text) - CRASH("Empty or null string in to_chat proc call.") - if(target == world) - target = GLOB.clients - - // Build a message - var/message = list() - if(type) message["type"] = type - if(text) message["text"] = text - if(html) message["html"] = html - if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - SSchat.queue(target, message) +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Circumvents the message queue and sends the message + * to the recipient (target) as soon as possible. + */ +/proc/to_chat_immediate( + target, + html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE +) + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) message["type"] = type + if(text) message["text"] = text + if(html) message["html"] = html + if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting + + // send it immediately + SSchat.send_immediate(target, message) + +/** + * Sends the message to the recipient (target). + * + * Recommended way to write to_chat calls: + * ``` + * to_chat(client, + * type = MESSAGE_TYPE_INFO, + * html = "You have found [object]") + * ``` + */ +/proc/to_chat( + target, + html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE +) + //if(isnull(Master) || !SSchat?.initialized || !MC_RUNNING(SSchat.init_stage)) + if(isnull(Master) || !SSchat?.subsystem_initialized) + to_chat_immediate(target, html, type, text, avoid_highlighting) + return + + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) message["type"] = type + if(text) message["text"] = text + if(html) message["html"] = html + if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting + SSchat.queue(target, message) diff --git a/code/modules/tgui_panel/audio.dm b/code/modules/tgui_panel/audio.dm index 32ecd93ab8..6806961599 100644 --- a/code/modules/tgui_panel/audio.dm +++ b/code/modules/tgui_panel/audio.dm @@ -1,42 +1,42 @@ -/*! - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/// Admin music volume, from 0 to 1. -/client/var/admin_music_volume = 1 - -/** - * public - * - * Sends music data to the browser. - * - * Optional settings: - * - pitch: the playback rate - * - start: the start time of the sound - * - end: when the musics stops playing - * - * required url string Must be an https URL. - * optional extra_data list Optional settings. - */ -/datum/tgui_panel/proc/play_music(url, extra_data) - if(!is_ready()) - return - if(!findtext(url, GLOB.is_http_protocol)) - return - var/list/payload = list() - if(length(extra_data) > 0) - for(var/key in extra_data) - payload[key] = extra_data[key] - payload["url"] = url - window.send_message("audio/playMusic", payload) - -/** - * public - * - * Stops playing music through the browser. - */ -/datum/tgui_panel/proc/stop_music() - if(!is_ready()) - return - window.send_message("audio/stopMusic") +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// Admin music volume, from 0 to 1. +/client/var/admin_music_volume = 1 + +/** + * public + * + * Sends music data to the browser. + * + * Optional settings: + * - pitch: the playback rate + * - start: the start time of the sound + * - end: when the musics stops playing + * + * required url string Must be an https URL. + * optional extra_data list Optional settings. + */ +/datum/tgui_panel/proc/play_music(url, extra_data) + if(!is_ready()) + return + if(!findtext(url, GLOB.is_http_protocol)) + return + var/list/payload = list() + if(length(extra_data) > 0) + for(var/key in extra_data) + payload[key] = extra_data[key] + payload["url"] = url + window.send_message("audio/playMusic", payload) + +/** + * public + * + * Stops playing music through the browser. + */ +/datum/tgui_panel/proc/stop_music() + if(!is_ready()) + return + window.send_message("audio/stopMusic") diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm index a4ce4444ca..3e7dbc3178 100644 --- a/code/modules/tgui_panel/external.dm +++ b/code/modules/tgui_panel/external.dm @@ -1,45 +1,45 @@ -/*! - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/client/var/datum/tgui_panel/tgui_panel - -/** - * tgui panel / chat troubleshooting verb - */ -/client/verb/fix_tgui_panel() - set name = "Fix chat" - set category = "OOC" - var/action - log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel") - - nuke_chat() - - // Failed to fix, using tgalert as fallback - action = tgalert(src, "Did that work?", "", "Yes", "No, switch to old ui") - if (action == "No, switch to old ui") - winset(src, "output", "on-show=&is-disabled=0&is-visible=1") - winset(src, "browseroutput", "is-disabled=1;is-visible=0") - log_tgui(src, "Failed to fix.", context = "verb/fix_tgui_panel") - -/client/proc/nuke_chat() - // Catch all solution (kick the whole thing in the pants) - winset(src, "output", "on-show=&is-disabled=0&is-visible=1") - winset(src, "browseroutput", "is-disabled=1;is-visible=0") - if(!tgui_panel || !istype(tgui_panel)) - log_tgui(src, "tgui_panel datum is missing", - context = "verb/fix_tgui_panel") - tgui_panel = new(src) - tgui_panel.initialize(force = TRUE) - // Force show the panel to see if there are any errors - winset(src, "output", "is-disabled=1&is-visible=0") - winset(src, "browseroutput", "is-disabled=0;is-visible=1") - -/client/verb/refresh_tgui() - set name = "Refresh TGUI" - set category = "OOC" - - for(var/window_id in tgui_windows) - var/datum/tgui_window/window = tgui_windows[window_id] - window.reinitialize() +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/client/var/datum/tgui_panel/tgui_panel + +/** + * tgui panel / chat troubleshooting verb + */ +/client/verb/fix_tgui_panel() + set name = "Fix chat" + set category = "OOC" + var/action + log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel") + + nuke_chat() + + // Failed to fix, using tgalert as fallback + action = tgalert(src, "Did that work?", "", "Yes", "No, switch to old ui") + if (action == "No, switch to old ui") + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + log_tgui(src, "Failed to fix.", context = "verb/fix_tgui_panel") + +/client/proc/nuke_chat() + // Catch all solution (kick the whole thing in the pants) + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + if(!tgui_panel || !istype(tgui_panel)) + log_tgui(src, "tgui_panel datum is missing", + context = "verb/fix_tgui_panel") + tgui_panel = new(src) + tgui_panel.initialize(force = TRUE) + // Force show the panel to see if there are any errors + winset(src, "output", "is-disabled=1&is-visible=0") + winset(src, "browseroutput", "is-disabled=0;is-visible=1") + +/client/verb/refresh_tgui() + set name = "Refresh TGUI" + set category = "OOC" + + for(var/window_id in tgui_windows) + var/datum/tgui_window/window = tgui_windows[window_id] + window.reinitialize() diff --git a/code/modules/tgui_panel/telemetry.dm b/code/modules/tgui_panel/telemetry.dm index 4dabcbb01a..0a36afffef 100644 --- a/code/modules/tgui_panel/telemetry.dm +++ b/code/modules/tgui_panel/telemetry.dm @@ -1,146 +1,146 @@ -/*! - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/** - * Maximum number of connection records allowed to analyze. - * Should match the value set in the browser. - */ -#define TGUI_TELEMETRY_MAX_CONNECTIONS 5 - -/** - * Maximum time allocated for sending a telemetry packet. - */ -#define TGUI_TELEMETRY_RESPONSE_WINDOW (30 SECONDS) - -/// Time of telemetry request -/datum/tgui_panel/var/telemetry_requested_at -/// Time of telemetry analysis completion -/datum/tgui_panel/var/telemetry_analyzed_at -/// List of previous client connections -/datum/tgui_panel/var/list/telemetry_connections - -/** - * private - * - * Requests some telemetry from the client. - */ -/datum/tgui_panel/proc/request_telemetry() - telemetry_requested_at = world.time - telemetry_analyzed_at = null - window.send_message("telemetry/request", list( - "limits" = list( - "connections" = TGUI_TELEMETRY_MAX_CONNECTIONS, - ), - )) - -/** - * private - * - * Analyzes a telemetry packet. - * - * Is currently only useful for detecting ban evasion attempts. - */ -/datum/tgui_panel/proc/analyze_telemetry(payload) - if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW) - message_admins("[key_name(client)] sent telemetry outside of the allocated time window.") - return - if(telemetry_analyzed_at) - message_admins("[key_name(client)] sent telemetry more than once.") - return - telemetry_analyzed_at = world.time - if(!payload) - return - telemetry_connections = payload["connections"] - var/len = length(telemetry_connections) - if(len == 0) - return - if(len > TGUI_TELEMETRY_MAX_CONNECTIONS) - message_admins("[key_name(client)] was kicked for sending a huge telemetry payload") - qdel(client) - return - - var/ckey = client?.ckey - if (!ckey) - return - - /* FIXME: Stuff we dont have > Can be reimplemented later on - var/list/all_known_alts = GLOB.known_alts.load_known_alts() - var/list/our_known_alts = list() - - for (var/known_alt in all_known_alts) - if (known_alt[1] == ckey) - our_known_alts += known_alt[2] - else if (known_alt[2] == ckey) - our_known_alts += known_alt[1] - - var/list/found - - var/list/query_data = list() - - for(var/i in 1 to len) - if(QDELETED(client)) - // He got cleaned up before we were done - return - var/list/row = telemetry_connections[i] - - // Check for a malformed history object - if (!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) - return - - if (!isnull(GLOB.round_id)) - query_data += list(list( - "telemetry_ckey" = row["ckey"], - "address" = row["address"], - "computer_id" = row["computer_id"], - )) - - if (row["ckey"] in our_known_alts) - continue - - if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE)) - found = row - break - - CHECK_TICK - - // This fucker has a history of playing on a banned account. - if(found) - var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])" - message_admins(msg) - send2tgs_adminless_only("Banned-user", msg) - log_admin_private(msg) - log_suspicious_login(msg, access_log_mirror = FALSE) - - // Only log them all at the end, since it's not as important as reporting an evader - for (var/list/one_query as anything in query_data) - var/datum/db_query/query = SSdbcore.NewQuery({" - INSERT INTO [format_table_name("telemetry_connections")] ( - ckey, - telemetry_ckey, - address, - computer_id, - first_round_id, - latest_round_id - ) VALUES( - :ckey, - :telemetry_ckey, - INET_ATON(:address), - :computer_id, - :round_id, - :round_id - ) ON DUPLICATE KEY UPDATE latest_round_id = :round_id - "}, list( - "ckey" = ckey, - "telemetry_ckey" = one_query["telemetry_ckey"], - "address" = one_query["address"], - "computer_id" = one_query["computer_id"], - "round_id" = GLOB.round_id, - )) - query.Execute() - qdel(query) - */ - -#undef TGUI_TELEMETRY_MAX_CONNECTIONS -#undef TGUI_TELEMETRY_RESPONSE_WINDOW +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Maximum number of connection records allowed to analyze. + * Should match the value set in the browser. + */ +#define TGUI_TELEMETRY_MAX_CONNECTIONS 5 + +/** + * Maximum time allocated for sending a telemetry packet. + */ +#define TGUI_TELEMETRY_RESPONSE_WINDOW (30 SECONDS) + +/// Time of telemetry request +/datum/tgui_panel/var/telemetry_requested_at +/// Time of telemetry analysis completion +/datum/tgui_panel/var/telemetry_analyzed_at +/// List of previous client connections +/datum/tgui_panel/var/list/telemetry_connections + +/** + * private + * + * Requests some telemetry from the client. + */ +/datum/tgui_panel/proc/request_telemetry() + telemetry_requested_at = world.time + telemetry_analyzed_at = null + window.send_message("telemetry/request", list( + "limits" = list( + "connections" = TGUI_TELEMETRY_MAX_CONNECTIONS, + ), + )) + +/** + * private + * + * Analyzes a telemetry packet. + * + * Is currently only useful for detecting ban evasion attempts. + */ +/datum/tgui_panel/proc/analyze_telemetry(payload) + if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW) + message_admins("[key_name(client)] sent telemetry outside of the allocated time window.") + return + if(telemetry_analyzed_at) + message_admins("[key_name(client)] sent telemetry more than once.") + return + telemetry_analyzed_at = world.time + if(!payload) + return + telemetry_connections = payload["connections"] + var/len = length(telemetry_connections) + if(len == 0) + return + if(len > TGUI_TELEMETRY_MAX_CONNECTIONS) + message_admins("[key_name(client)] was kicked for sending a huge telemetry payload") + qdel(client) + return + + var/ckey = client?.ckey + if (!ckey) + return + + /* FIXME: Stuff we dont have > Can be reimplemented later on + var/list/all_known_alts = GLOB.known_alts.load_known_alts() + var/list/our_known_alts = list() + + for (var/known_alt in all_known_alts) + if (known_alt[1] == ckey) + our_known_alts += known_alt[2] + else if (known_alt[2] == ckey) + our_known_alts += known_alt[1] + + var/list/found + + var/list/query_data = list() + + for(var/i in 1 to len) + if(QDELETED(client)) + // He got cleaned up before we were done + return + var/list/row = telemetry_connections[i] + + // Check for a malformed history object + if (!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) + return + + if (!isnull(GLOB.round_id)) + query_data += list(list( + "telemetry_ckey" = row["ckey"], + "address" = row["address"], + "computer_id" = row["computer_id"], + )) + + if (row["ckey"] in our_known_alts) + continue + + if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE)) + found = row + break + + CHECK_TICK + + // This fucker has a history of playing on a banned account. + if(found) + var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])" + message_admins(msg) + send2tgs_adminless_only("Banned-user", msg) + log_admin_private(msg) + log_suspicious_login(msg, access_log_mirror = FALSE) + + // Only log them all at the end, since it's not as important as reporting an evader + for (var/list/one_query as anything in query_data) + var/datum/db_query/query = SSdbcore.NewQuery({" + INSERT INTO [format_table_name("telemetry_connections")] ( + ckey, + telemetry_ckey, + address, + computer_id, + first_round_id, + latest_round_id + ) VALUES( + :ckey, + :telemetry_ckey, + INET_ATON(:address), + :computer_id, + :round_id, + :round_id + ) ON DUPLICATE KEY UPDATE latest_round_id = :round_id + "}, list( + "ckey" = ckey, + "telemetry_ckey" = one_query["telemetry_ckey"], + "address" = one_query["address"], + "computer_id" = one_query["computer_id"], + "round_id" = GLOB.round_id, + )) + query.Execute() + qdel(query) + */ + +#undef TGUI_TELEMETRY_MAX_CONNECTIONS +#undef TGUI_TELEMETRY_RESPONSE_WINDOW diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index 687473c106..4d2a899063 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -1,222 +1,222 @@ -/datum/disease2/disease/Topic(href, href_list) - . = ..() - if(.) return - - if(href_list["info"]) - // spawn or admin privileges to see info about viruses - if(!check_rights(R_ADMIN|R_SPAWN|R_EVENT)) return - - to_chat(usr, "Infection chance: [infectionchance]; Speed: [speed]; Spread type: [spreadtype]") - to_chat(usr, "Affected species: [english_list(affected_species)]") - to_chat(usr, "Effects:") - for(var/datum/disease2/effectholder/E in effects) - to_chat(usr, "[E.stage]: [E.effect.name]; chance=[E.chance]; multiplier=[E.multiplier]") - to_chat(usr, "Antigens: [antigens2string(antigen)]; Resistance: [resistance]") - - return 1 - -/datum/disease2/disease/vv_get_header() - . = list() - for(var/datum/disease2/effectholder/E in effects) - . += "[E.stage]: [E.effect.name]" - return {" - [name()]
                        - [jointext(., "
                        ")]
                        - "} - -/datum/disease2/disease/get_view_variables_options() - return ..() + {" - - "} - -/datum/admins/var/datum/virus2_editor/virus2_editor_datum = new -/client/proc/virus2_editor() - set name = "Virus Editor" - set category = "Admin" - if(!holder || !check_rights(R_SPAWN)) return // spawn privileges to create viruses - - holder.virus2_editor_datum.show_ui(src) - -/datum/virus2_editor - var/list/s = list(/datum/disease2/effect/invisible,/datum/disease2/effect/invisible,/datum/disease2/effect/invisible,/datum/disease2/effect/invisible) - var/list/s_chance = list(1,1,1,1) - var/list/s_multiplier = list(1,1,1,1) - var/species = list() - var/infectionchance = 70 - var/spreadtype = "Contact" - var/list/antigens = list() - var/speed = 1 - var/resistance = 10 - var/mob/living/carbon/infectee = null - - // this holds spawned viruses so that the "Info" links work after the proc exits - var/list/spawned_viruses = list() - -/datum/virus2_editor/proc/select(mob/user, stage) - if(stage < 1 || stage > 4) return - - var/list/L = list() - - for(var/datum/disease2/effect/f as anything in subtypesof(/datum/disease2/effect)) - if(initial(f.stage) <= stage) - L[initial(f.name)] = f - - var/datum/disease2/effect/Eff = s[stage] - - var/C = tgui_input_list(usr, "Select effect for stage [stage]:", "Stage [stage]", L, Eff) - if(!C) return - return L[C] - -/datum/virus2_editor/proc/show_ui(mob/user) - var/H = {" -

                        Virus2 Virus Editor


                        - Effects:
                        - "} - for(var/i = 1 to 4) - var/datum/disease2/effect/Eff = s[i] - H += {" - [initial(Eff.name)] - Chance: [s_chance[i]] - Multiplier: [s_multiplier[i]] -
                        - "} - H += {" -
                        - Infectable Species:
                        - "} - var/f = 1 - for(var/k in GLOB.all_species) - var/datum/species/S = GLOB.all_species[k] - if(S.get_virus_immune()) - continue - if(!f) H += " | " - else f = 0 - H += "[k]" - H += {" - Reset -
                        - Infection Chance: [infectionchance]
                        - Spread Type: [spreadtype]
                        - Speed: [speed]
                        - Resistance: [resistance]
                        -
                        - "} - f = 1 - for(var/k in ALL_ANTIGENS) - if(!f) H += " | " - else f = 0 - H += "[k]" - H += {" - Reset -
                        -
                        - Initial infectee: [infectee ? infectee : "(choose)"] - RELEASE - "} - - user << browse(H, "window=virus2edit") - -/datum/virus2_editor/Topic(href, href_list) - switch(href_list["what"]) - if("effect") - var/stage = text2num(href_list["stage"]) - if(href_list["effect"]) - var/datum/disease2/effect/E = select(usr,stage) - if(!E) return - s[stage] = E - // set a default chance and multiplier of half the maximum (roughly average) - s_chance[stage] = max(1, round(initial(E.chance_maxm)/2)) - s_multiplier[stage] = max(1, round(initial(E.maxm)/2)) - else if(href_list["chance"]) - var/datum/disease2/effect/Eff = s[stage] - var/I = tgui_input_number(usr, "Chance, per tick, of this effect happening (min 0, max [initial(Eff.chance_maxm)])", "Effect Chance", s_chance[stage], initial(Eff.chance_maxm), 0) - if(I == null || I < 0 || I > initial(Eff.chance_maxm)) return - s_chance[stage] = I - else if(href_list["multiplier"]) - var/datum/disease2/effect/Eff = s[stage] - var/I = tgui_input_number(usr, "Multiplier for this effect (min 1, max [initial(Eff.maxm)])", "Effect Multiplier", s_multiplier[stage], initial(Eff.maxm), 1) - if(I == null || I < 1 || I > initial(Eff.maxm)) return - s_multiplier[stage] = I - if("species") - if(href_list["toggle"]) - var/T = href_list["toggle"] - if(T in species) - species -= T - else - species |= T - else if(href_list["reset"]) - species = list() - if(infectee) - if(!infectee.species || !(infectee.species.get_bodytype() in species)) - infectee = null - if("ichance") - var/I = tgui_input_number(usr, "Input infection chance", "Infection Chance", infectionchance) - if(!I) return - infectionchance = I - if("stype") - var/S = tgui_alert(usr, "Which spread type?", "Spread Type", list("Contact", "Airborne", "Blood")) - if(!S) return - spreadtype = S - if("speed") - var/S = tgui_input_number(usr, "Input speed", "Speed", speed) - if(!S) return - speed = S - if("antigen") - if(href_list["toggle"]) - var/T = href_list["toggle"] - if(length(T) != 1) return - if(T in antigens) - antigens -= T - else - antigens |= T - else if(href_list["reset"]) - antigens = list() - if("resistance") - var/S = tgui_input_number(usr, "Input % resistance to antibiotics", "Resistance", resistance) - if(!S) return - resistance = S - if("infectee") - var/list/candidates = list() - for(var/mob/living/carbon/G in living_mob_list) - if(G.stat != DEAD && G.species && !isbelly(G.loc)) - if(G.species.get_bodytype() in species) - candidates["[G.name][G.client ? "" : " (no client)"]"] = G - else - candidates["[G.name] ([G.species.get_bodytype()])[G.client ? "" : " (no client)"]"] = G - if(!candidates.len) - to_chat(usr, "No possible candidates found!") - - var/I = tgui_input_list(usr, "Choose initial infectee", "Infectee", candidates) - if(!I || !candidates[I]) return - infectee = candidates[I] - species |= infectee.species.get_bodytype() - if("go") - if(!antigens.len) - var/a = tgui_alert(usr, "This disease has no antigens; it will be impossible to permanently immunise anyone without them.\ - It is strongly recommended to set at least one antigen. Do you want to go back and edit your virus?", "Antigens", list("Yes", "No")) - if(a == "Yes") return - var/datum/disease2/disease/D = new - D.infectionchance = infectionchance - D.spreadtype = spreadtype - D.antigen = antigens - D.affected_species = species - D.speed = speed - D.resistance = resistance - for(var/i in 1 to 4) - var/datum/disease2/effectholder/E = new - var/Etype = s[i] - E.effect = new Etype() - E.effect.generate() - E.chance = s_chance[i] - E.multiplier = s_multiplier[i] - E.stage = i - - D.effects += E - - spawned_viruses += D - - message_admins("[key_name_admin(usr)] infected [key_name_admin(infectee)] with a virus (Info)") - log_admin("[key_name_admin(usr)] infected [key_name_admin(infectee)] with a virus!") - infect_virus2(infectee, D, forced=1) - - show_ui(usr) +/datum/disease2/disease/Topic(href, href_list) + . = ..() + if(.) return + + if(href_list["info"]) + // spawn or admin privileges to see info about viruses + if(!check_rights(R_ADMIN|R_SPAWN|R_EVENT)) return + + to_chat(usr, "Infection chance: [infectionchance]; Speed: [speed]; Spread type: [spreadtype]") + to_chat(usr, "Affected species: [english_list(affected_species)]") + to_chat(usr, "Effects:") + for(var/datum/disease2/effectholder/E in effects) + to_chat(usr, "[E.stage]: [E.effect.name]; chance=[E.chance]; multiplier=[E.multiplier]") + to_chat(usr, "Antigens: [antigens2string(antigen)]; Resistance: [resistance]") + + return 1 + +/datum/disease2/disease/vv_get_header() + . = list() + for(var/datum/disease2/effectholder/E in effects) + . += "[E.stage]: [E.effect.name]" + return {" + [name()]
                        + [jointext(., "
                        ")]
                        + "} + +/datum/disease2/disease/get_view_variables_options() + return ..() + {" + + "} + +/datum/admins/var/datum/virus2_editor/virus2_editor_datum = new +/client/proc/virus2_editor() + set name = "Virus Editor" + set category = "Admin" + if(!holder || !check_rights(R_SPAWN)) return // spawn privileges to create viruses + + holder.virus2_editor_datum.show_ui(src) + +/datum/virus2_editor + var/list/s = list(/datum/disease2/effect/invisible,/datum/disease2/effect/invisible,/datum/disease2/effect/invisible,/datum/disease2/effect/invisible) + var/list/s_chance = list(1,1,1,1) + var/list/s_multiplier = list(1,1,1,1) + var/species = list() + var/infectionchance = 70 + var/spreadtype = "Contact" + var/list/antigens = list() + var/speed = 1 + var/resistance = 10 + var/mob/living/carbon/infectee = null + + // this holds spawned viruses so that the "Info" links work after the proc exits + var/list/spawned_viruses = list() + +/datum/virus2_editor/proc/select(mob/user, stage) + if(stage < 1 || stage > 4) return + + var/list/L = list() + + for(var/datum/disease2/effect/f as anything in subtypesof(/datum/disease2/effect)) + if(initial(f.stage) <= stage) + L[initial(f.name)] = f + + var/datum/disease2/effect/Eff = s[stage] + + var/C = tgui_input_list(usr, "Select effect for stage [stage]:", "Stage [stage]", L, Eff) + if(!C) return + return L[C] + +/datum/virus2_editor/proc/show_ui(mob/user) + var/H = {" +

                        Virus2 Virus Editor


                        + Effects:
                        + "} + for(var/i = 1 to 4) + var/datum/disease2/effect/Eff = s[i] + H += {" + [initial(Eff.name)] + Chance: [s_chance[i]] + Multiplier: [s_multiplier[i]] +
                        + "} + H += {" +
                        + Infectable Species:
                        + "} + var/f = 1 + for(var/k in GLOB.all_species) + var/datum/species/S = GLOB.all_species[k] + if(S.get_virus_immune()) + continue + if(!f) H += " | " + else f = 0 + H += "[k]" + H += {" + Reset +
                        + Infection Chance: [infectionchance]
                        + Spread Type: [spreadtype]
                        + Speed: [speed]
                        + Resistance: [resistance]
                        +
                        + "} + f = 1 + for(var/k in ALL_ANTIGENS) + if(!f) H += " | " + else f = 0 + H += "[k]" + H += {" + Reset +
                        +
                        + Initial infectee: [infectee ? infectee : "(choose)"] + RELEASE + "} + + user << browse(H, "window=virus2edit") + +/datum/virus2_editor/Topic(href, href_list) + switch(href_list["what"]) + if("effect") + var/stage = text2num(href_list["stage"]) + if(href_list["effect"]) + var/datum/disease2/effect/E = select(usr,stage) + if(!E) return + s[stage] = E + // set a default chance and multiplier of half the maximum (roughly average) + s_chance[stage] = max(1, round(initial(E.chance_maxm)/2)) + s_multiplier[stage] = max(1, round(initial(E.maxm)/2)) + else if(href_list["chance"]) + var/datum/disease2/effect/Eff = s[stage] + var/I = tgui_input_number(usr, "Chance, per tick, of this effect happening (min 0, max [initial(Eff.chance_maxm)])", "Effect Chance", s_chance[stage], initial(Eff.chance_maxm), 0) + if(I == null || I < 0 || I > initial(Eff.chance_maxm)) return + s_chance[stage] = I + else if(href_list["multiplier"]) + var/datum/disease2/effect/Eff = s[stage] + var/I = tgui_input_number(usr, "Multiplier for this effect (min 1, max [initial(Eff.maxm)])", "Effect Multiplier", s_multiplier[stage], initial(Eff.maxm), 1) + if(I == null || I < 1 || I > initial(Eff.maxm)) return + s_multiplier[stage] = I + if("species") + if(href_list["toggle"]) + var/T = href_list["toggle"] + if(T in species) + species -= T + else + species |= T + else if(href_list["reset"]) + species = list() + if(infectee) + if(!infectee.species || !(infectee.species.get_bodytype() in species)) + infectee = null + if("ichance") + var/I = tgui_input_number(usr, "Input infection chance", "Infection Chance", infectionchance) + if(!I) return + infectionchance = I + if("stype") + var/S = tgui_alert(usr, "Which spread type?", "Spread Type", list("Contact", "Airborne", "Blood")) + if(!S) return + spreadtype = S + if("speed") + var/S = tgui_input_number(usr, "Input speed", "Speed", speed) + if(!S) return + speed = S + if("antigen") + if(href_list["toggle"]) + var/T = href_list["toggle"] + if(length(T) != 1) return + if(T in antigens) + antigens -= T + else + antigens |= T + else if(href_list["reset"]) + antigens = list() + if("resistance") + var/S = tgui_input_number(usr, "Input % resistance to antibiotics", "Resistance", resistance) + if(!S) return + resistance = S + if("infectee") + var/list/candidates = list() + for(var/mob/living/carbon/G in living_mob_list) + if(G.stat != DEAD && G.species && !isbelly(G.loc)) + if(G.species.get_bodytype() in species) + candidates["[G.name][G.client ? "" : " (no client)"]"] = G + else + candidates["[G.name] ([G.species.get_bodytype()])[G.client ? "" : " (no client)"]"] = G + if(!candidates.len) + to_chat(usr, "No possible candidates found!") + + var/I = tgui_input_list(usr, "Choose initial infectee", "Infectee", candidates) + if(!I || !candidates[I]) return + infectee = candidates[I] + species |= infectee.species.get_bodytype() + if("go") + if(!antigens.len) + var/a = tgui_alert(usr, "This disease has no antigens; it will be impossible to permanently immunise anyone without them.\ + It is strongly recommended to set at least one antigen. Do you want to go back and edit your virus?", "Antigens", list("Yes", "No")) + if(a == "Yes") return + var/datum/disease2/disease/D = new + D.infectionchance = infectionchance + D.spreadtype = spreadtype + D.antigen = antigens + D.affected_species = species + D.speed = speed + D.resistance = resistance + for(var/i in 1 to 4) + var/datum/disease2/effectholder/E = new + var/Etype = s[i] + E.effect = new Etype() + E.effect.generate() + E.chance = s_chance[i] + E.multiplier = s_multiplier[i] + E.stage = i + + D.effects += E + + spawned_viruses += D + + message_admins("[key_name_admin(usr)] infected [key_name_admin(infectee)] with a virus (Info)") + log_admin("[key_name_admin(usr)] infected [key_name_admin(infectee)] with a virus!") + infect_virus2(infectee, D, forced=1) + + show_ui(usr) diff --git a/code/modules/virus2/analyser.dm b/code/modules/virus2/analyser.dm index 5a736c28f7..e3524100f1 100644 --- a/code/modules/virus2/analyser.dm +++ b/code/modules/virus2/analyser.dm @@ -1,73 +1,73 @@ -/obj/machinery/disease2/diseaseanalyser - name = "disease analyser" - desc = "Analyzes diseases to find out information about them!" - icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit - icon_state = "analyser" - anchored = TRUE - density = TRUE - - var/scanning = 0 - var/pause = 0 - - var/obj/item/weapon/virusdish/dish = null - -/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/O as obj, var/mob/user as mob) - if(default_unfasten_wrench(user, O, 20)) - return - - else if(!istype(O,/obj/item/weapon/virusdish)) return - - if(dish) - to_chat(user, "\The [src] is already loaded.") - return - - dish = O - user.drop_item() - O.loc = src - - user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - -/obj/machinery/disease2/diseaseanalyser/process() - if(stat & (NOPOWER|BROKEN)) - return - - if(scanning) - scanning -= 1 - if(scanning == 0) - if (dish.virus2.addToDB()) - ping("\The [src] pings, \"New pathogen added to data bank.\"") - - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) - P.name = "paper - [dish.virus2.name()]" - - var/r = dish.virus2.get_info() - P.info = {" - [virology_letterhead("Post-Analysis Memo")] - [r] -
                        - Additional Notes:  -"} - dish.basic_info = dish.virus2.get_basic_info() - dish.info = r - dish.name = "[initial(dish.name)] ([dish.virus2.name()])" - dish.analysed = 1 - dish.loc = src.loc - dish = null - - icon_state = "analyser" - src.state("\The [src] prints a sheet of paper.") - - else if(dish && !scanning && !pause) - if(dish.virus2 && dish.growth > 50) - dish.growth -= 10 - scanning = 5 - icon_state = "analyser_processing" - else - pause = 1 - spawn(25) - dish.loc = src.loc - dish = null - - src.state("\The [src] buzzes, \"Insufficient growth density to complete analysis.\"") - pause = 0 - return +/obj/machinery/disease2/diseaseanalyser + name = "disease analyser" + desc = "Analyzes diseases to find out information about them!" + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit + icon_state = "analyser" + anchored = TRUE + density = TRUE + + var/scanning = 0 + var/pause = 0 + + var/obj/item/weapon/virusdish/dish = null + +/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/O as obj, var/mob/user as mob) + if(default_unfasten_wrench(user, O, 20)) + return + + else if(!istype(O,/obj/item/weapon/virusdish)) return + + if(dish) + to_chat(user, "\The [src] is already loaded.") + return + + dish = O + user.drop_item() + O.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + +/obj/machinery/disease2/diseaseanalyser/process() + if(stat & (NOPOWER|BROKEN)) + return + + if(scanning) + scanning -= 1 + if(scanning == 0) + if (dish.virus2.addToDB()) + ping("\The [src] pings, \"New pathogen added to data bank.\"") + + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) + P.name = "paper - [dish.virus2.name()]" + + var/r = dish.virus2.get_info() + P.info = {" + [virology_letterhead("Post-Analysis Memo")] + [r] +
                        + Additional Notes:  +"} + dish.basic_info = dish.virus2.get_basic_info() + dish.info = r + dish.name = "[initial(dish.name)] ([dish.virus2.name()])" + dish.analysed = 1 + dish.loc = src.loc + dish = null + + icon_state = "analyser" + src.state("\The [src] prints a sheet of paper.") + + else if(dish && !scanning && !pause) + if(dish.virus2 && dish.growth > 50) + dish.growth -= 10 + scanning = 5 + icon_state = "analyser_processing" + else + pause = 1 + spawn(25) + dish.loc = src.loc + dish = null + + src.state("\The [src] buzzes, \"Insufficient growth density to complete analysis.\"") + pause = 0 + return diff --git a/code/modules/virus2/antibodies.dm b/code/modules/virus2/antibodies.dm index 85df77447a..cecb070940 100644 --- a/code/modules/virus2/antibodies.dm +++ b/code/modules/virus2/antibodies.dm @@ -1,26 +1,26 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -var/global/list/ALL_ANTIGENS = list( - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" - ) - -/hook/startup/proc/randomise_antigens_order() - ALL_ANTIGENS = shuffle(ALL_ANTIGENS) - return 1 - -// iterate over the list of antigens and see what matches -/proc/antigens2string(list/antigens, none="None") - if(!istype(antigens)) - CRASH("Illegal type!") - if(!antigens.len) - return none - - var/code = "" - for(var/V in ALL_ANTIGENS) - if(V in antigens) - code += V - - if(!code) - return none - - return code +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +var/global/list/ALL_ANTIGENS = list( + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" + ) + +/hook/startup/proc/randomise_antigens_order() + ALL_ANTIGENS = shuffle(ALL_ANTIGENS) + return 1 + +// iterate over the list of antigens and see what matches +/proc/antigens2string(list/antigens, none="None") + if(!istype(antigens)) + CRASH("Illegal type!") + if(!antigens.len) + return none + + var/code = "" + for(var/V in ALL_ANTIGENS) + if(V in antigens) + code += V + + if(!code) + return none + + return code diff --git a/code/modules/virus2/curer.dm b/code/modules/virus2/curer.dm index f494719b84..0ecd1133a0 100644 --- a/code/modules/virus2/curer.dm +++ b/code/modules/virus2/curer.dm @@ -1,105 +1,105 @@ -/obj/machinery/computer/curer - name = "cure research machine" - icon_keyboard = "med_key" - icon_screen = "dna" - circuit = /obj/item/weapon/circuitboard/curefab - var/curing - var/virusing - - var/obj/item/weapon/reagent_containers/container = null - -/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I,/obj/item/weapon/reagent_containers)) - var/mob/living/carbon/C = user - if(!container) - container = I - C.drop_item() - I.loc = src - return - if(istype(I,/obj/item/weapon/virusdish)) - if(virusing) - to_chat(user, "The pathogen materializer is still recharging..") - return - var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) - - var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=list(),"antibodies"=list()) - data["virus2"] |= I:virus2 - product.reagents.add_reagent("blood",30,data) - - virusing = 1 - spawn(1200) virusing = 0 - - state("The [src.name] Buzzes", "blue") - return - ..() - return - -/obj/machinery/computer/curer/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/curer/attack_hand(var/mob/user as mob) - if(..()) - return - user.machine = src - var/dat - if(curing) - dat = "Antibody production in progress" - else if(virusing) - dat = "Virus production in progress" - else if(container) - // see if there's any blood in the container - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in container.reagents.reagent_list - - if(B) - dat = "Blood sample inserted." - dat += "
                        Antibodies: [antigens2string(B.data["antibodies"])]" - dat += "
                        Begin antibody production" - else - dat += "
                        Please check container contents." - dat += "
                        Eject container" - else - dat = "Please insert a container." - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return - -/obj/machinery/computer/curer/process() - ..() - - if(stat & (NOPOWER|BROKEN)) - return - use_power(500) - - if(curing) - curing -= 1 - if(curing == 0) - if(container) - createcure(container) - return - -/obj/machinery/computer/curer/Topic(href, href_list) - if(..()) - return 1 - usr.machine = src - - if (href_list["antibody"]) - curing = 10 - else if(href_list["eject"]) - container.loc = src.loc - container = null - - src.add_fingerprint(usr) - src.updateUsrDialog() - - -/obj/machinery/computer/curer/proc/createcure(var/obj/item/weapon/reagent_containers/container) - var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) - - var/datum/reagent/blood/B = locate() in container.reagents.reagent_list - - var/list/data = list() - data["antibodies"] = B.data["antibodies"] - product.reagents.add_reagent("antibodies",30,data) - - state("\The [src.name] buzzes", "blue") +/obj/machinery/computer/curer + name = "cure research machine" + icon_keyboard = "med_key" + icon_screen = "dna" + circuit = /obj/item/weapon/circuitboard/curefab + var/curing + var/virusing + + var/obj/item/weapon/reagent_containers/container = null + +/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob) + if(istype(I,/obj/item/weapon/reagent_containers)) + var/mob/living/carbon/C = user + if(!container) + container = I + C.drop_item() + I.loc = src + return + if(istype(I,/obj/item/weapon/virusdish)) + if(virusing) + to_chat(user, "The pathogen materializer is still recharging..") + return + var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) + + var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=list(),"antibodies"=list()) + data["virus2"] |= I:virus2 + product.reagents.add_reagent("blood",30,data) + + virusing = 1 + spawn(1200) virusing = 0 + + state("The [src.name] Buzzes", "blue") + return + ..() + return + +/obj/machinery/computer/curer/attack_ai(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/computer/curer/attack_hand(var/mob/user as mob) + if(..()) + return + user.machine = src + var/dat + if(curing) + dat = "Antibody production in progress" + else if(virusing) + dat = "Virus production in progress" + else if(container) + // see if there's any blood in the container + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in container.reagents.reagent_list + + if(B) + dat = "Blood sample inserted." + dat += "
                        Antibodies: [antigens2string(B.data["antibodies"])]" + dat += "
                        Begin antibody production" + else + dat += "
                        Please check container contents." + dat += "
                        Eject container" + else + dat = "Please insert a container." + + user << browse(dat, "window=computer;size=400x500") + onclose(user, "computer") + return + +/obj/machinery/computer/curer/process() + ..() + + if(stat & (NOPOWER|BROKEN)) + return + use_power(500) + + if(curing) + curing -= 1 + if(curing == 0) + if(container) + createcure(container) + return + +/obj/machinery/computer/curer/Topic(href, href_list) + if(..()) + return 1 + usr.machine = src + + if (href_list["antibody"]) + curing = 10 + else if(href_list["eject"]) + container.loc = src.loc + container = null + + src.add_fingerprint(usr) + src.updateUsrDialog() + + +/obj/machinery/computer/curer/proc/createcure(var/obj/item/weapon/reagent_containers/container) + var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) + + var/datum/reagent/blood/B = locate() in container.reagents.reagent_list + + var/list/data = list() + data["antibodies"] = B.data["antibodies"] + product.reagents.add_reagent("antibodies",30,data) + + state("\The [src.name] buzzes", "blue") diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm index 263404ea1f..afc875a76e 100644 --- a/code/modules/virus2/diseasesplicer.dm +++ b/code/modules/virus2/diseasesplicer.dm @@ -1,194 +1,194 @@ -/obj/machinery/computer/diseasesplicer - name = "disease splicer" - icon_keyboard = "med_key" - icon_screen = "crew" - - var/datum/disease2/effectholder/memorybank = null - var/list/species_buffer = null - var/analysed = 0 - var/obj/item/weapon/virusdish/dish = null - var/burning = 0 - var/splicing = 0 - var/scanning = 0 - -/obj/machinery/computer/diseasesplicer/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(I.has_tool_quality(TOOL_SCREWDRIVER)) - return ..(I,user) - - if(default_unfasten_wrench(user, I, 20)) - return - - if(istype(I,/obj/item/weapon/virusdish)) - var/mob/living/carbon/c = user - if(dish) - to_chat(user, "\The [src] is already loaded.") - return - - dish = I - c.drop_item() - I.loc = src - - if(istype(I,/obj/item/weapon/diseasedisk)) - to_chat(user, "You upload the contents of the disk onto the buffer.") - memorybank = I:effect - species_buffer = I:species - analysed = I:analysed - - src.attack_hand(user) - -/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob) - if(..()) - return TRUE - tgui_interact(user) - -/obj/machinery/computer/diseasesplicer/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "DiseaseSplicer", name) - ui.open() - -/obj/machinery/computer/diseasesplicer/tgui_data(mob/user) - var/list/data = list() - data["dish_inserted"] = !!dish - - data["buffer"] = null - if(memorybank) - data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.effect.stage) - data["species_buffer"] = null - if(species_buffer) - data["species_buffer"] = analysed ? jointext(species_buffer, ", ") : "Unknown Species" - - data["effects"] = null - data["info"] = null - data["growth"] = 0 - data["affected_species"] = null - data["busy"] = null - if(splicing) - data["busy"] = "Splicing..." - else if(scanning) - data["busy"] = "Scanning..." - else if(burning) - data["busy"] = "Copying data to disk..." - else if(dish) - data["growth"] = min(dish.growth, 100) - - if(dish.virus2) - if(dish.virus2.affected_species) - data["affected_species"] = dish.analysed ? dish.virus2.affected_species : list() - - if(dish.growth >= 50) - var/list/effects[0] - for (var/datum/disease2/effectholder/e in dish.virus2.effects) - effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]"))) - data["effects"] = effects - else - data["info"] = "Insufficient cell growth for gene splicing." - else - data["info"] = "No virus detected." - else - data["info"] = "No dish loaded." - - return data - -/obj/machinery/computer/diseasesplicer/process() - if(stat & (NOPOWER|BROKEN)) - return - - if(scanning) - scanning -= 1 - if(!scanning) - ping("\The [src] pings, \"Analysis complete.\"") - SStgui.update_uis(src) - if(splicing) - splicing -= 1 - if(!splicing) - ping("\The [src] pings, \"Splicing operation complete.\"") - SStgui.update_uis(src) - if(burning) - burning -= 1 - if(!burning) - var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc) - d.analysed = analysed - if(analysed) - if(memorybank) - d.name = "[memorybank.effect.name] GNA disk (Stage: [memorybank.effect.stage])" - d.effect = memorybank - else if(species_buffer) - d.name = "[jointext(species_buffer, ", ")] GNA disk" - d.species = species_buffer - else - if(memorybank) - d.name = "Unknown GNA disk (Stage: [memorybank.effect.stage])" - d.effect = memorybank - else if(species_buffer) - d.name = "Unknown Species GNA disk" - d.species = species_buffer - - ping("\The [src] pings, \"Backup disk saved.\"") - SStgui.update_uis(src) - -/obj/machinery/computer/diseasesplicer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) - if(..()) - return TRUE - - var/mob/user = usr - add_fingerprint(user) - - switch(action) - if("grab") - if(dish) - memorybank = locate(params["grab"]) - species_buffer = null - analysed = dish.analysed - dish = null - scanning = 10 - . = TRUE - - if("affected_species") - if(dish) - memorybank = null - species_buffer = dish.virus2.affected_species - analysed = dish.analysed - dish = null - scanning = 10 - . = TRUE - - if("eject") - if(dish) - dish.loc = src.loc - dish = null - . = TRUE - - if("splice") - if(dish) - var/target = text2num(params["splice"]) // target = 1 to 4 for effects, 5 for species - if(memorybank && 0 < target && target <= 4) - if(target < memorybank.effect.stage) return // too powerful, catching this for href exploit prevention - - var/datum/disease2/effectholder/target_holder - var/list/illegal_types = list() - for(var/datum/disease2/effectholder/e in dish.virus2.effects) - if(e.stage == target) - target_holder = e - else - illegal_types += e.effect.type - if(memorybank.effect.type in illegal_types) return - target_holder.effect = memorybank.effect - - else if(species_buffer && target == 5) - dish.virus2.affected_species = species_buffer - - else - return - - splicing = 10 - dish.virus2.uniqueID = rand(0,10000) - . = TRUE - - if("disk") - burning = 10 - . = TRUE - +/obj/machinery/computer/diseasesplicer + name = "disease splicer" + icon_keyboard = "med_key" + icon_screen = "crew" + + var/datum/disease2/effectholder/memorybank = null + var/list/species_buffer = null + var/analysed = 0 + var/obj/item/weapon/virusdish/dish = null + var/burning = 0 + var/splicing = 0 + var/scanning = 0 + +/obj/machinery/computer/diseasesplicer/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.has_tool_quality(TOOL_SCREWDRIVER)) + return ..(I,user) + + if(default_unfasten_wrench(user, I, 20)) + return + + if(istype(I,/obj/item/weapon/virusdish)) + var/mob/living/carbon/c = user + if(dish) + to_chat(user, "\The [src] is already loaded.") + return + + dish = I + c.drop_item() + I.loc = src + + if(istype(I,/obj/item/weapon/diseasedisk)) + to_chat(user, "You upload the contents of the disk onto the buffer.") + memorybank = I:effect + species_buffer = I:species + analysed = I:analysed + + src.attack_hand(user) + +/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob) + if(..()) + return TRUE + tgui_interact(user) + +/obj/machinery/computer/diseasesplicer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DiseaseSplicer", name) + ui.open() + +/obj/machinery/computer/diseasesplicer/tgui_data(mob/user) + var/list/data = list() + data["dish_inserted"] = !!dish + + data["buffer"] = null + if(memorybank) + data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.effect.stage) + data["species_buffer"] = null + if(species_buffer) + data["species_buffer"] = analysed ? jointext(species_buffer, ", ") : "Unknown Species" + + data["effects"] = null + data["info"] = null + data["growth"] = 0 + data["affected_species"] = null + data["busy"] = null + if(splicing) + data["busy"] = "Splicing..." + else if(scanning) + data["busy"] = "Scanning..." + else if(burning) + data["busy"] = "Copying data to disk..." + else if(dish) + data["growth"] = min(dish.growth, 100) + + if(dish.virus2) + if(dish.virus2.affected_species) + data["affected_species"] = dish.analysed ? dish.virus2.affected_species : list() + + if(dish.growth >= 50) + var/list/effects[0] + for (var/datum/disease2/effectholder/e in dish.virus2.effects) + effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]"))) + data["effects"] = effects + else + data["info"] = "Insufficient cell growth for gene splicing." + else + data["info"] = "No virus detected." + else + data["info"] = "No dish loaded." + + return data + +/obj/machinery/computer/diseasesplicer/process() + if(stat & (NOPOWER|BROKEN)) + return + + if(scanning) + scanning -= 1 + if(!scanning) + ping("\The [src] pings, \"Analysis complete.\"") + SStgui.update_uis(src) + if(splicing) + splicing -= 1 + if(!splicing) + ping("\The [src] pings, \"Splicing operation complete.\"") + SStgui.update_uis(src) + if(burning) + burning -= 1 + if(!burning) + var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc) + d.analysed = analysed + if(analysed) + if(memorybank) + d.name = "[memorybank.effect.name] GNA disk (Stage: [memorybank.effect.stage])" + d.effect = memorybank + else if(species_buffer) + d.name = "[jointext(species_buffer, ", ")] GNA disk" + d.species = species_buffer + else + if(memorybank) + d.name = "Unknown GNA disk (Stage: [memorybank.effect.stage])" + d.effect = memorybank + else if(species_buffer) + d.name = "Unknown Species GNA disk" + d.species = species_buffer + + ping("\The [src] pings, \"Backup disk saved.\"") + SStgui.update_uis(src) + +/obj/machinery/computer/diseasesplicer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + var/mob/user = usr + add_fingerprint(user) + + switch(action) + if("grab") + if(dish) + memorybank = locate(params["grab"]) + species_buffer = null + analysed = dish.analysed + dish = null + scanning = 10 + . = TRUE + + if("affected_species") + if(dish) + memorybank = null + species_buffer = dish.virus2.affected_species + analysed = dish.analysed + dish = null + scanning = 10 + . = TRUE + + if("eject") + if(dish) + dish.loc = src.loc + dish = null + . = TRUE + + if("splice") + if(dish) + var/target = text2num(params["splice"]) // target = 1 to 4 for effects, 5 for species + if(memorybank && 0 < target && target <= 4) + if(target < memorybank.effect.stage) return // too powerful, catching this for href exploit prevention + + var/datum/disease2/effectholder/target_holder + var/list/illegal_types = list() + for(var/datum/disease2/effectholder/e in dish.virus2.effects) + if(e.stage == target) + target_holder = e + else + illegal_types += e.effect.type + if(memorybank.effect.type in illegal_types) return + target_holder.effect = memorybank.effect + + else if(species_buffer && target == 5) + dish.virus2.affected_species = species_buffer + + else + return + + splicing = 10 + dish.virus2.uniqueID = rand(0,10000) + . = TRUE + + if("disk") + burning = 10 + . = TRUE + diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm index 399aca8738..7dab15e01a 100644 --- a/code/modules/virus2/dishincubator.dm +++ b/code/modules/virus2/dishincubator.dm @@ -1,201 +1,201 @@ -/obj/machinery/disease2/incubator/ - name = "pathogenic incubator" - desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator." - density = TRUE - anchored = TRUE - icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit - icon_state = "incubator" - var/obj/item/weapon/virusdish/dish - var/obj/item/weapon/reagent_containers/glass/beaker = null - var/radiation = 0 - - var/on = 0 - var/power = 0 - - var/foodsupply = 0 - var/toxins = 0 - -/obj/machinery/disease2/incubator/attackby(var/obj/O as obj, var/mob/user as mob) - if(default_unfasten_wrench(user, O, 20)) - return - - if(istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/syringe)) - - if(beaker) - to_chat(user, "\The [src] is already loaded.") - return - - beaker = O - user.drop_item() - O.loc = src - - user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - SStgui.update_uis(src) - - src.attack_hand(user) - return - - if(istype(O, /obj/item/weapon/virusdish)) - - if(dish) - to_chat(user, "The dish tray is aleady full!") - return - - dish = O - user.drop_item() - O.loc = src - - user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - SStgui.update_uis(src) - - src.attack_hand(user) - -/obj/machinery/disease2/incubator/attack_hand(mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - tgui_interact(user) - -/obj/machinery/disease2/incubator/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "DishIncubator", name) - ui.set_autoupdate(FALSE) - ui.open() - -/obj/machinery/disease2/incubator/tgui_data(mob/user) - var/data[0] - data["chemicals_inserted"] = !!beaker - data["dish_inserted"] = !!dish - data["food_supply"] = foodsupply - data["radiation"] = radiation - data["toxins"] = min(toxins, 100) - data["on"] = on - data["system_in_use"] = foodsupply > 0 || radiation > 0 || toxins > 0 - data["chemical_volume"] = beaker ? beaker.reagents.total_volume : 0 - data["max_chemical_volume"] = beaker ? beaker.volume : 1 - data["virus"] = dish ? dish.virus2 : null - data["growth"] = dish ? min(dish.growth, 100) : 0 - data["infection_rate"] = dish && dish.virus2 ? dish.virus2.infectionchance * 10 : 0 - data["analysed"] = dish && dish.analysed ? 1 : 0 - data["can_breed_virus"] = null - data["blood_already_infected"] = null - - if(beaker) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list - data["can_breed_virus"] = dish && dish.virus2 && B - - if(B) - if(!B.data["virus2"]) - B.data["virus2"] = list() - - var/list/virus = B.data["virus2"] - for (var/ID in virus) - data["blood_already_infected"] = virus[ID] - - return data - -/obj/machinery/disease2/incubator/process() - if(dish && on && dish.virus2) - use_power(50,EQUIP) - if(!powered(EQUIP)) - on = 0 - icon_state = "incubator" - - if(foodsupply) - if(dish.growth + 3 >= 100 && dish.growth < 100) - ping("\The [src] pings, \"Sufficient viral growth density achieved.\"") - - foodsupply -= 1 - dish.growth += 3 - SStgui.update_uis(src) - - if(radiation) - if(radiation > 50 & prob(5)) - dish.virus2.majormutate() - if(dish.info) - dish.info = "OUTDATED : [dish.info]" - dish.basic_info = "OUTDATED: [dish.basic_info]" - dish.analysed = 0 - ping("\The [src] pings, \"Mutant viral strain detected.\"") - else if(prob(5)) - dish.virus2.minormutate() - radiation -= 1 - SStgui.update_uis(src) - if(toxins && prob(5)) - dish.virus2.infectionchance -= 1 - SStgui.update_uis(src) - if(toxins > 50) - dish.growth = 0 - dish.virus2 = null - SStgui.update_uis(src) - else if(!dish) - on = 0 - icon_state = "incubator" - SStgui.update_uis(src) - - if(beaker) - if(foodsupply < 100 && beaker.reagents.remove_reagent("virusfood",5)) - if(foodsupply + 10 <= 100) - foodsupply += 10 - SStgui.update_uis(src) - - if(locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100) - for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list) - toxins += max(T.strength,1) - beaker.reagents.remove_reagent(T.id,1) - if(toxins > 100) - toxins = 100 - break - SStgui.update_uis(src) - -/obj/machinery/disease2/incubator/tgui_act(action, params) - if(..()) - return TRUE - - var/mob/user = usr - add_fingerprint(user) - switch(action) - if("ejectchem") - if(beaker) - beaker.loc = src.loc - beaker = null - . = TRUE - - if("power") - if(dish) - on = !on - icon_state = on ? "incubator_on" : "incubator" - . = TRUE - - if("ejectdish") - if(dish) - dish.loc = src.loc - dish = null - . = TRUE - - if("rad") - radiation = min(100, radiation + 10) - . = TRUE - - if("flush") - radiation = 0 - toxins = 0 - foodsupply = 0 - . = TRUE - - if("virus") - if(!dish) - return TRUE - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list - if(!B) - return TRUE - - if(!B.data["virus2"]) - B.data["virus2"] = list() - - var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy()) - B.data["virus2"] += virus - - ping("\The [src] pings, \"Injection complete.\"") - . = TRUE +/obj/machinery/disease2/incubator/ + name = "pathogenic incubator" + desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator." + density = TRUE + anchored = TRUE + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit + icon_state = "incubator" + var/obj/item/weapon/virusdish/dish + var/obj/item/weapon/reagent_containers/glass/beaker = null + var/radiation = 0 + + var/on = 0 + var/power = 0 + + var/foodsupply = 0 + var/toxins = 0 + +/obj/machinery/disease2/incubator/attackby(var/obj/O as obj, var/mob/user as mob) + if(default_unfasten_wrench(user, O, 20)) + return + + if(istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/syringe)) + + if(beaker) + to_chat(user, "\The [src] is already loaded.") + return + + beaker = O + user.drop_item() + O.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + SStgui.update_uis(src) + + src.attack_hand(user) + return + + if(istype(O, /obj/item/weapon/virusdish)) + + if(dish) + to_chat(user, "The dish tray is aleady full!") + return + + dish = O + user.drop_item() + O.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + SStgui.update_uis(src) + + src.attack_hand(user) + +/obj/machinery/disease2/incubator/attack_hand(mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return + tgui_interact(user) + +/obj/machinery/disease2/incubator/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DishIncubator", name) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/disease2/incubator/tgui_data(mob/user) + var/data[0] + data["chemicals_inserted"] = !!beaker + data["dish_inserted"] = !!dish + data["food_supply"] = foodsupply + data["radiation"] = radiation + data["toxins"] = min(toxins, 100) + data["on"] = on + data["system_in_use"] = foodsupply > 0 || radiation > 0 || toxins > 0 + data["chemical_volume"] = beaker ? beaker.reagents.total_volume : 0 + data["max_chemical_volume"] = beaker ? beaker.volume : 1 + data["virus"] = dish ? dish.virus2 : null + data["growth"] = dish ? min(dish.growth, 100) : 0 + data["infection_rate"] = dish && dish.virus2 ? dish.virus2.infectionchance * 10 : 0 + data["analysed"] = dish && dish.analysed ? 1 : 0 + data["can_breed_virus"] = null + data["blood_already_infected"] = null + + if(beaker) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list + data["can_breed_virus"] = dish && dish.virus2 && B + + if(B) + if(!B.data["virus2"]) + B.data["virus2"] = list() + + var/list/virus = B.data["virus2"] + for (var/ID in virus) + data["blood_already_infected"] = virus[ID] + + return data + +/obj/machinery/disease2/incubator/process() + if(dish && on && dish.virus2) + use_power(50,EQUIP) + if(!powered(EQUIP)) + on = 0 + icon_state = "incubator" + + if(foodsupply) + if(dish.growth + 3 >= 100 && dish.growth < 100) + ping("\The [src] pings, \"Sufficient viral growth density achieved.\"") + + foodsupply -= 1 + dish.growth += 3 + SStgui.update_uis(src) + + if(radiation) + if(radiation > 50 & prob(5)) + dish.virus2.majormutate() + if(dish.info) + dish.info = "OUTDATED : [dish.info]" + dish.basic_info = "OUTDATED: [dish.basic_info]" + dish.analysed = 0 + ping("\The [src] pings, \"Mutant viral strain detected.\"") + else if(prob(5)) + dish.virus2.minormutate() + radiation -= 1 + SStgui.update_uis(src) + if(toxins && prob(5)) + dish.virus2.infectionchance -= 1 + SStgui.update_uis(src) + if(toxins > 50) + dish.growth = 0 + dish.virus2 = null + SStgui.update_uis(src) + else if(!dish) + on = 0 + icon_state = "incubator" + SStgui.update_uis(src) + + if(beaker) + if(foodsupply < 100 && beaker.reagents.remove_reagent("virusfood",5)) + if(foodsupply + 10 <= 100) + foodsupply += 10 + SStgui.update_uis(src) + + if(locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100) + for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list) + toxins += max(T.strength,1) + beaker.reagents.remove_reagent(T.id,1) + if(toxins > 100) + toxins = 100 + break + SStgui.update_uis(src) + +/obj/machinery/disease2/incubator/tgui_act(action, params) + if(..()) + return TRUE + + var/mob/user = usr + add_fingerprint(user) + switch(action) + if("ejectchem") + if(beaker) + beaker.loc = src.loc + beaker = null + . = TRUE + + if("power") + if(dish) + on = !on + icon_state = on ? "incubator_on" : "incubator" + . = TRUE + + if("ejectdish") + if(dish) + dish.loc = src.loc + dish = null + . = TRUE + + if("rad") + radiation = min(100, radiation + 10) + . = TRUE + + if("flush") + radiation = 0 + toxins = 0 + foodsupply = 0 + . = TRUE + + if("virus") + if(!dish) + return TRUE + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list + if(!B) + return TRUE + + if(!B.data["virus2"]) + B.data["virus2"] = list() + + var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy()) + B.data["virus2"] += virus + + ping("\The [src] pings, \"Injection complete.\"") + . = TRUE diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index 61fa5cf820..59a5ff81c3 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -1,211 +1,211 @@ -/obj/machinery/disease2/isolator/ - name = "pathogenic isolator" - desc = "Used to isolate and identify diseases, allowing for comparison with a remote database." - density = TRUE - anchored = TRUE - icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit - icon_state = "isolator" - var/isolating = 0 - var/datum/disease2/disease/virus2 = null - var/obj/item/weapon/reagent_containers/syringe/sample = null - -/obj/machinery/disease2/isolator/update_icon() - if (stat & (BROKEN|NOPOWER)) - icon_state = "isolator" - return - - if (isolating) - icon_state = "isolator_processing" - else if (sample) - icon_state = "isolator_in" - else - icon_state = "isolator" - -/obj/machinery/disease2/isolator/attackby(var/obj/O as obj, var/mob/user) - if(default_unfasten_wrench(user, O, 20)) - return - - else if(!istype(O,/obj/item/weapon/reagent_containers/syringe)) return - var/obj/item/weapon/reagent_containers/syringe/S = O - - if(sample) - to_chat(user, "\The [src] is already loaded.") - return - - sample = S - user.drop_item() - S.loc = src - - user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") - SStgui.update_uis(src) - update_icon() - - src.attack_hand(user) - -/obj/machinery/disease2/isolator/attack_hand(mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - tgui_interact(user) - -/obj/machinery/disease2/isolator/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PathogenicIsolator", name) - ui.open() - - -/obj/machinery/disease2/isolator/tgui_data(mob/user) - var/list/data = list() - data["syringe_inserted"] = !!sample - data["isolating"] = isolating - data["pathogen_pool"] = null - data["can_print"] = !isolating - - var/list/pathogen_pool = list() - if(sample) - for(var/datum/reagent/blood/B in sample.reagents.reagent_list) - var/list/virus = B.data["virus2"] - for (var/ID in virus) - var/datum/disease2/disease/V = virus[ID] - var/datum/data/record/R = null - if (ID in virusDB) - R = virusDB[ID] - - var/mob/living/carbon/human/D = B.data["donor"] - pathogen_pool.Add(list(list(\ - "name" = "[istype(D) ? "[D.get_species()] " : ""][B.name]", \ - "dna" = B.data["blood_DNA"], \ - "unique_id" = V.uniqueID, \ - "reference" = "\ref[V]", \ - "is_in_database" = !!R, \ - "record" = "\ref[R]"))) - data["pathogen_pool"] = pathogen_pool - - var/list/db = list() - for(var/ID in virusDB) - var/datum/data/record/r = virusDB[ID] - db.Add(list(list("name" = r.fields["name"], "record" = "\ref[r]"))) - data["database"] = db - data["modal"] = tgui_modal_data(src) - return data - -/obj/machinery/disease2/isolator/process() - if (isolating > 0) - isolating -= 1 - if (isolating == 0) - if (virus2) - var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) - d.virus2 = virus2.getcopy() - virus2 = null - ping("\The [src] pings, \"Viral strain isolated.\"") - - SStgui.update_uis(src) - update_icon() - -/obj/machinery/disease2/isolator/tgui_act(action, list/params) - if(..()) - return TRUE - - var/mob/user = usr - add_fingerprint(user) - - . = TRUE - switch(tgui_modal_act(src, action, params)) - if(TGUI_MODAL_ANSWER) - return - - switch(action) - if("view_entry") - var/datum/data/record/v = locate(params["vir"]) - if(!istype(v)) - return FALSE - tgui_modal_message(src, "virus", "", null, v.fields["tgui_description"]) - return TRUE - - if("print") - print(user, params) - return TRUE - - if("isolate") - var/datum/disease2/disease/V = locate(params["isolate"]) - if (V) - virus2 = V - isolating = 20 - update_icon() - return TRUE - - if("eject") - if(!sample) - return FALSE - sample.forceMove(loc) - sample = null - update_icon() - return TRUE - -/obj/machinery/disease2/isolator/proc/print(mob/user, list/params) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) - - switch(params["type"]) - if("patient_diagnosis") - if (!sample) return - P.name = "paper - Patient Diagnostic Report" - P.info = {" - [virology_letterhead("Patient Diagnostic Report")] -
                        CONFIDENTIAL MEDICAL REPORT

                        - Sample: [sample.name]
                        -"} - - if (user) - P.info += "Generated By: [user.name]
                        " - - P.info += "
                        " - - for(var/datum/reagent/blood/B in sample.reagents.reagent_list) - var/mob/living/carbon/human/D = B.data["donor"] - P.info += "[D.get_species()] [B.name]:
                        [B.data["blood_DNA"]]
                        " - - var/list/virus = B.data["virus2"] - P.info += "Pathogens:
                        " - if (virus.len > 0) - for (var/ID in virus) - var/datum/disease2/disease/V = virus[ID] - P.info += "[V.name()]
                        " - else - P.info += "None
                        " - - P.info += {" -
                        - Additional Notes:  -"} - - if("virus_list") - P.name = "paper - Virus List" - P.info = {" - [virology_letterhead("Virus List")] -"} - - var/i = 0 - for (var/ID in virusDB) - i++ - var/datum/data/record/r = virusDB[ID] - P.info += "[i]. " + r.fields["name"] - P.info += "
                        " - - P.info += {" -
                        - Additional Notes:  -"} - - if("virus_record") - var/datum/data/record/v = locate(params["vir"]) - if(!istype(v)) - return FALSE - P.name = "paper - Viral Profile" - P.info = {" - [virology_letterhead("Viral Profile")] - [v.fields["description"]] -
                        - Additional Notes:  -"} - - state("The nearby computer prints out a report.") +/obj/machinery/disease2/isolator/ + name = "pathogenic isolator" + desc = "Used to isolate and identify diseases, allowing for comparison with a remote database." + density = TRUE + anchored = TRUE + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit + icon_state = "isolator" + var/isolating = 0 + var/datum/disease2/disease/virus2 = null + var/obj/item/weapon/reagent_containers/syringe/sample = null + +/obj/machinery/disease2/isolator/update_icon() + if (stat & (BROKEN|NOPOWER)) + icon_state = "isolator" + return + + if (isolating) + icon_state = "isolator_processing" + else if (sample) + icon_state = "isolator_in" + else + icon_state = "isolator" + +/obj/machinery/disease2/isolator/attackby(var/obj/O as obj, var/mob/user) + if(default_unfasten_wrench(user, O, 20)) + return + + else if(!istype(O,/obj/item/weapon/reagent_containers/syringe)) return + var/obj/item/weapon/reagent_containers/syringe/S = O + + if(sample) + to_chat(user, "\The [src] is already loaded.") + return + + sample = S + user.drop_item() + S.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + SStgui.update_uis(src) + update_icon() + + src.attack_hand(user) + +/obj/machinery/disease2/isolator/attack_hand(mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return + tgui_interact(user) + +/obj/machinery/disease2/isolator/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PathogenicIsolator", name) + ui.open() + + +/obj/machinery/disease2/isolator/tgui_data(mob/user) + var/list/data = list() + data["syringe_inserted"] = !!sample + data["isolating"] = isolating + data["pathogen_pool"] = null + data["can_print"] = !isolating + + var/list/pathogen_pool = list() + if(sample) + for(var/datum/reagent/blood/B in sample.reagents.reagent_list) + var/list/virus = B.data["virus2"] + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + var/datum/data/record/R = null + if (ID in virusDB) + R = virusDB[ID] + + var/mob/living/carbon/human/D = B.data["donor"] + pathogen_pool.Add(list(list(\ + "name" = "[istype(D) ? "[D.get_species()] " : ""][B.name]", \ + "dna" = B.data["blood_DNA"], \ + "unique_id" = V.uniqueID, \ + "reference" = "\ref[V]", \ + "is_in_database" = !!R, \ + "record" = "\ref[R]"))) + data["pathogen_pool"] = pathogen_pool + + var/list/db = list() + for(var/ID in virusDB) + var/datum/data/record/r = virusDB[ID] + db.Add(list(list("name" = r.fields["name"], "record" = "\ref[r]"))) + data["database"] = db + data["modal"] = tgui_modal_data(src) + return data + +/obj/machinery/disease2/isolator/process() + if (isolating > 0) + isolating -= 1 + if (isolating == 0) + if (virus2) + var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) + d.virus2 = virus2.getcopy() + virus2 = null + ping("\The [src] pings, \"Viral strain isolated.\"") + + SStgui.update_uis(src) + update_icon() + +/obj/machinery/disease2/isolator/tgui_act(action, list/params) + if(..()) + return TRUE + + var/mob/user = usr + add_fingerprint(user) + + . = TRUE + switch(tgui_modal_act(src, action, params)) + if(TGUI_MODAL_ANSWER) + return + + switch(action) + if("view_entry") + var/datum/data/record/v = locate(params["vir"]) + if(!istype(v)) + return FALSE + tgui_modal_message(src, "virus", "", null, v.fields["tgui_description"]) + return TRUE + + if("print") + print(user, params) + return TRUE + + if("isolate") + var/datum/disease2/disease/V = locate(params["isolate"]) + if (V) + virus2 = V + isolating = 20 + update_icon() + return TRUE + + if("eject") + if(!sample) + return FALSE + sample.forceMove(loc) + sample = null + update_icon() + return TRUE + +/obj/machinery/disease2/isolator/proc/print(mob/user, list/params) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) + + switch(params["type"]) + if("patient_diagnosis") + if (!sample) return + P.name = "paper - Patient Diagnostic Report" + P.info = {" + [virology_letterhead("Patient Diagnostic Report")] +
                        CONFIDENTIAL MEDICAL REPORT

                        + Sample: [sample.name]
                        +"} + + if (user) + P.info += "Generated By: [user.name]
                        " + + P.info += "
                        " + + for(var/datum/reagent/blood/B in sample.reagents.reagent_list) + var/mob/living/carbon/human/D = B.data["donor"] + P.info += "[D.get_species()] [B.name]:
                        [B.data["blood_DNA"]]
                        " + + var/list/virus = B.data["virus2"] + P.info += "Pathogens:
                        " + if (virus.len > 0) + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + P.info += "[V.name()]
                        " + else + P.info += "None
                        " + + P.info += {" +
                        + Additional Notes:  +"} + + if("virus_list") + P.name = "paper - Virus List" + P.info = {" + [virology_letterhead("Virus List")] +"} + + var/i = 0 + for (var/ID in virusDB) + i++ + var/datum/data/record/r = virusDB[ID] + P.info += "[i]. " + r.fields["name"] + P.info += "
                        " + + P.info += {" +
                        + Additional Notes:  +"} + + if("virus_record") + var/datum/data/record/v = locate(params["vir"]) + if(!istype(v)) + return FALSE + P.name = "paper - Viral Profile" + P.info = {" + [virology_letterhead("Viral Profile")] + [v.fields["description"]] +
                        + Additional Notes:  +"} + + state("The nearby computer prints out a report.") diff --git a/code/modules/vore/appearance/sprite_accessories_yw.dm b/code/modules/vore/appearance/sprite_accessories_yw.dm index 936b5859e5..4be54e117b 100644 --- a/code/modules/vore/appearance/sprite_accessories_yw.dm +++ b/code/modules/vore/appearance/sprite_accessories_yw.dm @@ -1,218 +1,218 @@ -//Wings - -/datum/sprite_accessory/wing/bat_purpley_yw - name = "bat wings, purple" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "succubus-purple" - -/datum/sprite_accessory/wing/sepulchre_yw - name = "demon wings, red" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "sepulchre_wings" - -/datum/sprite_accessory/wing/sepulchre_c_yw - name = "demon wings (colorable)" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "sepulchre_wingsc" - do_colouration = 1 - -/datum/sprite_accessory/wing/cyberdragon - name = "Cyber dragon wing (colorable)" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "cyberdragon_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/cyberdragon_red - name = "Cyber dragon wing (red)" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "cyberdragon_red_s" - do_colouration = 0 - -/datum/sprite_accessory/wing/cyberdoe - name = "Cyber doe wing" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "cyberdoe_s" - do_colouration = 0 - -/datum/sprite_accessory/wing/cyberangel - name = "Cyber angel wing (colorable)" - desc = "" - icon = 'icons/mob/vore/wings_yw.dmi' - icon_state = "cyber_angel" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -//Tails -/datum/sprite_accessory/tail/tripplekitsune_colorable_yw - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Kitsune 3 tails - colorable" - desc = "" - icon_state = "triplekitsune" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "triplekitsune_tips" - -/datum/sprite_accessory/tail/lizard_tail_smooth - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Lizard Tail (Smooth)" - desc = "" - icon_state = "lizard_tail_smooth" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_dark_tiger - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Lizard Tail (Dark Tiger)" - desc = "" - icon_state = "lizard_tail_dark_tiger" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_light_tiger - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Lizard Tail (Light Tiger)" - desc = "" - icon_state = "lizard_tail_light_tiger" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_spiked - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Lizard Tail (Spiked)" - desc = "" - icon_state = "lizard_tail_spiked" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/wolf_tail - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Wolf Tail" - desc = "" - icon_state = "wolf_tail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/ninekitsune_colorable_yw - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Kitsune 9 tails - colorable" - desc = "" - icon_state = "ninekitsune" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "ninekitsune-tips" - -/datum/sprite_accessory/tail/vulpkanin_alt_color - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Vulpkanin alt" - desc = "" - icon_state = "vulpkanin_alt_color" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "vulpkanin_alt_color_tips" - ani_state = "vulpkanin_alt_color_w" - extra_overlay_w = "vulpkanin_alt_color_tips_w" - -/datum/sprite_accessory/tail/raccoon_tail - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Raccoon gray tail" - desc = "" - icon_state = "raccoon_tail" - do_colouration = 0 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/striped_tail - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Striped tail, colorable" - desc = "" - icon_state = "stripedtail_colorable" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "stripedtail_colorable_w" - -/datum/sprite_accessory/tail/tesh_pattern_fem - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Female teshari tail(Pattern)" - desc = "" - icon_state = "seromitail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_fem_tail" - -/datum/sprite_accessory/tail/tesh_pattern_male - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Male teshari tail(Pattern)" - desc = "" - icon_state = "seromitail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_male_tail" - -/datum/sprite_accessory/tail/tesh_pattern_fem_alt - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Female teshari tail(Pattern, Alt.)" - desc = "" - icon_state = "teshari_fluffytail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_fem_alt" - - -/datum/sprite_accessory/tail/tesh_pattern_male_alt - icon = 'icons/mob/vore/tails_yw.dmi' - name = "Male teshari tail(Pattern, Alt.)" - desc = "" - icon_state = "teshari_fluffytail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_male_alt" - -/datum/sprite_accessory/tail/jeanne_nanovulp - icon = 'icons/mob/human_races/cyberlimbs/dopiotl/jeanne_nanovulp.dmi' - name = "Jeanne kitsune nine tails" - desc = "" - icon_state = "tails" - do_colouration = 0 - ckeys_allowed = list("dopiotl") - -//ears - -/datum/sprite_accessory/ears/large_dragon - icon = 'icons/mob/vore/ears_yw.dmi' - name = "Very large dragon horns" - desc = "" - icon_state = "big_liz" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/tesh_pattern_ear_male - icon = 'icons/mob/vore/ears_yw.dmi' - name = "Teshari ear ,pattern(Male)" - desc = "" - icon_state = "teshari" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - extra_overlay = "teshari_male_pattern" - -/datum/sprite_accessory/ears/tesh_pattern_ear_female - icon = 'icons/mob/vore/ears_yw.dmi' - name = "Teshari ear ,pattern(Female)" - desc = "" - icon_state = "teshari" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - extra_overlay = "teshari_female_pattern" - -/datum/sprite_accessory/ears/jeanne_nanovulp - icon = 'icons/mob/human_races/cyberlimbs/dopiotl/jeanne_nanovulp.dmi' - name = "Jeanne nanovulp ears" - desc = "" - icon_state = "ears" - do_colouration = 0 - ckeys_allowed = list("dopiotl") +//Wings + +/datum/sprite_accessory/wing/bat_purpley_yw + name = "bat wings, purple" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "succubus-purple" + +/datum/sprite_accessory/wing/sepulchre_yw + name = "demon wings, red" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "sepulchre_wings" + +/datum/sprite_accessory/wing/sepulchre_c_yw + name = "demon wings (colorable)" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "sepulchre_wingsc" + do_colouration = 1 + +/datum/sprite_accessory/wing/cyberdragon + name = "Cyber dragon wing (colorable)" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "cyberdragon_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/cyberdragon_red + name = "Cyber dragon wing (red)" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "cyberdragon_red_s" + do_colouration = 0 + +/datum/sprite_accessory/wing/cyberdoe + name = "Cyber doe wing" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "cyberdoe_s" + do_colouration = 0 + +/datum/sprite_accessory/wing/cyberangel + name = "Cyber angel wing (colorable)" + desc = "" + icon = 'icons/mob/vore/wings_yw.dmi' + icon_state = "cyber_angel" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +//Tails +/datum/sprite_accessory/tail/tripplekitsune_colorable_yw + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Kitsune 3 tails - colorable" + desc = "" + icon_state = "triplekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "triplekitsune_tips" + +/datum/sprite_accessory/tail/lizard_tail_smooth + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Lizard Tail (Smooth)" + desc = "" + icon_state = "lizard_tail_smooth" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_dark_tiger + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Lizard Tail (Dark Tiger)" + desc = "" + icon_state = "lizard_tail_dark_tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_light_tiger + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Lizard Tail (Light Tiger)" + desc = "" + icon_state = "lizard_tail_light_tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_spiked + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Lizard Tail (Spiked)" + desc = "" + icon_state = "lizard_tail_spiked" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/wolf_tail + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Wolf Tail" + desc = "" + icon_state = "wolf_tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/ninekitsune_colorable_yw + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Kitsune 9 tails - colorable" + desc = "" + icon_state = "ninekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "ninekitsune-tips" + +/datum/sprite_accessory/tail/vulpkanin_alt_color + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Vulpkanin alt" + desc = "" + icon_state = "vulpkanin_alt_color" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulpkanin_alt_color_tips" + ani_state = "vulpkanin_alt_color_w" + extra_overlay_w = "vulpkanin_alt_color_tips_w" + +/datum/sprite_accessory/tail/raccoon_tail + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Raccoon gray tail" + desc = "" + icon_state = "raccoon_tail" + do_colouration = 0 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/striped_tail + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Striped tail, colorable" + desc = "" + icon_state = "stripedtail_colorable" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "stripedtail_colorable_w" + +/datum/sprite_accessory/tail/tesh_pattern_fem + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Female teshari tail(Pattern)" + desc = "" + icon_state = "seromitail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_fem_tail" + +/datum/sprite_accessory/tail/tesh_pattern_male + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Male teshari tail(Pattern)" + desc = "" + icon_state = "seromitail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_male_tail" + +/datum/sprite_accessory/tail/tesh_pattern_fem_alt + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Female teshari tail(Pattern, Alt.)" + desc = "" + icon_state = "teshari_fluffytail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_fem_alt" + + +/datum/sprite_accessory/tail/tesh_pattern_male_alt + icon = 'icons/mob/vore/tails_yw.dmi' + name = "Male teshari tail(Pattern, Alt.)" + desc = "" + icon_state = "teshari_fluffytail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_male_alt" + +/datum/sprite_accessory/tail/jeanne_nanovulp + icon = 'icons/mob/human_races/cyberlimbs/dopiotl/jeanne_nanovulp.dmi' + name = "Jeanne kitsune nine tails" + desc = "" + icon_state = "tails" + do_colouration = 0 + ckeys_allowed = list("dopiotl") + +//ears + +/datum/sprite_accessory/ears/large_dragon + icon = 'icons/mob/vore/ears_yw.dmi' + name = "Very large dragon horns" + desc = "" + icon_state = "big_liz" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/tesh_pattern_ear_male + icon = 'icons/mob/vore/ears_yw.dmi' + name = "Teshari ear ,pattern(Male)" + desc = "" + icon_state = "teshari" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + extra_overlay = "teshari_male_pattern" + +/datum/sprite_accessory/ears/tesh_pattern_ear_female + icon = 'icons/mob/vore/ears_yw.dmi' + name = "Teshari ear ,pattern(Female)" + desc = "" + icon_state = "teshari" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + extra_overlay = "teshari_female_pattern" + +/datum/sprite_accessory/ears/jeanne_nanovulp + icon = 'icons/mob/human_races/cyberlimbs/dopiotl/jeanne_nanovulp.dmi' + name = "Jeanne nanovulp ears" + desc = "" + icon_state = "ears" + do_colouration = 0 + ckeys_allowed = list("dopiotl") diff --git a/code/modules/vore/eating/vorepanel_ch.dm b/code/modules/vore/eating/vorepanel_ch.dm index 71c0f5621d..ae5fb5eb04 100644 --- a/code/modules/vore/eating/vorepanel_ch.dm +++ b/code/modules/vore/eating/vorepanel_ch.dm @@ -1,6 +1,6 @@ -//CHOMP - liquid bellies //These variables have been moved to belly_obj_ch.dm, keeping comments here for reference -/* -/datum/vore_look - var/show_liquids = FALSE - var/show_fullness_messages = FALSE -*/ +//CHOMP - liquid bellies //These variables have been moved to belly_obj_ch.dm, keeping comments here for reference +/* +/datum/vore_look + var/show_liquids = FALSE + var/show_fullness_messages = FALSE +*/ diff --git a/code/modules/vore/fluffstuff/custom_boxes_ch.dm b/code/modules/vore/fluffstuff/custom_boxes_ch.dm index a83c4b0f99..3d95ad8753 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_ch.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_ch.dm @@ -1,13 +1,13 @@ -//Kassc -/obj/item/weapon/storage/box/fluff/Kassc - name = "" - desc = "" - has_items = list( - /obj/item/clothing/accessory/medal/silver/valor) - -//Keith Winters -/obj/item/weapon/storage/box/fluff/Keith_Winters - name = "" - desc = "" - has_items = list( - /obj/item/clothing/accessory/medal/silver/valor) +//Kassc +/obj/item/weapon/storage/box/fluff/Kassc + name = "" + desc = "" + has_items = list( + /obj/item/clothing/accessory/medal/silver/valor) + +//Keith Winters +/obj/item/weapon/storage/box/fluff/Keith_Winters + name = "" + desc = "" + has_items = list( + /obj/item/clothing/accessory/medal/silver/valor) diff --git a/code/modules/vore/fluffstuff/custom_clothes_ch.dm b/code/modules/vore/fluffstuff/custom_clothes_ch.dm index 2f3bbd97b5..607ea7f636 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_ch.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_ch.dm @@ -1,152 +1,152 @@ -/obj/item/clothing/under/sec_flight_suit - name = "flight suit" - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." - icon_state = "swatunder" - item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - rolled_sleeves = 0 - rolled_down = 0 - - - - -//Star Trek things. - -//TOS -/obj/item/clothing/under/rank/trek/sec - name = "Operations Uniform" - desc = "The uniform worn by operations officers of the mid 2260s. It comes with extra security padding, but you feel strangely vulnerable just seeing this..." - icon_state = "trek_engsec" - item_state = "trek_engsec" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 - -//TNG -/obj/item/clothing/under/rank/trek/sec/next - desc = "The uniform worn by operation officers. This one's from the mid 2360s. This one has some additional security padding." - icon_state = "trek_next_engsec" - item_state = "trek_next_engsec" - -//ENT -/obj/item/clothing/under/rank/trek/sec/ent - desc = "The uniform worn by operations officers of the 2140s. This one has some additional security padding." - icon_state = "trek_ent_engsec" - item_state = "trek_ent_engsec" - -//VOY -/obj/item/clothing/under/rank/trek/sec/voy - desc = "The uniform worn by operations officers of the 2370s. This one has some additional security padding." - icon_state = "trek_voy_engsec" - item_state = "trek_voy_engsec" - -//DS9 -/obj/item/clothing/under/rank/trek/sec/ds9 - desc = "The uniform worn by operations officers of the 2380s. This one has some additional security padding." - icon_state = "trek_engsec" - item_state = "trek_ds9_engsec" - - -//Nullsuits (Zero Suits) -/obj/item/clothing/under/rank/nullsuit //The base suit. Don't use this or spawn this one. - name = "actually null nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination. Actually none at all since it's invisible and should not be spawned!" - sensor_mode = 3 - icon = 'icons/vore/nullsuits.dmi' - icon_override = 'icons/vore/nullsuits.dmi' - icon_state = "" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/nullsuit/civ - name = "civilian nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination." - sensor_mode = 3 - icon = 'icons/vore/nullsuits.dmi' - icon_override = 'icons/vore/nullsuits.dmi' - icon_state = "nullsuit_civ" - item_state = "nullsuit_civ" - worn_state = "nullsuit_civ" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/nullsuit/cmd //Command version - name = "command nullsuit" - desc = "" - icon_state = "nullsuit_cmd" - item_state = "nullsuit_cmd" - worn_state = "nullsuit_cmd" - -/obj/item/clothing/under/rank/nullsuit/sec //Security version - name = "security nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of padding." - icon_state = "nullsuit_sec" - item_state = "nullsuit_sec" - worn_state = "nullsuit_sec" - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/nullsuit/sec/hos //HoS version - name = "head of security nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Head of Security. This particular variant has a tiny bit more padding." - icon_state = "nullsuit_hos" - item_state = "nullsuit_hos" - worn_state = "nullsuit_hos" - -/obj/item/clothing/under/rank/nullsuit/med //Medical version - name = "medical nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of bio resistance." - icon_state = "nullsuit_med" - item_state = "nullsuit_med" - worn_state = "nullsuit_med" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/nullsuit/med/cmo //Chief Medical Officer version - name = "Chief Medical Officer nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Chief Medical Officer. This particular variant has a tiny bit of bio resistance." - icon_state = "nullsuit_cmo" - item_state = "nullsuit_cmo" - worn_state = "nullsuit_cmo" - -/obj/item/clothing/under/rank/nullsuit/eng //Engineering version - name = "engineering nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of radiation resistance." - icon_state = "nullsuit_eng" - item_state = "nullsuit_eng" - worn_state = "nullsuit_eng" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10) - -/obj/item/clothing/under/rank/nullsuit/eng/ce //Chief Engineer version - name = "chief engineer nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Chief Engineer. This particular variant has a tiny bit of radiation resistance." - icon_state = "nullsuit_ce" - item_state = "nullsuit_ce" - worn_state = "nullsuit_ce" - -/obj/item/clothing/under/rank/nullsuit/sci //Science version - name = "science nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of explosion resistance." - icon_state = "nullsuit_sci" - item_state = "nullsuit_sci" - worn_state = "nullsuit_sci" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/nullsuit/sci/rd //Research Director version - name = "research director nullsuit" - desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the research director. This particular variant has a tiny bit of explosion resistance." - icon_state = "nullsuit_rd" - item_state = "nullsuit_rd" - worn_state = "nullsuit_rd" - -/obj/item/clothing/under/rank/nullsuit/cargo //Cargo - name = "cargo nullsuit" - desc = "" - icon_state = "nullsuit_cargo" - item_state = "nullsuit_cargo" - worn_state = "nullsuit_cargo" - -//VR Suit -/obj/item/clothing/under/vrsuit //Pathname of this particular object in the game. - name = "VR Suit" //The name of the suit when examined - desc = "An ancient suit used by studio companies long ago to make their virtual reality bones work better." //The description of the suit when examined - sensor_mode = 3 //Sensor mode which means that by default when someone spawns they will have tracking sensors on - icon = 'icons/inventory/uniform/item_ch.dmi' //The icon of the suit when shown in the player's HUD - icon_override = 'icons/inventory/uniform/mob_ch.dmi' //The icon of the suit worn by the character's sprite - icon_state = "vrsuit" //The name of the suit within the .dmi file +/obj/item/clothing/under/sec_flight_suit + name = "flight suit" + desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." + icon_state = "swatunder" + item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green") + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + rolled_sleeves = 0 + rolled_down = 0 + + + + +//Star Trek things. + +//TOS +/obj/item/clothing/under/rank/trek/sec + name = "Operations Uniform" + desc = "The uniform worn by operations officers of the mid 2260s. It comes with extra security padding, but you feel strangely vulnerable just seeing this..." + icon_state = "trek_engsec" + item_state = "trek_engsec" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +//TNG +/obj/item/clothing/under/rank/trek/sec/next + desc = "The uniform worn by operation officers. This one's from the mid 2360s. This one has some additional security padding." + icon_state = "trek_next_engsec" + item_state = "trek_next_engsec" + +//ENT +/obj/item/clothing/under/rank/trek/sec/ent + desc = "The uniform worn by operations officers of the 2140s. This one has some additional security padding." + icon_state = "trek_ent_engsec" + item_state = "trek_ent_engsec" + +//VOY +/obj/item/clothing/under/rank/trek/sec/voy + desc = "The uniform worn by operations officers of the 2370s. This one has some additional security padding." + icon_state = "trek_voy_engsec" + item_state = "trek_voy_engsec" + +//DS9 +/obj/item/clothing/under/rank/trek/sec/ds9 + desc = "The uniform worn by operations officers of the 2380s. This one has some additional security padding." + icon_state = "trek_engsec" + item_state = "trek_ds9_engsec" + + +//Nullsuits (Zero Suits) +/obj/item/clothing/under/rank/nullsuit //The base suit. Don't use this or spawn this one. + name = "actually null nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination. Actually none at all since it's invisible and should not be spawned!" + sensor_mode = 3 + icon = 'icons/vore/nullsuits.dmi' + icon_override = 'icons/vore/nullsuits.dmi' + icon_state = "" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/nullsuit/civ + name = "civilian nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination." + sensor_mode = 3 + icon = 'icons/vore/nullsuits.dmi' + icon_override = 'icons/vore/nullsuits.dmi' + icon_state = "nullsuit_civ" + item_state = "nullsuit_civ" + worn_state = "nullsuit_civ" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/nullsuit/cmd //Command version + name = "command nullsuit" + desc = "" + icon_state = "nullsuit_cmd" + item_state = "nullsuit_cmd" + worn_state = "nullsuit_cmd" + +/obj/item/clothing/under/rank/nullsuit/sec //Security version + name = "security nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of padding." + icon_state = "nullsuit_sec" + item_state = "nullsuit_sec" + worn_state = "nullsuit_sec" + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/nullsuit/sec/hos //HoS version + name = "head of security nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Head of Security. This particular variant has a tiny bit more padding." + icon_state = "nullsuit_hos" + item_state = "nullsuit_hos" + worn_state = "nullsuit_hos" + +/obj/item/clothing/under/rank/nullsuit/med //Medical version + name = "medical nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of bio resistance." + icon_state = "nullsuit_med" + item_state = "nullsuit_med" + worn_state = "nullsuit_med" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/nullsuit/med/cmo //Chief Medical Officer version + name = "Chief Medical Officer nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Chief Medical Officer. This particular variant has a tiny bit of bio resistance." + icon_state = "nullsuit_cmo" + item_state = "nullsuit_cmo" + worn_state = "nullsuit_cmo" + +/obj/item/clothing/under/rank/nullsuit/eng //Engineering version + name = "engineering nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of radiation resistance." + icon_state = "nullsuit_eng" + item_state = "nullsuit_eng" + worn_state = "nullsuit_eng" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10) + +/obj/item/clothing/under/rank/nullsuit/eng/ce //Chief Engineer version + name = "chief engineer nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the Chief Engineer. This particular variant has a tiny bit of radiation resistance." + icon_state = "nullsuit_ce" + item_state = "nullsuit_ce" + worn_state = "nullsuit_ce" + +/obj/item/clothing/under/rank/nullsuit/sci //Science version + name = "science nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination. This particular variant has a tiny bit of explosion resistance." + icon_state = "nullsuit_sci" + item_state = "nullsuit_sci" + worn_state = "nullsuit_sci" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/nullsuit/sci/rd //Research Director version + name = "research director nullsuit" + desc = "A skin-tight bodysuit that leaves little to the imagination with colors to distinguish the research director. This particular variant has a tiny bit of explosion resistance." + icon_state = "nullsuit_rd" + item_state = "nullsuit_rd" + worn_state = "nullsuit_rd" + +/obj/item/clothing/under/rank/nullsuit/cargo //Cargo + name = "cargo nullsuit" + desc = "" + icon_state = "nullsuit_cargo" + item_state = "nullsuit_cargo" + worn_state = "nullsuit_cargo" + +//VR Suit +/obj/item/clothing/under/vrsuit //Pathname of this particular object in the game. + name = "VR Suit" //The name of the suit when examined + desc = "An ancient suit used by studio companies long ago to make their virtual reality bones work better." //The description of the suit when examined + sensor_mode = 3 //Sensor mode which means that by default when someone spawns they will have tracking sensors on + icon = 'icons/inventory/uniform/item_ch.dmi' //The icon of the suit when shown in the player's HUD + icon_override = 'icons/inventory/uniform/mob_ch.dmi' //The icon of the suit worn by the character's sprite + icon_state = "vrsuit" //The name of the suit within the .dmi file diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index 4bd8d65506..38d1be9966 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -1,467 +1,467 @@ -// future to do list for anyone who wants to try: -//Make building turf enterable for small people. -//Make buildings enterable then bustable from the inside. -//Tiny cars drivable only by small people, wheel chair code. -//Add details to planet foods as well as diversify options for cargo ordering. -//make water turfs stomp and apply to player sprites. - - -//turf items - -/turf/simulated/floor/smole - name = "toy floor" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "megablocksturf" - var/list/crossed_dirs = list() - -/turf/simulated/floor/smole/Entered(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.hovering || L.flying) // Flying things shouldn't make footprints. - if(L.flying) - L.adjust_nutrition(-0.5) - return ..() - if(L.get_effective_size(FALSE) <= RESIZE_NORMAL) - return ..() - if(L.get_effective_size(FALSE) >= RESIZE_A_BIGNORMAL) - playsound(src, 'sound/effects/footstep/giantstep_gigga.ogg', 35, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - var/mdir = "[A.dir]" - crossed_dirs[mdir] = 1 - update_icon() - . = ..() - -/turf/simulated/floor/smole/update_icon() - ..() - for(var/d in crossed_dirs) - add_overlay(image(icon = 'icons/vore/smoleworld_vr.dmi', icon_state = "stomp", dir = text2num(d))) - -//Extra micro turfs -/turf/simulated/floor/smole/grass - name = "grass" - icon_state = "grass0" - initial_flooring = /decl/flooring/grass/outdoors - -/turf/simulated/floor/smole/desert - icon = 'icons/turf/desert.dmi' - icon_state = "desert" - initial_flooring = /decl/flooring/sand/desert - -/turf/simulated/floor/smole/megablocks - name = "block floor" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "megablocksturf" - -//Used to make smole objects be able to be built from menu - -/datum/material/smolebricks/generate_recipes() - recipes = list() - recipes += new/datum/stack_recipe("road straight", /obj/structure/smoletrack/roadS, 1, time = 5) - recipes += new/datum/stack_recipe("road threeway", /obj/structure/smoletrack/roadT, 1, time = 5) - recipes += new/datum/stack_recipe("road turn ", /obj/structure/smoletrack/roadturn, 1, time = 5) - recipes += new/datum/stack_recipe("road fourway", /obj/structure/smoletrack/roadF, 1, time = 5) - recipes += new/datum/stack_recipe("smole houses", /obj/structure/smolebuilding/houses, 2, time = 10) - recipes += new/datum/stack_recipe("smole business", /obj/structure/smolebuilding/business, 2, time = 10) - recipes += new/datum/stack_recipe("smole warehouses", /obj/structure/smolebuilding/warehouses, 2, time = 10) - recipes += new/datum/stack_recipe("smole museum", /obj/structure/smolebuilding/museum, 2, time = 10) - -/datum/material/smolebricks - name = "smolebricks" - stack_type = /obj/item/stack/material/smolebricks - icon_base = "solid" - icon_reinf = "reinf_over" - destruction_desc = "smashed" - sheet_singular_name = "bag" - sheet_plural_name = "bags" - -//the actual materials - -/obj/item/stack/material/smolebricks - name = "smolebricks" - desc = "A collection of tiny colored bricks ready to be built into whatever you want." - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolematerial" - drop_sound = 'sound/items/drop/smolematerial.ogg' - pickup_sound = 'sound/items/pickup/pillbottle.ogg' - default_type = "smolebricks" - w_class = ITEMSIZE_SMALL - -//smolebrick case to make for easy bricks. -/obj/item/weapon/storage/smolebrickcase - name = "smolebrick case" - desc = "You feel the power of imagination." - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolestorage" - throw_speed = 1 - throw_range = 4 - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_SMALL * 7 // most code copied from toolbox - use_sound = 'sound/items/storage/smolecase.ogg' - drop_sound = 'sound/items/drop/device.ogg' - pickup_sound = 'sound/items/pickup/device.ogg' - starts_with = list( /obj/item/stack/material/smolebricks, - /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, - /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, - /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks - ) - -//Track code -//defineing actions -/obj/structure/smoletrack - icon = 'icons/vore/smoleworld_vr.dmi' - color = "#ffffff" - density = FALSE - -/obj/structure/smoletrack/attack_hand(mob/user) - if(user.a_intent == I_DISARM) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - to_chat(user, "[src] was dismantaled into bricks.") - playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - var/turf/simulated/floor/F = get_turf(src) - if(istype(F)) - new /obj/item/stack/material/smolebricks(F) - qdel(src) - -//rotates piece -/obj/structure/smoletrack/verb/rotate_clockwise() - set name = "Rotate Road Clockwise" - set category = "Object" - set src in oview(1) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - src.set_dir(turn(src.dir, 270)) - -//color roads -/obj/structure/smoletrack/verb/colorpieces() - set name = "Use Color Pieces" - set category = "Object" - set src in oview(1) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - var/new_color = input(usr, "Please select color.", "Paint Color", color) as color|null - color = new_color - return - - -// probably redundant, allows for direct way to dismantal without knowing intents -/obj/structure/smoletrack/verb/menudismantal() - set name = "Take Road Apart" - set category = "Object" - set src in oview(1) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - var/turf/simulated/floor/F = get_turf(src) - if(istype(F)) - new /obj/item/stack/material/smolebricks(F) - qdel(src) - return - - -// Road pieces - -/obj/structure/smoletrack/roadS - name = "road straight piece" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "carstraight" - desc = "A long set of tiny road." - anchored = TRUE - -/obj/structure/smoletrack/roadT - name = "road threeway piece" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "carthreeway" - desc = "A tiny threeway road piece." - anchored = TRUE - -/obj/structure/smoletrack/roadturn - name = "road turn piece" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "carturn" - desc = "A tiny turn road piece." - anchored = TRUE - -/obj/structure/smoletrack/roadF - name = "road four-way piece" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "carfourway" - desc = "A four-way road piece." - anchored = TRUE - -//buildings code -//Defining building actions -/obj/structure/smolebuilding - icon = 'icons/vore/smoleworld_vr.dmi' - density = TRUE - anchored = TRUE - color = "#ffffff" - micro_target = TRUE //Now micros can enter and navigate these things!!! - var/health = 75 - var/damage - -//makes it so buildings can be dismaintaled or GodZilla style attacked -/obj/structure/smolebuilding/attack_hand(mob/user) - if(user.a_intent == I_DISARM) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - to_chat(user, "[src] was dismantaled into bricks.") - playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - if(!isnull(loc)) - new /obj/item/stack/material/smolebricks(loc) - new /obj/item/stack/material/smolebricks(loc) - qdel(src) - - else if (usr.a_intent == I_HURT) - - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - - take_damage() - playsound(src, 'sound/items/smolebuildinghit2.ogg', 50, 1) - user.do_attack_animation(src) - usr.visible_message("\The [usr] bangs against \the [src]!", - "You bang against \the [src]!", - "You hear a banging sound.") - else - usr.visible_message("[usr.name] knocks on the [src.name].", - "You knock on the [src.name].") - return - -//takes 3 normal attacks -/obj/structure/smolebuilding/take_damage() - damage = 25 - health = health - damage - - if(health <= 0) - dismantle() - else - return - return -//results of attacks will remove building and spawn in ruins. -/obj/structure/smolebuilding/proc/dismantle() - visible_message("\The [src] falls apart!") - playsound(src, 'sound/items/smolebuildingdestoryed.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - new /obj/structure/smoleruins(loc) - qdel(src) - return - -//checks for items and does the same as dismaintle but spawns material instead. -/obj/structure/smolebuilding/attackby(obj/item/weapon/W as obj, mob/user as mob) - dismantle() - return -//checks for projectile damage and does the same as dismaintle but spawns material instead. -/obj/structure/smolebuilding/bullet_act(var/obj/item/projectile/Proj) - displode() - return -//is the same as dismaintal but instead of ruins it just makes it all explode -/obj/structure/smolebuilding/proc/displode() - visible_message("\The [src] explodes into pieces!") - playsound(src, 'sound/items/smolebuildingdestoryedshort.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - new /obj/item/stack/material/smolebricks(loc) - new /obj/item/stack/material/smolebricks(loc) - qdel(src) - return - -//get material from ruins -/obj/structure/smoleruins/attack_hand(mob/user) - if(user.a_intent == I_DISARM) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - to_chat(user, "[src] was dismantaled into bricks.") - playsound(src, 'sound/items/smolelargeunbuild.ogg', 50, 1, volume_channel = VOLUME_CHANNEL_MASTER) - if(!isnull(loc)) - new /obj/item/stack/material/smolebricks(loc) - new /obj/item/stack/material/smolebricks(loc) - qdel(src) - -//Ruins go asplode same as buildings if attacked -/obj/structure/smoleruins/attackby(obj/item/weapon/W as obj, mob/user as mob) - displode() - return - -/obj/structure/smoleruins/bullet_act(var/obj/item/projectile/Proj) - displode() - return - -/obj/structure/smoleruins/proc/displode() - visible_message("\The [src] explodes into pieces!") - playsound(src, 'sound/items/smolebuildingdestoryedshort.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - new /obj/item/stack/material/smolebricks(loc) - new /obj/item/stack/material/smolebricks(loc) - qdel(src) - return - -//color buildings -/obj/structure/smolebuilding/verb/colorpieces() - set name = "Use Color Pieces" - set category = "Object" - set src in oview(1) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - var/new_color = input(usr, "Please select color.", "Paint Color", color) as color|null - color = new_color - return - -//probably a bit redundant but gives a more direct way to disassemble buildings without using intents -/obj/structure/smolebuilding/verb/menudismantal() - set name = "Take Building Apart" - set category = "Object" - set src in oview(1) - if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) - return - playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) - if(!isnull(loc)) - new /obj/item/stack/material/smolebricks(loc) - new /obj/item/stack/material/smolebricks(loc) - qdel(src) - return - -//buildings -/obj/structure/smoleruins - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "ruins" - density = FALSE - -/obj/structure/smolebuilding/houses - name = "smole houses" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolehouses" - color = "#ffffff" - -/obj/structure/smolebuilding/business - name = "smole business" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolebusiness" - color = "#ffffff" - -/obj/structure/smolebuilding/warehouses - name = "smole warehouses" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolewarehouses" - color = "#ffffff" - -/obj/structure/smolebuilding/museum - name = "smole museum" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "smolemuseum" - color = "#ffffff" -// -//CAR STUFF < WILL BE MESSED WITH IN A LATER UPDATE COMMENTED OUT FOR NOW -///obj/item/smolecar -// name = "toy car" -// desc = "A toy car ready to be snapped together and burn rubber!" -// icon = 'icons/vore/smoleworld_vr.dmi' -// icon_state = "smolecarA_folded" -// item_state = "smolecarA" -// unfolded_type = /obj/structure/bed/chair/wheelchair/smolecar -// -///obj/structure/smolecar -// name = "Toy Car" -// desc = "Lets burn rubber!" -// icon = 'icons/vore/smoleworld_vr.dmi' -// icon_state = "smolecarA" -// anchored = FALSE -// buckle_movable = 1 -// var/carry_type = /obj/item/smolecar -// -///obj/structure/bed/chair/wheelchair/smolecar/can_buckle_check(mob/living/M, forced = FALSE) -// . = ..() -// if(.) -// -// if(M.get_effective_size(TRUE) > RESIZE_TINY) -// to_chat(M, SPAN_WARNING("You are to big to fit in \the [src].")) - // . = FALSE -// -// -//snack planets, currently just plopped out will be organized later. -/obj/item/trash/candychunk - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_sugarchunk" - name = "chunk of candy" - desc = "A solid chunk of candy crumbs, looks like it could be messy." - -/obj/item/trash/Asteroidlarge - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_asteriodA" - name = "asteriod" - desc = "A solid chunk of candy crumb that looks like a asteriod." - -/obj/item/trash/Asteroidmulti - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_asteriodC" - name = "asteriod" - desc = "Several chunks of sugar crumbs that looks like asteriods." - -/obj/item/weapon/bikehorn/tinytether - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "tether_trash" - name = "tether" - desc = "Its a tiny bit of plastic in the shape of the tether. There seems to be a small button on top." - -/obj/item/weapon/bikehorn/tinytether/attack_self(mob/user as mob) - if(spam_flag == 0) - spam_flag = 1 - playsound(src, 'sound/items/tinytether.ogg', 30, 1, volume_channel = VOLUME_CHANNEL_MASTER) - src.add_fingerprint(user) - spawn(20) - spam_flag = 0 - return - -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon - name = "moon" - desc = "A firm solid mass of white powdery sugar in the shape of a moon!" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_moon" - bitesize = 1 - nutriment_amt = 2 - nutriment_desc = list("sugar" = 2) - drop_sound = 'sound/items/drop/basketball.ogg' - -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b - name = "Virgo 3B" - desc = "A sticky jelly jaw breaker in the shape of Virgo-3B, it even has a tiny tether!" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_Virgo3B" - bitesize = 3 - trash = /obj/item/weapon/bikehorn/tinytether - nutriment_amt = 2 - nutriment_desc = list("spicy" = 2, "tang" = 2) - drop_sound = 'sound/items/drop/basketball.ogg' - -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron - name = "phoron giant" - desc = "A spicy jaw breaker that seems to swirl in the light." - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_phoron" - bitesize = 3 - trash = /obj/item/trash/candychunk - nutriment_amt = 2 - nutriment_desc = list("spicy" = 2) - drop_sound = 'sound/items/drop/basketball.ogg' - -/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime - name = "Virgo Prime" - desc = "It's a orange jaw breaker in the shape of Virgo Prime!" - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_virgoprime" - bitesize = 3 - trash = /obj/item/trash/candychunk - nutriment_amt = 2 - nutriment_desc = list("salty" = 2) - drop_sound = 'sound/items/drop/basketball.ogg' - -/obj/item/weapon/storage/bagoplanets - name = "bag o' planets" - desc = "A cosmic bag of fist-sized candy planets." - icon = 'icons/vore/smoleworld_vr.dmi' - icon_state = "sp_storage" - w_class = ITEMSIZE_LARGE - max_w_class = ITEMSIZE_NORMAL - max_storage_space = ITEMSIZE_COST_SMALL * 7 // most code copied from toolbox - drop_sound = 'sound/items/drop/food.ogg' - pickup_sound = 'sound/items/pickup/food.ogg' - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron, - /obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b,/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon, - /obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime - ) +// future to do list for anyone who wants to try: +//Make building turf enterable for small people. +//Make buildings enterable then bustable from the inside. +//Tiny cars drivable only by small people, wheel chair code. +//Add details to planet foods as well as diversify options for cargo ordering. +//make water turfs stomp and apply to player sprites. + + +//turf items + +/turf/simulated/floor/smole + name = "toy floor" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "megablocksturf" + var/list/crossed_dirs = list() + +/turf/simulated/floor/smole/Entered(atom/A) + if(isliving(A)) + var/mob/living/L = A + if(L.hovering || L.flying) // Flying things shouldn't make footprints. + if(L.flying) + L.adjust_nutrition(-0.5) + return ..() + if(L.get_effective_size(FALSE) <= RESIZE_NORMAL) + return ..() + if(L.get_effective_size(FALSE) >= RESIZE_A_BIGNORMAL) + playsound(src, 'sound/effects/footstep/giantstep_gigga.ogg', 35, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + var/mdir = "[A.dir]" + crossed_dirs[mdir] = 1 + update_icon() + . = ..() + +/turf/simulated/floor/smole/update_icon() + ..() + for(var/d in crossed_dirs) + add_overlay(image(icon = 'icons/vore/smoleworld_vr.dmi', icon_state = "stomp", dir = text2num(d))) + +//Extra micro turfs +/turf/simulated/floor/smole/grass + name = "grass" + icon_state = "grass0" + initial_flooring = /decl/flooring/grass/outdoors + +/turf/simulated/floor/smole/desert + icon = 'icons/turf/desert.dmi' + icon_state = "desert" + initial_flooring = /decl/flooring/sand/desert + +/turf/simulated/floor/smole/megablocks + name = "block floor" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "megablocksturf" + +//Used to make smole objects be able to be built from menu + +/datum/material/smolebricks/generate_recipes() + recipes = list() + recipes += new/datum/stack_recipe("road straight", /obj/structure/smoletrack/roadS, 1, time = 5) + recipes += new/datum/stack_recipe("road threeway", /obj/structure/smoletrack/roadT, 1, time = 5) + recipes += new/datum/stack_recipe("road turn ", /obj/structure/smoletrack/roadturn, 1, time = 5) + recipes += new/datum/stack_recipe("road fourway", /obj/structure/smoletrack/roadF, 1, time = 5) + recipes += new/datum/stack_recipe("smole houses", /obj/structure/smolebuilding/houses, 2, time = 10) + recipes += new/datum/stack_recipe("smole business", /obj/structure/smolebuilding/business, 2, time = 10) + recipes += new/datum/stack_recipe("smole warehouses", /obj/structure/smolebuilding/warehouses, 2, time = 10) + recipes += new/datum/stack_recipe("smole museum", /obj/structure/smolebuilding/museum, 2, time = 10) + +/datum/material/smolebricks + name = "smolebricks" + stack_type = /obj/item/stack/material/smolebricks + icon_base = "solid" + icon_reinf = "reinf_over" + destruction_desc = "smashed" + sheet_singular_name = "bag" + sheet_plural_name = "bags" + +//the actual materials + +/obj/item/stack/material/smolebricks + name = "smolebricks" + desc = "A collection of tiny colored bricks ready to be built into whatever you want." + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolematerial" + drop_sound = 'sound/items/drop/smolematerial.ogg' + pickup_sound = 'sound/items/pickup/pillbottle.ogg' + default_type = "smolebricks" + w_class = ITEMSIZE_SMALL + +//smolebrick case to make for easy bricks. +/obj/item/weapon/storage/smolebrickcase + name = "smolebrick case" + desc = "You feel the power of imagination." + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolestorage" + throw_speed = 1 + throw_range = 4 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_SMALL * 7 // most code copied from toolbox + use_sound = 'sound/items/storage/smolecase.ogg' + drop_sound = 'sound/items/drop/device.ogg' + pickup_sound = 'sound/items/pickup/device.ogg' + starts_with = list( /obj/item/stack/material/smolebricks, + /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, + /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, + /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks, /obj/item/stack/material/smolebricks + ) + +//Track code +//defineing actions +/obj/structure/smoletrack + icon = 'icons/vore/smoleworld_vr.dmi' + color = "#ffffff" + density = FALSE + +/obj/structure/smoletrack/attack_hand(mob/user) + if(user.a_intent == I_DISARM) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + to_chat(user, "[src] was dismantaled into bricks.") + playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + var/turf/simulated/floor/F = get_turf(src) + if(istype(F)) + new /obj/item/stack/material/smolebricks(F) + qdel(src) + +//rotates piece +/obj/structure/smoletrack/verb/rotate_clockwise() + set name = "Rotate Road Clockwise" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + src.set_dir(turn(src.dir, 270)) + +//color roads +/obj/structure/smoletrack/verb/colorpieces() + set name = "Use Color Pieces" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + var/new_color = input(usr, "Please select color.", "Paint Color", color) as color|null + color = new_color + return + + +// probably redundant, allows for direct way to dismantal without knowing intents +/obj/structure/smoletrack/verb/menudismantal() + set name = "Take Road Apart" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + var/turf/simulated/floor/F = get_turf(src) + if(istype(F)) + new /obj/item/stack/material/smolebricks(F) + qdel(src) + return + + +// Road pieces + +/obj/structure/smoletrack/roadS + name = "road straight piece" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "carstraight" + desc = "A long set of tiny road." + anchored = TRUE + +/obj/structure/smoletrack/roadT + name = "road threeway piece" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "carthreeway" + desc = "A tiny threeway road piece." + anchored = TRUE + +/obj/structure/smoletrack/roadturn + name = "road turn piece" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "carturn" + desc = "A tiny turn road piece." + anchored = TRUE + +/obj/structure/smoletrack/roadF + name = "road four-way piece" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "carfourway" + desc = "A four-way road piece." + anchored = TRUE + +//buildings code +//Defining building actions +/obj/structure/smolebuilding + icon = 'icons/vore/smoleworld_vr.dmi' + density = TRUE + anchored = TRUE + color = "#ffffff" + micro_target = TRUE //Now micros can enter and navigate these things!!! + var/health = 75 + var/damage + +//makes it so buildings can be dismaintaled or GodZilla style attacked +/obj/structure/smolebuilding/attack_hand(mob/user) + if(user.a_intent == I_DISARM) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + to_chat(user, "[src] was dismantaled into bricks.") + playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + if(!isnull(loc)) + new /obj/item/stack/material/smolebricks(loc) + new /obj/item/stack/material/smolebricks(loc) + qdel(src) + + else if (usr.a_intent == I_HURT) + + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + + take_damage() + playsound(src, 'sound/items/smolebuildinghit2.ogg', 50, 1) + user.do_attack_animation(src) + usr.visible_message("\The [usr] bangs against \the [src]!", + "You bang against \the [src]!", + "You hear a banging sound.") + else + usr.visible_message("[usr.name] knocks on the [src.name].", + "You knock on the [src.name].") + return + +//takes 3 normal attacks +/obj/structure/smolebuilding/take_damage() + damage = 25 + health = health - damage + + if(health <= 0) + dismantle() + else + return + return +//results of attacks will remove building and spawn in ruins. +/obj/structure/smolebuilding/proc/dismantle() + visible_message("\The [src] falls apart!") + playsound(src, 'sound/items/smolebuildingdestoryed.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + new /obj/structure/smoleruins(loc) + qdel(src) + return + +//checks for items and does the same as dismaintle but spawns material instead. +/obj/structure/smolebuilding/attackby(obj/item/weapon/W as obj, mob/user as mob) + dismantle() + return +//checks for projectile damage and does the same as dismaintle but spawns material instead. +/obj/structure/smolebuilding/bullet_act(var/obj/item/projectile/Proj) + displode() + return +//is the same as dismaintal but instead of ruins it just makes it all explode +/obj/structure/smolebuilding/proc/displode() + visible_message("\The [src] explodes into pieces!") + playsound(src, 'sound/items/smolebuildingdestoryedshort.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + new /obj/item/stack/material/smolebricks(loc) + new /obj/item/stack/material/smolebricks(loc) + qdel(src) + return + +//get material from ruins +/obj/structure/smoleruins/attack_hand(mob/user) + if(user.a_intent == I_DISARM) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + to_chat(user, "[src] was dismantaled into bricks.") + playsound(src, 'sound/items/smolelargeunbuild.ogg', 50, 1, volume_channel = VOLUME_CHANNEL_MASTER) + if(!isnull(loc)) + new /obj/item/stack/material/smolebricks(loc) + new /obj/item/stack/material/smolebricks(loc) + qdel(src) + +//Ruins go asplode same as buildings if attacked +/obj/structure/smoleruins/attackby(obj/item/weapon/W as obj, mob/user as mob) + displode() + return + +/obj/structure/smoleruins/bullet_act(var/obj/item/projectile/Proj) + displode() + return + +/obj/structure/smoleruins/proc/displode() + visible_message("\The [src] explodes into pieces!") + playsound(src, 'sound/items/smolebuildingdestoryedshort.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + new /obj/item/stack/material/smolebricks(loc) + new /obj/item/stack/material/smolebricks(loc) + qdel(src) + return + +//color buildings +/obj/structure/smolebuilding/verb/colorpieces() + set name = "Use Color Pieces" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + var/new_color = input(usr, "Please select color.", "Paint Color", color) as color|null + color = new_color + return + +//probably a bit redundant but gives a more direct way to disassemble buildings without using intents +/obj/structure/smolebuilding/verb/menudismantal() + set name = "Take Building Apart" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !config.ghost_interaction)) + return + playsound(src, 'sound/items/smolesmallbuild.ogg', 50, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) + if(!isnull(loc)) + new /obj/item/stack/material/smolebricks(loc) + new /obj/item/stack/material/smolebricks(loc) + qdel(src) + return + +//buildings +/obj/structure/smoleruins + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "ruins" + density = FALSE + +/obj/structure/smolebuilding/houses + name = "smole houses" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolehouses" + color = "#ffffff" + +/obj/structure/smolebuilding/business + name = "smole business" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolebusiness" + color = "#ffffff" + +/obj/structure/smolebuilding/warehouses + name = "smole warehouses" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolewarehouses" + color = "#ffffff" + +/obj/structure/smolebuilding/museum + name = "smole museum" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "smolemuseum" + color = "#ffffff" +// +//CAR STUFF < WILL BE MESSED WITH IN A LATER UPDATE COMMENTED OUT FOR NOW +///obj/item/smolecar +// name = "toy car" +// desc = "A toy car ready to be snapped together and burn rubber!" +// icon = 'icons/vore/smoleworld_vr.dmi' +// icon_state = "smolecarA_folded" +// item_state = "smolecarA" +// unfolded_type = /obj/structure/bed/chair/wheelchair/smolecar +// +///obj/structure/smolecar +// name = "Toy Car" +// desc = "Lets burn rubber!" +// icon = 'icons/vore/smoleworld_vr.dmi' +// icon_state = "smolecarA" +// anchored = FALSE +// buckle_movable = 1 +// var/carry_type = /obj/item/smolecar +// +///obj/structure/bed/chair/wheelchair/smolecar/can_buckle_check(mob/living/M, forced = FALSE) +// . = ..() +// if(.) +// +// if(M.get_effective_size(TRUE) > RESIZE_TINY) +// to_chat(M, SPAN_WARNING("You are to big to fit in \the [src].")) + // . = FALSE +// +// +//snack planets, currently just plopped out will be organized later. +/obj/item/trash/candychunk + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_sugarchunk" + name = "chunk of candy" + desc = "A solid chunk of candy crumbs, looks like it could be messy." + +/obj/item/trash/Asteroidlarge + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_asteriodA" + name = "asteriod" + desc = "A solid chunk of candy crumb that looks like a asteriod." + +/obj/item/trash/Asteroidmulti + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_asteriodC" + name = "asteriod" + desc = "Several chunks of sugar crumbs that looks like asteriods." + +/obj/item/weapon/bikehorn/tinytether + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "tether_trash" + name = "tether" + desc = "Its a tiny bit of plastic in the shape of the tether. There seems to be a small button on top." + +/obj/item/weapon/bikehorn/tinytether/attack_self(mob/user as mob) + if(spam_flag == 0) + spam_flag = 1 + playsound(src, 'sound/items/tinytether.ogg', 30, 1, volume_channel = VOLUME_CHANNEL_MASTER) + src.add_fingerprint(user) + spawn(20) + spam_flag = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon + name = "moon" + desc = "A firm solid mass of white powdery sugar in the shape of a moon!" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_moon" + bitesize = 1 + nutriment_amt = 2 + nutriment_desc = list("sugar" = 2) + drop_sound = 'sound/items/drop/basketball.ogg' + +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b + name = "Virgo 3B" + desc = "A sticky jelly jaw breaker in the shape of Virgo-3B, it even has a tiny tether!" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_Virgo3B" + bitesize = 3 + trash = /obj/item/weapon/bikehorn/tinytether + nutriment_amt = 2 + nutriment_desc = list("spicy" = 2, "tang" = 2) + drop_sound = 'sound/items/drop/basketball.ogg' + +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron + name = "phoron giant" + desc = "A spicy jaw breaker that seems to swirl in the light." + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_phoron" + bitesize = 3 + trash = /obj/item/trash/candychunk + nutriment_amt = 2 + nutriment_desc = list("spicy" = 2) + drop_sound = 'sound/items/drop/basketball.ogg' + +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime + name = "Virgo Prime" + desc = "It's a orange jaw breaker in the shape of Virgo Prime!" + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_virgoprime" + bitesize = 3 + trash = /obj/item/trash/candychunk + nutriment_amt = 2 + nutriment_desc = list("salty" = 2) + drop_sound = 'sound/items/drop/basketball.ogg' + +/obj/item/weapon/storage/bagoplanets + name = "bag o' planets" + desc = "A cosmic bag of fist-sized candy planets." + icon = 'icons/vore/smoleworld_vr.dmi' + icon_state = "sp_storage" + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_SMALL * 7 // most code copied from toolbox + drop_sound = 'sound/items/drop/food.ogg' + pickup_sound = 'sound/items/pickup/food.ogg' + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron, + /obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b,/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon, + /obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime + ) diff --git a/code/modules/xgm/xgm_gas_data.dm b/code/modules/xgm/xgm_gas_data.dm index 429277b2dc..3e4c9bb691 100644 --- a/code/modules/xgm/xgm_gas_data.dm +++ b/code/modules/xgm/xgm_gas_data.dm @@ -1,56 +1,56 @@ -/var/datum/xgm_gas_data/gas_data - -/datum/xgm_gas_data - //Simple list of all the gas IDs. - var/list/gases = list() - //The friendly, human-readable name for the gas. - var/list/name = list() - //Specific heat of the gas. Used for calculating heat capacity. - var/list/specific_heat = list() - //Molar mass of the gas. Used for calculating specific entropy. - var/list/molar_mass = list() - //Tile overlays. /images, created from references to 'icons/effects/tile_effects.dmi' - var/list/tile_overlay = list() - //Overlay limits. There must be at least this many moles for the overlay to appear. - var/list/overlay_limit = list() - //Flags. - var/list/flags = list() - -/decl/xgm_gas - var/id = "" - var/name = "Unnamed Gas" - var/specific_heat = 20 // J/(mol*K) - var/molar_mass = 0.032 // kg/mol - - var/tile_overlay = null - var/overlay_limit = null - - var/flags = 0 - -/hook/startup/proc/generateGasData() - gas_data = new - for(var/p in subtypesof(/decl/xgm_gas)) - var/decl/xgm_gas/gas = new p //avoid initial() because of potential New() actions - - if(gas.id in gas_data.gases) - error("Duplicate gas id `[gas.id]` in `[p]`") - - gas_data.gases += gas.id - gas_data.name[gas.id] = gas.name - gas_data.specific_heat[gas.id] = gas.specific_heat - gas_data.molar_mass[gas.id] = gas.molar_mass - if(gas.tile_overlay) - gas_data.tile_overlay[gas.id] = new /atom/movable/gas_visuals(null, gas.tile_overlay) - if(gas.overlay_limit) - gas_data.overlay_limit[gas.id] = gas.overlay_limit - gas_data.flags[gas.id] = gas.flags - - return 1 - -/atom/movable/gas_visuals - icon = 'icons/effects/tile_effects.dmi' - mouse_opacity = 0 - plane = ABOVE_MOB_PLANE -/atom/movable/gas_visuals/New(newloc, ico) - ..() +/var/datum/xgm_gas_data/gas_data + +/datum/xgm_gas_data + //Simple list of all the gas IDs. + var/list/gases = list() + //The friendly, human-readable name for the gas. + var/list/name = list() + //Specific heat of the gas. Used for calculating heat capacity. + var/list/specific_heat = list() + //Molar mass of the gas. Used for calculating specific entropy. + var/list/molar_mass = list() + //Tile overlays. /images, created from references to 'icons/effects/tile_effects.dmi' + var/list/tile_overlay = list() + //Overlay limits. There must be at least this many moles for the overlay to appear. + var/list/overlay_limit = list() + //Flags. + var/list/flags = list() + +/decl/xgm_gas + var/id = "" + var/name = "Unnamed Gas" + var/specific_heat = 20 // J/(mol*K) + var/molar_mass = 0.032 // kg/mol + + var/tile_overlay = null + var/overlay_limit = null + + var/flags = 0 + +/hook/startup/proc/generateGasData() + gas_data = new + for(var/p in subtypesof(/decl/xgm_gas)) + var/decl/xgm_gas/gas = new p //avoid initial() because of potential New() actions + + if(gas.id in gas_data.gases) + error("Duplicate gas id `[gas.id]` in `[p]`") + + gas_data.gases += gas.id + gas_data.name[gas.id] = gas.name + gas_data.specific_heat[gas.id] = gas.specific_heat + gas_data.molar_mass[gas.id] = gas.molar_mass + if(gas.tile_overlay) + gas_data.tile_overlay[gas.id] = new /atom/movable/gas_visuals(null, gas.tile_overlay) + if(gas.overlay_limit) + gas_data.overlay_limit[gas.id] = gas.overlay_limit + gas_data.flags[gas.id] = gas.flags + + return 1 + +/atom/movable/gas_visuals + icon = 'icons/effects/tile_effects.dmi' + mouse_opacity = 0 + plane = ABOVE_MOB_PLANE +/atom/movable/gas_visuals/New(newloc, ico) + ..() icon_state = ico \ No newline at end of file diff --git a/code/names.dm b/code/names.dm index ab101d76c6..ab35dbb0e7 100644 --- a/code/names.dm +++ b/code/names.dm @@ -1,16 +1,16 @@ -var/list/ai_names = file2list("config/names/ai.txt") -var/list/wizard_first = file2list("config/names/wizardfirst.txt") -var/list/wizard_second = file2list("config/names/wizardsecond.txt") -var/list/ninja_titles = file2list("config/names/ninjatitle.txt") -var/list/ninja_names = file2list("config/names/ninjaname.txt") -var/list/commando_names = file2list("config/names/death_commando.txt") -var/list/first_names_male = file2list("config/names/first_male.txt") -var/list/first_names_female = file2list("config/names/first_female.txt") -var/list/last_names = file2list("config/names/last.txt") -var/list/clown_names = file2list("config/names/clown.txt") - - -var/list/verbs = file2list("config/names/verbs.txt") -var/list/adjectives = file2list("config/names/adjectives.txt") -//loaded on startup because of " +var/list/ai_names = file2list("config/names/ai.txt") +var/list/wizard_first = file2list("config/names/wizardfirst.txt") +var/list/wizard_second = file2list("config/names/wizardsecond.txt") +var/list/ninja_titles = file2list("config/names/ninjatitle.txt") +var/list/ninja_names = file2list("config/names/ninjaname.txt") +var/list/commando_names = file2list("config/names/death_commando.txt") +var/list/first_names_male = file2list("config/names/first_male.txt") +var/list/first_names_female = file2list("config/names/first_female.txt") +var/list/last_names = file2list("config/names/last.txt") +var/list/clown_names = file2list("config/names/clown.txt") + + +var/list/verbs = file2list("config/names/verbs.txt") +var/list/adjectives = file2list("config/names/adjectives.txt") +//loaded on startup because of " //would include in rsc if ' was used \ No newline at end of file diff --git a/code/unit_tests/sqlite_tests.dm b/code/unit_tests/sqlite_tests.dm index 8263f58064..e8c19c1a7f 100644 --- a/code/unit_tests/sqlite_tests.dm +++ b/code/unit_tests/sqlite_tests.dm @@ -1,69 +1,69 @@ -/datum/unit_test/sqlite - name = "SQLite template" // Template has to be in the name or this test will be ran, and fail. - var/database/stub_sqlite_db = null - -/datum/unit_test/sqlite/proc/setup_stub_db() - fdel("data/sqlite/testing_[name].db") // In case any remain from a previous local test, so we can have a clean new database. - stub_sqlite_db = new("data/sqlite/testing_[name].db") // Unfortunately, byond doesn't like having working sqlite stuff w/o a file existing. - SSsqlite.init_schema(stub_sqlite_db) - -// Feedback table tests. -/datum/unit_test/sqlite/feedback/insert - name = "SQLITE FEEDBACK: Insert and Retrieve Data" - -/datum/unit_test/sqlite/feedback/insert/start_test() - // Arrange. - setup_stub_db() - var/test_author = "alice" - var/test_topic = "Test" - var/test_content = "Bob is lame." - - // Act. - SSsqlite.insert_feedback(author = test_author, topic = test_topic, content = test_content, sqlite_object = stub_sqlite_db) - var/database/query/Q = new("SELECT * FROM [SQLITE_TABLE_FEEDBACK]") - Q.Execute(stub_sqlite_db) - SSsqlite.sqlite_check_for_errors(Q, "Sqlite Insert Unit Test") - Q.NextRow() - - // Assert. - var/list/row_data = Q.GetRowData() - if(row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR] == test_author && row_data[SQLITE_FEEDBACK_COLUMN_TOPIC] == test_topic && row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] == test_content) - pass("No issues found.") - else - fail("Data insert and loading failed to have matching information.") - return TRUE - - -/datum/unit_test/sqlite/feedback/cooldown - name = "SQLITE FEEDBACK: Cooldown" - -/datum/unit_test/sqlite/feedback/cooldown/start_test() - // Arrange. - setup_stub_db() - var/days_to_wait = 1 - var/issues = 0 - - // Act. - SSsqlite.insert_feedback(author = "Alice", topic = "Testing", content = "This is a test.", sqlite_object = stub_sqlite_db) - - var/alice_cooldown_block = SSsqlite.get_feedback_cooldown("Alice", days_to_wait, stub_sqlite_db) - var/bob_cooldown = SSsqlite.get_feedback_cooldown("Bob", days_to_wait, stub_sqlite_db) - days_to_wait = 0 - var/alice_cooldown_allow = SSsqlite.get_feedback_cooldown("Alice", days_to_wait, stub_sqlite_db) - - // Assert. - if(alice_cooldown_block <= 0) - issues++ - log_unit_test("User 'Alice' did not receive a cooldown, when they were supposed to.") - if(bob_cooldown > 0) - issues++ - log_unit_test("User 'Bob' did receive a cooldown, when they did not do anything.") - if(alice_cooldown_allow > 0) - issues++ - log_unit_test("User 'Alice' did receive a cooldown, when no cooldown is supposed to be enforced.") - - if(issues) - fail("[issues] issues were found.") - else - pass("No issues found.") - return TRUE +/datum/unit_test/sqlite + name = "SQLite template" // Template has to be in the name or this test will be ran, and fail. + var/database/stub_sqlite_db = null + +/datum/unit_test/sqlite/proc/setup_stub_db() + fdel("data/sqlite/testing_[name].db") // In case any remain from a previous local test, so we can have a clean new database. + stub_sqlite_db = new("data/sqlite/testing_[name].db") // Unfortunately, byond doesn't like having working sqlite stuff w/o a file existing. + SSsqlite.init_schema(stub_sqlite_db) + +// Feedback table tests. +/datum/unit_test/sqlite/feedback/insert + name = "SQLITE FEEDBACK: Insert and Retrieve Data" + +/datum/unit_test/sqlite/feedback/insert/start_test() + // Arrange. + setup_stub_db() + var/test_author = "alice" + var/test_topic = "Test" + var/test_content = "Bob is lame." + + // Act. + SSsqlite.insert_feedback(author = test_author, topic = test_topic, content = test_content, sqlite_object = stub_sqlite_db) + var/database/query/Q = new("SELECT * FROM [SQLITE_TABLE_FEEDBACK]") + Q.Execute(stub_sqlite_db) + SSsqlite.sqlite_check_for_errors(Q, "Sqlite Insert Unit Test") + Q.NextRow() + + // Assert. + var/list/row_data = Q.GetRowData() + if(row_data[SQLITE_FEEDBACK_COLUMN_AUTHOR] == test_author && row_data[SQLITE_FEEDBACK_COLUMN_TOPIC] == test_topic && row_data[SQLITE_FEEDBACK_COLUMN_CONTENT] == test_content) + pass("No issues found.") + else + fail("Data insert and loading failed to have matching information.") + return TRUE + + +/datum/unit_test/sqlite/feedback/cooldown + name = "SQLITE FEEDBACK: Cooldown" + +/datum/unit_test/sqlite/feedback/cooldown/start_test() + // Arrange. + setup_stub_db() + var/days_to_wait = 1 + var/issues = 0 + + // Act. + SSsqlite.insert_feedback(author = "Alice", topic = "Testing", content = "This is a test.", sqlite_object = stub_sqlite_db) + + var/alice_cooldown_block = SSsqlite.get_feedback_cooldown("Alice", days_to_wait, stub_sqlite_db) + var/bob_cooldown = SSsqlite.get_feedback_cooldown("Bob", days_to_wait, stub_sqlite_db) + days_to_wait = 0 + var/alice_cooldown_allow = SSsqlite.get_feedback_cooldown("Alice", days_to_wait, stub_sqlite_db) + + // Assert. + if(alice_cooldown_block <= 0) + issues++ + log_unit_test("User 'Alice' did not receive a cooldown, when they were supposed to.") + if(bob_cooldown > 0) + issues++ + log_unit_test("User 'Bob' did receive a cooldown, when they did not do anything.") + if(alice_cooldown_allow > 0) + issues++ + log_unit_test("User 'Alice' did receive a cooldown, when no cooldown is supposed to be enforced.") + + if(issues) + fail("[issues] issues were found.") + else + pass("No issues found.") + return TRUE diff --git a/code/world.dm b/code/world.dm index 3162653ea4..039122ab11 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,25 +1,25 @@ -//This file is just for the necessary /world definition -//Try looking in /code/game/world.dm, where initialization order is defined - -/** - * # World - * - * Two possibilities exist: either we are alone in the Universe or we are not. Both are equally terrifying. ~ Arthur C. Clarke - * - * The byond world object stores some basic byond level config, and has a few hub specific procs for managing hub visiblity - */ -/world - mob = /mob/new_player - turf = /turf/space - area = /area/space - view = "15x15" - hub = "Exadv1.spacestation13" - //CHOMPEdit: Accidentally committed this to master instead of pull request. Adding comment to make a pull request. Also to note that I have changed the password so we won't appear on the HUB regardless of TGS3. - hub_password = "null" - name = "Space Station 13" - /*YW EDIT we want to be on the hub - name = "VOREStation" //VOREStation Edit - visibility = 0 //VOREStation Edit - */ - cache_lifespan = 7 - fps = 20 // If this isnt hard-defined, anything relying on this variable before world load will cry a lot +//This file is just for the necessary /world definition +//Try looking in /code/game/world.dm, where initialization order is defined + +/** + * # World + * + * Two possibilities exist: either we are alone in the Universe or we are not. Both are equally terrifying. ~ Arthur C. Clarke + * + * The byond world object stores some basic byond level config, and has a few hub specific procs for managing hub visiblity + */ +/world + mob = /mob/new_player + turf = /turf/space + area = /area/space + view = "15x15" + hub = "Exadv1.spacestation13" + //CHOMPEdit: Accidentally committed this to master instead of pull request. Adding comment to make a pull request. Also to note that I have changed the password so we won't appear on the HUB regardless of TGS3. + hub_password = "null" + name = "Space Station 13" + /*YW EDIT we want to be on the hub + name = "VOREStation" //VOREStation Edit + visibility = 0 //VOREStation Edit + */ + cache_lifespan = 7 + fps = 20 // If this isnt hard-defined, anything relying on this variable before world load will cry a lot diff --git a/config/custom_sprites.txt b/config/custom_sprites.txt index 18fd6b4b0f..dc5302cb7f 100644 --- a/config/custom_sprites.txt +++ b/config/custom_sprites.txt @@ -1,3 +1,3 @@ -ckey|state -lunarfleet|Clea-Nor -jademanique|B.A.U-Kingside +ckey|state +lunarfleet|Clea-Nor +jademanique|B.A.U-Kingside diff --git a/config/example/access levels.txt b/config/example/access levels.txt index 8068be153f..e6c0519069 100644 --- a/config/example/access levels.txt +++ b/config/example/access levels.txt @@ -1,79 +1,79 @@ -HOW TO CONVERT A MAP TO THE NEW (june 2008) ACCESS LEVEL SYSTEM -1. Open the .dmp file up in Notepad -2. Find all the "access = blahblah" attributes of doors. -3. Delete them. -4. Open the map up in Dream Maker. If you didn't get them all, it'll tell you so. -5. Assign the existing doors new access permissions using the method below. - -HOW TO MAKE A MAP USING THE NEW (june 2008) ACCESS LEVEL SYSTEM -1. Make a map as normal -2. Select a door that you want to not be accessible to everybody -3. Right click on it and edit its attributes -4. Make the "req_access_txt" attribute be a semicolon-separated list of the permissions required to open the doors -5. Repeat for all doors. - -For example, a brig door would have it be "2" while a door that requires you have toxins and teleporter access (for whatever reason) would have it be "9;20" - -Here is a list of the permissions and their numbers (this may be out of date, see code/game/access.dm for an updated version): - -access_security = 1 -access_brig = 2 -access_armory = 3 -access_forensics_lockers= 4 -access_medical = 5 -access_morgue = 6 -access_tox = 7 -access_tox_storage = 8 -access_genetics = 9 -access_engine = 10 -access_engine_equip= 11 -access_maint_tunnels = 12 -access_external_airlocks = 13 -access_emergency_storage = 14 -access_change_ids = 15 -access_ai_upload = 16 -access_teleporter = 17 -access_eva = 18 -access_heads = 19 -access_captain = 20 -access_all_personal_lockers = 21 -access_chapel_office = 22 -access_tech_storage = 23 -access_atmospherics = 24 -access_bar = 25 -access_janitor = 26 -access_crematorium = 27 -access_kitchen = 28 -access_robotics = 29 -access_rd = 30 -access_cargo = 31 -access_construction = 32 -access_chemistry = 33 -access_cargo_bot = 34 -access_hydroponics = 35 -access_manufacturing = 36 -access_library = 37 -access_lawyer = 38 -access_virology = 39 -access_cmo = 40 -access_qm = 41 -access_court = 42 -access_clown = 43 -access_mime = 44 -access_surgery = 45 -access_theatre = 46 -access_research = 47 -access_mining = 48 -access_mining_office = 49 //not in use -access_mailsorting = 50 -access_mint = 51 -access_mint_vault = 52 -access_heads_vault = 53 -access_mining_station = 54 -access_xenobiology = 55 -access_ce = 56 -access_hop = 57 -access_hos = 58 -access_RC_announce = 59 //Request console announcements -access_keycard_auth = 60 //Used for events which require at least two people to confirm them +HOW TO CONVERT A MAP TO THE NEW (june 2008) ACCESS LEVEL SYSTEM +1. Open the .dmp file up in Notepad +2. Find all the "access = blahblah" attributes of doors. +3. Delete them. +4. Open the map up in Dream Maker. If you didn't get them all, it'll tell you so. +5. Assign the existing doors new access permissions using the method below. + +HOW TO MAKE A MAP USING THE NEW (june 2008) ACCESS LEVEL SYSTEM +1. Make a map as normal +2. Select a door that you want to not be accessible to everybody +3. Right click on it and edit its attributes +4. Make the "req_access_txt" attribute be a semicolon-separated list of the permissions required to open the doors +5. Repeat for all doors. + +For example, a brig door would have it be "2" while a door that requires you have toxins and teleporter access (for whatever reason) would have it be "9;20" + +Here is a list of the permissions and their numbers (this may be out of date, see code/game/access.dm for an updated version): + +access_security = 1 +access_brig = 2 +access_armory = 3 +access_forensics_lockers= 4 +access_medical = 5 +access_morgue = 6 +access_tox = 7 +access_tox_storage = 8 +access_genetics = 9 +access_engine = 10 +access_engine_equip= 11 +access_maint_tunnels = 12 +access_external_airlocks = 13 +access_emergency_storage = 14 +access_change_ids = 15 +access_ai_upload = 16 +access_teleporter = 17 +access_eva = 18 +access_heads = 19 +access_captain = 20 +access_all_personal_lockers = 21 +access_chapel_office = 22 +access_tech_storage = 23 +access_atmospherics = 24 +access_bar = 25 +access_janitor = 26 +access_crematorium = 27 +access_kitchen = 28 +access_robotics = 29 +access_rd = 30 +access_cargo = 31 +access_construction = 32 +access_chemistry = 33 +access_cargo_bot = 34 +access_hydroponics = 35 +access_manufacturing = 36 +access_library = 37 +access_lawyer = 38 +access_virology = 39 +access_cmo = 40 +access_qm = 41 +access_court = 42 +access_clown = 43 +access_mime = 44 +access_surgery = 45 +access_theatre = 46 +access_research = 47 +access_mining = 48 +access_mining_office = 49 //not in use +access_mailsorting = 50 +access_mint = 51 +access_mint_vault = 52 +access_heads_vault = 53 +access_mining_station = 54 +access_xenobiology = 55 +access_ce = 56 +access_hop = 57 +access_hos = 58 +access_RC_announce = 59 //Request console announcements +access_keycard_auth = 60 //Used for events which require at least two people to confirm them access_tcomsat = 61 // has access to the entire telecomms satellite / machinery \ No newline at end of file diff --git a/config/example/admin_ranks.txt b/config/example/admin_ranks.txt index 00a2ee7311..817da0b541 100644 --- a/config/example/admin_ranks.txt +++ b/config/example/admin_ranks.txt @@ -1,46 +1,46 @@ -######################################################################################## -# ADMIN RANK DEFINES # -# The format of this is very simple. Rank name goes first. # -# Rank is CASE-SENSITIVE, all punctuation will be stripped so spaces don't matter. # -# Each rank is then followed by keywords with the prefix "+". # -# These keywords represent groups of verbs and abilities which are given to that rank. # -# +@ (or +prev) is a special shorthand which adds all the rights of the rank above it. # -# Ranks with no keywords will just be given the most basic verbs and abilities ~Carn # -######################################################################################## -# PLEASE NOTE: depending on config options, some abilities will be unavailable regardless if you have permission to use them! -# ALSO NOTE: this is a WorkInProgress at the moment. Most of this is just arbitrarily thrown in whatever group because LoadsaWork2Do+LittleTime. -# I'll be doing more moving around as feedback comes in. So be sure to check the notes after updates. - -# KEYWORDS: -# +ADMIN = general admin tools, verbs etc -# +FUN = events, other event-orientated actions. Access to the fun secrets in the secrets panel. -# +BAN = the ability to ban, jobban and fullban -# +STEALTH = the ability to stealthmin (make yourself appear with a fake name to everyone but other admins -# +POSSESS = the ability to possess objects -# +REJUV (or +REJUVINATE) = the ability to heal, respawn, modify damage and use godmode -# +BUILD (or +BUILDMODE) = the ability to use buildmode -# +SERVER = higher-risk admin verbs and abilities, such as those which affect the server configuration. -# +DEBUG = debug tools used for diagnosing and fixing problems. It's useful to give this to coders so they can investigate problems on a live server. -# +VAREDIT = everyone may view viewvars/debugvars/whatever you call it. This keyword allows you to actually EDIT those variables. -# +RIGHTS (or +PERMISSIONS) = allows you to promote and/or demote people. -# +SOUND (or +SOUNDS) = allows you to upload and play sounds -# +SPAWN (or +CREATE) = mob transformations, spawning of most atoms including mobs (high-risk atoms, e.g. blackholes, will require the +FUN flag too) -# +EVENT = a group of verbs that make it possible to run an event, or other badminnery. -# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag - -Admin Observer -Moderator +MOD -Mentor +MENTOR - -Admin Candidate +ADMIN -Trial Admin +@ +STEALTH +SPAWN +REJUV +VAREDIT +BAN +FUN -Admin +@ +POSSESS +BUILDMODE +SERVER -Admin Supervisor +@ +SOUNDS +DEBUG +PERMISSIONS -Game Master +ADMIN +FUN +POSSESS +REJUV +BUILD +SERVER +DEBUG +VAREDIT +SOUND +SPAWN -Head Admin +EVERYTHING -Retired Admin +ADMIN +STEALTH - -Host +EVERYTHING - -Developer +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE -Dev Mod +@ +MOD +######################################################################################## +# ADMIN RANK DEFINES # +# The format of this is very simple. Rank name goes first. # +# Rank is CASE-SENSITIVE, all punctuation will be stripped so spaces don't matter. # +# Each rank is then followed by keywords with the prefix "+". # +# These keywords represent groups of verbs and abilities which are given to that rank. # +# +@ (or +prev) is a special shorthand which adds all the rights of the rank above it. # +# Ranks with no keywords will just be given the most basic verbs and abilities ~Carn # +######################################################################################## +# PLEASE NOTE: depending on config options, some abilities will be unavailable regardless if you have permission to use them! +# ALSO NOTE: this is a WorkInProgress at the moment. Most of this is just arbitrarily thrown in whatever group because LoadsaWork2Do+LittleTime. +# I'll be doing more moving around as feedback comes in. So be sure to check the notes after updates. + +# KEYWORDS: +# +ADMIN = general admin tools, verbs etc +# +FUN = events, other event-orientated actions. Access to the fun secrets in the secrets panel. +# +BAN = the ability to ban, jobban and fullban +# +STEALTH = the ability to stealthmin (make yourself appear with a fake name to everyone but other admins +# +POSSESS = the ability to possess objects +# +REJUV (or +REJUVINATE) = the ability to heal, respawn, modify damage and use godmode +# +BUILD (or +BUILDMODE) = the ability to use buildmode +# +SERVER = higher-risk admin verbs and abilities, such as those which affect the server configuration. +# +DEBUG = debug tools used for diagnosing and fixing problems. It's useful to give this to coders so they can investigate problems on a live server. +# +VAREDIT = everyone may view viewvars/debugvars/whatever you call it. This keyword allows you to actually EDIT those variables. +# +RIGHTS (or +PERMISSIONS) = allows you to promote and/or demote people. +# +SOUND (or +SOUNDS) = allows you to upload and play sounds +# +SPAWN (or +CREATE) = mob transformations, spawning of most atoms including mobs (high-risk atoms, e.g. blackholes, will require the +FUN flag too) +# +EVENT = a group of verbs that make it possible to run an event, or other badminnery. +# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag + +Admin Observer +Moderator +MOD +Mentor +MENTOR + +Admin Candidate +ADMIN +Trial Admin +@ +STEALTH +SPAWN +REJUV +VAREDIT +BAN +FUN +Admin +@ +POSSESS +BUILDMODE +SERVER +Admin Supervisor +@ +SOUNDS +DEBUG +PERMISSIONS +Game Master +ADMIN +FUN +POSSESS +REJUV +BUILD +SERVER +DEBUG +VAREDIT +SOUND +SPAWN +Head Admin +EVERYTHING +Retired Admin +ADMIN +STEALTH + +Host +EVERYTHING + +Developer +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE +Dev Mod +@ +MOD diff --git a/config/example/admins.txt b/config/example/admins.txt index 414a9195a0..810fc79320 100644 --- a/config/example/admins.txt +++ b/config/example/admins.txt @@ -1,8 +1,8 @@ -###################################################################### -# Basically, ckey goes first. Rank goes after the "-" # -# Case is not important for ckey. # -# Case IS important for the rank. However punctuation/spaces are not # -# Ranks can be anything defined in admin_ranks.txt ~Carn # -###################################################################### - +###################################################################### +# Basically, ckey goes first. Rank goes after the "-" # +# Case is not important for ckey. # +# Case IS important for the rank. However punctuation/spaces are not # +# Ranks can be anything defined in admin_ranks.txt ~Carn # +###################################################################### + # not_a_user - Admin \ No newline at end of file diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 22ddf5d409..5e7233ad27 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -1,26 +1,26 @@ -# MySQL Connection Configuration - -# Server the MySQL database can be found at -# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. -ADDRESS localhost - -# MySQL server port (default is 3306) -PORT 3306 - -# Database the population, death, karma, etc. tables may be found in -DATABASE tgstation - -# Username/Login used to access the database -LOGIN mylogin - -# Password used to access the database -PASSWORD mypassword - -# The following information is for feedback tracking via the blackbox server -FEEDBACK_DATABASE test -FEEDBACK_LOGIN mylogin -FEEDBACK_PASSWORD mypassword - -# Track population and death statistics -# Comment this out to disable +# MySQL Connection Configuration + +# Server the MySQL database can be found at +# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. +ADDRESS localhost + +# MySQL server port (default is 3306) +PORT 3306 + +# Database the population, death, karma, etc. tables may be found in +DATABASE tgstation + +# Username/Login used to access the database +LOGIN mylogin + +# Password used to access the database +PASSWORD mypassword + +# The following information is for feedback tracking via the blackbox server +FEEDBACK_DATABASE test +FEEDBACK_LOGIN mylogin +FEEDBACK_PASSWORD mypassword + +# Track population and death statistics +# Comment this out to disable #ENABLE_STAT_TRACKING \ No newline at end of file diff --git a/config/example/forumdbconfig.txt b/config/example/forumdbconfig.txt index 61a2a2d6ec..0335ef9069 100644 --- a/config/example/forumdbconfig.txt +++ b/config/example/forumdbconfig.txt @@ -1,19 +1,19 @@ -# This configuration file is for the forum database, if you need to set up -# population, death, etc. tracking see 'dbconfig.txt' -# The login credentials for this will likely differ from those in dbconfig.txt! - -# Server the MySQL database can be found at -# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. -ADDRESS localhost - -# MySQL server port (default is 3306) -PORT 3306 - -# Database the forum data may be found in -DATABASE tgstation13 - -# Username/Login used to access the database -LOGIN mylogin - -# Password used to access the database +# This configuration file is for the forum database, if you need to set up +# population, death, etc. tracking see 'dbconfig.txt' +# The login credentials for this will likely differ from those in dbconfig.txt! + +# Server the MySQL database can be found at +# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. +ADDRESS localhost + +# MySQL server port (default is 3306) +PORT 3306 + +# Database the forum data may be found in +DATABASE tgstation13 + +# Username/Login used to access the database +LOGIN mylogin + +# Password used to access the database PASSWORD mypassword \ No newline at end of file diff --git a/config/example/game_options.txt b/config/example/game_options.txt index 4dee20e509..d54bdf7e89 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -1,72 +1,72 @@ -### HEALTH ### - -## level of health at which a mob goes into continual shock (soft crit) -HEALTH_THRESHOLD_SOFTCRIT 0 - -## level of health at which a mob becomes unconscious (crit) -HEALTH_THRESHOLD_CRIT -50 - -## level of health at which a mob becomes dead -HEALTH_THRESHOLD_DEAD -100 - -## Determines whether bones can be broken through excessive damage to the organ -## 0 means bones can't break, 1 means they can -BONES_CAN_BREAK 1 - -## Determines whether limbs can be amputated through excessive damage to the organ -## 0 means limbs can't be amputated, 1 means they can -LIMBS_CAN_BREAK 1 - -## multiplier which enables organs to take more damage before bones breaking or limbs being destroyed -## 100 means normal, 50 means half -ORGAN_HEALTH_MULTIPLIER 100 - -## multiplier which influences how fast organs regenerate naturally -## 100 means normal, 50 means half -ORGAN_REGENERATION_MULTIPLIER 75 - -### REVIVAL ### - -## whether pod plants work or not -REVIVAL_POD_PLANTS 1 - -## whether cloning tubes work or not -REVIVAL_CLONING 1 - -## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) -REVIVAL_BRAIN_LIFE -1 - - - -### MOB MOVEMENT ### - -## We suggest editing these variabled in-game to find a good speed for your server. To do this you must be a high level admin. Open the 'debug' tab ingame. Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name. - -## These values get directly added to values and totals in-game. To speed things up make the number negative, to slow things down, make the number positive. - - -## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_SPEED 2 -WALK_SPEED 4 - - -## The variables below affect the movement of specific mob types. -HUMAN_DELAY 0 -ROBOT_DELAY 0 -MONKEY_DELAY 0 -ALIEN_DELAY 0 -METROID_DELAY 0 -ANIMAL_DELAY 0 - -## Volume of footstep sound effects. Range: 1-100, Set to 0 to disable footstep sounds. -FOOTSTEP_VOLUME 45 - -### Miscellaneous ### - -## Config options which, of course, don't fit into previous categories. - -## Remove the # in front of this config option to have loyalty implants spawn by default on your server. -#USE_LOYALTY_IMPLANTS - -## Whether or not humans show an area message when they die. -SHOW_HUMAN_DEATH_MESSAGE +### HEALTH ### + +## level of health at which a mob goes into continual shock (soft crit) +HEALTH_THRESHOLD_SOFTCRIT 0 + +## level of health at which a mob becomes unconscious (crit) +HEALTH_THRESHOLD_CRIT -50 + +## level of health at which a mob becomes dead +HEALTH_THRESHOLD_DEAD -100 + +## Determines whether bones can be broken through excessive damage to the organ +## 0 means bones can't break, 1 means they can +BONES_CAN_BREAK 1 + +## Determines whether limbs can be amputated through excessive damage to the organ +## 0 means limbs can't be amputated, 1 means they can +LIMBS_CAN_BREAK 1 + +## multiplier which enables organs to take more damage before bones breaking or limbs being destroyed +## 100 means normal, 50 means half +ORGAN_HEALTH_MULTIPLIER 100 + +## multiplier which influences how fast organs regenerate naturally +## 100 means normal, 50 means half +ORGAN_REGENERATION_MULTIPLIER 75 + +### REVIVAL ### + +## whether pod plants work or not +REVIVAL_POD_PLANTS 1 + +## whether cloning tubes work or not +REVIVAL_CLONING 1 + +## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) +REVIVAL_BRAIN_LIFE -1 + + + +### MOB MOVEMENT ### + +## We suggest editing these variabled in-game to find a good speed for your server. To do this you must be a high level admin. Open the 'debug' tab ingame. Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name. + +## These values get directly added to values and totals in-game. To speed things up make the number negative, to slow things down, make the number positive. + + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +RUN_SPEED 2 +WALK_SPEED 4 + + +## The variables below affect the movement of specific mob types. +HUMAN_DELAY 0 +ROBOT_DELAY 0 +MONKEY_DELAY 0 +ALIEN_DELAY 0 +METROID_DELAY 0 +ANIMAL_DELAY 0 + +## Volume of footstep sound effects. Range: 1-100, Set to 0 to disable footstep sounds. +FOOTSTEP_VOLUME 45 + +### Miscellaneous ### + +## Config options which, of course, don't fit into previous categories. + +## Remove the # in front of this config option to have loyalty implants spawn by default on your server. +#USE_LOYALTY_IMPLANTS + +## Whether or not humans show an area message when they die. +SHOW_HUMAN_DEATH_MESSAGE diff --git a/config/example/jobs.txt b/config/example/jobs.txt index 8279ed18b1..060cf2d6a7 100644 --- a/config/example/jobs.txt +++ b/config/example/jobs.txt @@ -1,37 +1,37 @@ -Captain=1 -Head of Personnel=1 -Head of Security=1 -Chief Engineer=1 -Research Director=1 -Chief Medical Officer=1 - -Station Engineer=5 -Roboticist=1 - -Medical Doctor=5 -Geneticist=2 -Virologist=1 - -Scientist=3 -Chemist=2 - -Bartender=1 -Botanist=2 -Chef=1 -Janitor=1 -Quartermaster=1 -Shaft Miner=3 - -Warden=1 -Detective=1 -Security Officer=5 - -Assistant=-1 -Atmospheric Technician=4 -Cargo Technician=3 -Chaplain=1 -Lawyer=2 -Librarian=1 - -AI=1 +Captain=1 +Head of Personnel=1 +Head of Security=1 +Chief Engineer=1 +Research Director=1 +Chief Medical Officer=1 + +Station Engineer=5 +Roboticist=1 + +Medical Doctor=5 +Geneticist=2 +Virologist=1 + +Scientist=3 +Chemist=2 + +Bartender=1 +Botanist=2 +Chef=1 +Janitor=1 +Quartermaster=1 +Shaft Miner=3 + +Warden=1 +Detective=1 +Security Officer=5 + +Assistant=-1 +Atmospheric Technician=4 +Cargo Technician=3 +Chaplain=1 +Lawyer=2 +Librarian=1 + +AI=1 Cyborg=1 \ No newline at end of file diff --git a/config/example/motd.txt b/config/example/motd.txt index 20b67d09c9..622fdafcbe 100644 --- a/config/example/motd.txt +++ b/config/example/motd.txt @@ -1,5 +1,5 @@ -

                        Welcome to Space Station 13!

                        - --This server is running the Polaris modification of the Baystation12 SS13 code. -

                        -Bugtracker: for posting of bugs and issues. +

                        Welcome to Space Station 13!

                        + +-This server is running the Polaris modification of the Baystation12 SS13 code. +

                        +Bugtracker: for posting of bugs and issues. diff --git a/config/example/rules.html b/config/example/rules.html index 067a6952b4..9336435a9f 100644 --- a/config/example/rules.html +++ b/config/example/rules.html @@ -1,8 +1,8 @@ - -Server Rules - - - - - + +Server Rules + + + + + \ No newline at end of file diff --git a/config/example/svndir.txt b/config/example/svndir.txt index 5c907c92f1..bb72849a7c 100644 --- a/config/example/svndir.txt +++ b/config/example/svndir.txt @@ -1,5 +1,5 @@ -#Path to the .svn directory. Used to get server revision info. -SVNDIR .svn - -#Link to revision details. +#Path to the .svn directory. Used to get server revision info. +SVNDIR .svn + +#Link to revision details. REVHREF http://code.google.com/p/tgstation13/source/detail?r= \ No newline at end of file diff --git a/config/names/adjectives.txt b/config/names/adjectives.txt index ab0b4ba180..73b6a4076d 100644 --- a/config/names/adjectives.txt +++ b/config/names/adjectives.txt @@ -1,397 +1,397 @@ -adorable -adventurous -aggressive -alert -attractive -average -beautiful -blue-eyed -bloody -blushing -bright -clean -clear -cloudy -colorful -crowded -cute -dark -drab -distinct -dull -elegant -excited -fancy -filthy -glamorous -gleaming -gorgeous -graceful -grotesque -handsome -homely -light -long -magnificent -misty -motionless -muddy -old-fashioned -plain -poised -precious -quaint -shiny -smoggy -sparkling -spotless -stormy -strange -ugly -ugliest -unsightly -unusual -wide-eyed -alive -annoying -bad -better -beautiful -brainy -breakable -busy -careful -cautious -clever -clumsy -concerned -crazy -curious -dead -different -difficult -doubtful -easy -expensive -famous -fragile -frail -gifted -helpful -helpless -horrible -important -impossible -inexpensive -innocent -inquisitive -modern -mushy -odd -open -outstanding -poor -powerful -prickly -puzzled -real -rich -shy -sleepy -stupid -super -talented -tame -tender -tough -uninterested -vast -wandering -wild -wrong - -angry -annoyed -anxious -arrogant -ashamed -awful -bad -bewildered -black -blue -bored -clumsy -combative -condemned -confused -crazy,flipped-out -creepy -cruel -dangerous -defeated -defiant -depressed -disgusted -disturbed -dizzy -dull -embarrassed -envious -evil -fierce -foolish -frantic -frightened -grieving -grumpy -helpless -homeless -hungry -hurt -ill -itchy -jealous -jittery -lazy -lonely -mysterious -nasty -naughty -nervous -nutty -obnoxious -outrageous -panicky -repulsive -scary -selfish -sore -tense -terrible -testy -thoughtless -tired -troubled -upset -uptight -weary -wicked -worried -agreeable -amused -brave -calm -charming -cheerful -comfortable -cooperative -courageous -delightful -determined -eager -elated -enchanting -encouraging -energetic -enthusiastic -excited -exuberant -fair -faithful -fantastic -fine -friendly -funny -gentle -glorious -good -happy -healthy -helpful -hilarious -jolly -joyous -kind -lively -lovely -lucky -nice -obedient -perfect -pleasant -proud -relieved -silly -smiling -splendid -successful -thankful -thoughtful -victorious -vivacious -witty -wonderful -zealous -zany -broad -chubby -crooked -curved -deep -flat -high -hollow -low -narrow -round -shallow -skinny -square -steep -straight -wide -big -colossal -fat -gigantic -great -huge -immense -large -little -mammoth -massive -miniature -petite -puny -scrawny -short -small -tall -teeny -teeny-tiny -tiny -cooing -deafening -faint -harsh -high-pitched -hissing -hushed -husky -loud -melodic -moaning -mute -noisy -purring -quiet -raspy -resonant -screeching -shrill -silent -soft -squealing -thundering -voiceless -whispering -ancient -brief -early -fast -late -long -modern -old -old-fashioned -quick -rapid -short -slow -swift -young -Taste/Touch -bitter -delicious -fresh -juicy -ripe -rotten -salty -sour -spicy -stale -sticky -strong -sweet -tart -tasteless -tasty -thirsty -fluttering -fuzzy -greasy -grubby -hard -hot -icy -loose -melted -nutritious -plastic -prickly -rainy -rough -scattered -shaggy -shaky -sharp -shivering -silky -slimy -slippery -smooth -soft -solid -steady -sticky -tender -tight -uneven -weak -wet -wooden -yummy -boiling -breezy -broken -bumpy -chilly -cold -cool -creepy -crooked -cuddly -curly -damaged -damp -dirty -dry -dusty -filthy -flaky -fluffy -freezing -hot -warm -wet -abundant -empty -few -heavy -light -many -numerous +adorable +adventurous +aggressive +alert +attractive +average +beautiful +blue-eyed +bloody +blushing +bright +clean +clear +cloudy +colorful +crowded +cute +dark +drab +distinct +dull +elegant +excited +fancy +filthy +glamorous +gleaming +gorgeous +graceful +grotesque +handsome +homely +light +long +magnificent +misty +motionless +muddy +old-fashioned +plain +poised +precious +quaint +shiny +smoggy +sparkling +spotless +stormy +strange +ugly +ugliest +unsightly +unusual +wide-eyed +alive +annoying +bad +better +beautiful +brainy +breakable +busy +careful +cautious +clever +clumsy +concerned +crazy +curious +dead +different +difficult +doubtful +easy +expensive +famous +fragile +frail +gifted +helpful +helpless +horrible +important +impossible +inexpensive +innocent +inquisitive +modern +mushy +odd +open +outstanding +poor +powerful +prickly +puzzled +real +rich +shy +sleepy +stupid +super +talented +tame +tender +tough +uninterested +vast +wandering +wild +wrong + +angry +annoyed +anxious +arrogant +ashamed +awful +bad +bewildered +black +blue +bored +clumsy +combative +condemned +confused +crazy,flipped-out +creepy +cruel +dangerous +defeated +defiant +depressed +disgusted +disturbed +dizzy +dull +embarrassed +envious +evil +fierce +foolish +frantic +frightened +grieving +grumpy +helpless +homeless +hungry +hurt +ill +itchy +jealous +jittery +lazy +lonely +mysterious +nasty +naughty +nervous +nutty +obnoxious +outrageous +panicky +repulsive +scary +selfish +sore +tense +terrible +testy +thoughtless +tired +troubled +upset +uptight +weary +wicked +worried +agreeable +amused +brave +calm +charming +cheerful +comfortable +cooperative +courageous +delightful +determined +eager +elated +enchanting +encouraging +energetic +enthusiastic +excited +exuberant +fair +faithful +fantastic +fine +friendly +funny +gentle +glorious +good +happy +healthy +helpful +hilarious +jolly +joyous +kind +lively +lovely +lucky +nice +obedient +perfect +pleasant +proud +relieved +silly +smiling +splendid +successful +thankful +thoughtful +victorious +vivacious +witty +wonderful +zealous +zany +broad +chubby +crooked +curved +deep +flat +high +hollow +low +narrow +round +shallow +skinny +square +steep +straight +wide +big +colossal +fat +gigantic +great +huge +immense +large +little +mammoth +massive +miniature +petite +puny +scrawny +short +small +tall +teeny +teeny-tiny +tiny +cooing +deafening +faint +harsh +high-pitched +hissing +hushed +husky +loud +melodic +moaning +mute +noisy +purring +quiet +raspy +resonant +screeching +shrill +silent +soft +squealing +thundering +voiceless +whispering +ancient +brief +early +fast +late +long +modern +old +old-fashioned +quick +rapid +short +slow +swift +young +Taste/Touch +bitter +delicious +fresh +juicy +ripe +rotten +salty +sour +spicy +stale +sticky +strong +sweet +tart +tasteless +tasty +thirsty +fluttering +fuzzy +greasy +grubby +hard +hot +icy +loose +melted +nutritious +plastic +prickly +rainy +rough +scattered +shaggy +shaky +sharp +shivering +silky +slimy +slippery +smooth +soft +solid +steady +sticky +tender +tight +uneven +weak +wet +wooden +yummy +boiling +breezy +broken +bumpy +chilly +cold +cool +creepy +crooked +cuddly +curly +damaged +damp +dirty +dry +dusty +filthy +flaky +fluffy +freezing +hot +warm +wet +abundant +empty +few +heavy +light +many +numerous substantial \ No newline at end of file diff --git a/config/names/ai.txt b/config/names/ai.txt index ea9f63c0a9..01c65cf1b7 100644 --- a/config/names/ai.txt +++ b/config/names/ai.txt @@ -1,147 +1,147 @@ -1-Rover-1 -16-20 -7-Zark-7 -790 -AM -AMEE -ASTAR -Adaptive Manipulator -Allied Mastercomputer -Alpha 5 -Alpha 6 -Alpha 7 -AmigoBot -Android -Aniel -Asimov -Astor -B-4 -B-9 -B.O.B. -B166ER -Bender -Bishop -Blitz -Box -Brackenridge -C-3PO -Cassandra One -Cell -Chii -Chip -Computer -Conky 2000 -Cutie -Data -Dee Model -Deep Thought -Dor-15 -Dorfl -Dot Matrix -Duey -E.D.I. -ED-209 -E-Man -Emma-2 -Erasmus -Ez-27 -FRIEND COMPUTER -Fagor -Faith -Fi -Frost -Fum -Futura -G2 -George -Gnut -Gort -H.A.R.L.I.E. -H.E.L.P.eR. -H.E.R.B.I.E. -HAL 9000 -Hadaly -Huey -Irona -Jay-Dub -Jinx -Johnny 5 -K-9 -KITT -Klapaucius -Kryten 2X4B-523P -L-76 -L-Ron -LUH 3417 -Louie -MARK13 -Maria -Marvin -Master Control Program -Max 404 -Maximillian -Mechagodzilla -Mechani-Kong -Metalhead -Mr. R.I.N.G. -NCH -Necron-99 -Norby -OMM 0910 -Orange v 3.5 -PTO -Project 2501 -R.I.C. 2.0 -R2-D2 -R4-P17 -Revelation -Ro-Man -Robbie -S.A.M. -S.H.O.C.K. -S.H.R.O.U.D. -S.O.P.H.I.E. -SEN 5241 -SHODAN -SID 6.7 -Setaur -Shrike -Solo -Speedy -Super 17 -Surgeon General Kraken -T-1000 -T-800 -T-850 -THX 1138 -TWA -Terminus -Tidy -Tik-Tok -Tobor -Trurl -ULTRABOT -Ulysses -Uniblab -V.I.N.CENT. -Voltes V -W1k1 -Wikipedia -Windows 3.1 -X-5 -XERXES -XR -Yod -Z-1 -Z-2 -Z-3 -Zed -Zord -Mugsy3000 -Terminus -Decimus -Robot Devil -Optimus -Megatron -Soundwave -Ironhide +1-Rover-1 +16-20 +7-Zark-7 +790 +AM +AMEE +ASTAR +Adaptive Manipulator +Allied Mastercomputer +Alpha 5 +Alpha 6 +Alpha 7 +AmigoBot +Android +Aniel +Asimov +Astor +B-4 +B-9 +B.O.B. +B166ER +Bender +Bishop +Blitz +Box +Brackenridge +C-3PO +Cassandra One +Cell +Chii +Chip +Computer +Conky 2000 +Cutie +Data +Dee Model +Deep Thought +Dor-15 +Dorfl +Dot Matrix +Duey +E.D.I. +ED-209 +E-Man +Emma-2 +Erasmus +Ez-27 +FRIEND COMPUTER +Fagor +Faith +Fi +Frost +Fum +Futura +G2 +George +Gnut +Gort +H.A.R.L.I.E. +H.E.L.P.eR. +H.E.R.B.I.E. +HAL 9000 +Hadaly +Huey +Irona +Jay-Dub +Jinx +Johnny 5 +K-9 +KITT +Klapaucius +Kryten 2X4B-523P +L-76 +L-Ron +LUH 3417 +Louie +MARK13 +Maria +Marvin +Master Control Program +Max 404 +Maximillian +Mechagodzilla +Mechani-Kong +Metalhead +Mr. R.I.N.G. +NCH +Necron-99 +Norby +OMM 0910 +Orange v 3.5 +PTO +Project 2501 +R.I.C. 2.0 +R2-D2 +R4-P17 +Revelation +Ro-Man +Robbie +S.A.M. +S.H.O.C.K. +S.H.R.O.U.D. +S.O.P.H.I.E. +SEN 5241 +SHODAN +SID 6.7 +Setaur +Shrike +Solo +Speedy +Super 17 +Surgeon General Kraken +T-1000 +T-800 +T-850 +THX 1138 +TWA +Terminus +Tidy +Tik-Tok +Tobor +Trurl +ULTRABOT +Ulysses +Uniblab +V.I.N.CENT. +Voltes V +W1k1 +Wikipedia +Windows 3.1 +X-5 +XERXES +XR +Yod +Z-1 +Z-2 +Z-3 +Zed +Zord +Mugsy3000 +Terminus +Decimus +Robot Devil +Optimus +Megatron +Soundwave +Ironhide diff --git a/config/names/clown.txt b/config/names/clown.txt index 90c1f07e27..c29fca74ba 100644 --- a/config/names/clown.txt +++ b/config/names/clown.txt @@ -1,37 +1,37 @@ -Gigglesworth -Honkel the III -Goose McSunny -Mr. Shoe -Toodles Sharperton -Dinky Doodle -Honkerbelle -Bo Bo Sassy -Baby Cakes -Ladybug Honks -Ziggy Yoyo -Razzle Dazzle -Buster Frown -Pepinpop -Silly Willy -Jo Jo Bobo Bo -Pocket -Patches -Checkers -Freckle -Honker -Bonker -Skiddle -Scootaloo -Sprinkledinkle -Ronnie Pace -Miss Stockings -Slippy Joe -Redshirt McBeat -Flop O'Honker -Speckles -Bubble -Button -Sparkle -Giggles -Jingle +Gigglesworth +Honkel the III +Goose McSunny +Mr. Shoe +Toodles Sharperton +Dinky Doodle +Honkerbelle +Bo Bo Sassy +Baby Cakes +Ladybug Honks +Ziggy Yoyo +Razzle Dazzle +Buster Frown +Pepinpop +Silly Willy +Jo Jo Bobo Bo +Pocket +Patches +Checkers +Freckle +Honker +Bonker +Skiddle +Scootaloo +Sprinkledinkle +Ronnie Pace +Miss Stockings +Slippy Joe +Redshirt McBeat +Flop O'Honker +Speckles +Bubble +Button +Sparkle +Giggles +Jingle Candy \ No newline at end of file diff --git a/config/names/death_commando.txt b/config/names/death_commando.txt index e3d1f34f32..b10e181b5e 100644 --- a/config/names/death_commando.txt +++ b/config/names/death_commando.txt @@ -1,70 +1,70 @@ -Killiam Shakespeare -Stabby McGee -Sgt. Slaughter -Maxx Power -Sir Killaslot -Slab Bulkhead -Fridge Largemeat -Punt Speedchunk -Butch Deadlift -Bold Bigflank -Splint Chesthair -Flint Ironstag -Bolt Vanderhuge -Thick McRunfast -Blast Hardcheese -Buff Drinklots -Trunk Slamchest -Fist Rockbone -Stump Beefgnaw -Smash Lampjaw -Punch Rockgroin -Buck Plankchest -Stump Chunkman -Dirk Hardpeck -Rip Steakface -Slate Slabrock -Crud Bonemeal -Brick Hardmeat -Rip Sidecheek -Punch Sideiron -Gristle McThornBody -Slake Fistcrunch -Buff Hardback -Blast Thickneck -Crunch Buttsteak -Slab Squatthrust -Lump Beefrock -Touch Rustrod -Reef Blastbody -Smoke Manmuscle -Beat Punchbeef -Pack Blowfist -Roll Fizzlebeef -Lance Killiam -George Melons -Maximilian Murderface -Bob Johnson -Crush McStompbones -Hank Chesthair -Killing McKillingalot -Mancrush McBrorape -Rex Dudekiller VII -Seamus McTosterone -Hans Testosteroneson -Max Pain -Theodore Pain -Sarah Pain -GORE Vidal -Leonardo Da Viking -Noam Bombsky -Al "Otta" Gore -Gibbs McLargehuge -Evil Martin Luther King -Evil Bob Marley -Duke Killington -AMERICA -Toolboxl Rose -Zombie Gandhi -A whole bunch of spiders in a SWAT suit +Killiam Shakespeare +Stabby McGee +Sgt. Slaughter +Maxx Power +Sir Killaslot +Slab Bulkhead +Fridge Largemeat +Punt Speedchunk +Butch Deadlift +Bold Bigflank +Splint Chesthair +Flint Ironstag +Bolt Vanderhuge +Thick McRunfast +Blast Hardcheese +Buff Drinklots +Trunk Slamchest +Fist Rockbone +Stump Beefgnaw +Smash Lampjaw +Punch Rockgroin +Buck Plankchest +Stump Chunkman +Dirk Hardpeck +Rip Steakface +Slate Slabrock +Crud Bonemeal +Brick Hardmeat +Rip Sidecheek +Punch Sideiron +Gristle McThornBody +Slake Fistcrunch +Buff Hardback +Blast Thickneck +Crunch Buttsteak +Slab Squatthrust +Lump Beefrock +Touch Rustrod +Reef Blastbody +Smoke Manmuscle +Beat Punchbeef +Pack Blowfist +Roll Fizzlebeef +Lance Killiam +George Melons +Maximilian Murderface +Bob Johnson +Crush McStompbones +Hank Chesthair +Killing McKillingalot +Mancrush McBrorape +Rex Dudekiller VII +Seamus McTosterone +Hans Testosteroneson +Max Pain +Theodore Pain +Sarah Pain +GORE Vidal +Leonardo Da Viking +Noam Bombsky +Al "Otta" Gore +Gibbs McLargehuge +Evil Martin Luther King +Evil Bob Marley +Duke Killington +AMERICA +Toolboxl Rose +Zombie Gandhi +A whole bunch of spiders in a SWAT suit THAT DAMN FAGGOT TRAITOR GEORGE MELONS \ No newline at end of file diff --git a/config/names/first.txt b/config/names/first.txt index eb59a13585..a33e181146 100644 --- a/config/names/first.txt +++ b/config/names/first.txt @@ -1,1502 +1,1502 @@ -Abel -Adolph -Aida -Alan -Alden -Alex -Alexa -Alexandria -Alexis -Alexus -Alfred -Alfreda -Alger -Alisa -Alisya -Allegra -Allegria -Allen -Alma -Alysha -Alyssia -Amaryllis -Ambrosine -Amos -Angel -Anjelica -Anne -Arabella -Archie -Arielle -Arleen -Arn -Art -Ashlie -Astor -Aubrey -Avalon -Averill -Baldric -Barbra -Bartholomew -Beckah -Becky -Bernice -Bertrand -Bethney -Betsy -Bidelia -Bill -Blake -Brayden -Breanne -Brendan -Brittani -Bronte -Brooke -Bryce -Burt -Byrne -Byron -Bysshe -Cadence -Calanthia -Caleigh -Camryn -Candace -Candice -Candis -Canute -Carly -Carlyle -Carolyn -Carry -Carter -Caryl -Casimir -Cassian -Cecily -Charlton -Cherette -Cheri -Cherry -Chip -Christa -Christiana -Christobel -Claribel -Clark -Claudius -Clement -Cleveland -Cliff -Clinton -Clitus -Clover -Collin -Coreen -Corrine -Cy -Cynthia -Dalya -Damian -Daniella -Danny -Darcey -Darell -Daria -Darin -Dayna -Deangelo -Debbi -Dee -Deena -Della -Delma -Denholm -Denys -Desmond -Devin -Diamond -Dina -Dolores -Dominic -Donella -Donna -Donny -Dorothy -Dortha -Driscoll -Duncan -Easter -Ebba -Edgar -Effie -Eliot -Eliott -Elizabeth -Elle -Elric -Elspet -Elwood -Emma -Emmanuel -Ermintrude -Esmeralda -Eugenia -Euphemia -Eustace -Eveleen -Evelina -Fay -Fitz -Flick -Floella -Flora -Flossie -Fortune -Francis -Frankie -Fulton -Garret -Gaye -Gaylord -Genette -Georgene -Geraldine -Gervase -Gina -Ginger -Gladwyn -Glenna -Goddard -Godwin -Goodwin -Gordon -Graeme -Gratian -Greta -Griselda -Gwenda -Gwenevere -Hadley -Haidee -Hailey -Hal -Haleigh -Happy -Hartley -Hayley -Heather -Hedley -Helen -Henderson -Hepsie -Hervey -Holden -Homer -Hope -Horatio -Hortensia -Huffie -Hugo -Iantha -Ileen -Innocent -Irene -Irvine -Jacaline -Jacquetta -Jacqui -Jake -Jakki -Jalen -Jamar -Jamie -Jamison -Janel -Janelle -Janette -Janie -Janina -Janine -Jasmine -Jaydon -Jaye -Jaylee -Jayne -Jaynie -Jeanna -Jeannie -Jeannine -Jeb -Jed -Jemmy -Jenifer -Jennie -Jera -Jere -Jeri -Jermaine -Jerrie -Jillian -Jillie -Jim -Joachim -Joetta -Joey -Johnathan -Johnny -Joi -Jonathon -Joni -Josepha -Josh -Josiah -Joye -Julia -July -Kaelea -Kaleigh -Karenza -Karly -Karyn -Kat -Kathy -Katlyn -Kayleigh -Keegan -Keira -Keith -Kellie -Kennard -Kerena -Kerensa -Keturah -Keziah -Kimberley -Lacy -Lakeisha -Lalla -Lanny -Latanya -Launce -Laurencia -Laurissa -Leeann -Leia -Leland -Lennox -Leroi -Lessie -Leta -Lexia -Lexus -Linden -Lindsie -Lindy -Linton -Lockie -Loreto -Lori -Lorin -Lou -Luanne -Lucian -Luvenia -Lyndsey -Lynn -Lynsey -Lynwood -Mabelle -Macey -Madyson -Maegan -Malachi -Malcolm -Manley -Marcia -Mariabella -Marilene -Marion -Marion -Marje -Marjory -Marlowe -Marlyn -Marshall -Maryann -Maudie -Maurene -May -Maynard -Melvyn -Merideth -Merrilyn -Meryl -Micheal -Mike -Milton -Minnie -Monna -Montague -Monte -Monty -Muriel -Mya -Myriam -Myrtie -Nan -Nathaniel -Nelle -Nena -Nerissa -Netta -Nettie -Nikolas -Noah -Nonie -Nova -Nowell -Nydia -Olive -Oralie -Osbert -Osborn -Osborne -Osmund -Paget -Patience -Patrick -Patton -Pauleen -Pene -Percival -Peregrine -Pheobe -Phoebe -Phyliss -Phyllida -Phyllis -Porsche -Prosper -Prue -Quanah -Quiana -Raelene -Rain -Randa -Randal -Rastus -Rayner -Rebeckah -Reene -Renie -Reuben -Rexana -Reynard -Rhetta -Rich -Richie -Rick -Rickena -Rickey -Rickie -Rodger -Roger -Romayne -Ronnette -Roscoe -Rosemary -Roswell -Royce -Rubye -Rusty -Sabella -Sachie -Sal -Sally -Saranna -Sawyer -Scotty -Seneca -Seymour -Shan -Shana -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Sheri -Sherie -Sherill -Sherri -Shiloh -Simon -Sissy -Sloan -Sophie -Sorrel -Spike -Star -Steph -Stephany -Sue -Sukie -Sunshine -Susanna -Susannah -Suzan -Suzy -Sybil -Syd -Sydney -Tamika -Tamsin -Tania -Tansy -Tatyanna -Taylor -Tel -Terrell -Tiffany -Tod -Tolly -Topaz -Tori -Tracee -Tracey -Trinity -Tye -Uland -Ulric -Ulyssa -Valary -Vaughn -Verna -Vince -Vinnie -Vivyan -Walter -Ward -Warner -Wayne -Wendi -Whitaker -William -Willy -Winifred -Wisdom -Woodrow -Woody -Wynonna -Wynter -Yasmin -Yolanda -Ysabel -Zack -Zeke -Zelda -Zune -Jacob -Michael -Ethan -Joshua -Daniel -Alexander -Anthony -William -Christopher -Matthew -Jayden -Andrew -Joseph -David -Noah -Aiden -James -Ryan -Logan -John -Nathan -Elijah -Christian -Gabriel -Benjamin -Jonathan -Tyler -Samuel -Nicholas -Gavin -Dylan -Jackson -Brandon -Caleb -Mason -Angel -Isaac -Evan -Jack -Kevin -Jose -Isaiah -Luke -Landon -Justin -Lucas -Zachary -Jordan -Robert -Aaron -Brayden -Thomas -Cameron -Hunter -Austin -Adrian -Connor -Owen -Aidan -Jason -Julian -Wyatt -Charles -Luis -Carter -Juan -Chase -Diego -Jeremiah -Brody -Xavier -Adam -Carlos -Sebastian -Liam -Hayden -Nathaniel -Henry -Jesus -Ian -Tristan -Bryan -Sean -Cole -Alex -Eric -Brian -Jaden -Carson -Blake -Ayden -Cooper -Dominic -Brady -Caden -Josiah -Kyle -Colton -Kaden -Eli -Miguel -Antonio -Parker -Steven -Alejandro -Riley -Richard -Timothy -Devin -Jesse -Victor -Jake -Joel -Colin -Kaleb -Bryce -Levi -Oliver -Oscar -Vincent -Ashton -Cody -Micah -Preston -Marcus -Max -Patrick -Seth -Jeremy -Peyton -Nolan -Ivan -Damian -Maxwell -Alan -Kenneth -Jonah -Jorge -Mark -Giovanni -Eduardo -Grant -Collin -Gage -Omar -Emmanuel -Trevor -Edward -Ricardo -Cristian -Nicolas -Kayden -George -Jaxon -Paul -Braden -Elias -Andres -Derek -Garrett -Tanner -Malachi -Conner -Fernando -Cesar -Javier -Miles -Jaiden -Alexis -Leonardo -Santiago -Francisco -Cayden -Shane -Edwin -Hudson -Travis -Bryson -Erick -Jace -Hector -Josue -Peter -Jaylen -Mario -Manuel -Abraham -Grayson -Damien -Kaiden -Spencer -Stephen -Edgar -Wesley -Shawn -Trenton -Jared -Jeffrey -Landen -Johnathan -Bradley -Braxton -Ryder -Camden -Roman -Asher -Brendan -Maddox -Sergio -Israel -Andy -Lincoln -Erik -Donovan -Raymond -Avery -Rylan -Dalton -Harrison -Andre -Martin -Keegan -Marco -Jude -Sawyer -Dakota -Leo -Calvin -Kai -Drake -Troy -Zion -Clayton -Roberto -Zane -Gregory -Tucker -Rafael -Kingston -Dominick -Ezekiel -Griffin -Devon -Drew -Lukas -Johnny -Ty -Pedro -Tyson -Caiden -Mateo -Braylon -Cash -Aden -Chance -Taylor -Marcos -Maximus -Ruben -Emanuel -Simon -Corbin -Brennan -Dillon -Skyler -Myles -Xander -Jaxson -Dawson -Kameron -Kyler -Axel -Colby -Jonas -Joaquin -Payton -Brock -Frank -Enrique -Quinn -Emilio -Malik -Grady -Angelo -Julio -Derrick -Raul -Fabian -Corey -Gerardo -Dante -Ezra -Armando -Allen -Theodore -Gael -Amir -Zander -Adan -Maximilian -Randy -Easton -Dustin -Luca -Phillip -Julius -Charlie -Ronald -Jakob -Cade -Brett -Trent -Silas -Keith -Emiliano -Trey -Jalen -Darius -Lane -Jerry -Jaime -Scott -Graham -Weston -Braydon -Anderson -Rodrigo -Pablo -Saul -Danny -Donald -Elliot -Brayan -Dallas -Lorenzo -Casey -Mitchell -Alberto -Tristen -Rowan -Jayson -Gustavo -Aaden -Amari -Dean -Braeden -Declan -Chris -Ismael -Dane -Louis -Arturo -Brenden -Felix -Jimmy -Cohen -Tony -Holden -Reid -Abel -Bennett -Zackary -Arthur -Nehemiah -Ricky -Esteban -Cruz -Finn -Mauricio -Dennis -Keaton -Albert -Marvin -Mathew -Larry -Moises -Issac -Philip -Quentin -Curtis -Greyson -Jameson -Everett -Jayce -Darren -Elliott -Uriel -Alfredo -Hugo -Alec -Jamari -Marshall -Walter -Judah -Jay -Lance -Beau -Ali -Landyn -Yahir -Phoenix -Nickolas -Kobe -Bryant -Maurice -Russell -Leland -Colten -Reed -Davis -Joe -Ernesto -Desmond -Kade -Reece -Morgan -Ramon -Rocco -Orlando -Ryker -Brodie -Paxton -Jacoby -Douglas -Kristopher -Gary -Lawrence -Izaiah -Solomon -Nikolas -Mekhi -Justice -Tate -Jaydon -Salvador -Shaun -Alvin -Eddie -Kane -Davion -Zachariah -Dorian -Titus -Kellen -Camron -Isiah -Javon -Nasir -Milo -Johan -Byron -Jasper -Jonathon -Chad -Marc -Kelvin -Chandler -Sam -Cory -Deandre -River -Reese -Roger -Quinton -Talon -Romeo -Franklin -Noel -Alijah -Guillermo -Gunner -Damon -Jadon -Emerson -Micheal -Bruce -Terry -Kolton -Melvin -Beckett -Porter -August -Brycen -Dayton -Jamarion -Leonel -Karson -Zayden -Keagan -Carl -Khalil -Cristopher -Nelson -Braiden -Moses -Isaias -Roy -Triston -Walker -Kale -Emma -Isabella -Emily -Madison -Ava -Olivia -Sophia -Abigail -Elizabeth -Chloe -Samantha -Addison -Natalie -Mia -Alexis -Alyssa -Hannah -Ashley -Ella -Sarah -Grace -Taylor -Brianna -Lily -Hailey -Anna -Victoria -Kayla -Lillian -Lauren -Kaylee -Allison -Savannah -Nevaeh -Gabriella -Sofia -Makayla -Avery -Riley -Julia -Leah -Aubrey -Jasmine -Audrey -Katherine -Morgan -Brooklyn -Destiny -Sydney -Alexa -Kylie -Brooke -Kaitlyn -Evelyn -Layla -Madeline -Kimberly -Zoe -Jessica -Peyton -Alexandra -Claire -Madelyn -Maria -Mackenzie -Arianna -Jocelyn -Amelia -Angelina -Trinity -Andrea -Maya -Valeria -Sophie -Rachel -Vanessa -Aaliyah -Mariah -Gabrielle -Katelyn -Ariana -Bailey -Camila -Jennifer -Melanie -Gianna -Charlotte -Paige -Autumn -Payton -Faith -Sara -Isabelle -Caroline -Genesis -Isabel -Mary -Zoey -Gracie -Megan -Haley -Mya -Michelle -Molly -Stephanie -Nicole -Jenna -Natalia -Sadie -Jada -Serenity -Lucy -Ruby -Eva -Kennedy -Rylee -Jayla -Naomi -Rebecca -Lydia -Daniela -Bella -Keira -Adriana -Lilly -Hayden -Miley -Katie -Jade -Jordan -Gabriela -Amy -Angela -Melissa -Valerie -Giselle -Diana -Amanda -Kate -Laila -Reagan -Jordyn -Kylee -Danielle -Briana -Marley -Leslie -Kendall -Catherine -Liliana -Mckenzie -Jacqueline -Ashlyn -Reese -Marissa -London -Juliana -Shelby -Cheyenne -Angel -Daisy -Makenzie -Miranda -Erin -Amber -Alana -Ellie -Breanna -Ana -Mikayla -Summer -Piper -Adrianna -Jillian -Sierra -Jayden -Sienna -Alicia -Lila -Margaret -Alivia -Brooklynn -Karen -Violet -Sabrina -Stella -Aniyah -Annabelle -Alexandria -Kathryn -Skylar -Aliyah -Delilah -Julianna -Kelsey -Khloe -Carly -Amaya -Mariana -Christina -Alondra -Tessa -Eliana -Bianca -Jazmin -Clara -Vivian -Josephine -Delaney -Scarlett -Elena -Cadence -Alexia -Maggie -Laura -Nora -Ariel -Elise -Nadia -Mckenna -Chelsea -Lyla -Alaina -Jasmin -Hope -Leila -Caitlyn -Cassidy -Makenna -Allie -Izabella -Eden -Callie -Haylee -Caitlin -Kendra -Karina -Kyra -Kayleigh -Addyson -Kiara -Jazmine -Karla -Camryn -Alina -Lola -Kyla -Kelly -Fatima -Tiffany -Kira -Crystal -Mallory -Esmeralda -Alejandra -Eleanor -Angelica -Jayda -Abby -Kara -Veronica -Carmen -Jamie -Ryleigh -Valentina -Allyson -Dakota -Kamryn -Courtney -Cecilia -Madeleine -Aniya -Alison -Esther -Heaven -Aubree -Lindsey -Leilani -Nina -Melody -Macy -Ashlynn -Joanna -Cassandra -Alayna -Kaydence -Madilyn -Aurora -Heidi -Emerson -Kimora -Madalyn -Erica -Josie -Katelynn -Guadalupe -Harper -Ivy -Lexi -Camille -Savanna -Dulce -Daniella -Lucia -Emely -Joselyn -Kiley -Kailey -Miriam -Cynthia -Rihanna -Georgia -Rylie -Harmony -Kiera -Kyleigh -Monica -Bethany -Kaylie -Cameron -Teagan -Cora -Brynn -Ciara -Genevieve -Alice -Maddison -Eliza -Tatiana -Jaelyn -Erika -Ximena -April -Marely -Julie -Danica -Presley -Brielle -Julissa -Angie -Iris -Brenda -Hazel -Rose -Malia -Shayla -Fiona -Phoebe -Nayeli -Paola -Kaelyn -Selena -Audrina -Rebekah -Carolina -Janiyah -Michaela -Penelope -Janiya -Anastasia -Adeline -Ruth -Sasha -Denise -Holly -Madisyn -Hanna -Tatum -Marlee -Nataly -Helen -Janelle -Lizbeth -Serena -Anya -Jaslene -Kaylin -Jazlyn -Nancy -Lindsay -Desiree -Hayley -Itzel -Imani -Madelynn -Asia -Kadence -Madyson -Talia -Jane -Kayden -Annie -Amari -Bridget -Raegan -Jadyn -Celeste -Jimena -Luna -Yasmin -Emilia -Annika -Estrella -Sarai -Lacey -Ayla -Alessandra -Willow -Nyla -Dayana -Lilah -Lilliana -Natasha -Hadley -Harley -Priscilla -Claudia -Allisson -Baylee -Brenna -Brittany -Skyler -Fernanda -Danna -Melany -Cali -Lia -Macie -Lyric -Logan -Gloria -Lana -Mylee -Cindy -Lilian -Amira -Anahi -Alissa -Anaya -Lena -Ainsley -Sandra -Noelle -Marisol -Meredith -Kailyn -Lesly -Johanna -Diamond -Evangeline -Juliet -Kathleen -Meghan -Paisley -Athena -Hailee -Rosa -Wendy -Emilee -Sage -Alanna -Elaina -Cara -Nia -Paris -Casey -Dana -Emery -Rowan -Aubrie -Kaitlin -Jaden -Kenzie -Kiana -Viviana -Norah -Lauryn -Perla -Amiyah -Alyson -Rachael -Shannon -Aileen -Miracle -Lillie -Danika -Heather -Kassidy -Taryn -Tori -Francesca -Kristen -Amya -Elle -Kristina -Cheyanne -Haylie -Patricia -Anne -Samara +Abel +Adolph +Aida +Alan +Alden +Alex +Alexa +Alexandria +Alexis +Alexus +Alfred +Alfreda +Alger +Alisa +Alisya +Allegra +Allegria +Allen +Alma +Alysha +Alyssia +Amaryllis +Ambrosine +Amos +Angel +Anjelica +Anne +Arabella +Archie +Arielle +Arleen +Arn +Art +Ashlie +Astor +Aubrey +Avalon +Averill +Baldric +Barbra +Bartholomew +Beckah +Becky +Bernice +Bertrand +Bethney +Betsy +Bidelia +Bill +Blake +Brayden +Breanne +Brendan +Brittani +Bronte +Brooke +Bryce +Burt +Byrne +Byron +Bysshe +Cadence +Calanthia +Caleigh +Camryn +Candace +Candice +Candis +Canute +Carly +Carlyle +Carolyn +Carry +Carter +Caryl +Casimir +Cassian +Cecily +Charlton +Cherette +Cheri +Cherry +Chip +Christa +Christiana +Christobel +Claribel +Clark +Claudius +Clement +Cleveland +Cliff +Clinton +Clitus +Clover +Collin +Coreen +Corrine +Cy +Cynthia +Dalya +Damian +Daniella +Danny +Darcey +Darell +Daria +Darin +Dayna +Deangelo +Debbi +Dee +Deena +Della +Delma +Denholm +Denys +Desmond +Devin +Diamond +Dina +Dolores +Dominic +Donella +Donna +Donny +Dorothy +Dortha +Driscoll +Duncan +Easter +Ebba +Edgar +Effie +Eliot +Eliott +Elizabeth +Elle +Elric +Elspet +Elwood +Emma +Emmanuel +Ermintrude +Esmeralda +Eugenia +Euphemia +Eustace +Eveleen +Evelina +Fay +Fitz +Flick +Floella +Flora +Flossie +Fortune +Francis +Frankie +Fulton +Garret +Gaye +Gaylord +Genette +Georgene +Geraldine +Gervase +Gina +Ginger +Gladwyn +Glenna +Goddard +Godwin +Goodwin +Gordon +Graeme +Gratian +Greta +Griselda +Gwenda +Gwenevere +Hadley +Haidee +Hailey +Hal +Haleigh +Happy +Hartley +Hayley +Heather +Hedley +Helen +Henderson +Hepsie +Hervey +Holden +Homer +Hope +Horatio +Hortensia +Huffie +Hugo +Iantha +Ileen +Innocent +Irene +Irvine +Jacaline +Jacquetta +Jacqui +Jake +Jakki +Jalen +Jamar +Jamie +Jamison +Janel +Janelle +Janette +Janie +Janina +Janine +Jasmine +Jaydon +Jaye +Jaylee +Jayne +Jaynie +Jeanna +Jeannie +Jeannine +Jeb +Jed +Jemmy +Jenifer +Jennie +Jera +Jere +Jeri +Jermaine +Jerrie +Jillian +Jillie +Jim +Joachim +Joetta +Joey +Johnathan +Johnny +Joi +Jonathon +Joni +Josepha +Josh +Josiah +Joye +Julia +July +Kaelea +Kaleigh +Karenza +Karly +Karyn +Kat +Kathy +Katlyn +Kayleigh +Keegan +Keira +Keith +Kellie +Kennard +Kerena +Kerensa +Keturah +Keziah +Kimberley +Lacy +Lakeisha +Lalla +Lanny +Latanya +Launce +Laurencia +Laurissa +Leeann +Leia +Leland +Lennox +Leroi +Lessie +Leta +Lexia +Lexus +Linden +Lindsie +Lindy +Linton +Lockie +Loreto +Lori +Lorin +Lou +Luanne +Lucian +Luvenia +Lyndsey +Lynn +Lynsey +Lynwood +Mabelle +Macey +Madyson +Maegan +Malachi +Malcolm +Manley +Marcia +Mariabella +Marilene +Marion +Marion +Marje +Marjory +Marlowe +Marlyn +Marshall +Maryann +Maudie +Maurene +May +Maynard +Melvyn +Merideth +Merrilyn +Meryl +Micheal +Mike +Milton +Minnie +Monna +Montague +Monte +Monty +Muriel +Mya +Myriam +Myrtie +Nan +Nathaniel +Nelle +Nena +Nerissa +Netta +Nettie +Nikolas +Noah +Nonie +Nova +Nowell +Nydia +Olive +Oralie +Osbert +Osborn +Osborne +Osmund +Paget +Patience +Patrick +Patton +Pauleen +Pene +Percival +Peregrine +Pheobe +Phoebe +Phyliss +Phyllida +Phyllis +Porsche +Prosper +Prue +Quanah +Quiana +Raelene +Rain +Randa +Randal +Rastus +Rayner +Rebeckah +Reene +Renie +Reuben +Rexana +Reynard +Rhetta +Rich +Richie +Rick +Rickena +Rickey +Rickie +Rodger +Roger +Romayne +Ronnette +Roscoe +Rosemary +Roswell +Royce +Rubye +Rusty +Sabella +Sachie +Sal +Sally +Saranna +Sawyer +Scotty +Seneca +Seymour +Shan +Shana +Shanika +Shannah +Shannon +Shantae +Sharalyn +Sharla +Sheri +Sherie +Sherill +Sherri +Shiloh +Simon +Sissy +Sloan +Sophie +Sorrel +Spike +Star +Steph +Stephany +Sue +Sukie +Sunshine +Susanna +Susannah +Suzan +Suzy +Sybil +Syd +Sydney +Tamika +Tamsin +Tania +Tansy +Tatyanna +Taylor +Tel +Terrell +Tiffany +Tod +Tolly +Topaz +Tori +Tracee +Tracey +Trinity +Tye +Uland +Ulric +Ulyssa +Valary +Vaughn +Verna +Vince +Vinnie +Vivyan +Walter +Ward +Warner +Wayne +Wendi +Whitaker +William +Willy +Winifred +Wisdom +Woodrow +Woody +Wynonna +Wynter +Yasmin +Yolanda +Ysabel +Zack +Zeke +Zelda +Zune +Jacob +Michael +Ethan +Joshua +Daniel +Alexander +Anthony +William +Christopher +Matthew +Jayden +Andrew +Joseph +David +Noah +Aiden +James +Ryan +Logan +John +Nathan +Elijah +Christian +Gabriel +Benjamin +Jonathan +Tyler +Samuel +Nicholas +Gavin +Dylan +Jackson +Brandon +Caleb +Mason +Angel +Isaac +Evan +Jack +Kevin +Jose +Isaiah +Luke +Landon +Justin +Lucas +Zachary +Jordan +Robert +Aaron +Brayden +Thomas +Cameron +Hunter +Austin +Adrian +Connor +Owen +Aidan +Jason +Julian +Wyatt +Charles +Luis +Carter +Juan +Chase +Diego +Jeremiah +Brody +Xavier +Adam +Carlos +Sebastian +Liam +Hayden +Nathaniel +Henry +Jesus +Ian +Tristan +Bryan +Sean +Cole +Alex +Eric +Brian +Jaden +Carson +Blake +Ayden +Cooper +Dominic +Brady +Caden +Josiah +Kyle +Colton +Kaden +Eli +Miguel +Antonio +Parker +Steven +Alejandro +Riley +Richard +Timothy +Devin +Jesse +Victor +Jake +Joel +Colin +Kaleb +Bryce +Levi +Oliver +Oscar +Vincent +Ashton +Cody +Micah +Preston +Marcus +Max +Patrick +Seth +Jeremy +Peyton +Nolan +Ivan +Damian +Maxwell +Alan +Kenneth +Jonah +Jorge +Mark +Giovanni +Eduardo +Grant +Collin +Gage +Omar +Emmanuel +Trevor +Edward +Ricardo +Cristian +Nicolas +Kayden +George +Jaxon +Paul +Braden +Elias +Andres +Derek +Garrett +Tanner +Malachi +Conner +Fernando +Cesar +Javier +Miles +Jaiden +Alexis +Leonardo +Santiago +Francisco +Cayden +Shane +Edwin +Hudson +Travis +Bryson +Erick +Jace +Hector +Josue +Peter +Jaylen +Mario +Manuel +Abraham +Grayson +Damien +Kaiden +Spencer +Stephen +Edgar +Wesley +Shawn +Trenton +Jared +Jeffrey +Landen +Johnathan +Bradley +Braxton +Ryder +Camden +Roman +Asher +Brendan +Maddox +Sergio +Israel +Andy +Lincoln +Erik +Donovan +Raymond +Avery +Rylan +Dalton +Harrison +Andre +Martin +Keegan +Marco +Jude +Sawyer +Dakota +Leo +Calvin +Kai +Drake +Troy +Zion +Clayton +Roberto +Zane +Gregory +Tucker +Rafael +Kingston +Dominick +Ezekiel +Griffin +Devon +Drew +Lukas +Johnny +Ty +Pedro +Tyson +Caiden +Mateo +Braylon +Cash +Aden +Chance +Taylor +Marcos +Maximus +Ruben +Emanuel +Simon +Corbin +Brennan +Dillon +Skyler +Myles +Xander +Jaxson +Dawson +Kameron +Kyler +Axel +Colby +Jonas +Joaquin +Payton +Brock +Frank +Enrique +Quinn +Emilio +Malik +Grady +Angelo +Julio +Derrick +Raul +Fabian +Corey +Gerardo +Dante +Ezra +Armando +Allen +Theodore +Gael +Amir +Zander +Adan +Maximilian +Randy +Easton +Dustin +Luca +Phillip +Julius +Charlie +Ronald +Jakob +Cade +Brett +Trent +Silas +Keith +Emiliano +Trey +Jalen +Darius +Lane +Jerry +Jaime +Scott +Graham +Weston +Braydon +Anderson +Rodrigo +Pablo +Saul +Danny +Donald +Elliot +Brayan +Dallas +Lorenzo +Casey +Mitchell +Alberto +Tristen +Rowan +Jayson +Gustavo +Aaden +Amari +Dean +Braeden +Declan +Chris +Ismael +Dane +Louis +Arturo +Brenden +Felix +Jimmy +Cohen +Tony +Holden +Reid +Abel +Bennett +Zackary +Arthur +Nehemiah +Ricky +Esteban +Cruz +Finn +Mauricio +Dennis +Keaton +Albert +Marvin +Mathew +Larry +Moises +Issac +Philip +Quentin +Curtis +Greyson +Jameson +Everett +Jayce +Darren +Elliott +Uriel +Alfredo +Hugo +Alec +Jamari +Marshall +Walter +Judah +Jay +Lance +Beau +Ali +Landyn +Yahir +Phoenix +Nickolas +Kobe +Bryant +Maurice +Russell +Leland +Colten +Reed +Davis +Joe +Ernesto +Desmond +Kade +Reece +Morgan +Ramon +Rocco +Orlando +Ryker +Brodie +Paxton +Jacoby +Douglas +Kristopher +Gary +Lawrence +Izaiah +Solomon +Nikolas +Mekhi +Justice +Tate +Jaydon +Salvador +Shaun +Alvin +Eddie +Kane +Davion +Zachariah +Dorian +Titus +Kellen +Camron +Isiah +Javon +Nasir +Milo +Johan +Byron +Jasper +Jonathon +Chad +Marc +Kelvin +Chandler +Sam +Cory +Deandre +River +Reese +Roger +Quinton +Talon +Romeo +Franklin +Noel +Alijah +Guillermo +Gunner +Damon +Jadon +Emerson +Micheal +Bruce +Terry +Kolton +Melvin +Beckett +Porter +August +Brycen +Dayton +Jamarion +Leonel +Karson +Zayden +Keagan +Carl +Khalil +Cristopher +Nelson +Braiden +Moses +Isaias +Roy +Triston +Walker +Kale +Emma +Isabella +Emily +Madison +Ava +Olivia +Sophia +Abigail +Elizabeth +Chloe +Samantha +Addison +Natalie +Mia +Alexis +Alyssa +Hannah +Ashley +Ella +Sarah +Grace +Taylor +Brianna +Lily +Hailey +Anna +Victoria +Kayla +Lillian +Lauren +Kaylee +Allison +Savannah +Nevaeh +Gabriella +Sofia +Makayla +Avery +Riley +Julia +Leah +Aubrey +Jasmine +Audrey +Katherine +Morgan +Brooklyn +Destiny +Sydney +Alexa +Kylie +Brooke +Kaitlyn +Evelyn +Layla +Madeline +Kimberly +Zoe +Jessica +Peyton +Alexandra +Claire +Madelyn +Maria +Mackenzie +Arianna +Jocelyn +Amelia +Angelina +Trinity +Andrea +Maya +Valeria +Sophie +Rachel +Vanessa +Aaliyah +Mariah +Gabrielle +Katelyn +Ariana +Bailey +Camila +Jennifer +Melanie +Gianna +Charlotte +Paige +Autumn +Payton +Faith +Sara +Isabelle +Caroline +Genesis +Isabel +Mary +Zoey +Gracie +Megan +Haley +Mya +Michelle +Molly +Stephanie +Nicole +Jenna +Natalia +Sadie +Jada +Serenity +Lucy +Ruby +Eva +Kennedy +Rylee +Jayla +Naomi +Rebecca +Lydia +Daniela +Bella +Keira +Adriana +Lilly +Hayden +Miley +Katie +Jade +Jordan +Gabriela +Amy +Angela +Melissa +Valerie +Giselle +Diana +Amanda +Kate +Laila +Reagan +Jordyn +Kylee +Danielle +Briana +Marley +Leslie +Kendall +Catherine +Liliana +Mckenzie +Jacqueline +Ashlyn +Reese +Marissa +London +Juliana +Shelby +Cheyenne +Angel +Daisy +Makenzie +Miranda +Erin +Amber +Alana +Ellie +Breanna +Ana +Mikayla +Summer +Piper +Adrianna +Jillian +Sierra +Jayden +Sienna +Alicia +Lila +Margaret +Alivia +Brooklynn +Karen +Violet +Sabrina +Stella +Aniyah +Annabelle +Alexandria +Kathryn +Skylar +Aliyah +Delilah +Julianna +Kelsey +Khloe +Carly +Amaya +Mariana +Christina +Alondra +Tessa +Eliana +Bianca +Jazmin +Clara +Vivian +Josephine +Delaney +Scarlett +Elena +Cadence +Alexia +Maggie +Laura +Nora +Ariel +Elise +Nadia +Mckenna +Chelsea +Lyla +Alaina +Jasmin +Hope +Leila +Caitlyn +Cassidy +Makenna +Allie +Izabella +Eden +Callie +Haylee +Caitlin +Kendra +Karina +Kyra +Kayleigh +Addyson +Kiara +Jazmine +Karla +Camryn +Alina +Lola +Kyla +Kelly +Fatima +Tiffany +Kira +Crystal +Mallory +Esmeralda +Alejandra +Eleanor +Angelica +Jayda +Abby +Kara +Veronica +Carmen +Jamie +Ryleigh +Valentina +Allyson +Dakota +Kamryn +Courtney +Cecilia +Madeleine +Aniya +Alison +Esther +Heaven +Aubree +Lindsey +Leilani +Nina +Melody +Macy +Ashlynn +Joanna +Cassandra +Alayna +Kaydence +Madilyn +Aurora +Heidi +Emerson +Kimora +Madalyn +Erica +Josie +Katelynn +Guadalupe +Harper +Ivy +Lexi +Camille +Savanna +Dulce +Daniella +Lucia +Emely +Joselyn +Kiley +Kailey +Miriam +Cynthia +Rihanna +Georgia +Rylie +Harmony +Kiera +Kyleigh +Monica +Bethany +Kaylie +Cameron +Teagan +Cora +Brynn +Ciara +Genevieve +Alice +Maddison +Eliza +Tatiana +Jaelyn +Erika +Ximena +April +Marely +Julie +Danica +Presley +Brielle +Julissa +Angie +Iris +Brenda +Hazel +Rose +Malia +Shayla +Fiona +Phoebe +Nayeli +Paola +Kaelyn +Selena +Audrina +Rebekah +Carolina +Janiyah +Michaela +Penelope +Janiya +Anastasia +Adeline +Ruth +Sasha +Denise +Holly +Madisyn +Hanna +Tatum +Marlee +Nataly +Helen +Janelle +Lizbeth +Serena +Anya +Jaslene +Kaylin +Jazlyn +Nancy +Lindsay +Desiree +Hayley +Itzel +Imani +Madelynn +Asia +Kadence +Madyson +Talia +Jane +Kayden +Annie +Amari +Bridget +Raegan +Jadyn +Celeste +Jimena +Luna +Yasmin +Emilia +Annika +Estrella +Sarai +Lacey +Ayla +Alessandra +Willow +Nyla +Dayana +Lilah +Lilliana +Natasha +Hadley +Harley +Priscilla +Claudia +Allisson +Baylee +Brenna +Brittany +Skyler +Fernanda +Danna +Melany +Cali +Lia +Macie +Lyric +Logan +Gloria +Lana +Mylee +Cindy +Lilian +Amira +Anahi +Alissa +Anaya +Lena +Ainsley +Sandra +Noelle +Marisol +Meredith +Kailyn +Lesly +Johanna +Diamond +Evangeline +Juliet +Kathleen +Meghan +Paisley +Athena +Hailee +Rosa +Wendy +Emilee +Sage +Alanna +Elaina +Cara +Nia +Paris +Casey +Dana +Emery +Rowan +Aubrie +Kaitlin +Jaden +Kenzie +Kiana +Viviana +Norah +Lauryn +Perla +Amiyah +Alyson +Rachael +Shannon +Aileen +Miracle +Lillie +Danika +Heather +Kassidy +Taryn +Tori +Francesca +Kristen +Amya +Elle +Kristina +Cheyanne +Haylie +Patricia +Anne +Samara diff --git a/config/names/first_female.txt b/config/names/first_female.txt index 3f8c53a7a9..9f45c432dc 100644 --- a/config/names/first_female.txt +++ b/config/names/first_female.txt @@ -1,1414 +1,1414 @@ -Aida -Alexa -Alexandria -Alexis -Alexus -Alfreda -Alisa -Alisya -Allegra -Allegria -Alma -Alysha -Alyssia -Amaryllis -Ambrosine -Angel -Anjelica -Anne -Arabella -Arielle -Arleen -Ashlie -Astor -Aubrey -Avalona -Averill -Barbara -Beckah -Becky -Bernice -Bethney -Betsy -Bidelia -Breanne -Brittani -Brooke -Cadence -Calanthia -Caleigh -Candace -Candice -Carly -Carlyle -Carolyn -Carry -Caryl -Cecily -Cherette -Cheri -Cherry -Christa -Christiana -Christobelle -Claribel -Clover -Coreen -Corrine -Cynthia -Dalya -Daniella -Daria -Dayna -Debbi -Dee -Deena -Della -Delma -Denys -Diamond -Dina -Dolores -Donella -Donna -Dorothy -Dortha -Easter -Ebba -Effie -Elizabeth -Elle -Emma -Ermintrude -Esmeralda -Eugenia -Euphemia -Eustace -Eveleen -Evelina -Fay -Floella -Flora -Flossie -Fortune -Genette -Georgene -Geraldine -Gervase -Gina -Ginger -Gladwyn -Glenna -Greta -Griselda -Gwenda -Gwenevere -Hadley -Haidee -Hailey -Hal -Haleigh -Hayley -Heather -Hedley -Helen -Hepsie -Hortensia -Iantha -Ileen -Innocent -Irene -Jacaline -Jacquetta -Jacqui -Jakki -Jalen -Janelle -Janette -Janie -Janina -Janine -Jasmine -Jaylee -Jaynie -Jeanna -Jeannie -Jeannine -Jenifer -Jennie -Jera -Jere -Jeri -Jillian -Jillie -Joetta -Joi -Joni -Josepha -Joye -Julia -July -Kaelea -Kaleigh -Karenza -Karly -Karyn -Kat -Kathy -Katlyn -Kayleigh -Keegan -Keira -Keith -Kellie -Kerena -Kerensa -Keturah -Kimberley -Lacy -Lakeisha -Lalla -Latanya -Laurencia -Laurissa -Leeann -Leia -Lessie -Leta -Lexia -Lexus -Lindsie -Lindy -Lockie -Lori -Lorin -Luanne -Lucian -Luvenia -Lyndsey -Lynn -Lynsey -Lynwood -Mabelle -Macey -Madyson -Maegan -Marcia -Mariabella -Marilene -Marion -Marje -Marjory -Marlowe -Marlyn -Marshall -Maryann -Maudie -Maurene -May -Merideth -Merrilyn -Meryl -Minnie -Monna -Muriel -Mya -Myriam -Myrtie -Nan -Nelle -Nena -Nerissa -Netta -Nettie -Nonie -Nova -Nowell -Nydia -Olive -Oralie -Patience -Pauleen -Pene -Peregrine -Pheobe -Phoebe -Phyliss -Phyllida -Phyllis -Porsche -Prosper -Prue -Quanah -Quiana -Raelene -Rain -Randa -Randal -Rebeckah -Reene -Renie -Rexana -Rhetta -Ronnette -Rosemary -Rubye -Sabella -Sachie -Sally -Saranna -Seneca -Shana -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Sheri -Sherie -Sherill -Sherri -Sissy -Sophie -Star -Steph -Stephany -Sue -Sukie -Sunshine -Susanna -Susannah -Suzan -Suzy -Sydney -Tamika -Tania -Tansy -Tatyanna -Tiffany -Tolly -Topaz -Tori -Tracee -Tracey -Ulyssa -Valary -Verna -Vinnie -Vivyan -Wendi -Wisdom -Wynonna -Wynter -Yasmin -Yolanda -Ysabel -Zelda -Zune -Isabella -Emily -Madison -Ava -Olivia -Sophia -Abigail -Chloe -Samantha -Addison -Natalie -Mia -Alyssa -Hannah -Ashley -Ella -Sarah -Grace -Taylor -Brianna -Lily -Anna -Victoria -Kayla -Lillian -Lauren -Kaylee -Allison -Savannah -Nevaeh -Gabriella -Sofia -Makayla -Avery -Riley -Leah -Audrey -Katherine -Morgan -Brooklyn -Destiny -Kylie -Kaitlyn -Evelyn -Layla -Madeline -Kimberly -Zoe -Jessica -Peyton -Alexandra -Claire -Madelyn -Maria -Mackenzie -Arianna -Jocelyn -Amelia -Angelina -Trinity -Andrea -Maya -Valeria -Rachel -Vanessa -Aaliyah -Mariah -Gabrielle -Katelyn -Ariana -Bailey -Camila -Jennifer -Melanie -Gianna -Charlotte -Paige -Autumn -Payton -Faith -Sara -Isabelle -Caroline -Isabel -Mary -Zoey -Gracie -Megan -Haley -Michelle -Molly -Stephanie -Nicole -Jenna -Natalia -Sadie -Jada -Serenity -Lucy -Ruby -Eva -Kennedy -Rylee -Jayla -Naomi -Rebecca -Lydia -Daniela -Bella -Adriana -Lilly -Hayden -Miley -Katie -Jade -Jordan -Gabriela -Amy -Angela -Melissa -Valerie -Giselle -Diana -Amanda -Kate -Laila -Reagan -Jordyn -Kylee -Danielle -Briana -Marley -Leslie -Kendall -Catherine -Liliana -Mckenzie -Jacqueline -Ashlyn -Reese -Marissa -London -Juliana -Shelby -Cheyenne -Daisy -Makenzie -Miranda -Erin -Amber -Alana -Ellie -Breanna -Ana -Mikayla -Summer -Piper -Adrianna -Sierra -Jayden -Sienna -Alicia -Lila -Margaret -Alivia -Brooklynn -Karen -Violet -Sabrina -Stella -Aniyah -Annabelle -Kathryn -Skylar -Aliyah -Delilah -Julianna -Kelsey -Khloe -Amaya -Mariana -Christina -Alondra -Tessa -Eliana -Bianca -Jazmin -Clara -Vivian -Josephine -Delaney -Scarlett -Elena -Alexia -Maggie -Laura -Nora -Ariel -Elise -Nadia -Mckenna -Chelsea -Lyla -Alaina -Jasmin -Hope -Leila -Caitlyn -Cassidy -Makenna -Allie -Izabella -Eden -Callie -Haylee -Caitlin -Kendra -Karina -Kyra -Addyson -Kiara -Jazmine -Karla -Camryn -Alina -Lola -Kyla -Kelly -Fatima -Kira -Crystal -Mallory -Alejandra -Eleanor -Angelica -Jayda -Abby -Kara -Veronica -Carmen -Jamie -Ryleigh -Valentina -Allyson -Dakota -Kamryn -Courtney -Cecilia -Madeleine -Aniya -Alison -Esther -Heaven -Aubree -Lindsey -Leilani -Nina -Melody -Macy -Ashlynn -Joanna -Cassandra -Alayna -Kaydence -Madilyn -Aurora -Heidi -Emerson -Kimora -Madalyn -Erica -Josie -Katelynn -Guadalupe -Harper -Ivy -Lexi -Camille -Savanna -Dulce -Lucia -Emely -Joselyn -Kiley -Kailey -Miriam -Rihanna -Georgia -Rylie -Harmony -Kiera -Kyleigh -Monica -Bethany -Kaylie -Cameron -Teagan -Cora -Brynn -Ciara -Genevieve -Alice -Maddison -Eliza -Tatiana -Jaelyn -Erika -Ximena -April -Marely -Julie -Danica -Presley -Brielle -Julissa -Angie -Iris -Brenda -Hazel -Rose -Malia -Shayla -Fiona -Nayeli -Paola -Kaelyn -Selena -Audrina -Rebekah -Carolina -Janiyah -Michaela -Penelope -Janiya -Anastasia -Adeline -Ruth -Sasha -Denise -Holly -Madisyn -Hanna -Tatum -Marlee -Nataly -Lizbeth -Serena -Anya -Jaslene -Kaylin -Jazlyn -Nancy -Lindsay -Desiree -Itzel -Imani -Madelynn -Asia -Kadence -Talia -Jane -Kayden -Annie -Amari -Bridget -Raegan -Jadyn -Celeste -Jimena -Luna -Emilia -Annika -Estrella -Sarai -Lacey -Ayla -Alessandra -Willow -Nyla -Dayana -Lilah -Lilliana -Natasha -Harley -Priscilla -Claudia -Allisson -Baylee -Brenna -Brittany -Skyler -Fernanda -Danna -Melany -Cali -Lia -Macie -Lyric -Logan -Gloria -Lana -Mylee -Cindy -Lilian -Amira -Anahi -Alissa -Anaya -Lena -Ainsley -Sandra -Noelle -Marisol -Meredith -Kailyn -Lesly -Johanna -Evangeline -Juliet -Kathleen -Meghan -Paisley -Athena -Hailee -Rosa -Wendy -Emilee -Sage -Alanna -Elaina -Cara -Nia -Paris -Casey -Dana -Emery -Rowan -Aubrie -Kaitlin -Jaden -Kenzie -Kiana -Viviana -Norah -Lauryn -Perla -Amiyah -Alyson -Rachael -Aileen -Miracle -Lillie -Danika -Kassidy -Taryn -Francesca -Kristen -Amya -Kristina -Cheyanne -Haylie -Patricia -Samara -Balina -Skiftere -Albana -Fatushe -Vilna -Hamia -Kalila -Noura -Shadia -Selima -Herri -Zwina -Tanit -Satna -Batti -Loula -Nuja -Kassu -Aketa -Pherenike -Cyrene -Megare -Hekaline -Axiothea -Atheer -Hamda -Hakeema -Nadeera -Farha -Nasreen -Arwa -Pilar -Gezana -Dukinea -Reyna -Gala -Cira -Violeta -Arpi -Noushig -Zabel -Nane -Arev -Asiah -Ishtar -Zaminy -Durna -Liboko -Mathe -Ratu -Nana -Ntsebo -Uraburu -Ino -Itzalle -Graziana -Ixone -Celien -Jente -Marianne -Floriane -Stefanie -Eloise -Anke -Dristi -Chitra -Geeta -Shila -Suravi -Rani -Ekta -Fullara -Anasuya -Manali -Annapurna -Vanita -Belma -Elmedina -Zineta -Habiba -Yi -Eka -Thi -New -Aye -Azah -Hapsatou -Aibell -Bethan -Carys -Branwyn -Alis -Gwen -Gwendolyn -Caitriona -Morag -Muireall -Khazan -Yahita -Yisa -Sovbika -Zheng -Liuxian -Chao -Ping -Yan -Hai -Ling -Min -Ru -Bao -Sanja -Gordana -Dorotea -Ruzena -Tatjana -Vilma -Dagmar -Blanka -Yvonne -Hertha -Lise -Liv -Randi -Ester -Ziba -Taban -Shireen -Yasaman -Karlien -Saar -Liene -Khat -Maat -Tauret -Sitra -Anta -Niut -Ankhi -Bennu -Anku -Sagira -Kakra -Safa -Masika -Salma -Aya -Nesma -Myrrh -Wynfride -Millicent -Sybell -Inna -Rebeka -Esta -Endla -Nanni -Awet -Sisay -Lakech -Jaana -Kirsi -Roosa -Saimi -Hilda -Berta -Rauna -Reeta -Kanerva -Germaine -Sabine -Laurette -Yvette -Mara -Elsbeth -Maike -Agatha -Nadja -Gerda -Thalia -Dora -Corinna -Lambrini -Vassia -Panagoita -Leena -Dayita -Purva -Hardi -Pani -Vedi -Lasya -Charvi -Yanina -Eliora -Shir -Ayelet -Fanya -Liza -Gaya -Zimra -Nehal -Ananya -Jyoti -Neha -Salani -Ruhi -Karnavati -Jaya -Padmini -Anu -Sa -Sua -Neng -True -Fridlin -Silfa -Iren -Iva -Tamara -Solny -Snaiborg -Dagny -Holmfridur -Hellveig -Thula -Hjalta -Alfdis -Freygerdur -Aldis -Thorhalla -Pala -Ingis -Grima -Telma -Yobanna -Kambiri -Adanna -Oluchi -Amachey -Mgbeke -Yuka -Koken -Chiho -Akae -Taka -Ritsuko -Hasumi -Tama -Yumako -Haniko -Kaori -Setsu -Shoken -Sakura -Sen -Tane -Yoshe -Imari -Cho -Jupar -Janna -Albina -Maira -Aru -Nazira -Aliya -Zubaira -Sang -Phan -Preap -Kim -Jey -Meang -Moul -Touch -Rous -Sok -Priti -Damini -Ihita -Amrita -Kalyani -Rashmi -Kunda -Vani -Sarika -Wacu -Nduta -Noni -Muthoni -Nyambura -Mukondi -Wandia -Magiri -Njoki -Mun -Ya -Noe -Kal -Pak -Ton -Wi -Fulcina -Vibia -Sextia -Cania -Modesta -Cordia -Lae -Moana -Oke -Lilo -Wanika -Kalena -Napua -Kalama -Alona -Kalia -Makani -Kawena -Lani -Halina -Asola -Salitia -Dianna -Denisa -Katre -Gaiva -Rima -Apollonia -Kornelia -Zofia -Vika -Anyang -Ambala -Apudo -Awuor -Naamah -Akoth -Atuku -Farhat -Aisyah -Jeelaan -Rihaab -Mayang -Meriam -Rona -Uruewa -Marama -Ruihi -Neni -Manewa -Tapu -Shefali -Vritika -Namita -Ena -Manisha -Akshata -Aaruni -Orbei -Temulun -Saran -Chagur -Ghoa -Aysha -Zaheda -Nezha -Ahlam -Fiza -Hafida -Saida -Awinita -Tuwa -Orenda -Pamuya -Tsomah -Hola -Washta -Yutu -Catori -Tablita -Kasa -Muna -Weeko -Minku -Seti -Sajal -Thaili -Rajani -Kopeela -Pratik -Erna -Sonja -Margrete -Turid -Evy -Tordis -Anette -Kristin -Elna -Malin -Bente -Frida -Magnhild -Astrid -Monika -Hamna -Yesim -Nira -Diba -Salwa -Arta -Nakisa -Sima -Tumay -Maryam -Soraya -Fariba -Pouri -Pari -Nikou -Soheila -Nasim -Hanieh -Shamsi -Nassim -Maja -Szarlota -Kinga -Marietta -Donata -Lidia -Luiza -Adelina -Josefina -Sonia -Salome -Dores -Amor -Bruna -Jassi -Avneet -Livnoor -Yasmine -Hir -Lakh -Shaminder -Mashaal -Ruza -Kostana -Esma -Masilda -Viollca -Lajaria -Tsura -Jeta -Vai -Melania -Teodora -Aurelia -Viorica -Dominique -Mariutza -Dumitra -Uta -Delia -Ylenia -Grusha -Galka -Valeriya -Lera -Mashka -Nelya -Feodora -Jelena -Sveta -Jenya -Lara -Matryosha -Matryona -Tina -Eseta -Emere -Pele -Svetlana -Stanislava -Jasna -Olga -Anka -Dragica -Bogdana -Bozena -Petra -Jaroslava -Jolana -Alena -Nikola -Sona -Vanda -Zawati -Tisa -Hawa -Jaha -Shauriana -Rashida -Koffi -Satsobek -Sigrid -Tilda -Oleana -Nelly -Kerstin -Britt -Maj -Siv -Siri -Agneta -Asgard -Rishmeka -Oppila -Rajanitha -Vyshu -Rabika -Shai -Nirai -Kayala -Mae -Yodman -Kwanjai -Praitun -Choi -Phajee -Sumana -Adak -Sevil -Gunes -Isil -Izel -Latife -Kieu -Minh -Le -Cat -Thu -Tien -Jofrid -Vigdis -Signy -Arnora -Fridgerd -Skuld -Brynhild -Bolla -Gyrd -Fastvi -Disai -Zena -Katha -Nith -Navpreet -Izula -Sihle -Ethwasa -Xolani -Thando -Neith -Zamani -Zinhle -Msizi -Amehlo -Fatiha -Aicha -Fatma -Khiera -Dalal -Gamalat -Hana -Rania -Milagrosa -Amahle -Lesedi -Reem -Aria -Noemi -Concepcion -Antonella -Aadya -Diya -Jing -Ying -Xiaoyan -Xinyi -Tingting -Tala -Rimas -Adi -Noam -Tamar -Yael -Zara -Seo -Shu -Althea -Kabita -Nor -Zeynep -Aura -Chastity -Rebel -Vixen -Zero -Nix -Wren -India -Pearl -Natuna -Dawn -Aditya -Mio -Discovery -Cas -Zee -Rewi -Lusia -Olympia -Freya -Chani -Ash -Val -Okra -Verda -Mania -Peace -Fortuna -Hathor -Lucky -Wish -Africa -Proxima -Ceti +Aida +Alexa +Alexandria +Alexis +Alexus +Alfreda +Alisa +Alisya +Allegra +Allegria +Alma +Alysha +Alyssia +Amaryllis +Ambrosine +Angel +Anjelica +Anne +Arabella +Arielle +Arleen +Ashlie +Astor +Aubrey +Avalona +Averill +Barbara +Beckah +Becky +Bernice +Bethney +Betsy +Bidelia +Breanne +Brittani +Brooke +Cadence +Calanthia +Caleigh +Candace +Candice +Carly +Carlyle +Carolyn +Carry +Caryl +Cecily +Cherette +Cheri +Cherry +Christa +Christiana +Christobelle +Claribel +Clover +Coreen +Corrine +Cynthia +Dalya +Daniella +Daria +Dayna +Debbi +Dee +Deena +Della +Delma +Denys +Diamond +Dina +Dolores +Donella +Donna +Dorothy +Dortha +Easter +Ebba +Effie +Elizabeth +Elle +Emma +Ermintrude +Esmeralda +Eugenia +Euphemia +Eustace +Eveleen +Evelina +Fay +Floella +Flora +Flossie +Fortune +Genette +Georgene +Geraldine +Gervase +Gina +Ginger +Gladwyn +Glenna +Greta +Griselda +Gwenda +Gwenevere +Hadley +Haidee +Hailey +Hal +Haleigh +Hayley +Heather +Hedley +Helen +Hepsie +Hortensia +Iantha +Ileen +Innocent +Irene +Jacaline +Jacquetta +Jacqui +Jakki +Jalen +Janelle +Janette +Janie +Janina +Janine +Jasmine +Jaylee +Jaynie +Jeanna +Jeannie +Jeannine +Jenifer +Jennie +Jera +Jere +Jeri +Jillian +Jillie +Joetta +Joi +Joni +Josepha +Joye +Julia +July +Kaelea +Kaleigh +Karenza +Karly +Karyn +Kat +Kathy +Katlyn +Kayleigh +Keegan +Keira +Keith +Kellie +Kerena +Kerensa +Keturah +Kimberley +Lacy +Lakeisha +Lalla +Latanya +Laurencia +Laurissa +Leeann +Leia +Lessie +Leta +Lexia +Lexus +Lindsie +Lindy +Lockie +Lori +Lorin +Luanne +Lucian +Luvenia +Lyndsey +Lynn +Lynsey +Lynwood +Mabelle +Macey +Madyson +Maegan +Marcia +Mariabella +Marilene +Marion +Marje +Marjory +Marlowe +Marlyn +Marshall +Maryann +Maudie +Maurene +May +Merideth +Merrilyn +Meryl +Minnie +Monna +Muriel +Mya +Myriam +Myrtie +Nan +Nelle +Nena +Nerissa +Netta +Nettie +Nonie +Nova +Nowell +Nydia +Olive +Oralie +Patience +Pauleen +Pene +Peregrine +Pheobe +Phoebe +Phyliss +Phyllida +Phyllis +Porsche +Prosper +Prue +Quanah +Quiana +Raelene +Rain +Randa +Randal +Rebeckah +Reene +Renie +Rexana +Rhetta +Ronnette +Rosemary +Rubye +Sabella +Sachie +Sally +Saranna +Seneca +Shana +Shanika +Shannah +Shannon +Shantae +Sharalyn +Sharla +Sheri +Sherie +Sherill +Sherri +Sissy +Sophie +Star +Steph +Stephany +Sue +Sukie +Sunshine +Susanna +Susannah +Suzan +Suzy +Sydney +Tamika +Tania +Tansy +Tatyanna +Tiffany +Tolly +Topaz +Tori +Tracee +Tracey +Ulyssa +Valary +Verna +Vinnie +Vivyan +Wendi +Wisdom +Wynonna +Wynter +Yasmin +Yolanda +Ysabel +Zelda +Zune +Isabella +Emily +Madison +Ava +Olivia +Sophia +Abigail +Chloe +Samantha +Addison +Natalie +Mia +Alyssa +Hannah +Ashley +Ella +Sarah +Grace +Taylor +Brianna +Lily +Anna +Victoria +Kayla +Lillian +Lauren +Kaylee +Allison +Savannah +Nevaeh +Gabriella +Sofia +Makayla +Avery +Riley +Leah +Audrey +Katherine +Morgan +Brooklyn +Destiny +Kylie +Kaitlyn +Evelyn +Layla +Madeline +Kimberly +Zoe +Jessica +Peyton +Alexandra +Claire +Madelyn +Maria +Mackenzie +Arianna +Jocelyn +Amelia +Angelina +Trinity +Andrea +Maya +Valeria +Rachel +Vanessa +Aaliyah +Mariah +Gabrielle +Katelyn +Ariana +Bailey +Camila +Jennifer +Melanie +Gianna +Charlotte +Paige +Autumn +Payton +Faith +Sara +Isabelle +Caroline +Isabel +Mary +Zoey +Gracie +Megan +Haley +Michelle +Molly +Stephanie +Nicole +Jenna +Natalia +Sadie +Jada +Serenity +Lucy +Ruby +Eva +Kennedy +Rylee +Jayla +Naomi +Rebecca +Lydia +Daniela +Bella +Adriana +Lilly +Hayden +Miley +Katie +Jade +Jordan +Gabriela +Amy +Angela +Melissa +Valerie +Giselle +Diana +Amanda +Kate +Laila +Reagan +Jordyn +Kylee +Danielle +Briana +Marley +Leslie +Kendall +Catherine +Liliana +Mckenzie +Jacqueline +Ashlyn +Reese +Marissa +London +Juliana +Shelby +Cheyenne +Daisy +Makenzie +Miranda +Erin +Amber +Alana +Ellie +Breanna +Ana +Mikayla +Summer +Piper +Adrianna +Sierra +Jayden +Sienna +Alicia +Lila +Margaret +Alivia +Brooklynn +Karen +Violet +Sabrina +Stella +Aniyah +Annabelle +Kathryn +Skylar +Aliyah +Delilah +Julianna +Kelsey +Khloe +Amaya +Mariana +Christina +Alondra +Tessa +Eliana +Bianca +Jazmin +Clara +Vivian +Josephine +Delaney +Scarlett +Elena +Alexia +Maggie +Laura +Nora +Ariel +Elise +Nadia +Mckenna +Chelsea +Lyla +Alaina +Jasmin +Hope +Leila +Caitlyn +Cassidy +Makenna +Allie +Izabella +Eden +Callie +Haylee +Caitlin +Kendra +Karina +Kyra +Addyson +Kiara +Jazmine +Karla +Camryn +Alina +Lola +Kyla +Kelly +Fatima +Kira +Crystal +Mallory +Alejandra +Eleanor +Angelica +Jayda +Abby +Kara +Veronica +Carmen +Jamie +Ryleigh +Valentina +Allyson +Dakota +Kamryn +Courtney +Cecilia +Madeleine +Aniya +Alison +Esther +Heaven +Aubree +Lindsey +Leilani +Nina +Melody +Macy +Ashlynn +Joanna +Cassandra +Alayna +Kaydence +Madilyn +Aurora +Heidi +Emerson +Kimora +Madalyn +Erica +Josie +Katelynn +Guadalupe +Harper +Ivy +Lexi +Camille +Savanna +Dulce +Lucia +Emely +Joselyn +Kiley +Kailey +Miriam +Rihanna +Georgia +Rylie +Harmony +Kiera +Kyleigh +Monica +Bethany +Kaylie +Cameron +Teagan +Cora +Brynn +Ciara +Genevieve +Alice +Maddison +Eliza +Tatiana +Jaelyn +Erika +Ximena +April +Marely +Julie +Danica +Presley +Brielle +Julissa +Angie +Iris +Brenda +Hazel +Rose +Malia +Shayla +Fiona +Nayeli +Paola +Kaelyn +Selena +Audrina +Rebekah +Carolina +Janiyah +Michaela +Penelope +Janiya +Anastasia +Adeline +Ruth +Sasha +Denise +Holly +Madisyn +Hanna +Tatum +Marlee +Nataly +Lizbeth +Serena +Anya +Jaslene +Kaylin +Jazlyn +Nancy +Lindsay +Desiree +Itzel +Imani +Madelynn +Asia +Kadence +Talia +Jane +Kayden +Annie +Amari +Bridget +Raegan +Jadyn +Celeste +Jimena +Luna +Emilia +Annika +Estrella +Sarai +Lacey +Ayla +Alessandra +Willow +Nyla +Dayana +Lilah +Lilliana +Natasha +Harley +Priscilla +Claudia +Allisson +Baylee +Brenna +Brittany +Skyler +Fernanda +Danna +Melany +Cali +Lia +Macie +Lyric +Logan +Gloria +Lana +Mylee +Cindy +Lilian +Amira +Anahi +Alissa +Anaya +Lena +Ainsley +Sandra +Noelle +Marisol +Meredith +Kailyn +Lesly +Johanna +Evangeline +Juliet +Kathleen +Meghan +Paisley +Athena +Hailee +Rosa +Wendy +Emilee +Sage +Alanna +Elaina +Cara +Nia +Paris +Casey +Dana +Emery +Rowan +Aubrie +Kaitlin +Jaden +Kenzie +Kiana +Viviana +Norah +Lauryn +Perla +Amiyah +Alyson +Rachael +Aileen +Miracle +Lillie +Danika +Kassidy +Taryn +Francesca +Kristen +Amya +Kristina +Cheyanne +Haylie +Patricia +Samara +Balina +Skiftere +Albana +Fatushe +Vilna +Hamia +Kalila +Noura +Shadia +Selima +Herri +Zwina +Tanit +Satna +Batti +Loula +Nuja +Kassu +Aketa +Pherenike +Cyrene +Megare +Hekaline +Axiothea +Atheer +Hamda +Hakeema +Nadeera +Farha +Nasreen +Arwa +Pilar +Gezana +Dukinea +Reyna +Gala +Cira +Violeta +Arpi +Noushig +Zabel +Nane +Arev +Asiah +Ishtar +Zaminy +Durna +Liboko +Mathe +Ratu +Nana +Ntsebo +Uraburu +Ino +Itzalle +Graziana +Ixone +Celien +Jente +Marianne +Floriane +Stefanie +Eloise +Anke +Dristi +Chitra +Geeta +Shila +Suravi +Rani +Ekta +Fullara +Anasuya +Manali +Annapurna +Vanita +Belma +Elmedina +Zineta +Habiba +Yi +Eka +Thi +New +Aye +Azah +Hapsatou +Aibell +Bethan +Carys +Branwyn +Alis +Gwen +Gwendolyn +Caitriona +Morag +Muireall +Khazan +Yahita +Yisa +Sovbika +Zheng +Liuxian +Chao +Ping +Yan +Hai +Ling +Min +Ru +Bao +Sanja +Gordana +Dorotea +Ruzena +Tatjana +Vilma +Dagmar +Blanka +Yvonne +Hertha +Lise +Liv +Randi +Ester +Ziba +Taban +Shireen +Yasaman +Karlien +Saar +Liene +Khat +Maat +Tauret +Sitra +Anta +Niut +Ankhi +Bennu +Anku +Sagira +Kakra +Safa +Masika +Salma +Aya +Nesma +Myrrh +Wynfride +Millicent +Sybell +Inna +Rebeka +Esta +Endla +Nanni +Awet +Sisay +Lakech +Jaana +Kirsi +Roosa +Saimi +Hilda +Berta +Rauna +Reeta +Kanerva +Germaine +Sabine +Laurette +Yvette +Mara +Elsbeth +Maike +Agatha +Nadja +Gerda +Thalia +Dora +Corinna +Lambrini +Vassia +Panagoita +Leena +Dayita +Purva +Hardi +Pani +Vedi +Lasya +Charvi +Yanina +Eliora +Shir +Ayelet +Fanya +Liza +Gaya +Zimra +Nehal +Ananya +Jyoti +Neha +Salani +Ruhi +Karnavati +Jaya +Padmini +Anu +Sa +Sua +Neng +True +Fridlin +Silfa +Iren +Iva +Tamara +Solny +Snaiborg +Dagny +Holmfridur +Hellveig +Thula +Hjalta +Alfdis +Freygerdur +Aldis +Thorhalla +Pala +Ingis +Grima +Telma +Yobanna +Kambiri +Adanna +Oluchi +Amachey +Mgbeke +Yuka +Koken +Chiho +Akae +Taka +Ritsuko +Hasumi +Tama +Yumako +Haniko +Kaori +Setsu +Shoken +Sakura +Sen +Tane +Yoshe +Imari +Cho +Jupar +Janna +Albina +Maira +Aru +Nazira +Aliya +Zubaira +Sang +Phan +Preap +Kim +Jey +Meang +Moul +Touch +Rous +Sok +Priti +Damini +Ihita +Amrita +Kalyani +Rashmi +Kunda +Vani +Sarika +Wacu +Nduta +Noni +Muthoni +Nyambura +Mukondi +Wandia +Magiri +Njoki +Mun +Ya +Noe +Kal +Pak +Ton +Wi +Fulcina +Vibia +Sextia +Cania +Modesta +Cordia +Lae +Moana +Oke +Lilo +Wanika +Kalena +Napua +Kalama +Alona +Kalia +Makani +Kawena +Lani +Halina +Asola +Salitia +Dianna +Denisa +Katre +Gaiva +Rima +Apollonia +Kornelia +Zofia +Vika +Anyang +Ambala +Apudo +Awuor +Naamah +Akoth +Atuku +Farhat +Aisyah +Jeelaan +Rihaab +Mayang +Meriam +Rona +Uruewa +Marama +Ruihi +Neni +Manewa +Tapu +Shefali +Vritika +Namita +Ena +Manisha +Akshata +Aaruni +Orbei +Temulun +Saran +Chagur +Ghoa +Aysha +Zaheda +Nezha +Ahlam +Fiza +Hafida +Saida +Awinita +Tuwa +Orenda +Pamuya +Tsomah +Hola +Washta +Yutu +Catori +Tablita +Kasa +Muna +Weeko +Minku +Seti +Sajal +Thaili +Rajani +Kopeela +Pratik +Erna +Sonja +Margrete +Turid +Evy +Tordis +Anette +Kristin +Elna +Malin +Bente +Frida +Magnhild +Astrid +Monika +Hamna +Yesim +Nira +Diba +Salwa +Arta +Nakisa +Sima +Tumay +Maryam +Soraya +Fariba +Pouri +Pari +Nikou +Soheila +Nasim +Hanieh +Shamsi +Nassim +Maja +Szarlota +Kinga +Marietta +Donata +Lidia +Luiza +Adelina +Josefina +Sonia +Salome +Dores +Amor +Bruna +Jassi +Avneet +Livnoor +Yasmine +Hir +Lakh +Shaminder +Mashaal +Ruza +Kostana +Esma +Masilda +Viollca +Lajaria +Tsura +Jeta +Vai +Melania +Teodora +Aurelia +Viorica +Dominique +Mariutza +Dumitra +Uta +Delia +Ylenia +Grusha +Galka +Valeriya +Lera +Mashka +Nelya +Feodora +Jelena +Sveta +Jenya +Lara +Matryosha +Matryona +Tina +Eseta +Emere +Pele +Svetlana +Stanislava +Jasna +Olga +Anka +Dragica +Bogdana +Bozena +Petra +Jaroslava +Jolana +Alena +Nikola +Sona +Vanda +Zawati +Tisa +Hawa +Jaha +Shauriana +Rashida +Koffi +Satsobek +Sigrid +Tilda +Oleana +Nelly +Kerstin +Britt +Maj +Siv +Siri +Agneta +Asgard +Rishmeka +Oppila +Rajanitha +Vyshu +Rabika +Shai +Nirai +Kayala +Mae +Yodman +Kwanjai +Praitun +Choi +Phajee +Sumana +Adak +Sevil +Gunes +Isil +Izel +Latife +Kieu +Minh +Le +Cat +Thu +Tien +Jofrid +Vigdis +Signy +Arnora +Fridgerd +Skuld +Brynhild +Bolla +Gyrd +Fastvi +Disai +Zena +Katha +Nith +Navpreet +Izula +Sihle +Ethwasa +Xolani +Thando +Neith +Zamani +Zinhle +Msizi +Amehlo +Fatiha +Aicha +Fatma +Khiera +Dalal +Gamalat +Hana +Rania +Milagrosa +Amahle +Lesedi +Reem +Aria +Noemi +Concepcion +Antonella +Aadya +Diya +Jing +Ying +Xiaoyan +Xinyi +Tingting +Tala +Rimas +Adi +Noam +Tamar +Yael +Zara +Seo +Shu +Althea +Kabita +Nor +Zeynep +Aura +Chastity +Rebel +Vixen +Zero +Nix +Wren +India +Pearl +Natuna +Dawn +Aditya +Mio +Discovery +Cas +Zee +Rewi +Lusia +Olympia +Freya +Chani +Ash +Val +Okra +Verda +Mania +Peace +Fortuna +Hathor +Lucky +Wish +Africa +Proxima +Ceti Sabik \ No newline at end of file diff --git a/config/names/first_male.txt b/config/names/first_male.txt index 84270df02e..62dfb36fdc 100644 --- a/config/names/first_male.txt +++ b/config/names/first_male.txt @@ -1,1376 +1,1376 @@ -Abel -Adolph -Alan -Alden -Alex -Alfred -Alger -Allen -Amos -Apple -Archie -Arnie -Art -Arthur -Baldric -Bartholomew -Bill -Blake -Brayden -Brendan -Brock -Bronte -Brick -Bruce -Bryce -Buck -Burt -Butch -Byrne -Byron -Camryn -Carl -Carter -Casimir -Cassian -Charles -Charlton -Chip -Clark -Claudius -Clement -Cleveland -Cliff -Clinton -Cletus -Collin -Crush -Cy -Damian -Danny -Darcey -Darell -Darin -Deangelo -Denholm -Desmond -Devin -Dirk -Dominic -Donny -Driscoll -Duke -Duncan -Edgar -Eliot -Eliott -Elric -Elwood -Emmanuel -Fenton -Fitz -Flick -Flint -Flip -Francis -Frank -Frankie -Fridge -Fulton -Gannon -Garret -Gary -Goddard -Godwin -Goodwin -Gordon -Graeme -Grandpa -Gratian -Grendel -Han -Harry -Hartley -Harvey -Henderson -Holden -Homer -Horatio -Huffie -Hungry -Hugo -Irvine -Jacob -Jake -Jamar -Jamie -Jamison -Janel -Jaydon -Jaye -Jayne -Jean-Luc -Jeb -Jed -Jemmy -Jermaine -Jerrie -Jim -Joachim -Joey -Johnathan -John -Johnny -Jonathon -Josh -Josiah -Kennard -Keziah -Lando -Lanny -Launce -Leland -Lennox -Lenny -Leonard -Leroy -Lief -Linden -Linton -Lorde -Loreto -Lou -Lucas -Luke -Malachi -Malcolm -Manley -Marion -Max -Maynard -Melvyn -Michael -Mike -Milton -Montague -Monte -Monty -Nat -Nathaniel -Nick -Nikolas -Noah -Opie -Osbert -Osborn -Osborne -Osmund -Oswald -Paget -Patrick -Patton -Percival -Persh -Rastus -Raymond -Rayner -Reuben -Reynard -Richard -Rodger -Roger -Romayne -Roscoe -Roswell -Royce -Rube -Rusty -Sal -Sawyer -Scotty -Seymour -Shane -Shiloh -Smoke -Simon -Sloan -Sorrel -Spike -Sybil -Syd -Tamsin -Taylor -Tel -Terrell -Tim -Timothy -Todd -Trip -Tye -Uland -Ulric -Vaughn -Vince -Vinny -Walter -Ward -Warner -Wayne -Whitaker -William -Willy -Woodrow -Zack -Zane -Zeke -Ethan -Joshua -Daniel -Alexander -Anthony -Christopher -Matthew -Jayden -Andrew -Joseph -David -Aiden -James -Ryan -Logan -Nathan -Elijah -Christian -Gabriel -Benjamin -Jonathan -Tyler -Samuel -Nicholas -Gavin -Dylan -Jackson -Brandon -Caleb -Mason -Angel -Isaac -Evan -Jack -Kevin -Jose -Isaiah -Landon -Justin -Zachary -Jordan -Robert -Aaron -Thomas -Cameron -Hunter -Austin -Adrian -Connor -Owen -Aidan -Jason -Julian -Wyatt -Luis -Juan -Chase -Diego -Jeremiah -Brody -Xavier -Adam -Carlos -Sebastian -Liam -Hayden -Henry -Jesus -Ian -Tristan -Bryan -Sean -Cole -Eric -Brian -Jaden -Carson -Ayden -Cooper -Brady -Caden -Kyle -Colton -Kaden -Eli -Miguel -Antonio -Parker -Steven -Alejandro -Riley -Jesse -Victor -Joel -Colin -Kaleb -Levi -Oliver -Oscar -Vincent -Ashton -Cody -Micah -Preston -Marcus -Seth -Jeremy -Peyton -Nolan -Ivan -Maxwell -Kenneth -Jonah -Jorge -Mark -Giovanni -Eduardo -Grant -Gage -Omar -Trevor -Edward -Ricardo -Cristian -Nicolas -Kayden -George -Jaxon -Paul -Braden -Elias -Andres -Derek -Garrett -Tanner -Conner -Fernando -Cesar -Javier -Miles -Jaiden -Alexis -Leonardo -Santiago -Francisco -Cayden -Edwin -Hudson -Travis -Bryson -Erick -Jace -Hector -Josue -Peter -Jaylen -Mario -Manuel -Abraham -Grayson -Damien -Kaiden -Spencer -Stephen -Wesley -Shawn -Trenton -Jared -Jeffrey -Landen -Bradley -Braxton -Ryder -Camden -Roman -Asher -Maddox -Sergio -Israel -Andy -Lincoln -Erik -Donovan -Avery -Rylan -Dalton -Harrison -Andre -Martin -Keegan -Marco -Jude -Dakota -Leo -Calvin -Kai -Drake -Troy -Zion -Clayton -Roberto -Gregory -Tucker -Rafael -Kingston -Dominick -Ezekiel -Griffin -Devon -Drew -Lukas -Ty -Pedro -Tyson -Caiden -Mateo -Braylon -Cash -Aden -Chance -Marcos -Maximus -Ruben -Emanuel -Corbin -Brennan -Dillon -Skyler -Myles -Xander -Jaxson -Dawson -Kameron -Kyler -Axel -Colby -Jonas -Joaquin -Payton -Enrique -Quinn -Emilio -Malik -Grady -Angelo -Julio -Derrick -Raul -Fabian -Corey -Gerardo -Dante -Ezra -Armando -Theodore -Gael -Amir -Zander -Adan -Maximilian -Randy -Easton -Dustin -Luca -Phillip -Julius -Charlie -Ronald -Jakob -Cade -Brett -Trent -Silas -Keith -Emiliano -Trey -Jalen -Darius -Lane -Jerry -Jaime -Scott -Graham -Weston -Braydon -Anderson -Rodrigo -Pablo -Saul -Donald -Elliot -Brayan -Dallas -Lorenzo -Casey -Mitchell -Alberto -Tristen -Rowan -Jayson -Gustavo -Aaden -Amari -Dean -Braeden -Declan -Chris -Ismael -Dane -Louis -Arturo -Brenden -Felix -Jimmy -Cohen -Tony -Reid -Bennett -Zackary -Nehemiah -Ricky -Esteban -Cruz -Finn -Mauricio -Dennis -Keaton -Albert -Marvin -Mathew -Larry -Moises -Issac -Philip -Quentin -Curtis -Greyson -Jameson -Everett -Jayce -Darren -Elliott -Uriel -Alfredo -Alec -Jamari -Marshall -Judah -Jay -Lance -Beau -Ali -Landyn -Yahir -Phoenix -Nickolas -Kobe -Bryant -Maurice -Russell -Colten -Reed -Davis -Joe -Ernesto -Kade -Reece -Morgan -Ramon -Rocco -Orlando -Ryker -Brodie -Paxton -Jacoby -Douglas -Kristopher -Lawrence -Izaiah -Solomon -Mekhi -Justice -Tate -Salvador -Shaun -Alvin -Eddie -Kane -Davion -Zachariah -Titus -Kellen -Camron -Isiah -Javon -Nasir -Milo -Johan -Jasper -Chad -Marc -Kelvin -Chandler -Sam -Cory -Deandre -River -Reese -Quinton -Talon -Romeo -Franklin -Noel -Alijah -Guillermo -Gunner -Damon -Jadon -Emerson -Micheal -Terry -Kolton -Melvin -Beckett -Porter -August -Brycen -Dayton -Jamarion -Leonel -Karson -Zayden -Keagan -Khalil -Cristopher -Nelson -Braiden -Moses -Isaias -Roy -Triston -Walker -Kale -Tafil -Ismet -Bardhal -Valm -Ermir -Milosh -Lunik -Rahul -Sabir -Majed -Bakri -Feroz -Taysir -Hamal -Mawel -Amadsu -Mastina -Deren -Ides -Masar -Belkin -Kriton -Aktis -Lemnus -Agastrophos -Charax -Cylon -Theomestor -Telephus -Aatif -Abdul -Ridwaan -Isaam -Azmi -Kaleem -Akram -Jafar -Humaid -Umar -Masood -Angelito -Bautista -Humberto -Enzo -Rey -Taniel -Matsag -Movses -Antog -Moushegh -Ismail -Arseen -Balishar -Cavad -Akif -Orxun -Thuso -Malefane -Makolo -Refilwe -Likotsi -Mohau -Amose -Xurio -Zipselo -Patrizio -Luze -Benoit -Emiel -Bastien -Anas -Kylian -Florent -Rik -Arjun -Indranil -Balinder -Bimal -Guru -Hari -Lalit -Sudeep -Sonu -Subhash -Anil -Dipen -Chandra -Musa -Vildan -Hamza -Mevludin -Wai -Linn -Soe -Kaung -Khine -Aung -Phyo -Thiha -Entekele -Leke -Sakeh -Dufach -Rohan -Glyn -Elwyn -Iver -Berian -Mercher -Jesstin -Ermid -Dermid -Dafydd -Sion -Conall -Conn -Alasdair -Ruaraidh -Rustam -Asu -Vakha -Beksolta -Nezh -Illyas -Tian -Bai -Delan -Shun -Gengxin -Liang -Jun -Shui -Chun -Fang -Zhenya -Bo -Dubravko -Branko -Davor -Damir -Mislav -Lucijan -Milovan -Andrej -Drahoslav -Oluf -Frans -Rune -Bernt -Fardin -Kalan -Jebran -Shapoor -Klaas -Siert -Elco -Jan -Karst -Aker -Anum -Kha -Anhur -Pakhrua -Ahmes -Hotep -Tutamen -Meri -Sneferu -Imhotep -Nefer -Pepi -Hanif -Odion -Adel -Aymn -Mando -Dodi -Mustafa -Adham -Manu -Darwishi -Erasmus -Cleeve -Taaniel -Kaljo -Timmo -Uno -Nega -Ayene -Bekele -Abenet -Haile -Mahmoud -Aldo -Benjam -Sampo -Oskari -Mika -Sampsa -Risto -Yves -Antoine -Theo -Henri -Maxime -Mathis -Eugene -Jorg -Ulrich -Hubert -Raimund -Gunter -Christoforos -Markos -Romanos -Vasilios -Valentinos -Lambros -Emmanouil -Devnand -Inesh -Savit -Yatnesh -Vishay -Manek -Amit -Munish -Oris -Jamiel -Ahron -Levey -Yesochor -Avidan -Harrod -Hanan -Tabor -Ephron -Absolom -Makis -Ichabod -Taaveti -Sumit -Vineet -Rishnu -Chand -Madhavacharta -Navin -Pranav -Tsim -Fue -Lung -Pheng -Sigbjorn -Heidrekur -Saimundur -Jovin -Ulfar -Velaugur -Hunn -Edvald -Sigurd -Sigfinnur -Bjarni -Oddur -Isar -Vemundur -Herluf -Linberg -Fenrir -Uranus -Skidi -Gudgeir -Geir -Akuchi -Okparo -Chikere -Chinou -Jelani -Chidy -Natsuo -Kyoden -Kakuei -Sotaro -Masakado -Kenji -Konyo -Kazuko -Kenko -Shogo -Jo -Shoji -Kazi -Shinji -Akira -Kakuzo -Hiro -Arman -Nurbolat -Alen -Iskander -Marat -Lorn -Moul -Phann -Pang -Dith -Chin -Chim -Aang -Kovind -Madhab -Lalu -Uttam -Nayan -Yasti -Waigwa -Theuri -Chege -Nyoro -Ngure -Kimaru -Min -Pak -Changgok -Gok -Kim -Nam -Tycho -Lycus -Hadrius -Cocus -Augustus -Virgo -Hegio -Leonida -Leonid -Nero -Kanoa -Loe -Lilo -Keon -Makan -Sommai -Makaio -Oke -Kalei -Alens -Ruriks -Falks -Osvalds -Godvars -Gytis -Naglis -Mykolas -Kestas -Vaidas -Mikas -Artemas -Okeyo -Othiambo -Onindo -Odede -Otiya -Muda -Jusoh -Desa -Raadi -Raaji -Jati -Tuna -Kingi -Urutu -Ruhi -Taika -Mahora -Eteka -Vivek -Tarak -Umanath -Punit -Dev -Nirmal -Kunal -Tartu -Bogen -Yegu -Bukdai -Yul -Ayoub -Muslih -Jaul -Youssef -Zamen -Aqil -Fala -Tocho -Wikvaya -Wanahton -Nantan -Hinto -Sugmuk -Mikasi -Alo -Ouray -Prakash -Subodh -Bishwa -Mukesh -Nikhil -Dheer -Yngvar -Sivert -Christer -Age -Svend -Gudmund -Tore -Viggo -Georg -Torbjorn -Vebjorn -Isak -Oystein -Halvard -Alf -Helge -Joar -Thor -Mats -Husain -Ziyaad -Demir -Sahand -Sabahattin -Hamood -Birtan -Ihsan -Harun -Balash -Daud -Jaffar -Shahab -Hossein -Heshmat -Arash -Karim -Sadeq -Aref -Parsa -Abbas -Aziz -Morteza -Hashem -Feliks -Prots -Luboslaw -Leslaw -Urban -Mieszko -Hanusz -Stojan -Kasper -Jozafat -Wit -Teobaldo -Balbino -Viriato -Candido -Ramiro -Gaspar -Godofredo -Navjeev -Uddam -Kabir -Sukhinidhan -Biradol -Mahanleen -Harbeer -Django -Yanko -Chal -Lasho -Tobar -Durril -Shandor -Zale -Bosnik -Boiko -Radu -Vasile -Marku -Nicu -Skender -Grigore -Toma -Costache -Catarino -Sasha -Aleksandr -Filya -Krasimir -Kliment -Vadim -Rasim -Vadik -Iosif -Danya -Nikita -Lukyan -Petr -Valentin -Valya -Ruslan -Pili -Malosi -Losi -Atini -Vujadin -Duro -Miran -Kalinik -Jezdimir -Gavrilo -Lubos -Henrich -Silvester -Miroslav -Viliam -Konrad -Jakub -Hodari -Jamba -Mosi -Abasi -Sefu -Ayo -Tamu -Khalfani -Ludvig -Hakan -Onne -Zakarias -Mikael -Elton -Sigge -Roland -Stefan -Ovid -Ravel -Srinan -Natheep -Lithik -Shikan -Yasmith -Sayan -Venujayan -Tadthon -Chakan -Vidura -Trat -Thorn -Taat -Vitaya -Nattanan -Somsak -Pasat -Ertek -Haldun -Eray -Suat -Erksun -Mehmet -Aytek -Ergin -Dogander -Quang -Quoc -Tuan -Viet -Loc -Khang -Blann -Skarf -Thorvard -Jorund -Starolf -Steinolf -Haki -Throst -Rognvald -Bolverk -Vigi -Odinkar -Hjor -Beinir -Ingolf -Ragnar -Badahar -Heru -Abrik -Darshanbir -Baljeet -Daldir -Fakeer -Puneet -Maskeen -Lungelo -Phakama -Horus -Xeghu -Ukuza -Dundubala -Thembelani -Dumesani -Mohamed -Abdelkader -Rachid -Said -Brahim -Djamel -Abdallah -Habib -Murad -Fadi -Mohammed -Tareq -Mamadou -Junior -Bandile -Prince -Mehdi -Santino -Keven -Heitor -Agustin -Vicente -Iker -Jie -Fenf -Yong -Bin -Aarav -Wei -Reza -Noam -Itai -Rahman -Batkhaan -Ichika -So -Minato -Ren -Hinata -Haruta -Ryo -Somchai -Prasert -Maksim -Cyrus -Rip -Ripley -Colt -Kilroy -Zero -Armitage -Lucky -Blitz -Kroner -Zak -Basque -Tau -Kepler -Neo -Nova -Cas -Cypher -Switch -Thadeus -Lock -Morpheus -Sifat -Ose -Havdid -Bruno -Jossen -Tetsuo -Talos -Solo -Tobor -Huey -Dewey -Louie -Ash -Sonny -Titan -Bax -Casper -Finnegan -Loki -Odin -Finley -Flynn -Shamus -Ultan -German -Sirius -Castor +Abel +Adolph +Alan +Alden +Alex +Alfred +Alger +Allen +Amos +Apple +Archie +Arnie +Art +Arthur +Baldric +Bartholomew +Bill +Blake +Brayden +Brendan +Brock +Bronte +Brick +Bruce +Bryce +Buck +Burt +Butch +Byrne +Byron +Camryn +Carl +Carter +Casimir +Cassian +Charles +Charlton +Chip +Clark +Claudius +Clement +Cleveland +Cliff +Clinton +Cletus +Collin +Crush +Cy +Damian +Danny +Darcey +Darell +Darin +Deangelo +Denholm +Desmond +Devin +Dirk +Dominic +Donny +Driscoll +Duke +Duncan +Edgar +Eliot +Eliott +Elric +Elwood +Emmanuel +Fenton +Fitz +Flick +Flint +Flip +Francis +Frank +Frankie +Fridge +Fulton +Gannon +Garret +Gary +Goddard +Godwin +Goodwin +Gordon +Graeme +Grandpa +Gratian +Grendel +Han +Harry +Hartley +Harvey +Henderson +Holden +Homer +Horatio +Huffie +Hungry +Hugo +Irvine +Jacob +Jake +Jamar +Jamie +Jamison +Janel +Jaydon +Jaye +Jayne +Jean-Luc +Jeb +Jed +Jemmy +Jermaine +Jerrie +Jim +Joachim +Joey +Johnathan +John +Johnny +Jonathon +Josh +Josiah +Kennard +Keziah +Lando +Lanny +Launce +Leland +Lennox +Lenny +Leonard +Leroy +Lief +Linden +Linton +Lorde +Loreto +Lou +Lucas +Luke +Malachi +Malcolm +Manley +Marion +Max +Maynard +Melvyn +Michael +Mike +Milton +Montague +Monte +Monty +Nat +Nathaniel +Nick +Nikolas +Noah +Opie +Osbert +Osborn +Osborne +Osmund +Oswald +Paget +Patrick +Patton +Percival +Persh +Rastus +Raymond +Rayner +Reuben +Reynard +Richard +Rodger +Roger +Romayne +Roscoe +Roswell +Royce +Rube +Rusty +Sal +Sawyer +Scotty +Seymour +Shane +Shiloh +Smoke +Simon +Sloan +Sorrel +Spike +Sybil +Syd +Tamsin +Taylor +Tel +Terrell +Tim +Timothy +Todd +Trip +Tye +Uland +Ulric +Vaughn +Vince +Vinny +Walter +Ward +Warner +Wayne +Whitaker +William +Willy +Woodrow +Zack +Zane +Zeke +Ethan +Joshua +Daniel +Alexander +Anthony +Christopher +Matthew +Jayden +Andrew +Joseph +David +Aiden +James +Ryan +Logan +Nathan +Elijah +Christian +Gabriel +Benjamin +Jonathan +Tyler +Samuel +Nicholas +Gavin +Dylan +Jackson +Brandon +Caleb +Mason +Angel +Isaac +Evan +Jack +Kevin +Jose +Isaiah +Landon +Justin +Zachary +Jordan +Robert +Aaron +Thomas +Cameron +Hunter +Austin +Adrian +Connor +Owen +Aidan +Jason +Julian +Wyatt +Luis +Juan +Chase +Diego +Jeremiah +Brody +Xavier +Adam +Carlos +Sebastian +Liam +Hayden +Henry +Jesus +Ian +Tristan +Bryan +Sean +Cole +Eric +Brian +Jaden +Carson +Ayden +Cooper +Brady +Caden +Kyle +Colton +Kaden +Eli +Miguel +Antonio +Parker +Steven +Alejandro +Riley +Jesse +Victor +Joel +Colin +Kaleb +Levi +Oliver +Oscar +Vincent +Ashton +Cody +Micah +Preston +Marcus +Seth +Jeremy +Peyton +Nolan +Ivan +Maxwell +Kenneth +Jonah +Jorge +Mark +Giovanni +Eduardo +Grant +Gage +Omar +Trevor +Edward +Ricardo +Cristian +Nicolas +Kayden +George +Jaxon +Paul +Braden +Elias +Andres +Derek +Garrett +Tanner +Conner +Fernando +Cesar +Javier +Miles +Jaiden +Alexis +Leonardo +Santiago +Francisco +Cayden +Edwin +Hudson +Travis +Bryson +Erick +Jace +Hector +Josue +Peter +Jaylen +Mario +Manuel +Abraham +Grayson +Damien +Kaiden +Spencer +Stephen +Wesley +Shawn +Trenton +Jared +Jeffrey +Landen +Bradley +Braxton +Ryder +Camden +Roman +Asher +Maddox +Sergio +Israel +Andy +Lincoln +Erik +Donovan +Avery +Rylan +Dalton +Harrison +Andre +Martin +Keegan +Marco +Jude +Dakota +Leo +Calvin +Kai +Drake +Troy +Zion +Clayton +Roberto +Gregory +Tucker +Rafael +Kingston +Dominick +Ezekiel +Griffin +Devon +Drew +Lukas +Ty +Pedro +Tyson +Caiden +Mateo +Braylon +Cash +Aden +Chance +Marcos +Maximus +Ruben +Emanuel +Corbin +Brennan +Dillon +Skyler +Myles +Xander +Jaxson +Dawson +Kameron +Kyler +Axel +Colby +Jonas +Joaquin +Payton +Enrique +Quinn +Emilio +Malik +Grady +Angelo +Julio +Derrick +Raul +Fabian +Corey +Gerardo +Dante +Ezra +Armando +Theodore +Gael +Amir +Zander +Adan +Maximilian +Randy +Easton +Dustin +Luca +Phillip +Julius +Charlie +Ronald +Jakob +Cade +Brett +Trent +Silas +Keith +Emiliano +Trey +Jalen +Darius +Lane +Jerry +Jaime +Scott +Graham +Weston +Braydon +Anderson +Rodrigo +Pablo +Saul +Donald +Elliot +Brayan +Dallas +Lorenzo +Casey +Mitchell +Alberto +Tristen +Rowan +Jayson +Gustavo +Aaden +Amari +Dean +Braeden +Declan +Chris +Ismael +Dane +Louis +Arturo +Brenden +Felix +Jimmy +Cohen +Tony +Reid +Bennett +Zackary +Nehemiah +Ricky +Esteban +Cruz +Finn +Mauricio +Dennis +Keaton +Albert +Marvin +Mathew +Larry +Moises +Issac +Philip +Quentin +Curtis +Greyson +Jameson +Everett +Jayce +Darren +Elliott +Uriel +Alfredo +Alec +Jamari +Marshall +Judah +Jay +Lance +Beau +Ali +Landyn +Yahir +Phoenix +Nickolas +Kobe +Bryant +Maurice +Russell +Colten +Reed +Davis +Joe +Ernesto +Kade +Reece +Morgan +Ramon +Rocco +Orlando +Ryker +Brodie +Paxton +Jacoby +Douglas +Kristopher +Lawrence +Izaiah +Solomon +Mekhi +Justice +Tate +Salvador +Shaun +Alvin +Eddie +Kane +Davion +Zachariah +Titus +Kellen +Camron +Isiah +Javon +Nasir +Milo +Johan +Jasper +Chad +Marc +Kelvin +Chandler +Sam +Cory +Deandre +River +Reese +Quinton +Talon +Romeo +Franklin +Noel +Alijah +Guillermo +Gunner +Damon +Jadon +Emerson +Micheal +Terry +Kolton +Melvin +Beckett +Porter +August +Brycen +Dayton +Jamarion +Leonel +Karson +Zayden +Keagan +Khalil +Cristopher +Nelson +Braiden +Moses +Isaias +Roy +Triston +Walker +Kale +Tafil +Ismet +Bardhal +Valm +Ermir +Milosh +Lunik +Rahul +Sabir +Majed +Bakri +Feroz +Taysir +Hamal +Mawel +Amadsu +Mastina +Deren +Ides +Masar +Belkin +Kriton +Aktis +Lemnus +Agastrophos +Charax +Cylon +Theomestor +Telephus +Aatif +Abdul +Ridwaan +Isaam +Azmi +Kaleem +Akram +Jafar +Humaid +Umar +Masood +Angelito +Bautista +Humberto +Enzo +Rey +Taniel +Matsag +Movses +Antog +Moushegh +Ismail +Arseen +Balishar +Cavad +Akif +Orxun +Thuso +Malefane +Makolo +Refilwe +Likotsi +Mohau +Amose +Xurio +Zipselo +Patrizio +Luze +Benoit +Emiel +Bastien +Anas +Kylian +Florent +Rik +Arjun +Indranil +Balinder +Bimal +Guru +Hari +Lalit +Sudeep +Sonu +Subhash +Anil +Dipen +Chandra +Musa +Vildan +Hamza +Mevludin +Wai +Linn +Soe +Kaung +Khine +Aung +Phyo +Thiha +Entekele +Leke +Sakeh +Dufach +Rohan +Glyn +Elwyn +Iver +Berian +Mercher +Jesstin +Ermid +Dermid +Dafydd +Sion +Conall +Conn +Alasdair +Ruaraidh +Rustam +Asu +Vakha +Beksolta +Nezh +Illyas +Tian +Bai +Delan +Shun +Gengxin +Liang +Jun +Shui +Chun +Fang +Zhenya +Bo +Dubravko +Branko +Davor +Damir +Mislav +Lucijan +Milovan +Andrej +Drahoslav +Oluf +Frans +Rune +Bernt +Fardin +Kalan +Jebran +Shapoor +Klaas +Siert +Elco +Jan +Karst +Aker +Anum +Kha +Anhur +Pakhrua +Ahmes +Hotep +Tutamen +Meri +Sneferu +Imhotep +Nefer +Pepi +Hanif +Odion +Adel +Aymn +Mando +Dodi +Mustafa +Adham +Manu +Darwishi +Erasmus +Cleeve +Taaniel +Kaljo +Timmo +Uno +Nega +Ayene +Bekele +Abenet +Haile +Mahmoud +Aldo +Benjam +Sampo +Oskari +Mika +Sampsa +Risto +Yves +Antoine +Theo +Henri +Maxime +Mathis +Eugene +Jorg +Ulrich +Hubert +Raimund +Gunter +Christoforos +Markos +Romanos +Vasilios +Valentinos +Lambros +Emmanouil +Devnand +Inesh +Savit +Yatnesh +Vishay +Manek +Amit +Munish +Oris +Jamiel +Ahron +Levey +Yesochor +Avidan +Harrod +Hanan +Tabor +Ephron +Absolom +Makis +Ichabod +Taaveti +Sumit +Vineet +Rishnu +Chand +Madhavacharta +Navin +Pranav +Tsim +Fue +Lung +Pheng +Sigbjorn +Heidrekur +Saimundur +Jovin +Ulfar +Velaugur +Hunn +Edvald +Sigurd +Sigfinnur +Bjarni +Oddur +Isar +Vemundur +Herluf +Linberg +Fenrir +Uranus +Skidi +Gudgeir +Geir +Akuchi +Okparo +Chikere +Chinou +Jelani +Chidy +Natsuo +Kyoden +Kakuei +Sotaro +Masakado +Kenji +Konyo +Kazuko +Kenko +Shogo +Jo +Shoji +Kazi +Shinji +Akira +Kakuzo +Hiro +Arman +Nurbolat +Alen +Iskander +Marat +Lorn +Moul +Phann +Pang +Dith +Chin +Chim +Aang +Kovind +Madhab +Lalu +Uttam +Nayan +Yasti +Waigwa +Theuri +Chege +Nyoro +Ngure +Kimaru +Min +Pak +Changgok +Gok +Kim +Nam +Tycho +Lycus +Hadrius +Cocus +Augustus +Virgo +Hegio +Leonida +Leonid +Nero +Kanoa +Loe +Lilo +Keon +Makan +Sommai +Makaio +Oke +Kalei +Alens +Ruriks +Falks +Osvalds +Godvars +Gytis +Naglis +Mykolas +Kestas +Vaidas +Mikas +Artemas +Okeyo +Othiambo +Onindo +Odede +Otiya +Muda +Jusoh +Desa +Raadi +Raaji +Jati +Tuna +Kingi +Urutu +Ruhi +Taika +Mahora +Eteka +Vivek +Tarak +Umanath +Punit +Dev +Nirmal +Kunal +Tartu +Bogen +Yegu +Bukdai +Yul +Ayoub +Muslih +Jaul +Youssef +Zamen +Aqil +Fala +Tocho +Wikvaya +Wanahton +Nantan +Hinto +Sugmuk +Mikasi +Alo +Ouray +Prakash +Subodh +Bishwa +Mukesh +Nikhil +Dheer +Yngvar +Sivert +Christer +Age +Svend +Gudmund +Tore +Viggo +Georg +Torbjorn +Vebjorn +Isak +Oystein +Halvard +Alf +Helge +Joar +Thor +Mats +Husain +Ziyaad +Demir +Sahand +Sabahattin +Hamood +Birtan +Ihsan +Harun +Balash +Daud +Jaffar +Shahab +Hossein +Heshmat +Arash +Karim +Sadeq +Aref +Parsa +Abbas +Aziz +Morteza +Hashem +Feliks +Prots +Luboslaw +Leslaw +Urban +Mieszko +Hanusz +Stojan +Kasper +Jozafat +Wit +Teobaldo +Balbino +Viriato +Candido +Ramiro +Gaspar +Godofredo +Navjeev +Uddam +Kabir +Sukhinidhan +Biradol +Mahanleen +Harbeer +Django +Yanko +Chal +Lasho +Tobar +Durril +Shandor +Zale +Bosnik +Boiko +Radu +Vasile +Marku +Nicu +Skender +Grigore +Toma +Costache +Catarino +Sasha +Aleksandr +Filya +Krasimir +Kliment +Vadim +Rasim +Vadik +Iosif +Danya +Nikita +Lukyan +Petr +Valentin +Valya +Ruslan +Pili +Malosi +Losi +Atini +Vujadin +Duro +Miran +Kalinik +Jezdimir +Gavrilo +Lubos +Henrich +Silvester +Miroslav +Viliam +Konrad +Jakub +Hodari +Jamba +Mosi +Abasi +Sefu +Ayo +Tamu +Khalfani +Ludvig +Hakan +Onne +Zakarias +Mikael +Elton +Sigge +Roland +Stefan +Ovid +Ravel +Srinan +Natheep +Lithik +Shikan +Yasmith +Sayan +Venujayan +Tadthon +Chakan +Vidura +Trat +Thorn +Taat +Vitaya +Nattanan +Somsak +Pasat +Ertek +Haldun +Eray +Suat +Erksun +Mehmet +Aytek +Ergin +Dogander +Quang +Quoc +Tuan +Viet +Loc +Khang +Blann +Skarf +Thorvard +Jorund +Starolf +Steinolf +Haki +Throst +Rognvald +Bolverk +Vigi +Odinkar +Hjor +Beinir +Ingolf +Ragnar +Badahar +Heru +Abrik +Darshanbir +Baljeet +Daldir +Fakeer +Puneet +Maskeen +Lungelo +Phakama +Horus +Xeghu +Ukuza +Dundubala +Thembelani +Dumesani +Mohamed +Abdelkader +Rachid +Said +Brahim +Djamel +Abdallah +Habib +Murad +Fadi +Mohammed +Tareq +Mamadou +Junior +Bandile +Prince +Mehdi +Santino +Keven +Heitor +Agustin +Vicente +Iker +Jie +Fenf +Yong +Bin +Aarav +Wei +Reza +Noam +Itai +Rahman +Batkhaan +Ichika +So +Minato +Ren +Hinata +Haruta +Ryo +Somchai +Prasert +Maksim +Cyrus +Rip +Ripley +Colt +Kilroy +Zero +Armitage +Lucky +Blitz +Kroner +Zak +Basque +Tau +Kepler +Neo +Nova +Cas +Cypher +Switch +Thadeus +Lock +Morpheus +Sifat +Ose +Havdid +Bruno +Jossen +Tetsuo +Talos +Solo +Tobor +Huey +Dewey +Louie +Ash +Sonny +Titan +Bax +Casper +Finnegan +Loki +Odin +Finley +Flynn +Shamus +Ultan +German +Sirius +Castor Pollux \ No newline at end of file diff --git a/config/names/last.txt b/config/names/last.txt index 56079eee61..91fa47df95 100644 --- a/config/names/last.txt +++ b/config/names/last.txt @@ -1,1627 +1,1627 @@ -Whittier -Dimeling -Blaine -Dennis -Adams -Rader -Murray -Millhouse -Ludwig -Burris -Shupe -Mary -Zadovsky -Philips -Wise -Gronko -Jardine -Black -Mitchell -Enderly -Stall -Harrow -Atweeke -Sealis -Conrad -Lucy -Stewart -Green -Feufer -Warren -Campbell -Shafer -Woodworth -Magor -Logue -Reichard -Day -Dugmore -Greenawalt -Jyllian -Osterwise -Styles -Cavalet -Garneys -Raub -Sholl -Chauvin -Poley -Todd -Brandenburg -Baer -Pritchard -Pinney -Kadel -Anderson -Clarke -Hunt -Gadow -Stough -Marcotte -Brooks -Watson -Nash -Sheets -Ashbaugh -Zimmer -Noton -Dean -Fleming -Draudy -Bluetenberger -Fischer -Hawkins -Poehl -Addison -Mcintosh -Keppel -Kimple -Alice -Stone -Fiscina -Leichter -Wile -Callison -Cowper -Harrold -Carr -Eckhardstein -Wilkerson -Shirey -Benford -Reade -Baskett -Seidner -Gettemy -Joyce -Judge -Burkett -Kiefer -Carmichael -Hirleman -Wells -Isemann -Cressman -Highlands -Briggs -Rowley -Coldsmith -Berkheimer -Hill -Maclagan -Mcfall -Mens -Braun -James -Sloan -Bould -Overstreet -Kanaga -Polson -Finlay -Sandys -Bousum -Howard -Treeby -Stainforth -Werner -Sulyard -Marriman -Weinstein -Butterfill -Mason -Coates -Peters -Gregory -Wilo -Edwards -Barnes -Harding -Tireman -Lombardi -Roberts -Faqua -Basmanoff -Mccune -Mckendrick -Oppenheimer -Oneal -Focell -Tedrow -Fields -Ryals -Best -Zaun -Knapp -Linton -Jackson -Bullard -Mcloskey -Zoucks -Heckendora -Hoenshell -Woollard -Mueller -Burns -Franks -Goodman -Stern -Robinson -Hooker -David -Fitzgerald -Vanleer -Beach -Flickinger -Metzer -Bynum -Stafford -Osteen -Johnson -Paynter -Thomlinson -Simmons -Basinger -Fisher -Bunten -Compton -Archibald -Catherina -Rahl -Bowchiew -Tennant -Mccullough -Margaret -Schaeffer -Sommer -Beail -Merryman -Knapenberger -Patterson -Houston -Lacon -Levett -Sullivan -Sidower -Laborde -Stroh -Hice -Biery -Christman -Staymates -Sauter -Snyder -Bratton -Sybilla -Altmann -Mathews -Newbern -Baker -Kemble -Mingle -Unk -Otis -Quinn -Bell -Wood -Ullman -Bicknell -Gibson -Rohtin -Wallick -Eggbert -Losey -Neely -Catleay -McDonald -Beedell -Williamson -Bennett -Potter -Caldwell -Lowe -Durstine -King -Gardner -Ulery -Rifler -Trovato -Thomas -Nehling -Baum -Werry -Mcmullen -Koster -Willey -Mildred -Straub -Haynes -Baxter -Ackerley -Greene -Atkinson -Davis -Weeter -Milne -Leech -Clewett -Ewing -Hook -Reighner -Welty -Jenkins -Swarner -Hawker -Agg -Batten -Cherry -Shaffer -Yeskey -Stephenson -Pycroft -Larson -Joghs -Keener -Christopher -Roadman -Echard -Priebe -Auman -Kemerer -Sutton -Prechtl -Cowart -Ringer -Garratt -Siegrist -Seelig -Lafortune -Dryfus -Isaman -Teagarden -Evans -Wolfe -Fiddler -Jowers -Aultman -Olphert -Howe -Leslie -Stocker -Bode -Whirlow -Ann -Mcclymonds -Guess -Taggart -Pratt -Moon -Huey -Hegarty -Meyers -Stahl -Nickolson -Mortland -Perkins -Thorley -Fuchs -Ray -Schrader -Kellogg -Woodward -Faust -Roby -Bashline -Cypret -Laurenzi -Minnie -Houser -Langston -Barrett -Wible -Hujsak -Wardle -Pershing -Kuster -Driggers -Wheeler -Garland -Alliman -Hoover -Camp -Hall -Parkinson -Swabey -Mull -Cox -Hanford -Stange -Wolff -Jesse -Brinigh -Koepple -Schmidt -Muller -Schofield -Zalack -Pfeifer -Fea -Blackburn -Ward -Kifer -Costello -Donkin -Osterweis -Brindle -Llora -Duncan -Ehret -Fryer -Summy -Richards -Boyer -Hutton -Mosser -Lester -Stroble -Randolph -Lord -Scott -Nicholas -Smail -Ratcliff -Riggle -Newton -Sanders -Lauffer -Aggley -Moberly -Hynes -Pennington -Woolery -Hardie -Blessig -Tanner -Demuth -Fraser -Henry -Shick -Ironmonger -Scherer -Field -Prevatt -Earl -Paulson -Curry -Powers -Rosensteel -Hoopengarner -Weisgarber -Elliott -Pearsall -Lowstetter -Holdeman -Kepplinger -Bloise -Hunter -Glover -Hayhurst -Wentzel -Owens -Smith -Steele -Leach -Armstrong -Easter -Greenwood -Buzzard -Eliza -Rockwell -Zeal -Harshman -Northey -Tilton -Richter -Moore -Jerome -Hardy -Bickerson -White -Beck -Waldron -Fulton -Miller -Sandford -Hughes -Winton -Digson -Byers -Hincken -Shaner -Whiteman -Lineman -Albright -Hastings -Elderson -Garrison -Rose -Kelley -Quirin -Dickinson -Young -Ramos -Jewell -Endsley -Briner -Jenner -Saylor -Bash -Blyant -Rhinehart -Prescott -Kirkson -Picard -Riker -Spock -Skywalker -Vader -Muggins -Buttersworth -Stamos -Sagan -Hawking -Dawkins -Goebbles -McShain -McDonohugh -Power -Jones -Williams -Brown -Taylor -Davies -Wilson -Walker -Wright -Thompson -Patel -Martins -Lewis -Harris -Clark -Turner -Cooper -Morris -Morgan -Harrison -Kelly -Allen -Phillips -Lee -Parker -Simpson -Griffiths -Shaw -Price -Cook -Richardson -Marshall -Begum -Murphy -Khan -Gray -Collins -Bailey -Carter -Robertson -Graham -Singh -Hussain -Ellis -Wilkinson -Foster -Thomson -Russell -Ali -Reid -Rathens -Rathen -Chapman -Powell -Owen -Ahmed -Rogers -Webb -Holmes -Mills -Matthews -Palmer -Lloyd -Kaur -Ivanov -Smirnov -Vasilyev -Petrov -Kuznetsov -Mikhaylov -Pavlov -Semenov -Andreev -Alekseev -Mali -Troshani -Nano -Kupi -Syla -Lucca -Hasani -Khalef -Benita -Fahas -Seghir -Ziani -Saadi -Beghal -Yamin -Mousa -Bilal -Khalaf -Zafar -Salman -Naderi -Usman -Al-Hassen -El-Salame -Al-Fadel -El-Shaer -El-Amini -Al-Miah -Al-Meskin -El-Nazar -Villar -Caceres -Dominguez -Ortiz -Vidal -Escobar -Schiavone -Hagopian -Petrosian -Baronian -Kostanian -Ismailyan -Jamshidova -Kyrimsoy -Maharramova -Jurio -Zabalain -Ilurdoz -Menda -Anchoverri -Osteriz -Basque -Duquesne -Peeters -Blindeman -Piat -Raes -Delporte -Verplancke -Vandevelde -Carton -Basak -Khuro -Sastri -Thakur -Chakraborty -Paramahamsa -Mazumdar -Momen -Sanu -Chatterjee -Saraswat -Ghosh -Rakib -Majumder -Terzic -Alagic -Topalovic -Bajramovic -Ivanovic -Vidovic -Yadanar -Nway -Myat -Naing -Ebot -Njoya -Ewaso -Lekeaka -Lukombo -Masumbuku -Mukendi -Dimonekene -Kosi -Linzenge -Nguo -Boko -Manoka -Gower -Pumphrey -Priddy -Clough -Sealy -Bethel -Ros -MacLeoir -MacCrum -Tsarnaeva -Khadzhiev -Maskhadov -Hamidov -Musaeva -Usamova -Xing -Feng -Qui -Zhang -Xun -Teng -Huang -Deng -Pan -Zhou -Kong -Cheng -Mao -Zou -Solic -Kopic -Paunovic -Papratovic -Spiljak -Marek -Capek -Prusik -Vecerova -Karaskova -Jansen -Ludvigsen -Bentsen -Berg -Jepsen -Karlsen -Ebbesen -Dogger -Bakker -Keulen -Harloff -Ossen -Storteboom -Vermeer -Gasner -Dam -Boer -Hurmann -Geerts -Cheverton -Goddard -Harpham -Ashpole -Hillyard -Lochty -Relish -Fernsby -Khepera -Nebka -Amemu -Neferu -Horemhebi -Kharatanekha -Anuketma -Cham -Bata -Tannous -Tuma -Asghar -Mallouf -Bishara -Aswan -Kouri -Hackeman -Bulstrode -Fane -Norwood -Goodstone -Milner -Parn -Teder -Sirel -Magi -Kask -Lepmets -Jogi -Girma -Abebe -Lebna -Anom -Feleke -Bereket -Selassie -Panaligan -Manalastas -Zoleta -Decatoria -Solonen -Paananen -Latvala -Kukkonen -Waris -Niemi -Kallo -Delon -Allard -Renaud -Blanc -Gerin -Aubert -Geiger -Landry -Vannier -Saint-Yves -Gauthier -Ehrenfest -Konig -Kindler -Ruhl -Voigt -Rickenbacker -Strasburger -Stratos -Rota -Economos -Romanos -Hallos -Floros -Fotopoulos -Constantinos -Stamou -Demetrios -Stavropoulos -Demetriou -Panagopoulou -Desai -Vyas -Chudasama -Kotak -Tripathi -Bhansali -Chitalia -Sarabhai -Modi -Adani -Silberstein -Dresner -Cohen -Metz -Bashevis -Laski -Yedidyah -Ginsberg -Levinstein -Abraham -Federman -Adler -Gottesman -Rabinowicz -Seth -Vad -Mahanta -Chadda -Bhaumik -Jadhav -Dvivedi -Lata -Poddar -Talavalakar -Satavelekar -Mudaliyar -Nayar -Nan -Tsab -Chue -Wong -Thao -Thai -Song -Finnsson -Finnsdottir -Kristvinsson -Krisovinsdottir -Ingvaldsson -Ingvaldsdottir -Abelsson -Abelsdottir -Sigurdsson -Sigurdsdottir -Holmsson -Holmsdottir -Chidey -Onuchukwu -Akachi -Mazzi -Onyekachi -Ndulu -Ngozi -Obasi -Jajah -Uchechea -Zebenjo -Ishida -Ito -Matsushita -Yoshimi -Horikiri -Sakai -Kase -Watari -Tano -Fuji -Okada -Yadama -Yagami -Homura -Tanimoto -Kugo -Fuse -Sugita -Naya -Hamakawa -Kobayashi -Serikov -Fauskeev -Yerbolatev -Ayatova -Ericova -Khazretgaliev -Baurzhanova -Khemera -Nhean -Narith -Sourkea -Visal -Poeu -Kalliyan -Akara -Chantou -Rachana -Kunthea -Rasmey -Nuon -Akash -Vrsiini -Ijay -Navin -Ikshu -Asheesh -Harihar -Paramartha -Mukesh -Ngendo -Mumbi -Murugi -Kioni -Nyagura -Njambi -Mugo -Kiongo -Mburu -Sook -Eon -Ri -So-Yung -So-Ri -Dae-Jung -Jin -Joon -Yong -Yung -Scaro -Decius -Geta -Nero -Natalis -Pollienus -Docilus -Castus -Nerva -Siyavong -Chanthraphone -Sengtavisouk -Thonemany -Vatthana -Keobunta -Savang -Rattanavongsa -Khanthavong -Lapsina -Lodina -Caune -Veiss -Ozers -Lielmanis -Lidaks -Rubenis -Tucs -Bekeryte -Vaiciute -Pakeryte -Maczinskiene -Pretkelis -Naidicas -Suksta -Kanapickas -Straksys -Remeza -Kantautine -Leipute -Ogutu -Ondiek -Were -Kowa -Sialo -Ochola -Obonyo -Akelo -Hongo -Julu -Oduyu -Orombi -Noh -Che -Dhareef -Taufan -Petera -Witika -Pikari -Enoka -Timoti -Piripi -Arona -Romana -Natana -Kapale -Agarkar -Karve -Rasam -Deshmane -Sonarkar -Lagu -Shinde -Javkar -Sawant -Ranganakar -Hardas -Pawgi -Sibari -Khatibi -Mernissi -Bikri -Samie -Zniber -Lemsih -Wasti -Subba -Karkee -Pandeya -Belbase -Rawal -Osland -Thygesen -Reiten -Davidsen -Haller -Tofte -Pettersen -Island -Handeland -Saltvik -Bakke -Hotvedt -Kampen -Vangsness -Fjerstad -Underberg -Munch -Lodhra -Ansari -Banday -Karlal -Hameed -Sarpara -Bhatti -Tareen -Marri -Kirmani -Daudpota -Ghazali -Mangi -Vele -Paiyo -Apa -Henao -Kasi -Injia -Kewa -Tajik -Raad -Vakili -Mashayekhi -Hosseini -Panahi -Rashidi -Fallah -Mostofi -Kasebi -Afshani -Boromand -Qaderi -Safavi -Golshani -Barbarz -Bina -Raoufi -Ahangar -Kabat -Loszowska -Ras -Murawska -Kwasny -Halas -Kabacinska -Maszowska -Rojek -Maczko -Makos -Hodor -Kapitan -Sirek -Kopinski -Cordeiro -Seixas -Tavares -Carneiro -Neves -Queiroz -Nunes -Hind -Abril -Baptista -Montenegro -Azevedo -Sousa -Bandiera -Barboza -Dhir -Gora -Tott -Tatran -Jhaal -Motsara -Dhama -Bhadu -Bargoti -Sherred -Heron -Jell -Kitt -Driskin -Ilica -Gupta -Cristea -Ragar -Lascar -Troester -Rosetti -Bus -Dita -Trelles -Macek -Moscovici -Gavrikova -Bylinkaina -Stepnova -Kaverina -Antipov -Vadimovich -Pavlovich -Victorovna -Denisovna -Panina -Desyatkova -Burkov -Kuzkin -Dmitrivich -Rusakov -Safenu -Niu -Savali -Pelesa -Tilo -Pule -Lotomau -Milovic -Jelic -Pesic -Zoric -Ristovski -Karanovic -Pejakovski -Janketic -Kovacova -Tesarova -Botosova -Bartos -Holub -Koren -Mokry -Ekholm -Wikstrom -Malmquist -Almgren -Westermark -Dahlman -Wallin -Mattson -Ostlund -Bjork -Linden -Stenbeck -Forslund -Sandstrom -Srinan -Natheep -Lithik -Shikan -Yasmith -Sayan -Venujayan -Palapol -Sudham -Kitjakarn -Montri -Singhapat -Gason -Wongsawat -Juntasa -Yao -Tahir -Sakir -Keles -Usta -Hasim -Karaduman -Bayat -Korkut -Altun -Nguyen -Chu -Hoang -Do -Huynh -Duong -Vu -Quang -Gunnsteinssen -Ketilssen -Skialgssen -Kotkelldottir -Ufidottir -Warydottir -Ragnarssen -Junhi -Rakhya -Bhander -Sadho -Rajwa -Kes -Dhesi -Sohi -Puriwal -Jawia -Hayre -Wains -Asar -Bati -Li -Truong -Jang -Wang -Ruan -Smirnova -Mammadov -Ailyev -Hasanov -Kazi -Mina -Pal -Saha -Roy -Dewan -Hasan -Islam -Wazen -Rohman -Akter -Banik -Bishwas -Chakma -Dey -Gazi -Shekh -Xu -Ho -Law -Lam -Zhu -Bedrize -Gill -Joshi -Babu -Dutta -Kumar -Patil -Mehta -Mittal -Pandit -Levi -Mizrachi -Peretz -Biton -Sato -Kato -Suzuki -Takahashi -Tanaka -Watanabe -Nakamura -Yamamoto -Kimura -Abe -Endo -Park -Shreshtha -Thapa -Navarro -Perara -Kumara -Gamage -Kaya -Demir -Gruber -Huber -Bauer -Wagner -Pichler -Moser -Mayer -Maier -Schuster -Ivanou -Kazlou -janssens -Maes -Jacobs -Mertens -Simon -Hodzic -Petrovic -Jovanovic -Dimitrov -Boyanov -Tasev -Nikolov -Gruev -Horvat -Kovacevic -Babic -Maric -Novak -Svoboda -Nielsen -Jensen -Pedersen -Sorensen -Tamm -Saar -Sepp -Joensen -Korhonen -Virtanen -Makinen -Laine -Salo -Dubois -Martin -Roux -Laurent -Mercier -Dupont -Lambert -Francois -Michel -Nagy -Giannopoulos -Kovacs -Horvath -Kiss -Byrne -Reilly -Doyle -Doherty -Rossi -Russo -Ferrari -Esposito -Bianchi -Colombo -Ricci -Rizzo -Leone -Conte -Neri -Caputo -Grassi -Monti -Krasniqi -Morina -Ozols -Berzins -Kazlauskas -Petrauskas -Jankauskas -Borg -Camilleri -Andov -Heaven -Bozinov -Rusu -Ceban -Popa -Bos -Vos -Hendriks -Dijkstra -Smits -Janse -Hansen -Johansen -Dahl -Lund -Nowak -Kowalski -Wisniewski -Wojak -Mazur -Wozniak -Silva -Jesus -Freitas -Radu -Stoica -Popov -Haven -Moreno -Sanz -Bernasconi -Fontana -Yilmaz -Melnyk -Shevchenko -Boyko -MacDonald -Driscoll -Mackintosh -Craig -MacLean -Cormack -Keenan -MacCulloch -Mackinnon -Tremblay -Jimenez -Gagnon -Mora -Solis -Tjon -Mars -Venus -Mercury -Luna -Ceres -Deimos -Phobos -Ganymede -Io -Europa -Amalthea -Himalia -Thebe -Elara -Pasiphae -Metis -Carme -Sinope -Lysithea -Ananke -Leda -Themisto -Praxidike -Locaste -Kalyke -Megaclite -Taygete -Callirrhoe -Autonoe -Harpalyke -Thyone -Hermippe -Chalende -Aoede -Eukalade -Isonoe -Helike -Carpo -Aitne -Eurydome -Hegomone -Arche -Euanthe -Sponde -Euporie -Mneme -Kore -Kallichore -Valetudo -Titan -Thea -Iapetus -Dione -Tethys -Enceladus -Mimas -Hyperion -Pheobe -Janus -Epimethus -Prometheus -Pandora -Siarnaq -Helene -Albiorix -Atlas -Telesto -Paaliaq -Calypso -Ymir -Tarvos -Skathi -Narvi -Kari -Skoll -Bestla -Methone -Pallene -Anthe -Titania -Oberon -Umbriel -Ariel -Miranda -Sycorax -Puck -Portia -Juliet -Caliban -Belinda -Rosalina -Bianca -Cupid -Mab -Triton -Proteus -Larissa -Halimede -Sao -Charon -Hydra -Nix -Kerberos -Styx -Jupiter -Saturn -Uranus -Neptune -Pluto -Orcus -Haumea -Quaoar -Makemake -Eris -Salacia -Sedna -Nova -Trask -Ripley -Kilroy -Simms -Winters -Renard -Reeves -Looper -Cassini -Juno -Dawn -Kepler -Akatsuki -Ofako -Zeng -Fong -Said -Halward -Tetsuo -Onishi -Link -Score -Asimov -Strugatsky -Gort -Gallagher -Nimrod -Jovian -Crichton -Andromeda -Llewellyn -Naylor -Thorax -Curie -Zisa -Zax -Aegis -Bishop -Alpha -Omega -Delta -Ohm -Cain -Brax -Bracket -Bolt -Weld -Apogee -Gliese -Zeta -Leporis -Barnard -Vega +Whittier +Dimeling +Blaine +Dennis +Adams +Rader +Murray +Millhouse +Ludwig +Burris +Shupe +Mary +Zadovsky +Philips +Wise +Gronko +Jardine +Black +Mitchell +Enderly +Stall +Harrow +Atweeke +Sealis +Conrad +Lucy +Stewart +Green +Feufer +Warren +Campbell +Shafer +Woodworth +Magor +Logue +Reichard +Day +Dugmore +Greenawalt +Jyllian +Osterwise +Styles +Cavalet +Garneys +Raub +Sholl +Chauvin +Poley +Todd +Brandenburg +Baer +Pritchard +Pinney +Kadel +Anderson +Clarke +Hunt +Gadow +Stough +Marcotte +Brooks +Watson +Nash +Sheets +Ashbaugh +Zimmer +Noton +Dean +Fleming +Draudy +Bluetenberger +Fischer +Hawkins +Poehl +Addison +Mcintosh +Keppel +Kimple +Alice +Stone +Fiscina +Leichter +Wile +Callison +Cowper +Harrold +Carr +Eckhardstein +Wilkerson +Shirey +Benford +Reade +Baskett +Seidner +Gettemy +Joyce +Judge +Burkett +Kiefer +Carmichael +Hirleman +Wells +Isemann +Cressman +Highlands +Briggs +Rowley +Coldsmith +Berkheimer +Hill +Maclagan +Mcfall +Mens +Braun +James +Sloan +Bould +Overstreet +Kanaga +Polson +Finlay +Sandys +Bousum +Howard +Treeby +Stainforth +Werner +Sulyard +Marriman +Weinstein +Butterfill +Mason +Coates +Peters +Gregory +Wilo +Edwards +Barnes +Harding +Tireman +Lombardi +Roberts +Faqua +Basmanoff +Mccune +Mckendrick +Oppenheimer +Oneal +Focell +Tedrow +Fields +Ryals +Best +Zaun +Knapp +Linton +Jackson +Bullard +Mcloskey +Zoucks +Heckendora +Hoenshell +Woollard +Mueller +Burns +Franks +Goodman +Stern +Robinson +Hooker +David +Fitzgerald +Vanleer +Beach +Flickinger +Metzer +Bynum +Stafford +Osteen +Johnson +Paynter +Thomlinson +Simmons +Basinger +Fisher +Bunten +Compton +Archibald +Catherina +Rahl +Bowchiew +Tennant +Mccullough +Margaret +Schaeffer +Sommer +Beail +Merryman +Knapenberger +Patterson +Houston +Lacon +Levett +Sullivan +Sidower +Laborde +Stroh +Hice +Biery +Christman +Staymates +Sauter +Snyder +Bratton +Sybilla +Altmann +Mathews +Newbern +Baker +Kemble +Mingle +Unk +Otis +Quinn +Bell +Wood +Ullman +Bicknell +Gibson +Rohtin +Wallick +Eggbert +Losey +Neely +Catleay +McDonald +Beedell +Williamson +Bennett +Potter +Caldwell +Lowe +Durstine +King +Gardner +Ulery +Rifler +Trovato +Thomas +Nehling +Baum +Werry +Mcmullen +Koster +Willey +Mildred +Straub +Haynes +Baxter +Ackerley +Greene +Atkinson +Davis +Weeter +Milne +Leech +Clewett +Ewing +Hook +Reighner +Welty +Jenkins +Swarner +Hawker +Agg +Batten +Cherry +Shaffer +Yeskey +Stephenson +Pycroft +Larson +Joghs +Keener +Christopher +Roadman +Echard +Priebe +Auman +Kemerer +Sutton +Prechtl +Cowart +Ringer +Garratt +Siegrist +Seelig +Lafortune +Dryfus +Isaman +Teagarden +Evans +Wolfe +Fiddler +Jowers +Aultman +Olphert +Howe +Leslie +Stocker +Bode +Whirlow +Ann +Mcclymonds +Guess +Taggart +Pratt +Moon +Huey +Hegarty +Meyers +Stahl +Nickolson +Mortland +Perkins +Thorley +Fuchs +Ray +Schrader +Kellogg +Woodward +Faust +Roby +Bashline +Cypret +Laurenzi +Minnie +Houser +Langston +Barrett +Wible +Hujsak +Wardle +Pershing +Kuster +Driggers +Wheeler +Garland +Alliman +Hoover +Camp +Hall +Parkinson +Swabey +Mull +Cox +Hanford +Stange +Wolff +Jesse +Brinigh +Koepple +Schmidt +Muller +Schofield +Zalack +Pfeifer +Fea +Blackburn +Ward +Kifer +Costello +Donkin +Osterweis +Brindle +Llora +Duncan +Ehret +Fryer +Summy +Richards +Boyer +Hutton +Mosser +Lester +Stroble +Randolph +Lord +Scott +Nicholas +Smail +Ratcliff +Riggle +Newton +Sanders +Lauffer +Aggley +Moberly +Hynes +Pennington +Woolery +Hardie +Blessig +Tanner +Demuth +Fraser +Henry +Shick +Ironmonger +Scherer +Field +Prevatt +Earl +Paulson +Curry +Powers +Rosensteel +Hoopengarner +Weisgarber +Elliott +Pearsall +Lowstetter +Holdeman +Kepplinger +Bloise +Hunter +Glover +Hayhurst +Wentzel +Owens +Smith +Steele +Leach +Armstrong +Easter +Greenwood +Buzzard +Eliza +Rockwell +Zeal +Harshman +Northey +Tilton +Richter +Moore +Jerome +Hardy +Bickerson +White +Beck +Waldron +Fulton +Miller +Sandford +Hughes +Winton +Digson +Byers +Hincken +Shaner +Whiteman +Lineman +Albright +Hastings +Elderson +Garrison +Rose +Kelley +Quirin +Dickinson +Young +Ramos +Jewell +Endsley +Briner +Jenner +Saylor +Bash +Blyant +Rhinehart +Prescott +Kirkson +Picard +Riker +Spock +Skywalker +Vader +Muggins +Buttersworth +Stamos +Sagan +Hawking +Dawkins +Goebbles +McShain +McDonohugh +Power +Jones +Williams +Brown +Taylor +Davies +Wilson +Walker +Wright +Thompson +Patel +Martins +Lewis +Harris +Clark +Turner +Cooper +Morris +Morgan +Harrison +Kelly +Allen +Phillips +Lee +Parker +Simpson +Griffiths +Shaw +Price +Cook +Richardson +Marshall +Begum +Murphy +Khan +Gray +Collins +Bailey +Carter +Robertson +Graham +Singh +Hussain +Ellis +Wilkinson +Foster +Thomson +Russell +Ali +Reid +Rathens +Rathen +Chapman +Powell +Owen +Ahmed +Rogers +Webb +Holmes +Mills +Matthews +Palmer +Lloyd +Kaur +Ivanov +Smirnov +Vasilyev +Petrov +Kuznetsov +Mikhaylov +Pavlov +Semenov +Andreev +Alekseev +Mali +Troshani +Nano +Kupi +Syla +Lucca +Hasani +Khalef +Benita +Fahas +Seghir +Ziani +Saadi +Beghal +Yamin +Mousa +Bilal +Khalaf +Zafar +Salman +Naderi +Usman +Al-Hassen +El-Salame +Al-Fadel +El-Shaer +El-Amini +Al-Miah +Al-Meskin +El-Nazar +Villar +Caceres +Dominguez +Ortiz +Vidal +Escobar +Schiavone +Hagopian +Petrosian +Baronian +Kostanian +Ismailyan +Jamshidova +Kyrimsoy +Maharramova +Jurio +Zabalain +Ilurdoz +Menda +Anchoverri +Osteriz +Basque +Duquesne +Peeters +Blindeman +Piat +Raes +Delporte +Verplancke +Vandevelde +Carton +Basak +Khuro +Sastri +Thakur +Chakraborty +Paramahamsa +Mazumdar +Momen +Sanu +Chatterjee +Saraswat +Ghosh +Rakib +Majumder +Terzic +Alagic +Topalovic +Bajramovic +Ivanovic +Vidovic +Yadanar +Nway +Myat +Naing +Ebot +Njoya +Ewaso +Lekeaka +Lukombo +Masumbuku +Mukendi +Dimonekene +Kosi +Linzenge +Nguo +Boko +Manoka +Gower +Pumphrey +Priddy +Clough +Sealy +Bethel +Ros +MacLeoir +MacCrum +Tsarnaeva +Khadzhiev +Maskhadov +Hamidov +Musaeva +Usamova +Xing +Feng +Qui +Zhang +Xun +Teng +Huang +Deng +Pan +Zhou +Kong +Cheng +Mao +Zou +Solic +Kopic +Paunovic +Papratovic +Spiljak +Marek +Capek +Prusik +Vecerova +Karaskova +Jansen +Ludvigsen +Bentsen +Berg +Jepsen +Karlsen +Ebbesen +Dogger +Bakker +Keulen +Harloff +Ossen +Storteboom +Vermeer +Gasner +Dam +Boer +Hurmann +Geerts +Cheverton +Goddard +Harpham +Ashpole +Hillyard +Lochty +Relish +Fernsby +Khepera +Nebka +Amemu +Neferu +Horemhebi +Kharatanekha +Anuketma +Cham +Bata +Tannous +Tuma +Asghar +Mallouf +Bishara +Aswan +Kouri +Hackeman +Bulstrode +Fane +Norwood +Goodstone +Milner +Parn +Teder +Sirel +Magi +Kask +Lepmets +Jogi +Girma +Abebe +Lebna +Anom +Feleke +Bereket +Selassie +Panaligan +Manalastas +Zoleta +Decatoria +Solonen +Paananen +Latvala +Kukkonen +Waris +Niemi +Kallo +Delon +Allard +Renaud +Blanc +Gerin +Aubert +Geiger +Landry +Vannier +Saint-Yves +Gauthier +Ehrenfest +Konig +Kindler +Ruhl +Voigt +Rickenbacker +Strasburger +Stratos +Rota +Economos +Romanos +Hallos +Floros +Fotopoulos +Constantinos +Stamou +Demetrios +Stavropoulos +Demetriou +Panagopoulou +Desai +Vyas +Chudasama +Kotak +Tripathi +Bhansali +Chitalia +Sarabhai +Modi +Adani +Silberstein +Dresner +Cohen +Metz +Bashevis +Laski +Yedidyah +Ginsberg +Levinstein +Abraham +Federman +Adler +Gottesman +Rabinowicz +Seth +Vad +Mahanta +Chadda +Bhaumik +Jadhav +Dvivedi +Lata +Poddar +Talavalakar +Satavelekar +Mudaliyar +Nayar +Nan +Tsab +Chue +Wong +Thao +Thai +Song +Finnsson +Finnsdottir +Kristvinsson +Krisovinsdottir +Ingvaldsson +Ingvaldsdottir +Abelsson +Abelsdottir +Sigurdsson +Sigurdsdottir +Holmsson +Holmsdottir +Chidey +Onuchukwu +Akachi +Mazzi +Onyekachi +Ndulu +Ngozi +Obasi +Jajah +Uchechea +Zebenjo +Ishida +Ito +Matsushita +Yoshimi +Horikiri +Sakai +Kase +Watari +Tano +Fuji +Okada +Yadama +Yagami +Homura +Tanimoto +Kugo +Fuse +Sugita +Naya +Hamakawa +Kobayashi +Serikov +Fauskeev +Yerbolatev +Ayatova +Ericova +Khazretgaliev +Baurzhanova +Khemera +Nhean +Narith +Sourkea +Visal +Poeu +Kalliyan +Akara +Chantou +Rachana +Kunthea +Rasmey +Nuon +Akash +Vrsiini +Ijay +Navin +Ikshu +Asheesh +Harihar +Paramartha +Mukesh +Ngendo +Mumbi +Murugi +Kioni +Nyagura +Njambi +Mugo +Kiongo +Mburu +Sook +Eon +Ri +So-Yung +So-Ri +Dae-Jung +Jin +Joon +Yong +Yung +Scaro +Decius +Geta +Nero +Natalis +Pollienus +Docilus +Castus +Nerva +Siyavong +Chanthraphone +Sengtavisouk +Thonemany +Vatthana +Keobunta +Savang +Rattanavongsa +Khanthavong +Lapsina +Lodina +Caune +Veiss +Ozers +Lielmanis +Lidaks +Rubenis +Tucs +Bekeryte +Vaiciute +Pakeryte +Maczinskiene +Pretkelis +Naidicas +Suksta +Kanapickas +Straksys +Remeza +Kantautine +Leipute +Ogutu +Ondiek +Were +Kowa +Sialo +Ochola +Obonyo +Akelo +Hongo +Julu +Oduyu +Orombi +Noh +Che +Dhareef +Taufan +Petera +Witika +Pikari +Enoka +Timoti +Piripi +Arona +Romana +Natana +Kapale +Agarkar +Karve +Rasam +Deshmane +Sonarkar +Lagu +Shinde +Javkar +Sawant +Ranganakar +Hardas +Pawgi +Sibari +Khatibi +Mernissi +Bikri +Samie +Zniber +Lemsih +Wasti +Subba +Karkee +Pandeya +Belbase +Rawal +Osland +Thygesen +Reiten +Davidsen +Haller +Tofte +Pettersen +Island +Handeland +Saltvik +Bakke +Hotvedt +Kampen +Vangsness +Fjerstad +Underberg +Munch +Lodhra +Ansari +Banday +Karlal +Hameed +Sarpara +Bhatti +Tareen +Marri +Kirmani +Daudpota +Ghazali +Mangi +Vele +Paiyo +Apa +Henao +Kasi +Injia +Kewa +Tajik +Raad +Vakili +Mashayekhi +Hosseini +Panahi +Rashidi +Fallah +Mostofi +Kasebi +Afshani +Boromand +Qaderi +Safavi +Golshani +Barbarz +Bina +Raoufi +Ahangar +Kabat +Loszowska +Ras +Murawska +Kwasny +Halas +Kabacinska +Maszowska +Rojek +Maczko +Makos +Hodor +Kapitan +Sirek +Kopinski +Cordeiro +Seixas +Tavares +Carneiro +Neves +Queiroz +Nunes +Hind +Abril +Baptista +Montenegro +Azevedo +Sousa +Bandiera +Barboza +Dhir +Gora +Tott +Tatran +Jhaal +Motsara +Dhama +Bhadu +Bargoti +Sherred +Heron +Jell +Kitt +Driskin +Ilica +Gupta +Cristea +Ragar +Lascar +Troester +Rosetti +Bus +Dita +Trelles +Macek +Moscovici +Gavrikova +Bylinkaina +Stepnova +Kaverina +Antipov +Vadimovich +Pavlovich +Victorovna +Denisovna +Panina +Desyatkova +Burkov +Kuzkin +Dmitrivich +Rusakov +Safenu +Niu +Savali +Pelesa +Tilo +Pule +Lotomau +Milovic +Jelic +Pesic +Zoric +Ristovski +Karanovic +Pejakovski +Janketic +Kovacova +Tesarova +Botosova +Bartos +Holub +Koren +Mokry +Ekholm +Wikstrom +Malmquist +Almgren +Westermark +Dahlman +Wallin +Mattson +Ostlund +Bjork +Linden +Stenbeck +Forslund +Sandstrom +Srinan +Natheep +Lithik +Shikan +Yasmith +Sayan +Venujayan +Palapol +Sudham +Kitjakarn +Montri +Singhapat +Gason +Wongsawat +Juntasa +Yao +Tahir +Sakir +Keles +Usta +Hasim +Karaduman +Bayat +Korkut +Altun +Nguyen +Chu +Hoang +Do +Huynh +Duong +Vu +Quang +Gunnsteinssen +Ketilssen +Skialgssen +Kotkelldottir +Ufidottir +Warydottir +Ragnarssen +Junhi +Rakhya +Bhander +Sadho +Rajwa +Kes +Dhesi +Sohi +Puriwal +Jawia +Hayre +Wains +Asar +Bati +Li +Truong +Jang +Wang +Ruan +Smirnova +Mammadov +Ailyev +Hasanov +Kazi +Mina +Pal +Saha +Roy +Dewan +Hasan +Islam +Wazen +Rohman +Akter +Banik +Bishwas +Chakma +Dey +Gazi +Shekh +Xu +Ho +Law +Lam +Zhu +Bedrize +Gill +Joshi +Babu +Dutta +Kumar +Patil +Mehta +Mittal +Pandit +Levi +Mizrachi +Peretz +Biton +Sato +Kato +Suzuki +Takahashi +Tanaka +Watanabe +Nakamura +Yamamoto +Kimura +Abe +Endo +Park +Shreshtha +Thapa +Navarro +Perara +Kumara +Gamage +Kaya +Demir +Gruber +Huber +Bauer +Wagner +Pichler +Moser +Mayer +Maier +Schuster +Ivanou +Kazlou +janssens +Maes +Jacobs +Mertens +Simon +Hodzic +Petrovic +Jovanovic +Dimitrov +Boyanov +Tasev +Nikolov +Gruev +Horvat +Kovacevic +Babic +Maric +Novak +Svoboda +Nielsen +Jensen +Pedersen +Sorensen +Tamm +Saar +Sepp +Joensen +Korhonen +Virtanen +Makinen +Laine +Salo +Dubois +Martin +Roux +Laurent +Mercier +Dupont +Lambert +Francois +Michel +Nagy +Giannopoulos +Kovacs +Horvath +Kiss +Byrne +Reilly +Doyle +Doherty +Rossi +Russo +Ferrari +Esposito +Bianchi +Colombo +Ricci +Rizzo +Leone +Conte +Neri +Caputo +Grassi +Monti +Krasniqi +Morina +Ozols +Berzins +Kazlauskas +Petrauskas +Jankauskas +Borg +Camilleri +Andov +Heaven +Bozinov +Rusu +Ceban +Popa +Bos +Vos +Hendriks +Dijkstra +Smits +Janse +Hansen +Johansen +Dahl +Lund +Nowak +Kowalski +Wisniewski +Wojak +Mazur +Wozniak +Silva +Jesus +Freitas +Radu +Stoica +Popov +Haven +Moreno +Sanz +Bernasconi +Fontana +Yilmaz +Melnyk +Shevchenko +Boyko +MacDonald +Driscoll +Mackintosh +Craig +MacLean +Cormack +Keenan +MacCulloch +Mackinnon +Tremblay +Jimenez +Gagnon +Mora +Solis +Tjon +Mars +Venus +Mercury +Luna +Ceres +Deimos +Phobos +Ganymede +Io +Europa +Amalthea +Himalia +Thebe +Elara +Pasiphae +Metis +Carme +Sinope +Lysithea +Ananke +Leda +Themisto +Praxidike +Locaste +Kalyke +Megaclite +Taygete +Callirrhoe +Autonoe +Harpalyke +Thyone +Hermippe +Chalende +Aoede +Eukalade +Isonoe +Helike +Carpo +Aitne +Eurydome +Hegomone +Arche +Euanthe +Sponde +Euporie +Mneme +Kore +Kallichore +Valetudo +Titan +Thea +Iapetus +Dione +Tethys +Enceladus +Mimas +Hyperion +Pheobe +Janus +Epimethus +Prometheus +Pandora +Siarnaq +Helene +Albiorix +Atlas +Telesto +Paaliaq +Calypso +Ymir +Tarvos +Skathi +Narvi +Kari +Skoll +Bestla +Methone +Pallene +Anthe +Titania +Oberon +Umbriel +Ariel +Miranda +Sycorax +Puck +Portia +Juliet +Caliban +Belinda +Rosalina +Bianca +Cupid +Mab +Triton +Proteus +Larissa +Halimede +Sao +Charon +Hydra +Nix +Kerberos +Styx +Jupiter +Saturn +Uranus +Neptune +Pluto +Orcus +Haumea +Quaoar +Makemake +Eris +Salacia +Sedna +Nova +Trask +Ripley +Kilroy +Simms +Winters +Renard +Reeves +Looper +Cassini +Juno +Dawn +Kepler +Akatsuki +Ofako +Zeng +Fong +Said +Halward +Tetsuo +Onishi +Link +Score +Asimov +Strugatsky +Gort +Gallagher +Nimrod +Jovian +Crichton +Andromeda +Llewellyn +Naylor +Thorax +Curie +Zisa +Zax +Aegis +Bishop +Alpha +Omega +Delta +Ohm +Cain +Brax +Bracket +Bolt +Weld +Apogee +Gliese +Zeta +Leporis +Barnard +Vega Altair \ No newline at end of file diff --git a/config/names/ninjaname.txt b/config/names/ninjaname.txt index 24d5d6879e..828bc17039 100644 --- a/config/names/ninjaname.txt +++ b/config/names/ninjaname.txt @@ -1,45 +1,45 @@ -Shadow -Sarutobi -Smoke -Rain -Scorpion -Zero -Ermac -Saibot -Sun -Moon -Cyrax -Raphael -Michaelangelo -Cloud -Donatello -Leonardo -Splinter -Shredder -Hazuki -Hien -Hiryu -Ryu -Hayabusa -Midnight -Seven -Hanzo -Blood -Iga -Koga -Hero -Hiro -Phantom -Baki -Ogre -Daemon -Goemon -Throat -Death -Aria -Bro -Fox -Null -Raiden -Samurai +Shadow +Sarutobi +Smoke +Rain +Scorpion +Zero +Ermac +Saibot +Sun +Moon +Cyrax +Raphael +Michaelangelo +Cloud +Donatello +Leonardo +Splinter +Shredder +Hazuki +Hien +Hiryu +Ryu +Hayabusa +Midnight +Seven +Hanzo +Blood +Iga +Koga +Hero +Hiro +Phantom +Baki +Ogre +Daemon +Goemon +Throat +Death +Aria +Bro +Fox +Null +Raiden +Samurai Eater \ No newline at end of file diff --git a/config/names/ninjatitle.txt b/config/names/ninjatitle.txt index 966204bb4d..429425ca8e 100644 --- a/config/names/ninjatitle.txt +++ b/config/names/ninjatitle.txt @@ -1,46 +1,46 @@ -Master -Sensei -Swift -Merciless -Assassin -Rogue -Hunter -Widower -Orphaner -Stalker -Killer -Silent -Silencing -Quick -Agile -Merciful -Ninja -Shinobi -Initiate -Grandmaster -Strider -Striker -Slayer -Awesome -Ender -Dr. -Night -Crimson -Grappler -Ulimate -Remorseless -Deep -Dragon -Cruel -Nightshade -Black -Gray -Solid -Liquid -Solidus -Steel -Nickel -Silver -Singing -Snake +Master +Sensei +Swift +Merciless +Assassin +Rogue +Hunter +Widower +Orphaner +Stalker +Killer +Silent +Silencing +Quick +Agile +Merciful +Ninja +Shinobi +Initiate +Grandmaster +Strider +Striker +Slayer +Awesome +Ender +Dr. +Night +Crimson +Grappler +Ulimate +Remorseless +Deep +Dragon +Cruel +Nightshade +Black +Gray +Solid +Liquid +Solidus +Steel +Nickel +Silver +Singing +Snake Acid \ No newline at end of file diff --git a/config/names/verbs.txt b/config/names/verbs.txt index e036e3c1da..5bb8d6e313 100644 --- a/config/names/verbs.txt +++ b/config/names/verbs.txt @@ -1,633 +1,633 @@ -accept -add -admire -admit -advise -afford -agree -alert -allow -amuse -analyse -announce -annoy -answer -apologise -appear -applaud -appreciate -approve -argue -arrange -arrest -arrive -ask -attach -attack -attempt -attend -attract -avoid -back -bake -balance -ban -bang -bare -bat -bathe -battle -beam -beg -behave -belong -bleach -bless -blind -blink -blot -blush -boast -boil -bolt -bomb -book -bore -borrow -bounce -bow -box -brake -brake -branch -breathe -bruise -brush -bubble -bump -burn -bury -buzz -calculate -call -camp -care -carry -carve -cause -challenge -change -charge -chase -cheat -check -cheer -chew -choke -chop -claim -clap -clean -clear -clip -close -coach -coil -collect -colour -comb -command -communicate -compare -compete -complain -complete -concentrate -concern -confess -confuse -connect -consider -consist -contain -continue -copy -correct -cough -count -cover -crack -crash -crawl -cross -crush -cry -cure -curl -curve -cycle -dam -damage -dance -dare -decay -deceive -decide -decorate -delay -delight -deliver -depend -describe -desert -deserve -destroy -detect -develop -disagree -disappear -disapprove -disarm -discover -dislike -divide -double -doubt -drag -drain -dream -dress -drip -drop -drown -drum -dry -dust -earn -educate -embarrass -employ -empty -encourage -end -enjoy -enter -entertain -escape -examine -excite -excuse -exercise -exist -expand -expect -explain -explode -extend -face -fade -fail -fancy -fasten -fax -fear -fence -fetch -file -fill -film -fire -fit -fix -flap -flash -float -flood -flow -flower -fold -follow -fool -force -form -found -frame -frighten -fry -gather -gaze -glow -glue -grab -grate -grease -greet -grin -grip -groan -guarantee -guard -guess -guide -hammer -hand -handle -hang -happen -harass -harm -hate -haunt -head -heal -heap -heat -help -hook -hop -hope -hover -hug -hum -hunt -hurry -identify -ignore -imagine -impress -improve -include -increase -influence -inform -inject -injure -instruct -intend -interest -interfere -interrupt -introduce -invent -invite -irritate -itch -jail -jam -jog -join -joke -judge -juggle -jump -kick -kill -kiss -kneel -knit -knock -knot -label -land -last -laugh -launch -learn -level -license -lick -lie -lighten -like -list -listen -live -load -lock -long -look -love -man -manage -march -mark -marry -match -mate -matter -measure -meddle -melt -memorise -mend -messup -milk -mine -miss -mix -moan -moor -mourn -move -muddle -mug -multiply -murder -nail -name -need -nest -nod -note -notice -number -obey -object -observe -obtain -occur -offend -offer -open -order -overflow -owe -own -pack -paddle -paint -park -part -pass -paste -pat -pause -peck -pedal -peel -peep -perform -permit -phone -pick -pinch -pine -place -plan -plant -play -please -plug -point -poke -polish -pop -possess -post -pour -practise -pray -preach -precede -prefer -prepare -present -preserve -press -pretend -prevent -prick -print -produce -program -promise -protect -provide -pull -pump -punch -puncture -punish -push -question -queue -race -radiate -rain -raise -reach -realise -receive -recognise -record -reduce -reflect -refuse -regret -reign -reject -rejoice -relax -release -rely -remain -remember -remind -remove -repair -repeat -replace -reply -report -reproduce -request -rescue -retire -return -rhyme -rinse -risk -rob -rock -roll -rot -rub -ruin -rule -rush -sack -sail -satisfy -save -saw -scare -scatter -scold -scorch -scrape -scratch -scream -screw -scribble -scrub -seal -search -separate -serve -settle -shade -share -shave -shelter -shiver -shock -shop -shrug -sigh -sign -signal -sin -sip -ski -skip -slap -slip -slow -smash -smell -smile -smoke -snatch -sneeze -sniff -snore -snow -soak -soothe -sound -spare -spark -sparkle -spell -spill -spoil -spot -spray -sprout -squash -squeak -squeal -squeeze -stain -stamp -stare -start -stay -steer -step -stir -stitch -stop -store -strap -strengthen -stretch -strip -stroke -stuff -subtract -succeed -suck -suffer -suggest -suit -supply -support -suppose -surprise -surround -suspect -suspend -switch -talk -tame -tap -taste -tease -telephone -tempt -terrify -test -thank -thaw -tick -tickle -tie -time -tip -tire -touch -tour -tow -trace -trade -train -transport -trap -travel -treat -tremble -trick -trip -trot -trouble -trust -try -tug -tumble -turn -twist -type -undress -unfasten -unite -unlock -unpack -untidy -use -vanish -visit -wail -wait -walk -wander -want -warm -warn -wash -waste -watch -water -wave -weigh -welcome -whine -whip -whirl -whisper -whistle -wink -wipe -wish -wobble -wonder -work -worry -wrap -wreck -wrestle -wriggle -yawn -yell -zip +accept +add +admire +admit +advise +afford +agree +alert +allow +amuse +analyse +announce +annoy +answer +apologise +appear +applaud +appreciate +approve +argue +arrange +arrest +arrive +ask +attach +attack +attempt +attend +attract +avoid +back +bake +balance +ban +bang +bare +bat +bathe +battle +beam +beg +behave +belong +bleach +bless +blind +blink +blot +blush +boast +boil +bolt +bomb +book +bore +borrow +bounce +bow +box +brake +brake +branch +breathe +bruise +brush +bubble +bump +burn +bury +buzz +calculate +call +camp +care +carry +carve +cause +challenge +change +charge +chase +cheat +check +cheer +chew +choke +chop +claim +clap +clean +clear +clip +close +coach +coil +collect +colour +comb +command +communicate +compare +compete +complain +complete +concentrate +concern +confess +confuse +connect +consider +consist +contain +continue +copy +correct +cough +count +cover +crack +crash +crawl +cross +crush +cry +cure +curl +curve +cycle +dam +damage +dance +dare +decay +deceive +decide +decorate +delay +delight +deliver +depend +describe +desert +deserve +destroy +detect +develop +disagree +disappear +disapprove +disarm +discover +dislike +divide +double +doubt +drag +drain +dream +dress +drip +drop +drown +drum +dry +dust +earn +educate +embarrass +employ +empty +encourage +end +enjoy +enter +entertain +escape +examine +excite +excuse +exercise +exist +expand +expect +explain +explode +extend +face +fade +fail +fancy +fasten +fax +fear +fence +fetch +file +fill +film +fire +fit +fix +flap +flash +float +flood +flow +flower +fold +follow +fool +force +form +found +frame +frighten +fry +gather +gaze +glow +glue +grab +grate +grease +greet +grin +grip +groan +guarantee +guard +guess +guide +hammer +hand +handle +hang +happen +harass +harm +hate +haunt +head +heal +heap +heat +help +hook +hop +hope +hover +hug +hum +hunt +hurry +identify +ignore +imagine +impress +improve +include +increase +influence +inform +inject +injure +instruct +intend +interest +interfere +interrupt +introduce +invent +invite +irritate +itch +jail +jam +jog +join +joke +judge +juggle +jump +kick +kill +kiss +kneel +knit +knock +knot +label +land +last +laugh +launch +learn +level +license +lick +lie +lighten +like +list +listen +live +load +lock +long +look +love +man +manage +march +mark +marry +match +mate +matter +measure +meddle +melt +memorise +mend +messup +milk +mine +miss +mix +moan +moor +mourn +move +muddle +mug +multiply +murder +nail +name +need +nest +nod +note +notice +number +obey +object +observe +obtain +occur +offend +offer +open +order +overflow +owe +own +pack +paddle +paint +park +part +pass +paste +pat +pause +peck +pedal +peel +peep +perform +permit +phone +pick +pinch +pine +place +plan +plant +play +please +plug +point +poke +polish +pop +possess +post +pour +practise +pray +preach +precede +prefer +prepare +present +preserve +press +pretend +prevent +prick +print +produce +program +promise +protect +provide +pull +pump +punch +puncture +punish +push +question +queue +race +radiate +rain +raise +reach +realise +receive +recognise +record +reduce +reflect +refuse +regret +reign +reject +rejoice +relax +release +rely +remain +remember +remind +remove +repair +repeat +replace +reply +report +reproduce +request +rescue +retire +return +rhyme +rinse +risk +rob +rock +roll +rot +rub +ruin +rule +rush +sack +sail +satisfy +save +saw +scare +scatter +scold +scorch +scrape +scratch +scream +screw +scribble +scrub +seal +search +separate +serve +settle +shade +share +shave +shelter +shiver +shock +shop +shrug +sigh +sign +signal +sin +sip +ski +skip +slap +slip +slow +smash +smell +smile +smoke +snatch +sneeze +sniff +snore +snow +soak +soothe +sound +spare +spark +sparkle +spell +spill +spoil +spot +spray +sprout +squash +squeak +squeal +squeeze +stain +stamp +stare +start +stay +steer +step +stir +stitch +stop +store +strap +strengthen +stretch +strip +stroke +stuff +subtract +succeed +suck +suffer +suggest +suit +supply +support +suppose +surprise +surround +suspect +suspend +switch +talk +tame +tap +taste +tease +telephone +tempt +terrify +test +thank +thaw +tick +tickle +tie +time +tip +tire +touch +tour +tow +trace +trade +train +transport +trap +travel +treat +tremble +trick +trip +trot +trouble +trust +try +tug +tumble +turn +twist +type +undress +unfasten +unite +unlock +unpack +untidy +use +vanish +visit +wail +wait +walk +wander +want +warm +warn +wash +waste +watch +water +wave +weigh +welcome +whine +whip +whirl +whisper +whistle +wink +wipe +wish +wobble +wonder +work +worry +wrap +wreck +wrestle +wriggle +yawn +yell +zip zoom \ No newline at end of file diff --git a/config/names/wizardfirst.txt b/config/names/wizardfirst.txt index 408ae3b447..18806ca74b 100644 --- a/config/names/wizardfirst.txt +++ b/config/names/wizardfirst.txt @@ -1,36 +1,36 @@ -Jim -Gulstaff -Gandalf -Grimm -Mordenkainen -Elminister -Saruman -Vaarsuvius -Yoda -Zul -Nihilus -Vecna -Mogan -Circe -Prospero -Raistlin -Rasputin -Tzeentch -Khelben -Dumbledor -Houdini -Terefi -Urza -Tenser -Zagyg -Mystryl -Boccob -Merlin -Archchancellor -Radagast -Kreol -Kaschei -Lina -Morgan -Alatar +Jim +Gulstaff +Gandalf +Grimm +Mordenkainen +Elminister +Saruman +Vaarsuvius +Yoda +Zul +Nihilus +Vecna +Mogan +Circe +Prospero +Raistlin +Rasputin +Tzeentch +Khelben +Dumbledor +Houdini +Terefi +Urza +Tenser +Zagyg +Mystryl +Boccob +Merlin +Archchancellor +Radagast +Kreol +Kaschei +Lina +Morgan +Alatar Palando \ No newline at end of file diff --git a/config/names/wizardsecond.txt b/config/names/wizardsecond.txt index d1e2e73486..1fe60bdb27 100644 --- a/config/names/wizardsecond.txt +++ b/config/names/wizardsecond.txt @@ -1,39 +1,39 @@ -the Powerful -the Great -the Magician -the Wise -the Seething -the Amazing -the Spiral King -Darkmagic -the White -the Gray -Shado -the Sorcelator -the Raven -the Emperor -the Brown -Weatherwax -the Destroyer -the Deathless -Yagg -the Remorseful -the Weeping -the Unending -the All Knowing -Dark -Smith -the Conquerer -the Unstoppable -Gray -of Void -Unseen -Darko -Honko -the Bandit Killer -the Dragon Spooker -Inverse -le Fay -the Blue -the Red +the Powerful +the Great +the Magician +the Wise +the Seething +the Amazing +the Spiral King +Darkmagic +the White +the Gray +Shado +the Sorcelator +the Raven +the Emperor +the Brown +Weatherwax +the Destroyer +the Deathless +Yagg +the Remorseful +the Weeping +the Unending +the All Knowing +Dark +Smith +the Conquerer +the Unstoppable +Gray +of Void +Unseen +Darko +Honko +the Bandit Killer +the Dragon Spooker +Inverse +le Fay +the Blue +the Red the Benevolent \ No newline at end of file diff --git a/html/changelog.css b/html/changelog.css index d5155db726..69a3a16405 100644 --- a/html/changelog.css +++ b/html/changelog.css @@ -1,77 +1,77 @@ -body{font-family:Tahoma,sans-serif;} -.top{font-size:12px;} -a img {border:none;} -.bgimages16 li { - padding:2px 10px 2px 30px; - background-position:6px center; - background-repeat:no-repeat; - border:1px solid #ddd; - border-left:4px solid #999; - margin-bottom:2px; -} -.bugfix {background-image:url(bug-minus.png)} -.wip {background-image:url(hard-hat-exclamation.png)} -.tweak {background-image:url(wrench-screwdriver.png)} -.soundadd {background-image:url(music-plus.png)} -.sounddel {background-image:url(music-minus.png)} -.rscdel {background-image:url(cross-circle.png)} -.rscadd {background-image:url(tick-circle.png)} -.imageadd {background-image:url(image-plus.png)} -.imagedel {background-image:url(image-minus.png)} -.spellcheck {background-image:url(spell-check.png)} -.experiment {background-image:url(burn-exclamation.png)} -.maptweak {background-image:url(map-pencil.png)} -.sansserif {font-size:12px;} -.commit { - margin-bottom:20px; - font-size:100%;font-weight:normal; -} -.changes { - list-style:none; - margin:5px 0; - padding:0 0 0 25px; - font-size:0.8em; -} -.date { - margin:10px 0; - color:blue; - border-bottom:2px solid #00f; - width:60%; - padding:2px 0; - font-size:1em; - font-weight:bold; -} -.author { - padding-left:10px; - margin:0; - font-weight:bold; - font-size:0.9em; - } -.drop { - cursor:pointer; - border:1px solid #999; - display:inline; - font-size:0.9em; - padding:1px 20px 1px 5px; - line-height:16px; -} -.hidden {display:none;} -.indrop { - margin:2px 0 0 0; - clear:both; - background:#fff; - border:1px solid #ddd; - padding:5px 10px; - } -.indrop p { - margin:0; - font-size:0.8em; - line-height:16px; - margin:1px 0; -} -.indrop img { - margin-right:5px; - vertical-align:middle;} -.closed {background:url(chevron-expand.png) right center no-repeat;} -.open {background:url(chevron.png) right center no-repeat;} -.lic {font-size:9px;} +body{font-family:Tahoma,sans-serif;} +.top{font-size:12px;} +a img {border:none;} +.bgimages16 li { + padding:2px 10px 2px 30px; + background-position:6px center; + background-repeat:no-repeat; + border:1px solid #ddd; + border-left:4px solid #999; + margin-bottom:2px; +} +.bugfix {background-image:url(bug-minus.png)} +.wip {background-image:url(hard-hat-exclamation.png)} +.tweak {background-image:url(wrench-screwdriver.png)} +.soundadd {background-image:url(music-plus.png)} +.sounddel {background-image:url(music-minus.png)} +.rscdel {background-image:url(cross-circle.png)} +.rscadd {background-image:url(tick-circle.png)} +.imageadd {background-image:url(image-plus.png)} +.imagedel {background-image:url(image-minus.png)} +.spellcheck {background-image:url(spell-check.png)} +.experiment {background-image:url(burn-exclamation.png)} +.maptweak {background-image:url(map-pencil.png)} +.sansserif {font-size:12px;} +.commit { + margin-bottom:20px; + font-size:100%;font-weight:normal; +} +.changes { + list-style:none; + margin:5px 0; + padding:0 0 0 25px; + font-size:0.8em; +} +.date { + margin:10px 0; + color:blue; + border-bottom:2px solid #00f; + width:60%; + padding:2px 0; + font-size:1em; + font-weight:bold; +} +.author { + padding-left:10px; + margin:0; + font-weight:bold; + font-size:0.9em; + } +.drop { + cursor:pointer; + border:1px solid #999; + display:inline; + font-size:0.9em; + padding:1px 20px 1px 5px; + line-height:16px; +} +.hidden {display:none;} +.indrop { + margin:2px 0 0 0; + clear:both; + background:#fff; + border:1px solid #ddd; + padding:5px 10px; + } +.indrop p { + margin:0; + font-size:0.8em; + line-height:16px; + margin:1px 0; +} +.indrop img { + margin-right:5px; + vertical-align:middle;} +.closed {background:url(chevron-expand.png) right center no-repeat;} +.open {background:url(chevron.png) right center no-repeat;} +.lic {font-size:9px;} diff --git a/html/changelog.js b/html/changelog.js index 00db7fbc70..4146d0f094 100644 --- a/html/changelog.js +++ b/html/changelog.js @@ -1,87 +1,87 @@ -/* -function dropdowns() { - var divs = document.getElementsByTagName('div'); - var headers = new Array(); - var links = new Array(); - for(var i=0;i=0) { - elem.className = elem.className.replace('visible','hidden'); - this.className = this.className.replace('open','closed'); - } - else { - elem.className = elem.className.replace('hidden','visible'); - this.className = this.className.replace('closed','open'); - } - return false; - } - })(links[i]); - } - } -} -*/ -/* -function filterchanges(type){ - var lists = document.getElementsByTagName('ul'); - for(var i in lists){ - if(lists[i].className && lists[i].className.search('changes')>=0) { - for(var j in lists[i].childNodes){ - if(lists[i].childNodes[j].nodeType == 1){ - if(!type){ - lists[i].childNodes[j].style.display = 'block'; - } - else if(lists[i].childNodes[j].className!=type) { - lists[i].childNodes[j].style.display = 'none'; - } - else { - lists[i].childNodes[j].style.display = 'block'; - } - } - } - } - } -} -*/ -function dropdowns() { - var drops = $('div.drop'); - var indrops = $('div.indrop'); - if(drops.length!=indrops.length){ - alert("Some coder fucked up with dropdowns"); - } - drops.each(function(index){ - $(this).toggleClass('closed'); - $(indrops[index]).hide(); - $(this).click(function(){ - $(this).toggleClass('closed'); - $(this).toggleClass('open'); - $(indrops[index]).toggle(); - }); - }); -} - -function filterchanges(type){ - $('ul.changes li').each(function(){ - if(!type || $(this).hasClass(type)){ - $(this).show(); - } - else { - $(this).hide(); - } - }); -} - -$(document).ready(function(){ - dropdowns(); +/* +function dropdowns() { + var divs = document.getElementsByTagName('div'); + var headers = new Array(); + var links = new Array(); + for(var i=0;i=0) { + elem.className = elem.className.replace('visible','hidden'); + this.className = this.className.replace('open','closed'); + } + else { + elem.className = elem.className.replace('hidden','visible'); + this.className = this.className.replace('closed','open'); + } + return false; + } + })(links[i]); + } + } +} +*/ +/* +function filterchanges(type){ + var lists = document.getElementsByTagName('ul'); + for(var i in lists){ + if(lists[i].className && lists[i].className.search('changes')>=0) { + for(var j in lists[i].childNodes){ + if(lists[i].childNodes[j].nodeType == 1){ + if(!type){ + lists[i].childNodes[j].style.display = 'block'; + } + else if(lists[i].childNodes[j].className!=type) { + lists[i].childNodes[j].style.display = 'none'; + } + else { + lists[i].childNodes[j].style.display = 'block'; + } + } + } + } + } +} +*/ +function dropdowns() { + var drops = $('div.drop'); + var indrops = $('div.indrop'); + if(drops.length!=indrops.length){ + alert("Some coder fucked up with dropdowns"); + } + drops.each(function(index){ + $(this).toggleClass('closed'); + $(indrops[index]).hide(); + $(this).click(function(){ + $(this).toggleClass('closed'); + $(this).toggleClass('open'); + $(indrops[index]).toggle(); + }); + }); +} + +function filterchanges(type){ + $('ul.changes li').each(function(){ + if(!type || $(this).hasClass(type)){ + $(this).show(); + } + else { + $(this).hide(); + } + }); +} + +$(document).ready(function(){ + dropdowns(); }); \ No newline at end of file diff --git a/html/create_object.html b/html/create_object.html index 47d7faf5ab..c9b8b091b3 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -1,129 +1,129 @@ - - - - Create Object - - - - -
                        - - /* hreftokenfield */ - - - Type
                        - Offset: - - A - R
                        - - Number: - Dir: - Name:
                        - Where: - -

                        - Number of matches:
                        -

                        - -
                        - -
                        - -
                        - -
                        - - - - - + + + + Create Object + + + + +
                        + + /* hreftokenfield */ + + + Type
                        + Offset: + + A + R
                        + + Number: + Dir: + Name:
                        + Where: + +

                        + Number of matches:
                        +

                        + +
                        + +
                        + +
                        + +
                        + + + + + diff --git a/html/panels.css b/html/panels.css index 0d1cb0cb9f..ac44cf5487 100644 --- a/html/panels.css +++ b/html/panels.css @@ -1,10 +1,10 @@ -body {padding:0px;margin:0px;} -#top {position:fixed;top:5px;left:10%;width:80%;text-align:center;background-color:#fff;border:2px solid #ccc;} -#main {position:relative;top:50px;left:3%;width:96%;text-align:center;z-index:0;} -#searchable {table-layout:fixed;width:100%;text-align:center;"#f4f4f4";} -tr.norm {background-color:#f4f4f4;} -tr.title {background-color:#ccc;} -tr.alt {background-color:#e7e7e7;} -.small {font-size:80%;} -a {text-decoration:none;color:#a0a;} -a:hover {color:#d3d;} +body {padding:0px;margin:0px;} +#top {position:fixed;top:5px;left:10%;width:80%;text-align:center;background-color:#fff;border:2px solid #ccc;} +#main {position:relative;top:50px;left:3%;width:96%;text-align:center;z-index:0;} +#searchable {table-layout:fixed;width:100%;text-align:center;"#f4f4f4";} +tr.norm {background-color:#f4f4f4;} +tr.title {background-color:#ccc;} +tr.alt {background-color:#e7e7e7;} +.small {font-size:80%;} +a {text-decoration:none;color:#a0a;} +a:hover {color:#d3d;} diff --git a/html/search.js b/html/search.js index abc47a9757..ded0b92844 100644 --- a/html/search.js +++ b/html/search.js @@ -1,33 +1,33 @@ -function selectTextField(){ - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); -} -function updateSearch(){ - var input_form = document.getElementById('filter'); - var filter = input_form.value.toLowerCase(); - input_form.value = filter; - var table = document.getElementById('searchable'); - var alt_style = 'norm'; - for(var i = 0; i < table.rows.length; i++){ - try{ - var row = table.rows[i]; - if(row.className == 'title') continue; - var found=0; - for(var j = 0; j < row.cells.length; j++){ - var cell = row.cells[j]; - if(cell.innerText.toLowerCase().indexOf(filter) != -1){ - found=1; - break; - } - } - if(found == 0) row.style.display='none'; - else{ - row.style.display='block'; - row.className = alt_style; - if(alt_style == 'alt') alt_style = 'norm'; - else alt_style = 'alt'; - } - }catch(err) { } - } +function selectTextField(){ + var filter_text = document.getElementById('filter'); + filter_text.focus(); + filter_text.select(); +} +function updateSearch(){ + var input_form = document.getElementById('filter'); + var filter = input_form.value.toLowerCase(); + input_form.value = filter; + var table = document.getElementById('searchable'); + var alt_style = 'norm'; + for(var i = 0; i < table.rows.length; i++){ + try{ + var row = table.rows[i]; + if(row.className == 'title') continue; + var found=0; + for(var j = 0; j < row.cells.length; j++){ + var cell = row.cells[j]; + if(cell.innerText.toLowerCase().indexOf(filter) != -1){ + found=1; + break; + } + } + if(found == 0) row.style.display='none'; + else{ + row.style.display='block'; + row.className = alt_style; + if(alt_style == 'alt') alt_style = 'norm'; + else alt_style = 'alt'; + } + }catch(err) { } + } } \ No newline at end of file diff --git a/html/templates/footer.html b/html/templates/footer.html index cbec94a6d5..30ee50cea1 100644 --- a/html/templates/footer.html +++ b/html/templates/footer.html @@ -1,27 +1,27 @@ - - -
                        Baystation 12 Credit List - - - - -
                        - Current BS12 Project Maintainers: -Click Here-
                        - Currently Active GitHub BS12 contributor list: -Click Here-
                        - Code: Abi79, Aryn, Cael_Aislinn, Ccomp5950, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, JoeyJo0, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, PsiOmegaDelta, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
                        - Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, JoeyJo0, Miniature, Searif, Xenone, faux
                        - Sounds: Aryn
                        - Main Testers: Anyone who has submitted a bug to the issue tracker.
                        -
                        - -GoonStation 13 Development Team -
                        - Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
                        - Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
                        -
                        -
                        -

                        Creative Commons License
                        Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
                        Rights are currently extended to SomethingAwful Goons only.

                        -

                        Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

                        - - - + + +
                        Baystation 12 Credit List + + + + +
                        + Current BS12 Project Maintainers: -Click Here-
                        + Currently Active GitHub BS12 contributor list: -Click Here-
                        + Code: Abi79, Aryn, Cael_Aislinn, Ccomp5950, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, JoeyJo0, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, PsiOmegaDelta, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
                        + Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, JoeyJo0, Miniature, Searif, Xenone, faux
                        + Sounds: Aryn
                        + Main Testers: Anyone who has submitted a bug to the issue tracker.
                        +
                        + +GoonStation 13 Development Team +
                        + Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
                        + Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
                        +
                        +
                        +

                        Creative Commons License
                        Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
                        Rights are currently extended to SomethingAwful Goons only.

                        +

                        Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

                        + + + diff --git a/html/templates/header.html b/html/templates/header.html index 3db221b1f4..4382d0f73c 100644 --- a/html/templates/header.html +++ b/html/templates/header.html @@ -1,41 +1,41 @@ - - - - CHOMPStation13 Changelog - - - - - - - -
                        - - - - -
                        -
                        CHOMPStation 13
                        - -

                        - Code licensed under AGPLv3. Content licensed under CC BY-SA 3.0.

                        -
                        - - -
                        + + + + CHOMPStation13 Changelog + + + + + + + +
                        + + + + +
                        +
                        CHOMPStation 13
                        + +

                        + Code licensed under AGPLv3. Content licensed under CC BY-SA 3.0.

                        +
                        + + +
                        diff --git a/interface/skin.dmf b/interface/skin.dmf index 12f02f6dfb..a735db48e4 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1,1558 +1,1558 @@ -macro "borghotkeymode" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true\"" - elem - name = "Shift" - command = "KeyDown Shift" - elem - name = "Shift+UP" - command = "KeyUp Shift" - elem - name = "Ctrl" - command = "KeyDown Ctrl" - elem - name = "Ctrl+UP" - command = "KeyUp Ctrl" - elem - name = "Alt" - command = "KeyDown Alt" - elem - name = "Alt+UP" - command = "KeyUp Alt" - elem - name = "NORTHEAST" - command = ".northeast" - elem - name = "SOUTHEAST" - command = ".southeast" - elem - name = "SOUTHWEST" - command = ".southwest" - elem - name = "NORTHWEST" - command = ".northwest" - elem - name = "ALT+WEST" - command = "westfaceperm" - elem - name = "CTRL+WEST" - command = "westface" - elem - name = "West" - command = "KeyDown West" - elem - name = "West+UP" - command = "KeyUp West" - elem - name = "ALT+NORTH" - command = "northfaceperm" - elem - name = "CTRL+NORTH" - command = "northface" - elem - name = "North" - command = "KeyDown North" - elem - name = "North+UP" - command = "KeyUp North" - elem - name = "ALT+EAST" - command = "eastfaceperm" - elem - name = "CTRL+EAST" - command = "eastface" - elem - name = "East" - command = "KeyDown East" - elem - name = "East+UP" - command = "KeyUp East" - elem - name = "ALT+SOUTH" - command = "southfaceperm" - elem - name = "CTRL+SOUTH" - command = "southface" - elem - name = "South" - command = "KeyDown South" - elem - name = "South+UP" - command = "KeyUp South" - elem - name = "CTRL+SHIFT+NORTH" - command = "shiftnorth" - elem - name = "CTRL+SHIFT+SOUTH" - command = "shiftsouth" - elem - name = "CTRL+SHIFT+WEST" - command = "shiftwest" - elem - name = "CTRL+SHIFT+EAST" - command = "shifteast" - elem - name = "INSERT" - command = "a-intent right" - elem - name = "DELETE" - command = "delete-key-pressed" - elem - name = "1" - command = "toggle-module 1" - elem - name = "CTRL+1" - command = "toggle-module 1" - elem - name = "2" - command = "toggle-module 2" - elem - name = "CTRL+2" - command = "toggle-module 2" - elem - name = "3" - command = "toggle-module 3" - elem - name = "CTRL+3" - command = "toggle-module 3" - elem - name = "4" - command = "a-intent left" - elem - name = "CTRL+4" - command = "a-intent left" - elem - name = "5" - command = ".me" - elem - name = "6" - command = ".Subtle" - elem - name = "A" - command = "KeyDown A" - elem - name = "A+UP" - command = "KeyUp A" - elem - name = "D" - command = "KeyDown D" - elem - name = "D+UP" - command = "KeyUp D" - elem - name = "F" - command = "a-intent left" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "G" - command = "a-intent right" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "J" - command = "toggle-gun-mode" - elem - name = "CTRL+J" - command = "toggle-gun-mode" - elem - name = "Q" - command = "unequip-module" - elem - name = "CTRL+Q" - command = "unequip-module" - elem - name = "R" - command = ".southwest" - elem - name = "CTRL+R" - command = ".southwest" - elem "s_key" - name = "S" - command = "KeyDown S" - elem - name = "S+UP" - command = "KeyUp S" - elem - name = "T" - command = ".say" - elem "w_key" - name = "W" - command = "KeyDown W" - elem - name = "W+UP" - command = "KeyUp W" - elem - name = "X" - command = ".northeast" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "Y" - command = ".Whisper" - elem - name = "CTRL+Y" - command = ".Whisper" - elem - name = "Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "U" - command = "Rest" - elem - name = "NUMPAD1" - command = "body-r-leg" - elem - name = "NUMPAD2" - command = "body-groin" - elem - name = "NUMPAD3" - command = "body-l-leg" - elem - name = "NUMPAD4" - command = "body-r-arm" - elem - name = "NUMPAD5" - command = "body-chest" - elem - name = "NUMPAD6" - command = "body-l-arm" - elem - name = "NUMPAD8" - command = "body-toggle-head" - elem - name = "F1" - command = "request-help" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "asay" - elem - name = "F6" - command = "Player-Panel-New" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "CTRL+SHIFT+ADD" - command = "planeup" - elem - name = "CTRL+SHIFT+SUBTRACT" - command = "planedown" - -macro "macro" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" - elem - name = "Shift" - command = "KeyDown Shift" - elem - name = "Shift+UP" - command = "KeyUp Shift" - elem - name = "Ctrl" - command = "KeyDown Ctrl" - elem - name = "Ctrl+UP" - command = "KeyUp Ctrl" - elem - name = "Alt" - command = "KeyDown Alt" - elem - name = "Alt+UP" - command = "KeyUp Alt" - elem - name = "NORTHEAST" - command = ".northeast" - elem - name = "SOUTHEAST" - command = ".southeast" - elem - name = "SOUTHWEST" - command = ".southwest" - elem - name = "NORTHWEST" - command = ".northwest" - elem - name = "ALT+WEST" - command = "westfaceperm" - elem - name = "CTRL+WEST" - command = "westface" - elem - name = "West" - command = "KeyDown West" - elem - name = "West+UP" - command = "KeyUp West" - elem - name = "ALT+NORTH" - command = "northfaceperm" - elem - name = "CTRL+NORTH" - command = "northface" - elem - name = "North" - command = "KeyDown North" - elem - name = "North+UP" - command = "KeyUp North" - elem - name = "ALT+EAST" - command = "eastfaceperm" - elem - name = "CTRL+EAST" - command = "eastface" - elem - name = "East" - command = "KeyDown East" - elem - name = "East+UP" - command = "KeyUp East" - elem - name = "ALT+SOUTH" - command = "southfaceperm" - elem - name = "CTRL+SOUTH" - command = "southface" - elem - name = "South" - command = "KeyDown South" - elem - name = "South+UP" - command = "KeyUp South" - elem - name = "CTRL+SHIFT+NORTH" - command = "shiftnorth" - elem - name = "CTRL+SHIFT+SOUTH" - command = "shiftsouth" - elem - name = "CTRL+SHIFT+WEST" - command = "shiftwest" - elem - name = "CTRL+SHIFT+EAST" - command = "shifteast" - elem - name = "INSERT" - command = "a-intent right" - elem - name = "DELETE" - command = "delete-key-pressed" - elem - name = "CTRL+1" - command = "a-intent help" - elem - name = "CTRL+2" - command = "a-intent disarm" - elem - name = "CTRL+3" - command = "a-intent grab" - elem - name = "CTRL+4" - command = "a-intent harm" - elem - name = "CTRL+A" - command = "KeyDown A" - elem - name = "CTRL+A+UP" - command = "KeyUp A" - elem - name = "CTRL+D" - command = "KeyDown D" - elem - name = "CTRL+D+UP" - command = "KeyUp D" - elem - name = "CTRL+E" - command = "quick-equip" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "CTRL+R" - command = ".southwest" - elem - name = "CTRL+S" - command = "KeyDown S" - elem - name = "CTRL+S+UP" - command = "KeyUp S" - elem - name = "CTRL+W" - command = "KeyDown W" - elem - name = "CTRL+W+UP" - command = "KeyUp W" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "CTRL+U" - command = "Rest" - elem - name = "CTRL+B" - command = "Resist" - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - elem - name = "F1" - command = "request-help" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "asay" - elem - name = "F6" - command = "Player-Panel-New" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "CTRL+SHIFT+ADD" - command = "planeup" - elem - name = "CTRL+SHIFT+SUBTRACT" - command = "planedown" - -macro "hotkeymode" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true\"" - elem - name = "Shift" - command = "KeyDown Shift" - elem - name = "Shift+UP" - command = "KeyUp Shift" - elem - name = "Ctrl" - command = "KeyDown Ctrl" - elem - name = "Ctrl+UP" - command = "KeyUp Ctrl" - elem - name = "Alt" - command = "KeyDown Alt" - elem - name = "Alt+UP" - command = "KeyUp Alt" - elem - name = "NORTHEAST" - command = ".northeast" - elem - name = "SOUTHEAST" - command = ".southeast" - elem - name = "SOUTHWEST" - command = ".southwest" - elem - name = "NORTHWEST" - command = ".northwest" - elem - name = "ALT+WEST" - command = "westfaceperm" - elem - name = "CTRL+WEST" - command = "westface" - elem - name = "West" - command = "KeyDown West" - elem - name = "West+UP" - command = "KeyUp West" - elem - name = "ALT+NORTH" - command = "northfaceperm" - elem - name = "CTRL+NORTH" - command = "northface" - elem - name = "North" - command = "KeyDown North" - elem - name = "North+UP" - command = "KeyUp North" - elem - name = "ALT+EAST" - command = "eastfaceperm" - elem - name = "CTRL+EAST" - command = "eastface" - elem - name = "East" - command = "KeyDown East" - elem - name = "East+UP" - command = "KeyUp East" - elem - name = "ALT+SOUTH" - command = "southfaceperm" - elem - name = "CTRL+SOUTH" - command = "southface" - elem - name = "South" - command = "KeyDown South" - elem - name = "South+UP" - command = "KeyUp South" - elem - name = "CTRL+SHIFT+NORTH" - command = "shiftnorth" - elem - name = "CTRL+SHIFT+SOUTH" - command = "shiftsouth" - elem - name = "CTRL+SHIFT+WEST" - command = "shiftwest" - elem - name = "CTRL+SHIFT+EAST" - command = "shifteast" - elem - name = "INSERT" - command = "a-intent right" - elem - name = "DELETE" - command = "delete-key-pressed" - elem - name = "1" - command = "a-intent help" - elem - name = "CTRL+1" - command = "a-intent help" - elem - name = "2" - command = "a-intent disarm" - elem - name = "CTRL+2" - command = "a-intent disarm" - elem - name = "3" - command = "a-intent grab" - elem - name = "CTRL+3" - command = "a-intent grab" - elem - name = "4" - command = "a-intent harm" - elem - name = "CTRL+4" - command = "a-intent harm" - elem - name = "5" - command = ".me" - elem - name = "6" - command = ".Subtle" - elem - name = "A" - command = "KeyDown A" - elem - name = "A+UP" - command = "KeyUp A" - elem - name = "D" - command = "KeyDown D" - elem - name = "D+UP" - command = "KeyUp D" - elem - name = "E" - command = "quick-equip" - elem - name = "CTRL+E" - command = "quick-equip" - elem - name = "F" - command = "a-intent left" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "G" - command = "a-intent right" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "H" - command = "holster" - elem - name = "CTRL+H" - command = "holster" - elem - name = "J" - command = "toggle-gun-mode" - elem - name = "CTRL+J" - command = "toggle-gun-mode" - elem - name = "Q" - command = ".northwest" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "R" - command = ".southwest" - elem - name = "CTRL+R" - command = ".southwest" - elem "s_key" - name = "S" - command = "KeyDown S" - elem - name = "S+UP" - command = "KeyUp S" - elem - name = "T" - command = ".say" - elem "w_key" - name = "W" - command = "KeyDown W" - elem - name = "W+UP" - command = "KeyUp W" - elem - name = "X" - command = ".northeast" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "Y" - command = ".Whisper" - elem - name = "CTRL+Y" - command = ".Whisper" - elem - name = "Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "U" - command = "Rest" - elem - name = "B" - command = "Resist" - elem - name = "NUMPAD1" - command = "body-r-leg" - elem - name = "NUMPAD2" - command = "body-groin" - elem - name = "NUMPAD3" - command = "body-l-leg" - elem - name = "NUMPAD4" - command = "body-r-arm" - elem - name = "NUMPAD5" - command = "body-chest" - elem - name = "NUMPAD6" - command = "body-l-arm" - elem - name = "NUMPAD8" - command = "body-toggle-head" - elem - name = "F1" - command = "request-help" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "asay" - elem - name = "F6" - command = "Player-Panel-New" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "CTRL+SHIFT+ADD" - command = "planeup" - elem - name = "CTRL+SHIFT+SUBTRACT" - command = "planedown" - -macro "borgmacro" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" - elem - name = "Shift" - command = "KeyDown Shift" - elem - name = "Shift+UP" - command = "KeyUp Shift" - elem - name = "Ctrl" - command = "KeyDown Ctrl" - elem - name = "Ctrl+UP" - command = "KeyUp Ctrl" - elem - name = "Alt" - command = "KeyDown Alt" - elem - name = "Alt+UP" - command = "KeyUp Alt" - elem - name = "NORTHEAST" - command = ".northeast" - elem - name = "SOUTHEAST" - command = ".southeast" - elem - name = "SOUTHWEST" - command = ".southwest" - elem - name = "NORTHWEST" - command = ".northwest" - elem - name = "ALT+WEST" - command = "westfaceperm" - elem - name = "CTRL+WEST" - command = "westface" - elem - name = "West" - command = "KeyDown West" - elem - name = "West+UP" - command = "KeyUp West" - elem - name = "ALT+NORTH" - command = "northfaceperm" - elem - name = "CTRL+NORTH" - command = "northface" - elem - name = "North" - command = "KeyDown North" - elem - name = "North+UP" - command = "KeyUp North" - elem - name = "ALT+EAST" - command = "eastfaceperm" - elem - name = "CTRL+EAST" - command = "eastface" - elem - name = "East" - command = "KeyDown East" - elem - name = "East+UP" - command = "KeyUp East" - elem - name = "ALT+SOUTH" - command = "southfaceperm" - elem - name = "CTRL+SOUTH" - command = "southface" - elem - name = "South" - command = "KeyDown South" - elem - name = "South+UP" - command = "KeyUp South" - elem - name = "CTRL+SHIFT+NORTH" - command = "shiftnorth" - elem - name = "CTRL+SHIFT+SOUTH" - command = "shiftsouth" - elem - name = "CTRL+SHIFT+WEST" - command = "shiftwest" - elem - name = "CTRL+SHIFT+EAST" - command = "shifteast" - elem - name = "INSERT" - command = "a-intent right" - elem - name = "DELETE" - command = "delete-key-pressed" - elem - name = "CTRL+1" - command = "toggle-module 1" - elem - name = "CTRL+2" - command = "toggle-module 2" - elem - name = "CTRL+3" - command = "toggle-module 3" - elem - name = "CTRL+4" - command = "a-intent left" - elem - name = "CTRL+A" - command = "KeyDown A" - elem - name = "CTRL+A+UP" - command = "KeyUp A" - elem - name = "CTRL+D" - command = "KeyDown D" - elem - name = "CTRL+D+UP" - command = "KeyUp D" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "CTRL+R" - command = ".southwest" - elem - name = "CTRL+S" - command = "KeyDown S" - elem - name = "CTRL+S+UP" - command = "KeyUp S" - elem - name = "CTRL+W" - command = "KeyDown W" - elem - name = "CTRL+W+UP" - command = "KeyUp W" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "CTRL+U" - command = "Rest" - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - elem - name = "F1" - command = "request-help" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "asay" - elem - name = "F6" - command = "Player-Panel-New" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "CTRL+SHIFT+ADD" - command = "planeup" - elem - name = "CTRL+SHIFT+SUBTRACT" - command = "planedown" - -menu "menu" - elem - name = "&File" - command = "" - saved-params = "is-checked" - elem - name = "&Quick screenshot\tF2" - command = ".screenshot auto" - category = "&File" - saved-params = "is-checked" - elem - name = "&Save screenshot as...\tShift+F2" - command = ".screenshot" - category = "&File" - saved-params = "is-checked" - elem - name = "&Reconnect" - command = ".reconnect" - category = "&File" - saved-params = "is-checked" - elem - name = "&Check ping" - command = ".ping" - category = "&File" - saved-params = "is-checked" - elem - name = "" - command = "" - category = "&File" - saved-params = "is-checked" - elem - name = "&Quit" - command = ".quit" - category = "&File" - saved-params = "is-checked" - elem - name = "&Icons" - command = "" - saved-params = "is-checked" - elem "stretch" - name = "&Stretch to fit" - command = ".winset \"mapwindow.map.icon-size=0\"" - category = "&Icons" - is-checked = true - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon128" - name = "&128x128" - command = ".winset \"mapwindow.map.icon-size=128\"" - category = "&Icons" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon96" - name = "&96x96" - command = ".winset \"mapwindow.map.icon-size=96\"" - category = "&Icons" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon64" - name = "&64x64" - command = ".winset \"mapwindow.map.icon-size=64\"" - category = "&Icons" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon48" - name = "&48x48" - command = ".winset \"mapwindow.map.icon-size=48\"" - category = "&Icons" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon32" - name = "&32x32" - command = ".winset \"mapwindow.map.icon-size=32\"" - category = "&Icons" - can-check = true - group = "size" - saved-params = "is-checked" - elem - name = "" - command = "" - category = "&Icons" - saved-params = "is-checked" - elem "textmode" - name = "&Text" - command = ".winset \"menu.textmode.is-checked=true?mapwindow.map.text-mode=true:mapwindow.map.text-mode=false\"" - category = "&Icons" - can-check = true - saved-params = "is-checked" - elem - name = "&Scaling" - command = "" - saved-params = "is-checked" - elem "nearest-neighbor" - name = "&Nearest Neighbor" - command = ".winset \"mapwindow.map.zoom-mode=distort\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem "point-sample" - name = "&Point Sampling" - command = ".winset \"mapwindow.map.zoom-mode=normal\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem "blur" - name = "&Blur" - command = ".winset \"mapwindow.map.zoom-mode=blur\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem - name = "&Help" - command = "" - saved-params = "is-checked" - elem - name = "&Admin help\tF1" - command = "request-help" - category = "&Help" - saved-params = "is-checked" - elem - name = "&Hotkeys" - command = "hotkeys-help" - category = "&Help" - saved-params = "is-checked" - -window "mainwindow" - elem "mainwindow" - type = MAIN - pos = 281,0 - size = 640x440 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-default = true - saved-params = "pos;size;is-minimized;is-maximized" - title = "CHOMPStation" // CHOMP Edit - is-maximized = true - statusbar = false - icon = 'icons/ss13_64.png' // CHOMP Edit - macro = "macro" - menu = "menu" - elem "asset_cache_browser" - type = BROWSER - pos = 0,0 - size = 200x200 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-visible = false - saved-params = "" - elem "hotkey_toggle" - type = BUTTON - pos = 560,400 - size = 80x20 - anchor1 = 100,100 - anchor2 = -1,-1 - saved-params = "" - text = "Hotkey Toggle" - command = ".winset \"mainwindow.macro!=macro ? mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true : mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" - button-type = pushbox - elem "mainvsplit" - type = CHILD - pos = 3,0 - size = 634x400 - anchor1 = 0,0 - anchor2 = 100,100 - saved-params = "splitter" - right = "rpane" - is-vert = true - elem "input" - type = INPUT - pos = 3,400 - size = 517x20 - anchor1 = 0,100 - anchor2 = 100,100 - background-color = #d3b5b5 - is-default = true - border = sunken - saved-params = "command" - elem "status_bar" - type = LABEL - pos = 3,420 - size = 517x16 - anchor1 = 0,100 - anchor2 = 100,100 - is-visible = true - text = "" - align = left - border = line - elem "saybutton" - type = BUTTON - pos = 520,400 - size = 40x20 - anchor1 = 100,100 - anchor2 = -1,-1 - saved-params = "is-checked" - text = "Chat" - command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\"" - button-type = pushbox - elem "tooltip" - type = BROWSER - pos = 0,0 - size = 999x999 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-visible = false - saved-params = "" - -window "mapwindow" - elem "mapwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - on-status = ".winset \"status_bar.text=[[*]]\" " - elem "map" - type = MAP - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "Arial Rounded MT Bold,Arial Black,Arial,sans-serif" - font-size = 7 - text-color = none - is-default = true - saved-params = "icon-size" - on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" - on-hide = ".winset\"mainwindow.mainvsplit.left=\"" - style = ".center { text-align: center; } .runechatdiv {background-color: #20202070} .black_outline { -dm-text-outline: 1px black } .boldtext { font-weight: bold; } .maptext { font-family: 'Small Fonts'; font-size: 7px; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .very_small { font-size: 5px;} .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 7px; font-style: italic; }" - -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - elem "browseroutput" - type = BROWSER - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-visible = false - is-disabled = true - saved-params = "" - elem "output" - type = OUTPUT - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-default = true - saved-params = "" - style = ".system {color:#FF0000;}" - enable-http-images = true - -window "prefs_markings_subwindow" - elem "prefs_markings_subwindow" - type = MAIN - pos = 281,0 - size = 400x400 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - is-visible = false - saved-params = "pos;size;is-minimized;is-maximized" - title = "Marking Selection Editing" - statusbar = false - can-minimize = false - outer-size = 416x439 - inner-size = 400x400 - elem "prefs_markings_browser" - type = BROWSER - pos = 0,0 - size = 400x400 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "" - -window "rpane" - elem "rpane" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - outer-size = 656x538 - inner-size = 640x499 - elem "rpanewindow" - type = CHILD - pos = 0,-3 - size = 640x499 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = none - saved-params = "splitter" - right = "outputwindow" - is-vert = false - elem "patreon" - type = BUTTON - pos = 488,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = '#005813' - text-color = #FFFFFF - saved-params = "is-checked" - text = "Patreon" - command = "patreon" - group = "rpanemode" - elem "discord" - type = BUTTON - pos = 428,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "Discord" - command = "discord" - group = "rpanemode" - elem "github" - type = BUTTON - pos = 368,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "GitHub" - command = "github" - group = "rpanemode" - elem "mapb" - type = BUTTON - pos = 308,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "Map" - command = "map" - group = "rpanemode" - elem "rulesb" - type = BUTTON - pos = 248,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "Rules" - command = "rules" - group = "rpanemode" - elem "forumb" - type = BUTTON - pos = 188,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "Forum" - command = "forum" - group = "rpanemode" - elem "wikib" - type = BUTTON - pos = 128,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - saved-params = "is-checked" - text = "Wiki" - command = "wiki" - group = "rpanemode" - elem "textb" - type = BUTTON - pos = 0,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - is-visible = false - saved-params = "is-checked" - text = "Text" - command = ".winset \"rpanewindow.left=;\"" - is-checked = true - group = "rpanemode" - button-type = pushbox - elem "infob" - type = BUTTON - pos = 60,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - is-visible = false - saved-params = "is-checked" - text = "Info" - command = ".winset \"rpanewindow.left=infowindow\"" - group = "rpanemode" - button-type = pushbox - elem "mediapanel" - type = BROWSER - pos = 392,25 - size = 1x1 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - is-visible = false - saved-params = "" - -window "preferences_window" - elem "preferences_window" - type = MAIN - pos = 281,0 - size = 1000x800 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-visible = false - saved-params = "pos;size;is-minimized;is-maximized" - statusbar = false - elem "preferences_browser" - type = BROWSER - pos = 0,0 - size = 800x800 - anchor1 = 0,0 - anchor2 = 80,100 - saved-params = "" - elem "character_preview_map" - type = MAP - pos = 800,0 - size = 200x800 - anchor1 = 80,0 - anchor2 = 100,100 - right-click = true - saved-params = "zoom;letterbox;zoom-mode" - -window "ooc_notes" - elem "ooc_notes" - type = MAIN - pos = 25,25 - size = 500x600 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-visible = false - saved-params = "pos;is-minimized;is-maximized" - statusbar = false - elem "ooc_notes_panel" - type = BROWSER - pos = 0,0 - size = 500x600 - anchor1 = 0,0 - anchor2 = 80,100 - saved-params = "" - -window "infowindow" - elem "infowindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "pos;size;is-minimized;is-maximized" - title = "Info" - is-pane = true - elem "info" - type = INFO - pos = 0,0 - size = 638x477 - anchor1 = 0,0 - anchor2 = 100,100 - is-default = true - saved-params = "" - highlight-color = #00aa00 - on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" - on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" - -window "text_editor" - elem "text_editor" - type = MAIN - pos = 281,0 - size = 360x488 - anchor1 = -1,-1 - anchor2 = -1,-1 - is-visible = false - border = sunken - saved-params = "pos;size;is-minimized;is-maximized" - title = "Text Editor" - can-minimize = false - can-resize = false - elem "exit" - type = BUTTON - pos = 248,456 - size = 104x24 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "is-checked" - text = "Exit without saving" - command = "" - elem "save" - type = BUTTON - pos = 128,456 - size = 104x24 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "is-checked" - text = "Save" - command = "" - elem "saveexit" - type = BUTTON - pos = 8,456 - size = 104x24 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "is-checked" - text = "Save + Exit" - command = "" - elem "textedit" - type = INPUT - pos = 0,0 - size = 360x448 - anchor1 = -1,-1 - anchor2 = -1,-1 - border = line - saved-params = "" - multi-line = true +macro "borghotkeymode" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true\"" + elem + name = "Shift" + command = "KeyDown Shift" + elem + name = "Shift+UP" + command = "KeyUp Shift" + elem + name = "Ctrl" + command = "KeyDown Ctrl" + elem + name = "Ctrl+UP" + command = "KeyUp Ctrl" + elem + name = "Alt" + command = "KeyDown Alt" + elem + name = "Alt+UP" + command = "KeyUp Alt" + elem + name = "NORTHEAST" + command = ".northeast" + elem + name = "SOUTHEAST" + command = ".southeast" + elem + name = "SOUTHWEST" + command = ".southwest" + elem + name = "NORTHWEST" + command = ".northwest" + elem + name = "ALT+WEST" + command = "westfaceperm" + elem + name = "CTRL+WEST" + command = "westface" + elem + name = "West" + command = "KeyDown West" + elem + name = "West+UP" + command = "KeyUp West" + elem + name = "ALT+NORTH" + command = "northfaceperm" + elem + name = "CTRL+NORTH" + command = "northface" + elem + name = "North" + command = "KeyDown North" + elem + name = "North+UP" + command = "KeyUp North" + elem + name = "ALT+EAST" + command = "eastfaceperm" + elem + name = "CTRL+EAST" + command = "eastface" + elem + name = "East" + command = "KeyDown East" + elem + name = "East+UP" + command = "KeyUp East" + elem + name = "ALT+SOUTH" + command = "southfaceperm" + elem + name = "CTRL+SOUTH" + command = "southface" + elem + name = "South" + command = "KeyDown South" + elem + name = "South+UP" + command = "KeyUp South" + elem + name = "CTRL+SHIFT+NORTH" + command = "shiftnorth" + elem + name = "CTRL+SHIFT+SOUTH" + command = "shiftsouth" + elem + name = "CTRL+SHIFT+WEST" + command = "shiftwest" + elem + name = "CTRL+SHIFT+EAST" + command = "shifteast" + elem + name = "INSERT" + command = "a-intent right" + elem + name = "DELETE" + command = "delete-key-pressed" + elem + name = "1" + command = "toggle-module 1" + elem + name = "CTRL+1" + command = "toggle-module 1" + elem + name = "2" + command = "toggle-module 2" + elem + name = "CTRL+2" + command = "toggle-module 2" + elem + name = "3" + command = "toggle-module 3" + elem + name = "CTRL+3" + command = "toggle-module 3" + elem + name = "4" + command = "a-intent left" + elem + name = "CTRL+4" + command = "a-intent left" + elem + name = "5" + command = ".me" + elem + name = "6" + command = ".Subtle" + elem + name = "A" + command = "KeyDown A" + elem + name = "A+UP" + command = "KeyUp A" + elem + name = "D" + command = "KeyDown D" + elem + name = "D+UP" + command = "KeyUp D" + elem + name = "F" + command = "a-intent left" + elem + name = "CTRL+F" + command = "a-intent left" + elem + name = "G" + command = "a-intent right" + elem + name = "CTRL+G" + command = "a-intent right" + elem + name = "J" + command = "toggle-gun-mode" + elem + name = "CTRL+J" + command = "toggle-gun-mode" + elem + name = "Q" + command = "unequip-module" + elem + name = "CTRL+Q" + command = "unequip-module" + elem + name = "R" + command = ".southwest" + elem + name = "CTRL+R" + command = ".southwest" + elem "s_key" + name = "S" + command = "KeyDown S" + elem + name = "S+UP" + command = "KeyUp S" + elem + name = "T" + command = ".say" + elem "w_key" + name = "W" + command = "KeyDown W" + elem + name = "W+UP" + command = "KeyUp W" + elem + name = "X" + command = ".northeast" + elem + name = "CTRL+X" + command = ".northeast" + elem + name = "Y" + command = ".Whisper" + elem + name = "CTRL+Y" + command = ".Whisper" + elem + name = "Z" + command = "Activate-Held-Object" + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + elem + name = "U" + command = "Rest" + elem + name = "NUMPAD1" + command = "body-r-leg" + elem + name = "NUMPAD2" + command = "body-groin" + elem + name = "NUMPAD3" + command = "body-l-leg" + elem + name = "NUMPAD4" + command = "body-r-arm" + elem + name = "NUMPAD5" + command = "body-chest" + elem + name = "NUMPAD6" + command = "body-l-arm" + elem + name = "NUMPAD8" + command = "body-toggle-head" + elem + name = "F1" + command = "request-help" + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + elem + name = "F2" + command = "ooc" + elem + name = "F2+REP" + command = ".screenshot auto" + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + elem + name = "F3" + command = ".say" + elem + name = "F4" + command = ".me" + elem + name = "F5" + command = "asay" + elem + name = "F6" + command = "Player-Panel-New" + elem + name = "F7" + command = "Admin-PM" + elem + name = "F8" + command = "Invisimin" + elem + name = "F12" + command = "F12" + elem + name = "CTRL+SHIFT+ADD" + command = "planeup" + elem + name = "CTRL+SHIFT+SUBTRACT" + command = "planedown" + +macro "macro" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" + elem + name = "Shift" + command = "KeyDown Shift" + elem + name = "Shift+UP" + command = "KeyUp Shift" + elem + name = "Ctrl" + command = "KeyDown Ctrl" + elem + name = "Ctrl+UP" + command = "KeyUp Ctrl" + elem + name = "Alt" + command = "KeyDown Alt" + elem + name = "Alt+UP" + command = "KeyUp Alt" + elem + name = "NORTHEAST" + command = ".northeast" + elem + name = "SOUTHEAST" + command = ".southeast" + elem + name = "SOUTHWEST" + command = ".southwest" + elem + name = "NORTHWEST" + command = ".northwest" + elem + name = "ALT+WEST" + command = "westfaceperm" + elem + name = "CTRL+WEST" + command = "westface" + elem + name = "West" + command = "KeyDown West" + elem + name = "West+UP" + command = "KeyUp West" + elem + name = "ALT+NORTH" + command = "northfaceperm" + elem + name = "CTRL+NORTH" + command = "northface" + elem + name = "North" + command = "KeyDown North" + elem + name = "North+UP" + command = "KeyUp North" + elem + name = "ALT+EAST" + command = "eastfaceperm" + elem + name = "CTRL+EAST" + command = "eastface" + elem + name = "East" + command = "KeyDown East" + elem + name = "East+UP" + command = "KeyUp East" + elem + name = "ALT+SOUTH" + command = "southfaceperm" + elem + name = "CTRL+SOUTH" + command = "southface" + elem + name = "South" + command = "KeyDown South" + elem + name = "South+UP" + command = "KeyUp South" + elem + name = "CTRL+SHIFT+NORTH" + command = "shiftnorth" + elem + name = "CTRL+SHIFT+SOUTH" + command = "shiftsouth" + elem + name = "CTRL+SHIFT+WEST" + command = "shiftwest" + elem + name = "CTRL+SHIFT+EAST" + command = "shifteast" + elem + name = "INSERT" + command = "a-intent right" + elem + name = "DELETE" + command = "delete-key-pressed" + elem + name = "CTRL+1" + command = "a-intent help" + elem + name = "CTRL+2" + command = "a-intent disarm" + elem + name = "CTRL+3" + command = "a-intent grab" + elem + name = "CTRL+4" + command = "a-intent harm" + elem + name = "CTRL+A" + command = "KeyDown A" + elem + name = "CTRL+A+UP" + command = "KeyUp A" + elem + name = "CTRL+D" + command = "KeyDown D" + elem + name = "CTRL+D+UP" + command = "KeyUp D" + elem + name = "CTRL+E" + command = "quick-equip" + elem + name = "CTRL+F" + command = "a-intent left" + elem + name = "CTRL+G" + command = "a-intent right" + elem + name = "CTRL+Q" + command = ".northwest" + elem + name = "CTRL+R" + command = ".southwest" + elem + name = "CTRL+S" + command = "KeyDown S" + elem + name = "CTRL+S+UP" + command = "KeyUp S" + elem + name = "CTRL+W" + command = "KeyDown W" + elem + name = "CTRL+W+UP" + command = "KeyUp W" + elem + name = "CTRL+X" + command = ".northeast" + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + elem + name = "CTRL+U" + command = "Rest" + elem + name = "CTRL+B" + command = "Resist" + elem + name = "CTRL+NUMPAD1" + command = "body-r-leg" + elem + name = "CTRL+NUMPAD2" + command = "body-groin" + elem + name = "CTRL+NUMPAD3" + command = "body-l-leg" + elem + name = "CTRL+NUMPAD4" + command = "body-r-arm" + elem + name = "CTRL+NUMPAD5" + command = "body-chest" + elem + name = "CTRL+NUMPAD6" + command = "body-l-arm" + elem + name = "CTRL+NUMPAD8" + command = "body-toggle-head" + elem + name = "F1" + command = "request-help" + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + elem + name = "F2" + command = "ooc" + elem + name = "F2+REP" + command = ".screenshot auto" + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + elem + name = "F3" + command = ".say" + elem + name = "F4" + command = ".me" + elem + name = "F5" + command = "asay" + elem + name = "F6" + command = "Player-Panel-New" + elem + name = "F7" + command = "Admin-PM" + elem + name = "F8" + command = "Invisimin" + elem + name = "F12" + command = "F12" + elem + name = "CTRL+SHIFT+ADD" + command = "planeup" + elem + name = "CTRL+SHIFT+SUBTRACT" + command = "planedown" + +macro "hotkeymode" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true\"" + elem + name = "Shift" + command = "KeyDown Shift" + elem + name = "Shift+UP" + command = "KeyUp Shift" + elem + name = "Ctrl" + command = "KeyDown Ctrl" + elem + name = "Ctrl+UP" + command = "KeyUp Ctrl" + elem + name = "Alt" + command = "KeyDown Alt" + elem + name = "Alt+UP" + command = "KeyUp Alt" + elem + name = "NORTHEAST" + command = ".northeast" + elem + name = "SOUTHEAST" + command = ".southeast" + elem + name = "SOUTHWEST" + command = ".southwest" + elem + name = "NORTHWEST" + command = ".northwest" + elem + name = "ALT+WEST" + command = "westfaceperm" + elem + name = "CTRL+WEST" + command = "westface" + elem + name = "West" + command = "KeyDown West" + elem + name = "West+UP" + command = "KeyUp West" + elem + name = "ALT+NORTH" + command = "northfaceperm" + elem + name = "CTRL+NORTH" + command = "northface" + elem + name = "North" + command = "KeyDown North" + elem + name = "North+UP" + command = "KeyUp North" + elem + name = "ALT+EAST" + command = "eastfaceperm" + elem + name = "CTRL+EAST" + command = "eastface" + elem + name = "East" + command = "KeyDown East" + elem + name = "East+UP" + command = "KeyUp East" + elem + name = "ALT+SOUTH" + command = "southfaceperm" + elem + name = "CTRL+SOUTH" + command = "southface" + elem + name = "South" + command = "KeyDown South" + elem + name = "South+UP" + command = "KeyUp South" + elem + name = "CTRL+SHIFT+NORTH" + command = "shiftnorth" + elem + name = "CTRL+SHIFT+SOUTH" + command = "shiftsouth" + elem + name = "CTRL+SHIFT+WEST" + command = "shiftwest" + elem + name = "CTRL+SHIFT+EAST" + command = "shifteast" + elem + name = "INSERT" + command = "a-intent right" + elem + name = "DELETE" + command = "delete-key-pressed" + elem + name = "1" + command = "a-intent help" + elem + name = "CTRL+1" + command = "a-intent help" + elem + name = "2" + command = "a-intent disarm" + elem + name = "CTRL+2" + command = "a-intent disarm" + elem + name = "3" + command = "a-intent grab" + elem + name = "CTRL+3" + command = "a-intent grab" + elem + name = "4" + command = "a-intent harm" + elem + name = "CTRL+4" + command = "a-intent harm" + elem + name = "5" + command = ".me" + elem + name = "6" + command = ".Subtle" + elem + name = "A" + command = "KeyDown A" + elem + name = "A+UP" + command = "KeyUp A" + elem + name = "D" + command = "KeyDown D" + elem + name = "D+UP" + command = "KeyUp D" + elem + name = "E" + command = "quick-equip" + elem + name = "CTRL+E" + command = "quick-equip" + elem + name = "F" + command = "a-intent left" + elem + name = "CTRL+F" + command = "a-intent left" + elem + name = "G" + command = "a-intent right" + elem + name = "CTRL+G" + command = "a-intent right" + elem + name = "H" + command = "holster" + elem + name = "CTRL+H" + command = "holster" + elem + name = "J" + command = "toggle-gun-mode" + elem + name = "CTRL+J" + command = "toggle-gun-mode" + elem + name = "Q" + command = ".northwest" + elem + name = "CTRL+Q" + command = ".northwest" + elem + name = "R" + command = ".southwest" + elem + name = "CTRL+R" + command = ".southwest" + elem "s_key" + name = "S" + command = "KeyDown S" + elem + name = "S+UP" + command = "KeyUp S" + elem + name = "T" + command = ".say" + elem "w_key" + name = "W" + command = "KeyDown W" + elem + name = "W+UP" + command = "KeyUp W" + elem + name = "X" + command = ".northeast" + elem + name = "CTRL+X" + command = ".northeast" + elem + name = "Y" + command = ".Whisper" + elem + name = "CTRL+Y" + command = ".Whisper" + elem + name = "Z" + command = "Activate-Held-Object" + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + elem + name = "U" + command = "Rest" + elem + name = "B" + command = "Resist" + elem + name = "NUMPAD1" + command = "body-r-leg" + elem + name = "NUMPAD2" + command = "body-groin" + elem + name = "NUMPAD3" + command = "body-l-leg" + elem + name = "NUMPAD4" + command = "body-r-arm" + elem + name = "NUMPAD5" + command = "body-chest" + elem + name = "NUMPAD6" + command = "body-l-arm" + elem + name = "NUMPAD8" + command = "body-toggle-head" + elem + name = "F1" + command = "request-help" + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + elem + name = "F2" + command = "ooc" + elem + name = "F2+REP" + command = ".screenshot auto" + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + elem + name = "F3" + command = ".say" + elem + name = "F4" + command = ".me" + elem + name = "F5" + command = "asay" + elem + name = "F6" + command = "Player-Panel-New" + elem + name = "F7" + command = "Admin-PM" + elem + name = "F8" + command = "Invisimin" + elem + name = "F12" + command = "F12" + elem + name = "CTRL+SHIFT+ADD" + command = "planeup" + elem + name = "CTRL+SHIFT+SUBTRACT" + command = "planedown" + +macro "borgmacro" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" + elem + name = "Shift" + command = "KeyDown Shift" + elem + name = "Shift+UP" + command = "KeyUp Shift" + elem + name = "Ctrl" + command = "KeyDown Ctrl" + elem + name = "Ctrl+UP" + command = "KeyUp Ctrl" + elem + name = "Alt" + command = "KeyDown Alt" + elem + name = "Alt+UP" + command = "KeyUp Alt" + elem + name = "NORTHEAST" + command = ".northeast" + elem + name = "SOUTHEAST" + command = ".southeast" + elem + name = "SOUTHWEST" + command = ".southwest" + elem + name = "NORTHWEST" + command = ".northwest" + elem + name = "ALT+WEST" + command = "westfaceperm" + elem + name = "CTRL+WEST" + command = "westface" + elem + name = "West" + command = "KeyDown West" + elem + name = "West+UP" + command = "KeyUp West" + elem + name = "ALT+NORTH" + command = "northfaceperm" + elem + name = "CTRL+NORTH" + command = "northface" + elem + name = "North" + command = "KeyDown North" + elem + name = "North+UP" + command = "KeyUp North" + elem + name = "ALT+EAST" + command = "eastfaceperm" + elem + name = "CTRL+EAST" + command = "eastface" + elem + name = "East" + command = "KeyDown East" + elem + name = "East+UP" + command = "KeyUp East" + elem + name = "ALT+SOUTH" + command = "southfaceperm" + elem + name = "CTRL+SOUTH" + command = "southface" + elem + name = "South" + command = "KeyDown South" + elem + name = "South+UP" + command = "KeyUp South" + elem + name = "CTRL+SHIFT+NORTH" + command = "shiftnorth" + elem + name = "CTRL+SHIFT+SOUTH" + command = "shiftsouth" + elem + name = "CTRL+SHIFT+WEST" + command = "shiftwest" + elem + name = "CTRL+SHIFT+EAST" + command = "shifteast" + elem + name = "INSERT" + command = "a-intent right" + elem + name = "DELETE" + command = "delete-key-pressed" + elem + name = "CTRL+1" + command = "toggle-module 1" + elem + name = "CTRL+2" + command = "toggle-module 2" + elem + name = "CTRL+3" + command = "toggle-module 3" + elem + name = "CTRL+4" + command = "a-intent left" + elem + name = "CTRL+A" + command = "KeyDown A" + elem + name = "CTRL+A+UP" + command = "KeyUp A" + elem + name = "CTRL+D" + command = "KeyDown D" + elem + name = "CTRL+D+UP" + command = "KeyUp D" + elem + name = "CTRL+F" + command = "a-intent left" + elem + name = "CTRL+G" + command = "a-intent right" + elem + name = "CTRL+Q" + command = ".northwest" + elem + name = "CTRL+R" + command = ".southwest" + elem + name = "CTRL+S" + command = "KeyDown S" + elem + name = "CTRL+S+UP" + command = "KeyUp S" + elem + name = "CTRL+W" + command = "KeyDown W" + elem + name = "CTRL+W+UP" + command = "KeyUp W" + elem + name = "CTRL+X" + command = ".northeast" + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + elem + name = "CTRL+U" + command = "Rest" + elem + name = "CTRL+NUMPAD1" + command = "body-r-leg" + elem + name = "CTRL+NUMPAD2" + command = "body-groin" + elem + name = "CTRL+NUMPAD3" + command = "body-l-leg" + elem + name = "CTRL+NUMPAD4" + command = "body-r-arm" + elem + name = "CTRL+NUMPAD5" + command = "body-chest" + elem + name = "CTRL+NUMPAD6" + command = "body-l-arm" + elem + name = "CTRL+NUMPAD8" + command = "body-toggle-head" + elem + name = "F1" + command = "request-help" + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + elem + name = "F2" + command = "ooc" + elem + name = "F2+REP" + command = ".screenshot auto" + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + elem + name = "F3" + command = ".say" + elem + name = "F4" + command = ".me" + elem + name = "F5" + command = "asay" + elem + name = "F6" + command = "Player-Panel-New" + elem + name = "F7" + command = "Admin-PM" + elem + name = "F8" + command = "Invisimin" + elem + name = "F12" + command = "F12" + elem + name = "CTRL+SHIFT+ADD" + command = "planeup" + elem + name = "CTRL+SHIFT+SUBTRACT" + command = "planedown" + +menu "menu" + elem + name = "&File" + command = "" + saved-params = "is-checked" + elem + name = "&Quick screenshot\tF2" + command = ".screenshot auto" + category = "&File" + saved-params = "is-checked" + elem + name = "&Save screenshot as...\tShift+F2" + command = ".screenshot" + category = "&File" + saved-params = "is-checked" + elem + name = "&Reconnect" + command = ".reconnect" + category = "&File" + saved-params = "is-checked" + elem + name = "&Check ping" + command = ".ping" + category = "&File" + saved-params = "is-checked" + elem + name = "" + command = "" + category = "&File" + saved-params = "is-checked" + elem + name = "&Quit" + command = ".quit" + category = "&File" + saved-params = "is-checked" + elem + name = "&Icons" + command = "" + saved-params = "is-checked" + elem "stretch" + name = "&Stretch to fit" + command = ".winset \"mapwindow.map.icon-size=0\"" + category = "&Icons" + is-checked = true + can-check = true + group = "size" + saved-params = "is-checked" + elem "icon128" + name = "&128x128" + command = ".winset \"mapwindow.map.icon-size=128\"" + category = "&Icons" + can-check = true + group = "size" + saved-params = "is-checked" + elem "icon96" + name = "&96x96" + command = ".winset \"mapwindow.map.icon-size=96\"" + category = "&Icons" + can-check = true + group = "size" + saved-params = "is-checked" + elem "icon64" + name = "&64x64" + command = ".winset \"mapwindow.map.icon-size=64\"" + category = "&Icons" + can-check = true + group = "size" + saved-params = "is-checked" + elem "icon48" + name = "&48x48" + command = ".winset \"mapwindow.map.icon-size=48\"" + category = "&Icons" + can-check = true + group = "size" + saved-params = "is-checked" + elem "icon32" + name = "&32x32" + command = ".winset \"mapwindow.map.icon-size=32\"" + category = "&Icons" + can-check = true + group = "size" + saved-params = "is-checked" + elem + name = "" + command = "" + category = "&Icons" + saved-params = "is-checked" + elem "textmode" + name = "&Text" + command = ".winset \"menu.textmode.is-checked=true?mapwindow.map.text-mode=true:mapwindow.map.text-mode=false\"" + category = "&Icons" + can-check = true + saved-params = "is-checked" + elem + name = "&Scaling" + command = "" + saved-params = "is-checked" + elem "nearest-neighbor" + name = "&Nearest Neighbor" + command = ".winset \"mapwindow.map.zoom-mode=distort\"" + category = "&Scaling" + can-check = true + group = "scale" + saved-params = "is-checked" + elem "point-sample" + name = "&Point Sampling" + command = ".winset \"mapwindow.map.zoom-mode=normal\"" + category = "&Scaling" + can-check = true + group = "scale" + saved-params = "is-checked" + elem "blur" + name = "&Blur" + command = ".winset \"mapwindow.map.zoom-mode=blur\"" + category = "&Scaling" + can-check = true + group = "scale" + saved-params = "is-checked" + elem + name = "&Help" + command = "" + saved-params = "is-checked" + elem + name = "&Admin help\tF1" + command = "request-help" + category = "&Help" + saved-params = "is-checked" + elem + name = "&Hotkeys" + command = "hotkeys-help" + category = "&Help" + saved-params = "is-checked" + +window "mainwindow" + elem "mainwindow" + type = MAIN + pos = 281,0 + size = 640x440 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-default = true + saved-params = "pos;size;is-minimized;is-maximized" + title = "CHOMPStation" // CHOMP Edit + is-maximized = true + statusbar = false + icon = 'icons/ss13_64.png' // CHOMP Edit + macro = "macro" + menu = "menu" + elem "asset_cache_browser" + type = BROWSER + pos = 0,0 + size = 200x200 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + saved-params = "" + elem "hotkey_toggle" + type = BUTTON + pos = 560,400 + size = 80x20 + anchor1 = 100,100 + anchor2 = -1,-1 + saved-params = "" + text = "Hotkey Toggle" + command = ".winset \"mainwindow.macro!=macro ? mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true : mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" + button-type = pushbox + elem "mainvsplit" + type = CHILD + pos = 3,0 + size = 634x400 + anchor1 = 0,0 + anchor2 = 100,100 + saved-params = "splitter" + right = "rpane" + is-vert = true + elem "input" + type = INPUT + pos = 3,400 + size = 517x20 + anchor1 = 0,100 + anchor2 = 100,100 + background-color = #d3b5b5 + is-default = true + border = sunken + saved-params = "command" + elem "status_bar" + type = LABEL + pos = 3,420 + size = 517x16 + anchor1 = 0,100 + anchor2 = 100,100 + is-visible = true + text = "" + align = left + border = line + elem "saybutton" + type = BUTTON + pos = 520,400 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + saved-params = "is-checked" + text = "Chat" + command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\"" + button-type = pushbox + elem "tooltip" + type = BROWSER + pos = 0,0 + size = 999x999 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + saved-params = "" + +window "mapwindow" + elem "mapwindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + on-status = ".winset \"status_bar.text=[[*]]\" " + elem "map" + type = MAP + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "Arial Rounded MT Bold,Arial Black,Arial,sans-serif" + font-size = 7 + text-color = none + is-default = true + saved-params = "icon-size" + on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" + on-hide = ".winset\"mainwindow.mainvsplit.left=\"" + style = ".center { text-align: center; } .runechatdiv {background-color: #20202070} .black_outline { -dm-text-outline: 1px black } .boldtext { font-weight: bold; } .maptext { font-family: 'Small Fonts'; font-size: 7px; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .very_small { font-size: 5px;} .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 7px; font-style: italic; }" + +window "outputwindow" + elem "outputwindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + elem "browseroutput" + type = BROWSER + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + is-visible = false + is-disabled = true + saved-params = "" + elem "output" + type = OUTPUT + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + is-default = true + saved-params = "" + style = ".system {color:#FF0000;}" + enable-http-images = true + +window "prefs_markings_subwindow" + elem "prefs_markings_subwindow" + type = MAIN + pos = 281,0 + size = 400x400 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + is-visible = false + saved-params = "pos;size;is-minimized;is-maximized" + title = "Marking Selection Editing" + statusbar = false + can-minimize = false + outer-size = 416x439 + inner-size = 400x400 + elem "prefs_markings_browser" + type = BROWSER + pos = 0,0 + size = 400x400 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "" + +window "rpane" + elem "rpane" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + outer-size = 656x538 + inner-size = 640x499 + elem "rpanewindow" + type = CHILD + pos = 0,-3 + size = 640x499 + anchor1 = 0,0 + anchor2 = 100,100 + background-color = none + saved-params = "splitter" + right = "outputwindow" + is-vert = false + elem "patreon" + type = BUTTON + pos = 488,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = '#005813' + text-color = #FFFFFF + saved-params = "is-checked" + text = "Patreon" + command = "patreon" + group = "rpanemode" + elem "discord" + type = BUTTON + pos = 428,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "Discord" + command = "discord" + group = "rpanemode" + elem "github" + type = BUTTON + pos = 368,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "GitHub" + command = "github" + group = "rpanemode" + elem "mapb" + type = BUTTON + pos = 308,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "Map" + command = "map" + group = "rpanemode" + elem "rulesb" + type = BUTTON + pos = 248,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "Rules" + command = "rules" + group = "rpanemode" + elem "forumb" + type = BUTTON + pos = 188,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "Forum" + command = "forum" + group = "rpanemode" + elem "wikib" + type = BUTTON + pos = 128,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "is-checked" + text = "Wiki" + command = "wiki" + group = "rpanemode" + elem "textb" + type = BUTTON + pos = 0,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + is-visible = false + saved-params = "is-checked" + text = "Text" + command = ".winset \"rpanewindow.left=;\"" + is-checked = true + group = "rpanemode" + button-type = pushbox + elem "infob" + type = BUTTON + pos = 60,0 + size = 60x16 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + is-visible = false + saved-params = "is-checked" + text = "Info" + command = ".winset \"rpanewindow.left=infowindow\"" + group = "rpanemode" + button-type = pushbox + elem "mediapanel" + type = BROWSER + pos = 392,25 + size = 1x1 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + is-visible = false + saved-params = "" + +window "preferences_window" + elem "preferences_window" + type = MAIN + pos = 281,0 + size = 1000x800 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + saved-params = "pos;size;is-minimized;is-maximized" + statusbar = false + elem "preferences_browser" + type = BROWSER + pos = 0,0 + size = 800x800 + anchor1 = 0,0 + anchor2 = 80,100 + saved-params = "" + elem "character_preview_map" + type = MAP + pos = 800,0 + size = 200x800 + anchor1 = 80,0 + anchor2 = 100,100 + right-click = true + saved-params = "zoom;letterbox;zoom-mode" + +window "ooc_notes" + elem "ooc_notes" + type = MAIN + pos = 25,25 + size = 500x600 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + saved-params = "pos;is-minimized;is-maximized" + statusbar = false + elem "ooc_notes_panel" + type = BROWSER + pos = 0,0 + size = 500x600 + anchor1 = 0,0 + anchor2 = 80,100 + saved-params = "" + +window "infowindow" + elem "infowindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" + title = "Info" + is-pane = true + elem "info" + type = INFO + pos = 0,0 + size = 638x477 + anchor1 = 0,0 + anchor2 = 100,100 + is-default = true + saved-params = "" + highlight-color = #00aa00 + on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" + on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" + +window "text_editor" + elem "text_editor" + type = MAIN + pos = 281,0 + size = 360x488 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + border = sunken + saved-params = "pos;size;is-minimized;is-maximized" + title = "Text Editor" + can-minimize = false + can-resize = false + elem "exit" + type = BUTTON + pos = 248,456 + size = 104x24 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "is-checked" + text = "Exit without saving" + command = "" + elem "save" + type = BUTTON + pos = 128,456 + size = 104x24 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "is-checked" + text = "Save" + command = "" + elem "saveexit" + type = BUTTON + pos = 8,456 + size = 104x24 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "is-checked" + text = "Save + Exit" + command = "" + elem "textedit" + type = INPUT + pos = 0,0 + size = 360x448 + anchor1 = -1,-1 + anchor2 = -1,-1 + border = line + saved-params = "" + multi-line = true diff --git a/maps/northern_star/job/outfits.dm b/maps/northern_star/job/outfits.dm index 5166dd87aa..7d07d0d1f3 100644 --- a/maps/northern_star/job/outfits.dm +++ b/maps/northern_star/job/outfits.dm @@ -1,6 +1,6 @@ -//Job Outfits - -/decl/hierarchy/outfit/job/assistant/resident - name = OUTFIT_JOB_NAME("Resident") - id_pda_assignment = "Resident" +//Job Outfits + +/decl/hierarchy/outfit/job/assistant/resident + name = OUTFIT_JOB_NAME("Resident") + id_pda_assignment = "Resident" uniform = /obj/item/clothing/under/color/white \ No newline at end of file diff --git a/maps/northern_star/northern_star_jobs.dm b/maps/northern_star/northern_star_jobs.dm index fe0b5a1310..57fba6a034 100644 --- a/maps/northern_star/northern_star_jobs.dm +++ b/maps/northern_star/northern_star_jobs.dm @@ -1,9 +1,9 @@ -// Overrides the alt titles. -/datum/job/assistant - alt_titles = list( - "Technical Assistant", - "Medical Intern", - "Research Assistant", - "Visitor" = /decl/hierarchy/outfit/job/assistant/visitor, - "Resident" = /decl/hierarchy/outfit/job/assistant/resident +// Overrides the alt titles. +/datum/job/assistant + alt_titles = list( + "Technical Assistant", + "Medical Intern", + "Research Assistant", + "Visitor" = /decl/hierarchy/outfit/job/assistant/visitor, + "Resident" = /decl/hierarchy/outfit/job/assistant/resident ) \ No newline at end of file diff --git a/maps/offmap_vr/om_ships/abductor.dm b/maps/offmap_vr/om_ships/abductor.dm index bb731632e5..d8d23f295e 100644 --- a/maps/offmap_vr/om_ships/abductor.dm +++ b/maps/offmap_vr/om_ships/abductor.dm @@ -1,88 +1,88 @@ -// Compile in the map for CI testing if we're testing compileability of all the maps -#if MAP_TEST -#include "abductor.dmm" -#endif - -// Map template for spawning the shuttle -/datum/map_template/om_ships/abductor - name = "OM Ship - Abductor Ship (New Z)" - desc = "A ship for spooky aliens to kidnap farmers and unfortunate spacemen." - mappath = 'abductor.dmm' - -/area/abductor - requires_power = 0 - icon_state = "purple" - -/area/abductor/ - name = "Abductor Ship" - flags = RAD_SHIELDED | BLUE_SHIELDED - -/area/abductor/interior - name = "Abductor Ship Interior" - -/area/abductor/exterior - name = "Abductor Ship Exterior" - has_gravity = 0 - -// The 'Abductor Ship' -/obj/effect/overmap/visitable/ship/abductor - name = "strange spacecraft" - desc = "Spacefaring vessel." - icon = 'icons/obj/overmap_vr.dmi' - icon_state = "abductor" - color = "#134956" - scanner_desc = @{"[i]Registration[/i]: Unknown -[i]Class[/i]: Corvette -[i]Transponder[/i]: No transponder detected." -[b]Notice[/b]: Deep scans detect unknown power signatures, and onboard transporter technology."} - vessel_mass = 8000 - vessel_size = SHIP_SIZE_SMALL - initial_generic_waypoints = list("abductor_port", "abductor_starboard") - fore_dir = NORTH - known = FALSE - -/obj/item/weapon/paper/alien/abductor - name = "Read Me" - info = {"((Just to state the obvious here, but make sure you're reading OOC notes and all that. This role does not give you any special protections from the rules. Only abduct people who seem like they'd be cool with it.))

                        - -Your mission is to travel out into space to retrieve individuals to experiment upon.

                        - -Just what experiments you do are up to you, thought it should be noted, we can't do experiments on corpses, so you should be careful not to kill anyone in the process of acquiring your subject. Needless killing is grounds for termination from the organization.

                        - -The experimentation process however can be fatal if necessary, so long as we get good data. ((And the person's cool with it OOCly))

                        - -You will find that the ship is equipped with transporter technology. There are teleporters to the outside world on both the port and starboard sides. Each of the experimentation chambers is also outfitted with an advanced translocator device that is linked to its given room. You will want to ensure that you take a translocator device with you BEFORE you leave the ship, as there will be no other way for you to return without assistance.

                        - -Your translocator device is arguably your most critical piece of equipment, and it is imperative that you not lose it, as possessing it would allow outsiders access to the ship.

                        - -The center of the ship sports the shield generator, as well as the chemical and resleeving labs. It would be wise to ensure that if your experiments are fatal, to scan the mind and body of your subject before you proceed, so we can ensure that we can return the subjects to where we find them.

                        - -To the starboard and port sides you will find a total of six experimentation rooms, and two transporter rooms, as well as two engine rooms at the aft.

                        - -The aft center of the ship is the common equipment room. The items here are limited in quantity, so only take what you intend to use in your given task.

                        - -At the fore of the vessel are the briefing rooms, and the bridge.

                        - -Lastly, there are camera uplink consoles scattered around the ship. It is recommended that you take stock of where potential targets are before you depart.

                        - -You will find a dispenser within the room you started in which contains some basic equipment that you may wish to take with you. Please do not loot the dispensers from other rooms unless the one assigned to it is okay with it.

                        - -And finally, to leave this room, you will want to put your ID on the table, and pray to the corporate overlords to add access 777 to it."} - -/obj/machinery/porta_turret/alien/abductor - name = "anti-personnel turret" - installation = /obj/item/weapon/gun/energy/gun/taser - lethal = FALSE - health = 500 // Sturdier turrets, non-lethal, for capturing people alive - maxhealth = 500 - req_one_access = list(777) // The code I've been using for events, same as the doors - -/obj/machinery/porta_turret/alien/abductor/ion - name = "anti-personnel turret" - installation = /obj/item/weapon/gun/energy/ionrifle/weak - lethal = TRUE - -/obj/machinery/power/rtg/abductor/built/abductor - name = "Void Core" - power_gen = 5000000 - +// Compile in the map for CI testing if we're testing compileability of all the maps +#if MAP_TEST +#include "abductor.dmm" +#endif + +// Map template for spawning the shuttle +/datum/map_template/om_ships/abductor + name = "OM Ship - Abductor Ship (New Z)" + desc = "A ship for spooky aliens to kidnap farmers and unfortunate spacemen." + mappath = 'abductor.dmm' + +/area/abductor + requires_power = 0 + icon_state = "purple" + +/area/abductor/ + name = "Abductor Ship" + flags = RAD_SHIELDED | BLUE_SHIELDED + +/area/abductor/interior + name = "Abductor Ship Interior" + +/area/abductor/exterior + name = "Abductor Ship Exterior" + has_gravity = 0 + +// The 'Abductor Ship' +/obj/effect/overmap/visitable/ship/abductor + name = "strange spacecraft" + desc = "Spacefaring vessel." + icon = 'icons/obj/overmap_vr.dmi' + icon_state = "abductor" + color = "#134956" + scanner_desc = @{"[i]Registration[/i]: Unknown +[i]Class[/i]: Corvette +[i]Transponder[/i]: No transponder detected." +[b]Notice[/b]: Deep scans detect unknown power signatures, and onboard transporter technology."} + vessel_mass = 8000 + vessel_size = SHIP_SIZE_SMALL + initial_generic_waypoints = list("abductor_port", "abductor_starboard") + fore_dir = NORTH + known = FALSE + +/obj/item/weapon/paper/alien/abductor + name = "Read Me" + info = {"((Just to state the obvious here, but make sure you're reading OOC notes and all that. This role does not give you any special protections from the rules. Only abduct people who seem like they'd be cool with it.))

                        + +Your mission is to travel out into space to retrieve individuals to experiment upon.

                        + +Just what experiments you do are up to you, thought it should be noted, we can't do experiments on corpses, so you should be careful not to kill anyone in the process of acquiring your subject. Needless killing is grounds for termination from the organization.

                        + +The experimentation process however can be fatal if necessary, so long as we get good data. ((And the person's cool with it OOCly))

                        + +You will find that the ship is equipped with transporter technology. There are teleporters to the outside world on both the port and starboard sides. Each of the experimentation chambers is also outfitted with an advanced translocator device that is linked to its given room. You will want to ensure that you take a translocator device with you BEFORE you leave the ship, as there will be no other way for you to return without assistance.

                        + +Your translocator device is arguably your most critical piece of equipment, and it is imperative that you not lose it, as possessing it would allow outsiders access to the ship.

                        + +The center of the ship sports the shield generator, as well as the chemical and resleeving labs. It would be wise to ensure that if your experiments are fatal, to scan the mind and body of your subject before you proceed, so we can ensure that we can return the subjects to where we find them.

                        + +To the starboard and port sides you will find a total of six experimentation rooms, and two transporter rooms, as well as two engine rooms at the aft.

                        + +The aft center of the ship is the common equipment room. The items here are limited in quantity, so only take what you intend to use in your given task.

                        + +At the fore of the vessel are the briefing rooms, and the bridge.

                        + +Lastly, there are camera uplink consoles scattered around the ship. It is recommended that you take stock of where potential targets are before you depart.

                        + +You will find a dispenser within the room you started in which contains some basic equipment that you may wish to take with you. Please do not loot the dispensers from other rooms unless the one assigned to it is okay with it.

                        + +And finally, to leave this room, you will want to put your ID on the table, and pray to the corporate overlords to add access 777 to it."} + +/obj/machinery/porta_turret/alien/abductor + name = "anti-personnel turret" + installation = /obj/item/weapon/gun/energy/gun/taser + lethal = FALSE + health = 500 // Sturdier turrets, non-lethal, for capturing people alive + maxhealth = 500 + req_one_access = list(777) // The code I've been using for events, same as the doors + +/obj/machinery/porta_turret/alien/abductor/ion + name = "anti-personnel turret" + installation = /obj/item/weapon/gun/energy/ionrifle/weak + lethal = TRUE + +/obj/machinery/power/rtg/abductor/built/abductor + name = "Void Core" + power_gen = 5000000 + diff --git a/maps/offmap_vr/om_ships/itglight.dm b/maps/offmap_vr/om_ships/itglight.dm index 9671a4aecd..e0ce61cb62 100644 --- a/maps/offmap_vr/om_ships/itglight.dm +++ b/maps/offmap_vr/om_ships/itglight.dm @@ -1,152 +1,152 @@ -// Compile in the map for CI testing if we're testing compileability of all the maps -#if MAP_TEST -#include "itglight.dmm" -#endif - -// Map template for spawning the shuttle -/datum/map_template/om_ships/itglight - name = "OM Ship - ITG Dauntless (New Z)" - desc = "A small, well armed interstellar cargo ship!!" - mappath = 'itglight.dmm' - -/area/itglight - requires_power = 1 - icon_state = "purple" - -/area/itglight/cockpit - name = "Dauntless - Cockpit" -/area/itglight/captain - name = "Dauntless - Captain's Quarters" -/area/itglight/readyroom - name = "Dauntless - Ready Room" -/area/itglight/metingroom - name = "Dauntless - Meeting Room" -/area/itglight/forehall - name = "Dauntless - Fore Hall" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/starboardcargo - name = "Dauntless - Starboard Cargo Bay" -/area/itglight/starboardhighsec - name = "Dauntless - Starboard Secure Cargo" -/area/itglight/starboarddocking - name = "Dauntless - Starboard Docking Port" -/area/itglight/portcargo - name = "Dauntless - Port Cargo Bay" -/area/itglight/porthighsec - name = "Dauntless - Port Secure Cargo" -/area/itglight/portdocking - name = "Dauntless - Port Docking Port" -/area/itglight/common - name = "Dauntless - Common Area" -/area/itglight/lockers - name = "Dauntless - Locker Room" -/area/itglight/passengersleeping - name = "Dauntless - Passenger Sleeping Barracks" -/area/itglight/showers - name = "Dauntless - Showers" -/area/itglight/restrooms - name = "Dauntless - Restrooms" -/area/itglight/afthall - name = "Dauntless - Aft Hall" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/medbay - name = "Dauntless - Medbay" -/area/itglight/kitchen - name = "Dauntless - Kitchen" -/area/itglight/crew1 - name = "Dauntless - Crew Quarters - 1" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/crew2 - name = "Dauntless - Crew Quarters - 2" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/crew3 - name = "Dauntless - Crew Quarters - 3" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/crew4 - name = "Dauntless - Crew Quarters - 4" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/shuttlebay - name = "Dauntless - Shuttle Bay" -/area/itglight/starboardengi - name = "Dauntless - Starboard Engineering" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/starboardsolars - name = "Dauntless - Starboard Solars" -/area/itglight/portengi - name = "Dauntless - Port Engineering" - flags = RAD_SHIELDED | BLUE_SHIELDED -/area/itglight/portsolars - name = "Dauntless - Port Solars" - -/area/shuttle/itglightshuttle - name = "ITG Shuttlecraft" - requires_power = 1 - dynamic_lighting = 1 - -// The 'Dauntless' -/obj/effect/overmap/visitable/ship/itglight - name = "ITG Dauntless" - icon_state = "serb_destroyer_g" - desc = "Spacefaring vessel. Friendly IFF detected." - scanner_desc = @{"[i]Registration[/i]: ITG Dauntless -[i]Class[/i]: Small Cargo Frigate (Low Displacement) -[i]Transponder[/i]: Transmitting (CIV), non-hostile" -[b]Notice[/b]: May carry passengers"} - vessel_mass = 8000 - vessel_size = SHIP_SIZE_SMALL - initial_generic_waypoints = list("itglight_fore", "itglight_aft", "itglight_port", "itglight_starboard", "itglight_port_dock", "itglight_starboard_dock") - initial_restricted_waypoints = list("ITG Shuttlecraft" = list("omship_spawn_itglightshuttle")) - fore_dir = NORTH - - skybox_icon = 'itglight.dmi' - skybox_icon_state = "skybox" - skybox_pixel_x = 425 - skybox_pixel_y = 200 - -/obj/effect/overmap/visitable/ship/itglight/build_skybox_representation() - ..() - if(!cached_skybox_image) - return - cached_skybox_image.add_overlay("glow") - -// The shuttle's 'shuttle' computer -/obj/machinery/computer/shuttle_control/explore/itglightshuttle - name = "shuttle control console" - shuttle_tag = "ITG Shuttlecraft" - -// A shuttle lateloader landmark -/obj/effect/shuttle_landmark/shuttle_initializer/itglightshuttle - name = "ITG Dauntless - Shuttle Bay" - base_area = /area/itglight/shuttlebay - base_turf = /turf/simulated/floor/reinforced - landmark_tag = "omship_spawn_itglightshuttle" - docking_controller = "itglight_shuttlebay" - shuttle_type = /datum/shuttle/autodock/overmap/itglightshuttle - -// The 'shuttle' -/datum/shuttle/autodock/overmap/itglightshuttle - name = "ITG Shuttlecraft" - current_location = "omship_spawn_itglightshuttle" - docking_controller_tag = "itglightshuttle_docker" - shuttle_area = /area/shuttle/itglightshuttle - fuel_consumption = 0 - defer_initialisation = TRUE - -/obj/machinery/photocopier/faxmachine/itglight - department = "ITG Dauntless" - desc = "The ship's fax machine! It's a safe assumption that most of the departments listed aren't on your ship, since the ship only has one." - -/obj/item/weapon/paper/Dauntless - name = "Notes about Dauntless" - info = {"Welcome to the Ironcrest Transport Group

                        -

                        ITG Dauntless

                        - Welcome to the Dauntless, there are a few things you should know.

                        - WRITE DOWN THE DOCKING CODES
                        - You can find them in the Captain's Quarters, and on the shuttle control computers. Keep them handy, just in case.

                        -

                        DON'T OVERDO IT

                        - The Dauntless is FAST, but if you get her up to interstellar speeds, it's hard to slow back down again.

                        - Additionally, exercise extreme caution around rocks and dust.
                        - She has six point defense turrets, but her armor is thin, and she hasn't got any fancy shields.
                        - She's not a combat ship, and she demands a competent pilot to treat her right.

                        - Also d1a2 is best port, just saying.

                        +// Compile in the map for CI testing if we're testing compileability of all the maps +#if MAP_TEST +#include "itglight.dmm" +#endif + +// Map template for spawning the shuttle +/datum/map_template/om_ships/itglight + name = "OM Ship - ITG Dauntless (New Z)" + desc = "A small, well armed interstellar cargo ship!!" + mappath = 'itglight.dmm' + +/area/itglight + requires_power = 1 + icon_state = "purple" + +/area/itglight/cockpit + name = "Dauntless - Cockpit" +/area/itglight/captain + name = "Dauntless - Captain's Quarters" +/area/itglight/readyroom + name = "Dauntless - Ready Room" +/area/itglight/metingroom + name = "Dauntless - Meeting Room" +/area/itglight/forehall + name = "Dauntless - Fore Hall" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/starboardcargo + name = "Dauntless - Starboard Cargo Bay" +/area/itglight/starboardhighsec + name = "Dauntless - Starboard Secure Cargo" +/area/itglight/starboarddocking + name = "Dauntless - Starboard Docking Port" +/area/itglight/portcargo + name = "Dauntless - Port Cargo Bay" +/area/itglight/porthighsec + name = "Dauntless - Port Secure Cargo" +/area/itglight/portdocking + name = "Dauntless - Port Docking Port" +/area/itglight/common + name = "Dauntless - Common Area" +/area/itglight/lockers + name = "Dauntless - Locker Room" +/area/itglight/passengersleeping + name = "Dauntless - Passenger Sleeping Barracks" +/area/itglight/showers + name = "Dauntless - Showers" +/area/itglight/restrooms + name = "Dauntless - Restrooms" +/area/itglight/afthall + name = "Dauntless - Aft Hall" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/medbay + name = "Dauntless - Medbay" +/area/itglight/kitchen + name = "Dauntless - Kitchen" +/area/itglight/crew1 + name = "Dauntless - Crew Quarters - 1" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/crew2 + name = "Dauntless - Crew Quarters - 2" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/crew3 + name = "Dauntless - Crew Quarters - 3" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/crew4 + name = "Dauntless - Crew Quarters - 4" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/shuttlebay + name = "Dauntless - Shuttle Bay" +/area/itglight/starboardengi + name = "Dauntless - Starboard Engineering" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/starboardsolars + name = "Dauntless - Starboard Solars" +/area/itglight/portengi + name = "Dauntless - Port Engineering" + flags = RAD_SHIELDED | BLUE_SHIELDED +/area/itglight/portsolars + name = "Dauntless - Port Solars" + +/area/shuttle/itglightshuttle + name = "ITG Shuttlecraft" + requires_power = 1 + dynamic_lighting = 1 + +// The 'Dauntless' +/obj/effect/overmap/visitable/ship/itglight + name = "ITG Dauntless" + icon_state = "serb_destroyer_g" + desc = "Spacefaring vessel. Friendly IFF detected." + scanner_desc = @{"[i]Registration[/i]: ITG Dauntless +[i]Class[/i]: Small Cargo Frigate (Low Displacement) +[i]Transponder[/i]: Transmitting (CIV), non-hostile" +[b]Notice[/b]: May carry passengers"} + vessel_mass = 8000 + vessel_size = SHIP_SIZE_SMALL + initial_generic_waypoints = list("itglight_fore", "itglight_aft", "itglight_port", "itglight_starboard", "itglight_port_dock", "itglight_starboard_dock") + initial_restricted_waypoints = list("ITG Shuttlecraft" = list("omship_spawn_itglightshuttle")) + fore_dir = NORTH + + skybox_icon = 'itglight.dmi' + skybox_icon_state = "skybox" + skybox_pixel_x = 425 + skybox_pixel_y = 200 + +/obj/effect/overmap/visitable/ship/itglight/build_skybox_representation() + ..() + if(!cached_skybox_image) + return + cached_skybox_image.add_overlay("glow") + +// The shuttle's 'shuttle' computer +/obj/machinery/computer/shuttle_control/explore/itglightshuttle + name = "shuttle control console" + shuttle_tag = "ITG Shuttlecraft" + +// A shuttle lateloader landmark +/obj/effect/shuttle_landmark/shuttle_initializer/itglightshuttle + name = "ITG Dauntless - Shuttle Bay" + base_area = /area/itglight/shuttlebay + base_turf = /turf/simulated/floor/reinforced + landmark_tag = "omship_spawn_itglightshuttle" + docking_controller = "itglight_shuttlebay" + shuttle_type = /datum/shuttle/autodock/overmap/itglightshuttle + +// The 'shuttle' +/datum/shuttle/autodock/overmap/itglightshuttle + name = "ITG Shuttlecraft" + current_location = "omship_spawn_itglightshuttle" + docking_controller_tag = "itglightshuttle_docker" + shuttle_area = /area/shuttle/itglightshuttle + fuel_consumption = 0 + defer_initialisation = TRUE + +/obj/machinery/photocopier/faxmachine/itglight + department = "ITG Dauntless" + desc = "The ship's fax machine! It's a safe assumption that most of the departments listed aren't on your ship, since the ship only has one." + +/obj/item/weapon/paper/Dauntless + name = "Notes about Dauntless" + info = {"Welcome to the Ironcrest Transport Group

                        +

                        ITG Dauntless

                        + Welcome to the Dauntless, there are a few things you should know.

                        + WRITE DOWN THE DOCKING CODES
                        + You can find them in the Captain's Quarters, and on the shuttle control computers. Keep them handy, just in case.

                        +

                        DON'T OVERDO IT

                        + The Dauntless is FAST, but if you get her up to interstellar speeds, it's hard to slow back down again.

                        + Additionally, exercise extreme caution around rocks and dust.
                        + She has six point defense turrets, but her armor is thin, and she hasn't got any fancy shields.
                        + She's not a combat ship, and she demands a competent pilot to treat her right.

                        + Also d1a2 is best port, just saying.

                        Also the ship is 150 meters long and 92 meters wide, in case that is ever relevent."} \ No newline at end of file diff --git a/maps/southern_cross/overmap/planets/kara/northern_star/northern_star.dm b/maps/southern_cross/overmap/planets/kara/northern_star/northern_star.dm index 55ce9d82b0..74bbc39137 100644 --- a/maps/southern_cross/overmap/planets/kara/northern_star/northern_star.dm +++ b/maps/southern_cross/overmap/planets/kara/northern_star/northern_star.dm @@ -1,93 +1,93 @@ -// -- Datums -- // - -/datum/map_template/sc_lateload/northern_star - name = "Kara - Z1 Northern Star" - desc = "The Northern Star mines." - mappath = 'maps/southern_cross/overmap/planets/kara/northern_star/northern_star_mine.dmm' - associated_map_datum = /datum/map_z_level/sc_lateload/northern_star - -/datum/map_z_level/sc_lateload/northern_star - name = "Northern Star mines" - z = Z_LEVEL_NS_MINE - -/datum/map_template/sc_lateload/northern_star/on_map_loaded(z) - . = ..() - new /datum/random_map/automata/cave_system/no_cracks(null, 1, 1, Z_LEVEL_NS_MINE, world.maxx, world.maxy) // Create caves. - new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_NS_MINE, 64, 64) // Create the mining ore distribution map. - -// -- Overmap -- // -//This is actually in kara.dm one folder back. -// Overmap object for Kara, hanging in the void of space -/obj/effect/overmap/visitable/sector/northern_star_mines - name = "Northern Star" - icon_state = "object" - desc = "The seat of NT power in the Vir system lies in the asteroid colony orbiting Kara, the NCS Northern Star." - scanner_desc = @{"[i]Stellar Body[/i]: Kara -[i]Class[/i]: Jovian Colony -[i]Transponder[/i]: Transmitting (NT), NanoTrasen IFF -[i]Habitability[/i]: Low (High Pressure, Toxic Atmosphere). Habitats in orbit. -[b]Notice[/b]: NT security is currently restricting free flights to Northern Star."} - in_space = 1 - known = TRUE - start_x = 14 - start_y = 14 - extra_z_levels = list(Z_LEVEL_AEROSTAT) // Should inform the overmap that kara and NS are in the same sector despite being different locations. - initial_generic_waypoints = list("northern_star_mine_dock", "northern_star_mine_echidna_dock") //northern_star.dm landmarks - -/obj/effect/overmap/visitable/sector/northern_star_mines/get_space_zlevels()//These are the primary levels that our space station resides in. This also indicates what levels astronauts can drift into. - return list(Z_LEVEL_NS_MINE) //May add more later - -// -- Areas -- // - -/area/outpost/medical - icon_state = "" - -/area/outpost/medical/storage - name = "Medical Outpost Storage" - -/area/outpost/medical/hallway - name = "Medical Outpost Hallway" - -/area/outpost/medical/surgery - name = "Medical Outpost Surgery" - -/area/outpost/medical/dorm - name = "Medical Outpost Dorms" - -/area/outpost/medical/airlocks - name = "Medical Outpost Airlocks" - -/area/outpost/medical/rec - name = "Medical Outpost Recreation" - -/area/outpost/medical/suit_storage - name = "Medical Outpost Suit Storage" - -/area/outpost/medical/power - name = "Medical Outpost Power" - -/area/outpost/medical/main_room - name = "Medical Outpost Main Room" - -/area/outpost/medical/atmos - name = "Medical Outpost Atmospherics" - -/area/outpost/medical/backup_power - name = "Medical Outpost Backup Power" - - -// -- Landmarks -- // - -/obj/effect/shuttle_landmark/premade/northern_star/ns_mine_dock - name = "Northern Star Mine - Shuttle Dock" - landmark_tag = "northern_star_mine_dock" - -/obj/effect/shuttle_landmark/premade/northern_star/ns_mine_echidna_dock - name = "Northern Star Mine - Echidna Dock" - landmark_tag = "northern_star_mine_echidna_dock" - -// -- Turfs -- // -/turf/simulated/mineral/floor/ignore_mapgen/airless - oxygen = 0 - nitrogen = 0 - temperature = TCMB +// -- Datums -- // + +/datum/map_template/sc_lateload/northern_star + name = "Kara - Z1 Northern Star" + desc = "The Northern Star mines." + mappath = 'maps/southern_cross/overmap/planets/kara/northern_star/northern_star_mine.dmm' + associated_map_datum = /datum/map_z_level/sc_lateload/northern_star + +/datum/map_z_level/sc_lateload/northern_star + name = "Northern Star mines" + z = Z_LEVEL_NS_MINE + +/datum/map_template/sc_lateload/northern_star/on_map_loaded(z) + . = ..() + new /datum/random_map/automata/cave_system/no_cracks(null, 1, 1, Z_LEVEL_NS_MINE, world.maxx, world.maxy) // Create caves. + new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_NS_MINE, 64, 64) // Create the mining ore distribution map. + +// -- Overmap -- // +//This is actually in kara.dm one folder back. +// Overmap object for Kara, hanging in the void of space +/obj/effect/overmap/visitable/sector/northern_star_mines + name = "Northern Star" + icon_state = "object" + desc = "The seat of NT power in the Vir system lies in the asteroid colony orbiting Kara, the NCS Northern Star." + scanner_desc = @{"[i]Stellar Body[/i]: Kara +[i]Class[/i]: Jovian Colony +[i]Transponder[/i]: Transmitting (NT), NanoTrasen IFF +[i]Habitability[/i]: Low (High Pressure, Toxic Atmosphere). Habitats in orbit. +[b]Notice[/b]: NT security is currently restricting free flights to Northern Star."} + in_space = 1 + known = TRUE + start_x = 14 + start_y = 14 + extra_z_levels = list(Z_LEVEL_AEROSTAT) // Should inform the overmap that kara and NS are in the same sector despite being different locations. + initial_generic_waypoints = list("northern_star_mine_dock", "northern_star_mine_echidna_dock") //northern_star.dm landmarks + +/obj/effect/overmap/visitable/sector/northern_star_mines/get_space_zlevels()//These are the primary levels that our space station resides in. This also indicates what levels astronauts can drift into. + return list(Z_LEVEL_NS_MINE) //May add more later + +// -- Areas -- // + +/area/outpost/medical + icon_state = "" + +/area/outpost/medical/storage + name = "Medical Outpost Storage" + +/area/outpost/medical/hallway + name = "Medical Outpost Hallway" + +/area/outpost/medical/surgery + name = "Medical Outpost Surgery" + +/area/outpost/medical/dorm + name = "Medical Outpost Dorms" + +/area/outpost/medical/airlocks + name = "Medical Outpost Airlocks" + +/area/outpost/medical/rec + name = "Medical Outpost Recreation" + +/area/outpost/medical/suit_storage + name = "Medical Outpost Suit Storage" + +/area/outpost/medical/power + name = "Medical Outpost Power" + +/area/outpost/medical/main_room + name = "Medical Outpost Main Room" + +/area/outpost/medical/atmos + name = "Medical Outpost Atmospherics" + +/area/outpost/medical/backup_power + name = "Medical Outpost Backup Power" + + +// -- Landmarks -- // + +/obj/effect/shuttle_landmark/premade/northern_star/ns_mine_dock + name = "Northern Star Mine - Shuttle Dock" + landmark_tag = "northern_star_mine_dock" + +/obj/effect/shuttle_landmark/premade/northern_star/ns_mine_echidna_dock + name = "Northern Star Mine - Echidna Dock" + landmark_tag = "northern_star_mine_echidna_dock" + +// -- Turfs -- // +/turf/simulated/mineral/floor/ignore_mapgen/airless + oxygen = 0 + nitrogen = 0 + temperature = TCMB diff --git a/maps/southern_cross/shuttles/crew_shuttles_ch.dm b/maps/southern_cross/shuttles/crew_shuttles_ch.dm index cf4fb15f98..2d5d7385e4 100644 --- a/maps/southern_cross/shuttles/crew_shuttles_ch.dm +++ b/maps/southern_cross/shuttles/crew_shuttles_ch.dm @@ -1,179 +1,179 @@ -//This is old chomp code that will need updating to re-add to our game. -//CHOMPedit: Shuttle 3, Sif-bound exploration shuttle for the exploration outpost, Hangar 3, and the wilderness. -//Created so pilots stop stealing the autopilot shuttles and making station-planet travel more burdensome. - -GLOBAL_LIST_EMPTY(shuttdisp_list) - -/obj/machinery/computer/shuttle_control/web/shuttle3 - name = "shuttle control console" - shuttle_tag = "Shuttle 3" - req_access = list(access_pilot) - -/datum/shuttle/autodock/web_shuttle/shuttle3 - name = "Shuttle 3" - warmup_time = 0 - shuttle_area = /area/shuttle/shuttle3/start - current_location = "exphangar_1" - docking_controller_tag = "shuttle3_shuttle" - web_master_type = /datum/shuttle_web_master/shuttle3 - -/datum/shuttle_web_master/shuttle3 - destination_class = /datum/shuttle_destination/shuttle3 - starting_destination = /datum/shuttle_destination/shuttle3/root - -/datum/shuttle_destination/shuttle3/root - name = "Exporation Hangar One" - my_landmark = "exphangar_1" - preferred_interim_tag = "shuttle3_transit" - - radio_announce = 0 - announcer = "Southern Cross Docking Computer" - - routes_to_make = list( - /datum/shuttle_destination/shuttle3/sif_orbit = 5 SECONDS - ) - -/datum/shuttle_destination/shuttle3/root/get_arrival_message() - return "Attention, [master.my_shuttle.visible_name] has arrived to Exploration Hangar One." - -/datum/shuttle_destination/shuttle3/root/get_departure_message() - return "Attention, [master.my_shuttle.visible_name] has departed Exploration Hangar One." - -/datum/shuttle_destination/shuttle3/sif_orbit - name = "Sif Orbit" - my_landmark = "shuttle3_orbit" - preferred_interim_tag = "shuttle3_transit" - - routes_to_make = list( - /datum/shuttle_destination/shuttle3/sky = 25 SECONDS, - /datum/shuttle_destination/shuttle3/stationhangar3 = 25 SECONDS - ) - -/* -/datum/shuttle_destination/shuttle3/outside_SC - name = "Outside of NLS Southern Cross" - my_landmark = "shuttle3_seconddeck" - preferred_interim_tag = "shuttle3_transit" - - routes_to_make = list( - /datum/shuttle_destination/shuttle3/stationhangar3 = 0 SECONDS - ) -*/ - -/datum/shuttle_destination/shuttle3/stationhangar3 - name = "Southern Cross Hangar Three" - my_landmark = "hangar_3" - preferred_interim_tag = "shuttle3_transit" - - radio_announce = 0 - announcer = "Southern Cross Docking Computer" - -/datum/shuttle_destination/shuttle3/stationhangar3/get_arrival_message() - return "Attention, [master.my_shuttle.visible_name] has arrived to Hangar Three." - -/datum/shuttle_destination/shuttle3/stationhangar3/get_departure_message() - return "Attention, [master.my_shuttle.visible_name] has departed Hangar Three." - -/datum/shuttle_destination/shuttle3/sky - name = "Skies of Sif" - my_landmark = "shuttle3_sky" - preferred_interim_tag = "shuttle3_sky_transit" - - routes_to_make = list( - /datum/shuttle_destination/shuttle3/mining_base = 10 SECONDS - ) - -/datum/shuttle_destination/shuttle3/mining_base - name = "Wilderness Landing Site " - my_landmark = "shuttle3_mining" - preferred_interim_tag = "shuttle3_sky_transit" - - radio_announce = 0 - announcer = "Outpost Automated ATC" - -/datum/shuttle_destination/shuttle3/mining_base/get_arrival_message() - return "Attention, [master.my_shuttle.visible_name] has arrived to the Wilderness Area." - -/datum/shuttle_destination/shuttle3/mining_base/get_departure_message() - return "Attention, [master.my_shuttle.visible_name] has departed the Wilderness Area." - -//Shuttle displays for tracking Shuttles 1 and 2 without spammy intercom announcements. This could hypothetically be expanded to other shuttles if for some reason that's desirable. -/obj/machinery/status_display/shuttle_display - ignore_friendc = 1 - mode = STATUS_DISPLAY_CUSTOM - name = "\improper STS display" //STS means Sif Transport System - desc = "A Sif Transport System display. It tracks automated shuttles." - message1 = "SHUT1" //Intended to be set on the map. Defaults to SHUT1 if spawned in to allow lazier mapping. - - var/datum/shuttle/autodock/web_shuttle/my_shuttle //This is set by the get_my_shuttle() proc. Don't modify it here. Typepath needs to be defined this far for the compiler to recognize shuttle datum variables. - var/last_z = Z_LEVEL_STATION_ONE - var/shuttle_tag = "Shuttle 1" //This needs to use the same tag system as the shuttles subsystem. Set this on the map, otherwise defaults to "Shuttle 1." - var/location_desc //Location descriptions for extra information on examine. - -/obj/machinery/status_display/shuttle_display/examine(mob/user) //Because the displays only fit 5 characters per line. - . = ..() - . += "[shuttle_tag] is currently [location_desc]." - -/obj/machinery/status_display/shuttle_display/Initialize() - ..() - GLOB.shuttdisp_list |= src //Populates the global list for the roundstart hook. - -/hook/roundstart/proc/shuttdisp_connect() //Initialize (and LateInitialize) call before the shuttle datums exist so this is needed to make shuttle displays work when mapped in - for(var/obj/machinery/status_display/shuttle_display/SD in GLOB.shuttdisp_list) - SD.get_my_shuttle() - return TRUE - -/obj/machinery/status_display/shuttle_display/New() - ..() - get_my_shuttle() - update() - -/obj/machinery/status_display/shuttle_display/proc/get_my_shuttle() //Links the displays to their shuttles. Must be called after the shuttle datums exist. - var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag] - if(!shuttle) - log_debug("Shuttle display could not find its shuttle!") - else - my_shuttle = shuttle - GLOB.shuttdisp_list -= src //Remove the displays from the global list to reduce memory usage because it's only needed before shuttles initialize. - -/obj/machinery/status_display/shuttle_display/update() //Location tracking. - if(!..() && mode == STATUS_DISPLAY_CUSTOM) - message2 = "" - - if(!my_shuttle) - message2 = "ErrR" - location_desc = "ERROR SHUTTLE NOT FOUND" - - else if(my_shuttle.autopilot == FALSE) //This should prevent displays from being incorrect if somebody steals the shuttles. - message2 = "MANUAL" - location_desc = "piloted manually. Please contact Exploration to return the shuttle to autopilot" //Tell them to use Shuttle 3. - - else if(my_shuttle.current_location.z == Z_LEVEL_STATION_ONE) - message2 = "Stat" - last_z = Z_LEVEL_STATION_ONE - location_desc = "docked on the station" - - else if(my_shuttle.current_location.z == Z_LEVEL_SURFACE) - message2 = "Outp" - last_z = Z_LEVEL_SURFACE - location_desc = "docked on the outpost" - - else - if(last_z == Z_LEVEL_STATION_ONE) - message2 = "STS-O" - location_desc = "travelling to the outpost" - - if(last_z == Z_LEVEL_SURFACE) - message2 = "STS-S" - location_desc = "travelling to the station" - - - update_display(message1, message2) - return 1 - return 0 - -/obj/machinery/status_display/shuttle_display/receive_signal() //This should ensure the shuttle screens can never be changed to a message. - return - -/obj/machinery/status_display/shuttle_display/on_alert_changed() //Same as above but for alert levels. +//This is old chomp code that will need updating to re-add to our game. +//CHOMPedit: Shuttle 3, Sif-bound exploration shuttle for the exploration outpost, Hangar 3, and the wilderness. +//Created so pilots stop stealing the autopilot shuttles and making station-planet travel more burdensome. + +GLOBAL_LIST_EMPTY(shuttdisp_list) + +/obj/machinery/computer/shuttle_control/web/shuttle3 + name = "shuttle control console" + shuttle_tag = "Shuttle 3" + req_access = list(access_pilot) + +/datum/shuttle/autodock/web_shuttle/shuttle3 + name = "Shuttle 3" + warmup_time = 0 + shuttle_area = /area/shuttle/shuttle3/start + current_location = "exphangar_1" + docking_controller_tag = "shuttle3_shuttle" + web_master_type = /datum/shuttle_web_master/shuttle3 + +/datum/shuttle_web_master/shuttle3 + destination_class = /datum/shuttle_destination/shuttle3 + starting_destination = /datum/shuttle_destination/shuttle3/root + +/datum/shuttle_destination/shuttle3/root + name = "Exporation Hangar One" + my_landmark = "exphangar_1" + preferred_interim_tag = "shuttle3_transit" + + radio_announce = 0 + announcer = "Southern Cross Docking Computer" + + routes_to_make = list( + /datum/shuttle_destination/shuttle3/sif_orbit = 5 SECONDS + ) + +/datum/shuttle_destination/shuttle3/root/get_arrival_message() + return "Attention, [master.my_shuttle.visible_name] has arrived to Exploration Hangar One." + +/datum/shuttle_destination/shuttle3/root/get_departure_message() + return "Attention, [master.my_shuttle.visible_name] has departed Exploration Hangar One." + +/datum/shuttle_destination/shuttle3/sif_orbit + name = "Sif Orbit" + my_landmark = "shuttle3_orbit" + preferred_interim_tag = "shuttle3_transit" + + routes_to_make = list( + /datum/shuttle_destination/shuttle3/sky = 25 SECONDS, + /datum/shuttle_destination/shuttle3/stationhangar3 = 25 SECONDS + ) + +/* +/datum/shuttle_destination/shuttle3/outside_SC + name = "Outside of NLS Southern Cross" + my_landmark = "shuttle3_seconddeck" + preferred_interim_tag = "shuttle3_transit" + + routes_to_make = list( + /datum/shuttle_destination/shuttle3/stationhangar3 = 0 SECONDS + ) +*/ + +/datum/shuttle_destination/shuttle3/stationhangar3 + name = "Southern Cross Hangar Three" + my_landmark = "hangar_3" + preferred_interim_tag = "shuttle3_transit" + + radio_announce = 0 + announcer = "Southern Cross Docking Computer" + +/datum/shuttle_destination/shuttle3/stationhangar3/get_arrival_message() + return "Attention, [master.my_shuttle.visible_name] has arrived to Hangar Three." + +/datum/shuttle_destination/shuttle3/stationhangar3/get_departure_message() + return "Attention, [master.my_shuttle.visible_name] has departed Hangar Three." + +/datum/shuttle_destination/shuttle3/sky + name = "Skies of Sif" + my_landmark = "shuttle3_sky" + preferred_interim_tag = "shuttle3_sky_transit" + + routes_to_make = list( + /datum/shuttle_destination/shuttle3/mining_base = 10 SECONDS + ) + +/datum/shuttle_destination/shuttle3/mining_base + name = "Wilderness Landing Site " + my_landmark = "shuttle3_mining" + preferred_interim_tag = "shuttle3_sky_transit" + + radio_announce = 0 + announcer = "Outpost Automated ATC" + +/datum/shuttle_destination/shuttle3/mining_base/get_arrival_message() + return "Attention, [master.my_shuttle.visible_name] has arrived to the Wilderness Area." + +/datum/shuttle_destination/shuttle3/mining_base/get_departure_message() + return "Attention, [master.my_shuttle.visible_name] has departed the Wilderness Area." + +//Shuttle displays for tracking Shuttles 1 and 2 without spammy intercom announcements. This could hypothetically be expanded to other shuttles if for some reason that's desirable. +/obj/machinery/status_display/shuttle_display + ignore_friendc = 1 + mode = STATUS_DISPLAY_CUSTOM + name = "\improper STS display" //STS means Sif Transport System + desc = "A Sif Transport System display. It tracks automated shuttles." + message1 = "SHUT1" //Intended to be set on the map. Defaults to SHUT1 if spawned in to allow lazier mapping. + + var/datum/shuttle/autodock/web_shuttle/my_shuttle //This is set by the get_my_shuttle() proc. Don't modify it here. Typepath needs to be defined this far for the compiler to recognize shuttle datum variables. + var/last_z = Z_LEVEL_STATION_ONE + var/shuttle_tag = "Shuttle 1" //This needs to use the same tag system as the shuttles subsystem. Set this on the map, otherwise defaults to "Shuttle 1." + var/location_desc //Location descriptions for extra information on examine. + +/obj/machinery/status_display/shuttle_display/examine(mob/user) //Because the displays only fit 5 characters per line. + . = ..() + . += "[shuttle_tag] is currently [location_desc]." + +/obj/machinery/status_display/shuttle_display/Initialize() + ..() + GLOB.shuttdisp_list |= src //Populates the global list for the roundstart hook. + +/hook/roundstart/proc/shuttdisp_connect() //Initialize (and LateInitialize) call before the shuttle datums exist so this is needed to make shuttle displays work when mapped in + for(var/obj/machinery/status_display/shuttle_display/SD in GLOB.shuttdisp_list) + SD.get_my_shuttle() + return TRUE + +/obj/machinery/status_display/shuttle_display/New() + ..() + get_my_shuttle() + update() + +/obj/machinery/status_display/shuttle_display/proc/get_my_shuttle() //Links the displays to their shuttles. Must be called after the shuttle datums exist. + var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag] + if(!shuttle) + log_debug("Shuttle display could not find its shuttle!") + else + my_shuttle = shuttle + GLOB.shuttdisp_list -= src //Remove the displays from the global list to reduce memory usage because it's only needed before shuttles initialize. + +/obj/machinery/status_display/shuttle_display/update() //Location tracking. + if(!..() && mode == STATUS_DISPLAY_CUSTOM) + message2 = "" + + if(!my_shuttle) + message2 = "ErrR" + location_desc = "ERROR SHUTTLE NOT FOUND" + + else if(my_shuttle.autopilot == FALSE) //This should prevent displays from being incorrect if somebody steals the shuttles. + message2 = "MANUAL" + location_desc = "piloted manually. Please contact Exploration to return the shuttle to autopilot" //Tell them to use Shuttle 3. + + else if(my_shuttle.current_location.z == Z_LEVEL_STATION_ONE) + message2 = "Stat" + last_z = Z_LEVEL_STATION_ONE + location_desc = "docked on the station" + + else if(my_shuttle.current_location.z == Z_LEVEL_SURFACE) + message2 = "Outp" + last_z = Z_LEVEL_SURFACE + location_desc = "docked on the outpost" + + else + if(last_z == Z_LEVEL_STATION_ONE) + message2 = "STS-O" + location_desc = "travelling to the outpost" + + if(last_z == Z_LEVEL_SURFACE) + message2 = "STS-S" + location_desc = "travelling to the station" + + + update_display(message1, message2) + return 1 + return 0 + +/obj/machinery/status_display/shuttle_display/receive_signal() //This should ensure the shuttle screens can never be changed to a message. + return + +/obj/machinery/status_display/shuttle_display/on_alert_changed() //Same as above but for alert levels. return \ No newline at end of file diff --git a/maps/southern_cross/southern_cross_events.dm b/maps/southern_cross/southern_cross_events.dm index 589f6cfabd..0fdce99136 100644 --- a/maps/southern_cross/southern_cross_events.dm +++ b/maps/southern_cross/southern_cross_events.dm @@ -1,23 +1,23 @@ -// The Station Director's office is specific to the Southern Cross, so this needs to go here. -/datum/event2/event/prison_break/bridge - area_types_to_break = list( - /area/bridge, - /area/bridge_hallway, - /area/crew_quarters/heads/sc/sd - ) - -// So is xenoflora isolation it seems. -/datum/event2/meta/prison_break/xenobio - irrelevant_areas = list( - /area/rnd/xenobiology/xenoflora, - /area/rnd/xenobiology/xenoflora_storage, - /area/rnd/xenobiology/xenoflora_isolation - ) - -/datum/event2/event/prison_break/xenobio - area_types_to_ignore = list( - /area/rnd/xenobiology/xenoflora, - /area/rnd/xenobiology/xenoflora_storage, - /area/rnd/xenobiology/xenoflora_isolation - ) +// The Station Director's office is specific to the Southern Cross, so this needs to go here. +/datum/event2/event/prison_break/bridge + area_types_to_break = list( + /area/bridge, + /area/bridge_hallway, + /area/crew_quarters/heads/sc/sd + ) + +// So is xenoflora isolation it seems. +/datum/event2/meta/prison_break/xenobio + irrelevant_areas = list( + /area/rnd/xenobiology/xenoflora, + /area/rnd/xenobiology/xenoflora_storage, + /area/rnd/xenobiology/xenoflora_isolation + ) + +/datum/event2/event/prison_break/xenobio + area_types_to_ignore = list( + /area/rnd/xenobiology/xenoflora, + /area/rnd/xenobiology/xenoflora_storage, + /area/rnd/xenobiology/xenoflora_isolation + ) ignore_blast_doors = TRUE // Needed to avoid a breach. \ No newline at end of file diff --git a/maps/southern_cross/southern_cross_shuttles_ch.dm b/maps/southern_cross/southern_cross_shuttles_ch.dm index 09f9daccac..32e15be1df 100644 --- a/maps/southern_cross/southern_cross_shuttles_ch.dm +++ b/maps/southern_cross/southern_cross_shuttles_ch.dm @@ -1,26 +1,26 @@ - -//Exploration carrier -/obj/machinery/computer/shuttle_control/exploration - name = "Exploration Sling Control Console" - shuttle_tag = "Exploration" - -/datum/shuttle/autodock/ferry/exploration - name = "Exploration" - warmup_time = 10 - location = FERRY_LOCATION_STATION - shuttle_area = /area/shuttle/expoutpost/station - landmark_offsite = "sling_outpost" - landmark_station = "sling_station" - docking_controller_tag = "exp_sling" - -/obj/effect/shuttle_landmark/southern_cross/sling_station - name = "Sling Station" - landmark_tag = "sling_station" - docking_controller = "exp_sling_station" - base_area = /area/space - base_turf = /turf/simulated/floor/reinforced/airless - -/obj/effect/shuttle_landmark/southern_cross/sling_outpost - name = "Sling Carrier" - landmark_tag = "sling_outpost" + +//Exploration carrier +/obj/machinery/computer/shuttle_control/exploration + name = "Exploration Sling Control Console" + shuttle_tag = "Exploration" + +/datum/shuttle/autodock/ferry/exploration + name = "Exploration" + warmup_time = 10 + location = FERRY_LOCATION_STATION + shuttle_area = /area/shuttle/expoutpost/station + landmark_offsite = "sling_outpost" + landmark_station = "sling_station" + docking_controller_tag = "exp_sling" + +/obj/effect/shuttle_landmark/southern_cross/sling_station + name = "Sling Station" + landmark_tag = "sling_station" + docking_controller = "exp_sling_station" + base_area = /area/space + base_turf = /turf/simulated/floor/reinforced/airless + +/obj/effect/shuttle_landmark/southern_cross/sling_outpost + name = "Sling Carrier" + landmark_tag = "sling_outpost" docking_controller = "exp_sling_outpost" \ No newline at end of file diff --git a/maps/southern_cross/submaps/asteroid_belt/_templates.dm b/maps/southern_cross/submaps/asteroid_belt/_templates.dm index 8be513316b..7ea7dd4f9a 100644 --- a/maps/southern_cross/submaps/asteroid_belt/_templates.dm +++ b/maps/southern_cross/submaps/asteroid_belt/_templates.dm @@ -1,80 +1,80 @@ -/datum/map_template/asteroid_belt - name = "Belt Miner Content" - desc = "For seeding submaps in the Asteroid Belt" - allow_duplicates = TRUE - -/datum/map_template/asteroid_belt/normal_cave - name = "Belt Normal Mob Cave" - mappath = 'normal_cave.dmm' - cost = 5 - -/datum/map_template/asteroid_belt/broken_o2_gen - name = "Belt Broken O2 generator" - mappath = 'broken_o2_gen.dmm' - cost = 15 - -/datum/map_template/asteroid_belt/corrupt_hound_bay - name = "Belt Corrupt Hound Bay" - mappath = 'corrupt_hound_bay.dmm' - cost = 25 - allow_duplicates = FALSE - -/datum/map_template/asteroid_belt/crashed_shuttle - name = "Belt Crashed Belt Shuttle" - mappath = 'crashed_shuttle.dmm' - cost = 10 - allow_duplicates = FALSE - -/datum/map_template/asteroid_belt/frost_spider_nest - name = "Belt Frost Spider Nest" - mappath = 'frost_spider_nest.dmm' - cost = 10 - -/datum/map_template/asteroid_belt/hard_cave - name = "Belt Hard Mob Cave" - mappath = 'hard_cave.dmm' - cost = 10 - -/datum/map_template/asteroid_belt/infection_pod - name = "Belt Infection Pod" - mappath = 'infection_pod.dmm' - cost = 10 - allow_duplicates = FALSE - -/datum/map_template/asteroid_belt/inferno - name = "Belt Thermal Spider Nest" - mappath = 'inferno.dmm' - cost = 5 - -/datum/map_template/asteroid_belt/large_cave - name = "Belt Large Cave" - mappath = 'large_cave.dmm' - cost = 15 - -/datum/map_template/asteroid_belt/mimicry - name = "Belt Mimic Cave" - mappath = 'mimicry.dmm' - cost = 5 - -/datum/map_template/asteroid_belt/mysterious_cavern - name = "Belt Mysterious Cave" - mappath = 'mysterious_cavern.dmm' - cost = 25 - allow_duplicates = FALSE - -/datum/map_template/asteroid_belt/pressure_seal - name = "Belt Pressurized Cave" - mappath = 'pressure_seal.dmm' - cost = 5 - -/datum/map_template/asteroid_belt/space_cave - name = "Belt Space Cave" - mappath = 'space_cave.dmm' - cost = 5 - -/* -/datum/map_template/asteroid_belt/whatever_treasure - name = "Some Kinda Treasure" //A name, only visible to admins - mappath = 'hard_mob.dmm' //The .dmm file for this template (in this folder) - cost = 10 //How 'valuable' this template is +/datum/map_template/asteroid_belt + name = "Belt Miner Content" + desc = "For seeding submaps in the Asteroid Belt" + allow_duplicates = TRUE + +/datum/map_template/asteroid_belt/normal_cave + name = "Belt Normal Mob Cave" + mappath = 'normal_cave.dmm' + cost = 5 + +/datum/map_template/asteroid_belt/broken_o2_gen + name = "Belt Broken O2 generator" + mappath = 'broken_o2_gen.dmm' + cost = 15 + +/datum/map_template/asteroid_belt/corrupt_hound_bay + name = "Belt Corrupt Hound Bay" + mappath = 'corrupt_hound_bay.dmm' + cost = 25 + allow_duplicates = FALSE + +/datum/map_template/asteroid_belt/crashed_shuttle + name = "Belt Crashed Belt Shuttle" + mappath = 'crashed_shuttle.dmm' + cost = 10 + allow_duplicates = FALSE + +/datum/map_template/asteroid_belt/frost_spider_nest + name = "Belt Frost Spider Nest" + mappath = 'frost_spider_nest.dmm' + cost = 10 + +/datum/map_template/asteroid_belt/hard_cave + name = "Belt Hard Mob Cave" + mappath = 'hard_cave.dmm' + cost = 10 + +/datum/map_template/asteroid_belt/infection_pod + name = "Belt Infection Pod" + mappath = 'infection_pod.dmm' + cost = 10 + allow_duplicates = FALSE + +/datum/map_template/asteroid_belt/inferno + name = "Belt Thermal Spider Nest" + mappath = 'inferno.dmm' + cost = 5 + +/datum/map_template/asteroid_belt/large_cave + name = "Belt Large Cave" + mappath = 'large_cave.dmm' + cost = 15 + +/datum/map_template/asteroid_belt/mimicry + name = "Belt Mimic Cave" + mappath = 'mimicry.dmm' + cost = 5 + +/datum/map_template/asteroid_belt/mysterious_cavern + name = "Belt Mysterious Cave" + mappath = 'mysterious_cavern.dmm' + cost = 25 + allow_duplicates = FALSE + +/datum/map_template/asteroid_belt/pressure_seal + name = "Belt Pressurized Cave" + mappath = 'pressure_seal.dmm' + cost = 5 + +/datum/map_template/asteroid_belt/space_cave + name = "Belt Space Cave" + mappath = 'space_cave.dmm' + cost = 5 + +/* +/datum/map_template/asteroid_belt/whatever_treasure + name = "Some Kinda Treasure" //A name, only visible to admins + mappath = 'hard_mob.dmm' //The .dmm file for this template (in this folder) + cost = 10 //How 'valuable' this template is */ \ No newline at end of file diff --git a/maps/southern_cross/submaps/asteroid_belt/belt_miner_things.dm b/maps/southern_cross/submaps/asteroid_belt/belt_miner_things.dm index cba1f6ae9e..348e65d6d8 100644 --- a/maps/southern_cross/submaps/asteroid_belt/belt_miner_things.dm +++ b/maps/southern_cross/submaps/asteroid_belt/belt_miner_things.dm @@ -1,94 +1,94 @@ -/mob/living/simple_mob/animal/giant_spider/frost/space - desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes, and looks adapted to space survival." - catalogue_data = list(/datum/category_item/catalogue/fauna/giant_spider/frost_spider) - - icon_state = "frost" - icon_living = "frost" - icon_dead = "frost_dead" - - maxHealth = 225 - health = 225 - - poison_per_bite = 10 - poison_type = "cryotoxin" - heat_resist = -0.50 - cold_resist = 0.75 - 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/living/simple_mob/animal/giant_spider/frost/space/Process_Spacemove(var/check_drift = 0) - return TRUE - -// Belt mob spawners -/obj/sc_away_spawner/belt_normal - name = "Belt Normal Spawner" - faction = "belter" - atmos_comp = TRUE - prob_spawn = 100 - prob_fall = 30 - //guard = 20 - mobs_to_pick_from = list( - /mob/living/simple_mob/animal/space/bats = 2, - /mob/living/simple_mob/animal/space/bear = 1, - /mob/living/simple_mob/animal/giant_spider/frost/space = 5, - ) - -/obj/sc_away_spawner/belt_hard - name = "Belt Hard Spawner" - faction = "belter" - atmos_comp = TRUE - prob_spawn = 100 - prob_fall = 50 - //guard = 20 - mobs_to_pick_from = list( - /mob/living/simple_mob/vore/aggressive/corrupthound = 3, - /mob/living/simple_mob/vore/aggressive/rat/phoron = 1 - ) - -/obj/sc_away_spawner/asteroid_drone_swarm - name = "Belt Drone Swarm Spawner" - faction = "belter" - atmos_comp = TRUE - prob_spawn = 100 - prob_fall = 10 - //guard = 20 - mobs_to_pick_from = list( - /mob/living/simple_mob/mechanical/corrupt_maint_drone = 3, - ) - -/obj/random/asteroid_belt - name = "random asteroid belt loot" - desc = "Random loot for Belt Miners." - icon = 'icons/obj/items.dmi' - icon_state = "spickaxe" - -/obj/effect/step_trigger/teleporter/debrisfield_loop/north/New() - ..() - teleport_x = x - teleport_y = 2 - teleport_z = z - -/obj/effect/step_trigger/teleporter/debrisfield_loop/south/New() - ..() - teleport_x = x - teleport_y = world.maxy - 1 - teleport_z = z - -/obj/effect/step_trigger/teleporter/debrisfield_loop/west/New() - ..() - teleport_x = world.maxx - 1 - teleport_y = y - teleport_z = z - -/obj/effect/step_trigger/teleporter/debrisfield_loop/east/New() - ..() - teleport_x = 2 - teleport_y = y - teleport_z = z +/mob/living/simple_mob/animal/giant_spider/frost/space + desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes, and looks adapted to space survival." + catalogue_data = list(/datum/category_item/catalogue/fauna/giant_spider/frost_spider) + + icon_state = "frost" + icon_living = "frost" + icon_dead = "frost_dead" + + maxHealth = 225 + health = 225 + + poison_per_bite = 10 + poison_type = "cryotoxin" + heat_resist = -0.50 + cold_resist = 0.75 + 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/living/simple_mob/animal/giant_spider/frost/space/Process_Spacemove(var/check_drift = 0) + return TRUE + +// Belt mob spawners +/obj/sc_away_spawner/belt_normal + name = "Belt Normal Spawner" + faction = "belter" + atmos_comp = TRUE + prob_spawn = 100 + prob_fall = 30 + //guard = 20 + mobs_to_pick_from = list( + /mob/living/simple_mob/animal/space/bats = 2, + /mob/living/simple_mob/animal/space/bear = 1, + /mob/living/simple_mob/animal/giant_spider/frost/space = 5, + ) + +/obj/sc_away_spawner/belt_hard + name = "Belt Hard Spawner" + faction = "belter" + atmos_comp = TRUE + prob_spawn = 100 + prob_fall = 50 + //guard = 20 + mobs_to_pick_from = list( + /mob/living/simple_mob/vore/aggressive/corrupthound = 3, + /mob/living/simple_mob/vore/aggressive/rat/phoron = 1 + ) + +/obj/sc_away_spawner/asteroid_drone_swarm + name = "Belt Drone Swarm Spawner" + faction = "belter" + atmos_comp = TRUE + prob_spawn = 100 + prob_fall = 10 + //guard = 20 + mobs_to_pick_from = list( + /mob/living/simple_mob/mechanical/corrupt_maint_drone = 3, + ) + +/obj/random/asteroid_belt + name = "random asteroid belt loot" + desc = "Random loot for Belt Miners." + icon = 'icons/obj/items.dmi' + icon_state = "spickaxe" + +/obj/effect/step_trigger/teleporter/debrisfield_loop/north/New() + ..() + teleport_x = x + teleport_y = 2 + teleport_z = z + +/obj/effect/step_trigger/teleporter/debrisfield_loop/south/New() + ..() + teleport_x = x + teleport_y = world.maxy - 1 + teleport_z = z + +/obj/effect/step_trigger/teleporter/debrisfield_loop/west/New() + ..() + teleport_x = world.maxx - 1 + teleport_y = y + teleport_z = z + +/obj/effect/step_trigger/teleporter/debrisfield_loop/east/New() + ..() + teleport_x = 2 + teleport_y = y + teleport_z = z diff --git a/maps/southern_cross/submaps/gateway/BaseBlep.dm b/maps/southern_cross/submaps/gateway/BaseBlep.dm index b306124d81..7b84fb1cd4 100644 --- a/maps/southern_cross/submaps/gateway/BaseBlep.dm +++ b/maps/southern_cross/submaps/gateway/BaseBlep.dm @@ -1,36 +1,36 @@ -/area/awaymission/baseblep - icon_state = "green" - base_turf = /turf/simulated/floor/outdoors/dirt - ambience = AMBIENCE_OTHERWORLDLY - -/area/awaymission/baseblep/base - name = "Base Blep" - icon_state = "green" - -/area/awaymission/baseblep/cavern - icon_state = "blue" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \ - 'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \ - 'sound/ambience/cave/AmbCaveDebriD.ogg') - outdoors = 1 - name = "Squish Caverns" - -/area/awaymission/baseblep/caynon - name = "Squish Caynon" - icon_state = "red" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \ - 'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \ - 'sound/ambience/cave/AmbCaveDebriD.ogg') - dynamic_lighting = 1 - outdoors = 1 - -/area/awaymission/baseblep/hivebotsphere - name = "Checkpoint" - requires_power = 0 - -/area/awaymission/baseblep/finale - name = "Gateway" - requires_power = 0 - -//Because dumb Vr errors +/area/awaymission/baseblep + icon_state = "green" + base_turf = /turf/simulated/floor/outdoors/dirt + ambience = AMBIENCE_OTHERWORLDLY + +/area/awaymission/baseblep/base + name = "Base Blep" + icon_state = "green" + +/area/awaymission/baseblep/cavern + icon_state = "blue" + ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \ + 'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \ + 'sound/ambience/cave/AmbCaveDebriD.ogg') + outdoors = 1 + name = "Squish Caverns" + +/area/awaymission/baseblep/caynon + name = "Squish Caynon" + icon_state = "red" + ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \ + 'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \ + 'sound/ambience/cave/AmbCaveDebriD.ogg') + dynamic_lighting = 1 + outdoors = 1 + +/area/awaymission/baseblep/hivebotsphere + name = "Checkpoint" + requires_power = 0 + +/area/awaymission/baseblep/finale + name = "Gateway" + requires_power = 0 + +//Because dumb Vr errors /area/vr \ No newline at end of file diff --git a/maps/southern_cross/submaps/gateway/maddnesslab.dm b/maps/southern_cross/submaps/gateway/maddnesslab.dm index f5312812d2..058ddd64fa 100644 --- a/maps/southern_cross/submaps/gateway/maddnesslab.dm +++ b/maps/southern_cross/submaps/gateway/maddnesslab.dm @@ -1,148 +1,148 @@ -/area/awaymission/mol - name = "Strange Place" - icon_state = "red" - base_turf = /turf/simulated/floor/outdoors/dirt - outdoors = 0 - requires_power = 0 - -/area/awaymission/mol/outside - dynamic_lighting = 1 - outdoors = 1 - -/area/awaymission/mol/entrancetunnel - -/area/awaymission/mol/security - name = "Delta Vault" - -/area/awaymission/mol/medical - name = "Delta Checkpoint" - -/area/awaymission/mol/vr - name = "Delta Checkpoint" - -/area/awaymission/mol/vr/observation - name = "Delta Checkpoint" - -/area/awaymission/mol/vr/shattered - name = "Delta Checkpoint" - -/area/awaymission/mol/vr/observationroom - name = "Vistor Processing" - -/area/awaymission/mol/vistortunnel - name = "Vistor Processing" - -/area/awaymission/mol/vistortunnel/red - name = "Vistor Room Red" - -/area/awaymission/mol/vistortunnel/blue - name = "Vistor Room Blue" - -/area/awaymission/mol/vistortunnel/yellow - name = "Vistor Room Yellow" - -/area/awaymission/mol/vistortunnel/orange - name = "Vistor Room Orange" - -/area/awaymission/mol/vistortunnel/green - name = "Vistor Room Green" - -/area/awaymission/mol/vistortunnel/purple - name = "Vistor Purple" - -/area/awaymission/mol/scraptunnels - name = "Scrap Tunnels" - -/area/awaymission/mol/scraptunnels/room1 - name = "Junk Sorting" - -/area/awaymission/mol/scraptunnels/room2 - name = "Collection Zone" - -/area/awaymission/mol/scraptunnels/room3 - name = "Shuttle Landing Zone" - -/area/awaymission/mol/scraptunnels/room4 - name = "Mech Smeltery" - -/area/awaymission/mol/kitchen - name = "Kitchen Hallways" - -/area/awaymission/mol/kitchen/chamberA - name = "Delta Kitchen Chamber A" - -/area/awaymission/mol/kitchen/chamberB - name = "Delta Kitchen Chamber B" - -/area/awaymission/mol/kitchen/chamberC - name = "Delta Kitchen Chamber C" - -/area/awaymission/mol/kitchen/ChamberD - name = "Delta Kitchen Chamber D" - -/area/awaymission/mol/mines - name = "Delta Mines" - -/area/awaymission/mol/realitycore - name = "Void" - -/area/awaymission/mol/audiotorium - name = "Audiotorium" - -/area/awaymission/mol/conveyorcontrol - name = "Beta Control Room" - -/area/awaymission/mol/dorm - name = "Dorm" - -/area/awaymission/mol/serverroom - name = "Server Room" - -/area/awaymission/mol/securitycheckpoint - name = "Security Checkpoint" - -/area/awaymission/mol/engi - name = "Lab Enginering" - -/area/awaymission/mol/hardlightentrance - name = "Hardlight Zone Entrance" - -/area/awaymission/mol/dorms - name = "Delta Lab Dorms" - -/area/awaymission/mol/headdorms - name = "Delta Lab Head Dorms" - -/area/awaymission/mol/themaze - name = "Delta Maze" - -/area/awaymission/mol/crumblingmaze - name = "Delta Breaking Maze" - -/obj/structure/prop/blackbox/maddnesslab - catalogue_data = list(/datum/category_item/catalogue/information/blackbox/maddnesslab) - -/datum/category_item/catalogue/information/blackbox/maddnesslab - name = "Black Box Data - Farewell" - desc = {"Testing, testing.
                        - Well, this is awkward.
                        - Lab is finally closed.
                        - Everyone but boss man is gone.
                        - Which I mean dead, quit, fired, or some combination of them.
                        - And well the labs are a mess, and boss man well...that strange place did things to him.
                        - So, I took charge and did things. I locked boss up firmly in that sphere he so fondly likes.
                        - Locked the armory and hid the switches within the chassis we made.
                        , - If someone goes looky for boss, they'll need to clear up the carnage we made
                        - Nothing is getting out of there. Except Ashy, they're the one sane thing left.
                        - Not really sure what else to do for my confession.
                        - We did some really messed up stuff man, and planned on doing worse.
                        - I think boss believes themselves to be god.
                        - And with that strange mecha, I don't blame them. Not sure the experimental janus designs I've seen
                        - surpass it.
                        - Soo uhhh, yeah we messed up. Imma walk off aimlessly into the desert
                        - Or maybe go home myself if I can bypass my own security measures
                        - Didn't want anyone coming in or out of the teleporter but couldn't break it
                        - So locked it behind a buttons in our research wings
                        - And hey if you're hearing this, take care of my drake please.
                        - Ashy is a good one.
                        +/area/awaymission/mol + name = "Strange Place" + icon_state = "red" + base_turf = /turf/simulated/floor/outdoors/dirt + outdoors = 0 + requires_power = 0 + +/area/awaymission/mol/outside + dynamic_lighting = 1 + outdoors = 1 + +/area/awaymission/mol/entrancetunnel + +/area/awaymission/mol/security + name = "Delta Vault" + +/area/awaymission/mol/medical + name = "Delta Checkpoint" + +/area/awaymission/mol/vr + name = "Delta Checkpoint" + +/area/awaymission/mol/vr/observation + name = "Delta Checkpoint" + +/area/awaymission/mol/vr/shattered + name = "Delta Checkpoint" + +/area/awaymission/mol/vr/observationroom + name = "Vistor Processing" + +/area/awaymission/mol/vistortunnel + name = "Vistor Processing" + +/area/awaymission/mol/vistortunnel/red + name = "Vistor Room Red" + +/area/awaymission/mol/vistortunnel/blue + name = "Vistor Room Blue" + +/area/awaymission/mol/vistortunnel/yellow + name = "Vistor Room Yellow" + +/area/awaymission/mol/vistortunnel/orange + name = "Vistor Room Orange" + +/area/awaymission/mol/vistortunnel/green + name = "Vistor Room Green" + +/area/awaymission/mol/vistortunnel/purple + name = "Vistor Purple" + +/area/awaymission/mol/scraptunnels + name = "Scrap Tunnels" + +/area/awaymission/mol/scraptunnels/room1 + name = "Junk Sorting" + +/area/awaymission/mol/scraptunnels/room2 + name = "Collection Zone" + +/area/awaymission/mol/scraptunnels/room3 + name = "Shuttle Landing Zone" + +/area/awaymission/mol/scraptunnels/room4 + name = "Mech Smeltery" + +/area/awaymission/mol/kitchen + name = "Kitchen Hallways" + +/area/awaymission/mol/kitchen/chamberA + name = "Delta Kitchen Chamber A" + +/area/awaymission/mol/kitchen/chamberB + name = "Delta Kitchen Chamber B" + +/area/awaymission/mol/kitchen/chamberC + name = "Delta Kitchen Chamber C" + +/area/awaymission/mol/kitchen/ChamberD + name = "Delta Kitchen Chamber D" + +/area/awaymission/mol/mines + name = "Delta Mines" + +/area/awaymission/mol/realitycore + name = "Void" + +/area/awaymission/mol/audiotorium + name = "Audiotorium" + +/area/awaymission/mol/conveyorcontrol + name = "Beta Control Room" + +/area/awaymission/mol/dorm + name = "Dorm" + +/area/awaymission/mol/serverroom + name = "Server Room" + +/area/awaymission/mol/securitycheckpoint + name = "Security Checkpoint" + +/area/awaymission/mol/engi + name = "Lab Enginering" + +/area/awaymission/mol/hardlightentrance + name = "Hardlight Zone Entrance" + +/area/awaymission/mol/dorms + name = "Delta Lab Dorms" + +/area/awaymission/mol/headdorms + name = "Delta Lab Head Dorms" + +/area/awaymission/mol/themaze + name = "Delta Maze" + +/area/awaymission/mol/crumblingmaze + name = "Delta Breaking Maze" + +/obj/structure/prop/blackbox/maddnesslab + catalogue_data = list(/datum/category_item/catalogue/information/blackbox/maddnesslab) + +/datum/category_item/catalogue/information/blackbox/maddnesslab + name = "Black Box Data - Farewell" + desc = {"Testing, testing.
                        + Well, this is awkward.
                        + Lab is finally closed.
                        + Everyone but boss man is gone.
                        + Which I mean dead, quit, fired, or some combination of them.
                        + And well the labs are a mess, and boss man well...that strange place did things to him.
                        + So, I took charge and did things. I locked boss up firmly in that sphere he so fondly likes.
                        + Locked the armory and hid the switches within the chassis we made.
                        , + If someone goes looky for boss, they'll need to clear up the carnage we made
                        + Nothing is getting out of there. Except Ashy, they're the one sane thing left.
                        + Not really sure what else to do for my confession.
                        + We did some really messed up stuff man, and planned on doing worse.
                        + I think boss believes themselves to be god.
                        + And with that strange mecha, I don't blame them. Not sure the experimental janus designs I've seen
                        + surpass it.
                        + Soo uhhh, yeah we messed up. Imma walk off aimlessly into the desert
                        + Or maybe go home myself if I can bypass my own security measures
                        + Didn't want anyone coming in or out of the teleporter but couldn't break it
                        + So locked it behind a buttons in our research wings
                        + And hey if you're hearing this, take care of my drake please.
                        + Ashy is a good one.
                        "} \ No newline at end of file diff --git a/maps/submaps/surface_submaps/valley/valley.dm b/maps/submaps/surface_submaps/valley/valley.dm index 5761425561..32808cbd01 100644 --- a/maps/submaps/surface_submaps/valley/valley.dm +++ b/maps/submaps/surface_submaps/valley/valley.dm @@ -1,287 +1,287 @@ -// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test. -// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors. -// When adding a new PoI, please add it to this list. -#if MAP_TEST -#include "begderg.dmm" -#include "blobden.dmm" -#include "bloodchurch.dmm" -#include "clockwork.dmm" -#include "cove.dmm" -#include "crashedexplo.dmm" -#include "CultBar.dmm" -#include "demonranch.dmm" -#include "dronelord.dmm" -#include "fallenportal.dmm" -#include "frostlake.dmm" -#include "leechpond.dmm" -#include "leppy.dmm" -#include "mausarmy.dmm" -#include "metroidmaze.dmm" -#include "phorondragon.dmm" -#include "piratefortress.dmm" -#include "piratevessel.dmm" -#include "piratevox.dmm" -#include "plontden.dmm" -#include "Redshuttledown.dmm" -#include "solarmoff.dmm" -#include "spooderchurch.dmm" -#include "teppifarm.dmm" -#include "vault.dmm" -#include "xenobio.dmm" -#endif - -/datum/map_template/surface/valley - name = "Surface Content - Valley" - desc = "Used to make a place of strange terror." - -//For POIs in the valley walls. -/datum/map_template/surface/valley/walls - -//For POIs in the center. -/dataum/map_template/surface/valley/inner - -/datum/map_template/surface/valley/walls/begderg - name = "Dragon Den" - desc = "A rocky den for a big dragon rematch" - mappath = 'maps/submaps/surface_submaps/valley/begderg.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/blobden - name = "Blob Den" - desc = "An large supply drop with an unfortante guest" - mappath = 'maps/submaps/surface_submaps/valley/blobden.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/bloodchurch - name = "Blood Church" - desc = "A chorus of carnage sung from high above." - mappath = 'maps/submaps/surface_submaps/valley/bloodchurch.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/carriershuttle - name = "Carrier Shuttle" - desc = "A parked merc shuttle with a mini zoo" - mappath = 'maps/submaps/surface_submaps/valley/carriershuttle.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/cliffmanor - name = "Cliff Manor" - desc = "A small shack surronded by jellyfish and a moat" - mappath = 'maps/submaps/surface_submaps/valley/cliffmanor.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/clockwork - name = "Clockwork Den" - desc = "A firey pit with what remains of a nigh fallen church" - mappath = 'maps/submaps/surface_submaps/valley/clockwork.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/cove - name = "Pirate Cove" - desc = "A cove full of pirates. And a brawl outside." - mappath = 'maps/submaps/surface_submaps/valley/cove.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/crashedexplo - name = "Spider Explo" - desc = "Oh look, some spider explorers" - mappath = 'maps/submaps/surface_submaps/valley/crashedexplo.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/cultbar - name = "Cult Bar" - desc = "A bar surronded by demons, for those of the occult." - mappath = 'maps/submaps/surface_submaps/valley/CultBar.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/demonranch - name = "Demon Ranch" - desc = "A farm made in an attempt to reduced demon summoning costs." - mappath = 'maps/submaps/surface_submaps/valley/demonranch.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/dronelord - name = "Drone Overlords" - desc = "A duo of bounty hunters utlizing drones" - mappath = 'maps/submaps/surface_submaps/valley/dronelord.dmm' - cost = 25 - - -/datum/map_template/surface/valley/inner/eclipseaqua - name = "Eclipse Base Aqua" - desc = "An island base making a certian chem" - mappath = 'maps/submaps/surface_submaps/valley/eclipseaqua.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/eclipsedigsight - name = "Eclipse Base Dig" - desc = "A large scale xenoarch digsite." - mappath = 'maps/submaps/surface_submaps/valley/eclipsedigsight.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/eclipselava - name = "Eclipse Base Molten" - desc = "A well defended base guarding a strange expirement" - mappath = 'maps/submaps/surface_submaps/valley/eclipselava.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/eclipsemountain - name = "Eclipse Base Mountain" - desc = "A telecomns base" - mappath = 'maps/submaps/surface_submaps/valley/eclipsemountain.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/fallenlab - name = "Fallen Lab" - desc = "A lab created to expirment with nanites, long since forgotten" - mappath = 'maps/submaps/surface_submaps/valley/fallenlab.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/fallenportal - name = "Failed Portal" - desc = "Someone attemted to create a portal to redspace. Forgot the BSA" - mappath = 'maps/submaps/surface_submaps/valley/fallenportal.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/frostlake - name = "Frost Lake" - desc = "Ice Puzzle, now with death" - mappath = 'maps/submaps/surface_submaps/valley/frostlake.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/hydroxeno - name = "Aquatic Xenos" - desc = "Xenomoprhs in a squish cave" - mappath = 'maps/submaps/surface_submaps/valley/hydroxeno.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/leechpond - name = "Leech Pond" - desc = "A strange lake reborn." - mappath = 'maps/submaps/surface_submaps/valley/leechpond.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/leppy - name = "Leppy Den" - desc = "A rare leppy with some rare friends." - mappath = 'maps/submaps/surface_submaps/valley/leppy.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/mausarmy - name = "Mouse Takeover" - desc = "Mice trying to take over a warehouse" - mappath = 'maps/submaps/surface_submaps/valley/mausarmy.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/metroidmaze - name = "Maze" - desc = "A strange maze with several metroids" - mappath = 'maps/submaps/surface_submaps/valley/metroidmaze.dmm' - cost = 25 - - -/datum/map_template/surface/valley/inner/mouseattack - name = "Assualt Base" - desc = "A base with many mice ready for attack" - mappath = 'maps/submaps/surface_submaps/valley/mouseattack.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/mousehq - name = "Maus HQ" - desc = "An HQ that holds many deadly mice" - mappath = 'maps/submaps/surface_submaps/valley/mousehq.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/phorondragon - name = "Phoron Den" - desc = "A den of several phoron dragons" - mappath = 'maps/submaps/surface_submaps/valley/phorondragon.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/piratefortress - name = "Pirate Fort" - desc = "A goodie and pirate filled base with a moat" - mappath = 'maps/submaps/surface_submaps/valley/piratefortress.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/piratevessel - name = "Pirate Vessel" - desc = "A vessel meant for short jaunts and raids" - mappath = 'maps/submaps/surface_submaps/valley/piratevessel.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/piratevpx - name = "Vox Pirates" - desc = "A mercanry vessel having some vox raiders attack" - mappath = 'maps/submaps/surface_submaps/valley/piratevox.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/plontden - name = "Plant Den" - desc = "A familiar looking plant set up" - mappath = 'maps/submaps/surface_submaps/valley/plontden.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/puzzledungeon - name = "Puzzle Dungeon" - desc = "No threats just puzzles" - mappath = 'maps/submaps/surface_submaps/valley/puzzledungeon.dmm' - cost = 25 - - -/datum/map_template/surface/valley/inner/redshuttledown - name = "Red Shuttle Down" - desc = "The mercanry bringing out some of their best to scout Sif" - mappath = 'maps/submaps/surface_submaps/valley/Redshuttledown.dmm' - cost = 25 - - -/datum/map_template/surface/valley/inner/settlement - name = "Settlement" - desc = "An abaondened settlement." - mappath = 'maps/submaps/surface_submaps/valley/settlement.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/siegepoint - name = "Siege Point" - desc = "A friendly merc base under the assualt of pirates" - mappath = 'maps/submaps/surface_submaps/valley/siegepoint.dmm' - cost = 25 - - -/datum/map_template/surface/valley/walls/solarmoff - name = "Solar Pond" - desc = "A pond with fesh and a small sun" - mappath = 'maps/submaps/surface_submaps/valley/solarmoff.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/spooderchurch - name = "Spider Church" - desc = "Trust us, it's a cult about spiders, ignore the mercs" - mappath = 'maps/submaps/surface_submaps/valley/spooderchurch.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/teppifarm - name = "Teppi Farm" - desc = "Cute a teppi" - mappath = 'maps/submaps/surface_submaps/valley/teppifarm.dmm' - cost = 25 - -/datum/map_template/surface/valley/walls/vault - name = "Vault" - desc = "The vault holds many secerts" - mappath = 'maps/submaps/surface_submaps/valley/vault.dmm' - cost = 25 - -/datum/map_template/surface/valley/inner/xenobio - name = "Xenobio Lab" - desc = "A ruined xenobio" - mappath = 'maps/submaps/surface_submaps/valley/xenobio.dmm' - cost = 25 +// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test. +// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors. +// When adding a new PoI, please add it to this list. +#if MAP_TEST +#include "begderg.dmm" +#include "blobden.dmm" +#include "bloodchurch.dmm" +#include "clockwork.dmm" +#include "cove.dmm" +#include "crashedexplo.dmm" +#include "CultBar.dmm" +#include "demonranch.dmm" +#include "dronelord.dmm" +#include "fallenportal.dmm" +#include "frostlake.dmm" +#include "leechpond.dmm" +#include "leppy.dmm" +#include "mausarmy.dmm" +#include "metroidmaze.dmm" +#include "phorondragon.dmm" +#include "piratefortress.dmm" +#include "piratevessel.dmm" +#include "piratevox.dmm" +#include "plontden.dmm" +#include "Redshuttledown.dmm" +#include "solarmoff.dmm" +#include "spooderchurch.dmm" +#include "teppifarm.dmm" +#include "vault.dmm" +#include "xenobio.dmm" +#endif + +/datum/map_template/surface/valley + name = "Surface Content - Valley" + desc = "Used to make a place of strange terror." + +//For POIs in the valley walls. +/datum/map_template/surface/valley/walls + +//For POIs in the center. +/dataum/map_template/surface/valley/inner + +/datum/map_template/surface/valley/walls/begderg + name = "Dragon Den" + desc = "A rocky den for a big dragon rematch" + mappath = 'maps/submaps/surface_submaps/valley/begderg.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/blobden + name = "Blob Den" + desc = "An large supply drop with an unfortante guest" + mappath = 'maps/submaps/surface_submaps/valley/blobden.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/bloodchurch + name = "Blood Church" + desc = "A chorus of carnage sung from high above." + mappath = 'maps/submaps/surface_submaps/valley/bloodchurch.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/carriershuttle + name = "Carrier Shuttle" + desc = "A parked merc shuttle with a mini zoo" + mappath = 'maps/submaps/surface_submaps/valley/carriershuttle.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/cliffmanor + name = "Cliff Manor" + desc = "A small shack surronded by jellyfish and a moat" + mappath = 'maps/submaps/surface_submaps/valley/cliffmanor.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/clockwork + name = "Clockwork Den" + desc = "A firey pit with what remains of a nigh fallen church" + mappath = 'maps/submaps/surface_submaps/valley/clockwork.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/cove + name = "Pirate Cove" + desc = "A cove full of pirates. And a brawl outside." + mappath = 'maps/submaps/surface_submaps/valley/cove.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/crashedexplo + name = "Spider Explo" + desc = "Oh look, some spider explorers" + mappath = 'maps/submaps/surface_submaps/valley/crashedexplo.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/cultbar + name = "Cult Bar" + desc = "A bar surronded by demons, for those of the occult." + mappath = 'maps/submaps/surface_submaps/valley/CultBar.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/demonranch + name = "Demon Ranch" + desc = "A farm made in an attempt to reduced demon summoning costs." + mappath = 'maps/submaps/surface_submaps/valley/demonranch.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/dronelord + name = "Drone Overlords" + desc = "A duo of bounty hunters utlizing drones" + mappath = 'maps/submaps/surface_submaps/valley/dronelord.dmm' + cost = 25 + + +/datum/map_template/surface/valley/inner/eclipseaqua + name = "Eclipse Base Aqua" + desc = "An island base making a certian chem" + mappath = 'maps/submaps/surface_submaps/valley/eclipseaqua.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/eclipsedigsight + name = "Eclipse Base Dig" + desc = "A large scale xenoarch digsite." + mappath = 'maps/submaps/surface_submaps/valley/eclipsedigsight.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/eclipselava + name = "Eclipse Base Molten" + desc = "A well defended base guarding a strange expirement" + mappath = 'maps/submaps/surface_submaps/valley/eclipselava.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/eclipsemountain + name = "Eclipse Base Mountain" + desc = "A telecomns base" + mappath = 'maps/submaps/surface_submaps/valley/eclipsemountain.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/fallenlab + name = "Fallen Lab" + desc = "A lab created to expirment with nanites, long since forgotten" + mappath = 'maps/submaps/surface_submaps/valley/fallenlab.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/fallenportal + name = "Failed Portal" + desc = "Someone attemted to create a portal to redspace. Forgot the BSA" + mappath = 'maps/submaps/surface_submaps/valley/fallenportal.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/frostlake + name = "Frost Lake" + desc = "Ice Puzzle, now with death" + mappath = 'maps/submaps/surface_submaps/valley/frostlake.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/hydroxeno + name = "Aquatic Xenos" + desc = "Xenomoprhs in a squish cave" + mappath = 'maps/submaps/surface_submaps/valley/hydroxeno.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/leechpond + name = "Leech Pond" + desc = "A strange lake reborn." + mappath = 'maps/submaps/surface_submaps/valley/leechpond.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/leppy + name = "Leppy Den" + desc = "A rare leppy with some rare friends." + mappath = 'maps/submaps/surface_submaps/valley/leppy.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/mausarmy + name = "Mouse Takeover" + desc = "Mice trying to take over a warehouse" + mappath = 'maps/submaps/surface_submaps/valley/mausarmy.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/metroidmaze + name = "Maze" + desc = "A strange maze with several metroids" + mappath = 'maps/submaps/surface_submaps/valley/metroidmaze.dmm' + cost = 25 + + +/datum/map_template/surface/valley/inner/mouseattack + name = "Assualt Base" + desc = "A base with many mice ready for attack" + mappath = 'maps/submaps/surface_submaps/valley/mouseattack.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/mousehq + name = "Maus HQ" + desc = "An HQ that holds many deadly mice" + mappath = 'maps/submaps/surface_submaps/valley/mousehq.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/phorondragon + name = "Phoron Den" + desc = "A den of several phoron dragons" + mappath = 'maps/submaps/surface_submaps/valley/phorondragon.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/piratefortress + name = "Pirate Fort" + desc = "A goodie and pirate filled base with a moat" + mappath = 'maps/submaps/surface_submaps/valley/piratefortress.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/piratevessel + name = "Pirate Vessel" + desc = "A vessel meant for short jaunts and raids" + mappath = 'maps/submaps/surface_submaps/valley/piratevessel.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/piratevpx + name = "Vox Pirates" + desc = "A mercanry vessel having some vox raiders attack" + mappath = 'maps/submaps/surface_submaps/valley/piratevox.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/plontden + name = "Plant Den" + desc = "A familiar looking plant set up" + mappath = 'maps/submaps/surface_submaps/valley/plontden.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/puzzledungeon + name = "Puzzle Dungeon" + desc = "No threats just puzzles" + mappath = 'maps/submaps/surface_submaps/valley/puzzledungeon.dmm' + cost = 25 + + +/datum/map_template/surface/valley/inner/redshuttledown + name = "Red Shuttle Down" + desc = "The mercanry bringing out some of their best to scout Sif" + mappath = 'maps/submaps/surface_submaps/valley/Redshuttledown.dmm' + cost = 25 + + +/datum/map_template/surface/valley/inner/settlement + name = "Settlement" + desc = "An abaondened settlement." + mappath = 'maps/submaps/surface_submaps/valley/settlement.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/siegepoint + name = "Siege Point" + desc = "A friendly merc base under the assualt of pirates" + mappath = 'maps/submaps/surface_submaps/valley/siegepoint.dmm' + cost = 25 + + +/datum/map_template/surface/valley/walls/solarmoff + name = "Solar Pond" + desc = "A pond with fesh and a small sun" + mappath = 'maps/submaps/surface_submaps/valley/solarmoff.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/spooderchurch + name = "Spider Church" + desc = "Trust us, it's a cult about spiders, ignore the mercs" + mappath = 'maps/submaps/surface_submaps/valley/spooderchurch.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/teppifarm + name = "Teppi Farm" + desc = "Cute a teppi" + mappath = 'maps/submaps/surface_submaps/valley/teppifarm.dmm' + cost = 25 + +/datum/map_template/surface/valley/walls/vault + name = "Vault" + desc = "The vault holds many secerts" + mappath = 'maps/submaps/surface_submaps/valley/vault.dmm' + cost = 25 + +/datum/map_template/surface/valley/inner/xenobio + name = "Xenobio Lab" + desc = "A ruined xenobio" + mappath = 'maps/submaps/surface_submaps/valley/xenobio.dmm' + cost = 25 diff --git a/maps/submaps/surface_submaps/valley/valley_areas.dm b/maps/submaps/surface_submaps/valley/valley_areas.dm index 1f26aa11b7..d3879b5d70 100644 --- a/maps/submaps/surface_submaps/valley/valley_areas.dm +++ b/maps/submaps/surface_submaps/valley/valley_areas.dm @@ -1,175 +1,175 @@ -/area/submap/begderg - name = "Poi Valley Wall - Rock Dragon" - ambience = AMBIENCE_RUINS - -/area/submap/blobden - name = "Poi Valley Wall - Blob Den" - ambience = AMBIENCE_RUINS - -/area/submap/bloodchurch - name = "Poi Valley - Blood Church" - ambience = AMBIENCE_UNHOLY - -/area/submap/carriershuttle - name = "Poi Valley Wall - Carrier Shuttle" - requires_power = FALSE - ambience = AMBIENCE_RUINS - -/area/submap/cliffmanor - name = "Poi Valley Wall - Cliff Manor" - ambience = AMBIENCE_RUINS - -/area/submap/clockwork - name = "Poi Valley Wall - Clockwork" - ambience = AMBIENCE_RUINS - -/area/submap/cove - name = "Poi Valley Wall - Cove" - ambience = AMBIENCE_RUINS - -/area/submap/crashedexplo - name = "Poi Valley - Spooder Explorers" - ambience = AMBIENCE_RUINS - -/area/submap/CultBar - name = "POI - Cult Bar" - ambience = AMBIENCE_GHOSTLY - -/area/submap/demonranch - name = "Poi Valley - Demon Ranch" - ambience = AMBIENCE_UNHOLY - -/area/submap/dronelord - name = "Poi Valley Wall - Drone Overlords" - requires_power = FALSE - ambience = AMBIENCE_RUINS - - -/area/submap/eclipseaqua - name = "Poi Valley Wall - Eclipse Aqua" - requires_power = FALSE - ambience = AMBIENCE_TECH_RUINS - -/area/submap/eclipsedigsight - name = "Poi Valley Wall - Eclipse Dig" - requires_power = FALSE - ambience = AMBIENCE_TECH_RUINS - -/area/submap/eclipselava - name = "Poi Valley Wall - Eclipse Lava" - requires_power = FALSE - ambience = AMBIENCE_TECH_RUINS - -/area/submap/eclipsemountain - name = "Poi Valley Wall - Eclipse Mountain" - requires_power = FALSE - ambience = AMBIENCE_TECH_RUINS - -/area/submap/fallenlab - name = "Poi Valley Wall - Fallen Lab" - ambience = AMBIENCE_RUINS - -/area/submap/fallenportal - name = "Poi Valley - Failed Portal" - ambience = AMBIENCE_RUINS - - -/area/submap/hydroxeno - name = "Poi Valley Wall - Hydro Xeno" - ambience = AMBIENCE_RUINS - - -/area/submap/frostlake - name = "Poi Valley Wall - Frost Lake" - ambience = AMBIENCE_RUINS - -/area/submap/leechpond - name = "Poi Valley - Leech Pond" - ambience = AMBIENCE_RUINS - -/area/submap/leppy - name = "Poi Valley Wall - Leppy" - ambience = AMBIENCE_RUINS - -/area/submap/mausarmy - name = "Poi Valley - Maus Army" - ambience = AMBIENCE_RUINS - -/area/submap/metroidmaze - name = "Poi Valley Walls - Maze" - ambience = AMBIENCE_RUINS - - -/area/submap/mouseattack - name = "Poi Valley Wall - Mouse Attack" - ambience = AMBIENCE_RUINS - -/area/submap/mousehq - name = "Poi Valley Wall - Mouse HQ" - ambience = AMBIENCE_RUINS - - -/area/submap/phorondragon - name = "Poi Valley Walls - Phoron Pack" - ambience = AMBIENCE_RUINS - -/area/submap/piratefortress - name = "Poi Valley - Doom Pirates" - requires_power = FALSE - ambience = AMBIENCE_RUINS - -/area/submap/piratevessel - name = "Poi Valley - Shuttle Pirates" - requires_power = FALSE - ambience = AMBIENCE_RUINS - -/area/submap/piratevox - name = "Poi Valley - Vox Raiders" - requires_power = FALSE - ambience = AMBIENCE_RUINS - -/area/submap/plontden - name = "Poi Valley Walls - Plont" - ambience = AMBIENCE_RUINS - - -/area/submap/puzzledungeon - name = "Poi Valley Walls - Puzzle Dungeon" - ambience = AMBIENCE_RUINS - - -/area/submap/redshuttledown - name = "Poi Valley - Red Shuttle" - requires_power = FALSE - ambience = AMBIENCE_RUINS - - -/area/submap/settlement - name = "Poi Valley Walls - Settlement" - ambience = AMBIENCE_RUINS - -/area/submap/siegepoint - name = "Poi Valley Walls - Siegepoint" - ambience = AMBIENCE_RUINS - - -/area/submap/solarmoff - name = "Poi Valley Walls - Solar Moth" - ambience = AMBIENCE_RUINS - -/area/submap/spooderchurch - name = "Poi Valley - Fake Cult" - ambience = AMBIENCE_UNHOLY - -/area/submap/teppifarm - name = "Poi Valley - Teppi Farm" - ambience = AMBIENCE_RUINS - -/area/submap/vault - name = "Poi Valley Walls - Vault" - requires_power = FALSE - ambience = AMBIENCE_RUINS - -/area/submap/xenobio - name = "Poi Valley - Xenobio" +/area/submap/begderg + name = "Poi Valley Wall - Rock Dragon" + ambience = AMBIENCE_RUINS + +/area/submap/blobden + name = "Poi Valley Wall - Blob Den" + ambience = AMBIENCE_RUINS + +/area/submap/bloodchurch + name = "Poi Valley - Blood Church" + ambience = AMBIENCE_UNHOLY + +/area/submap/carriershuttle + name = "Poi Valley Wall - Carrier Shuttle" + requires_power = FALSE + ambience = AMBIENCE_RUINS + +/area/submap/cliffmanor + name = "Poi Valley Wall - Cliff Manor" + ambience = AMBIENCE_RUINS + +/area/submap/clockwork + name = "Poi Valley Wall - Clockwork" + ambience = AMBIENCE_RUINS + +/area/submap/cove + name = "Poi Valley Wall - Cove" + ambience = AMBIENCE_RUINS + +/area/submap/crashedexplo + name = "Poi Valley - Spooder Explorers" + ambience = AMBIENCE_RUINS + +/area/submap/CultBar + name = "POI - Cult Bar" + ambience = AMBIENCE_GHOSTLY + +/area/submap/demonranch + name = "Poi Valley - Demon Ranch" + ambience = AMBIENCE_UNHOLY + +/area/submap/dronelord + name = "Poi Valley Wall - Drone Overlords" + requires_power = FALSE + ambience = AMBIENCE_RUINS + + +/area/submap/eclipseaqua + name = "Poi Valley Wall - Eclipse Aqua" + requires_power = FALSE + ambience = AMBIENCE_TECH_RUINS + +/area/submap/eclipsedigsight + name = "Poi Valley Wall - Eclipse Dig" + requires_power = FALSE + ambience = AMBIENCE_TECH_RUINS + +/area/submap/eclipselava + name = "Poi Valley Wall - Eclipse Lava" + requires_power = FALSE + ambience = AMBIENCE_TECH_RUINS + +/area/submap/eclipsemountain + name = "Poi Valley Wall - Eclipse Mountain" + requires_power = FALSE + ambience = AMBIENCE_TECH_RUINS + +/area/submap/fallenlab + name = "Poi Valley Wall - Fallen Lab" + ambience = AMBIENCE_RUINS + +/area/submap/fallenportal + name = "Poi Valley - Failed Portal" + ambience = AMBIENCE_RUINS + + +/area/submap/hydroxeno + name = "Poi Valley Wall - Hydro Xeno" + ambience = AMBIENCE_RUINS + + +/area/submap/frostlake + name = "Poi Valley Wall - Frost Lake" + ambience = AMBIENCE_RUINS + +/area/submap/leechpond + name = "Poi Valley - Leech Pond" + ambience = AMBIENCE_RUINS + +/area/submap/leppy + name = "Poi Valley Wall - Leppy" + ambience = AMBIENCE_RUINS + +/area/submap/mausarmy + name = "Poi Valley - Maus Army" + ambience = AMBIENCE_RUINS + +/area/submap/metroidmaze + name = "Poi Valley Walls - Maze" + ambience = AMBIENCE_RUINS + + +/area/submap/mouseattack + name = "Poi Valley Wall - Mouse Attack" + ambience = AMBIENCE_RUINS + +/area/submap/mousehq + name = "Poi Valley Wall - Mouse HQ" + ambience = AMBIENCE_RUINS + + +/area/submap/phorondragon + name = "Poi Valley Walls - Phoron Pack" + ambience = AMBIENCE_RUINS + +/area/submap/piratefortress + name = "Poi Valley - Doom Pirates" + requires_power = FALSE + ambience = AMBIENCE_RUINS + +/area/submap/piratevessel + name = "Poi Valley - Shuttle Pirates" + requires_power = FALSE + ambience = AMBIENCE_RUINS + +/area/submap/piratevox + name = "Poi Valley - Vox Raiders" + requires_power = FALSE + ambience = AMBIENCE_RUINS + +/area/submap/plontden + name = "Poi Valley Walls - Plont" + ambience = AMBIENCE_RUINS + + +/area/submap/puzzledungeon + name = "Poi Valley Walls - Puzzle Dungeon" + ambience = AMBIENCE_RUINS + + +/area/submap/redshuttledown + name = "Poi Valley - Red Shuttle" + requires_power = FALSE + ambience = AMBIENCE_RUINS + + +/area/submap/settlement + name = "Poi Valley Walls - Settlement" + ambience = AMBIENCE_RUINS + +/area/submap/siegepoint + name = "Poi Valley Walls - Siegepoint" + ambience = AMBIENCE_RUINS + + +/area/submap/solarmoff + name = "Poi Valley Walls - Solar Moth" + ambience = AMBIENCE_RUINS + +/area/submap/spooderchurch + name = "Poi Valley - Fake Cult" + ambience = AMBIENCE_UNHOLY + +/area/submap/teppifarm + name = "Poi Valley - Teppi Farm" + ambience = AMBIENCE_RUINS + +/area/submap/vault + name = "Poi Valley Walls - Vault" + requires_power = FALSE + ambience = AMBIENCE_RUINS + +/area/submap/xenobio + name = "Poi Valley - Xenobio" ambience = AMBIENCE_RUINS \ No newline at end of file diff --git a/maps/yw/items/icepick.dm b/maps/yw/items/icepick.dm index 8be3c4cf44..07fba1f66d 100644 --- a/maps/yw/items/icepick.dm +++ b/maps/yw/items/icepick.dm @@ -1,10 +1,10 @@ -//Ice pick, mountain axe, or ice axe.YW Creation. -/obj/item/weapon/ice_pick - name = "ice axe" - desc = "A sharp tool for climbers and hikers to break up ice and keep themselves from slipping on a steep slope." - icon = 'icons/obj/items_yw.dmi' - icon_state = "icepick" - item_state = "icepick" - matter = list(DEFAULT_WALL_MATERIAL = 12000) //Same as a knife - force = 15 //increasing force for icepick/axe, cause it's a freaking iceaxe. +//Ice pick, mountain axe, or ice axe.YW Creation. +/obj/item/weapon/ice_pick + name = "ice axe" + desc = "A sharp tool for climbers and hikers to break up ice and keep themselves from slipping on a steep slope." + icon = 'icons/obj/items_yw.dmi' + icon_state = "icepick" + item_state = "icepick" + matter = list(DEFAULT_WALL_MATERIAL = 12000) //Same as a knife + force = 15 //increasing force for icepick/axe, cause it's a freaking iceaxe. throwforce = 0 \ No newline at end of file diff --git a/modular_chomp/code/ATMOSPHERICS/atmospherics.dm b/modular_chomp/code/ATMOSPHERICS/atmospherics.dm index 36e4deaeba..2e50ff3e99 100644 --- a/modular_chomp/code/ATMOSPHERICS/atmospherics.dm +++ b/modular_chomp/code/ATMOSPHERICS/atmospherics.dm @@ -1,62 +1,62 @@ -//Chomp override, always allow unwrenching (at a cost) -/obj/machinery/atmospherics/can_unwrench() - return 1 - -//Chomp override, handle unwrenching with the yeet code -/obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(src, /obj/machinery/atmospherics/pipe/tank)) - return ..() - - if(istype(W,/obj/item/device/pipe_painter)) - return 0 - - if (!W.is_wrench()) - return ..() - var/turf/T = src.loc - if (level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - if(!can_unwrench()) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - - //potential yeet - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - var/unsafe_wrenching = FALSE - var/internal_pressure = int_air.return_pressure()-env_air.return_pressure() - - if (internal_pressure > 2*ONE_ATMOSPHERE) - to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") - unsafe_wrenching = TRUE //here we go - else - to_chat(user, "You begin to unfasten \the [src]...") - - playsound(src, W.usesound, 50, 1) - - if (do_after(user, 10 * W.toolspeed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - if(unsafe_wrenching) - unsafe_pressure_release(user, internal_pressure) - deconstruct() - -// Throws the user when they unwrench a pipe with a major difference between the internal and environmental pressure. -/obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null) - if(!user) - return - if(!pressures) - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - pressures = int_air.return_pressure() - env_air.return_pressure() - - user.visible_message("[user] is sent flying by pressure!","The pressure sends you flying!") - - // if get_dir(src, user) is not 0, target is the edge_target_turf on that dir - // otherwise, edge_target_turf uses a random cardinal direction - // range is pressures / 250 - // speed is pressures / 1250 +//Chomp override, always allow unwrenching (at a cost) +/obj/machinery/atmospherics/can_unwrench() + return 1 + +//Chomp override, handle unwrenching with the yeet code +/obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (istype(src, /obj/machinery/atmospherics/pipe/tank)) + return ..() + + if(istype(W,/obj/item/device/pipe_painter)) + return 0 + + if (!W.is_wrench()) + return ..() + var/turf/T = src.loc + if (level==1 && isturf(T) && !T.is_plating()) + to_chat(user, "You must remove the plating first.") + return 1 + if(!can_unwrench()) + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") + add_fingerprint(user) + return 1 + + //potential yeet + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + var/unsafe_wrenching = FALSE + var/internal_pressure = int_air.return_pressure()-env_air.return_pressure() + + if (internal_pressure > 2*ONE_ATMOSPHERE) + to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") + unsafe_wrenching = TRUE //here we go + else + to_chat(user, "You begin to unfasten \the [src]...") + + playsound(src, W.usesound, 50, 1) + + if (do_after(user, 10 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + if(unsafe_wrenching) + unsafe_pressure_release(user, internal_pressure) + deconstruct() + +// Throws the user when they unwrench a pipe with a major difference between the internal and environmental pressure. +/obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null) + if(!user) + return + if(!pressures) + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + pressures = int_air.return_pressure() - env_air.return_pressure() + + user.visible_message("[user] is sent flying by pressure!","The pressure sends you flying!") + + // if get_dir(src, user) is not 0, target is the edge_target_turf on that dir + // otherwise, edge_target_turf uses a random cardinal direction + // range is pressures / 250 + // speed is pressures / 1250 user.throw_at(get_edge_target_turf(user, get_dir(src, user) || pick(GLOB.cardinal)), pressures / 250, pressures / 1250) \ No newline at end of file diff --git a/modular_chomp/code/datums/colormate/colormate.dm b/modular_chomp/code/datums/colormate/colormate.dm index 5f23d25260..3eeaa0fdfa 100644 --- a/modular_chomp/code/datums/colormate/colormate.dm +++ b/modular_chomp/code/datums/colormate/colormate.dm @@ -1,219 +1,219 @@ -/datum/ColorMate - var/name = "colouring" - var/atom/movable/inserted - var/activecolor = "#FFFFFF" - var/list/color_matrix_last - var/active_mode = COLORMATE_HSV - - var/build_hue = 0 - var/build_sat = 1 - var/build_val = 1 - - /// Minimum lightness for normal mode - var/minimum_normal_lightness = 50 - /// Minimum lightness for matrix mode, tested using 4 test colors of full red, green, blue, white. - var/minimum_matrix_lightness = 75 - /// Minimum matrix tests that must pass for something to be considered a valid color (see above) - var/minimum_matrix_tests = 2 - /// Temporary messages - var/temp - -/datum/ColorMate/New(mob/user) - color_matrix_last = list( - 1, 0, 0, - 0, 1, 0, - 0, 0, 1, - 0, 0, 0, - ) - if(istype(user)) - inserted = user - . = ..() - -/datum/ColorMate/Destroy() - inserted = null - . = ..() - -/datum/ColorMate/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ColorMate", name) - ui.open() - -/datum/ColorMate/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ColorMate", src.name) - ui.set_autoupdate(FALSE) //This might be a bit intensive, better to not update it every few ticks - ui.open() - -/datum/ColorMate/tgui_state(mob/user) - return GLOB.tgui_conscious_state - -/datum/ColorMate/tgui_data() - . = list() - .["activemode"] = active_mode - .["matrixcolors"] = list( - "rr" = color_matrix_last[1], - "rg" = color_matrix_last[2], - "rb" = color_matrix_last[3], - "gr" = color_matrix_last[4], - "gg" = color_matrix_last[5], - "gb" = color_matrix_last[6], - "br" = color_matrix_last[7], - "bg" = color_matrix_last[8], - "bb" = color_matrix_last[9], - "cr" = color_matrix_last[10], - "cg" = color_matrix_last[11], - "cb" = color_matrix_last[12], - ) - .["buildhue"] = build_hue - .["buildsat"] = build_sat - .["buildval"] = build_val - if(temp) - .["temp"] = temp - if(inserted) - .["item"] = list() - .["item"]["name"] = inserted.name - .["item"]["sprite"] = icon2base64(get_flat_icon(inserted,dir=SOUTH,no_anim=TRUE)) - .["item"]["preview"] = icon2base64(build_preview()) - else - .["item"] = null - -/datum/ColorMate/tgui_act(action, params) - . = ..() - if(.) - return - if(inserted) - switch(action) - if("switch_modes") - active_mode = text2num(params["mode"]) - return TRUE - if("choose_color") - var/chosen_color = input(inserted, "Choose a color: ", "ColorMate colour picking", activecolor) as color|null - if(chosen_color) - activecolor = chosen_color - return TRUE - if("paint") - do_paint(inserted) - temp = "Painted Successfully!" - if(istype(inserted, /mob/living/simple_mob)) - var/mob/living/simple_mob/M = inserted - M.has_recoloured = TRUE - if(istype(inserted, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = inserted - R.has_recoloured = TRUE - Destroy() - if("drop") - temp = "" - Destroy() - if("clear") - inserted.remove_atom_colour(FIXED_COLOUR_PRIORITY) - playsound(src, 'sound/effects/spray3.ogg', 50, 1) - temp = "Cleared Successfully!" - return TRUE - if("set_matrix_color") - color_matrix_last[params["color"]] = params["value"] - return TRUE - if("set_hue") - build_hue = clamp(text2num(params["buildhue"]), 0, 360) - return TRUE - if("set_sat") - build_sat = clamp(text2num(params["buildsat"]), -10, 10) - return TRUE - if("set_val") - build_val = clamp(text2num(params["buildval"]), -10, 10) - return TRUE - -/datum/ColorMate/proc/do_paint(mob/user) - var/color_to_use - switch(active_mode) - if(COLORMATE_TINT) - color_to_use = activecolor - if(COLORMATE_MATRIX) - color_to_use = rgb_construct_color_matrix( - text2num(color_matrix_last[1]), - text2num(color_matrix_last[2]), - text2num(color_matrix_last[3]), - text2num(color_matrix_last[4]), - text2num(color_matrix_last[5]), - text2num(color_matrix_last[6]), - text2num(color_matrix_last[7]), - text2num(color_matrix_last[8]), - text2num(color_matrix_last[9]), - text2num(color_matrix_last[10]), - text2num(color_matrix_last[11]), - text2num(color_matrix_last[12]), - ) - if(COLORMATE_HSV) - color_to_use = color_matrix_hsv(build_hue, build_sat, build_val) - color_matrix_last = color_to_use - if(!color_to_use || !check_valid_color(color_to_use, user)) - to_chat(user, SPAN_NOTICE("Invalid color.")) - return FALSE - inserted.add_atom_colour(color_to_use, FIXED_COLOUR_PRIORITY) - playsound(src, 'sound/effects/spray3.ogg', 50, 1) - return TRUE - -/// Produces the preview image of the item, used in the UI, the way the color is not stacking is a sin. -/datum/ColorMate/proc/build_preview() - if(inserted) //sanity - var/list/cm - switch(active_mode) - if(COLORMATE_MATRIX) - cm = rgb_construct_color_matrix( - text2num(color_matrix_last[1]), - text2num(color_matrix_last[2]), - text2num(color_matrix_last[3]), - text2num(color_matrix_last[4]), - text2num(color_matrix_last[5]), - text2num(color_matrix_last[6]), - text2num(color_matrix_last[7]), - text2num(color_matrix_last[8]), - text2num(color_matrix_last[9]), - text2num(color_matrix_last[10]), - text2num(color_matrix_last[11]), - text2num(color_matrix_last[12]), - ) - if(!check_valid_color(cm, usr)) - return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) - - if(COLORMATE_TINT) - if(!check_valid_color(activecolor, usr)) - return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) - - if(COLORMATE_HSV) - cm = color_matrix_hsv(build_hue, build_sat, build_val) - color_matrix_last = cm - if(!check_valid_color(cm, usr)) - return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) - - var/cur_color = inserted.color - inserted.color = null - inserted.color = (active_mode == COLORMATE_TINT ? activecolor : cm) - var/icon/preview = get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) - inserted.color = cur_color - temp = "" - - . = preview - -/datum/ColorMate/proc/check_valid_color(list/cm, mob/user) - if(!islist(cm)) // normal - var/list/HSV = ReadHSV(RGBtoHSV(cm)) - if(HSV[3] < minimum_normal_lightness) - temp = "[cm] is too dark (Minimum lightness: [minimum_normal_lightness])" - return FALSE - return TRUE - else // matrix - // We test using full red, green, blue, and white - // A predefined number of them must pass to be considered valid - var/passed = 0 -#define COLORTEST(thestring, thematrix) passed += (ReadHSV(RGBtoHSV(RGBMatrixTransform(thestring, thematrix)))[3] >= minimum_matrix_lightness) - COLORTEST("FF0000", cm) - COLORTEST("00FF00", cm) - COLORTEST("0000FF", cm) - COLORTEST("FFFFFF", cm) -#undef COLORTEST - if(passed < minimum_matrix_tests) - temp = "Matrix is too dark. (passed [passed] out of [minimum_matrix_tests] required tests. Minimum lightness: [minimum_matrix_lightness])." - return FALSE - return TRUE +/datum/ColorMate + var/name = "colouring" + var/atom/movable/inserted + var/activecolor = "#FFFFFF" + var/list/color_matrix_last + var/active_mode = COLORMATE_HSV + + var/build_hue = 0 + var/build_sat = 1 + var/build_val = 1 + + /// Minimum lightness for normal mode + var/minimum_normal_lightness = 50 + /// Minimum lightness for matrix mode, tested using 4 test colors of full red, green, blue, white. + var/minimum_matrix_lightness = 75 + /// Minimum matrix tests that must pass for something to be considered a valid color (see above) + var/minimum_matrix_tests = 2 + /// Temporary messages + var/temp + +/datum/ColorMate/New(mob/user) + color_matrix_last = list( + 1, 0, 0, + 0, 1, 0, + 0, 0, 1, + 0, 0, 0, + ) + if(istype(user)) + inserted = user + . = ..() + +/datum/ColorMate/Destroy() + inserted = null + . = ..() + +/datum/ColorMate/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ColorMate", name) + ui.open() + +/datum/ColorMate/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ColorMate", src.name) + ui.set_autoupdate(FALSE) //This might be a bit intensive, better to not update it every few ticks + ui.open() + +/datum/ColorMate/tgui_state(mob/user) + return GLOB.tgui_conscious_state + +/datum/ColorMate/tgui_data() + . = list() + .["activemode"] = active_mode + .["matrixcolors"] = list( + "rr" = color_matrix_last[1], + "rg" = color_matrix_last[2], + "rb" = color_matrix_last[3], + "gr" = color_matrix_last[4], + "gg" = color_matrix_last[5], + "gb" = color_matrix_last[6], + "br" = color_matrix_last[7], + "bg" = color_matrix_last[8], + "bb" = color_matrix_last[9], + "cr" = color_matrix_last[10], + "cg" = color_matrix_last[11], + "cb" = color_matrix_last[12], + ) + .["buildhue"] = build_hue + .["buildsat"] = build_sat + .["buildval"] = build_val + if(temp) + .["temp"] = temp + if(inserted) + .["item"] = list() + .["item"]["name"] = inserted.name + .["item"]["sprite"] = icon2base64(get_flat_icon(inserted,dir=SOUTH,no_anim=TRUE)) + .["item"]["preview"] = icon2base64(build_preview()) + else + .["item"] = null + +/datum/ColorMate/tgui_act(action, params) + . = ..() + if(.) + return + if(inserted) + switch(action) + if("switch_modes") + active_mode = text2num(params["mode"]) + return TRUE + if("choose_color") + var/chosen_color = input(inserted, "Choose a color: ", "ColorMate colour picking", activecolor) as color|null + if(chosen_color) + activecolor = chosen_color + return TRUE + if("paint") + do_paint(inserted) + temp = "Painted Successfully!" + if(istype(inserted, /mob/living/simple_mob)) + var/mob/living/simple_mob/M = inserted + M.has_recoloured = TRUE + if(istype(inserted, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = inserted + R.has_recoloured = TRUE + Destroy() + if("drop") + temp = "" + Destroy() + if("clear") + inserted.remove_atom_colour(FIXED_COLOUR_PRIORITY) + playsound(src, 'sound/effects/spray3.ogg', 50, 1) + temp = "Cleared Successfully!" + return TRUE + if("set_matrix_color") + color_matrix_last[params["color"]] = params["value"] + return TRUE + if("set_hue") + build_hue = clamp(text2num(params["buildhue"]), 0, 360) + return TRUE + if("set_sat") + build_sat = clamp(text2num(params["buildsat"]), -10, 10) + return TRUE + if("set_val") + build_val = clamp(text2num(params["buildval"]), -10, 10) + return TRUE + +/datum/ColorMate/proc/do_paint(mob/user) + var/color_to_use + switch(active_mode) + if(COLORMATE_TINT) + color_to_use = activecolor + if(COLORMATE_MATRIX) + color_to_use = rgb_construct_color_matrix( + text2num(color_matrix_last[1]), + text2num(color_matrix_last[2]), + text2num(color_matrix_last[3]), + text2num(color_matrix_last[4]), + text2num(color_matrix_last[5]), + text2num(color_matrix_last[6]), + text2num(color_matrix_last[7]), + text2num(color_matrix_last[8]), + text2num(color_matrix_last[9]), + text2num(color_matrix_last[10]), + text2num(color_matrix_last[11]), + text2num(color_matrix_last[12]), + ) + if(COLORMATE_HSV) + color_to_use = color_matrix_hsv(build_hue, build_sat, build_val) + color_matrix_last = color_to_use + if(!color_to_use || !check_valid_color(color_to_use, user)) + to_chat(user, SPAN_NOTICE("Invalid color.")) + return FALSE + inserted.add_atom_colour(color_to_use, FIXED_COLOUR_PRIORITY) + playsound(src, 'sound/effects/spray3.ogg', 50, 1) + return TRUE + +/// Produces the preview image of the item, used in the UI, the way the color is not stacking is a sin. +/datum/ColorMate/proc/build_preview() + if(inserted) //sanity + var/list/cm + switch(active_mode) + if(COLORMATE_MATRIX) + cm = rgb_construct_color_matrix( + text2num(color_matrix_last[1]), + text2num(color_matrix_last[2]), + text2num(color_matrix_last[3]), + text2num(color_matrix_last[4]), + text2num(color_matrix_last[5]), + text2num(color_matrix_last[6]), + text2num(color_matrix_last[7]), + text2num(color_matrix_last[8]), + text2num(color_matrix_last[9]), + text2num(color_matrix_last[10]), + text2num(color_matrix_last[11]), + text2num(color_matrix_last[12]), + ) + if(!check_valid_color(cm, usr)) + return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) + + if(COLORMATE_TINT) + if(!check_valid_color(activecolor, usr)) + return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) + + if(COLORMATE_HSV) + cm = color_matrix_hsv(build_hue, build_sat, build_val) + color_matrix_last = cm + if(!check_valid_color(cm, usr)) + return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) + + var/cur_color = inserted.color + inserted.color = null + inserted.color = (active_mode == COLORMATE_TINT ? activecolor : cm) + var/icon/preview = get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE) + inserted.color = cur_color + temp = "" + + . = preview + +/datum/ColorMate/proc/check_valid_color(list/cm, mob/user) + if(!islist(cm)) // normal + var/list/HSV = ReadHSV(RGBtoHSV(cm)) + if(HSV[3] < minimum_normal_lightness) + temp = "[cm] is too dark (Minimum lightness: [minimum_normal_lightness])" + return FALSE + return TRUE + else // matrix + // We test using full red, green, blue, and white + // A predefined number of them must pass to be considered valid + var/passed = 0 +#define COLORTEST(thestring, thematrix) passed += (ReadHSV(RGBtoHSV(RGBMatrixTransform(thestring, thematrix)))[3] >= minimum_matrix_lightness) + COLORTEST("FF0000", cm) + COLORTEST("00FF00", cm) + COLORTEST("0000FF", cm) + COLORTEST("FFFFFF", cm) +#undef COLORTEST + if(passed < minimum_matrix_tests) + temp = "Matrix is too dark. (passed [passed] out of [minimum_matrix_tests] required tests. Minimum lightness: [minimum_matrix_lightness])." + return FALSE + return TRUE diff --git a/modular_chomp/code/datums/crafting/items.dm b/modular_chomp/code/datums/crafting/items.dm index 5cfb323f93..fbaaf86d88 100644 --- a/modular_chomp/code/datums/crafting/items.dm +++ b/modular_chomp/code/datums/crafting/items.dm @@ -1,299 +1,299 @@ -#define MAT_WISP "strange wisp" -#define MAT_FROSCALE "frost scale" -#define MAT_CRYSCALE "crystal scale" -#define MAT_DREAMSCALE "furred scale" -#define MAT_SHELLCHITIN "shell chitin" - -/datum/material/wisp - name = MAT_WISP - icon_colour = "#F13C00" - stack_type = /obj/item/stack/material/wisp - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - icon_base = "solid" - icon_reinf = "reinf_mesh" - integrity = 30 - weight = 10 - ignition_point = T0C+600 - melting_point = T0C+800 - protectiveness = 5 - conductive = 0 - opacity = 0.5 - reflectivity = 30 - supply_conversion_value = 6 - -/obj/item/stack/material/wisp - name = "Strange Wisp" - desc = "The by-product of mob grinding." - icon = 'modular_chomp/icons/obj/crafting.dmi' - icon_state = "wisp" - default_type = MAT_WISP - no_variants = FALSE - pass_color = TRUE - strict_color_stacking = TRUE - - -/datum/material/frostscale - name = MAT_FROSCALE - icon_colour = "#0000CC" - stack_type = /obj/item/stack/material/frostscale - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - icon_base = "solid" - icon_reinf = "reinf_mesh" - integrity = 250 - weight = 50 - ignition_point = T0C+20 - melting_point = T0C+40 - protectiveness = 30 - conductive = 0 - opacity = 0.5 - reflectivity = 0 - supply_conversion_value = 8 - -/obj/item/stack/material/frostscale - name = "Frost Scale" - desc = "The by-product of mob grinding." - icon = 'modular_chomp/icons/obj/crafting.dmi' - icon_state = "scale" - color = "#0000CC" - default_type = MAT_FROSCALE - no_variants = FALSE - pass_color = TRUE - strict_color_stacking = TRUE - -/datum/material/crystalscale - name = MAT_CRYSCALE - icon_colour = "#006633" - stack_type = /obj/item/stack/material/crystalscale - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - icon_base = "solid" - icon_reinf = "reinf_mesh" - integrity = 250 - weight = 10 - radiation_resistance = 25 //less then lead because it's lighter then lead. - protectiveness = 30 - conductive = 0 - opacity = 0.25 - reflectivity = 60 - supply_conversion_value = 4 - -/obj/item/stack/material/crystalscale - name = "Crystak Scale" - desc = "The by-product of mob grinding." - icon = 'modular_chomp/icons/obj/crafting.dmi' - icon_state = "scale" - color = "#006633" - default_type = MAT_CRYSCALE - no_variants = FALSE - pass_color = TRUE - strict_color_stacking = TRUE - -/datum/material/dreamscale - name = MAT_DREAMSCALE - icon_colour = "#006633" - stack_type = /obj/item/stack/material/dreamscale - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - icon_base = "solid" - icon_reinf = "reinf_mesh" - integrity = 200 - weight = 30 - ignition_point = T0C+200 - melting_point = T0C+400 - protectiveness = 60 - reflectivity = 30 - supply_conversion_value = 1 - -/obj/item/stack/material/dreamscale - name = "Dream Scale" - desc = "The by-product of mob grinding." - icon = 'modular_chomp/icons/obj/crafting.dmi' - icon_state = "scale" - default_type = MAT_DREAMSCALE - no_variants = FALSE - pass_color = TRUE - strict_color_stacking = TRUE - -/datum/material/shellchitin - name = MAT_SHELLCHITIN - icon_colour = "#006633" - stack_type = /obj/item/stack/material/dreamscale - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - icon_base = "solid" - icon_reinf = "reinf_mesh" - integrity = 250 - weight = 100 - ignition_point = T0C+300 - melting_point = T0C+600 - protectiveness = 50 - reflectivity = 0 - supply_conversion_value = 1 - -/obj/item/stack/material/shellchitin - name = "Shell Chitin" - desc = "The by-product of mob grinding." - icon = 'modular_chomp/icons/obj/crafting.dmi' - icon_state = "shell" - default_type = MAT_SHELLCHITIN - no_variants = FALSE - pass_color = TRUE - strict_color_stacking = TRUE - -//Putting this here for now because in intial PRs, I enjoy making/altering as few files as possible. -//Solar ray stuff -/obj/item/clothing/suit/armor/firecloak - name = "solar cloak" - desc = "A strange cloak made from remnants of solar rays." - icon = 'icons/inventory/accessory/item.dmi' - icon_state = "seccloak" - color = "#F13C00" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/suit/armor/firecloak/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(istype(damage_source, /obj/item/projectile)) - return FALSE - if(attacker && attacker != user) - shoot_fire(attacker) - else - return FALSE - -/obj/item/clothing/suit/armor/firecloak/proc/shoot_fire(mob/target) - var/obj/item/projectile/P = new /obj/item/projectile/fire(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -/obj/item/weapon/material/sword/rapier/solar - name = "solar rapier" - desc = "A slender, fancy and sharply pointed sword, wisps of fire swirling around it." - icon_state = "rapier" - item_state = "rapier" - slot_flags = SLOT_BELT - applies_material_colour = 0 - force_divisor = 0.50 - color = "#F13C00" - -/obj/item/weapon/material/sword/rapier/solar/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - . = ..() - target.add_modifier(/datum/modifier/fire/weak, 12 SECONDS) //should be 12 damage? - -//Icicle -/obj/item/weapon/gun/energy/icelauncher - name = "Strange Pistol" - desc = "A homemade and somehow functional icicle launcher." - icon = 'icons/obj/gun_ch.dmi' - icon_state = "ziplas" - item_state = "ziplas" - color = "#0000CC" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT|SLOT_BACK - charge_cost = 300 //You got 5 shot - battery_lock = 1 - projectile_type = /obj/item/projectile/icicle //But it hurts a lot - cell_type = /obj/item/weapon/cell/device/weapon - -/obj/item/clothing/shoes/boots/frost - name = "frost boots" - desc = "Handmade boots of scavanged bits." - icon_state = "winterboots" - color = "#0000CC" - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - snow_speed = -1 - rock_climbing = TRUE - item_flags = NOSLIP - -//Turtle -/obj/item/weapon/material/twohanded/sledgehammer/gravity - name = "Gravity Sledgehammer" - desc = "A sledgehammer in bits of a gravity turtle's shell." - unwielded_force_divisor = 0.25 - force_divisor = 0.40 // - dulled_divisor = 0.80 //Still metal on a stick - w_class = ITEMSIZE_LARGE - slot_flags = SLOT_BACK - force_wielded = 25 - applies_material_colour = 1 - -/obj/item/weapon/material/twohanded/sledgehammer/gravity/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - . = ..() - var/atom/target_zone = get_edge_target_turf(user,get_dir(user, target)) - if(!target.anchored) - target.throw_at(target_zone, 6, 2, user, FALSE) - user.visible_message("\The [src] discharges with a thunderous boom!") - playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1) - -//Eel stuff -/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester - name = "Scaled Scythe" - desc = "A scythe cladded in dream eel scales, allowing for better defense at the cost of offense." - force_wielded = 18 - force_divisor = 0.3 // 18 with hardness 60 (steel) - unwielded_force_divisor = 0.10 - var/defend_chance = 50 - var/projectile_parry_chance = 50 - -/obj/item/clothing/suit/armor/alien/dreamercloak - name = "Dreamer Cloak" - desc = "A strange cloak, something about it feels off." - icon = 'icons/inventory/accessory/item.dmi' - icon_state = "seccloak" //custom sprite for this for sure. - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - block_chance = 35 - slowdown = -0.5 - -//uggg, why isnt this apart of the base material melee weapons -/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(.) - return . - if(default_parry_check(user, attacker, damage_source) && prob(defend_chance)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - return 1 - if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) - user.visible_message("\The [user] deflects [attack_text] with \the [src]!") - return 1 - - return 0 - -/obj/item/clothing/gloves/toxinregen - name = "purging gloves" - desc = "A pair of gloves with a small storage of green liquid on the outside. On the inside, a a hypodermic needle can be seen \ - on each glove." - icon_state = "regen" - item_state = "graygloves" - siemens_coefficient = 0 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/toxinregen/equipped(var/mob/living/carbon/human/H) - if(H && H.gloves == src) - wearer = H - if(wearer.can_feel_pain()) - to_chat(H, "You feel a stabbing sensation in your hands as you slide \the [src] on!") - wearer.custom_pain("You feel a sharp pain in your hands!",1) - ..() - -/obj/item/clothing/gloves/toxinregen/dropped(var/mob/living/carbon/human/H) - ..() - if(wearer) - if(wearer.can_feel_pain()) - to_chat(wearer, "You feel the hypodermic needles as you slide \the [src] off!") - wearer.custom_pain("Your hands hurt like hell!",1) - wearer = null - -/obj/item/clothing/gloves/toxinregen/New() - START_PROCESSING(SSobj, src) - ..() - -/obj/item/clothing/gloves/toxinregen/Destroy() - wearer = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/gloves/toxinregen/process() - if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD || wearer.nutrition <= 10) - return - if(wearer.getToxLoss()) +#define MAT_WISP "strange wisp" +#define MAT_FROSCALE "frost scale" +#define MAT_CRYSCALE "crystal scale" +#define MAT_DREAMSCALE "furred scale" +#define MAT_SHELLCHITIN "shell chitin" + +/datum/material/wisp + name = MAT_WISP + icon_colour = "#F13C00" + stack_type = /obj/item/stack/material/wisp + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 30 + weight = 10 + ignition_point = T0C+600 + melting_point = T0C+800 + protectiveness = 5 + conductive = 0 + opacity = 0.5 + reflectivity = 30 + supply_conversion_value = 6 + +/obj/item/stack/material/wisp + name = "Strange Wisp" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "wisp" + default_type = MAT_WISP + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + + +/datum/material/frostscale + name = MAT_FROSCALE + icon_colour = "#0000CC" + stack_type = /obj/item/stack/material/frostscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 50 + ignition_point = T0C+20 + melting_point = T0C+40 + protectiveness = 30 + conductive = 0 + opacity = 0.5 + reflectivity = 0 + supply_conversion_value = 8 + +/obj/item/stack/material/frostscale + name = "Frost Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + color = "#0000CC" + default_type = MAT_FROSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/crystalscale + name = MAT_CRYSCALE + icon_colour = "#006633" + stack_type = /obj/item/stack/material/crystalscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 10 + radiation_resistance = 25 //less then lead because it's lighter then lead. + protectiveness = 30 + conductive = 0 + opacity = 0.25 + reflectivity = 60 + supply_conversion_value = 4 + +/obj/item/stack/material/crystalscale + name = "Crystak Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + color = "#006633" + default_type = MAT_CRYSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/dreamscale + name = MAT_DREAMSCALE + icon_colour = "#006633" + stack_type = /obj/item/stack/material/dreamscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 200 + weight = 30 + ignition_point = T0C+200 + melting_point = T0C+400 + protectiveness = 60 + reflectivity = 30 + supply_conversion_value = 1 + +/obj/item/stack/material/dreamscale + name = "Dream Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + default_type = MAT_DREAMSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/shellchitin + name = MAT_SHELLCHITIN + icon_colour = "#006633" + stack_type = /obj/item/stack/material/dreamscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 100 + ignition_point = T0C+300 + melting_point = T0C+600 + protectiveness = 50 + reflectivity = 0 + supply_conversion_value = 1 + +/obj/item/stack/material/shellchitin + name = "Shell Chitin" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "shell" + default_type = MAT_SHELLCHITIN + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +//Putting this here for now because in intial PRs, I enjoy making/altering as few files as possible. +//Solar ray stuff +/obj/item/clothing/suit/armor/firecloak + name = "solar cloak" + desc = "A strange cloak made from remnants of solar rays." + icon = 'icons/inventory/accessory/item.dmi' + icon_state = "seccloak" + color = "#F13C00" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/firecloak/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(istype(damage_source, /obj/item/projectile)) + return FALSE + if(attacker && attacker != user) + shoot_fire(attacker) + else + return FALSE + +/obj/item/clothing/suit/armor/firecloak/proc/shoot_fire(mob/target) + var/obj/item/projectile/P = new /obj/item/projectile/fire(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/obj/item/weapon/material/sword/rapier/solar + name = "solar rapier" + desc = "A slender, fancy and sharply pointed sword, wisps of fire swirling around it." + icon_state = "rapier" + item_state = "rapier" + slot_flags = SLOT_BELT + applies_material_colour = 0 + force_divisor = 0.50 + color = "#F13C00" + +/obj/item/weapon/material/sword/rapier/solar/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + . = ..() + target.add_modifier(/datum/modifier/fire/weak, 12 SECONDS) //should be 12 damage? + +//Icicle +/obj/item/weapon/gun/energy/icelauncher + name = "Strange Pistol" + desc = "A homemade and somehow functional icicle launcher." + icon = 'icons/obj/gun_ch.dmi' + icon_state = "ziplas" + item_state = "ziplas" + color = "#0000CC" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT|SLOT_BACK + charge_cost = 300 //You got 5 shot + battery_lock = 1 + projectile_type = /obj/item/projectile/icicle //But it hurts a lot + cell_type = /obj/item/weapon/cell/device/weapon + +/obj/item/clothing/shoes/boots/frost + name = "frost boots" + desc = "Handmade boots of scavanged bits." + icon_state = "winterboots" + color = "#0000CC" + cold_protection = FEET + min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = FEET + max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE + snow_speed = -1 + rock_climbing = TRUE + item_flags = NOSLIP + +//Turtle +/obj/item/weapon/material/twohanded/sledgehammer/gravity + name = "Gravity Sledgehammer" + desc = "A sledgehammer in bits of a gravity turtle's shell." + unwielded_force_divisor = 0.25 + force_divisor = 0.40 // + dulled_divisor = 0.80 //Still metal on a stick + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + force_wielded = 25 + applies_material_colour = 1 + +/obj/item/weapon/material/twohanded/sledgehammer/gravity/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + . = ..() + var/atom/target_zone = get_edge_target_turf(user,get_dir(user, target)) + if(!target.anchored) + target.throw_at(target_zone, 6, 2, user, FALSE) + user.visible_message("\The [src] discharges with a thunderous boom!") + playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1) + +//Eel stuff +/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester + name = "Scaled Scythe" + desc = "A scythe cladded in dream eel scales, allowing for better defense at the cost of offense." + force_wielded = 18 + force_divisor = 0.3 // 18 with hardness 60 (steel) + unwielded_force_divisor = 0.10 + var/defend_chance = 50 + var/projectile_parry_chance = 50 + +/obj/item/clothing/suit/armor/alien/dreamercloak + name = "Dreamer Cloak" + desc = "A strange cloak, something about it feels off." + icon = 'icons/inventory/accessory/item.dmi' + icon_state = "seccloak" //custom sprite for this for sure. + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + block_chance = 35 + slowdown = -0.5 + +//uggg, why isnt this apart of the base material melee weapons +/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(.) + return . + if(default_parry_check(user, attacker, damage_source) && prob(defend_chance)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + return 1 + if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) + user.visible_message("\The [user] deflects [attack_text] with \the [src]!") + return 1 + + return 0 + +/obj/item/clothing/gloves/toxinregen + name = "purging gloves" + desc = "A pair of gloves with a small storage of green liquid on the outside. On the inside, a a hypodermic needle can be seen \ + on each glove." + icon_state = "regen" + item_state = "graygloves" + siemens_coefficient = 0 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/gloves/toxinregen/equipped(var/mob/living/carbon/human/H) + if(H && H.gloves == src) + wearer = H + if(wearer.can_feel_pain()) + to_chat(H, "You feel a stabbing sensation in your hands as you slide \the [src] on!") + wearer.custom_pain("You feel a sharp pain in your hands!",1) + ..() + +/obj/item/clothing/gloves/toxinregen/dropped(var/mob/living/carbon/human/H) + ..() + if(wearer) + if(wearer.can_feel_pain()) + to_chat(wearer, "You feel the hypodermic needles as you slide \the [src] off!") + wearer.custom_pain("Your hands hurt like hell!",1) + wearer = null + +/obj/item/clothing/gloves/toxinregen/New() + START_PROCESSING(SSobj, src) + ..() + +/obj/item/clothing/gloves/toxinregen/Destroy() + wearer = null + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/clothing/gloves/toxinregen/process() + if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD || wearer.nutrition <= 10) + return + if(wearer.getToxLoss()) wearer.adjustToxLoss(-0.5) \ No newline at end of file diff --git a/modular_chomp/code/datums/crafting/recipes.dm b/modular_chomp/code/datums/crafting/recipes.dm index cfbf18b849..3825ee1e71 100644 --- a/modular_chomp/code/datums/crafting/recipes.dm +++ b/modular_chomp/code/datums/crafting/recipes.dm @@ -1,125 +1,125 @@ -/datum/crafting_recipe/ziplaser - name = "Ziplaser" - result = /obj/item/weapon/gun/energy/zip/craftable - reqs = list(list(/obj/item/weapon/cell/high = 1), - list(/obj/item/stack/rods = 2), - list(/obj/item/stack/material/steel = 8), - list(/obj/item/stack/material/plastic = 5), - list(/obj/item/weapon/cell/device = 2) - ) - time = 120 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/primitive_platecarrier - name = "primitive plate carrier" - result = /obj/item/clothing/suit/armor/pcarrier/primative - reqs = list( - list(/obj/item/stack/material/leather = 10), - list(/obj/item/stack/rods = 4), - list(/obj/item/stack/material/cloth = 5) - ) - time = 120 - category = CAT_CLOTHING - -/datum/crafting_recipe/surgerytable - name = "surgery table" - result = /obj/machinery/optable - reqs = list( - list(/obj/item/stack/material/silver = 12), - list(/obj/item/stack/rods = 10), - list(/obj/item/stack/material/leather = 1) - ) - time = 240 - category = CAT_MISC - - -/datum/crafting_recipe/solarcloak - name = "solar cloak" - result = /obj/item/clothing/suit/armor/firecloak - reqs = list( - list(/obj/item/stack/material/cloth = 10), - list(/obj/item/stack/material/wisp = 2) - ) - time = 60 - category = CAT_CLOTHING - -/datum/crafting_recipe/dreamcloak - name = "solar cloak" - result = /obj/item/clothing/suit/armor/alien/dreamercloak - reqs = list( - list(/obj/item/stack/material/cloth = 10), - list(/obj/item/stack/material/dreamscale = 2) - ) - time = 60 - category = CAT_CLOTHING - -/datum/crafting_recipe/toxinregengloves - name = "purging gloves" - result = /obj/item/clothing/gloves/toxinregen - reqs = list( - list(/obj/item/stack/material/cloth = 10), - list(/obj/item/stack/material/crystalscale = 2), - list(/obj/item/stack/material/resin = 8), - /obj/item/weapon/stock_parts/capacitor = 1 - ) - time = 60 - category = CAT_CLOTHING - -/datum/crafting_recipe/iceboots - name = "frost boots" - result = /obj/item/clothing/shoes/boots/frost - reqs = list( - list(/obj/item/stack/material/frostscale = 2), - /obj/item/clothing/shoes/boots/winter = 1 - ) - time = 60 - category = CAT_CLOTHING - -/datum/crafting_recipe/strangepistol - name = "Strange Weapon" - result = /obj/item/weapon/gun/energy/icelauncher - reqs = list( - list(/obj/item/stack/material/steel = 8), - list(/obj/item/stack/material/plastic = 3), - list(/obj/item/weapon/cell/device = 1), - list(/obj/item/stack/material/frostscale = 2) - ) - time = 60 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/solarrapier - name = "Solar Rapier" - result = /obj/item/weapon/material/sword/rapier/solar - reqs = list( - list(/obj/item/stack/material/steel = 15), - list(/obj/item/stack/material/leather = 3), - list(/obj/item/stack/material/wisp = 2) - ) - time = 60 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/gravityhammer - name = "Gravity Hammer" - result = /obj/item/weapon/material/twohanded/sledgehammer/gravity - reqs = list(list(/obj/item/stack/material/steel = 15), - list(/obj/item/stack/material/leather = 3), - list(/obj/item/stack/material/shellchitin = 2), - list(/obj/item/weapon/cell/high = 1) - ) - time = 60 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/harvester - name = "Harvester" - result = /obj/item/weapon/material/twohanded/fireaxe/scythe/harvester - reqs = list(list(/obj/item/stack/material/steel = 15), - list(/obj/item/stack/material/leather = 3), - list(/obj/item/stack/material/dreamscale = 2) - ) - time = 60 - category = CAT_WEAPONRY +/datum/crafting_recipe/ziplaser + name = "Ziplaser" + result = /obj/item/weapon/gun/energy/zip/craftable + reqs = list(list(/obj/item/weapon/cell/high = 1), + list(/obj/item/stack/rods = 2), + list(/obj/item/stack/material/steel = 8), + list(/obj/item/stack/material/plastic = 5), + list(/obj/item/weapon/cell/device = 2) + ) + time = 120 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/primitive_platecarrier + name = "primitive plate carrier" + result = /obj/item/clothing/suit/armor/pcarrier/primative + reqs = list( + list(/obj/item/stack/material/leather = 10), + list(/obj/item/stack/rods = 4), + list(/obj/item/stack/material/cloth = 5) + ) + time = 120 + category = CAT_CLOTHING + +/datum/crafting_recipe/surgerytable + name = "surgery table" + result = /obj/machinery/optable + reqs = list( + list(/obj/item/stack/material/silver = 12), + list(/obj/item/stack/rods = 10), + list(/obj/item/stack/material/leather = 1) + ) + time = 240 + category = CAT_MISC + + +/datum/crafting_recipe/solarcloak + name = "solar cloak" + result = /obj/item/clothing/suit/armor/firecloak + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/wisp = 2) + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/dreamcloak + name = "solar cloak" + result = /obj/item/clothing/suit/armor/alien/dreamercloak + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/dreamscale = 2) + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/toxinregengloves + name = "purging gloves" + result = /obj/item/clothing/gloves/toxinregen + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/crystalscale = 2), + list(/obj/item/stack/material/resin = 8), + /obj/item/weapon/stock_parts/capacitor = 1 + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/iceboots + name = "frost boots" + result = /obj/item/clothing/shoes/boots/frost + reqs = list( + list(/obj/item/stack/material/frostscale = 2), + /obj/item/clothing/shoes/boots/winter = 1 + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/strangepistol + name = "Strange Weapon" + result = /obj/item/weapon/gun/energy/icelauncher + reqs = list( + list(/obj/item/stack/material/steel = 8), + list(/obj/item/stack/material/plastic = 3), + list(/obj/item/weapon/cell/device = 1), + list(/obj/item/stack/material/frostscale = 2) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/solarrapier + name = "Solar Rapier" + result = /obj/item/weapon/material/sword/rapier/solar + reqs = list( + list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/wisp = 2) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/gravityhammer + name = "Gravity Hammer" + result = /obj/item/weapon/material/twohanded/sledgehammer/gravity + reqs = list(list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/shellchitin = 2), + list(/obj/item/weapon/cell/high = 1) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/harvester + name = "Harvester" + result = /obj/item/weapon/material/twohanded/fireaxe/scythe/harvester + reqs = list(list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/dreamscale = 2) + ) + time = 60 + category = CAT_WEAPONRY subcategory = CAT_WEAPON \ No newline at end of file diff --git a/modular_chomp/code/datums/outfits/jobs/command.dm b/modular_chomp/code/datums/outfits/jobs/command.dm index 768eda1680..cbb032254c 100644 --- a/modular_chomp/code/datums/outfits/jobs/command.dm +++ b/modular_chomp/code/datums/outfits/jobs/command.dm @@ -1,7 +1,7 @@ -/decl/hierarchy/outfit/job/bridge_officer - name = OUTFIT_JOB_NAME("Bridge Officer") - uniform = /obj/item/clothing/under/utility - l_ear = /obj/item/device/radio/headset/headset_com - shoes = /obj/item/clothing/shoes/boots/winter/explorer - id_type = /obj/item/weapon/card/id/silver/secretary +/decl/hierarchy/outfit/job/bridge_officer + name = OUTFIT_JOB_NAME("Bridge Officer") + uniform = /obj/item/clothing/under/utility + l_ear = /obj/item/device/radio/headset/headset_com + shoes = /obj/item/clothing/shoes/boots/winter/explorer + id_type = /obj/item/weapon/card/id/silver/secretary pda_type = /obj/item/device/pda/heads \ No newline at end of file diff --git a/modular_chomp/code/datums/supplypacks/misc.dm b/modular_chomp/code/datums/supplypacks/misc.dm index 43bf353046..ed8b57c80c 100644 --- a/modular_chomp/code/datums/supplypacks/misc.dm +++ b/modular_chomp/code/datums/supplypacks/misc.dm @@ -1,53 +1,53 @@ -/datum/supply_pack/misc/solarray - name = "Exotic crate - Solar Ray" - contains = list() - cost = 100 - containertype = /obj/structure/largecrate/animal/solarray - containername = "Exotic crate" - -/datum/supply_pack/misc/livingice - name = "Exotic crate - Living Ice" - contains = list() - cost = 100 - containertype = /obj/structure/largecrate/animal/livingice - containername = "Exotic crate" - -/datum/supply_pack/misc/radcrab - name = "Exotic crate - Crystaline Crab" - contains = list() - cost = 100 - containertype = /obj/structure/largecrate/animal/radcrab - containername = "Exotic crate" - -/datum/supply_pack/misc/dreameel - name = "Exotic crate - Dream Eel" - contains = list() - cost = 100 - containertype = /obj/structure/largecrate/animal/dreameel - containername = "Exotic crate" - -/datum/supply_pack/misc/gravityshell - name = "Exotic crate - Gravity Shell" - contains = list() - cost = 100 - containertype = /obj/structure/largecrate/animal/gravityshell - containername = "Exotic crate" - -/datum/supply_pack/misc/fulton - name = "Bluespace Fulton Kit" - contains = list( - /obj/item/extraction_pack = 2, - /obj/item/fulton_core = 1 - ) - cost = 200 - containertype = /obj/structure/closet/crate/nanotrasen - container name = "Bluespace Fulton kit crate" - -/datum/supply_pack/misc/fulton_surplus - name = "Surplus Bluespace Fultons" - contains = list( - /obj/item/extraction_pack = 2 - ) - cost = 100 - containertype = /obj/structure/closet/crate/nanotrasen +/datum/supply_pack/misc/solarray + name = "Exotic crate - Solar Ray" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/solarray + containername = "Exotic crate" + +/datum/supply_pack/misc/livingice + name = "Exotic crate - Living Ice" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/livingice + containername = "Exotic crate" + +/datum/supply_pack/misc/radcrab + name = "Exotic crate - Crystaline Crab" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/radcrab + containername = "Exotic crate" + +/datum/supply_pack/misc/dreameel + name = "Exotic crate - Dream Eel" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/dreameel + containername = "Exotic crate" + +/datum/supply_pack/misc/gravityshell + name = "Exotic crate - Gravity Shell" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/gravityshell + containername = "Exotic crate" + +/datum/supply_pack/misc/fulton + name = "Bluespace Fulton Kit" + contains = list( + /obj/item/extraction_pack = 2, + /obj/item/fulton_core = 1 + ) + cost = 200 + containertype = /obj/structure/closet/crate/nanotrasen + container name = "Bluespace Fulton kit crate" + +/datum/supply_pack/misc/fulton_surplus + name = "Surplus Bluespace Fultons" + contains = list( + /obj/item/extraction_pack = 2 + ) + cost = 100 + containertype = /obj/structure/closet/crate/nanotrasen container name = "Surplus Bluespace Fultons crate" \ No newline at end of file diff --git a/modular_chomp/code/datums/supplypacks/science.dm b/modular_chomp/code/datums/supplypacks/science.dm index d9aaff7a6a..3e49f84bf3 100644 --- a/modular_chomp/code/datums/supplypacks/science.dm +++ b/modular_chomp/code/datums/supplypacks/science.dm @@ -1,8 +1,8 @@ -/datum/supply_pack/sci/borgos - name = "Borg-O's Five-Pack" - contains = list( - /obj/item/trash/rkibble = 5, - ) - cost = 45 - containertype = /obj/structure/closet/crate/ward +/datum/supply_pack/sci/borgos + name = "Borg-O's Five-Pack" + contains = list( + /obj/item/trash/rkibble = 5, + ) + cost = 45 + containertype = /obj/structure/closet/crate/ward containername = "Borg-O's crate" \ No newline at end of file diff --git a/modular_chomp/code/datums/supplypacks/security.dm b/modular_chomp/code/datums/supplypacks/security.dm index a790ad384d..88b736e878 100644 --- a/modular_chomp/code/datums/supplypacks/security.dm +++ b/modular_chomp/code/datums/supplypacks/security.dm @@ -1,37 +1,37 @@ -/datum/supply_pack/security/secpsg - name = "Security Belt PSGs" - contains = list( - /obj/item/device/personal_shield_generator/belt/security/loaded, - /obj/item/device/personal_shield_generator/belt/security/loaded - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure/gear - containername = "Personal Shield Generators crate" - -/datum/supply_pack/security/secstrongpsg - name = "Security Reinforced Backpack PSG" - contains = list( - /obj/item/device/personal_shield_generator/security/strong/loaded - ) - cost = 200 - containertype = /obj/structure/closet/crate/secure/gear - containername = "Reinforced PSG crate" - -/datum/supply_pack/security/secstrongpsg - name = "Security PSG-P" - contains = list( - /obj/item/device/personal_shield_generator/belt/parry - ) - cost = 250 - containertype = /obj/structure/closet/crate/secure/gear - containername = "PSG-P crate" - -/datum/supply_pack/security/rednetgun - name = "Experimental Capture Gun" - num_contained = 4 - contains = list( - /obj/item/weapon/gun/energy/rednetgun - ) - cost = 150 - containertype = /obj/structure/closet/crate/secure/gear +/datum/supply_pack/security/secpsg + name = "Security Belt PSGs" + contains = list( + /obj/item/device/personal_shield_generator/belt/security/loaded, + /obj/item/device/personal_shield_generator/belt/security/loaded + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure/gear + containername = "Personal Shield Generators crate" + +/datum/supply_pack/security/secstrongpsg + name = "Security Reinforced Backpack PSG" + contains = list( + /obj/item/device/personal_shield_generator/security/strong/loaded + ) + cost = 200 + containertype = /obj/structure/closet/crate/secure/gear + containername = "Reinforced PSG crate" + +/datum/supply_pack/security/secstrongpsg + name = "Security PSG-P" + contains = list( + /obj/item/device/personal_shield_generator/belt/parry + ) + cost = 250 + containertype = /obj/structure/closet/crate/secure/gear + containername = "PSG-P crate" + +/datum/supply_pack/security/rednetgun + name = "Experimental Capture Gun" + num_contained = 4 + contains = list( + /obj/item/weapon/gun/energy/rednetgun + ) + cost = 150 + containertype = /obj/structure/closet/crate/secure/gear containername = "Expirmental Capture crate" \ No newline at end of file diff --git a/modular_chomp/code/game/jobs/job/captain.dm b/modular_chomp/code/game/jobs/job/captain.dm index 9dbd127f9c..f8f8ce8873 100644 --- a/modular_chomp/code/game/jobs/job/captain.dm +++ b/modular_chomp/code/game/jobs/job/captain.dm @@ -1,3 +1,3 @@ -/datum/job/secretary - alt_titles = list( +/datum/job/secretary + alt_titles = list( "Bridge Officer" = /decl/hierarchy/outfit/job/bridge_officer) \ No newline at end of file diff --git a/modular_chomp/code/game/machinery/autolathe_armory.dm b/modular_chomp/code/game/machinery/autolathe_armory.dm index 2fd73bb3bf..162ba59e9a 100644 --- a/modular_chomp/code/game/machinery/autolathe_armory.dm +++ b/modular_chomp/code/game/machinery/autolathe_armory.dm @@ -1,30 +1,30 @@ -/obj/machinery/autolathe/armory - name = "ammolathe" - desc = "An autolathe that produces ammunition using metal and glass." - hacked = 1 - -/obj/machinery/autolathe/armory/tgui_static_data(mob/user) - var/list/data = ..() - - var/list/categories = list() - var/list/recipes = list() - for(var/datum/category_group/autolathe/A in autolathe_recipes.categories) - categories += A.name - for(var/datum/category_item/autolathe/arms/M in A.items) - if(M.hidden && !hacked) - continue - if(M.man_rating > man_rating) - continue - recipes.Add(list(list( - "category" = A.name, - "name" = M.name, - "ref" = REF(M), - "requirements" = M.resources, - "hidden" = M.hidden, - "coeff_applies" = !M.no_scale, - "is_stack" = M.is_stack, - ))) - data["recipes"] = recipes - data["categories"] = categories - +/obj/machinery/autolathe/armory + name = "ammolathe" + desc = "An autolathe that produces ammunition using metal and glass." + hacked = 1 + +/obj/machinery/autolathe/armory/tgui_static_data(mob/user) + var/list/data = ..() + + var/list/categories = list() + var/list/recipes = list() + for(var/datum/category_group/autolathe/A in autolathe_recipes.categories) + categories += A.name + for(var/datum/category_item/autolathe/arms/M in A.items) + if(M.hidden && !hacked) + continue + if(M.man_rating > man_rating) + continue + recipes.Add(list(list( + "category" = A.name, + "name" = M.name, + "ref" = REF(M), + "requirements" = M.resources, + "hidden" = M.hidden, + "coeff_applies" = !M.no_scale, + "is_stack" = M.is_stack, + ))) + data["recipes"] = recipes + data["categories"] = categories + return data \ No newline at end of file diff --git a/modular_chomp/code/game/machinery/paradox.dm b/modular_chomp/code/game/machinery/paradox.dm index ac24262bd7..9a760a5dfc 100644 --- a/modular_chomp/code/game/machinery/paradox.dm +++ b/modular_chomp/code/game/machinery/paradox.dm @@ -1,137 +1,137 @@ -/obj/machinery/paradoxrift - name = "Paradoxical Rift Generator" - idle_power_usage = 50000000 - icon = 'modular_chomp/icons/obj/machines/defense.dmi' - icon_state = "paradox" - circuit = /obj/item/weapon/circuitboard/paradoxrift - var/build_eff = 1 - var/loot_eff = 1 - var/chaos_eff = 1 - -/obj/item/weapon/circuitboard/paradoxrift - name = "paradox rift generator circuit" - build_path = /obj/machinery/paradoxrift - board_type = new /datum/frame/frame_types/machine - origin_tech = list(TECH_DATA = 8, TECH_PRECURSOR = 3) - req_components = list( - /obj/item/stack/cable_coil = 10, - /obj/item/weapon/stock_parts/capacitor = 4, - /obj/item/weapon/stock_parts/manipulator = 6, - /obj/item/weapon/stock_parts/scanning_module = 10) - -/obj/machinery/paradoxrift/RefreshParts() - ..() - var/man_rating = 0 - var/scan_rating = 0 - var/cap_rating = 0 - - for(var/obj/item/weapon/stock_parts/P in component_parts) - if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) - scan_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/manipulator)) - man_rating += P.rating - if(istype(P, /obj/item/weapon/stock_parts/capacitor)) - cap_rating += P.rating - - build_eff = man_rating - loot_eff = scan_rating - chaos_eff = cap_rating - - -/obj/machinery/paradoxrift/process() - if(!(stat & NOPOWER)) - return - else - if(prob(0.5*build_eff)) - if(prob(3*loot_eff)) - new /obj/random/greaterportalloot (src.loc) - if(prob(30/chaos_eff)) - new /obj/random/mob/interspace (src.loc) - else - return - else - new /obj/random/portalloot (src.loc) - if(prob(15/chaos_eff)) - new /obj/random/mob/interspace (src.loc) - else - return - else - return - - -/obj/random/portalloot - name = "Random Portal Loot" - desc = "This is a random goodie from the void." - icon_state = "medicalkit" - -/obj/random/portalloot/item_to_spawn() - return pick(prob(6);/obj/item/weapon/stock_parts/capacitor/omni, - prob(6);/obj/item/weapon/stock_parts/manipulator/omni, - prob(6);/obj/item/weapon/stock_parts/scanning_module/omni, - prob(6);/obj/item/weapon/stock_parts/matter_bin/omni, - prob(6);/obj/item/weapon/stock_parts/micro_laser/omni, - prob(6);/obj/item/stack/material/phoron, - prob(6);/obj/item/stack/material/deuterium, - prob(6);/obj/item/stack/material/tritium, - prob(6);/obj/item/stack/material/uranium - ) - -/obj/random/greaterportalloot - name = "Random Greater Portal Loot" - desc = "This is a random goodie from the void." - icon_state = "medicalkit" - -/obj/random/greaterportalloot/item_to_spawn() - return pick(prob(2);/obj/item/weapon/stock_parts/capacitor/omni, - prob(2);/obj/item/weapon/stock_parts/manipulator/omni, - prob(2);/obj/item/weapon/stock_parts/scanning_module/omni, - prob(2);/obj/item/weapon/stock_parts/matter_bin/omni, - prob(2);/obj/item/weapon/stock_parts/micro_laser/omni, - prob(2);/obj/item/stack/material/phoron, - prob(2);/obj/item/stack/material/deuterium, - prob(2);/obj/item/stack/material/tritium, - prob(2);/obj/item/stack/material/uranium, - prob(6);/obj/item/weapon/rcd, - prob(6);/obj/item/weapon/rcd/shipwright, - prob(6);/obj/item/weapon/rcd/advanced, - prob(1);/obj/vehicle/bike/random, - prob(1);/obj/vehicle/train/engine/quadbike/random, - prob(1);/obj/vehicle/bike/random, - prob(6);/obj/structure/closet/crate/secure/lootsafe/numberlock, - prob(6);/obj/structure/closet/crate/secure/loot - - ) - -/obj/random/mob/interspace - name = "Random Interspace" - desc = "This is a random mob from space or inbetween space." - icon_state = "humanoid" - - mob_faction = "demon" - mob_returns_home = 1 - mob_wander_distance = 7 - -/obj/random/mob/interspace/item_to_spawn() - return pick(prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/miner, - prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter, - prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/farmer, - prob(1);/mob/living/simple_mob/vore/bigdragon, - prob(1);/mob/living/simple_mob/humanoid/cultist/magus/rift, - prob(15);/mob/living/simple_mob/vore/demonAI, - prob(25);/mob/living/simple_mob/shadekin, - prob(25);/mob/living/simple_mob/vore/solargrub, - prob(15);/mob/living/simple_mob/vore/sect_queen, - prob(25);/mob/living/simple_mob/vore/sect_drone, - prob(25);/mob/living/simple_mob/vore/aggressive/deathclaw, - prob(25);/mob/living/simple_mob/vore/aggressive/corrupthound, - prob(15);/mob/living/simple_mob/metroid/juvenile/super, - prob(25);/mob/living/simple_mob/animal/space/carp, - prob(15);/mob/living/simple_mob/animal/space/carp/large, - prob(15);/mob/living/simple_mob/animal/space/carp/large/huge, - prob(25);/mob/living/simple_mob/animal/space/carp/puffer, - prob(25);/mob/living/simple_mob/animal/space/alien, - prob(15);/mob/living/simple_mob/animal/space/alien/sentinel, - prob(25);/mob/living/simple_mob/vore/pakkun, - prob(25);/mob/living/simple_mob/vore/scel, - prob(5);/mob/living/simple_mob/vore/vore_hostile/abyss_lurker - ) +/obj/machinery/paradoxrift + name = "Paradoxical Rift Generator" + idle_power_usage = 50000000 + icon = 'modular_chomp/icons/obj/machines/defense.dmi' + icon_state = "paradox" + circuit = /obj/item/weapon/circuitboard/paradoxrift + var/build_eff = 1 + var/loot_eff = 1 + var/chaos_eff = 1 + +/obj/item/weapon/circuitboard/paradoxrift + name = "paradox rift generator circuit" + build_path = /obj/machinery/paradoxrift + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_DATA = 8, TECH_PRECURSOR = 3) + req_components = list( + /obj/item/stack/cable_coil = 10, + /obj/item/weapon/stock_parts/capacitor = 4, + /obj/item/weapon/stock_parts/manipulator = 6, + /obj/item/weapon/stock_parts/scanning_module = 10) + +/obj/machinery/paradoxrift/RefreshParts() + ..() + var/man_rating = 0 + var/scan_rating = 0 + var/cap_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) + scan_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + man_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + + build_eff = man_rating + loot_eff = scan_rating + chaos_eff = cap_rating + + +/obj/machinery/paradoxrift/process() + if(!(stat & NOPOWER)) + return + else + if(prob(0.5*build_eff)) + if(prob(3*loot_eff)) + new /obj/random/greaterportalloot (src.loc) + if(prob(30/chaos_eff)) + new /obj/random/mob/interspace (src.loc) + else + return + else + new /obj/random/portalloot (src.loc) + if(prob(15/chaos_eff)) + new /obj/random/mob/interspace (src.loc) + else + return + else + return + + +/obj/random/portalloot + name = "Random Portal Loot" + desc = "This is a random goodie from the void." + icon_state = "medicalkit" + +/obj/random/portalloot/item_to_spawn() + return pick(prob(6);/obj/item/weapon/stock_parts/capacitor/omni, + prob(6);/obj/item/weapon/stock_parts/manipulator/omni, + prob(6);/obj/item/weapon/stock_parts/scanning_module/omni, + prob(6);/obj/item/weapon/stock_parts/matter_bin/omni, + prob(6);/obj/item/weapon/stock_parts/micro_laser/omni, + prob(6);/obj/item/stack/material/phoron, + prob(6);/obj/item/stack/material/deuterium, + prob(6);/obj/item/stack/material/tritium, + prob(6);/obj/item/stack/material/uranium + ) + +/obj/random/greaterportalloot + name = "Random Greater Portal Loot" + desc = "This is a random goodie from the void." + icon_state = "medicalkit" + +/obj/random/greaterportalloot/item_to_spawn() + return pick(prob(2);/obj/item/weapon/stock_parts/capacitor/omni, + prob(2);/obj/item/weapon/stock_parts/manipulator/omni, + prob(2);/obj/item/weapon/stock_parts/scanning_module/omni, + prob(2);/obj/item/weapon/stock_parts/matter_bin/omni, + prob(2);/obj/item/weapon/stock_parts/micro_laser/omni, + prob(2);/obj/item/stack/material/phoron, + prob(2);/obj/item/stack/material/deuterium, + prob(2);/obj/item/stack/material/tritium, + prob(2);/obj/item/stack/material/uranium, + prob(6);/obj/item/weapon/rcd, + prob(6);/obj/item/weapon/rcd/shipwright, + prob(6);/obj/item/weapon/rcd/advanced, + prob(1);/obj/vehicle/bike/random, + prob(1);/obj/vehicle/train/engine/quadbike/random, + prob(1);/obj/vehicle/bike/random, + prob(6);/obj/structure/closet/crate/secure/lootsafe/numberlock, + prob(6);/obj/structure/closet/crate/secure/loot + + ) + +/obj/random/mob/interspace + name = "Random Interspace" + desc = "This is a random mob from space or inbetween space." + icon_state = "humanoid" + + mob_faction = "demon" + mob_returns_home = 1 + mob_wander_distance = 7 + +/obj/random/mob/interspace/item_to_spawn() + return pick(prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/miner, + prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter, + prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/farmer, + prob(1);/mob/living/simple_mob/vore/bigdragon, + prob(1);/mob/living/simple_mob/humanoid/cultist/magus/rift, + prob(15);/mob/living/simple_mob/vore/demonAI, + prob(25);/mob/living/simple_mob/shadekin, + prob(25);/mob/living/simple_mob/vore/solargrub, + prob(15);/mob/living/simple_mob/vore/sect_queen, + prob(25);/mob/living/simple_mob/vore/sect_drone, + prob(25);/mob/living/simple_mob/vore/aggressive/deathclaw, + prob(25);/mob/living/simple_mob/vore/aggressive/corrupthound, + prob(15);/mob/living/simple_mob/metroid/juvenile/super, + prob(25);/mob/living/simple_mob/animal/space/carp, + prob(15);/mob/living/simple_mob/animal/space/carp/large, + prob(15);/mob/living/simple_mob/animal/space/carp/large/huge, + prob(25);/mob/living/simple_mob/animal/space/carp/puffer, + prob(25);/mob/living/simple_mob/animal/space/alien, + prob(15);/mob/living/simple_mob/animal/space/alien/sentinel, + prob(25);/mob/living/simple_mob/vore/pakkun, + prob(25);/mob/living/simple_mob/vore/scel, + prob(5);/mob/living/simple_mob/vore/vore_hostile/abyss_lurker + ) diff --git a/modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm b/modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm index c8bb3aae23..91759b53ee 100644 --- a/modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm +++ b/modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm @@ -1,337 +1,337 @@ -/obj/item/weapon/flame/lighter/supermatter - name = "Hardlight Supermatter Zippo" // Base SM Lighter - desc = "State of the Art Supermatter Lighter." - description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!" - icon = 'icons/obj/zippo_ch.dmi' - icon_state = "SMzippo" - item_state = "SMzippo" - activation_sound = 'modular_chomp/sound/items/open.ogg' - deactivation_sound = 'sound/items/zippo_off.ogg' - -/obj/item/weapon/flame/lighter/supermatter/syndismzippo - name = "Phoron Supermatter Zippo" // Syndicate SM Lighter - desc = "State of the Art Supermatter Lighter." - description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field." - icon = 'icons/obj/zippo_ch.dmi' - icon_state = "SyndiSMzippo" - item_state = "SyndiSMzippo" - activation_sound = 'modular_chomp/sound/items/open.ogg' - deactivation_sound = 'sound/items/zippo_off.ogg' - -/obj/item/weapon/flame/lighter/supermatter/expsmzippo - name = "Experimental SM Lighter" // Dangerous WIP (admin/event only ATM) - desc = "State of the Art Supermatter Lighter" - description_fluff = "A unique take originating from the zippo design, a shard of supermatter placed within lead-lined walls. Cautious, VERY DANGEROUS do NOT touch!" - icon = 'icons/obj/zippo_ch.dmi' - icon_state = "ExpSMzippo" - item_state = "ExpSMzippo" - activation_sound = 'modular_chomp/sound/items/button-open.ogg' - deactivation_sound = 'modular_chomp/sound/items/button-close.ogg' - -// safe smzippo -/obj/item/weapon/flame/lighter/supermatter/attack_self(mob/living/user) - if(!base_state) - base_state = icon_state - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - playsound(src, activation_sound, 75, 1) - if(prob(50)) - user.visible_message("[user] safely activates the [src] with a push of a button!") - else - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to excite the supermatter within the [src].") - else // Just like the cheap lighter, this time you can shock/burn yourself a little on the hardlight shield - to_chat(user, "You hurt yourself on the shielding!") - if (user.get_left_hand() == src) - user.apply_damage(1,SEARING,"l_hand") - user.apply_damage(2,ELECTROCUTE,"l_hand") - user.apply_damage(3,CLONE,"l_hand") - user.apply_damage(4,ELECTROMAG,"l_hand") - else - user.apply_damage(1,SEARING,"r_hand") - user.apply_damage(2,ELECTROCUTE,"r_hand") - user.apply_damage(3,CLONE,"r_hand") - user.apply_damage(4,ELECTROMAG,"r_hand") - user.visible_message("After a few attempts, [user] manages to activate the [src], they however sting themselves on the shielding!") - - set_light(2) - START_PROCESSING(SSobj, src) - else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - playsound(src, deactivation_sound, 75, 1) - if(istype(src, /obj/item/weapon/flame/lighter/supermatter) ) - user.visible_message("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.") - else - user.visible_message("[user] quietly shuts the [src].") - - set_light(0) - STOP_PROCESSING(SSobj, src) - return - - -/obj/item/weapon/flame/lighter/supermatter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(lit == 1) - M.IgniteMob() - add_attack_logs(user,M,"Lit on fire with [src]") - - if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) - var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if(M == user) - cig.attackby(src, user) - else - if(istype(src, /obj/item/weapon/flame/lighter/supermatter)) - cig.light("[user] whips the [name] out and holds it for [M].") - else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") - else - ..() - -/obj/item/weapon/flame/lighter/supermatter/process() - var/turf/location = get_turf(src) - if(location) - location.hotspot_expose(700, 5) - return - -// syndicate smzippo -/obj/item/weapon/flame/lighter/supermatter/syndismzippo/attack_self(mob/living/user) - if(!base_state) - base_state = icon_state - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - playsound(src, activation_sound, 75, 1) - if(prob(50)) - user.visible_message("[user] safely activates the [src] with a push of a button!") - else - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to excite the supermatter within the [src].") - else // Just like with the cheap lighter, but this time you can hurt yourself on the heated phoron field - to_chat(user, "You singe yourself on the phoron shielding the excited supermatter!") - if (user.get_left_hand() == src) - user.apply_damage(30,HALLOSS,"l_hand") - user.apply_effect(20,IRRADIATE) - user.apply_damage(5,BURN,"l_hand") - user.apply_damage(5,ELECTROCUTE,"l_hand") - else - user.apply_damage(30,HALLOSS,"r_hand") - user.apply_effect(20,IRRADIATE) - user.apply_damage(5,BURN,"r_hand") - user.apply_damage(5,ELECTROCUTE,"r_hand") - user.visible_message("After a few attempts, [user] manages to activate the [src], they however burn themselves with the heated phoron field!") - - set_light(2) - START_PROCESSING(SSobj, src) - else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - playsound(src, deactivation_sound, 75, 1) - if(istype(src, /obj/item/weapon/flame/lighter/supermatter/syndismzippo) ) - user.visible_message("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.") - else - user.visible_message("[user] quietly shuts the [src].") - - set_light(0) - STOP_PROCESSING(SSobj, src) - return - - -/obj/item/weapon/flame/lighter/supermatter/syndismzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(lit == 1) - M.IgniteMob() - add_attack_logs(user,M,"Lit on fire with [src]") - - if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) - var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if(M == user) - cig.attackby(src, user) - else - if(istype(src, /obj/item/weapon/flame/lighter/supermatter/syndismzippo)) - cig.light("[user] whips the [name] out and holds it for [M].") - else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") - else - ..() - -/obj/item/weapon/flame/lighter/process() - var/turf/location = get_turf(src) - if(location) - location.hotspot_expose(700, 5) - return - -// Experimental smzippo -/obj/item/weapon/flame/lighter/supermatter/expsmzippo/attack_self(mob/living/user) - if (!base_state) - base_state = icon_state - if (!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - playsound(src, activation_sound, 75, 1) - var/i = rand(1, 100) - switch(i) - if(1 to 22) - to_chat("[user] safely reveals the supermatter shard within the [src]!") - user.visible_message("You safely revealed the supermatter shard within the [src]!") - if (user.get_left_hand() == src) - user.apply_damage(1, IRRADIATE, "l_hand") - else // Even using this safely will irradiate you a tiny tiny bit. - user.apply_damage(1, IRRADIATE, "r_hand") - if(23 to 33) - to_chat(user, "[user]'s hand slipped and they brush against the supermatter within [src]!") - user.visible_message("You accidentally grazed your hand across the supermatter!") - if (user.get_left_hand() == src) - user.apply_damage(10, IRRADIATE, "l_hand") - user.apply_damage(20, BURN, "l_hand") - user.apply_damage(20, ELECTROCUTE, "l_hand") - user.apply_damage(50, AGONY, "l_hand") - else // One of the outcomes will burn and shock you, the pain is the worst part of this one though. - user.apply_damage(10, IRRADIATE, "r_hand") - user.apply_damage(20, BURN, "r_hand") - user.apply_damage(20, ELECTROCUTE, "r_hand") - user.apply_damage(50, AGONY, "r_hand") - if(34 to 44) - to_chat(user, "[user] burned themselves on the [src]!") - user.visible_message("You accidentally burn yourself on the [src]!") - if (user.get_left_hand() == src) - user.apply_damage(30, IRRADIATE, "l_hand") - user.apply_damage(20, SEARING, "l_hand") - user.apply_damage(15, BURN, "l_hand") - else // One of the outcomes is pure burn and radiation. - user.apply_damage(30, IRRADIATE, "r_hand") - user.apply_damage(20, SEARING, "r_hand") - user.apply_damage(15, BURN, "r_hand") - if(45 to 55) - to_chat(user, "[user] fumbled the [src] and the supermatter let out sparks!") - user.visible_message("You fumble the [src], letting the supermatter spark as the case opens!") - if (user.get_left_hand() == src) - user.apply_damage(1, ELECTROCUTE, "l_hand") - user.apply_damage(100, ELECTROMAG, "l_hand") - else // This one is mostly dangerous to synthetics and it will EMP you. But otherwise it's safe. - user.apply_damage(1, ELECTROCUTE, "r_hand") - user.apply_damage(100, ELECTROMAG, "r_hand") - if(56 to 66) - to_chat(user, "[user] struggles to open their [src], but when they do they get burned by the extreme heat within!") - user.visible_message("You struggle to get the case to open, and when it does the heat that pours out of the [src] burns!") - if (user.get_left_hand() == src) - user.apply_damage(1, IRRADIATE, "l_hand") - user.apply_damage(1, BRUISE, "l_hand") - user.apply_damage(200, BURN, "l_hand") - user.drop_l_hand() - else // This will INSTA-DUST your hand that you're holding the item in, and then make you drop the lighter. - user.apply_damage(1, IRRADIATE, "r_hand") - user.apply_damage(1, BRUISE, "r_hand") - user.apply_damage(200, BURN, "r_hand") - user.drop_r_hand() - if(67 to 77) - to_chat(user, "Ouch! While pushing on the release to open the [src], [user]'s finger slipped right as the case opened, pressing their finger firm against the supermatter!") - user.visible_message("You accidentally pushed your finger against the supermatter!") - if (user.get_left_hand() == src) - user.apply_damage(50, HALLOSS, "l_hand") - user.apply_damage(40, IRRADIATE, "l_hand") - user.apply_damage(30, BURN, "l_hand") - user.apply_damage(20, TOX, "l_hand") - user.apply_damage(10, ELECTROCUTE, "l_hand") - user.apply_effect(25, STUTTER) - user.apply_effect(15, SLUR) - user.apply_effect(5, STUN) - else // This one is VERY punishing, you get a ton of damage, a lot of pain, and a minor stun. Once the stun goes away you'll be stuttering for awhile as if in crit. - user.apply_damage(50, HALLOSS, "r_hand") - user.apply_damage(40, IRRADIATE, "r_hand") - user.apply_damage(30, BURN, "r_hand") - user.apply_damage(20, TOX, "r_hand") - user.apply_damage(10, ELECTROCUTE, "r_hand") - user.apply_effect(25, STUTTER) - user.apply_effect(15, SLUR) - user.apply_effect(5, STUN) - if(78 to 88) - to_chat(user, "[user] managed to pinch themselves on the case of their [src]... it could have been worse.") - user.visible_message("You manage to pinch yourself on the case!") - if (user.get_left_hand() == src) - user.apply_damage(1, CLONE, "l_hand") - user.apply_damage(1, HALLOSS, "l_hand") - else // Aside from the base, this one isn't punishing outside of giving you genetic damage. - user.apply_damage(1, CLONE, "r_hand") - user.apply_damage(1, HALLOSS, "r_hand") - if(89 to 99) - to_chat(user, "[user] opened the [src] but forgot that you aren't supposed to look at supermatter!") - user.visible_message("You find yourself looking at the supermatter for longer than you should...") - if (user.get_left_hand() == src) - user.apply_damage(15, HALLOSS, "l_hand") - user.apply_effect(5, WEAKEN) - user.apply_damage(15, IRRADIATE, "l_hand") - user.apply_effect(100, EYE_BLUR) - user.apply_effect(50, AGONY) - user.apply_damage(5, OXY) - user.eye_blurry = 10 - else // This one just blinds and blurs your screen, but otherwise doesn't actually risk harming you. Even the oxy damage heals on its own. - user.apply_damage(15, HALLOSS, "r_hand") - user.apply_effect(5, WEAKEN) - user.apply_damage(15, IRRADIATE, "l_hand") - user.apply_effect(100, EYE_BLUR) - user.apply_effect(50, AGONY) - user.apply_damage(15, OXY) - user.eye_blurry = 10 - if(100) // This is the part that makes it admin only for the moment, it spawns 500 rads from the carbon's position, and dusts the carbon instantly. It does also drop everything unlike the supermatter crystal though, so hopefully you won't lose any items if you fumble this badly! - to_chat(user, "OH NO! [user] almost dropped their live [src]! Thank goodness they caught it... by the glowing yellow crystal... oh.") - user.visible_message("You almost dropped your [src], thank goodness you caught it! By the glowing crystal within. You find your ears filled with unearthly ringing and your last thought is \"Oh, fuck.\"") - user.drop_r_hand() // To ensure the lighter is dropped <3 - user.drop_l_hand() // To ensure the lighter is dropped <3 - for(var/obj/item/e in user) - user.drop_from_inventory(e) - log_and_message_admins("[user] dusted themselves and caused massive radiation with [src]!",user) - user.dust() - var/rads = 500 - SSradiation.radiate(src, rads) - - set_light(5) - START_PROCESSING(SSobj, src) - else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - playsound(src, deactivation_sound, 75, 1) - if (istype(src, /obj/item/weapon/flame/lighter/supermatter/expsmzippo)) - user.visible_message("You hear a quiet click, as [user] closes the [src].") - else - user.visible_message("[user] quietly shuts the [src].") - - set_light(0) - STOP_PROCESSING(SSobj, src) - -/obj/item/weapon/flame/lighter/supermatter/expsmzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if (!istype(M, /mob)) - return - - if (lit == 1) - M.IgniteMob() - add_attack_logs(user, M, "Lit on fire with [src]") - - if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) - var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if (M == user) - cig.attackby(src, user) - else - if (istype(src, /obj/item/weapon/flame/lighter/supermatter/expsmzippo)) - cig.light("[user] whips the [name] out and holds it for [M].") - else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") - else - ..() - -/obj/item/weapon/flame/lighter/supermatter/expsmzippo/process() - var/turf/location = get_turf(src) - if (location) - location.hotspot_expose(700, 5) - return +/obj/item/weapon/flame/lighter/supermatter + name = "Hardlight Supermatter Zippo" // Base SM Lighter + desc = "State of the Art Supermatter Lighter." + description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!" + icon = 'icons/obj/zippo_ch.dmi' + icon_state = "SMzippo" + item_state = "SMzippo" + activation_sound = 'modular_chomp/sound/items/open.ogg' + deactivation_sound = 'sound/items/zippo_off.ogg' + +/obj/item/weapon/flame/lighter/supermatter/syndismzippo + name = "Phoron Supermatter Zippo" // Syndicate SM Lighter + desc = "State of the Art Supermatter Lighter." + description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field." + icon = 'icons/obj/zippo_ch.dmi' + icon_state = "SyndiSMzippo" + item_state = "SyndiSMzippo" + activation_sound = 'modular_chomp/sound/items/open.ogg' + deactivation_sound = 'sound/items/zippo_off.ogg' + +/obj/item/weapon/flame/lighter/supermatter/expsmzippo + name = "Experimental SM Lighter" // Dangerous WIP (admin/event only ATM) + desc = "State of the Art Supermatter Lighter" + description_fluff = "A unique take originating from the zippo design, a shard of supermatter placed within lead-lined walls. Cautious, VERY DANGEROUS do NOT touch!" + icon = 'icons/obj/zippo_ch.dmi' + icon_state = "ExpSMzippo" + item_state = "ExpSMzippo" + activation_sound = 'modular_chomp/sound/items/button-open.ogg' + deactivation_sound = 'modular_chomp/sound/items/button-close.ogg' + +// safe smzippo +/obj/item/weapon/flame/lighter/supermatter/attack_self(mob/living/user) + if(!base_state) + base_state = icon_state + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + playsound(src, activation_sound, 75, 1) + if(prob(50)) + user.visible_message("[user] safely activates the [src] with a push of a button!") + else + if(prob(95)) + user.visible_message("After a few attempts, [user] manages to excite the supermatter within the [src].") + else // Just like the cheap lighter, this time you can shock/burn yourself a little on the hardlight shield + to_chat(user, "You hurt yourself on the shielding!") + if (user.get_left_hand() == src) + user.apply_damage(1,SEARING,"l_hand") + user.apply_damage(2,ELECTROCUTE,"l_hand") + user.apply_damage(3,CLONE,"l_hand") + user.apply_damage(4,ELECTROMAG,"l_hand") + else + user.apply_damage(1,SEARING,"r_hand") + user.apply_damage(2,ELECTROCUTE,"r_hand") + user.apply_damage(3,CLONE,"r_hand") + user.apply_damage(4,ELECTROMAG,"r_hand") + user.visible_message("After a few attempts, [user] manages to activate the [src], they however sting themselves on the shielding!") + + set_light(2) + START_PROCESSING(SSobj, src) + else + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + playsound(src, deactivation_sound, 75, 1) + if(istype(src, /obj/item/weapon/flame/lighter/supermatter) ) + user.visible_message("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.") + else + user.visible_message("[user] quietly shuts the [src].") + + set_light(0) + STOP_PROCESSING(SSobj, src) + return + + +/obj/item/weapon/flame/lighter/supermatter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(lit == 1) + M.IgniteMob() + add_attack_logs(user,M,"Lit on fire with [src]") + + if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) + var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask + if(M == user) + cig.attackby(src, user) + else + if(istype(src, /obj/item/weapon/flame/lighter/supermatter)) + cig.light("[user] whips the [name] out and holds it for [M].") + else + cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") + else + ..() + +/obj/item/weapon/flame/lighter/supermatter/process() + var/turf/location = get_turf(src) + if(location) + location.hotspot_expose(700, 5) + return + +// syndicate smzippo +/obj/item/weapon/flame/lighter/supermatter/syndismzippo/attack_self(mob/living/user) + if(!base_state) + base_state = icon_state + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + playsound(src, activation_sound, 75, 1) + if(prob(50)) + user.visible_message("[user] safely activates the [src] with a push of a button!") + else + if(prob(95)) + user.visible_message("After a few attempts, [user] manages to excite the supermatter within the [src].") + else // Just like with the cheap lighter, but this time you can hurt yourself on the heated phoron field + to_chat(user, "You singe yourself on the phoron shielding the excited supermatter!") + if (user.get_left_hand() == src) + user.apply_damage(30,HALLOSS,"l_hand") + user.apply_effect(20,IRRADIATE) + user.apply_damage(5,BURN,"l_hand") + user.apply_damage(5,ELECTROCUTE,"l_hand") + else + user.apply_damage(30,HALLOSS,"r_hand") + user.apply_effect(20,IRRADIATE) + user.apply_damage(5,BURN,"r_hand") + user.apply_damage(5,ELECTROCUTE,"r_hand") + user.visible_message("After a few attempts, [user] manages to activate the [src], they however burn themselves with the heated phoron field!") + + set_light(2) + START_PROCESSING(SSobj, src) + else + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + playsound(src, deactivation_sound, 75, 1) + if(istype(src, /obj/item/weapon/flame/lighter/supermatter/syndismzippo) ) + user.visible_message("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.") + else + user.visible_message("[user] quietly shuts the [src].") + + set_light(0) + STOP_PROCESSING(SSobj, src) + return + + +/obj/item/weapon/flame/lighter/supermatter/syndismzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(lit == 1) + M.IgniteMob() + add_attack_logs(user,M,"Lit on fire with [src]") + + if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) + var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask + if(M == user) + cig.attackby(src, user) + else + if(istype(src, /obj/item/weapon/flame/lighter/supermatter/syndismzippo)) + cig.light("[user] whips the [name] out and holds it for [M].") + else + cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") + else + ..() + +/obj/item/weapon/flame/lighter/process() + var/turf/location = get_turf(src) + if(location) + location.hotspot_expose(700, 5) + return + +// Experimental smzippo +/obj/item/weapon/flame/lighter/supermatter/expsmzippo/attack_self(mob/living/user) + if (!base_state) + base_state = icon_state + if (!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + playsound(src, activation_sound, 75, 1) + var/i = rand(1, 100) + switch(i) + if(1 to 22) + to_chat("[user] safely reveals the supermatter shard within the [src]!") + user.visible_message("You safely revealed the supermatter shard within the [src]!") + if (user.get_left_hand() == src) + user.apply_damage(1, IRRADIATE, "l_hand") + else // Even using this safely will irradiate you a tiny tiny bit. + user.apply_damage(1, IRRADIATE, "r_hand") + if(23 to 33) + to_chat(user, "[user]'s hand slipped and they brush against the supermatter within [src]!") + user.visible_message("You accidentally grazed your hand across the supermatter!") + if (user.get_left_hand() == src) + user.apply_damage(10, IRRADIATE, "l_hand") + user.apply_damage(20, BURN, "l_hand") + user.apply_damage(20, ELECTROCUTE, "l_hand") + user.apply_damage(50, AGONY, "l_hand") + else // One of the outcomes will burn and shock you, the pain is the worst part of this one though. + user.apply_damage(10, IRRADIATE, "r_hand") + user.apply_damage(20, BURN, "r_hand") + user.apply_damage(20, ELECTROCUTE, "r_hand") + user.apply_damage(50, AGONY, "r_hand") + if(34 to 44) + to_chat(user, "[user] burned themselves on the [src]!") + user.visible_message("You accidentally burn yourself on the [src]!") + if (user.get_left_hand() == src) + user.apply_damage(30, IRRADIATE, "l_hand") + user.apply_damage(20, SEARING, "l_hand") + user.apply_damage(15, BURN, "l_hand") + else // One of the outcomes is pure burn and radiation. + user.apply_damage(30, IRRADIATE, "r_hand") + user.apply_damage(20, SEARING, "r_hand") + user.apply_damage(15, BURN, "r_hand") + if(45 to 55) + to_chat(user, "[user] fumbled the [src] and the supermatter let out sparks!") + user.visible_message("You fumble the [src], letting the supermatter spark as the case opens!") + if (user.get_left_hand() == src) + user.apply_damage(1, ELECTROCUTE, "l_hand") + user.apply_damage(100, ELECTROMAG, "l_hand") + else // This one is mostly dangerous to synthetics and it will EMP you. But otherwise it's safe. + user.apply_damage(1, ELECTROCUTE, "r_hand") + user.apply_damage(100, ELECTROMAG, "r_hand") + if(56 to 66) + to_chat(user, "[user] struggles to open their [src], but when they do they get burned by the extreme heat within!") + user.visible_message("You struggle to get the case to open, and when it does the heat that pours out of the [src] burns!") + if (user.get_left_hand() == src) + user.apply_damage(1, IRRADIATE, "l_hand") + user.apply_damage(1, BRUISE, "l_hand") + user.apply_damage(200, BURN, "l_hand") + user.drop_l_hand() + else // This will INSTA-DUST your hand that you're holding the item in, and then make you drop the lighter. + user.apply_damage(1, IRRADIATE, "r_hand") + user.apply_damage(1, BRUISE, "r_hand") + user.apply_damage(200, BURN, "r_hand") + user.drop_r_hand() + if(67 to 77) + to_chat(user, "Ouch! While pushing on the release to open the [src], [user]'s finger slipped right as the case opened, pressing their finger firm against the supermatter!") + user.visible_message("You accidentally pushed your finger against the supermatter!") + if (user.get_left_hand() == src) + user.apply_damage(50, HALLOSS, "l_hand") + user.apply_damage(40, IRRADIATE, "l_hand") + user.apply_damage(30, BURN, "l_hand") + user.apply_damage(20, TOX, "l_hand") + user.apply_damage(10, ELECTROCUTE, "l_hand") + user.apply_effect(25, STUTTER) + user.apply_effect(15, SLUR) + user.apply_effect(5, STUN) + else // This one is VERY punishing, you get a ton of damage, a lot of pain, and a minor stun. Once the stun goes away you'll be stuttering for awhile as if in crit. + user.apply_damage(50, HALLOSS, "r_hand") + user.apply_damage(40, IRRADIATE, "r_hand") + user.apply_damage(30, BURN, "r_hand") + user.apply_damage(20, TOX, "r_hand") + user.apply_damage(10, ELECTROCUTE, "r_hand") + user.apply_effect(25, STUTTER) + user.apply_effect(15, SLUR) + user.apply_effect(5, STUN) + if(78 to 88) + to_chat(user, "[user] managed to pinch themselves on the case of their [src]... it could have been worse.") + user.visible_message("You manage to pinch yourself on the case!") + if (user.get_left_hand() == src) + user.apply_damage(1, CLONE, "l_hand") + user.apply_damage(1, HALLOSS, "l_hand") + else // Aside from the base, this one isn't punishing outside of giving you genetic damage. + user.apply_damage(1, CLONE, "r_hand") + user.apply_damage(1, HALLOSS, "r_hand") + if(89 to 99) + to_chat(user, "[user] opened the [src] but forgot that you aren't supposed to look at supermatter!") + user.visible_message("You find yourself looking at the supermatter for longer than you should...") + if (user.get_left_hand() == src) + user.apply_damage(15, HALLOSS, "l_hand") + user.apply_effect(5, WEAKEN) + user.apply_damage(15, IRRADIATE, "l_hand") + user.apply_effect(100, EYE_BLUR) + user.apply_effect(50, AGONY) + user.apply_damage(5, OXY) + user.eye_blurry = 10 + else // This one just blinds and blurs your screen, but otherwise doesn't actually risk harming you. Even the oxy damage heals on its own. + user.apply_damage(15, HALLOSS, "r_hand") + user.apply_effect(5, WEAKEN) + user.apply_damage(15, IRRADIATE, "l_hand") + user.apply_effect(100, EYE_BLUR) + user.apply_effect(50, AGONY) + user.apply_damage(15, OXY) + user.eye_blurry = 10 + if(100) // This is the part that makes it admin only for the moment, it spawns 500 rads from the carbon's position, and dusts the carbon instantly. It does also drop everything unlike the supermatter crystal though, so hopefully you won't lose any items if you fumble this badly! + to_chat(user, "OH NO! [user] almost dropped their live [src]! Thank goodness they caught it... by the glowing yellow crystal... oh.") + user.visible_message("You almost dropped your [src], thank goodness you caught it! By the glowing crystal within. You find your ears filled with unearthly ringing and your last thought is \"Oh, fuck.\"") + user.drop_r_hand() // To ensure the lighter is dropped <3 + user.drop_l_hand() // To ensure the lighter is dropped <3 + for(var/obj/item/e in user) + user.drop_from_inventory(e) + log_and_message_admins("[user] dusted themselves and caused massive radiation with [src]!",user) + user.dust() + var/rads = 500 + SSradiation.radiate(src, rads) + + set_light(5) + START_PROCESSING(SSobj, src) + else + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + playsound(src, deactivation_sound, 75, 1) + if (istype(src, /obj/item/weapon/flame/lighter/supermatter/expsmzippo)) + user.visible_message("You hear a quiet click, as [user] closes the [src].") + else + user.visible_message("[user] quietly shuts the [src].") + + set_light(0) + STOP_PROCESSING(SSobj, src) + +/obj/item/weapon/flame/lighter/supermatter/expsmzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if (!istype(M, /mob)) + return + + if (lit == 1) + M.IgniteMob() + add_attack_logs(user, M, "Lit on fire with [src]") + + if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) + var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask + if (M == user) + cig.attackby(src, user) + else + if (istype(src, /obj/item/weapon/flame/lighter/supermatter/expsmzippo)) + cig.light("[user] whips the [name] out and holds it for [M].") + else + cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") + else + ..() + +/obj/item/weapon/flame/lighter/supermatter/expsmzippo/process() + var/turf/location = get_turf(src) + if (location) + location.hotspot_expose(700, 5) + return diff --git a/modular_chomp/code/game/objects/items/weapons/storage/firstaid.dm b/modular_chomp/code/game/objects/items/weapons/storage/firstaid.dm index 9c86f4f7c1..96bd18421d 100644 --- a/modular_chomp/code/game/objects/items/weapons/storage/firstaid.dm +++ b/modular_chomp/code/game/objects/items/weapons/storage/firstaid.dm @@ -1,133 +1,133 @@ -/obj/item/weapon/storage/firstaid/experimental - name = "experimental firstaid kit" - icon = 'modular_chomp/icons/obj/storage.dmi' - icon_state = "expirmentalaid" - starts_with = list( - /obj/item/weapon/storage/pill_bottle/neotane, - /obj/item/weapon/storage/pill_bottle/burncard, - /obj/item/weapon/storage/pill_bottle/flamecure, - /obj/item/weapon/storage/pill_bottle/juggernog, - /obj/item/weapon/storage/pill_bottle/curea, - /obj/item/weapon/storage/pill_bottle/souldew, - /obj/item/weapon/storage/pill_bottle/purifyingagent) - - -/obj/item/weapon/storage/pill_bottle/neotane - name = "pill bottle (neo kelotane)" - desc = "Contains experimental pills, good for soothing burns but tends to mangle the flesh." - starts_with = list(/obj/item/weapon/reagent_containers/pill/neotane = 7) - wrapper_color = COLOR_ORANGE - -/obj/item/weapon/storage/pill_bottle/burncard - name = "pill bottle (burning bicard)" - desc = "Contains experimental pills, good for sealing cuts and bruises but is quite searing." - starts_with = list(/obj/item/weapon/reagent_containers/pill/burncard = 7) - wrapper_color = COLOR_RED - -/obj/item/weapon/storage/pill_bottle/flamecure - name = "pill bottle (Flame Cure)" - desc = "Contains experimental pills, good for searing shut internal wounds." - starts_with = list(/obj/item/weapon/reagent_containers/pill/flamecure = 7) - wrapper_color = COLOR_ORANGE - -/obj/item/weapon/storage/pill_bottle/juggernog - name = "pill bottle (juggernog)" - desc = "Contains experimental pills good for letting folks keep standing underneath relentless pummeling." - starts_with = list(/obj/item/weapon/reagent_containers/pill/juggernog = 7) - wrapper_color = COLOR_RED - -/obj/item/weapon/storage/pill_bottle/curea - name = "pill bottle (curea)" - desc = "Contains experimental pills, very effective for frostfly and poisonfly hunting." - starts_with = list(/obj/item/weapon/reagent_containers/pill/curea = 7) - wrapper_color = COLOR_BLUE - -/obj/item/weapon/storage/pill_bottle/souldew - name = "pill bottle (soul dew)" - desc = "Contains experimental pills, for feeding the dead." - starts_with = list(/obj/item/weapon/reagent_containers/pill/souldew = 7) - wrapper_color = COLOR_GREEN - -/obj/item/weapon/storage/pill_bottle/purifyingagent - - name = "pill bottle (purifying agent)" - - desc = "Contains experimental pills, having application as an anti-toxin." - starts_with = list(/obj/item/weapon/reagent_containers/pill/purifyingagent = 7) - - wrapper_color = COLOR_GREEN - -//Pills -/obj/item/weapon/reagent_containers/pill/neotane - name = "Neo Kelotane (10u)" - desc = "An experimental pill." - - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/neotane/Initialize() - . = ..() - reagents.add_reagent("neotane", 10) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/burncard - name = "Burning Bicard (10u)" - desc = "An experimental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/burncard/Initialize() - . = ..() - reagents.add_reagent("burncard", 10) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/flamecure - name = "Flame Cure (5u)" - desc = "An experimental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/flamecure/Initialize() - . = ..() - reagents.add_reagent("flamecure", 5) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/juggernog - name = "Juggernog (5u)" - desc = "An experimental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/juggernog/Initialize() - . = ..() - reagents.add_reagent("juggernog", 5) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/curea - name = "Curea (10u)" - desc = "An experimental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/curea/Initialize() - . = ..() - reagents.add_reagent("curea", 10) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/souldew - name = "Souldew (10u)" - desc = "An experimental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/souldew/Initialize() - . = ..() - reagents.add_reagent("souldew", 10) - color = reagents.get_color() - -/obj/item/weapon/reagent_containers/pill/purifyingagent - name = "Purifying Agent (10u)" - - desc = "An expirmental pill." - icon_state = "pill2" - -/obj/item/weapon/reagent_containers/pill/purifyingagent/Initialize() - - . = ..() - reagents.add_reagent("purifyingagent", 10) - +/obj/item/weapon/storage/firstaid/experimental + name = "experimental firstaid kit" + icon = 'modular_chomp/icons/obj/storage.dmi' + icon_state = "expirmentalaid" + starts_with = list( + /obj/item/weapon/storage/pill_bottle/neotane, + /obj/item/weapon/storage/pill_bottle/burncard, + /obj/item/weapon/storage/pill_bottle/flamecure, + /obj/item/weapon/storage/pill_bottle/juggernog, + /obj/item/weapon/storage/pill_bottle/curea, + /obj/item/weapon/storage/pill_bottle/souldew, + /obj/item/weapon/storage/pill_bottle/purifyingagent) + + +/obj/item/weapon/storage/pill_bottle/neotane + name = "pill bottle (neo kelotane)" + desc = "Contains experimental pills, good for soothing burns but tends to mangle the flesh." + starts_with = list(/obj/item/weapon/reagent_containers/pill/neotane = 7) + wrapper_color = COLOR_ORANGE + +/obj/item/weapon/storage/pill_bottle/burncard + name = "pill bottle (burning bicard)" + desc = "Contains experimental pills, good for sealing cuts and bruises but is quite searing." + starts_with = list(/obj/item/weapon/reagent_containers/pill/burncard = 7) + wrapper_color = COLOR_RED + +/obj/item/weapon/storage/pill_bottle/flamecure + name = "pill bottle (Flame Cure)" + desc = "Contains experimental pills, good for searing shut internal wounds." + starts_with = list(/obj/item/weapon/reagent_containers/pill/flamecure = 7) + wrapper_color = COLOR_ORANGE + +/obj/item/weapon/storage/pill_bottle/juggernog + name = "pill bottle (juggernog)" + desc = "Contains experimental pills good for letting folks keep standing underneath relentless pummeling." + starts_with = list(/obj/item/weapon/reagent_containers/pill/juggernog = 7) + wrapper_color = COLOR_RED + +/obj/item/weapon/storage/pill_bottle/curea + name = "pill bottle (curea)" + desc = "Contains experimental pills, very effective for frostfly and poisonfly hunting." + starts_with = list(/obj/item/weapon/reagent_containers/pill/curea = 7) + wrapper_color = COLOR_BLUE + +/obj/item/weapon/storage/pill_bottle/souldew + name = "pill bottle (soul dew)" + desc = "Contains experimental pills, for feeding the dead." + starts_with = list(/obj/item/weapon/reagent_containers/pill/souldew = 7) + wrapper_color = COLOR_GREEN + +/obj/item/weapon/storage/pill_bottle/purifyingagent + + name = "pill bottle (purifying agent)" + + desc = "Contains experimental pills, having application as an anti-toxin." + starts_with = list(/obj/item/weapon/reagent_containers/pill/purifyingagent = 7) + + wrapper_color = COLOR_GREEN + +//Pills +/obj/item/weapon/reagent_containers/pill/neotane + name = "Neo Kelotane (10u)" + desc = "An experimental pill." + + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/neotane/Initialize() + . = ..() + reagents.add_reagent("neotane", 10) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/burncard + name = "Burning Bicard (10u)" + desc = "An experimental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/burncard/Initialize() + . = ..() + reagents.add_reagent("burncard", 10) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/flamecure + name = "Flame Cure (5u)" + desc = "An experimental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/flamecure/Initialize() + . = ..() + reagents.add_reagent("flamecure", 5) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/juggernog + name = "Juggernog (5u)" + desc = "An experimental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/juggernog/Initialize() + . = ..() + reagents.add_reagent("juggernog", 5) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/curea + name = "Curea (10u)" + desc = "An experimental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/curea/Initialize() + . = ..() + reagents.add_reagent("curea", 10) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/souldew + name = "Souldew (10u)" + desc = "An experimental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/souldew/Initialize() + . = ..() + reagents.add_reagent("souldew", 10) + color = reagents.get_color() + +/obj/item/weapon/reagent_containers/pill/purifyingagent + name = "Purifying Agent (10u)" + + desc = "An expirmental pill." + icon_state = "pill2" + +/obj/item/weapon/reagent_containers/pill/purifyingagent/Initialize() + + . = ..() + reagents.add_reagent("purifyingagent", 10) + color = reagents.get_color() \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_general.dm b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_general.dm index c19394a5b9..708eb89b54 100644 --- a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -1,7 +1,7 @@ -/datum/gear/plushieteshcolor - display_name = "plushie, lifelike teshari, colorable" - path = /obj/item/toy/plushie/teshari/w_yw - -/datum/gear/plushieteshcolor/New() - ..() +/datum/gear/plushieteshcolor + display_name = "plushie, lifelike teshari, colorable" + path = /obj/item/toy/plushie/teshari/w_yw + +/datum/gear/plushieteshcolor/New() + ..() gear_tweaks += gear_tweak_free_color_choice \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm index 48fb1646b3..cb2493b72a 100644 --- a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm +++ b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -1,12 +1,12 @@ -/datum/gear/shoes/mech_shoes - display_name = "mech shoes selection" - path = /obj/item/clothing/shoes/mech_shoes - cost = 1 - -/datum/gear/shoes/mech_shoes/New() - ..() - var/list/mechshoes = list( - "heavy mech shoes" = /obj/item/clothing/shoes/mech_shoes, - "light mech shoes" = /obj/item/clothing/shoes/mech_shoes/light - ) +/datum/gear/shoes/mech_shoes + display_name = "mech shoes selection" + path = /obj/item/clothing/shoes/mech_shoes + cost = 1 + +/datum/gear/shoes/mech_shoes/New() + ..() + var/list/mechshoes = list( + "heavy mech shoes" = /obj/item/clothing/shoes/mech_shoes, + "light mech shoes" = /obj/item/clothing/shoes/mech_shoes/light + ) gear_tweaks += new/datum/gear_tweak/path(mechshoes) \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm index 12a952c5cd..f150befdcc 100644 --- a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -1,28 +1,28 @@ -/datum/gear/suit/pcarrier // No protection until inserted with plates, purely for cosmetic purposes. - display_name = "Plate Carrier selection (Security/Exploration)" - path = /obj/item/clothing/suit/armor/pcarrier - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Pathfinder", "Field Medic", "Pilot", "Explorer") - cost = 2 - -/datum/gear/suit/pcarrier/New() - ..() - var/list/pcarriers = list( - "Black Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier, - "Navy Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/navy, - "Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/blue, - "Light Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/press, - "Green Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/green, - "Tan Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/tan - ) - gear_tweaks += new/datum/gear_tweak/path(pcarriers) - - -/datum/gear/suit/winterhood - display_name = "Winter Hood" - path = /obj/item/clothing/head/hood/winter - cost = 0 - -/datum/gear/suit/martianminer - display_name = "Martian Miner Coat" - path = /obj/item/clothing/suit/storage/vest/martian_miner/unarmored +/datum/gear/suit/pcarrier // No protection until inserted with plates, purely for cosmetic purposes. + display_name = "Plate Carrier selection (Security/Exploration)" + path = /obj/item/clothing/suit/armor/pcarrier + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Pathfinder", "Field Medic", "Pilot", "Explorer") + cost = 2 + +/datum/gear/suit/pcarrier/New() + ..() + var/list/pcarriers = list( + "Black Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier, + "Navy Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/navy, + "Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/blue, + "Light Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/press, + "Green Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/green, + "Tan Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/tan + ) + gear_tweaks += new/datum/gear_tweak/path(pcarriers) + + +/datum/gear/suit/winterhood + display_name = "Winter Hood" + path = /obj/item/clothing/head/hood/winter + cost = 0 + +/datum/gear/suit/martianminer + display_name = "Martian Miner Coat" + path = /obj/item/clothing/suit/storage/vest/martian_miner/unarmored cost = 1 \ No newline at end of file diff --git a/modular_chomp/code/modules/clothing/gateway/gateway.dm b/modular_chomp/code/modules/clothing/gateway/gateway.dm index c48e9d657d..63492ec200 100644 --- a/modular_chomp/code/modules/clothing/gateway/gateway.dm +++ b/modular_chomp/code/modules/clothing/gateway/gateway.dm @@ -1,193 +1,193 @@ -//vr section -/obj/item/clothing/head/vrwizard - name = "wizard hat" - desc = "A pointy pixelated-looking hat, 0s and 1s dancing off the fabric" - icon_state = "redwizard" - armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50) - siemens_coefficient = 0.1 - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 * ONE_ATMOSPHERE - max_pressure_protection = 3 * ONE_ATMOSPHERE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - - -/obj/item/clothing/suit/vrwizard - name = "wizard robes" - desc = "A silky robe with 0s and 1s flying off the seams." - icon_state = "redwizard" - armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50) - siemens_coefficient = 0.1 - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 * ONE_ATMOSPHERE - max_pressure_protection = 3 * ONE_ATMOSPHERE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) - -/obj/item/clothing/head/darkvrwizard - name = "wizard hat" - desc = "The hat holding the most attack and defense" - icon_state = "redwizard" - color = "#660066" - armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70) - siemens_coefficient = 0.1 - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 * ONE_ATMOSPHERE - max_pressure_protection = 3 * ONE_ATMOSPHERE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - - -/obj/item/clothing/suit/darkvrwizard - name = "wizard robes" - desc = "Robes holding the most attack and defense." - icon_state = "psyamp" - armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70) - siemens_coefficient = 0.1 - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 * ONE_ATMOSPHERE - max_pressure_protection = 3 * ONE_ATMOSPHERE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) - -//Candy section -/obj/item/clothing/head/psy_crown/candycrown - name = "candy crown" - desc = "A crown smelling oddly sweet" - description_info = "It will occasionally give a momentary buff to offensive capablities." - icon_state = "wrathcrown" - cooldown_duration = 1 MINUTES // How long the cooldown should be. - brainloss_cost = 0 - armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/head/psy_crown/candycrown/activate_ability(var/mob/living/wearer) - ..() - wearer.add_modifier(/datum/modifier/aura/candy_orange, 30 SECONDS) - -/obj/item/clothing/gloves/stamina - name = "gloves of stamina" - desc = "A strange pair of gloves." - description_info = "It has a strange property of restoring hunger." - icon_state = "regen" - item_state = "graygloves" - siemens_coefficient = 0 - armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/gloves/stamina/equipped(var/mob/living/carbon/human/H) - if(H && H.gloves == src) - wearer = H - if(wearer.can_feel_pain()) - to_chat(H, "You feel strange as hunger vanishes!") - wearer.custom_pain("Your hands feel strange!",1) - ..() - -/obj/item/clothing/gloves/stamina/dropped(var/mob/living/carbon/human/H) - ..() - if(wearer) - if(wearer.can_feel_pain()) - to_chat(wearer, "You feel hungry!") - wearer.custom_pain("Your hands feel strange",1) - wearer = null - -/obj/item/clothing/gloves/stamina/New() - START_PROCESSING(SSobj, src) - ..() - -/obj/item/clothing/gloves/stamina/Destroy() - wearer = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/gloves/stamina/process() - if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD) - return // Robots and dead people don't have a metabolism. - wearer.nutrition = max(wearer.nutrition + 8, 0) - -/obj/item/clothing/suit/armor/buffvest - name = "candy armor" - desc = "A really strange armor made of a similar substance as the creatures near it." - icon_state = "armor" - blood_overlay_type = "armor" - armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) - var/tension_threshold = 125 - var/cooldown = null // world.time of when this was last triggered. - var/cooldown_duration = 3 MINUTES // How long the cooldown should be. - var/flavor_equip = null // Message displayed to someone who puts this on their head. Drones don't get a message. - var/flavor_unequip = null // Ditto, but for taking it off. - var/flavor_drop = null // Ditto, but for dropping it. - var/flavor_activate = null // Ditto, for but activating. - var/brainloss_cost = 0 - -/obj/item/clothing/suit/armor/buffvest/proc/activate_ability(var/mob/living/wearer) - cooldown = world.time + cooldown_duration - to_chat(wearer, flavor_activate) - to_chat(wearer, "The inside of your head hurts...") - wearer.adjustBrainLoss(brainloss_cost) - wearer.add_modifier(/datum/modifier/aura/candy_blue, 30 SECONDS) - -/obj/item/clothing/suit/armor/buffvest/equipped(var/mob/living/carbon/human/H) - ..() - if(istype(H) && H.head == src && H.is_sentient()) - START_PROCESSING(SSobj, src) - to_chat(H, flavor_equip) - -/obj/item/clothing/suit/armor/buffvest/dropped(var/mob/living/carbon/human/H) - ..() - STOP_PROCESSING(SSobj, src) - if(H.is_sentient()) - if(loc == H) // Still inhand. - to_chat(H, flavor_unequip) - else - to_chat(H, flavor_drop) - -/obj/item/clothing/suit/armor/buffvest/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/armor/buffvest/process() - if(isliving(loc)) - var/mob/living/L = loc - if(world.time >= cooldown && L.is_sentient() && L.get_tension() >= tension_threshold) - activate_ability(L) - -//vistor section -/obj/item/clothing/suit/armor/alien/vistor - name = "rocky suit" - desc = "A strange set of armor made of rocky plates" - description_info = "It always reduces all damage by the same amount, with a 12% chance to block." - icon_state = "alien_tank" - slowdown = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - armorsoak = list( melee = 12, bullet = 12,laser = 12, energy = 12 , bomb = 0, bio = 0, rad = 0) - block_chance = 12 - -/obj/item/clothing/suit/armor/tesla/vistor - name = "zapping suit" - desc = "A strange set of armor crackling with lighting" - slowdown = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/suit/armor/reactive/vistor - name = "vibrating suit" - desc = "A strange set of armor that crackles with energy" - icon_state = "reactiveoff" - slowdown = 0 - armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/suit/armor/protectionbubble - name = "protective bubble" - desc = "A strange set of armor that seems to coat your entire body in a thing protective bubble" - icon_state = "armor" - blood_overlay_type = "armor" - armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 100, rad = 75) - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 * ONE_ATMOSPHERE - max_pressure_protection = 15 * ONE_ATMOSPHERE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - +//vr section +/obj/item/clothing/head/vrwizard + name = "wizard hat" + desc = "A pointy pixelated-looking hat, 0s and 1s dancing off the fabric" + icon_state = "redwizard" + armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50) + siemens_coefficient = 0.1 + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + min_pressure_protection = 0 * ONE_ATMOSPHERE + max_pressure_protection = 3 * ONE_ATMOSPHERE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + + +/obj/item/clothing/suit/vrwizard + name = "wizard robes" + desc = "A silky robe with 0s and 1s flying off the seams." + icon_state = "redwizard" + armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50) + siemens_coefficient = 0.1 + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + min_pressure_protection = 0 * ONE_ATMOSPHERE + max_pressure_protection = 3 * ONE_ATMOSPHERE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) + +/obj/item/clothing/head/darkvrwizard + name = "wizard hat" + desc = "The hat holding the most attack and defense" + icon_state = "redwizard" + color = "#660066" + armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70) + siemens_coefficient = 0.1 + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE + min_pressure_protection = 0 * ONE_ATMOSPHERE + max_pressure_protection = 3 * ONE_ATMOSPHERE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + + +/obj/item/clothing/suit/darkvrwizard + name = "wizard robes" + desc = "Robes holding the most attack and defense." + icon_state = "psyamp" + armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70) + siemens_coefficient = 0.1 + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + min_pressure_protection = 0 * ONE_ATMOSPHERE + max_pressure_protection = 3 * ONE_ATMOSPHERE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen) + +//Candy section +/obj/item/clothing/head/psy_crown/candycrown + name = "candy crown" + desc = "A crown smelling oddly sweet" + description_info = "It will occasionally give a momentary buff to offensive capablities." + icon_state = "wrathcrown" + cooldown_duration = 1 MINUTES // How long the cooldown should be. + brainloss_cost = 0 + armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/head/psy_crown/candycrown/activate_ability(var/mob/living/wearer) + ..() + wearer.add_modifier(/datum/modifier/aura/candy_orange, 30 SECONDS) + +/obj/item/clothing/gloves/stamina + name = "gloves of stamina" + desc = "A strange pair of gloves." + description_info = "It has a strange property of restoring hunger." + icon_state = "regen" + item_state = "graygloves" + siemens_coefficient = 0 + armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/stamina/equipped(var/mob/living/carbon/human/H) + if(H && H.gloves == src) + wearer = H + if(wearer.can_feel_pain()) + to_chat(H, "You feel strange as hunger vanishes!") + wearer.custom_pain("Your hands feel strange!",1) + ..() + +/obj/item/clothing/gloves/stamina/dropped(var/mob/living/carbon/human/H) + ..() + if(wearer) + if(wearer.can_feel_pain()) + to_chat(wearer, "You feel hungry!") + wearer.custom_pain("Your hands feel strange",1) + wearer = null + +/obj/item/clothing/gloves/stamina/New() + START_PROCESSING(SSobj, src) + ..() + +/obj/item/clothing/gloves/stamina/Destroy() + wearer = null + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/clothing/gloves/stamina/process() + if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD) + return // Robots and dead people don't have a metabolism. + wearer.nutrition = max(wearer.nutrition + 8, 0) + +/obj/item/clothing/suit/armor/buffvest + name = "candy armor" + desc = "A really strange armor made of a similar substance as the creatures near it." + icon_state = "armor" + blood_overlay_type = "armor" + armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) + var/tension_threshold = 125 + var/cooldown = null // world.time of when this was last triggered. + var/cooldown_duration = 3 MINUTES // How long the cooldown should be. + var/flavor_equip = null // Message displayed to someone who puts this on their head. Drones don't get a message. + var/flavor_unequip = null // Ditto, but for taking it off. + var/flavor_drop = null // Ditto, but for dropping it. + var/flavor_activate = null // Ditto, for but activating. + var/brainloss_cost = 0 + +/obj/item/clothing/suit/armor/buffvest/proc/activate_ability(var/mob/living/wearer) + cooldown = world.time + cooldown_duration + to_chat(wearer, flavor_activate) + to_chat(wearer, "The inside of your head hurts...") + wearer.adjustBrainLoss(brainloss_cost) + wearer.add_modifier(/datum/modifier/aura/candy_blue, 30 SECONDS) + +/obj/item/clothing/suit/armor/buffvest/equipped(var/mob/living/carbon/human/H) + ..() + if(istype(H) && H.head == src && H.is_sentient()) + START_PROCESSING(SSobj, src) + to_chat(H, flavor_equip) + +/obj/item/clothing/suit/armor/buffvest/dropped(var/mob/living/carbon/human/H) + ..() + STOP_PROCESSING(SSobj, src) + if(H.is_sentient()) + if(loc == H) // Still inhand. + to_chat(H, flavor_unequip) + else + to_chat(H, flavor_drop) + +/obj/item/clothing/suit/armor/buffvest/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/clothing/suit/armor/buffvest/process() + if(isliving(loc)) + var/mob/living/L = loc + if(world.time >= cooldown && L.is_sentient() && L.get_tension() >= tension_threshold) + activate_ability(L) + +//vistor section +/obj/item/clothing/suit/armor/alien/vistor + name = "rocky suit" + desc = "A strange set of armor made of rocky plates" + description_info = "It always reduces all damage by the same amount, with a 12% chance to block." + icon_state = "alien_tank" + slowdown = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + armorsoak = list( melee = 12, bullet = 12,laser = 12, energy = 12 , bomb = 0, bio = 0, rad = 0) + block_chance = 12 + +/obj/item/clothing/suit/armor/tesla/vistor + name = "zapping suit" + desc = "A strange set of armor crackling with lighting" + slowdown = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/reactive/vistor + name = "vibrating suit" + desc = "A strange set of armor that crackles with energy" + icon_state = "reactiveoff" + slowdown = 0 + armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/protectionbubble + name = "protective bubble" + desc = "A strange set of armor that seems to coat your entire body in a thing protective bubble" + icon_state = "armor" + blood_overlay_type = "armor" + armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 100, rad = 75) + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + min_pressure_protection = 0 * ONE_ATMOSPHERE + max_pressure_protection = 15 * ONE_ATMOSPHERE + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + //scrap section which is on hold till I get foes \ No newline at end of file diff --git a/modular_chomp/code/modules/clothing/spacesuits/rig/.behemoth.dm b/modular_chomp/code/modules/clothing/spacesuits/rig/.behemoth.dm index 576717595e..c9da2a6a3d 100644 --- a/modular_chomp/code/modules/clothing/spacesuits/rig/.behemoth.dm +++ b/modular_chomp/code/modules/clothing/spacesuits/rig/.behemoth.dm @@ -1,137 +1,137 @@ -/obj/item/weapon/rig/ch/aegis - name = "aegis control module" - desc = "A hefty armor formed from fallen redspace construct." - suit_type = "aegis hardsuit" - icon = 'modular_chomp/icons/obj/rig_modules_ch.dmi' - icon_state = "aegis_rig" - armor = list(melee = 60, bullet = 60, laser = 60, energy = 30, bomb = 10, bio = 100, rad = 100) - - slowdown = 6 - - chest_type = /obj/item/clothing/suit/space/rig/ch/aegis - helm_type = /obj/item/clothing/head/helmet/space/rig/ch/aegis - glove_type = /obj/item/clothing/gloves/gauntlets/rig/ch/aegis - boot_type = /obj/item/clothing/shoes/magboots/rig/ch/aegis - -/obj/item/clothing/suit/space/rig/ch/aegis - name = "chassis" - icon = 'icons/obj/clothing/spacesuits_ch.dmi' - desc = "A heft chestplate, humming with energy." - -/obj/item/clothing/head/helmet/space/rig/ch/aegis - name = "helmet" - icon = 'icons/obj/clothing/hats_ch.dmi' - desc = "A protective dome for your head." - -/obj/item/clothing/gloves/gauntlets/rig/ch/aegis - name = "hardlight gloves" - icon = 'icons/obj/clothing/gloves_ch.dmi' - desc = "Gloves created with alien tech" - var/block_chance = 15 - -/obj/item/clothing/shoes/magboots/rig/ch/aegis - name = "hardlight boots" - icon = 'icons/obj/clothing/shoes_ch.dmi' - desc = "A pair of grabby boots" - -/obj/item/weapon/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 70 - round(P.damage) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - -/obj/item/clothing/suit/space/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 70 - round(P.damage) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - -/obj/item/clothing/head/helmet/space/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 70 - round(P.damage) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - - -/obj/item/clothing/gloves/gauntlets/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 70 - round(P.damage) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - - -/obj/item/clothing/shoes/magboots/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 70 - round(P.damage) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - +/obj/item/weapon/rig/ch/aegis + name = "aegis control module" + desc = "A hefty armor formed from fallen redspace construct." + suit_type = "aegis hardsuit" + icon = 'modular_chomp/icons/obj/rig_modules_ch.dmi' + icon_state = "aegis_rig" + armor = list(melee = 60, bullet = 60, laser = 60, energy = 30, bomb = 10, bio = 100, rad = 100) + + slowdown = 6 + + chest_type = /obj/item/clothing/suit/space/rig/ch/aegis + helm_type = /obj/item/clothing/head/helmet/space/rig/ch/aegis + glove_type = /obj/item/clothing/gloves/gauntlets/rig/ch/aegis + boot_type = /obj/item/clothing/shoes/magboots/rig/ch/aegis + +/obj/item/clothing/suit/space/rig/ch/aegis + name = "chassis" + icon = 'icons/obj/clothing/spacesuits_ch.dmi' + desc = "A heft chestplate, humming with energy." + +/obj/item/clothing/head/helmet/space/rig/ch/aegis + name = "helmet" + icon = 'icons/obj/clothing/hats_ch.dmi' + desc = "A protective dome for your head." + +/obj/item/clothing/gloves/gauntlets/rig/ch/aegis + name = "hardlight gloves" + icon = 'icons/obj/clothing/gloves_ch.dmi' + desc = "Gloves created with alien tech" + var/block_chance = 15 + +/obj/item/clothing/shoes/magboots/rig/ch/aegis + name = "hardlight boots" + icon = 'icons/obj/clothing/shoes_ch.dmi' + desc = "A pair of grabby boots" + +/obj/item/weapon/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 70 - round(P.damage) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + +/obj/item/clothing/suit/space/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 70 - round(P.damage) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + +/obj/item/clothing/head/helmet/space/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 70 - round(P.damage) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + + +/obj/item/clothing/gloves/gauntlets/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 70 - round(P.damage) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + + +/obj/item/clothing/shoes/magboots/rig/ch/aegis/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 70 - round(P.damage) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + return (..(P)) \ No newline at end of file diff --git a/modular_chomp/code/modules/clothing/spacesuits/rig/other.dm b/modular_chomp/code/modules/clothing/spacesuits/rig/other.dm index 0a85ee033a..df630a5789 100644 --- a/modular_chomp/code/modules/clothing/spacesuits/rig/other.dm +++ b/modular_chomp/code/modules/clothing/spacesuits/rig/other.dm @@ -1,2 +1,2 @@ -/obj/item/weapon/rig/ert/janitor +/obj/item/weapon/rig/ert/janitor req_access = null \ No newline at end of file diff --git a/modular_chomp/code/modules/clothing/spacesuits/rig/precursor.dm b/modular_chomp/code/modules/clothing/spacesuits/rig/precursor.dm index 5ed562ea57..e4d98aac62 100644 --- a/modular_chomp/code/modules/clothing/spacesuits/rig/precursor.dm +++ b/modular_chomp/code/modules/clothing/spacesuits/rig/precursor.dm @@ -1,72 +1,72 @@ -/obj/item/weapon/rig/ch/precursor - name = "xenotech hardsuit control module" - desc = "A purple hardsuit gleaming with energy and alien metals." - suit_type = "precursor hardsuit" - icon = 'modular_chomp/icons/obj/rig_modules_ch.dmi' - icon_state = "precursor_rig" - armor = list(melee = 50, bullet = 50, laser = 70, energy = 70, bomb = 60, bio = 100, rad = 80) - matter = list(MAT_PLASTEEL = 1200, MAT_GOLD = 500, MAT_GRAPHITE = 800, MAT_OSMIUM = 300, MAT_PLASTIC = 600, MAT_VERDANTIUM = 750, MAT_MORPHIUM = 2000) - var/block_chance = 15 - slowdown = 0 - - chest_type = /obj/item/clothing/suit/space/rig/ch/precursor - helm_type = /obj/item/clothing/head/helmet/space/rig/ch/precursor - glove_type = /obj/item/clothing/gloves/gauntlets/rig/ch/precursor - boot_type = /obj/item/clothing/shoes/magboots/rig/ch/precursor - - req_access = list() - req_one_access = list() - -/obj/item/clothing/suit/space/rig/ch/precursor - name = "protective vest" - icon = 'icons/obj/clothing/spacesuits_ch.dmi' - desc = "Light weight but oddly protective plating." - var/block_chance = 15 - -/obj/item/clothing/head/helmet/space/rig/ch/precursor - name = "helmet" - icon = 'icons/obj/clothing/hats_ch.dmi' - desc = "A protective dome for your head." - var/block_chance = 15 - -/obj/item/clothing/gloves/gauntlets/rig/ch/precursor - name = "gloves" - icon = 'icons/obj/clothing/gloves_ch.dmi' - desc = "Gloves created with alien tech" - var/block_chance = 15 - -/obj/item/clothing/shoes/magboots/rig/ch/precursor - name = "boots" - icon = 'icons/obj/clothing/shoes_ch.dmi' - desc = "A pair of grabby boots" - var/block_chance = 15 - -/obj/item/weapon/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(block_chance)) - user.visible_message("\The [src] completely absorbs [attack_text]!") - return TRUE - return FALSE - -/obj/item/clothing/suit/space/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(block_chance)) - user.visible_message("\The [src] completely absorbs [attack_text]!") - return TRUE - return FALSE - -/obj/item/clothing/head/helmet/space/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(block_chance)) - user.visible_message("\The [src] completely absorbs [attack_text]!") - return TRUE - return FALSE - -/obj/item/clothing/gloves/gauntlets/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(block_chance)) - user.visible_message("\The [src] completely absorbs [attack_text]!") - return TRUE - return FALSE - -/obj/item/clothing/shoes/magboots/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(block_chance)) - user.visible_message("\The [src] completely absorbs [attack_text]!") - return TRUE +/obj/item/weapon/rig/ch/precursor + name = "xenotech hardsuit control module" + desc = "A purple hardsuit gleaming with energy and alien metals." + suit_type = "precursor hardsuit" + icon = 'modular_chomp/icons/obj/rig_modules_ch.dmi' + icon_state = "precursor_rig" + armor = list(melee = 50, bullet = 50, laser = 70, energy = 70, bomb = 60, bio = 100, rad = 80) + matter = list(MAT_PLASTEEL = 1200, MAT_GOLD = 500, MAT_GRAPHITE = 800, MAT_OSMIUM = 300, MAT_PLASTIC = 600, MAT_VERDANTIUM = 750, MAT_MORPHIUM = 2000) + var/block_chance = 15 + slowdown = 0 + + chest_type = /obj/item/clothing/suit/space/rig/ch/precursor + helm_type = /obj/item/clothing/head/helmet/space/rig/ch/precursor + glove_type = /obj/item/clothing/gloves/gauntlets/rig/ch/precursor + boot_type = /obj/item/clothing/shoes/magboots/rig/ch/precursor + + req_access = list() + req_one_access = list() + +/obj/item/clothing/suit/space/rig/ch/precursor + name = "protective vest" + icon = 'icons/obj/clothing/spacesuits_ch.dmi' + desc = "Light weight but oddly protective plating." + var/block_chance = 15 + +/obj/item/clothing/head/helmet/space/rig/ch/precursor + name = "helmet" + icon = 'icons/obj/clothing/hats_ch.dmi' + desc = "A protective dome for your head." + var/block_chance = 15 + +/obj/item/clothing/gloves/gauntlets/rig/ch/precursor + name = "gloves" + icon = 'icons/obj/clothing/gloves_ch.dmi' + desc = "Gloves created with alien tech" + var/block_chance = 15 + +/obj/item/clothing/shoes/magboots/rig/ch/precursor + name = "boots" + icon = 'icons/obj/clothing/shoes_ch.dmi' + desc = "A pair of grabby boots" + var/block_chance = 15 + +/obj/item/weapon/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(prob(block_chance)) + user.visible_message("\The [src] completely absorbs [attack_text]!") + return TRUE + return FALSE + +/obj/item/clothing/suit/space/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(prob(block_chance)) + user.visible_message("\The [src] completely absorbs [attack_text]!") + return TRUE + return FALSE + +/obj/item/clothing/head/helmet/space/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(prob(block_chance)) + user.visible_message("\The [src] completely absorbs [attack_text]!") + return TRUE + return FALSE + +/obj/item/clothing/gloves/gauntlets/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(prob(block_chance)) + user.visible_message("\The [src] completely absorbs [attack_text]!") + return TRUE + return FALSE + +/obj/item/clothing/shoes/magboots/rig/ch/precursor/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(prob(block_chance)) + user.visible_message("\The [src] completely absorbs [attack_text]!") + return TRUE return FALSE \ No newline at end of file diff --git a/modular_chomp/code/modules/event/dangerinfestation.dm b/modular_chomp/code/modules/event/dangerinfestation.dm index 862995d913..27c6d9d12c 100644 --- a/modular_chomp/code/modules/event/dangerinfestation.dm +++ b/modular_chomp/code/modules/event/dangerinfestation.dm @@ -1,97 +1,97 @@ -#define LOC_RIOT 0 -#define LOC_ATMOS 1 -#define LOC_DISPOSAL 2 -#define LOC_TECH 3 -#define LOC_VAULT 4 - - -#define DANGER_CRAB 0 -#define DANGER_ICE 1 -#define DANGER_RAY 2 - -//infestation event of a diffrent variety -//meant for engineering and science to exploit -/datum/event/dangerinfestation - announceWhen = 10 - endWhen = 11 - var/location - var/locstring - var/danger - var/dangerstring - -/datum/event/dangerinfestation/start() - location = rand(0,4) - var/list/turf/simulated/floor/turfs = list() - var/spawn_area_type - switch(location) - if(LOC_RIOT) - spawn_area_type = /area/security/riot_control - locstring = "riot control" - if(LOC_ATMOS) - spawn_area_type = /area/engineering/atmos - locstring = "atmospherics" - if(LOC_DISPOSAL) - spawn_area_type = /area/maintenance/disposal - locstring = "the disposal" - if(LOC_TECH) - spawn_area_type = /area/storage/tech - locstring = "technical storage" - if(LOC_VAULT) - spawn_area_type = /area/security/nuke_storage - locstring = "the vault" - - for(var/areapath in typesof(spawn_area_type)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - //VOREStation Edit - Fixes event - var/blocked = FALSE - for(var/atom/movable/AM in F) - if(AM.density) - blocked = TRUE - if(!blocked) - turfs += F - - var/list/spawn_types = list() - var/min_number - var/max_number - danger = rand(0,2) - switch(danger) - if(DANGER_CRAB) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) - min_number = 1 - max_number = 4 - dangerstring = "crystaline crabs" - if(DANGER_ICE) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) - min_number = 1 - max_number = 4 - dangerstring = "strange entities" - - if(DANGER_RAY) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) - min_number = 1 - max_number = 4 - dangerstring = "solar rays" - - spawn(0) - var/num = rand(min_number,max_number) - while(turfs.len > 0 && num > 0) - var/turf/simulated/floor/T = pick(turfs) - turfs.Remove(T) - num-- - var/spawn_type = pick(spawn_types) - new spawn_type(T) - -/datum/event/dangerinfestation/announce() - command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation") - -#undef LOC_RIOT -#undef LOC_ATMOS -#undef LOC_DISPOSAL -#undef LOC_TECH -#undef LOC_VAULT - - -#undef DANGER_CRAB -#undef DANGER_ICE +#define LOC_RIOT 0 +#define LOC_ATMOS 1 +#define LOC_DISPOSAL 2 +#define LOC_TECH 3 +#define LOC_VAULT 4 + + +#define DANGER_CRAB 0 +#define DANGER_ICE 1 +#define DANGER_RAY 2 + +//infestation event of a diffrent variety +//meant for engineering and science to exploit +/datum/event/dangerinfestation + announceWhen = 10 + endWhen = 11 + var/location + var/locstring + var/danger + var/dangerstring + +/datum/event/dangerinfestation/start() + location = rand(0,4) + var/list/turf/simulated/floor/turfs = list() + var/spawn_area_type + switch(location) + if(LOC_RIOT) + spawn_area_type = /area/security/riot_control + locstring = "riot control" + if(LOC_ATMOS) + spawn_area_type = /area/engineering/atmos + locstring = "atmospherics" + if(LOC_DISPOSAL) + spawn_area_type = /area/maintenance/disposal + locstring = "the disposal" + if(LOC_TECH) + spawn_area_type = /area/storage/tech + locstring = "technical storage" + if(LOC_VAULT) + spawn_area_type = /area/security/nuke_storage + locstring = "the vault" + + for(var/areapath in typesof(spawn_area_type)) + var/area/A = locate(areapath) + for(var/turf/simulated/floor/F in A.contents) + //VOREStation Edit - Fixes event + var/blocked = FALSE + for(var/atom/movable/AM in F) + if(AM.density) + blocked = TRUE + if(!blocked) + turfs += F + + var/list/spawn_types = list() + var/min_number + var/max_number + danger = rand(0,2) + switch(danger) + if(DANGER_CRAB) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) + min_number = 1 + max_number = 4 + dangerstring = "crystaline crabs" + if(DANGER_ICE) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) + min_number = 1 + max_number = 4 + dangerstring = "strange entities" + + if(DANGER_RAY) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) + min_number = 1 + max_number = 4 + dangerstring = "solar rays" + + spawn(0) + var/num = rand(min_number,max_number) + while(turfs.len > 0 && num > 0) + var/turf/simulated/floor/T = pick(turfs) + turfs.Remove(T) + num-- + var/spawn_type = pick(spawn_types) + new spawn_type(T) + +/datum/event/dangerinfestation/announce() + command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation") + +#undef LOC_RIOT +#undef LOC_ATMOS +#undef LOC_DISPOSAL +#undef LOC_TECH +#undef LOC_VAULT + + +#undef DANGER_CRAB +#undef DANGER_ICE #undef DANGER_RAY \ No newline at end of file diff --git a/modular_chomp/code/modules/event/heavydangerinfestation.dm b/modular_chomp/code/modules/event/heavydangerinfestation.dm index cc9b648850..9bf1bbe5ae 100644 --- a/modular_chomp/code/modules/event/heavydangerinfestation.dm +++ b/modular_chomp/code/modules/event/heavydangerinfestation.dm @@ -1,124 +1,124 @@ -#define LOC_RIOT 0 -#define LOC_ATMOS 1 -#define LOC_DISPOSAL 2 -#define LOC_TECH 3 -#define LOC_VAULT 4 -#define LOC_VIRO 5 -#define LOC_BRIDGE 6 -#define LOC_BRIG 7 - -#define DANGER_CRAB 0 -#define DANGER_ICE 1 -#define DANGER_RAY 2 -#define DANGER_EEL 3 -#define DANGER_TURTLE 4 - -//infestation event of a diffrent variety -//meant for engineering and science to exploit -/datum/event/highdangerinfestation - announceWhen = 10 - endWhen = 11 - var/location - var/locstring - var/danger - var/dangerstring - -/datum/event/highdangerinfestation/start() - location = rand(0,7) - var/list/turf/simulated/floor/turfs = list() - var/spawn_area_type - switch(location) - if(LOC_RIOT) - spawn_area_type = /area/security/riot_control - locstring = "riot control" - if(LOC_ATMOS) - spawn_area_type = /area/engineering/atmos - locstring = "atmospherics" - if(LOC_DISPOSAL) - spawn_area_type = /area/maintenance/disposal - locstring = "the disposal" - if(LOC_TECH) - spawn_area_type = /area/storage/tech - locstring = "technical storage" - if(LOC_VAULT) - spawn_area_type = /area/security/nuke_storage - locstring = "the vault" - if(LOC_VIRO) - spawn_area_type = /area/medical/virology - locstring = "the virogoly" - if(LOC_BRIDGE) - spawn_area_type = /area/bridge - locstring = "the bridge" - if(LOC_BRIG) - spawn_area_type = /area/security/prison - locstring = "the brig" - - for(var/areapath in typesof(spawn_area_type)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - //VOREStation Edit - Fixes event - var/blocked = FALSE - for(var/atom/movable/AM in F) - if(AM.density) - blocked = TRUE - if(!blocked) - turfs += F - - var/list/spawn_types = list() - var/min_number - var/max_number - danger = rand(0,4) - switch(danger) - if(DANGER_CRAB) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) - min_number = 2 - max_number = 6 - dangerstring = "crystaline crabs" - if(DANGER_ICE) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) - min_number = 2 - max_number = 6 - dangerstring = "strange entities" - - if(DANGER_RAY) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) - min_number = 2 - max_number = 6 - dangerstring = "solar rays" - if(DANGER_EEL) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/dreameel) - min_number = 2 - max_number = 6 - dangerstring = "strange entities" - if(DANGER_TURTLE) - spawn_types = list(/mob/living/simple_mob/vore/spacecritter/gravityshell) - min_number = 2 - max_number = 6 - dangerstring = "strange entities" - - spawn(0) - var/num = rand(min_number,max_number) - while(turfs.len > 0 && num > 0) - var/turf/simulated/floor/T = pick(turfs) - turfs.Remove(T) - num-- - var/spawn_type = pick(spawn_types) - new spawn_type(T) - -/datum/event/highdangerinfestation/announce() - command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation") - -#undef LOC_RIOT -#undef LOC_ATMOS -#undef LOC_DISPOSAL -#undef LOC_TECH -#undef LOC_VAULT -#undef LOC_VIRO -#undef LOC_BRIDGE -#undef LOC_BRIG - -#undef DANGER_CRAB -#undef DANGER_ICE -#undef DANGER_RAY -#undef DANGER_EEL +#define LOC_RIOT 0 +#define LOC_ATMOS 1 +#define LOC_DISPOSAL 2 +#define LOC_TECH 3 +#define LOC_VAULT 4 +#define LOC_VIRO 5 +#define LOC_BRIDGE 6 +#define LOC_BRIG 7 + +#define DANGER_CRAB 0 +#define DANGER_ICE 1 +#define DANGER_RAY 2 +#define DANGER_EEL 3 +#define DANGER_TURTLE 4 + +//infestation event of a diffrent variety +//meant for engineering and science to exploit +/datum/event/highdangerinfestation + announceWhen = 10 + endWhen = 11 + var/location + var/locstring + var/danger + var/dangerstring + +/datum/event/highdangerinfestation/start() + location = rand(0,7) + var/list/turf/simulated/floor/turfs = list() + var/spawn_area_type + switch(location) + if(LOC_RIOT) + spawn_area_type = /area/security/riot_control + locstring = "riot control" + if(LOC_ATMOS) + spawn_area_type = /area/engineering/atmos + locstring = "atmospherics" + if(LOC_DISPOSAL) + spawn_area_type = /area/maintenance/disposal + locstring = "the disposal" + if(LOC_TECH) + spawn_area_type = /area/storage/tech + locstring = "technical storage" + if(LOC_VAULT) + spawn_area_type = /area/security/nuke_storage + locstring = "the vault" + if(LOC_VIRO) + spawn_area_type = /area/medical/virology + locstring = "the virogoly" + if(LOC_BRIDGE) + spawn_area_type = /area/bridge + locstring = "the bridge" + if(LOC_BRIG) + spawn_area_type = /area/security/prison + locstring = "the brig" + + for(var/areapath in typesof(spawn_area_type)) + var/area/A = locate(areapath) + for(var/turf/simulated/floor/F in A.contents) + //VOREStation Edit - Fixes event + var/blocked = FALSE + for(var/atom/movable/AM in F) + if(AM.density) + blocked = TRUE + if(!blocked) + turfs += F + + var/list/spawn_types = list() + var/min_number + var/max_number + danger = rand(0,4) + switch(danger) + if(DANGER_CRAB) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) + min_number = 2 + max_number = 6 + dangerstring = "crystaline crabs" + if(DANGER_ICE) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + + if(DANGER_RAY) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) + min_number = 2 + max_number = 6 + dangerstring = "solar rays" + if(DANGER_EEL) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/dreameel) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + if(DANGER_TURTLE) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/gravityshell) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + + spawn(0) + var/num = rand(min_number,max_number) + while(turfs.len > 0 && num > 0) + var/turf/simulated/floor/T = pick(turfs) + turfs.Remove(T) + num-- + var/spawn_type = pick(spawn_types) + new spawn_type(T) + +/datum/event/highdangerinfestation/announce() + command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation") + +#undef LOC_RIOT +#undef LOC_ATMOS +#undef LOC_DISPOSAL +#undef LOC_TECH +#undef LOC_VAULT +#undef LOC_VIRO +#undef LOC_BRIDGE +#undef LOC_BRIG + +#undef DANGER_CRAB +#undef DANGER_ICE +#undef DANGER_RAY +#undef DANGER_EEL #undef DANGER_TURTLE \ No newline at end of file diff --git a/modular_chomp/code/modules/exploration/lootsafe.dm b/modular_chomp/code/modules/exploration/lootsafe.dm index a20be590cf..070b69fb77 100644 --- a/modular_chomp/code/modules/exploration/lootsafe.dm +++ b/modular_chomp/code/modules/exploration/lootsafe.dm @@ -1,286 +1,286 @@ -/obj/structure/closet/crate/secure/lootsafe - name = "secure safe" - desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" - icon = 'icons/obj/structures.dmi' //I should coder sprite something but for now using normal safe - icon_state = "safe" - anchored = TRUE - density = TRUE - health = 500 //Cause in heavy defended areas and thermite resistaint - locked = 1 - var/hackguard = 10 - -/obj/structure/closet/crate/secure/lootsafe/emag_act(var/remaining_charges, var/mob/user) - if (locked) - if(prob(60 - hackguard)) - to_chat(user, "The safe unlocks!") - locked = 0 - return 1 - if(prob(15 + hackguard)) - to_chat(user, "The safe buzzes as a security drone is teleported in!") - new /mob/living/simple_mob/mechanical/combat_drone (src.loc) //if I ever make security stun drones remind me to replace this with those - //new /effect/system/spark_spread (src.loc) I am to tired to make this work right now - return 1 - else - to_chat(user, "The safe buzzes but the security systems don't trigger.") - return 1 - -//Loot for lootsafes -/obj/structure/closet/crate/secure/lootsafe/proc/generate_loot() - var/lootvalue = 0 - while(lootvalue <= 15) //if the initial generation gives you less than 10 points of stuff, add more stuff - //pick a thing to add to the crate - the format is "list(filepath, value) = weight," - var/choice = list() - choice = pickweight(list( - list(/obj/item/weapon/spacecash/c500, 3) = 5, - list(/obj/item/weapon/spacecash/c200, 3) = 5, - list(/obj/item/weapon/spacecash/c100, 3) = 5, - list(/obj/item/weapon/spacecash/c50, 3) = 5, - list(/obj/item/weapon/spacecash/c20, 3) = 5, - list(pick(/obj/item/device/multitool/alien, - /obj/item/stack/cable_coil/alien, - /obj/item/weapon/tool/crowbar/alien, - /obj/item/weapon/tool/screwdriver/alien, - /obj/item/weapon/weldingtool/alien, - /obj/item/weapon/tool/wirecutters/alien, - /obj/item/weapon/tool/wrench/alien), 3) = 10, - list(/obj/item/seeds/random, 3) = 10, - list(pick(subtypesof(/obj/item/weapon/storage/firstaid)), 3) = 15, - list(/obj/item/weapon/grenade/flashbang/clusterbang, 3) = 10, - list(pick(subtypesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts/subspace), 3) = 5, - list(/obj/item/weapon/rig/ch/precursor, 3) = 5, - list(/obj/item/weapon/rig/combat, 3) = 15, - list(/obj/item/weapon/rig/merc, 3) = 10, - list(/obj/item/weapon/rig/internalaffairs, 3) = 10, - list(/obj/item/weapon/rig/baymed, 3) = 10, - list(/obj/item/weapon/gun/energy/vepr/plasma, 3) = 5, - list(/obj/item/weapon/gun/energy/laser/vepr, 3) = 5, - list(/obj/item/weapon/gun/projectile/automatic/l6_saw, 3) = 10, - list(/obj/item/weapon/gun/projectile/automatic/tommygun, 3) = 10, - list(/obj/item/weapon/holosign_creator/combifan, 3) = 15, - list(/obj/item/weapon/rcd, 3) = 15, - list(/obj/item/weapon/gun/energy/medigun, 3) = 10, - list(/obj/item/weapon/gun/energy/sickshot, 3) = 5, - list(/obj/item/slime_extract/purple, 3) = 10, - list(/obj/item/slime_extract/bluespace, 3) = 10, - list(/obj/item/slime_extract/blue, 3) = 10, - list(/obj/item/slime_extract/red, 3) = 10, - list(/obj/item/slime_extract/emerald, 3) = 10, - list(/obj/item/slime_extract/cerulean, 3) = 10, - list(/obj/item/slime_extract/ruby, 3) = 10, - list(/obj/item/slime_extract/green, 3) = 10, - list(/obj/item/slime_extract/pink, 3) = 10, - list(/obj/item/slime_extract/oil, 3) = 10, - list(/obj/item/slime_extract/dark_blue, 3) = 10, - list(/obj/item/slime_extract/dark_purple, 3) = 10, - list(/obj/item/clothing/glasses/omni, 3) = 10, - list(/obj/item/clothing/glasses/thermal, 3) = 10, - list(/obj/item/clothing/glasses/night, 3) = 15, - list(/obj/item/stack/material/void_opal, 3) = 5, - list(/obj/item/weapon/inducer/syndicate, 3) = 10, - list(/obj/item/weapon/melee/energy/axe, 3) = 10, - list(/obj/item/rig_module/chem_dispenser/ninja, 3) = 10, - list(/obj/item/rig_module/vision/multi, 3) = 5, - list(/obj/item/rig_module/mounted/energy_blade, 3) = 5, - list(/obj/item/device/perfect_tele, 3) = 15 - )) - var/path = choice[1] - var/value = choice[2] - contents += new path() - lootvalue += value - -/obj/structure/closet/crate/secure/lootsafe/numberlock - desc = "A huge chunk of metal with a keypad embedded in it. Fine print above the keypad reads, Guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" - var/list/code = list() - var/list/lastattempt = list() - var/attempts = 10 - var/codelen = 5 - -/obj/structure/closet/crate/secure/lootsafe/numberlock/extraguard - hackguard = 20 - -/obj/structure/closet/crate/secure/lootsafe/numberlock/weak - hackguard = 5 - codelen = 3 - -/obj/structure/closet/crate/secure/lootsafe/numberlock/New() - ..() - var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - - for(var/i in 1 to codelen) - code += pick(digits) - digits -= code[code.len] - - generate_loot() - - -/obj/structure/closet/crate/secure/lootsafe/numberlock/togglelock(mob/user as mob) - if(!locked) - return - - to_chat(user, "The crate is locked with a Deca-code lock.") - var/input = tgui_input_text(usr, "Enter [codelen] digits. All digits must be unique.", "Deca-Code Lock", "") - if(!Adjacent(user)) - return - var/list/sanitised = list() - var/sanitycheck = 1 - for(var/i=1,i<=length(input),i++) //put the guess into a list - sanitised += text2num(copytext(input,i,i+1)) - for(var/i=1,i<=(length(input)-1),i++) //compare each digit in the guess to all those following it - for(var/j=(i+1),j<=length(input),j++) - if(sanitised[i] == sanitised[j]) - sanitycheck = null //if a digit is repeated, reject the input - - if(input == null || sanitycheck == null || length(input) != codelen) - to_chat(user, "You leave the crate alone.") - else if(check_input(input)) - to_chat(user, "The crate unlocks!") - playsound(src, 'sound/machines/lockreset.ogg', 50, 1) - set_locked(0) - else - visible_message("A red light on \the [src]'s control panel flashes briefly.") - attempts-- - if (attempts == 0) - to_chat(user, "The crate's anti-tamper system activates!") - var/turf/T = get_turf(src.loc) - explosion(T, 0, 0, 1, 2) - qdel(src) - -/obj/structure/closet/crate/secure/lootsafe/numberlock/proc/check_input(var/input) - if(length(input) != codelen) - return 0 - - . = 1 - lastattempt.Cut() - for(var/i in 1 to codelen) - var/guesschar = copytext(input, i, i+1) - lastattempt += guesschar - if(guesschar != code[i]) - . = 0 - -/obj/structure/closet/crate/secure/lootsafe/numberlock/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls? - to_chat(user, "DECA-CODE LOCK ANALYSIS:") - if (attempts == 1) - to_chat(user, "* Anti-Tamper system will activate on the next failed access attempt.") - else - to_chat(user, "* Anti-Tamper system will activate after [src.attempts] failed access attempts.") - if(lastattempt.len) - var/bulls = 0 - var/cows = 0 - - var/list/code_contents = code.Copy() - for(var/i in 1 to codelen) - if(lastattempt[i] == code[i]) - ++bulls - else if(lastattempt[i] in code_contents) - ++cows - code_contents -= lastattempt[i] - var/previousattempt = null //convert back to string for readback - for(var/i in 1 to codelen) - previousattempt = addtext(previousattempt, lastattempt[i]) - to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") - return - ..() - - -//Currently Admeme things but due to chatter I have ideas on how to expand this later -//Concept is you either A) go and get the keycard, or B) brute force. -/obj/structure/closet/crate/secure/lootsafe/devillock - desc = "A huge chunk of metal with a keyboard imprinted in it.\"" - hackguard = 45 - req_access = list(150) - var/list/code = list() - var/list/lastattempt = list() - var/attempts = 100 - var/codelen = 10 - -/obj/item/weapon/card/id/bosskey - name = "Strange ID" - desc = "A golden card which seems unnatural in nature." - icon_state = "gold-id" - item_state = "gold_id" - access = list(150) - - -/obj/structure/closet/crate/secure/lootsafe/devillock/New() - ..() - var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z") - - for(var/i in 1 to codelen) - code += pick(digits) - digits -= code[code.len] - - generate_loot() - - - -/obj/structure/closet/crate/secure/lootsafe/devillock/togglelock(mob/user as mob) - if(!locked) - return - - to_chat(user, "The crate is locked with a Deca-code lock.") - var/input = tgui_input_text(usr, "Enter [codelen] digits. All digits must be unique.", "Deca-Code Lock", "") - if(!Adjacent(user)) - return - var/list/sanitised = list() - var/sanitycheck = 1 - for(var/i=1,i<=length(input),i++) //put the guess into a list - sanitised += text2num(copytext(input,i,i+1)) - for(var/i=1,i<=(length(input)-1),i++) //compare each digit in the guess to all those following it - for(var/j=(i+1),j<=length(input),j++) - if(sanitised[i] == sanitised[j]) - sanitycheck = null //if a digit is repeated, reject the input - - if(input == null || sanitycheck == null || length(input) != codelen) - to_chat(user, "You leave the crate alone.") - else if(check_input(input)) - to_chat(user, "The crate unlocks!") - playsound(src, 'sound/machines/lockreset.ogg', 50, 1) - set_locked(0) - else - visible_message("A red light on \the [src]'s control panel flashes briefly.") - attempts-- - if (attempts == 0) - to_chat(user, "The crate's anti-tamper system activates!") - var/turf/T = get_turf(src.loc) - explosion(T, 0, 0, 1, 2) - qdel(src) - -/obj/structure/closet/crate/secure/lootsafe/devillock/proc/check_input(var/input) - if(length(input) != codelen) - return 0 - - . = 1 - lastattempt.Cut() - for(var/i in 1 to codelen) - var/guesschar = copytext(input, i, i+1) - lastattempt += guesschar - if(guesschar != code[i]) - . = 0 - -/obj/structure/closet/crate/secure/lootsafe/devillock/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls? - to_chat(user, "DECA-CODE LOCK ANALYSIS:") - if (attempts == 1) - to_chat(user, "* Anti-Tamper system will activate on the next failed access attempt.") - else - to_chat(user, "* Anti-Tamper system will activate after [src.attempts] failed access attempts.") - if(lastattempt.len) - var/bulls = 0 - var/cows = 0 - - var/list/code_contents = code.Copy() - for(var/i in 1 to codelen) - if(lastattempt[i] == code[i]) - ++bulls - else if(lastattempt[i] in code_contents) - ++cows - code_contents -= lastattempt[i] - var/previousattempt = null //convert back to string for readback - for(var/i in 1 to codelen) - previousattempt = addtext(previousattempt, lastattempt[i]) - to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") - return - ..() +/obj/structure/closet/crate/secure/lootsafe + name = "secure safe" + desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" + icon = 'icons/obj/structures.dmi' //I should coder sprite something but for now using normal safe + icon_state = "safe" + anchored = TRUE + density = TRUE + health = 500 //Cause in heavy defended areas and thermite resistaint + locked = 1 + var/hackguard = 10 + +/obj/structure/closet/crate/secure/lootsafe/emag_act(var/remaining_charges, var/mob/user) + if (locked) + if(prob(60 - hackguard)) + to_chat(user, "The safe unlocks!") + locked = 0 + return 1 + if(prob(15 + hackguard)) + to_chat(user, "The safe buzzes as a security drone is teleported in!") + new /mob/living/simple_mob/mechanical/combat_drone (src.loc) //if I ever make security stun drones remind me to replace this with those + //new /effect/system/spark_spread (src.loc) I am to tired to make this work right now + return 1 + else + to_chat(user, "The safe buzzes but the security systems don't trigger.") + return 1 + +//Loot for lootsafes +/obj/structure/closet/crate/secure/lootsafe/proc/generate_loot() + var/lootvalue = 0 + while(lootvalue <= 15) //if the initial generation gives you less than 10 points of stuff, add more stuff + //pick a thing to add to the crate - the format is "list(filepath, value) = weight," + var/choice = list() + choice = pickweight(list( + list(/obj/item/weapon/spacecash/c500, 3) = 5, + list(/obj/item/weapon/spacecash/c200, 3) = 5, + list(/obj/item/weapon/spacecash/c100, 3) = 5, + list(/obj/item/weapon/spacecash/c50, 3) = 5, + list(/obj/item/weapon/spacecash/c20, 3) = 5, + list(pick(/obj/item/device/multitool/alien, + /obj/item/stack/cable_coil/alien, + /obj/item/weapon/tool/crowbar/alien, + /obj/item/weapon/tool/screwdriver/alien, + /obj/item/weapon/weldingtool/alien, + /obj/item/weapon/tool/wirecutters/alien, + /obj/item/weapon/tool/wrench/alien), 3) = 10, + list(/obj/item/seeds/random, 3) = 10, + list(pick(subtypesof(/obj/item/weapon/storage/firstaid)), 3) = 15, + list(/obj/item/weapon/grenade/flashbang/clusterbang, 3) = 10, + list(pick(subtypesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts/subspace), 3) = 5, + list(/obj/item/weapon/rig/ch/precursor, 3) = 5, + list(/obj/item/weapon/rig/combat, 3) = 15, + list(/obj/item/weapon/rig/merc, 3) = 10, + list(/obj/item/weapon/rig/internalaffairs, 3) = 10, + list(/obj/item/weapon/rig/baymed, 3) = 10, + list(/obj/item/weapon/gun/energy/vepr/plasma, 3) = 5, + list(/obj/item/weapon/gun/energy/laser/vepr, 3) = 5, + list(/obj/item/weapon/gun/projectile/automatic/l6_saw, 3) = 10, + list(/obj/item/weapon/gun/projectile/automatic/tommygun, 3) = 10, + list(/obj/item/weapon/holosign_creator/combifan, 3) = 15, + list(/obj/item/weapon/rcd, 3) = 15, + list(/obj/item/weapon/gun/energy/medigun, 3) = 10, + list(/obj/item/weapon/gun/energy/sickshot, 3) = 5, + list(/obj/item/slime_extract/purple, 3) = 10, + list(/obj/item/slime_extract/bluespace, 3) = 10, + list(/obj/item/slime_extract/blue, 3) = 10, + list(/obj/item/slime_extract/red, 3) = 10, + list(/obj/item/slime_extract/emerald, 3) = 10, + list(/obj/item/slime_extract/cerulean, 3) = 10, + list(/obj/item/slime_extract/ruby, 3) = 10, + list(/obj/item/slime_extract/green, 3) = 10, + list(/obj/item/slime_extract/pink, 3) = 10, + list(/obj/item/slime_extract/oil, 3) = 10, + list(/obj/item/slime_extract/dark_blue, 3) = 10, + list(/obj/item/slime_extract/dark_purple, 3) = 10, + list(/obj/item/clothing/glasses/omni, 3) = 10, + list(/obj/item/clothing/glasses/thermal, 3) = 10, + list(/obj/item/clothing/glasses/night, 3) = 15, + list(/obj/item/stack/material/void_opal, 3) = 5, + list(/obj/item/weapon/inducer/syndicate, 3) = 10, + list(/obj/item/weapon/melee/energy/axe, 3) = 10, + list(/obj/item/rig_module/chem_dispenser/ninja, 3) = 10, + list(/obj/item/rig_module/vision/multi, 3) = 5, + list(/obj/item/rig_module/mounted/energy_blade, 3) = 5, + list(/obj/item/device/perfect_tele, 3) = 15 + )) + var/path = choice[1] + var/value = choice[2] + contents += new path() + lootvalue += value + +/obj/structure/closet/crate/secure/lootsafe/numberlock + desc = "A huge chunk of metal with a keypad embedded in it. Fine print above the keypad reads, Guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" + var/list/code = list() + var/list/lastattempt = list() + var/attempts = 10 + var/codelen = 5 + +/obj/structure/closet/crate/secure/lootsafe/numberlock/extraguard + hackguard = 20 + +/obj/structure/closet/crate/secure/lootsafe/numberlock/weak + hackguard = 5 + codelen = 3 + +/obj/structure/closet/crate/secure/lootsafe/numberlock/New() + ..() + var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") + + for(var/i in 1 to codelen) + code += pick(digits) + digits -= code[code.len] + + generate_loot() + + +/obj/structure/closet/crate/secure/lootsafe/numberlock/togglelock(mob/user as mob) + if(!locked) + return + + to_chat(user, "The crate is locked with a Deca-code lock.") + var/input = tgui_input_text(usr, "Enter [codelen] digits. All digits must be unique.", "Deca-Code Lock", "") + if(!Adjacent(user)) + return + var/list/sanitised = list() + var/sanitycheck = 1 + for(var/i=1,i<=length(input),i++) //put the guess into a list + sanitised += text2num(copytext(input,i,i+1)) + for(var/i=1,i<=(length(input)-1),i++) //compare each digit in the guess to all those following it + for(var/j=(i+1),j<=length(input),j++) + if(sanitised[i] == sanitised[j]) + sanitycheck = null //if a digit is repeated, reject the input + + if(input == null || sanitycheck == null || length(input) != codelen) + to_chat(user, "You leave the crate alone.") + else if(check_input(input)) + to_chat(user, "The crate unlocks!") + playsound(src, 'sound/machines/lockreset.ogg', 50, 1) + set_locked(0) + else + visible_message("A red light on \the [src]'s control panel flashes briefly.") + attempts-- + if (attempts == 0) + to_chat(user, "The crate's anti-tamper system activates!") + var/turf/T = get_turf(src.loc) + explosion(T, 0, 0, 1, 2) + qdel(src) + +/obj/structure/closet/crate/secure/lootsafe/numberlock/proc/check_input(var/input) + if(length(input) != codelen) + return 0 + + . = 1 + lastattempt.Cut() + for(var/i in 1 to codelen) + var/guesschar = copytext(input, i, i+1) + lastattempt += guesschar + if(guesschar != code[i]) + . = 0 + +/obj/structure/closet/crate/secure/lootsafe/numberlock/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls? + to_chat(user, "DECA-CODE LOCK ANALYSIS:") + if (attempts == 1) + to_chat(user, "* Anti-Tamper system will activate on the next failed access attempt.") + else + to_chat(user, "* Anti-Tamper system will activate after [src.attempts] failed access attempts.") + if(lastattempt.len) + var/bulls = 0 + var/cows = 0 + + var/list/code_contents = code.Copy() + for(var/i in 1 to codelen) + if(lastattempt[i] == code[i]) + ++bulls + else if(lastattempt[i] in code_contents) + ++cows + code_contents -= lastattempt[i] + var/previousattempt = null //convert back to string for readback + for(var/i in 1 to codelen) + previousattempt = addtext(previousattempt, lastattempt[i]) + to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") + return + ..() + + +//Currently Admeme things but due to chatter I have ideas on how to expand this later +//Concept is you either A) go and get the keycard, or B) brute force. +/obj/structure/closet/crate/secure/lootsafe/devillock + desc = "A huge chunk of metal with a keyboard imprinted in it.\"" + hackguard = 45 + req_access = list(150) + var/list/code = list() + var/list/lastattempt = list() + var/attempts = 100 + var/codelen = 10 + +/obj/item/weapon/card/id/bosskey + name = "Strange ID" + desc = "A golden card which seems unnatural in nature." + icon_state = "gold-id" + item_state = "gold_id" + access = list(150) + + +/obj/structure/closet/crate/secure/lootsafe/devillock/New() + ..() + var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z") + + for(var/i in 1 to codelen) + code += pick(digits) + digits -= code[code.len] + + generate_loot() + + + +/obj/structure/closet/crate/secure/lootsafe/devillock/togglelock(mob/user as mob) + if(!locked) + return + + to_chat(user, "The crate is locked with a Deca-code lock.") + var/input = tgui_input_text(usr, "Enter [codelen] digits. All digits must be unique.", "Deca-Code Lock", "") + if(!Adjacent(user)) + return + var/list/sanitised = list() + var/sanitycheck = 1 + for(var/i=1,i<=length(input),i++) //put the guess into a list + sanitised += text2num(copytext(input,i,i+1)) + for(var/i=1,i<=(length(input)-1),i++) //compare each digit in the guess to all those following it + for(var/j=(i+1),j<=length(input),j++) + if(sanitised[i] == sanitised[j]) + sanitycheck = null //if a digit is repeated, reject the input + + if(input == null || sanitycheck == null || length(input) != codelen) + to_chat(user, "You leave the crate alone.") + else if(check_input(input)) + to_chat(user, "The crate unlocks!") + playsound(src, 'sound/machines/lockreset.ogg', 50, 1) + set_locked(0) + else + visible_message("A red light on \the [src]'s control panel flashes briefly.") + attempts-- + if (attempts == 0) + to_chat(user, "The crate's anti-tamper system activates!") + var/turf/T = get_turf(src.loc) + explosion(T, 0, 0, 1, 2) + qdel(src) + +/obj/structure/closet/crate/secure/lootsafe/devillock/proc/check_input(var/input) + if(length(input) != codelen) + return 0 + + . = 1 + lastattempt.Cut() + for(var/i in 1 to codelen) + var/guesschar = copytext(input, i, i+1) + lastattempt += guesschar + if(guesschar != code[i]) + . = 0 + +/obj/structure/closet/crate/secure/lootsafe/devillock/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls? + to_chat(user, "DECA-CODE LOCK ANALYSIS:") + if (attempts == 1) + to_chat(user, "* Anti-Tamper system will activate on the next failed access attempt.") + else + to_chat(user, "* Anti-Tamper system will activate after [src.attempts] failed access attempts.") + if(lastattempt.len) + var/bulls = 0 + var/cows = 0 + + var/list/code_contents = code.Copy() + for(var/i in 1 to codelen) + if(lastattempt[i] == code[i]) + ++bulls + else if(lastattempt[i] in code_contents) + ++cows + code_contents -= lastattempt[i] + var/previousattempt = null //convert back to string for readback + for(var/i in 1 to codelen) + previousattempt = addtext(previousattempt, lastattempt[i]) + to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") + return + ..() diff --git a/modular_chomp/code/modules/food/drinkgglass/metaglass.dm b/modular_chomp/code/modules/food/drinkgglass/metaglass.dm index 988fff245a..849245462d 100644 --- a/modular_chomp/code/modules/food/drinkgglass/metaglass.dm +++ b/modular_chomp/code/modules/food/drinkgglass/metaglass.dm @@ -1,296 +1,296 @@ -//////////////////CHOMP////////////////////////// - -/datum/reagent/ethanol/cloverclub - glass_icon_state = "cloverclub" - glass_icon_source = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=8) - -/datum/reagent/ethanol/spiderdrink - glass_icon_state = "glassofspiders" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/tea/minttea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/lemontea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/limetea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/orangetea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/berrytea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/cherrytea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/tea/watermelontea - glass_icon_state = "bigteacup" - -/datum/reagent/drink/bubbleteawatermelon - glass_icon_state = "bubbleteawatermelonglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=9) - -/datum/reagent/drink/bubbleteastrawberry - glass_icon_state = "bubbleteastrawberryglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=9) - -/datum/reagent/drink/bubbleteacherry - glass_icon_state = "bubbleteacherryglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=9) - -/datum/reagent/drink/bubbleteacoffee - glass_icon_state = "bubbleteacoffeeglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=9) - -/datum/reagent/drink/bubbleteabanana - glass_icon_state = "bubbleteabananaglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=9) - -/datum/reagent/drink/tea/matcha_latte - glass_icon_state = "bigteacup" - -/datum/reagent/drink/horchata - glass_icon_state = "horchata" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=7) - -/datum/reagent/toxin/bluetrain - glass_icon_state = "bluetrain" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - glass_center_of_mass = list("x"=16, "y"=8) - -/datum/reagent/drink/lovepotion - glass_icon_state = "lovepotion" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/lowpower - glass_icon_state = "lowpower" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/coffee/jackbrew - glass_icon_state = "jackbrew" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/bookwyrm - glass_icon_state = "bookwyrm" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/highpower - glass_icon_state = "highpower" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/flapper - glass_icon_state = "flapper" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/toxin/oilslide - glass_icon_state = "oilslide" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/sitonmyface - glass_icon_state = "sitonmyface" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/hachi - glass_icon_state = "hachi" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/mojito - glass_icon_state = "mojito" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/slimedrink - glass_icon_state = "slimedrink" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/arachnidslammer - glass_icon_state = "arachnidslammer" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/pilk - glass_icon_state = "whiskeyglass" - -//Visual Updates of existing drinks - -/datum/reagent/ethanol/gintonic - glass_icon_state = "gintonicglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/coffee/kahlua - glass_icon_state = "kahluaglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/wine - glass_icon_state = "wineglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/cognac - glass_icon_state = "cognacglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/cuba_libre - glass_icon_state = "cubalibreglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/manly_dorf - glass_icon_state = "manlydorfglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/tequilla_sunrise - glass_icon_state = "tequilasunriseglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/screwdrivercocktail - glass_icon_state = "screwdriverglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/bloody_mary - glass_icon_state = "bloodymaryglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/coffee/brave_bull - glass_icon_state = "bravebullglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/doctor_delight - glass_icon_state = "doctorsdelightglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/soda/space_up - glass_icon_state = "space-up_glass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/vodkatonic - glass_icon_state = "vodkatonicglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/manhattan - glass_icon_state = "manhattanglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/manhattan_proj - glass_icon_state = "proj_manhattanglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/ginfizz - glass_icon_state = "ginfizzglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/longislandicedtea - glass_icon_state = "longislandicedteaglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/threemileisland - glass_icon_state = "threemileislandglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/margarita - glass_icon_state = "margaritaglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/soda/spacemountainwind - glass_icon_state = "Space_mountain_wind_glass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/thirteenloko - glass_icon_state = "thirteen_loko_glass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/drink/soda/dr_gibb - glass_icon_state = "dr_gibb_glass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/adminordrazine - glass_icon_state = "golden_cup" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/singulo - glass_icon_state = "singulo" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/silencer - glass_icon_state = "silencerglass" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/snowwhite - glass_icon_state = "snowwhite" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/antifreeze - glass_icon_state = "antifreeze" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/barefoot - glass_icon_state = "b&p" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/booger - glass_icon_state = "booger" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/devilskiss - glass_icon_state = "devilskiss" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/syndicatebomb - glass_icon_state = "syndicatebomb" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/narsour - glass_icon_state = "narsour" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/cogchamp - glass_icon_state = "cogchamp" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/alliescocktail - glass_icon_state = "alliescocktail" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/erikasurprise - glass_icon_state = "erikasurprise" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -//Ported drinks - -/datum/reagent/ethanol/fetching_fizz - glass_icon_state = "fetching_fizz" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/hearty_punch - glass_icon_state = "hearty_punch" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/squirt_cider - glass_icon_state = "squirt_cider" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/fringe_weaver - glass_icon_state = "fringe_weaver" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/crevice_spike - glass_icon_state = "crevice_spike" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/duplex - glass_icon_state = "duplex" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/mauna_loa - glass_icon_state = "mauna_loa" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' - -/datum/reagent/ethanol/hiveminderaser - glass_icon_state = "hiveminderaser" - glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' +//////////////////CHOMP////////////////////////// + +/datum/reagent/ethanol/cloverclub + glass_icon_state = "cloverclub" + glass_icon_source = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=8) + +/datum/reagent/ethanol/spiderdrink + glass_icon_state = "glassofspiders" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/tea/minttea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/lemontea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/limetea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/orangetea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/berrytea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/cherrytea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/tea/watermelontea + glass_icon_state = "bigteacup" + +/datum/reagent/drink/bubbleteawatermelon + glass_icon_state = "bubbleteawatermelonglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=9) + +/datum/reagent/drink/bubbleteastrawberry + glass_icon_state = "bubbleteastrawberryglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=9) + +/datum/reagent/drink/bubbleteacherry + glass_icon_state = "bubbleteacherryglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=9) + +/datum/reagent/drink/bubbleteacoffee + glass_icon_state = "bubbleteacoffeeglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=9) + +/datum/reagent/drink/bubbleteabanana + glass_icon_state = "bubbleteabananaglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=9) + +/datum/reagent/drink/tea/matcha_latte + glass_icon_state = "bigteacup" + +/datum/reagent/drink/horchata + glass_icon_state = "horchata" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=7) + +/datum/reagent/toxin/bluetrain + glass_icon_state = "bluetrain" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + glass_center_of_mass = list("x"=16, "y"=8) + +/datum/reagent/drink/lovepotion + glass_icon_state = "lovepotion" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/lowpower + glass_icon_state = "lowpower" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/coffee/jackbrew + glass_icon_state = "jackbrew" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/bookwyrm + glass_icon_state = "bookwyrm" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/highpower + glass_icon_state = "highpower" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/flapper + glass_icon_state = "flapper" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/toxin/oilslide + glass_icon_state = "oilslide" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/sitonmyface + glass_icon_state = "sitonmyface" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/hachi + glass_icon_state = "hachi" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/mojito + glass_icon_state = "mojito" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/slimedrink + glass_icon_state = "slimedrink" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/arachnidslammer + glass_icon_state = "arachnidslammer" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/pilk + glass_icon_state = "whiskeyglass" + +//Visual Updates of existing drinks + +/datum/reagent/ethanol/gintonic + glass_icon_state = "gintonicglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/coffee/kahlua + glass_icon_state = "kahluaglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/wine + glass_icon_state = "wineglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/cognac + glass_icon_state = "cognacglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/cuba_libre + glass_icon_state = "cubalibreglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/manly_dorf + glass_icon_state = "manlydorfglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/tequilla_sunrise + glass_icon_state = "tequilasunriseglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/screwdrivercocktail + glass_icon_state = "screwdriverglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/bloody_mary + glass_icon_state = "bloodymaryglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/coffee/brave_bull + glass_icon_state = "bravebullglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/doctor_delight + glass_icon_state = "doctorsdelightglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/soda/space_up + glass_icon_state = "space-up_glass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/vodkatonic + glass_icon_state = "vodkatonicglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/manhattan + glass_icon_state = "manhattanglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/manhattan_proj + glass_icon_state = "proj_manhattanglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/ginfizz + glass_icon_state = "ginfizzglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/longislandicedtea + glass_icon_state = "longislandicedteaglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/threemileisland + glass_icon_state = "threemileislandglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/margarita + glass_icon_state = "margaritaglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/soda/spacemountainwind + glass_icon_state = "Space_mountain_wind_glass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/thirteenloko + glass_icon_state = "thirteen_loko_glass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/drink/soda/dr_gibb + glass_icon_state = "dr_gibb_glass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/adminordrazine + glass_icon_state = "golden_cup" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/singulo + glass_icon_state = "singulo" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/silencer + glass_icon_state = "silencerglass" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/snowwhite + glass_icon_state = "snowwhite" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/antifreeze + glass_icon_state = "antifreeze" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/barefoot + glass_icon_state = "b&p" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/booger + glass_icon_state = "booger" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/devilskiss + glass_icon_state = "devilskiss" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/syndicatebomb + glass_icon_state = "syndicatebomb" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/narsour + glass_icon_state = "narsour" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/cogchamp + glass_icon_state = "cogchamp" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/alliescocktail + glass_icon_state = "alliescocktail" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/erikasurprise + glass_icon_state = "erikasurprise" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +//Ported drinks + +/datum/reagent/ethanol/fetching_fizz + glass_icon_state = "fetching_fizz" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/hearty_punch + glass_icon_state = "hearty_punch" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/squirt_cider + glass_icon_state = "squirt_cider" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/fringe_weaver + glass_icon_state = "fringe_weaver" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/crevice_spike + glass_icon_state = "crevice_spike" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/duplex + glass_icon_state = "duplex" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/mauna_loa + glass_icon_state = "mauna_loa" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' + +/datum/reagent/ethanol/hiveminderaser + glass_icon_state = "hiveminderaser" + glass_icon_file = 'modular_chomp/icons/obj/drinks.dmi' diff --git a/modular_chomp/code/modules/food/food/drinks/bottle.dm b/modular_chomp/code/modules/food/food/drinks/bottle.dm index c5d3069933..b95c1bae50 100644 --- a/modular_chomp/code/modules/food/food/drinks/bottle.dm +++ b/modular_chomp/code/modules/food/food/drinks/bottle.dm @@ -1,10 +1,10 @@ -/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps - name = "Akvavit" - desc = "This could go well with lunch." - icon = 'modular_chomp/icons/obj/drinks.dmi' - icon_state = "snapsbottle" - center_of_mass = list("x"=17, "y"=3) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps/Initialize() - . = ..() - reagents.add_reagent("snaps", 100) +/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps + name = "Akvavit" + desc = "This could go well with lunch." + icon = 'modular_chomp/icons/obj/drinks.dmi' + icon_state = "snapsbottle" + center_of_mass = list("x"=17, "y"=3) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/snaps/Initialize() + . = ..() + reagents.add_reagent("snaps", 100) diff --git a/modular_chomp/code/modules/food/food/snacks/meat.dm b/modular_chomp/code/modules/food/food/snacks/meat.dm index be6c3ddf0a..97a6140eed 100644 --- a/modular_chomp/code/modules/food/food/snacks/meat.dm +++ b/modular_chomp/code/modules/food/food/snacks/meat.dm @@ -1,82 +1,82 @@ -/obj/item/weapon/reagent_containers/food/snacks/deathclawmeat - name = "Death claw Meat" - desc = "A slice from a deathclaw" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 6, "deathblood" = 6) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/deathclawmeat/Initialize() - . = ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("deathblood", 6) - -/obj/item/weapon/reagent_containers/food/snacks/dragonmeat - name = "Dragon Meat" - desc = "A slice from a mighty dragon" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 6, "liquidfire" = 6) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/dragonmeat/Initialize() - . = ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("liquidfire", 6) - -/obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat - name = "Phoron Dragon Meat" - desc = "A slice from a mighty dragon" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 6, "neoliquidfire" = 6, "phoron" = 3) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat/Initialize() - . = ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("neoliquidfire", 6) - reagents.add_reagent("phoron", 3) - -/obj/item/weapon/reagent_containers/food/snacks/metroidmeat - name = "Metroid Slice" - desc = "A slice from a metroid" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 3, "liquidlife" = 3) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/metroidmeat/Initialize() - . = ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("liquidlife", 3) - -/obj/item/weapon/reagent_containers/food/snacks/meat/raymeat - name = "Solar Ray Meat" - desc = "You aren't sure how ediable this is" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 3, "capsaicin" = 8, "condensedcapsaicin" = 8) - - -/obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat - name = "Eel Meat" - desc = "A slice from an eel" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 - nutriment_desc = list("protein" = 3, "shockchem" = 1) - - -/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell - name = "Gravity Shell Meat" - desc = "A slice from a gravity shell" - icon_state = "meat" - center_of_mass = list("x"=17, "y"=16) - nutriment_amt = 3 +/obj/item/weapon/reagent_containers/food/snacks/deathclawmeat + name = "Death claw Meat" + desc = "A slice from a deathclaw" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 6, "deathblood" = 6) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/deathclawmeat/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("deathblood", 6) + +/obj/item/weapon/reagent_containers/food/snacks/dragonmeat + name = "Dragon Meat" + desc = "A slice from a mighty dragon" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 6, "liquidfire" = 6) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/dragonmeat/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("liquidfire", 6) + +/obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat + name = "Phoron Dragon Meat" + desc = "A slice from a mighty dragon" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 6, "neoliquidfire" = 6, "phoron" = 3) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("neoliquidfire", 6) + reagents.add_reagent("phoron", 3) + +/obj/item/weapon/reagent_containers/food/snacks/metroidmeat + name = "Metroid Slice" + desc = "A slice from a metroid" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 3, "liquidlife" = 3) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/metroidmeat/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("liquidlife", 3) + +/obj/item/weapon/reagent_containers/food/snacks/meat/raymeat + name = "Solar Ray Meat" + desc = "You aren't sure how ediable this is" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 3, "capsaicin" = 8, "condensedcapsaicin" = 8) + + +/obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat + name = "Eel Meat" + desc = "A slice from an eel" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 3, "shockchem" = 1) + + +/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell + name = "Gravity Shell Meat" + desc = "A slice from a gravity shell" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 nutriment_desc = list("protein" = 24) \ No newline at end of file diff --git a/modular_chomp/code/modules/hydro/plants.dm b/modular_chomp/code/modules/hydro/plants.dm index 7d3d5263e3..9837a0c99d 100644 --- a/modular_chomp/code/modules/hydro/plants.dm +++ b/modular_chomp/code/modules/hydro/plants.dm @@ -1,52 +1,52 @@ -/datum/seed/flower/sunflower - mutants = list("solarflower", "soulflower") - -/datum/seed/cherries - mutants = list("cherrybomb") - -/datum/seed/citrus/orange - mutants = list("nuclearorange", "livewireorange" ) - -/datum/seed/flower/sunflower/soulflower - name = "soulflower" - seed_name = "soulflower" - display_name = "soulflowers" - chems = list("nutriment" = list(1,10), "souldew" = list(1,13)) - mutants = null - -/datum/seed/flower/sunflower/soulflower/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF") - set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#00FFFF") - set_trait(TRAIT_POTENCY,25) - set_trait(TRAIT_MATURATION,10) - set_trait(TRAIT_YIELD,1) - set_trait(TRAIT_SPREAD,1) - -/datum/seed/cherries/cherrybomb - name = "cherrybomb" - seed_name = "cherrybomb" - seed_noun = "pits" - display_name = "cherry bomb tree" - chems = list("nutriment" = list(1,15), "neoliquidfire" = list(1,15), "cherryjelly" = list(10,15)) - -/datum/seed/cherries/cherrybomb/New() - ..() - set_trait(TRAIT_PRODUCT_COLOUR,"#993399") - set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#993399") - -/datum/seed/citrus/orange/livewireorange - name = "livewireorange" - seed_name = "livewireorange" - seed_noun = "livewireorange" - display_name = "livewire orange tree" - chems = list("nutriment" = list(1,15), "liquidlife" = list(1,15), "orangejuice" = list(10,15)) - -/datum/seed/citrus/orange/nuclearorange - name = "nuclearorange" - seed_name = "nuclearorange" - seed_noun = "nuclearorange" - display_name = "nuclear orange tree" +/datum/seed/flower/sunflower + mutants = list("solarflower", "soulflower") + +/datum/seed/cherries + mutants = list("cherrybomb") + +/datum/seed/citrus/orange + mutants = list("nuclearorange", "livewireorange" ) + +/datum/seed/flower/sunflower/soulflower + name = "soulflower" + seed_name = "soulflower" + display_name = "soulflowers" + chems = list("nutriment" = list(1,10), "souldew" = list(1,13)) + mutants = null + +/datum/seed/flower/sunflower/soulflower/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF") + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#00FFFF") + set_trait(TRAIT_POTENCY,25) + set_trait(TRAIT_MATURATION,10) + set_trait(TRAIT_YIELD,1) + set_trait(TRAIT_SPREAD,1) + +/datum/seed/cherries/cherrybomb + name = "cherrybomb" + seed_name = "cherrybomb" + seed_noun = "pits" + display_name = "cherry bomb tree" + chems = list("nutriment" = list(1,15), "neoliquidfire" = list(1,15), "cherryjelly" = list(10,15)) + +/datum/seed/cherries/cherrybomb/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#993399") + set_trait(TRAIT_BIOLUM,1) + set_trait(TRAIT_BIOLUM_COLOUR,"#993399") + +/datum/seed/citrus/orange/livewireorange + name = "livewireorange" + seed_name = "livewireorange" + seed_noun = "livewireorange" + display_name = "livewire orange tree" + chems = list("nutriment" = list(1,15), "liquidlife" = list(1,15), "orangejuice" = list(10,15)) + +/datum/seed/citrus/orange/nuclearorange + name = "nuclearorange" + seed_name = "nuclearorange" + seed_noun = "nuclearorange" + display_name = "nuclear orange tree" chems = list("nutriment" = list(1,15), "deathblood" = list(1,15), "lemonjuice" = list(10,15)) \ No newline at end of file diff --git a/modular_chomp/code/modules/materials/materials/gems.dm b/modular_chomp/code/modules/materials/materials/gems.dm index 88fc2e4a5d..be79be43ce 100644 --- a/modular_chomp/code/modules/materials/materials/gems.dm +++ b/modular_chomp/code/modules/materials/materials/gems.dm @@ -1,7 +1,7 @@ -/datum/material/valhollide //buffed protection and reflectivity - protectiveness = 70 - reflectivity = 0.75 - - -/datum/material/morphium //buffed protection +/datum/material/valhollide //buffed protection and reflectivity + protectiveness = 70 + reflectivity = 0.75 + + +/datum/material/morphium //buffed protection protectiveness = 65 \ No newline at end of file diff --git a/modular_chomp/code/modules/materials/materials/metals/metals.dm b/modular_chomp/code/modules/materials/materials/metals/metals.dm index 1a003e6fc0..1f956b143d 100644 --- a/modular_chomp/code/modules/materials/materials/metals/metals.dm +++ b/modular_chomp/code/modules/materials/materials/metals/metals.dm @@ -1,53 +1,53 @@ -/datum/material/durasteel //Slightly nerfed protectivness - protectiveness = 55 - -/datum/material/titanium //Adjusted hardness, reflective, and protection - hardness = 60 - protectiveness = 30 - reflectivity = 0.3 - - -/datum/material/iron //Adjusted hardness, reflective, and protection - hardness = 70 - protectiveness = 20 - reflectivity = 0.1 - - -/datum/material/lead //Adjusted hardness, reflective, and protection - hardness = 60 - protectiveness = 15 - reflectivity = 0.1 - - -/datum/material/gold //Adjusted reflective, and protection - hardness = 50 - protectiveness = 30 - reflectivity = 0.05 - - -/datum/material/silver //Adjusted reflective, and protection - hardness = 60 - protectiveness = 30 - reflectivity = 0.2 - - -/datum/material/platinum //Adjusted hardness, reflective, and protection - hardness = 60 - protectiveness = 30 - reflectivity = 0.0 - -/datum/material/uranium //Adjusted hardness, reflective, and protection - hardness = 70 - protectiveness = 30 - reflectivity = 0.5 - -/datum/material/mhydrogen //Adjusted hardness, reflective, and protection. And weight. - hardness = 75 - protectiveness = 40 - reflectivity = 0.4 - weight = 5 - -/datum/material/osmium //Adjusted hardness, reflective, and protection - hardness = 65 - protectiveness = 30 +/datum/material/durasteel //Slightly nerfed protectivness + protectiveness = 55 + +/datum/material/titanium //Adjusted hardness, reflective, and protection + hardness = 60 + protectiveness = 30 + reflectivity = 0.3 + + +/datum/material/iron //Adjusted hardness, reflective, and protection + hardness = 70 + protectiveness = 20 + reflectivity = 0.1 + + +/datum/material/lead //Adjusted hardness, reflective, and protection + hardness = 60 + protectiveness = 15 + reflectivity = 0.1 + + +/datum/material/gold //Adjusted reflective, and protection + hardness = 50 + protectiveness = 30 + reflectivity = 0.05 + + +/datum/material/silver //Adjusted reflective, and protection + hardness = 60 + protectiveness = 30 + reflectivity = 0.2 + + +/datum/material/platinum //Adjusted hardness, reflective, and protection + hardness = 60 + protectiveness = 30 + reflectivity = 0.0 + +/datum/material/uranium //Adjusted hardness, reflective, and protection + hardness = 70 + protectiveness = 30 + reflectivity = 0.5 + +/datum/material/mhydrogen //Adjusted hardness, reflective, and protection. And weight. + hardness = 75 + protectiveness = 40 + reflectivity = 0.4 + weight = 5 + +/datum/material/osmium //Adjusted hardness, reflective, and protection + hardness = 65 + protectiveness = 30 reflectivity = 0.1 \ No newline at end of file diff --git a/modular_chomp/code/modules/materials/materials/organic/animal_products.dm b/modular_chomp/code/modules/materials/materials/organic/animal_products.dm index 84dfb29d49..5ba22a5bec 100644 --- a/modular_chomp/code/modules/materials/materials/organic/animal_products.dm +++ b/modular_chomp/code/modules/materials/materials/organic/animal_products.dm @@ -1,44 +1,44 @@ -/datum/material/chitin - protectiveness = 25 - reflectivity = 0.05 - - -/datum/material/deathclawscale - name = "deathclaw scale" - icon_colour = "#8d6653" - icon_base = "solid" - icon_reinf = "reinf_mesh" - hardness = 50 - protectiveness = 40 - reflectivity = 0.4 - conductivity = 1 - -/datum/material/dragonscale - name = "dragon scale" - icon_colour = "#ffffff" - icon_base = "solid" - icon_reinf = "reinf_mesh" - hardness = 50 - protectiveness = 75 - reflectivity = 0.6 - conductivity = 1 - -/datum/material/phorondragonscale - name = "phoron dragon scale" - icon_colour = "#8d6653" - icon_base = "solid" - icon_reinf = "reinf_mesh" - hardness = 10 - protectiveness = 80 - reflectivity = 0.8 - conductivity = 1 - -/datum/material/xenochitin - name = "xenochitin" - icon_colour = "#8d6653" - icon_base = "solid" - icon_reinf = "reinf_mesh" - hardness = 40 - protectiveness = 40 - reflectivity = 0.6 +/datum/material/chitin + protectiveness = 25 + reflectivity = 0.05 + + +/datum/material/deathclawscale + name = "deathclaw scale" + icon_colour = "#8d6653" + icon_base = "solid" + icon_reinf = "reinf_mesh" + hardness = 50 + protectiveness = 40 + reflectivity = 0.4 + conductivity = 1 + +/datum/material/dragonscale + name = "dragon scale" + icon_colour = "#ffffff" + icon_base = "solid" + icon_reinf = "reinf_mesh" + hardness = 50 + protectiveness = 75 + reflectivity = 0.6 + conductivity = 1 + +/datum/material/phorondragonscale + name = "phoron dragon scale" + icon_colour = "#8d6653" + icon_base = "solid" + icon_reinf = "reinf_mesh" + hardness = 10 + protectiveness = 80 + reflectivity = 0.8 + conductivity = 1 + +/datum/material/xenochitin + name = "xenochitin" + icon_colour = "#8d6653" + icon_base = "solid" + icon_reinf = "reinf_mesh" + hardness = 40 + protectiveness = 40 + reflectivity = 0.6 conductivity = 0.5 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm index 84538fb4e5..b316dd18de 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm @@ -1,58 +1,58 @@ -/datum/species - var/crit_mod = 1 - var/vore_belly_default_variant = "H" - var/list/env_traits = list() - var/dirtslip = FALSE - var/photosynthesizing = FALSE - var/grows = FALSE - var/shrinks = FALSE - var/rad_levels = list("safe" = 2.5, "danger_1" = 50, "danger_2" = 75, "danger_3" = 150) - var/rad_removal_mod = 1 - var/bite_mod = 1 - var/grab_resist_divisor_victims = 1 - var/grab_resist_divisor_self = 1 - var/grab_power_victims = 0 - var/grab_power_self = 0 - var/waking_speed = 1 - var/mudking = FALSE - var/vanity_base_fit //when shapeshifting using vanity_copy_to, this allows you to have add something so they can go back to their original species fit - -// Handles non-standard eyes when using a species that utilizes a custom base icon set. -// Eye data is stored in the head organ, and this needs to be handled specially. -/datum/species/proc/handle_base_eyes(var/mob/living/carbon/human/H, var/custom_base) - if(selects_bodytype && custom_base) // only bother if our src species datum allows bases and one is assigned - var/datum/species/S = GLOB.all_species[custom_base] - - //extract default eye data from species datum - var/baseHeadPath = S.has_limbs[BP_HEAD]["path"] //has_limbs is a list of lists - - if(!baseHeadPath) - return // exit if we couldn't find a head path from the base. - - var/obj/item/organ/external/head/baseHead = new baseHeadPath() - if(!baseHead) - return // exit if we didn't create the base properly - - var/obj/item/organ/external/head/targetHead = H.get_organ(BP_HEAD) - if(!targetHead) - return // don't bother if target mob has no head for whatever reason - - targetHead.eye_icon = baseHead.eye_icon - targetHead.eye_icon_location = baseHead.eye_icon_location - - if(!QDELETED(baseHead) && baseHead) - qdel(baseHead) - return - -/datum/species/handle_environment_special(var/mob/living/carbon/human/H) - for(var/datum/trait/env_trait in env_traits) - env_trait.handle_environment_special(H) - return - -/datum/species/proc/update_vore_belly_def_variant() - // Determine the actual vore_belly_default_variant, if the base species in the VORE tab is set - switch (base_species) - if("Teshari") - vore_belly_default_variant = "T" - if("Unathi") - vore_belly_default_variant = "L" +/datum/species + var/crit_mod = 1 + var/vore_belly_default_variant = "H" + var/list/env_traits = list() + var/dirtslip = FALSE + var/photosynthesizing = FALSE + var/grows = FALSE + var/shrinks = FALSE + var/rad_levels = list("safe" = 2.5, "danger_1" = 50, "danger_2" = 75, "danger_3" = 150) + var/rad_removal_mod = 1 + var/bite_mod = 1 + var/grab_resist_divisor_victims = 1 + var/grab_resist_divisor_self = 1 + var/grab_power_victims = 0 + var/grab_power_self = 0 + var/waking_speed = 1 + var/mudking = FALSE + var/vanity_base_fit //when shapeshifting using vanity_copy_to, this allows you to have add something so they can go back to their original species fit + +// Handles non-standard eyes when using a species that utilizes a custom base icon set. +// Eye data is stored in the head organ, and this needs to be handled specially. +/datum/species/proc/handle_base_eyes(var/mob/living/carbon/human/H, var/custom_base) + if(selects_bodytype && custom_base) // only bother if our src species datum allows bases and one is assigned + var/datum/species/S = GLOB.all_species[custom_base] + + //extract default eye data from species datum + var/baseHeadPath = S.has_limbs[BP_HEAD]["path"] //has_limbs is a list of lists + + if(!baseHeadPath) + return // exit if we couldn't find a head path from the base. + + var/obj/item/organ/external/head/baseHead = new baseHeadPath() + if(!baseHead) + return // exit if we didn't create the base properly + + var/obj/item/organ/external/head/targetHead = H.get_organ(BP_HEAD) + if(!targetHead) + return // don't bother if target mob has no head for whatever reason + + targetHead.eye_icon = baseHead.eye_icon + targetHead.eye_icon_location = baseHead.eye_icon_location + + if(!QDELETED(baseHead) && baseHead) + qdel(baseHead) + return + +/datum/species/handle_environment_special(var/mob/living/carbon/human/H) + for(var/datum/trait/env_trait in env_traits) + env_trait.handle_environment_special(H) + return + +/datum/species/proc/update_vore_belly_def_variant() + // Determine the actual vore_belly_default_variant, if the base species in the VORE tab is set + switch (base_species) + if("Teshari") + vore_belly_default_variant = "T" + if("Unathi") + vore_belly_default_variant = "L" diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm index b34f5aa8cf..4b07a1f70f 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm @@ -1,55 +1,55 @@ -//Any species commented out here must be made restricted elsewhere. They are kept here for easy reference of what we disabled. -//Note that at the time of this PR we are simply disabling everything new to discuss keeping versus scrapping later. - -/datum/species - var/pain_verb_1p = list("shout", "growl", "grunt", "gasp") - var/pain_verb_3p = list("shouts", "growls", "grunts", "gasps") - -///datum/species/zaddat -// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled elsewhere. - -///datum/species/crew_shadekin -// spawn_flags = SPECIES_IS_RESTRICTED - -/datum/species/human/gravworlder - spawn_flags = SPECIES_IS_RESTRICTED - -/datum/species/human/spacer - spawn_flags = SPECIES_IS_RESTRICTED - -///datum/species/alraune -// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled, keeping this here for reference. - -///datum/species/werebeast -// spawn_flags = SPECIES_IS_RESTRICTED - -/datum/species/shadekin_yw - spawn_flags = SPECIES_IS_RESTRICTED - -/datum/species/shadekin - //spawn_flags = SPECIES_IS_RESTRICTED - -//datum/species/protean -// spawn_flags = SPECIES_IS_RESTRICTED - -//TFF 20/1/20 - More whitelisted species listed here. Unable to force overrides to be enabled here. -/* -/datum/species/xenochimera - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE - -/datum/species/diona - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE - -/datum/species/vox - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE -*/ - -//Can use digitigrade flags -/datum/species/shapeshifter/promethean - digi_allowed = TRUE - -/datum/species/unathi - vore_belly_default_variant = "L" - -/datum/species/protean - digi_allowed = TRUE +//Any species commented out here must be made restricted elsewhere. They are kept here for easy reference of what we disabled. +//Note that at the time of this PR we are simply disabling everything new to discuss keeping versus scrapping later. + +/datum/species + var/pain_verb_1p = list("shout", "growl", "grunt", "gasp") + var/pain_verb_3p = list("shouts", "growls", "grunts", "gasps") + +///datum/species/zaddat +// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled elsewhere. + +///datum/species/crew_shadekin +// spawn_flags = SPECIES_IS_RESTRICTED + +/datum/species/human/gravworlder + spawn_flags = SPECIES_IS_RESTRICTED + +/datum/species/human/spacer + spawn_flags = SPECIES_IS_RESTRICTED + +///datum/species/alraune +// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled, keeping this here for reference. + +///datum/species/werebeast +// spawn_flags = SPECIES_IS_RESTRICTED + +/datum/species/shadekin_yw + spawn_flags = SPECIES_IS_RESTRICTED + +/datum/species/shadekin + //spawn_flags = SPECIES_IS_RESTRICTED + +//datum/species/protean +// spawn_flags = SPECIES_IS_RESTRICTED + +//TFF 20/1/20 - More whitelisted species listed here. Unable to force overrides to be enabled here. +/* +/datum/species/xenochimera + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE + +/datum/species/diona + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE + +/datum/species/vox + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE +*/ + +//Can use digitigrade flags +/datum/species/shapeshifter/promethean + digi_allowed = TRUE + +/datum/species/unathi + vore_belly_default_variant = "L" + +/datum/species/protean + digi_allowed = TRUE diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm index e6f693ed16..f3376a2261 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm @@ -1,297 +1,297 @@ -//There is already a station file, but feels wrong to put zaddat balancing changes with the restriction file, and feels wrong to lump them in with a modular station_vr so hello station_ch file - -/datum/species/zaddat - toxins_mod = 0.5 //toxins rarely come into play, and zaddat just has negatives. Along with their parasite letting them survive in their polluted planet, this seems reasonable. - -//So both of this are based off Fennec foxes I belivive. Those are desert critters, giving them more warm focused levels. And for variety giving them minor brute weakness and minor burn resistant -//I also want to make a dig because fennec foxes actually make burrows and such, but I can't figure out how to do it in a way that is both flavorful but not abuseable -/datum/species/hi_zoxxen //zorrens get wierd chemistry because of their past of expirementing on themselves. Check the cataloguer for deathclaws - chemOD_threshold = 0.75 - radiation_mod = 0.5 - brute_mod = 1.1 - burn_mod = 0.9 - - cold_level_1 = 270 //Default 260 - Lower is better - cold_level_2 = 210 //Default 200 - cold_level_3 = 120 //Default 120 - - breath_cold_level_1 = 250 //Default 240 - Lower is better - breath_cold_level_2 = 190 //Default 180 - breath_cold_level_3 = 100 //Default 100 - - heat_level_1 = 400 //Default 360 - Higher is better - heat_level_2 = 460 //Default 400 - heat_level_3 = 1080 //Default 1000 - - breath_heat_level_1 = 430 //Default 380 - Higher is better - breath_heat_level_2 = 510 //Default 450 - breath_heat_level_3 = 1200 //Default 1250 - -/datum/species/fl_zorren - item_slowdown_mod = 1.2 - slowdown = -0.2 - brute_mod = 1.1 - burn_mod = 0.9 - - cold_level_1 = 270 //Default 260 - Lower is better - cold_level_2 = 210 //Default 200 - cold_level_3 = 120 //Default 120 - - breath_cold_level_1 = 250 //Default 240 - Lower is better - breath_cold_level_2 = 190 //Default 180 - breath_cold_level_3 = 100 //Default 100 - - heat_level_1 = 400 //Default 360 - Higher is better - heat_level_2 = 460 //Default 400 - heat_level_3 = 1080 //Default 1000 - - breath_heat_level_1 = 430 //Default 380 - Higher is better - breath_heat_level_2 = 510 //Default 450 - breath_heat_level_3 = 1200 //Default 1250 - - -/datum/species/xenomorph_hybrid - name = SPECIES_XENOMORPH_HYBRID - name_plural = "Xenomorph Hybrids" - icobase = 'icons/mob/human_races/r_xenomorph_hybrid.dmi' - deform = 'icons/mob/human_races/r_xenomorph_hybrid.dmi' - tail = "tail" - icobase_tail = 1 - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong/xeno, /datum/unarmed_attack/bite/strong/xeno) // Innate claws and bite. - darksight = 8 // Same as Tajarans. - ambiguous_genders = TRUE - slowdown = -0.2 // Slightly faster than average. - total_health = 150 // Takes a lot of effort to take a Xenomorph down. - brute_mod = 0.9 // Physical damage doesn't phase them as much. - burn_mod = 1.4 // They do NOT like fire. - toxins_mod = 0.9 // Slightly resistant to toxins. - radiation_mod = 0.9 // Somewhat resistant to radiation exposure. - flash_mod = 1.2 // Flashes are more effective. - metabolic_rate = 1.2 // Very physically active species, thus requiring more nutritional intake. - item_slowdown_mod = 0.9 // They carry heavy things slightly better. - mob_size = MOB_MEDIUM // Technically doesn't even need this but still adding the override just in case. - blood_volume = 640 // More blood to compound their high health. - bloodloss_rate = 1 // Bleed normally. - num_alternate_languages = 3 - name_language = LANGUAGE_XENOLINGUA - species_language = LANGUAGE_XENOLINGUA - secondary_langs = list(LANGUAGE_XENOLINGUA, LANGUAGE_HIVEMIND) - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN) // Can use the Hivemind language. - color_mult = 1 - health_hud_intensity = 1.5 - chem_strength_alcohol = 1.2 // They don't handle their drinks very well. - throwforce_absorb_threshold = 10 // Thrown objects don't do as much. - - economic_modifier = 5 // While they aren't true Xenomorphs, they still draw a lot of social stigma, and are generally mistreated and underpaid as a result. - rarity_value = 4 // Very rare to find these guys on human stations. - - spawn_flags = SPECIES_CAN_JOIN - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - - flesh_color = "##242424" - blood_color = "##00C202" - base_color = "##242424" - - blurb = "Xenomorph Hybrids are a strange amalgamation of xenomorph and alternative-species DNA of \ - disputed origin. While hybrids share many traits with their species's namesake, the vast majority \ - are no less docile or aggressive than the vast majority of spacefaring races. Even still, their unsettling appearance, \ - demeanour and innate xenomorph-inherited abilities are enough to draw widespread ire and distrust." - - min_age = 18 - max_age = 150 - - move_trail = /obj/effect/decal/cleanable/blood/tracks/claw - digi_allowed = TRUE - icodigi = 'icons/mob/human_races/r_digi_xeno.dmi' - - species_sounds = "Xeno" - gender_specific_species_sounds = FALSE - - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - - // Some Xeno parts included. - has_organ = list( - O_HEART = /obj/item/organ/internal/heart/grey/colormatch, - O_LUNGS = /obj/item/organ/internal/lungs/grey/colormatch, - O_LIVER = /obj/item/organ/internal/liver/grey/colormatch, - O_BRAIN = /obj/item/organ/internal/brain/grey/colormatch, - O_EYES = /obj/item/organ/internal/eyes/grey/colormatch, - O_KIDNEYS = /obj/item/organ/internal/kidneys/grey/colormatch, - O_STOMACH = /obj/item/organ/internal/stomach, - O_INTESTINE = /obj/item/organ/internal/intestine, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/weak, // Less plasma capacity. - O_HIVE = /obj/item/organ/internal/xenos/hivenode, // Lets them speak Hivemind and open resin doors. - O_RESIN = /obj/item/organ/internal/xenos/resinspinner/weak, // Weaker weed nodes with less spread range. - O_EGG = /obj/item/organ/internal/xenos/eggsac // Fluff organ. - ) - - - heat_discomfort_level = 303.15 // 30 Celsius, not so comfortable in high temperatures. - heat_discomfort_strings = list( - "Our carapace bristles in the heat." - ) - - cold_discomfort_level = 253.15 // -20 Celsius, very comfortable in below freezing temperatures. - cold_discomfort_strings = list( - "The cold bites through our carapace." - ) - - var/weeds_plasma_rate = 3 // Plasma regen. Much lower than actual xenos. Faster on weeds. - var/weeds_heal_rate = 0.5 // Health regen on weeds. No healing unless resting. - -/datum/species/xenomorph_hybrid/handle_environment_special(var/mob/living/carbon/human/H) - - var/turf/T = H.loc - if(!T) return - var/datum/gas_mixture/environment = T.return_air() - if(!environment) return - - if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T) - if(!regenerate(H)) - var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA] - P.stored_plasma += weeds_plasma_rate - P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma) - ..() - -/datum/species/xenomorph_hybrid/proc/regenerate(var/mob/living/carbon/human/H) - var/heal_rate = weeds_heal_rate - var/mend_prob = 5 // Much lower than regular xenos. - if (!H.resting) - heal_rate = 0 // No passive health regen without resting. - mend_prob = 0 // No passive health regen without resting. - - // First, heal internal organs. - for(var/obj/item/organ/I in H.internal_organs) - if(I.damage > 0) - I.damage = max(I.damage - heal_rate, 0) - if (prob(5)) - to_chat(H, "We feel a soothing sensation within our [I.parent_organ]...") - return 1 - - // Next, heal external damage. - if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) - H.adjustBruteLoss(-heal_rate) - H.adjustFireLoss(-heal_rate) - H.adjustOxyLoss(-heal_rate) - H.adjustToxLoss(-heal_rate) - if (prob(5)) - to_chat(H, "A soothing sensation falls over us...") - return 1 - - // Lastly, mend broken bones. May remove this if it's abused. - for(var/obj/item/organ/external/E in H.bad_external_organs) - if (E.status & ORGAN_BROKEN) - if (prob(mend_prob)) - if (E.mend_fracture()) - to_chat(H, "We feel something mend within our [E.name].") - return 1 - - return 0 - -/// WEAKER XENOMORPH HYBRID ABILITIES / ORGANS. /// - -// ABILITIES // - -/mob/living/carbon/human/proc/plant_weak() - set name = "Plant Weeds (150)" - set desc = "Plants some alien weeds." - set category = "Abilities" - - if(check_alien_ability(150,1,O_RESIN)) - visible_message("[src] has planted some alien weeds!") - new /obj/effect/alien/weeds/node/weak(get_turf(src), null, "#321D37") // Aliens.dm for weed node origin. - playsound(src, 'sound/effects/blobattack.ogg', 40, 1) - return - -/mob/living/carbon/human/proc/check_plasma_amount(mob/living/carbon/human/M as mob) - set name = "Check Plasma Reserves" - set category = "Abilities" - - var/obj/item/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name[O_PLASMA] - if(!istype(I)) - to_chat(src, "Our plasma vessel is missing!") - return - - to_chat(src, "Our plasma reserves are at [I.stored_plasma]/[I.max_plasma].") - return 0 - -/mob/living/carbon/human/proc/resin_weak() // Technically stronger in some aspects. - set name = "Secrete Resin (25)" - set desc = "Secrete tough, malleable resin in front of us." - set category = "Abilities" - - var/list/options = list("resin door","resin wall","resin membrane","nest","resin blob") - for(var/option in options) - LAZYSET(options, option, new /image('icons/mob/alien.dmi', option)) // based off 'icons/effects/thinktank_labels.dmi' - - var/choice = show_radial_menu(src, src, options, radius = 42, require_near = TRUE) - - if(!choice || QDELETED(src) || src.incapacitated()) - return FALSE - - var/targetLoc = get_step(src, dir) - - if(iswall(targetLoc)) - targetLoc = get_turf(src) - - var/obj/O - - switch(choice) - if("resin door") - if(!check_alien_ability(25,1,O_RESIN)) - return - else O = new /obj/structure/simple_door/resin(targetLoc) - if("resin wall") - if(!check_alien_ability(25,1,O_RESIN)) - return - else O = new /obj/structure/alien/wall(targetLoc) - if("resin membrane") - if(!check_alien_ability(25,1,O_RESIN)) - return - else O = new /obj/structure/alien/membrane(targetLoc) - if("nest") - if(!check_alien_ability(25,1,O_RESIN)) - return - else O = new /obj/structure/bed/nest(targetLoc) - if("resin blob") - if(!check_alien_ability(25,1,O_RESIN)) - return - else O = new /obj/item/stack/material/resin(targetLoc) - - if(O) - visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") -// O.color = "#321D37" // Adding predefined colour icons. - playsound(src, 'sound/effects/blobattack.ogg', 40, 1) - - return - -// ORGANS // - -/obj/item/organ/internal/xenos/resinspinner/weak - name = "hybrid resin spinner" - parent_organ = BP_HEAD - icon_state = "xenode" - organ_tag = O_RESIN - - organ_verbs = list( - /mob/living/carbon/human/proc/resin_weak, - /mob/living/carbon/human/proc/plant_weak, - /mob/living/carbon/human/proc/check_plasma_amount - ) - -/obj/item/organ/internal/xenos/plasmavessel/weak - name = "hybrid plasma vessel" - stored_plasma = 250 // Starts with max plasma. - max_plasma = 250 // Maximum of 250 plasma stored at any one time. Drones normally have 500. +//There is already a station file, but feels wrong to put zaddat balancing changes with the restriction file, and feels wrong to lump them in with a modular station_vr so hello station_ch file + +/datum/species/zaddat + toxins_mod = 0.5 //toxins rarely come into play, and zaddat just has negatives. Along with their parasite letting them survive in their polluted planet, this seems reasonable. + +//So both of this are based off Fennec foxes I belivive. Those are desert critters, giving them more warm focused levels. And for variety giving them minor brute weakness and minor burn resistant +//I also want to make a dig because fennec foxes actually make burrows and such, but I can't figure out how to do it in a way that is both flavorful but not abuseable +/datum/species/hi_zoxxen //zorrens get wierd chemistry because of their past of expirementing on themselves. Check the cataloguer for deathclaws + chemOD_threshold = 0.75 + radiation_mod = 0.5 + brute_mod = 1.1 + burn_mod = 0.9 + + cold_level_1 = 270 //Default 260 - Lower is better + cold_level_2 = 210 //Default 200 + cold_level_3 = 120 //Default 120 + + breath_cold_level_1 = 250 //Default 240 - Lower is better + breath_cold_level_2 = 190 //Default 180 + breath_cold_level_3 = 100 //Default 100 + + heat_level_1 = 400 //Default 360 - Higher is better + heat_level_2 = 460 //Default 400 + heat_level_3 = 1080 //Default 1000 + + breath_heat_level_1 = 430 //Default 380 - Higher is better + breath_heat_level_2 = 510 //Default 450 + breath_heat_level_3 = 1200 //Default 1250 + +/datum/species/fl_zorren + item_slowdown_mod = 1.2 + slowdown = -0.2 + brute_mod = 1.1 + burn_mod = 0.9 + + cold_level_1 = 270 //Default 260 - Lower is better + cold_level_2 = 210 //Default 200 + cold_level_3 = 120 //Default 120 + + breath_cold_level_1 = 250 //Default 240 - Lower is better + breath_cold_level_2 = 190 //Default 180 + breath_cold_level_3 = 100 //Default 100 + + heat_level_1 = 400 //Default 360 - Higher is better + heat_level_2 = 460 //Default 400 + heat_level_3 = 1080 //Default 1000 + + breath_heat_level_1 = 430 //Default 380 - Higher is better + breath_heat_level_2 = 510 //Default 450 + breath_heat_level_3 = 1200 //Default 1250 + + +/datum/species/xenomorph_hybrid + name = SPECIES_XENOMORPH_HYBRID + name_plural = "Xenomorph Hybrids" + icobase = 'icons/mob/human_races/r_xenomorph_hybrid.dmi' + deform = 'icons/mob/human_races/r_xenomorph_hybrid.dmi' + tail = "tail" + icobase_tail = 1 + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong/xeno, /datum/unarmed_attack/bite/strong/xeno) // Innate claws and bite. + darksight = 8 // Same as Tajarans. + ambiguous_genders = TRUE + slowdown = -0.2 // Slightly faster than average. + total_health = 150 // Takes a lot of effort to take a Xenomorph down. + brute_mod = 0.9 // Physical damage doesn't phase them as much. + burn_mod = 1.4 // They do NOT like fire. + toxins_mod = 0.9 // Slightly resistant to toxins. + radiation_mod = 0.9 // Somewhat resistant to radiation exposure. + flash_mod = 1.2 // Flashes are more effective. + metabolic_rate = 1.2 // Very physically active species, thus requiring more nutritional intake. + item_slowdown_mod = 0.9 // They carry heavy things slightly better. + mob_size = MOB_MEDIUM // Technically doesn't even need this but still adding the override just in case. + blood_volume = 640 // More blood to compound their high health. + bloodloss_rate = 1 // Bleed normally. + num_alternate_languages = 3 + name_language = LANGUAGE_XENOLINGUA + species_language = LANGUAGE_XENOLINGUA + secondary_langs = list(LANGUAGE_XENOLINGUA, LANGUAGE_HIVEMIND) + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN) // Can use the Hivemind language. + color_mult = 1 + health_hud_intensity = 1.5 + chem_strength_alcohol = 1.2 // They don't handle their drinks very well. + throwforce_absorb_threshold = 10 // Thrown objects don't do as much. + + economic_modifier = 5 // While they aren't true Xenomorphs, they still draw a lot of social stigma, and are generally mistreated and underpaid as a result. + rarity_value = 4 // Very rare to find these guys on human stations. + + spawn_flags = SPECIES_CAN_JOIN + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "##242424" + blood_color = "##00C202" + base_color = "##242424" + + blurb = "Xenomorph Hybrids are a strange amalgamation of xenomorph and alternative-species DNA of \ + disputed origin. While hybrids share many traits with their species's namesake, the vast majority \ + are no less docile or aggressive than the vast majority of spacefaring races. Even still, their unsettling appearance, \ + demeanour and innate xenomorph-inherited abilities are enough to draw widespread ire and distrust." + + min_age = 18 + max_age = 150 + + move_trail = /obj/effect/decal/cleanable/blood/tracks/claw + digi_allowed = TRUE + icodigi = 'icons/mob/human_races/r_digi_xeno.dmi' + + species_sounds = "Xeno" + gender_specific_species_sounds = FALSE + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + + // Some Xeno parts included. + has_organ = list( + O_HEART = /obj/item/organ/internal/heart/grey/colormatch, + O_LUNGS = /obj/item/organ/internal/lungs/grey/colormatch, + O_LIVER = /obj/item/organ/internal/liver/grey/colormatch, + O_BRAIN = /obj/item/organ/internal/brain/grey/colormatch, + O_EYES = /obj/item/organ/internal/eyes/grey/colormatch, + O_KIDNEYS = /obj/item/organ/internal/kidneys/grey/colormatch, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine, + O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/weak, // Less plasma capacity. + O_HIVE = /obj/item/organ/internal/xenos/hivenode, // Lets them speak Hivemind and open resin doors. + O_RESIN = /obj/item/organ/internal/xenos/resinspinner/weak, // Weaker weed nodes with less spread range. + O_EGG = /obj/item/organ/internal/xenos/eggsac // Fluff organ. + ) + + + heat_discomfort_level = 303.15 // 30 Celsius, not so comfortable in high temperatures. + heat_discomfort_strings = list( + "Our carapace bristles in the heat." + ) + + cold_discomfort_level = 253.15 // -20 Celsius, very comfortable in below freezing temperatures. + cold_discomfort_strings = list( + "The cold bites through our carapace." + ) + + var/weeds_plasma_rate = 3 // Plasma regen. Much lower than actual xenos. Faster on weeds. + var/weeds_heal_rate = 0.5 // Health regen on weeds. No healing unless resting. + +/datum/species/xenomorph_hybrid/handle_environment_special(var/mob/living/carbon/human/H) + + var/turf/T = H.loc + if(!T) return + var/datum/gas_mixture/environment = T.return_air() + if(!environment) return + + if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T) + if(!regenerate(H)) + var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA] + P.stored_plasma += weeds_plasma_rate + P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma) + ..() + +/datum/species/xenomorph_hybrid/proc/regenerate(var/mob/living/carbon/human/H) + var/heal_rate = weeds_heal_rate + var/mend_prob = 5 // Much lower than regular xenos. + if (!H.resting) + heal_rate = 0 // No passive health regen without resting. + mend_prob = 0 // No passive health regen without resting. + + // First, heal internal organs. + for(var/obj/item/organ/I in H.internal_organs) + if(I.damage > 0) + I.damage = max(I.damage - heal_rate, 0) + if (prob(5)) + to_chat(H, "We feel a soothing sensation within our [I.parent_organ]...") + return 1 + + // Next, heal external damage. + if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) + H.adjustBruteLoss(-heal_rate) + H.adjustFireLoss(-heal_rate) + H.adjustOxyLoss(-heal_rate) + H.adjustToxLoss(-heal_rate) + if (prob(5)) + to_chat(H, "A soothing sensation falls over us...") + return 1 + + // Lastly, mend broken bones. May remove this if it's abused. + for(var/obj/item/organ/external/E in H.bad_external_organs) + if (E.status & ORGAN_BROKEN) + if (prob(mend_prob)) + if (E.mend_fracture()) + to_chat(H, "We feel something mend within our [E.name].") + return 1 + + return 0 + +/// WEAKER XENOMORPH HYBRID ABILITIES / ORGANS. /// + +// ABILITIES // + +/mob/living/carbon/human/proc/plant_weak() + set name = "Plant Weeds (150)" + set desc = "Plants some alien weeds." + set category = "Abilities" + + if(check_alien_ability(150,1,O_RESIN)) + visible_message("[src] has planted some alien weeds!") + new /obj/effect/alien/weeds/node/weak(get_turf(src), null, "#321D37") // Aliens.dm for weed node origin. + playsound(src, 'sound/effects/blobattack.ogg', 40, 1) + return + +/mob/living/carbon/human/proc/check_plasma_amount(mob/living/carbon/human/M as mob) + set name = "Check Plasma Reserves" + set category = "Abilities" + + var/obj/item/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name[O_PLASMA] + if(!istype(I)) + to_chat(src, "Our plasma vessel is missing!") + return + + to_chat(src, "Our plasma reserves are at [I.stored_plasma]/[I.max_plasma].") + return 0 + +/mob/living/carbon/human/proc/resin_weak() // Technically stronger in some aspects. + set name = "Secrete Resin (25)" + set desc = "Secrete tough, malleable resin in front of us." + set category = "Abilities" + + var/list/options = list("resin door","resin wall","resin membrane","nest","resin blob") + for(var/option in options) + LAZYSET(options, option, new /image('icons/mob/alien.dmi', option)) // based off 'icons/effects/thinktank_labels.dmi' + + var/choice = show_radial_menu(src, src, options, radius = 42, require_near = TRUE) + + if(!choice || QDELETED(src) || src.incapacitated()) + return FALSE + + var/targetLoc = get_step(src, dir) + + if(iswall(targetLoc)) + targetLoc = get_turf(src) + + var/obj/O + + switch(choice) + if("resin door") + if(!check_alien_ability(25,1,O_RESIN)) + return + else O = new /obj/structure/simple_door/resin(targetLoc) + if("resin wall") + if(!check_alien_ability(25,1,O_RESIN)) + return + else O = new /obj/structure/alien/wall(targetLoc) + if("resin membrane") + if(!check_alien_ability(25,1,O_RESIN)) + return + else O = new /obj/structure/alien/membrane(targetLoc) + if("nest") + if(!check_alien_ability(25,1,O_RESIN)) + return + else O = new /obj/structure/bed/nest(targetLoc) + if("resin blob") + if(!check_alien_ability(25,1,O_RESIN)) + return + else O = new /obj/item/stack/material/resin(targetLoc) + + if(O) + visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") +// O.color = "#321D37" // Adding predefined colour icons. + playsound(src, 'sound/effects/blobattack.ogg', 40, 1) + + return + +// ORGANS // + +/obj/item/organ/internal/xenos/resinspinner/weak + name = "hybrid resin spinner" + parent_organ = BP_HEAD + icon_state = "xenode" + organ_tag = O_RESIN + + organ_verbs = list( + /mob/living/carbon/human/proc/resin_weak, + /mob/living/carbon/human/proc/plant_weak, + /mob/living/carbon/human/proc/check_plasma_amount + ) + +/obj/item/organ/internal/xenos/plasmavessel/weak + name = "hybrid plasma vessel" + stored_plasma = 250 // Starts with max plasma. + max_plasma = 250 // Maximum of 250 plasma stored at any one time. Drones normally have 500. diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/negative.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/negative.dm index 99129ec3ff..2f8284734e 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/negative.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/negative.dm @@ -1,13 +1,13 @@ -/datum/trait/negative/deep_sleeper - custom_only = FALSE - -/datum/trait/negative/deep_breather - name ="Deep Breather" - desc = "You need more air for your lungs to properly work.." - cost = -1 - - custom_only = FALSE - can_take = ORGANICS - - var_changes = list("minimum_breath_pressure" = 18) +/datum/trait/negative/deep_sleeper + custom_only = FALSE + +/datum/trait/negative/deep_breather + name ="Deep Breather" + desc = "You need more air for your lungs to properly work.." + cost = -1 + + custom_only = FALSE + can_take = ORGANICS + + var_changes = list("minimum_breath_pressure" = 18) excludes = list(/datum/trait/positive/light_breather) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/positive.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/positive.dm index 1b61d88bda..ff0ab69b06 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/positive.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/traits/positive.dm @@ -1,18 +1,18 @@ -/datum/trait/neutral/hardfeet - custom_only = FALSE - -/datum/trait/positive/linguist - custom_only = FALSE - -/datum/trait/positive/toxin_gut - custom_only = FALSE - -/datum/trait/positive/light_breather - name ="Light Breather" - desc = "You need less air for your lungs to properly work.." - cost = 1 - - custom_only = FALSE - can_take = ORGANICS - var_changes = list("minimum_breath_pressure" = 12) +/datum/trait/neutral/hardfeet + custom_only = FALSE + +/datum/trait/positive/linguist + custom_only = FALSE + +/datum/trait/positive/toxin_gut + custom_only = FALSE + +/datum/trait/positive/light_breather + name ="Light Breather" + desc = "You need less air for your lungs to properly work.." + cost = 1 + + custom_only = FALSE + can_take = ORGANICS + var_changes = list("minimum_breath_pressure" = 12) excludes = list(/datum/trait/negative/deep_breather) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/modules/exploration.dm b/modular_chomp/code/modules/mob/living/silicon/robot/modules/exploration.dm index 34f5337c05..fe58123cfa 100644 --- a/modular_chomp/code/modules/mob/living/silicon/robot/modules/exploration.dm +++ b/modular_chomp/code/modules/mob/living/silicon/robot/modules/exploration.dm @@ -1,42 +1,42 @@ -/hook/startup/proc/Modular_Borg_init_Exploration() - robot_modules["Exploration"] = /obj/item/weapon/robot_module/robot/exploration //add to array - robot_module_types += "Exploration" //Add to global list - return 1 - -//Explo doggos -/obj/item/weapon/robot_module/robot/exploration - name = "exploration robot module" - channels = list("Explorer" = 1) - languages = list( - LANGUAGE_SOL_COMMON = 1, - LANGUAGE_UNATHI = 1, - LANGUAGE_SIIK = 1, - LANGUAGE_AKHANI = 1, - LANGUAGE_SKRELLIAN = 1, - LANGUAGE_SKRELLIANFAR = 0, - LANGUAGE_ROOTLOCAL = 0, - LANGUAGE_TRADEBAND = 1, - LANGUAGE_GUTTER = 0, - LANGUAGE_SCHECHI = 1, - LANGUAGE_EAL = 1, - LANGUAGE_TERMINUS = 1, - LANGUAGE_SIGN = 0 - ) - -/obj/item/weapon/robot_module/robot/exploration - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/device/dogborg/sleeper/exploration(src) - src.modules += new /obj/item/device/cataloguer(src) - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/flare(src) - src.modules += new /obj/item/weapon/dogborg/pounce(src) - src.modules += new /obj/item/weapon/melee/combat_borgblade/explotailspear(src) - src.modules += new /obj/item/weapon/gun/energy/medigun/mounted/smallmedigun(src) - src.modules += new /obj/item/shield_projector/line/exploborg(src) - src.modules += new /obj/item/roller_holder(src) - src.modules += new /obj/item/device/self_repair_system(src) - - src.emag += new /obj/item/weapon/melee/dogborg/jaws/big/explojaws(src) - - ..() +/hook/startup/proc/Modular_Borg_init_Exploration() + robot_modules["Exploration"] = /obj/item/weapon/robot_module/robot/exploration //add to array + robot_module_types += "Exploration" //Add to global list + return 1 + +//Explo doggos +/obj/item/weapon/robot_module/robot/exploration + name = "exploration robot module" + channels = list("Explorer" = 1) + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_SIIK = 1, + LANGUAGE_AKHANI = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_SKRELLIANFAR = 0, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_GUTTER = 0, + LANGUAGE_SCHECHI = 1, + LANGUAGE_EAL = 1, + LANGUAGE_TERMINUS = 1, + LANGUAGE_SIGN = 0 + ) + +/obj/item/weapon/robot_module/robot/exploration + can_be_pushed = 0 + +/obj/item/weapon/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/device/dogborg/sleeper/exploration(src) + src.modules += new /obj/item/device/cataloguer(src) + src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/flare(src) + src.modules += new /obj/item/weapon/dogborg/pounce(src) + src.modules += new /obj/item/weapon/melee/combat_borgblade/explotailspear(src) + src.modules += new /obj/item/weapon/gun/energy/medigun/mounted/smallmedigun(src) + src.modules += new /obj/item/shield_projector/line/exploborg(src) + src.modules += new /obj/item/roller_holder(src) + src.modules += new /obj/item/device/self_repair_system(src) + + src.emag += new /obj/item/weapon/melee/dogborg/jaws/big/explojaws(src) + + ..() diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index febfea2c97..60be844202 100644 --- a/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -1,3 +1,3 @@ -/datum/robot_sprite - var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper" - var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1 +/datum/robot_sprite + var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper" + var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1 diff --git a/modular_chomp/code/modules/mob/living/simple_mob/butchering.dm b/modular_chomp/code/modules/mob/living/simple_mob/butchering.dm index 957415fc12..7d835ead64 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/butchering.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/butchering.dm @@ -1,18 +1,18 @@ -//I don't know how to add more material currently so uhhh, that will be for late, did have some halffinished un commented code but that seemed to be causing issues? -/mob/living/simple_mob/vore/bigdragon - meat_type = /obj/item/weapon/reagent_containers/food/snacks/dragonmeat - -/mob/living/simple_mob/vore/aggressive/dragon/virgo3b //phoron dragon - meat_type = /obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat - -/mob/living/simple_mob/vore/aggressive/deathclaw - meat_type = /obj/item/weapon/reagent_containers/food/snacks/deathclawmeat - -/mob/living/simple_mob/metroid - meat_type = /obj/item/weapon/reagent_containers/food/snacks/metroidmeat - -/mob/living/simple_mob/metroid/can_butcher(var/mob/user, var/obj/item/I) // Override for special butchering checks. - . = ..() - - if(. && (!is_sharp(I) || !has_edge(I))) - return FALSE +//I don't know how to add more material currently so uhhh, that will be for late, did have some halffinished un commented code but that seemed to be causing issues? +/mob/living/simple_mob/vore/bigdragon + meat_type = /obj/item/weapon/reagent_containers/food/snacks/dragonmeat + +/mob/living/simple_mob/vore/aggressive/dragon/virgo3b //phoron dragon + meat_type = /obj/item/weapon/reagent_containers/food/snacks/phorondragonmeat + +/mob/living/simple_mob/vore/aggressive/deathclaw + meat_type = /obj/item/weapon/reagent_containers/food/snacks/deathclawmeat + +/mob/living/simple_mob/metroid + meat_type = /obj/item/weapon/reagent_containers/food/snacks/metroidmeat + +/mob/living/simple_mob/metroid/can_butcher(var/mob/user, var/obj/item/I) // Override for special butchering checks. + . = ..() + + if(. && (!is_sharp(I) || !has_edge(I))) + return FALSE diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm index e6780afcca..0112a061fb 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm @@ -1,210 +1,210 @@ -/mob/living/simple_mob/animal/space/alien - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 25 - melee_damage_upper = 25 - attack_armor_pen = 15 - -/mob/living/simple_mob/animal/space/alien/drone - health = 60 - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/animal/space/alien/sentinel - health = 120 - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian - maxHealth = 200 - health = 200 - -/mob/living/simple_mob/animal/space/alien/queen - health = 125 - maxHealth = 125 - melee_damage_lower = 7 - melee_damage_upper = 7 - -/mob/living/simple_mob/animal/space/alien/queen/empress - maxHealth = 200 - health = 200 - -/mob/living/simple_mob/animal/space/alien/queen/empress/mother - maxHealth = 300 - health = 300 - melee_damage_lower = 7 - melee_damage_upper = 12 - -//what are this things? -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/echo - name = "alien Echopraetorian" - color = "#424242" - health = 150 - maxHealth = 150 - needs_reload = 1 - projectiletype = /obj/item/projectile/sonic/strong - reload_time = 150 SECONDS - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/ion - name = "alien Ionic praetorian" - color = "#004cff" - armor = list(melee = 0,bullet = 25,laser = 0,energy = 0,bomb = 0,bio = 100,rad = 100) - health = 175 - maxHealth = 175 - needs_reload = 1 - projectiletype = /obj/item/projectile/arc/emp_blast - reload_time = 150 SECONDS - reload_max = 3 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - size_multiplier = 1.5 - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/blaze - name = "alien blazing praetorian" - color = "Red" - armor = list(melee = 0, bullet = 0, laser = 25, energy = 0, bomb = 0, bio = 100, rad = 100) - health = 225 - maxHealth = 225 - needs_reload = 1 - projectiletype = /obj/item/projectile/energy/fireball - reload_max = 3 - reload_time = 200 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/splat - name = "alien splattetorian" - color = "#a604b8" - needs_reload = 1 - projectiletype = /obj/item/projectile/energy/blob/acid/splattering - reload_max = 5 - reload_time = 150 - size_multiplier = 0.75 - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/tank - name = "alien Tankerling" - armor_soak = list(melee = -15, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) - base_attack_cooldown = 25 - color = "#ff8214" - health = 350 - maxHealth = 350 - melee_damage_lower = 12 - melee_damage_upper = 17 - movement_cooldown = 10 - movement_shake_radius = 7 - movement_sound = 'sound/weapons/heavysmash.ogg' - projectiletype = null - size_multiplier = 2 - -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/acid - projectiletype = /obj/item/projectile/energy/acid - -/mob/living/simple_mob/animal/space/alien/queen/empress/star - name = "alien Staticlisk" - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - armor_soak = list(melee = -10, bullet = 10, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) - base_attack_cooldown = 15 - color = "#38b9ff" - health = 250 - maxHealth = 250 - melee_damage_lower = 12 - melee_damage_upper = 25 - movement_cooldown = 12 - movement_shake_radius = 7 - needs_reload = 1 - projectilesound = null - projectiletype = /obj/item/projectile/beam/chain_lightning/lesser - reload_max = 3 - reload_time = 200 - size_multiplier = 1.5 - -/mob/living/simple_mob/animal/space/alien/queen/empress/tank - name = "alien tankerlisk" - armor_soak = list(melee = -10, bullet = 10, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) - base_attack_cooldown = 25 - color = "#4a4a4a" - health = 625 - maxHealth = 625 - melee_damage_lower = 12 - melee_damage_upper = 25 - movement_cooldown = 12 - movement_shake_radius = 7 - needs_reload = 1 - projectilesound = null - projectiletype = null - size_multiplier = 3 - -/mob/living/simple_mob/animal/space/alien/sentinel/electro - name = "alien Electrosentinel" - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - armor_soak = list(melee = 0, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) - color = "#ccff4a" - health = 100 - maxHealth = 100 - needs_reload = 1 - projectiletype = /obj/item/projectile/beam/stun/electric_spider - reload_max = 5 - reload_time = 150 - size_multiplier = 1.5 - -/mob/living/simple_mob/animal/space/alien/sentinel/pyro - name = "alien Pyrosentinel" - armor = list (melee = 0, bullet = 0, laser = 15, energy = 0, bomb = 0, bio = 100, rad = 100) - base_attack_cooldown = 15 - color = "#ff7373" - health = 125 - maxHealth = 125 - needs_reload = 1 - projectiletype = /obj/item/projectile/bullet/incendiary/dragonflame - reload_max = 2 - reload_time = 150 - -/mob/living/simple_mob/animal/space/alien/sentinel/cyro - name = "alien cryosentinel" - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - armor = list(melee = 0, bullet = 15, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) - color = "#4f83ff" - health = 100 - maxHealth = 100 - needs_reload = 1 - projectiletype = /obj/item/projectile/energy/blob/freezing/splattering - reload_max = 3 - reload_time = 100 - size_multiplier = 1.5 - -/mob/living/simple_mob/animal/space/alien/sentinel/acid - projectiletype = /obj/item/projectile/energy/acid - -/mob/living/simple_mob/animal/space/alien/tanky - health = 100 - maxHealth = 100 - -/mob/living/simple_mob/animal/space/alien/hunterling - name = "alien hunterling" - attack_armor_pen = 1 - base_attack_cooldown = 2 - color = "#1cbdff" - force_max_speed = 1 - health = 15 - maxHealth = 15 - melee_damage_lower = 1 - melee_damage_upper = 3 - size_multiplier = 0.5 - -/mob/living/simple_mob/animal/space/alien/hunterlisk - name = "alien hunterlisk" - base_attack_cooldown = 15 - color = "#575757" - health = 75 - maxHealth = 75 - melee_damage_upper = 17 - movement_cooldown = 3 - size_multiplier = 1.25 - -/mob/living/simple_mob/animal/space/alien/queen/empress/mother/big - ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful - needs_reload = 1 - projectiletype = /obj/item/projectile/energy/blob/toxic/splattering - reload_max = 5 - reload_time = 150 +/mob/living/simple_mob/animal/space/alien + maxHealth = 100 + health = 100 + harm_intent_damage = 5 + melee_damage_lower = 25 + melee_damage_upper = 25 + attack_armor_pen = 15 + +/mob/living/simple_mob/animal/space/alien/drone + health = 60 + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/animal/space/alien/sentinel + health = 120 + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian + maxHealth = 200 + health = 200 + +/mob/living/simple_mob/animal/space/alien/queen + health = 125 + maxHealth = 125 + melee_damage_lower = 7 + melee_damage_upper = 7 + +/mob/living/simple_mob/animal/space/alien/queen/empress + maxHealth = 200 + health = 200 + +/mob/living/simple_mob/animal/space/alien/queen/empress/mother + maxHealth = 300 + health = 300 + melee_damage_lower = 7 + melee_damage_upper = 12 + +//what are this things? +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/echo + name = "alien Echopraetorian" + color = "#424242" + health = 150 + maxHealth = 150 + needs_reload = 1 + projectiletype = /obj/item/projectile/sonic/strong + reload_time = 150 SECONDS + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/ion + name = "alien Ionic praetorian" + color = "#004cff" + armor = list(melee = 0,bullet = 25,laser = 0,energy = 0,bomb = 0,bio = 100,rad = 100) + health = 175 + maxHealth = 175 + needs_reload = 1 + projectiletype = /obj/item/projectile/arc/emp_blast + reload_time = 150 SECONDS + reload_max = 3 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + size_multiplier = 1.5 + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/blaze + name = "alien blazing praetorian" + color = "Red" + armor = list(melee = 0, bullet = 0, laser = 25, energy = 0, bomb = 0, bio = 100, rad = 100) + health = 225 + maxHealth = 225 + needs_reload = 1 + projectiletype = /obj/item/projectile/energy/fireball + reload_max = 3 + reload_time = 200 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/splat + name = "alien splattetorian" + color = "#a604b8" + needs_reload = 1 + projectiletype = /obj/item/projectile/energy/blob/acid/splattering + reload_max = 5 + reload_time = 150 + size_multiplier = 0.75 + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/tank + name = "alien Tankerling" + armor_soak = list(melee = -15, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) + base_attack_cooldown = 25 + color = "#ff8214" + health = 350 + maxHealth = 350 + melee_damage_lower = 12 + melee_damage_upper = 17 + movement_cooldown = 10 + movement_shake_radius = 7 + movement_sound = 'sound/weapons/heavysmash.ogg' + projectiletype = null + size_multiplier = 2 + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian/acid + projectiletype = /obj/item/projectile/energy/acid + +/mob/living/simple_mob/animal/space/alien/queen/empress/star + name = "alien Staticlisk" + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + armor_soak = list(melee = -10, bullet = 10, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) + base_attack_cooldown = 15 + color = "#38b9ff" + health = 250 + maxHealth = 250 + melee_damage_lower = 12 + melee_damage_upper = 25 + movement_cooldown = 12 + movement_shake_radius = 7 + needs_reload = 1 + projectilesound = null + projectiletype = /obj/item/projectile/beam/chain_lightning/lesser + reload_max = 3 + reload_time = 200 + size_multiplier = 1.5 + +/mob/living/simple_mob/animal/space/alien/queen/empress/tank + name = "alien tankerlisk" + armor_soak = list(melee = -10, bullet = 10, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) + base_attack_cooldown = 25 + color = "#4a4a4a" + health = 625 + maxHealth = 625 + melee_damage_lower = 12 + melee_damage_upper = 25 + movement_cooldown = 12 + movement_shake_radius = 7 + needs_reload = 1 + projectilesound = null + projectiletype = null + size_multiplier = 3 + +/mob/living/simple_mob/animal/space/alien/sentinel/electro + name = "alien Electrosentinel" + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + armor_soak = list(melee = 0, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0) + color = "#ccff4a" + health = 100 + maxHealth = 100 + needs_reload = 1 + projectiletype = /obj/item/projectile/beam/stun/electric_spider + reload_max = 5 + reload_time = 150 + size_multiplier = 1.5 + +/mob/living/simple_mob/animal/space/alien/sentinel/pyro + name = "alien Pyrosentinel" + armor = list (melee = 0, bullet = 0, laser = 15, energy = 0, bomb = 0, bio = 100, rad = 100) + base_attack_cooldown = 15 + color = "#ff7373" + health = 125 + maxHealth = 125 + needs_reload = 1 + projectiletype = /obj/item/projectile/bullet/incendiary/dragonflame + reload_max = 2 + reload_time = 150 + +/mob/living/simple_mob/animal/space/alien/sentinel/cyro + name = "alien cryosentinel" + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + armor = list(melee = 0, bullet = 15, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) + color = "#4f83ff" + health = 100 + maxHealth = 100 + needs_reload = 1 + projectiletype = /obj/item/projectile/energy/blob/freezing/splattering + reload_max = 3 + reload_time = 100 + size_multiplier = 1.5 + +/mob/living/simple_mob/animal/space/alien/sentinel/acid + projectiletype = /obj/item/projectile/energy/acid + +/mob/living/simple_mob/animal/space/alien/tanky + health = 100 + maxHealth = 100 + +/mob/living/simple_mob/animal/space/alien/hunterling + name = "alien hunterling" + attack_armor_pen = 1 + base_attack_cooldown = 2 + color = "#1cbdff" + force_max_speed = 1 + health = 15 + maxHealth = 15 + melee_damage_lower = 1 + melee_damage_upper = 3 + size_multiplier = 0.5 + +/mob/living/simple_mob/animal/space/alien/hunterlisk + name = "alien hunterlisk" + base_attack_cooldown = 15 + color = "#575757" + health = 75 + maxHealth = 75 + melee_damage_upper = 17 + movement_cooldown = 3 + size_multiplier = 1.25 + +/mob/living/simple_mob/animal/space/alien/queen/empress/mother/big + ai_holder_type = /datum/ai_holder/simple_mob/ranged/careful + needs_reload = 1 + projectiletype = /obj/item/projectile/energy/blob/toxic/splattering + reload_max = 5 + reload_time = 150 size_multiplier = 2 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm index dad2939a52..59428f6423 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm @@ -1,45 +1,45 @@ -/mob/living/simple_mob/animal/space/mouse_army - maxHealth = 25 - health = 25 - -//Honestly with pretty low damage I am not touching it. -/mob/living/simple_mob/animal/space/mouse_army/operative - icon_state = "mouse_operative" - item_state = "mouse_operative" - icon_living = "mouse_operative" - icon_dead = "mouse_operative_dead" - icon_rest = "mouse_operative_sleep" - -/mob/living/simple_mob/animal/space/mouse_army/pyro - icon_state = "mouse_pyro" - item_state = "mouse_pyro" - icon_living = "mouse_pyro" - icon_dead = "mouse_pyro_dead" - icon_rest = "mouse_pyro_sleep" - -/mob/living/simple_mob/animal/space/mouse_army/ammo - icon_state = "mouse_ammo" - item_state = "mouse_ammo" - icon_living = "mouse_ammo" - icon_dead = "mouse_ammo_dead" - icon_rest = "mouse_ammo_sleep" - maxHealth = 15 - health = 15 - -/mob/living/simple_mob/animal/space/mouse_army/stealth - icon_state = "mouse_stealth" - item_state = "mouse_stealth" - icon_living = "mouse_stealth" - icon_dead = "mouse_stealth_dead" - icon_rest = "mouse_stealth_sleep" - - -/mob/living/simple_mob/mechanical/mecha/mouse_tank - maxHealth = 75 - - -/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire - maxHealth = 100 - -/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator +/mob/living/simple_mob/animal/space/mouse_army + maxHealth = 25 + health = 25 + +//Honestly with pretty low damage I am not touching it. +/mob/living/simple_mob/animal/space/mouse_army/operative + icon_state = "mouse_operative" + item_state = "mouse_operative" + icon_living = "mouse_operative" + icon_dead = "mouse_operative_dead" + icon_rest = "mouse_operative_sleep" + +/mob/living/simple_mob/animal/space/mouse_army/pyro + icon_state = "mouse_pyro" + item_state = "mouse_pyro" + icon_living = "mouse_pyro" + icon_dead = "mouse_pyro_dead" + icon_rest = "mouse_pyro_sleep" + +/mob/living/simple_mob/animal/space/mouse_army/ammo + icon_state = "mouse_ammo" + item_state = "mouse_ammo" + icon_living = "mouse_ammo" + icon_dead = "mouse_ammo_dead" + icon_rest = "mouse_ammo_sleep" + maxHealth = 15 + health = 15 + +/mob/living/simple_mob/animal/space/mouse_army/stealth + icon_state = "mouse_stealth" + item_state = "mouse_stealth" + icon_living = "mouse_stealth" + icon_dead = "mouse_stealth_dead" + icon_rest = "mouse_stealth_sleep" + + +/mob/living/simple_mob/mechanical/mecha/mouse_tank + maxHealth = 75 + + +/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire + maxHealth = 100 + +/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator maxHealth = 150 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/spider.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/spider.dm index 17a1e88b1c..74e4e0d2aa 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/spider.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/spider.dm @@ -1,211 +1,211 @@ -//Unfiying spider health, into two catagories. Disrupters and tanks. -/mob/living/simple_mob/animal/giant_spider/carrier //Disrupter, old 100 - maxHealth = 30 - health = 30 - melee_damage_lower = 4 - melee_damage_upper = 12 - -/mob/living/simple_mob/animal/giant_spider/electric //disrupter, old 210 - maxHealth = 30 - health = 30 - projectiletype = /obj/item/projectile/energy/mob/electric_spider - melee_damage_lower = 5 - melee_damage_upper = 12 - -/mob/living/simple_mob/animal/giant_spider/frost //tank, old 175 - maxHealth = 60 - health = 60 - -/mob/living/simple_mob/animal/giant_spider //tank, old 200 - maxHealth = 60 - health = 60 - melee_damage_lower = 9 - melee_damage_upper = 15 - -/mob/living/simple_mob/animal/giant_spider/ion //disrupter, old 90 - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/hunter //disrupter, old 120 - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/lurker //disrupter, old 100 - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/pepper //tank, old 210 - maxHealth = 60 - health = 60 - -/mob/living/simple_mob/animal/giant_spider/phorogenic //tank, old 225 - maxHealth = 60 - health = 60 - melee_damage_lower = 12 - melee_damage_upper = 20 - -/mob/living/simple_mob/animal/giant_spider/thermic //tank, old 175 - maxHealth = 60 - health = 60 - melee_damage_lower = 5 - melee_damage_upper = 12 - -/mob/living/simple_mob/animal/giant_spider/tunneler //disrupter, old 120 - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/webslinger //disrupter, old 90 - maxHealth = 30 - health = 30 - -/obj/effect/spider/eggcluster - spider_type = /obj/effect/spider/spiderling/varied - -/mob/living/simple_mob/animal/giant_spider/broodmother - maxHealth = 400 - health = 400 - melee_damage_lower = 12 - melee_damage_upper = 20 - -/mob/living/simple_mob/animal/giant_spider/frost/broodling - maxHealth = 20 - health = 20 - - melee_damage_lower = 5 - melee_damage_upper = 7 - -/mob/living/simple_mob/animal/giant_spider/electric/broodling - maxHealth = 15 - health = 15 - -/mob/living/simple_mob/animal/giant_spider/hunter/broodling - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/lurker/broodling - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/nurse/broodling - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/pepper/broodling - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/thermic/broodling - maxHealth = 20 - health = 20 - - melee_damage_lower = 5 - melee_damage_upper = 7 - -/mob/living/simple_mob/animal/giant_spider/tunneler/broodling - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/webslinger/broodling - maxHealth = 15 - health = 15 - -/mob/living/simple_mob/animal/giant_spider/broodling - maxHealth = 30 - health = 30 - - melee_damage_lower = 5 - melee_damage_upper = 10 - -//Hijacking this file to make new event spiders - -/mob/living/simple_mob/animal/giant_spider/frost/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - - maxHealth = 20 - health = 20 - - melee_damage_lower = 5 - melee_damage_upper = 7 - -/mob/living/simple_mob/animal/giant_spider/electric/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - - maxHealth = 15 - health = 15 - -/mob/living/simple_mob/animal/giant_spider/hunter/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/lurker/space - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/nurse/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - - egg_type = /obj/effect/spider/eggcluster/royal/space - - maxHealth = 30 - health = 30 - -/mob/living/simple_mob/animal/giant_spider/pepper/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/thermic/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - maxHealth = 20 - health = 20 - - melee_damage_lower = 5 - melee_damage_upper = 7 - -/mob/living/simple_mob/animal/giant_spider/tunneler/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - maxHealth = 20 - health = 20 - -/mob/living/simple_mob/animal/giant_spider/webslinger/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - maxHealth = 15 - health = 15 - -/mob/living/simple_mob/animal/giant_spider/space - name = "giant space spider" - min_oxy = 0 - max_tox = 0 - max_co2 = 0 - maxHealth = 30 - health = 30 - - melee_damage_lower = 5 +//Unfiying spider health, into two catagories. Disrupters and tanks. +/mob/living/simple_mob/animal/giant_spider/carrier //Disrupter, old 100 + maxHealth = 30 + health = 30 + melee_damage_lower = 4 + melee_damage_upper = 12 + +/mob/living/simple_mob/animal/giant_spider/electric //disrupter, old 210 + maxHealth = 30 + health = 30 + projectiletype = /obj/item/projectile/energy/mob/electric_spider + melee_damage_lower = 5 + melee_damage_upper = 12 + +/mob/living/simple_mob/animal/giant_spider/frost //tank, old 175 + maxHealth = 60 + health = 60 + +/mob/living/simple_mob/animal/giant_spider //tank, old 200 + maxHealth = 60 + health = 60 + melee_damage_lower = 9 + melee_damage_upper = 15 + +/mob/living/simple_mob/animal/giant_spider/ion //disrupter, old 90 + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/hunter //disrupter, old 120 + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/lurker //disrupter, old 100 + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/pepper //tank, old 210 + maxHealth = 60 + health = 60 + +/mob/living/simple_mob/animal/giant_spider/phorogenic //tank, old 225 + maxHealth = 60 + health = 60 + melee_damage_lower = 12 + melee_damage_upper = 20 + +/mob/living/simple_mob/animal/giant_spider/thermic //tank, old 175 + maxHealth = 60 + health = 60 + melee_damage_lower = 5 + melee_damage_upper = 12 + +/mob/living/simple_mob/animal/giant_spider/tunneler //disrupter, old 120 + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/webslinger //disrupter, old 90 + maxHealth = 30 + health = 30 + +/obj/effect/spider/eggcluster + spider_type = /obj/effect/spider/spiderling/varied + +/mob/living/simple_mob/animal/giant_spider/broodmother + maxHealth = 400 + health = 400 + melee_damage_lower = 12 + melee_damage_upper = 20 + +/mob/living/simple_mob/animal/giant_spider/frost/broodling + maxHealth = 20 + health = 20 + + melee_damage_lower = 5 + melee_damage_upper = 7 + +/mob/living/simple_mob/animal/giant_spider/electric/broodling + maxHealth = 15 + health = 15 + +/mob/living/simple_mob/animal/giant_spider/hunter/broodling + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/lurker/broodling + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/nurse/broodling + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/pepper/broodling + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/thermic/broodling + maxHealth = 20 + health = 20 + + melee_damage_lower = 5 + melee_damage_upper = 7 + +/mob/living/simple_mob/animal/giant_spider/tunneler/broodling + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/webslinger/broodling + maxHealth = 15 + health = 15 + +/mob/living/simple_mob/animal/giant_spider/broodling + maxHealth = 30 + health = 30 + + melee_damage_lower = 5 + melee_damage_upper = 10 + +//Hijacking this file to make new event spiders + +/mob/living/simple_mob/animal/giant_spider/frost/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + + maxHealth = 20 + health = 20 + + melee_damage_lower = 5 + melee_damage_upper = 7 + +/mob/living/simple_mob/animal/giant_spider/electric/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + + maxHealth = 15 + health = 15 + +/mob/living/simple_mob/animal/giant_spider/hunter/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/lurker/space + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/nurse/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + + egg_type = /obj/effect/spider/eggcluster/royal/space + + maxHealth = 30 + health = 30 + +/mob/living/simple_mob/animal/giant_spider/pepper/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/thermic/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + maxHealth = 20 + health = 20 + + melee_damage_lower = 5 + melee_damage_upper = 7 + +/mob/living/simple_mob/animal/giant_spider/tunneler/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + maxHealth = 20 + health = 20 + +/mob/living/simple_mob/animal/giant_spider/webslinger/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + maxHealth = 15 + health = 15 + +/mob/living/simple_mob/animal/giant_spider/space + name = "giant space spider" + min_oxy = 0 + max_tox = 0 + max_co2 = 0 + maxHealth = 30 + health = 30 + + melee_damage_lower = 5 melee_damage_upper = 10 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm index 8db0e5c263..da65ad48f5 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm @@ -1,313 +1,313 @@ -/datum/category_item/catalogue/fauna/alchemistbee - name = "VR Creations" - desc = "A creature made of hardlight. \ - There appears to be remnants of code within the strange construct, \ - of dialog, and player interaction. But all that code seems inactive" - value = CATALOGUER_REWARD_HARD - -/mob/living/simple_mob/vr/alchemistbee - name = "large hardlight creature" - desc = "A digital creature" - icon = 'modular_chomp/icons/mob/alchemistbee.dmi' - icon_state = "beeliving" - icon_living = "beeliving" - icon_dead = "beedead" - catalogue_data = list(/datum/category_item/catalogue/fauna/alchemistbee) - - faction = "terror" //Ai seemed bugged during test, and it fighting the book bats might be niche but nice - - maxHealth = 250 - health = 250 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/boss - melee_attack_delay = 1 SECOND - ai_holder_type = /datum/ai_holder/simple_mob/intentional/alchemistbee - - melee_damage_lower = 20 - melee_damage_upper = 20 - - special_attack_min_range = 1 - special_attack_max_range = 14 - special_attack_cooldown = 10 - - loot_list = list(/obj/item/clothing/head/vrwizard = 60, - /obj/item/clothing/suit/vrwizard = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/nuclear = 100, - /obj/item/clothing/head/darkvrwizard = 100, - /obj/item/clothing/suit/darkvrwizard = 100 - ) - -/mob/living/simple_mob/vr/alchemistbee - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - -//bluenom -/mob/living/simple_mob/vr/alchemistbee/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vr/alchemistbee/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vr/alchemistbee/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -/obj/item/projectile/energy/homing_bolt/wizard/boss - damage = 10 - modifier_type_to_apply = /datum/modifier/wizweakness - modifier_duration = 30 SECONDS - icon_state = "arcane_barrage" - -/datum/modifier/wizweakness - name = "wizweakness" - desc = "Can you even see this in game?" - mob_overlay_state = "cult_aura" - - on_created_text = "You feel incrediably vulnerable." - on_expired_text = "You feel better." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - incoming_damage_percent = 2 // Adjusts all incoming damage. - incoming_brute_damage_percent = 2 // Only affects bruteloss. - incoming_fire_damage_percent = 2 // Only affects fireloss. - incoming_tox_damage_percent = 2 // Only affects toxloss. - incoming_oxy_damage_percent = 2 // Only affects oxyloss. - -//Trying to learn from the AADG's ai and make my own -/datum/ai_holder/simple_mob/intentional/alchemistbee - conserve_ammo = FALSE - vision_range = 16 - var/closest_desired_distance = 3 // Otherwise run up to them to be able to potentially shock or punch them. - - var/chemblast_radius = 4 // How big to assume electric defense's area is. - var/dangerbolt_radius = 2 // Same but for microsingulo pull. - var/homingcluster_radius = 2 // Explosion radius for the rockets. - - var/chemblast_threshold = 3 // How many non-targeted people are needed in close proximity before electric defense is viable. - var/dangerbolt_threshold = 1 // Similar to above, but uses an area around the target. - - -/datum/ai_holder/simple_mob/intentional/alchemistbee/on_engagement(atom/A) - // Make the AI backpeddle if using an AoE special attack. - var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles. - if(holder.a_intent in risky_intents) - var/closest_distance = 3 - switch(holder.a_intent) // Plus one just in case. - if(I_HURT) - closest_distance = homingcluster_radius + 3 - if(I_GRAB) - closest_distance = dangerbolt_radius + 3 - - if(get_dist(holder, A) <= closest_distance) - holder.IMove(get_step_away(holder, A, closest_distance)) - - // Otherwise get up close and personal. - else if(get_dist(holder, A) > closest_desired_distance) - holder.IMove(get_step_towards(holder, A)) - -/datum/ai_holder/simple_mob/intentional/alchemistbee/pre_special_attack(atom/A) - if(isliving(A)) - var/mob/living/target = A - - // If we're surrounded, Electric Defense will quickly fix that. - var/tally = 0 - var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets. - for(var/atom/movable/AM in potential_targets) - if(get_dist(holder, AM) > chemblast_radius) - continue - if(!can_attack(AM)) - continue - tally++ - - // Should we shock them? - if(tally >= chemblast_threshold || get_dist(target, holder) <= chemblast_radius) - holder.a_intent = I_DISARM - return - - for(var/atom/movable/AM in potential_targets) - if(get_dist(target, AM) > dangerbolt_radius) - continue - if(!can_attack(AM)) - continue - if(AM.anchored) - tally-- - else - tally++ - - - if(tally >= dangerbolt_threshold) - holder.a_intent = I_GRAB - else - holder.a_intent = I_HURT - - else - if(get_dist(holder, A) >= homingcluster_radius + 1) - holder.a_intent = I_HURT - else - holder.a_intent = I_DISARM - - -/mob/living/simple_mob/vr/alchemistbee/do_special_attack(atom/A) - . = TRUE - switch(a_intent) - if(I_DISARM) - chemblast(A) - if(I_HURT) - homingcluster(A) - if(I_GRAB) - dangerbolt(A) - -/mob/living/simple_mob/vr/alchemistbee/proc/chemblast(atom/target) - set waitfor = FALSE - - Beam(target, icon_state = "sat_beam", time = 1.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] prepares a pouch of vials!")) - sleep(0.5 SECONDS) - - if(prob(25)) - visible_message(span("warning", "\The [src] throws a blue vial!")) - var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/frostvial(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - - if(prob(25)) - visible_message(span("warning", "\The [src] throws a green vial!")) - var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/poisonvial(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - - if(prob(25)) - visible_message(span("warning", "\The [src] throws a red vial!")) - var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/firevial(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - else - visible_message(span("warning", "\The [src] throws a strange vial")) - var/obj/item/projectile/A = new /obj/item/projectile/arc/vial/lightingvial(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - - visible_message(span("warning", "\The [src] puts them pouch away.")) - - -/mob/living/simple_mob/vr/alchemistbee/proc/homingcluster(atom/target) - var/obj/item/projectile/A = new /obj/item/projectile/bullet/homingcluster(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/vr/alchemistbee/proc/dangerbolt(atom/target) - visible_message(span("warning", "\The [src] prepares a powerful spell!")) - Beam(target, icon_state = "sat_beam", time = 2.0 SECONDS, maxdistance = INFINITY) - sleep(1.5 SECONDS) - var/obj/item/projectile/A = new /obj/item/projectile/energy/nuclearblast(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - -/obj/item/projectile/bullet/homingcluster - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 1200 - submunition_spread_min = 200 - submunitions = list(/obj/item/projectile/energy/homing_bolt/wizard/fire = 1, /obj/item/projectile/energy/homing_bolt/wizard/frost = 1, /obj/item/projectile/energy/homing_bolt/wizard/poison = 1, /obj/item/projectile/energy/homing_bolt/wizard/lighting = 1) - -//I desire arcing projectiles with smoke. Wish this was a general proc for projectiles -/obj/item/projectile/arc/vial - name = "vial" - icon = 'modular_chomp/icons/obj/vialprojectile.dmi' - icon_state = "blue_vial" - var/splatter = FALSE // Will this make a cloud of reagents? - var/splatter_volume = 5 // The volume of its chemical container, for said cloud of reagents. - var/list/my_chems = list("mold") - -/obj/item/projectile/arc/vial/on_impact(var/atom/A) - if(splatter) - var/turf/location = get_turf(src) - var/datum/effect/effect/system/smoke_spread/chem/blob/S = new /datum/effect/effect/system/smoke_spread/chem/blob - S.attach(location) - S.set_up(reagents, rand(1, splatter_volume), 0, location) - playsound(location, 'sound/effects/slime_squish.ogg', 30, 1, -3) - spawn(0) - S.start() - ..() - -/obj/item/projectile/arc/vial/proc/ready_chemicals() - if(reagents) - var/reagent_vol = (round((splatter_volume / my_chems.len) * 100) / 100) //Cut it at the hundreds place, please. - for(var/reagent in my_chems) - reagents.add_reagent(reagent, reagent_vol) - -/obj/item/projectile/arc/vial/frostvial - icon_state = "blue_vial" - damage = 10 - armor_penetration = 0 - damage_type = BRUTE - splatter_volume = 60 - my_chems = list("frostoil") - modifier_type_to_apply = /datum/modifier/wizpoison/frost - modifier_duration = 15 SECONDS - splatter = TRUE - -/obj/item/projectile/arc/vial/poisonvial - icon_state = "green_vial" - damage = 10 - armor_penetration = 0 - damage_type = BRUTE - splatter_volume = 60 - my_chems = list("toxin") - modifier_type_to_apply = /datum/modifier/wizpoison - modifier_duration = 15 SECONDS - splatter = TRUE - -/obj/item/projectile/arc/vial/firevial - icon_state = "red_vial" - damage = 10 - armor_penetration = 0 - damage_type = BRUTE - splatter_volume = 60 - my_chems = list("sacid") - modifier_type_to_apply = /datum/modifier/wizfire - modifier_duration = 15 SECONDS - splatter = TRUE - -/obj/item/projectile/arc/vial/lightingvial - icon_state = "orange_vial" - damage = 10 - armor_penetration = 0 - damage_type = BRUTE - splatter_volume = 60 - my_chems = list("shredding_nanites") - modifier_type_to_apply = /datum/modifier/wizfire/lighting - modifier_duration = 15 SECONDS - splatter = TRUE - -/obj/item/projectile/energy/nuclearblast - name = "nuclear blast" - icon_state = "plasma" - damage = 25 - armor_penetration = 50 - damage_type = BURN - check_armour = "energy" - agony = 50 - speed = 24.0 - modifier_type_to_apply = /datum/modifier/grievous_wounds - modifier_duration = 120 SECONDS +/datum/category_item/catalogue/fauna/alchemistbee + name = "VR Creations" + desc = "A creature made of hardlight. \ + There appears to be remnants of code within the strange construct, \ + of dialog, and player interaction. But all that code seems inactive" + value = CATALOGUER_REWARD_HARD + +/mob/living/simple_mob/vr/alchemistbee + name = "large hardlight creature" + desc = "A digital creature" + icon = 'modular_chomp/icons/mob/alchemistbee.dmi' + icon_state = "beeliving" + icon_living = "beeliving" + icon_dead = "beedead" + catalogue_data = list(/datum/category_item/catalogue/fauna/alchemistbee) + + faction = "terror" //Ai seemed bugged during test, and it fighting the book bats might be niche but nice + + maxHealth = 250 + health = 250 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/boss + melee_attack_delay = 1 SECOND + ai_holder_type = /datum/ai_holder/simple_mob/intentional/alchemistbee + + melee_damage_lower = 20 + melee_damage_upper = 20 + + special_attack_min_range = 1 + special_attack_max_range = 14 + special_attack_cooldown = 10 + + loot_list = list(/obj/item/clothing/head/vrwizard = 60, + /obj/item/clothing/suit/vrwizard = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/nuclear = 100, + /obj/item/clothing/head/darkvrwizard = 100, + /obj/item/clothing/suit/darkvrwizard = 100 + ) + +/mob/living/simple_mob/vr/alchemistbee + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + +//bluenom +/mob/living/simple_mob/vr/alchemistbee/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vr/alchemistbee/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vr/alchemistbee/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +/obj/item/projectile/energy/homing_bolt/wizard/boss + damage = 10 + modifier_type_to_apply = /datum/modifier/wizweakness + modifier_duration = 30 SECONDS + icon_state = "arcane_barrage" + +/datum/modifier/wizweakness + name = "wizweakness" + desc = "Can you even see this in game?" + mob_overlay_state = "cult_aura" + + on_created_text = "You feel incrediably vulnerable." + on_expired_text = "You feel better." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + incoming_damage_percent = 2 // Adjusts all incoming damage. + incoming_brute_damage_percent = 2 // Only affects bruteloss. + incoming_fire_damage_percent = 2 // Only affects fireloss. + incoming_tox_damage_percent = 2 // Only affects toxloss. + incoming_oxy_damage_percent = 2 // Only affects oxyloss. + +//Trying to learn from the AADG's ai and make my own +/datum/ai_holder/simple_mob/intentional/alchemistbee + conserve_ammo = FALSE + vision_range = 16 + var/closest_desired_distance = 3 // Otherwise run up to them to be able to potentially shock or punch them. + + var/chemblast_radius = 4 // How big to assume electric defense's area is. + var/dangerbolt_radius = 2 // Same but for microsingulo pull. + var/homingcluster_radius = 2 // Explosion radius for the rockets. + + var/chemblast_threshold = 3 // How many non-targeted people are needed in close proximity before electric defense is viable. + var/dangerbolt_threshold = 1 // Similar to above, but uses an area around the target. + + +/datum/ai_holder/simple_mob/intentional/alchemistbee/on_engagement(atom/A) + // Make the AI backpeddle if using an AoE special attack. + var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles. + if(holder.a_intent in risky_intents) + var/closest_distance = 3 + switch(holder.a_intent) // Plus one just in case. + if(I_HURT) + closest_distance = homingcluster_radius + 3 + if(I_GRAB) + closest_distance = dangerbolt_radius + 3 + + if(get_dist(holder, A) <= closest_distance) + holder.IMove(get_step_away(holder, A, closest_distance)) + + // Otherwise get up close and personal. + else if(get_dist(holder, A) > closest_desired_distance) + holder.IMove(get_step_towards(holder, A)) + +/datum/ai_holder/simple_mob/intentional/alchemistbee/pre_special_attack(atom/A) + if(isliving(A)) + var/mob/living/target = A + + // If we're surrounded, Electric Defense will quickly fix that. + var/tally = 0 + var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets. + for(var/atom/movable/AM in potential_targets) + if(get_dist(holder, AM) > chemblast_radius) + continue + if(!can_attack(AM)) + continue + tally++ + + // Should we shock them? + if(tally >= chemblast_threshold || get_dist(target, holder) <= chemblast_radius) + holder.a_intent = I_DISARM + return + + for(var/atom/movable/AM in potential_targets) + if(get_dist(target, AM) > dangerbolt_radius) + continue + if(!can_attack(AM)) + continue + if(AM.anchored) + tally-- + else + tally++ + + + if(tally >= dangerbolt_threshold) + holder.a_intent = I_GRAB + else + holder.a_intent = I_HURT + + else + if(get_dist(holder, A) >= homingcluster_radius + 1) + holder.a_intent = I_HURT + else + holder.a_intent = I_DISARM + + +/mob/living/simple_mob/vr/alchemistbee/do_special_attack(atom/A) + . = TRUE + switch(a_intent) + if(I_DISARM) + chemblast(A) + if(I_HURT) + homingcluster(A) + if(I_GRAB) + dangerbolt(A) + +/mob/living/simple_mob/vr/alchemistbee/proc/chemblast(atom/target) + set waitfor = FALSE + + Beam(target, icon_state = "sat_beam", time = 1.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] prepares a pouch of vials!")) + sleep(0.5 SECONDS) + + if(prob(25)) + visible_message(span("warning", "\The [src] throws a blue vial!")) + var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/frostvial(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + + if(prob(25)) + visible_message(span("warning", "\The [src] throws a green vial!")) + var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/poisonvial(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + + if(prob(25)) + visible_message(span("warning", "\The [src] throws a red vial!")) + var/obj/item/projectile/B = new /obj/item/projectile/arc/vial/firevial(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + else + visible_message(span("warning", "\The [src] throws a strange vial")) + var/obj/item/projectile/A = new /obj/item/projectile/arc/vial/lightingvial(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + + visible_message(span("warning", "\The [src] puts them pouch away.")) + + +/mob/living/simple_mob/vr/alchemistbee/proc/homingcluster(atom/target) + var/obj/item/projectile/A = new /obj/item/projectile/bullet/homingcluster(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/vr/alchemistbee/proc/dangerbolt(atom/target) + visible_message(span("warning", "\The [src] prepares a powerful spell!")) + Beam(target, icon_state = "sat_beam", time = 2.0 SECONDS, maxdistance = INFINITY) + sleep(1.5 SECONDS) + var/obj/item/projectile/A = new /obj/item/projectile/energy/nuclearblast(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + +/obj/item/projectile/bullet/homingcluster + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 1200 + submunition_spread_min = 200 + submunitions = list(/obj/item/projectile/energy/homing_bolt/wizard/fire = 1, /obj/item/projectile/energy/homing_bolt/wizard/frost = 1, /obj/item/projectile/energy/homing_bolt/wizard/poison = 1, /obj/item/projectile/energy/homing_bolt/wizard/lighting = 1) + +//I desire arcing projectiles with smoke. Wish this was a general proc for projectiles +/obj/item/projectile/arc/vial + name = "vial" + icon = 'modular_chomp/icons/obj/vialprojectile.dmi' + icon_state = "blue_vial" + var/splatter = FALSE // Will this make a cloud of reagents? + var/splatter_volume = 5 // The volume of its chemical container, for said cloud of reagents. + var/list/my_chems = list("mold") + +/obj/item/projectile/arc/vial/on_impact(var/atom/A) + if(splatter) + var/turf/location = get_turf(src) + var/datum/effect/effect/system/smoke_spread/chem/blob/S = new /datum/effect/effect/system/smoke_spread/chem/blob + S.attach(location) + S.set_up(reagents, rand(1, splatter_volume), 0, location) + playsound(location, 'sound/effects/slime_squish.ogg', 30, 1, -3) + spawn(0) + S.start() + ..() + +/obj/item/projectile/arc/vial/proc/ready_chemicals() + if(reagents) + var/reagent_vol = (round((splatter_volume / my_chems.len) * 100) / 100) //Cut it at the hundreds place, please. + for(var/reagent in my_chems) + reagents.add_reagent(reagent, reagent_vol) + +/obj/item/projectile/arc/vial/frostvial + icon_state = "blue_vial" + damage = 10 + armor_penetration = 0 + damage_type = BRUTE + splatter_volume = 60 + my_chems = list("frostoil") + modifier_type_to_apply = /datum/modifier/wizpoison/frost + modifier_duration = 15 SECONDS + splatter = TRUE + +/obj/item/projectile/arc/vial/poisonvial + icon_state = "green_vial" + damage = 10 + armor_penetration = 0 + damage_type = BRUTE + splatter_volume = 60 + my_chems = list("toxin") + modifier_type_to_apply = /datum/modifier/wizpoison + modifier_duration = 15 SECONDS + splatter = TRUE + +/obj/item/projectile/arc/vial/firevial + icon_state = "red_vial" + damage = 10 + armor_penetration = 0 + damage_type = BRUTE + splatter_volume = 60 + my_chems = list("sacid") + modifier_type_to_apply = /datum/modifier/wizfire + modifier_duration = 15 SECONDS + splatter = TRUE + +/obj/item/projectile/arc/vial/lightingvial + icon_state = "orange_vial" + damage = 10 + armor_penetration = 0 + damage_type = BRUTE + splatter_volume = 60 + my_chems = list("shredding_nanites") + modifier_type_to_apply = /datum/modifier/wizfire/lighting + modifier_duration = 15 SECONDS + splatter = TRUE + +/obj/item/projectile/energy/nuclearblast + name = "nuclear blast" + icon_state = "plasma" + damage = 25 + armor_penetration = 50 + damage_type = BURN + check_armour = "energy" + agony = 50 + speed = 24.0 + modifier_type_to_apply = /datum/modifier/grievous_wounds + modifier_duration = 120 SECONDS flash_strength = 15 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/imperion.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/imperion.dm index dd70427ce2..1b2fd3ed84 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/imperion.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/imperion.dm @@ -1,611 +1,611 @@ -//Trying to explain Jasper's attempt at a super boss -//Phase 1 Dark Gygax but diffrent -//Phase 2 All of it's attacks are meant to be some form of CC, with a single ion attack -//Phase 3 Orginally was meant to be a timed phase but couldn't get the debuff to work. Instead melee based phase? -//Phase 4 A mix of phases 1 through 3 -//Phase 5, it stands there with increased defense and shields. Bullet hell, highly rewarding if you can get melee in - -/mob/living/simple_mob/mechanical/mecha/imperion - name = "imperion" - icon = 'icons/mecha/mecha.dmi' - icon_state = "imperion" - icon_living = "imperion" - desc = "A strange precursor mecha" - maxHealth = 300 - health = 300 - movement_cooldown = -1 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/gaussrifle - melee_attack_delay = 4 SECOND - damage_fatigue_mult = 0 - has_repair_droid = TRUE - - size_multiplier = 2.50 - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - - ranged_attack_delay = 1.5 SECONDS - - wreckage = null - pilot_type = null - - armor = list( - "melee" = 35, - "bullet" = 35, - "laser" = 35, - "energy" = 35, - "bomb" = 35, - "bio" = 100, - "rad" = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase1/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase2/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase4/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase1 //Simple phase that is mostly dodge rockects - movement_cooldown = -1 - projectiletype = /obj/item/projectile/arc/explosive_rocket - melee_attack_delay = 4 SECOND - ranged_attack_delay = 2.5 SECONDS - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - - size_multiplier = 2.50 - - wreckage = null - pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase2 - - special_attack_min_range = 1 - special_attack_max_range = 9 - special_attack_cooldown = 15 SECONDS - -/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/electric_defense(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 3) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_rockets(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/energy/excavate(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_microsingularity(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/bullet/pistol/medium/hp(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase2 //Boss uses crowd control. - movement_cooldown = -1 - projectiletype = /obj/item/projectile/mobbola - melee_attack_delay = 4 SECOND - alpha = 215 - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - size_multiplier = 2.25 - - wreckage = null - pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase3 - - special_attack_min_range = 1 - special_attack_max_range = 9 - special_attack_cooldown = 15 SECONDS - -/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/electric_defense(atom/target) - var/turf/T = get_turf(target) - visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) - playsound(src, 'sound/weapons/Laser.ogg', 50, 1) - face_atom(T) - var/obj/item/projectile/arc/microsingulo/sphere = new(loc) - sphere.old_style_target(T, src) - sphere.fire() - -/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_rockets(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_microsingularity(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/ion/small(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - - -/mob/living/simple_mob/mechanical/mecha/imperion/phase3 //DPS check - movement_cooldown = -1 - projectiletype = null - melee_attack_delay = 2 SECOND - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion - size_multiplier = 2.00 - - wreckage = null - pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase4 - - special_attack_min_range = 3 - special_attack_max_range = 14 //this thing will not let you recover during phase 3. It blitz you down, or you blitz it down. - special_attack_cooldown = 2 SECONDS - -/mob/living/simple_mob/mechanical/mecha/imperion/phase3/do_special_attack(atom/A) - // Teleport attack. - if(!A) - to_chat(src, span("warning", "There's nothing to teleport to.")) - return FALSE - - var/list/nearby_things = range(1, A) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - var/turf/T = get_turf(src) - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message(span("notice", "\The [src] vanishes!")) - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, span("notice", "You teleport to \the [target_turf].")) - - target_turf.visible_message(span("warning", "\The [src] appears!")) - s2.start() - -/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion - home_low_priority = TRUE - vision_range = 28 //cheesy Ai for absurdly aggressive phase - -/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion/react_to_attack() - var/obj/item/projectile/P = new /obj/item/projectile/forcebolt(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -//Phase four, fusion time. -/mob/living/simple_mob/mechanical/mecha/imperion/phase4 //Starts to slow down - movement_cooldown = 0 - projectiletype = /obj/item/projectile/energy/homing_bolt - melee_attack_delay = 4 SECOND - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - - size_multiplier = 1.75 - - wreckage = null - pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase5 - - special_attack_min_range = 1 - special_attack_max_range = 9 - special_attack_cooldown = 12 SECONDS - melee_attack_delay = 2 SECOND - -/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/electric_defense(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 3) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_rockets(atom/target) - if(!target) - to_chat(src, span("warning", "There's nothing to teleport to.")) - return FALSE - - var/list/nearby_things = range(1, target) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - var/turf/T = get_turf(src) - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message(span("notice", "\The [src] vanishes!")) - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, span("notice", "You teleport to \the [target_turf].")) - - target_turf.visible_message(span("warning", "\The [src] appears!")) - s2.start() - -/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_microsingularity(atom/target) - var/turf/T = get_turf(target) - visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) - playsound(src, 'sound/weapons/Laser.ogg', 50, 1) - face_atom(T) - var/obj/item/projectile/arc/microsingulo/sphere = new(loc) - sphere.old_style_target(T, src) - sphere.fire() - - - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5 //Final stand - icon_state = "imperion-phase" - icon_living = "imperion-phase" - icon_dead = "imperion-phase" - desc = "A precursor mecha on it's last legs, sparking, seeming vunerable up close" - movement_cooldown = 60 - projectiletype = /obj/item/projectile/energy/homing_bolt/missile - ranged_attack_delay = 0.5 SECONDS - special_attack_min_range = 1 - special_attack_max_range = 9 - special_attack_cooldown = 5 SECONDS - melee_attack_delay = 1 SECOND - - size_multiplier = 1.50 - - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - - wreckage = null - pilot_type = null - var/obj/item/shield_projector/shields = null - - armor = list( - "melee" = -500, - "bullet" = 75, - "laser" = 75, - "energy" = 75, - "bomb" = 75, - "bio" = 100, - "rad" = 100 - ) - - loot_list = list(/obj/item/clothing/suit/armor/alien = 60, - /obj/item/clothing/suit/armor/alien/tank = 60, - /obj/item/prop/alien/junk = 60, - /obj/item/prop/alien/junk = 60, - /obj/item/prop/alien/junk = 60, - /obj/item/prop/alien/junk = 60, - /obj/item/prop/alien/junk = 60, - /obj/item/weapon/gun/energy/alien = 60, - /obj/item/weapon/gun/energy/alien = 60, - /obj/random/tool/alien = 60, - /obj/random/tool/alien = 60, - /obj/item/weapon/cell/device/weapon/recharge/alien = 60, - /obj/item/weapon/cell/device/weapon/recharge/alien = 60, - /obj/item/clothing/suit/armor/alien = 60, - /obj/item/clothing/suit/armor/alien/tank = 60, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/weapon/gun/energy/alien = 60, - /obj/item/weapon/gun/energy/alien = 60, - /obj/random/tool/alien = 60, - /obj/random/tool/alien = 60, - /obj/item/weapon/cell/device/weapon/recharge/alien = 60, - /obj/item/weapon/cell/device/weapon/recharge/alien = 60, - /obj/item/clothing/suit/armor/reactive/vistor = 50, - /obj/item/clothing/suit/armor/reactive/vistor = 50, - /obj/item/clothing/suit/armor/protectionbubble = 50, - /obj/item/clothing/suit/armor/protectionbubble = 50, - /obj/item/clothing/suit/armor/tesla/vistor = 60, - /obj/item/clothing/suit/armor/tesla/vistor = 60, - /obj/item/shield_projector/rectangle/automatic/orange = 10, - /obj/item/shield_projector/rectangle/automatic/imperion = 0.5, - /obj/item/clothing/head/vrwizard = 60, - /obj/item/clothing/suit/vrwizard = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 60, - /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 60, - /obj/item/clothing/head/psy_crown/candycrown = 60, - /obj/item/clothing/gloves/stamina = 60, - /obj/item/clothing/suit/armor/buffvest = 60, - /obj/item/weapon/melee/cullingcane = 60, - /obj/item/weapon/bluespace_harpoon = 60, - /obj/item/weapon/flame/lighter/supermatter/syndismzippo = 60, - /obj/item/weapon/gun/energy/vepr/plasma = 60, - /obj/item/weapon/gun/energy/medigun = 60 - ) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/electric_defense(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - if(prob(50)) - var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - else - var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_rockets(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - sleep(1.5 SECONDS) - var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - sleep(1.5 SECONDS) - var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_microsingularity(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 3) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - if(prob(50)) - sleep(1.5) - var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - else - sleep(1.5) - var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase5/Initialize(mapload) - shields = new /obj/item/shield_projector/rectangle/automatic/imperion(src) - return ..() - -/obj/item/shield_projector/rectangle/automatic/imperion - shield_health = 250 - max_shield_health = 250 - shield_regen_delay = 60 SECONDS - shield_regen_amount = 50 - size_x = 2 - size_y = 2 - color = "#631644" - high_color = "#631644" - low_color = "#631644" - -//projectile time, mostly for phase five -/obj/item/projectile/bullet/imperionspear - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 700 - submunition_spread_min = 200 - submunitions = list(/obj/item/projectile/energy/imperionspear = 5) - -/obj/item/projectile/bullet/imperionspear/on_range() - qdel(src) - -/obj/item/projectile/energy/imperionspear - name = "energy spear" - icon_state = "arcane_barrage" - damage = 16 - armor_penetration = 35 - damage_type = BURN - check_armour = "laser" - speed = 7.0 - - flash_strength = 0 - -/obj/item/projectile/bullet/imperionblaster - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 1500 - submunition_spread_min = 300 - submunitions = list(/obj/item/projectile/energy/imperionblaster = 8) - -/obj/item/projectile/bullet/imperionblaster/on_range() - qdel(src) - -/obj/item/projectile/energy/imperionblaster - name = "energy pellet" - icon_state = "dark_pellet" - damage = 15 - armor_penetration = 100 - damage_type = BURN - check_armour = "laser" - speed = 4.5 - - flash_strength = 0 - -/obj/item/projectile/bullet/imperiontesla - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 400 - submunition_spread_min = 50 - submunitions = list(/obj/item/projectile/energy/imperiontesla = 2) - -/obj/item/projectile/bullet/imperiontesla/on_range() - qdel(src) - -/obj/item/projectile/energy/imperiontesla - name = "energy sphere" - icon_state = "tesla_projectile" - damage = 25 - armor_penetration = 50 - damage_type = BURN - check_armour = "energy" - agony = 50 - speed = 10.0 - - flash_strength = 0 - -/obj/item/projectile/energy/homing_bolt/missile - name = "homing rocket" - icon_state = "atrocket" - damage = 20 - damage_type = BURN - check_armour = "bullet" - -/obj/item/projectile/energy/homing_bolt/missile/on_hit(atom/target, blocked=0) - explosion(target, 0, 0, 2, 4)//No need to have a question. - return 1 - -/obj/item/projectile/energy/homing_bolt/missile/throw_impact(atom/target, var/speed) - explosion(target, 0, 0, 2, 4)//No need to have a question. - qdel(src) - -//Cool boss visuals, auras, and me saying no to stun. - -/obj/item/weapon/grenade/shooter/laserpellet - name = "laser pellet grenade" - desc = "Unleashes not hit scan lasers." - projectile_types = list(/obj/item/projectile/energy/mob/midlaser) - -//te,porarly removing mob_overlay_state = "red_electricity_constant" to try and fix the visual bug -/datum/modifier/bossbuff - name = "boss_buff" - - on_created_text = "You feel an intense and overwhelming rage overtake you as you go berserk!" - on_expired_text = "The blaze of rage inside you has ran out." - stacks = MODIFIER_STACK_EXTEND - - disable_duration_percent = 0 - -/mob/living/simple_mob/mechanical/mecha/imperion/Initialize() - add_modifier(/datum/modifier/bossbuff, null, src) // Slime is always swole. - return ..() - -/datum/modifier/aura/despair - name = "ruin" - mob_overlay_state = "cult_aura" - - aura_max_distance = 28 - - on_created_text = "You feel like you're falling into ruin!" - on_expired_text = "The ruin feeling is gone." - stacks = MODIFIER_STACK_EXTEND - -/datum/modifier/aura/despair/tick() - if(holder.stat == DEAD) - expire() - - if(ishuman(holder)) // Robolimbs need this code sadly. - var/mob/living/carbon/human/H = holder - for(var/obj/item/organ/external/E in H.organs) - var/obj/item/organ/external/O = E - O.heal_damage(-0.1, -0.1, 0, 0) - else - holder.adjustBruteLoss(0.1) - holder.adjustFireLoss(0,1) - -/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/heal_aura() - for(var/mob/living/L in view(src, 28)) - if(L.stat == DEAD) - continue - L.add_modifier(/datum/modifier/aura/despair, null, src) +//Trying to explain Jasper's attempt at a super boss +//Phase 1 Dark Gygax but diffrent +//Phase 2 All of it's attacks are meant to be some form of CC, with a single ion attack +//Phase 3 Orginally was meant to be a timed phase but couldn't get the debuff to work. Instead melee based phase? +//Phase 4 A mix of phases 1 through 3 +//Phase 5, it stands there with increased defense and shields. Bullet hell, highly rewarding if you can get melee in + +/mob/living/simple_mob/mechanical/mecha/imperion + name = "imperion" + icon = 'icons/mecha/mecha.dmi' + icon_state = "imperion" + icon_living = "imperion" + desc = "A strange precursor mecha" + maxHealth = 300 + health = 300 + movement_cooldown = -1 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/gaussrifle + melee_attack_delay = 4 SECOND + damage_fatigue_mult = 0 + has_repair_droid = TRUE + + size_multiplier = 2.50 + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + + ranged_attack_delay = 1.5 SECONDS + + wreckage = null + pilot_type = null + + armor = list( + "melee" = 35, + "bullet" = 35, + "laser" = 35, + "energy" = 35, + "bomb" = 35, + "bio" = 100, + "rad" = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase1/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase2/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase4/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase1 //Simple phase that is mostly dodge rockects + movement_cooldown = -1 + projectiletype = /obj/item/projectile/arc/explosive_rocket + melee_attack_delay = 4 SECOND + ranged_attack_delay = 2.5 SECONDS + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + + size_multiplier = 2.50 + + wreckage = null + pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase2 + + special_attack_min_range = 1 + special_attack_max_range = 9 + special_attack_cooldown = 15 SECONDS + +/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/electric_defense(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 3) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_rockets(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/energy/excavate(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_microsingularity(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/bullet/pistol/medium/hp(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase2 //Boss uses crowd control. + movement_cooldown = -1 + projectiletype = /obj/item/projectile/mobbola + melee_attack_delay = 4 SECOND + alpha = 215 + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + size_multiplier = 2.25 + + wreckage = null + pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase3 + + special_attack_min_range = 1 + special_attack_max_range = 9 + special_attack_cooldown = 15 SECONDS + +/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/electric_defense(atom/target) + var/turf/T = get_turf(target) + visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) + playsound(src, 'sound/weapons/Laser.ogg', 50, 1) + face_atom(T) + var/obj/item/projectile/arc/microsingulo/sphere = new(loc) + sphere.old_style_target(T, src) + sphere.fire() + +/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_rockets(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_microsingularity(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/ion/small(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + + +/mob/living/simple_mob/mechanical/mecha/imperion/phase3 //DPS check + movement_cooldown = -1 + projectiletype = null + melee_attack_delay = 2 SECOND + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion + size_multiplier = 2.00 + + wreckage = null + pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase4 + + special_attack_min_range = 3 + special_attack_max_range = 14 //this thing will not let you recover during phase 3. It blitz you down, or you blitz it down. + special_attack_cooldown = 2 SECONDS + +/mob/living/simple_mob/mechanical/mecha/imperion/phase3/do_special_attack(atom/A) + // Teleport attack. + if(!A) + to_chat(src, span("warning", "There's nothing to teleport to.")) + return FALSE + + var/list/nearby_things = range(1, A) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + var/turf/T = get_turf(src) + + var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread + s1.set_up(5, 1, T) + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread + s2.set_up(5, 1, target_turf) + + + T.visible_message(span("notice", "\The [src] vanishes!")) + s1.start() + + forceMove(target_turf) + playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) + to_chat(src, span("notice", "You teleport to \the [target_turf].")) + + target_turf.visible_message(span("warning", "\The [src] appears!")) + s2.start() + +/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion + home_low_priority = TRUE + vision_range = 28 //cheesy Ai for absurdly aggressive phase + +/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion/react_to_attack() + var/obj/item/projectile/P = new /obj/item/projectile/forcebolt(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +//Phase four, fusion time. +/mob/living/simple_mob/mechanical/mecha/imperion/phase4 //Starts to slow down + movement_cooldown = 0 + projectiletype = /obj/item/projectile/energy/homing_bolt + melee_attack_delay = 4 SECOND + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + + size_multiplier = 1.75 + + wreckage = null + pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase5 + + special_attack_min_range = 1 + special_attack_max_range = 9 + special_attack_cooldown = 12 SECONDS + melee_attack_delay = 2 SECOND + +/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/electric_defense(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 3) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_rockets(atom/target) + if(!target) + to_chat(src, span("warning", "There's nothing to teleport to.")) + return FALSE + + var/list/nearby_things = range(1, target) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + var/turf/T = get_turf(src) + + var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread + s1.set_up(5, 1, T) + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread + s2.set_up(5, 1, target_turf) + + + T.visible_message(span("notice", "\The [src] vanishes!")) + s1.start() + + forceMove(target_turf) + playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) + to_chat(src, span("notice", "You teleport to \the [target_turf].")) + + target_turf.visible_message(span("warning", "\The [src] appears!")) + s2.start() + +/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_microsingularity(atom/target) + var/turf/T = get_turf(target) + visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) + playsound(src, 'sound/weapons/Laser.ogg', 50, 1) + face_atom(T) + var/obj/item/projectile/arc/microsingulo/sphere = new(loc) + sphere.old_style_target(T, src) + sphere.fire() + + + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5 //Final stand + icon_state = "imperion-phase" + icon_living = "imperion-phase" + icon_dead = "imperion-phase" + desc = "A precursor mecha on it's last legs, sparking, seeming vunerable up close" + movement_cooldown = 60 + projectiletype = /obj/item/projectile/energy/homing_bolt/missile + ranged_attack_delay = 0.5 SECONDS + special_attack_min_range = 1 + special_attack_max_range = 9 + special_attack_cooldown = 5 SECONDS + melee_attack_delay = 1 SECOND + + size_multiplier = 1.50 + + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + + wreckage = null + pilot_type = null + var/obj/item/shield_projector/shields = null + + armor = list( + "melee" = -500, + "bullet" = 75, + "laser" = 75, + "energy" = 75, + "bomb" = 75, + "bio" = 100, + "rad" = 100 + ) + + loot_list = list(/obj/item/clothing/suit/armor/alien = 60, + /obj/item/clothing/suit/armor/alien/tank = 60, + /obj/item/prop/alien/junk = 60, + /obj/item/prop/alien/junk = 60, + /obj/item/prop/alien/junk = 60, + /obj/item/prop/alien/junk = 60, + /obj/item/prop/alien/junk = 60, + /obj/item/weapon/gun/energy/alien = 60, + /obj/item/weapon/gun/energy/alien = 60, + /obj/random/tool/alien = 60, + /obj/random/tool/alien = 60, + /obj/item/weapon/cell/device/weapon/recharge/alien = 60, + /obj/item/weapon/cell/device/weapon/recharge/alien = 60, + /obj/item/clothing/suit/armor/alien = 60, + /obj/item/clothing/suit/armor/alien/tank = 60, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/weapon/gun/energy/alien = 60, + /obj/item/weapon/gun/energy/alien = 60, + /obj/random/tool/alien = 60, + /obj/random/tool/alien = 60, + /obj/item/weapon/cell/device/weapon/recharge/alien = 60, + /obj/item/weapon/cell/device/weapon/recharge/alien = 60, + /obj/item/clothing/suit/armor/reactive/vistor = 50, + /obj/item/clothing/suit/armor/reactive/vistor = 50, + /obj/item/clothing/suit/armor/protectionbubble = 50, + /obj/item/clothing/suit/armor/protectionbubble = 50, + /obj/item/clothing/suit/armor/tesla/vistor = 60, + /obj/item/clothing/suit/armor/tesla/vistor = 60, + /obj/item/shield_projector/rectangle/automatic/orange = 10, + /obj/item/shield_projector/rectangle/automatic/imperion = 0.5, + /obj/item/clothing/head/vrwizard = 60, + /obj/item/clothing/suit/vrwizard = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 60, + /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 60, + /obj/item/clothing/head/psy_crown/candycrown = 60, + /obj/item/clothing/gloves/stamina = 60, + /obj/item/clothing/suit/armor/buffvest = 60, + /obj/item/weapon/melee/cullingcane = 60, + /obj/item/weapon/bluespace_harpoon = 60, + /obj/item/weapon/flame/lighter/supermatter/syndismzippo = 60, + /obj/item/weapon/gun/energy/vepr/plasma = 60, + /obj/item/weapon/gun/energy/medigun = 60 + ) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/electric_defense(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + if(prob(50)) + var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + else + var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_rockets(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + sleep(1.5 SECONDS) + var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + sleep(1.5 SECONDS) + var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_microsingularity(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 3) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperiontesla(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + if(prob(50)) + sleep(1.5) + var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionblaster(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + else + sleep(1.5) + var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperionspear(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase5/Initialize(mapload) + shields = new /obj/item/shield_projector/rectangle/automatic/imperion(src) + return ..() + +/obj/item/shield_projector/rectangle/automatic/imperion + shield_health = 250 + max_shield_health = 250 + shield_regen_delay = 60 SECONDS + shield_regen_amount = 50 + size_x = 2 + size_y = 2 + color = "#631644" + high_color = "#631644" + low_color = "#631644" + +//projectile time, mostly for phase five +/obj/item/projectile/bullet/imperionspear + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 700 + submunition_spread_min = 200 + submunitions = list(/obj/item/projectile/energy/imperionspear = 5) + +/obj/item/projectile/bullet/imperionspear/on_range() + qdel(src) + +/obj/item/projectile/energy/imperionspear + name = "energy spear" + icon_state = "arcane_barrage" + damage = 16 + armor_penetration = 35 + damage_type = BURN + check_armour = "laser" + speed = 7.0 + + flash_strength = 0 + +/obj/item/projectile/bullet/imperionblaster + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 1500 + submunition_spread_min = 300 + submunitions = list(/obj/item/projectile/energy/imperionblaster = 8) + +/obj/item/projectile/bullet/imperionblaster/on_range() + qdel(src) + +/obj/item/projectile/energy/imperionblaster + name = "energy pellet" + icon_state = "dark_pellet" + damage = 15 + armor_penetration = 100 + damage_type = BURN + check_armour = "laser" + speed = 4.5 + + flash_strength = 0 + +/obj/item/projectile/bullet/imperiontesla + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 400 + submunition_spread_min = 50 + submunitions = list(/obj/item/projectile/energy/imperiontesla = 2) + +/obj/item/projectile/bullet/imperiontesla/on_range() + qdel(src) + +/obj/item/projectile/energy/imperiontesla + name = "energy sphere" + icon_state = "tesla_projectile" + damage = 25 + armor_penetration = 50 + damage_type = BURN + check_armour = "energy" + agony = 50 + speed = 10.0 + + flash_strength = 0 + +/obj/item/projectile/energy/homing_bolt/missile + name = "homing rocket" + icon_state = "atrocket" + damage = 20 + damage_type = BURN + check_armour = "bullet" + +/obj/item/projectile/energy/homing_bolt/missile/on_hit(atom/target, blocked=0) + explosion(target, 0, 0, 2, 4)//No need to have a question. + return 1 + +/obj/item/projectile/energy/homing_bolt/missile/throw_impact(atom/target, var/speed) + explosion(target, 0, 0, 2, 4)//No need to have a question. + qdel(src) + +//Cool boss visuals, auras, and me saying no to stun. + +/obj/item/weapon/grenade/shooter/laserpellet + name = "laser pellet grenade" + desc = "Unleashes not hit scan lasers." + projectile_types = list(/obj/item/projectile/energy/mob/midlaser) + +//te,porarly removing mob_overlay_state = "red_electricity_constant" to try and fix the visual bug +/datum/modifier/bossbuff + name = "boss_buff" + + on_created_text = "You feel an intense and overwhelming rage overtake you as you go berserk!" + on_expired_text = "The blaze of rage inside you has ran out." + stacks = MODIFIER_STACK_EXTEND + + disable_duration_percent = 0 + +/mob/living/simple_mob/mechanical/mecha/imperion/Initialize() + add_modifier(/datum/modifier/bossbuff, null, src) // Slime is always swole. + return ..() + +/datum/modifier/aura/despair + name = "ruin" + mob_overlay_state = "cult_aura" + + aura_max_distance = 28 + + on_created_text = "You feel like you're falling into ruin!" + on_expired_text = "The ruin feeling is gone." + stacks = MODIFIER_STACK_EXTEND + +/datum/modifier/aura/despair/tick() + if(holder.stat == DEAD) + expire() + + if(ishuman(holder)) // Robolimbs need this code sadly. + var/mob/living/carbon/human/H = holder + for(var/obj/item/organ/external/E in H.organs) + var/obj/item/organ/external/O = E + O.heal_damage(-0.1, -0.1, 0, 0) + else + holder.adjustBruteLoss(0.1) + holder.adjustFireLoss(0,1) + +/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/heal_aura() + for(var/mob/living/L in view(src, 28)) + if(L.stat == DEAD) + continue + L.add_modifier(/datum/modifier/aura/despair, null, src) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/vistors.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/vistors.dm index e925102c41..c27d96c11d 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/vistors.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/vistors.dm @@ -1,326 +1,326 @@ -/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded - name = "vistor blue" - icon = 'icons/mob/animal_vg.dmi' - icon_state = "drone3" - icon_living = "drone3" - maxHealth = 25 - health = 25 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/homing_bolt - melee_attack_delay = 4 SECOND - - melee_damage_lower = 12 - melee_damage_upper = 12 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting - - wreckage = null - pilot_type = /mob/living/simple_mob/mechanical/mecha/vistor/vistorblue - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 100 - if(prob(reflectchance)) - var/damage_mod = rand(2,4) - var/projectile_dam_type = P.damage_type - var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3))) - var/armorcheck = run_armor_check(null, P.check_armour) - var/soakedcheck = get_armor_soak(null, P.check_armour) - if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))) - visible_message("The [P.name] bounces off of [src]'s shield!", \ - "The [P.name] bounces off of [src]'s shield!") - new /obj/item/weapon/material/shard/shrapnel(src.loc) - if(!(P.damage_type == BRUTE || P.damage_type == BURN)) - projectile_dam_type = BRUTE - incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased. - apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P) - return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect. - else - visible_message("The [P.name] gets reflected by [src]'s shield!", \ - "The [P.name] gets reflected by [src]'s shield!") - damage_mod = rand(3,5) - incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3))) - if(!(P.damage_type == BRUTE || P.damage_type == BURN)) - projectile_dam_type = BURN - incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased. - apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P) - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue - name = "vistor blue" - icon = 'icons/mob/animal_vg.dmi' - icon_state = "drone0" - icon_living = "drone0" - - mob_class = MOB_CLASS_ABERRATION - - faction = "vistor" - - maxHealth = 75 - health = 75 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/homing_bolt - melee_attack_delay = 4 SECOND - - melee_damage_lower = 12 - melee_damage_upper = 12 - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - - armor = list( - "melee" = 20, - "bullet" = 20, - "laser" = 20, - "energy" = 10, - "bomb" = 10, - "bio" = 100, - "rad" = 100 - ) - - wreckage = null - pilot_type = null - - var/grenade_type = /obj/item/weapon/grenade/shooter/energy/homing - var/grenade_timer = 50 //CHOMPEdit - special_attack_cooldown = 45 SECONDS - special_attack_min_range = 2 - special_attack_max_range = 7 - - loot_list = list(/obj/item/clothing/suit/armor/protectionbubble = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/should_special_attack(atom/A) - var/mob_count = 0 // Are there enough mobs to consider grenading? - var/turf/T = get_turf(A) - for(var/mob/M in range(T, 2)) - if(M.faction == faction) // Don't grenade our friends - return FALSE - if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade - if(!M.stat) // Dead things don't warrant a grenade - mob_count ++ - if(mob_count < 2) - return FALSE - else - return TRUE - -// Yes? Throw the grenade -/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/do_special_attack(atom/A) - set waitfor = FALSE - set_AI_busy(TRUE) - - var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) - if(istype(G)) - G.throw_at(A, G.throw_range, G.throw_speed, src) - G.det_time = grenade_timer //CHOMPEdit - G.activate(src) //CHOMPEdit - special_attack_charges = max(special_attack_charges-1, 0) - - set_AI_busy(FALSE) - -/obj/item/weapon/grenade/shooter/energy/homing //This is a horrid idea - name = "homing grenade" - desc = "A horrifically dangerous rave in a can." - projectile_types = list(/obj/item/projectile/energy/homing_bolt) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen - name = "vistor green" - icon = 'icons/mob/animal_vg.dmi' - icon_state = "mushroom" - icon_living = "mushroom" - maxHealth = 100 - health = 100 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/arc/spore - melee_attack_delay = 4 SECOND - - wreckage = null - pilot_type = null - - melee_damage_lower = 12 - melee_damage_upper = 12 - ai_holder_type = /datum/ai_holder/hostile/ranged/robust - - special_attack_cooldown = 2 SECONDS - special_attack_min_range = 2 - special_attack_max_range = 7 - - loot_list = list(/obj/item/clothing/suit/armor/reactive/vistor = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen/do_special_attack(atom/A) - var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src)) - P.launch_projectile(A, BP_TORSO, src) - - -/mob/living/simple_mob/mechanical/mecha/vistor/vistorpurple - name = "vistor purple" - icon = 'icons/mob/animal_vg.dmi' - icon_state = "scarybat" - icon_living = "scarybat" - maxHealth = 100 - health = 100 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = null - melee_attack_delay = 4 SECOND - - wreckage = null - pilot_type = null - - melee_damage_lower = 12 - melee_damage_upper = 12 - alpha = 15 - - loot_list = list(/obj/item/clothing/suit/armor/tesla/vistor = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistoryellow - name = "vistor yellow" - icon = 'icons/mob/animal.dmi' - icon_state = "chick" - icon_living = "chick" - maxHealth = 25 - health = 25 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = null - melee_attack_delay = 6 SECOND - - wreckage = null - pilot_type = null - - attack_armor_pen = 25 - melee_damage_lower = 5 - melee_damage_upper = 20 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting - mob_size = MOB_MINISCULE - density = 0 - -/mob/living/simple_mob/mechanical/mecha/vistor/vistororange - name = "vistor orange?" - icon = 'icons/mecha/mecha.dmi' - icon_state = "honker" - icon_living = "honker" - maxHealth = 150 - health = 150 - movement_cooldown = 0 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/gaussrifle - melee_attack_delay = 4 SECOND - - var/obj/item/shield_projector/shields = null - - armor = list( - "melee" = 30, - "bullet" = 30, - "laser" = 30, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - - wreckage = null - pilot_type = null - - melee_damage_lower = 25 - melee_damage_upper = 25 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting - - ranged_attack_delay = 3 SECONDS - loot_list = list(/obj/item/clothing/suit/armor/alien/vistor = 100 - ) - -/mob/living/simple_mob/mechanical/mecha/vistor/vistororange/Initialize(mapload) - shields = new /obj/item/shield_projector/rectangle/automatic/orange(src) - return ..() - -/obj/item/shield_projector/rectangle/automatic/orange - shield_health = 10 - max_shield_health = 10 - shield_regen_delay = 3 SECONDS - shield_regen_amount = 10 - size_x = 2 - size_y = 2 - color = "#FF6633" - high_color = "#FF6633" - low_color = "#FF6633" - -//obj/item/clothing/suit/armor/alien/vistor -//obj/item/clothing/suit/armor/tesla/vistor -//obj/item/clothing/suit/armor/reactive/vistor -//obj/item/clothing/suit/armor/protectionbubble - -/mob/living/simple_mob/mechanical/mecha/forgotten - name = "Forgotten" - icon = 'icons/mecha/mecha.dmi' - icon_state = "mime" - icon_living = "mime" - maxHealth = 150 - health = 150 - movement_cooldown = 0 - damage_fatigue_mult = 0 - alpha = 175 - - armor = list( - "melee" = 30, - "bullet" = 30, - "laser" = 30, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - - wreckage = /obj/structure/loot_pile/mecha/phazon/forgotten - pilot_type = null - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/artillery - - melee_attack_delay = 3 SECOND - - melee_damage_lower = 35 - melee_damage_upper = 35 - - projectiletype = /obj/item/projectile/arc/fragmentation/mortar/forgotten - - projectile_dispersion = 30 - projectile_accuracy = -100 - -/obj/item/projectile/arc/fragmentation/mortar/forgotten - icon_state = "mortar" - fragment_amount = 4 - spread_range = 5 - -/mob/living/simple_mob/mechanical/mecha/vistor/death() - ..() - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - -/obj/structure/loot_pile/mecha/phazon/forgotten - name = "forgotten wreckage" - desc = "The ruins of some unfortunate forgoten mecha type. Perhaps something is salvageable." - icon_state = "mime-broken" - -/datum/ai_holder/simple_mob/ranged/kiting/artillery - mauling = TRUE - run_if_this_close = 2 - min_distance_to_destination = 3 - can_flee = TRUE +/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded + name = "vistor blue" + icon = 'icons/mob/animal_vg.dmi' + icon_state = "drone3" + icon_living = "drone3" + maxHealth = 25 + health = 25 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/homing_bolt + melee_attack_delay = 4 SECOND + + melee_damage_lower = 12 + melee_damage_upper = 12 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting + + wreckage = null + pilot_type = /mob/living/simple_mob/mechanical/mecha/vistor/vistorblue + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 100 + if(prob(reflectchance)) + var/damage_mod = rand(2,4) + var/projectile_dam_type = P.damage_type + var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3))) + var/armorcheck = run_armor_check(null, P.check_armour) + var/soakedcheck = get_armor_soak(null, P.check_armour) + if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))) + visible_message("The [P.name] bounces off of [src]'s shield!", \ + "The [P.name] bounces off of [src]'s shield!") + new /obj/item/weapon/material/shard/shrapnel(src.loc) + if(!(P.damage_type == BRUTE || P.damage_type == BURN)) + projectile_dam_type = BRUTE + incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased. + apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P) + return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect. + else + visible_message("The [P.name] gets reflected by [src]'s shield!", \ + "The [P.name] gets reflected by [src]'s shield!") + damage_mod = rand(3,5) + incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3))) + if(!(P.damage_type == BRUTE || P.damage_type == BURN)) + projectile_dam_type = BURN + incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased. + apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P) + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue + name = "vistor blue" + icon = 'icons/mob/animal_vg.dmi' + icon_state = "drone0" + icon_living = "drone0" + + mob_class = MOB_CLASS_ABERRATION + + faction = "vistor" + + maxHealth = 75 + health = 75 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/homing_bolt + melee_attack_delay = 4 SECOND + + melee_damage_lower = 12 + melee_damage_upper = 12 + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + + armor = list( + "melee" = 20, + "bullet" = 20, + "laser" = 20, + "energy" = 10, + "bomb" = 10, + "bio" = 100, + "rad" = 100 + ) + + wreckage = null + pilot_type = null + + var/grenade_type = /obj/item/weapon/grenade/shooter/energy/homing + var/grenade_timer = 50 //CHOMPEdit + special_attack_cooldown = 45 SECONDS + special_attack_min_range = 2 + special_attack_max_range = 7 + + loot_list = list(/obj/item/clothing/suit/armor/protectionbubble = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/should_special_attack(atom/A) + var/mob_count = 0 // Are there enough mobs to consider grenading? + var/turf/T = get_turf(A) + for(var/mob/M in range(T, 2)) + if(M.faction == faction) // Don't grenade our friends + return FALSE + if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade + if(!M.stat) // Dead things don't warrant a grenade + mob_count ++ + if(mob_count < 2) + return FALSE + else + return TRUE + +// Yes? Throw the grenade +/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/do_special_attack(atom/A) + set waitfor = FALSE + set_AI_busy(TRUE) + + var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) + if(istype(G)) + G.throw_at(A, G.throw_range, G.throw_speed, src) + G.det_time = grenade_timer //CHOMPEdit + G.activate(src) //CHOMPEdit + special_attack_charges = max(special_attack_charges-1, 0) + + set_AI_busy(FALSE) + +/obj/item/weapon/grenade/shooter/energy/homing //This is a horrid idea + name = "homing grenade" + desc = "A horrifically dangerous rave in a can." + projectile_types = list(/obj/item/projectile/energy/homing_bolt) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen + name = "vistor green" + icon = 'icons/mob/animal_vg.dmi' + icon_state = "mushroom" + icon_living = "mushroom" + maxHealth = 100 + health = 100 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/arc/spore + melee_attack_delay = 4 SECOND + + wreckage = null + pilot_type = null + + melee_damage_lower = 12 + melee_damage_upper = 12 + ai_holder_type = /datum/ai_holder/hostile/ranged/robust + + special_attack_cooldown = 2 SECONDS + special_attack_min_range = 2 + special_attack_max_range = 7 + + loot_list = list(/obj/item/clothing/suit/armor/reactive/vistor = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen/do_special_attack(atom/A) + var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src)) + P.launch_projectile(A, BP_TORSO, src) + + +/mob/living/simple_mob/mechanical/mecha/vistor/vistorpurple + name = "vistor purple" + icon = 'icons/mob/animal_vg.dmi' + icon_state = "scarybat" + icon_living = "scarybat" + maxHealth = 100 + health = 100 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = null + melee_attack_delay = 4 SECOND + + wreckage = null + pilot_type = null + + melee_damage_lower = 12 + melee_damage_upper = 12 + alpha = 15 + + loot_list = list(/obj/item/clothing/suit/armor/tesla/vistor = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistoryellow + name = "vistor yellow" + icon = 'icons/mob/animal.dmi' + icon_state = "chick" + icon_living = "chick" + maxHealth = 25 + health = 25 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = null + melee_attack_delay = 6 SECOND + + wreckage = null + pilot_type = null + + attack_armor_pen = 25 + melee_damage_lower = 5 + melee_damage_upper = 20 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting + mob_size = MOB_MINISCULE + density = 0 + +/mob/living/simple_mob/mechanical/mecha/vistor/vistororange + name = "vistor orange?" + icon = 'icons/mecha/mecha.dmi' + icon_state = "honker" + icon_living = "honker" + maxHealth = 150 + health = 150 + movement_cooldown = 0 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/gaussrifle + melee_attack_delay = 4 SECOND + + var/obj/item/shield_projector/shields = null + + armor = list( + "melee" = 30, + "bullet" = 30, + "laser" = 30, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + + wreckage = null + pilot_type = null + + melee_damage_lower = 25 + melee_damage_upper = 25 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting + + ranged_attack_delay = 3 SECONDS + loot_list = list(/obj/item/clothing/suit/armor/alien/vistor = 100 + ) + +/mob/living/simple_mob/mechanical/mecha/vistor/vistororange/Initialize(mapload) + shields = new /obj/item/shield_projector/rectangle/automatic/orange(src) + return ..() + +/obj/item/shield_projector/rectangle/automatic/orange + shield_health = 10 + max_shield_health = 10 + shield_regen_delay = 3 SECONDS + shield_regen_amount = 10 + size_x = 2 + size_y = 2 + color = "#FF6633" + high_color = "#FF6633" + low_color = "#FF6633" + +//obj/item/clothing/suit/armor/alien/vistor +//obj/item/clothing/suit/armor/tesla/vistor +//obj/item/clothing/suit/armor/reactive/vistor +//obj/item/clothing/suit/armor/protectionbubble + +/mob/living/simple_mob/mechanical/mecha/forgotten + name = "Forgotten" + icon = 'icons/mecha/mecha.dmi' + icon_state = "mime" + icon_living = "mime" + maxHealth = 150 + health = 150 + movement_cooldown = 0 + damage_fatigue_mult = 0 + alpha = 175 + + armor = list( + "melee" = 30, + "bullet" = 30, + "laser" = 30, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + + wreckage = /obj/structure/loot_pile/mecha/phazon/forgotten + pilot_type = null + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/artillery + + melee_attack_delay = 3 SECOND + + melee_damage_lower = 35 + melee_damage_upper = 35 + + projectiletype = /obj/item/projectile/arc/fragmentation/mortar/forgotten + + projectile_dispersion = 30 + projectile_accuracy = -100 + +/obj/item/projectile/arc/fragmentation/mortar/forgotten + icon_state = "mortar" + fragment_amount = 4 + spread_range = 5 + +/mob/living/simple_mob/mechanical/mecha/vistor/death() + ..() + new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + +/obj/structure/loot_pile/mecha/phazon/forgotten + name = "forgotten wreckage" + desc = "The ruins of some unfortunate forgoten mecha type. Perhaps something is salvageable." + icon_state = "mime-broken" + +/datum/ai_holder/simple_mob/ranged/kiting/artillery + mauling = TRUE + run_if_this_close = 2 + min_distance_to_destination = 3 + can_flee = TRUE base_wander_delay = 4 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/wizards.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/wizards.dm index fb9267049d..4f01733e5d 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/wizards.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/wizards.dm @@ -1,214 +1,214 @@ -/datum/category_item/catalogue/fauna/vrerror - name = "VR Creations" - desc = "Upon investigation of the strange creatures, they appear \ - to be constructed of hardlight technology, with connections to common \ - VR equipment. It is unknown what their purpose is at this time." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/vr - name = "vr creation" - desc = "A digital creature" - icon = 'icons/mob/animal_vg.dmi' - icon_state = "bookbat_purple" - icon_living = "bookbat_purple" - icon_dead = "bookbat_purple_dead" - catalogue_data = list(/datum/category_item/catalogue/fauna/vrerror) - - mob_class = MOB_CLASS_ABERRATION - - faction = "vr" - - maxHealth = 40 - health = 40 - movement_cooldown = 1 - unsuitable_atoms_damage = 0 - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard - melee_attack_delay = 4 SECOND - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting - - melee_damage_lower = 8 - melee_damage_upper = 15 - size_multiplier = 1.50 - - loot_list = list(/obj/item/clothing/head/vrwizard = 10, - /obj/item/clothing/suit/vrwizard = 10, - /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 10, - /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 10, - /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 10, - /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 10 - ) - -/mob/living/simple_mob/vr/firewiz - name = "hardlight creation fire" - icon_state = "bookbat_red" - icon_living = "bookbat_red" - icon_dead = "bookbat_red_dead" - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/fire - -/mob/living/simple_mob/vr/poisonwiz - name = "hardlight creation poison" - icon_state = "bookbat_green" - icon_living = "bookbat_green" - icon_dead = "bookbat_green_dead" - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/poison - -/mob/living/simple_mob/vr/lightingwiz - name = "hardlight creation lighting" - icon_state = "bookbat_woody" - icon_living = "bookbat_woody" - icon_dead = "bookbat_woody_dead" - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/lighting - -/mob/living/simple_mob/vr/frostwiz - name = "hardlight creation frost" - icon_state = "bookbat_blue" - icon_living = "bookbat_blue" - icon_dead = "bookbat_blue_dead" - projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/frost - -/mob/living/simple_mob/vr/glitch - name = "glitch" - desc = "You shouldn't be seeing this, run" - icon = 'icons/mob/fish.dmi' - icon_state = "" - icon_living = "" - icon_dead = "" - projectiletype = null - - maxHealth = 20 - health = 20 - movement_cooldown = -3 - unsuitable_atoms_damage = 0 - projectiletype = null - melee_attack_delay = 0 SECOND - - melee_damage_lower = 8 - melee_damage_upper = 8 - -/mob/living/simple_mob/vr/glitch/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - L.add_modifier(/datum/modifier/digitizing, 60 SECONDS) - -/mob/living/simple_mob/vr/doomknight - name = "hardlight creation doomknight" - projectiletype = null - - maxHealth = 70 - health = 70 - movement_cooldown = 4 - unsuitable_atoms_damage = 0 - projectiletype = null - melee_attack_delay = 8 SECOND - - melee_damage_lower = 30 - melee_damage_upper = 30 - -/mob/living/simple_mob/vr/doomknight/apply_melee_effects(var/atom/A) //If you get hit by this slow thing, you have 5 minuites to live. - if(isliving(A)) - var/mob/living/L = A - L.add_modifier(/datum/modifier/doomed, 300 SECONDS) - - -//Spells -/obj/item/projectile/energy/homing_bolt/wizard - damage = 15 - speed = 1.0 - -/obj/item/projectile/energy/homing_bolt/wizard/fire - modifier_type_to_apply = /datum/modifier/wizfire - modifier_duration = 6 SECONDS - icon_state = "fireball2" - -/obj/item/projectile/energy/homing_bolt/wizard/lighting - modifier_type_to_apply = /datum/modifier/wizfire/lighting - modifier_duration = 6 SECONDS - -/obj/item/projectile/energy/homing_bolt/wizard/poison - modifier_type_to_apply = /datum/modifier/wizpoison - modifier_duration = 6 SECONDS - icon_state = "green_pellet" - -/obj/item/projectile/energy/homing_bolt/wizard/frost - modifier_type_to_apply = /datum/modifier/wizpoison/frost - modifier_duration = 6 SECONDS - icon_state = "ice_2" - -/datum/modifier/wizfire - name = "wizfire" - desc = "Can you even see this in game?" - mob_overlay_state = "on_fire" - - on_created_text = "You are on digital fire." - on_expired_text = "You feel better." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - var/damage_per_tick = 1.5 - bleeding_rate_percent = 0.7 - -/datum/modifier/wizfire/tick() - holder.inflict_heat_damage(damage_per_tick) - -/datum/modifier/wizfire/lighting - name = "wizlighting" - desc = "Can you even see this in game?." - mob_overlay_state = "blue_electricity_constant" - - on_created_text = "You are filled with digital lighting." - on_expired_text = "You feel better." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - damage_per_tick = 1.0 - incoming_fire_damage_percent = 1.1 - -/datum/modifier/wizpoison - name = "wizpoison" - desc = "Can you even see this in game?." - mob_overlay_state = "poisoned" - - on_created_text = "You are on digital poisoned." - on_expired_text = "You feel better." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - var/damage_per_tick = 3 - -/datum/modifier/wizpoison/tick() - if(holder.stat == DEAD) - expire(silent = TRUE) - holder.inflict_poison_damage(damage_per_tick) - -/datum/modifier/wizpoison/frost - name = "wizfrost" - desc = "Can you even see this in game?." - mob_overlay_state = "chilled" - - on_created_text = "You are on freezing, digitally." - on_expired_text = "You feel better." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - damage_per_tick = 1 - slowdown = 0.5 - -/datum/modifier/digitizing - name = "digital" - desc = "Can you even see this in game?." - mob_overlay_state = "corana" - - on_created_text = "You feel less real." - on_expired_text = "You feel real again." - stacks = MODIFIER_STACK_ALLOWED //How does this stack? - max_health_percent = 0.7 - -/datum/modifier/aura/crumbling - name = "crumbling" - desc = "Can you even see this in game?." - mob_overlay_state = "cult_aura" - - on_created_text = "You feel like the end is nigh." - on_expired_text = "You feel safe for now." - aura_max_distance = 4 - max_health_percent = 0.9 - disable_duration_percent = 1.2 - incoming_damage_percent = 1.2 - incoming_oxy_damage_percent = 2 - incoming_hal_damage_percent = 2 - incoming_healing_percent = 0.8 - -/datum/modifier/aura/crumbling/superboss +/datum/category_item/catalogue/fauna/vrerror + name = "VR Creations" + desc = "Upon investigation of the strange creatures, they appear \ + to be constructed of hardlight technology, with connections to common \ + VR equipment. It is unknown what their purpose is at this time." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/vr + name = "vr creation" + desc = "A digital creature" + icon = 'icons/mob/animal_vg.dmi' + icon_state = "bookbat_purple" + icon_living = "bookbat_purple" + icon_dead = "bookbat_purple_dead" + catalogue_data = list(/datum/category_item/catalogue/fauna/vrerror) + + mob_class = MOB_CLASS_ABERRATION + + faction = "vr" + + maxHealth = 40 + health = 40 + movement_cooldown = 1 + unsuitable_atoms_damage = 0 + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard + melee_attack_delay = 4 SECOND + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting + + melee_damage_lower = 8 + melee_damage_upper = 15 + size_multiplier = 1.50 + + loot_list = list(/obj/item/clothing/head/vrwizard = 10, + /obj/item/clothing/suit/vrwizard = 10, + /obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 10, + /obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 10, + /obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 10, + /obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 10 + ) + +/mob/living/simple_mob/vr/firewiz + name = "hardlight creation fire" + icon_state = "bookbat_red" + icon_living = "bookbat_red" + icon_dead = "bookbat_red_dead" + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/fire + +/mob/living/simple_mob/vr/poisonwiz + name = "hardlight creation poison" + icon_state = "bookbat_green" + icon_living = "bookbat_green" + icon_dead = "bookbat_green_dead" + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/poison + +/mob/living/simple_mob/vr/lightingwiz + name = "hardlight creation lighting" + icon_state = "bookbat_woody" + icon_living = "bookbat_woody" + icon_dead = "bookbat_woody_dead" + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/lighting + +/mob/living/simple_mob/vr/frostwiz + name = "hardlight creation frost" + icon_state = "bookbat_blue" + icon_living = "bookbat_blue" + icon_dead = "bookbat_blue_dead" + projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/frost + +/mob/living/simple_mob/vr/glitch + name = "glitch" + desc = "You shouldn't be seeing this, run" + icon = 'icons/mob/fish.dmi' + icon_state = "" + icon_living = "" + icon_dead = "" + projectiletype = null + + maxHealth = 20 + health = 20 + movement_cooldown = -3 + unsuitable_atoms_damage = 0 + projectiletype = null + melee_attack_delay = 0 SECOND + + melee_damage_lower = 8 + melee_damage_upper = 8 + +/mob/living/simple_mob/vr/glitch/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + L.add_modifier(/datum/modifier/digitizing, 60 SECONDS) + +/mob/living/simple_mob/vr/doomknight + name = "hardlight creation doomknight" + projectiletype = null + + maxHealth = 70 + health = 70 + movement_cooldown = 4 + unsuitable_atoms_damage = 0 + projectiletype = null + melee_attack_delay = 8 SECOND + + melee_damage_lower = 30 + melee_damage_upper = 30 + +/mob/living/simple_mob/vr/doomknight/apply_melee_effects(var/atom/A) //If you get hit by this slow thing, you have 5 minuites to live. + if(isliving(A)) + var/mob/living/L = A + L.add_modifier(/datum/modifier/doomed, 300 SECONDS) + + +//Spells +/obj/item/projectile/energy/homing_bolt/wizard + damage = 15 + speed = 1.0 + +/obj/item/projectile/energy/homing_bolt/wizard/fire + modifier_type_to_apply = /datum/modifier/wizfire + modifier_duration = 6 SECONDS + icon_state = "fireball2" + +/obj/item/projectile/energy/homing_bolt/wizard/lighting + modifier_type_to_apply = /datum/modifier/wizfire/lighting + modifier_duration = 6 SECONDS + +/obj/item/projectile/energy/homing_bolt/wizard/poison + modifier_type_to_apply = /datum/modifier/wizpoison + modifier_duration = 6 SECONDS + icon_state = "green_pellet" + +/obj/item/projectile/energy/homing_bolt/wizard/frost + modifier_type_to_apply = /datum/modifier/wizpoison/frost + modifier_duration = 6 SECONDS + icon_state = "ice_2" + +/datum/modifier/wizfire + name = "wizfire" + desc = "Can you even see this in game?" + mob_overlay_state = "on_fire" + + on_created_text = "You are on digital fire." + on_expired_text = "You feel better." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + var/damage_per_tick = 1.5 + bleeding_rate_percent = 0.7 + +/datum/modifier/wizfire/tick() + holder.inflict_heat_damage(damage_per_tick) + +/datum/modifier/wizfire/lighting + name = "wizlighting" + desc = "Can you even see this in game?." + mob_overlay_state = "blue_electricity_constant" + + on_created_text = "You are filled with digital lighting." + on_expired_text = "You feel better." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + damage_per_tick = 1.0 + incoming_fire_damage_percent = 1.1 + +/datum/modifier/wizpoison + name = "wizpoison" + desc = "Can you even see this in game?." + mob_overlay_state = "poisoned" + + on_created_text = "You are on digital poisoned." + on_expired_text = "You feel better." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + var/damage_per_tick = 3 + +/datum/modifier/wizpoison/tick() + if(holder.stat == DEAD) + expire(silent = TRUE) + holder.inflict_poison_damage(damage_per_tick) + +/datum/modifier/wizpoison/frost + name = "wizfrost" + desc = "Can you even see this in game?." + mob_overlay_state = "chilled" + + on_created_text = "You are on freezing, digitally." + on_expired_text = "You feel better." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + damage_per_tick = 1 + slowdown = 0.5 + +/datum/modifier/digitizing + name = "digital" + desc = "Can you even see this in game?." + mob_overlay_state = "corana" + + on_created_text = "You feel less real." + on_expired_text = "You feel real again." + stacks = MODIFIER_STACK_ALLOWED //How does this stack? + max_health_percent = 0.7 + +/datum/modifier/aura/crumbling + name = "crumbling" + desc = "Can you even see this in game?." + mob_overlay_state = "cult_aura" + + on_created_text = "You feel like the end is nigh." + on_expired_text = "You feel safe for now." + aura_max_distance = 4 + max_health_percent = 0.9 + disable_duration_percent = 1.2 + incoming_damage_percent = 1.2 + incoming_oxy_damage_percent = 2 + incoming_hal_damage_percent = 2 + incoming_healing_percent = 0.8 + +/datum/modifier/aura/crumbling/superboss aura_max_distance = 16 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm index b5f320bda4..bbd5a73d5e 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm @@ -1,233 +1,233 @@ -/mob/living/simple_mob/humanoid/cultist/magus/rift - name = "Rift Magus" - maxHealth = 225 //Boss Mobs should be tanky. - health = 225 - - melee_damage_lower = 15 - melee_damage_upper = 22 - attack_armor_pen = 50 - heat_resist = 1 - cold_resist = 1 - movement_cooldown = -1.5 - projectiletype = /obj/item/projectile/energy/plasma/vepr/inversion - melee_attack_delay = 4 SECOND - ranged_attack_delay = 1.5 SECONDS - special_attack_min_range = 1 - special_attack_max_range = 7 - special_attack_cooldown = 7 SECONDS - icon_state = "void-magnus" - icon_living = "void-magnus" - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - vore_active = 1 - vore_capacity = 6 - vore_bump_chance = 20 - size_multiplier = 1.10 - faction = "demon" - damage_fatigue_mult = 0.5 // We don't want to give them a flat, huge boost to attack speed, but at the same time, make them fight harder the closer they are to dying. - injury_enrages = TRUE - - armor_soak = list( - "melee" = 2, - "bullet" = 2, - "laser" = 2, - "energy" = 2, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - loot_list = list(/obj/item/clothing/head/culthood/void = 100, - /obj/item/clothing/suit/cultrobes/void = 100, - /obj/item/clothing/shoes/boots/cult/void = 100, - /obj/item/clothing/gloves/tactical/void = 100, - /obj/item/weapon/melee/voidblade = 25, - /obj/item/device/soulstone = 25, - /obj/item/device/soulstone = 25, - /obj/item/device/soulstone = 25, - /obj/item/capture_crystal/demon = 25, - /obj/item/capture_crystal/wendigo = 25 - ) - -/mob/living/simple_mob/humanoid/cultist/magus/rift/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - var/leech = rand(1,100) - if(L.nutrition) - L.adjust_nutrition(-leech) - adjust_nutrition(leech) - if(prob(25)) - L.adjustHalLoss(leech) - -/mob/living/simple_mob/humanoid/cultist/magus/rift/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_microsingularity(atom/target) - new /mob/living/simple_mob/vore/demonAI (src.loc) - -/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/electric_defense(atom/target) - var/obj/item/projectile/P = new /obj/item/projectile/energy/fireball(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - -/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_rockets(atom/target) - if(!target) - to_chat(src, span("warning", "There's nothing to teleport to.")) - return FALSE - - var/list/nearby_things = range(1, target) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - var/turf/T = get_turf(src) - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/smoke_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message(span("notice", "\The [src] vanishes!")) - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, span("notice", "You teleport to \the [target_turf].")) - - target_turf.visible_message(span("warning", "\The [src] appears!")) - s2.start() - -/obj/item/weapon/grenade/spawnergrenade/riftwallers - name = "manhack delivery grenade" - spawner_type = /mob/living/simple_mob/vore/demonAI - deliveryamt = 1 - icon = 'icons/obj/device.dmi' - icon_state = "implant_melted" - color = "#f50202" - -/obj/item/projectile/energy/plasma/vepr/inversion - name = "inversion bolt" - damage = 20 - eyeblur = 0 - armor_penetration = 50 - light_range = 2 - light_power = -2 - light_color = "#FFFFFF" - damage_type = BURN - -/mob/living/simple_mob/humanoid/cultist/magus/rift - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = SA_ICON_LIVING - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/cultist/magus/rift/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/cultist/magus/rift/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/cultist/magus/rift/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", - "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", - "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", - "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", - "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) - - -//Boss loot things. Not sure if this is approriate but will be bapped if not. - -/obj/item/clothing/head/culthood/void - name = "void magnus hood" - color = "#1C1C1C" - armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) - cold_protection = HEAD - heat_protection = HEAD - -/obj/item/clothing/suit/cultrobes/void - name = "void magnus robes" - color = "#1C1C1C" - armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/shoes/boots/cult/void - name = "void magnus boots" - color = "#1C1C1C" - armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/gloves/tactical/void - desc = "These warm red gloves glow warmly, while making the world round them seem darker." - name = "cult gloves" - color = "#1C1C1C" - icon_state = "work" - item_state = "wgloves" - force = 10 - punch_force = 8 - armor = list(melee = 30, bullet = 25, laser = 25, energy = 40, bomb = 30, bio = 10, rad = 10) - -/obj/item/weapon/melee/voidblade - name = "cult blade" - desc = "An arcane weapon wielded by the followers of Nar-Sie." - icon_state = "cultblade" - origin_tech = list(TECH_COMBAT = 1, TECH_ARCANE = 2) - w_class = ITEMSIZE_LARGE - force = 40 - throwforce = 20 - defend_chance = 25 - projectile_parry_chance = 25 - armor_penetration = 25 - hitsound = 'sound/weapons/bladeslice.ogg' - drop_sound = 'sound/items/drop/sword.ogg' - pickup_sound = 'sound/items/pickup/sword.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - edge = TRUE - sharp = TRUE - -/obj/item/capture_crystal/demon - spawn_mob_type = /mob/living/simple_mob/vore/demonAI - -/obj/item/capture_crystal/wendigo - spawn_mob_type = /mob/living/simple_mob/vore/demonAI/wendigo +/mob/living/simple_mob/humanoid/cultist/magus/rift + name = "Rift Magus" + maxHealth = 225 //Boss Mobs should be tanky. + health = 225 + + melee_damage_lower = 15 + melee_damage_upper = 22 + attack_armor_pen = 50 + heat_resist = 1 + cold_resist = 1 + movement_cooldown = -1.5 + projectiletype = /obj/item/projectile/energy/plasma/vepr/inversion + melee_attack_delay = 4 SECOND + ranged_attack_delay = 1.5 SECONDS + special_attack_min_range = 1 + special_attack_max_range = 7 + special_attack_cooldown = 7 SECONDS + icon_state = "void-magnus" + icon_living = "void-magnus" + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + vore_active = 1 + vore_capacity = 6 + vore_bump_chance = 20 + size_multiplier = 1.10 + faction = "demon" + damage_fatigue_mult = 0.5 // We don't want to give them a flat, huge boost to attack speed, but at the same time, make them fight harder the closer they are to dying. + injury_enrages = TRUE + + armor_soak = list( + "melee" = 2, + "bullet" = 2, + "laser" = 2, + "energy" = 2, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + + loot_list = list(/obj/item/clothing/head/culthood/void = 100, + /obj/item/clothing/suit/cultrobes/void = 100, + /obj/item/clothing/shoes/boots/cult/void = 100, + /obj/item/clothing/gloves/tactical/void = 100, + /obj/item/weapon/melee/voidblade = 25, + /obj/item/device/soulstone = 25, + /obj/item/device/soulstone = 25, + /obj/item/device/soulstone = 25, + /obj/item/capture_crystal/demon = 25, + /obj/item/capture_crystal/wendigo = 25 + ) + +/mob/living/simple_mob/humanoid/cultist/magus/rift/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + var/leech = rand(1,100) + if(L.nutrition) + L.adjust_nutrition(-leech) + adjust_nutrition(leech) + if(prob(25)) + L.adjustHalLoss(leech) + +/mob/living/simple_mob/humanoid/cultist/magus/rift/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_microsingularity(atom/target) + new /mob/living/simple_mob/vore/demonAI (src.loc) + +/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/electric_defense(atom/target) + var/obj/item/projectile/P = new /obj/item/projectile/energy/fireball(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_rockets(atom/target) + if(!target) + to_chat(src, span("warning", "There's nothing to teleport to.")) + return FALSE + + var/list/nearby_things = range(1, target) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + var/turf/T = get_turf(src) + + var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/smoke_spread + s1.set_up(5, 1, T) + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread + s2.set_up(5, 1, target_turf) + + + T.visible_message(span("notice", "\The [src] vanishes!")) + s1.start() + + forceMove(target_turf) + playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) + to_chat(src, span("notice", "You teleport to \the [target_turf].")) + + target_turf.visible_message(span("warning", "\The [src] appears!")) + s2.start() + +/obj/item/weapon/grenade/spawnergrenade/riftwallers + name = "manhack delivery grenade" + spawner_type = /mob/living/simple_mob/vore/demonAI + deliveryamt = 1 + icon = 'icons/obj/device.dmi' + icon_state = "implant_melted" + color = "#f50202" + +/obj/item/projectile/energy/plasma/vepr/inversion + name = "inversion bolt" + damage = 20 + eyeblur = 0 + armor_penetration = 50 + light_range = 2 + light_power = -2 + light_color = "#FFFFFF" + damage_type = BURN + +/mob/living/simple_mob/humanoid/cultist/magus/rift + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = SA_ICON_LIVING + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/cultist/magus/rift/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/cultist/magus/rift/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/cultist/magus/rift/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", + "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", + "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", + "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", + "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) + + +//Boss loot things. Not sure if this is approriate but will be bapped if not. + +/obj/item/clothing/head/culthood/void + name = "void magnus hood" + color = "#1C1C1C" + armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) + cold_protection = HEAD + heat_protection = HEAD + +/obj/item/clothing/suit/cultrobes/void + name = "void magnus robes" + color = "#1C1C1C" + armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + +/obj/item/clothing/shoes/boots/cult/void + name = "void magnus boots" + color = "#1C1C1C" + armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10) + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + +/obj/item/clothing/gloves/tactical/void + desc = "These warm red gloves glow warmly, while making the world round them seem darker." + name = "cult gloves" + color = "#1C1C1C" + icon_state = "work" + item_state = "wgloves" + force = 10 + punch_force = 8 + armor = list(melee = 30, bullet = 25, laser = 25, energy = 40, bomb = 30, bio = 10, rad = 10) + +/obj/item/weapon/melee/voidblade + name = "cult blade" + desc = "An arcane weapon wielded by the followers of Nar-Sie." + icon_state = "cultblade" + origin_tech = list(TECH_COMBAT = 1, TECH_ARCANE = 2) + w_class = ITEMSIZE_LARGE + force = 40 + throwforce = 20 + defend_chance = 25 + projectile_parry_chance = 25 + armor_penetration = 25 + hitsound = 'sound/weapons/bladeslice.ogg' + drop_sound = 'sound/items/drop/sword.ogg' + pickup_sound = 'sound/items/pickup/sword.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + edge = TRUE + sharp = TRUE + +/obj/item/capture_crystal/demon + spawn_mob_type = /mob/living/simple_mob/vore/demonAI + +/obj/item/capture_crystal/wendigo + spawn_mob_type = /mob/living/simple_mob/vore/demonAI/wendigo diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm index ed17348ff5..edfee604b2 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm @@ -1,264 +1,264 @@ -/mob/living/simple_mob/humanoid/cultist - maxHealth = 75 - health = 75 - -/mob/living/simple_mob/humanoid/cultist/human - movement_cooldown = 1 - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/humanoid/cultist/caster - movement_cooldown = 1 - projectiletype = /obj/item/projectile/energy/inversion - melee_damage_lower = 7 - melee_damage_upper = 7 - -/mob/living/simple_mob/humanoid/cultist/tesh - movement_cooldown = -1 - melee_damage_lower = 7 - melee_damage_upper = 7 - maxHealth = 37 - health = 37 - -/mob/living/simple_mob/humanoid/cultist/castertesh - movement_cooldown = -1 - projectiletype = /obj/item/projectile/energy/inversion - melee_damage_lower = 7 - melee_damage_upper = 7 - maxHealth = 37 - health = 37 - -/mob/living/simple_mob/humanoid/cultist/elite - movement_cooldown = 1 - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/humanoid/cultist/magus - movement_cooldown = 1 - projectiletype = /obj/item/projectile/energy/inversion - maxHealth = 100 - health = 100 - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/humanoid/cultist/hunter - maxHealth = 87 //Ehhh, this AI is like mini-boss at best - health = 87 - movement_cooldown = 0 - melee_damage_lower = 21 //Saw Cleaver Brutality - melee_damage_upper = 21 - -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball //Teleporting Cultists, now with fireballs - name = "Burning Mage" - desc = "An indiuval wrapped up in red robes, with orange highlights, their paws glowing.." - icon_state = "fire-fluff" - icon_living = "fire-fluff" - special_attack_min_range = 4 - special_attack_max_range = 7 - special_attack_cooldown = 10 SECONDS - movement_cooldown = 0 - - harm_intent_damage = 5 - melee_damage_lower = 7 - melee_damage_upper = 7 - ai_holder_type = /datum/ai_holder/simple_mob/ranged - projectiletype = /obj/item/projectile/energy/fireball - -/mob/living/simple_mob/humanoid/cultist/noodle - name = "Converted" - desc = "An indiuval wrapped up in a makeshift rig, made from fallen cultist." - icon_state = "cobra-cultist" - icon_living = "cobra-cultist" - maxHealth = 75 - health = 75 - - faction = "cult" - - status_flags = 0 - - response_help = "pokes" - response_disarm = "shoves" - response_harm = "hits" - - harm_intent_damage = 5 - melee_damage_lower = 7 - melee_damage_upper = 7 - attack_sharp = 1 - attack_edge = 1 - attacktext = list("slashed", "stabbed") - armor = list(melee = 60, bullet = 40, laser = 60, energy = 80, bomb = 25, bio = 100, rad = 100) - attack_sound = 'sound/weapons/rapidslice.ogg' - projectiletype = /obj/item/projectile/energy/plasma/vepr - projectilesound = 'sound/weapons/spiderlunge.ogg' - movement_cooldown = 2 - ai_holder_type = /datum/ai_holder/simple_mob/ranged - -/obj/item/shield_projector/rectangle/automatic/magus - name = "cult shield stone" - desc = "A stone wielded by only the most powerful of cult leaders. It projects a shield around the user." - icon = 'icons/obj/device.dmi' - icon_state = "implant_melted" - shield_health = 100 - max_shield_health = 100 - shield_regen_delay = 10 SECONDS - -//Nibbler// -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = " Through fire and smoke, you have been grappled and shoved head first into a gapping maw. Rippling powerful red flesh dragging deep into the mage's gullet, your frame causing their stomach is swell out against crimson robes. As you're forced to curl up in the stomach, the walls would ripple, flickers of orange dancing as they press and knead against your flesh. Laughter, and gutteral stomach noises would fill your ears as the cultist firmly kneads their hanging gutt, sloshing it further about." - - B.emote_lists[DM_HOLD] = list( - "Your useless struggling and squirming only causes the cultist to pause, firmly grasping their gut and shoving down on their belly.", - "As you lay within the gullet, you would be rocked about as the cultist jaunts around the physical and redspace realm.", - "The bloated organ around you groans and rumbles, the flesh rippling as a wave of heat washes over you.",) - - B.emote_lists[DM_DIGEST] = list( - "Your useless struggling would seem to just cause pleasured rubblings and cackling. The taunt stomach jostling around even further, as if attempt to encourage your squirming further.", - "Your body would be ushered upwards, you glimpsing the outside world as it looked as if you're about to be released. The cultist then gulps down, sending you plummet back down into the gullet, their taunt belly jiggling as it's walls squish firmly against you..", - "Caustic juices splash over to you as the predator's stomach sways, the belly walls rumbling and rippling as they release a loud caustic belch." ,) - - -/mob/living/simple_mob/humanoid/cultist/noodle - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/cultist/noodle/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/cultist/noodle/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/cultist/noodle/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = " Through fire and smoke, you have been grappled and shoved head first into a gapping maw. Rippling powerful red flesh dragging deep into the mage's gullet, your frame causing their stomach is swell out against crimson robes. As you're forced to curl up in the stomach, the walls would ripple, and knead against your flesh. Laughter, and gutteral stomach noises would fill your ears as the cultist firmly kneads their hanging gut, sloshing it further about before shoving you deeper into their system, descending deep within the serpent." - - B.emote_lists[DM_HOLD] = list( - "As you're forced to lay down in the gullet, you can feel each swift and strong movement of their tail. the stomach walls forcing your body to shift alongside it.", - "As you shift around, the dark red flesh would ripple, air rushing past you as the beast lets out a thunderous belch.", - "As you shift about, the beast lifts their tail and slams it down, trying to encourage you to relax. Your their's.",) - - B.emote_lists[DM_DIGEST] = list( - "Your squirming and thrasing only causes the serpent to curl their tail around your frame, squeeze down on it in sync with the muscles, pressing you further into the caustic acids.", - "Your body would swish and slosh in the burbling caustic acid as it nips at your armor and flesh.", - "The serpent cultist would let out a lazy out, streching, then remebers your exsistance pressing a claw into the you shaped bulge and grumbling." ,) - - -//Thank you Ears for the teshari bellies -/mob/living/simple_mob/humanoid/cultist/tesh - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/cultist/tesh/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/cultist/tesh/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/cultist/tesh/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "Taking advantage of your weakened state, the %pred makes their pounce! The world going dark as the ravenous Teshari forces your battered frame down their throat. It all coming to a stop as you're packed neatly into their steaming guts. Low and content chuckling barely audible over the rising cacophony of the stomach's activity." - - B.emote_lists[DM_HOLD] = list( - "Your body is bounced and jostled as the %pred purses their next prey. Unimpeded by your weight and eager for more.", - "The already oprrssive hold of the %belly restrains you with a heavy clench and squeeze from the hands outside. The %pred securing their catch.", - "You're given a heavy squeeze as the stale air is forced out from the %pred giving a crass belch. Suspending you in a claustrophobic hold until the organ relaxes with more stale air filling the space.",) - - B.emote_lists[DM_DIGEST] = list( - "The bubbling of the carnivorous, little predator's belly cuts off the sounds outside, the greedy walls working in and giving you a fresh coat of enzymes.", - "The %pred traces their claws over your form and sings an incantation, and you feel your strength wane as the walls work in with renewed vigor.", - "The motion of the %pred's trotting sloshes and sways you from side to side, occasionally coating you in more hot fluids! Eating away your stamina with irragular flexes to allow them to keep eating you away." ,) - - -/mob/living/simple_mob/humanoid/cultist/castertesh - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/cultist/castertesh/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/cultist/castertesh/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/cultist/castertesh/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "Not too long after you hit the ground the caster makes their way to your fallen self. The ground below you glows a deep red and you sink through the surface, only to find yourself folded tightly in a cramped, slick, and caustic chamber! The mage's chanting barely audible over the sounds of the stomach walls making their claim." - - B.emote_lists[DM_HOLD] = list( - "Your body is bounced and jostled as the %pred purses their next prey. Unimpeded by your weight and eager for more.", - "The already oprrssive hold of the %belly restrains you with a heavy clench and squeeze from the hands outside. The %pred securing their catch.", - "You're given a heavy squeeze as the stale air is forced out from the %pred giving a crass belch. Suspending you in a claustrophobic hold until the organ relaxes with more stale air filling the space.",) - - B.emote_lists[DM_DIGEST] = list( - "The bubbling of the carnivorous, little predator's belly cuts off the sounds outside, the greedy walls working in and giving you a fresh coat of enzymes.", - "The %pred traces their claws over your form and sings an incantation, and you feel your strength wane as the walls work in with renewed vigor.", - "The motion of the %pred's trotting sloshes and sways you from side to side, occasionally coating you in more hot fluids! Eating away your stamina with irragular flexes to allow them to keep eating you away." ,) +/mob/living/simple_mob/humanoid/cultist + maxHealth = 75 + health = 75 + +/mob/living/simple_mob/humanoid/cultist/human + movement_cooldown = 1 + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/humanoid/cultist/caster + movement_cooldown = 1 + projectiletype = /obj/item/projectile/energy/inversion + melee_damage_lower = 7 + melee_damage_upper = 7 + +/mob/living/simple_mob/humanoid/cultist/tesh + movement_cooldown = -1 + melee_damage_lower = 7 + melee_damage_upper = 7 + maxHealth = 37 + health = 37 + +/mob/living/simple_mob/humanoid/cultist/castertesh + movement_cooldown = -1 + projectiletype = /obj/item/projectile/energy/inversion + melee_damage_lower = 7 + melee_damage_upper = 7 + maxHealth = 37 + health = 37 + +/mob/living/simple_mob/humanoid/cultist/elite + movement_cooldown = 1 + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/humanoid/cultist/magus + movement_cooldown = 1 + projectiletype = /obj/item/projectile/energy/inversion + maxHealth = 100 + health = 100 + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/humanoid/cultist/hunter + maxHealth = 87 //Ehhh, this AI is like mini-boss at best + health = 87 + movement_cooldown = 0 + melee_damage_lower = 21 //Saw Cleaver Brutality + melee_damage_upper = 21 + +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball //Teleporting Cultists, now with fireballs + name = "Burning Mage" + desc = "An indiuval wrapped up in red robes, with orange highlights, their paws glowing.." + icon_state = "fire-fluff" + icon_living = "fire-fluff" + special_attack_min_range = 4 + special_attack_max_range = 7 + special_attack_cooldown = 10 SECONDS + movement_cooldown = 0 + + harm_intent_damage = 5 + melee_damage_lower = 7 + melee_damage_upper = 7 + ai_holder_type = /datum/ai_holder/simple_mob/ranged + projectiletype = /obj/item/projectile/energy/fireball + +/mob/living/simple_mob/humanoid/cultist/noodle + name = "Converted" + desc = "An indiuval wrapped up in a makeshift rig, made from fallen cultist." + icon_state = "cobra-cultist" + icon_living = "cobra-cultist" + maxHealth = 75 + health = 75 + + faction = "cult" + + status_flags = 0 + + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" + + harm_intent_damage = 5 + melee_damage_lower = 7 + melee_damage_upper = 7 + attack_sharp = 1 + attack_edge = 1 + attacktext = list("slashed", "stabbed") + armor = list(melee = 60, bullet = 40, laser = 60, energy = 80, bomb = 25, bio = 100, rad = 100) + attack_sound = 'sound/weapons/rapidslice.ogg' + projectiletype = /obj/item/projectile/energy/plasma/vepr + projectilesound = 'sound/weapons/spiderlunge.ogg' + movement_cooldown = 2 + ai_holder_type = /datum/ai_holder/simple_mob/ranged + +/obj/item/shield_projector/rectangle/automatic/magus + name = "cult shield stone" + desc = "A stone wielded by only the most powerful of cult leaders. It projects a shield around the user." + icon = 'icons/obj/device.dmi' + icon_state = "implant_melted" + shield_health = 100 + max_shield_health = 100 + shield_regen_delay = 10 SECONDS + +//Nibbler// +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = " Through fire and smoke, you have been grappled and shoved head first into a gapping maw. Rippling powerful red flesh dragging deep into the mage's gullet, your frame causing their stomach is swell out against crimson robes. As you're forced to curl up in the stomach, the walls would ripple, flickers of orange dancing as they press and knead against your flesh. Laughter, and gutteral stomach noises would fill your ears as the cultist firmly kneads their hanging gutt, sloshing it further about." + + B.emote_lists[DM_HOLD] = list( + "Your useless struggling and squirming only causes the cultist to pause, firmly grasping their gut and shoving down on their belly.", + "As you lay within the gullet, you would be rocked about as the cultist jaunts around the physical and redspace realm.", + "The bloated organ around you groans and rumbles, the flesh rippling as a wave of heat washes over you.",) + + B.emote_lists[DM_DIGEST] = list( + "Your useless struggling would seem to just cause pleasured rubblings and cackling. The taunt stomach jostling around even further, as if attempt to encourage your squirming further.", + "Your body would be ushered upwards, you glimpsing the outside world as it looked as if you're about to be released. The cultist then gulps down, sending you plummet back down into the gullet, their taunt belly jiggling as it's walls squish firmly against you..", + "Caustic juices splash over to you as the predator's stomach sways, the belly walls rumbling and rippling as they release a loud caustic belch." ,) + + +/mob/living/simple_mob/humanoid/cultist/noodle + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/cultist/noodle/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/cultist/noodle/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/cultist/noodle/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = " Through fire and smoke, you have been grappled and shoved head first into a gapping maw. Rippling powerful red flesh dragging deep into the mage's gullet, your frame causing their stomach is swell out against crimson robes. As you're forced to curl up in the stomach, the walls would ripple, and knead against your flesh. Laughter, and gutteral stomach noises would fill your ears as the cultist firmly kneads their hanging gut, sloshing it further about before shoving you deeper into their system, descending deep within the serpent." + + B.emote_lists[DM_HOLD] = list( + "As you're forced to lay down in the gullet, you can feel each swift and strong movement of their tail. the stomach walls forcing your body to shift alongside it.", + "As you shift around, the dark red flesh would ripple, air rushing past you as the beast lets out a thunderous belch.", + "As you shift about, the beast lifts their tail and slams it down, trying to encourage you to relax. Your their's.",) + + B.emote_lists[DM_DIGEST] = list( + "Your squirming and thrasing only causes the serpent to curl their tail around your frame, squeeze down on it in sync with the muscles, pressing you further into the caustic acids.", + "Your body would swish and slosh in the burbling caustic acid as it nips at your armor and flesh.", + "The serpent cultist would let out a lazy out, streching, then remebers your exsistance pressing a claw into the you shaped bulge and grumbling." ,) + + +//Thank you Ears for the teshari bellies +/mob/living/simple_mob/humanoid/cultist/tesh + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/cultist/tesh/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/cultist/tesh/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/cultist/tesh/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "Taking advantage of your weakened state, the %pred makes their pounce! The world going dark as the ravenous Teshari forces your battered frame down their throat. It all coming to a stop as you're packed neatly into their steaming guts. Low and content chuckling barely audible over the rising cacophony of the stomach's activity." + + B.emote_lists[DM_HOLD] = list( + "Your body is bounced and jostled as the %pred purses their next prey. Unimpeded by your weight and eager for more.", + "The already oprrssive hold of the %belly restrains you with a heavy clench and squeeze from the hands outside. The %pred securing their catch.", + "You're given a heavy squeeze as the stale air is forced out from the %pred giving a crass belch. Suspending you in a claustrophobic hold until the organ relaxes with more stale air filling the space.",) + + B.emote_lists[DM_DIGEST] = list( + "The bubbling of the carnivorous, little predator's belly cuts off the sounds outside, the greedy walls working in and giving you a fresh coat of enzymes.", + "The %pred traces their claws over your form and sings an incantation, and you feel your strength wane as the walls work in with renewed vigor.", + "The motion of the %pred's trotting sloshes and sways you from side to side, occasionally coating you in more hot fluids! Eating away your stamina with irragular flexes to allow them to keep eating you away." ,) + + +/mob/living/simple_mob/humanoid/cultist/castertesh + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/cultist/castertesh/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/cultist/castertesh/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/cultist/castertesh/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "Not too long after you hit the ground the caster makes their way to your fallen self. The ground below you glows a deep red and you sink through the surface, only to find yourself folded tightly in a cramped, slick, and caustic chamber! The mage's chanting barely audible over the sounds of the stomach walls making their claim." + + B.emote_lists[DM_HOLD] = list( + "Your body is bounced and jostled as the %pred purses their next prey. Unimpeded by your weight and eager for more.", + "The already oprrssive hold of the %belly restrains you with a heavy clench and squeeze from the hands outside. The %pred securing their catch.", + "You're given a heavy squeeze as the stale air is forced out from the %pred giving a crass belch. Suspending you in a claustrophobic hold until the organ relaxes with more stale air filling the space.",) + + B.emote_lists[DM_DIGEST] = list( + "The bubbling of the carnivorous, little predator's belly cuts off the sounds outside, the greedy walls working in and giving you a fresh coat of enzymes.", + "The %pred traces their claws over your form and sings an incantation, and you feel your strength wane as the walls work in with renewed vigor.", + "The motion of the %pred's trotting sloshes and sways you from side to side, occasionally coating you in more hot fluids! Eating away your stamina with irragular flexes to allow them to keep eating you away." ,) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/lore.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/lore.dm index 40803d7d97..e1f51e2dfc 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/lore.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/lore.dm @@ -1,220 +1,220 @@ -/datum/category_item/catalogue/fauna/eclipse - name = "The Eclipse" - desc = "Life on the Frontier is hard, and unregulated. Unlike life in \ - more 'civlized' areas of the Galaxy, violence and piracy remain common \ - this far out. The Eclipse cares naught for this, rather their attention \ - shifting to the fallen kingdoms and empires of the past. \ - Salavaging secerts and materials long forgotton and stiching them \ - togther in new, strange creations." - value = CATALOGUER_REWARD_TRIVIAL - unlocked_by_any = list(/datum/category_item/catalogue/fauna/eclipse) - -// Obtained by scanning all X. -/datum/category_item/catalogue/fauna/all_eclipse - name = "Collection - Eclipse" - desc = "You have scanned a large array of different types of eclipse memebers, \ - and therefore you have been granted a large sum of points, through this \ - entry." - value = CATALOGUER_REWARD_SUPERHARD - unlocked_by_all = list( - /datum/category_item/catalogue/fauna/eclipse/teslanoodle, - /datum/category_item/catalogue/fauna/eclipse/firemoff, - /datum/category_item/catalogue/fauna/eclipse/snipertesh, - /datum/category_item/catalogue/fauna/eclipse/radiation, - /datum/category_item/catalogue/fauna/eclipse/silvernoodle, - /datum/category_item/catalogue/fauna/eclipse/shotgunner, - /datum/category_item/catalogue/fauna/eclipse/bulletstorm, - /datum/category_item/catalogue/fauna/eclipse/ravanger, - /datum/category_item/catalogue/fauna/eclipse/hellhound, - /datum/category_item/catalogue/fauna/eclipse/wheel, - /datum/category_item/catalogue/fauna/eclipse/guardian, - /datum/category_item/catalogue/fauna/eclipse/pummler, - /datum/category_item/catalogue/fauna/eclipse/aeroblaster, - /datum/category_item/catalogue/fauna/eclipse/miner, - /datum/category_item/catalogue/fauna/eclipse/froststalker, - /datum/category_item/catalogue/fauna/eclipse/cryomancer - ) - -/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/teslanoodle) - -/datum/category_item/catalogue/fauna/eclipse/teslanoodle - name = "The Tesla Armor" - desc = "The tesla's units armor crackles with eletrical current. \ - Manifestation of such energy seeming to be summoned at will or at \ - random. This creation seems to be in a prototype phase." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/firemoff - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/firemoff) - -/datum/category_item/catalogue/fauna/eclipse/firemoff - name = "Eclipse Shielding" - desc = "Eclipse armor and uniform is unlike most others, seeming wide \ - and varied, but in reality is simplified to two diffrent types. \ - One of the Eclipse's first studies was a mix of precursor ablative and \ - bullet proof technolgy. They have gotten an understanding of it, they \ - are able to fuse it with many diffrent uniforms, allowing for a more \ - diverse apperance." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/snipertesh) - -/datum/category_item/catalogue/fauna/eclipse/snipertesh - name = "Cult-like rituals" - desc = "The Eclipse started off as a strange mixutre of a friendly \ - band, and lower tier orginization. as their technolgy has evolved, so did \ - their behaviors. Some sects begining to worship and heavly praise the fallen \ - precusor empires. Some going as far to try and revivive them, always to \ - mixed results, rarely resulting in in-fighting." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/radiation - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/radiation) - -/datum/category_item/catalogue/fauna/eclipse/radiation - name = "Nuclear Failures" - desc = "Failure is not an option for the Eclipse. More so, failure \ - is just another opportunity to learn. Their radiation units coming\ - from serveral failures of nuclear power soruces alongside failures amongst, \ - nuclear weaponry. Eventually creating quality weapons, and refitting their \ - power sources to radiation field generators." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/silvernoodle) - -/datum/category_item/catalogue/fauna/eclipse/silvernoodle - name = "Failed Selling" - desc = "While one would think the Eclipse would become rather wealthy and \ - fame from their line of work, they are instead rather average due to most \ - of their products having a high chance of failure. For every working weapon, \ - armor, tool, there are at least 10 failures. Resleeving and high quality \ - medication are one of the few reasons they have not wiped themselves out." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/shotgunner) - -/datum/category_item/catalogue/fauna/eclipse/shotgunner - name = "Specialized Arms" - desc = "The Eclipse's focus on utilizing precursor tech leads them down \ - strange weaponry. Even with firearms, they are always modified slightly \ - just to fufill having some form of what they see as future tech. \ - Although this leads to weapon failures, or creation accidents." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/bulletstorm - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/bulletstorm) - -/datum/category_item/catalogue/fauna/eclipse/bulletstorm - name = "Open Joining" - desc = "The Eclipse has many varying memebers, of all diffrent shapes, \ - sizes, and heritages. This is due to a varity of factors, which includes \ - high mortality rates, mutations, and body modification expermintation." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/ravanger) - -/datum/category_item/catalogue/fauna/eclipse/ravanger - name = "Resleeving Failures" - desc = "The Eclipse has precourdered many bits of resleeving equipment \ - but like most of that comes into their grasp it has become more dangerous \ - and expirmental. Corruption and malformed bodies have become common place, \ - minds becoming lost. But failure is non-exsistant, instead being repurosed \ - such as shaping them into ravanger units." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/hellhound - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/hellhound) - -/datum/category_item/catalogue/fauna/eclipse/hellhound - name = "Hellhound Units" - desc = "Equiped with specialized armor, the systems of the suit pairing \ - with their nervous system in an attempt to allow for better hunting. \ - Venom is found within their claws and fangs, the chemical compound being, \ - akin to soporific, The hellhound units are both useful for single target \ - hunting, and frontal assualt." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/wheel - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/wheel) - -/datum/category_item/catalogue/fauna/eclipse/wheel - name = "Armadillo" - desc = "With several strange creatures among their ranks, the Eclipse \ - has attempted strange and usual armors and tatics. With several being able \ - to curl up into a ball shape, the wheel armor was created, trying to turn \ - a rolling motion into an offensive force." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/guardian - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/guardian) - -/datum/category_item/catalogue/fauna/eclipse/guardian - name = "Slime Pits" - desc = "Another potential of failed resleeves are the slime pits, \ - the failed body being merged with one of their many slimes, creating something \ - akin to a promethean but having a mind more akin to a drone. Some of the \ - slime creations the similiar abilties to their slime counter parts, or \ - renamants of the donator's DNA." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/pummler - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler) - -/datum/category_item/catalogue/fauna/eclipse/pummler - name = "Hunter Unit - Pummler" - desc = "Another drone like creation, meld with alien sea life, and traces \ - renamants of solar grubs. Was orginally meant for assualting mecha pilots, \ - and tearing them free from the mechas, but prooved to be too variable with \ - results. Instead their desgin changing to that of hunting down single \ - targets across any and all terrains." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler) - -/datum/category_item/catalogue/fauna/eclipse/aeroblaster - name = "Eclipse Drones" - desc = "Sometimes, the failed resleeves only leave the fragments of a mind \ - behind. But even that is useful, latching onto the renamants of loyalty and \ - the brain's remaining procressing power to create special circuits for, \ - their drones." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/lunar/miner - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/miner) - -/datum/category_item/catalogue/fauna/eclipse/miner - name = "Bio-tech Unit" - desc = "One benefit of the slime units is they're able to easily interface \ - with the drone units. Cooperation is keenly unquie between the slime and \ - drone units. This is espically helpful within hazardous mining conditions \ - both being able to flee or alter plans as soon as either noitces." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/froststalker - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/froststalker) - -/datum/category_item/catalogue/fauna/eclipse/froststalker - name = "Mindless Ice" - desc = "Cryogel expermination has been one of the most active fronts, but \ - with it, countless failures. Whilst not on purpose, many of their number\ - have had their bodies freeze over, transforming into sentient creatures, \ - of ice. Their minds sometimes lost alongside their orginal form." - value = CATALOGUER_REWARD_MEDIUM - -/mob/living/simple_mob/humanoid/eclipse/solar/cryomancer - catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/cryomancer) - -/datum/category_item/catalogue/fauna/eclipse/cryomancer - name = "Cryomancers" - desc = "One of the few success in the Pluto Intitative, but one that \ - yields great results. Highly resistant to cold, and heat, more so then it's \ - contemparies, all the while wielding expirmental frost weaponry to deadly \ - effecieny. Rare and vaulable pieces in the Eclipse's army, they are rarely seen \ - but when utilized, that area is of high priority. " +/datum/category_item/catalogue/fauna/eclipse + name = "The Eclipse" + desc = "Life on the Frontier is hard, and unregulated. Unlike life in \ + more 'civlized' areas of the Galaxy, violence and piracy remain common \ + this far out. The Eclipse cares naught for this, rather their attention \ + shifting to the fallen kingdoms and empires of the past. \ + Salavaging secerts and materials long forgotton and stiching them \ + togther in new, strange creations." + value = CATALOGUER_REWARD_TRIVIAL + unlocked_by_any = list(/datum/category_item/catalogue/fauna/eclipse) + +// Obtained by scanning all X. +/datum/category_item/catalogue/fauna/all_eclipse + name = "Collection - Eclipse" + desc = "You have scanned a large array of different types of eclipse memebers, \ + and therefore you have been granted a large sum of points, through this \ + entry." + value = CATALOGUER_REWARD_SUPERHARD + unlocked_by_all = list( + /datum/category_item/catalogue/fauna/eclipse/teslanoodle, + /datum/category_item/catalogue/fauna/eclipse/firemoff, + /datum/category_item/catalogue/fauna/eclipse/snipertesh, + /datum/category_item/catalogue/fauna/eclipse/radiation, + /datum/category_item/catalogue/fauna/eclipse/silvernoodle, + /datum/category_item/catalogue/fauna/eclipse/shotgunner, + /datum/category_item/catalogue/fauna/eclipse/bulletstorm, + /datum/category_item/catalogue/fauna/eclipse/ravanger, + /datum/category_item/catalogue/fauna/eclipse/hellhound, + /datum/category_item/catalogue/fauna/eclipse/wheel, + /datum/category_item/catalogue/fauna/eclipse/guardian, + /datum/category_item/catalogue/fauna/eclipse/pummler, + /datum/category_item/catalogue/fauna/eclipse/aeroblaster, + /datum/category_item/catalogue/fauna/eclipse/miner, + /datum/category_item/catalogue/fauna/eclipse/froststalker, + /datum/category_item/catalogue/fauna/eclipse/cryomancer + ) + +/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/teslanoodle) + +/datum/category_item/catalogue/fauna/eclipse/teslanoodle + name = "The Tesla Armor" + desc = "The tesla's units armor crackles with eletrical current. \ + Manifestation of such energy seeming to be summoned at will or at \ + random. This creation seems to be in a prototype phase." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/firemoff + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/firemoff) + +/datum/category_item/catalogue/fauna/eclipse/firemoff + name = "Eclipse Shielding" + desc = "Eclipse armor and uniform is unlike most others, seeming wide \ + and varied, but in reality is simplified to two diffrent types. \ + One of the Eclipse's first studies was a mix of precursor ablative and \ + bullet proof technolgy. They have gotten an understanding of it, they \ + are able to fuse it with many diffrent uniforms, allowing for a more \ + diverse apperance." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/snipertesh) + +/datum/category_item/catalogue/fauna/eclipse/snipertesh + name = "Cult-like rituals" + desc = "The Eclipse started off as a strange mixutre of a friendly \ + band, and lower tier orginization. as their technolgy has evolved, so did \ + their behaviors. Some sects begining to worship and heavly praise the fallen \ + precusor empires. Some going as far to try and revivive them, always to \ + mixed results, rarely resulting in in-fighting." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/radiation + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/radiation) + +/datum/category_item/catalogue/fauna/eclipse/radiation + name = "Nuclear Failures" + desc = "Failure is not an option for the Eclipse. More so, failure \ + is just another opportunity to learn. Their radiation units coming\ + from serveral failures of nuclear power soruces alongside failures amongst, \ + nuclear weaponry. Eventually creating quality weapons, and refitting their \ + power sources to radiation field generators." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/silvernoodle) + +/datum/category_item/catalogue/fauna/eclipse/silvernoodle + name = "Failed Selling" + desc = "While one would think the Eclipse would become rather wealthy and \ + fame from their line of work, they are instead rather average due to most \ + of their products having a high chance of failure. For every working weapon, \ + armor, tool, there are at least 10 failures. Resleeving and high quality \ + medication are one of the few reasons they have not wiped themselves out." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/shotgunner) + +/datum/category_item/catalogue/fauna/eclipse/shotgunner + name = "Specialized Arms" + desc = "The Eclipse's focus on utilizing precursor tech leads them down \ + strange weaponry. Even with firearms, they are always modified slightly \ + just to fufill having some form of what they see as future tech. \ + Although this leads to weapon failures, or creation accidents." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/bulletstorm + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/bulletstorm) + +/datum/category_item/catalogue/fauna/eclipse/bulletstorm + name = "Open Joining" + desc = "The Eclipse has many varying memebers, of all diffrent shapes, \ + sizes, and heritages. This is due to a varity of factors, which includes \ + high mortality rates, mutations, and body modification expermintation." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/ravanger) + +/datum/category_item/catalogue/fauna/eclipse/ravanger + name = "Resleeving Failures" + desc = "The Eclipse has precourdered many bits of resleeving equipment \ + but like most of that comes into their grasp it has become more dangerous \ + and expirmental. Corruption and malformed bodies have become common place, \ + minds becoming lost. But failure is non-exsistant, instead being repurosed \ + such as shaping them into ravanger units." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/hellhound + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/hellhound) + +/datum/category_item/catalogue/fauna/eclipse/hellhound + name = "Hellhound Units" + desc = "Equiped with specialized armor, the systems of the suit pairing \ + with their nervous system in an attempt to allow for better hunting. \ + Venom is found within their claws and fangs, the chemical compound being, \ + akin to soporific, The hellhound units are both useful for single target \ + hunting, and frontal assualt." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/wheel + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/wheel) + +/datum/category_item/catalogue/fauna/eclipse/wheel + name = "Armadillo" + desc = "With several strange creatures among their ranks, the Eclipse \ + has attempted strange and usual armors and tatics. With several being able \ + to curl up into a ball shape, the wheel armor was created, trying to turn \ + a rolling motion into an offensive force." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/guardian + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/guardian) + +/datum/category_item/catalogue/fauna/eclipse/guardian + name = "Slime Pits" + desc = "Another potential of failed resleeves are the slime pits, \ + the failed body being merged with one of their many slimes, creating something \ + akin to a promethean but having a mind more akin to a drone. Some of the \ + slime creations the similiar abilties to their slime counter parts, or \ + renamants of the donator's DNA." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/pummler + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler) + +/datum/category_item/catalogue/fauna/eclipse/pummler + name = "Hunter Unit - Pummler" + desc = "Another drone like creation, meld with alien sea life, and traces \ + renamants of solar grubs. Was orginally meant for assualting mecha pilots, \ + and tearing them free from the mechas, but prooved to be too variable with \ + results. Instead their desgin changing to that of hunting down single \ + targets across any and all terrains." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler) + +/datum/category_item/catalogue/fauna/eclipse/aeroblaster + name = "Eclipse Drones" + desc = "Sometimes, the failed resleeves only leave the fragments of a mind \ + behind. But even that is useful, latching onto the renamants of loyalty and \ + the brain's remaining procressing power to create special circuits for, \ + their drones." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/lunar/miner + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/miner) + +/datum/category_item/catalogue/fauna/eclipse/miner + name = "Bio-tech Unit" + desc = "One benefit of the slime units is they're able to easily interface \ + with the drone units. Cooperation is keenly unquie between the slime and \ + drone units. This is espically helpful within hazardous mining conditions \ + both being able to flee or alter plans as soon as either noitces." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/froststalker + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/froststalker) + +/datum/category_item/catalogue/fauna/eclipse/froststalker + name = "Mindless Ice" + desc = "Cryogel expermination has been one of the most active fronts, but \ + with it, countless failures. Whilst not on purpose, many of their number\ + have had their bodies freeze over, transforming into sentient creatures, \ + of ice. Their minds sometimes lost alongside their orginal form." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/humanoid/eclipse/solar/cryomancer + catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/cryomancer) + +/datum/category_item/catalogue/fauna/eclipse/cryomancer + name = "Cryomancers" + desc = "One of the few success in the Pluto Intitative, but one that \ + yields great results. Highly resistant to cold, and heat, more so then it's \ + contemparies, all the while wielding expirmental frost weaponry to deadly \ + effecieny. Rare and vaulable pieces in the Eclipse's army, they are rarely seen \ + but when utilized, that area is of high priority. " value = CATALOGUER_REWARD_MEDIUM \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/mercenary.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/mercenary.dm index 5e89520df9..e6743834e3 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/mercenary.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/mercenary.dm @@ -1,6 +1,6 @@ -/mob/living/simple_mob/humanoid/merc/ranged/laser - projectiletype = /obj/item/projectile/energy/mob/midlaser - -/mob/living/simple_mob/humanoid/merc - health = 75 // improper cloning +/mob/living/simple_mob/humanoid/merc/ranged/laser + projectiletype = /obj/item/projectile/energy/mob/midlaser + +/mob/living/simple_mob/humanoid/merc + health = 75 // improper cloning maxHealth = 75 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/pirate.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/pirate.dm index f04d79d6df..e9768aaaed 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/pirate.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/pirate.dm @@ -1,15 +1,15 @@ -/mob/living/simple_mob/humanoid/pirate/ranged/handcannon - projectiletype = /obj/item/projectile/energy/mob/heavylaser - -/mob/living/simple_mob/humanoid/pirate/captain - projectiletype = /obj/item/projectile/energy/mob/heavylaser - -/mob/living/simple_mob/humanoid/pirate - maxHealth = 75 - health = 75 - -/mob/living/simple_mob/mechanical/mecha/ripley/pirate - maxHealth = 125 - -/mob/living/simple_mob/mechanical/mecha/ripley/pirate/last_stand_merc //Special version used as a quasi boss fight +/mob/living/simple_mob/humanoid/pirate/ranged/handcannon + projectiletype = /obj/item/projectile/energy/mob/heavylaser + +/mob/living/simple_mob/humanoid/pirate/captain + projectiletype = /obj/item/projectile/energy/mob/heavylaser + +/mob/living/simple_mob/humanoid/pirate + maxHealth = 75 + health = 75 + +/mob/living/simple_mob/mechanical/mecha/ripley/pirate + maxHealth = 125 + +/mob/living/simple_mob/mechanical/mecha/ripley/pirate/last_stand_merc //Special version used as a quasi boss fight maxHealth = 85 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm index e74a5bd03c..7c8242b9e4 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm @@ -1,219 +1,219 @@ -/mob/living/simple_mob/humanoid/starhunter/hunter/clone - name = "Avatar Of The Serpent" - icon_state = "avatar" - health = 15 - maxHealth = 15 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter - projectiletype = /obj/item/projectile/energy/ninjastar - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar - name = "Avatar Of The Serpent" - icon_state = "avatar" - health = 1000 //50 hits from 20 damage - maxHealth = 1000 //50 hits from 20 damage - damage_fatigue_mult = 0 - ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter - special_attack_cooldown = 20 SECONDS - special_attack_min_range = 1 - special_attack_max_range = 7 - projectiletype = /obj/item/projectile/energy/ninjastar - digestable = 0 - devourable = 0 - //note to self, expand the loot list later - loot_list = list(/obj/item/weapon/storage/belt/holding = 60, - /obj/item/clothing/glasses/omni = 60, - /obj/item/weapon/kinetic_crusher/glaive = 60, - /obj/item/slime_extract/sepia = 60, - /obj/item/weapon/circuitboard/defenseonelisk = 60, - /obj/item/weapon/circuitboard/paradoxrift = 60, - /obj/item/capture_crystal = 60 - ) - - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/updatehealth() - . = ..() - - if(health < maxHealth*0.25) - special_attack_cooldown = 5 SECONDS - projectiletype = /obj/item/projectile/bullet/ninjaburst - else if(health < maxHealth*0.5) - special_attack_cooldown = 10 SECONDS - projectiletype = /obj/item/projectile/energy/kunai - else if (health < maxHealth*0.75) - special_attack_cooldown = 15 SECONDS - projectiletype = /obj/item/projectile/energy/chakaram - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/do_special_attack(atom/A) - if(health < maxHealth*0.4) - if(prob(20)) - lightingstorm(A) - if(prob(20)) - lightingline(A) - if(prob(20)) - lightpillar(A) - if(prob(20)) - clones(A) - else - rapidfire_windup(A) - else if(health < maxHealth*0.7) - if(prob(25)) - lightingstorm(A) - if(prob(25)) - lightingline(A) - if(prob(25)) - lightpillar(A) - else - rapidfire_windup(A) - else - if(prob(50)) - lightingstrike(A) - else - lightpillar(A) - -/obj/item/projectile/energy/kunai //chip damage - name = "Energy Kunai" - icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin - icon_state = "kunai" - damage = 5 - armor_penetration = 65 //Gets into the gaps - speed = 2 - damage_type = BURN - check_armour = "laser" - -/obj/item/projectile/energy/chakaram //slower but hits harder - name = "Energy Chakaram" - icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin - icon_state = "chakaram" - damage = 25 - armor_penetration = 25 //Gets into the gaps - speed = 5 - damage_type = BURN - check_armour = "laser" - -/obj/item/projectile/bullet/ninjaburst - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 2600 - submunition_spread_min = 150 - submunitions = list(/obj/item/projectile/energy/kunai = 3, /obj/item/projectile/energy/chakaram = 1, /obj/item/projectile/energy/ninjastar = 3) - -/datum/ai_holder/simple_mob/ranged/aggressive/starhunter - vision_range = 14 - closest_distance = 5 - returns_home = TRUE // Stay close to the base... - wander = TRUE // ... but "patrol" a little. - intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. - mauling = TRUE - call_distance = 0 //Trying to disable this for the mobs - retaliate = TRUE - hostile = FALSE - violent_breakthrough = TRUE - respect_alpha = FALSE - pointblank = TRUE - -/obj/effect/calldown_attack_lighting - anchored = TRUE - density = FALSE - unacidable = TRUE - mouse_opacity = 0 - icon = 'icons/effects/effects.dmi' - icon_state = "drop_marker" - -/obj/effect/calldown_attack_lighting/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/calldown_attack_fire/LateInitialize() - var/delay = rand(25, 30) - spawn(delay-7) - lightning_strike(src.loc) - spawn(delay) - qdel(src) - - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstorm(atom/A) - var/list/potential_targets = ai_holder.list_targets() - for(var/atom/entry in potential_targets) - if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter)) - potential_targets -= entry - if(potential_targets.len) - var/iteration = clamp(potential_targets.len, 1, 3) - for(var/i = 0, i < iteration, i++) - if(!(potential_targets.len)) - break - var/mob/target = pick(potential_targets) - potential_targets -= target - lightingstormfollow(target) - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstormfollow(atom/target) - var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z)) - new /obj/effect/calldown_attack(get_turf(target)) - bomb_range -= get_turf(target) - for(var/i = 0, i < 4, i++) - var/turf/T = pick(bomb_range) - new /obj/effect/calldown_attack_lighting(T) - bomb_range -= T - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingline(atom/A) - var/list/potential_targets = ai_holder.list_targets() - for(var/atom/entry in potential_targets) - if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter)) - potential_targets -= entry - if(potential_targets.len) - var/iteration = clamp(potential_targets.len, 1, 3) - for(var/i = 0, i < iteration, i++) - if(!(potential_targets.len)) - break - var/mob/target = pick(potential_targets) - potential_targets -= target - lightinglinefollow(target) - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightinglinefollow(atom/target) - var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal - var/list/line_range = list() - var/turf/T = get_turf(target) - line_range += T - for(var/i = 1, i <= 7, i++) - switch(alignment) - if(1) - if(T.x-i > 0) - line_range += locate(T.x-i, T.y, T.z) - if(T.x+i <= world.maxx) - line_range += locate(T.x+i, T.y, T.z) - if(2) - if(T.y-i > 0) - line_range += locate(T.x, T.y-i, T.z) - if(T.y+i <= world.maxy) - line_range += locate(T.x, T.y+i, T.z) - for(var/turf/dropspot in line_range) - new /obj/effect/calldown_attack_lighting(dropspot) - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/clones(atom/A) - new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) - new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) - new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstrike(atom/A) - var/list/nearby_things = range(1, A) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - +/mob/living/simple_mob/humanoid/starhunter/hunter/clone + name = "Avatar Of The Serpent" + icon_state = "avatar" + health = 15 + maxHealth = 15 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter + projectiletype = /obj/item/projectile/energy/ninjastar + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar + name = "Avatar Of The Serpent" + icon_state = "avatar" + health = 1000 //50 hits from 20 damage + maxHealth = 1000 //50 hits from 20 damage + damage_fatigue_mult = 0 + ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter + special_attack_cooldown = 20 SECONDS + special_attack_min_range = 1 + special_attack_max_range = 7 + projectiletype = /obj/item/projectile/energy/ninjastar + digestable = 0 + devourable = 0 + //note to self, expand the loot list later + loot_list = list(/obj/item/weapon/storage/belt/holding = 60, + /obj/item/clothing/glasses/omni = 60, + /obj/item/weapon/kinetic_crusher/glaive = 60, + /obj/item/slime_extract/sepia = 60, + /obj/item/weapon/circuitboard/defenseonelisk = 60, + /obj/item/weapon/circuitboard/paradoxrift = 60, + /obj/item/capture_crystal = 60 + ) + + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/updatehealth() + . = ..() + + if(health < maxHealth*0.25) + special_attack_cooldown = 5 SECONDS + projectiletype = /obj/item/projectile/bullet/ninjaburst + else if(health < maxHealth*0.5) + special_attack_cooldown = 10 SECONDS + projectiletype = /obj/item/projectile/energy/kunai + else if (health < maxHealth*0.75) + special_attack_cooldown = 15 SECONDS + projectiletype = /obj/item/projectile/energy/chakaram + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/do_special_attack(atom/A) + if(health < maxHealth*0.4) + if(prob(20)) + lightingstorm(A) + if(prob(20)) + lightingline(A) + if(prob(20)) + lightpillar(A) + if(prob(20)) + clones(A) + else + rapidfire_windup(A) + else if(health < maxHealth*0.7) + if(prob(25)) + lightingstorm(A) + if(prob(25)) + lightingline(A) + if(prob(25)) + lightpillar(A) + else + rapidfire_windup(A) + else + if(prob(50)) + lightingstrike(A) + else + lightpillar(A) + +/obj/item/projectile/energy/kunai //chip damage + name = "Energy Kunai" + icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin + icon_state = "kunai" + damage = 5 + armor_penetration = 65 //Gets into the gaps + speed = 2 + damage_type = BURN + check_armour = "laser" + +/obj/item/projectile/energy/chakaram //slower but hits harder + name = "Energy Chakaram" + icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin + icon_state = "chakaram" + damage = 25 + armor_penetration = 25 //Gets into the gaps + speed = 5 + damage_type = BURN + check_armour = "laser" + +/obj/item/projectile/bullet/ninjaburst + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 2600 + submunition_spread_min = 150 + submunitions = list(/obj/item/projectile/energy/kunai = 3, /obj/item/projectile/energy/chakaram = 1, /obj/item/projectile/energy/ninjastar = 3) + +/datum/ai_holder/simple_mob/ranged/aggressive/starhunter + vision_range = 14 + closest_distance = 5 + returns_home = TRUE // Stay close to the base... + wander = TRUE // ... but "patrol" a little. + intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. + mauling = TRUE + call_distance = 0 //Trying to disable this for the mobs + retaliate = TRUE + hostile = FALSE + violent_breakthrough = TRUE + respect_alpha = FALSE + pointblank = TRUE + +/obj/effect/calldown_attack_lighting + anchored = TRUE + density = FALSE + unacidable = TRUE + mouse_opacity = 0 + icon = 'icons/effects/effects.dmi' + icon_state = "drop_marker" + +/obj/effect/calldown_attack_lighting/Initialize(mapload) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/calldown_attack_fire/LateInitialize() + var/delay = rand(25, 30) + spawn(delay-7) + lightning_strike(src.loc) + spawn(delay) + qdel(src) + + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstorm(atom/A) + var/list/potential_targets = ai_holder.list_targets() + for(var/atom/entry in potential_targets) + if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter)) + potential_targets -= entry + if(potential_targets.len) + var/iteration = clamp(potential_targets.len, 1, 3) + for(var/i = 0, i < iteration, i++) + if(!(potential_targets.len)) + break + var/mob/target = pick(potential_targets) + potential_targets -= target + lightingstormfollow(target) + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstormfollow(atom/target) + var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z)) + new /obj/effect/calldown_attack(get_turf(target)) + bomb_range -= get_turf(target) + for(var/i = 0, i < 4, i++) + var/turf/T = pick(bomb_range) + new /obj/effect/calldown_attack_lighting(T) + bomb_range -= T + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingline(atom/A) + var/list/potential_targets = ai_holder.list_targets() + for(var/atom/entry in potential_targets) + if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter)) + potential_targets -= entry + if(potential_targets.len) + var/iteration = clamp(potential_targets.len, 1, 3) + for(var/i = 0, i < iteration, i++) + if(!(potential_targets.len)) + break + var/mob/target = pick(potential_targets) + potential_targets -= target + lightinglinefollow(target) + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightinglinefollow(atom/target) + var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal + var/list/line_range = list() + var/turf/T = get_turf(target) + line_range += T + for(var/i = 1, i <= 7, i++) + switch(alignment) + if(1) + if(T.x-i > 0) + line_range += locate(T.x-i, T.y, T.z) + if(T.x+i <= world.maxx) + line_range += locate(T.x+i, T.y, T.z) + if(2) + if(T.y-i > 0) + line_range += locate(T.x, T.y-i, T.z) + if(T.y+i <= world.maxy) + line_range += locate(T.x, T.y+i, T.z) + for(var/turf/dropspot in line_range) + new /obj/effect/calldown_attack_lighting(dropspot) + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/clones(atom/A) + new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) + new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) + new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc) + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstrike(atom/A) + var/list/nearby_things = range(1, A) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + new/obj/effect/calldown_attack_lighting(target_turf) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm index 06c08bbccb..901e1deadb 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm @@ -1,156 +1,156 @@ -/mob/living/simple_mob/humanoid/starhunter - name = "Starhunter Initiate" - desc = "A strange critter cladded in strange armor." - icon = 'modular_chomp/icons/mob/starhunters.dmi' - icon_state = "sun" - icon_living = "sun" - icon_dead = "statisgem" - icon_gib = "syndicate_gib" - taser_kill = 0 - - faction = "starhunter" - movement_cooldown = 0 - - status_flags = 0 - - response_help = "pokes" - response_disarm = "shoves" - response_harm = "hits" - - health = 120 //This may be high, but intend for the combative ones to be on their own. - maxHealth = 120 - harm_intent_damage = 5 - melee_damage_lower = 17 //machette - melee_damage_upper = 17 //beg knife go brrr - attack_sharp = 1 - attack_edge = 1 - attacktext = list("slashed", "stabbed") - projectile_dispersion = 8 - projectile_accuracy = -20 - armor = list(melee = 40, bullet = 70, laser = 10, energy = 0, bomb = 50, bio = 100, rad = 100) // Critters are more ortiented torwards melee and bullet - ranged_cooldown = 5 - - ai_holder_type = /datum/ai_holder/simple_mob/starhunter - - can_be_drop_prey = FALSE - pass_flags = PASSTABLE - softfall = TRUE - - //spaceproofing things - minbodytemp = 0 // Minimum "okay" temperature in kelvin - maxbodytemp = 600 // Maximum of above - - min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' - max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - min_tox = 0 // Phoron min - max_tox = 0 // Phoron max - min_co2 = 0 // CO2 min - max_co2 = 0 // CO2 max - min_n2 = 0 // N2 min - max_n2 = 0 - -/datum/ai_holder/simple_mob/starhunter - returns_home = TRUE // Stay close to the base... - wander = TRUE // ... but "patrol" a little. - intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. - can_flee = TRUE // If they're even allowed to flee. - flee_when_dying = TRUE // If they should flee when low on health. - dying_threshold = 0.2 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health. - mauling = TRUE - call_distance = 0 //Trying to disable this for the mobs - vision_range = 10 - retaliate = TRUE - hostile = FALSE - violent_breakthrough = TRUE - respect_alpha = FALSE - pointblank = TRUE - -/datum/ai_holder/simple_mob/starhunter/aggro - hostile = TRUE - -//basic aggro stahunters -/mob/living/simple_mob/humanoid/starhunter/hunter - ai_holder_type = /datum/ai_holder/simple_mob/starhunter/aggro - special_attack_cooldown = 30 SECONDS - special_attack_min_range = 1 - special_attack_max_range = 7 - -/mob/living/simple_mob/humanoid/starhunter/hunter/harvester - icon_state = "snekdruid" - icon_state = "snekdruid" - melee_damage_lower = 25 - melee_damage_upper = 25 - melee_attack_delay = 2.5 SECOND - -/mob/living/simple_mob/humanoid/starhunter/hunter/harvester/handle_special() //wierd movement - if(prob(20)) - step(src, pick(cardinal)) - ..() - -/mob/living/simple_mob/humanoid/starhunter/hunter/ninja - icon_state = "suneswift" - icon_living = "suneswift" - movement_cooldown = -3 - melee_damage_lower = 15 - melee_damage_upper = 15 - melee_attack_delay = 1.5 SECOND - -/mob/living/simple_mob/humanoid/starhunter/hunter/ninja/do_special_attack(atom/target) - if(prob(50)) - teleportnompf(target) - else - smokebomb(target) -//Special attack procs -/mob/living/simple_mob/humanoid/starhunter/hunter/proc/teleportnompf(atom/target) - var/list/nearby_things = range(1, target) - var/list/valid_turfs = list() - - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - - forceMove(target_turf) - - var/mob/living/L = target - var/obj/belly/belly_dest - - if(L.can_be_drop_prey && L.devourable) - L.forceMove(belly_dest) - to_chat(target, "[src] materializes around you, as you end up in their [belly_dest]!") - - -/mob/living/simple_mob/humanoid/starhunter/hunter/proc/smokebomb(atom/target) - var/list/nearby_things = range(1, target) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread +/mob/living/simple_mob/humanoid/starhunter + name = "Starhunter Initiate" + desc = "A strange critter cladded in strange armor." + icon = 'modular_chomp/icons/mob/starhunters.dmi' + icon_state = "sun" + icon_living = "sun" + icon_dead = "statisgem" + icon_gib = "syndicate_gib" + taser_kill = 0 + + faction = "starhunter" + movement_cooldown = 0 + + status_flags = 0 + + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" + + health = 120 //This may be high, but intend for the combative ones to be on their own. + maxHealth = 120 + harm_intent_damage = 5 + melee_damage_lower = 17 //machette + melee_damage_upper = 17 //beg knife go brrr + attack_sharp = 1 + attack_edge = 1 + attacktext = list("slashed", "stabbed") + projectile_dispersion = 8 + projectile_accuracy = -20 + armor = list(melee = 40, bullet = 70, laser = 10, energy = 0, bomb = 50, bio = 100, rad = 100) // Critters are more ortiented torwards melee and bullet + ranged_cooldown = 5 + + ai_holder_type = /datum/ai_holder/simple_mob/starhunter + + can_be_drop_prey = FALSE + pass_flags = PASSTABLE + softfall = TRUE + + //spaceproofing things + minbodytemp = 0 // Minimum "okay" temperature in kelvin + maxbodytemp = 600 // Maximum of above + + min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' + max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' + min_tox = 0 // Phoron min + max_tox = 0 // Phoron max + min_co2 = 0 // CO2 min + max_co2 = 0 // CO2 max + min_n2 = 0 // N2 min + max_n2 = 0 + +/datum/ai_holder/simple_mob/starhunter + returns_home = TRUE // Stay close to the base... + wander = TRUE // ... but "patrol" a little. + intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death. + can_flee = TRUE // If they're even allowed to flee. + flee_when_dying = TRUE // If they should flee when low on health. + dying_threshold = 0.2 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health. + mauling = TRUE + call_distance = 0 //Trying to disable this for the mobs + vision_range = 10 + retaliate = TRUE + hostile = FALSE + violent_breakthrough = TRUE + respect_alpha = FALSE + pointblank = TRUE + +/datum/ai_holder/simple_mob/starhunter/aggro + hostile = TRUE + +//basic aggro stahunters +/mob/living/simple_mob/humanoid/starhunter/hunter + ai_holder_type = /datum/ai_holder/simple_mob/starhunter/aggro + special_attack_cooldown = 30 SECONDS + special_attack_min_range = 1 + special_attack_max_range = 7 + +/mob/living/simple_mob/humanoid/starhunter/hunter/harvester + icon_state = "snekdruid" + icon_state = "snekdruid" + melee_damage_lower = 25 + melee_damage_upper = 25 + melee_attack_delay = 2.5 SECOND + +/mob/living/simple_mob/humanoid/starhunter/hunter/harvester/handle_special() //wierd movement + if(prob(20)) + step(src, pick(cardinal)) + ..() + +/mob/living/simple_mob/humanoid/starhunter/hunter/ninja + icon_state = "suneswift" + icon_living = "suneswift" + movement_cooldown = -3 + melee_damage_lower = 15 + melee_damage_upper = 15 + melee_attack_delay = 1.5 SECOND + +/mob/living/simple_mob/humanoid/starhunter/hunter/ninja/do_special_attack(atom/target) + if(prob(50)) + teleportnompf(target) + else + smokebomb(target) +//Special attack procs +/mob/living/simple_mob/humanoid/starhunter/hunter/proc/teleportnompf(atom/target) + var/list/nearby_things = range(1, target) + var/list/valid_turfs = list() + + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + + forceMove(target_turf) + + var/mob/living/L = target + var/obj/belly/belly_dest + + if(L.can_be_drop_prey && L.devourable) + L.forceMove(belly_dest) + to_chat(target, "[src] materializes around you, as you end up in their [belly_dest]!") + + +/mob/living/simple_mob/humanoid/starhunter/hunter/proc/smokebomb(atom/target) + var/list/nearby_things = range(1, target) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread s2.set_up(5, 1, target_turf) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm index 3e662e7531..58bb5a39d6 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm @@ -1,115 +1,115 @@ -/mob/living/simple_mob/humanoid/starhunter/hunter/druid - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/starhunter/hunter/druid/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/starhunter/hunter/druid/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/starhunter/hunter/druid/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", - "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", - "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", - "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", - "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) - -/mob/living/simple_mob/humanoid/starhunter/hunter/champion - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/starhunter/hunter/champion/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/starhunter/hunter/champion/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/starhunter/hunter/champion/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", - "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", - "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", - "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", - "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = SA_ICON_LIVING - - can_be_drop_prey = FALSE //CHOMP Add - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", - "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", - "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", - "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", - "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) - +/mob/living/simple_mob/humanoid/starhunter/hunter/druid + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/starhunter/hunter/druid/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/starhunter/hunter/druid/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/starhunter/hunter/druid/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", + "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", + "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", + "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", + "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) + +/mob/living/simple_mob/humanoid/starhunter/hunter/champion + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/starhunter/hunter/champion/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/starhunter/hunter/champion/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/starhunter/hunter/champion/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", + "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", + "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", + "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", + "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = SA_ICON_LIVING + + can_be_drop_prey = FALSE //CHOMP Add + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.", + "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.", + "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!", + "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.", + "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,) + diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm index 37b52a8759..3959f8a6c4 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm @@ -1,128 +1,128 @@ -/mob/living/simple_mob/humanoid/starhunter/trader/weaponsmith - name = "Starhunter Weapon Smith" - icon_state = "sunetrader" - icon_living = "sunetrader" - products = list(/obj/item/weapon/gun/energy/sickshot = 5, - /obj/item/weapon/material/twohanded/fireaxe/scythe = 3, - /obj/item/weapon/material/twohanded/spear/lance = 3, - /obj/item/weapon/beartrap = 12, - /obj/item/weapon/material/barbedwire = 12, - /obj/item/weapon/material/sword/battleaxe = 3 - - ) // For each, use the following pattern: - - premium = list(/obj/item/weapon/gun/energy/maghowitzer) //This may be a mistake - - prices = list(/obj/item/weapon/gun/energy/maghowitzer = 8000, - /obj/item/weapon/gun/energy/sickshot = 800, - /obj/item/weapon/material/twohanded/fireaxe/scythe = 400, - /obj/item/weapon/material/twohanded/spear/lance = 400, - /obj/item/weapon/beartrap = 80, - /obj/item/weapon/material/barbedwire = 80, - /obj/item/weapon/material/sword/battleaxe = 400 - ) - -/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter - name = "Starhunter Relic Collector" - icon_state = "snektrader" - icon_living = "snektrader" - products = list(/obj/item/clothing/head/helmet/combat/crusader = 3, - /obj/item/clothing/suit/armor/combat/crusader = 3, - /obj/item/clothing/head/culthood = 3, - /obj/item/clothing/suit/cultrobes = 3, - /obj/item/clothing/head/helmet/space/cult = 3, - /obj/item/clothing/suit/space/cult = 3, - /obj/item/device/soulstone = 8, - /obj/item/clothing/glasses/monocoole = 3, - /obj/item/weapon/storage/belt/holding = 1, - /obj/item/clothing/gloves/regen = 1 - ) // For each, use the following pattern: - - premium = list(/obj/item/clothing/glasses/omni) //I am unsure why but this feels right - - prices = list(/obj/item/clothing/head/helmet/combat/crusader = 600, - /obj/item/clothing/suit/armor/combat/crusader = 600, - /obj/item/clothing/head/culthood = 600, - /obj/item/clothing/suit/cultrobes = 600, - /obj/item/clothing/head/helmet/space/cult = 600, - /obj/item/clothing/suit/space/cult = 600, - /obj/item/device/soulstone = 80, - /obj/item/clothing/glasses/monocoole = 1200, - /obj/item/weapon/storage/belt/holding = 1800, - /obj/item/clothing/gloves/regen = 1800, - /obj/item/clothing/glasses/omni = 2600 - ) - -/mob/living/simple_mob/humanoid/starhunter/trader/miner - name = "Starhunter Miner" - icon_state = "snektrader" - icon_living = "snektrader" - products = list(/obj/item/weapon/kinetic_crusher/glaive = 5, - /obj/item/weapon/kinetic_crusher = 3, - /obj/item/weapon/gun/energy/mininglaser = 3, - /obj/item/weapon/melee/shock_maul = 3, - /obj/item/stack/material/phoron = 50, - /obj/item/stack/material/uranium = 50, - /obj/item/stack/material/tritium = 50, - /obj/item/stack/material/deuterium = 50, - /obj/item/stack/material/bronze = 50, - /obj/item/weapon/circuitboard/paradoxrift = 3 - ) // For each, use the following pattern: - - premium = list(/obj/item/weapon/circuitboard/defenseonelisk) // No specified amount = only one in stock - - prices = list(/obj/item/weapon/kinetic_crusher/glaive = 600, - /obj/item/weapon/kinetic_crusher = 600, - /obj/item/weapon/gun/energy/mininglaser = 800, - /obj/item/weapon/melee/shock_maul = 600, - /obj/item/stack/material/phoron = 12, - /obj/item/stack/material/uranium = 12, - /obj/item/stack/material/tritium = 12, - /obj/item/stack/material/deuterium = 12, - /obj/item/stack/material/bronze = 12, - /obj/item/weapon/circuitboard/paradoxrift = 2400, - /obj/item/weapon/circuitboard/defenseonelisk = 5000 - ) - -/mob/living/simple_mob/humanoid/starhunter/trader/farmer - name = "Starhunter Farmer" - icon_state = "sunetrader" - icon_living = "sunetrader" - products = list(/obj/item/slime_extract/sepia =3, - /obj/item/slime_extract/ruby = 3, - /obj/item/slime_extract/bluespace = 3, - /obj/item/slime_extract/oil = 3, - /obj/item/slime_extract/sapphire = 3, - /obj/item/slime_extract/emerald = 3, - /obj/item/seeds/shrinkshroom = 12, - /obj/item/seeds/megashroom = 12, - /obj/item/seeds/pitcherseed = 6, - /obj/item/seeds/deathberryseed = 6, - /obj/item/seeds/ambrosiainfernusseed = 6, - /obj/item/seeds/thaadra = 6, - /obj/item/seeds/icepepperseed = 6, - /obj/item/seeds/jurlmah = 6, - /obj/item/seeds/amauri = 6, - /obj/item/seeds/gelthi = 6, - /obj/item/seeds/vale = 6 - ) // For each, use the following pattern: - - premium = list() // No specified amount = only one in stock - - prices = list(/obj/item/slime_extract/sepia = 2500, - /obj/item/slime_extract/ruby = 2250, - /obj/item/slime_extract/bluespace = 2250, - /obj/item/slime_extract/oil = 2250, - /obj/item/slime_extract/sapphire = 2250, - /obj/item/slime_extract/emerald = 2250, - /obj/item/seeds/shrinkshroom = 50, - /obj/item/seeds/megashroom = 50, - /obj/item/seeds/pitcherseed = 125, - /obj/item/seeds/deathberryseed = 125, - /obj/item/seeds/ambrosiainfernusseed = 125, - /obj/item/seeds/thaadra = 125, - /obj/item/seeds/icepepperseed = 125, - /obj/item/seeds/jurlmah = 125, - /obj/item/seeds/amauri = 125, - /obj/item/seeds/gelthi = 125, +/mob/living/simple_mob/humanoid/starhunter/trader/weaponsmith + name = "Starhunter Weapon Smith" + icon_state = "sunetrader" + icon_living = "sunetrader" + products = list(/obj/item/weapon/gun/energy/sickshot = 5, + /obj/item/weapon/material/twohanded/fireaxe/scythe = 3, + /obj/item/weapon/material/twohanded/spear/lance = 3, + /obj/item/weapon/beartrap = 12, + /obj/item/weapon/material/barbedwire = 12, + /obj/item/weapon/material/sword/battleaxe = 3 + + ) // For each, use the following pattern: + + premium = list(/obj/item/weapon/gun/energy/maghowitzer) //This may be a mistake + + prices = list(/obj/item/weapon/gun/energy/maghowitzer = 8000, + /obj/item/weapon/gun/energy/sickshot = 800, + /obj/item/weapon/material/twohanded/fireaxe/scythe = 400, + /obj/item/weapon/material/twohanded/spear/lance = 400, + /obj/item/weapon/beartrap = 80, + /obj/item/weapon/material/barbedwire = 80, + /obj/item/weapon/material/sword/battleaxe = 400 + ) + +/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter + name = "Starhunter Relic Collector" + icon_state = "snektrader" + icon_living = "snektrader" + products = list(/obj/item/clothing/head/helmet/combat/crusader = 3, + /obj/item/clothing/suit/armor/combat/crusader = 3, + /obj/item/clothing/head/culthood = 3, + /obj/item/clothing/suit/cultrobes = 3, + /obj/item/clothing/head/helmet/space/cult = 3, + /obj/item/clothing/suit/space/cult = 3, + /obj/item/device/soulstone = 8, + /obj/item/clothing/glasses/monocoole = 3, + /obj/item/weapon/storage/belt/holding = 1, + /obj/item/clothing/gloves/regen = 1 + ) // For each, use the following pattern: + + premium = list(/obj/item/clothing/glasses/omni) //I am unsure why but this feels right + + prices = list(/obj/item/clothing/head/helmet/combat/crusader = 600, + /obj/item/clothing/suit/armor/combat/crusader = 600, + /obj/item/clothing/head/culthood = 600, + /obj/item/clothing/suit/cultrobes = 600, + /obj/item/clothing/head/helmet/space/cult = 600, + /obj/item/clothing/suit/space/cult = 600, + /obj/item/device/soulstone = 80, + /obj/item/clothing/glasses/monocoole = 1200, + /obj/item/weapon/storage/belt/holding = 1800, + /obj/item/clothing/gloves/regen = 1800, + /obj/item/clothing/glasses/omni = 2600 + ) + +/mob/living/simple_mob/humanoid/starhunter/trader/miner + name = "Starhunter Miner" + icon_state = "snektrader" + icon_living = "snektrader" + products = list(/obj/item/weapon/kinetic_crusher/glaive = 5, + /obj/item/weapon/kinetic_crusher = 3, + /obj/item/weapon/gun/energy/mininglaser = 3, + /obj/item/weapon/melee/shock_maul = 3, + /obj/item/stack/material/phoron = 50, + /obj/item/stack/material/uranium = 50, + /obj/item/stack/material/tritium = 50, + /obj/item/stack/material/deuterium = 50, + /obj/item/stack/material/bronze = 50, + /obj/item/weapon/circuitboard/paradoxrift = 3 + ) // For each, use the following pattern: + + premium = list(/obj/item/weapon/circuitboard/defenseonelisk) // No specified amount = only one in stock + + prices = list(/obj/item/weapon/kinetic_crusher/glaive = 600, + /obj/item/weapon/kinetic_crusher = 600, + /obj/item/weapon/gun/energy/mininglaser = 800, + /obj/item/weapon/melee/shock_maul = 600, + /obj/item/stack/material/phoron = 12, + /obj/item/stack/material/uranium = 12, + /obj/item/stack/material/tritium = 12, + /obj/item/stack/material/deuterium = 12, + /obj/item/stack/material/bronze = 12, + /obj/item/weapon/circuitboard/paradoxrift = 2400, + /obj/item/weapon/circuitboard/defenseonelisk = 5000 + ) + +/mob/living/simple_mob/humanoid/starhunter/trader/farmer + name = "Starhunter Farmer" + icon_state = "sunetrader" + icon_living = "sunetrader" + products = list(/obj/item/slime_extract/sepia =3, + /obj/item/slime_extract/ruby = 3, + /obj/item/slime_extract/bluespace = 3, + /obj/item/slime_extract/oil = 3, + /obj/item/slime_extract/sapphire = 3, + /obj/item/slime_extract/emerald = 3, + /obj/item/seeds/shrinkshroom = 12, + /obj/item/seeds/megashroom = 12, + /obj/item/seeds/pitcherseed = 6, + /obj/item/seeds/deathberryseed = 6, + /obj/item/seeds/ambrosiainfernusseed = 6, + /obj/item/seeds/thaadra = 6, + /obj/item/seeds/icepepperseed = 6, + /obj/item/seeds/jurlmah = 6, + /obj/item/seeds/amauri = 6, + /obj/item/seeds/gelthi = 6, + /obj/item/seeds/vale = 6 + ) // For each, use the following pattern: + + premium = list() // No specified amount = only one in stock + + prices = list(/obj/item/slime_extract/sepia = 2500, + /obj/item/slime_extract/ruby = 2250, + /obj/item/slime_extract/bluespace = 2250, + /obj/item/slime_extract/oil = 2250, + /obj/item/slime_extract/sapphire = 2250, + /obj/item/slime_extract/emerald = 2250, + /obj/item/seeds/shrinkshroom = 50, + /obj/item/seeds/megashroom = 50, + /obj/item/seeds/pitcherseed = 125, + /obj/item/seeds/deathberryseed = 125, + /obj/item/seeds/ambrosiainfernusseed = 125, + /obj/item/seeds/thaadra = 125, + /obj/item/seeds/icepepperseed = 125, + /obj/item/seeds/jurlmah = 125, + /obj/item/seeds/amauri = 125, + /obj/item/seeds/gelthi = 125, /obj/item/seeds/vale = 125) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm index 840d0229c9..477c8b89d9 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm @@ -1,392 +1,392 @@ -/mob/living/simple_mob/humanoid/starhunter/trader - var/vend_ready = 1 //Are we ready to vend?? Is it time?? - var/vend_delay = 10 //How long does it take to vend? - var/categories = CAT_NORMAL // Bitmask of cats we're currently showing - var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now - var/vending_sound = "machines/vending/vending_drop.ogg" - - /* - Variables used to initialize the product list - These are used for initialization only, and so are optional if - product_records is specified - */ - var/list/products = list() // For each, use the following pattern: - var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2) - var/list/premium = list() // No specified amount = only one in stock - /// Set automatically, allows coin use - var/has_premium = FALSE - var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price. - /// Set automatically, enables pricing - var/has_prices = FALSE - // This one is used for refill cartridge use. - var/list/refill = list() // For each, use the following pattern: - // Enables refilling with appropriate cartridges - var/refillable = TRUE - var/obj/item/weapon/coin/coin - var/list/log = list() - var/has_logs = 0 - var/list/product_records = list() - - -/mob/living/simple_mob/humanoid/starhunter/trader/Initialize() - . = ..() - build_inventory() - - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/build_inventory() - var/list/all_products = list( - list(products, CAT_NORMAL), - list(contraband, CAT_HIDDEN), - list(premium, CAT_COIN)) - - for(var/current_list in all_products) - var/category = current_list[2] - - for(var/entry in current_list[1]) - var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry) - - product.price = (entry in prices) ? prices[entry] : 0 - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - - GLOB.vending_products[entry] = 1 - - if(LAZYLEN(prices)) - has_prices = TRUE - if(LAZYLEN(premium)) - has_premium = TRUE - - - LAZYCLEARLIST(products) - LAZYCLEARLIST(contraband) - LAZYCLEARLIST(premium) - LAZYCLEARLIST(prices) - all_products.Cut() - - -/mob/living/simple_mob/humanoid/starhunter/trader/attackby(obj/item/weapon/W as obj, mob/user as mob) - var/obj/item/weapon/card/id/I = W.GetID() - - if(I || istype(W, /obj/item/weapon/spacecash)) - attack_hand(user) - return - else if(istype(W, /obj/item/weapon/coin) && has_premium) - user.drop_item() - W.forceMove(src) - coin = W - categories |= CAT_COIN - to_chat(user, "You insert \the [W] into \the [src].") - SStgui.update_uis(src) - return - else - - for(var/datum/stored_item/vending_product/R in product_records) - if(istype(W, R.item_path) && (W.name == R.item_name)) - stock(W, R, user) - return - ..() - - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user) - if(currently_vending.price > cashmoney.worth) - - // This is not a status display message, since it's something the character - // themselves is meant to see BEFORE putting the money in - to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") - return 0 - - if(istype(cashmoney, /obj/item/weapon/spacecash)) - - visible_message("\The [usr] inserts some cash into \the [src].") - cashmoney.worth -= currently_vending.price - - if(cashmoney.worth <= 0) - usr.drop_from_inventory(cashmoney) - qdel(cashmoney) - else - cashmoney.update_icon() - - // Vending machines have no idea who paid with cash - credit_purchase("(cash)") - return 1 - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/credit_purchase(var/target as text) - vendor_account.money += currently_vending.price - - var/datum/transaction/T = new() - T.target_name = target - T.purpose = "Purchase of [currently_vending.item_name]" - T.amount = "[currently_vending.price]" - T.source_terminal = name - T.date = current_date_string - T.time = stationtime2text() - vendor_account.transaction_log.Add(T) - -/mob/living/simple_mob/humanoid/starhunter/trader/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Vending", name) - ui.open() - -/mob/living/simple_mob/humanoid/starhunter/trader/tgui_data(mob/user) - var/list/data = list() - var/list/listed_products = list() - - data["chargesMoney"] = has_prices ? TRUE : FALSE - - data["products"] = listed_products - - if(coin) - data["coin"] = coin.name - else - data["coin"] = FALSE - - if(currently_vending) - data["actively_vending"] = currently_vending.item_name - else - data["actively_vending"] = null - - var/mob/living/carbon/human/H - var/obj/item/weapon/card/id/C - - data["guestNotice"] = "Please present cash."; - data["userMoney"] = 0 - data["user"] = null - if(ishuman(user)) - H = user - C = H.GetIdCard() - var/obj/item/weapon/spacecash/S = H.get_active_hand() - if(istype(S)) - data["userMoney"] = S.worth - data["guestNotice"] = "Accepting [S.initial_name]. You have: [S.worth]â‚®." - else if(istype(C)) - var/datum/money_account/A = get_account(C.associated_account_number) - if(istype(A)) - data["user"] = list() - data["user"]["name"] = A.owner_name - data["userMoney"] = A.money - data["user"]["job"] = (istype(C) && C.rank) ? C.rank : "No Job" - else - data["guestNotice"] = "Unlinked ID detected. Present cash to pay."; - - return data - - - -/mob/living/simple_mob/humanoid/starhunter/trader/tgui_act(action, params) - if(usr.stat || usr.restrained()) - return - if(..()) - return TRUE - - . = TRUE - switch(action) - if("remove_coin") - if(issilicon(usr)) - return FALSE - - if(!coin) - to_chat(usr, "There is no coin in this machine.") - return - - coin.forceMove(src.loc) - if(!usr.get_active_hand()) - usr.put_in_hands(coin) - - to_chat(usr, "You remove \the [coin] from \the [src].") - coin = null - categories &= ~CAT_COIN - return TRUE - if("vend") - if(!vend_ready) - to_chat(usr, "[src] is busy!") - return - - var/key = text2num(params["vend"]) - var/datum/stored_item/vending_product/R = product_records[key] - - // This should not happen unless the request from NanoUI was bad - if(!(R.category & categories)) - return - - if(!can_buy(R, usr)) - return - - if(R.price <= 0) - vend(R, usr) - add_fingerprint(usr) - return TRUE - - if(issilicon(usr)) //If the item is not free, provide feedback if a synth is trying to buy something. - to_chat(usr, "Lawed unit recognized. Lawed units cannot complete this transaction. Purchase canceled.") - return - if(!ishuman(usr)) - return - - vend_ready = FALSE // From this point onwards, vendor is locked to performing this transaction only, until it is resolved. - - var/mob/living/carbon/human/H = usr - var/obj/item/weapon/card/id/C = H.GetIdCard() - - if(!vendor_account || vendor_account.suspended) - to_chat(usr, "Vendor account offline. Unable to process transaction.") - flick("[icon_state]-deny",src) - vend_ready = TRUE - return - - currently_vending = R - - var/paid = FALSE - - if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash)) - var/obj/item/weapon/spacecash/cash = usr.get_active_hand() - paid = pay_with_cash(cash, usr) - else if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash/ewallet)) - var/obj/item/weapon/spacecash/ewallet/wallet = usr.get_active_hand() - paid = pay_with_ewallet(wallet) - else if(istype(C, /obj/item/weapon/card)) - paid = pay_with_card(C, usr) - /*else if(usr.can_advanced_admin_interact()) - to_chat(usr, "Vending object due to admin interaction.") - paid = TRUE*/ - else - to_chat(usr, "Payment failure: you have no ID or other method of payment.") - vend_ready = TRUE - flick("[icon_state]-deny",src) - return TRUE // we set this because they shouldn't even be able to get this far, and we want the UI to update. - if(paid) - vend(currently_vending, usr) // vend will handle vend_ready - . = TRUE - else - to_chat(usr, "Payment failure: unable to process payment.") - vend_ready = TRUE - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/vend(datum/stored_item/vending_product/R, mob/user) - if(!can_buy(R, user)) - return - - if(!R.amount) - to_chat(user, "[src] has ran out of that product.") - vend_ready = TRUE - return - - vend_ready = FALSE //One thing at a time!! - SStgui.update_uis(src) - - if(R.category & CAT_COIN) - if(!coin) - to_chat(user, "You need to insert a coin to get this item.") - return - else - qdel(coin) - coin = null - categories &= ~CAT_COIN - - flick("[icon_state]-vend",src) - addtimer(CALLBACK(src, PROC_REF(delayed_vend), R, user), vend_delay) - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/delayed_vend(datum/stored_item/vending_product/R, mob/user) - R.get_product(get_turf(src)) - - playsound(src, "sound/[vending_sound]", 100, 1, 1) - - GLOB.items_sold_shift_roundstat++ - - vend_ready = 1 - currently_vending = null - SStgui.update_uis(src) - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/stock(obj/item/weapon/W, var/datum/stored_item/vending_product/R, var/mob/user) - if(!user.unEquip(W)) - return - - to_chat(user, "You insert \the [W] in the product receptor.") - R.add_product(W) - if(has_logs) - do_logging(R, user) - - SStgui.update_uis(src) - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet) - visible_message("\The [usr] swipes \the [wallet] through \the [src].") - playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) - if(currently_vending.price > wallet.worth) - to_chat(usr, "Insufficient funds on chargecard.") - return 0 - else - wallet.worth -= currently_vending.price - credit_purchase("[wallet.owner_name] (chargecard)") - return 1 - -/** - * Scan a card and attempt to transfer payment from associated account. - * - * Takes payment for whatever is the currently_vending item. Returns 1 if - * successful, 0 if failed - */ -/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_card(obj/item/weapon/card/id/I, mob/M) - visible_message("[M] swipes a card through [src].") - playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) - - var/datum/money_account/customer_account = get_account(I.associated_account_number) - if(!customer_account) - to_chat(M, "Error: Unable to access account. Please contact technical support if problem persists.") - return FALSE - - if(customer_account.suspended) - to_chat(M, "Unable to access account: account suspended.") - return FALSE - - // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is - // empty at high security levels - if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) - var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") - customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) - - if(!customer_account) - to_chat(M, "Unable to access account: incorrect credentials.") - return FALSE - - if(currently_vending.price > customer_account.money) - to_chat(M, "Insufficient funds in account.") - return FALSE - - // Okay to move the money at this point - - // debit money from the purchaser's account - customer_account.money -= currently_vending.price - - // create entry in the purchaser's account log - var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [name])" - T.purpose = "Purchase of [currently_vending.item_name]" - if(currently_vending.price > 0) - T.amount = "([currently_vending.price])" - else - T.amount = "[currently_vending.price]" - T.source_terminal = name - T.date = current_date_string - T.time = stationtime2text() - customer_account.transaction_log.Add(T) - - // Give the vendor the money. We use the account owner name, which means - // that purchases made with stolen/borrowed card will look like the card - // owner made them - credit_purchase(customer_account.owner_name) - return 1 - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) - if(user.GetIdCard()) - var/obj/item/weapon/card/id/tempid = user.GetIdCard() - var/list/list_item = list() - if(vending) - list_item += "vend" - else - list_item += "stock" - list_item += tempid.registered_name - list_item += stationtime2text() - list_item += R.item_name - log[++log.len] = list_item - -/mob/living/simple_mob/humanoid/starhunter/trader/proc/can_buy(datum/stored_item/vending_product/R, mob/user) - return TRUE +/mob/living/simple_mob/humanoid/starhunter/trader + var/vend_ready = 1 //Are we ready to vend?? Is it time?? + var/vend_delay = 10 //How long does it take to vend? + var/categories = CAT_NORMAL // Bitmask of cats we're currently showing + var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now + var/vending_sound = "machines/vending/vending_drop.ogg" + + /* + Variables used to initialize the product list + These are used for initialization only, and so are optional if + product_records is specified + */ + var/list/products = list() // For each, use the following pattern: + var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2) + var/list/premium = list() // No specified amount = only one in stock + /// Set automatically, allows coin use + var/has_premium = FALSE + var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price. + /// Set automatically, enables pricing + var/has_prices = FALSE + // This one is used for refill cartridge use. + var/list/refill = list() // For each, use the following pattern: + // Enables refilling with appropriate cartridges + var/refillable = TRUE + var/obj/item/weapon/coin/coin + var/list/log = list() + var/has_logs = 0 + var/list/product_records = list() + + +/mob/living/simple_mob/humanoid/starhunter/trader/Initialize() + . = ..() + build_inventory() + + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/build_inventory() + var/list/all_products = list( + list(products, CAT_NORMAL), + list(contraband, CAT_HIDDEN), + list(premium, CAT_COIN)) + + for(var/current_list in all_products) + var/category = current_list[2] + + for(var/entry in current_list[1]) + var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry) + + product.price = (entry in prices) ? prices[entry] : 0 + product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 + product.category = category + + GLOB.vending_products[entry] = 1 + + if(LAZYLEN(prices)) + has_prices = TRUE + if(LAZYLEN(premium)) + has_premium = TRUE + + + LAZYCLEARLIST(products) + LAZYCLEARLIST(contraband) + LAZYCLEARLIST(premium) + LAZYCLEARLIST(prices) + all_products.Cut() + + +/mob/living/simple_mob/humanoid/starhunter/trader/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/obj/item/weapon/card/id/I = W.GetID() + + if(I || istype(W, /obj/item/weapon/spacecash)) + attack_hand(user) + return + else if(istype(W, /obj/item/weapon/coin) && has_premium) + user.drop_item() + W.forceMove(src) + coin = W + categories |= CAT_COIN + to_chat(user, "You insert \the [W] into \the [src].") + SStgui.update_uis(src) + return + else + + for(var/datum/stored_item/vending_product/R in product_records) + if(istype(W, R.item_path) && (W.name == R.item_name)) + stock(W, R, user) + return + ..() + + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user) + if(currently_vending.price > cashmoney.worth) + + // This is not a status display message, since it's something the character + // themselves is meant to see BEFORE putting the money in + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") + return 0 + + if(istype(cashmoney, /obj/item/weapon/spacecash)) + + visible_message("\The [usr] inserts some cash into \the [src].") + cashmoney.worth -= currently_vending.price + + if(cashmoney.worth <= 0) + usr.drop_from_inventory(cashmoney) + qdel(cashmoney) + else + cashmoney.update_icon() + + // Vending machines have no idea who paid with cash + credit_purchase("(cash)") + return 1 + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/credit_purchase(var/target as text) + vendor_account.money += currently_vending.price + + var/datum/transaction/T = new() + T.target_name = target + T.purpose = "Purchase of [currently_vending.item_name]" + T.amount = "[currently_vending.price]" + T.source_terminal = name + T.date = current_date_string + T.time = stationtime2text() + vendor_account.transaction_log.Add(T) + +/mob/living/simple_mob/humanoid/starhunter/trader/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Vending", name) + ui.open() + +/mob/living/simple_mob/humanoid/starhunter/trader/tgui_data(mob/user) + var/list/data = list() + var/list/listed_products = list() + + data["chargesMoney"] = has_prices ? TRUE : FALSE + + data["products"] = listed_products + + if(coin) + data["coin"] = coin.name + else + data["coin"] = FALSE + + if(currently_vending) + data["actively_vending"] = currently_vending.item_name + else + data["actively_vending"] = null + + var/mob/living/carbon/human/H + var/obj/item/weapon/card/id/C + + data["guestNotice"] = "Please present cash."; + data["userMoney"] = 0 + data["user"] = null + if(ishuman(user)) + H = user + C = H.GetIdCard() + var/obj/item/weapon/spacecash/S = H.get_active_hand() + if(istype(S)) + data["userMoney"] = S.worth + data["guestNotice"] = "Accepting [S.initial_name]. You have: [S.worth]â‚®." + else if(istype(C)) + var/datum/money_account/A = get_account(C.associated_account_number) + if(istype(A)) + data["user"] = list() + data["user"]["name"] = A.owner_name + data["userMoney"] = A.money + data["user"]["job"] = (istype(C) && C.rank) ? C.rank : "No Job" + else + data["guestNotice"] = "Unlinked ID detected. Present cash to pay."; + + return data + + + +/mob/living/simple_mob/humanoid/starhunter/trader/tgui_act(action, params) + if(usr.stat || usr.restrained()) + return + if(..()) + return TRUE + + . = TRUE + switch(action) + if("remove_coin") + if(issilicon(usr)) + return FALSE + + if(!coin) + to_chat(usr, "There is no coin in this machine.") + return + + coin.forceMove(src.loc) + if(!usr.get_active_hand()) + usr.put_in_hands(coin) + + to_chat(usr, "You remove \the [coin] from \the [src].") + coin = null + categories &= ~CAT_COIN + return TRUE + if("vend") + if(!vend_ready) + to_chat(usr, "[src] is busy!") + return + + var/key = text2num(params["vend"]) + var/datum/stored_item/vending_product/R = product_records[key] + + // This should not happen unless the request from NanoUI was bad + if(!(R.category & categories)) + return + + if(!can_buy(R, usr)) + return + + if(R.price <= 0) + vend(R, usr) + add_fingerprint(usr) + return TRUE + + if(issilicon(usr)) //If the item is not free, provide feedback if a synth is trying to buy something. + to_chat(usr, "Lawed unit recognized. Lawed units cannot complete this transaction. Purchase canceled.") + return + if(!ishuman(usr)) + return + + vend_ready = FALSE // From this point onwards, vendor is locked to performing this transaction only, until it is resolved. + + var/mob/living/carbon/human/H = usr + var/obj/item/weapon/card/id/C = H.GetIdCard() + + if(!vendor_account || vendor_account.suspended) + to_chat(usr, "Vendor account offline. Unable to process transaction.") + flick("[icon_state]-deny",src) + vend_ready = TRUE + return + + currently_vending = R + + var/paid = FALSE + + if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/cash = usr.get_active_hand() + paid = pay_with_cash(cash, usr) + else if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash/ewallet)) + var/obj/item/weapon/spacecash/ewallet/wallet = usr.get_active_hand() + paid = pay_with_ewallet(wallet) + else if(istype(C, /obj/item/weapon/card)) + paid = pay_with_card(C, usr) + /*else if(usr.can_advanced_admin_interact()) + to_chat(usr, "Vending object due to admin interaction.") + paid = TRUE*/ + else + to_chat(usr, "Payment failure: you have no ID or other method of payment.") + vend_ready = TRUE + flick("[icon_state]-deny",src) + return TRUE // we set this because they shouldn't even be able to get this far, and we want the UI to update. + if(paid) + vend(currently_vending, usr) // vend will handle vend_ready + . = TRUE + else + to_chat(usr, "Payment failure: unable to process payment.") + vend_ready = TRUE + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/vend(datum/stored_item/vending_product/R, mob/user) + if(!can_buy(R, user)) + return + + if(!R.amount) + to_chat(user, "[src] has ran out of that product.") + vend_ready = TRUE + return + + vend_ready = FALSE //One thing at a time!! + SStgui.update_uis(src) + + if(R.category & CAT_COIN) + if(!coin) + to_chat(user, "You need to insert a coin to get this item.") + return + else + qdel(coin) + coin = null + categories &= ~CAT_COIN + + flick("[icon_state]-vend",src) + addtimer(CALLBACK(src, PROC_REF(delayed_vend), R, user), vend_delay) + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/delayed_vend(datum/stored_item/vending_product/R, mob/user) + R.get_product(get_turf(src)) + + playsound(src, "sound/[vending_sound]", 100, 1, 1) + + GLOB.items_sold_shift_roundstat++ + + vend_ready = 1 + currently_vending = null + SStgui.update_uis(src) + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/stock(obj/item/weapon/W, var/datum/stored_item/vending_product/R, var/mob/user) + if(!user.unEquip(W)) + return + + to_chat(user, "You insert \the [W] in the product receptor.") + R.add_product(W) + if(has_logs) + do_logging(R, user) + + SStgui.update_uis(src) + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet) + visible_message("\The [usr] swipes \the [wallet] through \the [src].") + playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) + if(currently_vending.price > wallet.worth) + to_chat(usr, "Insufficient funds on chargecard.") + return 0 + else + wallet.worth -= currently_vending.price + credit_purchase("[wallet.owner_name] (chargecard)") + return 1 + +/** + * Scan a card and attempt to transfer payment from associated account. + * + * Takes payment for whatever is the currently_vending item. Returns 1 if + * successful, 0 if failed + */ +/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_card(obj/item/weapon/card/id/I, mob/M) + visible_message("[M] swipes a card through [src].") + playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) + + var/datum/money_account/customer_account = get_account(I.associated_account_number) + if(!customer_account) + to_chat(M, "Error: Unable to access account. Please contact technical support if problem persists.") + return FALSE + + if(customer_account.suspended) + to_chat(M, "Unable to access account: account suspended.") + return FALSE + + // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is + // empty at high security levels + if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) + var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") + customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) + + if(!customer_account) + to_chat(M, "Unable to access account: incorrect credentials.") + return FALSE + + if(currently_vending.price > customer_account.money) + to_chat(M, "Insufficient funds in account.") + return FALSE + + // Okay to move the money at this point + + // debit money from the purchaser's account + customer_account.money -= currently_vending.price + + // create entry in the purchaser's account log + var/datum/transaction/T = new() + T.target_name = "[vendor_account.owner_name] (via [name])" + T.purpose = "Purchase of [currently_vending.item_name]" + if(currently_vending.price > 0) + T.amount = "([currently_vending.price])" + else + T.amount = "[currently_vending.price]" + T.source_terminal = name + T.date = current_date_string + T.time = stationtime2text() + customer_account.transaction_log.Add(T) + + // Give the vendor the money. We use the account owner name, which means + // that purchases made with stolen/borrowed card will look like the card + // owner made them + credit_purchase(customer_account.owner_name) + return 1 + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) + if(user.GetIdCard()) + var/obj/item/weapon/card/id/tempid = user.GetIdCard() + var/list/list_item = list() + if(vending) + list_item += "vend" + else + list_item += "stock" + list_item += tempid.registered_name + list_item += stationtime2text() + list_item += R.item_name + log[++log.len] = list_item + +/mob/living/simple_mob/humanoid/starhunter/trader/proc/can_buy(datum/stored_item/vending_product/R, mob/user) + return TRUE diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/cyber_horror.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/cyber_horror.dm index ed41f999e2..8af2915bcf 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/cyber_horror.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/cyber_horror.dm @@ -1,30 +1,30 @@ -/mob/living/simple_mob/mechanical/cyber_horror/corgi - projectiletype = /obj/item/projectile/energy/mob/drone - -/mob/living/simple_mob/mechanical/cyber_horror - maxHealth = 87 - health = 87 - -/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror - maxHealth = 37 - health = 37 - -/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror - maxHealth = 125 - health = 125 - melee_damage_lower = 5 - melee_damage_upper = 10 - -/mob/living/simple_mob/mechanical/cyber_horror/grey - maxHealth = 50 - health = 50 - -//Direct Ranged Mob -/mob/living/simple_mob/mechanical/cyber_horror/corgi - maxHealth = 25 - health = 25 - -//Cats and mayhem -/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror - maxHealth = 20 +/mob/living/simple_mob/mechanical/cyber_horror/corgi + projectiletype = /obj/item/projectile/energy/mob/drone + +/mob/living/simple_mob/mechanical/cyber_horror + maxHealth = 87 + health = 87 + +/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror + maxHealth = 37 + health = 37 + +/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror + maxHealth = 125 + health = 125 + melee_damage_lower = 5 + melee_damage_upper = 10 + +/mob/living/simple_mob/mechanical/cyber_horror/grey + maxHealth = 50 + health = 50 + +//Direct Ranged Mob +/mob/living/simple_mob/mechanical/cyber_horror/corgi + maxHealth = 25 + health = 25 + +//Cats and mayhem +/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror + maxHealth = 20 health = 20 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/boss.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/boss.dm index 11d96ca1b6..07ada2f52a 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/boss.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/boss.dm @@ -1,133 +1,133 @@ -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono - name = "Advanced Precursor Hivebot" - icon = 'modular_chomp/icons/mob/hivebot.dmi' - icon_state = "precursorhive" - icon_living = "precursorhive" - attacktext = list("prodded") - maxHealth = 15 LASERS_TO_KILL - health = 15 LASERS_TO_KILL - projectiletype = /obj/item/projectile/arc/blue_energy/precusor - melee_damage_lower = 15 - melee_damage_upper = 25 - special_attack_min_range = 1 - special_attack_max_range = 7 - special_attack_cooldown = 5 SECONDS - movement_cooldown = 0.5 - color = "#ccff4a" - projectilesound = 'sound/weapons/wave.ogg' - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - var/grenade_type = /obj/item/weapon/grenade/shooter/energy/tesla - var/grenade_timer = 10 - var/grenade_type2 = /obj/item/weapon/grenade/shooter/rubber - size_multiplier = 1.75 - shock_resist = 3 - water_resist = 3 - attack_armor_pen = -50 - - armor = list(melee = -150, bullet = 40, laser = 40, energy = 40, bomb = 40, bio = 100, rad = 100) - - armor_soak = list( - "melee" = 0, - "bullet" = 10, - "laser" = 10, - "energy" = 10, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - loot_list = list(/obj/item/clothing/suit/armor/alien = 30, - /obj/item/clothing/suit/armor/alien/tank = 30, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/prop/alien/junk = 50, - /obj/item/weapon/gun/energy/alien = 30, - /obj/item/weapon/gun/energy/alien = 30, - /obj/random/tool/alien = 30, - /obj/random/tool/alien = 30, - /obj/item/weapon/cell/device/weapon/recharge/alien = 30, - /obj/item/weapon/cell/device/weapon/recharge/alien = 30 - ) - -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/apply_melee_effects(atom/A) - if(isliving(A)) - var/mob/living/L = A - L.taunt(src, TRUE) - L.add_modifier(/datum/modifier/hivebot_weaken, 3 SECONDS) - -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - - -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_microsingularity(atom/target) - set waitfor = FALSE - visible_message(span("warning", "\The [src] drops a ticking time bomb!")) - - var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) - if(istype(G)) - G.throw_at(G.throw_range, G.throw_speed, src) - G.det_time = grenade_timer //CHOMPEdit - G.activate(src) //CHOMPEdit - - set_AI_busy(FALSE) - -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_rockets(atom/target) - set waitfor = FALSE - visible_message(span("warning", "\The [src] creates weak looking hivebots!")) - - var/obj/item/weapon/grenade/G = new grenade_type2(get_turf(src)) - if(istype(G)) - G.throw_at(G.throw_range, G.throw_speed, src) - G.det_time = grenade_timer - G.activate(src) - - set_AI_busy(FALSE) - - -/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/electric_defense(atom/target) - var/turf/T = get_turf(target) - visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) - playsound(src, 'sound/weapons/Laser.ogg', 50, 1) - face_atom(T) - var/obj/item/projectile/arc/microsingulo/sphere = new(loc) - sphere.old_style_target(T, src) - sphere.fire() - -//Screw it scuffed way -/obj/item/weapon/grenade/spawnboss - desc = "It is set to detonate in 5 seconds. It will unleash an unspecified anomaly into the vicinity." - name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "delivery" - item_state = "flashbang" - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) - var/banglet = 0 - var/spawner_type = null // must be an object path - var/deliveryamt = 1 // amount of type to deliver - -/obj/item/weapon/grenade/spawnergrenade/detonate() - - if(spawner_type && deliveryamt) - // Make a quick flash - var/turf/T = get_turf(src) - playsound(src, 'sound/effects/phasein.ogg', 100, 1) - for(var/i=1, i<=deliveryamt, i++) - var/atom/movable/x = new spawner_type(T) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(x, pick(NORTH,SOUTH,EAST,WEST)) - qdel(src) - return - -/obj/item/weapon/grenade/spawnboss/hivebot - spawner_type = /mob/living/simple_mob/mechanical/hivebot/swarm +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono + name = "Advanced Precursor Hivebot" + icon = 'modular_chomp/icons/mob/hivebot.dmi' + icon_state = "precursorhive" + icon_living = "precursorhive" + attacktext = list("prodded") + maxHealth = 15 LASERS_TO_KILL + health = 15 LASERS_TO_KILL + projectiletype = /obj/item/projectile/arc/blue_energy/precusor + melee_damage_lower = 15 + melee_damage_upper = 25 + special_attack_min_range = 1 + special_attack_max_range = 7 + special_attack_cooldown = 5 SECONDS + movement_cooldown = 0.5 + color = "#ccff4a" + projectilesound = 'sound/weapons/wave.ogg' + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + var/grenade_type = /obj/item/weapon/grenade/shooter/energy/tesla + var/grenade_timer = 10 + var/grenade_type2 = /obj/item/weapon/grenade/shooter/rubber + size_multiplier = 1.75 + shock_resist = 3 + water_resist = 3 + attack_armor_pen = -50 + + armor = list(melee = -150, bullet = 40, laser = 40, energy = 40, bomb = 40, bio = 100, rad = 100) + + armor_soak = list( + "melee" = 0, + "bullet" = 10, + "laser" = 10, + "energy" = 10, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + + loot_list = list(/obj/item/clothing/suit/armor/alien = 30, + /obj/item/clothing/suit/armor/alien/tank = 30, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/prop/alien/junk = 50, + /obj/item/weapon/gun/energy/alien = 30, + /obj/item/weapon/gun/energy/alien = 30, + /obj/random/tool/alien = 30, + /obj/random/tool/alien = 30, + /obj/item/weapon/cell/device/weapon/recharge/alien = 30, + /obj/item/weapon/cell/device/weapon/recharge/alien = 30 + ) + +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/apply_melee_effects(atom/A) + if(isliving(A)) + var/mob/living/L = A + L.taunt(src, TRUE) + L.add_modifier(/datum/modifier/hivebot_weaken, 3 SECONDS) + +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + + +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_microsingularity(atom/target) + set waitfor = FALSE + visible_message(span("warning", "\The [src] drops a ticking time bomb!")) + + var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) + if(istype(G)) + G.throw_at(G.throw_range, G.throw_speed, src) + G.det_time = grenade_timer //CHOMPEdit + G.activate(src) //CHOMPEdit + + set_AI_busy(FALSE) + +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_rockets(atom/target) + set waitfor = FALSE + visible_message(span("warning", "\The [src] creates weak looking hivebots!")) + + var/obj/item/weapon/grenade/G = new grenade_type2(get_turf(src)) + if(istype(G)) + G.throw_at(G.throw_range, G.throw_speed, src) + G.det_time = grenade_timer + G.activate(src) + + set_AI_busy(FALSE) + + +/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/electric_defense(atom/target) + var/turf/T = get_turf(target) + visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) + playsound(src, 'sound/weapons/Laser.ogg', 50, 1) + face_atom(T) + var/obj/item/projectile/arc/microsingulo/sphere = new(loc) + sphere.old_style_target(T, src) + sphere.fire() + +//Screw it scuffed way +/obj/item/weapon/grenade/spawnboss + desc = "It is set to detonate in 5 seconds. It will unleash an unspecified anomaly into the vicinity." + name = "delivery grenade" + icon = 'icons/obj/grenade.dmi' + icon_state = "delivery" + item_state = "flashbang" + origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) + var/banglet = 0 + var/spawner_type = null // must be an object path + var/deliveryamt = 1 // amount of type to deliver + +/obj/item/weapon/grenade/spawnergrenade/detonate() + + if(spawner_type && deliveryamt) + // Make a quick flash + var/turf/T = get_turf(src) + playsound(src, 'sound/effects/phasein.ogg', 100, 1) + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type(T) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + qdel(src) + return + +/obj/item/weapon/grenade/spawnboss/hivebot + spawner_type = /mob/living/simple_mob/mechanical/hivebot/swarm deliveryamt = 3 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm index e0615011e9..bada67f153 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm @@ -1,4 +1,4 @@ -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser - name = "laser hivebot" - desc = "A robot with a photonic weapon integrated into itself." +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser + name = "laser hivebot" + desc = "A robot with a photonic weapon integrated into itself." projectiletype = /obj/item/projectile/energy/mob/drone \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm index adb19453f2..123d69fbb9 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm @@ -1,16 +1,16 @@ -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot - name = "ember hivebot" - desc = "A robot that appears to utilize fire to cook their enemies." - icon_state = "yellow" - icon_living = "yellow" - -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/declone - name = "irradiating hivebot" - desc = "A robot that appears to utilize radiation to destablize their foes." - icon_state = "yellow" - icon_living = "yellow" - - projectiletype = /obj/item/projectile/energy/declone - -/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot + name = "ember hivebot" + desc = "A robot that appears to utilize fire to cook their enemies." + icon_state = "yellow" + icon_living = "yellow" + +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/declone + name = "irradiating hivebot" + desc = "A robot that appears to utilize radiation to destablize their foes." + icon_state = "yellow" + icon_living = "yellow" + + projectiletype = /obj/item/projectile/energy/declone + +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege projectiletype = /obj/item/projectile/arc //Polaris, don't make the same mob twice. \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/precusor_hivebots.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/precusor_hivebots.dm index 9c2643cee0..28f427b994 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/precusor_hivebots.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/precusor_hivebots.dm @@ -1,56 +1,56 @@ -//This hivebots are meant to be high threats, and a tad more fitting of the alien places they tend to be in. Aka mini-bosses. - -/mob/living/simple_mob/mechanical/hivebot/precusor - name = "Precursor Hivebot" - icon = 'modular_chomp/icons/mob/hivebot.dmi' - icon_state = "precursorhive" - icon_living = "precursorhive" - attacktext = list("prodded") - maxHealth = 3 LASERS_TO_KILL // 150 health - health = 3 LASERS_TO_KILL - movement_cooldown = 4 - melee_damage_lower = 15 - melee_damage_upper = 15 - - var/obj/item/shield_projector/shields = null - - loot_list = list(/obj/item/prop/alien/junk = 20, - /obj/item/prop/alien/junk = 20 - ) - -/mob/living/simple_mob/mechanical/hivebot/precusor/Initialize(mapload) - shields = new /obj/item/shield_projector/rectangle/automatic/hivebot_drone(src) - return ..() - - -/mob/living/simple_mob/mechanical/hivebot/precusor/machinegun - projectiletype = /obj/item/projectile/bullet/hivebot - base_attack_cooldown = 0 // Extremly rapid fire with rather weak bullets. - -/mob/living/simple_mob/mechanical/hivebot/precusor/laser - projectiletype = /obj/item/projectile/energy/mob/precursor - projectile_dispersion = 5 - projectile_accuracy = -30 - -/mob/living/simple_mob/mechanical/hivebot/precusor/lobber - projectiletype = /obj/item/projectile/arc/blue_energy/precusor - - -/obj/item/projectile/arc/blue_energy/precusor - name = "energy missile" - icon_state = "force_missile" - armor_penetration = 10 - damage = 50 // Mimics the precusor laser damage and armor peircing with a tad more damage because of the lobbying style. - damage_type = BURN - color = "#A020F0" - -/obj/item/shield_projector/rectangle/automatic/hivebot_drone - shield_health = 50 - max_shield_health = 50 - shield_regen_delay = 5 SECONDS - shield_regen_amount = 20 - size_x = 3 - size_y = 3 - color = "#A020F0" - high_color = "#A020F0" +//This hivebots are meant to be high threats, and a tad more fitting of the alien places they tend to be in. Aka mini-bosses. + +/mob/living/simple_mob/mechanical/hivebot/precusor + name = "Precursor Hivebot" + icon = 'modular_chomp/icons/mob/hivebot.dmi' + icon_state = "precursorhive" + icon_living = "precursorhive" + attacktext = list("prodded") + maxHealth = 3 LASERS_TO_KILL // 150 health + health = 3 LASERS_TO_KILL + movement_cooldown = 4 + melee_damage_lower = 15 + melee_damage_upper = 15 + + var/obj/item/shield_projector/shields = null + + loot_list = list(/obj/item/prop/alien/junk = 20, + /obj/item/prop/alien/junk = 20 + ) + +/mob/living/simple_mob/mechanical/hivebot/precusor/Initialize(mapload) + shields = new /obj/item/shield_projector/rectangle/automatic/hivebot_drone(src) + return ..() + + +/mob/living/simple_mob/mechanical/hivebot/precusor/machinegun + projectiletype = /obj/item/projectile/bullet/hivebot + base_attack_cooldown = 0 // Extremly rapid fire with rather weak bullets. + +/mob/living/simple_mob/mechanical/hivebot/precusor/laser + projectiletype = /obj/item/projectile/energy/mob/precursor + projectile_dispersion = 5 + projectile_accuracy = -30 + +/mob/living/simple_mob/mechanical/hivebot/precusor/lobber + projectiletype = /obj/item/projectile/arc/blue_energy/precusor + + +/obj/item/projectile/arc/blue_energy/precusor + name = "energy missile" + icon_state = "force_missile" + armor_penetration = 10 + damage = 50 // Mimics the precusor laser damage and armor peircing with a tad more damage because of the lobbying style. + damage_type = BURN + color = "#A020F0" + +/obj/item/shield_projector/rectangle/automatic/hivebot_drone + shield_health = 50 + max_shield_health = 50 + shield_regen_delay = 5 SECONDS + shield_regen_amount = 20 + size_x = 3 + size_y = 3 + color = "#A020F0" + high_color = "#A020F0" low_color = "#A020F0" \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm index 2eee4d1bc3..bb1290b440 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm @@ -1,5 +1,5 @@ -//Giving the tank hivebot class a new look, -/mob/living/simple_mob/mechanical/hivebot/tank - icon = 'modular_chomp/icons/mob/hivebot.dmi' - icon_state = "blue" +//Giving the tank hivebot class a new look, +/mob/living/simple_mob/mechanical/hivebot/tank + icon = 'modular_chomp/icons/mob/hivebot.dmi' + icon_state = "blue" icon_living = "blue" \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat.dm index 541251efd8..6f46d5e6ce 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat.dm @@ -1,46 +1,46 @@ -/mob/living/simple_mob/mechanical/mecha/combat/durand - projectiletype = /obj/item/projectile/energy/mob/heavylaser - -/mob/living/simple_mob/mechanical/mecha/combat/marauder - projectiletype = /obj/item/projectile/energy/mob/heavylaser - -/mob/living/simple_mob/mechanical/mecha/hoverpod - projectiletype = /obj/item/projectile/energy/mob/smalllaser - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced - maxHealth = 225 - -/mob/living/simple_mob/mechanical/mecha/combat/durand - maxHealth = 200 - melee_damage_lower = 20 - melee_damage_upper = 20 - -/mob/living/simple_mob/mechanical/mecha/combat/gygax - maxHealth = 150 - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark - maxHealth = 200 - -/mob/living/simple_mob/mechanical/mecha/combat/marauder - maxHealth = 250 - melee_damage_lower = 22 - melee_damage_upper = 22 - -/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph - health = 550 - melee_damage_lower = 27 - melee_damage_upper = 27 - -/mob/living/simple_mob/mechanical/mecha/odysseus - maxHealth = 60 - -/mob/living/simple_mob/mechanical/mecha/combat - melee_damage_lower = 15 - melee_damage_upper = 15 - -/mob/living/simple_mob/mechanical/mecha/ripley - maxHealth = 100 - -// Immune to heat damage, resistant to lasers, and somewhat beefier. Still tries to melee you. -/mob/living/simple_mob/mechanical/mecha/ripley/firefighter +/mob/living/simple_mob/mechanical/mecha/combat/durand + projectiletype = /obj/item/projectile/energy/mob/heavylaser + +/mob/living/simple_mob/mechanical/mecha/combat/marauder + projectiletype = /obj/item/projectile/energy/mob/heavylaser + +/mob/living/simple_mob/mechanical/mecha/hoverpod + projectiletype = /obj/item/projectile/energy/mob/smalllaser + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced + maxHealth = 225 + +/mob/living/simple_mob/mechanical/mecha/combat/durand + maxHealth = 200 + melee_damage_lower = 20 + melee_damage_upper = 20 + +/mob/living/simple_mob/mechanical/mecha/combat/gygax + maxHealth = 150 + +/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark + maxHealth = 200 + +/mob/living/simple_mob/mechanical/mecha/combat/marauder + maxHealth = 250 + melee_damage_lower = 22 + melee_damage_upper = 22 + +/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph + health = 550 + melee_damage_lower = 27 + melee_damage_upper = 27 + +/mob/living/simple_mob/mechanical/mecha/odysseus + maxHealth = 60 + +/mob/living/simple_mob/mechanical/mecha/combat + melee_damage_lower = 15 + melee_damage_upper = 15 + +/mob/living/simple_mob/mechanical/mecha/ripley + maxHealth = 100 + +// Immune to heat damage, resistant to lasers, and somewhat beefier. Still tries to melee you. +/mob/living/simple_mob/mechanical/mecha/ripley/firefighter maxHealth = 125 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm index e025eec5c6..96a6adcb52 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm @@ -1,134 +1,134 @@ -/mob/living/simple_mob/mechanical/mecha/combat/phazon - projectiletype = /obj/item/projectile/bullet/magnetic/fuelrod - - -/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced - name = "Advanced phazon" - movement_cooldown = 1 - wreckage = /obj/structure/loot_pile/mecha/phazon - color = "#ffffff" - - health = 250 - maxHealth = 250 - evasion = 10 - - special_attack_min_range = 1 - special_attack_max_range = 9 - special_attack_cooldown = 30 SECONDS - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - size_multiplier = 1.25 - shock_resist = 0.5 - ranged_attack_delay = 1 SECONDS - projectilesound = 'sound/weapons/gauss_shoot.ogg' - damage_fatigue_mult = 0 - - projectiletype = /obj/item/projectile/bullet/rifle/a545/ap - -/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/do_special_attack(atom/A) - . = TRUE // So we don't fire a bolt as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/electric_defense(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a red missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 2) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/big/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the red missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -/obj/item/projectile/arc/explosive_rocket/big - name = "rocket" - icon_state = "mortar" - color = "#FF0000" - -/obj/item/projectile/arc/explosive_rocket/big/on_impact(turf/T) - new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. - explosion(T, 1, 1, 1, adminlog = FALSE) - -/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_rockets(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a blue missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 2) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the blue missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -/obj/item/projectile/arc/explosive_rocket/blue - name = "rocket" - icon_state = "mortar" - color = "#000066" - -/obj/item/projectile/arc/explosive_rocket/blue/on_impact(turf/T) - new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. - empulse(T, 1, 2, 3, 4) - -/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_microsingularity(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a yellow missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 2) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/spread/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the yellow missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -/obj/item/projectile/arc/explosive_rocket/spread - name = "rocket" - icon_state = "mortar" - color = "#FFFF00" - -/obj/item/projectile/arc/explosive_rocket/spread/on_impact(turf/T) - new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. - explosion(T, 0, 0, 2, adminlog = FALSE) +/mob/living/simple_mob/mechanical/mecha/combat/phazon + projectiletype = /obj/item/projectile/bullet/magnetic/fuelrod + + +/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced + name = "Advanced phazon" + movement_cooldown = 1 + wreckage = /obj/structure/loot_pile/mecha/phazon + color = "#ffffff" + + health = 250 + maxHealth = 250 + evasion = 10 + + special_attack_min_range = 1 + special_attack_max_range = 9 + special_attack_cooldown = 30 SECONDS + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + size_multiplier = 1.25 + shock_resist = 0.5 + ranged_attack_delay = 1 SECONDS + projectilesound = 'sound/weapons/gauss_shoot.ogg' + damage_fatigue_mult = 0 + + projectiletype = /obj/item/projectile/bullet/rifle/a545/ap + +/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/do_special_attack(atom/A) + . = TRUE // So we don't fire a bolt as well. + switch(a_intent) + if(I_DISARM) // Side gun + electric_defense(A) + if(I_HURT) // Rockets + launch_rockets(A) + if(I_GRAB) // Micro-singulo + launch_microsingularity(A) + +/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/electric_defense(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a red missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 2) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/big/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the red missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +/obj/item/projectile/arc/explosive_rocket/big + name = "rocket" + icon_state = "mortar" + color = "#FF0000" + +/obj/item/projectile/arc/explosive_rocket/big/on_impact(turf/T) + new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. + explosion(T, 1, 1, 1, adminlog = FALSE) + +/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_rockets(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a blue missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 2) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the blue missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +/obj/item/projectile/arc/explosive_rocket/blue + name = "rocket" + icon_state = "mortar" + color = "#000066" + +/obj/item/projectile/arc/explosive_rocket/blue/on_impact(turf/T) + new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. + empulse(T, 1, 2, 3, 4) + +/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_microsingularity(atom/target) + set waitfor = FALSE + + // Telegraph our next move. + Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) + visible_message(span("warning", "\The [src] deploys a yellow missile rack!")) + playsound(src, 'sound/effects/turret/move1.wav', 50, 1) + sleep(0.5 SECONDS) + + for(var/i = 1 to 2) + if(target) // Might get deleted in the meantime. + var/turf/T = get_turf(target) + if(T) + visible_message(span("warning", "\The [src] fires a rocket into the air!")) + playsound(src, 'sound/weapons/rpg.ogg', 70, 1) + face_atom(T) + var/obj/item/projectile/arc/explosive_rocket/spread/rocket = new(loc) + rocket.old_style_target(T, src) + rocket.fire() + sleep(1 SECOND) + + visible_message(span("warning", "\The [src] retracts the yellow missile rack.")) + playsound(src, 'sound/effects/turret/move2.wav', 50, 1) + +/obj/item/projectile/arc/explosive_rocket/spread + name = "rocket" + icon_state = "mortar" + color = "#FFFF00" + +/obj/item/projectile/arc/explosive_rocket/spread/on_impact(turf/T) + new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. + explosion(T, 0, 0, 2, adminlog = FALSE) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/meteroid/metTypes.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/meteroid/metTypes.dm index 2b09d4d6d3..e41e2df832 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/meteroid/metTypes.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/meteroid/metTypes.dm @@ -1,5 +1,5 @@ -/mob/living/simple_mob/metroid/juvenile/gamma - projectiletype = /obj/item/projectile/energy/mob/electric_spider - -/mob/living/simple_mob/metroid/juvenile/omega +/mob/living/simple_mob/metroid/juvenile/gamma + projectiletype = /obj/item/projectile/energy/mob/electric_spider + +/mob/living/simple_mob/metroid/juvenile/omega projectiletype = /obj/item/projectile/energy/mob/smalllaser \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/construct.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/construct.dm index 9f71ee4d5a..13a55b16b7 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/construct.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/construct.dm @@ -1,26 +1,26 @@ -/mob/living/simple_mob/construct/artificer/caster - projectiletype = /obj/item/projectile/energy/inversion - -/mob/living/simple_mob/construct/artificer - maxHealth = 50 - health = 50 - melee_damage_lower = 7 - melee_damage_upper = 10 - -/mob/living/simple_mob/construct/harvester - maxHealth = 50 - health = 50 - melee_damage_lower = 10 - melee_damage_upper = 12 - -/mob/living/simple_mob/construct/wraith - maxHealth = 100 - health = 100 - melee_damage_lower = 12 - melee_damage_upper = 15 - -/mob/living/simple_mob/construct/harvester/greater - maxHealth = 50 - health = 50 - melee_damage_lower = 20 +/mob/living/simple_mob/construct/artificer/caster + projectiletype = /obj/item/projectile/energy/inversion + +/mob/living/simple_mob/construct/artificer + maxHealth = 50 + health = 50 + melee_damage_lower = 7 + melee_damage_upper = 10 + +/mob/living/simple_mob/construct/harvester + maxHealth = 50 + health = 50 + melee_damage_lower = 10 + melee_damage_upper = 12 + +/mob/living/simple_mob/construct/wraith + maxHealth = 100 + health = 100 + melee_damage_lower = 12 + melee_damage_upper = 15 + +/mob/living/simple_mob/construct/harvester/greater + maxHealth = 50 + health = 50 + melee_damage_lower = 20 melee_damage_upper = 25 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm index dfb873773b..3396db0078 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm @@ -1,51 +1,51 @@ -/mob/living/simple_mob/construct/juggernaut - maxHealth = 100 - health = 100 - melee_damage_lower = 15 - melee_damage_upper = 20 - -/mob/living/simple_mob/construct/juggernaut/behemoth - maxHealth = 300 - health = 300 - -/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable - name = "Behemoth" - real_name = "Behemoth" - desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force." - melee_damage_lower = 22 - melee_damage_upper = 33 - ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax - projectiletype = /obj/item/projectile/energy/inversion - movement_cooldown = 1 - - loot_list = list(/obj/item/weapon/rig/ch/aegis = 100) - - -/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable/bullet_act(var/obj/item/projectile/P) - var/reflectchance = 100 - round(P.damage*2) - if(prob(reflectchance)) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = 1 - - return -1 // complete projectile permutation - - return (..(P)) - - -/obj/item/projectile/energy/electrode/cult - color = "#FFFFFF" - agony = 0 - damage = 15 - damage_type = BURN - check_armour = "laser" +/mob/living/simple_mob/construct/juggernaut + maxHealth = 100 + health = 100 + melee_damage_lower = 15 + melee_damage_upper = 20 + +/mob/living/simple_mob/construct/juggernaut/behemoth + maxHealth = 300 + health = 300 + +/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable + name = "Behemoth" + real_name = "Behemoth" + desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force." + melee_damage_lower = 22 + melee_damage_upper = 33 + ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax + projectiletype = /obj/item/projectile/energy/inversion + movement_cooldown = 1 + + loot_list = list(/obj/item/weapon/rig/ch/aegis = 100) + + +/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable/bullet_act(var/obj/item/projectile/P) + var/reflectchance = 100 - round(P.damage*2) + if(prob(reflectchance)) + visible_message("The [P.name] gets reflected by [src]'s shell!", \ + "The [P.name] gets reflected by [src]'s shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = 1 + + return -1 // complete projectile permutation + + return (..(P)) + + +/obj/item/projectile/energy/electrode/cult + color = "#FFFFFF" + agony = 0 + damage = 15 + damage_type = BURN + check_armour = "laser" armor_penetration = 60 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/feral.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/feral.dm index 6a0de42ee3..da5b6dae14 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/feral.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/feral.dm @@ -1,299 +1,299 @@ -/mob/living/simple_mob/slime/feral - cores = 3 // Xenobio will love getting their hands on these. - maxHealth = 75 - movement_cooldown = 0 - melee_damage_lower = 15 - melee_damage_upper = 15 - unity = 1 - -/mob/living/simple_mob/slime/feral/apply_melee_effects(mob/living/L) - if(istype(L) && a_intent == I_HURT) - // Pump them full of toxins, if able. - if(L.reagents && L.can_inject() && reagent_injected) - L.reagents.add_reagent(reagent_injected, injection_amount) - - -/mob/living/simple_mob/slime/feral/purple - desc = "This slime is rather toxic to handle, as it is poisonous." - color = "#CC23FF" - slime_color = "purple" - coretype = /obj/item/slime_extract/purple - reagent_injected = "toxin" - -/mob/living/simple_mob/slime/feral/orange - desc = "This slime is known to be flammable and can ignite enemies." - color = "#FFA723" - slime_color = "orange" - coretype = /obj/item/slime_extract/orange - melee_damage_lower = 5 - melee_damage_upper = 5 - heat_resist = 1 - -/mob/living/simple_mob/slime/feral/orange/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - L.add_modifier(/datum/modifier/fire, 5 SECONDS) - - -/mob/living/simple_mob/slime/feral/blue - desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes." - color = "#19FFFF" - slime_color = "blue" - coretype = /obj/item/slime_extract/blue - reagent_injected = "cryotoxin" - cold_resist = 0.50 - -/mob/living/simple_mob/slime/feral/metal - desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface." - color = "#5F5F5F" - slime_color = "metal" - shiny = TRUE - coretype = /obj/item/slime_extract/metal - maxHealth = 250 - armor = list( - "melee" = 25, - "bullet" = 25, - "laser" = 25, - "energy" = 50, - "bomb" = 80, - "bio" = 100, - "rad" = 100 - ) - - armor_soak = list( - "melee" = 5, - "bullet" = 5, - "laser" = 5, - "energy" = 0, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - -/mob/living/simple_mob/slime/feral/yellow - desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes." - color = "#FFF423" - slime_color = "yellow" - coretype = /obj/item/slime_extract/yellow - melee_damage_lower = 5 - melee_damage_upper = 5 - shock_resist = 1 - - projectiletype = /obj/item/projectile/energy/mob/electric_spider - -/mob/living/simple_mob/slime/feral/yellow/apply_melee_effects(atom/A) - ..() - if(isliving(A)) - var/mob/living/L = A - L.inflict_shock_damage(10) - to_chat(src, span("span", "You shock \the [L].")) - to_chat(L, span("danger", "You've been shocked by \the [src]!")) - -/mob/living/simple_mob/slime/feral/dark_purple - desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." - color = "#660088" - slime_color = "dark purple" - coretype = /obj/item/slime_extract/dark_purple - reagent_injected = "phoron" - -/mob/living/simple_mob/slime/feral/dark_purple/proc/ignite() - visible_message(span("critical", "\The [src] erupts in an inferno!")) - for(var/turf/simulated/target_turf in view(2, src)) - target_turf.assume_gas("phoron", 30, 1500+T0C) - spawn(0) - target_turf.hotspot_expose(1500+T0C, 400) - qdel(src) - -/mob/living/simple_mob/slime/feral/dark_purple/ex_act(severity) - log_and_message_admins("[src] ignited due to a chain reaction with an explosion.") - ignite() - -/mob/living/simple_mob/slime/feral/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume) - log_and_message_admins("[src] ignited due to exposure to fire.") - ignite() - -/mob/living/simple_mob/slime/feral/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. - log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") - ignite() - else - ..() - -/mob/living/simple_mob/slime/feral/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W) && W.force && W.damtype == BURN) - log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].") - ignite() - else - ..() - -/mob/living/simple_mob/slime/feral/silver - desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it." - color = "#AAAAAA" - slime_color = "silver" - coretype = /obj/item/slime_extract/silver - shiny = TRUE - -/mob/living/simple_mob/slime/feral/silver/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) - visible_message(span("danger", "\The [src] reflects \the [P]!")) - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - P.reflected = TRUE - return PROJECTILE_CONTINUE // complete projectile permutation - else - ..() - -/mob/living/simple_mob/slime/feral/bluespace - desc = "Trapping this slime in a cell is generally futile, as it can teleport at will." - color = null - slime_color = "bluespace" - icon_state_override = "bluespace" - coretype = /obj/item/slime_extract/bluespace - - special_attack_min_range = 3 - special_attack_max_range = 7 - special_attack_cooldown = 5 SECONDS - -/mob/living/simple_mob/slime/feral/bluespace/do_special_attack(atom/A) - // Teleport attack. - if(!A) - to_chat(src, span("warning", "There's nothing to teleport to.")) - return FALSE - - var/list/nearby_things = range(1, A) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - if(!(valid_turfs.len)) - to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) - return FALSE - - var/turf/target_turf = pick(valid_turfs) - var/turf/T = get_turf(src) - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message(span("notice", "\The [src] vanishes!")) - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, span("notice", "You teleport to \the [target_turf].")) - - target_turf.visible_message(span("warning", "\The [src] appears!")) - s2.start() - - if(Adjacent(A)) - attack_target(A) - - -/mob/living/simple_mob/slime/feral/ruby - desc = "This slime has great physical strength." - color = "#FF3333" - slime_color = "ruby" - shiny = TRUE - glow_toggle = TRUE - coretype = /obj/item/slime_extract/ruby - melee_attack_delay = 1 SECOND - -/mob/living/simple_mob/slime/feral/ruby/Initialize() - add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole. - return ..() - -/mob/living/simple_mob/slime/feral/ruby/apply_melee_effects(atom/A) - ..() - - if(isliving(A) && a_intent == I_HURT) - var/mob/living/L = A - if(L.mob_size <= MOB_MEDIUM) - visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) - playsound(src, "punch", 50, 1) - L.Weaken(1) - var/throwdir = get_dir(src, L) - L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) - else - to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) - visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. - playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. - -/mob/living/simple_mob/slime/feral/red - desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here." - color = "#FF3333" - slime_color = "red" - coretype = /obj/item/slime_extract/red - movement_cooldown = -1 // See above. - -/mob/living/simple_mob/slime/feral/green - desc = "This slime is radioactive." - color = "#14FF20" - slime_color = "green" - coretype = /obj/item/slime_extract/green - glow_toggle = TRUE - reagent_injected = "radium" - var/rads = 25 - -/mob/living/simple_mob/slime/feral/green/handle_special() - if(stat != DEAD) - irradiate() - ..() - -/mob/living/simple_mob/slime/feral/green/proc/irradiate() - SSradiation.radiate(src, rads) - -/mob/living/simple_mob/slime/feral/pink - desc = "This slime has regenerative properties." - color = "#FF0080" - slime_color = "pink" - coretype = /obj/item/slime_extract/pink - glow_toggle = TRUE - -/mob/living/simple_mob/slime/feral/pink/handle_special() - if(stat != DEAD) - heal_aura() - ..() - -/mob/living/simple_mob/slime/feral/pink/proc/heal_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/slime_heal, null, src) - -/mob/living/simple_mob/slime/feral/emerald - desc = "This slime is faster than usual, even more so than the red slimes." - color = "#22FF22" - shiny = TRUE - glow_toggle = TRUE - slime_color = "emerald" - coretype = /obj/item/slime_extract/emerald - -/mob/living/simple_mob/slime/feral/emerald/handle_special() - if(stat != DEAD) - zoom_aura() - ..() - -/mob/living/simple_mob/slime/feral/emerald/proc/zoom_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue +/mob/living/simple_mob/slime/feral + cores = 3 // Xenobio will love getting their hands on these. + maxHealth = 75 + movement_cooldown = 0 + melee_damage_lower = 15 + melee_damage_upper = 15 + unity = 1 + +/mob/living/simple_mob/slime/feral/apply_melee_effects(mob/living/L) + if(istype(L) && a_intent == I_HURT) + // Pump them full of toxins, if able. + if(L.reagents && L.can_inject() && reagent_injected) + L.reagents.add_reagent(reagent_injected, injection_amount) + + +/mob/living/simple_mob/slime/feral/purple + desc = "This slime is rather toxic to handle, as it is poisonous." + color = "#CC23FF" + slime_color = "purple" + coretype = /obj/item/slime_extract/purple + reagent_injected = "toxin" + +/mob/living/simple_mob/slime/feral/orange + desc = "This slime is known to be flammable and can ignite enemies." + color = "#FFA723" + slime_color = "orange" + coretype = /obj/item/slime_extract/orange + melee_damage_lower = 5 + melee_damage_upper = 5 + heat_resist = 1 + +/mob/living/simple_mob/slime/feral/orange/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + L.add_modifier(/datum/modifier/fire, 5 SECONDS) + + +/mob/living/simple_mob/slime/feral/blue + desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes." + color = "#19FFFF" + slime_color = "blue" + coretype = /obj/item/slime_extract/blue + reagent_injected = "cryotoxin" + cold_resist = 0.50 + +/mob/living/simple_mob/slime/feral/metal + desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface." + color = "#5F5F5F" + slime_color = "metal" + shiny = TRUE + coretype = /obj/item/slime_extract/metal + maxHealth = 250 + armor = list( + "melee" = 25, + "bullet" = 25, + "laser" = 25, + "energy" = 50, + "bomb" = 80, + "bio" = 100, + "rad" = 100 + ) + + armor_soak = list( + "melee" = 5, + "bullet" = 5, + "laser" = 5, + "energy" = 0, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + + +/mob/living/simple_mob/slime/feral/yellow + desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes." + color = "#FFF423" + slime_color = "yellow" + coretype = /obj/item/slime_extract/yellow + melee_damage_lower = 5 + melee_damage_upper = 5 + shock_resist = 1 + + projectiletype = /obj/item/projectile/energy/mob/electric_spider + +/mob/living/simple_mob/slime/feral/yellow/apply_melee_effects(atom/A) + ..() + if(isliving(A)) + var/mob/living/L = A + L.inflict_shock_damage(10) + to_chat(src, span("span", "You shock \the [L].")) + to_chat(L, span("danger", "You've been shocked by \the [src]!")) + +/mob/living/simple_mob/slime/feral/dark_purple + desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." + color = "#660088" + slime_color = "dark purple" + coretype = /obj/item/slime_extract/dark_purple + reagent_injected = "phoron" + +/mob/living/simple_mob/slime/feral/dark_purple/proc/ignite() + visible_message(span("critical", "\The [src] erupts in an inferno!")) + for(var/turf/simulated/target_turf in view(2, src)) + target_turf.assume_gas("phoron", 30, 1500+T0C) + spawn(0) + target_turf.hotspot_expose(1500+T0C, 400) + qdel(src) + +/mob/living/simple_mob/slime/feral/dark_purple/ex_act(severity) + log_and_message_admins("[src] ignited due to a chain reaction with an explosion.") + ignite() + +/mob/living/simple_mob/slime/feral/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume) + log_and_message_admins("[src] ignited due to exposure to fire.") + ignite() + +/mob/living/simple_mob/slime/feral/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. + log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") + ignite() + else + ..() + +/mob/living/simple_mob/slime/feral/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user) + if(istype(W) && W.force && W.damtype == BURN) + log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].") + ignite() + else + ..() + +/mob/living/simple_mob/slime/feral/silver + desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it." + color = "#AAAAAA" + slime_color = "silver" + coretype = /obj/item/slime_extract/silver + shiny = TRUE + +/mob/living/simple_mob/slime/feral/silver/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) + visible_message(span("danger", "\The [src] reflects \the [P]!")) + + // Find a turf near or on the original location to bounce to + var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.redirect(new_x, new_y, curloc, src) + P.reflected = TRUE + return PROJECTILE_CONTINUE // complete projectile permutation + else + ..() + +/mob/living/simple_mob/slime/feral/bluespace + desc = "Trapping this slime in a cell is generally futile, as it can teleport at will." + color = null + slime_color = "bluespace" + icon_state_override = "bluespace" + coretype = /obj/item/slime_extract/bluespace + + special_attack_min_range = 3 + special_attack_max_range = 7 + special_attack_cooldown = 5 SECONDS + +/mob/living/simple_mob/slime/feral/bluespace/do_special_attack(atom/A) + // Teleport attack. + if(!A) + to_chat(src, span("warning", "There's nothing to teleport to.")) + return FALSE + + var/list/nearby_things = range(1, A) + var/list/valid_turfs = list() + + // All this work to just go to a non-dense tile. + for(var/turf/potential_turf in nearby_things) + var/valid_turf = TRUE + if(potential_turf.density) + continue + for(var/atom/movable/AM in potential_turf) + if(AM.density) + valid_turf = FALSE + if(valid_turf) + valid_turfs.Add(potential_turf) + + if(!(valid_turfs.len)) + to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to.")) + return FALSE + + var/turf/target_turf = pick(valid_turfs) + var/turf/T = get_turf(src) + + var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread + s1.set_up(5, 1, T) + var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread + s2.set_up(5, 1, target_turf) + + + T.visible_message(span("notice", "\The [src] vanishes!")) + s1.start() + + forceMove(target_turf) + playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) + to_chat(src, span("notice", "You teleport to \the [target_turf].")) + + target_turf.visible_message(span("warning", "\The [src] appears!")) + s2.start() + + if(Adjacent(A)) + attack_target(A) + + +/mob/living/simple_mob/slime/feral/ruby + desc = "This slime has great physical strength." + color = "#FF3333" + slime_color = "ruby" + shiny = TRUE + glow_toggle = TRUE + coretype = /obj/item/slime_extract/ruby + melee_attack_delay = 1 SECOND + +/mob/living/simple_mob/slime/feral/ruby/Initialize() + add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole. + return ..() + +/mob/living/simple_mob/slime/feral/ruby/apply_melee_effects(atom/A) + ..() + + if(isliving(A) && a_intent == I_HURT) + var/mob/living/L = A + if(L.mob_size <= MOB_MEDIUM) + visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) + playsound(src, "punch", 50, 1) + L.Weaken(1) + var/throwdir = get_dir(src, L) + L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) + else + to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) + visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. + playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. + +/mob/living/simple_mob/slime/feral/red + desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here." + color = "#FF3333" + slime_color = "red" + coretype = /obj/item/slime_extract/red + movement_cooldown = -1 // See above. + +/mob/living/simple_mob/slime/feral/green + desc = "This slime is radioactive." + color = "#14FF20" + slime_color = "green" + coretype = /obj/item/slime_extract/green + glow_toggle = TRUE + reagent_injected = "radium" + var/rads = 25 + +/mob/living/simple_mob/slime/feral/green/handle_special() + if(stat != DEAD) + irradiate() + ..() + +/mob/living/simple_mob/slime/feral/green/proc/irradiate() + SSradiation.radiate(src, rads) + +/mob/living/simple_mob/slime/feral/pink + desc = "This slime has regenerative properties." + color = "#FF0080" + slime_color = "pink" + coretype = /obj/item/slime_extract/pink + glow_toggle = TRUE + +/mob/living/simple_mob/slime/feral/pink/handle_special() + if(stat != DEAD) + heal_aura() + ..() + +/mob/living/simple_mob/slime/feral/pink/proc/heal_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/slime_heal, null, src) + +/mob/living/simple_mob/slime/feral/emerald + desc = "This slime is faster than usual, even more so than the red slimes." + color = "#22FF22" + shiny = TRUE + glow_toggle = TRUE + slime_color = "emerald" + coretype = /obj/item/slime_extract/emerald + +/mob/living/simple_mob/slime/feral/emerald/handle_special() + if(stat != DEAD) + zoom_aura() + ..() + +/mob/living/simple_mob/slime/feral/emerald/proc/zoom_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/ashy.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/ashy.dm index 3bb8df7a84..89f7f3bdbe 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/ashy.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/ashy.dm @@ -1,14 +1,14 @@ -/mob/living/simple_mob/vore/ashy - name = "ashy" - icon = 'icons/mob/ashspawn.dmi' - icon_state = "ash_whelp" - icon_living = "ash_whelp" - icon_dead = "ash_welp" - ai_holder_type = /datum/ai_holder/simple_mob/passive - damage_fatigue_mult = 0 - movement_cooldown = 0 - maxHealth = 300 - see_in_dark = 8 - minbodytemp = 0 - maxbodytemp = 30000 +/mob/living/simple_mob/vore/ashy + name = "ashy" + icon = 'icons/mob/ashspawn.dmi' + icon_state = "ash_whelp" + icon_living = "ash_whelp" + icon_dead = "ash_welp" + ai_holder_type = /datum/ai_holder/simple_mob/passive + damage_fatigue_mult = 0 + movement_cooldown = 0 + maxHealth = 300 + see_in_dark = 8 + minbodytemp = 0 + maxbodytemp = 30000 min_oxy = 0 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm index 5246ca6523..8731fb48de 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm @@ -1,12 +1,12 @@ - -/mob/living/simple_mob/vore/aggressive/rat - maxHealth = 75 - health = 75 - -/mob/living/simple_mob/vore/aggressive/rat/phoron - maxHealth = 87 - health = 87 - -/mob/living/simple_mob/vore/aggressive/rat/event - maxHealth = 25 + +/mob/living/simple_mob/vore/aggressive/rat + maxHealth = 75 + health = 75 + +/mob/living/simple_mob/vore/aggressive/rat/phoron + maxHealth = 87 + health = 87 + +/mob/living/simple_mob/vore/aggressive/rat/event + maxHealth = 25 health = 25 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm index 1ac8aa1eae..75d762af48 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm @@ -1,732 +1,732 @@ - //Cataloguer things -/datum/category_item/catalogue/fauna/livingcandy - name = "Living Candy" - desc = "Upon investigation of the strange creatures, a mix of \ - promethean biology alongside various candies can be found. The purpose \ - of such a creation is unknown but it seems to function at a middle ground \ - between slimes and prometheans. Lacking the full sentience of prometheans \ - but their presence bolstering others of their kind." - value = CATALOGUER_REWARD_MEDIUM - -//Someone remind me to get someone to make actual sprites for this things. -/mob/living/simple_mob/vore/candy - name = "candy critter" - desc = "A creature made of candy" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "drone0" - icon_living = "drone0" - icon_dead = "drone0" - catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy) - - mob_class = MOB_CLASS_ABERRATION - ai_holder_type = /datum/ai_holder/simple_mob/melee - - faction = "candy" - - maxHealth = 20 - health = 20 - movement_cooldown = 2 - melee_attack_delay = 2 SECOND - can_be_drop_prey = TRUE - unsuitable_atoms_damage = 0 - melee_miss_chance = 0 - - melee_damage_lower = 8 - melee_damage_upper = 15 - damage_fatigue_mult = 0 //Candy creatures. They will fight to the bitter end unaffected by their wounds. Also they have 25 health, do they really need slowdown? - -/mob/living/simple_mob/vore/candy - vore_active = 1 - vore_capacity = 6 - vore_max_size = RESIZE_HUGE - vore_min_size = RESIZE_SMALL - vore_pounce_chance = 0 // Beat them into crit before eating. - vore_icons = null - - can_be_drop_prey = TRUE //CHOMP Add - -//bluenom -/mob/living/simple_mob/vore/candy/bluecabold/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/bluecabold/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/bluecabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -//rednom -/mob/living/simple_mob/vore/candy/redcabold/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/redcabold/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/redcabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -//yellow -/mob/living/simple_mob/vore/candy/yellowcabold/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/yellowcabold/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/yellowcabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -//orange -/mob/living/simple_mob/vore/candy/orangecabold/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/orangecabold/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/orangecabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -//purplenom -/mob/living/simple_mob/vore/candy/purplecabold/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/purplecabold/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/purplecabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -//marshmellownom -/mob/living/simple_mob/vore/candy/marshmellowserpent/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/marshmellowserpent/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/marshmellowserpent/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - -/mob/living/simple_mob/vore/candy/bluecabold //Adds protection - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "blue" - icon_living = "blue" - icon_dead = "blue_dead" - - melee_damage_lower = 7 - melee_damage_upper = 12 - -/mob/living/simple_mob/vore/candy/bluecabold/handle_special() - if(stat != DEAD) - buff_aura() - ..() - -/mob/living/simple_mob/vore/candy/bluecabold/proc/buff_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/candy_blue, null, src) - -/mob/living/simple_mob/vore/candy/redcabold //Tanky boi - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "red" - icon_living = "red" - icon_dead = "red_dead" - - maxHealth = 50 - health = 50 - - melee_damage_lower = 15 - melee_damage_upper = 25 - -/mob/living/simple_mob/vore/candy/redcabold/apply_melee_effects(atom/A) - ..() - - if(isliving(A) && a_intent == I_HURT) - var/mob/living/L = A - if(L.mob_size <= MOB_MEDIUM) - visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) - playsound(src, "punch", 50, 1) - L.Weaken(1) - var/throwdir = get_dir(src, L) - L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) - else - to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) - visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. - playsound(src, "punch", 50, 1) - -/mob/living/simple_mob/vore/candy/yellowcabold //Speeds folks - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "yellow" - icon_living = "yellow" - icon_dead = "yellow_dead" - - melee_damage_lower = 8 - melee_damage_upper = 15 - -/mob/living/simple_mob/vore/candy/yellowcabold/handle_special() - if(stat != DEAD) - buff_aura() - ..() - -/mob/living/simple_mob/vore/candy/yellowcabold/proc/buff_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/candy_yellow, null, src) - -/mob/living/simple_mob/vore/candy/orangecabold //Increase melee damage - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "orange" - icon_living = "orange" - icon_dead = "orange_dead" - - melee_damage_lower = 7 - melee_damage_upper = 12 - -/mob/living/simple_mob/vore/candy/orangecabold/handle_special() - if(stat != DEAD) - buff_aura() - ..() - -/mob/living/simple_mob/vore/candy/orangecabold/proc/buff_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/candy_orange, null, src) - -/mob/living/simple_mob/vore/candy/purplecabold //Heals folks - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "purple" - icon_living = "purple" - icon_dead = "purple_dead" - - melee_damage_lower = 7 - melee_damage_upper = 12 - -/mob/living/simple_mob/vore/candy/purplecabold/handle_special() - if(stat != DEAD) - buff_aura() - ..() - -/mob/living/simple_mob/vore/candy/purplecabold/proc/buff_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || !IIsAlly(L)) - continue - L.add_modifier(/datum/modifier/aura/candy_purple, null, src) - -/mob/living/simple_mob/vore/candy/greencabold //Nyoooooom - name = "gummy kobold" - desc = "A creature made of candy" - icon_state = "green" - icon_living = "green" - icon_dead = "green_dead" - - movement_cooldown = -1 - - melee_attack_delay = 1 SECOND - melee_damage_lower = 7 - melee_damage_upper = 12 - -/mob/living/simple_mob/vore/candy/greencabold/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - L.add_modifier(/datum/modifier/deep_wounds, 15 SECONDS) - - -/mob/living/simple_mob/vore/candy/marshmellowserpent //Long range grab - name = "marshmellow serpent" - desc = "A creature made of candy" - icon_state = "marshmellow" - icon_living = "marshmellow" - icon_dead = "marshmellow_dead" - - ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting - - melee_damage_lower = 4 - melee_damage_upper = 8 - - special_attack_min_range = 1 - special_attack_max_range = 14 - special_attack_cooldown = 10 - - loot_list = list(/obj/item/clothing/head/psy_crown/candycrown = 30, - /obj/item/clothing/gloves/stamina = 30, - /obj/item/clothing/suit/armor/buffvest = 30, - /obj/item/weapon/melee/cullingcane = 30 - ) - -/mob/living/simple_mob/vore/candy/marshmellowserpent/do_special_attack(atom/A) - set_AI_busy(TRUE) - do_windup_animation(A, 20) - addtimer(CALLBACK(src, .proc/chargeend, A), 20) - -/mob/living/simple_mob/vore/candy/marshmellowserpent/proc/chargeend(atom/A) - if(stat) //you are dead - set_AI_busy(FALSE) - return - playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25) - var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc)) - appendage_attack.old_style_target(A, src) - appendage_attack.launch_projectile(A, BP_TORSO, src) - set_AI_busy(FALSE) - -//Modifiers -/datum/modifier/aura/candy_purple //Healz - name = "candy_purple" - desc = "You feel somewhat gooey." - stacks = MODIFIER_STACK_FORBID - aura_max_distance = 5 - -/datum/modifier/aura/candy_purple/tick() - if(holder.stat == DEAD) - expire() - - if(ishuman(holder)) // Robolimbs need this code sadly. - var/mob/living/carbon/human/H = holder - for(var/obj/item/organ/external/E in H.organs) - var/obj/item/organ/external/O = E - O.heal_damage(2, 2, 0, 1) - else - holder.adjustBruteLoss(-2) - holder.adjustFireLoss(-2) - - holder.adjustToxLoss(-1) - -/datum/modifier/aura/candy_orange //melee+ - name = "candy orange" - desc = "You feel somewhat gooey." - stacks = MODIFIER_STACK_FORBID - aura_max_distance = 5 - outgoing_melee_damage_percent = 1.5 - -/datum/modifier/aura/candy_yellow //speed - name = "candy yellow" - desc = "You feel somewhat gooey." - stacks = MODIFIER_STACK_FORBID - aura_max_distance = 5 - slowdown = -1 - -/datum/modifier/aura/candy_blue //defense - name = "candy blue" - desc = "You feel somewhat gooey." - stacks = MODIFIER_STACK_FORBID - aura_max_distance = 5 - incoming_damage_percent = 0.9 - -//Boss Fight -/mob/living/simple_mob/vore/candy/ouroboros - name = "candy critter" - desc = "A creature made of candy" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "ouroboros" - icon_living = "ouroboros" - icon_dead = "slainouroboros" - catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy) - - mob_class = MOB_CLASS_ABERRATION - ai_holder_type = /datum/ai_holder/simple_mob/melee - - faction = "candy" - icon_state = "ouroboros" - icon_living = "ouroboros" - icon_dead = "slainouroboros" - - maxHealth = 200 - health = 200 - armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 20, bio = 100, rad = 100) //armor cause boss - movement_cooldown = 0 - melee_attack_delay = 1 SECOND - can_be_drop_prey = TRUE - unsuitable_atoms_damage = 0 - - melee_damage_lower = 25 - melee_damage_upper = 35 - var/grenade_type = /obj/item/weapon/grenade/concussion - var/grenade_timer = 1 - - special_attack_min_range = 1 - special_attack_max_range = 15 - special_attack_cooldown = 7 SECONDS - -/mob/living/simple_mob/vore/candy/ouroboros/bullet_act(var/obj/item/projectile/Proj) - if(prob(50)) - new /obj/random/mob/candycritter (src.loc) - return - else - return - -/mob/living/simple_mob/vore/candy/ouroboros/do_special_attack(atom/A) - switch(a_intent) - if(I_GRAB) - summon_combo(A) - if(I_HURT) - barrage_combo(A) - if(I_DISARM) - debuff_combo(A) - -/mob/living/simple_mob/vore/candy/ouroboros/proc/summon_combo(atom/target) - visible_message(span("warning", "\The [src] calls for help!")) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - sleep(2.0 SECONDS) - visible_message(span("warning", "\The [src] calls for help!")) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - sleep(1.5 SECONDS) - visible_message(span("warning", "\The [src] calls for help!")) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - sleep(1.0 SECONDS) - visible_message(span("warning", "\The [src] calls for help!")) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - visible_message(span("warning", "\The [src] begins to heal!")) - sleep(3.5 SECONDS) - adjustBruteLoss(-35) - adjustFireLoss(-35) - adjustToxLoss(-35) - adjustOxyLoss(-35) - adjustCloneLoss(-35) - -/mob/living/simple_mob/vore/candy/ouroboros/proc/barrage_combo(atom/target) - if(prob(50)) - sleep(0.5 SECONDS) - var/obj/item/projectile/P = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - if(prob(50)) - sleep(0.5 SECONDS) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - else - sleep(0.5 SECONDS) - var/obj/item/projectile/V = new /obj/item/projectile/bullet/cmblast(get_turf(src)) - V.launch_projectile(target, BP_TORSO, src) - else - sleep(0.5 SECONDS) - var/obj/item/projectile/A = new /obj/item/projectile/bullet/cmblast(get_turf(src)) - A.launch_projectile(target, BP_TORSO, src) - if(prob(50)) - sleep(0.5 SECONDS) - var/obj/item/projectile/B = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src)) - B.launch_projectile(target, BP_TORSO, src) - else - sleep(0.5 SECONDS) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - -/mob/living/simple_mob/vore/candy/ouroboros/proc/debuff_combo(atom/target) - visible_message(span("warning", "\The [src] prepares to let out a thunderous roar!")) - sleep(2.5 SECONDS) - var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) - if(istype(G)) - G.throw_at(G.throw_range, G.throw_speed, src) - G.det_time = grenade_timer //CHOMPEdit - G.activate(src) //CHOMPEdit - if(prob(25)) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - else - var/obj/item/projectile/P = new /obj/item/projectile/bullet/cmblast(get_turf(src)) - P.launch_projectile(target, BP_TORSO, src) - sleep(0.5) - P.launch_projectile(target, BP_TORSO, src) - -/datum/ai_holder/simple_mob/intentional/ouroboros - unconscious_vore = TRUE - handle_corpse = TRUE - vision_range = 13 - respect_alpha = FALSE - lose_target_timeout = 60 SECONDS - intelligence_level = AI_SMART - -/datum/ai_holder/simple_mob/intentional/ouroboros/proc/update_health() - if(prob(35)) - holder.a_intent = I_GRAB - if(prob(35)) - holder.a_intent = I_DISARM - else - holder.a_intent = I_HURT - - -/obj/random/mob/candycritter - name = "Random Gummy Candy Critter" - desc = "This is a random candy critter." - overwrite_hostility = 1 - mob_hostile = 1 - mob_retaliate = 1 - - mob_faction = "candy" - -/obj/random/mob/candycritter/item_to_spawn() - return pick(prob(40);/mob/living/simple_mob/vore/candy/purplecabold, - prob(40);/mob/living/simple_mob/vore/candy/bluecabold, - prob(40);/mob/living/simple_mob/vore/candy/greencabold, - prob(40);/mob/living/simple_mob/vore/candy/yellowcabold, - prob(40);/mob/living/simple_mob/vore/candy/orangecabold, - prob(40);/mob/living/simple_mob/vore/candy/redcabold, - prob(40);/mob/living/simple_mob/vore/candy/peppermint - ) - -/obj/item/projectile/bullet/cmblast - use_submunitions = 1 - only_submunitions = 1 - range = 0 - embed_chance = 0 - submunition_spread_max = 1800 - submunition_spread_min = 500 - submunitions = list(/obj/item/projectile/energy/chocosphere = 12) - -/obj/item/projectile/energy/chocosphere - name = "choclate sphere" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "choclate_sphere" - damage = 20 - armor_penetration = 30 - damage_type = BURN - check_armour = "energy" - speed = 4.0 - flash_strength = 0 - modifier_type_to_apply = /datum/modifier/chilled - modifier_duration = 6 SECONDS - -/obj/item/projectile/energy/canearrow - name = "candy cane arrow" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "choclate_sphere" - damage = 15 - armor_penetration = 40 - damage_type = BURN - check_armour = "laser" - speed = 2.5 - flash_strength = 0 - modifier_type_to_apply = /datum/modifier/grievous_wounds - modifier_duration = 12 SECONDS - -/obj/item/projectile/arc/fragmentation/cherrybomb - name = "cherry bomb" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "cherry_bomb" - fragment_amount = 3 - spread_range = 7 - speed = 1.5 - fragment_types = list( - /obj/item/projectile/bullet/cherrypit - ) - -/obj/item/projectile/bullet/cherrypit - name = "cherry bomb" - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "cherry_pit" - damage = 25 - armor_penetration = 30 - -//more critters -//antimelee - -/mob/living/simple_mob/vore/candy/peppermint - name = "peppermint turtle" - desc = "A creature made of candy, it's peppermint looking shell seeming diffcult to get a good hit on, but fragile if well struck." - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "peppermint" - icon_living = "peppermint" - icon_dead = "peppermint_dead" - - faction = "candy" - - maxHealth = 10 - health = 10 - -/mob/living/simple_mob/vore/candy/peppermint/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - if(prob(80)) - visible_message("\The [src] deflects \the [O] with its shell!") - if(user) - ai_holder.react_to_attack(user) - return - else - ..() - else - to_chat(user, "This weapon is ineffective, it does no damage.") - visible_message("\The [user] gently taps [src] with \the [O].") - -/* -/mob/living/simple_mob/vore/candy/worm - name = "hardcandy worm" - desc = "A creature made of candy." - icon = 'modular_chomp/icons/mob/candy.dmi' - icon_state = "worm" - icon_living = "worm" - icon_dead = "worm_dead" - - faction = "candy" - - maxHealth = 60 - health = 60 - - -/mob/living/simple_mob/vore/candy/worm/death() - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - new /obj/random/mob/candycritter (src.loc) - - -/mob/living/simple_mob/vore/candy/worm/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/worm/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/worm/redcabold/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") -*/ - -/mob/living/simple_mob/vore/candy/peppermint/Login() - . = ..() - if(!riding_datum) - riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - movement_cooldown = 1 - -/mob/living/simple_mob/vore/candy/peppermint/MouseDrop_T(mob/living/M, mob/living/user) - return - -/mob/living/simple_mob/vore/candy/peppermint/init_vore() - if(!voremob_loaded) - return - .=..() - var/obj/belly/B = vore_selected - B.name = "stomach" - B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." - - B.emote_lists[DM_HOLD] = list( - "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) - - B.emote_lists[DM_DIGEST] = list( - "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") - + //Cataloguer things +/datum/category_item/catalogue/fauna/livingcandy + name = "Living Candy" + desc = "Upon investigation of the strange creatures, a mix of \ + promethean biology alongside various candies can be found. The purpose \ + of such a creation is unknown but it seems to function at a middle ground \ + between slimes and prometheans. Lacking the full sentience of prometheans \ + but their presence bolstering others of their kind." + value = CATALOGUER_REWARD_MEDIUM + +//Someone remind me to get someone to make actual sprites for this things. +/mob/living/simple_mob/vore/candy + name = "candy critter" + desc = "A creature made of candy" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "drone0" + icon_living = "drone0" + icon_dead = "drone0" + catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy) + + mob_class = MOB_CLASS_ABERRATION + ai_holder_type = /datum/ai_holder/simple_mob/melee + + faction = "candy" + + maxHealth = 20 + health = 20 + movement_cooldown = 2 + melee_attack_delay = 2 SECOND + can_be_drop_prey = TRUE + unsuitable_atoms_damage = 0 + melee_miss_chance = 0 + + melee_damage_lower = 8 + melee_damage_upper = 15 + damage_fatigue_mult = 0 //Candy creatures. They will fight to the bitter end unaffected by their wounds. Also they have 25 health, do they really need slowdown? + +/mob/living/simple_mob/vore/candy + vore_active = 1 + vore_capacity = 6 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = null + + can_be_drop_prey = TRUE //CHOMP Add + +//bluenom +/mob/living/simple_mob/vore/candy/bluecabold/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/bluecabold/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/bluecabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +//rednom +/mob/living/simple_mob/vore/candy/redcabold/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/redcabold/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/redcabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +//yellow +/mob/living/simple_mob/vore/candy/yellowcabold/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/yellowcabold/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/yellowcabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +//orange +/mob/living/simple_mob/vore/candy/orangecabold/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/orangecabold/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/orangecabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +//purplenom +/mob/living/simple_mob/vore/candy/purplecabold/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/purplecabold/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/purplecabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +//marshmellownom +/mob/living/simple_mob/vore/candy/marshmellowserpent/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/marshmellowserpent/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/marshmellowserpent/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + +/mob/living/simple_mob/vore/candy/bluecabold //Adds protection + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "blue" + icon_living = "blue" + icon_dead = "blue_dead" + + melee_damage_lower = 7 + melee_damage_upper = 12 + +/mob/living/simple_mob/vore/candy/bluecabold/handle_special() + if(stat != DEAD) + buff_aura() + ..() + +/mob/living/simple_mob/vore/candy/bluecabold/proc/buff_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/candy_blue, null, src) + +/mob/living/simple_mob/vore/candy/redcabold //Tanky boi + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "red" + icon_living = "red" + icon_dead = "red_dead" + + maxHealth = 50 + health = 50 + + melee_damage_lower = 15 + melee_damage_upper = 25 + +/mob/living/simple_mob/vore/candy/redcabold/apply_melee_effects(atom/A) + ..() + + if(isliving(A) && a_intent == I_HURT) + var/mob/living/L = A + if(L.mob_size <= MOB_MEDIUM) + visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!")) + playsound(src, "punch", 50, 1) + L.Weaken(1) + var/throwdir = get_dir(src, L) + L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) + else + to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place.")) + visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam. + playsound(src, "punch", 50, 1) + +/mob/living/simple_mob/vore/candy/yellowcabold //Speeds folks + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "yellow" + icon_living = "yellow" + icon_dead = "yellow_dead" + + melee_damage_lower = 8 + melee_damage_upper = 15 + +/mob/living/simple_mob/vore/candy/yellowcabold/handle_special() + if(stat != DEAD) + buff_aura() + ..() + +/mob/living/simple_mob/vore/candy/yellowcabold/proc/buff_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/candy_yellow, null, src) + +/mob/living/simple_mob/vore/candy/orangecabold //Increase melee damage + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "orange" + icon_living = "orange" + icon_dead = "orange_dead" + + melee_damage_lower = 7 + melee_damage_upper = 12 + +/mob/living/simple_mob/vore/candy/orangecabold/handle_special() + if(stat != DEAD) + buff_aura() + ..() + +/mob/living/simple_mob/vore/candy/orangecabold/proc/buff_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/candy_orange, null, src) + +/mob/living/simple_mob/vore/candy/purplecabold //Heals folks + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "purple" + icon_living = "purple" + icon_dead = "purple_dead" + + melee_damage_lower = 7 + melee_damage_upper = 12 + +/mob/living/simple_mob/vore/candy/purplecabold/handle_special() + if(stat != DEAD) + buff_aura() + ..() + +/mob/living/simple_mob/vore/candy/purplecabold/proc/buff_aura() + for(var/mob/living/L in view(src, 2)) + if(L.stat == DEAD || !IIsAlly(L)) + continue + L.add_modifier(/datum/modifier/aura/candy_purple, null, src) + +/mob/living/simple_mob/vore/candy/greencabold //Nyoooooom + name = "gummy kobold" + desc = "A creature made of candy" + icon_state = "green" + icon_living = "green" + icon_dead = "green_dead" + + movement_cooldown = -1 + + melee_attack_delay = 1 SECOND + melee_damage_lower = 7 + melee_damage_upper = 12 + +/mob/living/simple_mob/vore/candy/greencabold/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + L.add_modifier(/datum/modifier/deep_wounds, 15 SECONDS) + + +/mob/living/simple_mob/vore/candy/marshmellowserpent //Long range grab + name = "marshmellow serpent" + desc = "A creature made of candy" + icon_state = "marshmellow" + icon_living = "marshmellow" + icon_dead = "marshmellow_dead" + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting + + melee_damage_lower = 4 + melee_damage_upper = 8 + + special_attack_min_range = 1 + special_attack_max_range = 14 + special_attack_cooldown = 10 + + loot_list = list(/obj/item/clothing/head/psy_crown/candycrown = 30, + /obj/item/clothing/gloves/stamina = 30, + /obj/item/clothing/suit/armor/buffvest = 30, + /obj/item/weapon/melee/cullingcane = 30 + ) + +/mob/living/simple_mob/vore/candy/marshmellowserpent/do_special_attack(atom/A) + set_AI_busy(TRUE) + do_windup_animation(A, 20) + addtimer(CALLBACK(src, .proc/chargeend, A), 20) + +/mob/living/simple_mob/vore/candy/marshmellowserpent/proc/chargeend(atom/A) + if(stat) //you are dead + set_AI_busy(FALSE) + return + playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25) + var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc)) + appendage_attack.old_style_target(A, src) + appendage_attack.launch_projectile(A, BP_TORSO, src) + set_AI_busy(FALSE) + +//Modifiers +/datum/modifier/aura/candy_purple //Healz + name = "candy_purple" + desc = "You feel somewhat gooey." + stacks = MODIFIER_STACK_FORBID + aura_max_distance = 5 + +/datum/modifier/aura/candy_purple/tick() + if(holder.stat == DEAD) + expire() + + if(ishuman(holder)) // Robolimbs need this code sadly. + var/mob/living/carbon/human/H = holder + for(var/obj/item/organ/external/E in H.organs) + var/obj/item/organ/external/O = E + O.heal_damage(2, 2, 0, 1) + else + holder.adjustBruteLoss(-2) + holder.adjustFireLoss(-2) + + holder.adjustToxLoss(-1) + +/datum/modifier/aura/candy_orange //melee+ + name = "candy orange" + desc = "You feel somewhat gooey." + stacks = MODIFIER_STACK_FORBID + aura_max_distance = 5 + outgoing_melee_damage_percent = 1.5 + +/datum/modifier/aura/candy_yellow //speed + name = "candy yellow" + desc = "You feel somewhat gooey." + stacks = MODIFIER_STACK_FORBID + aura_max_distance = 5 + slowdown = -1 + +/datum/modifier/aura/candy_blue //defense + name = "candy blue" + desc = "You feel somewhat gooey." + stacks = MODIFIER_STACK_FORBID + aura_max_distance = 5 + incoming_damage_percent = 0.9 + +//Boss Fight +/mob/living/simple_mob/vore/candy/ouroboros + name = "candy critter" + desc = "A creature made of candy" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "ouroboros" + icon_living = "ouroboros" + icon_dead = "slainouroboros" + catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy) + + mob_class = MOB_CLASS_ABERRATION + ai_holder_type = /datum/ai_holder/simple_mob/melee + + faction = "candy" + icon_state = "ouroboros" + icon_living = "ouroboros" + icon_dead = "slainouroboros" + + maxHealth = 200 + health = 200 + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 20, bio = 100, rad = 100) //armor cause boss + movement_cooldown = 0 + melee_attack_delay = 1 SECOND + can_be_drop_prey = TRUE + unsuitable_atoms_damage = 0 + + melee_damage_lower = 25 + melee_damage_upper = 35 + var/grenade_type = /obj/item/weapon/grenade/concussion + var/grenade_timer = 1 + + special_attack_min_range = 1 + special_attack_max_range = 15 + special_attack_cooldown = 7 SECONDS + +/mob/living/simple_mob/vore/candy/ouroboros/bullet_act(var/obj/item/projectile/Proj) + if(prob(50)) + new /obj/random/mob/candycritter (src.loc) + return + else + return + +/mob/living/simple_mob/vore/candy/ouroboros/do_special_attack(atom/A) + switch(a_intent) + if(I_GRAB) + summon_combo(A) + if(I_HURT) + barrage_combo(A) + if(I_DISARM) + debuff_combo(A) + +/mob/living/simple_mob/vore/candy/ouroboros/proc/summon_combo(atom/target) + visible_message(span("warning", "\The [src] calls for help!")) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + sleep(2.0 SECONDS) + visible_message(span("warning", "\The [src] calls for help!")) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + sleep(1.5 SECONDS) + visible_message(span("warning", "\The [src] calls for help!")) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + sleep(1.0 SECONDS) + visible_message(span("warning", "\The [src] calls for help!")) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + visible_message(span("warning", "\The [src] begins to heal!")) + sleep(3.5 SECONDS) + adjustBruteLoss(-35) + adjustFireLoss(-35) + adjustToxLoss(-35) + adjustOxyLoss(-35) + adjustCloneLoss(-35) + +/mob/living/simple_mob/vore/candy/ouroboros/proc/barrage_combo(atom/target) + if(prob(50)) + sleep(0.5 SECONDS) + var/obj/item/projectile/P = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + if(prob(50)) + sleep(0.5 SECONDS) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + else + sleep(0.5 SECONDS) + var/obj/item/projectile/V = new /obj/item/projectile/bullet/cmblast(get_turf(src)) + V.launch_projectile(target, BP_TORSO, src) + else + sleep(0.5 SECONDS) + var/obj/item/projectile/A = new /obj/item/projectile/bullet/cmblast(get_turf(src)) + A.launch_projectile(target, BP_TORSO, src) + if(prob(50)) + sleep(0.5 SECONDS) + var/obj/item/projectile/B = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src)) + B.launch_projectile(target, BP_TORSO, src) + else + sleep(0.5 SECONDS) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + +/mob/living/simple_mob/vore/candy/ouroboros/proc/debuff_combo(atom/target) + visible_message(span("warning", "\The [src] prepares to let out a thunderous roar!")) + sleep(2.5 SECONDS) + var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src)) + if(istype(G)) + G.throw_at(G.throw_range, G.throw_speed, src) + G.det_time = grenade_timer //CHOMPEdit + G.activate(src) //CHOMPEdit + if(prob(25)) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + else + var/obj/item/projectile/P = new /obj/item/projectile/bullet/cmblast(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + sleep(0.5) + P.launch_projectile(target, BP_TORSO, src) + +/datum/ai_holder/simple_mob/intentional/ouroboros + unconscious_vore = TRUE + handle_corpse = TRUE + vision_range = 13 + respect_alpha = FALSE + lose_target_timeout = 60 SECONDS + intelligence_level = AI_SMART + +/datum/ai_holder/simple_mob/intentional/ouroboros/proc/update_health() + if(prob(35)) + holder.a_intent = I_GRAB + if(prob(35)) + holder.a_intent = I_DISARM + else + holder.a_intent = I_HURT + + +/obj/random/mob/candycritter + name = "Random Gummy Candy Critter" + desc = "This is a random candy critter." + overwrite_hostility = 1 + mob_hostile = 1 + mob_retaliate = 1 + + mob_faction = "candy" + +/obj/random/mob/candycritter/item_to_spawn() + return pick(prob(40);/mob/living/simple_mob/vore/candy/purplecabold, + prob(40);/mob/living/simple_mob/vore/candy/bluecabold, + prob(40);/mob/living/simple_mob/vore/candy/greencabold, + prob(40);/mob/living/simple_mob/vore/candy/yellowcabold, + prob(40);/mob/living/simple_mob/vore/candy/orangecabold, + prob(40);/mob/living/simple_mob/vore/candy/redcabold, + prob(40);/mob/living/simple_mob/vore/candy/peppermint + ) + +/obj/item/projectile/bullet/cmblast + use_submunitions = 1 + only_submunitions = 1 + range = 0 + embed_chance = 0 + submunition_spread_max = 1800 + submunition_spread_min = 500 + submunitions = list(/obj/item/projectile/energy/chocosphere = 12) + +/obj/item/projectile/energy/chocosphere + name = "choclate sphere" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "choclate_sphere" + damage = 20 + armor_penetration = 30 + damage_type = BURN + check_armour = "energy" + speed = 4.0 + flash_strength = 0 + modifier_type_to_apply = /datum/modifier/chilled + modifier_duration = 6 SECONDS + +/obj/item/projectile/energy/canearrow + name = "candy cane arrow" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "choclate_sphere" + damage = 15 + armor_penetration = 40 + damage_type = BURN + check_armour = "laser" + speed = 2.5 + flash_strength = 0 + modifier_type_to_apply = /datum/modifier/grievous_wounds + modifier_duration = 12 SECONDS + +/obj/item/projectile/arc/fragmentation/cherrybomb + name = "cherry bomb" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "cherry_bomb" + fragment_amount = 3 + spread_range = 7 + speed = 1.5 + fragment_types = list( + /obj/item/projectile/bullet/cherrypit + ) + +/obj/item/projectile/bullet/cherrypit + name = "cherry bomb" + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "cherry_pit" + damage = 25 + armor_penetration = 30 + +//more critters +//antimelee + +/mob/living/simple_mob/vore/candy/peppermint + name = "peppermint turtle" + desc = "A creature made of candy, it's peppermint looking shell seeming diffcult to get a good hit on, but fragile if well struck." + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "peppermint" + icon_living = "peppermint" + icon_dead = "peppermint_dead" + + faction = "candy" + + maxHealth = 10 + health = 10 + +/mob/living/simple_mob/vore/candy/peppermint/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.force) + if(prob(80)) + visible_message("\The [src] deflects \the [O] with its shell!") + if(user) + ai_holder.react_to_attack(user) + return + else + ..() + else + to_chat(user, "This weapon is ineffective, it does no damage.") + visible_message("\The [user] gently taps [src] with \the [O].") + +/* +/mob/living/simple_mob/vore/candy/worm + name = "hardcandy worm" + desc = "A creature made of candy." + icon = 'modular_chomp/icons/mob/candy.dmi' + icon_state = "worm" + icon_living = "worm" + icon_dead = "worm_dead" + + faction = "candy" + + maxHealth = 60 + health = 60 + + +/mob/living/simple_mob/vore/candy/worm/death() + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + new /obj/random/mob/candycritter (src.loc) + + +/mob/living/simple_mob/vore/candy/worm/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/worm/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/worm/redcabold/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") +*/ + +/mob/living/simple_mob/vore/candy/peppermint/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + verbs |= /mob/living/simple_mob/proc/animal_mount + verbs |= /mob/living/proc/toggle_rider_reins + movement_cooldown = 1 + +/mob/living/simple_mob/vore/candy/peppermint/MouseDrop_T(mob/living/M, mob/living/user) + return + +/mob/living/simple_mob/vore/candy/peppermint/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The fearsome predator gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach." + + B.emote_lists[DM_HOLD] = list( + "Your surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",) + + B.emote_lists[DM_DIGEST] = list( + "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!") + v \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index bc61d1e7dc..8fa146c7d7 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -1,49 +1,49 @@ -/mob/living/simple_mob/shadekin - var/phase_gentle = 0 - -/mob/living/simple_mob/shadekin/Login() - . = ..() - verbs |= /mob/living/simple_mob/shadekin/proc/phase_strength_toggle - - -// Allow horizontal resting -/mob/living/simple_mob/shadekin/update_transform() - update_transform_horizontal() - -//custom light flicker proc -/mob/living/simple_mob/shadekin/proc/handle_phasein_flicker() - if(phase_gentle) // gentle case: No light destruction. Flicker in 4 tile radius for 3s. Weaken for 3sec after - for(var/obj/machinery/light/L in machines) - if(L.z != z || get_dist(src,L) > 4) - continue - L.flicker(3) - src.Stun(3) - else //normal case. Flicker in 10 tile radius for 10s. chance to destroy light based on eye type. - var/destroy_lights = 0 - if(eye_state == RED_EYES) - destroy_lights = 80 - if(eye_state == PURPLE_EYES) - destroy_lights = 25 - - for(var/obj/machinery/light/L in machines) - if(L.z != z || get_dist(src,L) > 10) - continue - - if(prob(destroy_lights)) - spawn(rand(5,25)) - L.broken() - else - L.flicker(10) - -//toggle proc for toggling gentle/normal phasing -/mob/living/simple_mob/shadekin/proc/phase_strength_toggle() - set name = "Toggle Phase Strength" - set desc = "Toggle strength of phase. Gentle but slower, or faster but destructive to lights." - set category = "Abilities" - - if(phase_gentle) - to_chat(src, "Phasing toggled to Normal. You may damage lights.") - phase_gentle = 0 - else - to_chat(src, "Phasing toggled to Gentle. You won't damage lights, but concentrating on that incurs a short stun.") +/mob/living/simple_mob/shadekin + var/phase_gentle = 0 + +/mob/living/simple_mob/shadekin/Login() + . = ..() + verbs |= /mob/living/simple_mob/shadekin/proc/phase_strength_toggle + + +// Allow horizontal resting +/mob/living/simple_mob/shadekin/update_transform() + update_transform_horizontal() + +//custom light flicker proc +/mob/living/simple_mob/shadekin/proc/handle_phasein_flicker() + if(phase_gentle) // gentle case: No light destruction. Flicker in 4 tile radius for 3s. Weaken for 3sec after + for(var/obj/machinery/light/L in machines) + if(L.z != z || get_dist(src,L) > 4) + continue + L.flicker(3) + src.Stun(3) + else //normal case. Flicker in 10 tile radius for 10s. chance to destroy light based on eye type. + var/destroy_lights = 0 + if(eye_state == RED_EYES) + destroy_lights = 80 + if(eye_state == PURPLE_EYES) + destroy_lights = 25 + + for(var/obj/machinery/light/L in machines) + if(L.z != z || get_dist(src,L) > 10) + continue + + if(prob(destroy_lights)) + spawn(rand(5,25)) + L.broken() + else + L.flicker(10) + +//toggle proc for toggling gentle/normal phasing +/mob/living/simple_mob/shadekin/proc/phase_strength_toggle() + set name = "Toggle Phase Strength" + set desc = "Toggle strength of phase. Gentle but slower, or faster but destructive to lights." + set category = "Abilities" + + if(phase_gentle) + to_chat(src, "Phasing toggled to Normal. You may damage lights.") + phase_gentle = 0 + else + to_chat(src, "Phasing toggled to Gentle. You won't damage lights, but concentrating on that incurs a short stun.") phase_gentle = 1 \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/smokestar.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/smokestar.dm index 8a4942f462..a65db2413f 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/smokestar.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/smokestar.dm @@ -1,53 +1,53 @@ -/mob/living/simple_mob/vore/smokestar - name = "strange creature" - desc = "What is that?" - icon = 'modular_chomp/icons/mob/smokestar.dmi' - icon_state = "drone0" - icon_living = "drone0" - icon_dead = "drone0" - - mob_class = MOB_CLASS_ABERRATION - ai_holder_type = /datum/ai_holder/simple_mob/melee - - faction = "smokestar" - - maxHealth = 200 - health = 200 - movement_cooldown = 0 - melee_attack_delay = 1.5 SECOND - can_be_drop_prey = TRUE - unsuitable_atoms_damage = 0 - melee_miss_chance = 0 - hovering = TRUE - pass_flags = PASSTABLE - - melee_damage_lower = 8 - melee_damage_upper = 15 - damage_fatigue_mult = 0 - armor = list( - "melee" = 30, - "bullet" = 30, - "laser" = 30, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - -/* -/mob/living/simple_mob/vore/smokestar/wendigo -/mob/living/simple_mob/vore/smokestar/behemoth -/mob/living/simple_mob/vore/smokestar/banshee -*/ - -//All the Ai and such is place holder. -/mob/living/simple_mob/vore/smokestar/drider - icon_state = "drideralive" - icon_living = "drideralive" - icon_dead = "driderdead" - - glow_color = "#1F000F" - light_color = "#1F000F" - glow_range = 5 - glow_intensity = -1 +/mob/living/simple_mob/vore/smokestar + name = "strange creature" + desc = "What is that?" + icon = 'modular_chomp/icons/mob/smokestar.dmi' + icon_state = "drone0" + icon_living = "drone0" + icon_dead = "drone0" + + mob_class = MOB_CLASS_ABERRATION + ai_holder_type = /datum/ai_holder/simple_mob/melee + + faction = "smokestar" + + maxHealth = 200 + health = 200 + movement_cooldown = 0 + melee_attack_delay = 1.5 SECOND + can_be_drop_prey = TRUE + unsuitable_atoms_damage = 0 + melee_miss_chance = 0 + hovering = TRUE + pass_flags = PASSTABLE + + melee_damage_lower = 8 + melee_damage_upper = 15 + damage_fatigue_mult = 0 + armor = list( + "melee" = 30, + "bullet" = 30, + "laser" = 30, + "energy" = 30, + "bomb" = 30, + "bio" = 100, + "rad" = 100 + ) + +/* +/mob/living/simple_mob/vore/smokestar/wendigo +/mob/living/simple_mob/vore/smokestar/behemoth +/mob/living/simple_mob/vore/smokestar/banshee +*/ + +//All the Ai and such is place holder. +/mob/living/simple_mob/vore/smokestar/drider + icon_state = "drideralive" + icon_living = "drideralive" + icon_dead = "driderdead" + + glow_color = "#1F000F" + light_color = "#1F000F" + glow_range = 5 + glow_intensity = -1 ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run \ No newline at end of file diff --git a/modular_chomp/code/modules/planet/sif.dm b/modular_chomp/code/modules/planet/sif.dm index 4292ae2886..810232413b 100644 --- a/modular_chomp/code/modules/planet/sif.dm +++ b/modular_chomp/code/modules/planet/sif.dm @@ -1,17 +1,17 @@ -/datum/weather/sif/fog - name = "fog" - icon_state = "fog" - wind_high = 1 - wind_low = 0 - light_modifier = 0.7 - - temp_high = T0C // 0c - temp_low = 263.15 // -10c - - transition_chances = list( - WEATHER_FOG = 35, - WEATHER_CLEAR = 35, - WEATHER_OVERCAST = 15, - WEATHER_LIGHT_SNOW = 10, - WEATHER_RAIN = 5 +/datum/weather/sif/fog + name = "fog" + icon_state = "fog" + wind_high = 1 + wind_low = 0 + light_modifier = 0.7 + + temp_high = T0C // 0c + temp_low = 263.15 // -10c + + transition_chances = list( + WEATHER_FOG = 35, + WEATHER_CLEAR = 35, + WEATHER_OVERCAST = 15, + WEATHER_LIGHT_SNOW = 10, + WEATHER_RAIN = 5 ) \ No newline at end of file diff --git a/modular_chomp/code/modules/planet/smokestar/turf.dm b/modular_chomp/code/modules/planet/smokestar/turf.dm index a55c0555cb..adf9bf9599 100644 --- a/modular_chomp/code/modules/planet/smokestar/turf.dm +++ b/modular_chomp/code/modules/planet/smokestar/turf.dm @@ -1,45 +1,45 @@ -/turf/simulated/floor/outdoors/grass/smokestar - name = "strange moss" - icon = 'modular_chomp/icons/turf/falseplanets.dmi' - icon_state = "moss" - can_dig = TRUE -/*unsure how needed this variable will need to be changed - turf_layers = list( - /turf/simulated/floor/outdoors/rocks, - /turf/simulated/floor/outdoors/dirt - ) -*/ - grass_chance = 15 - - animal_chance = 0.1 - - animal_types = list( - /mob/living/simple_mob/vore/smokestar/drider = 1 - ) - - grass_types = list( - /obj/structure/flora/opalflowers, - /obj/structure/flora/weepinggrass, - /obj/random/outcrop - ) - - -/obj/structure/flora/opalflowers - name = "opal flower" - icon = 'modular_chomp/icons/obj/strangeflora.dmi' - icon_state = "opal" - - destroy_on_harvest = TRUE - harvest_tool = /obj/item/weapon/material/knife - randomize_harvest_count = TRUE - harvest_loot = list(/obj/item/stack/material/void_opal = 1) - -/obj/structure/flora/weepinggrass - name = "strange grass" - icon = 'modular_chomp/icons/obj/strangeflora.dmi' - icon_state = "weep" - - destroy_on_harvest = TRUE - harvest_tool = /obj/item/weapon/material/knife - randomize_harvest_count = TRUE +/turf/simulated/floor/outdoors/grass/smokestar + name = "strange moss" + icon = 'modular_chomp/icons/turf/falseplanets.dmi' + icon_state = "moss" + can_dig = TRUE +/*unsure how needed this variable will need to be changed + turf_layers = list( + /turf/simulated/floor/outdoors/rocks, + /turf/simulated/floor/outdoors/dirt + ) +*/ + grass_chance = 15 + + animal_chance = 0.1 + + animal_types = list( + /mob/living/simple_mob/vore/smokestar/drider = 1 + ) + + grass_types = list( + /obj/structure/flora/opalflowers, + /obj/structure/flora/weepinggrass, + /obj/random/outcrop + ) + + +/obj/structure/flora/opalflowers + name = "opal flower" + icon = 'modular_chomp/icons/obj/strangeflora.dmi' + icon_state = "opal" + + destroy_on_harvest = TRUE + harvest_tool = /obj/item/weapon/material/knife + randomize_harvest_count = TRUE + harvest_loot = list(/obj/item/stack/material/void_opal = 1) + +/obj/structure/flora/weepinggrass + name = "strange grass" + icon = 'modular_chomp/icons/obj/strangeflora.dmi' + icon_state = "weep" + + destroy_on_harvest = TRUE + harvest_tool = /obj/item/weapon/material/knife + randomize_harvest_count = TRUE harvest_loot = list(/obj/item/stack/material/fiber = 1) \ No newline at end of file diff --git a/modular_chomp/code/modules/player_tips/player_tips_list.dm b/modular_chomp/code/modules/player_tips/player_tips_list.dm index 4d83771636..e27892784b 100644 --- a/modular_chomp/code/modules/player_tips/player_tips_list.dm +++ b/modular_chomp/code/modules/player_tips/player_tips_list.dm @@ -1,83 +1,83 @@ -/* List of player tips -Weighted to emphasize more important over less.area -Weights are not additive. You can have multiple prob(50) items. -prob(50) makes it half as likely to appear and so forth. -When editing the list, please try and keep similar probabilities near each other. High on top, low on bottom */ - -//argument determines if to pick a random tip or use a forced choice. -/datum/player_tips/proc/pick_tip(var/isSpecific) - var/choice = null - if(!(isSpecific == "none" || isSpecific == "general" || isSpecific == "gameplay" || isSpecific == "roleplay" || isSpecific == "lore" )) - choice = "none" //Making sure that wrong arguments still give tips. - if(isSpecific == "none") - choice = pick ( - prob(50); "general", - prob(50); "gameplay", - prob(25); "roleplay", - prob(20); "lore" - ) - else - choice = isSpecific - - switch(choice) - if("general") - var/info = "The following is a general tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" - return pick( - prob(60); "[info] Got a question about gameplay, roleplay or the setting? Press F1 to Mentorhelp!", - prob(60); "[info] We have a wiki that is actively updated! Please check it out at https://wiki.chompstation13.net/index.php/Chomp_Station_Wiki for help!", - prob(60); "[info] Unsure about rules? Press F1 and ask our admins for clarification - they are happy to help.", - prob(30); "[info] Don't be afraid to approach your fellow players for advice! Learning things ICly can help build powerful bonds!", - prob(30); "[info] Need some guidance making a character or with roleplay concepts? Our discord's tutoring channel is happy to help!", - prob(30); "[info] Having difficulties getting started? Pressing F3 to speak and typing '; Hello! I'm a new hire. Could someone please give me a tour?' or as appropriate for your character is a good way to start! More help available at: https://wiki.chompstation13.net/index.php/The_Basics", - prob(30); "[info] Want to try out a new department? Consider joining as an intern when it's well-staffed. Our players enjoy teaching eager students. You can approach such roleplay as simply getting taught the local technologies, procedures - you don't need to be 'fresh out of school' to justify it!", - prob(30); "[info] Our discord is an excellent resource to stay up to date about changes and events! If wanting to separate your kink and real identities, Discord has a built in means to swap accounts within the client. It is OK to lurk!", - prob(5); "[info] Got another tip for the list? Please let us know on Discord in the feedback forums!" - ) - - - if("gameplay") - var/info = "The following is a gameplay-focused tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" - return pick( - prob(50); "[info] To talk to your fellow coworkers, use ';'! You may append it by an exclamation mark, like ';!' to perform an audiable emote. ", - prob(50); "[info] Lost on the map? You can find In-Character help by speaking on the Common Radio. You can do this by pressing F3 and typing ' ; ' before your message. Your fellow co-workers will likely help. If OOC help is preferred, press F1 for mentorhelp. ", - prob(50); "[info] You may set your suit sensors by clicking on the icon in the bottom left corner, then right click the clothes that appear right above it. It is recommended to turn on suit sensors to 'TRACKING' before doing anything dangerous like mining, and to turn them off before digestion scenes as prey.", - prob(35); "[info] It is never a bad idea to visit the medbay if you get injured - small burns and cuts can get infected and become harder to treat! If there is no medical staff, bathrooms and the bar often have a NanoMed on the wall, while a medical station can be found on the first deck - with ointments to disinfect cuts and burns, bandages to treat bruises and encourage healing.", - prob(25); "[info] Two control modes exist for SS13 - hotkey ON and hotkey OFF. You can swap between the two modes by pressing TAB. In hotkey mode, to chat you need to press T to say anything which creates a small talking bubble.", - prob(25); "[info] Do you want to shift your character around, for instance to appear as if leaning on the wall? Press CTRL + SHIFT + arrow keys to do so! Moving resets this.", - prob(25); "[info] Emergency Fire Doors seal breaches and keep active fires out. Please do not open them without good reason. SHIFT + CLICK them to get temperature and atmospheric pressure readings.", - prob(25); "[info] The kitchen's Oven can fit multiple ingredients in one slot if you pull the baking tray out first. This is required for most recipes, and the Grille and Deep Frier work the same way!", - prob(10); "[info] Not every hostile NPC you encounter while mining or exploring needs to be defeated. Sometimes, it's better to avoid or run away from them.", - prob(1); "[info] Stay robust, my friends.", - prob(35); "[info] You can insert your ID into your PDA. This frees up your belt from having to carry your PDA. Furthermore, by clicking and dragging the PDA to the game screen, you can use it without holding it!", - prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!", - prob(35); "[info] Remember to check your vore panel preferences! There you can find toggles for things other than just vore(tm), such as stepping mechanics and spontaneous transformation.", - prob(25); "[info] If you would like to toggle stepping mechanics, head to the vore panel and click on personal preferences! Disabling stepping mechanics will disable stepping descriptions and will prevent your character from taking damage if a bigger character walks over yours with harm intent. Your character will still be stunned, however." - ) - - if("roleplay") - var/info = "The following is a roleplay-focused tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" - return pick( - prob(50); "[info] Having difficulty finding scenes? The number one tip is to be active! Generally speaking, people are more likely to interact with you if you are moving about and doing things. Don't be afraid to talk to people, you're less likely to be approached if you're sat alone at a table silently. People that are looking for scenes generally like to see how you type and RP before they'll start working towards a scene with you.", - prob(50); "[info] Please avoid a character that knows everything. Having only a small set of jobs you are capable of doing can help flesh out your character! It's OK for things to break and fail if nobody is around to fix it - you do not need to do others' jobs.", - prob(25); "[info] Embrace the limits of your character's skillsets! Seeking out other players to help you with a more challenging task might build friendships, or even lead to a scene!", - prob(25); "[info] Slowing down when meeting another player can help with finding roleplay! Your fellow player might be typing up a greeting or an emote, and if you run off you won't see it!", - prob(25); "[info] It is a good idea to wait a few moments after using mechanics like lick, hug or headpat on another player. They might be typing up a response or wish to reciprocate, and if you run away you might miss out!", - prob(25); "[info] Participating in an away mission and see something acting strange? Try emoting or talking to it before resorting to fighting. It may be a GM event!", - prob(15); "[info] We are a medium roleplay server. This does not neccessarily mean 'serious' roleplay, levity and light-hearted RP is more than welcome! Please do not ignore people just because it is unlikely you will be able to scene.", - prob(10); "[info] Sending faxes to central command, using the 'pray' verb or pressing F1 to ahelp are highly encouraged when exploring the gateway or overmap locations! Letting GMs know something fun is happening allows them to spice things up and make the world feel alive!", - prob(40); "[info] Just because you see something doesn't mean your character has to. A courtesy 'missing' of contraband or scene details can go a long way towards preserving everyone's fun!", - prob(25); "[info] It is always a good idea to communicate on your department's private channel (whose key you can learn by examining your headset) when responding to an emergency! This lets your coworkers know if they might be needed!", - prob(25); "[info] While following the SOP is not mandatory, and you are free to break it (albeit, with potential in-character consequences), departments like security and medical do well to be familiar with them! https://wiki.chompstation13.net/index.php/Standard_Operating_Procedure", - prob(25); "[info] Think a player is acting especially antagonistic? It might be better to Ahelp (with F1) rather than try to deal with it icly, staff can make sure it's all okay.", - prob(20); "[info] See a minor infraction as Security with a minimal time punishment? Consider using your ticket printer to give a non obtrusive punishment." - ) - - if("lore") - var/info = "The following is a tip for understanding the lore of CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" - return pick( - prob(25); "[info] Our lore is somewhat in line with other servers. The year is 2568 (current year+544).", - prob(75); "[info] You can find a short summary of our setting that everyone should know at https://wiki.chompstation13.net/index.php/Lore", - prob(50); "[info] You are currently working in the Vir system on the NLS Southern Cross telecommunications and traffic control station. https://wiki.chompstation13.net/index.php/Vir", - prob(50); "[info] The majority of employees live at the Northern Star asteroid colony orbiting a gas giant called Kara. It is also a central hub for visitors, logistics, and mining. This is the place the shuttle takes you at the end of the round. You may visit the mines via the exploration shuttles. https://wiki.chompstation13.net/index.php/NCS_Northern_Star", - prob(10); "[info] Thaler is a universal monopoly money. It is backed and supported by Sol Central and its allies. While ubiquitous in frontier worlds, it has an unfavourable exchange rate with most currencies used by well-settled regions, limiting immigration to places such as Earth. https://wiki.chompstation13.net/index.php/Lore" - ) +/* List of player tips +Weighted to emphasize more important over less.area +Weights are not additive. You can have multiple prob(50) items. +prob(50) makes it half as likely to appear and so forth. +When editing the list, please try and keep similar probabilities near each other. High on top, low on bottom */ + +//argument determines if to pick a random tip or use a forced choice. +/datum/player_tips/proc/pick_tip(var/isSpecific) + var/choice = null + if(!(isSpecific == "none" || isSpecific == "general" || isSpecific == "gameplay" || isSpecific == "roleplay" || isSpecific == "lore" )) + choice = "none" //Making sure that wrong arguments still give tips. + if(isSpecific == "none") + choice = pick ( + prob(50); "general", + prob(50); "gameplay", + prob(25); "roleplay", + prob(20); "lore" + ) + else + choice = isSpecific + + switch(choice) + if("general") + var/info = "The following is a general tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" + return pick( + prob(60); "[info] Got a question about gameplay, roleplay or the setting? Press F1 to Mentorhelp!", + prob(60); "[info] We have a wiki that is actively updated! Please check it out at https://wiki.chompstation13.net/index.php/Chomp_Station_Wiki for help!", + prob(60); "[info] Unsure about rules? Press F1 and ask our admins for clarification - they are happy to help.", + prob(30); "[info] Don't be afraid to approach your fellow players for advice! Learning things ICly can help build powerful bonds!", + prob(30); "[info] Need some guidance making a character or with roleplay concepts? Our discord's tutoring channel is happy to help!", + prob(30); "[info] Having difficulties getting started? Pressing F3 to speak and typing '; Hello! I'm a new hire. Could someone please give me a tour?' or as appropriate for your character is a good way to start! More help available at: https://wiki.chompstation13.net/index.php/The_Basics", + prob(30); "[info] Want to try out a new department? Consider joining as an intern when it's well-staffed. Our players enjoy teaching eager students. You can approach such roleplay as simply getting taught the local technologies, procedures - you don't need to be 'fresh out of school' to justify it!", + prob(30); "[info] Our discord is an excellent resource to stay up to date about changes and events! If wanting to separate your kink and real identities, Discord has a built in means to swap accounts within the client. It is OK to lurk!", + prob(5); "[info] Got another tip for the list? Please let us know on Discord in the feedback forums!" + ) + + + if("gameplay") + var/info = "The following is a gameplay-focused tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" + return pick( + prob(50); "[info] To talk to your fellow coworkers, use ';'! You may append it by an exclamation mark, like ';!' to perform an audiable emote. ", + prob(50); "[info] Lost on the map? You can find In-Character help by speaking on the Common Radio. You can do this by pressing F3 and typing ' ; ' before your message. Your fellow co-workers will likely help. If OOC help is preferred, press F1 for mentorhelp. ", + prob(50); "[info] You may set your suit sensors by clicking on the icon in the bottom left corner, then right click the clothes that appear right above it. It is recommended to turn on suit sensors to 'TRACKING' before doing anything dangerous like mining, and to turn them off before digestion scenes as prey.", + prob(35); "[info] It is never a bad idea to visit the medbay if you get injured - small burns and cuts can get infected and become harder to treat! If there is no medical staff, bathrooms and the bar often have a NanoMed on the wall, while a medical station can be found on the first deck - with ointments to disinfect cuts and burns, bandages to treat bruises and encourage healing.", + prob(25); "[info] Two control modes exist for SS13 - hotkey ON and hotkey OFF. You can swap between the two modes by pressing TAB. In hotkey mode, to chat you need to press T to say anything which creates a small talking bubble.", + prob(25); "[info] Do you want to shift your character around, for instance to appear as if leaning on the wall? Press CTRL + SHIFT + arrow keys to do so! Moving resets this.", + prob(25); "[info] Emergency Fire Doors seal breaches and keep active fires out. Please do not open them without good reason. SHIFT + CLICK them to get temperature and atmospheric pressure readings.", + prob(25); "[info] The kitchen's Oven can fit multiple ingredients in one slot if you pull the baking tray out first. This is required for most recipes, and the Grille and Deep Frier work the same way!", + prob(10); "[info] Not every hostile NPC you encounter while mining or exploring needs to be defeated. Sometimes, it's better to avoid or run away from them.", + prob(1); "[info] Stay robust, my friends.", + prob(35); "[info] You can insert your ID into your PDA. This frees up your belt from having to carry your PDA. Furthermore, by clicking and dragging the PDA to the game screen, you can use it without holding it!", + prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!", + prob(35); "[info] Remember to check your vore panel preferences! There you can find toggles for things other than just vore(tm), such as stepping mechanics and spontaneous transformation.", + prob(25); "[info] If you would like to toggle stepping mechanics, head to the vore panel and click on personal preferences! Disabling stepping mechanics will disable stepping descriptions and will prevent your character from taking damage if a bigger character walks over yours with harm intent. Your character will still be stunned, however." + ) + + if("roleplay") + var/info = "The following is a roleplay-focused tip for playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" + return pick( + prob(50); "[info] Having difficulty finding scenes? The number one tip is to be active! Generally speaking, people are more likely to interact with you if you are moving about and doing things. Don't be afraid to talk to people, you're less likely to be approached if you're sat alone at a table silently. People that are looking for scenes generally like to see how you type and RP before they'll start working towards a scene with you.", + prob(50); "[info] Please avoid a character that knows everything. Having only a small set of jobs you are capable of doing can help flesh out your character! It's OK for things to break and fail if nobody is around to fix it - you do not need to do others' jobs.", + prob(25); "[info] Embrace the limits of your character's skillsets! Seeking out other players to help you with a more challenging task might build friendships, or even lead to a scene!", + prob(25); "[info] Slowing down when meeting another player can help with finding roleplay! Your fellow player might be typing up a greeting or an emote, and if you run off you won't see it!", + prob(25); "[info] It is a good idea to wait a few moments after using mechanics like lick, hug or headpat on another player. They might be typing up a response or wish to reciprocate, and if you run away you might miss out!", + prob(25); "[info] Participating in an away mission and see something acting strange? Try emoting or talking to it before resorting to fighting. It may be a GM event!", + prob(15); "[info] We are a medium roleplay server. This does not neccessarily mean 'serious' roleplay, levity and light-hearted RP is more than welcome! Please do not ignore people just because it is unlikely you will be able to scene.", + prob(10); "[info] Sending faxes to central command, using the 'pray' verb or pressing F1 to ahelp are highly encouraged when exploring the gateway or overmap locations! Letting GMs know something fun is happening allows them to spice things up and make the world feel alive!", + prob(40); "[info] Just because you see something doesn't mean your character has to. A courtesy 'missing' of contraband or scene details can go a long way towards preserving everyone's fun!", + prob(25); "[info] It is always a good idea to communicate on your department's private channel (whose key you can learn by examining your headset) when responding to an emergency! This lets your coworkers know if they might be needed!", + prob(25); "[info] While following the SOP is not mandatory, and you are free to break it (albeit, with potential in-character consequences), departments like security and medical do well to be familiar with them! https://wiki.chompstation13.net/index.php/Standard_Operating_Procedure", + prob(25); "[info] Think a player is acting especially antagonistic? It might be better to Ahelp (with F1) rather than try to deal with it icly, staff can make sure it's all okay.", + prob(20); "[info] See a minor infraction as Security with a minimal time punishment? Consider using your ticket printer to give a non obtrusive punishment." + ) + + if("lore") + var/info = "The following is a tip for understanding the lore of CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of the character setup! \n" + return pick( + prob(25); "[info] Our lore is somewhat in line with other servers. The year is 2568 (current year+544).", + prob(75); "[info] You can find a short summary of our setting that everyone should know at https://wiki.chompstation13.net/index.php/Lore", + prob(50); "[info] You are currently working in the Vir system on the NLS Southern Cross telecommunications and traffic control station. https://wiki.chompstation13.net/index.php/Vir", + prob(50); "[info] The majority of employees live at the Northern Star asteroid colony orbiting a gas giant called Kara. It is also a central hub for visitors, logistics, and mining. This is the place the shuttle takes you at the end of the round. You may visit the mines via the exploration shuttles. https://wiki.chompstation13.net/index.php/NCS_Northern_Star", + prob(10); "[info] Thaler is a universal monopoly money. It is backed and supported by Sol Central and its allies. While ubiquitous in frontier worlds, it has an unfavourable exchange rate with most currencies used by well-settled regions, limiting immigration to places such as Earth. https://wiki.chompstation13.net/index.php/Lore" + ) diff --git a/modular_chomp/code/modules/projectiles/gun.dm b/modular_chomp/code/modules/projectiles/gun.dm index f06ab3f9cb..eef7109553 100644 --- a/modular_chomp/code/modules/projectiles/gun.dm +++ b/modular_chomp/code/modules/projectiles/gun.dm @@ -1,12 +1,12 @@ -// prevent gun activation when stealth swimming. The low alpha hides you from NPC AI, which allows you to cheese mobs. -//Just adding onto this code for funny net gun -/obj/item/weapon/gun/special_check(var/mob/user) - var/mob/living/L = user - if(istype(L)) - if(L.has_modifier_of_type(/datum/modifier/underwater_stealth)) - to_chat(user,"You cannot use guns whilst hiding underwater!") - return 0 - if(L.has_modifier_of_type(/datum/modifier/rednet)) - to_chat(user,"Your gun refuses to fire!") - return 0 - return ..() +// prevent gun activation when stealth swimming. The low alpha hides you from NPC AI, which allows you to cheese mobs. +//Just adding onto this code for funny net gun +/obj/item/weapon/gun/special_check(var/mob/user) + var/mob/living/L = user + if(istype(L)) + if(L.has_modifier_of_type(/datum/modifier/underwater_stealth)) + to_chat(user,"You cannot use guns whilst hiding underwater!") + return 0 + if(L.has_modifier_of_type(/datum/modifier/rednet)) + to_chat(user,"Your gun refuses to fire!") + return 0 + return ..() diff --git a/modular_chomp/code/modules/projectiles/guns/alts.dm b/modular_chomp/code/modules/projectiles/guns/alts.dm index cf92750ab8..651301dbc5 100644 --- a/modular_chomp/code/modules/projectiles/guns/alts.dm +++ b/modular_chomp/code/modules/projectiles/guns/alts.dm @@ -1,2 +1,2 @@ -/obj/item/weapon/gun/energy/zip/craftable +/obj/item/weapon/gun/energy/zip/craftable battery_lock = 1 //makeshift gun has flaws \ No newline at end of file diff --git a/modular_chomp/code/modules/projectiles/guns/energy/laser.dm b/modular_chomp/code/modules/projectiles/guns/energy/laser.dm index 31d56791ec..66e47e7517 100644 --- a/modular_chomp/code/modules/projectiles/guns/energy/laser.dm +++ b/modular_chomp/code/modules/projectiles/guns/energy/laser.dm @@ -1,93 +1,93 @@ -/obj/item/weapon/gun/energy - charge_cost = 80 - -/obj/item/weapon/gun/energy/laser - firemodes = list( - list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 80), - list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 20), - ) - -/obj/item/weapon/gun/energy/lasercannon //This is me trying to make ammo worth while but the cannon...is a cannon. - charge_cost = 300 - -/obj/item/weapon/gun/energy/lasercannon/mounted - charge_cost = 300 - -/obj/item/weapon/gun/energy/xray - charge_cost = 65 - -/obj/item/weapon/gun/energy/sniperrifle - charge_cost = 120 - -/obj/item/weapon/gun/energy/mininglaser - firemodes = list( - list(mode_name="mining", fire_delay=8, projectile_type=/obj/item/projectile/beam/mininglaser, charge_cost = 65), - list(mode_name="deter", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 25), - ) - -/obj/item/weapon/gun/energy/laser/vepr - firemodes = list( - list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 80), - list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 20), - list(mode_name="burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 65), - ) - -/obj/item/weapon/gun/energy/gun - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="egunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="egunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), - ) - -/obj/item/weapon/gun/energy/gun/rifle - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="riflestun", fire_sound='sound/weapons/Taser.ogg', wielded_item_state="riflestun-wielded", charge_cost = 40), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="riflekill", fire_sound='sound/weapons/Laser.ogg', wielded_item_state="riflekill-wielded", charge_cost = 80), - ) - -/obj/item/weapon/gun/energy/gun/burst //Halving since by 3 seems too much - firemodes = list( - list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", charge_cost = 50), - list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), - list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill", charge_cost = 100), - list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), - ) - -/obj/item/weapon/gun/energy/gun/etommy //Halving this one - firemodes = list( - list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 100), - list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), - ) - -/obj/item/weapon/gun/energy/gun/compact - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="PDWstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="PDWkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), - ) - -/obj/item/weapon/gun/energy/gun/eluger - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="ep08stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 40), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/eluger, modifystate="ep08kill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 80), - ) - -/obj/item/weapon/gun/energy/sf2000 - firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="lasgunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="lasgunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), - ) - - -/obj/item/weapon/gun/energy/gun/burst/mg42 //I am unsure what this weapon is, and it seems cheap on paper but just putting it at 80 for unity - firemodes = list( - list(mode_name="single fire", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg', charge_cost = 80), - list(mode_name="burst fire", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), - list(mode_name="5 laser burst", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0,0,0), dispersion=list(0.0, 0.2, 0.5, 0.5, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), - list(mode_name="15 laser burst, ye boi.", burst=15, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), dispersion=list(0.0, 0.2, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), - ) - -/obj/item/weapon/gun/energy/x01 - firemodes = list( - list(mode_name="stun", fire_delay = 8, projectile_type= /obj/item/projectile/beam/stun, modifystate="x01stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), - list(mode_name="laser", fire_delay = 8, projectile_type=/obj/item/projectile/beam, modifystate="x01laser", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), - list(mode_name="gauss", fire_delay=15, projectile_type=/obj/item/projectile/energy/gauss, modifystate="x01gauss", fire_sound='sound/weapons/gauss_shoot.ogg', charge_cost = 120) +/obj/item/weapon/gun/energy + charge_cost = 80 + +/obj/item/weapon/gun/energy/laser + firemodes = list( + list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 80), + list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 20), + ) + +/obj/item/weapon/gun/energy/lasercannon //This is me trying to make ammo worth while but the cannon...is a cannon. + charge_cost = 300 + +/obj/item/weapon/gun/energy/lasercannon/mounted + charge_cost = 300 + +/obj/item/weapon/gun/energy/xray + charge_cost = 65 + +/obj/item/weapon/gun/energy/sniperrifle + charge_cost = 120 + +/obj/item/weapon/gun/energy/mininglaser + firemodes = list( + list(mode_name="mining", fire_delay=8, projectile_type=/obj/item/projectile/beam/mininglaser, charge_cost = 65), + list(mode_name="deter", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 25), + ) + +/obj/item/weapon/gun/energy/laser/vepr + firemodes = list( + list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 80), + list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 20), + list(mode_name="burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 65), + ) + +/obj/item/weapon/gun/energy/gun + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="egunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="egunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), + ) + +/obj/item/weapon/gun/energy/gun/rifle + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="riflestun", fire_sound='sound/weapons/Taser.ogg', wielded_item_state="riflestun-wielded", charge_cost = 40), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="riflekill", fire_sound='sound/weapons/Laser.ogg', wielded_item_state="riflekill-wielded", charge_cost = 80), + ) + +/obj/item/weapon/gun/energy/gun/burst //Halving since by 3 seems too much + firemodes = list( + list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", charge_cost = 50), + list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), + list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill", charge_cost = 100), + list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), + ) + +/obj/item/weapon/gun/energy/gun/etommy //Halving this one + firemodes = list( + list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 100), + list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), + ) + +/obj/item/weapon/gun/energy/gun/compact + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="PDWstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="PDWkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), + ) + +/obj/item/weapon/gun/energy/gun/eluger + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="ep08stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 40), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/eluger, modifystate="ep08kill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 80), + ) + +/obj/item/weapon/gun/energy/sf2000 + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="lasgunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="lasgunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), + ) + + +/obj/item/weapon/gun/energy/gun/burst/mg42 //I am unsure what this weapon is, and it seems cheap on paper but just putting it at 80 for unity + firemodes = list( + list(mode_name="single fire", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg', charge_cost = 80), + list(mode_name="burst fire", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), + list(mode_name="5 laser burst", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0,0,0), dispersion=list(0.0, 0.2, 0.5, 0.5, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), + list(mode_name="15 laser burst, ye boi.", burst=15, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), dispersion=list(0.0, 0.2, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="mg42-e", fire_sound='sound/weapons/Laser.ogg'), + ) + +/obj/item/weapon/gun/energy/x01 + firemodes = list( + list(mode_name="stun", fire_delay = 8, projectile_type= /obj/item/projectile/beam/stun, modifystate="x01stun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 80), + list(mode_name="laser", fire_delay = 8, projectile_type=/obj/item/projectile/beam, modifystate="x01laser", fire_sound='sound/weapons/Laser.ogg', charge_cost = 160), + list(mode_name="gauss", fire_delay=15, projectile_type=/obj/item/projectile/energy/gauss, modifystate="x01gauss", fire_sound='sound/weapons/gauss_shoot.ogg', charge_cost = 120) ) \ No newline at end of file diff --git a/modular_chomp/code/modules/projectiles/guns/energy/special.dm b/modular_chomp/code/modules/projectiles/guns/energy/special.dm index d070723c54..fc4068fa59 100644 --- a/modular_chomp/code/modules/projectiles/guns/energy/special.dm +++ b/modular_chomp/code/modules/projectiles/guns/energy/special.dm @@ -1,56 +1,56 @@ -/obj/item/weapon/gun/energy/medigun/mounted - name = "mounted directed restoration system" - self_recharge = 1 - use_external_power = 1 - -/obj/item/weapon/gun/energy/taser/disabler/slow - name = "plasma snare device" - desc = "A modified disabler adjusted to impulse a target with a restrictive slowdown." - icon_state = "disabler" - projectile_type = /obj/item/projectile/energy/plasmastun/slow - charge_cost = 480 - self_recharge = 1 - recharge_time = 3 - -/obj/item/projectile/energy/plasmastun/slow - name = "plasma pulse" - icon_state = "plasma_stun" - fire_sound = 'sound/weapons/weaponsounds_laserstrong.ogg' - armor_penetration = 10 - range = 9 - damage = 0 - agony = 0 - vacuum_traversal = 1 - hud_state = "plasma_rifle_blast" - -/obj/item/projectile/energy/plasmastun/slow/on_hit(var/atom/target) - if(isliving(target)) - var/mob/living/L = target - L.add_modifier(/datum/modifier/entangled, 10 SECONDS) - - -/obj/item/weapon/gun/energy/rednetgun - name = "experimental capture gun" - desc = "An experimental gun, in efforts to expand net gun technology. Utilizing eletronic interferance and a \ - heat aura it in theory stops the subject from fighting back." - icon_state = "goldstunrevolver" - item_state = null - projectile_type = /obj/item/projectile/energy/rednet - charge_cost = 1440 //so a taser has 15 shots at 480 and I want five but this feels goofy - - -/obj/item/projectile/energy/rednet - name = "expirmental energy net" - icon_state = "toxin" - damage = 0 - check_armour = "energy" - hud_state = "pistol_tranq" - fire_sound = 'sound/weapons/Taser.ogg' - nodamage = 1 - modifier_type_to_apply = /datum/modifier/rednet - modifier_duration = 0.5 MINUTE - speed = 1.5 - -/datum/modifier/rednet - mob_overlay_state = "red_electricity_constant" +/obj/item/weapon/gun/energy/medigun/mounted + name = "mounted directed restoration system" + self_recharge = 1 + use_external_power = 1 + +/obj/item/weapon/gun/energy/taser/disabler/slow + name = "plasma snare device" + desc = "A modified disabler adjusted to impulse a target with a restrictive slowdown." + icon_state = "disabler" + projectile_type = /obj/item/projectile/energy/plasmastun/slow + charge_cost = 480 + self_recharge = 1 + recharge_time = 3 + +/obj/item/projectile/energy/plasmastun/slow + name = "plasma pulse" + icon_state = "plasma_stun" + fire_sound = 'sound/weapons/weaponsounds_laserstrong.ogg' + armor_penetration = 10 + range = 9 + damage = 0 + agony = 0 + vacuum_traversal = 1 + hud_state = "plasma_rifle_blast" + +/obj/item/projectile/energy/plasmastun/slow/on_hit(var/atom/target) + if(isliving(target)) + var/mob/living/L = target + L.add_modifier(/datum/modifier/entangled, 10 SECONDS) + + +/obj/item/weapon/gun/energy/rednetgun + name = "experimental capture gun" + desc = "An experimental gun, in efforts to expand net gun technology. Utilizing eletronic interferance and a \ + heat aura it in theory stops the subject from fighting back." + icon_state = "goldstunrevolver" + item_state = null + projectile_type = /obj/item/projectile/energy/rednet + charge_cost = 1440 //so a taser has 15 shots at 480 and I want five but this feels goofy + + +/obj/item/projectile/energy/rednet + name = "expirmental energy net" + icon_state = "toxin" + damage = 0 + check_armour = "energy" + hud_state = "pistol_tranq" + fire_sound = 'sound/weapons/Taser.ogg' + nodamage = 1 + modifier_type_to_apply = /datum/modifier/rednet + modifier_duration = 0.5 MINUTE + speed = 1.5 + +/datum/modifier/rednet + mob_overlay_state = "red_electricity_constant" slowdown = 1 \ No newline at end of file diff --git a/modular_chomp/code/modules/projectiles/guns/special.dm b/modular_chomp/code/modules/projectiles/guns/special.dm index c6d7fbb372..dcb52ad8c3 100644 --- a/modular_chomp/code/modules/projectiles/guns/special.dm +++ b/modular_chomp/code/modules/projectiles/guns/special.dm @@ -1,13 +1,13 @@ -/obj/item/projectile/mobbola - name = "bola" - icon_state = "bola" - damage = 5 - embed_chance = 0 //Nada. - damage_type = HALLOSS - muzzle_type = null - hud_state = "monkey" - - combustion = FALSE - - modifier_type_to_apply = /datum/modifier/entangled +/obj/item/projectile/mobbola + name = "bola" + icon_state = "bola" + damage = 5 + embed_chance = 0 //Nada. + damage_type = HALLOSS + muzzle_type = null + hud_state = "monkey" + + combustion = FALSE + + modifier_type_to_apply = /datum/modifier/entangled modifier_duration = 0.5 MINUTE \ No newline at end of file diff --git a/modular_chomp/code/modules/projectiles/guns/staffs.dm b/modular_chomp/code/modules/projectiles/guns/staffs.dm index fdbce4ab3a..0a9a2e9957 100644 --- a/modular_chomp/code/modules/projectiles/guns/staffs.dm +++ b/modular_chomp/code/modules/projectiles/guns/staffs.dm @@ -1,41 +1,41 @@ -/obj/item/weapon/gun/magic/firestaff/vrwizard - name = "hardlight staff" - desc = "A magical staff brimming with energy." - icon = 'icons/obj/wizard.dmi' - icon_state = "staffoffire" - item_state = "staff" - fire_sound = 'sound/weapons/emitter.ogg' - w_class = ITEMSIZE_HUGE - checks_antimagic = FALSE - max_charges = 10 - charges = 0 - recharge_rate = 2 - charge_tick = 0 - can_charge = TRUE - - projectile_type = /obj/item/projectile/energy/homing_bolt/wizard - -/obj/item/weapon/gun/magic/firestaff/vrwizard/fire - description_info = "It will burn the target along with reducing their bleeding." - projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/fire - color = "#FF0000" - -/obj/item/weapon/gun/magic/firestaff/vrwizard/lighting - description_info = "It will lightly burn targets and open them up to energy based attacks." - projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/lighting - color = "#C1F20B" - -/obj/item/weapon/gun/magic/firestaff/vrwizard/poison - description_info = "It will heavly poison targets." - projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/poison - color = "#003300" - -/obj/item/weapon/gun/magic/firestaff/vrwizard/frost - description_info = "Will slow down and minorly poison targets." - projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/frost - color = "#00CCFF" - -/obj/item/weapon/gun/magic/firestaff/vrwizard/nuclear - description_info = "A high powered staff that burns through energy quickly but unleashes high energy bolts." - projectile_type = /obj/item/projectile/energy/nuclearblast +/obj/item/weapon/gun/magic/firestaff/vrwizard + name = "hardlight staff" + desc = "A magical staff brimming with energy." + icon = 'icons/obj/wizard.dmi' + icon_state = "staffoffire" + item_state = "staff" + fire_sound = 'sound/weapons/emitter.ogg' + w_class = ITEMSIZE_HUGE + checks_antimagic = FALSE + max_charges = 10 + charges = 0 + recharge_rate = 2 + charge_tick = 0 + can_charge = TRUE + + projectile_type = /obj/item/projectile/energy/homing_bolt/wizard + +/obj/item/weapon/gun/magic/firestaff/vrwizard/fire + description_info = "It will burn the target along with reducing their bleeding." + projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/fire + color = "#FF0000" + +/obj/item/weapon/gun/magic/firestaff/vrwizard/lighting + description_info = "It will lightly burn targets and open them up to energy based attacks." + projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/lighting + color = "#C1F20B" + +/obj/item/weapon/gun/magic/firestaff/vrwizard/poison + description_info = "It will heavly poison targets." + projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/poison + color = "#003300" + +/obj/item/weapon/gun/magic/firestaff/vrwizard/frost + description_info = "Will slow down and minorly poison targets." + projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/frost + color = "#00CCFF" + +/obj/item/weapon/gun/magic/firestaff/vrwizard/nuclear + description_info = "A high powered staff that burns through energy quickly but unleashes high energy bolts." + projectile_type = /obj/item/projectile/energy/nuclearblast color = "#660066" \ No newline at end of file diff --git a/modular_chomp/code/modules/projectiles/mob.dm b/modular_chomp/code/modules/projectiles/mob.dm index 5ffc6057b1..58646e8dd2 100644 --- a/modular_chomp/code/modules/projectiles/mob.dm +++ b/modular_chomp/code/modules/projectiles/mob.dm @@ -1,135 +1,135 @@ -/obj/item/projectile/energy/mob - icon = 'icons/obj/projectiles_impact.dmi' - -/obj/item/projectile/energy/mob/heavylaser - name = "heavy laser" - icon_state = "impact_beam_heavy" - fire_sound = 'sound/weapons/lasercannonfire.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 25 - armor_penetration = 30 - light_range = 3 - light_power = 1 - light_color = "#FF0D00" - -/obj/item/projectile/energy/mob/midlaser - name = "laser" - icon_state = "impact_laser" - fire_sound = 'sound/weapons/Laser.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 20 - armor_penetration = 10 - damage_type = BURN - check_armour = "laser" - -/obj/item/projectile/energy/mob/smalllaser - name = "laser" - icon_state = "impact_laser" - fire_sound = 'sound/weapons/Laser.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 10 - armor_penetration = 0 - damage_type = BURN - check_armour = "laser" - - -/obj/item/projectile/energy/mob/drone - name = "laser" - icon_state = "impact_laser" - fire_sound = 'sound/weapons/Laser.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 10 - damage_type = BURN - check_armour = "laser" - -/obj/item/projectile/energy/inversion - name = "inversion blast" - icon = 'icons/obj/projectiles_impact.dmi' - icon_state = "impact_invert" - damage = 15 - armor_penetration = 60 - damage_type = BURN - check_armour = "laser" - color = "#ffffff" - fire_sound = 'sound/weapons/spiderlunge.ogg' - -/obj/item/projectile/energy/mob/electric_spider - name = "stun beam" - icon_state = "impact_stun" - fire_sound = 'sound/weapons/Taser.ogg' - nodamage = 1 - taser_effect = 1 - damage_type = HALLOSS - light_color = "#FFFFFF" - hitsound = 'sound/weapons/zapbang.ogg' - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - combustion = FALSE - agony = 20 - -/obj/item/projectile/energy/mob/precursor - name = "precursor beam" - icon = 'icons/obj/projectiles_ch.dmi' - icon_state = "impact_prec" - fire_sound = 'sound/weapons/MediumLaser.ogg' - light_color = "#FF0099" - - hud_state = "plasma_rifle" - damage = 25 - armor_penetration = 10 - - -//Eclipse mob stuff - -/obj/item/projectile/energy/blob/moth - damage = 15 - armor_penetration = 15 - my_chems = list("fuel", "mold") - flammability = 0.25 - modifier_type_to_apply = /datum/modifier/fire - modifier_duration = 6 SECONDS - color = "#38b9ff" - speed = 3.2 - -/obj/item/projectile/bullet/pistol/medium/ap/eclipse - ricochets = 1 - ricochets_max = 8 - ricochet_chance = 100 - speed = 3.2 - -/obj/item/projectile/energy/electrode/eclipse - damage = 20 - damage_type = BURN - color = "#38b9ff" - speed = 3.2 - -/obj/item/projectile/arc/fragmentation/moth - name = "solar mortar" - icon_state = "fireball" - fragment_types = list( - /obj/item/projectile/energy/blob/moth, /obj/item/projectile/energy/blob/moth, \ - /obj/item/projectile/energy/blob/moth, /obj/item/projectile/energy/blob/moth - ) - fragment_amount = 3 // Same as a grenade. - spread_range = 7 - -/obj/item/projectile/energy/mob/heavysniper - armor_penetration = 40 - damage = 40 - speed = 1.2 - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - name = "sniper beam" - icon_state = "impact_xray" - -/obj/item/projectile/energy/declone/burn - damage = 15 - nodamage = 0 - speed = 3.2 - irradiate = 30 - -/obj/item/projectile/energy/mob/ionbeam - name = "Ion Burst" - damage = 10 - damage_type = ELECTROMAG - light_color = "#00CCFF" - icon_state = "impact_blue" +/obj/item/projectile/energy/mob + icon = 'icons/obj/projectiles_impact.dmi' + +/obj/item/projectile/energy/mob/heavylaser + name = "heavy laser" + icon_state = "impact_beam_heavy" + fire_sound = 'sound/weapons/lasercannonfire.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + damage = 25 + armor_penetration = 30 + light_range = 3 + light_power = 1 + light_color = "#FF0D00" + +/obj/item/projectile/energy/mob/midlaser + name = "laser" + icon_state = "impact_laser" + fire_sound = 'sound/weapons/Laser.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + damage = 20 + armor_penetration = 10 + damage_type = BURN + check_armour = "laser" + +/obj/item/projectile/energy/mob/smalllaser + name = "laser" + icon_state = "impact_laser" + fire_sound = 'sound/weapons/Laser.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + damage = 10 + armor_penetration = 0 + damage_type = BURN + check_armour = "laser" + + +/obj/item/projectile/energy/mob/drone + name = "laser" + icon_state = "impact_laser" + fire_sound = 'sound/weapons/Laser.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + damage = 10 + damage_type = BURN + check_armour = "laser" + +/obj/item/projectile/energy/inversion + name = "inversion blast" + icon = 'icons/obj/projectiles_impact.dmi' + icon_state = "impact_invert" + damage = 15 + armor_penetration = 60 + damage_type = BURN + check_armour = "laser" + color = "#ffffff" + fire_sound = 'sound/weapons/spiderlunge.ogg' + +/obj/item/projectile/energy/mob/electric_spider + name = "stun beam" + icon_state = "impact_stun" + fire_sound = 'sound/weapons/Taser.ogg' + nodamage = 1 + taser_effect = 1 + damage_type = HALLOSS + light_color = "#FFFFFF" + hitsound = 'sound/weapons/zapbang.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + combustion = FALSE + agony = 20 + +/obj/item/projectile/energy/mob/precursor + name = "precursor beam" + icon = 'icons/obj/projectiles_ch.dmi' + icon_state = "impact_prec" + fire_sound = 'sound/weapons/MediumLaser.ogg' + light_color = "#FF0099" + + hud_state = "plasma_rifle" + damage = 25 + armor_penetration = 10 + + +//Eclipse mob stuff + +/obj/item/projectile/energy/blob/moth + damage = 15 + armor_penetration = 15 + my_chems = list("fuel", "mold") + flammability = 0.25 + modifier_type_to_apply = /datum/modifier/fire + modifier_duration = 6 SECONDS + color = "#38b9ff" + speed = 3.2 + +/obj/item/projectile/bullet/pistol/medium/ap/eclipse + ricochets = 1 + ricochets_max = 8 + ricochet_chance = 100 + speed = 3.2 + +/obj/item/projectile/energy/electrode/eclipse + damage = 20 + damage_type = BURN + color = "#38b9ff" + speed = 3.2 + +/obj/item/projectile/arc/fragmentation/moth + name = "solar mortar" + icon_state = "fireball" + fragment_types = list( + /obj/item/projectile/energy/blob/moth, /obj/item/projectile/energy/blob/moth, \ + /obj/item/projectile/energy/blob/moth, /obj/item/projectile/energy/blob/moth + ) + fragment_amount = 3 // Same as a grenade. + spread_range = 7 + +/obj/item/projectile/energy/mob/heavysniper + armor_penetration = 40 + damage = 40 + speed = 1.2 + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + name = "sniper beam" + icon_state = "impact_xray" + +/obj/item/projectile/energy/declone/burn + damage = 15 + nodamage = 0 + speed = 3.2 + irradiate = 30 + +/obj/item/projectile/energy/mob/ionbeam + name = "Ion Burst" + damage = 10 + damage_type = ELECTROMAG + light_color = "#00CCFF" + icon_state = "impact_blue" fire_sound = 'sound/weapons/Laser.ogg' \ No newline at end of file diff --git a/modular_chomp/code/modules/reagents/reactions/distilling/distilling.dm b/modular_chomp/code/modules/reagents/reactions/distilling/distilling.dm index 493fac3356..c4ece9489d 100644 --- a/modular_chomp/code/modules/reagents/reactions/distilling/distilling.dm +++ b/modular_chomp/code/modules/reagents/reactions/distilling/distilling.dm @@ -1,60 +1,60 @@ -//Grub -//Spider -//Carp -//Meteroid -//Deathclaw - -/decl/chemical_reaction/distilling/energybooster - name = "Distilling Energy Booster" - id = "distill_energybooster" - result = "energybooster" - required_reagents = list("hyperzine" = 1, "stimm" = 1, "shockchem" = 1) - result_amount = 2 - - reaction_rate = HALF_LIFE(10) - - temp_range = list(T0C + 180, T0C + 200) - -/decl/chemical_reaction/distilling/oceaniccure - name = "Distilling Oceanic Cure" - id = "distill_oceaniccure" - result = "oceaniccure" - required_reagents = list("curea" = 1, "souldew" = 1, "carpotoxin" = 1) - result_amount = 2 - - reaction_rate = HALF_LIFE(10) - - temp_range = list(T0C + 130, T0C + 150) - -/decl/chemical_reaction/distilling/deathclawmutagen - name = "Distilling Deathclaw Mutagen" - id = "distill_deathclawmutagen" - result = "deathclawmutagen" - required_reagents = list("arithrazine" = 1, "mutagen" = 1, "deathblood" = 1) - result_amount = 2 - - reaction_rate = HALF_LIFE(10) - - temp_range = list(T0C + 100, T0C + 120) - -/decl/chemical_reaction/distilling/senseenhancer - name = "Distilling Sense Enhancer" - id = "distill_senseenhancer" - result = "senseenhancer" - required_reagents = list("quadcord" = 1, "mindbreaker" = 1, "liquidlife" = 1) - result_amount = 2 - - reaction_rate = HALF_LIFE(10) - - temp_range = list(T0C + 50, T0C + 70) - -/decl/chemical_reaction/distilling/heatnullifer - name = "Distilling heatnullifer" - id = "distill_heatnullifer" - result = "heatnullifer" - required_reagents = list("tramadol" = 1, "leporazine" = 1, "spidertoxin" = 1) - result_amount = 2 - - reaction_rate = HALF_LIFE(10) - +//Grub +//Spider +//Carp +//Meteroid +//Deathclaw + +/decl/chemical_reaction/distilling/energybooster + name = "Distilling Energy Booster" + id = "distill_energybooster" + result = "energybooster" + required_reagents = list("hyperzine" = 1, "stimm" = 1, "shockchem" = 1) + result_amount = 2 + + reaction_rate = HALF_LIFE(10) + + temp_range = list(T0C + 180, T0C + 200) + +/decl/chemical_reaction/distilling/oceaniccure + name = "Distilling Oceanic Cure" + id = "distill_oceaniccure" + result = "oceaniccure" + required_reagents = list("curea" = 1, "souldew" = 1, "carpotoxin" = 1) + result_amount = 2 + + reaction_rate = HALF_LIFE(10) + + temp_range = list(T0C + 130, T0C + 150) + +/decl/chemical_reaction/distilling/deathclawmutagen + name = "Distilling Deathclaw Mutagen" + id = "distill_deathclawmutagen" + result = "deathclawmutagen" + required_reagents = list("arithrazine" = 1, "mutagen" = 1, "deathblood" = 1) + result_amount = 2 + + reaction_rate = HALF_LIFE(10) + + temp_range = list(T0C + 100, T0C + 120) + +/decl/chemical_reaction/distilling/senseenhancer + name = "Distilling Sense Enhancer" + id = "distill_senseenhancer" + result = "senseenhancer" + required_reagents = list("quadcord" = 1, "mindbreaker" = 1, "liquidlife" = 1) + result_amount = 2 + + reaction_rate = HALF_LIFE(10) + + temp_range = list(T0C + 50, T0C + 70) + +/decl/chemical_reaction/distilling/heatnullifer + name = "Distilling heatnullifer" + id = "distill_heatnullifer" + result = "heatnullifer" + required_reagents = list("tramadol" = 1, "leporazine" = 1, "spidertoxin" = 1) + result_amount = 2 + + reaction_rate = HALF_LIFE(10) + temp_range = list(T0C + 230, T0C + 250) \ No newline at end of file diff --git a/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm b/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm index 07481ef4c3..f0ba3bb6ab 100644 --- a/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm +++ b/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm @@ -1,399 +1,399 @@ -/decl/chemical_reaction/instant/drinks/minttea - name = "Mint Tea" - id = "minttea" - result = "minttea" - required_reagents = list("tea" = 5, "mint" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/lemontea - name = "Lemon Tea" - id = "lemontea" - result = "lemontea" - required_reagents = list("tea" = 5, "lemonjuice" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/limetea - name = "Lime Tea" - id = "limetea" - result = "limetea" - required_reagents = list("tea" = 5, "limejuice" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/orangetea - name = "Orange Tea" - id = "orangetea" - result = "orangetea" - required_reagents = list("tea" = 5, "orangejuice" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/berrytea - name = "Berry Tea" - id = "berrytea" - result = "berrytea" - required_reagents = list("tea" = 5, "berryjuice" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/cherrytea - name = "Cherry Tea" - id = "cherrytea" - result = "cherrytea" - required_reagents = list("tea" = 5, "cherryjelly" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/watermelontea - name = "Watermelon Tea" - id = "watermelontea" - result = "watermelontea" - required_reagents = list("tea" = 5, "watermelonjuice" = 1) - result_amount = 6 - -/decl/chemical_reaction/instant/tea/matcha_latte - id = "matcha_latte" - result = "matcha_latte" - required_reagents = list ("matchapowder" = 1, "milk" = 5) - result_amount = 5 - -/decl/chemical_reaction/instant/freshtea/green - id = "freshteagreen" - result = "freshteagreen" - required_reagents = list ("tealeavesgreen" = 1, "hotwater" = 9) - result_amount = 10 - -/decl/chemical_reaction/instant/instantteapowder/green - id = "instantteapowdergreen" - result = "instantteapowdergreen" - required_reagents = list ("teamush" = 10, "frostoil" = 1) - result_amount = 10 - -/decl/chemical_reaction/instant/instanttea/green - id = "instantteagreen" - result = "instantteagreen" - required_reagents = list ("instantteapowdergreen" = 1, "water" = 9) - result_amount = 10 - -/decl/chemical_reaction/instant/matcha - id = "matcha" - result = "matcha" - required_reagents = list ("matchapowder" = 1, "hotwater" = 2) - result_amount = 2 - -/decl/chemical_reaction/instant/drinks/spiderdrink - name = "Brimming glass of spiders" - id = "spiderdrink" - result = "spiderdrink" - required_reagents = list("spidertoxin" = 1, "clonexadone" = 5, "absinthe" = 4) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/bubbleteawatermelon - name = "Watermelon bubble tea" - id = "bubbleteawatermelon" - result = "bubbleteawatermelon" - required_reagents = list("gelatin" = 2, "watermelontea" = 6, "milk" = 2) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/bubbleteastrawberry - name = "Strawberry bubble tea" - id = "bubbleteastrawberry" - result = "bubbleteastrawberry" - required_reagents = list("gelatin" = 2, "berrytea" = 6, "milk" = 2) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/bubbleteacherry - name = "Cherry bubble tea" - id = "bubbleteacherry" - result = "bubbleteacherry" - required_reagents = list("gelatin" = 2, "cherrytea" = 6, "milk" = 2) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/bubbleteacoffee - name = "Coffee bubble tea" - id = "bubbleteacoffee" - result = "bubbleteacoffee" - required_reagents = list("gelatin" = 2, "tea" = 5, "cafe_latte" = 3) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/bubbleteabanana - name = "Banana bubble tea" - id = "bubbleteabanana" - result = "bubbleteabanana" - required_reagents = list("gelatin" = 2, "tea" = 5, "banana" = 1, "milk" = 2) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/horchata - name = "Horchata" - id = "horchata" - result = "horchata" - required_reagents = list("milk" = 1, "sugar" = 2, "rice" = 2) - result_amount = 5 - -/decl/chemical_reaction/instant/drinks/bluetrain - name = "Blue train" - id = "bluetrain" - result = "bluetrain" - required_reagents = list("coolant" = 2, "ethanol" = 2, "nutriment" = 1) - result_amount = 5 - -/decl/chemical_reaction/instant/drinks/lowpower - name = "The low power" - id = "lowpower" - result = "lowpower" - required_reagents = list("lemonade" = 1, "cream" = 1, "limejuice" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/jackbrew - name = "Jack's brew" - id = "jackbrew" - result = "jackbrew" - required_reagents = list("irishcoffee" = 1, "hyperzine" = 1) - result_amount = 2 - -/decl/chemical_reaction/instant/drinks/bookwyrm - name = "Bookwyrm's bite" - id = "bookwyrm" - result = "bookwyrm" - required_reagents = list("coldfront" = 1, "limejuice" = 1, "stoxin" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/highpower - name = "The high power" - id = "highpower" - result = "highpower" - required_reagents = list("lowpower" = 1, "iron" = 1, "uranium" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/flapper - name = "Flapper" - id = "flapper" - result = "flapper" - required_reagents = list("whiskey" = 1, "blood" = 1, "ice" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/toxin/oilslide - name = "Oil slide" - id = "oilslide" - result = "oilslide" - required_reagents = list("moonshine" = 1, "lube" = 1, "fuel" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/sitonmyface - name = "Sit on my face" - id = "sitonmyface" - result = "sitonmyface" - required_reagents = list("kahlua" = 1, "irishcream" = 1, "peanutbutter" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/hachi - name = "Hachi" - id = "hachi" - result = "hachi" - required_reagents = list("burbon" = 2, "sake" = 1, "lemonjuice" = 1, "mushroom" = 1) //Whoever coded this never made a mushroom reagent so this can't be created. - result_amount = 5 - -/decl/chemical_reaction/instant/drinks/narsour - name = "Nar'sour" - id = "narsour" - result = "narsour" - required_reagents = list("blood" = 1, "lemonjuice" = 1, "demonsblood" = 1) - mix_message = "The mixture develops a sinister glow." - reaction_sound = 'sound/effects/singlebeat.ogg' - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/cogchamp - name = "CogChamp" - id = "cogchamp" - result = "cogchamp" - required_reagents = list("cognac" = 1, "fuel" = 1, "screwdrivercocktail" = 1) - mix_message = "You hear faint sounds of gears turning as the mixture gives off virulent plumes of steam." - reaction_sound = 'sound/machines/clockcult/steam_whoosh.ogg' - result_amount = 3 - -//thirteen loko possible to make now, so easier to make arachnid slammer - Jack - -/decl/chemical_reaction/instant/drinks/thirteenloko - name = "Thirteen Loko" - id = "thirteenloko" - result = "thirteenloko" - required_reagents = list("beer" = 1, "tequilla" = 1, "coffee" = 1) - result_amount = 3 - -//Arachnid slammer reactions - Jack - -/decl/chemical_reaction/instant/drinks/arachnidslammer - name = "Arachnid Slammer" - id = "arachnidslammer" - result = "arachnidslammer" - required_reagents = list("ale" = 1, "thirteenloko" = 1, "hyperzine" = 1) - mix_message = "The concortion of ale, energy drink and stimulants starts to heavily foam and fizzle, even sparkle a little." - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - result = "enragedarachnidslammer" - required_reagents = list("infusedarachnidslammer" = 1, "spidertoxin" = 1) - mix_message = "The dormant Arachnid Slammer bubbles and fizzles loudly as it gets enraged by the spider toxin and breaks it down!" - result_amount = 5 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer1 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "cyanide" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer2 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "chloralhydrate" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer3 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "stimm" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer4 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "cryotoxin" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer5 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "cryptobiolin" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer6 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "stoxin" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer7 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "condensedcapsaicin_v" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer8 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "phoron" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer9 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "thermite_v" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/enragedarachnidslammer10 - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - required_reagents = list("enragedarachnidslammer" = 1, "serotrotium_v" = 1) - result = "enragedarachnidslammer" - result_amount = 0.1 - -/decl/chemical_reaction/instant/drinks/pilk - name = "Pilk" - id = "pilk" - result = "pilk" - required_reagents = list("milk" = 1, "cola" = 1) - result_amount = 2 - -// Drinks from Horizon - -/decl/chemical_reaction/instant/drinks/alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - result = "alliescocktail" - required_reagents = list("martini" = 1, "vodka" = 1) - result_amount = 2 - -/decl/chemical_reaction/instant/drinks/fetching_fizz - name = "Fetching Fizz" - id = "fetching_fizz" - result = "fetching_fizz" - required_reagents = list("nuka_cola" = 1, "iron" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/hearty_punch - name = "Hearty Punch" - id = "hearty_punch" - result = "hearty_punch" - required_reagents = list("bravebull" = 5, "syndicatebomb" = 5, "absinthe" = 5) - result_amount = 1 - -/decl/chemical_reaction/instant/drinks/squirt_cider - name = "Squirt Cider" - id = "squirt_cider" - result = "squirt_cider" - required_reagents = list("water" = 1, "tomatojuice" = 1, "nutriment" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/fringe_weaver - name = "Fringe Weaver" - id = "fringe_weaver" - result = "fringe_weaver" - required_reagents = list("ethanol" = 9, "sugar" = 1) - result_amount = 10 - -/decl/chemical_reaction/instant/drinks/crevice_spike - name = "Crevice Spike" - id = "crevice_spike" - result = "crevice_spike" - required_reagents = list("limejuice" = 2, "capsaicin" = 4) - result_amount = 6 - -/decl/chemical_reaction/instant/drinks/duplex - name = "Duplex" - id = "duplex" - result = "duplex" - required_reagents = list("cider" = 2, "applejuice" = 1, "berryjuice" = 1) - result_amount = 4 - -/decl/chemical_reaction/instant/drinks/mauna_loa - name = "Mauna Loa" - id = "mauna_loa" - result = "mauna_loa" - required_reagents = list("capsaicin" = 2, "kahlua" = 1, "bahama_mama" = 2) - result_amount = 5 - -/decl/chemical_reaction/instant/drinks/hiveminderaser - name = "Hivemind Eraser" - id = "hiveminderaser" - result = "hiveminderaser" - required_reagents = list("blackrussian" = 2, "thirteenloko" = 1, "grenadine" = 1) - result_amount = 4 - -/decl/chemical_reaction/instant/drinks/erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - result = "erikasurprise" - required_reagents = list("ale" = 2, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) - result_amount = 6 - -//YW drinks -/decl/chemical_reaction/instant/drinks/lovepotion_yw - name = "Strawberry Love Potion" - id = "strawberrylovepotion" - result = "strawberrylovepotion" - required_reagents = list("cream" = 1, "berryjuice" = 1, "sugar" = 1) - result_amount = 3 - -/decl/chemical_reaction/instant/drinks/wormblood - name = "Wormblood" - id = "wormblood" - result = "wormblood" - required_reagents = list("booger" = 1, "psilocybin" = 1) - result_amount = 2 +/decl/chemical_reaction/instant/drinks/minttea + name = "Mint Tea" + id = "minttea" + result = "minttea" + required_reagents = list("tea" = 5, "mint" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/lemontea + name = "Lemon Tea" + id = "lemontea" + result = "lemontea" + required_reagents = list("tea" = 5, "lemonjuice" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/limetea + name = "Lime Tea" + id = "limetea" + result = "limetea" + required_reagents = list("tea" = 5, "limejuice" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/orangetea + name = "Orange Tea" + id = "orangetea" + result = "orangetea" + required_reagents = list("tea" = 5, "orangejuice" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/berrytea + name = "Berry Tea" + id = "berrytea" + result = "berrytea" + required_reagents = list("tea" = 5, "berryjuice" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/cherrytea + name = "Cherry Tea" + id = "cherrytea" + result = "cherrytea" + required_reagents = list("tea" = 5, "cherryjelly" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/watermelontea + name = "Watermelon Tea" + id = "watermelontea" + result = "watermelontea" + required_reagents = list("tea" = 5, "watermelonjuice" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/tea/matcha_latte + id = "matcha_latte" + result = "matcha_latte" + required_reagents = list ("matchapowder" = 1, "milk" = 5) + result_amount = 5 + +/decl/chemical_reaction/instant/freshtea/green + id = "freshteagreen" + result = "freshteagreen" + required_reagents = list ("tealeavesgreen" = 1, "hotwater" = 9) + result_amount = 10 + +/decl/chemical_reaction/instant/instantteapowder/green + id = "instantteapowdergreen" + result = "instantteapowdergreen" + required_reagents = list ("teamush" = 10, "frostoil" = 1) + result_amount = 10 + +/decl/chemical_reaction/instant/instanttea/green + id = "instantteagreen" + result = "instantteagreen" + required_reagents = list ("instantteapowdergreen" = 1, "water" = 9) + result_amount = 10 + +/decl/chemical_reaction/instant/matcha + id = "matcha" + result = "matcha" + required_reagents = list ("matchapowder" = 1, "hotwater" = 2) + result_amount = 2 + +/decl/chemical_reaction/instant/drinks/spiderdrink + name = "Brimming glass of spiders" + id = "spiderdrink" + result = "spiderdrink" + required_reagents = list("spidertoxin" = 1, "clonexadone" = 5, "absinthe" = 4) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/bubbleteawatermelon + name = "Watermelon bubble tea" + id = "bubbleteawatermelon" + result = "bubbleteawatermelon" + required_reagents = list("gelatin" = 2, "watermelontea" = 6, "milk" = 2) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/bubbleteastrawberry + name = "Strawberry bubble tea" + id = "bubbleteastrawberry" + result = "bubbleteastrawberry" + required_reagents = list("gelatin" = 2, "berrytea" = 6, "milk" = 2) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/bubbleteacherry + name = "Cherry bubble tea" + id = "bubbleteacherry" + result = "bubbleteacherry" + required_reagents = list("gelatin" = 2, "cherrytea" = 6, "milk" = 2) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/bubbleteacoffee + name = "Coffee bubble tea" + id = "bubbleteacoffee" + result = "bubbleteacoffee" + required_reagents = list("gelatin" = 2, "tea" = 5, "cafe_latte" = 3) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/bubbleteabanana + name = "Banana bubble tea" + id = "bubbleteabanana" + result = "bubbleteabanana" + required_reagents = list("gelatin" = 2, "tea" = 5, "banana" = 1, "milk" = 2) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/horchata + name = "Horchata" + id = "horchata" + result = "horchata" + required_reagents = list("milk" = 1, "sugar" = 2, "rice" = 2) + result_amount = 5 + +/decl/chemical_reaction/instant/drinks/bluetrain + name = "Blue train" + id = "bluetrain" + result = "bluetrain" + required_reagents = list("coolant" = 2, "ethanol" = 2, "nutriment" = 1) + result_amount = 5 + +/decl/chemical_reaction/instant/drinks/lowpower + name = "The low power" + id = "lowpower" + result = "lowpower" + required_reagents = list("lemonade" = 1, "cream" = 1, "limejuice" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/jackbrew + name = "Jack's brew" + id = "jackbrew" + result = "jackbrew" + required_reagents = list("irishcoffee" = 1, "hyperzine" = 1) + result_amount = 2 + +/decl/chemical_reaction/instant/drinks/bookwyrm + name = "Bookwyrm's bite" + id = "bookwyrm" + result = "bookwyrm" + required_reagents = list("coldfront" = 1, "limejuice" = 1, "stoxin" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/highpower + name = "The high power" + id = "highpower" + result = "highpower" + required_reagents = list("lowpower" = 1, "iron" = 1, "uranium" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/flapper + name = "Flapper" + id = "flapper" + result = "flapper" + required_reagents = list("whiskey" = 1, "blood" = 1, "ice" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/toxin/oilslide + name = "Oil slide" + id = "oilslide" + result = "oilslide" + required_reagents = list("moonshine" = 1, "lube" = 1, "fuel" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/sitonmyface + name = "Sit on my face" + id = "sitonmyface" + result = "sitonmyface" + required_reagents = list("kahlua" = 1, "irishcream" = 1, "peanutbutter" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/hachi + name = "Hachi" + id = "hachi" + result = "hachi" + required_reagents = list("burbon" = 2, "sake" = 1, "lemonjuice" = 1, "mushroom" = 1) //Whoever coded this never made a mushroom reagent so this can't be created. + result_amount = 5 + +/decl/chemical_reaction/instant/drinks/narsour + name = "Nar'sour" + id = "narsour" + result = "narsour" + required_reagents = list("blood" = 1, "lemonjuice" = 1, "demonsblood" = 1) + mix_message = "The mixture develops a sinister glow." + reaction_sound = 'sound/effects/singlebeat.ogg' + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/cogchamp + name = "CogChamp" + id = "cogchamp" + result = "cogchamp" + required_reagents = list("cognac" = 1, "fuel" = 1, "screwdrivercocktail" = 1) + mix_message = "You hear faint sounds of gears turning as the mixture gives off virulent plumes of steam." + reaction_sound = 'sound/machines/clockcult/steam_whoosh.ogg' + result_amount = 3 + +//thirteen loko possible to make now, so easier to make arachnid slammer - Jack + +/decl/chemical_reaction/instant/drinks/thirteenloko + name = "Thirteen Loko" + id = "thirteenloko" + result = "thirteenloko" + required_reagents = list("beer" = 1, "tequilla" = 1, "coffee" = 1) + result_amount = 3 + +//Arachnid slammer reactions - Jack + +/decl/chemical_reaction/instant/drinks/arachnidslammer + name = "Arachnid Slammer" + id = "arachnidslammer" + result = "arachnidslammer" + required_reagents = list("ale" = 1, "thirteenloko" = 1, "hyperzine" = 1) + mix_message = "The concortion of ale, energy drink and stimulants starts to heavily foam and fizzle, even sparkle a little." + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + result = "enragedarachnidslammer" + required_reagents = list("infusedarachnidslammer" = 1, "spidertoxin" = 1) + mix_message = "The dormant Arachnid Slammer bubbles and fizzles loudly as it gets enraged by the spider toxin and breaks it down!" + result_amount = 5 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer1 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "cyanide" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer2 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "chloralhydrate" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer3 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "stimm" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer4 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "cryotoxin" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer5 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "cryptobiolin" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer6 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "stoxin" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer7 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "condensedcapsaicin_v" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer8 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "phoron" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer9 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "thermite_v" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/enragedarachnidslammer10 + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + required_reagents = list("enragedarachnidslammer" = 1, "serotrotium_v" = 1) + result = "enragedarachnidslammer" + result_amount = 0.1 + +/decl/chemical_reaction/instant/drinks/pilk + name = "Pilk" + id = "pilk" + result = "pilk" + required_reagents = list("milk" = 1, "cola" = 1) + result_amount = 2 + +// Drinks from Horizon + +/decl/chemical_reaction/instant/drinks/alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + result = "alliescocktail" + required_reagents = list("martini" = 1, "vodka" = 1) + result_amount = 2 + +/decl/chemical_reaction/instant/drinks/fetching_fizz + name = "Fetching Fizz" + id = "fetching_fizz" + result = "fetching_fizz" + required_reagents = list("nuka_cola" = 1, "iron" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/hearty_punch + name = "Hearty Punch" + id = "hearty_punch" + result = "hearty_punch" + required_reagents = list("bravebull" = 5, "syndicatebomb" = 5, "absinthe" = 5) + result_amount = 1 + +/decl/chemical_reaction/instant/drinks/squirt_cider + name = "Squirt Cider" + id = "squirt_cider" + result = "squirt_cider" + required_reagents = list("water" = 1, "tomatojuice" = 1, "nutriment" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/fringe_weaver + name = "Fringe Weaver" + id = "fringe_weaver" + result = "fringe_weaver" + required_reagents = list("ethanol" = 9, "sugar" = 1) + result_amount = 10 + +/decl/chemical_reaction/instant/drinks/crevice_spike + name = "Crevice Spike" + id = "crevice_spike" + result = "crevice_spike" + required_reagents = list("limejuice" = 2, "capsaicin" = 4) + result_amount = 6 + +/decl/chemical_reaction/instant/drinks/duplex + name = "Duplex" + id = "duplex" + result = "duplex" + required_reagents = list("cider" = 2, "applejuice" = 1, "berryjuice" = 1) + result_amount = 4 + +/decl/chemical_reaction/instant/drinks/mauna_loa + name = "Mauna Loa" + id = "mauna_loa" + result = "mauna_loa" + required_reagents = list("capsaicin" = 2, "kahlua" = 1, "bahama_mama" = 2) + result_amount = 5 + +/decl/chemical_reaction/instant/drinks/hiveminderaser + name = "Hivemind Eraser" + id = "hiveminderaser" + result = "hiveminderaser" + required_reagents = list("blackrussian" = 2, "thirteenloko" = 1, "grenadine" = 1) + result_amount = 4 + +/decl/chemical_reaction/instant/drinks/erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + result = "erikasurprise" + required_reagents = list("ale" = 2, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) + result_amount = 6 + +//YW drinks +/decl/chemical_reaction/instant/drinks/lovepotion_yw + name = "Strawberry Love Potion" + id = "strawberrylovepotion" + result = "strawberrylovepotion" + required_reagents = list("cream" = 1, "berryjuice" = 1, "sugar" = 1) + result_amount = 3 + +/decl/chemical_reaction/instant/drinks/wormblood + name = "Wormblood" + id = "wormblood" + result = "wormblood" + required_reagents = list("booger" = 1, "psilocybin" = 1) + result_amount = 2 diff --git a/modular_chomp/code/modules/reagents/reagents/food_drinks.dm b/modular_chomp/code/modules/reagents/reagents/food_drinks.dm index 9e5b142c42..da28171dac 100644 --- a/modular_chomp/code/modules/reagents/reagents/food_drinks.dm +++ b/modular_chomp/code/modules/reagents/reagents/food_drinks.dm @@ -1,736 +1,736 @@ -//////////////////////////////////////////////// -/////////DRINKS//////////////////////////////// -////////////////////////////////////////////// - -/datum/reagent/drink/tea/cherrytea - name = "Cherry Tea" - id = "cherrytea" - description = "A tasty mixture of cherries and tea. It's apparently good for you!" - color = "#c15962" - taste_description = "black tea with lots of cherries" - - glass_name = "cherry tea" - glass_desc = "A tasty mixture of cherries and tea. It's apparently good for you!" - - cup_name = "cup of cherry tea" - cup_desc = "A tasty mixture of cherries and tea. It's apparently good for you!" - -/datum/reagent/drink/tea/watermelontea - name = "Watermelon Tea" - id = "watermelontea" - description = "A tasty mixture of watermelon and tea. It's apparently good for you!" - color = "#9f2c2c" - taste_description = "black tea with sweet watermelon for flavouring" - - glass_name = "watermelon tea" - glass_desc = "A tasty mixture of watermelon and tea. It's apparently good for you!" - - cup_name = "cup of watermelon tea" - cup_desc = "A tasty mixture of watermelon and tea. It's apparently good for you!" - -/datum/reagent/drink/tea/matcha_latte //Putting this as tea to inherit tea variables. Should not have the same toxloss as matcha so it can be placed in a dispenser without breaking balance. - name = "Matcha latte" - id = "matcha_latte" - description = "A nice and tasty beverage to enjoy while studying." - taste_description = "creamy, vegetal sweetness" - color = "#b1c48c" - adj_temp = 5 - - glass_name = "matcha latte" - glass_desc = "A nice and refreshing beverage while you are studying." - - cup_icon_state = "cup_latte" - cup_name = "cup of matcha latte" - cup_desc = "A nice and refreshing beverage while you are studying." - -/datum/reagent/drink/tea/dyloteane - name = "The Anti-Irish" - id = "dyloteane" - glass_name = "Medicinal tea cup" - glass_desc = "Goes perfectly with alcohol poisoning!" - taste_description = "The sweet taste of multidepartment cooperation!" - cup_desc = "Goes perfectly with alcohol poisoning!" - cup_name = "Medicinal tea cup" - color = "#00FF00" - -/datum/reagent/drink/tea/dyloteane/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(M.ingested) - for(var/datum/reagent/R in M.ingested.reagent_list) - if(istype(R, /datum/reagent/ethanol)) - R.remove_self(removed * 3) - if(M.bloodstr) - for(var/datum/reagent/R in M.bloodstr.reagent_list) - if(istype(R, /datum/reagent/ethanol)) - R.remove_self(removed * 10) - -/datum/reagent/drink/tea/dyloteane/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - var/chem_effective = 1 - if(alien != IS_DIONA) - M.drowsyness = max(0, M.drowsyness - 6 * removed * chem_effective) - M.hallucination = max(0, M.hallucination - 9 * removed * chem_effective) - M.adjustToxLoss(-1 * removed * chem_effective) - -/datum/reagent/slimedrink - name = "Slime" - id = "slimedrink" - description = "A gooey semi-liquid produced from your fellow slimey crew members." - taste_description = "jiggly" - taste_mult = 1.3 - reagent_state = LIQUID - color = "#8bdce5" - - glass_name = "Slime" - glass_desc = "Slime thats safe to drink (relatively)" - -/datum/reagent/drink/soda - ingest_met = REM * 5 //Makes it so soda metabolizes faster, since without this increase, the nutrients it currently gives does nothing. Also, metabolises faster then normal nutrients due to being soda. - -/datum/reagent/ethanol/spiderdrink - name = "Brimming glass of spiders" - id = "spiderdrink" - description = "A fresh drink consisting of cloned spiderlings who are intoxicated by a healthy dose of absinthe." - taste_description = "TOO MANY LEGS" - color = "#526062" // rgb(82, 96, 98) - strength = 15 - - glass_name = "Brimming glass of spiders" - glass_desc = "A glass filled to the brim with tiny drunk spiderlings. Lets hope they dont escape." - -/datum/reagent/ethanol/snaps - name = "Akvavit" - id = "snaps" - description = "Burns the nose and throat and soothes it with a herby aftertaste...Barely." - taste_description = "strong spirit and a little dill" - color = "e6d670" // rgb: 230, 214, 112 - strength = 15 - - glass_name = "akvavit" - glass_desc = "Burns the nose and throat, and soothes it with a herby aftertaste...Barely." - -/datum/reagent/ethanol/bluetrain - name = "blue train" - id = "bluetrain" - description = "A drink only a fool or a very desperate creature would consume." - taste_description = "someone who decided to pour ice cold motor oil down your throat and finish it off with a large shot of burning pure alcohol." - color = "#c8a5dc" - adj_temp = -10 - targ_temp = 220 - strength = 10 - - glass_name = "blue train" - glass_desc = "A glass of what can only be described as the bastard child between coolant and alcohol made by a madman." - -/datum/reagent/drink/lowpower - name = "The low power" - id = "lowpower" - description = "Smells, and tastes like lemon.. with a hint of Ozone, for whatever reason. It glows softly." - taste_description = "creamy lemonade, with some zest" - color = "#5d8d39" - - glass_name = "lowpower" - glass_desc = "Smells, and tastes like lemon.. with a hint of Ozone, for whatever reason. It glows softly." - -/datum/reagent/drink/lowpower/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustToxLoss(-0.5 * removed) - -/datum/reagent/drink/highpower - name = "The High power" - id = "highpower" - description = "A strange, softly crackling drink, smelling just like lightning's just struck, twice. It's rather difficult to make this without busting the lights." - taste_description = "copper, ozone, and pain" - color = "#a2f563" - - glass_name = "highpower" - glass_desc = "A strange, softly crackling drink, smelling just like lightning's just struck, twice. It's rather difficult to make this without busting the lights." - -/datum/reagent/drink/highpower/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(prob(5)) - M.say("!skin's crackles with energy and seems to be in pain.") - M.custom_pain("You feel painful electricity running through your body, like adrenaline, and like your blood's boiling!",30) - M.AdjustWeakened(3) //Getting sapped makes the victim fall - M.Stun(3) - M.add_chemical_effect(CE_SPEEDBOOST, 1) - -/datum/reagent/ethanol/coffee/jackbrew - name = "Rush hour" - id = "jackbrew" - description = "Irish coffee, and hyperzine. A common mix for panicked drinkers, EMTS, Paramedics, and CMOs alone on the job." - taste_description = "wishing you could give up on the day" - color = "#4C3100" - strength = 15 - - glass_name = "Rush hour" - glass_desc = "Irish coffee, and hyperzine. A common mix for panicked drinkers, EMTS, Paramedics, and CMOs alone on the job." - -/datum/reagent/ethanol/coffee/jackbrew/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_TAJARA) - removed *= 1.25 - if(alien == IS_SLIME) - M.make_jittery(4) //Hyperactive fluid pumping results in unstable 'skeleton', resulting in vibration. - if(dose >= 5) - M.nutrition = (M.nutrition - (removed * 2)) //Sadly this movement starts burning food in higher doses. - ..() - if(prob(5)) - M.emote(pick("twitch", "blink_r", "shiver", "weh", "weh", "weh")) // weh - Jack - M.add_chemical_effect(CE_SPEEDBOOST, 1) - -/datum/reagent/ethanol/bookwyrm - name = "Bookwyrm's bite" - id = "bookwyrm" - description = "You'd probably fancy a nice nap by the fireplace after drinking this." - taste_description = "Mint, lime and a cold cozy nap" - color = "#5678c3" - strength = 20 - adj_temp = -10 - targ_temp = 273 //Dilluted cold front wont be the death of anyone who cant handle sipping liquid nitrogen. - - glass_name = "Bookwyrm's bite" - glass_desc = "A cold lime mint drink. Dont drink to much or you might fall asleep." - -/datum/reagent/ethanol/bookwyrm/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/threshold = 1 - if(alien == IS_SKRELL) - threshold = 1.2 - - if(alien == IS_SLIME) - threshold = 6 //Evens to 3 due to the fact they are considered 'small' for flaps. - - var/effective_dose = dose - if(issmall(M)) - effective_dose *= 2 - - if(effective_dose < 1 * threshold) - if(effective_dose == metabolism * 2 || prob(5)) - M.emote("yawn") - else if(effective_dose < 1.5 * threshold) - M.eye_blurry = max(M.eye_blurry, 10) - else if(effective_dose < 5 * threshold) - if(prob(50)) - M.Weaken(2) - M.drowsyness = max(M.drowsyness, 20) - else - if(alien == IS_SLIME) //They don't have eyes, and they don't really 'sleep'. Fumble their general senses. - M.eye_blurry = max(M.eye_blurry, 30) - if(prob(20)) - M.ear_deaf = max(M.ear_deaf, 4) - M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness - M.Confuse(2) - else - M.Weaken(2) - else - M.sleeping = max(M.sleeping, 20) - M.drowsyness = max(M.drowsyness, 60) - -/datum/reagent/ethanol/flapper - name = "Flapper" - id = "flapper" - description = "A common drink among blood-drinkers, and those who just wanna drink. Tinnibat be damned." - taste_description = "a bloody good time" - color = "#763424" - strength = 15 - - glass_name = "flapper" - glass_desc = "A common drink among blood-drinkers, and those who just wanna drink. Tinnibat be damned." - -/datum/reagent/toxin/oilslide - name = "Oil slide" - id = "oilslide" - description = "Tasty, if you're a synth, not so much for organics." - taste_description = "oil, slime, and fuel! Tastes also like synthetic backwash" - color = "#331a1a" - - glass_name = "oilslide" - glass_desc = "Tasty, if you're a synth, not so much for organics." - -/datum/reagent/ethanol/sitonmyface - name = "Sit on my face" - id = "sitonmyface" - description = "A drink made of irish coffee and nuts, mostly known for its vulgar name. Makes for a great pickup line though!" - taste_description = "creamy coffee and alcohol, and nuts" - color = "#896750" - strength = 15 - - glass_name = "Sit on my face" - glass_desc = "A drink made of irish coffee and nuts, mostly known for its vulgar name. Makes for a great pickup line though!" - -/datum/reagent/ethanol/hachi - name = "Hachi" - id = "hachi" - description = "An unusual fusion of bourbon and sake infused with lemon juice, and mushrooms. Sweet, savory, but mostly weird." - taste_description = "sweet lemons, black pepper, and savory mushroom" - color = "#DC971D" - strength = 20 - -/datum/reagent/drink/freshtea - name = "Green tea" - id = "freshtea" //Not meant to be obtainable, this is to define effects for teas made from grown teas. - description = "Tasty green tea, it has antioxidants, it's good for you! Fresh means it's even healthier!" - taste_description = "green tea" - color = "#cac162" - adj_dizzy = -4 - adj_drowsy = -1 - adj_sleepy = -3 - adj_temp = 20 - - glass_name = "green tea" - glass_desc = "Tasty green tea, it has antioxidants, it's good for you!" - - cup_icon_state = "cup_tea" - cup_name = "cup of tea" - cup_desc = "Tasty green tea, it has antioxidants, it's good for you!" - -/datum/reagent/drink/freshtea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustToxLoss(-2 * removed) //Higher toxin removal than other tea to reflect difficulty in preparing, still worse than dylovene. - -/datum/reagent/drink/freshtea/green - name = "Green tea" - id = "freshteagreen" - description = "Floral green tea, it has antioxidants, it's good for you! Fresh means it's even healthier!" - taste_description = "floral with vegetal notes and a slightly bitter aftertaste" - color = "#cac162" - - glass_name = "green tea" - glass_desc = "Floral green tea, it has antioxidants, it's fresh and good for you!" - - cup_icon_state = "cup_tea" - cup_name = "cup of tea" - cup_desc = "Floral green tea, it has antioxidants, it's fresh and good for you!" - -/datum/reagent/drink/tealeavesgreen - name = "Green tea leaves" - id = "tealeavesgreen" - description = "Prepared green tea, just waiting for hot water." - taste_description = "overwhelmingly bitter with faint floral notes" - color = "#56761d" - - glass_name = "tea leaves" - glass_desc = "Dry tea leaves in a cup. Just add hot water!" - -/datum/reagent/drink/teamush - name = "Tea mush" - id = "teamush" - description = "Mashed tea leaves, a bit like grass clippings. You can't make proper tea out of this now." - taste_description = "overwhelmingly bitter plant" - color = "#7db72d" - - glass_name = "blended plant" - glass_desc = "Chunky, mashed up plant of some sort. Looks kinda gross." - -/datum/reagent/drink/instantteapowdergreen - name = "Instant green tea powder" - id = "instantteapowdergreen" - description = "Green tea powder missing all the goodness of green tea." //Heathen. - taste_description = "strong bitterness with a subtle chemical aftertaste" - color = "#56761d" - - glass_name = "tea powder" - glass_desc = "Instant green tea powder. Just add water for imitation green tea!" - -/datum/reagent/drink/instantteagreen - name = "Instant green tea" - id = "instantteagreen" - description = "Convenient green tea missing all the goodness of actual green tea." //It's not even hot. - taste_description = "bitterness with a subtle chemical aftertaste" - color = "#cac162" - - glass_name = "green tea" - glass_desc = "Green tea. It smells a bit off." - - cup_icon_state = "cup_tea" - cup_name = "cup of tea" - cup_desc = "Green tea. It smells a bit off." - -/datum/reagent/drink/matchapowder - name = "Matcha powder" - id = "matchapowder" - description = "Finely ground green tea. This is about the highest quality matcha you can prepare without traditional methods." - taste_description = "heavy bitterness" - color = "#86a443" - - glass_name = "matcha powder" - glass_desc = "Matcha powder, waiting for brewing." - -/datum/reagent/drink/matcha - name = "Matcha" - id = "matcha" - description = "A form of green tea where the leaf is ground and suspended in water rather than steeped. This is considered cooking grade." - taste_description = "floral, full-bodied bitterness with a subtle, earthy sweetness" - color = "#9bc265" - adj_dizzy = -4 - adj_drowsy = -1 - adj_sleepy = -3 - adj_temp = 20 - - glass_name = "matcha" - glass_desc = "Heavenly matcha. Good for body and spirit." - - cup_icon_state = "cup_tea" - cup_name = "cup of matcha" - cup_desc = "Heavenly matcha. Good for body and spirit." - -/datum/reagent/drink/matcha/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustToxLoss(-3 * removed) //Almost on par with dylovene despite being harder to obtain in bulk. Nerf if this causes problems. - -/datum/reagent/drink/juice/gelatin - name = "Gelatin" - id = "gelatin" - description = "It doesnt taste like anything." - taste_description = "nothing" - nutrition = 0 - color = "#aaabcf" - - glass_name = "Gelatin" - glass_desc = "It's like flavourless slime." - -/datum/reagent/drink/bubbleteawatermelon - name = "Watermelon bubble tea" - id = "bubbleteawatermelon" - description = "A tea with milk and watermelon in it and gelatin balls as well." - taste_description = "creamy tea and watermelon" - color = "#b83333" - - glass_name = "watermelon bubble tea" - glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with watermelon." - -/datum/reagent/drink/bubbleteastrawberry - name = "Strawberry bubble tea" - id = "bubbleteastrawberry" - description = "A tea with milk and strawberry in it and gelatin balls as well." - taste_description = "creamy tea and strawberry" - color = "#eb6c77" - - glass_name = "strawberry bubble tea" - glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with strawberry." - -/datum/reagent/drink/bubbleteacherry - name = "Cherry bubble tea" - id = "bubbleteacherry" - description = "A tea with milk and cherry in it and gelatin balls as well." - taste_description = "creamy tea and cherry" - color = "#801e28" - - glass_name = "cherry bubble tea" - glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with cherry." - -/datum/reagent/drink/bubbleteacoffee - name = "Coffee bubble tea" - id = "bubbleteacoffee" - description = "A tea with milk and coffee in it and gelatin balls as well." - taste_description = "creamy tea and coffee" - color = "#482910" - - glass_name = "coffee bubble tea" - glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with coffee." - -/datum/reagent/drink/bubbleteabanana - name = "Banana bubble tea" - id = "bubbleteabanana" - description = "A tea with milk and banana in it and gelatin balls as well." - taste_description = "creamy tea and banana" - color = "#c3af00" - - glass_name = "banana bubble tea" - glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with banana." - -/datum/reagent/drink/horchata - name = "Horchata" - id = "horchata" - description = "A sweet and cold rice milk beverage." - taste_description = "sweet rice milk and cinnamon" - color = "#ebcdc1" - adj_temp = -5 - - glass_name = "horchata" - glass_desc = "A sweet and cold rice milk beverage." - -/datum/reagent/ethanol/snaps - name = "Akvavit" - id = "snaps" - description = "Burns the nose and throat and soothes it with a herby aftertaste...Barely." - taste_description = "strong spirit and a little dill" - color = "e6d670" // rgb: 230, 214, 112 - strength = 15 - - glass_name = "akvavit" - glass_desc = "Burns the nose and throat, and soothes it with a herby aftertaste...Barely." - -/datum/reagent/ethanol/narsour - name = "Nar'Sour" - id = "narsour" - description = "Side effects include self-mutilation and hoarding plasteel." - taste_description = "blood and runes" - color = "#7D1717" - strength = 10 - - glass_icon_state = "narsour" - glass_name = "Nar'Sour" - glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" - -/datum/reagent/ethanol/cogchamp - name = "CogChamp" - id = "cogchamp" - description = "Now you can fill yourself with the power of Ratvar!" - taste_description = "brass taste with a hint of oil" - color = rgb(255, 201, 49) - strength = 10 - - glass_icon_state = "cogchamp" - glass_name = "CogChamp" - glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!" - -//Arachnid slammer states - Jack - -/datum/reagent/ethanol/arachnidslammer - name = "Arachnid Slammer" - id = "arachnidslammer" - description = "An adventurous mix of a cheap, powerful ale with an equally cheap, powerful energy drink and combat drugs. The result should have been undrikable, and yet it sure does put a spring in your step." - taste_description = "hearty barley ale, almost illegal energy drink, combat stimulants, and the urge to go mine and wrestle a spider" - color = "#594219" - strength = 30 - nutriment_factor = 1 - - glass_name = "arachnid slammer" - glass_desc = "A freezing pint of delicious Araching Slammer, it foams constantly with the air crisp around it." - allergen_type = ALLERGEN_GRAINS //Barley is grain - -/datum/reagent/ethanol/arachnidslammer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - .=..() - M.reagents.add_reagent("infusedarachnidslammer", removed * 5) -/datum/reagent/ethanol/arachnidslammer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - .=..() - M.reagents.add_reagent("infusedarachnidslammer", removed * 5) - -/datum/reagent/infusedarachnidslammer - name = "Infused Arachnid Slammer" - id = "infusedarachnidslammer" - description = "When Arachnid Slammer is metabolized you get a concortion of chemicals that breaks down slower. While the alcohol is burned off, the new compounds seems dormant, like they're waiting for some malicious toxin.." - taste_description = "flat watered down Arachnid Slammer and a brewing tempest" - reagent_state = LIQUID - color = "#8040FF" - scannable = 1 - metabolism = REM - ingest_met = REM - - glass_name = "infused arachnid slammer" - glass_desc = "A pint of metabolized Arachnid Slammer. Even if its flat it still somehow foams and sparkles as well as bubbles more actively when spiders are nearby." - -/datum/reagent/infusedarachnidslammer/enragedarachnidslammer - name = "Enraged Arachnid Slammer" - id = "enragedarachnidslammer" - description = "The best term to scientifically describe this concortion is that the compounds of the Arachnid Slammer are going into a raging frenzy from spider toxin. Its now functioning like a form of potent chemical-based white blood cells that aims to break down harmful compounds and repair the body." - taste_description = "cold burning liquid rage and the urge to destroy any spider you see" - - glass_name = "enraged arachnid slammer" - glass_desc = "A pint of Enraged Arachnid Slammer. It bubbles and sparkles fiercly as if it was in a berserking state!" - -/datum/reagent/infusedarachnidslammer/enragedarachnidslammer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/chem_effective = 1 * M.species.chem_strength_heal - - M.adjustOxyLoss(-1.5 * removed * chem_effective) - M.adjustToxLoss(-1.5 * removed * chem_effective) - M.heal_organ_damage(1.5 * removed, 1.5 * removed * chem_effective) - M.add_chemical_effect(CE_PAINKILLER, 80 * chem_effective) - M.add_chemical_effect(CE_SPEEDBOOST, 0) - -/datum/reagent/drink/pilk - name = "Pilk" - id = "pilk" - description = "A forbidden mixture that dates back to the early days of space civilization, its creation is known to have caused at least one or two massacres." - taste_description = "heresy" - color = "#4C3100" - - glass_name = "Pilk" - glass_desc = "Why would you do this to yourself?" - - cup_name = "glass of Pilk" - cup_desc = "A glass of regret." - -//Ported Drinks -/datum/reagent/ethanol/alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - description = "A drink made from your allies. Not as sweet as those made from your enemies." - taste_description = "bitter yet free" - color = "#60f8f8" // rgb(96, 248, 248) - strength = 45 - - glass_name = "Allies cocktail" - glass_desc = "A drink made from your allies." - -/datum/reagent/ethanol/fetching_fizz - name = "Fetching Fizz" - id = "fetching_fizz" - description = "Cola/iron/uranium mixture resulting in a highly magnetic slurry. Mild alcohol content." - taste_description = "charged metal" - color = "#FF5B0F" // rgb(255, 91, 15) - strength = 90 - - glass_name = "Fetching Fizz" - glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." - -/datum/reagent/ethanol/fetching_fizz/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - for(var/obj/item/weapon/ore/O in orange(3, M)) - step_towards(O, get_turf(M)) - -/datum/reagent/ethanol/hearty_punch - name = "Hearty Punch" - id = "hearty_punch" - description = "Brave bull/syndicate bomb/absinthe mixture resulting in an energizing beverage. Mild alcohol content." - taste_description = "bravado in the face of disaster" - color = "#8C0000" // rgb(140, 0, 0) - strength = 90 - glass_name = "Hearty Punch" - glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." - -/datum/reagent/ethanol/hearty_punch/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(M.health<=0) - M.adjustBruteLoss(-3 * removed) - M.adjustFireLoss(-3 * removed) - M.adjustCloneLoss(-5 * removed) - M.adjustOxyLoss(-4 * removed) - M.adjustToxLoss(-3 * removed) - -/datum/reagent/ethanol/squirt_cider - name = "Squirt Cider" - id = "squirt_cider" - description = "Fermented squirt extract with a nose of stale bread and ocean water. Whatever a squirt is." - taste_description = "stale bread with a staler aftertaste" - color = "#FF0000" // rgb(255, 0, 0) - strength = 40 - glass_name = "Squirt Cider" - glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." - nutriment_factor = 2 - -/datum/reagent/ethanol/fringe_weaver - name = "Fringe Weaver" - id = "fringe_weaver" - description = "Bubbly, classy, and undoubtedly strong - a Glitch City classic." - taste_description = "ethylic alcohol with a hint of sugar" - color = "#FFEAC4" // rgb(255, 234, 197) - strength = 10 - glass_name = "Fringe Weaver" - glass_desc = "It's a wonder it doesn't spill out of the glass." - -/datum/reagent/ethanol/crevice_spike - name = "Crevice Spike" - id = "crevice_spike" - description = "Sour, bitter, and smashingly sobering." - taste_description = "a bitter SPIKE with a sour aftertaste" - color = "#5BD231" // rgb(91, 210, 49) - strength = 200 - glass_name = "Crevice Spike" - glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably." - -/datum/reagent/ethanol/crevice_spike/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustBruteLoss(50 * removed) - for(var/datum/reagent/R in M.ingested.reagent_list) - if(istype(R, /datum/reagent/ethanol)) - R.remove_self(50 * removed) - -/datum/reagent/ethanol/duplex - name = "Duplex" - id = "duplex" - description = "An inseparable combination of two fruity drinks." - taste_description = "green apples and blue raspberries" - color = "#50e5cf" // rgb(80, 229, 207) - strength = 50 - glass_name = "Duplex" - glass_desc = "To imbibe one component separately from the other is consider a great faux pas." - -/datum/reagent/ethanol/mauna_loa - name = "Mauna Loa" - id = "mauna_loa" - description = "Extremely hot; not for the faint of heart!" - taste_description = "fiery, with an aftertaste of burnt flesh" - color = "#fe8308" // rgb(254, 131, 8) - strength = 50 - glass_name = "Mauna Loa" - glass_desc = "Lava in a drink... mug... volcano... thing." - -/datum/reagent/ethanol/mauna_loa/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(prob(10)) - M.adjust_fire_stacks(5*removed) - M.IgniteMob() - -/datum/reagent/ethanol/hiveminderaser - name = "Hivemind Eraser" - id = "hiveminderaser" - description = "A vessel of pure flavor." - taste_description = "psychic links" - color = "#FF80FC" // rgb(255, 128, 252) - strength = 50 - glass_name = "Hivemind Eraser" - glass_desc = "For when even mindshields can't save you." - -/datum/reagent/ethanol/erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - description = "The surprise is, it's green!" - taste_description = "tartness and bananas" - color = "#2E6671" // rgb(46, 102, 113) - strength = 75 - glass_name = "Erika Surprise" - glass_desc = "The surprise is, it's green!" - -//////////////////////////////////////////////// -/////////FOODSTUFF///////////////////////////// -////////////////////////////////////////////// - -/datum/reagent/cinnamonpowder - name = "ground cinnamon" - id = "cinnamonpowder" - description = "Cinnamon, a spice made from tree bark, ground into a fine powder. Probably not a good idea to eat on its own!" - taste_description= "sweet spice with a hint of wood" - color = "#a96622" - - glass_name = "ground cinnamon" - glass_desc = "A glass of ground cinnamon. Dare you take the challenge?" - -//YW drinks -/datum/reagent/drink/lovepotion_yw - name = "Strawberry Love Potion" - id = "strawberrylovepotion" - description = "Creamy strawberries and sugar, simple and sweet." - taste_description = "strawberries and cream" - color = "#fc8a8a" // rgb(252, 138, 138) - - glass_name = "Love Potion" - glass_desc = "Love me tender, love me sweet." - -/datum/reagent/ethanol/wormblood - name = "Worm Blood" - id = "wormblood" - description = "Who had the grand idea to bottle THE BLOOD OF A WORM." - taste_description = "Wriggly cave fungus" - color = "#827A00" - strength = 30 - druggy = 10 - - glass_name = "Worm blood" - glass_desc = "Who had the grand idea to bottle THE BLOOD OF A WORM." - glass_icon_state = "wormblood" - glass_center_of_mass = list("x"=16, "y"=8) - glass_icon_file = 'icons/obj/drinks_yw.dmi' - -/datum/reagent/blondiemix - name = "Blondie Mix" - id = "blondiemix" - description = "A dry mix for making delicious blondies." - reagent_state = SOLID - color = "#f3b44e" +//////////////////////////////////////////////// +/////////DRINKS//////////////////////////////// +////////////////////////////////////////////// + +/datum/reagent/drink/tea/cherrytea + name = "Cherry Tea" + id = "cherrytea" + description = "A tasty mixture of cherries and tea. It's apparently good for you!" + color = "#c15962" + taste_description = "black tea with lots of cherries" + + glass_name = "cherry tea" + glass_desc = "A tasty mixture of cherries and tea. It's apparently good for you!" + + cup_name = "cup of cherry tea" + cup_desc = "A tasty mixture of cherries and tea. It's apparently good for you!" + +/datum/reagent/drink/tea/watermelontea + name = "Watermelon Tea" + id = "watermelontea" + description = "A tasty mixture of watermelon and tea. It's apparently good for you!" + color = "#9f2c2c" + taste_description = "black tea with sweet watermelon for flavouring" + + glass_name = "watermelon tea" + glass_desc = "A tasty mixture of watermelon and tea. It's apparently good for you!" + + cup_name = "cup of watermelon tea" + cup_desc = "A tasty mixture of watermelon and tea. It's apparently good for you!" + +/datum/reagent/drink/tea/matcha_latte //Putting this as tea to inherit tea variables. Should not have the same toxloss as matcha so it can be placed in a dispenser without breaking balance. + name = "Matcha latte" + id = "matcha_latte" + description = "A nice and tasty beverage to enjoy while studying." + taste_description = "creamy, vegetal sweetness" + color = "#b1c48c" + adj_temp = 5 + + glass_name = "matcha latte" + glass_desc = "A nice and refreshing beverage while you are studying." + + cup_icon_state = "cup_latte" + cup_name = "cup of matcha latte" + cup_desc = "A nice and refreshing beverage while you are studying." + +/datum/reagent/drink/tea/dyloteane + name = "The Anti-Irish" + id = "dyloteane" + glass_name = "Medicinal tea cup" + glass_desc = "Goes perfectly with alcohol poisoning!" + taste_description = "The sweet taste of multidepartment cooperation!" + cup_desc = "Goes perfectly with alcohol poisoning!" + cup_name = "Medicinal tea cup" + color = "#00FF00" + +/datum/reagent/drink/tea/dyloteane/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_DIONA) + return + if(M.ingested) + for(var/datum/reagent/R in M.ingested.reagent_list) + if(istype(R, /datum/reagent/ethanol)) + R.remove_self(removed * 3) + if(M.bloodstr) + for(var/datum/reagent/R in M.bloodstr.reagent_list) + if(istype(R, /datum/reagent/ethanol)) + R.remove_self(removed * 10) + +/datum/reagent/drink/tea/dyloteane/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + var/chem_effective = 1 + if(alien != IS_DIONA) + M.drowsyness = max(0, M.drowsyness - 6 * removed * chem_effective) + M.hallucination = max(0, M.hallucination - 9 * removed * chem_effective) + M.adjustToxLoss(-1 * removed * chem_effective) + +/datum/reagent/slimedrink + name = "Slime" + id = "slimedrink" + description = "A gooey semi-liquid produced from your fellow slimey crew members." + taste_description = "jiggly" + taste_mult = 1.3 + reagent_state = LIQUID + color = "#8bdce5" + + glass_name = "Slime" + glass_desc = "Slime thats safe to drink (relatively)" + +/datum/reagent/drink/soda + ingest_met = REM * 5 //Makes it so soda metabolizes faster, since without this increase, the nutrients it currently gives does nothing. Also, metabolises faster then normal nutrients due to being soda. + +/datum/reagent/ethanol/spiderdrink + name = "Brimming glass of spiders" + id = "spiderdrink" + description = "A fresh drink consisting of cloned spiderlings who are intoxicated by a healthy dose of absinthe." + taste_description = "TOO MANY LEGS" + color = "#526062" // rgb(82, 96, 98) + strength = 15 + + glass_name = "Brimming glass of spiders" + glass_desc = "A glass filled to the brim with tiny drunk spiderlings. Lets hope they dont escape." + +/datum/reagent/ethanol/snaps + name = "Akvavit" + id = "snaps" + description = "Burns the nose and throat and soothes it with a herby aftertaste...Barely." + taste_description = "strong spirit and a little dill" + color = "e6d670" // rgb: 230, 214, 112 + strength = 15 + + glass_name = "akvavit" + glass_desc = "Burns the nose and throat, and soothes it with a herby aftertaste...Barely." + +/datum/reagent/ethanol/bluetrain + name = "blue train" + id = "bluetrain" + description = "A drink only a fool or a very desperate creature would consume." + taste_description = "someone who decided to pour ice cold motor oil down your throat and finish it off with a large shot of burning pure alcohol." + color = "#c8a5dc" + adj_temp = -10 + targ_temp = 220 + strength = 10 + + glass_name = "blue train" + glass_desc = "A glass of what can only be described as the bastard child between coolant and alcohol made by a madman." + +/datum/reagent/drink/lowpower + name = "The low power" + id = "lowpower" + description = "Smells, and tastes like lemon.. with a hint of Ozone, for whatever reason. It glows softly." + taste_description = "creamy lemonade, with some zest" + color = "#5d8d39" + + glass_name = "lowpower" + glass_desc = "Smells, and tastes like lemon.. with a hint of Ozone, for whatever reason. It glows softly." + +/datum/reagent/drink/lowpower/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.adjustToxLoss(-0.5 * removed) + +/datum/reagent/drink/highpower + name = "The High power" + id = "highpower" + description = "A strange, softly crackling drink, smelling just like lightning's just struck, twice. It's rather difficult to make this without busting the lights." + taste_description = "copper, ozone, and pain" + color = "#a2f563" + + glass_name = "highpower" + glass_desc = "A strange, softly crackling drink, smelling just like lightning's just struck, twice. It's rather difficult to make this without busting the lights." + +/datum/reagent/drink/highpower/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_DIONA) + return + if(prob(5)) + M.say("!skin's crackles with energy and seems to be in pain.") + M.custom_pain("You feel painful electricity running through your body, like adrenaline, and like your blood's boiling!",30) + M.AdjustWeakened(3) //Getting sapped makes the victim fall + M.Stun(3) + M.add_chemical_effect(CE_SPEEDBOOST, 1) + +/datum/reagent/ethanol/coffee/jackbrew + name = "Rush hour" + id = "jackbrew" + description = "Irish coffee, and hyperzine. A common mix for panicked drinkers, EMTS, Paramedics, and CMOs alone on the job." + taste_description = "wishing you could give up on the day" + color = "#4C3100" + strength = 15 + + glass_name = "Rush hour" + glass_desc = "Irish coffee, and hyperzine. A common mix for panicked drinkers, EMTS, Paramedics, and CMOs alone on the job." + +/datum/reagent/ethanol/coffee/jackbrew/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_TAJARA) + removed *= 1.25 + if(alien == IS_SLIME) + M.make_jittery(4) //Hyperactive fluid pumping results in unstable 'skeleton', resulting in vibration. + if(dose >= 5) + M.nutrition = (M.nutrition - (removed * 2)) //Sadly this movement starts burning food in higher doses. + ..() + if(prob(5)) + M.emote(pick("twitch", "blink_r", "shiver", "weh", "weh", "weh")) // weh - Jack + M.add_chemical_effect(CE_SPEEDBOOST, 1) + +/datum/reagent/ethanol/bookwyrm + name = "Bookwyrm's bite" + id = "bookwyrm" + description = "You'd probably fancy a nice nap by the fireplace after drinking this." + taste_description = "Mint, lime and a cold cozy nap" + color = "#5678c3" + strength = 20 + adj_temp = -10 + targ_temp = 273 //Dilluted cold front wont be the death of anyone who cant handle sipping liquid nitrogen. + + glass_name = "Bookwyrm's bite" + glass_desc = "A cold lime mint drink. Dont drink to much or you might fall asleep." + +/datum/reagent/ethanol/bookwyrm/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_DIONA) + return + + var/threshold = 1 + if(alien == IS_SKRELL) + threshold = 1.2 + + if(alien == IS_SLIME) + threshold = 6 //Evens to 3 due to the fact they are considered 'small' for flaps. + + var/effective_dose = dose + if(issmall(M)) + effective_dose *= 2 + + if(effective_dose < 1 * threshold) + if(effective_dose == metabolism * 2 || prob(5)) + M.emote("yawn") + else if(effective_dose < 1.5 * threshold) + M.eye_blurry = max(M.eye_blurry, 10) + else if(effective_dose < 5 * threshold) + if(prob(50)) + M.Weaken(2) + M.drowsyness = max(M.drowsyness, 20) + else + if(alien == IS_SLIME) //They don't have eyes, and they don't really 'sleep'. Fumble their general senses. + M.eye_blurry = max(M.eye_blurry, 30) + if(prob(20)) + M.ear_deaf = max(M.ear_deaf, 4) + M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness + M.Confuse(2) + else + M.Weaken(2) + else + M.sleeping = max(M.sleeping, 20) + M.drowsyness = max(M.drowsyness, 60) + +/datum/reagent/ethanol/flapper + name = "Flapper" + id = "flapper" + description = "A common drink among blood-drinkers, and those who just wanna drink. Tinnibat be damned." + taste_description = "a bloody good time" + color = "#763424" + strength = 15 + + glass_name = "flapper" + glass_desc = "A common drink among blood-drinkers, and those who just wanna drink. Tinnibat be damned." + +/datum/reagent/toxin/oilslide + name = "Oil slide" + id = "oilslide" + description = "Tasty, if you're a synth, not so much for organics." + taste_description = "oil, slime, and fuel! Tastes also like synthetic backwash" + color = "#331a1a" + + glass_name = "oilslide" + glass_desc = "Tasty, if you're a synth, not so much for organics." + +/datum/reagent/ethanol/sitonmyface + name = "Sit on my face" + id = "sitonmyface" + description = "A drink made of irish coffee and nuts, mostly known for its vulgar name. Makes for a great pickup line though!" + taste_description = "creamy coffee and alcohol, and nuts" + color = "#896750" + strength = 15 + + glass_name = "Sit on my face" + glass_desc = "A drink made of irish coffee and nuts, mostly known for its vulgar name. Makes for a great pickup line though!" + +/datum/reagent/ethanol/hachi + name = "Hachi" + id = "hachi" + description = "An unusual fusion of bourbon and sake infused with lemon juice, and mushrooms. Sweet, savory, but mostly weird." + taste_description = "sweet lemons, black pepper, and savory mushroom" + color = "#DC971D" + strength = 20 + +/datum/reagent/drink/freshtea + name = "Green tea" + id = "freshtea" //Not meant to be obtainable, this is to define effects for teas made from grown teas. + description = "Tasty green tea, it has antioxidants, it's good for you! Fresh means it's even healthier!" + taste_description = "green tea" + color = "#cac162" + adj_dizzy = -4 + adj_drowsy = -1 + adj_sleepy = -3 + adj_temp = 20 + + glass_name = "green tea" + glass_desc = "Tasty green tea, it has antioxidants, it's good for you!" + + cup_icon_state = "cup_tea" + cup_name = "cup of tea" + cup_desc = "Tasty green tea, it has antioxidants, it's good for you!" + +/datum/reagent/drink/freshtea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.adjustToxLoss(-2 * removed) //Higher toxin removal than other tea to reflect difficulty in preparing, still worse than dylovene. + +/datum/reagent/drink/freshtea/green + name = "Green tea" + id = "freshteagreen" + description = "Floral green tea, it has antioxidants, it's good for you! Fresh means it's even healthier!" + taste_description = "floral with vegetal notes and a slightly bitter aftertaste" + color = "#cac162" + + glass_name = "green tea" + glass_desc = "Floral green tea, it has antioxidants, it's fresh and good for you!" + + cup_icon_state = "cup_tea" + cup_name = "cup of tea" + cup_desc = "Floral green tea, it has antioxidants, it's fresh and good for you!" + +/datum/reagent/drink/tealeavesgreen + name = "Green tea leaves" + id = "tealeavesgreen" + description = "Prepared green tea, just waiting for hot water." + taste_description = "overwhelmingly bitter with faint floral notes" + color = "#56761d" + + glass_name = "tea leaves" + glass_desc = "Dry tea leaves in a cup. Just add hot water!" + +/datum/reagent/drink/teamush + name = "Tea mush" + id = "teamush" + description = "Mashed tea leaves, a bit like grass clippings. You can't make proper tea out of this now." + taste_description = "overwhelmingly bitter plant" + color = "#7db72d" + + glass_name = "blended plant" + glass_desc = "Chunky, mashed up plant of some sort. Looks kinda gross." + +/datum/reagent/drink/instantteapowdergreen + name = "Instant green tea powder" + id = "instantteapowdergreen" + description = "Green tea powder missing all the goodness of green tea." //Heathen. + taste_description = "strong bitterness with a subtle chemical aftertaste" + color = "#56761d" + + glass_name = "tea powder" + glass_desc = "Instant green tea powder. Just add water for imitation green tea!" + +/datum/reagent/drink/instantteagreen + name = "Instant green tea" + id = "instantteagreen" + description = "Convenient green tea missing all the goodness of actual green tea." //It's not even hot. + taste_description = "bitterness with a subtle chemical aftertaste" + color = "#cac162" + + glass_name = "green tea" + glass_desc = "Green tea. It smells a bit off." + + cup_icon_state = "cup_tea" + cup_name = "cup of tea" + cup_desc = "Green tea. It smells a bit off." + +/datum/reagent/drink/matchapowder + name = "Matcha powder" + id = "matchapowder" + description = "Finely ground green tea. This is about the highest quality matcha you can prepare without traditional methods." + taste_description = "heavy bitterness" + color = "#86a443" + + glass_name = "matcha powder" + glass_desc = "Matcha powder, waiting for brewing." + +/datum/reagent/drink/matcha + name = "Matcha" + id = "matcha" + description = "A form of green tea where the leaf is ground and suspended in water rather than steeped. This is considered cooking grade." + taste_description = "floral, full-bodied bitterness with a subtle, earthy sweetness" + color = "#9bc265" + adj_dizzy = -4 + adj_drowsy = -1 + adj_sleepy = -3 + adj_temp = 20 + + glass_name = "matcha" + glass_desc = "Heavenly matcha. Good for body and spirit." + + cup_icon_state = "cup_tea" + cup_name = "cup of matcha" + cup_desc = "Heavenly matcha. Good for body and spirit." + +/datum/reagent/drink/matcha/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.adjustToxLoss(-3 * removed) //Almost on par with dylovene despite being harder to obtain in bulk. Nerf if this causes problems. + +/datum/reagent/drink/juice/gelatin + name = "Gelatin" + id = "gelatin" + description = "It doesnt taste like anything." + taste_description = "nothing" + nutrition = 0 + color = "#aaabcf" + + glass_name = "Gelatin" + glass_desc = "It's like flavourless slime." + +/datum/reagent/drink/bubbleteawatermelon + name = "Watermelon bubble tea" + id = "bubbleteawatermelon" + description = "A tea with milk and watermelon in it and gelatin balls as well." + taste_description = "creamy tea and watermelon" + color = "#b83333" + + glass_name = "watermelon bubble tea" + glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with watermelon." + +/datum/reagent/drink/bubbleteastrawberry + name = "Strawberry bubble tea" + id = "bubbleteastrawberry" + description = "A tea with milk and strawberry in it and gelatin balls as well." + taste_description = "creamy tea and strawberry" + color = "#eb6c77" + + glass_name = "strawberry bubble tea" + glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with strawberry." + +/datum/reagent/drink/bubbleteacherry + name = "Cherry bubble tea" + id = "bubbleteacherry" + description = "A tea with milk and cherry in it and gelatin balls as well." + taste_description = "creamy tea and cherry" + color = "#801e28" + + glass_name = "cherry bubble tea" + glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with cherry." + +/datum/reagent/drink/bubbleteacoffee + name = "Coffee bubble tea" + id = "bubbleteacoffee" + description = "A tea with milk and coffee in it and gelatin balls as well." + taste_description = "creamy tea and coffee" + color = "#482910" + + glass_name = "coffee bubble tea" + glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with coffee." + +/datum/reagent/drink/bubbleteabanana + name = "Banana bubble tea" + id = "bubbleteabanana" + description = "A tea with milk and banana in it and gelatin balls as well." + taste_description = "creamy tea and banana" + color = "#c3af00" + + glass_name = "banana bubble tea" + glass_desc = "A sweet tea with tasty little flavoured gelatin balls in it, this one is with banana." + +/datum/reagent/drink/horchata + name = "Horchata" + id = "horchata" + description = "A sweet and cold rice milk beverage." + taste_description = "sweet rice milk and cinnamon" + color = "#ebcdc1" + adj_temp = -5 + + glass_name = "horchata" + glass_desc = "A sweet and cold rice milk beverage." + +/datum/reagent/ethanol/snaps + name = "Akvavit" + id = "snaps" + description = "Burns the nose and throat and soothes it with a herby aftertaste...Barely." + taste_description = "strong spirit and a little dill" + color = "e6d670" // rgb: 230, 214, 112 + strength = 15 + + glass_name = "akvavit" + glass_desc = "Burns the nose and throat, and soothes it with a herby aftertaste...Barely." + +/datum/reagent/ethanol/narsour + name = "Nar'Sour" + id = "narsour" + description = "Side effects include self-mutilation and hoarding plasteel." + taste_description = "blood and runes" + color = "#7D1717" + strength = 10 + + glass_icon_state = "narsour" + glass_name = "Nar'Sour" + glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" + +/datum/reagent/ethanol/cogchamp + name = "CogChamp" + id = "cogchamp" + description = "Now you can fill yourself with the power of Ratvar!" + taste_description = "brass taste with a hint of oil" + color = rgb(255, 201, 49) + strength = 10 + + glass_icon_state = "cogchamp" + glass_name = "CogChamp" + glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!" + +//Arachnid slammer states - Jack + +/datum/reagent/ethanol/arachnidslammer + name = "Arachnid Slammer" + id = "arachnidslammer" + description = "An adventurous mix of a cheap, powerful ale with an equally cheap, powerful energy drink and combat drugs. The result should have been undrikable, and yet it sure does put a spring in your step." + taste_description = "hearty barley ale, almost illegal energy drink, combat stimulants, and the urge to go mine and wrestle a spider" + color = "#594219" + strength = 30 + nutriment_factor = 1 + + glass_name = "arachnid slammer" + glass_desc = "A freezing pint of delicious Araching Slammer, it foams constantly with the air crisp around it." + allergen_type = ALLERGEN_GRAINS //Barley is grain + +/datum/reagent/ethanol/arachnidslammer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + .=..() + M.reagents.add_reagent("infusedarachnidslammer", removed * 5) +/datum/reagent/ethanol/arachnidslammer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + .=..() + M.reagents.add_reagent("infusedarachnidslammer", removed * 5) + +/datum/reagent/infusedarachnidslammer + name = "Infused Arachnid Slammer" + id = "infusedarachnidslammer" + description = "When Arachnid Slammer is metabolized you get a concortion of chemicals that breaks down slower. While the alcohol is burned off, the new compounds seems dormant, like they're waiting for some malicious toxin.." + taste_description = "flat watered down Arachnid Slammer and a brewing tempest" + reagent_state = LIQUID + color = "#8040FF" + scannable = 1 + metabolism = REM + ingest_met = REM + + glass_name = "infused arachnid slammer" + glass_desc = "A pint of metabolized Arachnid Slammer. Even if its flat it still somehow foams and sparkles as well as bubbles more actively when spiders are nearby." + +/datum/reagent/infusedarachnidslammer/enragedarachnidslammer + name = "Enraged Arachnid Slammer" + id = "enragedarachnidslammer" + description = "The best term to scientifically describe this concortion is that the compounds of the Arachnid Slammer are going into a raging frenzy from spider toxin. Its now functioning like a form of potent chemical-based white blood cells that aims to break down harmful compounds and repair the body." + taste_description = "cold burning liquid rage and the urge to destroy any spider you see" + + glass_name = "enraged arachnid slammer" + glass_desc = "A pint of Enraged Arachnid Slammer. It bubbles and sparkles fiercly as if it was in a berserking state!" + +/datum/reagent/infusedarachnidslammer/enragedarachnidslammer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/chem_effective = 1 * M.species.chem_strength_heal + + M.adjustOxyLoss(-1.5 * removed * chem_effective) + M.adjustToxLoss(-1.5 * removed * chem_effective) + M.heal_organ_damage(1.5 * removed, 1.5 * removed * chem_effective) + M.add_chemical_effect(CE_PAINKILLER, 80 * chem_effective) + M.add_chemical_effect(CE_SPEEDBOOST, 0) + +/datum/reagent/drink/pilk + name = "Pilk" + id = "pilk" + description = "A forbidden mixture that dates back to the early days of space civilization, its creation is known to have caused at least one or two massacres." + taste_description = "heresy" + color = "#4C3100" + + glass_name = "Pilk" + glass_desc = "Why would you do this to yourself?" + + cup_name = "glass of Pilk" + cup_desc = "A glass of regret." + +//Ported Drinks +/datum/reagent/ethanol/alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + description = "A drink made from your allies. Not as sweet as those made from your enemies." + taste_description = "bitter yet free" + color = "#60f8f8" // rgb(96, 248, 248) + strength = 45 + + glass_name = "Allies cocktail" + glass_desc = "A drink made from your allies." + +/datum/reagent/ethanol/fetching_fizz + name = "Fetching Fizz" + id = "fetching_fizz" + description = "Cola/iron/uranium mixture resulting in a highly magnetic slurry. Mild alcohol content." + taste_description = "charged metal" + color = "#FF5B0F" // rgb(255, 91, 15) + strength = 90 + + glass_name = "Fetching Fizz" + glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." + +/datum/reagent/ethanol/fetching_fizz/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + for(var/obj/item/weapon/ore/O in orange(3, M)) + step_towards(O, get_turf(M)) + +/datum/reagent/ethanol/hearty_punch + name = "Hearty Punch" + id = "hearty_punch" + description = "Brave bull/syndicate bomb/absinthe mixture resulting in an energizing beverage. Mild alcohol content." + taste_description = "bravado in the face of disaster" + color = "#8C0000" // rgb(140, 0, 0) + strength = 90 + glass_name = "Hearty Punch" + glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." + +/datum/reagent/ethanol/hearty_punch/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(M.health<=0) + M.adjustBruteLoss(-3 * removed) + M.adjustFireLoss(-3 * removed) + M.adjustCloneLoss(-5 * removed) + M.adjustOxyLoss(-4 * removed) + M.adjustToxLoss(-3 * removed) + +/datum/reagent/ethanol/squirt_cider + name = "Squirt Cider" + id = "squirt_cider" + description = "Fermented squirt extract with a nose of stale bread and ocean water. Whatever a squirt is." + taste_description = "stale bread with a staler aftertaste" + color = "#FF0000" // rgb(255, 0, 0) + strength = 40 + glass_name = "Squirt Cider" + glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." + nutriment_factor = 2 + +/datum/reagent/ethanol/fringe_weaver + name = "Fringe Weaver" + id = "fringe_weaver" + description = "Bubbly, classy, and undoubtedly strong - a Glitch City classic." + taste_description = "ethylic alcohol with a hint of sugar" + color = "#FFEAC4" // rgb(255, 234, 197) + strength = 10 + glass_name = "Fringe Weaver" + glass_desc = "It's a wonder it doesn't spill out of the glass." + +/datum/reagent/ethanol/crevice_spike + name = "Crevice Spike" + id = "crevice_spike" + description = "Sour, bitter, and smashingly sobering." + taste_description = "a bitter SPIKE with a sour aftertaste" + color = "#5BD231" // rgb(91, 210, 49) + strength = 200 + glass_name = "Crevice Spike" + glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably." + +/datum/reagent/ethanol/crevice_spike/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + M.adjustBruteLoss(50 * removed) + for(var/datum/reagent/R in M.ingested.reagent_list) + if(istype(R, /datum/reagent/ethanol)) + R.remove_self(50 * removed) + +/datum/reagent/ethanol/duplex + name = "Duplex" + id = "duplex" + description = "An inseparable combination of two fruity drinks." + taste_description = "green apples and blue raspberries" + color = "#50e5cf" // rgb(80, 229, 207) + strength = 50 + glass_name = "Duplex" + glass_desc = "To imbibe one component separately from the other is consider a great faux pas." + +/datum/reagent/ethanol/mauna_loa + name = "Mauna Loa" + id = "mauna_loa" + description = "Extremely hot; not for the faint of heart!" + taste_description = "fiery, with an aftertaste of burnt flesh" + color = "#fe8308" // rgb(254, 131, 8) + strength = 50 + glass_name = "Mauna Loa" + glass_desc = "Lava in a drink... mug... volcano... thing." + +/datum/reagent/ethanol/mauna_loa/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(prob(10)) + M.adjust_fire_stacks(5*removed) + M.IgniteMob() + +/datum/reagent/ethanol/hiveminderaser + name = "Hivemind Eraser" + id = "hiveminderaser" + description = "A vessel of pure flavor." + taste_description = "psychic links" + color = "#FF80FC" // rgb(255, 128, 252) + strength = 50 + glass_name = "Hivemind Eraser" + glass_desc = "For when even mindshields can't save you." + +/datum/reagent/ethanol/erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + description = "The surprise is, it's green!" + taste_description = "tartness and bananas" + color = "#2E6671" // rgb(46, 102, 113) + strength = 75 + glass_name = "Erika Surprise" + glass_desc = "The surprise is, it's green!" + +//////////////////////////////////////////////// +/////////FOODSTUFF///////////////////////////// +////////////////////////////////////////////// + +/datum/reagent/cinnamonpowder + name = "ground cinnamon" + id = "cinnamonpowder" + description = "Cinnamon, a spice made from tree bark, ground into a fine powder. Probably not a good idea to eat on its own!" + taste_description= "sweet spice with a hint of wood" + color = "#a96622" + + glass_name = "ground cinnamon" + glass_desc = "A glass of ground cinnamon. Dare you take the challenge?" + +//YW drinks +/datum/reagent/drink/lovepotion_yw + name = "Strawberry Love Potion" + id = "strawberrylovepotion" + description = "Creamy strawberries and sugar, simple and sweet." + taste_description = "strawberries and cream" + color = "#fc8a8a" // rgb(252, 138, 138) + + glass_name = "Love Potion" + glass_desc = "Love me tender, love me sweet." + +/datum/reagent/ethanol/wormblood + name = "Worm Blood" + id = "wormblood" + description = "Who had the grand idea to bottle THE BLOOD OF A WORM." + taste_description = "Wriggly cave fungus" + color = "#827A00" + strength = 30 + druggy = 10 + + glass_name = "Worm blood" + glass_desc = "Who had the grand idea to bottle THE BLOOD OF A WORM." + glass_icon_state = "wormblood" + glass_center_of_mass = list("x"=16, "y"=8) + glass_icon_file = 'icons/obj/drinks_yw.dmi' + +/datum/reagent/blondiemix + name = "Blondie Mix" + id = "blondiemix" + description = "A dry mix for making delicious blondies." + reagent_state = SOLID + color = "#f3b44e" diff --git a/modular_chomp/code/modules/reagents/reagents/medicalmods.dm b/modular_chomp/code/modules/reagents/reagents/medicalmods.dm index 5fd64a14e6..bf2042c29f 100644 --- a/modular_chomp/code/modules/reagents/reagents/medicalmods.dm +++ b/modular_chomp/code/modules/reagents/reagents/medicalmods.dm @@ -1,66 +1,66 @@ -/datum/modifier/eletricalsurge //grub - name = "Eletrical Surge" - desc = "You are filled with an overwhelming energy." - - on_created_text = "You feel an overwhelimg energy surge through your body!" - on_expired_text = "The surge subsides." - stacks = MODIFIER_STACK_EXTEND - evasion = 20 - accuracy = -30 - attack_speed_percent = 0.75 - siemens_coefficient = 3 - -/datum/modifier/healingtide //carp - name = "Healing Tide" - desc = "You are filled with an overwhelming energy." - - on_created_text = "Your body begins to focus on recovering!" - on_expired_text = "The healing subsides." - stacks = MODIFIER_STACK_EXTEND - - metabolism_percent = 0.5 - incoming_healing_percent = 1.25 - -/datum/modifier/radiationhide //deathclaw - name = "Radiation Hide" - desc = "Your body defensivly warps." - - on_created_text = "Your body strangly mutates!" - on_expired_text = "Your body returns to normal." - stacks = MODIFIER_STACK_EXTEND - - icon_scale_x_percent = 1.2 - icon_scale_y_percent = 1.2 - incoming_clone_damage_percent = 0 - incoming_healing_percent = 0.5 - max_health_percent = 1.5 - incoming_damage_percent = 0.9 - -/datum/modifier/nervoushigh //meteroid - name = "Nervous High" - desc = "Your senses feel everything." - - client_color = "#808080" //Za worldo - - on_created_text = "The world arounds you slows down!" - on_expired_text = "The world returns to normal." - stacks = MODIFIER_STACK_EXTEND - - slowdown = -3 - attack_speed_percent = 0.25 - bleeding_rate_percent = 3.0 - metabolism_percent = 3.0 - max_health_percent = 0.25 - disable_duration_percent = 0.1 - -/datum/modifier/protectivenumbing //spider - name = "Protective Numbing" - desc = "Your senses feel everything." - - on_created_text = "Your body becomes numb!" - on_expired_text = "Sensation returns to your body." - stacks = MODIFIER_STACK_EXTEND - - heat_protection = 1 - cold_protection = 1 +/datum/modifier/eletricalsurge //grub + name = "Eletrical Surge" + desc = "You are filled with an overwhelming energy." + + on_created_text = "You feel an overwhelimg energy surge through your body!" + on_expired_text = "The surge subsides." + stacks = MODIFIER_STACK_EXTEND + evasion = 20 + accuracy = -30 + attack_speed_percent = 0.75 + siemens_coefficient = 3 + +/datum/modifier/healingtide //carp + name = "Healing Tide" + desc = "You are filled with an overwhelming energy." + + on_created_text = "Your body begins to focus on recovering!" + on_expired_text = "The healing subsides." + stacks = MODIFIER_STACK_EXTEND + + metabolism_percent = 0.5 + incoming_healing_percent = 1.25 + +/datum/modifier/radiationhide //deathclaw + name = "Radiation Hide" + desc = "Your body defensivly warps." + + on_created_text = "Your body strangly mutates!" + on_expired_text = "Your body returns to normal." + stacks = MODIFIER_STACK_EXTEND + + icon_scale_x_percent = 1.2 + icon_scale_y_percent = 1.2 + incoming_clone_damage_percent = 0 + incoming_healing_percent = 0.5 + max_health_percent = 1.5 + incoming_damage_percent = 0.9 + +/datum/modifier/nervoushigh //meteroid + name = "Nervous High" + desc = "Your senses feel everything." + + client_color = "#808080" //Za worldo + + on_created_text = "The world arounds you slows down!" + on_expired_text = "The world returns to normal." + stacks = MODIFIER_STACK_EXTEND + + slowdown = -3 + attack_speed_percent = 0.25 + bleeding_rate_percent = 3.0 + metabolism_percent = 3.0 + max_health_percent = 0.25 + disable_duration_percent = 0.1 + +/datum/modifier/protectivenumbing //spider + name = "Protective Numbing" + desc = "Your senses feel everything." + + on_created_text = "Your body becomes numb!" + on_expired_text = "Sensation returns to your body." + stacks = MODIFIER_STACK_EXTEND + + heat_protection = 1 + cold_protection = 1 attack_speed_percent = 1.25 \ No newline at end of file diff --git a/modular_chomp/code/modules/reagents/reagents/modapply.dm b/modular_chomp/code/modules/reagents/reagents/modapply.dm index 4251325394..d76ecb02f4 100644 --- a/modular_chomp/code/modules/reagents/reagents/modapply.dm +++ b/modular_chomp/code/modules/reagents/reagents/modapply.dm @@ -1,49 +1,49 @@ -/datum/reagent/modapplying/energybooster - name = "Energy Booster" - id = "energybooster" - description = "A strange forumla that increases the energy of a consumer." - taste_description = "high voltage" - color = "#FFFF66" - - modifier_to_add = /datum/modifier/eletricalsurge - modifier_duration = 3 SECONDS - -/datum/reagent/modapplying/oceaniccure - name = "Oceanic Cure" - id = "oceaniccure" - description = "A strange liquid, altering the proprties of other chemicals." - taste_description = "sea breeze" - color = "#C8A5DC" - - modifier_to_add = /datum/modifier/healingtide - modifier_duration = 3 SECONDS - -/datum/reagent/modapplying/deathclawmutagen - name = "Deathclaw Mutagen" - id = "deathclawmutagen" - description = "An incredibly strange liquid that temporally changes a person's physical form." - taste_description = "buzzing radiation" - color = "#00A000" - - modifier_to_add = /datum/modifier/radiationhide - modifier_duration = 3 SECONDS - -/datum/reagent/modapplying/senseenhancer - name = "Sense Enhancer" - id = "senseenhancer" - description = "An incredibly strange liquid that allows consumers to see the world in a new light." - taste_description = "blood" - color = "#808080" - - modifier_to_add = /datum/modifier/nervoushigh - modifier_duration = 3 SECONDS - -/datum/reagent/modapplying/heatnullifer - name = "Heat Nullifer" - id = "heatnullifer" - description = "An incredibly strange liquid that let's consumer's body ignore the effects of tempature." - taste_description = "nothing" - color = "#561EC3" - - modifier_to_add = /datum/modifier/protectivenumbing +/datum/reagent/modapplying/energybooster + name = "Energy Booster" + id = "energybooster" + description = "A strange forumla that increases the energy of a consumer." + taste_description = "high voltage" + color = "#FFFF66" + + modifier_to_add = /datum/modifier/eletricalsurge + modifier_duration = 3 SECONDS + +/datum/reagent/modapplying/oceaniccure + name = "Oceanic Cure" + id = "oceaniccure" + description = "A strange liquid, altering the proprties of other chemicals." + taste_description = "sea breeze" + color = "#C8A5DC" + + modifier_to_add = /datum/modifier/healingtide + modifier_duration = 3 SECONDS + +/datum/reagent/modapplying/deathclawmutagen + name = "Deathclaw Mutagen" + id = "deathclawmutagen" + description = "An incredibly strange liquid that temporally changes a person's physical form." + taste_description = "buzzing radiation" + color = "#00A000" + + modifier_to_add = /datum/modifier/radiationhide + modifier_duration = 3 SECONDS + +/datum/reagent/modapplying/senseenhancer + name = "Sense Enhancer" + id = "senseenhancer" + description = "An incredibly strange liquid that allows consumers to see the world in a new light." + taste_description = "blood" + color = "#808080" + + modifier_to_add = /datum/modifier/nervoushigh + modifier_duration = 3 SECONDS + +/datum/reagent/modapplying/heatnullifer + name = "Heat Nullifer" + id = "heatnullifer" + description = "An incredibly strange liquid that let's consumer's body ignore the effects of tempature." + taste_description = "nothing" + color = "#561EC3" + + modifier_to_add = /datum/modifier/protectivenumbing modifier_duration = 3 SECONDS \ No newline at end of file diff --git a/modular_chomp/code/modules/reagents/reagents/toxin.dm b/modular_chomp/code/modules/reagents/reagents/toxin.dm index 9471ecd39d..8e9ac68022 100644 --- a/modular_chomp/code/modules/reagents/reagents/toxin.dm +++ b/modular_chomp/code/modules/reagents/reagents/toxin.dm @@ -1,36 +1,36 @@ -//Chemist expansion -/datum/reagent/toxin/deathblood - name = "Irradiating Blood" - id = "deathblood" - description = "Blood of deathclaw." - taste_description = "plastic" - reagent_state = LIQUID - color = "#CF3600" - strength = 8 - -/datum/reagent/toxin/liquidfire - name = "Liquid Fire" - id = "liquidfire" - description = "Blood of dragon." - taste_description = "plastic" - reagent_state = LIQUID - color = "#CF3600" - strength = 8 - -/datum/reagent/toxin/neonliquidfire - name = "Neon Liquid Fire" - id = "neoliquidfire" - description = "Blood of dragon." - taste_description = "plastic" - reagent_state = LIQUID - color = "#CF3600" - strength = 8 - -/datum/reagent/toxin/liquidlife - name = "Liquid Life" - id = "liquidlife" - description = "Life Drained from a victim, and processed into a liquid form. ." - taste_description = "plastic" - reagent_state = LIQUID - color = "#CF3600" +//Chemist expansion +/datum/reagent/toxin/deathblood + name = "Irradiating Blood" + id = "deathblood" + description = "Blood of deathclaw." + taste_description = "plastic" + reagent_state = LIQUID + color = "#CF3600" + strength = 8 + +/datum/reagent/toxin/liquidfire + name = "Liquid Fire" + id = "liquidfire" + description = "Blood of dragon." + taste_description = "plastic" + reagent_state = LIQUID + color = "#CF3600" + strength = 8 + +/datum/reagent/toxin/neonliquidfire + name = "Neon Liquid Fire" + id = "neoliquidfire" + description = "Blood of dragon." + taste_description = "plastic" + reagent_state = LIQUID + color = "#CF3600" + strength = 8 + +/datum/reagent/toxin/liquidlife + name = "Liquid Life" + id = "liquidlife" + description = "Life Drained from a victim, and processed into a liquid form. ." + taste_description = "plastic" + reagent_state = LIQUID + color = "#CF3600" strength = 0 \ No newline at end of file diff --git a/modular_chomp/code/modules/weapons/melee.dm b/modular_chomp/code/modules/weapons/melee.dm index 80889cc59b..5cd55083b9 100644 --- a/modular_chomp/code/modules/weapons/melee.dm +++ b/modular_chomp/code/modules/weapons/melee.dm @@ -1,12 +1,12 @@ -/obj/item/weapon/melee/cullingcane - name = "culling cane" - defend_chance = 15 // The base chance for the weapon to parry. - projectile_parry_chance = 15 - sharp = TRUE - edge = TRUE - w_class = ITEMSIZE_LARGE - slot_flags = SLOT_BACK - force = 35 - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - can_cleave = TRUE +/obj/item/weapon/melee/cullingcane + name = "culling cane" + defend_chance = 15 // The base chance for the weapon to parry. + projectile_parry_chance = 15 + sharp = TRUE + edge = TRUE + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + force = 35 + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") + can_cleave = TRUE icon_state = "scythe0" \ No newline at end of file diff --git a/modular_chomp/game/machinery/traptiles.dm b/modular_chomp/game/machinery/traptiles.dm index 98921216b5..2d6c20776e 100644 --- a/modular_chomp/game/machinery/traptiles.dm +++ b/modular_chomp/game/machinery/traptiles.dm @@ -1,33 +1,33 @@ -/obj/machinery/traptile - icon = 'modular_chomp/icons/obj/machines/defense.dmi' - icon_state = "traptile" - anchored = 1 - use_power = USE_POWER_IDLE - idle_power_usage = 200 - -/obj/machinery/traptile/proc/attack_mob(mob/living/L) - var/target_zone - if(L.lying) - target_zone = ran_zone() - else - target_zone = pick("l_foot", "r_foot", "l_leg", "r_leg") - - //armour - var/blocked = L.run_armor_check(target_zone, "melee") - var/soaked = L.get_armor_soak(target_zone, "melee") - - if(blocked >= 100) - return - - if(soaked >= 30) - return - - if(L.buckled) //wheelchairs, office chairs, rollerbeds - return - - if(!L.apply_damage(30, BURN, target_zone, blocked, soaked, used_weapon=src)) - return 0 - - shock(L, 100, target_zone) - +/obj/machinery/traptile + icon = 'modular_chomp/icons/obj/machines/defense.dmi' + icon_state = "traptile" + anchored = 1 + use_power = USE_POWER_IDLE + idle_power_usage = 200 + +/obj/machinery/traptile/proc/attack_mob(mob/living/L) + var/target_zone + if(L.lying) + target_zone = ran_zone() + else + target_zone = pick("l_foot", "r_foot", "l_leg", "r_leg") + + //armour + var/blocked = L.run_armor_check(target_zone, "melee") + var/soaked = L.get_armor_soak(target_zone, "melee") + + if(blocked >= 100) + return + + if(soaked >= 30) + return + + if(L.buckled) //wheelchairs, office chairs, rollerbeds + return + + if(!L.apply_damage(30, BURN, target_zone, blocked, soaked, used_weapon=src)) + return 0 + + shock(L, 100, target_zone) + L.add_modifier(/datum/modifier/entangled, 3 SECONDS) \ No newline at end of file diff --git a/modular_chomp/game/machinery/turrets.dm b/modular_chomp/game/machinery/turrets.dm index 1554ffefb1..1b8a7d8890 100644 --- a/modular_chomp/game/machinery/turrets.dm +++ b/modular_chomp/game/machinery/turrets.dm @@ -1,84 +1,84 @@ -/obj/machinery/porta_turret - health = 40 //the turret's health - maxhealth = 40 //turrets maximal health. - -/obj/machinery/porta_turret/ai_defense - health = 125 // Since lasers do 40 each. - maxhealth = 125 - -/obj/machinery/porta_turret/alien - health = 125 - maxhealth = 125 - -/obj/machinery/porta_turret/industrial - health = 100 - maxhealth = 100 - -/obj/machinery/porta_turret/industrial/teleport_defense - name = "defense turret" - desc = "This variant appears to be much more durable, with a rugged outer coating." - req_one_access = list(access_heads) - installation = /obj/item/weapon/gun/energy/gun/burst - health = 125 - maxhealth = 125 - - -/obj/machinery/porta_turret/obelisk - name = "defense obelisk" - catalogue_data = list(/datum/category_item/catalogue/technology/turret) - anchored = TRUE - - circuit = /obj/item/weapon/circuitboard/defenseonelisk - - catalogue_data = null - - turret_type = "obelisk" - icon_color = "obelisk_blue" - lethal_icon_color = "oblisk_blue" - - icon = 'modular_chomp/icons/obj/machines/defense.dmi' - icon_state = "obelisk" - - density = TRUE - use_power = TRUE //this turret uses and requires power - idle_power_usage = 50000 //when inactive, this turret takes up constant 50 Equipment power - active_power_usage = 150000 //when active, this turret takes up constant 300 Equipment power - power_channel = EQUIP //drains power from the EQUIPMENT channel - req_one_access = list(access_heads) - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - - - health = 300 //the turret's health - maxhealth = 300 //turrets maximal health. - auto_repair = TRUE //if 1 the turret slowly repairs itself. - - installation = /obj/item/weapon/gun/energy/pulse_rifle - reqpower = 50000 - turret_type = "normal" - icon_color = "blue" - lethal_icon_color = "blue" - - shot_delay = 0.5 SECONDS //This will delete foes - - targetting_is_configurable = FALSE - check_arrest = TRUE - check_records = TRUE - check_weapons = FALSE - check_access = FALSE - check_anomalies = TRUE - check_synth = FALSE - check_all = FALSE - ailock = TRUE - - lethal_is_configurable = FALSE // if false, its lethal setting cannot be changed - - timeout = 1 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down. - can_salvage = FALSE - -/obj/item/weapon/circuitboard/defenseonelisk - name = "paradox rift generator circuit" - build_path = /obj/machinery/paradoxrift - board_type = new /datum/frame/frame_types/machine - origin_tech = list(TECH_DATA = 8, TECH_ARCANE = 3) - req_components = list( +/obj/machinery/porta_turret + health = 40 //the turret's health + maxhealth = 40 //turrets maximal health. + +/obj/machinery/porta_turret/ai_defense + health = 125 // Since lasers do 40 each. + maxhealth = 125 + +/obj/machinery/porta_turret/alien + health = 125 + maxhealth = 125 + +/obj/machinery/porta_turret/industrial + health = 100 + maxhealth = 100 + +/obj/machinery/porta_turret/industrial/teleport_defense + name = "defense turret" + desc = "This variant appears to be much more durable, with a rugged outer coating." + req_one_access = list(access_heads) + installation = /obj/item/weapon/gun/energy/gun/burst + health = 125 + maxhealth = 125 + + +/obj/machinery/porta_turret/obelisk + name = "defense obelisk" + catalogue_data = list(/datum/category_item/catalogue/technology/turret) + anchored = TRUE + + circuit = /obj/item/weapon/circuitboard/defenseonelisk + + catalogue_data = null + + turret_type = "obelisk" + icon_color = "obelisk_blue" + lethal_icon_color = "oblisk_blue" + + icon = 'modular_chomp/icons/obj/machines/defense.dmi' + icon_state = "obelisk" + + density = TRUE + use_power = TRUE //this turret uses and requires power + idle_power_usage = 50000 //when inactive, this turret takes up constant 50 Equipment power + active_power_usage = 150000 //when active, this turret takes up constant 300 Equipment power + power_channel = EQUIP //drains power from the EQUIPMENT channel + req_one_access = list(access_heads) + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + + + health = 300 //the turret's health + maxhealth = 300 //turrets maximal health. + auto_repair = TRUE //if 1 the turret slowly repairs itself. + + installation = /obj/item/weapon/gun/energy/pulse_rifle + reqpower = 50000 + turret_type = "normal" + icon_color = "blue" + lethal_icon_color = "blue" + + shot_delay = 0.5 SECONDS //This will delete foes + + targetting_is_configurable = FALSE + check_arrest = TRUE + check_records = TRUE + check_weapons = FALSE + check_access = FALSE + check_anomalies = TRUE + check_synth = FALSE + check_all = FALSE + ailock = TRUE + + lethal_is_configurable = FALSE // if false, its lethal setting cannot be changed + + timeout = 1 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down. + can_salvage = FALSE + +/obj/item/weapon/circuitboard/defenseonelisk + name = "paradox rift generator circuit" + build_path = /obj/machinery/paradoxrift + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_DATA = 8, TECH_ARCANE = 3) + req_components = list( /obj/item/stack/cable_coil = 30) \ No newline at end of file diff --git a/modular_chomp/game/objects/effects/spiders.dm b/modular_chomp/game/objects/effects/spiders.dm index e32c85d5b1..7ed3e96573 100644 --- a/modular_chomp/game/objects/effects/spiders.dm +++ b/modular_chomp/game/objects/effects/spiders.dm @@ -1,36 +1,36 @@ -//Eggs -/obj/effect/spider/eggcluster/broodling - spider_type = /obj/effect/spider/spiderling/broodling - -/obj/effect/spider/eggcluster/royal/broodling - spider_type = /obj/effect/spider/spiderling/varied/broodling - - - -//Spiderling types -/obj/effect/spider/spiderling/broodling - name = "brood spiderling" - grow_as = list(/mob/living/simple_mob/animal/giant_spider/broodling, /mob/living/simple_mob/animal/giant_spider/nurse/broodling, /mob/living/simple_mob/animal/giant_spider/hunter/broodling) - -/obj/effect/spider/spiderling/varied/broodling - grow_as = list(/mob/living/simple_mob/animal/giant_spider/broodling, /mob/living/simple_mob/animal/giant_spider/nurse/broodling, /mob/living/simple_mob/animal/giant_spider/hunter/broodling, - /mob/living/simple_mob/animal/giant_spider/frost/broodling, /mob/living/simple_mob/animal/giant_spider/electric/broodling, /mob/living/simple_mob/animal/giant_spider/lurker/broodling, - /mob/living/simple_mob/animal/giant_spider/pepper/broodling, /mob/living/simple_mob/animal/giant_spider/thermic/broodling, /mob/living/simple_mob/animal/giant_spider/tunneler/broodling, - /mob/living/simple_mob/animal/giant_spider/webslinger/broodling) - -//Space Spiderling -/obj/effect/spider/eggcluster/space - spider_type = /obj/effect/spider/spiderling/space - -/obj/effect/spider/eggcluster/royal/space - spider_type = /obj/effect/spider/spiderling/varied/space - -/obj/effect/spider/spiderling/space - name = "brood spiderling" - grow_as = list(/mob/living/simple_mob/animal/giant_spider/space, /mob/living/simple_mob/animal/giant_spider/nurse/space, /mob/living/simple_mob/animal/giant_spider/hunter/space) - -/obj/effect/spider/spiderling/varied/space - grow_as = list(/mob/living/simple_mob/animal/giant_spider/space, /mob/living/simple_mob/animal/giant_spider/nurse/space, /mob/living/simple_mob/animal/giant_spider/hunter/space, - /mob/living/simple_mob/animal/giant_spider/frost/space, /mob/living/simple_mob/animal/giant_spider/electric/space, /mob/living/simple_mob/animal/giant_spider/lurker/space, - /mob/living/simple_mob/animal/giant_spider/pepper/space, /mob/living/simple_mob/animal/giant_spider/thermic/space, /mob/living/simple_mob/animal/giant_spider/tunneler/space, +//Eggs +/obj/effect/spider/eggcluster/broodling + spider_type = /obj/effect/spider/spiderling/broodling + +/obj/effect/spider/eggcluster/royal/broodling + spider_type = /obj/effect/spider/spiderling/varied/broodling + + + +//Spiderling types +/obj/effect/spider/spiderling/broodling + name = "brood spiderling" + grow_as = list(/mob/living/simple_mob/animal/giant_spider/broodling, /mob/living/simple_mob/animal/giant_spider/nurse/broodling, /mob/living/simple_mob/animal/giant_spider/hunter/broodling) + +/obj/effect/spider/spiderling/varied/broodling + grow_as = list(/mob/living/simple_mob/animal/giant_spider/broodling, /mob/living/simple_mob/animal/giant_spider/nurse/broodling, /mob/living/simple_mob/animal/giant_spider/hunter/broodling, + /mob/living/simple_mob/animal/giant_spider/frost/broodling, /mob/living/simple_mob/animal/giant_spider/electric/broodling, /mob/living/simple_mob/animal/giant_spider/lurker/broodling, + /mob/living/simple_mob/animal/giant_spider/pepper/broodling, /mob/living/simple_mob/animal/giant_spider/thermic/broodling, /mob/living/simple_mob/animal/giant_spider/tunneler/broodling, + /mob/living/simple_mob/animal/giant_spider/webslinger/broodling) + +//Space Spiderling +/obj/effect/spider/eggcluster/space + spider_type = /obj/effect/spider/spiderling/space + +/obj/effect/spider/eggcluster/royal/space + spider_type = /obj/effect/spider/spiderling/varied/space + +/obj/effect/spider/spiderling/space + name = "brood spiderling" + grow_as = list(/mob/living/simple_mob/animal/giant_spider/space, /mob/living/simple_mob/animal/giant_spider/nurse/space, /mob/living/simple_mob/animal/giant_spider/hunter/space) + +/obj/effect/spider/spiderling/varied/space + grow_as = list(/mob/living/simple_mob/animal/giant_spider/space, /mob/living/simple_mob/animal/giant_spider/nurse/space, /mob/living/simple_mob/animal/giant_spider/hunter/space, + /mob/living/simple_mob/animal/giant_spider/frost/space, /mob/living/simple_mob/animal/giant_spider/electric/space, /mob/living/simple_mob/animal/giant_spider/lurker/space, + /mob/living/simple_mob/animal/giant_spider/pepper/space, /mob/living/simple_mob/animal/giant_spider/thermic/space, /mob/living/simple_mob/animal/giant_spider/tunneler/space, /mob/living/simple_mob/animal/giant_spider/webslinger/space) \ No newline at end of file diff --git a/modular_chomp/game/turfs/shuttlewall_types.dm b/modular_chomp/game/turfs/shuttlewall_types.dm index df7e3dfb62..fd9b2f819b 100644 --- a/modular_chomp/game/turfs/shuttlewall_types.dm +++ b/modular_chomp/game/turfs/shuttlewall_types.dm @@ -1,17 +1,17 @@ -/turf/simulated/shuttlewalls/white - icon_state = "quartz" - -/turf/simulated/shuttlewalls/white/Initialize(mapload) - . = ..(mapload, "quartz","quartz") - -/turf/simulated/shuttlewalls/void - icon_state = "void" - -/turf/simulated/shuttlewalls/void/Initialize(mapload) - . = ..(mapload, "void opal","void opal") - -/turf/simulated/shuttlewalls/dark - icon_state = "dark" - -/turf/simulated/shuttlewalls/dark/Initialize(mapload) +/turf/simulated/shuttlewalls/white + icon_state = "quartz" + +/turf/simulated/shuttlewalls/white/Initialize(mapload) + . = ..(mapload, "quartz","quartz") + +/turf/simulated/shuttlewalls/void + icon_state = "void" + +/turf/simulated/shuttlewalls/void/Initialize(mapload) + . = ..(mapload, "void opal","void opal") + +/turf/simulated/shuttlewalls/dark + icon_state = "dark" + +/turf/simulated/shuttlewalls/dark/Initialize(mapload) . = ..(mapload, "painite","painite") \ No newline at end of file diff --git a/modular_chomp/game/turfs/shuttlewalls.dm b/modular_chomp/game/turfs/shuttlewalls.dm index cc3fcd7c9c..9c13acf33f 100644 --- a/modular_chomp/game/turfs/shuttlewalls.dm +++ b/modular_chomp/game/turfs/shuttlewalls.dm @@ -1,311 +1,311 @@ -/turf/simulated/shuttlewalls - name = "wall" - desc = "A huge chunk of metal used to create shuttles." - icon = 'modular_chomp/icons/turf/shuttlewall_masks.dmi' - icon_state = "generic" - opacity = 1 - density = TRUE - blocks_air = 1 - thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall - - var/icon/wall_masks = 'modular_chomp/icons/turf/shuttlewall_masks.dmi' - var/damage = 0 - var/damage_overlay = 0 - var/global/damage_overlays[16] - var/active - var/can_open = 0 - var/datum/material/girder_material - var/datum/material/material - var/datum/material/reinf_material - var/last_state - var/construction_stage - - var/list/wall_connections = list("0", "0", "0", "0") - -/turf/simulated/shuttlewalls/Initialize(mapload, materialtype, rmaterialtype, girdertype) - . = ..() - icon_state = "blank" - if(!materialtype) - materialtype = DEFAULT_WALL_MATERIAL - material = get_material_by_name(materialtype) - if(!girdertype) - girdertype = DEFAULT_WALL_MATERIAL - girder_material = get_material_by_name(girdertype) - if(!isnull(rmaterialtype)) - reinf_material = get_material_by_name(rmaterialtype) - update_material() - START_PROCESSING(SSturfs, src) - -/turf/simulated/shuttlewalls/Destroy() - STOP_PROCESSING(SSturfs, src) - return ..() - -/turf/simulated/shuttlewalls/examine_icon() - return icon(icon=initial(icon), icon_state=initial(icon_state)) - -/turf/simulated/shuttlewalls/process() - // Calling parent will kill processing - if(!radiate()) - return PROCESS_KILL - -/turf/simulated/shuttlewalls/proc/get_material() - return material - -/turf/simulated/shuttlewalls/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj,/obj/item/projectile/beam)) - burn(2500) - else if(istype(Proj,/obj/item/projectile/ion)) - burn(500) - - var/proj_damage = Proj.get_structure_damage() - - //cap the amount of damage, so that things like emitters can't destroy walls in one hit. - var/damage = min(proj_damage, 100) - - if(Proj.damage_type == BURN && damage > 0) - if(thermite) - thermitemelt() - - if(istype(Proj,/obj/item/projectile/beam)) - if(material && material.reflectivity >= 0.5) // Time to reflect lasers. - var/new_damage = damage * material.reflectivity - var/outgoing_damage = damage - new_damage - damage = new_damage - Proj.damage = outgoing_damage - - visible_message("\The [src] reflects \the [Proj]!") - - // Find a turf near or on the original location to bounce to - var/new_x = Proj.starting.x + pick(0, 0, 0, -1, 1, -2, 2) - var/new_y = Proj.starting.y + pick(0, 0, 0, -1, 1, -2, 2) - //var/turf/curloc = get_turf(src) - var/turf/curloc = get_step(src, get_dir(src, Proj.starting)) - - Proj.penetrating += 1 // Needed for the beam to get out of the wall. - - // redirect the projectile - Proj.redirect(new_x, new_y, curloc, null) - - take_damage(damage) - return - -/turf/simulated/shuttlewalls/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) - ..() - if(ismob(AM)) - return - - var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) - if (tforce < 15) - return - - take_damage(tforce) - -/turf/simulated/shuttlewalls/proc/clear_plants() - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - for(var/obj/effect/plant/plant in range(src, 1)) - if(!plant.floor) //shrooms drop to the floor - plant.floor = 1 - plant.update_icon() - plant.pixel_x = 0 - plant.pixel_y = 0 - plant.update_neighbors() - -/turf/simulated/shuttlewalls/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) - clear_plants() - ..(N, tell_universe, force_lighting_update, preserve_outdoors) - -//Appearance -/turf/simulated/shuttlewalls/examine(mob/user) - . = ..() - - if(!damage) - . += "It looks fully intact." - else - var/dam = damage / material.integrity - if(dam <= 0.3) - . += "It looks slightly damaged." - else if(dam <= 0.6) - . += "It looks moderately damaged." - else - . += "It looks heavily damaged." - - if(locate(/obj/effect/overlay/wallrot) in src) - . += "There is fungus growing on [src]." - -//Damage - -/turf/simulated/shuttlewalls/melt() - - if(!can_melt()) - return - - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - if(!F) - return - F.burn_tile() - F.icon_state = "wall_thermite" - visible_message("\The [src] spontaneously combusts!.") //!!OH SHIT!! - return - -/turf/simulated/shuttlewalls/take_damage(dam) - if(dam) - damage = max(0, damage + dam) - update_damage() - return - -/turf/simulated/shuttlewalls/proc/update_damage() - var/cap = material.integrity - if(reinf_material) - cap += reinf_material.integrity - - if(locate(/obj/effect/overlay/wallrot) in src) - cap = cap / 10 - - if(damage >= cap) - dismantle_wall() - else - update_icon() - - return - -/turf/simulated/shuttlewalls/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( - burn(exposed_temperature) - -/turf/simulated/shuttlewalls/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) - burn(adj_temp) - if(adj_temp > material.melting_point) - take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) - - return ..() - -/turf/simulated/shuttlewalls/proc/dismantle_wall(var/devastated, var/explode, var/no_product) - - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!no_product) - if(reinf_material) - reinf_material.place_dismantled_girder(src, reinf_material, girder_material) - else - material.place_dismantled_girder(src, null, girder_material) - if(!devastated) - material.place_dismantled_product(src) - if (!reinf_material) - material.place_dismantled_product(src) - - for(var/obj/O in src.contents) //Eject contents! - if(istype(O,/obj/structure/sign/poster)) - var/obj/structure/sign/poster/P = O - P.roll_and_drop(src) - else - O.loc = src - - clear_plants() - material = get_material_by_name("placeholder") - reinf_material = null - girder_material = null - update_connections(1) - - ChangeTurf(/turf/simulated/floor/plating) - -/turf/simulated/shuttlewalls/ex_act(severity) - switch(severity) - if(1.0) - if(girder_material.explosion_resistance >= 25 && prob(girder_material.explosion_resistance)) - new /obj/structure/girder/displaced(src, girder_material.name) - src.ChangeTurf(get_base_turf_by_area(src)) - if(2.0) - if(prob(75)) - take_damage(rand(150, 250)) - else - dismantle_wall(1,1) - if(3.0) - take_damage(rand(0, 250)) - else - return - -// Wall-rot effect, a nasty fungus that destroys walls. -/turf/simulated/shuttlewalls/proc/rot() - if(locate(/obj/effect/overlay/wallrot) in src) - return FALSE - - // Wall-rot can't go onto walls that are surrounded in all four cardinal directions. - // Because of spores, or something. It's actually to avoid the pain that is removing wallrot surrounded by - // four r-walls. - var/at_least_one_open_turf = FALSE - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - if(!T.check_density()) - at_least_one_open_turf = TRUE - break - - if(!at_least_one_open_turf) - return FALSE - - var/number_rots = rand(2,3) - for(var/i=0, i= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted. - dismantle_wall(1,1) - else - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - F.burn_tile() - F.icon_state = "dmg[rand(1,4)]" - to_chat(user, "The thermite starts melting through the wall.") - - spawn(100) - if(O) - qdel(O) -// F.sd_LumReset() //TODO: ~Carn - return - -/turf/simulated/shuttlewalls/proc/radiate() - var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) + (girder_material ? girder_material.radioactivity / 2 : 0) - if(!total_radiation) - return - - SSradiation.radiate(src, total_radiation) - return total_radiation - -/turf/simulated/shuttlewalls/proc/burn(temperature) - if(material.combustion_effect(src, temperature, 0.7)) - spawn(2) - new /obj/structure/girder(src, girder_material.name) - src.ChangeTurf(/turf/simulated/floor) - for(var/turf/simulated/wall/W in range(3,src)) - W.burn((temperature/4)) - for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) - D.ignite(temperature/4) - -/turf/simulated/shuttlewalls/can_engrave() - return (material && material.hardness >= 10 && material.hardness <= 100) - -/turf/simulated/shuttlewalls/AltClick(mob/user) - if(isliving(user)) - var/mob/living/livingUser = user - if(try_graffiti(livingUser, livingUser.get_active_hand())) - return +/turf/simulated/shuttlewalls + name = "wall" + desc = "A huge chunk of metal used to create shuttles." + icon = 'modular_chomp/icons/turf/shuttlewall_masks.dmi' + icon_state = "generic" + opacity = 1 + density = TRUE + blocks_air = 1 + thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT + heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + + var/icon/wall_masks = 'modular_chomp/icons/turf/shuttlewall_masks.dmi' + var/damage = 0 + var/damage_overlay = 0 + var/global/damage_overlays[16] + var/active + var/can_open = 0 + var/datum/material/girder_material + var/datum/material/material + var/datum/material/reinf_material + var/last_state + var/construction_stage + + var/list/wall_connections = list("0", "0", "0", "0") + +/turf/simulated/shuttlewalls/Initialize(mapload, materialtype, rmaterialtype, girdertype) + . = ..() + icon_state = "blank" + if(!materialtype) + materialtype = DEFAULT_WALL_MATERIAL + material = get_material_by_name(materialtype) + if(!girdertype) + girdertype = DEFAULT_WALL_MATERIAL + girder_material = get_material_by_name(girdertype) + if(!isnull(rmaterialtype)) + reinf_material = get_material_by_name(rmaterialtype) + update_material() + START_PROCESSING(SSturfs, src) + +/turf/simulated/shuttlewalls/Destroy() + STOP_PROCESSING(SSturfs, src) + return ..() + +/turf/simulated/shuttlewalls/examine_icon() + return icon(icon=initial(icon), icon_state=initial(icon_state)) + +/turf/simulated/shuttlewalls/process() + // Calling parent will kill processing + if(!radiate()) + return PROCESS_KILL + +/turf/simulated/shuttlewalls/proc/get_material() + return material + +/turf/simulated/shuttlewalls/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj,/obj/item/projectile/beam)) + burn(2500) + else if(istype(Proj,/obj/item/projectile/ion)) + burn(500) + + var/proj_damage = Proj.get_structure_damage() + + //cap the amount of damage, so that things like emitters can't destroy walls in one hit. + var/damage = min(proj_damage, 100) + + if(Proj.damage_type == BURN && damage > 0) + if(thermite) + thermitemelt() + + if(istype(Proj,/obj/item/projectile/beam)) + if(material && material.reflectivity >= 0.5) // Time to reflect lasers. + var/new_damage = damage * material.reflectivity + var/outgoing_damage = damage - new_damage + damage = new_damage + Proj.damage = outgoing_damage + + visible_message("\The [src] reflects \the [Proj]!") + + // Find a turf near or on the original location to bounce to + var/new_x = Proj.starting.x + pick(0, 0, 0, -1, 1, -2, 2) + var/new_y = Proj.starting.y + pick(0, 0, 0, -1, 1, -2, 2) + //var/turf/curloc = get_turf(src) + var/turf/curloc = get_step(src, get_dir(src, Proj.starting)) + + Proj.penetrating += 1 // Needed for the beam to get out of the wall. + + // redirect the projectile + Proj.redirect(new_x, new_y, curloc, null) + + take_damage(damage) + return + +/turf/simulated/shuttlewalls/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) + ..() + if(ismob(AM)) + return + + var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) + if (tforce < 15) + return + + take_damage(tforce) + +/turf/simulated/shuttlewalls/proc/clear_plants() + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + for(var/obj/effect/plant/plant in range(src, 1)) + if(!plant.floor) //shrooms drop to the floor + plant.floor = 1 + plant.update_icon() + plant.pixel_x = 0 + plant.pixel_y = 0 + plant.update_neighbors() + +/turf/simulated/shuttlewalls/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) + clear_plants() + ..(N, tell_universe, force_lighting_update, preserve_outdoors) + +//Appearance +/turf/simulated/shuttlewalls/examine(mob/user) + . = ..() + + if(!damage) + . += "It looks fully intact." + else + var/dam = damage / material.integrity + if(dam <= 0.3) + . += "It looks slightly damaged." + else if(dam <= 0.6) + . += "It looks moderately damaged." + else + . += "It looks heavily damaged." + + if(locate(/obj/effect/overlay/wallrot) in src) + . += "There is fungus growing on [src]." + +//Damage + +/turf/simulated/shuttlewalls/melt() + + if(!can_melt()) + return + + src.ChangeTurf(/turf/simulated/floor/plating) + + var/turf/simulated/floor/F = src + if(!F) + return + F.burn_tile() + F.icon_state = "wall_thermite" + visible_message("\The [src] spontaneously combusts!.") //!!OH SHIT!! + return + +/turf/simulated/shuttlewalls/take_damage(dam) + if(dam) + damage = max(0, damage + dam) + update_damage() + return + +/turf/simulated/shuttlewalls/proc/update_damage() + var/cap = material.integrity + if(reinf_material) + cap += reinf_material.integrity + + if(locate(/obj/effect/overlay/wallrot) in src) + cap = cap / 10 + + if(damage >= cap) + dismantle_wall() + else + update_icon() + + return + +/turf/simulated/shuttlewalls/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( + burn(exposed_temperature) + +/turf/simulated/shuttlewalls/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) + burn(adj_temp) + if(adj_temp > material.melting_point) + take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) + + return ..() + +/turf/simulated/shuttlewalls/proc/dismantle_wall(var/devastated, var/explode, var/no_product) + + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(!no_product) + if(reinf_material) + reinf_material.place_dismantled_girder(src, reinf_material, girder_material) + else + material.place_dismantled_girder(src, null, girder_material) + if(!devastated) + material.place_dismantled_product(src) + if (!reinf_material) + material.place_dismantled_product(src) + + for(var/obj/O in src.contents) //Eject contents! + if(istype(O,/obj/structure/sign/poster)) + var/obj/structure/sign/poster/P = O + P.roll_and_drop(src) + else + O.loc = src + + clear_plants() + material = get_material_by_name("placeholder") + reinf_material = null + girder_material = null + update_connections(1) + + ChangeTurf(/turf/simulated/floor/plating) + +/turf/simulated/shuttlewalls/ex_act(severity) + switch(severity) + if(1.0) + if(girder_material.explosion_resistance >= 25 && prob(girder_material.explosion_resistance)) + new /obj/structure/girder/displaced(src, girder_material.name) + src.ChangeTurf(get_base_turf_by_area(src)) + if(2.0) + if(prob(75)) + take_damage(rand(150, 250)) + else + dismantle_wall(1,1) + if(3.0) + take_damage(rand(0, 250)) + else + return + +// Wall-rot effect, a nasty fungus that destroys walls. +/turf/simulated/shuttlewalls/proc/rot() + if(locate(/obj/effect/overlay/wallrot) in src) + return FALSE + + // Wall-rot can't go onto walls that are surrounded in all four cardinal directions. + // Because of spores, or something. It's actually to avoid the pain that is removing wallrot surrounded by + // four r-walls. + var/at_least_one_open_turf = FALSE + for(var/direction in GLOB.cardinal) + var/turf/T = get_step(src, direction) + if(!T.check_density()) + at_least_one_open_turf = TRUE + break + + if(!at_least_one_open_turf) + return FALSE + + var/number_rots = rand(2,3) + for(var/i=0, i= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted. + dismantle_wall(1,1) + else + src.ChangeTurf(/turf/simulated/floor/plating) + + var/turf/simulated/floor/F = src + F.burn_tile() + F.icon_state = "dmg[rand(1,4)]" + to_chat(user, "The thermite starts melting through the wall.") + + spawn(100) + if(O) + qdel(O) +// F.sd_LumReset() //TODO: ~Carn + return + +/turf/simulated/shuttlewalls/proc/radiate() + var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) + (girder_material ? girder_material.radioactivity / 2 : 0) + if(!total_radiation) + return + + SSradiation.radiate(src, total_radiation) + return total_radiation + +/turf/simulated/shuttlewalls/proc/burn(temperature) + if(material.combustion_effect(src, temperature, 0.7)) + spawn(2) + new /obj/structure/girder(src, girder_material.name) + src.ChangeTurf(/turf/simulated/floor) + for(var/turf/simulated/wall/W in range(3,src)) + W.burn((temperature/4)) + for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) + D.ignite(temperature/4) + +/turf/simulated/shuttlewalls/can_engrave() + return (material && material.hardness >= 10 && material.hardness <= 100) + +/turf/simulated/shuttlewalls/AltClick(mob/user) + if(isliving(user)) + var/mob/living/livingUser = user + if(try_graffiti(livingUser, livingUser.get_active_hand())) + return . = ..() \ No newline at end of file diff --git a/modular_chomp/game/turfs/shuttlewalls_attacks.dm b/modular_chomp/game/turfs/shuttlewalls_attacks.dm index 01c30154d2..b420521a23 100644 --- a/modular_chomp/game/turfs/shuttlewalls_attacks.dm +++ b/modular_chomp/game/turfs/shuttlewalls_attacks.dm @@ -1,413 +1,413 @@ -//Interactions -/turf/simulated/shuttlewalls/proc/toggle_open(var/mob/user) - - if(can_open == WALL_OPENING) - return - - SSradiation.resistance_cache.Remove(src) - - if(density) - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_opening", src) - density = FALSE - blocks_air = ZONE_BLOCKED - update_icon() - update_air() - set_light(0) - src.blocks_air = 0 - set_opacity(0) - for(var/turf/simulated/turf in loc) - air_master.mark_for_update(turf) - else - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_closing", src) - density = TRUE - blocks_air = AIR_BLOCKED - update_icon() - update_air() - set_light(1) - src.blocks_air = 1 - set_opacity(1) - for(var/turf/simulated/turf in loc) - air_master.mark_for_update(turf) - - can_open = WALL_CAN_OPEN - update_icon() - -/turf/simulated/shuttlewalls/proc/update_air() - if(!air_master) - return - - for(var/turf/simulated/turf in loc) - update_thermal(turf) - air_master.mark_for_update(turf) - - -/turf/simulated/shuttlewalls/proc/update_thermal(var/turf/simulated/source) - if(istype(source)) - if(density && opacity) - source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - else - source.thermal_conductivity = initial(source.thermal_conductivity) - -/turf/simulated/shuttlewalls/proc/fail_smash(var/mob/user) - var/damage_lower = 25 - var/damage_upper = 75 - if(isanimal(user)) - var/mob/living/simple_mob/S = user - playsound(src, S.attack_sound, 75, 1) - if(!(S.melee_damage_upper >= STRUCTURE_MIN_DAMAGE_THRESHOLD * 2)) - to_chat(user, "You bounce against the wall.") - return FALSE - damage_lower = S.melee_damage_lower - damage_upper = S.melee_damage_upper - to_chat(user, "You smash against the wall!") - user.do_attack_animation(src) - take_damage(rand(damage_lower,damage_upper)) - -/turf/simulated/shuttlewalls/proc/success_smash(var/mob/user) - to_chat(user, "You smash through the wall!") - user.do_attack_animation(src) - if(isanimal(user)) - var/mob/living/simple_mob/S = user - playsound(src, S.attack_sound, 75, 1) - spawn(1) - dismantle_wall(1) - -/turf/simulated/shuttlewalls/proc/try_touch(var/mob/user, var/rotting) - - if(rotting) - if(reinf_material) - to_chat(user, "\The [reinf_material.display_name] feels porous and crumbly.") - else - to_chat(user, "\The [material.display_name] crumbles under your touch!") - dismantle_wall() - return 1 - - if(!can_open) - if(!material.wall_touch_special(src, user)) - to_chat(user, "You push the wall, but nothing happens.") - playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) - else - toggle_open(user) - return 0 - - -/turf/simulated/shuttlewalls/attack_hand(var/mob/user) - - radiate() - add_fingerprint(user) - user.setClickCooldown(user.get_attack_speed()) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if (HULK in user.mutations) - if (rotting || !prob(material.hardness)) - success_smash(user) - else - fail_smash(user) - return 1 - - try_touch(user, rotting) - -/turf/simulated/shuttlewalls/attack_generic(var/mob/user, var/damage, var/attack_message) - - radiate() - user.setClickCooldown(user.get_attack_speed()) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD * 2) - try_touch(user, rotting) - return - - if(rotting) - return success_smash(user) - - if(reinf_material) - if(damage >= max(material.hardness, reinf_material.hardness) ) - return success_smash(user) - else if(damage >= material.hardness) - return success_smash(user) - return fail_smash(user) - -/turf/simulated/shuttlewalls/attackby(var/obj/item/weapon/W, var/mob/user) - - user.setClickCooldown(user.get_attack_speed(W)) - -/* -//As with the floors, only this time it works AND tries pushing the wall after it's done. - if(!construction_stage && user.a_intent == I_HELP) - if(try_graffiti(user,W)) - return -*/ - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - - //get the user's location - if(!istype(user.loc, /turf)) - return //can't do this stuff whilst inside objects and such - - if(W) - radiate() - if(is_hot(W)) - burn(is_hot(W)) - - if(istype(W, /obj/item/device/electronic_assembly/wallmount)) - var/obj/item/device/electronic_assembly/wallmount/IC = W - IC.mount_assembly(src, user) - return - - if(istype(W, /obj/item/stack/tile/roofing)) - var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather - var/turf/T = GetAbove(src) - var/obj/item/stack/tile/roofing/R = W - - // Place plating over a wall - if(T) - if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) - if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating - T.ReplaceWithLattice() - T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") - expended_tile = TRUE - else - to_chat(user, "There aren't any holes in the ceiling to patch here.") - return - - // Create a ceiling to shield from the weather - if(is_outdoors()) - if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one - make_indoors() - if(!expended_tile) // Would've already played a sound - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - user.visible_message("[user] roofs \the [src], shielding it from the elements.", "You roof \the [src] tile, shielding it from the elements.") - return - - - if(locate(/obj/effect/overlay/wallrot) in src) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - to_chat(user, "You burn away the fungi with \the [WT].") - playsound(src, WT.usesound, 10, 1) - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - return - else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) - to_chat(user, "\The [src] crumbles away under the force of your [W.name].") - src.dismantle_wall(1) - return - - //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects - if(thermite) - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - thermitemelt(user) - return - - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - thermitemelt(user) - return - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/obj/item/weapon/melee/energy/blade/EB = W - - EB.spark_system.start() - to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") - playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - - thermitemelt(user) - return - - var/turf/T = user.loc //get user's location for delay checks - - if(damage && W.has_tool_quality(TOOL_WELDER)) - - var/obj/item/weapon/weldingtool/WT = W.get_welder() - - if(!WT.isOn()) - return - - if(WT.remove_fuel(0,user)) - to_chat(user, "You start repairing the damage to [src].") - playsound(src, WT.usesound, 100, 1) - if(do_after(user, max(5, damage / 5) * WT.toolspeed) && WT && WT.isOn()) - to_chat(user, "You finish repairing the damage to [src].") - take_damage(-damage) - else - to_chat(user, "You need more welding fuel to complete this task.") - return - user.update_examine_panel(src) - return - - // Basic dismantling. - //var/dismantle_toolspeed = 0 - if(isnull(construction_stage) || !reinf_material) - - var/cut_delay = 60 - material.cut_delay - var/dismantle_verb - var/dismantle_sound - - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.isOn()) - return - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return - dismantle_verb = "cutting" - dismantle_sound = W.usesound - // cut_delay *= 0.7 // Tools themselves now can shorten the time it takes. - else if(istype(W,/obj/item/weapon/melee/energy/blade)) - dismantle_sound = "sparks" - dismantle_verb = "slicing" - //dismantle_toolspeed = 1 - cut_delay *= 0.5 - else if(istype(W,/obj/item/weapon/pickaxe)) - var/obj/item/weapon/pickaxe/P = W - dismantle_verb = P.drill_verb - dismantle_sound = P.drill_sound - cut_delay -= P.digspeed - - if(dismantle_verb) - - to_chat(user, "You begin [dismantle_verb] through the outer plating.") - if(dismantle_sound) - playsound(src, dismantle_sound, 100, 1) - - if(cut_delay < 0) - cut_delay = 0 - - if(!do_after(user,cut_delay * W.toolspeed)) - return - - to_chat(user, "You remove the outer plating.") - dismantle_wall() - user.visible_message("The wall was torn open by [user]!") - return - - //Reinforced dismantling. - else - switch(construction_stage) - if(6) - if (W.has_tool_quality(TOOL_WIRECUTTER)) - playsound(src, W.usesound, 100, 1) - construction_stage = 5 - user.update_examine_panel(src) - to_chat(user, "You cut through the outer grille.") - update_icon() - return - if(5) - if (W.has_tool_quality(TOOL_SCREWDRIVER)) - to_chat(user, "You begin removing the support lines.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 5) - return - construction_stage = 4 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You unscrew the support lines.") - return - else if (W.has_tool_quality(TOOL_WIRECUTTER)) - construction_stage = 6 - user.update_examine_panel(src) - to_chat(user, "You mend the outer grille.") - playsound(src, W.usesound, 100, 1) - update_icon() - return - if(4) - var/cut_cover - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if(!WT.isOn()) - return - if(WT.remove_fuel(0,user)) - cut_cover=1 - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the metal cover.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user, 60 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) - return - construction_stage = 3 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You press firmly on the cover, dislodging it.") - return - else if (W.has_tool_quality(TOOL_SCREWDRIVER)) - to_chat(user, "You begin screwing down the support lines.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) - return - construction_stage = 5 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You screw down the support lines.") - return - if(3) - if (W.has_tool_quality(TOOL_CROWBAR)) - to_chat(user, "You struggle to pry off the cover.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 3) - return - construction_stage = 2 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You pry off the cover.") - return - if(2) - if (W.has_tool_quality(TOOL_WRENCH)) - to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 2) - return - construction_stage = 1 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You remove the bolts anchoring the support rods.") - return - if(1) - var/cut_cover - if(W.has_tool_quality(TOOL_WELDER)) - var/obj/item/weapon/weldingtool/WT = W.get_welder() - if( WT.remove_fuel(0,user) ) - cut_cover=1 - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the support rods.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,70 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 1) - return - construction_stage = 0 - user.update_examine_panel(src) - update_icon() - to_chat(user, "You slice through the support rods.") - return - if(0) - if(W.has_tool_quality(TOOL_CROWBAR)) - to_chat(user, "You struggle to pry off the outer sheath.") - playsound(src, W.usesound, 100, 1) - if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) - return - if(user.loc == T && user.get_active_hand() == W ) - to_chat(user, "You pry off the outer sheath.") - dismantle_wall() - return - - if(istype(W,/obj/item/frame)) - var/obj/item/frame/F = W - F.try_build(src, user) - return - - else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) +//Interactions +/turf/simulated/shuttlewalls/proc/toggle_open(var/mob/user) + + if(can_open == WALL_OPENING) + return + + SSradiation.resistance_cache.Remove(src) + + if(density) + can_open = WALL_OPENING + //flick("[material.icon_base]fwall_opening", src) + density = FALSE + blocks_air = ZONE_BLOCKED + update_icon() + update_air() + set_light(0) + src.blocks_air = 0 + set_opacity(0) + for(var/turf/simulated/turf in loc) + air_master.mark_for_update(turf) + else + can_open = WALL_OPENING + //flick("[material.icon_base]fwall_closing", src) + density = TRUE + blocks_air = AIR_BLOCKED + update_icon() + update_air() + set_light(1) + src.blocks_air = 1 + set_opacity(1) + for(var/turf/simulated/turf in loc) + air_master.mark_for_update(turf) + + can_open = WALL_CAN_OPEN + update_icon() + +/turf/simulated/shuttlewalls/proc/update_air() + if(!air_master) + return + + for(var/turf/simulated/turf in loc) + update_thermal(turf) + air_master.mark_for_update(turf) + + +/turf/simulated/shuttlewalls/proc/update_thermal(var/turf/simulated/source) + if(istype(source)) + if(density && opacity) + source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT + else + source.thermal_conductivity = initial(source.thermal_conductivity) + +/turf/simulated/shuttlewalls/proc/fail_smash(var/mob/user) + var/damage_lower = 25 + var/damage_upper = 75 + if(isanimal(user)) + var/mob/living/simple_mob/S = user + playsound(src, S.attack_sound, 75, 1) + if(!(S.melee_damage_upper >= STRUCTURE_MIN_DAMAGE_THRESHOLD * 2)) + to_chat(user, "You bounce against the wall.") + return FALSE + damage_lower = S.melee_damage_lower + damage_upper = S.melee_damage_upper + to_chat(user, "You smash against the wall!") + user.do_attack_animation(src) + take_damage(rand(damage_lower,damage_upper)) + +/turf/simulated/shuttlewalls/proc/success_smash(var/mob/user) + to_chat(user, "You smash through the wall!") + user.do_attack_animation(src) + if(isanimal(user)) + var/mob/living/simple_mob/S = user + playsound(src, S.attack_sound, 75, 1) + spawn(1) + dismantle_wall(1) + +/turf/simulated/shuttlewalls/proc/try_touch(var/mob/user, var/rotting) + + if(rotting) + if(reinf_material) + to_chat(user, "\The [reinf_material.display_name] feels porous and crumbly.") + else + to_chat(user, "\The [material.display_name] crumbles under your touch!") + dismantle_wall() + return 1 + + if(!can_open) + if(!material.wall_touch_special(src, user)) + to_chat(user, "You push the wall, but nothing happens.") + playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) + else + toggle_open(user) + return 0 + + +/turf/simulated/shuttlewalls/attack_hand(var/mob/user) + + radiate() + add_fingerprint(user) + user.setClickCooldown(user.get_attack_speed()) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if (HULK in user.mutations) + if (rotting || !prob(material.hardness)) + success_smash(user) + else + fail_smash(user) + return 1 + + try_touch(user, rotting) + +/turf/simulated/shuttlewalls/attack_generic(var/mob/user, var/damage, var/attack_message) + + radiate() + user.setClickCooldown(user.get_attack_speed()) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD * 2) + try_touch(user, rotting) + return + + if(rotting) + return success_smash(user) + + if(reinf_material) + if(damage >= max(material.hardness, reinf_material.hardness) ) + return success_smash(user) + else if(damage >= material.hardness) + return success_smash(user) + return fail_smash(user) + +/turf/simulated/shuttlewalls/attackby(var/obj/item/weapon/W, var/mob/user) + + user.setClickCooldown(user.get_attack_speed(W)) + +/* +//As with the floors, only this time it works AND tries pushing the wall after it's done. + if(!construction_stage && user.a_intent == I_HELP) + if(try_graffiti(user,W)) + return +*/ + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + + //get the user's location + if(!istype(user.loc, /turf)) + return //can't do this stuff whilst inside objects and such + + if(W) + radiate() + if(is_hot(W)) + burn(is_hot(W)) + + if(istype(W, /obj/item/device/electronic_assembly/wallmount)) + var/obj/item/device/electronic_assembly/wallmount/IC = W + IC.mount_assembly(src, user) + return + + if(istype(W, /obj/item/stack/tile/roofing)) + var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather + var/turf/T = GetAbove(src) + var/obj/item/stack/tile/roofing/R = W + + // Place plating over a wall + if(T) + if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) + if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating + T.ReplaceWithLattice() + T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") + expended_tile = TRUE + else + to_chat(user, "There aren't any holes in the ceiling to patch here.") + return + + // Create a ceiling to shield from the weather + if(is_outdoors()) + if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one + make_indoors() + if(!expended_tile) // Would've already played a sound + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + user.visible_message("[user] roofs \the [src], shielding it from the elements.", "You roof \the [src] tile, shielding it from the elements.") + return + + + if(locate(/obj/effect/overlay/wallrot) in src) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + to_chat(user, "You burn away the fungi with \the [WT].") + playsound(src, WT.usesound, 10, 1) + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + return + else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) + to_chat(user, "\The [src] crumbles away under the force of your [W.name].") + src.dismantle_wall(1) + return + + //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects + if(thermite) + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + thermitemelt(user) + return + + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + thermitemelt(user) + return + + else if( istype(W, /obj/item/weapon/melee/energy/blade) ) + var/obj/item/weapon/melee/energy/blade/EB = W + + EB.spark_system.start() + to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") + playsound(src, "sparks", 50, 1) + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + + thermitemelt(user) + return + + var/turf/T = user.loc //get user's location for delay checks + + if(damage && W.has_tool_quality(TOOL_WELDER)) + + var/obj/item/weapon/weldingtool/WT = W.get_welder() + + if(!WT.isOn()) + return + + if(WT.remove_fuel(0,user)) + to_chat(user, "You start repairing the damage to [src].") + playsound(src, WT.usesound, 100, 1) + if(do_after(user, max(5, damage / 5) * WT.toolspeed) && WT && WT.isOn()) + to_chat(user, "You finish repairing the damage to [src].") + take_damage(-damage) + else + to_chat(user, "You need more welding fuel to complete this task.") + return + user.update_examine_panel(src) + return + + // Basic dismantling. + //var/dismantle_toolspeed = 0 + if(isnull(construction_stage) || !reinf_material) + + var/cut_delay = 60 - material.cut_delay + var/dismantle_verb + var/dismantle_sound + + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.isOn()) + return + if(!WT.remove_fuel(0,user)) + to_chat(user, "You need more welding fuel to complete this task.") + return + dismantle_verb = "cutting" + dismantle_sound = W.usesound + // cut_delay *= 0.7 // Tools themselves now can shorten the time it takes. + else if(istype(W,/obj/item/weapon/melee/energy/blade)) + dismantle_sound = "sparks" + dismantle_verb = "slicing" + //dismantle_toolspeed = 1 + cut_delay *= 0.5 + else if(istype(W,/obj/item/weapon/pickaxe)) + var/obj/item/weapon/pickaxe/P = W + dismantle_verb = P.drill_verb + dismantle_sound = P.drill_sound + cut_delay -= P.digspeed + + if(dismantle_verb) + + to_chat(user, "You begin [dismantle_verb] through the outer plating.") + if(dismantle_sound) + playsound(src, dismantle_sound, 100, 1) + + if(cut_delay < 0) + cut_delay = 0 + + if(!do_after(user,cut_delay * W.toolspeed)) + return + + to_chat(user, "You remove the outer plating.") + dismantle_wall() + user.visible_message("The wall was torn open by [user]!") + return + + //Reinforced dismantling. + else + switch(construction_stage) + if(6) + if (W.has_tool_quality(TOOL_WIRECUTTER)) + playsound(src, W.usesound, 100, 1) + construction_stage = 5 + user.update_examine_panel(src) + to_chat(user, "You cut through the outer grille.") + update_icon() + return + if(5) + if (W.has_tool_quality(TOOL_SCREWDRIVER)) + to_chat(user, "You begin removing the support lines.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 5) + return + construction_stage = 4 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You unscrew the support lines.") + return + else if (W.has_tool_quality(TOOL_WIRECUTTER)) + construction_stage = 6 + user.update_examine_panel(src) + to_chat(user, "You mend the outer grille.") + playsound(src, W.usesound, 100, 1) + update_icon() + return + if(4) + var/cut_cover + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if(!WT.isOn()) + return + if(WT.remove_fuel(0,user)) + cut_cover=1 + else + to_chat(user, "You need more welding fuel to complete this task.") + return + else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + to_chat(user, "You begin slicing through the metal cover.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user, 60 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 3 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You press firmly on the cover, dislodging it.") + return + else if (W.has_tool_quality(TOOL_SCREWDRIVER)) + to_chat(user, "You begin screwing down the support lines.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 5 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You screw down the support lines.") + return + if(3) + if (W.has_tool_quality(TOOL_CROWBAR)) + to_chat(user, "You struggle to pry off the cover.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 3) + return + construction_stage = 2 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You pry off the cover.") + return + if(2) + if (W.has_tool_quality(TOOL_WRENCH)) + to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,40 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 2) + return + construction_stage = 1 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You remove the bolts anchoring the support rods.") + return + if(1) + var/cut_cover + if(W.has_tool_quality(TOOL_WELDER)) + var/obj/item/weapon/weldingtool/WT = W.get_welder() + if( WT.remove_fuel(0,user) ) + cut_cover=1 + else + to_chat(user, "You need more welding fuel to complete this task.") + return + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + to_chat(user, "You begin slicing through the support rods.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,70 * W.toolspeed) || !istype(src, /turf/simulated/wall) || construction_stage != 1) + return + construction_stage = 0 + user.update_examine_panel(src) + update_icon() + to_chat(user, "You slice through the support rods.") + return + if(0) + if(W.has_tool_quality(TOOL_CROWBAR)) + to_chat(user, "You struggle to pry off the outer sheath.") + playsound(src, W.usesound, 100, 1) + if(!do_after(user,100 * W.toolspeed) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) + return + if(user.loc == T && user.get_active_hand() == W ) + to_chat(user, "You pry off the outer sheath.") + dismantle_wall() + return + + if(istype(W,/obj/item/frame)) + var/obj/item/frame/F = W + F.try_build(src, user) + return + + else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) return attack_hand(user) \ No newline at end of file diff --git a/modular_chomp/game/turfs/shuttlewalls_icon.dm b/modular_chomp/game/turfs/shuttlewalls_icon.dm index d10a49a0ea..5fa9ec3325 100644 --- a/modular_chomp/game/turfs/shuttlewalls_icon.dm +++ b/modular_chomp/game/turfs/shuttlewalls_icon.dm @@ -1,152 +1,152 @@ -/turf/simulated/shuttlewalls/proc/update_material() - - if(!material) - return - - if(reinf_material) - construction_stage = 6 - else - construction_stage = null - if(!material) - material = get_material_by_name(DEFAULT_WALL_MATERIAL) - if(material) - explosion_resistance = material.explosion_resistance - if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) - explosion_resistance = reinf_material.explosion_resistance - - if(reinf_material) - name = "reinforced [material.display_name] wall" - desc = "It seems to be a section of wall reinforced with [reinf_material.display_name] and plated with [material.display_name]." - else - name = "[material.display_name] wall" - desc = "It seems to be a section of wall plated with [material.display_name]." - - if(material.opacity > 0.5 && !opacity) - set_light(1) - else if(material.opacity < 0.5 && opacity) - set_light(0) - - SSradiation.resistance_cache.Remove(src) - update_connections(1) - update_icon() - - -/turf/simulated/shuttlewalls/proc/set_material(var/datum/material/newmaterial, var/datum/material/newrmaterial, var/datum/material/newgmaterial) - material = newmaterial - reinf_material = newrmaterial - if(!newgmaterial) - girder_material = DEFAULT_WALL_MATERIAL - else - girder_material = newgmaterial - update_material() - -/turf/simulated/wall/update_icon() - if(!material) - return - - if(!damage_overlays[1]) //list hasn't been populated - generate_overlays() - - cut_overlays() - var/image/I - - if(!density) - I = image(wall_masks, "[material.icon_base]fwall_open") - I.color = material.icon_colour - add_overlay(I) - return - - for(var/i = 1 to 4) - I = image(wall_masks, "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) - I.color = material.icon_colour - add_overlay(I) - - if(reinf_material) - if(construction_stage != null && construction_stage < 6) - I = image(wall_masks, "reinf_construct-[construction_stage]") - I.color = reinf_material.icon_colour - add_overlay(I) - else - if("[reinf_material.icon_reinf]0" in cached_icon_states(wall_masks)) - // Directional icon - for(var/i = 1 to 4) - I = image(wall_masks, "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) - I.color = reinf_material.icon_colour - add_overlay(I) - else if("[reinf_material.icon_reinf]" in cached_icon_states(wall_masks)) - I = image(wall_masks, reinf_material.icon_reinf) - I.color = reinf_material.icon_colour - add_overlay(I) - var/image/texture = material.get_wall_texture() - if(texture) - add_overlay(texture) - - if(damage != 0) - var/integrity = material.integrity - if(reinf_material) - integrity += reinf_material.integrity - - var/overlay = round(damage / integrity * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len - - add_overlay(damage_overlays[overlay]) - return - -/turf/simulated/shuttlewalls/proc/generate_overlays() - var/alpha_inc = 256 / damage_overlays.len - - for(var/i = 1; i <= damage_overlays.len; i++) - var/image/img = image(icon = 'modular_chomp/icons/turf/shuttlewall.dmi', icon_state = "overlay_damage") - img.blend_mode = BLEND_MULTIPLY - img.alpha = (i * alpha_inc) - 1 - damage_overlays[i] = img - - -/turf/simulated/shuttlewalls/proc/update_connections(propagate = 0) - if(!material) - return - var/list/dirs = list() - var/inrange = orange(src, 1) - for(var/turf/simulated/wall/W in inrange) - if(!W.material) - continue - if(propagate) - W.update_connections() - W.update_icon() - if(can_join_with_wall(W)) - dirs += get_dir(src, W) - for(var/obj/structure/low_wall/WF in inrange) - if(can_join_with_low_wall(WF)) - dirs += get_dir(src, WF) - - special_wall_connections(dirs, inrange) - wall_connections = dirs_to_corner_states(dirs) - -/turf/simulated/shuttlewalls/proc/special_wall_connections(list/dirs, list/inrange) - if(material.icon_base == "hull") // Could be improved... - var/additional_dirs = 0 - for(var/direction in alldirs) - var/turf/T = get_step(src,direction) - if(T && (locate(/obj/structure/hull_corner) in T)) - dirs += direction - additional_dirs |= direction - if(additional_dirs) - for(var/diag_dir in cornerdirs) - if ((additional_dirs & diag_dir) == diag_dir) - dirs += diag_dir - -/turf/simulated/shuttlewalls/proc/can_join_with_wall(var/turf/simulated/wall/W) - //No blending if no material - if(!material || !W.material) - return 0 - //We can blend if either is the same, or a subtype, of the other one - if(istype(W.material, material.type) || istype(material, W.material.type)) - return 1 - //Also blend if they have the same iconbase - if(material.icon_base == W.material.icon_base) - return 1 - return 0 - -/turf/simulated/shuttlewalls/proc/can_join_with_low_wall(var/obj/structure/low_wall/WF) +/turf/simulated/shuttlewalls/proc/update_material() + + if(!material) + return + + if(reinf_material) + construction_stage = 6 + else + construction_stage = null + if(!material) + material = get_material_by_name(DEFAULT_WALL_MATERIAL) + if(material) + explosion_resistance = material.explosion_resistance + if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) + explosion_resistance = reinf_material.explosion_resistance + + if(reinf_material) + name = "reinforced [material.display_name] wall" + desc = "It seems to be a section of wall reinforced with [reinf_material.display_name] and plated with [material.display_name]." + else + name = "[material.display_name] wall" + desc = "It seems to be a section of wall plated with [material.display_name]." + + if(material.opacity > 0.5 && !opacity) + set_light(1) + else if(material.opacity < 0.5 && opacity) + set_light(0) + + SSradiation.resistance_cache.Remove(src) + update_connections(1) + update_icon() + + +/turf/simulated/shuttlewalls/proc/set_material(var/datum/material/newmaterial, var/datum/material/newrmaterial, var/datum/material/newgmaterial) + material = newmaterial + reinf_material = newrmaterial + if(!newgmaterial) + girder_material = DEFAULT_WALL_MATERIAL + else + girder_material = newgmaterial + update_material() + +/turf/simulated/wall/update_icon() + if(!material) + return + + if(!damage_overlays[1]) //list hasn't been populated + generate_overlays() + + cut_overlays() + var/image/I + + if(!density) + I = image(wall_masks, "[material.icon_base]fwall_open") + I.color = material.icon_colour + add_overlay(I) + return + + for(var/i = 1 to 4) + I = image(wall_masks, "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) + I.color = material.icon_colour + add_overlay(I) + + if(reinf_material) + if(construction_stage != null && construction_stage < 6) + I = image(wall_masks, "reinf_construct-[construction_stage]") + I.color = reinf_material.icon_colour + add_overlay(I) + else + if("[reinf_material.icon_reinf]0" in cached_icon_states(wall_masks)) + // Directional icon + for(var/i = 1 to 4) + I = image(wall_masks, "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) + I.color = reinf_material.icon_colour + add_overlay(I) + else if("[reinf_material.icon_reinf]" in cached_icon_states(wall_masks)) + I = image(wall_masks, reinf_material.icon_reinf) + I.color = reinf_material.icon_colour + add_overlay(I) + var/image/texture = material.get_wall_texture() + if(texture) + add_overlay(texture) + + if(damage != 0) + var/integrity = material.integrity + if(reinf_material) + integrity += reinf_material.integrity + + var/overlay = round(damage / integrity * damage_overlays.len) + 1 + if(overlay > damage_overlays.len) + overlay = damage_overlays.len + + add_overlay(damage_overlays[overlay]) + return + +/turf/simulated/shuttlewalls/proc/generate_overlays() + var/alpha_inc = 256 / damage_overlays.len + + for(var/i = 1; i <= damage_overlays.len; i++) + var/image/img = image(icon = 'modular_chomp/icons/turf/shuttlewall.dmi', icon_state = "overlay_damage") + img.blend_mode = BLEND_MULTIPLY + img.alpha = (i * alpha_inc) - 1 + damage_overlays[i] = img + + +/turf/simulated/shuttlewalls/proc/update_connections(propagate = 0) + if(!material) + return + var/list/dirs = list() + var/inrange = orange(src, 1) + for(var/turf/simulated/wall/W in inrange) + if(!W.material) + continue + if(propagate) + W.update_connections() + W.update_icon() + if(can_join_with_wall(W)) + dirs += get_dir(src, W) + for(var/obj/structure/low_wall/WF in inrange) + if(can_join_with_low_wall(WF)) + dirs += get_dir(src, WF) + + special_wall_connections(dirs, inrange) + wall_connections = dirs_to_corner_states(dirs) + +/turf/simulated/shuttlewalls/proc/special_wall_connections(list/dirs, list/inrange) + if(material.icon_base == "hull") // Could be improved... + var/additional_dirs = 0 + for(var/direction in alldirs) + var/turf/T = get_step(src,direction) + if(T && (locate(/obj/structure/hull_corner) in T)) + dirs += direction + additional_dirs |= direction + if(additional_dirs) + for(var/diag_dir in cornerdirs) + if ((additional_dirs & diag_dir) == diag_dir) + dirs += diag_dir + +/turf/simulated/shuttlewalls/proc/can_join_with_wall(var/turf/simulated/wall/W) + //No blending if no material + if(!material || !W.material) + return 0 + //We can blend if either is the same, or a subtype, of the other one + if(istype(W.material, material.type) || istype(material, W.material.type)) + return 1 + //Also blend if they have the same iconbase + if(material.icon_base == W.material.icon_base) + return 1 + return 0 + +/turf/simulated/shuttlewalls/proc/can_join_with_low_wall(var/obj/structure/low_wall/WF) return FALSE \ No newline at end of file diff --git a/modular_chomp/maps/overmap/aegis_carrier/aegis_objs.dm b/modular_chomp/maps/overmap/aegis_carrier/aegis_objs.dm index b3b37a3794..e88e27022f 100644 --- a/modular_chomp/maps/overmap/aegis_carrier/aegis_objs.dm +++ b/modular_chomp/maps/overmap/aegis_carrier/aegis_objs.dm @@ -1,6 +1,6 @@ -/obj/structure/railing/overhang/waterless/grey - name = "steel ledge" - desc = "A metallic overhang that supports an elevated platform." - icon = 'modular_chomp/maps/overmap/aegis_carrier/aegis_icons/greyledge.dmi' - icon_modifier = "grey_" +/obj/structure/railing/overhang/waterless/grey + name = "steel ledge" + desc = "A metallic overhang that supports an elevated platform." + icon = 'modular_chomp/maps/overmap/aegis_carrier/aegis_icons/greyledge.dmi' + icon_modifier = "grey_" icon_state = "grey_railing0" \ No newline at end of file diff --git a/modular_chomp/maps/submaps/shelters/CrashedInfestedShip-56x25.dmm b/modular_chomp/maps/submaps/shelters/CrashedInfestedShip-56x25.dmm index f6a2b09efe..9441e67b99 100644 --- a/modular_chomp/maps/submaps/shelters/CrashedInfestedShip-56x25.dmm +++ b/modular_chomp/maps/submaps/shelters/CrashedInfestedShip-56x25.dmm @@ -1,385 +1,385 @@ -"ao" = (/obj/machinery/atmospherics/binary/circulator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"as" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"at" = (/obj/structure/prop/alien/pod/hybrid,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"aH" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"aJ" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"bc" = (/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) -"bi" = (/turf/simulated/floor,/area/template_noop) -"bm" = (/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"bo" = (/obj/structure/closet/secure_closet/egg/xenomorph,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"bp" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"bv" = (/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"bw" = (/obj/structure/prop/alien/pod/open,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"bH" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"bI" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"bN" = (/obj/random/maintenance/clean,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"bO" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/wood/wings{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"cf" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"cB" = (/obj/structure/prop/alien/computer/camera{dir = 4},/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"cL" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"cP" = (/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"cS" = (/obj/structure/bed/nest,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) -"cX" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"db" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"de" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"dg" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/hooklauncher,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"dx" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"dz" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"dB" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"dC" = (/obj/effect/floor_decal/techfloor/hole{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"dF" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"dN" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"dS" = (/obj/structure/cryofeed{dir = 2},/obj/machinery/light/small/emergency,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"dY" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"ep" = (/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"et" = (/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"ex" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"eB" = (/obj/structure/closet/alien,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"eE" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"eG" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"eI" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"fc" = (/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"ff" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"fi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"fm" = (/obj/machinery/computer/security/abductor{icon_screen = null},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"fA" = (/obj/structure/cryofeed,/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"fD" = (/obj/effect/floor_decal/techfloor,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"gc" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"gd" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/random/maintenance/engineering,/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"gm" = (/obj/fire,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"gt" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) -"gz" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"gB" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"gK" = (/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"gW" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"hw" = (/obj/machinery/vending/engivend{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"hR" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westleft{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/rig/hazard/equipped,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"hV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"iq" = (/obj/item/trash/material/metal,/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"is" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"iw" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"iy" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/device/sleevemate,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"iG" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"iM" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"iQ" = (/obj/structure/particle_accelerator/particle_emitter/center{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"jb" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"jd" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"jg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) -"jh" = (/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"ji" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"jm" = (/obj/structure/table/alien,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"jq" = (/obj/effect/floor_decal/techfloor,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"jr" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"jI" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"jK" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"jW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"jZ" = (/obj/structure/closet/alien,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"ku" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"kD" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"kN" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westright{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/device/slow_sizegun,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"kO" = (/obj/structure/closet/alien,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"kS" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"kU" = (/obj/machinery/light/poi,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"kV" = (/obj/effect/floor_decal/techfloor/corner{dir = 6},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"lp" = (/obj/structure/lattice,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"ly" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/engineering,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"lJ" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"mm" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"mp" = (/obj/fire,/turf/simulated/floor,/area/template_noop) -"mt" = (/obj/effect/decal/cleanable/generic,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"mv" = (/obj/effect/floor_decal/techfloor,/obj/machinery/vending/foodmeat{dir = 8},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"my" = (/obj/machinery/oxygen_pump/anesthetic,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"mH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"mK" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"mQ" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"mT" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"nj" = (/obj/structure/table/alien,/obj/item/weapon/soap/deluxe,/obj/item/weapon/soap/deluxe,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"nt" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"nv" = (/obj/structure/prop/alien/computer/camera{dir = 1},/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"nx" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"nB" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"nC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"nX" = (/obj/structure/alien/membrane,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"ob" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"oh" = (/obj/structure/closet/alien,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"op" = (/obj/structure/window/reinforced/survival_pod{dir = 10},/obj/machinery/light/poi,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"oI" = (/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"oM" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"oR" = (/obj/structure/table/darkglass,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"ph" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"pi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"pu" = (/obj/machinery/sleeper{dir = 4; emagged = 1; initial_bin_rating = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"pC" = (/obj/effect/floor_decal/techfloor,/obj/structure/prop/alien/dispenser,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"pO" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"qb" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"qe" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"qm" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"qo" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"qC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"qE" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"qL" = (/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"qP" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"qQ" = (/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"qS" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"qY" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/survivalpod/superpose/CrashedInfestedShip) -"ri" = (/obj/fire,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) -"ru" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"rx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"rI" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"rJ" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"rL" = (/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"rX" = (/obj/fire,/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"se" = (/obj/effect/alien/weeds/node,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"sn" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/device,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"sp" = (/obj/fire,/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"ss" = (/obj/structure/prop/alien/computer{dir = 1},/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"sC" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"sM" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"td" = (/obj/structure/table/alien,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"tr" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"tu" = (/obj/machinery/light/poi{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"tF" = (/obj/machinery/cryopod/robot,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"tK" = (/obj/structure/prop/alien/computer/hybrid,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"tN" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"tX" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"uf" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/alien/blue,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"uI" = (/obj/structure/salvageable/data_os,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"uQ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"uT" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"ve" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"vg" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) -"vm" = (/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"vv" = (/obj/fire,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"vJ" = (/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"vQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"vU" = (/obj/random/maintenance/engineering,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"vV" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"wn" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"wr" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"wD" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"wK" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"xl" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"xs" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"xC" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"xG" = (/obj/structure/prop/alien/computer/hybrid{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"xT" = (/obj/structure/table/darkglass,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"ya" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"yi" = (/obj/structure/table/darkglass,/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"yv" = (/obj/structure/prop/fake_ai{name = "P0ps1ck13"},/obj/structure/window/reinforced/survival_pod{dir = 1},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"yI" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"yP" = (/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"yU" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"yY" = (/obj/structure/particle_accelerator/particle_emitter/right{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"zc" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"zj" = (/obj/fire,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"zu" = (/obj/structure/table/darkglass,/obj/random/maintenance/medical,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"zz" = (/obj/effect/floor_decal/techfloor,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"zD" = (/obj/machinery/field_generator{anchored = 1; state = 1},/obj/fire,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"zG" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"zH" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"zI" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"zV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Aj" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"AB" = (/obj/structure/cryofeed{dir = 4; pixel_x = 32},/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"AC" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"AL" = (/obj/structure/prop/alien/pod/open,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"AO" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"AP" = (/obj/machinery/vending/medical{dir = 4; emagged = 1; pixel_x = 5; req_access = list(777)},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"AR" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"AS" = (/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"AV" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastleft{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/crossbow/largecrossbow,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"Bd" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/alien,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Bf" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Bh" = (/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Bt" = (/obj/random/maintenance/clean,/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"BE" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"BH" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"Cl" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/machinery/light/poi,/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"Cr" = (/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) -"Cy" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"CG" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"CO" = (/turf/template_noop,/area/template_noop) -"CS" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"CY" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"Dg" = (/obj/fire,/obj/machinery/light/poi,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Dl" = (/obj/random/maintenance/medical,/obj/fire,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"Dn" = (/obj/structure/table/alien/blue,/obj/item/weapon/storage/belt/medical/alien{pixel_y = 6},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"Dv" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"DA" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/alien/blue,/obj/item/slime_cube,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"DF" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"DG" = (/obj/random/maintenance/clean,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"DJ" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"DK" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/tape_roll,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"DX" = (/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) -"Ee" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"Ej" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"El" = (/obj/structure/toilet{dir = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"Ep" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"EJ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"EM" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"EY" = (/obj/structure/lattice,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"EZ" = (/obj/structure/alien/wall,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"Ff" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"Fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"Fu" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"FU" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"FX" = (/obj/random/maintenance/cargo,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"FZ" = (/obj/machinery/shower{pixel_y = 16},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"Gd" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"GH" = (/obj/structure/window/reinforced/survival_pod{dir = 5},/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"GQ" = (/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) -"GR" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"Hq" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) -"HX" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"Ib" = (/obj/structure/cryofeed{pixel_x = -32},/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"Ir" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"Is" = (/obj/machinery/light/poi,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"It" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"II" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"IO" = (/obj/machinery/vending/coffee{categories = 3; dir = 8; name = "hacked Hot Drinks machine"; prices = list()},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"IW" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"Jh" = (/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Jt" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"JB" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"JD" = (/obj/structure/cryofeed{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) -"JJ" = (/obj/random/maintenance/engineering,/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"JW" = (/obj/machinery/media/jukebox/casinojukebox,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"Kc" = (/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"Ko" = (/obj/machinery/power/emitter/gyrotron{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Kp" = (/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Kq" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/bed/chair/bay/comfy/teal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Kx" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) -"KB" = (/obj/effect/floor_decal/techfloor/corner{dir = 5},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"KS" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/prop/alien/dispenser,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"KT" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"La" = (/obj/machinery/door/window/survival_pod,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"LH" = (/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"LM" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"LY" = (/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"Md" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Mw" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Nd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Nm" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"ND" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"NI" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/clipboard,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"NJ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"NP" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"NS" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"NY" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) -"Oj" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"OS" = (/obj/machinery/light/poi{dir = 1},/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"OY" = (/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Pi" = (/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"Pq" = (/obj/effect/floor_decal/techfloor,/obj/machinery/chemical_dispenser/full{pixel_y = 11},/obj/structure/table/alien/blue,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Py" = (/obj/structure/cryofeed{pixel_x = -32},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"PB" = (/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"PF" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"PL" = (/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"PR" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"PT" = (/obj/machinery/computer/crew{icon = 'icons/obj/abductor_vr.dmi'; icon_screen = null; icon_state = "console-c"},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"Qe" = (/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"Qf" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Qi" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Qu" = (/obj/structure/table/alien/blue,/obj/machinery/door/window/brigdoor/northright{dir = 2; req_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"QH" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"QT" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/medical,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Re" = (/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Rs" = (/obj/fire,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"RC" = (/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"RT" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"RY" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"Sd" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Sh" = (/obj/fire,/turf/template_noop,/area/template_noop) -"SE" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"SI" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"SK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"SO" = (/obj/structure/table/darkglass,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"SS" = (/turf/simulated/shuttle/wall/alien/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"SY" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Ta" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Ti" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/bay/comfy/teal{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Tn" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Tr" = (/obj/structure/table/alien/blue,/obj/machinery/door/window/brigdoor/northright{req_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) -"Tx" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"TD" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"TF" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"TH" = (/obj/effect/floor_decal/techfloor,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"TK" = (/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"TL" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) -"TM" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Um" = (/turf/simulated/shuttle/floor/white,/area/template_noop) -"Un" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Up" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Uu" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 4},/turf/template_noop,/area/template_noop) -"Uy" = (/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"UH" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"UI" = (/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"US" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Vk" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"Vq" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"Vr" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Vu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/random/maintenance/clean,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Vw" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) -"VF" = (/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"VL" = (/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"VP" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"VR" = (/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"VS" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"VV" = (/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"VX" = (/obj/machinery/light/poi{dir = 4},/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Wr" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"WD" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) -"WJ" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"WQ" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) -"WT" = (/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"WX" = (/obj/machinery/vending/tool{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) -"Xb" = (/obj/structure/closet/secure_closet/egg/xenomorph,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Xe" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) -"Xg" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Xi" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"Xo" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"Xv" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) -"XA" = (/obj/structure/particle_accelerator/fuel_chamber{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"XC" = (/obj/structure/closet/alien,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) -"XF" = (/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"XJ" = (/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/white,/area/template_noop) -"XY" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Yi" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"Yw" = (/obj/structure/alien/wall,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Yx" = (/obj/structure/alien/membrane,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) -"YA" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) -"YP" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/template_noop) -"Zh" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/filingcabinet/medical,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) -"Zl" = (/obj/random/maintenance/clean,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"Zp" = (/obj/machinery/computer/operating{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"Zq" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) -"ZQ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) -"ZX" = (/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) - -(1,1,1) = {" -COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOGQSSGQGQEZEZGQGQGQvVjWjWDJGQSSCOCOCOCOCOCOCOCOCOCOCOCOCO -COCOGQGQGQGQGQGQGQbvbvWTGQGQGQSSCOCOCOCOCOCOCOCOCOCOCOCOWTGQVFVFtKgKOSGQXegzgzgzgzXeGQSSCOCOCOCOCOCOCOCOCOCOCOCO -COCOWTGQkObwqeaophdzUpNdTDVFGQWTSSCOGQGQwDGQGQSSCOCOCOYPWTGQkDkDKpXikDKpUISOxTyixTUIJWGQSSCOCOCOCOCOCOCOCOCOCOCO -COCOWTGQnCntxsTaxsSKzVLMJtVXGQqmWTGQSSWXjinBhwGQPiCOCOCOGQGQoMoMCyoMXYKpVqbObObObOVqVqmvGQCOCOCOCOCOCOCOCOCOCOCO -UuCOWTGQWTbveErJpOeIgdRCOYbvgWWTbvGQmQLYcPcPcPGQPiPiCOCOCOGQjZClALVkYAGQVkVkVkIsVkVkVkIOGQSSCOCOCOCOCOCOCOCOCOCO -COCOSSGQmKUSZqVuTFItmHqSmmqSjgOYbmgWIWIWLYcPLYohGQPiPiwDGQGQGQGQGQgWGQGQGQgWGQGQGQGQGQGQGQGQSSCOCOCOCOCOCOCOCOCO -GQGQGQGQpiGQvVjWjWjWDJGQCYGQGQJJWTGQufMdMdKqMdZhGQSSHXMwbmvmetBtbNvmiGetvmvmbmbmbmbmTMbmHXSSGQGQnXnXYwCOCOCOCOCO -mpWTGQSSCSeGfDfDNSCSCSqPCSSSGQvmbvGQGQDKveQuNIGQGQqQPLZXZXvmvmLHLHZXMwMwbmbmbmUHbmbNbmbmbmFuGQoRWTNYGQSSCOCOCOCO -ShbvGQzIzDJhJhwnJhJhsCJhVkFUgWbmZXMwbmbmVVvmFXbmbmbmvmGQGQgWGQGQGQgWGQGQGQgWGQGQGQgWGQGQbmbmgWbmXvcSGQGQwDGQSSCO -biGdGdzGgmRsJhsCGdPiNPVkiqwKGQgBCSfDTHtXSIbITLRYBHRYSYGQDFqQBEGQUIUIeBGQUIUIeBGQUIUIeBGQbmdNGQbmXvNYGQfmdxPTGQSS -PiPiPiYiPiPilpEYPizjlpXFNPFUjgkVjqTnjqjqcXgmJhDgNPJhFUGQfAyvJDGQqCKcAjGQqCfckSGQqCXvvgGQbmbmDXbNbmbmGQKSARNmPiEZ -biWTGQZQJhPiGdbcbcbcEYJhVRrLfiBfEpVSexQHQiJhSSSSSSJhrLGQatdSatGQzuruiwGQyijKrIGQyiKxNYGQCSCSGQCSCSCSgWCSzzPitdfi -biWTGQNPJhPiGdrigtCrPiGdNPvJPRBfiQVkXAdCQiJhxCuIxCJhNPGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQNPNPGQtuDGqbGQjmDGNPVPPR -biWTGQaJRsNPEYbcririPimtNPASnxBfyYzczcuTQiJhSSSSSSJhASGQAVHqkNGQyisMrIGQzucfWQGQxTWDiwGQjrjrGQasasasgWjrjraJtdnx -GQGQWTobJhNPEYPiPiEYEYJhNPFUjgKBEjMdMdEjiMspJhUyqENPVrGQdgyPhRGQvQfckSGQvQTKEeGQvQKcAjGQbmbmGQWTWTWTGQpCCSJBnvGQ -biWTPiYiJhRsJhPiPiNPNPRsqEwKGQdYNJjbEJNJQTNJlyGRCGsnbpGQDAFmDAGQqLUIeBGQUIUIeBGQUIUIeBGQbmdNGQboWTboGQcByassGQSS -biWTPizIVRNPJhsCReXoJhjIVkFUgWvmMwvmvmvmisvmbmVLisPLbmGQGQoIGQGQGQgWGQGQGQgWGQGQGQgWGQGQbNvUGQboseXbGQGQwDGQSSCO -biPiWTSSjrWrjrjrjrjrjrtNjrSSGQvmbmGQGQIrbHTriyGQGQqQPibmvmvmvmvmiGvmisMwMwbmbmbmbmbmbmbmbmPiGQboWTboGQSSCOCOCOCO -PiPiGQGQpiGQvVjWjWjWDJGQCYGQGQvmbmPiPqyIyITiyIUnGQSSdbPiyUMwMwvmZlvmbmrXiGepvmbNbmbmyUbmHXPiEZGQGQGQSSCOCOCOCOCO -COCOSSGQKohVuQuQuQuQqohVKohVjgvmbmFfvvDlvvXJXJUmDnPiPidFGQPiPiGQGQgWGQGQGQgWGQGQGQSdGQGQGQYxEZCOCOCOCOCOCOCOCOCO -COCOWTGQWTbvkuSESESEffWTWTbvgWbmqQPiXCdeDlvvdeAPGQPiCOCOCOPiqYALRTVkEMGQIbVkmTGQnjPBLaFZGQPiCOCOCOCOCOCOCOCOCOCO -COCOWTGQnCrxlJKTlJNDOjzHIIjhGQHXSSPiSSWJpuaHZpWTSSCOCOCOGQPidBAOTxAOgcGQPFjdABGQPBPBGHGQGQCOCOCOCOCOCOCOCOCOCOCO -UuCOWTGQkOBdtraophdzxlwrACVFWTGQSSCOGQGQDvmyWTSSCOCOCOCOWTPicLcLWTcLQfGQPyqQXgGQQeopVwGQSSCOCOCOCOCOCOCOCOCOCOCO -COCOGQGQGQGQGQGQWTWTWTWTGQWTWTSSCOCOCOCOCOCOCOCOCOCOCOCOPikUjhjhxGVFjhGQtFyUBhGQElGQGQSSCOCOCOCOCOCOCOCOCOCOCOCO -COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOGQGQGQWTWTWTGQGQGQGQGQGQGQGQSSCOCOCOCOCOCOCOCOCOCOCOCOCO -"} +"ao" = (/obj/machinery/atmospherics/binary/circulator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"as" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"at" = (/obj/structure/prop/alien/pod/hybrid,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"aH" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"aJ" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"bc" = (/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) +"bi" = (/turf/simulated/floor,/area/template_noop) +"bm" = (/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"bo" = (/obj/structure/closet/secure_closet/egg/xenomorph,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"bp" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"bv" = (/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"bw" = (/obj/structure/prop/alien/pod/open,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"bH" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"bI" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"bN" = (/obj/random/maintenance/clean,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"bO" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/wood/wings{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"cf" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"cB" = (/obj/structure/prop/alien/computer/camera{dir = 4},/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"cL" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"cP" = (/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"cS" = (/obj/structure/bed/nest,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) +"cX" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"db" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"de" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"dg" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/hooklauncher,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"dx" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"dz" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"dB" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"dC" = (/obj/effect/floor_decal/techfloor/hole{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"dF" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"dN" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"dS" = (/obj/structure/cryofeed{dir = 2},/obj/machinery/light/small/emergency,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"dY" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"ep" = (/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"et" = (/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"ex" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"eB" = (/obj/structure/closet/alien,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"eE" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"eG" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"eI" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"fc" = (/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"ff" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"fi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"fm" = (/obj/machinery/computer/security/abductor{icon_screen = null},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"fA" = (/obj/structure/cryofeed,/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"fD" = (/obj/effect/floor_decal/techfloor,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"gc" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"gd" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/random/maintenance/engineering,/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"gm" = (/obj/fire,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"gt" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) +"gz" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"gB" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"gK" = (/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"gW" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"hw" = (/obj/machinery/vending/engivend{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"hR" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westleft{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/rig/hazard/equipped,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"hV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"iq" = (/obj/item/trash/material/metal,/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"is" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"iw" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"iy" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/device/sleevemate,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"iG" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"iM" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"iQ" = (/obj/structure/particle_accelerator/particle_emitter/center{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"jb" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"jd" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"jg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) +"jh" = (/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"ji" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"jm" = (/obj/structure/table/alien,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"jq" = (/obj/effect/floor_decal/techfloor,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"jr" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"jI" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"jK" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"jW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"jZ" = (/obj/structure/closet/alien,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"ku" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"kD" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"kN" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westright{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/device/slow_sizegun,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"kO" = (/obj/structure/closet/alien,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"kS" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"kU" = (/obj/machinery/light/poi,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"kV" = (/obj/effect/floor_decal/techfloor/corner{dir = 6},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"lp" = (/obj/structure/lattice,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"ly" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/engineering,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"lJ" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"mm" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"mp" = (/obj/fire,/turf/simulated/floor,/area/template_noop) +"mt" = (/obj/effect/decal/cleanable/generic,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"mv" = (/obj/effect/floor_decal/techfloor,/obj/machinery/vending/foodmeat{dir = 8},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"my" = (/obj/machinery/oxygen_pump/anesthetic,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"mH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"mK" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"mQ" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"mT" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"nj" = (/obj/structure/table/alien,/obj/item/weapon/soap/deluxe,/obj/item/weapon/soap/deluxe,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"nt" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"nv" = (/obj/structure/prop/alien/computer/camera{dir = 1},/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"nx" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"nB" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"nC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"nX" = (/obj/structure/alien/membrane,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"ob" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"oh" = (/obj/structure/closet/alien,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"op" = (/obj/structure/window/reinforced/survival_pod{dir = 10},/obj/machinery/light/poi,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"oI" = (/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"oM" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"oR" = (/obj/structure/table/darkglass,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"ph" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"pi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"pu" = (/obj/machinery/sleeper{dir = 4; emagged = 1; initial_bin_rating = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"pC" = (/obj/effect/floor_decal/techfloor,/obj/structure/prop/alien/dispenser,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"pO" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"qb" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"qe" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"qm" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"qo" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"qC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"qE" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"qL" = (/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"qP" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"qQ" = (/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"qS" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"qY" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/survivalpod/superpose/CrashedInfestedShip) +"ri" = (/obj/fire,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) +"ru" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"rx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"rI" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"rJ" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"rL" = (/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"rX" = (/obj/fire,/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"se" = (/obj/effect/alien/weeds/node,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"sn" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/device,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"sp" = (/obj/fire,/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"ss" = (/obj/structure/prop/alien/computer{dir = 1},/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"sC" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"sM" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"td" = (/obj/structure/table/alien,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"tr" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"tu" = (/obj/machinery/light/poi{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"tF" = (/obj/machinery/cryopod/robot,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"tK" = (/obj/structure/prop/alien/computer/hybrid,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"tN" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"tX" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"uf" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/alien/blue,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"uI" = (/obj/structure/salvageable/data_os,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"uQ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"uT" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"ve" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"vg" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) +"vm" = (/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"vv" = (/obj/fire,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"vJ" = (/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"vQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"vU" = (/obj/random/maintenance/engineering,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"vV" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"wn" = (/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"wr" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"wD" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"wK" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"xl" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"xs" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"xC" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"xG" = (/obj/structure/prop/alien/computer/hybrid{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"xT" = (/obj/structure/table/darkglass,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"ya" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"yi" = (/obj/structure/table/darkglass,/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"yv" = (/obj/structure/prop/fake_ai{name = "P0ps1ck13"},/obj/structure/window/reinforced/survival_pod{dir = 1},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"yI" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"yP" = (/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"yU" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"yY" = (/obj/structure/particle_accelerator/particle_emitter/right{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"zc" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"zj" = (/obj/fire,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"zu" = (/obj/structure/table/darkglass,/obj/random/maintenance/medical,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"zz" = (/obj/effect/floor_decal/techfloor,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"zD" = (/obj/machinery/field_generator{anchored = 1; state = 1},/obj/fire,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"zG" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"zH" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"zI" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"zV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Aj" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"AB" = (/obj/structure/cryofeed{dir = 4; pixel_x = 32},/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"AC" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"AL" = (/obj/structure/prop/alien/pod/open,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"AO" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"AP" = (/obj/machinery/vending/medical{dir = 4; emagged = 1; pixel_x = 5; req_access = list(777)},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"AR" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"AS" = (/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"AV" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastleft{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/crossbow/largecrossbow,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"Bd" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/alien,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Bf" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Bh" = (/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Bt" = (/obj/random/maintenance/clean,/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"BE" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"BH" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"Cl" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/machinery/light/poi,/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"Cr" = (/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/floor/airless,/area/survivalpod/superpose/CrashedInfestedShip) +"Cy" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"CG" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"CO" = (/turf/template_noop,/area/template_noop) +"CS" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"CY" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"Dg" = (/obj/fire,/obj/machinery/light/poi,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Dl" = (/obj/random/maintenance/medical,/obj/fire,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"Dn" = (/obj/structure/table/alien/blue,/obj/item/weapon/storage/belt/medical/alien{pixel_y = 6},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"Dv" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"DA" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/alien/blue,/obj/item/slime_cube,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"DF" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"DG" = (/obj/random/maintenance/clean,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"DJ" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"DK" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/tape_roll,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"DX" = (/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) +"Ee" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"Ej" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"El" = (/obj/structure/toilet{dir = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"Ep" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"EJ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"EM" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"EY" = (/obj/structure/lattice,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"EZ" = (/obj/structure/alien/wall,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"Ff" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"Fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"Fu" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"FU" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"FX" = (/obj/random/maintenance/cargo,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"FZ" = (/obj/machinery/shower{pixel_y = 16},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"Gd" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"GH" = (/obj/structure/window/reinforced/survival_pod{dir = 5},/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"GQ" = (/turf/simulated/shuttle/wall/alien/blue/hard_corner,/area/survivalpod/superpose/CrashedInfestedShip) +"GR" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"Hq" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/CrashedInfestedShip) +"HX" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"Ib" = (/obj/structure/cryofeed{pixel_x = -32},/obj/item/trash/material/circuit,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"Ir" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"Is" = (/obj/machinery/light/poi,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"It" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"II" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"IO" = (/obj/machinery/vending/coffee{categories = 3; dir = 8; name = "hacked Hot Drinks machine"; prices = list()},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"IW" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"Jh" = (/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Jt" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"JB" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"JD" = (/obj/structure/cryofeed{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/CrashedInfestedShip) +"JJ" = (/obj/random/maintenance/engineering,/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"JW" = (/obj/machinery/media/jukebox/casinojukebox,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"Kc" = (/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"Ko" = (/obj/machinery/power/emitter/gyrotron{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Kp" = (/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Kq" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/bed/chair/bay/comfy/teal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Kx" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) +"KB" = (/obj/effect/floor_decal/techfloor/corner{dir = 5},/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"KS" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/prop/alien/dispenser,/obj/machinery/light/poi{dir = 8},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"KT" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"La" = (/obj/machinery/door/window/survival_pod,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"LH" = (/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"LM" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"LY" = (/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"Md" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Mw" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Nd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Nm" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"ND" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"NI" = (/obj/structure/table/alien/blue,/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/clipboard,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"NJ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"NP" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"NS" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"NY" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) +"Oj" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"OS" = (/obj/machinery/light/poi{dir = 1},/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"OY" = (/obj/random/maintenance/engineering,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Pi" = (/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"Pq" = (/obj/effect/floor_decal/techfloor,/obj/machinery/chemical_dispenser/full{pixel_y = 11},/obj/structure/table/alien/blue,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Py" = (/obj/structure/cryofeed{pixel_x = -32},/obj/item/trash/material/metal,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"PB" = (/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"PF" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"PL" = (/obj/fire,/obj/item/trash/material/circuit,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"PR" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"PT" = (/obj/machinery/computer/crew{icon = 'icons/obj/abductor_vr.dmi'; icon_screen = null; icon_state = "console-c"},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"Qe" = (/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"Qf" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Qi" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Qu" = (/obj/structure/table/alien/blue,/obj/machinery/door/window/brigdoor/northright{dir = 2; req_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"QH" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"QT" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/random/maintenance/medical,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Re" = (/obj/fire,/obj/item/trash/material/device,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Rs" = (/obj/fire,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"RC" = (/obj/fire,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"RT" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"RY" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"Sd" = (/obj/machinery/door/airlock/alien{req_one_access = null},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Sh" = (/obj/fire,/turf/template_noop,/area/template_noop) +"SE" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/random/maintenance/engineering,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"SI" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"SK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"SO" = (/obj/structure/table/darkglass,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"SS" = (/turf/simulated/shuttle/wall/alien/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"SY" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Ta" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Ti" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/bay/comfy/teal{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Tn" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Tr" = (/obj/structure/table/alien/blue,/obj/machinery/door/window/brigdoor/northright{req_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/CrashedInfestedShip) +"Tx" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"TD" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"TF" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"TH" = (/obj/effect/floor_decal/techfloor,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"TK" = (/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"TL" = (/obj/effect/floor_decal/techfloor,/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alien,/area/survivalpod/superpose/CrashedInfestedShip) +"TM" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Um" = (/turf/simulated/shuttle/floor/white,/area/template_noop) +"Un" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Up" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Uu" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 4},/turf/template_noop,/area/template_noop) +"Uy" = (/obj/fire,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"UH" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"UI" = (/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"US" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Vk" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"Vq" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"Vr" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Vu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/obj/random/maintenance/clean,/obj/fire,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Vw" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/CrashedInfestedShip) +"VF" = (/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"VL" = (/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"VP" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"VR" = (/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"VS" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"VV" = (/obj/random/maintenance/cargo,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"VX" = (/obj/machinery/light/poi{dir = 4},/obj/structure/prop/poicanister{icon_state = "orangeps-1"},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Wr" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"WD" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/CrashedInfestedShip) +"WJ" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"WQ" = (/obj/structure/bed/nest,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/CrashedInfestedShip) +"WT" = (/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"WX" = (/obj/machinery/vending/tool{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/CrashedInfestedShip) +"Xb" = (/obj/structure/closet/secure_closet/egg/xenomorph,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Xe" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/CrashedInfestedShip) +"Xg" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Xi" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"Xo" = (/obj/fire,/obj/item/trash/material/metal,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"Xv" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/CrashedInfestedShip) +"XA" = (/obj/structure/particle_accelerator/fuel_chamber{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"XC" = (/obj/structure/closet/alien,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/CrashedInfestedShip) +"XF" = (/obj/fire,/obj/fire,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"XJ" = (/obj/random/maintenance/medical,/turf/simulated/shuttle/floor/white,/area/template_noop) +"XY" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Yi" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"Yw" = (/obj/structure/alien/wall,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Yx" = (/obj/structure/alien/membrane,/turf/template_noop,/area/survivalpod/superpose/CrashedInfestedShip) +"YA" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CrashedInfestedShip) +"YP" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/template_noop) +"Zh" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/filingcabinet/medical,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/CrashedInfestedShip) +"Zl" = (/obj/random/maintenance/clean,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"Zp" = (/obj/machinery/computer/operating{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"Zq" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/CrashedInfestedShip) +"ZQ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) +"ZX" = (/obj/fire,/obj/fire,/turf/simulated/shuttle/floor/alienplating,/area/survivalpod/superpose/CrashedInfestedShip) + +(1,1,1) = {" +COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOGQSSGQGQEZEZGQGQGQvVjWjWDJGQSSCOCOCOCOCOCOCOCOCOCOCOCOCO +COCOGQGQGQGQGQGQGQbvbvWTGQGQGQSSCOCOCOCOCOCOCOCOCOCOCOCOWTGQVFVFtKgKOSGQXegzgzgzgzXeGQSSCOCOCOCOCOCOCOCOCOCOCOCO +COCOWTGQkObwqeaophdzUpNdTDVFGQWTSSCOGQGQwDGQGQSSCOCOCOYPWTGQkDkDKpXikDKpUISOxTyixTUIJWGQSSCOCOCOCOCOCOCOCOCOCOCO +COCOWTGQnCntxsTaxsSKzVLMJtVXGQqmWTGQSSWXjinBhwGQPiCOCOCOGQGQoMoMCyoMXYKpVqbObObObOVqVqmvGQCOCOCOCOCOCOCOCOCOCOCO +UuCOWTGQWTbveErJpOeIgdRCOYbvgWWTbvGQmQLYcPcPcPGQPiPiCOCOCOGQjZClALVkYAGQVkVkVkIsVkVkVkIOGQSSCOCOCOCOCOCOCOCOCOCO +COCOSSGQmKUSZqVuTFItmHqSmmqSjgOYbmgWIWIWLYcPLYohGQPiPiwDGQGQGQGQGQgWGQGQGQgWGQGQGQGQGQGQGQGQSSCOCOCOCOCOCOCOCOCO +GQGQGQGQpiGQvVjWjWjWDJGQCYGQGQJJWTGQufMdMdKqMdZhGQSSHXMwbmvmetBtbNvmiGetvmvmbmbmbmbmTMbmHXSSGQGQnXnXYwCOCOCOCOCO +mpWTGQSSCSeGfDfDNSCSCSqPCSSSGQvmbvGQGQDKveQuNIGQGQqQPLZXZXvmvmLHLHZXMwMwbmbmbmUHbmbNbmbmbmFuGQoRWTNYGQSSCOCOCOCO +ShbvGQzIzDJhJhwnJhJhsCJhVkFUgWbmZXMwbmbmVVvmFXbmbmbmvmGQGQgWGQGQGQgWGQGQGQgWGQGQGQgWGQGQbmbmgWbmXvcSGQGQwDGQSSCO +biGdGdzGgmRsJhsCGdPiNPVkiqwKGQgBCSfDTHtXSIbITLRYBHRYSYGQDFqQBEGQUIUIeBGQUIUIeBGQUIUIeBGQbmdNGQbmXvNYGQfmdxPTGQSS +PiPiPiYiPiPilpEYPizjlpXFNPFUjgkVjqTnjqjqcXgmJhDgNPJhFUGQfAyvJDGQqCKcAjGQqCfckSGQqCXvvgGQbmbmDXbNbmbmGQKSARNmPiEZ +biWTGQZQJhPiGdbcbcbcEYJhVRrLfiBfEpVSexQHQiJhSSSSSSJhrLGQatdSatGQzuruiwGQyijKrIGQyiKxNYGQCSCSGQCSCSCSgWCSzzPitdfi +biWTGQNPJhPiGdrigtCrPiGdNPvJPRBfiQVkXAdCQiJhxCuIxCJhNPGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQNPNPGQtuDGqbGQjmDGNPVPPR +biWTGQaJRsNPEYbcririPimtNPASnxBfyYzczcuTQiJhSSSSSSJhASGQAVHqkNGQyisMrIGQzucfWQGQxTWDiwGQjrjrGQasasasgWjrjraJtdnx +GQGQWTobJhNPEYPiPiEYEYJhNPFUjgKBEjMdMdEjiMspJhUyqENPVrGQdgyPhRGQvQfckSGQvQTKEeGQvQKcAjGQbmbmGQWTWTWTGQpCCSJBnvGQ +biWTPiYiJhRsJhPiPiNPNPRsqEwKGQdYNJjbEJNJQTNJlyGRCGsnbpGQDAFmDAGQqLUIeBGQUIUIeBGQUIUIeBGQbmdNGQboWTboGQcByassGQSS +biWTPizIVRNPJhsCReXoJhjIVkFUgWvmMwvmvmvmisvmbmVLisPLbmGQGQoIGQGQGQgWGQGQGQgWGQGQGQgWGQGQbNvUGQboseXbGQGQwDGQSSCO +biPiWTSSjrWrjrjrjrjrjrtNjrSSGQvmbmGQGQIrbHTriyGQGQqQPibmvmvmvmvmiGvmisMwMwbmbmbmbmbmbmbmbmPiGQboWTboGQSSCOCOCOCO +PiPiGQGQpiGQvVjWjWjWDJGQCYGQGQvmbmPiPqyIyITiyIUnGQSSdbPiyUMwMwvmZlvmbmrXiGepvmbNbmbmyUbmHXPiEZGQGQGQSSCOCOCOCOCO +COCOSSGQKohVuQuQuQuQqohVKohVjgvmbmFfvvDlvvXJXJUmDnPiPidFGQPiPiGQGQgWGQGQGQgWGQGQGQSdGQGQGQYxEZCOCOCOCOCOCOCOCOCO +COCOWTGQWTbvkuSESESEffWTWTbvgWbmqQPiXCdeDlvvdeAPGQPiCOCOCOPiqYALRTVkEMGQIbVkmTGQnjPBLaFZGQPiCOCOCOCOCOCOCOCOCOCO +COCOWTGQnCrxlJKTlJNDOjzHIIjhGQHXSSPiSSWJpuaHZpWTSSCOCOCOGQPidBAOTxAOgcGQPFjdABGQPBPBGHGQGQCOCOCOCOCOCOCOCOCOCOCO +UuCOWTGQkOBdtraophdzxlwrACVFWTGQSSCOGQGQDvmyWTSSCOCOCOCOWTPicLcLWTcLQfGQPyqQXgGQQeopVwGQSSCOCOCOCOCOCOCOCOCOCOCO +COCOGQGQGQGQGQGQWTWTWTWTGQWTWTSSCOCOCOCOCOCOCOCOCOCOCOCOPikUjhjhxGVFjhGQtFyUBhGQElGQGQSSCOCOCOCOCOCOCOCOCOCOCOCO +COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOGQGQGQWTWTWTGQGQGQGQGQGQGQGQSSCOCOCOCOCOCOCOCOCOCOCOCOCO +"} diff --git a/modular_chomp/maps/submaps/shelters/CrashedQurantineShip-25x17.dmm b/modular_chomp/maps/submaps/shelters/CrashedQurantineShip-25x17.dmm index e85fb816d4..11de42ba7d 100644 --- a/modular_chomp/maps/submaps/shelters/CrashedQurantineShip-25x17.dmm +++ b/modular_chomp/maps/submaps/shelters/CrashedQurantineShip-25x17.dmm @@ -1,1505 +1,1505 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"ac" = ( -/obj/item/clothing/head/cone, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"ad" = ( -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"ae" = ( -/obj/item/weapon/tool/crowbar/red, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"af" = ( -/obj/item/trash/chips, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ag" = ( -/obj/random/maintenance, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ah" = ( -/obj/machinery/door/blast/regular{ - name = "Cargo Door" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ai" = ( -/obj/item/trash/cigbutt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aj" = ( -/obj/machinery/door/airlock/command{ - icon_state = "door_locked"; - locked = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ak" = ( -/obj/item/weapon/tank/emergency/oxygen/engi, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"al" = ( -/obj/structure/sign/biohazard{ - dir = 1 - }, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"am" = ( -/obj/machinery/door/airlock{ - name = "Restroom" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"an" = ( -/obj/machinery/vending/snack{ - contraband = null; - products = list(/obj/item/weapon/reagent_containers/food/snacks/candy=0,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen=0,/obj/item/weapon/reagent_containers/food/snacks/chips=0,/obj/item/weapon/reagent_containers/food/snacks/sosjerky=0,/obj/item/weapon/reagent_containers/food/snacks/no_raisin=0,/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie=0,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers=0,/obj/item/weapon/reagent_containers/food/snacks/tastybread=0,/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks=0) - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ao" = ( -/obj/item/weapon/pickaxe/drill, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ap" = ( -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aq" = ( -/obj/machinery/button{ - name = "Cargo Hatch" - }, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"ar" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"as" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"at" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"au" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"av" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "door_locked"; - locked = 1; - name = "Cargo Bay" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aw" = ( -/obj/item/weapon/material/shard, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ax" = ( -/obj/random/paicard, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ay" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/under/mbill{ - desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; - name = "\improper old Major Bill's uniform" - }, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"az" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aA" = ( -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aB" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"aC" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"aD" = ( -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aE" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"aF" = ( -/obj/item/clothing/suit/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aG" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aH" = ( -/obj/item/trash/candy, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aI" = ( -/obj/structure/table/rack, -/obj/structure/loot_pile/maint/boxfort, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aJ" = ( -/obj/structure/table/rack, -/obj/item/weapon/shovel, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aK" = ( -/obj/structure/closet/crate/secure/science{ - icon_state = "scisecurecrateopen"; - locked = 0; - name = "Virus Samples - FRAGILE"; - opened = 1 - }, -/obj/item/weapon/virusdish/random, -/obj/item/weapon/virusdish/random, -/obj/item/weapon/virusdish/random, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aL" = ( -/obj/structure/table/standard, -/obj/item/device/taperecorder, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"aM" = ( -/obj/structure/inflatable/door, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"aO" = ( -/obj/structure/inflatable, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"aP" = ( -/obj/structure/bed/chair, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aQ" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aR" = ( -/obj/structure/bed/chair, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aS" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aT" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aU" = ( -/obj/effect/decal/remains/xeno, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aV" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aW" = ( -/obj/item/weapon/coin/silver, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aX" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"aZ" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bf" = ( -/obj/item/weapon/tank/emergency/oxygen/engi, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bh" = ( -/obj/item/trash/sosjerky, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bi" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bj" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"bk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"bl" = ( -/obj/machinery/button{ - dir = 4; - name = "Cargo Access" - }, -/turf/simulated/shuttle/wall, -/area/survivalpod/superpose/CrashedQurantineShip) -"bm" = ( -/obj/machinery/recharge_station, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"bn" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"bo" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bp" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bq" = ( -/obj/machinery/door/airlock{ - name = "Charge Station" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bs" = ( -/obj/structure/bed/chair, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bt" = ( -/obj/structure/bed/chair, -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bu" = ( -/obj/machinery/vending/cola{ - contraband = null; - products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind=0,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb=0,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist=0,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up=0,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea=0,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice=0,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale=0) - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bv" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bw" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bx" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"by" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bz" = ( -/obj/item/trash/syndi_cakes, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bA" = ( -/obj/item/trash/cigbutt, -/obj/item/weapon/tank/emergency/oxygen, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bB" = ( -/obj/item/weapon/material/knife/tacknife/boot, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bD" = ( -/obj/item/trash/sosjerky, -/obj/item/weapon/storage/box/donut/empty, -/obj/item/weapon/reagent_containers/food/drinks/sillycup, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bE" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"bF" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"bG" = ( -/obj/item/trash/tastybread, -/obj/item/weapon/material/butterfly/boxcutter, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bH" = ( -/obj/structure/salvageable/data_os, -/turf/simulated/shuttle/floor, -/area/survivalpod/superpose/CrashedQurantineShip) -"bI" = ( -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/cleanable/mucus/mapped, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bJ" = ( -/obj/item/trash/cheesie, -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bL" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/breath, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bM" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bN" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bO" = ( -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bP" = ( -/obj/item/weapon/virusdish/random, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bQ" = ( -/obj/structure/ore_box, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bR" = ( -/obj/effect/decal/remains/mouse, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bS" = ( -/obj/item/tape/medical{ - icon_state = "tape_v_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"bT" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/remains/human, -/obj/item/clothing/under/mbill{ - desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; - name = "\improper old Major Bill's uniform" - }, -/obj/item/clothing/head/soft/mbill{ - desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; - name = "old shipping cap" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bV" = ( -/obj/item/taperoll/medical, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"bW" = ( -/obj/effect/decal/remains/human, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bX" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/remains/xeno, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"bY" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"bZ" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/weapon/card/id/external{ - desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; - name = "VIMC identification card"; - rank = "Miner"; - registered_name = "Nadia Chu" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ca" = ( -/obj/item/tape/medical{ - dir = 1; - icon_state = "tape_dir_0" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_dir_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"cb" = ( -/obj/structure/table/rack, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cc" = ( -/obj/item/poster, -/turf/simulated/shuttle/floor{ - icon_state = "floor_yellow" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"cd" = ( -/obj/item/tape/medical{ - icon_state = "tape_h_0" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"ce" = ( -/obj/structure/lattice, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"cf" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_l" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"ch" = ( -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"cj" = ( -/obj/machinery/door/airlock/external{ - desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; - frequency = 1380; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "MBT-540" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor_white" - }, -/area/survivalpod/superpose/CrashedQurantineShip) -"ck" = ( -/obj/structure/sign/biohazard, -/turf/simulated/shuttle/wall/hard_corner, -/area/survivalpod/superpose/CrashedQurantineShip) -"cl" = ( -/obj/structure/grille, -/obj/structure/shuttle/window, -/obj/machinery/door/blast/regular{ - dir = 8; - id = "QShuttlePoIDoors"; - layer = 3.3; - name = "Emergency Lockdown Shutters" - }, -/obj/item/tape/medical{ - dir = 4; - icon_state = "tape_door_0"; - layer = 3.4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/CrashedQurantineShip) -"cm" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"cn" = ( -/obj/structure/sign/kiddieplaque{ - desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; - name = "\improper Sif Department of Disease Control notice" - }, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"hs" = ( -/obj/item/bodybag, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"hJ" = ( -/obj/structure/table/steel, -/obj/item/weapon/storage/box/bodybags, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"jX" = ( -/obj/structure/table/steel, -/obj/item/weapon/tool/crowbar/power, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"ky" = ( -/obj/structure/closet/crate/medical, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"vi" = ( -/obj/structure/table/steel, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"Ll" = ( -/obj/structure/sign/warning, -/turf/simulated/wall/iron, -/area/survivalpod/superpose/CrashedQurantineShip) -"Lm" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"MX" = ( -/obj/structure/table/steel, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"Pl" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"TE" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/bio_hood, -/obj/item/clothing/suit/bio_suit, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"UU" = ( -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"WS" = ( -/obj/item/weapon/weldingtool/largetank, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"Xh" = ( -/obj/structure/table/steel, -/obj/item/clothing/suit/bio_suit, -/obj/random/medical/lite, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) -"Yj" = ( -/obj/structure/closet/l3closet/virology, -/turf/simulated/mineral/floor/ignore_mapgen, -/area/survivalpod/superpose/CrashedQurantineShip) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -ab -ac -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -ab -ab -ab -ad -cl -cl -cl -ad -ab -ac -ab -ab -ab -ac -aa -"} -(4,1,1) = {" -aa -aa -ab -ab -ad -ad -ar -ay -ar -ad -ad -ab -ab -ab -ab -ab -ab -"} -(5,1,1) = {" -aa -aa -ab -ad -ad -ad -as -ai -bT -ad -ad -ad -bS -ca -ab -ab -ab -"} -(6,1,1) = {" -aa -aa -ab -cl -bn -ad -bH -ai -aL -ad -bm -cl -ab -cd -ab -Pl -ky -"} -(7,1,1) = {" -aa -aa -aO -ch -am -ad -ad -aj -ad -ad -bq -ch -aO -cd -ab -vi -vi -"} -(8,1,1) = {" -aa -aa -aM -cj -bo -aD -bJ -ak -ae -bW -bG -cj -aO -cd -ab -MX -ab -"} -(9,1,1) = {" -aa -aa -aO -cj -bp -by -bU -az -af -aW -bI -cj -aM -cd -ab -Lm -ab -"} -(10,1,1) = {" -aa -aa -aO -al -ad -ap -at -ad -aP -aA -ad -ck -aO -cd -ab -jX -ab -"} -(11,1,1) = {" -aa -aa -ab -cl -bs -bz -bL -aB -aR -aX -bX -cl -ab -cd -ce -TE -ab -"} -(12,1,1) = {" -aa -aa -aa -ad -bs -aA -aQ -aC -aS -aA -aQ -ad -ab -cd -cm -ab -ab -"} -(13,1,1) = {" -aa -aa -aa -cl -bt -bA -aQ -aE -aT -aZ -bZ -cl -ab -cd -cn -ab -ab -"} -(14,1,1) = {" -aa -aa -ab -ad -ad -bB -au -ad -aP -bf -ad -ad -ab -cd -Ll -WS -ab -"} -(15,1,1) = {" -aa -ab -ab -ad -an -bW -bN -aF -bU -bh -cb -ad -bV -cd -hs -ab -ab -"} -(16,1,1) = {" -aa -ac -ab -ad -bu -bD -bO -aH -aU -bi -bM -ad -ab -cd -hs -hs -aa -"} -(17,1,1) = {" -aa -ab -ab -ad -ad -ad -av -ad -av -ad -ad -ad -ab -cd -hs -hs -aa -"} -(18,1,1) = {" -aa -ab -ab -ad -bv -bE -bP -aI -aV -bj -bQ -ad -ab -cd -ab -ab -aa -"} -(19,1,1) = {" -aa -aa -ab -ad -ao -aG -aA -aA -aA -aG -cc -ad -ab -cd -hJ -ab -aa -"} -(20,1,1) = {" -aa -aa -ab -ad -bw -bF -aw -aJ -bR -bk -aA -ad -bY -cd -Xh -ab -aa -"} -(21,1,1) = {" -aa -ad -ad -ad -ad -ad -ax -aA -bP -ad -ad -ad -ad -ad -Yj -ab -ab -"} -(22,1,1) = {" -aa -ad -bx -ad -bx -aq -aA -aK -ag -ad -bx -ad -bx -ad -ab -ab -ab -"} -(23,1,1) = {" -ab -ad -cf -ad -cf -ad -ah -ah -ah -bl -cf -ad -cf -ad -UU -ab -ac -"} -(24,1,1) = {" -ab -ac -ab -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"ac" = ( +/obj/item/clothing/head/cone, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"ad" = ( +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"ae" = ( +/obj/item/weapon/tool/crowbar/red, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"af" = ( +/obj/item/trash/chips, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ag" = ( +/obj/random/maintenance, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ah" = ( +/obj/machinery/door/blast/regular{ + name = "Cargo Door" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ai" = ( +/obj/item/trash/cigbutt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aj" = ( +/obj/machinery/door/airlock/command{ + icon_state = "door_locked"; + locked = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ak" = ( +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"al" = ( +/obj/structure/sign/biohazard{ + dir = 1 + }, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"am" = ( +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"an" = ( +/obj/machinery/vending/snack{ + contraband = null; + products = list(/obj/item/weapon/reagent_containers/food/snacks/candy=0,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen=0,/obj/item/weapon/reagent_containers/food/snacks/chips=0,/obj/item/weapon/reagent_containers/food/snacks/sosjerky=0,/obj/item/weapon/reagent_containers/food/snacks/no_raisin=0,/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie=0,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers=0,/obj/item/weapon/reagent_containers/food/snacks/tastybread=0,/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks=0) + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ao" = ( +/obj/item/weapon/pickaxe/drill, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ap" = ( +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aq" = ( +/obj/machinery/button{ + name = "Cargo Hatch" + }, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"ar" = ( +/obj/machinery/computer{ + dir = 4 + }, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"as" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"at" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"au" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"av" = ( +/obj/machinery/door/airlock/engineering{ + icon_state = "door_locked"; + locked = 1; + name = "Cargo Bay" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aw" = ( +/obj/item/weapon/material/shard, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ax" = ( +/obj/random/paicard, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ay" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/under/mbill{ + desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; + name = "\improper old Major Bill's uniform" + }, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"az" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aA" = ( +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aB" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"aC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"aD" = ( +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"aF" = ( +/obj/item/clothing/suit/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aG" = ( +/obj/machinery/door/airlock/glass, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aH" = ( +/obj/item/trash/candy, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aI" = ( +/obj/structure/table/rack, +/obj/structure/loot_pile/maint/boxfort, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aJ" = ( +/obj/structure/table/rack, +/obj/item/weapon/shovel, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aK" = ( +/obj/structure/closet/crate/secure/science{ + icon_state = "scisecurecrateopen"; + locked = 0; + name = "Virus Samples - FRAGILE"; + opened = 1 + }, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aL" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"aM" = ( +/obj/structure/inflatable/door, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"aO" = ( +/obj/structure/inflatable, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"aP" = ( +/obj/structure/bed/chair, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aQ" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aR" = ( +/obj/structure/bed/chair, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aS" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aT" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aU" = ( +/obj/effect/decal/remains/xeno, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aV" = ( +/obj/item/weapon/material/shard{ + icon_state = "medium" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aW" = ( +/obj/item/weapon/coin/silver, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aX" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"aZ" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bf" = ( +/obj/item/weapon/tank/emergency/oxygen/engi, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bh" = ( +/obj/item/trash/sosjerky, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bi" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"bk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"bl" = ( +/obj/machinery/button{ + dir = 4; + name = "Cargo Access" + }, +/turf/simulated/shuttle/wall, +/area/survivalpod/superpose/CrashedQurantineShip) +"bm" = ( +/obj/machinery/recharge_station, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"bn" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"bo" = ( +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bp" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bq" = ( +/obj/machinery/door/airlock{ + name = "Charge Station" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bs" = ( +/obj/structure/bed/chair, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bt" = ( +/obj/structure/bed/chair, +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bu" = ( +/obj/machinery/vending/cola{ + contraband = null; + products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind=0,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb=0,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist=0,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle=0,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up=0,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea=0,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice=0,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale=0) + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bv" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bw" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bx" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"by" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bz" = ( +/obj/item/trash/syndi_cakes, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bA" = ( +/obj/item/trash/cigbutt, +/obj/item/weapon/tank/emergency/oxygen, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bB" = ( +/obj/item/weapon/material/knife/tacknife/boot, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bD" = ( +/obj/item/trash/sosjerky, +/obj/item/weapon/storage/box/donut/empty, +/obj/item/weapon/reagent_containers/food/drinks/sillycup, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"bF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"bG" = ( +/obj/item/trash/tastybread, +/obj/item/weapon/material/butterfly/boxcutter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bH" = ( +/obj/structure/salvageable/data_os, +/turf/simulated/shuttle/floor, +/area/survivalpod/superpose/CrashedQurantineShip) +"bI" = ( +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/cleanable/mucus/mapped, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bJ" = ( +/obj/item/trash/cheesie, +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bL" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/remains/human, +/obj/item/clothing/mask/breath, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bM" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bN" = ( +/obj/effect/decal/cleanable/vomit, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bO" = ( +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bP" = ( +/obj/item/weapon/virusdish/random, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bQ" = ( +/obj/structure/ore_box, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bR" = ( +/obj/effect/decal/remains/mouse, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bS" = ( +/obj/item/tape/medical{ + icon_state = "tape_v_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"bT" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/decal/remains/human, +/obj/item/clothing/under/mbill{ + desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; + name = "\improper old Major Bill's uniform" + }, +/obj/item/clothing/head/soft/mbill{ + desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; + name = "old shipping cap" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bV" = ( +/obj/item/taperoll/medical, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"bW" = ( +/obj/effect/decal/remains/human, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bX" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/remains/xeno, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"bY" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"bZ" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/item/weapon/card/id/external{ + desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; + name = "VIMC identification card"; + rank = "Miner"; + registered_name = "Nadia Chu" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ca" = ( +/obj/item/tape/medical{ + dir = 1; + icon_state = "tape_dir_0" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_dir_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"cb" = ( +/obj/structure/table/rack, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cc" = ( +/obj/item/poster, +/turf/simulated/shuttle/floor{ + icon_state = "floor_yellow" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"cd" = ( +/obj/item/tape/medical{ + icon_state = "tape_h_0" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"ce" = ( +/obj/structure/lattice, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"cf" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"ch" = ( +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"cj" = ( +/obj/machinery/door/airlock/external{ + desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; + frequency = 1380; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "MBT-540" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_white" + }, +/area/survivalpod/superpose/CrashedQurantineShip) +"ck" = ( +/obj/structure/sign/biohazard, +/turf/simulated/shuttle/wall/hard_corner, +/area/survivalpod/superpose/CrashedQurantineShip) +"cl" = ( +/obj/structure/grille, +/obj/structure/shuttle/window, +/obj/machinery/door/blast/regular{ + dir = 8; + id = "QShuttlePoIDoors"; + layer = 3.3; + name = "Emergency Lockdown Shutters" + }, +/obj/item/tape/medical{ + dir = 4; + icon_state = "tape_door_0"; + layer = 3.4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/CrashedQurantineShip) +"cm" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"cn" = ( +/obj/structure/sign/kiddieplaque{ + desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; + name = "\improper Sif Department of Disease Control notice" + }, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"hs" = ( +/obj/item/bodybag, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"hJ" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/box/bodybags, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"jX" = ( +/obj/structure/table/steel, +/obj/item/weapon/tool/crowbar/power, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"ky" = ( +/obj/structure/closet/crate/medical, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"vi" = ( +/obj/structure/table/steel, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"Ll" = ( +/obj/structure/sign/warning, +/turf/simulated/wall/iron, +/area/survivalpod/superpose/CrashedQurantineShip) +"Lm" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"MX" = ( +/obj/structure/table/steel, +/obj/item/weapon/reagent_containers/syringe/antiviral, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"Pl" = ( +/obj/structure/dispenser/oxygen, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"TE" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/bio_hood, +/obj/item/clothing/suit/bio_suit, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"UU" = ( +/obj/item/weapon/reagent_containers/syringe/antiviral, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"WS" = ( +/obj/item/weapon/weldingtool/largetank, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"Xh" = ( +/obj/structure/table/steel, +/obj/item/clothing/suit/bio_suit, +/obj/random/medical/lite, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) +"Yj" = ( +/obj/structure/closet/l3closet/virology, +/turf/simulated/mineral/floor/ignore_mapgen, +/area/survivalpod/superpose/CrashedQurantineShip) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +ab +ac +ab +aa +aa +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +ab +ab +ab +ad +cl +cl +cl +ad +ab +ac +ab +ab +ab +ac +aa +"} +(4,1,1) = {" +aa +aa +ab +ab +ad +ad +ar +ay +ar +ad +ad +ab +ab +ab +ab +ab +ab +"} +(5,1,1) = {" +aa +aa +ab +ad +ad +ad +as +ai +bT +ad +ad +ad +bS +ca +ab +ab +ab +"} +(6,1,1) = {" +aa +aa +ab +cl +bn +ad +bH +ai +aL +ad +bm +cl +ab +cd +ab +Pl +ky +"} +(7,1,1) = {" +aa +aa +aO +ch +am +ad +ad +aj +ad +ad +bq +ch +aO +cd +ab +vi +vi +"} +(8,1,1) = {" +aa +aa +aM +cj +bo +aD +bJ +ak +ae +bW +bG +cj +aO +cd +ab +MX +ab +"} +(9,1,1) = {" +aa +aa +aO +cj +bp +by +bU +az +af +aW +bI +cj +aM +cd +ab +Lm +ab +"} +(10,1,1) = {" +aa +aa +aO +al +ad +ap +at +ad +aP +aA +ad +ck +aO +cd +ab +jX +ab +"} +(11,1,1) = {" +aa +aa +ab +cl +bs +bz +bL +aB +aR +aX +bX +cl +ab +cd +ce +TE +ab +"} +(12,1,1) = {" +aa +aa +aa +ad +bs +aA +aQ +aC +aS +aA +aQ +ad +ab +cd +cm +ab +ab +"} +(13,1,1) = {" +aa +aa +aa +cl +bt +bA +aQ +aE +aT +aZ +bZ +cl +ab +cd +cn +ab +ab +"} +(14,1,1) = {" +aa +aa +ab +ad +ad +bB +au +ad +aP +bf +ad +ad +ab +cd +Ll +WS +ab +"} +(15,1,1) = {" +aa +ab +ab +ad +an +bW +bN +aF +bU +bh +cb +ad +bV +cd +hs +ab +ab +"} +(16,1,1) = {" +aa +ac +ab +ad +bu +bD +bO +aH +aU +bi +bM +ad +ab +cd +hs +hs +aa +"} +(17,1,1) = {" +aa +ab +ab +ad +ad +ad +av +ad +av +ad +ad +ad +ab +cd +hs +hs +aa +"} +(18,1,1) = {" +aa +ab +ab +ad +bv +bE +bP +aI +aV +bj +bQ +ad +ab +cd +ab +ab +aa +"} +(19,1,1) = {" +aa +aa +ab +ad +ao +aG +aA +aA +aA +aG +cc +ad +ab +cd +hJ +ab +aa +"} +(20,1,1) = {" +aa +aa +ab +ad +bw +bF +aw +aJ +bR +bk +aA +ad +bY +cd +Xh +ab +aa +"} +(21,1,1) = {" +aa +ad +ad +ad +ad +ad +ax +aA +bP +ad +ad +ad +ad +ad +Yj +ab +ab +"} +(22,1,1) = {" +aa +ad +bx +ad +bx +aq +aA +aK +ag +ad +bx +ad +bx +ad +ab +ab +ab +"} +(23,1,1) = {" +ab +ad +cf +ad +cf +ad +ah +ah +ah +bl +cf +ad +cf +ad +UU +ab +ac +"} +(24,1,1) = {" +ab +ac +ab +aa +aa +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/modular_chomp/maps/submaps/shelters/CultShip-28x17.dmm b/modular_chomp/maps/submaps/shelters/CultShip-28x17.dmm index 56d39e36d9..b251b5ee73 100644 --- a/modular_chomp/maps/submaps/shelters/CultShip-28x17.dmm +++ b/modular_chomp/maps/submaps/shelters/CultShip-28x17.dmm @@ -1,106 +1,106 @@ -"aw" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/CultShip) -"aP" = (/obj/structure/table/fancyblack,/obj/item/weapon/book/tome/imbued,/obj/item/weapon/digestion_remains/skull/unathi,/obj/item/device/soulstone,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"be" = (/obj/structure/cult/pylon,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"bq" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"bW" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"cH" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"dJ" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"eP" = (/obj/structure/shuttle/engine/heater{dir = 4; icon_state = "heater"},/turf/simulated/wall/cult,/area/survivalpod/superpose/CultShip) -"fd" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/hosdouble,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"fw" = (/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = -3},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"fZ" = (/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"gU" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"he" = (/obj/structure/cult/pylon,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"jq" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/floortube/flicker{pixel_y = 13},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"js" = (/obj/effect/floor_decal/techfloor/corner{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"jv" = (/obj/structure/cult/talisman,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"jO" = (/obj/effect/catwalk_plated/white,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"kf" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"kT" = (/obj/structure/bed/chair/bay/comfy/purple{dir = 8},/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"mT" = (/obj/structure/toilet/prison{name = "toilet"; pixel_y = 10},/obj/structure/window/reinforced/survival_pod{dir = 4; opacity = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"nj" = (/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = 5},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) -"nq" = (/obj/item/weapon/melee/cultblade,/obj/structure/table/fancyblack,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"oY" = (/obj/structure/cult/talisman,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"py" = (/obj/machinery/door/airlock/phoron,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"pJ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) -"rC" = (/obj/structure/constructshell/cult,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"us" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"vf" = (/turf/simulated/wall/phoron,/area/survivalpod/superpose/CultShip) -"vl" = (/obj/machinery/light/floortube/flicker{pixel_y = 5},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"vG" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) -"vX" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"wl" = (/obj/effect/floor_decal/techfloor/corner,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"xg" = (/obj/effect/floor_decal/techfloor,/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"xh" = (/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"xq" = (/obj/effect/catwalk_plated/dark,/obj/machinery/pointdefense,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"yi" = (/obj/structure/closet/walllocker_double/north,/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"ym" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"yq" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"yE" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/random/soap{pixel_y = 5},/obj/random/soap,/obj/item/weapon/towel/random{pixel_y = 4},/obj/item/weapon/towel/random{pixel_y = 4},/obj/item/weapon/towel/random{pixel_y = 8},/obj/item/weapon/towel/random{pixel_y = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Ai" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/floortube/flicker{pixel_y = -3},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Bw" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"BV" = (/obj/item/weapon/storage/backpack/cultpack,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"CY" = (/obj/machinery/porta_turret/alien/destroyed,/obj/effect/catwalk_plated/white,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"De" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Dz" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"EA" = (/obj/structure/cult/tome,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"Ff" = (/obj/effect/catwalk_plated/white,/obj/machinery/pointdefense,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Fw" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"HF" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"II" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"IX" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"Kj" = (/obj/structure/closet/cabinet,/obj/random/curseditem,/obj/random/curseditem,/obj/item/weapon/melee/cursedblade,/obj/item/weapon/melee/cultblade,/obj/item/weapon/beartrap/hunting,/obj/item/weapon/beartrap/hunting,/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/phoron{amount = 25},/obj/item/device/soulstone,/obj/item/device/soulstone,/obj/item/weapon/storage/belt/soulstone/full,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"Kq" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Kt" = (/obj/machinery/power/port_gen/pacman,/obj/item/stack/material/phoron{amount = 25},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"KV" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"Ln" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"LR" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = -3},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) -"Md" = (/obj/machinery/porta_turret/alien/destroyed,/obj/effect/catwalk_plated/dark,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Mg" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) -"Mh" = (/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"Mo" = (/obj/effect/floor_decal/techfloor,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) -"MH" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"Nl" = (/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"NH" = (/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"NJ" = (/obj/item/weapon/material/knife/ritual,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"NQ" = (/obj/effect/catwalk_plated/dark,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"Oh" = (/obj/structure/salvageable/console_os{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) -"Op" = (/obj/structure/constructshell/cult,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"ON" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"OU" = (/obj/structure/sink{dir = 4; pixel_x = 11},/obj/structure/mirror{dir = 8; pixel_x = 25},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Pi" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 4},/turf/simulated/floor/redgrid/animated,/area/survivalpod/superpose/CultShip) -"PR" = (/turf/simulated/floor/redgrid/animated,/area/survivalpod/superpose/CultShip) -"Qh" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"UE" = (/obj/structure/bed/chair/bay/comfy/purple{dir = 8},/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"UG" = (/turf/template_noop,/area/template_noop) -"VA" = (/obj/effect/floor_decal/emblem/black,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"VL" = (/obj/effect/floor_decal/techfloor/corner,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Wd" = (/obj/machinery/door/airlock/phoron,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"Wm" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"WT" = (/obj/structure/table/fancyblack,/obj/item/weapon/flame/candle/candelabra/everburn{pixel_y = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) -"Xw" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) -"Yl" = (/obj/effect/floor_decal/techfloor/corner{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) -"Yu" = (/obj/machinery/door/airlock/phoron,/obj/structure/fans/hardlight/colorable/abductor,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) -"YN" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/power/apc/alarms_hidden{dir = 1; pixel_y = 20},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) -"YO" = (/obj/structure/cult/talisman,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) -"ZJ" = (/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) - -(1,1,1) = {" -UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUG -UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGCYawawawUGUGUG -UGUGUGUGUGUGUGUGUGUGUGUGUGUGvfawyqkfQhawawawePZJZJUGUGUG -UGUGUGUGUGUGUGUGUGxqawyqkfQhawbeNlMhNlawYNKtIXZJZJUGUGUG -UGUGUGUGUGvfawYuawawawxhfZxhyiNlMhNlwlpyMgPRFwKVZJUGUGUG -UGMdawyqQhawpJnjawMhNlMhNlVLHFHFjqHFWmawLRgUawNQjONQUGUG -UGawawjvheawvGnjawNlOpNlOpDeawawyqQhawawMgPiawawawjOUGUG -UGymOhUEHFawawYuawHFHFHFHFcHawKjbqbqfdawMoxgvfePZJZJUGUG -UGdJONvlbqWdbqvlbqVAvlbqvlbqpybqbqbqWTawvlusvfePZJZJUGUG -UGXwOhkTbWawbWbWbWbWbWbWbWIIawBwaPbqfdawawawvfePKVZJUGUG -UGawawoYbeawNlMhNlMhrCMhrCDeawawyqQhawawmTvXawawawNQUGUG -UGCYawyqQhawMHEAYODzMhNlMhYlbWbWAibWNHawfwOUawjONQjOUGUG -UGUGUGUGUGvfawawawawawnqBVNJNlMhNlMhjspyLnLnIXZJZJUGUGUG -UGUGUGUGUGUGUGUGUGFfawyqkfQhawheMhNlMhawKqyEFwZJZJUGUGUG -UGUGUGUGUGUGUGUGUGUGUGUGUGUGvfawyqkfQhawawawePKVZJUGUGUG -UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGMdawawawUGUGUG -UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUG -"} +"aw" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/CultShip) +"aP" = (/obj/structure/table/fancyblack,/obj/item/weapon/book/tome/imbued,/obj/item/weapon/digestion_remains/skull/unathi,/obj/item/device/soulstone,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"be" = (/obj/structure/cult/pylon,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"bq" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"bW" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"cH" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"dJ" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"eP" = (/obj/structure/shuttle/engine/heater{dir = 4; icon_state = "heater"},/turf/simulated/wall/cult,/area/survivalpod/superpose/CultShip) +"fd" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/hosdouble,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"fw" = (/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = -3},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"fZ" = (/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"gU" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"he" = (/obj/structure/cult/pylon,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"jq" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/floortube/flicker{pixel_y = 13},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"js" = (/obj/effect/floor_decal/techfloor/corner{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"jv" = (/obj/structure/cult/talisman,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"jO" = (/obj/effect/catwalk_plated/white,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"kf" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"kT" = (/obj/structure/bed/chair/bay/comfy/purple{dir = 8},/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"mT" = (/obj/structure/toilet/prison{name = "toilet"; pixel_y = 10},/obj/structure/window/reinforced/survival_pod{dir = 4; opacity = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"nj" = (/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = 5},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) +"nq" = (/obj/item/weapon/melee/cultblade,/obj/structure/table/fancyblack,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"oY" = (/obj/structure/cult/talisman,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"py" = (/obj/machinery/door/airlock/phoron,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"pJ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) +"rC" = (/obj/structure/constructshell/cult,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"us" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"vf" = (/turf/simulated/wall/phoron,/area/survivalpod/superpose/CultShip) +"vl" = (/obj/machinery/light/floortube/flicker{pixel_y = 5},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"vG" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) +"vX" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"wl" = (/obj/effect/floor_decal/techfloor/corner,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"xg" = (/obj/effect/floor_decal/techfloor,/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"xh" = (/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"xq" = (/obj/effect/catwalk_plated/dark,/obj/machinery/pointdefense,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"yi" = (/obj/structure/closet/walllocker_double/north,/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"ym" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"yq" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"yE" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/random/soap{pixel_y = 5},/obj/random/soap,/obj/item/weapon/towel/random{pixel_y = 4},/obj/item/weapon/towel/random{pixel_y = 4},/obj/item/weapon/towel/random{pixel_y = 8},/obj/item/weapon/towel/random{pixel_y = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Ai" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/floortube/flicker{pixel_y = -3},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Bw" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"BV" = (/obj/item/weapon/storage/backpack/cultpack,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"CY" = (/obj/machinery/porta_turret/alien/destroyed,/obj/effect/catwalk_plated/white,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"De" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Dz" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"EA" = (/obj/structure/cult/tome,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"Ff" = (/obj/effect/catwalk_plated/white,/obj/machinery/pointdefense,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Fw" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"HF" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"II" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"IX" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"Kj" = (/obj/structure/closet/cabinet,/obj/random/curseditem,/obj/random/curseditem,/obj/item/weapon/melee/cursedblade,/obj/item/weapon/melee/cultblade,/obj/item/weapon/beartrap/hunting,/obj/item/weapon/beartrap/hunting,/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/phoron{amount = 25},/obj/item/device/soulstone,/obj/item/device/soulstone,/obj/item/weapon/storage/belt/soulstone/full,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"Kq" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Kt" = (/obj/machinery/power/port_gen/pacman,/obj/item/stack/material/phoron{amount = 25},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"KV" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"Ln" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"LR" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/light/floortube/flicker{dir = 8; pixel_x = -3},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) +"Md" = (/obj/machinery/porta_turret/alien/destroyed,/obj/effect/catwalk_plated/dark,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Mg" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) +"Mh" = (/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"Mo" = (/obj/effect/floor_decal/techfloor,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) +"MH" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"Nl" = (/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"NH" = (/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"NJ" = (/obj/item/weapon/material/knife/ritual,/obj/structure/table/fancyblack,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"NQ" = (/obj/effect/catwalk_plated/dark,/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"Oh" = (/obj/structure/salvageable/console_os{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/CultShip) +"Op" = (/obj/structure/constructshell/cult,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"ON" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"OU" = (/obj/structure/sink{dir = 4; pixel_x = 11},/obj/structure/mirror{dir = 8; pixel_x = 25},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Pi" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 4},/turf/simulated/floor/redgrid/animated,/area/survivalpod/superpose/CultShip) +"PR" = (/turf/simulated/floor/redgrid/animated,/area/survivalpod/superpose/CultShip) +"Qh" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"UE" = (/obj/structure/bed/chair/bay/comfy/purple{dir = 8},/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"UG" = (/turf/template_noop,/area/template_noop) +"VA" = (/obj/effect/floor_decal/emblem/black,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"VL" = (/obj/effect/floor_decal/techfloor/corner,/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Wd" = (/obj/machinery/door/airlock/phoron,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"Wm" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/machinery/power/smes/buildable{icon = 'icons/obj/alien_smes.dmi'; icon_state = "unit"; input_level = 950000; name = "Alien Royal Capacitor"; output_level = 950000},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"WT" = (/obj/structure/table/fancyblack,/obj/item/weapon/flame/candle/candelabra/everburn{pixel_y = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/CultShip) +"Xw" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) +"Yl" = (/obj/effect/floor_decal/techfloor/corner{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/CultShip) +"Yu" = (/obj/machinery/door/airlock/phoron,/obj/structure/fans/hardlight/colorable/abductor,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/CultShip) +"YN" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/power/apc/alarms_hidden{dir = 1; pixel_y = 20},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/CultShip) +"YO" = (/obj/structure/cult/talisman,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod/superpose/CultShip) +"ZJ" = (/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/CultShip) + +(1,1,1) = {" +UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUG +UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGCYawawawUGUGUG +UGUGUGUGUGUGUGUGUGUGUGUGUGUGvfawyqkfQhawawawePZJZJUGUGUG +UGUGUGUGUGUGUGUGUGxqawyqkfQhawbeNlMhNlawYNKtIXZJZJUGUGUG +UGUGUGUGUGvfawYuawawawxhfZxhyiNlMhNlwlpyMgPRFwKVZJUGUGUG +UGMdawyqQhawpJnjawMhNlMhNlVLHFHFjqHFWmawLRgUawNQjONQUGUG +UGawawjvheawvGnjawNlOpNlOpDeawawyqQhawawMgPiawawawjOUGUG +UGymOhUEHFawawYuawHFHFHFHFcHawKjbqbqfdawMoxgvfePZJZJUGUG +UGdJONvlbqWdbqvlbqVAvlbqvlbqpybqbqbqWTawvlusvfePZJZJUGUG +UGXwOhkTbWawbWbWbWbWbWbWbWIIawBwaPbqfdawawawvfePKVZJUGUG +UGawawoYbeawNlMhNlMhrCMhrCDeawawyqQhawawmTvXawawawNQUGUG +UGCYawyqQhawMHEAYODzMhNlMhYlbWbWAibWNHawfwOUawjONQjOUGUG +UGUGUGUGUGvfawawawawawnqBVNJNlMhNlMhjspyLnLnIXZJZJUGUGUG +UGUGUGUGUGUGUGUGUGFfawyqkfQhawheMhNlMhawKqyEFwZJZJUGUGUG +UGUGUGUGUGUGUGUGUGUGUGUGUGUGvfawyqkfQhawawawePKVZJUGUGUG +UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGMdawawawUGUGUG +UGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUG +"} diff --git a/modular_chomp/maps/submaps/shelters/DemonPool-21x21.dmm b/modular_chomp/maps/submaps/shelters/DemonPool-21x21.dmm index 3c23160aa7..ff1df4de95 100644 --- a/modular_chomp/maps/submaps/shelters/DemonPool-21x21.dmm +++ b/modular_chomp/maps/submaps/shelters/DemonPool-21x21.dmm @@ -1,77 +1,77 @@ -"aq" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"fb" = (/obj/structure/table/hardwoodtable,/obj/item/weapon/flame/candle/candelabra/everburn{pixel_y = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"fv" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"hg" = (/obj/structure/simple_door/sandstone{color = "#D35400"},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"hP" = (/obj/fire,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"kL" = (/turf/simulated/floor/cult{icon_state = "cult-narsie"},/area/survivalpod/superpose/DemonPool) -"kM" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/DemonPool) -"ok" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"ot" = (/obj/structure/closet/walllocker_double/north,/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"oD" = (/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) -"oT" = (/mob/living/simple_mob/vore/demonAI{faction = "neutral"},/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"pi" = (/turf/simulated/gore,/area/survivalpod/superpose/DemonPool) -"qR" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"ra" = (/obj/fire,/mob/living/simple_mob/vore/demonAI/lutra{faction = "neutral"},/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"rx" = (/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"sn" = (/obj/structure/grille/cult,/obj/structure/bonfire/permanent,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"tU" = (/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"wH" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) -"xx" = (/mob/living/simple_mob/vore/demonAI/wendigo{faction = "neutral"},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"yi" = (/obj/structure/bed/chair/bay/chair/padded/red/bignest,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"zf" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) -"zp" = (/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"By" = (/obj/fire,/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"BE" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/DemonPool) -"CF" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) -"DW" = (/turf/simulated/goreeyes,/area/survivalpod/superpose/DemonPool) -"Eb" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"Gf" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/hosdouble,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"HR" = (/obj/effect/gateway,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"Ie" = (/obj/fire,/obj/fire,/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) -"Ig" = (/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"In" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"It" = (/mob/living/simple_mob/vore/demonAI/covern{faction = "neutral"},/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"IQ" = (/obj/structure/constructshell/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"KC" = (/obj/structure/cult/tome,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"KM" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"KS" = (/obj/fire,/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) -"Lp" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"NU" = (/obj/fire,/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"OC" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/item/device/soulstone,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"Qs" = (/obj/structure/bed/chair/wood/wings{dir = 1},/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"Rj" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/item/clothing/shoes/cult,/obj/item/device/soulstone,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"Ru" = (/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) -"Rz" = (/obj/structure/cult/talisman,/obj/item/weapon/melee/cultblade,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"RL" = (/mob/living/simple_mob/vore/demonAI/engorge{evasion = 1; faction = "neutral"; health = 750; projectilesound = 'sound/weapons/taser2.ogg'; projectiletype = /obj/item/projectile/beam/stun/electric_spider; size_multiplier = 3},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"RR" = (/obj/structure/grille/broken/cult,/turf/template_noop,/area/survivalpod/superpose/DemonPool) -"RW" = (/obj/structure/grille/cult,/turf/template_noop,/area/survivalpod/superpose/DemonPool) -"Sp" = (/obj/effect/gateway,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) -"Tl" = (/turf/template_noop,/area/survivalpod/superpose/DemonPool) -"VK" = (/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) -"VV" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/DemonPool) -"We" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) -"XD" = (/obj/structure/table/hardwoodtable,/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) - -(1,1,1) = {" -TlTlTltUTltUTltUTlTlTlTlTltUTlTlTlTlTlTlTl -tUVKTlDWpipipipiKMpiDWtUTlTlTltUTlVVTlTlTl -TlVKVVtUtUTlzpzpzppipiKMpipipiaqDWBEtUtUTl -TlTlKMVKVKVKrxrxrxrxrxzpoDoDtUtUpiVKpiTlTl -VVVKaqzpVKhPhPByVKVKtUzpKSKSVKtUTlVKpitUTl -VVVKKMzprxoTzptUzpIQWezprxzptUItVKVKpitUTl -TlVVaqtUrxpipikMpikMkMpipipiKMWehPVKpiTltU -TlVVLptUVKzpkMOCRuGfkMyiInpiHRzpVKVKDWtUTl -tUtUzppirxEbkMQsRuInkMRuRjkMWepiVKVKDWTlTl -TltUqRKSsnzpkMDWhgkMpihgkMkMzpDWsnVKpiTlDW -TlpipiIeKSWezfWekLWeRLkLWehgWetUtUVKpitUpi -TlDWpihPWeSpkMokXDfbfvRzKCkMWeoDtUtURRtUTl -tUtUtUWezppipikMwHCFkMkMkMDWIQtUzptUKMtUTl -TltUKMVKrapiDWzpoDoDzpotIgkMzprxVKzppitUTl -tUTlaqrxrxzptUzpoDoDWexxtUtUrxByVKTlpiTltU -TlTlqRtUrxrxzpVKVKVKrxVKrxVKNUVKzpTlpitUTl -pitUKMtUTlzpzpByByVKpipitUVKVKtUzpzppiTlTl -TlpipiTltUVKVKByVKBypiDWtUzpzpzpTlpiDWTlTl -TlDWpiRWRRVVVVVVTltUTlTlLpaqqRqRpiTlTltUTl -TlTlTlTlpipipipipitUtUtUtUtUTlTlTlTlTlTlTl -TlTlTlTlTlTlTlTlTltUTlTlTlTlTlTlTlTlTlTlTl -"} +"aq" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"fb" = (/obj/structure/table/hardwoodtable,/obj/item/weapon/flame/candle/candelabra/everburn{pixel_y = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"fv" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"hg" = (/obj/structure/simple_door/sandstone{color = "#D35400"},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"hP" = (/obj/fire,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"kL" = (/turf/simulated/floor/cult{icon_state = "cult-narsie"},/area/survivalpod/superpose/DemonPool) +"kM" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/DemonPool) +"ok" = (/obj/structure/bed/chair/wood/wings{dir = 4},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"ot" = (/obj/structure/closet/walllocker_double/north,/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"oD" = (/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) +"oT" = (/mob/living/simple_mob/vore/demonAI{faction = "neutral"},/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"pi" = (/turf/simulated/gore,/area/survivalpod/superpose/DemonPool) +"qR" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"ra" = (/obj/fire,/mob/living/simple_mob/vore/demonAI/lutra{faction = "neutral"},/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"rx" = (/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"sn" = (/obj/structure/grille/cult,/obj/structure/bonfire/permanent,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"tU" = (/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"wH" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) +"xx" = (/mob/living/simple_mob/vore/demonAI/wendigo{faction = "neutral"},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"yi" = (/obj/structure/bed/chair/bay/chair/padded/red/bignest,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"zf" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) +"zp" = (/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"By" = (/obj/fire,/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"BE" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/template_noop,/area/survivalpod/superpose/DemonPool) +"CF" = (/obj/structure/grille/cult,/obj/structure/window/phoronreinforced/full,/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/tiled/steel_dirty{color = "grey"},/area/survivalpod/superpose/DemonPool) +"DW" = (/turf/simulated/goreeyes,/area/survivalpod/superpose/DemonPool) +"Eb" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"Gf" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/hosdouble,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"HR" = (/obj/effect/gateway,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"Ie" = (/obj/fire,/obj/fire,/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) +"Ig" = (/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"In" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"It" = (/mob/living/simple_mob/vore/demonAI/covern{faction = "neutral"},/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"IQ" = (/obj/structure/constructshell/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"KC" = (/obj/structure/cult/tome,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"KM" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"KS" = (/obj/fire,/turf/simulated/floor/lava/outdoors,/area/survivalpod/superpose/DemonPool) +"Lp" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"NU" = (/obj/fire,/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"OC" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/item/clothing/shoes/cult,/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/item/device/soulstone,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"Qs" = (/obj/structure/bed/chair/wood/wings{dir = 1},/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"Rj" = (/obj/structure/table/marble{color = "#B03A2E"},/obj/item/clothing/suit/cultrobes/alt,/obj/item/clothing/head/helmet/space/cult,/obj/item/clothing/shoes/cult,/obj/item/device/soulstone,/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"Ru" = (/turf/simulated/floor/wood/alt/tile,/area/survivalpod/superpose/DemonPool) +"Rz" = (/obj/structure/cult/talisman,/obj/item/weapon/melee/cultblade,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"RL" = (/mob/living/simple_mob/vore/demonAI/engorge{evasion = 1; faction = "neutral"; health = 750; projectilesound = 'sound/weapons/taser2.ogg'; projectiletype = /obj/item/projectile/beam/stun/electric_spider; size_multiplier = 3},/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"RR" = (/obj/structure/grille/broken/cult,/turf/template_noop,/area/survivalpod/superpose/DemonPool) +"RW" = (/obj/structure/grille/cult,/turf/template_noop,/area/survivalpod/superpose/DemonPool) +"Sp" = (/obj/effect/gateway,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/DemonPool) +"Tl" = (/turf/template_noop,/area/survivalpod/superpose/DemonPool) +"VK" = (/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/DemonPool) +"VV" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/DemonPool) +"We" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) +"XD" = (/obj/structure/table/hardwoodtable,/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake,/turf/simulated/floor/cult,/area/survivalpod/superpose/DemonPool) + +(1,1,1) = {" +TlTlTltUTltUTltUTlTlTlTlTltUTlTlTlTlTlTlTl +tUVKTlDWpipipipiKMpiDWtUTlTlTltUTlVVTlTlTl +TlVKVVtUtUTlzpzpzppipiKMpipipiaqDWBEtUtUTl +TlTlKMVKVKVKrxrxrxrxrxzpoDoDtUtUpiVKpiTlTl +VVVKaqzpVKhPhPByVKVKtUzpKSKSVKtUTlVKpitUTl +VVVKKMzprxoTzptUzpIQWezprxzptUItVKVKpitUTl +TlVVaqtUrxpipikMpikMkMpipipiKMWehPVKpiTltU +TlVVLptUVKzpkMOCRuGfkMyiInpiHRzpVKVKDWtUTl +tUtUzppirxEbkMQsRuInkMRuRjkMWepiVKVKDWTlTl +TltUqRKSsnzpkMDWhgkMpihgkMkMzpDWsnVKpiTlDW +TlpipiIeKSWezfWekLWeRLkLWehgWetUtUVKpitUpi +TlDWpihPWeSpkMokXDfbfvRzKCkMWeoDtUtURRtUTl +tUtUtUWezppipikMwHCFkMkMkMDWIQtUzptUKMtUTl +TltUKMVKrapiDWzpoDoDzpotIgkMzprxVKzppitUTl +tUTlaqrxrxzptUzpoDoDWexxtUtUrxByVKTlpiTltU +TlTlqRtUrxrxzpVKVKVKrxVKrxVKNUVKzpTlpitUTl +pitUKMtUTlzpzpByByVKpipitUVKVKtUzpzppiTlTl +TlpipiTltUVKVKByVKBypiDWtUzpzpzpTlpiDWTlTl +TlDWpiRWRRVVVVVVTltUTlTlLpaqqRqRpiTlTltUTl +TlTlTlTlpipipipipitUtUtUtUtUTlTlTlTlTlTlTl +TlTlTlTlTlTlTlTlTltUTlTlTlTlTlTlTlTlTlTlTl +"} diff --git a/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm b/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm index 3840c79d67..a22a878153 100644 --- a/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm +++ b/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm @@ -1,2312 +1,2312 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ae" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"aj" = ( -/obj/structure/curtain/black, -/obj/machinery/light_switch{ - pixel_x = 21; - pixel_y = 11 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"as" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"av" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"az" = ( -/obj/structure/barricade/cutout/wizard{ - anchored = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"aZ" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bc" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/mopbucket, -/obj/item/weapon/mop, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"be" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bz" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"bG" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/obj/item/weapon/book/custom_library/reference, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cd" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/bookcase/manuals/medical, -/obj/item/weapon/book/custom_library/reference, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ck" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"cG" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"dm" = ( -/obj/structure/prop/statue/pillar/dark, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"es" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/drinks/soymilk, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/weapon/reagent_containers/food/condiment/sugar{ - pixel_x = 10; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"fi" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"gt" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"gO" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"gX" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"hf" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/paper_bin{ - pixel_y = 3 - }, -/obj/item/weapon/pen{ - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"hg" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"hE" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"hR" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"iG" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"ja" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jd" = ( -/obj/structure/simple_door/wood, -/obj/structure/barricade/planks, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jk" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"jA" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"jB" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"kw" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"kZ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra{ - pixel_y = 5 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"lo" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"lI" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"nq" = ( -/obj/item/device/gps/computer, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nv" = ( -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"nQ" = ( -/obj/structure/table/standard, -/obj/random/soap, -/obj/random/soap, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"nV" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"on" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oD" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oF" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oJ" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"oX" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"pn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/hand_labeler{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - pixel_y = 6; - pixel_x = 7 - }, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"pT" = ( -/obj/structure/bed/chair/sofa/right, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"pZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"qd" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/GrandLibrary) -"qX" = ( -/obj/item/weapon/reagent_containers/food/drinks/shaker{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/teapot{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"rj" = ( -/obj/structure/table/woodentable, -/obj/machinery/recharger, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rs" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"rw" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"rA" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"rG" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sa" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sc" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"sm" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/fiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"st" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"sE" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/obj/structure/simple_door/wood, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"sY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"tg" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"tN" = ( -/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ur" = ( -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"uY" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"vi" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"vL" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"vQ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/obj/machinery/newscaster{ - pixel_y = 29 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"wg" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"wr" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "glcafe" - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"wH" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"wM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"xd" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/curtain/open, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"xh" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"xi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/weapon/stool/baystool/padded{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"xs" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"xx" = ( -/obj/structure/bookcase/manuals/research_and_development, -/obj/item/weapon/book/custom_library/reference, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"xC" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"xJ" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"xY" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"yc" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = -6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"yz" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"yH" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/paper_bin{ - pixel_y = 5 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/obj/machinery/light/floortube, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"yJ" = ( -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/structure/table/rack/shelf, -/obj/item/weapon/storage/box/glass_extras/straws, -/obj/item/weapon/storage/box/glass_extras/straws, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/obj/item/weapon/storage/box/buns{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"yX" = ( -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"zG" = ( -/obj/structure/flora/pottedplant/large, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"zR" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"AG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"AU" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Bh" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Bm" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"BG" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"BJ" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Cx" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/carpet/blucarpet, -/area/survivalpod/superpose/GrandLibrary) -"CE" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"CM" = ( -/obj/structure/bed/chair/sofa{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"CZ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_y = 3 - }, -/obj/item/weapon/pen{ - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Dq" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"DH" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"DL" = ( -/obj/structure/table/fancyblack, -/obj/machinery/photocopier/faxmachine{ - department = "Grand_Library"; - pixel_y = 6 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"DR" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"Fb" = ( -/obj/structure/sink/countertop{ - pixel_y = 7 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"FE" = ( -/obj/machinery/vending/event/costume, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"FF" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"FH" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"FU" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/obj/item/weapon/melee/umbrella/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"FW" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Gg" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"Gz" = ( -/obj/structure/bed/chair/sofa/corner, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"GC" = ( -/obj/item/weapon/gun/projectile/revolver/nagant{ - pixel_x = 10; - pixel_y = 7 - }, -/obj/effect/decal/remains/human, -/obj/item/ammo_magazine/s357{ - pixel_x = -13; - pixel_y = 9 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"GG" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"GM" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"GX" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Ha" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 7 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"Hp" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"HO" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/head/wizard/marisa/fake, -/obj/item/clothing/head/wizard/fake/realistic, -/obj/item/clothing/accessory/poncho/roles/cloak/mining, -/obj/item/clothing/accessory/poncho/roles/cloak/research, -/obj/item/clothing/gloves/combat/knight_costume, -/obj/item/clothing/gloves/combat/knight_costume/brown, -/obj/item/clothing/shoes/knight_costume, -/obj/item/clothing/shoes/knight_costume/black, -/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, -/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, -/obj/item/clothing/suit/storage/hooded/knight_costume/robin, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Ip" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Iw" = ( -/obj/item/ammo_magazine/s357{ - pixel_y = -9 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"IH" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/obj/item/device/starcaster_news, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"IK" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"IS" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"IU" = ( -/obj/structure/simple_door/wood, -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Je" = ( -/obj/structure/table/woodentable, -/obj/item/device/starcaster_news, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Jv" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"JQ" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"JW" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"Ko" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"KE" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 3 - }, -/turf/simulated/floor/carpet/blue2, -/area/survivalpod/superpose/GrandLibrary) -"LG" = ( -/obj/item/weapon/tool/wrench{ - pixel_x = 10; - pixel_y = 4 - }, -/obj/item/clothing/accessory/collar/bell{ - desc = "A bell collar, on it reads. My beloved cat Mitzy" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"LS" = ( -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Mm" = ( -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Mp" = ( -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"Mr" = ( -/obj/structure/bed/chair/wood, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Mu" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/template_noop) -"Mx" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"My" = ( -/obj/machinery/door/blast/shutters{ - dir = 2 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"MQ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Na" = ( -/obj/item/weapon/storage/box/donut{ - pixel_x = 3; - pixel_y = -4 - }, -/obj/structure/table/marble, -/obj/item/weapon/storage/box/donut{ - pixel_x = 3; - pixel_y = 11 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"Nb" = ( -/obj/machinery/bookbinder, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Nl" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"Ny" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"NG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"NN" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Ob" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Ok" = ( -/obj/structure/table/woodentable, -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Oq" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/obj/item/weapon/book/custom_library/religious, -/obj/item/weapon/book/custom_library/nonfiction, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"OL" = ( -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"OO" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/kafel_full/purple, -/area/survivalpod/superpose/GrandLibrary) -"PH" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Qa" = ( -/obj/structure/bookcase/bookcart, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Qr" = ( -/obj/structure/fans, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"QL" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee{ - dir = 8 - }, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = -32 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Rq" = ( -/obj/structure/table/woodentable, -/obj/item/ammo_magazine/s357, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"RE" = ( -/obj/machinery/librarycomp, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"RG" = ( -/obj/structure/bookcase/manuals/medical, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"RM" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/religious, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Sd" = ( -/obj/machinery/libraryscanner, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Sz" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"SF" = ( -/obj/structure/bed/chair/sofa/left{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"SP" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/stock_parts/spring{ - pixel_x = 5; - pixel_y = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"SU" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Ts" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/tool/screwdriver{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Tv" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/obj/machinery/recharger, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"TR" = ( -/obj/structure/bookcase/manuals/research_and_development, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Uk" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Up" = ( -/obj/structure/atmospheric_retention_field/underdoors, -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"VM" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/weapon/book/custom_library/reference, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Wg" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Wi" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/chair/sofa, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"WN" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = 7 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Xd" = ( -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Xg" = ( -/obj/structure/bookcase, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Xi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/structure/curtain/open, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"Xt" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_y = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"XJ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_y = 5 - }, -/obj/item/weapon/pen{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/weapon/pen/red{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/weapon/pen/blue{ - pixel_x = -1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"XN" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/manual, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"XS" = ( -/obj/machinery/button/remote/blast_door{ - dir = 1; - id = "glcafe"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/eris/cafe, -/area/survivalpod/superpose/GrandLibrary) -"Yu" = ( -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Yw" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"YE" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - pixel_y = -6 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"YM" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/GrandLibrary) -"Zc" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/obj/item/weapon/storage/briefcase/bookbag, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Zn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/stock_parts/gear{ - pixel_x = -8; - pixel_y = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"Zp" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"ZA" = ( -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu9, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu10, -/obj/item/weapon/storage/mre/menu11, -/obj/item/weapon/storage/mre/menu11, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/starcaster_news, -/obj/item/device/starcaster_news, -/obj/item/device/threadneedle, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/weapon/storage/toolbox/emergency, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/random/soap, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/storage/box/flare, -/obj/structure/closet/crate/wooden, -/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ZI" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"ZM" = ( -/obj/effect/floor_decal/spline/fancy/wood/cee, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/GrandLibrary) -"ZR" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra/everburn{ - anchored = 1; - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ZT" = ( -/obj/structure/bookcase, -/obj/item/weapon/book/custom_library/reference, -/obj/item/weapon/book/custom_library/fiction, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) -"ZY" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/toy/figure/abe, -/obj/item/toy/figure/acolyte, -/obj/item/toy/figure/agent, -/obj/item/toy/figure/assistant, -/obj/item/toy/figure/atmos, -/obj/item/toy/figure/bandit, -/obj/item/toy/figure/barking_dog, -/obj/item/toy/figure/bartender, -/obj/item/toy/figure/borg, -/obj/item/toy/figure/bounty_hunter, -/obj/item/toy/figure/captain, -/obj/item/toy/figure/cargotech, -/obj/item/toy/figure/carrion, -/obj/item/toy/figure/ce, -/obj/item/toy/figure/chaplain, -/obj/item/toy/figure/chef, -/obj/item/toy/figure/chemist, -/obj/item/toy/figure/clown, -/obj/item/toy/figure/cmo, -/obj/item/toy/figure/corgi, -/obj/item/toy/figure/detective, -/obj/item/toy/figure/dsquad, -/obj/item/toy/figure/engineer, -/obj/item/toy/figure/error, -/obj/item/toy/figure/ert, -/obj/item/toy/figure/excelsior, -/obj/item/toy/figure/gardener, -/obj/item/toy/figure/geneticist, -/obj/item/toy/figure/hop, -/obj/item/toy/figure/hos, -/obj/item/toy/figure/janitor, -/obj/item/toy/figure/leadbandit, -/obj/item/toy/figure/librarian, -/obj/item/toy/figure/md, -/obj/item/toy/figure/metacat, -/obj/item/toy/figure/metro_patrolman, -/obj/item/toy/figure/mime, -/obj/item/toy/figure/miner, -/obj/item/toy/figure/ninja, -/obj/item/toy/figure/paramedic, -/obj/item/toy/figure/prisoner, -/obj/item/toy/figure/profwho, -/obj/item/toy/figure/psychologist, -/obj/item/toy/figure/qm, -/obj/item/toy/figure/ranger, -/obj/item/toy/figure/rd, -/obj/item/toy/figure/red_soldier, -/obj/item/toy/figure/roach, -/obj/item/toy/figure/roboticist, -/obj/item/toy/figure/rooster, -/obj/item/toy/figure/scientist, -/obj/item/toy/figure/secofficer, -/obj/item/toy/figure/serbian, -/obj/item/toy/figure/shitcurity, -/obj/item/toy/figure/syndie, -/obj/item/toy/figure/vagabond, -/obj/item/toy/figure/virologist, -/obj/item/toy/figure/warden, -/obj/item/toy/figure/wizard, -/obj/item/toy/figure/station, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/GrandLibrary) - -(1,1,1) = {" -qd -qd -qd -Mu -Gg -Mu -qd -qd -qd -Gg -kw -Mu -kw -qd -qd -Mu -Gg -kw -Mu -Gg -kw -qd -qd -qd -"} -(2,1,1) = {" -qd -qd -qd -qd -vi -qd -qd -qd -qd -qd -Ny -iG -qd -qd -qd -qd -xC -pZ -YM -qd -qd -qd -qd -qd -"} -(3,1,1) = {" -qd -qd -on -xh -Bm -xY -bG -QL -IS -PH -Qa -Qa -PH -BG -NN -Je -IK -PH -aZ -PH -Mr -jB -qd -qd -"} -(4,1,1) = {" -ae -lo -Cx -ZI -lI -xY -XN -GG -hf -PH -Qa -Qa -PH -Bh -NN -jB -IK -PH -jB -PH -PH -oJ -qd -kw -"} -(5,1,1) = {" -gX -rs -jA -ZI -lI -bG -XN -GG -DL -PH -Qa -Qa -PH -rA -PH -PH -PH -PH -fi -PH -PH -PH -vi -Gg -"} -(6,1,1) = {" -hg -sc -wM -ZI -JQ -Yw -Yw -FH -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Bm -aZ -qd -Gg -"} -(7,1,1) = {" -qd -qd -ck -ZI -Dq -MQ -MQ -AU -MQ -MQ -MQ -MQ -MQ -MQ -MQ -MQ -MQ -MQ -MQ -Sz -lI -Je -qd -qd -"} -(8,1,1) = {" -kw -qd -be -ZI -lI -gO -rG -GG -GX -uY -uY -st -PH -PH -dm -Mm -PH -PH -dm -ZI -lI -oJ -qd -qd -"} -(9,1,1) = {" -Gg -qd -cd -ZI -lI -gO -bz -GG -Mx -qd -qd -qd -qd -qd -qd -qd -wg -Zc -PH -ZI -lI -PH -qd -qd -"} -(10,1,1) = {" -qd -qd -tg -ZI -lI -BJ -xJ -GG -Mx -qd -Qr -ZA -PH -SU -PH -PH -PH -jB -PH -ZI -JQ -FW -ZM -sE -"} -(11,1,1) = {" -qd -qd -ck -ZI -lI -YE -jB -GG -Oq -qd -nq -PH -Yu -qd -Sd -PH -NN -jB -PH -ZI -hE -lI -FU -qd -"} -(12,1,1) = {" -qd -qd -RG -ZI -lI -xx -tg -GG -gO -qd -RE -PH -PH -qd -Nb -oD -PH -CZ -PH -ZI -Dq -NG -ZM -Up -"} -(13,1,1) = {" -kw -qd -Xg -ZI -lI -ck -TR -GG -ZT -qd -qd -qd -SU -qd -qd -qd -wg -jB -PH -ZI -lI -jB -qd -qd -"} -(14,1,1) = {" -Mu -qd -RG -ZI -lI -xx -cG -GG -ja -Ob -jk -cG -DH -PH -dm -PH -PH -PH -dm -ZI -lI -Ok -qd -qd -"} -(15,1,1) = {" -qd -qd -ck -ZI -JQ -Yw -Yw -FH -Yw -Yw -Yw -Yw -Ko -Yw -Yw -Yw -Yw -Yw -Yw -Zp -lI -rj -qd -qd -"} -(16,1,1) = {" -ae -lo -Cx -ZI -Dq -MQ -MQ -AU -MQ -MQ -MQ -Sz -hE -Dq -MQ -MQ -Sz -hE -hE -hE -lI -Tv -qd -Mu -"} -(17,1,1) = {" -gX -rs -jA -ZI -lI -yz -RM -GG -VM -qd -dm -ZI -hE -lI -dm -qd -pT -hE -hE -hE -lI -PH -vi -kw -"} -(18,1,1) = {" -hg -sc -wM -ZI -lI -sm -GM -GG -tg -qd -Xt -ZI -hE -lI -hR -qd -Wi -yc -Hp -hE -lI -hR -qd -kw -"} -(19,1,1) = {" -qd -qd -ZT -AG -CE -GX -oF -Ip -VM -qd -dm -AG -hE -as -dm -qd -Gz -CM -CM -SF -WN -qd -qd -qd -"} -(20,1,1) = {" -qd -qd -qd -jd -qd -qd -qd -qd -qd -qd -qd -qd -xd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -"} -(21,1,1) = {" -qd -qd -Iw -PH -qd -yJ -yX -yX -My -yX -wH -xi -hE -Bm -aZ -qd -HO -vL -PH -PH -PH -PH -qd -qd -"} -(22,1,1) = {" -qd -qd -kZ -GC -qd -Ha -yX -Fb -My -yX -wH -xi -hE -lI -Uk -qd -ZY -vL -KE -rw -JW -sa -qd -Gg -"} -(23,1,1) = {" -qd -qd -Rq -LG -qd -Na -yX -qX -My -yX -wH -xi -hE -lI -fi -qd -FE -vL -zR -yH -JW -PH -qd -Mu -"} -(24,1,1) = {" -qd -qd -Ts -tN -qd -Mp -yX -yX -wr -yX -wH -xi -hE -lI -LS -qd -nv -vL -nV -xs -JW -sa -qd -qd -"} -(25,1,1) = {" -qd -qd -Zn -SP -qd -es -yX -XS -qd -pn -wH -xi -hE -lI -aZ -qd -oX -aj -PH -PH -PH -PH -qd -qd -"} -(26,1,1) = {" -kw -qd -qd -qd -qd -qd -qd -SU -qd -vQ -Yw -Zp -hE -lI -Uk -qd -qd -qd -qd -qd -IU -qd -qd -qd -"} -(27,1,1) = {" -Mu -qd -DR -gt -ur -nQ -qd -PH -qd -Jv -hE -hE -hE -lI -fi -qd -Wg -XJ -jB -az -DH -az -qd -Gg -"} -(28,1,1) = {" -Gg -qd -qd -qd -OO -ur -SU -PH -SU -AG -MQ -MQ -MQ -NG -sY -Xi -sY -sY -sY -sY -FF -sa -qd -kw -"} -(29,1,1) = {" -qd -qd -Nl -gt -ur -av -qd -bc -qd -NN -ZR -IK -NN -IH -IK -qd -OL -Xd -OL -PH -zG -PH -qd -qd -"} -(30,1,1) = {" -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -"} -(31,1,1) = {" -qd -qd -qd -Gg -kw -Gg -qd -qd -qd -kw -Mu -kw -kw -Gg -Mu -qd -qd -qd -kw -Gg -Gg -qd -qd -qd -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"aj" = ( +/obj/structure/curtain/black, +/obj/machinery/light_switch{ + pixel_x = 21; + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"as" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"av" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"az" = ( +/obj/structure/barricade/cutout/wizard{ + anchored = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"aZ" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bc" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"be" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bz" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bG" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cd" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ck" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cG" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dm" = ( +/obj/structure/prop/statue/pillar/dark, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"es" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"fi" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gt" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"gO" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"hf" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"hE" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"hR" = ( +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"iG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"ja" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jd" = ( +/obj/structure/simple_door/wood, +/obj/structure/barricade/planks, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jk" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jA" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"jB" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kw" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"kZ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra{ + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"lo" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"lI" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"nq" = ( +/obj/item/device/gps/computer, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nv" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nQ" = ( +/obj/structure/table/standard, +/obj/random/soap, +/obj/random/soap, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"nV" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"on" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oD" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oF" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oJ" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oX" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"pn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/hand_labeler{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"pT" = ( +/obj/structure/bed/chair/sofa/right, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"pZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"qd" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/GrandLibrary) +"qX" = ( +/obj/item/weapon/reagent_containers/food/drinks/shaker{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/teapot{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"rj" = ( +/obj/structure/table/woodentable, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rs" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"rw" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"rA" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rG" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sa" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sc" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"sm" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"st" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sE" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"sY" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"tg" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"tN" = ( +/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ur" = ( +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"uY" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"vL" = ( +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/newscaster{ + pixel_y = 29 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"wg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wr" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "glcafe" + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"wH" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"wM" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"xd" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xh" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/stool/baystool/padded{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xs" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"xx" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"xJ" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xY" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"yc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"yz" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"yH" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"yJ" = ( +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"yX" = ( +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"zG" = ( +/obj/structure/flora/pottedplant/large, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"zR" = ( +/obj/structure/bed/chair/comfy/red, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"AG" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"AU" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Bh" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Bm" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"BG" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"BJ" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Cx" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"CE" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"CM" = ( +/obj/structure/bed/chair/sofa{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"CZ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Dq" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"DH" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"DL" = ( +/obj/structure/table/fancyblack, +/obj/machinery/photocopier/faxmachine{ + department = "Grand_Library"; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"DR" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"Fb" = ( +/obj/structure/sink/countertop{ + pixel_y = 7 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"FE" = ( +/obj/machinery/vending/event/costume, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"FF" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"FH" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"FU" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"FW" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Gg" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"Gz" = ( +/obj/structure/bed/chair/sofa/corner, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"GC" = ( +/obj/item/weapon/gun/projectile/revolver/nagant{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/effect/decal/remains/human, +/obj/item/ammo_magazine/s357{ + pixel_x = -13; + pixel_y = 9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"GG" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"GM" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"GX" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ha" = ( +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 7 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Hp" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"HO" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/wizard/marisa/fake, +/obj/item/clothing/head/wizard/fake/realistic, +/obj/item/clothing/accessory/poncho/roles/cloak/mining, +/obj/item/clothing/accessory/poncho/roles/cloak/research, +/obj/item/clothing/gloves/combat/knight_costume, +/obj/item/clothing/gloves/combat/knight_costume/brown, +/obj/item/clothing/shoes/knight_costume, +/obj/item/clothing/shoes/knight_costume/black, +/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, +/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, +/obj/item/clothing/suit/storage/hooded/knight_costume/robin, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ip" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Iw" = ( +/obj/item/ammo_magazine/s357{ + pixel_y = -9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IH" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IK" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IS" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IU" = ( +/obj/structure/simple_door/wood, +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Je" = ( +/obj/structure/table/woodentable, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Jv" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"JQ" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"JW" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"Ko" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"KE" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 3 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"LG" = ( +/obj/item/weapon/tool/wrench{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/clothing/accessory/collar/bell{ + desc = "A bell collar, on it reads. My beloved cat Mitzy" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"LS" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mm" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mp" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Mr" = ( +/obj/structure/bed/chair/wood, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mu" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"Mx" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"My" = ( +/obj/machinery/door/blast/shutters{ + dir = 2 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"MQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Na" = ( +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/structure/table/marble, +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = 11 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Nb" = ( +/obj/machinery/bookbinder, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Nl" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"Ny" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"NG" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"NN" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ob" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ok" = ( +/obj/structure/table/woodentable, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Oq" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"OL" = ( +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"OO" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"PH" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Qa" = ( +/obj/structure/bookcase/bookcart, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Qr" = ( +/obj/structure/fans, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"QL" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Rq" = ( +/obj/structure/table/woodentable, +/obj/item/ammo_magazine/s357, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RE" = ( +/obj/machinery/librarycomp, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RG" = ( +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RM" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Sd" = ( +/obj/machinery/libraryscanner, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Sz" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"SF" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"SP" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/spring{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"SU" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ts" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/tool/screwdriver{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Tv" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"TR" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Uk" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Up" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"VM" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Wg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Wi" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/sofa, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"WN" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 7 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Xd" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Xg" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Xi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Xt" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XJ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XN" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XS" = ( +/obj/machinery/button/remote/blast_door{ + dir = 1; + id = "glcafe"; + pixel_y = -25 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Yu" = ( +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Yw" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"YE" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"YM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"Zc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Zn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/gear{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Zp" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZA" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/closet/crate/wooden, +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZI" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZM" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZR" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZT" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZY" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/toy/figure/abe, +/obj/item/toy/figure/acolyte, +/obj/item/toy/figure/agent, +/obj/item/toy/figure/assistant, +/obj/item/toy/figure/atmos, +/obj/item/toy/figure/bandit, +/obj/item/toy/figure/barking_dog, +/obj/item/toy/figure/bartender, +/obj/item/toy/figure/borg, +/obj/item/toy/figure/bounty_hunter, +/obj/item/toy/figure/captain, +/obj/item/toy/figure/cargotech, +/obj/item/toy/figure/carrion, +/obj/item/toy/figure/ce, +/obj/item/toy/figure/chaplain, +/obj/item/toy/figure/chef, +/obj/item/toy/figure/chemist, +/obj/item/toy/figure/clown, +/obj/item/toy/figure/cmo, +/obj/item/toy/figure/corgi, +/obj/item/toy/figure/detective, +/obj/item/toy/figure/dsquad, +/obj/item/toy/figure/engineer, +/obj/item/toy/figure/error, +/obj/item/toy/figure/ert, +/obj/item/toy/figure/excelsior, +/obj/item/toy/figure/gardener, +/obj/item/toy/figure/geneticist, +/obj/item/toy/figure/hop, +/obj/item/toy/figure/hos, +/obj/item/toy/figure/janitor, +/obj/item/toy/figure/leadbandit, +/obj/item/toy/figure/librarian, +/obj/item/toy/figure/md, +/obj/item/toy/figure/metacat, +/obj/item/toy/figure/metro_patrolman, +/obj/item/toy/figure/mime, +/obj/item/toy/figure/miner, +/obj/item/toy/figure/ninja, +/obj/item/toy/figure/paramedic, +/obj/item/toy/figure/prisoner, +/obj/item/toy/figure/profwho, +/obj/item/toy/figure/psychologist, +/obj/item/toy/figure/qm, +/obj/item/toy/figure/ranger, +/obj/item/toy/figure/rd, +/obj/item/toy/figure/red_soldier, +/obj/item/toy/figure/roach, +/obj/item/toy/figure/roboticist, +/obj/item/toy/figure/rooster, +/obj/item/toy/figure/scientist, +/obj/item/toy/figure/secofficer, +/obj/item/toy/figure/serbian, +/obj/item/toy/figure/shitcurity, +/obj/item/toy/figure/syndie, +/obj/item/toy/figure/vagabond, +/obj/item/toy/figure/virologist, +/obj/item/toy/figure/warden, +/obj/item/toy/figure/wizard, +/obj/item/toy/figure/station, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) + +(1,1,1) = {" +qd +qd +qd +Mu +Gg +Mu +qd +qd +qd +Gg +kw +Mu +kw +qd +qd +Mu +Gg +kw +Mu +Gg +kw +qd +qd +qd +"} +(2,1,1) = {" +qd +qd +qd +qd +vi +qd +qd +qd +qd +qd +Ny +iG +qd +qd +qd +qd +xC +pZ +YM +qd +qd +qd +qd +qd +"} +(3,1,1) = {" +qd +qd +on +xh +Bm +xY +bG +QL +IS +PH +Qa +Qa +PH +BG +NN +Je +IK +PH +aZ +PH +Mr +jB +qd +qd +"} +(4,1,1) = {" +ae +lo +Cx +ZI +lI +xY +XN +GG +hf +PH +Qa +Qa +PH +Bh +NN +jB +IK +PH +jB +PH +PH +oJ +qd +kw +"} +(5,1,1) = {" +gX +rs +jA +ZI +lI +bG +XN +GG +DL +PH +Qa +Qa +PH +rA +PH +PH +PH +PH +fi +PH +PH +PH +vi +Gg +"} +(6,1,1) = {" +hg +sc +wM +ZI +JQ +Yw +Yw +FH +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Bm +aZ +qd +Gg +"} +(7,1,1) = {" +qd +qd +ck +ZI +Dq +MQ +MQ +AU +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +Sz +lI +Je +qd +qd +"} +(8,1,1) = {" +kw +qd +be +ZI +lI +gO +rG +GG +GX +uY +uY +st +PH +PH +dm +Mm +PH +PH +dm +ZI +lI +oJ +qd +qd +"} +(9,1,1) = {" +Gg +qd +cd +ZI +lI +gO +bz +GG +Mx +qd +qd +qd +qd +qd +qd +qd +wg +Zc +PH +ZI +lI +PH +qd +qd +"} +(10,1,1) = {" +qd +qd +tg +ZI +lI +BJ +xJ +GG +Mx +qd +Qr +ZA +PH +SU +PH +PH +PH +jB +PH +ZI +JQ +FW +ZM +sE +"} +(11,1,1) = {" +qd +qd +ck +ZI +lI +YE +jB +GG +Oq +qd +nq +PH +Yu +qd +Sd +PH +NN +jB +PH +ZI +hE +lI +FU +qd +"} +(12,1,1) = {" +qd +qd +RG +ZI +lI +xx +tg +GG +gO +qd +RE +PH +PH +qd +Nb +oD +PH +CZ +PH +ZI +Dq +NG +ZM +Up +"} +(13,1,1) = {" +kw +qd +Xg +ZI +lI +ck +TR +GG +ZT +qd +qd +qd +SU +qd +qd +qd +wg +jB +PH +ZI +lI +jB +qd +qd +"} +(14,1,1) = {" +Mu +qd +RG +ZI +lI +xx +cG +GG +ja +Ob +jk +cG +DH +PH +dm +PH +PH +PH +dm +ZI +lI +Ok +qd +qd +"} +(15,1,1) = {" +qd +qd +ck +ZI +JQ +Yw +Yw +FH +Yw +Yw +Yw +Yw +Ko +Yw +Yw +Yw +Yw +Yw +Yw +Zp +lI +rj +qd +qd +"} +(16,1,1) = {" +ae +lo +Cx +ZI +Dq +MQ +MQ +AU +MQ +MQ +MQ +Sz +hE +Dq +MQ +MQ +Sz +hE +hE +hE +lI +Tv +qd +Mu +"} +(17,1,1) = {" +gX +rs +jA +ZI +lI +yz +RM +GG +VM +qd +dm +ZI +hE +lI +dm +qd +pT +hE +hE +hE +lI +PH +vi +kw +"} +(18,1,1) = {" +hg +sc +wM +ZI +lI +sm +GM +GG +tg +qd +Xt +ZI +hE +lI +hR +qd +Wi +yc +Hp +hE +lI +hR +qd +kw +"} +(19,1,1) = {" +qd +qd +ZT +AG +CE +GX +oF +Ip +VM +qd +dm +AG +hE +as +dm +qd +Gz +CM +CM +SF +WN +qd +qd +qd +"} +(20,1,1) = {" +qd +qd +qd +jd +qd +qd +qd +qd +qd +qd +qd +qd +xd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +"} +(21,1,1) = {" +qd +qd +Iw +PH +qd +yJ +yX +yX +My +yX +wH +xi +hE +Bm +aZ +qd +HO +vL +PH +PH +PH +PH +qd +qd +"} +(22,1,1) = {" +qd +qd +kZ +GC +qd +Ha +yX +Fb +My +yX +wH +xi +hE +lI +Uk +qd +ZY +vL +KE +rw +JW +sa +qd +Gg +"} +(23,1,1) = {" +qd +qd +Rq +LG +qd +Na +yX +qX +My +yX +wH +xi +hE +lI +fi +qd +FE +vL +zR +yH +JW +PH +qd +Mu +"} +(24,1,1) = {" +qd +qd +Ts +tN +qd +Mp +yX +yX +wr +yX +wH +xi +hE +lI +LS +qd +nv +vL +nV +xs +JW +sa +qd +qd +"} +(25,1,1) = {" +qd +qd +Zn +SP +qd +es +yX +XS +qd +pn +wH +xi +hE +lI +aZ +qd +oX +aj +PH +PH +PH +PH +qd +qd +"} +(26,1,1) = {" +kw +qd +qd +qd +qd +qd +qd +SU +qd +vQ +Yw +Zp +hE +lI +Uk +qd +qd +qd +qd +qd +IU +qd +qd +qd +"} +(27,1,1) = {" +Mu +qd +DR +gt +ur +nQ +qd +PH +qd +Jv +hE +hE +hE +lI +fi +qd +Wg +XJ +jB +az +DH +az +qd +Gg +"} +(28,1,1) = {" +Gg +qd +qd +qd +OO +ur +SU +PH +SU +AG +MQ +MQ +MQ +NG +sY +Xi +sY +sY +sY +sY +FF +sa +qd +kw +"} +(29,1,1) = {" +qd +qd +Nl +gt +ur +av +qd +bc +qd +NN +ZR +IK +NN +IH +IK +qd +OL +Xd +OL +PH +zG +PH +qd +qd +"} +(30,1,1) = {" +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +"} +(31,1,1) = {" +qd +qd +qd +Gg +kw +Gg +qd +qd +qd +kw +Mu +kw +kw +Gg +Mu +qd +qd +qd +kw +Gg +Gg +qd +qd +qd +"} diff --git a/modular_chomp/maps/submaps/shelters/HellCave-40x25.dmm b/modular_chomp/maps/submaps/shelters/HellCave-40x25.dmm index 32f36ae169..a67b69b228 100644 --- a/modular_chomp/maps/submaps/shelters/HellCave-40x25.dmm +++ b/modular_chomp/maps/submaps/shelters/HellCave-40x25.dmm @@ -1,76 +1,76 @@ -"bL" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"bX" = (/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) -"eh" = (/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"eD" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"fH" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"gW" = (/obj/effect/map_effect/interval/sound_emitter/punching,/obj/effect/map_effect/interval/effect_emitter/smoke/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"iK" = (/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) -"jG" = (/obj/structure/closet/crate,/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"kE" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/crate,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"lF" = (/turf/simulated/mineral/ignore_mapgen,/area/survivalpod/superpose/HellCave) -"lQ" = (/obj/item/weapon/bone/skull/unknown,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"nD" = (/obj/effect/gibspawner/human,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"qo" = (/obj/structure/cult/tome,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"vf" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) -"vT" = (/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"xV" = (/obj/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"yJ" = (/obj/machinery/crystal/lava,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"zh" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"zJ" = (/obj/structure/grille/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"AB" = (/obj/structure/grille/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"Bk" = (/obj/structure/closet/crate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/stack/material/lead{amount = 50},/obj/item/stack/material/lead{amount = 50},/obj/fiftyspawner/gold,/obj/fiftyspawner/phoron,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Cy" = (/obj/structure/girder/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"DW" = (/obj/structure/cult/pylon,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"El" = (/obj/structure/simple_door/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"Fv" = (/obj/structure/girder/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Fz" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"FX" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Hm" = (/obj/structure/girder/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"Ia" = (/turf/template_noop,/area/survivalpod/superpose/HellCave) -"Jb" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Ji" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"Jt" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Kb" = (/turf/simulated/goreeyes,/area/survivalpod/superpose/HellCave) -"Ko" = (/obj/structure/constructshell/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"LQ" = (/obj/structure/grille/cult,/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) -"Mq" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Mv" = (/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod/superpose/HellCave) -"ML" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"Nh" = (/turf/simulated/gore,/area/survivalpod/superpose/HellCave) -"PU" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/HellCave) -"Qh" = (/obj/fire,/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) -"RL" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"Sy" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) -"Ut" = (/obj/structure/cult/talisman,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"UO" = (/obj/item/weapon/bone/arm,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) -"Vn" = (/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) -"VA" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) -"YJ" = (/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) - -(1,1,1) = {" -IaehIaIaehIaehIaehehlFlFehehlFlFIaehIaIavfIalFehlFlFehIalFlFlFehehvfehlFNhlFehIa -vflFlFvfehehvflFlFlFvTvTFXehvflFvTlFlFlFlFlFlFvfNhlFlFlFNhKbLQABJilFlFxVQhxVlFlF -lFlFehehehehehNhNhNhxVYJehDWehYJehNhlFlFlFKbDWehYJYJYJehehiKiKbXbXABvTvTvTyJvflF -lFvfehehvTvTehehehNhehehehehehehehehNhNhkEehehehiKiKiKiKiKiKiKiKiKVAiKMviKvTvTlF -lFlFehvTvTvTvTYJehKbehehiKbXiKehehehnDNhehiKiKiKMvMviKiKMvMviKMvMviKMvMvMvvTxVvf -IaehvTvTgWFzvTehehYJiKMvMvMvMviKJbehehKbiKMvMviKMvehYJehiKiKiKiKiKVAiKMviKvTQhIa -IaehvTvTvTvTvTehehbXMvMviKiKMvMviKYJehYJiKiKiKehehehJtehehehbXbXiKABvTvTvTyJlFlF -lFehehvTxVxVnDehMqiKMviKehehiKMviKehehehiKiKiKehnDKbNhKbFvehABJifHvTxVxVxVxVvfeh -lFPUehehehYJehJbiKMvMviKehnDehMvMviKehehiKMvehehehYJYJYJehehKbNhKbNhNhNhlFlFlFIa -lFvfehehehehMqehiKMviKiKehFvehiKMviKYJvTiKMviKiKiKiKiKiKiKiKiKehehBkNhNhNhlFlFeh -IalFlFvfvfKbehiKMvMviKehehKbehiKMvehMqehehehMvMvMviKiKMvMviKMvehSyYJehvTvTvTlFlF -IaIalFlFlFehehiKMviKehehehVAehiKMvMvehvTyJehiKiKiKiKiKehiKehMvMviKehYJYJvTvTlFlF -lFvflFlFehehehMvMviKYJehehKbehiKiKMvehxVUOehehKovfzhElzJvfKoehMviKMvYJYJvTvTvflF -IalFNhehehFvehMviKiKYJehJtNhYJehiKMvehYJehehKbvfvfRLeDRLvfvfehehehMviKehehvflFlF -lFlFYJYJehiKiKMviKiKehehNhNhYJehiKMviKehehbLehHmeDeDeDeDMLvfehehiKiKehehlFlFlFIa -lFehYJehehiKMvMviKehehehNhNhehYJiKMvMvehehYJehvfVnqoUteDeDCylQDWiKMviKIavflFehIa -vfehehiKiKMvMviKiKehYJNhNhNhehehehMvMviKiKYJehvfvfzJvfvfzhvTvTehehMvMviKJblFlFIa -ehehiKiKIaMvMvMviKYJYJNhNhNhehehehiKMvMviKehehMqehehehehehYJYJehehMvMviKYJehvfvf -ehlFvfIaIaMvMvMviKYJYJNhNhNhehehJbehiKMvMvMviKehiKiKiKiKehehiKehiKMvMviKYJMqlFeh -IalFIaMvMvMvMvMviKYJYJNhNhNhjGehehehnDehiKiKMvMvMvMvMvMvMviKiKMvMvMviKiKYJehlFeh -IalFIaMvMvMvMvMviKehehNhNhNhNhehIaKbehehYJehiKehMvMviKiKMvMvMvMviKehehehehehlFlF -IaehiKMvMviKiKiKiKehlFlFNhNhlFehvfehehehYJehehehvfiKiKehiKiKiKIaehYJehehehlFlFIa -IalFehiKiKiKiKiKIavfvflFlFlFlFvfIavfehehehlFvfvflFehvfehehehMqvflFlFlFlFlFlFlFlF -IalFlFehehehlFIaehIaIalFlFlFvfIaIaIaehlFlFlFvfvflFlFlFvfvflFvflFlFlFlFlFlFlFlFIa -IaIaehIaIalFlFIaIaehehIaIaIaIalFlFIaIaehehehIaIaIaehehehIaIaIaehehIaIaIaIaIaehIa -"} +"bL" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"bX" = (/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) +"eh" = (/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"eD" = (/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"fH" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"gW" = (/obj/effect/map_effect/interval/sound_emitter/punching,/obj/effect/map_effect/interval/effect_emitter/smoke/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"iK" = (/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) +"jG" = (/obj/structure/closet/crate,/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"kE" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/crate,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"lF" = (/turf/simulated/mineral/ignore_mapgen,/area/survivalpod/superpose/HellCave) +"lQ" = (/obj/item/weapon/bone/skull/unknown,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"nD" = (/obj/effect/gibspawner/human,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"qo" = (/obj/structure/cult/tome,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"vf" = (/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) +"vT" = (/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"xV" = (/obj/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"yJ" = (/obj/machinery/crystal/lava,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"zh" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"zJ" = (/obj/structure/grille/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"AB" = (/obj/structure/grille/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"Bk" = (/obj/structure/closet/crate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/stack/material/lead{amount = 50},/obj/item/stack/material/lead{amount = 50},/obj/fiftyspawner/gold,/obj/fiftyspawner/phoron,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Cy" = (/obj/structure/girder/cult,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"DW" = (/obj/structure/cult/pylon,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"El" = (/obj/structure/simple_door/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"Fv" = (/obj/structure/girder/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Fz" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"FX" = (/obj/structure/grille/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Hm" = (/obj/structure/girder/cult,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"Ia" = (/turf/template_noop,/area/survivalpod/superpose/HellCave) +"Jb" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Ji" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"Jt" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Kb" = (/turf/simulated/goreeyes,/area/survivalpod/superpose/HellCave) +"Ko" = (/obj/structure/constructshell/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"LQ" = (/obj/structure/grille/cult,/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) +"Mq" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Mv" = (/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod/superpose/HellCave) +"ML" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"Nh" = (/turf/simulated/gore,/area/survivalpod/superpose/HellCave) +"PU" = (/obj/fire,/turf/template_noop,/area/survivalpod/superpose/HellCave) +"Qh" = (/obj/fire,/turf/simulated/wall/cult,/area/survivalpod/superpose/HellCave) +"RL" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"Sy" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) +"Ut" = (/obj/structure/cult/talisman,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"UO" = (/obj/item/weapon/bone/arm,/turf/simulated/floor/lava,/area/survivalpod/superpose/HellCave) +"Vn" = (/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod/superpose/HellCave) +"VA" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor,/area/survivalpod/superpose/HellCave) +"YJ" = (/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod/superpose/HellCave) + +(1,1,1) = {" +IaehIaIaehIaehIaehehlFlFehehlFlFIaehIaIavfIalFehlFlFehIalFlFlFehehvfehlFNhlFehIa +vflFlFvfehehvflFlFlFvTvTFXehvflFvTlFlFlFlFlFlFvfNhlFlFlFNhKbLQABJilFlFxVQhxVlFlF +lFlFehehehehehNhNhNhxVYJehDWehYJehNhlFlFlFKbDWehYJYJYJehehiKiKbXbXABvTvTvTyJvflF +lFvfehehvTvTehehehNhehehehehehehehehNhNhkEehehehiKiKiKiKiKiKiKiKiKVAiKMviKvTvTlF +lFlFehvTvTvTvTYJehKbehehiKbXiKehehehnDNhehiKiKiKMvMviKiKMvMviKMvMviKMvMvMvvTxVvf +IaehvTvTgWFzvTehehYJiKMvMvMvMviKJbehehKbiKMvMviKMvehYJehiKiKiKiKiKVAiKMviKvTQhIa +IaehvTvTvTvTvTehehbXMvMviKiKMvMviKYJehYJiKiKiKehehehJtehehehbXbXiKABvTvTvTyJlFlF +lFehehvTxVxVnDehMqiKMviKehehiKMviKehehehiKiKiKehnDKbNhKbFvehABJifHvTxVxVxVxVvfeh +lFPUehehehYJehJbiKMvMviKehnDehMvMviKehehiKMvehehehYJYJYJehehKbNhKbNhNhNhlFlFlFIa +lFvfehehehehMqehiKMviKiKehFvehiKMviKYJvTiKMviKiKiKiKiKiKiKiKiKehehBkNhNhNhlFlFeh +IalFlFvfvfKbehiKMvMviKehehKbehiKMvehMqehehehMvMvMviKiKMvMviKMvehSyYJehvTvTvTlFlF +IaIalFlFlFehehiKMviKehehehVAehiKMvMvehvTyJehiKiKiKiKiKehiKehMvMviKehYJYJvTvTlFlF +lFvflFlFehehehMvMviKYJehehKbehiKiKMvehxVUOehehKovfzhElzJvfKoehMviKMvYJYJvTvTvflF +IalFNhehehFvehMviKiKYJehJtNhYJehiKMvehYJehehKbvfvfRLeDRLvfvfehehehMviKehehvflFlF +lFlFYJYJehiKiKMviKiKehehNhNhYJehiKMviKehehbLehHmeDeDeDeDMLvfehehiKiKehehlFlFlFIa +lFehYJehehiKMvMviKehehehNhNhehYJiKMvMvehehYJehvfVnqoUteDeDCylQDWiKMviKIavflFehIa +vfehehiKiKMvMviKiKehYJNhNhNhehehehMvMviKiKYJehvfvfzJvfvfzhvTvTehehMvMviKJblFlFIa +ehehiKiKIaMvMvMviKYJYJNhNhNhehehehiKMvMviKehehMqehehehehehYJYJehehMvMviKYJehvfvf +ehlFvfIaIaMvMvMviKYJYJNhNhNhehehJbehiKMvMvMviKehiKiKiKiKehehiKehiKMvMviKYJMqlFeh +IalFIaMvMvMvMvMviKYJYJNhNhNhjGehehehnDehiKiKMvMvMvMvMvMvMviKiKMvMvMviKiKYJehlFeh +IalFIaMvMvMvMvMviKehehNhNhNhNhehIaKbehehYJehiKehMvMviKiKMvMvMvMviKehehehehehlFlF +IaehiKMvMviKiKiKiKehlFlFNhNhlFehvfehehehYJehehehvfiKiKehiKiKiKIaehYJehehehlFlFIa +IalFehiKiKiKiKiKIavfvflFlFlFlFvfIavfehehehlFvfvflFehvfehehehMqvflFlFlFlFlFlFlFlF +IalFlFehehehlFIaehIaIalFlFlFvfIaIaIaehlFlFlFvfvflFlFlFvfvflFvflFlFlFlFlFlFlFlFIa +IaIaehIaIalFlFIaIaehehIaIaIaIalFlFIaIaehehehIaIaIaehehehIaIaIaehehIaIaIaIaIaehIa +"} diff --git a/modular_chomp/maps/submaps/shelters/HydroCave-40x40.dmm b/modular_chomp/maps/submaps/shelters/HydroCave-40x40.dmm index ceaaeb04ac..6d9d1581dc 100644 --- a/modular_chomp/maps/submaps/shelters/HydroCave-40x40.dmm +++ b/modular_chomp/maps/submaps/shelters/HydroCave-40x40.dmm @@ -1,3659 +1,3659 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ah" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"ak" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"at" = ( -/obj/structure/closet/emcloset, -/obj/item/clothing/mask/breath, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"av" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"aF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 2 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"aM" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"aX" = ( -/obj/structure/salvageable/console_broken_os, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"br" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"ci" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"cv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"cG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock{ - id_tag = "awaydorm3"; - name = "Dorm 3" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"cI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"cN" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/table/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"cT" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"cY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"dh" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"dz" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"dI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"dU" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"ep" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"er" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ev" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"eV" = ( -/obj/structure/closet/secure_closet{ - icon_broken = "hydrosecurebroken"; - icon_closed = "hydrosecure"; - icon_locked = "hydrosecure1"; - icon_off = "hydrosecureoff"; - icon_opened = "hydrosecureopen"; - icon_state = "hydrosecure"; - locked = 0; - name = "botanist's locker"; - req_access_txt = "201" - }, -/obj/item/clothing/mask/bandana, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"fc" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"fj" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"fm" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"fo" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"fz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"fM" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"fN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"ga" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 8; - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"gh" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"gX" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"hM" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"id" = ( -/obj/effect/decal/cleanable/dirt, -/turf/template_noop, -/area/template_noop) -"ih" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"it" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"iD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"iY" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - req_access_txt = "201" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"jg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ji" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"jm" = ( -/turf/simulated/mineral/ignore_mapgen/cave, -/area/template_noop) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"jw" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"jY" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"kc" = ( -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"kO" = ( -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/template_noop, -/area/template_noop) -"la" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lU" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"lX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"lY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/bed, -/obj/item/weapon/bedsheet/pirate, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"mc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"mg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"mx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"mz" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mA" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"mE" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"mJ" = ( -/obj/structure/reagent_dispensers/beerkeg/fakenuke, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"mV" = ( -/obj/machinery/light/small, -/obj/machinery/alarm/monitor{ - dir = 1; - locked = 0; - pixel_y = -23; - req_access = null - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"nb" = ( -/obj/machinery/porta_turret_construct, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"nj" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"nk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Security Checkpoint Maintenance"; - req_access_txt = "201"; - req_one_access_txt = "0" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"nV" = ( -/obj/machinery/vending/deluxe_dinner{ - req_access = null; - req_log_access = null - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"og" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"oq" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"oQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - id_tag = "awaydorm2"; - name = "Dorm 2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"oX" = ( -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"oZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"pd" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/structure/sign/deathsposal{ - desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; - name = "\improper DISPOSAL: LEADS TO EXTERIOR"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"ph" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"pA" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"pG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"pT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"qi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"qw" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"qN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"rn" = ( -/obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; - name = "security officer's locker"; - req_access_txt = "201" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"rs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"rD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"rK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"rP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"se" = ( -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"sh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = -30 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"sm" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"sQ" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm/monitor{ - dir = 8; - locked = 0; - pixel_x = 23; - req_access = null - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"sR" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/HydroCave) -"sZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"tt" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2"; - tag = "icon-pipe-j1 (WEST)" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"tu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"up" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"uH" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"vD" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"vK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/legacy, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/obj/structure/closet/secure_closet{ - desc = "It's a secure locker for personnel. The first card swiped gains control."; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective"; - locked = 0; - name = "personal closet"; - req_access_txt = "201" - }, -/obj/item/clothing/under/suit_jacket/female, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"wj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"wz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-b-f (WEST)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"wC" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass, -/area/survivalpod/superpose/HydroCave) -"wO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"wV" = ( -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"xe" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"xz" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"xL" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"xR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"xV" = ( -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"xZ" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"yk" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"yn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"yw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"yL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"zf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"zj" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"zz" = ( -/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"zA" = ( -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"zB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"zR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/closet, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Aa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Ax" = ( -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"AE" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"AV" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Bs" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Bv" = ( -/obj/effect/fusion_em_field, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"By" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"BI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"BX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"BY" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"Ci" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Cs" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/structure/table/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"Ct" = ( -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"CT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"CV" = ( -/obj/structure/safe/floor, -/obj/item/weapon/moneybag/vault, -/obj/item/weapon/moneybag/vault, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"DN" = ( -/obj/structure/closet/emcloset/legacy, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"DW" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Eh" = ( -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"EB" = ( -/obj/machinery/alarm/monitor{ - dir = 4; - locked = 0; - pixel_x = -23; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/filingcabinet, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"EC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"EE" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - on = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Fb" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/reagent_containers/food/snacks/clownburger, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Fc" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"Ff" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 7; - tag = "icon-manifold-r-f (WEST)" - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"Fg" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Fh" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/bed, -/obj/item/weapon/bedsheet/mime, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"Fn" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/template_noop, -/area/template_noop) -"FB" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - on = 1 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"Ge" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Gf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Gg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Gj" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"Gm" = ( -/obj/structure/closet/crate/hydroponics, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"Gx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"Gy" = ( -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"GJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Hr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"HA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet/secure_closet{ - desc = "It's a secure locker for personnel. The first card swiped gains control."; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective"; - locked = 0; - name = "personal closet"; - req_access_txt = "201" - }, -/obj/item/clothing/under/pj/blue, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"HB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"HE" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"HP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Ig" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Im" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"In" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"It" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Iu" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ID" = ( -/obj/structure/sink{ - pixel_y = 25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/HydroCave) -"IY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-b-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Jj" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Jp" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/sign/deathsposal{ - desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; - name = "\improper DISPOSAL: LEADS TO EXTERIOR"; - pixel_y = -32 - }, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"Ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"JY" = ( -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"Kb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Kp" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Ku" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"KK" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"KO" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Lg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/blood/oil{ - color = "black" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"LO" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"LY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Mj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Ms" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"My" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/survivalpod/superpose/HydroCave) -"MF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"MM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"Nd" = ( -/obj/structure/table/standard, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"Nq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Nw" = ( -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"NA" = ( -/obj/item/toy/plushie/box, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"NF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance"; - req_access_txt = "201" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"NI" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"NO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled{ - icon_state = "dark" - }, -/area/survivalpod/superpose/HydroCave) -"Oh" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/HydroCave) -"Om" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"Oz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"OB" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"OV" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Pi" = ( -/obj/machinery/light/small, -/obj/machinery/alarm/monitor{ - dir = 1; - locked = 0; - pixel_y = -23; - req_access = null - }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"Pm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Pn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - id_tag = "awaydorm1"; - name = "Dorm 1" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Pu" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"PE" = ( -/obj/structure/closet, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"PQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall, -/area/survivalpod/superpose/HydroCave) -"Qd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"Qo" = ( -/obj/item/stack/rods, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Qz" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"QE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"QF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"QK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"QT" = ( -/obj/machinery/alarm/monitor{ - locked = 0; - pixel_y = 23; - req_access = null - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Rb" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Rq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Rx" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"RB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 8; - tag = "icon-window (WEST)" - }, -/obj/random/trash, -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"RF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"RG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"RP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/newscaster{ - pixel_x = 30 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"RT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Sv" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms"; - req_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"SM" = ( -/obj/structure/table/standard, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"SP" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"Ta" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Tj" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"TP" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"TX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Uq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 8; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"UW" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Vx" = ( -/obj/machinery/power/apc/alarms_hidden{ - dir = 1; - pixel_y = 20 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"VB" = ( -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/template_noop, -/area/template_noop) -"VF" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Wd" = ( -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Wt" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/survivalpod/superpose/HydroCave) -"WC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/window/basic{ - dir = 4; - tag = "icon-window (EAST)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"WE" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft{ - dir = 4; - name = "Hydroponics Desk"; - req_access_txt = "201" - }, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"WL" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/tiled/hydro, -/area/survivalpod/superpose/HydroCave) -"WN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/HydroCave) -"WT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"WU" = ( -/obj/structure/flora/pumpkin, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"WY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Xj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 14; - tag = "icon-manifold-r-f (NORTH)" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Xw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"XS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"XW" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"Yb" = ( -/turf/template_noop, -/area/template_noop) -"Yf" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"Yo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"Yq" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"YE" = ( -/obj/effect/decal/cleanable/blood/tracks{ - color = "red"; - desc = "Your instincts say you shouldn't be following these."; - dir = 4; - icon = 'icons/effects/blood.dmi'; - icon_state = "tracks" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"YL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"YN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0"; - req_one_access_txt = "0" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"YS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/survivalpod/superpose/HydroCave) -"Zq" = ( -/obj/effect/decal/cleanable/blood/splatter{ - color = "red" - }, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/template_noop) -"ZJ" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) -"ZM" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - layer = 4; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/red, -/area/survivalpod/superpose/HydroCave) -"ZO" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/HydroCave) -"ZW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/HydroCave) - -(1,1,1) = {" -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -jm -jm -zA -zA -jm -jm -jm -jm -jm -jm -jm -Zq -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -"} -(2,1,1) = {" -Yb -Yb -jm -Yb -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -Yb -zA -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -kO -Yb -VB -kO -Yb -Yb -"} -(3,1,1) = {" -Yb -jm -jm -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -zA -zA -zA -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -Yb -Yb -jm -Yb -Fn -Fn -"} -(4,1,1) = {" -Yb -jm -jm -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -YE -zA -jm -jm -jm -jm -jm -jm -kc -kc -kc -kc -kc -kc -kc -kc -kc -jm -jm -jm -jm -Yb -Yb -Yb -"} -(5,1,1) = {" -Yb -Yb -Yb -Yb -Yb -zA -zA -zA -Im -zA -Zq -zA -jm -jm -zA -zA -zA -jm -kc -JY -JY -kc -kc -JY -kc -Fg -at -BI -pT -lX -ju -Ci -kc -jm -jm -jm -jm -jm -jm -Yb -"} -(6,1,1) = {" -Yb -Yb -Yb -Yb -jm -jm -zA -zA -jm -zA -lU -Im -zA -Im -zA -zA -YE -jm -kc -oX -Rb -Rb -Rb -GJ -kc -Tj -xe -Qo -LY -JY -JY -nk -JY -JY -JY -JY -kc -JY -JY -jm -"} -(7,1,1) = {" -Yb -Yb -Yb -Yb -zA -zA -zA -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -JY -kc -Wt -kc -kc -JY -Rb -kc -PE -ZO -Kb -wo -JY -rn -qN -EB -sh -Hr -mg -cN -BY -JY -jm -"} -(8,1,1) = {" -Yb -Yb -Yb -Yb -zA -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -YE -JY -Eh -Gx -sm -uH -yL -Ig -cv -cv -Bs -Iu -rK -oZ -Ff -EE -mx -wj -Ju -oZ -rD -Pi -kc -jm -"} -(9,1,1) = {" -Yb -Yb -Yb -Yb -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -JY -ID -mV -kc -Ct -zf -pT -ju -WY -WY -ju -RT -JY -Uq -Ax -CT -Ax -aX -JY -WN -yk -kc -jm -"} -(10,1,1) = {" -Yb -Yb -Yb -Yb -zA -jm -jm -jm -jm -jm -JY -kc -kc -kc -JY -YE -zA -JY -Eh -Ct -Qz -av -ah -wo -JY -JY -kc -JY -VF -JY -iY -BI -fm -ga -BI -JY -cG -kc -JY -jm -"} -(11,1,1) = {" -Yb -Yb -Yb -zA -jm -jm -jm -jm -jm -jm -JY -Vx -up -sR -JY -Bs -zj -JY -JY -Sv -JY -JY -ah -Aa -mg -pG -cN -kc -cY -aM -xV -Gy -Gy -Gy -Gy -LO -rP -vK -JY -wV -"} -(12,1,1) = {" -Yb -Yb -Yb -JY -JY -JY -JY -JY -JY -JY -JY -Gy -cY -cY -AE -xV -xV -hM -AV -xV -LO -DN -zf -fz -kc -mA -Om -oQ -it -MF -xV -xV -xV -xV -xV -xV -rP -xV -SP -wV -"} -(13,1,1) = {" -Yb -Yb -Yb -JY -JY -JY -JY -JY -JY -JY -JY -Gy -cY -xV -mE -Gy -Ax -tu -RF -WT -yn -xV -iD -mc -cv -HA -lY -kc -cI -wO -jY -Gy -Gy -mz -mz -Nq -ph -xV -JY -wV -"} -(14,1,1) = {" -Yb -Yb -zA -JY -JY -CV -mJ -CV -JY -JY -dh -Gy -xV -xV -Kb -Ax -fj -fj -Ax -kc -bz -xV -ah -YN -JY -kc -kc -JY -oq -xV -fc -Gf -er -er -dz -fc -TX -mx -SP -wV -"} -(15,1,1) = {" -Yb -Yb -jm -JY -JY -nb -Oh -Oh -zz -zz -zz -Gy -xV -xV -TP -Ax -Fb -Wd -ZM -kc -Yo -mx -rs -Ge -Pu -cY -cY -xZ -xV -xV -xL -TP -wC -ak -TP -xL -rP -xV -JY -wV -"} -(16,1,1) = {" -Yb -Yb -jm -JY -JY -nb -Oh -Oh -br -br -br -Gy -xV -cY -TP -Ax -Wd -Wd -ZM -kc -dG -ih -ZW -ep -xV -xV -xV -xZ -xV -xV -xL -TP -ak -dU -TP -xL -rP -Ta -JY -id -"} -(17,1,1) = {" -Yb -zA -jm -JY -JY -CV -NA -CV -JY -JY -Fc -Gy -xV -cY -KK -CT -By -By -Ax -kc -Rq -cY -zf -YN -kc -JY -kc -kc -oq -xV -Xw -Ku -er -er -Iu -fM -rP -cY -Kb -Yb -"} -(18,1,1) = {" -Yb -zA -jm -JY -JY -JY -JY -JY -JY -JY -JY -Gy -xV -xV -mE -Gy -Ax -FB -xR -XS -YS -xV -zf -IY -mg -wi -Fh -kc -nj -BX -jY -mz -Gy -Gy -Gy -Nq -It -se -TP -Yb -"} -(19,1,1) = {" -Yb -jm -jm -JY -JY -JY -JY -JY -JY -JY -JY -Gy -cY -xV -fo -xV -xV -xV -xV -xV -Jj -DN -ah -wo -kc -mA -Om -Pn -ih -sZ -zB -Yf -Yf -Yf -Yf -Yf -KO -se -KK -Yb -"} -(20,1,1) = {" -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -JY -nV -Yq -ZJ -JY -Bs -er -er -zj -JY -JY -JY -HB -rK -oZ -RP -Cs -kc -dI -Gy -Mj -Gy -Gy -Gy -Gy -sQ -UW -Jp -JY -Yb -"} -(21,1,1) = {" -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -JY -kc -kc -kc -JY -zA -zA -zA -zA -jm -jm -jm -zf -LY -JY -kc -JY -JY -kc -Kb -DW -xZ -Kb -Gy -mz -JY -JY -JY -JY -Yb -"} -(22,1,1) = {" -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -YE -zA -jm -jm -jm -jm -zf -yw -WY -WY -WY -zR -kc -KK -QE -xV -KK -WE -pA -JY -jm -jm -Yb -Yb -"} -(23,1,1) = {" -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -zA -jm -jm -jm -jm -qi -oZ -cv -cv -aF -OV -JY -Ms -OB -Gy -Gy -Gy -mz -JY -zA -Yb -Yb -Yb -"} -(24,1,1) = {" -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -YE -jm -jm -jm -jm -jm -jm -jm -jm -jm -kc -YL -og -PQ -RG -MM -qw -WL -WL -Gy -Kb -zA -Yb -Yb -Yb -"} -(25,1,1) = {" -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -YE -zA -jm -jm -jm -jm -jm -jm -jm -jm -JY -YL -EC -kc -QT -se -Nw -se -Nw -Gy -TP -zA -Yb -jm -Yb -"} -(26,1,1) = {" -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -YE -zA -jm -jm -jm -jm -jm -jm -jm -jm -JY -YL -EC -vD -Gg -Qd -WL -WL -Qd -Gy -TP -zA -Yb -Yb -Yb -"} -(27,1,1) = {" -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -jm -YE -jm -jm -jm -jm -jm -jm -jm -zA -JY -HP -EC -gX -Mj -se -se -se -se -mz -KK -zA -Yb -Yb -Yb -"} -(28,1,1) = {" -Yb -Yb -jm -jm -jm -jm -jm -zA -zA -zA -zA -jm -jm -jm -zA -zA -zA -jm -jm -jm -jm -jm -jm -zA -zA -JY -HP -My -pd -tt -WL -WL -WL -WL -Gy -JY -jm -jm -Yb -Yb -"} -(29,1,1) = {" -Yb -Yb -Yb -jm -jm -jm -jm -zA -Bv -zA -zA -jm -jm -zA -zA -zA -jm -jm -jm -jm -jm -jm -zA -zA -zA -JY -YL -EC -ji -Mj -se -Nw -Nw -se -cT -JY -JY -jm -jm -Yb -"} -(30,1,1) = {" -Yb -Yb -Yb -Yb -jm -jm -jm -zA -jm -zA -jm -jm -zA -zA -Zq -jm -jm -jm -jm -jm -jm -jm -zA -zA -zA -JY -HP -My -jw -Gg -WL -WL -WL -WL -mz -Gm -JY -jm -jm -Yb -"} -(31,1,1) = {" -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -zA -jm -jm -zA -jm -zA -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -zA -Kb -Pm -My -JY -HE -Nw -se -se -se -WU -fN -JY -jm -Yb -Yb -"} -(32,1,1) = {" -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -zA -lU -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -KK -Xj -QK -oZ -ci -xz -NI -Gj -Gj -In -gh -JY -zA -Yb -Yb -"} -(33,1,1) = {" -Yb -Yb -Yb -Yb -Yb -zA -jm -jm -jm -jm -jm -zA -jm -jm -jm -jm -jm -jm -jm -jm -zA -zA -zA -zA -zA -JY -YL -wo -kc -Gy -Gy -Gy -WU -ev -Gy -NO -JY -zA -Yb -Yb -"} -(34,1,1) = {" -Yb -Yb -Yb -Yb -Yb -zA -zA -jm -jm -jm -jm -zA -jm -jm -jm -jm -jm -jm -zA -Im -lU -Im -zA -Im -zA -JY -RB -wo -JY -eV -eV -Rx -Nd -SM -JY -NF -JY -zA -Yb -Yb -"} -(35,1,1) = {" -Yb -Yb -Yb -Fn -Fn -Fn -Fn -Yb -zA -zA -zA -zA -jm -jm -jm -zA -zA -Zq -zA -jm -jm -jm -jm -zA -zA -JY -QF -wo -kc -kc -kc -JY -JY -kc -JY -la -Kb -zA -Yb -Yb -"} -(36,1,1) = {" -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -jm -zA -jm -zA -zA -zA -zA -zA -jm -jm -jm -jm -jm -zA -zA -JY -WC -jg -lX -lX -Oz -WY -wz -Oz -Lg -XW -Kp -zA -Yb -Yb -"} -(37,1,1) = {" -Yb -jm -jm -jm -Yb -Yb -Yb -Yb -Yb -Yb -jm -zA -zA -zA -zA -zA -zA -zA -jm -jm -jm -jm -jm -jm -jm -JY -JY -JY -JY -JY -JY -JY -JY -JY -JY -JY -JY -jm -jm -Yb -"} -(38,1,1) = {" -Yb -jm -jm -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -jm -zA -zA -zA -jm -jm -jm -zA -zA -zA -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -Yb -"} -(39,1,1) = {" -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -Yb -Yb -"} -(40,1,1) = {" -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -Yb -jm -jm -jm -jm -jm -jm -jm -jm -Yb -Yb -Yb -Yb -Yb -Yb -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"ak" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"at" = ( +/obj/structure/closet/emcloset, +/obj/item/clothing/mask/breath, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"av" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"aF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 2 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"aM" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"aX" = ( +/obj/structure/salvageable/console_broken_os, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"br" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"bz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"ci" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"cv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"cG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock{ + id_tag = "awaydorm3"; + name = "Dorm 3" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"cI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/snack, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"cN" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/table/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"cT" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"cY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"dh" = ( +/obj/structure/sign/warning/lethal_turrets, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"dz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"dG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"dI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"dU" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"ep" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"er" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ev" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"eV" = ( +/obj/structure/closet/secure_closet{ + icon_broken = "hydrosecurebroken"; + icon_closed = "hydrosecure"; + icon_locked = "hydrosecure1"; + icon_off = "hydrosecureoff"; + icon_opened = "hydrosecureopen"; + icon_state = "hydrosecure"; + locked = 0; + name = "botanist's locker"; + req_access_txt = "201" + }, +/obj/item/clothing/mask/bandana, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"fc" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"fj" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"fm" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"fo" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"fz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"fM" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"fN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"ga" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 8; + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"gh" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"gX" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"hM" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"id" = ( +/obj/effect/decal/cleanable/dirt, +/turf/template_noop, +/area/template_noop) +"ih" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"it" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"iD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"iY" = ( +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access_txt = "201" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"jg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ji" = ( +/obj/machinery/seed_extractor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"jm" = ( +/turf/simulated/mineral/ignore_mapgen/cave, +/area/template_noop) +"ju" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"jw" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"jY" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"kc" = ( +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"kO" = ( +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/template_noop, +/area/template_noop) +"la" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lU" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"lX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"lY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/pirate, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"mc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"mg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"mx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"mz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"mE" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"mJ" = ( +/obj/structure/reagent_dispensers/beerkeg/fakenuke, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"mV" = ( +/obj/machinery/light/small, +/obj/machinery/alarm/monitor{ + dir = 1; + locked = 0; + pixel_y = -23; + req_access = null + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"nb" = ( +/obj/machinery/porta_turret_construct, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"nj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"nk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Security Checkpoint Maintenance"; + req_access_txt = "201"; + req_one_access_txt = "0" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"nV" = ( +/obj/machinery/vending/deluxe_dinner{ + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"og" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"oq" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"oQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock{ + id_tag = "awaydorm2"; + name = "Dorm 2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"oX" = ( +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"oZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"pd" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/deathsposal{ + desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; + name = "\improper DISPOSAL: LEADS TO EXTERIOR"; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"ph" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"pA" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"pG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"pT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"qi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"qw" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"qN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"rn" = ( +/obj/structure/closet/secure_closet{ + icon_broken = "secbroken"; + icon_closed = "sec"; + icon_locked = "sec1"; + icon_off = "secoff"; + icon_opened = "secopen"; + icon_state = "sec1"; + name = "security officer's locker"; + req_access_txt = "201" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"rs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"rD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"rK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"rP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"se" = ( +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"sh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -30 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"sm" = ( +/obj/machinery/door/airlock{ + name = "Unit 2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"sQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/monitor{ + dir = 8; + locked = 0; + pixel_x = 23; + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"sR" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/HydroCave) +"sZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"tt" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2"; + tag = "icon-pipe-j1 (WEST)" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"tu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"up" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"uH" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"vD" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"vK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/legacy, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/obj/structure/closet/secure_closet{ + desc = "It's a secure locker for personnel. The first card swiped gains control."; + icon_broken = "cabinetdetective_broken"; + icon_closed = "cabinetdetective"; + icon_locked = "cabinetdetective_locked"; + icon_off = "cabinetdetective_broken"; + icon_opened = "cabinetdetective_open"; + icon_state = "cabinetdetective"; + locked = 0; + name = "personal closet"; + req_access_txt = "201" + }, +/obj/item/clothing/under/suit_jacket/female, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"wj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"wz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-b-f (WEST)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"wC" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/survivalpod/superpose/HydroCave) +"wO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"wV" = ( +/turf/simulated/floor/tiled/techfloor, +/area/template_noop) +"xe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"xz" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"xL" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"xR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"xV" = ( +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"xZ" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"yk" = ( +/obj/structure/bed, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"yn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"yw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"yL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"zf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"zj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"zz" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"zA" = ( +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"zB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"zR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/closet, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Aa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Ax" = ( +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"AE" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"AV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Bs" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Bv" = ( +/obj/effect/fusion_em_field, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"By" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"BI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"BX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"BY" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"Ci" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Cs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/table/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"Ct" = ( +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"CT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"CV" = ( +/obj/structure/safe/floor, +/obj/item/weapon/moneybag/vault, +/obj/item/weapon/moneybag/vault, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"DN" = ( +/obj/structure/closet/emcloset/legacy, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"DW" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Eh" = ( +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"EB" = ( +/obj/machinery/alarm/monitor{ + dir = 4; + locked = 0; + pixel_x = -23; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"EC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"EE" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + on = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Fb" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/reagent_containers/food/snacks/clownburger, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Fc" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"Ff" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 7; + tag = "icon-manifold-r-f (WEST)" + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"Fg" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Fh" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/mime, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"Fn" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/template_noop, +/area/template_noop) +"FB" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + on = 1 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"Ge" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Gf" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Gg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Gj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"Gm" = ( +/obj/structure/closet/crate/hydroponics, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"Gx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"Gy" = ( +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"GJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Hr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"HA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/secure_closet{ + desc = "It's a secure locker for personnel. The first card swiped gains control."; + icon_broken = "cabinetdetective_broken"; + icon_closed = "cabinetdetective"; + icon_locked = "cabinetdetective_locked"; + icon_off = "cabinetdetective_broken"; + icon_opened = "cabinetdetective_open"; + icon_state = "cabinetdetective"; + locked = 0; + name = "personal closet"; + req_access_txt = "201" + }, +/obj/item/clothing/under/pj/blue, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"HB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"HE" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"HP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Ig" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Im" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"In" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"It" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Iu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ID" = ( +/obj/structure/sink{ + pixel_y = 25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/HydroCave) +"IY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-b-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Jj" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Jp" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/sign/deathsposal{ + desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; + name = "\improper DISPOSAL: LEADS TO EXTERIOR"; + pixel_y = -32 + }, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"Ju" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"JY" = ( +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"Kb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Kp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Ku" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"KK" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"KO" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Lg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/blood/oil{ + color = "black" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"LO" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"LY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Mj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Ms" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"My" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/survivalpod/superpose/HydroCave) +"MF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"MM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"Nd" = ( +/obj/structure/table/standard, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"Nq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Nw" = ( +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"NA" = ( +/obj/item/toy/plushie/box, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"NF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics Maintenance"; + req_access_txt = "201" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"NI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"NO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled{ + icon_state = "dark" + }, +/area/survivalpod/superpose/HydroCave) +"Oh" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/HydroCave) +"Om" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"Oz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"OB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"OV" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Pi" = ( +/obj/machinery/light/small, +/obj/machinery/alarm/monitor{ + dir = 1; + locked = 0; + pixel_y = -23; + req_access = null + }, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"Pm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Pn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock{ + id_tag = "awaydorm1"; + name = "Dorm 1" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Pu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"PE" = ( +/obj/structure/closet, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"PQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall, +/area/survivalpod/superpose/HydroCave) +"Qd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"Qo" = ( +/obj/item/stack/rods, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Qz" = ( +/obj/machinery/door/airlock{ + name = "Unit 1" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"QE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"QF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"QK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"QT" = ( +/obj/machinery/alarm/monitor{ + locked = 0; + pixel_y = 23; + req_access = null + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Rb" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Rq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Rx" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"RB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/window/basic{ + dir = 8; + tag = "icon-window (WEST)" + }, +/obj/random/trash, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"RF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"RG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sink{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"RP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"RT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Sv" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms"; + req_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"SM" = ( +/obj/structure/table/standard, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"SP" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"Ta" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Tj" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"TP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"TX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Uq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"UW" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Vx" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"VB" = ( +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/template_noop, +/area/template_noop) +"VF" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Wd" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Wt" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/survivalpod/superpose/HydroCave) +"WC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/window/basic{ + dir = 4; + tag = "icon-window (EAST)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"WE" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + dir = 4; + name = "Hydroponics Desk"; + req_access_txt = "201" + }, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"WL" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/item/seeds/pumpkinseed, +/turf/simulated/floor/tiled/hydro, +/area/survivalpod/superpose/HydroCave) +"WN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/HydroCave) +"WT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"WU" = ( +/obj/structure/flora/pumpkin, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"WY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Xj" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 14; + tag = "icon-manifold-r-f (NORTH)" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Xw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"XS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"XW" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"Yb" = ( +/turf/template_noop, +/area/template_noop) +"Yf" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"Yo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"Yq" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"YE" = ( +/obj/effect/decal/cleanable/blood/tracks{ + color = "red"; + desc = "Your instincts say you shouldn't be following these."; + dir = 4; + icon = 'icons/effects/blood.dmi'; + icon_state = "tracks" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"YL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"YN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"YS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/survivalpod/superpose/HydroCave) +"Zq" = ( +/obj/effect/decal/cleanable/blood/splatter{ + color = "red" + }, +/turf/simulated/mineral/floor/ignore_mapgen/cave, +/area/template_noop) +"ZJ" = ( +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) +"ZM" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/red, +/area/survivalpod/superpose/HydroCave) +"ZO" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/HydroCave) +"ZW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/HydroCave) + +(1,1,1) = {" +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +jm +jm +zA +zA +jm +jm +jm +jm +jm +jm +jm +Zq +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +"} +(2,1,1) = {" +Yb +Yb +jm +Yb +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +Yb +zA +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +kO +Yb +VB +kO +Yb +Yb +"} +(3,1,1) = {" +Yb +jm +jm +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +zA +zA +zA +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Yb +Yb +jm +Yb +Fn +Fn +"} +(4,1,1) = {" +Yb +jm +jm +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +YE +zA +jm +jm +jm +jm +jm +jm +kc +kc +kc +kc +kc +kc +kc +kc +kc +jm +jm +jm +jm +Yb +Yb +Yb +"} +(5,1,1) = {" +Yb +Yb +Yb +Yb +Yb +zA +zA +zA +Im +zA +Zq +zA +jm +jm +zA +zA +zA +jm +kc +JY +JY +kc +kc +JY +kc +Fg +at +BI +pT +lX +ju +Ci +kc +jm +jm +jm +jm +jm +jm +Yb +"} +(6,1,1) = {" +Yb +Yb +Yb +Yb +jm +jm +zA +zA +jm +zA +lU +Im +zA +Im +zA +zA +YE +jm +kc +oX +Rb +Rb +Rb +GJ +kc +Tj +xe +Qo +LY +JY +JY +nk +JY +JY +JY +JY +kc +JY +JY +jm +"} +(7,1,1) = {" +Yb +Yb +Yb +Yb +zA +zA +zA +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +JY +kc +Wt +kc +kc +JY +Rb +kc +PE +ZO +Kb +wo +JY +rn +qN +EB +sh +Hr +mg +cN +BY +JY +jm +"} +(8,1,1) = {" +Yb +Yb +Yb +Yb +zA +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +YE +JY +Eh +Gx +sm +uH +yL +Ig +cv +cv +Bs +Iu +rK +oZ +Ff +EE +mx +wj +Ju +oZ +rD +Pi +kc +jm +"} +(9,1,1) = {" +Yb +Yb +Yb +Yb +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +JY +ID +mV +kc +Ct +zf +pT +ju +WY +WY +ju +RT +JY +Uq +Ax +CT +Ax +aX +JY +WN +yk +kc +jm +"} +(10,1,1) = {" +Yb +Yb +Yb +Yb +zA +jm +jm +jm +jm +jm +JY +kc +kc +kc +JY +YE +zA +JY +Eh +Ct +Qz +av +ah +wo +JY +JY +kc +JY +VF +JY +iY +BI +fm +ga +BI +JY +cG +kc +JY +jm +"} +(11,1,1) = {" +Yb +Yb +Yb +zA +jm +jm +jm +jm +jm +jm +JY +Vx +up +sR +JY +Bs +zj +JY +JY +Sv +JY +JY +ah +Aa +mg +pG +cN +kc +cY +aM +xV +Gy +Gy +Gy +Gy +LO +rP +vK +JY +wV +"} +(12,1,1) = {" +Yb +Yb +Yb +JY +JY +JY +JY +JY +JY +JY +JY +Gy +cY +cY +AE +xV +xV +hM +AV +xV +LO +DN +zf +fz +kc +mA +Om +oQ +it +MF +xV +xV +xV +xV +xV +xV +rP +xV +SP +wV +"} +(13,1,1) = {" +Yb +Yb +Yb +JY +JY +JY +JY +JY +JY +JY +JY +Gy +cY +xV +mE +Gy +Ax +tu +RF +WT +yn +xV +iD +mc +cv +HA +lY +kc +cI +wO +jY +Gy +Gy +mz +mz +Nq +ph +xV +JY +wV +"} +(14,1,1) = {" +Yb +Yb +zA +JY +JY +CV +mJ +CV +JY +JY +dh +Gy +xV +xV +Kb +Ax +fj +fj +Ax +kc +bz +xV +ah +YN +JY +kc +kc +JY +oq +xV +fc +Gf +er +er +dz +fc +TX +mx +SP +wV +"} +(15,1,1) = {" +Yb +Yb +jm +JY +JY +nb +Oh +Oh +zz +zz +zz +Gy +xV +xV +TP +Ax +Fb +Wd +ZM +kc +Yo +mx +rs +Ge +Pu +cY +cY +xZ +xV +xV +xL +TP +wC +ak +TP +xL +rP +xV +JY +wV +"} +(16,1,1) = {" +Yb +Yb +jm +JY +JY +nb +Oh +Oh +br +br +br +Gy +xV +cY +TP +Ax +Wd +Wd +ZM +kc +dG +ih +ZW +ep +xV +xV +xV +xZ +xV +xV +xL +TP +ak +dU +TP +xL +rP +Ta +JY +id +"} +(17,1,1) = {" +Yb +zA +jm +JY +JY +CV +NA +CV +JY +JY +Fc +Gy +xV +cY +KK +CT +By +By +Ax +kc +Rq +cY +zf +YN +kc +JY +kc +kc +oq +xV +Xw +Ku +er +er +Iu +fM +rP +cY +Kb +Yb +"} +(18,1,1) = {" +Yb +zA +jm +JY +JY +JY +JY +JY +JY +JY +JY +Gy +xV +xV +mE +Gy +Ax +FB +xR +XS +YS +xV +zf +IY +mg +wi +Fh +kc +nj +BX +jY +mz +Gy +Gy +Gy +Nq +It +se +TP +Yb +"} +(19,1,1) = {" +Yb +jm +jm +JY +JY +JY +JY +JY +JY +JY +JY +Gy +cY +xV +fo +xV +xV +xV +xV +xV +Jj +DN +ah +wo +kc +mA +Om +Pn +ih +sZ +zB +Yf +Yf +Yf +Yf +Yf +KO +se +KK +Yb +"} +(20,1,1) = {" +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +JY +nV +Yq +ZJ +JY +Bs +er +er +zj +JY +JY +JY +HB +rK +oZ +RP +Cs +kc +dI +Gy +Mj +Gy +Gy +Gy +Gy +sQ +UW +Jp +JY +Yb +"} +(21,1,1) = {" +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +JY +kc +kc +kc +JY +zA +zA +zA +zA +jm +jm +jm +zf +LY +JY +kc +JY +JY +kc +Kb +DW +xZ +Kb +Gy +mz +JY +JY +JY +JY +Yb +"} +(22,1,1) = {" +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +YE +zA +jm +jm +jm +jm +zf +yw +WY +WY +WY +zR +kc +KK +QE +xV +KK +WE +pA +JY +jm +jm +Yb +Yb +"} +(23,1,1) = {" +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +zA +jm +jm +jm +jm +qi +oZ +cv +cv +aF +OV +JY +Ms +OB +Gy +Gy +Gy +mz +JY +zA +Yb +Yb +Yb +"} +(24,1,1) = {" +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +YE +jm +jm +jm +jm +jm +jm +jm +jm +jm +kc +YL +og +PQ +RG +MM +qw +WL +WL +Gy +Kb +zA +Yb +Yb +Yb +"} +(25,1,1) = {" +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +YE +zA +jm +jm +jm +jm +jm +jm +jm +jm +JY +YL +EC +kc +QT +se +Nw +se +Nw +Gy +TP +zA +Yb +jm +Yb +"} +(26,1,1) = {" +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +YE +zA +jm +jm +jm +jm +jm +jm +jm +jm +JY +YL +EC +vD +Gg +Qd +WL +WL +Qd +Gy +TP +zA +Yb +Yb +Yb +"} +(27,1,1) = {" +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +jm +YE +jm +jm +jm +jm +jm +jm +jm +zA +JY +HP +EC +gX +Mj +se +se +se +se +mz +KK +zA +Yb +Yb +Yb +"} +(28,1,1) = {" +Yb +Yb +jm +jm +jm +jm +jm +zA +zA +zA +zA +jm +jm +jm +zA +zA +zA +jm +jm +jm +jm +jm +jm +zA +zA +JY +HP +My +pd +tt +WL +WL +WL +WL +Gy +JY +jm +jm +Yb +Yb +"} +(29,1,1) = {" +Yb +Yb +Yb +jm +jm +jm +jm +zA +Bv +zA +zA +jm +jm +zA +zA +zA +jm +jm +jm +jm +jm +jm +zA +zA +zA +JY +YL +EC +ji +Mj +se +Nw +Nw +se +cT +JY +JY +jm +jm +Yb +"} +(30,1,1) = {" +Yb +Yb +Yb +Yb +jm +jm +jm +zA +jm +zA +jm +jm +zA +zA +Zq +jm +jm +jm +jm +jm +jm +jm +zA +zA +zA +JY +HP +My +jw +Gg +WL +WL +WL +WL +mz +Gm +JY +jm +jm +Yb +"} +(31,1,1) = {" +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +zA +jm +jm +zA +jm +zA +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +zA +Kb +Pm +My +JY +HE +Nw +se +se +se +WU +fN +JY +jm +Yb +Yb +"} +(32,1,1) = {" +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +zA +lU +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +KK +Xj +QK +oZ +ci +xz +NI +Gj +Gj +In +gh +JY +zA +Yb +Yb +"} +(33,1,1) = {" +Yb +Yb +Yb +Yb +Yb +zA +jm +jm +jm +jm +jm +zA +jm +jm +jm +jm +jm +jm +jm +jm +zA +zA +zA +zA +zA +JY +YL +wo +kc +Gy +Gy +Gy +WU +ev +Gy +NO +JY +zA +Yb +Yb +"} +(34,1,1) = {" +Yb +Yb +Yb +Yb +Yb +zA +zA +jm +jm +jm +jm +zA +jm +jm +jm +jm +jm +jm +zA +Im +lU +Im +zA +Im +zA +JY +RB +wo +JY +eV +eV +Rx +Nd +SM +JY +NF +JY +zA +Yb +Yb +"} +(35,1,1) = {" +Yb +Yb +Yb +Fn +Fn +Fn +Fn +Yb +zA +zA +zA +zA +jm +jm +jm +zA +zA +Zq +zA +jm +jm +jm +jm +zA +zA +JY +QF +wo +kc +kc +kc +JY +JY +kc +JY +la +Kb +zA +Yb +Yb +"} +(36,1,1) = {" +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +jm +zA +jm +zA +zA +zA +zA +zA +jm +jm +jm +jm +jm +zA +zA +JY +WC +jg +lX +lX +Oz +WY +wz +Oz +Lg +XW +Kp +zA +Yb +Yb +"} +(37,1,1) = {" +Yb +jm +jm +jm +Yb +Yb +Yb +Yb +Yb +Yb +jm +zA +zA +zA +zA +zA +zA +zA +jm +jm +jm +jm +jm +jm +jm +JY +JY +JY +JY +JY +JY +JY +JY +JY +JY +JY +JY +jm +jm +Yb +"} +(38,1,1) = {" +Yb +jm +jm +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +jm +zA +zA +zA +jm +jm +jm +zA +zA +zA +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Yb +"} +(39,1,1) = {" +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Yb +Yb +"} +(40,1,1) = {" +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +Yb +jm +jm +jm +jm +jm +jm +jm +jm +Yb +Yb +Yb +Yb +Yb +Yb +"} diff --git a/modular_chomp/maps/submaps/shelters/LargeAlienShip-57x25.dmm b/modular_chomp/maps/submaps/shelters/LargeAlienShip-57x25.dmm index 588c86ab07..eb09ce7931 100644 --- a/modular_chomp/maps/submaps/shelters/LargeAlienShip-57x25.dmm +++ b/modular_chomp/maps/submaps/shelters/LargeAlienShip-57x25.dmm @@ -1,3788 +1,3788 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ao" = ( -/obj/machinery/atmospherics/binary/circulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"as" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"at" = ( -/obj/structure/prop/alien/pod/hybrid, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"aG" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/machinery/door/blast/regular{ - id = "reactorblastalien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"aH" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"aJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"bc" = ( -/obj/machinery/power/supermatter/shard, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/survivalpod/superpose/LargeAlienShip) -"bi" = ( -/turf/simulated/floor, -/area/template_noop) -"bm" = ( -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"bo" = ( -/obj/structure/closet/secure_closet/egg/xenomorph, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"bp" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"bv" = ( -/obj/structure/particle_accelerator/power_box{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"bw" = ( -/obj/structure/salvageable/data_os, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"bH" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"bO" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"cp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"cB" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"cL" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"cP" = ( -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"cX" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"db" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - id = "reactorblastalien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"de" = ( -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"ds" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "ReactorBlastAlien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"dx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"dz" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"dB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"dC" = ( -/obj/structure/particle_accelerator/end_cap{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"dS" = ( -/obj/structure/cryofeed{ - dir = 2 - }, -/obj/machinery/light/small/emergency, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"dZ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"ex" = ( -/obj/machinery/particle_accelerator/control_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"eB" = ( -/obj/structure/closet/alien, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"eT" = ( -/obj/effect/simple_portal/linked{ - portal_id = 7 - }, -/turf/simulated/floor/redgrid/animated, -/area/survivalpod/superpose/LargeAlienShip) -"fc" = ( -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/LargeAlienShip) -"fi" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"fm" = ( -/obj/machinery/computer/security/abductor{ - icon_screen = null - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"fr" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"fA" = ( -/obj/structure/cryofeed, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"fK" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"gc" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"gt" = ( -/obj/structure/prop/statue/phoron, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/survivalpod/superpose/LargeAlienShip) -"gz" = ( -/obj/structure/bed/chair/wood/wings, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"gA" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"gW" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"hw" = ( -/obj/machinery/vending/engivend{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"hR" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"hV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"iw" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/LargeAlienShip) -"iy" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/device/sleevemate, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"iM" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"iQ" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"jd" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"jg" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA" - }, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/LargeAlienShip) -"jh" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastright{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/hooklauncher, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"ji" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/phoronrglass, -/obj/fiftyspawner/phoronrglass, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"jm" = ( -/obj/structure/table/alien, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"jr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"jW" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"jZ" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"kq" = ( -/obj/machinery/gateway/brass{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"kD" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"kG" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/machinery/door/blast/regular{ - id = "reactorblastalien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"kO" = ( -/obj/structure/prop/alien/pod/open, -/obj/random/maintenance/morestuff, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"kS" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/LargeAlienShip) -"kV" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"lb" = ( -/obj/machinery/gateway/brass, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"lp" = ( -/turf/simulated/shuttle/wall/alien/blue/no_join, -/area/survivalpod/superpose/LargeAlienShip) -"lJ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"mm" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"mv" = ( -/obj/structure/window/reinforced/survival_pod, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westleft{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/rig/hazard/equipped, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"my" = ( -/obj/machinery/oxygen_pump/anesthetic, -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/LargeAlienShip) -"mG" = ( -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/obj/structure/closet/walllocker_double/west, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"mK" = ( -/obj/machinery/power/emitter/gyrotron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"mQ" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"mT" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"nj" = ( -/obj/structure/table/alien, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/soap/deluxe, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"nt" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"nv" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"nx" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"nB" = ( -/obj/structure/closet/alien, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/item/weapon/storage/toolbox/syndicate, -/obj/fiftyspawner/plasteel, -/obj/fiftyspawner/plasteel, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"nC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"oh" = ( -/obj/structure/prop/alien/pod/open, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"oi" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"op" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"oI" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/vending/fooddessert, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"oM" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"oR" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/security, -/obj/random/maintenance/security, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"ph" = ( -/obj/machinery/power/generator{ - anchored = 1; - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"pi" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"pq" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"pu" = ( -/obj/machinery/sleeper{ - dir = 4; - emagged = 1; - initial_bin_rating = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"pC" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/prop/alien/dispenser, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"qb" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"qe" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"qC" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"qQ" = ( -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/LargeAlienShip) -"qS" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"qY" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"rx" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"rI" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/tealcarpet, -/area/survivalpod/superpose/LargeAlienShip) -"rL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"se" = ( -/obj/effect/alien/weeds/node, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"ss" = ( -/obj/structure/prop/alien/computer{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"td" = ( -/obj/structure/table/alien, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"tf" = ( -/obj/machinery/gateway/brass{ - dir = 6 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"tx" = ( -/obj/machinery/gateway/brass{ - dir = 4 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"tF" = ( -/obj/machinery/cryopod/robot, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"tK" = ( -/obj/structure/prop/alien/computer/hybrid, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"uf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"uI" = ( -/obj/structure/prop/alien/pod/open, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"uQ" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"uT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"uU" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"ve" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/hand_labeler, -/obj/item/device/tape/random, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"vg" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/LargeAlienShip) -"vH" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"vQ" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"vV" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"wr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"wD" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"wQ" = ( -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/structure/closet/alien, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LargeAlienShip) -"xs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"xC" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"xG" = ( -/obj/structure/prop/alien/computer/hybrid{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"xT" = ( -/obj/structure/table/darkglass, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"ya" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"yi" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"yv" = ( -/obj/structure/prop/fake_ai{ - name = "P0ps1ck13" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"yI" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"yM" = ( -/obj/machinery/gateway/brass{ - dir = 10 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"yP" = ( -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"yY" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"zc" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"zu" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"zH" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"zI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Aj" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/LargeAlienShip) -"AB" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"AL" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westright{ - name = "Combat Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/device/slow_sizegun, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"AO" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "ReactorBlastAlien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"AP" = ( -/obj/machinery/vending/medical{ - dir = 4; - emagged = 1; - pixel_x = 5; - req_access = list(777) - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"AS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Bd" = ( -/obj/machinery/vending/hotfood, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Bf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Bh" = ( -/obj/structure/prop/alien/pod/open, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"BE" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"Cy" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"CO" = ( -/turf/template_noop, -/area/template_noop) -"CS" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"CY" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"Dn" = ( -/obj/structure/table/alien/blue, -/obj/item/weapon/storage/firstaid/surgery, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"DA" = ( -/obj/structure/closet/alien, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"DF" = ( -/obj/structure/prop/alien/pod/hybrid, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"DJ" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"DK" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/tape_roll, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"DX" = ( -/obj/item/weapon/tape_roll, -/obj/item/sticky_pad/random, -/obj/item/weapon/pen/blue, -/obj/item/weapon/pen/blue, -/obj/item/fulton_core, -/obj/item/fulton_core, -/obj/item/extraction_pack, -/obj/item/extraction_pack, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/item/weapon/pickaxe/hand, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/flashlight/color/orange, -/obj/item/device/threadneedle, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/device/flashlight/lantern, -/obj/random/soap, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/stack/nanopaste, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/stack/marker_beacon/ten, -/obj/item/device/starcaster_news, -/obj/item/device/mapping_unit, -/obj/item/weapon/storage/box/dosimeter, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/device/pda, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/gun/energy/locked/phasegun, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/accessory/permit/gun, -/obj/item/clothing/accessory/permit/gun, -/obj/item/weapon/material/knife/machete, -/obj/item/weapon/material/fishing_net, -/obj/item/weapon/storage/backpack/sport, -/obj/item/weapon/storage/backpack/sport, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/storage/belt, -/obj/item/clothing/accessory/poncho/thermal, -/obj/machinery/smartfridge/survival_pod{ - desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; - icon = 'icons/obj/abductor_vr.dmi'; - icon_base = "dispenser_2way"; - icon_state = "dispenser_2way"; - name = "Implant-Co" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LargeAlienShip) -"Ee" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/LargeAlienShip) -"El" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"Ep" = ( -/obj/structure/particle_accelerator/particle_emitter/left{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Fm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/LargeAlienShip) -"FU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"FZ" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower/security, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"Gd" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "reactorblastalien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"GC" = ( -/obj/machinery/gateway/brass{ - dir = 8 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"GH" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"GQ" = ( -/turf/simulated/shuttle/wall/alien/blue/hard_corner, -/area/survivalpod/superpose/LargeAlienShip) -"HW" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"HX" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/LargeAlienShip) -"Ib" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Ir" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/pen/reagent/paralysis, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"Iy" = ( -/obj/machinery/gateway/brass{ - dir = 5 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"IO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/table/alien/blue, -/obj/item/slime_cube, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/LargeAlienShip) -"Jt" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Scrubber to Waste" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"JB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"JD" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/LargeAlienShip) -"JU" = ( -/obj/machinery/gateway/brass{ - dir = 9 - }, -/turf/simulated/floor/flock, -/area/survivalpod/superpose/LargeAlienShip) -"JW" = ( -/obj/machinery/media/jukebox/casinojukebox, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"Kc" = ( -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/LargeAlienShip) -"Ko" = ( -/obj/machinery/power/emitter/gyrotron{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Kq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/bed/chair/bay/comfy/teal, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"KB" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"KS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/prop/alien/dispenser, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"KT" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"La" = ( -/obj/machinery/door/window/survival_pod, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"Lh" = ( -/obj/machinery/door/airlock/vault, -/obj/structure/fans/hardlight, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/survivalpod/superpose/LargeAlienShip) -"LM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Md" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Mf" = ( -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id = "reactorblastalien"; - name = "Reactor Blast Doors"; - pixel_x = -25; - pixel_y = 6; - req_access = null - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Nc" = ( -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Nd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Nm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 4 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"NI" = ( -/obj/structure/table/alien/blue, -/obj/structure/window/reinforced/survival_pod, -/obj/item/weapon/clipboard, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"NP" = ( -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"NY" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/LargeAlienShip) -"Pi" = ( -/obj/structure/prop/alien/computer/camera{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Pq" = ( -/obj/machinery/light/poi{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Py" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/prop/alien/pod/open, -/obj/random/maintenance/cargo, -/obj/random/maintenance/cargo, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"PB" = ( -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"PF" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/cryofeed{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"PL" = ( -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/survivalpod/superpose/LargeAlienShip) -"PR" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"PT" = ( -/obj/machinery/computer/crew{ - icon = 'icons/obj/abductor_vr.dmi'; - icon_screen = null; - icon_state = "console-c" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Qe" = ( -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"Qi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Qu" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - dir = 2; - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"QH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Sd" = ( -/obj/machinery/door/airlock/alien{ - req_one_access = null - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Sp" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/alien/blue, -/obj/machinery/chemical_dispenser/full{ - pixel_y = 11 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"SK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"SO" = ( -/obj/structure/table/darkglass, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"SS" = ( -/turf/simulated/shuttle/wall/alien/blue, -/area/survivalpod/superpose/LargeAlienShip) -"SY" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Ti" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/bay/comfy/teal{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Tr" = ( -/obj/structure/table/alien/blue, -/obj/machinery/door/window/brigdoor/northright{ - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"Tx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"TK" = ( -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/LargeAlienShip) -"TL" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/alien, -/area/survivalpod/superpose/LargeAlienShip) -"Um" = ( -/obj/effect/fusion_em_field, -/turf/simulated/floor/reinforced/nitrogen{ - nitrogen = 82.1472 - }, -/area/survivalpod/superpose/LargeAlienShip) -"Un" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Uu" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"UI" = ( -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"US" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Vk" = ( -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"Vq" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/wood/sif, -/area/survivalpod/superpose/LargeAlienShip) -"Vt" = ( -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/obj/structure/closet/walllocker_double/west, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LargeAlienShip) -"Vu" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Vw" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/LargeAlienShip) -"VF" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full{ - dir = 8 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"VP" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"VR" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"VS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"WJ" = ( -/obj/machinery/sleep_console{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"WQ" = ( -/obj/structure/bed/nest, -/turf/simulated/floor/carpet/gaycarpet, -/area/survivalpod/superpose/LargeAlienShip) -"WT" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"WX" = ( -/obj/machinery/vending/tool{ - emagged = 1; - req_access = list(777); - req_log_access = null - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/LargeAlienShip) -"Xc" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Xg" = ( -/obj/machinery/cryopod, -/obj/structure/cryofeed{ - dir = 4; - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) -"Xk" = ( -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/structure/closet/alien, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LargeAlienShip) -"Xv" = ( -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/LargeAlienShip) -"XA" = ( -/obj/structure/particle_accelerator/fuel_chamber{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"XC" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Laser Armor" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/gun/energy/crossbow/largecrossbow, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/LargeAlienShip) -"XY" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"Yw" = ( -/obj/structure/grille/cult{ - name = "Alien grille" - }, -/obj/structure/window/phoronreinforced/full, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "ReactorBlastAlien"; - layer = 3.3; - name = "Reactor Blast Door" - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/LargeAlienShip) -"YA" = ( -/obj/structure/closet/alien, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/clothing/suit/space/void/autolok, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/tank/emergency/oxygen/double, -/obj/item/weapon/storage/toolbox/emergency, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/LargeAlienShip) -"YP" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 4; - pixel_x = -3 - }, -/turf/template_noop, -/area/template_noop) -"Zh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/filingcabinet/medical, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/LargeAlienShip) -"Zp" = ( -/obj/machinery/computer/operating{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/LargeAlienShip) -"Zq" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"ZN" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable{ - icon = 'icons/obj/alien_smes.dmi'; - icon_state = "unit"; - input_level = 950000; - name = "Alien Royal Capacitor"; - output_level = 950000 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LargeAlienShip) -"ZQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/shuttle/floor/alienplating, -/area/survivalpod/superpose/LargeAlienShip) - -(1,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -CO -CO -Uu -CO -CO -CO -Uu -CO -CO -CO -Uu -CO -CO -CO -CO -CO -CO -CO -"} -(2,1,1) = {" -CO -CO -CO -CO -Uu -CO -GQ -bi -bi -bi -GQ -bi -bi -bi -GQ -bi -bi -bi -GQ -CO -CO -CO -Uu -CO -CO -"} -(3,1,1) = {" -CO -CO -CO -CO -CO -CO -GQ -WT -WT -WT -GQ -WT -WT -WT -GQ -WT -WT -WT -GQ -CO -CO -CO -CO -CO -CO -"} -(4,1,1) = {" -CO -GQ -WT -WT -WT -SS -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -SS -WT -WT -WT -GQ -CO -"} -(5,1,1) = {" -CO -GQ -GQ -GQ -GQ -GQ -GQ -SS -zI -zI -zI -ZQ -NP -aJ -zI -zI -zI -SS -GQ -GQ -GQ -GQ -GQ -GQ -CO -"} -(6,1,1) = {" -CO -GQ -oh -nC -WT -mK -pi -CS -VR -NP -NP -NP -NP -VR -NP -NP -VR -jr -pi -Ko -WT -nC -uI -GQ -CO -"} -(7,1,1) = {" -CO -GQ -Bh -nt -WT -US -GQ -CS -NP -Vk -NP -NP -NP -NP -NP -Vk -NP -jr -GQ -hV -WT -rx -Py -GQ -CO -"} -(8,1,1) = {" -CO -GQ -qe -xs -gA -Zq -vV -CS -NP -NP -lp -dZ -Lh -pq -lp -NP -NP -jr -vV -uQ -uU -lJ -qe -GQ -CO -"} -(9,1,1) = {" -CO -GQ -ao -SK -vH -Vu -jW -CS -VR -NP -Yw -bc -Um -bc -Yw -NP -NP -jr -jW -uQ -Xc -KT -ao -GQ -CO -"} -(10,1,1) = {" -CO -GQ -ph -xs -vH -Vu -jW -CS -NP -NP -Gd -PL -gt -PL -ds -NP -NP -jr -jW -uQ -Xc -lJ -ph -GQ -CO -"} -(11,1,1) = {" -CO -GQ -dz -SK -vH -Vu -jW -CS -NP -NP -AO -bc -Um -bc -AO -NP -VR -jr -jW -uQ -Xc -KT -dz -GQ -CO -"} -(12,1,1) = {" -CO -GQ -ZN -cp -HW -Vu -DJ -CS -NP -NP -lp -db -kG -aG -lp -NP -NP -jr -DJ -uQ -fK -fr -oi -GQ -CO -"} -(13,1,1) = {" -CO -GQ -Nd -LM -WT -qS -GQ -CS -NP -Vk -NP -NP -NP -NP -Mf -Vk -NP -jr -GQ -hV -WT -zH -wr -GQ -CO -"} -(14,1,1) = {" -CO -GQ -Jt -Jt -WT -mm -CY -CS -VR -NP -NP -VR -NP -NP -NP -NP -VR -jr -CY -Ko -WT -Jt -Jt -GQ -CO -"} -(15,1,1) = {" -CO -GQ -VF -Pq -WT -qS -GQ -SS -FU -FU -FU -rL -NP -AS -FU -FU -FU -SS -GQ -hV -WT -VF -VF -GQ -CO -"} -(16,1,1) = {" -CO -GQ -GQ -GQ -gW -jg -GQ -GQ -gW -GQ -jg -fi -PR -nx -jg -GQ -gW -GQ -GQ -jg -gW -GQ -GQ -GQ -CO -"} -(17,1,1) = {" -CO -SS -GQ -HX -bm -bm -bm -bm -bm -CS -kV -Bf -Bf -Bf -KB -jr -bm -bm -bm -bm -bm -HX -GQ -SS -CO -"} -(18,1,1) = {" -CO -CO -SS -SS -qQ -bm -bm -bm -bm -CS -yI -Ep -iQ -yY -Md -jr -bm -bm -bm -bm -qQ -SS -SS -CO -CO -"} -(19,1,1) = {" -CO -CO -CO -GQ -GQ -gW -GQ -GQ -bm -CS -yI -VS -bv -zc -Md -jr -bm -GQ -GQ -gW -GQ -GQ -CO -CO -CO -"} -(20,1,1) = {" -CO -CO -GQ -SS -mQ -cP -uf -GQ -bm -CS -yI -ex -XA -zc -Md -jr -bm -GQ -Sp -de -DA -SS -GQ -CO -CO -"} -(21,1,1) = {" -CO -CO -GQ -WX -cP -cP -Md -DK -bm -CS -yI -QH -dC -uT -Md -jr -bm -Ir -yI -de -de -WJ -GQ -CO -CO -"} -(22,1,1) = {" -CO -CO -wD -ji -cP -cP -Md -ve -bm -CS -cX -Qi -Qi -Qi -iM -jr -bm -bH -yI -de -de -pu -wD -CO -CO -"} -(23,1,1) = {" -CO -CO -GQ -nB -cP -cP -Kq -Qu -bm -CS -NP -NP -NP -NP -NP -jr -bm -Tr -Ti -de -de -aH -my -CO -CO -"} -(24,1,1) = {" -CO -CO -GQ -hw -cP -cP -Md -NI -bm -TL -NP -SS -xC -SS -NP -Fm -bm -iy -yI -de -de -Zp -GQ -CO -CO -"} -(25,1,1) = {" -CO -CO -SS -GQ -GQ -qb -Zh -GQ -bm -TL -NP -SS -bw -SS -NP -Fm -bm -GQ -Un -de -AP -GQ -SS -CO -CO -"} -(26,1,1) = {" -CO -CO -CO -SS -GQ -GQ -GQ -GQ -bm -TL -NP -SS -xC -SS -NP -Fm -bm -GQ -GQ -Dn -GQ -SS -CO -CO -CO -"} -(27,1,1) = {" -CO -CO -CO -CO -SS -GQ -SS -qQ -bm -TL -NP -NP -NP -NP -NP -Fm -bm -qQ -SS -GQ -SS -CO -CO -CO -CO -"} -(28,1,1) = {" -CO -CO -CO -CO -CO -GQ -HX -bm -bm -SY -FU -rL -NP -AS -FU -bp -bm -bm -HX -GQ -CO -CO -CO -CO -CO -"} -(29,1,1) = {" -CO -CO -YP -CO -CO -gW -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -bm -bm -gW -CO -CO -CO -YP -CO -"} -(30,1,1) = {" -GQ -WT -WT -GQ -CO -wD -bm -bm -GQ -DF -fA -at -GQ -XC -jh -IO -GQ -bm -bm -wD -CO -GQ -WT -WT -GQ -"} -(31,1,1) = {" -SS -GQ -GQ -GQ -GQ -GQ -Nc -bm -gW -qQ -yv -dS -GQ -AB -yP -Fm -gW -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -"} -(32,1,1) = {" -GQ -jd -kD -oM -kO -GQ -bm -bm -GQ -BE -JD -at -GQ -AL -mv -IO -GQ -bm -bm -GQ -kO -dB -cL -Ib -GQ -"} -(33,1,1) = {" -GQ -jd -kD -oM -kO -GQ -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -bm -bm -GQ -kO -dB -cL -Ib -GQ -"} -(34,1,1) = {" -GQ -tK -WT -Cy -wQ -GQ -bm -bm -GQ -UI -qC -zu -GQ -JU -GC -yM -Md -bm -bm -GQ -Xk -Tx -WT -xG -GQ -"} -(35,1,1) = {" -GQ -jd -kD -oM -Vk -gW -bm -bm -gW -UI -Kc -Kc -GQ -kq -eT -lb -Md -bm -bm -gW -Vk -dB -cL -Ib -GQ -"} -(36,1,1) = {" -GQ -jd -kD -XY -YA -GQ -bm -bm -GQ -eB -Aj -iw -GQ -Iy -tx -tf -Md -bm -bm -GQ -YA -gc -cL -Ib -GQ -"} -(37,1,1) = {" -GQ -GQ -GQ -GQ -GQ -GQ -Nc -bm -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -"} -(38,1,1) = {" -GQ -UI -UI -Vq -Vk -GQ -bm -bm -GQ -UI -qC -yi -GQ -zu -vQ -UI -GQ -bm -bm -GQ -qY -PF -hR -tF -GQ -"} -(39,1,1) = {" -vV -gz -SO -bO -Vk -gW -bm -bm -gW -UI -fc -fc -GQ -TK -TK -UI -gW -bm -bm -gW -Vk -Fm -qQ -bm -GQ -"} -(40,1,1) = {" -jW -gz -xT -bO -Vk -GQ -bm -bm -GQ -eB -kS -rI -GQ -WQ -Ee -eB -GQ -bm -bm -GQ -mT -jZ -Xg -tF -GQ -"} -(41,1,1) = {" -jW -gz -yi -bO -Vk -GQ -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -"} -(42,1,1) = {" -DJ -gz -xT -bO -Vk -GQ -bm -bm -GQ -UI -qC -yi -GQ -xT -vQ -UI -GQ -bm -bm -GQ -nj -PB -Qe -El -GQ -"} -(43,1,1) = {" -GQ -UI -UI -Vq -Vk -GQ -bm -bm -gW -UI -Xv -Xv -GQ -Kc -Kc -UI -gW -bm -bm -Sd -PB -PB -op -GQ -GQ -"} -(44,1,1) = {" -SS -GQ -JW -Vq -Vk -GQ -Nc -bm -GQ -eB -vg -NY -GQ -iw -Aj -eB -GQ -bm -bm -GQ -La -GH -Vw -GQ -SS -"} -(45,1,1) = {" -CO -SS -GQ -oI -Bd -GQ -bm -bm -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -GQ -bm -bm -GQ -FZ -GQ -GQ -SS -CO -"} -(46,1,1) = {" -CO -CO -SS -GQ -GQ -GQ -HX -bm -bm -bm -bm -CS -NP -jr -bm -bm -bm -bm -HX -GQ -GQ -GQ -SS -CO -CO -"} -(47,1,1) = {" -CO -CO -CO -CO -SS -GQ -SS -qQ -bm -bm -bm -CS -NP -jr -bm -bm -bm -qQ -SS -GQ -SS -CO -CO -CO -CO -"} -(48,1,1) = {" -CO -CO -CO -CO -CO -SS -GQ -GQ -gW -GQ -GQ -fi -PR -nx -GQ -GQ -GQ -GQ -GQ -SS -CO -CO -CO -CO -CO -"} -(49,1,1) = {" -CO -CO -CO -CO -CO -CO -GQ -oR -bm -bm -mG -CS -NP -as -Vt -bo -bo -bo -GQ -CO -CO -CO -CO -CO -CO -"} -(50,1,1) = {" -CO -CO -CO -CO -CO -CO -GQ -Xv -Xv -Xv -bm -CS -NP -as -WT -WT -se -WT -GQ -CO -CO -CO -CO -CO -CO -"} -(51,1,1) = {" -CO -CO -CO -CO -CO -CO -GQ -NY -NY -NY -bm -CS -DX -as -WT -bo -bo -bo -GQ -CO -CO -CO -CO -CO -CO -"} -(52,1,1) = {" -CO -CO -CO -CO -CO -CO -SS -GQ -GQ -GQ -GQ -gW -GQ -gW -GQ -GQ -GQ -GQ -SS -CO -CO -CO -CO -CO -CO -"} -(53,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -SS -GQ -fm -KS -CS -jm -jr -pC -cB -GQ -SS -CO -CO -CO -CO -CO -CO -CO -"} -(54,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -CO -wD -dx -jr -CS -NP -jr -CS -ya -wD -CO -CO -CO -CO -CO -CO -CO -CO -"} -(55,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -CO -GQ -PT -Nm -ZQ -NP -aJ -JB -ss -GQ -CO -CO -CO -CO -CO -CO -CO -CO -"} -(56,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -CO -SS -GQ -Pi -td -VP -td -nv -GQ -SS -CO -CO -CO -CO -CO -CO -CO -CO -"} -(57,1,1) = {" -CO -CO -CO -CO -CO -CO -CO -CO -CO -SS -GQ -fi -PR -nx -GQ -SS -CO -CO -CO -CO -CO -CO -CO -CO -CO -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ao" = ( +/obj/machinery/atmospherics/binary/circulator, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"as" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"at" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"aG" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/machinery/door/blast/regular{ + id = "reactorblastalien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"aH" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"aJ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"bc" = ( +/obj/machinery/power/supermatter/shard, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/survivalpod/superpose/LargeAlienShip) +"bi" = ( +/turf/simulated/floor, +/area/template_noop) +"bm" = ( +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"bo" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"bp" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"bv" = ( +/obj/structure/particle_accelerator/power_box{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"bw" = ( +/obj/structure/salvageable/data_os, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"bH" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"bO" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"cp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"cB" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"cL" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"cP" = ( +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"cX" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"db" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + id = "reactorblastalien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"de" = ( +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"ds" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "ReactorBlastAlien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"dx" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"dz" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"dB" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"dC" = ( +/obj/structure/particle_accelerator/end_cap{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"dS" = ( +/obj/structure/cryofeed{ + dir = 2 + }, +/obj/machinery/light/small/emergency, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"dZ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"ex" = ( +/obj/machinery/particle_accelerator/control_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"eB" = ( +/obj/structure/closet/alien, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"eT" = ( +/obj/effect/simple_portal/linked{ + portal_id = 7 + }, +/turf/simulated/floor/redgrid/animated, +/area/survivalpod/superpose/LargeAlienShip) +"fc" = ( +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/LargeAlienShip) +"fi" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"fm" = ( +/obj/machinery/computer/security/abductor{ + icon_screen = null + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"fr" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"fA" = ( +/obj/structure/cryofeed, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"fK" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"gc" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"gt" = ( +/obj/structure/prop/statue/phoron, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/survivalpod/superpose/LargeAlienShip) +"gz" = ( +/obj/structure/bed/chair/wood/wings, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"gA" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"gW" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"hw" = ( +/obj/machinery/vending/engivend{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"hR" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"hV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"iw" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/LargeAlienShip) +"iy" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/device/sleevemate, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"iM" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"iQ" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"jd" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"jg" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'RADIOACTIVE AREA'"; + icon_state = "radiation"; + name = "RADIOACTIVE AREA" + }, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/LargeAlienShip) +"jh" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastright{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/hooklauncher, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"ji" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/phoronrglass, +/obj/fiftyspawner/phoronrglass, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"jm" = ( +/obj/structure/table/alien, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"jr" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"jW" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"jZ" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"kq" = ( +/obj/machinery/gateway/brass{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"kD" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"kG" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/machinery/door/blast/regular{ + id = "reactorblastalien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"kO" = ( +/obj/structure/prop/alien/pod/open, +/obj/random/maintenance/morestuff, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"kS" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/LargeAlienShip) +"kV" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"lb" = ( +/obj/machinery/gateway/brass, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"lp" = ( +/turf/simulated/shuttle/wall/alien/blue/no_join, +/area/survivalpod/superpose/LargeAlienShip) +"lJ" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"mm" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"mv" = ( +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/rig/hazard/equipped, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"my" = ( +/obj/machinery/oxygen_pump/anesthetic, +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/LargeAlienShip) +"mG" = ( +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/obj/structure/closet/walllocker_double/west, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"mK" = ( +/obj/machinery/power/emitter/gyrotron, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"mQ" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"mT" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"nj" = ( +/obj/structure/table/alien, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"nt" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"nv" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"nx" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"nB" = ( +/obj/structure/closet/alien, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plasteel, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"nC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"oh" = ( +/obj/structure/prop/alien/pod/open, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"oi" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"op" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"oI" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/vending/fooddessert, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"oM" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"oR" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"ph" = ( +/obj/machinery/power/generator{ + anchored = 1; + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"pi" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"pq" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"pu" = ( +/obj/machinery/sleeper{ + dir = 4; + emagged = 1; + initial_bin_rating = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"pC" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/prop/alien/dispenser, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"qb" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/obj/random/maintenance/engineering, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"qe" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"qC" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"qQ" = ( +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/LargeAlienShip) +"qS" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"qY" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"rx" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"rI" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/tealcarpet, +/area/survivalpod/superpose/LargeAlienShip) +"rL" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"se" = ( +/obj/effect/alien/weeds/node, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"ss" = ( +/obj/structure/prop/alien/computer{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"td" = ( +/obj/structure/table/alien, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"tf" = ( +/obj/machinery/gateway/brass{ + dir = 6 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"tx" = ( +/obj/machinery/gateway/brass{ + dir = 4 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"tF" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"tK" = ( +/obj/structure/prop/alien/computer/hybrid, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"uf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"uI" = ( +/obj/structure/prop/alien/pod/open, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"uQ" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"uT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"uU" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"ve" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/hand_labeler, +/obj/item/device/tape/random, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"vg" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/LargeAlienShip) +"vH" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"vQ" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"vV" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"wr" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"wD" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"wQ" = ( +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/structure/closet/alien, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LargeAlienShip) +"xs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"xC" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"xG" = ( +/obj/structure/prop/alien/computer/hybrid{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"xT" = ( +/obj/structure/table/darkglass, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"ya" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"yi" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"yv" = ( +/obj/structure/prop/fake_ai{ + name = "P0ps1ck13" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"yI" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"yM" = ( +/obj/machinery/gateway/brass{ + dir = 10 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"yP" = ( +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"yY" = ( +/obj/structure/particle_accelerator/particle_emitter/right{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"zc" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"zu" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"zH" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"zI" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Aj" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/LargeAlienShip) +"AB" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"AL" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westright{ + name = "Combat Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/device/slow_sizegun, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"AO" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "ReactorBlastAlien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"AP" = ( +/obj/machinery/vending/medical{ + dir = 4; + emagged = 1; + pixel_x = 5; + req_access = list(777) + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"AS" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Bd" = ( +/obj/machinery/vending/hotfood, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Bf" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Bh" = ( +/obj/structure/prop/alien/pod/open, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"BE" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"Cy" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"CO" = ( +/turf/template_noop, +/area/template_noop) +"CS" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"CY" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"Dn" = ( +/obj/structure/table/alien/blue, +/obj/item/weapon/storage/firstaid/surgery, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"DA" = ( +/obj/structure/closet/alien, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"DF" = ( +/obj/structure/prop/alien/pod/hybrid, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"DJ" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"DK" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/tape_roll, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"DX" = ( +/obj/item/weapon/tape_roll, +/obj/item/sticky_pad/random, +/obj/item/weapon/pen/blue, +/obj/item/weapon/pen/blue, +/obj/item/fulton_core, +/obj/item/fulton_core, +/obj/item/extraction_pack, +/obj/item/extraction_pack, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/item/weapon/pickaxe/hand, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/flashlight/color/orange, +/obj/item/device/threadneedle, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/device/flashlight/lantern, +/obj/random/soap, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/stack/nanopaste, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/stack/marker_beacon/ten, +/obj/item/device/starcaster_news, +/obj/item/device/mapping_unit, +/obj/item/weapon/storage/box/dosimeter, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/device/pda, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/gun/energy/locked/phasegun, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/weapon/material/knife/machete, +/obj/item/weapon/material/fishing_net, +/obj/item/weapon/storage/backpack/sport, +/obj/item/weapon/storage/backpack/sport, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/storage/belt, +/obj/item/clothing/accessory/poncho/thermal, +/obj/machinery/smartfridge/survival_pod{ + desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."; + icon = 'icons/obj/abductor_vr.dmi'; + icon_base = "dispenser_2way"; + icon_state = "dispenser_2way"; + name = "Implant-Co" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LargeAlienShip) +"Ee" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/LargeAlienShip) +"El" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"Ep" = ( +/obj/structure/particle_accelerator/particle_emitter/left{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Fm" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/LargeAlienShip) +"FU" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"FZ" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain/open/shower/security, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"Gd" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "reactorblastalien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"GC" = ( +/obj/machinery/gateway/brass{ + dir = 8 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"GH" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"GQ" = ( +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/survivalpod/superpose/LargeAlienShip) +"HW" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"HX" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/LargeAlienShip) +"Ib" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Ir" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/pen/reagent/paralysis, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"Iy" = ( +/obj/machinery/gateway/brass{ + dir = 5 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"IO" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/slime_cube, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/LargeAlienShip) +"Jt" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Scrubber to Waste" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"JB" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"JD" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/LargeAlienShip) +"JU" = ( +/obj/machinery/gateway/brass{ + dir = 9 + }, +/turf/simulated/floor/flock, +/area/survivalpod/superpose/LargeAlienShip) +"JW" = ( +/obj/machinery/media/jukebox/casinojukebox, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"Kc" = ( +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/LargeAlienShip) +"Ko" = ( +/obj/machinery/power/emitter/gyrotron{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Kq" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/bed/chair/bay/comfy/teal, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"KB" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"KS" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/prop/alien/dispenser, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"KT" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"La" = ( +/obj/machinery/door/window/survival_pod, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"Lh" = ( +/obj/machinery/door/airlock/vault, +/obj/structure/fans/hardlight, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/survivalpod/superpose/LargeAlienShip) +"LM" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Md" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Mf" = ( +/obj/machinery/button/remote/blast_door{ + desc = "A remote control-switch for the engine charging port."; + id = "reactorblastalien"; + name = "Reactor Blast Doors"; + pixel_x = -25; + pixel_y = 6; + req_access = null + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Nc" = ( +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Nd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Nm" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 4 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"NI" = ( +/obj/structure/table/alien/blue, +/obj/structure/window/reinforced/survival_pod, +/obj/item/weapon/clipboard, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"NP" = ( +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"NY" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/LargeAlienShip) +"Pi" = ( +/obj/structure/prop/alien/computer/camera{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Pq" = ( +/obj/machinery/light/poi{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Py" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/prop/alien/pod/open, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"PB" = ( +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"PF" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/cryofeed{ + pixel_x = -32 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"PL" = ( +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/survivalpod/superpose/LargeAlienShip) +"PR" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"PT" = ( +/obj/machinery/computer/crew{ + icon = 'icons/obj/abductor_vr.dmi'; + icon_screen = null; + icon_state = "console-c" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Qe" = ( +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"Qi" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Qu" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"QH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Sd" = ( +/obj/machinery/door/airlock/alien{ + req_one_access = null + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Sp" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/table/alien/blue, +/obj/machinery/chemical_dispenser/full{ + pixel_y = 11 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"SK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"SO" = ( +/obj/structure/table/darkglass, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"SS" = ( +/turf/simulated/shuttle/wall/alien/blue, +/area/survivalpod/superpose/LargeAlienShip) +"SY" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Ti" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/bed/chair/bay/comfy/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Tr" = ( +/obj/structure/table/alien/blue, +/obj/machinery/door/window/brigdoor/northright{ + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"Tx" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"TK" = ( +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/LargeAlienShip) +"TL" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/alien, +/area/survivalpod/superpose/LargeAlienShip) +"Um" = ( +/obj/effect/fusion_em_field, +/turf/simulated/floor/reinforced/nitrogen{ + nitrogen = 82.1472 + }, +/area/survivalpod/superpose/LargeAlienShip) +"Un" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Uu" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"UI" = ( +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"US" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Vk" = ( +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"Vq" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/wood/sif, +/area/survivalpod/superpose/LargeAlienShip) +"Vt" = ( +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/obj/structure/closet/walllocker_double/west, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LargeAlienShip) +"Vu" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Vw" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/LargeAlienShip) +"VF" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"VP" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"VR" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"VS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"WJ" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"WQ" = ( +/obj/structure/bed/nest, +/turf/simulated/floor/carpet/gaycarpet, +/area/survivalpod/superpose/LargeAlienShip) +"WT" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"WX" = ( +/obj/machinery/vending/tool{ + emagged = 1; + req_access = list(777); + req_log_access = null + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/LargeAlienShip) +"Xc" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Xg" = ( +/obj/machinery/cryopod, +/obj/structure/cryofeed{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) +"Xk" = ( +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/structure/closet/alien, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LargeAlienShip) +"Xv" = ( +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/LargeAlienShip) +"XA" = ( +/obj/structure/particle_accelerator/fuel_chamber{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"XC" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastleft{ + name = "Laser Armor" + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/crossbow/largecrossbow, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/LargeAlienShip) +"XY" = ( +/obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"Yw" = ( +/obj/structure/grille/cult{ + name = "Alien grille" + }, +/obj/structure/window/phoronreinforced/full, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "ReactorBlastAlien"; + layer = 3.3; + name = "Reactor Blast Door" + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/LargeAlienShip) +"YA" = ( +/obj/structure/closet/alien, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/clothing/suit/space/void/autolok, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/tank/emergency/oxygen/double, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/LargeAlienShip) +"YP" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 4; + pixel_x = -3 + }, +/turf/template_noop, +/area/template_noop) +"Zh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/filingcabinet/medical, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/LargeAlienShip) +"Zp" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/LargeAlienShip) +"Zq" = ( +/obj/machinery/power/rad_collector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/cyan, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"ZN" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable{ + icon = 'icons/obj/alien_smes.dmi'; + icon_state = "unit"; + input_level = 950000; + name = "Alien Royal Capacitor"; + output_level = 950000 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LargeAlienShip) +"ZQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/shuttle/floor/alienplating, +/area/survivalpod/superpose/LargeAlienShip) + +(1,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +CO +CO +Uu +CO +CO +CO +Uu +CO +CO +CO +Uu +CO +CO +CO +CO +CO +CO +CO +"} +(2,1,1) = {" +CO +CO +CO +CO +Uu +CO +GQ +bi +bi +bi +GQ +bi +bi +bi +GQ +bi +bi +bi +GQ +CO +CO +CO +Uu +CO +CO +"} +(3,1,1) = {" +CO +CO +CO +CO +CO +CO +GQ +WT +WT +WT +GQ +WT +WT +WT +GQ +WT +WT +WT +GQ +CO +CO +CO +CO +CO +CO +"} +(4,1,1) = {" +CO +GQ +WT +WT +WT +SS +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +SS +WT +WT +WT +GQ +CO +"} +(5,1,1) = {" +CO +GQ +GQ +GQ +GQ +GQ +GQ +SS +zI +zI +zI +ZQ +NP +aJ +zI +zI +zI +SS +GQ +GQ +GQ +GQ +GQ +GQ +CO +"} +(6,1,1) = {" +CO +GQ +oh +nC +WT +mK +pi +CS +VR +NP +NP +NP +NP +VR +NP +NP +VR +jr +pi +Ko +WT +nC +uI +GQ +CO +"} +(7,1,1) = {" +CO +GQ +Bh +nt +WT +US +GQ +CS +NP +Vk +NP +NP +NP +NP +NP +Vk +NP +jr +GQ +hV +WT +rx +Py +GQ +CO +"} +(8,1,1) = {" +CO +GQ +qe +xs +gA +Zq +vV +CS +NP +NP +lp +dZ +Lh +pq +lp +NP +NP +jr +vV +uQ +uU +lJ +qe +GQ +CO +"} +(9,1,1) = {" +CO +GQ +ao +SK +vH +Vu +jW +CS +VR +NP +Yw +bc +Um +bc +Yw +NP +NP +jr +jW +uQ +Xc +KT +ao +GQ +CO +"} +(10,1,1) = {" +CO +GQ +ph +xs +vH +Vu +jW +CS +NP +NP +Gd +PL +gt +PL +ds +NP +NP +jr +jW +uQ +Xc +lJ +ph +GQ +CO +"} +(11,1,1) = {" +CO +GQ +dz +SK +vH +Vu +jW +CS +NP +NP +AO +bc +Um +bc +AO +NP +VR +jr +jW +uQ +Xc +KT +dz +GQ +CO +"} +(12,1,1) = {" +CO +GQ +ZN +cp +HW +Vu +DJ +CS +NP +NP +lp +db +kG +aG +lp +NP +NP +jr +DJ +uQ +fK +fr +oi +GQ +CO +"} +(13,1,1) = {" +CO +GQ +Nd +LM +WT +qS +GQ +CS +NP +Vk +NP +NP +NP +NP +Mf +Vk +NP +jr +GQ +hV +WT +zH +wr +GQ +CO +"} +(14,1,1) = {" +CO +GQ +Jt +Jt +WT +mm +CY +CS +VR +NP +NP +VR +NP +NP +NP +NP +VR +jr +CY +Ko +WT +Jt +Jt +GQ +CO +"} +(15,1,1) = {" +CO +GQ +VF +Pq +WT +qS +GQ +SS +FU +FU +FU +rL +NP +AS +FU +FU +FU +SS +GQ +hV +WT +VF +VF +GQ +CO +"} +(16,1,1) = {" +CO +GQ +GQ +GQ +gW +jg +GQ +GQ +gW +GQ +jg +fi +PR +nx +jg +GQ +gW +GQ +GQ +jg +gW +GQ +GQ +GQ +CO +"} +(17,1,1) = {" +CO +SS +GQ +HX +bm +bm +bm +bm +bm +CS +kV +Bf +Bf +Bf +KB +jr +bm +bm +bm +bm +bm +HX +GQ +SS +CO +"} +(18,1,1) = {" +CO +CO +SS +SS +qQ +bm +bm +bm +bm +CS +yI +Ep +iQ +yY +Md +jr +bm +bm +bm +bm +qQ +SS +SS +CO +CO +"} +(19,1,1) = {" +CO +CO +CO +GQ +GQ +gW +GQ +GQ +bm +CS +yI +VS +bv +zc +Md +jr +bm +GQ +GQ +gW +GQ +GQ +CO +CO +CO +"} +(20,1,1) = {" +CO +CO +GQ +SS +mQ +cP +uf +GQ +bm +CS +yI +ex +XA +zc +Md +jr +bm +GQ +Sp +de +DA +SS +GQ +CO +CO +"} +(21,1,1) = {" +CO +CO +GQ +WX +cP +cP +Md +DK +bm +CS +yI +QH +dC +uT +Md +jr +bm +Ir +yI +de +de +WJ +GQ +CO +CO +"} +(22,1,1) = {" +CO +CO +wD +ji +cP +cP +Md +ve +bm +CS +cX +Qi +Qi +Qi +iM +jr +bm +bH +yI +de +de +pu +wD +CO +CO +"} +(23,1,1) = {" +CO +CO +GQ +nB +cP +cP +Kq +Qu +bm +CS +NP +NP +NP +NP +NP +jr +bm +Tr +Ti +de +de +aH +my +CO +CO +"} +(24,1,1) = {" +CO +CO +GQ +hw +cP +cP +Md +NI +bm +TL +NP +SS +xC +SS +NP +Fm +bm +iy +yI +de +de +Zp +GQ +CO +CO +"} +(25,1,1) = {" +CO +CO +SS +GQ +GQ +qb +Zh +GQ +bm +TL +NP +SS +bw +SS +NP +Fm +bm +GQ +Un +de +AP +GQ +SS +CO +CO +"} +(26,1,1) = {" +CO +CO +CO +SS +GQ +GQ +GQ +GQ +bm +TL +NP +SS +xC +SS +NP +Fm +bm +GQ +GQ +Dn +GQ +SS +CO +CO +CO +"} +(27,1,1) = {" +CO +CO +CO +CO +SS +GQ +SS +qQ +bm +TL +NP +NP +NP +NP +NP +Fm +bm +qQ +SS +GQ +SS +CO +CO +CO +CO +"} +(28,1,1) = {" +CO +CO +CO +CO +CO +GQ +HX +bm +bm +SY +FU +rL +NP +AS +FU +bp +bm +bm +HX +GQ +CO +CO +CO +CO +CO +"} +(29,1,1) = {" +CO +CO +YP +CO +CO +gW +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +bm +bm +gW +CO +CO +CO +YP +CO +"} +(30,1,1) = {" +GQ +WT +WT +GQ +CO +wD +bm +bm +GQ +DF +fA +at +GQ +XC +jh +IO +GQ +bm +bm +wD +CO +GQ +WT +WT +GQ +"} +(31,1,1) = {" +SS +GQ +GQ +GQ +GQ +GQ +Nc +bm +gW +qQ +yv +dS +GQ +AB +yP +Fm +gW +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +"} +(32,1,1) = {" +GQ +jd +kD +oM +kO +GQ +bm +bm +GQ +BE +JD +at +GQ +AL +mv +IO +GQ +bm +bm +GQ +kO +dB +cL +Ib +GQ +"} +(33,1,1) = {" +GQ +jd +kD +oM +kO +GQ +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +bm +bm +GQ +kO +dB +cL +Ib +GQ +"} +(34,1,1) = {" +GQ +tK +WT +Cy +wQ +GQ +bm +bm +GQ +UI +qC +zu +GQ +JU +GC +yM +Md +bm +bm +GQ +Xk +Tx +WT +xG +GQ +"} +(35,1,1) = {" +GQ +jd +kD +oM +Vk +gW +bm +bm +gW +UI +Kc +Kc +GQ +kq +eT +lb +Md +bm +bm +gW +Vk +dB +cL +Ib +GQ +"} +(36,1,1) = {" +GQ +jd +kD +XY +YA +GQ +bm +bm +GQ +eB +Aj +iw +GQ +Iy +tx +tf +Md +bm +bm +GQ +YA +gc +cL +Ib +GQ +"} +(37,1,1) = {" +GQ +GQ +GQ +GQ +GQ +GQ +Nc +bm +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +"} +(38,1,1) = {" +GQ +UI +UI +Vq +Vk +GQ +bm +bm +GQ +UI +qC +yi +GQ +zu +vQ +UI +GQ +bm +bm +GQ +qY +PF +hR +tF +GQ +"} +(39,1,1) = {" +vV +gz +SO +bO +Vk +gW +bm +bm +gW +UI +fc +fc +GQ +TK +TK +UI +gW +bm +bm +gW +Vk +Fm +qQ +bm +GQ +"} +(40,1,1) = {" +jW +gz +xT +bO +Vk +GQ +bm +bm +GQ +eB +kS +rI +GQ +WQ +Ee +eB +GQ +bm +bm +GQ +mT +jZ +Xg +tF +GQ +"} +(41,1,1) = {" +jW +gz +yi +bO +Vk +GQ +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +"} +(42,1,1) = {" +DJ +gz +xT +bO +Vk +GQ +bm +bm +GQ +UI +qC +yi +GQ +xT +vQ +UI +GQ +bm +bm +GQ +nj +PB +Qe +El +GQ +"} +(43,1,1) = {" +GQ +UI +UI +Vq +Vk +GQ +bm +bm +gW +UI +Xv +Xv +GQ +Kc +Kc +UI +gW +bm +bm +Sd +PB +PB +op +GQ +GQ +"} +(44,1,1) = {" +SS +GQ +JW +Vq +Vk +GQ +Nc +bm +GQ +eB +vg +NY +GQ +iw +Aj +eB +GQ +bm +bm +GQ +La +GH +Vw +GQ +SS +"} +(45,1,1) = {" +CO +SS +GQ +oI +Bd +GQ +bm +bm +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +GQ +bm +bm +GQ +FZ +GQ +GQ +SS +CO +"} +(46,1,1) = {" +CO +CO +SS +GQ +GQ +GQ +HX +bm +bm +bm +bm +CS +NP +jr +bm +bm +bm +bm +HX +GQ +GQ +GQ +SS +CO +CO +"} +(47,1,1) = {" +CO +CO +CO +CO +SS +GQ +SS +qQ +bm +bm +bm +CS +NP +jr +bm +bm +bm +qQ +SS +GQ +SS +CO +CO +CO +CO +"} +(48,1,1) = {" +CO +CO +CO +CO +CO +SS +GQ +GQ +gW +GQ +GQ +fi +PR +nx +GQ +GQ +GQ +GQ +GQ +SS +CO +CO +CO +CO +CO +"} +(49,1,1) = {" +CO +CO +CO +CO +CO +CO +GQ +oR +bm +bm +mG +CS +NP +as +Vt +bo +bo +bo +GQ +CO +CO +CO +CO +CO +CO +"} +(50,1,1) = {" +CO +CO +CO +CO +CO +CO +GQ +Xv +Xv +Xv +bm +CS +NP +as +WT +WT +se +WT +GQ +CO +CO +CO +CO +CO +CO +"} +(51,1,1) = {" +CO +CO +CO +CO +CO +CO +GQ +NY +NY +NY +bm +CS +DX +as +WT +bo +bo +bo +GQ +CO +CO +CO +CO +CO +CO +"} +(52,1,1) = {" +CO +CO +CO +CO +CO +CO +SS +GQ +GQ +GQ +GQ +gW +GQ +gW +GQ +GQ +GQ +GQ +SS +CO +CO +CO +CO +CO +CO +"} +(53,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +SS +GQ +fm +KS +CS +jm +jr +pC +cB +GQ +SS +CO +CO +CO +CO +CO +CO +CO +"} +(54,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +CO +wD +dx +jr +CS +NP +jr +CS +ya +wD +CO +CO +CO +CO +CO +CO +CO +CO +"} +(55,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +CO +GQ +PT +Nm +ZQ +NP +aJ +JB +ss +GQ +CO +CO +CO +CO +CO +CO +CO +CO +"} +(56,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +CO +SS +GQ +Pi +td +VP +td +nv +GQ +SS +CO +CO +CO +CO +CO +CO +CO +CO +"} +(57,1,1) = {" +CO +CO +CO +CO +CO +CO +CO +CO +CO +SS +GQ +fi +PR +nx +GQ +SS +CO +CO +CO +CO +CO +CO +CO +CO +CO +"} diff --git a/modular_chomp/maps/submaps/shelters/LoneHome-18x22.dmm b/modular_chomp/maps/submaps/shelters/LoneHome-18x22.dmm index 5a63f42568..ae1a2dc99b 100644 --- a/modular_chomp/maps/submaps/shelters/LoneHome-18x22.dmm +++ b/modular_chomp/maps/submaps/shelters/LoneHome-18x22.dmm @@ -1,1659 +1,1659 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ab" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"ac" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LoneHome) -"ad" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/LoneHome) -"ae" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ag" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ah" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"ai" = ( -/obj/structure/coatrack, -/obj/machinery/button/windowtint{ - id = "h-living"; - pixel_x = -27 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"ak" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"al" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"am" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"an" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ao" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ap" = ( -/obj/structure/table/bench/marble, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ar" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"as" = ( -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"au" = ( -/obj/item/device/tape, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"av" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/extinguisher{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/structure/mopbucket{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/weapon/mop, -/obj/item/device/multitool, -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/obj/random/unidentified_medicine, -/turf/simulated/floor/tiled, -/area/survivalpod/superpose/LoneHome) -"aw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ax" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"ay" = ( -/obj/item/clothing/suit/storage/apron/white, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"az" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/glasses/square{ - pixel_y = -2 - }, -/obj/item/weapon/storage/box/glass_extras/sticks{ - pixel_y = 4 - }, -/obj/item/weapon/storage/box/glass_extras/straws{ - pixel_y = 7 - }, -/obj/item/weapon/packageWrap, -/obj/structure/curtain/open/bed, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aA" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/condimentbottles, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/obj/structure/curtain/open/bed, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aB" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"aC" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aD" = ( -/obj/structure/bed/chair/oldsofa/left, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aE" = ( -/obj/structure/table/fancyblack, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aF" = ( -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aG" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aH" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/kitchen/utensil/spoon, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aI" = ( -/obj/structure/table/marble, -/obj/item/weapon/material/sharpeningkit, -/obj/item/weapon/reagent_containers/dropper, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aJ" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aK" = ( -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"aL" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"aM" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"aN" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 3 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"aO" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aP" = ( -/obj/structure/table/bench/glass, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"aQ" = ( -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"aR" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"aS" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aT" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aU" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aV" = ( -/obj/structure/bed/chair/wood, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"aW" = ( -/obj/item/weapon/material/shard{ - pixel_x = 6 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"aX" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"aY" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"aZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"ba" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bc" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"bd" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"be" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bf" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/LoneHome) -"bg" = ( -/obj/structure/bed/chair/oldsofa/corner{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "h-living" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bh" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bi" = ( -/obj/structure/table/fancyblack, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bj" = ( -/obj/item/weapon/module/power_control, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bk" = ( -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bl" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bm" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/structure/flora/pottedplant/fern{ - pixel_y = 12 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bn" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"bo" = ( -/obj/item/weapon/material/kitchen/utensil/fork, -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bp" = ( -/obj/structure/table/fancyblack, -/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bq" = ( -/obj/structure/table/fancyblack, -/obj/item/trash/plate, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"br" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"bs" = ( -/obj/item/weapon/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bt" = ( -/obj/item/weapon/material/kitchen/utensil/spoon{ - pixel_x = 2 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bu" = ( -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bv" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/machinery/button/windowtint{ - id = "h-kitchen"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bw" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "h-kitchen" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bx" = ( -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"by" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/LoneHome) -"bz" = ( -/obj/structure/table/rack, -/obj/item/weapon/material/knife/ritual, -/obj/structure/curtain/open/bed, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/head/soft/solgov/veteranhat, -/obj/item/clothing/under/swimsuit/fluff/penelope, -/obj/item/weapon/makeover, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bA" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/item/weapon/book/tome/imbued, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bB" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/LoneHome) -"bC" = ( -/turf/simulated/floor/tiled/white, -/area/survivalpod/superpose/LoneHome) -"bD" = ( -/obj/item/seeds/random, -/obj/item/seeds/random, -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bE" = ( -/obj/item/seeds/random, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bF" = ( -/obj/machinery/light/small, -/obj/item/weapon/ore/diamond, -/obj/structure/sign/goldenplaque{ - desc = "Done No Harm."; - name = "Best Doctor 2552"; - pixel_y = -32 - }, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bG" = ( -/obj/item/weapon/reagent_containers/glass/rag, -/obj/item/clothing/gloves/ring/engagement, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bH" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bI" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/carp_plushie, -/obj/random/curseditem, -/obj/random/junk, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bJ" = ( -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bK" = ( -/obj/item/weapon/cell/high/empty, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bL" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; - name = "Stained sheet of paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bN" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bO" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/kitchenspike, -/obj/effect/rune, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"bP" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper/courtroom, -/obj/item/weapon/paper_bin, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bQ" = ( -/obj/item/weapon/pen/fountain, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bS" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bT" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"bU" = ( -/obj/item/weapon/photo, -/obj/item/weapon/photo{ - pixel_x = 4 - }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bV" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/storage/box/characters, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bW" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/cosmos, -/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bY" = ( -/obj/structure/closet/cabinet, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/multiple, -/obj/random/toy, -/obj/random/toy, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"bZ" = ( -/obj/item/clothing/suit/straight_jacket, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ca" = ( -/obj/machinery/gibber/autogibber{ - emagged = 1 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cb" = ( -/obj/structure/closet/cabinet, -/obj/item/weapon/storage/wallet/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/melee/umbrella/random, -/obj/random/ammo, -/obj/random/cigarettes, -/obj/random/contraband, -/obj/random/junk, -/obj/random/maintenance/security, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cc" = ( -/mob/living/simple_mob/animal/passive/cat/bones{ - desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; - name = "Felix" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cd" = ( -/obj/structure/bed/double/padded, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ce" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod/superpose/LoneHome) -"cf" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/bcarpet, -/area/survivalpod/superpose/LoneHome) -"cg" = ( -/obj/item/weapon/reagent_containers/blood, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/pack/cardemon, -/obj/item/weapon/deck/tarot, -/obj/structure/table/wooden_reinforced, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ch" = ( -/obj/item/organ/internal/liver, -/obj/random/trash, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ci" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi, -/obj/item/weapon/surgical/bonesetter, -/obj/item/weapon/bone/ribs, -/obj/item/weapon/bone/skull{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cj" = ( -/obj/structure/sign/periodic, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/LoneHome) -"ck" = ( -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cl" = ( -/obj/item/weapon/phone, -/obj/structure/table/bench/wooden, -/obj/item/weapon/paper{ - info = "Seems to be filled with odd runes drawn with blood"; - name = "Blood stained paper" - }, -/obj/machinery/button/windowtint{ - id = "h-master"; - pixel_y = -29 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cm" = ( -/obj/item/weapon/pack/cardemon, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cn" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/pirate, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/trash, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"co" = ( -/obj/structure/closet/cabinet, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/tech_supply/component, -/obj/random/toolbox, -/obj/random/toolbox, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cp" = ( -/obj/item/clothing/mask/muzzle, -/obj/random/trash, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cq" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/brain/grey, -/obj/item/weapon/material/knife/plastic, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cr" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/overgrown{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cs" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/bamboo{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"ct" = ( -/obj/structure/table/bench/marble, -/obj/structure/flora/pottedplant/dead{ - pixel_y = 7 - }, -/obj/structure/window/reinforced/polarized{ - id = "h-master" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/LoneHome) -"cv" = ( -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/obj/structure/table/rack/shelf/steel, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) -"cw" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cx" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/fruitgland, -/obj/item/weapon/material/knife/hook, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cz" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cA" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cB" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cC" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cD" = ( -/obj/item/frame/apc, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 22 - }, -/obj/random/junk, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cE" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/fiftyspawner/wood, -/obj/fiftyspawner/steel, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cF" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/chainsaw, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/extinguisher, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cG" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cH" = ( -/obj/structure/table/marble, -/obj/item/organ/internal/intestine/unathi{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/item/organ/internal/lungs, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cI" = ( -/obj/structure/fence, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cJ" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cK" = ( -/obj/item/weapon/material/minihoe, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cL" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cN" = ( -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cO" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cP" = ( -/obj/item/organ/internal/lungs/vox, -/obj/item/weapon/beartrap/hunting{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/obj/structure/curtain/black, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"cQ" = ( -/obj/structure/fence/cut/medium, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cR" = ( -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cS" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cT" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"cU" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"cV" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cW" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"cX" = ( -/obj/structure/fence/door/opened, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"cY" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"cZ" = ( -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/simulated/floor/outdoors/grass/heavy, -/area/survivalpod/superpose/LoneHome) -"da" = ( -/obj/structure/fence/corner, -/turf/template_noop, -/area/survivalpod/superpose/LoneHome) -"mx" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/survivalpod/superpose/LoneHome) -"ES" = ( -/obj/structure/simple_door/wood, -/obj/structure/sign/graffiti/pisoff, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/LoneHome) - -(1,1,1) = {" -aQ -aQ -aQ -ad -aQ -aB -aN -aY -aY -ag -ad -ad -ad -ad -ad -aQ -aQ -cR -cR -aQ -cR -cR -"} -(2,1,1) = {" -aQ -ab -ad -ad -ap -aC -aO -aO -bg -ad -ad -bI -bP -cb -cj -ad -ad -cI -cQ -cI -cS -aQ -"} -(3,1,1) = {" -aQ -ad -ad -ai -aJ -aD -aP -aP -bh -ad -cv -bJ -bQ -cc -ak -ad -cz -cR -cR -cR -cT -aQ -"} -(4,1,1) = {" -ab -ab -ae -aj -ar -aE -bT -bT -bi -ad -bz -bK -bR -bS -as -cr -cA -cR -cR -cR -cU -aQ -"} -(5,1,1) = {" -ab -ad -ad -ak -as -aj -aZ -aZ -aJ -ad -bA -bL -bH -bT -aJ -cs -cz -cJ -cR -cR -cV -aQ -"} -(6,1,1) = {" -aQ -aQ -ad -ag -aJ -as -aR -cu -aq -ag -aq -bM -bT -bT -ck -ct -cB -cR -cR -cR -cW -aQ -"} -(7,1,1) = {" -aQ -aQ -aQ -ad -au -aF -aJ -ba -bj -ad -bB -as -bU -cd -cl -ad -cA -cR -cR -cR -cW -aQ -"} -(8,1,1) = {" -aQ -aQ -aQ -ad -ad -ag -ae -ad -bk -ad -ae -ad -ag -ad -ad -ad -ad -cK -cR -cR -cU -aQ -"} -(9,1,1) = {" -aQ -aQ -aQ -ad -av -ae -aq -aq -bl -ah -br -bN -ar -ar -ar -aj -ae -cR -cR -cR -cX -aQ -"} -(10,1,1) = {" -aQ -aQ -ad -ad -ad -ad -ae -ad -bm -ag -ad -ad -ad -ES -ad -ad -ad -cL -ad -cR -cT -aQ -"} -(11,1,1) = {" -aQ -aQ -ad -al -ax -aG -aJ -bb -aJ -bs -bD -ad -bV -br -ak -by -cC -aa -ad -cR -cU -aQ -"} -(12,1,1) = {" -aQ -aQ -ag -am -ax -aH -aq -bc -aq -bt -bE -ag -bW -ce -cm -ad -cD -ac -ad -cR -cT -aQ -"} -(13,1,1) = {" -aQ -aQ -ag -an -ay -aI -aS -aj -bn -aJ -bF -ad -bX -cf -cn -ad -cE -cN -ag -cR -cY -aQ -"} -(14,1,1) = {" -aQ -aQ -ad -ao -aw -aw -aT -aj -bo -bu -bG -ad -bY -cg -co -ad -cF -cO -ad -cR -cT -aQ -"} -(15,1,1) = {" -aQ -aQ -ad -ad -az -bC -aU -bd -bp -bv -ad -ad -ad -ad -ad -ad -ad -mx -ad -cR -cT -aQ -"} -(16,1,1) = {" -aQ -aQ -aQ -ad -aA -aK -aV -be -bq -bw -ad -bO -bZ -ch -cp -cw -cG -cP -ag -cR -cZ -aQ -"} -(17,1,1) = {" -aQ -aQ -aQ -ad -ab -aL -aW -bf -aM -bx -ad -ad -ca -ci -cq -cx -cH -ad -ad -cI -da -cR -"} -(18,1,1) = {" -aQ -aQ -aQ -ab -aQ -aQ -aX -aQ -aQ -ab -aQ -ad -ad -ad -ad -ad -ad -ad -aQ -aQ -aQ -aQ -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ab" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"ac" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LoneHome) +"ad" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/LoneHome) +"ae" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ag" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ah" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"ai" = ( +/obj/structure/coatrack, +/obj/machinery/button/windowtint{ + id = "h-living"; + pixel_x = -27 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"ak" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"al" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"am" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"an" = ( +/obj/structure/table/marble, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ao" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ap" = ( +/obj/structure/table/bench/marble, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ar" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"as" = ( +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"au" = ( +/obj/item/device/tape, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"av" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/extinguisher{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/structure/mopbucket{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/weapon/mop, +/obj/item/device/multitool, +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/obj/random/unidentified_medicine, +/turf/simulated/floor/tiled, +/area/survivalpod/superpose/LoneHome) +"aw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ax" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"ay" = ( +/obj/item/clothing/suit/storage/apron/white, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"az" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/glasses/square{ + pixel_y = -2 + }, +/obj/item/weapon/storage/box/glass_extras/sticks{ + pixel_y = 4 + }, +/obj/item/weapon/storage/box/glass_extras/straws{ + pixel_y = 7 + }, +/obj/item/weapon/packageWrap, +/obj/structure/curtain/open/bed, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aA" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/condimentbottles, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/obj/structure/curtain/open/bed, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aB" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"aC" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aD" = ( +/obj/structure/bed/chair/oldsofa/left, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aE" = ( +/obj/structure/table/fancyblack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aF" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aG" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aH" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/kitchen/utensil/spoon, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aI" = ( +/obj/structure/table/marble, +/obj/item/weapon/material/sharpeningkit, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aJ" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aK" = ( +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"aL" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"aM" = ( +/obj/item/weapon/material/shard, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"aN" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"aO" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aP" = ( +/obj/structure/table/bench/glass, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"aQ" = ( +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"aR" = ( +/obj/random/junk, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"aS" = ( +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aT" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aU" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aV" = ( +/obj/structure/bed/chair/wood, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"aW" = ( +/obj/item/weapon/material/shard{ + pixel_x = 6 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"aX" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"aY" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"aZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"ba" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bb" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bc" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"bd" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"be" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bf" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/LoneHome) +"bg" = ( +/obj/structure/bed/chair/oldsofa/corner{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "h-living" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bh" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bi" = ( +/obj/structure/table/fancyblack, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bj" = ( +/obj/item/weapon/module/power_control, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bk" = ( +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bl" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bm" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/structure/flora/pottedplant/fern{ + pixel_y = 12 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bn" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/sugar, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"bo" = ( +/obj/item/weapon/material/kitchen/utensil/fork, +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bp" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bq" = ( +/obj/structure/table/fancyblack, +/obj/item/trash/plate, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"br" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"bs" = ( +/obj/item/weapon/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bt" = ( +/obj/item/weapon/material/kitchen/utensil/spoon{ + pixel_x = 2 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bu" = ( +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bv" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/machinery/button/windowtint{ + id = "h-kitchen"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bw" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "h-kitchen" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bx" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"by" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/LoneHome) +"bz" = ( +/obj/structure/table/rack, +/obj/item/weapon/material/knife/ritual, +/obj/structure/curtain/open/bed, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/head/soft/solgov/veteranhat, +/obj/item/clothing/under/swimsuit/fluff/penelope, +/obj/item/weapon/makeover, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bA" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/item/weapon/book/tome/imbued, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bB" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/LoneHome) +"bC" = ( +/turf/simulated/floor/tiled/white, +/area/survivalpod/superpose/LoneHome) +"bD" = ( +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bE" = ( +/obj/item/seeds/random, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bF" = ( +/obj/machinery/light/small, +/obj/item/weapon/ore/diamond, +/obj/structure/sign/goldenplaque{ + desc = "Done No Harm."; + name = "Best Doctor 2552"; + pixel_y = -32 + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bG" = ( +/obj/item/weapon/reagent_containers/glass/rag, +/obj/item/clothing/gloves/ring/engagement, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bH" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bI" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/carp_plushie, +/obj/random/curseditem, +/obj/random/junk, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bJ" = ( +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bK" = ( +/obj/item/weapon/cell/high/empty, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bL" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; + name = "Stained sheet of paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bN" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bO" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/kitchenspike, +/obj/effect/rune, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"bP" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper/courtroom, +/obj/item/weapon/paper_bin, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bQ" = ( +/obj/item/weapon/pen/fountain, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bS" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bT" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"bU" = ( +/obj/item/weapon/photo, +/obj/item/weapon/photo{ + pixel_x = 4 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bV" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/characters, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bW" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bX" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/cosmos, +/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bY" = ( +/obj/structure/closet/cabinet, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/multiple, +/obj/random/toy, +/obj/random/toy, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"bZ" = ( +/obj/item/clothing/suit/straight_jacket, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ca" = ( +/obj/machinery/gibber/autogibber{ + emagged = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cb" = ( +/obj/structure/closet/cabinet, +/obj/item/weapon/storage/wallet/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/melee/umbrella/random, +/obj/random/ammo, +/obj/random/cigarettes, +/obj/random/contraband, +/obj/random/junk, +/obj/random/maintenance/security, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cc" = ( +/mob/living/simple_mob/animal/passive/cat/bones{ + desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; + name = "Felix" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cd" = ( +/obj/structure/bed/double/padded, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ce" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod/superpose/LoneHome) +"cf" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod/superpose/LoneHome) +"cg" = ( +/obj/item/weapon/reagent_containers/blood, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/deck/tarot, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ch" = ( +/obj/item/organ/internal/liver, +/obj/random/trash, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ci" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi, +/obj/item/weapon/surgical/bonesetter, +/obj/item/weapon/bone/ribs, +/obj/item/weapon/bone/skull{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cj" = ( +/obj/structure/sign/periodic, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/LoneHome) +"ck" = ( +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cl" = ( +/obj/item/weapon/phone, +/obj/structure/table/bench/wooden, +/obj/item/weapon/paper{ + info = "Seems to be filled with odd runes drawn with blood"; + name = "Blood stained paper" + }, +/obj/machinery/button/windowtint{ + id = "h-master"; + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cm" = ( +/obj/item/weapon/pack/cardemon, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cn" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/pirate, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/trash, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"co" = ( +/obj/structure/closet/cabinet, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/tech_supply/component, +/obj/random/toolbox, +/obj/random/toolbox, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cp" = ( +/obj/item/clothing/mask/muzzle, +/obj/random/trash, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cq" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/brain/grey, +/obj/item/weapon/material/knife/plastic, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cr" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/overgrown{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cs" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/bamboo{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"ct" = ( +/obj/structure/table/bench/marble, +/obj/structure/flora/pottedplant/dead{ + pixel_y = 7 + }, +/obj/structure/window/reinforced/polarized{ + id = "h-master" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/LoneHome) +"cv" = ( +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/obj/structure/table/rack/shelf/steel, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) +"cw" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cx" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/fruitgland, +/obj/item/weapon/material/knife/hook, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cz" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cA" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cB" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cC" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cD" = ( +/obj/item/frame/apc, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 22 + }, +/obj/random/junk, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cE" = ( +/obj/structure/table/steel, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/fiftyspawner/wood, +/obj/fiftyspawner/steel, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cF" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/chainsaw, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/extinguisher, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cG" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cH" = ( +/obj/structure/table/marble, +/obj/item/organ/internal/intestine/unathi{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/organ/internal/lungs, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cI" = ( +/obj/structure/fence, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cJ" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cK" = ( +/obj/item/weapon/material/minihoe, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cL" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cN" = ( +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cP" = ( +/obj/item/organ/internal/lungs/vox, +/obj/item/weapon/beartrap/hunting{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/obj/structure/curtain/black, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"cQ" = ( +/obj/structure/fence/cut/medium, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cR" = ( +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cS" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cT" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"cU" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"cV" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cW" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"cX" = ( +/obj/structure/fence/door/opened, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"cY" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"cZ" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/simulated/floor/outdoors/grass/heavy, +/area/survivalpod/superpose/LoneHome) +"da" = ( +/obj/structure/fence/corner, +/turf/template_noop, +/area/survivalpod/superpose/LoneHome) +"mx" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor, +/area/survivalpod/superpose/LoneHome) +"ES" = ( +/obj/structure/simple_door/wood, +/obj/structure/sign/graffiti/pisoff, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/LoneHome) + +(1,1,1) = {" +aQ +aQ +aQ +ad +aQ +aB +aN +aY +aY +ag +ad +ad +ad +ad +ad +aQ +aQ +cR +cR +aQ +cR +cR +"} +(2,1,1) = {" +aQ +ab +ad +ad +ap +aC +aO +aO +bg +ad +ad +bI +bP +cb +cj +ad +ad +cI +cQ +cI +cS +aQ +"} +(3,1,1) = {" +aQ +ad +ad +ai +aJ +aD +aP +aP +bh +ad +cv +bJ +bQ +cc +ak +ad +cz +cR +cR +cR +cT +aQ +"} +(4,1,1) = {" +ab +ab +ae +aj +ar +aE +bT +bT +bi +ad +bz +bK +bR +bS +as +cr +cA +cR +cR +cR +cU +aQ +"} +(5,1,1) = {" +ab +ad +ad +ak +as +aj +aZ +aZ +aJ +ad +bA +bL +bH +bT +aJ +cs +cz +cJ +cR +cR +cV +aQ +"} +(6,1,1) = {" +aQ +aQ +ad +ag +aJ +as +aR +cu +aq +ag +aq +bM +bT +bT +ck +ct +cB +cR +cR +cR +cW +aQ +"} +(7,1,1) = {" +aQ +aQ +aQ +ad +au +aF +aJ +ba +bj +ad +bB +as +bU +cd +cl +ad +cA +cR +cR +cR +cW +aQ +"} +(8,1,1) = {" +aQ +aQ +aQ +ad +ad +ag +ae +ad +bk +ad +ae +ad +ag +ad +ad +ad +ad +cK +cR +cR +cU +aQ +"} +(9,1,1) = {" +aQ +aQ +aQ +ad +av +ae +aq +aq +bl +ah +br +bN +ar +ar +ar +aj +ae +cR +cR +cR +cX +aQ +"} +(10,1,1) = {" +aQ +aQ +ad +ad +ad +ad +ae +ad +bm +ag +ad +ad +ad +ES +ad +ad +ad +cL +ad +cR +cT +aQ +"} +(11,1,1) = {" +aQ +aQ +ad +al +ax +aG +aJ +bb +aJ +bs +bD +ad +bV +br +ak +by +cC +aa +ad +cR +cU +aQ +"} +(12,1,1) = {" +aQ +aQ +ag +am +ax +aH +aq +bc +aq +bt +bE +ag +bW +ce +cm +ad +cD +ac +ad +cR +cT +aQ +"} +(13,1,1) = {" +aQ +aQ +ag +an +ay +aI +aS +aj +bn +aJ +bF +ad +bX +cf +cn +ad +cE +cN +ag +cR +cY +aQ +"} +(14,1,1) = {" +aQ +aQ +ad +ao +aw +aw +aT +aj +bo +bu +bG +ad +bY +cg +co +ad +cF +cO +ad +cR +cT +aQ +"} +(15,1,1) = {" +aQ +aQ +ad +ad +az +bC +aU +bd +bp +bv +ad +ad +ad +ad +ad +ad +ad +mx +ad +cR +cT +aQ +"} +(16,1,1) = {" +aQ +aQ +aQ +ad +aA +aK +aV +be +bq +bw +ad +bO +bZ +ch +cp +cw +cG +cP +ag +cR +cZ +aQ +"} +(17,1,1) = {" +aQ +aQ +aQ +ad +ab +aL +aW +bf +aM +bx +ad +ad +ca +ci +cq +cx +cH +ad +ad +cI +da +cR +"} +(18,1,1) = {" +aQ +aQ +aQ +ab +aQ +aQ +aX +aQ +aQ +ab +aQ +ad +ad +ad +ad +ad +ad +ad +aQ +aQ +aQ +aQ +"} diff --git a/modular_chomp/maps/submaps/shelters/MechFabShip-27x24.dmm b/modular_chomp/maps/submaps/shelters/MechFabShip-27x24.dmm index 786fd0715c..dbc8009a76 100644 --- a/modular_chomp/maps/submaps/shelters/MechFabShip-27x24.dmm +++ b/modular_chomp/maps/submaps/shelters/MechFabShip-27x24.dmm @@ -1,2491 +1,2491 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"al" = ( -/obj/structure/toilet{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/MechFabShip) -"ao" = ( -/obj/structure/closet/walllocker/emerglocker/south, -/obj/structure/table/rack/shelf/steel, -/obj/structure/ship_munition/disperser_charge/explosive, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"aq" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"at" = ( -/obj/structure/closet/walllocker_double/medical/west, -/obj/item/weapon/storage/firstaid, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/roller, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"aF" = ( -/obj/structure/salvageable/console_os, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"aG" = ( -/obj/machinery/transhuman/resleever, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"bb" = ( -/obj/machinery/disperser/back{ - dir = 1 - }, -/obj/structure/ship_munition/disperser_charge/explosive, -/obj/structure/sign/department/shield{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"bk" = ( -/obj/item/device/gps/computer, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"bI" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MechFabShip) -"bL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/cryopod/robot/door/gateway, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"bP" = ( -/obj/structure/ship_munition/disperser_charge/explosive, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"cM" = ( -/obj/item/weapon/weldingtool/largetank, -/obj/item/weapon/tool/crowbar, -/obj/item/weapon/tool/screwdriver, -/obj/item/weapon/storage/firstaid/surgery, -/obj/structure/table/steel_reinforced, -/obj/item/stack/nanopaste/advanced, -/obj/item/stack/nanopaste/advanced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"dh" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"dz" = ( -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"eb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 4 - }, -/obj/structure/fuel_port{ - pixel_x = 30 - }, -/obj/machinery/light/small/emergency{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"eM" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/cryofeed{ - dir = 4 - }, -/turf/simulated/floor/greengrid/nitrogen, -/area/survivalpod/superpose/MechFabShip) -"eP" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/light/small/emergency{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"fR" = ( -/obj/machinery/disperser/back{ - dir = 1 - }, -/obj/structure/ship_munition/disperser_charge/mining, -/obj/structure/sign/department/shield{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"gv" = ( -/obj/machinery/computer/transhuman/resleeving{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/poi, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"gD" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"gH" = ( -/obj/item/device/kit/paint/gygax/darkgygax, -/obj/item/device/kit/paint/gygax/recitence, -/obj/item/device/kit/paint/durand, -/obj/item/device/kit/paint/durand/phazon, -/obj/item/device/kit/paint/durand/seraph, -/obj/structure/table/rack/shelf/steel, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"hu" = ( -/obj/machinery/cryopod/robot{ - base_icon_state = "borg_pod_closed"; - dir = 4; - icon = 'icons/obj/structures.dmi'; - icon_state = "borg_pod_closed"; - occupied_icon_state = "borg_pod_opened" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/sign/department/drones{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"hz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker/east, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/MechFabShip) -"hH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/MechFabShip) -"hI" = ( -/obj/machinery/door/airlock/glass_centcom{ - name = "RnD and Fabrication" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"hJ" = ( -/obj/structure/closet/walllocker_double/hydrant/east, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"it" = ( -/obj/structure/salvageable/server_os, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"iw" = ( -/obj/item/device/kit/paint/ripley/death, -/obj/item/device/kit/paint/ripley/flames_blue, -/obj/item/device/kit/paint/ripley/flames_red, -/obj/item/device/kit/paint/ripley, -/obj/structure/table/rack/shelf/steel, -/obj/machinery/button/remote/airlock{ - desiredstate = 1; - dir = 1; - id = "kalipso_hatch"; - name = "Rear Hatch Control"; - pixel_y = -29; - specialfunctions = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"iC" = ( -/turf/template_noop, -/area/template_noop) -"iD" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "fridge_sci"; - icon_contents = "chem"; - icon_state = "fridge_sci"; - name = "Advanced storage"; - pixel_y = 0 - }, -/obj/item/weapon/stock_parts/micro_laser/ultra, -/obj/item/weapon/stock_parts/micro_laser/ultra, -/obj/item/weapon/stock_parts/micro_laser/ultra, -/obj/item/weapon/stock_parts/micro_laser/ultra, -/obj/item/weapon/stock_parts/micro_laser/ultra, -/obj/item/weapon/stock_parts/matter_bin/super, -/obj/item/weapon/stock_parts/matter_bin/super, -/obj/item/weapon/stock_parts/matter_bin/super, -/obj/item/weapon/stock_parts/matter_bin/super, -/obj/item/weapon/stock_parts/matter_bin/super, -/obj/item/weapon/stock_parts/manipulator/pico, -/obj/item/weapon/stock_parts/manipulator/pico, -/obj/item/weapon/stock_parts/manipulator/pico, -/obj/item/weapon/stock_parts/manipulator/pico, -/obj/item/weapon/stock_parts/manipulator/pico, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/console_screen, -/obj/item/weapon/stock_parts/capacitor/super, -/obj/item/weapon/stock_parts/capacitor/super, -/obj/item/weapon/stock_parts/capacitor/super, -/obj/item/weapon/stock_parts/capacitor/super, -/obj/item/weapon/stock_parts/capacitor/super, -/obj/item/weapon/stock_parts/motor, -/obj/item/weapon/stock_parts/motor, -/obj/item/weapon/stock_parts/motor, -/obj/item/weapon/stock_parts/motor, -/obj/item/weapon/stock_parts/motor, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/scanning_module/phasic, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/spring, -/obj/item/weapon/stock_parts/subspace/amplifier, -/obj/item/weapon/stock_parts/subspace/amplifier, -/obj/item/weapon/stock_parts/subspace/analyzer, -/obj/item/weapon/stock_parts/subspace/analyzer, -/obj/item/weapon/stock_parts/subspace/ansible, -/obj/item/weapon/stock_parts/subspace/ansible, -/obj/item/weapon/stock_parts/subspace/crystal, -/obj/item/weapon/stock_parts/subspace/crystal, -/obj/item/weapon/stock_parts/subspace/sub_filter, -/obj/item/weapon/stock_parts/subspace/sub_filter, -/obj/item/weapon/stock_parts/subspace/transmitter, -/obj/item/weapon/stock_parts/subspace/transmitter, -/obj/item/weapon/stock_parts/subspace/treatment, -/obj/item/weapon/stock_parts/subspace/treatment, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/device/bodysnatcher, -/obj/item/weapon/card/emag, -/obj/item/weapon/card/emag, -/obj/item/weapon/cell/super, -/obj/item/weapon/cell/super, -/obj/item/weapon/cell/device/super, -/obj/item/weapon/cell/device/super, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"iI" = ( -/obj/structure/sign/warning/vacuum, -/turf/simulated/wall/skipjack, -/area/survivalpod/superpose/MechFabShip) -"iK" = ( -/obj/machinery/computer/operating{ - dir = 8; - name = "Robotics Operating Computer" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"iU" = ( -/obj/structure/salvageable/computer_os, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"jl" = ( -/obj/machinery/atmospherics/pipe/tank/phoron/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/atmos/phoron{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"jx" = ( -/obj/structure/salvageable/implant_container_os, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"jE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/walllocker/emerglocker/north, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"kr" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/cryofeed, -/turf/simulated/floor/greengrid/nitrogen, -/area/survivalpod/superpose/MechFabShip) -"kz" = ( -/obj/structure/salvageable/console_broken_os, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"kH" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"kJ" = ( -/obj/structure/closet/walllocker_double/kitchen/east{ - name = "Ration Cabinet" - }, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/device/radio{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"lC" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"lK" = ( -/obj/structure/ship_munition/disperser_charge/mining, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"lZ" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"mf" = ( -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 1 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"mG" = ( -/obj/structure/sign/kiddieplaque{ - name = "Kalipso: Modular fabrication shuttle"; - pixel_x = 32 - }, -/turf/template_noop, -/area/template_noop) -"ny" = ( -/obj/effect/floor_decal/industrial/loading, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"nJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"oz" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/storage/part_replacer/adv/discount_bluespace, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"oS" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/defib_kit/jumper_kit/loaded, -/obj/item/device/defib_kit/jumper_kit/loaded, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"ph" = ( -/turf/simulated/wall/skipjack, -/area/survivalpod/superpose/MechFabShip) -"py" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/acid{ - pixel_y = 30 - }, -/obj/machinery/computer/mecha, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"pR" = ( -/obj/structure/window/plastitanium/full, -/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/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"qf" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 6 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"qk" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"qK" = ( -/obj/machinery/computer/rdconsole/core, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"qU" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"qX" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"qY" = ( -/obj/machinery/vending/robotics{ - emagged = 1; - req_access = null - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"rr" = ( -/obj/machinery/transhuman/synthprinter, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"rR" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/sign/department/cargo_dock{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"rZ" = ( -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"sd" = ( -/obj/machinery/access_button{ - master_tag = null; - pixel_y = 27; - req_one_access = null - }, -/obj/effect/map_helper/airlock/door/int_door, -/obj/effect/map_helper/airlock/button/int_button, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"sK" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = 24; - pixel_y = 32 - }, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "kalipsoshutters"; - name = "Emergency Lockdown"; - pixel_x = 28 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"te" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"tk" = ( -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/MechFabShip) -"tC" = ( -/obj/machinery/mech_recharger, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"uU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"vb" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/machinery/r_n_d/server/robotics, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/MechFabShip) -"vt" = ( -/obj/machinery/power/generator{ - anchored = 1; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MechFabShip) -"vC" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"vO" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"ws" = ( -/obj/machinery/airlock_sensor{ - dir = 1; - id_tag = null; - pixel_y = -27 - }, -/obj/effect/map_helper/airlock/sensor/chamber_sensor, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"wy" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"yh" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/captain, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"yH" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"yN" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 4 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"yS" = ( -/obj/machinery/atmospherics/unary/engine/biggest{ - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"zd" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/ce, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"zj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/obj/machinery/floodlight, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"zC" = ( -/obj/machinery/autolathe{ - hacked = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"zN" = ( -/obj/structure/table/survival_pod, -/obj/machinery/microwave{ - pixel_y = 6 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"zU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"AK" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -30 - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"Bf" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/structure/closet/walllocker_double/hydrant/east, -/obj/structure/closet/walllocker/emerglocker/south, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Bk" = ( -/obj/structure/closet/walllocker/emerglocker/south, -/obj/structure/table/rack/shelf/steel, -/obj/structure/ship_munition/disperser_charge/mining, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"Bz" = ( -/obj/effect/catwalk_plated/dark, -/obj/item/weapon/banner/blue, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"BA" = ( -/obj/structure/table/rack/shelf/steel, -/obj/item/trash/rkibble{ - pixel_x = 8 - }, -/obj/item/trash/rkibble{ - pixel_x = -7 - }, -/obj/item/trash/rkibble{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = -7 - }, -/obj/item/trash/rkibble{ - pixel_x = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"BY" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/shipsensors, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Cu" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - icon_state = "door_locked"; - id_tag = "kalipso_hatch"; - locked = 1; - name = "Cargo Hold" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"CV" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/light/small/emergency{ - dir = 4 - }, -/obj/structure/sign/department/eng{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"CY" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/sign/department/cargo_dock{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Di" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Dj" = ( -/obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"Dm" = ( -/obj/structure/salvageable/machine{ - name = "Life Support Console" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"DF" = ( -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"DS" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 1; - frequency = 1331; - id_tag = "kalipso_shuttle"; - pixel_y = -26 - }, -/obj/effect/map_helper/airlock/atmos/chamber_pump, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Ey" = ( -/obj/machinery/door/airlock/glass_centcom{ - name = "Port Cannons" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"FC" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Gl" = ( -/obj/machinery/access_button{ - master_tag = null; - pixel_y = 27; - req_one_access = null - }, -/obj/effect/map_helper/airlock/door/ext_door, -/obj/effect/map_helper/airlock/button/ext_button, -/obj/machinery/door/airlock/hatch, -/obj/machinery/door/blast/regular{ - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"Gr" = ( -/obj/machinery/power/smes/buildable/hybrid, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/electricshock{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"GQ" = ( -/obj/machinery/atmospherics/pipe/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/obj/structure/sign/atmos/air{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"GS" = ( -/obj/machinery/door/airlock/glass_centcom{ - name = "Starboard Wing Atmos" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"He" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 4 - }, -/obj/structure/closet/walllocker/medical/west, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"HC" = ( -/obj/machinery/mecha_part_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"HE" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/MechFabShip) -"HS" = ( -/obj/machinery/door/airlock/glass_centcom{ - name = "Starboard Cannon" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"Ic" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"IS" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"Jv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/obj/structure/sign/electricshock{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"JW" = ( -/obj/structure/salvageable/console_os{ - name = "Turret control console" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"JX" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = -30 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/MechFabShip) -"KC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"KR" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4 - }, -/obj/effect/map_helper/airlock/atmos/chamber_pump, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Lg" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"LN" = ( -/obj/structure/window/reinforced/survival_pod, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"Ms" = ( -/obj/machinery/smartfridge/survival_pod, -/obj/item/weapon/tape_roll, -/obj/item/sticky_pad/random, -/obj/item/weapon/pen/blue, -/obj/item/weapon/pen/blue, -/obj/item/fulton_core, -/obj/item/fulton_core, -/obj/item/extraction_pack, -/obj/item/extraction_pack, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/item/weapon/pickaxe/hand, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/flashlight/color/orange, -/obj/item/device/threadneedle, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/device/flashlight/lantern, -/obj/random/soap, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/weapon/storage/pill_bottle/spaceacillin, -/obj/item/weapon/storage/pill_bottle/antitox, -/obj/item/device/healthanalyzer, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/stack/nanopaste, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/box/survival/space, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/item/weapon/storage/box/flare, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/box/khcrystal, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/stack/marker_beacon/ten, -/obj/item/device/starcaster_news, -/obj/item/device/mapping_unit, -/obj/item/weapon/storage/box/dosimeter, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/device/pda, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/gun/energy/locked/phasegun, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/cell/device/weapon{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/accessory/permit/gun, -/obj/item/clothing/accessory/permit/gun, -/obj/item/weapon/material/knife/machete, -/obj/item/weapon/material/fishing_net, -/obj/item/weapon/storage/backpack/sport, -/obj/item/weapon/storage/backpack/sport, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/weapon/storage/belt, -/obj/item/clothing/accessory/poncho/thermal, -/obj/machinery/light/poi{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"Mv" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"MZ" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Nr" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/machinery/r_n_d/server/core, -/obj/structure/window/reinforced/survival_pod{ - dir = 4; - opacity = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/MechFabShip) -"ND" = ( -/obj/structure/sign/deck1, -/turf/simulated/wall/skipjack, -/area/survivalpod/superpose/MechFabShip) -"Oo" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"Ov" = ( -/obj/machinery/optable{ - name = "Robotics Operating Table" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"OO" = ( -/obj/structure/bed/pod, -/obj/item/weapon/bedsheet/hos, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"Py" = ( -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "fridge_sci"; - icon_contents = "chem"; - icon_state = "fridge_sci"; - name = "Advanced storage"; - pixel_y = 0 - }, -/obj/item/stack/material/durasteel{ - material = 50 - }, -/obj/item/stack/material/durasteel{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/diamond{ - material = 15 - }, -/obj/item/stack/material/gold{ - material = 25 - }, -/obj/item/stack/material/lead{ - material = 25 - }, -/obj/item/stack/material/plastic{ - material = 50 - }, -/obj/item/stack/material/plastic{ - material = 50 - }, -/obj/item/stack/material/platinum{ - matter = 25 - }, -/obj/item/stack/material/silver{ - material = 25 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/uranium{ - material = 25 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/obj/item/clothing/head/welding/demon, -/obj/item/clothing/head/welding/knight, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/device/robotanalyzer, -/obj/item/device/robotanalyzer, -/obj/item/weapon/cell/super, -/obj/item/weapon/cell/super, -/obj/item/weapon/cell/device/super, -/obj/item/weapon/cell/device/super, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"PH" = ( -/obj/structure/window/reinforced/survival_pod{ - opacity = 1 - }, -/obj/structure/prop/blackbox/salamander_wreck, -/obj/structure/sign/department/rnd{ - pixel_y = 32 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/survivalpod/superpose/MechFabShip) -"PP" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/survivalpod/superpose/MechFabShip) -"Qs" = ( -/obj/machinery/door/airlock/glass_centcom{ - id_tag = "kalipsobolt"; - name = "Bridge" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"QE" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"QJ" = ( -/obj/machinery/disperser/middle{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/effect/catwalk_plated/dark, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Rg" = ( -/obj/structure/shuttle/engine/router, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Ro" = ( -/obj/item/trash/rkibble{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/trash/rkibble{ - pixel_x = 8 - }, -/obj/item/trash/rkibble{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = -7 - }, -/obj/item/trash/rkibble{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/trash/rkibble{ - pixel_x = -7 - }, -/obj/item/trash/rkibble{ - pixel_x = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"RE" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/techfloor/corner{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"SE" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"SW" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/weapon/reagent_containers/glass/beaker/large, -/obj/structure/sign/department/robo{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"Ta" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/phoron/cold, -/obj/effect/floor_decal/techfloor/orange/corner, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Th" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mecha_part_fabricator/pros, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"TI" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 8 - }, -/obj/machinery/light/poi{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker/east, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Ud" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 10 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Uj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"UI" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"UL" = ( -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Vf" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_x = -25; - pixel_y = 32 - }, -/mob/living/simple_mob/animal/passive/dog/corgi/Lisa{ - name = "Shepiffany" - }, -/obj/structure/dogbed, -/obj/machinery/light/poi{ - dir = 8 - }, -/obj/machinery/button/remote/airlock{ - dir = 4; - id = "kalipsobolt"; - name = "Bridge Lock Down"; - pixel_x = -28; - specialfunctions = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"Vj" = ( -/obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"VZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/foodcart, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"Wl" = ( -/obj/structure/bed/chair/bay/shuttle{ - dir = 8 - }, -/obj/structure/closet/walllocker/medical/east, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"WE" = ( -/obj/structure/sign/ironhammer, -/turf/simulated/wall/skipjack, -/area/survivalpod/superpose/MechFabShip) -"WG" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/structure/curtain/open/shower/security, -/obj/machinery/door/window/survival_pod{ - dir = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/survivalpod/superpose/MechFabShip) -"WQ" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/turf/simulated/shuttle/floor/voidcraft, -/area/survivalpod/superpose/MechFabShip) -"WY" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Xe" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Xm" = ( -/obj/structure/prop/fake_ai{ - name = "k@1iPs0" - }, -/obj/structure/sign/department/commander{ - pixel_y = -32 - }, -/turf/simulated/floor/greengrid/nitrogen, -/area/survivalpod/superpose/MechFabShip) -"Xx" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Yb" = ( -/obj/machinery/door/airlock/glass_centcom{ - name = "Port Wing Engine" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/survivalpod/superpose/MechFabShip) -"Yj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"Yl" = ( -/obj/structure/fans, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Yo" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Yt" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"YM" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/shuttle/floor/yellow, -/area/survivalpod/superpose/MechFabShip) -"YP" = ( -/obj/machinery/disperser/front{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"Zg" = ( -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"Zm" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) -"Zs" = ( -/obj/structure/bed/chair/bay/comfy/black{ - dir = 1 - }, -/turf/simulated/shuttle/floor/voidcraft/light, -/area/survivalpod/superpose/MechFabShip) -"Zt" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/floor/plating, -/area/survivalpod/superpose/MechFabShip) -"ZE" = ( -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/MechFabShip) -"ZH" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/techfloor/corner{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/survivalpod/superpose/MechFabShip) -"ZY" = ( -/obj/structure/window/plastitanium/full, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille/rustic{ - health = 25; - name = "reinforced grille" - }, -/obj/machinery/door/blast/regular{ - id = "kalipsoshutters"; - name = "Kalipso Blast Shielding" - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/MechFabShip) - -(1,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -"} -(2,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -iC -iC -iC -ph -ph -iC -"} -(3,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -Gl -ph -ph -ph -ph -ph -ph -iC -iC -"} -(4,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -KR -ws -ph -Ta -zj -qU -ph -Rg -iC -iC -"} -(5,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -eP -gD -DS -ph -jE -bI -zU -Zt -dz -iC -yS -"} -(6,1,1) = {" -iC -iC -iC -iC -ph -iC -iC -ph -iC -iC -iC -iC -ph -iI -ph -sd -ph -Jv -vt -dh -Zt -dz -iC -iC -"} -(7,1,1) = {" -iC -iC -iC -ph -ph -kH -ZY -ph -BY -iC -iC -iC -ph -IS -rZ -rZ -vO -uU -PP -Uj -Zt -dz -iC -iC -"} -(8,1,1) = {" -iC -iC -YP -QJ -fR -lK -lK -ph -ph -Xx -ph -Xx -ph -ph -Ro -BA -WQ -MZ -CV -hJ -ph -Rg -iC -iC -"} -(9,1,1) = {" -iC -iC -iC -FC -wy -Zs -Zg -Ey -Yj -Ic -iD -Vj -QE -ph -ph -ph -Yb -ph -ph -ph -ph -ph -iC -iC -"} -(10,1,1) = {" -iC -iC -iC -pR -JW -Zg -Bk -ph -DF -DF -DF -DF -AK -ph -He -yN -qf -tC -ph -ph -Bz -WE -ph -iC -"} -(11,1,1) = {" -iC -ph -ph -ph -ph -Qs -ph -ph -vb -qX -DF -DF -DF -hI -UL -UL -Zm -UI -Cu -rR -Di -iC -iC -iC -"} -(12,1,1) = {" -iC -iC -FC -jx -Vf -ZE -at -ph -PH -qK -Oo -DF -Yt -ph -RE -UL -Zm -UI -Mv -Di -Di -iC -iC -iC -"} -(13,1,1) = {" -iC -iC -WY -kz -mf -LN -kr -ph -Nr -oz -YM -YM -Dj -ph -hu -UL -Zm -VZ -ND -Di -Di -iC -iC -iC -"} -(14,1,1) = {" -iC -iC -WY -aF -ZE -LN -Xm -ph -qY -rZ -rZ -SE -gv -ph -bL -UL -Zm -iw -ph -Di -Di -iC -iC -iC -"} -(15,1,1) = {" -iC -iC -WY -iU -mf -LN -eM -ph -zC -hH -HC -hH -aG -ph -hu -UL -Zm -gH -ND -Di -Di -iC -iC -iC -"} -(16,1,1) = {" -iC -iC -pR -it -sK -ZE -kJ -ph -SW -tk -Th -tk -rr -ph -ZH -UL -Zm -ny -Cu -Di -Di -iC -iC -iC -"} -(17,1,1) = {" -iC -ph -ph -ph -ph -Qs -ph -ph -py -HE -tk -tk -tk -hI -UL -UL -Zm -ny -Mv -CY -Di -mG -iC -iC -"} -(18,1,1) = {" -iC -iC -iC -FC -Dm -Zg -ao -ph -tk -tk -Ov -HE -JX -ph -Wl -TI -Ud -tC -ph -ph -Bz -ph -ph -iC -"} -(19,1,1) = {" -iC -iC -iC -pR -wy -Zs -Zg -HS -hz -Py -iK -cM -oS -ph -ph -ph -GS -ph -ph -ph -ph -ph -iC -iC -"} -(20,1,1) = {" -iC -iC -YP -QJ -bb -bP -bP -ph -ph -Xx -ph -Xx -ph -ph -al -WG -yH -qk -GQ -Gr -ph -Rg -iC -iC -"} -(21,1,1) = {" -iC -iC -iC -ph -ph -kH -ZY -ph -iC -iC -iC -iC -ph -Yl -aq -zN -Zm -Xe -KC -vC -Zt -dz -iC -yS -"} -(22,1,1) = {" -iC -iC -iC -iC -ph -iC -iC -ph -iC -iC -iC -iC -ph -Ms -rZ -rZ -WQ -Lg -nJ -Yo -Zt -dz -iC -iC -"} -(23,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -bk -rZ -rZ -rZ -lC -te -lZ -Zt -dz -iC -iC -"} -(24,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -OO -yh -zd -jl -eb -Bf -ph -Rg -iC -iC -"} -(25,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -Xx -ph -ph -ph -ph -ph -ph -iC -iC -"} -(26,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -ph -ph -iC -iC -iC -ph -ph -iC -"} -(27,1,1) = {" -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -iC -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"al" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/MechFabShip) +"ao" = ( +/obj/structure/closet/walllocker/emerglocker/south, +/obj/structure/table/rack/shelf/steel, +/obj/structure/ship_munition/disperser_charge/explosive, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"aq" = ( +/obj/machinery/sleeper/survival_pod, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"at" = ( +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/weapon/storage/firstaid, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/roller, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"aF" = ( +/obj/structure/salvageable/console_os, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"aG" = ( +/obj/machinery/transhuman/resleever, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"bb" = ( +/obj/machinery/disperser/back{ + dir = 1 + }, +/obj/structure/ship_munition/disperser_charge/explosive, +/obj/structure/sign/department/shield{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"bk" = ( +/obj/item/device/gps/computer, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"bI" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MechFabShip) +"bL" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod/robot/door/gateway, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"bP" = ( +/obj/structure/ship_munition/disperser_charge/explosive, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"cM" = ( +/obj/item/weapon/weldingtool/largetank, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/screwdriver, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/table/steel_reinforced, +/obj/item/stack/nanopaste/advanced, +/obj/item/stack/nanopaste/advanced, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"dh" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"dz" = ( +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"eb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ + dir = 4 + }, +/obj/structure/fuel_port{ + pixel_x = 30 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"eM" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/cryofeed{ + dir = 4 + }, +/turf/simulated/floor/greengrid/nitrogen, +/area/survivalpod/superpose/MechFabShip) +"eP" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"fR" = ( +/obj/machinery/disperser/back{ + dir = 1 + }, +/obj/structure/ship_munition/disperser_charge/mining, +/obj/structure/sign/department/shield{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"gv" = ( +/obj/machinery/computer/transhuman/resleeving{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/poi, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"gD" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"gH" = ( +/obj/item/device/kit/paint/gygax/darkgygax, +/obj/item/device/kit/paint/gygax/recitence, +/obj/item/device/kit/paint/durand, +/obj/item/device/kit/paint/durand/phazon, +/obj/item/device/kit/paint/durand/seraph, +/obj/structure/table/rack/shelf/steel, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"hu" = ( +/obj/machinery/cryopod/robot{ + base_icon_state = "borg_pod_closed"; + dir = 4; + icon = 'icons/obj/structures.dmi'; + icon_state = "borg_pod_closed"; + occupied_icon_state = "borg_pod_opened" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/sign/department/drones{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"hz" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/walllocker/emerglocker/east, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/MechFabShip) +"hH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/MechFabShip) +"hI" = ( +/obj/machinery/door/airlock/glass_centcom{ + name = "RnD and Fabrication" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"hJ" = ( +/obj/structure/closet/walllocker_double/hydrant/east, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"it" = ( +/obj/structure/salvageable/server_os, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"iw" = ( +/obj/item/device/kit/paint/ripley/death, +/obj/item/device/kit/paint/ripley/flames_blue, +/obj/item/device/kit/paint/ripley/flames_red, +/obj/item/device/kit/paint/ripley, +/obj/structure/table/rack/shelf/steel, +/obj/machinery/button/remote/airlock{ + desiredstate = 1; + dir = 1; + id = "kalipso_hatch"; + name = "Rear Hatch Control"; + pixel_y = -29; + specialfunctions = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"iC" = ( +/turf/template_noop, +/area/template_noop) +"iD" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "fridge_sci"; + icon_contents = "chem"; + icon_state = "fridge_sci"; + name = "Advanced storage"; + pixel_y = 0 + }, +/obj/item/weapon/stock_parts/micro_laser/ultra, +/obj/item/weapon/stock_parts/micro_laser/ultra, +/obj/item/weapon/stock_parts/micro_laser/ultra, +/obj/item/weapon/stock_parts/micro_laser/ultra, +/obj/item/weapon/stock_parts/micro_laser/ultra, +/obj/item/weapon/stock_parts/matter_bin/super, +/obj/item/weapon/stock_parts/matter_bin/super, +/obj/item/weapon/stock_parts/matter_bin/super, +/obj/item/weapon/stock_parts/matter_bin/super, +/obj/item/weapon/stock_parts/matter_bin/super, +/obj/item/weapon/stock_parts/manipulator/pico, +/obj/item/weapon/stock_parts/manipulator/pico, +/obj/item/weapon/stock_parts/manipulator/pico, +/obj/item/weapon/stock_parts/manipulator/pico, +/obj/item/weapon/stock_parts/manipulator/pico, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/capacitor/super, +/obj/item/weapon/stock_parts/capacitor/super, +/obj/item/weapon/stock_parts/capacitor/super, +/obj/item/weapon/stock_parts/capacitor/super, +/obj/item/weapon/stock_parts/capacitor/super, +/obj/item/weapon/stock_parts/motor, +/obj/item/weapon/stock_parts/motor, +/obj/item/weapon/stock_parts/motor, +/obj/item/weapon/stock_parts/motor, +/obj/item/weapon/stock_parts/motor, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/scanning_module/phasic, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/spring, +/obj/item/weapon/stock_parts/subspace/amplifier, +/obj/item/weapon/stock_parts/subspace/amplifier, +/obj/item/weapon/stock_parts/subspace/analyzer, +/obj/item/weapon/stock_parts/subspace/analyzer, +/obj/item/weapon/stock_parts/subspace/ansible, +/obj/item/weapon/stock_parts/subspace/ansible, +/obj/item/weapon/stock_parts/subspace/crystal, +/obj/item/weapon/stock_parts/subspace/crystal, +/obj/item/weapon/stock_parts/subspace/sub_filter, +/obj/item/weapon/stock_parts/subspace/sub_filter, +/obj/item/weapon/stock_parts/subspace/transmitter, +/obj/item/weapon/stock_parts/subspace/transmitter, +/obj/item/weapon/stock_parts/subspace/treatment, +/obj/item/weapon/stock_parts/subspace/treatment, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/device/bodysnatcher, +/obj/item/weapon/card/emag, +/obj/item/weapon/card/emag, +/obj/item/weapon/cell/super, +/obj/item/weapon/cell/super, +/obj/item/weapon/cell/device/super, +/obj/item/weapon/cell/device/super, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"iI" = ( +/obj/structure/sign/warning/vacuum, +/turf/simulated/wall/skipjack, +/area/survivalpod/superpose/MechFabShip) +"iK" = ( +/obj/machinery/computer/operating{ + dir = 8; + name = "Robotics Operating Computer" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"iU" = ( +/obj/structure/salvageable/computer_os, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"jl" = ( +/obj/machinery/atmospherics/pipe/tank/phoron/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/sign/atmos/phoron{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"jx" = ( +/obj/structure/salvageable/implant_container_os, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"jE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker/north, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"kr" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/cryofeed, +/turf/simulated/floor/greengrid/nitrogen, +/area/survivalpod/superpose/MechFabShip) +"kz" = ( +/obj/structure/salvageable/console_broken_os, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"kH" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"kJ" = ( +/obj/structure/closet/walllocker_double/kitchen/east{ + name = "Ration Cabinet" + }, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/device/radio{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"lC" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"lK" = ( +/obj/structure/ship_munition/disperser_charge/mining, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"lZ" = ( +/obj/machinery/space_heater, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"mf" = ( +/obj/structure/bed/chair/bay/comfy/captain{ + dir = 1 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"mG" = ( +/obj/structure/sign/kiddieplaque{ + name = "Kalipso: Modular fabrication shuttle"; + pixel_x = 32 + }, +/turf/template_noop, +/area/template_noop) +"ny" = ( +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"nJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"oz" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/part_replacer/adv/discount_bluespace, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"oS" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/defib_kit/jumper_kit/loaded, +/obj/item/device/defib_kit/jumper_kit/loaded, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"ph" = ( +/turf/simulated/wall/skipjack, +/area/survivalpod/superpose/MechFabShip) +"py" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/acid{ + pixel_y = 30 + }, +/obj/machinery/computer/mecha, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"pR" = ( +/obj/structure/window/plastitanium/full, +/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/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"qf" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"qk" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"qK" = ( +/obj/machinery/computer/rdconsole/core, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"qU" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"qX" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"qY" = ( +/obj/machinery/vending/robotics{ + emagged = 1; + req_access = null + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"rr" = ( +/obj/machinery/transhuman/synthprinter, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"rR" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/sign/department/cargo_dock{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"rZ" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"sd" = ( +/obj/machinery/access_button{ + master_tag = null; + pixel_y = 27; + req_one_access = null + }, +/obj/effect/map_helper/airlock/door/int_door, +/obj/effect/map_helper/airlock/button/int_button, +/obj/machinery/door/airlock/hatch, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"sK" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = 24; + pixel_y = 32 + }, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "kalipsoshutters"; + name = "Emergency Lockdown"; + pixel_x = 28 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"te" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"tk" = ( +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/MechFabShip) +"tC" = ( +/obj/machinery/mech_recharger, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"uU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"vb" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/r_n_d/server/robotics, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/MechFabShip) +"vt" = ( +/obj/machinery/power/generator{ + anchored = 1; + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MechFabShip) +"vC" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"vO" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"ws" = ( +/obj/machinery/airlock_sensor{ + dir = 1; + id_tag = null; + pixel_y = -27 + }, +/obj/effect/map_helper/airlock/sensor/chamber_sensor, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"wy" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"yh" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/captain, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"yH" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"yN" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 4 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/obj/structure/closet/walllocker/emerglocker/west, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"yS" = ( +/obj/machinery/atmospherics/unary/engine/biggest{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"zd" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/ce, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"zj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/floodlight, +/obj/effect/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"zC" = ( +/obj/machinery/autolathe{ + hacked = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"zN" = ( +/obj/structure/table/survival_pod, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"zU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"AK" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -30 + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"Bf" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/closet/walllocker_double/hydrant/east, +/obj/structure/closet/walllocker/emerglocker/south, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Bk" = ( +/obj/structure/closet/walllocker/emerglocker/south, +/obj/structure/table/rack/shelf/steel, +/obj/structure/ship_munition/disperser_charge/mining, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"Bz" = ( +/obj/effect/catwalk_plated/dark, +/obj/item/weapon/banner/blue, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"BA" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/trash/rkibble{ + pixel_x = 8 + }, +/obj/item/trash/rkibble{ + pixel_x = -7 + }, +/obj/item/trash/rkibble{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = -7 + }, +/obj/item/trash/rkibble{ + pixel_x = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"BY" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/shipsensors, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Cu" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + icon_state = "door_locked"; + id_tag = "kalipso_hatch"; + locked = 1; + name = "Cargo Hold" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"CV" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/structure/sign/department/eng{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"CY" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/sign/department/cargo_dock{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Di" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Dj" = ( +/obj/machinery/r_n_d/protolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"Dm" = ( +/obj/structure/salvageable/machine{ + name = "Life Support Console" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"DF" = ( +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"DS" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 1; + frequency = 1331; + id_tag = "kalipso_shuttle"; + pixel_y = -26 + }, +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Ey" = ( +/obj/machinery/door/airlock/glass_centcom{ + name = "Port Cannons" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"FC" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Gl" = ( +/obj/machinery/access_button{ + master_tag = null; + pixel_y = 27; + req_one_access = null + }, +/obj/effect/map_helper/airlock/door/ext_door, +/obj/effect/map_helper/airlock/button/ext_button, +/obj/machinery/door/airlock/hatch, +/obj/machinery/door/blast/regular{ + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"Gr" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/sign/electricshock{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"GQ" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/structure/sign/atmos/air{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"GS" = ( +/obj/machinery/door/airlock/glass_centcom{ + name = "Starboard Wing Atmos" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"He" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 4 + }, +/obj/structure/closet/walllocker/medical/west, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"HC" = ( +/obj/machinery/mecha_part_fabricator, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"HE" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/MechFabShip) +"HS" = ( +/obj/machinery/door/airlock/glass_centcom{ + name = "Starboard Cannon" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"Ic" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"IS" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"Jv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"JW" = ( +/obj/structure/salvageable/console_os{ + name = "Turret control console" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"JX" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = -30 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/MechFabShip) +"KC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"KR" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4 + }, +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Lg" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"LN" = ( +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"Ms" = ( +/obj/machinery/smartfridge/survival_pod, +/obj/item/weapon/tape_roll, +/obj/item/sticky_pad/random, +/obj/item/weapon/pen/blue, +/obj/item/weapon/pen/blue, +/obj/item/fulton_core, +/obj/item/fulton_core, +/obj/item/extraction_pack, +/obj/item/extraction_pack, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/item/weapon/pickaxe/hand, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/flashlight/color/orange, +/obj/item/device/threadneedle, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/device/flashlight/lantern, +/obj/random/soap, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/stack/nanopaste, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/box/flare, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/box/khcrystal, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/stack/marker_beacon/ten, +/obj/item/device/starcaster_news, +/obj/item/device/mapping_unit, +/obj/item/weapon/storage/box/dosimeter, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/device/pda, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/gun/energy/locked/phasegun, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/cell/device/weapon{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/weapon/material/knife/machete, +/obj/item/weapon/material/fishing_net, +/obj/item/weapon/storage/backpack/sport, +/obj/item/weapon/storage/backpack/sport, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/storage/belt, +/obj/item/clothing/accessory/poncho/thermal, +/obj/machinery/light/poi{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"Mv" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"MZ" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Nr" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/machinery/r_n_d/server/core, +/obj/structure/window/reinforced/survival_pod{ + dir = 4; + opacity = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/MechFabShip) +"ND" = ( +/obj/structure/sign/deck1, +/turf/simulated/wall/skipjack, +/area/survivalpod/superpose/MechFabShip) +"Oo" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"Ov" = ( +/obj/machinery/optable{ + name = "Robotics Operating Table" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"OO" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/hos, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"Py" = ( +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "fridge_sci"; + icon_contents = "chem"; + icon_state = "fridge_sci"; + name = "Advanced storage"; + pixel_y = 0 + }, +/obj/item/stack/material/durasteel{ + material = 50 + }, +/obj/item/stack/material/durasteel{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/diamond{ + material = 15 + }, +/obj/item/stack/material/gold{ + material = 25 + }, +/obj/item/stack/material/lead{ + material = 25 + }, +/obj/item/stack/material/plastic{ + material = 50 + }, +/obj/item/stack/material/plastic{ + material = 50 + }, +/obj/item/stack/material/platinum{ + matter = 25 + }, +/obj/item/stack/material/silver{ + material = 25 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/uranium{ + material = 25 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/weapon/storage/toolbox/syndicate/powertools, +/obj/item/clothing/head/welding/demon, +/obj/item/clothing/head/welding/knight, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/device/robotanalyzer, +/obj/item/device/robotanalyzer, +/obj/item/weapon/cell/super, +/obj/item/weapon/cell/super, +/obj/item/weapon/cell/device/super, +/obj/item/weapon/cell/device/super, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"PH" = ( +/obj/structure/window/reinforced/survival_pod{ + opacity = 1 + }, +/obj/structure/prop/blackbox/salamander_wreck, +/obj/structure/sign/department/rnd{ + pixel_y = 32 + }, +/turf/simulated/floor/bluegrid{ + name = "Server Base"; + nitrogen = 500; + oxygen = 0; + temperature = 80 + }, +/area/survivalpod/superpose/MechFabShip) +"PP" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/survivalpod/superpose/MechFabShip) +"Qs" = ( +/obj/machinery/door/airlock/glass_centcom{ + id_tag = "kalipsobolt"; + name = "Bridge" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"QE" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"QJ" = ( +/obj/machinery/disperser/middle{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/effect/catwalk_plated/dark, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Rg" = ( +/obj/structure/shuttle/engine/router, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Ro" = ( +/obj/item/trash/rkibble{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/structure/table/rack/shelf/steel, +/obj/item/trash/rkibble{ + pixel_x = 8 + }, +/obj/item/trash/rkibble{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = -7 + }, +/obj/item/trash/rkibble{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/trash/rkibble{ + pixel_x = -7 + }, +/obj/item/trash/rkibble{ + pixel_x = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"RE" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"SE" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"SW" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/structure/sign/department/robo{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"Ta" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/phoron/cold, +/obj/effect/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Th" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mecha_part_fabricator/pros, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"TI" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 8 + }, +/obj/machinery/light/poi{ + dir = 4 + }, +/obj/structure/closet/walllocker/emerglocker/east, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Ud" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Uj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"UI" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"UL" = ( +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Vf" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_x = -25; + pixel_y = 32 + }, +/mob/living/simple_mob/animal/passive/dog/corgi/Lisa{ + name = "Shepiffany" + }, +/obj/structure/dogbed, +/obj/machinery/light/poi{ + dir = 8 + }, +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "kalipsobolt"; + name = "Bridge Lock Down"; + pixel_x = -28; + specialfunctions = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"Vj" = ( +/obj/machinery/r_n_d/protolathe, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"VZ" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/foodcart, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"Wl" = ( +/obj/structure/bed/chair/bay/shuttle{ + dir = 8 + }, +/obj/structure/closet/walllocker/medical/east, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"WE" = ( +/obj/structure/sign/ironhammer, +/turf/simulated/wall/skipjack, +/area/survivalpod/superpose/MechFabShip) +"WG" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/structure/curtain/open/shower/security, +/obj/machinery/door/window/survival_pod{ + dir = 2 + }, +/turf/simulated/floor/tiled/freezer, +/area/survivalpod/superpose/MechFabShip) +"WQ" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod/superpose/MechFabShip) +"WY" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Xe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Xm" = ( +/obj/structure/prop/fake_ai{ + name = "k@1iPs0" + }, +/obj/structure/sign/department/commander{ + pixel_y = -32 + }, +/turf/simulated/floor/greengrid/nitrogen, +/area/survivalpod/superpose/MechFabShip) +"Xx" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Yb" = ( +/obj/machinery/door/airlock/glass_centcom{ + name = "Port Wing Engine" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/survivalpod/superpose/MechFabShip) +"Yj" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/closet/walllocker/emerglocker/west, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"Yl" = ( +/obj/structure/fans, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Yo" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Yt" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"YM" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/shuttle/floor/yellow, +/area/survivalpod/superpose/MechFabShip) +"YP" = ( +/obj/machinery/disperser/front{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"Zg" = ( +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"Zm" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) +"Zs" = ( +/obj/structure/bed/chair/bay/comfy/black{ + dir = 1 + }, +/turf/simulated/shuttle/floor/voidcraft/light, +/area/survivalpod/superpose/MechFabShip) +"Zt" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/floor/plating, +/area/survivalpod/superpose/MechFabShip) +"ZE" = ( +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/MechFabShip) +"ZH" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/survivalpod/superpose/MechFabShip) +"ZY" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille/rustic{ + health = 25; + name = "reinforced grille" + }, +/obj/machinery/door/blast/regular{ + id = "kalipsoshutters"; + name = "Kalipso Blast Shielding" + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/MechFabShip) + +(1,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +"} +(2,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +iC +iC +iC +ph +ph +iC +"} +(3,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +Gl +ph +ph +ph +ph +ph +ph +iC +iC +"} +(4,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +KR +ws +ph +Ta +zj +qU +ph +Rg +iC +iC +"} +(5,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +eP +gD +DS +ph +jE +bI +zU +Zt +dz +iC +yS +"} +(6,1,1) = {" +iC +iC +iC +iC +ph +iC +iC +ph +iC +iC +iC +iC +ph +iI +ph +sd +ph +Jv +vt +dh +Zt +dz +iC +iC +"} +(7,1,1) = {" +iC +iC +iC +ph +ph +kH +ZY +ph +BY +iC +iC +iC +ph +IS +rZ +rZ +vO +uU +PP +Uj +Zt +dz +iC +iC +"} +(8,1,1) = {" +iC +iC +YP +QJ +fR +lK +lK +ph +ph +Xx +ph +Xx +ph +ph +Ro +BA +WQ +MZ +CV +hJ +ph +Rg +iC +iC +"} +(9,1,1) = {" +iC +iC +iC +FC +wy +Zs +Zg +Ey +Yj +Ic +iD +Vj +QE +ph +ph +ph +Yb +ph +ph +ph +ph +ph +iC +iC +"} +(10,1,1) = {" +iC +iC +iC +pR +JW +Zg +Bk +ph +DF +DF +DF +DF +AK +ph +He +yN +qf +tC +ph +ph +Bz +WE +ph +iC +"} +(11,1,1) = {" +iC +ph +ph +ph +ph +Qs +ph +ph +vb +qX +DF +DF +DF +hI +UL +UL +Zm +UI +Cu +rR +Di +iC +iC +iC +"} +(12,1,1) = {" +iC +iC +FC +jx +Vf +ZE +at +ph +PH +qK +Oo +DF +Yt +ph +RE +UL +Zm +UI +Mv +Di +Di +iC +iC +iC +"} +(13,1,1) = {" +iC +iC +WY +kz +mf +LN +kr +ph +Nr +oz +YM +YM +Dj +ph +hu +UL +Zm +VZ +ND +Di +Di +iC +iC +iC +"} +(14,1,1) = {" +iC +iC +WY +aF +ZE +LN +Xm +ph +qY +rZ +rZ +SE +gv +ph +bL +UL +Zm +iw +ph +Di +Di +iC +iC +iC +"} +(15,1,1) = {" +iC +iC +WY +iU +mf +LN +eM +ph +zC +hH +HC +hH +aG +ph +hu +UL +Zm +gH +ND +Di +Di +iC +iC +iC +"} +(16,1,1) = {" +iC +iC +pR +it +sK +ZE +kJ +ph +SW +tk +Th +tk +rr +ph +ZH +UL +Zm +ny +Cu +Di +Di +iC +iC +iC +"} +(17,1,1) = {" +iC +ph +ph +ph +ph +Qs +ph +ph +py +HE +tk +tk +tk +hI +UL +UL +Zm +ny +Mv +CY +Di +mG +iC +iC +"} +(18,1,1) = {" +iC +iC +iC +FC +Dm +Zg +ao +ph +tk +tk +Ov +HE +JX +ph +Wl +TI +Ud +tC +ph +ph +Bz +ph +ph +iC +"} +(19,1,1) = {" +iC +iC +iC +pR +wy +Zs +Zg +HS +hz +Py +iK +cM +oS +ph +ph +ph +GS +ph +ph +ph +ph +ph +iC +iC +"} +(20,1,1) = {" +iC +iC +YP +QJ +bb +bP +bP +ph +ph +Xx +ph +Xx +ph +ph +al +WG +yH +qk +GQ +Gr +ph +Rg +iC +iC +"} +(21,1,1) = {" +iC +iC +iC +ph +ph +kH +ZY +ph +iC +iC +iC +iC +ph +Yl +aq +zN +Zm +Xe +KC +vC +Zt +dz +iC +yS +"} +(22,1,1) = {" +iC +iC +iC +iC +ph +iC +iC +ph +iC +iC +iC +iC +ph +Ms +rZ +rZ +WQ +Lg +nJ +Yo +Zt +dz +iC +iC +"} +(23,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +bk +rZ +rZ +rZ +lC +te +lZ +Zt +dz +iC +iC +"} +(24,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +OO +yh +zd +jl +eb +Bf +ph +Rg +iC +iC +"} +(25,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +Xx +ph +ph +ph +ph +ph +ph +iC +iC +"} +(26,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +ph +ph +iC +iC +iC +ph +ph +iC +"} +(27,1,1) = {" +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +iC +"} diff --git a/modular_chomp/maps/submaps/shelters/MercShip-57x25.dmm b/modular_chomp/maps/submaps/shelters/MercShip-57x25.dmm index 45f2937e0b..0b76357038 100644 --- a/modular_chomp/maps/submaps/shelters/MercShip-57x25.dmm +++ b/modular_chomp/maps/submaps/shelters/MercShip-57x25.dmm @@ -1,317 +1,317 @@ -"aj" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"ao" = (/obj/machinery/atmospherics/binary/circulator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"as" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"at" = (/obj/structure/prop/alien/pod/hybrid,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"aH" = (/obj/machinery/optable,/obj/machinery/light/poi,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"aJ" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"aL" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"aM" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"aP" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/obj/structure/fans/hardlight,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"bc" = (/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) -"bi" = (/turf/simulated/floor,/area/template_noop) -"bp" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"bv" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/cable_coil/blue,/obj/item/stack/cable_coil/blue,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"bw" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/clipboard,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"bH" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"bN" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"bO" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"bZ" = (/obj/machinery/door/window/brigdoor/northright{req_access = null},/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"cp" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"cB" = (/obj/structure/prop/alien/pod/open,/obj/random/maintenance/morestuff,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"cH" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"cL" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"cP" = (/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"cX" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"de" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"dg" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"dr" = (/obj/machinery/recycling/sorter,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"dx" = (/obj/structure/closet/radiation,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"dz" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"dA" = (/obj/structure/window/reinforced/survival_pod,/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"dB" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"dC" = (/obj/machinery/autolathe{hacked = 1; name = "hacked autolathe"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"dP" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"dS" = (/obj/structure/cryofeed{dir = 2},/obj/machinery/light/small/emergency,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"dW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"er" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"ex" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/lead{amount = 30},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"eB" = (/obj/structure/closet/alien,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"fc" = (/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) -"ff" = (/obj/machinery/power/supermatter/shard,/turf/simulated/floor/greengrid/nitrogen,/area/survivalpod/superpose/MercShip) -"fi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/marble,/obj/item/slime_extract/orange,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"fr" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"fA" = (/obj/structure/cryofeed,/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"fK" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"fN" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) -"gc" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"gt" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"gz" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"gA" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"gS" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"gW" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"hp" = (/obj/machinery/teleport/hub{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"hw" = (/obj/machinery/vending/engivend{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"hI" = (/obj/machinery/recycling/crusher,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"hR" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"hV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"ie" = (/obj/machinery/light/poi,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"iw" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) -"iy" = (/obj/effect/floor_decal/techfloor,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"iD" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/ion_engine,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) -"iJ" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"iM" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"jc" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/light/poi{dir = 4},/obj/structure/salvageable/console_os{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"jd" = (/obj/machinery/atmospherics/pipe/tank/phoron/full,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"jg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"jh" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"ji" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"jm" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/salvageable/bliss,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"jW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"jZ" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"kl" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -34},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"kD" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"kO" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"kS" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) -"kV" = (/obj/effect/floor_decal/techfloor/corner{dir = 6},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"lk" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"lp" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"lt" = (/obj/machinery/door/blast/multi_tile/four_tile_ver_sec,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"lJ" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"mm" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"mv" = (/obj/structure/table/darkglass,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace{pixel_x = -7},/obj/item/weapon/storage/belt/medical/alien,/obj/item/weapon/storage/belt/medical/alien{pixel_y = 6},/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"my" = (/obj/machinery/oxygen_pump/anesthetic,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"mK" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"mQ" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"mT" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"nj" = (/obj/item/weapon/tape_roll,/obj/item/sticky_pad/random,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/blue,/obj/item/fulton_core,/obj/item/fulton_core,/obj/item/extraction_pack,/obj/item/extraction_pack,/obj/item/modular_computer/laptop/preset/custom_loadout/standard,/obj/item/weapon/pickaxe/hand,/obj/item/device/flashlight/color/yellow,/obj/item/device/flashlight/color/orange,/obj/item/device/threadneedle,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/flame/lighter/zippo,/obj/item/device/flashlight/lantern,/obj/random/soap,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/device/healthanalyzer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/stack/nanopaste,/obj/item/device/suit_cooling_unit/emergency,/obj/item/device/suit_cooling_unit/emergency,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/box/flare,/obj/item/weapon/storage/box/khcrystal,/obj/item/weapon/storage/box/khcrystal,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/stack/marker_beacon/ten,/obj/item/device/starcaster_news,/obj/item/device/mapping_unit,/obj/item/weapon/storage/box/dosimeter,/obj/item/device/gps,/obj/item/device/gps,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/device/pda,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/gun/energy/locked/phasegun,/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/clothing/accessory/permit/gun,/obj/item/clothing/accessory/permit/gun,/obj/item/weapon/material/knife/machete,/obj/item/weapon/material/fishing_net,/obj/item/weapon/storage/backpack/sport,/obj/item/weapon/storage/backpack/sport,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/weapon/storage/belt,/obj/item/clothing/accessory/poncho/thermal,/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"ns" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) -"nt" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"nv" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/soap/deluxe,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"nx" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"nB" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"nC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"nL" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/mecha/working/ripley/antique,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"oh" = (/obj/random/maintenance/medical,/obj/structure/table/hardwoodtable,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"oi" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/netgun,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"op" = (/obj/structure/window/reinforced/survival_pod{dir = 10},/obj/machinery/light/poi,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"oG" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) -"oI" = (/obj/effect/floor_decal/techfloor,/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"oM" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"oR" = (/obj/effect/floor_decal/techfloor,/obj/structure/salvageable/machine{name = "Life Support Console"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"ph" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"pi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"pu" = (/obj/machinery/sleeper{dir = 4; emagged = 1; initial_bin_rating = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"px" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"pC" = (/obj/effect/floor_decal/techfloor,/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"qa" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"qb" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/salvageable/machine_os,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"qe" = (/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"qC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"qQ" = (/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"qS" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"qY" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"rx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"rI" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) -"rL" = (/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"se" = (/obj/random/maintenance/engineering,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/MercShip) -"ss" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westright{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"sO" = (/turf/simulated/wall/r_lead,/area/survivalpod/superpose/MercShip) -"td" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"tr" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = null; output = 63},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"tF" = (/obj/machinery/cryopod/robot,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"tK" = (/obj/structure/prop/alien/computer/hybrid,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"uf" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"ut" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"uI" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/marble,/obj/item/slime_extract/gold,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"uQ" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"uT" = (/obj/machinery/recycling/stamper,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"uU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"ve" = (/obj/effect/floor_decal/techfloor,/obj/structure/salvageable/server_os,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"vg" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"vH" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"vQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"vU" = (/obj/item/device/gps/internal/poi{name = "#$(@@%$#"},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"vV" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"wr" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"wz" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"wD" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"xn" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"xs" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"xG" = (/obj/structure/prop/alien/computer/hybrid{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"xT" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/cryofeed{dir = 1},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) -"xV" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/loot_pile/mecha/gygax/dark/adv,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"ya" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/tape_roll,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"yi" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"yv" = (/obj/structure/prop/fake_ai{name = "P0ps1ck13"},/obj/structure/window/reinforced/survival_pod{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"yD" = (/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core 2"; dir = 1},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"yI" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"yP" = (/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"yY" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"zc" = (/obj/structure/sign/department/cargo_dock,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"zu" = (/obj/random/maintenance/clean,/obj/structure/table/hardwoodtable,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"zz" = (/turf/simulated/floor/plating/external,/area/survivalpod/superpose/MercShip) -"zH" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"zI" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Af" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"Aj" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) -"AB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/wall/r_lead,/area/survivalpod/superpose/MercShip) -"AL" = (/obj/machinery/door/window/brigdoor/northright{dir = 2; req_access = null},/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"AP" = (/obj/machinery/vending/medical{dir = 4; emagged = 1; pixel_x = 5; req_access = list(777)},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"AS" = (/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Bd" = (/obj/machinery/vending/deluxe_boozeomat{req_access = null; req_log_access = null},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Bf" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Bh" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"Bo" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"BE" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"BP" = (/obj/structure/closet/medical,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"BT" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/mecha/combat/gygax/serenity,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Ca" = (/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Cl" = (/obj/effect/floor_decal/techfloor,/obj/machinery/chemical_dispenser/ert/specialops/abductor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Cy" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"CO" = (/turf/template_noop,/area/template_noop) -"CS" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"CY" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"Dn" = (/obj/machinery/light/poi{dir = 8},/obj/structure/table/survival_pod,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"DF" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"DJ" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"DK" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light/poi,/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"DM" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/engine,/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"DX" = (/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"Ee" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) -"El" = (/obj/structure/toilet{dir = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"Em" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 1},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Fs" = (/obj/machinery/cablelayer,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"FU" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"FZ" = (/obj/machinery/shower{pixel_y = 16},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"Gd" = (/obj/machinery/door/blast/multi_tile/four_tile_ver_sec,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"GH" = (/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"GT" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"GU" = (/obj/structure/window/reinforced/survival_pod,/obj/machinery/teleport/station{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Hc" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"HW" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"HX" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Ib" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Ii" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/computer/teleporter{dir = 2},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Ir" = (/obj/structure/table/rack/shelf/steel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Jt" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"JB" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"JD" = (/obj/structure/cryofeed{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) -"JW" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Kc" = (/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) -"Ke" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Ko" = (/obj/machinery/power/emitter/gyrotron{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Kq" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/bed/chair/bay/comfy/teal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Kw" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) -"KB" = (/obj/effect/floor_decal/techfloor/corner{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"KS" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"KT" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"La" = (/obj/machinery/door/window/survival_pod,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"LM" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Md" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Mk" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"Mr" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) -"Mz" = (/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"Nb" = (/obj/random/maintenance/clean,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Nc" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Nd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Nm" = (/obj/effect/floor_decal/techfloor{dir = 5},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"NI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"NP" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"NV" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"NY" = (/obj/structure/closet/alien,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"Pi" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastleft{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/hooklauncher/ring,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Pq" = (/obj/machinery/light/poi{dir = 4},/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 8},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Py" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan,/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"PB" = (/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"PF" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"PR" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"PT" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light/poi{dir = 1},/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Qe" = (/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"Qi" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Qu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"QH" = (/obj/structure/closet/crate/large,/obj/fiftyspawner/steel,/obj/item/stack/material/plasteel{amount = 30},/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/fiftyspawner/steel,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"RL" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) -"Sd" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"SK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"SO" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) -"SS" = (/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) -"SY" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"Tg" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Ti" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/bay/comfy/teal{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Tk" = (/obj/machinery/light/poi,/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) -"Tr" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/resin{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Tw" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westleft{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/rig/focalpoint,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Tx" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"TK" = (/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) -"TL" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Ui" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Um" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) -"Un" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Uu" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 4},/turf/template_noop,/area/template_noop) -"Uz" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"UI" = (/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"UJ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"US" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Vk" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Vq" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) -"Vu" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Vw" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) -"VF" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 8},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"VP" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"VQ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"VR" = (/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"VS" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"Wl" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/device/sleevemate,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"Wu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"WJ" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"WO" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"WQ" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) -"WT" = (/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"WX" = (/obj/machinery/vending/tool{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) -"Xc" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Xg" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) -"Xv" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) -"XA" = (/obj/machinery/light/poi{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"XC" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) -"XY" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"Yi" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) -"Yw" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"YA" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) -"YI" = (/turf/simulated/floor/greengrid/nitrogen,/area/survivalpod/superpose/MercShip) -"YP" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/template_noop) -"Zh" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/filingcabinet/medical,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"Zp" = (/obj/machinery/computer/operating{dir = 1},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) -"Zq" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) -"ZN" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) -"ZQ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) -"ZY" = (/obj/machinery/door/window/survival_pod{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) - -(1,1,1) = {" -COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOSSSSSSSSSSSSSSSSSSaLaPaPdWSSSSCOCOCOCOCOCOCOCOCOCOCOCOCO -COCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOCOWTSSjdjdtKjdjdSSUIUIUIUIUIUISSSSCOCOCOCOCOCOCOCOCOCOCOCO -COCOCOWTSSbHPTQuaophdzNINdgzVFSSSSSSCOSSSSwDSSSSSSCOCOCOYPWTSSkDkDWTkDkDSSUIUIUIUIUIUIUISSSSCOCOCOCOCOCOCOCOCOCOCO -COCOCOWTSSnCntxsSKxsSKcpLMJtPqSSHXSSSSSSWXjinBhwSSSSCOCOCOSSSSoMoMCyoMXYSSVqVqbObObObOVqoISSCOCOCOCOCOCOCOCOCOCOCO -COUuCOWTSSWTWTgAvHvHvHHWWTWTWTgWqQqQSSmQcPcPcPcPSSSSSSCOCOCOSScBcBiJVkYASSieVkNbqeNbqeieBdSSSSCOCOCOCOCOCOCOCOCOCO -COCObiSSSSmKUSZqVuVuVuVulpmmqSjgqQqQgWcPcPcPcPcPdxSSSSSSwDSSSSSSSSSSgWSSSSSSgWSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCO -COWTWTSSSSpisOvVjWjWjWDJsOCYsOsOqQutSSGTMdMdKqMdZhSSSSHXqQqQNcqQqQqQqQqQNcqQqQqQqQqQqQNcqQHXSSSSSSSSSSSSCOCOCOCOCO -UuWTWTSSSSCSxnCSCSCSCSCSxnCSsOsOqQqQSSSSyaBhALbwSSSSqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQSSCaXvNYSSSSCOCOCOCO -COWTWTSSzIVRNPsOsOsOsOsONPVRFUgWqQqQyYNcqQqQqQqQNcyYqQqQzcSSgWSSSSSSgWSSSSSSgWSSSSSSgWSSSSqQqQgWqQXvAfSSSSwDSSSSCO -COWTWTSSzINPbcbcbcnsbcbcbcNPFUsOTLTLTLTLTLTLTLTLTLTLTLSYSSDFyPBESSUIUIeBSSUIUIeBSSUIUIeBSSqQqQSSqQXvvgSSqbtdjmSSSS -COWTWTWTzINPbcSSvVjWDJSSbcsOFUABkVyIyIyIyIcXZNNPqaNPKeFUSSfAyvJDSSqCKcAjSSqCfckSSSqCXvvgSSqQqQDXqQqQqQSSKSFmNmjcSS -COWTWTGdZQNPbcSSMzNVRLfibcsOrLfiBfVSVSdCQHQidgNPJWNPcHrLSSatdSatSSohSOiwSSzuUmrISSzuUzgtSSCSCSSSCSCSCSgWTLTLUJyifi -COWTWOSSXANPbcYiYIfftrPRoGsOXAPRBfVkVkVkVkQijhNPkONPaMTgSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSXANPSSXAvUnjSSDnNPNPVPPR -COWTWTWTaJNPbcSSyDNVDMnxbcsOASnxBfhIdruTFsQibvNPexNPHcASSSPiufssSSzuKwrISSohfNWQSSxTpxIiwDBoBoSSasasasgWFmFmUiyinx -COWTWTWTzINPbcSSvVjWDJSSbcsOFUABKBWuWuWuWuiMIrNPTrNPajFUSSoiyPTwSSvQfckSSSvQTKEeSSMrhpVkZYqQqQSSYwseYwSSpCTLJBjcSS -COWTWTSSzINPbcbcbcTkbcbcbcNPFUsOFmFmFmFmFmFmFmFmFmFmFmbpSSuIBofmSSUIUIeBSSUIUIeBSSiDdAGUwDqQqQSSYwzzxVSSveiyoRSSSS -COWTWTltzIVRNPsOsOsOsOsONPVRFUgWqQqQkldPqQqQqQqQdPklqQqQzcwDgWwDSSSSgWSSSSSSgWSSSSSSSSSSSSqQqQSSBTsegSSSSSwDSSSSCO -COWTWTSSSSBowzBoBoBoBoBowzBosOsOqQqQSSSSMkXCbZWlSSSSqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQSSYwzznLSSSSCOCOCOCO -COWTWTSSSSpisOvVjWjWjWDJsOCYsOsOqQutSSClyIyITiyIUnSSSSHXqQqQdPqQqQqQqQqQdPqQqQqQqQqQqQdPqQHXSSSSSSSSSSSSCOCOCOCOCO -UuCObiSSSSKoVQuQuQuQuQuQVQKohVjgqQqQgWdedededededemvSSSSwDSSSSSSSSSSgWSSSSSSgWSSSSSSSdSSSSSSSSSSCOCOCOCOCOCOCOCOCO -COCOCOWTSSWTWTuUXcXcXcfKWTWTWTgWqQqQSSBPdedededeAPSSSSCOCOCOSScBcBlkVkYASSqYVkmTSSnvPBLaFZSSSSCOCOCOCOCOCOCOCOCOCO -COCOCOWTSSnCrxlJKTlJKTfrzHJtVFSSHXSSSSSSWJpuaHZpSSSSCOCOCOSSSSdBdBTxdBgcSSPFFmjZSSPBPBGHSSSSCOCOCOCOCOCOCOCOCOCOCO -COUuCOWTSSbHDKQuaophdzPywrerVFSSSSSSCOSSSSwDmySSSSCOCOCOCOWTSScLcLWTcLcLSShRyPXgSSQeopVwSSSSCOCOCOCOCOCOCOCOCOCOCO -COCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOYPWTSSIbEmxGIbIbSStFbNtFSSElSSSSSSCOCOCOCOCOCOCOCOCOCOCOCO -COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOCOCO -"} +"aj" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"ao" = (/obj/machinery/atmospherics/binary/circulator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"as" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"at" = (/obj/structure/prop/alien/pod/hybrid,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"aH" = (/obj/machinery/optable,/obj/machinery/light/poi,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"aJ" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"aL" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"aM" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"aP" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/obj/structure/fans/hardlight,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"bc" = (/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) +"bi" = (/turf/simulated/floor,/area/template_noop) +"bp" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"bv" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/cable_coil/blue,/obj/item/stack/cable_coil/blue,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"bw" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/clipboard,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"bH" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"bN" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"bO" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"bZ" = (/obj/machinery/door/window/brigdoor/northright{req_access = null},/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"cp" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"cB" = (/obj/structure/prop/alien/pod/open,/obj/random/maintenance/morestuff,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"cH" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"cL" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"cP" = (/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"cX" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"de" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"dg" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"dr" = (/obj/machinery/recycling/sorter,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"dx" = (/obj/structure/closet/radiation,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"dz" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"dA" = (/obj/structure/window/reinforced/survival_pod,/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"dB" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"dC" = (/obj/machinery/autolathe{hacked = 1; name = "hacked autolathe"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"dP" = (/obj/machinery/light/poi,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"dS" = (/obj/structure/cryofeed{dir = 2},/obj/machinery/light/small/emergency,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"dW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"er" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"ex" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/lead{amount = 30},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"eB" = (/obj/structure/closet/alien,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"fc" = (/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) +"ff" = (/obj/machinery/power/supermatter/shard,/turf/simulated/floor/greengrid/nitrogen,/area/survivalpod/superpose/MercShip) +"fi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/marble,/obj/item/slime_extract/orange,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"fr" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"fA" = (/obj/structure/cryofeed,/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"fK" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"fN" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) +"gc" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"gt" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"gz" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"gA" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"gS" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"gW" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"hp" = (/obj/machinery/teleport/hub{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"hw" = (/obj/machinery/vending/engivend{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"hI" = (/obj/machinery/recycling/crusher,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"hR" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"hV" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"ie" = (/obj/machinery/light/poi,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"iw" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) +"iy" = (/obj/effect/floor_decal/techfloor,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"iD" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/ion_engine,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) +"iJ" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"iM" = (/obj/effect/floor_decal/techfloor/corner{dir = 9},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"jc" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/light/poi{dir = 4},/obj/structure/salvageable/console_os{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"jd" = (/obj/machinery/atmospherics/pipe/tank/phoron/full,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"jg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"jh" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"ji" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/phoronrglass,/obj/fiftyspawner/phoronrglass,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"jm" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/salvageable/bliss,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"jW" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"jZ" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"kl" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -34},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"kD" = (/obj/machinery/atmospherics/binary/pump/on{target_pressure = 200},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"kO" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"kS" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) +"kV" = (/obj/effect/floor_decal/techfloor/corner{dir = 6},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"lk" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/closet/alien,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"lp" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"lt" = (/obj/machinery/door/blast/multi_tile/four_tile_ver_sec,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"lJ" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"mm" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"mv" = (/obj/structure/table/darkglass,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace{pixel_x = -7},/obj/item/weapon/storage/belt/medical/alien,/obj/item/weapon/storage/belt/medical/alien{pixel_y = 6},/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"my" = (/obj/machinery/oxygen_pump/anesthetic,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"mK" = (/obj/machinery/power/emitter/gyrotron,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"mQ" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"mT" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"nj" = (/obj/item/weapon/tape_roll,/obj/item/sticky_pad/random,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/blue,/obj/item/fulton_core,/obj/item/fulton_core,/obj/item/extraction_pack,/obj/item/extraction_pack,/obj/item/modular_computer/laptop/preset/custom_loadout/standard,/obj/item/weapon/pickaxe/hand,/obj/item/device/flashlight/color/yellow,/obj/item/device/flashlight/color/orange,/obj/item/device/threadneedle,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/flame/lighter/zippo,/obj/item/device/flashlight/lantern,/obj/random/soap,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/device/healthanalyzer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/stack/nanopaste,/obj/item/device/suit_cooling_unit/emergency,/obj/item/device/suit_cooling_unit/emergency,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/box/flare,/obj/item/weapon/storage/box/khcrystal,/obj/item/weapon/storage/box/khcrystal,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/stack/marker_beacon/ten,/obj/item/device/starcaster_news,/obj/item/device/mapping_unit,/obj/item/weapon/storage/box/dosimeter,/obj/item/device/gps,/obj/item/device/gps,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/device/pda,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/gun/energy/locked/phasegun,/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/clothing/accessory/permit/gun,/obj/item/clothing/accessory/permit/gun,/obj/item/weapon/material/knife/machete,/obj/item/weapon/material/fishing_net,/obj/item/weapon/storage/backpack/sport,/obj/item/weapon/storage/backpack/sport,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/weapon/storage/belt,/obj/item/clothing/accessory/poncho/thermal,/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"ns" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) +"nt" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"nv" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/soap/deluxe,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"nx" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"nB" = (/obj/structure/closet/alien,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/obj/item/weapon/storage/toolbox/syndicate/powertools,/obj/item/weapon/storage/toolbox/syndicate,/obj/fiftyspawner/plasteel,/obj/fiftyspawner/plasteel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"nC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"nL" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/mecha/working/ripley/antique,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"oh" = (/obj/random/maintenance/medical,/obj/structure/table/hardwoodtable,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"oi" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/netgun,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"op" = (/obj/structure/window/reinforced/survival_pod{dir = 10},/obj/machinery/light/poi,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"oG" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) +"oI" = (/obj/effect/floor_decal/techfloor,/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"oM" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"oR" = (/obj/effect/floor_decal/techfloor,/obj/structure/salvageable/machine{name = "Life Support Console"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"ph" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"pi" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"pu" = (/obj/machinery/sleeper{dir = 4; emagged = 1; initial_bin_rating = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"px" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"pC" = (/obj/effect/floor_decal/techfloor,/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"qa" = (/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"qb" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/salvageable/machine_os,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"qe" = (/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"qC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"qQ" = (/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"qS" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"qY" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"rx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"rI" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) +"rL" = (/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"se" = (/obj/random/maintenance/engineering,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/MercShip) +"ss" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westright{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/device/soulstone,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"sO" = (/turf/simulated/wall/r_lead,/area/survivalpod/superpose/MercShip) +"td" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"tr" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = null; output = 63},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"tF" = (/obj/machinery/cryopod/robot,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"tK" = (/obj/structure/prop/alien/computer/hybrid,/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"uf" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"ut" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"uI" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/table/marble,/obj/item/slime_extract/gold,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"uQ" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"uT" = (/obj/machinery/recycling/stamper,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"uU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"ve" = (/obj/effect/floor_decal/techfloor,/obj/structure/salvageable/server_os,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"vg" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"vH" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"vQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"vU" = (/obj/item/device/gps/internal/poi{name = "#$(@@%$#"},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"vV" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"wr" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"wz" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light/poi,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"wD" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"xn" = (/obj/effect/floor_decal/techfloor,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"xs" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"xG" = (/obj/structure/prop/alien/computer/hybrid{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"xT" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/cryofeed{dir = 1},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) +"xV" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/loot_pile/mecha/gygax/dark/adv,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"ya" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/tape_roll,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"yi" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"yv" = (/obj/structure/prop/fake_ai{name = "P0ps1ck13"},/obj/structure/window/reinforced/survival_pod{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"yD" = (/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core 2"; dir = 1},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"yI" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"yP" = (/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"yY" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"zc" = (/obj/structure/sign/department/cargo_dock,/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"zu" = (/obj/random/maintenance/clean,/obj/structure/table/hardwoodtable,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"zz" = (/turf/simulated/floor/plating/external,/area/survivalpod/superpose/MercShip) +"zH" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"zI" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Af" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"Aj" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) +"AB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"},/turf/simulated/wall/r_lead,/area/survivalpod/superpose/MercShip) +"AL" = (/obj/machinery/door/window/brigdoor/northright{dir = 2; req_access = null},/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"AP" = (/obj/machinery/vending/medical{dir = 4; emagged = 1; pixel_x = 5; req_access = list(777)},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"AS" = (/obj/effect/floor_decal/techfloor{dir = 9},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Bd" = (/obj/machinery/vending/deluxe_boozeomat{req_access = null; req_log_access = null},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Bf" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Bh" = (/obj/structure/window/reinforced/survival_pod,/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"Bo" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"BE" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"BP" = (/obj/structure/closet/medical,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"BT" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/obj/mecha/combat/gygax/serenity,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Ca" = (/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Cl" = (/obj/effect/floor_decal/techfloor,/obj/machinery/chemical_dispenser/ert/specialops/abductor{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Cy" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"CO" = (/turf/template_noop,/area/template_noop) +"CS" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"CY" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"Dn" = (/obj/machinery/light/poi{dir = 8},/obj/structure/table/survival_pod,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"DF" = (/obj/structure/prop/alien/pod/hybrid,/obj/structure/window/reinforced/survival_pod{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"DJ" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/structure/window/phoronreinforced{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"DK" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light/poi,/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"DM" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/engine,/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"DX" = (/obj/machinery/vending/deluxe_dinner{req_access = null; req_log_access = null},/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"Ee" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) +"El" = (/obj/structure/toilet{dir = 1},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"Em" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 1},/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Fm" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Fs" = (/obj/machinery/cablelayer,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"FU" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"FZ" = (/obj/machinery/shower{pixel_y = 16},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"Gd" = (/obj/machinery/door/blast/multi_tile/four_tile_ver_sec,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"GH" = (/obj/structure/window/reinforced/survival_pod{dir = 5},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"GT" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"GU" = (/obj/structure/window/reinforced/survival_pod,/obj/machinery/teleport/station{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Hc" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"HW" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"HX" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Ib" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Ii" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/computer/teleporter{dir = 2},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Ir" = (/obj/structure/table/rack/shelf/steel,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Jt" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Scrubber to Waste"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"JB" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"JD" = (/obj/structure/cryofeed{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/MercShip) +"JW" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Kc" = (/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) +"Ke" = (/obj/machinery/smartfridge/survival_pod{icon = 'icons/obj/vending.dmi'; icon_base = "fridge_sci"; icon_contents = "chem"; icon_state = "fridge_sci"; name = "Advanced storage"; pixel_y = 0},/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Ko" = (/obj/machinery/power/emitter/gyrotron{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Kq" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/bed/chair/bay/comfy/teal,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Kw" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) +"KB" = (/obj/effect/floor_decal/techfloor/corner{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"KS" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"KT" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"La" = (/obj/machinery/door/window/survival_pod,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"LM" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Md" = (/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Mk" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen/reagent/paralysis,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"Mr" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1; dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/MercShip) +"Mz" = (/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"Nb" = (/obj/random/maintenance/clean,/obj/structure/table/hardwoodtable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Nc" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Nd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Nm" = (/obj/effect/floor_decal/techfloor{dir = 5},/obj/structure/bed/chair/bay/comfy/captain{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"NI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"NP" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"NV" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"NY" = (/obj/structure/closet/alien,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"Pi" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/brigdoor/eastleft{name = "Laser Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/gun/energy/hooklauncher/ring,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Pq" = (/obj/machinery/light/poi{dir = 4},/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 8},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Py" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/cyan,/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"PB" = (/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"PF" = (/obj/machinery/cryopod{dir = 4},/obj/structure/cryofeed{pixel_x = -32},/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"PR" = (/obj/structure/grille/cult{name = "Alien grille"},/obj/structure/window/phoronreinforced/full,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"PT" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light/poi{dir = 1},/obj/structure/closet/emcloset/legacy,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Qe" = (/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"Qi" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Qu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"QH" = (/obj/structure/closet/crate/large,/obj/fiftyspawner/steel,/obj/item/stack/material/plasteel{amount = 30},/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/fiftyspawner/steel,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"RL" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/survivalpod/superpose/MercShip) +"Sd" = (/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"SK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"SO" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/blue,/area/survivalpod/superpose/MercShip) +"SS" = (/turf/simulated/wall/skipjack,/area/survivalpod/superpose/MercShip) +"SY" = (/obj/effect/floor_decal/techfloor/corner{dir = 10},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"Tg" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Ti" = (/obj/effect/floor_decal/techfloor,/obj/structure/bed/chair/bay/comfy/teal{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Tk" = (/obj/machinery/light/poi,/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) +"Tr" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/resin{amount = 50},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Tw" = (/obj/structure/window/reinforced/survival_pod,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/brigdoor/westleft{name = "Combat Armor"},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/rig/focalpoint,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Tx" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"TK" = (/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) +"TL" = (/obj/effect/floor_decal/techfloor,/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Ui" = (/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Um" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet/tealcarpet,/area/survivalpod/superpose/MercShip) +"Un" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Uu" = (/obj/machinery/atmospherics/unary/engine/biggest{dir = 4},/turf/template_noop,/area/template_noop) +"Uz" = (/obj/machinery/light/poi,/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"UI" = (/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"UJ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"US" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/machinery/light/poi,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Vk" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Vq" = (/obj/effect/floor_decal/techfloor,/turf/simulated/floor/wood/sif,/area/survivalpod/superpose/MercShip) +"Vu" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Vw" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/MercShip) +"VF" = (/obj/machinery/atmospherics/pipe/tank/phoron/full{dir = 8},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"VP" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"VQ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/poi{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"VR" = (/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"VS" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"Wl" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/device/sleevemate,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"Wu" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/techfloor{dir = 1},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"WJ" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"WO" = (/obj/machinery/light/poi{dir = 4},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"WQ" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/carpet/gaycarpet,/area/survivalpod/superpose/MercShip) +"WT" = (/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"WX" = (/obj/machinery/vending/tool{emagged = 1; req_access = list(777); req_log_access = null},/turf/simulated/shuttle/floor/yellow,/area/survivalpod/superpose/MercShip) +"Xc" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Xg" = (/obj/machinery/cryopod,/obj/structure/cryofeed{dir = 4; pixel_x = 32},/turf/simulated/shuttle/floor/darkred,/area/survivalpod/superpose/MercShip) +"Xv" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/MercShip) +"XA" = (/obj/machinery/light/poi{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"XC" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/weapon/hand_labeler,/obj/item/device/tape/random,/obj/structure/table/hardwoodtable,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/MercShip) +"XY" = (/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"Yi" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/airless,/area/survivalpod/superpose/MercShip) +"Yw" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"YA" = (/obj/structure/closet/alien,/obj/item/clothing/suit/space/void/autolok,/obj/item/clothing/suit/space/void/autolok,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/MercShip) +"YI" = (/turf/simulated/floor/greengrid/nitrogen,/area/survivalpod/superpose/MercShip) +"YP" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/template_noop) +"Zh" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/filingcabinet/medical,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"Zp" = (/obj/machinery/computer/operating{dir = 1},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/MercShip) +"Zq" = (/obj/machinery/power/rad_collector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan,/turf/simulated/floor,/area/survivalpod/superpose/MercShip) +"ZN" = (/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) +"ZQ" = (/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/shuttle/floor/black,/area/survivalpod/superpose/MercShip) +"ZY" = (/obj/machinery/door/window/survival_pod{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/MercShip) + +(1,1,1) = {" +COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOSSSSSSSSSSSSSSSSSSaLaPaPdWSSSSCOCOCOCOCOCOCOCOCOCOCOCOCO +COCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOCOWTSSjdjdtKjdjdSSUIUIUIUIUIUISSSSCOCOCOCOCOCOCOCOCOCOCOCO +COCOCOWTSSbHPTQuaophdzNINdgzVFSSSSSSCOSSSSwDSSSSSSCOCOCOYPWTSSkDkDWTkDkDSSUIUIUIUIUIUIUISSSSCOCOCOCOCOCOCOCOCOCOCO +COCOCOWTSSnCntxsSKxsSKcpLMJtPqSSHXSSSSSSWXjinBhwSSSSCOCOCOSSSSoMoMCyoMXYSSVqVqbObObObOVqoISSCOCOCOCOCOCOCOCOCOCOCO +COUuCOWTSSWTWTgAvHvHvHHWWTWTWTgWqQqQSSmQcPcPcPcPSSSSSSCOCOCOSScBcBiJVkYASSieVkNbqeNbqeieBdSSSSCOCOCOCOCOCOCOCOCOCO +COCObiSSSSmKUSZqVuVuVuVulpmmqSjgqQqQgWcPcPcPcPcPdxSSSSSSwDSSSSSSSSSSgWSSSSSSgWSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCO +COWTWTSSSSpisOvVjWjWjWDJsOCYsOsOqQutSSGTMdMdKqMdZhSSSSHXqQqQNcqQqQqQqQqQNcqQqQqQqQqQqQNcqQHXSSSSSSSSSSSSCOCOCOCOCO +UuWTWTSSSSCSxnCSCSCSCSCSxnCSsOsOqQqQSSSSyaBhALbwSSSSqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQSSCaXvNYSSSSCOCOCOCO +COWTWTSSzIVRNPsOsOsOsOsONPVRFUgWqQqQyYNcqQqQqQqQNcyYqQqQzcSSgWSSSSSSgWSSSSSSgWSSSSSSgWSSSSqQqQgWqQXvAfSSSSwDSSSSCO +COWTWTSSzINPbcbcbcnsbcbcbcNPFUsOTLTLTLTLTLTLTLTLTLTLTLSYSSDFyPBESSUIUIeBSSUIUIeBSSUIUIeBSSqQqQSSqQXvvgSSqbtdjmSSSS +COWTWTWTzINPbcSSvVjWDJSSbcsOFUABkVyIyIyIyIcXZNNPqaNPKeFUSSfAyvJDSSqCKcAjSSqCfckSSSqCXvvgSSqQqQDXqQqQqQSSKSFmNmjcSS +COWTWTGdZQNPbcSSMzNVRLfibcsOrLfiBfVSVSdCQHQidgNPJWNPcHrLSSatdSatSSohSOiwSSzuUmrISSzuUzgtSSCSCSSSCSCSCSgWTLTLUJyifi +COWTWOSSXANPbcYiYIfftrPRoGsOXAPRBfVkVkVkVkQijhNPkONPaMTgSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSXANPSSXAvUnjSSDnNPNPVPPR +COWTWTWTaJNPbcSSyDNVDMnxbcsOASnxBfhIdruTFsQibvNPexNPHcASSSPiufssSSzuKwrISSohfNWQSSxTpxIiwDBoBoSSasasasgWFmFmUiyinx +COWTWTWTzINPbcSSvVjWDJSSbcsOFUABKBWuWuWuWuiMIrNPTrNPajFUSSoiyPTwSSvQfckSSSvQTKEeSSMrhpVkZYqQqQSSYwseYwSSpCTLJBjcSS +COWTWTSSzINPbcbcbcTkbcbcbcNPFUsOFmFmFmFmFmFmFmFmFmFmFmbpSSuIBofmSSUIUIeBSSUIUIeBSSiDdAGUwDqQqQSSYwzzxVSSveiyoRSSSS +COWTWTltzIVRNPsOsOsOsOsONPVRFUgWqQqQkldPqQqQqQqQdPklqQqQzcwDgWwDSSSSgWSSSSSSgWSSSSSSSSSSSSqQqQSSBTsegSSSSSwDSSSSCO +COWTWTSSSSBowzBoBoBoBoBowzBosOsOqQqQSSSSMkXCbZWlSSSSqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQqQSSYwzznLSSSSCOCOCOCO +COWTWTSSSSpisOvVjWjWjWDJsOCYsOsOqQutSSClyIyITiyIUnSSSSHXqQqQdPqQqQqQqQqQdPqQqQqQqQqQqQdPqQHXSSSSSSSSSSSSCOCOCOCOCO +UuCObiSSSSKoVQuQuQuQuQuQVQKohVjgqQqQgWdedededededemvSSSSwDSSSSSSSSSSgWSSSSSSgWSSSSSSSdSSSSSSSSSSCOCOCOCOCOCOCOCOCO +COCOCOWTSSWTWTuUXcXcXcfKWTWTWTgWqQqQSSBPdedededeAPSSSSCOCOCOSScBcBlkVkYASSqYVkmTSSnvPBLaFZSSSSCOCOCOCOCOCOCOCOCOCO +COCOCOWTSSnCrxlJKTlJKTfrzHJtVFSSHXSSSSSSWJpuaHZpSSSSCOCOCOSSSSdBdBTxdBgcSSPFFmjZSSPBPBGHSSSSCOCOCOCOCOCOCOCOCOCOCO +COUuCOWTSSbHDKQuaophdzPywrerVFSSSSSSCOSSSSwDmySSSSCOCOCOCOWTSScLcLWTcLcLSShRyPXgSSQeopVwSSSSCOCOCOCOCOCOCOCOCOCOCO +COCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOYPWTSSIbEmxGIbIbSStFbNtFSSElSSSSSSCOCOCOCOCOCOCOCOCOCOCOCO +COCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCOCOCOCOCOCOCOCOCOCOCOCOCO +"} diff --git a/modular_chomp/maps/submaps/shelters/OldHotel-25x25.dmm b/modular_chomp/maps/submaps/shelters/OldHotel-25x25.dmm index 87a1eb2fde..4c5863ec84 100644 --- a/modular_chomp/maps/submaps/shelters/OldHotel-25x25.dmm +++ b/modular_chomp/maps/submaps/shelters/OldHotel-25x25.dmm @@ -1,1486 +1,1486 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/cell/hyper, -/obj/random/coin, -/obj/random/cash/huge, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"ab" = ( -/obj/structure/closet/crate, -/obj/random/cash, -/obj/random/cigarettes, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"ai" = ( -/obj/random/trash, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"aJ" = ( -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"bb" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/device/multitool, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"bQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"bW" = ( -/obj/item/weapon/material/shard, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"cA" = ( -/obj/structure/sink/kitchen, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"cZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"da" = ( -/obj/structure/bed/chair/oldsofa/right, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"dc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"dn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/everburn, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"dr" = ( -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/structure/table/rack/shelf, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"dz" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/mirror{ - dir = 4; - pixel_x = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"dL" = ( -/obj/structure/window/reinforced/full, -/obj/structure/grille/rustic, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"eK" = ( -/obj/structure/grille, -/obj/structure/bonfire/sifwood, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"go" = ( -/obj/structure/simple_door/iron, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"gA" = ( -/turf/template_noop, -/area/template_noop) -"gM" = ( -/obj/machinery/appliance/cooker/oven, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"hc" = ( -/obj/random/trash, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"hp" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"hQ" = ( -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"if" = ( -/obj/structure/bed/chair/oldsofa/left{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"iU" = ( -/obj/structure/table/woodentable, -/obj/item/trash/tray, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"ja" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"jO" = ( -/obj/structure/bed/chair/oldsofa, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"kh" = ( -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"kw" = ( -/obj/structure/lightpost, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"kI" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"kW" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lj" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"ly" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/piratedouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"lZ" = ( -/obj/structure/table/woodentable, -/obj/item/trash/tray, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"mR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"nD" = ( -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) -"nG" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"op" = ( -/obj/structure/table/woodentable, -/obj/random/cigarettes, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"pn" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 7 - }, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"qg" = ( -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"qY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"rb" = ( -/obj/item/weapon/module/power_control, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"rK" = ( -/obj/structure/table/woodentable, -/obj/item/trash/candle, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"sd" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"sV" = ( -/obj/structure/table/woodentable, -/obj/random/contraband, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"tn" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"tz" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/rddouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"tE" = ( -/obj/structure/table/woodentable, -/obj/random/coin, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"tV" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/item/weapon/material/shard, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"uU" = ( -/obj/structure/closet/cabinet, -/obj/random/maintenance/medical, -/obj/random/carp_plushie, -/obj/random/cigarettes, -/obj/random/drinkbottle, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"vh" = ( -/obj/structure/bed/chair/oldsofa/corner, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"vA" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/telecube/randomized{ - name = "Odd artifact" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"vM" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_y = -6 - }, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/obj/structure/grille/broken, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"vR" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/candle/candelabra, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"wm" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"wK" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"wV" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/reagent_containers/glass/beaker, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"wX" = ( -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/structure/table/rack/shelf, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"yj" = ( -/obj/random/mob/sif/peaceful, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"yM" = ( -/obj/item/stack/cable_coil, -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"zs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"zt" = ( -/obj/structure/noticeboard, -/turf/simulated/wall/wood, -/area/survivalpod/superpose/OldHotel) -"zE" = ( -/obj/structure/closet/cabinet, -/obj/random/maintenance/medical, -/obj/random/cash, -/obj/random/cigarettes, -/obj/random/firstaid, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"zP" = ( -/obj/random/plushie, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Ac" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"AO" = ( -/obj/structure/railing, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"AU" = ( -/obj/structure/table/woodentable, -/obj/item/device/tape, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Bt" = ( -/obj/structure/closet/cabinet, -/obj/random/ammo_all, -/obj/random/cargopod, -/obj/random/cargopod, -/obj/random/cargopod, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Cx" = ( -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"CS" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Di" = ( -/obj/structure/table/wooden_reinforced, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"Dx" = ( -/obj/structure/table/wooden_reinforced, -/obj/random/medical, -/obj/random/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"DN" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Es" = ( -/obj/random/junk, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"ES" = ( -/obj/random/trash, -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"Gk" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Gr" = ( -/obj/item/frame/apc, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Gz" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"GC" = ( -/obj/random/trash, -/obj/random/trash, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"GN" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"GV" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/storage/fancy/candle_box, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/melee/umbrella/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Ha" = ( -/obj/structure/table/woodentable, -/obj/item/trash/candle, -/obj/item/weapon/paper{ - info = "This is a stupid tresure hunt task, that thing is not taking us anywhere. Go on and have fun finding a waste of time."; - name = "Wrinkled sheet of paper" - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Ik" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"Il" = ( -/obj/structure/closet/secure_closet/freezer/kitchen{ - locked = 0 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"IQ" = ( -/obj/structure/railing, -/obj/structure/closet/crate/bin, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"Jq" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"JT" = ( -/obj/random/junk, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"JV" = ( -/obj/structure/table/bench/sifwooden, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"Mk" = ( -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/obj/structure/closet/crate, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"Mo" = ( -/obj/structure/railing, -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"Mq" = ( -/obj/structure/closet/crate, -/obj/random/firstaid, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"MD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/simple_door/wood, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"MU" = ( -/turf/template_noop, -/area/survivalpod/superpose/OldHotel) -"Nu" = ( -/obj/random/soap, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"Pd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/sblucarpet, -/area/survivalpod/superpose/OldHotel) -"PO" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"Qv" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/obj/item/weapon/pen, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Qw" = ( -/obj/item/weapon/stool, -/obj/random/projectile/scrapped_shotgun, -/obj/random/cash, -/obj/machinery/light/small, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"QG" = ( -/obj/structure/bed/chair/oldsofa{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/survivalpod/superpose/OldHotel) -"RM" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"RQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"Se" = ( -/obj/structure/closet/cabinet, -/obj/item/device/binoculars/spyglass, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/maintenance/medical, -/obj/random/cash, -/obj/random/drinkbottle, -/obj/random/junk, -/obj/random/junk, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Sf" = ( -/obj/structure/bed/double/padded, -/obj/item/weapon/bedsheet/yellowdouble, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Sy" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"SG" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/survivalpod/superpose/OldHotel) -"SL" = ( -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard, -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) -"SZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"TU" = ( -/turf/simulated/floor/wood/broken, -/area/survivalpod/superpose/OldHotel) -"Ut" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/outdoors/dirt, -/area/survivalpod/superpose/OldHotel) -"Uw" = ( -/obj/structure/table/wooden_reinforced, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"UU" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/flame/lighter/zippo/royal, -/obj/item/weapon/lipstick/random, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"Vf" = ( -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower/medical, -/obj/random/soap, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"Vj" = ( -/turf/simulated/floor/carpet/oracarpet, -/area/survivalpod/superpose/OldHotel) -"Wy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"WD" = ( -/obj/structure/closet/secure_closet/freezer/fridge{ - locked = 0 - }, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/random/meat, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"WH" = ( -/obj/item/device/flashlight{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"YI" = ( -/obj/structure/coatrack, -/turf/simulated/floor/wood, -/area/survivalpod/superpose/OldHotel) -"YQ" = ( -/obj/item/weapon/material/shard, -/obj/structure/grille/broken/rustic, -/turf/simulated/floor/tiled/asteroid_steel, -/area/survivalpod/superpose/OldHotel) -"ZG" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/survivalpod/superpose/OldHotel) - -(1,1,1) = {" -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -"} -(2,1,1) = {" -gA -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -gA -"} -(3,1,1) = {" -gA -MU -kw -hQ -hQ -ZG -ZG -hQ -MU -MU -MU -MU -MU -MU -MU -bW -MU -MU -MU -MU -MU -MU -MU -MU -gA -"} -(4,1,1) = {" -gA -MU -hQ -hQ -Bt -YI -GV -hQ -hQ -MU -nG -hQ -nD -hQ -Cx -pn -nD -hQ -hQ -Cx -Cx -hQ -hQ -MU -gA -"} -(5,1,1) = {" -gA -mR -mR -go -TU -TU -WH -hQ -hQ -dL -YQ -hQ -ZG -hQ -Ik -YQ -ZG -ZG -hQ -dL -dL -hQ -hQ -MU -gA -"} -(6,1,1) = {" -gA -MU -hQ -zt -SZ -Qv -SZ -hQ -DN -sV -tV -Mq -nD -DN -iU -Gk -ab -hQ -Mk -DN -vA -Gk -nD -MU -gA -"} -(7,1,1) = {" -gA -MU -nG -vM -qg -rK -Qw -hQ -TU -ES -Vj -SZ -hQ -RM -ai -ja -qg -hQ -PO -Pd -hp -qg -ZG -MU -gA -"} -(8,1,1) = {" -gA -MU -MU -dL -qY -UU -Gr -ZG -RM -dc -cZ -SZ -hQ -TU -SG -yM -Wy -ZG -TU -kI -Pd -qg -hQ -MU -gA -"} -(9,1,1) = {" -gA -MU -bW -wK -JT -AU -qg -nD -rK -tz -uU -qg -hQ -rK -Sf -zE -SZ -hQ -qg -Se -ly -Ha -hQ -MU -gA -"} -(10,1,1) = {" -gA -MU -ZG -hQ -zP -TU -qg -hQ -hQ -hQ -hQ -tn -hQ -hQ -ZG -hQ -tn -hQ -tn -hQ -nD -hQ -hQ -MU -gA -"} -(11,1,1) = {" -gA -MU -nD -hQ -qg -qg -SZ -qg -SZ -JT -tn -qg -hc -SZ -qg -SZ -RQ -SZ -SZ -SZ -CS -dL -MU -MU -gA -"} -(12,1,1) = {" -gA -MU -MU -dL -qg -da -op -lZ -kh -SZ -tn -SZ -DN -dn -kW -Gk -bb -DN -kW -dn -Gk -dL -MU -MU -gA -"} -(13,1,1) = {" -gA -MU -nG -YQ -JT -jO -vR -tE -kh -qg -hQ -ZG -hQ -nD -ZG -hQ -hQ -hQ -hQ -hQ -hQ -ZG -nD -MU -gA -"} -(14,1,1) = {" -gA -MU -MU -dL -qg -vh -QG -QG -if -SZ -go -bQ -rb -lj -Ac -Uw -WD -wV -Dx -Di -gM -Il -IQ -MU -gA -"} -(15,1,1) = {" -gA -MU -hQ -hQ -aa -TU -hc -SZ -qg -TU -go -bQ -Cx -Jq -Cx -Jq -Sy -Jq -mR -Sy -Cx -Jq -Cx -MU -gA -"} -(16,1,1) = {" -gA -MU -ZG -hQ -ZG -hQ -MD -hQ -hQ -hQ -cA -Sy -mR -Es -mR -Cx -wm -Cx -mR -zs -GC -Cx -AO -MU -gA -"} -(17,1,1) = {" -gA -MU -hQ -hQ -aJ -dz -Sy -Vf -nD -dr -Jq -Jq -Es -Cx -yj -Cx -Cx -Cx -Es -Cx -yj -Cx -AO -MU -gA -"} -(18,1,1) = {" -gA -MU -MU -hQ -sd -Sy -Nu -Gz -hQ -wX -Jq -bQ -Cx -Cx -MU -JV -eK -JV -MU -Cx -MU -MU -MU -MU -gA -"} -(19,1,1) = {" -gA -MU -MU -ZG -hQ -ZG -SL -hQ -hQ -ZG -hQ -Ut -Jq -Cx -MU -MU -Cx -MU -MU -MU -MU -MU -Mo -MU -gA -"} -(20,1,1) = {" -gA -MU -MU -MU -MU -MU -bW -MU -MU -MU -Cx -Cx -Cx -MU -Cx -MU -Cx -MU -MU -MU -MU -MU -MU -MU -gA -"} -(21,1,1) = {" -gA -MU -MU -MU -MU -MU -MU -MU -MU -Cx -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -GN -MU -gA -"} -(22,1,1) = {" -gA -MU -GN -MU -MU -MU -MU -MU -MU -MU -MU -MU -Cx -Cx -MU -MU -Cx -MU -MU -MU -MU -MU -MU -MU -gA -"} -(23,1,1) = {" -gA -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -gA -"} -(24,1,1) = {" -gA -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -GN -MU -MU -MU -MU -MU -MU -MU -MU -MU -MU -gA -"} -(25,1,1) = {" -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/cell/hyper, +/obj/random/coin, +/obj/random/cash/huge, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"ab" = ( +/obj/structure/closet/crate, +/obj/random/cash, +/obj/random/cigarettes, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"ai" = ( +/obj/random/trash, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"aJ" = ( +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/structure/table/standard, +/obj/item/weapon/storage/firstaid, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"bb" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/device/multitool, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"bQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"bW" = ( +/obj/item/weapon/material/shard, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"cA" = ( +/obj/structure/sink/kitchen, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"cZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"da" = ( +/obj/structure/bed/chair/oldsofa/right, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"dc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"dn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/everburn, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"dr" = ( +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"dz" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + dir = 4; + pixel_x = -28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"dL" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille/rustic, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"eK" = ( +/obj/structure/grille, +/obj/structure/bonfire/sifwood, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"go" = ( +/obj/structure/simple_door/iron, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"gA" = ( +/turf/template_noop, +/area/template_noop) +"gM" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"hc" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"hp" = ( +/obj/random/junk, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"hQ" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"if" = ( +/obj/structure/bed/chair/oldsofa/left{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"iU" = ( +/obj/structure/table/woodentable, +/obj/item/trash/tray, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"ja" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"jO" = ( +/obj/structure/bed/chair/oldsofa, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"kh" = ( +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"kw" = ( +/obj/structure/lightpost, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"kI" = ( +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"kW" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lj" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"ly" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/piratedouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"lZ" = ( +/obj/structure/table/woodentable, +/obj/item/trash/tray, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"mR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"nD" = ( +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) +"nG" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"op" = ( +/obj/structure/table/woodentable, +/obj/random/cigarettes, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"pn" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 7 + }, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"qg" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"qY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"rb" = ( +/obj/item/weapon/module/power_control, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"rK" = ( +/obj/structure/table/woodentable, +/obj/item/trash/candle, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"sd" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"sV" = ( +/obj/structure/table/woodentable, +/obj/random/contraband, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"tn" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"tz" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/rddouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"tE" = ( +/obj/structure/table/woodentable, +/obj/random/coin, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"tV" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/item/weapon/material/shard, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"uU" = ( +/obj/structure/closet/cabinet, +/obj/random/maintenance/medical, +/obj/random/carp_plushie, +/obj/random/cigarettes, +/obj/random/drinkbottle, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"vh" = ( +/obj/structure/bed/chair/oldsofa/corner, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"vA" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/telecube/randomized{ + name = "Odd artifact" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"vM" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_y = -6 + }, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/obj/structure/grille/broken, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"vR" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"wm" = ( +/obj/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"wK" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"wV" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"wX" = ( +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"yj" = ( +/obj/random/mob/sif/peaceful, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"yM" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"zs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"zt" = ( +/obj/structure/noticeboard, +/turf/simulated/wall/wood, +/area/survivalpod/superpose/OldHotel) +"zE" = ( +/obj/structure/closet/cabinet, +/obj/random/maintenance/medical, +/obj/random/cash, +/obj/random/cigarettes, +/obj/random/firstaid, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"zP" = ( +/obj/random/plushie, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Ac" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"AO" = ( +/obj/structure/railing, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"AU" = ( +/obj/structure/table/woodentable, +/obj/item/device/tape, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Bt" = ( +/obj/structure/closet/cabinet, +/obj/random/ammo_all, +/obj/random/cargopod, +/obj/random/cargopod, +/obj/random/cargopod, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Cx" = ( +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"CS" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Di" = ( +/obj/structure/table/wooden_reinforced, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"Dx" = ( +/obj/structure/table/wooden_reinforced, +/obj/random/medical, +/obj/random/medical, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"DN" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Es" = ( +/obj/random/junk, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"ES" = ( +/obj/random/trash, +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"Gk" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Gr" = ( +/obj/item/frame/apc, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Gz" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower/medical, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"GC" = ( +/obj/random/trash, +/obj/random/trash, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"GN" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"GV" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/storage/fancy/candle_box, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Ha" = ( +/obj/structure/table/woodentable, +/obj/item/trash/candle, +/obj/item/weapon/paper{ + info = "This is a stupid tresure hunt task, that thing is not taking us anywhere. Go on and have fun finding a waste of time."; + name = "Wrinkled sheet of paper" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Ik" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"Il" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + locked = 0 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"IQ" = ( +/obj/structure/railing, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"Jq" = ( +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"JT" = ( +/obj/random/junk, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"JV" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"Mk" = ( +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/obj/structure/closet/crate, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"Mo" = ( +/obj/structure/railing, +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"Mq" = ( +/obj/structure/closet/crate, +/obj/random/firstaid, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"MD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"MU" = ( +/turf/template_noop, +/area/survivalpod/superpose/OldHotel) +"Nu" = ( +/obj/random/soap, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"Pd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/sblucarpet, +/area/survivalpod/superpose/OldHotel) +"PO" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"Qv" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Qw" = ( +/obj/item/weapon/stool, +/obj/random/projectile/scrapped_shotgun, +/obj/random/cash, +/obj/machinery/light/small, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"QG" = ( +/obj/structure/bed/chair/oldsofa{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/survivalpod/superpose/OldHotel) +"RM" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"RQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"Se" = ( +/obj/structure/closet/cabinet, +/obj/item/device/binoculars/spyglass, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/maintenance/medical, +/obj/random/cash, +/obj/random/drinkbottle, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Sf" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/yellowdouble, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Sy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"SG" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/OldHotel) +"SL" = ( +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard, +/obj/item/weapon/material/shard{ + pixel_x = 9 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) +"SZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"TU" = ( +/turf/simulated/floor/wood/broken, +/area/survivalpod/superpose/OldHotel) +"Ut" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/outdoors/dirt, +/area/survivalpod/superpose/OldHotel) +"Uw" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"UU" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/lighter/zippo/royal, +/obj/item/weapon/lipstick/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"Vf" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower/medical, +/obj/random/soap, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"Vj" = ( +/turf/simulated/floor/carpet/oracarpet, +/area/survivalpod/superpose/OldHotel) +"Wy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"WD" = ( +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"WH" = ( +/obj/item/device/flashlight{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"YI" = ( +/obj/structure/coatrack, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/OldHotel) +"YQ" = ( +/obj/item/weapon/material/shard, +/obj/structure/grille/broken/rustic, +/turf/simulated/floor/tiled/asteroid_steel, +/area/survivalpod/superpose/OldHotel) +"ZG" = ( +/obj/structure/girder, +/turf/simulated/floor, +/area/survivalpod/superpose/OldHotel) + +(1,1,1) = {" +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +"} +(2,1,1) = {" +gA +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +gA +"} +(3,1,1) = {" +gA +MU +kw +hQ +hQ +ZG +ZG +hQ +MU +MU +MU +MU +MU +MU +MU +bW +MU +MU +MU +MU +MU +MU +MU +MU +gA +"} +(4,1,1) = {" +gA +MU +hQ +hQ +Bt +YI +GV +hQ +hQ +MU +nG +hQ +nD +hQ +Cx +pn +nD +hQ +hQ +Cx +Cx +hQ +hQ +MU +gA +"} +(5,1,1) = {" +gA +mR +mR +go +TU +TU +WH +hQ +hQ +dL +YQ +hQ +ZG +hQ +Ik +YQ +ZG +ZG +hQ +dL +dL +hQ +hQ +MU +gA +"} +(6,1,1) = {" +gA +MU +hQ +zt +SZ +Qv +SZ +hQ +DN +sV +tV +Mq +nD +DN +iU +Gk +ab +hQ +Mk +DN +vA +Gk +nD +MU +gA +"} +(7,1,1) = {" +gA +MU +nG +vM +qg +rK +Qw +hQ +TU +ES +Vj +SZ +hQ +RM +ai +ja +qg +hQ +PO +Pd +hp +qg +ZG +MU +gA +"} +(8,1,1) = {" +gA +MU +MU +dL +qY +UU +Gr +ZG +RM +dc +cZ +SZ +hQ +TU +SG +yM +Wy +ZG +TU +kI +Pd +qg +hQ +MU +gA +"} +(9,1,1) = {" +gA +MU +bW +wK +JT +AU +qg +nD +rK +tz +uU +qg +hQ +rK +Sf +zE +SZ +hQ +qg +Se +ly +Ha +hQ +MU +gA +"} +(10,1,1) = {" +gA +MU +ZG +hQ +zP +TU +qg +hQ +hQ +hQ +hQ +tn +hQ +hQ +ZG +hQ +tn +hQ +tn +hQ +nD +hQ +hQ +MU +gA +"} +(11,1,1) = {" +gA +MU +nD +hQ +qg +qg +SZ +qg +SZ +JT +tn +qg +hc +SZ +qg +SZ +RQ +SZ +SZ +SZ +CS +dL +MU +MU +gA +"} +(12,1,1) = {" +gA +MU +MU +dL +qg +da +op +lZ +kh +SZ +tn +SZ +DN +dn +kW +Gk +bb +DN +kW +dn +Gk +dL +MU +MU +gA +"} +(13,1,1) = {" +gA +MU +nG +YQ +JT +jO +vR +tE +kh +qg +hQ +ZG +hQ +nD +ZG +hQ +hQ +hQ +hQ +hQ +hQ +ZG +nD +MU +gA +"} +(14,1,1) = {" +gA +MU +MU +dL +qg +vh +QG +QG +if +SZ +go +bQ +rb +lj +Ac +Uw +WD +wV +Dx +Di +gM +Il +IQ +MU +gA +"} +(15,1,1) = {" +gA +MU +hQ +hQ +aa +TU +hc +SZ +qg +TU +go +bQ +Cx +Jq +Cx +Jq +Sy +Jq +mR +Sy +Cx +Jq +Cx +MU +gA +"} +(16,1,1) = {" +gA +MU +ZG +hQ +ZG +hQ +MD +hQ +hQ +hQ +cA +Sy +mR +Es +mR +Cx +wm +Cx +mR +zs +GC +Cx +AO +MU +gA +"} +(17,1,1) = {" +gA +MU +hQ +hQ +aJ +dz +Sy +Vf +nD +dr +Jq +Jq +Es +Cx +yj +Cx +Cx +Cx +Es +Cx +yj +Cx +AO +MU +gA +"} +(18,1,1) = {" +gA +MU +MU +hQ +sd +Sy +Nu +Gz +hQ +wX +Jq +bQ +Cx +Cx +MU +JV +eK +JV +MU +Cx +MU +MU +MU +MU +gA +"} +(19,1,1) = {" +gA +MU +MU +ZG +hQ +ZG +SL +hQ +hQ +ZG +hQ +Ut +Jq +Cx +MU +MU +Cx +MU +MU +MU +MU +MU +Mo +MU +gA +"} +(20,1,1) = {" +gA +MU +MU +MU +MU +MU +bW +MU +MU +MU +Cx +Cx +Cx +MU +Cx +MU +Cx +MU +MU +MU +MU +MU +MU +MU +gA +"} +(21,1,1) = {" +gA +MU +MU +MU +MU +MU +MU +MU +MU +Cx +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +GN +MU +gA +"} +(22,1,1) = {" +gA +MU +GN +MU +MU +MU +MU +MU +MU +MU +MU +MU +Cx +Cx +MU +MU +Cx +MU +MU +MU +MU +MU +MU +MU +gA +"} +(23,1,1) = {" +gA +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +gA +"} +(24,1,1) = {" +gA +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +GN +MU +MU +MU +MU +MU +MU +MU +MU +MU +MU +gA +"} +(25,1,1) = {" +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +gA +"} diff --git a/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm b/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm index 6f1cbe51ad..beb619ec3a 100644 --- a/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm +++ b/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm @@ -1,257 +1,257 @@ -"ae" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod,/obj/machinery/shower{pixel_y = 20},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) -"ap" = (/obj/structure/sign/science{pixel_y = -32},/turf/template_noop,/area/template_noop) -"bc" = (/obj/structure/sign/science{pixel_y = 32},/turf/template_noop,/area/template_noop) -"be" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 8},/obj/structure/shuttle/engine/heater{dir = 4},/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) -"bm" = (/turf/template_noop,/area/survivalpod/superpose/ScienceShip) -"bP" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"ch" = (/obj/machinery/door/airlock/maintenance/common,/obj/item/tape/engineering,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"cm" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) -"cu" = (/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"cw" = (/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"da" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "estrella"; name = "interior access button"; pixel_y = 26},/obj/machinery/door/firedoor/border_only,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"df" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/item/device/defib_kit/loaded,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"dh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/obj/structure/table/bench/standard,/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"dp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"dB" = (/obj/structure/closet/secure_closet/engineering_electrical{req_access = null},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"dS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"eu" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/ScienceShip) -"ez" = (/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"fe" = (/obj/structure/shuttle/engine/router,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) -"fg" = (/obj/screen/alert/highpressure,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) -"fs" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"fD" = (/obj/machinery/door/window/survival_pod{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"ge" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"gf" = (/obj/structure/table/rack/shelf/steel,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"hb" = (/obj/machinery/r_n_d/protolathe,/obj/screen/alert/highpressure,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"hB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "estrella_pump"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"hQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"hR" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"iv" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"iQ" = (/obj/structure/table/wooden_reinforced,/obj/structure/flora/pottedplant/smallcactus{pixel_y = 13},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"je" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; use_power = 1},/obj/structure/cryofeed,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"ju" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"kl" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) -"kw" = (/obj/structure/table,/obj/machinery/light{layer = 3},/obj/item/weapon/gun/projectile/revolver/toy/crossbow,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"kV" = (/obj/structure/table/rack/shelf/steel,/obj/fiftyspawner/rods,/obj/fiftyspawner/rods,/obj/item/stack/material/plasteel{amount = 30},/obj/item/stack/material/plasteel{amount = 30},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"ll" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1380; id_tag = "estrella_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "estrella"; pixel_y = 26; tag_airpump = "estrella_pump"; tag_chamber_sensor = "estrella_sensor"; tag_exterior_door = "estrella_outer"; tag_interior_door = "estrella_inner"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"lu" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 9; pixel_y = 8},/obj/machinery/light,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"lB" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/structure/sink{dir = 4; pixel_x = 11},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"lH" = (/obj/machinery/door/airlock/maintenance/command{req_one_access = null},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"lK" = (/obj/item/weapon/gun/projectile/colt,/obj/item/weapon/gun/projectile/garand,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/structure/closet/secure_closet/guncabinet{req_one_access = null},/obj/item/ammo_magazine/ammo_box/b12g/beanbag,/obj/item/ammo_magazine/ammo_box/b12g/beanbag,/obj/item/ammo_magazine/ammo_box/b12g/flechette,/obj/item/ammo_magazine/ammo_box/b12g/flechette,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"lM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"lW" = (/obj/structure/shuttle/window,/obj/machinery/door/firedoor/glass,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"mg" = (/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"nb" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"nq" = (/obj/structure/fuel_port{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"nM" = (/obj/structure/closet/walllocker_double/kitchen/north{dir = 8; name = "Ration Cabinet"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"nQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"nV" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"os" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"oJ" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/bed/chair/wood{dir = 4},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"oS" = (/obj/structure/table/rack/shelf/steel,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"oX" = (/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) -"pk" = (/obj/machinery/atmospherics/binary/pump,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"pm" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"pG" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"pL" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = -21; wires = 7},/obj/structure/salvageable/console_os{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"qb" = (/obj/machinery/door/window/northright{name = "Server Room"; req_access = null},/obj/machinery/door/window/southleft{name = "Server Room"; req_access = null},/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"qe" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/phoron{amount = 25},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"qh" = (/obj/structure/sign/science{pixel_x = 32},/turf/template_noop,/area/template_noop) -"ql" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"ri" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"rs" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"rP" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"se" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/shuttle/window,/obj/machinery/door/firedoor/glass,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"sv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"sz" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/maintenance/engi{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"sH" = (/turf/simulated/shuttle/wall/no_join{base_state = "orange"; icon = 'icons/turf/shuttle_orange.dmi'; icon_state = "orange"},/area/survivalpod/superpose/ScienceShip) -"sI" = (/obj/structure/salvageable/console_os{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"sJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"sK" = (/obj/machinery/door/airlock/maintenance/engi{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"sT" = (/obj/machinery/door/airlock/maintenance/rnd{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"sY" = (/obj/structure/table/rack/shelf/steel,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/storage/excavation,/obj/item/stack/flag/yellow,/obj/item/device/measuring_tape,/obj/item/weapon/pickaxe/drill,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/item/weapon/material/knife/machete/hatchet,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"tb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"te" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"tg" = (/obj/machinery/light/small,/obj/structure/prop/fake_ai{name = "C0n71nu17y"},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"tu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/fiftyspawner/rods,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"tN" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"tR" = (/obj/machinery/door/firedoor/glass,/obj/structure/table/reinforced,/obj/machinery/door/window/northright{dir = 4; name = "Medical booth"},/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"um" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/toy/plushie/kitten,/obj/item/toy/plushie/grey_cat,/obj/item/toy/plushie/orange_cat,/obj/item/toy/plushie/borgplushie/scrubpuppy,/obj/item/toy/plushie/black_fox,/obj/item/toy/plushie,/obj/item/toy/plushie/corgi,/obj/item/toy/plushie/crimson_fox,/obj/item/clothing/shoes/sandal,/obj/item/clothing/shoes/sandal,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32},/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/carpet/turcarpet,/area/survivalpod/superpose/ScienceShip) -"uu" = (/obj/machinery/door/airlock/multi_tile/metal/mait,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"uX" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"vl" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/gold,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/silver,/obj/item/weapon/ore/uranium,/obj/item/weapon/bluespace_crystal,/obj/item/clothing/head/sombrero,/obj/item/clothing/head/sombrero,/obj/item/clothing/suit/poncho,/obj/item/clothing/accessory/poncho/thermal/red,/obj/item/clothing/accessory/poncho/thermal/security,/obj/item/clothing/accessory/poncho/thermal/green,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/toy/bosunwhistle/fluff/strix,/obj/item/weapon/blobcore_chunk,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"wp" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"xk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"xw" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"xy" = (/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"xF" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/closet/jcloset,/obj/item/weapon/mop,/obj/structure/mopbucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"yb" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25},/obj/structure/table/reinforced,/obj/item/weapon/storage/quickdraw/syringe_case,/obj/item/weapon/storage/quickdraw/syringe_case,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"yn" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"yt" = (/obj/machinery/smartfridge/survival_pod{name = "food storage"},/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/tocino,/obj/item/weapon/reagent_containers/food/snacks/tocino,/obj/item/weapon/reagent_containers/food/snacks/tocino,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"yy" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"yB" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"yJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/mech_recharger,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"zp" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"zV" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/uranium,/obj/item/stack/material/phoron{amount = 5; pixel_x = -1; pixel_y = -3},/obj/item/stack/material/silver{amount = 5; pixel_x = 2; pixel_y = 4},/obj/item/stack/material/copper{amount = 25},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Az" = (/obj/machinery/door/airlock/maintenance/medical{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"AN" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"AO" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"AP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 6},/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) -"AQ" = (/obj/structure/bed/double/padded,/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/obj/item/weapon/bedsheet/rainbowdouble,/turf/simulated/floor/carpet/turcarpet,/area/survivalpod/superpose/ScienceShip) -"Bn" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Bz" = (/obj/structure/toilet{dir = 8; pixel_x = 9},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) -"BR" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"BS" = (/obj/effect/catwalk_plated/white,/obj/machinery/light/small{dir = 1},/turf/template_noop,/area/template_noop) -"Cm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Cn" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Cq" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Cz" = (/obj/screen/alert/highpressure,/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"CW" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"CX" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Dp" = (/obj/screen/alert/highpressure,/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) -"Ds" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"DK" = (/obj/structure/closet/crate,/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/machinery/light{layer = 3},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"DM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/obj/structure/reagent_dispensers/fueltank/high,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"DV" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/structure/bed/chair/office/dark,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"DW" = (/obj/effect/catwalk_plated/dark,/obj/machinery/shipsensors{dir = 8},/obj/structure/sign/science{pixel_x = 32},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) -"Eg" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Eq" = (/turf/template_noop,/area/template_noop) -"Ew" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"EH" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -34},/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"EN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"ER" = (/obj/structure/bed/chair/bay/comfy/red{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"Fb" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/beaker,/obj/machinery/reagentgrinder,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Fe" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/coin/diamond,/obj/machinery/light{layer = 3},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"Ft" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "estrella"; name = "exterior access button"; pixel_y = 26},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"FR" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "estrella_side_hatch"; locked = 1; req_access = null; req_one_access = null},/obj/machinery/button/remote/airlock{dir = 8; id = "estrella_side_hatch"; name = "Side Hatch Control"; pixel_x = -27; specialfunctions = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"FV" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/engineering,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/obj/item/weapon/tank/phoron,/obj/item/weapon/tank/phoron,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/multitool,/obj/item/device/geiger,/obj/item/clothing/glasses/goggles,/obj/item/clothing/glasses/goggles,/obj/item/device/t_scanner,/obj/item/clothing/glasses/welding,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Gi" = (/obj/effect/catwalk_plated/white,/turf/template_noop,/area/survivalpod/superpose/ScienceShip) -"Gl" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1380; id_tag = "estrella_pump"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"GM" = (/obj/structure/table/bench/wooden,/obj/machinery/light{dir = 4},/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/item/device/flash,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"GP" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"GU" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"HX" = (/obj/machinery/chem_master{pixel_x = -7},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Ij" = (/obj/machinery/power/smes/buildable/hybrid,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable/green,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"In" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Io" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer"},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Ip" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Iz" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/blue,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"IB" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) -"IE" = (/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_x = -24; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"II" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"IM" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"IQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Jd" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Jm" = (/obj/machinery/door/airlock/multi_tile/metal/mait{dir = 1; frequency = 1380; icon_state = "door_locked"; id_tag = "estrella_outer"; locked = 1; name = "External Access"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"JG" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -30},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"JJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_y = -32},/obj/machinery/alarm/alarms_hidden{pixel_y = 22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Kh" = (/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"Kq" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) -"Kx" = (/obj/screen/alert/highpressure,/turf/template_noop,/area/template_noop) -"KD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/obj/structure/cryofeed{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) -"Lj" = (/obj/structure/closet/walllocker_double/kitchen/north{dir = 8; name = "Ration Cabinet"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Lx" = (/obj/structure/extinguisher_cabinet{pixel_x = 28},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"LC" = (/obj/machinery/door/firedoor/glass,/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"LP" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 5},/obj/structure/closet/secure_closet/guncabinet{req_one_access = null},/obj/item/clothing/head/helmet/combat/USDF,/obj/item/clothing/head/helmet/combat/USDF,/obj/item/clothing/suit/armor/combat/USDF,/obj/item/clothing/suit/armor/combat/USDF,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"Mc" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/fireaxecabinet{pixel_x = 32},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Mg" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"MR" = (/obj/machinery/shuttle_sensor,/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) -"Ng" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/alarms_hidden{pixel_y = 22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Nm" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/shield_generator/charged{field_radius = 8; initial_shield_modes = 2153; target_radius = 8},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"NV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Oh" = (/obj/effect/catwalk_plated/white,/obj/machinery/light/small{dir = 8},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) -"Oi" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Ou" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"OG" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Pk" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) -"Pv" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer_1"; power_setting = 20; set_temperature = 73; use_power = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"Pz" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/gear_dispenser/suit/ert{req_one_access = null},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"PB" = (/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) -"PS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Qp" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"QA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/machinery/suspension_gen,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"QC" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/fountain,/obj/item/weapon/pen/chameleon,/obj/item/device/gps/advanced/science,/obj/machinery/button/remote/blast_door{id = "estrella_blast"; name = "remote blast shielding control"; pixel_x = -1; pixel_y = -26},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"QH" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"QR" = (/obj/machinery/meter,/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/obj/machinery/alarm/alarms_hidden{dir = 4; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"QT" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Ro" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Rp" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) -"RI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/recharge_station,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"RU" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32},/obj/item/weapon/handcuffs/legcuffs/fuzzy,/obj/item/weapon/handcuffs/fuzzy,/obj/item/clothing/mask/muzzle/ballgag,/obj/item/clothing/suit/iasexy,/obj/item/clothing/under/sexybunny_white/sexybunny_black,/obj/item/clothing/under/dress/maid/sexy,/obj/item/clothing/head/collectable/rabbitears,/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) -"RV" = (/obj/structure/table/steel_reinforced,/obj/machinery/power/apc/alarms_hidden{dir = 4; pixel_x = 24},/obj/structure/cable/green,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"St" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"SC" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"SE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"SU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) -"Te" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Tp" = (/obj/structure/bed/double/padded,/obj/structure/curtain/bed,/obj/item/weapon/bedsheet/hosdouble,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_y = 32},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"Tr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/maintenance/rnd{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) -"TB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"TF" = (/obj/screen/alert/highpressure,/obj/machinery/computer/rdconsole/core{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Ug" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"Ul" = (/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) -"Ur" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Uz" = (/obj/structure/salvageable/server,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) -"UG" = (/obj/structure/table/reinforced,/obj/item/device/gps/advanced/science,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"UN" = (/obj/structure/table/reinforced,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"UP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/reinforced,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"UZ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "estrella_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "estrella_sensor"; pixel_y = -28},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"VB" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"VE" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"VH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/computer/crew,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) -"VJ" = (/obj/structure/table/steel_reinforced,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"VS" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/binary/passive_gate{dir = 1; regulate_mode = 0; unlocked = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"VT" = (/obj/machinery/door/airlock/multi_tile/metal/mait{dir = 1; frequency = 1380; icon_state = "door_locked"; id_tag = "estrella_inner"; locked = 1; name = "Internal Access"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/machinery/door/firedoor/border_only,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"VY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Wc" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/full{pixel_y = 5},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = -21; wires = 7},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"Wj" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"Wu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) -"WL" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Xh" = (/obj/structure/toilet{pixel_y = 12},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/survival_pod{dir = 2; req_one_access = null},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) -"Xz" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "estrella_back_hatch"; locked = 1; req_one_access = null},/obj/machinery/button/remote/airlock{desiredstate = 1; id = "estrella_back_hatch"; name = "Rear Hatch Control"; pixel_y = 27; req_access = null; specialfunctions = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) -"XQ" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/weapon/implanter/sizecontrol,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/phoron,/obj/item/weapon/ore/phoron,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/gold,/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/marble,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/rutile,/obj/item/toy/bosunwhistle/fluff/strix,/obj/item/toy/character/wizard,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,/obj/item/weapon/fluff/squeezetoy,/obj/item/weapon/fluff/zekewatch,/obj/item/weapon/fluff/fidgetspinner/red,/obj/item/weapon/storage/pill_bottle/dice_nerd,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) -"Yi" = (/obj/structure/closet/secure_closet/engineering_welding{req_access = null},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"YH" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"YN" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) -"YX" = (/obj/machinery/autolathe{hacked = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Za" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/scanning_module/adv{pixel_x = 5; pixel_y = 6},/obj/item/weapon/stock_parts/scanning_module/adv{pixel_x = 5; pixel_y = 6},/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/matter_bin/adv,/obj/item/weapon/stock_parts/matter_bin/adv,/obj/item/weapon/stock_parts/manipulator/hyper,/obj/item/weapon/stock_parts/manipulator/hyper,/obj/item/weapon/stock_parts/capacitor/adv,/obj/item/weapon/stock_parts/capacitor/adv,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) -"Zc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) -"Zd" = (/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) -"Zg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/alarms_hidden{dir = 1; pixel_y = -22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) -"ZJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) - -(1,1,1) = {" -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqapoXoXoXoXEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqoXoXsHUloXoXEqEqEqEq -EqEqEqEqEqEqEqEqEqapEqEqEqEqoXUldBYioSbebmbmEqEqEq -EqEqEqEqEqoXWjWjoXsHoXoXbPoXoXriuXOitbbecmbmEqEqEq -EqEqEqEqoXUlBRUzaeXhXQvlKhTpoXIMZcVBklfeoXEqEqEqEq -EqEqEqEqBnpLERxyfDeueueueuGMoXgeZcOigfbebmbmEqEqEq -EqEqEqEqoXUlsIsIoJQChQnQKhiQoXgeZcOikVbecmbmEqEqEq -EqEqEqEqEqoXoXoXoXoXUllHmgoXoXUlnqnVklfeoXEqEqEqEq -EqEqEqEqEqDWsHYNpmIooXEgIQjuNgsKpkpGqebebmbmEqEqEq -EqEqEqEqEqoXUldhrslBoXrPoXoXoXUlInsJtubecmbmEqEqEq -EqEqEqEqEqBnWcIpOGQTtRGPoXumAQoXuuwpUloXoXEqEqEqEq -EqEqoXoXWjoXUlHXOGybUlosfsxkyBoXQHxwytoXoXoXEqEqEq -EqKxBnUNYXzVoXdfOGDsAzCnoXANKhoXLjVYPzAPCXUlUlEqEq -EqfgDpivezDVoXGUEwFbUlGPLCFeKhoXIjynCmdaGlllFtGiEq -EqBnhbAOezIzUloXoXoXoXMcoXIBBzoXIIPSCmVTMgJdJmGiEq -EqBnCznbezNVsTIQJJIQIQLxoXoXoXoXyJOiVJUlhBUZMROhEq -EqBnTFezezQpUloXoXoXoXGPoXRUPkoXRIOiRVUloXoXUlGiEq -EqfgDpJGTeUPoXPvVEVHUlEgchWuRpoXNmteENsvRoWLXzGiEq -EqKxBnluUGZaoXQRqlTBTrCnoXPBcuoXnMzpOiOiSEUloXEqEq -EqKxfgoXWjoXUlseqblWUlUgLCkwZdoXQHxwFVSEUloXEqEqEq -EqEqKxKxEqoXoXtNdSCWoXGPoXKqBzoXuuwpUloXoXEqEqEqEq -EqEqEqEqEqoXUljetgKDoXrPoXoXoXUlYHsJDMbebmbmEqEqEq -EqEqEqEqEqEqoXoXoXoXoXSthRcwZgszOupGSUbecmbmEqEqEq -EqEqEqEqEqEqEqEqoXoXUlFRUloXoXUlVSZJklfeoXEqEqEqEq -EqEqEqEqEqEqEqEqEqEqBSGiUlUlxFyySCOisYbebmbmEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqqhsHCqOulMOiQAbecmbmEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqoXUrIEOiOiklfeoXEqEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqoXUlEHOiOidpbebmbmEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqoXUlDKlKLPbecmbmEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqoXoXsHUloXoXEqEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqbcoXoXoXoXEqEqEq -EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEq -"} +"ae" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod,/obj/machinery/shower{pixel_y = 20},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) +"ap" = (/obj/structure/sign/science{pixel_y = -32},/turf/template_noop,/area/template_noop) +"bc" = (/obj/structure/sign/science{pixel_y = 32},/turf/template_noop,/area/template_noop) +"be" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 8},/obj/structure/shuttle/engine/heater{dir = 4},/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) +"bm" = (/turf/template_noop,/area/survivalpod/superpose/ScienceShip) +"bP" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"ch" = (/obj/machinery/door/airlock/maintenance/common,/obj/item/tape/engineering,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"cm" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4; pixel_x = -3},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) +"cu" = (/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"cw" = (/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"da" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "estrella"; name = "interior access button"; pixel_y = 26},/obj/machinery/door/firedoor/border_only,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"df" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/item/device/defib_kit/loaded,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"dh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/obj/structure/table/bench/standard,/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"dp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"dB" = (/obj/structure/closet/secure_closet/engineering_electrical{req_access = null},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"dS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"eu" = (/turf/simulated/floor/carpet,/area/survivalpod/superpose/ScienceShip) +"ez" = (/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"fe" = (/obj/structure/shuttle/engine/router,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) +"fg" = (/obj/screen/alert/highpressure,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) +"fs" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"fD" = (/obj/machinery/door/window/survival_pod{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"ge" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"gf" = (/obj/structure/table/rack/shelf/steel,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"hb" = (/obj/machinery/r_n_d/protolathe,/obj/screen/alert/highpressure,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"hB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "estrella_pump"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"hQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"hR" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"iv" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"iQ" = (/obj/structure/table/wooden_reinforced,/obj/structure/flora/pottedplant/smallcactus{pixel_y = 13},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"je" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; use_power = 1},/obj/structure/cryofeed,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"ju" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"kl" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) +"kw" = (/obj/structure/table,/obj/machinery/light{layer = 3},/obj/item/weapon/gun/projectile/revolver/toy/crossbow,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"kV" = (/obj/structure/table/rack/shelf/steel,/obj/fiftyspawner/rods,/obj/fiftyspawner/rods,/obj/item/stack/material/plasteel{amount = 30},/obj/item/stack/material/plasteel{amount = 30},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"ll" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1380; id_tag = "estrella_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "estrella"; pixel_y = 26; tag_airpump = "estrella_pump"; tag_chamber_sensor = "estrella_sensor"; tag_exterior_door = "estrella_outer"; tag_interior_door = "estrella_inner"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"lu" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 9; pixel_y = 8},/obj/machinery/light,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"lB" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/structure/sink{dir = 4; pixel_x = 11},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"lH" = (/obj/machinery/door/airlock/maintenance/command{req_one_access = null},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"lK" = (/obj/item/weapon/gun/projectile/colt,/obj/item/weapon/gun/projectile/garand,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/structure/closet/secure_closet/guncabinet{req_one_access = null},/obj/item/ammo_magazine/ammo_box/b12g/beanbag,/obj/item/ammo_magazine/ammo_box/b12g/beanbag,/obj/item/ammo_magazine/ammo_box/b12g/flechette,/obj/item/ammo_magazine/ammo_box/b12g/flechette,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"lM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"lW" = (/obj/structure/shuttle/window,/obj/machinery/door/firedoor/glass,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"mg" = (/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"nb" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"nq" = (/obj/structure/fuel_port{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"nM" = (/obj/structure/closet/walllocker_double/kitchen/north{dir = 8; name = "Ration Cabinet"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"nQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"nV" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"os" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"oJ" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/bed/chair/wood{dir = 4},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"oS" = (/obj/structure/table/rack/shelf/steel,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"oX" = (/turf/simulated/shuttle/wall,/area/survivalpod/superpose/ScienceShip) +"pk" = (/obj/machinery/atmospherics/binary/pump,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"pm" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"pG" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"pL" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = -21; wires = 7},/obj/structure/salvageable/console_os{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"qb" = (/obj/machinery/door/window/northright{name = "Server Room"; req_access = null},/obj/machinery/door/window/southleft{name = "Server Room"; req_access = null},/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"qe" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/phoron{amount = 25},/obj/item/stack/material/phoron{amount = 25},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"qh" = (/obj/structure/sign/science{pixel_x = 32},/turf/template_noop,/area/template_noop) +"ql" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"ri" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"rs" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"rP" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"se" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/shuttle/window,/obj/machinery/door/firedoor/glass,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"sv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"sz" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/maintenance/engi{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"sH" = (/turf/simulated/shuttle/wall/no_join{base_state = "orange"; icon = 'icons/turf/shuttle_orange.dmi'; icon_state = "orange"},/area/survivalpod/superpose/ScienceShip) +"sI" = (/obj/structure/salvageable/console_os{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"sJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"sK" = (/obj/machinery/door/airlock/maintenance/engi{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"sT" = (/obj/machinery/door/airlock/maintenance/rnd{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"sY" = (/obj/structure/table/rack/shelf/steel,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/storage/excavation,/obj/item/stack/flag/yellow,/obj/item/device/measuring_tape,/obj/item/weapon/pickaxe/drill,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/item/weapon/material/knife/machete/hatchet,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"tb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"te" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"tg" = (/obj/machinery/light/small,/obj/structure/prop/fake_ai{name = "C0n71nu17y"},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"tu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/fiftyspawner/rods,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"tN" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"tR" = (/obj/machinery/door/firedoor/glass,/obj/structure/table/reinforced,/obj/machinery/door/window/northright{dir = 4; name = "Medical booth"},/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"um" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/toy/plushie/kitten,/obj/item/toy/plushie/grey_cat,/obj/item/toy/plushie/orange_cat,/obj/item/toy/plushie/borgplushie/scrubpuppy,/obj/item/toy/plushie/black_fox,/obj/item/toy/plushie,/obj/item/toy/plushie/corgi,/obj/item/toy/plushie/crimson_fox,/obj/item/clothing/shoes/sandal,/obj/item/clothing/shoes/sandal,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32},/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/carpet/turcarpet,/area/survivalpod/superpose/ScienceShip) +"uu" = (/obj/machinery/door/airlock/multi_tile/metal/mait,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"uX" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"vl" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/gold,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/silver,/obj/item/weapon/ore/uranium,/obj/item/weapon/bluespace_crystal,/obj/item/clothing/head/sombrero,/obj/item/clothing/head/sombrero,/obj/item/clothing/suit/poncho,/obj/item/clothing/accessory/poncho/thermal/red,/obj/item/clothing/accessory/poncho/thermal/security,/obj/item/clothing/accessory/poncho/thermal/green,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/clothing/shoes/footwraps,/obj/item/toy/bosunwhistle/fluff/strix,/obj/item/weapon/blobcore_chunk,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"wp" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"xk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"xw" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"xy" = (/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"xF" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/closet/jcloset,/obj/item/weapon/mop,/obj/structure/mopbucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"yb" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25},/obj/structure/table/reinforced,/obj/item/weapon/storage/quickdraw/syringe_case,/obj/item/weapon/storage/quickdraw/syringe_case,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"yn" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"yt" = (/obj/machinery/smartfridge/survival_pod{name = "food storage"},/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_hell,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/burrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito/filled,/obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/cheesenachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/cubannachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/nachos,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/pandenata,/obj/item/weapon/reagent_containers/food/snacks/tocino,/obj/item/weapon/reagent_containers/food/snacks/tocino,/obj/item/weapon/reagent_containers/food/snacks/tocino,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"yy" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"yB" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"yJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/mech_recharger,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"zp" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"zV" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/uranium,/obj/item/stack/material/phoron{amount = 5; pixel_x = -1; pixel_y = -3},/obj/item/stack/material/silver{amount = 5; pixel_x = 2; pixel_y = 4},/obj/item/stack/material/copper{amount = 25},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Az" = (/obj/machinery/door/airlock/maintenance/medical{req_one_access = null},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"AN" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"AO" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"AP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 6},/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) +"AQ" = (/obj/structure/bed/double/padded,/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/obj/item/weapon/bedsheet/rainbowdouble,/turf/simulated/floor/carpet/turcarpet,/area/survivalpod/superpose/ScienceShip) +"Bn" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Bz" = (/obj/structure/toilet{dir = 8; pixel_x = 9},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) +"BR" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"BS" = (/obj/effect/catwalk_plated/white,/obj/machinery/light/small{dir = 1},/turf/template_noop,/area/template_noop) +"Cm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Cn" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Cq" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Cz" = (/obj/screen/alert/highpressure,/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"CW" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"CX" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Dp" = (/obj/screen/alert/highpressure,/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) +"Ds" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"DK" = (/obj/structure/closet/crate,/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/item/stack/material/cardboard{amount = 50},/obj/fiftyspawner/blucarpet,/obj/fiftyspawner/oracarpet,/obj/fiftyspawner/purcarpet,/obj/fiftyspawner/sblucarpet,/obj/fiftyspawner/tealcarpet,/obj/fiftyspawner/turcarpet,/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood{amount = 50; color = "#824B28"},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/hard{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/wood/sif{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/marble{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/cloth{amount = 50},/obj/item/stack/material/algae{amount = 50},/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/sandstone,/obj/item/stack/material/lead{amount = 30},/obj/item/stack/material/plasteel{amount = 30; pixel_y = 5},/obj/item/stack/material/resin{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/item/stack/material/smolebricks{amount = 50},/obj/machinery/light{layer = 3},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"DM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/obj/structure/reagent_dispensers/fueltank/high,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"DV" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/structure/bed/chair/office/dark,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"DW" = (/obj/effect/catwalk_plated/dark,/obj/machinery/shipsensors{dir = 8},/obj/structure/sign/science{pixel_x = 32},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) +"Eg" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Eq" = (/turf/template_noop,/area/template_noop) +"Ew" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"EH" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -34},/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"EN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"ER" = (/obj/structure/bed/chair/bay/comfy/red{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"Fb" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/beaker,/obj/machinery/reagentgrinder,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Fe" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/coin/diamond,/obj/machinery/light{layer = 3},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"Ft" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "estrella"; name = "exterior access button"; pixel_y = 26},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"FR" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "estrella_side_hatch"; locked = 1; req_access = null; req_one_access = null},/obj/machinery/button/remote/airlock{dir = 8; id = "estrella_side_hatch"; name = "Side Hatch Control"; pixel_x = -27; specialfunctions = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"FV" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/engineering,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/obj/item/weapon/tank/phoron,/obj/item/weapon/tank/phoron,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/multitool,/obj/item/device/geiger,/obj/item/clothing/glasses/goggles,/obj/item/clothing/glasses/goggles,/obj/item/device/t_scanner,/obj/item/clothing/glasses/welding,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Gi" = (/obj/effect/catwalk_plated/white,/turf/template_noop,/area/survivalpod/superpose/ScienceShip) +"Gl" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1380; id_tag = "estrella_pump"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"GM" = (/obj/structure/table/bench/wooden,/obj/machinery/light{dir = 4},/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/obj/item/device/flash,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"GP" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"GU" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"HX" = (/obj/machinery/chem_master{pixel_x = -7},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Ij" = (/obj/machinery/power/smes/buildable/hybrid,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable/green,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"In" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Io" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer"},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Ip" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Iz" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/blue,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"IB" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) +"IE" = (/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_x = -24; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"II" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"IM" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/red,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"IQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Jd" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Jm" = (/obj/machinery/door/airlock/multi_tile/metal/mait{dir = 1; frequency = 1380; icon_state = "door_locked"; id_tag = "estrella_outer"; locked = 1; name = "External Access"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"JG" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -30},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"JJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/closet/walllocker/emerglocker{dir = 1; pixel_y = -32},/obj/machinery/alarm/alarms_hidden{pixel_y = 22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Kh" = (/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"Kq" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) +"Kx" = (/obj/screen/alert/highpressure,/turf/template_noop,/area/template_noop) +"KD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/obj/structure/cryofeed{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/survivalpod/superpose/ScienceShip) +"Lj" = (/obj/structure/closet/walllocker_double/kitchen/north{dir = 8; name = "Ration Cabinet"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Lx" = (/obj/structure/extinguisher_cabinet{pixel_x = 28},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"LC" = (/obj/machinery/door/firedoor/glass,/obj/structure/shuttle/window,/obj/structure/curtain/black{icon_state = "open"; layer = 2; name = "privacy curtain"; opacity = 0},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"LP" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 5},/obj/structure/closet/secure_closet/guncabinet{req_one_access = null},/obj/item/clothing/head/helmet/combat/USDF,/obj/item/clothing/head/helmet/combat/USDF,/obj/item/clothing/suit/armor/combat/USDF,/obj/item/clothing/suit/armor/combat/USDF,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"Mc" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/fireaxecabinet{pixel_x = 32},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Mg" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"MR" = (/obj/machinery/shuttle_sensor,/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) +"Ng" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/alarms_hidden{pixel_y = 22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Nm" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/shield_generator/charged{field_radius = 8; initial_shield_modes = 2153; target_radius = 8},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"NV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Oh" = (/obj/effect/catwalk_plated/white,/obj/machinery/light/small{dir = 8},/turf/template_noop,/area/survivalpod/superpose/ScienceShip) +"Oi" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Ou" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"OG" = (/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Pk" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) +"Pv" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer_1"; power_setting = 20; set_temperature = 73; use_power = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"Pz" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/gear_dispenser/suit/ert{req_one_access = null},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"PB" = (/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) +"PS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Qp" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"QA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/machinery/suspension_gen,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"QC" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/fountain,/obj/item/weapon/pen/chameleon,/obj/item/device/gps/advanced/science,/obj/machinery/button/remote/blast_door{id = "estrella_blast"; name = "remote blast shielding control"; pixel_x = -1; pixel_y = -26},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"QH" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"QR" = (/obj/machinery/meter,/obj/structure/closet/walllocker/emerglocker{pixel_x = -25; pixel_y = 32},/obj/machinery/alarm/alarms_hidden{dir = 4; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"QT" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Ro" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Rp" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) +"RI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/recharge_station,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"RU" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32},/obj/item/weapon/handcuffs/legcuffs/fuzzy,/obj/item/weapon/handcuffs/fuzzy,/obj/item/clothing/mask/muzzle/ballgag,/obj/item/clothing/suit/iasexy,/obj/item/clothing/under/sexybunny_white/sexybunny_black,/obj/item/clothing/under/dress/maid/sexy,/obj/item/clothing/head/collectable/rabbitears,/turf/simulated/floor/wood/broken,/area/survivalpod/superpose/ScienceShip) +"RV" = (/obj/structure/table/steel_reinforced,/obj/machinery/power/apc/alarms_hidden{dir = 4; pixel_x = 24},/obj/structure/cable/green,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"St" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"SC" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"SE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"SU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/floor/tiled/techfloor/grid,/area/survivalpod/superpose/ScienceShip) +"Te" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Tp" = (/obj/structure/bed/double/padded,/obj/structure/curtain/bed,/obj/item/weapon/bedsheet/hosdouble,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_y = 32},/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"Tr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/maintenance/rnd{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/steel_grid,/area/survivalpod/superpose/ScienceShip) +"TB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"TF" = (/obj/screen/alert/highpressure,/obj/machinery/computer/rdconsole/core{dir = 4},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Ug" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"Ul" = (/turf/simulated/shuttle/wall/hard_corner,/area/survivalpod/superpose/ScienceShip) +"Ur" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Uz" = (/obj/structure/salvageable/server,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/ScienceShip) +"UG" = (/obj/structure/table/reinforced,/obj/item/device/gps/advanced/science,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"UN" = (/obj/structure/table/reinforced,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"UP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/reinforced,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"UZ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "estrella_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "estrella_sensor"; pixel_y = -28},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"VB" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"VE" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"VH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/computer/crew,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/ScienceShip) +"VJ" = (/obj/structure/table/steel_reinforced,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"VS" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/binary/passive_gate{dir = 1; regulate_mode = 0; unlocked = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"VT" = (/obj/machinery/door/airlock/multi_tile/metal/mait{dir = 1; frequency = 1380; icon_state = "door_locked"; id_tag = "estrella_inner"; locked = 1; name = "Internal Access"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/machinery/door/firedoor/border_only,/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"VY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Wc" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/full{pixel_y = 5},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = -21; wires = 7},/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"Wj" = (/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/structure/shuttle/window,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{id = "estrella_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"Wu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) +"WL" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Xh" = (/obj/structure/toilet{pixel_y = 12},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/machinery/door/window/survival_pod{dir = 2; req_one_access = null},/turf/simulated/floor/tiled/freezer,/area/survivalpod/superpose/ScienceShip) +"Xz" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "estrella_back_hatch"; locked = 1; req_one_access = null},/obj/machinery/button/remote/airlock{desiredstate = 1; id = "estrella_back_hatch"; name = "Rear Hatch Control"; pixel_y = 27; req_access = null; specialfunctions = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular/open{dir = 4; id = "estrella_blast"; layer = 2; name = "window blast shield"; open_layer = 2},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/ScienceShip) +"XQ" = (/obj/structure/closet/cabinet{pixel_y = 20},/obj/item/weapon/implanter/sizecontrol,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/phoron,/obj/item/weapon/ore/phoron,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/gold,/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/marble,/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/rutile,/obj/item/toy/bosunwhistle/fluff/strix,/obj/item/toy/character/wizard,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,/obj/item/weapon/fluff/squeezetoy,/obj/item/weapon/fluff/zekewatch,/obj/item/weapon/fluff/fidgetspinner/red,/obj/item/weapon/storage/pill_bottle/dice_nerd,/turf/simulated/floor/wood,/area/survivalpod/superpose/ScienceShip) +"Yi" = (/obj/structure/closet/secure_closet/engineering_welding{req_access = null},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"YH" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"YN" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/white,/area/survivalpod/superpose/ScienceShip) +"YX" = (/obj/machinery/autolathe{hacked = 1},/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Za" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/scanning_module/adv{pixel_x = 5; pixel_y = 6},/obj/item/weapon/stock_parts/scanning_module/adv{pixel_x = 5; pixel_y = 6},/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/matter_bin/adv,/obj/item/weapon/stock_parts/matter_bin/adv,/obj/item/weapon/stock_parts/manipulator/hyper,/obj/item/weapon/stock_parts/manipulator/hyper,/obj/item/weapon/stock_parts/capacitor/adv,/obj/item/weapon/stock_parts/capacitor/adv,/turf/simulated/shuttle/floor/purple,/area/survivalpod/superpose/ScienceShip) +"Zc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) +"Zd" = (/turf/simulated/floor/plating,/area/survivalpod/superpose/ScienceShip) +"Zg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/alarms_hidden{dir = 1; pixel_y = -22},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod/superpose/ScienceShip) +"ZJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 22},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/ScienceShip) + +(1,1,1) = {" +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqapoXoXoXoXEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqoXoXsHUloXoXEqEqEqEq +EqEqEqEqEqEqEqEqEqapEqEqEqEqoXUldBYioSbebmbmEqEqEq +EqEqEqEqEqoXWjWjoXsHoXoXbPoXoXriuXOitbbecmbmEqEqEq +EqEqEqEqoXUlBRUzaeXhXQvlKhTpoXIMZcVBklfeoXEqEqEqEq +EqEqEqEqBnpLERxyfDeueueueuGMoXgeZcOigfbebmbmEqEqEq +EqEqEqEqoXUlsIsIoJQChQnQKhiQoXgeZcOikVbecmbmEqEqEq +EqEqEqEqEqoXoXoXoXoXUllHmgoXoXUlnqnVklfeoXEqEqEqEq +EqEqEqEqEqDWsHYNpmIooXEgIQjuNgsKpkpGqebebmbmEqEqEq +EqEqEqEqEqoXUldhrslBoXrPoXoXoXUlInsJtubecmbmEqEqEq +EqEqEqEqEqBnWcIpOGQTtRGPoXumAQoXuuwpUloXoXEqEqEqEq +EqEqoXoXWjoXUlHXOGybUlosfsxkyBoXQHxwytoXoXoXEqEqEq +EqKxBnUNYXzVoXdfOGDsAzCnoXANKhoXLjVYPzAPCXUlUlEqEq +EqfgDpivezDVoXGUEwFbUlGPLCFeKhoXIjynCmdaGlllFtGiEq +EqBnhbAOezIzUloXoXoXoXMcoXIBBzoXIIPSCmVTMgJdJmGiEq +EqBnCznbezNVsTIQJJIQIQLxoXoXoXoXyJOiVJUlhBUZMROhEq +EqBnTFezezQpUloXoXoXoXGPoXRUPkoXRIOiRVUloXoXUlGiEq +EqfgDpJGTeUPoXPvVEVHUlEgchWuRpoXNmteENsvRoWLXzGiEq +EqKxBnluUGZaoXQRqlTBTrCnoXPBcuoXnMzpOiOiSEUloXEqEq +EqKxfgoXWjoXUlseqblWUlUgLCkwZdoXQHxwFVSEUloXEqEqEq +EqEqKxKxEqoXoXtNdSCWoXGPoXKqBzoXuuwpUloXoXEqEqEqEq +EqEqEqEqEqoXUljetgKDoXrPoXoXoXUlYHsJDMbebmbmEqEqEq +EqEqEqEqEqEqoXoXoXoXoXSthRcwZgszOupGSUbecmbmEqEqEq +EqEqEqEqEqEqEqEqoXoXUlFRUloXoXUlVSZJklfeoXEqEqEqEq +EqEqEqEqEqEqEqEqEqEqBSGiUlUlxFyySCOisYbebmbmEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqqhsHCqOulMOiQAbecmbmEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqoXUrIEOiOiklfeoXEqEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqoXUlEHOiOidpbebmbmEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqoXUlDKlKLPbecmbmEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqoXoXsHUloXoXEqEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqbcoXoXoXoXEqEqEq +EqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEq +"} diff --git a/modular_chomp/maps/submaps/shelters/SmallCombatShip-9x11.dmm b/modular_chomp/maps/submaps/shelters/SmallCombatShip-9x11.dmm index 4d7c4f0047..bb268cc20a 100644 --- a/modular_chomp/maps/submaps/shelters/SmallCombatShip-9x11.dmm +++ b/modular_chomp/maps/submaps/shelters/SmallCombatShip-9x11.dmm @@ -1,43 +1,43 @@ -"a" = (/turf/simulated/wall/shull,/area/survivalpod/superpose/SmallCombatShip) -"d" = (/obj/machinery/disperser/front{dir = 1},/turf/template_noop,/area/template_noop) -"f" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) -"g" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) -"h" = (/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) -"l" = (/obj/structure/bed/chair/bay/comfy/red{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) -"m" = (/turf/simulated/wall/rshull,/area/survivalpod/superpose/SmallCombatShip) -"o" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) -"s" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/window/reinforced/survival_pod,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"t" = (/obj/effect/catwalk_plated/dark,/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) -"u" = (/obj/machinery/porta_turret/stationary/syndie{faction = "neutral"},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) -"w" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/walllocker_double/east,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) -"z" = (/obj/structure/salvageable/server,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"A" = (/obj/structure/shuttle/engine/heater,/turf/simulated/wall/shull,/area/survivalpod/superpose/SmallCombatShip) -"C" = (/obj/structure/closet/walllocker_double/kitchen/east{name = "Ration Cabinet"},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/effect/floor_decal/techfloor{dir = 8},/obj/structure/window/reinforced/survival_pod,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"D" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"H" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) -"I" = (/obj/machinery/disperser/middle{dir = 1},/turf/template_noop,/area/template_noop) -"J" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"L" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) -"M" = (/obj/structure/bed/chair/bay/comfy/red{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) -"N" = (/turf/template_noop,/area/template_noop) -"O" = (/obj/machinery/atmospherics/unary/engine{dir = 1},/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) -"Q" = (/obj/machinery/disperser/back{dir = 1},/obj/structure/ship_munition/disperser_charge/explosive,/turf/simulated/wall/rshull,/area/survivalpod/superpose/SmallCombatShip) -"U" = (/obj/structure/bed/chair/bay/comfy/red{dir = 1},/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) -"W" = (/obj/structure/window/plastitanium/full,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/machinery/door/blast/regular/open{dir = 4; id = "stargazer_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/SmallCombatShip) -"X" = (/obj/structure/fans/hardlight/colorable{color = "red"},/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) -"Y" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) -"Z" = (/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) - -(1,1,1) = {" -NNNmNmNNN -NdmmWmmdN -mIWJozWIm -mQmsUCmQm -mmlYfDMmm -NWgYZDgWN -uawaaagau -NaHahXgaN -aaLahaLaa -aAOhthOAa -aONNNNNOa -"} +"a" = (/turf/simulated/wall/shull,/area/survivalpod/superpose/SmallCombatShip) +"d" = (/obj/machinery/disperser/front{dir = 1},/turf/template_noop,/area/template_noop) +"f" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) +"g" = (/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) +"h" = (/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) +"l" = (/obj/structure/bed/chair/bay/comfy/red{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) +"m" = (/turf/simulated/wall/rshull,/area/survivalpod/superpose/SmallCombatShip) +"o" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) +"s" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/window/reinforced/survival_pod,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"t" = (/obj/effect/catwalk_plated/dark,/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) +"u" = (/obj/machinery/porta_turret/stationary/syndie{faction = "neutral"},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) +"w" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/walllocker_double/east,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) +"z" = (/obj/structure/salvageable/server,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"A" = (/obj/structure/shuttle/engine/heater,/turf/simulated/wall/shull,/area/survivalpod/superpose/SmallCombatShip) +"C" = (/obj/structure/closet/walllocker_double/kitchen/east{name = "Ration Cabinet"},/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = -5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/item/device/radio{pixel_x = 5; pixel_y = 5},/obj/effect/floor_decal/techfloor{dir = 8},/obj/structure/window/reinforced/survival_pod,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"D" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"H" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) +"I" = (/obj/machinery/disperser/middle{dir = 1},/turf/template_noop,/area/template_noop) +"J" = (/obj/structure/salvageable/computer,/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"L" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) +"M" = (/obj/structure/bed/chair/bay/comfy/red{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/SmallCombatShip) +"N" = (/turf/template_noop,/area/template_noop) +"O" = (/obj/machinery/atmospherics/unary/engine{dir = 1},/turf/template_noop,/area/survivalpod/superpose/SmallCombatShip) +"Q" = (/obj/machinery/disperser/back{dir = 1},/obj/structure/ship_munition/disperser_charge/explosive,/turf/simulated/wall/rshull,/area/survivalpod/superpose/SmallCombatShip) +"U" = (/obj/structure/bed/chair/bay/comfy/red{dir = 1},/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) +"W" = (/obj/structure/window/plastitanium/full,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/machinery/door/blast/regular/open{dir = 4; id = "stargazer_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/SmallCombatShip) +"X" = (/obj/structure/fans/hardlight/colorable{color = "red"},/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/SmallCombatShip) +"Y" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/SmallCombatShip) +"Z" = (/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/glass,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/steel,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/fiftyspawner/plastic,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/SmallCombatShip) + +(1,1,1) = {" +NNNmNmNNN +NdmmWmmdN +mIWJozWIm +mQmsUCmQm +mmlYfDMmm +NWgYZDgWN +uawaaagau +NaHahXgaN +aaLahaLaa +aAOhthOAa +aONNNNNOa +"} diff --git a/modular_chomp/maps/submaps/shelters/TinyCombatShip-9x7.dmm b/modular_chomp/maps/submaps/shelters/TinyCombatShip-9x7.dmm index 08442097b7..3a3dc7daed 100644 --- a/modular_chomp/maps/submaps/shelters/TinyCombatShip-9x7.dmm +++ b/modular_chomp/maps/submaps/shelters/TinyCombatShip-9x7.dmm @@ -1,33 +1,33 @@ -"a" = (/turf/template_noop,/area/template_noop) -"b" = (/obj/machinery/disperser/front{dir = 1},/turf/template_noop,/area/template_noop) -"c" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) -"f" = (/obj/structure/fans/hardlight/colorable{color = "red"},/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/TinyCombatShip) -"h" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/TinyCombatShip) -"j" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) -"k" = (/turf/simulated/wall/rshull,/area/survivalpod/superpose/TinyCombatShip) -"l" = (/obj/machinery/disperser/back{dir = 1},/obj/structure/ship_munition/disperser_charge/explosive,/turf/simulated/wall/shull,/area/survivalpod/superpose/TinyCombatShip) -"n" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"q" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/structure/window/reinforced/survival_pod,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"s" = (/obj/structure/window/plastitanium/full,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/machinery/door/blast/regular/open{dir = 4; id = "stargazer_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/TinyCombatShip) -"t" = (/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) -"u" = (/obj/machinery/disperser/middle{dir = 1},/turf/template_noop,/area/template_noop) -"x" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/walllocker_double/kitchen/east{name = "Ration Cabinet"},/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"D" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"F" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/TinyCombatShip) -"H" = (/obj/structure/bed/chair/bay/comfy/red{dir = 1},/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) -"L" = (/obj/machinery/atmospherics/unary/engine{dir = 1},/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) -"M" = (/obj/effect/catwalk_plated/dark,/obj/machinery/light/poi{dir = 1},/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) -"P" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"S" = (/turf/simulated/wall/shull,/area/survivalpod/superpose/TinyCombatShip) -"U" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/window/reinforced/survival_pod,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) -"X" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/TinyCombatShip) - -(1,1,1) = {" -aaakskaaa -abkkjkkba -SusUHqsuS -SlSncxSlS -SSFDcPXSS -aShSfShSa -aSLMtMLSa -"} +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/machinery/disperser/front{dir = 1},/turf/template_noop,/area/template_noop) +"c" = (/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) +"f" = (/obj/structure/fans/hardlight/colorable{color = "red"},/obj/machinery/door/airlock/hatch{req_one_access = null},/turf/simulated/floor/plating/external,/area/survivalpod/superpose/TinyCombatShip) +"h" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/external,/area/survivalpod/superpose/TinyCombatShip) +"j" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) +"k" = (/turf/simulated/wall/rshull,/area/survivalpod/superpose/TinyCombatShip) +"l" = (/obj/machinery/disperser/back{dir = 1},/obj/structure/ship_munition/disperser_charge/explosive,/turf/simulated/wall/shull,/area/survivalpod/superpose/TinyCombatShip) +"n" = (/obj/structure/closet/walllocker_double/medical/west,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2,/obj/item/roller,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"q" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/structure/window/reinforced/survival_pod,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"s" = (/obj/structure/window/plastitanium/full,/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/grille/rustic{health = 25; name = "reinforced grille"},/obj/machinery/door/blast/regular/open{dir = 4; id = "stargazer_blast"; name = "window blast shield"},/turf/simulated/shuttle/plating,/area/survivalpod/superpose/TinyCombatShip) +"t" = (/obj/effect/catwalk_plated/dark,/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) +"u" = (/obj/machinery/disperser/middle{dir = 1},/turf/template_noop,/area/template_noop) +"x" = (/obj/item/device/gps,/obj/item/sticky_pad/random,/obj/item/device/starcaster_news,/obj/item/weapon/pen/blue,/obj/item/device/pda,/obj/item/weapon/card/id/external,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/reagent_containers/food/snacks/sosjerky,/obj/item/weapon/gun/energy/locked/phasegun/pistol,/obj/item/weapon/material/knife/tacknife/survival,/obj/item/clothing/accessory/permit/gun,/obj/item/device/camera,/obj/item/device/binoculars,/obj/item/device/threadneedle,/obj/random/soap,/obj/item/weapon/towel/random,/obj/item/bodybag/cryobag,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/color/yellow,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/cell/device/hyper,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/weapon/reagent_containers/pill/spaceacillin,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/suit_cooling_unit/emergency,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,/obj/item/weapon/storage/backpack/messenger,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/poncho/thermal,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/brass,/obj/item/weapon/storage/box/khcrystal,/obj/structure/closet/walllocker_double/kitchen/east{name = "Ration Cabinet"},/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"D" = (/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"F" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/TinyCombatShip) +"H" = (/obj/structure/bed/chair/bay/comfy/red{dir = 1},/obj/machinery/door/window/survival_pod{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/survivalpod/superpose/TinyCombatShip) +"L" = (/obj/machinery/atmospherics/unary/engine{dir = 1},/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) +"M" = (/obj/effect/catwalk_plated/dark,/obj/machinery/light/poi{dir = 1},/turf/template_noop,/area/survivalpod/superpose/TinyCombatShip) +"P" = (/obj/effect/floor_decal/techfloor{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"S" = (/turf/simulated/wall/shull,/area/survivalpod/superpose/TinyCombatShip) +"U" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/structure/window/reinforced/survival_pod,/obj/machinery/light/poi{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/survivalpod/superpose/TinyCombatShip) +"X" = (/obj/structure/closet/crate,/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil/green,/obj/item/stack/cable_coil/blue,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor/tiled/techfloor,/area/survivalpod/superpose/TinyCombatShip) + +(1,1,1) = {" +aaakskaaa +abkkjkkba +SusUHqsuS +SlSncxSlS +SSFDcPXSS +aShSfShSa +aSLMtMLSa +"} diff --git a/modular_chomp/maps/submaps/shelters/TradingShip-40x22.dmm b/modular_chomp/maps/submaps/shelters/TradingShip-40x22.dmm index d3bca8fd24..47b2e45f29 100644 --- a/modular_chomp/maps/submaps/shelters/TradingShip-40x22.dmm +++ b/modular_chomp/maps/submaps/shelters/TradingShip-40x22.dmm @@ -1,3027 +1,3027 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/machinery/button/remote/blast_door{ - id = "tradestarshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"aA" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l" - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"aP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/largecrate/animal/corgi, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bf" = ( -/obj/structure/table/standard, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"bm" = ( -/obj/structure/table/standard, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/suit/space/void/merc, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/head/helmet/space/void/merc, -/obj/item/clothing/head/helmet/space/void/merc, -/obj/item/clothing/head/helmet/space/void/merc, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ca" = ( -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/phoron, -/obj/machinery/smartfridge/survival_pod{ - icon = 'icons/obj/vending.dmi'; - icon_base = "fridge_sci"; - icon_contents = "chem"; - icon_state = "fridge_sci"; - name = "Phoron storage"; - pixel_y = 0 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cC" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cM" = ( -/obj/machinery/vending/medical{ - pixel_y = -32; - req_access = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"cX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"ds" = ( -/obj/machinery/atmospherics/unary/engine/bigger{ - dir = 8 - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"dy" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dP" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate/secure/loot, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dY" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"dZ" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/high, -/obj/item/weapon/cell/hyper, -/obj/item/weapon/cell/potato, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"es" = ( -/obj/structure/table/standard, -/obj/item/stack/material/steel{ - amount = 2 - }, -/obj/item/stack/material/steel{ - amount = 2 - }, -/obj/item/stack/material/glass{ - amount = 15 - }, -/obj/item/stack/material/glass{ - amount = 15 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"eE" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 2; - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"eS" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/item/device/kit/paint/ripley/death, -/obj/item/device/kit/paint/ripley/flames_blue, -/obj/item/device/kit/paint/ripley/flames_red, -/obj/item/device/kit/paint/ripley, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fe" = ( -/obj/machinery/mineral/mint{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fm" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fG" = ( -/obj/machinery/vending/cigarette{ - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/weapon/storage/fancy/cigarettes=10,/obj/item/weapon/storage/box/matches=10,/obj/item/weapon/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fJ" = ( -/obj/machinery/door/airlock/silver{ - name = "Restroom" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"fP" = ( -/obj/vehicle/train/engine, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"fU" = ( -/obj/machinery/door/window/northright{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"gq" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"gA" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"gJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hm" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/remote/blast_door{ - id = "tradebridgeshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(150) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hx" = ( -/obj/structure/window/reinforced, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"hI" = ( -/obj/structure/closet, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"hK" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - emagged = 1; - hacked = 1; - name = "Unlocked Autolathe" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ia" = ( -/obj/machinery/optable, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"jA" = ( -/obj/structure/fans/hardlight, -/obj/machinery/door/airlock/multi_tile/metal/mait, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"jH" = ( -/obj/structure/table/standard, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kd" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/obj/structure/largecrate/animal/cat, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kw" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - dir = 4; - frequency = 1380; - id_tag = "trade_shuttle"; - pixel_x = -25; - req_one_access = list(101); - tag_door = "trade_shuttle_hatch" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kx" = ( -/obj/structure/frame/computer, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kB" = ( -/obj/machinery/button/remote/blast_door{ - id = "tradeportshutters"; - name = "remote shutter control"; - pixel_x = 30; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kO" = ( -/obj/machinery/door/window/northleft{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"kU" = ( -/obj/machinery/access_button{ - master_tag = null; - pixel_x = 27; - pixel_y = -7; - req_one_access = null - }, -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"kV" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/obj/item/weapon/card/id/external{ - access = list(160) - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"lm" = ( -/obj/structure/closet/walllocker_double/north, -/obj/item/device/gps, -/obj/item/sticky_pad/random, -/obj/item/device/starcaster_news, -/obj/item/weapon/pen/blue, -/obj/item/device/pda, -/obj/item/weapon/card/id/external, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/reagent_containers/food/snacks/sosjerky, -/obj/item/weapon/gun/energy/locked/phasegun/pistol, -/obj/item/weapon/material/knife/tacknife/survival, -/obj/item/clothing/accessory/permit/gun, -/obj/item/device/camera, -/obj/item/device/binoculars, -/obj/item/device/threadneedle, -/obj/random/soap, -/obj/item/weapon/towel/random, -/obj/item/bodybag/cryobag, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/color/yellow, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/cell/device/hyper, -/obj/item/weapon/extinguisher/mini, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/weapon/reagent_containers/pill/spaceacillin, -/obj/item/device/fbp_backup_cell, -/obj/item/device/fbp_backup_cell, -/obj/item/device/suit_cooling_unit/emergency, -/obj/item/stack/nanopaste, -/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, -/obj/item/weapon/storage/backpack/messenger, -/obj/item/clothing/accessory/storage/black_drop_pouches, -/obj/item/clothing/accessory/poncho/thermal, -/obj/item/weapon/storage/box/survival/comp, -/obj/item/weapon/storage/toolbox/brass, -/obj/item/weapon/storage/box/khcrystal, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"lv" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"lQ" = ( -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"lW" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"md" = ( -/obj/structure/salvageable/console_os{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mi" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"mF" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"mJ" = ( -/obj/structure/table/standard, -/obj/item/clothing/gloves/sterile/latex, -/obj/item/clothing/mask/surgical, -/obj/item/weapon/surgical/retractor{ - pixel_y = 6 - }, -/obj/item/weapon/surgical/scalpel, -/obj/item/weapon/surgical/surgicaldrill, -/obj/item/weapon/surgical/circular_saw, -/obj/item/stack/nanopaste, -/obj/item/weapon/surgical/hemostat{ - pixel_y = 4 - }, -/obj/item/weapon/surgical/cautery{ - pixel_y = 4 - }, -/obj/item/weapon/surgical/FixOVein{ - pixel_x = -6; - pixel_y = 1 - }, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/weapon/surgical/bonesetter, -/obj/item/weapon/surgical/bonegel{ - pixel_x = 4; - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bookcase, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mR" = ( -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/obj/machinery/light, -/obj/structure/table/glass, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"mY" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/coin/uranium, -/obj/item/weapon/coin/silver, -/obj/item/weapon/coin/platinum, -/obj/item/weapon/coin/phoron, -/obj/item/weapon/coin/iron, -/obj/item/weapon/coin/gold, -/obj/item/weapon/coin/diamond, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nh" = ( -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"nC" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/head/bearpelt, -/obj/item/clothing/head/bowler, -/obj/item/clothing/head/caphat/cap, -/obj/item/clothing/head/beaverhat, -/obj/item/clothing/head/beret/centcom, -/obj/item/clothing/head/beret/sec, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/petehat, -/obj/item/clothing/head/collectable/pirate, -/obj/item/clothing/head/collectable/wizard, -/obj/item/clothing/head/collectable/xenom, -/obj/item/clothing/head/pin/flower/violet, -/obj/item/clothing/head/pin/flower/blue, -/obj/item/clothing/head/pin/flower/orange, -/obj/item/clothing/head/pin/flower/pink, -/obj/item/clothing/head/justice, -/obj/item/clothing/head/justice/blue, -/obj/item/clothing/head/justice/green, -/obj/item/clothing/head/justice/pink, -/obj/item/clothing/head/justice/yellow, -/obj/item/clothing/head/philosopher_wig, -/obj/item/clothing/head/plaguedoctorhat, -/obj/item/clothing/head/xenos, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nD" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nT" = ( -/obj/machinery/vending/sovietsoda, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"nW" = ( -/obj/machinery/vending/snack{ - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"oi" = ( -/obj/structure/table/steel_reinforced, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"pl" = ( -/obj/machinery/door/airlock/glass_engineering{ - name = "Engineering"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"pr" = ( -/obj/machinery/door/airlock/silver{ - name = "Toilet" - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"pU" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"qc" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"qo" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"qz" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/largecrate/animal/corgi, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qT" = ( -/obj/machinery/door/window/southright{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"qV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/largecrate/animal/cat, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"rf" = ( -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"rg" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-10" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"ri" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Quarters"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"rq" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"rx" = ( -/obj/machinery/door/window/westright{ - name = "Storefront"; - req_access = list(160) - }, -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"rG" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"se" = ( -/obj/structure/curtain/open/shower, -/obj/machinery/shower{ - pixel_y = 3 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"sh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/crate/secure/loot, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"sj" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"sT" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"th" = ( -/obj/machinery/iv_drip, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"tu" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/light/small, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"tx" = ( -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"tN" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"tQ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"tX" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/largecrate/hoverpod, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ua" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/box/glasses/square, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"uo" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/item/stack/material/cardboard{ - amount = 50 - }, -/obj/fiftyspawner/blucarpet, -/obj/fiftyspawner/oracarpet, -/obj/fiftyspawner/purcarpet, -/obj/fiftyspawner/sblucarpet, -/obj/fiftyspawner/tealcarpet, -/obj/fiftyspawner/turcarpet, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood{ - amount = 50; - color = "#824B28" - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/hard{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/wood/sif{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/cloth{ - amount = 50 - }, -/obj/item/stack/material/algae{ - amount = 50 - }, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/sandstone, -/obj/item/stack/material/lead{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 30; - pixel_y = 5 - }, -/obj/item/stack/material/resin{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/obj/item/stack/material/smolebricks{ - amount = 50 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uv" = ( -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"uA" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning, -/obj/item/device/kit/paint/gygax/darkgygax, -/obj/item/device/kit/paint/gygax/recitence, -/obj/item/device/kit/paint/durand, -/obj/item/device/kit/paint/durand/phazon, -/obj/item/device/kit/paint/durand/seraph, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uL" = ( -/obj/machinery/light, -/obj/structure/table/standard, -/obj/item/weapon/soap, -/obj/item/weapon/towel{ - color = "#0000FF" - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"uR" = ( -/obj/structure/toilet, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/shuttle/floor/white, -/area/survivalpod/superpose/TradingShip) -"vs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vC" = ( -/obj/machinery/vending/assist{ - contraband = null; - name = "Old Vending Machine"; - products = list(/obj/item/device/assembly/prox_sensor=5,/obj/item/device/assembly/signaler=4,/obj/item/device/assembly/infra=4,/obj/item/device/assembly/prox_sensor=4,/obj/item/weapon/handcuffs=8,/obj/item/device/flash=4,/obj/item/weapon/cartridge/signal=4,/obj/item/clothing/glasses/sunglasses=4) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vL" = ( -/obj/machinery/vending/boozeomat{ - req_access = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"vM" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"wn" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-22" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"wz" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/machinery/access_button{ - dir = 1; - master_tag = null; - pixel_x = -27; - pixel_y = 7; - req_one_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"wT" = ( -/obj/machinery/door/window/southleft{ - name = "Cargo Hold"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xd" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/weapon/weldpack, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xi" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/inflatable_duck, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/obj/random/tech_supply/nofail, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xz" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"xF" = ( -/obj/structure/closet/wardrobe/pjs, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xM" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"xZ" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"yw" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/rd, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"yx" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/rig/internalaffairs, -/obj/item/clothing/head/helmet/space/void/wizard, -/obj/item/clothing/suit/space/void/wizard, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"yN" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"yS" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/green, -/obj/item/stack/cable_coil/blue, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"zh" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"zN" = ( -/obj/machinery/button/remote/blast_door{ - id = "trade"; - name = "Shop Shutters"; - pixel_y = -26 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"Au" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_r" - }, -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"AL" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - id_tag = null - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 4; - frequency = 1331; - id_tag = "trade2_control"; - pixel_x = -25; - req_access = list(150); - tag_airpump = null; - tag_chamber_sensor = null; - tag_exterior_door = null; - tag_interior_door = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"AR" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Be" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/simulated/shuttle/plating/airless, -/area/survivalpod/superpose/TradingShip) -"BH" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/gloves/black, -/obj/item/clothing/gloves/blue, -/obj/item/clothing/gloves/brown, -/obj/item/clothing/gloves/captain, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/green, -/obj/item/clothing/gloves/grey, -/obj/item/clothing/gloves/light_brown, -/obj/item/clothing/gloves/purple, -/obj/item/clothing/gloves/rainbow, -/obj/item/clothing/gloves/swat, -/obj/item/clothing/gloves/white, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"BU" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"Cu" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"CV" = ( -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"DT" = ( -/obj/machinery/light, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"DX" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/item/slimepotion/stabilizer, -/obj/item/slimepotion/steroid, -/obj/item/slimepotion/unity, -/obj/item/slimepotion/friendship, -/obj/item/slimepotion/friendship, -/obj/item/slimepotion/feeding, -/obj/item/slimepotion/docility, -/obj/item/slimepotion/enhancer, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"EK" = ( -/obj/machinery/door/airlock/silver{ - name = "Sleeping" - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"ET" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Fy" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/obj/item/weapon/card/id/casino{ - desc = "An alien id card with strange glowing markings."; - icon_state = "changeling"; - name = "Alien id" - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"FL" = ( -/obj/machinery/door/window/westleft{ - name = "Storefront"; - req_access = list(160) - }, -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "trade"; - name = "Shop Shutters"; - opacity = 0 - }, -/obj/structure/table/marble, -/obj/machinery/cash_register/civilian{ - dir = 4 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"FW" = ( -/obj/machinery/door/airlock/external{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Ship Hatch"; - req_access = null - }, -/obj/structure/fans/hardlight, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"Gb" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"Gk" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"GN" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/airlock_sensor{ - dir = 8; - id_tag = null; - pixel_x = 27 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - id_tag = null - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"GS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/mecha/working/ripley/firefighter, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"GU" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/vending/foodstuffing, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Hh" = ( -/obj/structure/table/steel_reinforced, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/curseditem, -/obj/random/curseditem, -/obj/random/curseditem, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Hp" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/box/donkpockets, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"HB" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/structure/closet/crate/solar, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"HC" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"HP" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Ii" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"IL" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"Jg" = ( -/obj/structure/window/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"JF" = ( -/obj/machinery/vending/foodasian, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"JI" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"JN" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Km" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/largecrate/animal/cow, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Ko" = ( -/obj/structure/table/glass, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Kv" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/lipstick/black, -/obj/item/weapon/lipstick/jade, -/obj/item/weapon/lipstick/purple, -/obj/item/weapon/lipstick, -/obj/item/weapon/lipstick/random, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Lp" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Lt" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/under/cheongsam, -/obj/item/clothing/under/hosformalmale, -/obj/item/clothing/under/hosformalfem, -/obj/item/clothing/under/harness, -/obj/item/clothing/under/gladiator, -/obj/item/clothing/under/ert, -/obj/item/clothing/under/schoolgirl, -/obj/item/clothing/under/redcoat, -/obj/item/clothing/under/sexymime, -/obj/item/clothing/under/sexyclown, -/obj/item/clothing/under/soviet, -/obj/item/clothing/under/space, -/obj/item/clothing/under/swimsuit/stripper/mankini, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/rank/psych/turtleneck, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/tacticool, -/obj/item/clothing/under/syndicate/tacticool, -/obj/item/clothing/under/dress/sailordress, -/obj/item/clothing/under/dress/redeveninggown, -/obj/item/clothing/under/dress/dress_saloon, -/obj/item/clothing/under/dress/blacktango, -/obj/item/clothing/under/dress/blacktango/alt, -/obj/item/clothing/under/dress/dress_orange, -/obj/item/clothing/under/dress/maid/janitor, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"LX" = ( -/obj/machinery/vending/foodfish, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Mc" = ( -/turf/template_noop, -/area/template_noop) -"Mk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate/internals, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"MO" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/captain, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"MP" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/accessory/holster/hip, -/obj/item/clothing/accessory/holster/armpit, -/obj/item/clothing/accessory/holster/armpit, -/obj/item/clothing/accessory/holster/hip, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/webbing, -/obj/item/clothing/accessory/storage/webbing, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/scarf/white, -/obj/item/clothing/accessory/scarf/lightblue, -/obj/item/clothing/accessory/scarf/red, -/obj/item/clothing/accessory/scarf/purple, -/obj/item/clothing/accessory/armband/science, -/obj/item/clothing/accessory/armband/med, -/obj/item/clothing/accessory/armband/engine, -/obj/item/clothing/accessory/armband/cargo, -/obj/item/clothing/accessory/armband, -/obj/item/clothing/accessory/medal/nobel_science, -/obj/item/clothing/accessory/medal/silver, -/obj/item/clothing/accessory/medal/gold, -/obj/item/clothing/accessory/medal/bronze_heart, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"MT" = ( -/turf/simulated/shuttle/wall/dark, -/area/survivalpod/superpose/TradingShip) -"No" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/atm{ - pixel_x = -32 - }, -/obj/machinery/meter, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Nq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/mecha/working/ripley/mining, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"NE" = ( -/obj/vehicle/train/trolley, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"NJ" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = 32 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"NQ" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Od" = ( -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 5 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 5 - }, -/obj/item/weapon/storage/firstaid/o2{ - layer = 2.8; - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/weapon/storage/box/masks, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/fire{ - layer = 2.9; - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = -2 - }, -/obj/item/weapon/reagent_containers/blood/empty, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"OE" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"OK" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/suit/hgpirate, -/obj/item/clothing/suit/imperium_monk, -/obj/item/clothing/suit/leathercoat, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/justice, -/obj/item/clothing/suit/pirate, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Pb" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/sign/kiddieplaque{ - desc = "A plaque commemorating the construction of the cargo ship Beruang."; - name = "Beruang"; - pixel_x = 32 - }, -/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"Pv" = ( -/obj/machinery/atm{ - pixel_x = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"PW" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/flora/pottedplant{ - icon_state = "plant-09"; - name = "Esteban"; - pixel_y = 8 - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Qm" = ( -/obj/structure/closet/wardrobe/captain, -/obj/item/weapon/gun/projectile/revolver/mateba, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Qp" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"QB" = ( -/obj/machinery/sleep_console, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"QQ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"Ry" = ( -/obj/structure/table/steel_reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/pen{ - pixel_y = 4 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Sp" = ( -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Sy" = ( -/obj/machinery/atmospherics/pipe/tank/air{ - start_pressure = 740.5 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"SE" = ( -/turf/simulated/shuttle/wall/dark/hard_corner, -/area/survivalpod/superpose/TradingShip) -"SI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/largecrate/hoverpod, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"SR" = ( -/obj/machinery/vending/tool{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"SV" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/item/stack/material/phoron{ - material = 50 - }, -/obj/random/cash/huge, -/obj/random/cash/huge, -/obj/random/cash/huge, -/obj/random/cash/huge, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Tb" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/survivalpod/superpose/TradingShip) -"TJ" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/hos, -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"TK" = ( -/obj/machinery/door/airlock/multi_tile/glass, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"TU" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"Uw" = ( -/obj/machinery/vending/coffee, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Uy" = ( -/obj/structure/closet{ - name = "custodial" - }, -/obj/item/weapon/reagent_containers/spray/cleaner, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/mop, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Uz" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradestarshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"VL" = ( -/obj/machinery/vending/engivend{ - emagged = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"VP" = ( -/obj/machinery/door/airlock/glass_medical{ - name = "Medical Bay"; - req_access = null; - req_one_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"VX" = ( -/obj/structure/table/steel_reinforced, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"VY" = ( -/obj/machinery/suit_cycler/syndicate, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Wy" = ( -/obj/structure/table/steel_reinforced, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/item/weapon/bikehorn, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"WG" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"WK" = ( -/obj/structure/table/steel_reinforced, -/obj/item/stack/material/mhydrogen, -/obj/item/stack/material/diamond, -/obj/item/stack/material/sandstone, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"WL" = ( -/obj/machinery/door/window/westleft{ - name = "Storefront"; - req_access = list(160) - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Xi" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"Xy" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"XH" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - req_access = null - }, -/turf/simulated/shuttle/floor/voidcraft/dark, -/area/survivalpod/superpose/TradingShip) -"XL" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradeportshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) -"XO" = ( -/turf/simulated/shuttle/plating/airless/carry, -/area/survivalpod/superpose/TradingShip) -"Yc" = ( -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Yi" = ( -/obj/structure/table/steel_reinforced, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/random/plushie, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"Zs" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/shuttle/floor/darkred, -/area/survivalpod/superpose/TradingShip) -"ZD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/shuttle/floor/black, -/area/survivalpod/superpose/TradingShip) -"ZX" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id = "tradebridgeshutters"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced/full, -/turf/simulated/shuttle/plating, -/area/survivalpod/superpose/TradingShip) - -(1,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(2,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(3,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -MT -Xi -ZX -MT -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(4,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -MT -MT -kx -md -MT -MT -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(5,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -rq -Ii -CV -Zs -Ry -qo -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(6,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -TU -PW -Pb -CV -hm -WG -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(7,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -MT -MT -MT -tx -MT -MT -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(8,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -MT -uR -pr -Sp -vC -MT -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(9,1,1) = {" -Mc -Mc -Mc -MT -Uz -pU -MT -Mc -MT -MT -SE -Sp -Uy -MT -Mc -MT -lv -XL -MT -Mc -Mc -Mc -"} -(10,1,1) = {" -Mc -Mc -MT -SE -Qp -xF -MT -Mc -MT -tu -MT -Sp -nT -MT -Mc -MT -Qm -Sp -SE -MT -Mc -Mc -"} -(11,1,1) = {" -Mc -Mc -MT -hI -Sp -mR -MT -Mc -MT -mF -fJ -Sp -uL -MT -Mc -MT -mK -Sp -MO -MT -Mc -Mc -"} -(12,1,1) = {" -Mc -Mc -MT -yw -Sp -TJ -MT -Mc -MT -se -MT -Xy -Yc -MT -Mc -MT -fm -Sp -Ko -MT -Mc -Mc -"} -(13,1,1) = {" -Mc -Mc -MT -MT -EK -MT -MT -MT -MT -SE -ET -Sp -Sp -MT -MT -MT -MT -ri -MT -MT -Mc -Mc -"} -(14,1,1) = {" -Mc -Mc -MT -Gk -Sp -Sp -MT -MT -MT -MT -MT -rf -eE -SE -MT -Sp -Sp -Sp -xZ -MT -Mc -Mc -"} -(15,1,1) = {" -Mc -Mc -MT -HC -Sp -Sp -AR -MT -Uw -nW -fG -Sp -Sp -vL -MT -HP -Sp -Sp -Sp -MT -Mc -Mc -"} -(16,1,1) = {" -Mc -Mc -xz -sj -uv -vM -Sp -XH -Sp -Sp -CV -CV -Sp -Sp -XH -Sp -uv -qc -Gb -cX -Mc -Mc -"} -(17,1,1) = {" -Mc -Mc -Jg -BU -Hp -ua -Sp -rf -Sp -CV -CV -CV -CV -Sp -rf -Sp -OE -kV -Cu -rG -Mc -Mc -"} -(18,1,1) = {" -Mc -Mc -mi -wn -Tb -NJ -aa -MT -Sp -CV -qV -aP -CV -Sp -MT -kB -yN -Fy -rg -JI -Mc -Mc -"} -(19,1,1) = {" -Mc -Mc -MT -MT -MT -MT -MT -SE -Sp -CV -Km -qz -CV -Sp -SE -MT -MT -MT -MT -MT -Mc -Mc -"} -(20,1,1) = {" -Mc -Mc -Mc -MT -MT -xi -nD -oi -zh -CV -ZD -Mk -CV -DT -Lp -Wy -Hh -MT -MT -Mc -Mc -Mc -"} -(21,1,1) = {" -Mc -Mc -Mc -Mc -xz -WK -kD -wT -Sp -CV -eS -uA -CV -Sp -kO -vs -Kv -cX -Mc -Mc -Mc -Mc -"} -(22,1,1) = {" -Mc -Mc -Mc -Mc -Jg -yx -gJ -mY -Sp -CV -sh -dP -CV -Sp -Yi -gq -MP -rG -Mc -Mc -Mc -Mc -"} -(23,1,1) = {" -Mc -Mc -Mc -Mc -mi -DX -cV -qT -Sp -CV -SI -tX -CV -Sp -fU -bk -Lt -JI -Mc -Mc -Mc -Mc -"} -(24,1,1) = {" -Mc -Mc -Mc -MT -MT -VX -xd -dZ -Sp -CV -Nq -GS -CV -Sp -BH -nC -OK -MT -MT -Mc -Mc -Mc -"} -(25,1,1) = {" -Mc -Mc -MT -MT -MT -IL -QQ -tQ -MT -CV -CV -CV -CV -MT -IL -QQ -tQ -MT -MT -MT -Mc -Mc -"} -(26,1,1) = {" -Mc -SE -MT -SE -Pv -fP -NE -NE -MT -Sp -CV -CV -Sp -MT -Sy -kd -HB -No -SE -MT -SE -Mc -"} -(27,1,1) = {" -Mc -jA -kw -jA -Sp -CV -CV -CV -TK -CV -CV -CV -CV -TK -CV -CV -CV -dy -wz -AL -FW -Mc -"} -(28,1,1) = {" -Mc -lQ -xM -lQ -Sp -CV -CV -Sp -rf -Sp -CV -CV -Sp -rf -Sp -CV -CV -cC -nh -GN -kU -Mc -"} -(29,1,1) = {" -Mc -SE -MT -SE -VY -Sp -Sp -AR -SE -hx -rx -FL -WL -SE -HP -Sp -Sp -Sp -SE -MT -SE -Mc -"} -(30,1,1) = {" -Mc -Mc -MT -MT -MT -VP -VP -SE -MT -gA -tN -CV -Sp -MT -SE -pl -pl -MT -MT -MT -Mc -Mc -"} -(31,1,1) = {" -Mc -Mc -Mc -xz -sT -Sp -Sp -MT -SV -CV -CV -CV -zN -jH -MT -Sp -Sp -bm -cX -Mc -Mc -Mc -"} -(32,1,1) = {" -Mc -Mc -Mc -mi -JN -Sp -DT -MT -ca -CV -CV -CV -CV -lW -MT -zh -Sp -bf -JI -Mc -Mc -Mc -"} -(33,1,1) = {" -Mc -Mc -MT -SE -Od -Sp -cM -SE -MT -fe -LX -JF -GU -MT -MT -lm -Sp -es -MT -MT -Mc -Mc -"} -(34,1,1) = {" -Mc -MT -MT -QB -Sp -Sp -Sp -mJ -MT -MT -MT -MT -MT -MT -VL -Sp -Sp -Sp -yS -MT -MT -Mc -"} -(35,1,1) = {" -Mc -MT -MT -NQ -dY -ia -Sp -th -MT -Be -Be -Be -Be -MT -SR -Sp -uo -dY -hK -MT -MT -Mc -"} -(36,1,1) = {" -Mc -MT -MT -MT -MT -MT -MT -MT -MT -Au -XO -ds -aA -MT -MT -MT -MT -MT -MT -MT -MT -Mc -"} -(37,1,1) = {" -Mc -MT -Be -Be -Be -Be -MT -MT -Mc -Mc -Mc -Mc -Mc -Mc -MT -MT -Be -Be -Be -Be -MT -Mc -"} -(38,1,1) = {" -Mc -MT -Au -XO -ds -aA -MT -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -MT -Au -XO -ds -aA -MT -Mc -"} -(39,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} -(40,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/machinery/button/remote/blast_door{ + id = "tradestarshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"aA" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4; + icon_state = "propulsion_l" + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"aP" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/largecrate/animal/corgi, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bf" = ( +/obj/structure/table/standard, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bk" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"bm" = ( +/obj/structure/table/standard, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/suit/space/void/merc, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/head/helmet/space/void/merc, +/obj/item/clothing/head/helmet/space/void/merc, +/obj/item/clothing/head/helmet/space/void/merc, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ca" = ( +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/phoron, +/obj/machinery/smartfridge/survival_pod{ + icon = 'icons/obj/vending.dmi'; + icon_base = "fridge_sci"; + icon_contents = "chem"; + icon_state = "fridge_sci"; + name = "Phoron storage"; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cC" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cM" = ( +/obj/machinery/vending/medical{ + pixel_y = -32; + req_access = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"cX" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"ds" = ( +/obj/machinery/atmospherics/unary/engine/bigger{ + dir = 8 + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"dy" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dP" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/closet/crate/secure/loot, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dY" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"dZ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/high, +/obj/item/weapon/cell/hyper, +/obj/item/weapon/cell/potato, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"es" = ( +/obj/structure/table/standard, +/obj/item/stack/material/steel{ + amount = 2 + }, +/obj/item/stack/material/steel{ + amount = 2 + }, +/obj/item/stack/material/glass{ + amount = 15 + }, +/obj/item/stack/material/glass{ + amount = 15 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"eE" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2; + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"eS" = ( +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/device/kit/paint/ripley/death, +/obj/item/device/kit/paint/ripley/flames_blue, +/obj/item/device/kit/paint/ripley/flames_red, +/obj/item/device/kit/paint/ripley, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fe" = ( +/obj/machinery/mineral/mint{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fm" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fG" = ( +/obj/machinery/vending/cigarette{ + name = "hacked cigarette machine"; + prices = list(); + products = list(/obj/item/weapon/storage/fancy/cigarettes=10,/obj/item/weapon/storage/box/matches=10,/obj/item/weapon/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fJ" = ( +/obj/machinery/door/airlock/silver{ + name = "Restroom" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"fP" = ( +/obj/vehicle/train/engine, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"fU" = ( +/obj/machinery/door/window/northright{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"gq" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"gA" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"gJ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hm" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/button/remote/blast_door{ + id = "tradebridgeshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(150) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hx" = ( +/obj/structure/window/reinforced, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"hI" = ( +/obj/structure/closet, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"hK" = ( +/obj/machinery/autolathe{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + emagged = 1; + hacked = 1; + name = "Unlocked Autolathe" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ia" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"jA" = ( +/obj/structure/fans/hardlight, +/obj/machinery/door/airlock/multi_tile/metal/mait, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"jH" = ( +/obj/structure/table/standard, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kd" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/obj/structure/largecrate/animal/cat, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kw" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + dir = 4; + frequency = 1380; + id_tag = "trade_shuttle"; + pixel_x = -25; + req_one_access = list(101); + tag_door = "trade_shuttle_hatch" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kx" = ( +/obj/structure/frame/computer, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kB" = ( +/obj/machinery/button/remote/blast_door{ + id = "tradeportshutters"; + name = "remote shutter control"; + pixel_x = 30; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kD" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kO" = ( +/obj/machinery/door/window/northleft{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"kU" = ( +/obj/machinery/access_button{ + master_tag = null; + pixel_x = 27; + pixel_y = -7; + req_one_access = null + }, +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"kV" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/obj/item/weapon/card/id/external{ + access = list(160) + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"lm" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/device/gps, +/obj/item/sticky_pad/random, +/obj/item/device/starcaster_news, +/obj/item/weapon/pen/blue, +/obj/item/device/pda, +/obj/item/weapon/card/id/external, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/reagent_containers/food/snacks/sosjerky, +/obj/item/weapon/gun/energy/locked/phasegun/pistol, +/obj/item/weapon/material/knife/tacknife/survival, +/obj/item/clothing/accessory/permit/gun, +/obj/item/device/camera, +/obj/item/device/binoculars, +/obj/item/device/threadneedle, +/obj/random/soap, +/obj/item/weapon/towel/random, +/obj/item/bodybag/cryobag, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/color/yellow, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/cell/device/hyper, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/glass/beaker/vial/tricordrazine, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/weapon/reagent_containers/pill/spaceacillin, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/suit_cooling_unit/emergency, +/obj/item/stack/nanopaste, +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting, +/obj/item/weapon/storage/backpack/messenger, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/poncho/thermal, +/obj/item/weapon/storage/box/survival/comp, +/obj/item/weapon/storage/toolbox/brass, +/obj/item/weapon/storage/box/khcrystal, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"lv" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"lQ" = ( +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"lW" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"md" = ( +/obj/structure/salvageable/console_os{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mi" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"mF" = ( +/obj/structure/mirror{ + pixel_y = 28 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"mJ" = ( +/obj/structure/table/standard, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/clothing/mask/surgical, +/obj/item/weapon/surgical/retractor{ + pixel_y = 6 + }, +/obj/item/weapon/surgical/scalpel, +/obj/item/weapon/surgical/surgicaldrill, +/obj/item/weapon/surgical/circular_saw, +/obj/item/stack/nanopaste, +/obj/item/weapon/surgical/hemostat{ + pixel_y = 4 + }, +/obj/item/weapon/surgical/cautery{ + pixel_y = 4 + }, +/obj/item/weapon/surgical/FixOVein{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/weapon/surgical/bonesetter, +/obj/item/weapon/surgical/bonegel{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bookcase, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mR" = ( +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/machinery/light, +/obj/structure/table/glass, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"mY" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/coin/uranium, +/obj/item/weapon/coin/silver, +/obj/item/weapon/coin/platinum, +/obj/item/weapon/coin/phoron, +/obj/item/weapon/coin/iron, +/obj/item/weapon/coin/gold, +/obj/item/weapon/coin/diamond, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nh" = ( +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"nC" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/head/bearpelt, +/obj/item/clothing/head/bowler, +/obj/item/clothing/head/caphat/cap, +/obj/item/clothing/head/beaverhat, +/obj/item/clothing/head/beret/centcom, +/obj/item/clothing/head/beret/sec, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/kitty, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/rabbitears, +/obj/item/clothing/head/collectable/petehat, +/obj/item/clothing/head/collectable/pirate, +/obj/item/clothing/head/collectable/wizard, +/obj/item/clothing/head/collectable/xenom, +/obj/item/clothing/head/pin/flower/violet, +/obj/item/clothing/head/pin/flower/blue, +/obj/item/clothing/head/pin/flower/orange, +/obj/item/clothing/head/pin/flower/pink, +/obj/item/clothing/head/justice, +/obj/item/clothing/head/justice/blue, +/obj/item/clothing/head/justice/green, +/obj/item/clothing/head/justice/pink, +/obj/item/clothing/head/justice/yellow, +/obj/item/clothing/head/philosopher_wig, +/obj/item/clothing/head/plaguedoctorhat, +/obj/item/clothing/head/xenos, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nD" = ( +/obj/structure/table/steel_reinforced, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/firstaid, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nT" = ( +/obj/machinery/vending/sovietsoda, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"nW" = ( +/obj/machinery/vending/snack{ + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"oi" = ( +/obj/structure/table/steel_reinforced, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"pl" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Engineering"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"pr" = ( +/obj/machinery/door/airlock/silver{ + name = "Toilet" + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"pU" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"qc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"qo" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"qz" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/largecrate/animal/corgi, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qT" = ( +/obj/machinery/door/window/southright{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"qV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/largecrate/animal/cat, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"rf" = ( +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"rg" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-10" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"ri" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"rq" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"rx" = ( +/obj/machinery/door/window/westright{ + name = "Storefront"; + req_access = list(160) + }, +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"rG" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"se" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + pixel_y = 3 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"sh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/crate/secure/loot, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"sj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"sT" = ( +/obj/machinery/bodyscanner{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"th" = ( +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"tu" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/machinery/light/small, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"tx" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"tN" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"tQ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"tX" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/largecrate/hoverpod, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ua" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/glasses/square, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"uo" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/item/stack/material/cardboard{ + amount = 50 + }, +/obj/fiftyspawner/blucarpet, +/obj/fiftyspawner/oracarpet, +/obj/fiftyspawner/purcarpet, +/obj/fiftyspawner/sblucarpet, +/obj/fiftyspawner/tealcarpet, +/obj/fiftyspawner/turcarpet, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood{ + amount = 50; + color = "#824B28" + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/hard{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/wood/sif{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/cloth{ + amount = 50 + }, +/obj/item/stack/material/algae{ + amount = 50 + }, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/sandstone, +/obj/item/stack/material/lead{ + amount = 30 + }, +/obj/item/stack/material/plasteel{ + amount = 30; + pixel_y = 5 + }, +/obj/item/stack/material/resin{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/obj/item/stack/material/smolebricks{ + amount = 50 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uv" = ( +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"uA" = ( +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning, +/obj/item/device/kit/paint/gygax/darkgygax, +/obj/item/device/kit/paint/gygax/recitence, +/obj/item/device/kit/paint/durand, +/obj/item/device/kit/paint/durand/phazon, +/obj/item/device/kit/paint/durand/seraph, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uL" = ( +/obj/machinery/light, +/obj/structure/table/standard, +/obj/item/weapon/soap, +/obj/item/weapon/towel{ + color = "#0000FF" + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"uR" = ( +/obj/structure/toilet, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/survivalpod/superpose/TradingShip) +"vs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vC" = ( +/obj/machinery/vending/assist{ + contraband = null; + name = "Old Vending Machine"; + products = list(/obj/item/device/assembly/prox_sensor=5,/obj/item/device/assembly/signaler=4,/obj/item/device/assembly/infra=4,/obj/item/device/assembly/prox_sensor=4,/obj/item/weapon/handcuffs=8,/obj/item/device/flash=4,/obj/item/weapon/cartridge/signal=4,/obj/item/clothing/glasses/sunglasses=4) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vL" = ( +/obj/machinery/vending/boozeomat{ + req_access = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"vM" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"wn" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-22" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"wz" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/machinery/access_button{ + dir = 1; + master_tag = null; + pixel_x = -27; + pixel_y = 7; + req_one_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"wT" = ( +/obj/machinery/door/window/southleft{ + name = "Cargo Hold"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xd" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/item/weapon/weldpack, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xi" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/inflatable_duck, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/obj/random/tech_supply/nofail, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xz" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"xF" = ( +/obj/structure/closet/wardrobe/pjs, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xM" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"xZ" = ( +/obj/structure/filingcabinet/filingcabinet, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"yw" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/rd, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"yx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/rig/internalaffairs, +/obj/item/clothing/head/helmet/space/void/wizard, +/obj/item/clothing/suit/space/void/wizard, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"yN" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"yS" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/blue, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/obj/item/weapon/storage/briefcase/inflatable, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"zh" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"zN" = ( +/obj/machinery/button/remote/blast_door{ + id = "trade"; + name = "Shop Shutters"; + pixel_y = -26 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"Au" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4; + icon_state = "propulsion_r" + }, +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"AL" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + id_tag = null + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 4; + frequency = 1331; + id_tag = "trade2_control"; + pixel_x = -25; + req_access = list(150); + tag_airpump = null; + tag_chamber_sensor = null; + tag_exterior_door = null; + tag_interior_door = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"AR" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Be" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/turf/simulated/shuttle/plating/airless, +/area/survivalpod/superpose/TradingShip) +"BH" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/gloves/black, +/obj/item/clothing/gloves/blue, +/obj/item/clothing/gloves/brown, +/obj/item/clothing/gloves/captain, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/green, +/obj/item/clothing/gloves/grey, +/obj/item/clothing/gloves/light_brown, +/obj/item/clothing/gloves/purple, +/obj/item/clothing/gloves/rainbow, +/obj/item/clothing/gloves/swat, +/obj/item/clothing/gloves/white, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"BU" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"Cu" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"CV" = ( +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"DT" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"DX" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/item/slimepotion/stabilizer, +/obj/item/slimepotion/steroid, +/obj/item/slimepotion/unity, +/obj/item/slimepotion/friendship, +/obj/item/slimepotion/friendship, +/obj/item/slimepotion/feeding, +/obj/item/slimepotion/docility, +/obj/item/slimepotion/enhancer, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"EK" = ( +/obj/machinery/door/airlock/silver{ + name = "Sleeping" + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"ET" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Fy" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/obj/item/weapon/card/id/casino{ + desc = "An alien id card with strange glowing markings."; + icon_state = "changeling"; + name = "Alien id" + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"FL" = ( +/obj/machinery/door/window/westleft{ + name = "Storefront"; + req_access = list(160) + }, +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "trade"; + name = "Shop Shutters"; + opacity = 0 + }, +/obj/structure/table/marble, +/obj/machinery/cash_register/civilian{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"FW" = ( +/obj/machinery/door/airlock/external{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Ship Hatch"; + req_access = null + }, +/obj/structure/fans/hardlight, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"Gb" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"Gk" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"GN" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/airlock_sensor{ + dir = 8; + id_tag = null; + pixel_x = 27 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + id_tag = null + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"GS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/mecha/working/ripley/firefighter, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"GU" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/vending/foodstuffing, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Hh" = ( +/obj/structure/table/steel_reinforced, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/random/curseditem, +/obj/random/curseditem, +/obj/random/curseditem, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Hp" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/donkpockets, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"HB" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/closet/crate/solar, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"HC" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"HP" = ( +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Ii" = ( +/obj/machinery/computer/arcade/battle, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"IL" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"Jg" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"JF" = ( +/obj/machinery/vending/foodasian, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"JI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"JN" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Km" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/largecrate/animal/cow, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Ko" = ( +/obj/structure/table/glass, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Kv" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/lipstick/black, +/obj/item/weapon/lipstick/jade, +/obj/item/weapon/lipstick/purple, +/obj/item/weapon/lipstick, +/obj/item/weapon/lipstick/random, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Lp" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Lt" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/under/cheongsam, +/obj/item/clothing/under/hosformalmale, +/obj/item/clothing/under/hosformalfem, +/obj/item/clothing/under/harness, +/obj/item/clothing/under/gladiator, +/obj/item/clothing/under/ert, +/obj/item/clothing/under/schoolgirl, +/obj/item/clothing/under/redcoat, +/obj/item/clothing/under/sexymime, +/obj/item/clothing/under/sexyclown, +/obj/item/clothing/under/soviet, +/obj/item/clothing/under/space, +/obj/item/clothing/under/swimsuit/stripper/mankini, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/rank/psych/turtleneck, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/tacticool, +/obj/item/clothing/under/syndicate/tacticool, +/obj/item/clothing/under/dress/sailordress, +/obj/item/clothing/under/dress/redeveninggown, +/obj/item/clothing/under/dress/dress_saloon, +/obj/item/clothing/under/dress/blacktango, +/obj/item/clothing/under/dress/blacktango/alt, +/obj/item/clothing/under/dress/dress_orange, +/obj/item/clothing/under/dress/maid/janitor, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"LX" = ( +/obj/machinery/vending/foodfish, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Mc" = ( +/turf/template_noop, +/area/template_noop) +"Mk" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/closet/crate/internals, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"MO" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/captain, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"MP" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/webbing, +/obj/item/clothing/accessory/storage/webbing, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/scarf/white, +/obj/item/clothing/accessory/scarf/lightblue, +/obj/item/clothing/accessory/scarf/red, +/obj/item/clothing/accessory/scarf/purple, +/obj/item/clothing/accessory/armband/science, +/obj/item/clothing/accessory/armband/med, +/obj/item/clothing/accessory/armband/engine, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/clothing/accessory/armband, +/obj/item/clothing/accessory/medal/nobel_science, +/obj/item/clothing/accessory/medal/silver, +/obj/item/clothing/accessory/medal/gold, +/obj/item/clothing/accessory/medal/bronze_heart, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"MT" = ( +/turf/simulated/shuttle/wall/dark, +/area/survivalpod/superpose/TradingShip) +"No" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/atm{ + pixel_x = -32 + }, +/obj/machinery/meter, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Nq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/mecha/working/ripley/mining, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"NE" = ( +/obj/vehicle/train/trolley, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"NJ" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = 32 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"NQ" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Od" = ( +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 5 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 5 + }, +/obj/item/weapon/storage/firstaid/o2{ + layer = 2.8; + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/fire{ + layer = 2.9; + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = -2 + }, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/structure/closet/medical_wall{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"OE" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"OK" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/suit/hgpirate, +/obj/item/clothing/suit/imperium_monk, +/obj/item/clothing/suit/leathercoat, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/justice, +/obj/item/clothing/suit/pirate, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Pb" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/kiddieplaque{ + desc = "A plaque commemorating the construction of the cargo ship Beruang."; + name = "Beruang"; + pixel_x = 32 + }, +/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"Pv" = ( +/obj/machinery/atm{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"PW" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/flora/pottedplant{ + icon_state = "plant-09"; + name = "Esteban"; + pixel_y = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Qm" = ( +/obj/structure/closet/wardrobe/captain, +/obj/item/weapon/gun/projectile/revolver/mateba, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Qp" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"QB" = ( +/obj/machinery/sleep_console, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"QQ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"Ry" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Sp" = ( +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Sy" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + start_pressure = 740.5 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"SE" = ( +/turf/simulated/shuttle/wall/dark/hard_corner, +/area/survivalpod/superpose/TradingShip) +"SI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/largecrate/hoverpod, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"SR" = ( +/obj/machinery/vending/tool{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"SV" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/item/stack/material/phoron{ + material = 50 + }, +/obj/random/cash/huge, +/obj/random/cash/huge, +/obj/random/cash/huge, +/obj/random/cash/huge, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Tb" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/survivalpod/superpose/TradingShip) +"TJ" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/hos, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"TK" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"TU" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"Uw" = ( +/obj/machinery/vending/coffee, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Uy" = ( +/obj/structure/closet{ + name = "custodial" + }, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/mop, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Uz" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradestarshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"VL" = ( +/obj/machinery/vending/engivend{ + emagged = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"VP" = ( +/obj/machinery/door/airlock/glass_medical{ + name = "Medical Bay"; + req_access = null; + req_one_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"VX" = ( +/obj/structure/table/steel_reinforced, +/obj/random/toolbox, +/obj/random/toolbox, +/obj/random/toolbox, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"VY" = ( +/obj/machinery/suit_cycler/syndicate, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Wy" = ( +/obj/structure/table/steel_reinforced, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/item/weapon/bikehorn, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"WG" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"WK" = ( +/obj/structure/table/steel_reinforced, +/obj/item/stack/material/mhydrogen, +/obj/item/stack/material/diamond, +/obj/item/stack/material/sandstone, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"WL" = ( +/obj/machinery/door/window/westleft{ + name = "Storefront"; + req_access = list(160) + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Xi" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"Xy" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"XH" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + req_access = null + }, +/turf/simulated/shuttle/floor/voidcraft/dark, +/area/survivalpod/superpose/TradingShip) +"XL" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradeportshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) +"XO" = ( +/turf/simulated/shuttle/plating/airless/carry, +/area/survivalpod/superpose/TradingShip) +"Yc" = ( +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Yi" = ( +/obj/structure/table/steel_reinforced, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"Zs" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/shuttle/floor/darkred, +/area/survivalpod/superpose/TradingShip) +"ZD" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/shuttle/floor/black, +/area/survivalpod/superpose/TradingShip) +"ZX" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "tradebridgeshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/plating, +/area/survivalpod/superpose/TradingShip) + +(1,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(2,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(3,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +MT +Xi +ZX +MT +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(4,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +MT +MT +kx +md +MT +MT +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(5,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +rq +Ii +CV +Zs +Ry +qo +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(6,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +TU +PW +Pb +CV +hm +WG +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(7,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +MT +MT +MT +tx +MT +MT +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(8,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +MT +uR +pr +Sp +vC +MT +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(9,1,1) = {" +Mc +Mc +Mc +MT +Uz +pU +MT +Mc +MT +MT +SE +Sp +Uy +MT +Mc +MT +lv +XL +MT +Mc +Mc +Mc +"} +(10,1,1) = {" +Mc +Mc +MT +SE +Qp +xF +MT +Mc +MT +tu +MT +Sp +nT +MT +Mc +MT +Qm +Sp +SE +MT +Mc +Mc +"} +(11,1,1) = {" +Mc +Mc +MT +hI +Sp +mR +MT +Mc +MT +mF +fJ +Sp +uL +MT +Mc +MT +mK +Sp +MO +MT +Mc +Mc +"} +(12,1,1) = {" +Mc +Mc +MT +yw +Sp +TJ +MT +Mc +MT +se +MT +Xy +Yc +MT +Mc +MT +fm +Sp +Ko +MT +Mc +Mc +"} +(13,1,1) = {" +Mc +Mc +MT +MT +EK +MT +MT +MT +MT +SE +ET +Sp +Sp +MT +MT +MT +MT +ri +MT +MT +Mc +Mc +"} +(14,1,1) = {" +Mc +Mc +MT +Gk +Sp +Sp +MT +MT +MT +MT +MT +rf +eE +SE +MT +Sp +Sp +Sp +xZ +MT +Mc +Mc +"} +(15,1,1) = {" +Mc +Mc +MT +HC +Sp +Sp +AR +MT +Uw +nW +fG +Sp +Sp +vL +MT +HP +Sp +Sp +Sp +MT +Mc +Mc +"} +(16,1,1) = {" +Mc +Mc +xz +sj +uv +vM +Sp +XH +Sp +Sp +CV +CV +Sp +Sp +XH +Sp +uv +qc +Gb +cX +Mc +Mc +"} +(17,1,1) = {" +Mc +Mc +Jg +BU +Hp +ua +Sp +rf +Sp +CV +CV +CV +CV +Sp +rf +Sp +OE +kV +Cu +rG +Mc +Mc +"} +(18,1,1) = {" +Mc +Mc +mi +wn +Tb +NJ +aa +MT +Sp +CV +qV +aP +CV +Sp +MT +kB +yN +Fy +rg +JI +Mc +Mc +"} +(19,1,1) = {" +Mc +Mc +MT +MT +MT +MT +MT +SE +Sp +CV +Km +qz +CV +Sp +SE +MT +MT +MT +MT +MT +Mc +Mc +"} +(20,1,1) = {" +Mc +Mc +Mc +MT +MT +xi +nD +oi +zh +CV +ZD +Mk +CV +DT +Lp +Wy +Hh +MT +MT +Mc +Mc +Mc +"} +(21,1,1) = {" +Mc +Mc +Mc +Mc +xz +WK +kD +wT +Sp +CV +eS +uA +CV +Sp +kO +vs +Kv +cX +Mc +Mc +Mc +Mc +"} +(22,1,1) = {" +Mc +Mc +Mc +Mc +Jg +yx +gJ +mY +Sp +CV +sh +dP +CV +Sp +Yi +gq +MP +rG +Mc +Mc +Mc +Mc +"} +(23,1,1) = {" +Mc +Mc +Mc +Mc +mi +DX +cV +qT +Sp +CV +SI +tX +CV +Sp +fU +bk +Lt +JI +Mc +Mc +Mc +Mc +"} +(24,1,1) = {" +Mc +Mc +Mc +MT +MT +VX +xd +dZ +Sp +CV +Nq +GS +CV +Sp +BH +nC +OK +MT +MT +Mc +Mc +Mc +"} +(25,1,1) = {" +Mc +Mc +MT +MT +MT +IL +QQ +tQ +MT +CV +CV +CV +CV +MT +IL +QQ +tQ +MT +MT +MT +Mc +Mc +"} +(26,1,1) = {" +Mc +SE +MT +SE +Pv +fP +NE +NE +MT +Sp +CV +CV +Sp +MT +Sy +kd +HB +No +SE +MT +SE +Mc +"} +(27,1,1) = {" +Mc +jA +kw +jA +Sp +CV +CV +CV +TK +CV +CV +CV +CV +TK +CV +CV +CV +dy +wz +AL +FW +Mc +"} +(28,1,1) = {" +Mc +lQ +xM +lQ +Sp +CV +CV +Sp +rf +Sp +CV +CV +Sp +rf +Sp +CV +CV +cC +nh +GN +kU +Mc +"} +(29,1,1) = {" +Mc +SE +MT +SE +VY +Sp +Sp +AR +SE +hx +rx +FL +WL +SE +HP +Sp +Sp +Sp +SE +MT +SE +Mc +"} +(30,1,1) = {" +Mc +Mc +MT +MT +MT +VP +VP +SE +MT +gA +tN +CV +Sp +MT +SE +pl +pl +MT +MT +MT +Mc +Mc +"} +(31,1,1) = {" +Mc +Mc +Mc +xz +sT +Sp +Sp +MT +SV +CV +CV +CV +zN +jH +MT +Sp +Sp +bm +cX +Mc +Mc +Mc +"} +(32,1,1) = {" +Mc +Mc +Mc +mi +JN +Sp +DT +MT +ca +CV +CV +CV +CV +lW +MT +zh +Sp +bf +JI +Mc +Mc +Mc +"} +(33,1,1) = {" +Mc +Mc +MT +SE +Od +Sp +cM +SE +MT +fe +LX +JF +GU +MT +MT +lm +Sp +es +MT +MT +Mc +Mc +"} +(34,1,1) = {" +Mc +MT +MT +QB +Sp +Sp +Sp +mJ +MT +MT +MT +MT +MT +MT +VL +Sp +Sp +Sp +yS +MT +MT +Mc +"} +(35,1,1) = {" +Mc +MT +MT +NQ +dY +ia +Sp +th +MT +Be +Be +Be +Be +MT +SR +Sp +uo +dY +hK +MT +MT +Mc +"} +(36,1,1) = {" +Mc +MT +MT +MT +MT +MT +MT +MT +MT +Au +XO +ds +aA +MT +MT +MT +MT +MT +MT +MT +MT +Mc +"} +(37,1,1) = {" +Mc +MT +Be +Be +Be +Be +MT +MT +Mc +Mc +Mc +Mc +Mc +Mc +MT +MT +Be +Be +Be +Be +MT +Mc +"} +(38,1,1) = {" +Mc +MT +Au +XO +ds +aA +MT +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +MT +Au +XO +ds +aA +MT +Mc +"} +(39,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} +(40,1,1) = {" +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +Mc +"} diff --git a/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend.dm b/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend.dm index 5d1ced799b..dfe43d37a0 100644 --- a/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend.dm +++ b/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend.dm @@ -1,34 +1,34 @@ -#if MAP_TEST -#include "bloodcit.dmm" -#include "unfinishedoutpost.dmm" -#include "eclipseprison.dmm" -#include "thehive.dmm" -#endif - -/datum/map_template/surface/valley/end - name = "Surface Content - Valley's End" - desc = "The end of the line" - -/datum/map_template/surface/valley/end/bloodcitadal - name = "Blood Citadal" - desc = "A base brimming with fire and cultists" - mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/bloodcit.dmm' - cost = 200 - -/datum/map_template/surface/valley/end/unfinishedoutpost - name = "Unfinished Outpost" - desc = "An outpost yet to be finished, and doom to never be complete" - mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/unfinishedoutpost.dmm' - cost = 200 - -/datum/map_template/surface/valley/end/eclipseprison - name = "Eclipse Prison" - desc = "An eclipse mining facility, with a strange and heavly guarded portal" - mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/eclipseprison.dmm' - cost = 200 - -/datum/map_template/surface/valley/end/thehive - name = "The Hive" - desc = "Oh more xenomoprhs, fun." - mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/thehive.dmm' +#if MAP_TEST +#include "bloodcit.dmm" +#include "unfinishedoutpost.dmm" +#include "eclipseprison.dmm" +#include "thehive.dmm" +#endif + +/datum/map_template/surface/valley/end + name = "Surface Content - Valley's End" + desc = "The end of the line" + +/datum/map_template/surface/valley/end/bloodcitadal + name = "Blood Citadal" + desc = "A base brimming with fire and cultists" + mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/bloodcit.dmm' + cost = 200 + +/datum/map_template/surface/valley/end/unfinishedoutpost + name = "Unfinished Outpost" + desc = "An outpost yet to be finished, and doom to never be complete" + mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/unfinishedoutpost.dmm' + cost = 200 + +/datum/map_template/surface/valley/end/eclipseprison + name = "Eclipse Prison" + desc = "An eclipse mining facility, with a strange and heavly guarded portal" + mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/eclipseprison.dmm' + cost = 200 + +/datum/map_template/surface/valley/end/thehive + name = "The Hive" + desc = "Oh more xenomoprhs, fun." + mappath = 'modular_chomp/maps/submaps/surface_submaps/valleyend/thehive.dmm' cost = 200 \ No newline at end of file diff --git a/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend_areas.dm b/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend_areas.dm index 397a7f2c56..d2dbeaa909 100644 --- a/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend_areas.dm +++ b/modular_chomp/maps/submaps/surface_submaps/valleyend/valleyend_areas.dm @@ -1,16 +1,16 @@ -/area/submap/bloodcitadel - name = "Poi Valley End - Blood Citadel" - ambience = AMBIENCE_UNHOLY - -/area/submap/eclipseprison - name = "Poi Valley End - Eclipse Prison" - requires_power = FALSE - ambience = AMBIENCE_TECH_RUINS - -/area/submap/unfinishedoutpost - name = "Poi Valley End - Unfinished Outpost" - ambience = AMBIENCE_HIGHSEC - -/area/submap/thehive - name = "Poi Valley End - The Hive" +/area/submap/bloodcitadel + name = "Poi Valley End - Blood Citadel" + ambience = AMBIENCE_UNHOLY + +/area/submap/eclipseprison + name = "Poi Valley End - Eclipse Prison" + requires_power = FALSE + ambience = AMBIENCE_TECH_RUINS + +/area/submap/unfinishedoutpost + name = "Poi Valley End - Unfinished Outpost" + ambience = AMBIENCE_HIGHSEC + +/area/submap/thehive + name = "Poi Valley End - The Hive" ambience = AMBIENCE_RUINS \ No newline at end of file diff --git a/tools/Runtime Condenser/Main.cpp b/tools/Runtime Condenser/Main.cpp index bfae67dbe1..ae5e66a484 100644 --- a/tools/Runtime Condenser/Main.cpp +++ b/tools/Runtime Condenser/Main.cpp @@ -1,314 +1,314 @@ -/* Runtime Condenser by Nodrak - * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance - * of the runtime will log the proc, source, usr and src, the rest will just add to the total. Infinite loops will - * also be caught and displayed (if any) above the list of runtimes. - * - * How to use: - * 1) Copy and paste your list of runtimes from Dream Daemon into input.exe - * 2) Run RuntimeCondenser.exe - * 3) Open output.txt for a condensed report of the runtimes - */ - -#include -#include -#include -using namespace std; - -//Make all of these global. It's bad yes, but it's a small program so it really doesn't affect anything. - //Because hardcoded numbers are bad :( - const unsigned short maxStorage = 99; //100 - 1 - - //What we use to read input - string currentLine = "Blank"; - string nextLine = "Blank"; - - //Stores lines we want to keep to print out - string storedRuntime[maxStorage+1]; - string storedProc[maxStorage+1]; - string storedSource[maxStorage+1]; - string storedUsr[maxStorage+1]; - string storedSrc[maxStorage+1]; - - //Stat tracking stuff for output - unsigned int totalRuntimes = 0; - unsigned int totalUniqueRuntimes = 0; - unsigned int totalInfiniteLoops = 0; - unsigned int totalUniqueInfiniteLoops = 0; - - //Misc - unsigned int numRuntime[maxStorage+1]; //Number of times a specific runtime has occured - bool checkNextLines = false; //Used in case byond has condensed a large number of similar runtimes - int storedIterator = 0; //Used to remember where we stored the runtime - -bool readFromFile() -{ - //Open file to read - ifstream inputFile("input.txt"); - - if(inputFile.is_open()) - { - while(!inputFile.eof()) //Until end of file - { - //If we've run out of storage - if(storedRuntime[maxStorage] != "Blank") break; - - //Update our lines - currentLine = nextLine; - getline(inputFile, nextLine); - - //After finding a new runtime, check to see if there are extra values to store - if(checkNextLines) - { - //Skip ahead - currentLine = nextLine; - getline(inputFile, nextLine); - - //If we find this, we have new stuff to store - if(nextLine.find("usr:") != std::string::npos) - { - //Store more info - storedSource[storedIterator] = currentLine; - storedUsr[storedIterator] = nextLine; - - //Skip ahead again - currentLine = nextLine; - getline(inputFile, nextLine); - - //Store the last of the info - storedSrc[storedIterator] = nextLine; - } - checkNextLines = false; - } - - //Found an infinite loop! - if(currentLine.find("Infinite loop suspected") != std::string::npos || currentLine.find("Maximum recursion level reached") != std::string::npos) - { - totalInfiniteLoops++; - - for(int i=0; i <= maxStorage; i++) - { - //We've already encountered this - if(currentLine == storedRuntime[i]) - { - numRuntime[i]++; - break; - } - - //We've never encoutnered this - if(storedRuntime[i] == "Blank") - { - storedRuntime[i] = currentLine; - currentLine = nextLine; - getline(inputFile, nextLine); //Skip the "if this is not an infinite loop" line - storedProc[i] = nextLine; - numRuntime[i] = 1; - checkNextLines = true; - storedIterator = i; - totalUniqueInfiniteLoops++; - break; - } - } - } - //Found a runtime! - else if(currentLine.find("runtime error:") != std::string::npos) - { - totalRuntimes++; - for(int i=0; i <= maxStorage; i++) - { - //We've already encountered this - if(currentLine == storedRuntime[i]) - { - numRuntime[i]++; - break; - } - - //We've never encoutnered this - if(storedRuntime[i] == "Blank") - { - storedRuntime[i] = currentLine; - storedProc[i] = nextLine; - numRuntime[i] = 1; - checkNextLines = true; - storedIterator = i; - totalUniqueRuntimes++; - break; - } - } - } - } - } - else - { - return false; - } - return true; -} - -bool writeToFile() -{ - //Open and clear the file - ofstream outputFile("Output.txt", ios::trunc); - - if(outputFile.is_open()) - { - outputFile << "Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; - if(totalUniqueInfiniteLoops > 0) - { - outputFile << "Total unique infinite loops: " << totalUniqueInfiniteLoops << endl; - } - if(totalInfiniteLoops > 0) - { - outputFile << "Total infinite loops: " << totalInfiniteLoops << endl; - } - outputFile << "Total unique runtimes: " << totalUniqueRuntimes << endl; - outputFile << "Total runtimes: " << totalRuntimes << endl << endl; - - //Display a warning if we've hit the maximum space we've allocated for storage - if(totalUniqueRuntimes + totalUniqueInfiniteLoops >= maxStorage) - { - outputFile << "Warning: The maximum number of unique runtimes has been hit. If there were more, they have been cropped out.\n\n"; - } - - - //If we have infinite loops, display them first. - if(totalInfiniteLoops > 0) - { - outputFile << "** Infinite loops **"; - for(int i=0; i <= maxStorage; i++) - { - if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) - { - if(numRuntime[i] != 0) outputFile << endl << endl << "The following infinite loop has occured " << numRuntime[i] << " time(s).\n"; - if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; - if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; - if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; - if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; - if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; - } - } - outputFile << endl << endl; //For spacing - } - - - //Do runtimes next - outputFile << "** Runtimes **"; - for(int i=0; i <= maxStorage; i++) - { - if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) continue; - - if(numRuntime[i] != 0) outputFile << endl << endl << "The following runtime has occured " << numRuntime[i] << " time(s).\n"; - if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; - if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; - if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; - if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; - if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; - } - outputFile.close(); - } - else - { - return false; - } - return true; -} - -void sortRuntimes() -{ - string tempRuntime[maxStorage+1]; - string tempProc[maxStorage+1]; - string tempSource[maxStorage+1]; - string tempUsr[maxStorage+1]; - string tempSrc[maxStorage+1]; - unsigned int tempNumRuntime[maxStorage+1]; - unsigned int highestCount = 0; //Used for descending order -// int keepLooping = 0; - - //Move all of our data into temporary arrays. Also clear the stored data (not necessary but.. just incase) - for(int i=0; i <= maxStorage; i++) - { - //Get the largest occurance of a single runtime - if(highestCount < numRuntime[i]) - { - highestCount = numRuntime[i]; - } - - tempRuntime[i] = storedRuntime[i]; storedRuntime[i] = "Blank"; - tempProc[i] = storedProc[i]; storedProc[i] = "Blank"; - tempSource[i] = storedSource[i]; storedSource[i] = "Blank"; - tempUsr[i] = storedUsr[i]; storedUsr[i] = "Blank"; - tempSrc[i] = storedSrc[i]; storedSrc[i] = "Blank"; - tempNumRuntime[i] = numRuntime[i]; numRuntime[i] = 0; - } - - while(highestCount > 0) - { - for(int i=0; i <= maxStorage; i++) //For every runtime - { - if(tempNumRuntime[i] == highestCount) //If the number of occurances of that runtime is equal to our current highest - { - for(int j=0; j <= maxStorage; j++) //Find the next available slot and store the info - { - if(storedRuntime[j] == "Blank") //Found an empty spot - { - storedRuntime[j] = tempRuntime[i]; - storedProc[j] = tempProc[i]; - storedSource[j] = tempSource[i]; - storedUsr[j] = tempUsr[i]; - storedSrc[j] = tempSrc[i]; - numRuntime[j] = tempNumRuntime[i]; - break; - } - } - } - } - highestCount--; //Lower our 'highest' by one and continue - } -} - - -int main() { - char exit; //Used to stop the program from immediatly exiting - - //Start everything fresh. "Blank" should never occur in the runtime logs on its own. - for(int i=0; i <= maxStorage; i++) - { - storedRuntime[i] = "Blank"; - storedProc[i] = "Blank"; - storedSource[i] = "Blank"; - storedUsr[i] = "Blank"; - storedSrc[i] = "Blank"; - numRuntime[i] = 0; - - } - - if(readFromFile()) - { - cout << "Input read successfully!\n"; - } - else - { - cout << "Input failed to open, shutting down.\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 1; - } - - sortRuntimes(); - - if(writeToFile()) - { - cout << "Output was successful!\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 0; - } - else - { - cout << "The output file could not be opened, shutting down.\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 0; - } - - return 0; -} +/* Runtime Condenser by Nodrak + * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance + * of the runtime will log the proc, source, usr and src, the rest will just add to the total. Infinite loops will + * also be caught and displayed (if any) above the list of runtimes. + * + * How to use: + * 1) Copy and paste your list of runtimes from Dream Daemon into input.exe + * 2) Run RuntimeCondenser.exe + * 3) Open output.txt for a condensed report of the runtimes + */ + +#include +#include +#include +using namespace std; + +//Make all of these global. It's bad yes, but it's a small program so it really doesn't affect anything. + //Because hardcoded numbers are bad :( + const unsigned short maxStorage = 99; //100 - 1 + + //What we use to read input + string currentLine = "Blank"; + string nextLine = "Blank"; + + //Stores lines we want to keep to print out + string storedRuntime[maxStorage+1]; + string storedProc[maxStorage+1]; + string storedSource[maxStorage+1]; + string storedUsr[maxStorage+1]; + string storedSrc[maxStorage+1]; + + //Stat tracking stuff for output + unsigned int totalRuntimes = 0; + unsigned int totalUniqueRuntimes = 0; + unsigned int totalInfiniteLoops = 0; + unsigned int totalUniqueInfiniteLoops = 0; + + //Misc + unsigned int numRuntime[maxStorage+1]; //Number of times a specific runtime has occured + bool checkNextLines = false; //Used in case byond has condensed a large number of similar runtimes + int storedIterator = 0; //Used to remember where we stored the runtime + +bool readFromFile() +{ + //Open file to read + ifstream inputFile("input.txt"); + + if(inputFile.is_open()) + { + while(!inputFile.eof()) //Until end of file + { + //If we've run out of storage + if(storedRuntime[maxStorage] != "Blank") break; + + //Update our lines + currentLine = nextLine; + getline(inputFile, nextLine); + + //After finding a new runtime, check to see if there are extra values to store + if(checkNextLines) + { + //Skip ahead + currentLine = nextLine; + getline(inputFile, nextLine); + + //If we find this, we have new stuff to store + if(nextLine.find("usr:") != std::string::npos) + { + //Store more info + storedSource[storedIterator] = currentLine; + storedUsr[storedIterator] = nextLine; + + //Skip ahead again + currentLine = nextLine; + getline(inputFile, nextLine); + + //Store the last of the info + storedSrc[storedIterator] = nextLine; + } + checkNextLines = false; + } + + //Found an infinite loop! + if(currentLine.find("Infinite loop suspected") != std::string::npos || currentLine.find("Maximum recursion level reached") != std::string::npos) + { + totalInfiniteLoops++; + + for(int i=0; i <= maxStorage; i++) + { + //We've already encountered this + if(currentLine == storedRuntime[i]) + { + numRuntime[i]++; + break; + } + + //We've never encoutnered this + if(storedRuntime[i] == "Blank") + { + storedRuntime[i] = currentLine; + currentLine = nextLine; + getline(inputFile, nextLine); //Skip the "if this is not an infinite loop" line + storedProc[i] = nextLine; + numRuntime[i] = 1; + checkNextLines = true; + storedIterator = i; + totalUniqueInfiniteLoops++; + break; + } + } + } + //Found a runtime! + else if(currentLine.find("runtime error:") != std::string::npos) + { + totalRuntimes++; + for(int i=0; i <= maxStorage; i++) + { + //We've already encountered this + if(currentLine == storedRuntime[i]) + { + numRuntime[i]++; + break; + } + + //We've never encoutnered this + if(storedRuntime[i] == "Blank") + { + storedRuntime[i] = currentLine; + storedProc[i] = nextLine; + numRuntime[i] = 1; + checkNextLines = true; + storedIterator = i; + totalUniqueRuntimes++; + break; + } + } + } + } + } + else + { + return false; + } + return true; +} + +bool writeToFile() +{ + //Open and clear the file + ofstream outputFile("Output.txt", ios::trunc); + + if(outputFile.is_open()) + { + outputFile << "Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; + if(totalUniqueInfiniteLoops > 0) + { + outputFile << "Total unique infinite loops: " << totalUniqueInfiniteLoops << endl; + } + if(totalInfiniteLoops > 0) + { + outputFile << "Total infinite loops: " << totalInfiniteLoops << endl; + } + outputFile << "Total unique runtimes: " << totalUniqueRuntimes << endl; + outputFile << "Total runtimes: " << totalRuntimes << endl << endl; + + //Display a warning if we've hit the maximum space we've allocated for storage + if(totalUniqueRuntimes + totalUniqueInfiniteLoops >= maxStorage) + { + outputFile << "Warning: The maximum number of unique runtimes has been hit. If there were more, they have been cropped out.\n\n"; + } + + + //If we have infinite loops, display them first. + if(totalInfiniteLoops > 0) + { + outputFile << "** Infinite loops **"; + for(int i=0; i <= maxStorage; i++) + { + if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) + { + if(numRuntime[i] != 0) outputFile << endl << endl << "The following infinite loop has occured " << numRuntime[i] << " time(s).\n"; + if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; + if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; + if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; + if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; + if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; + } + } + outputFile << endl << endl; //For spacing + } + + + //Do runtimes next + outputFile << "** Runtimes **"; + for(int i=0; i <= maxStorage; i++) + { + if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) continue; + + if(numRuntime[i] != 0) outputFile << endl << endl << "The following runtime has occured " << numRuntime[i] << " time(s).\n"; + if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; + if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; + if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; + if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; + if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; + } + outputFile.close(); + } + else + { + return false; + } + return true; +} + +void sortRuntimes() +{ + string tempRuntime[maxStorage+1]; + string tempProc[maxStorage+1]; + string tempSource[maxStorage+1]; + string tempUsr[maxStorage+1]; + string tempSrc[maxStorage+1]; + unsigned int tempNumRuntime[maxStorage+1]; + unsigned int highestCount = 0; //Used for descending order +// int keepLooping = 0; + + //Move all of our data into temporary arrays. Also clear the stored data (not necessary but.. just incase) + for(int i=0; i <= maxStorage; i++) + { + //Get the largest occurance of a single runtime + if(highestCount < numRuntime[i]) + { + highestCount = numRuntime[i]; + } + + tempRuntime[i] = storedRuntime[i]; storedRuntime[i] = "Blank"; + tempProc[i] = storedProc[i]; storedProc[i] = "Blank"; + tempSource[i] = storedSource[i]; storedSource[i] = "Blank"; + tempUsr[i] = storedUsr[i]; storedUsr[i] = "Blank"; + tempSrc[i] = storedSrc[i]; storedSrc[i] = "Blank"; + tempNumRuntime[i] = numRuntime[i]; numRuntime[i] = 0; + } + + while(highestCount > 0) + { + for(int i=0; i <= maxStorage; i++) //For every runtime + { + if(tempNumRuntime[i] == highestCount) //If the number of occurances of that runtime is equal to our current highest + { + for(int j=0; j <= maxStorage; j++) //Find the next available slot and store the info + { + if(storedRuntime[j] == "Blank") //Found an empty spot + { + storedRuntime[j] = tempRuntime[i]; + storedProc[j] = tempProc[i]; + storedSource[j] = tempSource[i]; + storedUsr[j] = tempUsr[i]; + storedSrc[j] = tempSrc[i]; + numRuntime[j] = tempNumRuntime[i]; + break; + } + } + } + } + highestCount--; //Lower our 'highest' by one and continue + } +} + + +int main() { + char exit; //Used to stop the program from immediatly exiting + + //Start everything fresh. "Blank" should never occur in the runtime logs on its own. + for(int i=0; i <= maxStorage; i++) + { + storedRuntime[i] = "Blank"; + storedProc[i] = "Blank"; + storedSource[i] = "Blank"; + storedUsr[i] = "Blank"; + storedSrc[i] = "Blank"; + numRuntime[i] = 0; + + } + + if(readFromFile()) + { + cout << "Input read successfully!\n"; + } + else + { + cout << "Input failed to open, shutting down.\n"; + cout << "\nEnter any letter to quit.\n"; + cin >> exit; + return 1; + } + + sortRuntimes(); + + if(writeToFile()) + { + cout << "Output was successful!\n"; + cout << "\nEnter any letter to quit.\n"; + cin >> exit; + return 0; + } + else + { + cout << "The output file could not be opened, shutting down.\n"; + cout << "\nEnter any letter to quit.\n"; + cin >> exit; + return 0; + } + + return 0; +}